ZGlmZiAtLWdpdCBhL3NyYy9BVVRIT1JTIGIvc3JjL0FVVEhPUlMKaW5kZXggZDM2NTEzNy4uOTljYzEzOSAxMDA2NDQKLS0tIGEvc3JjL0FVVEhPUlMKKysrIGIvc3JjL0FVVEhPUlMKQEAgLTE2LDMgKzE2LDQgQEAKIE5WSURJQSA8KkBudmlkaWEuY29tPgogTWVkaWFUZWsgPCpAbWVkaWF0ZWsuY29tPgogTUlQUyA8KkBtaXBzLmNvbT4KK1Zld2QgPCpAdmV3ZC5jb20+CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9iYXNlLmd5cCBiL3NyYy9iYXNlL2Jhc2UuZ3lwCmluZGV4IDIzZWY2ODkuLjU4ZmEzNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Jhc2UuZ3lwCisrKyBiL3NyYy9iYXNlL2Jhc2UuZ3lwCkBAIC0zMDAsMTAgKzMwMCwxMCBAQAogICAgICAgICAncnVuX2FsbF91bml0dGVzdHMnLAogICAgICAgICAndGVzdF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAndGhpcmRfcGFydHkvZHluYW1pY19hbm5vdGF0aW9ucy9keW5hbWljX2Fubm90YXRpb25zLmd5cDpkeW5hbWljX2Fubm90YXRpb25zJywKLSAgICAgICAgJy4uL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJy4uL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdWkxOG4nLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAorICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAorICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAorICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1aTE4bicsCisgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCiAgICAgICBdLAogICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICMgVE9ETyhhandvbmcpOiBJcyB0aGVyZSBhIHdheSB0byBhdXRvZGV0ZWN0IHRoaXM/CkBAIC0zMzUsOCArMzM1LDggQEAKICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKICAgICAgICAgJ2Jhc2UnLAotICAgICAgICAnYmFzZV9zdGF0aWMnLAogICAgICAgICAnYmFzZV9pMThuJywKKyAgICAgICAgJ2Jhc2Vfc3RhdGljJywKICAgICAgIF0sCiAgICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKICAgICAgICAgJ2Jhc2UnLApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9DSEFOR0VMT0cubWQgYi9zcmMvY29iYWx0L0NIQU5HRUxPRy5tZAppbmRleCA0NGYyNGYyLi40ZmY4MDc5IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L0NIQU5HRUxPRy5tZAorKysgYi9zcmMvY29iYWx0L0NIQU5HRUxPRy5tZApAQCAtNDAsNiArNDAsMjEgQEAKICAgIGNvbmZpZ3VyYXRpb25zIHByZXZlbnRlZCBJUHY2IHVzZSBhZnRlciBjb25uZWN0IHRpbWUuIFRoaXMgY2F1c2VkIHRoZQogICAgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gdG8gYXBwZWFyIGFzIGlmIG5vIG5ldHdvcmsgd2FzIGF2YWlsYWJsZS4KIAorIC0gKipFbmFibGUgdm9pY2UgaW50ZXJhY3Rpb25zKioKKworICAgQSBzdWJzZXQgb2YgV2ViUlRDIEFQSXMgaGFzIGJlZW4gYWRkZWQuIGBnZXRVc2VyTWVkaWFgIGNhbiBiZSB1c2VkIHRvIGdldAorICAgYXVkaW8gaW5wdXQgc3RyZWFtIGZyb20gdGhlIG1pY3JvcGhvbmUuIFRoZSBtZWRpYSBzdHJlYW0gY2FuIHRoZW4gYmUKKyAgIGNvbm5lY3RlZCB0byBgTWVkaWFSZWNvcmRlcmAgdG8gcmVjZWl2ZSB0aGUgYXVkaW8gZGF0YSBzdG9yZWQgYXMgYEJsb2JgCisgICBvYmplY3RzIHdoaWNoIGNhbiBsYXRlciBiZSBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgYWxsb3dzIHdlYiBhcHBzIHRvCisgICBpbXBsZW1lbnQgdm9pY2UtZW5hYmxlZCBmZWF0dXJlcyB3aXRob3V0IHJlbHlpbmcgb24gdGhlIHBsYXRmb3JtJ3MgY2FwYWJpbGl0eQorICAgdG8gcGVyZm9ybSBzcGVlY2ggcmVjb2duaXRpb24uCisKKyAtICoqQmlzb24gMiBkZXByZWNhdGlvbioqCisKKyAgIFN1cHBvcnQgZm9yIGNvbXBpbGluZyB3aXRoIHZlcnNpb24gMi54IG9mIHRoZSBHTlUgYmlzb24gcGFyc2VyIGdlbmVyYXRvcgorICAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoaXMgdmVyc2lvbi4gUGxlYXNlIHVwZ3JhZGUKKyAgIHRvIGJpc29uIDMueC4KKwogIyMgVmVyc2lvbiAxNgogIC0gKipSZWJhc2UgbGlid2VicCB0byB2ZXJzaW9uIDEuMC4wKioKIApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9icm93c2VyL2FwcGxpY2F0aW9uLmNjIGIvc3JjL2NvYmFsdC9icm93c2VyL2FwcGxpY2F0aW9uLmNjCmluZGV4IDI1MTFlMzUuLjEyMTRlYTMgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvYnJvd3Nlci9hcHBsaWNhdGlvbi5jYworKysgYi9zcmMvY29iYWx0L2Jyb3dzZXIvYXBwbGljYXRpb24uY2MKQEAgLTkyMCw5ICs5MjAsOSBAQAogICAgICAgRExPRyhJTkZPKSA8PCAiRmluaXNoZWQgc3VzcGVuZGluZy4iOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBrU2JFdmVudFR5cGVSZXN1bWU6Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgICAgICBEQ0hFQ0soU2JTeXN0ZW1TdXBwb3J0c1Jlc3VtZSgpKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogICAgICAgRExPRyhJTkZPKSA8PCAiR290IHJlc3VtZSBldmVudC4iOwogICAgICAgYXBwX3N0YXR1c18gPSBrUGF1c2VkQXBwU3RhdHVzOwogICAgICAgKythcHBfcmVzdW1lX2NvdW50XzsKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5jYyBiL3NyYy9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5jYwppbmRleCBmNDhlZTg3Li4zZTZiZmZiIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9tb2R1bGUuY2MKKysrIGIvc3JjL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfbW9kdWxlLmNjCkBAIC0xNDgyLDEwICsxNDgyLDEwIEBACiAgICAgICAgICAgLlBhc3MoKTsKICAgSW5zdGFudGlhdGVSZW5kZXJlck1vZHVsZSgpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIG9wdGlvbnNfLm1lZGlhX21vZHVsZV9vcHRpb25zLmFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kID0KICAgICAgIFNiU3lzdGVtU3VwcG9ydHNSZXN1bWUoKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogICBtZWRpYV9tb2R1bGVfID0KICAgICAgIG1lZGlhOjpNZWRpYU1vZHVsZTo6Q3JlYXRlKHN5c3RlbV93aW5kb3dfLmdldCgpLCBHZXRSZXNvdXJjZVByb3ZpZGVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zXy5tZWRpYV9tb2R1bGVfb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2J1aWxkL2J1aWxkLmlkIGIvc3JjL2NvYmFsdC9idWlsZC9idWlsZC5pZAppbmRleCAzNThlNGMwLi5mMjQ1ZjExIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2J1aWxkL2J1aWxkLmlkCisrKyBiL3NyYy9jb2JhbHQvYnVpbGQvYnVpbGQuaWQKQEAgLTEgKzEgQEAKLTE4MDk4MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzE4MTkxOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvYnVpbGQvY29iYWx0X2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3NyYy9jb2JhbHQvYnVpbGQvY29iYWx0X2NvbmZpZ3VyYXRpb24uZ3lwaQppbmRleCBhYTZjZGU5Li43MzA3NGQ1IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2J1aWxkL2NvYmFsdF9jb25maWd1cmF0aW9uLmd5cGkKKysrIGIvc3JjL2NvYmFsdC9idWlsZC9jb2JhbHRfY29uZmlndXJhdGlvbi5neXBpCkBAIC0zOTYsMTQgKzM5NiwxMyBAQAogICAgICMgVGhpcyBjYW4gYmUgc2V0IHRvIDAuCiAgICAgJ2NvYmFsdF9tZWRpYV9idWZmZXJfaW5pdGlhbF9jYXBhY2l0eSUnOiAyMSAqIDEwMjQgKiAxMDI0LAogICAgICMgVGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzdG9yZSBtZWRpYSBidWZmZXJzIHdoZW4KLSAgICAjIHZpZGVvIHJlc29sdXRpb24gaXMgbm8gbGFyZ2VyIHRoYW4gMTA4MHAuIElmIDAsIHRoZW4gbWVtb3J5IGNhbiBncm93Ci0gICAgIyB3aXRob3V0IGJvdW5kLiBUaGlzIG11c3QgYmUgbGFyZ2VyIHRoYW4gc3VtIG9mIDEwODBwIHZpZGVvIGJ1ZGdldCBhbmQgbm9uLQotICAgICMgdmlkZW8gYnVkZ2V0LgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV8xMDgwcCUnOiAwLAorICAgICMgdmlkZW8gcmVzb2x1dGlvbiBpcyBubyBsYXJnZXIgdGhhbiAxMDgwcC4gVGhpcyBtdXN0IGJlIGxhcmdlciB0aGFuIHN1bSBvZgorICAgICMgMTA4MHAgdmlkZW8gYnVkZ2V0IGFuZCBub24tdmlkZW8gYnVkZ2V0LgorICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV8xMDgwcCUnOiAzNiAqIDEwMjQgKiAxMDI0LAogICAgICMgVGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzdG9yZSBtZWRpYSBidWZmZXJzIHdoZW4KICAgICAjIHZpZGVvIHJlc29sdXRpb24gaXMgNGsuIElmIDAsIHRoZW4gbWVtb3J5IGNhbiBncm93IHdpdGhvdXQgYm91bmQuIFRoaXMKLSAgICAjIG11c3QgYmUgbGFyZ2VyIHRoYW4gc3VtIG9mIDRrIHZpZGVvIGJ1ZGdldCBhbmQgbm9uLSB2aWRlbyBidWRnZXQuCi0gICAgJ2NvYmFsdF9tZWRpYV9idWZmZXJfbWF4X2NhcGFjaXR5XzRrJSc6IDAsCisgICAgIyBtdXN0IGJlIGxhcmdlciB0aGFuIHN1bSBvZiA0ayB2aWRlbyBidWRnZXQgYW5kIG5vbi12aWRlbyBidWRnZXQuCisgICAgJ2NvYmFsdF9tZWRpYV9idWZmZXJfbWF4X2NhcGFjaXR5XzRrJSc6IDEwMCAqIDEwMjQgKiAxMDI0LAogCiAgICAgIyBXaGVuIHRoZSBtZWRpYSBzdGFjayBuZWVkcyBtb3JlIG1lbW9yeSB0byBzdG9yZSBtZWRpYSBidWZmZXJzLCBpdCB3aWxsCiAgICAgIyBhbGxvY2F0ZSBleHRyYSBtZW1vcnkgaW4gdW5pdHMgb2YgfGNvYmFsdF9tZWRpYV9idWZmZXJfYWxsb2NhdGlvbl91bml0fC4KQEAgLTQxNiw3ICs0MTUsNyBAQAogICAgICMgVGhlIG1lZGlhIGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGFsaWdubWVudC4gIFNldAogICAgICMgdGhpcyB0byBhIGxhcmdlciB2YWx1ZSBtYXkgaW5jcmVhc2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBtZWRpYQogICAgICMgYnVmZmVycy4KLSAgICAnY29iYWx0X21lZGlhX2J1ZmZlcl9hbGlnbm1lbnQlJzogMCwKKyAgICAnY29iYWx0X21lZGlhX2J1ZmZlcl9hbGlnbm1lbnQlJzogMSwKICAgICAjIEV4dHJhIGJ5dGVzIGFsbG9jYXRlZCBhdCB0aGUgZW5kIG9mIGEgbWVkaWEgYnVmZmVyIHRvIGVuc3VyZSB0aGF0IHRoZQogICAgICMgYnVmZmVyIGNhbiBiZSB1c2Ugb3B0aW1hbGx5IGJ5IHNwZWNpZmljIGluc3RydWN0aW9ucyBsaWtlIFNJTUQuICBTZXQgdG8gMAogICAgICMgdG8gcmVtb3ZlIGFueSBwYWRkaW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9idWlsZC9jb25maWcvYmFzZS5nbmkgYi9zcmMvY29iYWx0L2J1aWxkL2NvbmZpZy9iYXNlLmduaQppbmRleCA5OGE0ZDJkLi4wODY0MzA1IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2J1aWxkL2NvbmZpZy9iYXNlLmduaQorKysgYi9zcmMvY29iYWx0L2J1aWxkL2NvbmZpZy9iYXNlLmduaQpAQCAtNDU3LDE5ICs0NTcsMTcgQEAKIH0KIAogIyBUaGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIG1lZGlhIGJ1ZmZlcnMgd2hlbgotIyB2aWRlbyByZXNvbHV0aW9uIGlzIG5vIGxhcmdlciB0aGFuIDEwODBwLiBJZiAwLCB0aGVuIG1lbW9yeSBjYW4gZ3JvdwotIyB3aXRob3V0IGJvdW5kLiBUaGlzIG11c3QgYmUgbGFyZ2VyIHRoYW4gc3VtIG9mIDEwODBwIHZpZGVvIGJ1ZGdldCBhbmQgbm9uLQotIyB2aWRlbyBidWRnZXQuCisjIHZpZGVvIHJlc29sdXRpb24gaXMgbm8gbGFyZ2VyIHRoYW4gMTA4MHAuIFRoaXMgbXVzdCBiZSBsYXJnZXIgdGhhbiBzdW0gb2YKKyMgMTA4MHAgdmlkZW8gYnVkZ2V0IGFuZCBub24tdmlkZW8gYnVkZ2V0LgogaWYgKCFkZWZpbmVkKGNvYmFsdF9tZWRpYV9idWZmZXJfbWF4X2NhcGFjaXR5XzEwODBwKSkgewogICBjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV8xMDgwcCA9ICIoMzYgKiAxMDI0ICogMTAyNCkiLAogfQogCiAjIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgbWVkaWEgYnVmZmVycyB3aGVuCi0jIHZpZGVvIHJlc29sdXRpb24gaXMgbm8gbGFyZ2VyIHRoYW4gNGsuIElmIDAsIHRoZW4gbWVtb3J5IGNhbiBncm93Ci0jIHdpdGhvdXQgYm91bmQuIFRoaXMgbXVzdCBiZSBsYXJnZXIgdGhhbiBzdW0gb2YgNGsgdmlkZW8gYnVkZ2V0IGFuZCBub24tCi0jIHZpZGVvIGJ1ZGdldC4KKyMgdmlkZW8gcmVzb2x1dGlvbiBpcyBubyBsYXJnZXIgdGhhbiA0ay4gVGhpcyBtdXN0IGJlIGxhcmdlciB0aGFuIHN1bSBvZiA0aworIyB2aWRlbyBidWRnZXQgYW5kIG5vbi12aWRlbyBidWRnZXQuCiBpZiAoIWRlZmluZWQoY29iYWx0X2J1ZmZlcl9tYXhfY2FwYWNpdHlfNGspKSB7Ci0gIGNvYmFsdF9tZWRpYV9idWZmZXJfbWF4X2NhcGFjaXR5XzRrID0gIig2NSAqIDEwMjQgKiAxMDI0KSIsCisgIGNvYmFsdF9tZWRpYV9idWZmZXJfbWF4X2NhcGFjaXR5XzRrID0gIigxMDAgKiAxMDI0ICogMTAyNCkiLAogfQogCiAjIFdoZW4gdGhlIG1lZGlhIHN0YWNrIG5lZWRzIG1vcmUgbWVtb3J5IHRvIHN0b3JlIG1lZGlhIGJ1ZmZlcnMsIGl0IHdpbGwKQEAgLTQ4Niw3ICs0ODQsNyBAQAogIyB0aGlzIHRvIGEgbGFyZ2VyIHZhbHVlIG1heSBpbmNyZWFzZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIG1lZGlhCiAjIGJ1ZmZlcnMuCiBpZiAoIWRlZmluZWQoY29iYWx0X21lZGlhX2J1ZmZlcl9hbGlnbm1lbnQpKSB7Ci0gIGNvYmFsdF9tZWRpYV9idWZmZXJfYWxpZ25tZW50ID0gMAorICBjb2JhbHRfbWVkaWFfYnVmZmVyX2FsaWdubWVudCA9IDEKIH0KICMgRXh0cmEgYnl0ZXMgYWxsb2NhdGVkIGF0IHRoZSBlbmQgb2YgYSBtZWRpYSBidWZmZXIgdG8gZW5zdXJlIHRoYXQgdGhlCiAjIGJ1ZmZlciBjYW4gYmUgdXNlIG9wdGltYWxseSBieSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGlrZSBTSU1ELiAgU2V0IHRvIDAKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9jc3NfcGFyc2VyLmd5cCBiL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9jc3NfcGFyc2VyLmd5cAppbmRleCA3ZTY0N2ZlLi4xYmM5MTAwIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvY3NzX3BhcnNlci5neXAKKysrIGIvc3JjL2NvYmFsdC9jc3NfcGFyc2VyL2Nzc19wYXJzZXIuZ3lwCkBAIC0xOSw5ICsxOSwxMiBAQAogICAgICMgRGVmaW5lIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBCaXNvbiBiaW5hcnkuCiAgICAgJ2NvbmRpdGlvbnMnOiBbCiAgICAgICBbJ2hvc3Rfb3M9PSJ3aW4iJywgewotICAgICAgICAnYmlzb25fZXhlJzogJzwoREVQVEgpL3RoaXJkX3BhcnR5L2Jpc29uL2Jpbi9iaXNvbicsCisgICAgICAgICdiaXNvbl9leGUnOiAnPChERVBUSCkvdGhpcmRfcGFydHkvd2luZmxleGJpc29uL2Jpbi9SZWxlYXNlL3dpbl9iaXNvbicsCisgICAgICAgICdiaXNvbl9tYWpvcl92ZXJzaW9uJzogJzMnCiAgICAgICB9LCB7CiAgICAgICAgICdiaXNvbl9leGUnOiAnYmlzb24nLAorICAgICAgICAnYmlzb25fbWFqb3JfdmVyc2lvbic6ICc8IShiaXNvbiAtLXZlcnNpb24gfCAnCisgICAgICAgICAgJ2hlYWQgLW4gMSB8IHNlZCAtRWUgInMvW14wLTldKihbMC05XSspLiovXFwxLyIpJwogICAgICAgfV0sCiAgICAgXSwKICAgfSwKQEAgLTM1LDcgKzM4LDEzIEBACiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdzb3VyY2VzJzogWwogICAgICAgICAnZ3JhbW1hci5oJywKLSAgICAgICAgJ2dyYW1tYXIueScsCisgICAgICBdLAorICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgIFsnYmlzb25fbWFqb3JfdmVyc2lvbj09MicsIHsKKyAgICAgICAgICAnc291cmNlcyc6IFsnZ3JhbW1hci1iaXNvbi0yLnknXSwKKyAgICAgICAgfSwgeworICAgICAgICAgICdzb3VyY2VzJzogWydncmFtbWFyLnknXQorICAgICAgICB9XQogICAgICAgXSwKICAgICAgICMgR2VuZXJhdGVkIGhlYWRlciBmaWxlcyBhcmUgc3RvcmVkIGluIHRoZSBpbnRlcm1lZGlhdGUgZGlyZWN0b3J5CiAgICAgICAjIHVuZGVyIHRoZWlyIG1vZHVsZSBzdWItZGlyZWN0b3J5LgpAQCAtMTAyLDYgKzExMSw5IEBACiAgICAgICAgICd0cml2aWFsX3N0cmluZ19waWVjZS5oJywKICAgICAgICAgJ3RyaXZpYWxfdHlwZV9wYWlycy5oJywKICAgICAgIF0sCisgICAgICAnZGVmaW5lcyc6IFsKKyAgICAgICAgJ0JJU09OX1ZFUlNJT05fTUFKT1I9PEAoYmlzb25fbWFqb3JfdmVyc2lvbiknCisgICAgICBdLAogICAgICAgIyBTY2FubmVyIGV4cG9zZXMgVUNoYXIzMiBpbiBhIGhlYWRlci4KICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewogICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwpAQCAtMTI2LDYgKzEzOCw5IEBACiAgICAgICAgICdzY2FubmVyX3Rlc3QuY2MnLAogICAgICAgICAndHJpdmlhbF9zdHJpbmdfcGllY2VfdGVzdC5jYycsCiAgICAgICBdLAorICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAgICdCSVNPTl9WRVJTSU9OX01BSk9SPTxAKGJpc29uX21ham9yX3ZlcnNpb24pJworICAgICAgXSwKICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwOnJ1bl9hbGxfdW5pdHRlc3RzJywKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9ncmFtbWFyLWJpc29uLTIueSBiL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9ncmFtbWFyLWJpc29uLTIueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjIwZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvYmFsdC9jc3NfcGFyc2VyL2dyYW1tYXItYmlzb24tMi55CkBAIC0wLDAgKzEsNjkwMSBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBUaGlzIGZpbGUgY29udGFpbnMgYSBkZWZpbml0aW9uIG9mIENTUyBncmFtbWFyLgorCisvLyBBIHJlZW50cmFudCBwYXJzZXIuCislcHVyZV9wYXJzZXIKKworLy8geXlwYXJzZSgpJ3MgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLgorJXBhcnNlLXBhcmFtIHsgUGFyc2VySW1wbCogcGFyc2VyX2ltcGwgfQorCisleworLy8gU3BlY2lmeSBob3cgdGhlIGxvY2F0aW9uIG9mIGFuIGFjdGlvbiBzaG91bGQgYmUgY2FsY3VsYXRlZCBpbiB0ZXJtcworLy8gb2YgaXRzIGNoaWxkcmVuLgorI2RlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgIFwKKyAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VycmVudC5maXJzdF9saW5lICAgPSBSaHNbMV0uZmlyc3RfbGluZTsgICAgXAorICAgIEN1cnJlbnQuZmlyc3RfY29sdW1uID0gUmhzWzFdLmZpcnN0X2NvbHVtbjsgIFwKKyAgICBDdXJyZW50LmxpbmVfc3RhcnQgICA9IFJoc1sxXS5saW5lX3N0YXJ0OyAgICBcCisgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEN1cnJlbnQuZmlyc3RfbGluZSAgID0gUmhzWzBdLmZpcnN0X2xpbmU7ICAgIFwKKyAgICBDdXJyZW50LmZpcnN0X2NvbHVtbiA9IFJoc1swXS5maXJzdF9jb2x1bW47ICBcCisgICAgQ3VycmVudC5saW5lX3N0YXJ0ICAgPSBSaHNbMF0ubGluZV9zdGFydDsgICAgXAorICB9CisKKy8vIHl5bGV4KCkncyB0aGlyZCBwYXJhbWV0ZXIuCisjZGVmaW5lIFlZTEVYX1BBUkFNICYocGFyc2VyX2ltcGwtPnNjYW5uZXIoKSkKKyV9CisKKy8vIFRva2VuIHZhbHVlcyByZXR1cm5lZCBieSBhIHNjYW5uZXIuCisldW5pb24gVG9rZW5WYWx1ZSB7CisgIGZsb2F0IHJlYWw7CisgIGludCBpbnRlZ2VyOworICBUcml2aWFsSW50UGFpciBpbnRlZ2VyX3BhaXI7CisgIFRyaXZpYWxTdHJpbmdQaWVjZSBzdHJpbmc7Cit9CisKKy8vCisvLyBUb2tlbnMgcmV0dXJuZWQgYnkgYSBzY2FubmVyLgorLy8KKworLy8gRW50cnkgcG9pbnQgdG9rZW5zLCBpbmplY3RlZCBieSB0aGUgcGFyc2VyIGluIG9yZGVyIHRvIGNob29zZSB0aGUgcGF0aAorLy8gd2l0aGluIGEgZ3JhbW1hciwgbmV2ZXIgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS4KKyV0b2tlbiBrTWVkaWFMaXN0RW50cnlQb2ludFRva2VuCisldG9rZW4ga01lZGlhUXVlcnlFbnRyeVBvaW50VG9rZW4KKyV0b2tlbiBrU3R5bGVTaGVldEVudHJ5UG9pbnRUb2tlbgorJXRva2VuIGtSdWxlRW50cnlQb2ludFRva2VuCisldG9rZW4ga1N0eWxlRGVjbGFyYXRpb25MaXN0RW50cnlQb2ludFRva2VuCisldG9rZW4ga0ZvbnRGYWNlRGVjbGFyYXRpb25MaXN0RW50cnlQb2ludFRva2VuCisldG9rZW4ga1Byb3BlcnR5VmFsdWVFbnRyeVBvaW50VG9rZW4KKyV0b2tlbiBrUHJvcGVydHlJbnRvRGVjbGFyYXRpb25EYXRhRW50cnlQb2ludFRva2VuCisKKy8vIFRva2VucyB3aXRob3V0IGEgdmFsdWUuCisldG9rZW4ga0VuZE9mRmlsZVRva2VuIDAgICAgICAgICAgICAgICAgLy8gbnVsbAorJXRva2VuIGtXaGl0ZXNwYWNlVG9rZW4gICAgICAgICAgICAgICAgIC8vIHRhYiwgc3BhY2UsIENSLCBMRgorJXRva2VuIGtTZ21sQ29tbWVudERlbGltaXRlclRva2VuICAgICAgIC8vIDwhLS0gLS0+CisldG9rZW4ga0NvbW1lbnRUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gLyogKi8KKyV0b2tlbiBrSW1wb3J0YW50VG9rZW4gICAgICAgICAgICAgICAgICAvLyAhaW1wb3J0YW50CisKKy8vIFByb3BlcnR5IG5hbWUgdG9rZW5zLgorLy8gV0FSTklORzogRXZlcnkgdGltZSBhIG5ldyBuYW1lIHRva2VuIGlzIGludHJvZHVjZWQsIGl0IHNob3VsZCBiZSBhZGRlZAorLy8gICAgICAgICAgdG8gfGlkZW50aWZpZXJfdG9rZW58IHJ1bGUgYmVsb3cuCisldG9rZW4ga0FsbFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsCisldG9rZW4ga0FuaW1hdGlvbkRlbGF5VG9rZW4gICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uLWRlbGF5CisldG9rZW4ga0FuaW1hdGlvbkRpcmVjdGlvblRva2VuICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uLWRpcmVjdGlvbgorJXRva2VuIGtBbmltYXRpb25EdXJhdGlvblRva2VuICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbi1kdXJhdGlvbgorJXRva2VuIGtBbmltYXRpb25GaWxsTW9kZVRva2VuICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbi1maWxsLW1vZGUKKyV0b2tlbiBrQW5pbWF0aW9uSXRlcmF0aW9uQ291bnRUb2tlbiAgICAgICAgICAvLyBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50CisldG9rZW4ga0FuaW1hdGlvbk5hbWVUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uLW5hbWUKKyV0b2tlbiBrQW5pbWF0aW9uVGltaW5nRnVuY3Rpb25Ub2tlbiAgICAgICAgICAvLyBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uCisldG9rZW4ga0FuaW1hdGlvblRva2VuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uCisldG9rZW4ga0JhY2tncm91bmRDb2xvclRva2VuICAgICAgICAgICAgICAgICAgLy8gYmFja2dyb3VuZC1jb2xvcgorJXRva2VuIGtCYWNrZ3JvdW5kSW1hZ2VUb2tlbiAgICAgICAgICAgICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2UKKyV0b2tlbiBrQmFja2dyb3VuZFBvc2l0aW9uVG9rZW4gICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kLXBvc2l0aW9uCisldG9rZW4ga0JhY2tncm91bmRSZXBlYXRUb2tlbiAgICAgICAgICAgICAgICAgLy8gYmFja2dyb3VuZC1yZXBlYXQKKyV0b2tlbiBrQmFja2dyb3VuZFNpemVUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kLXNpemUKKyV0b2tlbiBrQmFja2dyb3VuZFRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kCisldG9rZW4ga0JvcmRlclRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyCisldG9rZW4ga0JvcmRlckJvdHRvbUxlZnRSYWRpdXNUb2tlbiAgICAgICAgICAgLy8gYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cworJXRva2VuIGtCb3JkZXJCb3R0b21SaWdodFJhZGl1c1Rva2VuICAgICAgICAgIC8vIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzCisldG9rZW4ga0JvcmRlckJvdHRvbVRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyLWJvdHRvbQorJXRva2VuIGtCb3JkZXJCb3R0b21Db2xvclRva2VuICAgICAgICAgICAgICAgIC8vIGJvcmRlci1ib3R0b20tY29sb3IKKyV0b2tlbiBrQm9yZGVyQm90dG9tU3R5bGVUb2tlbiAgICAgICAgICAgICAgICAvLyBib3JkZXItYm90dG9tLXN0eWxlCisldG9rZW4ga0JvcmRlckJvdHRvbVdpZHRoVG9rZW4gICAgICAgICAgICAgICAgLy8gYm9yZGVyLWJvdHRvbS13aWR0aAorJXRva2VuIGtCb3JkZXJDb2xvclRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci1jb2xvcgorJXRva2VuIGtCb3JkZXJMZWZ0VG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci1sZWZ0CisldG9rZW4ga0JvcmRlckxlZnRDb2xvclRva2VuICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyLWxlZnQtY29sb3IKKyV0b2tlbiBrQm9yZGVyTGVmdFN0eWxlVG9rZW4gICAgICAgICAgICAgICAgICAvLyBib3JkZXItbGVmdC1zdHlsZQorJXRva2VuIGtCb3JkZXJMZWZ0V2lkdGhUb2tlbiAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci1sZWZ0LXdpZHRoCisldG9rZW4ga0JvcmRlclJhZGl1c1Rva2VuICAgICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyLXJhZGl1cworJXRva2VuIGtCb3JkZXJSaWdodFRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci1yaWdodAorJXRva2VuIGtCb3JkZXJSaWdodENvbG9yVG9rZW4gICAgICAgICAgICAgICAgIC8vIGJvcmRlci1yaWdodC1jb2xvcgorJXRva2VuIGtCb3JkZXJSaWdodFN0eWxlVG9rZW4gICAgICAgICAgICAgICAgIC8vIGJvcmRlci1yaWdodC1zdHlsZQorJXRva2VuIGtCb3JkZXJSaWdodFdpZHRoVG9rZW4gICAgICAgICAgICAgICAgIC8vIGJvcmRlci1yaWdodC13aWR0aAorJXRva2VuIGtCb3JkZXJTdHlsZVRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci1zdHlsZQorJXRva2VuIGtCb3JkZXJUb3BUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci10b3AKKyV0b2tlbiBrQm9yZGVyVG9wQ29sb3JUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBib3JkZXItdG9wLWNvbG9yCisldG9rZW4ga0JvcmRlclRvcExlZnRSYWRpdXNUb2tlbiAgICAgICAgICAgICAgLy8gYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cworJXRva2VuIGtCb3JkZXJUb3BSaWdodFJhZGl1c1Rva2VuICAgICAgICAgICAgIC8vIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzCisldG9rZW4ga0JvcmRlclRvcFN0eWxlVG9rZW4gICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyLXRvcC1zdHlsZQorJXRva2VuIGtCb3JkZXJUb3BXaWR0aFRva2VuICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci10b3Atd2lkdGgKKyV0b2tlbiBrQm9yZGVyV2lkdGhUb2tlbiAgICAgICAgICAgICAgICAgICAgICAvLyBib3JkZXItd2lkdGgKKyV0b2tlbiBrQm90dG9tVG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib3R0b20KKyV0b2tlbiBrQm94U2hhZG93VG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAvLyBib3gtc2hhZG93CisldG9rZW4ga0NvbG9yVG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sb3IKKyV0b2tlbiBrQ29udGVudFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50CisldG9rZW4ga0Rpc3BsYXlUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzcGxheQorJXRva2VuIGtGaWx0ZXJUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlcgorJXRva2VuIGtGb250VG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbnQKKyV0b2tlbiBrRm9udEZhbWlseVRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBmb250LWZhbWlseQorJXRva2VuIGtGb250U2l6ZVRva2VuICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbnQtc2l6ZQorJXRva2VuIGtGb250U3R5bGVUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbnQtc3R5bGUKKyV0b2tlbiBrRm9udFdlaWdodFRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBmb250LXdlaWdodAorJXRva2VuIGtIZWlnaHRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlaWdodAorJXRva2VuIGtMZWZ0VG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlZnQKKyV0b2tlbiBrTGluZUhlaWdodFRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lLWhlaWdodAorJXRva2VuIGtNYXJnaW5Cb3R0b21Ub2tlbiAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbi1ib3R0b20KKyV0b2tlbiBrTWFyZ2luTGVmdFRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJnaW4tbGVmdAorJXRva2VuIGtNYXJnaW5SaWdodFRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbi1yaWdodAorJXRva2VuIGtNYXJnaW5Ub2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbgorJXRva2VuIGtNYXJnaW5Ub3BUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbi10b3AKKyV0b2tlbiBrTWF4SGVpZ2h0VG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXgtaGVpZ2h0CisldG9rZW4ga01heFdpZHRoVG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4LXdpZHRoCisldG9rZW4ga01pbkhlaWdodFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluLWhlaWdodAorJXRva2VuIGtNaW5XaWR0aFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbi13aWR0aAorJXRva2VuIGtPcGFjaXR5VG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wYWNpdHkKKyV0b2tlbiBrT3V0bGluZVRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRsaW5lCisldG9rZW4ga091dGxpbmVDb2xvclRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gb3V0bGluZS1jb2xvcgorJXRva2VuIGtPdXRsaW5lU3R5bGVUb2tlbiAgICAgICAgICAgICAgICAgICAgIC8vIG91dGxpbmUtc3R5bGUKKyV0b2tlbiBrT3V0bGluZVdpZHRoVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBvdXRsaW5lLXdpZHRoCisldG9rZW4ga092ZXJmbG93VG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3cKKyV0b2tlbiBrT3ZlcmZsb3dXcmFwVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdy13cmFwCisldG9rZW4ga1BhZGRpbmdCb3R0b21Ub2tlbiAgICAgICAgICAgICAgICAgICAgLy8gcGFkZGluZy1ib3R0b20KKyV0b2tlbiBrUGFkZGluZ0xlZnRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAvLyBwYWRkaW5nLWxlZnQKKyV0b2tlbiBrUGFkZGluZ1JpZ2h0VG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBwYWRkaW5nLXJpZ2h0CisldG9rZW4ga1BhZGRpbmdUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFkZGluZworJXRva2VuIGtQYWRkaW5nVG9wVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIHBhZGRpbmctdG9wCisldG9rZW4ga1BvaW50ZXJFdmVudHNUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRlci1ldmVudHMKKyV0b2tlbiBrUG9zaXRpb25Ub2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbgorJXRva2VuIGtSaWdodFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0CisldG9rZW4ga1NyY1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JjCisldG9rZW4ga1RleHRBbGlnblRva2VuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dC1hbGlnbgorJXRva2VuIGtUZXh0RGVjb3JhdGlvblRva2VuICAgICAgICAgICAgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbgorJXRva2VuIGtUZXh0RGVjb3JhdGlvbkNvbG9yVG9rZW4gICAgICAgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbi1jb2xvcgorJXRva2VuIGtUZXh0RGVjb3JhdGlvbkxpbmVUb2tlbiAgICAgICAgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbi1saW5lCisldG9rZW4ga1RleHRJbmRlbnRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dC1pbmRlbnQKKyV0b2tlbiBrVGV4dE92ZXJmbG93VG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0LW92ZXJmbG93CisldG9rZW4ga1RleHRTaGFkb3dUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dC1zaGFkb3cKKyV0b2tlbiBrVGV4dFRyYW5zZm9ybVRva2VuICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0LXRyYW5zZm9ybQorJXRva2VuIGtUb3BUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvcAorJXRva2VuIGtUcmFuc2Zvcm1Ub2tlbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybQorJXRva2VuIGtUcmFuc2Zvcm1PcmlnaW5Ub2tlbiAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybS1vcmlnaW4KKyV0b2tlbiBrVHJhbnNpdGlvbkRlbGF5VG9rZW4gICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uLWRlbGF5CisldG9rZW4ga1RyYW5zaXRpb25EdXJhdGlvblRva2VuICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbi1kdXJhdGlvbgorJXRva2VuIGtUcmFuc2l0aW9uUHJvcGVydHlUb2tlbiAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24tcHJvcGVydHkKKyV0b2tlbiBrVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVG9rZW4gICAgICAgICAvLyB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbgorJXRva2VuIGtUcmFuc2l0aW9uVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24KKyV0b2tlbiBrVW5pY29kZVJhbmdlUHJvcGVydHlUb2tlbiAgICAgICAgICAgICAvLyB1bmljb2RlLXJhbmdlCisldG9rZW4ga1ZlcnRpY2FsQWxpZ25Ub2tlbiAgICAgICAgICAgICAgICAgICAgLy8gdmVydGljYWwtYWxpZ24KKyV0b2tlbiBrVmlzaWJpbGl0eVRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyB2aXNpYmlsaXR5CisldG9rZW4ga1doaXRlU3BhY2VQcm9wZXJ0eVRva2VuICAgICAgICAgICAgICAgLy8gd2hpdGUtc3BhY2UKKyV0b2tlbiBrV2lkdGhUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWR0aAorJXRva2VuIGtaSW5kZXhUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHotaW5kZXgKKworLy8gUHJvcGVydHkgdmFsdWUgdG9rZW5zLgorLy8gV0FSTklORzogRXZlcnkgdGltZSBhIG5ldyBuYW1lIHRva2VuIGlzIGludHJvZHVjZWQsIGl0IHNob3VsZCBiZSBhZGRlZAorLy8gICAgICAgICAgdG8gfGlkZW50aWZpZXJfdG9rZW58IHJ1bGUgYmVsb3cuCisldG9rZW4ga0Fic29sdXRlVG9rZW4gICAgICAgICAgICAgICAgICAgLy8gYWJzb2x1dGUKKyV0b2tlbiBrQWx0ZXJuYXRlVG9rZW4gICAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGUKKyV0b2tlbiBrQWx0ZXJuYXRlUmV2ZXJzZVRva2VuICAgICAgICAgICAvLyBhbHRlcm5hdGUtcmV2ZXJzZQorJXRva2VuIGtBcXVhVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIGFxdWEKKyV0b2tlbiBrQXRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdAorJXRva2VuIGtBdXRvVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dG8KKyV0b2tlbiBrQmFja3dhcmRzVG9rZW4gICAgICAgICAgICAgICAgICAvLyBiYWNrd2FyZHMKKyV0b2tlbiBrQmFzZWxpbmVUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBiYXNlbGluZQorJXRva2VuIGtCbGFja1Rva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGJsYWNrCisldG9rZW4ga0Jsb2NrVG9rZW4gICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sKKyV0b2tlbiBrQmx1ZVRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBibHVlCisldG9rZW4ga0JvbGRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9sZAorJXRva2VuIGtCb3RoVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIGJvdGgKKyV0b2tlbiBrQnJlYWtXb3JkVG9rZW4gICAgICAgICAgICAgICAgICAvLyBicmVhay13b3JkCisldG9rZW4ga0NlbnRlclRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gY2VudGVyCisldG9rZW4ga0NpcmNsZVRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gY2lyY2xlCisldG9rZW4ga0NsaXBUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xpcAorJXRva2VuIGtDbG9zZXN0Q29ybmVyVG9rZW4gICAgICAgICAgICAgIC8vIGNsb3Nlc3QtY29ybmVyCisldG9rZW4ga0Nsb3Nlc3RTaWRlVG9rZW4gICAgICAgICAgICAgICAgLy8gY2xvc2VzdC1zaWRlCisldG9rZW4ga0NvbnRhaW5Ub2tlbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGFpbgorJXRva2VuIGtDb3ZlclRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdmVyCisldG9rZW4ga0N1cnNpdmVUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gY3Vyc2l2ZQorJXRva2VuIGtFYXNlSW5PdXRUb2tlbiAgICAgICAgICAgICAgICAgIC8vIGVhc2UtaW4tb3V0CisldG9rZW4ga0Vhc2VJblRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZS1pbgorJXRva2VuIGtFYXNlT3V0VG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIGVhc2Utb3V0CisldG9rZW4ga0Vhc2VUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZQorJXRva2VuIGtFbGxpcHNlVG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIGVsbGlwc2UKKyV0b2tlbiBrRWxsaXBzaXNUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBlbGxpcHNpcworJXRva2VuIGtFbmRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuZAorJXRva2VuIGtFcXVpcmVjdGFuZ3VsYXJUb2tlbiAgICAgICAgICAgIC8vIGVxdWlyZWN0YW5ndWxhcgorJXRva2VuIGtGYW50YXN5VG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIGZhbnRhc3kKKyV0b2tlbiBrRmFydGhlc3RDb3JuZXJUb2tlbiAgICAgICAgICAgICAvLyBmYXJ0aGVzdC1jb3JuZXIKKyV0b2tlbiBrRmFydGhlc3RTaWRlVG9rZW4gICAgICAgICAgICAgICAvLyBmYXJ0aGVzdC1zaWRlCisldG9rZW4ga0ZpeGVkVG9rZW4gICAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQKKyV0b2tlbiBrRm9yd2FyZHNUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBmb3J3YXJkcworJXRva2VuIGtGcm9tVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20KKyV0b2tlbiBrRnVjaHNpYVRva2VuICAgICAgICAgICAgICAgICAgICAvLyBmdWNoc2lhCisldG9rZW4ga0dyYXlUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gZ3JheQorJXRva2VuIGtHcmVlblRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGdyZWVuCisldG9rZW4ga0hpZGRlblRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gaGlkZGVuCisldG9rZW4ga0luZmluaXRlVG9rZW4gICAgICAgICAgICAgICAgICAgLy8gaW5maW5pdGUKKyV0b2tlbiBrSW5oZXJpdFRva2VuICAgICAgICAgICAgICAgICAgICAvLyBpbmhlcml0CisldG9rZW4ga0luaXRpYWxUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbAorJXRva2VuIGtJbmxpbmVCbG9ja1Rva2VuICAgICAgICAgICAgICAgIC8vIGlubGluZS1ibG9jaworJXRva2VuIGtJbmxpbmVUb2tlbiAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluZQorJXRva2VuIGtJbnNldFRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2V0CisldG9rZW4ga0l0YWxpY1Rva2VuICAgICAgICAgICAgICAgICAgICAgLy8gaXRhbGljCisldG9rZW4ga0xpbWVUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gbGltZQorJXRva2VuIGtMaW5lYXJUb2tlbiAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmVhcgorJXRva2VuIGtMaW5lVGhyb3VnaFRva2VuICAgICAgICAgICAgICAgIC8vIGxpbmUtdGhyb3VnaAorLy8gJXRva2VuIGtMZWZ0VG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIGxlZnQgLSBhbHNvIHByb3BlcnR5IG5hbWUgdG9rZW4KKyV0b2tlbiBrTWFyb29uVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBtYXJvb24KKyV0b2tlbiBrTWlkZGxlVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBtaWRkbGUKKyV0b2tlbiBrTW9ub3Njb3BpY1Rva2VuICAgICAgICAgICAgICAgICAvLyBtb25vc2NvcGljCisldG9rZW4ga01vbm9zcGFjZVRva2VuICAgICAgICAgICAgICAgICAgLy8gbW9ub3NwYWNlCisldG9rZW4ga05hdnlUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgLy8gbmF2eQorJXRva2VuIGtOb25lVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUKKyV0b2tlbiBrTm9SZXBlYXRUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBuby1yZXBlYXQKKyV0b2tlbiBrTm9ybWFsVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwKKyV0b2tlbiBrTm9XcmFwVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBub3dyYXAKKyV0b2tlbiBrT2JsaXF1ZVRva2VuICAgICAgICAgICAgICAgICAgICAvLyBvYmxpcXVlCisldG9rZW4ga09saXZlVG9rZW4gICAgICAgICAgICAgICAgICAgICAgLy8gb2xpdmUKKyV0b2tlbiBrUHJlVG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmUKKyV0b2tlbiBrUHJlTGluZVRva2VuICAgICAgICAgICAgICAgICAgICAvLyBwcmUtbGluZQorJXRva2VuIGtQcmVXcmFwVG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIHByZS13cmFwCisldG9rZW4ga1B1cnBsZVRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gcHVycGxlCisldG9rZW4ga1JlY3Rhbmd1bGFyVG9rZW4gICAgICAgICAgICAgICAgLy8gcmVjdGFuZ3VsYXIKKyV0b2tlbiBrUmVkVG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWQKKyV0b2tlbiBrUmVwZWF0VG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyByZXBlYXQKKyV0b2tlbiBrUmVwZWF0WFRva2VuICAgICAgICAgICAgICAgICAgICAvLyByZXBlYXQteAorJXRva2VuIGtSZXBlYXRZVG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIHJlcGVhdC15CisldG9rZW4ga1JlbGF0aXZlVG9rZW4gICAgICAgICAgICAgICAgICAgLy8gcmVsYXRpdmUKKyV0b2tlbiBrUmV2ZXJzZVRva2VuICAgICAgICAgICAgICAgICAgICAvLyByZXZlcnNlCisvLyAldG9rZW4ga1JpZ2h0VG9rZW4gICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgLSBhbHNvIHByb3BlcnR5IG5hbWUgdG9rZW4KKyV0b2tlbiBrU2Fuc1NlcmlmVG9rZW4gICAgICAgICAgICAgICAgICAvLyBzYW5zLXNlcmlmCisldG9rZW4ga1NlcmlmVG9rZW4gICAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWYKKyV0b2tlbiBrU2lsdmVyVG9rZW4gICAgICAgICAgICAgICAgICAgICAvLyBzaWx2ZXIKKyV0b2tlbiBrU29saWRUb2tlbiAgICAgICAgICAgICAgICAgICAgICAvLyBzb2xpZAorJXRva2VuIGtTdGFydFRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0CisldG9rZW4ga1N0YXRpY1Rva2VuICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGljCisldG9rZW4ga1N0ZXBFbmRUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcC1lbmQKKyV0b2tlbiBrU3RlcFN0YXJ0VG9rZW4gICAgICAgICAgICAgICAgICAvLyBzdGVwLXN0YXJ0CisldG9rZW4ga1N0ZXJlb3Njb3BpY0xlZnRSaWdodFRva2VuICAgICAgLy8gc3RlcmVvc2NvcGljLWxlZnQtcmlnaHQKKyV0b2tlbiBrU3RlcmVvc2NvcGljVG9wQm90dG9tVG9rZW4gICAgICAvLyBzdGVyZW9zY29waWMtdG9wLWJvdHRvbQorJXRva2VuIGtUZWFsVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIHRlYWwKKyV0b2tlbiBrVG9Ub2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0bworLy8gJXRva2VuIGtUb3BUb2tlbiAgICAgICAgICAgICAgICAgICAgIC8vIHRvcCAtIGFsc28gcHJvcGVydHkgbmFtZSB0b2tlbgorJXRva2VuIGtUcmFuc3BhcmVudFRva2VuICAgICAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50CisldG9rZW4ga1VwcGVyY2FzZVRva2VuICAgICAgICAgICAgICAgICAgLy8gdXBwZXJjYXNlCisldG9rZW4ga1Zpc2libGVUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gdmlzaWJsZQorJXRva2VuIGtXaGl0ZVRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaXRlCisldG9rZW4ga1llbGxvd1Rva2VuICAgICAgICAgICAgICAgICAgICAgLy8geWVsbG93CisKKy8vIFBzZXVkby1jbGFzcyBuYW1lIHRva2Vucy4KKy8vIFdBUk5JTkc6IEV2ZXJ5IHRpbWUgYSBuZXcgbmFtZSB0b2tlbiBpcyBpbnRyb2R1Y2VkLCBpdCBzaG91bGQgYmUgYWRkZWQKKy8vICAgICAgICAgIHRvIHxpZGVudGlmaWVyX3Rva2VufCBydWxlIGJlbG93LgorJXRva2VuIGtBY3RpdmVUb2tlbiAgICAgICAgICAgICAgICAgICAgIC8vIGFjdGl2ZQorJXRva2VuIGtFbXB0eVRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGVtcHR5CisldG9rZW4ga0ZvY3VzVG9rZW4gICAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMKKyV0b2tlbiBrSG92ZXJUb2tlbiAgICAgICAgICAgICAgICAgICAgICAvLyBob3ZlcgorCisvLyBQc2V1ZG8tZWxlbWVudCBuYW1lIHRva2Vucy4KKy8vIFdBUk5JTkc6IEV2ZXJ5IHRpbWUgYSBuZXcgbmFtZSB0b2tlbiBpcyBpbnRyb2R1Y2VkLCBpdCBzaG91bGQgYmUgYWRkZWQKKy8vICAgICAgICAgIHRvIHxpZGVudGlmaWVyX3Rva2VufCBydWxlIGJlbG93LgorJXRva2VuIGtBZnRlclRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyCisldG9rZW4ga0JlZm9yZVRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlCisKKy8vIEF0dHJpYnV0ZSBtYXRjaGluZyB0b2tlbnMuCisldG9rZW4ga0luY2x1ZGVzVG9rZW4gICAgICAgICAgICAgICAgICAgLy8gfj0KKyV0b2tlbiBrRGFzaE1hdGNoVG9rZW4gICAgICAgICAgICAgICAgICAvLyB8PQorJXRva2VuIGtCZWdpbnNXaXRoVG9rZW4gICAgICAgICAgICAgICAgIC8vIF49CisldG9rZW4ga0VuZHNXaXRoVG9rZW4gICAgICAgICAgICAgICAgICAgLy8gJD0KKyV0b2tlbiBrQ29udGFpbnNUb2tlbiAgICAgICAgICAgICAgICAgICAvLyAqPQorCisvLyAiTWVkaWEgcXVlcnkiIG1vZGU6IE9wZXJhdG9yIHRva2Vucy4KKyV0b2tlbiBrTWVkaWFBbmRUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBhbmQKKyV0b2tlbiBrTWVkaWFOb3RUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBub3QKKyV0b2tlbiBrTWVkaWFPbmx5VG9rZW4gICAgICAgICAgICAgICAgICAvLyBvbmx5CisldG9rZW4ga01lZGlhTWluaW11bVRva2VuICAgICAgICAgICAgICAgLy8gbWluLQorJXRva2VuIGtNZWRpYU1heGltdW1Ub2tlbiAgICAgICAgICAgICAgIC8vIG1heC0KKworLy8gIk1lZGlhIHF1ZXJ5IiBtb2RlOiBNZWRpYSB0eXBlIHRva2Vucy4KKy8vIFdBUk5JTkc6IEV2ZXJ5IHRpbWUgYSBuZXcgbWVkaWEgdHlwZSB0b2tlbiBpcyBpbnRyb2R1Y2VkLCBpdCBzaG91bGQgYmUgYWRkZWQKKy8vICAgICAgICAgIHRvIHxtZWRpYV90eXBlX2tub3dufCBydWxlIGJlbG93LgorJXRva2VuIGtBbGxNZWRpYVR5cGVUb2tlbiAgICAgICAgICAgICAgLy8gYWxsCisldG9rZW4ga1RWTWVkaWFUeXBlVG9rZW4gICAgICAgICAgICAgICAvLyB0dgorJXRva2VuIGtTY3JlZW5NZWRpYVR5cGVUb2tlbiAgICAgICAgICAgLy8gc2NyZWVuCisKKy8vICJNZWRpYSBxdWVyeSIgbW9kZTogTWVkaWEgZmVhdHVyZSB0eXBlIHRva2Vucy4gVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUKKy8vIHZhbHVlIHR5cGVzIG9mIG1lZGlhIGZlYXR1cmVzLiBUaGUgaW50ZWdlciB2YWx1ZXMgb2YgdGhlc2UgdG9rZW5zIHJlcHJlc2VudAorLy8gZW51bSBNZWRpYUZlYXR1cmVOYW1lLgorLy8gV0FSTklORzogRXZlcnkgdGltZSBhIG5ldyBtZWRpYSBmZWF0dXJlIHR5cGUgdG9rZW4gaXMgaW50cm9kdWNlZCwgaXQgc2hvdWxkCisvLyAgICAgICAgICBiZSBhZGRlZCB0byB8bWVkaWFfdHlwZV91bmtub3dufCBydWxlIGJlbG93LgorCisldG9rZW4gPGludGVnZXI+IGtMZW5ndGhNZWRpYUZlYXR1cmVUeXBlVG9rZW4gICAgICAgICAgICAgLy8gLi4ucHgsIC4uLmVtLCBldGMuCisldG9rZW4gPGludGVnZXI+IGtPcmllbnRhdGlvbk1lZGlhRmVhdHVyZVR5cGVUb2tlbiAgICAgICAgLy8gcG9ydHJhaXQsIGxhbmRzY2FwZQorJXRva2VuIDxpbnRlZ2VyPiBrUmF0aW9NZWRpYUZlYXR1cmVUeXBlVG9rZW4gICAgICAgICAgICAgIC8vIC4uLiAvIC4uLgorJXRva2VuIDxpbnRlZ2VyPiBrTm9uTmVnYXRpdmVJbnRlZ2VyTWVkaWFGZWF0dXJlVHlwZVRva2VuIC8vIDAsIDEsIDIsIDMsIC4uLgorJXRva2VuIDxpbnRlZ2VyPiBrUmVzb2x1dGlvbk1lZGlhRmVhdHVyZVR5cGVUb2tlbiAgICAgICAgIC8vIC4uLmRwaSwgLi4uZHBjbQorJXRva2VuIDxpbnRlZ2VyPiBrU2Nhbk1lZGlhRmVhdHVyZVR5cGVUb2tlbiAgICAgICAgICAgICAgIC8vIHByb2dyZXNzaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVybGFjZQorJXRva2VuIDxpbnRlZ2VyPiBrWmVyb09yT25lTWVkaWFGZWF0dXJlVHlwZVRva2VuICAgICAgICAgIC8vIDAsIDEKKworLy8gIk1lZGlhIHF1ZXJ5IiBtb2RlOiBNZWRpYSBmZWF0dXJlIHZhbHVlIHRva2Vucy4KKyV0b2tlbiBrSW50ZXJsYWNlTWVkaWFGZWF0dXJlS2V5d29yZFZhbHVlVG9rZW4gICAvLyBpbnRlcmxhY2UKKyV0b2tlbiBrTGFuZHNjYXBlTWVkaWFGZWF0dXJlS2V5d29yZFZhbHVlVG9rZW4gICAvLyBsYW5kc2NhcGUKKyV0b2tlbiBrUG9ydHJhaXRNZWRpYUZlYXR1cmVLZXl3b3JkVmFsdWVUb2tlbiAgICAvLyBwb3J0cmFpdAorJXRva2VuIGtQcm9ncmVzc2l2ZU1lZGlhRmVhdHVyZUtleXdvcmRWYWx1ZVRva2VuIC8vIHByb2dyZXNzaXZlCisKKy8vICJTdXBwb3J0cyIgbW9kZSB0b2tlbnMuCisldG9rZW4ga1N1cHBvcnRzQW5kVG9rZW4gICAgICAgICAgICAgICAgLy8gYW5kIChpbiAic3VwcG9ydHMiIG1vZGUpCisldG9rZW4ga1N1cHBvcnRzTm90VG9rZW4gICAgICAgICAgICAgICAgLy8gbm90IChpbiAic3VwcG9ydHMiIG1vZGUpCisldG9rZW4ga1N1cHBvcnRzT3JUb2tlbiAgICAgICAgICAgICAgICAgLy8gb3IgKGluICJzdXBwb3J0cyIgbW9kZSkKKworLy8gQC10b2tlbnMuCisldG9rZW4ga0ltcG9ydFRva2VuICAgICAgICAgICAgICAgICAgICAgLy8gQGltcG9ydAorJXRva2VuIGtLZXlmcmFtZXNUb2tlbiAgICAgICAgICAgICAgICAgIC8vIEBrZXlmcmFtZXMKKyV0b2tlbiBrUGFnZVRva2VuICAgICAgICAgICAgICAgICAgICAgICAvLyBAcGFnZQorJXRva2VuIGtNZWRpYVRva2VuICAgICAgICAgICAgICAgICAgICAgIC8vIEBtZWRpYQorJXRva2VuIGtGb250RmFjZVRva2VuICAgICAgICAgICAgICAgICAgIC8vIEBmb250LWZhY2UKKyV0b2tlbiBrQ2hhcnNldFRva2VuICAgICAgICAgICAgICAgICAgICAvLyBAY2hhcnNldAorJXRva2VuIGtOYW1lc3BhY2VUb2tlbiAgICAgICAgICAgICAgICAgIC8vIEBuYW1lc3BhY2UKKyV0b2tlbiBrU3VwcG9ydHNUb2tlbiAgICAgICAgICAgICAgICAgICAvLyBAc3VwcG9ydHMKKworLy8gUGFnZWQgbWVkaWEgdG9rZW5zLgorJXRva2VuIGtUb3BMZWZ0Q29ybmVyVG9rZW4gICAgICAgICAgICAgIC8vIEB0b3AtbGVmdC1jb3JuZXIKKyV0b2tlbiBrVG9wTGVmdFRva2VuICAgICAgICAgICAgICAgICAgICAvLyBAdG9wLWxlZnQKKyV0b2tlbiBrVG9wQ2VudGVyVG9rZW4gICAgICAgICAgICAgICAgICAvLyBAdG9wLWNlbnRlcgorJXRva2VuIGtUb3BSaWdodFRva2VuICAgICAgICAgICAgICAgICAgIC8vIEB0b3AtcmlnaHQKKyV0b2tlbiBrVG9wUmlnaHRDb3JuZXJUb2tlbiAgICAgICAgICAgICAvLyBAdG9wLXJpZ2h0LWNvcm5lcgorJXRva2VuIGtCb3R0b21MZWZ0Q29ybmVyVG9rZW4gICAgICAgICAgIC8vIEBib3R0b20tbGVmdC1jb3JuZXIKKyV0b2tlbiBrQm90dG9tTGVmdFRva2VuICAgICAgICAgICAgICAgICAvLyBAYm90dG9tLWxlZnQKKyV0b2tlbiBrQm90dG9tQ2VudGVyVG9rZW4gICAgICAgICAgICAgICAvLyBAYm90dG9tLWNlbnRlcgorJXRva2VuIGtCb3R0b21SaWdodFRva2VuICAgICAgICAgICAgICAgIC8vIEBib3R0b20tcmlnaHQKKyV0b2tlbiBrQm90dG9tUmlnaHRDb3JuZXJUb2tlbiAgICAgICAgICAvLyBAYm90dG9tLXJpZ2h0LWNvcm5lcgorJXRva2VuIGtMZWZ0VG9wVG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIEBsZWZ0LXRvcAorJXRva2VuIGtMZWZ0TWlkZGxlVG9rZW4gICAgICAgICAgICAgICAgIC8vIEBsZWZ0LW1pZGRsZQorJXRva2VuIGtMZWZ0Qm90dG9tVG9rZW4gICAgICAgICAgICAgICAgIC8vIEBsZWZ0LWJvdHRvbQorJXRva2VuIGtSaWdodFRvcFRva2VuICAgICAgICAgICAgICAgICAgIC8vIEByaWdodC10b3AKKyV0b2tlbiBrUmlnaHRNaWRkbGVUb2tlbiAgICAgICAgICAgICAgICAvLyBAcmlnaHQtbWlkZGxlCisldG9rZW4ga1JpZ2h0Qm90dG9tVG9rZW4gICAgICAgICAgICAgICAgLy8gQHJpZ2h0LWJvdHRvbQorCisvLyBGdW5jdGlvbiB0b2tlbnMuCisldG9rZW4ga0NhbGNGdW5jdGlvblRva2VuICAgICAgICAgICAgICAgLy8gY2FsYygKKyV0b2tlbiBrQ3ViaWNCZXppZXJGdW5jdGlvblRva2VuICAgICAgICAvLyBjdWJpYy1iZXppZXIoCisldG9rZW4ga0N1ZUZ1bmN0aW9uVG9rZW4gICAgICAgICAgICAgICAgLy8gY3VlKAorJXRva2VuIGtGb3JtYXRGdW5jdGlvblRva2VuICAgICAgICAgICAgIC8vIGZvcm1hdCgKKyV0b2tlbiBrTGluZWFyR3JhZGllbnRGdW5jdGlvblRva2VuICAgICAvLyBsaW5lYXItZ3JhZGllbnQoCisldG9rZW4ga0xvY2FsRnVuY3Rpb25Ub2tlbiAgICAgICAgICAgICAgLy8gbG9jYWwoCisldG9rZW4ga01hcFRvTWVzaEZ1bmN0aW9uVG9rZW4gICAgICAgICAgLy8gbWFwLXRvLW1lc2goCisldG9rZW4ga01hdHJpeEZ1bmN0aW9uVG9rZW4gICAgICAgICAgICAgLy8gbWF0cml4KAorJXRva2VuIGtNYXRyaXgzZEZ1bmN0aW9uVG9rZW4gICAgICAgICAgIC8vIG1hdHJpeDNkKAorJXRva2VuIGtOb3RGdW5jdGlvblRva2VuICAgICAgICAgICAgICAgIC8vIG5vdCgKKyV0b2tlbiBrTnRoQ2hpbGRGdW5jdGlvblRva2VuICAgICAgICAgICAvLyBudGgtY2hpbGQoCisldG9rZW4ga050aExhc3RDaGlsZEZ1bmN0aW9uVG9rZW4gICAgICAgLy8gbnRoLWxhc3QtY2hpbGQoCisldG9rZW4ga050aExhc3RPZlR5cGVGdW5jdGlvblRva2VuICAgICAgLy8gbnRoLWxhc3Qtb2YtdHlwZSgKKyV0b2tlbiBrTnRoT2ZUeXBlRnVuY3Rpb25Ub2tlbiAgICAgICAgICAvLyBudGgtb2YtdHlwZSgKKyV0b2tlbiBrUm90YXRlRnVuY3Rpb25Ub2tlbiAgICAgICAgICAgICAvLyByb3RhdGUoCisldG9rZW4ga1NjYWxlRnVuY3Rpb25Ub2tlbiAgICAgICAgICAgICAgLy8gc2NhbGUoCisldG9rZW4ga1NjYWxlWEZ1bmN0aW9uVG9rZW4gICAgICAgICAgICAgLy8gc2NhbGVYKAorJXRva2VuIGtTY2FsZVlGdW5jdGlvblRva2VuICAgICAgICAgICAgIC8vIHNjYWxlWSgKKyV0b2tlbiBrU3RlcHNGdW5jdGlvblRva2VuICAgICAgICAgICAgICAvLyBzdGVwcygKKyV0b2tlbiBrVHJhbnNsYXRlRnVuY3Rpb25Ub2tlbiAgICAgICAgICAvLyB0cmFuc2xhdGUoCisldG9rZW4ga1RyYW5zbGF0ZVhGdW5jdGlvblRva2VuICAgICAgICAgLy8gdHJhbnNsYXRlWCgKKyV0b2tlbiBrVHJhbnNsYXRlWUZ1bmN0aW9uVG9rZW4gICAgICAgICAvLyB0cmFuc2xhdGVZKAorJXRva2VuIGtUcmFuc2xhdGVaRnVuY3Rpb25Ub2tlbiAgICAgICAgIC8vIHRyYW5zbGF0ZVooCisldG9rZW4ga1JhZGlhbEdyYWRpZW50RnVuY3Rpb25Ub2tlbiAgICAgLy8gcmFkaWFsLWdyYWRpZW50KAorJXRva2VuIGtSR0JGdW5jdGlvblRva2VuICAgICAgICAgICAgICAgIC8vIHJnYigKKyV0b2tlbiBrUkdCQUZ1bmN0aW9uVG9rZW4gICAgICAgICAgICAgICAvLyByZ2JhKAorJXRva2VuIGtDb2JhbHRNdG1GdW5jdGlvblRva2VuICAgICAgICAgIC8vIC1jb2JhbHQtbXRtKAorCisvLyBUb2tlbnMgd2l0aCBhIHN0cmluZyB2YWx1ZS4KKyV0b2tlbiA8c3RyaW5nPiBrU3RyaW5nVG9rZW4gICAgICAgICAgICAvLyAiLi4uIiwgJy4uLicKKyV0b2tlbiA8c3RyaW5nPiBrSWRlbnRpZmllclRva2VuICAgICAgICAvLyAuLi4KKyV0b2tlbiA8c3RyaW5nPiBrTnRoVG9rZW4gICAgICAgICAgICAgICAvLyBhbitiLCB3aGVyZSBhLCBiIC0gaW50ZWdlcnMKKyV0b2tlbiA8c3RyaW5nPiBrSGV4VG9rZW4gICAgICAgICAgICAgICAvLyAjLi4uCisldG9rZW4gPHN0cmluZz4ga0lkU2VsZWN0b3JUb2tlbiAgICAgICAgLy8gIy4uLgorJXRva2VuIDxzdHJpbmc+IGtVcmlUb2tlbiAgICAgICAgICAgICAgIC8vIHVybCguLi4KKyV0b2tlbiA8c3RyaW5nPiBrSW52YWxpZEZ1bmN0aW9uVG9rZW4gICAvLyAuLi4oCisldG9rZW4gPHN0cmluZz4ga0ludmFsaWROdW1iZXJUb2tlbiAgICAgLy8gLi4uIChkaWdpdHMpCisldG9rZW4gPHN0cmluZz4ga0ludmFsaWREaW1lbnNpb25Ub2tlbiAgLy8gWFh5eSwgd2hlcmUgWFggLSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgeXkgLSBpZGVudGlmaWVyCisldG9rZW4gPHN0cmluZz4ga0ludmFsaWRBdEJsb2NrVG9rZW4gICAgLy8gQC4uLiB7IC4uLiB9LCBALi4uIC4uLiA7CisldG9rZW4gPHN0cmluZz4ga090aGVyQnJvd3NlckF0QmxvY2tUb2tlbiAgICAvLyBALS4uLiB7IC4uLiB9CisKKy8vIFRva2VucyB3aXRoIGFuIGludGVnZXIgdmFsdWUuCisvLyBXQVJOSU5HOiBVc2UgfGludGVnZXJ8IHJ1bGUgaWYgeW91IHdhbnQgdG8gaGFuZGxlIHRoZSBzaWduLgorJXRva2VuIDxpbnRlZ2VyPiBrSW50ZWdlclRva2VuICAgICAgICAgIC8vIDEyMywgZm9yIGV4YW1wbGUKKworLy8gVG9rZW5zIHdpdGggYSBmbG9hdGluZyBwb2ludCB2YWx1ZS4KKy8vIFdBUk5JTkc6IFJlbWVtYmVyIHRvIHVzZSB8bWF5YmVfc2lnbl90b2tlbnwgcnVsZSB3aXRoIHRoZXNlIHRva2Vucy4KKyV0b2tlbiA8cmVhbD4ga1JlYWxUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuMjMsIGZvciBleGFtcGxlCisldG9rZW4gPHJlYWw+IGtQZXJjZW50YWdlVG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4lCisldG9rZW4gPHJlYWw+IGtSb290RWxlbWVudEZvbnRTaXplc0FrYVJlbVRva2VuICAgICAgICAgICAgICAvLyAuLi5yZW0KKyV0b2tlbiA8cmVhbD4ga1plcm9HbHlwaFdpZHRoc0FrYUNoVG9rZW4gICAgICAgICAgICAgICAgICAgIC8vIC4uLmNoCisldG9rZW4gPHJlYWw+IGtGb250U2l6ZXNBa2FFbVRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5lbQorJXRva2VuIDxyZWFsPiBrWEhlaWdodHNBa2FFeFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uZXgKKyV0b2tlbiA8cmVhbD4ga1BpeGVsc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLnB4CisldG9rZW4gPHJlYWw+IGtDZW50aW1ldGVyc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5jbQorJXRva2VuIDxyZWFsPiBrTWlsbGltZXRlcnNUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4ubW0KKyV0b2tlbiA8cmVhbD4ga0luY2hlc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmluCisldG9rZW4gPHJlYWw+IGtQb2ludHNUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5wdAorJXRva2VuIDxyZWFsPiBrUGljYXNUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4ucGMKKyV0b2tlbiA8cmVhbD4ga0RlZ3JlZXNUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmRlZworJXRva2VuIDxyZWFsPiBrUmFkaWFuc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4ucmFkCisldG9rZW4gPHJlYWw+IGtHcmFkaWFuc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5ncmFkCisldG9rZW4gPHJlYWw+IGtUdXJuc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi50dXJuCisldG9rZW4gPHJlYWw+IGtNaWxsaXNlY29uZHNUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5tcworJXRva2VuIDxyZWFsPiBrU2Vjb25kc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4ucworJXRva2VuIDxyZWFsPiBrSGVydHpUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaHoKKyV0b2tlbiA8cmVhbD4ga0tpbG9oZXJ0elRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmtoegorJXRva2VuIDxyZWFsPiBrVmlld3BvcnRXaWR0aFBlcmNlbnRzQWthVndUb2tlbiAgICAgICAgICAgICAgLy8gLi4udncKKyV0b2tlbiA8cmVhbD4ga1ZpZXdwb3J0SGVpZ2h0UGVyY2VudHNBa2FWaFRva2VuICAgICAgICAgICAgIC8vIC4uLnZoCisldG9rZW4gPHJlYWw+IGtWaWV3cG9ydFNtYWxsZXJTaXplUGVyY2VudHNBa2FWbWluVG9rZW4gICAgICAvLyAuLi52bWluCisldG9rZW4gPHJlYWw+IGtWaWV3cG9ydExhcmdlclNpemVQZXJjZW50c0FrYVZtYXhUb2tlbiAgICAgICAvLyAuLi52bWF4CisldG9rZW4gPHJlYWw+IGtEb3RzUGVyUGl4ZWxUb2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5kcHB4CisldG9rZW4gPHJlYWw+IGtEb3RzUGVySW5jaFRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5kcGkKKyV0b2tlbiA8cmVhbD4ga0RvdHNQZXJDZW50aW1ldGVyVG9rZW4gICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmRwY20KKyV0b2tlbiA8cmVhbD4ga0ZyYWN0aW9uc1Rva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmZyCisKKy8vIFRva2VucyB3aXRoIGFuIGludGVnZXIgcGFpciB2YWx1ZQorJXRva2VuIDxpbnRlZ2VyX3BhaXI+IGtVbmljb2RlUmFuZ2VUb2tlbiAgICAgICAgICAgICAgICAgICAgLy8gdSsuLi4sIFUrLi4uCisKKy8vCisvLyBSdWxlcyBhbmQgdGhlaXIgdHlwZXMsIHNvcnRlZCBieSB0eXBlIG5hbWUuCisvLworCisvLyBBIHRvcC1sZXZlbCBydWxlLgorJXN0YXJ0IGVudHJ5X3BvaW50CisKKyV1bmlvbiB7IGJvb2wgaW1wb3J0YW50OyB9CisldHlwZSA8aW1wb3J0YW50PiBtYXliZV9pbXBvcnRhbnQKKworJXR5cGUgPGludGVnZXI+IGludGVnZXIgbm9uX25lZ2F0aXZlX2ludGVnZXIgcG9zaXRpdmVfaW50ZWdlciB6ZXJvX29yX29uZQorCisldW5pb24geyBjc3NvbTo6UkdCQUNvbG9yVmFsdWUqIGNvbG9yOyB9CisldHlwZSA8Y29sb3I+IGNvbG9yCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8Y29sb3I+CisKKyV1bmlvbiB7IGNzc29tOjpDb2xvclN0b3AqIGNvbG9yX3N0b3A7IH0KKyV0eXBlIDxjb2xvcl9zdG9wPiBjb2xvcl9zdG9wCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8Y29sb3Jfc3RvcD4KKworJXVuaW9uIHsgY3Nzb206OkNvbG9yU3RvcExpc3QqIGNvbG9yX3N0b3BfbGlzdDsgfQorJXR5cGUgPGNvbG9yX3N0b3BfbGlzdD4gY29tbWFfc2VwYXJhdGVkX2NvbG9yX3N0b3BfbGlzdAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPGNvbG9yX3N0b3BfbGlzdD4KKworJXVuaW9uIHsgY3Nzb206OlBlcmNlbnRhZ2VWYWx1ZSogcGVyY2VudGFnZTsgfQorJXR5cGUgPHBlcmNlbnRhZ2U+IHBlcmNlbnRhZ2UgcG9zaXRpdmVfcGVyY2VudGFnZQorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPHBlcmNlbnRhZ2U+CisKKyV1bmlvbiB7IGNzc29tOjpMZW5ndGhWYWx1ZSogbGVuZ3RoOyB9CisldHlwZSA8bGVuZ3RoPiBsZW5ndGggcG9zaXRpdmVfbGVuZ3RoIGFic29sdXRlX29yX3JlbGF0aXZlX2xlbmd0aAorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPGxlbmd0aD4KKworJXVuaW9uIHsgY3Nzb206OlJhdGlvVmFsdWUqIHJhdGlvOyB9CisldHlwZSA8cmF0aW8+IHJhdGlvCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8cmF0aW8+CisKKyV1bmlvbiB7IGNzc29tOjpSZXNvbHV0aW9uVmFsdWUqIHJlc29sdXRpb247IH0KKyV0eXBlIDxyZXNvbHV0aW9uPiByZXNvbHV0aW9uCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8cmVzb2x1dGlvbj4KKworJXVuaW9uIHsgY3Nzb206OlN0cmluZ1ZhbHVlKiBzdHJpbmdfdmFsdWU7IH0KKyV0eXBlIDxzdHJpbmdfdmFsdWU+IGZvbnRfZmFtaWx5X25hbWVfaWRlbnRpZmllcl9saXN0CisgICAgICAgICAgICAgICAgICAgICBmb250X2ZhbWlseV9zdHJpbmdfbmFtZQorICAgICAgICAgICAgICAgICAgICAgZm9udF9mYW1pbHlfc3BlY2lmaWNfbmFtZQorICAgICAgICAgICAgICAgICAgICAgZm9udF9mYW1pbHlfc3BlY2lmaWNfbmFtZV9ub19zaW5nbGVfaWRlbnRpZmllcgorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPHN0cmluZ192YWx1ZT4KKworLy8gYmFzZTo6VGltZURlbHRhJ3MgaW50ZXJuYWwgdmFsdWUuICBPbmUgY2FuIGNvbnN0cnVjdCBhIGJhc2U6OlRpbWVEZWx0YSBmcm9tCisvLyB0aGlzIHZhbHVlIHVzaW5nIHRoZSBmdW5jdGlvbiBiYXNlOjpUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKCkuICBXZSB1c2UKKy8vIGl0IGluc3RlYWQgb2YgYmFzZTo6VGltZURlbHRhIGJlY2F1c2UgYmFzZTo6VGltZURlbHRhIGRvZXMgbm90IGhhdmUgYQorLy8gdHJpdmlhbCBjb25zdHJ1Y3RvciBhbmQgdGh1cyBjYW5ub3QgYmUgdXNlZCBpbiBhIHVuaW9uLgorJXVuaW9uIHsgaW50NjQgdGltZTsgfQorJXR5cGUgPHRpbWU+IHRpbWUgdGltZV93aXRoX3VuaXRzX3JlcXVpcmVkCisKKyV1bmlvbiB7IFByb3BlcnR5RGVjbGFyYXRpb24qIHByb3BlcnR5X2RlY2xhcmF0aW9uOyB9CisldHlwZSA8cHJvcGVydHlfZGVjbGFyYXRpb24+IG1heWJlX2RlY2xhcmF0aW9uCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8cHJvcGVydHlfZGVjbGFyYXRpb24+CisKKy8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIGNzc29tOjpQcm9wZXJ0eVZhbHVlLCBzb21lCisvLyBzZW1hbnRpYyBhY3Rpb25zIGNvbnRhaW4gYSB2YWx1ZSBwcm9jZXNzaW5nIChzdWNoIGFzIG9wYWNpdHkgY2xhbXBpbmcKKy8vIG9yIFJHQkEgY29sb3IgcmVzb2x1dGlvbikgdGhhdCB0ZWNobmljYWxseSBiZWxvbmdzIHRvIGNvbXB1dGVkIHZhbHVlCisvLyByZXNvbHV0aW9uIGFuZCBhcyBzdWNoIHNob3VsZCBiZSBkb25lIGJ5IGxheW91dCBlbmdpbmUuIFRoaXMgaXMgaGFybWxlc3MKKy8vIGFzIGxvbmcgYXMgd2ViIGFwcCBkb2VzIG5vdCByZWx5IG9uIGxpdGVyYWwgcHJlc2VydmF0aW9uIG9mIHByb3BlcnR5IHZhbHVlcworLy8gZXhwb3NlZCBieSBjc3NvbTo6Q1NTUnVsZVN0eWxlRGVjbGFyYXRpb24gKHNlbWFudGljcyBpcworLy8gYWx3YXlzIHByZXNlcnZlZCkuCisldW5pb24geyBjc3NvbTo6UHJvcGVydHlWYWx1ZSogcHJvcGVydHlfdmFsdWU7IH0KKyV0eXBlIDxwcm9wZXJ0eV92YWx1ZT4gYW5pbWF0aW9uX2RlbGF5X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbl9kaXJlY3Rpb25fbGlzdF9lbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbl9kaXJlY3Rpb25fcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uX2R1cmF0aW9uX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbl9maWxsX21vZGVfbGlzdF9lbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbl9maWxsX21vZGVfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uX2l0ZXJhdGlvbl9jb3VudF9saXN0X2VsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uX2l0ZXJhdGlvbl9jb3VudF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25fbmFtZV9saXN0X2VsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uX25hbWVfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uX3RpbWluZ19mdW5jdGlvbl9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBhdXRvCisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRfY29sb3JfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZF9pbWFnZV9wcm9wZXJ0eV9saXN0X2VsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZF9pbWFnZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kX3Bvc2l0aW9uX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRfcmVwZWF0X2VsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZF9yZXBlYXRfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZF9yZXBlYXRfcHJvcGVydHlfdmFsdWVfd2l0aG91dF9jb21tb25fdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV9saXN0X2VsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZF9zaXplX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV92YWx1ZV93aXRob3V0X2NvbW1vbl92YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyX2NvbG9yX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcl9yYWRpdXNfZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJfcmFkaXVzX2VsZW1lbnRfd2l0aF9jb21tb25fdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcl9yYWRpdXNfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyX3N0eWxlX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcl93aWR0aF9lbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcl93aWR0aF9lbGVtZW50X3dpdGhfY29tbW9uX3ZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJfd2lkdGhfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgYm94X3NoYWRvd19wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBjb2xvcl9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBjb21tb25fdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbl92YWx1ZXNfd2l0aG91dF9lcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfZmFjZV9sb2NhbF9zcmMKKyAgICAgICAgICAgICAgICAgICAgICAgZm9udF9mYWNlX3NyY19saXN0X2VsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgZm9udF9mYWNlX3NyY19wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBmb250X2ZhY2VfdXJsX3NyYworICAgICAgICAgICAgICAgICAgICAgICBmb250X2ZhbWlseV9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfZmFtaWx5X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfc2l6ZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBmb250X3N0eWxlX2V4Y2x1c2l2ZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBmb250X3N0eWxlX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfd2VpZ2h0X2V4Y2x1c2l2ZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBmb250X3dlaWdodF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgbGluZV9oZWlnaHRfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgbGluZV9zdHlsZQorICAgICAgICAgICAgICAgICAgICAgICBsaW5lX3N0eWxlX3dpdGhfY29tbW9uX3ZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXJfZ3JhZGllbnRfcGFyYW1zCisgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbl9zaWRlX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICBtYXhfaGVpZ2h0X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIG1heF93aWR0aF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBtaW5faGVpZ2h0X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIG1pbl93aWR0aF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBtYXliZV9iYWNrZ3JvdW5kX3NpemVfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHlfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb25fbWVkaWFfZmVhdHVyZV9rZXl3b3JkX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93X3dyYXBfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ19zaWRlX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJfZXZlbnRzX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uX2xpc3RfZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbl9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICByYWRpYWxfZ3JhZGllbnRfcGFyYW1zCisgICAgICAgICAgICAgICAgICAgICAgIHNjYW5fbWVkaWFfZmVhdHVyZV9rZXl3b3JkX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRleHRfYWxpZ25fcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9kZWNvcmF0aW9uX2xpbmVfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9kZWNvcmF0aW9uX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRleHRfaW5kZW50X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRleHRfb3ZlcmZsb3dfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9zaGFkb3dfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdGV4dF90cmFuc2Zvcm1fcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdGltZV9saXN0X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ19mdW5jdGlvbl9saXN0X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fb3JpZ2luX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25fZGVsYXlfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbl9kdXJhdGlvbl9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uX3Byb3BlcnR5X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25fdGltaW5nX2Z1bmN0aW9uX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfcmFuZ2VfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdXJsCisgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlZF9ib3hfc2hhZG93X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkX3RleHRfc2hhZG93X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxfYWxpZ25fcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZV9zcGFjZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICB3aWR0aF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICB6X2luZGV4X3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9wcm9wZXJ0eV92YWx1ZQorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPHByb3BlcnR5X3ZhbHVlPgorCisldW5pb24geyBzdGQ6OnZlY3RvcjxmbG9hdD4qIG51bWJlcl9tYXRyaXg7IH0KKyV0eXBlIDxudW1iZXJfbWF0cml4PiBudW1iZXJfbWF0cml4CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8bnVtYmVyX21hdHJpeD4KKworJXVuaW9uIHsgZ2xtOjptYXQ0KiBtYXRyaXg0eDQ7IH0KKyV0eXBlIDxtYXRyaXg0eDQ+IGNvYmFsdF9tdG1fdHJhbnNmb3JtX2Z1bmN0aW9uCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8bWF0cml4NHg0PgorCisldW5pb24geyBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQqIG1hcmdpbl9vcl9wYWRkaW5nX3Nob3J0aGFuZDsgfQorJXR5cGUgPG1hcmdpbl9vcl9wYWRkaW5nX3Nob3J0aGFuZD4gbWFyZ2luX3Byb3BlcnR5X3ZhbHVlIHBhZGRpbmdfcHJvcGVydHlfdmFsdWUKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxtYXJnaW5fb3JfcGFkZGluZ19zaG9ydGhhbmQ+CisKKyV1bmlvbiB7IFNpbmdsZUFuaW1hdGlvblNob3J0aGFuZCogc2luZ2xlX2FuaW1hdGlvbjsgfQorJXR5cGUgPHNpbmdsZV9hbmltYXRpb24+IHNpbmdsZV9hbmltYXRpb24gc2luZ2xlX25vbl9lbXB0eV9hbmltYXRpb24KKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxzaW5nbGVfYW5pbWF0aW9uPgorCisldW5pb24geyBBbmltYXRpb25TaG9ydGhhbmRCdWlsZGVyKiBhbmltYXRpb25fYnVpbGRlcjsgfQorJXR5cGUgPGFuaW1hdGlvbl9idWlsZGVyPiBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0aW9uX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxhbmltYXRpb25fYnVpbGRlcj4KKworJXVuaW9uIHsgQW5pbWF0aW9uU2hvcnRoYW5kKiBhbmltYXRpb247IH0KKyV0eXBlIDxhbmltYXRpb24+IGFuaW1hdGlvbl9wcm9wZXJ0eV92YWx1ZQorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPGFuaW1hdGlvbj4KKworJXVuaW9uIHsgRm9udFNob3J0aGFuZCogZm9udDsgfQorJXR5cGUgPGZvbnQ+IGZvbnRfcHJvcGVydHlfdmFsdWUKKyAgICAgICAgICAgICBvcHRpb25hbF9mb250X3ZhbHVlX2xpc3QKKyAgICAgICAgICAgICBub25fZW1wdHlfb3B0aW9uYWxfZm9udF92YWx1ZV9saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8Zm9udD4KKworJXVuaW9uIHsgVHJhbnNpdGlvblNob3J0aGFuZCogdHJhbnNpdGlvbjsgfQorJXR5cGUgPHRyYW5zaXRpb24+IHRyYW5zaXRpb25fcHJvcGVydHlfdmFsdWUKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDx0cmFuc2l0aW9uPgorCisldHlwZSA8cmVhbD4gYWxwaGEgYW5nbGUgbm9uX25lZ2F0aXZlX251bWJlciBudW1iZXIKKworJXVuaW9uIHsgY3Nzb206OkNTU1N0eWxlU2hlZXQqIHN0eWxlX3NoZWV0OyB9CisldHlwZSA8c3R5bGVfc2hlZXQ+IHN0eWxlX3NoZWV0CislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8c3R5bGVfc2hlZXQ+CisKKyV1bmlvbiB7IGNzc29tOjpDU1NSdWxlTGlzdCogcnVsZV9saXN0OyB9CisldHlwZSA8cnVsZV9saXN0PiBydWxlX2xpc3QgcnVsZV9saXN0X2Jsb2NrCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8cnVsZV9saXN0PgorCisldW5pb24geyBjc3NvbTo6QXR0cmlidXRlU2VsZWN0b3I6OlZhbHVlTWF0Y2hUeXBlIGF0dHJpYnV0ZV9tYXRjaDsgfQorJXR5cGUgPGF0dHJpYnV0ZV9tYXRjaD4gYXR0cmlidXRlX21hdGNoCisKKyV1bmlvbiB7IGNzc29tOjpTaW1wbGVTZWxlY3Rvciogc2ltcGxlX3NlbGVjdG9yOyB9CisldHlwZSA8c2ltcGxlX3NlbGVjdG9yPiBhdHRyaWJ1dGVfc2VsZWN0b3JfdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX3NlbGVjdG9yX3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBpZF9zZWxlY3Rvcl90b2tlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvX2NsYXNzX3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fZWxlbWVudF90b2tlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX3NlbGVjdG9yX3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX3NlbGVjdG9yX3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfc2VsZWN0b3JfdG9rZW4KKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxzaW1wbGVfc2VsZWN0b3I+CisKKyV1bmlvbiB7IGNzc29tOjpDb21wb3VuZFNlbGVjdG9yKiBjb21wb3VuZF9zZWxlY3RvcjsgfQorJXR5cGUgPGNvbXBvdW5kX3NlbGVjdG9yPiBjb21wb3VuZF9zZWxlY3Rvcl90b2tlbgorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPGNvbXBvdW5kX3NlbGVjdG9yPgorCisldW5pb24geyBjc3NvbTo6Q29tYmluYXRvciogY29tYmluYXRvcjsgfQorJXR5cGUgPGNvbWJpbmF0b3I+IGNvbWJpbmF0b3IKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxjb21iaW5hdG9yPgorCisldW5pb24geyBjc3NvbTo6Q29tcGxleFNlbGVjdG9yKiBjb21wbGV4X3NlbGVjdG9yOyB9CisldHlwZSA8Y29tcGxleF9zZWxlY3Rvcj4gY29tcGxleF9zZWxlY3RvcgorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPGNvbXBsZXhfc2VsZWN0b3I+CisKKyV1bmlvbiB7IGNzc29tOjpTZWxlY3RvcnMqIHNlbGVjdG9yczsgfQorJXR5cGUgPHNlbGVjdG9ycz4gc2VsZWN0b3JfbGlzdAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPHNlbGVjdG9ycz4KKworJXVuaW9uIHsgY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OlNpZGVPckNvcm5lciBzaWRlX29yX2Nvcm5lcjsgfQorJXR5cGUgPHNpZGVfb3JfY29ybmVyPiBzaWRlIHNpZGVfb3JfY29ybmVyCisKKyV1bmlvbiB7IGludCBzaWduOyB9CisldHlwZSA8c2lnbj4gbWF5YmVfc2lnbl90b2tlbgorCisldHlwZSA8c3RyaW5nPiBpZGVudGlmaWVyX3Rva2VuCisKKyV1bmlvbiB7IGNzc29tOjpQcm9wZXJ0eUtleSBwcm9wZXJ0eV9rZXk7IH0KKyV0eXBlIDxwcm9wZXJ0eV9rZXk+IGFuaW1hdGFibGVfcHJvcGVydHlfdG9rZW4KKworJXVuaW9uIHsgY3Nzb206OkNTU0RlY2xhcmVkU3R5bGVEYXRhKiBzdHlsZV9kZWNsYXJhdGlvbl9kYXRhOyB9CisldHlwZSA8c3R5bGVfZGVjbGFyYXRpb25fZGF0YT4gc3R5bGVfZGVjbGFyYXRpb25fbGlzdAorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPHN0eWxlX2RlY2xhcmF0aW9uX2RhdGE+CisKKyV1bmlvbiB7IGNzc29tOjpDU1NSdWxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVfZGVjbGFyYXRpb247IH0KKyV0eXBlIDxzdHlsZV9kZWNsYXJhdGlvbj4gc3R5bGVfZGVjbGFyYXRpb25fYmxvY2sKKyVkZXN0cnVjdG9yIHsgU2FmZVJlbGVhc2UoJCQpOyB9IDxzdHlsZV9kZWNsYXJhdGlvbj4KKworJXVuaW9uIHsgY3Nzb206OkNTU0ZvbnRGYWNlUnVsZSogZm9udF9mYWNlX3J1bGU7IH0KKyV0eXBlIDxmb250X2ZhY2VfcnVsZT4gYXRfZm9udF9mYWNlX3J1bGUKKyVkZXN0cnVjdG9yIHsgU2FmZVJlbGVhc2UoJCQpOyB9IDxmb250X2ZhY2VfcnVsZT4KKworJXVuaW9uIHsgY3Nzb206OkNTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVfcnVsZTsgfQorJXR5cGUgPGtleWZyYW1lX3J1bGU+IGtleWZyYW1lX3J1bGUKKyVkZXN0cnVjdG9yIHsgU2FmZVJlbGVhc2UoJCQpOyB9IDxrZXlmcmFtZV9ydWxlPgorCisldW5pb24geyBjc3NvbTo6Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJhbWVzX3J1bGU7IH0KKyV0eXBlIDxrZXlmcmFtZXNfcnVsZT4gYXRfa2V5ZnJhbWVzX3J1bGUKKyVkZXN0cnVjdG9yIHsgU2FmZVJlbGVhc2UoJCQpOyB9IDxrZXlmcmFtZXNfcnVsZT4KKworJXVuaW9uIHsgY3Nzb206OkNTU1J1bGVMaXN0KiBrZXlmcmFtZV9ydWxlX2xpc3Q7IH0KKyV0eXBlIDxrZXlmcmFtZV9ydWxlX2xpc3Q+IGtleWZyYW1lX3J1bGVfbGlzdAorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPGtleWZyYW1lX3J1bGVfbGlzdD4KKworJXVuaW9uIHsgZmxvYXQga2V5ZnJhbWVfb2Zmc2V0OyB9CisldHlwZSA8a2V5ZnJhbWVfb2Zmc2V0PiBrZXlmcmFtZV9vZmZzZXQKKworJXVuaW9uIHsgc3RkOjp2ZWN0b3I8ZmxvYXQ+KiBrZXlmcmFtZV9zZWxlY3RvcjsgfQorJXR5cGUgPGtleWZyYW1lX3NlbGVjdG9yPiBrZXlmcmFtZV9zZWxlY3RvcjsKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxrZXlmcmFtZV9zZWxlY3Rvcj4KKworJXVuaW9uIHsgY3Nzb206OkNTU0ZvbnRGYWNlRGVjbGFyYXRpb25EYXRhKiBmb250X2ZhY2VfZGVjbGFyYXRpb25fZGF0YTsgfQorJXR5cGUgPGZvbnRfZmFjZV9kZWNsYXJhdGlvbl9kYXRhPiBmb250X2ZhY2VfZGVjbGFyYXRpb25fbGlzdAorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPGZvbnRfZmFjZV9kZWNsYXJhdGlvbl9kYXRhPgorCisldW5pb24geyBjc3NvbTo6Q1NTTWVkaWFSdWxlKiBtZWRpYV9ydWxlOyB9CisldHlwZSA8bWVkaWFfcnVsZT4gYXRfbWVkaWFfcnVsZQorJWRlc3RydWN0b3IgeyBTYWZlUmVsZWFzZSgkJCk7IH0gPG1lZGlhX3J1bGU+CisKKyV1bmlvbiB7IGNzc29tOjpNZWRpYUxpc3QqIG1lZGlhX2xpc3Q7IH0KKyV0eXBlIDxtZWRpYV9saXN0PiBtZWRpYV9saXN0CislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8bWVkaWFfbGlzdD4KKworJXVuaW9uIHsgY3Nzb206Ok1lZGlhUXVlcnkqIG1lZGlhX3F1ZXJ5OyB9CisldHlwZSA8bWVkaWFfcXVlcnk+IG1lZGlhX3F1ZXJ5CislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8bWVkaWFfcXVlcnk+CisKKyV1bmlvbiB7IGJvb2wgZXZhbHVhdGVkX21lZGlhX3R5cGU7IH0KKyV0eXBlIDxldmFsdWF0ZWRfbWVkaWFfdHlwZT4gZXZhbHVhdGVkX21lZGlhX3R5cGUgbWVkaWFfdHlwZV9zcGVjaWZpZWQKKworJXVuaW9uIHsgY3Nzb206Ok1lZGlhRmVhdHVyZXMqIG1lZGlhX2ZlYXR1cmVzOyB9CisldHlwZSA8bWVkaWFfZmVhdHVyZXM+IG1lZGlhX2ZlYXR1cmVfbGlzdAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPG1lZGlhX2ZlYXR1cmVzPgorCisldW5pb24geyBjc3NvbTo6TWVkaWFGZWF0dXJlKiBtZWRpYV9mZWF0dXJlOyB9CisldHlwZSA8bWVkaWFfZmVhdHVyZT4gbWVkaWFfZmVhdHVyZSBtZWRpYV9mZWF0dXJlX2Jsb2NrCisgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfZmVhdHVyZV93aXRoX3ZhbHVlIG1lZGlhX2ZlYXR1cmVfd2l0aG91dF92YWx1ZQorICAgICAgICAgICAgICAgICAgICAgIG1lZGlhX2ZlYXR1cmVfYWxsb3dpbmdfb3BlcmF0b3Jfd2l0aF92YWx1ZQorCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8bWVkaWFfZmVhdHVyZT4KKworJXVuaW9uIHsgY3Nzb206Ok1lZGlhRmVhdHVyZU9wZXJhdG9yIG1lZGlhX2ZlYXR1cmVfb3BlcmF0b3I7IH0KKyV0eXBlIDxtZWRpYV9mZWF0dXJlX29wZXJhdG9yPiBtZWRpYV9mZWF0dXJlX29wZXJhdG9yCisKKyV1bmlvbiB7IGNzc29tOjpDU1NTdHlsZVJ1bGUqIHN0eWxlX3J1bGU7IH0KKyV0eXBlIDxzdHlsZV9ydWxlPiBxdWFsaWZpZWRfcnVsZSBzdHlsZV9ydWxlCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8c3R5bGVfcnVsZT4KKworJXVuaW9uIHsgY3Nzb206OkNTU1J1bGUqIGNzc19ydWxlOyB9CisldHlwZSA8Y3NzX3J1bGU+IHJ1bGUKKyVkZXN0cnVjdG9yIHsgU2FmZVJlbGVhc2UoJCQpOyB9IDxjc3NfcnVsZT4KKworJXVuaW9uIHsgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKiBwcm9wZXJ0eV9saXN0OyB9CisldHlwZSA8cHJvcGVydHlfbGlzdD4gYmFja2dyb3VuZF9zaXplX3Byb3BlcnR5X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICBib3JkZXJfY29sb3JfcHJvcGVydHlfbGlzdAorICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcl9yYWRpdXNfcHJvcGVydHlfbGlzdAorICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcl9zdHlsZV9wcm9wZXJ0eV9saXN0CisgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyX3dpZHRoX3Byb3BlcnR5X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0aW9uX2RpcmVjdGlvbl9saXN0CisgICAgICAgICAgICAgICAgICAgICAgY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9maWxsX21vZGVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgIGNvbW1hX3NlcGFyYXRlZF9hbmltYXRpb25faXRlcmF0aW9uX2NvdW50X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0aW9uX25hbWVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgIGNvbW1hX3NlcGFyYXRlZF9iYWNrZ3JvdW5kX2ltYWdlX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICBjb21tYV9zZXBhcmF0ZWRfYm94X3NoYWRvd19saXN0CisgICAgICAgICAgICAgICAgICAgICAgY29tbWFfc2VwYXJhdGVkX2ZvbnRfZmFjZV9zcmNfbGlzdAorICAgICAgICAgICAgICAgICAgICAgIGNvbW1hX3NlcGFyYXRlZF9mb250X2ZhbWlseV9uYW1lX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICBjb21tYV9zZXBhcmF0ZWRfdGV4dF9zaGFkb3dfbGlzdAorICAgICAgICAgICAgICAgICAgICAgIGNvbW1hX3NlcGFyYXRlZF91bmljb2RlX3JhbmdlX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZWRfdHdvX3Bvc2l0aW9uX2xpc3RfZWxlbWVudHMKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxwcm9wZXJ0eV9saXN0PgorCisldW5pb24geyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUqIHByb3BlcnR5X2xpc3RfdmFsdWU7IH0KKyV0eXBlIDxwcm9wZXJ0eV9saXN0X3ZhbHVlPiBhdF9wb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZV93aXRoX3Bvc2l0aXZlX2xlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2Vfd2l0aF8yX3Bvc2l0aXZlX2xlbmd0aF9wZXJjZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlX2F0X3Bvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkX3Bvc2l0aW9uX3Byb3BlcnR5CislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8cHJvcGVydHlfbGlzdF92YWx1ZT4KKworJXVuaW9uIHsgY3Nzb206OlRyYW5zZm9ybUZ1bmN0aW9uKiB0cmFuc2Zvcm1fZnVuY3Rpb247IH0KKyV0eXBlIDx0cmFuc2Zvcm1fZnVuY3Rpb24+IHNjYWxlX2Z1bmN0aW9uX3BhcmFtZXRlcnMKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDx0cmFuc2Zvcm1fZnVuY3Rpb24+CisKKyV1bmlvbiB7IGNzc29tOjpUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlciogdHJhbnNmb3JtX2Z1bmN0aW9uczsgfQorJXR5cGUgPHRyYW5zZm9ybV9mdW5jdGlvbnM+IHRyYW5zZm9ybV9saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8dHJhbnNmb3JtX2Z1bmN0aW9ucz4KKworJXVuaW9uIHsgY3Nzb206OkZpbHRlckZ1bmN0aW9uKiBmaWx0ZXJfZnVuY3Rpb247IH0KKyV0eXBlIDxmaWx0ZXJfZnVuY3Rpb24+IGNvYmFsdF9tdG1fZmlsdGVyX2Z1bmN0aW9uCisldHlwZSA8ZmlsdGVyX2Z1bmN0aW9uPiBmaWx0ZXJfZnVuY3Rpb24KKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxmaWx0ZXJfZnVuY3Rpb24+CisKKyV1bmlvbiB7IGNzc29tOjpGaWx0ZXJGdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlciogY29iYWx0X210bV9maWx0ZXJfZnVuY3Rpb25zOyB9CisldHlwZSA8Y29iYWx0X210bV9maWx0ZXJfZnVuY3Rpb25zPiBmaWx0ZXJfZnVuY3Rpb25fbGlzdAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPGNvYmFsdF9tdG1fZmlsdGVyX2Z1bmN0aW9ucz4KKworJXVuaW9uIHsKKyAgY3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uOjpNZXNoU3BlYyogY29iYWx0X21hcF90b19tZXNoX3NwZWM7IH0KKyV0eXBlIDxjb2JhbHRfbWFwX3RvX21lc2hfc3BlYz4gY29iYWx0X21hcF90b19tZXNoX3NwZWMKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxjb2JhbHRfbWFwX3RvX21lc2hfc3BlYz4KKworJXVuaW9uIHsKKyAgY3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uOjpSZXNvbHV0aW9uTWF0Y2hlZE1lc2hMaXN0QnVpbGRlciogY29iYWx0X210bV9yZXNvbHV0aW9uX21hdGNoZWRfbWVzaGVzOyB9CisldHlwZSA8Y29iYWx0X210bV9yZXNvbHV0aW9uX21hdGNoZWRfbWVzaGVzPiBjb2JhbHRfbXRtX3Jlc29sdXRpb25fbWF0Y2hlZF9tZXNoX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxjb2JhbHRfbXRtX3Jlc29sdXRpb25fbWF0Y2hlZF9tZXNoZXM+CisKKyV1bmlvbiB7IGNzc29tOjpNYXBUb01lc2hGdW5jdGlvbjo6UmVzb2x1dGlvbk1hdGNoZWRNZXNoKiBjb2JhbHRfbXRtX3Jlc29sdXRpb25fbWF0Y2hlZF9tZXNoOyB9CisldHlwZSA8Y29iYWx0X210bV9yZXNvbHV0aW9uX21hdGNoZWRfbWVzaD4gY29iYWx0X210bV9yZXNvbHV0aW9uX21hdGNoZWRfbWVzaAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPGNvYmFsdF9tdG1fcmVzb2x1dGlvbl9tYXRjaGVkX21lc2g+CisKKyV1bmlvbiB7IGNzc29tOjpLZXl3b3JkVmFsdWUqIHN0ZXJlb19tb2RlOyB9CisldHlwZSA8c3RlcmVvX21vZGU+IG1heWJlX2NvYmFsdF9tdG1fc3RlcmVvX21vZGU7CisldHlwZSA8c3RlcmVvX21vZGU+IGNvYmFsdF9tdG1fc3RlcmVvX21vZGU7CislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8c3RlcmVvX21vZGU+CisKKyV1bmlvbiB7IGNzc29tOjpUaW1lTGlzdFZhbHVlOjpCdWlsZGVyKiB0aW1lX2xpc3Q7IH0KKyV0eXBlIDx0aW1lX2xpc3Q+IGNvbW1hX3NlcGFyYXRlZF90aW1lX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDx0aW1lX2xpc3Q+CisKKyV1bmlvbiB7IGNzc29tOjpQcm9wZXJ0eUtleUxpc3RWYWx1ZTo6QnVpbGRlciogcHJvcGVydHlfbmFtZV9saXN0OyB9CisldHlwZSA8cHJvcGVydHlfbmFtZV9saXN0PiBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0YWJsZV9wcm9wZXJ0eV9uYW1lX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IDxwcm9wZXJ0eV9uYW1lX2xpc3Q+CisKKyV1bmlvbiB7CisgIGNzc29tOjpTdGVwcGluZ1RpbWluZ0Z1bmN0aW9uOjpWYWx1ZUNoYW5nZUxvY2F0aW9uCisgICAgICBzdGVwcGluZ192YWx1ZV9jaGFuZ2VfbG9jYXRpb247Cit9CisldHlwZSA8c3RlcHBpbmdfdmFsdWVfY2hhbmdlX2xvY2F0aW9uPiBtYXliZV9zdGVwc19zdGFydF9vcl9lbmRfcGFyYW1ldGVyCisKKyV1bmlvbiB7IGNzc29tOjpUaW1pbmdGdW5jdGlvbiogdGltaW5nX2Z1bmN0aW9uOyB9CisldHlwZSA8dGltaW5nX2Z1bmN0aW9uPiBzaW5nbGVfdGltaW5nX2Z1bmN0aW9uCislZGVzdHJ1Y3RvciB7IFNhZmVSZWxlYXNlKCQkKTsgfSA8dGltaW5nX2Z1bmN0aW9uPgorCisldW5pb24geworICBjc3NvbTo6VGltaW5nRnVuY3Rpb25MaXN0VmFsdWU6OkJ1aWxkZXIqCisgICAgICB0aW1pbmdfZnVuY3Rpb25fbGlzdDsKK30KKyV0eXBlIDx0aW1pbmdfZnVuY3Rpb25fbGlzdD4KKyAgICBjb21tYV9zZXBhcmF0ZWRfc2luZ2xlX3RpbWluZ19mdW5jdGlvbl9saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8dGltaW5nX2Z1bmN0aW9uX2xpc3Q+CisKKyV1bmlvbiB7IFNpbmdsZVRyYW5zaXRpb25TaG9ydGhhbmQqIHNpbmdsZV90cmFuc2l0aW9uOyB9CisldHlwZSA8c2luZ2xlX3RyYW5zaXRpb24+IHNpbmdsZV90cmFuc2l0aW9uIHNpbmdsZV9ub25fZW1wdHlfdHJhbnNpdGlvbgorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPHNpbmdsZV90cmFuc2l0aW9uPgorCisldW5pb24geyBUcmFuc2l0aW9uU2hvcnRoYW5kQnVpbGRlciogdHJhbnNpdGlvbl9idWlsZGVyOyB9CisldHlwZSA8dHJhbnNpdGlvbl9idWlsZGVyPiBjb21tYV9zZXBhcmF0ZWRfdHJhbnNpdGlvbl9saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8dHJhbnNpdGlvbl9idWlsZGVyPgorCisldW5pb24geyBCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXIqIGJhY2tncm91bmRfc2hvcnRoYW5kX2xheWVyOyB9CisldHlwZSA8YmFja2dyb3VuZF9zaG9ydGhhbmRfbGF5ZXI+CisgICAgYmFja2dyb3VuZF9wb3NpdGlvbl9hbmRfc2l6ZV9zaG9ydGhhbmRfcHJvcGVydHlfdmFsdWUKKyAgICBiYWNrZ3JvdW5kX3JlcGVhdF9zaG9ydGhhbmRfcHJvcGVydHlfdmFsdWUKKyAgICBiYWNrZ3JvdW5kX3Bvc2l0aW9uX2FuZF9yZXBlYXRfY29tYmluYXRpb24KKyAgICBmaW5hbF9iYWNrZ3JvdW5kX2xheWVyX3dpdGhvdXRfcG9zaXRpb25fYW5kX3JlcGVhdAorICAgIGZpbmFsX2JhY2tncm91bmRfbGF5ZXIKKyAgICBiYWNrZ3JvdW5kX3Byb3BlcnR5X3ZhbHVlCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8YmFja2dyb3VuZF9zaG9ydGhhbmRfbGF5ZXI+CisKKyV1bmlvbiB7IFBvc2l0aW9uUGFyc2VTdHJ1Y3R1cmUqIHBvc2l0aW9uX3N0cnVjdHVyZTsgfQorJXR5cGUgPHBvc2l0aW9uX3N0cnVjdHVyZT4gcG9zaXRpb25fbGlzdAorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gPHBvc2l0aW9uX3N0cnVjdHVyZT4KKworJXVuaW9uIHsgQm9yZGVyT3JPdXRsaW5lU2hvcnRoYW5kKiBib3JkZXJfb3Jfb3V0bGluZV9zaG9ydGhhbmQ7IH0KKyV0eXBlIDxib3JkZXJfb3Jfb3V0bGluZV9zaG9ydGhhbmQ+IGJvcmRlcl9vcl9vdXRsaW5lX3Byb3BlcnR5X3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV9saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8Ym9yZGVyX29yX291dGxpbmVfc2hvcnRoYW5kPgorCisldW5pb24geyBTaGFkb3dQcm9wZXJ0eUluZm8qIHNoYWRvd19pbmZvOyB9CisldHlwZSA8c2hhZG93X2luZm8+IGJveF9zaGFkb3dfbGlzdCB0ZXh0X3NoYWRvd19saXN0CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSA8c2hhZG93X2luZm8+CisKKyV1bmlvbiB7IGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjpTaXplS2V5d29yZCBzaXplX2tleXdvcmQ7IH0KKyV0eXBlIDxzaXplX2tleXdvcmQ+IGNpcmNsZV93aXRoX3NpemVfa2V5d29yZAorICAgICAgICAgICAgICAgICAgICAgbWF5YmVfZWxsaXBzZV93aXRoX3NpemVfa2V5d29yZCBzaXplX2tleXdvcmQKKworJSUKKworLy8gV0FSTklORzogRXZlcnkgcnVsZSwgZXhjZXB0IHRoZSBvbmVzIHdoaWNoIGVuZCB3aXRoICIuLi5fdG9rZW4iLCBzaG91bGQKKy8vICAgICAgICAgIGNvbnN1bWUgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKworCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorLy8gQ29tbW9uIHJ1bGVzIHVzZWQgYWNyb3NzIHRoZSBncmFtbWFyLgorLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKworbWF5YmVfd2hpdGVzcGFjZToKKyAgICAvKiBlbXB0eSAqLworICB8IG1heWJlX3doaXRlc3BhY2Uga1doaXRlc3BhY2VUb2tlbgorICA7CisKK2Vycm9yczoKKyAgICBlcnJvcgorICB8IGVycm9ycyBlcnJvcgorICA7CisKKworLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKy8vIEAtcnVsZXMuCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorCisvLyBUaGUgQGZvbnQtZmFjZSBydWxlIGNvbnNpc3RzIG9mIHRoZSBAZm9udC1mYWNlIGF0LWtleXdvcmQgZm9sbG93ZWQgYnkgYSBibG9jaworLy8gb2YgZGVzY3JpcHRvciBkZWNsYXJhdGlvbnMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LWZhY2UtcnVsZQorYXRfZm9udF9mYWNlX3J1bGU6CisgICAga0ZvbnRGYWNlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSAneycgbWF5YmVfd2hpdGVzcGFjZQorICAgICAgICBmb250X2ZhY2VfZGVjbGFyYXRpb25fbGlzdCAnfScgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTRm9udEZhY2VSdWxlPgorICAgICAgICBmb250X2ZhY2VfcnVsZSgKKyAgICAgICAgICAgIG5ldyBjc3NvbTo6Q1NTRm9udEZhY2VSdWxlKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ1KSkpOworICAgIGlmIChmb250X2ZhY2VfcnVsZS0+SXNWYWxpZCgpKSB7CisgICAgICAkJCA9IEFkZFJlZihmb250X2ZhY2VfcnVsZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAiaW52YWxpZCBmb250LWZhY2UiKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgOworCisvLyBUaGUgQG1lZGlhIHJ1bGUgaXMgYSBjb25kaXRpb25hbCBncm91cCBydWxlIHdob3NlIGNvbmRpdGlvbiBpcyBhIG1lZGlhIHF1ZXJ5LgorLy8gSXQgY29uc2lzdHMgb2YgdGhlIGF0LWtleXdvcmQgJ0BtZWRpYScgZm9sbG93ZWQgYnkgYSAocG9zc2libHkgZW1wdHkpIG1lZGlhCisvLyBxdWVyeSBsaXN0LCBmb2xsb3dlZCBieSBhIGdyb3VwIHJ1bGUgYm9keS4gVGhlIGNvbmRpdGlvbiBvZiB0aGUgcnVsZSBpcyB0aGUKKy8vIHJlc3VsdCBvZiB0aGUgbWVkaWEgcXVlcnkuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbmRpdGlvbmFsLyNhdC1tZWRpYQorYXRfbWVkaWFfcnVsZToKKyAgLy8gQG1lZGlhIGV4cHIge30KKyAgICBrTWVkaWFUb2tlbiBtYXliZV93aGl0ZXNwYWNlIG1lZGlhX2xpc3QgcnVsZV9saXN0X2Jsb2NrIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkNTU01lZGlhUnVsZShNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpKSk7CisgIH0KKyAgOworCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorLy8gTWVkaWEgUnVsZSwgTWVkaWEgUXVlcnksIE1lZGlhIFR5cGUKKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzc29tLyNtZWRpYS1xdWVyaWVzCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8KKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisKKy8vIEZvbGxvdyB0aGUgc3ludGF4IGRlZmluZWQgaGVyZToKKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLyNzeW50YXgKKworLy8gT3JpZW50YXRpb24gdmFsdWUsIGxhbmRzY2FsZSBvciBwb3J0cmFpdAorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1tZWRpYXF1ZXJpZXMvI29yaWVudGF0aW9uCitvcmllbnRhdGlvbl9tZWRpYV9mZWF0dXJlX2tleXdvcmRfdmFsdWU6CisgICAga0xhbmRzY2FwZU1lZGlhRmVhdHVyZUtleXdvcmRWYWx1ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpNZWRpYUZlYXR1cmVLZXl3b3JkVmFsdWU6OkdldExhbmRzY2FwZSgpLmdldCgpKTsKKyAgfQorICB8IGtQb3J0cmFpdE1lZGlhRmVhdHVyZUtleXdvcmRWYWx1ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpNZWRpYUZlYXR1cmVLZXl3b3JkVmFsdWU6OkdldFBvcnRyYWl0KCkuZ2V0KCkpOworICB9CisgIDsKKworLy8gU2NhbiB2YWx1ZSwgaW50ZXJsYWNlIG9yIHByb2dyZXNzaXZlCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jc2Nhbgorc2Nhbl9tZWRpYV9mZWF0dXJlX2tleXdvcmRfdmFsdWU6CisgICAga0ludGVybGFjZU1lZGlhRmVhdHVyZUtleXdvcmRWYWx1ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpNZWRpYUZlYXR1cmVLZXl3b3JkVmFsdWU6OkdldEludGVybGFjZSgpLmdldCgpKTsKKyAgfQorICB8IGtQcm9ncmVzc2l2ZU1lZGlhRmVhdHVyZUtleXdvcmRWYWx1ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpNZWRpYUZlYXR1cmVLZXl3b3JkVmFsdWU6OkdldFByb2dyZXNzaXZlKCkuZ2V0KCkpOworICB9CisgIDsKKworLy8gJ21pbi0nIG9yICdtYXgtJyBwcmVmaXggZm9yIG1lZGlhIGZlYXR1cmUgbmFtZS4KK21lZGlhX2ZlYXR1cmVfb3BlcmF0b3I6CisgICAga01lZGlhTWluaW11bVRva2VuIHsgJCQgPSBjc3NvbTo6a01pbmltdW07IH0KKyAgfCBrTWVkaWFNYXhpbXVtVG9rZW4geyAkJCA9IGNzc29tOjprTWF4aW11bTsgfQorICA7CisKKy8vIE1lZGlhIGZlYXR1cmU6ICdmZWF0dXJlJyBvbmx5LgorLy8gKGZlYXR1cmUpIHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSBpZiAoZmVhdHVyZTp4KSB3aWxsIGV2YWx1YXRlIHRvIHRydWUgZm9yIGEKKy8vIHZhbHVlIHggb3RoZXIgdGhhbiB6ZXJvIG9yIHplcm8gZm9sbG93ZWQgYnkgYSB1bml0IGlkZW50aWZpZXIuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jbWVkaWExCittZWRpYV9mZWF0dXJlX3dpdGhvdXRfdmFsdWU6CisgICAga0xlbmd0aE1lZGlhRmVhdHVyZVR5cGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhRmVhdHVyZSgkMSkpOworICB9CisgIHwga09yaWVudGF0aW9uTWVkaWFGZWF0dXJlVHlwZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFGZWF0dXJlKCQxKSk7CisgIH0KKyAgfCBrUmF0aW9NZWRpYUZlYXR1cmVUeXBlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpNZWRpYUZlYXR1cmUoJDEpKTsKKyAgfQorICB8IGtOb25OZWdhdGl2ZUludGVnZXJNZWRpYUZlYXR1cmVUeXBlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpNZWRpYUZlYXR1cmUoJDEpKTsKKyAgfQorICB8IGtSZXNvbHV0aW9uTWVkaWFGZWF0dXJlVHlwZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFGZWF0dXJlKCQxKSk7CisgIH0KKyAgfCBrU2Nhbk1lZGlhRmVhdHVyZVR5cGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhRmVhdHVyZSgkMSkpOworICB9CisgIHwga1plcm9Pck9uZU1lZGlhRmVhdHVyZVR5cGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhRmVhdHVyZSgkMSkpOworICB9CisgIDsKKworLy8gTWVkaWEgZmVhdHVyZTogJ2ZlYXR1cmU6dmFsdWUnIGZvciBmZWF0dXJlcyB0aGF0IGRvbid0IGFsbG93IHByZWZpeGVzLgorbWVkaWFfZmVhdHVyZV93aXRoX3ZhbHVlOgorICAgIGtPcmllbnRhdGlvbk1lZGlhRmVhdHVyZVR5cGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgb3JpZW50YXRpb25fbWVkaWFfZmVhdHVyZV9rZXl3b3JkX3ZhbHVlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhRmVhdHVyZSgkMSwgJDQpKTsKKyAgfQorICB8IGtTY2FuTWVkaWFGZWF0dXJlVHlwZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICBzY2FuX21lZGlhX2ZlYXR1cmVfa2V5d29yZF92YWx1ZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpNZWRpYUZlYXR1cmUoJDEsICQ0KSk7CisgIH0KKyAgfCBrWmVyb09yT25lTWVkaWFGZWF0dXJlVHlwZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gemVyb19vcl9vbmUgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFGZWF0dXJlKCQxLCBuZXcgY3Nzb206OkludGVnZXJWYWx1ZSgkNCkpKTsKKyAgfQorICA7CisKKy8vIE1lZGlhIGZlYXR1cmU6ICdmZWF0dXJlOnZhbHVlJyBmb3IgZmVhdHVyZXMgdGhhdCBhbGxvdyBtaW4vbWF4IHByZWZpeGVzLgorbWVkaWFfZmVhdHVyZV9hbGxvd2luZ19vcGVyYXRvcl93aXRoX3ZhbHVlOgorICAgIGtMZW5ndGhNZWRpYUZlYXR1cmVUeXBlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBsZW5ndGggeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFGZWF0dXJlKCQxLCBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCkpKTsKKyAgfQorICB8IGtOb25OZWdhdGl2ZUludGVnZXJNZWRpYUZlYXR1cmVUeXBlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgIG5vbl9uZWdhdGl2ZV9pbnRlZ2VyIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhRmVhdHVyZSgkMSwgbmV3IGNzc29tOjpJbnRlZ2VyVmFsdWUoJDQpKSk7CisgIH0KKyAgfCBrUmF0aW9NZWRpYUZlYXR1cmVUeXBlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiByYXRpbyB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpNZWRpYUZlYXR1cmUoJDEsIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSkpOworICB9CisgIHwga1Jlc29sdXRpb25NZWRpYUZlYXR1cmVUeXBlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiByZXNvbHV0aW9uIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhRmVhdHVyZSgkMSwgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpKSk7CisgIH0KKyAgOworCisvLyBNZWRpYSBmZWF0dXJlOiAnZmVhdHVyZScgb3IgJ2ZlYXR1cmU6dmFsdWUnIG9yICdtaW4tZmVhdHVyZTp2YWx1ZScgb3IKKy8vICdtYXgtZmVhdHVyZTp2YWx1ZScKKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLyNtZWRpYTEKK21lZGlhX2ZlYXR1cmU6CisgICAgbWVkaWFfZmVhdHVyZV93aXRob3V0X3ZhbHVlCisgIHwgbWVkaWFfZmVhdHVyZV93aXRoX3ZhbHVlCisgIHwgbWVkaWFfZmVhdHVyZV9hbGxvd2luZ19vcGVyYXRvcl93aXRoX3ZhbHVlCisgIHwgbWVkaWFfZmVhdHVyZV9vcGVyYXRvciBtZWRpYV9mZWF0dXJlX2FsbG93aW5nX29wZXJhdG9yX3dpdGhfdmFsdWUgeworICAgICQkID0gJDI7CisgICAgJCQtPnNldF9vcGVyYXRvcigkMSk7CisgIH0KKyAgOworCisvLyBNZWRpYSBmZWF0dXJlOiAnKG5hbWU6dmFsdWUpJworbWVkaWFfZmVhdHVyZV9ibG9jazoKKyAgICAnKCcgbWF5YmVfd2hpdGVzcGFjZSBtZWRpYV9mZWF0dXJlICcpJyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9ICQzOworICB9CisgIDsKKworLy8gTWVkaWEgZmVhdHVyZSBsaXN0OiAnKG5hbWU6dmFsdWUpIFsgYW5kIChuYW1lOnZhbHVlKSBdJworbWVkaWFfZmVhdHVyZV9saXN0OgorICAvLyAobmFtZTp2YWx1ZSkKKyAgICBtZWRpYV9mZWF0dXJlX2Jsb2NrIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6TWVkaWFGZWF0dXJlcygpOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICAvLyAuLi4gYW5kIChuYW1lOnZhbHVlKQorICB8IG1lZGlhX2ZlYXR1cmVfbGlzdCBrTWVkaWFBbmRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIG1lZGlhX2ZlYXR1cmVfYmxvY2sgeworICAgICQkID0gJDE7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCkpOworICB9CisgIDsKKworLy8gQWxsIHRva2VucyByZXByZXNlbnRpbmcgdW5rbm93biBtZWRpYSB0eXBlcy4KK21lZGlhX3R5cGVfdW5rbm93bjoKKyAgICBrSWRlbnRpZmllclRva2VuCisgIC8vICJNZWRpYSBxdWVyeSIgbW9kZSBvcGVyYXRvciBuYW1lcy4KKyAgfCBrTWVkaWFBbmRUb2tlbgorICB8IGtNZWRpYU1pbmltdW1Ub2tlbgorICB8IGtNZWRpYU1heGltdW1Ub2tlbgorICAvLyAiTWVkaWEgcXVlcnkiIG1vZGUgbWVkaWEgZmVhdHVyZSB0b2tlbnMKKyAgfCBrTGVuZ3RoTWVkaWFGZWF0dXJlVHlwZVRva2VuCisgIHwga09yaWVudGF0aW9uTWVkaWFGZWF0dXJlVHlwZVRva2VuCisgIHwga1JhdGlvTWVkaWFGZWF0dXJlVHlwZVRva2VuCisgIHwga05vbk5lZ2F0aXZlSW50ZWdlck1lZGlhRmVhdHVyZVR5cGVUb2tlbgorICB8IGtSZXNvbHV0aW9uTWVkaWFGZWF0dXJlVHlwZVRva2VuCisgIHwga1NjYW5NZWRpYUZlYXR1cmVUeXBlVG9rZW4KKyAgfCBrWmVyb09yT25lTWVkaWFGZWF0dXJlVHlwZVRva2VuCisgIDsKKworLy8gQWxsIHRva2VucyByZXByZXNlbnRpbmcgbWVkaWEgdHlwZXMgdGhhdCBhcmUgdHJ1ZSBvbiB0aGlzIHBsYXRmb3JtLgorbWVkaWFfdHlwZV9rbm93bjoKKyAgICBrQWxsTWVkaWFUeXBlVG9rZW4KKyAgfCBrVFZNZWRpYVR5cGVUb2tlbgorICB8IGtTY3JlZW5NZWRpYVR5cGVUb2tlbgorICA7CisKKy8vIFJldHVybnMgdHJ1ZSBmb3Iga25vd24gc3BlY2lmaWVkIG1lZGlhIHR5cGVzLCBvdGhlcndpc2UgZmFsc2UuCittZWRpYV90eXBlX3NwZWNpZmllZDoKKyAgICBtZWRpYV90eXBlX3Vua25vd24geworICAgICQkID0gZmFsc2U7CisgIH0KKyAgfCBtZWRpYV90eXBlX2tub3duIHsKKyAgICAkJCA9IHRydWU7CisgIH0KKyAgOworLy8gVGhlIG5hbWVzIGNob3NlbiBmb3IgQ1NTIG1lZGlhIHR5cGVzIHJlZmxlY3QgdGFyZ2V0IGRldmljZXMgZm9yIHdoaWNoIHRoZQorLy8gcmVsZXZhbnQgcHJvcGVydGllcyBtYWtlIHNlbnNlCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9tZWRpYS5odG1sI21lZGlhLXR5cGVzCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jbWVkaWEwCitldmFsdWF0ZWRfbWVkaWFfdHlwZToKKyAgLy8gQG1lZGlhIFt0eXBlXS4uLgorICAgIG1lZGlhX3R5cGVfc3BlY2lmaWVkIHsKKyAgICAkJCA9ICQxOworICB9CisgIC8vIEBtZWRpYSBub3QgW3R5cGVdLi4uCisgIHwga01lZGlhTm90VG9rZW4ga1doaXRlc3BhY2VUb2tlbiBtZWRpYV90eXBlX3NwZWNpZmllZCB7CisgICAgJCQgPSAhJDM7CisgIH0KKyAgLy8gQG1lZGlhIG9ubHkgW3R5cGVdLi4uCisgIHwga01lZGlhT25seVRva2VuIGtXaGl0ZXNwYWNlVG9rZW4gbWVkaWFfdHlwZV9zcGVjaWZpZWQgeworICAgICQkID0gJDM7CisgIH0KKyAgLy8gQG1lZGlhIG9ubHkgbm90IC4uLiAoc3BlY2lhbCBjYXNlKQorICB8IGtNZWRpYU9ubHlUb2tlbiBrV2hpdGVzcGFjZVRva2VuIGtNZWRpYU5vdFRva2VuIHsKKyAgICAkJCA9IGZhbHNlOworICB9CisgIC8vIEBtZWRpYSBub3Qgb25seSAuLi4gKHNwZWNpYWwgY2FzZSkKKyAgfCBrTWVkaWFOb3RUb2tlbiBrV2hpdGVzcGFjZVRva2VuIGtNZWRpYU9ubHlUb2tlbiB7CisgICAgJCQgPSB0cnVlOworICB9CisgIDsKKworLy8gQSBtZWRpYSBxdWVyeSBjb25zaXN0cyBvZiBhIG1lZGlhIHR5cGUgYW5kIHplcm8gb3IgbW9yZSBleHByZXNzaW9ucyB0aGF0CisvLyBjaGVjayBmb3IgdGhlIGNvbmRpdGlvbnMgb2YgcGFydGljdWxhciBtZWRpYSBmZWF0dXJlcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzc29tLyNtZWRpYS1xdWVyaWVzCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jbWVkaWEwCittZWRpYV9xdWVyeToKKyAgLy8gQG1lZGlhICB7fQorICAgIC8qIGVtcHR5ICovIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhUXVlcnkodHJ1ZSkpOworICB9CisgIC8vIEBtZWRpYSAobmFtZTp2YWx1ZSkuLi4ge30KKyAgfCBtZWRpYV9mZWF0dXJlX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206Ok1lZGlhRmVhdHVyZXM+IG1lZGlhX2ZlYXR1cmVzKCQxKTsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok1lZGlhUXVlcnkodHJ1ZSwgbWVkaWFfZmVhdHVyZXMuUGFzcygpKSk7CisgIH0KKyAgLy8gQG1lZGlhIG1lZGlhdHlwZSB7fQorICB8IGV2YWx1YXRlZF9tZWRpYV90eXBlIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFRdWVyeSgkMSkpOworICB9CisgIC8vIEBtZWRpYSBtZWRpYXR5cGUgYW5kIChuYW1lOnZhbHVlKS4uLiB7fQorICB8IGV2YWx1YXRlZF9tZWRpYV90eXBlIG1heWJlX3doaXRlc3BhY2Uga01lZGlhQW5kVG9rZW4gbWF5YmVfd2hpdGVzcGFjZQorICAgIG1lZGlhX2ZlYXR1cmVfbGlzdCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6TWVkaWFGZWF0dXJlcz4gbWVkaWFfZmVhdHVyZXMoJDUpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFRdWVyeSgkMSwgbWVkaWFfZmVhdHVyZXMuUGFzcygpKSk7CisgIH0KKyAgLy8gV2hlbiBhbiB1bmtub3duIG1lZGlhIGZlYXR1cmUsIGFuIHVua25vd24gbWVkaWEgZmVhdHVyZSB2YWx1ZSwgYSBtYWxmb3JtZWQKKyAgLy8gbWVkaWEgcXVlcnksIG9yIHVuZXhwZWN0ZWQgdG9rZW5zIGlzIGZvdW5kLCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZQorICAvLyByZXByZXNlbnRlZCBhcyAnbm90IGFsbCcuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLyNlcnJvci1oYW5kbGluZworICB8IGVycm9ycyB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpNZWRpYVF1ZXJ5KHRydWUpKTsKKyAgfQorICA7CisKKy8vIFNldmVyYWwgbWVkaWEgcXVlcmllcyBjYW4gYmUgY29tYmluZWQgaW4gYSBtZWRpYSBxdWVyeSBsaXN0LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3Nzb20vI21lZGlhbGlzdAorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1tZWRpYXF1ZXJpZXMvI21lZGlhMAorbWVkaWFfbGlzdDoKKyAgICBtZWRpYV9xdWVyeSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpNZWRpYUxpc3QocGFyc2VyX2ltcGwtPmNzc19wYXJzZXIoKSkpOworICAgICQkLT5BcHBlbmQoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICB8IG1lZGlhX2xpc3QgY29tbWEgbWVkaWFfcXVlcnkgeworICAgICQkID0gJDE7CisgICAgJCQtPkFwcGVuZChNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICB9CisgIDsKKworLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKy8vIEtleWZyYW1lIFJ1bGUgYW5kIEtleWZyYW1lcyBSdWxlCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWNzczMtYW5pbWF0aW9ucy0yMDEzMDIxOS8jQ1NTS2V5ZnJhbWVSdWxlLWludGVyZmFjZQorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1jc3MzLWFuaW1hdGlvbnMtMjAxMzAyMTkvI0NTU0tleWZyYW1lc1J1bGUtaW50ZXJmYWNlCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorCithdF9rZXlmcmFtZXNfcnVsZToKKyAgICBrS2V5ZnJhbWVzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBrSWRlbnRpZmllclRva2VuIG1heWJlX3doaXRlc3BhY2UgJ3snCisgICAgbWF5YmVfd2hpdGVzcGFjZSBrZXlmcmFtZV9ydWxlX2xpc3QgJ30nIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gJDcgPyBBZGRSZWYoCisgICAgICAgIG5ldyBjc3NvbTo6Q1NTS2V5ZnJhbWVzUnVsZSgkMy5Ub1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDcpKSkgOiBOVUxMOworICB9CisgIDsKKwora2V5ZnJhbWVfcnVsZV9saXN0OgorICAgIGtleWZyYW1lX3J1bGUgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6Q1NTUnVsZUxpc3QoKSk7CisgICAgJCQtPkFwcGVuZENTU1J1bGUoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICB8IGVycm9yIHsKKyAgICAvLyBUaGUgZXJyb3IgbWVzc2FnZSBpcyBsb2dnZWQgYnkgfGtleWZyYW1lX3J1bGV8LCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvCisgICAgLy8gbG9nIGl0IGFnYWluLgorICAgICQkID0gTlVMTDsKKyAgfQorICB8IGtleWZyYW1lX3J1bGVfbGlzdCBrZXlmcmFtZV9ydWxlIHsKKyAgICAkJCA9ICQxOworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OkNTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWVfcnVsZSgKKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgICBpZiAoJCQpIHsKKyAgICAgICQkLT5BcHBlbmRDU1NSdWxlKGtleWZyYW1lX3J1bGUpOworICAgIH0KKyAgfQorICA7CisKK2tleWZyYW1lX3J1bGU6CisgICAga2V5ZnJhbWVfc2VsZWN0b3Igc3R5bGVfZGVjbGFyYXRpb25fYmxvY2sgeworICAgIHNjb3BlZF9wdHI8c3RkOjp2ZWN0b3I8ZmxvYXQ+ID4gb2Zmc2V0cygkMSk7CisKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpDU1NSdWxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUoCisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSk7CisgICAgY29uc3QgY3Nzb206OkNTU0RlY2xhcmVkU3R5bGVEYXRhOjpQcm9wZXJ0eVZhbHVlcyYgcHJvcGVydHlfdmFsdWVzID0gc3R5bGUtPmRhdGEoKS0+ZGVjbGFyZWRfcHJvcGVydHlfdmFsdWVzKCk7CisgICAgZm9yIChjc3NvbTo6Q1NTRGVjbGFyZWRTdHlsZURhdGE6OlByb3BlcnR5VmFsdWVzOjpjb25zdF9pdGVyYXRvcgorICAgICAgICAgICAgIHByb3BlcnR5X2l0ZXJhdG9yID0gcHJvcGVydHlfdmFsdWVzLmJlZ2luKCk7CisgICAgICAgICAgICAgcHJvcGVydHlfaXRlcmF0b3IgIT0gcHJvcGVydHlfdmFsdWVzLmVuZCgpOworICAgICAgICAgICAgICsrcHJvcGVydHlfaXRlcmF0b3IpIHsKKyAgICAgIGlmIChwcm9wZXJ0eV9pdGVyYXRvci0+c2Vjb25kID09IGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEluaGVyaXQoKSB8fAorICAgICAgICAgIHByb3BlcnR5X2l0ZXJhdG9yLT5zZWNvbmQgPT0gY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0SW5pdGlhbCgpKSB7CisgICAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcigKKyAgICAgICAgICAgIEAyLCAia2V5ZnJhbWUgcHJvcGVydGllcyB3aXRoIGluaXRpYWwgb3IgaW5oZXJpdCBhcmUgbm90IHN1cHBvcnRlZCIpOworICAgICAgICBZWUVSUk9SOworICAgICAgfQorICAgIH0KKworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6Q1NTS2V5ZnJhbWVSdWxlKCpvZmZzZXRzLCBzdHlsZSkpOworICB9CisgIDsKKwora2V5ZnJhbWVfc2VsZWN0b3I6CisgICAga2V5ZnJhbWVfb2Zmc2V0IHsKKyAgICAkJCA9IG5ldyBzdGQ6OnZlY3RvcjxmbG9hdD4oMSwgJDEpOworICB9CisgIHwga2V5ZnJhbWVfc2VsZWN0b3IgJywnIG1heWJlX3doaXRlc3BhY2Uga2V5ZnJhbWVfb2Zmc2V0IHsKKyAgICAkJCA9ICQxOworICAgICQkLT5wdXNoX2JhY2soJDQpOworICB9CisgIDsKKwora2V5ZnJhbWVfb2Zmc2V0OgorICAgIGtGcm9tVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAwLjBmOworICB9CisgIHwga1RvVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAxLjBmOworICB9CisgIHwga1BlcmNlbnRhZ2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9ICQxIC8gMTAwLjBmOworICB9CisgIDsKKworLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKy8vIFNlbGVjdG9ycy4KKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisKKy8vIFNvbWUgaWRlbnRpZmllcnMgc3VjaCBhcyBwcm9wZXJ0eSBuYW1lcyBvciB2YWx1ZXMgYXJlIHJlY29nbml6ZWQKKy8vIHNwZWNpZmljYWxseSBieSB0aGUgc2Nhbm5lci4gV2UgYXJlIG1lcmdpbmcgdGhvc2UgaWRlbnRpZmllcnMgYmFjayB0b2dldGhlcgorLy8gdG8gYWxsb3cgdGhlaXIgdXNlIGluIHNlbGVjdG9ycy4KK2lkZW50aWZpZXJfdG9rZW46CisgICAga0lkZW50aWZpZXJUb2tlbgorICAvLyBQcm9wZXJ0eSBuYW1lcy4KKyAgfCBrQWxsVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtBbGxQcm9wZXJ0eSkpOworICB9CisgIHwga0FuaW1hdGlvbkRlbGF5VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtBbmltYXRpb25EZWxheVByb3BlcnR5KSk7CisgIH0KKyAgfCBrQW5pbWF0aW9uRGlyZWN0aW9uVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtBbmltYXRpb25EaXJlY3Rpb25Qcm9wZXJ0eSkpOworICB9CisgIHwga0FuaW1hdGlvbkR1cmF0aW9uVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtBbmltYXRpb25EdXJhdGlvblByb3BlcnR5KSk7CisgIH0KKyAgfCBrQW5pbWF0aW9uRmlsbE1vZGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0FuaW1hdGlvbkZpbGxNb2RlUHJvcGVydHkpKTsKKyAgfQorICB8IGtBbmltYXRpb25JdGVyYXRpb25Db3VudFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQW5pbWF0aW9uSXRlcmF0aW9uQ291bnRQcm9wZXJ0eSkpOworICB9CisgIHwga0FuaW1hdGlvbk5hbWVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0FuaW1hdGlvbk5hbWVQcm9wZXJ0eSkpOworICB9CisgIHwga0FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtBbmltYXRpb25UaW1pbmdGdW5jdGlvblByb3BlcnR5KSk7CisgIH0KKyAgfCBrQW5pbWF0aW9uVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtBbmltYXRpb25Qcm9wZXJ0eSkpOworICB9CisgIHwga0JhY2tncm91bmRDb2xvclRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQmFja2dyb3VuZENvbG9yUHJvcGVydHkpKTsKKyAgfQorICB8IGtCYWNrZ3JvdW5kSW1hZ2VUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JhY2tncm91bmRJbWFnZVByb3BlcnR5KSk7CisgIH0KKyAgfCBrQmFja2dyb3VuZFBvc2l0aW9uVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCYWNrZ3JvdW5kUG9zaXRpb25Qcm9wZXJ0eSkpOworICB9CisgIHwga0JhY2tncm91bmRSZXBlYXRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JhY2tncm91bmRSZXBlYXRQcm9wZXJ0eSkpOworICB9CisgIHwga0JhY2tncm91bmRTaXplVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCYWNrZ3JvdW5kU2l6ZVByb3BlcnR5KSk7CisgIH0KKyAgfCBrQmFja2dyb3VuZFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQmFja2dyb3VuZFByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlckJvdHRvbUxlZnRSYWRpdXNUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlckJvdHRvbUxlZnRSYWRpdXNQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJCb3R0b21SaWdodFJhZGl1c1Byb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyQm90dG9tVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJCb3R0b21Qcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlckJvdHRvbUNvbG9yVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJCb3R0b21Db2xvclByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyQm90dG9tU3R5bGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlckJvdHRvbVN0eWxlUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3JkZXJCb3R0b21XaWR0aFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQm9yZGVyQm90dG9tV2lkdGhQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlckxlZnRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlckxlZnRQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlckNvbG9yVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJDb2xvclByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyTGVmdENvbG9yVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJMZWZ0Q29sb3JQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlckxlZnRTdHlsZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQm9yZGVyTGVmdFN0eWxlUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3JkZXJMZWZ0V2lkdGhUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlckxlZnRXaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyUmFkaXVzVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJSYWRpdXNQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlclJpZ2h0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJSaWdodFByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyUmlnaHRDb2xvclRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQm9yZGVyUmlnaHRDb2xvclByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyUmlnaHRTdHlsZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQm9yZGVyUmlnaHRTdHlsZVByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyUmlnaHRXaWR0aFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQm9yZGVyUmlnaHRXaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyU3R5bGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlclN0eWxlUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3JkZXJUb3BUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlclRvcFByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyVG9wQ29sb3JUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlclRvcENvbG9yUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3JkZXJUb3BMZWZ0UmFkaXVzVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJUb3BMZWZ0UmFkaXVzUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3JkZXJUb3BSaWdodFJhZGl1c1Rva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlclRvcFJpZ2h0UmFkaXVzUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3JkZXJUb3BTdHlsZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQm9yZGVyVG9wU3R5bGVQcm9wZXJ0eSkpOworICB9CisgIHwga0JvcmRlclRvcFdpZHRoVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3JkZXJUb3BXaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm9yZGVyV2lkdGhUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvcmRlcldpZHRoUHJvcGVydHkpKTsKKyAgfQorICB8IGtCb3R0b21Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0JvdHRvbVByb3BlcnR5KSk7CisgIH0KKyAgfCBrQm94U2hhZG93VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtCb3hTaGFkb3dQcm9wZXJ0eSkpOworICB9CisgIHwga0NvbG9yVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtDb2xvclByb3BlcnR5KSk7CisgIH0KKyAgfCBrQ29udGVudFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprQ29udGVudFByb3BlcnR5KSk7CisgIH0KKyAgfCBrRGlzcGxheVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprRGlzcGxheVByb3BlcnR5KSk7CisgIH0KKyAgfCBrRmlsdGVyVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtGaWx0ZXJQcm9wZXJ0eSkpOworICB9CisgIHwga0ZvbnRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0ZvbnRQcm9wZXJ0eSkpOworICB9CisgIHwga0ZvbnRGYW1pbHlUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0ZvbnRGYW1pbHlQcm9wZXJ0eSkpOworICB9CisgIHwga0ZvbnRTaXplVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtGb250U2l6ZVByb3BlcnR5KSk7CisgIH0KKyAgfCBrRm9udFdlaWdodFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprRm9udFdlaWdodFByb3BlcnR5KSk7CisgIH0KKyAgfCBrSGVpZ2h0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtIZWlnaHRQcm9wZXJ0eSkpOworICB9CisgIHwga0xlZnRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0xlZnRQcm9wZXJ0eSkpOworICB9CisgIHwga0xpbmVIZWlnaHRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a0xpbmVIZWlnaHRQcm9wZXJ0eSkpOworICB9CisgIHwga01hcmdpbkJvdHRvbVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprTWFyZ2luQm90dG9tUHJvcGVydHkpKTsKKyAgfQorICB8IGtNYXJnaW5MZWZ0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtNYXJnaW5MZWZ0UHJvcGVydHkpKTsKKyAgfQorICB8IGtNYXJnaW5SaWdodFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprTWFyZ2luUmlnaHRQcm9wZXJ0eSkpOworICB9CisgIHwga01hcmdpblRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprTWFyZ2luUHJvcGVydHkpKTsKKyAgfQorICB8IGtNYXJnaW5Ub3BUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a01hcmdpblRvcFByb3BlcnR5KSk7CisgIH0KKyAgfCBrTWF4SGVpZ2h0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtNYXhIZWlnaHRQcm9wZXJ0eSkpOworICB9CisgIHwga01heFdpZHRoVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtNYXhXaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrTWluSGVpZ2h0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtNaW5IZWlnaHRQcm9wZXJ0eSkpOworICB9CisgIHwga01pbldpZHRoVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtNaW5XaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrT3BhY2l0eVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprT3BhY2l0eVByb3BlcnR5KSk7CisgIH0KKyAgfCBrT3V0bGluZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprT3V0bGluZVByb3BlcnR5KSk7CisgIH0KKyAgfCBrT3V0bGluZUNvbG9yVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtPdXRsaW5lQ29sb3JQcm9wZXJ0eSkpOworICB9CisgIHwga091dGxpbmVTdHlsZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprT3V0bGluZVN0eWxlUHJvcGVydHkpKTsKKyAgfQorICB8IGtPdXRsaW5lV2lkdGhUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a091dGxpbmVXaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrT3ZlcmZsb3dUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a092ZXJmbG93UHJvcGVydHkpKTsKKyAgfQorICB8IGtPdmVyZmxvd1dyYXBUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a092ZXJmbG93V3JhcFByb3BlcnR5KSk7CisgIH0KKyAgfCBrUGFkZGluZ0JvdHRvbVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprUGFkZGluZ0JvdHRvbVByb3BlcnR5KSk7CisgIH0KKyAgfCBrUGFkZGluZ0xlZnRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1BhZGRpbmdMZWZ0UHJvcGVydHkpKTsKKyAgfQorICB8IGtQYWRkaW5nUmlnaHRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1BhZGRpbmdSaWdodFByb3BlcnR5KSk7CisgIH0KKyAgfCBrUGFkZGluZ1Rva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprUGFkZGluZ1Byb3BlcnR5KSk7CisgIH0KKyAgfCBrUGFkZGluZ1RvcFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprUGFkZGluZ1RvcFByb3BlcnR5KSk7CisgIH0KKyAgfCBrUG9pbnRlckV2ZW50c1Rva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprUG9pbnRlckV2ZW50c1Byb3BlcnR5KSk7CisgIH0KKyAgfCBrUG9zaXRpb25Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1Bvc2l0aW9uUHJvcGVydHkpKTsKKyAgfQorICB8IGtSaWdodFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprUmlnaHRQcm9wZXJ0eSkpOworICB9CisgIHwga1NyY1Rva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprU3JjUHJvcGVydHkpKTsKKyAgfQorICB8IGtUZXh0QWxpZ25Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1RleHRBbGlnblByb3BlcnR5KSk7CisgIH0KKyAgfCBrVGV4dERlY29yYXRpb25Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1RleHREZWNvcmF0aW9uUHJvcGVydHkpKTsKKyAgfQorICB8IGtUZXh0RGVjb3JhdGlvbkNvbG9yVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtUZXh0RGVjb3JhdGlvbkNvbG9yUHJvcGVydHkpKTsKKyAgfQorICB8IGtUZXh0RGVjb3JhdGlvbkxpbmVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1RleHREZWNvcmF0aW9uTGluZVByb3BlcnR5KSk7CisgIH0KKyAgfCBrVGV4dEluZGVudFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprVGV4dEluZGVudFByb3BlcnR5KSk7CisgIH0KKyAgfCBrVGV4dE92ZXJmbG93VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtUZXh0T3ZlcmZsb3dQcm9wZXJ0eSkpOworICB9CisgIHwga1RleHRUcmFuc2Zvcm1Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1RleHRUcmFuc2Zvcm1Qcm9wZXJ0eSkpOworICB9CisgIHwga1RvcFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprVG9wUHJvcGVydHkpKTsKKyAgfQorICB8IGtUcmFuc2Zvcm1Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1RyYW5zZm9ybVByb3BlcnR5KSk7CisgIH0KKyAgfCBrVHJhbnNmb3JtT3JpZ2luVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtUcmFuc2Zvcm1PcmlnaW5Qcm9wZXJ0eSkpOworICB9CisgIHwga1RyYW5zaXRpb25EZWxheVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprVHJhbnNpdGlvbkRlbGF5UHJvcGVydHkpKTsKKyAgfQorICB8IGtUcmFuc2l0aW9uRHVyYXRpb25Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1RyYW5zaXRpb25EdXJhdGlvblByb3BlcnR5KSk7CisgIH0KKyAgfCBrVHJhbnNpdGlvblByb3BlcnR5VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtUcmFuc2l0aW9uUHJvcGVydHlQcm9wZXJ0eSkpOworICB9CisgIHwga1RyYW5zaXRpb25UaW1pbmdGdW5jdGlvblRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uUHJvcGVydHkpKTsKKyAgfQorICB8IGtUcmFuc2l0aW9uVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtUcmFuc2l0aW9uUHJvcGVydHkpKTsKKyAgfQorICB8IGtVbmljb2RlUmFuZ2VQcm9wZXJ0eVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKGNzc29tOjprVW5pY29kZVJhbmdlUHJvcGVydHkpKTsKKyAgfQorICB8IGtWZXJ0aWNhbEFsaWduVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtWZXJ0aWNhbEFsaWduUHJvcGVydHkpKTsKKyAgfQorICB8IGtWaXNpYmlsaXR5VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtWaXNpYmlsaXR5UHJvcGVydHkpKTsKKyAgfQorICB8IGtXaGl0ZVNwYWNlUHJvcGVydHlUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKAorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZShjc3NvbTo6a1doaXRlU3BhY2VQcm9wZXJ0eSkpOworICB9CisgIHwga1dpZHRoVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtXaWR0aFByb3BlcnR5KSk7CisgIH0KKyAgfCBrWkluZGV4VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgIGNzc29tOjpHZXRQcm9wZXJ0eU5hbWUoY3Nzb206OmtaSW5kZXhQcm9wZXJ0eSkpOworICB9CisgIC8vIFByb3BlcnR5IHZhbHVlcy4KKyAgfCBrQWJzb2x1dGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQWJzb2x1dGVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrQWx0ZXJuYXRlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0FsdGVybmF0ZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtBbHRlcm5hdGVSZXZlcnNlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0FsdGVybmF0ZVJldmVyc2VLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrQXF1YVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtBcXVhS2V5d29yZE5hbWUpOworICB9CisgIHwga0F0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0F0S2V5d29yZE5hbWUpOworICB9CisgIHwga0F1dG9Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQXV0b0tleXdvcmROYW1lKTsKKyAgfQorICB8IGtCYWNrd2FyZHNUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQmFja3dhcmRzS2V5d29yZE5hbWUpOworICB9CisgIHwga0Jhc2VsaW5lVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0Jhc2VsaW5lS2V5d29yZE5hbWUpOworICB9CisgIHwga0JsYWNrVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0JsYWNrS2V5d29yZE5hbWUpOworICB9CisgIHwga0Jsb2NrVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0Jsb2NrS2V5d29yZE5hbWUpOworICB9CisgIHwga0JsdWVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQmx1ZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtCb2xkVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0JvbGRLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrQm90aFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtCb3RoS2V5d29yZE5hbWUpOworICB9CisgIC8vIEEgcnVsZSBmb3Iga0JvdHRvbVRva2VuIGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhlIG1hdGNoaW5nIHByb3BlcnR5IG5hbWUuCisgIHwga0JyZWFrV29yZFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtCcmVha1dvcmRLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrQ2VudGVyVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0NlbnRlcktleXdvcmROYW1lKTsKKyAgfQorICB8IGtDaXJjbGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQ2lyY2xlS2V5d29yZE5hbWUpOworICB9CisgIHwga0NsaXBUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQ2xpcEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtDbG9zZXN0Q29ybmVyVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0Nsb3Nlc3RDb3JuZXJLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrQ2xvc2VzdFNpZGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQ2xvc2VzdFNpZGVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrQ29udGFpblRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtDb250YWluS2V5d29yZE5hbWUpOworICB9CisgIHwga0NvdmVyVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0NvdmVyS2V5d29yZE5hbWUpOworICB9CisgIHwga0N1cnNpdmVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQ3Vyc2l2ZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtFYXNlSW5PdXRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprRWFzZUluT3V0S2V5d29yZE5hbWUpOworICB9CisgIHwga0Vhc2VJblRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtFYXNlSW5LZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrRWFzZU91dFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtFYXNlT3V0S2V5d29yZE5hbWUpOworICB9CisgIHwga0Vhc2VUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprRWFzZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtFbGxpcHNlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0VsbGlwc2VLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrRWxsaXBzaXNUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprRWxsaXBzaXNLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrRW5kVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0VuZEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtGYW50YXN5VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0ZhbnRhc3lLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrRmFydGhlc3RDb3JuZXJUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprRmFydGhlc3RDb3JuZXJLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrRmFydGhlc3RTaWRlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0ZhcnRoZXN0U2lkZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtGaXhlZFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtGaXhlZEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtGb3J3YXJkc1Rva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtGb3J3YXJkc0tleXdvcmROYW1lKTsKKyAgfQorICB8IGtGcm9tVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0Zyb21LZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrRnVjaHNpYVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtGdWNoc2lhS2V5d29yZE5hbWUpOworICB9CisgIHwga0dyYXlUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprR3JheUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtHcmVlblRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtHcmVlbktleXdvcmROYW1lKTsKKyAgfQorICB8IGtIaWRkZW5Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprSGlkZGVuS2V5d29yZE5hbWUpOworICB9CisgIHwga0luZmluaXRlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0luZmluaXRlS2V5d29yZE5hbWUpOworICB9CisgIHwga0luaGVyaXRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprSW5oZXJpdEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtJbml0aWFsVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0luaXRpYWxLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrSW5saW5lQmxvY2tUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprSW5saW5lQmxvY2tLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrSW5saW5lVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0lubGluZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtJbnNldFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtJbnNldEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtJdGFsaWNUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprSXRhbGljS2V5d29yZE5hbWUpOworICB9CisgIHwga0xpbWVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprTGltZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtMaW5lYXJUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprTGluZWFyS2V5d29yZE5hbWUpOworICB9CisgIHwga0xpbmVUaHJvdWdoVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0xpbmVUaHJvdWdoS2V5d29yZE5hbWUpOworICB9CisgIHwga01hcm9vblRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtNYXJvb25LZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrTWlkZGxlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a01pZGRsZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtNb25vc2NvcGljVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a01vbm9zY29waWNLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrTW9ub3NwYWNlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a01vbm9zcGFjZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtOYXZ5VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a05hdnlLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrTm9uZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtOb25lS2V5d29yZE5hbWUpOworICB9CisgIHwga05vUmVwZWF0VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a05vUmVwZWF0S2V5d29yZE5hbWUpOworICB9CisgIHwga05vcm1hbFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtOb3JtYWxLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrTm9XcmFwVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a05vV3JhcEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtPYmxpcXVlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a09ibGlxdWVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrT2xpdmVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprT2xpdmVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrUHJlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1ByZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtQcmVMaW5lVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1ByZUxpbmVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrUHJlV3JhcFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtQcmVXcmFwS2V5d29yZE5hbWUpOworICB9CisgIHwga1B1cnBsZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtQdXJwbGVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrUmVkVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1JlZEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtSZXBlYXRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprUmVwZWF0S2V5d29yZE5hbWUpOworICB9CisgIHwga1JlcGVhdFhUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprUmVwZWF0WEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtSZXBlYXRZVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1JlcGVhdFlLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrUmVsYXRpdmVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprUmVsYXRpdmVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrUmV2ZXJzZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtSZXZlcnNlS2V5d29yZE5hbWUpOworICB9CisgIHwga1NhbnNTZXJpZlRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtTYW5zU2VyaWZLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrU2VyaWZUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprU2VyaWZLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrU2lsdmVyVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1NpbHZlcktleXdvcmROYW1lKTsKKyAgfQorICB8IGtTb2xpZFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtTb2xpZEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtTdGFydFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtTdGFydEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtTdGF0aWNUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprU3RhdGljS2V5d29yZE5hbWUpOworICB9CisgIHwga1N0ZXBFbmRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprU3RlcEVuZEtleXdvcmROYW1lKTsKKyAgfQorICB8IGtTdGVwU3RhcnRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprU3RlcFN0YXJ0S2V5d29yZE5hbWUpOworICB9CisgIHwga1N0ZXJlb3Njb3BpY0xlZnRSaWdodFRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoCisgICAgICAgICAgICAgY3Nzb206OmtTdGVyZW9zY29waWNMZWZ0UmlnaHRLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrU3RlcmVvc2NvcGljVG9wQm90dG9tVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZygKKyAgICAgICAgICAgICBjc3NvbTo6a1N0ZXJlb3Njb3BpY1RvcEJvdHRvbUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtUZWFsVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1RlYWxLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrVG9Ub2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprVG9LZXl3b3JkTmFtZSk7CisgIH0KKyAgLy8gQSBydWxlIGZvciBrVG9wVG9rZW4gaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgbWF0Y2hpbmcgcHJvcGVydHkgbmFtZS4KKyAgfCBrVHJhbnNwYXJlbnRUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprVHJhbnNwYXJlbnRLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrVXBwZXJjYXNlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1VwcGVyY2FzZUtleXdvcmROYW1lKTsKKyAgfQorICB8IGtWaXNpYmxlVG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1Zpc2libGVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrV2hpdGVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprV2hpdGVLZXl3b3JkTmFtZSk7CisgIH0KKyAgfCBrWWVsbG93VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a1llbGxvd0tleXdvcmROYW1lKTsKKyAgfQorICAvLyBQc2V1ZG8tY2xhc3MgbmFtZXMuCisgIHwga0FjdGl2ZVRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtBY3RpdmVQc2V1ZG9DbGFzc05hbWUpOworICB9CisgIHwga0VtcHR5VG9rZW4geworICAgICQkID0gVHJpdmlhbFN0cmluZ1BpZWNlOjpGcm9tQ1N0cmluZyhjc3NvbTo6a0VtcHR5UHNldWRvQ2xhc3NOYW1lKTsKKyAgfQorICB8IGtGb2N1c1Rva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtGb2N1c1BzZXVkb0NsYXNzTmFtZSk7CisgIH0KKyAgfCBrSG92ZXJUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprSG92ZXJQc2V1ZG9DbGFzc05hbWUpOworICB9CisgIC8vIFBzZXVkby1lbGVtZW50IG5hbWVzLgorICB8IGtBZnRlclRva2VuIHsKKyAgICAkJCA9IFRyaXZpYWxTdHJpbmdQaWVjZTo6RnJvbUNTdHJpbmcoY3Nzb206OmtBZnRlclBzZXVkb0VsZW1lbnROYW1lKTsKKyAgfQorICB8IGtCZWZvcmVUb2tlbiB7CisgICAgJCQgPSBUcml2aWFsU3RyaW5nUGllY2U6OkZyb21DU3RyaW5nKGNzc29tOjprQmVmb3JlUHNldWRvRWxlbWVudE5hbWUpOworICB9CisgIDsKKworLy8gVGhlIHVuaXZlcnNhbCBzZWxlY3RvciByZXByZXNlbnRzIGFuIGVsZW1lbnQgd2l0aCBhbnkgbmFtZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI3VuaXZlcnNhbC1zZWxlY3RvcgordW5pdmVyc2FsX3NlbGVjdG9yX3Rva2VuOgorICAgICcqJyB7CisgICAgJCQgPSBuZXcgY3Nzb206OlVuaXZlcnNhbFNlbGVjdG9yKCk7CisgIH0KKyAgOworCisvLyBBIHR5cGUgc2VsZWN0b3IgcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudCB0eXBlIGluIHRoZSBkb2N1bWVudAorLy8gdHJlZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI3R5cGUtc2VsZWN0b3IKK3R5cGVfc2VsZWN0b3JfdG9rZW46CisgICAgaWRlbnRpZmllcl90b2tlbiB7CisgICAgJCQgPSBuZXcgY3Nzb206OlR5cGVTZWxlY3RvcigkMS5Ub1N0cmluZygpKTsKKyAgfQorICA7CisKK2F0dHJpYnV0ZV9tYXRjaDoKKyAgICAnPScgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBjc3NvbTo6QXR0cmlidXRlU2VsZWN0b3I6OmtFcXVhbHM7CisgIH0KKyAgfCBrSW5jbHVkZXNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpBdHRyaWJ1dGVTZWxlY3Rvcjo6a0luY2x1ZGVzOworICB9CisgIHwga0Rhc2hNYXRjaFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gY3Nzb206OkF0dHJpYnV0ZVNlbGVjdG9yOjprRGFzaE1hdGNoOworICB9CisgIHwga0JlZ2luc1dpdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpBdHRyaWJ1dGVTZWxlY3Rvcjo6a0JlZ2luc1dpdGg7CisgIH0KKyAgfCBrRW5kc1dpdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpBdHRyaWJ1dGVTZWxlY3Rvcjo6a0VuZHNXaXRoOworICB9CisgIHwga0NvbnRhaW5zVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBjc3NvbTo6QXR0cmlidXRlU2VsZWN0b3I6OmtDb250YWluczsKKyAgfQorCisvLyBBbiBhdHRyaWJ1dGUgc2VsZWN0b3IgcmVwcmVzZW50cyBhbiBlbGVtZW50IHRoYXQgaGFzIGFuIGF0dHJpYnV0ZSB0aGF0CisvLyBtYXRjaGVzIHRoZSBhdHRyaWJ1dGUgcmVwcmVzZW50ZWQgYnkgdGhlIGF0dHJpYnV0ZSBzZWxlY3Rvci4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI2F0dHJpYnV0ZS1zZWxlY3RvcgorYXR0cmlidXRlX3NlbGVjdG9yX3Rva2VuOgorICAgICdbJyBtYXliZV93aGl0ZXNwYWNlIGlkZW50aWZpZXJfdG9rZW4gbWF5YmVfd2hpdGVzcGFjZSAnXScgeworICAgICQkID0gbmV3IGNzc29tOjpBdHRyaWJ1dGVTZWxlY3RvcigkMy5Ub1N0cmluZygpKTsKKyAgfQorICB8ICdbJyBtYXliZV93aGl0ZXNwYWNlIGlkZW50aWZpZXJfdG9rZW4gbWF5YmVfd2hpdGVzcGFjZQorICAgICAgYXR0cmlidXRlX21hdGNoIGtTdHJpbmdUb2tlbiBtYXliZV93aGl0ZXNwYWNlICddJyB7CisgICAgJCQgPSBuZXcgY3Nzb206OkF0dHJpYnV0ZVNlbGVjdG9yKCQzLlRvU3RyaW5nKCksICQ1LCAkNi5Ub1N0cmluZygpKTsKKyAgfQorICB8ICdbJyBtYXliZV93aGl0ZXNwYWNlIGlkZW50aWZpZXJfdG9rZW4gbWF5YmVfd2hpdGVzcGFjZQorICAgICAgYXR0cmlidXRlX21hdGNoIGlkZW50aWZpZXJfdG9rZW4gbWF5YmVfd2hpdGVzcGFjZSAnXScgeworICAgICQkID0gbmV3IGNzc29tOjpBdHRyaWJ1dGVTZWxlY3RvcigkMy5Ub1N0cmluZygpLCAkNSwgJDYuVG9TdHJpbmcoKSk7CisgIH0KKyAgOworCisvLyBUaGUgY2xhc3Mgc2VsZWN0b3IgcmVwcmVzZW50cyBhbiBlbGVtZW50IGJlbG9uZ2luZyB0byB0aGUgY2xhc3MgaWRlbnRpZmllZCBieQorLy8gdGhlIGlkZW50aWZpZXIuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNjbGFzcy1zZWxlY3RvcgorY2xhc3Nfc2VsZWN0b3JfdG9rZW46CisgICAgJy4nIGlkZW50aWZpZXJfdG9rZW4geworICAgICQkID0gbmV3IGNzc29tOjpDbGFzc1NlbGVjdG9yKCQyLlRvU3RyaW5nKCkpOworICB9CisgIDsKKworLy8gQW4gSUQgc2VsZWN0b3IgcmVwcmVzZW50cyBhbiBlbGVtZW50IGluc3RhbmNlIHRoYXQgaGFzIGFuIGlkZW50aWZpZXIgdGhhdAorLy8gbWF0Y2hlcyB0aGUgaWRlbnRpZmllciBpbiB0aGUgSUQgc2VsZWN0b3IuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNpZC1zZWxlY3RvcgoraWRfc2VsZWN0b3JfdG9rZW46CisgICAga0lkU2VsZWN0b3JUb2tlbiB7CisgICAgJCQgPSBuZXcgY3Nzb206OklkU2VsZWN0b3IoJDEuVG9TdHJpbmcoKSk7CisgIH0KKyAgfCBrSGV4VG9rZW4geworICAgIGlmIChJc0FzY2lpRGlnaXQoKiQxLmJlZ2luKSkgeworICAgICAgWVlFUlJPUjsKKyAgICB9CisgICAgJCQgPSBuZXcgY3Nzb206OklkU2VsZWN0b3IoJDEuVG9TdHJpbmcoKSk7CisgIH0KKyAgOworCisvLyBUaGUgcHNldWRvLWNsYXNzIGNvbmNlcHQgaXMgaW50cm9kdWNlZCB0byBwZXJtaXQgc2VsZWN0aW9uIGJhc2VkIG9uCisvLyBpbmZvcm1hdGlvbiB0aGF0IGxpZXMgb3V0c2lkZSBvZiB0aGUgZG9jdW1lbnQgdHJlZSBvciB0aGF0IGNhbiBiZSBhd2t3YXJkIG9yCisvLyBpbXBvc3NpYmxlIHRvIGV4cHJlc3MgdXNpbmcgdGhlIG90aGVyIHNpbXBsZSBzZWxlY3RvcnMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNwc2V1ZG8tY2xhc3NlcworcHNldWRvX2NsYXNzX3Rva2VuOgorICAvLyBUaGUgOmFjdGl2ZSBwc2V1ZG8tY2xhc3MgYXBwbGllcyB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIGFjdGl2YXRlZCBieSB0aGUKKyAgLy8gdXNlci4gRm9yIGV4YW1wbGUsIGJldHdlZW4gdGhlIHRpbWVzIHRoZSB1c2VyIHByZXNzZXMgdGhlIG1vdXNlIGJ1dHRvbiBhbmQKKyAgLy8gcmVsZWFzZXMgaXQuIE9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIG1vdXNlIGJ1dHRvbiwgOmFjdGl2ZSBhcHBsaWVzCisgIC8vIG9ubHkgdG8gdGhlIHByaW1hcnkgb3IgcHJpbWFyeSBhY3RpdmF0aW9uIGJ1dHRvbiAodHlwaWNhbGx5IHRoZSAibGVmdCIKKyAgLy8gbW91c2UgYnV0dG9uKSwgYW5kIGFueSBhbGlhc2VzIHRoZXJlb2YuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI2FjdGl2ZS1wc2V1ZG8KKyAgICAnOicga0FjdGl2ZVRva2VuIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6QWN0aXZlUHNldWRvQ2xhc3MoKTsKKyAgfQorICAvLyBUaGUgOmVtcHR5IHBzZXVkby1jbGFzcyByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdCBoYXMgbm8gY2hpbGRyZW4uIEluCisgIC8vIHRlcm1zIG9mIHRoZSBkb2N1bWVudCB0cmVlLCBvbmx5IGVsZW1lbnQgbm9kZXMgYW5kIGNvbnRlbnQgbm9kZXMgKHN1Y2ggYXMKKyAgLy8gRE9NIHRleHQgbm9kZXMsIENEQVRBIG5vZGVzLCBhbmQgZW50aXR5IHJlZmVyZW5jZXMpIHdob3NlIGRhdGEgaGFzIGEKKyAgLy8gbm9uLXplcm8gbGVuZ3RoIG11c3QgYmUgY29uc2lkZXJlZCBhcyBhZmZlY3RpbmcgZW1wdGluZXNzOyBjb21tZW50cywKKyAgLy8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGFuZCBvdGhlciBub2RlcyBtdXN0IG5vdCBhZmZlY3Qgd2hldGhlciBhbiBlbGVtZW50CisgIC8vIGlzIGNvbnNpZGVyZWQgZW1wdHkgb3Igbm90LgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNlbXB0eS1wc2V1ZG8KKyAgfCAnOicga0VtcHR5VG9rZW4geworICAgICQkID0gbmV3IGNzc29tOjpFbXB0eVBzZXVkb0NsYXNzKCk7CisgIH0KKyAgLy8gVGhlIDpmb2N1cyBwc2V1ZG8tY2xhc3MgYXBwbGllcyB3aGlsZSBhbiBlbGVtZW50IGhhcyB0aGUgZm9jdXMgKGFjY2VwdHMKKyAgLy8ga2V5Ym9hcmQgb3IgbW91c2UgZXZlbnRzLCBvciBvdGhlciBmb3JtcyBvZiBpbnB1dCkuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI2ZvY3VzLXBzZXVkbworICB8ICc6JyBrRm9jdXNUb2tlbiB7CisgICAgJCQgPSBuZXcgY3Nzb206OkZvY3VzUHNldWRvQ2xhc3MoKTsKKyAgfQorICAvLyBUaGUgOmhvdmVyIHBzZXVkby1jbGFzcyBhcHBsaWVzIHdoaWxlIHRoZSB1c2VyIGRlc2lnbmF0ZXMgYW4gZWxlbWVudCB3aXRoIGEKKyAgLy8gcG9pbnRpbmcgZGV2aWNlLCBidXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgYWN0aXZhdGUgaXQuIEZvciBleGFtcGxlLCBhCisgIC8vIHZpc3VhbCB1c2VyIGFnZW50IGNvdWxkIGFwcGx5IHRoaXMgcHNldWRvLWNsYXNzIHdoZW4gdGhlIGN1cnNvciAobW91c2UKKyAgLy8gcG9pbnRlcikgaG92ZXJzIG92ZXIgYSBib3ggZ2VuZXJhdGVkIGJ5IHRoZSBlbGVtZW50LiBJbnRlcmFjdGl2ZSB1c2VyCisgIC8vIGFnZW50cyB0aGF0IGNhbm5vdCBkZXRlY3QgaG92ZXJpbmcgZHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb25zIChlLmcuLCBhIHBlbgorICAvLyBkZXZpY2UgdGhhdCBkb2VzIG5vdCBkZXRlY3QgaG92ZXJpbmcpIGFyZSBzdGlsbCBjb25mb3JtaW5nLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNob3Zlci1wc2V1ZG8KKyAgfCAnOicga0hvdmVyVG9rZW4geworICAgICQkID0gbmV3IGNzc29tOjpIb3ZlclBzZXVkb0NsYXNzKCk7CisgIH0KKyAgLy8gVGhlIG5lZ2F0aW9uIHBzZXVkby1jbGFzcywgOm5vdCgpLCBpcyBhIGZ1bmN0aW9uYWwgcHNldWRvLWNsYXNzIHRha2luZyBhCisgIC8vIHNlbGVjdG9yIGxpc3QgYXMgYW4gYXJndW1lbnQuIEl0IHJlcHJlc2VudHMgYW4gZWxlbWVudCB0aGF0IGlzIG5vdAorICAvLyByZXByZXNlbnRlZCBieSBpdHMgYXJndW1lbnQuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI25lZ2F0aW9uLXBzZXVkbworICB8ICc6JyBrTm90RnVuY3Rpb25Ub2tlbiBjb21wb3VuZF9zZWxlY3Rvcl90b2tlbiAnKScgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbXBvdW5kU2VsZWN0b3I+IGNvbXBvdW5kX3NlbGVjdG9yKCQzKTsKKyAgICBpZiAoY29tcG91bmRfc2VsZWN0b3IpIHsKKyAgICAgIHNjb3BlZF9wdHI8Y3Nzb206Ok5vdFBzZXVkb0NsYXNzPiBub3RfcHNldWRvX2NsYXNzKG5ldworICAgICAgICAgIGNzc29tOjpOb3RQc2V1ZG9DbGFzcygpKTsKKyAgICAgIG5vdF9wc2V1ZG9fY2xhc3MtPnNldF9zZWxlY3Rvcihjb21wb3VuZF9zZWxlY3Rvci5QYXNzKCkpOworICAgICAgJCQgPSBub3RfcHNldWRvX2NsYXNzLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJ1bnN1cHBvcnRlZCBzZWxlY3RvciB3aXRoaW4gOm5vdCgpIik7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwgJzonIGtOb3RGdW5jdGlvblRva2VuIGVycm9ycyAnKScgeworICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAidW5zdXBwb3J0ZWQgc2VsZWN0b3Igd2l0aGluIDpub3QoKSIpOworICAgICQkID0gTlVMTDsKKyAgfQorICB8ICc6JyBlcnJvcnMgeworICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAidW5zdXBwb3J0ZWQgcHNldWRvLWNsYXNzIik7CisgICAgJCQgPSBOVUxMOworICB9CisgIDsKKworLy8gUHNldWRvLWVsZW1lbnRzIGNyZWF0ZSBhYnN0cmFjdGlvbnMgYWJvdXQgdGhlIGRvY3VtZW50IHRyZWUgYmV5b25kIHRob3NlCisvLyBzcGVjaWZpZWQgYnkgdGhlIGRvY3VtZW50IGxhbmd1YWdlLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzNC8jcHNldWRvLWVsZW1lbnRzCitwc2V1ZG9fZWxlbWVudF90b2tlbjoKKy8vIEF1dGhvcnMgc3BlY2lmeSB0aGUgc3R5bGUgYW5kIGxvY2F0aW9uIG9mIGdlbmVyYXRlZCBjb250ZW50IHdpdGggdGhlCisvLyA6YmVmb3JlIGFuZCA6YWZ0ZXIgcHNldWRvLWVsZW1lbnRzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvZ2VuZXJhdGUuaHRtbCNiZWZvcmUtYWZ0ZXItY29udGVudAorLy8gVXNlciBhZ2VudHMgbXVzdCBhbHNvIGFjY2VwdCB0aGUgcHJldmlvdXMgb25lLWNvbG9uIG5vdGF0aW9uIGZvcgorLy8gcHNldWRvLWVsZW1lbnRzIGludHJvZHVjZWQgaW4gQ1NTIGxldmVscyAxIGFuZCAyLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzNC8jcHNldWRvLWVsZW1lbnRzCisgICAgJzonIGtBZnRlclRva2VuIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6QWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgIH0KKyAgfCAnOicga0JlZm9yZVRva2VuIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6QmVmb3JlUHNldWRvRWxlbWVudCgpOworICB9CisgIHwgJzonICc6JyBrQWZ0ZXJUb2tlbiB7CisgICAgJCQgPSBuZXcgY3Nzb206OkFmdGVyUHNldWRvRWxlbWVudCgpOworICB9CisgIHwgJzonICc6JyBrQmVmb3JlVG9rZW4geworICAgICQkID0gbmV3IGNzc29tOjpCZWZvcmVQc2V1ZG9FbGVtZW50KCk7CisgIH0KKyAgfCAnOicgJzonIGVycm9ycyB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJ1bnN1cHBvcnRlZCBwc2V1ZG8tZWxlbWVudCIpOworICAgICQkID0gTlVMTDsKKyAgfQorICA7CisKKy8vIEEgc2ltcGxlIHNlbGVjdG9yIHJlcHJlc2VudHMgYW4gYXNwZWN0IG9mIGFuIGVsZW1lbnQgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzNC8jc2ltcGxlCitzaW1wbGVfc2VsZWN0b3JfdG9rZW46CisgICAgYXR0cmlidXRlX3NlbGVjdG9yX3Rva2VuCisgIHwgY2xhc3Nfc2VsZWN0b3JfdG9rZW4KKyAgfCBpZF9zZWxlY3Rvcl90b2tlbgorICB8IHBzZXVkb19jbGFzc190b2tlbgorICB8IHBzZXVkb19lbGVtZW50X3Rva2VuCisgIHwgdHlwZV9zZWxlY3Rvcl90b2tlbgorICB8IHVuaXZlcnNhbF9zZWxlY3Rvcl90b2tlbgorICA7CisKKy8vIEEgY29tcG91bmQgc2VsZWN0b3IgaXMgYSBjaGFpbiBvZiBzaW1wbGUgc2VsZWN0b3JzIHRoYXQgYXJlIG5vdCBzZXBhcmF0ZWQgYnkKKy8vIGEgY29tYmluYXRvci4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI2NvbXBvdW5kCitjb21wb3VuZF9zZWxlY3Rvcl90b2tlbjoKKyAgICBzaW1wbGVfc2VsZWN0b3JfdG9rZW4geworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlNpbXBsZVNlbGVjdG9yPiBzaW1wbGVfc2VsZWN0b3IoJDEpOworCisgICAgaWYgKHNpbXBsZV9zZWxlY3RvcikgeworICAgICAgJCQgPSBuZXcgY3Nzb206OkNvbXBvdW5kU2VsZWN0b3IoKTsKKyAgICAgICQkLT5BcHBlbmRTZWxlY3RvcihzaW1wbGVfc2VsZWN0b3IuUGFzcygpKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGNvbXBvdW5kX3NlbGVjdG9yX3Rva2VuIHNpbXBsZV9zZWxlY3Rvcl90b2tlbiB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6Q29tcG91bmRTZWxlY3Rvcj4gY29tcG91bmRfc2VsZWN0b3IoJDEpOworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlNpbXBsZVNlbGVjdG9yPiBzaW1wbGVfc2VsZWN0b3IoJDIpOworCisgICAgaWYgKGNvbXBvdW5kX3NlbGVjdG9yICYmIHNpbXBsZV9zZWxlY3RvcikgeworICAgICAgJCQgPSBjb21wb3VuZF9zZWxlY3Rvci5yZWxlYXNlKCk7CisgICAgICAkJC0+QXBwZW5kU2VsZWN0b3Ioc2ltcGxlX3NlbGVjdG9yLlBhc3MoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgOworCisvLyBBIGNvbWJpbmF0b3IgaXMgcHVuY3R1YXRpb24gdGhhdCByZXByZXNlbnRzIGEgcGFydGljdWxhciBraW5kIG9mIHJlbGF0aW9uc2hpcAorLy8gYmV0d2VlbiB0aGUgc2VsZWN0b3JzIG9uIGVpdGhlciBzaWRlLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzNC8jY29tYmluYXRvcgorY29tYmluYXRvcjoKKyAgICBrV2hpdGVzcGFjZVRva2VuIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6RGVzY2VuZGFudENvbWJpbmF0b3IoKTsKKyAgfQorICB8ICc+JyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6Q2hpbGRDb21iaW5hdG9yKCk7CisgIH0KKyAgfCAnKycgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBuZXcgY3Nzb206Ok5leHRTaWJsaW5nQ29tYmluYXRvcigpOworICB9CisgIHwgJ34nIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gbmV3IGNzc29tOjpGb2xsb3dpbmdTaWJsaW5nQ29tYmluYXRvcigpOworICB9CisgIDsKKworLy8gQSBjb21wbGV4IHNlbGVjdG9yIGlzIGEgY2hhaW4gb2Ygb25lIG9yIG1vcmUgY29tcG91bmQgc2VsZWN0b3JzIHNlcGFyYXRlZCBieQorLy8gY29tYmluYXRvcnMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNjb21wbGV4Citjb21wbGV4X3NlbGVjdG9yOgorICAgIGNvbXBvdW5kX3NlbGVjdG9yX3Rva2VuIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb21wb3VuZFNlbGVjdG9yPiBjb21wb3VuZF9zZWxlY3RvcigkMSk7CisKKyAgICBpZiAoY29tcG91bmRfc2VsZWN0b3IpIHsKKyAgICAgICQkID0gbmV3IGNzc29tOjpDb21wbGV4U2VsZWN0b3IoKTsKKyAgICAgICQkLT5BcHBlbmRTZWxlY3Rvcihjb21wb3VuZF9zZWxlY3Rvci5QYXNzKCkpOworICAgIH0gZWxzZSB7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwgY29tcGxleF9zZWxlY3RvciBjb21iaW5hdG9yIGNvbXBvdW5kX3NlbGVjdG9yX3Rva2VuIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb21wbGV4U2VsZWN0b3I+IGNvbXBsZXhfc2VsZWN0b3IoJDEpOworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbWJpbmF0b3I+IGNvbWJpbmF0b3IoJDIpOworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbXBvdW5kU2VsZWN0b3I+IGNvbXBvdW5kX3NlbGVjdG9yKCQzKTsKKworICAgIGlmIChjb21wbGV4X3NlbGVjdG9yICYmIGNvbXBvdW5kX3NlbGVjdG9yKSB7CisgICAgICAkJCA9IGNvbXBsZXhfc2VsZWN0b3IucmVsZWFzZSgpOworICAgICAgJCQtPkFwcGVuZENvbWJpbmF0b3JBbmRTZWxlY3Rvcihjb21iaW5hdG9yLlBhc3MoKSwKKyAgICAgICAgICBjb21wb3VuZF9zZWxlY3Rvci5QYXNzKCkpOworICAgIH0gZWxzZSB7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwgY29tcGxleF9zZWxlY3RvciBrV2hpdGVzcGFjZVRva2VuCisgIDsKKworLy8gQSBzZWxlY3RvciBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2VsZWN0b3JzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzNC8jc2VsZWN0b3ItbGlzdAorc2VsZWN0b3JfbGlzdDoKKyAgICBjb21wbGV4X3NlbGVjdG9yIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb21wbGV4U2VsZWN0b3I+IGNvbXBsZXhfc2VsZWN0b3IoJDEpOworCisgICAgaWYgKGNvbXBsZXhfc2VsZWN0b3IpIHsKKyAgICAgICQkID0gbmV3IGNzc29tOjpTZWxlY3RvcnMoKTsKKyAgICAgICQkLT5wdXNoX2JhY2soY29tcGxleF9zZWxlY3Rvci5yZWxlYXNlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwgc2VsZWN0b3JfbGlzdCBjb21tYSBjb21wbGV4X3NlbGVjdG9yIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpTZWxlY3RvcnM+IHNlbGVjdG9yX2xpc3QoJDEpOworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbXBsZXhTZWxlY3Rvcj4gY29tcGxleF9zZWxlY3RvcigkMyk7CisKKyAgICBpZiAoc2VsZWN0b3JfbGlzdCAmJiBjb21wbGV4X3NlbGVjdG9yKSB7CisgICAgICAkJCA9IHNlbGVjdG9yX2xpc3QucmVsZWFzZSgpOworICAgICAgJCQtPnB1c2hfYmFjayhjb21wbGV4X3NlbGVjdG9yLnJlbGVhc2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgOworCisKKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisvLyBDb21tb24gcnVsZXMgdXNlZCBpbiBwcm9wZXJ0eSB2YWx1ZXMuCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorCithdXRvOgorICAgIGtBdXRvVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0QXV0bygpLmdldCgpKTsKKyAgfQorCisvLyBUaGUgc2Nhbm5lciB0aGF0IHdlIGFkb3B0ZWQgZnJvbSBXZWJLaXQgd2FzIGJ1aWx0IHdpdGggYXNzdW1wdGlvbiB0aGF0IHNpZ24KKy8vIGlzIGhhbmRsZWQgaW4gdGhlIGdyYW1tYXIuIFByYWN0aWNhbGx5IHRoaXMgbWVhbnMgdGhhdCB0b2tlbnMgb2YgPG51bWJlcj4KKy8vIGFuZCA8cmVhbD4gdHlwZXMgaGFzIHRvIGJlIHByZXBlbmRlZCB3aXRoIHRoaXMgcnVsZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjb25zdW1lLWEtbnVtYmVyCittYXliZV9zaWduX3Rva2VuOgorICAgIC8qIGVtcHR5ICovIHsgJCQgPSAxOyB9CisgIHwgJysnIHsgJCQgPSAxOyB9CisgIHwgJy0nIHsgJCQgPSAtMTsgfQorICA7CisKKy8vIFRoaXMgaXMgZm9yIGludGVnZXJzIHRoYXQgY2FuIG9ubHkgaGF2ZSB0aGUgdmFsdWVzIDAgb3IgMSwgaW5jbHVkaW5nICctMCcuCisvLyBBcyB1c2VkIGluIHRoZSAnZ3JpZCcgY3NzIG1lZGlhIGZlYXR1cmU6CisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jZ3JpZAoremVyb19vcl9vbmU6CisgICAgaW50ZWdlciB7CisgICAgaWYgKCgkMSA8IDApIHx8ICgkMSA+IDEpKSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoQDEsICJpbnRlZ2VyIHZhbHVlIG11c3QgYmUgMCBvciAxIik7CisgICAgICBZWUVSUk9SOworICAgIH0KKyAgICAkJCA9ICQxOworICB9CisgIDsKKworLy8gQW4gaW50ZWdlciBpcyBvbmUgb3IgbW9yZSBkZWNpbWFsIGRpZ2l0cyAiMCIgdGhyb3VnaCAiOSIuIFRoZSBmaXJzdCBkaWdpdAorLy8gb2YgYW4gaW50ZWdlciBtYXkgYmUgaW1tZWRpYXRlbHkgcHJlY2VkZWQgYnkgIi0iIG9yICIrIiB0byBpbmRpY2F0ZSB0aGUgc2lnbi4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNpbnRlZ2VycworaW50ZWdlcjoKKyAgICBtYXliZV9zaWduX3Rva2VuIGtJbnRlZ2VyVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAkMSAqICQyOworICB9CisgIDsKKworLy8gV3JhcCB0aGUgfGludGVnZXJ8IGluIG9yZGVyIHRvIHZhbGlkYXRlIGlmIHRoZSBpbnRlZ2VyIGlzIG5vdCBuZWdhdGl2ZQorbm9uX25lZ2F0aXZlX2ludGVnZXI6CisgICAgaW50ZWdlciB7CisgICAgaWYgKCQxIDwgMCkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAiaW50ZWdlciB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgWVlFUlJPUjsKKyAgICB9CisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKKy8vIFdyYXAgdGhlIHxpbnRlZ2VyfCBpbiBvcmRlciB0byB2YWxpZGF0ZSBpZiB0aGUgaW50ZWdlciBpcyBwb3NpdGl2ZQorcG9zaXRpdmVfaW50ZWdlcjoKKyAgICBpbnRlZ2VyIHsKKyAgICBpZiAoJDEgPCAxKSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoQDEsICJpbnRlZ2VyIHZhbHVlIG11c3QgYmUgcG9zaXRpdmUiKTsKKyAgICAgIFlZRVJST1I7CisgICAgfQorICAgICQkID0gJDE7CisgIH0KKyAgOworCisvLyBBIG51bWJlciBpcyBlaXRoZXIgYW4gfGludGVnZXJ8IG9yIHplcm8gb3IgbW9yZSBkZWNpbWFsIGRpZ2l0cyBmb2xsb3dlZAorLy8gYnkgYSBkb3QgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZGVjaW1hbCBkaWdpdHMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jbnVtYmVycworbnVtYmVyOgorICAgIGludGVnZXIgeyAkJCA9ICQxOyB9CisgIHwgbWF5YmVfc2lnbl90b2tlbiBrUmVhbFRva2VuIG1heWJlX3doaXRlc3BhY2UgeyAkJCA9ICQxICogJDI7IH0KKyAgOworCisvLyBXcmFwIHxudW1iZXJ8IGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBpcyBub3QgbmVnYXRpdmUuCitub25fbmVnYXRpdmVfbnVtYmVyOgorICAgIG51bWJlciB7CisgICAgaWYgKCQxIDwgMCkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAibnVtYmVyIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlIik7CisgICAgICBZWUVSUk9SOworICAgIH0KKyAgICAkJCA9ICQxOworICB9CisgIDsKKworLy8gUGVyY2VudGFnZSB2YWx1ZXMgYXJlIGFsd2F5cyByZWxhdGl2ZSB0byBhbm90aGVyIHZhbHVlLCBmb3IgZXhhbXBsZSBhIGxlbmd0aC4KKy8vIEVhY2ggcHJvcGVydHkgdGhhdCBhbGxvd3MgcGVyY2VudGFnZXMgYWxzbyBkZWZpbmVzIHRoZSB2YWx1ZSB0byB3aGljaAorLy8gdGhlIHBlcmNlbnRhZ2UgcmVmZXJzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI3BlcmNlbnRhZ2VzCitwZXJjZW50YWdlOgorICAgIG1heWJlX3NpZ25fdG9rZW4ga1BlcmNlbnRhZ2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlBlcmNlbnRhZ2VWYWx1ZSgkMSAqICQyIC8gMTAwKSk7CisgIH0KKyAgOworCisvLyBXcmFwIHRoZSB8cGVyY2VudGFnZXwgaW4gb3JkZXIgdG8gdmFsaWRhdGUgaWYgdGhlIHBlcmNlbnRhZ2UgaXMgcG9zaXRpdmUuCitwb3NpdGl2ZV9wZXJjZW50YWdlOgorICAgIHBlcmNlbnRhZ2UgeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlBlcmNlbnRhZ2VWYWx1ZT4gcGVyY2VudGFnZSA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICBpZiAocGVyY2VudGFnZSAmJiBwZXJjZW50YWdlLT52YWx1ZSgpIDwgMCkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAibmVnYXRpdmUgdmFsdWVzIG9mIHBlcmNlbnRhZ2UgYXJlIGlsbGVnYWwiKTsKKyAgICAgIFlZRVJST1I7CisgICAgfQorICAgICQkID0gQWRkUmVmKHBlcmNlbnRhZ2UuZ2V0KCkpOworICB9CisgIDsKKworLy8gT3BhY2l0eS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI2FscGhhdmFsdWVkdAorYWxwaGE6CisgICAgbnVtYmVyIHsKKyAgICAvLyBBbnkgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlIDAuMCAoZnVsbHkgdHJhbnNwYXJlbnQpCisgICAgLy8gdG8gMS4wIChmdWxseSBvcGFxdWUpIHdpbGwgYmUgY2xhbXBlZCB0byB0aGlzIHJhbmdlLgorICAgICQkID0gQ2xhbXBUb1JhbmdlKDAuMGYsIDEuMGYsICQxKTsKKyAgfQorICA7CisKKy8vIERpc3RhbmNlIHVuaXRzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI2xlbmd0aHMKK2xlbmd0aDoKKyAgICBudW1iZXIgeworICAgIGlmICgkMSAhPSAwKSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoCisgICAgICAgICAgQDEsICJub24temVybyBsZW5ndGggaXMgbm90IGFsbG93ZWQgd2l0aG91dCB1bml0IGlkZW50aWZpZXIiKTsKKyAgICAgIFlZRVJST1I7CisgICAgfQorICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TGVuZ3RoVmFsdWUoMCwgY3Nzb206OmtQaXhlbHNVbml0KSk7CisgIH0KKyAgfCBhYnNvbHV0ZV9vcl9yZWxhdGl2ZV9sZW5ndGggeyAkJCA9ICQxOyB9CisgIDsKKworYWJzb2x1dGVfb3JfcmVsYXRpdmVfbGVuZ3RoOgorICAvLyBSZWxhdGl2ZSBsZW5ndGhzLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jcmVsYXRpdmUtbGVuZ3RocworICAgIG1heWJlX3NpZ25fdG9rZW4ga0ZvbnRTaXplc0FrYUVtVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpMZW5ndGhWYWx1ZSgkMSAqICQyLCBjc3NvbTo6a0ZvbnRTaXplc0FrYUVtVW5pdCkpOworICB9CisgIHwgbWF5YmVfc2lnbl90b2tlbiBrUm9vdEVsZW1lbnRGb250U2l6ZXNBa2FSZW1Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Okxlbmd0aFZhbHVlKCQxICogJDIsCisgICAgICAgIGNzc29tOjprUm9vdEVsZW1lbnRGb250U2l6ZXNBa2FSZW1Vbml0KSk7CisgIH0KKyAgfCBtYXliZV9zaWduX3Rva2VuIGtWaWV3cG9ydFdpZHRoUGVyY2VudHNBa2FWd1Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TGVuZ3RoVmFsdWUoJDEgKiAkMiwKKyAgICAgICAgY3Nzb206OmtWaWV3cG9ydFdpZHRoUGVyY2VudHNBa2FWd1VuaXQpKTsKKyAgfQorICB8IG1heWJlX3NpZ25fdG9rZW4ga1ZpZXdwb3J0SGVpZ2h0UGVyY2VudHNBa2FWaFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TGVuZ3RoVmFsdWUoJDEgKiAkMiwKKyAgICAgICAgY3Nzb206OmtWaWV3cG9ydEhlaWdodFBlcmNlbnRzQWthVmhVbml0KSk7CisgIH0KKyAgLy8gQWJzb2x1dGUgbGVuZ3Rocy4KKyAgLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI2Fic29sdXRlLWxlbmd0aHMKKyAgfCBtYXliZV9zaWduX3Rva2VuIGtQaXhlbHNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Okxlbmd0aFZhbHVlKCQxICogJDIsIGNzc29tOjprUGl4ZWxzVW5pdCkpOworICB9CisgIDsKKworcG9zaXRpdmVfbGVuZ3RoOgorICBsZW5ndGggeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206Okxlbmd0aFZhbHVlPiBsZW5ndGgoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBpZiAobGVuZ3RoICYmIGxlbmd0aC0+dmFsdWUoKSA8IDApIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcihAMSwgIm5lZ2F0aXZlIHZhbHVlcyBvZiBsZW5ndGggYXJlIGlsbGVnYWwiKTsKKyAgICAgIFlZRVJST1I7CisgICAgfQorICAgICQkID0gQWRkUmVmKGxlbmd0aC5nZXQoKSk7CisgIH0KKyAgOworCisvLyBSYXRpbyB1bml0cy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLyN2YWx1ZXMKK3JhdGlvOgorICAgIHBvc2l0aXZlX2ludGVnZXIgJy8nIG1heWJlX3doaXRlc3BhY2UgcG9zaXRpdmVfaW50ZWdlciB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpSYXRpb1ZhbHVlKG1hdGg6OlJhdGlvbmFsKCQxLCAkNCkpKTsKKyAgfQorICA7CisKKy8vIFJlc29sdXRpb24gdW5pdHMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jcmVzb2x1dGlvbjAKK3Jlc29sdXRpb246CisgICAgbWF5YmVfc2lnbl90b2tlbiBrRG90c1BlckluY2hUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBmbG9hdCB2YWx1ZSA9ICQxICogJDI7CisgICAgaWYgKHZhbHVlIDw9IDApIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcihAMSwgInJlc29sdXRpb24gdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgWVlFUlJPUjsKKyAgICB9CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpSZXNvbHV0aW9uVmFsdWUodmFsdWUsIGNzc29tOjprRFBJVW5pdCkpOworICB9CisgIHwgbWF5YmVfc2lnbl90b2tlbiBrRG90c1BlckNlbnRpbWV0ZXJUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBmbG9hdCB2YWx1ZSA9ICQxICogJDI7CisgICAgaWYgKHZhbHVlIDw9IDApIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcihAMSwgInJlc29sdXRpb24gdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgWVlFUlJPUjsKKyAgICB9CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpSZXNvbHV0aW9uVmFsdWUodmFsdWUsIGNzc29tOjprRFBDTVVuaXQpKTsKKyAgfQorICA7CisKKy8vIEFuZ2xlIHVuaXRzIChyZXR1cm5lZCBzeW50aGV0aWMgdmFsdWUgd2lsbCBhbHdheXMgYmUgaW4gcmFkaWFucykuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jYW5nbGVzCithbmdsZToKKyAgICBtYXliZV9zaWduX3Rva2VuIGtEZWdyZWVzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAkMSAqICQyICogKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTV9QSSkgLyAzNjAuMGYpOworICB9CisgIHwgbWF5YmVfc2lnbl90b2tlbiBrR3JhZGlhbnNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9ICQxICogJDIgKiAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihNX1BJKSAvIDQwMC4wZik7CisgIH0KKyAgfCBtYXliZV9zaWduX3Rva2VuIGtSYWRpYW5zVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAkMSAqICQyOworICB9CisgIHwgbWF5YmVfc2lnbl90b2tlbiBrVHVybnNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9ICQxICogJDIgKiAyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE1fUEkpOworICB9CisgIDsKKworLy8gVGltZSB1bml0cyAodXNlZCBieSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucykuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jdGltZQordGltZToKKyAgICBudW1iZXIgeworICAgICQkID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKAorICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDY0PigkMSAqIGJhc2U6OlRpbWU6OmtNaWxsaXNlY29uZHNQZXJTZWNvbmQpKS4KKyAgICAgICAgICAgICBUb0ludGVybmFsVmFsdWUoKTsKKyAgICBpZiAoJDEgIT0gMCkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgQDEsICJub24temVybyB0aW1lIGlzIG5vdCBhbGxvd2VkIHdpdGhvdXQgdW5pdCBpZGVudGlmaWVyIik7CisgICAgfQorICB9CisgIHwgdGltZV93aXRoX3VuaXRzX3JlcXVpcmVkCisgIDsKKwordGltZV93aXRoX3VuaXRzX3JlcXVpcmVkOgorICBtYXliZV9zaWduX3Rva2VuIGtTZWNvbmRzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoCisgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjQ+KCQxICogJDIgKiBiYXNlOjpUaW1lOjprTWlsbGlzZWNvbmRzUGVyU2Vjb25kKSkuCisgICAgICAgICAgICAgVG9JbnRlcm5hbFZhbHVlKCk7CisgIH0KKyAgfCBtYXliZV9zaWduX3Rva2VuIGtNaWxsaXNlY29uZHNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2ND4oJDEgKiAkMikpLgorICAgICAgICAgICAgIFRvSW50ZXJuYWxWYWx1ZSgpOworICB9CisgIDsKKworY29sb246ICc6JyBtYXliZV93aGl0ZXNwYWNlIDsKK2NvbW1hOiAnLCcgbWF5YmVfd2hpdGVzcGFjZSA7CisKKy8vIEFsbCBwcm9wZXJ0aWVzIGFjY2VwdCB0aGUgQ1NTLXdpZGUga2V5d29yZHMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jY29tbW9uLWtleXdvcmRzCitjb21tb25fdmFsdWVzOgorICAgIGNvbW1vbl92YWx1ZXNfd2l0aG91dF9lcnJvcnMKKyAgfCBlcnJvcnMgeworICAgIC8vIElmIGEgdXNlciBhZ2VudCBkb2VzIG5vdCBzdXBwb3J0IGEgcGFydGljdWxhciB2YWx1ZSwgaXQgc2hvdWxkIGlnbm9yZQorICAgIC8vIHRoYXQgdmFsdWUgd2hlbiBwYXJzaW5nIHN0eWxlIHNoZWV0cywgYXMgaWYgdGhhdCB2YWx1ZSB3YXMgYW4gaWxsZWdhbAorICAgIC8vIHZhbHVlLgorICAgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN1bnN1cHBvcnRlZC12YWx1ZXMKKyAgICAvLworICAgIC8vIFVzZXIgYWdlbnRzIG11c3QgaWdub3JlIGEgZGVjbGFyYXRpb24gd2l0aCBhbiBpbGxlZ2FsIHZhbHVlLgorICAgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNpbGxlZ2FsdmFsdWVzCisgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJ1bnN1cHBvcnRlZCB2YWx1ZSIpOworICAgICQkID0gTlVMTDsKKyAgfQorICA7CisKK2NvbW1vbl92YWx1ZXNfd2l0aG91dF9lcnJvcnM6CisgICAga0luaGVyaXRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRJbmhlcml0KCkuZ2V0KCkpOworICB9CisgIHwga0luaXRpYWxUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRJbml0aWFsKCkuZ2V0KCkpOworICB9CisgIDsKKworY29sb3I6CisgIC8vIEhleGFkZWNpbWFsIG5vdGF0aW9uLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNudW1lcmljYWwKKyAgICBrSGV4VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgc3dpdGNoICgkMS5zaXplKCkpIHsKKyAgICAgIC8vIFRoZSB0aHJlZS1kaWdpdCBSR0Igbm90YXRpb24gKCNyZ2IpIGlzIGNvbnZlcnRlZCBpbnRvIHNpeC1kaWdpdAorICAgICAgLy8gZm9ybSAoI3JyZ2diYikgYnkgcmVwbGljYXRpbmcgZGlnaXRzLgorICAgICAgY2FzZSAzOiB7CisgICAgICAgIHVpbnQzMiByZ2IgPSBQYXJzZUhleFRva2VuKCQxKTsKKyAgICAgICAgdWludDMyIHIgPSAocmdiICYgMHhmMDApID4+IDg7CisgICAgICAgIHVpbnQzMiBnID0gKHJnYiAmIDB4MGYwKSA+PiA0OworICAgICAgICB1aW50MzIgYiA9IChyZ2IgJiAweDAwZik7CisgICAgICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UkdCQUNvbG9yVmFsdWUoKHIgPDwgMjgpIHwgKHIgPDwgMjQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZyA8PCAyMCkgfCAoZyA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiIDw8IDEyKSB8IChiIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSA2OiB7CisgICAgICAgIHVpbnQzMiByZ2IgPSBQYXJzZUhleFRva2VuKCQxKTsKKyAgICAgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpSR0JBQ29sb3JWYWx1ZSgocmdiIDw8IDgpIHwgMHhmZikpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFlZRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAvLyBSR0IgY29sb3IgbW9kZWwuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3JnYi1jb2xvcgorICB8IGtSR0JGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgaW50ZWdlciBjb21tYQorICAgICAgaW50ZWdlciBjb21tYSBpbnRlZ2VyICcpJyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICB1aW50OCByID0gc3RhdGljX2Nhc3Q8dWludDg+KENsYW1wVG9SYW5nZSgwLCAyNTUsICQzKSk7CisgICAgdWludDggZyA9IHN0YXRpY19jYXN0PHVpbnQ4PihDbGFtcFRvUmFuZ2UoMCwgMjU1LCAkNSkpOworICAgIHVpbnQ4IGIgPSBzdGF0aWNfY2FzdDx1aW50OD4oQ2xhbXBUb1JhbmdlKDAsIDI1NSwgJDcpKTsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlJHQkFDb2xvclZhbHVlKHIsIGcsIGIsIDB4ZmYpKTsKKyAgfQorICAvLyBSR0IgY29sb3IgbW9kZWwgd2l0aCBvcGFjaXR5LgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNyZ2JhLWNvbG9yCisgIHwga1JHQkFGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgaW50ZWdlciBjb21tYSBpbnRlZ2VyIGNvbW1hIGludGVnZXIKKyAgICAgIGNvbW1hIGFscGhhICcpJyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICB1aW50OCByID0gc3RhdGljX2Nhc3Q8dWludDg+KENsYW1wVG9SYW5nZSgwLCAyNTUsICQzKSk7CisgICAgdWludDggZyA9IHN0YXRpY19jYXN0PHVpbnQ4PihDbGFtcFRvUmFuZ2UoMCwgMjU1LCAkNSkpOworICAgIHVpbnQ4IGIgPSBzdGF0aWNfY2FzdDx1aW50OD4oQ2xhbXBUb1JhbmdlKDAsIDI1NSwgJDcpKTsKKyAgICBmbG9hdCBhID0gJDk7ICAvLyBBbHJlYWR5IGNsYW1wZWQuCisgICAgJCQgPSBBZGRSZWYoCisgICAgICAgIG5ldyBjc3NvbTo6UkdCQUNvbG9yVmFsdWUociwgZywgYiwgc3RhdGljX2Nhc3Q8dWludDg+KGEgKiAweGZmKSkpOworICB9CisgIHwga0FxdWFUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldEFxdWEoKS5nZXQoKSk7CisgIH0KKyAgfCBrQmxhY2tUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldEJsYWNrKCkuZ2V0KCkpOworICB9CisgIHwga0JsdWVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldEJsdWUoKS5nZXQoKSk7CisgIH0KKyAgfCBrRnVjaHNpYVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpSR0JBQ29sb3JWYWx1ZTo6R2V0RnVjaHNpYSgpLmdldCgpKTsKKyAgfQorICB8IGtHcmF5VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlJHQkFDb2xvclZhbHVlOjpHZXRHcmF5KCkuZ2V0KCkpOworICB9CisgIHwga0dyZWVuVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlJHQkFDb2xvclZhbHVlOjpHZXRHcmVlbigpLmdldCgpKTsKKyAgfQorICB8IGtMaW1lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlJHQkFDb2xvclZhbHVlOjpHZXRMaW1lKCkuZ2V0KCkpOworICB9CisgIHwga01hcm9vblRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpSR0JBQ29sb3JWYWx1ZTo6R2V0TWFyb29uKCkuZ2V0KCkpOworICB9CisgIHwga05hdnlUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldE5hdnkoKS5nZXQoKSk7CisgIH0KKyAgfCBrT2xpdmVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldE9saXZlKCkuZ2V0KCkpOworICB9CisgIHwga1B1cnBsZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpSR0JBQ29sb3JWYWx1ZTo6R2V0UHVycGxlKCkuZ2V0KCkpOworICB9CisgIHwga1JlZFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpSR0JBQ29sb3JWYWx1ZTo6R2V0UmVkKCkuZ2V0KCkpOworICB9CisgIHwga1NpbHZlclRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpSR0JBQ29sb3JWYWx1ZTo6R2V0U2lsdmVyKCkuZ2V0KCkpOworICB9CisgIHwga1RlYWxUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldFRlYWwoKS5nZXQoKSk7CisgIH0KKyAgfCBrVHJhbnNwYXJlbnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldFRyYW5zcGFyZW50KCkuZ2V0KCkpOworICB9CisgIHwga1doaXRlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlJHQkFDb2xvclZhbHVlOjpHZXRXaGl0ZSgpLmdldCgpKTsKKyAgfQorICB8IGtZZWxsb3dUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkdldFllbGxvdygpLmdldCgpKTsKKyAgfQorICA7CisKK3VybDoKKyAgICBrVXJpVG9rZW4gJyknIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6VVJMVmFsdWUoJDEuVG9TdHJpbmcoKSkpOworICB9CisgIDsKKworCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorLy8gUHJvcGVydHkgdmFsdWVzLgorLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKworbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWU6CisgICAgbGVuZ3RoIHsKKyAgICAkJCA9ICQxOworICB9CisgIHwgcGVyY2VudGFnZSB7CisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKK3Bvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlOgorICAgIHBvc2l0aXZlX2xlbmd0aCB7CisgICAgJCQgPSAkMTsKKyAgfQorICB8IHBvc2l0aXZlX3BlcmNlbnRhZ2UgeworICAgICQkID0gJDE7CisgIH0KKyAgOworCitiYWNrZ3JvdW5kX3Byb3BlcnR5X2VsZW1lbnQ6CisgICAgY29sb3IgeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IGNvbG9yKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgICAgaWYgKCEkPGJhY2tncm91bmRfc2hvcnRoYW5kX2xheWVyPjAtPmJhY2tncm91bmRfY29sb3IpIHsKKyAgICAgICQ8YmFja2dyb3VuZF9zaG9ydGhhbmRfbGF5ZXI+MC0+YmFja2dyb3VuZF9jb2xvciA9IGNvbG9yOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoCisgICAgICAgICAgQDEsICJiYWNrZ3JvdW5kLWNvbG9yIHZhbHVlIGRlY2xhcmVkIHR3aWNlIGluIGJhY2tncm91bmQuIik7CisgICAgICAkPGJhY2tncm91bmRfc2hvcnRoYW5kX2xheWVyPjAtPmVycm9yID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgfCBiYWNrZ3JvdW5kX2ltYWdlX3Byb3BlcnR5X2xpc3RfZWxlbWVudCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gaW1hZ2UoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBpZiAoISQ8YmFja2dyb3VuZF9zaG9ydGhhbmRfbGF5ZXI+MC0+YmFja2dyb3VuZF9pbWFnZSkgeworICAgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+CisgICAgICAgICAgYmFja2dyb3VuZF9pbWFnZV9idWlsZGVyKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgICBiYWNrZ3JvdW5kX2ltYWdlX2J1aWxkZXItPnJlc2VydmUoMSk7CisgICAgICBiYWNrZ3JvdW5kX2ltYWdlX2J1aWxkZXItPnB1c2hfYmFjayhpbWFnZSk7CisgICAgICAkPGJhY2tncm91bmRfc2hvcnRoYW5kX2xheWVyPjAtPmJhY2tncm91bmRfaW1hZ2UgPQorICAgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUoYmFja2dyb3VuZF9pbWFnZV9idWlsZGVyLlBhc3MoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcigKKyAgICAgICAgICBAMSwgImJhY2tncm91bmQtaW1hZ2UgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gYmFja2dyb3VuZC4iKTsKKyAgICAgICQ8YmFja2dyb3VuZF9zaG9ydGhhbmRfbGF5ZXI+MC0+ZXJyb3IgPSB0cnVlOworICAgIH0KKyAgfQorICA7CisKK21heWJlX2JhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV92YWx1ZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgJCQgPSBOVUxMOworICB9CisgIHwgJy8nIG1heWJlX3doaXRlc3BhY2UgYmFja2dyb3VuZF9zaXplX3Byb3BlcnR5X3ZhbHVlX3dpdGhvdXRfY29tbW9uX3ZhbHVlcyB7CisgICAgJCQgPSAkMzsKKyAgfQorICA7CisKK2JhY2tncm91bmRfcG9zaXRpb25fYW5kX3NpemVfc2hvcnRoYW5kX3Byb3BlcnR5X3ZhbHVlOgorICAgIHZhbGlkYXRlZF9wb3NpdGlvbl9wcm9wZXJ0eQorICAgIG1heWJlX2JhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV92YWx1ZSB7CisgICAgc2NvcGVkX3B0cjxCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXI+IHNob3J0aGFuZF9sYXllcigKKyAgICAgICAgbmV3IEJhY2tncm91bmRTaG9ydGhhbmRMYXllcigpKTsKKworICAgIHNob3J0aGFuZF9sYXllci0+YmFja2dyb3VuZF9wb3NpdGlvbiA9IE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICBpZiAoJDIpIHsKKyAgICAgIHNob3J0aGFuZF9sYXllci0+YmFja2dyb3VuZF9zaXplID0gTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpOworICAgIH0KKworICAgICQkID0gc2hvcnRoYW5kX2xheWVyLnJlbGVhc2UoKTsKKyAgfQorICA7CisKK2JhY2tncm91bmRfcmVwZWF0X3Nob3J0aGFuZF9wcm9wZXJ0eV92YWx1ZToKKyAgICBiYWNrZ3JvdW5kX3JlcGVhdF9wcm9wZXJ0eV92YWx1ZV93aXRob3V0X2NvbW1vbl92YWx1ZXMgeworICAgIHNjb3BlZF9wdHI8QmFja2dyb3VuZFNob3J0aGFuZExheWVyPiBzaG9ydGhhbmRfbGF5ZXIoCisgICAgICAgIG5ldyBCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXIoKSk7CisgICAgc2hvcnRoYW5kX2xheWVyLT5iYWNrZ3JvdW5kX3JlcGVhdCA9IE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICAkJCA9IHNob3J0aGFuZF9sYXllci5yZWxlYXNlKCk7CisgIH0KKyAgOworCisKKy8vICdiYWNrZ3JvdW5kLXNpemUnIHByb3BlcnR5IHNob3VsZCBmb2xsb3cgd2l0aCAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkKKy8vICBhbmQgYSAnLycuCitiYWNrZ3JvdW5kX3Bvc2l0aW9uX2FuZF9yZXBlYXRfY29tYmluYXRpb246CisgICAgYmFja2dyb3VuZF9wb3NpdGlvbl9hbmRfc2l6ZV9zaG9ydGhhbmRfcHJvcGVydHlfdmFsdWUKKyAgfCBiYWNrZ3JvdW5kX3JlcGVhdF9zaG9ydGhhbmRfcHJvcGVydHlfdmFsdWUKKyAgfCBiYWNrZ3JvdW5kX3Bvc2l0aW9uX2FuZF9zaXplX3Nob3J0aGFuZF9wcm9wZXJ0eV92YWx1ZQorICAgIGJhY2tncm91bmRfcmVwZWF0X3Nob3J0aGFuZF9wcm9wZXJ0eV92YWx1ZSB7CisgICAgc2NvcGVkX3B0cjxCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXI+IHNob3J0aGFuZF9sYXllcigkMSk7CisgICAgc2NvcGVkX3B0cjxCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXI+IG5vbl9vdmVybGFwcGVkKCQyKTsKKyAgICBzaG9ydGhhbmRfbGF5ZXItPkludGVncmF0ZU5vbk92ZXJsYXBwZWQoKm5vbl9vdmVybGFwcGVkKTsKKyAgICAkJCA9IHNob3J0aGFuZF9sYXllci5yZWxlYXNlKCk7CisgIH0KKyAgfCBiYWNrZ3JvdW5kX3JlcGVhdF9zaG9ydGhhbmRfcHJvcGVydHlfdmFsdWUKKyAgICBiYWNrZ3JvdW5kX3Bvc2l0aW9uX2FuZF9zaXplX3Nob3J0aGFuZF9wcm9wZXJ0eV92YWx1ZSB7CisgICAgc2NvcGVkX3B0cjxCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXI+IHNob3J0aGFuZF9sYXllcigkMSk7CisgICAgc2NvcGVkX3B0cjxCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXI+IG5vbl9vdmVybGFwcGVkKCQyKTsKKyAgICBzaG9ydGhhbmRfbGF5ZXItPkludGVncmF0ZU5vbk92ZXJsYXBwZWQoKm5vbl9vdmVybGFwcGVkKTsKKyAgICAkJCA9IHNob3J0aGFuZF9sYXllci5yZWxlYXNlKCk7CisgIH0KKyAgOworCitmaW5hbF9iYWNrZ3JvdW5kX2xheWVyX3dpdGhvdXRfcG9zaXRpb25fYW5kX3JlcGVhdDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYmFja2dyb3VuZCBzaG9ydGhhbmQgd2hpY2ggaXMgdG8gYmUgZmlsbGVkIGluIGJ5CisgICAgLy8gc3Vic2VxdWVudCByZWR1Y3Rpb25zLgorICAgICQkID0gbmV3IEJhY2tncm91bmRTaG9ydGhhbmRMYXllcigpOworICB9CisgIHwgZmluYWxfYmFja2dyb3VuZF9sYXllciBiYWNrZ3JvdW5kX3Byb3BlcnR5X2VsZW1lbnQgeworICAgIC8vIFByb3BhZ2F0ZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHJlZHVjZWQgbGlzdC4KKyAgICAvLyBBcHBlbmRpbmcgb2YgdGhlIG5ldyBiYWNrZ3JvdW5kX3Byb3BlcnR5X2VsZW1lbnQgdG8gdGhlIGxpc3QgaXMgZG9uZQorICAgIC8vIHdpdGhpbiBiYWNrZ3JvdW5kX3Byb3BlcnR5X2VsZW1lbnQncyByZWR1Y3Rpb24uCisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKKy8vIE9ubHkgdGhlIGZpbmFsIGJhY2tncm91bmQgbGF5ZXIgaXMgYWxsb3dlZCB0byBzZXQgdGhlIGJhY2tncm91bmQgY29sb3IuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI2x0ZmluYWwtYmctbGF5ZXJndAorZmluYWxfYmFja2dyb3VuZF9sYXllcjoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYmFja2dyb3VuZCBzaG9ydGhhbmQgd2hpY2ggaXMgdG8gYmUgZmlsbGVkIGluIGJ5CisgICAgLy8gc3Vic2VxdWVudCByZWR1Y3Rpb25zLgorICAgICQkID0gbmV3IEJhY2tncm91bmRTaG9ydGhhbmRMYXllcigpOworICB9CisgIHwgZmluYWxfYmFja2dyb3VuZF9sYXllcl93aXRob3V0X3Bvc2l0aW9uX2FuZF9yZXBlYXQKKyAgICBiYWNrZ3JvdW5kX3Bvc2l0aW9uX2FuZF9yZXBlYXRfY29tYmluYXRpb24geworICAgIHNjb3BlZF9wdHI8QmFja2dyb3VuZFNob3J0aGFuZExheWVyPiBzaG9ydGhhbmQoJDEpOworICAgIHNjb3BlZF9wdHI8QmFja2dyb3VuZFNob3J0aGFuZExheWVyPiBiYWNrZ3JvdW5kX3ZhbHVlcygkMik7CisgICAgaWYgKCFzaG9ydGhhbmQtPklzQmFja2dyb3VuZFByb3BlcnR5T3ZlcmxhcHBlZCgqYmFja2dyb3VuZF92YWx1ZXMuZ2V0KCkpKSB7CisgICAgICBzaG9ydGhhbmQtPkludGVncmF0ZU5vbk92ZXJsYXBwZWQoKmJhY2tncm91bmRfdmFsdWVzLmdldCgpKTsKKyAgICAgICQkID0gc2hvcnRoYW5kLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICAgIEAxLCAiYmFja2dyb3VuZC1wb3NpdGlvbiBvciBiYWNrZ3JvdW5kLXJlcGVhdCBkZWNsYXJlZCB0d2ljZSBpbiAiCisgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLiIpOworICAgICAgJCQgPSBuZXcgQmFja2dyb3VuZFNob3J0aGFuZExheWVyKCk7CisgICAgICAkJC0+ZXJyb3IgPSB0cnVlOworICAgIH0KKyAgfQorICB8IGZpbmFsX2JhY2tncm91bmRfbGF5ZXIgYmFja2dyb3VuZF9wcm9wZXJ0eV9lbGVtZW50IHsKKyAgICAvLyBQcm9wYWdhdGUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSByZWR1Y2VkIGxpc3QuCisgICAgLy8gQXBwZW5kaW5nIG9mIHRoZSBuZXcgYmFja2dyb3VuZF9wcm9wZXJ0eV9lbGVtZW50IHRvIHRoZSBsaXN0IGlzIGRvbmUKKyAgICAvLyB3aXRoaW4gYmFja2dyb3VuZF9wcm9wZXJ0eV9lbGVtZW50J3MgcmVkdWN0aW9uLgorICAgICQkID0gJDE7CisgIH0KKyAgOworCisvLyBTaG9ydGhhbmQgcHJvcGVydHkgZm9yIHNldHRpbmcgbW9zdCBiYWNrZ3JvdW5kIHByb3BlcnRpZXMgYXQgdGhlIHNhbWUgcGxhY2UuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI3RoZS1iYWNrZ3JvdW5kCitiYWNrZ3JvdW5kX3Byb3BlcnR5X3ZhbHVlOgorICAgIGZpbmFsX2JhY2tncm91bmRfbGF5ZXIKKyAgfCBjb21tb25fdmFsdWVzIHsKKyAgICAvLyBSZXBsaWNhdGUgdGhlIGNvbW1vbiB2YWx1ZSBpbnRvIGVhY2ggb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBiYWNrZ3JvdW5kCisgICAgLy8gaXMgYSBzaG9ydGhhbmQgZm9yLgorICAgIHNjb3BlZF9wdHI8QmFja2dyb3VuZFNob3J0aGFuZExheWVyPiBiYWNrZ3JvdW5kKAorICAgICAgICBuZXcgQmFja2dyb3VuZFNob3J0aGFuZExheWVyKCkpOworICAgIGJhY2tncm91bmQtPmJhY2tncm91bmRfY29sb3IgPSAkMTsKKyAgICBiYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kX2ltYWdlID0gJDE7CisgICAgYmFja2dyb3VuZC0+YmFja2dyb3VuZF9yZXBlYXQgPSAkMTsKKyAgICBiYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kX3Bvc2l0aW9uID0gJDE7CisgICAgYmFja2dyb3VuZC0+YmFja2dyb3VuZF9zaXplID0gJDE7CisgICAgJCQgPSBiYWNrZ3JvdW5kLnJlbGVhc2UoKTsKKyAgfQorICA7CisKKy8vIEJhY2tncm91bmQgY29sb3Igb2YgYW4gZWxlbWVudCBkcmF3biBiZWhpbmQgYW55IGJhY2tncm91bmQgaW1hZ2VzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyN0aGUtYmFja2dyb3VuZC1jb2xvcgorYmFja2dyb3VuZF9jb2xvcl9wcm9wZXJ0eV92YWx1ZToKKyAgICBjb2xvciB7ICQkID0gJDE7IH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworY29sb3Jfc3RvcDoKKyAgICBjb2xvciB7CisgICAgJCQgPSBuZXcgY3Nzb206OkNvbG9yU3RvcChNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICB9CisgIHwgY29sb3IgbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUgeworICAgICQkID0gbmV3IGNzc29tOjpDb2xvclN0b3AoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgfQorICA7CisKKy8vIE9ubHkgMiBvciBtb3JlIGNvbG9yIHN0b3BzIGNhbiBtYWtlIGEgdmFsaWQgY29sb3Igc3RvcCBsaXN0LgorY29tbWFfc2VwYXJhdGVkX2NvbG9yX3N0b3BfbGlzdDoKKyAgICBjb2xvcl9zdG9wIGNvbW1hIGNvbG9yX3N0b3AgeworICAgICQkID0gbmV3IGNzc29tOjpDb2xvclN0b3BMaXN0KCk7CisgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgICAgJCQtPnB1c2hfYmFjaygkMyk7CisgIH0KKyAgfCBjb21tYV9zZXBhcmF0ZWRfY29sb3Jfc3RvcF9saXN0IGNvbW1hIGNvbG9yX3N0b3AgeworICAgICQkID0gJDE7CisgICAgJCQtPnB1c2hfYmFjaygkMyk7CisgIH0KKyAgOworCitzaWRlOgorICAgIGtCb3R0b21Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprQm90dG9tOworICB9CisgIHwga0xlZnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprTGVmdDsKKyAgfQorICB8IGtSaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OmtSaWdodDsKKyAgfQorICB8IGtUb3BUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprVG9wOworICB9CisgIDsKKworc2lkZV9vcl9jb3JuZXI6CisgICAgc2lkZQorICB8IHNpZGUgc2lkZSB7CisgICAgaWYgKCQxID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprQm90dG9tKSB7CisgICAgICBpZigkMiA9PSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a0xlZnQpIHsKKyAgICAgICAgJCQgPSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a0JvdHRvbUxlZnQ7CisgICAgICB9IGVsc2UgaWYgKCQyID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprUmlnaHQpIHsKKyAgICAgICAgJCQgPSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a0JvdHRvbVJpZ2h0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJJbGxlZ2FsIGNvcm5lciB2YWx1ZS4iKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCQxID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprTGVmdCkgeworICAgICAgaWYoJDIgPT0gY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OmtCb3R0b20pIHsKKyAgICAgICAgJCQgPSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a0JvdHRvbUxlZnQ7CisgICAgICB9IGVsc2UgaWYgKCQyID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprVG9wKSB7CisgICAgICAgICQkID0gY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OmtUb3BMZWZ0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJJbGxlZ2FsIGNvcm5lciB2YWx1ZS4iKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCQxID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprUmlnaHQpIHsKKyAgICAgIGlmKCQyID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprQm90dG9tKSB7CisgICAgICAgICQkID0gY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OmtCb3R0b21SaWdodDsKKyAgICAgIH0gZWxzZSBpZiAoJDIgPT0gY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OmtUb3ApIHsKKyAgICAgICAgJCQgPSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a1RvcFJpZ2h0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJJbGxlZ2FsIGNvcm5lciB2YWx1ZS4iKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCQxID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprVG9wKSB7CisgICAgICBpZigkMiA9PSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a0xlZnQpIHsKKyAgICAgICAgJCQgPSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a1RvcExlZnQ7CisgICAgICB9IGVsc2UgaWYgKCQyID09IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlOjprUmlnaHQpIHsKKyAgICAgICAgJCQgPSBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZTo6a1RvcFJpZ2h0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJJbGxlZ2FsIGNvcm5lciB2YWx1ZS4iKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgOworCitsaW5lYXJfZ3JhZGllbnRfcGFyYW1zOgorICAgIGNvbW1hX3NlcGFyYXRlZF9jb2xvcl9zdG9wX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbG9yU3RvcExpc3Q+IGNvbG9yX3N0b3BfbGlzdCgkMSk7CisgICAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBsaW5lYXIgZ3JhZGllbnQgZnVuY3Rpb24gaXMgb21pdHRlZCwgaXQKKyAgICAvLyBkZWZhdWx0cyB0byAndG8gYm90dG9tJy4KKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWUoCisgICAgICAgICAgICAgY3Nzb206OkxpbmVhckdyYWRpZW50VmFsdWU6OmtCb3R0b20sIGNvbG9yX3N0b3BfbGlzdC0+UGFzcygpKSk7CisgIH0KKyAgfCBhbmdsZSBjb21tYSBjb21tYV9zZXBhcmF0ZWRfY29sb3Jfc3RvcF9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb2xvclN0b3BMaXN0PiBjb2xvcl9zdG9wX2xpc3QoJDMpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TGluZWFyR3JhZGllbnRWYWx1ZSgkMSwgY29sb3Jfc3RvcF9saXN0LT5QYXNzKCkpKTsKKyAgfQorICB8IGtUb1Rva2VuIGtXaGl0ZXNwYWNlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBzaWRlX29yX2Nvcm5lciBjb21tYQorICAgIGNvbW1hX3NlcGFyYXRlZF9jb2xvcl9zdG9wX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbG9yU3RvcExpc3Q+IGNvbG9yX3N0b3BfbGlzdCgkNik7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpMaW5lYXJHcmFkaWVudFZhbHVlKCQ0LCBjb2xvcl9zdG9wX2xpc3QtPlBhc3MoKSkpOworICB9CisgIDsKKworc2l6ZV9rZXl3b3JkOgorICAgIGtDbG9zZXN0U2lkZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtDbG9zZXN0U2lkZTsKKyAgfQorICB8IGtGYXJ0aGVzdFNpZGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprRmFydGhlc3RTaWRlOworICB9CisgIHwga0Nsb3Nlc3RDb3JuZXJUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprQ2xvc2VzdENvcm5lcjsKKyAgfQorICB8IGtGYXJ0aGVzdENvcm5lclRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtGYXJ0aGVzdENvcm5lcjsKKyAgfQorICA7CisKK2NpcmNsZV93aXRoX3NpemVfa2V5d29yZDoKKyAgICBrQ2lyY2xlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBzaXplX2tleXdvcmQgeworICAgICQkID0gJDM7CisgIH0KKyAgfCBzaXplX2tleXdvcmQga0NpcmNsZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gJDE7CisgIH0KKyAgOworCisvLyBJZiA8c2hhcGU+IGlzIHNwZWNpZmllZCBhcyAnY2lyY2xlJyBvciBpcyBvbWl0dGVkLCB0aGUgPHNpemU+IG1heSBiZQorLy8gZ2l2ZW4gZXhwbGljaXRseSBhcyBhIHNpbmdsZSA8bGVuZ3RoPiB3aGljaCBnaXZlcyB0aGUgcmFkaXVzIG9mIHRoZQorLy8gY2lyY2xlIGV4cGxpY2l0bHkuIE5lZ2F0aXZlIHZhbHVlcyBhcmUgaW52YWxpZC4KK2NpcmNsZV93aXRoX3Bvc2l0aXZlX2xlbmd0aDoKKyAgICBwb3NpdGl2ZV9sZW5ndGggeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgKKyAgICAgICBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCkpOworICAgIHByb3BlcnR5X3ZhbHVlLT5yZXNlcnZlKDEpOworICAgIHByb3BlcnR5X3ZhbHVlLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpOworICB9CisgIHwgcG9zaXRpdmVfbGVuZ3RoIGtDaXJjbGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoCisgICAgICAgbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cmVzZXJ2ZSgxKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKTsKKyAgfQorICB8IGtDaXJjbGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHBvc2l0aXZlX2xlbmd0aCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKAorICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnJlc2VydmUoMSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSk7CisgIH0KKyAgOworCittYXliZV9lbGxpcHNlX3dpdGhfc2l6ZV9rZXl3b3JkOgorICAgIGtFbGxpcHNlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBzaXplX2tleXdvcmQgeworICAgICQkID0gJDM7CisgIH0KKyAgfCBzaXplX2tleXdvcmQga0VsbGlwc2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9ICQxOworICB9CisgIHwgc2l6ZV9rZXl3b3JkIHsKKyAgICAvLyBJZiBvbmx5IGEgc2l6ZSBrZXl3b3JkIGlzIHNwZWNpZmllZCwgdGhlIGVuZGluZyBzaGFwZSBkZWZhdWx0cyB0byBhbgorICAgIC8vIGVsbGlwc2UuCisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKKy8vIElmIDxzaGFwZT4gaXMgc3BlY2lmaWVkIGFzICdlbGxpcHNlJyBvciBpcyBvbWl0dGVkLCB0aGUgPHNpemU+IG1heSBiZQorLy8gZ2l2ZW4gZXhwbGljaXRseSBhcyBbPGxlbmd0aD4gfCA8cGVyY2VudGFnZT5dezJ9IHdoaWNoIGdpdmVzIHRoZSBzaXplIG9mCisvLyB0aGUgZWxsaXBzZSBleHBsaWNpdGx5LiBOZWdhdGl2ZSB2YWx1ZXMgYXJlIGludmFsaWQuCitlbGxpcHNlX3dpdGhfMl9wb3NpdGl2ZV9sZW5ndGhfcGVyY2VudHM6CisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZSB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKAorICAgICAgICBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCkpOworICAgIHByb3BlcnR5X3ZhbHVlLT5yZXNlcnZlKDIpOworICAgIHByb3BlcnR5X3ZhbHVlLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKTsKKyAgfQorICB8IHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlCisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUga0VsbGlwc2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnJlc2VydmUoMik7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICAgIHByb3BlcnR5X3ZhbHVlLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpOworICB9CisgIHwga0VsbGlwc2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlCisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgKKyAgICAgICAgbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cmVzZXJ2ZSgyKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCkpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSk7CisgIH0KKyAgOworCithdF9wb3NpdGlvbjoKKyAgICBrQXRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHZhbGlkYXRlZF9wb3NpdGlvbl9wcm9wZXJ0eSB7CisgICAgJCQgPSAkMzsKKyAgfQorICA7CisKK21heWJlX2F0X3Bvc2l0aW9uOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAkJCA9IE5VTEw7CisgIH0KKyAgfCBhdF9wb3NpdGlvbgorICA7CisKKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtaW1hZ2VzLyNyYWRpYWwtZ3JhZGllbnRzCityYWRpYWxfZ3JhZGllbnRfcGFyYW1zOgorICAgIGNpcmNsZV93aXRoX3Bvc2l0aXZlX2xlbmd0aCBtYXliZV9hdF9wb3NpdGlvbiBjb21tYQorICAgIGNvbW1hX3NlcGFyYXRlZF9jb2xvcl9zdG9wX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbG9yU3RvcExpc3Q+IGNvbG9yX3N0b3BfbGlzdCgkNCk7CisgICAgJCQgPSBBZGRSZWYoCisgICAgICAgIG5ldyBjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZShjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZTo6a0NpcmNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yX3N0b3BfbGlzdC0+UGFzcygpKSk7CisgIH0KKyAgfCBlbGxpcHNlX3dpdGhfMl9wb3NpdGl2ZV9sZW5ndGhfcGVyY2VudHMgbWF5YmVfYXRfcG9zaXRpb24gY29tbWEKKyAgICBjb21tYV9zZXBhcmF0ZWRfY29sb3Jfc3RvcF9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb2xvclN0b3BMaXN0PiBjb2xvcl9zdG9wX2xpc3QoJDQpOworICAgICQkID0gQWRkUmVmKAorICAgICAgICBuZXcgY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWUoY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtFbGxpcHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Jfc3RvcF9saXN0LT5QYXNzKCkpKTsKKyAgfQorICB8IGNpcmNsZV93aXRoX3NpemVfa2V5d29yZCBtYXliZV9hdF9wb3NpdGlvbiBjb21tYQorICAgIGNvbW1hX3NlcGFyYXRlZF9jb2xvcl9zdG9wX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbG9yU3RvcExpc3Q+IGNvbG9yX3N0b3BfbGlzdCgkNCk7CisgICAgJCQgPSBBZGRSZWYoCisgICAgICAgIG5ldyBjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZShjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZTo6a0NpcmNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Jfc3RvcF9saXN0LT5QYXNzKCkpKTsKKyAgfQorICB8IG1heWJlX2VsbGlwc2Vfd2l0aF9zaXplX2tleXdvcmQgbWF5YmVfYXRfcG9zaXRpb24gY29tbWEKKyAgICBjb21tYV9zZXBhcmF0ZWRfY29sb3Jfc3RvcF9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb2xvclN0b3BMaXN0PiBjb2xvcl9zdG9wX2xpc3QoJDQpOworICAgICQkID0gQWRkUmVmKAorICAgICAgICBuZXcgY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWUoY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtFbGxpcHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcl9zdG9wX2xpc3QtPlBhc3MoKSkpOworICB9CisgIHwga0NpcmNsZVRva2VuIG1heWJlX3doaXRlc3BhY2UgbWF5YmVfYXRfcG9zaXRpb24gY29tbWEKKyAgICBjb21tYV9zZXBhcmF0ZWRfY29sb3Jfc3RvcF9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb2xvclN0b3BMaXN0PiBjb2xvcl9zdG9wX2xpc3QoJDUpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZSgKKyAgICAgICAgICAgIGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprQ2lyY2xlLAorICAgICAgICAgICAgY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtGYXJ0aGVzdENvcm5lciwKKyAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSwKKyAgICAgICAgICAgIGNvbG9yX3N0b3BfbGlzdC0+UGFzcygpKSk7CisgIH0KKyAgfCBrRWxsaXBzZVRva2VuIG1heWJlX3doaXRlc3BhY2UgbWF5YmVfYXRfcG9zaXRpb24gY29tbWEKKyAgICBjb21tYV9zZXBhcmF0ZWRfY29sb3Jfc3RvcF9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb2xvclN0b3BMaXN0PiBjb2xvcl9zdG9wX2xpc3QoJDUpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZSgKKyAgICAgICAgICAgIGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprRWxsaXBzZSwKKyAgICAgICAgICAgIGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprRmFydGhlc3RDb3JuZXIsCisgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyksCisgICAgICAgICAgICBjb2xvcl9zdG9wX2xpc3QtPlBhc3MoKSkpOworICB9CisgIHwgYXRfcG9zaXRpb24gY29tbWEgY29tbWFfc2VwYXJhdGVkX2NvbG9yX3N0b3BfbGlzdCB7CisgICAgLy8gSWYgbm8gc2l6ZSBvciBzaGFwZSBpcyBzcGVjaWZpZWQsIHRoZSBlbmRpbmcgc2hhcGUgZGVmYXVsdHMgdG8gYW4gZWxsaXBzZQorICAgIC8vIGFuZCB0aGUgc2l6ZSBkZWZhdWx0cyB0byAnZmFydGhlc3QtY29ybmVyJy4KKyAgICBzY29wZWRfcHRyPGNzc29tOjpDb2xvclN0b3BMaXN0PiBjb2xvcl9zdG9wX2xpc3QoJDMpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UmFkaWFsR3JhZGllbnRWYWx1ZSgKKyAgICAgICAgICAgIGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprRWxsaXBzZSwKKyAgICAgICAgICAgIGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlOjprRmFydGhlc3RDb3JuZXIsCisgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSksCisgICAgICAgICAgICBjb2xvcl9zdG9wX2xpc3QtPlBhc3MoKSkpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX2NvbG9yX3N0b3BfbGlzdCB7CisgICAgLy8gSWYgcG9zaXRpb24gaXMgb21pdHRlZCBhcyB3ZWxsLCBpdCBkZWZhdWx0cyB0byAnY2VudGVyJywgaW5kaWNhdGVkIGJ5CisgICAgLy8gcGFzc2luZyBpbiBOVUxMLgorICAgIHNjb3BlZF9wdHI8Y3Nzb206OkNvbG9yU3RvcExpc3Q+IGNvbG9yX3N0b3BfbGlzdCgkMSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpSYWRpYWxHcmFkaWVudFZhbHVlKAorICAgICAgICAgICAgY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtFbGxpcHNlLAorICAgICAgICAgICAgY3Nzb206OlJhZGlhbEdyYWRpZW50VmFsdWU6OmtGYXJ0aGVzdENvcm5lciwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBjb2xvcl9zdG9wX2xpc3QtPlBhc3MoKSkpOworICB9CisgIDsKKworYmFja2dyb3VuZF9pbWFnZV9wcm9wZXJ0eV9saXN0X2VsZW1lbnQ6CisgICAgdXJsIHsgJCQgPSAkMTsgfQorICB8IGtMaW5lYXJHcmFkaWVudEZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBsaW5lYXJfZ3JhZGllbnRfcGFyYW1zICcpJyB7CisgICAgJCQgPSAkMzsKKyAgfQorICB8IGtSYWRpYWxHcmFkaWVudEZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSByYWRpYWxfZ3JhZGllbnRfcGFyYW1zICcpJyB7CisgICAgJCQgPSAkMzsKKyAgfQorICB8IGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpLmdldCgpKTsKKyAgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF9iYWNrZ3JvdW5kX2ltYWdlX2xpc3Q6CisgICAgYmFja2dyb3VuZF9pbWFnZV9wcm9wZXJ0eV9saXN0X2VsZW1lbnQgeworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF9iYWNrZ3JvdW5kX2ltYWdlX2xpc3QgY29tbWEKKyAgICBiYWNrZ3JvdW5kX2ltYWdlX3Byb3BlcnR5X2xpc3RfZWxlbWVudCB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSk7CisgIH0KKyAgOworCisvLyBJbWFnZXMgYXJlIGRyYXduIHdpdGggdGhlIGZpcnN0IHNwZWNpZmllZCBvbmUgb24gdG9wIChjbG9zZXN0IHRvIHRoZSB1c2VyKQorLy8gYW5kIGVhY2ggc3Vic2VxdWVudCBpbWFnZSBiZWhpbmQgdGhlIHByZXZpb3VzIG9uZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtYmFja2dyb3VuZC8jdGhlLWJhY2tncm91bmQtaW1hZ2UKK2JhY2tncm91bmRfaW1hZ2VfcHJvcGVydHlfdmFsdWU6CisgIGNvbW1hX3NlcGFyYXRlZF9iYWNrZ3JvdW5kX2ltYWdlX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgkMSk7CisgICAgJCQgPSBwcm9wZXJ0eV92YWx1ZQorICAgICAgICAgPyBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKK3Bvc2l0aW9uX2xpc3RfZWxlbWVudDoKKyAgICBrQm90dG9tVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Qm90dG9tKCkuZ2V0KCkpOworICB9CisgIHwga0NlbnRlclRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldENlbnRlcigpLmdldCgpKTsKKyAgfQorICB8IGtMZWZ0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0TGVmdCgpLmdldCgpKTsKKyAgfQorICB8IGtSaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFJpZ2h0KCkuZ2V0KCkpOworICB9CisgIHwga1RvcFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFRvcCgpLmdldCgpKTsKKyAgfQorICB8IGxlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlCisgIDsKKworcG9zaXRpb25fbGlzdDoKKyAgICBwb3NpdGlvbl9saXN0X2VsZW1lbnQgeworICAgIHNjb3BlZF9wdHI8UG9zaXRpb25QYXJzZVN0cnVjdHVyZT4gcG9zaXRpb25faW5mbygKKyAgICAgICAgbmV3IFBvc2l0aW9uUGFyc2VTdHJ1Y3R1cmUoKSk7CisgICAgcG9zaXRpb25faW5mby0+UHVzaEJhY2tFbGVtZW50KE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgICAgJCQgPSBwb3NpdGlvbl9pbmZvLnJlbGVhc2UoKTsKKyAgfQorICB8IHBvc2l0aW9uX2xpc3QKKyAgICBwb3NpdGlvbl9saXN0X2VsZW1lbnQgeworICAgIHNjb3BlZF9wdHI8UG9zaXRpb25QYXJzZVN0cnVjdHVyZT4gcG9zaXRpb25faW5mbygkMSk7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gZWxlbWVudChNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMikpOworICAgIGlmIChwb3NpdGlvbl9pbmZvICYmCisgICAgICAgICFwb3NpdGlvbl9pbmZvLT5QdXNoQmFja0VsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAyLCAiaW52YWxpZCBiYWNrZ3JvdW5kIHBvc2l0aW9uIHZhbHVlIik7CisgICAgICAkJCA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gcG9zaXRpb25faW5mby5yZWxlYXNlKCk7CisgICAgfQorICB9CisgIDsKKwordmFsaWRhdGVkX3Bvc2l0aW9uX3Byb3BlcnR5OgorICAgIHBvc2l0aW9uX2xpc3QgeworICAgIHNjb3BlZF9wdHI8UG9zaXRpb25QYXJzZVN0cnVjdHVyZT4gcG9zaXRpb25faW5mbygkMSk7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlOworCisgICAgaWYgKCFwb3NpdGlvbl9pbmZvKSB7CisgICAgICAvLyBOby1vcHMuCisgICAgfSBlbHNlIGlmIChwb3NpdGlvbl9pbmZvLT5wb3NpdGlvbl9idWlsZGVyKCkuc2l6ZSgpID09IDEpIHsKKyAgICAgIHByb3BlcnR5X3ZhbHVlLnJlc2V0KG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoCisgICAgICAgICAgcG9zaXRpb25faW5mby0+cG9zaXRpb25fYnVpbGRlcigpKSk7CisgICAgfSBlbHNlIGlmIChwb3NpdGlvbl9pbmZvLT5wb3NpdGlvbl9idWlsZGVyKCkuc2l6ZSgpID09IDIgJiYKKyAgICAgICAgICAgICAgICFwb3NpdGlvbl9pbmZvLT5Jc1Bvc2l0aW9uVmFsaWRPblNpemVUd28oKSkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJpbnZhbGlkIGJhY2tncm91bmQgcG9zaXRpb24gdmFsdWUiKTsKKyAgICAgIC8vIE5vLW9wcy4KKyAgICB9IGVsc2UgeworICAgICAgRENIRUNLX0dFKHBvc2l0aW9uX2luZm8tPnBvc2l0aW9uX2J1aWxkZXIoKS5zaXplKCksIDJ1KTsKKyAgICAgIERDSEVDS19MRShwb3NpdGlvbl9pbmZvLT5wb3NpdGlvbl9idWlsZGVyKCkuc2l6ZSgpLCA0dSk7CisgICAgICBwcm9wZXJ0eV92YWx1ZS5yZXNldChuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKAorICAgICAgICAgIHBvc2l0aW9uX2luZm8tPnBvc2l0aW9uX2J1aWxkZXIoKSkpOworICAgIH0KKworICAgICQkID0gcHJvcGVydHlfdmFsdWUKKyAgICAgICAgID8gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSkKKyAgICAgICAgIDogTlVMTDsKKyAgfQorICA7CisKKy8vIElmIGJhY2tncm91bmQgaW1hZ2VzIGhhdmUgYmVlbiBzcGVjaWZpZWQsIHRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZWlyCisvLyBpbml0aWFsIHBvc2l0aW9uIChhZnRlciBhbnkgcmVzaXppbmcpIHdpdGhpbiB0aGVpciBjb3JyZXNwb25kaW5nIGJhY2tncm91bmQKKy8vIHBvc2l0aW9uaW5nIGFyZWEuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI3RoZS1iYWNrZ3JvdW5kLXBvc2l0aW9uCitiYWNrZ3JvdW5kX3Bvc2l0aW9uX3Byb3BlcnR5X3ZhbHVlOgorICAgIHZhbGlkYXRlZF9wb3NpdGlvbl9wcm9wZXJ0eSB7CisgICAgJCQgPSAkMTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBTcGVjaWZpZXMgaG93IGJhY2tncm91bmQgaW1hZ2VzIGFyZSB0aWxlZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBzaXplZCBhbmQKKy8vIHBvc2l0aW9uZWQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI3RoZS1iYWNrZ3JvdW5kLXJlcGVhdAorYmFja2dyb3VuZF9yZXBlYXRfZWxlbWVudDoKKyAgICBrTm9SZXBlYXRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXROb1JlcGVhdCgpLmdldCgpKTsKKyAgfQorICB8IGtSZXBlYXRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRSZXBlYXQoKS5nZXQoKSk7CisgIH0KKyAgOworCitiYWNrZ3JvdW5kX3JlcGVhdF9wcm9wZXJ0eV92YWx1ZV93aXRob3V0X2NvbW1vbl92YWx1ZXM6CisgICAgYmFja2dyb3VuZF9yZXBlYXRfZWxlbWVudCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IGJ1aWxkZXIoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgYnVpbGRlci0+cmVzZXJ2ZSgyKTsKKyAgICBidWlsZGVyLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBidWlsZGVyLT5wdXNoX2JhY2soJDEpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUoYnVpbGRlci5QYXNzKCkpKTsKKyAgfQorICB8IGJhY2tncm91bmRfcmVwZWF0X2VsZW1lbnQgYmFja2dyb3VuZF9yZXBlYXRfZWxlbWVudCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IGJ1aWxkZXIoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgYnVpbGRlci0+cmVzZXJ2ZSgyKTsKKyAgICBidWlsZGVyLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBidWlsZGVyLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKGJ1aWxkZXIuUGFzcygpKSk7CisgIH0KKyAgfCBrUmVwZWF0WFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBidWlsZGVyKAorICAgICAgICBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCkpOworICAgIGJ1aWxkZXItPnJlc2VydmUoMik7CisgICAgYnVpbGRlci0+cHVzaF9iYWNrKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFJlcGVhdCgpLmdldCgpKTsKKyAgICBidWlsZGVyLT5wdXNoX2JhY2soY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9SZXBlYXQoKS5nZXQoKSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShidWlsZGVyLlBhc3MoKSkpOworICB9CisgIHwga1JlcGVhdFlUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gYnVpbGRlcigKKyAgICAgICAgbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpKTsKKyAgICBidWlsZGVyLT5yZXNlcnZlKDIpOworICAgIGJ1aWxkZXItPnB1c2hfYmFjayhjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXROb1JlcGVhdCgpLmdldCgpKTsKKyAgICBidWlsZGVyLT5wdXNoX2JhY2soY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0UmVwZWF0KCkuZ2V0KCkpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUoYnVpbGRlci5QYXNzKCkpKTsKKyAgfQorICA7CisKK2JhY2tncm91bmRfcmVwZWF0X3Byb3BlcnR5X3ZhbHVlOgorICAgIGJhY2tncm91bmRfcmVwZWF0X3Byb3BlcnR5X3ZhbHVlX3dpdGhvdXRfY29tbW9uX3ZhbHVlcworICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCitiYWNrZ3JvdW5kX3NpemVfcHJvcGVydHlfbGlzdF9lbGVtZW50OgorICAgIGxlbmd0aCB7ICQkID0gJDE7IH0KKyAgfCBwb3NpdGl2ZV9wZXJjZW50YWdlIHsgJCQgPSAkMTsgfQorICB8IGF1dG8KKyAgOworCitiYWNrZ3JvdW5kX3NpemVfcHJvcGVydHlfbGlzdDoKKyAgICBiYWNrZ3JvdW5kX3NpemVfcHJvcGVydHlfbGlzdF9lbGVtZW50IHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKTsKKyAgICAkJC0+cmVzZXJ2ZSgyKTsKKyAgICAkJC0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgICAgLy8gRmlsbCBpbiB0aGUgb21pdHRlZCAnYXV0bycuCisgICAgJCQtPnB1c2hfYmFjayhjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRBdXRvKCkuZ2V0KCkpOworICB9CisgIHwgYmFja2dyb3VuZF9zaXplX3Byb3BlcnR5X2xpc3RfZWxlbWVudAorICAgIGJhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV9saXN0X2VsZW1lbnQgeworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICQkLT5yZXNlcnZlKDIpOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICAkJC0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSk7CisgIH0KKyAgOworCisvLyBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJhY2tncm91bmQgaW1hZ2VzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyN0aGUtYmFja2dyb3VuZC1zaXplCitiYWNrZ3JvdW5kX3NpemVfcHJvcGVydHlfdmFsdWVfd2l0aG91dF9jb21tb25fdmFsdWVzOgorICAgIGJhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoJDEpOworICAgICQkID0gcHJvcGVydHlfdmFsdWUKKyAgICAgICAgID8gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSkKKyAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtDb250YWluVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Q29udGFpbigpLmdldCgpKTsKKyAgfQorICB8IGtDb3ZlclRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldENvdmVyKCkuZ2V0KCkpOworICB9CisgIDsKKworYmFja2dyb3VuZF9zaXplX3Byb3BlcnR5X3ZhbHVlOgorICAgIGJhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV92YWx1ZV93aXRob3V0X2NvbW1vbl92YWx1ZXMKKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gJ2JvcmRlci1jb2xvcicgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgYm9yZGVyIHNwZWNpZmllZCBieSB0aGUKKy8vIGJvcmRlci1zdHlsZSBwcm9wZXJ0aWVzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyNib3JkZXItY29sb3IKK2JvcmRlcl9jb2xvcl9wcm9wZXJ0eV9saXN0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKTsKKyAgfQorICB8IGJvcmRlcl9jb2xvcl9wcm9wZXJ0eV9saXN0IGNvbG9yIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoJDEpOworICAgIHByb3BlcnR5X3ZhbHVlLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgICAkJCA9IHByb3BlcnR5X3ZhbHVlLnJlbGVhc2UoKTsKKyAgfQorICA7CisKK2JvcmRlcl9jb2xvcl9wcm9wZXJ0eV92YWx1ZToKKyAgICBib3JkZXJfY29sb3JfcHJvcGVydHlfbGlzdCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKCQxKTsKKyAgICBpZiAocHJvcGVydHlfdmFsdWUtPnNpemUoKSA+IDB1ICYmCisgICAgICAgIHByb3BlcnR5X3ZhbHVlLT5zaXplKCkgPD0gNHUpIHsKKyAgICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAiaW52YWxpZCBudW1iZXIgb2YgYm9yZGVyIGNvbG9yIHZhbHVlcyIpOworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGNvbW1vbl92YWx1ZXMgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgKKyAgICAgICAgbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cHVzaF9iYWNrKCQxKTsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpOworICB9CisgIDsKKworLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyNsdGxpbmUtc3R5bGVndAorbGluZV9zdHlsZToKKyAgICBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrSGlkZGVuVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0SGlkZGVuKCkuZ2V0KCkpOworICB9CisgIHwga1NvbGlkVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0U29saWQoKS5nZXQoKSk7CisgIH0KKyAgOworCitsaW5lX3N0eWxlX3dpdGhfY29tbW9uX3ZhbHVlczoKKyAgICBsaW5lX3N0eWxlCisgIHwgY29tbW9uX3ZhbHVlczsKKyAgOworCisvLyAnYm9yZGVyLXN0eWxlJyBzZXRzIHRoZSBzdHlsZSBvZiB0aGUgYm9yZGVyLCB1bmxlc3MgdGhlcmUgaXMgYSBib3JkZXItaW1hZ2UuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI2JvcmRlci1zdHlsZQorYm9yZGVyX3N0eWxlX3Byb3BlcnR5X2xpc3Q6CisgICAgLyogZW1wdHkgKi8geworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICB9CisgIHwgYm9yZGVyX3N0eWxlX3Byb3BlcnR5X2xpc3QgbGluZV9zdHlsZSB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKCQxKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSk7CisgICAgJCQgPSBwcm9wZXJ0eV92YWx1ZS5yZWxlYXNlKCk7CisgIH0KKyAgOworCitib3JkZXJfc3R5bGVfcHJvcGVydHlfdmFsdWU6CisgICAgYm9yZGVyX3N0eWxlX3Byb3BlcnR5X2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgkMSk7CisgICAgaWYgKHByb3BlcnR5X3ZhbHVlLT5zaXplKCkgPiAwdSAmJgorICAgICAgICBwcm9wZXJ0eV92YWx1ZS0+c2l6ZSgpIDw9IDR1KSB7CisgICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgbnVtYmVyIG9mIGJvcmRlciBzdHlsZSB2YWx1ZXMiKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBjb21tb25fdmFsdWVzIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjaygkMSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKTsKKyAgfQorICA7CisKKy8vICdib3JkZXItd2lkdGgnIHNldHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgYm9yZGVyLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyNib3JkZXItd2lkdGgKK2JvcmRlcl93aWR0aF9lbGVtZW50OgorICAgIHBvc2l0aXZlX2xlbmd0aCAgeyAkJCA9ICQxOyB9CisgIDsKKworYm9yZGVyX3dpZHRoX2VsZW1lbnRfd2l0aF9jb21tb25fdmFsdWVzOgorICAgIGJvcmRlcl93aWR0aF9lbGVtZW50CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKK2JvcmRlcl93aWR0aF9wcm9wZXJ0eV9saXN0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKTsKKyAgfQorICB8IGJvcmRlcl93aWR0aF9wcm9wZXJ0eV9saXN0IGJvcmRlcl93aWR0aF9lbGVtZW50IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoJDEpOworICAgIHByb3BlcnR5X3ZhbHVlLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgICAkJCA9IHByb3BlcnR5X3ZhbHVlLnJlbGVhc2UoKTsKKyAgfQorICA7CisKK2JvcmRlcl93aWR0aF9wcm9wZXJ0eV92YWx1ZToKKyAgICBib3JkZXJfd2lkdGhfcHJvcGVydHlfbGlzdCAgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgkMSk7CisgICAgaWYgKHByb3BlcnR5X3ZhbHVlLT5zaXplKCkgPiAwdSAmJgorICAgICAgICBwcm9wZXJ0eV92YWx1ZS0+c2l6ZSgpIDw9IDR1KSB7CisgICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgbnVtYmVyIG9mIGJvcmRlciB3aWR0aCB2YWx1ZXMiKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBjb21tb25fdmFsdWVzIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjaygkMSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKTsKKyAgfQorICA7CisKKy8vIGJvcmRlcl9vcl9vdXRsaW5lX3Byb3BlcnR5X2VsZW1lbnQgcmVwcmVzZW50cyBhIGNvbXBvbmVudCBvZiBhIHNpbmdsZSBib3JkZXIKKy8vIHByb3BlcnR5LiBJdCB1c2VzICQwIHRvIGFjY2VzcyBpdHMgcGFyZW50J3MgQm9yZGVyT3JPdXRsaW5lU2hvcnRoYW5kIG9iamVjdAorLy8gYW5kIGJ1aWxkIGl0LCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdGhlIHJpZ2h0IG9mIGEgYm9yZGVyIHNob3J0aGFuZAorLy8gb2JqZWN0LgorLy8gVGhlICdib3JkZXInIGFuZCAnb3V0bGluZScgcHJvcGVydGllcyBhcmUgc2hvcnRoYW5kIHByb3BlcnRpZXMgZm9yIHNldHRpbmcKKy8vIHRoZSBzYW1lIHdpZHRoLCBjb2xvciwgYW5kIHN0eWxlIGZvciBhbGwgZm91ciBib3JkZXJzIG9mIGEgYm94LiBVbmxpa2UgdGhlCisvLyBzaG9ydGhhbmQgJ21hcmdpbicgYW5kICdwYWRkaW5nJyBwcm9wZXJ0aWVzLCB0aGUgJ2JvcmRlcicgcHJvcGVydHkgY2Fubm90IHNldAorLy8gZGlmZmVyZW50IHZhbHVlcyBvbiB0aGUgZm91ciBib3JkZXJzLgorYm9yZGVyX29yX291dGxpbmVfcHJvcGVydHlfZWxlbWVudDoKKyAgICBjb2xvciB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gY29sb3IoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBpZiAoISQ8Ym9yZGVyX29yX291dGxpbmVfc2hvcnRoYW5kPjAtPmNvbG9yKSB7CisgICAgICAkPGJvcmRlcl9vcl9vdXRsaW5lX3Nob3J0aGFuZD4wLT5jb2xvciA9IGNvbG9yOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoCisgICAgICAgICAgQDEsICJjb2xvciB2YWx1ZSBkZWNsYXJlZCB0d2ljZSBpbiBib3JkZXIgb3Igb3V0bGluZS4iKTsKKyAgICAgICQ8Ym9yZGVyX29yX291dGxpbmVfc2hvcnRoYW5kPjAtPmVycm9yID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgfCBsaW5lX3N0eWxlIHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBsaW5lX3N0eWxlID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIGlmICghJDxib3JkZXJfb3Jfb3V0bGluZV9zaG9ydGhhbmQ+MC0+c3R5bGUpIHsKKyAgICAgICQ8Ym9yZGVyX29yX291dGxpbmVfc2hvcnRoYW5kPjAtPnN0eWxlID0gbGluZV9zdHlsZTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICAgIEAxLCAic3R5bGUgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gYm9yZGVyIG9yIG91dGxpbmUuIik7CisgICAgICAkPGJvcmRlcl9vcl9vdXRsaW5lX3Nob3J0aGFuZD4wLT5lcnJvciA9IHRydWU7CisgICAgfQorICB9CisgIHwgcG9zaXRpdmVfbGVuZ3RoIHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBwb3NpdGl2ZV9sZW5ndGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSk7CisgICAgaWYgKCEkPGJvcmRlcl9vcl9vdXRsaW5lX3Nob3J0aGFuZD4wLT53aWR0aCkgeworICAgICAgJDxib3JkZXJfb3Jfb3V0bGluZV9zaG9ydGhhbmQ+MC0+d2lkdGggPSBwb3NpdGl2ZV9sZW5ndGg7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcigKKyAgICAgICAgICBAMSwgIndpZHRoIHZhbHVlIGRlY2xhcmVkIHR3aWNlIGluIGJvcmRlciBvciBvdXRsaW5lLiIpOworICAgICAgJDxib3JkZXJfb3Jfb3V0bGluZV9zaG9ydGhhbmQ+MC0+ZXJyb3IgPSB0cnVlOworICAgIH0KKyAgfQorICA7CisKK2JvcmRlcl9vcl9vdXRsaW5lX3Byb3BlcnR5X2xpc3Q6CisgICAgLyogZW1wdHkgKi8geworICAgICQkID0gbmV3IEJvcmRlck9yT3V0bGluZVNob3J0aGFuZCgpOworICB9CisgIHwgYm9yZGVyX29yX291dGxpbmVfcHJvcGVydHlfbGlzdCBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV9lbGVtZW50IHsKKyAgICAkJCA9ICQxOworICB9CisgIDsKKworLy8gVE9ETzogU3VwcG9ydCBib3JkZXItaW1hZ2UuCisvLyBUaGUgYm9yZGVyIGNhbiBlaXRoZXIgYmUgYSBwcmVkZWZpbmVkIHN0eWxlIChzb2xpZCBsaW5lLCBkb3VibGUgbGluZSwgZG90dGVkCisvLyBsaW5lLCBwc2V1ZG8tM0QgYm9yZGVyLCBldGMuKSBvciBpdCBjYW4gYmUgYW4gaW1hZ2UuIEluIHRoZSBmb3JtZXIgY2FzZSwKKy8vIHZhcmlvdXMgcHJvcGVydGllcyBkZWZpbmUgdGhlIHN0eWxlICgnYm9yZGVyLXN0eWxlJyksIGNvbG9yICgnYm9yZGVyLWNvbG9yJyksCisvLyBhbmQgdGhpY2tuZXNzICgnYm9yZGVyLXdpZHRoJykgb2YgdGhlIGJvcmRlci4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtYmFja2dyb3VuZC8jYm9yZGVycworYm9yZGVyX29yX291dGxpbmVfcHJvcGVydHlfdmFsdWU6CisgICAgYm9yZGVyX29yX291dGxpbmVfcHJvcGVydHlfbGlzdAorICB8IGNvbW1vbl92YWx1ZXMgeworICAgIC8vIFJlcGxpY2F0ZSB0aGUgY29tbW9uIHZhbHVlIGludG8gZWFjaCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGJvcmRlciBpcyBhCisgICAgLy8gc2hvcnRoYW5kIGZvci4KKyAgICBzY29wZWRfcHRyPEJvcmRlck9yT3V0bGluZVNob3J0aGFuZD4gYm9yZGVyKG5ldyBCb3JkZXJPck91dGxpbmVTaG9ydGhhbmQoKSk7CisgICAgYm9yZGVyLT5jb2xvciA9ICQxOworICAgIGJvcmRlci0+c3R5bGUgPSAkMTsKKyAgICBib3JkZXItPndpZHRoID0gJDE7CisgICAgJCQgPSBib3JkZXIucmVsZWFzZSgpOworICB9CisgIDsKKworLy8gVGhlIHJhZGlpIG9mIGEgcXVhcnRlciBlbGxpcHNlIHRoYXQgZGVmaW5lcyB0aGUgc2hhcGUgb2YgdGhlIGNvcm5lcgorLy8gb2YgdGhlIG91dGVyIGJvcmRlciBlZGdlLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyN0aGUtYm9yZGVyLXJhZGl1cworYm9yZGVyX3JhZGl1c19lbGVtZW50OgorICAgIHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlIHsgJCQgPSAkMTsgfQorICA7Citib3JkZXJfcmFkaXVzX2VsZW1lbnRfd2l0aF9jb21tb25fdmFsdWVzOgorICAgIGJvcmRlcl9yYWRpdXNfZWxlbWVudAorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCitib3JkZXJfcmFkaXVzX3Byb3BlcnR5X2xpc3Q6CisgICAgLyogZW1wdHkgKi8geworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICB9CisgIHwgYm9yZGVyX3JhZGl1c19wcm9wZXJ0eV9saXN0IGJvcmRlcl9yYWRpdXNfZWxlbWVudCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKCQxKTsKKyAgICBwcm9wZXJ0eV92YWx1ZS0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSk7CisgICAgJCQgPSBwcm9wZXJ0eV92YWx1ZS5yZWxlYXNlKCk7CisgIH0KKyAgOworCitib3JkZXJfcmFkaXVzX3Byb3BlcnR5X3ZhbHVlOgorICAgIGJvcmRlcl9yYWRpdXNfcHJvcGVydHlfbGlzdCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKCQxKTsKKyAgICBpZiAocHJvcGVydHlfdmFsdWUtPnNpemUoKSA+IDB1ICYmCisgICAgICAgIHByb3BlcnR5X3ZhbHVlLT5zaXplKCkgPD0gNHUpIHsKKyAgICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAiaW52YWxpZCBudW1iZXIgb2YgYm9yZGVyIHJhZGl1cyB2YWx1ZXMiKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBjb21tb25fdmFsdWVzIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjaygkMSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKTsKKyAgfQorICA7CisKK2JveF9zaGFkb3dfcHJvcGVydHlfZWxlbWVudDoKKyAgICBsZW5ndGggeworICAgIGlmICgkPHNoYWRvd19pbmZvPjAtPmxlbmd0aF92ZWN0b3Iuc2l6ZSgpID09IDIpIHsKKyAgICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206Okxlbmd0aFZhbHVlPiBsZW5ndGgoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICAgIC8vIE5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgZm9yIGJsdXIgcmFkaXVzLgorICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGgtPnZhbHVlKCkgPCAwKSB7CisgICAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcihAMSwgIm5lZ2F0aXZlIHZhbHVlcyBvZiBibHVyIHJhZGl1cyBhcmUgaWxsZWdhbCIpOworICAgICAgICAkPHNoYWRvd19pbmZvPjAtPmVycm9yID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgICQ8c2hhZG93X2luZm8+MC0+bGVuZ3RoX3ZlY3Rvci5wdXNoX2JhY2sobGVuZ3RoKTsKKyAgICB9IGVsc2UgeworICAgICAgJDxzaGFkb3dfaW5mbz4wLT5sZW5ndGhfdmVjdG9yLnB1c2hfYmFjaygKKyAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICAgIH0KKyAgfQorICB8IGNvbG9yIHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpSR0JBQ29sb3JWYWx1ZT4gY29sb3IoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBpZiAoISQ8c2hhZG93X2luZm8+MC0+Y29sb3IpIHsKKyAgICAgICQ8c2hhZG93X2luZm8+MC0+Y29sb3IgPSBjb2xvcjsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAiY29sb3IgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gYm94IHNoYWRvdy4iKTsKKyAgICAgICQ8c2hhZG93X2luZm8+MC0+ZXJyb3IgPSB0cnVlOworICAgIH0KKyAgfQorICB8IGtJbnNldFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgIGlmICghJDxzaGFkb3dfaW5mbz4wLT5oYXNfaW5zZXQpIHsKKyAgICAgICQ8c2hhZG93X2luZm8+MC0+aGFzX2luc2V0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAiaW5zZXQgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gYm94IHNoYWRvdy4iKTsKKyAgICAgICQ8c2hhZG93X2luZm8+MC0+ZXJyb3IgPSB0cnVlOworICAgIH0KKyAgfQorICA7CisKK2JveF9zaGFkb3dfbGlzdDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgJCQgPSBuZXcgU2hhZG93UHJvcGVydHlJbmZvKCk7CisgIH0KKyAgfCBib3hfc2hhZG93X2xpc3QgYm94X3NoYWRvd19wcm9wZXJ0eV9lbGVtZW50IHsKKyAgICAkJCA9ICQxOworICB9CisgIDsKKwordmFsaWRhdGVkX2JveF9zaGFkb3dfbGlzdDoKKyAgICBib3hfc2hhZG93X2xpc3QgeworICAgIHNjb3BlZF9wdHI8U2hhZG93UHJvcGVydHlJbmZvPiBzaGFkb3dfcHJvcGVydHlfaW5mbygkMSk7CisgICAgaWYgKCFzaGFkb3dfcHJvcGVydHlfaW5mby0+SXNTaGFkb3dQcm9wZXJ0eVZhbGlkKGtCb3hTaGFkb3cpKSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgYm94IHNoYWRvdyBwcm9wZXJ0eS4iKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpTaGFkb3dWYWx1ZSgKKyAgICAgICAgICAgICAgc2hhZG93X3Byb3BlcnR5X2luZm8tPmxlbmd0aF92ZWN0b3IsIHNoYWRvd19wcm9wZXJ0eV9pbmZvLT5jb2xvciwKKyAgICAgICAgICAgICAgc2hhZG93X3Byb3BlcnR5X2luZm8tPmhhc19pbnNldCkpOworICAgIH0KKyAgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF9ib3hfc2hhZG93X2xpc3Q6CisgICAgdmFsaWRhdGVkX2JveF9zaGFkb3dfbGlzdCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gc2hhZG93ID0gTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIGlmIChzaGFkb3cpIHsKKyAgICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICAgJCQtPnB1c2hfYmFjayhzaGFkb3cpOworICAgIH0KKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF9ib3hfc2hhZG93X2xpc3QgY29tbWEgdmFsaWRhdGVkX2JveF9zaGFkb3dfbGlzdCB7CisgICAgJCQgPSAkMTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBzaGFkb3cgPSBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgaWYgKCQkICYmIHNoYWRvdykgeworICAgICAgJCQtPnB1c2hfYmFjayhzaGFkb3cpOworICAgIH0KKyAgfQorICA7CisKKy8vIFRoZSAnYm94LXNoYWRvdycgcHJvcGVydHkgYXR0YWNoZXMgb25lIG9yIG1vcmUgZHJvcC1zaGFkb3dzIHRvIHRoZSBib3guCisvLyBUaGUgcHJvcGVydHkgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzaGFkb3dzLCBvcmRlcmVkIGZyb250IHRvIGJhY2suCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI2JveC1zaGFkb3cKK2JveF9zaGFkb3dfcHJvcGVydHlfdmFsdWU6CisgICAgY29tbWFfc2VwYXJhdGVkX2JveF9zaGFkb3dfbGlzdCB7CisgICAgaWYgKCQxKSB7CisgICAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoJDEpOworICAgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKTsKKyAgICB9CisgIH0KKyAgfCBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gRm9yZWdyb3VuZCBjb2xvciBvZiBhbiBlbGVtZW50J3MgdGV4dCBjb250ZW50LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jZm9yZWdyb3VuZAorY29sb3JfcHJvcGVydHlfdmFsdWU6CisgICAgY29sb3IgeyAkJCA9ICQxOyB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFVzZWQgdG8gYWRkIGdlbmVyYXRlZCBjb250ZW50IHdpdGggYSA6YmVmb3JlIG9yIDphZnRlciBwc2V1ZG8tZWxlbWVudC4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL2dlbmVyYXRlLmh0bWwjY29udGVudAorY29udGVudF9wcm9wZXJ0eV92YWx1ZToKKyAgICBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrTm9ybWFsVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9ybWFsKCkuZ2V0KCkpOworICB9CisgIHwgdXJsIHsgJCQgPSAkMTsgfQorICB8IGtTdHJpbmdUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlN0cmluZ1ZhbHVlKCQxLlRvU3RyaW5nKCkpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKzsKKworLy8gQ29udHJvbHMgdGhlIGdlbmVyYXRpb24gb2YgYm94ZXMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1cmVuLmh0bWwjZGlzcGxheS1wcm9wCitkaXNwbGF5X3Byb3BlcnR5X3ZhbHVlOgorICAgIGtCbG9ja1Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEJsb2NrKCkuZ2V0KCkpOworICB9CisgIHwga0lubGluZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldElubGluZSgpLmdldCgpKTsKKyAgfQorICB8IGtJbmxpbmVCbG9ja1Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldElubGluZUJsb2NrKCkuZ2V0KCkpOworICB9CisgIHwga05vbmVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXROb25lKCkuZ2V0KCkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIEV4dGVybmFsIGZvbnQtZmFjZSByZWZlcmVuY2VzIGNvbnNpc3Qgb2YgYSBVUkwsIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsCisvLyBoaW50IGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBvZiB0aGUgZm9udCByZXNvdXJjZSByZWZlcmVuY2VkIGJ5IHRoYXQgVVJMLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZGVzY2RlZi1zcmMKK2ZvbnRfZmFjZV91cmxfc3JjOgorICAgIHVybCBrRm9ybWF0RnVuY3Rpb25Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGtTdHJpbmdUb2tlbiBtYXliZV93aGl0ZXNwYWNlICcpJworICAgICAgICBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlVybFNyY1ZhbHVlKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0LlRvU3RyaW5nKCkpKTsKKyAgfQorICB8IHVybCB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpVcmxTcmNWYWx1ZShNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSksICIiKSk7CisgIH0KKyAgOworCisvLyBUaGUgc3ludGF4IGZvciBhIGxvY2FsIGZvbnQtZmFjZSByZWZlcmVuY2UgaXMgYSB1bmlxdWUgZm9udCBmYWNlIG5hbWUKKy8vIGVuY2xvc2VkIGJ5ICJsb2NhbCgiIGFuZCAiKSIuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNkZXNjZGVmLXNyYworZm9udF9mYWNlX2xvY2FsX3NyYzoKKyAgICBrTG9jYWxGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgZm9udF9mYW1pbHlfc3BlY2lmaWNfbmFtZSAnKScKKyAgICAgICAgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpMb2NhbFNyY1ZhbHVlKCQzLT52YWx1ZSgpKSk7CisgICAgJDMtPlJlbGVhc2UoKTsKKyAgfQorICA7CisKK2ZvbnRfZmFjZV9zcmNfbGlzdF9lbGVtZW50OgorICAgIGZvbnRfZmFjZV91cmxfc3JjCisgIHwgZm9udF9mYWNlX2xvY2FsX3NyYworICA7CisKK2NvbW1hX3NlcGFyYXRlZF9mb250X2ZhY2Vfc3JjX2xpc3Q6CisgICAgZm9udF9mYWNlX3NyY19saXN0X2VsZW1lbnQgeworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF9mb250X2ZhY2Vfc3JjX2xpc3QgY29tbWEgZm9udF9mYWNlX3NyY19saXN0X2VsZW1lbnQgeworICAgICQkID0gJDE7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICB9CisgIDsKKworLy8gVGhlIHNyYyBkZXNjcmlwdG9yIHNwZWNpZmllcyB0aGUgcmVzb3VyY2UgY29udGFpbmluZyBmb250IGRhdGEuIEl0cyB2YWx1ZSBpcworLy8gYSBwcmlvcml0aXplZCwgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXh0ZXJuYWwgcmVmZXJlbmNlcyBvcgorLy8gbG9jYWxseS1pbnN0YWxsZWQgZm9udCBmYWNlIG5hbWVzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jc3JjLWRlc2MKK2ZvbnRfZmFjZV9zcmNfcHJvcGVydHlfdmFsdWU6CisgICAgY29tbWFfc2VwYXJhdGVkX2ZvbnRfZmFjZV9zcmNfbGlzdCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKCQxKTsKKyAgICAkJCA9IHByb3BlcnR5X3ZhbHVlCisgICAgICAgICA/IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpCisgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gVGhlIHVucXVvdGVkIG5hbWUgbXVzdCBiZSBhIHNlcXVlbmNlIG9mIGlkZW50aWZpZXJzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlCisvLyB3aGljaCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgYnkgam9pbmluZyB0aGUgaWRlbnRpZmllcnMgdG9nZXRoZXIgc2VwYXJhdGVkCisvLyBieSBhIHNpbmdsZSBzcGFjZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2Rlc2NkZWYtc3JjCitmb250X2ZhbWlseV9uYW1lX2lkZW50aWZpZXJfbGlzdDoKKyAgICBpZGVudGlmaWVyX3Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6U3RyaW5nVmFsdWUoJDEuVG9TdHJpbmcoKSkpOworICB9CisgIHwgZm9udF9mYW1pbHlfbmFtZV9pZGVudGlmaWVyX2xpc3QgaWRlbnRpZmllcl90b2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlN0cmluZ1ZhbHVlKCQxLT52YWx1ZSgpICsgIiAiICsgJDIuVG9TdHJpbmcoKSkpOworICAgICQxLT5SZWxlYXNlKCk7CisgIH0KKyAgOworCitmb250X2ZhbWlseV9zdHJpbmdfbmFtZToKKyAgICBrU3RyaW5nVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpTdHJpbmdWYWx1ZSgkMS5Ub1N0cmluZygpKSk7CisgIH0KKyAgOworCisvLyBGb250IGZhbWlseSBuYW1lcyBvdGhlciB0aGFuIGdlbmVyaWMgZmFtaWxpZXMgbXVzdCBiZSBxdW90ZWQKKy8vIGFzIHN0cmluZ3Mgb3IgdW5xdW90ZWQgYXMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBpZGVudGlmaWVycy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2ZhbWlseS1uYW1lLXZhbHVlCitmb250X2ZhbWlseV9zcGVjaWZpY19uYW1lOgorICAgIGZvbnRfZmFtaWx5X25hbWVfaWRlbnRpZmllcl9saXN0CisgIHwgZm9udF9mYW1pbHlfc3RyaW5nX25hbWUKKyAgOworCisvLyBTcGVjaWZpYyBmb250IG5hbWUgdGhhdCBkb2VzIG5vdCBhY2NlcHQgYSBzaW5nbGUgaWRlbnRpZmllci4gVGhpcyBpcyBuZWVkZWQKKy8vIGluIGNlcnRhaW4gY2FzZXMgdG8gYXZvaWQgYW1iaWd1b3VzIHN0YXRlcywgc2luY2Ugc2luZ2xlIGlkZW50aWZpZXIgbmFtZXMKKy8vIHJlcXVpcmUgc3BlY2lhbCBydWxlcyBmb3Iga2V5d29yZHMuCitmb250X2ZhbWlseV9zcGVjaWZpY19uYW1lX25vX3NpbmdsZV9pZGVudGlmaWVyOgorICAgIGZvbnRfZmFtaWx5X25hbWVfaWRlbnRpZmllcl9saXN0IGlkZW50aWZpZXJfdG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpTdHJpbmdWYWx1ZSgkMS0+dmFsdWUoKSArICIgIiArICQyLlRvU3RyaW5nKCkpKTsKKyAgICAkMS0+UmVsZWFzZSgpOworICB9CisgIHwgZm9udF9mYW1pbHlfc3RyaW5nX25hbWUKKyAgOworCisvLyBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGZvbnQgZmFtaWx5IG5hbWVzOgorLy8gICAtLSBUaGUgbmFtZSBvZiBhIHNwZWNpZmljIGZvbnQgZmFtaWx5CisvLyAgIC0tIEEgZ2VuZXJpYyBmb250IGZhbWlseSB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwgZmFsbGJhY2sgbWVjaGFuaXNtCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmYW1pbHktbmFtZS12YWx1ZQorZm9udF9mYW1pbHlfbmFtZToKKyAgICBpZGVudGlmaWVyX3Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgIC8vIEdlbmVyaWMgZmFtaWxpZXMgYXJlIGRlZmluZWQgaW4gYWxsIENTUyBpbXBsZW1lbnRhdGlvbnMuCisgICAgLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZ2VuZXJpYy1mb250LWZhbWlsaWVzCisgICAgaWYgKCQxID09IGNzc29tOjprQ3Vyc2l2ZUtleXdvcmROYW1lKSB7CisgICAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRDdXJzaXZlKCkuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAoJDEgPT0gY3Nzb206OmtGYW50YXN5S2V5d29yZE5hbWUpIHsKKyAgICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEZhbnRhc3koKS5nZXQoKSk7CisgICAgfSBlbHNlIGlmICgkMSA9PSBjc3NvbTo6a01vbm9zcGFjZUtleXdvcmROYW1lKSB7CisgICAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRNb25vc3BhY2UoKS5nZXQoKSk7CisgICAgfSBlbHNlIGlmICgkMSA9PSBjc3NvbTo6a1NhbnNTZXJpZktleXdvcmROYW1lKSB7CisgICAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRTYW5zU2VyaWYoKS5nZXQoKSk7CisgICAgfSBlbHNlIGlmICgkMSA9PSBjc3NvbTo6a1NlcmlmS2V5d29yZE5hbWUpIHsKKyAgICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFNlcmlmKCkuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlN0cmluZ1ZhbHVlKCQxLlRvU3RyaW5nKCkpKTsKKyAgICB9CisgIH0KKyAgfCBmb250X2ZhbWlseV9zcGVjaWZpY19uYW1lX25vX3NpbmdsZV9pZGVudGlmaWVyIHsgJCQgPSAkMTsgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF9mb250X2ZhbWlseV9uYW1lX2xpc3Q6CisgICAgZm9udF9mYW1pbHlfbmFtZSB7CisgICAgJCQgPSBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCk7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX2ZvbnRfZmFtaWx5X25hbWVfbGlzdCBjb21tYSBmb250X2ZhbWlseV9uYW1lIHsKKyAgICAkJCA9ICQxOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDMpKTsKKyAgfQorICA7CisKKy8vIFByaW9yaXRpemVkIGxpc3Qgb2YgZm9udCBmYW1pbHkgbmFtZXMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LWZhbWlseS1wcm9wCitmb250X2ZhbWlseV9wcm9wZXJ0eV92YWx1ZToKKyAgLy8gU3BlY2lhbCBjYXNlIGZvciBhIHNpbmdsZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgYSByZXNlcnZlZCBrZXl3b3JkIG9yCisgIC8vIGEgZ2VuZXJpYyBmb250IG5hbWUuCisgICAgaWRlbnRpZmllcl90b2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAvLyAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiBhcmUgcmVzZXJ2ZWQgdmFsdWVzIGFuZCBub3QgYWxsb3dlZCBhcyBmb250CisgICAgLy8gZmFtaWx5IG5hbWVzLgorICAgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI3Byb3BkZWYtZm9udC1mYW1pbHkKKyAgICBpZiAoJDEgPT0gY3Nzb206OmtJbmhlcml0S2V5d29yZE5hbWUpIHsKKyAgICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEluaGVyaXQoKS5nZXQoKSk7CisgICAgfSBlbHNlIGlmICgkMSA9PSBjc3NvbTo6a0luaXRpYWxLZXl3b3JkTmFtZSkgeworICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0SW5pdGlhbCgpLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+CisgICAgICAgICAgYnVpbGRlcihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCkpOworCisgICAgICAvLyBHZW5lcmljIGZhbWlsaWVzIGFyZSBkZWZpbmVkIGluIGFsbCBDU1MgaW1wbGVtZW50YXRpb25zLgorICAgICAgLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZ2VuZXJpYy1mb250LWZhbWlsaWVzCisgICAgICBpZiAoJDEgPT0gY3Nzb206OmtDdXJzaXZlS2V5d29yZE5hbWUpIHsKKyAgICAgICAgYnVpbGRlci0+cHVzaF9iYWNrKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEN1cnNpdmUoKS5nZXQoKSk7CisgICAgICB9IGVsc2UgaWYgKCQxID09IGNzc29tOjprRmFudGFzeUtleXdvcmROYW1lKSB7CisgICAgICAgIGJ1aWxkZXItPnB1c2hfYmFjayhjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRGYW50YXN5KCkuZ2V0KCkpOworICAgICAgfSBlbHNlIGlmICgkMSA9PSBjc3NvbTo6a01vbm9zcGFjZUtleXdvcmROYW1lKSB7CisgICAgICAgIGJ1aWxkZXItPnB1c2hfYmFjayhjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRNb25vc3BhY2UoKS5nZXQoKSk7CisgICAgICB9IGVsc2UgaWYgKCQxID09IGNzc29tOjprU2Fuc1NlcmlmS2V5d29yZE5hbWUpIHsKKyAgICAgICAgYnVpbGRlci0+cHVzaF9iYWNrKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFNhbnNTZXJpZigpLmdldCgpKTsKKyAgICAgIH0gZWxzZSBpZiAoJDEgPT0gY3Nzb206OmtTZXJpZktleXdvcmROYW1lKSB7CisgICAgICAgIGJ1aWxkZXItPnB1c2hfYmFjayhjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRTZXJpZigpLmdldCgpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXItPnB1c2hfYmFjayhuZXcgY3Nzb206OlN0cmluZ1ZhbHVlKCQxLlRvU3RyaW5nKCkpKTsKKyAgICAgIH0KKworICAgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShidWlsZGVyLlBhc3MoKSkpOworICAgIH0KKyAgfQorICB8IGZvbnRfZmFtaWx5X3NwZWNpZmljX25hbWVfbm9fc2luZ2xlX2lkZW50aWZpZXIgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPgorICAgICAgICBidWlsZGVyKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgYnVpbGRlci0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShidWlsZGVyLlBhc3MoKSkpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX2ZvbnRfZmFtaWx5X25hbWVfbGlzdCBjb21tYSBmb250X2ZhbWlseV9uYW1lIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gYnVpbGRlcigkMSk7CisgICAgYnVpbGRlci0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSk7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShidWlsZGVyLlBhc3MoKSkpOworICB9CisgIHwgZXJyb3JzIHsKKyAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoQDEsICJ1bnN1cHBvcnRlZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgZm9udC1mYW1pbHkiKTsKKyAgICAkJCA9IE5VTEw7CisgIH0KKyAgOworCisvLyBEZXNpcmVkIGhlaWdodCBvZiBnbHlwaHMgZnJvbSB0aGUgZm9udC4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2ZvbnQtc2l6ZS1wcm9wCitmb250X3NpemVfcHJvcGVydHlfdmFsdWU6CisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gQWxsIGFjY2VwdGFibGUgJ2ZvbnQtc3R5bGUnIHByb3BlcnR5IHZhbHVlcywgZXhjbHVkaW5nICdub3JtYWwnLCAnaW5oZXJpdCcKKy8vIGFuZCAnaW5pdGlhbCcuCitmb250X3N0eWxlX2V4Y2x1c2l2ZV9wcm9wZXJ0eV92YWx1ZToKKyAgICBrSXRhbGljVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRTdHlsZVZhbHVlOjpHZXRJdGFsaWMoKS5nZXQoKSk7CisgIH0KKyAgfCBrT2JsaXF1ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpGb250U3R5bGVWYWx1ZTo6R2V0T2JsaXF1ZSgpLmdldCgpKTsKKyAgfQorICA7CisKKy8vIFRoZSAnZm9udC1zdHlsZScgcHJvcGVydHkgYWxsb3dzIGl0YWxpYyBvciBvYmxpcXVlIGZhY2VzIHRvIGJlIHNlbGVjdGVkLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9udC1zdHlsZS1wcm9wCitmb250X3N0eWxlX3Byb3BlcnR5X3ZhbHVlOgorICAgIGZvbnRfc3R5bGVfZXhjbHVzaXZlX3Byb3BlcnR5X3ZhbHVlCisgIHwga05vcm1hbFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpGb250U3R5bGVWYWx1ZTo6R2V0Tm9ybWFsKCkuZ2V0KCkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIEFsbCBhY2NlcHRhYmxlICdmb250LXdlaWdodCcgcHJvcGVydHkgdmFsdWVzLCBleGNsdWRpbmcgJ25vcm1hbCcsICdpbmhlcml0JworLy8gYW5kICdpbml0aWFsJy4KK2ZvbnRfd2VpZ2h0X2V4Y2x1c2l2ZV9wcm9wZXJ0eV92YWx1ZToKKyAgICBrQm9sZFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpGb250V2VpZ2h0VmFsdWU6OkdldEJvbGRBa2E3MDAoKS5nZXQoKSk7CisgIH0KKyAgfCBwb3NpdGl2ZV9pbnRlZ2VyIHsKKyAgICBzd2l0Y2ggKCQxKSB7CisgICAgICBjYXNlIDEwMDoKKyAgICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRXZWlnaHRWYWx1ZTo6R2V0VGhpbkFrYTEwMCgpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDIwMDoKKyAgICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRXZWlnaHRWYWx1ZTo6R2V0RXh0cmFMaWdodEFrYTIwMCgpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDMwMDoKKyAgICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRXZWlnaHRWYWx1ZTo6R2V0TGlnaHRBa2EzMDAoKS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA0MDA6CisgICAgICAgICQkID0gQWRkUmVmKGNzc29tOjpGb250V2VpZ2h0VmFsdWU6OkdldE5vcm1hbEFrYTQwMCgpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDUwMDoKKyAgICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRXZWlnaHRWYWx1ZTo6R2V0TWVkaXVtQWthNTAwKCkuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNjAwOgorICAgICAgICAkJCA9IEFkZFJlZihjc3NvbTo6Rm9udFdlaWdodFZhbHVlOjpHZXRTZW1pQm9sZEFrYTYwMCgpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDcwMDoKKyAgICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRXZWlnaHRWYWx1ZTo6R2V0Qm9sZEFrYTcwMCgpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDgwMDoKKyAgICAgICAgJCQgPSBBZGRSZWYoY3Nzb206OkZvbnRXZWlnaHRWYWx1ZTo6R2V0RXh0cmFCb2xkQWthODAwKCkuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgOTAwOgorICAgICAgICAkJCA9IEFkZFJlZihjc3NvbTo6Rm9udFdlaWdodFZhbHVlOjpHZXRCbGFja0FrYTkwMCgpLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoQDEsICJ1bnN1cHBvcnRlZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgZm9udC13ZWlnaHQiKTsKKyAgICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICA7CisKKy8vIFRoZSB3ZWlnaHQgb2YgZ2x5cGhzIGluIHRoZSBmb250LCB0aGVpciBkZWdyZWUgb2YgYmxhY2tuZXNzCisvLyBvciBzdHJva2UgdGhpY2tuZXNzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9udC13ZWlnaHQtcHJvcAorZm9udF93ZWlnaHRfcHJvcGVydHlfdmFsdWU6CisgICAgZm9udF93ZWlnaHRfZXhjbHVzaXZlX3Byb3BlcnR5X3ZhbHVlCisgIHwga05vcm1hbFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpGb250V2VpZ2h0VmFsdWU6OkdldE5vcm1hbEFrYTQwMCgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBPcHRpb25hbCBmb250IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNpbmdsZSBvcHRpb25hbCBmb250IHNob3J0aGFuZCB2YWx1ZS4KKy8vIEl0IHVzZXMgJDAgdG8gYWNjZXNzIGl0cyBwYXJlbnQncyBGb250U2hvcnRoYW5kIG9iamVjdCBhbmQgYnVpbGQgaXQsIHNvIGl0CisvLyBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdGhlIHJpZ2h0IG9mIGFuIG9wdGlvbmFsX2ZvbnRfdmFsdWVfbGlzdC4gTm90ZSB0aGF0CisvLyBvdXRzaWRlIG9mIGJlaW5nIHNldCB2aWEgdGhlIHNlY29uZCBub3JtYWwgdG9rZW4sIGZvbnQgd2VpZ2h0LCB3aGlsZQorLy8gb3B0aW9uYWwsIGlzIGhhbmRsZWQgc2VwYXJhdGVseS4gVGhpcyBpcyBkdWUgdG8gQmlzb24gaGF2aW5nIHBhcnNpbmcKKy8vIGNvbmZsaWN0cyB3aXRoIGRpZmZlcmVudGlhdGluZyBhIG51bWJlciAod2hpY2ggaXMgYW4gYWxsb3dhYmxlIGZvbnQgd2VpZ2h0CisvLyB2YWx1ZSkgZm9sbG93ZWQgYnkgYSB0b2tlbiBhcyBlaXRoZXIgdHdvIG9wdGlvbmFsIGZvbnQgZWxlbWVudHMgb3IgdGhlIGZvbnQKKy8vIHNpemUgZm9sbG93ZWQgYnkgdGhlIGZvbnQgZmFtaWx5LiBBcyBhIHJlc3VsdCwgdGhlIHJlY29tbWVuZGVkIG9yZGVyaW5nIGlzCisvLyByZXF1aXJlZCBhbmQgZm9udCB3ZWlnaHQgbXVzdCBjb21lIGFmdGVyIGZvbnQgc3R5bGUuCitvcHRpb25hbF9mb250X2VsZW1lbnQ6CisgICAgZm9udF9zdHlsZV9leGNsdXNpdmVfcHJvcGVydHlfdmFsdWUgeworICAgIGlmICghJDxmb250PjAtPmZvbnRfc3R5bGUpIHsKKyAgICAgICQ8Zm9udD4wLT5mb250X3N0eWxlID0gTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZygKKyAgICAgICAgICBAMSwgImZvbnQtc3R5bGUgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gZm9udC4iKTsKKyAgICB9CisgIH0KKyAgfCBrTm9ybWFsVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgLy8gVGhlIG5vcm1hbCB0b2tlbiBpcyB0cmVhdGVkIGFzIHJlcHJlc2VudGluZyBmb250IHN0eWxlIGlmIGl0IGlzCisgICAgLy8gZW5jb3VudGVyZWQgYmVmb3JlIHRoZSBzdHlsZSBpcyBzZXQuIE90aGVyd2lzZSwgaXQgaXMgdHJlYXRlZCBhcyB0aGUKKyAgICAvLyBmb250IHdlaWdodC4KKyAgICBpZiAoISQ8Zm9udD4wLT5mb250X3N0eWxlKSB7CisgICAgICAkPGZvbnQ+MC0+Zm9udF9zdHlsZSA9CisgICAgICAgIEFkZFJlZihjc3NvbTo6Rm9udFN0eWxlVmFsdWU6OkdldE5vcm1hbCgpLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKCEkPGZvbnQ+MC0+Zm9udF93ZWlnaHQpIHsKKyAgICAgICQ8Zm9udD4wLT5mb250X3dlaWdodCA9CisgICAgICAgIEFkZFJlZihjc3NvbTo6Rm9udFdlaWdodFZhbHVlOjpHZXROb3JtYWxBa2E0MDAoKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICBAMSwgInRvbyBtYW55IGZvbnQgdmFsdWVzIGRlY2xhcmVkIGluIGZvbnQuIik7CisgICAgfQorICB9CisgIHwgZXJyb3IgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAidW5zdXBwb3J0ZWQgcHJvcGVydHkgdmFsdWUgZm9yIGZvbnQiKTsKKyAgICAkPGZvbnQ+MC0+ZXJyb3IgPSB0cnVlOworICB9CisgIDsKKworb3B0aW9uYWxfZm9udF92YWx1ZV9saXN0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAvLyBJbml0aWFsaXplIHRoZSByZXN1bHQsIHRvIGJlIGZpbGxlZCBpbiBieQorICAgIC8vIG5vbl9lbXB0eV9vcHRpb25hbF9mb250X3ZhbHVlX2xpc3QKKyAgICAkJCA9IG5ldyBGb250U2hvcnRoYW5kKCk7CisgIH0KKyAgfCBub25fZW1wdHlfb3B0aW9uYWxfZm9udF92YWx1ZV9saXN0CisgIDsKKworbm9uX2VtcHR5X29wdGlvbmFsX2ZvbnRfdmFsdWVfbGlzdDoKKyAgICBvcHRpb25hbF9mb250X3ZhbHVlX2xpc3Qgb3B0aW9uYWxfZm9udF9lbGVtZW50IHsKKyAgICAvLyBQcm9wYWdhdGUgdGhlIGxpc3QgZnJvbSBvdXIgcGFyZW50LgorICAgIC8vIG9wdGlvbmFsX2ZvbnRfZWxlbWVudCB3aWxsIGhhdmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGFkZGluZyBpdHNlbGYKKyAgICAvLyB0byB0aGUgbGlzdCB2aWEgJDAuCisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKKy8vIEZvbnQgc2hvcnRoYW5kIHByb3BlcnR5LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9udC1wcm9wCitmb250X3Byb3BlcnR5X3ZhbHVlOgorICAgIG9wdGlvbmFsX2ZvbnRfdmFsdWVfbGlzdCBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICBjb21tYV9zZXBhcmF0ZWRfZm9udF9mYW1pbHlfbmFtZV9saXN0IHsKKyAgICAvLyBGb250IHNob3J0aGFuZCBwcm9wZXJ0aWVzIHdpdGhvdXQgYSBub24tbm9ybWFsIHdlaWdodCB2YWx1ZS4KKyAgICBzY29wZWRfcHRyPEZvbnRTaG9ydGhhbmQ+IGZvbnQoJDEpOworCisgICAgZm9udC0+Zm9udF9zaXplID0gTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpOworCisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IGJ1aWxkZXIoJDMpOworICAgIGZvbnQtPmZvbnRfZmFtaWx5ID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShidWlsZGVyLlBhc3MoKSk7CisKKyAgICAkJCA9IGZvbnQucmVsZWFzZSgpOworICB9CisgIHwgb3B0aW9uYWxfZm9udF92YWx1ZV9saXN0IGZvbnRfd2VpZ2h0X2V4Y2x1c2l2ZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZQorICAgICAgICBjb21tYV9zZXBhcmF0ZWRfZm9udF9mYW1pbHlfbmFtZV9saXN0IHsKKyAgICAvLyBGb250IHNob3J0aGFuZCBwcm9wZXJ0aWVzIHdpdGggYSBub24tbm9ybWFsIHdlaWdodCB2YWx1ZS4gVGhpcyBhbmQgdGhlCisgICAgLy8gcHJlY2VkaW5nIHdpdGhvdXQgZXhwcmVzc2lvbiBhcmUgbm90IHNpbXBseSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlCisgICAgLy8gbWF5YmVfZm9udF93ZWlnaHRfZXhjbHVzaXZlX3Byb3BlcnR5X3ZhbHVlIGFzIGEgcmVzdWx0IG9mIEJpc29uIGhhdmluZworICAgIC8vIHBhcnNpbmcgY29uZmxpY3RzIHdoZW4gdGhlIHdlaWdodCB2YWx1ZSBhcHBlYXJzIGluIHRoYXQgZm9ybS4KKyAgICBzY29wZWRfcHRyPEZvbnRTaG9ydGhhbmQ+IGZvbnQoJDEpOworCisgICAgaWYgKCFmb250LT5mb250X3dlaWdodCkgeworICAgICAgZm9udC0+Zm9udF93ZWlnaHQgPSBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMik7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICAgIEAxLCAiZm9udC13ZWlnaHQgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gZm9udC4iKTsKKyAgICB9CisKKyAgICBmb250LT5mb250X3NpemUgPSBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gYnVpbGRlcigkNCk7CisgICAgZm9udC0+Zm9udF9mYW1pbHkgPSBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKGJ1aWxkZXIuUGFzcygpKTsKKworICAgICQkID0gZm9udC5yZWxlYXNlKCk7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzX3dpdGhvdXRfZXJyb3JzIHsKKyAgICAvLyBSZXBsaWNhdGUgdGhlIGNvbW1vbiB2YWx1ZSBpbnRvIGVhY2ggb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBmb250CisgICAgLy8gaXMgYSBzaG9ydGhhbmQgZm9yLgorICAgIHNjb3BlZF9wdHI8Rm9udFNob3J0aGFuZD4gZm9udChuZXcgRm9udFNob3J0aGFuZCgpKTsKKyAgICBmb250LT5mb250X3N0eWxlID0gJDE7CisgICAgZm9udC0+Zm9udF93ZWlnaHQgPSAkMTsKKyAgICBmb250LT5mb250X3NpemUgPSAkMTsKKyAgICBmb250LT5mb250X2ZhbWlseSA9ICQxOworICAgICQxLT5SZWxlYXNlKCk7CisKKyAgICAkJCA9IGZvbnQucmVsZWFzZSgpOworICB9CisgIDsKKworLy8gU3BlY2lmaWVzIHRoZSBjb250ZW50IGhlaWdodCBvZiBib3hlcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCN0aGUtaGVpZ2h0LXByb3BlcnR5CitoZWlnaHRfcHJvcGVydHlfdmFsdWU6CisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBhdXRvCisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFNwZWNpZmllcyB0aGUgbWluaW11bSBjb250ZW50IGhlaWdodCBvZiBib3hlcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCNwcm9wZGVmLW1pbi1oZWlnaHQKK21pbl9oZWlnaHRfcHJvcGVydHlfdmFsdWU6CisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGNvbnRlbnQgaGVpZ2h0IG9mIGJveGVzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMi92aXN1ZGV0Lmh0bWwjcHJvcGRlZi1tYXgtaGVpZ2h0CittYXhfaGVpZ2h0X3Byb3BlcnR5X3ZhbHVlOgorICAgIGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpLmdldCgpKTsKKyAgfQorICB8IHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlCisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKworLy8gU3BlY2lmaWVzIHRoZSBtaW5pbWFsIGhlaWdodCBvZiBsaW5lIGJveGVzIHdpdGhpbiB0aGUgZWxlbWVudC4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCNsaW5lLWhlaWdodAorbGluZV9oZWlnaHRfcHJvcGVydHlfdmFsdWU6CisgICAga05vcm1hbFRva2VuIG1heWJlX3doaXRlc3BhY2UgIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXROb3JtYWwoKS5nZXQoKSk7CisgIH0KKyAgfCBub25fbmVnYXRpdmVfbnVtYmVyIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok51bWJlclZhbHVlKCQxKSk7CisgIH0KKyAgfCBhYnNvbHV0ZV9vcl9yZWxhdGl2ZV9sZW5ndGggeworICAgICQkID0gJDE7CisgIH0KKyAgfCBwb3NpdGl2ZV9wZXJjZW50YWdlIHsKKyAgICAkJCA9ICQxOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIDxtYXJnaW4td2lkdGg+IHZhbHVlIHR5cGUuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCN2YWx1ZS1kZWYtbWFyZ2luLXdpZHRoCittYXJnaW5fd2lkdGg6CisgICAgbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBhdXRvCisgIDsKKworLy8gU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiBhIHRvcCwgcmlnaHQsIGJvdHRvbSwgb3IgbGVmdCBzaWRlIG9mIHRoZSBtYXJnaW4gYXJlYQorLy8gb2YgYSBib3guCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCNtYXJnaW4tcHJvcGVydGllcworbWFyZ2luX3NpZGVfcHJvcGVydHlfdmFsdWU6CisgICAgbWFyZ2luX3dpZHRoCisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFRoZSAibWFyZ2luIiBwcm9wZXJ0eSBpcyBhIHNob3J0aGFuZCBwcm9wZXJ0eSBmb3Igc2V0dGluZyAibWFyZ2luLXRvcCIsCisvLyAibWFyZ2luLXJpZ2h0IiwgIm1hcmdpbi1ib3R0b20iLCBhbmQgIm1hcmdpbi1sZWZ0IiBhdCB0aGUgc2FtZSBwbGFjZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL2JveC5odG1sI21hcmdpbi1wcm9wZXJ0aWVzCittYXJnaW5fcHJvcGVydHlfdmFsdWU6CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgY29tcG9uZW50IHZhbHVlLCBpdCBhcHBsaWVzIHRvIGFsbCBzaWRlcy4KKyAgICBtYXJnaW5fd2lkdGggeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IHdpZHRoKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgICAgJCQgPSBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ6OlRyeUNyZWF0ZSgKKyAgICAgICAgd2lkdGgsIHdpZHRoLCB3aWR0aCwgd2lkdGgpLnJlbGVhc2UoKTsKKyAgfQorICAgIC8vIElmIHRoZXJlIGFyZSB0d28gdmFsdWVzLCB0aGUgdG9wIGFuZCBib3R0b20gbWFyZ2lucyBhcmUgc2V0IHRvIHRoZSBmaXJzdAorICAgIC8vIHZhbHVlIGFuZCB0aGUgcmlnaHQgYW5kIGxlZnQgbWFyZ2lucyBhcmUgc2V0IHRvIHRoZSBzZWNvbmQuCisgIHwgbWFyZ2luX3dpZHRoIG1hcmdpbl93aWR0aCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gdmVydGljYWxfd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSk7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gaG9yaXpvbnRhbF93aWR0aCA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKTsKKyAgICAkJCA9IE1hcmdpbk9yUGFkZGluZ1Nob3J0aGFuZDo6VHJ5Q3JlYXRlKAorICAgICAgICAgICAgIHZlcnRpY2FsX3dpZHRoLCBob3Jpem9udGFsX3dpZHRoLAorICAgICAgICAgICAgIHZlcnRpY2FsX3dpZHRoLCBob3Jpem9udGFsX3dpZHRoKS5yZWxlYXNlKCk7CisgIH0KKyAgICAvLyBJZiB0aGVyZSBhcmUgdGhyZWUgdmFsdWVzLCB0aGUgdG9wIGlzIHNldCB0byB0aGUgZmlyc3QgdmFsdWUsIHRoZSBsZWZ0CisgICAgLy8gYW5kIHJpZ2h0IGFyZSBzZXQgdG8gdGhlIHNlY29uZCwgYW5kIHRoZSBib3R0b20gaXMgc2V0IHRvIHRoZSB0aGlyZC4KKyAgfCBtYXJnaW5fd2lkdGggbWFyZ2luX3dpZHRoIG1hcmdpbl93aWR0aCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gdG9wX3dpZHRoID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IGhvcml6b250YWxfd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMik7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gYm90dG9tX3dpZHRoID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDMpOworICAgICQkID0gTWFyZ2luT3JQYWRkaW5nU2hvcnRoYW5kOjpUcnlDcmVhdGUoCisgICAgICAgICAgICAgdG9wX3dpZHRoLCBob3Jpem9udGFsX3dpZHRoLAorICAgICAgICAgICAgIGJvdHRvbV93aWR0aCwgaG9yaXpvbnRhbF93aWR0aCkucmVsZWFzZSgpOworICB9CisgICAgLy8gSWYgdGhlcmUgYXJlIGZvdXIgdmFsdWVzLCB0aGV5IGFwcGx5IHRvIHRoZSB0b3AsIHJpZ2h0LCBib3R0b20sIGFuZCBsZWZ0LAorICAgIC8vIHJlc3BlY3RpdmVseS4KKyAgfCBtYXJnaW5fd2lkdGggbWFyZ2luX3dpZHRoIG1hcmdpbl93aWR0aCBtYXJnaW5fd2lkdGggeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IHRvcF93aWR0aCA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBsZWZ0X3dpZHRoID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpOworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IGJvdHRvbV93aWR0aCA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiByaWdodF93aWR0aCA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KTsKKyAgICAkJCA9IE1hcmdpbk9yUGFkZGluZ1Nob3J0aGFuZDo6VHJ5Q3JlYXRlKAorICAgICAgICAgICAgIHRvcF93aWR0aCwgbGVmdF93aWR0aCwgYm90dG9tX3dpZHRoLCByaWdodF93aWR0aCkucmVsZWFzZSgpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcyB7CisgICAgJCQgPSBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ6OlRyeUNyZWF0ZSgkMSwgJDEsICQxLCAkMSkucmVsZWFzZSgpOworICB9CisgIDsKKworLy8gU3BlY2lmaWVzIHRvcCwgcmlnaHQsIGJvdHRvbSwgb3IgbGVmdCBvZmZzZXQgb2YgdGhlIGJveCByZWxhdGl2ZWx5CisvLyB0byB0aGUgY29udGFpbmVyIGJsb2NrLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvdmlzdXJlbi5odG1sI3Bvc2l0aW9uLXByb3BzCitvZmZzZXRfcHJvcGVydHlfdmFsdWU6CisgICAgbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBhdXRvCisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFNwZWNpZmllcyBob3cgdG8gYmxlbmQgdGhlIGVsZW1lbnQgKGluY2x1ZGluZyBpdHMgZGVzY2VuZGFudHMpCisvLyBpbnRvIHRoZSBjdXJyZW50IGNvbXBvc2l0ZSByZW5kZXJpbmcuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyN0cmFuc3BhcmVuY3kKK29wYWNpdHlfcHJvcGVydHlfdmFsdWU6CisgICAgYWxwaGEgeyAkJCA9IEFkZFJlZihuZXcgY3Nzb206Ok51bWJlclZhbHVlKCQxKSk7IH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gU3BlY2lmaWVzIHdoZXRoZXIgY29udGVudCBvZiBhIGJsb2NrIGNvbnRhaW5lciBlbGVtZW50IGlzIGNsaXBwZWQgd2hlbiBpdAorLy8gb3ZlcmZsb3dzIHRoZSBlbGVtZW50J3MgYm94LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMi92aXN1ZnguaHRtbCNvdmVyZmxvdworb3ZlcmZsb3dfcHJvcGVydHlfdmFsdWU6CisgICAga0hpZGRlblRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEhpZGRlbigpLmdldCgpKTsKKyAgfQorICB8IGtWaXNpYmxlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0VmlzaWJsZSgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBTcGVjaWZpZXMgd2hldGhlciB0aGUgdXNlciBhZ2VudCBtYXkgYXJiaXRyYXJpbHkgYnJlYWsgd2l0aGluIGEgd29yZCB0bworLy8gcHJldmVudCBvdmVyZmxvdyB3aGVuIGFuIG90aGVyd2lzZSB1bmJyZWFrYWJsZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8KKy8vIGZpdCB3aXRoaW4gdGhlIGxpbmUgYm94LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jb3ZlcmZsb3ctd3JhcC1wcm9wZXJ0eQorb3ZlcmZsb3dfd3JhcF9wcm9wZXJ0eV92YWx1ZToKKyAgICBrQnJlYWtXb3JkVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0QnJlYWtXb3JkKCkuZ2V0KCkpOworICB9CisgIHwga05vcm1hbFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vcm1hbCgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyA8cGFkZGluZy13aWR0aD4gdmFsdWUgdHlwZSBpcyB0aGUgc2FtZSBhcworLy8gcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCN2YWx1ZS1kZWYtcGFkZGluZy13aWR0aAorLy8gU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiBhIHRvcCwgcmlnaHQsIGJvdHRvbSwgb3IgbGVmdCBzaWRlIG9mIHRoZSBwYWRkaW5nIGFyZWEKKy8vIG9mIGEgYm94LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvYm94Lmh0bWwjcGFkZGluZy1wcm9wZXJ0aWVzCitwYWRkaW5nX3NpZGVfcHJvcGVydHlfdmFsdWU6CisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gVGhlICJwYWRkaW5nIiBwcm9wZXJ0eSBpcyBhIHNob3J0aGFuZCBwcm9wZXJ0eSBmb3Igc2V0dGluZyAicGFkZGluZy10b3AiLAorLy8gInBhZGRpbmctcmlnaHQiLCAicGFkZGluZy1ib3R0b20iLCBhbmQgInBhZGRpbmctbGVmdCIgYXQgdGhlIHNhbWUgcGxhY2UuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCNwYWRkaW5nLXByb3BlcnRpZXMKK3BhZGRpbmdfcHJvcGVydHlfdmFsdWU6CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgY29tcG9uZW50IHZhbHVlLCBpdCBhcHBsaWVzIHRvIGFsbCBzaWRlcy4KKyAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZSB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSk7CisgICAgJCQgPSBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ6OlRyeUNyZWF0ZSgKKyAgICAgICAgICAgICB3aWR0aCwgd2lkdGgsIHdpZHRoLCB3aWR0aCkucmVsZWFzZSgpOworICB9CisgICAgLy8gSWYgdGhlcmUgYXJlIHR3byB2YWx1ZXMsIHRoZSB0b3AgYW5kIGJvdHRvbSBwYWRkaW5ncyBhcmUgc2V0IHRvIHRoZSBmaXJzdAorICAgIC8vIHZhbHVlIGFuZCB0aGUgcmlnaHQgYW5kIGxlZnQgcGFkZGluZ3MgYXJlIHNldCB0byB0aGUgc2Vjb25kLgorICB8IHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlCisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUgeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IHZlcnRpY2FsX3dpZHRoID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IGhvcml6b250YWxfd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMik7CisgICAgJCQgPSBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ6OlRyeUNyZWF0ZSgKKyAgICAgICAgICAgICB2ZXJ0aWNhbF93aWR0aCwgaG9yaXpvbnRhbF93aWR0aCwKKyAgICAgICAgICAgICB2ZXJ0aWNhbF93aWR0aCwgaG9yaXpvbnRhbF93aWR0aCkucmVsZWFzZSgpOworICB9CisgICAgLy8gSWYgdGhlcmUgYXJlIHRocmVlIHZhbHVlcywgdGhlIHRvcCBpcyBzZXQgdG8gdGhlIGZpcnN0IHZhbHVlLCB0aGUgbGVmdAorICAgIC8vIGFuZCByaWdodCBhcmUgc2V0IHRvIHRoZSBzZWNvbmQsIGFuZCB0aGUgYm90dG9tIGlzIHNldCB0byB0aGUgdGhpcmQuCisgIHwgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZQorICAgIHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlIHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiB0b3Bfd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSk7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gaG9yaXpvbnRhbF93aWR0aCA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBib3R0b21fd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgJCQgPSBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ6OlRyeUNyZWF0ZSgKKyAgICAgICAgICAgICB0b3Bfd2lkdGgsIGhvcml6b250YWxfd2lkdGgsCisgICAgICAgICAgICAgYm90dG9tX3dpZHRoLCBob3Jpem9udGFsX3dpZHRoKS5yZWxlYXNlKCk7CisgIH0KKyAgICAvLyBJZiB0aGVyZSBhcmUgZm91ciB2YWx1ZXMsIHRoZXkgYXBwbHkgdG8gdGhlIHRvcCwgcmlnaHQsIGJvdHRvbSwgYW5kIGxlZnQsCisgICAgLy8gcmVzcGVjdGl2ZWx5LgorICB8IHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlCisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZQorICAgIHBvc2l0aXZlX2xlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlIHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiB0b3Bfd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSk7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gbGVmdF93aWR0aCA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBib3R0b21fd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gcmlnaHRfd2lkdGggPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCk7CisgICAgJCQgPSBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ6OlRyeUNyZWF0ZSgKKyAgICAgICAgICAgICB0b3Bfd2lkdGgsIGxlZnRfd2lkdGgsIGJvdHRvbV93aWR0aCwgcmlnaHRfd2lkdGgpLnJlbGVhc2UoKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMgeworICAgICQkID0gTWFyZ2luT3JQYWRkaW5nU2hvcnRoYW5kOjpUcnlDcmVhdGUoJDEsICQxLCAkMSwgJDEpLnJlbGVhc2UoKTsKKyAgfQorICA7CisKKy8vIFVzZWQgdG8gY29udHJvbCBkZXNpZ25hdGlvbiBvZiBlbGVtZW50cyBieSBwb2ludGVycy4KKy8vIFdoaWxlIG9ubHkgZGVmaW5lZCBpbiB0aGUgU1ZHIHNwZWMsIHRoZSBwb2ludGVyLWV2ZW50cyBwcm9wZXJ0eSBoYXMgYmVlbgorLy8gcHJvcG9zZWQgYW4gY29tbW9ubHkgaW1wbGVtZW50ZWQgdG8gYWxzbyBhcHBseSB0byBIVE1MIGVsZW1lbnRzIGZvcgorLy8gdmFsdWVzIG9mICdub25lJyAoZWxlbWVudCBjYW4gbm90IGJlIGluZGljYXRlZCBieSBhIHBvaW50ZXIpIGFuZCAnYXV0bycKKy8vIChlbGVtZW50IGNhbiBiZSBpbmRpY2F0ZWQgYnkgYSBwb2ludGVyIGlmIHRoZSBlbGVtZW50IGhhcyAndmlzaWJpbGl0eScgc2V0CisvLyB0byAndmlzaWJsZScpLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50ZXJhY3QuaHRtbCNQb2ludGVyRXZlbnRzUHJvcGVydHkKK3BvaW50ZXJfZXZlbnRzX3Byb3BlcnR5X3ZhbHVlOgorICAgIGtBdXRvVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0QXV0bygpLmdldCgpKTsKKyAgfQorICB8IGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBwb3NpdGlvbmluZyBhbGdvcml0aG1zIGlzIHVzZWQgdG8gY2FsY3VsYXRlCisvLyB0aGUgcG9zaXRpb24gb2YgYSBib3guCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1cmVuLmh0bWwjY2hvb3NlLXBvc2l0aW9uCitwb3NpdGlvbl9wcm9wZXJ0eV92YWx1ZToKKyAgICBrQWJzb2x1dGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRBYnNvbHV0ZSgpLmdldCgpKTsKKyAgfQorICB8IGtGaXhlZFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEZpeGVkKCkuZ2V0KCkpOworICB9CisgIHwga1JlbGF0aXZlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0UmVsYXRpdmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrU3RhdGljVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0U3RhdGljKCkuZ2V0KCkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwgaXQgdGFrZXMgYSB2YWx1ZSBlcXVhbCB0byB0aGUgZmlyc3QuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zZm9ybXMvI2Z1bmNkZWYtc2NhbGUKK3NjYWxlX2Z1bmN0aW9uX3BhcmFtZXRlcnM6CisgICAgbnVtYmVyIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6U2NhbGVGdW5jdGlvbigkMSwgJDEpOworICB9CisgIHwgbnVtYmVyIGNvbW1hIG51bWJlciB7CisgICAgJCQgPSBuZXcgY3Nzb206OlNjYWxlRnVuY3Rpb24oJDEsICQzKTsKKyAgfQorICA7CisKKy8vIFRoaXMgcHJvcGVydHkgZGVzY3JpYmVzIGhvdyBpbmxpbmUtbGV2ZWwgY29udGVudCBvZiBhIGJsb2NrIGNvbnRhaW5lciBpcworLy8gYWxpZ25lZC4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3RleHQtYWxpZ24KK3RleHRfYWxpZ25fcHJvcGVydHlfdmFsdWU6CisgICAga0VuZFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEVuZCgpLmdldCgpKTsKKyAgfQorICB8IGtMZWZ0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0TGVmdCgpLmdldCgpKTsKKyAgfQorICB8IGtDZW50ZXJUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRDZW50ZXIoKS5nZXQoKSk7CisgIH0KKyAgfCBrUmlnaHRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRSaWdodCgpLmdldCgpKTsKKyAgfQorICB8IGtTdGFydFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFN0YXJ0KCkuZ2V0KCkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHdoYXQgbGluZSBkZWNvcmF0aW9ucy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LWRlY29yLTMvI3RleHQtZGVjb3JhdGlvbi1saW5lCit0ZXh0X2RlY29yYXRpb25fbGluZV9wcm9wZXJ0eV92YWx1ZToKKyAgICBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrTGluZVRocm91Z2hUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRMaW5lVGhyb3VnaCgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBUZXh0IGRlY29yYXRpb24gaXMgYSBzaG9ydGhhbmQgZm9yIHNldHRpbmcgJ3RleHQtZGVjb3JhdGlvbi1saW5lJywKKy8vICd0ZXh0LWRlY29yYXRpb24tY29sb3InLCBhbmQgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScgaW4gb25lIGRlY2xhcmF0aW9uLgorLy8gVE9ETzogUmVkaXJlY3QgdGV4dCBkZWNvcmF0aW9uIHRvIHRleHQgZGVjb3JhdGlvbiBsaW5lIGZvciBub3cgYW5kCisvLyBjaGFuZ2UgaXQgd2hlbiBmdWxseSBpbXBsZW1lbnQgdGV4dCBkZWNvcmF0aW9uLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtZGVjb3ItMy8jdGV4dC1kZWNvcmF0aW9uCit0ZXh0X2RlY29yYXRpb25fcHJvcGVydHlfdmFsdWU6IHRleHRfZGVjb3JhdGlvbl9saW5lX3Byb3BlcnR5X3ZhbHVlOworCisvLyBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBsaW5lcyBvZiBpbmxpbmUgY29udGVudCBpbgorLy8gYSBibG9jay4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3RleHQtaW5kZW50Cit0ZXh0X2luZGVudF9wcm9wZXJ0eV92YWx1ZToKKyAgICBsZW5ndGggeworICAgICQkID0gJDE7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgcmVuZGVyaW5nIHdoZW4gaW5saW5lIGNvbnRlbnQgb3ZlcmZsb3dzIGl0cyBsaW5lIGJveAorLy8gZWRnZSBpbiB0aGUgaW5saW5lIHByb2dyZXNzaW9uIGRpcmVjdGlvbiBvZiBpdHMgYmxvY2sgY29udGFpbmVyIGVsZW1lbnQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXVpLyNwcm9wZGVmLXRleHQtb3ZlcmZsb3cKK3RleHRfb3ZlcmZsb3dfcHJvcGVydHlfdmFsdWU6CisgICAga0NsaXBUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRDbGlwKCkuZ2V0KCkpOworICB9CisgIHwga0VsbGlwc2lzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0RWxsaXBzaXMoKS5nZXQoKSk7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKwordGV4dF9zaGFkb3dfcHJvcGVydHlfZWxlbWVudDoKKyAgICBsZW5ndGggeworICAgIGlmICgkPHNoYWRvd19pbmZvPjAtPmxlbmd0aF92ZWN0b3Iuc2l6ZSgpID09IDIpIHsKKyAgICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206Okxlbmd0aFZhbHVlPiBsZW5ndGgoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICAgIC8vIE5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgZm9yIGJsdXIgcmFkaXVzLgorICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGgtPnZhbHVlKCkgPCAwKSB7CisgICAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcihAMSwgIm5lZ2F0aXZlIHZhbHVlcyBvZiBibHVyIHJhZGl1cyBhcmUgaWxsZWdhbCIpOworICAgICAgICAkPHNoYWRvd19pbmZvPjAtPmVycm9yID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgICQ8c2hhZG93X2luZm8+MC0+bGVuZ3RoX3ZlY3Rvci5wdXNoX2JhY2sobGVuZ3RoKTsKKyAgICB9IGVsc2UgeworICAgICAgJDxzaGFkb3dfaW5mbz4wLT5sZW5ndGhfdmVjdG9yLnB1c2hfYmFjaygKKyAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICAgIH0KKyAgfQorICB8IGNvbG9yIHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpSR0JBQ29sb3JWYWx1ZT4gY29sb3IoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBpZiAoISQ8c2hhZG93X2luZm8+MC0+Y29sb3IpIHsKKyAgICAgICQ8c2hhZG93X2luZm8+MC0+Y29sb3IgPSBjb2xvcjsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICAgIEAxLCAiY29sb3IgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gdGV4dCBzaGFkb3cuIik7CisgICAgICAkPHNoYWRvd19pbmZvPjAtPmVycm9yID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgOworCit0ZXh0X3NoYWRvd19saXN0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAkJCA9IG5ldyBTaGFkb3dQcm9wZXJ0eUluZm8oKTsKKyAgfQorICB8IHRleHRfc2hhZG93X2xpc3QgdGV4dF9zaGFkb3dfcHJvcGVydHlfZWxlbWVudCB7CisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKK3ZhbGlkYXRlZF90ZXh0X3NoYWRvd19saXN0OgorICAgIHRleHRfc2hhZG93X2xpc3QgeworICAgIHNjb3BlZF9wdHI8U2hhZG93UHJvcGVydHlJbmZvPiBzaGFkb3dfcHJvcGVydHlfaW5mbygkMSk7CisgICAgaWYgKCFzaGFkb3dfcHJvcGVydHlfaW5mby0+SXNTaGFkb3dQcm9wZXJ0eVZhbGlkKGtUZXh0U2hhZG93KSkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJpbnZhbGlkIHRleHQgc2hhZG93IHByb3BlcnR5LiIpOworICAgICAgJCQgPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlNoYWRvd1ZhbHVlKAorICAgICAgICAgICAgICBzaGFkb3dfcHJvcGVydHlfaW5mby0+bGVuZ3RoX3ZlY3Rvciwgc2hhZG93X3Byb3BlcnR5X2luZm8tPmNvbG9yLAorICAgICAgICAgICAgICBmYWxzZSkpOworICAgIH0KKyAgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF90ZXh0X3NoYWRvd19saXN0OgorICAgIHZhbGlkYXRlZF90ZXh0X3NoYWRvd19saXN0IHsKKyAgICBpZiAoJDEpIHsKKyAgICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICAgIH0KKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF90ZXh0X3NoYWRvd19saXN0IGNvbW1hIHZhbGlkYXRlZF90ZXh0X3NoYWRvd19saXN0IHsKKyAgICAkJCA9ICQxOworICAgIGlmICgkJCAmJiAkMykgeworICAgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICAgIH0KKyAgfQorICA7CisKKy8vIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHNoYWRvdyBlZmZlY3RzIHRvIGJlIGFwcGxpZWQKKy8vIHRvIHRoZSB0ZXh0IG9mIHRoZSBlbGVtZW50LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtZGVjb3ItMy8jdGV4dC1zaGFkb3ctcHJvcGVydHkKK3RleHRfc2hhZG93X3Byb3BlcnR5X3ZhbHVlOgorICAgIGNvbW1hX3NlcGFyYXRlZF90ZXh0X3NoYWRvd19saXN0IHsKKyAgICBpZiAoJDEpIHsKKyAgICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgkMSk7CisgICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKHByb3BlcnR5X3ZhbHVlLlBhc3MoKSkpOworICAgIH0KKyAgfQorICB8IGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIGNhcGl0YWxpemF0aW9uIGVmZmVjdHMgb2YgYW4gZWxlbWVudCdzIHRleHQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvI3RleHQtdHJhbnNmb3JtLXByb3BlcnR5Cit0ZXh0X3RyYW5zZm9ybV9wcm9wZXJ0eV92YWx1ZToKKyAgICBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrVXBwZXJjYXNlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0VXBwZXJjYXNlKCkuZ2V0KCkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFRoZSBzZXQgb2YgYWxsb3dlZCB0cmFuc2Zvcm0gZnVuY3Rpb25zLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zLyN0cmFuc2Zvcm0tZnVuY3Rpb25zCit0cmFuc2Zvcm1fZnVuY3Rpb246CisgIC8vIFNwZWNpZmllcyBhbiBhcmJpdHJhcnkgYWZmaW5lIDJEIHRyYW5zZm9ybWF0aW9uLgorICAgIGtNYXRyaXhGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgbnVtYmVyIGNvbW1hIG51bWJlciBjb21tYSBudW1iZXIKKyAgICAgIGNvbW1hIG51bWJlciBjb21tYSBudW1iZXIgY29tbWEgbnVtYmVyICcpJyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkPHRyYW5zZm9ybV9mdW5jdGlvbnM+MC0+cHVzaF9iYWNrKAorICAgICAgICBuZXcgY3Nzb206Ok1hdHJpeEZ1bmN0aW9uKCQzLCAkNSwgJDcsICQ5LCAkMTEsICQxMykpOworICB9CisgIC8vIFNwZWNpZmllcyBhIDJEIHJvdGF0aW9uIGFyb3VuZCB0aGUgei1heGlzLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zZm9ybXMvI2Z1bmNkZWYtcm90YXRlCisgIHwga1JvdGF0ZUZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBhbmdsZSAnKScKKyAgICAgIG1heWJlX3doaXRlc3BhY2UgeworICAgICQ8dHJhbnNmb3JtX2Z1bmN0aW9ucz4wLT5wdXNoX2JhY2sobmV3IGNzc29tOjpSb3RhdGVGdW5jdGlvbigkMykpOworICB9CisgIC8vIFNwZWNpZmllcyBhIDJEIHNjYWxlIG9wZXJhdGlvbiBieSB0aGUgc2NhbGluZyB2ZWN0b3IuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNmb3Jtcy8jZnVuY2RlZi1zY2FsZQorICB8IGtTY2FsZUZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBzY2FsZV9mdW5jdGlvbl9wYXJhbWV0ZXJzICcpJworICAgICAgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJDx0cmFuc2Zvcm1fZnVuY3Rpb25zPjAtPnB1c2hfYmFjaygkMyk7CisgIH0KKyAgLy8gU3BlY2lmaWVzIGEgMkQgc2NhbGUgb3BlcmF0aW9uIHVzaW5nIHRoZSBbc3gsIDFdIHNjYWxpbmcgdmVjdG9yLCB3aGVyZSBzeAorICAvLyBpcyBnaXZlbiBhcyB0aGUgcGFyYW1ldGVyLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zZm9ybXMvI2Z1bmNkZWYtc2NhbGV4CisgIHwga1NjYWxlWEZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBudW1iZXIgJyknCisgICAgICBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkPHRyYW5zZm9ybV9mdW5jdGlvbnM+MC0+cHVzaF9iYWNrKG5ldyBjc3NvbTo6U2NhbGVGdW5jdGlvbigkMywgMS4wZikpOworICB9CisgIC8vIFNwZWNpZmllcyBhIDJEIHNjYWxlIG9wZXJhdGlvbiB1c2luZyB0aGUgWzEsIHN5XSBzY2FsaW5nIHZlY3Rvciwgd2hlcmUgc3kKKyAgLy8gaXMgZ2l2ZW4gYXMgdGhlIHBhcmFtZXRlci4KKyAgLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zLyNmdW5jZGVmLXNjYWxleQorICB8IGtTY2FsZVlGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgbnVtYmVyICcpJworICAgICAgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJDx0cmFuc2Zvcm1fZnVuY3Rpb25zPjAtPnB1c2hfYmFjayhuZXcgY3Nzb206OlNjYWxlRnVuY3Rpb24oMS4wZiwgJDMpKTsKKyAgfQorICAvLyBTcGVjaWZpZXMgYSAyRCB0cmFuc2xhdGlvbiBieSB0aGUgdmVjdG9yIFt0eCwgdHldLCB3aGVyZSB0eCBpcyB0aGUgZmlyc3QKKyAgLy8gdHJhbnNsYXRpb24tdmFsdWUgcGFyYW1ldGVyIGFuZCB0eSBpcyB0aGUgb3B0aW9uYWwgc2Vjb25kIHRyYW5zbGF0aW9uLXZhbHVlCisgIC8vIHBhcmFtZXRlci4gSWYgPHR5PiBpcyBub3QgcHJvdmlkZWQsIHR5IGhhcyB6ZXJvIGFzIGEgdmFsdWUuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNmb3Jtcy8jZnVuY2RlZi10cmFuc2xhdGUKKyAgfCBrVHJhbnNsYXRlRnVuY3Rpb25Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGxlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlICcpJworICAgICAgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgaWYgKCQzKSB7CisgICAgICAkPHRyYW5zZm9ybV9mdW5jdGlvbnM+MC0+cHVzaF9iYWNrKG5ldyBjc3NvbTo6VHJhbnNsYXRlRnVuY3Rpb24oCisgICAgICAgICAgY3Nzb206OlRyYW5zbGF0ZUZ1bmN0aW9uOjprWEF4aXMsIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSkpOworICAgICAgJDx0cmFuc2Zvcm1fZnVuY3Rpb25zPjAtPnB1c2hfYmFjayhuZXcgY3Nzb206OlRyYW5zbGF0ZUZ1bmN0aW9uKAorICAgICAgICAgIGNzc29tOjpUcmFuc2xhdGVGdW5jdGlvbjo6a1lBeGlzLAorICAgICAgICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206Okxlbmd0aFZhbHVlPigKKyAgICAgICAgICAgICAgbmV3IGNzc29tOjpMZW5ndGhWYWx1ZSgwLCBjc3NvbTo6a1BpeGVsc1VuaXQpKSkpOworICAgIH0KKyAgfQorICB8IGtUcmFuc2xhdGVGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUgY29tbWEKKyAgICBsZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZSAnKScgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgaWYgKCQzICYmICQ1KSB7CisgICAgICAkPHRyYW5zZm9ybV9mdW5jdGlvbnM+MC0+cHVzaF9iYWNrKG5ldyBjc3NvbTo6VHJhbnNsYXRlRnVuY3Rpb24oCisgICAgICAgICAgY3Nzb206OlRyYW5zbGF0ZUZ1bmN0aW9uOjprWEF4aXMsIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSkpOworICAgICAgJDx0cmFuc2Zvcm1fZnVuY3Rpb25zPjAtPnB1c2hfYmFjayhuZXcgY3Nzb206OlRyYW5zbGF0ZUZ1bmN0aW9uKAorICAgICAgICAgIGNzc29tOjpUcmFuc2xhdGVGdW5jdGlvbjo6a1lBeGlzLCBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNSkpKTsKKyAgICB9CisgIH0KKyAgLy8gU3BlY2lmaWVzIGEgdHJhbnNsYXRpb24gYnkgdGhlIGdpdmVuIGFtb3VudCBpbiB0aGUgWCBkaXJlY3Rpb24uCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNmb3Jtcy8jZnVuY2RlZi10cmFuc2xhdGV4CisgIHwga1RyYW5zbGF0ZVhGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUgJyknCisgICAgICBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBpZiAoJDMpIHsKKyAgICAgICQ8dHJhbnNmb3JtX2Z1bmN0aW9ucz4wLT5wdXNoX2JhY2sobmV3IGNzc29tOjpUcmFuc2xhdGVGdW5jdGlvbigKKyAgICAgICAgICBjc3NvbTo6VHJhbnNsYXRlRnVuY3Rpb246OmtYQXhpcywgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDMpKSk7CisgICAgfQorICB9CisgIC8vIFNwZWNpZmllcyBhIHRyYW5zbGF0aW9uIGJ5IHRoZSBnaXZlbiBhbW91bnQgaW4gdGhlIFkgZGlyZWN0aW9uLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zZm9ybXMvI2Z1bmNkZWYtdHJhbnNsYXRleQorICB8IGtUcmFuc2xhdGVZRnVuY3Rpb25Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGxlbmd0aF9wZXJjZW50X3Byb3BlcnR5X3ZhbHVlICcpJworICAgICAgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgaWYgKCQzKSB7CisgICAgICAkPHRyYW5zZm9ybV9mdW5jdGlvbnM+MC0+cHVzaF9iYWNrKG5ldyBjc3NvbTo6VHJhbnNsYXRlRnVuY3Rpb24oCisgICAgICAgICAgY3Nzb206OlRyYW5zbGF0ZUZ1bmN0aW9uOjprWUF4aXMsIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSkpOworICAgIH0KKyAgfQorICAvLyBTcGVjaWZpZXMgYSAzRCB0cmFuc2xhdGlvbiBieSB0aGUgdmVjdG9yIFswLDAsel0gd2l0aCB0aGUgZ2l2ZW4gYW1vdW50CisgIC8vIGluIHRoZSBaIGRpcmVjdGlvbi4KKyAgLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zLyNmdW5jZGVmLXRyYW5zbGF0ZXoKKyAgfCBrVHJhbnNsYXRlWkZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBsZW5ndGggJyknCisgICAgICBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBpZiAoJDMpIHsKKyAgICAgICQ8dHJhbnNmb3JtX2Z1bmN0aW9ucz4wLT5wdXNoX2JhY2sobmV3IGNzc29tOjpUcmFuc2xhdGVGdW5jdGlvbigKKyAgICAgICAgICBjc3NvbTo6VHJhbnNsYXRlRnVuY3Rpb246OmtaQXhpcywgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDMpKSk7CisgICAgfQorICB9CisgIDsKKworLy8gT25lIG9yIG1vcmUgdHJhbnNmb3JtIGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNmb3Jtcy8jdHlwZWRlZi10cmFuc2Zvcm0tbGlzdAordHJhbnNmb3JtX2xpc3Q6CisgICAgLyogZW1wdHkgKi8geworICAgICQkID0gbmV3IGNzc29tOjpUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlcigpOworICB9CisgIHwgdHJhbnNmb3JtX2xpc3QgdHJhbnNmb3JtX2Z1bmN0aW9uIHsKKyAgICAkJCA9ICQxOworICB9CisgIDsKKworLy8gQSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGFuIGVsZW1lbnQKKy8vIHJlbmRlcnMgaW4uCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zZm9ybXMvI3RyYW5zZm9ybS1wcm9wZXJ0eQordHJhbnNmb3JtX3Byb3BlcnR5X3ZhbHVlOgorICAgIGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpLmdldCgpKTsKKyAgfQorICB8IHRyYW5zZm9ybV9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlcj4KKyAgICAgICAgdHJhbnNmb3JtX2Z1bmN0aW9ucygkMSk7CisgICAgJCQgPSB0cmFuc2Zvcm1fZnVuY3Rpb25zLT5zaXplKCkgPT0gMHUgPyBOVUxMIDoKKyAgICAgICAgICAgIEFkZFJlZihuZXcgY3Nzb206OlRyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbHVlKAorICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9mdW5jdGlvbnMtPlBhc3MoKSkpOworICB9CisgIHwgdHJhbnNmb3JtX2xpc3QgZXJyb3JzIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlcj4KKyAgICAgICAgdHJhbnNmb3JtX2Z1bmN0aW9ucygkMSk7CisgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDIsICJpbnZhbGlkIHRyYW5zZm9ybSBmdW5jdGlvbiIpOworICAgICQkID0gTlVMTDsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXNfd2l0aG91dF9lcnJvcnMKKyAgOworCit2YWxpZGF0ZWRfdHdvX3Bvc2l0aW9uX2xpc3RfZWxlbWVudHM6CisgICAgcG9zaXRpb25fbGlzdF9lbGVtZW50IHBvc2l0aW9uX2xpc3RfZWxlbWVudCB7CisgICAgc2NvcGVkX3B0cjxQb3NpdGlvblBhcnNlU3RydWN0dXJlPiBwb3NpdGlvbl9pbmZvKAorICAgICAgICBuZXcgUG9zaXRpb25QYXJzZVN0cnVjdHVyZSgpKTsKKyAgICBwb3NpdGlvbl9pbmZvLT5QdXNoQmFja0VsZW1lbnQoTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgICBpZiAocG9zaXRpb25faW5mby0+UHVzaEJhY2tFbGVtZW50KE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKSkgJiYKKyAgICAgICAgcG9zaXRpb25faW5mby0+SXNQb3NpdGlvblZhbGlkT25TaXplVHdvKCkpIHsKKyAgICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigKKyAgICAgICAgICAgICAgcG9zaXRpb25faW5mby0+cG9zaXRpb25fYnVpbGRlcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDIsICJpbnZhbGlkIHRyYW5zZm9ybS1vcmlnaW4gdmFsdWUiKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgOworCisvLyBUaGUgdHJhbnNmb3JtLW9yaWdpbiBwcm9wZXJ0eSBsZXRzIHlvdSBtb2RpZnkgdGhlIG9yaWdpbiBmb3IgdHJhbnNmb3JtYXRpb25zCisvLyBvZiBhbiBlbGVtZW50LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zLyNwcm9wZGVmLXRyYW5zZm9ybS1vcmlnaW4KK3RyYW5zZm9ybV9vcmlnaW5fcHJvcGVydHlfdmFsdWU6CisgICAgcG9zaXRpb25fbGlzdF9lbGVtZW50IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoCisgICAgICAgIG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKSk7CisgICAgcHJvcGVydHlfdmFsdWUtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSk7CisgIH0KKyAgfCB2YWxpZGF0ZWRfdHdvX3Bvc2l0aW9uX2xpc3RfZWxlbWVudHMgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV92YWx1ZSgkMSk7CisgICAgJCQgPSBwcm9wZXJ0eV92YWx1ZQorICAgICAgICAgPyBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShwcm9wZXJ0eV92YWx1ZS5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgdmFsaWRhdGVkX3R3b19wb3NpdGlvbl9saXN0X2VsZW1lbnRzIGxlbmd0aCB7CisgICAgc2NvcGVkX3B0cjxjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXI+IHByb3BlcnR5X3ZhbHVlKCQxKTsKKyAgICBpZiAocHJvcGVydHlfdmFsdWUpIHsKKyAgICAgIHByb3BlcnR5X3ZhbHVlLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDIpKTsKKyAgICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gRGV0ZXJtaW5lcyB0aGUgdmVydGljYWwgYWxpZ25tZW50IG9mIGEgYm94LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvdmlzdWRldC5odG1sI3Byb3BkZWYtdmVydGljYWwtYWxpZ24KK3ZlcnRpY2FsX2FsaWduX3Byb3BlcnR5X3ZhbHVlOgorICAgIGtCb3R0b21Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRCb3R0b20oKS5nZXQoKSk7CisgIH0KKyAgfCBrVG9wVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0VG9wKCkuZ2V0KCkpOworICB9CisgIHwga01pZGRsZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE1pZGRsZSgpLmdldCgpKTsKKyAgfQorICB8IGtCYXNlbGluZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEJhc2VsaW5lKCkuZ2V0KCkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFRoZSAndmlzaWJpbGl0eScgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGJveGVzIGdlbmVyYXRlZCBieSBhbiBlbGVtZW50CisvLyBhcmUgcmVuZGVyZWQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1ZnguaHRtbCNwcm9wZGVmLXZpc2liaWxpdHkKK3Zpc2liaWxpdHlfcHJvcGVydHlfdmFsdWU6CisgICAga0hpZGRlblRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEhpZGRlbigpLmdldCgpKTsKKyAgfQorICB8IGtWaXNpYmxlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0VmlzaWJsZSgpLmdldCgpKTsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBPbmUgb3JlIG1vcmUgdGltZSB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KK2NvbW1hX3NlcGFyYXRlZF90aW1lX2xpc3Q6CisgICAgdGltZSB7CisgICAgJCQgPSBuZXcgY3Nzb206OlRpbWVMaXN0VmFsdWU6OkJ1aWxkZXIoKTsKKyAgICAkJC0+cHVzaF9iYWNrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbUludGVybmFsVmFsdWUoJDEpKTsKKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF90aW1lX2xpc3QgY29tbWEgdGltZSB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbUludGVybmFsVmFsdWUoJDMpKTsKKyAgfQorICA7CisKK3RpbWVfbGlzdF9wcm9wZXJ0eV92YWx1ZToKKyAgICBjb21tYV9zZXBhcmF0ZWRfdGltZV9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpMaXN0VmFsdWU8YmFzZTo6VGltZURlbHRhPjo6QnVpbGRlcj4gdGltZV9saXN0KCQxKTsKKyAgICAkJCA9IHRpbWVfbGlzdAorICAgICAgICAgPyBBZGRSZWYobmV3IGNzc29tOjpUaW1lTGlzdFZhbHVlKHRpbWVfbGlzdC5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKworbWF5YmVfc3RlcHNfc3RhcnRfb3JfZW5kX3BhcmFtZXRlcjoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyAnZW5kJy4KKyAgICAkJCA9IGNzc29tOjpTdGVwcGluZ1RpbWluZ0Z1bmN0aW9uOjprRW5kOworICB9CisgIHwgY29tbWEga1N0YXJ0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBjc3NvbTo6U3RlcHBpbmdUaW1pbmdGdW5jdGlvbjo6a1N0YXJ0OworICB9CisgIHwgY29tbWEga0VuZFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gY3Nzb206OlN0ZXBwaW5nVGltaW5nRnVuY3Rpb246OmtFbmQ7CisgIH0KKyAgOworCitzaW5nbGVfdGltaW5nX2Z1bmN0aW9uOgorICAgIGtDdWJpY0JlemllckZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZQorICAgIG51bWJlciBjb21tYSBudW1iZXIgY29tbWEgbnVtYmVyIGNvbW1hIG51bWJlciAnKScgeworICAgIGZsb2F0IHAxX3ggPSAkMzsKKyAgICBmbG9hdCBwMV95ID0gJDU7CisgICAgZmxvYXQgcDJfeCA9ICQ3OworICAgIGZsb2F0IHAyX3kgPSAkOTsKKworICAgIGlmIChwMV94IDwgMCB8fCBwMV94ID4gMSB8fCBwMl94IDwgMCB8fCBwMl94ID4gMSkgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICAgIEAxLAorICAgICAgICAgICJjdWJpYy1iZXppZXIgY29udHJvbCBwb2ludCB4IHZhbHVlcyBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgMV0uIik7CisgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbiBlcnJvciwgcmV0dXJuIHRoZSBlYXNlIGZ1bmN0aW9uIGFzIGEgZGVmYXVsdC4KKyAgICAgICQkID0gQWRkUmVmKGNzc29tOjpUaW1pbmdGdW5jdGlvbjo6R2V0RWFzZSgpLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKHAxX3gsIHAxX3ksIHAyX3gsIHAyX3kpKTsKKyAgICB9CisgIH0KKyAgfCBrU3RlcHNGdW5jdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2Uga0ludGVnZXJUb2tlbiBtYXliZV93aGl0ZXNwYWNlCisgICAgbWF5YmVfc3RlcHNfc3RhcnRfb3JfZW5kX3BhcmFtZXRlciAnKScgeworICAgIGludCBudW1iZXJfb2Zfc3RlcHMgPSAkMzsKKyAgICBpZiAobnVtYmVyX29mX3N0ZXBzIDw9IDApIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcigKKyAgICAgICAgICBAMSwKKyAgICAgICAgICAiVGhlIHN0ZXBzKCkgbnVtYmVyIG9mIHN0ZXBzIHBhcmFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworICAgICAgbnVtYmVyX29mX3N0ZXBzID0gMTsKKyAgICB9CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpTdGVwcGluZ1RpbWluZ0Z1bmN0aW9uKG51bWJlcl9vZl9zdGVwcywgJDUpKTsKKyAgfQorICB8IGtFYXNlSW5PdXRUb2tlbiB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlRpbWluZ0Z1bmN0aW9uOjpHZXRFYXNlSW5PdXQoKS5nZXQoKSk7CisgIH0KKyAgfCBrRWFzZUluVG9rZW4geworICAgICQkID0gQWRkUmVmKGNzc29tOjpUaW1pbmdGdW5jdGlvbjo6R2V0RWFzZUluKCkuZ2V0KCkpOworICB9CisgIHwga0Vhc2VPdXRUb2tlbiB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlRpbWluZ0Z1bmN0aW9uOjpHZXRFYXNlT3V0KCkuZ2V0KCkpOworICB9CisgIHwga0Vhc2VUb2tlbiB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlRpbWluZ0Z1bmN0aW9uOjpHZXRFYXNlKCkuZ2V0KCkpOworICB9CisgIHwga0xpbmVhclRva2VuIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6VGltaW5nRnVuY3Rpb246OkdldExpbmVhcigpLmdldCgpKTsKKyAgfQorICB8IGtTdGVwRW5kVG9rZW4geworICAgICQkID0gQWRkUmVmKGNzc29tOjpUaW1pbmdGdW5jdGlvbjo6R2V0U3RlcEVuZCgpLmdldCgpKTsKKyAgfQorICB8IGtTdGVwU3RhcnRUb2tlbiB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OlRpbWluZ0Z1bmN0aW9uOjpHZXRTdGVwU3RhcnQoKS5nZXQoKSk7CisgIH0KKyAgOworCitjb21tYV9zZXBhcmF0ZWRfc2luZ2xlX3RpbWluZ19mdW5jdGlvbl9saXN0OgorICAgIHNpbmdsZV90aW1pbmdfZnVuY3Rpb24geworICAgICQkID0gbmV3IGNzc29tOjpUaW1pbmdGdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF9zaW5nbGVfdGltaW5nX2Z1bmN0aW9uX2xpc3QgY29tbWEKKyAgICBzaW5nbGVfdGltaW5nX2Z1bmN0aW9uIHsKKyAgICAkJCA9ICQxOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDMpKTsKKyAgfQorICA7CisKK3RpbWluZ19mdW5jdGlvbl9saXN0X3Byb3BlcnR5X3ZhbHVlOgorICAgIGNvbW1hX3NlcGFyYXRlZF9zaW5nbGVfdGltaW5nX2Z1bmN0aW9uX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlRpbWluZ0Z1bmN0aW9uTGlzdFZhbHVlOjpCdWlsZGVyPgorICAgICAgICB0aW1pbmdfZnVuY3Rpb25fbGlzdCgkMSk7CisgICAgJCQgPSB0aW1pbmdfZnVuY3Rpb25fbGlzdAorICAgICAgICAgPyBBZGRSZWYobmV3IGNzc29tOjpUaW1pbmdGdW5jdGlvbkxpc3RWYWx1ZSgKKyAgICAgICAgICAgICAgIHRpbWluZ19mdW5jdGlvbl9saXN0LlBhc3MoKSkpCisgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gVGhlICdhbmltYXRpb24tZGVsYXknIHByb3BlcnR5IGRlZmluZXMgd2hlbiB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQuCisvLyAgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtY3NzMy1hbmltYXRpb25zLTIwMTMwMjE5LyNhbmltYXRpb24tZGVsYXktcHJvcGVydHkKK2FuaW1hdGlvbl9kZWxheV9wcm9wZXJ0eV92YWx1ZTogdGltZV9saXN0X3Byb3BlcnR5X3ZhbHVlOworCisvLyBUaGUgJ2FuaW1hdGlvbi1kaXJlY3Rpb24nIHByb3BlcnR5IGRlZmluZXMgd2hpY2ggZGlyZWN0aW9uIHRpbWUgc2hvdWxkIGZsb3cKKy8vIGdpdmVuIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBudW1iZXIuCisvLyAgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtY3NzMy1hbmltYXRpb25zLTIwMTMwMjE5LyNhbmltYXRpb24tZGlyZWN0aW9uLXByb3BlcnR5CithbmltYXRpb25fZGlyZWN0aW9uX2xpc3RfZWxlbWVudDoKKyAgICBrTm9ybWFsVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9ybWFsKCkuZ2V0KCkpOworICB9CisgIHwga1JldmVyc2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRSZXZlcnNlKCkuZ2V0KCkpOworICB9CisgIHwga0FsdGVybmF0ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEFsdGVybmF0ZSgpLmdldCgpKTsKKyAgfQorICB8IGtBbHRlcm5hdGVSZXZlcnNlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0QWx0ZXJuYXRlUmV2ZXJzZSgpLmdldCgpKTsKKyAgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF9hbmltYXRpb25fZGlyZWN0aW9uX2xpc3Q6CisgICAgYW5pbWF0aW9uX2RpcmVjdGlvbl9saXN0X2VsZW1lbnQgeworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICQkLT5wdXNoX2JhY2soTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpKTsKKyAgfQorICB8IGNvbW1hX3NlcGFyYXRlZF9hbmltYXRpb25fZGlyZWN0aW9uX2xpc3QgY29tbWEKKyAgICAgICAgYW5pbWF0aW9uX2RpcmVjdGlvbl9saXN0X2VsZW1lbnQgeworICAgICQkID0gJDE7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICB9CisgIDsKKworYW5pbWF0aW9uX2RpcmVjdGlvbl9wcm9wZXJ0eV92YWx1ZToKKyAgICBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0aW9uX2RpcmVjdGlvbl9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gZGlyZWN0aW9uX2xpc3QoJDEpOworICAgICQkID0gZGlyZWN0aW9uX2xpc3QKKyAgICAgICAgID8gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUoZGlyZWN0aW9uX2xpc3QuUGFzcygpKSkKKyAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXNfd2l0aG91dF9lcnJvcnMKKyAgfCBlcnJvcnMgeworICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcigKKyAgICAgICAgQDEsICJ1bnN1cHBvcnRlZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYW5pbWF0aW9uLWRpcmVjdGlvbiIpOworICAgICQkID0gTlVMTDsKKyAgfQorICA7CisKKy8vIFRoZSAnYW5pbWF0aW9uLWR1cmF0aW9uJyBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBsZW5ndGggb2YgdGltZSB0aGF0IGFuCisvLyBhbmltYXRpb24gdGFrZXMgdG8gY29tcGxldGUgb25lIGN5Y2xlLgorLy8gIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWNzczMtYW5pbWF0aW9ucy0yMDEzMDIxOS8jYW5pbWF0aW9uLWR1cmF0aW9uLXByb3BlcnR5CithbmltYXRpb25fZHVyYXRpb25fcHJvcGVydHlfdmFsdWU6IHRpbWVfbGlzdF9wcm9wZXJ0eV92YWx1ZTsKKworLy8gVGhlICdhbmltYXRpb24tZmlsbC1tb2RlJyBwcm9wZXJ0eSBkZWZpbmVzIHdoYXQgdmFsdWVzIGFyZSBhcHBsaWVkIGJ5IHRoZQorLy8gYW5pbWF0aW9uIG91dHNpZGUgdGhlIHRpbWUgaXQgaXMgZXhlY3V0aW5nLgorLy8gIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWNzczMtYW5pbWF0aW9ucy0yMDEzMDIxOS8jYW5pbWF0aW9uLWZpbGwtbW9kZS1wcm9wZXJ0eQorYW5pbWF0aW9uX2ZpbGxfbW9kZV9saXN0X2VsZW1lbnQ6CisgICAga05vbmVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXROb25lKCkuZ2V0KCkpOworICB9CisgIHwga0ZvcndhcmRzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Rm9yd2FyZHMoKS5nZXQoKSk7CisgIH0KKyAgfCBrQmFja3dhcmRzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0QmFja3dhcmRzKCkuZ2V0KCkpOworICB9CisgIHwga0JvdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRCb3RoKCkuZ2V0KCkpOworICB9CisgIDsKKworY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9maWxsX21vZGVfbGlzdDoKKyAgICBhbmltYXRpb25fZmlsbF9tb2RlX2xpc3RfZWxlbWVudCB7CisgICAgJCQgPSBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCk7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9maWxsX21vZGVfbGlzdCBjb21tYQorICAgICAgICBhbmltYXRpb25fZmlsbF9tb2RlX2xpc3RfZWxlbWVudCB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSk7CisgIH0KKyAgOworCithbmltYXRpb25fZmlsbF9tb2RlX3Byb3BlcnR5X3ZhbHVlOgorICAgIGNvbW1hX3NlcGFyYXRlZF9hbmltYXRpb25fZmlsbF9tb2RlX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBmaWxsX21vZGVfbGlzdCgkMSk7CisgICAgJCQgPSBmaWxsX21vZGVfbGlzdAorICAgICAgICAgPyBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShmaWxsX21vZGVfbGlzdC5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgY29tbW9uX3ZhbHVlc193aXRob3V0X2Vycm9ycworICB8IGVycm9ycyB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICBAMSwgInVuc3VwcG9ydGVkIHByb3BlcnR5IHZhbHVlIGZvciBhbmltYXRpb24tZmlsbC1tb2RlIik7CisgICAgJCQgPSBOVUxMOworICB9CisgIDsKKworLy8gVGhlICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyBhbgorLy8gYW5pbWF0aW9uIGN5Y2xlIGlzIHBsYXllZC4KKy8vICBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1jc3MzLWFuaW1hdGlvbnMtMjAxMzAyMTkvI2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQtcHJvcGVydHkKK2FuaW1hdGlvbl9pdGVyYXRpb25fY291bnRfbGlzdF9lbGVtZW50OgorICAgIGtJbmZpbml0ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldEluZmluaXRlKCkuZ2V0KCkpOworICB9CisgIHwgbm9uX25lZ2F0aXZlX251bWJlciB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpOdW1iZXJWYWx1ZSgkMSkpOworICB9CisgIDsKKworY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9pdGVyYXRpb25fY291bnRfbGlzdDoKKyAgICBhbmltYXRpb25faXRlcmF0aW9uX2NvdW50X2xpc3RfZWxlbWVudCB7CisgICAgJCQgPSBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCk7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9pdGVyYXRpb25fY291bnRfbGlzdCBjb21tYQorICAgICAgICBhbmltYXRpb25faXRlcmF0aW9uX2NvdW50X2xpc3RfZWxlbWVudCB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSk7CisgIH0KKyAgOworCithbmltYXRpb25faXRlcmF0aW9uX2NvdW50X3Byb3BlcnR5X3ZhbHVlOgorICAgIGNvbW1hX3NlcGFyYXRlZF9hbmltYXRpb25faXRlcmF0aW9uX2NvdW50X2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBpdGVyYXRpb25fY291bnRfbGlzdCgkMSk7CisgICAgJCQgPSBpdGVyYXRpb25fY291bnRfbGlzdAorICAgICAgICAgPyBBZGRSZWYobmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZShpdGVyYXRpb25fY291bnRfbGlzdC5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgY29tbW9uX3ZhbHVlc193aXRob3V0X2Vycm9ycworICB8IGVycm9ycyB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICBAMSwgInVuc3VwcG9ydGVkIHByb3BlcnR5IHZhbHVlIGZvciBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50Iik7CisgICAgJCQgPSBOVUxMOworICB9CisgIDsKKworLy8gVGhlICdhbmltYXRpb24tbmFtZScgcHJvcGVydHkgZGVmaW5lcyBhIGxpc3Qgb2YgYW5pbWF0aW9ucyB0aGF0IGFwcGx5LgorLy8gIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWNzczMtYW5pbWF0aW9ucy0yMDEzMDIxOS8jYW5pbWF0aW9uLW5hbWUtcHJvcGVydHkKK2FuaW1hdGlvbl9uYW1lX2xpc3RfZWxlbWVudDoKKyAgICBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrSWRlbnRpZmllclRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6U3RyaW5nVmFsdWUoJDEuVG9TdHJpbmcoKSkpOworICB9CisgIDsKKworY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9uYW1lX2xpc3Q6CisgICAgYW5pbWF0aW9uX25hbWVfbGlzdF9lbGVtZW50IHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKTsKKyAgICAkJC0+cHVzaF9iYWNrKE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKSk7CisgIH0KKyAgfCBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0aW9uX25hbWVfbGlzdCBjb21tYQorICAgICAgICBhbmltYXRpb25fbmFtZV9saXN0X2VsZW1lbnQgeworICAgICQkID0gJDE7CisgICAgJCQtPnB1c2hfYmFjayhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICB9CisgIDsKKworYW5pbWF0aW9uX25hbWVfcHJvcGVydHlfdmFsdWU6CisgICAgY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9uYW1lX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyPiBuYW1lX2xpc3QoJDEpOworICAgICQkID0gbmFtZV9saXN0CisgICAgICAgICA/IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlKG5hbWVfbGlzdC5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgY29tbW9uX3ZhbHVlc193aXRob3V0X2Vycm9ycworICB8IGVycm9ycyB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICBAMSwgInVuc3VwcG9ydGVkIHByb3BlcnR5IHZhbHVlIGZvciBhbmltYXRpb24tbmFtZSIpOworICAgICQkID0gTlVMTDsKKyAgfQorICA7CisKKy8vIFRoZSAnYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicgcHJvcGVydHkgZGVzY3JpYmVzIGhvdyB0aGUgYW5pbWF0aW9uIHdpbGwKKy8vIHByb2dyZXNzIG92ZXIgb25lIGN5Y2xlIG9mIGl0cyBkdXJhdGlvbi4KKy8vICBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1jc3MzLWFuaW1hdGlvbnMtMjAxMzAyMTkvI2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24tcHJvcGVydHkKK2FuaW1hdGlvbl90aW1pbmdfZnVuY3Rpb25fcHJvcGVydHlfdmFsdWU6IHRpbWluZ19mdW5jdGlvbl9saXN0X3Byb3BlcnR5X3ZhbHVlOworCisvLyBzaW5nbGVfYW5pbWF0aW9uX2VsZW1lbnQgcmVwcmVzZW50cyBhIGNvbXBvbmVudCBvZiBhIHNpbmdsZSBhbmltYXRpb24uCisvLyBJdCB1c2VzICQwIHRvIGFjY2VzcyBpdHMgcGFyZW50J3MgU2luZ2xlQW5pbWF0aW9uU2hvcnRoYW5kIG9iamVjdCBhbmQgYnVpbGQKKy8vIGl0LCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdGhlIHJpZ2h0IG9mIGEgc2luZ2xlX2FuaW1hdGlvbiBvYmplY3QuCitzaW5nbGVfYW5pbWF0aW9uX2VsZW1lbnQ6CisgICAga0lkZW50aWZpZXJUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBpZiAoISQ8c2luZ2xlX2FuaW1hdGlvbj4wLT5uYW1lKSB7CisgICAgICAkPHNpbmdsZV9hbmltYXRpb24+MC0+bmFtZSA9IG5ldyBjc3NvbTo6U3RyaW5nVmFsdWUoJDEuVG9TdHJpbmcoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICAgIEAxLCAiYW5pbWF0aW9uLW5hbWUgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gYW5pbWF0aW9uLiIpOworICAgIH0KKyAgfQorICB8IGFuaW1hdGlvbl9kaXJlY3Rpb25fbGlzdF9lbGVtZW50IHsKKyAgICBpZiAoISQ8c2luZ2xlX2FuaW1hdGlvbj4wLT5kaXJlY3Rpb24pIHsKKyAgICAgICQ8c2luZ2xlX2FuaW1hdGlvbj4wLT5kaXJlY3Rpb24gPSBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICAgIEAxLCAiYW5pbWF0aW9uLWRpcmVjdGlvbiB2YWx1ZSBkZWNsYXJlZCB0d2ljZSBpbiBhbmltYXRpb24uIik7CisgICAgfQorICB9CisgIHwgYW5pbWF0aW9uX2ZpbGxfbW9kZV9saXN0X2VsZW1lbnQgeworICAgIGlmICghJDxzaW5nbGVfYW5pbWF0aW9uPjAtPmZpbGxfbW9kZSkgeworICAgICAgJDxzaW5nbGVfYW5pbWF0aW9uPjAtPmZpbGxfbW9kZSA9IE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgQDEsICJhbmltYXRpb24tZmlsbC1tb2RlIHZhbHVlIGRlY2xhcmVkIHR3aWNlIGluIGFuaW1hdGlvbi4iKTsKKyAgICB9CisgIH0KKyAgfCBhbmltYXRpb25faXRlcmF0aW9uX2NvdW50X2xpc3RfZWxlbWVudCB7CisgICAgaWYgKCEkPHNpbmdsZV9hbmltYXRpb24+MC0+aXRlcmF0aW9uX2NvdW50KSB7CisgICAgICAkPHNpbmdsZV9hbmltYXRpb24+MC0+aXRlcmF0aW9uX2NvdW50ID0gTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZygKKyAgICAgICAgICBAMSwgImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gYW5pbWF0aW9uLiIpOworICAgIH0KKyAgfQorICB8IHRpbWVfd2l0aF91bml0c19yZXF1aXJlZCB7CisgICAgaWYgKCEkPHNpbmdsZV9hbmltYXRpb24+MC0+ZHVyYXRpb24pIHsKKyAgICAgIC8vIFRoZSBmaXJzdCB0aW1lIGVuY291bnRlcmVkIHNldHMgdGhlIGR1cmF0aW9uLgorICAgICAgJDxzaW5nbGVfYW5pbWF0aW9uPjAtPmR1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZSgkMSk7CisgICAgfSBlbHNlIGlmICghJDxzaW5nbGVfYW5pbWF0aW9uPjAtPmRlbGF5KSB7CisgICAgICAvLyBUaGUgc2Vjb25kIHRpbWUgZW5jb3VudGVyZWQgc2V0cyB0aGUgZGVsYXkuCisgICAgICAkPHNpbmdsZV9hbmltYXRpb24+MC0+ZGVsYXkgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKCQxKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgQDEsICJ0aW1lIHZhbHVlIGRlY2xhcmVkIHRvbyBtYW55IHRpbWVzIGluIGFuaW1hdGlvbi4iKTsKKyAgICB9CisgIH0KKyAgfCBzaW5nbGVfdGltaW5nX2Z1bmN0aW9uIG1heWJlX3doaXRlc3BhY2UgeworICAgIGlmICghJDxzaW5nbGVfYW5pbWF0aW9uPjAtPnRpbWluZ19mdW5jdGlvbikgeworICAgICAgJDxzaW5nbGVfYW5pbWF0aW9uPjAtPnRpbWluZ19mdW5jdGlvbiA9IE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgQDEsICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIHZhbHVlIGRlY2xhcmVkIHR3aWNlIGluIGFuaW1hdGlvbi4iKTsKKyAgICB9CisgIH0KKyAgfCBlcnJvciBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoQDEsICJ1bnN1cHBvcnRlZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYW5pbWF0aW9uIik7CisgICAgJDxzaW5nbGVfYW5pbWF0aW9uPjAtPmVycm9yID0gdHJ1ZTsKKyAgfQorICA7CisKK3NpbmdsZV9hbmltYXRpb246CisgICAgLyogZW1wdHkgKi8geworICAgIC8vIEluaXRpYWxpemUgdGhlIHJlc3VsdCwgdG8gYmUgZmlsbGVkIGluIGJ5IHNpbmdsZV9hbmltYXRpb25fZWxlbWVudAorICAgICQkID0gbmV3IFNpbmdsZUFuaW1hdGlvblNob3J0aGFuZCgpOworICB9CisgIHwgc2luZ2xlX25vbl9lbXB0eV9hbmltYXRpb24KKyAgOworCitzaW5nbGVfbm9uX2VtcHR5X2FuaW1hdGlvbjoKKyAgICBzaW5nbGVfYW5pbWF0aW9uIHNpbmdsZV9hbmltYXRpb25fZWxlbWVudCB7CisgICAgLy8gUHJvcGFnYXRlIHRoZSBsaXN0IGZyb20gb3VyIHBhcmVudCBzaW5nbGVfYW5pbWF0aW9uLgorICAgIC8vIHNpbmdsZV9hbmltYXRpb25fZWxlbWVudCB3aWxsIGhhdmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGFkZGluZyBpdHNlbGYKKyAgICAvLyB0byB0aGUgbGlzdCB2aWEgJDAuCisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF9hbmltYXRpb25fbGlzdDoKKyAgICBzaW5nbGVfbm9uX2VtcHR5X2FuaW1hdGlvbiB7CisgICAgc2NvcGVkX3B0cjxTaW5nbGVBbmltYXRpb25TaG9ydGhhbmQ+IHNpbmdsZV9hbmltYXRpb24oJDEpOworICAgIHNjb3BlZF9wdHI8QW5pbWF0aW9uU2hvcnRoYW5kQnVpbGRlcj4gYW5pbWF0aW9uX2J1aWxkZXIoCisgICAgICAgIG5ldyBBbmltYXRpb25TaG9ydGhhbmRCdWlsZGVyKCkpOworCisgICAgaWYgKCFzaW5nbGVfYW5pbWF0aW9uLT5lcnJvcikgeworICAgICAgc2luZ2xlX2FuaW1hdGlvbi0+UmVwbGFjZU51bGxXaXRoSW5pdGlhbFZhbHVlcygpOworCisgICAgICBhbmltYXRpb25fYnVpbGRlci0+ZGVsYXlfbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soCisgICAgICAgICAgKnNpbmdsZV9hbmltYXRpb24tPmRlbGF5KTsKKyAgICAgIGFuaW1hdGlvbl9idWlsZGVyLT5kaXJlY3Rpb25fbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soCisgICAgICAgICAgc2luZ2xlX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKTsKKyAgICAgIGFuaW1hdGlvbl9idWlsZGVyLT5kdXJhdGlvbl9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygKKyAgICAgICAgICAqc2luZ2xlX2FuaW1hdGlvbi0+ZHVyYXRpb24pOworICAgICAgYW5pbWF0aW9uX2J1aWxkZXItPmZpbGxfbW9kZV9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygKKyAgICAgICAgICBzaW5nbGVfYW5pbWF0aW9uLT5maWxsX21vZGUpOworICAgICAgYW5pbWF0aW9uX2J1aWxkZXItPml0ZXJhdGlvbl9jb3VudF9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygKKyAgICAgICAgICBzaW5nbGVfYW5pbWF0aW9uLT5pdGVyYXRpb25fY291bnQpOworICAgICAgYW5pbWF0aW9uX2J1aWxkZXItPm5hbWVfbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soCisgICAgICAgICAgc2luZ2xlX2FuaW1hdGlvbi0+bmFtZSk7CisgICAgICBhbmltYXRpb25fYnVpbGRlci0+dGltaW5nX2Z1bmN0aW9uX2xpc3RfYnVpbGRlci0+cHVzaF9iYWNrKAorICAgICAgICAgIHNpbmdsZV9hbmltYXRpb24tPnRpbWluZ19mdW5jdGlvbik7CisgICAgfQorCisgICAgJCQgPSBhbmltYXRpb25fYnVpbGRlci5yZWxlYXNlKCk7CisgIH0KKyAgfCBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0aW9uX2xpc3QgY29tbWEgc2luZ2xlX25vbl9lbXB0eV9hbmltYXRpb24geworICAgIHNjb3BlZF9wdHI8U2luZ2xlQW5pbWF0aW9uU2hvcnRoYW5kPiBzaW5nbGVfYW5pbWF0aW9uKCQzKTsKKyAgICAkJCA9ICQxOworCisgICAgaWYgKCFzaW5nbGVfYW5pbWF0aW9uLT5lcnJvcikgeworICAgICAgc2luZ2xlX2FuaW1hdGlvbi0+UmVwbGFjZU51bGxXaXRoSW5pdGlhbFZhbHVlcygpOworCisgICAgICAkJC0+ZGVsYXlfbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soKnNpbmdsZV9hbmltYXRpb24tPmRlbGF5KTsKKyAgICAgICQkLT5kaXJlY3Rpb25fbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soc2luZ2xlX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKTsKKyAgICAgICQkLT5kdXJhdGlvbl9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygqc2luZ2xlX2FuaW1hdGlvbi0+ZHVyYXRpb24pOworICAgICAgJCQtPmZpbGxfbW9kZV9saXN0X2J1aWxkZXItPnB1c2hfYmFjayhzaW5nbGVfYW5pbWF0aW9uLT5maWxsX21vZGUpOworICAgICAgJCQtPml0ZXJhdGlvbl9jb3VudF9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygKKyAgICAgICAgICBzaW5nbGVfYW5pbWF0aW9uLT5pdGVyYXRpb25fY291bnQpOworICAgICAgJCQtPm5hbWVfbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soc2luZ2xlX2FuaW1hdGlvbi0+bmFtZSk7CisgICAgICAkJC0+dGltaW5nX2Z1bmN0aW9uX2xpc3RfYnVpbGRlci0+cHVzaF9iYWNrKAorICAgICAgICAgIHNpbmdsZV9hbmltYXRpb24tPnRpbWluZ19mdW5jdGlvbik7CisgICAgfQorICB9CisgIDsKKworLy8gQW5pbWF0aW9uIHNob3J0aGFuZCBwcm9wZXJ0eS4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtY3NzMy1hbmltYXRpb25zLTIwMTMwMjE5LyNhbmltYXRpb24tc2hvcnRoYW5kLXByb3BlcnR5CithbmltYXRpb25fcHJvcGVydHlfdmFsdWU6CisgICAgY29tbWFfc2VwYXJhdGVkX2FuaW1hdGlvbl9saXN0IHsKKyAgICBzY29wZWRfcHRyPEFuaW1hdGlvblNob3J0aGFuZEJ1aWxkZXI+IGFuaW1hdGlvbl9idWlsZGVyKCQxKTsKKworICAgIGlmIChhbmltYXRpb25fYnVpbGRlci0+ZW1wdHkoKSkgeworICAgICAgWVlFUlJPUjsKKyAgICB9CisKKyAgICBzY29wZWRfcHRyPEFuaW1hdGlvblNob3J0aGFuZD4gYW5pbWF0aW9uKG5ldyBBbmltYXRpb25TaG9ydGhhbmQoKSk7CisKKyAgICBhbmltYXRpb24tPmRlbGF5X2xpc3QgPSBuZXcgY3Nzb206OlRpbWVMaXN0VmFsdWUoCisgICAgICAgIGFuaW1hdGlvbl9idWlsZGVyLT5kZWxheV9saXN0X2J1aWxkZXIuUGFzcygpKTsKKyAgICBhbmltYXRpb24tPmRpcmVjdGlvbl9saXN0ID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZSgKKyAgICAgICAgYW5pbWF0aW9uX2J1aWxkZXItPmRpcmVjdGlvbl9saXN0X2J1aWxkZXIuUGFzcygpKTsKKyAgICBhbmltYXRpb24tPmR1cmF0aW9uX2xpc3QgPSBuZXcgY3Nzb206OlRpbWVMaXN0VmFsdWUoCisgICAgICAgIGFuaW1hdGlvbl9idWlsZGVyLT5kdXJhdGlvbl9saXN0X2J1aWxkZXIuUGFzcygpKTsKKyAgICBhbmltYXRpb24tPmZpbGxfbW9kZV9saXN0ID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZSgKKyAgICAgICAgYW5pbWF0aW9uX2J1aWxkZXItPmZpbGxfbW9kZV9saXN0X2J1aWxkZXIuUGFzcygpKTsKKyAgICBhbmltYXRpb24tPml0ZXJhdGlvbl9jb3VudF9saXN0ID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZSgKKyAgICAgICAgYW5pbWF0aW9uX2J1aWxkZXItPml0ZXJhdGlvbl9jb3VudF9saXN0X2J1aWxkZXIuUGFzcygpKTsKKyAgICBhbmltYXRpb24tPm5hbWVfbGlzdCA9IG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUoCisgICAgICAgIGFuaW1hdGlvbl9idWlsZGVyLT5uYW1lX2xpc3RfYnVpbGRlci5QYXNzKCkpOworICAgIGFuaW1hdGlvbi0+dGltaW5nX2Z1bmN0aW9uX2xpc3QgPSBuZXcgY3Nzb206OlRpbWluZ0Z1bmN0aW9uTGlzdFZhbHVlKAorICAgICAgICBhbmltYXRpb25fYnVpbGRlci0+dGltaW5nX2Z1bmN0aW9uX2xpc3RfYnVpbGRlci5QYXNzKCkpOworCisgICAgJCQgPSBhbmltYXRpb24ucmVsZWFzZSgpOworICB9CisgIHwgY29tbW9uX3ZhbHVlc193aXRob3V0X2Vycm9ycyB7CisgICAgLy8gUmVwbGljYXRlIHRoZSBjb21tb24gdmFsdWUgaW50byBlYWNoIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYW5pbWF0aW9uCisgICAgLy8gaXMgYSBzaG9ydGhhbmQgZm9yLgorICAgIHNjb3BlZF9wdHI8QW5pbWF0aW9uU2hvcnRoYW5kPiBhbmltYXRpb24obmV3IEFuaW1hdGlvblNob3J0aGFuZCgpKTsKKyAgICBhbmltYXRpb24tPmRlbGF5X2xpc3QgPSAkMTsKKyAgICBhbmltYXRpb24tPmRpcmVjdGlvbl9saXN0ID0gJDE7CisgICAgYW5pbWF0aW9uLT5kdXJhdGlvbl9saXN0ID0gJDE7CisgICAgYW5pbWF0aW9uLT5maWxsX21vZGVfbGlzdCA9ICQxOworICAgIGFuaW1hdGlvbi0+aXRlcmF0aW9uX2NvdW50X2xpc3QgPSAkMTsKKyAgICBhbmltYXRpb24tPm5hbWVfbGlzdCA9ICQxOworICAgIGFuaW1hdGlvbi0+dGltaW5nX2Z1bmN0aW9uX2xpc3QgPSAkMTsKKyAgICAkJCA9IGFuaW1hdGlvbi5yZWxlYXNlKCk7CisgIH0KKyAgOworCisvLyBQYXJzZSBhIGxpc3Qgb2YgdGltZSB2YWx1ZXMgZm9yIHRyYW5zaXRpb24tZGVsYXkuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zaXRpb25zLyN0cmFuc2l0aW9uLWRlbGF5Cit0cmFuc2l0aW9uX2RlbGF5X3Byb3BlcnR5X3ZhbHVlOiB0aW1lX2xpc3RfcHJvcGVydHlfdmFsdWU7CisKKy8vIFBhcnNlIGEgbGlzdCBvZiB0aW1lIHZhbHVlcyBmb3IgdHJhbnNpdGlvbi1kdXJhdGlvbi4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNpdGlvbnMvI3RyYW5zaXRpb24tZHVyYXRpb24KK3RyYW5zaXRpb25fZHVyYXRpb25fcHJvcGVydHlfdmFsdWU6IHRpbWVfbGlzdF9wcm9wZXJ0eV92YWx1ZTsKKworLy8gUGFyc2UgYSBsaXN0IG9mIHRpbWluZyBmdW5jdGlvbiB2YWx1ZXMgZm9yIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2l0aW9ucy8jdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24tcHJvcGVydHkKK3RyYW5zaXRpb25fdGltaW5nX2Z1bmN0aW9uX3Byb3BlcnR5X3ZhbHVlOiB0aW1pbmdfZnVuY3Rpb25fbGlzdF9wcm9wZXJ0eV92YWx1ZTsKKworLy8gT25lIG9yIG1vcmUgcHJvcGVydHkgbmFtZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtdHJhbnNpdGlvbnMvI3RyYW5zaXRpb24tcHJvcGVydHkKK2NvbW1hX3NlcGFyYXRlZF9hbmltYXRhYmxlX3Byb3BlcnR5X25hbWVfbGlzdDoKKyAgICBhbmltYXRhYmxlX3Byb3BlcnR5X3Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUtleUxpc3RWYWx1ZTo6QnVpbGRlcigpOworICAgICQkLT5wdXNoX2JhY2soJDEpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX2FuaW1hdGFibGVfcHJvcGVydHlfbmFtZV9saXN0IGNvbW1hCisgICAgYW5pbWF0YWJsZV9wcm9wZXJ0eV90b2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUtleUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfbmFtZV9saXN0KCQxKTsKKyAgICBpZiAocHJvcGVydHlfbmFtZV9saXN0KSB7CisgICAgICBwcm9wZXJ0eV9uYW1lX2xpc3QtPnB1c2hfYmFjaygkMyk7CisgICAgfQorICAgICQkID0gcHJvcGVydHlfbmFtZV9saXN0LnJlbGVhc2UoKTsKKyAgfQorICB8IGVycm9ycyB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKEAxLCAidW5zdXBwb3J0ZWQgcHJvcGVydHkgdmFsdWUgZm9yIGFuaW1hdGlvbiIpOworICAgICQkID0gTlVMTDsKKyAgfQorICA7CisKKy8vIFBhcnNlIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIHByb3BlcnR5IG5hbWVzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2l0aW9ucy8jdHJhbnNpdGlvbi1wcm9wZXJ0eQordHJhbnNpdGlvbl9wcm9wZXJ0eV9wcm9wZXJ0eV92YWx1ZToKKyAgICBrTm9uZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBjb21tYV9zZXBhcmF0ZWRfYW5pbWF0YWJsZV9wcm9wZXJ0eV9uYW1lX2xpc3QgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlByb3BlcnR5S2V5TGlzdFZhbHVlOjpCdWlsZGVyPiBwcm9wZXJ0eV9uYW1lX2xpc3QoJDEpOworICAgICQkID0gcHJvcGVydHlfbmFtZV9saXN0CisgICAgICAgICA/IEFkZFJlZihuZXcgY3Nzb206OlByb3BlcnR5S2V5TGlzdFZhbHVlKHByb3BlcnR5X25hbWVfbGlzdC5QYXNzKCkpKQorICAgICAgICAgOiBOVUxMOworICB9CisgIHwgY29tbW9uX3ZhbHVlc193aXRob3V0X2Vycm9ycworICA7CisKKy8vIHNpbmdsZV90cmFuc2l0aW9uX2VsZW1lbnQgcmVwcmVzZW50cyBhIGNvbXBvbmVudCBvZiBhIHNpbmdsZSB0cmFuc2l0aW9uLgorLy8gSXQgdXNlcyAkMCB0byBhY2Nlc3MgaXRzIHBhcmVudCdzIFNpbmdsZVRyYW5zaXRpb25TaG9ydGhhbmQgb2JqZWN0IGFuZCBidWlsZAorLy8gaXQsIHNvIGl0IHNob3VsZCBhbHdheXMgYmUgdXNlZCB0byB0aGUgcmlnaHQgb2YgYSBzaW5nbGVfdHJhbnNpdGlvbiBvYmplY3QuCitzaW5nbGVfdHJhbnNpdGlvbl9lbGVtZW50OgorICAgIGFuaW1hdGFibGVfcHJvcGVydHlfdG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgaWYgKCEkPHNpbmdsZV90cmFuc2l0aW9uPjAtPnByb3BlcnR5KSB7CisgICAgICAkPHNpbmdsZV90cmFuc2l0aW9uPjAtPnByb3BlcnR5ID0gJDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICAgIEAxLCAidHJhbnNpdGlvbi1wcm9wZXJ0eSB2YWx1ZSBkZWNsYXJlZCB0d2ljZSBpbiB0cmFuc2l0aW9uLiIpOworICAgIH0KKyAgfQorICB8IGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgaWYgKCEkPHNpbmdsZV90cmFuc2l0aW9uPjAtPnByb3BlcnR5KSB7CisgICAgICAvLyBXZSB1c2UgY3Nzb206OmtOb25lUHJvcGVydHkgYXMgYSBzeW1ib2wgdGhhdCAnbm9uZScgd2FzIHNwZWNpZmllZAorICAgICAgLy8gaGVyZSBhbmQgdGhhdCB0aGUgZW50aXJlIHRyYW5zaXRpb24tcHJvcGVydHkgbGlzdCB2YWx1ZSBzaG91bGQgYmUgc2V0CisgICAgICAvLyB0byB0aGUgTm9uZSBrZXl3b3JkLgorICAgICAgJDxzaW5nbGVfdHJhbnNpdGlvbj4wLT5wcm9wZXJ0eSA9IGNzc29tOjprTm9uZVByb3BlcnR5OworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZygKKyAgICAgICAgICBAMSwgInRyYW5zaXRpb24tcHJvcGVydHkgdmFsdWUgZGVjbGFyZWQgdHdpY2UgaW4gdHJhbnNpdGlvbi4iKTsKKyAgICB9CisgIH0KKyAgfCB0aW1lIHsKKyAgICBpZiAoISQ8c2luZ2xlX3RyYW5zaXRpb24+MC0+ZHVyYXRpb24pIHsKKyAgICAgIC8vIFRoZSBmaXJzdCB0aW1lIGVuY291bnRlcmVkIHNldHMgdGhlIGR1cmF0aW9uLgorICAgICAgJDxzaW5nbGVfdHJhbnNpdGlvbj4wLT5kdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbUludGVybmFsVmFsdWUoJDEpOworICAgIH0gZWxzZSBpZiAoISQ8c2luZ2xlX3RyYW5zaXRpb24+MC0+ZGVsYXkpIHsKKyAgICAgIC8vIFRoZSBzZWNvbmQgdGltZSBlbmNvdW50ZXJlZCBzZXRzIHRoZSBkZWxheS4KKyAgICAgICQ8c2luZ2xlX3RyYW5zaXRpb24+MC0+ZGVsYXkgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKCQxKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgQDEsICJ0aW1lIHZhbHVlIGRlY2xhcmVkIHR3aWNlIGluIHRyYW5zaXRpb24uIik7CisgICAgfQorICB9CisgIHwgc2luZ2xlX3RpbWluZ19mdW5jdGlvbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBpZiAoISQ8c2luZ2xlX3RyYW5zaXRpb24+MC0+dGltaW5nX2Z1bmN0aW9uKSB7CisgICAgICAkPHNpbmdsZV90cmFuc2l0aW9uPjAtPnRpbWluZ19mdW5jdGlvbiA9IE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQxKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgQDEsICJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiB2YWx1ZSBkZWNsYXJlZCB0d2ljZSBpbiB0cmFuc2l0aW9uLiIpOworICAgIH0KKyAgfQorICB8IGVycm9yIG1heWJlX3doaXRlc3BhY2UgeworICAgIHBhcnNlcl9pbXBsLT5Mb2dFcnJvcihAMSwgInVuc3VwcG9ydGVkIHByb3BlcnR5IHZhbHVlIGZvciBhbmltYXRpb24iKTsKKyAgICAkPHNpbmdsZV90cmFuc2l0aW9uPjAtPmVycm9yID0gdHJ1ZTsKKyAgfQorICA7CisKK3NpbmdsZV90cmFuc2l0aW9uOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAvLyBJbml0aWFsaXplIHRoZSByZXN1bHQsIHRvIGJlIGZpbGxlZCBpbiBieSBzaW5nbGVfdHJhbnNpdGlvbl9lbGVtZW50CisgICAgJCQgPSBuZXcgU2luZ2xlVHJhbnNpdGlvblNob3J0aGFuZCgpOworICB9CisgIHwgc2luZ2xlX25vbl9lbXB0eV90cmFuc2l0aW9uCisgIDsKKworc2luZ2xlX25vbl9lbXB0eV90cmFuc2l0aW9uOgorICAgIHNpbmdsZV90cmFuc2l0aW9uIHNpbmdsZV90cmFuc2l0aW9uX2VsZW1lbnQgeworICAgIC8vIFByb3BhZ2F0ZSB0aGUgbGlzdCBmcm9tIG91ciBwYXJlbnQgc2luZ2xlX3RyYW5zaXRpb24uCisgICAgLy8gc2luZ2xlX3RyYW5zaXRpb25fZWxlbWVudCB3aWxsIGhhdmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGFkZGluZyBpdHNlbGYKKyAgICAvLyB0byB0aGUgbGlzdCB2aWEgJDAuCisgICAgJCQgPSAkMTsKKyAgfQorICA7CisKK2NvbW1hX3NlcGFyYXRlZF90cmFuc2l0aW9uX2xpc3Q6CisgICAgc2luZ2xlX25vbl9lbXB0eV90cmFuc2l0aW9uIHsKKyAgICBzY29wZWRfcHRyPFNpbmdsZVRyYW5zaXRpb25TaG9ydGhhbmQ+IHNpbmdsZV90cmFuc2l0aW9uKCQxKTsKKyAgICBzY29wZWRfcHRyPFRyYW5zaXRpb25TaG9ydGhhbmRCdWlsZGVyPiB0cmFuc2l0aW9uX2J1aWxkZXIoCisgICAgICAgIG5ldyBUcmFuc2l0aW9uU2hvcnRoYW5kQnVpbGRlcigpKTsKKworICAgIGlmICghc2luZ2xlX3RyYW5zaXRpb24tPmVycm9yKSB7CisgICAgICBzaW5nbGVfdHJhbnNpdGlvbi0+UmVwbGFjZU51bGxXaXRoSW5pdGlhbFZhbHVlcygpOworCisgICAgICB0cmFuc2l0aW9uX2J1aWxkZXItPnByb3BlcnR5X2xpc3RfYnVpbGRlci0+cHVzaF9iYWNrKAorICAgICAgICAgICpzaW5nbGVfdHJhbnNpdGlvbi0+cHJvcGVydHkpOworICAgICAgdHJhbnNpdGlvbl9idWlsZGVyLT5kdXJhdGlvbl9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygKKyAgICAgICAgICAqc2luZ2xlX3RyYW5zaXRpb24tPmR1cmF0aW9uKTsKKyAgICAgIHRyYW5zaXRpb25fYnVpbGRlci0+dGltaW5nX2Z1bmN0aW9uX2xpc3RfYnVpbGRlci0+cHVzaF9iYWNrKAorICAgICAgICAgIHNpbmdsZV90cmFuc2l0aW9uLT50aW1pbmdfZnVuY3Rpb24pOworICAgICAgdHJhbnNpdGlvbl9idWlsZGVyLT5kZWxheV9saXN0X2J1aWxkZXItPnB1c2hfYmFjaygKKyAgICAgICAgICAqc2luZ2xlX3RyYW5zaXRpb24tPmRlbGF5KTsKKyAgICB9CisKKyAgICAkJCA9IHRyYW5zaXRpb25fYnVpbGRlci5yZWxlYXNlKCk7CisgIH0KKyAgfCBjb21tYV9zZXBhcmF0ZWRfdHJhbnNpdGlvbl9saXN0IGNvbW1hIHNpbmdsZV9ub25fZW1wdHlfdHJhbnNpdGlvbiB7CisgICAgc2NvcGVkX3B0cjxTaW5nbGVUcmFuc2l0aW9uU2hvcnRoYW5kPiBzaW5nbGVfdHJhbnNpdGlvbigkMyk7CisgICAgJCQgPSAkMTsKKworICAgIGlmICghc2luZ2xlX3RyYW5zaXRpb24tPmVycm9yKSB7CisgICAgICBzaW5nbGVfdHJhbnNpdGlvbi0+UmVwbGFjZU51bGxXaXRoSW5pdGlhbFZhbHVlcygpOworCisgICAgICAkJC0+cHJvcGVydHlfbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soKnNpbmdsZV90cmFuc2l0aW9uLT5wcm9wZXJ0eSk7CisgICAgICAkJC0+ZHVyYXRpb25fbGlzdF9idWlsZGVyLT5wdXNoX2JhY2soKnNpbmdsZV90cmFuc2l0aW9uLT5kdXJhdGlvbik7CisgICAgICAkJC0+dGltaW5nX2Z1bmN0aW9uX2xpc3RfYnVpbGRlci0+cHVzaF9iYWNrKAorICAgICAgICAgIHNpbmdsZV90cmFuc2l0aW9uLT50aW1pbmdfZnVuY3Rpb24pOworICAgICAgJCQtPmRlbGF5X2xpc3RfYnVpbGRlci0+cHVzaF9iYWNrKCpzaW5nbGVfdHJhbnNpdGlvbi0+ZGVsYXkpOworICAgIH0KKyAgfQorICA7CisKKy8vIFRyYW5zaXRpb24gc2hvcnRoYW5kIHByb3BlcnR5LgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2l0aW9ucy8jdHJhbnNpdGlvbgordHJhbnNpdGlvbl9wcm9wZXJ0eV92YWx1ZToKKyAgICBjb21tYV9zZXBhcmF0ZWRfdHJhbnNpdGlvbl9saXN0IHsKKyAgICBzY29wZWRfcHRyPFRyYW5zaXRpb25TaG9ydGhhbmRCdWlsZGVyPiB0cmFuc2l0aW9uX2J1aWxkZXIoJDEpOworCisgICAgLy8gQmVmb3JlIHByb2NlZWRpbmcsIGNoZWNrIHRoYXQgJ25vbmUnIGlzIG5vdCBzcGVjaWZpZWQgaWYgdGhlCisgICAgLy8gbnVtYmVyIG9mIHRyYW5zaXRpb24gc3RhdGVtZW50cyBpcyBsYXJnZXIgdGhhbiAxLCBhcyBwZXIgdGhlCisgICAgLy8gc3BlY2lmaWNhdGlvbi4KKyAgICBjb25zdCBjc3NvbTo6UHJvcGVydHlLZXlMaXN0VmFsdWU6OkJ1aWxkZXImIHByb3BlcnR5X2xpc3RfYnVpbGRlciA9CisgICAgICAgICoodHJhbnNpdGlvbl9idWlsZGVyLT5wcm9wZXJ0eV9saXN0X2J1aWxkZXIpOworICAgIGlmIChwcm9wZXJ0eV9saXN0X2J1aWxkZXIuc2l6ZSgpID4gMSkgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KHByb3BlcnR5X2xpc3RfYnVpbGRlci5zaXplKCkpOyArK2kpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5X2xpc3RfYnVpbGRlcltpXSA9PSBjc3NvbTo6a05vbmVQcm9wZXJ0eSkgeworICAgICAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICAgICAgICBAMSwgIklmICdub25lJyBpcyBzcGVjaWZpZWQsIHRyYW5zaXRpb24gY2FuIG9ubHkgaGF2ZSBvbmUgaXRlbS4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHNjb3BlZF9wdHI8VHJhbnNpdGlvblNob3J0aGFuZD4gdHJhbnNpdGlvbihuZXcgVHJhbnNpdGlvblNob3J0aGFuZCgpKTsKKworICAgIGlmIChwcm9wZXJ0eV9saXN0X2J1aWxkZXIuZW1wdHkoKSB8fAorICAgICAgICAocHJvcGVydHlfbGlzdF9idWlsZGVyLnNpemUoKSA9PSAxICYmCisgICAgICAgICBwcm9wZXJ0eV9saXN0X2J1aWxkZXJbMF0gPT0gY3Nzb206OmtOb25lUHJvcGVydHkpKSB7CisgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eV9saXN0ID0gY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eV9saXN0ID0gbmV3IGNzc29tOjpQcm9wZXJ0eUtleUxpc3RWYWx1ZSgKKyAgICAgICAgICB0cmFuc2l0aW9uX2J1aWxkZXItPnByb3BlcnR5X2xpc3RfYnVpbGRlci5QYXNzKCkpOworICAgIH0KKyAgICBpZiAoIXRyYW5zaXRpb25fYnVpbGRlci0+ZHVyYXRpb25fbGlzdF9idWlsZGVyLT5lbXB0eSgpKSB7CisgICAgICB0cmFuc2l0aW9uLT5kdXJhdGlvbl9saXN0ID0gbmV3IGNzc29tOjpUaW1lTGlzdFZhbHVlKAorICAgICAgICAgIHRyYW5zaXRpb25fYnVpbGRlci0+ZHVyYXRpb25fbGlzdF9idWlsZGVyLlBhc3MoKSk7CisgICAgfQorICAgIGlmICghdHJhbnNpdGlvbl9idWlsZGVyLT50aW1pbmdfZnVuY3Rpb25fbGlzdF9idWlsZGVyLT5lbXB0eSgpKSB7CisgICAgICB0cmFuc2l0aW9uLT50aW1pbmdfZnVuY3Rpb25fbGlzdCA9IG5ldyBjc3NvbTo6VGltaW5nRnVuY3Rpb25MaXN0VmFsdWUoCisgICAgICAgICAgdHJhbnNpdGlvbl9idWlsZGVyLT50aW1pbmdfZnVuY3Rpb25fbGlzdF9idWlsZGVyLlBhc3MoKSk7CisgICAgfQorICAgIGlmICghdHJhbnNpdGlvbl9idWlsZGVyLT5kZWxheV9saXN0X2J1aWxkZXItPmVtcHR5KCkpIHsKKyAgICAgIHRyYW5zaXRpb24tPmRlbGF5X2xpc3QgPSBuZXcgY3Nzb206OlRpbWVMaXN0VmFsdWUoCisgICAgICAgICAgdHJhbnNpdGlvbl9idWlsZGVyLT5kZWxheV9saXN0X2J1aWxkZXIuUGFzcygpKTsKKyAgICB9CisKKyAgICAkJCA9IHRyYW5zaXRpb24ucmVsZWFzZSgpOworICB9CisgIHwgY29tbW9uX3ZhbHVlc193aXRob3V0X2Vycm9ycyB7CisgICAgLy8gUmVwbGljYXRlIHRoZSBjb21tb24gdmFsdWUgaW50byBlYWNoIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgdHJhbnNpdGlvbgorICAgIC8vIGlzIGEgc2hvcnRoYW5kIGZvci4KKyAgICBzY29wZWRfcHRyPFRyYW5zaXRpb25TaG9ydGhhbmQ+IHRyYW5zaXRpb24obmV3IFRyYW5zaXRpb25TaG9ydGhhbmQoKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlfbGlzdCA9ICQxOworICAgIHRyYW5zaXRpb24tPmR1cmF0aW9uX2xpc3QgPSAkMTsKKyAgICB0cmFuc2l0aW9uLT50aW1pbmdfZnVuY3Rpb25fbGlzdCA9ICQxOworICAgIHRyYW5zaXRpb24tPmRlbGF5X2xpc3QgPSAkMTsKKyAgICAkJCA9IHRyYW5zaXRpb24ucmVsZWFzZSgpOworICB9CisgIDsKKwordW5pY29kZV9yYW5nZV9wcm9wZXJ0eV92YWx1ZToKKyAgICBjb21tYV9zZXBhcmF0ZWRfdW5pY29kZV9yYW5nZV9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoJDEpOworICAgICQkID0gcHJvcGVydHlfdmFsdWUKKyAgICAgICAgID8gQWRkUmVmKG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWUocHJvcGVydHlfdmFsdWUuUGFzcygpKSkKKyAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCitjb21tYV9zZXBhcmF0ZWRfdW5pY29kZV9yYW5nZV9saXN0OgorICAgIGtVbmljb2RlUmFuZ2VUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6UHJvcGVydHlMaXN0VmFsdWU6OkJ1aWxkZXIoKTsKKyAgICAkJC0+cHVzaF9iYWNrKG5ldyBjc3NvbTo6VW5pY29kZVJhbmdlVmFsdWUoJDEuZmlyc3QsICQxLnNlY29uZCkpOworICB9CisgIHwgY29tbWFfc2VwYXJhdGVkX3VuaWNvZGVfcmFuZ2VfbGlzdCBjb21tYSBrVW5pY29kZVJhbmdlVG9rZW4KKyAgICAgICAgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKG5ldyBjc3NvbTo6VW5pY29kZVJhbmdlVmFsdWUoJDMuZmlyc3QsICQzLnNlY29uZCkpOworICB9CisgIDsKKworLy8gVGhpcyBwcm9wZXJ0eSBkZWNsYXJlcyBob3cgd2hpdGUgc3BhY2UgaW5zaWRlIHRoZSBlbGVtZW50IGlzIGhhbmRsZWQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvI3doaXRlLXNwYWNlLXByb3BlcnR5Cit3aGl0ZV9zcGFjZV9wcm9wZXJ0eV92YWx1ZToKKyAgICBrTm9ybWFsVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9ybWFsKCkuZ2V0KCkpOworICB9CisgIHwga05vV3JhcFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE5vV3JhcCgpLmdldCgpKTsKKyAgfQorICB8IGtQcmVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRQcmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrUHJlTGluZVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFByZUxpbmUoKS5nZXQoKSk7CisgIH0KKyAgfCBrUHJlV3JhcFRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFByZVdyYXAoKS5nZXQoKSk7CisgIH0KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gU3BlY2lmaWVzIHRoZSBjb250ZW50IHdpZHRoIG9mIGJveGVzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvdmlzdWRldC5odG1sI3RoZS13aWR0aC1wcm9wZXJ0eQord2lkdGhfcHJvcGVydHlfdmFsdWU6CisgICAgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBhdXRvCisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKKy8vIFNwZWNpZmllcyB0aGUgbWluaW11bSBjb250ZW50IHdpZHRoIG9mIGJveGVzLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMi92aXN1ZGV0Lmh0bWwjcHJvcGRlZi1taW4td2lkdGgKK21pbl93aWR0aF9wcm9wZXJ0eV92YWx1ZToKKyAgICBwb3NpdGl2ZV9sZW5ndGhfcGVyY2VudF9wcm9wZXJ0eV92YWx1ZQorICB8IGNvbW1vbl92YWx1ZXMKKyAgOworCisvLyBTcGVjaWZpZXMgdGhlIG1heGltdW0gY29udGVudCB3aWR0aCBvZiBib3hlcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIvdmlzdWRldC5odG1sI3Byb3BkZWYtbWF4LXdpZHRoCittYXhfd2lkdGhfcHJvcGVydHlfdmFsdWU6CisgICAga05vbmVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXROb25lKCkuZ2V0KCkpOworICB9CisgIHwgcG9zaXRpdmVfbGVuZ3RoX3BlcmNlbnRfcHJvcGVydHlfdmFsdWUKKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworbWF5YmVfaW1wb3J0YW50OgorICAgIC8qIGVtcHR5ICovIHsgJCQgPSBmYWxzZTsgfQorICB8IGtJbXBvcnRhbnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsgJCQgPSB0cnVlOyB9CisgIDsKKworel9pbmRleF9wcm9wZXJ0eV92YWx1ZToKKyAgaW50ZWdlciB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpJbnRlZ2VyVmFsdWUoJDEpKTsKKyAgfQorICB8IGF1dG8KKyAgfCBjb21tb25fdmFsdWVzCisgIDsKKworLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKy8vIEFuaW1hdGFibGUgcHJvcGVydGllcy4KKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisKKy8vIFNvbWUgcHJvcGVydHkgbmFtZSBpZGVudGlmaWVycyBjYW4gYmUgc3BlY2lmaWVkIGFzIGFuaW1hdGlvbnMsIGVpdGhlciBieQorLy8gQ1NTIGFuaW1hdGlvbnMgb3IgQ1NTIHRyYW5zaXRpb25zLiAgV2UgZXhwbGljaXRseSBsaXN0IHRoZW0gaGVyZSBmb3IgdXNlCisvLyBpbiBhbmltYXRhYmxlIHByb3BlcnR5IGxpc3RzLgorLy8gTm90ZSB0aGF0IGZvciBDb2JhbHQgd2UgbW9kaWZ5IHRoaXMgbGlzdCB0byBjb250YWluIG9ubHkgdGhlIHByb3BlcnRpZXMgdGhhdAorLy8gYXJlIHN1cHBvcnRlZCBmb3IgYW5pbWF0aW9ucyBpbiBDb2JhbHQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRyYW5zaXRpb25zLyNhbmltYXRhYmxlLWNzcworYW5pbWF0YWJsZV9wcm9wZXJ0eV90b2tlbjoKKyAgICBrQWxsVG9rZW4geworICAgICQkID0gY3Nzb206OmtBbGxQcm9wZXJ0eTsKKyAgfQorICB8IGtCYWNrZ3JvdW5kQ29sb3JUb2tlbiB7CisgICAgJCQgPSBjc3NvbTo6a0JhY2tncm91bmRDb2xvclByb3BlcnR5OworICB9CisgIHwga0JvcmRlckJvdHRvbUNvbG9yVG9rZW4geworICAgICQkID0gY3Nzb206OmtCb3JkZXJCb3R0b21Db2xvclByb3BlcnR5OworICB9CisgIHwga0JvcmRlckxlZnRDb2xvclRva2VuIHsKKyAgICAkJCA9IGNzc29tOjprQm9yZGVyTGVmdENvbG9yUHJvcGVydHk7CisgIH0KKyAgfCBrQm9yZGVyUmlnaHRDb2xvclRva2VuIHsKKyAgICAkJCA9IGNzc29tOjprQm9yZGVyUmlnaHRDb2xvclByb3BlcnR5OworICB9CisgIHwga0JvcmRlclRvcENvbG9yVG9rZW4geworICAgICQkID0gY3Nzb206OmtCb3JkZXJUb3BDb2xvclByb3BlcnR5OworICB9CisgIHwga0NvbG9yVG9rZW4geworICAgICQkID0gY3Nzb206OmtDb2xvclByb3BlcnR5OworICB9CisgIHwga09wYWNpdHlUb2tlbiB7CisgICAgJCQgPSBjc3NvbTo6a09wYWNpdHlQcm9wZXJ0eTsKKyAgfQorICB8IGtPdXRsaW5lQ29sb3JUb2tlbiB7CisgICAgJCQgPSBjc3NvbTo6a091dGxpbmVDb2xvclByb3BlcnR5OworICB9CisgIHwga091dGxpbmVXaWR0aFRva2VuIHsKKyAgICAkJCA9IGNzc29tOjprT3V0bGluZVdpZHRoUHJvcGVydHk7CisgIH0KKyAgfCBrVHJhbnNmb3JtVG9rZW4geworICAgICQkID0gY3Nzb206OmtUcmFuc2Zvcm1Qcm9wZXJ0eTsKKyAgfQorICA7CisKKworLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKy8vIERlY2xhcmF0aW9ucy4KKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisKKy8vIENvbnN1bWUgYSBkZWNsYXJhdGlvbi4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjb25zdW1lLWEtZGVjbGFyYXRpb24wCittYXliZV9kZWNsYXJhdGlvbjoKKyAgICAvKiBlbXB0eSAqLyB7ICQkID0gTlVMTDsgfQorICB8IGtBbmltYXRpb25EZWxheVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICAgIGFuaW1hdGlvbl9kZWxheV9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0FuaW1hdGlvbkRlbGF5UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQW5pbWF0aW9uRGlyZWN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYW5pbWF0aW9uX2RpcmVjdGlvbl9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0FuaW1hdGlvbkRpcmVjdGlvblByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0FuaW1hdGlvbkR1cmF0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYW5pbWF0aW9uX2R1cmF0aW9uX3Byb3BlcnR5X3ZhbHVlIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQW5pbWF0aW9uRHVyYXRpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtBbmltYXRpb25GaWxsTW9kZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICAgIGFuaW1hdGlvbl9maWxsX21vZGVfcHJvcGVydHlfdmFsdWUgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtBbmltYXRpb25GaWxsTW9kZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYW5pbWF0aW9uX2l0ZXJhdGlvbl9jb3VudF9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQW5pbWF0aW9uTmFtZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICAgIGFuaW1hdGlvbl9uYW1lX3Byb3BlcnR5X3ZhbHVlIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQW5pbWF0aW9uTmFtZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYW5pbWF0aW9uX3RpbWluZ19mdW5jdGlvbl9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQW5pbWF0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYW5pbWF0aW9uX3Byb3BlcnR5X3ZhbHVlIG1heWJlX2ltcG9ydGFudCB7CisgICAgc2NvcGVkX3B0cjxBbmltYXRpb25TaG9ydGhhbmQ+IGFuaW1hdGlvbigkNCk7CisgICAgRENIRUNLKGFuaW1hdGlvbik7CisKKyAgICBzY29wZWRfcHRyPFByb3BlcnR5RGVjbGFyYXRpb24+IHByb3BlcnR5X2RlY2xhcmF0aW9uKAorICAgICAgICBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbigkNSkpOworCisgICAgLy8gVW5wYWNrIHRoZSBhbmltYXRpb24gc2hvcnRoYW5kIHByb3BlcnR5IHZhbHVlcy4KKyAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICBjc3NvbTo6a0FuaW1hdGlvbkRlbGF5UHJvcGVydHksCisgICAgICAgICAgICBhbmltYXRpb24tPmRlbGF5X2xpc3QpKTsKKyAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICBjc3NvbTo6a0FuaW1hdGlvbkRpcmVjdGlvblByb3BlcnR5LAorICAgICAgICAgICAgYW5pbWF0aW9uLT5kaXJlY3Rpb25fbGlzdCkpOworICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgIGNzc29tOjprQW5pbWF0aW9uRHVyYXRpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+ZHVyYXRpb25fbGlzdCkpOworICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgIGNzc29tOjprQW5pbWF0aW9uRmlsbE1vZGVQcm9wZXJ0eSwKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+ZmlsbF9tb2RlX2xpc3QpKTsKKyAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICBjc3NvbTo6a0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50UHJvcGVydHksCisgICAgICAgICAgICBhbmltYXRpb24tPml0ZXJhdGlvbl9jb3VudF9saXN0KSk7CisgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgY3Nzb206OmtBbmltYXRpb25OYW1lUHJvcGVydHksCisgICAgICAgICAgICBhbmltYXRpb24tPm5hbWVfbGlzdCkpOworICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgIGNzc29tOjprQW5pbWF0aW9uVGltaW5nRnVuY3Rpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+dGltaW5nX2Z1bmN0aW9uX2xpc3QpKTsKKworICAgICQkID0gcHJvcGVydHlfZGVjbGFyYXRpb24ucmVsZWFzZSgpOworICB9CisgIHwga0JhY2tncm91bmRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJhY2tncm91bmRfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgc2NvcGVkX3B0cjxCYWNrZ3JvdW5kU2hvcnRoYW5kTGF5ZXI+IGJhY2tncm91bmQoJDQpOworICAgIGlmIChiYWNrZ3JvdW5kICYmICFiYWNrZ3JvdW5kLT5lcnJvcikgeworICAgICAgYmFja2dyb3VuZC0+UmVwbGFjZU51bGxXaXRoSW5pdGlhbFZhbHVlcygpOworICAgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgICBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbigkNSkpOworCisgICAgICAvLyBVbnBhY2sgdGhlIGJhY2tncm91bmQgc2hvcnRoYW5kIHByb3BlcnR5IHZhbHVlcy4KKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JhY2tncm91bmRDb2xvclByb3BlcnR5LAorICAgICAgICAgICAgICBiYWNrZ3JvdW5kLT5iYWNrZ3JvdW5kX2NvbG9yKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCYWNrZ3JvdW5kSW1hZ2VQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgYmFja2dyb3VuZC0+YmFja2dyb3VuZF9pbWFnZSkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQmFja2dyb3VuZFBvc2l0aW9uUHJvcGVydHksCisgICAgICAgICAgICAgIGJhY2tncm91bmQtPmJhY2tncm91bmRfcG9zaXRpb24pKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JhY2tncm91bmRSZXBlYXRQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgYmFja2dyb3VuZC0+YmFja2dyb3VuZF9yZXBlYXQpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JhY2tncm91bmRTaXplUHJvcGVydHksCisgICAgICAgICAgICAgIGJhY2tncm91bmQtPmJhY2tncm91bmRfc2l6ZSkpOworCisgICAgICAkJCA9IHByb3BlcnR5X2RlY2xhcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGtCYWNrZ3JvdW5kQ29sb3JUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJhY2tncm91bmRfY29sb3JfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQmFja2dyb3VuZENvbG9yUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQmFja2dyb3VuZEltYWdlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBiYWNrZ3JvdW5kX2ltYWdlX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0JhY2tncm91bmRJbWFnZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JhY2tncm91bmRQb3NpdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICBiYWNrZ3JvdW5kX3Bvc2l0aW9uX3Byb3BlcnR5X3ZhbHVlIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQmFja2dyb3VuZFBvc2l0aW9uUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQmFja2dyb3VuZFJlcGVhdFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICBiYWNrZ3JvdW5kX3JlcGVhdF9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0JhY2tncm91bmRSZXBlYXRQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtCYWNrZ3JvdW5kU2l6ZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gYmFja2dyb3VuZF9zaXplX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0JhY2tncm91bmRTaXplUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICBzY29wZWRfcHRyPEJvcmRlck9yT3V0bGluZVNob3J0aGFuZD4gYm9yZGVyKCQ0KTsKKyAgICBEQ0hFQ0soYm9yZGVyKTsKKyAgICBpZiAoIWJvcmRlci0+ZXJyb3IpIHsKKyAgICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oCisgICAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgICAgLy8gVW5wYWNrIGJvcmRlciBjb2xvci4KKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclRvcENvbG9yUHJvcGVydHksIGJvcmRlci0+Y29sb3IpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclJpZ2h0Q29sb3JQcm9wZXJ0eSwgYm9yZGVyLT5jb2xvcikpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyQm90dG9tQ29sb3JQcm9wZXJ0eSwgYm9yZGVyLT5jb2xvcikpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyTGVmdENvbG9yUHJvcGVydHksIGJvcmRlci0+Y29sb3IpKTsKKworICAgICAgLy8gVW5wYWNrIGJvcmRlciBzdHlsZS4KKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclRvcFN0eWxlUHJvcGVydHksIGJvcmRlci0+c3R5bGUpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclJpZ2h0U3R5bGVQcm9wZXJ0eSwgYm9yZGVyLT5zdHlsZSkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyQm90dG9tU3R5bGVQcm9wZXJ0eSwgYm9yZGVyLT5zdHlsZSkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyTGVmdFN0eWxlUHJvcGVydHksIGJvcmRlci0+c3R5bGUpKTsKKworICAgICAgLy8gVW5wYWNrIGJvcmRlciB3aWR0aC4KKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclRvcFdpZHRoUHJvcGVydHksIGJvcmRlci0+d2lkdGgpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclJpZ2h0V2lkdGhQcm9wZXJ0eSwgYm9yZGVyLT53aWR0aCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyQm90dG9tV2lkdGhQcm9wZXJ0eSwgYm9yZGVyLT53aWR0aCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyTGVmdFdpZHRoUHJvcGVydHksIGJvcmRlci0+d2lkdGgpKTsKKworICAgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAiaW52YWxpZCBib3JkZXIiKTsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBrQm9yZGVyQm90dG9tTGVmdFJhZGl1c1Rva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gYm9yZGVyX3JhZGl1c19lbGVtZW50X3dpdGhfY29tbW9uX3ZhbHVlcworICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJCb3R0b21MZWZ0UmFkaXVzUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyQm90dG9tUmlnaHRSYWRpdXNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJvcmRlcl9yYWRpdXNfZWxlbWVudF93aXRoX2NvbW1vbl92YWx1ZXMKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQm9yZGVyQm90dG9tUmlnaHRSYWRpdXNQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtCb3JkZXJCb3R0b21Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJvcmRlcl9vcl9vdXRsaW5lX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgIHNjb3BlZF9wdHI8Qm9yZGVyT3JPdXRsaW5lU2hvcnRoYW5kPiBib3JkZXIoJDQpOworICAgIERDSEVDSyhib3JkZXIpOworICAgIGlmICghYm9yZGVyLT5lcnJvcikgeworICAgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgICBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbigkNSkpOworCisgICAgICAvLyBVbnBhY2sgYm9yZGVyIGJvdHRvbS4KKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlckJvdHRvbUNvbG9yUHJvcGVydHksIGJvcmRlci0+Y29sb3IpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlckJvdHRvbVN0eWxlUHJvcGVydHksIGJvcmRlci0+c3R5bGUpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlckJvdHRvbVdpZHRoUHJvcGVydHksIGJvcmRlci0+d2lkdGgpKTsKKworICAgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKEAxLCAiaW52YWxpZCBib3JkZXItYm90dG9tIik7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwga0JvcmRlckJvdHRvbUNvbG9yVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBjb2xvcl9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJCb3R0b21Db2xvclByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JvcmRlckJvdHRvbVN0eWxlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBsaW5lX3N0eWxlX3dpdGhfY29tbW9uX3ZhbHVlcworICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJCb3R0b21TdHlsZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JvcmRlckJvdHRvbVdpZHRoVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYm9yZGVyX3dpZHRoX2VsZW1lbnRfd2l0aF9jb21tb25fdmFsdWVzIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQm9yZGVyQm90dG9tV2lkdGhQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtCb3JkZXJDb2xvclRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gYm9yZGVyX2NvbG9yX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlByb3BlcnR5VmFsdWU+IHByb3BlcnR5X2xpc3RfdmFsdWUoCisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSk7CisgICAgaWYgKHByb3BlcnR5X2xpc3RfdmFsdWUpIHsKKyAgICAgIEJvcmRlclNob3J0aGFuZFRvTG9uZ2hhbmQgc2hvcnRoYW5kX3RvX2xvbmdoYW5kOworICAgICAgc2hvcnRoYW5kX3RvX2xvbmdoYW5kLkFzc2lnbjRCb3JkZXJzQmFzZWRPblByb3BlcnR5TGlzdCgKKyAgICAgICAgICAgIHByb3BlcnR5X2xpc3RfdmFsdWUpOworCisgICAgICBzY29wZWRfcHRyPFByb3BlcnR5RGVjbGFyYXRpb24+IHByb3BlcnR5X2RlY2xhcmF0aW9uKAorICAgICAgICAgIG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKCQ1KSk7CisKKyAgICAgIC8vIFVucGFjayBib3JkZXIgY29sb3IuCisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJUb3BDb2xvclByb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX3RvcCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyUmlnaHRDb2xvclByb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX3JpZ2h0KSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJCb3R0b21Db2xvclByb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX2JvdHRvbSkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyTGVmdENvbG9yUHJvcGVydHksCisgICAgICAgICAgICAgIHNob3J0aGFuZF90b19sb25naGFuZC5ib3JkZXJfbGVmdCkpOworCisgICAgICAkJCA9IHByb3BlcnR5X2RlY2xhcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGtCb3JkZXJMZWZ0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICBzY29wZWRfcHRyPEJvcmRlck9yT3V0bGluZVNob3J0aGFuZD4gYm9yZGVyKCQ0KTsKKyAgICBEQ0hFQ0soYm9yZGVyKTsKKyAgICBpZiAoIWJvcmRlci0+ZXJyb3IpIHsKKyAgICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oCisgICAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgICAgLy8gVW5wYWNrIGJvcmRlciBsZWZ0LgorICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyTGVmdENvbG9yUHJvcGVydHksIGJvcmRlci0+Y29sb3IpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlckxlZnRTdHlsZVByb3BlcnR5LCBib3JkZXItPnN0eWxlKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJMZWZ0V2lkdGhQcm9wZXJ0eSwgYm9yZGVyLT53aWR0aCkpOworCisgICAgICAkJCA9IHByb3BlcnR5X2RlY2xhcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJpbnZhbGlkIGJvcmRlci1sZWZ0Iik7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwga0JvcmRlckxlZnRDb2xvclRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gY29sb3JfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQm9yZGVyTGVmdENvbG9yUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyTGVmdFN0eWxlVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBsaW5lX3N0eWxlX3dpdGhfY29tbW9uX3ZhbHVlcworICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJMZWZ0U3R5bGVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtCb3JkZXJMZWZ0V2lkdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgICBib3JkZXJfd2lkdGhfZWxlbWVudF93aXRoX2NvbW1vbl92YWx1ZXMgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJMZWZ0V2lkdGhQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtCb3JkZXJSYWRpdXNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJvcmRlcl9yYWRpdXNfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gcHJvcGVydHlfbGlzdF92YWx1ZSgKKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpKTsKKyAgICBpZiAocHJvcGVydHlfbGlzdF92YWx1ZSkgeworICAgICAgQm9yZGVyU2hvcnRoYW5kVG9Mb25naGFuZCBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQ7CisgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuQXNzaWduNEJvcmRlcnNCYXNlZE9uUHJvcGVydHlMaXN0KAorICAgICAgICAgICAgcHJvcGVydHlfbGlzdF92YWx1ZSk7CisKKyAgICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oCisgICAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgICAgLy8gVW5wYWNrIGJvcmRlciByYWRpdXMuCisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJUb3BMZWZ0UmFkaXVzUHJvcGVydHksCisgICAgICAgICAgICAgIHNob3J0aGFuZF90b19sb25naGFuZC5ib3JkZXJfdG9wKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJUb3BSaWdodFJhZGl1c1Byb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX3JpZ2h0KSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJCb3R0b21SaWdodFJhZGl1c1Byb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX2JvdHRvbSkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyQm90dG9tTGVmdFJhZGl1c1Byb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX2xlZnQpKTsKKworICAgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBrQm9yZGVyUmlnaHRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJvcmRlcl9vcl9vdXRsaW5lX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgIHNjb3BlZF9wdHI8Qm9yZGVyT3JPdXRsaW5lU2hvcnRoYW5kPiBib3JkZXIoJDQpOworICAgIERDSEVDSyhib3JkZXIpOworICAgIGlmICghYm9yZGVyLT5lcnJvcikgeworICAgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgICBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbigkNSkpOworCisgICAgICAvLyBVbnBhY2sgYm9yZGVyIHJpZ2h0LgorICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyUmlnaHRDb2xvclByb3BlcnR5LCBib3JkZXItPmNvbG9yKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJSaWdodFN0eWxlUHJvcGVydHksIGJvcmRlci0+c3R5bGUpKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclJpZ2h0V2lkdGhQcm9wZXJ0eSwgYm9yZGVyLT53aWR0aCkpOworCisgICAgICAkJCA9IHByb3BlcnR5X2RlY2xhcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJpbnZhbGlkIGJvcmRlci1yaWdodCIpOworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGtCb3JkZXJSaWdodENvbG9yVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBjb2xvcl9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJSaWdodENvbG9yUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyUmlnaHRTdHlsZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbGluZV9zdHlsZV93aXRoX2NvbW1vbl92YWx1ZXMKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQm9yZGVyUmlnaHRTdHlsZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JvcmRlclJpZ2h0V2lkdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgICBib3JkZXJfd2lkdGhfZWxlbWVudF93aXRoX2NvbW1vbl92YWx1ZXMgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJSaWdodFdpZHRoUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyU3R5bGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJvcmRlcl9zdHlsZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpQcm9wZXJ0eVZhbHVlPiBwcm9wZXJ0eV9saXN0X3ZhbHVlKAorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCkpOworICAgIGlmIChwcm9wZXJ0eV9saXN0X3ZhbHVlKSB7CisgICAgICBCb3JkZXJTaG9ydGhhbmRUb0xvbmdoYW5kIHNob3J0aGFuZF90b19sb25naGFuZDsKKyAgICAgIHNob3J0aGFuZF90b19sb25naGFuZC5Bc3NpZ240Qm9yZGVyc0Jhc2VkT25Qcm9wZXJ0eUxpc3QoCisgICAgICAgICAgICBwcm9wZXJ0eV9saXN0X3ZhbHVlKTsKKworICAgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgICBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbigkNSkpOworCisgICAgICAvLyBVbnBhY2sgYm9yZGVyIHN0eWxlLgorICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyVG9wU3R5bGVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgc2hvcnRoYW5kX3RvX2xvbmdoYW5kLmJvcmRlcl90b3ApKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclJpZ2h0U3R5bGVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgc2hvcnRoYW5kX3RvX2xvbmdoYW5kLmJvcmRlcl9yaWdodCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprQm9yZGVyQm90dG9tU3R5bGVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgc2hvcnRoYW5kX3RvX2xvbmdoYW5kLmJvcmRlcl9ib3R0b20pKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlckxlZnRTdHlsZVByb3BlcnR5LAorICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX2xlZnQpKTsKKworICAgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBrQm9yZGVyVG9wVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICBzY29wZWRfcHRyPEJvcmRlck9yT3V0bGluZVNob3J0aGFuZD4gYm9yZGVyKCQ0KTsKKyAgICBEQ0hFQ0soYm9yZGVyKTsKKyAgICBpZiAoIWJvcmRlci0+ZXJyb3IpIHsKKyAgICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oCisgICAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgICAgLy8gVW5wYWNrIGJvcmRlciB0b3AuCisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJUb3BDb2xvclByb3BlcnR5LCBib3JkZXItPmNvbG9yKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJUb3BTdHlsZVByb3BlcnR5LCBib3JkZXItPnN0eWxlKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJUb3BXaWR0aFByb3BlcnR5LCBib3JkZXItPndpZHRoKSk7CisKKyAgICAgICQkID0gcHJvcGVydHlfZGVjbGFyYXRpb24ucmVsZWFzZSgpOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgYm9yZGVyLXJpZ2h0Iik7CisgICAgICAkJCA9IE5VTEw7CisgICAgfQorICB9CisgIHwga0JvcmRlclRvcENvbG9yVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBjb2xvcl9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJUb3BDb2xvclByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JvcmRlclRvcExlZnRSYWRpdXNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJvcmRlcl9yYWRpdXNfZWxlbWVudF93aXRoX2NvbW1vbl92YWx1ZXMKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQm9yZGVyVG9wTGVmdFJhZGl1c1Byb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JvcmRlclRvcFJpZ2h0UmFkaXVzVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBib3JkZXJfcmFkaXVzX2VsZW1lbnRfd2l0aF9jb21tb25fdmFsdWVzCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0JvcmRlclRvcFJpZ2h0UmFkaXVzUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyVG9wU3R5bGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGxpbmVfc3R5bGVfd2l0aF9jb21tb25fdmFsdWVzCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0JvcmRlclRvcFN0eWxlUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQm9yZGVyVG9wV2lkdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgICBib3JkZXJfd2lkdGhfZWxlbWVudF93aXRoX2NvbW1vbl92YWx1ZXMgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3JkZXJUb3BXaWR0aFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0JvcmRlcldpZHRoVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBib3JkZXJfd2lkdGhfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gcHJvcGVydHlfbGlzdF92YWx1ZSgKKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpKTsKKyAgICAgIGlmIChwcm9wZXJ0eV9saXN0X3ZhbHVlKSB7CisgICAgICAgIEJvcmRlclNob3J0aGFuZFRvTG9uZ2hhbmQgc2hvcnRoYW5kX3RvX2xvbmdoYW5kOworICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuQXNzaWduNEJvcmRlcnNCYXNlZE9uUHJvcGVydHlMaXN0KAorICAgICAgICAgICAgcHJvcGVydHlfbGlzdF92YWx1ZSk7CisKKyAgICAgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgICAgIG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKCQ1KSk7CisKKyAgICAgICAgLy8gVW5wYWNrIGJvcmRlciB3aWR0aC4KKyAgICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclRvcFdpZHRoUHJvcGVydHksCisgICAgICAgICAgICAgICAgc2hvcnRoYW5kX3RvX2xvbmdoYW5kLmJvcmRlcl90b3ApKTsKKyAgICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgICBjc3NvbTo6a0JvcmRlclJpZ2h0V2lkdGhQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX3JpZ2h0KSk7CisgICAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJCb3R0b21XaWR0aFByb3BlcnR5LAorICAgICAgICAgICAgICAgIHNob3J0aGFuZF90b19sb25naGFuZC5ib3JkZXJfYm90dG9tKSk7CisgICAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgICAgY3Nzb206OmtCb3JkZXJMZWZ0V2lkdGhQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICBzaG9ydGhhbmRfdG9fbG9uZ2hhbmQuYm9yZGVyX2xlZnQpKTsKKworICAgICAgICAkJCA9IHByb3BlcnR5X2RlY2xhcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGtCb3R0b21Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIG9mZnNldF9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtCb3R0b21Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtCb3hTaGFkb3dUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGJveF9zaGFkb3dfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprQm94U2hhZG93UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQ29sb3JUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGNvbG9yX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0NvbG9yUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrQ29udGVudFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gY29udGVudF9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtDb250ZW50UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrRGlzcGxheVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gZGlzcGxheV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtEaXNwbGF5UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrRmlsdGVyVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBmaWx0ZXJfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprRmlsdGVyUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrRm9udFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gZm9udF9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgIHNjb3BlZF9wdHI8Rm9udFNob3J0aGFuZD4gZm9udCgkNCk7CisgICAgRENIRUNLKGZvbnQpOworCisgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgIGlmICghZm9udC0+ZXJyb3IpIHsKKyAgICAgIGZvbnQtPlJlcGxhY2VOdWxsV2l0aEluaXRpYWxWYWx1ZXMoKTsKKworICAgICAgLy8gVW5wYWNrIHRoZSBmb250IHNob3J0aGFuZCBwcm9wZXJ0eSB2YWx1ZXMuCisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtGb250U3R5bGVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgZm9udC0+Zm9udF9zdHlsZSkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprRm9udFdlaWdodFByb3BlcnR5LAorICAgICAgICAgICAgICBmb250LT5mb250X3dlaWdodCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprRm9udFNpemVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgZm9udC0+Zm9udF9zaXplKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtGb250RmFtaWx5UHJvcGVydHksCisgICAgICAgICAgICAgIGZvbnQtPmZvbnRfZmFtaWx5KSk7CisgICAgfQorCisgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgIH0KKyAgfCBrRm9udEZhbWlseVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gZm9udF9mYW1pbHlfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprRm9udEZhbWlseVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0ZvbnRTaXplVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBmb250X3NpemVfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprRm9udFNpemVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtGb250U3R5bGVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGZvbnRfc3R5bGVfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprRm9udFN0eWxlUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrRm9udFdlaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gZm9udF93ZWlnaHRfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprRm9udFdlaWdodFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0hlaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gaGVpZ2h0X3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0hlaWdodFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga0xlZnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIG9mZnNldF9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtMZWZ0UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrTGluZUhlaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbGluZV9oZWlnaHRfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprTGluZUhlaWdodFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga01hcmdpbkJvdHRvbVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbWFyZ2luX3NpZGVfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprTWFyZ2luQm90dG9tUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrTWFyZ2luTGVmdFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbWFyZ2luX3NpZGVfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprTWFyZ2luTGVmdFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga01hcmdpblJpZ2h0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBtYXJnaW5fc2lkZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtNYXJnaW5SaWdodFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga01hcmdpblRvcFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbWFyZ2luX3NpZGVfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprTWFyZ2luVG9wUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrTWFyZ2luVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBtYXJnaW5fcHJvcGVydHlfdmFsdWUgbWF5YmVfaW1wb3J0YW50IHsKKyAgICBzY29wZWRfcHRyPE1hcmdpbk9yUGFkZGluZ1Nob3J0aGFuZD4gbWFyZ2luKCQ0KTsKKyAgICBpZiAobWFyZ2luKSB7CisgICAgICBzY29wZWRfcHRyPFByb3BlcnR5RGVjbGFyYXRpb24+IHByb3BlcnR5X2RlY2xhcmF0aW9uKAorICAgICAgICAgIG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKCQ1KSk7CisKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a01hcmdpblRvcFByb3BlcnR5LCBtYXJnaW4tPnRvcCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprTWFyZ2luUmlnaHRQcm9wZXJ0eSwgbWFyZ2luLT5yaWdodCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprTWFyZ2luQm90dG9tUHJvcGVydHksIG1hcmdpbi0+Ym90dG9tKSk7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgICAgY3Nzb206OmtNYXJnaW5MZWZ0UHJvcGVydHksIG1hcmdpbi0+bGVmdCkpOworCisgICAgICAkJCA9IHByb3BlcnR5X2RlY2xhcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGtNYXhIZWlnaHRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIG1heF9oZWlnaHRfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprTWF4SGVpZ2h0UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrTWF4V2lkdGhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIG1heF93aWR0aF9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtNYXhXaWR0aFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga01pbkhlaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbWluX2hlaWdodF9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtNaW5IZWlnaHRQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtNaW5XaWR0aFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbWluX3dpZHRoX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a01pbldpZHRoUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrT3BhY2l0eVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gb3BhY2l0eV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtPcGFjaXR5UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrT3V0bGluZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gYm9yZGVyX29yX291dGxpbmVfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgc2NvcGVkX3B0cjxCb3JkZXJPck91dGxpbmVTaG9ydGhhbmQ+IG91dGxpbmUoJDQpOworICAgIERDSEVDSyhvdXRsaW5lKTsKKyAgICBpZiAoIW91dGxpbmUtPmVycm9yKSB7CisgICAgICBzY29wZWRfcHRyPFByb3BlcnR5RGVjbGFyYXRpb24+IHByb3BlcnR5X2RlY2xhcmF0aW9uKAorICAgICAgICAgIG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKCQ1KSk7CisKKyAgICAgIC8vIFVucGFjayBvdXRsaW5lIGNvbG9yLgorICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprT3V0bGluZUNvbG9yUHJvcGVydHksIG91dGxpbmUtPmNvbG9yKSk7CisKKyAgICAgIC8vIFVucGFjayBvdXRsaW5lIHN0eWxlLgorICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprT3V0bGluZVN0eWxlUHJvcGVydHksIG91dGxpbmUtPnN0eWxlKSk7CisKKyAgICAgIC8vIFVucGFjayBvdXRsaW5lIHdpZHRoLgorICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprT3V0bGluZVdpZHRoUHJvcGVydHksIG91dGxpbmUtPndpZHRoKSk7CisKKyAgICAgICQkID0gcHJvcGVydHlfZGVjbGFyYXRpb24ucmVsZWFzZSgpOworICAgIH0gZWxzZSB7CisgICAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgb3V0bGluZSIpOworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICB8IGtPdXRsaW5lQ29sb3JUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGNvbG9yX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a091dGxpbmVDb2xvclByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga091dGxpbmVTdHlsZVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gbGluZV9zdHlsZV93aXRoX2NvbW1vbl92YWx1ZXMKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprT3V0bGluZVN0eWxlUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrT3V0bGluZVdpZHRoVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgYm9yZGVyX3dpZHRoX2VsZW1lbnRfd2l0aF9jb21tb25fdmFsdWVzIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprT3V0bGluZVdpZHRoUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrT3ZlcmZsb3dUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIG92ZXJmbG93X3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a092ZXJmbG93UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrT3ZlcmZsb3dXcmFwVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBvdmVyZmxvd193cmFwX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a092ZXJmbG93V3JhcFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1BhZGRpbmdCb3R0b21Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHBhZGRpbmdfc2lkZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtQYWRkaW5nQm90dG9tUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrUGFkZGluZ0xlZnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHBhZGRpbmdfc2lkZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtQYWRkaW5nTGVmdFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1BhZGRpbmdSaWdodFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gcGFkZGluZ19zaWRlX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1BhZGRpbmdSaWdodFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1BhZGRpbmdUb3BUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHBhZGRpbmdfc2lkZV9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtQYWRkaW5nVG9wUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrUGFkZGluZ1Rva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gcGFkZGluZ19wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICBzY29wZWRfcHRyPE1hcmdpbk9yUGFkZGluZ1Nob3J0aGFuZD4gcGFkZGluZygkNCk7CisgICAgaWYgKHBhZGRpbmcpIHsKKyAgICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oCisgICAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprUGFkZGluZ1RvcFByb3BlcnR5LCBwYWRkaW5nLT50b3ApKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a1BhZGRpbmdSaWdodFByb3BlcnR5LCBwYWRkaW5nLT5yaWdodCkpOworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICAgIGNzc29tOjprUGFkZGluZ0JvdHRvbVByb3BlcnR5LCBwYWRkaW5nLT5ib3R0b20pKTsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgICBjc3NvbTo6a1BhZGRpbmdMZWZ0UHJvcGVydHksIHBhZGRpbmctPmxlZnQpKTsKKworICAgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gTlVMTDsKKyAgICB9CisgIH0KKyAgfCBrUG9pbnRlckV2ZW50c1Rva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gcG9pbnRlcl9ldmVudHNfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprUG9pbnRlckV2ZW50c1Byb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1Bvc2l0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBwb3NpdGlvbl9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtQb3NpdGlvblByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1JpZ2h0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiBvZmZzZXRfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprUmlnaHRQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtTcmNUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIGZvbnRfZmFjZV9zcmNfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprU3JjUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrVGV4dEFsaWduVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiB0ZXh0X2FsaWduX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RleHRBbGlnblByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RleHRJbmRlbnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHRleHRfaW5kZW50X3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RleHRJbmRlbnRQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtUZXh0RGVjb3JhdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gdGV4dF9kZWNvcmF0aW9uX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RleHREZWNvcmF0aW9uTGluZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RleHREZWNvcmF0aW9uQ29sb3JUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgICBjb2xvcl9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RleHREZWNvcmF0aW9uQ29sb3JQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtUZXh0RGVjb3JhdGlvbkxpbmVUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgICB0ZXh0X2RlY29yYXRpb25fbGluZV9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RleHREZWNvcmF0aW9uTGluZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RleHRPdmVyZmxvd1Rva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gdGV4dF9vdmVyZmxvd19wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtUZXh0T3ZlcmZsb3dQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtUZXh0U2hhZG93VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiB0ZXh0X3NoYWRvd19wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtUZXh0U2hhZG93UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrVGV4dFRyYW5zZm9ybVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gdGV4dF90cmFuc2Zvcm1fcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprVGV4dFRyYW5zZm9ybVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RvcFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gb2Zmc2V0X3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RvcFByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RyYW5zZm9ybVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gdHJhbnNmb3JtX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RyYW5zZm9ybVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RyYW5zZm9ybU9yaWdpblRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gdHJhbnNmb3JtX29yaWdpbl9wcm9wZXJ0eV92YWx1ZQorICAgICAgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtUcmFuc2Zvcm1PcmlnaW5Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtUcmFuc2l0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgdHJhbnNpdGlvbl9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgIHNjb3BlZF9wdHI8VHJhbnNpdGlvblNob3J0aGFuZD4gdHJhbnNpdGlvbigkNCk7CisgICAgRENIRUNLKHRyYW5zaXRpb24pOworCisgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigKKyAgICAgICAgbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oJDUpKTsKKworICAgIC8vIFVucGFjayB0aGUgdHJhbnNpdGlvbiBzaG9ydGhhbmQgcHJvcGVydHkgdmFsdWVzLgorICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMucHVzaF9iYWNrKAorICAgICAgICBQcm9wZXJ0eURlY2xhcmF0aW9uOjpQcm9wZXJ0eUtleVZhbHVlUGFpcigKKyAgICAgICAgICAgIGNzc29tOjprVHJhbnNpdGlvblByb3BlcnR5UHJvcGVydHksCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eV9saXN0KSk7CisgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlcy5wdXNoX2JhY2soCisgICAgICAgIFByb3BlcnR5RGVjbGFyYXRpb246OlByb3BlcnR5S2V5VmFsdWVQYWlyKAorICAgICAgICAgICAgY3Nzb206OmtUcmFuc2l0aW9uRHVyYXRpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmR1cmF0aW9uX2xpc3QpKTsKKyAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICBjc3NvbTo6a1RyYW5zaXRpb25UaW1pbmdGdW5jdGlvblByb3BlcnR5LAorICAgICAgICAgICAgdHJhbnNpdGlvbi0+dGltaW5nX2Z1bmN0aW9uX2xpc3QpKTsKKyAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+cHJvcGVydHlfdmFsdWVzLnB1c2hfYmFjaygKKyAgICAgICAgUHJvcGVydHlEZWNsYXJhdGlvbjo6UHJvcGVydHlLZXlWYWx1ZVBhaXIoCisgICAgICAgICAgICBjc3NvbTo6a1RyYW5zaXRpb25EZWxheVByb3BlcnR5LAorICAgICAgICAgICAgdHJhbnNpdGlvbi0+ZGVsYXlfbGlzdCkpOworCisgICAgJCQgPSBwcm9wZXJ0eV9kZWNsYXJhdGlvbi5yZWxlYXNlKCk7CisgIH0KKyAgfCBrVHJhbnNpdGlvbkRlbGF5VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgdHJhbnNpdGlvbl9kZWxheV9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1RyYW5zaXRpb25EZWxheVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1RyYW5zaXRpb25EdXJhdGlvblRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KKyAgICAgIHRyYW5zaXRpb25fZHVyYXRpb25fcHJvcGVydHlfdmFsdWUgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtUcmFuc2l0aW9uRHVyYXRpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtUcmFuc2l0aW9uUHJvcGVydHlUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uCisgICAgICB0cmFuc2l0aW9uX3Byb3BlcnR5X3Byb3BlcnR5X3ZhbHVlIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprVHJhbnNpdGlvblByb3BlcnR5UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgdHJhbnNpdGlvbl90aW1pbmdfZnVuY3Rpb25fcHJvcGVydHlfdmFsdWUgbWF5YmVfaW1wb3J0YW50IHsKKyAgICAkJCA9ICQ0ID8gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY3Nzb206OmtUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1VuaWNvZGVSYW5nZVByb3BlcnR5VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbgorICAgICAgdW5pY29kZV9yYW5nZV9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1VuaWNvZGVSYW5nZVByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNCksICQ1KQorICAgICAgICAgICAgOiBOVUxMOworICB9CisgIHwga1ZlcnRpY2FsQWxpZ25Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHZlcnRpY2FsX2FsaWduX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1ZlcnRpY2FsQWxpZ25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtWaXNpYmlsaXR5VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBjb2xvbiB2aXNpYmlsaXR5X3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1Zpc2liaWxpdHlQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtXaGl0ZVNwYWNlUHJvcGVydHlUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHdoaXRlX3NwYWNlX3Byb3BlcnR5X3ZhbHVlCisgICAgICBtYXliZV9pbXBvcnRhbnQgeworICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a1doaXRlU3BhY2VQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtXaWR0aFRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gd2lkdGhfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprV2lkdGhQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDQpLCAkNSkKKyAgICAgICAgICAgIDogTlVMTDsKKyAgfQorICB8IGtaSW5kZXhUb2tlbiBtYXliZV93aGl0ZXNwYWNlIGNvbG9uIHpfaW5kZXhfcHJvcGVydHlfdmFsdWUKKyAgICAgIG1heWJlX2ltcG9ydGFudCB7CisgICAgJCQgPSAkNCA/IG5ldyBQcm9wZXJ0eURlY2xhcmF0aW9uKGNzc29tOjprWkluZGV4UHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ0KSwgJDUpCisgICAgICAgICAgICA6IE5VTEw7CisgIH0KKyAgfCBrSWRlbnRpZmllclRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24gZXJyb3JzIHsKKyAgICBzdGQ6OnN0cmluZyBwcm9wZXJ0eV9uYW1lID0gJDEuVG9TdHJpbmcoKTsKKyAgICBEQ0hFQ0tfR1QocHJvcGVydHlfbmFtZS5zaXplKCksIDBVKTsKKworICAgIC8vIERvIG5vdCB3YXJuIGFib3V0IG5vbi1zdGFuZGFyZCBvciBub24tV2ViS2l0IHByb3BlcnRpZXMuCisgICAgaWYgKHByb3BlcnR5X25hbWVbMF0gIT0gJy0nKSB7CisgICAgICBiYXNlOjpBdXRvTG9jayBsb2NrKG5vbl90cml2aWFsX3N0YXRpY19maWVsZHMuR2V0KCkubG9jayk7CisgICAgICBiYXNlOjpoYXNoX3NldDxzdGQ6OnN0cmluZz4mIHByb3BlcnRpZXNfd2FybmVkX2Fib3V0ID0KKyAgICAgICAgICBub25fdHJpdmlhbF9zdGF0aWNfZmllbGRzLkdldCgpLnByb3BlcnRpZXNfd2FybmVkX2Fib3V0OworCisgICAgICBpZiAocHJvcGVydGllc193YXJuZWRfYWJvdXQuZmluZChwcm9wZXJ0eV9uYW1lKSA9PQorICAgICAgICAgIHByb3BlcnRpZXNfd2FybmVkX2Fib3V0LmVuZCgpKSB7CisgICAgICAgIHByb3BlcnRpZXNfd2FybmVkX2Fib3V0Lmluc2VydChwcm9wZXJ0eV9uYW1lKTsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJ1bnN1cHBvcnRlZCBwcm9wZXJ0eSAiICsgcHJvcGVydHlfbmFtZSk7CisgICAgICB9CisgICAgfQorCisgICAgJCQgPSBOVUxMOworICB9CisgIHwgZXJyb3JzIHsKKyAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgZGVjbGFyYXRpb24iKTsKKyAgICAkJCA9IE5VTEw7CisgIH0KKyAgOworCitzZW1pY29sb246ICc7JyBtYXliZV93aGl0ZXNwYWNlIDsKKworLy8gQ29uc3VtZSBhIGxpc3Qgb2YgZGVjbGFyYXRpb25zLgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1zeW50YXgvI2NvbnN1bWUtYS1saXN0LW9mLWRlY2xhcmF0aW9uczAKK3N0eWxlX2RlY2xhcmF0aW9uX2xpc3Q6CisgICAgbWF5YmVfZGVjbGFyYXRpb24geworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6Q1NTRGVjbGFyZWRTdHlsZURhdGEoKSk7CisKKyAgICBzY29wZWRfcHRyPFByb3BlcnR5RGVjbGFyYXRpb24+IHByb3BlcnR5X2RlY2xhcmF0aW9uKCQxKTsKKyAgICBpZiAocHJvcGVydHlfZGVjbGFyYXRpb24pIHsKKyAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5BcHBseSgkJCk7CisgICAgICBmb3IgKHNpemVfdCBpID0gMDsKKyAgICAgICAgICAgaSA8IHByb3BlcnR5X2RlY2xhcmF0aW9uLT51bnN1cHBvcnRlZF9wcm9wZXJ0eV9rZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHVuc3VwcG9ydGVkX3Byb3BlcnR5X25hbWUgPQorICAgICAgICAgICAgY3Nzb206OkdldFByb3BlcnR5TmFtZSgKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+dW5zdXBwb3J0ZWRfcHJvcGVydHlfa2V5c1tpXSk7CisgICAgICAgIHBhcnNlcl9pbXBsLT5Mb2dXYXJuaW5nKAorICAgICAgICAgICAgQDEsICJ1bnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eTogIiAgKyB1bnN1cHBvcnRlZF9wcm9wZXJ0eV9uYW1lKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgfCBzdHlsZV9kZWNsYXJhdGlvbl9saXN0IHNlbWljb2xvbiBtYXliZV9kZWNsYXJhdGlvbiB7CisgICAgJCQgPSAkMTsKKworICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oJDMpOworICAgIGlmIChwcm9wZXJ0eV9kZWNsYXJhdGlvbikgeworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPkFwcGx5KCQkKTsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOworICAgICAgICAgICBpIDwgcHJvcGVydHlfZGVjbGFyYXRpb24tPnVuc3VwcG9ydGVkX3Byb3BlcnR5X2tleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdW5zdXBwb3J0ZWRfcHJvcGVydHlfbmFtZSA9CisgICAgICAgICAgICBjc3NvbTo6R2V0UHJvcGVydHlOYW1lKAorICAgICAgICAgICAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT51bnN1cHBvcnRlZF9wcm9wZXJ0eV9rZXlzW2ldKTsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgICBAMSwgInVuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5OiAiICArIHVuc3VwcG9ydGVkX3Byb3BlcnR5X25hbWUpOworICAgICAgfQorICAgIH0KKyAgfQorICA7CisKK2ZvbnRfZmFjZV9kZWNsYXJhdGlvbl9saXN0OgorICAgIG1heWJlX2RlY2xhcmF0aW9uIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkNTU0ZvbnRGYWNlRGVjbGFyYXRpb25EYXRhKCkpOworCisgICAgc2NvcGVkX3B0cjxQcm9wZXJ0eURlY2xhcmF0aW9uPiBwcm9wZXJ0eV9kZWNsYXJhdGlvbigkMSk7CisgICAgaWYgKHByb3BlcnR5X2RlY2xhcmF0aW9uKSB7CisgICAgICBwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+QXBwbHkoJCQpOworICAgIH0KKyAgfQorICB8IGZvbnRfZmFjZV9kZWNsYXJhdGlvbl9saXN0IHNlbWljb2xvbiBtYXliZV9kZWNsYXJhdGlvbiB7CisgICAgJCQgPSAkMTsKKworICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oJDMpOworICAgIGlmIChwcm9wZXJ0eV9kZWNsYXJhdGlvbikgeworICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPkFwcGx5KCQkKTsKKyAgICB9CisgIH0KKyAgOworCitzdHlsZV9kZWNsYXJhdGlvbl9ibG9jazoKKyAgICAneycgbWF5YmVfd2hpdGVzcGFjZSBzdHlsZV9kZWNsYXJhdGlvbl9saXN0ICd9JyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkNTU1J1bGVTdHlsZURlY2xhcmF0aW9uKAorICAgICAgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQzKSwgcGFyc2VyX2ltcGwtPmNzc19wYXJzZXIoKSkpOworICB9CisgIDsKKworcnVsZV9saXN0X2Jsb2NrOgorICAgICd7JyBtYXliZV93aGl0ZXNwYWNlIHJ1bGVfbGlzdCAnfScgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSAkMzsKKyAgfQorICB8IHNlbWljb2xvbiB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpDU1NSdWxlTGlzdCgpKTsKKyAgfQorICA7CisKKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisvLyBSdWxlcy4KKy8vIC4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouCisKKy8vIEEgc3R5bGUgcnVsZSBpcyBhIHF1YWxpZmllZCBydWxlIHRoYXQgYXNzb2NpYXRlcyBhIHNlbGVjdG9yIGxpc3Qgd2l0aCBhIGxpc3QKKy8vIG9mIHByb3BlcnR5IGRlY2xhcmF0aW9ucy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNzdHlsZS1ydWxlCitzdHlsZV9ydWxlOgorICAgIHNlbGVjdG9yX2xpc3Qgc3R5bGVfZGVjbGFyYXRpb25fYmxvY2sgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206OlNlbGVjdG9ycz4gc2VsZWN0b3JzKCQxKTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpDU1NSdWxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMik7CisKKyAgICBpZiAoc2VsZWN0b3JzKSB7CisgICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkNTU1N0eWxlUnVsZShzZWxlY3RvcnMtPlBhc3MoKSwgc3R5bGUpKTsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBOVUxMOworICAgIH0KKyAgfQorICA7CisKKy8vIFRvIHBhcnNlIGEgQ1NTIHN0eWxlc2hlZXQsIGludGVycHJldCBhbGwgb2YgdGhlIHJlc3VsdGluZyB0b3AtbGV2ZWwgcXVhbGlmaWVkCisvLyBydWxlcyBhcyBzdHlsZSBydWxlcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjc3Mtc3R5bGVzaGVldHMKK3F1YWxpZmllZF9ydWxlOgorICAgIHN0eWxlX3J1bGUKKyAgfCBlcnJvciBzdHlsZV9kZWNsYXJhdGlvbl9ibG9jayB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTUnVsZVN0eWxlRGVjbGFyYXRpb24+IHVudXNlZF9zdHlsZSA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQyKTsKKyAgICBwYXJzZXJfaW1wbC0+TG9nV2FybmluZyhAMSwgImludmFsaWQgcXVhbGlmaWVkIHJ1bGUiKTsKKyAgICAkJCA9IE5VTEw7CisgIH0KKyAgOworCitpbnZhbGlkX3J1bGU6CisgICAga0ludmFsaWRBdEJsb2NrVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoQDEsICJpbnZhbGlkIHJ1bGUgIiArICQxLlRvU3RyaW5nKCkpOworICB9CisgIHwga090aGVyQnJvd3NlckF0QmxvY2tUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICAvLyBEbyBub3Qgd2FybiBhYm91dCBvdGhlciBicm93c2VyIGF0IHJ1bGVzLgorICB9CisgIDsKKworLy8gQ29uc3VtZSBhIGxpc3Qgb2YgcnVsZXMuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXN5bnRheC8jY29uc3VtZS1hLWxpc3Qtb2YtcnVsZXMKK3J1bGU6CisgICAga1NnbWxDb21tZW50RGVsaW1pdGVyVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7ICQkID0gTlVMTDsgfQorICB8IHF1YWxpZmllZF9ydWxlIHsgJCQgPSAkMTsgfQorICB8IGF0X2ZvbnRfZmFjZV9ydWxlIHsgJCQgPSAkMTsgfQorICB8IGF0X21lZGlhX3J1bGUgeyAkJCA9ICQxOyB9CisgIHwgYXRfa2V5ZnJhbWVzX3J1bGUgeyAkJCA9ICQxOyB9CisgIHwgaW52YWxpZF9ydWxlIHsgJCQgPSBOVUxMOyB9CisgIDsKKworcnVsZV9saXN0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkNTU1J1bGVMaXN0KCkpOworICB9CisgIHwgcnVsZV9saXN0IHJ1bGUgeworICAgICQkID0gJDE7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTUnVsZT4gY3NzX3J1bGUgPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMik7CisgICAgaWYgKGNzc19ydWxlKSB7CisgICAgICAkJC0+QXBwZW5kQ1NTUnVsZShjc3NfcnVsZSk7CisgICAgfQorICB9CisgIDsKKworCisvLyAuLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46LgorLy8gRW50cnkgcG9pbnRzLgorLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KKworLy8gVG8gcGFyc2UgYSBzdHlsZXNoZWV0LCBjb25zdW1lIGEgbGlzdCBvZiBydWxlcy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNwYXJzZS1hLXN0eWxlc2hlZXQKK3N0eWxlX3NoZWV0OgorICAgIHJ1bGVfbGlzdCB7CisgICAgJCQgPSBBZGRSZWYobmV3IGNzc29tOjpDU1NTdHlsZVNoZWV0KHBhcnNlcl9pbXBsLT5jc3NfcGFyc2VyKCkpKTsKKyAgICAkJC0+c2V0X2Nzc19ydWxlcyhNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMSkpOworICB9CisgIDsKKworLy8gUGFyc2VyIGVudHJ5IHBvaW50cy4KKy8vICAgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXN5bnRheC8jcGFyc2VyLWVudHJ5LXBvaW50cworZW50cnlfcG9pbnQ6CisgIC8vIFBhcnNlcyB0aGUgZW50aXJlIHN0eWxlc2hlZXQuCisgICAga1N0eWxlU2hlZXRFbnRyeVBvaW50VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBzdHlsZV9zaGVldCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTU3R5bGVTaGVldD4gc3R5bGVfc2hlZXQgPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgcGFyc2VyX2ltcGwtPnNldF9zdHlsZV9zaGVldChzdHlsZV9zaGVldCk7CisgIH0KKyAgLy8gUGFyc2VzIHRoZSBtZWRpYSBsaXN0LgorICB8IGtNZWRpYUxpc3RFbnRyeVBvaW50VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBtZWRpYV9saXN0IHsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpNZWRpYUxpc3Q+IG1lZGlhX2xpc3QgPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgcGFyc2VyX2ltcGwtPnNldF9tZWRpYV9saXN0KG1lZGlhX2xpc3QpOworICB9CisgIC8vIFBhcnNlcyB0aGUgbWVkaWEgcXVlcnkuCisgIHwga01lZGlhUXVlcnlFbnRyeVBvaW50VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBtZWRpYV9xdWVyeSB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6TWVkaWFRdWVyeT4gbWVkaWFfcXVlcnkgPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgcGFyc2VyX2ltcGwtPnNldF9tZWRpYV9xdWVyeShtZWRpYV9xdWVyeSk7CisgIH0KKyAgLy8gUGFyc2VzIHRoZSBydWxlLgorICB8IGtSdWxlRW50cnlQb2ludFRva2VuIG1heWJlX3doaXRlc3BhY2UgcnVsZSB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTUnVsZT4gcnVsZShNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICAgIHBhcnNlcl9pbXBsLT5zZXRfcnVsZShydWxlKTsKKyAgfQorICAvLyBQYXJzZXMgdGhlIGNvbnRlbnRzIG9mIGEgSFRNTEVsZW1lbnQuc3R5bGUgYXR0cmlidXRlLgorICB8IGtTdHlsZURlY2xhcmF0aW9uTGlzdEVudHJ5UG9pbnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlCisgICAgICAgIHN0eWxlX2RlY2xhcmF0aW9uX2xpc3QgeworICAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OkNTU0RlY2xhcmVkU3R5bGVEYXRhPiBkZWNsYXJhdGlvbl9kYXRhID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDMpOworICAgIHBhcnNlcl9pbXBsLT5zZXRfc3R5bGVfZGVjbGFyYXRpb25fZGF0YShkZWNsYXJhdGlvbl9kYXRhKTsKKyAgfQorICAvLyBQYXJzZXMgdGhlIGNvbnRlbnRzIG9mIGFuIEBmb250LWZhY2UgcnVsZS4KKyAgfCBrRm9udEZhY2VEZWNsYXJhdGlvbkxpc3RFbnRyeVBvaW50VG9rZW4gbWF5YmVfd2hpdGVzcGFjZQorICAgICAgICBmb250X2ZhY2VfZGVjbGFyYXRpb25fbGlzdCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTRm9udEZhY2VEZWNsYXJhdGlvbkRhdGE+IGRlY2xhcmF0aW9uX2RhdGEgPQorICAgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMyk7CisgICAgcGFyc2VyX2ltcGwtPnNldF9mb250X2ZhY2VfZGVjbGFyYXRpb25fZGF0YShkZWNsYXJhdGlvbl9kYXRhKTsKKyAgfQorICAvLyBQYXJzZXMgYSBzaW5nbGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB2YWx1ZS4KKyAgfCBrUHJvcGVydHlWYWx1ZUVudHJ5UG9pbnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIG1heWJlX2RlY2xhcmF0aW9uIHsKKyAgICBzY29wZWRfcHRyPFByb3BlcnR5RGVjbGFyYXRpb24+IHByb3BlcnR5X2RlY2xhcmF0aW9uKCQzKTsKKyAgICBpZiAocHJvcGVydHlfZGVjbGFyYXRpb24gIT0gTlVMTCkgeworICAgICAgaWYgKHByb3BlcnR5X2RlY2xhcmF0aW9uLT5wcm9wZXJ0eV92YWx1ZXMuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICAgICAgQDEsICJDYW5ub3QgcGFyc2Ugc2hvcnRoYW5kIHByb3BlcnRpZXMgYXMgc2luZ2xlIHByb3BlcnR5IHZhbHVlcy4iKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwcm9wZXJ0eV9kZWNsYXJhdGlvbi0+aXNfaW1wb3J0YW50KSB7CisgICAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgICBAMSwKKyAgICAgICAgICAgICIhaW1wb3J0YW50IGlzIG5vdCBhbGxvd2VkIHdoZW4gc2V0dGluZyBzaW5nbGUgcHJvcGVydHkgdmFsdWVzLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmICghcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlc1swXS52YWx1ZSkgeworICAgICAgICAgICAgcGFyc2VyX2ltcGwtPkxvZ1dhcm5pbmcoCisgICAgICAgICAgICAgIEAxLCAiZGVjbGFyYXRpb24gbXVzdCBoYXZlIGEgcHJvcGVydHkgdmFsdWUuIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlcl9pbXBsLT5zZXRfcHJvcGVydHlfdmFsdWUoCisgICAgICAgICAgICAgICAgcHJvcGVydHlfZGVjbGFyYXRpb24tPnByb3BlcnR5X3ZhbHVlc1swXS52YWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIC8vIFBhcnNlcyB0aGUgcHJvcGVydHkgdmFsdWUgYW5kIGNvcnJlc3BvbmRpbmdseSBzZXRzIHRoZSB2YWx1ZXMgb2YgYSBwYXNzZWQKKyAgLy8gaW4gQ1NTRGVjbGFyYXRpb25EYXRhLgorICAvLyBUaGlzIGlzIENvYmFsdCdzIGVxdWl2YWxlbnQgb2YgYSAibGlzdCBvZiBjb21wb25lbnQgdmFsdWVzIi4KKyAgfCBrUHJvcGVydHlJbnRvRGVjbGFyYXRpb25EYXRhRW50cnlQb2ludFRva2VuIG1heWJlX3doaXRlc3BhY2UKKyAgICAgICAgbWF5YmVfZGVjbGFyYXRpb24geworICAgIHNjb3BlZF9wdHI8UHJvcGVydHlEZWNsYXJhdGlvbj4gcHJvcGVydHlfZGVjbGFyYXRpb24oJDMpOworICAgIGlmIChwcm9wZXJ0eV9kZWNsYXJhdGlvbiAhPSBOVUxMKSB7CisgICAgICBpZiAocHJvcGVydHlfZGVjbGFyYXRpb24tPmlzX2ltcG9ydGFudCkgeworICAgICAgICBwYXJzZXJfaW1wbC0+TG9nRXJyb3IoCisgICAgICAgICAgICBAMSwgIiFpbXBvcnRhbnQgaXMgbm90IGFsbG93ZWQgd2hlbiBzZXR0aW5nIHNpbmdsZSBwcm9wZXJ0eSB2YWx1ZSIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgRENIRUNLKHBhcnNlcl9pbXBsLT5pbnRvX2RlY2xhcmF0aW9uX2RhdGEoKSk7CisgICAgICAgIHByb3BlcnR5X2RlY2xhcmF0aW9uLT5BcHBseSgKKyAgICAgICAgICAgIHBhcnNlcl9pbXBsLT5pbnRvX2RlY2xhcmF0aW9uX2RhdGEoKSk7CisgICAgICB9CisgICAgfQorICB9CisgIDsKKworLy8gRmlsdGVycyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBvYmplY3QncyByZW5kZXJpbmcuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZmZWN0cy0xLyNGaWx0ZXJQcm9wZXJ0eQorZmlsdGVyX3Byb3BlcnR5X3ZhbHVlOgorICAgIGtOb25lVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0Tm9uZSgpLmdldCgpKTsKKyAgfQorICB8IGZpbHRlcl9mdW5jdGlvbl9saXN0IHsKKyAgICBzY29wZWRfcHRyPGNzc29tOjpGaWx0ZXJGdW5jdGlvbkxpc3RWYWx1ZTo6QnVpbGRlcj4gcHJvcGVydHlfdmFsdWUoJDEpOworICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6RmlsdGVyRnVuY3Rpb25MaXN0VmFsdWUocHJvcGVydHlfdmFsdWUtPlBhc3MoKSkpOworICB9CisgIHwgY29tbW9uX3ZhbHVlcworICA7CisKK2ZpbHRlcl9mdW5jdGlvbl9saXN0OgorICAvLyBUT0RPOiBQYXJzZSBsaXN0IG9mIGZpbHRlcl9mdW5jdGlvbidzLiBUaGlzIG9ubHkgcGFyc2VzIG9uZS1lbGVtZW50IGxpc3RzLgorICAgIGZpbHRlcl9mdW5jdGlvbiB7CisgICAgJCQgPSBuZXcgY3Nzb206OkZpbHRlckZ1bmN0aW9uTGlzdFZhbHVlOjpCdWlsZGVyKCk7CisgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgIH0KKyAgOworCisvLyBUaGUgc2V0IG9mIGFsbG93ZWQgZmlsdGVyIGZ1bmN0aW9ucy4KKy8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2ZpbHRlci1lZmZlY3RzLTEvCitmaWx0ZXJfZnVuY3Rpb246CisgICAgY29iYWx0X210bV9maWx0ZXJfZnVuY3Rpb24geworICAgICQkID0gJDE7CisgIH0KKyAgOworCitjb2JhbHRfbXRtX2ZpbHRlcl9mdW5jdGlvbjoKKyAgLy8gRW5jb2RlcyBhbiBtdG0gZmlsdGVyLiBDdXJyZW50bHkgdGhlIG9ubHkgdHlwZSBvZiBmaWx0ZXIgZnVuY3Rpb24gc3VwcG9ydGVkLgorICAgIGNvYmFsdF9tdG1fZnVuY3Rpb25fbmFtZSBtYXliZV93aGl0ZXNwYWNlIGNvYmFsdF9tYXBfdG9fbWVzaF9zcGVjIGNvbW1hIGFuZ2xlCisgICAgICAgIGFuZ2xlIGNvbW1hIGNvYmFsdF9tdG1fdHJhbnNmb3JtX2Z1bmN0aW9uIG1heWJlX2NvYmFsdF9tdG1fc3RlcmVvX21vZGUKKyAgICAgICAgJyknIG1heWJlX3doaXRlc3BhY2UgeworICAgIHNjb3BlZF9wdHI8Y3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uOjpNZXNoU3BlYz4KKyAgICAgICAgbWVzaF9zcGVjKCQzKTsKKyAgICBzY29wZWRfcHRyPGdsbTo6bWF0ND4gdHJhbnNmb3JtKCQ4KTsKKyAgICBzY29wZWRfcmVmcHRyPGNzc29tOjpLZXl3b3JkVmFsdWU+IHN0ZXJlb19tb2RlID0KKyAgICAgICAgTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDkpOworCisgICAgaWYgKCFwYXJzZXJfaW1wbC0+c3VwcG9ydHNfbWFwX3RvX21lc2goKSkgeworICAgICAgWVlFUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgJCQgPSBuZXcgY3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uKAorICAgICAgICAgIG1lc2hfc3BlYy5QYXNzKCksCisgICAgICAgICAgJDUsCisgICAgICAgICAgJDYsCisgICAgICAgICAgKnRyYW5zZm9ybSwKKyAgICAgICAgICBzdGVyZW9fbW9kZSk7CisgICAgfQorICB9CisgIC8vIG1hcC10by1tZXNoIGZpbHRlciB3aXRoIHRoZSByZWN0YW5ndWxhciBidWlsdC1pbiBtZXNoLiBEb2VzIG5vdCB0YWtlIEZPVgorICAvLyBvciB0cmFuc2Zvcm1zLgorICB8ICBjb2JhbHRfbXRtX2Z1bmN0aW9uX25hbWUgbWF5YmVfd2hpdGVzcGFjZSBrUmVjdGFuZ3VsYXJUb2tlbiBjb21tYQorICAgICAgICBrTm9uZVRva2VuIGNvbW1hIGtOb25lVG9rZW4gbWF5YmVfY29iYWx0X210bV9zdGVyZW9fbW9kZQorICAgICAgICAnKScgbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6S2V5d29yZFZhbHVlPiBzdGVyZW9fbW9kZSA9CisgICAgICAgIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ4KTsKKworICAgIGlmICghcGFyc2VyX2ltcGwtPnN1cHBvcnRzX21hcF90b19tZXNoX3JlY3Rhbmd1bGFyKCkpIHsKKyAgICAgIFlZRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICQkID0gbmV3IGNzc29tOjpNYXBUb01lc2hGdW5jdGlvbihjc3NvbTo6TWFwVG9NZXNoRnVuY3Rpb246OmtSZWN0YW5ndWxhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVyZW9fbW9kZSk7CisgICAgfQorICB9CisgIDsKKworY29iYWx0X21hcF90b19tZXNoX3NwZWM6CisgICAga0VxdWlyZWN0YW5ndWxhclRva2VuIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6TWFwVG9NZXNoRnVuY3Rpb246Ok1lc2hTcGVjKAorICAgICAgICBjc3NvbTo6TWFwVG9NZXNoRnVuY3Rpb246OmtFcXVpcmVjdGFuZ3VsYXIpOworICB9CisgIHwgdXJsIGNvYmFsdF9tdG1fcmVzb2x1dGlvbl9tYXRjaGVkX21lc2hfbGlzdCB7CisgICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UHJvcGVydHlWYWx1ZT4gdXJsID0gTWFrZVNjb3BlZFJlZlB0ckFuZFJlbGVhc2UoJDEpOworICAgIHNjb3BlZF9wdHI8Y3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uOjpSZXNvbHV0aW9uTWF0Y2hlZE1lc2hMaXN0QnVpbGRlcj4KKyAgICAgICAgcmVzb2x1dGlvbl9tYXRjaGVkX21lc2hfdXJscygkMik7CisKKyAgICAkJCA9IG5ldyBjc3NvbTo6TWFwVG9NZXNoRnVuY3Rpb246Ok1lc2hTcGVjKAorICAgICAgICBjc3NvbTo6TWFwVG9NZXNoRnVuY3Rpb246OmtVcmxzLAorICAgICAgICB1cmwsCisgICAgICAgIHJlc29sdXRpb25fbWF0Y2hlZF9tZXNoX3VybHMtPlBhc3MoKSk7CisgIH0KKyAgOworCitjb2JhbHRfbXRtX2Z1bmN0aW9uX25hbWU6CisgICAga0NvYmFsdE10bUZ1bmN0aW9uVG9rZW4KKyAgfCBrTWFwVG9NZXNoRnVuY3Rpb25Ub2tlbgorICA7CisKK2NvYmFsdF9tdG1fcmVzb2x1dGlvbl9tYXRjaGVkX21lc2hfbGlzdDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgJCQgPSBuZXcgY3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uOjpSZXNvbHV0aW9uTWF0Y2hlZE1lc2hMaXN0QnVpbGRlcigpOworICB9CisgIC8vIFNwZWNpZmllcyBhIGRpZmZlcmVudCBtZXNoIGZvciBhIHBhcnRpY3VsYXIgaW1hZ2UgcmVzb2x1dGlvbi4KKyAgfCBjb2JhbHRfbXRtX3Jlc29sdXRpb25fbWF0Y2hlZF9tZXNoX2xpc3QgY29iYWx0X210bV9yZXNvbHV0aW9uX21hdGNoZWRfbWVzaCB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKCQyKTsKKyAgfQorICA7CisKK2NvYmFsdF9tdG1fcmVzb2x1dGlvbl9tYXRjaGVkX21lc2g6CisgICAgbm9uX25lZ2F0aXZlX2ludGVnZXIgbm9uX25lZ2F0aXZlX2ludGVnZXIgdXJsIHsKKyAgICAkJCA9IG5ldyBjc3NvbTo6TWFwVG9NZXNoRnVuY3Rpb246OlJlc29sdXRpb25NYXRjaGVkTWVzaCgkMSwgJDIsCisgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkMykpOworICB9CisgIDsKKworLy8gVGhlIHNldCBvZiB0cmFuc2Zvcm0gZnVuY3Rpb25zIGFsbG93ZWQgaW4gTVRNIGZpbHRlcnMsIGN1cnJlbnRseSBhIHNlcGFyYXRlCisvLyBwcm9kdWN0aW9uIGhpZXJhcmNoeSBmcm9tIHRoZSBtYWluIDx0cmFuc2Zvcm1fZnVuY3Rpb24+IGFuZCByZXByZXNlbnRlZCBhcyBhCisvLyBnbG06Om1hdDQuCisvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyN0aHJlZS1kLXRyYW5zZm9ybS1mdW5jdGlvbnMKK2NvYmFsdF9tdG1fdHJhbnNmb3JtX2Z1bmN0aW9uOgorICAvLyBTcGVjaWZpZXMgYW4gYXJiaXRyYXJ5IGFmZmluZSAzRCB0cmFuc2Zvcm1hdGlvbiwgY3VycmVudGx5IHRoZSBvbmx5CisgIC8vIHN1cHBvcnRlZCB0cmFuc2Zvcm0gaW4gTVRNLgorICAgIGtNYXRyaXgzZEZ1bmN0aW9uVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSBudW1iZXJfbWF0cml4ICcpJyBtYXliZV93aGl0ZXNwYWNlIHsKKyAgICBzY29wZWRfcHRyPHN0ZDo6dmVjdG9yPGZsb2F0PiA+IG1hdHJpeCgkMyk7CisgICAgaWYgKG1hdHJpeCA9PSBOVUxMIHx8IG1hdHJpeC0+c2l6ZSgpICE9ICAxNikgeworICAgICAgcGFyc2VyX2ltcGwtPkxvZ0Vycm9yKAorICAgICAgICAgIEAzLAorICAgICAgICAgICJtYXRyaXgzZCBmdW5jdGlvbiBleHBlY3RzIDE2IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXJndW1lbnRzIik7CisgICAgICBZWUVSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAvLyBHTE0gYW5kIHRoZSBXMyBzcGVjIGJvdGggdXNlIGNvbHVtbi1tYWpvciBvcmRlci4KKyAgICAgICQkID0gbmV3IGdsbTo6bWF0NChnbG06Om1ha2VfbWF0NCgmKCptYXRyaXgpWzBdKSk7CisgICAgfQorICB9CisgIDsKKworbnVtYmVyX21hdHJpeDoKKyAgICBudW1iZXIgeworICAgICQkID0gbmV3IHN0ZDo6dmVjdG9yPGZsb2F0PigxLCAkMSk7CisgIH0KKyAgfCBudW1iZXJfbWF0cml4IGNvbW1hIG51bWJlciB7CisgICAgJCQgPSAkMTsKKyAgICAkJC0+cHVzaF9iYWNrKCQzKTsKKyAgfQorICA7CisKK21heWJlX2NvYmFsdF9tdG1fc3RlcmVvX21vZGU6CisgICAgLyogZW1wdHkgKi8geworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE1vbm9zY29waWMoKS5nZXQoKSk7CisgIH0KKyAgfCBjb21tYSBjb2JhbHRfbXRtX3N0ZXJlb19tb2RlIHsKKyAgICAkJCA9ICQyOworICB9CisgIDsKKworY29iYWx0X210bV9zdGVyZW9fbW9kZToKKyAgICBrTW9ub3Njb3BpY1Rva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldE1vbm9zY29waWMoKS5nZXQoKSk7CisgIH0KKyAgfCBrU3RlcmVvc2NvcGljTGVmdFJpZ2h0VG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CisgICAgJCQgPSBBZGRSZWYoY3Nzb206OktleXdvcmRWYWx1ZTo6R2V0U3RlcmVvc2NvcGljTGVmdFJpZ2h0KCkuZ2V0KCkpOworICB9CisgIHwga1N0ZXJlb3Njb3BpY1RvcEJvdHRvbVRva2VuIG1heWJlX3doaXRlc3BhY2UgeworICAgICQkID0gQWRkUmVmKGNzc29tOjpLZXl3b3JkVmFsdWU6OkdldFN0ZXJlb3Njb3BpY1RvcEJvdHRvbSgpLmdldCgpKTsKKyAgfQorICA7CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci5oIGIvc3JjL2NvYmFsdC9jc3NfcGFyc2VyL2dyYW1tYXIuaAppbmRleCBjYmFjNzRmLi4xZjVkYWM5IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci5oCisrKyBiL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9ncmFtbWFyLmgKQEAgLTg5LDYgKzg5LDkgQEAKIHN0cnVjdCBNYXJnaW5PclBhZGRpbmdTaG9ydGhhbmQ7CiBjbGFzcyBQYXJzZXJJbXBsOwogc3RydWN0IFByb3BlcnR5RGVjbGFyYXRpb247CisjaWYgQklTT05fVkVSU0lPTl9NQUpPUiA+PSAzCitjbGFzcyBTY2FubmVyOworI2VuZGlmICAvLyBCSVNPTl9WRVJTSU9OX01BSk9SID49IDMKIAogLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgc291cmNlIGxvY2F0aW9uIHR5cGUgZnJvbSBCaXNvbiB3aXRoIG91ciBvd24uCiBzdHJ1Y3QgY29iYWx0X3l5bHR5cGUgewpAQCAtMTEwLDcgKzExMywxMSBAQAogCiAvLyBBIGhlYWRlciBnZW5lcmF0ZWQgYnkgQmlzb24gbXVzdCBiZSBpbmNsdWRlZCBpbnNpZGUgb3VyIG5hbWVzcGFjZQogLy8gdG8gYXZvaWQgZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24uCisjaWYgQklTT05fVkVSU0lPTl9NQUpPUiA+PSAzCiAjaW5jbHVkZSAiY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hcl9nZW5lcmF0ZWQuaCIKKyNlbHNlCisjaW5jbHVkZSAiY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci1iaXNvbi0yX2dlbmVyYXRlZC5oIgorI2VuZGlmCiAKIH0gIC8vIG5hbWVzcGFjZSBjc3NfcGFyc2VyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci55IGIvc3JjL2NvYmFsdC9jc3NfcGFyc2VyL2dyYW1tYXIueQppbmRleCBjNjIwZjg1Li5iY2RkZTdiIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci55CisrKyBiL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9ncmFtbWFyLnkKQEAgLTE1LDEwICsxNSwxMiBAQAogLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBvZiBDU1MgZ3JhbW1hci4KIAogLy8gQSByZWVudHJhbnQgcGFyc2VyLgotJXB1cmVfcGFyc2VyCislZGVmaW5lIGFwaS5wdXJlIGZ1bGwKIAotLy8geXlwYXJzZSgpJ3MgZmlyc3QgYW5kIG9ubHkgcGFyYW1ldGVyLgorLy8gVGhlIGZpcnN0IHBhcmFtZXRlciBvZiB5eXBhcnNlKCkuCiAlcGFyc2UtcGFyYW0geyBQYXJzZXJJbXBsKiBwYXJzZXJfaW1wbCB9CisvLyBUaGUgdGhpcmQgcGFyYW1ldGVyIG9mIHl5bGV4KCkgYW5kIHRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mIHl5cGFyc2UoKS4KKyVwYXJhbSB7IFNjYW5uZXIqIHNjYW5uZXIgfQogCiAlewogLy8gU3BlY2lmeSBob3cgdGhlIGxvY2F0aW9uIG9mIGFuIGFjdGlvbiBzaG91bGQgYmUgY2FsY3VsYXRlZCBpbiB0ZXJtcwpAQCAtMzMsOSArMzUsNiBAQAogICAgIEN1cnJlbnQuZmlyc3RfY29sdW1uID0gUmhzWzBdLmZpcnN0X2NvbHVtbjsgIFwKICAgICBDdXJyZW50LmxpbmVfc3RhcnQgICA9IFJoc1swXS5saW5lX3N0YXJ0OyAgICBcCiAgIH0KLQotLy8geXlsZXgoKSdzIHRoaXJkIHBhcmFtZXRlci4KLSNkZWZpbmUgWVlMRVhfUEFSQU0gJihwYXJzZXJfaW1wbC0+c2Nhbm5lcigpKQogJX0KIAogLy8gVG9rZW4gdmFsdWVzIHJldHVybmVkIGJ5IGEgc2Nhbm5lci4KQEAgLTg5Niw3ICs4OTUsNyBAQAogLy8gLi4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4uLjouLi46Li4uOi4KIAogbWF5YmVfd2hpdGVzcGFjZToKLSAgICAvKiBlbXB0eSAqLworICAgICVlbXB0eQogICB8IG1heWJlX3doaXRlc3BhY2Uga1doaXRlc3BhY2VUb2tlbgogICA7CiAKQEAgLTExMzgsNyArMTEzNyw3IEBACiAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jbWVkaWEwCiBtZWRpYV9xdWVyeToKICAgLy8gQG1lZGlhICB7fQotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gQWRkUmVmKG5ldyBjc3NvbTo6TWVkaWFRdWVyeSh0cnVlKSk7CiAgIH0KICAgLy8gQG1lZGlhIChuYW1lOnZhbHVlKS4uLiB7fQpAQCAtMjI1Myw3ICsyMjUyLDcgQEAKIC8vIGFuZCA8cmVhbD4gdHlwZXMgaGFzIHRvIGJlIHByZXBlbmRlZCB3aXRoIHRoaXMgcnVsZS4KIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjb25zdW1lLWEtbnVtYmVyCiBtYXliZV9zaWduX3Rva2VuOgotICAgIC8qIGVtcHR5ICovIHsgJCQgPSAxOyB9CisgICAgJWVtcHR5IHsgJCQgPSAxOyB9CiAgIHwgJysnIHsgJCQgPSAxOyB9CiAgIHwgJy0nIHsgJCQgPSAtMTsgfQogICA7CkBAIC0yNjY1LDcgKzI2NjQsNyBAQAogICA7CiAKIG1heWJlX2JhY2tncm91bmRfc2l6ZV9wcm9wZXJ0eV92YWx1ZToKLSAgICAvKiBlbXB0eSAqLyB7CisgICAgJWVtcHR5IHsKICAgICAkJCA9IE5VTEw7CiAgIH0KICAgfCAnLycgbWF5YmVfd2hpdGVzcGFjZSBiYWNrZ3JvdW5kX3NpemVfcHJvcGVydHlfdmFsdWVfd2l0aG91dF9jb21tb25fdmFsdWVzIHsKQEAgLTI3MjAsNyArMjcxOSw3IEBACiAgIDsKIAogZmluYWxfYmFja2dyb3VuZF9sYXllcl93aXRob3V0X3Bvc2l0aW9uX2FuZF9yZXBlYXQ6Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYmFja2dyb3VuZCBzaG9ydGhhbmQgd2hpY2ggaXMgdG8gYmUgZmlsbGVkIGluIGJ5CiAgICAgLy8gc3Vic2VxdWVudCByZWR1Y3Rpb25zLgogICAgICQkID0gbmV3IEJhY2tncm91bmRTaG9ydGhhbmRMYXllcigpOwpAQCAtMjczNiw3ICsyNzM1LDcgQEAKIC8vIE9ubHkgdGhlIGZpbmFsIGJhY2tncm91bmQgbGF5ZXIgaXMgYWxsb3dlZCB0byBzZXQgdGhlIGJhY2tncm91bmQgY29sb3IuCiAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI2x0ZmluYWwtYmctbGF5ZXJndAogZmluYWxfYmFja2dyb3VuZF9sYXllcjoKLSAgICAvKiBlbXB0eSAqLyB7CisgICAgJWVtcHR5IHsKICAgICAvLyBJbml0aWFsaXplIHRoZSBiYWNrZ3JvdW5kIHNob3J0aGFuZCB3aGljaCBpcyB0byBiZSBmaWxsZWQgaW4gYnkKICAgICAvLyBzdWJzZXF1ZW50IHJlZHVjdGlvbnMuCiAgICAgJCQgPSBuZXcgQmFja2dyb3VuZFNob3J0aGFuZExheWVyKCk7CkBAIC0yOTkwLDcgKzI5ODksNyBAQAogICA7CiAKIG1heWJlX2F0X3Bvc2l0aW9uOgotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gTlVMTDsKICAgfQogICB8IGF0X3Bvc2l0aW9uCkBAIC0zMjkxLDcgKzMyOTAsNyBAQAogLy8gYm9yZGVyLXN0eWxlIHByb3BlcnRpZXMuCiAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI2JvcmRlci1jb2xvcgogYm9yZGVyX2NvbG9yX3Byb3BlcnR5X2xpc3Q6Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgJCQgPSBuZXcgY3Nzb206OlByb3BlcnR5TGlzdFZhbHVlOjpCdWlsZGVyKCk7CiAgIH0KICAgfCBib3JkZXJfY29sb3JfcHJvcGVydHlfbGlzdCBjb2xvciB7CkBAIC0zMzQxLDcgKzMzNDAsNyBAQAogLy8gJ2JvcmRlci1zdHlsZScgc2V0cyB0aGUgc3R5bGUgb2YgdGhlIGJvcmRlciwgdW5sZXNzIHRoZXJlIGlzIGEgYm9yZGVyLWltYWdlLgogLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyNib3JkZXItc3R5bGUKIGJvcmRlcl9zdHlsZV9wcm9wZXJ0eV9saXN0OgotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOwogICB9CiAgIHwgYm9yZGVyX3N0eWxlX3Byb3BlcnR5X2xpc3QgbGluZV9zdHlsZSB7CkBAIC0zMzgyLDcgKzMzODEsNyBAQAogICA7CiAKIGJvcmRlcl93aWR0aF9wcm9wZXJ0eV9saXN0OgotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOwogICB9CiAgIHwgYm9yZGVyX3dpZHRoX3Byb3BlcnR5X2xpc3QgYm9yZGVyX3dpZHRoX2VsZW1lbnQgewpAQCAtMzQ1NSw3ICszNDU0LDcgQEAKICAgOwogCiBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV9saXN0OgotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gbmV3IEJvcmRlck9yT3V0bGluZVNob3J0aGFuZCgpOwogICB9CiAgIHwgYm9yZGVyX29yX291dGxpbmVfcHJvcGVydHlfbGlzdCBib3JkZXJfb3Jfb3V0bGluZV9wcm9wZXJ0eV9lbGVtZW50IHsKQEAgLTM0OTQsNyArMzQ5Myw3IEBACiAgIDsKIAogYm9yZGVyX3JhZGl1c19wcm9wZXJ0eV9saXN0OgotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gbmV3IGNzc29tOjpQcm9wZXJ0eUxpc3RWYWx1ZTo6QnVpbGRlcigpOwogICB9CiAgIHwgYm9yZGVyX3JhZGl1c19wcm9wZXJ0eV9saXN0IGJvcmRlcl9yYWRpdXNfZWxlbWVudCB7CkBAIC0zNTU4LDcgKzM1NTcsNyBAQAogICA7CiAKIGJveF9zaGFkb3dfbGlzdDoKLSAgICAvKiBlbXB0eSAqLyB7CisgICAgJWVtcHR5IHsKICAgICAkJCA9IG5ldyBTaGFkb3dQcm9wZXJ0eUluZm8oKTsKICAgfQogICB8IGJveF9zaGFkb3dfbGlzdCBib3hfc2hhZG93X3Byb3BlcnR5X2VsZW1lbnQgewpAQCAtMzk1OCw3ICszOTU3LDcgQEAKICAgOwogCiBvcHRpb25hbF9mb250X3ZhbHVlX2xpc3Q6Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVzdWx0LCB0byBiZSBmaWxsZWQgaW4gYnkKICAgICAvLyBub25fZW1wdHlfb3B0aW9uYWxfZm9udF92YWx1ZV9saXN0CiAgICAgJCQgPSBuZXcgRm9udFNob3J0aGFuZCgpOwpAQCAtNDM5Myw3ICs0MzkyLDcgQEAKICAgOwogCiB0ZXh0X3NoYWRvd19saXN0OgotICAgIC8qIGVtcHR5ICovIHsKKyAgICAlZW1wdHkgewogICAgICQkID0gbmV3IFNoYWRvd1Byb3BlcnR5SW5mbygpOwogICB9CiAgIHwgdGV4dF9zaGFkb3dfbGlzdCB0ZXh0X3NoYWRvd19wcm9wZXJ0eV9lbGVtZW50IHsKQEAgLTQ1NTAsNyArNDU0OSw3IEBACiAvLyBPbmUgb3IgbW9yZSB0cmFuc2Zvcm0gZnVuY3Rpb25zIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLgogLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zLyN0eXBlZGVmLXRyYW5zZm9ybS1saXN0CiB0cmFuc2Zvcm1fbGlzdDoKLSAgICAvKiBlbXB0eSAqLyB7CisgICAgJWVtcHR5IHsKICAgICAkJCA9IG5ldyBjc3NvbTo6VHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsdWU6OkJ1aWxkZXIoKTsKICAgfQogICB8IHRyYW5zZm9ybV9saXN0IHRyYW5zZm9ybV9mdW5jdGlvbiB7CkBAIC00NjgwLDcgKzQ2NzksNyBAQAogCiAKIG1heWJlX3N0ZXBzX3N0YXJ0X29yX2VuZF9wYXJhbWV0ZXI6Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyAnZW5kJy4KICAgICAkJCA9IGNzc29tOjpTdGVwcGluZ1RpbWluZ0Z1bmN0aW9uOjprRW5kOwogICB9CkBAIC01MDEyLDcgKzUwMTEsNyBAQAogICA7CiAKIHNpbmdsZV9hbmltYXRpb246Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVzdWx0LCB0byBiZSBmaWxsZWQgaW4gYnkgc2luZ2xlX2FuaW1hdGlvbl9lbGVtZW50CiAgICAgJCQgPSBuZXcgU2luZ2xlQW5pbWF0aW9uU2hvcnRoYW5kKCk7CiAgIH0KQEAgLTUyMTcsNyArNTIxNiw3IEBACiAgIDsKIAogc2luZ2xlX3RyYW5zaXRpb246Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVzdWx0LCB0byBiZSBmaWxsZWQgaW4gYnkgc2luZ2xlX3RyYW5zaXRpb25fZWxlbWVudAogICAgICQkID0gbmV3IFNpbmdsZVRyYW5zaXRpb25TaG9ydGhhbmQoKTsKICAgfQpAQCAtNTM5Nyw3ICs1Mzk2LDcgQEAKICAgOwogCiBtYXliZV9pbXBvcnRhbnQ6Ci0gICAgLyogZW1wdHkgKi8geyAkJCA9IGZhbHNlOyB9CisgICAgJWVtcHR5IHsgJCQgPSBmYWxzZTsgfQogICB8IGtJbXBvcnRhbnRUb2tlbiBtYXliZV93aGl0ZXNwYWNlIHsgJCQgPSB0cnVlOyB9CiAgIDsKIApAQCAtNTQ2Myw3ICs1NDYyLDcgQEAKIC8vIENvbnN1bWUgYSBkZWNsYXJhdGlvbi4KIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjb25zdW1lLWEtZGVjbGFyYXRpb24wCiBtYXliZV9kZWNsYXJhdGlvbjoKLSAgICAvKiBlbXB0eSAqLyB7ICQkID0gTlVMTDsgfQorICAgICVlbXB0eSB7ICQkID0gTlVMTDsgfQogICB8IGtBbmltYXRpb25EZWxheVRva2VuIG1heWJlX3doaXRlc3BhY2UgY29sb24KICAgICAgIGFuaW1hdGlvbl9kZWxheV9wcm9wZXJ0eV92YWx1ZSBtYXliZV9pbXBvcnRhbnQgewogICAgICQkID0gJDQgPyBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjc3NvbTo6a0FuaW1hdGlvbkRlbGF5UHJvcGVydHksCkBAIC02NjMwLDcgKzY2MjksNyBAQAogICA7CiAKIHJ1bGVfbGlzdDoKLSAgICAvKiBlbXB0eSAqLyB7CisgICAgJWVtcHR5IHsKICAgICAkJCA9IEFkZFJlZihuZXcgY3Nzb206OkNTU1J1bGVMaXN0KCkpOwogICB9CiAgIHwgcnVsZV9saXN0IHJ1bGUgewpAQCAtNjgzMSw3ICs2ODMwLDcgQEAKICAgOwogCiBjb2JhbHRfbXRtX3Jlc29sdXRpb25fbWF0Y2hlZF9tZXNoX2xpc3Q6Ci0gICAgLyogZW1wdHkgKi8geworICAgICVlbXB0eSB7CiAgICAgJCQgPSBuZXcgY3Nzb206Ok1hcFRvTWVzaEZ1bmN0aW9uOjpSZXNvbHV0aW9uTWF0Y2hlZE1lc2hMaXN0QnVpbGRlcigpOwogICB9CiAgIC8vIFNwZWNpZmllcyBhIGRpZmZlcmVudCBtZXNoIGZvciBhIHBhcnRpY3VsYXIgaW1hZ2UgcmVzb2x1dGlvbi4KQEAgLTY4ODAsNyArNjg3OSw3IEBACiAgIDsKIAogbWF5YmVfY29iYWx0X210bV9zdGVyZW9fbW9kZToKLSAgICAvKiBlbXB0eSAqLyB7CisgICAgJWVtcHR5IHsKICAgICAkJCA9IEFkZFJlZihjc3NvbTo6S2V5d29yZFZhbHVlOjpHZXRNb25vc2NvcGljKCkuZ2V0KCkpOwogICB9CiAgIHwgY29tbWEgY29iYWx0X210bV9zdGVyZW9fbW9kZSB7CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvcGFyc2VyLmNjIGIvc3JjL2NvYmFsdC9jc3NfcGFyc2VyL3BhcnNlci5jYwppbmRleCAyZDUwNjFmLi4yYjJjMmZlIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2Nzc19wYXJzZXIvcGFyc2VyLmNjCisrKyBiL3NyYy9jb2JhbHQvY3NzX3BhcnNlci9wYXJzZXIuY2MKQEAgLTg2LDYgKzg2LDEwIEBACiAjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3VybF92YWx1ZS5oIgogI2luY2x1ZGUgIm5iL21lbW9yeV9zY29wZS5oIgogCisjaWYgQklTT05fVkVSU0lPTl9NQUpPUiA9PSAyCisjcHJhZ21hIG1lc3NhZ2UgKCJCdWlsZGluZyB3aXRoIGJpc29uIDIgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVwZ3JhZGUgdG8gYmlzb24gMyIpCisjZW5kaWYgIC8vIEJJU09OX1ZFUlNJT05fTUFKT1IgPT0gMgorCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBjc3NfcGFyc2VyIHsKIApAQCAtMTM1LDcgKzEzOSw5IEBACiAgIHNjb3BlZF9yZWZwdHI8Y3Nzb206Ok1lZGlhTGlzdD4gUGFyc2VNZWRpYUxpc3QoKTsKICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6TWVkaWFRdWVyeT4gUGFyc2VNZWRpYVF1ZXJ5KCk7CiAKKyNpZiBCSVNPTl9WRVJTSU9OX01BSk9SID09IDIKICAgU2Nhbm5lciYgc2Nhbm5lcigpIHsgcmV0dXJuIHNjYW5uZXJfOyB9CisjZW5kaWYgIC8vIEJJU09OX1ZFUlNJT05fTUFKT1IgPT0gMgogCiAgIHZvaWQgc2V0X2xhc3Rfc3ludGF4X2Vycm9yX2xvY2F0aW9uKAogICAgICAgY29uc3QgWVlMVFlQRSYgbGFzdF9zeW50YXhfZXJyb3JfbG9jYXRpb24pIHsKQEAgLTIzMSw3ICsyMzcsMTEgQEAKICAgICBjYWxsYmFjay5SdW4obWVzc2FnZSArICJcbiIgKyBpbnB1dCk7CiAgIH0KIAorI2lmIEJJU09OX1ZFUlNJT05fTUFKT1IgPj0gMworICBmcmllbmQgaW50IHl5cGFyc2UoUGFyc2VySW1wbCogcGFyc2VyX2ltcGwsIFNjYW5uZXIqIHNjYW5uZXIpOworI2Vsc2UgIC8vIEJJU09OX1ZFUlNJT05fTUFKT1IgPj0gMwogICBmcmllbmQgaW50IHl5cGFyc2UoUGFyc2VySW1wbCogcGFyc2VyX2ltcGwpOworI2VuZGlmICAvLyBCSVNPTl9WRVJTSU9OX01BSk9SID49IDMKIH07CiAKIC8vIFRPRE86IFN0b3AgZGVkdXBsaWNhdGluZyB3YXJuaW5ncy4KQEAgLTM5Miw3ICs0MDIsMTEgQEAKICAgLy8gc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi9tYW51YWwvaHRtbF9ub2RlL1BhcnNlci1GdW5jdGlvbi5odG1sCiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpjc3NfcGFyc2VyIiwgIlBhcnNlSW1wbDo6UGFyc2UiKTsKICAgbGFzdF9zeW50YXhfZXJyb3JfbG9jYXRpb25fID0gYmFzZTo6bnVsbG9wdDsKKyNpZiBCSVNPTl9WRVJTSU9OX01BSk9SID49IDMKKyAgaW50IGVycm9yX2NvZGUoeXlwYXJzZSh0aGlzLCAmc2Nhbm5lcl8pKTsKKyNlbHNlICAvLyBCSVNPTl9WRVJTSU9OX01BSk9SID49IDMKICAgaW50IGVycm9yX2NvZGUoeXlwYXJzZSh0aGlzKSk7CisjZW5kaWYgIC8vIEJJU09OX1ZFUlNJT05fTUFKT1IgPj0gMwogICBzd2l0Y2ggKGVycm9yX2NvZGUpIHsKICAgICBjYXNlIDA6CiAgICAgICAvLyBQYXJzZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcyBhYmxlIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuCkBAIC01MDMsNyArNTE3LDExIEBACiAvLyBzeW50YXggZXJyb3IuIE1vc3Qgb2YgZXJyb3IgcmVwb3J0aW5nIGlzIGltcGxlbWVudGVkIGluIHNlbWFudGljIGFjdGlvbnMKIC8vIGluIHRoZSBncmFtbWFyLgogaW5saW5lIHZvaWQgeXllcnJvcihZWUxUWVBFKiBzb3VyY2VfbG9jYXRpb24sIFBhcnNlckltcGwqIHBhcnNlcl9pbXBsLAorI2lmIEJJU09OX1ZFUlNJT05fTUFKT1IgPj0gMworICAgICAgICAgICAgICAgICAgICBTY2FubmVyKiAvKnNjYW5uZXIqLywgY29uc3QgY2hhciogLyptZXNzYWdlKi8pIHsKKyNlbHNlICAvLyBCSVNPTl9WRVJTSU9OX01BSk9SID49IDMKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogLyptZXNzYWdlKi8pIHsKKyNlbmRpZiAgLy8gQklTT05fVkVSU0lPTl9NQUpPUiA+PSAzCiAgIHBhcnNlcl9pbXBsLT5zZXRfbGFzdF9zeW50YXhfZXJyb3JfbG9jYXRpb24oKnNvdXJjZV9sb2NhdGlvbik7CiB9CiAKQEAgLTUyNyw3ICs1NDUsMTEgQEAKIAogLy8gQSBoZWFkZXIgZ2VuZXJhdGVkIGJ5IEJpc29uIG11c3QgYmUgaW5jbHVkZWQgaW5zaWRlIG91ciBuYW1lc3BhY2UKIC8vIHRvIGF2b2lkIGdsb2JhbCBuYW1lc3BhY2UgcG9sbHV0aW9uLgorI2lmIEJJU09OX1ZFUlNJT05fTUFKT1IgPCAzCisjaW5jbHVkZSAiY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci1iaXNvbi0yX2ltcGxfZ2VuZXJhdGVkLmgiCisjZWxzZQogI2luY2x1ZGUgImNvYmFsdC9jc3NfcGFyc2VyL2dyYW1tYXJfaW1wbF9nZW5lcmF0ZWQuaCIKKyNlbmRpZiAgLy8gQklTT05fVkVSU0lPTl9NQUpPUiA8IDMKIAogI2lmIGRlZmluZWQoX19jbGFuZ19fKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9kb2MvYnJhbmNoaW5nLm1kIGIvc3JjL2NvYmFsdC9kb2MvYnJhbmNoaW5nLm1kCmluZGV4IGFlNDEzNzMuLmVjMjdkYjcgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvZG9jL2JyYW5jaGluZy5tZAorKysgYi9zcmMvY29iYWx0L2RvYy9icmFuY2hpbmcubWQKQEAgLTIxLDQxICsyMSw1MyBAQAogCiAgIDEuIEZlYXR1cmUgd29yayBpcyBkb25lIGluIHRoZSBgbWFzdGVyYCBicmFuY2guCiAKLSAgMi4gT25jZSBhbGwgZmVhdHVyZSB3b3JrIGlzIGNvbXBsZXRlZCwKLSAgICAgYSBbUmVsZWFzZSBOdW1iZXJdKHZlcnNpb25pbmcubWQjUmVsZWFzZS1OdW1iZXIpIGlzIHJlc2VydmVkIGFuZCBhIGJyYW5jaAotICAgICBpcyBjcmVhdGVkLiBUaGUgYnJhbmNoIHdpbGwgYmUgbmFtZWQgYHJjXzxyZWxlYXNlLW51bWJlcj5gIHRvIGluZGljYXRlIHRoYXQKLSAgICAgdGhlIGJyYW5jaCByZXByZXNlbnRzIGEgcmVsZWFzZSBjYW5kaWRhdGUgZm9yIHZlcnNpb24gYDxyZWxlYXNlLW51bWJlcj5gLAotICAgICBhbmQgbm90IHRoZSBmaW5hbCByZWxlYXNlLgorICAyLiBPbmNlIGFsbCBmZWF0dXJlIHdvcmsgaXMgY29tcGxldGVkLCBhIHJlbGVhc2UgYnJhbmNoIGlzIGNyZWF0ZWQuIFRoZSBicmFuY2gKKyAgICAgd2lsbCBiZSBuYW1lZCAiW1tGZWF0dXJlIFllYXJdKHZlcnNpb25pbmcubWQjRmVhdHVyZS1ZZWFyKV0uW1tQdXJwb3NlXSh2ZXJzaW9uaW5nLm1kI1B1cnBvc2UpXS5bW1VwZGF0ZSBOdW1iZXJdKHZlcnNpb25pbmcubWQjVXBkYXRlLU51bWJlcildKyIuCisgICAgIE5vdGUgdGhhdCB3aGlsZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgQ29iYWx0CisgICAgIFt2ZXJzaW9uXSh2ZXJzaW9uaW5nLm1kKSwgaXQgZmVhdHVyZXMgYSBgK2Agc3ltYm9sIGF0IHRoZSBlbmQsIGluZGljYXRpbmcKKyAgICAgdGhhdCB0aGUgYnJhbmNoIG1heSBldmVudHVhbGx5IGNvbnRhaW4gbXVsdGlwbGUgcmVsZWFzZSB1cGRhdGVzLAorICAgICBhbGwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgdXBkYXRlIG51bWJlci4gIEluIHBhcnRpY3VsYXIsIGEKKyAgICAgc2luZ2xlIGJyYW5jaCBtYXkgaG9zdCBtdWx0aXBsZSByZWxlYXNlcy91cGRhdGVzLiBTaG91bGQgYW5vdGhlciByZWxlYXNlCisgICAgIGJyYW5jaCBiZSBjdXQgZnJvbSBtYXN0ZXIgd2l0aCBhIHByZS1leGlzdGluZyAoZmVhdHVyZSB5ZWFyLCBwdXJwb3NlKQorICAgICBwYWlyLCB0aGUgbmV3IGJyYW5jaCB3aWxsIGhhdmUgYW4gdXBkYXRlIG51bWJlciBlcXVpdmFsZW50IHRvIHRoZSBtb3N0CisgICAgIHJlY2VudGx5IHJlbGVhc2VkIHVwZGF0ZSBudW1iZXIsIHBsdXMgb25lLiAgTm90ZSB0aGF0IHdlIGV4cGVjdCBpdCB0byBiZQorICAgICByYXJlIHRoYXQgd2Ugd2lsbCBuZWVkIGEgYnJhbmNoIG90aGVyIHRoYW4gdGhlIGAxK2AgYnJhbmNoLgogCi0gICAgIEFuIFJDIGFubm91bmNlbWVudCB3aWxsIGJlIG1hZGUgdG8gW2NvYmFsdC1kZXZAZ29vZ2xlZ3JvdXBzLmNvbV1bY29iYWx0LWRldl0uCisgICAgIEFuIGV4YW1wbGUgcmVsZWFzZSBicmFuY2ggbmFtZSBpcyBgMTkubHRzLjErYC4KIAotICAgICBJdCBzaG91bGQgYmUgdW5kZXJzdG9vZCB0aGF0IFJDIGJyYW5jaGVzIGFyZSBiZWluZyBzdGFiaWxpemVkIGFuZCBhcmUKLSAgICAgc3ViamVjdCB0byBjaGFuZ2VzLgorICAgICBBbiBSQyBhbm5vdW5jZW1lbnQgd2lsbCBiZSBtYWRlIHRvCisgICAgIFtjb2JhbHQtZGV2QGdvb2dsZWdyb3Vwcy5jb21dW2NvYmFsdC1kZXZdLgorCisgICAgIE5vdGUgdGhhdCBhIHJlbGVhc2UgYnJhbmNoIGltcGxpZXMgdGhhdCBjb2RlIG9uIHRoYXQgYnJhbmNoIGlzIGJlaW5nCisgICAgIHN0YWJpbGl6ZWQsIG5vdCB0aGF0IGl0IGlzIHJlYWR5IGZvciByZWxlYXNlLiAgVmVyc2lvbnMgb2YgQ29iYWx0IHRoYXQKKyAgICAgYXJlIHJlYWR5IGZvciByZWxlYXNlIHdpbGwgaGF2ZSBhIGRlZGljYXRlZCBgKi5zdGFibGVgIGJyYW5jaCBwb2ludGluZyB0bworICAgICB0aGVtLCBhbmQgd2lsbCBiZSBkaXNjdXNzZWQgbGF0ZXIuCiAKICAgMy4gQXMgYnVncyBhcmUgZGlzY292ZXJlZCBhbmQgZmVlZGJhY2sgcmVjZWl2ZWQgZnJvbSBwYXJ0bmVycywgZml4ZXMgd2lsbCBiZQotICAgICBjaGVycnktcGlja2VkIGludG8gdGhlIHJlbGVhc2UgY2FuZGlkYXRlIGJyYW5jaC4gRWFjaCB1cGRhdGUgdG8KLSAgICAgYHJjXzxyZWxlYXNlLW51bWJlcj5gIHdpbGwgaGF2ZSBhbgotICAgICBpbmNyZWFzaW5nIFtCdWlsZCBJRF0odmVyc2lvbmluZy5tZCNCdWlsZC1JRCkuCisgICAgIGNoZXJyeS1waWNrZWQgaW50byB0aGUgcmVsZWFzZSBjYW5kaWRhdGUgYnJhbmNoLiBUaGVzZSBjaGVycnktcGlja3Mgc2hvdWxkCisgICAgIG5vdCBiZSBjb25zaWRlcmVkIHN0YWJsZSBhZ2FpbiB1bnRpbCB0aGUgYCouc3RhYmxlYCBicmFuY2ggaXMgdXBkYXRlZC4KIAogICA0LiBBcyB0aW1lIGdvZXMgb24sIHRoZSBudW1iZXIgb2YgY2hlcnJ5LXBpY2tzIHdpbGwgZGVjcmVhc2UgaW4gbnVtYmVyIGFuZAogICAgICBzY29wZS4KIAotICA1LiBPbmNlIHRoZSBicmFuY2ggaXMgZGVlbWVkIHRvIGJlIGZlYXR1cmUtY29tcGxldGUgYW5kIHN0YWJsZSwgaXQgd2lsbCBiZQotICAgICAqKnJlbmFtZWQqKiB0byBgcmVsZWFzZV88cmVsZWFzZS1udW1iZXI+YCwgcmVwcmVzZW50aW5nIGFuIGFjdHVhbCBDb2JhbHQKLSAgICAgcmVsZWFzZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBSQyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGFuZCB0aGUgcmVsZWFzZQotICAgICBicmFuY2ggd2lsbCBwZXJtYW5lbnRseSB0YWtlIGl0cyBwbGFjZS4KKyAgNS4gT25jZSBhIGNvbW1pdCBvbiB0aGUgYnJhbmNoIGlzIGRlZW1lZCB0byBiZSBmZWF0dXJlLWNvbXBsZXRlIGFuZCBzdGFibGUsIGl0CisgICAgIHdpbGwgYmUgdGFnZ2VkIHdpdGggdGhlIGN1cnJlbnQgW3ZlcnNpb25dKHZlcnNpb25pbmcubWQpIGZvciB0aGF0IGJyYW5jaCwKKyAgICAgYW5kIHRoZSB2ZXJzaW9uIHdpbGwgYmUgaW5jcmVtZW50ZWQgZm9yIGFsbCBzdWJzZXF1ZW50IGNvbW1pdHMuICBBIHNwZWNpYWwKKyAgICAgYnJhbmNoIHRoYXQgYWN0cyBtb3JlIGxpa2UgYSAibW92aW5nIHRhZyIgbmFtZWQgIltbRmVhdHVyZSBZZWFyXSh2ZXJzaW9uaW5nLm1kI0ZlYXR1cmUtWWVhcildLltbUHVycG9zZV0odmVyc2lvbmluZy5tZCNQdXJwb3NlKV0uc3RhYmxlIgorICAgICB3aWxsIGJlIGNyZWF0ZWQgdG8gcG9pbnQgdG8gdGhlIG5ld2x5IHJlbGVhc2VkIHZlcnNpb24uICBTaG91bGQgYQorICAgICBzdWJzZXF1ZW50IHVwZGF0ZSBiZSBtYWRlIGZvciB0aGUgZ2l2ZW4gZmVhdHVyZSB5ZWFyIGFuZCBwdXJwb3NlLCB0aGUKKyAgICAgYCouc3RhYmxlYCBicmFuY2ggd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXdlc3QgdXBkYXRlLgorCisgICAgIEFuIGV4YW1wbGUgc3RhYmxlIGJyYW5jaCBuYW1lIGlzIGAxOS5sdHMuc3RhYmxlYC4KKworICAgICBTb21lIGV4YW1wbGUgcmVsZWFzZSB0YWdzIGFyZToKKyAgICAgIC0gYDE5Lmx0cy4xYAorICAgICAgLSBgMTkubHRzLjJgCisgICAgICAtIGAyMC5sdHMuMWAKIAogICAgICBBIHJlbGVhc2UgYW5ub3VuY2VtZW50IHdpbGwgYmUgbWFkZQogICAgICB0byBbY29iYWx0LWRldkBnb29nbGVncm91cHMuY29tXVtjb2JhbHQtZGV2XS4KIAotICA2LiBUaGUgQ29iYWx0IHByb2plY3Qgd2lsbCBzdHJvbmdseSByZXNpc3QgdXBkYXRpbmcgcmVsZWFzZWQgdmVyc2lvbnMsIGJ1dCBtYXkKLSAgICAgbmVlZCB0byBiYWNrLXBvcnQgZml4ZXMgZnJvbSB0aW1lIHRvIHRpbWUuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHRoZXJlCi0gICAgIGFyZSBhbnkgc2V2ZXJlIHNlY3VyaXR5IGZsYXdzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQuIFNvIGNoZXJyeS1waWNrcwotICAgICBhcmUgc3RpbGwgcG9zc2libGUgaW50byBgcmVsZWFzZV88cmVsZWFzZS1udW1iZXI+YCByZWxlYXNlIGJyYW5jaGVzLgotCi0gICAgIEluIHRoZXNlIHJhcmUgY2FzZXMsIGFubm91bmNlbWVudHMgd2lsbCBiZSBtYWRlCi0gICAgIHRvIFtjb2JhbHQtZGV2QGdvb2dsZWdyb3Vwcy5jb21dW2NvYmFsdC1kZXZdLgotCiAKICMjIFdvcmsgQnJhbmNoZXMKIApAQCAtNjgsMTEgKzgwLDExIEBACiBzcGVjaWZpYyBhbmQgbGltaXRlZCBzZXQgb2YgcGVvcGxlLCBhbmQgbWF5IGRpc2FwcGVhciBhdCBhbnkgdGltZS4KIAogCi0jIyBDYXBpdGFsaXphdGlvbiwgQnJhbmNoIE5hbWVzLCBhbmQgWW91CisjIyBPbGRlciBicmFuY2hpbmcgc2NoZW1lcwogCi1Tb21lIG9sZGVyIGJyYW5jaGVzIGZvbGxvd2VkIGFuIGBBTExfQ0FQU19TTkFLRV9DQVNFYCBuYW1pbmcgY29udmVudGlvbi4gIEdvaW5nCi1mb3J3YXJkLCBicmFuY2ggbmFtZXMgd2lsbCBmb2xsb3cgYSBgbG93ZXJfc25ha2VfY2FzZWAgbmFtaW5nIGNvbnZlbnRpb24uCi0KK09sZGVyIGJyYW5jaGVzIGhhdmUgYmVlbiBmb2xsb3dpbmcgZGlmZmVyZW5jaCBicmFuY2ggbmFtaW5nIHNjaGVtZXMsIGFuZCBmb3IKK2EgZGVzY3JpcHRpb24gb2YgdGhvc2Ugc2NoZW1lcywgdGhlIHZlcnNpb24gb2YgdGhpcyBicmFuY2hpbmcubWQgZmlsZSB3aXRoaW4KK3Rob3NlIGJyYW5jaGVzIHNob3VsZCBiZSBjb25zdWx0ZWQuCiAKICMjIE90aGVyIFJlYWRpbmcKIApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9kb2MvcGVyZm9ybWFuY2VfdHVuaW5nLm1kIGIvc3JjL2NvYmFsdC9kb2MvcGVyZm9ybWFuY2VfdHVuaW5nLm1kCmluZGV4IGEzYWEyMzIuLjNhM2I4NWIgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvZG9jL3BlcmZvcm1hbmNlX3R1bmluZy5tZAorKysgYi9zcmMvY29iYWx0L2RvYy9wZXJmb3JtYW5jZV90dW5pbmcubWQKQEAgLTMwLDYgKzMwLDMyIEBACiAqKlRhZ3M6KiogKmZyYW1lcmF0ZSwgc3RhcnR1cCwgYnJvd3NlLXRvLXdhdGNoLCBjcHUgbWVtb3J5LCBpbnB1dCBsYXRlbmN5LioKIAogCisjIyMgU3dpdGNoIEphdmFTY3JpcHQgRW5naW5lIHRvIFY4CisKK0NvYmFsdCBzdXBwb3J0cyBib3RoIFNwaWRlck1vbmtleSBhbmQgVjggYXMgSmF2YVNjcmlwdCBlbmdpbmVzLiAgU3BpZGVyTW9ua2V5CitpcyB0aGUgZGVmYXVsdCBKYXZhU2NyaXB0IGVuZ2luZSBzaW5jZSBpdCBpcyB0aGUgbW9zdCBjb21wYXRpYmxlIGluIHRoYXQgaXQKK2RvZXMgbm90IHJlcXVpcmUgeW91ciBwbGF0Zm9ybSB0byBzdXBwb3J0IEp1c3QtSW4tVGltZSAoSklUKSBjb21waWxpbmcuCitIb3dldmVyLCBpZiB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LCB3ZSBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlCitWOCwgYXMgaXQgaGFzIGJlZW4gc2hvd24gdG8gcHJvdmlkZSAyMC01MCUgc3BlZWQgaW1wcm92ZW1lbnRzIG9uIEphdmFTY3JpcHQKK2V4ZWN1dGlvbiBhY3Jvc3MgdGhlIGJvYXJkLiAgTm90ZSBob3dldmVyIHRoYXQgVjggaGFzIGFsc28gYmVlbiBmb3VuZCB0bworY29uc3VtZSBhcm91bmQgMTBNQiBtb3JlIG1lbW9yeSB0aGFuIFNwaWRlck1vbmtleS4KKworVG8gZW5hYmxlIFY4LCB5b3UgbXVzdCBtb2RpZnkgdGhlIGBHZXRWYXJpYWJsZXMoKWAgbWV0aG9kIGluIHlvdXIKK2BneXBfY29uZmlndXJhdGlvbi5weWAgZmlsZSBhbmQgZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlcyBkaWN0aW9uYXJ5IHRoYXQgaXMKK3JldHVybmVkIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5L3ZhbHVlIHBhaXJzOgorCitgYGAKK3sKKyAgJ2phdmFzY3JpcHRfZW5naW5lJzogJ3Y4JywKKyAgJ2NvYmFsdF9lbmFibGVfaml0JzogMSwKK30KK2BgYAorCitOb3RlIGFsc28gdGhhdCB1c2Ugb2YgVjggcmVxdWlyZXMgU3RhcmJvYXJkIHZlcnNpb24gMTAgb3IgaGlnaGVyLgorCisqKlRhZ3M6KiogKnN0YXJ0dXAsIGJyb3dzZS10by13YXRjaCwgY3B1IG1lbW9yeSwgaW5wdXQgbGF0ZW5jeS4qCisKKwogIyMjIEZyYW1lcmF0ZSB0aHJvdHRsaW5nCiAKIElmIHlvdSdyZSB3aWxsaW5nIHRvIGFjY2VwdCBhIGxvd2VyIGZyYW1lcmF0ZSwgdGhlcmUgaXMgcG90ZW50aWFsIHRoYXQKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvZG9jL3ZlcnNpb25pbmcubWQgYi9zcmMvY29iYWx0L2RvYy92ZXJzaW9uaW5nLm1kCmluZGV4IGI5NDUwNjIuLjI0MjUzNjQgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvZG9jL3ZlcnNpb25pbmcubWQKKysrIGIvc3JjL2NvYmFsdC9kb2MvdmVyc2lvbmluZy5tZApAQCAtMSwyNyArMSwzNyBAQAogIyBDb2JhbHQgVmVyc2lvbmluZwogCi1BIENvYmFsdCB2ZXJzaW9uIGNvbnNpc3RzIG9mIHR3byBjb21wb25lbnRzOiBUaGUgUmVsZWFzZSBOdW1iZXIgYW5kIHRoZSBCdWlsZAotSUQuIFNvbWUgcmVhbCBoaXN0b3JpY2FsIENvYmFsdCB2ZXJzaW9uIGV4YW1wbGVzOgorQ29iYWx0IHZlcnNpb25zLCBhcyB0aGV5IGFwcGVhciBpbiB0aGUgdXNlciBhZ2VudCwgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKIAotICAqIGAyLjE1MTQ3YAotICAqIGAzLjE2MTM4YAotICAqIGA0LjE2MTM0YAotICAqIGA2LjE4OTcxYAorKipbRmVhdHVyZSBZZWFyXSoqLioqW1B1cnBvc2VdKiouKipbVXBkYXRlIE51bWJlcl0qKi4qKltCdWlsZCBJRF0qKgogCi1Zb3UgZ2V0IHRoZSBpZGVhLiBUaGUgbnVtYmVyIGJlZm9yZSB0aGUgZG90IGlzIHRoZSAiUmVsZWFzZSBOdW1iZXIuIiBUaGUgbnVtYmVyCi1hZnRlciB0aGUgZG90IGlzIHRoZSAiQnVpbGQgSUQuIgorVGhlIG1lYW5zaW9ucyBvZiB0aGVzZSBjb21wb25lbnRzIGFyZSBkZXNjcmliZWQgYmVsb3cuCiAKLSMjIFJlbGVhc2UgTnVtYmVyCitFeGFtcGxlIENvYmFsdCB2ZXJzaW9ucyB3b3VsZCBiZToKIAotQSAiQ29iYWx0IHJlbGVhc2UiIGlzIGFuIG9mZmljaWFsLCB0ZXN0ZWQgdmVyc2lvbiBvZiBDb2JhbHQgdGhhdCBpcyBpbnRlbmRlZCB0bwotYmUgZGVwbG95YWJsZSB0byBwcm9kdWN0aW9uLiBUaGUgIlJlbGVhc2UgTnVtYmVyIiBpcyBhIHNpbmdsZSBjb3VudGluZyBudW1iZXIsCi1zdGFydGluZyBhdCAiMSIgZm9yIG91ciBmaXJzdCByZWxlYXNlLCBhbmQgaW5jcmVhc2luZyBieSBvbmUgZm9yIGV2ZXJ5IHJlbGVhc2UKLXRoZXJlYWZ0ZXIuIFRoaXMgbnVtYmVyIGlzIGNoZWNrZWQgaW50byBbYHNyYy9jb2JhbHQvdmVyc2lvbi5oYF0oLi4vdmVyc2lvbi5oKSwKLWFuZCByZXByZXNlbnRzICoqY29hcnNlKiogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBzb3VyY2UgdHJlZSB3aGVuIHdlCi1kZWNpZGVkIHRvIGRvIGEgcmVsZWFzZS4KKyAgKiBgMTkubHRzLjEuNDA0NTVgCisgICogYDE5Lmx0cy4yLjUzMDQ3YAorICAqIGAyMC5sdHMuMS42NDU1M2AKIAotSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gcG9pbnQgcmVsZWFzZXMsIG9yIG1ham9yIG9yIG1pbm9yCi1yZWxlYXNlcy4gRWFjaCByZWxlYXNlIGdldHMgaXRzIG93biB1bmlxdWUgY291bnRpbmcgbnVtYmVyLgorIyMgRmVhdHVyZSBZZWFyCisKK0NvYmFsdCBmZWF0dXJlcyBhcmUgdGllZCB0byBhIHllYXJseSByZWxlYXNlIGN5Y2xlIGFuZCB0aGlzIG51bWJlciBpbmRpY2F0ZXMKK3RoZSB5ZWFybHkgZmVhdHVyZSBzZXQgdGhhdCB0aGlzIHZlcnNpb24gb2YgQ29iYWx0IHN1cHBvcnRzLiAgSXQgaXMgdGhlIGxhc3QKK3R3byBkaWdpdHMgb2YgdGhlIHllYXIgb2YgdGhlIHRhcmdldCBmZWF0dXJlIHNldC4gIEZvciBleGFtcGxlIGZvciB0aGUgMjAxOQorZmVhdHVyZSBzZXQsIHRoaXMgdmFsdWUgd2lsbCBiZSBgMTlgLgorCisjIyBQdXJwb3NlCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgYnVpbGQsIHVzdWFsbHkgbmFtZWQgYWZ0ZXIgdGhlIHJlYXNvbiB0aGF0IGEgYnJhbmNoIGlzIGN1dC4KK09uIHRoZSBtYXN0ZXIgYnJhbmNoIGl0IHdpbGwgYmUgYG1hc3RlcmAsIGFuZCBvbiBMVFMgYnJhbmNoZXMgZm9yIGV4YW1wbGUgaXQKK3dpbGwgYmUgYGx0c2AuCisKKyMjIFVwZGF0ZSBOdW1iZXIKKworVGhlIGN1cnJlbnQgdXBkYXRlIHJldmlzaW9uIG51bWJlciAoZS5nLiByZWxlYXNlIG51bWJlcikgZm9yIGEgZ2l2ZW4gcGFpciBvZgordmFsdWVzIGFib3ZlLiAgVGhpcyB3aWxsIGFsd2F5cyBiZSBgMGAgb24gdGhlIG1hc3RlciBicmFuY2guICBXaGVuIGEgcmVsZWFzZQorYnJhbmNoIGlzIGN1dCwgd2lsbCBiZSBtb2RpZmllZCB0byBzdGFydCBhdCBgMWAsIGFuZCBiZSBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYQorcmVsZWFzZSBvciB1cGRhdGUgaXMgcmVsZWFzZWQuICBJdCBpcyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIHVwZGF0ZXMgYXJlCityZWxlYXNlZCBvZmYgb2YgdGhlIHNhbWUgcmVsZWFzZSBicmFuY2gsIGlmIG5ldyBidWdzIGFyZSBkaXNjb3ZlcmVkIGFuZCBmaXhlZC4KIAogIyMgQnVpbGQgSUQKIApAQCAtMzgsNiArNDgsMzEgQEAKIGxhdGVzdCB2ZXJzaW9uIG9mIGEgbmV3IENvYmFsdCByZWxlYXNlLiBBbiBleGFtcGxlIGZyb20gYWJvdmU6IENvYmFsdCBgNC4xNjEzNGAKIHdhcyBwcm9kdWNlZCBlYXJsaWVyIHRoYW4gQ29iYWx0IGAzLjE2MTM4YCwgdGh1cyBoYXMgYSBsb3dlciBCdWlsZCBJRC4KIAorIyMgT2xkZXIgQ29iYWx0IHZlcnNpb25pbmcgc2NoZW1lCisKK0EgQ29iYWx0IHZlcnNpb24gY29uc2lzdHMgb2YgdHdvIGNvbXBvbmVudHM6IFRoZSBSZWxlYXNlIE51bWJlciBhbmQgdGhlIEJ1aWxkCitJRC4gU29tZSByZWFsIGhpc3RvcmljYWwgQ29iYWx0IHZlcnNpb24gZXhhbXBsZXM6CisKKyAgKiBgMi4xNTE0N2AKKyAgKiBgMy4xNjEzOGAKKyAgKiBgNC4xNjEzNGAKKyAgKiBgNi4xODk3MWAKKworWW91IGdldCB0aGUgaWRlYS4gVGhlIG51bWJlciBiZWZvcmUgdGhlIGRvdCBpcyB0aGUgIlJlbGVhc2UgTnVtYmVyLiIgVGhlIG51bWJlcgorYWZ0ZXIgdGhlIGRvdCBpcyB0aGUgIkJ1aWxkIElELiIKKworIyMjIFJlbGVhc2UgTnVtYmVyCisKK0luIG9sZGVyIENvYmFsdCB2ZXJzaW9uaW5nIHNjaGVtZXMsIGEgIkNvYmFsdCByZWxlYXNlIiBpcyBhbiBvZmZpY2lhbCwgdGVzdGVkCit2ZXJzaW9uIG9mIENvYmFsdCB0aGF0IGlzIGludGVuZGVkIHRvIGJlIGRlcGxveWFibGUgdG8gcHJvZHVjdGlvbi4gVGhlCisiUmVsZWFzZSBOdW1iZXIiIGlzIGEgc2luZ2xlIGNvdW50aW5nIG51bWJlciwgc3RhcnRpbmcgYXQgIjEiIGZvciBvdXIgZmlyc3QKK3JlbGVhc2UsIGFuZCBpbmNyZWFzaW5nIGJ5IG9uZSBmb3IgZXZlcnkgcmVsZWFzZSB0aGVyZWFmdGVyLiBUaGlzIG51bWJlciBpcworY2hlY2tlZCBpbnRvIFtgc3JjL2NvYmFsdC92ZXJzaW9uLmhgXSguLi92ZXJzaW9uLmgpLCBhbmQgcmVwcmVzZW50cyAqKmNvYXJzZSoqCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHNvdXJjZSB0cmVlIHdoZW4gd2UgZGVjaWRlZCB0byBkbyBhIHJlbGVhc2UuCisKK0l0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgYXJlIG5vIHBvaW50IHJlbGVhc2VzLCBvciBtYWpvciBvciBtaW5vcgorcmVsZWFzZXMuIEVhY2ggcmVsZWFzZSBnZXRzIGl0cyBvd24gdW5pcXVlIGNvdW50aW5nIG51bWJlci4KKwogIyMgT3RoZXIgUmVhZGluZwogCiAgICogW0NvYmFsdCBCcmFuY2hpbmddKGJyYW5jaGluZy5tZCkKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvZG9tL2V2ZW50X3F1ZXVlLmNjIGIvc3JjL2NvYmFsdC9kb20vZXZlbnRfcXVldWUuY2MKaW5kZXggYjlkMmY2Ni4uNTE4MGFkMCAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9kb20vZXZlbnRfcXVldWUuY2MKKysrIGIvc3JjL2NvYmFsdC9kb20vZXZlbnRfcXVldWUuY2MKQEAgLTUyLDI0ICs1MiwyNiBAQAogCiB2b2lkIEV2ZW50UXVldWU6OlRyYWNlTWVtYmVycyhzY3JpcHQ6OlRyYWNlciogdHJhY2VyKSB7CiAgIHRyYWNlci0+VHJhY2VJdGVtcyhldmVudHNfKTsKKyAgdHJhY2VyLT5UcmFjZUl0ZW1zKGZpcmluZ19ldmVudHNfKTsKIH0KIAogdm9pZCBFdmVudFF1ZXVlOjpEaXNwYXRjaEV2ZW50cygpIHsKICAgRENIRUNLKG1lc3NhZ2VfbG9vcF8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7CisgIERDSEVDSyhmaXJpbmdfZXZlbnRzXy5lbXB0eSgpKTsKIAogICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZXZlbnRfdGFyZ2V0XyBzdGF5cyBhbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mCiAgIC8vIGFsbCBldmVudCBkaXNwYXRjaGVzLgogICBzY29wZWRfcmVmcHRyPEV2ZW50VGFyZ2V0PiBrZWVwX2FsaXZlX3JlZmVyZW5jZShldmVudF90YXJnZXRfKTsKIAotICBFdmVudHMgZXZlbnRzOwotICBldmVudHMuc3dhcChldmVudHNfKTsKKyAgZmlyaW5nX2V2ZW50c18uc3dhcChldmVudHNfKTsKIAotICBmb3IgKEV2ZW50czo6aXRlcmF0b3IgaXRlciA9IGV2ZW50cy5iZWdpbigpOyBpdGVyICE9IGV2ZW50cy5lbmQoKTsgKytpdGVyKSB7CisgIGZvciAoRXZlbnRzOjppdGVyYXRvciBpdGVyID0gZmlyaW5nX2V2ZW50c18uYmVnaW4oKTsgaXRlciAhPSBmaXJpbmdfZXZlbnRzXy5lbmQoKTsgKytpdGVyKSB7CiAgICAgc2NvcGVkX3JlZnB0cjxFdmVudD4mIGV2ZW50ID0gKml0ZXI7CiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9CiAgICAgICAgIGV2ZW50LT50YXJnZXQoKSA/IGV2ZW50LT50YXJnZXQoKS5nZXQoKSA6IGV2ZW50X3RhcmdldF87CiAgICAgdGFyZ2V0LT5EaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgfQorICBmaXJpbmdfZXZlbnRzXy5jbGVhcigpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgZG9tCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2RvbS9ldmVudF9xdWV1ZS5oIGIvc3JjL2NvYmFsdC9kb20vZXZlbnRfcXVldWUuaAppbmRleCBkODIwMDBlLi43ZjBiYTJmIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L2RvbS9ldmVudF9xdWV1ZS5oCisrKyBiL3NyYy9jb2JhbHQvZG9tL2V2ZW50X3F1ZXVlLmgKQEAgLTU0LDYgKzU0LDkgQEAKICAgRXZlbnRUYXJnZXQqIGV2ZW50X3RhcmdldF87CiAgIHNjb3BlZF9yZWZwdHI8YmFzZTo6TWVzc2FnZUxvb3BQcm94eT4gbWVzc2FnZV9sb29wXzsKICAgRXZlbnRzIGV2ZW50c187CisgIC8vIEV2ZW50cyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZmlyZWQuIFdlIG5lZWQgdGhpcyBhcyBsb2NhbCB2YXJpYWJsZSBmb3IKKyAgLy8gSmF2YVNjcmlwdCB0cmFjaW5nIHB1cnBvc2UuCisgIEV2ZW50cyBmaXJpbmdfZXZlbnRzXzsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBkb20KZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvZG9tL2ZvbnRfZmFjZV91cGRhdGVyLmNjIGIvc3JjL2NvYmFsdC9kb20vZm9udF9mYWNlX3VwZGF0ZXIuY2MKaW5kZXggN2E2ZWIwMS4uYTQ1YmE5NCAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9kb20vZm9udF9mYWNlX3VwZGF0ZXIuY2MKKysrIGIvc3JjL2NvYmFsdC9kb20vZm9udF9mYWNlX3VwZGF0ZXIuY2MKQEAgLTIwNyw3ICsyMDcsOCBAQAogLy8gIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNkZXNjZGVmLXNyYwogdm9pZCBGb250RmFjZVByb3ZpZGVyOjpWaXNpdFVybFNyYyhjc3NvbTo6VXJsU3JjVmFsdWUqIHVybF9zcmMpIHsKICAgaWYgKHVybF9zcmMtPmZvcm1hdCgpLmVtcHR5KCkgfHwgdXJsX3NyYy0+Zm9ybWF0KCkgPT0gInRydWV0eXBlIiB8fAotICAgICAgdXJsX3NyYy0+Zm9ybWF0KCkgPT0gIm9wZW50eXBlIiB8fCB1cmxfc3JjLT5mb3JtYXQoKSA9PSAid29mZiIpIHsKKyAgICAgIHVybF9zcmMtPmZvcm1hdCgpID09ICJvcGVudHlwZSIgfHwgdXJsX3NyYy0+Zm9ybWF0KCkgPT0gIndvZmYiIHx8CisgICAgICB1cmxfc3JjLT5mb3JtYXQoKSA9PSAid29mZjIiKSB7CiAgICAgdXJsX3NyYy0+dXJsKCktPkFjY2VwdCh0aGlzKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9sYXlvdXQvYm94LmNjIGIvc3JjL2NvYmFsdC9sYXlvdXQvYm94LmNjCmluZGV4IGI1ZTliYWQuLjIzOTBiMzggMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbGF5b3V0L2JveC5jYworKysgYi9zcmMvY29iYWx0L2xheW91dC9ib3guY2MKQEAgLTEyODYsNyArMTI4NiwxMiBAQAogICAgICAgcGFkZGluZ19yb3VuZGVkX2Nvcm5lcnNfaWZfZGlmZmVyZW50CiAgICAgICAgICAgPyBwYWRkaW5nX3JvdW5kZWRfY29ybmVyc19pZl9kaWZmZXJlbnQKICAgICAgICAgICA6IHJvdW5kZWRfY29ybmVyczsKLSAgcmV0dXJuIHBhZGRpbmdfcm91bmRlZF9jb3JuZXJzOworCisgIGlmIChwYWRkaW5nX3JvdW5kZWRfY29ybmVycykgeworICAgIHJldHVybiBwYWRkaW5nX3JvdW5kZWRfY29ybmVycy0+Tm9ybWFsaXplKG1hdGg6OlJlY3RGKEdldFBhZGRpbmdCb3hTaXplKCkpKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gcGFkZGluZ19yb3VuZGVkX2Nvcm5lcnM7CisgIH0KIH0KIAogdm9pZCBCb3g6OlJlbmRlckFuZEFuaW1hdGVCb3hTaGFkb3coCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS9jb2JhbHQvbGF5b3V0X3Rlc3RzLnR4dCBiL3NyYy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2NvYmFsdC9sYXlvdXRfdGVzdHMudHh0CmluZGV4IGQyMDhlZmEuLjUwZTBkNTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2NvYmFsdC9sYXlvdXRfdGVzdHMudHh0CisrKyBiL3NyYy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2NvYmFsdC9sYXlvdXRfdGVzdHMudHh0CkBAIC0yNCwzICsyNCw0IEBACiB1c2VyLWFnZW50LXN0eWxlLXNoZWV0LWRpc3BsYXkKIHVzZXItYWdlbnQtdGVzdAogd2luZG93LW9uZXJyb3IKK3dvZmYyLWRlY29kaW5nCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS9jb2JhbHQvd29mZjItZGVjb2RpbmcuaHRtbCBiL3NyYy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2NvYmFsdC93b2ZmMi1kZWNvZGluZy5odG1sCmluZGV4IGMzODZjNTcuLmNiMzUxNzAgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2NvYmFsdC93b2ZmMi1kZWNvZGluZy5odG1sCisrKyBiL3NyYy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2NvYmFsdC93b2ZmMi1kZWNvZGluZy5odG1sCkBAIC00LDcgKzQsNyBAQAogICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiA8c3R5bGU+QGZvbnQtZmFjZSB7CiAgICAgZm9udC1mYW1pbHk6IE1FZ2Fsb3BvbGlzRXh0cmE7Ci0gICAgc3JjOiB1cmwoc3VwcG9ydC9NRWdhbG9wb2xpc0V4dHJhLndvZmYyKQorICAgIHNyYzogdXJsKHN1cHBvcnQvTUVnYWxvcG9saXNFeHRyYS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogICAgIH0KICAgICBib2R5IHsKICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MgYi9zcmMvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MKaW5kZXggODRkMDBiOC4uYWRlMTE4YyAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmNjCisrKyBiL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5jYwpAQCAtNSwyNiArNSw1MCBAQAogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCiAKICNpbmNsdWRlICJjb2JhbHQvYnVpbGQvYnVpbGRfY29uZmlnLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CituYW1lc3BhY2UgeworU2JNZWRpYVR5cGUgRGVtdXhlclN0cmVhbVR5cGVUb1NiTWVkaWFUeXBlKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgeworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIERlbXV4ZXJTdHJlYW06OkFVRElPOgorICAgICAgcmV0dXJuIGtTYk1lZGlhVHlwZUF1ZGlvOworICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6VklERU86CisgICAgICByZXR1cm4ga1NiTWVkaWFUeXBlVmlkZW87CisgICAgY2FzZSBEZW11eGVyU3RyZWFtOjpVTktOT1dOOgorICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6VEVYVDoKKyAgICBjYXNlIERlbXV4ZXJTdHJlYW06Ok5VTV9UWVBFUzoKKyAgICAgIGJyZWFrOworICB9CisgIE5PVFJFQUNIRUQoKTsKKyAgcmV0dXJuIGtTYk1lZGlhVHlwZUF1ZGlvOworfQorfSAgLy8gbmFtZXNwYWNlCiAKIERlY29kZXJCdWZmZXI6OlNjb3BlZEFsbG9jYXRvclB0cjo6U2NvcGVkQWxsb2NhdG9yUHRyKEFsbG9jYXRvciogYWxsb2NhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSkKICAgICA6IGFsbG9jYXRvcl8oYWxsb2NhdG9yKSwgdHlwZV8odHlwZSkgewogICBpZiAoc2l6ZSA+IDApIHsKICAgICBEQ0hFQ0soYWxsb2NhdG9yXyk7Ci0gICAgYWxsb2NhdGlvbnNfID0gYWxsb2NhdG9yXy0+QWxsb2NhdGUoc2l6ZSArIENPQkFMVF9NRURJQV9CVUZGRVJfUEFERElORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0JBTFRfTUVESUFfQlVGRkVSX0FMSUdOTUVOVCwKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgIGludCBwYWRkaW5nID0gU2JNZWRpYUdldEJ1ZmZlclBhZGRpbmcoRGVtdXhlclN0cmVhbVR5cGVUb1NiTWVkaWFUeXBlKHR5cGUpKTsKKyAgICBpbnQgYWxpZ25tZW50ID0KKyAgICAgICAgU2JNZWRpYUdldEJ1ZmZlckFsaWdubWVudChEZW11eGVyU3RyZWFtVHlwZVRvU2JNZWRpYVR5cGUodHlwZSkpOworI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgIGludCBwYWRkaW5nID0gQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HOworICAgIGludCBhbGlnbm1lbnQgPSBDT0JBTFRfTUVESUFfQlVGRkVSX0FMSUdOTUVOVDsKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgICBhbGxvY2F0aW9uc18gPSBhbGxvY2F0b3JfLT5BbGxvY2F0ZShzaXplICsgcGFkZGluZywgYWxpZ25tZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90Pih0eXBlKSk7Ci0jaWYgQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HID4gMAotICAgIGlmIChhbGxvY2F0aW9uc18ubnVtYmVyX29mX2J1ZmZlcnMoKSA+IDApIHsKLSAgICAgIGNoYXIgemVyb3NbQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HICsgMV0gPSB7MH07Ci0gICAgICBhbGxvY2F0aW9uc18uV3JpdGUoc2l6ZSwgemVyb3MsIENPQkFMVF9NRURJQV9CVUZGRVJfUEFERElORyk7Ci0gICAgICBhbGxvY2F0aW9uc18uU2hyaW5rVG8oc2l6ZSk7CisgICAgaWYgKHBhZGRpbmcgPiAwKSB7CisgICAgICBpZiAoYWxsb2NhdGlvbnNfLm51bWJlcl9vZl9idWZmZXJzKCkgPiAwKSB7CisgICAgICAgIGNoYXIgemVyb3NbQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HICsgMV0gPSB7MH07CisgICAgICAgIGFsbG9jYXRpb25zXy5Xcml0ZShzaXplLCB6ZXJvcywgQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HKTsKKyAgICAgICAgYWxsb2NhdGlvbnNfLlNocmlua1RvKHNpemUpOworICAgICAgfQogICAgIH0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HID4gMAogICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIGIvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgKaW5kZXggMDk0ZTNiMy4uNzQ4NWVmZCAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibmIvbXVsdGlwYXJ0X2FsbG9jYXRvci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL2RybV9zeXN0ZW0uY2MgYi9zcmMvY29iYWx0L21lZGlhL2Jhc2UvZHJtX3N5c3RlbS5jYwppbmRleCA0ZDdiYWJhLi5iYzYzMjc1IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhL2Jhc2UvZHJtX3N5c3RlbS5jYworKysgYi9zcmMvY29iYWx0L21lZGlhL2Jhc2UvZHJtX3N5c3RlbS5jYwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25TZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkRnVuYwogI2VuZGlmICAvLyBTQl9IQVMoRFJNX0tFWV9TVEFUVVNFUykKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25TZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0ZWRGdW5jCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAjaWYgU0JfSEFTKERSTV9TRVNTSU9OX0NMT1NFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPblNlc3Npb25DbG9zZWRGdW5jCkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsgIC8vIE5PTElOVCh3aGl0ZXNwYWNlL3BhcmVucykKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIGJvb2wgRHJtU3lzdGVtOjpJc1NlcnZlckNlcnRpZmljYXRlVXBkYXRhYmxlKCkgewogICByZXR1cm4gU2JEcm1Jc1NlcnZlckNlcnRpZmljYXRlVXBkYXRhYmxlKHdyYXBwZWRfZHJtX3N5c3RlbV8pOwogfQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgIFNiRHJtVXBkYXRlU2VydmVyQ2VydGlmaWNhdGUod3JhcHBlZF9kcm1fc3lzdGVtXywgdGlja2V0LCBjZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZV9zaXplKTsKIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIGJvb2wgRHJtU3lzdGVtOjpJc1NlcnZlckNlcnRpZmljYXRlVXBkYXRhYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogdm9pZCBEcm1TeXN0ZW06OlVwZGF0ZVNlcnZlckNlcnRpZmljYXRlKApAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgU2VydmVyQ2VydGlmaWNhdGVVcGRhdGVkQ2FsbGJhY2sgc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0ZWRfY2FsbGJhY2spIHsKICAgTk9UUkVBQ0hFRCgpOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiB2b2lkIERybVN5c3RlbTo6R2VuZXJhdGVTZXNzaW9uVXBkYXRlUmVxdWVzdCgKICAgICBTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgdHlwZSwgY29uc3QgdWludDhfdCogaW5pdF9kYXRhLApAQCAtMzE5LDcgKzMxOSw3IEBACiB9CiAjZW5kaWYgIC8vIFNCX0hBUyhEUk1fU0VTU0lPTl9DTE9TRUQpCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiB2b2lkIERybVN5c3RlbTo6T25TZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0ZWQoaW50IHRpY2tldCwgU2JEcm1TdGF0dXMgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcl9tZXNzYWdlKSB7CiAgIGF1dG8gaXRlciA9IHRpY2tldF90b19zZXJ2ZXJfY2VydGlmaWNhdGVfdXBkYXRlZF9tYXBfLmZpbmQodGlja2V0KTsKQEAgLTMzMCwxNiArMzMwLDE2IEBACiAgIGl0ZXItPnNlY29uZC5SdW4oc3RhdHVzLCBlcnJvcl9tZXNzYWdlKTsKICAgdGlja2V0X3RvX3NlcnZlcl9jZXJ0aWZpY2F0ZV91cGRhdGVkX21hcF8uZXJhc2UoaXRlcik7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIC8vIHN0YXRpYwotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIHZvaWQgRHJtU3lzdGVtOjpPblNlc3Npb25VcGRhdGVSZXF1ZXN0R2VuZXJhdGVkRnVuYygKICAgICBTYkRybVN5c3RlbSB3cmFwcGVkX2RybV9zeXN0ZW0sIHZvaWQqIGNvbnRleHQsIGludCB0aWNrZXQsCiAgICAgU2JEcm1TdGF0dXMgc3RhdHVzLCBTYkRybVNlc3Npb25SZXF1ZXN0VHlwZSB0eXBlLCBjb25zdCBjaGFyKiBlcnJvcl9tZXNzYWdlLAogICAgIGNvbnN0IHZvaWQqIHNlc3Npb25faWQsIGludCBzZXNzaW9uX2lkX3NpemUsIGNvbnN0IHZvaWQqIGNvbnRlbnQsCiAgICAgaW50IGNvbnRlbnRfc2l6ZSwgY29uc3QgY2hhciogdXJsKSB7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiB2b2lkIERybVN5c3RlbTo6T25TZXNzaW9uVXBkYXRlUmVxdWVzdEdlbmVyYXRlZEZ1bmMoCiAgICAgU2JEcm1TeXN0ZW0gd3JhcHBlZF9kcm1fc3lzdGVtLCB2b2lkKiBjb250ZXh0LCBpbnQgdGlja2V0LAogICAgIGNvbnN0IHZvaWQqIHNlc3Npb25faWQsIGludCBzZXNzaW9uX2lkX3NpemUsIGNvbnN0IHZvaWQqIGNvbnRlbnQsCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICAgIHNlc3Npb25faWQgPyBrU2JEcm1TdGF0dXNTdWNjZXNzIDoga1NiRHJtU3RhdHVzVW5rbm93bkVycm9yOwogICBTYkRybVNlc3Npb25SZXF1ZXN0VHlwZSB0eXBlID0ga1NiRHJtU2Vzc2lvblJlcXVlc3RUeXBlTGljZW5zZVJlcXVlc3Q7CiAgIGNvbnN0IGNoYXIqIGVycm9yX21lc3NhZ2UgPSBOVUxMOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogICBEQ0hFQ0soY29udGV4dCk7CiAgIERybVN5c3RlbSogZHJtX3N5c3RlbSA9IHN0YXRpY19jYXN0PERybVN5c3RlbSo+KGNvbnRleHQpOwogICBEQ0hFQ0tfRVEod3JhcHBlZF9kcm1fc3lzdGVtLCBkcm1fc3lzdGVtLT53cmFwcGVkX2RybV9zeXN0ZW1fKTsKQEAgLTM3NCwxNCArMzc0LDE0IEBACiB9CiAKIC8vIHN0YXRpYwotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIHZvaWQgRHJtU3lzdGVtOjpPblNlc3Npb25VcGRhdGVkRnVuYyhTYkRybVN5c3RlbSB3cmFwcGVkX2RybV9zeXN0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwgaW50IHRpY2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN0YXR1cyBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JfbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAvKnNlc3Npb25faWQqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLypzZXNzaW9uX2lkX3NpemUqLykgewotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogdm9pZCBEcm1TeXN0ZW06Ok9uU2Vzc2lvblVwZGF0ZWRGdW5jKFNiRHJtU3lzdGVtIHdyYXBwZWRfZHJtX3N5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LCBpbnQgdGlja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIC8qc2Vzc2lvbl9pZCovLApAQCAtMzg5LDcgKzM4OSw3IEBACiAgIFNiRHJtU3RhdHVzIHN0YXR1cyA9CiAgICAgICBzdWNjZWVkZWQgPyBrU2JEcm1TdGF0dXNTdWNjZXNzIDoga1NiRHJtU3RhdHVzVW5rbm93bkVycm9yOwogICBjb25zdCBjaGFyKiBlcnJvcl9tZXNzYWdlID0gTlVMTDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgRENIRUNLKGNvbnRleHQpOwogICBEcm1TeXN0ZW0qIGRybV9zeXN0ZW0gPSBzdGF0aWNfY2FzdDxEcm1TeXN0ZW0qPihjb250ZXh0KTsKICAgRENIRUNLX0VRKHdyYXBwZWRfZHJtX3N5c3RlbSwgZHJtX3N5c3RlbS0+d3JhcHBlZF9kcm1fc3lzdGVtXyk7CkBAIC00MzQsNyArNDM0LDcgQEAKIH0KICNlbmRpZiAgLy8gU0JfSEFTKERSTV9LRVlfU1RBVFVTRVMpCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAvLyBzdGF0aWMKIHZvaWQgRHJtU3lzdGVtOjpPblNlcnZlckNlcnRpZmljYXRlVXBkYXRlZEZ1bmMoU2JEcm1TeXN0ZW0gd3JhcHBlZF9kcm1fc3lzdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LCBpbnQgdGlja2V0LApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX3N5c3RlbS0+d2Vha190aGlzXywgdGlja2V0LCBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA/IHN0ZDo6c3RyaW5nKGVycm9yX21lc3NhZ2UpIDogIiIpKTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogI2lmIFNCX0hBUyhEUk1fU0VTU0lPTl9DTE9TRUQpCiAvLyBzdGF0aWMKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS9kcm1fc3lzdGVtLmggYi9zcmMvY29iYWx0L21lZGlhL2Jhc2UvZHJtX3N5c3RlbS5oCmluZGV4IDkzMmE0MjcuLjY4OTY3MTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS9kcm1fc3lzdGVtLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL2RybV9zeXN0ZW0uaApAQCAtMjE4LDE2ICsyMTgsMTYgQEAKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXNzaW9uX2lkLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGtleV9pZHMsCiAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxTYkRybUtleVN0YXR1cz4mIGtleV9zdGF0dXNlcyk7CiAjZW5kaWYgIC8vIFNCX0hBUyhEUk1fS0VZX1NUQVRVU0VTKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgdm9pZCBPblNlcnZlckNlcnRpZmljYXRlVXBkYXRlZChpbnQgdGlja2V0LCBTYkRybVN0YXR1cyBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yX21lc3NhZ2UpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogI2lmIFNCX0hBUyhEUk1fU0VTU0lPTl9DTE9TRUQpCiAgIHZvaWQgT25TZXNzaW9uQ2xvc2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXNzaW9uX2lkKTsKICNlbmRpZiAgLy8gU0JfSEFTKERSTV9TRVNTSU9OX0NMT1NFRCkKICAgLy8gQ2FsbGVkIG9uIGFueSB0aHJlYWQsIHBhcmFtZXRlcnMgbmVlZCB0byBiZSBjb3BpZWQgaW1tZWRpYXRlbHkuCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIHN0YXRpYyB2b2lkIE9uU2Vzc2lvblVwZGF0ZVJlcXVlc3RHZW5lcmF0ZWRGdW5jKAogICAgICAgU2JEcm1TeXN0ZW0gd3JhcHBlZF9kcm1fc3lzdGVtLCB2b2lkKiBjb250ZXh0LCBpbnQgdGlja2V0LAogICAgICAgU2JEcm1TdGF0dXMgc3RhdHVzLCBTYkRybVNlc3Npb25SZXF1ZXN0VHlwZSB0eXBlLApAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yX21lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHNlc3Npb25faWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXNzaW9uX2lkX2xlbmd0aCk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIHN0YXRpYyB2b2lkIE9uU2Vzc2lvblVwZGF0ZVJlcXVlc3RHZW5lcmF0ZWRGdW5jKAogICAgICAgU2JEcm1TeXN0ZW0gd3JhcHBlZF9kcm1fc3lzdGVtLCB2b2lkKiBjb250ZXh0LCBpbnQgdGlja2V0LAogICAgICAgY29uc3Qgdm9pZCogc2Vzc2lvbl9pZCwgaW50IHNlc3Npb25faWRfc2l6ZSwgY29uc3Qgdm9pZCogY29udGVudCwKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LCBpbnQgdGlja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBzZXNzaW9uX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vzc2lvbl9pZF9sZW5ndGgsIGJvb2wgc3VjY2VlZGVkKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogI2lmIFNCX0hBUyhEUk1fS0VZX1NUQVRVU0VTKQogICBzdGF0aWMgdm9pZCBPblNlc3Npb25LZXlTdGF0dXNlc0NoYW5nZWRGdW5jKApAQCAtMjY0LDEyICsyNjQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vzc2lvbl9pZF9zaXplKTsKICNlbmRpZiAgLy8gU0JfSEFTKERSTV9TRVNTSU9OX0NMT1NFRCkKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgc3RhdGljIHZvaWQgT25TZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0ZWRGdW5jKFNiRHJtU3lzdGVtIHdyYXBwZWRfZHJtX3N5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQsIGludCB0aWNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN0YXR1cyBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvcl9tZXNzYWdlKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogICBjb25zdCBTYkRybVN5c3RlbSB3cmFwcGVkX2RybV9zeXN0ZW1fOwogICBNZXNzYWdlTG9vcCogY29uc3QgbWVzc2FnZV9sb29wXzsKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9waXBlbGluZS5jYyBiL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9waXBlbGluZS5jYwppbmRleCA4Yjk3MDQwLi5kYjk0OTE3IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfcGlwZWxpbmUuY2MKKysrIGIvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL3NicGxheWVyX3BpcGVsaW5lLmNjCkBAIC05MDksMTQgKzkwOSwxNCBAQAogICB9CiAjZW5kaWYgIC8vICFTQl9IQVMoQVVESU9MRVNTX1ZJREVPKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9BVURJT19PTkxZX1ZJREVPX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICBpZiAodmlkZW9fc3RyZWFtID09IE5VTEwpIHsKICAgICBMT0coSU5GTykgPDwgIlRoZSB2aWRlbyBoYXMgdG8gY29udGFpbiBhIHZpZGVvIHRyYWNrLiI7CiAgICAgUmVzZXRBbmRSdW5JZk5vdE51bGwoJmVycm9yX2NiXywgREVNVVhFUl9FUlJPUl9OT19TVVBQT1JURURfU1RSRUFNUywKICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHZpZGVvIGhhcyB0byBjb250YWluIGEgdmlkZW8gdHJhY2suIik7CiAgICAgcmV0dXJuOwogICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfQVVESU9fT05MWV9WSURFT19BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKICAgaWYgKGF1ZGlvX3N0cmVhbSA9PSBOVUxMICYmIHZpZGVvX3N0cmVhbSA9PSBOVUxMKSB7CiAgICAgTE9HKElORk8pIDw8ICJUaGUgdmlkZW8gaGFzIHRvIGNvbnRhaW4gYW4gYXVkaW8gdHJhY2sgb3IgYSB2aWRlbyB0cmFjay4iOwpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL3N0YXJib2FyZF9wbGF5ZXIuY2MgYi9zcmMvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3BsYXllci5jYwppbmRleCBiMzEwNDRlLi45YzY2MTU5IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3BsYXllci5jYworKysgYi9zcmMvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3BsYXllci5jYwpAQCAtMTgxLDEzICsxODEsMTMgQEAKICAgRENIRUNLKGZyYW1lX2hlaWdodCk7CiAgIERDSEVDSyhTYlBsYXllcklzVmFsaWQocGxheWVyXykpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgU2JQbGF5ZXJJbmZvIG91dF9wbGF5ZXJfaW5mbzsKICAgU2JQbGF5ZXJHZXRJbmZvKHBsYXllcl8sICZvdXRfcGxheWVyX2luZm8pOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgU2JQbGF5ZXJJbmZvMiBvdXRfcGxheWVyX2luZm87CiAgIFNiUGxheWVyR2V0SW5mbzIocGxheWVyXywgJm91dF9wbGF5ZXJfaW5mbyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICBmcmFtZV93aWR0aF8gPSBvdXRfcGxheWVyX2luZm8uZnJhbWVfd2lkdGg7CiAgIGZyYW1lX2hlaWdodF8gPSBvdXRfcGxheWVyX2luZm8uZnJhbWVfaGVpZ2h0OwogCkBAIC0yNjEsMTIgKzI2MSwxMiBAQAogICBEQ0hFQ0soU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcl8pKTsKIAogICArK3RpY2tldF87Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgU2JQbGF5ZXJTZWVrKHBsYXllcl8sIFNCX1RJTUVfVE9fU0JfTUVESUFfVElNRSh0aW1lLkluTWljcm9zZWNvbmRzKCkpLAogICAgICAgICAgICAgICAgdGlja2V0Xyk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVyU2VlazIocGxheWVyXywgdGltZS5Jbk1pY3Jvc2Vjb25kcygpLCB0aWNrZXRfKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKICAgc2Vla19wZW5kaW5nXyA9IGZhbHNlOwogICBTYlBsYXllclNldFBsYXliYWNrUmF0ZShwbGF5ZXJfLCBwbGF5YmFja19yYXRlXyk7CkBAIC0zMjYsNyArMzI2LDcgQEAKIAogICBEQ0hFQ0soU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcl8pKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVySW5mbyBpbmZvOwogICBTYlBsYXllckdldEluZm8ocGxheWVyXywgJmluZm8pOwogICBpZiAobWVkaWFfdGltZSkgewpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgKmJ1ZmZlcl9sZW5ndGhfdGltZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygKICAgICAgICAgU0JfTUVESUFfVElNRV9UT19TQl9USU1FKGluZm8uYnVmZmVyX2R1cmF0aW9uX3B0cykpOwogICB9Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICBTYlBsYXllckluZm8yIGluZm87CiAgIFNiUGxheWVyR2V0SW5mbzIocGxheWVyXywgJmluZm8pOwogICBpZiAobWVkaWFfdGltZSkgewpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgKmJ1ZmZlcl9sZW5ndGhfdGltZSA9CiAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhpbmZvLmJ1ZmZlcl9kdXJhdGlvbik7CiAgIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKICAgaWYgKHZpZGVvX2ZyYW1lc19kZWNvZGVkKSB7CiAgICAgKnZpZGVvX2ZyYW1lc19kZWNvZGVkID0gaW5mby50b3RhbF92aWRlb19mcmFtZXM7CkBAIC0zOTQsMjEgKzM5NCwyMSBAQAogCiAgIERDSEVDSyhTYlBsYXllcklzVmFsaWQocGxheWVyXykpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgU2JQbGF5ZXJJbmZvIGluZm87CiAgIFNiUGxheWVyR2V0SW5mbyhwbGF5ZXJfLCAmaW5mbyk7CiAgIGlmIChtZWRpYV90aW1lKSB7CiAgICAgKm1lZGlhX3RpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoCiAgICAgICAgIFNCX01FRElBX1RJTUVfVE9fU0JfVElNRShpbmZvLmN1cnJlbnRfbWVkaWFfcHRzKSk7CiAgIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVySW5mbzIgaW5mbzsKICAgU2JQbGF5ZXJHZXRJbmZvMihwbGF5ZXJfLCAmaW5mbyk7CiAgIGlmIChtZWRpYV90aW1lKSB7CiAgICAgKm1lZGlhX3RpbWUgPQogICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoaW5mby5jdXJyZW50X21lZGlhX3RpbWVzdGFtcCk7CiAgIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIGlmICh2aWRlb19mcmFtZXNfZGVjb2RlZCkgewogICAgICp2aWRlb19mcmFtZXNfZGVjb2RlZCA9IGluZm8udG90YWxfdmlkZW9fZnJhbWVzOwogICB9CkBAIC00MjYsNyArNDI2LDcgQEAKIAogICBEQ0hFQ0soU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcl8pKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVySW5mbyBpbmZvOwogICBTYlBsYXllckdldEluZm8ocGxheWVyXywgJmluZm8pOwogICBpZiAoaW5mby5kdXJhdGlvbl9wdHMgPT0gU0JfUExBWUVSX05PX0RVUkFUSU9OKSB7CkBAIC00MzUsNyArNDM1LDcgQEAKICAgfQogICByZXR1cm4gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKAogICAgICAgU0JfTUVESUFfVElNRV9UT19TQl9USU1FKGluZm8uZHVyYXRpb25fcHRzKSk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICBTYlBsYXllckluZm8yIGluZm87CiAgIFNiUGxheWVyR2V0SW5mbzIocGxheWVyXywgJmluZm8pOwogICBpZiAoaW5mby5kdXJhdGlvbiA9PSBTQl9QTEFZRVJfTk9fRFVSQVRJT04pIHsKQEAgLTQ0Myw3ICs0NDMsNyBAQAogICAgIHJldHVybiBiYXNlOjpUaW1lRGVsdGEoKTsKICAgfQogICByZXR1cm4gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKGluZm8uZHVyYXRpb24pOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIH0KIAogYmFzZTo6VGltZURlbHRhIFN0YXJib2FyZFBsYXllcjo6R2V0U3RhcnREYXRlKCkgewpAQCAtNDU0LDEzICs0NTQsMTMgQEAKIAogICBEQ0hFQ0soU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcl8pKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVySW5mbyBpbmZvID0ge307CiAgIFNiUGxheWVyR2V0SW5mbyhwbGF5ZXJfLCAmaW5mbyk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICBTYlBsYXllckluZm8yIGluZm8gPSB7fTsKICAgU2JQbGF5ZXJHZXRJbmZvMihwbGF5ZXJfLCAmaW5mbyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICByZXR1cm4gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKGluZm8uc3RhcnRfZGF0ZSk7CiB9CiAKQEAgLTQ4NiwxNyArNDg2LDE3IEBACiAKICAgc3RhdGVfID0ga1N1c3BlbmRlZDsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVySW5mbyBpbmZvOwogICBTYlBsYXllckdldEluZm8ocGxheWVyXywgJmluZm8pOwogICBwcmVyb2xsX3RpbWVzdGFtcF8gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoCiAgICAgICBTQl9NRURJQV9USU1FX1RPX1NCX1RJTUUoaW5mby5jdXJyZW50X21lZGlhX3B0cykpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgU2JQbGF5ZXJJbmZvMiBpbmZvOwogICBTYlBsYXllckdldEluZm8yKHBsYXllcl8sICZpbmZvKTsKICAgcHJlcm9sbF90aW1lc3RhbXBfID0KICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhpbmZvLmN1cnJlbnRfbWVkaWFfdGltZXN0YW1wKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIGNhY2hlZF92aWRlb19mcmFtZXNfZGVjb2RlZF8gPSBpbmZvLnRvdGFsX3ZpZGVvX2ZyYW1lczsKICAgY2FjaGVkX3ZpZGVvX2ZyYW1lc19kcm9wcGVkXyA9IGluZm8uZHJvcHBlZF92aWRlb19mcmFtZXM7CiAKQEAgLTU3Miw5ICs1NzIsOSBAQAogICBETE9HKElORk8pIDw8ICJTYlBsYXllckNyZWF0ZVdpdGhVcmwgcGFzc2VkIHVybCAiIDw8IHVybDsKICAgcGxheWVyXyA9IFNiUGxheWVyQ3JlYXRlV2l0aFVybCgKICAgICAgIHVybC5jX3N0cigpLCB3aW5kb3dfLAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgICBTQl9QTEFZRVJfTk9fRFVSQVRJT04sCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgJlN0YXJib2FyZFBsYXllcjo6UGxheWVyU3RhdHVzQ0IsCiAgICAgICAmU3RhcmJvYXJkUGxheWVyOjpFbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWRDQiwKICNpZiBTQl9IQVMoUExBWUVSX0VSUk9SX01FU1NBR0UpCkBAIC02MjAsOSArNjIwLDkgQEAKICAgRENIRUNLKFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZChvdXRwdXRfbW9kZV8sIHZpZGVvX2NvZGVjLCBkcm1fc3lzdGVtXykpOwogCiAgIHBsYXllcl8gPSBTYlBsYXllckNyZWF0ZSh3aW5kb3dfLCB2aWRlb19jb2RlYywgYXVkaW9fY29kZWMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNCX1BMQVlFUl9OT19EVVJBVElPTiwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fc3lzdGVtXywgaGFzX2F1ZGlvID8gJmF1ZGlvX2hlYWRlciA6IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RhcmJvYXJkUGxheWVyOjpEZWFsbG9jYXRlU2FtcGxlQ0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RhcmJvYXJkUGxheWVyOjpEZWNvZGVyU3RhdHVzQ0IsCkBAIC02OTgsOSArNjk4LDEwIEBACiAgICAgRmlsbERybVNhbXBsZUluZm8oYnVmZmVyLCAmZHJtX2luZm8sICZzdWJzYW1wbGVfbWFwcGluZyk7CiAgIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyAgYXV0byBzYW1wbGVfdHlwZSA9IERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZSh0eXBlKTsKKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIFNiUGxheWVyV3JpdGVTYW1wbGUoCi0gICAgICBwbGF5ZXJfLCBEZW11eGVyU3RyZWFtVHlwZVRvU2JNZWRpYVR5cGUodHlwZSksCisgICAgICBwbGF5ZXJfLCBzYW1wbGVfdHlwZSwKICNpZiBTQl9BUElfVkVSU0lPTiA+PSA2CiAgICAgICBhbGxvY2F0aW9ucy5idWZmZXJzKCksIGFsbG9jYXRpb25zLmJ1ZmZlcl9zaXplcygpLAogI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSA2CkBAIC03MTEsMTQgKzcxMiwxNiBAQAogICAgICAgU0JfVElNRV9UT19TQl9NRURJQV9USU1FKGJ1ZmZlci0+dGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSksCiAgICAgICB0eXBlID09IERlbXV4ZXJTdHJlYW06OlZJREVPID8gJnZpZGVvX2luZm8gOiBOVUxMLAogICAgICAgZHJtX2luZm8uc3Vic2FtcGxlX2NvdW50ID4gMCA/ICZkcm1faW5mbyA6IE5VTEwpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCi0gIFNiUGxheWVyV3JpdGVTYW1wbGUyKHBsYXllcl8sIERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZSh0eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbnMuYnVmZmVycygpLCBhbGxvY2F0aW9ucy5idWZmZXJfc2l6ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbnMubnVtYmVyX29mX2J1ZmZlcnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IERlbXV4ZXJTdHJlYW06OlZJREVPID8gJnZpZGVvX2luZm8gOiBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBkcm1faW5mby5zdWJzYW1wbGVfY291bnQgPiAwID8gJmRybV9pbmZvIDogTlVMTCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAorICBEQ0hFQ0tfR1QoU2JQbGF5ZXJHZXRNYXhpbXVtTnVtYmVyT2ZTYW1wbGVzUGVyV3JpdGUocGxheWVyXywgc2FtcGxlX3R5cGUpLCAwKTsKKyAgRENIRUNLX0VRKGFsbG9jYXRpb25zLm51bWJlcl9vZl9idWZmZXJzKCksIDEpOworICBTYlBsYXllclNhbXBsZUluZm8gc2FtcGxlX2luZm8gPSB7CisgICAgICBhbGxvY2F0aW9ucy5idWZmZXJzKClbMF0sIGFsbG9jYXRpb25zLmJ1ZmZlcl9zaXplcygpWzBdLAorICAgICAgYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pY3Jvc2Vjb25kcygpLAorICAgICAgdHlwZSA9PSBEZW11eGVyU3RyZWFtOjpWSURFTyA/ICZ2aWRlb19pbmZvIDogTlVMTCwKKyAgICAgIGRybV9pbmZvLnN1YnNhbXBsZV9jb3VudCA+IDAgPyAmZHJtX2luZm8gOiBOVUxMfTsKKyAgU2JQbGF5ZXJXcml0ZVNhbXBsZTIocGxheWVyXywgc2FtcGxlX3R5cGUsICZzYW1wbGVfaW5mbywgMSk7CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIH0KIAogI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQpAQCAtODE4LDEzICs4MjEsMTMgQEAKICAgICBpZiAodGlja2V0XyA9PSBTQl9QTEFZRVJfSU5JVElBTF9USUNLRVQpIHsKICAgICAgICsrdGlja2V0XzsKICAgICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICBTYlBsYXllclNlZWsocGxheWVyXywKICAgICAgICAgICAgICAgICAgU0JfVElNRV9UT19TQl9NRURJQV9USU1FKHByZXJvbGxfdGltZXN0YW1wXy5Jbk1pY3Jvc2Vjb25kcygpKSwKICAgICAgICAgICAgICAgICAgdGlja2V0Xyk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgIFNiUGxheWVyU2VlazIocGxheWVyXywgcHJlcm9sbF90aW1lc3RhbXBfLkluTWljcm9zZWNvbmRzKCksIHRpY2tldF8pOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICBTZXRWb2x1bWUodm9sdW1lXyk7CiAgICAgU2JQbGF5ZXJTZXRQbGF5YmFja1JhdGUocGxheWVyXywgcGxheWJhY2tfcmF0ZV8pOwogICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yZXNvbHV0aW9uLmggYi9zcmMvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcmVzb2x1dGlvbi5oCmluZGV4IGIzZDQ2YjkuLmEyMDc0NzYgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yZXNvbHV0aW9uLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3Jlc29sdXRpb24uaApAQCAtMTcsNiArMTcsNyBAQAogI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19SRVNPTFVUSU9OX0hfCiAjZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX1JFU09MVVRJT05fSF8KIAorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgogI2luY2x1ZGUgInVpL2dmeC9zaXplLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtMjksNyArMzAsNyBAQAogICBrVmlkZW9SZXNvbHV0aW9uMTA4MHAsICAvLyAxOTIwIHggMTA4MAogICBrVmlkZW9SZXNvbHV0aW9uMmssICAgICAvLyAyNTYwIHggMTQ0MAogICBrVmlkZW9SZXNvbHV0aW9uNGssICAgICAvLyAzODQwIHggMjE2MAotICBrVmlkZW9SZXNvbHV0aW9uSW52YWxpZAorICBrVmlkZW9SZXNvbHV0aW9uSW52YWxpZCwKIH07CiAKIGlubGluZSBWaWRlb1Jlc29sdXRpb24gR2V0VmlkZW9SZXNvbHV0aW9uKGludCB3aWR0aCwgaW50IGhlaWdodCkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYS9kZWNvZGVyX2J1ZmZlcl9hbGxvY2F0b3IuY2MgYi9zcmMvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5jYwppbmRleCA1YWI3MGYxLi4yNDZmOGRiIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5jYworKysgYi9zcmMvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5jYwpAQCAtMTYsMTAgKzE2LDEzIEBACiAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuaCIKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yZXNvbHV0aW9uLmgiCiAjaW5jbHVkZSAibmIvYWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAibmIvbWVtb3J5X3Njb3BlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtNDAsMTU2ICs0MywyMTMgQEAKIH0gIC8vIG5hbWVzcGFjZQogCiBEZWNvZGVyQnVmZmVyQWxsb2NhdG9yOjpEZWNvZGVyQnVmZmVyQWxsb2NhdG9yKCkgewotI2lmIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wKLSNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1BPT0xfQUxMT0NBVEVfT05fREVNQU5ECi0gIERMT0coSU5GTykgPDwgIkFsbG9jYXRlZCBtZWRpYSBidWZmZXIgcG9vbCBvbiBkZW1hbmQuIjsKLSNlbHNlICAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9QT09MX0FMTE9DQVRFX09OX0RFTUFORAotICBUUkFDS19NRU1PUllfU0NPUEUoIk1lZGlhIik7Ci0gIHJldXNlX2FsbG9jYXRvcl8ucmVzZXQobmV3IFJldXNlQWxsb2NhdG9yKAotICAgICAgJmZhbGxiYWNrX2FsbG9jYXRvcl8sIENPQkFMVF9NRURJQV9CVUZGRVJfSU5JVElBTF9DQVBBQ0lUWSwKLSAgICAgIENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklULAotICAgICAgQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfMTA4MFApKTsKLSAgRExPRyhJTkZPKSA8PCAiQWxsb2NhdGVkICIgPDwgQ09CQUxUX01FRElBX0JVRkZFUl9JTklUSUFMX0NBUEFDSVRZCi0gICAgICAgICAgICAgPDwgIiBieXRlcyBmb3IgbWVkaWEgYnVmZmVyIHBvb2wgYXMgaXRzIGluaXRpYWwgYnVmZmVyLiI7Ci0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfUE9PTF9BTExPQ0FURV9PTl9ERU1BTkQKLSNlbHNlICAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9VU0lOR19NRU1PUllfUE9PTAorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCisgIHVzaW5nX21lbW9yeV9wb29sXyA9IFNiTWVkaWFJc0J1ZmZlclVzaW5nTWVtb3J5UG9vbCgpOworICBib29sIHBvb2xfYWxsb2NhdGVfb25fZGVtYW5kID0gU2JNZWRpYUlzQnVmZmVyUG9vbEFsbG9jYXRlT25EZW1hbmQoKTsKKyNlbGlmIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wKKyAgdXNpbmdfbWVtb3J5X3Bvb2xfID0gdHJ1ZTsKKyAgYm9vbCBwb29sX2FsbG9jYXRlX29uX2RlbWFuZCA9IENPQkFMVF9NRURJQV9CVUZGRVJfUE9PTF9BTExPQ0FURV9PTl9ERU1BTkQ7CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGlmICh1c2luZ19tZW1vcnlfcG9vbF8pIHsKKyAgICBpZiAocG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQpIHsKKyAgICAgIERMT0coSU5GTykgPDwgIkFsbG9jYXRlZCBtZWRpYSBidWZmZXIgcG9vbCBvbiBkZW1hbmQuIjsKKyAgICB9IGVsc2UgeworICAgICAgVFJBQ0tfTUVNT1JZX1NDT1BFKCJNZWRpYSIpOworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCisgICAgICBpbnQgaW5pdGlhbF9jYXBhY2l0eSA9IFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHkoKTsKKyAgICAgIC8vIFdlIGNhbm5vdCBjYWxsIFNiTWVkaWFHZXRNYXhCdWZmZXJDYXBhY2l0eSBiZWNhdXNlIHx2aWRlb19jb2RlY198IGlzCisgICAgICAvLyBub3Qgc2V0IHlldC4gVXNlIDAgKHVuYm91bmRlZCkgdW50aWwgfHZpZGVvX2NvZGVjX3wgaXMgdXBkYXRlZCBpbgorICAgICAgLy8gVXBkYXRlVmlkZW9Db25maWcuCisgICAgICBpbnQgbWF4X2NhcGFjaXR5ID0gMDsKKyAgICAgIGludCBhbGxvY2F0aW9uX3VuaXQgPSBTYk1lZGlhR2V0QnVmZmVyQWxsb2NhdGlvblVuaXQoKTsKKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgICAgIGludCBpbml0aWFsX2NhcGFjaXR5ID0gQ09CQUxUX01FRElBX0JVRkZFUl9JTklUSUFMX0NBUEFDSVRZOworICAgICAgaW50IG1heF9jYXBhY2l0eSA9IENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzEwODBQOworICAgICAgaW50IGFsbG9jYXRpb25fdW5pdCA9IENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUOworI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgICAgcmV1c2VfYWxsb2NhdG9yXy5yZXNldChuZXcgUmV1c2VBbGxvY2F0b3IoJmZhbGxiYWNrX2FsbG9jYXRvcl8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2NhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbl91bml0LCBtYXhfY2FwYWNpdHkpKTsKKyAgICAgIERMT0coSU5GTykgPDwgIkFsbG9jYXRlZCAiIDw8IGluaXRpYWxfY2FwYWNpdHkKKyAgICAgICAgICAgICAgICAgPDwgIiBieXRlcyBmb3IgbWVkaWEgYnVmZmVyIHBvb2wgYXMgaXRzIGluaXRpYWwgYnVmZmVyLiI7CisgICAgfQorICAgIHJldHVybjsKKyAgfQorI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIERMT0coSU5GTykgPDwgIkFsbG9jYXRlZCBtZWRpYSBidWZmZXIgbWVtb3J5IHVzaW5nIFNiTWVtb3J5KiBmdW5jdGlvbnMuIjsKLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9VU0lOR19NRU1PUllfUE9PTAogfQogCiBEZWNvZGVyQnVmZmVyQWxsb2NhdG9yOjp+RGVjb2RlckJ1ZmZlckFsbG9jYXRvcigpIHsKLSNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCi0gIFRSQUNLX01FTU9SWV9TQ09QRSgiTWVkaWEiKTsKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGlmICh1c2luZ19tZW1vcnlfcG9vbF8pIHsKKyAgICBUUkFDS19NRU1PUllfU0NPUEUoIk1lZGlhIik7CiAKLSAgc3RhcmJvYXJkOjpTY29wZWRMb2NrIHNjb3BlZF9sb2NrKG11dGV4Xyk7CisgICAgc3RhcmJvYXJkOjpTY29wZWRMb2NrIHNjb3BlZF9sb2NrKG11dGV4Xyk7CiAKLSAgaWYgKHJldXNlX2FsbG9jYXRvcl8pIHsKLSAgICBEQ0hFQ0tfRVEocmV1c2VfYWxsb2NhdG9yXy0+R2V0QWxsb2NhdGVkKCksIDApOwotICAgIHJldXNlX2FsbG9jYXRvcl8ucmVzZXQoKTsKKyAgICBpZiAocmV1c2VfYWxsb2NhdG9yXykgeworICAgICAgRENIRUNLX0VRKHJldXNlX2FsbG9jYXRvcl8tPkdldEFsbG9jYXRlZCgpLCAwKTsKKyAgICAgIHJldXNlX2FsbG9jYXRvcl8ucmVzZXQoKTsKKyAgICB9CiAgIH0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9VU0lOR19NRU1PUllfUE9PTAorI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8CisgICAgICAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiB9CiAKIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvcjo6QWxsb2NhdGlvbnMgRGVjb2RlckJ1ZmZlckFsbG9jYXRvcjo6QWxsb2NhdGUoCiAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGludHB0cl90IGNvbnRleHQpIHsKICAgVFJBQ0tfTUVNT1JZX1NDT1BFKCJNZWRpYSIpOwogCi0jaWYgQ09CQUxUX01FRElBX0JVRkZFUl9VU0lOR19NRU1PUllfUE9PTAotICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgc2NvcGVkX2xvY2sobXV0ZXhfKTsKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGlmICh1c2luZ19tZW1vcnlfcG9vbF8pIHsKKyAgICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgc2NvcGVkX2xvY2sobXV0ZXhfKTsKIAotICBpZiAoIXJldXNlX2FsbG9jYXRvcl8pIHsKLSAgICByZXVzZV9hbGxvY2F0b3JfLnJlc2V0KG5ldyBSZXVzZUFsbG9jYXRvcigKLSAgICAgICAgJmZhbGxiYWNrX2FsbG9jYXRvcl8sIENPQkFMVF9NRURJQV9CVUZGRVJfSU5JVElBTF9DQVBBQ0lUWSwKLSAgICAgICAgQ09CQUxUX01FRElBX0JVRkZFUl9BTExPQ0FUSU9OX1VOSVQsCi0gICAgICAgIENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzEwODBQKSk7Ci0gICAgRExPRyhJTkZPKSA8PCAiUmV0dXJuZWQgIiA8PCBDT0JBTFRfTUVESUFfQlVGRkVSX0lOSVRJQUxfQ0FQQUNJVFkKLSAgICAgICAgICAgICAgIDw8ICIgYnl0ZXMgZnJvbSBtZWRpYSBidWZmZXIgcG9vbCB0byBzeXN0ZW0uIjsKLSAgfQotCi0gIGlmICgha0VuYWJsZU11bHRpYmxvY2tBbGxvY2F0ZSB8fCBrRW5hYmxlQWxsb2NhdGlvbkxvZykgewotICAgIHZvaWQqIHAgPSByZXVzZV9hbGxvY2F0b3JfLT5BbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOwotICAgIExPR19JRihJTkZPLCBrRW5hYmxlQWxsb2NhdGlvbkxvZykKLSAgICAgICAgPDwgIj09PT09PT09IE1lZGlhIEFsbG9jYXRpb24gTG9nICIgPDwgcCA8PCAiICIgPDwgc2l6ZSA8PCAiICIKLSAgICAgICAgPDwgYWxpZ25tZW50IDw8ICIgIiA8PCBjb250ZXh0OwotICAgIGlmICghVXBkYXRlQWxsb2NhdGlvblJlY29yZCgpKSB7Ci0gICAgICAvLyBVcGRhdGVBbGxvY2F0aW9uUmVjb3JkIG1heSBmYWlsIHdpdGggbm9uLU5VTEwgcCB3aGVuIGNhcGFjaXR5IGlzCi0gICAgICAvLyBleGNlZWRlZC4KLSAgICAgIHJldXNlX2FsbG9jYXRvcl8tPkZyZWUocCk7Ci0gICAgICByZXR1cm4gQWxsb2NhdGlvbnMoKTsKKyAgICBpZiAoIXJldXNlX2FsbG9jYXRvcl8pIHsKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgICAgaW50IGluaXRpYWxfY2FwYWNpdHkgPSBTYk1lZGlhR2V0SW5pdGlhbEJ1ZmZlckNhcGFjaXR5KCk7CisgICAgICBpbnQgbWF4X2NhcGFjaXR5ID0gU2JNZWRpYUdldE1heEJ1ZmZlckNhcGFjaXR5KAorICAgICAgICAgIHZpZGVvX2NvZGVjXywgcmVzb2x1dGlvbl93aWR0aF8sIHJlc29sdXRpb25faGVpZ2h0XywgYml0c19wZXJfcGl4ZWxfKTsKKyAgICAgIGludCBhbGxvY2F0aW9uX3VuaXQgPSBTYk1lZGlhR2V0QnVmZmVyQWxsb2NhdGlvblVuaXQoKTsKKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgICAgIGludCBpbml0aWFsX2NhcGFjaXR5ID0gQ09CQUxUX01FRElBX0JVRkZFUl9JTklUSUFMX0NBUEFDSVRZOworICAgICAgaW50IG1heF9jYXBhY2l0eSA9IENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzEwODBQOworICAgICAgaW50IGFsbG9jYXRpb25fdW5pdCA9IENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUOworI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgICAgcmV1c2VfYWxsb2NhdG9yXy5yZXNldChuZXcgUmV1c2VBbGxvY2F0b3IoJmZhbGxiYWNrX2FsbG9jYXRvcl8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2NhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbl91bml0LCBtYXhfY2FwYWNpdHkpKTsKKyAgICAgIERMT0coSU5GTykgPDwgIlJldHVybmVkICIgPDwgaW5pdGlhbF9jYXBhY2l0eQorICAgICAgICAgICAgICAgICA8PCAiIGJ5dGVzIGZyb20gbWVkaWEgYnVmZmVyIHBvb2wgdG8gc3lzdGVtLiI7CiAgICAgfQotICAgIHJldHVybiBBbGxvY2F0aW9ucyhwLCBzaXplKTsKLSAgfQogCi0gIHN0ZDo6c2l6ZV90IGFsbG9jYXRlZF9zaXplID0gc2l6ZTsKLSAgdm9pZCogcCA9Ci0gICAgICByZXVzZV9hbGxvY2F0b3JfLT5BbGxvY2F0ZUJlc3RCbG9jayhhbGlnbm1lbnQsIGNvbnRleHQsICZhbGxvY2F0ZWRfc2l6ZSk7Ci0gIERDSEVDS19MRShhbGxvY2F0ZWRfc2l6ZSwgc2l6ZSk7Ci0gIGlmIChhbGxvY2F0ZWRfc2l6ZSA9PSBzaXplKSB7Ci0gICAgaWYgKCFVcGRhdGVBbGxvY2F0aW9uUmVjb3JkKCkpIHsKLSAgICAgIC8vIFVwZGF0ZUFsbG9jYXRpb25SZWNvcmQgbWF5IGZhaWwgd2l0aCBub24tTlVMTCBwIHdoZW4gY2FwYWNpdHkgaXMKLSAgICAgIC8vIGV4Y2VlZGVkLgotICAgICAgcmV1c2VfYWxsb2NhdG9yXy0+RnJlZShwKTsKLSAgICAgIHJldHVybiBBbGxvY2F0aW9ucygpOworICAgIGlmICgha0VuYWJsZU11bHRpYmxvY2tBbGxvY2F0ZSB8fCBrRW5hYmxlQWxsb2NhdGlvbkxvZykgeworICAgICAgdm9pZCogcCA9IHJldXNlX2FsbG9jYXRvcl8tPkFsbG9jYXRlKHNpemUsIGFsaWdubWVudCk7CisgICAgICBMT0dfSUYoSU5GTywga0VuYWJsZUFsbG9jYXRpb25Mb2cpCisgICAgICAgICAgPDwgIj09PT09PT09IE1lZGlhIEFsbG9jYXRpb24gTG9nICIgPDwgcCA8PCAiICIgPDwgc2l6ZSA8PCAiICIKKyAgICAgICAgICA8PCBhbGlnbm1lbnQgPDwgIiAiIDw8IGNvbnRleHQ7CisgICAgICBpZiAoIVVwZGF0ZUFsbG9jYXRpb25SZWNvcmQoKSkgeworICAgICAgICAvLyBVcGRhdGVBbGxvY2F0aW9uUmVjb3JkIG1heSBmYWlsIHdpdGggbm9uLU5VTEwgcCB3aGVuIGNhcGFjaXR5IGlzCisgICAgICAgIC8vIGV4Y2VlZGVkLgorICAgICAgICByZXVzZV9hbGxvY2F0b3JfLT5GcmVlKHApOworICAgICAgICByZXR1cm4gQWxsb2NhdGlvbnMoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBBbGxvY2F0aW9ucyhwLCBzaXplKTsKICAgICB9Ci0gICAgcmV0dXJuIEFsbG9jYXRpb25zKHAsIHNpemUpOwotICB9CiAKLSAgc3RkOjp2ZWN0b3I8dm9pZCo+IGJ1ZmZlcnMgPSB7cH07Ci0gIHN0ZDo6dmVjdG9yPGludD4gYnVmZmVyX3NpemVzID0ge3N0YXRpY19jYXN0PGludD4oYWxsb2NhdGVkX3NpemUpfTsKLSAgc2l6ZSAtPSBhbGxvY2F0ZWRfc2l6ZTsKLQotICBib29sIHVwZGF0ZV9hbGxvY2F0aW9uX3JlY29yZF9mYWlsZWQgPSBmYWxzZTsKLSAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgYWxsb2NhdGVkX3NpemUgPSBzaXplOworICAgIHN0ZDo6c2l6ZV90IGFsbG9jYXRlZF9zaXplID0gc2l6ZTsKICAgICB2b2lkKiBwID0gcmV1c2VfYWxsb2NhdG9yXy0+QWxsb2NhdGVCZXN0QmxvY2soYWxpZ25tZW50LCBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWxsb2NhdGVkX3NpemUpOwotICAgIGlmICghVXBkYXRlQWxsb2NhdGlvblJlY29yZCgpKSB7Ci0gICAgICB1cGRhdGVfYWxsb2NhdGlvbl9yZWNvcmRfZmFpbGVkID0gdHJ1ZTsKLSAgICAgIHJldXNlX2FsbG9jYXRvcl8tPkZyZWUocCk7Ci0gICAgICBicmVhazsKLSAgICB9CiAgICAgRENIRUNLX0xFKGFsbG9jYXRlZF9zaXplLCBzaXplKTsKLSAgICBidWZmZXJzLnB1c2hfYmFjayhwKTsKLSAgICBidWZmZXJfc2l6ZXMucHVzaF9iYWNrKGFsbG9jYXRlZF9zaXplKTsKLQotICAgIHNpemUgLT0gYWxsb2NhdGVkX3NpemU7Ci0gIH0KLSAgaWYgKHVwZGF0ZV9hbGxvY2F0aW9uX3JlY29yZF9mYWlsZWQpIHsKLSAgICBmb3IgKGF1dG8mIHAgOiBidWZmZXJzKSB7Ci0gICAgICByZXVzZV9hbGxvY2F0b3JfLT5GcmVlKHApOworICAgIGlmIChhbGxvY2F0ZWRfc2l6ZSA9PSBzaXplKSB7CisgICAgICBpZiAoIVVwZGF0ZUFsbG9jYXRpb25SZWNvcmQoKSkgeworICAgICAgICAvLyBVcGRhdGVBbGxvY2F0aW9uUmVjb3JkIG1heSBmYWlsIHdpdGggbm9uLU5VTEwgcCB3aGVuIGNhcGFjaXR5IGlzCisgICAgICAgIC8vIGV4Y2VlZGVkLgorICAgICAgICByZXVzZV9hbGxvY2F0b3JfLT5GcmVlKHApOworICAgICAgICByZXR1cm4gQWxsb2NhdGlvbnMoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBBbGxvY2F0aW9ucyhwLCBzaXplKTsKICAgICB9Ci0gICAgcmV0dXJuIEFsbG9jYXRpb25zKCk7CisKKyAgICBzdGQ6OnZlY3Rvcjx2b2lkKj4gYnVmZmVycyA9IHtwfTsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IGJ1ZmZlcl9zaXplcyA9IHtzdGF0aWNfY2FzdDxpbnQ+KGFsbG9jYXRlZF9zaXplKX07CisgICAgc2l6ZSAtPSBhbGxvY2F0ZWRfc2l6ZTsKKworICAgIGJvb2wgdXBkYXRlX2FsbG9jYXRpb25fcmVjb3JkX2ZhaWxlZCA9IGZhbHNlOworICAgIHdoaWxlIChzaXplID4gMCkgeworICAgICAgYWxsb2NhdGVkX3NpemUgPSBzaXplOworICAgICAgdm9pZCogcCA9IHJldXNlX2FsbG9jYXRvcl8tPkFsbG9jYXRlQmVzdEJsb2NrKGFsaWdubWVudCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWxsb2NhdGVkX3NpemUpOworICAgICAgaWYgKCFVcGRhdGVBbGxvY2F0aW9uUmVjb3JkKCkpIHsKKyAgICAgICAgdXBkYXRlX2FsbG9jYXRpb25fcmVjb3JkX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldXNlX2FsbG9jYXRvcl8tPkZyZWUocCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgRENIRUNLX0xFKGFsbG9jYXRlZF9zaXplLCBzaXplKTsKKyAgICAgIGJ1ZmZlcnMucHVzaF9iYWNrKHApOworICAgICAgYnVmZmVyX3NpemVzLnB1c2hfYmFjayhhbGxvY2F0ZWRfc2l6ZSk7CisKKyAgICAgIHNpemUgLT0gYWxsb2NhdGVkX3NpemU7CisgICAgfQorICAgIGlmICh1cGRhdGVfYWxsb2NhdGlvbl9yZWNvcmRfZmFpbGVkKSB7CisgICAgICBmb3IgKGF1dG8mIHAgOiBidWZmZXJzKSB7CisgICAgICAgIHJldXNlX2FsbG9jYXRvcl8tPkZyZWUocCk7CisgICAgICB9CisgICAgICByZXR1cm4gQWxsb2NhdGlvbnMoKTsKKyAgICB9CisgICAgcmV0dXJuIEFsbG9jYXRpb25zKHN0YXRpY19jYXN0PGludD4oYnVmZmVycy5zaXplKCkpLCBidWZmZXJzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemVzLmRhdGEoKSk7CiAgIH0KLSAgcmV0dXJuIEFsbG9jYXRpb25zKHN0YXRpY19jYXN0PGludD4oYnVmZmVycy5zaXplKCkpLCBidWZmZXJzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplcy5kYXRhKCkpOwotI2Vsc2UgICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCisjZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wgfHwKKyAgICAgICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgcmV0dXJuIEFsbG9jYXRpb25zKFNiTWVtb3J5QWxsb2NhdGVBbGlnbmVkKGFsaWdubWVudCwgc2l6ZSksIHNpemUpOwotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCiB9CiAKIHZvaWQgRGVjb2RlckJ1ZmZlckFsbG9jYXRvcjo6RnJlZShBbGxvY2F0aW9ucyBhbGxvY2F0aW9ucykgewogICBUUkFDS19NRU1PUllfU0NPUEUoIk1lZGlhIik7CisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgYm9vbCBwb29sX2FsbG9jYXRlX29uX2RlbWFuZCA9IFNiTWVkaWFJc0J1ZmZlclBvb2xBbGxvY2F0ZU9uRGVtYW5kKCk7CisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGJvb2wgcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQgPSBDT0JBTFRfTUVESUFfQlVGRkVSX1BPT0xfQUxMT0NBVEVfT05fREVNQU5EOworI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCi0jaWYgQ09CQUxUX01FRElBX0JVRkZFUl9VU0lOR19NRU1PUllfUE9PTAotICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgc2NvcGVkX2xvY2sobXV0ZXhfKTsKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGlmICh1c2luZ19tZW1vcnlfcG9vbF8pIHsKKyAgICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgc2NvcGVkX2xvY2sobXV0ZXhfKTsKIAotICBEQ0hFQ0socmV1c2VfYWxsb2NhdG9yXyk7CisgICAgRENIRUNLKHJldXNlX2FsbG9jYXRvcl8pOwogCi0gIGlmIChrRW5hYmxlQWxsb2NhdGlvbkxvZykgewotICAgIERDSEVDS19FUShhbGxvY2F0aW9ucy5udW1iZXJfb2ZfYnVmZmVycygpLCAxKTsKLSAgICBMT0coSU5GTykgPDwgIj09PT09PT09IE1lZGlhIEFsbG9jYXRpb24gTG9nICIgPDwgYWxsb2NhdGlvbnMuYnVmZmVycygpWzBdOworICAgIGlmIChrRW5hYmxlQWxsb2NhdGlvbkxvZykgeworICAgICAgRENIRUNLX0VRKGFsbG9jYXRpb25zLm51bWJlcl9vZl9idWZmZXJzKCksIDEpOworICAgICAgTE9HKElORk8pIDw8ICI9PT09PT09PSBNZWRpYSBBbGxvY2F0aW9uIExvZyAiIDw8IGFsbG9jYXRpb25zLmJ1ZmZlcnMoKVswXTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxvY2F0aW9ucy5udW1iZXJfb2ZfYnVmZmVycygpOyArK2kpIHsKKyAgICAgIHJldXNlX2FsbG9jYXRvcl8tPkZyZWUoYWxsb2NhdGlvbnMuYnVmZmVycygpW2ldKTsKKyAgICB9CisgICAgaWYgKHBvb2xfYWxsb2NhdGVfb25fZGVtYW5kKSB7CisgICAgICBpZiAocmV1c2VfYWxsb2NhdG9yXy0+R2V0QWxsb2NhdGVkKCkgPT0gMCkgeworICAgICAgICBETE9HKElORk8pIDw8ICJGcmVlZCAiIDw8IHJldXNlX2FsbG9jYXRvcl8tPkdldENhcGFjaXR5KCkKKyAgICAgICAgICAgICAgICAgICA8PCAiIGJ5dGVzIG9mIG1lZGlhIGJ1ZmZlciBwb29sIGBvbiBkZW1hbmRgLiI7CisgICAgICAgIHJldXNlX2FsbG9jYXRvcl8ucmVzZXQoKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOwogICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsb2NhdGlvbnMubnVtYmVyX29mX2J1ZmZlcnMoKTsgKytpKSB7Ci0gICAgcmV1c2VfYWxsb2NhdG9yXy0+RnJlZShhbGxvY2F0aW9ucy5idWZmZXJzKClbaV0pOwotICB9Ci0jaWYgQ09CQUxUX01FRElBX0JVRkZFUl9QT09MX0FMTE9DQVRFX09OX0RFTUFORAotICBpZiAocmV1c2VfYWxsb2NhdG9yXy0+R2V0QWxsb2NhdGVkKCkgPT0gMCkgewotICAgIERMT0coSU5GTykgPDwgIkZyZWVkICIgPDwgcmV1c2VfYWxsb2NhdG9yXy0+R2V0Q2FwYWNpdHkoKQotICAgICAgICAgICAgICAgPDwgIiBieXRlcyBvZiBtZWRpYSBidWZmZXIgcG9vbCBgb24gZGVtYW5kYC4iOwotICAgIHJldXNlX2FsbG9jYXRvcl8ucmVzZXQoKTsKLSAgfQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1BPT0xfQUxMT0NBVEVfT05fREVNQU5ECi0jZWxzZSAgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wKKyNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9VU0lOR19NRU1PUllfUE9PTCB8fAorICAgICAgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogICBmb3IgKGludCBpID0gMDsgaSA8IGFsbG9jYXRpb25zLm51bWJlcl9vZl9idWZmZXJzKCk7ICsraSkgewogICAgIFNiTWVtb3J5RGVhbGxvY2F0ZUFsaWduZWQoYWxsb2NhdGlvbnMuYnVmZmVycygpW2ldKTsKICAgfQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCiB9CiAKIHZvaWQgRGVjb2RlckJ1ZmZlckFsbG9jYXRvcjo6VXBkYXRlVmlkZW9Db25maWcoCiAgICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKLSNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCi0gIGlmICghcmV1c2VfYWxsb2NhdG9yXykgewotICAgIHJldHVybjsKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGlmICh1c2luZ19tZW1vcnlfcG9vbF8pIHsKKyAgICBpZiAoIXJldXNlX2FsbG9jYXRvcl8pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmlkZW9SZXNvbHV0aW9uIHJlc29sdXRpb24gPQorICAgICAgICBHZXRWaWRlb1Jlc29sdXRpb24oY29uZmlnLnZpc2libGVfcmVjdCgpLnNpemUoKSk7CisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgICB2aWRlb19jb2RlY18gPSBNZWRpYVZpZGVvQ29kZWNUb1NiTWVkaWFWaWRlb0NvZGVjKGNvbmZpZy5jb2RlYygpKTsKKyAgICByZXNvbHV0aW9uX3dpZHRoXyA9IGNvbmZpZy52aXNpYmxlX3JlY3QoKS5zaXplKCkud2lkdGgoKTsKKyAgICByZXNvbHV0aW9uX2hlaWdodF8gPSBjb25maWcudmlzaWJsZV9yZWN0KCkuc2l6ZSgpLmhlaWdodCgpOworICAgIGJpdHNfcGVyX3BpeGVsXyA9IGNvbmZpZy53ZWJtX2NvbG9yX21ldGFkYXRhKCkuQml0c1BlckNoYW5uZWw7CisgICAgcmV1c2VfYWxsb2NhdG9yXy0+c2V0X21heF9jYXBhY2l0eShTYk1lZGlhR2V0TWF4QnVmZmVyQ2FwYWNpdHkoCisgICAgICAgIHZpZGVvX2NvZGVjXywgcmVzb2x1dGlvbl93aWR0aF8sIHJlc29sdXRpb25faGVpZ2h0XywgYml0c19wZXJfcGl4ZWxfKSk7CisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisgICAgaWYgKHJldXNlX2FsbG9jYXRvcl8tPm1heF9jYXBhY2l0eSgpICYmCisgICAgICAgIHJlc29sdXRpb24gPiBrVmlkZW9SZXNvbHV0aW9uMTA4MHApIHsKKyAgICAgIHJldXNlX2FsbG9jYXRvcl8tPnNldF9tYXhfY2FwYWNpdHkoQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfNEspOworICAgIH0KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgfQotICBWaWRlb1Jlc29sdXRpb24gcmVzb2x1dGlvbiA9IEdldFZpZGVvUmVzb2x1dGlvbihjb25maWcudmlzaWJsZV9yZWN0KCkuc2l6ZSgpKTsKLSAgaWYgKHJldXNlX2FsbG9jYXRvcl8tPm1heF9jYXBhY2l0eSgpICYmIHJlc29sdXRpb24gPiBrVmlkZW9SZXNvbHV0aW9uMTA4MHApIHsKLSAgICByZXVzZV9hbGxvY2F0b3JfLT5zZXRfbWF4X2NhcGFjaXR5KENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLKTsKLSAgfQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCisjZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wgfHwKKyAgICAgICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIH0KIAotI2lmIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCiBEZWNvZGVyQnVmZmVyQWxsb2NhdG9yOjpSZXVzZUFsbG9jYXRvcjo6UmV1c2VBbGxvY2F0b3IoCiAgICAgQWxsb2NhdG9yKiBmYWxsYmFja19hbGxvY2F0b3IsIHN0ZDo6c2l6ZV90IGluaXRpYWxfY2FwYWNpdHksCiAgICAgc3RkOjpzaXplX3QgYWxsb2NhdGlvbl9pbmNyZW1lbnQsIHN0ZDo6c2l6ZV90IG1heF9jYXBhY2l0eSkKQEAgLTIzNyw4ICsyOTcsMTMgQEAKICNpZiAhZGVmaW5lZChDT0JBTFRfQlVJTERfVFlQRV9HT0xEKQogICAvLyBUaGlzIGNvZGUgaXMgbm90IHF1aXRlIG11bHRpLXRocmVhZCBzYWZlIGJ1dCBpcyBzYWZlIGVub3VnaCBmb3IgdHJhY2tpbmcKICAgLy8gcHVycG9zZXMuCi0gIHN0YXRpYyBzdGQ6OnNpemVfdCBtYXhfYWxsb2NhdGVkID0gQ09CQUxUX01FRElBX0JVRkZFUl9JTklUSUFMX0NBUEFDSVRZIC8gMjsKLSAgc3RhdGljIHN0ZDo6c2l6ZV90IG1heF9jYXBhY2l0eSA9IENPQkFMVF9NRURJQV9CVUZGRVJfSU5JVElBTF9DQVBBQ0lUWTsKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAorICBpbnQgaW5pdGlhbF9jYXBhY2l0eSA9IFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHkoKTsKKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgaW50IGluaXRpYWxfY2FwYWNpdHkgPSBDT0JBTFRfTUVESUFfQlVGRkVSX0lOSVRJQUxfQ0FQQUNJVFk7CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisgIHN0YXRpYyBzdGQ6OnNpemVfdCBtYXhfYWxsb2NhdGVkID0gaW5pdGlhbF9jYXBhY2l0eSAvIDI7CisgIHN0YXRpYyBzdGQ6OnNpemVfdCBtYXhfY2FwYWNpdHkgPSBpbml0aWFsX2NhcGFjaXR5OwogICBzdGF0aWMgc3RkOjpzaXplX3QgbWF4X2Jsb2NrcyA9IDE7CiAKICAgYm9vbCBuZXdfbWF4X3JlYWNoZWQgPSBmYWxzZTsKQEAgLTI2Nyw3ICszMzIsNyBAQAogICB9CiAjZW5kaWYgIC8vICFkZWZpbmVkKENPQkFMVF9CVUlMRF9UWVBFX0dPTEQpCiAjaWYgQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfMTA4MFAgPiAwIHx8IFwKLSAgICBDT0JBTFRfTUVESUFfQlVGRkVSX01BWF9DQVBBQ0lUWV80SyA+IDAKKyAgICBDT0JBTFRfTUVESUFfQlVGRkVSX01BWF9DQVBBQ0lUWV80SyA+IDAgfHwgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgaWYgKHJldXNlX2FsbG9jYXRvcl8tPkNhcGFjaXR5RXhjZWVkZWQoKSkgewogICAgIFNCX0xPRyhFUlJPUikgPDwgIkNvYmFsdCBtZWRpYSBidWZmZXIgY2FwYWNpdHkgIgogICAgICAgICAgICAgICAgICAgPDwgcmV1c2VfYWxsb2NhdG9yXy0+R2V0Q2FwYWNpdHkoKQpAQCAtMjc2LDkgKzM0MSw5IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAjZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzEwODBQID4gMCB8fAotICAgICAgICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX01BWF9DQVBBQ0lUWV80SyA+IDAKKyAgICAgICAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfNEsgPiAwIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIHJldHVybiB0cnVlOwogfQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCisjZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wgfHwgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYQogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYS9kZWNvZGVyX2J1ZmZlcl9hbGxvY2F0b3IuaCBiL3NyYy9jb2JhbHQvbWVkaWEvZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yLmgKaW5kZXggOTEwZWJjYS4uMTgzMjAyNCAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYS9kZWNvZGVyX2J1ZmZlcl9hbGxvY2F0b3IuaAorKysgYi9zcmMvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5oCkBAIC0yMiwxNiArMjIsMTkgQEAKICNpbmNsdWRlICJuYi9iaWRpcmVjdGlvbmFsX2ZpdF9yZXVzZV9hbGxvY2F0b3IuaCIKICNpbmNsdWRlICJuYi9zdGFyYm9hcmRfbWVtb3J5X2FsbG9jYXRvci5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tdXRleC5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CiAKKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAjaWYgQ09CQUxUX01FRElBX0JVRkZFUl9JTklUSUFMX0NBUEFDSVRZID4gMCB8fCBcCiAgICAgQ09CQUxUX01FRElBX0JVRkZFUl9BTExPQ0FUSU9OX1VOSVQgPiAwCiAjZGVmaW5lIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wgMQogI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX0lOSVRJQUxfQ0FQQUNJVFkgPT0gMCAmJgogICAgICAgICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX0FMTE9DQVRJT05fVU5JVCA9PSAwCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogY2xhc3MgRGVjb2RlckJ1ZmZlckFsbG9jYXRvciA6IHB1YmxpYyBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IgewogIHB1YmxpYzoKQEAgLTQ1LDcgKzQ4LDcgQEAKICAgdm9pZCBVcGRhdGVWaWRlb0NvbmZpZyhjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZyk7CiAKICBwcml2YXRlOgotI2lmIENPQkFMVF9NRURJQV9CVUZGRVJfVVNJTkdfTUVNT1JZX1BPT0wKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIGNsYXNzIFJldXNlQWxsb2NhdG9yIDogcHVibGljIG5iOjpCaWRpcmVjdGlvbmFsRml0UmV1c2VBbGxvY2F0b3IgewogICAgcHVibGljOgogICAgIFJldXNlQWxsb2NhdG9yKEFsbG9jYXRvciogZmFsbGJhY2tfYWxsb2NhdG9yLCBzdGQ6OnNpemVfdCBpbml0aWFsX2NhcGFjaXR5LApAQCAtNjQsNyArNjcsMTQgQEAKICAgc3RhcmJvYXJkOjpNdXRleCBtdXRleF87CiAgIG5iOjpTdGFyYm9hcmRNZW1vcnlBbGxvY2F0b3IgZmFsbGJhY2tfYWxsb2NhdG9yXzsKICAgc3RhcmJvYXJkOjpzY29wZWRfcHRyPFJldXNlQWxsb2NhdG9yPiByZXVzZV9hbGxvY2F0b3JfOwotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MCisgIGJvb2wgdXNpbmdfbWVtb3J5X3Bvb2xfID0gZmFsc2U7CisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWNfID0ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZTsKKyAgaW50IHJlc29sdXRpb25fd2lkdGhfID0ga1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkOworICBpbnQgcmVzb2x1dGlvbl9oZWlnaHRfID0ga1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkOworICBpbnQgYml0c19wZXJfcGl4ZWxfID0ga1NiTWVkaWFCaXRzUGVyUGl4ZWxJbnZhbGlkOworI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAorI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQlVGRkVSX1VTSU5HX01FTU9SWV9QT09MIHx8IFNCX0FQSV9WRVJTSU9OID49IDEwCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgbWVkaWEKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWEvZmlsdGVycy9zaGVsbF9kZW11eGVyLmNjIGIvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NoZWxsX2RlbXV4ZXIuY2MKaW5kZXggMjkwOTUzMi4uYjlkNmI5NCAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NoZWxsX2RlbXV4ZXIuY2MKKysrIGIvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NoZWxsX2RlbXV4ZXIuY2MKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RhdGFfc291cmNlLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2hlbGxfbWVkaWFfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAKQEAgLTM2Nyw3ICszNjgsMTYgQEAKICAgaWYgKHJlcXVlc3RlZF9hdV8pIHsKICAgICBzaXplX3QgdG90YWxfYnVmZmVyX3NpemUgPSBhdWRpb19kZW11eGVyX3N0cmVhbV8tPkdldFRvdGFsQnVmZmVyU2l6ZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19kZW11eGVyX3N0cmVhbV8tPkdldFRvdGFsQnVmZmVyU2l6ZSgpOwotICAgIGlmICh0b3RhbF9idWZmZXJfc2l6ZSA+PSBDT0JBTFRfTUVESUFfQlVGRkVSX1BST0dSRVNTSVZFX0JVREdFVCkgeworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCisgICAgaW50IHByb2dyZXNzaXZlX2J1ZGdldCA9IFNiTWVkaWFHZXRQcm9ncmVzc2l2ZUJ1ZmZlckJ1ZGdldCgKKyAgICAgICAgTWVkaWFWaWRlb0NvZGVjVG9TYk1lZGlhVmlkZW9Db2RlYyhWaWRlb0NvbmZpZygpLmNvZGVjKCkpLAorICAgICAgICBWaWRlb0NvbmZpZygpLnZpc2libGVfcmVjdCgpLnNpemUoKS53aWR0aCgpLAorICAgICAgICBWaWRlb0NvbmZpZygpLnZpc2libGVfcmVjdCgpLnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAgVmlkZW9Db25maWcoKS53ZWJtX2NvbG9yX21ldGFkYXRhKCkuQml0c1BlckNoYW5uZWwpOworI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgIGludCBwcm9ncmVzc2l2ZV9idWRnZXQgPSBDT0JBTFRfTUVESUFfQlVGRkVSX1BST0dSRVNTSVZFX0JVREdFVDsKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgICBpZiAodG90YWxfYnVmZmVyX3NpemUgPj0gcHJvZ3Jlc3NpdmVfYnVkZ2V0KSB7CiAgICAgICAvLyBSZXRyeSBhZnRlciAxMDAgbWlsbGlzZWNvbmRzLgogICAgICAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtEZWxheSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMDApOwogICAgICAgYmxvY2tpbmdfdGhyZWFkXy5tZXNzYWdlX2xvb3AoKS0+UG9zdERlbGF5ZWRUYXNrKApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjIGIvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjCmluZGV4IDYzMjc4NTMuLjVlM2YxNjQgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5jYworKysgYi9zcmMvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uY2MKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICJiYXNlL2JpbmQuaCIKICNpbmNsdWRlICJiYXNlL2RlYnVnL3RyYWNlX2V2ZW50LmgiCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3V0aWxzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3Jlc29sdXRpb24uaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmgiCkBAIC0xNTcsNyArMTU4LDEyIEBACiAgICAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfKHJhbmdlc18uZW5kKCkpLAogICAgICAgbGFzdF9vdXRwdXRfYnVmZmVyX3RpbWVzdGFtcF8oa05vRGVjb2RlVGltZXN0YW1wKCkpLAogICAgICAgbWF4X2ludGVyYnVmZmVyX2Rpc3RhbmNlXyhrTm9UaW1lc3RhbXApLAorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCisgICAgICBtZW1vcnlfbGltaXRfKFNiTWVkaWFHZXRBdWRpb0J1ZmZlckJ1ZGdldCgpKSB7CisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgICAgICBtZW1vcnlfbGltaXRfKENPQkFMVF9NRURJQV9CVUZGRVJfTk9OX1ZJREVPX0JVREdFVCkgeworI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAorCiAgIERDSEVDSyhhdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKTsKICAgYXVkaW9fY29uZmlnc18ucHVzaF9iYWNrKGF1ZGlvX2NvbmZpZyk7CiB9CkBAIC0xNzYsOSArMTgyLDE5IEBACiAgIHZpZGVvX2NvbmZpZ3NfLnB1c2hfYmFjayh2aWRlb19jb25maWcpOwogICBWaWRlb1Jlc29sdXRpb24gcmVzb2x1dGlvbiA9CiAgICAgICBHZXRWaWRlb1Jlc29sdXRpb24odmlkZW9fY29uZmlnLnZpc2libGVfcmVjdCgpLnNpemUoKSk7CisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgcmVzb2x1dGlvbl93aWR0aF8gPSB2aWRlb19jb25maWcudmlzaWJsZV9yZWN0KCkuc2l6ZSgpLndpZHRoKCk7CisgIHJlc29sdXRpb25faGVpZ2h0XyA9IHZpZGVvX2NvbmZpZy52aXNpYmxlX3JlY3QoKS5zaXplKCkuaGVpZ2h0KCk7CisgIGJpdHNfcGVyX3BpeGVsXyA9IHZpZGVvX2NvbmZpZy53ZWJtX2NvbG9yX21ldGFkYXRhKCkuQml0c1BlckNoYW5uZWw7CisgIGNvZGVjXyA9IE1lZGlhVmlkZW9Db2RlY1RvU2JNZWRpYVZpZGVvQ29kZWModmlkZW9fY29uZmlnLmNvZGVjKCkpOworCisgIG1lbW9yeV9saW1pdF8gPSBTYk1lZGlhR2V0VmlkZW9CdWZmZXJCdWRnZXQoCisgICAgICBjb2RlY18sIHJlc29sdXRpb25fd2lkdGhfLCByZXNvbHV0aW9uX2hlaWdodF8sIGJpdHNfcGVyX3BpeGVsXyk7CisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIG1lbW9yeV9saW1pdF8gPSByZXNvbHV0aW9uIDw9IGtWaWRlb1Jlc29sdXRpb24xMDgwcAogICAgICAgICAgICAgICAgICAgICAgID8gQ09CQUxUX01FRElBX0JVRkZFUl9WSURFT19CVURHRVRfMTA4MFAKICAgICAgICAgICAgICAgICAgICAgICA6IENPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzRLOworI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogfQogCiBTb3VyY2VCdWZmZXJTdHJlYW06OlNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBUZXh0VHJhY2tDb25maWcmIHRleHRfY29uZmlnLApAQCAtMTkyLDcgKzIwOCwxMyBAQAogICAgICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyhyYW5nZXNfLmVuZCgpKSwKICAgICAgIGxhc3Rfb3V0cHV0X2J1ZmZlcl90aW1lc3RhbXBfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwKICAgICAgIG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZV8oa05vVGltZXN0YW1wKSwKLSAgICAgIG1lbW9yeV9saW1pdF8oQ09CQUxUX01FRElBX0JVRkZFUl9OT05fVklERU9fQlVER0VUKSB7fQorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCisgICAgICBtZW1vcnlfbGltaXRfKFNiTWVkaWFHZXRBdWRpb0J1ZmZlckJ1ZGdldCgpKSB7Cit9CisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisgICAgICBtZW1vcnlfbGltaXRfKENPQkFMVF9NRURJQV9CVUZGRVJfTk9OX1ZJREVPX0JVREdFVCkgeworfQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiBTb3VyY2VCdWZmZXJTdHJlYW06On5Tb3VyY2VCdWZmZXJTdHJlYW0oKSB7CiAgIHdoaWxlICghcmFuZ2VzXy5lbXB0eSgpKSB7CkBAIC03MzUsMTAgKzc1NywxNiBAQAogCiAgIHNpemVfdCBieXRlc190b19mcmVlID0gMDsKIAorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGludCBnYXJiYWdlX2NvbGxlY3Rpb25fZHVyYXRpb25fdGhyZXNob2xkX2luX3NlY29uZHMgPQorICAgICAgU2JNZWRpYUdldEJ1ZmZlckdhcmJhZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQoKSAvIGtTYlRpbWVTZWNvbmQ7CisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisgIGludCBnYXJiYWdlX2NvbGxlY3Rpb25fZHVyYXRpb25fdGhyZXNob2xkX2luX3NlY29uZHMgPQorICAgICAgQ09CQUxUX01FRElBX1NPVVJDRV9HQVJCQUdFX0NPTExFQ1RJT05fRFVSQVRJT05fVEhSRVNIT0xEX0lOX1NFQ09ORFM7CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIC8vIENoZWNrIGlmIHdlJ3JlIHVuZGVyIG9yIGF0IHRoZSBtZW1vcnkvZHVyYXRpb24gbGltaXQuCiAgIGNvbnN0IGF1dG8ga0djRHVyYXRpb25UaHJlc2hvbGRJbk1pbGxpc2Vjb25kcyA9Ci0gICAgICBDT0JBTFRfTUVESUFfU09VUkNFX0dBUkJBR0VfQ09MTEVDVElPTl9EVVJBVElPTl9USFJFU0hPTERfSU5fU0VDT05EUyAqCi0gICAgICAxMDAwOworICAgICAgZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZF9pbl9zZWNvbmRzICogMTAwMDsKIAogICBpZiAocmFuZ2VzX3NpemUgKyBuZXdEYXRhU2l6ZSA+IG1lbW9yeV9saW1pdF8pIHsKICAgICBieXRlc190b19mcmVlID0gcmFuZ2VzX3NpemUgKyBuZXdEYXRhU2l6ZSAtIG1lbW9yeV9saW1pdF87CkBAIC0xMzczLDggKzE0MDEsOSBAQAogICAgICAgICA8PCAiTWVkaWEgYXBwZW5kIHRoYXQgb3ZlcmxhcHBlZCBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGNhdXNlZCB0aW1lICIKICAgICAgICAgICAgImdhcCBpbiBwbGF5aW5nICIKICAgICAgICAgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiIHN0cmVhbSBiZWNhdXNlIHRoZSBuZXh0IGtleWZyYW1lIGlzICIKLSAgICAgICAgPDwgZGVsdGEuSW5NaWxsaXNlY29uZHMoKSA8PCAibXMgYmV5b25kIGxhc3Qgb3ZlcmxhcHBlZCBmcmFtZS4gTWVkaWEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXkgYXBwZWFyIHRlbXBvcmFyaWx5IGZyb3plbi4iOworICAgICAgICA8PCBkZWx0YS5Jbk1pbGxpc2Vjb25kcygpCisgICAgICAgIDw8ICJtcyBiZXlvbmQgbGFzdCBvdmVybGFwcGVkIGZyYW1lLiBNZWRpYSAiCisgICAgICAgICAgICJtYXkgYXBwZWFyIHRlbXBvcmFyaWx5IGZyb3plbi4iOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oIGIvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgKaW5kZXggZGU5ZDM0My4uOTZlZTAzYiAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgKQEAgLTUwMCw2ICs1MDAsMTQgQEAKICAgLy8gU3RvcmVzIHRoZSBsYXJnZXN0IGRpc3RhbmNlIGJldHdlZW4gdHdvIGFkamFjZW50IGJ1ZmZlcnMgaW4gdGhpcyBzdHJlYW0uCiAgIGJhc2U6OlRpbWVEZWx0YSBtYXhfaW50ZXJidWZmZXJfZGlzdGFuY2VfOwogCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKKyAgYm9vbCB1c2luZ19tZW1vcnlfcG9vbF87CisgIGludCByZXNvbHV0aW9uX3dpZHRoXyA9IGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZDsKKyAgaW50IHJlc29sdXRpb25faGVpZ2h0XyA9IGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZDsKKyAgaW50IGJpdHNfcGVyX3BpeGVsXyA9IGtTYk1lZGlhQml0c1BlclBpeGVsSW52YWxpZDsKKyAgU2JNZWRpYVZpZGVvQ29kZWMgY29kZWNfID0ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZTsKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKKwogICAvLyBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSBpbiBieXRlcyB0aGUgc3RyZWFtIHdpbGwga2VlcCBpbiBtZW1vcnkuCiAgIHNpemVfdCBtZW1vcnlfbGltaXRfOwogCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZW5jb2RlcnMvYXVkaW9fZW5jb2Rlci5oIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2F1ZGlvX2VuY29kZXIuaAppbmRleCBjZWJlZjJmLi4xYzc1NGFjIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZW5jb2RlcnMvYXVkaW9fZW5jb2Rlci5oCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9hdWRpb19lbmNvZGVyLmgKQEAgLTU5LDYgKzU5LDggQEAKIAogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldE1pbWVUeXBlKCkgY29uc3QgPSAwOwogCisgIHZpcnR1YWwgdm9pZCBPblNldEZvcm1hdChjb25zdCBtZWRpYV9zdHJlYW06OkF1ZGlvUGFyYW1ldGVycyYgcGFyYW1zKSA9IDA7CisKICAgdm9pZCBBZGRMaXN0ZW5lcihBdWRpb0VuY29kZXI6Okxpc3RlbmVyKiBsaXN0ZW5lcik7CiAKICAgdm9pZCBSZW1vdmVMaXN0ZW5lcihBdWRpb0VuY29kZXI6Okxpc3RlbmVyKiBsaXN0ZW5lcik7CkBAIC03Miw2ICs3NCw3IEBACiAgICAgICBjb25zdCBtZWRpYV9zdHJlYW06OkF1ZGlvUGFyYW1ldGVycyYgcGFyYW1zKSBjb25zdCA9IDA7CiAKICBwcm90ZWN0ZWQ6CisgIC8vIFRoaXMgY2FsbCBpcyB0aHJlYWQtc2FmZS4KICAgdm9pZCBQdXNoRGF0YVRvQWxsTGlzdGVuZXJzKGNvbnN0IHVpbnQ4KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZVRpY2tzIHRpbWVjb2RlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2ZsYWNfYXVkaW9fZW5jb2Rlci5jYyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9mbGFjX2F1ZGlvX2VuY29kZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0NzYyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9mbGFjX2F1ZGlvX2VuY29kZXIuY2MKQEAgLTAsMCArMSwxMzcgQEAKKy8vIENvcHlyaWdodCAyMDE4IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9mbGFjX2F1ZGlvX2VuY29kZXIuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImJhc2UvYmluZC5oIgorI2luY2x1ZGUgImJhc2UvYmluZF9oZWxwZXJzLmgiCisjaW5jbHVkZSAiYmFzZS9zdHJpbmdfdXRpbC5oIgorCituYW1lc3BhY2UgeworCisvLyBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI1ODYgZm9yIE1JTUUgdHlwZQorY29uc3QgY2hhciBrRmxhY01pbWVUeXBlW10gPSAiYXVkaW8vZmxhYyI7CisKKy8vIFRoaXMgaXMgYSBndWVzc3RpbWF0ZWQgdmFsdWUuIFRoaXMgbnVtYmVyIHNob3VsZCBiZSA+IDEuCitjb25zdCBkb3VibGUga0VzdGltYXRlZEZsYWNDb21wcmVzc2lvblJhdGlvID0gMS4zMDsKKworfSAgLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIG1lZGlhX2NhcHR1cmUgeworbmFtZXNwYWNlIGVuY29kZXJzIHsKKworYm9vbCBGbGFjQXVkaW9FbmNvZGVyOjpJc0ZsYWNNSU1FVHlwZShjb25zdCBiYXNlOjpTdHJpbmdQaWVjZSYgbWltZV90eXBlKSB7CisgIGJhc2U6OlN0cmluZ1BpZWNlIG1pbWVfdHlwZV9jb250YWluZXIgPSBtaW1lX3R5cGU7CisgIHNpemVfdCBwb3MgPSBtaW1lX3R5cGUuZmluZF9maXJzdF9vZignOycpOworICBpZiAocG9zICE9IGJhc2U6OlN0cmluZ1BpZWNlOjpucG9zKSB7CisgICAgbWltZV90eXBlX2NvbnRhaW5lciA9IGJhc2U6OlN0cmluZ1BpZWNlKG1pbWVfdHlwZS5iZWdpbigpLCBwb3MpOworICB9CisgIGNvbnN0IGJhc2U6OlN0cmluZ1BpZWNlIGZsYWNfbWltZV90eXBlKGtGbGFjTWltZVR5cGUpOworICBhdXRvIG1hdGNoX2l0ZXJhdG9yID0KKyAgICAgIHN0ZDo6c2VhcmNoKG1pbWVfdHlwZV9jb250YWluZXIuYmVnaW4oKSwgbWltZV90eXBlX2NvbnRhaW5lci5lbmQoKSwKKyAgICAgICAgICAgICAgICAgIGZsYWNfbWltZV90eXBlLmJlZ2luKCksIGZsYWNfbWltZV90eXBlLmVuZCgpLAorICAgICAgICAgICAgICAgICAgYmFzZTo6Q2FzZUluc2Vuc2l0aXZlQ29tcGFyZUFTQ0lJPGNoYXI+KCkpOworICByZXR1cm4gbWF0Y2hfaXRlcmF0b3IgPT0gbWltZV90eXBlX2NvbnRhaW5lci5iZWdpbigpOworfQorCitGbGFjQXVkaW9FbmNvZGVyOjpGbGFjQXVkaW9FbmNvZGVyKCkgOiB0aHJlYWRfKCJmbGFjX2VuY29kaW5nX3RocmVhZCIpIHsKKyAgdGhyZWFkXy5TdGFydCgpOworfQorCitGbGFjQXVkaW9FbmNvZGVyOjp+RmxhY0F1ZGlvRW5jb2RlcigpIHsKKyAgdGhyZWFkXy5tZXNzYWdlX2xvb3BfcHJveHkoKS0+UG9zdEJsb2NraW5nVGFzaygKKyAgICAgIEZST01fSEVSRSwKKyAgICAgIGJhc2U6OkJpbmQoJkZsYWNBdWRpb0VuY29kZXI6OkRlc3Ryb3lFbmNvZGVyLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Cit9CisKK3ZvaWQgRmxhY0F1ZGlvRW5jb2Rlcjo6RW5jb2RlKGNvbnN0IFNoZWxsQXVkaW9CdXMmIGF1ZGlvX2J1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyByZWZlcmVuY2VfdGltZSkgeworICBzY29wZWRfcHRyPFNoZWxsQXVkaW9CdXM+IGF1ZGlvX2J1c19jb3B5KAorICAgICAgbmV3IFNoZWxsQXVkaW9CdXMoYXVkaW9fYnVzLmNoYW5uZWxzKCksIGF1ZGlvX2J1cy5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1cy5zYW1wbGVfdHlwZSgpLCBhdWRpb19idXMuc3RvcmFnZV90eXBlKCkpKTsKKyAgYXVkaW9fYnVzX2NvcHktPkFzc2lnbihhdWRpb19idXMpOworCisgIC8vIGJhc2U6OlVucmV0YWluZWQgdXNhZ2UgaXMgc2FmZSBoZXJlLCBzaW5jZSB3ZSdyZSBwb3N0aW5nIHRvIGEgdGhyZWFkIHRoYXQKKyAgLy8gd2Ugb3duLgorICB0aHJlYWRfLm1lc3NhZ2VfbG9vcF9wcm94eSgpLT5Qb3N0VGFzaygKKyAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmRmxhY0F1ZGlvRW5jb2Rlcjo6RG9FbmNvZGUsIGJhc2U6OlVucmV0YWluZWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6UGFzc2VkKCZhdWRpb19idXNfY29weSksIHJlZmVyZW5jZV90aW1lKSk7Cit9CisKK3ZvaWQgRmxhY0F1ZGlvRW5jb2Rlcjo6RmluaXNoKGJhc2U6OlRpbWVUaWNrcyByZWZlcmVuY2VfdGltZSkgeworICB0aHJlYWRfLm1lc3NhZ2VfbG9vcF9wcm94eSgpLT5Qb3N0QmxvY2tpbmdUYXNrKAorICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZGbGFjQXVkaW9FbmNvZGVyOjpEb0ZpbmlzaCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfdGltZSkpOworfQorCitzdGQ6OnN0cmluZyBGbGFjQXVkaW9FbmNvZGVyOjpHZXRNaW1lVHlwZSgpIGNvbnN0IHsKKyAgcmV0dXJuIGZsYWNfZW5jb2Rlcl8tPkdldE1pbWVUeXBlKCk7Cit9CisKK2ludDY0IEZsYWNBdWRpb0VuY29kZXI6OkdldEVzdGltYXRlZE91dHB1dEJpdHNQZXJTZWNvbmQoCisgICAgY29uc3QgbWVkaWFfc3RyZWFtOjpBdWRpb1BhcmFtZXRlcnMmIHBhcmFtcykgY29uc3QgeworICBEQ0hFQ0tfRVEocGFyYW1zLmJpdHNfcGVyX3NhbXBsZSgpLCAxNik7CisgIERDSEVDS19FUShwYXJhbXMuY2hhbm5lbF9jb3VudCgpLCAxKTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGludDY0PihwYXJhbXMuR2V0Qml0c1BlclNlY29uZCgpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXN0aW1hdGVkRmxhY0NvbXByZXNzaW9uUmF0aW8pOworfQorCit2b2lkIEZsYWNBdWRpb0VuY29kZXI6Ok9uU2V0Rm9ybWF0KAorICAgIGNvbnN0IG1lZGlhX3N0cmVhbTo6QXVkaW9QYXJhbWV0ZXJzJiBwYXJhbXMpIHsKKyAgLy8gYmFzZTo6VW5yZXRhaW5lZCB1c2FnZSBpcyBzYWZlIGhlcmUsIHNpbmNlIHdlJ3JlIHBvc3RpbmcgdG8gYSB0aHJlYWQgdGhhdAorICAvLyB3ZSBvd24uCisgIHRocmVhZF8ubWVzc2FnZV9sb29wX3Byb3h5KCktPlBvc3RUYXNrKAorICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZGbGFjQXVkaW9FbmNvZGVyOjpDcmVhdGVFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcyksIHBhcmFtcykpOworfQorCit2b2lkIEZsYWNBdWRpb0VuY29kZXI6OkNyZWF0ZUVuY29kZXIoCisgICAgY29uc3QgbWVkaWFfc3RyZWFtOjpBdWRpb1BhcmFtZXRlcnMmIHBhcmFtcykgeworICBmbGFjX2VuY29kZXJfLnJlc2V0KG5ldyBzcGVlY2g6OkF1ZGlvRW5jb2RlckZsYWMocGFyYW1zLnNhbXBsZV9yYXRlKCkpKTsKK30KKwordm9pZCBGbGFjQXVkaW9FbmNvZGVyOjpEZXN0cm95RW5jb2RlcigpIHsgZmxhY19lbmNvZGVyXy5yZXNldCgpOyB9CisKK3ZvaWQgRmxhY0F1ZGlvRW5jb2Rlcjo6RG9FbmNvZGUoc2NvcGVkX3B0cjxTaGVsbEF1ZGlvQnVzPiBhdWRpb19idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyByZWZlcmVuY2VfdGltZSkgeworICBEQ0hFQ0soZmxhY19lbmNvZGVyXyk7CisgIGZsYWNfZW5jb2Rlcl8tPkVuY29kZShhdWRpb19idXMuZ2V0KCkpOworICBhdXRvIGRhdGEgPSBmbGFjX2VuY29kZXJfLT5HZXRBbmRDbGVhckF2YWlsYWJsZUVuY29kZWREYXRhKCk7CisgIGlmIChkYXRhLmVtcHR5KCkpIHsKKyAgICByZXR1cm47CisgIH0KKyAgUHVzaERhdGFUb0FsbExpc3RlbmVycyhyZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oJmRhdGFbMF0pLCBkYXRhLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfdGltZSk7Cit9CisKK3ZvaWQgRmxhY0F1ZGlvRW5jb2Rlcjo6RG9GaW5pc2goYmFzZTo6VGltZVRpY2tzIHJlZmVyZW5jZV90aW1lKSB7CisgIGlmICghZmxhY19lbmNvZGVyXykgeworICAgIHJldHVybjsKKyAgfQorICBmbGFjX2VuY29kZXJfLT5GaW5pc2goKTsKKyAgYXV0byBkYXRhID0gZmxhY19lbmNvZGVyXy0+R2V0QW5kQ2xlYXJBdmFpbGFibGVFbmNvZGVkRGF0YSgpOworICBpZiAoZGF0YS5lbXB0eSgpKSB7CisgICAgUHVzaERhdGFUb0FsbExpc3RlbmVycyhudWxscHRyLCAwLCByZWZlcmVuY2VfdGltZSk7CisgICAgcmV0dXJuOworICB9CisgIFB1c2hEYXRhVG9BbGxMaXN0ZW5lcnMocmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KCZkYXRhWzBdKSwgZGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlX3RpbWUpOworfQorCit9ICAvLyBuYW1lc3BhY2UgZW5jb2RlcnMKK30gIC8vIG5hbWVzcGFjZSBtZWRpYV9jYXB0dXJlCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZW5jb2RlcnMvZmxhY19hdWRpb19lbmNvZGVyLmggYi9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZW5jb2RlcnMvZmxhY19hdWRpb19lbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1ZWZhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9mbGFjX2F1ZGlvX2VuY29kZXIuaApAQCAtMCwwICsxLDcwIEBACisvLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9NRURJQV9DQVBUVVJFX0VOQ09ERVJTX0ZMQUNfQVVESU9fRU5DT0RFUl9IXworI2RlZmluZSBDT0JBTFRfTUVESUFfQ0FQVFVSRV9FTkNPREVSU19GTEFDX0FVRElPX0VOQ09ERVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImJhc2UvbWVtb3J5L3Njb3BlZF9wdHIuaCIKKyNpbmNsdWRlICJiYXNlL3N0cmluZ19waWVjZS5oIgorI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3RocmVhZC5oIgorI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2F1ZGlvX2VuY29kZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvc3BlZWNoL2F1ZGlvX2VuY29kZXJfZmxhYy5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSBtZWRpYV9jYXB0dXJlIHsKK25hbWVzcGFjZSBlbmNvZGVycyB7CisKK2NsYXNzIEZsYWNBdWRpb0VuY29kZXIgOiBwdWJsaWMgQXVkaW9FbmNvZGVyIHsKKyBwdWJsaWM6CisgIHN0YXRpYyBib29sIElzRmxhY01JTUVUeXBlKGNvbnN0IGJhc2U6OlN0cmluZ1BpZWNlJiBtaW1lX3R5cGUpOworCisgIEZsYWNBdWRpb0VuY29kZXIoKTsKKyAgfkZsYWNBdWRpb0VuY29kZXIoKSBvdmVycmlkZTsKKworICAvLyBDYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoZSBvYmplY3QgaXMgY29uc3RydWN0ZWQgb24gKHVzdWFsbHkKKyAgLy8gYSBkZWRpY2F0ZWQgYXVkaW8gdGhyZWFkKS4KKyAgdm9pZCBFbmNvZGUoY29uc3QgU2hlbGxBdWRpb0J1cyYgYXVkaW9fYnVzLAorICAgICAgICAgICAgICBiYXNlOjpUaW1lVGlja3MgcmVmZXJlbmNlX3RpbWUpIG92ZXJyaWRlOworCisgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQKKyAgdm9pZCBGaW5pc2goYmFzZTo6VGltZVRpY2tzIHJlZmVyZW5jZV90aW1lKSBvdmVycmlkZTsKKworICAvLyBDYWxsZWQgZnJvbSB0aGUgbWFpbiB3ZWIgbW9kdWxlIHRocmVhZC4KKyAgc3RkOjpzdHJpbmcgR2V0TWltZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKKworICBpbnQ2NCBHZXRFc3RpbWF0ZWRPdXRwdXRCaXRzUGVyU2Vjb25kKAorICAgICAgY29uc3QgbWVkaWFfc3RyZWFtOjpBdWRpb1BhcmFtZXRlcnMmIHBhcmFtcykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgdm9pZCBPblNldEZvcm1hdChjb25zdCBtZWRpYV9zdHJlYW06OkF1ZGlvUGFyYW1ldGVycyYgcGFyYW1zKSBvdmVycmlkZTsKKworIHByaXZhdGU6CisgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9uIHRoZSBlbmNvZGVyIHRocmVhZC4KKyAgdm9pZCBDcmVhdGVFbmNvZGVyKGNvbnN0IG1lZGlhX3N0cmVhbTo6QXVkaW9QYXJhbWV0ZXJzJiBwYXJhbXMpOworICB2b2lkIERlc3Ryb3lFbmNvZGVyKCk7CisgIHZvaWQgRG9FbmNvZGUoc2NvcGVkX3B0cjxTaGVsbEF1ZGlvQnVzPiBhdWRpb19idXMsCisgICAgICAgICAgICAgICAgYmFzZTo6VGltZVRpY2tzIHJlZmVyZW5jZV90aW1lKTsKKyAgdm9pZCBEb0ZpbmlzaChiYXNlOjpUaW1lVGlja3MgcmVmZXJlbmNlX3RpbWUpOworCisgIC8vIEVuY29kZXIgdGhyZWFkCisgIGJhc2U6OlRocmVhZCB0aHJlYWRfOworICBzY29wZWRfcHRyPHNwZWVjaDo6QXVkaW9FbmNvZGVyRmxhYz4gZmxhY19lbmNvZGVyXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSBlbmNvZGVycworfSAgLy8gbmFtZXNwYWNlIG1lZGlhX2NhcHR1cmUKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQ0FQVFVSRV9FTkNPREVSU19GTEFDX0FVRElPX0VOQ09ERVJfSF8KZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9saW5lYXIxNl9hdWRpb19lbmNvZGVyLmNjIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuY2MKaW5kZXggMzBhODcwMC4uNGQ3MDQ4ZiAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuY2MKKysrIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuY2MKQEAgLTY2LDYgKzY2LDEyIEBACiAgIHJldHVybiBwYXJhbXMuR2V0Qml0c1BlclNlY29uZCgpOwogfQogCit2b2lkIExpbmVhcjE2QXVkaW9FbmNvZGVyOjpPblNldEZvcm1hdCgKKyAgICBjb25zdCBtZWRpYV9zdHJlYW06OkF1ZGlvUGFyYW1ldGVycyYgcGFyYW1zKSB7CisgIERDSEVDS19FUShwYXJhbXMuYml0c19wZXJfc2FtcGxlKCksIDE2KTsKKyAgRENIRUNLX0VRKHBhcmFtcy5jaGFubmVsX2NvdW50KCksIDEpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgZW5jb2RlcnMKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYV9jYXB0dXJlCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZW5jb2RlcnMvbGluZWFyMTZfYXVkaW9fZW5jb2Rlci5oIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuaAppbmRleCA3ZGU0MDFhLi41Y2I4MzA2IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZW5jb2RlcnMvbGluZWFyMTZfYXVkaW9fZW5jb2Rlci5oCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9saW5lYXIxNl9hdWRpb19lbmNvZGVyLmgKQEAgLTM2LDYgKzM2LDggQEAKIAogICBpbnQ2NCBHZXRFc3RpbWF0ZWRPdXRwdXRCaXRzUGVyU2Vjb25kKAogICAgICAgY29uc3QgbWVkaWFfc3RyZWFtOjpBdWRpb1BhcmFtZXRlcnMmIHBhcmFtcykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgdm9pZCBPblNldEZvcm1hdChjb25zdCBtZWRpYV9zdHJlYW06OkF1ZGlvUGFyYW1ldGVycyYgcGFyYW1zKSBvdmVycmlkZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBlbmNvZGVycwpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2dldF91c2VyX21lZGlhX3Rlc3QuY2MgYi9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZ2V0X3VzZXJfbWVkaWFfdGVzdC5jYwppbmRleCA2NWNhNzEyLi5lMGE2Yzg0IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZ2V0X3VzZXJfbWVkaWFfdGVzdC5jYworKysgYi9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvZ2V0X3VzZXJfbWVkaWFfdGVzdC5jYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3Njb3BlZF9wdHIuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdGVzdGluZy9zdHViX3dpbmRvdy5oIgorI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9zdHJlYW0vbWljcm9waG9uZV9hdWRpb19zb3VyY2UuaCIKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc3RyZWFtL3Rlc3RpbmcvbW9ja19tZWRpYV9zdHJlYW1fYXVkaW9fc291cmNlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9nbG9iYWxfZW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKIApAQCAtNTAsNiArNTIsMTEgQEAKICAgICBtZWRpYV9kZXZpY2VzXy0+U2V0RW52aXJvbm1lbnRTZXR0aW5ncyh3aW5kb3dfLmVudmlyb25tZW50X3NldHRpbmdzKCkpOwogICB9CiAKKyAgbWVkaWFfc3RyZWFtOjpNaWNyb3Bob25lQXVkaW9Tb3VyY2UqIEdldE1pY3JvcGhvbmVBdWRpb1NvdXJjZSgpIHsKKyAgICByZXR1cm4gYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8bWVkaWFfc3RyZWFtOjpNaWNyb3Bob25lQXVkaW9Tb3VyY2UqPigKKyAgICAgICAgbWVkaWFfZGV2aWNlc18tPmF1ZGlvX3NvdXJjZV8uZ2V0KCkpOworICB9CisKICAgZG9tOjp0ZXN0aW5nOjpTdHViV2luZG93IHdpbmRvd187CiAgIHNjb3BlZF9yZWZwdHI8TWVkaWFEZXZpY2VzPiBtZWRpYV9kZXZpY2VzXzsKIH07CkBAIC03MiwxMiArNzksNTMgQEAKICAgICAgICAgICAgIG1lZGlhX3N0cmVhbV9wcm9taXNlLT5TdGF0ZSgpKTsKIH0KIAotVEVTVF9GKEdldFVzZXJNZWRpYVRlc3QsIEF1ZGlvTWVkaWFTb3VyY2VzKSB7CitURVNUX0YoR2V0VXNlck1lZGlhVGVzdCwgUGVuZGluZ1Byb21pc2UpIHsKICAgbWVkaWFfc3RyZWFtOjpNZWRpYVN0cmVhbUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOwogICBjb25zdHJhaW50cy5zZXRfYXVkaW8odHJ1ZSk7CiAgIHNjcmlwdDo6SGFuZGxlPE1lZGlhRGV2aWNlczo6TWVkaWFTdHJlYW1Qcm9taXNlPiBtZWRpYV9zdHJlYW1fcHJvbWlzZSA9CiAgICAgICBtZWRpYV9kZXZpY2VzXy0+R2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKTsKICAgQVNTRVJUX0ZBTFNFKG1lZGlhX3N0cmVhbV9wcm9taXNlLklzRW1wdHkoKSk7CisgIEVYUEVDVF9FUShjb2JhbHQ6OnNjcmlwdDo6UHJvbWlzZVN0YXRlOjprUGVuZGluZywKKyAgICAgICAgICAgIG1lZGlhX3N0cmVhbV9wcm9taXNlLT5TdGF0ZSgpKTsKK30KKworVEVTVF9GKEdldFVzZXJNZWRpYVRlc3QsIE1pY3JvcGhvbmVTdG9wcGVkUmVqZWN0ZWRQcm9taXNlKSB7CisgIG1lZGlhX3N0cmVhbTo6TWVkaWFTdHJlYW1Db25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgY29uc3RyYWludHMuc2V0X2F1ZGlvKHRydWUpOworICBzY3JpcHQ6OkhhbmRsZTxNZWRpYURldmljZXM6Ok1lZGlhU3RyZWFtUHJvbWlzZT4gbWVkaWFfc3RyZWFtX3Byb21pc2UgPQorICAgICAgbWVkaWFfZGV2aWNlc18tPkdldFVzZXJNZWRpYShjb25zdHJhaW50cyk7CisgIEFTU0VSVF9GQUxTRShtZWRpYV9zdHJlYW1fcHJvbWlzZS5Jc0VtcHR5KCkpOworICBFWFBFQ1RfRVEoY29iYWx0OjpzY3JpcHQ6OlByb21pc2VTdGF0ZTo6a1BlbmRpbmcsCisgICAgICAgICAgICBtZWRpYV9zdHJlYW1fcHJvbWlzZS0+U3RhdGUoKSk7CisgIG1lZGlhX2RldmljZXNfLT5hdWRpb19zb3VyY2VfLT5TdG9wU291cmNlKCk7CisgIEVYUEVDVF9FUShjb2JhbHQ6OnNjcmlwdDo6UHJvbWlzZVN0YXRlOjprUmVqZWN0ZWQsCisgICAgICAgICAgICBtZWRpYV9zdHJlYW1fcHJvbWlzZS0+U3RhdGUoKSk7Cit9CisKK1RFU1RfRihHZXRVc2VyTWVkaWFUZXN0LCBNaWNyb3Bob25lRXJyb3JSZWplY3RlZFByb21pc2UpIHsKKyAgbWVkaWFfc3RyZWFtOjpNZWRpYVN0cmVhbUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICBjb25zdHJhaW50cy5zZXRfYXVkaW8odHJ1ZSk7CisgIHNjcmlwdDo6SGFuZGxlPE1lZGlhRGV2aWNlczo6TWVkaWFTdHJlYW1Qcm9taXNlPiBtZWRpYV9zdHJlYW1fcHJvbWlzZSA9CisgICAgICBtZWRpYV9kZXZpY2VzXy0+R2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKTsKKyAgQVNTRVJUX0ZBTFNFKG1lZGlhX3N0cmVhbV9wcm9taXNlLklzRW1wdHkoKSk7CisgIEVYUEVDVF9FUShjb2JhbHQ6OnNjcmlwdDo6UHJvbWlzZVN0YXRlOjprUGVuZGluZywKKyAgICAgICAgICAgIG1lZGlhX3N0cmVhbV9wcm9taXNlLT5TdGF0ZSgpKTsKKyAgbWVkaWFfZGV2aWNlc18tPk9uTWljcm9waG9uZUVycm9yKAorICAgICAgc3BlZWNoOjpNaWNyb3Bob25lTWFuYWdlcjo6TWljcm9waG9uZUVycm9yOjprQWJvcnRlZCwgIkFib3J0ZWQiKTsKKyAgRVhQRUNUX0VRKGNvYmFsdDo6c2NyaXB0OjpQcm9taXNlU3RhdGU6OmtSZWplY3RlZCwKKyAgICAgICAgICAgIG1lZGlhX3N0cmVhbV9wcm9taXNlLT5TdGF0ZSgpKTsKK30KKworVEVTVF9GKEdldFVzZXJNZWRpYVRlc3QsIE1pY3JvcGhvbmVTdWNjZXNzRnVsZmlsbGVkUHJvbWlzZSkgeworICBtZWRpYV9zdHJlYW06Ok1lZGlhU3RyZWFtQ29uc3RyYWludHMgY29uc3RyYWludHM7CisgIGNvbnN0cmFpbnRzLnNldF9hdWRpbyh0cnVlKTsKKyAgc2NyaXB0OjpIYW5kbGU8TWVkaWFEZXZpY2VzOjpNZWRpYVN0cmVhbVByb21pc2U+IG1lZGlhX3N0cmVhbV9wcm9taXNlID0KKyAgICAgIG1lZGlhX2RldmljZXNfLT5HZXRVc2VyTWVkaWEoY29uc3RyYWludHMpOworICBBU1NFUlRfRkFMU0UobWVkaWFfc3RyZWFtX3Byb21pc2UuSXNFbXB0eSgpKTsKKyAgRVhQRUNUX0VRKGNvYmFsdDo6c2NyaXB0OjpQcm9taXNlU3RhdGU6OmtQZW5kaW5nLAorICAgICAgICAgICAgbWVkaWFfc3RyZWFtX3Byb21pc2UtPlN0YXRlKCkpOworICBtZWRpYV9kZXZpY2VzXy0+T25NaWNyb3Bob25lU3VjY2VzcygpOworICBtZWRpYV9kZXZpY2VzXy0+YXVkaW9fc291cmNlXy0+U3RvcFNvdXJjZSgpOwogICBFWFBFQ1RfRVEoY29iYWx0OjpzY3JpcHQ6OlByb21pc2VTdGF0ZTo6a0Z1bGZpbGxlZCwKICAgICAgICAgICAgIG1lZGlhX3N0cmVhbV9wcm9taXNlLT5TdGF0ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9jYXB0dXJlLmd5cCBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9jYXB0dXJlLmd5cAppbmRleCA1YjFlNzhmLi45OWI5Njg3IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfY2FwdHVyZS5neXAKKysrIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2NhcHR1cmUuZ3lwCkBAIC0yMyw2ICsyMyw4IEBACiAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgJ2VuY29kZXJzL2F1ZGlvX2VuY29kZXIuY2MnLAogICAgICAgICAnZW5jb2RlcnMvYXVkaW9fZW5jb2Rlci5oJywKKyAgICAgICAgJ2VuY29kZXJzL2ZsYWNfYXVkaW9fZW5jb2Rlci5jYycsCisgICAgICAgICdlbmNvZGVycy9mbGFjX2F1ZGlvX2VuY29kZXIuaCcsCiAgICAgICAgICdlbmNvZGVycy9saW5lYXIxNl9hdWRpb19lbmNvZGVyLmNjJywKICAgICAgICAgJ2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuaCcsCiAgICAgICAgICdtZWRpYV9kZXZpY2VzLmNjJywKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2VzLmNjIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2RldmljZXMuY2MKaW5kZXggMGY5YTRiYi4uYzc2MmYxOSAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2RldmljZXMuY2MKKysrIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2RldmljZXMuY2MKQEAgLTE2LDkgKzE2LDEyIEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKKyNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2RldmljZV9pbmZvLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW0uaCIKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3RyYWNrX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L21lZGlhX3N0cmVhbS9taWNyb3Bob25lX2F1ZGlvX3NvdXJjZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zcGVlY2gvbWljcm9waG9uZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zcGVlY2gvbWljcm9waG9uZV9mYWtlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NwZWVjaC9taWNyb3Bob25lX3N0YXJib2FyZC5oIgpAQCAtNjEsOCArNjQsMTAgQEAKIH0gIC8vIG5hbWVzcGFjZS4KIAogTWVkaWFEZXZpY2VzOjpNZWRpYURldmljZXMoc2NyaXB0OjpTY3JpcHRWYWx1ZUZhY3RvcnkqIHNjcmlwdF92YWx1ZV9mYWN0b3J5KQotICAgIDogc2NyaXB0X3ZhbHVlX2ZhY3RvcnlfKHNjcmlwdF92YWx1ZV9mYWN0b3J5KSB7Ci19CisgICAgOiBzY3JpcHRfdmFsdWVfZmFjdG9yeV8oc2NyaXB0X3ZhbHVlX2ZhY3RvcnkpLAorICAgICAgamF2YXNjcmlwdF9tZXNzYWdlX2xvb3BfKGJhc2U6Ok1lc3NhZ2VMb29wUHJveHk6OmN1cnJlbnQoKSksCisgICAgICBBTExPV19USElTX0lOX0lOSVRJQUxJWkVSX0xJU1Qod2Vha19wdHJfZmFjdG9yeV8odGhpcykpLAorICAgICAgd2Vha190aGlzXyh3ZWFrX3B0cl9mYWN0b3J5Xy5HZXRXZWFrUHRyKCkpIHt9CiAKIHNjcmlwdDo6SGFuZGxlPE1lZGlhRGV2aWNlczo6TWVkaWFJbmZvU2VxdWVuY2VQcm9taXNlPgogTWVkaWFEZXZpY2VzOjpFbnVtZXJhdGVEZXZpY2VzKCkgewpAQCAtMTE4LDUxICsxMjMsOTQgQEAKICAgLy8gU3RlcCA4IGlzIHRvIGNyZWF0ZSBhIHByb21pc2UgKHdoaWNoIGlzIGFscmVhZHkgZG9uZSkuCiAKICAgLy8gU3RlcCA5OiBDb25zdHJ1Y3QgYSBsaXN0IG9mIE1lZGlhU3RyZWFtVHJhY2tzIHRoYXQgd2UgaGF2ZSBwZXJtaXNzaW9uLgotICBDcmVhdGVNaWNyb3Bob25lSWZOZWVkZWQoKTsKLSAgaWYgKCFtaWNyb3Bob25lXykgewotICAgIHByb21pc2UtPlJlamVjdChuZXcgZG9tOjpET01FeGNlcHRpb24oZG9tOjpET01FeGNlcHRpb246OmtOb3RGb3VuZEVycikpOwotICAgIHJldHVybiBwcm9taXNlOworCisgIC8vIEFjY2VzcyBNaWNyb3Bob25lIERldmljZQorICAvLyBDcmVhdGUgQXVkaW8gU291cmNlIChhdHRhY2ggYSBkZXZpY2UgdG8gaXQpLCBzb3VyY2Ugd2lsbCBwZXJpb2RpY2FsbHkgcmVhZAorICAvLyBmcm9tIHRoZSBkZXZpY2UsIGFuZCBwdXNoIG91dCBkYXRhIHRvIEFMTCBvZiB0aGUgdHJhY2tzCisgIGlmICghYXVkaW9fc291cmNlXykgeworICAgIGF1ZGlvX3NvdXJjZV8gPSBuZXcgbWVkaWFfc3RyZWFtOjpNaWNyb3Bob25lQXVkaW9Tb3VyY2UoCisgICAgICAgIHNldHRpbmdzXy0+bWljcm9waG9uZV9vcHRpb25zKCksCisgICAgICAgIGJhc2U6OkJpbmQoJk1lZGlhRGV2aWNlczo6T25NaWNyb3Bob25lU3VjY2Vzcywgd2Vha190aGlzXyksCisgICAgICAgIGJhc2U6OkNsb3N1cmUoKSwgIC8vIFRPRE86IHJlbW92ZSB0aGlzIHJlZHVuZGFudCBjYWxsYmFjay4KKyAgICAgICAgYmFzZTo6QmluZCgmTWVkaWFEZXZpY2VzOjpPbk1pY3JvcGhvbmVFcnJvciwgd2Vha190aGlzXykpOwogICB9Ci0gIGJvb2wgb3Blbl9zdWNjZXNzID0gbWljcm9waG9uZV8tPk9wZW4oKTsKLSAgaWYgKCFvcGVuX3N1Y2Nlc3MpIHsKLSAgICAvLyBUaGlzIHR5cGljYWxseSBoYXBwZW5zIGlmIHRoZSB1c2VyIGRpZCBub3QgZ2l2ZSBwZXJtaXNzaW9uLgotICAgIC8vIFN0ZXAgOS44LCBoYW5kbGUgIlBlcm1pc3Npb24gRmFpbHVyZSIKLSAgICBETE9HKElORk8pIDw8ICJVbmFibGUgdG8gb3BlbiB0aGUgbWljcm9waG9uZS4iOwotICAgIHByb21pc2UtPlJlamVjdChuZXcgZG9tOjpET01FeGNlcHRpb24oZG9tOjpET01FeGNlcHRpb246OmtOb3RBbGxvd2VkRXJyKSk7CisKKyAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhU3RyZWFtUHJvbWlzZVZhbHVlOjpSZWZlcmVuY2U+IHByb21pc2VfcmVmZXJlbmNlKAorICAgICAgbmV3IE1lZGlhU3RyZWFtUHJvbWlzZVZhbHVlOjpSZWZlcmVuY2UodGhpcywgcHJvbWlzZSkpOworICBwZW5kaW5nX21pY3JvcGhvbmVfcHJvbWlzZXNfLnB1c2hfYmFjayhzdGQ6Om1vdmUocHJvbWlzZV9yZWZlcmVuY2UpKTsKKworICBpZiAoIXBlbmRpbmdfbWljcm9waG9uZV90cmFja18pIHsKKyAgICBwZW5kaW5nX21pY3JvcGhvbmVfdHJhY2tfID0gbmV3IG1lZGlhX3N0cmVhbTo6TWVkaWFTdHJlYW1BdWRpb1RyYWNrKCk7CisgICAgLy8gU3RhcnRzIHRoZSBzb3VyY2UsIGlmIG5lZWRlZC4gIEFsc28gY2FsbHMgc3RhcnQgb24gdGhlIGF1ZGlvIHRyYWNrLgorICAgIGF1ZGlvX3NvdXJjZV8tPkNvbm5lY3RUb1RyYWNrKAorICAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxtZWRpYV9zdHJlYW06Ok1lZGlhU3RyZWFtQXVkaW9UcmFjayo+KAorICAgICAgICAgICAgcGVuZGluZ19taWNyb3Bob25lX3RyYWNrXy5nZXQoKSkpOworICAgIGF1ZGlvX3NvdXJjZV8tPlNldFN0b3BDYWxsYmFjaygKKyAgICAgICAgYmFzZTo6QmluZCgmTWVkaWFEZXZpY2VzOjpPbk1pY3JvcGhvbmVTdG9wcGVkLCB3ZWFrX3RoaXNfKSk7CiAgIH0KLSAgdXNpbmcgbWVkaWFfc3RyZWFtOjpNZWRpYVN0cmVhbTsKLSAgc2NvcGVkX3JlZnB0cjxtZWRpYV9zdHJlYW06Ok1lZGlhU3RyZWFtVHJhY2s+IG1pY3JvcGhvbmVfdHJhY2s7Ci0gIC8vIFRPRE86IEF0dGFjaCBhIG1pY3JvcGhvbmUgZGV2aWNlIHRvIHRoZSBtaWNyb3Bob25lIHRyYWNrLgotICBNZWRpYVN0cmVhbTo6VHJhY2tTZXF1ZW5jZXMgYXVkaW9fdHJhY2tzOwotICBhdWRpb190cmFja3MucHVzaF9iYWNrKG1pY3JvcGhvbmVfdHJhY2spOwotICBhdXRvIG1lZGlhX3N0cmVhbShtYWtlX3Njb3BlZF9yZWZwdHIobmV3IE1lZGlhU3RyZWFtKGF1ZGlvX3RyYWNrcykpKTsKLSAgcHJvbWlzZS0+UmVzb2x2ZShtZWRpYV9zdHJlYW0pOwogCiAgIC8vIFN0ZXAgMTAsIHJldHVybiBwcm9taXNlLgogICByZXR1cm4gcHJvbWlzZTsKIH0KIAotdm9pZCBNZWRpYURldmljZXM6OkNyZWF0ZU1pY3JvcGhvbmVJZk5lZWRlZCgpIHsKLSAgRENIRUNLKHNldHRpbmdzXyk7Ci0gIGlmIChtaWNyb3Bob25lXykgewordm9pZCBNZWRpYURldmljZXM6Ok9uTWljcm9waG9uZUVycm9yKAorICAgIHNwZWVjaDo6TWljcm9waG9uZU1hbmFnZXI6Ok1pY3JvcGhvbmVFcnJvciBlcnJvciwgc3RkOjpzdHJpbmcgbWVzc2FnZSkgeworICBpZiAoamF2YXNjcmlwdF9tZXNzYWdlX2xvb3BfICE9IGJhc2U6Ok1lc3NhZ2VMb29wUHJveHk6OmN1cnJlbnQoKSkgeworICAgIGphdmFzY3JpcHRfbWVzc2FnZV9sb29wXy0+UG9zdFRhc2soCisgICAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmTWVkaWFEZXZpY2VzOjpPbk1pY3JvcGhvbmVFcnJvciwgd2Vha190aGlzXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBtZXNzYWdlKSk7CiAgICAgcmV0dXJuOwogICB9CisgIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKIAotICBzY29wZWRfcHRyPHNwZWVjaDo6TWljcm9waG9uZT4gbWljcm9waG9uZSA9Ci0gICAgICBDcmVhdGVNaWNyb3Bob25lKHNldHRpbmdzXy0+bWljcm9waG9uZV9vcHRpb25zKCkpOworICBETE9HKElORk8pIDw8ICJNZWRpYURldmljZXM6Ok9uTWljcm9waG9uZUVycm9yICIgPDwgbWVzc2FnZTsKKyAgcGVuZGluZ19taWNyb3Bob25lX3RyYWNrXyA9IG51bGxwdHI7CisgIGF1ZGlvX3NvdXJjZV8gPSBudWxscHRyOwogCi0gIGlmICghbWljcm9waG9uZSkgewotICAgIERMT0coSU5GTykgPDwgIlVuYWJsZSB0byBjcmVhdGUgYSBtaWNyb3Bob25lLiI7CisgIGZvciAoYXV0byYgcHJvbWlzZSA6IHBlbmRpbmdfbWljcm9waG9uZV9wcm9taXNlc18pIHsKKyAgICBwcm9taXNlLT52YWx1ZSgpLlJlamVjdCgKKyAgICAgICAgbmV3IGRvbTo6RE9NRXhjZXB0aW9uKGRvbTo6RE9NRXhjZXB0aW9uOjprTm90QWxsb3dlZEVycikpOworICB9CisgIHBlbmRpbmdfbWljcm9waG9uZV9wcm9taXNlc18uY2xlYXIoKTsKK30KKwordm9pZCBNZWRpYURldmljZXM6Ok9uTWljcm9waG9uZVN0b3BwZWQoKSB7CisgIGlmIChqYXZhc2NyaXB0X21lc3NhZ2VfbG9vcF8gIT0gYmFzZTo6TWVzc2FnZUxvb3BQcm94eTo6Y3VycmVudCgpKSB7CisgICAgamF2YXNjcmlwdF9tZXNzYWdlX2xvb3BfLT5Qb3N0VGFzaygKKyAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZNZWRpYURldmljZXM6Ok9uTWljcm9waG9uZVN0b3BwZWQsIHdlYWtfdGhpc18pKTsKICAgICByZXR1cm47CiAgIH0KKyAgRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwogCi0gIGlmICghbWljcm9waG9uZS0+SXNWYWxpZCgpKSB7Ci0gICAgRExPRyhJTkZPKSA8PCAiSWdub3JpbmcgY3JlYXRlZCBtaWNyb3Bob25lIGJlY2F1c2UgaXQgaXMgaW52YWxpZC4iOworICBhdWRpb19zb3VyY2VfID0gbnVsbHB0cjsKKyAgcGVuZGluZ19taWNyb3Bob25lX3RyYWNrXyA9IG51bGxwdHI7CisKKyAgZm9yIChhdXRvJiBwcm9taXNlIDogcGVuZGluZ19taWNyb3Bob25lX3Byb21pc2VzXykgeworICAgIHByb21pc2UtPnZhbHVlKCkuUmVqZWN0KAorICAgICAgICBuZXcgZG9tOjpET01FeGNlcHRpb24oZG9tOjpET01FeGNlcHRpb246OmtOb3RBbGxvd2VkRXJyKSk7CisgIH0KKyAgcGVuZGluZ19taWNyb3Bob25lX3Byb21pc2VzXy5jbGVhcigpOworfQorCit2b2lkIE1lZGlhRGV2aWNlczo6T25NaWNyb3Bob25lU3VjY2VzcygpIHsKKyAgaWYgKGphdmFzY3JpcHRfbWVzc2FnZV9sb29wXyAhPSBiYXNlOjpNZXNzYWdlTG9vcFByb3h5OjpjdXJyZW50KCkpIHsKKyAgICBqYXZhc2NyaXB0X21lc3NhZ2VfbG9vcF8tPlBvc3RUYXNrKAorICAgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJk1lZGlhRGV2aWNlczo6T25NaWNyb3Bob25lU3VjY2VzcywgdGhpcykpOwogICAgIHJldHVybjsKICAgfQorICBEQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CiAKLSAgRExPRyhJTkZPKSA8PCAiQ3JlYXRlZCBtaWNyb3Bob25lOiAiIDw8IG1pY3JvcGhvbmUtPkxhYmVsKCk7Ci0gIG1pY3JvcGhvbmVfID0gbWljcm9waG9uZS5QYXNzKCk7CisgIHVzaW5nIG1lZGlhX3N0cmVhbTo6TWVkaWFTdHJlYW07CisgIE1lZGlhU3RyZWFtOjpUcmFja1NlcXVlbmNlcyBhdWRpb190cmFja3M7CisgIHBlbmRpbmdfbWljcm9waG9uZV90cmFja18tPlNldE1lZGlhVHJhY2tTZXR0aW5ncygKKyAgICAgIGF1ZGlvX3NvdXJjZV8tPkdldE1lZGlhVHJhY2tTZXR0aW5ncygpKTsKKyAgYXVkaW9fdHJhY2tzLnB1c2hfYmFjayhwZW5kaW5nX21pY3JvcGhvbmVfdHJhY2tfKTsKKyAgcGVuZGluZ19taWNyb3Bob25lX3RyYWNrXyA9IG51bGxwdHI7CisKKyAgZm9yIChhdXRvJiBwcm9taXNlIDogcGVuZGluZ19taWNyb3Bob25lX3Byb21pc2VzXykgeworICAgIHByb21pc2UtPnZhbHVlKCkuUmVzb2x2ZShtYWtlX3Njb3BlZF9yZWZwdHIobmV3IE1lZGlhU3RyZWFtKGF1ZGlvX3RyYWNrcykpKTsKKyAgfQorICBwZW5kaW5nX21pY3JvcGhvbmVfcHJvbWlzZXNfLmNsZWFyKCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYV9jYXB0dXJlCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfZGV2aWNlcy5oIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2RldmljZXMuaAppbmRleCBiZGQ5YjM0Li43NmZjNDNkIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfZGV2aWNlcy5oCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2VzLmgKQEAgLTE1LDEyICsxNSwxOSBAQAogI2lmbmRlZiBDT0JBTFRfTUVESUFfQ0FQVFVSRV9NRURJQV9ERVZJQ0VTX0hfCiAjZGVmaW5lIENPQkFMVF9NRURJQV9DQVBUVVJFX01FRElBX0RFVklDRVNfSF8KIAorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKICNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3Njb3BlZF9wdHIuaCIKKyNpbmNsdWRlICJiYXNlL21lbW9yeS93ZWFrX3B0ci5oIgorI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wX3Byb3h5LmgiCisjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX2NoZWNrZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudF90YXJnZXQuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2VfaW5mby5oIgorI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3NvdXJjZS5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2NvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvcHJvbWlzZS5oIgpAQCAtMjksNiArMzYsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zcGVlY2gvbWljcm9waG9uZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zcGVlY2gvbWljcm9waG9uZV9tYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhX2NhcHR1cmUgewpAQCAtNDIsNiArNTAsNyBAQAogICB1c2luZyBNZWRpYUluZm9TZXF1ZW5jZVByb21pc2UgPSBzY3JpcHQ6OlByb21pc2U8TWVkaWFJbmZvU2VxdWVuY2U+OwogICB1c2luZyBNZWRpYVN0cmVhbVByb21pc2UgPQogICAgICAgc2NyaXB0OjpQcm9taXNlPHNjcmlwdDo6U2NyaXB0VmFsdWVGYWN0b3J5OjpXcmFwcGFibGVQcm9taXNlPjsKKyAgdXNpbmcgTWVkaWFTdHJlYW1Qcm9taXNlVmFsdWUgPSBzY3JpcHQ6OlNjcmlwdFZhbHVlPE1lZGlhU3RyZWFtUHJvbWlzZT47CiAKICAgZXhwbGljaXQgTWVkaWFEZXZpY2VzKHNjcmlwdDo6U2NyaXB0VmFsdWVGYWN0b3J5KiBzY3JpcHRfdmFsdWVfZmFjdG9yeSk7CiAKQEAgLTU3LDEyICs2NiwzNiBAQAogICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoTWVkaWFEZXZpY2VzKTsKIAogIHByaXZhdGU6Ci0gIHZvaWQgQ3JlYXRlTWljcm9waG9uZUlmTmVlZGVkKCk7CisgIGZyaWVuZCBjbGFzcyBHZXRVc2VyTWVkaWFUZXN0OworICBGUklFTkRfVEVTVF9BTExfUFJFRklYRVMoR2V0VXNlck1lZGlhVGVzdCwgUGVuZGluZ1Byb21pc2UpOworICBGUklFTkRfVEVTVF9BTExfUFJFRklYRVMoR2V0VXNlck1lZGlhVGVzdCwgTWljcm9waG9uZVN0b3BwZWRSZWplY3RlZFByb21pc2UpOworICBGUklFTkRfVEVTVF9BTExfUFJFRklYRVMoR2V0VXNlck1lZGlhVGVzdCwgTWljcm9waG9uZUVycm9yUmVqZWN0ZWRQcm9taXNlKTsKKyAgRlJJRU5EX1RFU1RfQUxMX1BSRUZJWEVTKEdldFVzZXJNZWRpYVRlc3QsIE1pY3JvcGhvbmVTdWNjZXNzRnVsZmlsbGVkUHJvbWlzZSk7CisKKyAgfk1lZGlhRGV2aWNlcygpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICAvLyBTdG9wIGNhbGxiYWNrIHVzZWQgd2l0aCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlLgorICB2b2lkIE9uTWljcm9waG9uZVN0b3BwZWQoKTsKKworICAvLyBDYWxsYmFja3MgdXNlZCB3aXRoIE1pY3JvcGhvbmVNYW5hZ2VyLgorICB2b2lkIE9uTWljcm9waG9uZUVycm9yKHNwZWVjaDo6TWljcm9waG9uZU1hbmFnZXI6Ok1pY3JvcGhvbmVFcnJvciBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlKTsKKyAgdm9pZCBPbk1pY3JvcGhvbmVTdWNjZXNzKCk7CiAKICAgc2NyaXB0OjpTY3JpcHRWYWx1ZUZhY3RvcnkqIHNjcmlwdF92YWx1ZV9mYWN0b3J5XzsKICAgZG9tOjpET01TZXR0aW5ncyogc2V0dGluZ3NfID0gbnVsbHB0cjsKIAotICBzY29wZWRfcHRyPHNwZWVjaDo6TWljcm9waG9uZT4gbWljcm9waG9uZV87CisgIHNjb3BlZF9yZWZwdHI8bWVkaWFfc3RyZWFtOjpNZWRpYVN0cmVhbUF1ZGlvU291cmNlPiBhdWRpb19zb3VyY2VfOworCisgIHNjb3BlZF9yZWZwdHI8bWVkaWFfc3RyZWFtOjpNZWRpYVN0cmVhbVRyYWNrPiBwZW5kaW5nX21pY3JvcGhvbmVfdHJhY2tfOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFTdHJlYW1Qcm9taXNlVmFsdWU6OlJlZmVyZW5jZT4+CisgICAgICBwZW5kaW5nX21pY3JvcGhvbmVfcHJvbWlzZXNfOworCisgIHNjb3BlZF9yZWZwdHI8YmFzZTo6TWVzc2FnZUxvb3BQcm94eT4gamF2YXNjcmlwdF9tZXNzYWdlX2xvb3BfOworICBiYXNlOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyXzsKKworICBiYXNlOjpXZWFrUHRyRmFjdG9yeTxNZWRpYURldmljZXM+IHdlYWtfcHRyX2ZhY3RvcnlfOworICBiYXNlOjpXZWFrUHRyPE1lZGlhRGV2aWNlcz4gd2Vha190aGlzXzsKIAogICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWVkaWFEZXZpY2VzKTsKIH07CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfcmVjb3JkZXIuY2MgYi9zcmMvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfcmVjb3JkZXIuY2MKaW5kZXggOWI5ODI2MS4uYWY4M2Q4OSAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX3JlY29yZGVyLmNjCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9yZWNvcmRlci5jYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhX2NhcHR1cmUvYmxvYl9ldmVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2ZsYWNfYXVkaW9fZW5jb2Rlci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9jYXB0dXJlL2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc3RyZWFtL2F1ZGlvX3BhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV9hdWRpb190cmFjay5oIgpAQCAtNDQsNiArNDUsNyBAQAogY29uc3QgaW50MzIga1NjaGVkdWxpbmdMYXRlbmN5QnVmZmVyTWlsbGlzZWNvbmRzID0gMjA7CiAKIHVzaW5nIGNvYmFsdDo6bWVkaWFfY2FwdHVyZTo6ZW5jb2RlcnM6OkF1ZGlvRW5jb2RlcjsKK3VzaW5nIGNvYmFsdDo6bWVkaWFfY2FwdHVyZTo6ZW5jb2RlcnM6OkZsYWNBdWRpb0VuY29kZXI7CiB1c2luZyBjb2JhbHQ6Om1lZGlhX2NhcHR1cmU6OmVuY29kZXJzOjpMaW5lYXIxNkF1ZGlvRW5jb2RlcjsKIAogLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBzdG9yZSB8dGltZV9zcGFufCBkdXJhdGlvbgpAQCAtNjUsNiArNjcsOSBAQAogICBpZiAoTGluZWFyMTZBdWRpb0VuY29kZXI6OklzTGluZWFyMTZNSU1FVHlwZShyZXF1ZXN0ZWRfbWltZV90eXBlKSkgewogICAgIHJldHVybiBzY29wZWRfcHRyPEF1ZGlvRW5jb2Rlcj4obmV3IExpbmVhcjE2QXVkaW9FbmNvZGVyKCkpOwogICB9CisgIGlmIChGbGFjQXVkaW9FbmNvZGVyOjpJc0ZsYWNNSU1FVHlwZShyZXF1ZXN0ZWRfbWltZV90eXBlKSkgeworICAgIHJldHVybiBzY29wZWRfcHRyPEF1ZGlvRW5jb2Rlcj4obmV3IEZsYWNBdWRpb0VuY29kZXIoKSk7CisgIH0KICAgcmV0dXJuIHNjb3BlZF9wdHI8QXVkaW9FbmNvZGVyPihudWxscHRyKTsKIH0KIApAQCAtMTU5LDYgKzE2NCw3IEBACiAgIC8vIFRoZSBzb3VyY2UgaXMgYWx3YXlzIGludDE2IGRhdGEgZnJvbSB0aGUgbWljcm9waG9uZS4KICAgRENIRUNLX0VRKGF1ZGlvX2J1cy5zYW1wbGVfdHlwZSgpLCBTaGVsbEF1ZGlvQnVzOjprSW50MTYpOwogICBEQ0hFQ0tfRVEoYXVkaW9fYnVzLmNoYW5uZWxzKCksIDEpOworICBEQ0hFQ0soYXVkaW9fZW5jb2Rlcl8pOwogICBhdWRpb19lbmNvZGVyXy0+RW5jb2RlKGF1ZGlvX2J1cywgcmVmZXJlbmNlX3RpbWUpOwogfQogCkBAIC0xNzIsNiArMTc4LDEzIEBACiB9CiAKIHZvaWQgTWVkaWFSZWNvcmRlcjo6T25TZXRGb3JtYXQoY29uc3QgbWVkaWFfc3RyZWFtOjpBdWRpb1BhcmFtZXRlcnMmIHBhcmFtcykgeworICBpZiAoIWF1ZGlvX2VuY29kZXJfKSB7CisgICAgYXVkaW9fZW5jb2Rlcl8gPSBDcmVhdGVBdWRpb0VuY29kZXIobWltZV90eXBlXyk7CisgICAgYXVkaW9fZW5jb2Rlcl8tPkFkZExpc3RlbmVyKHRoaXMpOworICB9CisgIERDSEVDSyhhdWRpb19lbmNvZGVyXyk7CisgIGF1ZGlvX2VuY29kZXJfLT5PblNldEZvcm1hdChwYXJhbXMpOworCiAgIGludDY0IGJpdHNfcGVyX3NlY29uZCA9CiAgICAgICBhdWRpb19lbmNvZGVyXy0+R2V0RXN0aW1hdGVkT3V0cHV0Qml0c1BlclNlY29uZChwYXJhbXMpOwogICBpZiAoYml0c19wZXJfc2Vjb25kIDw9IDApIHsKQEAgLTE5NCw2ICsyMDcsOCBAQAogICAvLyBTdGVwIDUuNSBmcm9tIHN0YXJ0KCksIGRlZmluZWQgYXQ6CiAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYXN0cmVhbS1yZWNvcmRpbmcvI21lZGlhcmVjb3JkZXItbWV0aG9kcwogICBpZiAobmV3X3N0YXRlID09IG1lZGlhX3N0cmVhbTo6TWVkaWFTdHJlYW1UcmFjazo6a1JlYWR5U3RhdGVFbmRlZCkgeworICAgIGF1ZGlvX2VuY29kZXJfLT5GaW5pc2goYmFzZTo6VGltZVRpY2tzOjpOb3coKSk7CisgICAgYXVkaW9fZW5jb2Rlcl8ucmVzZXQoKTsKICAgICBTdG9wUmVjb3JkaW5nKCk7CiAgICAgc3RyZWFtXyA9IG51bGxwdHI7CiAgIH0KQEAgLTIyNSwxMSArMjQwLDcgQEAKICAgc3RkOjpzdHJpbmcgZGVzaXJlZF9taW1lX3R5cGUgPQogICAgICAgb3B0aW9ucy5oYXNfbWltZV90eXBlKCkgPyBvcHRpb25zLm1pbWVfdHlwZSgpIDoga0xpbmVhcjE2TWltZVR5cGU7CiAKLSAgYXVkaW9fZW5jb2Rlcl8gPSBDcmVhdGVBdWRpb0VuY29kZXIoZGVzaXJlZF9taW1lX3R5cGUpOwotICBEQ0hFQ0soYXVkaW9fZW5jb2Rlcl8pOwotICBhdWRpb19lbmNvZGVyXy0+QWRkTGlzdGVuZXIodGhpcyk7Ci0KLSAgbWltZV90eXBlXyA9IGF1ZGlvX2VuY29kZXJfLT5HZXRNaW1lVHlwZSgpOworICBtaW1lX3R5cGVfID0gZGVzaXJlZF9taW1lX3R5cGU7CiAgIERDSEVDSyhJc1R5cGVTdXBwb3J0ZWQobWltZV90eXBlXykpOwogICBibG9iX29wdGlvbnNfLnNldF90eXBlKG1pbWVfdHlwZV8pOwogfQpAQCAtMjUxLDcgKzI2Miw2IEBACiB2b2lkIE1lZGlhUmVjb3JkZXI6OlN0b3BSZWNvcmRpbmcoKSB7CiAgIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKICAgRENIRUNLKHN0cmVhbV8pOwotICBEQ0hFQ0soYXVkaW9fZW5jb2Rlcl8pOwogICBEQ0hFQ0tfTkUocmVjb3JkaW5nX3N0YXRlXywga1JlY29yZGluZ1N0YXRlSW5hY3RpdmUpOwogCiAgIHJlY29yZGluZ19zdGF0ZV8gPSBrUmVjb3JkaW5nU3RhdGVJbmFjdGl2ZTsKQEAgLTI1OSw3ICsyNjksNiBAQAogCiAgIHNjb3BlZF9wdHI8c3RkOjp2ZWN0b3I8dWludDg+PiBlbXB0eTsKICAgYmFzZTo6VGltZVRpY2tzIG5vdyA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7Ci0gIGF1ZGlvX2VuY29kZXJfLT5GaW5pc2gobm93KTsKICAgV3JpdGVEYXRhKGVtcHR5LlBhc3MoKSwgdHJ1ZSwgbm93KTsKIAogICB0aW1lc2xpY2VfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygwKTsKQEAgLTMzOCw3ICszNDcsOCBAQAogfQogCiBib29sIE1lZGlhUmVjb3JkZXI6OklzVHlwZVN1cHBvcnRlZChjb25zdCBiYXNlOjpTdHJpbmdQaWVjZSBtaW1lX3R5cGUpIHsKLSAgcmV0dXJuIExpbmVhcjE2QXVkaW9FbmNvZGVyOjpJc0xpbmVhcjE2TUlNRVR5cGUobWltZV90eXBlKTsKKyAgcmV0dXJuIExpbmVhcjE2QXVkaW9FbmNvZGVyOjpJc0xpbmVhcjE2TUlNRVR5cGUobWltZV90eXBlKSB8fAorICAgICAgICAgRmxhY0F1ZGlvRW5jb2Rlcjo6SXNGbGFjTUlNRVR5cGUobWltZV90eXBlKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIG1lZGlhX2NhcHR1cmUKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9yZWNvcmRlci5oIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX3JlY29yZGVyLmgKaW5kZXggZjQ0OTU0ZC4uODdiMjk0YSAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX3JlY29yZGVyLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX3JlY29yZGVyLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogCiAgIGJhc2U6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwogCisgIC8vIHxhdWRpb19lbmNvZGVyX3wgbGl2ZXMgb24gdGhlIG1pY3JvcGhvbmUgdGhyZWFkLgogICBzY29wZWRfcHRyPGVuY29kZXJzOjpBdWRpb0VuY29kZXI+IGF1ZGlvX2VuY29kZXJfOwogICBzdGQ6OnZlY3Rvcjx1aW50OD4gYnVmZmVyXzsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3NvdXJjZS5jYyBiL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV9hdWRpb19zb3VyY2UuY2MKaW5kZXggYzNhZjMwYy4uZjUzNTdjMCAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3NvdXJjZS5jYworKysgYi9zcmMvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fYXVkaW9fc291cmNlLmNjCkBAIC01MSw2ICs1MSwxNCBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorTWVkaWFUcmFja1NldHRpbmdzIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OkdldE1lZGlhVHJhY2tTZXR0aW5ncygpIGNvbnN0IHsKKyAgLy8gVGhlIGZvbGxvd2luZyBjYWxsIGlzIHRocmVhZCBzYWZlLgorICBBdWRpb1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IGRlbGl2ZXJlcl8uR2V0QXVkaW9QYXJhbWV0ZXJzKCk7CisKKyAgcmV0dXJuIE1lZGlhU3RyZWFtQXVkaW9UcmFjazo6TWVkaWFUcmFja1NldHRpbmdzRnJvbUF1ZGlvUGFyYW1ldGVycygKKyAgICAgIHBhcmFtZXRlcnMpOworfQorCiB2b2lkIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OkRlbGl2ZXJEYXRhVG9UcmFja3MoCiAgICAgY29uc3QgTWVkaWFTdHJlYW1BdWRpb1RyYWNrOjpTaGVsbEF1ZGlvQnVzJiBhdWRpb19idXMsCiAgICAgYmFzZTo6VGltZVRpY2tzIHJlZmVyZW5jZV90aW1lKSB7CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fYXVkaW9fc291cmNlLmggYi9zcmMvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fYXVkaW9fc291cmNlLmgKaW5kZXggNjQ2MGEzNC4uODg2NDJhMiAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3NvdXJjZS5oCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV9hdWRpb19zb3VyY2UuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX2RlbGl2ZXJlci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3RyYWNrLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fc291cmNlLmgiCisjaW5jbHVkZSAiY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV90cmFja19zZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYV9zdHJlYW0gewpAQCAtNDEsNiArNDIsOCBAQAogICAvLyB0cmFja3MuICBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4KICAgYm9vbCBDb25uZWN0VG9UcmFjayhNZWRpYVN0cmVhbUF1ZGlvVHJhY2sqIHRyYWNrKTsKIAorICBNZWRpYVRyYWNrU2V0dGluZ3MgR2V0TWVkaWFUcmFja1NldHRpbmdzKCkgY29uc3Q7CisKICBwcm90ZWN0ZWQ6CiAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoZXNlIEVuc3VyZSogbWV0aG9kcy4KIApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3RyYWNrLmNjIGIvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3RyYWNrLmNjCmluZGV4IDViZDBkODUuLmQ3YzI2OGIgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV9hdWRpb190cmFjay5jYworKysgYi9zcmMvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fYXVkaW9fdHJhY2suY2MKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3RyYWNrX3NldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhX3N0cmVhbSB7CkBAIC03NSw5ICs3Niw5IEBACiAKIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1RyYWNrOjpPblNldEZvcm1hdCgKICAgICBjb25zdCBtZWRpYV9zdHJlYW06OkF1ZGlvUGFyYW1ldGVycyYgcGFyYW1zKSB7Ci0gIHNldHRpbmdzXy5zZXRfY2hhbm5lbF9jb3VudChwYXJhbXMuY2hhbm5lbF9jb3VudCgpKTsKLSAgc2V0dGluZ3NfLnNldF9zYW1wbGVfcmF0ZShwYXJhbXMuc2FtcGxlX3JhdGUoKSk7Ci0gIHNldHRpbmdzXy5zZXRfc2FtcGxlX3NpemUocGFyYW1zLmJpdHNfcGVyX3NhbXBsZSgpKTsKKyAgTWVkaWFUcmFja1NldHRpbmdzIHNldHRpbmdzID0KKyAgICAgIE1lZGlhU3RyZWFtQXVkaW9UcmFjazo6TWVkaWFUcmFja1NldHRpbmdzRnJvbUF1ZGlvUGFyYW1ldGVycyhwYXJhbXMpOworICBTZXRNZWRpYVRyYWNrU2V0dGluZ3Moc2V0dGluZ3MpOwogICBkZWxpdmVyZXJfLk9uU2V0Rm9ybWF0KHBhcmFtcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV9hdWRpb190cmFjay5oIGIvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3RyYWNrLmgKaW5kZXggNjk1Yzc5NC4uMTQzMWUwOSAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3RyYWNrLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX2F1ZGlvX3RyYWNrLmgKQEAgLTQ3LDYgKzQ3LDE0IEBACiAvLyBhdDogaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhY2FwdHVyZS1zdHJlYW1zLyNkb20tbWVkaWFzdHJlYW10cmFjawogY2xhc3MgTWVkaWFTdHJlYW1BdWRpb1RyYWNrIDogcHVibGljIE1lZGlhU3RyZWFtVHJhY2sgewogIHB1YmxpYzoKKyAgc3RhdGljIE1lZGlhVHJhY2tTZXR0aW5ncyBNZWRpYVRyYWNrU2V0dGluZ3NGcm9tQXVkaW9QYXJhbWV0ZXJzKAorICAgICAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7CisgICAgTWVkaWFUcmFja1NldHRpbmdzIHNldHRpbmdzOworICAgIHNldHRpbmdzLnNldF9jaGFubmVsX2NvdW50KHBhcmFtZXRlcnMuY2hhbm5lbF9jb3VudCgpKTsKKyAgICBzZXR0aW5ncy5zZXRfc2FtcGxlX3JhdGUocGFyYW1ldGVycy5zYW1wbGVfcmF0ZSgpKTsKKyAgICBzZXR0aW5ncy5zZXRfc2FtcGxlX3NpemUocGFyYW1ldGVycy5iaXRzX3Blcl9zYW1wbGUoKSk7CisgICAgcmV0dXJuIHNldHRpbmdzOworICB9CiAjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfU09VUkNFXzIwMTYpCiAgIHR5cGVkZWYgbWVkaWE6OlNoZWxsQXVkaW9CdXMgU2hlbGxBdWRpb0J1czsKICNlbHNlICAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfU09VUkNFXzIwMTYpCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fdHJhY2suaCBiL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV90cmFjay5oCmluZGV4IDM5M2ZlNWYuLjY1YzM1ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV90cmFjay5oCisrKyBiL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV90cmFjay5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYmFzZS9zdHJpbmdfcGllY2UuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfdHJhY2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbXV0ZXguaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWFfc3RyZWFtIHsKQEAgLTMwLDIxICszMSwzNCBAQAogICBlbnVtIFJlYWR5U3RhdGUgeyBrUmVhZHlTdGF0ZUxpdmUsIGtSZWFkeVN0YXRlRW5kZWQsIH07CiAKICAgTWVkaWFTdHJlYW1UcmFjaygpID0gZGVmYXVsdDsKKwogICAvLyBGdW5jdGlvbiBleHBvc2VkIHRvIEphdmFTY3JpcHQgdmlhIElETC4KLSAgY29uc3QgTWVkaWFUcmFja1NldHRpbmdzJiBHZXRTZXR0aW5ncygpIHsgcmV0dXJuIHNldHRpbmdzXzsgfQorICBjb25zdCBNZWRpYVRyYWNrU2V0dGluZ3MmIEdldFNldHRpbmdzKCkgY29uc3QgeworICAgIHN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKHNldHRpbmdzX211dGV4Xyk7CisgICAgcmV0dXJuIHNldHRpbmdzXzsKKyAgfQorCisgIGNvbnN0IE1lZGlhVHJhY2tTZXR0aW5ncyYgR2V0TWVkaWFUcmFja1NldHRpbmdzKCkgY29uc3QgeworICAgIHJldHVybiBHZXRTZXR0aW5ncygpOworICB9CiAKICAgdmlydHVhbCB2b2lkIFN0b3AoKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBPblJlYWR5U3RhdGVDaGFuZ2VkKAogICAgICAgbWVkaWFfc3RyZWFtOjpNZWRpYVN0cmVhbVRyYWNrOjpSZWFkeVN0YXRlIG5ld19zdGF0ZSkgPSAwOwogCi0gIERFRklORV9XUkFQUEFCTEVfVFlQRShNZWRpYVN0cmVhbVRyYWNrKTsKKyAgdm9pZCBTZXRNZWRpYVRyYWNrU2V0dGluZ3MoY29uc3QgTWVkaWFUcmFja1NldHRpbmdzJiBuZXdfc2V0dGluZ3MpIHsKKyAgICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgbG9jayhzZXR0aW5nc19tdXRleF8pOworICAgIHNldHRpbmdzXyA9IG5ld19zZXR0aW5nczsKKyAgfQogCi0gcHJvdGVjdGVkOgotICBNZWRpYVRyYWNrU2V0dGluZ3Mgc2V0dGluZ3NfOworICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoTWVkaWFTdHJlYW1UcmFjayk7CiAKICBwcml2YXRlOgogICBNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IE1lZGlhU3RyZWFtVHJhY2smKSA9IGRlbGV0ZTsKICAgTWVkaWFTdHJlYW1UcmFjayYgb3BlcmF0b3I9KGNvbnN0IE1lZGlhU3RyZWFtVHJhY2smKSA9IGRlbGV0ZTsKKworICBzdGFyYm9hcmQ6Ok11dGV4IHNldHRpbmdzX211dGV4XzsKKyAgTWVkaWFUcmFja1NldHRpbmdzIHNldHRpbmdzXzsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYV9zdHJlYW0KZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21pY3JvcGhvbmVfYXVkaW9fc291cmNlLmggYi9zcmMvY29iYWx0L21lZGlhX3N0cmVhbS9taWNyb3Bob25lX2F1ZGlvX3NvdXJjZS5oCmluZGV4IDllZWEwODMuLjQ0Y2RiZWYgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvbWVkaWFfc3RyZWFtL21pY3JvcGhvbmVfYXVkaW9fc291cmNlLmgKKysrIGIvc3JjL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWljcm9waG9uZV9hdWRpb19zb3VyY2UuaApAQCAtMjUsNiArMjUsMTIgQEAKICNpbmNsdWRlICJjb2JhbHQvc3BlZWNoL21pY3JvcGhvbmVfbWFuYWdlci5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSBtZWRpYV9jYXB0dXJlIHsKK0ZPUldBUkRfREVDTEFSRV9URVNUKEdldFVzZXJNZWRpYVRlc3QsIFBlbmRpbmdQcm9taXNlKTsKK0ZPUldBUkRfREVDTEFSRV9URVNUKEdldFVzZXJNZWRpYVRlc3QsIE1pY3JvcGhvbmVTdG9wcGVkUmVqZWN0ZWRQcm9taXNlKTsKK0ZPUldBUkRfREVDTEFSRV9URVNUKEdldFVzZXJNZWRpYVRlc3QsIE1pY3JvcGhvbmVFcnJvclJlamVjdGVkUHJvbWlzZSk7CitGT1JXQVJEX0RFQ0xBUkVfVEVTVChHZXRVc2VyTWVkaWFUZXN0LCBNaWNyb3Bob25lU3VjY2Vzc0Z1bGZpbGxlZFByb21pc2UpOworfSAgLy8gbmFtZXNwYWNlIG1lZGlhX2NhcHR1cmUKIG5hbWVzcGFjZSBtZWRpYV9zdHJlYW0gewogCiBjbGFzcyBNaWNyb3Bob25lQXVkaW9Tb3VyY2UgOiBwdWJsaWMgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZSB7CkBAIC00MCw2ICs0NiwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXJyb3JDYWxsYmFjayYgZXJyb3IpOwogCiAgcHJpdmF0ZToKKyAgRlJJRU5EX1RFU1RfQUxMX1BSRUZJWEVTKDo6Y29iYWx0OjptZWRpYV9jYXB0dXJlOjpHZXRVc2VyTWVkaWFUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ1Byb21pc2UpOworICBGUklFTkRfVEVTVF9BTExfUFJFRklYRVMoOjpjb2JhbHQ6Om1lZGlhX2NhcHR1cmU6OkdldFVzZXJNZWRpYVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNyb3Bob25lU3RvcHBlZFJlamVjdGVkUHJvbWlzZSk7CisgIEZSSUVORF9URVNUX0FMTF9QUkVGSVhFUyg6OmNvYmFsdDo6bWVkaWFfY2FwdHVyZTo6R2V0VXNlck1lZGlhVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pY3JvcGhvbmVFcnJvclJlamVjdGVkUHJvbWlzZSk7CisgIEZSSUVORF9URVNUX0FMTF9QUkVGSVhFUyg6OmNvYmFsdDo6bWVkaWFfY2FwdHVyZTo6R2V0VXNlck1lZGlhVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pY3JvcGhvbmVTdWNjZXNzRnVsZmlsbGVkUHJvbWlzZSk7CisKICAgTWljcm9waG9uZUF1ZGlvU291cmNlKGNvbnN0IE1pY3JvcGhvbmVBdWRpb1NvdXJjZSYpID0gZGVsZXRlOwogICBNaWNyb3Bob25lQXVkaW9Tb3VyY2UmIG9wZXJhdG9yPShjb25zdCBNaWNyb3Bob25lQXVkaW9Tb3VyY2UmKSA9IGRlbGV0ZTsKICAgfk1pY3JvcGhvbmVBdWRpb1NvdXJjZSgpIHsgRW5zdXJlU291cmNlSXNTdG9wcGVkKCk7IH0KZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvcmVuZGVyZXIvZ2xpbXBfc2hhZGVycy9nbHNsL2ZyYWdtZW50X3NraWFfYWxwaGFfY292ZXJhZ2UuZ2xzbCBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvZ2xpbXBfc2hhZGVycy9nbHNsL2ZyYWdtZW50X3NraWFfYWxwaGFfY292ZXJhZ2UuZ2xzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTMxNDJlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvYmFsdC9yZW5kZXJlci9nbGltcF9zaGFkZXJzL2dsc2wvZnJhZ21lbnRfc2tpYV9hbHBoYV9jb3ZlcmFnZS5nbHNsCkBAIC0wLDAgKzEsMjYgQEAKKyN2ZXJzaW9uIDEwMA0KKw0KKyNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogcmVxdWlyZQ0KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Ow0KK3VuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1N0YWdlMDsNCit2YXJ5aW5nIG1lZGl1bXAgdmVjNCB2aW5Db2xvcl9TdGFnZTA7DQordmFyeWluZyBoaWdocCB2ZWMyIHZUZXh0dXJlQ29vcmRzX1N0YWdlMDsNCit2YXJ5aW5nIGhpZ2hwIHZlYzIgdkludFRleHR1cmVDb29yZHNfU3RhZ2UwOw0KK3ZvaWQgbWFpbigpIHsNCisgICAgdmVjNCBvdXRwdXRDb2xvcl9TdGFnZTA7DQorICAgIHZlYzQgb3V0cHV0Q292ZXJhZ2VfU3RhZ2UwOw0KKyAgICB7DQorICAgICAgICBvdXRwdXRDb2xvcl9TdGFnZTAgPSB2aW5Db2xvcl9TdGFnZTA7DQorICAgICAgICBoaWdocCB2ZWMyIHV2ID0gdlRleHR1cmVDb29yZHNfU3RhZ2UwOw0KKyAgICAgICAgZmxvYXQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQodVRleHR1cmVTYW1wbGVyXzBfU3RhZ2UwLCB1dikud3d3dy54Ow0KKyAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSA3Ljk2ODc1ICogKHRleENvbG9yIC0gMC41MDE5NjA3ODQzMTAwMDAwMik7DQorICAgICAgICBmbG9hdCBhZndpZHRoOw0KKyAgICAgICAgZmxvYXQgc3RfZ3JhZF9sZW4gPSBsZW5ndGgoZEZkeSh2SW50VGV4dHVyZUNvb3Jkc19TdGFnZTApKTsNCisgICAgICAgIGFmd2lkdGggPSBhYnMoMC42NTAwMDAwMDAwMDAwMDAwMiAqIHN0X2dyYWRfbGVuKTsNCisgICAgICAgIGZsb2F0IHZhbCA9IHNtb290aHN0ZXAoLWFmd2lkdGgsIGFmd2lkdGgsIGRpc3RhbmNlKTsNCisgICAgICAgIG91dHB1dENvdmVyYWdlX1N0YWdlMCA9IHZlYzQodmFsKTsNCisgICAgfQ0KKyAgICB7DQorICAgICAgICBnbF9GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TdGFnZTAgKiBvdXRwdXRDb3ZlcmFnZV9TdGFnZTA7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfbWVzaC5jYyBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX21lc2guY2MKaW5kZXggNmU4ZDcyMy4uMDhkZWNlYiAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfbWVzaC5jYworKysgYi9zcmMvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9tZXNoLmNjCkBAIC0zNSwyMSArMzUsNDEgQEAKIH0KIAogY29uc3QgVmVydGV4QnVmZmVyT2JqZWN0KiBIYXJkd2FyZU1lc2g6OkdldFZCTygpIGNvbnN0IHsKLSAgRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotCiAgIGlmICghdmJvXykgeworICAgIHJhc3Rlcml6ZXJfbWVzc2FnZV9sb29wXyA9IE1lc3NhZ2VMb29wOjpjdXJyZW50KCk7CiAgICAgdmJvXy5yZXNldChuZXcgVmVydGV4QnVmZmVyT2JqZWN0KHZlcnRpY2VzXy5QYXNzKCksIGRyYXdfbW9kZV8pKTsKICAgfQogCiAgIHJldHVybiB2Ym9fLmdldCgpOwogfQogCi1IYXJkd2FyZU1lc2g6On5IYXJkd2FyZU1lc2goKSB7Ci0gIC8vIFRPRE86IFN1cHBvcnQgdGhpcyBmdW5jdGlvbiBmcm9tIGJlaW5nIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCi0gIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKK25hbWVzcGFjZSB7CisKK3ZvaWQgRGVzdHJveVZCTyhiYWNrZW5kOjpHcmFwaGljc0NvbnRleHRFR0wqIGNvYmFsdF9jb250ZXh0LAorICAgICAgICAgICAgICAgIHNjb3BlZF9wdHI8VmVydGV4QnVmZmVyT2JqZWN0PiB2Ym8pIHsKICAgYmFja2VuZDo6R3JhcGhpY3NDb250ZXh0RUdMOjpTY29wZWRNYWtlQ3VycmVudCBzY29wZWRfbWFrZV9jdXJyZW50KAotICAgICAgY29iYWx0X2NvbnRleHRfKTsKLSAgdmJvXy5yZXNldCgpOworICAgICAgY29iYWx0X2NvbnRleHQpOworICB2Ym8ucmVzZXQoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0hhcmR3YXJlTWVzaDo6fkhhcmR3YXJlTWVzaCgpIHsKKyAgaWYgKHJhc3Rlcml6ZXJfbWVzc2FnZV9sb29wXykgeworICAgIGlmIChyYXN0ZXJpemVyX21lc3NhZ2VfbG9vcF8gIT0gTWVzc2FnZUxvb3A6OmN1cnJlbnQoKSkgeworICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgVkJPIGNsZWFudXAgYWx3YXlzIGhhcHBlbnMgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKKyAgICAgIC8vIHRoZSBWQk8gaW4gdGhlIGZpcnN0IHBsYWNlLiAgV2UgYXJlIHBhc3NpbmcgY29iYWx0X2NvbnRleHRfIGJ5IHBvaW50ZXIKKyAgICAgIC8vIGhlcmUsIGJ1dCB3ZSBjYW4gYXNzdW1lIGl0IHdpbGwgc3RpbGwgYmUgYWxpdmUgd2hlbiBEZXN0cm95VkJPIGlzCisgICAgICAvLyBleGVjdXRlZCBiZWNhdXNlIHRoaXMgTWVzaCBvYmplY3QgbXVzdCAgYmUgZGVzdHJveWVkIGJlZm9yZSB0aGUKKyAgICAgIC8vIHJhc3Rlcml6ZXIsIGFuZCB0aGUgcmFzdGVyaXplciBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIEdMCisgICAgICAvLyBjb250ZXh0LgorICAgICAgcmFzdGVyaXplcl9tZXNzYWdlX2xvb3BfLT5Qb3N0VGFzaygKKyAgICAgICAgICBGUk9NX0hFUkUsCisgICAgICAgICAgYmFzZTo6QmluZCgmRGVzdHJveVZCTywgY29iYWx0X2NvbnRleHRfLCBiYXNlOjpQYXNzZWQoJnZib18pKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIERlc3Ryb3lWQk8oY29iYWx0X2NvbnRleHRfLCB2Ym9fLlBhc3MoKSk7CisgICAgfQorICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBza2lhCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9tZXNoLmggYi9zcmMvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9tZXNoLmgKaW5kZXggMmI4ZGJkYi4uMTVlNjU3YiAxMDA2NDQKLS0tIGEvc3JjL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfbWVzaC5oCisrKyBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX21lc2guaApAQCAtMTksNyArMTksNiBAQAogCiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX2NoZWNrZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvcmVzb3VyY2VfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZ3JhcGhpY3NfY29udGV4dC5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvdmVydGV4X2J1ZmZlcl9vYmplY3QuaCIKQEAgLTM5LDcgKzM4LDYgQEAKICAgICAgICAgZHJhd19tb2RlXyhDaGVja0RyYXdNb2RlKGRyYXdfbW9kZSkpLAogICAgICAgICBjb2JhbHRfY29udGV4dF8oY29iYWx0X2NvbnRleHQpIHsKICAgICBEQ0hFQ0sodmVydGljZXNfKTsKLSAgICB0aHJlYWRfY2hlY2tlcl8uRGV0YWNoRnJvbVRocmVhZCgpOwogICB9CiAKICAgdWludDMyIEdldEVzdGltYXRlZFNpemVJbkJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC05Miw3ICs5MCwxMSBAQAogICBjb25zdCBHTGVudW0gZHJhd19tb2RlXzsKICAgYmFja2VuZDo6R3JhcGhpY3NDb250ZXh0RUdMKiBjb2JhbHRfY29udGV4dF87CiAKLSAgYmFzZTo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87CisgIC8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgdGhyZWFkIGZyb20gd2hpY2ggd2UgY3JlYXRlIHRoZSB2ZXJ0ZXggYnVmZmVyCisgIC8vIG9iamVjdCwgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoYXQgcmVnYXJkbGVzcyBvZiB3aGljaCB0aHJlYWQgZGVzdHJveXMKKyAgLy8gdGhpcyBIYXJkd2FyZU1lc2ggaW5zdGFuY2UsIHdlIHdpbGwgYWx3YXlzIGVuc3VyZSB0aGF0IHRoZSBvd25lZCBWQk8gaXMKKyAgLy8gZGVzdHJveWVkIG9uIHRoZSB0aHJlYWQgaXQgd2FzIGNyZWF0ZWQgZnJvbS4KKyAgbXV0YWJsZSBNZXNzYWdlTG9vcCogcmFzdGVyaXplcl9tZXNzYWdlX2xvb3BfID0gbnVsbHB0cjsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBza2lhCmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9yZXNvdXJjZV9wcm92aWRlci5jYyBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmNjCmluZGV4IDdlNjRhZjUuLjlmM2EyMWEgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmNjCisrKyBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmNjCkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgIHJldHVybiAxOwogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0MlBsYW5lWVVWTlYxMjoKICAgICAgIHJldHVybiAyOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCXzEwX0JJVF9ZVVZfSTQyMF9ERUNPREVfVEFSR0VUX1NVUFBPUlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwOgogI2VuZGlmCiAgICAgY2FzZSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmVZVVZJNDIwOgpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgICB9CiAjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDcKICAgICB9IGJyZWFrOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCXzEwX0JJVF9ZVVZfSTQyMF9ERUNPREVfVEFSR0VUX1NVUFBPUlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwOgogI2VuZGlmCiAgICAgY2FzZSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmVZVVZJNDIwOiB7CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZVlVVkk0MjA6IHsKICAgICAgIHJldHVybiByZW5kZXJfdHJlZTo6a011bHRpUGxhbmVJbWFnZUZvcm1hdFlVVjNQbGFuZUJUNzA5OwogICAgIH0gYnJlYWs7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfMTBfQklUX1lVVl9JNDIwX0RFQ09ERV9UQVJHRVRfU1VQUE9SVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgICAgY2FzZSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmUxMEJpdFlVVkk0MjA6IHsKICAgICAgIHJldHVybiByZW5kZXJfdHJlZTo6a011bHRpUGxhbmVJbWFnZUZvcm1hdFlVVjNQbGFuZTEwQml0QlQyMDIwOwogICAgIH0gYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS92ZXJ0ZXhfYnVmZmVyX29iamVjdC5jYyBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmNjCmluZGV4IGRkYWMwNTkuLjZlNDg1NzYgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmNjCisrKyBiL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmNjCkBAIC00OCwxMSArNDgsMTMgQEAKIH0KIAogVmVydGV4QnVmZmVyT2JqZWN0Ojp+VmVydGV4QnVmZmVyT2JqZWN0KCkgeworICBEQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CiAgIERMT0coSU5GTykgPDwgIkRlbGV0ZWQgVkJPIHdpdGggYnVmZmVyIGlkICIgPDwgbWVzaF92ZXJ0ZXhfYnVmZmVyXzsKICAgR0xfQ0FMTChnbERlbGV0ZUJ1ZmZlcnMoMSwgJm1lc2hfdmVydGV4X2J1ZmZlcl8pKTsKIH0KIAogdm9pZCBWZXJ0ZXhCdWZmZXJPYmplY3Q6OkJpbmQoKSBjb25zdCB7CisgIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKICAgR0xfQ0FMTChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtZXNoX3ZlcnRleF9idWZmZXJfKSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmggYi9zcmMvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS92ZXJ0ZXhfYnVmZmVyX29iamVjdC5oCmluZGV4IDc1MmQ1NjguLmRmODViYTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmgKKysrIGIvc3JjL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvdmVydGV4X2J1ZmZlcl9vYmplY3QuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3Njb3BlZF9wdHIuaCIKKyNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWRfY2hlY2tlci5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJfdHJlZS9tZXNoLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtNDksNiArNTAsNyBAQAogICBzaXplX3QgdmVydGV4X2NvdW50XzsKICAgR0xlbnVtIGRyYXdfbW9kZV87CiAgIEdMdWludCBtZXNoX3ZlcnRleF9idWZmZXJfOworICBiYXNlOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyXzsKIAogICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4QnVmZmVyT2JqZWN0KTsKIH07CmRpZmYgLS1naXQgYS9zcmMvY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIGIvc3JjL2NvYmFsdC9zY3JpcHQvamF2YXNjcmlwdF9lbmdpbmUuaAppbmRleCA3ODM4MGY5Li5jY2EyZjQxIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oCisrKyBiL3NyYy9jb2JhbHQvc2NyaXB0L2phdmFzY3JpcHRfZW5naW5lLmgKQEAgLTg2LDcgKzg2LDcgQEAKIH07CiAKIC8vIFJldHVybnMgdGhlIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhlIEphdmFTY3JpcHQgZW5naW5lIGJlaW5nIHVzZWQsIGpvaW5lZAotLy8gYnkgIi8iLiBFeGFtcGxlIG91dHB1dCAod2hlbiB1c2luZyBWOCkgd2lsbCBsb29rIGxpa2UgIlY4LzYuNS4yNTQuMjgiLgorLy8gYnkgIi8iLiBFeGFtcGxlIG91dHB1dCAod2hlbiB1c2luZyBWOCkgd2lsbCBsb29rIGxpa2UgInY4LzYuNS4yNTQuMjgiLgogc3RkOjpzdHJpbmcgR2V0SmF2YVNjcmlwdEVuZ2luZU5hbWVBbmRWZXJzaW9uKCk7CiAKIH0gIC8vIG5hbWVzcGFjZSBzY3JpcHQKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvc2NyaXB0L21vempzLTQ1L21vempzX2VuZ2luZS5jYyBiL3NyYy9jb2JhbHQvc2NyaXB0L21vempzLTQ1L21vempzX2VuZ2luZS5jYwppbmRleCAzMWMwMDNkLi4zOTJhZGQxIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L3NjcmlwdC9tb3pqcy00NS9tb3pqc19lbmdpbmUuY2MKKysrIGIvc3JjL2NvYmFsdC9zY3JpcHQvbW96anMtNDUvbW96anNfZW5naW5lLmNjCkBAIC0yNTksNyArMjU5LDcgQEAKIH0KIAogc3RkOjpzdHJpbmcgR2V0SmF2YVNjcmlwdEVuZ2luZU5hbWVBbmRWZXJzaW9uKCkgewotICByZXR1cm4gc3RkOjpzdHJpbmcoIlNwaWRlck1vbmtleS8iKSArIE1PWklMTEFfVkVSU0lPTjsKKyAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJtb3pqcy8iKSArIE1PWklMTEFfVkVSU0lPTjsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHNjcmlwdApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9zY3JpcHQvdjhjL3Y4Y19lbmdpbmUuY2MgYi9zcmMvY29iYWx0L3NjcmlwdC92OGMvdjhjX2VuZ2luZS5jYwppbmRleCBkNmQzZTVjLi4xYTZjYzgzIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L3NjcmlwdC92OGMvdjhjX2VuZ2luZS5jYworKysgYi9zcmMvY29iYWx0L3NjcmlwdC92OGMvdjhjX2VuZ2luZS5jYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiB9CiAKIHN0ZDo6c3RyaW5nIEdldEphdmFTY3JpcHRFbmdpbmVOYW1lQW5kVmVyc2lvbigpIHsKLSAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJWOC8iKSArIHY4OjpWODo6R2V0VmVyc2lvbigpOworICByZXR1cm4gc3RkOjpzdHJpbmcoInY4LyIpICsgdjg6OlY4OjpHZXRWZXJzaW9uKCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBzY3JpcHQKZGlmZiAtLWdpdCBhL3NyYy9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvZ3lwLWNvbmZpZ3VyYXRpb24ubWQgYi9zcmMvY29iYWx0L3NpdGUvZG9jcy9yZWZlcmVuY2Uvc3RhcmJvYXJkL2d5cC1jb25maWd1cmF0aW9uLm1kCmluZGV4IDg2NGY1NjIuLjY5MGY4ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvZ3lwLWNvbmZpZ3VyYXRpb24ubWQKKysrIGIvc3JjL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9neXAtY29uZmlndXJhdGlvbi5tZApAQCAtMjcsNiArMjcsOCBAQAogfCAqKmBjb2JhbHRfbWVkaWFfYnVmZmVyX2FsaWdubWVudGAqKjxicj48YnI+IFRoZSBtZWRpYSBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGlnbm1lbnQuICBTZXQgdGhpcyB0byBhIGxhcmdlciB2YWx1ZSBtYXkgaW5jcmVhc2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBtZWRpYSBidWZmZXJzLjxicj48YnI+VGhlIGRlZmF1bHQgdmFsdWUgaXMgYDBgLiB8CiB8ICoqYGNvYmFsdF9tZWRpYV9idWZmZXJfYWxsb2NhdGlvbl91bml0YCoqPGJyPjxicj4gV2hlbiB0aGUgbWVkaWEgc3RhY2sgbmVlZHMgbW9yZSBtZW1vcnkgdG8gc3RvcmUgbWVkaWEgYnVmZmVycywgaXQgd2lsbCBhbGxvY2F0ZSBleHRyYSBtZW1vcnkgaW4gdW5pdHMgb2YgfGNvYmFsdF9tZWRpYV9idWZmZXJfYWxsb2NhdGlvbl91bml0fC4gVGhpcyBjYW4gYmUgc2V0IHRvIDAsIGluIHdoaWNoIGNhc2UgdGhlIG1lZGlhIHN0YWNrIHdpbGwgYWxsb2NhdGUgZXh0cmEgbWVtb3J5IG9uIGRlbWFuZC4gIFdoZW4gfGNvYmFsdF9tZWRpYV9idWZmZXJfaW5pdGlhbF9jYXBhY2l0eXwgYW5kIHRoaXMgdmFsdWUgYXJlIGJvdGggc2V0IHRvIDAsIHRoZSBtZWRpYSBzdGFjayB3aWxsIGFsbG9jYXRlIGluZGl2aWR1YWwgYnVmZmVycyBkaXJlY3RseSB1c2luZyBTYk1lbW9yeSBmdW5jdGlvbnMuPGJyPjxicj5UaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMSAqIDEwMjQgKiAxMDI0YC4gfAogfCAqKmBjb2JhbHRfbWVkaWFfYnVmZmVyX2luaXRpYWxfY2FwYWNpdHlgKio8YnI+PGJyPiBUaGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzdG9yZSBtZWRpYSBidWZmZXJzIGFsbG9jYXRlZCBkdXJpbmcgc3lzdGVtIHN0YXJ0dXAuICBUbyBhbGxvY2F0ZSBhIGxhcmdlIGNodW5rIGF0IHN0YXJ0dXAgaGVscHMgd2l0aCByZWR1Y2luZyBmcmFnbWVudGF0aW9uIGFuZCBjYW4gYXZvaWQgZmFpbHVyZXMgdG8gYWxsb2NhdGUgaW5jcmVtZW50YWxseS4gVGhpcyBjYW4gYmUgc2V0IHRvIDAuPGJyPjxicj5UaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjEgKiAxMDI0ICogMTAyNGAuIHwKK3wgKipgY29iYWx0X21lZGlhX2J1ZmZlcl9tYXhfY2FwYWNpdHlfMTA4MHBgKio8YnI+PGJyPiBUaGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIG1lZGlhIGJ1ZmZlcnMgd2hlbiB2aWRlbyByZXNvbHV0aW9uIGlzIDEwODBwLiBUaGlzIG11c3QgYmUgbGFyZ2VyIHRoYW4gc3VtIG9mIHRoZSB2aWRlbyBidWRnZXQgYW5kIGF1ZGlvIGJ1ZGdldCAuPGJyPjxicj5UaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMzYgKiAxMDI0ICogMTAyNGAuIHwKK3wgKipgY29iYWx0X21lZGlhX2J1ZmZlcl9tYXhfY2FwYWNpdHlfNGtgKio8YnI+PGJyPiBUaGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIG1lZGlhIGJ1ZmZlcnMgd2hlbiB2aWRlbyByZXNvbHV0aW9uIGlzIDRrLiBUaGlzIG11c3QgYmUgbGFyZ2VyIHRoYW4gc3VtIG9mIHRoZSB2aWRlbyBidWRnZXQgYW5kIGF1ZGlvIGJ1ZGdldCAuPGJyPjxicj5UaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMTAwICogMTAyNCAqIDEwMjRgLiB8CiB8ICoqYGNvYmFsdF9tZWRpYV9idWZmZXJfbm9uX3ZpZGVvX2J1ZGdldGAqKjxicj48YnI+IFNwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgYXVkaW8gb3IgdGV4dCBidWZmZXJzIG9mIG1lZGlhIHNvdXJjZSBiZWZvcmUgdHJpZ2dlcmluZyBhIGdhcmJhZ2UgY29sbGVjdGlvbi4gIEEgbGFyZ2UgdmFsdWUgd2lsbCBjYXVzZSBtb3JlIG1lbW9yeSBiZWluZyB1c2VkIGJ5IGF1ZGlvIGJ1ZmZlcnMgYnV0IHdpbGwgYWxzbyBtYWtlIEphdmFTY3JpcHQgYXBwIGxlc3MgbGlrZWx5IHRvIHJlLWRvd25sb2FkIGF1ZGlvIGRhdGEuICBOb3RlIHRoYXQgdGhlIEphdmFTY3JpcHQgYXBwIG1heSBleHBlcmllbmNlIHNpZ25pZmljYW50IGRpZmZpY3VsdHkgaWYgdGhpcyB2YWx1ZSBpcyB0b28gbG93Ljxicj48YnI+VGhlIGRlZmF1bHQgdmFsdWUgaXMgYDUgKiAxMDI0ICogMTAyNGAuIHwKIHwgKipgY29iYWx0X21lZGlhX2J1ZmZlcl9wYWRkaW5nYCoqPGJyPjxicj4gRXh0cmEgYnl0ZXMgYWxsb2NhdGVkIGF0IHRoZSBlbmQgb2YgYSBtZWRpYSBidWZmZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBjYW4gYmUgdXNlIG9wdGltYWxseSBieSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGlrZSBTSU1ELiAgU2V0IHRvIDAgdG8gcmVtb3ZlIGFueSBwYWRkaW5nLjxicj48YnI+VGhlIGRlZmF1bHQgdmFsdWUgaXMgYDBgLiB8CiB8ICoqYGNvYmFsdF9tZWRpYV9idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmRgKio8YnI+PGJyPiBXaGVuIGVpdGhlciB8Y29iYWx0X21lZGlhX2J1ZmZlcl9pbml0aWFsX2NhcGFjaXR5fCBvciB8Y29iYWx0X21lZGlhX2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXR8IGlzbid0IHplcm8sIG1lZGlhIGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgdXNpbmcgYSBtZW1vcnkgcG9vbC4gIFNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHRvIDEgdG8gYWxsb2NhdGUgdGhlIG1lZGlhIGJ1ZmZlciBwb29sIG1lbW9yeSBvbiBkZW1hbmQgYW5kIHJldHVybiBhbGwgbWVtb3J5IHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGVyZSBpcyBubyBtZWRpYSBidWZmZXIgYWxsb2NhdGVkLiAgU2V0dGluZyB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIDAgcmVzdWx0cyBpbiB0aGF0IENvYmFsdCB3aWxsIGFsbG9jYXRlIHxjb2JhbHRfbWVkaWFfYnVmZmVyX2luaXRpYWxfY2FwYWNpdHl8IGJ5dGVzIGZvciBtZWRpYSBidWZmZXIgb24gc3RhcnR1cCBhbmQgd2lsbCBub3QgcmVsZWFzZSBhbnkgbWVkaWEgYnVmZmVyIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gZXZlbiBpZiB0aGVyZSBpcyBubyBtZWRpYSBidWZmZXJzIGFsbG9jYXRlZC48YnI+PGJyPlRoZSBkZWZhdWx0IHZhbHVlIGlzIGAxYC4gfApkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC9zeXN0ZW1fd2luZG93L3N5c3RlbV93aW5kb3cuY2MgYi9zcmMvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5jYwppbmRleCAyMDkyMzhjLi45ZjUxYjNmIDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5jYworKysgYi9zcmMvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5jYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgIC8vIFVzZSB0aGUgY3VycmVudCB0aW1lIHVubGVzcyBpdCB3YXMgb3ZlcnJpZGRlbi4KICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCA9IDA7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9JTlBVVF9USU1FU1RBTVBfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogICBib29sIHVzZV9pbnB1dF90aW1lc3RhbXAgPQogICAgICAgU2JTeXN0ZW1IYXNDYXBhYmlsaXR5KGtTYlN5c3RlbUNhcGFiaWxpdHlTZXRzSW5wdXRUaW1lc3RhbXApOwogICBpZiAodXNlX2lucHV0X3RpbWVzdGFtcCkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvYmFsdC92ZXJzaW9uLmggYi9zcmMvY29iYWx0L3ZlcnNpb24uaAppbmRleCBkZWY0NzcyLi41NWE3OGY0IDEwMDY0NAotLS0gYS9zcmMvY29iYWx0L3ZlcnNpb24uaAorKysgYi9zcmMvY29iYWx0L3ZlcnNpb24uaApAQCAtMTQsNyArMTQsMjcgQEAKICNpZm5kZWYgQ09CQUxUX1ZFUlNJT05fSF8KICNkZWZpbmUgQ09CQUxUX1ZFUlNJT05fSF8KIAotLy8gQ29iYWx0IHJlbGVhc2UgbnVtYmVyLgotI2RlZmluZSBDT0JBTFRfVkVSU0lPTiAiMTciCisvLyBUaGUgQ29iYWx0IHZlcnNpb24gc3RyaW5nLiAgSXRzIGNvbXBvbmVudHMgYXJlOgorLy8KKy8vIDxmZWF0dXJlIHllYXI+LjxwdXJwb3NlPi48dXBkYXRlIG51bWJlcj4KKy8vCisvLyB3aGVyZSwKKy8vCisvLyAgIGZlYXR1cmUgeWVhcjogIENvYmFsdCBmZWF0dXJlcyBhcmUgdGllZCB0byBhIHllYXJseSByZWxlYXNlIGN5Y2xlIGFuZCB0aGlzCisvLyAgICAgICAgICAgICAgICAgIG51bWJlciBpbmRpY2F0ZXMgdGhlIHllYXJseSBmZWF0dXJlIHNldCB0aGF0IHRoaXMgdmVyc2lvbgorLy8gICAgICAgICAgICAgICAgICBvZiBDb2JhbHQgc3VwcG9ydHMuCisvLworLy8gICBwdXJwb3NlOiAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIGJ1aWxkLCB1c3VhbGx5IG5hbWVkIGFmdGVyIHRoZSByZWFzb24KKy8vICAgICAgICAgICAgICAgICAgdGhhdCBhIGJyYW5jaCBpcyBjdXQuICBPbiB0cnVuayBpdCB3aWxsIGJlICJtYXN0ZXIiLCBhbmQgb24KKy8vICAgICAgICAgICAgICAgICAgTFRTIGJyYW5jaGVzIGZvciBleGFtcGxlIGl0IHdpbGwgYmUgImx0cyIuCisvLworLy8gICB1cGRhdGUgbnVtYmVyOiBUaGUgY3VycmVudCB1cGRhdGUgcmV2aXNpb24gbnVtYmVyIChlLmcuIHJlbGVhc2UgbnVtYmVyKQorLy8gICAgICAgICAgICAgICAgICBmb3IgYSBnaXZlbiBwYWlyIG9mIHZhbHVlcyBhYm92ZS4gIFRoaXMgd2lsbCBhbHdheXMgYmUgMCBvbgorLy8gICAgICAgICAgICAgICAgICB0cnVuay4gIFdoZW4gYSByZWxlYXNlIGJyYW5jaCBpcyBjdXQsIHRoaXMgc2hvdWxkIGJlCisvLyAgICAgICAgICAgICAgICAgIG1vZGlmaWVkIHRvIHN0YXJ0IGF0IDEsIGFuZCBiZSBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYQorLy8gICAgICAgICAgICAgICAgICByZWxlYXNlIGlzIGN1dC4KKy8vLgorCisjZGVmaW5lIENPQkFMVF9WRVJTSU9OICIxOS5tYXN0ZXIuMCIKIAogI2VuZGlmICAvLyBDT0JBTFRfVkVSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9DSEFOR0VMT0cubWQgYi9zcmMvc3RhcmJvYXJkL0NIQU5HRUxPRy5tZAppbmRleCBkNTVlNGQzLi4xMjkxMzQ5IDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL0NIQU5HRUxPRy5tZAorKysgYi9zcmMvc3RhcmJvYXJkL0NIQU5HRUxPRy5tZApAQCAtMTYsNiArMTYsMTU3IEBACiAKICMjIFZlcnNpb24gMTAKIAorIyMjIEludHJvZHVjZSBmdW5jdGlvbnMgdG8gcXVlcnkgYXQgcnVudGltZSBmb3IgbWVkaWEgYnVmZmVyIHNldHRpbmdzCisKK0luIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgaW50cm9kdWNlZDoKKyAtIGBTYk1lZGlhR2V0QXVkaW9CdWZmZXJCdWRnZXRgCisgLSBgU2JNZWRpYUdldEJ1ZmZlckFsaWdubWVudGAKKyAtIGBTYk1lZGlhR2V0QnVmZmVyQWxsb2NhdGlvblVuaXRgCisgLSBgU2JNZWRpYUdldEJ1ZmZlckdhcmJhZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGRgCisgLSBgU2JNZWRpYUdldEJ1ZmZlclBhZGRpbmdgCisgLSBgU2JNZWRpYUdldEJ1ZmZlclN0b3JhZ2VUeXBlYAorIC0gYFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHlgCisgLSBgU2JNZWRpYUdldE1heEJ1ZmZlckNhcGFjaXR5YAorIC0gYFNiTWVkaWFHZXRQcm9ncmVzc2l2ZUJ1ZmZlckJ1ZGdldGAKKyAtIGBTYk1lZGlhR2V0VmlkZW9CdWZmZXJCdWRnZXRgCisgLSBgU2JNZWRpYUlzQnVmZmVyUG9vbEFsbG9jYXRlT25EZW1hbmRgCisgLSBgU2JNZWRpYUlzQnVmZmVyVXNpbmdNZW1vcnlQb29sYAorCisjIyMgQWRkIHN1cHBvcnQgZm9yIHBsYXllcl9maWx0ZXJfdGVzdHMKKworUmVxdWlyZSBjb21waWxpbmcgJ3BsYXllcl9maWx0ZXJfdGVzdHMnIHRlc3QgdGFyZ2V0IHNvdXJjZXMgb24gYWxsCitwbGF0Zm9ybXMsIGluY2x1ZGluZyBgYXVkaW9fZGVjb2Rlcl90ZXN0cy5jY2AgYW5kIGB2aWRlb19kZWNvZGVyX3Rlc3QuY2NgLiBGb3IKK3RoaXMgU3RhcmJvYXJkIEFQSSB2ZXJzaW9uIGFuZCBiZXlvbmQsIGBTQl9IQVMoUExBWUVSX0ZJTFRFUl9URVNUUylgIGlzIHRydWUuCisKKyMjIyBEZXByZWNhdGUgU2JNZWRpYVRpbWUgZm9yIFNiVGltZQorCitTYk1lZGlhVGltZSwgd2hpY2ggaXMgOTBraHogYmFzZWQsIHdhcyB1c2VkIHRvIHJlcHJlc2VudCB0aW1lc3RhbXBzIGFuZAorZHVyYXRpb24gcmVsYXRlZCB0byBTYlBsYXllci4gIEFzIG1vc3Qgb2YgdGhlIHBsYXRmb3JtcyByZXByZXNlbnQgdmlkZW8KK3JlbGF0ZWQgdGltZXMgaW4gbWlsbGlzZWNvbmRzIG9yIG1pY3Jvc2Vjb25kcywgdGhpcyBjYXVzZXMgYSBsb3Qgb2YKK290aGVyd2lzZSB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uLiAgTm93IGFsbCB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbiByZWxhdGVkCit0byBTYlBsYXllciBhcmUgcmVwcmVzZW50ZWQgYnkgU2JUaW1lIGRpcmVjdGx5LgorCisjIyMgUmVmaW5lIHNhbXBsZSB3cml0aW5nIG9mIFNiUGxheWVyCisKK0FkZGVkIHR3byBuZXcgZnVuY3Rpb25zIGBTYlBsYXllckdldE1heGltdW1OdW1iZXJPZlNhbXBsZXNQZXJXcml0ZSgpYCBhbmQKK2BTYlBsYXllcldyaXRlU2FtcGxlMigpYC4gIFRoZSBmb3JtZXIgYWxsb3dzIGltcGxlbWVudGF0aW9uIHRvIHNwZWNpZnkgdGhlCittYXhpbXVtIG51bWJlcnMgb2Ygc2FtcGxlcyB0aGF0IGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBsYXR0ZXIgYXQgb25jZS4KK0FzIGl0IHRha2VzIG11bHRpcGxlIHRocmVhZCBjb250ZXh0IHN3aXRjaGVzIHRvIGNhbGwgYFNiUGxheWVyV3JpdGVTYW1wbGUyKClgCitvbmNlLCBpdCBjYW4gb3B0aW1pemUgcGVyZm9ybWFuY2Ugb24gbG93IGVuZCBwbGF0Zm9ybXMgYnkgcmVkdWNpbmcgdGhlCitmcmVxdWVuY2Ugb2YgY2FsbGluZyBgU2JQbGF5ZXJXcml0ZVNhbXBsZTIoKWAuCisKKyMjIyBBZGQgc3VwcG9ydCBmb3IgcGxheWVyIGVycm9yIG1lc3NhZ2VzCisKK2BTYlBsYXllckNyZWF0ZSgpYCBub3cgYWNjZXB0cyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciwgYHBsYXllcl9lcnJvcl9mdW5jYCwKK3RoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyB0byBwcm9wYWdhdGUgdGhlIGVycm9yIHRvIHRoZQorYXBwbGljYXRpb24uCisKKyMjIyBBZGQgc3VwcG9ydCBmb3Igc3lzdGVtLWxldmVsIGNsb3NlZCBjYXB0aW9uIHNldHRpbmdzCisKK2BTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MoKWAgYW5kIGBTYkFjY2Vzc2liaWxpdHlTZXRDYXB0aW9uc0VuYWJsZWQoKWAKK2Fsb25nIHdpdGggYSBudW1iZXIgb2Ygc3VwcG9ydGluZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgaGF2ZSBiZWVuIGFkZGVkCit0byBgYWNjZXNzaWJpbGl0eS5oYC4gIFBsYXRmb3JtcyB3aWxsIG5lZWQgdG8gZGVmaW5lIFNCX0hBU19DQVBUSU9OUyB0byAxIGluCitvcmRlciB0byBlbmFibGUgdGhlIGludGVyZmFjZS4KKworIyMjIEFkZCBzdXBwb3J0IGZvciBhdWRpb2xlc3MgdmlkZW8gcGxheWJhY2sKKworU2JQbGF5ZXIgY2FuIGJlIGNyZWF0ZWQgd2l0aCBvbmx5IGEgdmlkZW8gdHJhY2ssIHdpdGhvdXQgYW55IGFjY29tcGFueWluZworYXVkaW8gdHJhY2suICBUaGUgU2JQbGF5ZXIgaW1wbGVtZW50YXRpb24gbXVzdCBub3cgYmUgYWJsZSB0byBwbGF5IGJhY2sKK2Egc29sZSB2aWRlbyB0cmFjay4KKworIyMjIEFkZCBzdXBwb3J0IGZvciBhdWRpbyBvbmx5IHZpZGVvIHBsYXliYWNrCisKK1NiUGxheWVyIGNhbiBiZSBjcmVhdGVkIHdpdGggb25seSBhbiBhdWRpbyB0cmFjaywgd2l0aG91dCBhbnkgYWNjb21wYW55aW5nCit2aWRlbyB0cmFjay4gIFRoZSBTYlBsYXllciBpbXBsZW1lbnRhdGlvbiBtdXN0IG5vdyBiZSBhYmxlIHRvIHBsYXkgYmFjaworYSBzb2xlIGF1ZGlvIHRyYWNrLgorCisjIyMgUmVxdWlyZSBzdXBwb3J0IGZvciBjcmVhdGluZyBtdWx0aXBsZSBTYlBsYXllciBpbnN0YW5jZXMKKworRm9ybWVybHksIHRoZXJlIHdlcmUgbm8gdGVzdHMgZW5zdXJpbmcgdGhhdCBjYWxsaW5nIGBTYlBsYXllckNyZWF0ZSgpYCBtdWx0aXBsZQordGltZXMgKHdpdGhvdXQgY2FsbGluZyBgU2JQbGF5ZXJEZXN0cm95KClgIGluIGJldHdlZW4pIHdvdWxkIG5vdCBjcmFzaCwgYW5kCitsaWtld2lzZSBubyB0ZXN0cyBlbnN1cmluZyB0aGF0IGNhbGxpbmcgYFNiQXVkaW9TaW5rQ3JlYXRlKClgIG11bHRpcGxlIHRpbWVzCisod2l0aG91dCBjYWxsaW5nIGBTYkF1ZGlvU2lua0Rlc3Ryb3koKWAgaW4gYmV0d2Vlbikgd291bGQgbm90IGNyYXNoLgorYFNiUGxheWVyQ3JlYXRlKClgIG1heSByZXR1cm4gYGtTYlBsYXllckludmFsaWRgIGlmIGFkZGl0aW9uYWwgcGxheWVycyBhcmUgbm90CitzdXBwb3J0ZWQuIGBTYkF1ZGlvU2lua0NyZWF0ZSgpYCBtYXkgcmV0dXJuIGBrU2JBdWRpb25TaW5rSW52YWxpZGAgaWYgYWRkaXRpb25hbAorYXVkaW8gc2lua3MgYXJlIG5vdCBzdXBwb3J0ZWQuCisKKyMjIyBSZXF1aXJlIHN0cmljdGVyIGVycm9yIGhhbmRsaW5nIG9uIGNhbGxzIHNvbWUgU2JQbGF5ZXIqIGNhbGxzCisKK1NwZWNpZmljYWxseSwgYFNiUGxheWVyQ3JlYXRlKClgLCAgYFNiUGxheWVyQ3JlYXRlV2l0aFVybCgpYCBhbmQKK2BTYkRybUNyZWF0ZVN5c3RlbSgpYCBtdXN0IHJlc3VsdCBpbiBpbnZhbGlkIHJldHVybiB2YWx1ZXMgKGUuZy4KK2BrU2JQbGF5ZXJJbnZhbGlkYCBvciBga1NiRHJtU3lzdGVtSW52YWxpZGAgYXBwcm9wcmlhdGVseSkuCisKKyMjIyBSZWZpbmUgdGhlIERSTSBBUEkKKworU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGU6CisgMS4gQWRkIGEgY2FsbGJhY2sgdG8gU2JEcm1DcmVhdGVTeXN0ZW0gdGhhdCBhbGxvd3MgYSBEUk0gc3lzdGVtIHRvCisgICAgc2lnbmFsIHRoYXQgYSBEUk0gc2Vzc2lvbiBoYXMgY2xvc2VkIGZyb20gdGhlIFN0YXJib2FyZCBsYXllci4KKyAgICBQcmV2aW91c2x5LCBEUk0gc2Vzc2lvbnMgY291bGQgb25seSBiZSBjbG9zZWQgZnJvbSB0aGUgYXBwbGljYXRpb24KKyAgICBsYXllci4KKyAyLiBBbGxvdyBjYWxsaW5nIGBTYkRybVNlc3Npb25VcGRhdGVSZXF1ZXN0RnVuY2AgYW5kCisgICAgYFNiRHJtU2Vzc2lvblVwZGF0ZWRGdW5jYCB3aXRoIGV4dHJhIHN0YXR1cyBhbmQgb3B0aW9uYWwgZXJyb3IgbWVzc2FnZS4KKyAzLiBBZGQgcmVxdWVzdCB0eXBlIHBhcmFtZXRlciB0byBgU2JEcm1TZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmNgIHRvIHN1cHBvcnQKKyAgICBpbmRpdmlkdWFsaXphdGlvbiwgbGljZW5zZSByZW5ld2FsLCBhbmQgbGljZW5zZSByZWxlYXNlLgorCisjIyMgUmVtb3ZlIGtTYlN5c3RlbVBhdGhTb3VyY2VEaXJlY3RvcnkKKworVGVzdCBjb2RlIGxvb2tpbmcgZm9yIGl0cyBzdGF0aWMgaW5wdXQgZmlsZXMgc2hvdWxkIGluc3RlYWQgdXNlIHRoZSBgdGVzdGAKK3N1YmRpcmVjdG9yeSBpbiBga1NiU3lzdGVtUGF0aENvbnRlbnREaXJlY3RvcnlgLgorCisjIyMgUmVtb3ZlIGtTYlN5c3RlbVByb3BlcnR5UGxhdGZvcm1VdWlkCisKK1RoaXMgcHJvcGVydHkgd2FzIG9ubHkgZXZlciB1c2VkIGluIHBsYXRmb3JtcyB1c2luZyBgaW5fYXBwX2RpYWxgLgorVGhlIG9ubHkgdXNhZ2Ugb2YgdGhpcyBzeXN0ZW0gcHJvcGVydHkgd2FzIHJlcGxhY2VkIHdpdGggYQorc2VsZi1jb250YWluZWQgbWVjaGFuaXNtLgorCisjIyMgRGVwcmVjYXRlIGtTYk1lZGlhQXVkaW9TYW1wbGVUeXBlSW50MTYKKworYFNCX0hBU19RVUlSS19TVVBQT1JUX0lOVDE2X0FVRElPX1NBTVBMRVNgIGhhcyB0byBiZSBkZWZpbmVkIHRvIGNvbnRpbnVlCitzdXBwb3J0IGludDE2IGF1ZGlvIHNhbXBsZXMgYWZ0ZXIgdGhpcyB2ZXJzaW9uLgorCisjIyMgQWRkIHN1cHBvcnQgZm9yIFNiU3lzdGVtU3VwcG9ydHNSZXN1bWUoKQorCitQbGF0Zm9ybXMgZG9lc24ndCBuZWVkIHRvIHJlc3VtZSBhZnRlciBzdXNwZW5kIGNhbiByZXR1cm4gZmFsc2UgaW4KK2BTYlN5c3RlbVN1cHBvcnRzUmVzdW1lKClgIHRvIGZyZWUgdXAgdGhlIHJlc291cmNlIHVzZWQgYnkgcmVzdW1lIGFmdGVyCitzdXNwZW5kLgorUGxlYXNlIHNlZSB0aGUgY29tbWVudCBpbiBgc3lzdGVtLmhgIGZvciBtb3JlIGRldGFpbHMuCisKKyMjIyBTdXBwb3J0IHRoZSBga1NiS2V5TWljcm9waG9uZWAga2V5Y29kZQorCisjIyMgQWRkIHN1cHBvcnQgZm9yIG5ldyBkZWNvZGUgdGFyZ2V0IHR5cGUsIGBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmUxMEJpdFlVVkk0MjBgCisKK0FkZGVkIGBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmUxMEJpdFlVVkk0MjBgIHRvIHRoZSBgU2JEZWNvZGVUYXJnZXRGb3JtYXRgCitlbnVtIGluIG9yZGVyIHRvIHN1cHBvcnQgMTAtYml0IFlVViB0ZXh0dXJlcy4KKworIyMjIE9wdGlvbmFsbHkgcHJvdmlkZSBhYnNvbHV0ZSB0aW1lc3RhbXAgdG8gYFNiQXVkaW9TaW5rQ29uc3VtZUZyYW1lc0Z1bmMoKWAKKworYFNiQXVkaW9TaW5rQ29uc3VtZUZyYW1lc0Z1bmMoKWAgY2FuIG5vdyBvcHRpb25hbGx5IGFjY2VwdCBhbiBhYnNvbHV0ZQordGltZXN0YW1wIHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB3aGVuIHRoZSBmcmFtZXMgYXJlIGNvbnN1bWVkLgorUGxhdGZvcm1zIHRoYXQgaGF2ZSB0aGUgYGZyYW1lc19jb25zdW1lZGAgdXBkYXRlZCBhc3luY2hyb25vdXNseSBjYW4gaGF2ZQorbW9yZSBhY2N1cmF0ZSBhdWRpbyB0aW1lIHJlcG9ydGluZyB3aXRoIHRoaXMgZXh0cmEgcGFyYW1ldGVyLgorUGxlYXNlIHNlZSB0aGUgY29tbWVudCBpbiBgYXVkaW9fc2luay5oYCBmb3IgbW9yZSBkZXRhaWxzLgorCisjIyMgQWRkIHN1cHBvcnQgZm9yIHRoZSBgU2JBdG9taWM4YCB0eXBlIGFuZCBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworCisjIyMgSW50cm9kdWNlIGBTYk1lbW9yeVByb3RlY3QoKWAKKworYFNiTWVtb3J5UHJvdGVjdCgpYCBhbGxvd3MgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucyB0byBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkKK2hhdmUgYmVlbiBtYXBwZWQgd2l0aCBgU2JNZW1vcnlNYXBgLgorCisjIyMgQWRkIGEgYHRpbWVzdGFtcGAgZmllbGQgdG8gYFNiSW5wdXREYXRhYAorCitUaGlzIGFsbG93cyBwbGF0Zm9ybXMgdG8gcHJvdmlkZSBtb3JlIHByZWNpc2UgaW5mb3JtYXRpb24gb24gZXhhY3RseSB3aGVuCithbiBpbnB1dCBldmVudCB3YXMgZ2VuZXJhdGVkLiAgTm90ZSB0aGF0IGlmCitgU2JTeXN0ZW1IYXNDYXBhYmlsaXR5KGtTYlN5c3RlbUNhcGFiaWxpdHlTZXRzSW5wdXRUaW1lc3RhbXApYCByZXR1cm5zIGZhbHNlLAordGhlIGB0aW1lc3RhbXBgIGZpZWxkIG9mIGBTYklucHV0RGF0YWAgc2hvdWxkIGJlIGlnbm9yZWQgYnkgYXBwbGljYXRpb25zLgorCisjIyMgSW50cm9kdWNlcyBga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkYCBmbGFnLgorCitga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkYCwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIGBTYk1lbW9yeU1hcEZsYWdzKDApYCwgaXMKK2ludHJvZHVjZWQuICBXaGVuIGBTYk1lbW9yeU1hcCgpYCBpcyBjYWxsZWQgd2l0aCBga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkYCwKK29ubHkgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHNob3VsZCBiZSByZXNlcnZlZCBmb3IgdGhlIG1hcHBlZCBtZW1vcnksIGFuZCBub3QKK2FjdHVhbCBwaHlzaWNhbCBtZW1vcnkuCisKICMjIyBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgdmVyc2lvbnMgb2YgZmZtcGVnCiAKIEFuIGV4dHJhIHZlcnNpb24gYWdub3N0aWMgZmZtcGVnIGR5bmFtaWMgZGlzcGF0Y2ggbGF5ZXIgaXMgYWRkZWQgaW4gb3JkZXIgdG8KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvYXRvbWljLmggYi9zcmMvc3RhcmJvYXJkL2F0b21pYy5oCmluZGV4IGI0NjFkMzQuLmZmZjQzZGMgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvYXRvbWljLmgKKysrIGIvc3JjL3N0YXJib2FyZC9hdG9taWMuaApAQCAtMzAsNyArMzAsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0lOVFJPRFVDRV9BVE9NSUM4X1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogdHlwZWRlZiBpbnQ4X3QgU2JBdG9taWM4OwogI2VuZGlmCiB0eXBlZGVmIGludDMyX3QgU2JBdG9taWMzMjsKQEAgLTg4LDcgKzg4LDcgQEAKIHN0YXRpYyBTYkF0b21pYzMyIFNiQXRvbWljQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IFNiQXRvbWljMzIqIHB0cik7CiBzdGF0aWMgU2JBdG9taWMzMiBTYkF0b21pY1JlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBTYkF0b21pYzMyKiBwdHIpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfSU5UUk9EVUNFX0FUT01JQzhfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAvLyBPdmVybG9hZGVkIGZ1bmN0aW9ucyBmb3IgQXRvbWljOC4KIHN0YXRpYyBTYkF0b21pYzggU2JBdG9taWNSZWxlYXNlX0NvbXBhcmVBbmRTd2FwOCh2b2xhdGlsZSBTYkF0b21pYzgqIHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzggb2xkX3ZhbHVlLApAQCAtMjYxLDcgKzI2MSw3IEBACiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBhdG9taWMgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfSU5UUk9EVUNFX0FUT01JQzhfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiBpbmxpbmUgU2JBdG9taWM4IFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgU2JBdG9taWM4KiBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWM4IG9sZF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzggbmV3X3ZhbHVlKSB7CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCBiL3NyYy9zdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oCmluZGV4IDY0Y2JmNjUuLjEzNzFkMmUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oCisrKyBiL3NyYy9zdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oCkBAIC00MiwxOSArNDIsMTkgQEAKIAogLy8gVGhlIG1heGltdW0gQVBJIHZlcnNpb24gYWxsb3dlZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIFN0YXJib2FyZCBoZWFkZXJzLAogLy8gaW5jbHVzaXZlLgotI2RlZmluZSBTQl9NQVhJTVVNX0FQSV9WRVJTSU9OIDEwCisjZGVmaW5lIFNCX01BWElNVU1fQVBJX1ZFUlNJT04gMTEKIAogLy8gVGhlIEFQSSB2ZXJzaW9uIHRoYXQgaXMgY3VycmVudGx5IG9wZW4gZm9yIGNoYW5nZXMsIGFuZCB0aGVyZWZvcmUgaXMgbm90CiAvLyBzdGFibGUgb3IgZnJvemVuLiBQcm9kdWN0aW9uLW9yaWVudGVkIHBvcnRzIHNob3VsZCBhdm9pZCBkZWNsYXJpbmcgdGhhdCB0aGV5CiAvLyBpbXBsZW1lbnQgdGhlIGV4cGVyaW1lbnRhbCBTdGFyYm9hcmQgQVBJIHZlcnNpb24uCi0jZGVmaW5lIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTiAxMAorI2RlZmluZSBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04gMTEKIAogLy8gVGhlIG5leHQgQVBJIHZlcnNpb24gdG8gYmUgZnJvemVuLCBidXQgaXMgc3RpbGwgc3ViamVjdCB0byBlbWVyZ2VuY3kKIC8vIGNoYW5nZXMuIEl0IGlzIHJlYXNvbmFibGUgdG8gYmFzZSBhIHBvcnQgb24gdGhlIFJlbGVhc2UgQ2FuZGlkYXRlIEFQSQogLy8gdmVyc2lvbiwgYnV0IGJlIGF3YXJlIHRoYXQgc21hbGwgaW5jb21wYXRpYmxlIGNoYW5nZXMgbWF5IHN0aWxsIGJlIG1hZGUgdG8KIC8vIGl0LgogLy8gVGhlIGZvbGxvd2luZyB3aWxsIGJlIHVuY29tbWVudGVkIHdoZW4gYW4gQVBJIHZlcnNpb24gaXMgYSByZWxlYXNlIGNhbmRpZGF0ZS4KLS8vICNkZWZpbmUgU0JfUkVMRUFTRV9DQU5ESURBVEVfQVBJX1ZFUlNJT04gOQorI2RlZmluZSBTQl9SRUxFQVNFX0NBTkRJREFURV9BUElfVkVSU0lPTiAxMAogCiAvLyAtLS0gRXhwZXJpbWVudGFsIEZlYXR1cmUgRGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjgsMTMyICs2OCw2IEBACiAvLyAgIC8vICAgZXhwb3NlcyBmdW5jdGlvbmFsaXR5IGZvciBteSBuZXcgZmVhdHVyZS4KIC8vICAgI2RlZmluZSBTQl9NWV9FWFBFUklNRU5UQUxfRkVBVFVSRV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgogCi0vLyBBZGQgc3VwcG9ydCBmb3IgcGxheWVyX2ZpbHRlcl90ZXN0cy4KLS8vICAgUmVxdWlyZSBjb21waWxpbmcgJ3BsYXllcl9maWx0ZXJfdGVzdHMnIHRlc3QgdGFyZ2V0IHNvdXJjZXMgb24gYWxsCi0vLyAgIHBsYXRmb3JtcywgaW5jbHVkaW5nIGF1ZGlvX2RlY29kZXJfdGVzdHMuY2MgYW5kIHZpZGVvX2RlY29kZXJfdGVzdC5jYy4gRm9yCi0vLyAgIHRoaXMgU3RhcmJvYXJkIEFQSSB2ZXJzaW9uIGFuZCBiZXlvbmQsIFNCX0hBUyhQTEFZRVJfRklMVEVSX1RFU1RTKSBpcyB0cnVlLgotI2RlZmluZSBTQl9QTEFZRVJfRklMVEVSX1RFU1RTX1JFUVVJUkVEX0FQSV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgotCi0vLyBEZXByZWNhdGUgU2JNZWRpYVRpbWUgZm9yIFNiVGltZS4KLS8vICAgU2JNZWRpYVRpbWUsIHdoaWNoIGlzIDkwa2h6IGJhc2VkLCB3YXMgdXNlZCB0byByZXByZXNlbnQgdGltZXN0YW1wcyBhbmQKLS8vICAgZHVyYXRpb24gcmVsYXRlZCB0byBTYlBsYXllci4gIEFzIG1vc3Qgb2YgdGhlIHBsYXRmb3JtcyByZXByZXNlbnQgdmlkZW8KLS8vICAgcmVsYXRlZCB0aW1lcyBpbiBtaWxsaXNlY29uZHMgb3IgbWljcm9zZWNvbmRzLCB0aGlzIGNhdXNlcyBhIGxvdCBvZgotLy8gICBvdGhlcndpc2UgdW5uZWNlc3NhcnkgY29udmVyc2lvbi4gIE5vdyBhbGwgdGltZXN0YW1wcyBhbmQgZHVyYXRpb24gcmVsYXRlZAotLy8gICB0byBTYlBsYXllciBhcmUgcmVwcmVzZW50ZWQgYnkgU2JUaW1lIGRpcmVjdGx5LgotI2RlZmluZSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gQWRkIHN1cHBvcnQgZm9yIHBsYXllciBlcnJvciBtZXNzYWdlcy4KLSNkZWZpbmUgU0JfUExBWUVSX0VSUk9SX01FU1NBR0VfQVBJX1ZFUlNJT04gU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0KLS8vIEFkZCBzdXBwb3J0IGZvciBzeXN0ZW0tbGV2ZWwgY2xvc2VkIGNhcHRpb24gc2V0dGluZ3MuCi0vLyAgIFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygpIGFuZCBTYkFjY2Vzc2liaWxpdHlTZXRDYXB0aW9uc0VuYWJsZWQoKQotLy8gICBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIHN1cHBvcnRpbmcgc3RydWN0dXJlIGRlZmluaXRpb25zIGhhdmUgYmVlbiBhZGRlZAotLy8gICB0byBhY2Nlc3NpYmlsaXR5LmguICBQbGF0Zm9ybSBuZWVkIHRvIGRlZmluZSBTQl9IQVNfQ0FQVElPTlMgdG8gMSBpbiBvcmRlcgotLy8gICB0byBlbmFibGUgdGhlIGludGVyZmFjZS4KLSNkZWZpbmUgU0JfQUNDRVNTSUJJTElUWV9DQVBUSU9OU19BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gQWRkIHN1cHBvcnQgZm9yIGF1ZGlvbGVzcyB2aWRlbyBwbGF5YmFjay4KLS8vICAgU2JQbGF5ZXIgY2FuIGJlIGNyZWF0ZWQgd2l0aCBvbmx5IGEgdmlkZW8gdHJhY2ssIHdpdGhvdXQgYW55IGFjY29tcGFueWluZwotLy8gICBhdWRpbyB0cmFjay4gIFRoZSBTYlBsYXllciBpbXBsZW1lbnRhdGlvbiBtdXN0IG5vdyBiZSBhYmxlIHRvIHBsYXkgYmFjawotLy8gICBhIHNvbGUgdmlkZW8gdHJhY2suCi0jZGVmaW5lIFNCX0FVRElPTEVTU19WSURFT19BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gQWRkIHN1cHBvcnQgZm9yIGF1ZGlvIG9ubHkgdmlkZW8gcGxheWJhY2suCi0vLyAgIFNiUGxheWVyIGNhbiBiZSBjcmVhdGVkIHdpdGggb25seSBhbiBhdWRpbyB0cmFjaywgd2l0aG91dCBhbnkgYWNjb21wYW55aW5nCi0vLyAgIHZpZGVvIHRyYWNrLiAgVGhlIFNiUGxheWVyIGltcGxlbWVudGF0aW9uIG11c3Qgbm93IGJlIGFibGUgdG8gcGxheSBiYWNrCi0vLyAgIGEgc29sZSBhdWRpbyB0cmFjay4KLSNkZWZpbmUgU0JfQVVESU9fT05MWV9WSURFT19BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gUmVxdWlyZSBzdXBwb3J0IGZvciBjcmVhdGluZyBtdWx0aXBsZSBTYlBsYXllciBpbnN0YW5jZXMuCi0vLyBGb3JtZXJseSwgdGhlcmUgd2VyZSBubyB0ZXN0cyBlbnN1cmluZyB0aGF0IGNhbGxpbmcgU2JQbGF5ZXJDcmVhdGUgbXVsdGlwbGUKLS8vIHRpbWVzICh3aXRob3V0IGNhbGxpbmcgU2JQbGF5ZXJEZXN0cm95IGluIGJldHdlZW4pIHdvdWxkIG5vdCBjcmFzaCwgYW5kCi0vLyBsaWtld2lzZSBubyB0ZXN0cyBlbnN1cmluZyB0aGF0IGNhbGxpbmcgU2JBdWRpb1NpbmtDcmVhdGUgbXVsdGlwbGUgdGltZXMKLS8vICh3aXRob3V0IGNhbGxpbmcgU2JBdWRpb1NpbmtEZXN0cm95IGluIGJldHdlZW4pIHdvdWxkIG5vdCBjcmFzaC4KLS8vIFNiUGxheWVyQ3JlYXRlIG1heSByZXR1cm4ga1NiUGxheWVySW52YWxpZCBpZiBhZGRpdGlvbmFsIHBsYXllcnMgYXJlIG5vdAotLy8gc3VwcG9ydGVkLiBTYkF1ZGlvU2lua0NyZWF0ZSBtYXkgcmV0dXJuIGtTYkF1ZGlvblNpbmtJbnZhbGlkIGlmIGFkZGl0aW9uYWwKLS8vIGF1ZGlvIHNpbmtzIGFyZSBub3Qgc3VwcG9ydGVkLgotI2RlZmluZSBTQl9NVUxUSV9QTEFZRVJfQVBJX1ZFUlNJT04gU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0KLS8vIFJlcXVpcmUgc3RyaWN0ZXIgZXJyb3IgaGFuZGxpbmcgb24gY2FsbHMgc29tZSBTYlBsYXllciogY2FsbHMuCi0vLyBTcGVjaWZpY2FsbHksIFNiUGxheWVyQ3JlYXRlLCAgU2JQbGF5ZXJDcmVhdGVXaXRoVXJsIGFuZCBTYkRybUNyZWF0ZVN5c3RlbQotLy8gbXVzdCByZXN1bHQgaW4gaW52YWxpZCByZXR1cm4gdmFsdWVzIChlLmcuIHxrU2JQbGF5ZXJJbnZhbGlkfCBvcgotLy8gfGtTYkRybVN5c3RlbUludmFsaWR8IGFwcHJvcHJpYXRlbHkpLgotI2RlZmluZSBTQl9OVUxMX0NBTExCQUNLU19JTlZBTElEX1JFVFVSTl9BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gUmVmaW5lIHRoZSBEUk0gQVBJLgotLy8gU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGU6Ci0vLyAgIDEuIEFkZCBhIGNhbGxiYWNrIHRvIFNiRHJtQ3JlYXRlU3lzdGVtIHRoYXQgYWxsb3dzIGEgRFJNIHN5c3RlbSB0bwotLy8gICAgICBzaWduYWwgdGhhdCBhIERSTSBzZXNzaW9uIGhhcyBjbG9zZWQgZnJvbSB0aGUgU3RhcmJvYXJkIGxheWVyLgotLy8gICAgICBQcmV2aW91c2x5LCBEUk0gc2Vzc2lvbnMgY291bGQgb25seSBiZSBjbG9zZWQgZnJvbSB0aGUgYXBwbGljYXRpb24KLS8vICAgICAgbGF5ZXIuCi0vLyAgIDIuIEFsbG93IGNhbGxpbmcgfFNiRHJtU2Vzc2lvblVwZGF0ZVJlcXVlc3RGdW5jfCBhbmQKLS8vICAgICAgfFNiRHJtU2Vzc2lvblVwZGF0ZWRGdW5jfCB3aXRoIGV4dHJhIHN0YXR1cyBhbmQgb3B0aW9uYWwgZXJyb3IgbWVzc2FnZS4KLS8vICAgMy4gQWRkIHJlcXVlc3QgdHlwZSBwYXJhbWV0ZXIgdG8gfFNiRHJtU2Vzc2lvblVwZGF0ZVJlcXVlc3RGdW5jfCB0byBzdXBwb3J0Ci0vLyAgICAgIGluZGl2aWR1YWxpemF0aW9uLCBsaWNlbnNlIHJlbmV3YWwsIGFuZCBsaWNlbnNlIHJlbGVhc2UuCi0jZGVmaW5lIFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgotCi0vLyBSZW1vdmUga1NiU3lzdGVtUGF0aFNvdXJjZURpcmVjdG9yeS4KLS8vICAgVGVzdCBjb2RlIGxvb2tpbmcgZm9yIGl0cyBzdGF0aWMgaW5wdXQgZmlsZXMgc2hvdWxkIGluc3RlYWQgdXNlIHRoZSBgdGVzdGAKLS8vICAgc3ViZGlyZWN0b3J5IGluIGtTYlN5c3RlbVBhdGhDb250ZW50RGlyZWN0b3J5LgotI2RlZmluZSBTQl9QQVRIX1NPVVJDRV9ESVJfUkVNT1ZFRF9BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gUmVtb3ZlIGtTYlN5c3RlbVByb3BlcnR5UGxhdGZvcm1VdWlkLgotLy8gICBUaGlzIHByb3BlcnR5IHdhcyBvbmx5IGV2ZXIgdXNlZCBpbiBwbGF0Zm9ybXMgdXNpbmcgYGluX2FwcF9kaWFsYC4KLS8vICAgVGhlIG9ubHkgdXNhZ2Ugb2YgdGhpcyBzeXN0ZW0gcHJvcGVydHkgd2FzIHJlcGxhY2VkIHdpdGggYQotLy8gICBzZWxmLWNvbnRhaW5lZCBtZWNoYW5pc20uCi0jZGVmaW5lIFNCX1BST1BFUlRZX1VVSURfUkVNT1ZFRF9BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gRGVwcmVjYXRlIGtTYk1lZGlhQXVkaW9TYW1wbGVUeXBlSW50MTYuCi0vLyAgIFNCX0hBU19RVUlSS19TVVBQT1JUX0lOVDE2X0FVRElPX1NBTVBMRVMgaGFzIHRvIGJlIGRlZmluZWQgdG8gY29udGludWUKLS8vICAgc3VwcG9ydCBpbnQxNiBhdWRpbyBzYW1wbGVzIGFmdGVyIHRoaXMgdmVyc2lvbi4KLSNkZWZpbmUgU0JfREVQUkVDQVRFX0lOVDE2X0FVRElPX1NBTVBMRV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgotCi0vLyBBZGQgc3VwcG9ydCBmb3IgU2JTeXN0ZW1TdXBwb3J0c1Jlc3VtZSgpLgotLy8gICBQbGF0Zm9ybXMgZG9lc24ndCBuZWVkIHRvIHJlc3VtZSBhZnRlciBzdXNwZW5kIGNhbiByZXR1cm4gZmFsc2UgaW4KLS8vICAgU2JTeXN0ZW1TdXBwb3J0c1Jlc3VtZSgpIHRvIGZyZWUgdXAgdGhlIHJlc291cmNlIHVzZWQgYnkgcmVzdW1lIGFmdGVyCi0vLyAgIHN1c3BlbmQuCi0vLyAgIFBsZWFzZSBzZWUgdGhlIGNvbW1lbnQgaW4gc3lzdGVtLmggZm9yIG1vcmUgZGV0YWlscy4KLSNkZWZpbmUgU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gU3VwcG9ydCB0aGUga1NiS2V5TWljcm9waG9uZSBrZXljb2RlLgotI2RlZmluZSBTQl9NSUNST1BIT05FX0tFWV9DT0RFX0FQSV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgotCi0vLyBBZGQgc3VwcG9ydCBmb3IgbmV3IGRlY29kZSB0YXJnZXQgdHlwZSwKLS8vIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMC4KLS8vICAgQWRkZWQga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwIHRvIHRoZSBTYkRlY29kZVRhcmdldEZvcm1hdAotLy8gICBlbnVtIGluIG9yZGVyIHRvIHN1cHBvcnQgMTAtYml0IFlVViB0ZXh0dXJlcy4KLSNkZWZpbmUgU0JfMTBfQklUX1lVVl9JNDIwX0RFQ09ERV9UQVJHRVRfU1VQUE9SVF9BUElfVkVSU0lPTiBcCi0gIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgotCi0vLyBPcHRpb25hbGx5IHByb3ZpZGUgYWJzb2x1dGUgdGltZXN0YW1wIHRvIFNiQXVkaW9TaW5rQ29uc3VtZUZyYW1lc0Z1bmMoKS4KLS8vICAgU2JBdWRpb1NpbmtDb25zdW1lRnJhbWVzRnVuYygpIGNhbiBub3cgb3B0aW9uYWxseSBhY2NlcHQgYW4gYWJzb2x1dGUKLS8vICAgdGltZXN0YW1wIHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB3aGVuIHRoZSBmcmFtZXMgYXJlIGNvbnN1bWVkLgotLy8gICBQbGF0Zm9ybXMgdGhhdCBoYXZlIHRoZSB8ZnJhbWVzX2NvbnN1bWVkfCB1cGRhdGVkIGFzeW5jaHJvbm91c2x5IGNhbiBoYXZlCi0vLyAgIG1vcmUgYWNjdXJhdGUgYXVkaW8gdGltZSByZXBvcnRpbmcgd2l0aCB0aGlzIGV4dHJhIHBhcmFtZXRlci4KLS8vICAgUGxlYXNlIHNlZSB0aGUgY29tbWVudCBpbiBhdWRpb19zaW5rLmggZm9yIG1vcmUgZGV0YWlscy4KLSNkZWZpbmUgU0JfQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElOR19BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gQWRkIHN1cHBvcnQgZm9yIHRoZSBTYkF0b21pYzggdHlwZSBhbmQgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMuCi0jZGVmaW5lIFNCX0lOVFJPRFVDRV9BVE9NSUM4X1ZFUlNJT04gU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0KLS8vIEludHJvZHVjZSBTYk1lbW9yeVByb3RlY3QoKS4KLS8vICAgU2JNZW1vcnlQcm90ZWN0KCkgYWxsb3dzIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMgdG8gYmUgY2hhbmdlZCBhZnRlciB0aGV5Ci0vLyAgIGhhdmUgYmVlbiBtYXBwZWQgd2l0aCBgU2JNZW1vcnlNYXBgLgotI2RlZmluZSBTQl9NRU1PUllfUFJPVEVDVF9BUElfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLQotLy8gQWRkIGEgfHRpbWVzdGFtcHwgZmllbGQgdG8gU2JJbnB1dERhdGEuCi0vLyAgIFRoaXMgYWxsb3dzIHBsYXRmb3JtcyB0byBwcm92aWRlIG1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBvbiBleGFjdGx5IHdoZW4KLS8vICAgYW4gaW5wdXQgZXZlbnQgd2FzIGdlbmVyYXRlZC4gIE5vdGUgdGhhdCBpZgotLy8gICBTYlN5c3RlbUhhc0NhcGFiaWxpdHkoa1NiU3lzdGVtQ2FwYWJpbGl0eVNldHNJbnB1dFRpbWVzdGFtcCkgcmV0dXJucyBmYWxzZSwKLS8vICAgdGhlIHx0aW1lc3RhbXB8IGZpZWxkIG9mIFNiSW5wdXREYXRhIHNob3VsZCBiZSBpZ25vcmVkIGJ5IGFwcGxpY2F0aW9ucy4KLSNkZWZpbmUgU0JfSU5QVVRfVElNRVNUQU1QX0FQSV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTgotCi0vLyBJbnRyb2R1Y2VzIGtTYk1lbW9yeU1hcFByb3RlY3RSZXNlcnZlZCBmbGFnLgotLy8gICAga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkLCB3aGljaCBpcyBTYk1lbW9yeU1hcEZsYWdzKDApLCB3aGVuIHVzZWQgb24KLS8vICAgIGEgbWVtb3J5IHJlZ2lvbiwgb25seSByZXNlcnZlcyBpdHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRoYXQncyBub3QKLS8vICAgIGFjY2Vzc2libGUuCi0jZGVmaW5lIFNCX01FTU9SWV9QUk9URUNUX1JFU0VSVkVEX0ZMQUdfQVBJX1ZFUlNJT04gU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0KIC8vIC0tLSBSZWxlYXNlIENhbmRpZGF0ZSBGZWF0dXJlIERlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyAtLS0gQ29tbW9uIERldGVjdGVkIEZlYXR1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY3Miw3ICs1NDYsNyBAQAogI2VuZGlmICAvLyBkZWZpbmVkKFNCX0hBU19EUk1fS0VZX1NUQVRVU0VTKQogI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSA2CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAjaWYgZGVmaW5lZChTQl9IQVNfRFJNX1NFU1NJT05fQ0xPU0VEKQogI2lmICFTQl9IQVMoRFJNX1NFU1NJT05fQ0xPU0VEKQogI2Vycm9yICJTQl9IQVNfRFJNX1NFU1NJT05fQ0xPU0VEIGlzIHJlcXVpcmVkIGluIHRoaXMgQVBJIHZlcnNpb24uIgpAQCAtNjgwLDcgKzU1NCw3IEBACiAjZWxzZSAgIC8vIGRlZmluZWQoU0JfSEFTX0RSTV9TRVNTSU9OX0NMT1NFRCkKICNkZWZpbmUgU0JfSEFTX0RSTV9TRVNTSU9OX0NMT1NFRCAxCiAjZW5kaWYgIC8vIGRlZmluZWQoU0JfSEFTX0RSTV9TRVNTSU9OX0NMT1NFRCkKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogI2lmIFNCX0FQSV9WRVJTSU9OID49IDUKICNpZiAhZGVmaW5lZChTQl9IQVNfU1BFRUNIX1JFQ09HTklaRVIpCkBAIC03MDEsMzUgKzU3NSwzNCBAQAogI2Vycm9yICJTQl9IQVNfT05fU0NSRUVOX0tFWUJPQVJEIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBBUEkgdmVyc2lvbi4iCiAjZW5kaWYKIAotI2lmIFNCX0hBUyhDQVBUSU9OUykgJiYgXAotICAgIChTQl9BUElfVkVSU0lPTiA8IFNCX0FDQ0VTU0lCSUxJVFlfQ0FQVElPTlNfQVBJX1ZFUlNJT04pCisjaWYgU0JfSEFTKENBUFRJT05TKSAmJiAoU0JfQVBJX1ZFUlNJT04gPCAxMCkKICNlcnJvciAiU0JfSEFTX0NBUFRJT05TIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBBUEkgdmVyc2lvbi4iCiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0FVRElPTEVTU19WSURFT19BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAjZGVmaW5lIFNCX0hBU19BVURJT0xFU1NfVklERU8gMQogI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9QTEFZRVJfRklMVEVSX1RFU1RTX1JFUVVJUkVEX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICNkZWZpbmUgU0JfSEFTX1BMQVlFUl9GSUxURVJfVEVTVFMgMQogI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9QTEFZRVJfRVJST1JfTUVTU0FHRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAjZGVmaW5lIFNCX0hBU19QTEFZRVJfRVJST1JfTUVTU0FHRSAxCiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX0lOVDE2X0FVRElPX1NBTVBMRV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogI2lmICFTQl9IQVNfUVVJUksoU1VQUE9SVF9JTlQxNl9BVURJT19TQU1QTEVTKQogI2RlZmluZSBTQl9IQVNfUVVJUktfU1VQUE9SVF9JTlQxNl9BVURJT19TQU1QTEVTIDEKICNlbmRpZiAgLy8gIVNCX0hBU19RVUlSSyhTVVBQT1JUX0lOVDE2X0FVRElPX1NBTVBMRVMpCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX0lOVDE2X0FVRElPX1NBTVBMRV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0FTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkdfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogI2lmICFkZWZpbmVkKFNCX0hBU19BU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQogI2Vycm9yIFlvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfSEFTX0FTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkcgaW4gQVBJIFwKLSAgICB2ZXJzaW9uIFNCX0FTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkdfQVBJX1ZFUlNJT04gb3IgbGF0ZXIuCisgICAgdmVyc2lvbiAxMCBvciBsYXRlci4KICNlbmRpZiAgLy8gIWRlZmluZWQoU0JfSEFTX0FTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkcpCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0FTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkdfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogLy8gLS0tIERlcml2ZWQgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi9saW51eC94NjR3bC9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjIGIvc3JjL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3g2NHdsL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKaW5kZXggODc3OTFiMy4uMzc0Y2JmNSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3g2NHdsL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3g2NHdsL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKQEAgLTM2LDcgKzM2LDcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX1BST1BFUlRZX1VVSURfUkVNT1ZFRF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogYm9vbCBHZXRQbGF0Zm9ybVV1aWQoY2hhciogb3V0X3ZhbHVlLCBpbnQgdmFsdWVfbGVuZ3RoKSB7CiAgIHN0cnVjdCBpZnJlcSBpbnRlcmZhY2U7CkBAIC04MCw3ICs4MCw3IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX1BST1BFUlRZX1VVSURfUkVNT1ZFRF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKIH0gIC8vIG5hbWVzcGFjZQogCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlQbGF0Zm9ybU5hbWU6CiAgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsIGtQbGF0Zm9ybU5hbWUpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9QUk9QRVJUWV9VVUlEX1JFTU9WRURfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVBsYXRmb3JtVXVpZDoKICAgICAgIHJldHVybiBHZXRQbGF0Zm9ybVV1aWQob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX1BST1BFUlRZX1VVSURfUkVNT1ZFRF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKICAgICBkZWZhdWx0OgogICAgICAgU0JfRExPRyhXQVJOSU5HKSA8PCBfX0ZVTkNUSU9OX18KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvYXRvbWljX3B1YmxpYy5oIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9hdG9taWNfcHVibGljLmgKaW5kZXggMjk0YjY0Ni4uNTAxNThjMCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9hdG9taWNfcHVibGljLmgKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9hdG9taWNfcHVibGljLmgKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmluZGV4IDE4ZWM0ZWEuLjRmMDg5MDIgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9neXBfY29uZmlndXJhdGlvbi5neXBpCmluZGV4IDZlNmY2YTcuLjg2ZThhZjEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL2d5cF9jb25maWd1cmF0aW9uLnB5CmluZGV4IDM4MmE2YWQuLjgyYmEzNjkgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9saWJyYXJpZXMuZ3lwaSBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvbGlicmFyaWVzLmd5cGkKaW5kZXggMTM4NmY3My4uZDc1Yjc0MSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9saWJyYXJpZXMuZ3lwaQorKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL2xpYnJhcmllcy5neXBpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAxNiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL21haW4uY2MgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL21haW4uY2MKaW5kZXggNWRlOWE0My4uMjdmYTM2OCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9tYWluLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvbWFpbi5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKaW5kZXggYzY0NTQ2Mi4uMTI2MGM5YiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9zeXN0ZW0uZ3lwIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9zeXN0ZW0uZ3lwCmluZGV4IDE4MjhiMTUuLjc4YzBjM2IgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvc3lzdGVtLmd5cAorKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL3N5c3RlbS5neXAKQEAgLTEsNiArMSwxNiBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTggU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiB7CiAgICd2YXJpYWJsZXMnOiB7CiAgICAgJ3BrZy1jb25maWcnOiAncGtnLWNvbmZpZycsCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKaW5kZXggYTJhNjljNi4uNDk0NGIzMyAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL2FybXY3bC9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vYXJtdjdsL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmluZGV4IDIxZTkzNGUuLjNjN2I5YTEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9hcm12N2wvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYWxzYS9hbHNhX2F1ZGlvX3NpbmtfdHlwZS5jYyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYWxzYS9hbHNhX2F1ZGlvX3NpbmtfdHlwZS5jYwppbmRleCAzYTg5ZDhkLi5kYzEyM2RlIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2Fsc2EvYWxzYV9hdWRpb19zaW5rX3R5cGUuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hbHNhL2Fsc2FfYXVkaW9fc2lua190eXBlLmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTggU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuY2MgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2Fsc2EvYWxzYV91dGlsLmNjCmluZGV4IDFhZWUzZmQuLmJmZWFlZjEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hbHNhL2Fsc2FfdXRpbC5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE4IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2Fsc2EvYWxzYV91dGlsLmggYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2Fsc2EvYWxzYV91dGlsLmgKaW5kZXggNDg3NTBiOC4uNjQzNDA3YiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hbHNhL2Fsc2FfdXRpbC5oCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuaApAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE4IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2Fsc2EvYXVkaW9fc2lua19pc19hdWRpb19zYW1wbGVfdHlwZV9zdXBwb3J0ZWQuY2MgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2Fsc2EvYXVkaW9fc2lua19pc19hdWRpb19zYW1wbGVfdHlwZV9zdXBwb3J0ZWQuY2MKaW5kZXggYmE5MjExMC4uYjlhZjU3ZiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hbHNhL2F1ZGlvX3NpbmtfaXNfYXVkaW9fc2FtcGxlX3R5cGVfc3VwcG9ydGVkLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYWxzYS9hdWRpb19zaW5rX2lzX2F1ZGlvX3NhbXBsZV90eXBlX3N1cHBvcnRlZC5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE4IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2F0b21pY19wdWJsaWMuaCBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXRvbWljX3B1YmxpYy5oCmluZGV4IDZiYmZhMGQuLjg3YTg3OTcgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXRvbWljX3B1YmxpYy5oCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXRvbWljX3B1YmxpYy5oCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXVkaW8vYXVkaW9fc2lua19hZGFwdG9yLmNjIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX2FkYXB0b3IuY2MKaW5kZXggNmUyNmFiZS4uY2FkOTlkZSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX2FkYXB0b3IuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX2FkYXB0b3IuY2MKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZCBBbGwgUmlnaHRzIFJlc2VydmVkCisvLyBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIENvYmFsdCBBdXRob3JzIENvLiwgTHRkIEFsbCBSaWdodHMgUmVzZXJ2ZWQKIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXVkaW8vYXVkaW9fc2lua19wcml2YXRlLmNjIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX3ByaXZhdGUuY2MKaW5kZXggYjc2YzUxYy4uZWRjY2Q3NSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX3ByaXZhdGUuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX3ByaXZhdGUuY2MKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZCBBbGwgUmlnaHRzIFJlc2VydmVkCisvLyBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIENvYmFsdCBBdXRob3JzIENvLiwgTHRkIEFsbCBSaWdodHMgUmVzZXJ2ZWQKIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXVkaW8vYXVkaW9fc2lua19wcml2YXRlLmggYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2F1ZGlvL2F1ZGlvX3NpbmtfcHJpdmF0ZS5oCmluZGV4IDVmZTNhMjguLjQ0ODY4N2YgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvYXVkaW8vYXVkaW9fc2lua19wcml2YXRlLmgKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9hdWRpby9hdWRpb19zaW5rX3ByaXZhdGUuaApAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy8vIENvcHlyaWdodCAoYykgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMgQ28uLCBMdGQgQWxsIFJpZ2h0cyBSZXNlcnZlZAogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmluZGV4IGQyMGU4Y2EuLmY2Yzc4NzUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9nZXRfaG9tZV9kaXJlY3RvcnkuY2MgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2dldF9ob21lX2RpcmVjdG9yeS5jYwppbmRleCBlMDE3ZTRkLi5jZDE0NDZjIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2dldF9ob21lX2RpcmVjdG9yeS5jYworKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2dldF9ob21lX2RpcmVjdG9yeS5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKaW5kZXggNDVlODA1NS4uY2VmNjMxMiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMjgsMTEgKzI4LDYgQEAKICAgICAjIHJlbmRlcmVyLgogICAgICdzY3JhdGNoX3N1cmZhY2VfY2FjaGVfc2l6ZV9pbl9ieXRlcycgOiAwLAogCi0gICAgIyBUaGlzIHNob3VsZCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBpbiBjb2JhbHQvYmFzZS5neXBpLiBTZWUgdGhlIGNvbW1lbnQKLSAgICAjIHRoZXJlIGZvciBhY2NlcHRhYmxlIHZhbHVlcyBmb3IgdGhpcyB2YXJpYWJsZS4KLSAgICAnamF2YXNjcmlwdF9lbmdpbmUnOiAnbW96anMtNDUnLAotICAgICdjb2JhbHRfZW5hYmxlX2ppdCc6IDAsCi0KICAgICAnbGlua2VyX2ZsYWdzJzogWwogICAgICAgJy1XbCwtLXdyYXA9ZWdsR2V0RGlzcGxheScsCiAgICAgXSwKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvbG9nL2xvZy5jYyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvbG9nL2xvZy5jYwppbmRleCAwYmMzMjQzLi41N2FkZDk2IDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL2xvZy9sb2cuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9sb2cvbG9nLmNjCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChjKSAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQgQWxsIFJpZ2h0cyBSZXNlcnZlZAorKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIENvYmFsdCBBdXRob3JzIENvLiwgTHRkIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvcGxheWVyL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWQuY2MgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3BsYXllci9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkLmNjCmluZGV4IGQzNDVkYTAuLmFiYTdmOGUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvcGxheWVyL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWQuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9wbGF5ZXIvcGxheWVyX291dHB1dF9tb2RlX3N1cHBvcnRlZC5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE4IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3N0YXJib2FyZF9jb21tb24uZ3lwIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9zdGFyYm9hcmRfY29tbW9uLmd5cAppbmRleCBkNjA1NDk2Li45MmU0YjAzIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3N0YXJib2FyZF9jb21tb24uZ3lwCisrKyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvc3RhcmJvYXJkX2NvbW1vbi5neXAKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvc3lzdGVtLmd5cCBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvc3lzdGVtLmd5cAppbmRleCA4ODUwZTc1Li44YmZjMDUxIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3N5c3RlbS5neXAKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9zeXN0ZW0uZ3lwCkBAIC0xLDYgKzEsMTYgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogewogICAndmFyaWFibGVzJzogewogICAgICdwa2ctY29uZmlnJzogJ3BrZy1jb25maWcnLApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9zeXN0ZW1fZ2V0X2Nvbm5lY3Rpb25fdHlwZS5jYyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvc3lzdGVtX2dldF9jb25uZWN0aW9uX3R5cGUuY2MKaW5kZXggMDYxN2ZkNS4uM2M2ZTYzZiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC9zeXN0ZW1fZ2V0X2Nvbm5lY3Rpb25fdHlwZS5jYworKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3N5c3RlbV9nZXRfY29ubmVjdGlvbl90eXBlLmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvd2F5bGFuZC9hcHBsaWNhdGlvbl90aXplbi5jYyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvd2F5bGFuZC9hcHBsaWNhdGlvbl90aXplbi5jYwppbmRleCA4NWE5NDgwLi5kNzdlNDU4IDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3dheWxhbmQvYXBwbGljYXRpb25fdGl6ZW4uY2MKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3RpemVuLmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTggU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvd2F5bGFuZC9hcHBsaWNhdGlvbl90aXplbi5oIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3RpemVuLmgKaW5kZXggZWVlNTg4Yy4uYjFhMDhkMCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3RpemVuLmgKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3RpemVuLmgKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxOCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL3dpbmRvd19pbnRlcm5hbF90aXplbi5jYyBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWxfdGl6ZW4uY2MKaW5kZXggMzRmY2EzNS4uNmEzZDA4NiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL3dpbmRvd19pbnRlcm5hbF90aXplbi5jYworKysgYi9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3dheWxhbmQvd2luZG93X2ludGVybmFsX3RpemVuLmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTggU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWxfdGl6ZW4uaCBiL3NyYy9zdGFyYm9hcmQvY29udHJpYi90aXplbi9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWxfdGl6ZW4uaAppbmRleCAzMzc1NTg4Li41MzU3OGZiIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2NvbnRyaWIvdGl6ZW4vc2hhcmVkL3dheWxhbmQvd2luZG93X2ludGVybmFsX3RpemVuLmgKKysrIGIvc3JjL3N0YXJib2FyZC9jb250cmliL3RpemVuL3NoYXJlZC93YXlsYW5kL3dpbmRvd19pbnRlcm5hbF90aXplbi5oCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTggU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvZGVjb2RlX3RhcmdldC5oIGIvc3JjL3N0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmgKaW5kZXggNTc3N2Q4Mi4uYTNiOGYxYyAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmgKKysrIGIvc3JjL3N0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAvLyBBIGRlY29kZXIgdGFyZ2V0IGZvcm1hdCBjb25zaXN0aW5nIG9mIFksIFUsIGFuZCBWIHBsYW5lcywgaW4gdGhhdCBvcmRlci4KICAga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lWVVWSTQyMCwKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCXzEwX0JJVF9ZVVZfSTQyMF9ERUNPREVfVEFSR0VUX1NVUFBPUlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogICAvLyBBIGRlY29kZXIgdGFyZ2V0IGZvcm1hdCBjb25zaXN0aW5nIG9mIDEwYml0IFksIFUsIGFuZCBWIHBsYW5lcywgaW4gdGhhdAogICAvLyBvcmRlci4KICAga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwLApAQCAtMzQwLDcgKzM0MCw3IEBACiAgICAgICByZXR1cm4gMTsKICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDJQbGFuZVlVVk5WMTI6CiAgICAgICByZXR1cm4gMjsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl8xMF9CSVRfWVVWX0k0MjBfREVDT0RFX1RBUkdFVF9TVVBQT1JUX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMDoKICNlbmRpZgogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lWVVWSTQyMDoKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvZHJtLmggYi9zcmMvc3RhcmJvYXJkL2RybS5oCmluZGV4IDhiMTMzZjUuLjE0M2NkOTQgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvZHJtLmgKKysrIGIvc3JjL3N0YXJib2FyZC9kcm0uaApAQCAtMTEzLDcgKzExMyw3IEBACiAvLyBTYkRybUdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoKSB3YXMgY2FsbGVkIG9uLiB8Y29udGV4dHwgd2lsbCBiZSB0aGUgc2FtZQogLy8gY29udGV4dCB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY2FsbCB0byBTYkRybUNyZWF0ZVN5c3RlbSgpLgogLy8KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAvLyB8c3RhdHVzfCBpcyB0aGUgc3RhdHVzIG9mIHRoZSBzZXNzaW9uIHJlcXVlc3QuCiAvLwogLy8gfHR5cGV8IGlzIHRoZSBzdGF0dXMgb2YgdGhlIHNlc3Npb24gcmVxdWVzdC4KQEAgLTEyMiwxMyArMTIyLDEzIEBACiAvLyB8a1NiRHJtU3RhdHVzU3VjY2Vzc3wgdG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGVycm9yLiAgSXQgbWF5IGJlCiAvLyBOVUxMIGlmIHxzdGF0dXN8IGlzIHxrU2JEcm1TdGF0dXNTdWNjZXNzfCBvciBpZiBubyBlcnJvciBtZXNzYWdlIGNhbiBiZQogLy8gcHJvdmlkZWQuCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAvLyB8dGlja2V0fCB3aWxsIGJlIHRoZSBzYW1lIHRpY2tldCB0aGF0IHdhcyBwYXNzZWQgdG8KIC8vIFNiRHJtR2VuZXJhdGVTZXNzaW9uVXBkYXRlUmVxdWVzdCgpIG9yIHxrU2JEcm1UaWNrZXRJbnZhbGlkfCBpZiB0aGUgdXBkYXRlCiAvLyByZXF1ZXN0IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIERSTSBzeXN0ZW0uCiAvLwogLy8gfHNlc3Npb25faWR8IGNhbiBiZSBOVUxMIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBnZW5lcmF0aW5nIHRoZSByZXF1ZXN0LgotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIHR5cGVkZWYgdm9pZCAoKlNiRHJtU2Vzc2lvblVwZGF0ZVJlcXVlc3RGdW5jKShTYkRybVN5c3RlbSBkcm1fc3lzdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpY2tldCwKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRlbnRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmwpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogdHlwZWRlZiB2b2lkICgqU2JEcm1TZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMpKFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGlja2V0LApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogY29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udGVudF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIC8vIEEgY2FsbGJhY2sgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBhIHNlc3Npb24gaGFzIGJlZW4gYWRkZWQsIGFuZCBzdWJzZXF1ZW50CiAvLyBlbmNyeXB0ZWQgc2FtcGxlcyBhcmUgYWN0aXZlbHkgcmVhZHkgdG8gYmUgZGVjb2RlZC4gfGRybV9zeXN0ZW18IHdpbGwgYmUgdGhlCkBAIC0xNTgsMTYgKzE1OCwxNiBAQAogLy8KIC8vIHx0aWNrZXR8IHdpbGwgYmUgdGhlIHNhbWUgdGlja2V0IHRoYXQgd2FzIHBhc3NlZCB0byBTYkRybVVwZGF0ZVNlc3Npb24oKS4KIC8vCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogLy8gfHN0YXR1c3wgaXMgdGhlIHN0YXR1cyBvZiB0aGUgc2Vzc2lvbiByZXF1ZXN0LgogLy8KIC8vIHxlcnJvcl9tZXNzYWdlfCBtYXkgY29udGFpbiBhbiBvcHRpb25hbCBlcnJvciBtZXNzYWdlIHdoZW4gfHN0YXR1c3wgaXNuJ3QKIC8vIHxrU2JEcm1TdGF0dXNTdWNjZXNzfCB0byBwcm92aWRlIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgZXJyb3IuICBJdCBtYXkgYmUKIC8vIE5VTEwgaWYgfHN0YXR1c3wgaXMgfGtTYkRybVN0YXR1c1N1Y2Nlc3N8IG9yIGlmIG5vIGVycm9yIG1lc3NhZ2UgY2FuIGJlCiAvLyBwcm92aWRlZC4KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vIHxzdWNjZWVkZWR8IGlzIHdoZXRoZXIgdGhlIHNlc3Npb24gd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIG9yIG5vdC4KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiB0eXBlZGVmIHZvaWQgKCpTYkRybVNlc3Npb25VcGRhdGVkRnVuYykoU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWNrZXQsCkBAIC0xNzUsMTQgKzE3NSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yX21lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogc2Vzc2lvbl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vzc2lvbl9pZF9zaXplKTsKLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIHR5cGVkZWYgdm9pZCAoKlNiRHJtU2Vzc2lvblVwZGF0ZWRGdW5jKShTYkRybVN5c3RlbSBkcm1fc3lzdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpY2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBzZXNzaW9uX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXNzaW9uX2lkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZWVkZWQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiAvLyBBIGNhbGxiYWNrIGZvciBub3RpZmljYXRpb25zIHRoYXQgdGhlIHN0YXR1cyBvZiBvbmUgb3IgbW9yZSBrZXlzIGluIGEgc2Vzc2lvbgogLy8gaGFzIGJlZW4gY2hhbmdlZC4gIEFsbCBrZXlzIG9mIHRoZSBzZXNzaW9uIGFuZCB0aGVpciBuZXcgc3RhdHVzIHdpbGwgYmUKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgIGludCBzZXNzaW9uX2lkX3NpemUpOwogI2VuZGlmICAvLyBTQl9IQVMoRFJNX1NFU1NJT05fQ0xPU0VEKSkKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vIEEgY2FsbGJhY2sgdG8gbm90aWZ5IHRoZSBjYWxsZXIgb2YgU2JEcm1VcGRhdGVTZXJ2ZXJDZXJ0aWZpY2F0ZSgpIHdoZXRoZXIgdGhlCiAvLyB1cGRhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgb3Igbm90LgogdHlwZWRlZiB2b2lkICgqU2JEcm1TZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0ZWRGdW5jKShTYkRybVN5c3RlbSBkcm1fc3lzdGVtLApAQCAtMjE1LDcgKzIxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3RhdHVzIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JfbWVzc2FnZSk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIC8vIC0tLSBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yNjQsMTQgKzI2NCwxNCBAQAogLy8gZnVuY3Rpb24gcmV0dXJucy4KIC8vIHxzZXNzaW9uX2Nsb3NlZF9jYWxsYmFja3w6IEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGluZGljYXRlIHRoYXQgYQogLy8gc2Vzc2lvbiBoYXMgY2xvc2VkLgotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX05VTExfQ0FMTEJBQ0tTX0lOVkFMSURfUkVUVVJOX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vIElmIHxOVUxMfCBpcyBwYXNzZWQgZm9yIGFueSBvZiB0aGUgY2FsbGJhY2tzICh8dXBkYXRlX3JlcXVlc3RfY2FsbGJhY2t8LAogLy8gfHNlc3Npb25fdXBkYXRlZF9jYWxsYmFja3wsIHxrZXlfc3RhdHVzZXNfY2hhbmdlZF9jYWxsYmFja3wsCiAvLyB8c2VydmVyX2NlcnRpZmljYXRlX3VwZGF0ZWRfY2FsbGJhY2t8LCBvciB8c2Vzc2lvbl9jbG9zZWRfY2FsbGJhY2t8KSwgdGhlbgogLy8gfGtTYkRybVN5c3RlbUludmFsaWR8IG11c3QgYmUgcmV0dXJuZWQuCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX05VTExfQ0FMTEJBQ0tTX0lOVkFMSURfUkVUVVJOX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIFNCX0VYUE9SVCBTYkRybVN5c3RlbSBTYkRybUNyZWF0ZVN5c3RlbSgKICAgICBjb25zdCBjaGFyKiBrZXlfc3lzdGVtLApAQCAtNDA1LDcgKzQwNSw3IEBACiAvLyB8ZHJtX3N5c3RlbXw6IFRoZSBEUk0gc3lzdGVtIGZvciB3aGljaCBrZXlzIHNob3VsZCBiZSByZW1vdmVkLgogU0JfRVhQT1JUIHZvaWQgU2JEcm1SZW1vdmVBbGxLZXlzKFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiAvLyBSZXR1cm5zIHRydWUgaWYgc2VydmVyIGNlcnRpZmljYXRlIG9mIHxkcm1fc3lzdGVtfCBjYW4gYmUgdXBkYXRlZCB2aWEKIC8vIFNiRHJtVXBkYXRlU2VydmVyQ2VydGlmaWNhdGUoKS4gIFRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZQpAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNlcnRpZmljYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydGlmaWNhdGVfc2l6ZSk7CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogLy8gRGVzdHJveXMgfGRybV9zeXN0ZW18LCB3aGljaCBpbXBsaWNpdGx5IHJlbW92ZXMgYWxsIGtleXMgaW5zdGFsbGVkIGluIGl0IGFuZAogLy8gaW52YWxpZGF0ZXMgYWxsIG91dHN0YW5kaW5nIHNlc3Npb24gdXBkYXRlIHJlcXVlc3RzLiBBIERSTSBzeXN0ZW0gY2Fubm90IGJlCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2lucHV0LmggYi9zcmMvc3RhcmJvYXJkL2lucHV0LmgKaW5kZXggYzRlNzgwMy4uY2ZmNjZkZSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9pbnB1dC5oCisrKyBiL3NyYy9zdGFyYm9hcmQvaW5wdXQuaApAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIC8vIEV2ZW50IGRhdGEgZm9yIHxrU2JFdmVudFR5cGVJbnB1dHwgZXZlbnRzLgogdHlwZWRlZiBzdHJ1Y3QgU2JJbnB1dERhdGEgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0lOUFVUX1RJTUVTVEFNUF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIC8vIFRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkIGZvciB0aGlzIGV2ZW50LiBUaGlzIGlzIGludGVuZGVkIHRvCiAgIC8vIGZhY2lsaXRhdGUgY2FsY3VsYXRpb24gb2YgdGltZS1zZW5zaXRpdmUgaW5mb3JtYXRpb24gKGUuZy4gdmVsb2NpdHkgZm9yCiAgIC8vIGtTYklucHV0RXZlbnRUeXBlTW92ZSkuIFRoaXMgbWF5IGJlIHNldCB0byAwIHRvIGhhdmUgdGhlIHJlbGV2YW50IHN5c3RlbXMKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQva2V5LmggYi9zcmMvc3RhcmJvYXJkL2tleS5oCmluZGV4IGYwZTgwM2QuLjM5ODhlYzkgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQva2V5LmgKKysrIGIvc3JjL3N0YXJib2FyZC9rZXkuaApAQCAtMjQ1LDEwICsyNDUsMTAgQEAKICAga1NiS2V5TWVkaWFBdWRpb1RyYWNrID0gMHgzMDAxLAogI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSA2CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9NSUNST1BIT05FX0tFWV9DT0RFX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgLy8gQSBidXR0b24gdGhhdCB3aWxsIHRyaWdnZXIgdm9pY2UgaW5wdXQuCiAgIGtTYktleU1pY3JvcGhvbmUgPSAweDMwMDIsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX01JQ1JPUEhPTkVfS0VZX0NPREVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogICAvLyBNb3VzZSBidXR0b25zLCBzdGFydGluZyB3aXRoIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbi4KICAga1NiS2V5TW91c2UxID0gMHg3MDAwLApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkgYi9zcmMvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaQppbmRleCBhZGNmNDBkLi4zNjBjZjYyIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaQorKysgYi9zcmMvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaQpAQCAtMjI1LDkgKzIyNSwyMSBAQAogICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWwuY2MnLAogICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWwuaCcsCiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfY2FuX3BsYXlfbWltZV9hbmRfa2V5X3N5c3RlbS5jYycsCisgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX2J1ZmZlcl9idWRnZXQuY2MnLAogICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9hdWRpb19jb25maWd1cmF0aW9uX3N0ZXJlb19vbmx5LmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fb3V0cHV0X2NvdW50X3N0ZXJlb19vbmx5LmNjJywKKyAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2FsaWdubWVudC5jYycsCisgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXQuY2MnLAorICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYycsCisgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9wYWRkaW5nLmNjJywKKyAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX3N0b3JhZ2VfdHlwZS5jYycsCisgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2luaXRpYWxfYnVmZmVyX2NhcGFjaXR5LmNjJywKKyAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYycsCisgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MnLAorICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWRfYWFjX2FuZF9vcHVzLmNjJywKKyAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MnLAorICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl91c2luZ19tZW1vcnlfcG9vbC5jYycsCiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc2V0X291dHB1dF9wcm90ZWN0aW9uLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV91dGlsLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV91dGlsLmgnLApAQCAtMjQ3LDYgKzI1OSw3IEBACiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfY3VycmVudF9mcmFtZS5jYycsCiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mby5jYycsCiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mbzIuY2MnLAorICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X21heGltdW1fbnVtYmVyX29mX3NhbXBsZXNfcGVyX3dyaXRlLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmgnLAogICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkLmNjJywKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9oYXNfY2FwYWJpbGl0eS5jYyBiL3NyYy9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9oYXNfY2FwYWJpbGl0eS5jYwppbmRleCBmY2U0NzU1Li5hNjUxYWUzIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zeXN0ZW1faGFzX2NhcGFiaWxpdHkuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3lzdGVtX2hhc19jYXBhYmlsaXR5LmNjCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBrU2JTeXN0ZW1DYXBhYmlsaXR5Q2FuUXVlcnlHUFVNZW1vcnlTdGF0czoKICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9JTlBVVF9USU1FU1RBTVBfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogICAgIGNhc2Uga1NiU3lzdGVtQ2FwYWJpbGl0eVNldHNJbnB1dFRpbWVzdGFtcDoKICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9saW51eC94NjRkaXJlY3RmYi9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjIGIvc3JjL3N0YXJib2FyZC9saW51eC94NjRkaXJlY3RmYi9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCmluZGV4IDg1ZGQ2ZTguLjE2MGIzOTEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbGludXgveDY0ZGlyZWN0ZmIvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYworKysgYi9zcmMvc3RhcmJvYXJkL2xpbnV4L3g2NGRpcmVjdGZiL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKQEAgLTU2LDExICs1NiwxMSBAQAogICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlQbGF0Zm9ybU5hbWU6CiAgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsIGtQbGF0Zm9ybU5hbWUpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9QUk9QRVJUWV9VVUlEX1JFTU9WRURfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVBsYXRmb3JtVXVpZDoKICAgICAgIFNCX05PVElNUExFTUVOVEVEKCk7CiAgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsICJOL0EiKTsKLSNlbmRpZiAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfUFJPUEVSVFlfVVVJRF9SRU1PVkVEX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogICAgIGRlZmF1bHQ6CiAgICAgICBTQl9ETE9HKFdBUk5JTkcpIDw8IF9fRlVOQ1RJT05fXwpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9saW51eC94NjR4MTEvbW9jay9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3JjL3N0YXJib2FyZC9saW51eC94NjR4MTEvbW9jay9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmluZGV4IDY4YmZjZmYuLmZjNjNjYTMgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbGludXgveDY0eDExL21vY2svc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgYi9zcmMvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9tb2NrL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKQEAgLTEwNCw2ICsxMDQsNyBAQAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfY3VycmVudF9mcmFtZS5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X2luZm8yLmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X21heGltdW1fbnVtYmVyX29mX3NhbXBsZXNfcGVyX3dyaXRlLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2Vlay5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsyLmNjJywKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbGludXgveDY0eDExL21vempzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zcmMvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9tb3pqcy9neXBfY29uZmlndXJhdGlvbi5neXBpCmluZGV4IGU0NmI1NTAuLjI0NzQ5Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbGludXgveDY0eDExL21vempzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIGIvc3JjL3N0YXJib2FyZC9saW51eC94NjR4MTEvbW96anMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpAQCAtMTMsMTAgKzEzLDYgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKIHsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnamF2YXNjcmlwdF9lbmdpbmUnOiAnbW96anMtNDUnLAotICAgICdjb2JhbHRfZW5hYmxlX2ppdCc6IDAsCi0gIH0sCiAgICd0YXJnZXRfZGVmYXVsdHMnOiB7CiAgICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdsaW51eC14NjR4MTEtbW96anNfZGVidWcnLAogICAgICdjb25maWd1cmF0aW9ucyc6IHsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaSBiL3NyYy9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaQppbmRleCAwYWZkY2MwLi41NWEyZWY5IDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKKysrIGIvc3JjL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpCkBAIC0yMiwxMiArMjIsMjAgQEAKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9saW5rX3JlY2VpdmVyLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3gxMS9hcHBsaWNhdGlvbl94MTEuY2MnLAogICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQveDExL2VnbF9zd2FwX2J1ZmZlcnMuY2MnLAorICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQveDExL3BsYXllcl9zZXRfYm91bmRzLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3gxMS93aW5kb3dfY3JlYXRlLmNjJywKICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3gxMS93aW5kb3dfZGVzdHJveS5jYycsCiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC94MTEvd2luZG93X2dldF9wbGF0Zm9ybV9oYW5kbGUuY2MnLAogICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQveDExL3dpbmRvd19nZXRfc2l6ZS5jYycsCiAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC94MTEvd2luZG93X2ludGVybmFsLmNjJywKICAgICBdLAorCisgICAgIyBFeGNsdWRlIHNoYXJlZCBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBpbmNsdWRlZCAuZ3lwaSBpZiB0aGlzCisgICAgIyBmaWxlIGFscmVhZHkgc3BlY2lmaWVzIGEgcGxhdGZvcm0tc3BlY2lmaWMgdmVyc2lvbi4KKyAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMhJzogWworICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2V0X2JvdW5kcy5jYycsCisgICAgXSwKKwogICAgICdjb25kaXRpb25zJzogWwogICAgICAgWydoYXNfY2RtPT0xJywgewogICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMnOiBbCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjIGIvc3JjL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYwppbmRleCBkODVmNGUzLi5mNzIzOWU2IDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvbGludXgveDY0eDExL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKQEAgLTM2LDcgKzM2LDcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX1BST1BFUlRZX1VVSURfUkVNT1ZFRF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogYm9vbCBHZXRQbGF0Zm9ybVV1aWQoY2hhciogb3V0X3ZhbHVlLCBpbnQgdmFsdWVfbGVuZ3RoKSB7CiAgIHN0cnVjdCBpZnJlcSBpbnRlcmZhY2U7CkBAIC04MCw3ICs4MCw3IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotI2VuZGlmICAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9QUk9QRVJUWV9VVUlEX1JFTU9WRURfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogCiB9ICAvLyBuYW1lc3BhY2UKIApAQCAtMTA3LDEwICsxMDcsMTAgQEAKICAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5UGxhdGZvcm1OYW1lOgogICAgICAgcmV0dXJuIENvcHlTdHJpbmdBbmRUZXN0SWZTdWNjZXNzKG91dF92YWx1ZSwgdmFsdWVfbGVuZ3RoLCBrUGxhdGZvcm1OYW1lKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfUFJPUEVSVFlfVVVJRF9SRU1PVkVEX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlQbGF0Zm9ybVV1aWQ6CiAgICAgICByZXR1cm4gR2V0UGxhdGZvcm1VdWlkKG91dF92YWx1ZSwgdmFsdWVfbGVuZ3RoKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9QUk9QRVJUWV9VVUlEX1JFTU9WRURfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogCiAgICAgZGVmYXVsdDoKICAgICAgIFNCX0RMT0coV0FSTklORykgPDwgX19GVU5DVElPTl9fCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL21lZGlhLmggYi9zcmMvc3RhcmJvYXJkL21lZGlhLmgKaW5kZXggOTIwNTE3MS4uNWMyZTVmZiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9tZWRpYS5oCisrKyBiL3NyYy9zdGFyYm9hcmQvbWVkaWEuaApAQCAtMzEsNyArMzEsNyBAQAogCiAvLyAtLS0gVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAvLyBUaW1lIHJlcHJlc2VudGVkIGluIDkwS0h6IHRpY2tzLgogdHlwZWRlZiBpbnQ2NF90IFNiTWVkaWFUaW1lOwogCkBAIC00Myw3ICs0Myw3IEBACiAgICgoKHRpbWUgPT0gU0JfUExBWUVSX05PX0RVUkFUSU9OKSAgICBcCiAgICAgICAgID8gU0JfUExBWUVSX05PX0RVUkFUSU9OICAgICAgICBcCiAgICAgICAgIDogKCh0aW1lID09IGtTYkludDY0TWF4KSA/IGtTYkludDY0TWF4IDogKHRpbWUgKiA5IC8gMTAwKSkpKQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogLy8gVHlwZXMgb2YgbWVkaWEgY29tcG9uZW50IHN0cmVhbXMuCiB0eXBlZGVmIGVudW0gU2JNZWRpYVR5cGUgewpAQCAtNDgzLDEzICs0ODMsMTMgQEAKICNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gNgogfSBTYk1lZGlhQXVkaW9IZWFkZXI7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogLy8gLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIFRPRE86IHJlbW92ZSBlbnRpcmVseS4KIC8vIE9uZSBzZWNvbmQgaW4gU2JNZWRpYVRpbWUgKDkwS0h6IHRpY2tzKS4KICNkZWZpbmUga1NiTWVkaWFUaW1lU2Vjb25kICgoU2JNZWRpYVRpbWUpKDkwMDAwKSkKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKIC8vIC0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01NjEsNiArNTYxLDEzMiBAQAogLy8gICBkaXNhYmxlZC4KIFNCX0VYUE9SVCBib29sIFNiTWVkaWFTZXRPdXRwdXRQcm90ZWN0aW9uKGJvb2wgZW5hYmxlZCk7CiAKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAorLy8gVmFsdWUgdXNlZCB3aGVuIGEgdmlkZW8ncyByZXNvbHV0aW9uIGlzIG5vdCBrbm93bi4KKyNkZWZpbmUga1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkIDAKKy8vIFZhbHVlIHVzZWQgd2hlbiBhIHZpZGVvJ3MgYml0cyBwZXIgcGl4ZWwgaXMgbm90IGtub3duLgorI2RlZmluZSBrU2JNZWRpYUJpdHNQZXJQaXhlbEludmFsaWQgMAorCit0eXBlZGVmIGVudW0gU2JNZWRpYUJ1ZmZlclN0b3JhZ2VUeXBlIHsKKyAga1NiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZU1lbW9yeSwKKyAga1NiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZUZpbGUsCit9IFNiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZTsKKworLy8gVGhlIG1lZGlhIGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgcmV0dXJuZWQgYWxpZ25tZW50LiAgU2V0IHRoaXMKKy8vIHRvIGEgbGFyZ2VyIHZhbHVlIG1heSBpbmNyZWFzZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIG1lZGlhCisvLyBidWZmZXJzLgorLy8KKy8vIHx0eXBlfDogdGhlIG1lZGlhIHR5cGUgb2YgdGhlIHN0cmVhbSAoYXVkaW8gb3IgdmlkZW8pLgorU0JfRVhQT1JUIGludCBTYk1lZGlhR2V0QnVmZmVyQWxpZ25tZW50KFNiTWVkaWFUeXBlIHR5cGUpOworCisvLyBXaGVuIHRoZSBtZWRpYSBzdGFjayBuZWVkcyBtb3JlIG1lbW9yeSB0byBzdG9yZSBtZWRpYSBidWZmZXJzLCBpdCB3aWxsCisvLyBhbGxvY2F0ZSBleHRyYSBtZW1vcnkgaW4gdW5pdHMgcmV0dXJuZWQgYnkgU2JNZWRpYUdldEJ1ZmZlckFsbG9jYXRpb25Vbml0LgorLy8gVGhpcyBjYW4gcmV0dXJuIDAsIGluIHdoaWNoIGNhc2UgdGhlIG1lZGlhIHN0YWNrIHdpbGwgYWxsb2NhdGUgZXh0cmEgbWVtb3J5CisvLyBvbiBkZW1hbmQuICBXaGVuIFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHkgYW5kIHRoaXMgZnVuY3Rpb24KKy8vIGJvdGggcmV0dXJuIDAsIHRoZSBtZWRpYSBzdGFjayB3aWxsIGFsbG9jYXRlIGluZGl2aWR1YWwgYnVmZmVycyBkaXJlY3RseQorLy8gdXNpbmcgU2JNZW1vcnkgZnVuY3Rpb25zLgorU0JfRVhQT1JUIGludCBTYk1lZGlhR2V0QnVmZmVyQWxsb2NhdGlvblVuaXQoKTsKKworLy8gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSBhdWRpbyBidWZmZXJzIG9mIG1lZGlhIHNvdXJjZQorLy8gYmVmb3JlIHRyaWdnZXJpbmcgYSBnYXJiYWdlIGNvbGxlY3Rpb24uICBBIGxhcmdlIHZhbHVlIHdpbGwgY2F1c2UgbW9yZSBtZW1vcnkKKy8vIGJlaW5nIHVzZWQgYnkgYXVkaW8gYnVmZmVycyBidXQgd2lsbCBhbHNvIG1ha2UgdGhlIGFwcCBsZXNzIGxpa2VseSB0bworLy8gcmUtZG93bmxvYWQgYXVkaW8gZGF0YS4gIE5vdGUgdGhhdCB0aGUgYXBwIG1heSBleHBlcmllbmNlCisvLyBzaWduaWZpY2FudCBkaWZmaWN1bHR5IGlmIHRoaXMgdmFsdWUgaXMgdG9vIGxvdy4KK1NCX0VYUE9SVCBpbnQgU2JNZWRpYUdldEF1ZGlvQnVmZmVyQnVkZ2V0KCk7CisKKy8vIFNwZWNpZmllcyB0aGUgZHVyYXRpb24gdGhyZXNob2xkIG9mIG1lZGlhIHNvdXJjZSBnYXJiYWdlIGNvbGxlY3Rpb24uICBXaGVuCisvLyB0aGUgYWNjdW11bGF0ZWQgZHVyYXRpb24gaW4gYSBzb3VyY2UgYnVmZmVyIGV4Y2VlZHMgdGhpcyB2YWx1ZSwgdGhlIG1lZGlhCisvLyBzb3VyY2UgaW1wbGVtZW50YXRpb24gd2lsbCB0cnkgdG8gZWplY3QgZXhpc3RpbmcgYnVmZmVycyBmcm9tIHRoZSBjYWNoZS4gVGhpcworLy8gaXMgdXN1YWxseSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmlkZW8gYmVpbmcgcGxheWVkIGhhcyBhIHNpbXBsZSBjb250ZW50IGFuZCB0aGUKKy8vIGVuY29kZWQgZGF0YSBpcyBzbWFsbC4gIEluIHN1Y2ggY2FzZSB0aGlzIGNhbiBsaW1pdCBob3cgbXVjaCBpcyBhbGxvY2F0ZWQgZm9yCisvLyB0aGUgYm9vayBrZWVwaW5nIGRhdGEgb2YgdGhlIG1lZGlhIGJ1ZmZlcnMgYW5kIGF2b2lkIE9PTSBvZiBzeXN0ZW0gaGVhcC4gVGhpcworLy8gc2hvdWxkIHJldHVybiAxNzAgc2Vjb25kcyBmb3IgbW9zdCBvZiB0aGUgcGxhdGZvcm1zLiAgQnV0IGl0IGNhbiBiZSBmdXJ0aGVyCisvLyByZWR1Y2VkIG9uIHN5c3RlbXMgd2l0aCBleHRyZW1lbHkgbG93IG1lbW9yeS4KK1NCX0VYUE9SVCBTYlRpbWUgU2JNZWRpYUdldEJ1ZmZlckdhcmJhZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQoKTsKKworLy8gVGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgbWVkaWEgYnVmZmVycyBhbGxvY2F0ZWQKKy8vIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gIFRvIGFsbG9jYXRlIGEgbGFyZ2UgY2h1bmsgYXQgc3RhcnR1cCBoZWxwcyB3aXRoCisvLyByZWR1Y2luZyBmcmFnbWVudGF0aW9uIGFuZCBjYW4gYXZvaWQgZmFpbHVyZXMgdG8gYWxsb2NhdGUgaW5jcmVtZW50YWxseS4gVGhpcworLy8gY2FuIHJldHVybiAwLgorU0JfRVhQT1JUIGludCBTYk1lZGlhR2V0SW5pdGlhbEJ1ZmZlckNhcGFjaXR5KCk7CisKKy8vIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgbWVkaWEgYnVmZmVycy4gVGhpcworLy8gbXVzdCBiZSBsYXJnZXIgdGhhbiBzdW0gb2YgdGhlIHZpZGVvIGJ1ZGdldCBhbmQgYXVkaW8gYnVkZ2V0LgorLy8KKy8vIHxjb2RlY3w6IHRoZSB2aWRlbyBjb2RlYyBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlci4KKy8vIHxyZXNvbHV0aW9uX3dpZHRofDogdGhlIHdpZHRoIG9mIHRoZSB2aWRlbyByZXNvbHV0aW9uLgorLy8gfHJlc29sdXRpb25faGVpZ2h0fDogdGhlIGhlaWdodCBvZiB0aGUgdmlkZW8gcmVzb2x1dGlvbi4KKy8vIHxiaXRzX3Blcl9waXhlbHw6IHRoZSBiaXRzIHBlciBwaXhlbC4gVGhpcyB2YWx1ZSBpcyBsYXJnZXIgZm9yIEhEUiB0aGFuIG5vbi0KKy8vICAgSERSIHZpZGVvLgorU0JfRVhQT1JUIGludCBTYk1lZGlhR2V0TWF4QnVmZmVyQ2FwYWNpdHkoU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzX3Blcl9waXhlbCk7CisKKy8vIEV4dHJhIGJ5dGVzIGFsbG9jYXRlZCBhdCB0aGUgZW5kIG9mIGEgbWVkaWEgYnVmZmVyIHRvIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIKKy8vIGNhbiBiZSB1c2Ugb3B0aW1hbGx5IGJ5IHNwZWNpZmljIGluc3RydWN0aW9ucyBsaWtlIFNJTUQuICBTZXQgdG8gMCB0byByZW1vdmUKKy8vIGFueSBwYWRkaW5nLgorLy8KKy8vIHx0eXBlfDogdGhlIG1lZGlhIHR5cGUgb2YgdGhlIHN0cmVhbSAoYXVkaW8gb3IgdmlkZW8pLgorU0JfRVhQT1JUIGludCBTYk1lZGlhR2V0QnVmZmVyUGFkZGluZyhTYk1lZGlhVHlwZSB0eXBlKTsKKworLy8gV2hlbiBlaXRoZXIgU2JNZWRpYUdldEluaXRpYWxCdWZmZXJDYXBhY2l0eSBvciBTYk1lZGlhR2V0QnVmZmVyQWxsb2NhdGlvblVuaXQKKy8vIGlzbid0IHplcm8sIG1lZGlhIGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgdXNpbmcgYSBtZW1vcnkgcG9vbC4gIFNldCB0aGUKKy8vIGZvbGxvd2luZyB2YXJpYWJsZSB0byB0cnVlIHRvIGFsbG9jYXRlIHRoZSBtZWRpYSBidWZmZXIgcG9vbCBtZW1vcnkgb24gZGVtYW5kCisvLyBhbmQgcmV0dXJuIGFsbCBtZW1vcnkgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZXJlIGlzIG5vIG1lZGlhIGJ1ZmZlciBhbGxvY2F0ZWQuCisvLyBTZXR0aW5nIHRoZSBmb2xsb3dpbmcgdmFsdWUgdG8gZmFsc2UgcmVzdWx0cyBpbiB0aGF0IENvYmFsdCB3aWxsIGFsbG9jYXRlCisvLyBTYk1lZGlhR2V0SW5pdGlhbEJ1ZmZlckNhcGFjaXR5IGJ5dGVzIGZvciBtZWRpYSBidWZmZXIgb24gc3RhcnR1cCBhbmQgd2lsbAorLy8gbm90IHJlbGVhc2UgYW55IG1lZGlhIGJ1ZmZlciBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtIGV2ZW4gaWYgdGhlcmUgaXMgbm8KKy8vIG1lZGlhIGJ1ZmZlcnMgYWxsb2NhdGVkLgorU0JfRVhQT1JUIGJvb2wgU2JNZWRpYUlzQnVmZmVyUG9vbEFsbG9jYXRlT25EZW1hbmQoKTsKKworLy8gVGhlIG1lbW9yeSB1c2VkIHdoZW4gcGxheWluZyBtcDQgdmlkZW9zIHRoYXQgaXMgbm90IGluIERBU0ggZm9ybWF0LiAgVGhlCisvLyByZXNvbHV0aW9uIG9mIHN1Y2ggdmlkZW9zIHNob3VsZG4ndCBnbyBiZXlvbmQgMTA4MHAuICBJdHMgdmFsdWUgc2hvdWxkIGJlCisvLyBsZXNzIHRoYW4gdGhlIHN1bSBvZiBTYk1lZGlhR2V0QXVkaW9CdWZmZXJCdWRnZXQgYW5kCisvLyAnU2JNZWRpYUdldFZpZGVvQnVmZmVyQnVkZ2V0KC4uLiwgMTkyMCwgMTA4MCwgLi4uKSBidXQgbm90IGxlc3MgdGhhbiA4IE1CLgorLy8KKy8vIHxjb2RlY3w6IHRoZSB2aWRlbyBjb2RlYyBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlci4KKy8vIHxyZXNvbHV0aW9uX3dpZHRofDogdGhlIHdpZHRoIG9mIHRoZSB2aWRlbyByZXNvbHV0aW9uLgorLy8gfHJlc29sdXRpb25faGVpZ2h0fDogdGhlIGhlaWdodCBvZiB0aGUgdmlkZW8gcmVzb2x1dGlvbi4KKy8vIHxiaXRzX3Blcl9waXhlbHw6IHRoZSBiaXRzIHBlciBwaXhlbC4gVGhpcyB2YWx1ZSBpcyBsYXJnZXIgZm9yIEhEUiB0aGFuIG5vbi0KKy8vICAgSERSIHZpZGVvLgorU0JfRVhQT1JUIGludCBTYk1lZGlhR2V0UHJvZ3Jlc3NpdmVCdWZmZXJCdWRnZXQoU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzX3Blcl9waXhlbCk7CisKKy8vIFJldHVybnMgU2JNZWRpYUJ1ZmZlclN0b3JhZ2VUeXBlIG9mIHR5cGUgfFNiTWVkaWFTdG9yYWdlVHlwZU1lbW9yeXwgb3IKKy8vIHxTYk1lZGlhU3RvcmFnZVR5cGVGaWxlfC4gRm9yIG1lbW9yeSBzdG9yYWdlLCB0aGUgbWVkaWEgYnVmZmVycyB3aWxsIGJlCisvLyBzdG9yZWQgaW4gbWFpbiBtZW1vcnkgYWxsb2NhdGVkIGJ5IFNiTWVtb3J5IGZ1bmN0aW9ucy4gIEZvciBmaWxlIHN0b3JhZ2UsIHRoZQorLy8gbWVkaWEgYnVmZmVycyB3aWxsIGJlIHN0b3JlZCBpbiBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBzeXN0ZW0gY2FjaGUgZm9sZGVyCisvLyBhY3F1aXJlZCBieSBjYWxsaW5nIFNiU3lzdGVtR2V0UGF0aCgpIHdpdGggImtTYlN5c3RlbVBhdGhDYWNoZURpcmVjdG9yeSIuCisvLyBOb3RlIHRoYXQgd2hlbiBpdHMgdmFsdWUgaXMgImZpbGUiIHRoZSBtZWRpYSBzdGFjayB3aWxsIHN0aWxsIGFsbG9jYXRlIG1lbW9yeQorLy8gdG8gY2FjaGUgdGhlIHRoZSBidWZmZXJzIGluIHVzZS4KK1NCX0VYUE9SVCBTYk1lZGlhQnVmZmVyU3RvcmFnZVR5cGUgU2JNZWRpYUdldEJ1ZmZlclN0b3JhZ2VUeXBlKCk7CisKKy8vIElmIFNiTWVkaWFHZXRCdWZmZXJVc2luZ01lbW9yeVBvb2wgcmV0dXJucyB0cnVlLCBpdCBpbmRpY2F0ZXMgdGhhdAorLy8gbWVkaWEgYnVmZmVyIHBvb2xzIHNob3VsZCBiZSBhbGxvY2F0ZWQgb24gZGVtYW5kLCBhcyBvcHBvc2VkIHRvIHVzaW5nCisvLyBTYk1lbW9yeSogZnVuY3Rpb25zLgorU0JfRVhQT1JUIGJvb2wgU2JNZWRpYUlzQnVmZmVyVXNpbmdNZW1vcnlQb29sKCk7CisKKy8vIFNwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdmlkZW8gYnVmZmVycyBvZiBtZWRpYSBzb3VyY2UKKy8vIGJlZm9yZSB0cmlnZ2VyaW5nIGEgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgQSBsYXJnZSB2YWx1ZSB3aWxsIGNhdXNlIG1vcmUgbWVtb3J5CisvLyBiZWluZyB1c2VkIGJ5IHZpZGVvIGJ1ZmZlcnMgYnV0IHdpbGwgYWxzbyBtYWtlIGFwcCBsZXNzIGxpa2VseSB0bworLy8gcmUtZG93bmxvYWQgdmlkZW8gZGF0YS4gIE5vdGUgdGhhdCB0aGUgYXBwIG1heSBleHBlcmllbmNlCisvLyBzaWduaWZpY2FudCBkaWZmaWN1bHR5IGlmIHRoaXMgdmFsdWUgaXMgdG9vIGxvdy4KKy8vCisvLyB8Y29kZWN8OiB0aGUgdmlkZW8gY29kZWMgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIuCisvLyB8cmVzb2x1dGlvbl93aWR0aHw6IHRoZSB3aWR0aCBvZiB0aGUgdmlkZW8gcmVzb2x1dGlvbi4KKy8vIHxyZXNvbHV0aW9uX2hlaWdodHw6IHRoZSBoZWlnaHQgb2YgdGhlIHZpZGVvIHJlc29sdXRpb24uCisvLyB8Yml0c19wZXJfcGl4ZWx8OiB0aGUgYml0cyBwZXIgcGl4ZWwuIFRoaXMgdmFsdWUgaXMgbGFyZ2VyIGZvciBIRFIgdGhhbiBub24tCisvLyAgIEhEUiB2aWRlby4KK1NCX0VYUE9SVCBpbnQgU2JNZWRpYUdldFZpZGVvQnVmZmVyQnVkZ2V0KFNiTWVkaWFWaWRlb0NvZGVjIGNvZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc29sdXRpb25fd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0c19wZXJfcGl4ZWwpOworCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAgLy8gZXh0ZXJuICJDIgogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL21lbW9yeS5oIGIvc3JjL3N0YXJib2FyZC9tZW1vcnkuaAppbmRleCA3YWM3NGQ3Li5jOWU3NjkxIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL21lbW9yeS5oCisrKyBiL3NyYy9zdGFyYm9hcmQvbWVtb3J5LmgKQEAgLTUzLDkgKzUzLDkgQEAKIC8vIFRoZSBiaXR3aXNlIE9SIG9mIHRoZXNlIGZsYWdzIHNob3VsZCBiZSBwYXNzZWQgdG8gU2JNZW1vcnlNYXAgdG8gaW5kaWNhdGUKIC8vIGhvdyB0aGUgbWFwcGVkIG1lbW9yeSBjYW4gYmUgdXNlZC4KIHR5cGVkZWYgZW51bSBTYk1lbW9yeU1hcEZsYWdzIHsKLSAgLy8gTm8gZmxhZ3Mgc2V0OiBSZXNlcnZlcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIFNiTWVtb3J5UHJvdGVjdCgpIGNhbiBsYXRlcgotICAvLyBtYWtlIGl0IGFjY2Vzc2libGUuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTUVNT1JZX1BST1RFQ1RfUkVTRVJWRURfRkxBR19BUElfVkVSU0lPTgorLy8gTm8gZmxhZ3Mgc2V0OiBSZXNlcnZlcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIFNiTWVtb3J5UHJvdGVjdCgpIGNhbiBsYXRlcgorLy8gbWFrZSBpdCBhY2Nlc3NpYmxlLgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIGtTYk1lbW9yeU1hcFByb3RlY3RSZXNlcnZlZCA9IDAsCiAjZW5kaWYKICAga1NiTWVtb3J5TWFwUHJvdGVjdFJlYWQgPSAxIDw8IDAsICAgLy8gTWFwcGVkIG1lbW9yeSBjYW4gYmUgcmVhZC4KQEAgLTIyMCw3ICsyMjAsNyBAQAogLy8gfFNiTWVtb3J5VW5tYXAoMHhBMDAwLCAweDIwMDApfCBzaG91bGQgZnJlZSBib3RoIHJlZ2lvbnMuCiBTQl9FWFBPUlQgYm9vbCBTYk1lbW9yeVVubWFwKHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgaW50NjRfdCBzaXplX2J5dGVzKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX01FTU9SWV9QUk9URUNUX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vIENoYW5nZSB0aGUgcHJvdGVjdGlvbiBvZiB8c2l6ZV9ieXRlc3wgb2YgbWVtb3J5IHJlZ2lvbnMsIHN0YXJ0aW5nIGZyb20KIC8vIHx2aXJ0dWFsX2FkZHJlc3N8LCB0byB8ZmxhZ3N8LCByZXR1cm5pbmcgfHRydWV8IG9uIHN1Y2Nlc3MuCiBTQl9FWFBPUlQgYm9vbCBTYk1lbW9yeVByb3RlY3Qodm9pZCogdmlydHVhbF9hZGRyZXNzLApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9ucGxiL2F0b21pY190ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL2F0b21pY190ZXN0LmNjCmluZGV4IDQwZjhiMzEuLjlhZGYwZTcgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbnBsYi9hdG9taWNfdGVzdC5jYworKysgYi9zcmMvc3RhcmJvYXJkL25wbGIvYXRvbWljX3Rlc3QuY2MKQEAgLTQ2LDIxICs0NiwyMiBAQAogfTsKIAogdHlwZWRlZiB0ZXN0aW5nOjpUeXBlczwKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9JTlRST0RVQ0VfQVRPTUlDOF9WRVJTSU9OCi0gICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljOCwKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAorICAgIFNiQXRvbWljOCwKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzMyLAorICAgIFNiQXRvbWljMzIsCiAjaWYgU0JfSEFTKDY0X0JJVF9BVE9NSUNTKQotICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzY0LAorICAgIFNiQXRvbWljNjQsCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWNQdHI+IEJhc2ljU2JBdG9taWNUZXN0VHlwZXM7CisgICAgU2JBdG9taWNQdHI+CisgICAgQmFzaWNTYkF0b21pY1Rlc3RUeXBlczsKIHR5cGVkZWYgdGVzdGluZzo6VHlwZXM8U2JBdG9taWMzMiwKICNpZiBTQl9IQVMoNjRfQklUX0FUT01JQ1MpCiAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljNjQsCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWNQdHI+IEFkdmFuY2VkU2JBdG9taWNUZXN0VHlwZXM7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9JTlRST0RVQ0VfQVRPTUlDOF9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFRZUEVEX1RFU1RfQ0FTRShCYXNpY1NiQXRvbWljVGVzdCwgQmFzaWNTYkF0b21pY1Rlc3RUeXBlcyk7CiAjZWxzZQogVFlQRURfVEVTVF9DQVNFKEJhc2ljU2JBdG9taWNUZXN0LCBBZHZhbmNlZFNiQXRvbWljVGVzdFR5cGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2NyZWF0ZV90ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL2F1ZGlvX3NpbmtfY3JlYXRlX3Rlc3QuY2MKaW5kZXggYTY5ZDE2OS4uNjk0ZDE1NCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL2F1ZGlvX3NpbmtfY3JlYXRlX3Rlc3QuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9ucGxiL2F1ZGlvX3NpbmtfY3JlYXRlX3Rlc3QuY2MKQEAgLTYwLDcgKzYwLDcgQEAKICAgU2JBdWRpb1NpbmtEZXN0cm95KGF1ZGlvX3NpbmspOwogfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTVVMVElfUExBWUVSX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFRFU1QoU2JBdWRpb1NpbmtDcmVhdGVUZXN0LCBNdWx0aVNpbmspIHsKICAgQVNTRVJUX0dFKFNiQXVkaW9TaW5rR2V0TWF4Q2hhbm5lbHMoKSwgMSk7CiAKQEAgLTg2LDcgKzg2LDcgQEAKICAgICBTYkF1ZGlvU2lua0Rlc3Ryb3koc2luayk7CiAgIH0KIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfTVVMVElfUExBWUVSX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIFRFU1QoU2JBdWRpb1NpbmtDcmVhdGVUZXN0LCBTdW5ueURheUFsbENvbWJpbmF0aW9ucykgewogICBzdGQ6OnZlY3RvcjxTYk1lZGlhQXVkaW9TYW1wbGVUeXBlPiBzYW1wbGVfdHlwZXM7CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL25wbGIvZHJtX2NyZWF0ZV9zeXN0ZW1fdGVzdC5jYyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9kcm1fY3JlYXRlX3N5c3RlbV90ZXN0LmNjCmluZGV4IDBmYjJlOTguLmE1OWI4NmEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbnBsYi9kcm1fY3JlYXRlX3N5c3RlbV90ZXN0LmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9kcm1fY3JlYXRlX3N5c3RlbV90ZXN0LmNjCkBAIC00MCwxMSArNDAsMTEgQEAKICAgRVhQRUNUX1RSVUUoYW55X3N1cHBvcnRlZF9rZXlfc3lzdGVtcykgPDwgIiBubyBEUk0ga2V5IHN5c3RlbXMgc3VwcG9ydGVkIjsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX05VTExfQ0FMTEJBQ0tTX0lOVkFMSURfUkVUVVJOX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFRFU1QoU2JEcm1UZXN0LCBOdWxsQ2FsbGJhY2tzKSB7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0JfQVJSQVlfU0laRV9JTlQoa0tleVN5c3RlbXMpOyArK2kpIHsKICAgICBjb25zdCBjaGFyKiBrZXlfc3lzdGVtID0ga0tleVN5c3RlbXNbaV07Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogICAgIHsKICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0gPSBTYkRybUNyZWF0ZVN5c3RlbSgKICAgICAgICAgICBrZXlfc3lzdGVtLCBOVUxMIC8qIGNvbnRleHQgKi8sCkBAIC0xNjAsOSArMTYwLDkgQEAKICNlbmRpZiAgLy8gU0JfSEFTKERSTV9LRVlfU1RBVFVTRVMpCiAgIH0KIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfTlVMTF9DQUxMQkFDS1NfSU5WQUxJRF9SRVRVUk5fQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX01VTFRJX1BMQVlFUl9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiBURVNUKFNiRHJtVGVzdCwgTXVsdGlEcm0pIHsKICAgY29uc3QgaW50IGtNYXhQbGF5ZXJzUGVyS2V5U3lzdGVtID0gMTY7CiAgIHN0ZDo6dmVjdG9yPFNiRHJtU3lzdGVtPiBjcmVhdGVkX2RybV9zeXN0ZW1zOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgU2JEcm1EZXN0cm95U3lzdGVtKGRybV9zeXN0ZW0pOwogICB9CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX01VTFRJX1BMQVlFUl9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL25wbGIvZHJtX2hlbHBlcnMuY2MgYi9zcmMvc3RhcmJvYXJkL25wbGIvZHJtX2hlbHBlcnMuY2MKaW5kZXggYmYwMWY5Yi4uODNhN2E1ZSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL2RybV9oZWxwZXJzLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9kcm1faGVscGVycy5jYwpAQCAtMTksNyArMTksNyBAQAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgbnBsYiB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIHZvaWQgRHVtbXlTZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMoU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3RhdHVzIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yX21lc3NhZ2UpIHt9CiAKLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIHZvaWQgRHVtbXlTZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMoU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlc3Npb25faWRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZWVkZWQpIHt9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogI2lmIFNCX0hBUyhEUk1fS0VZX1NUQVRVU0VTKQogdm9pZCBEdW1teVNlc3Npb25LZXlTdGF0dXNlc0NoYW5nZWRGdW5jKFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlc3Npb25faWRfc2l6ZSkge30KIAogU2JEcm1TeXN0ZW0gQ3JlYXRlRHVtbXlEcm1TeXN0ZW0oY29uc3QgY2hhcioga2V5X3N5c3RlbSkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKICAgcmV0dXJuIFNiRHJtQ3JlYXRlU3lzdGVtKAogICAgICAga2V5X3N5c3RlbSwgTlVMTCAvKiBjb250ZXh0ICovLCBEdW1teVNlc3Npb25VcGRhdGVSZXF1ZXN0RnVuYywKICAgICAgIER1bW15U2Vzc2lvblVwZGF0ZWRGdW5jLCBEdW1teVNlc3Npb25LZXlTdGF0dXNlc0NoYW5nZWRGdW5jLApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9ucGxiL2RybV9oZWxwZXJzLmggYi9zcmMvc3RhcmJvYXJkL25wbGIvZHJtX2hlbHBlcnMuaAppbmRleCAyMmMzY2Q0Li41YjllOWNjIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL25wbGIvZHJtX2hlbHBlcnMuaAorKysgYi9zcmMvc3RhcmJvYXJkL25wbGIvZHJtX2hlbHBlcnMuaApAQCAtMjAsNyArMjAsNyBAQAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgbnBsYiB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIHZvaWQgRHVtbXlTZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMoU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3RhdHVzIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yX21lc3NhZ2UpOwogCi0jZWxzZSAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiB2b2lkIER1bW15U2Vzc2lvblVwZGF0ZVJlcXVlc3RGdW5jKFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQsCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXNzaW9uX2lkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VlZGVkKTsKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiAjaWYgU0JfSEFTKERSTV9LRVlfU1RBVFVTRVMpCiB2b2lkIER1bW15U2Vzc2lvbktleVN0YXR1c2VzQ2hhbmdlZEZ1bmMoU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbnBsYi9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZV90ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL2RybV9pc19zZXJ2ZXJfY2VydGlmaWNhdGVfdXBkYXRhYmxlX3Rlc3QuY2MKaW5kZXggODA0YTQ2OS4uZGZmM2VhMiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL2RybV9pc19zZXJ2ZXJfY2VydGlmaWNhdGVfdXBkYXRhYmxlX3Rlc3QuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9ucGxiL2RybV9pc19zZXJ2ZXJfY2VydGlmaWNhdGVfdXBkYXRhYmxlX3Rlc3QuY2MKQEAgLTIxLDcgKzIxLDcgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIFRFU1QoU2JEcm1Jc1NlcnZlckNlcnRpZmljYXRlVXBkYXRhYmxlVGVzdCwgU3VubnlEYXkpIHsKICAgLy8gRW5zdXJlIHRoYXQgfFNiRHJtSXNTZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0YWJsZXwgY2FuIGJlIGNhbGxlZCBvdmVyIGFsbCBrZXkKQEAgLTUwLDcgKzUwLDcgQEAKICAgfQogfQogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbnBsYi9kcm1fdXBkYXRlX3NlcnZlcl9jZXJ0aWZpY2F0ZV90ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlX3Rlc3QuY2MKaW5kZXggZWIxMDQyNy4uYTA1M2FiZCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlX3Rlc3QuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9ucGxiL2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlX3Rlc3QuY2MKQEAgLTIyLDcgKzIyLDcgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIFRFU1QoU2JEcm1VcGRhdGVTZXJ2ZXJDZXJ0aWZpY2F0ZVRlc3QsIFN1bm55RGF5KSB7CiAgIC8vIEVuc3VyZSB0aGF0IHxTYkRybVVwZGF0ZVNlcnZlckNlcnRpZmljYXRlfCBjYW4gYmUgY2FsbGVkIG92ZXIgYWxsIGtleQpAQCAtNDIsNyArNDIsNyBAQAogICB9CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogfSAgLy8gbmFtZXNwYWNlCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9ucGxiL2ZpbGVfZ2V0X2luZm9fdGVzdC5jYyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9maWxlX2dldF9pbmZvX3Rlc3QuY2MKaW5kZXggM2NhZGI5My4uMjA4MTkyMSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL2ZpbGVfZ2V0X2luZm9fdGVzdC5jYworKysgYi9zcmMvc3RhcmJvYXJkL25wbGIvZmlsZV9nZXRfaW5mb190ZXN0LmNjCkBAIC0zNyw5ICszNyw5IEBACiAgIC8vIGluIGV4dHJhIHNlbnNpdGl2aXR5IHRvIG1ha2UgZmxha2luZXNzIG1vcmUgYXBwYXJlbnQuCiAgIGNvbnN0IGludCBrVHJpYWxzID0gMTAwOwogICBmb3IgKGludCBpID0gMDsgaSA8IGtUcmlhbHM7ICsraSkgewotICAgIC8vIEFzc3VtaW5nIHBsYXRmb3JtcyBoYXZlIGF0IGxlYXN0IDEgc2Vjb25kIHByZWNpc2lvbiBvbiBmaWxlc3lzdGVtCi0gICAgLy8gdGltZXN0YW1wcywgd2UgbmVlZCB0byBnbyBiYWNrIHR3byBzZWNvbmRzIHRvIGF2b2lkIHJvdW5kaW5nIGlzc3Vlcy4KLSAgICBTYlRpbWUgdGltZSA9IFNiVGltZUdldE5vdygpIC0gKDIgKiBrU2JUaW1lU2Vjb25kKTsKKyAgICAvLyBXZSBjYW4ndCBhc3N1bWUgZmlsZXN5c3RlbSB0aW1lc3RhbXAgcHJlY2lzaW9uLCBzbyBnbyBiYWNrIGEgbWludXRlCisgICAgLy8gZm9yIGEgYmV0dGVyIGNoYW5jZSB0byBjb250YWluIHRoZSBpbXByZWNpc2lvbiBhbmQgcm91bmRpbmcgZXJyb3JzLgorICAgIFNiVGltZSB0aW1lID0gU2JUaW1lR2V0Tm93KCkgLSBrU2JUaW1lTWludXRlOwogI2lmIFNCX0hBU19RVUlSSyhGSUxFU1lTVEVNX0NPQVJTRV9BQ0NFU1NfVElNRSkKICAgICAvLyBPbiBwbGF0Zm9ybXMgd2l0aCBjb2Fyc2UgYWNjZXNzIHRpbWUsIHdlIGFzc3VtZSAxIGRheSBwcmVjaXNpb24gYW5kIGdvCiAgICAgLy8gYmFjayAyIGRheXMgdG8gYXZvaWQgcm91bmRpbmcgaXNzdWVzLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9ucGxiL2ZpbGVfZ2V0X3BhdGhfaW5mb190ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL2ZpbGVfZ2V0X3BhdGhfaW5mb190ZXN0LmNjCmluZGV4IGY1ZWZkMWIuLjY4ZjYzYjggMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbnBsYi9maWxlX2dldF9wYXRoX2luZm9fdGVzdC5jYworKysgYi9zcmMvc3RhcmJvYXJkL25wbGIvZmlsZV9nZXRfcGF0aF9pbmZvX3Rlc3QuY2MKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgLy8gaW4gZXh0cmEgc2Vuc2l0aXZpdHkgdG8gbWFrZSBmbGFraW5lc3MgbW9yZSBhcHBhcmVudC4KICAgY29uc3QgaW50IGtUcmlhbHMgPSAxMDA7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwga1RyaWFsczsgKytpKSB7Ci0gICAgLy8gQXNzdW1pbmcgcGxhdGZvcm1zIGhhdmUgYXQgbGVhc3QgMSBzZWNvbmQgcHJlY2lzaW9uIG9uIGZpbGVzeXN0ZW0KLSAgICAvLyB0aW1lc3RhbXBzLCB3ZSBuZWVkIHRvIGdvIGJhY2sgdHdvIHNlY29uZHMgdG8gYXZvaWQgcm91bmRpbmcgaXNzdWVzLgotICAgIFNiVGltZSB0aW1lID0gU2JUaW1lR2V0Tm93KCkgLSAoMiAqIGtTYlRpbWVTZWNvbmQpOworICAgIC8vIFdlIGNhbid0IGFzc3VtZSBmaWxlc3lzdGVtIHRpbWVzdGFtcCBwcmVjaXNpb24sIHNvIGdvIGJhY2sgYSBtaW51dGUKKyAgICAvLyBmb3IgYSBiZXR0ZXIgY2hhbmNlIHRvIGNvbnRhaW4gdGhlIGltcHJlY2lzaW9uIGFuZCByb3VuZGluZyBlcnJvcnMuCisgICAgU2JUaW1lIHRpbWUgPSBTYlRpbWVHZXROb3coKSAtIGtTYlRpbWVNaW51dGU7CiAjaWYgU0JfSEFTX1FVSVJLKEZJTEVTWVNURU1fQ09BUlNFX0FDQ0VTU19USU1FKQogICAgIC8vIE9uIHBsYXRmb3JtcyB3aXRoIGNvYXJzZSBhY2Nlc3MgdGltZSwgd2UgYXNzdW1lIDEgZGF5IHByZWNpc2lvbiBhbmQgZ28KICAgICAvLyBiYWNrIDIgZGF5cyB0byBhdm9pZCByb3VuZGluZyBpc3N1ZXMuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL25wbGIvbWVkaWFfYnVmZmVyX3Rlc3QuY2MgYi9zcmMvc3RhcmJvYXJkL25wbGIvbWVkaWFfYnVmZmVyX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiMGI5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9tZWRpYV9idWZmZXJfdGVzdC5jYwpAQCAtMCwwICsxLDE5NiBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKKyNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBucGxiIHsKK25hbWVzcGFjZSB7CisKK2NvbnN0ZXhwciBpbnQga1ZpZGVvUmVzb2x1dGlvbnNbXVsyXSA9IHsKKyAgICB7a1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkLAorICAgICBrU2JNZWRpYVZpZGVvUmVzb2x1dGlvbkRpbWVuc2lvbkludmFsaWR9LAorICAgIHs2NDAsIDQ4MH0sCisgICAgezEyODAsIDcyMH0sCisgICAgezE5MjAsIDEwODB9LAorICAgIHsyNTYwLCAxNDQwfSwKKyAgICB7Mzg0MCwgMjE2MH0sCit9OworCitjb25zdGV4cHIgaW50IGtCaXRzUGVyUGl4ZWxWYWx1ZXNbXSA9IHsKKyAgICBrU2JNZWRpYUJpdHNQZXJQaXhlbEludmFsaWQsIDgsIDEwLCAxMiwKK307CisKK2NvbnN0ZXhwciBTYk1lZGlhVmlkZW9Db2RlYyBrVmlkZW9Db2RlY3NbXSA9IHsKKyAgICBrU2JNZWRpYVZpZGVvQ29kZWNOb25lLAorCisgICAga1NiTWVkaWFWaWRlb0NvZGVjSDI2NCwgICBrU2JNZWRpYVZpZGVvQ29kZWNIMjY1LCBrU2JNZWRpYVZpZGVvQ29kZWNNcGVnMiwKKyAgICBrU2JNZWRpYVZpZGVvQ29kZWNUaGVvcmEsIGtTYk1lZGlhVmlkZW9Db2RlY1ZjMSwgIGtTYk1lZGlhVmlkZW9Db2RlY1ZwMTAsCisgICAga1NiTWVkaWFWaWRlb0NvZGVjVnA4LCAgICBrU2JNZWRpYVZpZGVvQ29kZWNWcDksCit9OworCitjb25zdGV4cHIgU2JNZWRpYVR5cGUga01lZGlhVHlwZXNbXSA9IHsKKyAgICBrU2JNZWRpYVR5cGVBdWRpbywKKyAgICBrU2JNZWRpYVR5cGVWaWRlbywKK307CisKK30gIC8vIG5hbWVzcGFjZQorCitURVNUKFNiTWVkaWFCdWZmZXJUZXN0LCBWaWRlb0NvZGVjcykgeworICAvLyBQZXJmb3JtIGEgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIG5ldyBjb2RlY3MgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZQorICAvLyBlbnVtLCBidXQgbm90IHRoZSBhcnJheS4gSWYgdGhlIGNvbXBpbGVyIHdhcm5zIGFib3V0IGEgbWlzc2luZyBjYXNlIGhlcmUsCisgIC8vIHRoZSB2YWx1ZSBtdXN0IGJlIGFkZGVkIHRvIHRoZSBhcnJheSBhbmQgdGhlIHN3aXRjaCBjYXNlLgorICBTYk1lZGlhVmlkZW9Db2RlYyBjb2RlYyA9IGtWaWRlb0NvZGVjc1swXTsKKyAgc3dpdGNoIChjb2RlYykgeworICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzBdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzFdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzJdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzNdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzRdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzVdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzZdOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzddOgorICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzhdOgorICAgICAgYnJlYWs7CisgIH0KK30KKworVEVTVChTYk1lZGlhQnVmZmVyVGVzdCwgTWVkaWFUeXBlcykgeworICAvLyBQZXJmb3JtIGEgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIG5ldyB0eXBlcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCisgIC8vIGVudW0sIGJ1dCBub3QgdGhlIGFycmF5LiBJZiB0aGUgY29tcGlsZXIgd2FybnMgYWJvdXQgYSBtaXNzaW5nIGNhc2UgaGVyZSwKKyAgLy8gdGhlIHZhbHVlIG11c3QgYmUgYWRkZWQgdG8gdGhlIGFycmF5IGFuZCB0aGUgc3dpdGNoIGNhc2UuCisgIFNiTWVkaWFUeXBlIHR5cGUgPSBrTWVkaWFUeXBlc1swXTsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBrTWVkaWFUeXBlc1swXToKKyAgICBjYXNlIGtNZWRpYVR5cGVzWzFdOgorICAgICAgYnJlYWs7CisgIH0KK30KKworVEVTVChTYk1lZGlhQnVmZmVyVGVzdCwgQWxpZ25tZW50KSB7CisgIGZvciAoYXV0byB0eXBlIDoga01lZGlhVHlwZXMpIHsKKyAgICBpbnQgYWxpZ25tZW50ID0gU2JNZWRpYUdldEJ1ZmZlckFsaWdubWVudCh0eXBlKTsKKyAgICAvLyBUT0RPOiBUaGlzIGN1cnJlbnRseSBhY2NlcHRzIDAgb3IgYSBwb3dlciBvZiAyLiBXZSBzaG91bGQgZGlzYWxsb3cgMCBoZXJlCisgICAgLy8gd2hlbiB3ZSBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgdG8gYmUgMSBpbnN0ZWFkIG9mIDAuCisgICAgRVhQRUNUX0dFKGFsaWdubWVudCwgMCk7CisgICAgRVhQRUNUX0VRKGFsaWdubWVudCAmIChhbGlnbm1lbnQgLSAxKSwgMCkKKyAgICAgICAgPDwgIkFsaWdubWVudCBtdXN0IGFsd2F5cyBiZSBhIHBvd2VyIG9mIDIiOworICB9Cit9CisKK1RFU1QoU2JNZWRpYUJ1ZmZlclRlc3QsIEFsbG9jYXRpb25Vbml0KSB7CisgIC8vIFRPRE86IGltcG9zZSBtb3JlIGJvdW5kcy4KKyAgRVhQRUNUX0dFKFNiTWVkaWFHZXRCdWZmZXJBbGxvY2F0aW9uVW5pdCgpLCAwKTsKK30KKworVEVTVChTYk1lZGlhQnVmZmVyVGVzdCwgQXVkaW9CdWRnZXQpIHsKKyAgLy8gVE9ETzogcmVmaW5lIHRoaXMgbG93ZXIgYm91bmQuCisgIGNvbnN0IGludCBrTWluQXVkaW9CdWRnZXQgPSAxICogMTAyNCAqIDEwMjQ7CisgIEVYUEVDVF9HVChTYk1lZGlhR2V0QXVkaW9CdWZmZXJCdWRnZXQoKSwga01pbkF1ZGlvQnVkZ2V0KTsKK30KKworVEVTVChTYk1lZGlhQnVmZmVyVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25EdXJhdGlvblRocmVzaG9sZCkgeworICAvLyBUT0RPOiBpbXBvc2UgcmVhc29uYWJsZSBib3VuZHMgaGVyZS4KKyAgaW50IGtNaW5HYXJiYXJnZUNvbGxlY3Rpb25EdXJhdGlvblRocmVzaG9sZCA9IDEwICoga1NiVGltZVNlY29uZDsKKyAgaW50IGtNYXhHYXJiYXJnZUNvbGxlY3Rpb25EdXJhdGlvblRocmVzaG9sZCA9IDI0MCAqIGtTYlRpbWVTZWNvbmQ7CisgIGludCB0aHJlc2hvbGQgPSBTYk1lZGlhR2V0QnVmZmVyR2FyYmFnZUNvbGxlY3Rpb25EdXJhdGlvblRocmVzaG9sZCgpOworICBFWFBFQ1RfR0UodGhyZXNob2xkLCBrTWluR2FyYmFyZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQpOworICBFWFBFQ1RfTEUodGhyZXNob2xkLCBrTWF4R2FyYmFyZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQpOworfQorCitURVNUKFNiTWVkaWFCdWZmZXJUZXN0LCBJbml0aWFsQ2FwYWNpdHkpIHsKKyAgRVhQRUNUX0dFKFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHkoKSwgMCk7Cit9CisKK1RFU1QoU2JNZWRpYUJ1ZmZlclRlc3QsIE1heENhcGFjaXR5KSB7CisgIC8vIFRPRE86IHNldCBhIHJlYXNvbmFibGUgdXBwZXIgYm91bmQuCisgIGZvciAoYXV0byByZXNvbHV0aW9uIDoga1ZpZGVvUmVzb2x1dGlvbnMpIHsKKyAgICBmb3IgKGF1dG8gYml0c19wZXJfcGl4ZWwgOiBrQml0c1BlclBpeGVsVmFsdWVzKSB7CisgICAgICBmb3IgKGF1dG8gY29kZWMgOiBrVmlkZW9Db2RlY3MpIHsKKyAgICAgICAgRVhQRUNUX0dUKFNiTWVkaWFHZXRNYXhCdWZmZXJDYXBhY2l0eShjb2RlYywgcmVzb2x1dGlvblswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uWzFdLCBiaXRzX3Blcl9waXhlbCksCisgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgRVhQRUNUX0dFKFNiTWVkaWFHZXRNYXhCdWZmZXJDYXBhY2l0eShjb2RlYywgcmVzb2x1dGlvblswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uWzFdLCBiaXRzX3Blcl9waXhlbCksCisgICAgICAgICAgICAgICAgICBTYk1lZGlhR2V0SW5pdGlhbEJ1ZmZlckNhcGFjaXR5KCkpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitURVNUKFNiTWVkaWFCdWZmZXJUZXN0LCBQYWRkaW5nKSB7CisgIGZvciAoYXV0byB0eXBlIDoga01lZGlhVHlwZXMpIHsKKyAgICBFWFBFQ1RfR0UoU2JNZWRpYUdldEJ1ZmZlclBhZGRpbmcodHlwZSksIDApOworICB9Cit9CisKK1RFU1QoU2JNZWRpYUJ1ZmZlclRlc3QsIFBvb2xBbGxvY2F0ZU9uRGVtYW5kKSB7CisgIC8vIEp1c3QgZG9uJ3QgY3Jhc2guCisgIFNiTWVkaWFJc0J1ZmZlclBvb2xBbGxvY2F0ZU9uRGVtYW5kKCk7Cit9CisKK1RFU1QoU2JNZWRpYUJ1ZmZlclRlc3QsIFByb2dyZXNzaXZlQnVkZ2V0KSB7CisgIGNvbnN0IGludCBrTWluUHJvZ3Jlc3NpdmVCdWRnZXQgPSA4ICogMTAyNCAqIDEwMjQ7CisgIGludCBhdWRpb19idWRnZXQgPSBTYk1lZGlhR2V0QXVkaW9CdWZmZXJCdWRnZXQoKTsKKyAgZm9yIChhdXRvIHZpZGVvX2NvZGVjIDoga1ZpZGVvQ29kZWNzKSB7CisgICAgZm9yIChhdXRvIGJpdHNfcGVyX3BpeGVsIDoga0JpdHNQZXJQaXhlbFZhbHVlcykgeworICAgICAgaW50IHZpZGVvX2J1ZGdldF8xMDgwcCA9CisgICAgICAgICAgU2JNZWRpYUdldFZpZGVvQnVmZmVyQnVkZ2V0KHZpZGVvX2NvZGVjLCAxOTIwLCAxMDgwLCBiaXRzX3Blcl9waXhlbCk7CisgICAgICBmb3IgKGF1dG8gcmVzb2x1dGlvbiA6IGtWaWRlb1Jlc29sdXRpb25zKSB7CisgICAgICAgIGludCBwcm9ncmVzc2l2ZV9idWRnZXQgPSBTYk1lZGlhR2V0UHJvZ3Jlc3NpdmVCdWZmZXJCdWRnZXQoCisgICAgICAgICAgICB2aWRlb19jb2RlYywgcmVzb2x1dGlvblswXSwgcmVzb2x1dGlvblsxXSwgYml0c19wZXJfcGl4ZWwpOworICAgICAgICBFWFBFQ1RfTFQocHJvZ3Jlc3NpdmVfYnVkZ2V0LCB2aWRlb19idWRnZXRfMTA4MHAgKyBhdWRpb19idWRnZXQpCisgICAgICAgICAgICA8PCAiUHJvZ3Jlc3NpdmUgYnVkZ2V0IG11c3QgYmUgbGVzcyB0aGFuIHN1bSBvZiAxMDgwcCB2aWRlbyAiCisgICAgICAgICAgICAgICAiYnVkZ2V0IGFuZCBhdWRpbyBidWRnZXQiOworICAgICAgICBFWFBFQ1RfR0UocHJvZ3Jlc3NpdmVfYnVkZ2V0LCBrTWluUHJvZ3Jlc3NpdmVCdWRnZXQpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitURVNUKFNiTWVkaWFCdWZmZXJUZXN0LCBTdG9yYWdlVHlwZSkgeworICAvLyBKdXN0IGRvbid0IGNyYXNoLgorICBTYk1lZGlhQnVmZmVyU3RvcmFnZVR5cGUgdHlwZSA9IFNiTWVkaWFHZXRCdWZmZXJTdG9yYWdlVHlwZSgpOworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGtTYk1lZGlhQnVmZmVyU3RvcmFnZVR5cGVNZW1vcnk6CisgICAgY2FzZSBrU2JNZWRpYUJ1ZmZlclN0b3JhZ2VUeXBlRmlsZToKKyAgICAgIHJldHVybjsKKyAgfQorICBTQl9OT1RSRUFDSEVEKCk7Cit9CisKK1RFU1QoU2JNZWRpYUJ1ZmZlclRlc3QsIFVzaW5nTWVtb3J5UG9vbCkgeworICAvLyBKdXN0IGRvbid0IGNyYXNoLgorICBTYk1lZGlhSXNCdWZmZXJVc2luZ01lbW9yeVBvb2woKTsKK30KKworVEVTVChTYk1lZGlhQnVmZmVyVGVzdCwgVmlkZW9CdWRnZXQpIHsKKyAgLy8gVE9ETzogcmVmaW5lIHRoaXMgbG93ZXIgYm91bmQuCisgIGNvbnN0IGludCBrTWluVmlkZW9CdWRnZXQgPSAxICogMTAyNCAqIDEwMjQ7CisgIGZvciAoYXV0byBjb2RlYyA6IGtWaWRlb0NvZGVjcykgeworICAgIGZvciAoYXV0byByZXNvbHV0aW9uIDoga1ZpZGVvUmVzb2x1dGlvbnMpIHsKKyAgICAgIGZvciAoYXV0byBiaXRzX3Blcl9waXhlbCA6IGtCaXRzUGVyUGl4ZWxWYWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0dUKFNiTWVkaWFHZXRWaWRlb0J1ZmZlckJ1ZGdldChjb2RlYywgcmVzb2x1dGlvblswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uWzFdLCBiaXRzX3Blcl9waXhlbCksCisgICAgICAgICAgICAgICAgICBrTWluVmlkZW9CdWRnZXQpOworICAgICAgfQorICAgIH0KKyAgfQorfQorfSAgLy8gbmFtZXNwYWNlIG5wbGIKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvbnBsYi9tZW1vcnlfbWFwX3Rlc3QuY2MgYi9zcmMvc3RhcmJvYXJkL25wbGIvbWVtb3J5X21hcF90ZXN0LmNjCmluZGV4IDk3Mzk3MzguLjc0MDQ0MDMgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbnBsYi9tZW1vcnlfbWFwX3Rlc3QuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9ucGxiL21lbW9yeV9tYXBfdGVzdC5jYwpAQCAtMTE3LDExICsxMTcsMTIgQEAKIH0KIAogLy8gQ29weSB0aGUgY29udGVudHMgb2YgfFN1bXwgaW50byB8bWVtb3J5fCwgcmV0dXJuaW5nIGFuIGFzc2VydGlvbiByZXN1bHQKLS8vIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29weSB3YXMgc3VjY2Vzc2Z1bCwgYW5kIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUKLS8vIHBvc3NpYmx5IGNvcGllZCB8U3VtfCBmdW5jdGlvbiBkYXRhLiAgQ2xpZW50cyBhcmUgZXhwZWN0ZWQgdG8gaW1tZWRpYXRlbHkKLS8vIGNhbGwgfEFTU0VSVHwgb24gdGhlIGFzc2VydGlvbiByZXN1bHQuCi1zdGQ6OnBhaXI8Ojp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQsIFN1bUZ1bmN0aW9uPiBDb3B5U3VtRnVuY3Rpb25JbnRvTWVtb3J5KAotICAgIHZvaWQqIG1lbW9yeSkgeworLy8gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsLCBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlCisvLyBwb3NzaWJseSBjb3BpZWQgfFN1bXwgZnVuY3Rpb24gZGF0YSBhbmQgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBzZWxlY3RlZAorLy8gb3JpZ2luYWwgZnVuY3Rpb24uLiAgQ2xpZW50cyBhcmUgZXhwZWN0ZWQgdG8gaW1tZWRpYXRlbHkgY2FsbCB8QVNTRVJUfCBvbgorLy8gdGhlIGFzc2VydGlvbiByZXN1bHQuCitzdGQ6OnR1cGxlPDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0LCBTdW1GdW5jdGlvbiwgU3VtRnVuY3Rpb24+CitDb3B5U3VtRnVuY3Rpb25JbnRvTWVtb3J5KHZvaWQqIG1lbW9yeSkgewogICAvLyBUaGVyZSdzIG5vIHJlbGlhYmxlIHdheSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlICdTdW0nIGZ1bmN0aW9uLiBJZiB3ZQogICAvLyBhc3N1bWUgdGhlIGZ1bmN0aW9uIGlzIGF0IG1vc3QgYSBjZXJ0YWluIHNpemUsIHRoZW4gd2UgbWlnaHQgdHJ5IHRvIHJlYWQKICAgLy8gYmV5b25kIG1hcHBlZCBtZW1vcnkgd2hlbiBjb3B5aW5nIGl0IHRvIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLiBXZSBjYW4KQEAgLTE2NCwyNyArMTY1LDI5IEBACiAgICAgICAgICAgU0JfTUVNT1JZX1BBR0VfU0laRSArCiAgICAgICBTQl9NRU1PUllfUEFHRV9TSVpFKTsKICAgaWYgKCFTYk1lbW9yeUlzQWxpZ25lZChzdW1fZnVuY3Rpb25fcGFnZV9lbmQsIFNCX01FTU9SWV9QQUdFX1NJWkUpKSB7Ci0gICAgcmV0dXJuIHs6OnRlc3Rpbmc6OkFzc2VydGlvbkZhaWx1cmUoKQotICAgICAgICAgICAgICAgIDw8ICJFeHBlY3RlZCB8U3VtfCBwYWdlIGVuZCAoIgotICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHZvaWQqPihzdW1fZnVuY3Rpb25fcGFnZV9lbmQpCi0gICAgICAgICAgICAgICAgPDwgIikgdG8gYmUgYWxpZ25lZCB0byAiIDw8IFNCX01FTU9SWV9QQUdFX1NJWkUsCi0gICAgICAgICAgICBudWxscHRyfTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKDo6dGVzdGluZzo6QXNzZXJ0aW9uRmFpbHVyZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIkV4cGVjdGVkIHxTdW18IHBhZ2UgZW5kICgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN1bV9mdW5jdGlvbl9wYWdlX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiKSB0byBiZSBhbGlnbmVkIHRvICIgPDwgU0JfTUVNT1JZX1BBR0VfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIpOwogICB9CiAgIGlmIChzdW1fZnVuY3Rpb25fc3RhcnQgPj0gc3VtX2Z1bmN0aW9uX3BhZ2VfZW5kKSB7Ci0gICAgcmV0dXJuIHs6OnRlc3Rpbmc6OkFzc2VydGlvbkZhaWx1cmUoKQotICAgICAgICAgICAgICAgIDw8ICJFeHBlY3RlZCB8U3VtfCBmdW5jdGlvbiBwYWdlIHN0YXJ0ICgiCi0gICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN1bV9mdW5jdGlvbl9zdGFydCkKLSAgICAgICAgICAgICAgICA8PCAiKSB0byBiZSBsZXNzIHRoYW4gfFN1bXwgZnVuY3Rpb24gcGFnZSBlbmQgKCIKLSAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx2b2lkKj4oc3VtX2Z1bmN0aW9uX3BhZ2VfZW5kKSA8PCAiKSIsCi0gICAgICAgICAgICBudWxscHRyfTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKDo6dGVzdGluZzo6QXNzZXJ0aW9uRmFpbHVyZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIkV4cGVjdGVkIHxTdW18IGZ1bmN0aW9uIHBhZ2Ugc3RhcnQgKCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx2b2lkKj4oc3VtX2Z1bmN0aW9uX3N0YXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIpIHRvIGJlIGxlc3MgdGhhbiB8U3VtfCBmdW5jdGlvbiBwYWdlIGVuZCAoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHZvaWQqPihzdW1fZnVuY3Rpb25fcGFnZV9lbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7CiAgIH0KIAogICBzaXplX3QgYnl0ZXNfdG9fY29weSA9IHN1bV9mdW5jdGlvbl9wYWdlX2VuZCAtIHN1bV9mdW5jdGlvbl9zdGFydDsKICAgaWYgKGJ5dGVzX3RvX2NvcHkgPiBTQl9NRU1PUllfUEFHRV9TSVpFKSB7Ci0gICAgcmV0dXJuIHs6OnRlc3Rpbmc6OkFzc2VydGlvbkZhaWx1cmUoKQotICAgICAgICAgICAgICAgIDw8ICJFeHBlY3RlZCBieXRlcyByZXF1aXJlZCB0byBjb3B5IHxTdW18IHRvIGJlIGxlc3MgdGhhbiAiCi0gICAgICAgICAgICAgICAgPDwgU0JfTUVNT1JZX1BBR0VfU0laRSA8PCAiLCBBY3R1YWw6ICIgPDwgYnl0ZXNfdG9fY29weSwKLSAgICAgICAgICAgIG51bGxwdHJ9OworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoCisgICAgICAgIDo6dGVzdGluZzo6QXNzZXJ0aW9uRmFpbHVyZSgpCisgICAgICAgICAgICA8PCAiRXhwZWN0ZWQgYnl0ZXMgcmVxdWlyZWQgdG8gY29weSB8U3VtfCB0byBiZSBsZXNzIHRoYW4gIgorICAgICAgICAgICAgPDwgU0JfTUVNT1JZX1BBR0VfU0laRSA8PCAiLCBBY3R1YWw6ICIgPDwgYnl0ZXNfdG9fY29weSwKKyAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7CiAgIH0KIAogICBTYk1lbW9yeUNvcHkobWVtb3J5LCBzdW1fZnVuY3Rpb25fc3RhcnQsIGJ5dGVzX3RvX2NvcHkpOwpAQCAtMTkzLDEwICsxOTYsMTEgQEAKICAgU3VtRnVuY3Rpb24gbWFwcGVkX2Z1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxTdW1GdW5jdGlvbj4oCiAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtZW1vcnkpICsgc3VtX2Z1bmN0aW9uX29mZnNldCk7CiAKLSAgcmV0dXJuIHs6OnRlc3Rpbmc6OkFzc2VydGlvblN1Y2Nlc3MoKSwgbWFwcGVkX2Z1bmN0aW9ufTsKKyAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSg6OnRlc3Rpbmc6OkFzc2VydGlvblN1Y2Nlc3MoKSwgbWFwcGVkX2Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsX2Z1bmN0aW9uKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX01FTU9SWV9QUk9URUNUX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vIENvYmFsdCBjYW4gbm90IG1hcCBleGVjdXRhYmxlIG1lbW9yeS4gSWYgZXhlY3V0YWJsZSBtZW1vcnkgaXMgbmVlZGVkLCBtYXAKIC8vIG5vbi1leGVjdXRhYmxlIG1lbW9yeSBmaXJzdCBhbmQgdXNlIFNiTWVtb3J5UHJvdGVjdCB0byBjaGFuZ2UgbWVtb3J5IGFjY2Vzc3MKIC8vIHRvIGV4ZWN1dGFibGUuCkBAIC0yMTQsMTAgKzIxOCwxMCBAQAogICAgIEVYUEVDVF9GQUxTRShTYk1lbW9yeVVubWFwKG1lbW9yeSwgMCkpOwogICB9CiB9Ci0jZW5kaWYgIC8vIFNCX01FTU9SWV9QUk9URUNUX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIDEwCiAjZW5kaWYgIC8vIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9NRU1PUllfUFJPVEVDVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiBURVNUKFNiTWVtb3J5TWFwVGVzdCwgQ2FuQ2hhbmdlTWVtb3J5UHJvdGVjdGlvbikgewogICBTYk1lbW9yeU1hcEZsYWdzIGFsbF9mcm9tX2ZsYWdzW10gPSB7CiAgICAgU2JNZW1vcnlNYXBGbGFncyhrU2JNZW1vcnlNYXBQcm90ZWN0UmVzZXJ2ZWQpLApAQCAtMjUxLDEwICsyNTUsMTIgQEAKICAgICAgIC8vIHByb3RlY3Rpb25zIGlmIHdlIGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgZWl0aGVyIG5vdyBvciB0aGVuLCBiZWNhdXNlCiAgICAgICAvLyB3ZSBoYXZlIHRvIGFjdHVhbGx5IHB1dCBhIHZhbGlkIGZ1bmN0aW9uIGludG8gdGhlIG1hcHBlZCBtZW1vcnkuCiAgICAgICBTdW1GdW5jdGlvbiBtYXBwZWRfZnVuY3Rpb24gPSBudWxscHRyOworICAgICAgU3VtRnVuY3Rpb24gb3JpZ2luYWxfZnVuY3Rpb24gPSBudWxscHRyOwogICAgICAgaWYgKGZyb21fZmxhZ3MgJiBrU2JNZW1vcnlNYXBQcm90ZWN0V3JpdGUpIHsKICAgICAgICAgYXV0byBjb3B5X3N1bV9mdW5jdGlvbl9yZXN1bHQgPSBDb3B5U3VtRnVuY3Rpb25JbnRvTWVtb3J5KG1lbW9yeSk7Ci0gICAgICAgIEFTU0VSVF9UUlVFKGNvcHlfc3VtX2Z1bmN0aW9uX3Jlc3VsdC5maXJzdCk7Ci0gICAgICAgIG1hcHBlZF9mdW5jdGlvbiA9IGNvcHlfc3VtX2Z1bmN0aW9uX3Jlc3VsdC5zZWNvbmQ7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0ZDo6Z2V0PDA+KGNvcHlfc3VtX2Z1bmN0aW9uX3Jlc3VsdCkpOworICAgICAgICBtYXBwZWRfZnVuY3Rpb24gPSBzdGQ6OmdldDwxPihjb3B5X3N1bV9mdW5jdGlvbl9yZXN1bHQpOworICAgICAgICBvcmlnaW5hbF9mdW5jdGlvbiA9IHN0ZDo6Z2V0PDI+KGNvcHlfc3VtX2Z1bmN0aW9uX3Jlc3VsdCk7CiAgICAgICB9CiAjZW5kaWYKIApAQCAtMjY1LDcgKzI3MSw3IEBACiAKICNpZiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQogICAgICAgaWYgKCh0b19mbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RFeGVjKSAmJiBtYXBwZWRfZnVuY3Rpb24gIT0gbnVsbHB0cikgewotICAgICAgICBFWFBFQ1RfRVEoU3VtKDB4YzBiYTE3OCwgMHhiYWRmMDBkKSwKKyAgICAgICAgRVhQRUNUX0VRKG9yaWdpbmFsX2Z1bmN0aW9uKDB4YzBiYTE3OCwgMHhiYWRmMDBkKSwKICAgICAgICAgICAgICAgICAgIG1hcHBlZF9mdW5jdGlvbigweGMwYmExNzgsIDB4YmFkZjAwZCkpOwogICAgICAgfQogI2VuZGlmCkBAIC0yODUsNyArMjkxLDcgQEAKICAgICB9CiAgIH0KIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfTUVNT1JZX1BST1RFQ1RfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogI2VuZGlmICAvLyBTQl9IQVMoTU1BUCkKIApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZV90ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZV90ZXN0LmNjCmluZGV4IDU4YWE0ZWEuLmJlMmM3YTMgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvbnBsYi9taWNyb3Bob25lX2dldF9hdmFpbGFibGVfdGVzdC5jYworKysgYi9zcmMvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlX3Rlc3QuY2MKQEAgLTY2LDcgKzY2LDcgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1URVNUKFNiTWljcm9waG9uZUdldEF2YWlsYWJsZSwgTGFiZWxJc051bGxUZXJtaW5hdGVkKSB7CitURVNUKFNiTWljcm9waG9uZUdldEF2YWlsYWJsZVRlc3QsIExhYmVsSXNOdWxsVGVybWluYXRlZCkgewogICBjb25zdCBpbnQga0luZm9TaXplID0gMTA7CiAgIFNiTWljcm9waG9uZUluZm8gaW5mb3Nba0luZm9TaXplXTsKICAgaW50IGNvdW50ID0gU2JNaWNyb3Bob25lR2V0QXZhaWxhYmxlKGluZm9zLCBrSW5mb1NpemUpOwpAQCAtNzUsNyArNzUsNyBAQAogICB9CiB9CiAKLVRFU1QoU2JNaWNyb3Bob25lR2V0QXZhaWxhYmxlLCBMYWJlbElzVmFsaWQpIHsKK1RFU1QoU2JNaWNyb3Bob25lR2V0QXZhaWxhYmxlVGVzdCwgTGFiZWxJc1ZhbGlkKSB7CiAgIGNvbnN0IGNoYXIqIGtQb2lzb25MYWJlbCA9ICJCYWRMYWJlbCI7CiAgIFNiTWljcm9waG9uZUluZm8gaW5mbzsKICAgU2JTdHJpbmdDb3B5KGluZm8ubGFiZWwsIGtQb2lzb25MYWJlbCwgU0JfQVJSQVlfU0laRShpbmZvLmxhYmVsKSk7CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL25wbGIvbnBsYi5neXAgYi9zcmMvc3RhcmJvYXJkL25wbGIvbnBsYi5neXAKaW5kZXggNTAzM2YyMC4uMzEwOTA4MyAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL25wbGIuZ3lwCisrKyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9ucGxiLmd5cApAQCAtMTI1LDYgKzEyNSw5IEBACiAgICAgICAgICdsb2dfcmF3X2R1bXBfc3RhY2tfdGVzdC5jYycsCiAgICAgICAgICdsb2dfcmF3X3Rlc3QuY2MnLAogICAgICAgICAnbG9nX3Rlc3QuY2MnLAorICAgICAgICAjIFRPRE86IFNlcGFyYXRlIGZ1bmN0aW9ucyB0ZXN0ZWQgYnkgbWVkaWEgYnVmZmVyIHRlc3QgaW50byBtdWx0aXBsZQorICAgICAgICAjIGZpbGVzLgorICAgICAgICAnbWVkaWFfYnVmZmVyX3Rlc3QuY2MnLAogICAgICAgICAnbWVtb3J5X2FsaWduX3RvX3BhZ2Vfc2l6ZV90ZXN0LmNjJywKICAgICAgICAgJ21lbW9yeV9hbGxvY2F0ZV9hbGlnbmVkX3Rlc3QuY2MnLAogICAgICAgICAnbWVtb3J5X2FsbG9jYXRlX3Rlc3QuY2MnLApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9ucGxiL3BsYXllcl9jcmVhdGVfdGVzdC5jYyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfY3JlYXRlX3Rlc3QuY2MKaW5kZXggOGI4OWExOC4uZDc4MDZlNSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9ucGxiL3BsYXllcl9jcmVhdGVfdGVzdC5jYworKysgYi9zcmMvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0ZV90ZXN0LmNjCkBAIC05MCw5ICs5MCw5IEBACiAgICAgU2JQbGF5ZXIgcGxheWVyID0gU2JQbGF5ZXJDcmVhdGUoCiAgICAgICAgIGZha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8ud2luZG93KCksIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQsCiAgICAgICAgIGtTYk1lZGlhQXVkaW9Db2RlY0FhYywKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICBTQl9QTEFZRVJfTk9fRFVSQVRJT04sCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICBrU2JEcm1TeXN0ZW1JbnZhbGlkLCAmYXVkaW9faGVhZGVyLCBEdW1teURlYWxsb2NhdGVTYW1wbGVGdW5jLAogICAgICAgICBEdW1teURlY29kZXJTdGF0dXNGdW5jLCBEdW1teVN0YXR1c0Z1bmMsCiAjaWYgU0JfSEFTKFBMQVlFUl9FUlJPUl9NRVNTQUdFKQpAQCAtMTEwLDcgKzExMCw3IEBACiAgIH0KIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX05VTExfQ0FMTEJBQ0tTX0lOVkFMSURfUkVUVVJOX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFRFU1RfRihTYlBsYXllclRlc3QsIE51bGxDYWxsYmFja3MpIHsKICAgU2JNZWRpYUF1ZGlvSGVhZGVyIGF1ZGlvX2hlYWRlciA9IEdldERlZmF1bHRBdWRpb0hlYWRlcigpOwogICBTYk1lZGlhVmlkZW9Db2RlYyBrVmlkZW9Db2RlYyA9IGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQ7CkBAIC0xMjksOSArMTI5LDkgQEAKICAgICAgIFNiUGxheWVyIHBsYXllciA9IFNiUGxheWVyQ3JlYXRlKAogICAgICAgICAgIGZha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8ud2luZG93KCksIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQsCiAgICAgICAgICAga1NiTWVkaWFBdWRpb0NvZGVjQWFjLAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgICAgICAgU0JfUExBWUVSX05PX0RVUkFUSU9OLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgICBrU2JEcm1TeXN0ZW1JbnZhbGlkLCAmYXVkaW9faGVhZGVyLCBOVUxMIC8qIGRlYWxsb2NhdGVfc2FtcGxlX2Z1bmMgKi8sCiAgICAgICAgICAgRHVtbXlEZWNvZGVyU3RhdHVzRnVuYywgRHVtbXlTdGF0dXNGdW5jLAogI2lmIFNCX0hBUyhQTEFZRVJfRVJST1JfTUVTU0FHRSkKQEAgLTE0OCw5ICsxNDgsOSBAQAogICAgICAgU2JQbGF5ZXIgcGxheWVyID0gU2JQbGF5ZXJDcmVhdGUoCiAgICAgICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy53aW5kb3coKSwga1NiTWVkaWFWaWRlb0NvZGVjSDI2NCwKICAgICAgICAgICBrU2JNZWRpYUF1ZGlvQ29kZWNBYWMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgICBTQl9QTEFZRVJfTk9fRFVSQVRJT04sCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgIGtTYkRybVN5c3RlbUludmFsaWQsICZhdWRpb19oZWFkZXIsIER1bW15RGVhbGxvY2F0ZVNhbXBsZUZ1bmMsCiAgICAgICAgICAgTlVMTCAvKiBkZWNvZGVyX3N0YXR1c19mdW5jICovLCBEdW1teVN0YXR1c0Z1bmMsCiAjaWYgU0JfSEFTKFBMQVlFUl9FUlJPUl9NRVNTQUdFKQpAQCAtMTY3LDkgKzE2Nyw5IEBACiAgICAgICBTYlBsYXllciBwbGF5ZXIgPSBTYlBsYXllckNyZWF0ZSgKICAgICAgICAgICBmYWtlX2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfLndpbmRvdygpLCBrU2JNZWRpYVZpZGVvQ29kZWNIMjY0LAogICAgICAgICAgIGtTYk1lZGlhQXVkaW9Db2RlY0FhYywKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgIFNCX1BMQVlFUl9OT19EVVJBVElPTiwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgICAgICAga1NiRHJtU3lzdGVtSW52YWxpZCwgJmF1ZGlvX2hlYWRlciwgRHVtbXlEZWFsbG9jYXRlU2FtcGxlRnVuYywKICAgICAgICAgICBEdW1teURlY29kZXJTdGF0dXNGdW5jLCBOVUxMIC8qc3RhdHVzX2Z1bmMgKi8sCiAjaWYgU0JfSEFTKFBMQVlFUl9FUlJPUl9NRVNTQUdFKQpAQCAtMTg3LDkgKzE4Nyw5IEBACiAgICAgICBTYlBsYXllciBwbGF5ZXIgPSBTYlBsYXllckNyZWF0ZSgKICAgICAgICAgICBmYWtlX2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfLndpbmRvdygpLCBrU2JNZWRpYVZpZGVvQ29kZWNIMjY0LAogICAgICAgICAgIGtTYk1lZGlhQXVkaW9Db2RlY0FhYywKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgIFNCX1BMQVlFUl9OT19EVVJBVElPTiwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgICAgICAga1NiRHJtU3lzdGVtSW52YWxpZCwgJmF1ZGlvX2hlYWRlciwgRHVtbXlEZWFsbG9jYXRlU2FtcGxlRnVuYywKICAgICAgICAgICBEdW1teURlY29kZXJTdGF0dXNGdW5jLCBEdW1teVN0YXR1c0Z1bmMsIE5VTEwgLyplcnJvcl9mdW5jICovLAogICAgICAgICAgIE5VTEwgLyogY29udGV4dCAqLywgb3V0cHV0X21vZGUsCkBAIC0yMDEsNyArMjAxLDcgQEAKICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9FUlJPUl9NRVNTQUdFKQogICB9CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX05VTExfQ0FMTEJBQ0tTX0lOVkFMSURfUkVUVVJOX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKICNpZiBTQl9IQVMoQVVESU9MRVNTX1ZJREVPKQogVEVTVF9GKFNiUGxheWVyVGVzdCwgQXVkaW9sZXNzKSB7CkBAIC0yMjAsOSArMjIwLDkgQEAKICAgICBTYlBsYXllciBwbGF5ZXIgPSBTYlBsYXllckNyZWF0ZSgKICAgICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy53aW5kb3coKSwga1ZpZGVvQ29kZWMsCiAgICAgICAgIGtTYk1lZGlhQXVkaW9Db2RlY05vbmUsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgU0JfUExBWUVSX05PX0RVUkFUSU9OLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAga1NiRHJtU3lzdGVtSW52YWxpZCwgTlVMTCAvKiBhdWRpb19oZWFkZXIgKi8sIER1bW15RGVhbGxvY2F0ZVNhbXBsZUZ1bmMsCiAgICAgICAgIER1bW15RGVjb2RlclN0YXR1c0Z1bmMsIER1bW15U3RhdHVzRnVuYywKICNpZiBTQl9IQVMoUExBWUVSX0VSUk9SX01FU1NBR0UpCkBAIC0yNDEsNyArMjQxLDcgQEAKIH0KICNlbmRpZiAgLy8gU0JfSEFTKEFVRElPTEVTU19WSURFTykKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0FVRElPX09OTFlfVklERU9fQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogVEVTVF9GKFNiUGxheWVyVGVzdCwgQXVkaW9Pbmx5KSB7CiAgIFNiTWVkaWFBdWRpb0hlYWRlciBhdWRpb19oZWFkZXIgPSBHZXREZWZhdWx0QXVkaW9IZWFkZXIoKTsKICAgU2JNZWRpYUF1ZGlvQ29kZWMga0F1ZGlvQ29kZWMgPSBrU2JNZWRpYUF1ZGlvQ29kZWNBYWM7CkBAIC0yNjAsOSArMjYwLDkgQEAKICAgICBTYlBsYXllciBwbGF5ZXIgPSBTYlBsYXllckNyZWF0ZSgKICAgICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy53aW5kb3coKSwga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSwKICAgICAgICAga0F1ZGlvQ29kZWMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgU0JfUExBWUVSX05PX0RVUkFUSU9OLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAga1NiRHJtU3lzdGVtSW52YWxpZCwgJmF1ZGlvX2hlYWRlciwgRHVtbXlEZWFsbG9jYXRlU2FtcGxlRnVuYywKICAgICAgICAgRHVtbXlEZWNvZGVyU3RhdHVzRnVuYywgRHVtbXlTdGF0dXNGdW5jLAogI2lmIFNCX0hBUyhQTEFZRVJfRVJST1JfTUVTU0FHRSkKQEAgLTI3OSw5ICsyNzksOSBAQAogICAgIFNiUGxheWVyRGVzdHJveShwbGF5ZXIpOwogICB9CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0FVRElPX09OTFlfVklERU9fQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX01VTFRJX1BMQVlFUl9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiBURVNUX0YoU2JQbGF5ZXJUZXN0LCBNdWx0aVBsYXllcikgewogICBTYk1lZGlhQXVkaW9IZWFkZXIgYXVkaW9faGVhZGVyID0gR2V0RGVmYXVsdEF1ZGlvSGVhZGVyKCk7CiAgIFNiRHJtU3lzdGVtIGtEcm1TeXN0ZW0gPSBrU2JEcm1TeXN0ZW1JbnZhbGlkOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgIC8vIFRPRE86IHR1cm4gdGhpcyBpbnRvIGEgbWFjcm8uCiAgIC8vIFBlcmZvcm0gYSBjaGVjayB0byBkZXRlcm1pbmUgaWYgbmV3IGF1ZGlvIGNvZGVjcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCiAgIC8vIFNiTWVkaWFBdWRpb0NvZGVjIGVudW0sIGJ1dCBub3QgdGhlIGFycmF5IHxhdWRpb19jb2RlY3N8LiBJZiB0aGUgY29tcGlsZXIKLSAgLy8gd2FybnMgYWJvdXQgYSBtaXNzaW5nIGNhc2UgaGVyZSwgdGhlIHZhbHVlIG11c3QgYmUgYWRkZWQgdG8gfGF1ZGlvX2NvZGVjc3wuCisgIC8vIHdhcm5zIGFib3V0IGEgbWlzc2luZyBjYXNlIGhlcmUsIHRoZSB2YWx1ZSBtdXN0IGJlIGFkZGVkIHRvIHxrQXVkaW9Db2RlY3N8LgogICBTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYyA9IGtBdWRpb0NvZGVjc1swXTsKICAgc3dpdGNoIChhdWRpb19jb2RlYykgewogICAgIGNhc2Uga0F1ZGlvQ29kZWNzWzBdOgpAQCAtMzE5LDcgKzMxOSw3IEBACiAgIC8vIFRPRE86IHR1cm4gdGhpcyBpbnRvIGEgbWFjcm8uCiAgIC8vIFBlcmZvcm0gYSBjaGVjayB0byBkZXRlcm1pbmUgaWYgbmV3IHZpZGVvIGNvZGVjcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCiAgIC8vIFNiTWVkaWFWaWRlb0NvZGVjIGVudW0sIGJ1dCBub3QgdGhlIGFycmF5IHx2aWRlb19jb2RlY3N8LiBJZiB0aGUgY29tcGlsZXIKLSAgLy8gd2FybnMgYWJvdXQgYSBtaXNzaW5nIGNhc2UgaGVyZSwgdGhlIHZhbHVlIG11c3QgYmUgYWRkZWQgdG8gfHZpZGVvX2NvZGVjc3wuCisgIC8vIHdhcm5zIGFib3V0IGEgbWlzc2luZyBjYXNlIGhlcmUsIHRoZSB2YWx1ZSBtdXN0IGJlIGFkZGVkIHRvIHxrVmlkZW9Db2RlY3N8LgogICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYyA9IGtWaWRlb0NvZGVjc1swXTsKICAgc3dpdGNoICh2aWRlb19jb2RlYykgewogICAgIGNhc2Uga1ZpZGVvQ29kZWNzWzBdOgpAQCAtMzY0LDcgKzM2NCw3IEBACiAgICAgU2JQbGF5ZXJEZXN0cm95KHBsYXllcik7CiAgIH0KIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfTVVMVElfUExBWUVSX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAjZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0ZV93aXRoX3VybF90ZXN0LmNjIGIvc3JjL3N0YXJib2FyZC9ucGxiL3BsYXllcl9jcmVhdGVfd2l0aF91cmxfdGVzdC5jYwppbmRleCBmNzEyMWIxLi41ODA5YmM1IDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0ZV93aXRoX3VybF90ZXN0LmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfY3JlYXRlX3dpdGhfdXJsX3Rlc3QuY2MKQEAgLTYwLDkgKzYwLDkgQEAKICAgICB9CiAgICAgU2JQbGF5ZXIgcGxheWVyID0gU2JQbGF5ZXJDcmVhdGVXaXRoVXJsKAogICAgICAgICBrUGxheWVyVXJsLCB3aW5kb3csCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgU0JfUExBWUVSX05PX0RVUkFUSU9OLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgRHVtbXlQbGF5ZXJTdGF0dXNGdW5jLCBEdW1teUVuY3J5cHRlZE1lZGlhSW5pdGFEYXRhRW5jb3VudGVyZWRGdW5jLAogICAgICAgICBEdW1teVBsYXllckVycm9yRnVuYywgTlVMTCk7CiAKQEAgLTc4LDcgKzc4LDcgQEAKICAgU2JXaW5kb3dEZXN0cm95KHdpbmRvdyk7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9OVUxMX0NBTExCQUNLU19JTlZBTElEX1JFVFVSTl9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiBURVNUKFNiUGxheWVyVXJsVGVzdCwgTnVsbENhbGxiYWNrcykgewogICBTYldpbmRvd09wdGlvbnMgd2luZG93X29wdGlvbnM7CiAgIFNiV2luZG93U2V0RGVmYXVsdE9wdGlvbnMoJndpbmRvd19vcHRpb25zKTsKQEAgLTEyNCw5ICsxMjQsOSBAQAogICAgIH0KICAgfQogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9OVUxMX0NBTExCQUNLU19JTlZBTElEX1JFVFVSTl9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTVVMVElfUExBWUVSX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFRFU1QoU2JQbGF5ZXJVcmxUZXN0LCBNdWx0aVBsYXllcikgewogICBTYldpbmRvd09wdGlvbnMgd2luZG93X29wdGlvbnM7CiAgIFNiV2luZG93U2V0RGVmYXVsdE9wdGlvbnMoJndpbmRvd19vcHRpb25zKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogICB9CiAgIFNiV2luZG93RGVzdHJveSh3aW5kb3cpOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9NVUxUSV9QTEFZRVJfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3BsYXllci5oIGIvc3JjL3N0YXJib2FyZC9wbGF5ZXIuaAppbmRleCA1MjBiYmYwLi45NmE4ZjIzIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3BsYXllci5oCisrKyBiL3NyYy9zdGFyYm9hcmQvcGxheWVyLmgKQEAgLTExMSw3ICsxMTEsMjMgQEAKICAga1NiUGxheWVyT3V0cHV0TW9kZUludmFsaWQsCiB9IFNiUGxheWVyT3V0cHV0TW9kZTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKy8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzYW1wbGVzIHRvIGJlIHdyaXR0ZW4gaW50byBTYlBsYXllcldyaXRlU2FtcGxlMi4KK3R5cGVkZWYgc3RydWN0IFNiUGxheWVyU2FtcGxlSW5mbyB7CisgIC8vIFBvaW50cyB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHNhbXBsZSBkYXRhLgorICBjb25zdCB2b2lkKiBidWZmZXI7CisgIC8vIFNpemUgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB8YnVmZmVyfC4KKyAgaW50IGJ1ZmZlcl9zaXplOworICAvLyBUaGUgdGltZXN0YW1wIG9mIHRoZSBzYW1wbGUgaW4gU2JUaW1lLgorICBTYlRpbWUgdGltZXN0YW1wOworICAvLyBJbmZvcm1hdGlvbiBhYm91dCBhIHZpZGVvIHNhbXBsZS4gVGhpcyB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgdmlkZW8gc2FtcGxlcy4KKyAgLy8gT3RoZXJ3aXNlLCBpdCBtdXN0IGJlIHxOVUxMfC4KKyAgY29uc3QgU2JNZWRpYVZpZGVvU2FtcGxlSW5mbyogdmlkZW9fc2FtcGxlX2luZm87CisgIC8vIFRoZSBEUk0gc3lzdGVtIHJlbGF0ZWQgaW5mbyBmb3IgdGhlIG1lZGlhIHNhbXBsZS4gVGhpcyB2YWx1ZSBpcyByZXF1aXJlZAorICAvLyBmb3IgZW5jcnlwdGVkIHNhbXBsZXMuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSB8TlVMTHwuCisgIGNvbnN0IFNiRHJtU2FtcGxlSW5mbyogZHJtX2luZm87Cit9IFNiUGxheWVyU2FtcGxlSW5mbzsKKworI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IG1lZGlhIHBsYXliYWNrIHN0YXRlLgogdHlwZWRlZiBzdHJ1Y3QgU2JQbGF5ZXJJbmZvIHsKICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBwbGF5YmFjayBoZWFkLCBhcyBwcmVjaXNlbHkgYXMgcG9zc2libGUsIGluIDkwS0h6IHRpY2tzCkBAIC0xNzAsNyArMTg2LDcgQEAKICAgU2JNZWRpYVRpbWUgYnVmZmVyX2R1cmF0aW9uX3B0czsKICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKIH0gU2JQbGF5ZXJJbmZvOwotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBtZWRpYSBwbGF5YmFjayBzdGF0ZS4KIHR5cGVkZWYgc3RydWN0IFNiUGxheWVySW5mbzIgewogICAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIHBsYXliYWNrIGhlYWQsIGFzIHByZWNpc2VseSBhcyBwb3NzaWJsZSwgaW4KQEAgLTIyNiw3ICsyNDIsNyBAQAogICBTYlRpbWUgYnVmZmVyX2R1cmF0aW9uOwogI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogfSBTYlBsYXllckluZm8yOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogLy8gQW4gb3BhcXVlIGhhbmRsZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1wcml2YXRlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYQogLy8gcGxheWVyLgpAQCAtMzI3LDE1ICszNDMsMTUgQEAKIC8vIFNiUGxheWVyQ3JlYXRlV2l0aFVybCwgaXQgdGFrZXMgaW4gYSBjYWxsYmFjaywKIC8vIHxlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2VuY291bnRlcmVkX2NifCwgd2hpY2ggaXMgcnVuIHdoZW4gZW5jcnlwdGVkIG1lZGlhCiAvLyBpbml0aWFsIGRhdGEgaXMgZW5jb3VudGVyZWQuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTlVMTF9DQUxMQkFDS1NfSU5WQUxJRF9SRVRVUk5fQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogLy8gSWYgdGhlIGNhbGxiYWNrIGlzIHxOVUxMfCwgdGhlbiB8a1NiUGxheWVySW52YWxpZHwgbXVzdCBiZSByZXR1cm5lZC4KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfTlVMTF9DQUxMQkFDS1NfSU5WQUxJRF9SRVRVUk5fQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFNCX0VYUE9SVCBTYlBsYXllcgogU2JQbGF5ZXJDcmVhdGVXaXRoVXJsKGNvbnN0IGNoYXIqIHVybCwKICAgICAgICAgICAgICAgICAgICAgICBTYldpbmRvdyB3aW5kb3csCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVGltZSBkdXJhdGlvbl9wdHMsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyU3RhdHVzRnVuYyBwbGF5ZXJfc3RhdHVzX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJFbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWRDQgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2VuY291bnRlcmVkX2NiLApAQCAtMzgxLDEwICszOTcsMTAgQEAKIC8vIHx2aWRlb19jb2RlY3w6IFRoZSB2aWRlbyBjb2RlYyB1c2VkIGZvciB0aGUgcGxheWVyLiBJZiB8dmlkZW9fY29kZWN8IGlzCiAvLyAgIHxrU2JNZWRpYVZpZGVvQ29kZWNOb25lfCwgdGhlIHBsYXllciBpcyBhbiBhdWRpby1vbmx5IHBsYXllci4gSWYKIC8vICAgfHZpZGVvX2NvZGVjfCBpcyBhbnkgb3RoZXIgdmFsdWUsIHRoZSBwbGF5ZXIgaXMgYW4gYXVkaW8vdmlkZW8gZGVjb2Rlci4KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9BVURJT19PTkxZX1ZJREVPX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vICAgVGhpcyBjYW4gYmUgc2V0IHRvIHxrU2JNZWRpYVZpZGVvQ29kZWNOb25lfCB0byBwbGF5IGEgdmlkZW8gd2l0aCBvbmx5IGFuCiAvLyAgIGF1ZGlvIHRyYWNrLgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9BVURJT19PTkxZX1ZJREVPX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAvLwogLy8gfGF1ZGlvX2NvZGVjfDogVGhlIGF1ZGlvIGNvZGVjIHVzZWQgZm9yIHRoZSBwbGF5ZXIuIFRoZSB2YWx1ZSBzaG91bGQgbmV2ZXIKIC8vICAgYmUgfGtTYk1lZGlhQXVkaW9Db2RlY05vbmV8LiBJbiBhZGRpdGlvbiwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgYQpAQCAtMzk0LDEwICs0MTAsMTAgQEAKIC8vICAgYXVkaW8gdHJhY2suICBJbiBzdWNoIGNhc2UgfGF1ZGlvX2hlYWRlcnwgbXVzdCBiZSBOVUxMLgogI2VuZGlmICAvLyBTQl9IQVMoQVVESU9MRVNTX1ZJREVPKQogLy8KLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogLy8gfGR1cmF0aW9uX3B0c3w6IFRoZSBleHBlY3RlZCBtZWRpYSBkdXJhdGlvbiBpbiA5MEtIeiB0aWNrcyAoUFRTKS4gSXQgbWF5IGJlCiAvLyAgIHNldCB0byB8U0JfUExBWUVSX05PX0RVUkFUSU9OfCBmb3IgbGl2ZSBzdHJlYW1zLgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIC8vCiAvLyB8ZHJtX3N5c3RlbXw6IElmIHRoZSBtZWRpYSBzdHJlYW0gaGFzIGVuY3J5cHRlZCBwb3J0aW9ucywgdGhlbiB0aGlzCiAvLyAgIHBhcmFtZXRlciBwcm92aWRlcyBhbiBhcHByb3ByaWF0ZSBEUk0gc3lzdGVtLCBjcmVhdGVkIHdpdGgKQEAgLTQ1MywxOCArNDY5LDE4IEBACiAvLyAgIHRoZSBwcm92aWRlciBpcyBub3QgZ2l2ZW4sIHRoZSBwbGF5ZXIgd2lsbCBmYWlsIGJ5IHJldHVybmluZwogLy8gICB8a1NiUGxheWVySW52YWxpZHwuCiAvLwotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX05VTExfQ0FMTEJBQ0tTX0lOVkFMSURfUkVUVVJOX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIC8vIElmIHxOVUxMfCBpcyBwYXNzZWQgdG8gYW55IG9mIHRoZSBjYWxsYmFja3MgKHxzYW1wbGVfZGVhbGxvY2F0b3JfZnVuY3wsCiAvLyB8ZGVjb2Rlcl9zdGF0dXNfZnVuY3wsIHxwbGF5ZXJfc3RhdHVzX2Z1bmN8LCBvciB8cGxheWVyX2Vycm9yX2Z1bmN8IGlmIGl0CiAvLyBhcHBsaWVzKSwgdGhlbiB8a1NiUGxheWVySW52YWxpZHwgbXVzdCBiZSByZXR1cm5lZC4KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfTlVMTF9DQUxMQkFDS1NfSU5WQUxJRF9SRVRVUk5fQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIFNCX0VYUE9SVCBTYlBsYXllcgogU2JQbGF5ZXJDcmVhdGUoU2JXaW5kb3cgd2luZG93LAogICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCiAgICAgICAgICAgICAgICBTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgICAgICAgU2JNZWRpYVRpbWUgZHVyYXRpb25fcHRzLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sCiAgICAgICAgICAgICAgICBjb25zdCBTYk1lZGlhQXVkaW9IZWFkZXIqIGF1ZGlvX2hlYWRlciwKICAgICAgICAgICAgICAgIFNiUGxheWVyRGVhbGxvY2F0ZVNhbXBsZUZ1bmMgc2FtcGxlX2RlYWxsb2NhdGVfZnVuYywKQEAgLTQ5Niw3ICs1MTIsNyBAQAogLy8gfHBsYXllcnw6IFRoZSBwbGF5ZXIgdG8gYmUgZGVzdHJveWVkLgogU0JfRVhQT1JUIHZvaWQgU2JQbGF5ZXJEZXN0cm95KFNiUGxheWVyIHBsYXllcik7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogLy8gVGVsbHMgdGhlIHBsYXllciB0byBmcmVlemUgcGxheWJhY2sgKGlmIHBsYXliYWNrIGhhcyBhbHJlYWR5IHN0YXJ0ZWQpLAogLy8gcmVzZXQgb3IgZmx1c2ggdGhlIGRlY29kZXIgcGlwZWxpbmUsIGFuZCBnbyBiYWNrIHRvIHRoZSBQcmVyb2xsaW5nIHN0YXRlLgogLy8gVGhlIHBsYXllciBzaG91bGQgcmVzdGFydCBwbGF5YmFjayBvbmNlIGl0IGNhbiBkaXNwbGF5IHRoZSBmcmFtZSBhdApAQCAtNTI3LDcgKzU0Myw3IEBACiBTQl9FWFBPUlQgdm9pZCBTYlBsYXllclNlZWsoU2JQbGF5ZXIgcGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFUaW1lIHNlZWtfdG9fcHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWNrZXQpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIC8vIFNiUGxheWVyU2VlazIgaXMgbGlrZSB0aGUgZGVwcmVjYXRlZCBTYlBsYXllclNlZWssIGJ1dCBhY2NlcHRzIFNiVGltZQogLy8gfHNlZWtfdG9fdGltZXN0YW1wfCBpbnN0ZWFkIG9mIFNiTWVkaWFUaW1lIHxzZWVrX3RvX3B0c3wuCiAKQEAgLTU2MSw3ICs1NzcsNyBAQAogU0JfRVhQT1JUIHZvaWQgU2JQbGF5ZXJTZWVrMihTYlBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZSBzZWVrX3RvX3RpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpY2tldCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogCiAvLyBXcml0ZXMgYSBzaW5nbGUgc2FtcGxlIG9mIHRoZSBnaXZlbiBtZWRpYSB0eXBlIHRvIHxwbGF5ZXJ8J3MgaW5wdXQgc3RyZWFtLgogLy8gSXRzIGRhdGEgbWF5IGJlIHBhc3NlZCBpbiB2aWEgbW9yZSB0aGFuIG9uZSBidWZmZXJzLiAgVGhlIGxpZmV0aW1lIG9mCkBAIC01OTUsOSArNjExLDkgQEAKIC8vIHx2aWRlb19zYW1wbGVfaW5mb3w6IEluZm9ybWF0aW9uIGFib3V0IGEgdmlkZW8gc2FtcGxlLiBUaGlzIHZhbHVlIGlzCiAvLyAgIHJlcXVpcmVkIGlmIHxzYW1wbGVfdHlwZXwgaXMgfGtTYk1lZGlhVHlwZVZpZGVvfC4gT3RoZXJ3aXNlLCBpdCBtdXN0IGJlCiAvLyAgIHxOVUxMfC4KLS8vIHxzYW1wbGVfZHJtX2luZm98OiBUaGUgRFJNIHN5c3RlbSBmb3IgdGhlIG1lZGlhIHNhbXBsZS4gVGhpcyB2YWx1ZSBpcwotLy8gICByZXF1aXJlZCBmb3IgZW5jcnlwdGVkIHNhbXBsZXMuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSB8TlVMTHwuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorLy8gfHNhbXBsZV9kcm1faW5mb3w6IFRoZSBEUk0gc3lzdGVtIHJlbGF0ZWQgaW5mbyBmb3IgdGhlIG1lZGlhIHNhbXBsZS4gVGhpcworLy8gICB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgZW5jcnlwdGVkIHNhbXBsZXMuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSB8TlVMTHwuCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogU0JfRVhQT1JUIHZvaWQgU2JQbGF5ZXJXcml0ZVNhbXBsZSgKICAgICBTYlBsYXllciBwbGF5ZXIsCiAgICAgU2JNZWRpYVR5cGUgc2FtcGxlX3R5cGUsCkBAIC02MTIsOSArNjI4LDM1IEBACiAgICAgU2JNZWRpYVRpbWUgc2FtcGxlX3B0cywKICAgICBjb25zdCBTYk1lZGlhVmlkZW9TYW1wbGVJbmZvKiB2aWRlb19zYW1wbGVfaW5mbywKICAgICBjb25zdCBTYkRybVNhbXBsZUluZm8qIHNhbXBsZV9kcm1faW5mbyk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAvLyBTYlBsYXllcldyaXRlU2FtcGxlMiBpcyBsaWtlIHRoZSBkZXByZWNhdGVkIFNiUGxheWVyV3JpdGVTYW1wbGUsIGJ1dCBhY2NlcHRzCi0vLyBTYlRpbWUgfHNhbXBsZV90aW1lc3RhbXB8IGluc3RlYWQgb2YgU2JNZWRpYVRpbWUgfHNhbXBsZV9wdHN8LgorLy8gU2JUaW1lIHxzYW1wbGVfdGltZXN0YW1wfCBpbnN0ZWFkIG9mIFNiTWVkaWFUaW1lIHxzYW1wbGVfcHRzfCwgYW5kIGFsc28KKy8vIGFsbG93cyB3cml0aW5nIG9mIG11bHRpcGxlIHNhbXBsZXMgaW4gb25lIFNiUGxheWVyV3JpdGVTYW1wbGUyKCkgY2FsbC4KKworLy8gV3JpdGVzIHNhbXBsZXMgb2YgdGhlIGdpdmVuIG1lZGlhIHR5cGUgdG8gfHBsYXllcnwncyBpbnB1dCBzdHJlYW0uIFRoZQorLy8gbGlmZXRpbWUgb2YgfHNhbXBsZV9pbmZvc3wsIGFuZCB0aGUgbWVtYmVycyBvZiBpdHMgZWxlbWVudHMgbGlrZSB8YnVmZmVyfCwKKy8vIHx2aWRlb19zYW1wbGVfaW5mb3wsIGFuZCB8ZHJtX2luZm98IChhcyB3ZWxsIGFzIG1lbWJlciB8c3Vic2FtcGxlX21hcHBpbmd8CisvLyBjb250YWluZWQgaW5zaWRlIGl0KSBhcmUgbm90IGd1YXJhbnRlZWQgcGFzdCB0aGUgY2FsbCB0bworLy8gU2JQbGF5ZXJXcml0ZVNhbXBsZTIuIFRoYXQgbWVhbnMgdGhhdCBiZWZvcmUgcmV0dXJuaW5nLCB0aGUgaW1wbGVtZW50YXRpb24KKy8vIG11c3Qgc3luY2hyb25vdXNseSBjb3B5IGFueSBpbmZvcm1hdGlvbiBpdCB3YW50cyB0byByZXRhaW4gZnJvbSB0aG9zZQorLy8gc3RydWN0dXJlcy4KKy8vCisvLyB8cGxheWVyfDogVGhlIHBsYXllciB0byB3aGljaCB0aGUgc2FtcGxlIGlzIHdyaXR0ZW4uCisvLyB8c2FtcGxlX3R5cGV8OiBUaGUgdHlwZSBvZiBzYW1wbGUgYmVpbmcgd3JpdHRlbi4gU2VlIHRoZSB8U2JNZWRpYVR5cGV8CisvLyAgIGVudW0gaW4gbWVkaWEuaC4KKy8vIHxzYW1wbGVfaW5mb3N8OiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgU2JQbGF5ZXJTYW1wbGVJbmZvIHdpdGgKKy8vICAgfG51bWJlcl9vZl9zYW1wbGVfaW5mb3N8IGVsZW1lbnRzLCBlYWNoIGhvbGRzIHRoZSBkYXRhIGZvciBhbiBzYW1wbGUsIGkuZS4KKy8vICAgYSBzZXF1ZW5jZSBvZiB3aG9sZSBOQUwgVW5pdHMgZm9yIHZpZGVvLCBvciBhIGNvbXBsZXRlIGF1ZGlvIGZyYW1lLgorLy8gICB8c2FtcGxlX2luZm9zfCBjYW5ub3QgYmUgYXNzdW1lZCB0byBsaXZlIHBhc3QgdGhlIGNhbGwgaW50bworLy8gICBTYlBsYXllcldyaXRlU2FtcGxlMigpLCBzbyBpdCBtdXN0IGJlIGNvcGllZCBpZiBpdHMgY29udGVudCB3aWxsIGJlIHVzZWQKKy8vICAgYWZ0ZXIgU2JQbGF5ZXJXcml0ZVNhbXBsZTIoKSByZXR1cm5zLgorLy8gfG51bWJlcl9vZl9zYW1wbGVfaW5mb3N8OiBTcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBjb250YWluZWQgaW5zaWRlCisvLyAgIHxzYW1wbGVfaW5mb3N8LiAgSXQgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSwgYW5kIGxlc3MgdGhhbiB0aGUgcmV0dXJuIHZhbHVlCisvLyAgIG9mIFNiUGxheWVyR2V0TWF4aW11bU51bWJlck9mU2FtcGxlc1BlcldyaXRlKCkuCitTQl9FWFBPUlQgdm9pZCBTYlBsYXllcldyaXRlU2FtcGxlMihTYlBsYXllciBwbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVHlwZSBzYW1wbGVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiUGxheWVyU2FtcGxlSW5mbyogc2FtcGxlX2luZm9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlcl9vZl9zYW1wbGVfaW5mb3MpOwogCiAvLyBXcml0ZXMgYSBzaW5nbGUgc2FtcGxlIG9mIHRoZSBnaXZlbiBtZWRpYSB0eXBlIHRvIHxwbGF5ZXJ8J3MgaW5wdXQgc3RyZWFtLgogLy8gSXRzIGRhdGEgbWF5IGJlIHBhc3NlZCBpbiB2aWEgbW9yZSB0aGFuIG9uZSBidWZmZXJzLiAgVGhlIGxpZmV0aW1lIG9mCkBAIC02MjQsNDIgKzY2NiwxNCBAQAogLy8gYmVmb3JlIHJldHVybmluZywgdGhlIGltcGxlbWVudGF0aW9uIG11c3Qgc3luY2hyb25vdXNseSBjb3B5IGFueSBpbmZvcm1hdGlvbgogLy8gaXQgd2FudHMgdG8gcmV0YWluIGZyb20gdGhvc2Ugc3RydWN0dXJlcy4KIC8vCi0vLyB8cGxheWVyfDogVGhlIHBsYXllciB0byB3aGljaCB0aGUgc2FtcGxlIGlzIHdyaXR0ZW4uCi0vLyB8c2FtcGxlX3R5cGV8OiBUaGUgdHlwZSBvZiBzYW1wbGUgYmVpbmcgd3JpdHRlbi4gU2VlIHRoZSB8U2JNZWRpYVR5cGV8Ci0vLyAgIGVudW0gaW4gbWVkaWEuaC4KLS8vIHxzYW1wbGVfYnVmZmVyc3w6IEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBidWZmZXJzIHdpdGgKLS8vICAgfG51bWJlcl9vZl9zYW1wbGVfYnVmZmVyc3wgZWxlbWVudHMgdGhhdCBob2xkIHRoZSBkYXRhIGZvciB0aGlzIHNhbXBsZS4gVGhlCi0vLyAgIGJ1ZmZlcnMgYXJlIGV4cGVjdGVkIHRvIGJlIGEgcG9ydGlvbiBvZiBhIGJ5dGVzdHJlYW0gb2YgdGhlIGNvZGVjIHR5cGUgdGhhdAotLy8gICB0aGUgcGxheWVyIHdhcyBjcmVhdGVkIHdpdGguIFRoZSBidWZmZXJzIHNob3VsZCBjb250YWluIGEgc2VxdWVuY2Ugb2Ygd2hvbGUKLS8vICAgTkFMIFVuaXRzIGZvciB2aWRlbywgb3IgYSBjb21wbGV0ZSBhdWRpbyBmcmFtZS4gIHxzYW1wbGVfYnVmZmVyc3wgY2Fubm90IGJlCi0vLyAgIGFzc3VtZWQgdG8gbGl2ZSBwYXN0IHRoZSBjYWxsIGludG8gU2JQbGF5ZXJXcml0ZVNhbXBsZSgpLCBzbyBpdCBtdXN0IGJlCi0vLyAgIGNvcGllZCBpZiBpdHMgY29udGVudCB3aWxsIGJlIHVzZWQgYWZ0ZXIgU2JQbGF5ZXJXcml0ZVNhbXBsZSgpIHJldHVybnMuCi0vLyB8c2FtcGxlX2J1ZmZlcl9zaXplc3w6IEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzaXplcyB3aXRoCi0vLyAgIHxudW1iZXJfb2Zfc2FtcGxlX2J1ZmZlcnN8IGVsZW1lbnRzLiAgRWFjaCBvZiB0aGVtIHNwZWNpZnkgdGhlIG51bWJlciBvZgotLy8gICBieXRlcyBpbiB0aGUgY29ycmVzcG9uZGluZyBidWZmZXIgY29udGFpbmVkIGluIHxzYW1wbGVfYnVmZmVyc3wuICBOb25lIG9mCi0vLyAgIHRoZW0gY2FuIGJlIDAuICB8c2FtcGxlX2J1ZmZlcl9zaXplc3wgY2Fubm90IGJlIGFzc3VtZWQgdG8gbGl2ZSBwYXN0IHRoZQotLy8gICBjYWxsIGludG8gU2JQbGF5ZXJXcml0ZVNhbXBsZSgpLCBzbyBpdCBtdXN0IGJlIGNvcGllZCBpZiBpdHMgY29udGVudCB3aWxsCi0vLyAgIGJlIHVzZWQgYWZ0ZXIgU2JQbGF5ZXJXcml0ZVNhbXBsZSgpIHJldHVybnMuCi0vLyB8bnVtYmVyX29mX3NhbXBsZV9idWZmZXJzfDogU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbnNpZGUKLS8vICAgfHNhbXBsZV9idWZmZXJzfCBhbmQgfHNhbXBsZV9idWZmZXJfc2l6ZXN8LiAgSXQgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSwgb3IKLS8vICAgdGhlIGNhbGwgd2lsbCBiZSBpZ25vcmVkLgotLy8gfHNhbXBsZV90aW1lc3RhbXB8OiBUaGUgdGltZXN0YW1wIG9mIHRoZSBzYW1wbGUgaW4gbWljcm9zZWNvbmRzLiBOb3RlIHRoYXQKLS8vICAgc2FtcGxlcyBNQVkgYmUgd3JpdHRlbiAic2xpZ2h0bHkiIG91dCBvZiBvcmRlci4KLS8vIHx2aWRlb19zYW1wbGVfaW5mb3w6IEluZm9ybWF0aW9uIGFib3V0IGEgdmlkZW8gc2FtcGxlLiBUaGlzIHZhbHVlIGlzCi0vLyAgIHJlcXVpcmVkIGlmIHxzYW1wbGVfdHlwZXwgaXMgfGtTYk1lZGlhVHlwZVZpZGVvfC4gT3RoZXJ3aXNlLCBpdCBtdXN0IGJlCi0vLyAgIHxOVUxMfC4KLS8vIHxzYW1wbGVfZHJtX2luZm98OiBUaGUgRFJNIHN5c3RlbSBmb3IgdGhlIG1lZGlhIHNhbXBsZS4gVGhpcyB2YWx1ZSBpcwotLy8gICByZXF1aXJlZCBmb3IgZW5jcnlwdGVkIHNhbXBsZXMuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSB8TlVMTHwuCi1TQl9FWFBPUlQgdm9pZCBTYlBsYXllcldyaXRlU2FtcGxlMigKKy8vIHxwbGF5ZXJ8OiBUaGUgcGxheWVyIGZvciB3aGljaCB0aGUgbnVtYmVyIGlzIHJldHJpZXZlZC4KKy8vIHxzYW1wbGVfdHlwZXw6IFRoZSB0eXBlIG9mIHNhbXBsZSBmb3Igd2hpY2ggdGhlIG51bWJlciBpcyByZXRyaWV2ZWQuIFNlZSB0aGUKKy8vICAgfFNiTWVkaWFUeXBlfCBlbnVtIGluIG1lZGlhLmguCitTQl9FWFBPUlQgaW50IFNiUGxheWVyR2V0TWF4aW11bU51bWJlck9mU2FtcGxlc1BlcldyaXRlKAogICAgIFNiUGxheWVyIHBsYXllciwKLSAgICBTYk1lZGlhVHlwZSBzYW1wbGVfdHlwZSwKLSAgICBjb25zdCB2b2lkKiBjb25zdCogc2FtcGxlX2J1ZmZlcnMsCi0gICAgY29uc3QgaW50KiBzYW1wbGVfYnVmZmVyX3NpemVzLAotICAgIGludCBudW1iZXJfb2Zfc2FtcGxlX2J1ZmZlcnMsCi0gICAgU2JUaW1lIHNhbXBsZV90aW1lc3RhbXAsCi0gICAgY29uc3QgU2JNZWRpYVZpZGVvU2FtcGxlSW5mbyogdmlkZW9fc2FtcGxlX2luZm8sCi0gICAgY29uc3QgU2JEcm1TYW1wbGVJbmZvKiBzYW1wbGVfZHJtX2luZm8pOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisgICAgU2JNZWRpYVR5cGUgc2FtcGxlX3R5cGUpOworCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogLy8gV3JpdGVzIGEgbWFya2VyIHRvIHxwbGF5ZXJ8J3MgaW5wdXQgc3RyZWFtIG9mIHxzdHJlYW1fdHlwZXwgaW5kaWNhdGluZyB0aGF0CiAvLyB0aGVyZSBhcmUgbm8gbW9yZSBzYW1wbGVzIGZvciB0aGF0IG1lZGlhIHR5cGUgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhpcwpAQCAtNzE4LDcgKzczMiw3IEBACiAvLyAgIHZhbHVlIG9mIHwxLjB8IG1lYW5zIHRoYXQgaXQgc2hvdWxkIGJlIHBsYXllZCBhdCBmdWxsIHZvbHVtZS4KIFNCX0VYUE9SVCB2b2lkIFNiUGxheWVyU2V0Vm9sdW1lKFNiUGxheWVyIHBsYXllciwgZG91YmxlIHZvbHVtZSk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogLy8gR2V0cyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHBsYXllciBzdGF0ZSBhbmQgd3JpdGVzIGl0IHRvCiAvLyB8b3V0X3BsYXllcl9pbmZvfC4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSBhbmQgaXMKIC8vIGV4cGVjdGVkIHRvIGJlIGluZXhwZW5zaXZlLgpAQCAtNzI2LDcgKzc0MCw3IEBACiAvLyB8cGxheWVyfDogVGhlIHBsYXllciBhYm91dCB3aGljaCBpbmZvcm1hdGlvbiBpcyBiZWluZyByZXRyaWV2ZWQuCiAvLyB8b3V0X3BsYXllcl9pbmZvfDogVGhlIGluZm9ybWF0aW9uIHJldHJpZXZlZCBmb3IgdGhlIHBsYXllci4KIFNCX0VYUE9SVCB2b2lkIFNiUGxheWVyR2V0SW5mbyhTYlBsYXllciBwbGF5ZXIsIFNiUGxheWVySW5mbyogb3V0X3BsYXllcl9pbmZvKTsKLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAvLyBTYlBsYXllckdldEluZm8yIGlzIGxpa2UgdGhlIGRlcHJlY2F0ZWQgU2JQbGF5ZXJHZXRJbmZvLCBidXQgYWNjZXB0cwogLy8gU2JQbGF5ZXJJbmZvMiogfG91dF9wbGF5ZXJfaW5mbzJ8IGluc3RlYWQgb2YgU2JQbGF5ZXJJbmZvIHxvdXRfcGxheWVyX2luZm98LgogCkBAIC03MzgsNyArNzUyLDcgQEAKIC8vIHxvdXRfcGxheWVyX2luZm98OiBUaGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIGZvciB0aGUgcGxheWVyLgogU0JfRVhQT1JUIHZvaWQgU2JQbGF5ZXJHZXRJbmZvMihTYlBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVySW5mbzIqIG91dF9wbGF5ZXJfaW5mbzIpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogLy8gR2l2ZW4gYSBwbGF5ZXIgY3JlYXRlZCB3aXRoIHRoZSBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlCiAvLyBvdXRwdXQgbW9kZSwgaXQgd2lsbCByZXR1cm4gYSBTYkRlY29kZVRhcmdldCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZnJhbWUKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpIGIvc3JjL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKaW5kZXggNzIxNzZlOS4uOTUxNjQ2OCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKKysrIGIvc3JjL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKQEAgLTI3Myw5ICsyNzMsMjEgQEAKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWwuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvY29kZWNfdXRpbC5oJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2Nhbl9wbGF5X21pbWVfYW5kX2tleV9zeXN0ZW0uY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX2J1ZmZlcl9idWRnZXQuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX2NvbmZpZ3VyYXRpb25fc3RlcmVvX29ubHkuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX291dHB1dF9jb3VudF9zdGVyZW9fb25seS5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2FsaWdubWVudC5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2FsbG9jYXRpb25fdW5pdC5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2dhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGQuY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9wYWRkaW5nLmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfc3RvcmFnZV90eXBlLmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfcHJvZ3Jlc3NpdmVfYnVmZmVyX2J1ZGdldC5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfdmlkZW9fYnVmZmVyX2J1ZGdldC5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWRfYWFjX29ubHkuY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3Bvb2xfYWxsb2NhdGVfb25fZGVtYW5kLmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl91c2luZ19tZW1vcnlfcG9vbC5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19vdXRwdXRfcHJvdGVjdGVkLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZF9oMjY0XzEwODBwX3Nmcl9vbmx5LmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3NldF9vdXRwdXRfcHJvdGVjdGlvbi5jYycsCkBAIC0yOTUsNiArMzA3LDcgQEAKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X2N1cnJlbnRfZnJhbWUuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mby5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9pbmZvMi5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9tYXhpbXVtX251bWJlcl9vZl9zYW1wbGVzX3Blcl93cml0ZS5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX291dHB1dF9tb2RlX3N1cHBvcnRlZC5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfaW50ZXJuYWwuaCcsCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfcHJvdGVjdC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9wcm90ZWN0LmNjCmluZGV4IGZiZWYyYzMuLjhhYjNhMjIgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9wcm90ZWN0LmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9wcm90ZWN0LmNjCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvcGFnZV9pbnRlcm5hbC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTUVNT1JZX1BST1RFQ1RfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogYm9vbCBTYk1lbW9yeVByb3RlY3Qodm9pZCogdmlydHVhbF9hZGRyZXNzLCBpbnQ2NF90IHNpemVfYnl0ZXMsIGludCBmbGFncykgewogICByZXR1cm4gU2JQYWdlUHJvdGVjdCh2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL3BhZ2VfaW50ZXJuYWwuaCBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL3BhZ2VfaW50ZXJuYWwuaAppbmRleCA1ZjcyYzZmLi4xMDBhMWQyIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9wYWdlX2ludGVybmFsLmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvcGFnZV9pbnRlcm5hbC5oCkBAIC0xMzAsNyArMTMwLDcgQEAKIC8vIGFsbG9jYXRlZCB2aWEgTWFwVW50cmFja2VkKCkuCiBib29sIFNiUGFnZVVubWFwVW50cmFja2VkKHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgc2l6ZV90IHNpemVfYnl0ZXMpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTUVNT1JZX1BST1RFQ1RfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogLy8gQ2hhbmdlIHRoZSBwcm90ZWN0aW9uIG9mIHxzaXplX2J5dGVzfCBvZiBwaHlzaWNhbCBwYWdlcywgc3RhcnRpbmcgZnJvbQogLy8gfHZpcnR1YWxfYWRkcmVzc3wsIHRvIHxmbGFnc3wsIHJldHVybmluZyB8dHJ1ZXwgb24gc3VjY2Vzcy4KIGJvb2wgU2JQYWdlUHJvdGVjdCh2b2lkKiB2aXJ0dWFsX2FkZHJlc3MsIGludDY0X3Qgc2l6ZV9ieXRlcywgaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2djYy9hdG9taWNfZ2NjX3B1YmxpYy5oIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvZ2NjL2F0b21pY19nY2NfcHVibGljLmgKaW5kZXggYmJmZThkMS4uNmU2ZTY0NSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvZ2NjL2F0b21pY19nY2NfcHVibGljLmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvZ2NjL2F0b21pY19nY2NfcHVibGljLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogfQogCiAvLyA4LWJpdCBhdG9taWMgb3BlcmF0aW9ucy4KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogc3RhdGljIFNCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljOAogU2JBdG9taWNSZWxlYXNlX0NvbXBhcmVBbmRTd2FwOCh2b2xhdGlsZSBTYkF0b21pYzgqIHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzggb2xkX3ZhbHVlLApAQCAtMTIxLDcgKzEyMSw3IEBACiBTYkF0b21pY05vQmFycmllcl9Mb2FkOCh2b2xhdGlsZSBjb25zdCBTYkF0b21pYzgqIHB0cikgewogICByZXR1cm4gX19hdG9taWNfbG9hZF9uKHB0ciwgX19BVE9NSUNfUkVMQVhFRCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogLy8gNjQtYml0IGF0b21pYyBvcGVyYXRpb25zIChvbmx5IGF2YWlsYWJsZSBvbiA2NC1iaXQgcHJvY2Vzc29ycykuCiAjaWYgU0JfSEFTKDY0X0JJVF9BVE9NSUNTKQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvbGludXgvcGFnZV9pbnRlcm5hbC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3BhZ2VfaW50ZXJuYWwuY2MKaW5kZXggMzgzMDIyYy4uNGExYjI0MSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvbGludXgvcGFnZV9pbnRlcm5hbC5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9wYWdlX2ludGVybmFsLmNjCkBAIC0zNiw3ICszNiw3IEBACiBpbnQgU2JNZW1vcnlNYXBGbGFnc1RvTW1hcFByb3RlY3QoaW50IHNiX2ZsYWdzKSB7CiAgIGJvb2wgZmxhZ19zZXQgPSBmYWxzZTsKICAgaW50IG1tYXBfcHJvdGVjdCA9IDA7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTUVNT1JZX1BST1RFQ1RfUkVTRVJWRURfRkxBR19BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIGlmIChzYl9mbGFncyA9PSBrU2JNZW1vcnlNYXBQcm90ZWN0UmVzZXJ2ZWQpIHsKICAgICByZXR1cm4gUFJPVF9OT05FOwogICB9CkBAIC03NSw4ICs3NSw3IEBACiB2b2lkKiBTYlBhZ2VNYXBVbnRyYWNrZWQoc2l6ZV90IHNpemVfYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIC8qdW51c2VkX25hbWUqLykgewotI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpIFwKLSAgICAmJiBTQl9BUElfVkVSU0lPTiA+PSBTQl9NRU1PUllfUFJPVEVDVF9BUElfVkVSU0lPTgorI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpICYmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIGlmIChmbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RFeGVjKSB7CiAgICAgLy8gQ29iYWx0IGRvZXMgbm90IGFsbG93IG1hcHBpbmcgZXhlY3V0YWJsZSBtZW1vcnkgZGlyZWN0bHkuCiAgICAgcmV0dXJuIFNCX01FTU9SWV9NQVBfRkFJTEVEOwpAQCAtOTYsNyArOTUsNyBAQAogICByZXR1cm4gbXVubWFwKHB0ciwgc2l6ZV9ieXRlcykgPT0gMDsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX01FTU9SWV9QUk9URUNUX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIGJvb2wgU2JQYWdlUHJvdGVjdCh2b2lkKiB2aXJ0dWFsX2FkZHJlc3MsIGludDY0X3Qgc2l6ZV9ieXRlcywgaW50IGZsYWdzKSB7CiAgIGludCBtbWFwX3Byb3RlY3QgPSBTYk1lbW9yeU1hcEZsYWdzVG9NbWFwUHJvdGVjdChmbGFncyk7CiAgIHJldHVybiBtcHJvdGVjdCh2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMsIG1tYXBfcHJvdGVjdCkgPT0gMDsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5oIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmgKaW5kZXggY2E3ZWMwYy4uZjQ3Y2IyZiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmgKQEAgLTE2Niw2ICsxNjYsMTIgQEAKICAgICByZXR1cm4gUnVuKENvbW1hbmRMaW5lKGFyZ2MsIGFyZ3YpKTsKICAgfQogCisvLyBQcmV2ZW50cyBHZXRDb21tYW5kTGluZSBmcm9tIGJlaW5nIHJlZGVmaW5lZC4gIEZvciBleGFtcGxlLCBXaW5kb3dzCisvLyBkZWZpbmVzIGl0IHRvIEdldENvbW1hbmRMaW5lVywgd2hpY2ggY2F1c2VzIGxpbmsgZXJyb3JzLgorI2lmIGRlZmluZWQoR2V0Q29tbWFuZExpbmUpCisjdW5kZWYgR2V0Q29tbWFuZExpbmUKKyNlbmRpZiAgLy8gZGVmaW5lZChHZXRDb21tYW5kTGluZSkKKwogICAvLyBSZXRyaWV2ZXMgdGhlIENvbW1hbmRMaW5lIGZvciB0aGUgYXBwbGljYXRpb24uCiAgIC8vIE5VTEwgdW50aWwgUnVuKCkgaXMgY2FsbGVkLgogICBjb25zdCBDb21tYW5kTGluZSogR2V0Q29tbWFuZExpbmUoKTsKQEAgLTI1MCwxNiArMjU2LDYgQEAKICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCk7CiAKLSAgLy8gVGhpcyBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgd2hlbiBTYlBsYXllclNldEJvdW5kcyBpcyBjYWxsZWQgZm9yIHB1bmNoLW91dAotICAvLyB2aWRlby4gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyB0byBiZXR0ZXIgc3luY2hyb25pemUgdGhlIHB1bmNoLW91dAotICAvLyB2aWRlbyBib3VuZHMgd2l0aCB0aGUgdXBjb21pbmcgcmVuZGVyIG91dHB1dC4KLSAgdmlydHVhbCB2b2lkIFBsYXllclNldEJvdW5kcyhTYlBsYXllciAvKiBwbGF5ZXIgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHpfaW5kZXggKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHggKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHkgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHdpZHRoICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBoZWlnaHQgKi8pIHt9Ci0KICAgLy8gUmVnaXN0ZXJzIGEgfGNhbGxiYWNrfCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gfFRlYXJkb3dufCBpcwogICAvLyBjYWxsZWQuCiAgIHZvaWQgUmVnaXN0ZXJUZWFyZG93bkNhbGxiYWNrKFRlYXJkb3duQ2FsbGJhY2sgY2FsbGJhY2spIHsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fYnVmZmVyX2J1ZGdldC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fYnVmZmVyX2J1ZGdldC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGUxYWVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9hdWRpb19idWZmZXJfYnVkZ2V0LmNjCkBAIC0wLDAgKzEsMzAgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2xvZy5oIgorCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKK2ludCBTYk1lZGlhR2V0QXVkaW9CdWZmZXJCdWRnZXQoKSB7CisjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX05PTl9WSURFT19CVURHRVQpCisgIFNCX0RMT0coV0FSTklORykgPDwgIkNPQkFMVF9NRURJQV9CVUZGRVJfTk9OX1ZJREVPX0JVREdFVCB3aWxsIGJlIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICJpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iOworICAvLyBVc2UgZGVmaW5lIGZvcndhcmRlZCBmcm9tIEdZUCB2YXJpYWJsZS4KKyAgcmV0dXJuIENPQkFMVF9NRURJQV9CVUZGRVJfTk9OX1ZJREVPX0JVREdFVDsKKyNlbHNlICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfTk9OX1ZJREVPX0JVREdFVCkKKyAgcmV0dXJuIDUgKiAxMDI0ICogMTAyNDsKKyNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX05PTl9WSURFT19CVURHRVQpCit9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9hbGlnbm1lbnQuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9hbGlnbm1lbnQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2ZGU1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2FsaWdubWVudC5jYwpAQCAtMCwwICsxLDMyIEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCitpbnQgU2JNZWRpYUdldEJ1ZmZlckFsaWdubWVudChTYk1lZGlhVHlwZSB0eXBlKSB7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIodHlwZSk7CisjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX0FMSUdOTUVOVCkKKyNwcmFnbWEgbWVzc2FnZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJDT0JBTFRfTUVESUFfQlVGRkVSX0FMSUdOTUVOVCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgIiBcCisgICAgIlN0YXJib2FyZCB2ZXJzaW9uLiIpCisgIC8vIFVzZSBkZWZpbmUgZm9yd2FyZGVkIGZyb20gR1lQIHZhcmlhYmxlLgorICByZXR1cm4gQ09CQUxUX01FRElBX0JVRkZFUl9BTElHTk1FTlQ7CisjZWxzZSAgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9BTElHTk1FTlQKKyAgcmV0dXJuIDEgKiAxMDI0ICogMTAyNDsKKyNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX0FMSUdOTUVOVAorfQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxsb2NhdGlvbl91bml0LmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxsb2NhdGlvbl91bml0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOGY4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXQuY2MKQEAgLTAsMCArMSwzMCBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbG9nLmgiCisKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAoraW50IFNiTWVkaWFHZXRCdWZmZXJBbGxvY2F0aW9uVW5pdCgpIHsKKyNpZiBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUKQorICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJDT0JBTFRfTUVESUFfQlVGRkVSX0FMTE9DQVRJT05fVU5JVCB3aWxsIGJlIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICJpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iOworICAvLyBVc2UgZGVmaW5lIGZvcndhcmRlZCBmcm9tIEdZUCB2YXJpYWJsZS4KKyAgcmV0dXJuIENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUOworI2Vsc2UgICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUCisgIHJldHVybiAwOworI2VuZGlmICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUCit9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9nYXJiYWdlX2NvbGxlY3Rpb25fZHVyYXRpb25fdGhyZXNob2xkLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA0MjgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYwpAQCAtMCwwICsxLDMzIEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCitTYlRpbWUgU2JNZWRpYUdldEJ1ZmZlckdhcmJhZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQoKSB7CisjaWYgZGVmaW5lZCggXAorICAgIENPQkFMVF9NRURJQV9TT1VSQ0VfR0FSQkFHRV9DT0xMRUNUSU9OX0RVUkFUSU9OX1RIUkVTSE9MRF9JTl9TRUNPTkRTKQorICAvLyBVc2UgZGVmaW5lIGZvcndhcmRlZCBmcm9tIEdZUCB2YXJpYWJsZS4KKyNwcmFnbWEgbWVzc2FnZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIkNPQkFMVF9NRURJQV9TT1VSQ0VfR0FSQkFHRV9DT0xMRUNUSU9OX0RVUkFUSU9OX1RIUkVTSE9MRF9JTl9TRUNPTkRTICIgXAorICAgICJ3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgU3RhcmJvYXJkIHZlcnNpb24uIikKKyAgcmV0dXJuIENPQkFMVF9NRURJQV9TT1VSQ0VfR0FSQkFHRV9DT0xMRUNUSU9OX0RVUkFUSU9OX1RIUkVTSE9MRF9JTl9TRUNPTkRTICoKKyAgICAgICAgIGtTYlRpbWVTZWNvbmQ7CisjZWxzZSAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfU09VUkNFX0dBUkJBR0VfQ09MTEVDVElPTl9EVVJBVElPTl9USFJFU0hPTERfSU5fU0VDT05EUykKKyAgcmV0dXJuIDE3MCAqIGtTYlRpbWVTZWNvbmQ7CisjZW5kaWYgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX1NPVVJDRV9HQVJCQUdFX0NPTExFQ1RJT05fRFVSQVRJT05fVEhSRVNIT0xEX0lOX1NFQ09ORFMpCit9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9wYWRkaW5nLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfcGFkZGluZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTFmYjQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfcGFkZGluZy5jYwpAQCAtMCwwICsxLDMyIEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCitpbnQgU2JNZWRpYUdldEJ1ZmZlclBhZGRpbmcoU2JNZWRpYVR5cGUgdHlwZSkgeworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHR5cGUpOworI2lmIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HKQorI3ByYWdtYSBtZXNzYWdlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgIiBcCisgICAgInZlcnNpb24uIikKKyAgLy8gVXNlIGRlZmluZSBmb3J3YXJkZWQgZnJvbSBHWVAgdmFyaWFibGUuCisgIHJldHVybiBDT0JBTFRfTUVESUFfQlVGRkVSX1BBRERJTkc7CisjZWxzZSAgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9QQURESU5HKQorICByZXR1cm4gMDsKKyNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX1BBRERJTkcpCit9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9zdG9yYWdlX3R5cGUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9zdG9yYWdlX3R5cGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5YzRhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX3N0b3JhZ2VfdHlwZS5jYwpAQCAtMCwwICsxLDM1IEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCitTYk1lZGlhQnVmZmVyU3RvcmFnZVR5cGUgU2JNZWRpYUdldEJ1ZmZlclN0b3JhZ2VUeXBlKCkgeworLy8gVXNlIGRlZmluZSBmb3J3YXJkZWQgZnJvbSBHWVAgdmFyaWFibGUuCisjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX1NUT1JBR0VfVFlQRV9NRU1PUlkpCisgIFNCX0RMT0coV0FSTklORykgPDwgIkNPQkFMVF9NRURJQV9CVUZGRVJfU1RPUkFHRV9UWVBFX01FTU9SWSB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iOworICByZXR1cm4ga1NiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZU1lbW9yeTsKKyNlbGlmIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9TVE9SQUdFX1RZUEVfRklMRSkKKyAgU0JfRExPRyhXQVJOSU5HKSA8PCAiQ09CQUxUX01FRElBX0JVRkZFUl9TVE9SQUdFX1RZUEVfRklMRSB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iOworICByZXR1cm4ga1NiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZUZpbGU7CisjZWxzZSAgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9TVE9SQUdFX1RZUEVfTUVNT1JZKQorICAvLyBJbiB0aGUgYWJzZW5jZSBvZiBvdGhlciBpbmZvcm1hdGlvbiwgYXNzdW1lIG1lbW9yeSBzdG9yYWdlIGlzIHRoZSBkZWZhdWx0LgorICByZXR1cm4ga1NiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZU1lbW9yeTsKKyNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX1NUT1JBR0VfVFlQRV9NRU1PUlkpCit9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2luaXRpYWxfYnVmZmVyX2NhcGFjaXR5LmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWFhMjVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYwpAQCAtMCwwICsxLDMxIEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCitpbnQgU2JNZWRpYUdldEluaXRpYWxCdWZmZXJDYXBhY2l0eSgpIHsKKyNpZiBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfSU5JVElBTF9DQVBBQ0lUWSkKKyNwcmFnbWEgbWVzc2FnZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiQ09CQUxUX01FRElBX0JVRkZFUl9JTklUSUFMX0NBUEFDSVRZIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSAiIFwKKyAgICAiU3RhcmJvYXJkIHZlcnNpb24uIikKKyAgLy8gVXNlIGRlZmluZSBmb3J3YXJkZWQgZnJvbSBHWVAgdmFyaWFibGUuCisgIHJldHVybiBDT0JBTFRfTUVESUFfQlVGRkVSX0lOSVRJQUxfQ0FQQUNJVFk7CisjZWxzZSAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX0lOSVRJQUxfQ0FQQUNJVFkpCisgIHJldHVybiAyMSAqIDEwMjQgKiAxMDI0OworI2VuZGlmICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfSU5JVElBTF9DQVBBQ0lUWSkKK30KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2NlNzNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2xvZy5oIgorCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKK2ludCBTYk1lZGlhR2V0TWF4QnVmZmVyQ2FwYWNpdHkoU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzX3Blcl9waXhlbCkgeworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGNvZGVjKTsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihiaXRzX3Blcl9waXhlbCk7CisgIGlmICgocmVzb2x1dGlvbl93aWR0aCA8PSAxOTIwICYmIHJlc29sdXRpb25faGVpZ2h0IDw9IDEwODApIHx8CisgICAgICByZXNvbHV0aW9uX3dpZHRoID09IGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZCB8fAorICAgICAgcmVzb2x1dGlvbl9oZWlnaHQgPT0ga1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkKSB7CisjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX01BWF9DQVBBQ0lUWV8xMDgwUCkKKyAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJDT0JBTFRfTUVESUFfQlVGRkVSX01BWF9DQVBBQ0lUWV8xMDgwUCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkIGluIGEgZnV0dXJlIFN0YXJib2FyZCB2ZXJzaW9uLiI7CisgICAgLy8gVXNlIGRlZmluZSBmb3J3YXJkZWQgZnJvbSBHWVAgdmFyaWFibGUuCisgICAgcmV0dXJuIENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzEwODBQOworI2Vsc2UgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfMTA4MFApCisgICAgcmV0dXJuIDM2ICogMTAyNCAqIDEwMjQ7CisjZW5kaWYgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfMTA4MFApCisgIH0KKyNpZiBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLKQorICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJDT0JBTFRfTUVESUFfQlVGRkVSX01BWF9DQVBBQ0lUWV80SyB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iOworICAvLyBVc2UgZGVmaW5lIGZvcndhcmRlZCBmcm9tIEdZUCB2YXJpYWJsZS4KKyAgcmV0dXJuIENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLOworI2Vsc2UgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9NQVhfQ0FQQUNJVFlfNEspCisgIHJldHVybiA2NSAqIDEwMjQgKiAxMDI0OworI2VuZGlmICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLKQorfQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9wcm9ncmVzc2l2ZV9idWZmZXJfYnVkZ2V0LmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9wcm9ncmVzc2l2ZV9idWZmZXJfYnVkZ2V0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjkwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbG9nLmgiCisKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAoraW50IFNiTWVkaWFHZXRQcm9ncmVzc2l2ZUJ1ZmZlckJ1ZGdldChTYk1lZGlhVmlkZW9Db2RlYyBjb2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc29sdXRpb25fd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHNfcGVyX3BpeGVsKSB7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoY29kZWMpOworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHJlc29sdXRpb25fd2lkdGgpOworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHJlc29sdXRpb25faGVpZ2h0KTsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihiaXRzX3Blcl9waXhlbCk7CisjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX1BST0dSRVNTSVZFX0JVREdFVCkKKyAgU0JfRExPRyhXQVJOSU5HKSA8PCAiQ09CQUxUX01FRElBX0JVRkZFUl9QUk9HUkVTU0lWRV9CVURHRVQgd2lsbCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgU3RhcmJvYXJkIHZlcnNpb24uIjsKKyAgLy8gVXNlIGRlZmluZSBmb3J3YXJkZWQgZnJvbSBHWVAgdmFyaWFibGUuCisgIHJldHVybiBDT0JBTFRfTUVESUFfQlVGRkVSX1BST0dSRVNTSVZFX0JVREdFVDsKKyNlbHNlICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfUFJPR1JFU1NJVkVfQlVER0VUKQorICByZXR1cm4gMTIgKiAxMDI0ICogMTAyNDsKKyNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX1BST0dSRVNTSVZFX0JVREdFVCkKK30KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfdmlkZW9fYnVmZmVyX2J1ZGdldC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfdmlkZW9fYnVmZmVyX2J1ZGdldC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIxYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2xvZy5oIgorCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKK2ludCBTYk1lZGlhR2V0VmlkZW9CdWZmZXJCdWRnZXQoU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzX3Blcl9waXhlbCkgeworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGNvZGVjKTsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihiaXRzX3Blcl9waXhlbCk7CisgIGlmICgocmVzb2x1dGlvbl93aWR0aCA8PSAxOTIwICYmIHJlc29sdXRpb25faGVpZ2h0IDw9IDEwODApIHx8CisgICAgICByZXNvbHV0aW9uX3dpZHRoID09IGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZCB8fAorICAgICAgcmVzb2x1dGlvbl9oZWlnaHQgPT0ga1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkKSB7CisjaWYgZGVmaW5lZChDT0JBTFRfTUVESUFfQlVGRkVSX1ZJREVPX0JVREdFVF8xMDgwUCkKKyAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJDT0JBTFRfTUVESUFfQlVGRkVSX1ZJREVPX0JVREdFVF8xMDgwUCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkIGluIGEgZnV0dXJlIFN0YXJib2FyZCB2ZXJzaW9uLiI7CisgICAgLy8gVXNlIGRlZmluZSBmb3J3YXJkZWQgZnJvbSBHWVAgdmFyaWFibGUuCisgICAgcmV0dXJuIENPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzEwODBQOworI2Vsc2UgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9WSURFT19CVURHRVRfMTA4MFApCisgICAgcmV0dXJuIDE2ICogMTAyNCAqIDEwMjQ7CisjZW5kaWYgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9WSURFT19CVURHRVRfMTA4MFApCisgIH0KKyNpZiBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzRLKQorICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJDT0JBTFRfTUVESUFfQlVGRkVSX1ZJREVPX0JVREdFVF80SyB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iOworICAvLyBVc2UgZGVmaW5lIGZvcndhcmRlZCBmcm9tIEdZUCB2YXJpYWJsZS4KKyAgcmV0dXJuIENPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzRLOworI2Vsc2UgIC8vIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9WSURFT19CVURHRVRfNEspCisgIHJldHVybiA2MCAqIDEwMjQgKiAxMDI0OworI2VuZGlmICAvLyBkZWZpbmVkKENPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzRLKQorfQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl9wb29sX2FsbG9jYXRlX29uX2RlbWFuZC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxNGFlNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MKQEAgLTAsMCArMSwzMCBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbG9nLmgiCisKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAorYm9vbCBTYk1lZGlhSXNCdWZmZXJQb29sQWxsb2NhdGVPbkRlbWFuZCgpIHsKKyNpZiBDT0JBTFRfTUVESUFfQlVGRkVSX1BPT0xfQUxMT0NBVEVfT05fREVNQU5ECisjcHJhZ21hIG1lc3NhZ2UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIkNPQkFMVF9NRURJQV9CVUZGRVJfUE9PTF9BTExPQ0FURV9PTl9ERU1BTkQgd2lsbCBiZSBkZXByZWNhdGVkIGluIGEgIiBcCisgICAgImZ1dHVyZSBTdGFyYm9hcmQgdmVyc2lvbi4iKQorICByZXR1cm4gdHJ1ZTsKKyNlbHNlICAgLy8gQ09CQUxUX01FRElBX0JVRkZFUl9QT09MX0FMTE9DQVRFX09OX0RFTUFORAorICByZXR1cm4gZmFsc2U7CisjZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CVUZGRVJfUE9PTF9BTExPQ0FURV9PTl9ERU1BTkQKK30KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfdXNpbmdfbWVtb3J5X3Bvb2wuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNjVhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKK2Jvb2wgU2JNZWRpYUlzQnVmZmVyVXNpbmdNZW1vcnlQb29sKCkgeworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9zdXBwb3J0X2ludGVybmFsLmggYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc3VwcG9ydF9pbnRlcm5hbC5oCmluZGV4IDU5ZThkNzQuLjNkYTc2YmIgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9zdXBwb3J0X2ludGVybmFsLmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3N1cHBvcnRfaW50ZXJuYWwuaApAQCAtNDEsOSArNDEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBiaXRyYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZwcyk7CiAKLVNCX0VYUE9SVCBib29sIElzVnA5SHdEZWNvZGVyU3VwcG9ydGVkKCk7Ci1TQl9FWFBPUlQgYm9vbCBJc1ZwOUdQVURlY29kZXJTdXBwb3J0ZWQoKTsKLQogLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBzdXBwb3J0cyB8YXVkaW9fY29kZWN8IGF0IHxiaXRyYXRlfC4KIC8vIElmIHxhdWRpb19jb2RlY3wgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgY29uZGl0aW9uLCB0aGlzIGZ1bmN0aW9uCiAvLyByZXR1cm5zIHxmYWxzZXwuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9jcmVhdGUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9jcmVhdGUuY2MKaW5kZXggZGY3NWU4OC4uYmU4MjE2MiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfY3JlYXRlLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2NyZWF0ZS5jYwpAQCAtNDAsOSArNDAsOSBAQAogU2JQbGF5ZXIgU2JQbGF5ZXJDcmVhdGUoU2JXaW5kb3cgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVRpbWUgZHVyYXRpb25fcHRzLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYk1lZGlhQXVkaW9IZWFkZXIqIGF1ZGlvX2hlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyRGVhbGxvY2F0ZVNhbXBsZUZ1bmMgc2FtcGxlX2RlYWxsb2NhdGVfZnVuYywKQEAgLTU1LDkgKzU1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIHByb3ZpZGVyKSB7CiAgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIod2luZG93KTsKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGR1cmF0aW9uX3B0cyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogCiAgIGlmICghc2FtcGxlX2RlYWxsb2NhdGVfZnVuYyB8fCAhZGVjb2Rlcl9zdGF0dXNfZnVuYyB8fCAhcGxheWVyX3N0YXR1c19mdW5jCiAjaWYgU0JfSEFTKFBMQVlFUl9FUlJPUl9NRVNTQUdFKQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X2luZm8uY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mby5jYwppbmRleCA2ZjJmMWQ4Li5lMWRhNzViIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mby5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mby5jYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogdm9pZCBTYlBsYXllckdldEluZm8oU2JQbGF5ZXIgcGxheWVyLCBTYlBsYXllckluZm8qIG91dF9wbGF5ZXJfaW5mbykgewogICBpZiAoIVNiUGxheWVySXNWYWxpZChwbGF5ZXIpKSB7CiAgICAgU0JfRExPRyhXQVJOSU5HKSA8PCAicGxheWVyIGlzIGludmFsaWQuIjsKQEAgLTMxLDQgKzMxLDQgQEAKIAogICBwbGF5ZXItPkdldEluZm8ob3V0X3BsYXllcl9pbmZvKTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mbzIuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mbzIuY2MKaW5kZXggZWM2NThjOS4uYTFjMzk2YiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X2luZm8yLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9pbmZvMi5jYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiB2b2lkIFNiUGxheWVyR2V0SW5mbzIoU2JQbGF5ZXIgcGxheWVyLCBTYlBsYXllckluZm8yKiBvdXRfcGxheWVyX2luZm8pIHsKICAgaWYgKCFTYlBsYXllcklzVmFsaWQocGxheWVyKSkgewogICAgIFNCX0RMT0coV0FSTklORykgPDwgInBsYXllciBpcyBpbnZhbGlkLiI7CkBAIC0zMSw0ICszMSw0IEBACiAKICAgcGxheWVyLT5HZXRJbmZvKG91dF9wbGF5ZXJfaW5mbyk7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfbWF4aW11bV9udW1iZXJfb2Zfc2FtcGxlc19wZXJfd3JpdGUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfbWF4aW11bV9udW1iZXJfb2Zfc2FtcGxlc19wZXJfd3JpdGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1MzQyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9tYXhpbXVtX251bWJlcl9vZl9zYW1wbGVzX3Blcl93cml0ZS5jYwpAQCAtMCwwICsxLDIyIEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvcGxheWVyLmgiCisKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAoraW50IFNiUGxheWVyR2V0TWF4aW11bU51bWJlck9mU2FtcGxlc1BlcldyaXRlKFNiUGxheWVyIC8qcGxheWVyKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVR5cGUgLypzYW1wbGVfdHlwZSovKSB7CisgIHJldHVybiAxOworfQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfaW50ZXJuYWwuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9pbnRlcm5hbC5jYwppbmRleCA5ZDIwZjBkLi5hNTg5OGJjIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9pbnRlcm5hbC5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9pbnRlcm5hbC5jYwpAQCAtMTE4LDE1ICsxMTgsMTUgQEAKICAgLy8gVE9ETzogV2FpdCB1bnRpbCBhIGZyYW1lIGlzIHJlbmRlcmVkIHdpdGggdGhlIHVwZGF0ZWQgYm91bmRzLgogfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKIHZvaWQgU2JQbGF5ZXJQcml2YXRlOjpHZXRJbmZvKFNiUGxheWVySW5mbyogb3V0X3BsYXllcl9pbmZvKSB7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogdm9pZCBTYlBsYXllclByaXZhdGU6OkdldEluZm8oU2JQbGF5ZXJJbmZvMiogb3V0X3BsYXllcl9pbmZvKSB7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICBTQl9EQ0hFQ0sob3V0X3BsYXllcl9pbmZvICE9IE5VTEwpOwogCiAgIHN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgb3V0X3BsYXllcl9pbmZvLT5kdXJhdGlvbl9wdHMgPSBTQl9QTEFZRVJfTk9fRFVSQVRJT047CiAgIGlmIChpc19wYXVzZWRfKSB7CiAgICAgb3V0X3BsYXllcl9pbmZvLT5jdXJyZW50X21lZGlhX3B0cyA9IFNCX1RJTUVfVE9fU0JfTUVESUFfVElNRShtZWRpYV90aW1lXyk7CkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICBvdXRfcGxheWVyX2luZm8tPmN1cnJlbnRfbWVkaWFfcHRzID0gU0JfVElNRV9UT19TQl9NRURJQV9USU1FKAogICAgICAgICBHZXRNZWRpYVRpbWUobWVkaWFfdGltZV8sIG1lZGlhX3RpbWVfdXBkYXRlZF9hdF8sIHBsYXliYWNrX3JhdGVfKSk7CiAgIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIG91dF9wbGF5ZXJfaW5mby0+ZHVyYXRpb24gPSBTQl9QTEFZRVJfTk9fRFVSQVRJT047CiAgIGlmIChpc19wYXVzZWRfKSB7CiAgICAgb3V0X3BsYXllcl9pbmZvLT5jdXJyZW50X21lZGlhX3RpbWVzdGFtcCA9IG1lZGlhX3RpbWVfOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgb3V0X3BsYXllcl9pbmZvLT5jdXJyZW50X21lZGlhX3RpbWVzdGFtcCA9CiAgICAgICAgIEdldE1lZGlhVGltZShtZWRpYV90aW1lXywgbWVkaWFfdGltZV91cGRhdGVkX2F0XywgcGxheWJhY2tfcmF0ZV8pOwogICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogCiAgIG91dF9wbGF5ZXJfaW5mby0+ZnJhbWVfd2lkdGggPSBmcmFtZV93aWR0aF87CiAgIG91dF9wbGF5ZXJfaW5mby0+ZnJhbWVfaGVpZ2h0ID0gZnJhbWVfaGVpZ2h0XzsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmggYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9pbnRlcm5hbC5oCmluZGV4IGRjZGVjYTAuLmJkNTY4YzEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfaW50ZXJuYWwuaApAQCAtNTEsMTEgKzUxLDExIEBACiAgIHZvaWQgV3JpdGVFbmRPZlN0cmVhbShTYk1lZGlhVHlwZSBzdHJlYW1fdHlwZSk7CiAgIHZvaWQgU2V0Qm91bmRzKGludCB6X2luZGV4LCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICB2b2lkIEdldEluZm8oU2JQbGF5ZXJJbmZvKiBvdXRfcGxheWVyX2luZm8pOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKICAgdm9pZCBHZXRJbmZvKFNiUGxheWVySW5mbzIqIG91dF9wbGF5ZXJfaW5mbyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMAogICB2b2lkIFNldFBhdXNlKGJvb2wgcGF1c2UpOwogICB2b2lkIFNldFBsYXliYWNrUmF0ZShkb3VibGUgcGxheWJhY2tfcmF0ZSk7CiAgIHZvaWQgU2V0Vm9sdW1lKGRvdWJsZSB2b2x1bWUpOwpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2Vlay5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3NlZWsuY2MKaW5kZXggY2YzMDY5Ny4uMWM2ZDQxMiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2Vlay5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9zZWVrLmNjCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL2xvZy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfaW50ZXJuYWwuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiB2b2lkIFNiUGxheWVyU2VlayhTYlBsYXllciBwbGF5ZXIsIFNiTWVkaWFUaW1lIHNlZWtfdG9fcHRzLCBpbnQgdGlja2V0KSB7CiAgIGlmICghU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcikpIHsKICAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJwbGF5ZXIgaXMgaW52YWxpZC4iOwpAQCAtMjYsNCArMjYsNCBAQAogCiAgIHBsYXllci0+U2VlayhTQl9NRURJQV9USU1FX1RPX1NCX1RJTUUoc2Vla190b19wdHMpLCB0aWNrZXQpOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3NlZWsyLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2VlazIuY2MKaW5kZXggNTM1NmVkNC4uYzliNWY1MyAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2VlazIuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2VlazIuY2MKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvbG9nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9pbnRlcm5hbC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogdm9pZCBTYlBsYXllclNlZWsyKFNiUGxheWVyIHBsYXllciwgU2JUaW1lIHNlZWtfdG9fdGltZXN0YW1wLCBpbnQgdGlja2V0KSB7CiAgIGlmICghU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcikpIHsKICAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJwbGF5ZXIgaXMgaW52YWxpZC4iOwpAQCAtMjYsNCArMjYsNCBAQAogCiAgIHBsYXllci0+U2VlayhzZWVrX3RvX3RpbWVzdGFtcCwgdGlja2V0KTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3NldF9ib3VuZHMuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9zZXRfYm91bmRzLmNjCmluZGV4IDk2M2U3MDcuLjQyMmM5NDMgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3NldF9ib3VuZHMuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2V0X2JvdW5kcy5jYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9wbGF5ZXIuaCIKIAogI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfaW50ZXJuYWwuaCIKIAogdm9pZCBTYlBsYXllclNldEJvdW5kcyhTYlBsYXllciBwbGF5ZXIsCkBAIC0yOSw2ICsyOCw0IEBACiAgICAgcmV0dXJuOwogICB9CiAgIHBsYXllci0+U2V0Qm91bmRzKHpfaW5kZXgsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpBcHBsaWNhdGlvbjo6R2V0KCktPlBsYXllclNldEJvdW5kcygKLSAgICAgIHBsYXllciwgel9pbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93cml0ZV9zYW1wbGUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93cml0ZV9zYW1wbGUuY2MKaW5kZXggMDQ0YjE0Zi4uNzFjZjRjOCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfd3JpdGVfc2FtcGxlLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dyaXRlX3NhbXBsZS5jYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfd3JpdGVyLmgiCiAjZW5kaWYgIC8vIFNCX1BMQVlFUl9FTkFCTEVfVklERU9fRFVNUEVSICYmIFNCX0hBUyhQTEFZRVJfRklMVEVSX1RFU1RTKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKIHZvaWQgU2JQbGF5ZXJXcml0ZVNhbXBsZShTYlBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVR5cGUgc2FtcGxlX3R5cGUsCiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gNgpAQCAtNjksNCArNjksNCBAQAogICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9zYW1wbGVfYnVmZmVycywgc2FtcGxlX3RpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19zYW1wbGVfaW5mbywgc2FtcGxlX2RybV9pbmZvKTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93cml0ZV9zYW1wbGUyLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfd3JpdGVfc2FtcGxlMi5jYwppbmRleCAxNWQ1NGM0Li5mNWRjZDJlIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93cml0ZV9zYW1wbGUyLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dyaXRlX3NhbXBsZTIuY2MKQEAgLTIwLDE1ICsyMCwyMCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfd3JpdGVyLmgiCiAjZW5kaWYgIC8vIFNCX1BMQVlFUl9FTkFCTEVfVklERU9fRFVNUEVSICYmIFNCX0hBUyhQTEFZRVJfRklMVEVSX1RFU1RTKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogdm9pZCBTYlBsYXllcldyaXRlU2FtcGxlMihTYlBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFUeXBlIHNhbXBsZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBjb25zdCogc2FtcGxlX2J1ZmZlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogc2FtcGxlX2J1ZmZlcl9zaXplcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlcl9vZl9zYW1wbGVfYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lIHNhbXBsZV90aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiTWVkaWFWaWRlb1NhbXBsZUluZm8qIHZpZGVvX3NhbXBsZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYkRybVNhbXBsZUluZm8qIHNhbXBsZV9kcm1faW5mbykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYlBsYXllclNhbXBsZUluZm8qIHNhbXBsZV9pbmZvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlcl9vZl9zYW1wbGVfaW5mb3MpIHsKKyAgU0JfRENIRUNLKG51bWJlcl9vZl9zYW1wbGVfaW5mb3MgPT0gMSk7CisKKyAgY29uc3Qgdm9pZCogc2FtcGxlX2J1ZmZlcnNbXSA9IHtzYW1wbGVfaW5mb3MtPmJ1ZmZlcn07CisgIGNvbnN0IGludCBzYW1wbGVfYnVmZmVyX3NpemVzW10gPSB7c2FtcGxlX2luZm9zLT5idWZmZXJfc2l6ZX07CisgIGludCBudW1iZXJfb2Zfc2FtcGxlX2J1ZmZlcnMgPSAxOworICBTYlRpbWUgc2FtcGxlX3RpbWVzdGFtcCA9IHNhbXBsZV9pbmZvcy0+dGltZXN0YW1wOworICBhdXRvIHZpZGVvX3NhbXBsZV9pbmZvID0gc2FtcGxlX2luZm9zLT52aWRlb19zYW1wbGVfaW5mbzsKKyAgYXV0byBzYW1wbGVfZHJtX2luZm8gPSBzYW1wbGVfaW5mb3MtPmRybV9pbmZvOworCiAgIGlmICghU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcikpIHsKICAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJwbGF5ZXIgaXMgaW52YWxpZC4iOwogICAgIHJldHVybjsKQEAgLTQwLDE2ICs0NSw2IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKHNhbXBsZV9idWZmZXJzID09IE5VTEwpIHsKLSAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJ8c2FtcGxlX2J1ZmZlcnN8IGNhbm5vdCBiZSBOVUxMIjsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoc2FtcGxlX2J1ZmZlcl9zaXplcyA9PSBOVUxMKSB7Ci0gICAgU0JfRExPRyhXQVJOSU5HKSA8PCAifHNhbXBsZV9idWZmZXJfc2l6ZXN8IGNhbm5vdCBiZSBOVUxMIjsKLSAgICByZXR1cm47Ci0gIH0KLQogI2lmIFNCX1BMQVlFUl9FTkFCTEVfVklERU9fRFVNUEVSICYmIFNCX0hBUyhQTEFZRVJfRklMVEVSX1RFU1RTKQogICB1c2luZyA6OnN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6dmlkZW9fZG1wOjpWaWRlb0RtcFdyaXRlcjsKICAgVmlkZW9EbXBXcml0ZXI6Ok9uUGxheWVyV3JpdGVTYW1wbGUoCkBAIC02Miw0ICs1Nyw0IEBACiAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3NhbXBsZV9idWZmZXJzLCBzYW1wbGVfdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX3NhbXBsZV9pbmZvLCBzYW1wbGVfZHJtX2luZm8pOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9zdXBwb3J0c19yZXN1bWUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX3N1cHBvcnRzX3Jlc3VtZS5jYwppbmRleCAyZTJlMmYyLi5kMGRjMzQwIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX3N1cHBvcnRzX3Jlc3VtZS5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX3N1cHBvcnRzX3Jlc3VtZS5jYwpAQCAtMTQsMTAgKzE0LDEwIEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9BTExPV19ESVNBQkxFX1JFU1VNRV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogYm9vbCBTYlN5c3RlbVN1cHBvcnRzUmVzdW1lKCkgewogICByZXR1cm4gdHJ1ZTsKIH0KIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9BTExPV19ESVNBQkxFX1JFU1VNRV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2F0b21pY19wdWJsaWMuaCBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXRvbWljX3B1YmxpYy5oCmluZGV4IDY1MzY0NmQuLmFiOTdjMDUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXRvbWljX3B1YmxpYy5oCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXRvbWljX3B1YmxpYy5oCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgcmV0dXJuIDA7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogU0JfQ19GT1JDRV9JTkxJTkUgU2JBdG9taWM4CiBTYkF0b21pY1JlbGVhc2VfQ29tcGFyZUFuZFN3YXA4KHZvbGF0aWxlIFNiQXRvbWljOCogcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljOCBvbGRfdmFsdWUsCkBAIC0xMzIsNyArMTMyLDcgQEAKICAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwdHIpOwogICByZXR1cm4gMDsKIH0KLSNlbmRpZgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiAvLyA2NC1iaXQgYXRvbWljIG9wZXJhdGlvbnMgKG9ubHkgYXZhaWxhYmxlIG9uIDY0LWJpdCBwcm9jZXNzb3JzKS4KICNpZiBTQl9IQVMoNjRfQklUX0FUT01JQ1MpCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9jcmVhdGVfc3lzdGVtLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fY3JlYXRlX3N5c3RlbS5jYwppbmRleCBmNzVhN2RlLi40NDYyOWYyIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9jcmVhdGVfc3lzdGVtLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2NyZWF0ZV9zeXN0ZW0uY2MKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9kcm0uaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RSTV9SRUZJTkVNRU5UX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKIAogU2JEcm1TeXN0ZW0gU2JEcm1DcmVhdGVTeXN0ZW0oCiAgICAgY29uc3QgY2hhcioga2V5X3N5c3RlbSwKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2lzX3NlcnZlcl9jZXJ0aWZpY2F0ZV91cGRhdGFibGUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9pc19zZXJ2ZXJfY2VydGlmaWNhdGVfdXBkYXRhYmxlLmNjCmluZGV4IGI1NjI2NzUuLjVlMTdjNTUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2lzX3NlcnZlcl9jZXJ0aWZpY2F0ZV91cGRhdGFibGUuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZS5jYwpAQCAtMTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2RybS5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogCiBib29sIFNiRHJtSXNTZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0YWJsZShTYkRybVN5c3RlbSBkcm1fc3lzdGVtKSB7CiAgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoZHJtX3N5c3RlbSk7CkBAIC0yMiw0ICsyMiw0IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fdXBkYXRlX3NlcnZlcl9jZXJ0aWZpY2F0ZS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX3VwZGF0ZV9zZXJ2ZXJfY2VydGlmaWNhdGUuY2MKaW5kZXggMzFiMjNhYy4uM2QyNWNkOCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fdXBkYXRlX3NlcnZlcl9jZXJ0aWZpY2F0ZS5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlLmNjCkBAIC0xNCw3ICsxNCw3IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvZHJtLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9EUk1fUkVGSU5FTUVOVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIHZvaWQgU2JEcm1VcGRhdGVTZXJ2ZXJDZXJ0aWZpY2F0ZShTYkRybVN5c3RlbSBkcm1fc3lzdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWNrZXQsCkBAIC0yNiw0ICsyNiw0IEBACiAgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoY2VydGlmaWNhdGVfc2l6ZSk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRFJNX1JFRklORU1FTlRfQVBJX1ZFUlNJT04KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2F1ZGlvX2J1ZmZlcl9idWRnZXQuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9hdWRpb19idWZmZXJfYnVkZ2V0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOWU5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9hdWRpb19idWZmZXJfYnVkZ2V0LmNjCkBAIC0wLDAgKzEsMTkgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCitpbnQgU2JNZWRpYUdldEF1ZGlvQnVmZmVyQnVkZ2V0KCkgeworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9hbGlnbm1lbnQuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfYWxpZ25tZW50LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjlhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfYWxpZ25tZW50LmNjCkBAIC0wLDAgKzEsMjAgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCitpbnQgU2JNZWRpYUdldEJ1ZmZlckFsaWdubWVudChTYk1lZGlhVHlwZSB0eXBlKSB7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIodHlwZSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX2FsbG9jYXRpb25fdW5pdC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyMjY4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXQuY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKK2ludCBTYk1lZGlhR2V0QnVmZmVyQWxsb2NhdGlvblVuaXQoKSB7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX2dhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGQuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY4NjUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX2dhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGQuY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKK1NiVGltZSBTYk1lZGlhR2V0QnVmZmVyR2FyYmFnZUNvbGxlY3Rpb25EdXJhdGlvblRocmVzaG9sZCgpIHsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfcGFkZGluZy5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9wYWRkaW5nLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODRlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfcGFkZGluZy5jYwpAQCAtMCwwICsxLDIwIEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworaW50IFNiTWVkaWFHZXRCdWZmZXJQYWRkaW5nKFNiTWVkaWFUeXBlIHR5cGUpIHsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUih0eXBlKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfc3RvcmFnZV90eXBlLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX3N0b3JhZ2VfdHlwZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJlMTlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX3N0b3JhZ2VfdHlwZS5jYwpAQCAtMCwwICsxLDE5IEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworU2JNZWRpYUJ1ZmZlclN0b3JhZ2VUeXBlIFNiTWVkaWFHZXRCdWZmZXJTdG9yYWdlVHlwZSgpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PFNiTWVkaWFCdWZmZXJTdG9yYWdlVHlwZT4oMCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2luaXRpYWxfYnVmZmVyX2NhcGFjaXR5LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYjFlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYwpAQCAtMCwwICsxLDE5IEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworaW50IFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHkoKSB7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X21heF9idWZmZXJfY2FwYWNpdHkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjYTRkMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X21heF9idWZmZXJfY2FwYWNpdHkuY2MKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKK2ludCBTYk1lZGlhR2V0TWF4QnVmZmVyQ2FwYWNpdHkoU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzX3Blcl9waXhlbCkgeworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGNvZGVjKTsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihyZXNvbHV0aW9uX3dpZHRoKTsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihyZXNvbHV0aW9uX2hlaWdodCk7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoYml0c19wZXJfcGl4ZWwpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9wcm9ncmVzc2l2ZV9idWZmZXJfYnVkZ2V0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzlkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9wcm9ncmVzc2l2ZV9idWZmZXJfYnVkZ2V0LmNjCkBAIC0wLDAgKzEsMjYgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCitpbnQgU2JNZWRpYUdldFByb2dyZXNzaXZlQnVmZmVyQnVkZ2V0KFNiTWVkaWFWaWRlb0NvZGVjIGNvZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc29sdXRpb25faGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0c19wZXJfcGl4ZWwpIHsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihjb2RlYyk7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocmVzb2x1dGlvbl93aWR0aCk7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocmVzb2x1dGlvbl9oZWlnaHQpOworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGJpdHNfcGVyX3BpeGVsKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfdmlkZW9fYnVmZmVyX2J1ZGdldC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWMzMjBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfdmlkZW9fYnVmZmVyX2J1ZGdldC5jYwpAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworaW50IFNiTWVkaWFHZXRWaWRlb0J1ZmZlckJ1ZGdldChTYk1lZGlhVmlkZW9Db2RlYyBjb2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc29sdXRpb25fd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHNfcGVyX3BpeGVsKSB7CisgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoY29kZWMpOworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHJlc29sdXRpb25fd2lkdGgpOworICBTQl9VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHJlc29sdXRpb25faGVpZ2h0KTsKKyAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihiaXRzX3Blcl9waXhlbCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX2J1ZmZlcl9wb29sX2FsbG9jYXRlX29uX2RlbWFuZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjA2OGI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisKK2Jvb2wgU2JNZWRpYUlzQnVmZmVyUG9vbEFsbG9jYXRlT25EZW1hbmQoKSB7CisgIHJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19idWZmZXJfdXNpbmdfbWVtb3J5X3Bvb2wuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhZTMxZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjCkBAIC0wLDAgKzEsMTkgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCitib29sIFNiTWVkaWFJc0J1ZmZlclVzaW5nTWVtb3J5UG9vbCgpIHsKKyAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfcHJvdGVjdC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVtb3J5X3Byb3RlY3QuY2MKaW5kZXggNzkyZjc1Mi4uMDM2YjhmYiAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfcHJvdGVjdC5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9wcm90ZWN0LmNjCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9NRU1PUllfUFJPVEVDVF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiBib29sIFNiTWVtb3J5UHJvdGVjdCh2b2lkKiAvKnZpcnR1YWxfYWRkcmVzcyovLAogICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCAvKnNpemVfYnl0ZXMqLywKICAgICAgICAgICAgICAgICAgICAgIGludCAvKmZsYWdzKi8pIHsKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2NyZWF0ZS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2NyZWF0ZS5jYwppbmRleCBmZGI4MWEzMC4uYjM1M2E1OCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfY3JlYXRlLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2NyZWF0ZS5jYwpAQCAtMTcsOSArMTcsOSBAQAogU2JQbGF5ZXIgU2JQbGF5ZXJDcmVhdGUoU2JXaW5kb3cgLyp3aW5kb3cqLywKICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFWaWRlb0NvZGVjIC8qdmlkZW9fY29kZWMqLywKICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFBdWRpb0NvZGVjIC8qYXVkaW9fY29kZWMqLywKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVRpbWUgLypkdXJhdGlvbl9wdHMqLywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSAvKmRybV9zeXN0ZW0qLywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiTWVkaWFBdWRpb0hlYWRlciogLyphdWRpb19oZWFkZXIqLywKICAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyRGVhbGxvY2F0ZVNhbXBsZUZ1bmMgLypzYW1wbGVfZGVhbGxvY2F0ZV9mdW5jKi8sCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfaW5mby5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvLmNjCmluZGV4IDJhZmZjMzMuLjZmMDcwNjYgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvLmNjCkBAIC0xNCw2ICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvcGxheWVyLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogdm9pZCBTYlBsYXllckdldEluZm8oU2JQbGF5ZXIgLypwbGF5ZXIqLywgU2JQbGF5ZXJJbmZvKiAvKm91dF9wbGF5ZXJfaW5mbyovKSB7fQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvMi5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvMi5jYwppbmRleCA1ZDk1ZTU4Li43N2MzNjAzIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfaW5mbzIuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X2luZm8yLmNjCkBAIC0xNCw3ICsxNCw3IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvcGxheWVyLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiB2b2lkIFNiUGxheWVyR2V0SW5mbzIoU2JQbGF5ZXIgLypwbGF5ZXIqLywgU2JQbGF5ZXJJbmZvMiogLypvdXRfcGxheWVyX2luZm8qLykgewogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X21heGltdW1fbnVtYmVyX29mX3NhbXBsZXNfcGVyX3dyaXRlLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X21heGltdW1fbnVtYmVyX29mX3NhbXBsZXNfcGVyX3dyaXRlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfbWF4aW11bV9udW1iZXJfb2Zfc2FtcGxlc19wZXJfd3JpdGUuY2MKQEAgLTAsMCArMSwyMiBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3BsYXllci5oIgorCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTAKK2ludCBTYlBsYXllckdldE1heGltdW1OdW1iZXJPZlNhbXBsZXNQZXJXcml0ZShTYlBsYXllciAvKnBsYXllciovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFUeXBlIC8qc2FtcGxlX3R5cGUqLykgeworICByZXR1cm4gMDsKK30KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTAKZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9zZWVrLmNjCmluZGV4IGE0OTIxNWUuLmMwOWE1NmEgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2Vlay5jYwpAQCAtMTQsOCArMTQsOCBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3BsYXllci5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKIHZvaWQgU2JQbGF5ZXJTZWVrKFNiUGxheWVyIC8qcGxheWVyKi8sCiAgICAgICAgICAgICAgICAgICBTYk1lZGlhVGltZSAvKnNlZWtfdG9fcHRzKi8sCiAgICAgICAgICAgICAgICAgICBpbnQgLyp0aWNrZXQqLykge30KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9zZWVrMi5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsyLmNjCmluZGV4IDY2NGM2OGEuLmJlNmNiMzIgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsyLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsyLmNjCkBAIC0xNCw4ICsxNCw4IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvcGxheWVyLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiB2b2lkIFNiUGxheWVyU2VlazIoU2JQbGF5ZXIgLypwbGF5ZXIqLywKICAgICAgICAgICAgICAgICAgICBTYlRpbWUgLypzZWVrX3RvX3RpbWVzdGFtcCovLAogICAgICAgICAgICAgICAgICAgIGludCAvKnRpY2tldCovKSB7fQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfd3JpdGVfc2FtcGxlLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfd3JpdGVfc2FtcGxlLmNjCmluZGV4IDI0ZjRlNTIuLjczM2E4NDggMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3dyaXRlX3NhbXBsZS5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl93cml0ZV9zYW1wbGUuY2MKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9wbGF5ZXIuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfREVQUkVDQVRFX1NCX01FRElBX1RJTUVfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiB2b2lkIFNiUGxheWVyV3JpdGVTYW1wbGUoU2JQbGF5ZXIgLypwbGF5ZXIqLywKICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVHlwZSAvKnNhbXBsZV90eXBlKi8sCiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gNgpAQCAtMjksNCArMjksNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiTWVkaWFWaWRlb1NhbXBsZUluZm8qIC8qdmlkZW9fc2FtcGxlX2luZm8qLywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYkRybVNhbXBsZUluZm8qIC8qc2FtcGxlX2RybV9pbmZvKi8pIHsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl93cml0ZV9zYW1wbGUyLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfd3JpdGVfc2FtcGxlMi5jYwppbmRleCA4NDBiYjdiLi5lNWJkYzdmIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl93cml0ZV9zYW1wbGUyLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3dyaXRlX3NhbXBsZTIuY2MKQEAgLTE0LDEzICsxNCw5IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvcGxheWVyLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERVBSRUNBVEVfU0JfTUVESUFfVElNRV9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiB2b2lkIFNiUGxheWVyV3JpdGVTYW1wbGUyKFNiUGxheWVyIC8qcGxheWVyKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFUeXBlIC8qc2FtcGxlX3R5cGUqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3QqIC8qc2FtcGxlX2J1ZmZlcnMqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiAvKnNhbXBsZV9idWZmZXJfc2l6ZXMqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qbnVtYmVyX29mX3NhbXBsZV9idWZmZXJzKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZSAvKnNhbXBsZV90aW1lc3RhbXAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYVZpZGVvU2FtcGxlSW5mbyogLyp2aWRlb19zYW1wbGVfaW5mbyovLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYkRybVNhbXBsZUluZm8qIC8qc2FtcGxlX2RybV9pbmZvKi8pIHt9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFUFJFQ0FURV9TQl9NRURJQV9USU1FX0FQSV9WRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiUGxheWVyU2FtcGxlSW5mbyogLypzYW1wbGVfaW5mb3MqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qbnVtYmVyX29mX3NhbXBsZV9pbmZvcyovKSB7fQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fc3VwcG9ydHNfcmVzdW1lLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fc3VwcG9ydHNfcmVzdW1lLmNjCmluZGV4IDJlMmUyZjIuLmQwZGMzNDAgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3N1cHBvcnRzX3Jlc3VtZS5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9zdXBwb3J0c19yZXN1bWUuY2MKQEAgLTE0LDEwICsxNCwxMCBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKIGJvb2wgU2JTeXN0ZW1TdXBwb3J0c1Jlc3VtZSgpIHsKICAgcmV0dXJuIHRydWU7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfQUxMT1dfRElTQUJMRV9SRVNVTUVfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC9hcHBsaWNhdGlvbl93YXlsYW5kLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC9hcHBsaWNhdGlvbl93YXlsYW5kLmNjCmluZGV4IDBkYTc4ZjkuLmJmNmJmYTAgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvYXBwbGljYXRpb25fd2F5bGFuZC5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3dheWxhbmQuY2MKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxOCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC9hcHBsaWNhdGlvbl93YXlsYW5kLmggYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3dheWxhbmQuaAppbmRleCA1YmZiNjA1Li44ZWM2YWQxIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3dheWxhbmQuaAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2FwcGxpY2F0aW9uX3dheWxhbmQuaApAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2Rldl9pbnB1dC5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvZGV2X2lucHV0LmNjCmluZGV4IDdiOGQ3MTguLjI1MzFlNWUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvZGV2X2lucHV0LmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvZGV2X2lucHV0LmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTggU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvZGV2X2lucHV0LmggYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2Rldl9pbnB1dC5oCmluZGV4IGE4NTM4Y2YuLmM3N2VlODUgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvZGV2X2lucHV0LmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC9kZXZfaW5wdXQuaApAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2VnbF93b3JrYXJvdW5kLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC9lZ2xfd29ya2Fyb3VuZC5jYwppbmRleCA5NDYzZDcyLi5iNTI3MzNjIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL2VnbF93b3JrYXJvdW5kLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvZWdsX3dvcmthcm91bmQuY2MKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxOCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfY3JlYXRlLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfY3JlYXRlLmNjCmluZGV4IDFhOTE0N2QuLmUyNGU3OTggMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2NyZWF0ZS5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL3dpbmRvd19jcmVhdGUuY2MKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNiBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfZGVzdHJveS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2Rlc3Ryb3kuY2MKaW5kZXggNzMzNDUzZC4uODFiYjI2NyAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfZGVzdHJveS5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL3dpbmRvd19kZXN0cm95LmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2dldF9wbGF0Zm9ybV9oYW5kbGUuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL3dpbmRvd19nZXRfcGxhdGZvcm1faGFuZGxlLmNjCmluZGV4IDlmZTc5MDYuLjcwOWVlMDYgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2dldF9wbGF0Zm9ybV9oYW5kbGUuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfZ2V0X3BsYXRmb3JtX2hhbmRsZS5jYwpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLwogLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL3dpbmRvd19nZXRfc2l6ZS5jYyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2dldF9zaXplLmNjCmluZGV4IDcyNjI0YzUuLjViOWYyMzcgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2dldF9zaXplLmNjCisrKyBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2dldF9zaXplLmNjCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2ludGVybmFsLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWwuY2MKaW5kZXggNmYzMjNjNC4uNmNiYzM2MCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWwuY2MKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWwuY2MKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxOCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogLy8KIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWwuaCBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3dheWxhbmQvd2luZG93X2ludGVybmFsLmgKaW5kZXggMjY3N2Y5ZS4uNWVjN2QwZSAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zaGFyZWQvd2F5bGFuZC93aW5kb3dfaW50ZXJuYWwuaAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC93YXlsYW5kL3dpbmRvd19pbnRlcm5hbC5oCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIC8vCiAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3gxMS9hcHBsaWNhdGlvbl94MTEuaCBiL3NyYy9zdGFyYm9hcmQvc2hhcmVkL3gxMS9hcHBsaWNhdGlvbl94MTEuaAppbmRleCAzNDc1N2I5Li5lY2RlZGQzIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC94MTEvYXBwbGljYXRpb25feDExLmgKKysrIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQveDExL2FwcGxpY2F0aW9uX3gxMS5oCkBAIC01Nyw2ICs1NywxNiBAQAogICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgdGhlIEdMIGxheWVyIGhhcyBiZWVuIHVwZGF0ZWQuCiAgIHZvaWQgU3dhcEJ1ZmZlcnNFbmQoKTsKIAorICAvLyBUaGlzIGlzIGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuIFNiUGxheWVyU2V0Qm91bmRzIGlzIGNhbGxlZC4gVGhlCisgIC8vIGFwcGxpY2F0aW9uIHdpbGwgcXVldWUgdGhlIG5ldyBib3VuZHMgdW50aWwgdGhlIFVJIGZyYW1lIHVzaW5nIHRoZXNlCisgIC8vIGJvdW5kcyBpcyByZW5kZXJlZC4KKyAgdm9pZCBQbGF5ZXJTZXRCb3VuZHMoU2JQbGF5ZXIgcGxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgel9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQpOworCiAgcHJvdGVjdGVkOgogICB2b2lkIEFjY2VwdEZyYW1lKFNiUGxheWVyIHBsYXllciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+JiBmcmFtZSwKQEAgLTcxLDEzICs4MSw2IEBACiAgIGJvb2wgSXNQcmVsb2FkSW1tZWRpYXRlKCkgb3ZlcnJpZGUgeyByZXR1cm4gSGFzUHJlbG9hZFN3aXRjaCgpOyB9CiAjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDYKIAotICB2b2lkIFBsYXllclNldEJvdW5kcyhTYlBsYXllciBwbGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCB6X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCi0gICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCkgb3ZlcnJpZGU7Ci0KICBwcm90ZWN0ZWQ6CiAgIC8vIC0tLSBBcHBsaWNhdGlvbiBvdmVycmlkZXMgLS0tCiAgIHZvaWQgSW5pdGlhbGl6ZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQveDExL2VnbF9zd2FwX2J1ZmZlcnMuY2MgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC94MTEvZWdsX3N3YXBfYnVmZmVycy5jYwppbmRleCA1NWVjNDIyLi4wZGIzYjJkIDEwMDY0NAotLS0gYS9zcmMvc3RhcmJvYXJkL3NoYXJlZC94MTEvZWdsX3N3YXBfYnVmZmVycy5jYworKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC94MTEvZWdsX3N3YXBfYnVmZmVycy5jYwpAQCAtMjUsOCArMjUsNyBAQAogICAvLyBhIGdvb2QgYXBwcm94aW1hdGlvbi4KICAgRUdMQm9vbGVhbiByZXR1cm5fdmFsdWU7CiAgIHN0YXJib2FyZDo6c2hhcmVkOjp4MTE6OkFwcGxpY2F0aW9uWDExKiBhcHBsaWNhdGlvbiA9Ci0gICAgICBzdGF0aWNfY2FzdDxzdGFyYm9hcmQ6OnNoYXJlZDo6eDExOjpBcHBsaWNhdGlvblgxMSo+KAotICAgICAgICAgIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OkFwcGxpY2F0aW9uOjpHZXQoKSk7CisgICAgICBzdGFyYm9hcmQ6OnNoYXJlZDo6eDExOjpBcHBsaWNhdGlvblgxMTo6R2V0KCk7CiAKICAgLy8gTm90aWZ5IHRoZSBhcHBsaWNhdGlvbiB3aGVuIHRoZSBzd2FwIGhhcHBlbnMgc28gdGhhdCBpdCBjYW4gc3luY2hyb25pemUKICAgLy8gdGhlIGJvdW5kcyBmb3IgdGhlIHZpZGVvIGxheWVyLgpkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zaGFyZWQveDExL3BsYXllcl9zZXRfYm91bmRzLmNjIGIvc3JjL3N0YXJib2FyZC9zaGFyZWQveDExL3BsYXllcl9zZXRfYm91bmRzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NmI2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RhcmJvYXJkL3NoYXJlZC94MTEvcGxheWVyX3NldF9ib3VuZHMuY2MKQEAgLTAsMCArMSwzNCBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3BsYXllci5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3gxMS9hcHBsaWNhdGlvbl94MTEuaCIKKwordm9pZCBTYlBsYXllclNldEJvdW5kcyhTYlBsYXllciBwbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCB6X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCkgeworICBpZiAoIVNiUGxheWVySXNWYWxpZChwbGF5ZXIpKSB7CisgICAgU0JfRExPRyhXQVJOSU5HKSA8PCAicGxheWVyIGlzIGludmFsaWQuIjsKKyAgICByZXR1cm47CisgIH0KKyAgcGxheWVyLT5TZXRCb3VuZHMoel9pbmRleCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgIHN0YXJib2FyZDo6c2hhcmVkOjp4MTE6OkFwcGxpY2F0aW9uWDExOjpHZXQoKS0+UGxheWVyU2V0Qm91bmRzKAorICAgICAgcGxheWVyLCB6X2luZGV4LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9zdGFyYm9hcmQvc3R1Yi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3JjL3N0YXJib2FyZC9zdHViL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKaW5kZXggNGE3NTUxMS4uNjI0ZjVmYyAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zdHViL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIGIvc3JjL3N0YXJib2FyZC9zdHViL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKQEAgLTk2LDkgKzk2LDIxIEBACiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbG9nX3Jhd19kdW1wX3N0YWNrLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9sb2dfcmF3X2Zvcm1hdC5jYycsCiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfY2FuX3BsYXlfbWltZV9hbmRfa2V5X3N5c3RlbS5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2F1ZGlvX2J1ZmZlcl9idWRnZXQuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9hdWRpb19jb25maWd1cmF0aW9uLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYXVkaW9fb3V0cHV0X2NvdW50LmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX2FsaWdubWVudC5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXQuY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9wYWRkaW5nLmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX3N0b3JhZ2VfdHlwZS5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2luaXRpYWxfYnVmZmVyX2NhcGFjaXR5LmNjJywKKyAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX2J1ZmZlcl9wb29sX2FsbG9jYXRlX29uX2RlbWFuZC5jYycsCisgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19vdXRwdXRfcHJvdGVjdGVkLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19zdXBwb3J0ZWQuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljc19zdXBwb3J0ZWQuY2MnLApAQCAtMTM3LDYgKzE0OSw3IEBACiAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9jdXJyZW50X2ZyYW1lLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X2luZm8uY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfaW5mbzIuY2MnLAorICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfbWF4aW11bV9udW1iZXJfb2Zfc2FtcGxlc19wZXJfd3JpdGUuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWQuY2MnLAogICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9zZWVrLmNjJywKICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2VlazIuY2MnLApkaWZmIC0tZ2l0IGEvc3JjL3N0YXJib2FyZC9zeXN0ZW0uaCBiL3NyYy9zdGFyYm9hcmQvc3lzdGVtLmgKaW5kZXggOTY3MGMxZS4uMTc1ZDJiOCAxMDA2NDQKLS0tIGEvc3JjL3N0YXJib2FyZC9zeXN0ZW0uaAorKysgYi9zcmMvc3RhcmJvYXJkL3N5c3RlbS5oCkBAIC01NSwxMSArNTUsMTEgQEAKICAgLy8gdXNhYmxlIGJ5IFN0YXJib2FyZCBhcHBsaWNhdGlvbnMuCiAgIGtTYlN5c3RlbVBhdGhGb250Q29uZmlndXJhdGlvbkRpcmVjdG9yeSwKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfUEFUSF9TT1VSQ0VfRElSX1JFTU9WRURfQVBJX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEwCiAgIC8vIERlcHJlY2F0ZWQgYW5kIHVudXNlZC4gVGVzdHMgbG9va2luZyBmb3Igc3RhdGljIGRhdGEgc2hvdWxkIGluc3RlYWQgbG9vawogICAvLyBpbiB0aGUgJ3Rlc3QnIHN1YmRpcmVjdG9yeSBvZiBrU2JTeXN0ZW1QYXRoQ29udGVudERpcmVjdG9yeS4KICAga1NiU3lzdGVtUGF0aFNvdXJjZURpcmVjdG9yeSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCBTQl9QQVRIX1NPVVJDRV9ESVJfUkVNT1ZFRF9BUElfVkVSU0lPTgorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEwCiAKICAgLy8gUGF0aCB0byBhIGRpcmVjdG9yeSB3aGVyZSB0ZW1wb3JhcnkgZmlsZXMgY2FuIGJlIHdyaXR0ZW4uCiAgIGtTYlN5c3RlbVBhdGhUZW1wRGlyZWN0b3J5LApAQCAtMTA3LDEwICsxMDcsMTAgQEAKICAgLy8gVXNlci1BZ2VudCwgc2F5LgogICBrU2JTeXN0ZW1Qcm9wZXJ0eVBsYXRmb3JtTmFtZSwKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfUFJPUEVSVFlfVVVJRF9SRU1PVkVEX0FQSV9WRVJTSU9OCisjaWYgU0JfQVBJX1ZFUlNJT04gPCAxMAogICAvLyBBIHVuaXZlcnNhbGx5LXVuaXF1ZSBJRCBmb3IgdGhlIGN1cnJlbnQgdXNlci4KICAga1NiU3lzdGVtUHJvcGVydHlQbGF0Zm9ybVV1aWQsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfUFJPUEVSVFlfVVVJRF9SRU1PVkVEX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTAKIAogICAvLyBUaGUgR29vZ2xlIFNwZWVjaCBBUEkga2V5LiBUaGUgcGxhdGZvcm0gbWFudWZhY3R1cmVyIGlzIHJlc3BvbnNpYmxlCiAgIC8vIGZvciByZWdpc3RlcmluZyBhIEdvb2dsZSBTcGVlY2ggQVBJIGtleSBmb3IgdGhlaXIgcHJvZHVjdHMuIEluIHRoZSBBUEkKQEAgLTE4MCw3ICsxODAsNyBAQAogICAvLyBjYWxsLgogICBrU2JTeXN0ZW1DYXBhYmlsaXR5Q2FuUXVlcnlHUFVNZW1vcnlTdGF0cywKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0lOUFVUX1RJTUVTVEFNUF9BUElfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OID49IDEwCiAgIC8vIFdoZXRoZXIgdGhpcyBzeXN0ZW0gc2V0cyB0aGUgfHRpbWVzdGFtcHwgZmllbGQgb2YgU2JJbnB1dERhdGEuIElmIHRoZQogICAvLyBzeXN0ZW0gZG9lcyBub3Qgc2V0IHRoaXMgZmllbGQsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldDsgaG93ZXZlciwKICAgLy8gdGhlIHJlbGF0aXZlIHRpbWUgYmV0d2VlbiBpbnB1dCBldmVudHMgbGlrZWx5IHdpbGwgbm90IGJlIHByZXNlcnZlZCwgc28KQEAgLTU0Myw3ICs1NDMsNyBAQAogLy8gZnJvbSBhbnkgdGhyZWFkIGFuZCBtdXN0IGJlIGlkZW1wb3RlbnQuCiBTQl9FWFBPUlQgdm9pZCBTYlN5c3RlbUhpZGVTcGxhc2hTY3JlZW4oKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0FMTE9XX0RJU0FCTEVfUkVTVU1FX1ZFUlNJT04KKyNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMAogLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGxhdGZvcm0gZG9lc24ndCBuZWVkIHJlc3VtZSBhZnRlciBzdXNwZW5kIHN1cHBvcnQuIEluCiAvLyBzdWNoIGNhc2UgQ29iYWx0IHdpbGwgZnJlZSB1cCB0aGUgcmVzb3VyY2UgaXQgcmV0YWlucyBmb3IgcmVzdW1lIGFmdGVyCiAvLyBzdXNwZW5kLgpAQCAtNTUyLDcgKzU1Miw3IEBACiAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gY2Fubm90IGNoYW5nZSBvdmVyIHRoZSBsaWZlIHRpbWUgb2YgdGhlCiAvLyBhcHBsaWNhdGlvbi4KIGJvb2wgU2JTeXN0ZW1TdXBwb3J0c1Jlc3VtZSgpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9BTExPV19ESVNBQkxFX1JFU1VNRV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEwCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAgLy8gZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RpbmcvZ3Rlc3QuZ3lwIGIvc3JjL3Rlc3RpbmcvZ3Rlc3QuZ3lwCmluZGV4IDVjZDc0MWQuLjcxZGQ0YzkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0aW5nL2d0ZXN0Lmd5cAorKysgYi9zcmMvdGVzdGluZy9ndGVzdC5neXAKQEAgLTE2Niw2ICsxNjYsNyBAQAogICAgICAgICAgICAgICAnR1RFU1RfVVNFX09XTl9UUjFfVFVQTEU9MScsCiAgICAgICAgICAgICAgICdHVEVTVF9IQVNfUE9TSVhfUkU9MCcsCiAgICAgICAgICAgICAgICdfUE9TSVhfUEFUSF9NQVg9MjU1JywKKyAgICAgICAgICAgICAgJ19TSUxFTkNFX1RSMV9OQU1FU1BBQ0VfREVQUkVDQVRJT05fV0FSTklORycsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2NvbmRpdGlvbnMnIDogWwogICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYW5kcm9pZCInLCB7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvZ3lwL2NvbW1vbi5neXBpIGIvc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL2d5cC9jb21tb24uZ3lwaQppbmRleCBmZWM0N2Q4Li41Njk3MTI1IDEwMDY0NAotLS0gYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvZ3lwL2NvbW1vbi5neXBpCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9hbmdsZS9neXAvY29tbW9uLmd5cGkKQEAgLTYsNyArNiw3IEBACiAgICAgJ2luY2x1ZGVzJzogWyAnY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCiAgICAgJ3ZhcmlhYmxlcyc6CiAgICAgewotICAgICAgICAnYW5nbGVfcGF0aCc6ICc8KERFUFRIKScsCisgICAgICAgICdhbmdsZV9wYXRoJzogJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlJywKICAgICAgICAgJ2FuZ2xlX2J1aWxkX3dpbnJ0JSc6ICcwJywKICAgICAgICAgJ2FuZ2xlX2J1aWxkX3dpbnJ0X2FwcF90eXBlX3JldmlzaW9uJSc6ICcxMC4wJywKICAgICAgICAgJ2FuZ2xlX2J1aWxkX3dpbnJ0X3RhcmdldF9wbGF0Zm9ybV92ZXIlJyA6ICcnLApkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9hbmdsZS5neXAgYi9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2FuZ2xlLmd5cAppbmRleCBlMjhiOWI5Li5hN2FlNzdkIDEwMDY0NAotLS0gYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2FuZ2xlLmd5cAorKysgYi9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2FuZ2xlLmd5cApAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgogICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgJzwoREVQVEgpL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvc3JjJywKLSAgICAgICAgICAgICAgICAgICAgJzwoREVQVEgpL3NyYy9jb21tb24vdGhpcmRfcGFydHkvbnVtZXJpY3MnLAorICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCisgICAgICAgICAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMnLAorICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcycsCiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6CiAgICAgICAgICAgICAgICAgWwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvbnVtZXJpY3MvYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmggYi9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL251bWVyaWNzL3NhZmVfY29udmVyc2lvbnMuaAppbmRleCAzZmU0OTZjLi44OTI1NDVhIDEwMDY0NAotLS0gYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL251bWVyaWNzL3NhZmVfY29udmVyc2lvbnMuaAorKysgYi9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL251bWVyaWNzL3NhZmVfY29udmVyc2lvbnMuaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KIAotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgorI2luY2x1ZGUgImJhc2UvbnVtZXJpY3NfbG9nZ2luZy5oIgogI2luY2x1ZGUgImJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9uc19pbXBsLmgiCiAKIG5hbWVzcGFjZSBiYXNlCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL251bWVyaWNzL3NhZmVfbWF0aC5oIGIvc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvbnVtZXJpY3MvYmFzZS9udW1lcmljcy9zYWZlX21hdGguaAppbmRleCA1MDVlZmRlLi5iNjkxYTI2IDEwMDY0NAotLS0gYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL251bWVyaWNzL3NhZmVfbWF0aC5oCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L251bWVyaWNzL2Jhc2UvbnVtZXJpY3Mvc2FmZV9tYXRoLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJiYXNlL251bWVyaWNzX2xvZ2dpbmcuaCIKICNpbmNsdWRlICJiYXNlL251bWVyaWNzL3NhZmVfbWF0aF9pbXBsLmgiCiAKIG5hbWVzcGFjZSBiYXNlCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL2xvZ2dpbmcuaCBiL3NyYy90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L251bWVyaWNzL2Jhc2UvbnVtZXJpY3NfbG9nZ2luZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9udW1lcmljcy9iYXNlL2xvZ2dpbmcuaApyZW5hbWUgdG8gc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvbnVtZXJpY3MvYmFzZS9udW1lcmljc19sb2dnaW5nLmgKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAgYi9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NhcHMuY3BwCmluZGV4IDBiOTdmYjUuLjk3MzE0YTIgMTAwNjQ0Ci0tLSBhL3NyYy90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9DYXBzLmNwcApAQCAtNTY5LDExICs1NjksMTEgQEAKICAgICB0ZXh0dXJlSGFsZkZsb2F0TGluZWFyID0gRGV0ZXJtaW5lSGFsZkZsb2F0VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQodGV4dHVyZUNhcHMpOwogICAgIHRleHR1cmVGbG9hdCA9IERldGVybWluZUZsb2F0VGV4dHVyZVN1cHBvcnQodGV4dHVyZUNhcHMpOwogICAgIHRleHR1cmVGbG9hdExpbmVhciA9IERldGVybWluZUZsb2F0VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQodGV4dHVyZUNhcHMpOwotI2lmIGRlZmluZWQoT1NfU1RBUkJPQVJEKQorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQogICAgIHRleHR1cmVSRyA9IGZhbHNlOwogI2Vsc2UKICAgICB0ZXh0dXJlUkcgPSBEZXRlcm1pbmVSR1RleHR1cmVTdXBwb3J0KHRleHR1cmVDYXBzLCB0ZXh0dXJlSGFsZkZsb2F0LCB0ZXh0dXJlRmxvYXQpOwotI2VuZGlmICAvLyBPU19TVEFSQk9BUkQKKyNlbmRpZiAgLy8gU1RBUkJPQVJECiAgICAgdGV4dHVyZUNvbXByZXNzaW9uRFhUMSA9IERldGVybWluZURYVDFUZXh0dXJlU3VwcG9ydCh0ZXh0dXJlQ2Fwcyk7CiAgICAgdGV4dHVyZUNvbXByZXNzaW9uRFhUMyA9IERldGVybWluZURYVDNUZXh0dXJlU3VwcG9ydCh0ZXh0dXJlQ2Fwcyk7CiAgICAgdGV4dHVyZUNvbXByZXNzaW9uRFhUNSA9IERldGVybWluZURYVDVUZXh0dXJlU3VwcG9ydCh0ZXh0dXJlQ2Fwcyk7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi5neXBpIGIvc3JjL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIuZ3lwaQppbmRleCAzMDg1ODI0Li4zNTM3ODIzIDEwMDY0NAotLS0gYS9zcmMvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi5neXBpCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyLmd5cGkKQEAgLTkwMSw3ICs5MDEsNiBAQAogICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAogICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6CiAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCiAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0b3InLAogICAgICAgICAgICAgICAgICdhbmdsZV9jb21tb24nLAogICAgICAgICAgICAgICAgICdhbmdsZV9pbWFnZV91dGlsJywKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL0JVSUxESU5HLm1kIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQlVJTERJTkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OTYzZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL0JVSUxESU5HLm1kCkBAIC0wLDAgKzEsODczIEBACitCdWlsZGluZyBsaWJqcGVnLXR1cmJvCis9PT09PT09PT09PT09PT09PT09PT09CisKKworQnVpbGQgUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworCisjIyMgQWxsIFN5c3RlbXMKKworLSBbQ01ha2VdKGh0dHA6Ly93d3cuY21ha2Uub3JnKSB2Mi44LjEyIG9yIGxhdGVyCisKKy0gW05BU01dKGh0dHA6Ly93d3cubmFzbS51cykgb3IgW1lBU01dKGh0dHA6Ly95YXNtLnRvcnRhbGwubmV0KQorICAoaWYgYnVpbGRpbmcgeDg2IG9yIHg4Ni02NCBTSU1EIGV4dGVuc2lvbnMpCisgICogSWYgdXNpbmcgTkFTTSwgMi4xMCBvciBsYXRlciBpcyByZXF1aXJlZC4KKyAgKiBJZiB1c2luZyBOQVNNLCAyLjEwIG9yIGxhdGVyIChleGNlcHQgMi4xMS4wOCkgaXMgcmVxdWlyZWQgZm9yIGFuIHg4Ni02NCBNYWMKKyAgICBidWlsZCAoMi4xMS4wOCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggbGlianBlZy10dXJibydzIHg4Ni02NCBTSU1EIGNvZGUKKyAgICB3aGVuIGJ1aWxkaW5nIG1hY2hvNjQgb2JqZWN0cy4pICBOQVNNIG9yIFlBU00gY2FuIGJlIG9idGFpbmVkIGZyb20KKyAgICBbTWFjUG9ydHNdKGh0dHA6Ly93d3cubWFjcG9ydHMub3JnLykgb3IgW0hvbWVicmV3XShodHRwOi8vYnJldy5zaC8pLgorICAqIElmIHVzaW5nIFlBU00sIDEuMi4wIG9yIGxhdGVyIGlzIHJlcXVpcmVkLgorICAgICAtIE5PVEU6IEN1cnJlbnRseSwgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIGhpZGUgdGhlIFNJTUQgZnVuY3Rpb24gc3ltYm9scyBpbgorICAgICAgIE1hYyBleGVjdXRhYmxlcyBvciBzaGFyZWQgbGlicmFyaWVzIHRoYXQgc3RhdGljYWxseSBsaW5rIHdpdGgKKyAgICAgICBsaWJqcGVnLXR1cmJvLCB0aGVuIFlBU00gbXVzdCBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgbGlianBlZy10dXJiby4KKyAgKiBJZiBidWlsZGluZyBvbiBXaW5kb3dzLCAqKm5hc20uZXhlKiovKip5YXNtLmV4ZSoqIHNob3VsZCBiZSBpbiB5b3VyIGBQQVRIYC4KKworICBUaGUgYmluYXJ5IFJQTXMgcmVsZWFzZWQgYnkgdGhlIE5BU00gcHJvamVjdCBkbyBub3Qgd29yayBvbiBvbGRlciBMaW51eAorICBzeXN0ZW1zLCBzdWNoIGFzIFJlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCA1LiAgT24gc3VjaCBzeXN0ZW1zLCB5b3UgY2FuIGVhc2lseQorICBidWlsZCBhbmQgaW5zdGFsbCBOQVNNIGZyb20gYSBzb3VyY2UgUlBNIGJ5IGRvd25sb2FkaW5nIG9uZSBvZiB0aGUgU1JQTXMgZnJvbQorCisgIDxodHRwOi8vd3d3Lm5hc20udXMvcHViL25hc20vcmVsZWFzZWJ1aWxkcz4KKworICBhbmQgZXhlY3V0aW5nIHRoZSBmb2xsb3dpbmcgYXMgcm9vdDoKKworICAgICAgICBBUkNIPWB1bmFtZSAtbWAKKyAgICAgICAgcnBtYnVpbGQgLS1yZWJ1aWxkIG5hc20te3ZlcnNpb259LnNyYy5ycG0KKyAgICAgICAgcnBtIC1VdmggL3Vzci9zcmMvcmVkaGF0L1JQTVMvJEFSQ0gvbmFzbS17dmVyc2lvbn0uJEFSQ0gucnBtCisKKyAgTk9URTogdGhlIE5BU00gYnVpbGQgd2lsbCBmYWlsIGlmIHRleGluZm8gaXMgbm90IGluc3RhbGxlZC4KKworCisjIyMgVW4qeCBQbGF0Zm9ybXMgKGluY2x1ZGluZyBMaW51eCwgTWFjLCBGcmVlQlNELCBTb2xhcmlzLCBhbmQgQ3lnd2luKQorCistIEdDQyB2NC4xIChvciBsYXRlcikgb3IgQ2xhbmcgcmVjb21tZW5kZWQgZm9yIGJlc3QgcGVyZm9ybWFuY2UKKworLSBJZiBidWlsZGluZyB0aGUgVHVyYm9KUEVHIEphdmEgd3JhcHBlciwgSkRLIG9yIE9wZW5KREsgMS41IG9yIGxhdGVyIGlzCisgIHJlcXVpcmVkLiAgTW9zdCBtb2Rlcm4gTGludXggZGlzdHJpYnV0aW9ucywgYXMgd2VsbCBhcyBTb2xhcmlzIDEwIGFuZCBsYXRlciwKKyAgaW5jbHVkZSBKREsgb3IgT3BlbkpESy4gIE9uIE9TIFggMTAuNSBhbmQgMTAuNiwgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8KKyAgaW5zdGFsbCB0aGUgSmF2YSBEZXZlbG9wZXIgUGFja2FnZSwgd2hpY2ggY2FuIGJlIGRvd25sb2FkZWQgZnJvbQorICA8aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZG93bmxvYWRzPiAoQXBwbGUgSUQgcmVxdWlyZWQuKSAgRm9yIG90aGVyCisgIHN5c3RlbXMsIHlvdSBjYW4gb2J0YWluIHRoZSBPcmFjbGUgSmF2YSBEZXZlbG9wbWVudCBLaXQgZnJvbQorICA8aHR0cDovL3d3dy5qYXZhLmNvbT4uCisKKworIyMjIFdpbmRvd3MKKworLSBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDA1IG9yIGxhdGVyCisKKyAgSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBWaXN1YWwgQysrLCB0aGVuIHRoZSBlYXNpZXN0IHdheSB0byBnZXQgaXQgaXMgYnkKKyAgaW5zdGFsbGluZyB0aGUKKyAgW1dpbmRvd3MgU0RLXShodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3MvYmI5ODA5MjQuYXNweCkuCisgIFRoZSBXaW5kb3dzIFNESyBpbmNsdWRlcyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IFZpc3VhbCBDKysgY29tcGlsZXJzIGFuZAorICBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byBidWlsZCBsaWJqcGVnLXR1cmJvLgorCisgICogWW91IGNhbiBhbHNvIHVzZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBFeHByZXNzL0NvbW11bml0eSBFZGl0aW9uLCB3aGljaAorICAgIGlzIGEgZnJlZSBkb3dubG9hZC4gIChOT1RFOiB2ZXJzaW9ucyBwcmlvciB0byAyMDEyIGNhbiBvbmx5IGJlIHVzZWQgdG8KKyAgICBidWlsZCAzMi1iaXQgY29kZS4pCisgICogSWYgeW91IGludGVuZCB0byBidWlsZCBsaWJqcGVnLXR1cmJvIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiBhZGQgdGhlCisgICAgYXBwcm9wcmlhdGUgY29tcGlsZXIgYW5kIFNESyBkaXJlY3RvcmllcyB0byB0aGUgYElOQ0xVREVgLCBgTElCYCwgYW5kCisgICAgYFBBVEhgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoaXMgaXMgZ2VuZXJhbGx5IGFjY29tcGxpc2hlZCBieQorICAgIGV4ZWN1dGluZyBgdmN2YXJzMzIuYmF0YCBvciBgdmN2YXJzNjQuYmF0YCBhbmQgYFNldEVudi5jbWRgLgorICAgIGB2Y3ZhcnMzMi5iYXRgIGFuZCBgdmN2YXJzNjQuYmF0YCBhcmUgcGFydCBvZiBWaXN1YWwgQysrIGFuZCBhcmUgbG9jYXRlZCBpbgorICAgIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29tcGlsZXIuICBgU2V0RW52LmNtZGAgaXMgcGFydCBvZiB0aGUgV2luZG93cworICAgIFNESy4gIFlvdSBjYW4gcGFzcyBvcHRpb25hbCBhcmd1bWVudHMgdG8gYFNldEVudi5jbWRgIHRvIHNwZWNpZnkgYSAzMi1iaXQKKyAgICBvciA2NC1iaXQgYnVpbGQgZW52aXJvbm1lbnQuCisKKyAgIC4uLiBPUiAuLi4KKworLSBNaW5HVworCisgIFtNU1lTMl0oaHR0cDovL21zeXMyLmdpdGh1Yi5pby8pIG9yIFt0ZG0tZ2NjXShodHRwOi8vdGRtLWdjYy50ZHJhZ29uLm5ldC8pCisgIHJlY29tbWVuZGVkIGlmIGJ1aWxkaW5nIG9uIGEgV2luZG93cyBtYWNoaW5lLiAgQm90aCBkaXN0cmlidXRpb25zIGluc3RhbGwgYQorICBTdGFydCBNZW51IGxpbmsgdGhhdCBjYW4gYmUgdXNlZCB0byBsYXVuY2ggYSBjb21tYW5kIHByb21wdCB3aXRoIHRoZQorICBhcHByb3ByaWF0ZSBjb21waWxlciBwYXRocyBhdXRvbWF0aWNhbGx5IHNldC4KKworLSBJZiBidWlsZGluZyB0aGUgVHVyYm9KUEVHIEphdmEgd3JhcHBlciwgSkRLIDEuNSBvciBsYXRlciBpcyByZXF1aXJlZC4gIFRoaXMKKyAgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSA8aHR0cDovL3d3dy5qYXZhLmNvbT4uCisKKworT3V0LW9mLVRyZWUgQnVpbGRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworQmluYXJ5IG9iamVjdHMsIGxpYnJhcmllcywgYW5kIGV4ZWN1dGFibGVzIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBmcm9tCit3aGljaCBDTWFrZSBpcyBleGVjdXRlZCAodGhlICJiaW5hcnkgZGlyZWN0b3J5IiksIGFuZCB0aGlzIGRpcmVjdG9yeSBuZWVkIG5vdAorbmVjZXNzYXJpbHkgYmUgdGhlIHNhbWUgYXMgdGhlIGxpYmpwZWctdHVyYm8gc291cmNlIGRpcmVjdG9yeS4gIFlvdSBjYW4gY3JlYXRlCittdWx0aXBsZSBpbmRlcGVuZGVudCBiaW5hcnkgZGlyZWN0b3JpZXMsIGluIHdoaWNoIGRpZmZlcmVudCB2ZXJzaW9ucyBvZgorbGlianBlZy10dXJibyBjYW4gYmUgYnVpbHQgZnJvbSB0aGUgc2FtZSBzb3VyY2UgdHJlZSB1c2luZyBkaWZmZXJlbnQgY29tcGlsZXJzCitvciBzZXR0aW5ncy4gIEluIHRoZSBzZWN0aW9ucyBiZWxvdywgKntidWlsZF9kaXJlY3Rvcnl9KiByZWZlcnMgdG8gdGhlIGJpbmFyeQorZGlyZWN0b3J5LCB3aGVyZWFzICp7c291cmNlX2RpcmVjdG9yeX0qIHJlZmVycyB0byB0aGUgbGlianBlZy10dXJibyBzb3VyY2UKK2RpcmVjdG9yeS4gIEZvciBpbi10cmVlIGJ1aWxkcywgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHRoZSBzYW1lLgorCisKK0J1aWxkIFByb2NlZHVyZQorLS0tLS0tLS0tLS0tLS0tCisKK05PVEU6IFRoZSBidWlsZCBwcm9jZWR1cmVzIGJlbG93IGFzc3VtZSB0aGF0IENNYWtlIGlzIGludm9rZWQgZnJvbSB0aGUgY29tbWFuZAorbGluZSwgYnV0IGFsbCBvZiB0aGVzZSBwcm9jZWR1cmVzIGNhbiBiZSBhZGFwdGVkIHRvIHRoZSBDTWFrZSBHVUkgYXMKK3dlbGwuCisKKworIyMjIFVuKngKKworVGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgd2lsbCBidWlsZCBsaWJqcGVnLXR1cmJvIG9uIFVuaXggYW5kIFVuaXgtbGlrZSBzeXN0ZW1zLgorKE9uIFNvbGFyaXMsIHRoaXMgZ2VuZXJhdGVzIGEgMzItYml0IGJ1aWxkLiAgU2VlICJCdWlsZCBSZWNpcGVzIiBiZWxvdyBmb3IKKzY0LWJpdCBidWlsZCBpbnN0cnVjdGlvbnMuKQorCisgICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgICBjbWFrZSAtRyJVbml4IE1ha2VmaWxlcyIgW2FkZGl0aW9uYWwgQ01ha2UgZmxhZ3NdIHtzb3VyY2VfZGlyZWN0b3J5fQorICAgIG1ha2UKKworVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgdW5kZXIgKntidWlsZF9kaXJlY3Rvcnl9KjoKKworKipsaWJqcGVnLmEqKjxicj4KK1N0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIHRoZSBsaWJqcGVnIEFQSQorCisqKmxpYmpwZWcuc28ue3ZlcnNpb259KiogKExpbnV4LCBVbml4KTxicj4KKyoqbGlianBlZy57dmVyc2lvbn0uZHlsaWIqKiAoTWFjKTxicj4KKyoqY3lnanBlZy17dmVyc2lvbn0uZGxsKiogKEN5Z3dpbik8YnI+CitTaGFyZWQgbGlicmFyeSBmb3IgdGhlIGxpYmpwZWcgQVBJCisKK0J5IGRlZmF1bHQsICp7dmVyc2lvbn0qIGlzIDYyLjIuMCwgNy4yLjAsIG9yIDguMS4yLCBkZXBlbmRpbmcgb24gd2hldGhlcgorbGlianBlZyB2NmIgKGRlZmF1bHQpLCB2Nywgb3IgdjggZW11bGF0aW9uIGlzIGVuYWJsZWQuICBJZiB1c2luZyBDeWd3aW4sCisqe3ZlcnNpb259KiBpcyA2MiwgNywgb3IgOC4KKworKipsaWJqcGVnLnNvKiogKExpbnV4LCBVbml4KTxicj4KKyoqbGlianBlZy5keWxpYioqIChNYWMpPGJyPgorRGV2ZWxvcG1lbnQgc3ltbGluayBmb3IgdGhlIGxpYmpwZWcgQVBJCisKKyoqbGlianBlZy5kbGwuYSoqIChDeWd3aW4pPGJyPgorSW1wb3J0IGxpYnJhcnkgZm9yIHRoZSBsaWJqcGVnIEFQSQorCisqKmxpYnR1cmJvanBlZy5hKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqKmxpYnR1cmJvanBlZy5zby4wLjIuMCoqIChMaW51eCwgVW5peCk8YnI+CisqKmxpYnR1cmJvanBlZy4wLjIuMC5keWxpYioqIChNYWMpPGJyPgorKipjeWd0dXJib2pwZWctMC5kbGwqKiAoQ3lnd2luKTxicj4KK1NoYXJlZCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqKmxpYnR1cmJvanBlZy5zbyoqIChMaW51eCwgVW5peCk8YnI+CisqKmxpYnR1cmJvanBlZy5keWxpYioqIChNYWMpPGJyPgorRGV2ZWxvcG1lbnQgc3ltbGluayBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKKworKipsaWJ0dXJib2pwZWcuZGxsLmEqKiAoQ3lnd2luKTxicj4KK0ltcG9ydCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisKKyMjIyBWaXN1YWwgQysrIChDb21tYW5kIExpbmUpCisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIGNtYWtlIC1HIk5NYWtlIE1ha2VmaWxlcyIgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgW2FkZGl0aW9uYWwgQ01ha2UgZmxhZ3NdIHtzb3VyY2VfZGlyZWN0b3J5fQorICAgIG5tYWtlCisKK1RoaXMgd2lsbCBidWlsZCBlaXRoZXIgYSAzMi1iaXQgb3IgYSA2NC1iaXQgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvLCBkZXBlbmRpbmcKK29uIHdoaWNoIHZlcnNpb24gb2YgKipjbC5leGUqKiBpcyBpbiB0aGUgYFBBVEhgLgorCitUaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgYmUgZ2VuZXJhdGVkIHVuZGVyICp7YnVpbGRfZGlyZWN0b3J5fSo6CisKKyoqanBlZy1zdGF0aWMubGliKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKKworKipqcGVne3ZlcnNpb259LmRsbCoqPGJyPgorRExMIGZvciB0aGUgbGlianBlZyBBUEkKKworKipqcGVnLmxpYioqPGJyPgorSW1wb3J0IGxpYnJhcnkgZm9yIHRoZSBsaWJqcGVnIEFQSQorCisqKnR1cmJvanBlZy1zdGF0aWMubGliKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqKnR1cmJvanBlZy5kbGwqKjxicj4KK0RMTCBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKKworKip0dXJib2pwZWcubGliKio8YnI+CitJbXBvcnQgbGlicmFyeSBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKKworKnt2ZXJzaW9ufSogaXMgNjIsIDcsIG9yIDgsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGxpYmpwZWcgdjZiIChkZWZhdWx0KSwgdjcsIG9yCit2OCBlbXVsYXRpb24gaXMgZW5hYmxlZC4KKworCisjIyMgVmlzdWFsIEMrKyAoSURFKQorCitDaG9vc2UgdGhlIGFwcHJvcHJpYXRlIENNYWtlIGdlbmVyYXRvciBvcHRpb24gZm9yIHlvdXIgdmVyc2lvbiBvZiBWaXN1YWwgU3R1ZGlvCisocnVuIGBjbWFrZWAgd2l0aCBubyBhcmd1bWVudHMgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgZ2VuZXJhdG9ycy4pICBGb3IKK2luc3RhbmNlOgorCisgICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgICBjbWFrZSAtRyJWaXN1YWwgU3R1ZGlvIDEwIiBbYWRkaXRpb25hbCBDTWFrZSBmbGFnc10ge3NvdXJjZV9kaXJlY3Rvcnl9CisKK05PVEU6IEFkZCAiV2luNjQiIHRvIHRoZSBnZW5lcmF0b3IgbmFtZSAoZm9yIGV4YW1wbGUsICJWaXN1YWwgU3R1ZGlvIDEwIFdpbjY0IikKK3RvIGJ1aWxkIGEgNjQtYml0IHZlcnNpb24gb2YgbGlianBlZy10dXJiby4gIEEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IG11c3QgYmUKK3VzZWQgZm9yIDMyLWJpdCBhbmQgNjQtYml0IGJ1aWxkcy4KKworWW91IGNhbiB0aGVuIG9wZW4gKipBTExfQlVJTEQudmNwcm9qKiogaW4gVmlzdWFsIFN0dWRpbyBhbmQgYnVpbGQgb25lIG9mIHRoZQorY29uZmlndXJhdGlvbnMgaW4gdGhhdCBwcm9qZWN0ICgiRGVidWciLCAiUmVsZWFzZSIsIGV0Yy4pIHRvIGdlbmVyYXRlIGEgZnVsbAorYnVpbGQgb2YgbGlianBlZy10dXJiby4KKworVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgdW5kZXIgKntidWlsZF9kaXJlY3Rvcnl9KjoKKworKip7Y29uZmlndXJhdGlvbn0vanBlZy1zdGF0aWMubGliKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKKworKip7Y29uZmlndXJhdGlvbn0vanBlZ3t2ZXJzaW9ufS5kbGwqKjxicj4KK0RMTCBmb3IgdGhlIGxpYmpwZWcgQVBJCisKKyoqe2NvbmZpZ3VyYXRpb259L2pwZWcubGliKio8YnI+CitJbXBvcnQgbGlicmFyeSBmb3IgdGhlIGxpYmpwZWcgQVBJCisKKyoqe2NvbmZpZ3VyYXRpb259L3R1cmJvanBlZy1zdGF0aWMubGliKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqKntjb25maWd1cmF0aW9ufS90dXJib2pwZWcuZGxsKio8YnI+CitETEwgZm9yIHRoZSBUdXJib0pQRUcgQVBJCisKKyoqe2NvbmZpZ3VyYXRpb259L3R1cmJvanBlZy5saWIqKjxicj4KK0ltcG9ydCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqe2NvbmZpZ3VyYXRpb259KiBpcyBEZWJ1ZywgUmVsZWFzZSwgUmVsV2l0aERlYkluZm8sIG9yIE1pblNpemVSZWwsIGRlcGVuZGluZworb24gdGhlIGNvbmZpZ3VyYXRpb24geW91IGJ1aWx0IGluIHRoZSBJREUsIGFuZCAqe3ZlcnNpb259KiBpcyA2MiwgNywgb3IgOCwKK2RlcGVuZGluZyBvbiB3aGV0aGVyIGxpYmpwZWcgdjZiIChkZWZhdWx0KSwgdjcsIG9yIHY4IGVtdWxhdGlvbiBpcyBlbmFibGVkLgorCisKKyMjIyBNaW5HVworCitOT1RFOiBUaGlzIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIG9uIGEgV2luZG93cyBtYWNoaW5lIHVzaW5nIHRoZSBNU1lTCitlbnZpcm9ubWVudC4gIElmIHlvdSBhcmUgY3Jvc3MtY29tcGlsaW5nIG9uIGEgVW4qeCBwbGF0Zm9ybSAoaW5jbHVkaW5nIE1hYyBhbmQKK0N5Z3dpbiksIHRoZW4gc2VlICJCdWlsZCBSZWNpcGVzIiBiZWxvdy4KKworICAgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgICAgY21ha2UgLUciTVNZUyBNYWtlZmlsZXMiIFthZGRpdGlvbmFsIENNYWtlIGZsYWdzXSB7c291cmNlX2RpcmVjdG9yeX0KKyAgICBtYWtlCisKK1RoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzIHVuZGVyICp7YnVpbGRfZGlyZWN0b3J5fSo6CisKKyoqbGlianBlZy5hKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKKworKipsaWJqcGVnLXt2ZXJzaW9ufS5kbGwqKjxicj4KK0RMTCBmb3IgdGhlIGxpYmpwZWcgQVBJCisKKyoqbGlianBlZy5kbGwuYSoqPGJyPgorSW1wb3J0IGxpYnJhcnkgZm9yIHRoZSBsaWJqcGVnIEFQSQorCisqKmxpYnR1cmJvanBlZy5hKio8YnI+CitTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqKmxpYnR1cmJvanBlZy5kbGwqKjxicj4KK0RMTCBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKKworKipsaWJ0dXJib2pwZWcuZGxsLmEqKjxicj4KK0ltcG9ydCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisqe3ZlcnNpb259KiBpcyA2MiwgNywgb3IgOCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGlianBlZyB2NmIgKGRlZmF1bHQpLCB2Nywgb3IKK3Y4IGVtdWxhdGlvbiBpcyBlbmFibGVkLgorCisKKyMjIyBEZWJ1ZyBCdWlsZAorCitBZGQgYC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1Z2AgdG8gdGhlIENNYWtlIGNvbW1hbmQgbGluZS4gIE9yLCBpZiBidWlsZGluZword2l0aCBOTWFrZSwgcmVtb3ZlIGAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZWAgKERlYnVnIGJ1aWxkcyBhcmUgdGhlIGRlZmF1bHQKK3dpdGggTk1ha2UuKQorCisKKyMjIyBsaWJqcGVnIHY3IG9yIHY4IEFQSS9BQkkgRW11bGF0aW9uCisKK0FkZCBgLURXSVRIX0pQRUc3PTFgIHRvIHRoZSBDTWFrZSBjb21tYW5kIGxpbmUgdG8gYnVpbGQgYSB2ZXJzaW9uIG9mCitsaWJqcGVnLXR1cmJvIHRoYXQgaXMgQVBJL0FCSS1jb21wYXRpYmxlIHdpdGggbGlianBlZyB2Ny4gIEFkZCBgLURXSVRIX0pQRUc4PTFgCit0byB0aGUgQ01ha2UgY29tbWFuZCBsaW5lIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvIHRoYXQgaXMKK0FQSS9BQkktY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjguICBTZWUgW1JFQURNRS5tZF0oUkVBRE1FLm1kKSBmb3IgbW9yZQoraW5mb3JtYXRpb24gYWJvdXQgbGlianBlZyB2NyBhbmQgdjggZW11bGF0aW9uLgorCisKKyMjIyBJbi1NZW1vcnkgU291cmNlL0Rlc3RpbmF0aW9uIE1hbmFnZXJzCisKK1doZW4gdXNpbmcgbGlianBlZyB2NmIgb3IgdjcgQVBJL0FCSSBlbXVsYXRpb24sIGFkZCBgLURXSVRIX01FTV9TUkNEU1Q9MGAgdG8KK3RoZSBDTWFrZSBjb21tYW5kIGxpbmUgdG8gYnVpbGQgYSB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8gdGhhdCBsYWNrcyB0aGUKK2BqcGVnX21lbV9zcmMoKWAgYW5kIGBqcGVnX21lbV9kZXN0KClgIGZ1bmN0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucyB3ZXJlIG5vdAorcGFydCBvZiB0aGUgb3JpZ2luYWwgbGlianBlZyB2NmIgYW5kIHY3IEFQSXMsIHNvIHJlbW92aW5nIHRoZW0gZW5zdXJlcyBzdHJpY3QKK2NvbmZvcm1hbmNlIHdpdGggdGhvc2UgQVBJcy4gIFNlZSBbUkVBRE1FLm1kXShSRUFETUUubWQpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKyMjIyBBcml0aG1ldGljIENvZGluZyBTdXBwb3J0CisKK1NpbmNlIHRoZSBwYXRlbnQgb24gYXJpdGhtZXRpYyBjb2RpbmcgaGFzIGV4cGlyZWQsIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbgoraW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlIG9mIGxpYmpwZWctdHVyYm8uICBsaWJqcGVnLXR1cmJvJ3MgaW1wbGVtZW50YXRpb24gaXMKK2Jhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJqcGVnIHY4LCBidXQgaXQgd29ya3Mgd2hlbiBlbXVsYXRpbmcgbGlianBlZwordjcgb3IgdjZiIGFzIHdlbGwuICBUaGUgZGVmYXVsdCBpcyB0byBlbmFibGUgYm90aCBhcml0aG1ldGljIGVuY29kaW5nIGFuZAorZGVjb2RpbmcsIGJ1dCB0aG9zZSB3aG8gaGF2ZSBwaGlsb3NvcGhpY2FsIG9iamVjdGlvbnMgdG8gYXJpdGhtZXRpYyBjb2RpbmcgY2FuCithZGQgYC1EV0lUSF9BUklUSF9FTkM9MGAgb3IgYC1EV0lUSF9BUklUSF9ERUM9MGAgdG8gdGhlIENNYWtlIGNvbW1hbmQgbGluZSB0bworZGlzYWJsZSBlbmNvZGluZyBvciBkZWNvZGluZyAocmVzcGVjdGl2ZWx5LikKKworCisjIyMgVHVyYm9KUEVHIEphdmEgV3JhcHBlcgorCitBZGQgYC1EV0lUSF9KQVZBPTFgIHRvIHRoZSBDTWFrZSBjb21tYW5kIGxpbmUgdG8gaW5jb3Jwb3JhdGUgYW4gb3B0aW9uYWwgSmF2YQorTmF0aXZlIEludGVyZmFjZSAoSk5JKSB3cmFwcGVyIGludG8gdGhlIFR1cmJvSlBFRyBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlCitKYXZhIGZyb250LWVuZCBjbGFzc2VzIHRvIHN1cHBvcnQgaXQuICBUaGlzIGFsbG93cyB0aGUgVHVyYm9KUEVHIHNoYXJlZCBsaWJyYXJ5Cit0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20gSmF2YSBhcHBsaWNhdGlvbnMuICBTZWUgW2phdmEvUkVBRE1FXShqYXZhL1JFQURNRSkgZm9yCittb3JlIGRldGFpbHMuCisKK0lmIEphdmEgaXMgbm90IGluIHlvdXIgYFBBVEhgLCBvciBpZiB5b3Ugd2lzaCB0byB1c2UgYW4gYWx0ZXJuYXRlIEpESyB0bworYnVpbGQvdGVzdCBsaWJqcGVnLXR1cmJvLCB0aGVuIChwcmlvciB0byBydW5uaW5nIENNYWtlKSBzZXQgdGhlIGBKQVZBX0hPTUVgCitlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIEpESyB0aGF0IHlvdSB3aXNoIHRvIHVzZS4gIFRoZQorYEphdmFfSkFWQUNfRVhFQ1VUQUJMRWAsIGBKYXZhX0pBVkFfRVhFQ1VUQUJMRWAsIGFuZCBgSmF2YV9KQVJfRVhFQ1VUQUJMRWAKK0NNYWtlIHZhcmlhYmxlcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHNwZWNpZnkgYWx0ZXJuYXRlIGNvbW1hbmRzIG9yIGxvY2F0aW9ucyBmb3IKK2phdmFjLCBqYXIsIGFuZCBqYXZhIChyZXNwZWN0aXZlbHkuKSAgWW91IGNhbiBhbHNvIHNldCB0aGUKK2BDTUFLRV9KQVZBX0NPTVBJTEVfRkxBR1NgIENNYWtlIHZhcmlhYmxlIG9yIHRoZSBgSkFWQUZMQUdTYCBlbnZpcm9ubWVudAordmFyaWFibGUgdG8gc3BlY2lmeSBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBKYXZhIGNvbXBpbGVyIHdoZW4KK2J1aWxkaW5nIHRoZSBUdXJib0pQRUcgY2xhc3NlcywgYW5kIHRoZSBgSkFWQUFSR1NgIENNYWtlIHZhcmlhYmxlIHRvIHNwZWNpZnkKK2FyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIEpSRSB3aGVuIHJ1bm5pbmcgdGhlIFR1cmJvSlBFRyBKYXZhIHVuaXQKK3Rlc3RzLgorCisKK0J1aWxkIFJlY2lwZXMKKy0tLS0tLS0tLS0tLS0KKworCisjIyMgMzItYml0IEJ1aWxkIG9uIDY0LWJpdCBMaW51eC9Vbml4L01hYworCitVc2UgZXhwb3J0L3NldGVudiB0byBzZXQgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYmVmb3JlIHJ1bm5pbmcKK0NNYWtlOgorCisgICAgQ0ZMQUdTPS1tMzIKKyAgICBMREZMQUdTPS1tMzIKKworCisjIyMgNjQtYml0IEJ1aWxkIG9uIFNvbGFyaXMKKworVXNlIGV4cG9ydC9zZXRlbnYgdG8gc2V0IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSBydW5uaW5nCitDTWFrZToKKworICAgIENGTEFHUz0tbTY0CisgICAgTERGTEFHUz0tbTY0CisKKworIyMjIE90aGVyIENvbXBpbGVycworCitPbiBVbip4IHN5c3RlbXMsIHByaW9yIHRvIHJ1bm5pbmcgQ01ha2UsIHlvdSBjYW4gc2V0IHRoZSBgQ0NgIGVudmlyb25tZW50Cit2YXJpYWJsZSB0byB0aGUgY29tbWFuZCB1c2VkIHRvIGludm9rZSB0aGUgQyBjb21waWxlci4KKworCisjIyMgMzItYml0IE1pbkdXIEJ1aWxkIG9uIFVuKnggKGluY2x1ZGluZyBNYWMgYW5kIEN5Z3dpbikKKworQ3JlYXRlIGEgZmlsZSBjYWxsZWQgKip0b29sY2hhaW4uY21ha2UqKiB1bmRlciAqe2J1aWxkX2RpcmVjdG9yeX0qLCB3aXRoIHRoZQorZm9sbG93aW5nIGNvbnRlbnRzOgorCisgICAgc2V0KENNQUtFX1NZU1RFTV9OQU1FIFdpbmRvd3MpCisgICAgc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgWDg2KQorICAgIHNldChDTUFLRV9DX0NPTVBJTEVSIHttaW5nd19iaW5hcnlfcGF0aH0vaTY4Ni13NjQtbWluZ3czMi1nY2MpCisgICAgc2V0KENNQUtFX1JDX0NPTVBJTEVSIHttaW5nd19iaW5hcnlfcGF0aH0vaTY4Ni13NjQtbWluZ3czMi13aW5kcmVzKQorCisqe21pbmd3XF9iaW5hcnlcX3BhdGh9KiBpcyB0aGUgZGlyZWN0b3J5IHVuZGVyIHdoaWNoIHRoZSBNaW5HVyBiaW5hcmllcyBhcmUKK2xvY2F0ZWQgKHVzdWFsbHkgKiovdXNyL2JpbioqLikgIE5leHQsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworICAgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgICAgY21ha2UgLUciVW5peCBNYWtlZmlsZXMiIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9dG9vbGNoYWluLmNtYWtlIFwKKyAgICAgIFthZGRpdGlvbmFsIENNYWtlIGZsYWdzXSB7c291cmNlX2RpcmVjdG9yeX0KKyAgICBtYWtlCisKKworIyMjIDY0LWJpdCBNaW5HVyBCdWlsZCBvbiBVbip4IChpbmNsdWRpbmcgTWFjIGFuZCBDeWd3aW4pCisKK0NyZWF0ZSBhIGZpbGUgY2FsbGVkICoqdG9vbGNoYWluLmNtYWtlKiogdW5kZXIgKntidWlsZF9kaXJlY3Rvcnl9Kiwgd2l0aCB0aGUKK2ZvbGxvd2luZyBjb250ZW50czoKKworICAgIHNldChDTUFLRV9TWVNURU1fTkFNRSBXaW5kb3dzKQorICAgIHNldChDTUFLRV9TWVNURU1fUFJPQ0VTU09SIEFNRDY0KQorICAgIHNldChDTUFLRV9DX0NPTVBJTEVSIHttaW5nd19iaW5hcnlfcGF0aH0veDg2XzY0LXc2NC1taW5ndzMyLWdjYykKKyAgICBzZXQoQ01BS0VfUkNfQ09NUElMRVIge21pbmd3X2JpbmFyeV9wYXRofS94ODZfNjQtdzY0LW1pbmd3MzItd2luZHJlcykKKworKnttaW5nd1xfYmluYXJ5XF9wYXRofSogaXMgdGhlIGRpcmVjdG9yeSB1bmRlciB3aGljaCB0aGUgTWluR1cgYmluYXJpZXMgYXJlCitsb2NhdGVkICh1c3VhbGx5ICoqL3Vzci9iaW4qKi4pICBOZXh0LCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIGNtYWtlIC1HIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPXRvb2xjaGFpbi5jbWFrZSBcCisgICAgICBbYWRkaXRpb25hbCBDTWFrZSBmbGFnc10ge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgbWFrZQorCisKK0J1aWxkaW5nIGxpYmpwZWctdHVyYm8gZm9yIGlPUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lPUyBwbGF0Zm9ybXMsIHN1Y2ggYXMgdGhlIGlQaG9uZSBhbmQgaVBhZCwgdXNlIEFSTSBwcm9jZXNzb3JzLCBhbmQgYWxsCitjdXJyZW50bHkgc3VwcG9ydGVkIG1vZGVscyBpbmNsdWRlIE5FT04gaW5zdHJ1Y3Rpb25zLiAgVGh1cywgdGhleSBjYW4gdGFrZQorYWR2YW50YWdlIG9mIGxpYmpwZWctdHVyYm8ncyBTSU1EIGV4dGVuc2lvbnMgdG8gc2lnbmlmaWNhbnRseSBhY2NlbGVyYXRlIEpQRUcKK2NvbXByZXNzaW9uL2RlY29tcHJlc3Npb24uICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBidWlsZCBsaWJqcGVnLXR1cmJvCitmb3IgdGhlc2UgcGxhdGZvcm1zLgorCisKKyMjIyBBZGRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cworCistIEZvciBjb25maWd1cmF0aW9ucyB0aGF0IHJlcXVpcmUgW2dhcy1wcmVwcm9jZXNzb3IucGxdCisgIChodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbGlianBlZy10dXJiby9nYXMtcHJlcHJvY2Vzc29yL21hc3Rlci9nYXMtcHJlcHJvY2Vzc29yLnBsKSwKKyAgaXQgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiB5b3VyIGBQQVRIYC4KKworCisjIyMgQVJNdjcgKDMyLWJpdCkKKworKipnYXMtcHJlcHJvY2Vzc29yLnBsIHJlcXVpcmVkKioKKworVGhlIGZvbGxvd2luZyBzY3JpcHRzIGRlbW9uc3RyYXRlIGhvdyB0byBidWlsZCBsaWJqcGVnLXR1cmJvIHRvIHJ1biBvbiB0aGUKK2lQaG9uZSAzR1MtNFMvaVBhZCAxc3QtM3JkIEdlbmVyYXRpb24gYW5kIG5ld2VyOgorCisjIyMjIFhjb2RlIDQuMiBhbmQgZWFybGllciAoTExWTS1HQ0MpCisKKyAgICBJT1NfUExBVEZPUk1ESVI9L0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0KKyAgICBJT1NfU1lTUk9PVD0oJElPU19QTEFURk9STURJUi9EZXZlbG9wZXIvU0RLcy9pUGhvbmVPUyouc2RrKQorICAgIGV4cG9ydCBDRkxBR1M9Ii1tZmxvYXQtYWJpPXNvZnRmcCAtbWFyY2g9YXJtdjcgLW1jcHU9Y29ydGV4LWE4IC1tdHVuZT1jb3J0ZXgtYTggLW1mcHU9bmVvbiAtbWlwaG9uZW9zLXZlcnNpb24tbWluPTMuMCIKKworICAgIGNhdCA8PEVPRiA+dG9vbGNoYWluLmNtYWtlCisgICAgc2V0KENNQUtFX1NZU1RFTV9OQU1FIERhcndpbikKKyAgICBzZXQoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBhcm0pCisgICAgc2V0KENNQUtFX0NfQ09NUElMRVIgJHtJT1NfUExBVEZPUk1ESVJ9L0RldmVsb3Blci91c3IvYmluL2FybS1hcHBsZS1kYXJ3aW4xMC1sbHZtLWdjYy00LjIpCisgICAgRU9GCisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIGNtYWtlIC1HIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPXRvb2xjaGFpbi5jbWFrZSBcCisgICAgICAtRENNQUtFX09TWF9TWVNST09UPSR7SU9TX1NZU1JPT1RbMF19IFwKKyAgICAgIFthZGRpdGlvbmFsIENNYWtlIGZsYWdzXSB7c291cmNlX2RpcmVjdG9yeX0KKyAgICBtYWtlCisKKyMjIyMgWGNvZGUgNC4zLTQuNiAoTExWTS1HQ0MpCisKK1NhbWUgYXMgYWJvdmUsIGJ1dCByZXBsYWNlIHRoZSBmaXJzdCBsaW5lIHdpdGg6CisKKyAgICBJT1NfUExBVEZPUk1ESVI9L0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9pUGhvbmVPUy5wbGF0Zm9ybQorCisjIyMjIFhjb2RlIDUgYW5kIGxhdGVyIChDbGFuZykKKworICAgIElPU19QTEFURk9STURJUj0vQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvUGxhdGZvcm1zL2lQaG9uZU9TLnBsYXRmb3JtCisgICAgSU9TX1NZU1JPT1Q9KCRJT1NfUExBVEZPUk1ESVIvRGV2ZWxvcGVyL1NES3MvaVBob25lT1MqLnNkaykKKyAgICBleHBvcnQgQ0ZMQUdTPSItbWZsb2F0LWFiaT1zb2Z0ZnAgLWFyY2ggYXJtdjcgLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj0zLjAiCisgICAgZXhwb3J0IEFTTUZMQUdTPSItbm8taW50ZWdyYXRlZC1hcyIKKworICAgIGNhdCA8PEVPRiA+dG9vbGNoYWluLmNtYWtlCisgICAgc2V0KENNQUtFX1NZU1RFTV9OQU1FIERhcndpbikKKyAgICBzZXQoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBhcm0pCisgICAgc2V0KENNQUtFX0NfQ09NUElMRVIgL0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1Rvb2xjaGFpbnMvWGNvZGVEZWZhdWx0LnhjdG9vbGNoYWluL3Vzci9iaW4vY2xhbmcpCisgICAgRU9GCisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIGNtYWtlIC1HIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPXRvb2xjaGFpbi5jbWFrZSBcCisgICAgICAtRENNQUtFX09TWF9TWVNST09UPSR7SU9TX1NZU1JPT1RbMF19IFwKKyAgICAgIFthZGRpdGlvbmFsIENNYWtlIGZsYWdzXSB7c291cmNlX2RpcmVjdG9yeX0KKyAgICBtYWtlCisKKworIyMjIEFSTXY3cyAoMzItYml0KQorCisqKmdhcy1wcmVwcm9jZXNzb3IucGwgcmVxdWlyZWQqKgorCitUaGUgZm9sbG93aW5nIHNjcmlwdHMgZGVtb25zdHJhdGUgaG93IHRvIGJ1aWxkIGxpYmpwZWctdHVyYm8gdG8gcnVuIG9uIHRoZQoraVBob25lIDUvaVBhZCA0dGggR2VuZXJhdGlvbiBhbmQgbmV3ZXI6CisKKyMjIyMgWGNvZGUgNC41LTQuNiAoTExWTS1HQ0MpCisKKyAgICBJT1NfUExBVEZPUk1ESVI9L0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9pUGhvbmVPUy5wbGF0Zm9ybQorICAgIElPU19TWVNST09UPSgkSU9TX1BMQVRGT1JNRElSL0RldmVsb3Blci9TREtzL2lQaG9uZU9TKi5zZGspCisgICAgZXhwb3J0IENGTEFHUz0iLVdhbGwgLW1mbG9hdC1hYmk9c29mdGZwIC1tYXJjaD1hcm12N3MgLW1jcHU9c3dpZnQgLW10dW5lPXN3aWZ0IC1tZnB1PW5lb24gLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj02LjAiCisKKyAgICBjYXQgPDxFT0YgPnRvb2xjaGFpbi5jbWFrZQorICAgIHNldChDTUFLRV9TWVNURU1fTkFNRSBEYXJ3aW4pCisgICAgc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgYXJtKQorICAgIHNldChDTUFLRV9DX0NPTVBJTEVSICR7SU9TX1BMQVRGT1JNRElSfS9EZXZlbG9wZXIvdXNyL2Jpbi9hcm0tYXBwbGUtZGFyd2luMTAtbGx2bS1nY2MtNC4yKQorICAgIEVPRgorCisgICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgICBjbWFrZSAtRyJVbml4IE1ha2VmaWxlcyIgLURDTUFLRV9UT09MQ0hBSU5fRklMRT10b29sY2hhaW4uY21ha2UgXAorICAgICAgLURDTUFLRV9PU1hfU1lTUk9PVD0ke0lPU19TWVNST09UWzBdfSBcCisgICAgICBbYWRkaXRpb25hbCBDTWFrZSBmbGFnc10ge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgbWFrZQorCisjIyMjIFhjb2RlIDUgYW5kIGxhdGVyIChDbGFuZykKKworU2FtZSBhcyB0aGUgQVJNdjcgYnVpbGQgcHJvY2VkdXJlIGZvciBYY29kZSA1IGFuZCBsYXRlciwgZXhjZXB0IHJlcGxhY2UgdGhlCitjb21waWxlciBmbGFncyBhcyBmb2xsb3dzOgorCisgICAgZXhwb3J0IENGTEFHUz0iLVdhbGwgLW1mbG9hdC1hYmk9c29mdGZwIC1hcmNoIGFybXY3cyAtbWlwaG9uZW9zLXZlcnNpb24tbWluPTYuMCIKKworCisjIyMgQVJNdjggKDY0LWJpdCkKKworKipnYXMtcHJlcHJvY2Vzc29yLnBsIHJlcXVpcmVkIGlmIHVzaW5nIFhjb2RlIDwgNioqCisKK1RoZSBmb2xsb3dpbmcgc2NyaXB0IGRlbW9uc3RyYXRlcyBob3cgdG8gYnVpbGQgbGlianBlZy10dXJibyB0byBydW4gb24gdGhlCitpUGhvbmUgNVMvaVBhZCBNaW5pIDIvaVBhZCBBaXIgYW5kIG5ld2VyLgorCisgICAgSU9TX1BMQVRGT1JNRElSPS9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0KKyAgICBJT1NfU1lTUk9PVD0oJElPU19QTEFURk9STURJUi9EZXZlbG9wZXIvU0RLcy9pUGhvbmVPUyouc2RrKQorICAgIGV4cG9ydCBDRkxBR1M9Ii1XYWxsIC1hcmNoIGFybTY0IC1taXBob25lb3MtdmVyc2lvbi1taW49Ny4wIC1mdW53aW5kLXRhYmxlcyIKKworICAgIGNhdCA8PEVPRiA+dG9vbGNoYWluLmNtYWtlCisgICAgc2V0KENNQUtFX1NZU1RFTV9OQU1FIERhcndpbikKKyAgICBzZXQoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBhYXJjaDY0KQorICAgIHNldChDTUFLRV9DX0NPTVBJTEVSIC9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9Ub29sY2hhaW5zL1hjb2RlRGVmYXVsdC54Y3Rvb2xjaGFpbi91c3IvYmluL2NsYW5nKQorICAgIEVPRgorCisgICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgICBjbWFrZSAtRyJVbml4IE1ha2VmaWxlcyIgLURDTUFLRV9UT09MQ0hBSU5fRklMRT10b29sY2hhaW4uY21ha2UgXAorICAgICAgLURDTUFLRV9PU1hfU1lTUk9PVD0ke0lPU19TWVNST09UWzBdfSBcCisgICAgICBbYWRkaXRpb25hbCBDTWFrZSBmbGFnc10ge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgbWFrZQorCitPbmNlIGJ1aWx0LCBsaXBvIGNhbiBiZSB1c2VkIHRvIGNvbWJpbmUgdGhlIEFSTXY3LCB2N3MsIGFuZC9vciB2OCB2YXJpYW50cyBpbnRvCithIHVuaXZlcnNhbCBsaWJyYXJ5LgorCisKK0J1aWxkaW5nIGxpYmpwZWctdHVyYm8gZm9yIEFuZHJvaWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnVpbGRpbmcgbGlianBlZy10dXJibyBmb3IgQW5kcm9pZCBwbGF0Zm9ybXMgcmVxdWlyZXMgdGhlCitbQW5kcm9pZCBOREtdKGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Rvb2xzL3Nkay9uZGspLgorCisKKyMjIyBBUk12NyAoMzItYml0KQorCitUaGUgZm9sbG93aW5nIGlzIGEgZ2VuZXJhbCByZWNpcGUgc2NyaXB0IHRoYXQgY2FuIGJlIG1vZGlmaWVkIGZvciB5b3VyIHNwZWNpZmljCituZWVkcy4KKworICAgICMgU2V0IHRoZXNlIHZhcmlhYmxlcyB0byBzdWl0IHlvdXIgbmVlZHMKKyAgICBOREtfUEFUSD17ZnVsbCBwYXRoIHRvIHRoZSAibmRrIiBkaXJlY3RvcnktLSBmb3IgZXhhbXBsZSwgL29wdC9hbmRyb2lkL3Nkay9uZGstYnVuZGxlfQorICAgIEJVSUxEX1BMQVRGT1JNPXt0aGUgcGxhdGZvcm0gbmFtZSBmb3IgdGhlIE5ESyBwYWNrYWdlIHlvdSBpbnN0YWxsZWQtLQorICAgICAgZm9yIGV4YW1wbGUsICJ3aW5kb3dzLXg4NiIgb3IgImxpbnV4LXg4Nl82NCIgb3IgImRhcndpbi14ODZfNjQifQorICAgIFRPT0xDSEFJTl9WRVJTSU9OPXsiNC44IiwgIjQuOSIsICJjbGFuZzMuNSIsIGV0Yy4gIFRoaXMgY29ycmVzcG9uZHMgdG8gYQorICAgICAgdG9vbGNoYWluIGRpcmVjdG9yeSB1bmRlciAke05ES19QQVRIfS90b29sY2hhaW5zLy59CisgICAgQU5EUk9JRF9WRVJTSU9OPXtUaGUgbWluaW11bSB2ZXJzaW9uIG9mIEFuZHJvaWQgdG8gc3VwcG9ydC0tIGZvciBleGFtcGxlLAorICAgICAgIjE2IiwgIjE5IiwgZXRjLn0KKworICAgICMgSXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8gbW9kaWZ5IHRoZSByZXN0CisgICAgSE9TVD1hcm0tbGludXgtYW5kcm9pZGVhYmkKKyAgICBTWVNST09UPSR7TkRLX1BBVEh9L3BsYXRmb3Jtcy9hbmRyb2lkLSR7QU5EUk9JRF9WRVJTSU9OfS9hcmNoLWFybQorICAgIGV4cG9ydCBDRkxBR1M9Ii1tYXJjaD1hcm12Ny1hIC1tZmxvYXQtYWJpPXNvZnRmcCAtZnByZWZldGNoLWxvb3AtYXJyYXlzIFwKKyAgICAgIC1EX19BTkRST0lEX0FQSV9fPSR7QU5EUk9JRF9WRVJTSU9OfSAtLXN5c3Jvb3Q9JHtTWVNST09UfSBcCisgICAgICAtaXN5c3RlbSAke05ES19QQVRIfS9zeXNyb290L3Vzci9pbmNsdWRlIFwKKyAgICAgIC1pc3lzdGVtICR7TkRLX1BBVEh9L3N5c3Jvb3QvdXNyL2luY2x1ZGUvJHtIT1NUfSIKKyAgICBleHBvcnQgTERGTEFHUz0tcGllCisgICAgVE9PTENIQUlOPSR7TkRLX1BBVEh9L3Rvb2xjaGFpbnMvJHtIT1NUfS0ke1RPT0xDSEFJTl9WRVJTSU9OfS9wcmVidWlsdC8ke0JVSUxEX1BMQVRGT1JNfQorCisgICAgY2F0IDw8RU9GID50b29sY2hhaW4uY21ha2UKKyAgICBzZXQoQ01BS0VfU1lTVEVNX05BTUUgTGludXgpCisgICAgc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgYXJtKQorICAgIHNldChDTUFLRV9DX0NPTVBJTEVSICR7VE9PTENIQUlOfS9iaW4vJHtIT1NUfS1nY2MpCisgICAgc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIICR7VE9PTENIQUlOfS8ke0hPU1R9KQorICAgIEVPRgorCisgICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgICBjbWFrZSAtRyJVbml4IE1ha2VmaWxlcyIgLURDTUFLRV9UT09MQ0hBSU5fRklMRT10b29sY2hhaW4uY21ha2UgXAorICAgICAgLURDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFPTEgXAorICAgICAgW2FkZGl0aW9uYWwgQ01ha2UgZmxhZ3NdIHtzb3VyY2VfZGlyZWN0b3J5fQorICAgIG1ha2UKKworCisjIyMgQVJNdjggKDY0LWJpdCkKKworVGhlIGZvbGxvd2luZyBpcyBhIGdlbmVyYWwgcmVjaXBlIHNjcmlwdCB0aGF0IGNhbiBiZSBtb2RpZmllZCBmb3IgeW91ciBzcGVjaWZpYworbmVlZHMuCisKKyAgICAjIFNldCB0aGVzZSB2YXJpYWJsZXMgdG8gc3VpdCB5b3VyIG5lZWRzCisgICAgTkRLX1BBVEg9e2Z1bGwgcGF0aCB0byB0aGUgIm5kayIgZGlyZWN0b3J5LS0gZm9yIGV4YW1wbGUsIC9vcHQvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZX0KKyAgICBCVUlMRF9QTEFURk9STT17dGhlIHBsYXRmb3JtIG5hbWUgZm9yIHRoZSBOREsgcGFja2FnZSB5b3UgaW5zdGFsbGVkLS0KKyAgICAgIGZvciBleGFtcGxlLCAid2luZG93cy14ODYiIG9yICJsaW51eC14ODZfNjQiIG9yICJkYXJ3aW4teDg2XzY0In0KKyAgICBUT09MQ0hBSU5fVkVSU0lPTj17IjQuOCIsICI0LjkiLCAiY2xhbmczLjUiLCBldGMuICBUaGlzIGNvcnJlc3BvbmRzIHRvIGEKKyAgICAgIHRvb2xjaGFpbiBkaXJlY3RvcnkgdW5kZXIgJHtOREtfUEFUSH0vdG9vbGNoYWlucy8ufQorICAgIEFORFJPSURfVkVSU0lPTj17VGhlIG1pbmltdW0gdmVyc2lvbiBvZiBBbmRyb2lkIHRvIHN1cHBvcnQuICAiMjEiIG9yIGxhdGVyCisgICAgICBpcyByZXF1aXJlZCBmb3IgYSA2NC1iaXQgYnVpbGQufQorCisgICAgIyBJdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0byBtb2RpZnkgdGhlIHJlc3QKKyAgICBIT1NUPWFhcmNoNjQtbGludXgtYW5kcm9pZAorICAgIFNZU1JPT1Q9JHtOREtfUEFUSH0vcGxhdGZvcm1zL2FuZHJvaWQtJHtBTkRST0lEX1ZFUlNJT059L2FyY2gtYXJtNjQKKyAgICBleHBvcnQgQ0ZMQUdTPSItRF9fQU5EUk9JRF9BUElfXz0ke0FORFJPSURfVkVSU0lPTn0gLS1zeXNyb290PSR7U1lTUk9PVH0gXAorICAgICAgLWlzeXN0ZW0gJHtOREtfUEFUSH0vc3lzcm9vdC91c3IvaW5jbHVkZSBcCisgICAgICAtaXN5c3RlbSAke05ES19QQVRIfS9zeXNyb290L3Vzci9pbmNsdWRlLyR7SE9TVH0iCisgICAgZXhwb3J0IExERkxBR1M9LXBpZQorICAgIFRPT0xDSEFJTj0ke05ES19QQVRIfS90b29sY2hhaW5zLyR7SE9TVH0tJHtUT09MQ0hBSU5fVkVSU0lPTn0vcHJlYnVpbHQvJHtCVUlMRF9QTEFURk9STX0KKworICAgIGNhdCA8PEVPRiA+dG9vbGNoYWluLmNtYWtlCisgICAgc2V0KENNQUtFX1NZU1RFTV9OQU1FIExpbnV4KQorICAgIHNldChDTUFLRV9TWVNURU1fUFJPQ0VTU09SIGFhcmNoNjQpCisgICAgc2V0KENNQUtFX0NfQ09NUElMRVIgJHtUT09MQ0hBSU59L2Jpbi8ke0hPU1R9LWdjYykKKyAgICBzZXQoQ01BS0VfRklORF9ST09UX1BBVEggJHtUT09MQ0hBSU59LyR7SE9TVH0pCisgICAgRU9GCisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIGNtYWtlIC1HIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPXRvb2xjaGFpbi5jbWFrZSBcCisgICAgICAtRENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREU9MSBcCisgICAgICBbYWRkaXRpb25hbCBDTWFrZSBmbGFnc10ge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgbWFrZQorCisKKyMjIyB4ODYgKDMyLWJpdCkKKworVGhlIGZvbGxvd2luZyBpcyBhIGdlbmVyYWwgcmVjaXBlIHNjcmlwdCB0aGF0IGNhbiBiZSBtb2RpZmllZCBmb3IgeW91ciBzcGVjaWZpYworbmVlZHMuCisKKyAgICAjIFNldCB0aGVzZSB2YXJpYWJsZXMgdG8gc3VpdCB5b3VyIG5lZWRzCisgICAgTkRLX1BBVEg9e2Z1bGwgcGF0aCB0byB0aGUgIm5kayIgZGlyZWN0b3J5LS0gZm9yIGV4YW1wbGUsIC9vcHQvYW5kcm9pZC9zZGsvbmRrLWJ1bmRsZX0KKyAgICBCVUlMRF9QTEFURk9STT17dGhlIHBsYXRmb3JtIG5hbWUgZm9yIHRoZSBOREsgcGFja2FnZSB5b3UgaW5zdGFsbGVkLS0KKyAgICAgIGZvciBleGFtcGxlLCAid2luZG93cy14ODYiIG9yICJsaW51eC14ODZfNjQiIG9yICJkYXJ3aW4teDg2XzY0In0KKyAgICBUT09MQ0hBSU5fVkVSU0lPTj17IjQuOCIsICI0LjkiLCAiY2xhbmczLjUiLCBldGMuICBUaGlzIGNvcnJlc3BvbmRzIHRvIGEKKyAgICAgIHRvb2xjaGFpbiBkaXJlY3RvcnkgdW5kZXIgJHtOREtfUEFUSH0vdG9vbGNoYWlucy8ufQorICAgIEFORFJPSURfVkVSU0lPTj17VGhlIG1pbmltdW0gdmVyc2lvbiBvZiBBbmRyb2lkIHRvIHN1cHBvcnQtLSBmb3IgZXhhbXBsZSwKKyAgICAgICIxNiIsICIxOSIsIGV0Yy59CisKKyAgICAjIEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIG1vZGlmeSB0aGUgcmVzdAorICAgIEhPU1Q9aTY4Ni1saW51eC1hbmRyb2lkCisgICAgU1lTUk9PVD0ke05ES19QQVRIfS9wbGF0Zm9ybXMvYW5kcm9pZC0ke0FORFJPSURfVkVSU0lPTn0vYXJjaC14ODYKKyAgICBleHBvcnQgQ0ZMQUdTPSItRF9fQU5EUk9JRF9BUElfXz0ke0FORFJPSURfVkVSU0lPTn0gLS1zeXNyb290PSR7U1lTUk9PVH0gXAorICAgICAgLWlzeXN0ZW0gJHtOREtfUEFUSH0vc3lzcm9vdC91c3IvaW5jbHVkZSBcCisgICAgICAtaXN5c3RlbSAke05ES19QQVRIfS9zeXNyb290L3Vzci9pbmNsdWRlLyR7SE9TVH0iCisgICAgZXhwb3J0IExERkxBR1M9LXBpZQorICAgIFRPT0xDSEFJTj0ke05ES19QQVRIfS90b29sY2hhaW5zL3g4Ni0ke1RPT0xDSEFJTl9WRVJTSU9OfS9wcmVidWlsdC8ke0JVSUxEX1BMQVRGT1JNfQorCisgICAgY2F0IDw8RU9GID50b29sY2hhaW4uY21ha2UKKyAgICBzZXQoQ01BS0VfU1lTVEVNX05BTUUgTGludXgpCisgICAgc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgaTM4NikKKyAgICBzZXQoQ01BS0VfQ19DT01QSUxFUiAke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tZ2NjKQorICAgIHNldChDTUFLRV9GSU5EX1JPT1RfUEFUSCAke1RPT0xDSEFJTn0vJHtIT1NUfSkKKyAgICBFT0YKKworICAgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgICAgY21ha2UgLUciVW5peCBNYWtlZmlsZXMiIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9dG9vbGNoYWluLmNtYWtlIFwKKyAgICAgIC1EQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERT0xIFwKKyAgICAgIFthZGRpdGlvbmFsIENNYWtlIGZsYWdzXSB7c291cmNlX2RpcmVjdG9yeX0KKyAgICBtYWtlCisKKworIyMjIHg4Ni02NCAoNjQtYml0KQorCitUaGUgZm9sbG93aW5nIGlzIGEgZ2VuZXJhbCByZWNpcGUgc2NyaXB0IHRoYXQgY2FuIGJlIG1vZGlmaWVkIGZvciB5b3VyIHNwZWNpZmljCituZWVkcy4KKworICAgICMgU2V0IHRoZXNlIHZhcmlhYmxlcyB0byBzdWl0IHlvdXIgbmVlZHMKKyAgICBOREtfUEFUSD17ZnVsbCBwYXRoIHRvIHRoZSAibmRrIiBkaXJlY3RvcnktLSBmb3IgZXhhbXBsZSwgL29wdC9hbmRyb2lkL3Nkay9uZGstYnVuZGxlfQorICAgIEJVSUxEX1BMQVRGT1JNPXt0aGUgcGxhdGZvcm0gbmFtZSBmb3IgdGhlIE5ESyBwYWNrYWdlIHlvdSBpbnN0YWxsZWQtLQorICAgICAgZm9yIGV4YW1wbGUsICJ3aW5kb3dzLXg4NiIgb3IgImxpbnV4LXg4Nl82NCIgb3IgImRhcndpbi14ODZfNjQifQorICAgIFRPT0xDSEFJTl9WRVJTSU9OPXsiNC44IiwgIjQuOSIsICJjbGFuZzMuNSIsIGV0Yy4gIFRoaXMgY29ycmVzcG9uZHMgdG8gYQorICAgICAgdG9vbGNoYWluIGRpcmVjdG9yeSB1bmRlciAke05ES19QQVRIfS90b29sY2hhaW5zLy59CisgICAgQU5EUk9JRF9WRVJTSU9OPXtUaGUgbWluaW11bSB2ZXJzaW9uIG9mIEFuZHJvaWQgdG8gc3VwcG9ydC4gICIyMSIgb3IgbGF0ZXIKKyAgICAgIGlzIHJlcXVpcmVkIGZvciBhIDY0LWJpdCBidWlsZC59CisKKyAgICAjIEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIG1vZGlmeSB0aGUgcmVzdAorICAgIEhPU1Q9eDg2XzY0LWxpbnV4LWFuZHJvaWQKKyAgICBTWVNST09UPSR7TkRLX1BBVEh9L3BsYXRmb3Jtcy9hbmRyb2lkLSR7QU5EUk9JRF9WRVJTSU9OfS9hcmNoLXg4Nl82NAorICAgIGV4cG9ydCBDRkxBR1M9Ii1EX19BTkRST0lEX0FQSV9fPSR7QU5EUk9JRF9WRVJTSU9OfSAtLXN5c3Jvb3Q9JHtTWVNST09UfSBcCisgICAgICAtaXN5c3RlbSAke05ES19QQVRIfS9zeXNyb290L3Vzci9pbmNsdWRlIFwKKyAgICAgIC1pc3lzdGVtICR7TkRLX1BBVEh9L3N5c3Jvb3QvdXNyL2luY2x1ZGUvJHtIT1NUfSIKKyAgICBleHBvcnQgTERGTEFHUz0tcGllCisgICAgVE9PTENIQUlOPSR7TkRLX1BBVEh9L3Rvb2xjaGFpbnMveDg2XzY0LSR7VE9PTENIQUlOX1ZFUlNJT059L3ByZWJ1aWx0LyR7QlVJTERfUExBVEZPUk19CisKKyAgICBjYXQgPDxFT0YgPnRvb2xjaGFpbi5jbWFrZQorICAgIHNldChDTUFLRV9TWVNURU1fTkFNRSBMaW51eCkKKyAgICBzZXQoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiB4ODZfNjQpCisgICAgc2V0KENNQUtFX0NfQ09NUElMRVIgJHtUT09MQ0hBSU59L2Jpbi8ke0hPU1R9LWdjYykKKyAgICBzZXQoQ01BS0VfRklORF9ST09UX1BBVEggJHtUT09MQ0hBSU59LyR7SE9TVH0pCisgICAgRU9GCisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIGNtYWtlIC1HIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPXRvb2xjaGFpbi5jbWFrZSBcCisgICAgICAtRENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREU9MSBcCisgICAgICBbYWRkaXRpb25hbCBDTWFrZSBmbGFnc10ge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgbWFrZQorCisKK0lmIGJ1aWxkaW5nIGZvciBBbmRyb2lkIDQuMC54IChBUEkgbGV2ZWwgPCAxNikgb3IgZWFybGllciwgcmVtb3ZlCitgLURDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFPTFgIGZyb20gdGhlIENNYWtlIGFyZ3VtZW50cyBhbmQgYC1waWVgIGZyb20KK2BMREZMQUdTYC4KKworCitBZHZhbmNlZCBDTWFrZSBPcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGxpc3QgYW5kIGNvbmZpZ3VyZSBvdGhlciBDTWFrZSBvcHRpb25zIG5vdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHRoaXMKK2d1aWRlLCBydW4KKworICAgIGNjbWFrZSB7c291cmNlX2RpcmVjdG9yeX0KKworb3IKKworICAgIGNtYWtlLWd1aSB7c291cmNlX2RpcmVjdG9yeX0KKworZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IGFmdGVyIGluaXRpYWxseSBjb25maWd1cmluZyB0aGUgYnVpbGQuICBDQ01ha2UgaXMgYQordGV4dC1iYXNlZCBpbnRlcmFjdGl2ZSB2ZXJzaW9uIG9mIENNYWtlLCBhbmQgQ01ha2UtR1VJIGlzIGEgR1VJIHZlcnNpb24uICBCb3RoCit3aWxsIGRpc3BsYXkgYWxsIHZhcmlhYmxlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgbGlianBlZy10dXJibyBidWlsZCwgdGhlaXIKK2N1cnJlbnQgdmFsdWVzLCBhbmQgYSBoZWxwIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgdGhleSBkby4KKworCitJbnN0YWxsaW5nIGxpYmpwZWctdHVyYm8KKz09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGluc3RhbGwgbGlianBlZy10dXJibyAoYXMgb3Bwb3NlZCB0byBjcmVhdGluZworYW4gaW5zdGFsbGVyIHBhY2thZ2UuKSAgVG8gZG8gdGhpcywgcnVuIGBtYWtlIGluc3RhbGxgIG9yIGBubWFrZSBpbnN0YWxsYAorKG9yIGJ1aWxkIHRoZSAiaW5zdGFsbCIgdGFyZ2V0IGluIHRoZSBWaXN1YWwgU3R1ZGlvIElERS4pICBSdW5uaW5nCitgbWFrZSB1bmluc3RhbGxgIG9yIGBubWFrZSB1bmluc3RhbGxgIChvciBidWlsZGluZyB0aGUgInVuaW5zdGFsbCIgdGFyZ2V0IGluCit0aGUgVmlzdWFsIFN0dWRpbyBJREUpIHdpbGwgdW5pbnN0YWxsIGxpYmpwZWctdHVyYm8uCisKK1RoZSBgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIENNYWtlIHZhcmlhYmxlIGNhbiBiZSBtb2RpZmllZCBpbiBvcmRlciB0byBpbnN0YWxsCitsaWJqcGVnLXR1cmJvIGludG8gYSBkaXJlY3Rvcnkgb2YgeW91ciBjaG9vc2luZy4gIElmIHlvdSBkb24ndCBzcGVjaWZ5CitgQ01BS0VfSU5TVEFMTF9QUkVGSVhgLCB0aGVuIHRoZSBkZWZhdWx0IGlzOgorCisqKmM6XGxpYmpwZWctdHVyYm8qKjxicj4KK1Zpc3VhbCBTdHVkaW8gMzItYml0IGJ1aWxkCisKKyoqYzpcbGlianBlZy10dXJibzY0Kio8YnI+CitWaXN1YWwgU3R1ZGlvIDY0LWJpdCBidWlsZAorCisqKmM6XGxpYmpwZWctdHVyYm8tZ2NjKio8YnI+CitNaW5HVyAzMi1iaXQgYnVpbGQKKworKipjOlxsaWJqcGVnLXR1cmJvLWdjYzY0Kio8YnI+CitNaW5HVyA2NC1iaXQgYnVpbGQKKworKiovb3B0L2xpYmpwZWctdHVyYm8qKjxicj4KK1VuKngKKworVGhlIGRlZmF1bHQgdmFsdWUgb2YgYENNQUtFX0lOU1RBTExfUFJFRklYYCBjYXVzZXMgdGhlIGxpYmpwZWctdHVyYm8gZmlsZXMgdG8KK2JlIGluc3RhbGxlZCB3aXRoIGEgZGlyZWN0b3J5IHN0cnVjdHVyZSByZXNlbWJsaW5nIHRoYXQgb2YgdGhlIG9mZmljaWFsCitsaWJqcGVnLXR1cmJvIGJpbmFyeSBwYWNrYWdlcy4gIENoYW5naW5nIHRoZSB2YWx1ZSBvZiBgQ01BS0VfSU5TVEFMTF9QUkVGSVhgCisoZm9yIGluc3RhbmNlLCB0byAqKi91c3IvbG9jYWwqKikgY2F1c2VzIHRoZSBsaWJqcGVnLXR1cmJvIGZpbGVzIHRvIGJlCitpbnN0YWxsZWQgd2l0aCBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBjb25mb3JtcyB0byBHTlUgc3RhbmRhcmRzLgorCitUaGUgYENNQUtFX0lOU1RBTExfQklORElSYCwgYENNQUtFX0lOU1RBTExfREFUQVJPT1RESVJgLAorYENNQUtFX0lOU1RBTExfRE9DRElSYCwgYENNQUtFX0lOU1RBTExfSU5DTFVERURJUmAsIGBDTUFLRV9JTlNUQUxMX0pBVkFESVJgLAorYENNQUtFX0lOU1RBTExfTElCRElSYCwgYW5kIGBDTUFLRV9JTlNUQUxMX01BTkRJUmAgQ01ha2UgdmFyaWFibGVzIGFsbG93IGEKK2ZpbmVyIGRlZ3JlZSBvZiBjb250cm9sIG92ZXIgd2hlcmUgc3BlY2lmaWMgZmlsZXMgaW4gdGhlIGxpYmpwZWctdHVyYm8KK2Rpc3RyaWJ1dGlvbiBzaG91bGQgYmUgaW5zdGFsbGVkLiAgVGhlc2UgZGlyZWN0b3J5IHZhcmlhYmxlcyBjYW4gZWl0aGVyIGJlCitzcGVjaWZpZWQgYXMgYWJzb2x1dGUgcGF0aHMgb3IgYXMgcGF0aHMgcmVsYXRpdmUgdG8gYENNQUtFX0lOU1RBTExfUFJFRklYYCAoZm9yCitpbnN0YW5jZSwgc2V0dGluZyBgQ01BS0VfSU5TVEFMTF9ET0NESVJgIHRvICoqZG9jKiogd291bGQgY2F1c2UgdGhlCitkb2N1bWVudGF0aW9uIHRvIGJlIGluc3RhbGxlZCBpbiAqKiR7Q01BS0VcX0lOU1RBTExcX1BSRUZJWH0vZG9jKiouKSAgSWYgYQorZGlyZWN0b3J5IHZhcmlhYmxlIGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFub3RoZXIgZGlyZWN0b3J5IHZhcmlhYmxlIGluIGFuZ2xlCiticmFja2V0cywgdGhlbiBpdHMgZmluYWwgdmFsdWUgd2lsbCBkZXBlbmQgb24gdGhlIGZpbmFsIHZhbHVlIG9mIHRoYXQgb3RoZXIKK3ZhcmlhYmxlLiAgRm9yIGluc3RhbmNlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgQ01BS0VfSU5TVEFMTF9NQU5ESVJgIGlzCisqKlw8Q01BS0VcX0lOU1RBTExcX0RBVEFST09URElSXD4vbWFuKiouCisKK05PVEU6IElmIHNldHRpbmcgb25lIG9mIHRoZXNlIGRpcmVjdG9yeSB2YXJpYWJsZXMgdG8gYSByZWxhdGl2ZSBwYXRoIHVzaW5nIHRoZQorQ01ha2UgY29tbWFuZCBsaW5lLCB5b3UgbXVzdCBzcGVjaWZ5IHRoYXQgdGhlIHZhcmlhYmxlIGlzIG9mIHR5cGUgYFBBVEhgLgorRm9yIGV4YW1wbGU6CisKKyAgICBjbWFrZSAtRyJ7Z2VuZXJhdG9yIHR5cGV9IiAtRENNQUtFX0lOU1RBTExfTElCRElSOlBBVEg9bGliIHtzb3VyY2VfZGlyZWN0b3J5fQorCitPdGhlcndpc2UsIENNYWtlIHdpbGwgYXNzdW1lIHRoYXQgdGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeQorcmF0aGVyIHRoYW4gdGhlIGluc3RhbGwgZGlyZWN0b3J5LgorCisKK0NyZWF0aW5nIERpc3RyaWJ1dGlvbiBQYWNrYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHZhcmlvdXMgdHlwZXMgb2YgZGlzdHJpYnV0aW9uCitwYWNrYWdlczoKKworCitMaW51eAorLS0tLS0KKworICAgIG1ha2UgcnBtCisKK0NyZWF0ZSBSZWQgSGF0LXN0eWxlIGJpbmFyeSBSUE0gcGFja2FnZS4gIFJlcXVpcmVzIFJQTSB2NCBvciBsYXRlci4KKworICAgIG1ha2Ugc3JwbQorCitUaGlzIHJ1bnMgYG1ha2UgZGlzdGAgdG8gY3JlYXRlIGEgcHJpc3RpbmUgc291cmNlIHRhcmJhbGwsIHRoZW4gY3JlYXRlcyBhCitSZWQgSGF0LXN0eWxlIHNvdXJjZSBSUE0gcGFja2FnZSBmcm9tIHRoZSB0YXJiYWxsLiAgUmVxdWlyZXMgUlBNIHY0IG9yIGxhdGVyLgorCisgICAgbWFrZSBkZWIKKworQ3JlYXRlIERlYmlhbi1zdHlsZSBiaW5hcnkgcGFja2FnZS4gIFJlcXVpcmVzIGRwa2cuCisKKworTWFjCistLS0KKworICAgIG1ha2UgZG1nCisKK0NyZWF0ZSBNYWMgcGFja2FnZS9kaXNrIGltYWdlLiAgVGhpcyByZXF1aXJlcyBwa2didWlsZCBhbmQgcHJvZHVjdGJ1aWxkLCB3aGljaAorYXJlIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIE9TIFggMTAuNyBhbmQgbGF0ZXIgYW5kIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBieQoraW5zdGFsbGluZyBYY29kZSAzLjIuNiAod2l0aCB0aGUgIlVuaXggRGV2ZWxvcG1lbnQiIG9wdGlvbikgb24gT1MgWCAxMC42LgorUGFja2FnZXMgYnVpbHQgaW4gdGhpcyBtYW5uZXIgY2FuIGJlIGluc3RhbGxlZCBvbiBPUyBYIDEwLjUgYW5kIGxhdGVyLCBidXQgdGhleQorbXVzdCBiZSBidWlsdCBvbiBPUyBYIDEwLjYgb3IgbGF0ZXIuCisKKyAgICBtYWtlIHVkbWcKKworVGhpcyBjcmVhdGVzIGEgTWFjIHBhY2thZ2UvZGlzayBpbWFnZSB0aGF0IGNvbnRhaW5zIHVuaXZlcnNhbCB4ODYtNjQvaTM4Ni9BUk0KK2JpbmFyaWVzLiAgVGhlIGZvbGxvd2luZyBDTWFrZSB2YXJpYWJsZXMgY29udHJvbCB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZQoraW5jbHVkZWQgaW4gdGhlIHVuaXZlcnNhbCBiaW5hcmllcy4gIFNldHRpbmcgYW55IG9mIHRoZXNlIHZhcmlhYmxlcyB0byBhbiBlbXB0eQorc3RyaW5nIGV4Y2x1ZGVzIHRoYXQgYXJjaGl0ZWN0dXJlIGZyb20gdGhlIHBhY2thZ2UuCisKKyogYE9TWF8zMkJJVF9CVUlMRGA6IERpcmVjdG9yeSBjb250YWluaW5nIGFuIGkzODYgKDMyLWJpdCkgTWFjIGJ1aWxkIG9mCisgIGxpYmpwZWctdHVyYm8gKGRlZmF1bHQ6ICp7c291cmNlX2RpcmVjdG9yeX0qL29zeHg4NikKKyogYElPU19BUk1WN19CVUlMRGA6IERpcmVjdG9yeSBjb250YWluaW5nIGFuIEFSTXY3ICgzMi1iaXQpIGlPUyBidWlsZCBvZgorICBsaWJqcGVnLXR1cmJvIChkZWZhdWx0OiAqe3NvdXJjZV9kaXJlY3Rvcnl9Ki9pb3Nhcm12NykKKyogYElPU19BUk1WN1NfQlVJTERgOiBEaXJlY3RvcnkgY29udGFpbmluZyBhbiBBUk12N3MgKDMyLWJpdCkgaU9TIGJ1aWxkIG9mCisgIGxpYmpwZWctdHVyYm8gKGRlZmF1bHQ6ICp7c291cmNlX2RpcmVjdG9yeX0qL2lvc2FybXY3cykKKyogYElPU19BUk1WOF9CVUlMRGA6IERpcmVjdG9yeSBjb250YWluaW5nIGFuIEFSTXY4ICg2NC1iaXQpIGlPUyBidWlsZCBvZgorICBsaWJqcGVnLXR1cmJvIChkZWZhdWx0OiAqe3NvdXJjZV9kaXJlY3Rvcnl9Ki9pb3Nhcm12OCkKKworWW91IHNob3VsZCBmaXJzdCB1c2UgQ01ha2UgdG8gY29uZmlndXJlIGkzODYsIEFSTXY3LCBBUk12N3MsIGFuZC9vciBBUk12OAorc3ViLWJ1aWxkcyBvZiBsaWJqcGVnLXR1cmJvIChzZWUgIkJ1aWxkIFJlY2lwZXMiIGFuZCAiQnVpbGRpbmcgbGlianBlZy10dXJibworZm9yIGlPUyIgYWJvdmUpIGluIGJ1aWxkIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2ggdGhvc2Ugc3BlY2lmaWVkIGluIHRoZQorYWZvcmVtZW50aW9uZWQgQ01ha2UgdmFyaWFibGVzLiAgTmV4dCwgY29uZmlndXJlIHRoZSBwcmltYXJ5IGJ1aWxkIG9mCitsaWJqcGVnLXR1cmJvIGFzIGFuIG91dC1vZi10cmVlIGJ1aWxkLCBhbmQgYnVpbGQgaXQuICBPbmNlIHRoZSBwcmltYXJ5IGJ1aWxkCitoYXMgYmVlbiBidWlsdCwgcnVuIGBtYWtlIHVkbWdgIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gIFRoZSBwYWNrYWdpbmcgc3lzdGVtCit3aWxsIGJ1aWxkIHRoZSBzdWItYnVpbGRzLCB1c2UgbGlwbyB0byBjb21iaW5lIHRoZW0gaW50byBhIHNpbmdsZSBzZXQgb2YKK3VuaXZlcnNhbCBiaW5hcmllcywgdGhlbiBwYWNrYWdlIHRoZSB1bml2ZXJzYWwgYmluYXJpZXMgaW4gdGhlIHNhbWUgbWFubmVyIGFzCitgbWFrZSBkbWdgLgorCisKK0N5Z3dpbgorLS0tLS0tCisKKyAgICBtYWtlIGN5Z3dpbnBrZworCitCdWlsZCBhIEN5Z3dpbiBiaW5hcnkgcGFja2FnZS4KKworCitXaW5kb3dzCistLS0tLS0tCisKK0lmIHVzaW5nIE5NYWtlOgorCisgICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgICBubWFrZSBpbnN0YWxsZXIKKworSWYgdXNpbmcgTWluR1c6CisKKyAgICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICAgIG1ha2UgaW5zdGFsbGVyCisKK0lmIHVzaW5nIHRoZSBWaXN1YWwgU3R1ZGlvIElERSwgYnVpbGQgdGhlICJpbnN0YWxsZXIiIHRhcmdldC4KKworVGhlIGluc3RhbGxlciBwYWNrYWdlIChsaWJqcGVnLXR1cmJvLSp7dmVyc2lvbn0qWy1nY2N8LXZjXVs2NF0uZXhlKSB3aWxsIGJlCitsb2NhdGVkIHVuZGVyICp7YnVpbGRfZGlyZWN0b3J5fSouICBJZiBidWlsZGluZyB1c2luZyB0aGUgVmlzdWFsIFN0dWRpbyBJREUsCit0aGVuIHRoZSBpbnN0YWxsZXIgcGFja2FnZSB3aWxsIGJlIGxvY2F0ZWQgaW4gYSBzdWJkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBuYW1lCithcyB0aGUgY29uZmlndXJhdGlvbiB5b3UgYnVpbHQgKHN1Y2ggYXMgKntidWlsZF9kaXJlY3Rvcnl9KlxEZWJ1Z1wgb3IKKyp7YnVpbGRfZGlyZWN0b3J5fSpcUmVsZWFzZVwpLgorCitCdWlsZGluZyBhIFdpbmRvd3MgaW5zdGFsbGVyIHJlcXVpcmVzIHRoZQorW051bGxzb2Z0IEluc3RhbGwgU3lzdGVtXShodHRwOi8vbnNpcy5zb3VyY2Vmb3JnZS5uZXQvKS4gIG1ha2Vuc2lzLmV4ZSBzaG91bGQKK2JlIGluIHlvdXIgYFBBVEhgLgorCisKK1JlZ3Jlc3Npb24gdGVzdGluZworPT09PT09PT09PT09PT09PT09CisKK1RoZSBtb3N0IGNvbW1vbiB3YXkgdG8gdGVzdCBsaWJqcGVnLXR1cmJvIGlzIGJ5IGludm9raW5nIGBtYWtlIHRlc3RgIChVbip4KSBvcgorYG5tYWtlIHRlc3RgIChXaW5kb3dzIGNvbW1hbmQgbGluZSkgb3IgYnkgYnVpbGRpbmcgdGhlICJSVU5fVEVTVFMiIHRhcmdldAorKFZpc3VhbCBTdHVkaW8gSURFKSwgb25jZSB0aGUgYnVpbGQgaGFzIGNvbXBsZXRlZC4gIFRoaXMgcnVucyBhIHNlcmllcyBvZiB0ZXN0cwordG8gZW5zdXJlIHRoYXQgbWF0aGVtYXRpY2FsIGNvbXBhdGliaWxpdHkgaGFzIGJlZW4gbWFpbnRhaW5lZCBiZXR3ZWVuCitsaWJqcGVnLXR1cmJvIGFuZCBsaWJqcGVnIHY2Yi4gIFRoaXMgYWxzbyBpbnZva2VzIHRoZSBUdXJib0pQRUcgdW5pdCB0ZXN0cywKK3doaWNoIGVuc3VyZSB0aGF0IHRoZSBjb2xvcnNwYWNlIGV4dGVuc2lvbnMsIFlVViBlbmNvZGluZywgZGVjb21wcmVzc2lvbgorc2NhbGluZywgYW5kIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBUdXJib0pQRUcgQyBhbmQgSmF2YSBBUElzIGFyZSB3b3JraW5nCitwcm9wZXJseSAoYW5kLCBieSBleHRlbnNpb24sIHRoYXQgdGhlIGVxdWl2YWxlbnQgZmVhdHVyZXMgb2YgdGhlIHVuZGVybHlpbmcKK2xpYmpwZWcgQVBJIGFyZSBhbHNvIHdvcmtpbmcuKQorCitJbnZva2luZyBgbWFrZSB0ZXN0Y2xlYW5gIChVbip4KSBvciBgbm1ha2UgdGVzdGNsZWFuYCAoV2luZG93cyBjb21tYW5kIGxpbmUpIG9yCitidWlsZGluZyB0aGUgInRlc3RjbGVhbiIgdGFyZ2V0IChWaXN1YWwgU3R1ZGlvIElERSkgd2lsbCBjbGVhbiB1cCB0aGUgb3V0cHV0CitpbWFnZXMgZ2VuZXJhdGVkIGJ5IHRoZSB0ZXN0cy4KKworT24gVW4qeCBwbGF0Zm9ybXMsIG1vcmUgZXh0ZW5zaXZlIHRlc3RzIG9mIHRoZSBUdXJib0pQRUcgQyBhbmQgSmF2YSB3cmFwcGVycworY2FuIGJlIHJ1biBieSBpbnZva2luZyBgbWFrZSB0anRlc3RgLiAgVGhlc2UgZXh0ZW5kZWQgVHVyYm9KUEVHIHRlc3RzCitlc3NlbnRpYWxseSBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMgb2YgdGhlIFR1cmJvSlBFRyBBUElzCit0aGF0IGFyZSBub3QgY292ZXJlZCBieSB0aGUgVHVyYm9KUEVHIHVuaXQgdGVzdHMgKGluY2x1ZGluZyB0aGUgbG9zc2xlc3MKK3RyYW5zZm9ybSBvcHRpb25zKSBhbmQgY29tcGFyZSB0aGUgaW1hZ2VzIGdlbmVyYXRlZCBieSBlYWNoIGZlYXR1cmUgdG8gaW1hZ2VzCitnZW5lcmF0ZWQgdXNpbmcgdGhlIGVxdWl2YWxlbnQgZmVhdHVyZSBpbiB0aGUgbGlianBlZyBBUEkuICBUaGUgZXh0ZW5kZWQKK1R1cmJvSlBFRyB0ZXN0cyBhcmUgbWVhbnQgdG8gdGVzdCBmb3IgcmVncmVzc2lvbnMgaW4gdGhlIFR1cmJvSlBFRyB3cmFwcGVycywKK25vdCBpbiB0aGUgdW5kZXJseWluZyBsaWJqcGVnIEFQSSBsaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQnJld2ZpbGUgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9CcmV3ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTljYjNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQnJld2ZpbGUKQEAgLTAsMCArMSw0IEBACiticmV3ICd5YXNtJworYnJldyAnZ2NjQDUnCiticmV3ICdtZDVzaGExc3VtJworY2FzayAnQ2Fza3Jvb20vdmVyc2lvbnMvamF2YTYnCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9DTWFrZUxpc3RzLnR4dCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTk4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzODMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCisKK3Byb2plY3QobGlianBlZy10dXJibyBDKQorc2V0KFZFUlNJT04gMS41LjkxKQorc3RyaW5nKFJFUExBQ0UgIi4iICI7IiBWRVJTSU9OX1RSSVBMRVQgJHtWRVJTSU9OfSkKK2xpc3QoR0VUIFZFUlNJT05fVFJJUExFVCAwIFZFUlNJT05fTUFKT1IpCitsaXN0KEdFVCBWRVJTSU9OX1RSSVBMRVQgMSBWRVJTSU9OX01JTk9SKQorbGlzdChHRVQgVkVSU0lPTl9UUklQTEVUIDIgVkVSU0lPTl9SRVZJU0lPTikKK2Z1bmN0aW9uKHBhZF9udW1iZXIgTlVNQkVSIE9VVFBVVF9MRU4pCisgIHN0cmluZyhMRU5HVEggIiR7JHtOVU1CRVJ9fSIgSU5QVVRfTEVOKQorICBpZihJTlBVVF9MRU4gTEVTUyBPVVRQVVRfTEVOKQorICAgIG1hdGgoRVhQUiBaRVJPRVMgIiR7T1VUUFVUX0xFTn0gLSAke0lOUFVUX0xFTn0gLSAxIikKKyAgICBzZXQoTlVNICR7JHtOVU1CRVJ9fSkKKyAgICBmb3JlYWNoKEMgUkFOR0UgJHtaRVJPRVN9KQorICAgICAgc2V0KE5VTSAiMCR7TlVNfSIpCisgICAgZW5kZm9yZWFjaCgpCisgICAgc2V0KCR7TlVNQkVSfSAke05VTX0gUEFSRU5UX1NDT1BFKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCitwYWRfbnVtYmVyKFZFUlNJT05fTUlOT1IgMykKK3BhZF9udW1iZXIoVkVSU0lPTl9SRVZJU0lPTiAzKQorc2V0KExJQkpQRUdfVFVSQk9fVkVSU0lPTl9OVU1CRVIgJHtWRVJTSU9OX01BSk9SfSR7VkVSU0lPTl9NSU5PUn0ke1ZFUlNJT05fUkVWSVNJT059KQorCitzdHJpbmcoVElNRVNUQU1QIERFRkFVTFRfQlVJTEQgIiVZJW0lZCIpCitzZXQoQlVJTEQgJHtERUZBVUxUX0JVSUxEfSBDQUNIRSBTVFJJTkcgIkJ1aWxkIHN0cmluZyAoZGVmYXVsdDogJHtERUZBVUxUX0JVSUxEfSkiKQorCisjIE5PVEU6IE9uIFdpbmRvd3MsIHRoaXMgZG9lcyBub3RoaW5nIGV4Y2VwdCB3aGVuIHVzaW5nIE1pbkdXIG9yIEN5Z3dpbi4KKyMgQ01BS0VfQlVJTERfVFlQRSBoYXMgbm8gbWVhbmluZyBpbiBWaXN1YWwgU3R1ZGlvLCBhbmQgaXQgYWx3YXlzIGRlZmF1bHRzIHRvCisjIERlYnVnIHdoZW4gdXNpbmcgTk1ha2UuCitpZihOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyAgc2V0KENNQUtFX0JVSUxEX1RZUEUgUmVsZWFzZSkKK2VuZGlmKCkKK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9CVUlMRF9UWVBFID0gJHtDTUFLRV9CVUlMRF9UWVBFfSIpCisKK21lc3NhZ2UoU1RBVFVTICJWRVJTSU9OID0gJHtWRVJTSU9OfSwgQlVJTEQgPSAke0JVSUxEfSIpCisKKyMgRGV0ZWN0IENQVSB0eXBlIGFuZCB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIDY0LWJpdCBvciAzMi1iaXQgY29kZQorbWF0aChFWFBSIEJJVFMgIiR7Q01BS0VfU0laRU9GX1ZPSURfUH0gKiA4IikKK3N0cmluZyhUT0xPV0VSICR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0gQ01BS0VfU1lTVEVNX1BST0NFU1NPUl9MQykKK2lmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1JfTEMgTUFUQ0hFUyAieDg2XzY0IiBPUgorICBDTUFLRV9TWVNURU1fUFJPQ0VTU09SX0xDIE1BVENIRVMgImFtZDY0IiBPUgorICBDTUFLRV9TWVNURU1fUFJPQ0VTU09SX0xDIE1BVENIRVMgImlbMC05XTg2IiBPUgorICBDTUFLRV9TWVNURU1fUFJPQ0VTU09SX0xDIE1BVENIRVMgIng4NiIgT1IKKyAgQ01BS0VfU1lTVEVNX1BST0NFU1NPUl9MQyBNQVRDSEVTICJpYTMyIikKKyAgaWYoQklUUyBFUVVBTCA2NCkKKyAgICBzZXQoQ1BVX1RZUEUgeDg2XzY0KQorICBlbHNlKCkKKyAgICBzZXQoQ1BVX1RZUEUgaTM4NikKKyAgZW5kaWYoKQorICBpZihOT1QgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAke0NQVV9UWVBFfSkKKyAgICBzZXQoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAke0NQVV9UWVBFfSkKKyAgZW5kaWYoKQorZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1JfTEMgU1RSRVFVQUwgImFhcmNoNjQiIE9SCisgIENNQUtFX1NZU1RFTV9QUk9DRVNTT1JfTEMgTUFUQ0hFUyAiYXJtKjY0KiIpCisgIHNldChDUFVfVFlQRSBhcm02NCkKK2Vsc2VpZihDTUFLRV9TWVNURU1fUFJPQ0VTU09SX0xDIE1BVENIRVMgImFybSoiKQorICBzZXQoQ1BVX1RZUEUgYXJtKQorZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1JfTEMgTUFUQ0hFUyAicHBjKiIgT1IKKyAgQ01BS0VfU1lTVEVNX1BST0NFU1NPUl9MQyBNQVRDSEVTICJwb3dlcnBjKiIpCisgIHNldChDUFVfVFlQRSBwb3dlcnBjKQorZWxzZSgpCisgIHNldChDUFVfVFlQRSAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1JfTEN9KQorZW5kaWYoKQorbWVzc2FnZShTVEFUVVMgIiR7QklUU30tYml0IGJ1aWxkICgke0NQVV9UWVBFfSkiKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSU5TVEFMTCBESVJFQ1RPUklFUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpZihXSU4zMikKKyAgaWYoTVNWQykKKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWCAiYzovJHtDTUFLRV9QUk9KRUNUX05BTUV9IikKKyAgZWxzZSgpCisgICAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9QUkVGSVggImM6LyR7Q01BS0VfUFJPSkVDVF9OQU1FfS1nY2MiKQorICBlbmRpZigpCisgIGlmKEJJVFMgRVFVQUwgNjQpCisgICAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9QUkVGSVggIiR7Q01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWH02NCIpCisgIGVuZGlmKCkKK2Vsc2UoKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWCAvb3B0LyR7Q01BS0VfUFJPSkVDVF9OQU1FfSkKK2VuZGlmKCkKK2lmKENNQUtFX0lOU1RBTExfUFJFRklYX0lOSVRJQUxJWkVEX1RPX0RFRkFVTFQpCisgIHNldChDTUFLRV9JTlNUQUxMX1BSRUZJWCAiJHtDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYfSIgQ0FDSEUgUEFUSAorICAgICJEaXJlY3RvcnkgaW50byB3aGljaCB0byBpbnN0YWxsICR7Q01BS0VfUFJPSkVDVF9OQU1FfSAoZGVmYXVsdDogJHtDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYfSkiCisgICAgRk9SQ0UpCitlbmRpZigpCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfSU5TVEFMTF9QUkVGSVggPSAke0NNQUtFX0lOU1RBTExfUFJFRklYfSIpCisKKyMgV2hlbiB0aGUgcHJlZml4IGlzIC9vcHQvJHtDTUFLRV9QUk9KRUNUX05BTUV9LCB3ZSBhc3N1bWUgdGhhdCBhbiAib2ZmaWNpYWwiCisjIGJ1aWxkIGlzIGJlaW5nIGNyZWF0ZWQsIGFuZCB0aHVzIHdlIGluc3RhbGwgdGhpbmdzIGludG8gc3BlY2lmaWMgbG9jYXRpb25zLgorCitpZihDTUFLRV9JTlNUQUxMX1BSRUZJWCBTVFJFUVVBTCAiJHtDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYfSIpCisgIHNldChDTUFLRV9JTlNUQUxMX0RFRkFVTFRfREFUQVJPT1RESVIgIiIpCisgIHNldChDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRE9DRElSICI8Q01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUj4vZG9jIikKKyAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9KQVZBRElSICI8Q01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUj4vY2xhc3NlcyIpCisgIGlmKFVOSVggQU5EIE5PVCBBUFBMRSkKKyAgICBpZihCSVRTIEVRVUFMIDY0KQorICAgICAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9MSUJESVIgImxpYjY0IikKKyAgICBlbHNlKCkKKyAgICAgIHNldChDTUFLRV9JTlNUQUxMX0RFRkFVTFRfTElCRElSICJsaWIzMiIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRpZigpCisKK2luY2x1ZGUoY21ha2VzY3JpcHRzL0dOVUluc3RhbGxEaXJzLmNtYWtlKQorCitzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSCAke0NNQUtFX0lOU1RBTExfRlVMTF9MSUJESVJ9KQorCittYWNybyhyZXBvcnRfZGlyZWN0b3J5IHZhcikKKyAgaWYoQ01BS0VfSU5TVEFMTF8ke3Zhcn0gU1RSRVFVQUwgQ01BS0VfSU5TVEFMTF9GVUxMXyR7dmFyfSkKKyAgICBtZXNzYWdlKFNUQVRVUyAiQ01BS0VfSU5TVEFMTF8ke3Zhcn0gPSAke0NNQUtFX0lOU1RBTExfJHt2YXJ9fSIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU1RBVFVTICJDTUFLRV9JTlNUQUxMXyR7dmFyfSA9ICR7Q01BS0VfSU5TVEFMTF8ke3Zhcn19ICgke0NNQUtFX0lOU1RBTExfRlVMTF8ke3Zhcn19KSIpCisgIGVuZGlmKCkKKyAgbWFya19hc19hZHZhbmNlZChDTEVBUiBDTUFLRV9JTlNUQUxMXyR7dmFyfSkKK2VuZG1hY3JvKCkKKworc2V0KERJUkxJU1QgIkJJTkRJUjtEQVRBUk9PVERJUjtET0NESVI7SU5DTFVERURJUjtMSUJESVIiKQoraWYoVU5JWCkKKyAgbGlzdChBUFBFTkQgRElSTElTVCAiTUFORElSIikKK2VuZGlmKCkKK2ZvcmVhY2goZGlyICR7RElSTElTVH0pCisgIHJlcG9ydF9kaXJlY3RvcnkoJHtkaXJ9KQorZW5kZm9yZWFjaCgpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDT05GSUdVUkFUSU9OIE9QVElPTlMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbWFjcm8oYm9vbGVhbl9udW1iZXIgdmFyKQorICBpZigke3Zhcn0pCisgICAgc2V0KCR7dmFyfSAxKQorICBlbHNlKCkKKyAgICBzZXQoJHt2YXJ9IDApCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworb3B0aW9uKEVOQUJMRV9TSEFSRUQgIkJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiIFRSVUUpCitib29sZWFuX251bWJlcihFTkFCTEVfU0hBUkVEKQorb3B0aW9uKEVOQUJMRV9TVEFUSUMgIkJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiIFRSVUUpCitib29sZWFuX251bWJlcihFTkFCTEVfU1RBVElDKQorb3B0aW9uKFJFUVVJUkVfU0lNRCAiR2VuZXJhdGUgYSBmYXRhbCBlcnJvciBpZiBTSU1EIGV4dGVuc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKGRlZmF1bHQgaXMgdG8gZmFsbCBiYWNrIHRvIGEgbm9uLVNJTUQgYnVpbGQpIiBGQUxTRSkKK2Jvb2xlYW5fbnVtYmVyKFJFUVVJUkVfU0lNRCkKK29wdGlvbihXSVRIXzEyQklUICJFbmNvZGUvZGVjb2RlIEpQRUcgaW1hZ2VzIHdpdGggMTItYml0IHNhbXBsZXMgKGltcGxpZXMgV0lUSF9BUklUSF9ERUM9MCBXSVRIX0FSSVRIX0VOQz0wIFdJVEhfSkFWQT0wIFdJVEhfU0lNRD0wIFdJVEhfVFVSQk9KUEVHPTAgKSIgRkFMU0UpCitib29sZWFuX251bWJlcihXSVRIXzEyQklUKQorb3B0aW9uKFdJVEhfQVJJVEhfREVDICJJbmNsdWRlIGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydCB3aGVuIGVtdWxhdGluZyB0aGUgbGlianBlZyB2NmIgQVBJL0FCSSIgVFJVRSkKK2Jvb2xlYW5fbnVtYmVyKFdJVEhfQVJJVEhfREVDKQorb3B0aW9uKFdJVEhfQVJJVEhfRU5DICJJbmNsdWRlIGFyaXRobWV0aWMgZW5jb2Rpbmcgc3VwcG9ydCB3aGVuIGVtdWxhdGluZyB0aGUgbGlianBlZyB2NmIgQVBJL0FCSSIgVFJVRSkKK2Jvb2xlYW5fbnVtYmVyKFdJVEhfQVJJVEhfRU5DKQorb3B0aW9uKFdJVEhfSkFWQSAiQnVpbGQgSmF2YSB3cmFwcGVyIGZvciB0aGUgVHVyYm9KUEVHIEFQSSBsaWJyYXJ5IChpbXBsaWVzIEVOQUJMRV9TSEFSRUQ9MSkiIEZBTFNFKQorYm9vbGVhbl9udW1iZXIoV0lUSF9KQVZBKQorb3B0aW9uKFdJVEhfSlBFRzcgIkVtdWxhdGUgbGlianBlZyB2NyBBUEkvQUJJICh0aGlzIG1ha2VzICR7Q01BS0VfUFJPSkVDVF9OQU1FfSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY2YikiIEZBTFNFKQorYm9vbGVhbl9udW1iZXIoV0lUSF9KUEVHNykKK29wdGlvbihXSVRIX0pQRUc4ICJFbXVsYXRlIGxpYmpwZWcgdjggQVBJL0FCSSAodGhpcyBtYWtlcyAke0NNQUtFX1BST0pFQ1RfTkFNRX0gYmFja3dhcmQtaW5jb21wYXRpYmxlIHdpdGggbGlianBlZyB2NmIpIiBGQUxTRSkKK2Jvb2xlYW5fbnVtYmVyKFdJVEhfSlBFRzgpCitvcHRpb24oV0lUSF9NRU1fU1JDRFNUICJJbmNsdWRlIGluLW1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlciBmdW5jdGlvbnMgd2hlbiBlbXVsYXRpbmcgdGhlIGxpYmpwZWcgdjZiIG9yIHY3IEFQSS9BQkkiIFRSVUUpCitib29sZWFuX251bWJlcihXSVRIX01FTV9TUkNEU1QpCitvcHRpb24oV0lUSF9TSU1EICJJbmNsdWRlIFNJTUQgZXh0ZW5zaW9ucywgaWYgYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIiBUUlVFKQorYm9vbGVhbl9udW1iZXIoV0lUSF9TSU1EKQorb3B0aW9uKFdJVEhfVFVSQk9KUEVHICJJbmNsdWRlIHRoZSBUdXJib0pQRUcgQVBJIGxpYnJhcnkgYW5kIGFzc29jaWF0ZWQgdGVzdCBwcm9ncmFtcyIgVFJVRSkKK2Jvb2xlYW5fbnVtYmVyKFdJVEhfVFVSQk9KUEVHKQorCittYWNybyhyZXBvcnRfb3B0aW9uIHZhciBkZXNjKQorICBpZigke3Zhcn0pCisgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY30gZW5hYmxlZCAoJHt2YXJ9ID0gJHske3Zhcn19KSIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2N9IGRpc2FibGVkICgke3Zhcn0gPSAkeyR7dmFyfX0pIikKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitpZihXSVRIX0pBVkEpCisgIHNldChFTkFCTEVfU0hBUkVEIDEpCitlbmRpZigpCisKKyMgRXhwbGljaXRseSBzZXR0aW5nIENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREU9RkFMU0UgZGlzYWJsZXMgUElDIGZvciBhbGwKKyMgdGFyZ2V0cywgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2hhcmVkIGxpYnJhcnkgYnVpbGRzIHRvIGZhaWwuICBUaHVzLCBpZiBzaGFyZWQKKyMgbGlicmFyaWVzIGFyZSBlbmFibGVkIGFuZCBDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIGlzIGV4cGxpY2l0bHkgc2V0CisjIHRvIEZBTFNFLCB3ZSBuZWVkIHRvIHVuc2V0IGl0LCB0aHVzIHJlc3RvcmluZyB0aGUgZGVmYXVsdCBiZWhhdmlvcgorIyAoYXV0b21hdGljYWxseSB1c2luZyBQSUMgZm9yIHNoYXJlZCBsaWJyYXJ5IHRhcmdldHMuKQoraWYoREVGSU5FRCBDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIEFORAorICBOT1QgQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBBTkQgRU5BQkxFX1NIQVJFRCkKKyAgdW5zZXQoQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBDQUNIRSkKK2VuZGlmKCkKKworcmVwb3J0X29wdGlvbihFTkFCTEVfU0hBUkVEICJTaGFyZWQgbGlicmFyaWVzIikKK3JlcG9ydF9vcHRpb24oRU5BQkxFX1NUQVRJQyAiU3RhdGljIGxpYnJhcmllcyIpCisKK2lmKFdJVEhfMTJCSVQpCisgIHNldChXSVRIX0FSSVRIX0RFQyAwKQorICBzZXQoV0lUSF9BUklUSF9FTkMgMCkKKyAgc2V0KFdJVEhfSkFWQSAwKQorICBzZXQoV0lUSF9TSU1EIDApCisgIHNldChXSVRIX1RVUkJPSlBFRyAwKQorICBzZXQoQklUU19JTl9KU0FNUExFIDEyKQorZWxzZSgpCisgIHNldChCSVRTX0lOX0pTQU1QTEUgOCkKK2VuZGlmKCkKK3JlcG9ydF9vcHRpb24oV0lUSF8xMkJJVCAiMTItYml0IEpQRUcgc3VwcG9ydCIpCisKK2lmKFdJVEhfSlBFRzggT1IgV0lUSF9KUEVHNykKKyAgc2V0KFdJVEhfQVJJVEhfRU5DIDEpCisgIHNldChXSVRIX0FSSVRIX0RFQyAxKQorZW5kaWYoKQoraWYoV0lUSF9KUEVHOCkKKyAgc2V0KFdJVEhfTUVNX1NSQ0RTVCAwKQorZW5kaWYoKQorCitpZihXSVRIX0FSSVRIX0RFQykKKyAgc2V0KERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAxKQorZW5kaWYoKQoraWYoTk9UIFdJVEhfMTJCSVQpCisgIHJlcG9ydF9vcHRpb24oV0lUSF9BUklUSF9ERUMgIkFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydCIpCitlbmRpZigpCisKK2lmKFdJVEhfQVJJVEhfRU5DKQorICBzZXQoQ19BUklUSF9DT0RJTkdfU1VQUE9SVEVEIDEpCitlbmRpZigpCitpZihOT1QgV0lUSF8xMkJJVCkKKyAgcmVwb3J0X29wdGlvbihXSVRIX0FSSVRIX0VOQyAiQXJpdGhtZXRpYyBlbmNvZGluZyBzdXBwb3J0IikKK2VuZGlmKCkKKworaWYoTk9UIFdJVEhfMTJCSVQpCisgIHJlcG9ydF9vcHRpb24oV0lUSF9UVVJCT0pQRUcgIlR1cmJvSlBFRyBBUEkgbGlicmFyeSIpCisgIHJlcG9ydF9vcHRpb24oV0lUSF9KQVZBICJUdXJib0pQRUcgSmF2YSB3cmFwcGVyIikKK2VuZGlmKCkKKworaWYoV0lUSF9NRU1fU1JDRFNUKQorICBzZXQoTUVNX1NSQ0RTVF9TVVBQT1JURUQgMSkKKyAgc2V0KE1FTV9TUkNEU1RfRlVOQ1RJT05TICJnbG9iYWw6ICBqcGVnX21lbV9kZXN0OyAganBlZ19tZW1fc3JjOyIpCitlbmRpZigpCitpZihOT1QgV0lUSF9KUEVHOCkKKyAgcmVwb3J0X29wdGlvbihXSVRIX01FTV9TUkNEU1QgIkluLW1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlcnMiKQorZW5kaWYoKQorCitzZXQoU09fQUdFIDIpCitpZihXSVRIX01FTV9TUkNEU1QpCisgIHNldChTT19BR0UgMykKK2VuZGlmKCkKKworaWYoV0lUSF9KUEVHOCkKKyAgc2V0KEpQRUdfTElCX1ZFUlNJT04gODApCitlbHNlaWYoV0lUSF9KUEVHNykKKyAgc2V0KEpQRUdfTElCX1ZFUlNJT04gNzApCitlbHNlKCkKKyAgc2V0KEpQRUdfTElCX1ZFUlNJT04gNjIpCitlbmRpZigpCisKK21hdGgoRVhQUiBKUEVHX0xJQl9WRVJTSU9OX0RJVjEwICIke0pQRUdfTElCX1ZFUlNJT059IC8gMTAiKQorbWF0aChFWFBSIEpQRUdfTElCX1ZFUlNJT05fTU9EMTAgIiR7SlBFR19MSUJfVkVSU0lPTn0gJSAxMCIpCitpZihKUEVHX0xJQl9WRVJTSU9OIFNUUkVRVUFMICI2MiIpCisgIHNldChERUZBVUxUX1NPX01BSk9SX1ZFUlNJT04gJHtKUEVHX0xJQl9WRVJTSU9OfSkKK2Vsc2UoKQorICBzZXQoREVGQVVMVF9TT19NQUpPUl9WRVJTSU9OICR7SlBFR19MSUJfVkVSU0lPTl9ESVYxMH0pCitlbmRpZigpCitpZihKUEVHX0xJQl9WRVJTSU9OIFNUUkVRVUFMICI4MCIpCisgIHNldChERUZBVUxUX1NPX01JTk9SX1ZFUlNJT04gMikKK2Vsc2UoKQorICBzZXQoREVGQVVMVF9TT19NSU5PUl9WRVJTSU9OIDApCitlbmRpZigpCisKKyMgVGhpcyBjYXVzZXMgU09fTUFKT1JfVkVSU0lPTi9TT19NSU5PUl9WRVJTSU9OIHRvIHJlc2V0IHRvIGRlZmF1bHRzIGlmCisjIFdJVEhfSlBFRzcgb3IgV0lUSF9KUEVHOCBoYXMgY2hhbmdlZC4KK2lmKChERUZJTkVEIFdJVEhfSlBFRzdfSU5UIEFORCBOT1QgV0lUSF9KUEVHNyBFUVVBTCBXSVRIX0pQRUc3X0lOVCkgT1IKKyAgKERFRklORUQgV0lUSF9KUEVHOF9JTlQgQU5EIE5PVCBXSVRIX0pQRUc4IEVRVUFMIFdJVEhfSlBFRzhfSU5UKSkKKyAgc2V0KEZPUkNFX1NPX1ZFUlNJT04gIkZPUkNFIikKK2VuZGlmKCkKK3NldChXSVRIX0pQRUc3X0lOVCAke1dJVEhfSlBFRzd9IENBQ0hFIElOVEVSTkFMICIiKQorc2V0KFdJVEhfSlBFRzhfSU5UICR7V0lUSF9KUEVHOH0gQ0FDSEUgSU5URVJOQUwgIiIpCisKK3NldChTT19NQUpPUl9WRVJTSU9OICR7REVGQVVMVF9TT19NQUpPUl9WRVJTSU9OfSBDQUNIRSBTVFJJTkcKKyAgIk1ham9yIHZlcnNpb24gb2YgdGhlIGxpYmpwZWcgQVBJIHNoYXJlZCBsaWJyYXJ5IChkZWZhdWx0OiAke0RFRkFVTFRfU09fTUFKT1JfVkVSU0lPTn0pIgorICAke0ZPUkNFX1NPX1ZFUlNJT059KQorc2V0KFNPX01JTk9SX1ZFUlNJT04gJHtERUZBVUxUX1NPX01JTk9SX1ZFUlNJT059IENBQ0hFIFNUUklORworICAiTWlub3IgdmVyc2lvbiBvZiB0aGUgbGlianBlZyBBUEkgc2hhcmVkIGxpYnJhcnkgKGRlZmF1bHQ6ICR7REVGQVVMVF9TT19NSU5PUl9WRVJTSU9OfSkiCisgICR7Rk9SQ0VfU09fVkVSU0lPTn0pCisKK3NldChKUEVHX0xJQl9WRVJTSU9OX0RFQ0lNQUwgIiR7SlBFR19MSUJfVkVSU0lPTl9ESVYxMH0uJHtKUEVHX0xJQl9WRVJTSU9OX01PRDEwfSIpCittZXNzYWdlKFNUQVRVUyAiRW11bGF0aW5nIGxpYmpwZWcgQVBJL0FCSSB2JHtKUEVHX0xJQl9WRVJTSU9OX0RFQ0lNQUx9IChXSVRIX0pQRUc3ID0gJHtXSVRIX0pQRUc3fSwgV0lUSF9KUEVHOCA9ICR7V0lUSF9KUEVHOH0pIikKK21lc3NhZ2UoU1RBVFVTICJsaWJqcGVnIEFQSSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uID0gJHtTT19NQUpPUl9WRVJTSU9OfS4ke1NPX0FHRX0uJHtTT19NSU5PUl9WRVJTSU9OfSIpCisKKyMgQmVjYXVzZSB0aGUgVHVyYm9KUEVHIEFQSSBsaWJyYXJ5IHVzZXMgdmVyc2lvbmVkIHN5bWJvbHMgYW5kIGNoYW5nZXMgdGhlCisjIG5hbWVzIG9mIGZ1bmN0aW9ucyB3aGVuZXZlciB0aGV5IGFyZSBtb2RpZmllZCBpbiBhIGJhY2t3YXJkLWluY29tcGF0aWJsZQorIyBtYW5uZXIsIGl0IGlzIGFsd2F5cyBiYWNrd2FyZC1BQkktY29tcGF0aWJsZSB3aXRoIGl0c2VsZiwgc28gdGhlIG1ham9yIGFuZAorIyBtaW5vciBTTyB2ZXJzaW9ucyBkb24ndCBjaGFuZ2UuICBIb3dldmVyLCB3ZSBpbmNyZWFzZSB0aGUgbWlkZGxlIG51bWJlciAodGhlCisjIFNPICJhZ2UiKSB3aGVuZXZlciBmdW5jdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBBUEkuCitzZXQoVFVSQk9KUEVHX1NPX01BSk9SX1ZFUlNJT04gMCkKK3NldChUVVJCT0pQRUdfU09fVkVSU0lPTiAwLjIuMCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENPTVBJTEVSIFNFVFRJTkdTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmKE1TVkMpCisgIG9wdGlvbihXSVRIX0NSVF9ETEwKKyAgICAiTGluayBhbGwgJHtDTUFLRV9QUk9KRUNUX05BTUV9IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgd2l0aCB0aGUgQyBydW4tdGltZSBETEwgKG1zdmNyKi5kbGwpIGluc3RlYWQgb2YgdGhlIHN0YXRpYyBDIHJ1bi10aW1lIGxpYnJhcnkgKGxpYmNtdCoubGliLikgIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgQyBydW4tdGltZSBETEwgb25seSB3aXRoIHRoZSBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIHRoYXQgbmVlZCBpdC4iCisgICAgRkFMU0UpCisgIGlmKE5PVCBXSVRIX0NSVF9ETEwpCisgICAgIyBVc2UgdGhlIHN0YXRpYyBDIGxpYnJhcnkgZm9yIGFsbCBidWlsZCB0eXBlcworICAgIGZvcmVhY2godmFyIENNQUtFX0NfRkxBR1MgQ01BS0VfQ19GTEFHU19ERUJVRyBDTUFLRV9DX0ZMQUdTX1JFTEVBU0UKKyAgICAgIENNQUtFX0NfRkxBR1NfTUlOU0laRVJFTCBDTUFLRV9DX0ZMQUdTX1JFTFdJVEhERUJJTkZPKQorICAgICAgaWYoJHt2YXJ9IE1BVENIRVMgIi9NRCIpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvTUQiICIvTVQiICR7dmFyfSAiJHske3Zhcn19IikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRmb3JlYWNoKCkKKyAgZW5kaWYoKQorICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvVzMgL3dkNDk5NiIpCitlbmRpZigpCisKK2lmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIE9SIENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgIyBVc2UgdGhlIG1heGltdW0gb3B0aW1pemF0aW9uIGxldmVsIGZvciByZWxlYXNlIGJ1aWxkcworICBmb3JlYWNoKHZhciBDTUFLRV9DX0ZMQUdTX1JFTEVBU0UgQ01BS0VfQ19GTEFHU19SRUxXSVRIREVCSU5GTykKKyAgICBpZigke3Zhcn0gTUFUQ0hFUyAiLU8yIikKKyAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICItTzIiICItTzMiICR7dmFyfSAiJHske3Zhcn19IikKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorZW5kaWYoKQorCitpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiU3VuT1MiKQorICBpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIlN1blBybyIpCisgICAgIyBVc2UgdGhlIG1heGltdW0gb3B0aW1pemF0aW9uIGxldmVsIGZvciByZWxlYXNlIGJ1aWxkcworICAgIGZvcmVhY2godmFyIENNQUtFX0NfRkxBR1NfUkVMRUFTRSBDTUFLRV9DX0ZMQUdTX1JFTFdJVEhERUJJTkZPKQorICAgICAgaWYoJHt2YXJ9IE1BVENIRVMgIi14TzMiKQorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLXhPMyIgIi14TzUiICR7dmFyfSAiJHske3Zhcn19IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKCR7dmFyfSBNQVRDSEVTICIteE8yIikKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi14TzIiICIteE81IiAke3Zhcn0gIiR7JHt2YXJ9fSIpCisgICAgICBlbmRpZigpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworc3RyaW5nKFRPVVBQRVIgJHtDTUFLRV9CVUlMRF9UWVBFfSBDTUFLRV9CVUlMRF9UWVBFX1VDKQorCitzZXQoRUZGRUNUSVZFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gJHtDTUFLRV9DX0ZMQUdTXyR7Q01BS0VfQlVJTERfVFlQRV9VQ319IikKK21lc3NhZ2UoU1RBVFVTICJDb21waWxlciBmbGFncyA9ICR7RUZGRUNUSVZFX0NfRkxBR1N9IikKKworc2V0KEVGRkVDVElWRV9MRF9GTEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfJHtDTUFLRV9CVUlMRF9UWVBFX1VDfX0iKQorbWVzc2FnZShTVEFUVVMgIkxpbmtlciBmbGFncyA9ICR7RUZGRUNUSVZFX0xEX0ZMQUdTfSIpCisKK2luY2x1ZGUoQ2hlY2tDU291cmNlQ29tcGlsZXMpCitpbmNsdWRlKENoZWNrSW5jbHVkZUZpbGVzKQoraW5jbHVkZShDaGVja1R5cGVTaXplKQorCitjaGVja190eXBlX3NpemUoInNpemVfdCIgU0laRV9UKQorY2hlY2tfdHlwZV9zaXplKCJ1bnNpZ25lZCBsb25nIiBVTlNJR05FRF9MT05HKQorCitpZihTSVpFX1QgRVFVQUwgVU5TSUdORURfTE9ORykKKyAgY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoImludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeyB1bnNpZ25lZCBsb25nIGEgPSBhcmdjOyAgcmV0dXJuIF9fYnVpbHRpbl9jdHpsKGEpOyB9IgorICAgIEhBVkVfQlVJTFRJTl9DVFpMKQorZW5kaWYoKQoraWYoTVNWQykKKyAgY2hlY2tfaW5jbHVkZV9maWxlcygiaW50cmluLmgiIEhBVkVfSU5UUklOX0gpCitlbmRpZigpCisKK2lmKFVOSVgpCisgICMgQ2hlY2sgZm9yIGhlYWRlcnMKKyAgY2hlY2tfaW5jbHVkZV9maWxlcyhsb2NhbGUuaCBIQVZFX0xPQ0FMRV9IKQorICBjaGVja19pbmNsdWRlX2ZpbGVzKHN0ZGRlZi5oIEhBVkVfU1REREVGX0gpCisgIGNoZWNrX2luY2x1ZGVfZmlsZXMoc3RkbGliLmggSEFWRV9TVERMSUJfSCkKKyAgY2hlY2tfaW5jbHVkZV9maWxlcyhzeXMvdHlwZXMuaCBORUVEX1NZU19UWVBFU19IKQorCisgICMgQ2hlY2sgZm9yIGZ1bmN0aW9ucworICBpbmNsdWRlKENoZWNrU3ltYm9sRXhpc3RzKQorICBjaGVja19zeW1ib2xfZXhpc3RzKG1lbXNldCBzdHJpbmcuaCBIQVZFX01FTVNFVCkKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhtZW1jcHkgc3RyaW5nLmggSEFWRV9NRU1DUFkpCisgIGlmKE5PVCBIQVZFX01FTVNFVCBBTkQgTk9UIEhBVkVfTUVNQ1BZKQorICAgIHNldChORUVEX0JTRF9TVFJJTkdTIDEpCisgIGVuZGlmKCkKKworICAjIENoZWNrIGZvciB0eXBlcworICBjaGVja190eXBlX3NpemUoInVuc2lnbmVkIGNoYXIiIFVOU0lHTkVEX0NIQVIpCisgIGNoZWNrX3R5cGVfc2l6ZSgidW5zaWduZWQgc2hvcnQiIFVOU0lHTkVEX1NIT1JUKQorCisgICMgQ2hlY2sgZm9yIGNvbXBpbGVyIGZlYXR1cmVzCisgIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCJpbnQgbWFpbih2b2lkKSB7IHR5cGVkZWYgc3RydWN0IHVuZGVmaW5lZF9zdHJ1Y3R1cmUgKnVuZGVmX3N0cnVjdF9wdHI7ICB1bmRlZl9zdHJ1Y3RfcHRyIHB0ciA9IDA7ICByZXR1cm4gcHRyICE9IDA7IH0iCisgICAgSU5DT01QTEVURV9UWVBFUykKKyAgaWYoSU5DT01QTEVURV9UWVBFUykKKyAgICBtZXNzYWdlKFNUQVRVUyAiQ29tcGlsZXIgc3VwcG9ydHMgcG9pbnRlcnMgdG8gdW5kZWZpbmVkIHN0cnVjdHVyZXMuIikKKyAgZWxzZSgpCisgICAgc2V0KElOQ09NUExFVEVfVFlQRVNfQlJPS0VOIDEpCisgICAgbWVzc2FnZShTVEFUVVMgIkNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgcG9pbnRlcnMgdG8gdW5kZWZpbmVkIHN0cnVjdHVyZXMuIikKKyAgZW5kaWYoKQorCisgIGlmKENNQUtFX0NST1NTQ09NUElMSU5HKQorICAgIHNldChSSUdIVF9TSElGVF9JU19VTlNJR05FRCAwKQorICBlbHNlKCkKKyAgICBpbmNsdWRlKENoZWNrQ1NvdXJjZVJ1bnMpCisgICAgY2hlY2tfY19zb3VyY2VfcnVucygiCisgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgIGludCBpc19zaGlmdGluZ19zaWduZWQgKGxvbmcgYXJnKSB7CisgICAgICAgIGxvbmcgcmVzID0gYXJnID4+IDQ7CisgICAgICAgIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpCisgICAgICAgICAgcmV0dXJuIDE7IC8qIHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCAqLworICAgICAgICAvKiBzZWUgaWYgdW5zaWduZWQtc2hpZnQgaGFjayB3aWxsIGZpeCBpdC4gKi8KKyAgICAgICAgLyogd2UgY2FuJ3QganVzdCB0ZXN0IGV4YWN0IHZhbHVlIHNpbmNlIGl0IGRlcGVuZHMgb24gd2lkdGggb2YgbG9uZy4uLiAqLworICAgICAgICByZXMgfD0gKH4wTCkgPDwgKDMyLTQpOworICAgICAgICBpZiAocmVzID09IC0weDdGN0U4MENMKQorICAgICAgICAgIHJldHVybiAwOyAvKiByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCAqLworICAgICAgICBwcmludGYoXCJSaWdodCBzaGlmdCBpc24ndCBhY3RpbmcgYXMgSSBleHBlY3QgaXQgdG8uXFxcXG5cIik7CisgICAgICAgIHByaW50ZihcIkkgZmVhciB0aGUgSlBFRyBzb2Z0d2FyZSB3aWxsIG5vdCB3b3JrIGF0IGFsbC5cXFxcblxcXFxuXCIpOworICAgICAgICByZXR1cm4gMDsgLyogdHJ5IGl0IHdpdGggdW5zaWduZWQgYW55d2F5ICovCisgICAgICB9CisgICAgICBpbnQgbWFpbiAodm9pZCkgeworICAgICAgICBleGl0KGlzX3NoaWZ0aW5nX3NpZ25lZCgtMHg3RjdFODBCMUwpKTsKKyAgICAgIH0iIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVEKQorICBlbmRpZigpCisKKyAgaWYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgICAgc2V0KF9fQ0hBUl9VTlNJR05FRF9fIDApCisgIGVsc2UoKQorICAgIGNoZWNrX2Nfc291cmNlX3J1bnMoImludCBtYWluKHZvaWQpIHsgcmV0dXJuICgoY2hhcikgLTEgPCAwKTsgfSIKKyAgICAgIF9fQ0hBUl9VTlNJR05FRF9fKQorICBlbmRpZigpCitlbmRpZigpCisKK2lmKE1TVkMpCisgIHNldChJTkxJTkVfT1BUSU9OUyAiX19pbmxpbmU7aW5saW5lIikKK2Vsc2UoKQorICBzZXQoSU5MSU5FX09QVElPTlMgIl9faW5saW5lX187aW5saW5lIikKK2VuZGlmKCkKK29wdGlvbihGT1JDRV9JTkxJTkUgIkZvcmNlIGZ1bmN0aW9uIGlubGluaW5nIiBUUlVFKQorYm9vbGVhbl9udW1iZXIoRk9SQ0VfSU5MSU5FKQoraWYoRk9SQ0VfSU5MSU5FKQorICBpZihNU1ZDKQorICAgIGxpc3QoSU5TRVJUIElOTElORV9PUFRJT05TIDAgIl9fZm9yY2VpbmxpbmUiKQorICBlbHNlKCkKKyAgICBsaXN0KElOU0VSVCBJTkxJTkVfT1BUSU9OUyAwICJpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIikKKyAgICBsaXN0KElOU0VSVCBJTkxJTkVfT1BUSU9OUyAwICJfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKK2ZvcmVhY2goaW5saW5lICR7SU5MSU5FX09QVElPTlN9KQorICBjaGVja19jX3NvdXJjZV9jb21waWxlcygiJHtpbmxpbmV9IHN0YXRpYyBpbnQgZm9vKHZvaWQpIHsgcmV0dXJuIDA7IH0gaW50IG1haW4odm9pZCkgeyByZXR1cm4gZm9vKCk7IH0iCisgICAgSU5MSU5FX1dPUktTKQorICBpZihJTkxJTkVfV09SS1MpCisgICAgc2V0KElOTElORSAke2lubGluZX0pCisgICAgYnJlYWsoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKK2lmKE5PVCBJTkxJTkVfV09SS1MpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG93IHRvIGlubGluZSBmdW5jdGlvbnMuIikKK2VuZGlmKCkKK21lc3NhZ2UoU1RBVFVTICJJTkxJTkUgPSAke0lOTElORX0gKEZPUkNFX0lOTElORSA9ICR7Rk9SQ0VfSU5MSU5FfSkiKQorCitpZihVTklYIEFORCBOT1QgQVBQTEUpCisgIGZpbGUoV1JJVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NvbmZ0ZXN0Lm1hcCAiVkVSU18xIHsgZ2xvYmFsOiAqOyB9OyIpCisgIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUworICAgICItV2wsLS12ZXJzaW9uLXNjcmlwdCwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY29uZnRlc3QubWFwIikKKyAgY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoImludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0iIEhBVkVfVkVSU0lPTl9TQ1JJUFQpCisgIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUykKKyAgZmlsZShSRU1PVkUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NvbmZ0ZXN0Lm1hcCkKKyAgaWYoSEFWRV9WRVJTSU9OX1NDUklQVCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiTGlua2VyIHN1cHBvcnRzIEdOVS1zdHlsZSB2ZXJzaW9uIHNjcmlwdHMiKQorICAgIHNldChNQVBGTEFHICItV2wsLS12ZXJzaW9uLXNjcmlwdCwiKQorICAgIHNldChUSk1BUEZMQUcgIi1XbCwtLXZlcnNpb24tc2NyaXB0LCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU1RBVFVTICJMaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBHTlUtc3R5bGUgdmVyc2lvbiBzY3JpcHRzIikKKyAgICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiU3VuT1MiKQorICAgICAgIyBUaGUgU29sYXJpcyBsaW5rZXIgZG9lc24ndCBsaWtlIG91ciB2ZXJzaW9uIHNjcmlwdCBmb3IgdGhlIGxpYmpwZWcgQVBJCisgICAgICAjIGxpYnJhcnksIGJ1dCB0aGUgdmVyc2lvbiBzY3JpcHQgZm9yIHRoZSBUdXJib0pQRUcgQVBJIGxpYnJhcnkgc2hvdWxkCisgICAgICAjIHN0aWxsIHdvcmsuCisgICAgICBmaWxlKFdSSVRFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25mdGVzdC5tYXAKKyAgICAgICAgIlZFUlNfMSB7IGdsb2JhbDogZm9vOyAgbG9jYWw6ICo7IH07IFZFUlNfMiB7IGdsb2JhbDogZm9vMjsgfSBWRVJTXzE7IikKKyAgICAgIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLVdsLC1NLCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25mdGVzdC5tYXAiKQorICAgICAgY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoInZvaWQgZm9vKCkge30gdm9pZCBmb28yKCkge30gaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfSIKKyAgICAgICAgSEFWRV9NQVBGSUxFKQorICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTKQorICAgICAgZmlsZShSRU1PVkUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NvbmZ0ZXN0Lm1hcCkKKyAgICAgIGlmKEhBVkVfTUFQRklMRSkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxpbmtlciBzdXBwb3J0cyBtYXBmaWxlcyIpCisgICAgICAgIHNldChUSk1BUEZMQUcgIi1XbCwtTSwiKQorICAgICAgZWxzZSgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBtYXBmaWxlcyIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRpZigpCisKKyMgR2VuZXJhdGUgZmlsZXMKK2lmKFdJTjMyKQorICBjb25maWd1cmVfZmlsZSh3aW4vamNvbmZpZy5oLmluIGpjb25maWcuaCkKK2Vsc2UoKQorICBjb25maWd1cmVfZmlsZShqY29uZmlnLmguaW4gamNvbmZpZy5oKQorZW5kaWYoKQorY29uZmlndXJlX2ZpbGUoamNvbmZpZ2ludC5oLmluIGpjb25maWdpbnQuaCkKK2lmKFVOSVgpCisgIGNvbmZpZ3VyZV9maWxlKGxpYmpwZWcubWFwLmluIGxpYmpwZWcubWFwKQorZW5kaWYoKQorCisjIEluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIGNvbXBpbGVyIGRlZmluaXRpb25zCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUQVJHRVRTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldChKUEVHX1NPVVJDRVMgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjY29lZmN0LmMgamNjb2xvci5jIGpjZGN0bWdyLmMgamNodWZmLmMKKyAgamNpY2MuYyBqY2luaXQuYyBqY21haW5jdC5jIGpjbWFya2VyLmMgamNtYXN0ZXIuYyBqY29tYXBpLmMgamNwYXJhbS5jCisgIGpjcGh1ZmYuYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgamRhcGlzdGQuYyBqZGF0YWRzdC5jCisgIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgamRkY3RtZ3IuYyBqZGh1ZmYuYyBqZGljYy5jIGpkaW5wdXQuYworICBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBqZG1lcmdlLmMgamRwaHVmZi5jIGpkcG9zdGN0LmMgamRzYW1wbGUuYworICBqZHRyYW5zLmMgamVycm9yLmMgamZkY3RmbHQuYyBqZmRjdGZzdC5jIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jCisgIGppZGN0aW50LmMgamlkY3RyZWQuYyBqcXVhbnQxLmMganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYyBqbWVtbm9icy5jKQorCitpZihXSVRIX0FSSVRIX0VOQyBPUiBXSVRIX0FSSVRIX0RFQykKKyAgc2V0KEpQRUdfU09VUkNFUyAke0pQRUdfU09VUkNFU30gamFyaWNvbS5jKQorZW5kaWYoKQorCitpZihXSVRIX0FSSVRIX0VOQykKKyAgc2V0KEpQRUdfU09VUkNFUyAke0pQRUdfU09VUkNFU30gamNhcml0aC5jKQorZW5kaWYoKQorCitpZihXSVRIX0FSSVRIX0RFQykKKyAgc2V0KEpQRUdfU09VUkNFUyAke0pQRUdfU09VUkNFU30gamRhcml0aC5jKQorZW5kaWYoKQorCitpZihXSVRIX1NJTUQpCisgIGFkZF9zdWJkaXJlY3Rvcnkoc2ltZCkKK2Vsc2VpZihOT1QgV0lUSF8xMkJJVCkKKyAgbWVzc2FnZShTVEFUVVMgIlNJTUQgZXh0ZW5zaW9uczogTm9uZSAoV0lUSF9TSU1EID0gJHtXSVRIX1NJTUR9KSIpCitlbmRpZigpCitpZihXSVRIX1NJTUQpCisgIG1lc3NhZ2UoU1RBVFVTICJTSU1EIGV4dGVuc2lvbnM6ICR7Q1BVX1RZUEV9IChXSVRIX1NJTUQgPSAke1dJVEhfU0lNRH0pIikKKyAgaWYoTVNWQ19JREUpCisgICAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCR7U0lNRF9PQkpTfSBQUk9QRVJUSUVTIEdFTkVSQVRFRCAxKQorICBlbmRpZigpCitlbHNlKCkKKyAgYWRkX2xpYnJhcnkoc2ltZCBPQkpFQ1QganNpbWRfbm9uZS5jKQorZW5kaWYoKQorCitpZihXSVRIX0pBVkEpCisgIGFkZF9zdWJkaXJlY3RvcnkoamF2YSkKK2VuZGlmKCkKKworaWYoRU5BQkxFX1NIQVJFRCkKKyAgYWRkX3N1YmRpcmVjdG9yeShzaGFyZWRsaWIpCitlbmRpZigpCisKK2lmKEVOQUJMRV9TVEFUSUMpCisgIGFkZF9saWJyYXJ5KGpwZWctc3RhdGljIFNUQVRJQyAke0pQRUdfU09VUkNFU30gJDxUQVJHRVRfT0JKRUNUUzpzaW1kPgorICAgICR7U0lNRF9PQkpTfSkKKyAgaWYoTk9UIE1TVkMpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGpwZWctc3RhdGljIFBST1BFUlRJRVMgT1VUUFVUX05BTUUganBlZykKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpZihXSVRIX1RVUkJPSlBFRykKKyAgaWYoRU5BQkxFX1NIQVJFRCkKKyAgICBzZXQoVFVSQk9KUEVHX1NPVVJDRVMgJHtKUEVHX1NPVVJDRVN9ICQ8VEFSR0VUX09CSkVDVFM6c2ltZD4gJHtTSU1EX09CSlN9CisgICAgICB0dXJib2pwZWcuYyB0cmFuc3VwcC5jIGpkYXRhZHN0LXRqLmMgamRhdGFzcmMtdGouYyByZGJtcC5jIHJkcHBtLmMKKyAgICAgIHdyYm1wLmMgd3JwcG0uYykKKyAgICBzZXQoVEpNQVBGSUxFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90dXJib2pwZWctbWFwZmlsZSkKKyAgICBpZihXSVRIX0pBVkEpCisgICAgICBzZXQoVFVSQk9KUEVHX1NPVVJDRVMgJHtUVVJCT0pQRUdfU09VUkNFU30gdHVyYm9qcGVnLWpuaS5jKQorICAgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke0pBVkFfSU5DTFVERV9QQVRIfSAke0pBVkFfSU5DTFVERV9QQVRIMn0pCisgICAgICBzZXQoVEpNQVBGSUxFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90dXJib2pwZWctbWFwZmlsZS5qbmkpCisgICAgZW5kaWYoKQorICAgIGFkZF9saWJyYXJ5KHR1cmJvanBlZyBTSEFSRUQgJHtUVVJCT0pQRUdfU09VUkNFU30pCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0dXJib2pwZWcgUFJPUEVSVFkgQ09NUElMRV9GTEFHUworICAgICAgIi1EQk1QX1NVUFBPUlRFRCAtRFBQTV9TVVBQT1JURUQiKQorICAgIGlmKFdJTjMyKQorICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR1cmJvanBlZyBQUk9QRVJUSUVTIERFRklORV9TWU1CT0wgRExMREVGSU5FKQorICAgIGVuZGlmKCkKKyAgICBpZihNSU5HVykKKyAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyh0dXJib2pwZWcgUFJPUEVSVElFUyBMSU5LX0ZMQUdTIC1XbCwtLWtpbGwtYXQpCisgICAgZW5kaWYoKQorICAgIGlmKEFQUExFKQorICAgICAgaWYoTk9UIENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfQ19GTEFHKQorICAgICAgICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV9DX0ZMQUcgIi1XbCwtcnBhdGgsIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyh0dXJib2pwZWcgUFJPUEVSVElFUyBNQUNPU1hfUlBBVEggMSkKKyAgICBlbmRpZigpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR1cmJvanBlZyBQUk9QRVJUSUVTCisgICAgICBTT1ZFUlNJT04gJHtUVVJCT0pQRUdfU09fTUFKT1JfVkVSU0lPTn0gVkVSU0lPTiAke1RVUkJPSlBFR19TT19WRVJTSU9OfSkKKyAgICBpZihUSk1BUEZMQUcpCisgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXModHVyYm9qcGVnIFBST1BFUlRJRVMKKyAgICAgICAgTElOS19GTEFHUyAiJHtUSk1BUEZMQUd9JHtUSk1BUEZJTEV9IikKKyAgICBlbmRpZigpCisKKyAgICBhZGRfZXhlY3V0YWJsZSh0anVuaXR0ZXN0IHRqdW5pdHRlc3QuYyB0anV0aWwuYyBtZDUvbWQ1LmMgbWQ1L21kNWhsLmMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRqdW5pdHRlc3QgdHVyYm9qcGVnKQorCisgICAgYWRkX2V4ZWN1dGFibGUodGpiZW5jaCB0amJlbmNoLmMgdGp1dGlsLmMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRqYmVuY2ggdHVyYm9qcGVnKQorICAgIGlmKFVOSVgpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXModGpiZW5jaCBtKQorICAgIGVuZGlmKCkKKworICAgIGFkZF9leGVjdXRhYmxlKHRqZXhhbXBsZSB0amV4YW1wbGUuYykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXModGpleGFtcGxlIHR1cmJvanBlZykKKyAgZW5kaWYoKQorCisgIGlmKEVOQUJMRV9TVEFUSUMpCisgICAgYWRkX2xpYnJhcnkodHVyYm9qcGVnLXN0YXRpYyBTVEFUSUMgJHtKUEVHX1NPVVJDRVN9ICQ8VEFSR0VUX09CSkVDVFM6c2ltZD4KKyAgICAgICR7U0lNRF9PQkpTfSB0dXJib2pwZWcuYyB0cmFuc3VwcC5jIGpkYXRhZHN0LXRqLmMgamRhdGFzcmMtdGouYyByZGJtcC5jCisgICAgICByZHBwbS5jIHdyYm1wLmMgd3JwcG0uYykKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIHR1cmJvanBlZy1zdGF0aWMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUworICAgICAgIi1EQk1QX1NVUFBPUlRFRCAtRFBQTV9TVVBQT1JURUQiKQorICAgIGlmKE5PVCBNU1ZDKQorICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR1cmJvanBlZy1zdGF0aWMgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSB0dXJib2pwZWcpCisgICAgZW5kaWYoKQorCisgICAgYWRkX2V4ZWN1dGFibGUodGp1bml0dGVzdC1zdGF0aWMgdGp1bml0dGVzdC5jIHRqdXRpbC5jIG1kNS9tZDUuYworICAgICAgbWQ1L21kNWhsLmMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRqdW5pdHRlc3Qtc3RhdGljIHR1cmJvanBlZy1zdGF0aWMpCisKKyAgICBhZGRfZXhlY3V0YWJsZSh0amJlbmNoLXN0YXRpYyB0amJlbmNoLmMgdGp1dGlsLmMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRqYmVuY2gtc3RhdGljIHR1cmJvanBlZy1zdGF0aWMpCisgICAgaWYoVU5JWCkKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh0amJlbmNoLXN0YXRpYyBtKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpZihXSU4zMikKKyAgc2V0KFVTRV9TRVRNT0RFICItRFVTRV9TRVRNT0RFIikKK2VuZGlmKCkKK2lmKFdJVEhfMTJCSVQpCisgIHNldChDT01QSUxFX0ZMQUdTICItREdJRl9TVVBQT1JURUQgLURQUE1fU1VQUE9SVEVEICR7VVNFX1NFVE1PREV9IikKK2Vsc2UoKQorICBzZXQoQ09NUElMRV9GTEFHUyAiLURCTVBfU1VQUE9SVEVEIC1ER0lGX1NVUFBPUlRFRCAtRFBQTV9TVVBQT1JURUQgLURUQVJHQV9TVVBQT1JURUQgJHtVU0VfU0VUTU9ERX0iKQorICBzZXQoQ0pQRUdfQk1QX1NPVVJDRVMgcmRibXAuYyByZHRhcmdhLmMpCisgIHNldChESlBFR19CTVBfU09VUkNFUyB3cmJtcC5jIHdydGFyZ2EuYykKK2VuZGlmKCkKKworaWYoRU5BQkxFX1NUQVRJQykKKyAgYWRkX2V4ZWN1dGFibGUoY2pwZWctc3RhdGljIGNqcGVnLmMgY2RqcGVnLmMgcmRnaWYuYyByZHBwbS5jIHJkc3dpdGNoLmMKKyAgICAke0NKUEVHX0JNUF9TT1VSQ0VTfSkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBjanBlZy1zdGF0aWMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAke0NPTVBJTEVfRkxBR1N9KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoY2pwZWctc3RhdGljIGpwZWctc3RhdGljKQorCisgIGFkZF9leGVjdXRhYmxlKGRqcGVnLXN0YXRpYyBkanBlZy5jIGNkanBlZy5jIHJkY29sbWFwLmMgcmRzd2l0Y2guYyB3cmdpZi5jCisgICAgd3JwcG0uYyAke0RKUEVHX0JNUF9TT1VSQ0VTfSkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBkanBlZy1zdGF0aWMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAke0NPTVBJTEVfRkxBR1N9KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoZGpwZWctc3RhdGljIGpwZWctc3RhdGljKQorCisgIGFkZF9leGVjdXRhYmxlKGpwZWd0cmFuLXN0YXRpYyBqcGVndHJhbi5jIGNkanBlZy5jIHJkc3dpdGNoLmMgdHJhbnN1cHAuYykKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpwZWd0cmFuLXN0YXRpYyBqcGVnLXN0YXRpYykKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBqcGVndHJhbi1zdGF0aWMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHtVU0VfU0VUTU9ERX0iKQorZW5kaWYoKQorCithZGRfZXhlY3V0YWJsZShyZGpwZ2NvbSByZGpwZ2NvbS5jKQorCithZGRfZXhlY3V0YWJsZSh3cmpwZ2NvbSB3cmpwZ2NvbS5jKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVEVTVFMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYWRkX3N1YmRpcmVjdG9yeShtZDUpCisKK2lmKE1TVkNfSURFKQorICBzZXQoT0JKRElSICJcJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9LyIpCitlbHNlKCkKKyAgc2V0KE9CSkRJUiAiIikKK2VuZGlmKCkKKworZW5hYmxlX3Rlc3RpbmcoKQorCitpZihXSVRIXzEyQklUKQorICBzZXQoVEVTVE9SSUcgdGVzdG9yaWcxMi5qcGcpCisgIHNldChNRDVfSlBFR19SR0JfSVNMT1cgOWQ3MzY5MjA3YzUyMGQzN2YyYzFjYmZjYjgyYjI5NjQpCisgIHNldChNRDVfSlBFR19SR0JfSVNMT1cyIGEwMGJkMjBkOGFlNDk2ODQ2NDBlZjcxNzdkMmUwYjY0KQorICBzZXQoTUQ1X1BQTV9SR0JfSVNMT1cgZjMzMDFkMjIxOTc4M2I4YjNkOTQyYjcyMzlmYTUwYzApCisgIHNldChNRDVfSlBFR180MjJfSUZBU1RfT1BUIDczMjJlM2JkMmYxMjdmN2RlNGI0MGQ0NDgwY2U2MGU0KQorICBzZXQoTUQ1X1BQTV80MjJfSUZBU1QgNzk4MDdmYTU1Mjg5OWU2NmEwNDcwOGY1MzNlMTY5NTApCisgIHNldChNRDVfUFBNXzQyMk1fSUZBU1QgMDc3MzdiZmU4YTdjMWM4N2FhYTM5M2EwMDk4ZDE2YjApCisgIHNldChNRDVfSlBFR180MjBfSUZBU1RfUTEwMF9QUk9HIGExZGEyMjBiNTYwNDA4MTg2M2E1MDQyOTdlZDU5ZTU1KQorICBzZXQoTUQ1X1BQTV80MjBfUTEwMF9JRkFTVCAxYjM3MzAxMjI3MDlmNTNkMDA3MjU1ZThkZmQzMzA1ZSkKKyAgc2V0KE1ENV9QUE1fNDIwTV9RMTAwX0lGQVNUIDk4MGExYTNjNWJmOTUxMDAyMjg2OWQzMGI3ZDI2NTY2KQorICBzZXQoTUQ1X0pQRUdfR1JBWV9JU0xPVyAyMzVjOTA3MDdiMTZlMmUwNjlmMzdjODg4YjI2MzZkOSkKKyAgc2V0KE1ENV9QUE1fR1JBWV9JU0xPVyA3MjEzYzEwYWY1MDdhZDQ2N2RhNTU3OGNhNWVlMWZjYSkKKyAgc2V0KE1ENV9QUE1fR1JBWV9JU0xPV19SR0IgZTk2ZWU4MWMzMGE2ZWQ0MjJkNDY2MzM4YmQzZGU2NWQpCisgIHNldChNRDVfSlBFR180MjBTX0lGQVNUX09QVCA3YWY4ZTYwYmU0ZDljMjI3ZWM2M2FjOWI2NjMwODU1ZSkKKworICBzZXQoTUQ1X0pQRUdfM3gyX0ZMT0FUX1BST0dfU1NFIGE4YzE3ZGFmNzdiNDU3NzI1ZWM5MjllMjE1YjYwM2Y4KQorICBzZXQoTUQ1X1BQTV8zeDJfRkxPQVRfU1NFIDQyODc2YWI5ZTVjMmY3NmE4N2QwOGRiNWZiZDU3OTU2KQorICBzZXQoTUQ1X0pQRUdfM3gyX0ZMT0FUX1BST0dfMzJCSVQgYThjMTdkYWY3N2I0NTc3MjVlYzkyOWUyMTViNjAzZjgpCisgIHNldChNRDVfUFBNXzN4Ml9GTE9BVF8zMkJJVCAke01ENV9QUE1fM3gyX0ZMT0FUX1NTRX0pCisgIHNldChNRDVfSlBFR18zeDJfRkxPQVRfUFJPR182NEJJVCAke01ENV9KUEVHXzN4Ml9GTE9BVF9QUk9HXzMyQklUfSkKKyAgc2V0KE1ENV9QUE1fM3gyX0ZMT0FUXzY0QklUICR7TUQ1X1BQTV8zeDJfRkxPQVRfU1NFfSkKKyAgc2V0KE1ENV9KUEVHXzN4Ml9GTE9BVF9QUk9HXzM4NyBiYzZkYmJlZmFjMjg3MmY2YjlkNmM0YTBhZTYwYzNjMCkKKyAgc2V0KE1ENV9QUE1fM3gyX0ZMT0FUXzM4NyBiY2M1NzIzYzYxNTYwNDYzYWM2MGY3NzJlNzQyZDA5MikKKyAgc2V0KE1ENV9KUEVHXzN4Ml9GTE9BVF9QUk9HX01TVkMgZTI3ODQwNzU1ODcwZmE4NDk4NzJlNThhYTBjZDE0MDApCisgIHNldChNRDVfUFBNXzN4Ml9GTE9BVF9NU1ZDIDZjMjg4MGI4M2JiMWFhNDFkZmUzMzBlN2E5NzY4NjkwKQorCisgIHNldChNRDVfSlBFR18zeDJfSUZBU1RfUFJPRyAxMzk2Y2MyYjcxODVjZmU5NDNkNDA4YzlkMzA1MzM5ZSkKKyAgc2V0KE1ENV9QUE1fM3gyX0lGQVNUIDM5NzU5ODVlZjZlZWIwYTJjZGM1OGRhYTY1MWNjYzAwKQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzJfMSA0Y2E2YmUyYTZmMzI2ZmY5ZWFhYjYzZTcwYTgyNTljMCkKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV18xNV84IDEyYWE5Zjk1MzRjMWIzZDdiYTA0NzMyMjIyNjM2NWViKQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzEzXzggZjdlMjI4MTdjN2IyNWUxMzkzZTRlYzEwMWU5ZDRlOTYpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfMTFfOCA4MDBhMTZmOWY0ZGM5YjI5MzE5N2JmZTExYmUxMGE4MikKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV185XzggMDZiN2E5MmE5YmM2OWY0ZGMzNmVjNDBmMTkzN2Q1NWMpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfN184IDNlYzQ0NGExNGE0YWI0ZWFiODhmZmM0OWM0OGVjYTQzKQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzNfNCAzZTcyNmI3ZWE4NzI0NDViMTk0MzdkMWMxZDRmMGQ5MykKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV181XzggYThhNzcxYWJkYzk0MzAxZDIwZmZhYzExOWIyY2FjY2QpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfMV8yIGI0MTkxMjRkZDU1NjhiMDg1Nzg3MjM0ODY2MTAyODY2KQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzNfOCAzNDNkMTkwMTU1MzFiN2JiZTc0NjEyNDEyNzI0NGZhOCkKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV18xXzQgMzVmZDU5ZDg2NmU0NDY1OWVkZmEzYzE4ZGIyYTNlZGIpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfMV84IGNjYWVkNDhhYzBhZWRlZmRhNWQ0YWJlNDAxM2Y0YWQ3KQorICBzZXQoTUQ1X1BQTV80MjBfSVNMT1dfU0tJUDE1XzMxIDg2NjY0Y2Q5ZGM5NTY1MzY0MDllNDRlMjQ0ZDIwYTk3KQorICBzZXQoTUQ1X1BQTV80MjBfSVNMT1dfUFJPR19DUk9QNjJ4NjJfNzFfNzEgNDUyYTIxNjU2MTE1YTE2MzAyOWNmYmE1YzA0ZmE3NmEpCisgIHNldChNRDVfUFBNXzQ0NF9JU0xPV19TS0lQMV82IGVmNjM5MDFmNzFlZjdhNzVjZDc4MjUzZmMwOTE0Zjg0KQorICBzZXQoTUQ1X1BQTV80NDRfSVNMT1dfUFJPR19DUk9QOTh4OThfMTNfMTMgMTViMTczZmI1ODcyZDk1NzU1NzJmYmNjMWIwNTk1NmYpCisgIHNldChNRDVfSlBFR19DUk9QIGNkYjM1ZmY0YjQ1MTkzOTI2OTBlYTA0MGM1NmVhOTljKQorZWxzZSgpCisgIHNldChURVNUT1JJRyB0ZXN0b3JpZy5qcGcpCisgIHNldChNRDVfSlBFR19SR0JfSVNMT1cgMWQ0NGE0MDZmNjFkYTc0M2I1ZmQzMWMwYTlhYmRjYTMpCisgIHNldChNRDVfSlBFR19SR0JfSVNMT1cyIDMxZDEyMWU1N2I2YzI5MzRjODkwYTdmYzc3NjNiY2Q0KQorICBzZXQoTUQ1X1BQTV9SR0JfSVNMT1cgMDBhMjU3ZjUzOTNmZWY4ODIxZjJiODhhYzc0MjEyOTEpCisgIHNldChNRDVfQk1QX1JHQl9JU0xPV181NjUgZjA3ZDJlNzUwNzNlNGJiMTBmNmM2ZjRkMzZlMmUzYmUpCisgIHNldChNRDVfQk1QX1JHQl9JU0xPV181NjVEIDRjZmEwOTI4ZWYzZTZiYjYyNmQ3NzI4YzkyNGNmZGE0KQorICBzZXQoTUQ1X0pQRUdfNDIyX0lGQVNUX09QVCAyNTQwMjg3Yjc5ZDkxM2Y5MTY2NWU2NjAzMDNhYjJjOCkKKyAgc2V0KE1ENV9QUE1fNDIyX0lGQVNUIDM1YmQ2YjNmODMzYmFkMjNkZTgyYWNlYTg0NzEyOWZhKQorICBzZXQoTUQ1X1BQTV80MjJNX0lGQVNUIDhkYmM2NTMyM2Q2MmNjYTdjOTFiYTAyZGQxY2ZhODFkKQorICBzZXQoTUQ1X0JNUF80MjJNX0lGQVNUXzU2NSAzMjk0YmQ0ZDlhMWYyYjNkMDhlYTYwMjBkMGRiNzA2NSkKKyAgc2V0KE1ENV9CTVBfNDIyTV9JRkFTVF81NjVEIGRhOThjOWM3YjYwMzk1MTFiZTRhNzlhODc4YTlhYmMxKQorICBzZXQoTUQ1X0pQRUdfNDIwX0lGQVNUX1ExMDBfUFJPRyA5OTBjYmUwMzI5Yzg4MjQyMGEyMDk0ZGE3ZTVhZGFkZSkKKyAgc2V0KE1ENV9QUE1fNDIwX1ExMDBfSUZBU1QgNWE3MzI1NDIwMTVjMjc4ZmY0MzYzNWU0NzNhOGEyOTQpCisgIHNldChNRDVfUFBNXzQyME1fUTEwMF9JRkFTVCBmZjY5MmVlOTMyM2EzYjQyNDg5NDg2MjU1N2MwOTJmMSkKKyAgc2V0KE1ENV9KUEVHX0dSQVlfSVNMT1cgNzJiNTFmODk0YjhmNGExMGIzZWUzMDY2NzcwYWEzOGQpCisgIHNldChNRDVfUFBNX0dSQVlfSVNMT1cgOGQzNTk2YzU2ZWFjZTMyZjIwNWRlY2NjMjI5YWE1ZWQpCisgIHNldChNRDVfUFBNX0dSQVlfSVNMT1dfUkdCIDExNjQyNGFjMDdiNzllNWU4MDFmMDA1MDhlYWI0OGVjKQorICBzZXQoTUQ1X0JNUF9HUkFZX0lTTE9XXzU2NSAxMmY3ODExOGU1NmEyZjQ4Yjk2NmY3OTJmZWRmMjNjYykKKyAgc2V0KE1ENV9CTVBfR1JBWV9JU0xPV181NjVEIGJkYmJkNjE2NDQxYTI0MzU0Yzk4NTUzZGY1ZGM4MmRiKQorICBzZXQoTUQ1X0pQRUdfNDIwU19JRkFTVF9PUFQgMzg4NzA4MjE3YWM0NjI3M2NhMzMwODZiMjI4MjdlZDgpCisKKyAgc2V0KE1ENV9KUEVHXzN4Ml9GTE9BVF9QUk9HX1NTRSAzNDNlM2Y4Y2FmOGFmNTk4NmViYWYwYmRjMTNiNWM3MSkKKyAgc2V0KE1ENV9QUE1fM3gyX0ZMT0FUX1NTRSAxYTc1ZjM2ZTU5MDRkNmZjM2E4NWE0M2RhOWFkODliYikKKyAgc2V0KE1ENV9KUEVHXzN4Ml9GTE9BVF9QUk9HXzMyQklUIDliY2E4MDNkMjA0MmJkMWViMDM4MTllMmJmOTJiM2U1KQorICBzZXQoTUQ1X1BQTV8zeDJfRkxPQVRfMzJCSVQgZjZiZmFiMDM4NDM4ZWQ4ZjU1MjJmYmQzMzU5NWRjZGMpCisgIHNldChNRDVfSlBFR18zeDJfRkxPQVRfUFJPR182NEJJVCAke01ENV9KUEVHXzN4Ml9GTE9BVF9QUk9HXzMyQklUfSkKKyAgc2V0KE1ENV9QUE1fM3gyX0ZMT0FUXzY0QklUIDBlOTE3YTM0MTkzZWY5NzZiNjc5YTZiMDY5YjFiZTI2KQorICBzZXQoTUQ1X0pQRUdfM3gyX0ZMT0FUX1BST0dfMzg3IDE2NTc2NjRhNDEwZTA4MjJjOTI0YjU0ZjZmNjVlNmU5KQorICBzZXQoTUQ1X1BQTV8zeDJfRkxPQVRfMzg3IGNiMGExZjAyN2YzZDI5MTdjOTAyYjU2NDAyMTRlMDI1KQorICBzZXQoTUQ1X0pQRUdfM3gyX0ZMT0FUX1BST0dfTVNWQyA3OTk5Y2U5Y2QwZWU5YjZjNzA0M2I3MzUxYWI3NjM5ZCkKKyAgc2V0KE1ENV9QUE1fM3gyX0ZMT0FUX01TVkMgMjhjZGM0NDhhNmI3NWU5Nzg5MmYwZTBmOGQ0YjIxZjMpCisKKyAgc2V0KE1ENV9KUEVHXzN4Ml9JRkFTVF9QUk9HIDFlZTVkMmMxYTc3ZjJkYTQ5NWY5OTNjOGM3Y2NlY2E1KQorICBzZXQoTUQ1X1BQTV8zeDJfSUZBU1QgZmQyODM2NjRiM2I0OTEyNzk4NGFmMGE3ZjExOGZjY2QpCisgIHNldChNRDVfSlBFR180MjBfSVNMT1dfQVJJIGU5ODZmYjBhNjM3YThkODMzZDk2ZThhNmQ2ZDg0ZWExKQorICBzZXQoTUQ1X0pQRUdfNDQ0X0lTTE9XX1BST0dBUkkgMGE4ZjFjOGY2NmUxMTNjM2NmNjM1ZGYwYTQ3NWE2MTcpCisgIHNldChNRDVfUFBNXzQyME1fSUZBU1RfQVJJIDcyYjU5YTk5YmNmMWRlMjRjNWIyN2QxNTFiZGUyNDM3KQorICBzZXQoTUQ1X0pQRUdfNDIwX0lTTE9XIDlhNjhmNTZiYzc2ZTQ2NmFhN2U1MmY0MTVkMGY0YTVmKQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzJfMSA5ZjlkZThjMDYxMmY4ZDA2ODY5Yjk2MGIwNWFiZjljOSkKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV18xNV84IGI2ODc1YmMwNzA3MjBiODk5NTY2Y2MwNjQ1OWI2M2I3KQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzEzXzggYmMzNDUyNTczYzgxNTJmNmFlNTUyOTM5ZWUxOWY4MmYpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfMTFfOCBkOGNjNzNjMGFhYWNkNDU1NjU2OWI1OTQzN2JhMDBhNSkKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV185XzggZDI1ZTYxYmM3ZWFjMDAwMmY1YjM5M2FhMjIzNzQ3YjYpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfN184IGRkYjU2NGI3Yzc0YTA5NDk0MDE2ZDZjZDc1MDJhOTQ2KQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzNfNCA4ZWQ4ZTY4ODA4YzNmYmM0ZWE3NjRmYzlkMjk2ODY0NikKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV181XzggYTMzNjMyNzQ5OTlkYTIzNjZhMDI0ZWZhZTZkMTZjOWIpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfMV8yIGU2OTJhMzE1Y2VhMjZiOTg4YzhlOGIyOWE1ZGJjZDgxKQorICBzZXQoTUQ1X1BQTV80MjBNX0lTTE9XXzNfOCA3OWVjYTkxNzU2NTJjZWQ3NTUxNTVjOTBlNzg1YTk5NikKKyAgc2V0KE1ENV9QUE1fNDIwTV9JU0xPV18xXzQgNzljZDc3OGY4YmYxYTExNzY5MDA1MmNhY2RkNTRlY2EpCisgIHNldChNRDVfUFBNXzQyME1fSVNMT1dfMV84IDM5MWIzZDRhY2E2NDBjODU2N2Q2Zjg3NDVlYjIxNDJmKQorICBzZXQoTUQ1X0JNUF80MjBfSVNMT1dfMjU2IDQ5ODAxODVlMzc3NmU4OWJkOTMxNzM2ZTFjZGRlZWU2KQorICBzZXQoTUQ1X0JNUF80MjBfSVNMT1dfNTY1IGJmOWQxM2UxNmM0OTIzYjkyZTFmYWE2MDRkNzkyMmNiKQorICBzZXQoTUQ1X0JNUF80MjBfSVNMT1dfNTY1RCA2YmRlNzE1MjZhY2M0NGJjZmY3NmY2OTZkZjg2MzhkMikKKyAgc2V0KE1ENV9CTVBfNDIwTV9JU0xPV181NjUgOGRjMDE4NTI0NTM1M2NmYTMyYWQ5NzAyNzM0MjIxNmYpCisgIHNldChNRDVfQk1QXzQyME1fSVNMT1dfNTY1RCBjZTAzNDAzN2QyMTJiYzQwMzMzMGRmNmY5MTVjMTYxYikKKyAgc2V0KE1ENV9QUE1fNDIwX0lTTE9XX1NLSVAxNV8zMSBjNGM2NWMxZTQzZDcyNzVjZDUwMzI4YTYxZTY1MzRmMCkKKyAgc2V0KE1ENV9QUE1fNDIwX0lTTE9XX0FSSV9TS0lQMTZfMTM5IDA4N2M2YjEyM2RiMTZhYzAwY2I4OGM1YjU5MGJiNzRhKQorICBzZXQoTUQ1X1BQTV80MjBfSVNMT1dfUFJPR19DUk9QNjJ4NjJfNzFfNzEgMjZlYjM2Y2NjN2QxZjBjYjgwY2RhYmIwYWM4YjVkOTkpCisgIHNldChNRDVfUFBNXzQyMF9JU0xPV19BUklfQ1JPUDUzeDUzXzRfNCA4ODZjNjc3NWFmMjIzNzAyNTcxMjJmOGIxNjIwN2U2ZCkKKyAgc2V0KE1ENV9QUE1fNDQ0X0lTTE9XX1NLSVAxXzYgNTYwNmY4Njg3NGNmMjZiOGZjZWUxMTE3YTBhNDM2YTYpCisgIHNldChNRDVfUFBNXzQ0NF9JU0xPV19QUk9HX0NST1A5OHg5OF8xM18xMyBkYjg3ZGM3Y2UyNmJjZGM3YTZiNTYyMzljZTJiOWQ2YykKKyAgc2V0KE1ENV9QUE1fNDQ0X0lTTE9XX0FSSV9DUk9QMzd4MzdfMF8wIGNiNTdiMzJiZDZkMDNlMzU0MzIzNjJmN2JmMTg0YjZkKQorICBzZXQoTUQ1X0pQRUdfQ1JPUCBiNDE5N2YzNzdlNjIxYzRlOWIxZDIwNDcxNDMyNjEwZCkKK2VuZGlmKCkKKworaWYoV0lUSF9KQVZBKQorICBhZGRfdGVzdChUSlVuaXRUZXN0CisgICAgJHtKYXZhX0pBVkFfRVhFQ1VUQUJMRX0gJHtKQVZBQVJHU30gLWNwIGphdmEvdHVyYm9qcGVnLmphcgorICAgICAgLURqYXZhLmxpYnJhcnkucGF0aD0ke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtPQkpESVJ9CisgICAgICBUSlVuaXRUZXN0KQorICBhZGRfdGVzdChUSlVuaXRUZXN0LXl1dgorICAgICR7SmF2YV9KQVZBX0VYRUNVVEFCTEV9ICR7SkFWQUFSR1N9IC1jcCBqYXZhL3R1cmJvanBlZy5qYXIKKyAgICAgIC1EamF2YS5saWJyYXJ5LnBhdGg9JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7T0JKRElSfQorICAgICAgVEpVbml0VGVzdCAteXV2KQorICBhZGRfdGVzdChUSlVuaXRUZXN0LXl1di1ub3BhZAorICAgICR7SmF2YV9KQVZBX0VYRUNVVEFCTEV9ICR7SkFWQUFSR1N9IC1jcCBqYXZhL3R1cmJvanBlZy5qYXIKKyAgICAgIC1EamF2YS5saWJyYXJ5LnBhdGg9JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7T0JKRElSfQorICAgICAgVEpVbml0VGVzdCAteXV2IC1ub3l1dnBhZCkKKyAgYWRkX3Rlc3QoVEpVbml0VGVzdC1iaQorICAgICR7SmF2YV9KQVZBX0VYRUNVVEFCTEV9ICR7SkFWQUFSR1N9IC1jcCBqYXZhL3R1cmJvanBlZy5qYXIKKyAgICAgIC1EamF2YS5saWJyYXJ5LnBhdGg9JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7T0JKRElSfQorICAgICAgVEpVbml0VGVzdCAtYmkpCisgIGFkZF90ZXN0KFRKVW5pdFRlc3QtYmkteXV2CisgICAgJHtKYXZhX0pBVkFfRVhFQ1VUQUJMRX0gJHtKQVZBQVJHU30gLWNwIGphdmEvdHVyYm9qcGVnLmphcgorICAgICAgLURqYXZhLmxpYnJhcnkucGF0aD0ke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtPQkpESVJ9CisgICAgICBUSlVuaXRUZXN0IC1iaSAteXV2KQorICBhZGRfdGVzdChUSlVuaXRUZXN0LWJpLXl1di1ub3BhZAorICAgICR7SmF2YV9KQVZBX0VYRUNVVEFCTEV9ICR7SkFWQUFSR1N9IC1jcCBqYXZhL3R1cmJvanBlZy5qYXIKKyAgICAgIC1EamF2YS5saWJyYXJ5LnBhdGg9JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7T0JKRElSfQorICAgICAgVEpVbml0VGVzdCAtYmkgLXl1diAtbm95dXZwYWQpCitlbmRpZigpCisKK3NldChURVNUX0xJQlRZUEVTICIiKQoraWYoRU5BQkxFX1NIQVJFRCkKKyAgc2V0KFRFU1RfTElCVFlQRVMgJHtURVNUX0xJQlRZUEVTfSBzaGFyZWQpCitlbmRpZigpCitpZihFTkFCTEVfU1RBVElDKQorICBzZXQoVEVTVF9MSUJUWVBFUyAke1RFU1RfTElCVFlQRVN9IHN0YXRpYykKK2VuZGlmKCkKKworc2V0KFRFU1RJTUFHRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMpCitzZXQoTUQ1Q01QICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9tZDUvbWQ1Y21wKQoraWYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgIGZpbGUoUkVMQVRJVkVfUEFUSCBURVNUSU1BR0VTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSAke1RFU1RJTUFHRVN9KQorICBmaWxlKFJFTEFUSVZFX1BBVEggTUQ1Q01QICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSAke01ENUNNUH0pCitlbmRpZigpCisKKyMgVGhlIG91dHB1dCBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgRENUL0lEQ1QgYWxnb3JpdGhtcyBkaWZmZXJzIGRlcGVuZGluZyBvbiB0aGUKKyMgdHlwZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIHVzZWQsIHNvIHRoZSBGTE9BVFRFU1QgQ01ha2UgdmFyaWFibGUgbXVzdCBiZQorIyBzZXQgaW4gb3JkZXIgdG8gdGVsbCB0aGUgdGVzdGluZyBzeXN0ZW0gd2hpY2ggZmxvYXRpbmcgcG9pbnQgcmVzdWx0cyBpdAorIyBzaG91bGQgZXhwZWN0OgorIworIyBzc2UgPSB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBleHBlY3RlZCByZXN1bHRzIGZyb20gdGhlIGxpYmpwZWctdHVyYm8gU1NFIFNJTUQKKyMgICAgICAgZXh0ZW5zaW9ucworIyAzMmJpdCA9IHZhbGlkYXRlIGFnYWluc3QgdGhlIGV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUgQyBjb2RlIHdoZW4gcnVubmluZyBvbgorIyAgICAgICAgIGEgMzItYml0IEZQVSAob3Igd2hlbiBTU0UgaXMgYmVpbmcgdXNlZCBmb3IgZmxvYXRpbmcgcG9pbnQgbWF0aCwKKyMgICAgICAgICB3aGljaCBpcyBnZW5lcmFsbHkgdGhlIGRlZmF1bHQgd2l0aCB4ODYtNjQgY29tcGlsZXJzKQorIyA2NGJpdCA9IHZhbGlkYXRlIGFnYWluc3QgdGhlIGV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUgQyBjb2RlIHdoZW4gcnVubmluZworIyAgICAgICAgIG9uIGEgNjQtYml0IEZQVQorIyAzODcgPSB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBleHBlY3RlZCByZXN1bHRzIGZyb20gdGhlIEMgY29kZSB3aGVuIHRoZSAzODcgRlBVCisjICAgICAgIGlzIGJlaW5nIHVzZWQgZm9yIGZsb2F0aW5nIHBvaW50IG1hdGggKHdoaWNoIGlzIGdlbmVyYWxseSB0aGUgZGVmYXVsdAorIyAgICAgICB3aXRoIHg4NiBjb21waWxlcnMpCisjIG1zdmMgPSB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBleHBlY3RlZCByZXN1bHRzIGZyb20gdGhlIEMgY29kZSB3aGVuIGNvbXBpbGVkCisjICAgICAgICB3aXRoIGEgMzItYml0IHZlcnNpb24gb2YgVmlzdWFsIEMrKworCitpZihDUFVfVFlQRSBTVFJFUVVBTCAieDg2XzY0IiBPUiBDUFVfVFlQRSBTVFJFUVVBTCAiaTM4NiIpCisgIGlmKFdJVEhfU0lNRCkKKyAgICBzZXQoREVGQVVMVF9GTE9BVFRFU1Qgc3NlKQorICBlbHNlaWYoQ1BVX1RZUEUgU1RSRVFVQUwgIng4Nl82NCIpCisgICAgc2V0KERFRkFVTFRfRkxPQVRURVNUIDMyYml0KQorICBlbHNlaWYoQ1BVX1RZUEUgU1RSRVFVQUwgImkzODYiIEFORCBNU1ZDKQorICAgIHNldChERUZBVUxUX0ZMT0FUVEVTVCBtc3ZjKQorICBlbmRpZigpCitlbHNlKCkKKyAgaWYoQklUUyBFUVVBTCA2NCkKKyAgICBzZXQoREVGQVVMVF9GTE9BVFRFU1QgNjRiaXQpCisgIGVsc2VpZihCSVRTIEVRVUFMIDMyKQorICAgIHNldChERUZBVUxUX0ZMT0FUVEVTVCAzMmJpdCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIFRoaXMgY2F1c2VzIEZMT0FUVEVTVCB0byByZXNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBXSVRIX1NJTUQgaGFzCisjIGNoYW5nZWQuCitpZihERUZJTkVEIFdJVEhfU0lNRF9JTlQgQU5EIE5PVCBXSVRIX1NJTUQgRVFVQUwgV0lUSF9TSU1EX0lOVCkKKyAgc2V0KEZPUkNFX0ZMT0FUVEVTVCAiRk9SQ0UiKQorZW5kaWYoKQorc2V0KFdJVEhfU0lNRF9JTlQgJHtXSVRIX1NJTUR9IENBQ0hFIElOVEVSTkFMICIiKQorc2V0KEZMT0FUVEVTVCAke0RFRkFVTFRfRkxPQVRURVNUfSBDQUNIRSBTVFJJTkcKKyAgIlRoZSB0eXBlIG9mIGZsb2F0aW5nIHBvaW50IG1hdGggdXNlZCBieSB0aGUgZmxvYXRpbmcgcG9pbnQgRENUL0lEQ1QgYWxnb3JpdGhtcy4gIFRoaXMgdGVsbHMgdGhlIHRlc3Rpbmcgc3lzdGVtIHdoaWNoIG51bWVyaWNhbCByZXN1bHRzIGl0IHNob3VsZCBleHBlY3QgZnJvbSB0aG9zZSB0ZXN0cy4gIFtzc2UgPSBsaWJqcGVnLXR1cmJvIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zLCAzMmJpdCA9IGdlbmVyaWMgMzItYml0IEZQVSBvciBTU0UsIDY0Yml0ID0gZ2VuZXJpYyA2NC1iaXQgRlBVLCAzODcgPSAzODcgRlBVLCBtc3ZjID0gMzItYml0IFZpc3VhbCBTdHVkaW9dIChkZWZhdWx0ID0gJHtERUZBVUxUX0ZMT0FUVEVTVH0pIgorICAke0ZPUkNFX0ZMT0FUVEVTVH0pCittZXNzYWdlKFNUQVRVUyAiRkxPQVRURVNUID0gJHtGTE9BVFRFU1R9IikKKworaWYoRkxPQVRURVNUKQorICBzdHJpbmcoVE9VUFBFUiAke0ZMT0FUVEVTVH0gRkxPQVRURVNUX1VDKQorICBzdHJpbmcoVE9MT1dFUiAke0ZMT0FUVEVTVH0gRkxPQVRURVNUKQorICBpZihOT1QgRkxPQVRURVNUIFNUUkVRVUFMICJzc2UiIEFORCBOT1QgRkxPQVRURVNUIFNUUkVRVUFMICIzMmJpdCIgQU5ECisgICAgTk9UIEZMT0FUVEVTVCBTVFJFUVVBTCAiNjRiaXQiIEFORCBOT1QgRkxPQVRURVNUIFNUUkVRVUFMICIzODciIEFORAorICAgIE5PVCBGTE9BVFRFU1QgU1RSRVFVQUwgIm1zdmMiKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlwiJHtGTE9BVFRFU1R9XCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIEZMT0FUVEVTVC4iKQorICBlbmRpZigpCitlbmRpZigpCisKK2ZvcmVhY2gobGlidHlwZSAke1RFU1RfTElCVFlQRVN9KQorICBpZihsaWJ0eXBlIFNUUkVRVUFMICJzdGF0aWMiKQorICAgIHNldChzdWZmaXggLXN0YXRpYykKKyAgZW5kaWYoKQorICBpZihXSVRIX1RVUkJPSlBFRykKKyAgICBhZGRfdGVzdCh0anVuaXR0ZXN0LSR7bGlidHlwZX0gdGp1bml0dGVzdCR7c3VmZml4fSkKKyAgICBhZGRfdGVzdCh0anVuaXR0ZXN0LSR7bGlidHlwZX0tYWxsb2MgdGp1bml0dGVzdCR7c3VmZml4fSAtYWxsb2MpCisgICAgYWRkX3Rlc3QodGp1bml0dGVzdC0ke2xpYnR5cGV9LXl1diB0anVuaXR0ZXN0JHtzdWZmaXh9IC15dXYpCisgICAgYWRkX3Rlc3QodGp1bml0dGVzdC0ke2xpYnR5cGV9LXl1di1hbGxvYyB0anVuaXR0ZXN0JHtzdWZmaXh9IC15dXYgLWFsbG9jKQorICAgIGFkZF90ZXN0KHRqdW5pdHRlc3QtJHtsaWJ0eXBlfS15dXYtbm9wYWQgdGp1bml0dGVzdCR7c3VmZml4fSAteXV2IC1ub3l1dnBhZCkKKyAgICBhZGRfdGVzdCh0anVuaXR0ZXN0LSR7bGlidHlwZX0tYm1wIHRqdW5pdHRlc3Qke3N1ZmZpeH0gLWJtcCkKKworICAgIHNldChNRDVfUFBNX0dSQVlfVElMRSA4OWQzY2EyMTIxM2Q5ZDg2NGI1MGI0ZTRlN2RlNGNhNikKKyAgICBzZXQoTUQ1X1BQTV80MjBfOHg4X1RJTEUgODQ3ZmNlYWIxNWM1YjdiOTExY2I5ODZjZjBmNzFkZTMpCisgICAgc2V0KE1ENV9QUE1fNDIwXzE2eDE2X1RJTEUgY2E0NTU1MmE5MzY4N2UwNzhmNzEzN2NjNDEyNmE3YjApCisgICAgc2V0KE1ENV9QUE1fNDIwXzMyeDMyX1RJTEUgZDg2NzZmMWQ2YjY4ZGYzNTgzNTNiYmE5ODQ0ZjRhMDApCisgICAgc2V0KE1ENV9QUE1fNDIwXzY0eDY0X1RJTEUgNGU0YzFhM2Q3ZWE0YmFjZTRmODY4YmNiZTgzYjcwNTApCisgICAgc2V0KE1ENV9QUE1fNDIwXzEyOHgxMjhfVElMRSBmMjRjMzQyOWM1MjI2NTgzMmJlYWI5ZGY3MmEwY2VhZSkKKyAgICBzZXQoTUQ1X1BQTV80MjBNXzh4OF9USUxFIGJjMjUzMjBlMWY0YzMxY2UyZTYxMGU0M2U5ZmQxNzNjKQorICAgIHNldChNRDVfUFBNXzQyME1fVElMRSA3NWZmZGYxNDYwMjI1OGM1YzE4OTUyMmFmNTdmYTYwNSkKKyAgICBzZXQoTUQ1X1BQTV80MjJfOHg4X1RJTEUgZDgzZGFjZDlmYzczYjBhNmYxMGMwOWFjYWQ2NGViMWUpCisgICAgc2V0KE1ENV9QUE1fNDIyXzE2eDE2X1RJTEUgMzUwNzdmYjYxMGQ3MmRkNzQzYjFlYjBjYmNmZTEwZmIpCisgICAgc2V0KE1ENV9QUE1fNDIyXzMyeDMyX1RJTEUgZTY5MDJlZDhhNDQ5ZWNjMGYwZDZmMmJmOTQ1ZjY1ZjcpCisgICAgc2V0KE1ENV9QUE1fNDIyXzY0eDY0X1RJTEUgMmI0NTAyYThmMzE2Y2VkYmRlMWRhN2JjZTNkMjIzMWUpCisgICAgc2V0KE1ENV9QUE1fNDIyXzEyOHgxMjhfVElMRSBmMGI1NjE3ZDU3OGY1ZTEzYzhlZWUyMTVkNjRkNDg3NykKKyAgICBzZXQoTUQ1X1BQTV80MjJNXzh4OF9USUxFIDgyODk0MWQ3ZjQxY2Q2MjgzYWJkNmJlZmZiN2ZkNTFkKQorICAgIHNldChNRDVfUFBNXzQyMk1fVElMRSBlODc3YWUxMzI0YzRhMjgwYjk1Mzc2ZjdmMDE4MTcyZikKKyAgICBzZXQoTUQ1X1BQTV80NDRfVElMRSA3OTY0ZTQxZTY3Y2ZiOGQwYTU4N2MwYWE0Nzk4ZjljMykKKworICAgICMgVGVzdCBjb21wcmVzc2luZyBmcm9tL2RlY29tcHJlc3NpbmcgdG8gYW4gYXJiaXRyYXJ5IHN1YnJlZ2lvbiBvZiBhIGxhcmdlcgorICAgICMgaW1hZ2UgYnVmZmVyCisgICAgYWRkX3Rlc3QodGpiZW5jaC0ke2xpYnR5cGV9LXRpbGUtY3AKKyAgICAgICR7Q01BS0VfQ09NTUFORH0gLUUgY29weV9pZl9kaWZmZXJlbnQgJHtURVNUSU1BR0VTfS90ZXN0b3JpZy5wcG0KKyAgICAgICAgdGVzdG91dF90aWxlLnBwbSkKKyAgICBhZGRfdGVzdCh0amJlbmNoLSR7bGlidHlwZX0tdGlsZQorICAgICAgdGpiZW5jaCR7c3VmZml4fSB0ZXN0b3V0X3RpbGUucHBtIDk1IC1yZ2IgLXF1aWV0IC10aWxlIC1iZW5jaHRpbWUgMC4wMQorICAgICAgICAtd2FybXVwIDApCisgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXModGpiZW5jaC0ke2xpYnR5cGV9LXRpbGUKKyAgICAgIFBST1BFUlRJRVMgREVQRU5EUyB0amJlbmNoLSR7bGlidHlwZX0tdGlsZS1jcCkKKworICAgIGZvcmVhY2godGlsZSA4IDE2IDMyIDY0IDEyOCkKKyAgICAgIGFkZF90ZXN0KHRqYmVuY2gtJHtsaWJ0eXBlfS10aWxlLWdyYXktJHt0aWxlfXgke3RpbGV9LWNtcAorICAgICAgICAke01ENUNNUH0gJHtNRDVfUFBNX0dSQVlfVElMRX0KKyAgICAgICAgICB0ZXN0b3V0X3RpbGVfR1JBWV9ROTVfJHt0aWxlfXgke3RpbGV9LnBwbSkKKyAgICAgIGZvcmVhY2goc3Vic2FtcCA0MjAgNDIyKQorICAgICAgICBhZGRfdGVzdCh0amJlbmNoLSR7bGlidHlwZX0tdGlsZS0ke3N1YnNhbXB9LSR7dGlsZX14JHt0aWxlfS1jbXAKKyAgICAgICAgICAke01ENUNNUH0gJHtNRDVfUFBNXyR7c3Vic2FtcH1fJHt0aWxlfXgke3RpbGV9X1RJTEV9CisgICAgICAgICAgICB0ZXN0b3V0X3RpbGVfJHtzdWJzYW1wfV9ROTVfJHt0aWxlfXgke3RpbGV9LnBwbSkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgICAgYWRkX3Rlc3QodGpiZW5jaC0ke2xpYnR5cGV9LXRpbGUtNDQ0LSR7dGlsZX14JHt0aWxlfS1jbXAKKyAgICAgICAgJHtNRDVDTVB9ICR7TUQ1X1BQTV80NDRfVElMRX0KKyAgICAgICAgICB0ZXN0b3V0X3RpbGVfNDQ0X1E5NV8ke3RpbGV9eCR7dGlsZX0ucHBtKQorICAgICAgZm9yZWFjaChzdWJzYW1wIGdyYXkgNDIwIDQyMiA0NDQpCisgICAgICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKHRqYmVuY2gtJHtsaWJ0eXBlfS10aWxlLSR7c3Vic2FtcH0tJHt0aWxlfXgke3RpbGV9LWNtcAorICAgICAgICAgIFBST1BFUlRJRVMgREVQRU5EUyB0amJlbmNoLSR7bGlidHlwZX0tdGlsZSkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVuZGZvcmVhY2goKQorCisgICAgYWRkX3Rlc3QodGpiZW5jaC0ke2xpYnR5cGV9LXRpbGVtLWNwCisgICAgICAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlfaWZfZGlmZmVyZW50ICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtCisgICAgICAgIHRlc3RvdXRfdGlsZW0ucHBtKQorICAgIGFkZF90ZXN0KHRqYmVuY2gtJHtsaWJ0eXBlfS10aWxlbQorICAgICAgdGpiZW5jaCR7c3VmZml4fSB0ZXN0b3V0X3RpbGVtLnBwbSA5NSAtcmdiIC1mYXN0dXBzYW1wbGUgLXF1aWV0IC10aWxlCisgICAgICAgIC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDApCisgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXModGpiZW5jaC0ke2xpYnR5cGV9LXRpbGVtCisgICAgICBQUk9QRVJUSUVTIERFUEVORFMgdGpiZW5jaC0ke2xpYnR5cGV9LXRpbGVtLWNwKQorCisgICAgYWRkX3Rlc3QodGpiZW5jaC0ke2xpYnR5cGV9LXRpbGUtNDIwbS04eDgtY21wCisgICAgICAke01ENUNNUH0gJHtNRDVfUFBNXzQyME1fOHg4X1RJTEV9IHRlc3RvdXRfdGlsZW1fNDIwX1E5NV84eDgucHBtKQorICAgIGFkZF90ZXN0KHRqYmVuY2gtJHtsaWJ0eXBlfS10aWxlLTQyMm0tOHg4LWNtcAorICAgICAgJHtNRDVDTVB9ICR7TUQ1X1BQTV80MjJNXzh4OF9USUxFfSB0ZXN0b3V0X3RpbGVtXzQyMl9ROTVfOHg4LnBwbSkKKyAgICBmb3JlYWNoKHRpbGUgMTYgMzIgNjQgMTI4KQorICAgICAgZm9yZWFjaChzdWJzYW1wIDQyMCA0MjIpCisgICAgICAgIGFkZF90ZXN0KHRqYmVuY2gtJHtsaWJ0eXBlfS10aWxlLSR7c3Vic2FtcH1tLSR7dGlsZX14JHt0aWxlfS1jbXAKKyAgICAgICAgICAke01ENUNNUH0gJHtNRDVfUFBNXyR7c3Vic2FtcH1NX1RJTEV9CisgICAgICAgICAgICB0ZXN0b3V0X3RpbGVtXyR7c3Vic2FtcH1fUTk1XyR7dGlsZX14JHt0aWxlfS5wcG0pCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbmRmb3JlYWNoKCkKKyAgICBmb3JlYWNoKHRpbGUgOCAxNiAzMiA2NCAxMjgpCisgICAgICBmb3JlYWNoKHN1YnNhbXAgNDIwIDQyMikKKyAgICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXModGpiZW5jaC0ke2xpYnR5cGV9LXRpbGUtJHtzdWJzYW1wfW0tJHt0aWxlfXgke3RpbGV9LWNtcAorICAgICAgICAgIFBST1BFUlRJRVMgREVQRU5EUyB0amJlbmNoLSR7bGlidHlwZX0tdGlsZW0pCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbmRmb3JlYWNoKCkKKyAgZW5kaWYoKQorCisgICMgVGhlc2UgdGVzdHMgYXJlIGNhcmVmdWxseSBjcmFmdGVkIHRvIHByb3ZpZGUgZnVsbCBjb3ZlcmFnZSBvZiBhcyBtYW55IG9mCisgICMgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtcyBhcyBwb3NzaWJsZSAoaW5jbHVkaW5nIGFsbCBvZiB0aGUKKyAgIyBTSU1ELWFjY2VsZXJhdGVkIG9uZXMuKQorCisgIG1hY3JvKGFkZF9iaXR0ZXN0IFBST0cgTkFNRSBBUkdTIE9VVEZJTEUgSU5GSUxFIE1ENVNVTSkKKyAgICBhZGRfdGVzdCgke1BST0d9LSR7bGlidHlwZX0tJHtOQU1FfQorICAgICAgJHtQUk9HfSR7c3VmZml4fSAke0FSR1N9IC1vdXRmaWxlICR7T1VURklMRX0gJHtJTkZJTEV9KQorICAgIGFkZF90ZXN0KCR7UFJPR30tJHtsaWJ0eXBlfS0ke05BTUV9LWNtcAorICAgICAgJHtNRDVDTVB9ICR7TUQ1U1VNfSAke09VVEZJTEV9KQorICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKCR7UFJPR30tJHtsaWJ0eXBlfS0ke05BTUV9LWNtcCBQUk9QRVJUSUVTCisgICAgICBERVBFTkRTICR7UFJPR30tJHtsaWJ0eXBlfS0ke05BTUV9KQorICAgIGlmKCR7QVJHQ30gR1JFQVRFUiA2KQorICAgICAgc2V0KERFUEVORFMgJHtBUkdOfSkKKyAgICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKCR7UFJPR30tJHtsaWJ0eXBlfS0ke05BTUV9IFBST1BFUlRJRVMKKyAgICAgICAgREVQRU5EUyAke0RFUEVORFN9KQorICAgIGVuZGlmKCkKKyAgZW5kbWFjcm8oKQorCisgICMgQ0M6IG51bGwgIFNBTVA6IGZ1bGxzaXplICBGRENUOiBpc2xvdyAgRU5UOiBodWZmCisgIGFkZF9iaXR0ZXN0KGNqcGVnIHJnYi1pc2xvdyAiLXJnYjstZGN0O2ludDstaWNjOyR7VEVTVElNQUdFU30vdGVzdDEuaWNjIgorICAgIHRlc3RvdXRfcmdiX2lzbG93LmpwZyAke1RFU1RJTUFHRVN9L3Rlc3RvcmlnLnBwbQorICAgICR7TUQ1X0pQRUdfUkdCX0lTTE9XfSkKKworICAjIENDOiBudWxsICBTQU1QOiBmdWxsc2l6ZSAgSURDVDogaXNsb3cgIEVOVDogaHVmZgorICBhZGRfYml0dGVzdChkanBlZyByZ2ItaXNsb3cgIi1kY3Q7aW50Oy1wcG07LWljYzt0ZXN0b3V0X3JnYl9pc2xvdy5pY2MiCisgICAgdGVzdG91dF9yZ2JfaXNsb3cucHBtIHRlc3RvdXRfcmdiX2lzbG93LmpwZworICAgICR7TUQ1X1BQTV9SR0JfSVNMT1d9IGNqcGVnLSR7bGlidHlwZX0tcmdiLWlzbG93KQorCisgIGFkZF90ZXN0KGRqcGVnLSR7bGlidHlwZX0tcmdiLWlzbG93LWljYy1jbXAKKyAgICAke01ENUNNUH0gYjA2YTM5ZDczMDEyOTEyMmU4NWMxMzYzZWQxYmJjOWUgdGVzdG91dF9yZ2JfaXNsb3cuaWNjKQorCisgIGFkZF9iaXR0ZXN0KGpwZWd0cmFuIGljYyAiLWNvcHk7YWxsOy1pY2M7JHtURVNUSU1BR0VTfS90ZXN0Mi5pY2MiCisgICAgdGVzdG91dF9yZ2JfaXNsb3cyLmpwZyB0ZXN0b3V0X3JnYl9pc2xvdy5qcGcgJHtNRDVfSlBFR19SR0JfSVNMT1cyfSkKKworICBpZihOT1QgV0lUSF8xMkJJVCkKKyAgICAjIENDOiBSR0ItPlJHQjU2NSAgU0FNUDogZnVsbHNpemUgIElEQ1Q6IGlzbG93ICBFTlQ6IGh1ZmYKKyAgICBhZGRfYml0dGVzdChkanBlZyByZ2ItaXNsb3ctNTY1ICItZGN0O2ludDstcmdiNTY1Oy1kaXRoZXI7bm9uZTstYm1wIgorICAgICAgdGVzdG91dF9yZ2JfaXNsb3dfNTY1LmJtcCB0ZXN0b3V0X3JnYl9pc2xvdy5qcGcKKyAgICAgICR7TUQ1X0JNUF9SR0JfSVNMT1dfNTY1fSBjanBlZy0ke2xpYnR5cGV9LXJnYi1pc2xvdykKKworICAgICMgQ0M6IFJHQi0+UkdCNTY1IChkaXRoZXJlZCkgIFNBTVA6IGZ1bGxzaXplICBJRENUOiBpc2xvdyAgRU5UOiBodWZmCisgICAgYWRkX2JpdHRlc3QoZGpwZWcgcmdiLWlzbG93LTU2NUQgIi1kY3Q7aW50Oy1yZ2I1NjU7LWJtcCIKKyAgICAgIHRlc3RvdXRfcmdiX2lzbG93XzU2NUQuYm1wIHRlc3RvdXRfcmdiX2lzbG93LmpwZworICAgICAgJHtNRDVfQk1QX1JHQl9JU0xPV181NjVEfSBjanBlZy0ke2xpYnR5cGV9LXJnYi1pc2xvdykKKyAgZW5kaWYoKQorCisgICMgQ0M6IFJHQi0+WUNDICBTQU1QOiBmdWxsc2l6ZS9oMnYxICBGRENUOiBpZmFzdCAgRU5UOiAyLXBhc3MgaHVmZgorICBhZGRfYml0dGVzdChjanBlZyA0MjItaWZhc3Qtb3B0ICItc2FtcGxlOzJ4MTstZGN0O2Zhc3Q7LW9wdCIKKyAgICB0ZXN0b3V0XzQyMl9pZmFzdF9vcHQuanBnICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtCisgICAgJHtNRDVfSlBFR180MjJfSUZBU1RfT1BUfSkKKworICAjIENDOiBZQ0MtPlJHQiAgU0FNUDogZnVsbHNpemUvaDJ2MSBmYW5jeSAgSURDVDogaWZhc3QgIEVOVDogaHVmZgorICBhZGRfYml0dGVzdChkanBlZyA0MjItaWZhc3QgIi1kY3Q7ZmFzdCIKKyAgICB0ZXN0b3V0XzQyMl9pZmFzdC5wcG0gdGVzdG91dF80MjJfaWZhc3Rfb3B0LmpwZworICAgICR7TUQ1X1BQTV80MjJfSUZBU1R9IGNqcGVnLSR7bGlidHlwZX0tNDIyLWlmYXN0LW9wdCkKKworICAjIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MSBtZXJnZWQgIElEQ1Q6IGlmYXN0ICBFTlQ6IGh1ZmYKKyAgYWRkX2JpdHRlc3QoZGpwZWcgNDIybS1pZmFzdCAiLWRjdDtmYXN0Oy1ub3Ntb290aCIKKyAgICB0ZXN0b3V0XzQyMm1faWZhc3QucHBtIHRlc3RvdXRfNDIyX2lmYXN0X29wdC5qcGcKKyAgICAke01ENV9QUE1fNDIyTV9JRkFTVH0gY2pwZWctJHtsaWJ0eXBlfS00MjItaWZhc3Qtb3B0KQorCisgIGlmKE5PVCBXSVRIXzEyQklUKQorICAgICMgQ0M6IFlDQy0+UkdCNTY1ICBTQU1QOiBoMnYxIG1lcmdlZCAgSURDVDogaWZhc3QgIEVOVDogaHVmZgorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDQyMm0taWZhc3QtNTY1CisgICAgICAiLWRjdDtpbnQ7LW5vc21vb3RoOy1yZ2I1NjU7LWRpdGhlcjtub25lOy1ibXAiCisgICAgICB0ZXN0b3V0XzQyMm1faWZhc3RfNTY1LmJtcCB0ZXN0b3V0XzQyMl9pZmFzdF9vcHQuanBnCisgICAgICAke01ENV9CTVBfNDIyTV9JRkFTVF81NjV9IGNqcGVnLSR7bGlidHlwZX0tNDIyLWlmYXN0LW9wdCkKKworICAgICMgQ0M6IFlDQy0+UkdCNTY1IChkaXRoZXJlZCkgIFNBTVA6IGgydjEgbWVyZ2VkICBJRENUOiBpZmFzdCAgRU5UOiBodWZmCisgICAgYWRkX2JpdHRlc3QoZGpwZWcgNDIybS1pZmFzdC01NjVEICItZGN0O2ludDstbm9zbW9vdGg7LXJnYjU2NTstYm1wIgorICAgICAgdGVzdG91dF80MjJtX2lmYXN0XzU2NUQuYm1wIHRlc3RvdXRfNDIyX2lmYXN0X29wdC5qcGcKKyAgICAgICR7TUQ1X0JNUF80MjJNX0lGQVNUXzU2NUR9IGNqcGVnLSR7bGlidHlwZX0tNDIyLWlmYXN0LW9wdCkKKyAgZW5kaWYoKQorCisgICMgQ0M6IFJHQi0+WUNDICBTQU1QOiBmdWxsc2l6ZS9oMnYyICBGRENUOiBpZmFzdCAgRU5UOiBwcm9nIGh1ZmYKKyAgYWRkX2JpdHRlc3QoY2pwZWcgNDIwLXExMDAtaWZhc3QtcHJvZworICAgICItc2FtcGxlOzJ4MjstcXVhbGl0eTsxMDA7LWRjdDtmYXN0Oy1wcm9nIgorICAgIHRlc3RvdXRfNDIwX3ExMDBfaWZhc3RfcHJvZy5qcGcgJHtURVNUSU1BR0VTfS90ZXN0b3JpZy5wcG0KKyAgICAke01ENV9KUEVHXzQyMF9JRkFTVF9RMTAwX1BST0d9KQorCisgICMgQ0M6IFlDQy0+UkdCICBTQU1QOiBmdWxsc2l6ZS9oMnYyIGZhbmN5ICBJRENUOiBpZmFzdCAgRU5UOiBwcm9nIGh1ZmYKKyAgYWRkX2JpdHRlc3QoZGpwZWcgNDIwLXExMDAtaWZhc3QtcHJvZyAiLWRjdDtmYXN0IgorICAgIHRlc3RvdXRfNDIwX3ExMDBfaWZhc3QucHBtIHRlc3RvdXRfNDIwX3ExMDBfaWZhc3RfcHJvZy5qcGcKKyAgICAke01ENV9QUE1fNDIwX1ExMDBfSUZBU1R9IGNqcGVnLSR7bGlidHlwZX0tNDIwLXExMDAtaWZhc3QtcHJvZykKKworICAjIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IGlmYXN0ICBFTlQ6IHByb2cgaHVmZgorICBhZGRfYml0dGVzdChkanBlZyA0MjBtLXExMDAtaWZhc3QtcHJvZyAiLWRjdDtmYXN0Oy1ub3Ntb290aCIKKyAgICB0ZXN0b3V0XzQyMG1fcTEwMF9pZmFzdC5wcG0gdGVzdG91dF80MjBfcTEwMF9pZmFzdF9wcm9nLmpwZworICAgICR7TUQ1X1BQTV80MjBNX1ExMDBfSUZBU1R9IGNqcGVnLSR7bGlidHlwZX0tNDIwLXExMDAtaWZhc3QtcHJvZykKKworICAjIENDOiBSR0ItPkdyYXkgIFNBTVA6IGZ1bGxzaXplICBGRENUOiBpc2xvdyAgRU5UOiBodWZmCisgIGFkZF9iaXR0ZXN0KGNqcGVnIGdyYXktaXNsb3cgIi1ncmF5Oy1kY3Q7aW50IgorICAgIHRlc3RvdXRfZ3JheV9pc2xvdy5qcGcgJHtURVNUSU1BR0VTfS90ZXN0b3JpZy5wcG0KKyAgICAke01ENV9KUEVHX0dSQVlfSVNMT1d9KQorCisgICMgQ0M6IEdyYXktPkdyYXkgIFNBTVA6IGZ1bGxzaXplICBJRENUOiBpc2xvdyAgRU5UOiBodWZmCisgIGFkZF9iaXR0ZXN0KGRqcGVnIGdyYXktaXNsb3cgIi1kY3Q7aW50IgorICAgIHRlc3RvdXRfZ3JheV9pc2xvdy5wcG0gdGVzdG91dF9ncmF5X2lzbG93LmpwZworICAgICR7TUQ1X1BQTV9HUkFZX0lTTE9XfSBjanBlZy0ke2xpYnR5cGV9LWdyYXktaXNsb3cpCisKKyAgIyBDQzogR3JheS0+UkdCICBTQU1QOiBmdWxsc2l6ZSAgSURDVDogaXNsb3cgIEVOVDogaHVmZgorICBhZGRfYml0dGVzdChkanBlZyBncmF5LWlzbG93LXJnYiAiLWRjdDtpbnQ7LXJnYiIKKyAgICB0ZXN0b3V0X2dyYXlfaXNsb3dfcmdiLnBwbSB0ZXN0b3V0X2dyYXlfaXNsb3cuanBnCisgICAgJHtNRDVfUFBNX0dSQVlfSVNMT1dfUkdCfSBjanBlZy0ke2xpYnR5cGV9LWdyYXktaXNsb3cpCisKKyAgaWYoTk9UIFdJVEhfMTJCSVQpCisgICAgIyBDQzogR3JheS0+UkdCNTY1ICBTQU1QOiBmdWxsc2l6ZSAgSURDVDogaXNsb3cgIEVOVDogaHVmZgorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIGdyYXktaXNsb3ctNTY1ICItZGN0O2ludDstcmdiNTY1Oy1kaXRoZXI7bm9uZTstYm1wIgorICAgICAgdGVzdG91dF9ncmF5X2lzbG93XzU2NS5ibXAgdGVzdG91dF9ncmF5X2lzbG93LmpwZworICAgICAgJHtNRDVfQk1QX0dSQVlfSVNMT1dfNTY1fSBjanBlZy0ke2xpYnR5cGV9LWdyYXktaXNsb3cpCisKKyAgICAjIENDOiBHcmF5LT5SR0I1NjUgKGRpdGhlcmVkKSAgU0FNUDogZnVsbHNpemUgIElEQ1Q6IGlzbG93ICBFTlQ6IGh1ZmYKKyAgICBhZGRfYml0dGVzdChkanBlZyBncmF5LWlzbG93LTU2NUQgIi1kY3Q7aW50Oy1yZ2I1NjU7LWJtcCIKKyAgICAgIHRlc3RvdXRfZ3JheV9pc2xvd181NjVELmJtcCB0ZXN0b3V0X2dyYXlfaXNsb3cuanBnCisgICAgICAke01ENV9CTVBfR1JBWV9JU0xPV181NjVEfSBjanBlZy0ke2xpYnR5cGV9LWdyYXktaXNsb3cpCisgIGVuZGlmKCkKKworICAjIENDOiBSR0ItPllDQyAgU0FNUDogZnVsbHNpemUgc21vb3RoL2gydjIgc21vb3RoICBGRENUOiBpc2xvdworICAjIEVOVDogMi1wYXNzIGh1ZmYKKyAgYWRkX2JpdHRlc3QoY2pwZWcgNDIwcy1pZmFzdC1vcHQgIi1zYW1wbGU7MngyOy1zbW9vdGg7MTstZGN0O2ludDstb3B0IgorICAgIHRlc3RvdXRfNDIwc19pZmFzdF9vcHQuanBnICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtCisgICAgJHtNRDVfSlBFR180MjBTX0lGQVNUX09QVH0pCisKKyAgaWYoRkxPQVRURVNUKQorICAgICMgQ0M6IFJHQi0+WUNDICBTQU1QOiBmdWxsc2l6ZS9pbnQgIEZEQ1Q6IGZsb2F0ICBFTlQ6IHByb2cgaHVmZgorICAgIGFkZF9iaXR0ZXN0KGNqcGVnIDN4Mi1mbG9hdC1wcm9nICItc2FtcGxlOzN4MjstZGN0O2Zsb2F0Oy1wcm9nIgorICAgICAgdGVzdG91dF8zeDJfZmxvYXRfcHJvZy5qcGcgJHtURVNUSU1BR0VTfS90ZXN0b3JpZy5wcG0KKyAgICAgICR7TUQ1X0pQRUdfM3gyX0ZMT0FUX1BST0dfJHtGTE9BVFRFU1RfVUN9fSkKKworICAgICMgQ0M6IFlDQy0+UkdCICBTQU1QOiBmdWxsc2l6ZS9pbnQgIElEQ1Q6IGZsb2F0ICBFTlQ6IHByb2cgaHVmZgorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDN4Mi1mbG9hdC1wcm9nICItZGN0O2Zsb2F0IgorICAgICAgdGVzdG91dF8zeDJfZmxvYXQucHBtIHRlc3RvdXRfM3gyX2Zsb2F0X3Byb2cuanBnCisgICAgICAke01ENV9QUE1fM3gyX0ZMT0FUXyR7RkxPQVRURVNUX1VDfX0gY2pwZWctJHtsaWJ0eXBlfS0zeDItZmxvYXQtcHJvZykKKyAgZW5kaWYoKQorCisgICAgIyBDQzogUkdCLT5ZQ0MgIFNBTVA6IGZ1bGxzaXplL2ludCAgRkRDVDogaWZhc3QgIEVOVDogcHJvZyBodWZmCisgIGFkZF9iaXR0ZXN0KGNqcGVnIDN4Mi1pZmFzdC1wcm9nICItc2FtcGxlOzN4MjstZGN0O2Zhc3Q7LXByb2ciCisgICAgdGVzdG91dF8zeDJfaWZhc3RfcHJvZy5qcGcgJHtURVNUSU1BR0VTfS90ZXN0b3JpZy5wcG0KKyAgICAke01ENV9KUEVHXzN4Ml9JRkFTVF9QUk9HfSkKKworICAjIENDOiBZQ0MtPlJHQiAgU0FNUDogZnVsbHNpemUvaW50ICBJRENUOiBpZmFzdCAgRU5UOiBwcm9nIGh1ZmYKKyAgYWRkX2JpdHRlc3QoZGpwZWcgM3gyLWlmYXN0LXByb2cgIi1kY3Q7ZmFzdCIKKyAgICB0ZXN0b3V0XzN4Ml9pZmFzdC5wcG0gdGVzdG91dF8zeDJfaWZhc3RfcHJvZy5qcGcKKyAgICAke01ENV9QUE1fM3gyX0lGQVNUfSBjanBlZy0ke2xpYnR5cGV9LTN4Mi1pZmFzdC1wcm9nKQorCisgIGlmKFdJVEhfQVJJVEhfRU5DKQorICAgICMgQ0M6IFlDQy0+UkdCICBTQU1QOiBmdWxsc2l6ZS9oMnYyICBGRENUOiBpc2xvdyAgRU5UOiBhcml0aAorICAgIGFkZF9iaXR0ZXN0KGNqcGVnIDQyMC1pc2xvdy1hcmkgIi1kY3Q7aW50Oy1hcml0aG1ldGljIgorICAgICAgdGVzdG91dF80MjBfaXNsb3dfYXJpLmpwZyAke1RFU1RJTUFHRVN9L3Rlc3RvcmlnLnBwbQorICAgICAgJHtNRDVfSlBFR180MjBfSVNMT1dfQVJJfSkKKworICAgIGFkZF9iaXR0ZXN0KGpwZWd0cmFuIDQyMC1pc2xvdy1hcmkgIi1hcml0aG1ldGljIgorICAgICAgdGVzdG91dF80MjBfaXNsb3dfYXJpMi5qcGcgJHtURVNUSU1BR0VTfS90ZXN0aW1naW50LmpwZworICAgICAgJHtNRDVfSlBFR180MjBfSVNMT1dfQVJJfSkKKworICAgICMgQ0M6IFlDQy0+UkdCICBTQU1QOiBmdWxsc2l6ZSAgRkRDVDogaXNsb3cgIEVOVDogcHJvZyBhcml0aAorICAgIGFkZF9iaXR0ZXN0KGNqcGVnIDQ0NC1pc2xvdy1wcm9nYXJpCisgICAgICAiLXNhbXBsZTsxeDE7LWRjdDtpbnQ7LXByb2c7LWFyaXRobWV0aWMiCisgICAgICB0ZXN0b3V0XzQ0NF9pc2xvd19wcm9nYXJpLmpwZyAke1RFU1RJTUFHRVN9L3Rlc3RvcmlnLnBwbQorICAgICAgJHtNRDVfSlBFR180NDRfSVNMT1dfUFJPR0FSSX0pCisgIGVuZGlmKCkKKworICBpZihXSVRIX0FSSVRIX0RFQykKKyAgICAjIENDOiBSR0ItPllDQyAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IGlmYXN0ICBFTlQ6IGFyaXRoCisgICAgYWRkX2JpdHRlc3QoZGpwZWcgNDIwbS1pZmFzdC1hcmkgIi1mYXN0Oy1wcG0iCisgICAgICB0ZXN0b3V0XzQyMG1faWZhc3RfYXJpLnBwbSAke1RFU1RJTUFHRVN9L3Rlc3RpbWdhcmkuanBnCisgICAgICAke01ENV9QUE1fNDIwTV9JRkFTVF9BUkl9KQorCisgICAgYWRkX2JpdHRlc3QoanBlZ3RyYW4gNDIwLWlzbG93ICIiCisgICAgICB0ZXN0b3V0XzQyMF9pc2xvdy5qcGcgJHtURVNUSU1BR0VTfS90ZXN0aW1nYXJpLmpwZworICAgICAgJHtNRDVfSlBFR180MjBfSVNMT1d9KQorICBlbmRpZigpCisKKyAgIyAyLzEtLSAgIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDE2eDE2IGlzbG93ICBFTlQ6IGh1ZmYKKyAgIyAxNS84LS0gIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDE1eDE1IGlzbG93ICBFTlQ6IGh1ZmYKKyAgIyAxMy84LS0gIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDEzeDEzIGlzbG93ICBFTlQ6IGh1ZmYKKyAgIyAxMS84LS0gIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDExeDExIGlzbG93ICBFTlQ6IGh1ZmYKKyAgIyA5LzgtLSAgIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDl4OSBpc2xvdyAgRU5UOiBodWZmCisgICMgNy84LS0gICBDQzogWUNDLT5SR0IgIFNBTVA6IGgydjIgbWVyZ2VkICBJRENUOiA3eDcgaXNsb3cvMTR4MTQgaXNsb3cKKyAgIyAgICAgICAgIEVOVDogaHVmZgorICAjIDMvNC0tICAgQ0M6IFlDQy0+UkdCICBTQU1QOiBoMnYyIG1lcmdlZCAgSURDVDogNng2IGlzbG93LzEyeDEyIGlzbG93CisgICMgICAgICAgICBFTlQ6IGh1ZmYKKyAgIyA1LzgtLSAgIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDV4NSBpc2xvdy8xMHgxMCBpc2xvdworICAjICAgICAgICAgRU5UOiBodWZmCisgICMgMS8yLS0gICBDQzogWUNDLT5SR0IgIFNBTVA6IGgydjIgbWVyZ2VkICBJRENUOiA0eDQgaXNsb3cvOHg4IGlzbG93CisgICMgICAgICAgICBFTlQ6IGh1ZmYKKyAgIyAzLzgtLSAgIENDOiBZQ0MtPlJHQiAgU0FNUDogaDJ2MiBtZXJnZWQgIElEQ1Q6IDN4MyBpc2xvdy82eDYgaXNsb3cKKyAgIyAgICAgICAgIEVOVDogaHVmZgorICAjIDEvNC0tICAgQ0M6IFlDQy0+UkdCICBTQU1QOiBoMnYyIG1lcmdlZCAgSURDVDogMngyIGlzbG93LzR4NCBpc2xvdworICAjICAgICAgICAgRU5UOiBodWZmCisgICMgMS84LS0gICBDQzogWUNDLT5SR0IgIFNBTVA6IGgydjIgbWVyZ2VkICBJRENUOiAxeDEgaXNsb3cvMngyIGlzbG93CisgICMgICAgICAgICBFTlQ6IGh1ZmYKKyAgZm9yZWFjaChzY2FsZSAyXzEgMTVfOCAxM184IDExXzggOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfOCkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXyIgIi8iIHNjYWxlYXJnICR7c2NhbGV9KQorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDQyMG0taXNsb3ctJHtzY2FsZX0KKyAgICAgICItZGN0O2ludDstc2NhbGU7JHtzY2FsZWFyZ307LW5vc21vb3RoOy1wcG0iCisgICAgICB0ZXN0b3V0XzQyMG1faXNsb3dfJHtzY2FsZX0ucHBtICR7VEVTVElNQUdFU30vJHtURVNUT1JJR30KKyAgICAgICR7TUQ1X1BQTV80MjBNX0lTTE9XXyR7c2NhbGV9fSkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYoTk9UIFdJVEhfMTJCSVQpCisgICAgIyBDQzogWUNDLT5SR0IgKGRpdGhlcmVkKSAgU0FNUDogaDJ2MiBmYW5jeSAgSURDVDogaXNsb3cgIEVOVDogaHVmZgorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDQyMC1pc2xvdy0yNTYgIi1kY3Q7aW50Oy1jb2xvcnM7MjU2Oy1ibXAiCisgICAgICB0ZXN0b3V0XzQyMF9pc2xvd18yNTYuYm1wICR7VEVTVElNQUdFU30vJHtURVNUT1JJR30KKyAgICAgICR7TUQ1X0JNUF80MjBfSVNMT1dfMjU2fSkKKworICAgICMgQ0M6IFlDQy0+UkdCNTY1ICBTQU1QOiBoMnYyIGZhbmN5ICBJRENUOiBpc2xvdyAgRU5UOiBodWZmCisgICAgYWRkX2JpdHRlc3QoZGpwZWcgNDIwLWlzbG93LTU2NSAiLWRjdDtpbnQ7LXJnYjU2NTstZGl0aGVyO25vbmU7LWJtcCIKKyAgICAgIHRlc3RvdXRfNDIwX2lzbG93XzU2NS5ibXAgJHtURVNUSU1BR0VTfS8ke1RFU1RPUklHfQorICAgICAgJHtNRDVfQk1QXzQyMF9JU0xPV181NjV9KQorCisgICAgIyBDQzogWUNDLT5SR0I1NjUgKGRpdGhlcmVkKSAgU0FNUDogaDJ2MiBmYW5jeSAgSURDVDogaXNsb3cgIEVOVDogaHVmZgorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDQyMC1pc2xvdy01NjVEICItZGN0O2ludDstcmdiNTY1Oy1ibXAiCisgICAgICB0ZXN0b3V0XzQyMF9pc2xvd181NjVELmJtcCAke1RFU1RJTUFHRVN9LyR7VEVTVE9SSUd9CisgICAgICAke01ENV9CTVBfNDIwX0lTTE9XXzU2NUR9KQorCisgICAgIyBDQzogWUNDLT5SR0I1NjUgIFNBTVA6IGgydjIgbWVyZ2VkICBJRENUOiBpc2xvdyAgRU5UOiBodWZmCisgICAgYWRkX2JpdHRlc3QoZGpwZWcgNDIwbS1pc2xvdy01NjUKKyAgICAgICItZGN0O2ludDstbm9zbW9vdGg7LXJnYjU2NTstZGl0aGVyO25vbmU7LWJtcCIKKyAgICAgIHRlc3RvdXRfNDIwbV9pc2xvd181NjUuYm1wICR7VEVTVElNQUdFU30vJHtURVNUT1JJR30KKyAgICAgICR7TUQ1X0JNUF80MjBNX0lTTE9XXzU2NX0pCisKKyAgICAjIENDOiBZQ0MtPlJHQjU2NSAoZGl0aGVyZWQpICBTQU1QOiBoMnYyIG1lcmdlZCAgSURDVDogaXNsb3cgIEVOVDogaHVmZgorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDQyMG0taXNsb3ctNTY1RCAiLWRjdDtpbnQ7LW5vc21vb3RoOy1yZ2I1NjU7LWJtcCIKKyAgICAgIHRlc3RvdXRfNDIwbV9pc2xvd181NjVELmJtcCAke1RFU1RJTUFHRVN9LyR7VEVTVE9SSUd9CisgICAgICAke01ENV9CTVBfNDIwTV9JU0xPV181NjVEfSkKKyAgZW5kaWYoKQorCisgICMgUGFydGlhbCBkZWNvZGUgdGVzdHMuICBUaGVzZSB0ZXN0cyBhcmUgZGVzaWduZWQgdG8gY292ZXIgYWxsIG9mIHRoZQorICAjIHBvc3NpYmxlIGNvZGUgcGF0aHMgaW4ganBlZ19za2lwX3NjYW5saW5lcygpLgorCisgICMgQ29udGV4dCByb3dzOiBZZXMgIEludHJhLWlNQ1Ugcm93OiBZZXMgIGlNQ1Ugcm93IHByZWZldGNoOiBObyAgIEVOVDogaHVmZgorICBhZGRfYml0dGVzdChkanBlZyA0MjAtaXNsb3ctc2tpcDE1XzMxICItZGN0O2ludDstc2tpcDsxNSwzMTstcHBtIgorICAgIHRlc3RvdXRfNDIwX2lzbG93X3NraXAxNSwzMS5wcG0gJHtURVNUSU1BR0VTfS8ke1RFU1RPUklHfQorICAgICR7TUQ1X1BQTV80MjBfSVNMT1dfU0tJUDE1XzMxfSkKKworICAjIENvbnRleHQgcm93czogWWVzICBJbnRyYS1pTUNVIHJvdzogTm8gICBpTUNVIHJvdyBwcmVmZXRjaDogWWVzICBFTlQ6IGFyaXRoCisgIGlmKFdJVEhfQVJJVEhfREVDKQorICAgIGFkZF9iaXR0ZXN0KGRqcGVnIDQyMC1pc2xvdy1hcmktc2tpcDE2XzEzOSAiLWRjdDtpbnQ7LXNraXA7MTYsMTM5Oy1wcG0iCisgICAgICB0ZXN0b3V0XzQyMF9pc2xvd19hcmlfc2tpcDE2LDEzOS5wcG0gJHtURVNUSU1BR0VTfS90ZXN0aW1nYXJpLmpwZworICAgICAgJHtNRDVfUFBNXzQyMF9JU0xPV19BUklfU0tJUDE2XzEzOX0pCisgIGVuZGlmKCkKKworICAjIENvbnRleHQgcm93czogWWVzICBJbnRyYS1pTUNVIHJvdzogTm8gICBpTUNVIHJvdyBwcmVmZXRjaDogTm8gICBFTlQ6IHByb2cgaHVmZgorICBhZGRfdGVzdChjanBlZy0ke2xpYnR5cGV9LTQyMC1pc2xvdy1wcm9nCisgICAgY2pwZWcke3N1ZmZpeH0gLWRjdCBpbnQgLXByb2cKKyAgICAgIC1vdXRmaWxlIHRlc3RvdXRfNDIwX2lzbG93X3Byb2cuanBnICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtKQorICBhZGRfYml0dGVzdChkanBlZyA0MjAtaXNsb3ctcHJvZy1jcm9wNjJ4NjJfNzFfNzEKKyAgICAiLWRjdDtpbnQ7LWNyb3A7NjJ4NjIrNzErNzE7LXBwbSIKKyAgICB0ZXN0b3V0XzQyMF9pc2xvd19wcm9nX2Nyb3A2Mng2Miw3MSw3MS5wcG0gdGVzdG91dF80MjBfaXNsb3dfcHJvZy5qcGcKKyAgICAke01ENV9QUE1fNDIwX0lTTE9XX1BST0dfQ1JPUDYyeDYyXzcxXzcxfSBjanBlZy0ke2xpYnR5cGV9LTQyMC1pc2xvdy1wcm9nKQorCisgICMgQ29udGV4dCByb3dzOiBZZXMgIEludHJhLWlNQ1Ugcm93OiBObyAgIGlNQ1Ugcm93IHByZWZldGNoOiBObyAgIEVOVDogYXJpdGgKKyAgaWYoV0lUSF9BUklUSF9ERUMpCisgICAgYWRkX2JpdHRlc3QoZGpwZWcgNDIwLWlzbG93LWFyaS1jcm9wNTN4NTNfNF80CisgICAgICAiLWRjdDtpbnQ7LWNyb3A7NTN4NTMrNCs0Oy1wcG0iCisgICAgICB0ZXN0b3V0XzQyMF9pc2xvd19hcmlfY3JvcDUzeDUzLDQsNC5wcG0gJHtURVNUSU1BR0VTfS90ZXN0aW1nYXJpLmpwZworICAgICAgJHtNRDVfUFBNXzQyMF9JU0xPV19BUklfQ1JPUDUzeDUzXzRfNH0pCisgIGVuZGlmKCkKKworICAjIENvbnRleHQgcm93czogTm8gICBJbnRyYS1pTUNVIHJvdzogWWVzICBFTlQ6IGh1ZmYKKyAgYWRkX3Rlc3QoY2pwZWctJHtsaWJ0eXBlfS00NDQtaXNsb3cKKyAgICBjanBlZyR7c3VmZml4fSAtZGN0IGludCAtc2FtcGxlIDF4MQorICAgICAgLW91dGZpbGUgdGVzdG91dF80NDRfaXNsb3cuanBnICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtKQorICBhZGRfYml0dGVzdChkanBlZyA0NDQtaXNsb3ctc2tpcDFfNiAiLWRjdDtpbnQ7LXNraXA7MSw2Oy1wcG0iCisgICAgdGVzdG91dF80NDRfaXNsb3dfc2tpcDEsNi5wcG0gdGVzdG91dF80NDRfaXNsb3cuanBnCisgICAgJHtNRDVfUFBNXzQ0NF9JU0xPV19TS0lQMV82fSBjanBlZy0ke2xpYnR5cGV9LTQ0NC1pc2xvdykKKworICAjIENvbnRleHQgcm93czogTm8gICBJbnRyYS1pTUNVIHJvdzogTm8gICBFTlQ6IHByb2cgaHVmZgorICBhZGRfdGVzdChjanBlZy0ke2xpYnR5cGV9LTQ0NC1pc2xvdy1wcm9nCisgICAgY2pwZWcke3N1ZmZpeH0gLWRjdCBpbnQgLXByb2cgLXNhbXBsZSAxeDEKKyAgICAgIC1vdXRmaWxlIHRlc3RvdXRfNDQ0X2lzbG93X3Byb2cuanBnICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtKQorICBhZGRfYml0dGVzdChkanBlZyA0NDQtaXNsb3ctcHJvZy1jcm9wOTh4OThfMTNfMTMKKyAgICAiLWRjdDtpbnQ7LWNyb3A7OTh4OTgrMTMrMTM7LXBwbSIKKyAgICB0ZXN0b3V0XzQ0NF9pc2xvd19wcm9nX2Nyb3A5OHg5OCwxMywxMy5wcG0gdGVzdG91dF80NDRfaXNsb3dfcHJvZy5qcGcKKyAgICAke01ENV9QUE1fNDQ0X0lTTE9XX1BST0dfQ1JPUDk4eDk4XzEzXzEzfSBjanBlZy0ke2xpYnR5cGV9LTQ0NC1pc2xvdy1wcm9nKQorCisgICMgQ29udGV4dCByb3dzOiBObyAgIEludHJhLWlNQ1Ugcm93OiBObyAgIEVOVDogYXJpdGgKKyAgaWYoV0lUSF9BUklUSF9FTkMpCisgICAgYWRkX3Rlc3QoY2pwZWctJHtsaWJ0eXBlfS00NDQtaXNsb3ctYXJpCisgICAgICBjanBlZyR7c3VmZml4fSAtZGN0IGludCAtYXJpdGhtZXRpYyAtc2FtcGxlIDF4MQorICAgICAgICAtb3V0ZmlsZSB0ZXN0b3V0XzQ0NF9pc2xvd19hcmkuanBnICR7VEVTVElNQUdFU30vdGVzdG9yaWcucHBtKQorICAgIGlmKFdJVEhfQVJJVEhfREVDKQorICAgICAgYWRkX2JpdHRlc3QoZGpwZWcgNDQ0LWlzbG93LWFyaS1jcm9wMzd4MzdfMF8wCisgICAgICAgICItZGN0O2ludDstY3JvcDszN3gzNyswKzA7LXBwbSIKKyAgICAgICAgdGVzdG91dF80NDRfaXNsb3dfYXJpX2Nyb3AzN3gzNywwLDAucHBtIHRlc3RvdXRfNDQ0X2lzbG93X2FyaS5qcGcKKyAgICAgICAgJHtNRDVfUFBNXzQ0NF9JU0xPV19BUklfQ1JPUDM3eDM3XzBfMH0gY2pwZWctJHtsaWJ0eXBlfS00NDQtaXNsb3ctYXJpKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgIGFkZF9iaXR0ZXN0KGpwZWd0cmFuIGNyb3AgIi1jcm9wOzEyMHg5MCsyMCs1MDstdHJhbnNwb3NlOy1wZXJmZWN0IgorICAgIHRlc3RvdXRfY3JvcC5qcGcgJHtURVNUSU1BR0VTfS8ke1RFU1RPUklHfQorICAgICR7TUQ1X0pQRUdfQ1JPUH0pCisKK2VuZGZvcmVhY2goKQorCithZGRfY3VzdG9tX3RhcmdldCh0ZXN0Y2xlYW4gQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QCisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvdGVzdGNsZWFuLmNtYWtlKQorCitpZihXSVRIX1RVUkJPSlBFRykKKyAgY29uZmlndXJlX2ZpbGUodGpiZW5jaHRlc3QuaW4gdGpiZW5jaHRlc3QgQE9OTFkpCisgIGNvbmZpZ3VyZV9maWxlKHRqZXhhbXBsZXRlc3QuaW4gdGpleGFtcGxldGVzdCBAT05MWSkKKyAgaWYoV0lOMzIpCisgICAgc2V0KEJBU0ggYmFzaCkKKyAgZW5kaWYoKQorICBpZihXSVRIX0pBVkEpCisgICAgY29uZmlndXJlX2ZpbGUodGpiZW5jaHRlc3QuamF2YS5pbiB0amJlbmNodGVzdC5qYXZhIEBPTkxZKQorICAgIGNvbmZpZ3VyZV9maWxlKHRqZXhhbXBsZXRlc3QuamF2YS5pbiB0amV4YW1wbGV0ZXN0LmphdmEgQE9OTFkpCisgICAgYWRkX2N1c3RvbV90YXJnZXQodGp0ZXN0CisgICAgICBDT01NQU5EIGVjaG8gdGpiZW5jaHRlc3QKKyAgICAgIENPTU1BTkQgJHtCQVNIfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGpiZW5jaHRlc3QKKyAgICAgIENPTU1BTkQgZWNobyB0amJlbmNodGVzdCAtYWxsb2MKKyAgICAgIENPTU1BTkQgJHtCQVNIfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGpiZW5jaHRlc3QgLWFsbG9jCisgICAgICBDT01NQU5EIGVjaG8gdGpiZW5jaHRlc3QgLXl1dgorICAgICAgQ09NTUFORCAke0JBU0h9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90amJlbmNodGVzdCAteXV2CisgICAgICBDT01NQU5EIGVjaG8gdGpiZW5jaHRlc3QgLXl1diAtYWxsb2MKKyAgICAgIENPTU1BTkQgJHtCQVNIfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGpiZW5jaHRlc3QgLXl1diAtYWxsb2MKKyAgICAgIENPTU1BTkQgZWNobyB0amJlbmNodGVzdCAtcHJvZ3Jlc3NpdmUKKyAgICAgIENPTU1BTkQgJHtCQVNIfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGpiZW5jaHRlc3QgLXByb2dyZXNzaXZlCisgICAgICBDT01NQU5EIGVjaG8gdGpleGFtcGxldGVzdAorICAgICAgQ09NTUFORCAke0JBU0h9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90amV4YW1wbGV0ZXN0CisgICAgICBDT01NQU5EIGVjaG8gdGpiZW5jaHRlc3QuamF2YQorICAgICAgQ09NTUFORCAke0JBU0h9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90amJlbmNodGVzdC5qYXZhCisgICAgICBDT01NQU5EIGVjaG8gdGpiZW5jaHRlc3QuamF2YSAteXV2CisgICAgICBDT01NQU5EICR7QkFTSH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqYmVuY2h0ZXN0LmphdmEgLXl1dgorICAgICAgQ09NTUFORCBlY2hvIHRqYmVuY2h0ZXN0LmphdmEgLXByb2dyZXNzaXZlCisgICAgICBDT01NQU5EICR7QkFTSH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqYmVuY2h0ZXN0LmphdmEgLXByb2dyZXNzaXZlCisgICAgICBDT01NQU5EIGVjaG8gdGpleGFtcGxldGVzdC5qYXZhCisgICAgICBDT01NQU5EICR7QkFTSH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqZXhhbXBsZXRlc3QuamF2YQorICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGpiZW5jaHRlc3QKKyAgICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqYmVuY2h0ZXN0LmphdmEKKyAgICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqZXhhbXBsZXRlc3QpCisgIGVsc2UoKQorICAgIGFkZF9jdXN0b21fdGFyZ2V0KHRqdGVzdAorICAgICAgQ09NTUFORCBlY2hvIHRqYmVuY2h0ZXN0CisgICAgICBDT01NQU5EICR7QkFTSH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqYmVuY2h0ZXN0CisgICAgICBDT01NQU5EIGVjaG8gdGpiZW5jaHRlc3QgLWFsbG9jCisgICAgICBDT01NQU5EICR7QkFTSH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqYmVuY2h0ZXN0IC1hbGxvYworICAgICAgQ09NTUFORCBlY2hvIHRqYmVuY2h0ZXN0IC15dXYKKyAgICAgIENPTU1BTkQgJHtCQVNIfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGpiZW5jaHRlc3QgLXl1dgorICAgICAgQ09NTUFORCBlY2hvIHRqYmVuY2h0ZXN0IC15dXYgLWFsbG9jCisgICAgICBDT01NQU5EICR7QkFTSH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RqYmVuY2h0ZXN0IC15dXYgLWFsbG9jCisgICAgICBDT01NQU5EIGVjaG8gdGpleGFtcGxldGVzdAorICAgICAgQ09NTUFORCAke0JBU0h9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90amV4YW1wbGV0ZXN0CisgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90amJlbmNodGVzdCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSU5TVEFMTEFUSU9OCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmKFdJTjMyKQorICBzZXQoRVhFICIuZXhlIikKK2VuZGlmKCkKKworaWYoV0lUSF9UVVJCT0pQRUcpCisgIGlmKEVOQUJMRV9TSEFSRUQpCisgICAgaW5zdGFsbChUQVJHRVRTIHR1cmJvanBlZyB0amJlbmNoCisgICAgICBBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisgICAgICBSVU5USU1FIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9KQorICBlbmRpZigpCisgIGlmKEVOQUJMRV9TVEFUSUMpCisgICAgaW5zdGFsbChUQVJHRVRTIHR1cmJvanBlZy1zdGF0aWMgQVJDSElWRQorICAgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0pCisgICAgaWYoTk9UIEVOQUJMRV9TSEFSRUQpCisgICAgICBpbnN0YWxsKFBST0dSQU1TICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90amJlbmNoLXN0YXRpYyR7RVhFfQorICAgICAgICBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfQklORElSfSBSRU5BTUUgdGpiZW5jaCR7RVhFfSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKyAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdHVyYm9qcGVnLmgKKyAgICBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0pCitlbmRpZigpCisKK2lmKEVOQUJMRV9TVEFUSUMpCisgIGluc3RhbGwoVEFSR0VUUyBqcGVnLXN0YXRpYyBBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQorICBpZihOT1QgRU5BQkxFX1NIQVJFRCkKKyAgICBpbnN0YWxsKFBST0dSQU1TICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9janBlZy1zdGF0aWMke0VYRX0KKyAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9IFJFTkFNRSBjanBlZyR7RVhFfSkKKyAgICBpbnN0YWxsKFBST0dSQU1TICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9kanBlZy1zdGF0aWMke0VYRX0KKyAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9IFJFTkFNRSBkanBlZyR7RVhFfSkKKyAgICBpbnN0YWxsKFBST0dSQU1TICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9qcGVndHJhbi1zdGF0aWMke0VYRX0KKyAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9IFJFTkFNRSBqcGVndHJhbiR7RVhFfSkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpbnN0YWxsKFRBUkdFVFMgcmRqcGdjb20gd3JqcGdjb20gUlVOVElNRSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfQklORElSfSkKKworaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vUkVBRE1FLmlqZworICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vUkVBRE1FLm1kICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9leGFtcGxlLnR4dAorICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGpleGFtcGxlLmMKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmpwZWcudHh0CisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdHJ1Y3R1cmUudHh0CisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS91c2FnZS50eHQgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpemFyZC50eHQKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0xJQ0VOU0UubWQgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0RPQ0RJUn0pCitpZihXSVRIX0pBVkEpCisgIGluc3RhbGwoRklMRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2phdmEvVEpFeGFtcGxlLmphdmEKKyAgICBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfRE9DRElSfSkKK2VuZGlmKCkKKworaWYoVU5JWCBPUiBNSU5HVykKKyAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY2pwZWcuMQorICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kanBlZy4xICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9qcGVndHJhbi4xCisgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3JkanBnY29tLjEKKyAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd3JqcGdjb20uMQorICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEpCisgIGluc3RhbGwoRklMRVMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3BrZ3NjcmlwdHMvbGlianBlZy5wYworICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wa2dzY3JpcHRzL2xpYnR1cmJvanBlZy5wYworICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L3BrZ2NvbmZpZykKK2VuZGlmKCkKKworaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vamNvbmZpZy5oCisgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9qZXJyb3IuaCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vam1vcmVjZmcuaAorICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vanBlZ2xpYi5oCisgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfSkKKworaW5jbHVkZShjbWFrZXNjcmlwdHMvQnVpbGRQYWNrYWdlcy5jbWFrZSkKKworY29uZmlndXJlX2ZpbGUoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvY21ha2VfdW5pbnN0YWxsLmNtYWtlLmluIgorICAiY21ha2VfdW5pbnN0YWxsLmNtYWtlIiBJTU1FRElBVEUgQE9OTFkpCisKK2FkZF9jdXN0b21fdGFyZ2V0KHVuaW5zdGFsbCBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgY21ha2VfdW5pbnN0YWxsLmNtYWtlKQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQ2hhbmdlTG9nLm1kIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQ2hhbmdlTG9nLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmNmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9DaGFuZ2VMb2cubWQKQEAgLTAsMCArMSwxMjk2IEBACisyLjAuMAorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMi4wIGJldGExOgorCisxLiBUaGUgVHVyYm9KUEVHIEFQSSBjYW4gbm93IGRlY29tcHJlc3MgQ01ZSyBKUEVHIGltYWdlcyB0aGF0IGhhdmUgc3Vic2FtcGxlZCBNCithbmQgWSBjb21wb25lbnRzIChub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBZQ0NLIEpQRUcgaW1hZ2VzLCBpbiB3aGljaCB0aGUgQy9NL1kKK2NvbXBvbmVudHMgaGF2ZSBiZWVuIHRyYW5zZm9ybWVkIGludG8gbHVtYSBhbmQgY2hyb21hLikgICBQcmV2aW91c2x5LCBhbiBlcnJvcgord2FzIGdlbmVyYXRlZCAoIkNvdWxkIG5vdCBkZXRlcm1pbmUgc3Vic2FtcGxpbmcgdHlwZSBmb3IgSlBFRyBpbWFnZSIpIHdoZW4gc3VjaAorYW4gaW1hZ2Ugd2FzIHBhc3NlZCB0byBgdGpEZWNvbXByZXNzSGVhZGVyMygpYCwgYHRqVHJhbnNmb3JtKClgLAorYHRqRGVjb21wcmVzc1RvWVVWUGxhbmVzKClgLCBgdGpEZWNvbXByZXNzVG9ZVVYyKClgLCBvciB0aGUgZXF1aXZhbGVudCBKYXZhCittZXRob2RzLgorCisKKzEuNS45MCAoMi4wIGJldGExKQorPT09PT09PT09PT09PT09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuNS4zOgorCisxLiBBZGRlZCBBVlgyIFNJTUQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBjb2xvcnNwYWNlIGNvbnZlcnNpb24sIGNocm9tYQorZG93bnNhbXBsaW5nIGFuZCB1cHNhbXBsaW5nLCBpbnRlZ2VyIHF1YW50aXphdGlvbiBhbmQgc2FtcGxlIGNvbnZlcnNpb24sIGFuZAorc2xvdyBpbnRlZ2VyIERDVC9JRENUIGFsZ29yaXRobXMuICBXaGVuIHVzaW5nIHRoZSBzbG93IGludGVnZXIgRENUL0lEQ1QKK2FsZ29yaXRobXMgb24gQVZYMi1lcXVpcHBlZCBDUFVzLCB0aGUgY29tcHJlc3Npb24gb2YgUkdCIGltYWdlcyBpcworYXBwcm94aW1hdGVseSAxMy0zNiUgKGF2Zy4gMjIlKSBmYXN0ZXIgKHJlbGF0aXZlIHRvIGxpYmpwZWctdHVyYm8gMS41LngpIHdpdGgKKzY0LWJpdCBjb2RlIGFuZCAxMS0yMSUgKGF2Zy4gMTclKSBmYXN0ZXIgd2l0aCAzMi1iaXQgY29kZSwgYW5kIHRoZQorZGVjb21wcmVzc2lvbiBvZiBSR0IgaW1hZ2VzIGlzIGFwcHJveGltYXRlbHkgOS0zNSUgKGF2Zy4gMTclKSBmYXN0ZXIgd2l0aAorNjQtYml0IGNvZGUgYW5kIDctMTclIChhdmcuIDEyJSkgZmFzdGVyIHdpdGggMzItYml0IGNvZGUuICAoQXMgdGVzdGVkIG9uIGEKKzMgR0h6IEludGVsIENvcmUgaTcuICBBY3R1YWwgbWlsZWFnZSBtYXkgdmFyeS4pCisKKzIuIE92ZXJoYXVsZWQgdGhlIGJ1aWxkIHN5c3RlbSB0byB1c2UgQ01ha2Ugb24gYWxsIHBsYXRmb3JtcywgYW5kIHJlbW92ZWQgdGhlCithdXRvdG9vbHMtYmFzZWQgYnVpbGQgc3lzdGVtLiAgVGhpcyBkZWNpc2lvbiByZXN1bHRlZCBmcm9tIGV4dGVuc2l2ZQorZGlzY3Vzc2lvbnMgd2l0aGluIHRoZSBsaWJqcGVnLXR1cmJvIGNvbW11bml0eS4gIGxpYmpwZWctdHVyYm8gdHJhZGl0aW9uYWxseQordXNlZCBDTWFrZSBvbmx5IGZvciBXaW5kb3dzIGJ1aWxkcywgYnV0IHRoZXJlIHdhcyBhbiBpbmNyZWFzaW5nIGFtb3VudCBvZgorZGVtYW5kIHRvIGV4dGVuZCBDTWFrZSBzdXBwb3J0IHRvIG90aGVyIHBsYXRmb3Jtcy4gIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgdGhlCit1bmlxdWUgbmF0dXJlIG9mIG91ciBjb2RlIGJhc2UgKHRoZSBuZWVkIHRvIHN1cHBvcnQgZGlmZmVyZW50IGFzc2VtYmxlcnMgb24KK2VhY2ggcGxhdGZvcm0sIHRoZSBuZWVkIGZvciBKYXZhIHN1cHBvcnQsIGV0Yy4pLCBwcm92aWRpbmcgZHVhbCBidWlsZCBzeXN0ZW1zCithcyBvdGhlciBPU1MgaW1hZ2luZyBsaWJyYXJpZXMgZG8gKGluY2x1ZGluZyBsaWJwbmcgYW5kIGxpYnRpZmYpIHdvdWxkIGhhdmUKK2NyZWF0ZWQgYSBtYWludGVuYW5jZSBidXJkZW4uICBUaGUgdXNlIG9mIENNYWtlIGdyZWF0bHkgc2ltcGxpZmllcyBzb21lIGFzcGVjdHMKK29mIG91ciBidWlsZCBzeXN0ZW0sIG93aW5nIHRvIENNYWtlJ3MgYnVpbHQtaW4gc3VwcG9ydCBmb3IgdmFyaW91cyBhc3NlbWJsZXJzLAorSmF2YSwgYW5kIHVuaXQgdGVzdGluZywgYXMgd2VsbCBhcyBnZW5lcmFsbHkgZmV3ZXIgcXVpcmtzIHRoYXQgaGF2ZSB0byBiZQord29ya2VkIGFyb3VuZCBpbiBvcmRlciB0byBpbXBsZW1lbnQgb3VyIHBhY2thZ2luZyBzeXN0ZW0uICBFbGltaW5hdGluZworYXV0b3Rvb2xzIHB1dHMgb3VyIHByb2plY3Qgc2xpZ2h0bHkgYXQgb2RkcyB3aXRoIHRoZSB0cmFkaXRpb25hbCBwcmFjdGljZXMgb2YKK3RoZSBPU1MgY29tbXVuaXR5LCBzaW5jZSBtb3N0ICJzeXN0ZW0gbGlicmFyaWVzIiB0ZW5kIHRvIGJlIGJ1aWx0IHdpdGgKK2F1dG90b29scywgYnV0IGl0IGlzIGJlbGlldmVkIHRoYXQgdGhlIGJlbmVmaXRzIG9mIHRoaXMgbW92ZSBvdXR3ZWlnaCB0aGUKK3Jpc2tzLiAgSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIGEgdW5pZmllZCBidWlsZCBlbnZpcm9ubWVudCwgc3dpdGNoaW5nIHRvCitDTWFrZSBhbGxvd3MgZm9yIHRoZSB1c2Ugb2YgdmFyaW91cyBidWlsZCB0b29scyBhbmQgSURFcyB0aGF0IGFyZW4ndCBzdXBwb3J0ZWQKK3VuZGVyIGF1dG90b29scywgaW5jbHVkaW5nIFhDb2RlLCBOaW5qYSwgYW5kIEVjbGlwc2UuICBJdCBhbHNvIGVsaW1pbmF0ZXMgdGhlCituZWVkIHRvIGluc3RhbGwgYXV0b3Rvb2xzIHZpYSBNYWNQb3J0cy9Ib21lYnJldyBvbiBPUyBYIGFuZCBhbGxvd3MKK2xpYmpwZWctdHVyYm8gdG8gYmUgY29uZmlndXJlZCB3aXRob3V0IHRoZSB1c2Ugb2YgYSB0ZXJtaW5hbC9jb21tYW5kIHByb21wdC4KK0V4dGVuc2l2ZSB0ZXN0aW5nIHdhcyBjb25kdWN0ZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGZlYXR1cmVzIHByb3ZpZGVkIGJ5IHRoZQorYXV0b3Rvb2xzLWJhc2VkIGJ1aWxkIHN5c3RlbSBhcmUgcHJvdmlkZWQgYnkgdGhlIG5ldyBidWlsZCBzeXN0ZW0uCisKKzMuIFRoZSBsaWJqcGVnIEFQSSBpbiB0aGlzIHZlcnNpb24gb2YgbGlianBlZy10dXJibyBub3cgaW5jbHVkZXMgdHdvIGFkZGl0aW9uYWwKK2Z1bmN0aW9ucywgYGpwZWdfcmVhZF9pY2NfcHJvZmlsZSgpYCBhbmQgYGpwZWdfd3JpdGVfaWNjX3Byb2ZpbGUoKWAsIHRoYXQgY2FuCitiZSB1c2VkIHRvIGV4dHJhY3QgSUNDIHByb2ZpbGUgZGF0YSBmcm9tIGEgSlBFRyBmaWxlIHdoaWxlIGRlY29tcHJlc3Npbmcgb3IgdG8KK2VtYmVkIElDQyBwcm9maWxlIGRhdGEgaW4gYSBKUEVHIGZpbGUgd2hpbGUgY29tcHJlc3Npbmcgb3IgdHJhbnNmb3JtaW5nLiAgVGhpcworZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZG93bnN0cmVhbSBwcm9qZWN0cywgc3VjaCBhcyBjb2xvciBtYW5hZ2VtZW50IGxpYnJhcmllcworYW5kIGJyb3dzZXJzLCB0byBpbmNsdWRlIHRoZWlyIG93biBnbHVld2FyZSBmb3IgYWNjb21wbGlzaGluZyB0aGlzLgorCis0LiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZyBpbiB0aGUgVHVyYm9KUEVHIEFQSSBsaWJyYXJ5OgorCisgICAgIC0gSW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiAoYHRqR2V0RXJyb3JTdHIyKClgKSBpbiB0aGUgVHVyYm9KUEVHIEMgQVBJCit0aGF0IGFsbG93cyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uL3RyYW5zZm9ybSBlcnJvciBtZXNzYWdlcyB0byBiZSByZXRyaWV2ZWQKK2luIGEgdGhyZWFkLXNhZmUgbWFubmVyLiAgUmV0cmlldmluZyBlcnJvciBtZXNzYWdlcyBmcm9tIGdsb2JhbCBmdW5jdGlvbnMsIHN1Y2gKK2FzIGB0akluaXRDb21wcmVzcygpYCBvciBgdGpCdWZTaXplKClgLCBpcyBzdGlsbCB0aHJlYWQtdW5zYWZlLCBidXQgc2luY2UgdGhvc2UKK2Z1bmN0aW9ucyB3aWxsIG9ubHkgdGhyb3cgZXJyb3JzIGlmIHBhc3NlZCBhbiBpbnZhbGlkIGFyZ3VtZW50IG9yIGlmIGEgbWVtb3J5CithbGxvY2F0aW9uIGZhaWx1cmUgb2NjdXJzLCB0aHJlYWQgc2FmZXR5IGlzIG5vdCBhcyBtdWNoIG9mIGEgY29uY2Vybi4KKyAgICAgLSBJbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uIChgdGpHZXRFcnJvckNvZGUoKWApIGluIHRoZSBUdXJib0pQRUcgQyBBUEkKK2FuZCBhIG5ldyBtZXRob2QgKGBUSkV4Y2VwdGlvbi5nZXRFcnJvckNvZGUoKWApIGluIHRoZSBUdXJib0pQRUcgSmF2YSBBUEkgdGhhdAorY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdAorY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbi90cmFuc2Zvcm0gZXJyb3IuICBUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8KK2Nob29zZSB3aGV0aGVyIHRvIGlnbm9yZSB3YXJuaW5ncyAobm9uLWZhdGFsIGVycm9ycykgZnJvbSB0aGUgdW5kZXJseWluZworbGlianBlZyBBUEkgb3IgdG8gdHJlYXQgdGhlbSBhcyBmYXRhbC4KKyAgICAgLSBJbnRyb2R1Y2VkIGEgbmV3IGZsYWcgKGBUSkZMQUdfU1RPUE9OV0FSTklOR2AgaW4gdGhlIFR1cmJvSlBFRyBDIEFQSSBhbmQKK2BUSi5GTEFHX1NUT1BPTldBUk5JTkdgIGluIHRoZSBUdXJib0pQRUcgSmF2YSBBUEkpIHRoYXQgY2F1c2VzIHRoZSBsaWJyYXJ5IHRvCitpbW1lZGlhdGVseSBoYWx0IGEgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbi90cmFuc2Zvcm0gb3BlcmF0aW9uIGlmIGl0CitlbmNvdW50ZXJzIGEgd2FybmluZyBmcm9tIHRoZSB1bmRlcmx5aW5nIGxpYmpwZWcgQVBJICh0aGUgZGVmYXVsdCBiZWhhdmlvciBpcwordG8gYWxsb3cgdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZSB1bmxlc3MgYSBmYXRhbCBlcnJvciBpcyBlbmNvdW50ZXJlZC4pCisKKzUuIEludHJvZHVjZWQgYSBuZXcgZmxhZyBpbiB0aGUgVHVyYm9KUEVHIEMgYW5kIEphdmEgQVBJcyAoYFRKRkxBR19QUk9HUkVTU0lWRWAKK2FuZCBgVEouRkxBR19QUk9HUkVTU0lWRWAsIHJlc3BlY3RpdmVseSkgdGhhdCBjYXVzZXMgdGhlIGxpYnJhcnkgdG8gdXNlCitwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiBKUEVHIGltYWdlcyBnZW5lcmF0ZWQgYnkgY29tcHJlc3Npb24gYW5kCit0cmFuc2Zvcm0gb3BlcmF0aW9ucy4gIEFkZGl0aW9uYWxseSwgYSBuZXcgdHJhbnNmb3JtIG9wdGlvbgorKGBUSlhPUFRfUFJPR1JFU1NJVkVgIGluIHRoZSBDIEFQSSBhbmQgYFRKVHJhbnNmb3JtLk9QVF9QUk9HUkVTU0lWRWAgaW4gdGhlCitKYXZhIEFQSSkgaGFzIGJlZW4gaW50cm9kdWNlZCwgYWxsb3dpbmcgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmcgdG8gYmUKK2VuYWJsZWQgZm9yIHNlbGVjdGVkIHRyYW5zZm9ybXMgaW4gYSBtdWx0aS10cmFuc2Zvcm0gb3BlcmF0aW9uLgorCis2LiBJbnRyb2R1Y2VkIGEgbmV3IHRyYW5zZm9ybSBvcHRpb24gaW4gdGhlIFR1cmJvSlBFRyBBUEkgKGBUSlhPUFRfQ09QWU5PTkVgIGluCit0aGUgQyBBUEkgYW5kIGBUSlRyYW5zZm9ybS5PUFRfQ09QWU5PTkVgIGluIHRoZSBKYXZhIEFQSSkgdGhhdCBhbGxvd3MgdGhlCitjb3B5aW5nIG9mIG1hcmtlcnMgKGluY2x1ZGluZyBFWElGIGFuZCBJQ0MgcHJvZmlsZSBkYXRhKSB0byBiZSBkaXNhYmxlZCBmb3IgYQorcGFydGljdWxhciB0cmFuc2Zvcm0uCisKKzcuIEFkZGVkIHR3byBmdW5jdGlvbnMgdG8gdGhlIFR1cmJvSlBFRyBDIEFQSSAoYHRqTG9hZEltYWdlKClgIGFuZAorYHRqU2F2ZUltYWdlKClgKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWQvc2F2ZSBhIEJNUCBvciBQUE0vUEdNIGltYWdlIHRvL2Zyb20gYQorbWVtb3J5IGJ1ZmZlciB3aXRoIGEgc3BlY2lmaWVkIHBpeGVsIGZvcm1hdCBhbmQgbGF5b3V0LiAgVGhlc2UgZnVuY3Rpb25zCityZXBsYWNlIHRoZSBwcm9qZWN0LXByaXZhdGUgKGFuZCBzbG93KSBibXAgQVBJLCB3aGljaCB3YXMgcHJldmlvdXNseSB1c2VkIGJ5CitUSkJlbmNoLCBhbmQgdGhleSBhbHNvIHByb3ZpZGUgYSBjb252ZW5pZW50IHdheSBmb3IgZmlyc3QtdGltZSB1c2VycyBvZgorbGlianBlZy10dXJibyB0byBxdWlja2x5IGRldmVsb3AgYSBjb21wbGV0ZSBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24KK3Byb2dyYW0uCisKKzguIFRoZSBUdXJib0pQRUcgQyBBUEkgbm93IGluY2x1ZGVzIGEgbmV3IGNvbnZlbmllbmNlIGFycmF5IChgdGpBbHBoYU9mZnNldFtdYCkKK3RoYXQgY29udGFpbnMgdGhlIGFscGhhIGNvbXBvbmVudCBpbmRleCBmb3IgZWFjaCBwaXhlbCBmb3JtYXQgKG9yIC0xIGlmIHRoZQorcGl4ZWwgZm9ybWF0IGxhY2tzIGFuIGFscGhhIGNvbXBvbmVudC4pICBUaGUgVHVyYm9KUEVHIEphdmEgQVBJIG5vdyBpbmNsdWRlcyBhCituZXcgbWV0aG9kIChgVEouZ2V0QWxwaGFPZmZzZXQoKWApIHRoYXQgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZS4gIEluIGFkZGl0aW9uLAordGhlIGB0alJlZE9mZnNldFtdYCwgYHRqR3JlZW5PZmZzZXRbXWAsIGFuZCBgdGpCbHVlT2Zmc2V0W11gIGFycmF5cy0tIGFuZCB0aGUKK2NvcnJlc3BvbmRpbmcgYFRKLmdldFJlZE9mZnNldCgpYCwgYFRKLmdldEdyZWVuT2Zmc2V0KClgLCBhbmQKK2BUSi5nZXRCbHVlT2Zmc2V0KClgIG1ldGhvZHMtLSBub3cgcmV0dXJuIC0xIGZvciBgVEpQRl9HUkFZYC9gVEouUEZfR1JBWWAKK3JhdGhlciB0aGFuIDAuICBUaGlzIGFsbG93cyBwcm9ncmFtcyB0byBlYXNpbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwaXhlbCBmb3JtYXQKK2hhcyByZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY29tcG9uZW50cy4KKworOS4gQWRkZWQgYSBuZXcgZXhhbXBsZSAodGpleGFtcGxlLmMpIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBiYXNpYyB1c2FnZSBvZiB0aGUKK1R1cmJvSlBFRyBDIEFQSS4gIFRoaXMgZXhhbXBsZSBtaXJyb3JzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIFRKRXhhbXBsZS5qYXZhLgorQm90aCBmaWxlcyBhcmUgbm93IGluY2x1ZGVkIGluIHRoZSBsaWJqcGVnLXR1cmJvIGRvY3VtZW50YXRpb24uCisKKzEwLiBGaXhlZCB0d28gc2lnbmVkIGludGVnZXIgb3ZlcmZsb3dzIGluIHRoZSBhcml0aG1ldGljIGRlY29kZXIsIGRldGVjdGVkIGJ5Cit0aGUgQ2xhbmcgdW5kZWZpbmVkIGJlaGF2aW9yIHNhbml0aXplciwgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkgYXR0ZW1wdGluZwordG8gZGVjb21wcmVzcyBhIHNwZWNpYWxseS1jcmFmdGVkIG1hbGZvcm1lZCBKUEVHIGltYWdlLiAgVGhlc2UgaXNzdWVzIGRpZCBub3QKK3Bvc2UgYSBzZWN1cml0eSB0aHJlYXQsIGJ1dCByZW1vdmluZyB0aGUgd2FybmluZ3MgbWFrZXMgaXQgZWFzaWVyIHRvIGRldGVjdAorYWN0dWFsIHNlY3VyaXR5IGlzc3Vlcywgc2hvdWxkIHRoZXkgYXJpc2UgaW4gdGhlIGZ1dHVyZS4KKworMTEuIEZpeGVkIGEgYnVnIGluIHRoZSBtZXJnZWQgNDoyOjAgdXBzYW1wbGluZy9kaXRoZXJlZCBSR0I1NjUgY29sb3IgY29udmVyc2lvbgorYWxnb3JpdGhtIHRoYXQgY2F1c2VkIGluY29ycmVjdCBkaXRoZXJpbmcgaW4gdGhlIG91dHB1dCBpbWFnZS4gIFRoaXMgYWxnb3JpdGhtCitub3cgcHJvZHVjZXMgYml0d2lzZS1pZGVudGljYWwgcmVzdWx0cyB0byB0aGUgdW5tZXJnZWQgYWxnb3JpdGhtcy4KKworMTIuIFRoZSBTSU1EIGZ1bmN0aW9uIHN5bWJvbHMgZm9yIHg4NlstNjRdL0VMRiwgTUlQUy9FTEYsIG1hY09TL3g4NlstNjRdIChpZgorbGlianBlZy10dXJibyBpcyBidWlsdCB3aXRoIFlBU00pLCBhbmQgaU9TL0FSTVs2NF0gYnVpbGRzIGFyZSBub3cgcHJpdmF0ZS4KK1RoaXMgcHJldmVudHMgdGhvc2Ugc3ltYm9scyBmcm9tIGJlaW5nIGV4cG9zZWQgaW4gYXBwbGljYXRpb25zIG9yIHNoYXJlZAorbGlicmFyaWVzIHRoYXQgbGluayBzdGF0aWNhbGx5IHdpdGggbGlianBlZy10dXJiby4KKworMTMuIEFkZGVkIExvb25nc29uIE1NSSBTSU1EIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgUkdCLXRvLVlDYkNyIGFuZAorWUNiQ3ItdG8tUkdCIGNvbG9yc3BhY2UgY29udmVyc2lvbiwgNDoyOjAgY2hyb21hIGRvd25zYW1wbGluZywgNDoyOjAgZmFuY3kKK2Nocm9tYSB1cHNhbXBsaW5nLCBpbnRlZ2VyIHF1YW50aXphdGlvbiwgYW5kIHNsb3cgaW50ZWdlciBEQ1QvSURDVCBhbGdvcml0aG1zLgorV2hlbiB1c2luZyB0aGUgc2xvdyBpbnRlZ2VyIERDVC9JRENULCB0aGlzIHNwZWVkcyB1cCB0aGUgY29tcHJlc3Npb24gb2YgUkdCCitpbWFnZXMgYnkgYXBwcm94aW1hdGVseSA3MC0xMDAlIGFuZCB0aGUgZGVjb21wcmVzc2lvbiBvZiBSR0IgaW1hZ2VzIGJ5CithcHByb3hpbWF0ZWx5IDItMy41eC4KKworMTQuIEZpeGVkIGEgYnVpbGQgZXJyb3Igd2hlbiBidWlsZGluZyB3aXRoIG9sZGVyIE1pbkdXIHJlbGVhc2VzIChyZWdyZXNzaW9uCitjYXVzZWQgYnkgMS41LjFbN10uKQorCisxNS4gQWRkZWQgU0lNRCBhY2NlbGVyYXRpb24gZm9yIHByb2dyZXNzaXZlIEh1ZmZtYW4gZW5jb2Rpbmcgb24gU1NFMi1jYXBhYmxlCit4ODYgYW5kIHg4Ni02NCBwbGF0Zm9ybXMuICBUaGlzIHNwZWVkcyB1cCB0aGUgY29tcHJlc3Npb24gb2YgZnVsbC1jb2xvcgorcHJvZ3Jlc3NpdmUgSlBFR3MgYnkgYWJvdXQgODUtOTAlIG9uIGF2ZXJhZ2UgKHJlbGF0aXZlIHRvIGxpYmpwZWctdHVyYm8gMS41LngpCit3aGVuIHVzaW5nIG1vZGVybiBJbnRlbCBhbmQgQU1EIENQVXMuCisKKworMS41LjMKKz09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuNS4yOgorCisxLiBGaXhlZCBhIE51bGxQb2ludGVyRXhjZXB0aW9uIGluIHRoZSBUdXJib0pQRUcgSmF2YSB3cmFwcGVyIHRoYXQgb2NjdXJyZWQKK3doZW4gdXNpbmcgdGhlIFlVVkltYWdlIGNvbnN0cnVjdG9yIHRoYXQgY3JlYXRlcyBhbiBpbnN0YW5jZSBiYWNrZWQgYnkgc2VwYXJhdGUKK2ltYWdlIHBsYW5lcyBhbmQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIGltYWdlIHBsYW5lcy4KKworMi4gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSB0aGUgSmF2YSB2ZXJzaW9uIG9mIFRKVW5pdFRlc3Qgd291bGQgZmFpbCB3aGVuCit0ZXN0aW5nIEJ1ZmZlcmVkSW1hZ2UgZW5jb2RpbmcvZGVjb2Rpbmcgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLgorCiszLiBGaXhlZCBhIHNlZ2ZhdWx0IGluIGRqcGVnIHRoYXQgd291bGQgb2NjdXIgaWYgYW4gb3V0cHV0IGZvcm1hdCBvdGhlciB0aGFuCitQUE0vUEdNIHdhcyBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBgLWNyb3BgIG9wdGlvbi4gIFRoZSBgLWNyb3BgIG9wdGlvbiBub3cKK3dvcmtzIHdpdGggdGhlIEdJRiBhbmQgVGFyZ2EgZm9ybWF0cyBhcyB3ZWxsICh1bmZvcnR1bmF0ZWx5LCBpdCBjYW5ub3QgYmUgbWFkZQordG8gd29yayB3aXRoIHRoZSBCTVAgYW5kIFJMRSBmb3JtYXRzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRob3NlIG91dHB1dCBlbmdpbmVzCit3cml0ZSBzY2FubGluZXMgaW4gYm90dG9tLXVwIG9yZGVyLikgIGRqcGVnIHdpbGwgbm93IGV4aXQgZ3JhY2VmdWxseSBpZiBhbgorb3V0cHV0IGZvcm1hdCBvdGhlciB0aGFuIFBQTS9QR00sIEdJRiwgb3IgVGFyZ2EgaXMgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUKK2AtY3JvcGAgb3B0aW9uLgorCis0LiBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5IGBqcGVnX3NraXBfc2NhbmxpbmVzKClgIHdvdWxkIHNlZ2ZhdWx0IGlmIGNvbG9yCitxdWFudGl6YXRpb24gd2FzIGVuYWJsZWQuCisKKzUuIFRKQmVuY2ggKGJvdGggQyBhbmQgSmF2YSB2ZXJzaW9ucykgd2lsbCBub3cgZGlzcGxheSB1c2FnZSBpbmZvcm1hdGlvbiBpZiBhbnkKK2NvbW1hbmQtbGluZSBhcmd1bWVudCBpcyB1bnJlY29nbml6ZWQuICBUaGlzIHByZXZlbnRzIHRoZSBwcm9ncmFtIGZyb20gc2lsZW50bHkKK2lnbm9yaW5nIHR5cG9zLgorCis2LiBGaXhlZCBhbiBhY2Nlc3MgdmlvbGF0aW9uIGluIHRqYmVuY2guZXhlIChXaW5kb3dzKSB0aGF0IG9jY3VycmVkIHdoZW4gdGhlCitwcm9ncmFtIHdhcyB1c2VkIHRvIGRlY29tcHJlc3MgYW4gZXhpc3RpbmcgSlBFRyBpbWFnZS4KKworNy4gRml4ZWQgYW4gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIHRoZSBUSkV4YW1wbGUgSmF2YSBwcm9ncmFtIHRoYXQKK29jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0aGF0IGhhZCBiZWVuIGNvbXByZXNzZWQKK3dpdGggNDoxOjEgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuCisKKzguIEZpeGVkIGFuIGlzc3VlIHdoZXJlYnksIHdoZW4gdXNpbmcgYGpwZWdfc2tpcF9zY2FubGluZXMoKWAgdG8gc2tpcCB0byB0aGUKK2VuZCBvZiBhIHNpbmdsZS1zY2FuIChub24tcHJvZ3Jlc3NpdmUpIGltYWdlLCBzdWJzZXF1ZW50IGNhbGxzIHRvCitganBlZ19jb25zdW1lX2lucHV0KClgIHdvdWxkIHJldHVybiBgSlBFR19TVVNQRU5ERURgIHJhdGhlciB0aGFuCitgSlBFR19SRUFDSEVEX0VPSWAuCisKKzkuIGBqcGVnX2Nyb3Bfc2NhbmxpbmVzKClgIG5vdyB3b3JrcyBjb3JyZWN0bHkgd2hlbiBkZWNvbXByZXNzaW5nIGdyYXlzY2FsZQorSlBFRyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQgd2l0aCBhIHNhbXBsaW5nIGZhY3RvciBvdGhlciB0aGFuIDEgKGZvcgoraW5zdGFuY2UsIHdpdGggYGNqcGVnIC1ncmF5c2NhbGUgLXNhbXBsZSAyeDJgKS4KKworCisxLjUuMgorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMS41LjE6CisKKzEuIEZpeGVkIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IDEuNS4xWzddIHRoYXQgcHJldmVudGVkIGxpYmpwZWctdHVyYm8gZnJvbQorYnVpbGRpbmcgd2l0aCBBbmRyb2lkIE5ESyBwbGF0Zm9ybXMgcHJpb3IgdG8gYW5kcm9pZC0yMSAoNS4wKS4KKworMi4gRml4ZWQgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgMS41LjFbMV0gdGhhdCBwcmV2ZW50ZWQgdGhlIE1JUFMgRFNQUjIgU0lNRAorY29kZSBpbiBsaWJqcGVnLXR1cmJvIGZyb20gYnVpbGRpbmcuCisKKzMuIEZpeGVkIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IDEuNSBiZXRhMVsxMV0gdGhhdCBwcmV2ZW50ZWQgdGhlIEphdmEKK3ZlcnNpb24gb2YgVEpCZW5jaCBmcm9tIG91dHB1dHRpbmcgYW55IHJlZmVyZW5jZSBpbWFnZXMgKHRoZSBgLW5vd3JpdGVgIHN3aXRjaAord2FzIGFjY2lkZW50YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuKQorCis0LiBsaWJqcGVnLXR1cmJvIHNob3VsZCBub3cgYnVpbGQgYW5kIHJ1biB3aXRoIGZ1bGwgQWx0aVZlYyBTSU1EIGFjY2VsZXJhdGlvbgorb24gUG93ZXJQQy1iYXNlZCBBbWlnYU9TIDQgYW5kIE9wZW5CU0Qgc3lzdGVtcy4KKworNS4gRml4ZWQgYnVpbGQgYW5kIHJ1bnRpbWUgZXJyb3JzIG9uIFdpbmRvd3MgdGhhdCBvY2N1cnJlZCB3aGVuIGJ1aWxkaW5nCitsaWJqcGVnLXR1cmJvIHdpdGggbGlianBlZyB2NyBBUEkvQUJJIGVtdWxhdGlvbiBhbmQgdGhlIGluLW1lbW9yeQorc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXJzLiAgRHVlIHRvIGFuIG92ZXJzaWdodCwgdGhlIGBqcGVnX3NraXBfc2NhbmxpbmVzKClgCithbmQgYGpwZWdfY3JvcF9zY2FubGluZXMoKWAgZnVuY3Rpb25zIHdlcmUgbm90IGJlaW5nIGluY2x1ZGVkIGluIGpwZWc3LmRsbCB3aGVuCitsaWJqcGVnLXR1cmJvIHdhcyBidWlsdCB3aXRoIGAtRFdJVEhfSlBFRzc9MWAgYW5kIGAtRFdJVEhfTUVNU1JDRFNUPTFgLgorCis2LiBGaXhlZCAiQm9ndXMgdmlydHVhbCBhcnJheSBhY2Nlc3MiIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hlbiB1c2luZyB0aGUKK2xvc3NsZXNzIGNyb3AgZmVhdHVyZSBpbiBqcGVndHJhbiBvciB0aGUgVHVyYm9KUEVHIEFQSSwgaWYgbGlianBlZy10dXJibyB3YXMKK2J1aWx0IHdpdGggbGlianBlZyB2NyBBUEkvQUJJIGVtdWxhdGlvbi4gIFRoaXMgd2FzIGFwcGFyZW50bHkgYSBsb25nLXN0YW5kaW5nCitidWcgdGhhdCBoYXMgZXhpc3RlZCBzaW5jZSB0aGUgaW50cm9kdWN0aW9uIG9mIGxpYmpwZWcgdjcvdjggQVBJL0FCSSBlbXVsYXRpb24KK2luIGxpYmpwZWctdHVyYm8gdjEuMS4KKworNy4gVGhlIGxvc3NsZXNzIHRyYW5zZm9ybSBmZWF0dXJlcyBpbiBqcGVndHJhbiBhbmQgdGhlIFR1cmJvSlBFRyBBUEkgd2lsbCBub3cKK2Fsd2F5cyBhdHRlbXB0IHRvIGFkanVzdCB0aGUgRVhJRiBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0IHRhZ3MgaWYgdGhlIGltYWdlIHNpemUKK2NoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybS4gIFRoaXMgYmVoYXZpb3IgaGFzIGFsd2F5cyBleGlzdGVkIHdoZW4KK3VzaW5nIGxpYmpwZWcgdjggQVBJL0FCSSBlbXVsYXRpb24uICBJdCB3YXMgc3VwcG9zZWQgdG8gYmUgYXZhaWxhYmxlIHdpdGgKK2xpYmpwZWcgdjcgQVBJL0FCSSBlbXVsYXRpb24gYXMgd2VsbCBidXQgZGlkIG5vdCB3b3JrIHByb3Blcmx5IGR1ZSB0byBhIGJ1Zy4KK0Z1cnRoZXJtb3JlLCB0aGVyZSB3YXMgbmV2ZXIgYW55IGdvb2QgcmVhc29uIG5vdCB0byBlbmFibGUgaXQgd2l0aCBsaWJqcGVnIHY2YgorQVBJL0FCSSBlbXVsYXRpb24sIHNpbmNlIHRoZSBiZWhhdmlvciBpcyBlbnRpcmVseSBpbnRlcm5hbC4gIE5vdGUgdGhhdAorYC1jb3B5IGFsbGAgbXVzdCBiZSBwYXNzZWQgdG8ganBlZ3RyYW4gaW4gb3JkZXIgdG8gdHJhbnNmZXIgdGhlIEVYSUYgdGFncyBmcm9tCit0aGUgc291cmNlIGltYWdlIHRvIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4KKworOC4gRml4ZWQgc2V2ZXJhbCBtZW1vcnkgbGVha3MgaW4gdGhlIFR1cmJvSlBFRyBBUEkgbGlicmFyeSB0aGF0IGNvdWxkIG9jY3VyCitpZiB0aGUgbGlicmFyeSB3YXMgYnVpbHQgd2l0aCBjZXJ0YWluIGNvbXBpbGVycyBhbmQgb3B0aW1pemF0aW9uIGxldmVscworKGtub3duIHRvIG9jY3VyIHdpdGggR0NDIDQueCBhbmQgY2xhbmcgd2l0aCBgLU8xYCBhbmQgaGlnaGVyIGJ1dCBub3Qgd2l0aAorR0NDIDUueCBvciA2LngpIGFuZCBvbmUgb2YgdGhlIHVuZGVybHlpbmcgbGlianBlZyBBUEkgZnVuY3Rpb25zIHRocmV3IGFuIGVycm9yCithZnRlciBhIFR1cmJvSlBFRyBBUEkgZnVuY3Rpb24gYWxsb2NhdGVkIGEgbG9jYWwgYnVmZmVyLgorCis5LiBUaGUgbGlianBlZy10dXJibyBtZW1vcnkgbWFuYWdlciB3aWxsIG5vdyBob25vciB0aGUgYG1heF9tZW1vcnlfdG9fdXNlYAorc3RydWN0dXJlIG1lbWJlciBpbiBqcGVnXF9tZW1vcnlcX21nciwgd2hpY2ggY2FuIGJlIHNldCB0byB0aGUgbWF4aW11bSBhbW91bnQKK29mIG1lbW9yeSAoaW4gYnl0ZXMpIHRoYXQgbGlianBlZy10dXJibyBzaG91bGQgdXNlIGR1cmluZyBkZWNvbXByZXNzaW9uIG9yCittdWx0aS1wYXNzIChpbmNsdWRpbmcgcHJvZ3Jlc3NpdmUpIGNvbXByZXNzaW9uLiAgVGhpcyBsaW1pdCBjYW4gYWxzbyBiZSBzZXQKK3VzaW5nIHRoZSBgSlBFR01FTWAgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdXNpbmcgdGhlIGAtbWF4bWVtb3J5YCBzd2l0Y2ggaW4KK2NqcGVnL2RqcGVnL2pwZWd0cmFuIChyZWZlciB0byB0aGUgcmVzcGVjdGl2ZSBtYW4gcGFnZXMgZm9yIG1vcmUgZGV0YWlscy4pCitUaGlzIGhhcyBiZWVuIGEgZG9jdW1lbnRlZCBmZWF0dXJlIG9mIGxpYmpwZWcgc2luY2UgdjUsIGJ1dCB0aGUKK2BtYWxsb2MoKWAvYGZyZWUoKWAgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1lbW9yeSBtYW5hZ2VyIChqbWVtbm9icy5jKSBuZXZlcgoraW1wbGVtZW50ZWQgdGhlIGZlYXR1cmUuICBSZXN0cmljdGluZyBsaWJqcGVnLXR1cmJvJ3MgbWVtb3J5IHVzYWdlIGlzIHVzZWZ1bAorZm9yIHR3byByZWFzb25zOiAgaXQgYWxsb3dzIHRlc3RlcnMgdG8gbW9yZSBlYXNpbHkgd29yayBhcm91bmQgdGhlIDIgR0IgbGltaXQKK2luIGxpYkZ1enplciwgYW5kIGl0IGFsbG93cyBkZXZlbG9wZXJzIG9mIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMgdG8KK21vcmUgZWFzaWx5IGRlZmVuZCBhZ2FpbnN0IG9uZSBvZiB0aGUgcHJvZ3Jlc3NpdmUgSlBFRyBleHBsb2l0cyAoTEpULTAxLTAwNCkKK2lkZW50aWZpZWQgaW4KK1t0aGlzIHJlcG9ydF0oaHR0cDovL3d3dy5saWJqcGVnLXR1cmJvLm9yZy9wbXdpa2kvdXBsb2Fkcy9BYm91dC9Ud29Jc3N1ZXN3aXRodGhlSlBFR1N0YW5kYXJkLnBkZikuCisKKzEwLiBUSkJlbmNoIHdpbGwgbm93IHJ1biBlYWNoIGJlbmNobWFyayBmb3IgMSBzZWNvbmQgcHJpb3IgdG8gc3RhcnRpbmcgdGhlCit0aW1lciwgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIHJlc3VsdHMuICBGdXJ0aGVybW9yZSwgdGhlCitgLXdhcm11cGAgb3B0aW9uIGlzIG5vdyB1c2VkIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB3YXJtdXAgdGltZSByYXRoZXIgdGhhbgordGhlIG51bWJlciBvZiB3YXJtdXAgaXRlcmF0aW9ucy4KKworMTEuIEZpeGVkIGFuIGVycm9yIChgc2hvcnQganVtcCBpcyBvdXQgb2YgcmFuZ2VgKSB0aGF0IG9jY3VycmVkIHdoZW4gYXNzZW1ibGluZwordGhlIDMyLWJpdCB4ODYgU0lNRCBleHRlbnNpb25zIHdpdGggTkFTTSB2ZXJzaW9ucyBwcmlvciB0byAyLjA0LiAgVGhpcyB3YXMgYQorcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IDEuNSBiZXRhMVsxMl0uCisKKworMS41LjEKKz09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuNS4wOgorCisxLiBQcmV2aW91c2x5LCB0aGUgdW5kb2N1bWVudGVkIGBKU0lNRF9GT1JDRSpgIGVudmlyb25tZW50IHZhcmlhYmxlcyBjb3VsZCBiZQordXNlZCB0byBmb3JjZS1lbmFibGUgYSBwYXJ0aWN1bGFyIFNJTUQgaW5zdHJ1Y3Rpb24gc2V0IGlmIG11bHRpcGxlIGluc3RydWN0aW9uCitzZXRzIHdlcmUgYXZhaWxhYmxlIG9uIGEgcGFydGljdWxhciBwbGF0Zm9ybS4gIE9uIHg4NiBwbGF0Zm9ybXMsIHdoZXJlIENQVQorZmVhdHVyZSBkZXRlY3Rpb24gaXMgYnVsbGV0cHJvb2YgYW5kIG11bHRpcGxlIFNJTUQgaW5zdHJ1Y3Rpb24gc2V0cyBhcmUKK2F2YWlsYWJsZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHRob3NlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBhbGxvdyBmb3JjaW5nIHRoZQordXNlIG9mIGFuIGluc3RydWN0aW9uIHNldCBvbmx5IGlmIHRoYXQgaW5zdHJ1Y3Rpb24gc2V0IGlzIGF2YWlsYWJsZS4gIEhvd2V2ZXIsCitzaW5jZSB0aGUgQVJNIGltcGxlbWVudGF0aW9ucyBvZiBsaWJqcGVnLXR1cmJvIGNhbiBvbmx5IHVzZSBvbmUgU0lNRAoraW5zdHJ1Y3Rpb24gc2V0LCBhbmQgc2luY2UgdGhlaXIgZmVhdHVyZSBkZXRlY3Rpb24gY29kZSBpcyBsZXNzIGJ1bGxldHByb29mCisocGFyc2luZyAvcHJvYy9jcHVpbmZvKSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBgSlNJTURfRk9SQ0VORU9OYCBlbnZpcm9ubWVudAordmFyaWFibGUgdG8gYnlwYXNzIHRoZSBmZWF0dXJlIGRldGVjdGlvbiBjb2RlIGFuZCByZWFsbHkgZm9yY2UgdGhlIHVzZSBvZiBORU9OCitpbnN0cnVjdGlvbnMuICBBIG5ldyBlbnZpcm9ubWVudCB2YXJpYWJsZSAoYEpTSU1EX0ZPUkNFRFNQUjJgKSB3YXMgaW50cm9kdWNlZAoraW4gdGhlIE1JUFMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzYW1lIHJlYXNvbnMsIGFuZCB0aGUgZXhpc3RpbmcKK2BKU0lNRF9GT1JDRU5PTkVgIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHRlbmRlZCB0byB0aGF0IGltcGxlbWVudGF0aW9uLgorVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByb3ZpZGUgYSB3b3JrYXJvdW5kIGZvciB0aG9zZSBhdHRlbXB0aW5nIHRvIHRlc3QKK0FSTSBhbmQgTUlQUyBidWlsZHMgb2YgbGlianBlZy10dXJibyBpbiBRRU1VLCB3aGljaCBwYXNzZXMgdGhyb3VnaAorL3Byb2MvY3B1aW5mbyBmcm9tIHRoZSBob3N0IHN5c3RlbS4KKworMi4gbGlianBlZy10dXJibyBwcmV2aW91c2x5IGFzc3VtZWQgdGhhdCBBbHRpVmVjIGluc3RydWN0aW9ucyB3ZXJlIGFsd2F5cworYXZhaWxhYmxlIG9uIFBvd2VyUEMgcGxhdGZvcm1zLCB3aGljaCBsZWQgdG8gImlsbGVnYWwgaW5zdHJ1Y3Rpb24iIGVycm9ycyB3aGVuCitydW5uaW5nIG9uIFBvd2VyUEMgY2hpcHMgdGhhdCBsYWNrIEFsdGlWZWMgc3VwcG9ydCAoc3VjaCBhcyB0aGUgb2xkZXIgN3h4L0czCithbmQgbmV3ZXIgZTU1MDAgc2VyaWVzLikgIGxpYmpwZWctdHVyYm8gbm93IGV4YW1pbmVzIC9wcm9jL2NwdWluZm8gb24KK0xpbnV4L0FuZHJvaWQgc3lzdGVtcyBhbmQgZW5hYmxlcyBBbHRpVmVjIGluc3RydWN0aW9ucyBvbmx5IGlmIHRoZSBDUFUgc3VwcG9ydHMKK3RoZW0uICBJdCBhbHNvIG5vdyBwcm92aWRlcyB0d28gZW52aXJvbm1lbnQgdmFyaWFibGVzLCBgSlNJTURfRk9SQ0VBTFRJVkVDYCBhbmQKK2BKU0lNRF9GT1JDRU5PTkVgLCB0byBmb3JjZS1lbmFibGUgYW5kIGZvcmNlLWRpc2FibGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgaW4KK2Vudmlyb25tZW50cyB3aGVyZSAvcHJvYy9jcHVpbmZvIGlzIGFuIHVucmVsaWFibGUgbWVhbnMgb2YgQ1BVIGZlYXR1cmUKK2RldGVjdGlvbiAoc3VjaCBhcyB3aGVuIHJ1bm5pbmcgaW4gUUVNVS4pICBPbiBPUyBYLCBsaWJqcGVnLXR1cmJvIGNvbnRpbnVlcyB0bworYXNzdW1lIHRoYXQgQWx0aVZlYyBzdXBwb3J0IGlzIGFsd2F5cyBhdmFpbGFibGUsIHdoaWNoIG1lYW5zIHRoYXQgbGlianBlZy10dXJibworY2Fubm90IGJlIHVzZWQgd2l0aCBHMyBNYWNzIHVubGVzcyB5b3Ugc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorYEpTSU1EX0ZPUkNFTk9ORWAgdG8gYDFgLgorCiszLiBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5IDY0LWJpdCBBUk0gKEFBcmNoNjQpIGJ1aWxkcyBvZiBsaWJqcGVnLXR1cmJvIHdvdWxkCitjcmFzaCB3aGVuIGJ1aWx0IHdpdGggcmVjZW50IHJlbGVhc2VzIG9mIHRoZSBDbGFuZy9MTFZNIGNvbXBpbGVyLiAgVGhpcyB3YXMKK2NhdXNlZCBieSBhbiBBQkkgY29uZm9ybWFuY2UgaXNzdWUgaW4gc29tZSBvZiBsaWJqcGVnLXR1cmJvJ3MgNjQtYml0IE5FT04gU0lNRAorcm91dGluZXMuICBUaG9zZSByb3V0aW5lcyB3ZXJlIGluY29ycmVjdGx5IHVzaW5nIDY0LWJpdCBpbnN0cnVjdGlvbnMgdG8KK3RyYW5zZmVyIGEgMzItYml0IEpESU1FTlNJT04gYXJndW1lbnQsIHdoZXJlYXMgdGhlIEFCSSBhbGxvd3MgdGhlIHVwcGVyCisodW51c2VkKSAzMiBiaXRzIG9mIGEgMzItYml0IGFyZ3VtZW50J3MgcmVnaXN0ZXIgdG8gYmUgdW5kZWZpbmVkLiAgVGhlIG5ldworQ2xhbmcvTExWTSBvcHRpbWl6ZXIgdXNlcyBsb2FkIGNvbWJpbmluZyB0byB0cmFuc2ZlciBtdWx0aXBsZSBhZGphY2VudCAzMi1iaXQKK3N0cnVjdHVyZSBtZW1iZXJzIGludG8gYSBzaW5nbGUgNjQtYml0IHJlZ2lzdGVyLCBhbmQgdGhpcyBleHBvc2VkIHRoZSBBQkkKK2NvbmZvcm1hbmNlIGlzc3VlLgorCis0LiBGYW5jeSB1cHNhbXBsaW5nIGlzIG5vdyBzdXBwb3J0ZWQgd2hlbiBkZWNvbXByZXNzaW5nIEpQRUcgaW1hZ2VzIHRoYXQgdXNlCis0OjQ6MCAoaDF2MikgY2hyb21hIHN1YnNhbXBsaW5nLiAgVGhlc2UgaW1hZ2VzIGFyZSBnZW5lcmF0ZWQgd2hlbiBsb3NzbGVzc2x5Cityb3RhdGluZyBvciB0cmFuc3Bvc2luZyBKUEVHIGltYWdlcyB0aGF0IHVzZSA0OjI6MiAoaDJ2MSkgY2hyb21hIHN1YnNhbXBsaW5nLgorVGhlIGgxdjIgZmFuY3kgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbm90IGN1cnJlbnRseSBTSU1ELWFjY2VsZXJhdGVkLgorCis1LiBJZiBtZXJnZWQgdXBzYW1wbGluZyBpc24ndCBTSU1ELWFjY2VsZXJhdGVkIGJ1dCBZQ2JDci10by1SR0IgY29udmVyc2lvbiBpcywKK3RoZW4gbGlianBlZy10dXJibyB3aWxsIG5vdyBkaXNhYmxlIG1lcmdlZCB1cHNhbXBsaW5nIHdoZW4gZGVjb21wcmVzc2luZyBZQ2JDcgorSlBFRyBpbWFnZXMgaW50byBSR0Igb3IgZXh0ZW5kZWQgUkdCIG91dHB1dCBpbWFnZXMuICBUaGlzIHNpZ25pZmljYW50bHkgc3BlZWRzCit1cCB0aGUgZGVjb21wcmVzc2lvbiBvZiA0OjI6MCBhbmQgNDoyOjIgSlBFR3Mgb24gQVJNIHBsYXRmb3JtcyBpZiBmYW5jeQordXBzYW1wbGluZyBpcyBub3QgdXNlZCAoZm9yIGV4YW1wbGUsIGlmIHRoZSBgLW5vc21vb3RoYCBvcHRpb24gdG8gZGpwZWcgaXMKK3NwZWNpZmllZC4pCisKKzYuIFRoZSBUdXJib0pQRUcgQVBJIHdpbGwgbm93IGRlY29tcHJlc3MgNDoyOjIgYW5kIDQ6NDowIEpQRUcgaW1hZ2VzIHdpdGgKKzJ4MiBsdW1pbmFuY2Ugc2FtcGxpbmcgZmFjdG9ycyBhbmQgMngxIG9yIDF4MiBjaHJvbWluYW5jZSBzYW1wbGluZyBmYWN0b3JzLgorVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCB3YXkgb2Ygc3BlY2lmeWluZyAyeCBzdWJzYW1wbGluZyAobm9ybWFsbHkgNDoyOjIgSlBFR3MKK2hhdmUgMngxIGx1bWluYW5jZSBhbmQgMXgxIGNocm9taW5hbmNlIHNhbXBsaW5nIGZhY3RvcnMsIGFuZCA0OjQ6MCBKUEVHcyBoYXZlCisxeDIgbHVtaW5hbmNlIGFuZCAxeDEgY2hyb21pbmFuY2Ugc2FtcGxpbmcgZmFjdG9ycyksIGJ1dCB0aGUgSlBFRyBzcGVjaWZpY2F0aW9uCithbmQgdGhlIGxpYmpwZWcgQVBJIGJvdGggYWxsb3cgaXQuCisKKzcuIEZpeGVkIGFuIHVuc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGxpYmpwZWcgbWVtb3J5IG1hbmFnZXIsIGRldGVjdGVkCitieSB0aGUgQ2xhbmcgdW5kZWZpbmVkIGJlaGF2aW9yIHNhbml0aXplciwgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkKK2F0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBhIHNwZWNpYWxseS1jcmFmdGVkIG1hbGZvcm1lZCBKUEVHIGltYWdlLiAgVGhpcyBpc3N1ZQorYWZmZWN0ZWQgb25seSAzMi1iaXQgY29kZSBhbmQgZGlkIG5vdCBwb3NlIGEgc2VjdXJpdHkgdGhyZWF0LCBidXQgcmVtb3ZpbmcgdGhlCit3YXJuaW5nIG1ha2VzIGl0IGVhc2llciB0byBkZXRlY3QgYWN0dWFsIHNlY3VyaXR5IGlzc3Vlcywgc2hvdWxkIHRoZXkgYXJpc2UgaW4KK3RoZSBmdXR1cmUuCisKKzguIEZpeGVkIGFkZGl0aW9uYWwgbmVnYXRpdmUgbGVmdCBzaGlmdHMgYW5kIG90aGVyIGlzc3VlcyByZXBvcnRlZCBieSB0aGUgR0NDCithbmQgQ2xhbmcgdW5kZWZpbmVkIGJlaGF2aW9yIHNhbml0aXplcnMgd2hlbiBhdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MKK3NwZWNpYWxseS1jcmFmdGVkIG1hbGZvcm1lZCBKUEVHIGltYWdlcy4gIE5vbmUgb2YgdGhlc2UgaXNzdWVzIHBvc2VkIGEgc2VjdXJpdHkKK3RocmVhdCwgYnV0IHJlbW92aW5nIHRoZSB3YXJuaW5ncyBtYWtlcyBpdCBlYXNpZXIgdG8gZGV0ZWN0IGFjdHVhbCBzZWN1cml0eQoraXNzdWVzLCBzaG91bGQgdGhleSBhcmlzZSBpbiB0aGUgZnV0dXJlLgorCis5LiBGaXhlZCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IHJlZmVyZW5jZSwgaW50cm9kdWNlZCBieSAxLjQuOTBbMl0gKHBhcnRpYWwKK2ltYWdlIGRlY29tcHJlc3Npb24pIGFuZCBkZXRlY3RlZCBieSB0aGUgQ2xhbmcgdW5kZWZpbmVkIGJlaGF2aW9yIHNhbml0aXplciwKK3RoYXQgY291bGQgYmUgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lhbGx5LWNyYWZ0ZWQgbWFsZm9ybWVkIEpQRUcgaW1hZ2Ugd2l0aCBtb3JlCit0aGFuIGZvdXIgY29tcG9uZW50cy4gIEJlY2F1c2UgdGhlIG91dC1vZi1ib3VuZHMgcmVmZXJlbmNlIHdhcyBzdGlsbCB3aXRoaW4gdGhlCitzYW1lIHN0cnVjdHVyZSwgaXQgd2FzIG5vdCBrbm93biB0byBwb3NlIGEgc2VjdXJpdHkgdGhyZWF0LCBidXQgcmVtb3ZpbmcgdGhlCit3YXJuaW5nIG1ha2VzIGl0IGVhc2llciB0byBkZXRlY3QgYWN0dWFsIHNlY3VyaXR5IGlzc3Vlcywgc2hvdWxkIHRoZXkgYXJpc2UgaW4KK3RoZSBmdXR1cmUuCisKKzEwLiBGaXhlZCBhbm90aGVyIEFCSSBjb25mb3JtYW5jZSBpc3N1ZSBpbiB0aGUgNjQtYml0IEFSTSAoQUFyY2g2NCkgTkVPTiBTSU1ECitjb2RlLiAgU29tZSBvZiB0aGUgcm91dGluZXMgd2VyZSBpbmNvcnJlY3RseSByZWFkaW5nIGFuZCBzdG9yaW5nIGRhdGEgYmVsb3cgdGhlCitzdGFjayBwb2ludGVyLCB3aGljaCBjYXVzZWQgc2VnZmF1bHRzIGluIGNlcnRhaW4gYXBwbGljYXRpb25zIHVuZGVyIHNwZWNpZmljCitjaXJjdW1zdGFuY2VzLgorCisKKzEuNS4wCis9PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAxLjUgYmV0YTE6CisKKzEuIEZpeGVkIGFuIGlzc3VlIHdoZXJlYnkgYSBtYWxmb3JtZWQgbW90aW9uLUpQRUcgZnJhbWUgY291bGQgY2F1c2UgdGhlICJmYXN0CitwYXRoIiBvZiBsaWJqcGVnLXR1cmJvJ3MgSHVmZm1hbiBkZWNvZGVyIHRvIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4KKworMi4gQWRkZWQgbGlianBlZy10dXJibyB2ZXJzaW9uIGFuZCBidWlsZCBpbmZvcm1hdGlvbiB0byB0aGUgZ2xvYmFsIHN0cmluZyB0YWJsZQorb2YgdGhlIGxpYmpwZWcgYW5kIFR1cmJvSlBFRyBBUEkgbGlicmFyaWVzLiAgVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSBpbiBvdGhlcgoraW5mcmFzdHJ1Y3R1cmUgbGlicmFyaWVzLCBzdWNoIGFzIE9wZW5TU0wgYW5kIGxpYnBuZywgYmVjYXVzZSBpdCBtYWtlcyBpdCBlYXN5Cit0byBleGFtaW5lIGFuIGFwcGxpY2F0aW9uIGJpbmFyeSBhbmQgZGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdGhlCithcHBsaWNhdGlvbiB3YXMgbGlua2VkIGFnYWluc3QuCisKKzMuIEZpeGVkIGEgY291cGxlIG9mIGlzc3VlcyBpbiB0aGUgUFBNIHJlYWRlciB0aGF0IHdvdWxkIGNhdXNlIGJ1ZmZlciBvdmVycnVucworaW4gY2pwZWcgaWYgb25lIG9mIHRoZSB2YWx1ZXMgaW4gYSBiaW5hcnkgUFBNL1BHTSBpbnB1dCBmaWxlIGV4Y2VlZGVkIHRoZQorbWF4aW11bSB2YWx1ZSBkZWZpbmVkIGluIHRoZSBmaWxlJ3MgaGVhZGVyLiAgbGlianBlZy10dXJibyAxLjQuMiBhbHJlYWR5CitpbmNsdWRlZCBhIHNpbWlsYXIgZml4IGZvciBBU0NJSSBQUE0vUEdNIGZpbGVzLiAgTm90ZSB0aGF0IHRoZXNlIGlzc3VlcyB3ZXJlCitub3Qgc2VjdXJpdHkgYnVncywgc2luY2UgdGhleSB3ZXJlIGNvbmZpbmVkIHRvIHRoZSBjanBlZyBwcm9ncmFtIGFuZCBkaWQgbm90CithZmZlY3QgYW55IG9mIHRoZSBsaWJqcGVnLXR1cmJvIGxpYnJhcmllcy4KKworNC4gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSBhdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgYSBKUEVHIGZpbGUgd2l0aCBhIGNvcnJ1cHQKK2hlYWRlciB1c2luZyB0aGUgYHRqRGVjb21wcmVzc1RvWVVWMigpYCBmdW5jdGlvbiB3b3VsZCBjYXVzZSB0aGUgZnVuY3Rpb24gdG8KK2Fib3J0IHdpdGhvdXQgcmV0dXJuaW5nIGFuIGVycm9yIGFuZCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBjb3JydXB0IHRoZQorc3RhY2suICBUaGlzIG9ubHkgb2NjdXJyZWQgaWYgYHRqRGVjb21wcmVzc1RvWVVWMigpYCB3YXMgY2FsbGVkIHByaW9yIHRvCitjYWxsaW5nIGB0akRlY29tcHJlc3NIZWFkZXIzKClgLCBvciBpZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20KK2B0akRlY29tcHJlc3NIZWFkZXIzKClgIHdhcyBpZ25vcmVkIChib3RoIGNhc2VzIHJlcHJlc2VudCBpbmNvcnJlY3QgdXNhZ2Ugb2YKK3RoZSBUdXJib0pQRUcgQVBJLikKKworNS4gRml4ZWQgYW4gaXNzdWUgaW4gdGhlIEFSTSAzMi1iaXQgU0lNRC1hY2NlbGVyYXRlZCBIdWZmbWFuIGVuY29kZXIgdGhhdAorcHJldmVudGVkIHRoZSBjb2RlIGZyb20gYXNzZW1ibGluZyBwcm9wZXJseSB3aXRoIGNsYW5nLgorCis2LiBUaGUgYGpwZWdfc3RkaW9fc3JjKClgLCBganBlZ19tZW1fc3JjKClgLCBganBlZ19zdGRpb19kZXN0KClgLCBhbmQKK2BqcGVnX21lbV9kZXN0KClgIGZ1bmN0aW9ucyBpbiB0aGUgbGlianBlZyBBUEkgd2lsbCBub3cgdGhyb3cgYW4gZXJyb3IgaWYgYQorc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXIgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZCB0byB0aGUgY29tcHJlc3Mgb3IKK2RlY29tcHJlc3Mgb2JqZWN0IGJ5IGEgZGlmZmVyZW50IGZ1bmN0aW9uIG9yIGJ5IHRoZSBjYWxsaW5nIHByb2dyYW0uICBUaGlzCitwcmV2ZW50cyB0aGVzZSBmdW5jdGlvbnMgZnJvbSBhdHRlbXB0aW5nIHRvIHJldXNlIGEgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXIKK3N0cnVjdHVyZSB0aGF0IHdhcyBhbGxvY2F0ZWQgZWxzZXdoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBlbnN1cmUgdGhhdAoraXQgd291bGQgYmUgYmlnIGVub3VnaCB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VyLgorCisKKzEuNC45MCAoMS41IGJldGExKQorPT09PT09PT09PT09PT09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuNC4yOgorCisxLiBBZGRlZCBmdWxsIFNJTUQgYWNjZWxlcmF0aW9uIGZvciBQb3dlclBDIHBsYXRmb3JtcyB1c2luZyBBbHRpVmVjIFZNWAorKDEyOC1iaXQgU0lNRCkgaW5zdHJ1Y3Rpb25zLiAgQWx0aG91Z2ggdGhlIHBlcmZvcm1hbmNlIG9mIGxpYmpwZWctdHVyYm8gb24KK1Bvd2VyUEMgd2FzIGFscmVhZHkgZ29vZCwgZHVlIHRvIHRoZSBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lzdGVycyBhdmFpbGFibGUKK3RvIHRoZSBjb21waWxlciB2cy4geDg2LCBpdCB3YXMgc3RpbGwgcG9zc2libGUgdG8gc3BlZWQgdXAgY29tcHJlc3Npb24gYnkgYWJvdXQKKzMtNHggYW5kIGRlY29tcHJlc3Npb24gYnkgYWJvdXQgMi0yLjV4IChyZWxhdGl2ZSB0byBsaWJqcGVnIHY2YikgdGhyb3VnaCB0aGUKK3VzZSBvZiBBbHRpVmVjIGluc3RydWN0aW9ucy4KKworMi4gQWRkZWQgdHdvIG5ldyBsaWJqcGVnIEFQSSBmdW5jdGlvbnMgKGBqcGVnX3NraXBfc2NhbmxpbmVzKClgIGFuZAorYGpwZWdfY3JvcF9zY2FubGluZSgpYCkgdGhhdCBjYW4gYmUgdXNlZCB0byBwYXJ0aWFsbHkgZGVjb2RlIGEgSlBFRyBpbWFnZS4gIFNlZQorW2xpYmpwZWcudHh0XShsaWJqcGVnLnR4dCkgZm9yIG1vcmUgZGV0YWlscy4KKworMy4gVGhlIFRKQ29tcHJlc3NvciBhbmQgVEpEZWNvbXByZXNzb3IgY2xhc3NlcyBpbiB0aGUgVHVyYm9KUEVHIEphdmEgQVBJIG5vdworaW1wbGVtZW50IHRoZSBDbG9zZWFibGUgaW50ZXJmYWNlLCBzbyB0aG9zZSBjbGFzc2VzIGNhbiBiZSB1c2VkIHdpdGggYQordHJ5LXdpdGgtcmVzb3VyY2VzIHN0YXRlbWVudC4KKworNC4gVGhlIFR1cmJvSlBFRyBKYXZhIGNsYXNzZXMgbm93IHRocm93IHVuY2hlY2tlZCBpZGlvbWF0aWMgZXhjZXB0aW9ucworKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKSBmb3IgdW5yZWNvdmVyYWJsZSBlcnJvcnMKK2NhdXNlZCBieSBpbmNvcnJlY3QgQVBJIHVzYWdlLCBhbmQgdGhvc2UgY2xhc3NlcyB0aHJvdyBhIG5ldyBjaGVja2VkIGV4Y2VwdGlvbgordHlwZSAoVEpFeGNlcHRpb24pIGZvciBlcnJvcnMgdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggZnJvbSB0aGUgQyBsaWJyYXJ5LgorCis1LiBTb3VyY2UgYnVmZmVycyBmb3IgdGhlIFR1cmJvSlBFRyBDIEFQSSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgdGhlCitganBlZ19tZW1fc3JjKClgIGZ1bmN0aW9uIGluIHRoZSBsaWJqcGVnIEFQSSwgYXJlIG5vdyBkZWNsYXJlZCBhcyBjb25zdAorcG9pbnRlcnMuICBUaGlzIGZhY2lsaXRhdGVzIHBhc3NpbmcgcmVhZC1vbmx5IGJ1ZmZlcnMgdG8gdGhvc2UgZnVuY3Rpb25zIGFuZAorZW5zdXJlcyB0aGUgY2FsbGVyIHRoYXQgdGhlIHNvdXJjZSBidWZmZXIgd2lsbCBub3QgYmUgbW9kaWZpZWQuICBUaGlzIHNob3VsZAorbm90IGNyZWF0ZSBhbnkgYmFja3dhcmQgQVBJIG9yIEFCSSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIHByaW9yIGxpYmpwZWctdHVyYm8KK3JlbGVhc2VzLgorCis2LiBUaGUgTUlQUyBEU1ByMiBTSU1EIGNvZGUgY2FuIG5vdyBiZSBjb21waWxlZCB0byBzdXBwb3J0IGVpdGhlciBGUj0wIG9yIEZSPTEKK0ZQVXMuCisKKzcuIEZpeGVkIGFkZGl0aW9uYWwgbmVnYXRpdmUgbGVmdCBzaGlmdHMgYW5kIG90aGVyIGlzc3VlcyByZXBvcnRlZCBieSB0aGUgR0NDCithbmQgQ2xhbmcgdW5kZWZpbmVkIGJlaGF2aW9yIHNhbml0aXplcnMuICBNb3N0IG9mIHRoZXNlIGlzc3VlcyBhZmZlY3RlZCBvbmx5CiszMi1iaXQgY29kZSwgYW5kIG5vbmUgb2YgdGhlbSB3YXMga25vd24gdG8gcG9zZSBhIHNlY3VyaXR5IHRocmVhdCwgYnV0IHJlbW92aW5nCit0aGUgd2FybmluZ3MgbWFrZXMgaXQgZWFzaWVyIHRvIGRldGVjdCBhY3R1YWwgc2VjdXJpdHkgaXNzdWVzLCBzaG91bGQgdGhleQorYXJpc2UgaW4gdGhlIGZ1dHVyZS4KKworOC4gUmVtb3ZlZCB0aGUgdW5uZWNlc3NhcnkgYC5hcmNoYCBkaXJlY3RpdmUgZnJvbSB0aGUgQVJNNjQgTkVPTiBTSU1EIGNvZGUuCitUaGlzIGRpcmVjdGl2ZSB3YXMgcHJldmVudGluZyB0aGUgY29kZSBmcm9tIGFzc2VtYmxpbmcgdXNpbmcgdGhlIGNsYW5nCitpbnRlZ3JhdGVkIGFzc2VtYmxlci4KKworOS4gRml4ZWQgYSByZWdyZXNzaW9uIGNhdXNlZCBieSAxLjQuMVs2XSB0aGF0IHByZXZlbnRlZCAzMi1iaXQgYW5kIDY0LWJpdAorbGlianBlZy10dXJibyBSUE1zIGZyb20gYmVpbmcgaW5zdGFsbGVkIHNpbXVsdGFuZW91c2x5IG9uIHJlY2VudCBSZWQgSGF0L0ZlZG9yYQorZGlzdHJpYnV0aW9ucy4gIFRoaXMgd2FzIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgYSBtYWNybyBpbiBqY29uZmlnLmggdGhhdAorYWxsb3dzIHRoZSBIdWZmbWFuIGNvZGVjIHRvIGRldGVybWluZSB0aGUgd29yZCBzaXplIGF0IGNvbXBpbGUgdGltZS4gIFNpbmNlCit0aGF0IG1hY3JvIGRpZmZlcnMgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJpdCBidWlsZHMsIHRoaXMgY2F1c2VkIGEgY29uZmxpY3QKK2JldHdlZW4gdGhlIGkzODYgYW5kIHg4Nl82NCBSUE1zIChhbnkgZGlmZmVyaW5nIGZpbGVzLCBvdGhlciB0aGFuIGV4ZWN1dGFibGVzLAorYXJlIG5vdCBhbGxvd2VkIHdoZW4gMzItYml0IGFuZCA2NC1iaXQgUlBNcyBhcmUgaW5zdGFsbGVkIHNpbXVsdGFuZW91c2x5LikKK1NpbmNlIHRoZSBtYWNybyBpcyB1c2VkIG9ubHkgaW50ZXJuYWxseSwgaXQgaGFzIGJlZW4gbW92ZWQgaW50byBqY29uZmlnaW50LmguCisKKzEwLiBUaGUgeDg2LTY0IFNJTUQgY29kZSBjYW4gbm93IGJlIGRpc2FibGVkIGF0IHJ1biB0aW1lIGJ5IHNldHRpbmcgdGhlCitgSlNJTURfRk9SQ0VOT05FYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgMWAgKHRoZSBvdGhlciBTSU1EIGltcGxlbWVudGF0aW9ucworYWxyZWFkeSBoYWQgdGhpcyBjYXBhYmlsaXR5LikKKworMTEuIEFkZGVkIGEgbmV3IGNvbW1hbmQtbGluZSBhcmd1bWVudCB0byBUSkJlbmNoIChgLW5vd3JpdGVgKSB0aGF0IHByZXZlbnRzIHRoZQorYmVuY2htYXJrIGZyb20gb3V0cHV0dGluZyBhbnkgaW1hZ2VzLiAgVGhpcyByZW1vdmVzIGFueSBwb3RlbnRpYWwgb3BlcmF0aW5nCitzeXN0ZW0gb3ZlcmhlYWQgdGhhdCBtaWdodCBiZSBjYXVzZWQgYnkgbGF6eSB3cml0ZXMgdG8gZGlzayBhbmQgdGh1cyBpbXByb3ZlcwordGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMuCisKKzEyLiBBZGRlZCBTSU1EIGFjY2VsZXJhdGlvbiBmb3IgSHVmZm1hbiBlbmNvZGluZyBvbiBTU0UyLWNhcGFibGUgeDg2IGFuZCB4ODYtNjQKK3BsYXRmb3Jtcy4gIFRoaXMgc3BlZWRzIHVwIHRoZSBjb21wcmVzc2lvbiBvZiBmdWxsLWNvbG9yIEpQRUdzIGJ5IGFib3V0IDEwLTE1JQorb24gYXZlcmFnZSAocmVsYXRpdmUgdG8gbGlianBlZy10dXJibyAxLjQueCkgd2hlbiB1c2luZyBtb2Rlcm4gSW50ZWwgYW5kIEFNRAorQ1BVcy4gIEFkZGl0aW9uYWxseSwgdGhpcyB3b3JrcyBhcm91bmQgYW4gaXNzdWUgaW4gdGhlIGNsYW5nIG9wdGltaXplciB0aGF0CitwcmV2ZW50cyBpdCAoYXMgb2YgdGhpcyB3cml0aW5nKSBmcm9tIGFjaGlldmluZyB0aGUgc2FtZSBwZXJmb3JtYW5jZSBhcyBHQ0MKK3doZW4gY29tcGlsaW5nIHRoZSBDIHZlcnNpb24gb2YgdGhlIEh1ZmZtYW4gZW5jb2RlcgorKDxodHRwczovL2xsdm0ub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE2MDM1PikuICBGb3IgdGhlIHB1cnBvc2VzIG9mCitiZW5jaG1hcmtpbmcgb3IgcmVncmVzc2lvbiB0ZXN0aW5nLCBTSU1ELWFjY2VsZXJhdGVkIEh1ZmZtYW4gZW5jb2RpbmcgY2FuIGJlCitkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBgSlNJTURfTk9IVUZGRU5DYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgMWAuCisKKzEzLiBBZGRlZCBBUk0gNjQtYml0IChBUk12OCkgTkVPTiBTSU1EIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbW9ubHktdXNlZAorY29tcHJlc3Npb24gYWxnb3JpdGhtcyAoaW5jbHVkaW5nIHRoZSBzbG93IGludGVnZXIgZm9yd2FyZCBEQ1QgYW5kIGgydjIgJiBoMnYxCitkb3duc2FtcGxpbmcgYWxnb3JpdGhtcywgd2hpY2ggYXJlIG5vdCBhY2NlbGVyYXRlZCBpbiB0aGUgMzItYml0IE5FT04KK2ltcGxlbWVudGF0aW9uLikgIFRoaXMgc3BlZWRzIHVwIHRoZSBjb21wcmVzc2lvbiBvZiBmdWxsLWNvbG9yIEpQRUdzIGJ5IGFib3V0Cis3NSUgb24gYXZlcmFnZSBvbiBhIENhdml1bSBUaHVuZGVyWCBwcm9jZXNzb3IgYW5kIGJ5IGFib3V0IDItMi41eCBvbiBhdmVyYWdlIG9uCitDb3J0ZXgtQTUzIGFuZCBDb3J0ZXgtQTU3IGNvcmVzLgorCisxNC4gQWRkZWQgU0lNRCBhY2NlbGVyYXRpb24gZm9yIEh1ZmZtYW4gZW5jb2Rpbmcgb24gTkVPTi1jYXBhYmxlIEFSTSAzMi1iaXQKK2FuZCA2NC1iaXQgcGxhdGZvcm1zLgorCisgICAgRm9yIDMyLWJpdCBjb2RlLCB0aGlzIHNwZWVkcyB1cCB0aGUgY29tcHJlc3Npb24gb2YgZnVsbC1jb2xvciBKUEVHcyBieQorYWJvdXQgMzAlIG9uIGF2ZXJhZ2Ugb24gYSB0eXBpY2FsIGlPUyBkZXZpY2UgKGlQaG9uZSA0UywgQ29ydGV4LUE5KSBhbmQgYnkKK2Fib3V0IDYtNyUgb24gYXZlcmFnZSBvbiBhIHR5cGljYWwgQW5kcm9pZCBkZXZpY2UgKE5leHVzIDVYLCBDb3J0ZXgtQTUzIGFuZAorQ29ydGV4LUE1NyksIHJlbGF0aXZlIHRvIGxpYmpwZWctdHVyYm8gMS40LnguICBOb3RlIHRoYXQgdGhlIGxhcmdlciBzcGVlZHVwCit1bmRlciBpT1MgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgaU9TIGJ1aWxkcyB1c2UgTExWTSwgd2hpY2ggZG9lcyBub3Qgb3B0aW1pemUKK3RoZSBDIEh1ZmZtYW4gZW5jb2RlciBhcyB3ZWxsIGFzIEdDQyBkb2VzLgorCisgICAgRm9yIDY0LWJpdCBjb2RlLCBORU9OLWFjY2VsZXJhdGVkIEh1ZmZtYW4gZW5jb2Rpbmcgc3BlZWRzIHVwIHRoZQorY29tcHJlc3Npb24gb2YgZnVsbC1jb2xvciBKUEVHcyBieSBhYm91dCA0MCUgb24gYXZlcmFnZSBvbiBhIHR5cGljYWwgaU9TIGRldmljZQorKGlQaG9uZSA1UywgQXBwbGUgQTcpIGFuZCBieSBhYm91dCA3LTglIG9uIGF2ZXJhZ2Ugb24gYSB0eXBpY2FsIEFuZHJvaWQgZGV2aWNlCisoTmV4dXMgNVgsIENvcnRleC1BNTMgYW5kIENvcnRleC1BNTcpLCBpbiBhZGRpdGlvbiB0byB0aGUgc3BlZWR1cCBkZXNjcmliZWQgaW4KK1sxM10gYWJvdmUuCisKKyAgICBGb3IgdGhlIHB1cnBvc2VzIG9mIGJlbmNobWFya2luZyBvciByZWdyZXNzaW9uIHRlc3RpbmcsIFNJTUQtYWNjZWxlcmF0ZWQKK0h1ZmZtYW4gZW5jb2RpbmcgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIGBKU0lNRF9OT0hVRkZFTkNgIGVudmlyb25tZW50Cit2YXJpYWJsZSB0byBgMWAuCisKKzE1LiBwa2ctY29uZmlnICgucGMpIHNjcmlwdHMgYXJlIG5vdyBpbmNsdWRlZCBmb3IgYm90aCB0aGUgbGlianBlZyBhbmQKK1R1cmJvSlBFRyBBUEkgbGlicmFyaWVzIG9uIFVuKnggc3lzdGVtcy4gIE5vdGUgdGhhdCBpZiBhIHByb2plY3QncyBidWlsZCBzeXN0ZW0KK3JlbGllcyBvbiB0aGVzZSBzY3JpcHRzLCB0aGVuIGl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGJ1aWxkIHRoYXQgcHJvamVjdAord2l0aCBsaWJqcGVnIG9yIHdpdGggYSBwcmlvciB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8uCisKKzE2LiBPcHRpbWl6ZWQgdGhlIEFSTSA2NC1iaXQgKEFSTXY4KSBORU9OIFNJTUQgZGVjb21wcmVzc2lvbiByb3V0aW5lcyB0bworaW1wcm92ZSBwZXJmb3JtYW5jZSBvbiBDUFVzIHdpdGggaW4tb3JkZXIgcGlwZWxpbmVzLiAgVGhpcyBzcGVlZHMgdXAgdGhlCitkZWNvbXByZXNzaW9uIG9mIGZ1bGwtY29sb3IgSlBFR3MgYnkgbmVhcmx5IDJ4IG9uIGF2ZXJhZ2Ugb24gYSBDYXZpdW0gVGh1bmRlclgKK3Byb2Nlc3NvciBhbmQgYnkgYWJvdXQgMTUlIG9uIGF2ZXJhZ2Ugb24gYSBDb3J0ZXgtQTUzIGNvcmUuCisKKzE3LiBGaXhlZCBhbiBpc3N1ZSBpbiB0aGUgYWNjZWxlcmF0ZWQgSHVmZm1hbiBkZWNvZGVyIHRoYXQgY291bGQgaGF2ZSBjYXVzZWQKK3RoZSBkZWNvZGVyIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIgd2hlbiBhIG1hbGZvcm1lZCwKK3NwZWNpYWxseS1jcmFmdGVkIEpQRUcgaW1hZ2Ugd2FzIGJlaW5nIGRlY29tcHJlc3NlZC4gIEluIHByaW9yIHZlcnNpb25zIG9mCitsaWJqcGVnLXR1cmJvLCB0aGUgYWNjZWxlcmF0ZWQgSHVmZm1hbiBkZWNvZGVyIHdhcyBpbnZva2VkIChpbiBtb3N0IGNhc2VzKSBvbmx5CitpZiB0aGVyZSB3ZXJlID4gMTI4IGJ5dGVzIG9mIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlci4gIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlCit0byBjb25zdHJ1Y3QgYSBKUEVHIGltYWdlIGluIHdoaWNoIGEgc2luZ2xlIEh1ZmZtYW4gYmxvY2sgaXMgb3ZlciA0MzAgYnl0ZXMKK2xvbmcsIHNvIHRoaXMgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvIGFjdGl2YXRlcyB0aGUgYWNjZWxlcmF0ZWQgSHVmZm1hbgorZGVjb2RlciBvbmx5IGlmIHRoZXJlIGFyZSA+IDUxMiBieXRlcyBvZiBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIuCisKKzE4LiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRqdW5pdHRlc3QgZW5jb3VudGVyZWQgd2hlbiBydW5uaW5nIHRoZSBwcm9ncmFtCit3aXRoIHRoZSBgLXl1dmAgb3B0aW9uLgorCisKKzEuNC4yCis9PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAxLjQuMToKKworMS4gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSBjanBlZyB3b3VsZCBzZWdmYXVsdCBpZiBhIFdpbmRvd3MgYml0bWFwIHdpdGggYQorbmVnYXRpdmUgd2lkdGggb3IgaGVpZ2h0IHdhcyB1c2VkIGFzIGFuIGlucHV0IGltYWdlIChXaW5kb3dzIGJpdG1hcHMgY2FuIGhhdmUKK2EgbmVnYXRpdmUgaGVpZ2h0IGlmIHRoZXkgYXJlIHN0b3JlZCBpbiB0b3AtZG93biBvcmRlciwgYnV0IHN1Y2ggZmlsZXMgYXJlCityYXJlIGFuZCBub3Qgc3VwcG9ydGVkIGJ5IGxpYmpwZWctdHVyYm8uKQorCisyLiBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5LCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIGxpYmpwZWctdHVyYm8gd291bGQKK2luY29ycmVjdGx5IGVuY29kZSBjZXJ0YWluIEpQRUcgaW1hZ2VzIHdoZW4gcXVhbGl0eT0xMDAgYW5kIHRoZSBmYXN0IGludGVnZXIKK2ZvcndhcmQgRENUIHdlcmUgdXNlZC4gIFRoaXMgd2FzIGtub3duIHRvIGNhdXNlIGBtYWtlIHRlc3RgIHRvIGZhaWwgd2hlbiB0aGUKK2xpYnJhcnkgd2FzIGJ1aWx0IHdpdGggYC1tYXJjaD1oYXN3ZWxsYCBvbiB4ODYgc3lzdGVtcy4KKworMy4gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSBsaWJqcGVnLXR1cmJvIHdvdWxkIGNyYXNoIHdoZW4gYnVpbHQgd2l0aCB0aGUgbGF0ZXN0CismIGdyZWF0ZXN0IGRldmVsb3BtZW50IHZlcnNpb24gb2YgdGhlIENsYW5nL0xMVk0gY29tcGlsZXIuICBUaGlzIHdhcyBjYXVzZWQgYnkKK2FuIHg4Ni02NCBBQkkgY29uZm9ybWFuY2UgaXNzdWUgaW4gc29tZSBvZiBsaWJqcGVnLXR1cmJvJ3MgNjQtYml0IFNTRTIgU0lNRAorcm91dGluZXMuICBUaG9zZSByb3V0aW5lcyB3ZXJlIGluY29ycmVjdGx5IHVzaW5nIGEgNjQtYml0IGBtb3ZgIGluc3RydWN0aW9uIHRvCit0cmFuc2ZlciBhIDMyLWJpdCBKRElNRU5TSU9OIGFyZ3VtZW50LCB3aGVyZWFzIHRoZSB4ODYtNjQgQUJJIGFsbG93cyB0aGUgdXBwZXIKKyh1bnVzZWQpIDMyIGJpdHMgb2YgYSAzMi1iaXQgYXJndW1lbnQncyByZWdpc3RlciB0byBiZSB1bmRlZmluZWQuICBUaGUgbmV3CitDbGFuZy9MTFZNIG9wdGltaXplciB1c2VzIGxvYWQgY29tYmluaW5nIHRvIHRyYW5zZmVyIG11bHRpcGxlIGFkamFjZW50IDMyLWJpdAorc3RydWN0dXJlIG1lbWJlcnMgaW50byBhIHNpbmdsZSA2NC1iaXQgcmVnaXN0ZXIsIGFuZCB0aGlzIGV4cG9zZWQgdGhlIEFCSQorY29uZm9ybWFuY2UgaXNzdWUuCisKKzQuIEZpeGVkIGEgYnVnIGluIHRoZSBNSVBTIERTUHIyIDQ6MjowICJwbGFpbiIgKG5vbi1mYW5jeSBhbmQgbm9uLW1lcmdlZCkKK3Vwc2FtcGxpbmcgcm91dGluZSB0aGF0IGNhdXNlZCBhIGJ1ZmZlciBvdmVyZmxvdyAoYW5kIHN1YnNlcXVlbnQgc2VnZmF1bHQpIHdoZW4KK2RlY29tcHJlc3NpbmcgYSA0OjI6MCBKUEVHIGltYWdlIHdob3NlIHNjYWxlZCBvdXRwdXQgd2lkdGggd2FzIGxlc3MgdGhhbiAxNgorcGl4ZWxzLiAgVGhlICJwbGFpbiIgdXBzYW1wbGluZyByb3V0aW5lcyBhcmUgbm9ybWFsbHkgb25seSB1c2VkIHdoZW4KK2RlY29tcHJlc3NpbmcgYSBub24tWUNiQ3IgSlBFRyBpbWFnZSwgYnV0IHRoZXkgYXJlIGFsc28gdXNlZCB3aGVuIGRlY29tcHJlc3NpbmcKK2EgSlBFRyBpbWFnZSB3aG9zZSBzY2FsZWQgb3V0cHV0IGhlaWdodCBpcyAxLgorCis1LiBGaXhlZCB2YXJpb3VzIG5lZ2F0aXZlIGxlZnQgc2hpZnRzIGFuZCBvdGhlciBpc3N1ZXMgcmVwb3J0ZWQgYnkgdGhlIEdDQyBhbmQKK0NsYW5nIHVuZGVmaW5lZCBiZWhhdmlvciBzYW5pdGl6ZXJzLiAgTm9uZSBvZiB0aGVzZSB3YXMga25vd24gdG8gcG9zZSBhCitzZWN1cml0eSB0aHJlYXQsIGJ1dCByZW1vdmluZyB0aGUgd2FybmluZ3MgbWFrZXMgaXQgZWFzaWVyIHRvIGRldGVjdCBhY3R1YWwKK3NlY3VyaXR5IGlzc3Vlcywgc2hvdWxkIHRoZXkgYXJpc2UgaW4gdGhlIGZ1dHVyZS4KKworCisxLjQuMQorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMS40LjA6CisKKzEuIHRqYmVuY2ggbm93IHByb3Blcmx5IGhhbmRsZXMgQ01ZSy9ZQ0NLIEpQRUcgZmlsZXMuICBQYXNzaW5nIGFuIGFyZ3VtZW50IG9mCitgLWNteWtgIChpbnN0ZWFkIG9mLCBmb3IgaW5zdGFuY2UsIGAtcmdiYCkgd2lsbCBjYXVzZSB0amJlbmNoIHRvIGludGVybmFsbHkKK2NvbnZlcnQgdGhlIHNvdXJjZSBiaXRtYXAgdG8gQ01ZSyBwcmlvciB0byBjb21wcmVzc2lvbiwgdG8gZ2VuZXJhdGUgWUNDSyBKUEVHCitmaWxlcywgYW5kIHRvIGludGVybmFsbHkgY29udmVydCB0aGUgZGVjb21wcmVzc2VkIENNWUsgcGl4ZWxzIGJhY2sgdG8gUkdCIGFmdGVyCitkZWNvbXByZXNzaW9uICh0aGUgbGF0dGVyIGlzIGRvbmUgYXV0b21hdGljYWxseSBpZiBhIENNWUsgb3IgWUNDSyBKUEVHIGlzCitwYXNzZWQgdG8gdGpiZW5jaCBhcyBhIHNvdXJjZSBpbWFnZS4pICBUaGUgQ01ZSzwtPlJHQiBjb252ZXJzaW9uIG9wZXJhdGlvbiBpcworbm90IGJlbmNobWFya2VkLiAgTk9URTogVGhlIHF1aWNrICYgZGlydHkgQ01ZSzwtPlJHQiBjb252ZXJzaW9ucyB0aGF0IHRqYmVuY2gKK3VzZXMgYXJlIHN1aXRhYmxlIGZvciB0ZXN0aW5nIG9ubHkuICBQcm9wZXIgY29udmVyc2lvbiBiZXR3ZWVuIENNWUsgYW5kIFJHQgorcmVxdWlyZXMgYSBjb2xvciBtYW5hZ2VtZW50IHN5c3RlbS4KKworMi4gYG1ha2UgdGVzdGAgbm93IHBlcmZvcm1zIGFkZGl0aW9uYWwgYml0d2lzZSByZWdyZXNzaW9uIHRlc3RzIHVzaW5nIHRqYmVuY2gsCittYWlubHkgZm9yIHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcgY29tcHJlc3Npb24gZnJvbS9kZWNvbXByZXNzaW9uIHRvIGEgc3VicmVnaW9uCitvZiBhIGxhcmdlciBpbWFnZSBidWZmZXIuCisKKzMuIGBtYWtlIHRlc3RgIG5vIGxvbmdlciB0ZXN0cyB0aGUgcmVncmVzc2lvbiBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgRENUL0lEQ1QKK2J5IGRlZmF1bHQsIHNpbmNlIHRoZSByZXN1bHRzIG9mIHRob3NlIHRlc3RzIGNhbiB2YXJ5IGlmIHRoZSBhbGdvcml0aG1zIGluCitxdWVzdGlvbiBhcmUgbm90IGltcGxlbWVudGVkIHVzaW5nIFNJTUQgaW5zdHJ1Y3Rpb25zIG9uIGEgcGFydGljdWxhciBwbGF0Zm9ybS4KK1NlZSB0aGUgY29tbWVudHMgaW4gW01ha2VmaWxlLmFtXShNYWtlZmlsZS5hbSkgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworcmUtZW5hYmxlIHRoZSB0ZXN0cyBhbmQgdG8gc3BlY2lmeSBhbiBleHBlY3RlZCByZXN1bHQgZm9yIHRoZW0gYmFzZWQgb24gdGhlCitwYXJ0aWN1bGFycyBvZiB5b3VyIHBsYXRmb3JtLgorCis0LiBUaGUgTlVMTCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBzaWduaWZpY2FudGx5IG9wdGltaXplZCwKK3doaWNoIHNwZWVkcyB1cCB0aGUgY29tcHJlc3Npb24gb2YgUkdCIGFuZCBDTVlLIEpQRUdzIGJ5IDUtMjAlIHdoZW4gdXNpbmcKKzY0LWJpdCBjb2RlIGFuZCAwLTMlIHdoZW4gdXNpbmcgMzItYml0IGNvZGUsIGFuZCB0aGUgZGVjb21wcmVzc2lvbiBvZiB0aG9zZQoraW1hZ2VzIGJ5IDEwLTMwJSB3aGVuIHVzaW5nIDY0LWJpdCBjb2RlIGFuZCAzLTEyJSB3aGVuIHVzaW5nIDMyLWJpdCBjb2RlLgorCis1LiBGaXhlZCBhbiAiaWxsZWdhbCBpbnN0cnVjdGlvbiIgZXJyb3IgdGhhdCBvY2N1cnJlZCB3aGVuIGRqcGVnIGZyb20gYQorU0lNRC1lbmFibGVkIGxpYmpwZWctdHVyYm8gTUlQUyBidWlsZCB3YXMgZXhlY3V0ZWQgd2l0aCB0aGUgYC1ub3Ntb290aGAgb3B0aW9uCitvbiBhIE1JUFMgbWFjaGluZSB0aGF0IGxhY2tlZCBEU1ByMiBzdXBwb3J0LiAgVGhlIE1JUFMgU0lNRCByb3V0aW5lcyBmb3IgaDJ2MQorYW5kIGgydjIgbWVyZ2VkIHVwc2FtcGxpbmcgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YKK0RTUHIyLgorCis2LiBQZXJmb3JtYW5jZSBoYXMgYmVlbiBpbXByb3ZlZCBzaWduaWZpY2FudGx5IG9uIDY0LWJpdCBub24tTGludXggYW5kCitub24tV2luZG93cyBwbGF0Zm9ybXMgKGdlbmVyYWxseSAxMC0yMCUgZmFzdGVyIGNvbXByZXNzaW9uIGFuZCA1LTEwJSBmYXN0ZXIKK2RlY29tcHJlc3Npb24uKSAgRHVlIHRvIGFuIG92ZXJzaWdodCwgdGhlIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBhY2NlbGVyYXRlZAorSHVmZm1hbiBjb2RlYyB3YXMgbm90IGJlaW5nIGNvbXBpbGVkIGluIHdoZW4gbGlianBlZy10dXJibyB3YXMgYnVpbHQgb24KK3BsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3Mgb3IgTGludXguICBPb3BzLgorCis3LiBGaXhlZCBhbiBleHRyZW1lbHkgcmFyZSBidWcgaW4gdGhlIEh1ZmZtYW4gZW5jb2RlciB0aGF0IGNhdXNlZCA2NC1iaXQKK2J1aWxkcyBvZiBsaWJqcGVnLXR1cmJvIHRvIGluY29ycmVjdGx5IGVuY29kZSBhIGZldyBzcGVjaWZpYyB0ZXN0IGltYWdlcyB3aGVuCitxdWFsaXR5PTk4LCBhbiBvcHRpbWl6ZWQgSHVmZm1hbiB0YWJsZSwgYW5kIHRoZSBzbG93IGludGVnZXIgZm9yd2FyZCBEQ1Qgd2VyZQordXNlZC4KKworOC4gVGhlIFdpbmRvd3MgKENNYWtlKSBidWlsZCBzeXN0ZW0gbm93IHN1cHBvcnRzIGJ1aWxkaW5nIG9ubHkgc3RhdGljIG9yIG9ubHkKK3NoYXJlZCBsaWJyYXJpZXMuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBhZGRpbmcgZWl0aGVyIGAtREVOQUJMRV9TVEFUSUM9MGAgb3IKK2AtREVOQUJMRV9TSEFSRUQ9MGAgdG8gdGhlIENNYWtlIGNvbW1hbmQgbGluZS4KKworOS4gVHVyYm9KUEVHIEFQSSBmdW5jdGlvbnMgd2lsbCBub3cgcmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgYSB3YXJuaW5nIGlzCit0cmlnZ2VyZWQgaW4gdGhlIHVuZGVybHlpbmcgbGlianBlZyBBUEkuICBGb3IgaW5zdGFuY2UsIGlmIGEgSlBFRyBmaWxlIGlzCitjb3JydXB0LCB0aGUgVHVyYm9KUEVHIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zIHdpbGwgYXR0ZW1wdCB0byBkZWNvbXByZXNzCithcyBtdWNoIG9mIHRoZSBpbWFnZSBhcyBwb3NzaWJsZSwgYnV0IHRob3NlIGZ1bmN0aW9ucyB3aWxsIG5vdyByZXR1cm4gLTEgdG8KK2luZGljYXRlIHRoYXQgdGhlIGRlY29tcHJlc3Npb24gd2FzIG5vdCBlbnRpcmVseSBzdWNjZXNzZnVsLgorCisxMC4gRml4ZWQgYSBidWcgaW4gdGhlIE1JUFMgRFNQcjIgNDoyOjIgZmFuY3kgdXBzYW1wbGluZyByb3V0aW5lIHRoYXQgY2F1c2VkIGEKK2J1ZmZlciBvdmVyZmxvdyAoYW5kIHN1YnNlcXVlbnQgc2VnZmF1bHQpIHdoZW4gZGVjb21wcmVzc2luZyBhIDQ6MjoyIEpQRUcgaW1hZ2UKK2luIHdoaWNoIHRoZSByaWdodC1tb3N0IE1DVSB3YXMgNSBvciA2IHBpeGVscyB3aWRlLgorCisKKzEuNC4wCis9PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAxLjQgYmV0YTE6CisKKzEuIEZpeGVkIGEgYnVpbGQgaXNzdWUgb24gT1MgWCBQb3dlclBDIHBsYXRmb3JtcyAobWQ1Y21wIGZhaWxlZCB0byBidWlsZAorYmVjYXVzZSBPUyBYIGRvZXMgbm90IHByb3ZpZGUgdGhlIGBsZTMydG9oKClgIGFuZCBgaHRvbGUzMigpYCBmdW5jdGlvbnMuKQorCisyLiBUaGUgbm9uLVNJTUQgUkdCNTY1IGNvbG9yIGNvbnZlcnNpb24gY29kZSBkaWQgbm90IHdvcmsgY29ycmVjdGx5IG9uIGJpZworZW5kaWFuIG1hY2hpbmVzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworMy4gRml4ZWQgYW4gaXNzdWUgaW4gYHRqUGxhbmVTaXplWVVWKClgIHdoZXJlYnkgaXQgd291bGQgZXJyb25lb3VzbHkgcmV0dXJuIDEKK2luc3RlYWQgb2YgLTEgaWYgYGNvbXBvbmVudElEYCB3YXMgPiAwIGFuZCBgc3Vic2FtcGAgd2FzIGBUSlNBTVBfR1JBWWAuCisKKzMuIEZpeGVkIGFuIGlzc3VlIGluIGB0akJ1ZlNpemVZVVYyKClgIHdoZXJlYnkgaXQgd291bGQgZXJyb25lb3VzbHkgcmV0dXJuIDAKK2luc3RlYWQgb2YgLTEgaWYgYHdpZHRoYCB3YXMgPCAxLgorCis1LiBUaGUgSHVmZm1hbiBlbmNvZGVyIG5vdyB1c2VzIGBjbHpgIGFuZCBgYnNyYCBpbnN0cnVjdGlvbnMgZm9yIGJpdCBjb3VudGluZworb24gQVJNNjQgcGxhdGZvcm1zIChzZWUgMS40IGJldGExWzVdLikKKworNi4gVGhlIGBjbG9zZSgpYCBtZXRob2QgaW4gdGhlIFRKQ29tcHJlc3NvciBhbmQgVEpEZWNvbXByZXNzb3IgSmF2YSBjbGFzc2VzIGlzCitub3cgaWRlbXBvdGVudC4gIFByZXZpb3VzbHksIHRoYXQgbWV0aG9kIHdvdWxkIGNhbGwgdGhlIG5hdGl2ZSBgdGpEZXN0cm95KClgCitmdW5jdGlvbiBldmVuIGlmIHRoZSBUdXJib0pQRUcgaW5zdGFuY2UgaGFkIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICBUaGlzCitjYXVzZWQgYW4gZXhjZXB0aW9uIHRvIGJlIHRocm93biBkdXJpbmcgZmluYWxpemF0aW9uLCBpZiB0aGUgYGNsb3NlKClgIG1ldGhvZAoraGFkIGFscmVhZHkgYmVlbiBjYWxsZWQuICBUaGUgZXhjZXB0aW9uIHdhcyBjYXVnaHQsIGJ1dCBpdCB3YXMgc3RpbGwgYW4KK2V4cGVuc2l2ZSBvcGVyYXRpb24uCisKKzcuIFRoZSBUdXJib0pQRUcgQVBJIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGFuIGVycm9yIChgQ291bGQgbm90IGRldGVybWluZQorc3Vic2FtcGxpbmcgdHlwZSBmb3IgSlBFRyBpbWFnZWApIHdoZW4gYXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGdyYXlzY2FsZSBKUEVHCitpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQgd2l0aCBhIHNhbXBsaW5nIGZhY3RvciBvdGhlciB0aGFuIDEgKGZvciBpbnN0YW5jZSwKK3dpdGggYGNqcGVnIC1ncmF5c2NhbGUgLXNhbXBsZSAyeDJgKS4gIFN1YnNhbXBsaW5nIHRlY2huaWNhbGx5IGhhcyBubyBtZWFuaW5nCit3aXRoIGdyYXlzY2FsZSBKUEVHcywgYW5kIHRodXMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3RvcnMKK2ZvciBzdWNoIGltYWdlcyBhcmUgaWdub3JlZCBieSB0aGUgZGVjb21wcmVzc29yLiAgSG93ZXZlciwgdGhlIFR1cmJvSlBFRyBBUEkKK3dhcyBiZWluZyB0b28gcmlnaWQgYW5kIHdhcyBleHBlY3RpbmcgdGhlIHNhbXBsaW5nIGZhY3RvcnMgdG8gYmUgZXF1YWwgdG8gMQorYmVmb3JlIGl0IHRyZWF0ZWQgdGhlIGltYWdlIGFzIGEgZ3JheXNjYWxlIEpQRUcuCisKKzguIGNqcGVnLCBkanBlZywgYW5kIGpwZWd0cmFuIG5vdyBhY2NlcHQgYW4gYXJndW1lbnQgb2YgYC12ZXJzaW9uYCwgd2hpY2ggd2lsbAorcHJpbnQgdGhlIGxpYnJhcnkgdmVyc2lvbiBhbmQgZXhpdC4KKworOS4gUmVmZXJyaW5nIHRvIDEuNCBiZXRhMVsxNV0sIGFub3RoZXIgZXh0cmVtZWx5IHJhcmUgY2lyY3Vtc3RhbmNlIHdhcworZGlzY292ZXJlZCB1bmRlciB3aGljaCB0aGUgSHVmZm1hbiBlbmNvZGVyJ3MgbG9jYWwgYnVmZmVyIGNhbiBiZSBvdmVycnVuCit3aGVuIGEgYnVmZmVyZWQgZGVzdGluYXRpb24gbWFuYWdlciBpcyBiZWluZyB1c2VkIGFuZCBhbgorZXh0cmVtZWx5LWhpZ2gtZnJlcXVlbmN5IGJsb2NrIChiYXNpY2FsbHkganVuayBpbWFnZSBkYXRhKSBpcyBiZWluZyBlbmNvZGVkLgorRXZlbiB0aG91Z2ggdGhlIEh1ZmZtYW4gbG9jYWwgYnVmZmVyIHdhcyBpbmNyZWFzZWQgZnJvbSAxMjggYnl0ZXMgdG8gMTM2IGJ5dGVzCit0byBhZGRyZXNzIHRoZSBwcmV2aW91cyBpc3N1ZSwgdGhlIG5ldyBpc3N1ZSBjYXVzZWQgZXZlbiB0aGUgbGFyZ2VyIGJ1ZmZlciB0bworYmUgb3ZlcnJ1bi4gIEZ1cnRoZXIgYW5hbHlzaXMgcmV2ZWFscyB0aGF0LCBpbiB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSAoc3VjaCBhcworc2V0dGluZyBhbHRlcm5hdGluZyBBQyBjb2VmZmljaWVudHMgdG8gMzI3NjcgYW5kIC0zMjc2OCBpbiB0aGUgSlBFRyBzY2FubmluZworb3JkZXIpLCB0aGUgSHVmZm1hbiBlbmNvZGVyIGNhbiBwcm9kdWNlIGVuY29kZWQgYmxvY2tzIHRoYXQgYXBwcm9hY2ggZG91YmxlIHRoZQorc2l6ZSBvZiB0aGUgdW5lbmNvZGVkIGJsb2Nrcy4gIFRodXMsIHRoZSBIdWZmbWFuIGxvY2FsIGJ1ZmZlciB3YXMgaW5jcmVhc2VkIHRvCisyNTYgYnl0ZXMsIHdoaWNoIHNob3VsZCBwcmV2ZW50IGFueSBzdWNoIGlzc3VlIGZyb20gcmUtb2NjdXJyaW5nIGluIHRoZSBmdXR1cmUuCisKKzEwLiBUaGUgbmV3IGB0alBsYW5lU2l6ZVlVVigpYCwgYHRqUGxhbmVXaWR0aCgpYCwgYW5kIGB0alBsYW5lSGVpZ2h0KClgCitmdW5jdGlvbnMgd2VyZSBub3QgYWN0dWFsbHkgdXNhYmxlIG9uIGFueSBwbGF0Zm9ybSBleGNlcHQgT1MgWCBhbmQgV2luZG93cywKK2JlY2F1c2UgdGhvc2UgZnVuY3Rpb25zIHdlcmUgbm90IGluY2x1ZGVkIGluIHRoZSBsaWJ0dXJib2pwZWcgbWFwZmlsZS4gIFRoaXMKK2hhcyBiZWVuIGZpeGVkLgorCisxMS4gUmVzdG9yZWQgdGhlIGBKUFAoKWAsIGBKTUVUSE9EKClgLCBhbmQgYEZBUmAgbWFjcm9zIGluIHRoZSBsaWJqcGVnLXR1cmJvCitoZWFkZXIgZmlsZXMuICBUaGUgYEpQUCgpYCBhbmQgYEpNRVRIT0QoKWAgbWFjcm9zIHdlcmUgb3JpZ2luYWxseSBpbXBsZW1lbnRlZAoraW4gbGlianBlZyBhcyBhIHdheSBvZiBzdXBwb3J0aW5nIG5vbi1BTlNJIGNvbXBpbGVycyB0aGF0IGxhY2tlZCBzdXBwb3J0IGZvcgorcHJvdG90eXBlIHBhcmFtZXRlcnMuICBsaWJqcGVnLXR1cmJvIGhhcyBuZXZlciBzdXBwb3J0ZWQgc3VjaCBjb21waWxlcnMsIGJ1dAorc29tZSBzb2Z0d2FyZSBwYWNrYWdlcyBzdGlsbCB1c2UgdGhlIG1hY3JvcyB0byBkZWZpbmUgdGhlaXIgb3duIHByb3RvdHlwZXMuCitTaW1pbGFybHksIGxpYmpwZWctdHVyYm8gaGFzIG5ldmVyIHN1cHBvcnRlZCBNUy1ET1MgYW5kIG90aGVyIHBsYXRmb3JtcyB0aGF0CitoYXZlIGZhciBzeW1ib2xzLCBidXQgc29tZSBzb2Z0d2FyZSBwYWNrYWdlcyBzdGlsbCB1c2UgdGhlIGBGQVJgIG1hY3JvLiAgQQorcHJldHR5IGdvb2QgYXJndW1lbnQgY2FuIGJlIG1hZGUgdGhhdCB0aGlzIGlzIGEgYmFkIHByYWN0aWNlIG9uIHRoZSBwYXJ0IG9mIHRoZQorc29mdHdhcmUgaW4gcXVlc3Rpb24sIGJ1dCBzaW5jZSB0aGlzIGFmZmVjdHMgbW9yZSB0aGFuIG9uZSBwYWNrYWdlLCBpdCdzIGp1c3QKK2Vhc2llciB0byBmaXggaXQgaGVyZS4KKworMTIuIEZpeGVkIGlzc3VlcyB0aGF0IHdlcmUgcHJldmVudGluZyB0aGUgQVJNIDY0LWJpdCBTSU1EIGNvZGUgZnJvbSBjb21waWxpbmcKK2ZvciBpT1MsIGFuZCBpbmNsdWRlZCBhbiBBUk12OCBhcmNoaXRlY3R1cmUgaW4gYWxsIG9mIHRoZSBiaW5hcmllcyBpbnN0YWxsZWQgYnkKK3RoZSAib2ZmaWNpYWwiIGxpYmpwZWctdHVyYm8gU0RLIGZvciBPUyBYLgorCisKKzEuMy45MCAoMS40IGJldGExKQorPT09PT09PT09PT09PT09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuMy4xOgorCisxLiBOZXcgZmVhdHVyZXMgaW4gdGhlIFR1cmJvSlBFRyBBUEk6CisKKyAgICAgLSBZVVYgcGxhbmFyIGltYWdlcyBjYW4gbm93IGJlIGdlbmVyYXRlZCB3aXRoIGFuIGFyYml0cmFyeSBsaW5lIHBhZGRpbmcKKyhwcmV2aW91c2x5IG9ubHkgNC1ieXRlIHBhZGRpbmcsIHdoaWNoIHdhcyBjb21wYXRpYmxlIHdpdGggWCBWaWRlbywgd2FzCitzdXBwb3J0ZWQuKQorICAgICAtIFRoZSBkZWNvbXByZXNzLXRvLVlVViBmdW5jdGlvbiBoYXMgYmVlbiBleHRlbmRlZCB0byBzdXBwb3J0IGltYWdlCitzY2FsaW5nLgorICAgICAtIEpQRUcgaW1hZ2VzIGNhbiBub3cgYmUgY29tcHJlc3NlZCBmcm9tIFlVViBwbGFuYXIgc291cmNlIGltYWdlcy4KKyAgICAgLSBZVVYgcGxhbmFyIGltYWdlcyBjYW4gbm93IGJlIGRlY29kZWQgaW50byBSR0Igb3IgZ3JheXNjYWxlIGltYWdlcy4KKyAgICAgLSA0OjE6MSBzdWJzYW1wbGluZyBpcyBub3cgc3VwcG9ydGVkLiAgVGhpcyBpcyBtYWlubHkgaW5jbHVkZWQgZm9yCitjb21wYXRpYmlsaXR5LCBzaW5jZSA0OjE6MSBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQgaW4gbGlianBlZy10dXJibyBhbmQgaGFzIG5vCitzaWduaWZpY2FudCBhZHZhbnRhZ2VzIHJlbGF0aXZlIHRvIDQ6MjowLgorICAgICAtIENNWUsgaW1hZ2VzIGFyZSBub3cgc3VwcG9ydGVkLiAgVGhpcyBmZWF0dXJlIGFsbG93cyBDTVlLIHNvdXJjZSBpbWFnZXMKK3RvIGJlIGNvbXByZXNzZWQgdG8gWUNDSyBKUEVHcyBhbmQgWUNDSyBvciBDTVlLIEpQRUdzIHRvIGJlIGRlY29tcHJlc3NlZCB0bworQ01ZSyBkZXN0aW5hdGlvbiBpbWFnZXMuICBDb252ZXJzaW9uIGJldHdlZW4gQ01ZSy9ZQ0NLIGFuZCBSR0Igb3IgWVVWIGltYWdlcyBpcworbm90IHN1cHBvcnRlZC4gIFN1Y2ggY29udmVyc2lvbiByZXF1aXJlcyBhIGNvbG9yIG1hbmFnZW1lbnQgc3lzdGVtIGFuZCBpcyB0aHVzCitvdXQgb2Ygc2NvcGUgZm9yIGEgY29kZWMgbGlicmFyeS4KKyAgICAgLSBUaGUgaGFuZGxpbmcgb2YgWVVWIGltYWdlcyBpbiB0aGUgSmF2YSBBUEkgaGFzIGJlZW4gc2lnbmlmaWNhbnRseQorcmVmYWN0b3JlZCBhbmQgc2hvdWxkIG5vdyBiZSBtdWNoIG1vcmUgaW50dWl0aXZlLgorICAgICAtIFRoZSBKYXZhIEFQSSBub3cgc3VwcG9ydHMgZW5jb2RpbmcgYSBZVVYgaW1hZ2UgZnJvbSBhbiBhcmJpdHJhcnkKK3Bvc2l0aW9uIGluIGEgbGFyZ2UgaW1hZ2UgYnVmZmVyLgorICAgICAtIEFsbCBvZiB0aGUgWVVWIGZ1bmN0aW9ucyBub3cgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdGhhdCBvcGVyYXRlcworb24gc2VwYXJhdGUgaW1hZ2UgcGxhbmVzIGluc3RlYWQgb2YgYSB1bmlmaWVkIGltYWdlIGJ1ZmZlci4gIFRoaXMgYWxsb3dzIGZvcgorY29tcHJlc3NpbmcvZGVjb2RpbmcgZnJvbSBvciBkZWNvbXByZXNzaW5nL2VuY29kaW5nIHRvIGEgc3VicmVnaW9uIG9mIGEgbGFyZ2VyCitZVVYgaW1hZ2UuICBJdCBhbHNvIGFsbG93cyBmb3IgaGFuZGxpbmcgWVVWIGZvcm1hdHMgdGhhdCBzd2FwIHRoZSBvcmRlciBvZiB0aGUKK1UgYW5kIFYgcGxhbmVzLgorCisyLiBBZGRlZCBTSU1EIGFjY2VsZXJhdGlvbiBmb3IgRFNQcjItY2FwYWJsZSBNSVBTIHBsYXRmb3Jtcy4gIFRoaXMgc3BlZWRzIHVwCit0aGUgY29tcHJlc3Npb24gb2YgZnVsbC1jb2xvciBKUEVHcyBieSA3MC04MCUgb24gc3VjaCBwbGF0Zm9ybXMgYW5kCitkZWNvbXByZXNzaW9uIGJ5IDI1LTM1JS4KKworMy4gSWYgYW4gYXBwbGljYXRpb24gYXR0ZW1wdHMgdG8gZGVjb21wcmVzcyBhIEh1ZmZtYW4tY29kZWQgSlBFRyBpbWFnZSB3aG9zZQoraGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gSHVmZm1hbiB0YWJsZXMsIGxpYmpwZWctdHVyYm8gd2lsbCBub3cgaW5zZXJ0IHRoZQorZGVmYXVsdCBIdWZmbWFuIHRhYmxlcy4gIEluIG9yZGVyIHRvIHNhdmUgc3BhY2UsIG1hbnkgbW90aW9uIEpQRUcgdmlkZW8gZnJhbWVzCithcmUgZW5jb2RlZCB3aXRob3V0IHRoZSBkZWZhdWx0IEh1ZmZtYW4gdGFibGVzLCBzbyB0aGVzZSBmcmFtZXMgY2FuIG5vdyBiZQorc3VjY2Vzc2Z1bGx5IGRlY29tcHJlc3NlZCBieSBsaWJqcGVnLXR1cmJvIHdpdGhvdXQgYWRkaXRpb25hbCB3b3JrIG9uIHRoZSBwYXJ0CitvZiB0aGUgYXBwbGljYXRpb24uICBBbiBhcHBsaWNhdGlvbiBjYW4gc3RpbGwgb3ZlcnJpZGUgdGhlIEh1ZmZtYW4gdGFibGVzLCBmb3IKK2luc3RhbmNlIHRvIHJlLXVzZSB0YWJsZXMgZnJvbSBhIHByZXZpb3VzIGZyYW1lIG9mIHRoZSBzYW1lIHZpZGVvLgorCis0LiBUaGUgTWFjIHBhY2thZ2luZyBzeXN0ZW0gbm93IHVzZXMgcGtnYnVpbGQgYW5kIHByb2R1Y3RidWlsZCByYXRoZXIgdGhhbgorUGFja2FnZU1ha2VyICh3aGljaCBpcyBvYnNvbGV0ZSBhbmQgbm8gbG9uZ2VyIHN1cHBvcnRlZC4pICBUaGlzIG1lYW5zIHRoYXQKK09TIFggMTAuNiAiU25vdyBMZW9wYXJkIiBvciBsYXRlciBtdXN0IGJlIHVzZWQgd2hlbiBwYWNrYWdpbmcgbGlianBlZy10dXJibywKK2FsdGhvdWdoIHRoZSBwYWNrYWdlcyBwcm9kdWNlZCBjYW4gYmUgaW5zdGFsbGVkIG9uIE9TIFggMTAuNSAiTGVvcGFyZCIgb3IKK2xhdGVyLiAgT1MgWCAxMC40ICJUaWdlciIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKworNS4gVGhlIEh1ZmZtYW4gZW5jb2RlciBub3cgdXNlcyBgY2x6YCBhbmQgYGJzcmAgaW5zdHJ1Y3Rpb25zIGZvciBiaXQgY291bnRpbmcKK29uIEFSTSBwbGF0Zm9ybXMgcmF0aGVyIHRoYW4gYSBsb29rdXAgdGFibGUuICBUaGlzIHJlZHVjZXMgdGhlIG1lbW9yeSBmb290cHJpbnQKK2J5IDY0aywgd2hpY2ggbWF5IGJlIGltcG9ydGFudCBmb3Igc29tZSBtb2JpbGUgYXBwbGljYXRpb25zLiAgT3V0IG9mIGZvdXIKK0FuZHJvaWQgZGV2aWNlcyB0aGF0IHdlcmUgdGVzdGVkLCB0d28gZGVtb25zdHJhdGVkIGEgc21hbGwgb3ZlcmFsbCBwZXJmb3JtYW5jZQorbG9zcyAofjMtNCUgb24gYXZlcmFnZSkgd2l0aCBBUk12NiBjb2RlIGFuZCBhIHNtYWxsIGdhaW4gKGFsc28gfjMtNCUpIHdpdGgKK0FSTXY3IGNvZGUgd2hlbiBlbmFibGluZyB0aGlzIG5ldyBmZWF0dXJlLCBidXQgdGhlIG90aGVyIHR3byBkZXZpY2VzCitkZW1vbnN0cmF0ZWQgYSBzaWduaWZpY2FudCBvdmVyYWxsIHBlcmZvcm1hbmNlIGdhaW4gd2l0aCBib3RoIEFSTXY2IGFuZCBBUk12NworY29kZSAofjEwLTIwJSkgd2hlbiBlbmFibGluZyB0aGUgZmVhdHVyZS4gIEFjdHVhbCBtaWxlYWdlIG1heSB2YXJ5LgorCis2LiBXb3JrZWQgYXJvdW5kIGFuIGlzc3VlIHdpdGggVmlzdWFsIEMrKyAyMDEwIGFuZCBsYXRlciB0aGF0IGNhdXNlZCBpbmNvcnJlY3QKK3BpeGVscyB0byBiZSBnZW5lcmF0ZWQgd2hlbiBkZWNvbXByZXNzaW5nIGEgSlBFRyBpbWFnZSB0byBhIDI1Ni1jb2xvciBiaXRtYXAsCitpZiBjb21waWxlciBvcHRpbWl6YXRpb24gd2FzIGVuYWJsZWQgd2hlbiBsaWJqcGVnLXR1cmJvIHdhcyBidWlsdC4gIFRoaXMgY2F1c2VkCit0aGUgcmVncmVzc2lvbiB0ZXN0cyB0byBmYWlsIHdoZW4gZG9pbmcgYSByZWxlYXNlIGJ1aWxkIHVuZGVyIFZpc3VhbCBDKysgMjAxMAorYW5kIGxhdGVyLgorCis3LiBJbXByb3ZlZCB0aGUgYWNjdXJhY3kgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBub24tU0lNRCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKK2Zsb2F0aW5nIHBvaW50IGludmVyc2UgRENUICh1c2luZyBjb2RlIGJvcnJvd2VkIGZyb20gbGlianBlZyB2OGEgYW5kIGxhdGVyLikKK1RoZSBhY2N1cmFjeSBvZiB0aGlzIGltcGxlbWVudGF0aW9uIG5vdyBtYXRjaGVzIHRoZSBhY2N1cmFjeSBvZiB0aGUgU1NFL1NTRTIKK2ltcGxlbWVudGF0aW9uLiAgTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgZmxvYXRpbmcgcG9pbnQgRENUL0lEQ1QgYWxnb3JpdGhtcyBhcmUKK21haW5seSBhIGxlZ2FjeSBmZWF0dXJlLiAgVGhleSBnZW5lcmFsbHkgZG8gbm90IHByb2R1Y2Ugc2lnbmlmaWNhbnRseSBiZXR0ZXIKK2FjY3VyYWN5IHRoYW4gdGhlIHNsb3cgaW50ZWdlciBEQ1QvSURDVCBhbGdvcml0aG1zLCBhbmQgdGhleSBhcmUgcXVpdGUgYSBiaXQKK3Nsb3dlci4KKworOC4gQWRkZWQgYSBuZXcgb3V0cHV0IGNvbG9yc3BhY2UgKGBKQ1NfUkdCNTY1YCkgdG8gdGhlIGxpYmpwZWcgQVBJIHRoYXQgYWxsb3dzCitmb3IgZGVjb21wcmVzc2luZyBKUEVHIGltYWdlcyBpbnRvIFJHQjU2NSAoMTYtYml0KSBwaXhlbHMuICBJZiBkaXRoZXJpbmcgaXMgbm90Cit1c2VkLCB0aGVuIHRoaXMgY29kZSBwYXRoIGlzIFNJTUQtYWNjZWxlcmF0ZWQgb24gQVJNIHBsYXRmb3Jtcy4KKworOS4gTnVtZXJvdXMgb2Jzb2xldGUgZmVhdHVyZXMsIHN1Y2ggYXMgc3VwcG9ydCBmb3Igbm9uLUFOU0kgY29tcGlsZXJzIGFuZAorc3VwcG9ydCBmb3IgdGhlIE1TLURPUyBtZW1vcnkgbW9kZWwsIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsaWJqcGVnIGNvZGUsCitncmVhdGx5IGltcHJvdmluZyBpdHMgcmVhZGFiaWxpdHkgYW5kIG1ha2luZyBpdCBlYXNpZXIgdG8gbWFpbnRhaW4gYW5kIGV4dGVuZC4KKworMTAuIEZpeGVkIGEgc2VnZmF1bHQgdGhhdCBvY2N1cnJlZCB3aGVuIGNhbGxpbmcgYG91dHB1dF9tZXNzYWdlKClgIHdpdGgKK2Btc2dfY29kZWAgc2V0IHRvIGBKTVNHX0NPUFlSSUdIVGAuCisKKzExLiBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5IHdyanBnY29tIHdhcyBhbGxvd2luZyBjb21tZW50cyBsb25nZXIgdGhhbiA2NWsKK2NoYXJhY3RlcnMgdG8gYmUgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHdoaWNoIHdhcyBjYXVzaW5nIGl0IHRvIGdlbmVyYXRlCitpbmNvcnJlY3QgSlBFRyBmaWxlcy4KKworMTIuIEZpeGVkIGEgYnVnIGluIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCB3YXMgY2F1c2luZyB0aGUgV2luZG93cyB2ZXJzaW9uIG9mCit3cmpwZ2NvbSB0byBiZSBidWlsdCB1c2luZyB0aGUgcmRqcGdjb20gc291cmNlIGNvZGUuCisKKzEzLiBSZXN0b3JlZCAxMi1iaXQtcGVyLWNvbXBvbmVudCBKUEVHIHN1cHBvcnQuICBBIDEyLWJpdCB2ZXJzaW9uIG9mCitsaWJqcGVnLXR1cmJvIGNhbiBub3cgYmUgYnVpbHQgYnkgcGFzc2luZyBhbiBhcmd1bWVudCBvZiBgLS13aXRoLTEyYml0YCB0bworY29uZmlndXJlIChVbml4KSBvciBgLURXSVRIXzEyQklUPTFgIHRvIGNtYWtlIChXaW5kb3dzLikgIDEyLWJpdCBKUEVHIHN1cHBvcnQKK2lzIGluY2x1ZGVkIG9ubHkgZm9yIGNvbnZlbmllbmNlLiAgRW5hYmxpbmcgdGhpcyBmZWF0dXJlIGRpc2FibGVzIGFsbCBvZiB0aGUKK3BlcmZvcm1hbmNlIGZlYXR1cmVzIGluIGxpYmpwZWctdHVyYm8sIGFzIHdlbGwgYXMgYXJpdGhtZXRpYyBjb2RpbmcgYW5kIHRoZQorVHVyYm9KUEVHIEFQSS4gIFRoZSByZXN1bHRpbmcgbGlicmFyeSBzdGlsbCBjb250YWlucyB0aGUgb3RoZXIgbGlianBlZy10dXJibworZmVhdHVyZXMgKHN1Y2ggYXMgdGhlIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyksIGJ1dCBpbiBnZW5lcmFsLCBpdCBwZXJmb3JtcyBubworZmFzdGVyIHRoYW4gbGlianBlZyB2NmIuCisKKzE0LiBBZGRlZCBBUk0gNjQtYml0IFNJTUQgYWNjZWxlcmF0aW9uIGZvciB0aGUgWUNDLXRvLVJHQiBjb2xvciBjb252ZXJzaW9uCithbmQgSURDVCBhbGdvcml0aG1zIChib3RoIGFyZSB1c2VkIGR1cmluZyBKUEVHIGRlY29tcHJlc3Npb24uKSAgRm9yIHVua25vd24KK3JlYXNvbnMgKHByb2JhYmx5IHJlbGF0ZWQgdG8gY2xhbmcpLCB0aGlzIGNvZGUgY2Fubm90IGN1cnJlbnRseSBiZSBjb21waWxlZCBmb3IKK2lPUy4KKworMTUuIEZpeGVkIGFuIGV4dHJlbWVseSByYXJlIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIHRoZSBIdWZmbWFuIGVuY29kZXIncyBsb2NhbAorYnVmZmVyIHRvIG92ZXJydW4gd2hlbiBhIHZlcnkgaGlnaC1mcmVxdWVuY3kgTUNVIGlzIGNvbXByZXNzZWQgdXNpbmcgcXVhbGl0eQorMTAwIGFuZCBubyBzdWJzYW1wbGluZywgYW5kIHdoZW4gdGhlIEpQRUcgb3V0cHV0IGJ1ZmZlciBpcyBiZWluZyBkeW5hbWljYWxseQorcmVzaXplZCBieSB0aGUgZGVzdGluYXRpb24gbWFuYWdlci4gIFRoaXMgaXNzdWUgd2FzIHNvIHJhcmUgdGhhdCwgZXZlbiB3aXRoIGEKK3Rlc3QgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbWFrZSB0aGUgYnVnIG9jY3VyIChieSBpbmplY3RpbmcgcmFuZG9tCitoaWdoLWZyZXF1ZW5jeSBZVVYgZGF0YSBpbnRvIHRoZSBjb21wcmVzc29yKSwgaXQgd2FzIHJlcHJvZHVjaWJsZSBvbmx5IG9uY2UgaW4KK2Fib3V0IGV2ZXJ5IDI1IG1pbGxpb24gaXRlcmF0aW9ucy4KKworMTYuIEZpeGVkIGFuIG92ZXJzaWdodCBpbiB0aGUgVHVyYm9KUEVHIEMgd3JhcHBlcjogIGlmIGFueSBvZiB0aGUgSlBFRworY29tcHJlc3Npb24gZnVuY3Rpb25zIHdhcyBjYWxsZWQgcmVwZWF0ZWRseSB3aXRoIHRoZSBzYW1lCithdXRvbWF0aWNhbGx5LWFsbG9jYXRlZCBkZXN0aW5hdGlvbiBidWZmZXIsIHRoZW4gVHVyYm9KUEVHIHdvdWxkIGVycm9uZW91c2x5Cithc3N1bWUgdGhhdCB0aGUgYGpwZWdTaXplYCBwYXJhbWV0ZXIgd2FzIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIHdoZW4KK2luIGZhY3QgdGhhdCBwYXJhbWV0ZXIgd2FzIHByb2JhYmx5IGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBtb3N0IHJlY2VudGx5Citjb21wcmVzc2VkIEpQRUcgaW1hZ2UuICBJZiB0aGUgc2l6ZSBvZiB0aGUgcHJldmlvdXMgSlBFRyBpbWFnZSB3YXMgbm90IGFzIGxhcmdlCithcyB0aGUgY3VycmVudCBKUEVHIGltYWdlLCB0aGVuIFR1cmJvSlBFRyB3b3VsZCB1bm5lY2Vzc2FyaWx5IHJlYWxsb2NhdGUgdGhlCitkZXN0aW5hdGlvbiBidWZmZXIuCisKKworMS4zLjEKKz09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuMy4wOgorCisxLiBPbiBVbip4IHN5c3RlbXMsIGBtYWtlIGluc3RhbGxgIG5vdyBpbnN0YWxscyB0aGUgbGlianBlZy10dXJibyBsaWJyYXJpZXMKK2ludG8gL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyIGJ5IGRlZmF1bHQgb24gYW55IDMyLWJpdCBzeXN0ZW0sIG5vdCBqdXN0IHg4NiwKK2FuZCBpbnRvIC9vcHQvbGlianBlZy10dXJiby9saWI2NCBieSBkZWZhdWx0IG9uIGFueSA2NC1iaXQgc3lzdGVtLCBub3QganVzdAoreDg2LTY0LiAgWW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IG92ZXJyaWRpbmcgZWl0aGVyIHRoZSBgcHJlZml4YCBvciBgbGliZGlyYAorY29uZmlndXJlIHZhcmlhYmxlcy4KKworMi4gVGhlIFdpbmRvd3MgaW5zdGFsbGVyIG5vdyBwbGFjZXMgYSBjb3B5IG9mIHRoZSBUdXJib0pQRUcgRExMcyBpbiB0aGUgc2FtZQorZGlyZWN0b3J5IGFzIHRoZSByZXN0IG9mIHRoZSBsaWJqcGVnLXR1cmJvIGJpbmFyaWVzLiAgVGhpcyB3YXMgbWFpbmx5IGRvbmUKK3RvIHN1cHBvcnQgVHVyYm9WTkMgMS4zLCB3aGljaCBidW5kbGVzIHRoZSBETExzIGluIGl0cyBXaW5kb3dzIGluc3RhbGxhdGlvbi4KK1doZW4gdXNpbmcgYSAzMi1iaXQgdmVyc2lvbiBvZiBDTWFrZSBvbiA2NC1iaXQgV2luZG93cywgaXQgaXMgaW1wb3NzaWJsZSB0bworYWNjZXNzIHRoZSBjOlxXSU5ET1dTXHN5c3RlbTMyIGRpcmVjdG9yeSwgd2hpY2ggbWFkZSBpdCBpbXBvc3NpYmxlIGZvciB0aGUKK1R1cmJvVk5DIGJ1aWxkIHNjcmlwdHMgdG8gYnVuZGxlIHRoZSA2NC1iaXQgVHVyYm9KUEVHIERMTC4KKworMy4gRml4ZWQgYSBidWcgd2hlcmVieSBhdHRlbXB0aW5nIHRvIGVuY29kZSBhIHByb2dyZXNzaXZlIEpQRUcgd2l0aCBhcml0aG1ldGljCitlbnRyb3B5IGNvZGluZyAoYnkgcGFzc2luZyBhcmd1bWVudHMgb2YgYC1wcm9ncmVzc2l2ZSAtYXJpdGhtZXRpY2AgdG8gY2pwZWcgb3IKK2pwZWd0cmFuLCBmb3IgaW5zdGFuY2UpIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciwgYFJlcXVlc3RlZCBmZWF0dXJlIHdhcworb21pdHRlZCBhdCBjb21waWxlIHRpbWVgLgorCis0LiBGaXhlZCBhIGNvdXBsZSBvZiBpc3N1ZXMgd2hlcmVieSBtYWxmb3JtZWQgSlBFRyBpbWFnZXMgd291bGQgY2F1c2UKK2xpYmpwZWctdHVyYm8gdG8gdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBkZWNvbXByZXNzaW9uLgorCis1LiBGaXhlZCBhbiBlcnJvciAoYEJ1ZmZlciBwYXNzZWQgdG8gSlBFRyBsaWJyYXJ5IGlzIHRvbyBzbWFsbGApIHRoYXQgb2NjdXJyZWQKK3doZW4gY2FsbGluZyB0aGUgVHVyYm9KUEVHIFlVViBlbmNvZGluZyBmdW5jdGlvbiB3aXRoIGEgdmVyeSBzbWFsbCAoPCA1eDUpCitzb3VyY2UgaW1hZ2UsIGFuZCBhZGRlZCBhIHVuaXQgdGVzdCB0byBjaGVjayBmb3IgdGhpcyBlcnJvci4KKworNi4gVGhlIEphdmEgY2xhc3NlcyBzaG91bGQgbm93IGJ1aWxkIHByb3Blcmx5IHVuZGVyIFZpc3VhbCBTdHVkaW8gMjAxMCBhbmQKK2xhdGVyLgorCis3LiBGaXhlZCBhbiBpc3N1ZSB0aGF0IHByZXZlbnRlZCBTUlBNcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIGluLXRyZWUgcGFja2FnaW5nCit0b29scyBmcm9tIGJlaW5nIHJlYnVpbHQgb24gY2VydGFpbiBuZXdlciBMaW51eCBkaXN0cmlidXRpb25zLgorCis4LiBOdW1lcm91cyBtaW5vciBmaXhlcyB0byBlbGltaW5hdGUgY29tcGlsYXRpb24gYW5kIGJ1aWxkL3BhY2thZ2luZyBzeXN0ZW0KK3dhcm5pbmdzLCBmaXggY29zbWV0aWMgaXNzdWVzLCBpbXByb3ZlIGRvY3VtZW50YXRpb24gY2xhcml0eSwgYW5kIG90aGVyIGdlbmVyYWwKK3NvdXJjZSBjbGVhbnVwLgorCisKKzEuMy4wCis9PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAxLjMgYmV0YTE6CisKKzEuIGBtYWtlIHRlc3RgIG5vdyB3b3JrcyBwcm9wZXJseSBvbiBGcmVlQlNELCBhbmQgaXQgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoZQorbWQ1c3VtIGV4ZWN1dGFibGUgdG8gYmUgcHJlc2VudCBvbiBvdGhlciBVbip4IHBsYXRmb3Jtcy4KKworMi4gT3ZlcmhhdWxlZCB0aGUgcGFja2FnaW5nIHN5c3RlbToKKworICAgICAtIFRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdmVuZG9yLXN1cHBsaWVkIGxpYmpwZWctdHVyYm8gcGFja2FnZXMsIHRoZQorb2ZmaWNpYWwgUlBNcyBhbmQgREVCcyBmb3IgbGlianBlZy10dXJibyBoYXZlIGJlZW4gcmVuYW1lZCB0bworImxpYmpwZWctdHVyYm8tb2ZmaWNpYWwiLgorICAgICAtIFRoZSBUdXJib0pQRUcgbGlicmFyaWVzIGFyZSBub3cgbG9jYXRlZCB1bmRlciAvb3B0L2xpYmpwZWctdHVyYm8gaW4gdGhlCitvZmZpY2lhbCBMaW51eCBhbmQgTWFjIHBhY2thZ2VzLCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHZlbmRvci1zdXBwbGllZAorcGFja2FnZXMgYW5kIGFsc28gdG8gc3RyZWFtbGluZSB0aGUgcGFja2FnaW5nIHN5c3RlbS4KKyAgICAgLSBSZWxlYXNlIHBhY2thZ2VzIGFyZSBub3cgY3JlYXRlZCB3aXRoIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGRlZmluZWQKK2J5IHRoZSBjb25maWd1cmUgdmFyaWFibGVzIGBwcmVmaXhgLCBgYmluZGlyYCwgYGxpYmRpcmAsIGV0Yy4gKFVuXCp4KSBvciBieSB0aGUKK2BDTUFLRV9JTlNUQUxMX1BSRUZJWGAgdmFyaWFibGUgKFdpbmRvd3MuKSAgVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHRoZSBkb2NzIGFyZQorYWx3YXlzIGxvY2F0ZWQgdW5kZXIgdGhlIHN5c3RlbSBkZWZhdWx0IGRvY3VtZW50YXRpb24gZGlyZWN0b3J5IG9uIFVuXCp4IGFuZAorTWFjIHN5c3RlbXMsIGFuZCBvbiBXaW5kb3dzLCB0aGUgVHVyYm9KUEVHIERMTCBpcyBhbHdheXMgbG9jYXRlZCBpbiB0aGUgV2luZG93cworc3lzdGVtIGRpcmVjdG9yeS4KKyAgICAgLSBUbyBhdm9pZCBjb25mdXNpb24sIG9mZmljaWFsIGxpYmpwZWctdHVyYm8gcGFja2FnZXMgb24gTGludXgvVW5peAorcGxhdGZvcm1zIChleGNlcHQgZm9yIE1hYykgd2lsbCBhbHdheXMgaW5zdGFsbCB0aGUgMzItYml0IGxpYnJhcmllcyBpbgorL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyIGFuZCB0aGUgNjQtYml0IGxpYnJhcmllcyBpbiAvb3B0L2xpYmpwZWctdHVyYm8vbGliNjQuCisgICAgIC0gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSwgaW4gc29tZSBjYXNlcywgdGhlIGxpYmpwZWctdHVyYm8gZXhlY3V0YWJsZXMgb24KK1VuKnggc3lzdGVtcyB3ZXJlIG5vdCBwcm9wZXJseSBsaW5raW5nIHdpdGggdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5zdGFsbGVkIGJ5Cit0aGUgc2FtZSBwYWNrYWdlLgorICAgICAtIEZpeGVkIGFuIGlzc3VlIHdoZXJlYnkgYnVpbGRpbmcgdGhlICJpbnN0YWxsZXIiIHRhcmdldCBvbiBXaW5kb3dzIHdoZW4KK2BXSVRIX0pBVkE9MWAgd291bGQgZmFpbCBpZiB0aGUgVHVyYm9KUEVHIEpBUiBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBidWlsdC4KKyAgICAgLSBCdWlsZGluZyB0aGUgImluc3RhbGwiIHRhcmdldCBvbiBXaW5kb3dzIG5vdyBpbnN0YWxscyBmaWxlcyBpbnRvIHRoZQorc2FtZSBwbGFjZXMgdGhhdCB0aGUgaW5zdGFsbGVyIGRvZXMuCisKKzMuIEZpeGVkIGEgSHVmZm1hbiBlbmNvZGVyIGJ1ZyB0aGF0IHByZXZlbnRlZCBJL08gc3VzcGVuc2lvbiBmcm9tIHdvcmtpbmcKK3Byb3Blcmx5LgorCisKKzEuMi45MCAoMS4zIGJldGExKQorPT09PT09PT09PT09PT09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuMi4xOgorCisxLiBBZGRlZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHNjYWxpbmcgZmFjdG9ycyAoMy84LCA1LzgsIDMvNCwgNy84LCA5LzgsIDUvNCwKKzExLzgsIDMvMiwgMTMvOCwgNy80LCAxNS84LCBhbmQgMikgd2hlbiBkZWNvbXByZXNzaW5nLiAgTm90ZSB0aGF0IHRoZSBJRENUIHdpbGwKK25vdCBiZSBTSU1ELWFjY2VsZXJhdGVkIHdoZW4gdXNpbmcgYW55IG9mIHRoZXNlIG5ldyBzY2FsaW5nIGZhY3RvcnMuCisKKzIuIFRoZSBUdXJib0pQRUcgZHluYW1pYyBsaWJyYXJ5IGlzIG5vdyB2ZXJzaW9uZWQuICBJdCB3YXMgbm90IHN0cmljdGx5CituZWNlc3NhcnkgdG8gZG8gc28sIGJlY2F1c2UgVHVyYm9KUEVHIHVzZXMgdmVyc2lvbmVkIHN5bWJvbHMsIGFuZCBpZiBhIGZ1bmN0aW9uCitjaGFuZ2VzIGluIGFuIEFCSS1pbmNvbXBhdGlibGUgd2F5LCB0aGF0IGZ1bmN0aW9uIGlzIHJlbmFtZWQgYW5kIGEgbGVnYWN5CitmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgSG93ZXZlciwgY2VydGFpbgorTGludXggZGlzdHJvIG1haW50YWluZXJzIGhhdmUgYSBwb2xpY3kgYWdhaW5zdCBhY2NlcHRpbmcgYW55IGxpYnJhcnkgdGhhdCBpc24ndAordmVyc2lvbmVkLgorCiszLiBFeHRlbmRlZCB0aGUgVHVyYm9KUEVHIEphdmEgQVBJIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gY29tcHJlc3MgYSBKUEVHCitpbWFnZSBmcm9tIGFuZCBkZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhbiBhcmJpdHJhcnkgcG9zaXRpb24gaW4gYSBsYXJnZQoraW1hZ2UgYnVmZmVyLgorCis0LiBUaGUgYHRqRGVjb21wcmVzc1RvWVVWKClgIGZ1bmN0aW9uIG5vdyBzdXBwb3J0cyB0aGUgYFRKRkxBR19GQVNURENUYCBmbGFnLgorCis1LiBUaGUgMzItYml0IHN1cHBsZW1lbnRhcnkgcGFja2FnZSBmb3IgYW1kNjQgRGViaWFuIHN5c3RlbXMgbm93IHByb3ZpZGVzCitzeW1saW5rcyBpbiAvdXNyL2xpYi9pMzg2LWxpbnV4LWdudSBmb3IgdGhlIFR1cmJvSlBFRyBsaWJyYXJpZXMgaW4gL3Vzci9saWIzMi4KK1RoaXMgYWxsb3dzIHRob3NlIGxpYnJhcmllcyB0byBiZSB1c2VkIG9uIE11bHRpQXJjaC1jb21wYXRpYmxlIHN5c3RlbXMgKHN1Y2ggYXMKK1VidW50dSAxMSBhbmQgbGF0ZXIpIHdpdGhvdXQgc2V0dGluZyB0aGUgbGlua2VyIHBhdGguCisKKzYuIFRoZSBUdXJib0pQRUcgSmF2YSB3cmFwcGVyIHNob3VsZCBub3cgZmluZCB0aGUgSk5JIGxpYnJhcnkgb24gTWFjIHN5c3RlbXMKK3dpdGhvdXQgaGF2aW5nIHRvIHBhc3MgYC1EamF2YS5saWJyYXJ5LnBhdGg9L3Vzci9saWJgIHRvIGphdmEuCisKKzcuIFRKQmVuY2ggaGFzIGJlZW4gcG9ydGVkIHRvIEphdmEgdG8gcHJvdmlkZSBhIGNvbnZlbmllbnQgd2F5IG9mIHZhbGlkYXRpbmcKK3RoZSBwZXJmb3JtYW5jZSBvZiB0aGUgVHVyYm9KUEVHIEphdmEgQVBJLiAgSXQgY2FuIGJlIHJ1biB3aXRoCitgamF2YSAtY3AgdHVyYm9qcGVnLmphciBUSkJlbmNoYC4KKworOC4gY2pwZWcgY2FuIG5vdyBiZSB1c2VkIHRvIGdlbmVyYXRlIEpQRUcgZmlsZXMgd2l0aCB0aGUgUkdCIGNvbG9yc3BhY2UKKyhmZWF0dXJlIHBvcnRlZCBmcm9tIGpwZWctOGQuKQorCis5LiBUaGUgd2lkdGggYW5kIGhlaWdodCBpbiB0aGUgYC1jcm9wYCBhcmd1bWVudCBwYXNzZWQgdG8ganBlZ3RyYW4gY2FuIG5vdyBiZQorc3VmZml4ZWQgd2l0aCBgZmAgdG8gaW5kaWNhdGUgdGhhdCwgd2hlbiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGNyb3BwaW5nCityZWdpb24gaXMgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgbmVhcmVzdCBpTUNVIGJvdW5kYXJ5LCB0aGUgYm90dG9tIHJpZ2h0Citjb3JuZXIgc2hvdWxkIGJlIG1vdmVkIGJ5IHRoZSBzYW1lIGFtb3VudC4gIEluIG90aGVyIHdvcmRzLCB0aGlzIGZlYXR1cmUgY2F1c2VzCitqcGVndHJhbiB0byBzdHJpY3RseSBob25vciB0aGUgc3BlY2lmaWVkIHdpZHRoL2hlaWdodCByYXRoZXIgdGhhbiB0aGUgc3BlY2lmaWVkCitib3R0b20gcmlnaHQgY29ybmVyIChmZWF0dXJlIHBvcnRlZCBmcm9tIGpwZWctOGQuKQorCisxMC4gSlBFRyBmaWxlcyB1c2luZyB0aGUgUkdCIGNvbG9yc3BhY2UgY2FuIG5vdyBiZSBkZWNvbXByZXNzZWQgaW50byBncmF5c2NhbGUKK2ltYWdlcyAoZmVhdHVyZSBwb3J0ZWQgZnJvbSBqcGVnLThkLikKKworMTEuIEZpeGVkIGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgMS4yLjFbN10gd2hlcmVieSB0aGUgYnVpbGQgd291bGQgZmFpbCB3aXRoCittdWx0aXBsZSAiTWlzbWF0Y2ggaW4gb3BlcmFuZCBzaXplcyIgZXJyb3JzIHdoZW4gYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgeDg2CitTSU1EIGNvZGUgd2l0aCBOQVNNIDAuOTguCisKKzEyLiBUaGUgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VycyAoYGpwZWdfbWVtX3NyYygpYCBhbmQKK2BqcGVnX21lbV9kZXN0KClgKSBhcmUgbm93IGluY2x1ZGVkIGJ5IGRlZmF1bHQgd2hlbiBidWlsZGluZyBsaWJqcGVnLXR1cmJvIHdpdGgKK2xpYmpwZWcgdjZiIG9yIHY3IGVtdWxhdGlvbiwgc28gdGhhdCBwcm9ncmFtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlc2UKK2Z1bmN0aW9ucyB3aXRob3V0IHJlcXVpcmluZyB0aGUgdXNlIG9mIHRoZSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgbGlianBlZyB2OAorQUJJLiAgVGhlICJhZ2UgbnVtYmVyIiBvZiB0aGUgbGlianBlZy10dXJibyBsaWJyYXJ5IG9uIFVuKnggc3lzdGVtcyBoYXMgYmVlbgoraW5jcmVtZW50ZWQgYnkgMSB0byByZWZsZWN0IHRoaXMuICBZb3UgY2FuIGRpc2FibGUgdGhpcyBmZWF0dXJlIHdpdGggYQorY29uZmlndXJlL0NNYWtlIHN3aXRjaCBpbiBvcmRlciB0byByZXRhaW4gc3RyaWN0IEFQSS9BQkkgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQorbGlianBlZyB2NmIgb3IgdjcgQVBJL0FCSSAob3Igd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBsaWJqcGVnLXR1cmJvLikgIFNlZQorW1JFQURNRS5tZF0oUkVBRE1FLm1kKSBmb3IgbW9yZSBkZXRhaWxzLgorCisxMy4gQWRkZWQgQVJNdjdzIGFyY2hpdGVjdHVyZSB0byBsaWJqcGVnLmEgYW5kIGxpYnR1cmJvanBlZy5hIGluIHRoZSBvZmZpY2lhbAorbGlianBlZy10dXJibyBiaW5hcnkgcGFja2FnZSBmb3IgT1MgWCwgc28gdGhhdCB0aG9zZSBsaWJyYXJpZXMgY2FuIGJlIHVzZWQgdG8KK2J1aWxkIGFwcGxpY2F0aW9ucyB0aGF0IGxldmVyYWdlIHRoZSBmYXN0ZXIgQ1BVcyBpbiB0aGUgaVBob25lIDUgYW5kIGlQYWQgNC4KKworCisxLjIuMQorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMS4yLjA6CisKKzEuIENyZWF0aW5nIG9yIGRlY29kaW5nIGEgSlBFRyBmaWxlIHRoYXQgdXNlcyB0aGUgUkdCIGNvbG9yc3BhY2Ugc2hvdWxkIG5vdworcHJvcGVybHkgd29yayB3aGVuIHRoZSBpbnB1dCBvciBvdXRwdXQgY29sb3JzcGFjZSBpcyBvbmUgb2YgdGhlIGxpYmpwZWctdHVyYm8KK2NvbG9yc3BhY2UgZXh0ZW5zaW9ucy4KKworMi4gV2hlbiBsaWJqcGVnLXR1cmJvIHdhcyBidWlsdCB3aXRob3V0IFNJTUQgc3VwcG9ydCBhbmQgbWVyZ2VkIChub24tZmFuY3kpCit1cHNhbXBsaW5nIHdhcyB1c2VkIGFsb25nIHdpdGggYW4gYWxwaGEtZW5hYmxlZCBjb2xvcnNwYWNlIGR1cmluZworZGVjb21wcmVzc2lvbiwgdGhlIHVudXNlZCBieXRlIG9mIHRoZSBkZWNvbXByZXNzZWQgcGl4ZWxzIHdhcyBub3QgYmVpbmcgc2V0IHRvCisweEZGLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4gIFRKVW5pdFRlc3QgaGFzIGFsc28gYmVlbiBleHRlbmRlZCB0byB0ZXN0IGZvciB0aGUKK2NvcnJlY3QgYmVoYXZpb3Igb2YgdGhlIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyB3aGVuIG1lcmdlZCB1cHNhbXBsaW5nIGlzIHVzZWQuCisKKzMuIEZpeGVkIGEgYnVnIHdoZXJlYnkgdGhlIGxpYmpwZWctdHVyYm8gU1NFMiBTSU1EIGNvZGUgd291bGQgbm90IHByZXNlcnZlIHRoZQordXBwZXIgNjQgYml0cyBvZiB4bW02IGFuZCB4bW03IG9uIFdpbjY0IHBsYXRmb3Jtcywgd2hpY2ggdmlvbGF0ZWQgdGhlIFdpbjY0CitjYWxsaW5nIGNvbnZlbnRpb25zLgorCis0LiBGaXhlZCBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IDEuMi4wWzZdIHdoZXJlYnkgZGVjb21wcmVzc2luZyBjb3JydXB0IEpQRUcKK2ltYWdlcyAoc3BlY2lmaWNhbGx5LCBpbWFnZXMgaW4gd2hpY2ggdGhlIGNvbXBvbmVudCBjb3VudCB3YXMgZXJyb25lb3VzbHkgc2V0Cit0byBhIGxhcmdlIHZhbHVlKSB3b3VsZCBjYXVzZSBsaWJqcGVnLXR1cmJvIHRvIHNlZ2ZhdWx0LgorCis1LiBXb3JrZWQgYXJvdW5kIGEgc2V2ZXJlIHBlcmZvcm1hbmNlIGlzc3VlIHdpdGggIkJvYmNhdCIgKEFNRCBFbWJlZGRlZCBBUFUpCitwcm9jZXNzb3JzLiAgVGhlIGBNQVNLTU9WRFFVYCBpbnN0cnVjdGlvbiwgd2hpY2ggd2FzIHVzZWQgYnkgdGhlIGxpYmpwZWctdHVyYm8KK1NTRTIgU0lNRCBjb2RlLCBpcyBhcHBhcmVudGx5IGltcGxlbWVudGVkIGluIG1pY3JvY29kZSBvbiBBTUQgcHJvY2Vzc29ycywgYW5kCitpdCBpcyBwYWluZnVsbHkgc2xvdyBvbiBCb2JjYXQgcHJvY2Vzc29ycyBpbiBwYXJ0aWN1bGFyLiAgRWxpbWluYXRpbmcgdGhlIHVzZQorb2YgdGhpcyBpbnN0cnVjdGlvbiBpbXByb3ZlZCBwZXJmb3JtYW5jZSBieSBhbiBvcmRlciBvZiBtYWduaXR1ZGUgb24gQm9iY2F0Citwcm9jZXNzb3JzIGFuZCBieSBhIHNtYWxsIGFtb3VudCAodHlwaWNhbGx5IDUlKSBvbiBBTUQgZGVza3RvcCBwcm9jZXNzb3JzLgorCis2LiBBZGRlZCBTSU1EIGFjY2VsZXJhdGlvbiBmb3IgcGVyZm9ybWluZyA0OjI6MiB1cHNhbXBsaW5nIG9uIE5FT04tY2FwYWJsZSBBUk0KK3BsYXRmb3Jtcy4gIFRoaXMgc3BlZWRzIHVwIHRoZSBkZWNvbXByZXNzaW9uIG9mIDQ6MjoyIEpQRUdzIGJ5IDIwLTI1JSBvbiBzdWNoCitwbGF0Zm9ybXMuCisKKzcuIEZpeGVkIGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgMS4yLjBbMl0gd2hlcmVieSwgb24gTGludXgveDg2IHBsYXRmb3JtcworcnVubmluZyB0aGUgMzItYml0IFNTRTIgU0lNRCBjb2RlIGluIGxpYmpwZWctdHVyYm8sIGRlY29tcHJlc3NpbmcgYSA0OjI6MCBvcgorNDoyOjIgSlBFRyBpbWFnZSBpbnRvIGEgMzItYml0IChSR0JYLCBCR1JYLCBldGMuKSBidWZmZXIgd2l0aG91dCB1c2luZyBmYW5jeQordXBzYW1wbGluZyB3b3VsZCBwcm9kdWNlIHNldmVyYWwgaW5jb3JyZWN0IGNvbHVtbnMgb2YgcGl4ZWxzIGF0IHRoZSByaWdodC1oYW5kCitzaWRlIG9mIHRoZSBvdXRwdXQgaW1hZ2UgaWYgZWFjaCByb3cgaW4gdGhlIG91dHB1dCBpbWFnZSB3YXMgbm90IGV2ZW5seQorZGl2aXNpYmxlIGJ5IDE2IGJ5dGVzLgorCis4LiBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5IGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIFNJTUQgZXh0ZW5zaW9ucyB3aXRoIFhjb2RlCis0LjMgb24gT1MgWCBwbGF0Zm9ybXMgd291bGQgY2F1c2UgTkFTTSB0byByZXR1cm4gbnVtZXJvdXMgZXJyb3JzIG9mIHRoZSBmb3JtCisiJyVkZWZpbmUnIGV4cGVjdHMgYSBtYWNybyBpZGVudGlmaWVyIi4KKworOS4gQWRkZWQgZmxhZ3MgdG8gdGhlIFR1cmJvSlBFRyBBUEkgdGhhdCBhbGxvdyB0aGUgY2FsbGVyIHRvIGZvcmNlIHRoZSB1c2Ugb2YKK2VpdGhlciB0aGUgZmFzdCBvciB0aGUgYWNjdXJhdGUgRENUL0lEQ1QgYWxnb3JpdGhtcyBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4KKworCisxLjIuMAorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMS4yIGJldGExOgorCisxLiBGaXhlZCBidWlsZCBpc3N1ZSB3aXRoIFlBU00gb24gVW5peCBzeXN0ZW1zICh0aGUgbGlianBlZy10dXJibyBidWlsZCBzeXN0ZW0KK3dhcyBub3QgYWRkaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byB0aGUgYXNzZW1ibGVyIGluY2x1ZGUgcGF0aCwgc28gWUFTTQord2FzIG5vdCBhYmxlIHRvIGZpbmQganNpbWRjZmcuaW5jLikKKworMi4gRml4ZWQgb3V0LW9mLWJvdW5kcyByZWFkIGluIFNTRTIgU0lNRCBjb2RlIHRoYXQgb2NjdXJyZWQgd2hlbiBkZWNvbXByZXNzaW5nCithIEpQRUcgaW1hZ2UgdG8gYSBiaXRtYXAgYnVmZmVyIHdob3NlIHNpemUgd2FzIG5vdCBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorVGhpcyB3YXMgbW9yZSBvZiBhbiBhbm5veWFuY2UgdGhhbiBhbiBhY3R1YWwgYnVnLCBzaW5jZSBpdCBkaWQgbm90IGNhdXNlIGFueQorYWN0dWFsIHJ1bi10aW1lIHByb2JsZW1zLCBidXQgdGhlIGlzc3VlIHNob3dlZCB1cCB3aGVuIHJ1bm5pbmcgbGlianBlZy10dXJibyBpbgordmFsZ3JpbmQuICBTZWUgPGh0dHA6Ly9jcmJ1Zy5jb20vNzIzOTk+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiszLiBBZGRlZCBhIGNvbXBpbGUtdGltZSBtYWNybyAoYExJQkpQRUdfVFVSQk9fVkVSU0lPTmApIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2NoZWNrIHRoZSB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8gYWdhaW5zdCB3aGljaCBhbiBhcHBsaWNhdGlvbiB3YXMgY29tcGlsZWQuCisKKzQuIEFkZGVkIG5ldyBSR0JBL0JHUkEvQUJHUi9BUkdCIGNvbG9yc3BhY2UgZXh0ZW5zaW9uIGNvbnN0YW50cyAobGlianBlZyBBUEkpCithbmQgcGl4ZWwgZm9ybWF0cyAoVHVyYm9KUEVHIEFQSSksIHdoaWNoIGFsbG93IGFwcGxpY2F0aW9ucyB0byBzcGVjaWZ5IHRoYXQsCit3aGVuIGRlY29tcHJlc3NpbmcgdG8gYSA0LWNvbXBvbmVudCBSR0IgYnVmZmVyLCB0aGUgdW51c2VkIGJ5dGUgc2hvdWxkIGJlIHNldAordG8gMHhGRiBzbyB0aGF0IGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4KKworNS4gRml4ZWQgcmVncmVzc2lvbiBpc3N1ZSB3aGVyZWJ5IERldklMIGZhaWxlZCB0byBidWlsZCBhZ2FpbnN0IGxpYmpwZWctdHVyYm8KK2JlY2F1c2UgbGlianBlZy10dXJibydzIGRpc3RyaWJ1dGVkIHZlcnNpb24gb2YgamNvbmZpZy5oIGNvbnRhaW5lZCBhbiBgSU5MSU5FYAorbWFjcm8sIHdoaWNoIGNvbmZsaWN0ZWQgd2l0aCBhIHNpbWlsYXIgbWFjcm8gaW4gRGV2SUwuICBUaGlzIG1hY3JvIGlzIHVzZWQgb25seQoraW50ZXJuYWxseSB3aGVuIGJ1aWxkaW5nIGxpYmpwZWctdHVyYm8sIHNvIGl0IHdhcyBtb3ZlZCBpbnRvIGNvbmZpZy5oLgorCis2LiBsaWJqcGVnLXR1cmJvIHdpbGwgbm93IGNvcnJlY3RseSBkZWNvbXByZXNzIGVycm9uZW91cyBDTVlLL1lDQ0sgSlBFR3Mgd2hvc2UKK0sgY29tcG9uZW50IGlzIGFzc2lnbmVkIGEgY29tcG9uZW50IElEIG9mIDEgaW5zdGVhZCBvZiA0LiAgQWx0aG91Z2ggdGhlc2UgZmlsZXMKK2FyZSBpbiB2aW9sYXRpb24gb2YgdGhlIHNwZWMsIG90aGVyIEpQRUcgaW1wbGVtZW50YXRpb25zIGhhbmRsZSB0aGVtCitjb3JyZWN0bHkuCisKKzcuIEFkZGVkIEFSTXY2IGFuZCBBUk12NyBhcmNoaXRlY3R1cmVzIHRvIGxpYmpwZWcuYSBhbmQgbGlidHVyYm9qcGVnLmEgaW4KK3RoZSBvZmZpY2lhbCBsaWJqcGVnLXR1cmJvIGJpbmFyeSBwYWNrYWdlIGZvciBPUyBYLCBzbyB0aGF0IHRob3NlIGxpYnJhcmllcyBjYW4KK2JlIHVzZWQgdG8gYnVpbGQgYm90aCBPUyBYIGFuZCBpT1MgYXBwbGljYXRpb25zLgorCisKKzEuMS45MCAoMS4yIGJldGExKQorPT09PT09PT09PT09PT09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuMS4xOgorCisxLiBBZGRlZCBhIEphdmEgd3JhcHBlciBmb3IgdGhlIFR1cmJvSlBFRyBBUEkuICBTZWUgW2phdmEvUkVBRE1FXShqYXZhL1JFQURNRSkKK2ZvciBtb3JlIGRldGFpbHMuCisKKzIuIFRoZSBUdXJib0pQRUcgQVBJIGNhbiBub3cgYmUgdXNlZCB0byBzY2FsZSBkb3duIGltYWdlcyBkdXJpbmcKK2RlY29tcHJlc3Npb24uCisKKzMuIEFkZGVkIFNJTUQgcm91dGluZXMgZm9yIFJHQi10by1ncmF5c2NhbGUgY29sb3IgY29udmVyc2lvbiwgd2hpY2gKK3NpZ25pZmljYW50bHkgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGdyYXlzY2FsZSBKUEVHIGNvbXByZXNzaW9uIGZyb20gYW4KK1JHQiBzb3VyY2UgaW1hZ2UuCisKKzQuIEltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgQyBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzLCB3aGljaCBhcmUgdXNlZAorb24gcGxhdGZvcm1zIGZvciB3aGljaCBTSU1EIGFjY2VsZXJhdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCis1LiBBZGRlZCBhIGZ1bmN0aW9uIHRvIHRoZSBUdXJib0pQRUcgQVBJIHRoYXQgcGVyZm9ybXMgbG9zc2xlc3MgdHJhbnNmb3Jtcy4KK1RoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHNhbWUgYmFjayBlbmQgYXMganBlZ3RyYW4sIGJ1dCBpdAorcGVyZm9ybXMgdHJhbnNjb2RpbmcgZW50aXJlbHkgaW4gbWVtb3J5IGFuZCBhbGxvd3MgbXVsdGlwbGUgdHJhbnNmb3JtcyBhbmQvb3IKK2Nyb3Agb3BlcmF0aW9ucyB0byBiZSBiYXRjaGVkIHRvZ2V0aGVyLCBzbyB0aGUgc291cmNlIGNvZWZmaWNpZW50cyBvbmx5IG5lZWQgdG8KK2JlIHJlYWQgb25jZS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gZ2VuZXJhdGluZyBpbWFnZSB0aWxlcyBmcm9tIGEgc2luZ2xlIHNvdXJjZQorSlBFRy4KKworNi4gQWRkZWQgdGVzdHMgZm9yIHRoZSBuZXcgVHVyYm9KUEVHIHNjYWxlZCBkZWNvbXByZXNzaW9uIGFuZCBsb3NzbGVzcwordHJhbnNmb3JtIGZlYXR1cmVzIHRvIHRqYmVuY2ggKHRoZSBUdXJib0pQRUcgYmVuY2htYXJrLCBmb3JtZXJseSBjYWxsZWQKKyJqcGd0ZXN0Ii4pCisKKzcuIEFkZGVkIHN1cHBvcnQgZm9yIDQ6NDowICh0cmFuc3Bvc2VkIDQ6MjoyKSBzdWJzYW1wbGluZyBpbiBUdXJib0pQRUcsIHdoaWNoCit3YXMgbmVjZXNzYXJ5IGluIG9yZGVyIGZvciBpdCB0byByZWFkIDQ6MjoyIEpQRUcgZmlsZXMgdGhhdCBoYWQgYmVlbiBsb3NzbGVzc2x5Cit0cmFuc3Bvc2VkIG9yIHJvdGF0ZWQgOTAgZGVncmVlcy4KKworOC4gQWxsIGxlZ2FjeSBWaXJ0dWFsR0wgY29kZSBoYXMgYmVlbiByZS1mYWN0b3JlZCwgYW5kIHRoaXMgaGFzIGFsbG93ZWQKK2xpYmpwZWctdHVyYm8sIGluIGl0cyBlbnRpcmV0eSwgdG8gYmUgcmUtbGljZW5zZWQgdW5kZXIgYSBCU0Qtc3R5bGUgbGljZW5zZS4KKworOS4gbGlianBlZy10dXJibyBjYW4gbm93IGJlIGJ1aWx0IHdpdGggWUFTTS4KKworMTAuIEFkZGVkIFNJTUQgYWNjZWxlcmF0aW9uIGZvciBBUk0gTGludXggYW5kIGlPUyBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CitORU9OIGluc3RydWN0aW9ucy4KKworMTEuIFJlZmFjdG9yZWQgdGhlIFR1cmJvSlBFRyBDIEFQSSBhbmQgZG9jdW1lbnRlZCBpdCB1c2luZyBEb3h5Z2VuLiAgVGhlCitUdXJib0pQRUcgMS4yIEFQSSB1c2VzIHBpeGVsIGZvcm1hdHMgdG8gZGVmaW5lIHRoZSBzaXplIGFuZCBjb21wb25lbnQgb3JkZXIgb2YKK3RoZSB1bmNvbXByZXNzZWQgc291cmNlL2Rlc3RpbmF0aW9uIGltYWdlcywgYW5kIGl0IGluY2x1ZGVzIGEgbW9yZSBlZmZpY2llbnQKK3ZlcnNpb24gb2YgYFRKQlVGU0laRSgpYCB0aGF0IGNvbXB1dGVzIGEgd29yc3QtY2FzZSBKUEVHIHNpemUgYmFzZWQgb24gdGhlCitsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIFRoZSByZWZhY3RvcmVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQorVHVyYm9KUEVHIEFQSSBub3cgdXNlcyB0aGUgbGlianBlZyBtZW1vcnkgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtYW5hZ2VycywKK3doaWNoIGFsbG93cyB0aGUgVHVyYm9KUEVHIGNvbXByZXNzb3IgdG8gZ3JvdyB0aGUgSlBFRyBidWZmZXIgYXMgbmVjZXNzYXJ5LgorCisxMi4gRWxpbWluYXRlZCBlcnJvcnMgaW4gdGhlIG91dHB1dCBvZiBqcGVndHJhbiBvbiBXaW5kb3dzIHRoYXQgb2NjdXJyZWQgd2hlbgordGhlIGFwcGxpY2F0aW9uIHdhcyBpbnZva2VkIHVzaW5nIEkvTyByZWRpcmVjdGlvbgorKGBqcGVndHJhbiA8aW5wdXQuanBnID5vdXRwdXQuanBnYC4pCisKKzEzLiBUaGUgaW5jbHVzaW9uIG9mIGxpYmpwZWcgdjcgYW5kIHY4IGVtdWxhdGlvbiBhcyB3ZWxsIGFzIGFyaXRobWV0aWMgY29kaW5nCitzdXBwb3J0IGluIGxpYmpwZWctdHVyYm8gdjEuMS4wIGludHJvZHVjZWQgc2V2ZXJhbCBuZXcgZXJyb3IgY29uc3RhbnRzIGluCitqZXJyb3IuaCwgYW5kIHRoZXNlIHdlcmUgbWlzdGFrZW5seSBlbmFibGVkIGZvciBhbGwgZW11bGF0aW9uIG1vZGVzLCBjYXVzaW5nCit0aGUgZXJyb3IgZW51bSBpbiBsaWJqcGVnLXR1cmJvIHRvIHNvbWV0aW1lcyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB0aGUKK3NhbWUgZW51bSBpbiBsaWJqcGVnLiAgVGhpcyByZXByZXNlbnRzIGFuIEFCSSBpbmNvbXBhdGliaWxpdHksIGFuZCBpdCBjYXVzZWQKK3Byb2JsZW1zIHdpdGggcmFyZSBhcHBsaWNhdGlvbnMgdGhhdCB0b29rIHNwZWNpZmljIGFjdGlvbiBiYXNlZCBvbiBhIHBhcnRpY3VsYXIKK2Vycm9yIHZhbHVlLiAgVGhlIGZpeCB3YXMgdG8gaW5jbHVkZSB0aGUgbmV3IGVycm9yIGNvbnN0YW50cyBjb25kaXRpb25hbGx5CitiYXNlZCBvbiB3aGV0aGVyIGxpYmpwZWcgdjcgb3IgdjggZW11bGF0aW9uIHdhcyBlbmFibGVkLgorCisxNC4gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSBXaW5kb3dzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZWQgbGlianBlZy10dXJibyB3b3VsZAorZmFpbCB0byBjb21waWxlIGlmIHRoZSBXaW5kb3dzIHN5c3RlbSBoZWFkZXJzIHdlcmUgaW5jbHVkZWQgYmVmb3JlIGpwZWdsaWIuaC4KK1RoaXMgaXNzdWUgd2FzIGNhdXNlZCBieSBhIGNvbmZsaWN0IGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBJTlQzMiB0eXBlLgorCisxNS4gRml4ZWQgMzItYml0IHN1cHBsZW1lbnRhcnkgcGFja2FnZSBmb3IgYW1kNjQgRGViaWFuIHN5c3RlbXMsIHdoaWNoIHdhcworYnJva2VuIGJ5IGVuaGFuY2VtZW50cyB0byB0aGUgcGFja2FnaW5nIHN5c3RlbSBpbiAxLjEuCisKKzE2LiBXaGVuIGRlY29tcHJlc3NpbmcgYSBKUEVHIGltYWdlIHVzaW5nIGFuIG91dHB1dCBjb2xvcnNwYWNlIG9mCitgSkNTX0VYVF9SR0JYYCwgYEpDU19FWFRfQkdSWGAsIGBKQ1NfRVhUX1hCR1JgLCBvciBgSkNTX0VYVF9YUkdCYCwKK2xpYmpwZWctdHVyYm8gd2lsbCBub3cgc2V0IHRoZSB1bnVzZWQgYnl0ZSB0byAweEZGLCB3aGljaCBhbGxvd3MgYXBwbGljYXRpb25zCit0byBpbnRlcnByZXQgdGhhdCBieXRlIGFzIGFuIGFscGhhIGNoYW5uZWwgKDB4RkYgPSBvcGFxdWUpLgorCisKKzEuMS4xCis9PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAxLjEuMDoKKworMS4gRml4ZWQgYSAxLXBpeGVsIGVycm9yIGluIHJvdyAwLCBjb2x1bW4gMjEgb2YgdGhlIGx1bWluYW5jZSBwbGFuZSBnZW5lcmF0ZWQKK2J5IGB0akVuY29kZVlVVigpYC4KKworMi4gbGlianBlZy10dXJibydzIGFjY2VsZXJhdGVkIEh1ZmZtYW4gZGVjb2RlciBwcmV2aW91c2x5IGlnbm9yZWQgdW5leHBlY3RlZAorbWFya2VycyBmb3VuZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBKUEVHIGRhdGEgc3RyZWFtIGR1cmluZyBkZWNvbXByZXNzaW9uLiAgSXQKK3dpbGwgbm93IGhhbmQgb2ZmIGRlY29kaW5nIG9mIGEgcGFydGljdWxhciBibG9jayB0byB0aGUgdW5hY2NlbGVyYXRlZCBIdWZmbWFuCitkZWNvZGVyIGlmIGFuIHVuZXhwZWN0ZWQgbWFya2VyIGlzIGZvdW5kLCBzbyB0aGF0IHRoZSB1bmFjY2VsZXJhdGVkIEh1ZmZtYW4KK2RlY29kZXIgY2FuIGdlbmVyYXRlIGFuIGFwcHJvcHJpYXRlIHdhcm5pbmcuCisKKzMuIE9sZGVyIHZlcnNpb25zIG9mIE1pbkdXNjQgcHJlZml4ZWQgc3ltYm9sIG5hbWVzIHdpdGggdW5kZXJzY29yZXMgYnkKK2RlZmF1bHQsIHdoaWNoIGRpZmZlcmVkIGZyb20gdGhlIGJlaGF2aW9yIG9mIDY0LWJpdCBWaXN1YWwgQysrLiAgTWluR1c2NCAxLjAKK2hhcyBhZG9wdGVkIHRoZSBiZWhhdmlvciBvZiA2NC1iaXQgVmlzdWFsIEMrKyBhcyB0aGUgZGVmYXVsdCwgc28gdG8gYWNjb21tb2RhdGUKK3RoaXMsIHRoZSBsaWJqcGVnLXR1cmJvIFNJTUQgZnVuY3Rpb24gbmFtZXMgYXJlIG5vIGxvbmdlciBwcmVmaXhlZCB3aXRoIGFuCit1bmRlcnNjb3JlIHdoZW4gYnVpbGRpbmcgd2l0aCBNaW5HVzY0LiAgVGhpcyBtZWFucyB0aGF0LCB3aGVuIGJ1aWxkaW5nCitsaWJqcGVnLXR1cmJvIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTWluR1c2NCwgeW91IHdpbGwgbm93IGhhdmUgdG8gYWRkCitgLWZuby1sZWFkaW5nLXVuZGVyc2NvcmVgIHRvIHRoZSBgQ0ZMQUdTYC4KKworNC4gRml4ZWQgYSByZWdyZXNzaW9uIGJ1ZyBpbiB0aGUgTlNJUyBzY3JpcHQgdGhhdCBjYXVzZWQgdGhlIFdpbmRvd3MgaW5zdGFsbGVyCitidWlsZCB0byBmYWlsIHdoZW4gdXNpbmcgdGhlIFZpc3VhbCBTdHVkaW8gSURFLgorCis1LiBGaXhlZCBhIGJ1ZyBpbiBganBlZ19yZWFkX2NvZWZmaWNpZW50cygpYCB3aGVyZWJ5IGl0IHdvdWxkIG5vdCBpbml0aWFsaXplCitgY2luZm8tPmltYWdlX3dpZHRoYCBhbmQgYGNpbmZvLT5pbWFnZV9oZWlnaHRgIGlmIGxpYmpwZWcgdjcgb3IgdjggZW11bGF0aW9uCit3YXMgZW5hYmxlZC4gIFRoaXMgc3BlY2lmaWNhbGx5IGNhdXNlZCB0aGUganBlZ29wdGltIHByb2dyYW0gdG8gZmFpbCBpZiBpdCB3YXMKK2xpbmtlZCBhZ2FpbnN0IGEgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvIHRoYXQgd2FzIGJ1aWx0IHdpdGggbGlianBlZyB2NyBvciB2OAorZW11bGF0aW9uLgorCis2LiBFbGltaW5hdGVkIGV4Y2Vzc2l2ZSBJL08gb3ZlcmhlYWQgdGhhdCBvY2N1cnJlZCB3aGVuIHJlYWRpbmcgQk1QIGZpbGVzIGluCitjanBlZy4KKworNy4gRWxpbWluYXRlZCBlcnJvcnMgaW4gdGhlIG91dHB1dCBvZiBjanBlZyBvbiBXaW5kb3dzIHRoYXQgb2NjdXJyZWQgd2hlbiB0aGUKK2FwcGxpY2F0aW9uIHdhcyBpbnZva2VkIHVzaW5nIEkvTyByZWRpcmVjdGlvbiAoYGNqcGVnIDxpbnB1dGZpbGUgPm91dHB1dC5qcGdgLikKKworCisxLjEuMAorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMS4xIGJldGExOgorCisxLiBUaGUgYWxnb3JpdGhtIHVzZWQgYnkgdGhlIFNJTUQgcXVhbnRpemF0aW9uIGZ1bmN0aW9uIGNhbm5vdCBwcm9kdWNlIGNvcnJlY3QKK3Jlc3VsdHMgd2hlbiB0aGUgSlBFRyBxdWFsaXR5IGlzID49IDk4IGFuZCB0aGUgZmFzdCBpbnRlZ2VyIGZvcndhcmQgRENUIGlzCit1c2VkLiAgVGh1cywgdGhlIG5vbi1TSU1EIHF1YW50aXphdGlvbiBmdW5jdGlvbiBpcyBub3cgdXNlZCBmb3IgdGhvc2UgY2FzZXMsCithbmQgbGlianBlZy10dXJibyBzaG91bGQgbm93IHByb2R1Y2UgaWRlbnRpY2FsIG91dHB1dCB0byBsaWJqcGVnIHY2YiBpbiBhbGwKK2Nhc2VzLgorCisyLiBEZXNwaXRlIHRoZSBhYm92ZSwgdGhlIGZhc3QgaW50ZWdlciBmb3J3YXJkIERDVCBzdGlsbCBkZWdyYWRlcyBzb21ld2hhdCBmb3IKK0pQRUcgcXVhbGl0aWVzIGdyZWF0ZXIgdGhhbiA5NSwgc28gdGhlIFR1cmJvSlBFRyB3cmFwcGVyIHdpbGwgbm93IGF1dG9tYXRpY2FsbHkKK3VzZSB0aGUgc2xvdyBpbnRlZ2VyIGZvcndhcmQgRENUIHdoZW4gZ2VuZXJhdGluZyBKUEVHIGltYWdlcyBvZiBxdWFsaXR5IDk2IG9yCitncmVhdGVyLiAgVGhpcyByZWR1Y2VzIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlIGJ5IGFzIG11Y2ggYXMgMTUlIGZvciB0aGVzZQoraGlnaC1xdWFsaXR5IGltYWdlcyBidXQgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBpbWFnZXMgYXJlIHBlcmNlcHR1YWxseQorbG9zc2xlc3MuICBJdCBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbGlicmFyeSBjYW4gYXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBpdGZhbGwKK2NyZWF0ZWQgYnkgWzFdLgorCiszLiBQb3J0ZWQganBndGVzdC5jeHggdG8gcHVyZSBDIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIEMrKyBjb21waWxlci4KKworNC4gRml4ZWQgdmlzdWFsIGFydGlmYWN0cyBpbiBncmF5c2NhbGUgSlBFRyBjb21wcmVzc2lvbiBjYXVzZWQgYnkgYSB0eXBvIGluCit0aGUgUkdCLXRvLWx1bWluYW5jZSBsb29rdXAgdGFibGVzLgorCis1LiBUaGUgV2luZG93cyBkaXN0cmlidXRpb24gcGFja2FnZXMgbm93IGluY2x1ZGUgdGhlIGxpYmpwZWcgcnVuLXRpbWUgcHJvZ3JhbXMKKyhjanBlZywgZXRjLikKKworNi4gQWxsIHBhY2thZ2VzIG5vdyBpbmNsdWRlIGpwZ3Rlc3QuCisKKzcuIFRoZSBUdXJib0pQRUcgZHluYW1pYyBsaWJyYXJ5IG5vdyB1c2VzIHZlcnNpb25lZCBzeW1ib2xzLgorCis4LiBBZGRlZCB0d28gbmV3IFR1cmJvSlBFRyBBUEkgZnVuY3Rpb25zLCBgdGpFbmNvZGVZVVYoKWAgYW5kCitgdGpEZWNvbXByZXNzVG9ZVVYoKWAsIHRvIHJlcGxhY2UgdGhlIHNvbWV3aGF0IGhhY2tpc2ggYFRKX1lVVmAgZmxhZy4KKworCisxLjAuOTAgKDEuMSBiZXRhMSkKKz09PT09PT09PT09PT09PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAxLjAuMToKKworMS4gQWRkZWQgZW11bGF0aW9uIG9mIHRoZSBsaWJqcGVnIHY3IGFuZCB2OCBBUElzIGFuZCBBQklzLiAgU2VlCitbUkVBRE1FLm1kXShSRUFETUUubWQpIGZvciBtb3JlIGRldGFpbHMuICBUaGlzIGZlYXR1cmUgd2FzIHNwb25zb3JlZCBieQorQ2FtVHJhY2UgU0FTLgorCisyLiBDcmVhdGVkIGEgbmV3IENNYWtlLWJhc2VkIGJ1aWxkIHN5c3RlbSBmb3IgdGhlIFZpc3VhbCBDKysgYW5kIE1pbkdXIGJ1aWxkcy4KKworMy4gR3JheXNjYWxlIGJpdG1hcHMgY2FuIG5vdyBiZSBjb21wcmVzc2VkIGZyb20vZGVjb21wcmVzc2VkIHRvIHVzaW5nIHRoZQorVHVyYm9KUEVHIEFQSS4KKworNC4ganBndGVzdCBjYW4gbm93IGJlIHVzZWQgdG8gdGVzdCBkZWNvbXByZXNzaW9uIHBlcmZvcm1hbmNlIHdpdGggZXhpc3RpbmcKK0pQRUcgaW1hZ2VzLgorCis1LiBJZiB0aGUgZGVmYXVsdCBpbnN0YWxsIHByZWZpeCAoL29wdC9saWJqcGVnLXR1cmJvKSBpcyB1c2VkLCB0aGVuCitgbWFrZSBpbnN0YWxsYCBub3cgY3JlYXRlcyAvb3B0L2xpYmpwZWctdHVyYm8vbGliMzIgYW5kCisvb3B0L2xpYmpwZWctdHVyYm8vbGliNjQgc3ltIGxpbmtzIHRvIGR1cGxpY2F0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmFyeQorcGFja2FnZXMuCisKKzYuIEFsbCBzeW1ib2xzIGluIHRoZSBsaWJqcGVnLXR1cmJvIGR5bmFtaWMgbGlicmFyeSBhcmUgbm93IHZlcnNpb25lZCwgZXZlbgord2hlbiB0aGUgbGlicmFyeSBpcyBidWlsdCB3aXRoIGxpYmpwZWcgdjZiIGVtdWxhdGlvbi4KKworNy4gQWRkZWQgYXJpdGhtZXRpYyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc3VwcG9ydCAoY2FuIGJlIGRpc2FibGVkIHdpdGgKK2NvbmZpZ3VyZSBvciBDTWFrZSBvcHRpb25zKQorCis4LiBBZGRlZCBhIGBUSl9ZVVZgIGZsYWcgdG8gdGhlIFR1cmJvSlBFRyBBUEksIHdoaWNoIGNhdXNlcyBib3RoIHRoZSBjb21wcmVzc29yCithbmQgZGVjb21wcmVzc29yIHRvIG91dHB1dCBwbGFuYXIgWVVWIGltYWdlcy4KKworOS4gQWRkZWQgYW4gZXh0ZW5kZWQgdmVyc2lvbiBvZiBgdGpEZWNvbXByZXNzSGVhZGVyKClgIHRvIHRoZSBUdXJib0pQRUcgQVBJLAord2hpY2ggYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHN1YnNhbXBsaW5nIHVzZWQgaW4gYSBKUEVHCitpbWFnZS4KKworMTAuIEFkZGVkIGZ1cnRoZXIgcHJvdGVjdGlvbnMgYWdhaW5zdCBpbnZhbGlkIEh1ZmZtYW4gY29kZXMuCisKKworMS4wLjEKKz09PT09CisKKyMjIyBTaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0aXZlIHRvIDEuMC4wOgorCisxLiBUaGUgSHVmZm1hbiBkZWNvZGVyIHdpbGwgbm93IGhhbmRsZSBlcnJvbmVvdXMgSHVmZm1hbiBjb2RlcyAoZm9yIGluc3RhbmNlLAorZnJvbSBhIGNvcnJ1cHQgSlBFRyBpbWFnZS4pICBQcmV2aW91c2x5LCB0aGVzZSB3b3VsZCBjYXVzZSBsaWJqcGVnLXR1cmJvIHRvCitjcmFzaCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCisKKzIuIEZpeGVkIHR5cG8gaW4gU0lNRCBkaXNwYXRjaCByb3V0aW5lcyB0aGF0IHdhcyBjYXVzaW5nIDQ6MjoyIHVwc2FtcGxpbmcgdG8KK2JlIHVzZWQgaW5zdGVhZCBvZiA0OjI6MCB3aGVuIGRlY29tcHJlc3NpbmcgSlBFRyBpbWFnZXMgdXNpbmcgU1NFMiBjb2RlLgorCiszLiBUaGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZQorYElOQ09NUExFVEVfVFlQRVNfQlJPS0VOYCBtYWNybyBzaG91bGQgYmUgZGVmaW5lZC4KKworCisxLjAuMAorPT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgcmVsYXRpdmUgdG8gMC4wLjkzOgorCisxLiAyOTgzNzAwOiBGdXJ0aGVyIEZyZWVCU0QgYnVpbGQgdHdlYWtzIChubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHNwZWNpZnkKK2AtLWhvc3RgIHdoZW4gY29uZmlndXJpbmcgb24gYSA2NC1iaXQgc3lzdGVtKQorCisyLiBDcmVhdGVkIHN5bWxpbmtzIGluIHRoZSBVbml4L0xpbnV4IHBhY2thZ2VzIHNvIHRoYXQgdGhlIFR1cmJvSlBFRworaW5jbHVkZSBmaWxlIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gL29wdC9saWJqcGVnLXR1cmJvL2luY2x1ZGUsIHRoZSAzMi1iaXQKK3N0YXRpYyBsaWJyYXJpZXMgY2FuIGFsd2F5cyBiZSBmb3VuZCBpbiAvb3B0L2xpYmpwZWctdHVyYm8vbGliMzIsIGFuZCB0aGUKKzY0LWJpdCBzdGF0aWMgbGlicmFyaWVzIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gL29wdC9saWJqcGVnLXR1cmJvL2xpYjY0LgorCiszLiBUaGUgVW5peC9MaW51eCBkaXN0cmlidXRpb24gcGFja2FnZXMgbm93IGluY2x1ZGUgdGhlIGxpYmpwZWcgcnVuLXRpbWUKK3Byb2dyYW1zIChjanBlZywgZXRjLikgYW5kIG1hbiBwYWdlcy4KKworNC4gQ3JlYXRlZCBhIDMyLWJpdCBzdXBwbGVtZW50YXJ5IHBhY2thZ2UgZm9yIGFtZDY0IERlYmlhbiBzeXN0ZW1zLCB3aGljaAorY29udGFpbnMganVzdCB0aGUgMzItYml0IGxpYmpwZWctdHVyYm8gbGlicmFyaWVzLgorCis1LiBNb3ZlZCB0aGUgbGlicmFyaWVzIGZyb20gKi9saWIzMiB0byAqL2xpYiBpbiB0aGUgaTM4NiBEZWJpYW4gcGFja2FnZS4KKworNi4gSW5jbHVkZSBkaXN0cmlidXRpb24gcGFja2FnZSBmb3IgQ3lnd2luCisKKzcuIE5vIGxvbmdlciBuZWNlc3NhcnkgdG8gc3BlY2lmeSBgLS13aXRob3V0LXNpbWRgIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcywKK2FuZCB1bml0IHRlc3RzIG5vdyB3b3JrIG9uIHRob3NlIGFyY2hpdGVjdHVyZXMuCisKKworMC4wLjkzCis9PT09PT0KKworIyMjIFNpZ25pZmljYW50IGNoYW5nZXMgc2luY2UgMC4wLjkxOgorCisxLiAyOTgyNjU5OiBGaXhlZCB4ODYtNjQgYnVpbGQgb24gRnJlZUJTRCBzeXN0ZW1zCisKKzIuIDI5ODgxODg6IEFkZGVkIHN1cHBvcnQgZm9yIFdpbmRvd3MgNjQtYml0IHN5c3RlbXMKKworCiswLjAuOTEKKz09PT09PQorCisjIyMgU2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGl2ZSB0byAwLjAuOTA6CisKKzEuIEFkZGVkIGRvY3VtZW50YXRpb24gdG8gLmRlYiBwYWNrYWdlcworCisyLiAyOTY4MzEzOiBGaXhlZCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gZGVjb21wcmVzc2luZyBsYXJnZSBKUEVHIGltYWdlcworYW5kL29yIHVzaW5nIGJ1ZmZlcmVkIEkvTyB3aXRoIHRoZSBsaWJqcGVnLXR1cmJvIGRlY29tcHJlc3NvcgorCisKKzAuMC45MAorPT09PT09CisKK0luaXRpYWwgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vTElDRU5TRS5tZCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL0xJQ0VOU0UubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2ZWM0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL0xJQ0VOU0UubWQKQEAgLTAsMCArMSwxNTMgQEAKK2xpYmpwZWctdHVyYm8gTGljZW5zZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworbGlianBlZy10dXJibyBpcyBjb3ZlcmVkIGJ5IHRocmVlIGNvbXBhdGlibGUgQlNELXN0eWxlIG9wZW4gc291cmNlIGxpY2Vuc2VzOgorCistIFRoZSBJSkcgKEluZGVwZW5kZW50IEpQRUcgR3JvdXApIExpY2Vuc2UsIHdoaWNoIGlzIGxpc3RlZCBpbgorICBbUkVBRE1FLmlqZ10oUkVBRE1FLmlqZykKKworICBUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgbGlianBlZyBBUEkgbGlicmFyeSBhbmQgYXNzb2NpYXRlZCBwcm9ncmFtcworICAoYW55IGNvZGUgaW5oZXJpdGVkIGZyb20gbGlianBlZywgYW5kIGFueSBtb2RpZmljYXRpb25zIHRvIHRoYXQgY29kZS4pCisKKy0gVGhlIE1vZGlmaWVkICgzLWNsYXVzZSkgQlNEIExpY2Vuc2UsIHdoaWNoIGlzIGxpc3RlZCBiZWxvdworCisgIFRoaXMgbGljZW5zZSBjb3ZlcnMgdGhlIFR1cmJvSlBFRyBBUEkgbGlicmFyeSBhbmQgYXNzb2NpYXRlZCBwcm9ncmFtcywgYXMKKyAgd2VsbCBhcyB0aGUgYnVpbGQgc3lzdGVtLgorCistIFRoZSB6bGliIExpY2Vuc2UsIHdoaWNoIGlzIGxpc3RlZCBiZWxvdworCisgIFRoaXMgbGljZW5zZSBpcyBhIHN1YnNldCBvZiB0aGUgb3RoZXIgdHdvLCBhbmQgaXQgY292ZXJzIHRoZSBsaWJqcGVnLXR1cmJvCisgIFNJTUQgZXh0ZW5zaW9ucy4KKworCitDb21wbHlpbmcgd2l0aCB0aGUgbGlianBlZy10dXJibyBMaWNlbnNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgcm9sbC11cCBvZiB0aGUgbGlianBlZy10dXJibyBsaWNlbnNpbmcgdGVybXMsIHRvIHRoZQorYmVzdCBvZiBvdXIgdW5kZXJzdGFuZGluZy4KKworMS4gIElmIHlvdSBhcmUgZGlzdHJpYnV0aW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBzb3VyY2UsCisgICAgdGhlbjoKKworICAgIDEuICBZb3UgY2Fubm90IGFsdGVyIG9yIHJlbW92ZSBhbnkgZXhpc3RpbmcgY29weXJpZ2h0IG9yIGxpY2Vuc2Ugbm90aWNlcworICAgICAgICBmcm9tIHRoZSBzb3VyY2UuCisKKyAgICAgICAgKipPcmlnaW4qKgorICAgICAgICAtIENsYXVzZSAxIG9mIHRoZSBJSkcgTGljZW5zZQorICAgICAgICAtIENsYXVzZSAxIG9mIHRoZSBNb2RpZmllZCBCU0QgTGljZW5zZQorICAgICAgICAtIENsYXVzZXMgMSBhbmQgMyBvZiB0aGUgemxpYiBMaWNlbnNlCisKKyAgICAyLiAgWW91IG11c3QgYWRkIHlvdXIgb3duIGNvcHlyaWdodCBub3RpY2UgdG8gdGhlIGhlYWRlciBvZiBlYWNoIHNvdXJjZQorICAgICAgICBmaWxlIHlvdSBtb2RpZmllZCwgc28gb3RoZXJzIGNhbiB0ZWxsIHRoYXQgeW91IG1vZGlmaWVkIHRoYXQgZmlsZSAoaWYKKyAgICAgICAgdGhlcmUgaXMgbm90IGFuIGV4aXN0aW5nIGNvcHlyaWdodCBoZWFkZXIgaW4gdGhhdCBmaWxlLCB0aGVuIHlvdSBjYW4KKyAgICAgICAgc2ltcGx5IGFkZCBhIG5vdGljZSBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkIHRoZSBmaWxlLikKKworICAgICAgICAqKk9yaWdpbioqCisgICAgICAgIC0gQ2xhdXNlIDEgb2YgdGhlIElKRyBMaWNlbnNlCisgICAgICAgIC0gQ2xhdXNlIDIgb2YgdGhlIHpsaWIgTGljZW5zZQorCisgICAgMy4gIFlvdSBtdXN0IGluY2x1ZGUgdGhlIElKRyBSRUFETUUgZmlsZSwgYW5kIHlvdSBtdXN0IG5vdCBhbHRlciBhbnkgb2YgdGhlCisgICAgICAgIGNvcHlyaWdodCBvciBsaWNlbnNlIHRleHQgaW4gdGhhdCBmaWxlLgorCisgICAgICAgICoqT3JpZ2luKioKKyAgICAgICAgLSBDbGF1c2UgMSBvZiB0aGUgSUpHIExpY2Vuc2UKKworMi4gIElmIHlvdSBhcmUgZGlzdHJpYnV0aW5nIG9ubHkgbGlianBlZy10dXJibyBiaW5hcmllcyB3aXRob3V0IHRoZSBzb3VyY2UsIG9yCisgICAgaWYgeW91IGFyZSBkaXN0cmlidXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBzdGF0aWNhbGx5IGxpbmtzIHdpdGgKKyAgICBsaWJqcGVnLXR1cmJvLCB0aGVuOgorCisgICAgMS4gIFlvdXIgcHJvZHVjdCBkb2N1bWVudGF0aW9uIG11c3QgaW5jbHVkZSBhIG1lc3NhZ2Ugc3RhdGluZzoKKworICAgICAgICBUaGlzIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHdvcmsgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcKKyAgICAgICAgR3JvdXAuCisKKyAgICAgICAgKipPcmlnaW4qKgorICAgICAgICAtIENsYXVzZSAyIG9mIHRoZSBJSkcgbGljZW5zZQorCisgICAgMi4gIElmIHlvdXIgYmluYXJ5IGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBvciB1c2VzIHRoZSBUdXJib0pQRUcgQVBJLCB0aGVuCisgICAgICAgIHlvdXIgcHJvZHVjdCBkb2N1bWVudGF0aW9uIG11c3QgaW5jbHVkZSB0aGUgdGV4dCBvZiB0aGUgTW9kaWZpZWQgQlNECisgICAgICAgIExpY2Vuc2UuCisKKyAgICAgICAgKipPcmlnaW4qKgorICAgICAgICAtIENsYXVzZSAyIG9mIHRoZSBNb2RpZmllZCBCU0QgTGljZW5zZQorCiszLiAgWW91IGNhbm5vdCB1c2UgdGhlIG5hbWUgb2YgdGhlIElKRyBvciBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IG9yIHRoZQorICAgIGNvbnRyaWJ1dG9ycyB0aGVyZW9mIGluIGFkdmVydGlzaW5nLCBwdWJsaWNpdHksIGV0Yy4KKworICAgICoqT3JpZ2luKioKKyAgICAtIElKRyBMaWNlbnNlCisgICAgLSBDbGF1c2UgMyBvZiB0aGUgTW9kaWZpZWQgQlNEIExpY2Vuc2UKKworNC4gIFRoZSBJSkcgYW5kIFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgZG8gbm90IHdhcnJhbnQgbGlianBlZy10dXJibyB0byBiZQorICAgIGZyZWUgb2YgZGVmZWN0cywgbm9yIGRvIHdlIGFjY2VwdCBhbnkgbGlhYmlsaXR5IGZvciB1bmRlc2lyYWJsZQorICAgIGNvbnNlcXVlbmNlcyByZXN1bHRpbmcgZnJvbSB5b3VyIHVzZSBvZiB0aGUgc29mdHdhcmUuCisKKyAgICAqKk9yaWdpbioqCisgICAgLSBJSkcgTGljZW5zZQorICAgIC0gTW9kaWZpZWQgQlNEIExpY2Vuc2UKKyAgICAtIHpsaWIgTGljZW5zZQorCisKK1RoZSBNb2RpZmllZCAoMy1jbGF1c2UpIEJTRCBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKEMpXDxZRUFSXD4gXDxBVVRIT1JcPi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKy0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCistIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitUaGUgemxpYiBMaWNlbnNlCis9PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoQykgXDxZRUFSXD4sIFw8QVVUSE9SXD4uCisKK1RoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCit3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCithcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKK2luY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKK2ZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworCitXaHkgVGhyZWUgTGljZW5zZXM/Cis9PT09PT09PT09PT09PT09PT09CisKK1RoZSB6bGliIExpY2Vuc2UgY291bGQgaGF2ZSBiZWVuIHVzZWQgaW5zdGVhZCBvZiB0aGUgTW9kaWZpZWQgKDMtY2xhdXNlKSBCU0QKK0xpY2Vuc2UsIGFuZCBzaW5jZSB0aGUgSUpHIExpY2Vuc2UgZWZmZWN0aXZlbHkgc3Vic3VtZXMgdGhlIGRpc3RyaWJ1dGlvbgorY29uZGl0aW9ucyBvZiB0aGUgemxpYiBMaWNlbnNlLCB0aGlzIHdvdWxkIGhhdmUgZWZmZWN0aXZlbHkgcGxhY2VkCitsaWJqcGVnLXR1cmJvIGJpbmFyeSBkaXN0cmlidXRpb25zIHVuZGVyIHRoZSBJSkcgTGljZW5zZS4gIEhvd2V2ZXIsIHRoZSBJSkcKK0xpY2Vuc2Ugc3BlY2lmaWNhbGx5IHJlZmVycyB0byB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCBhbmQgZG9lcyBub3QgZXh0ZW5kCithdHRyaWJ1dGlvbiBhbmQgZW5kb3JzZW1lbnQgcHJvdGVjdGlvbnMgdG8gb3RoZXIgZW50aXRpZXMuICBUaHVzLCBpdCB3YXMKK2Rlc2lyYWJsZSB0byBjaG9vc2UgYSBsaWNlbnNlIHRoYXQgZ3JhbnRlZCB1cyB0aGUgc2FtZSBwcm90ZWN0aW9ucyBmb3IgbmV3IGNvZGUKK3RoYXQgd2VyZSBncmFudGVkIHRvIHRoZSBJSkcgZm9yIGNvZGUgZGVyaXZlZCBmcm9tIHRoZWlyIHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vUkVBRE1FLmlqZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL1JFQURNRS5pamcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlYjdkYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL1JFQURNRS5pamcKQEAgLTAsMCArMSwyNzcgQEAKK2xpYmpwZWctdHVyYm8gbm90ZTogIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0Cit0byBpbmNsdWRlIG9ubHkgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gbGlianBlZy10dXJibywgdG8gd29yZHNtaXRoIGNlcnRhaW4KK3NlY3Rpb25zLCBhbmQgdG8gcmVtb3ZlIGltcG9saXRpYyBsYW5ndWFnZSB0aGF0IGV4aXN0ZWQgaW4gdGhlIGxpYmpwZWcgdjgKK1JFQURNRS4gIEl0IGlzIGluY2x1ZGVkIG9ubHkgZm9yIHJlZmVyZW5jZS4gIFBsZWFzZSBzZWUgUkVBRE1FLm1kIGZvcgoraW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gbGlianBlZy10dXJiby4KKworCitUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpc3RyaWJ1dGlvbiBjb250YWlucyBhIHJlbGVhc2Ugb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBmcmVlIEpQRUcKK3NvZnR3YXJlLiAgWW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCB0byB1c2UgaXQgZm9yIGFueQorcHVycG9zZSwgc3ViamVjdCB0byB0aGUgY29uZGl0aW9ucyB1bmRlciBMRUdBTCBJU1NVRVMsIGJlbG93LgorCitUaGlzIHNvZnR3YXJlIGlzIHRoZSB3b3JrIG9mIFRvbSBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLCBQaGlsaXAgR2xhZHN0b25lLAorQmlsbCBBbGxvbWJlcnQsIEppbSBCb3VjaGVyLCBMZWUgQ3JvY2tlciwgQm9iIEZyaWVzZW5oYWhuLCBCZW4gSmFja3NvbiwKK0p1bGlhbiBNaW5ndWlsbG9uLCBMdWlzIE9ydGl6LCBHZW9yZ2UgUGhpbGxpcHMsIERhdmlkZSBSb3NzaSwgR2UnIFdlaWplcnMsCithbmQgb3RoZXIgbWVtYmVycyBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cC4KKworSUpHIGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggdGhlIElTTy9JRUMgSlRDMS9TQzI5L1dHMSBzdGFuZGFyZHMgY29tbWl0dGVlCisoYWxzbyBrbm93biBhcyBKUEVHLCB0b2dldGhlciB3aXRoIElUVS1UIFNHMTYpLgorCisKK0RPQ1VNRU5UQVRJT04gUk9BRE1BUAorPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCitPVkVSVklFVyAgICAgICAgICAgIEdlbmVyYWwgZGVzY3JpcHRpb24gb2YgSlBFRyBhbmQgdGhlIElKRyBzb2Z0d2FyZS4KK0xFR0FMIElTU1VFUyAgICAgICAgQ29weXJpZ2h0LCBsYWNrIG9mIHdhcnJhbnR5LCB0ZXJtcyBvZiBkaXN0cmlidXRpb24uCitSRUZFUkVOQ0VTICAgICAgICAgIFdoZXJlIHRvIGxlYXJuIG1vcmUgYWJvdXQgSlBFRy4KK0FSQ0hJVkUgTE9DQVRJT05TICAgV2hlcmUgdG8gZmluZCBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlLgorRklMRSBGT1JNQVQgV0FSUyAgICBTb2Z0d2FyZSAqbm90KiB0byBnZXQuCitUTyBETyAgICAgICAgICAgICAgIFBsYW5zIGZvciBmdXR1cmUgSUpHIHJlbGVhc2VzLgorCitPdGhlciBkb2N1bWVudGF0aW9uIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gYXJlOgorCitVc2VyIGRvY3VtZW50YXRpb246CisgIHVzYWdlLnR4dCAgICAgICAgIFVzYWdlIGluc3RydWN0aW9ucyBmb3IgY2pwZWcsIGRqcGVnLCBqcGVndHJhbiwKKyAgICAgICAgICAgICAgICAgICAgcmRqcGdjb20sIGFuZCB3cmpwZ2NvbS4KKyAgKi4xICAgICAgICAgICAgICAgVW5peC1zdHlsZSBtYW4gcGFnZXMgZm9yIHByb2dyYW1zIChzYW1lIGluZm8gYXMgdXNhZ2UudHh0KS4KKyAgd2l6YXJkLnR4dCAgICAgICAgQWR2YW5jZWQgdXNhZ2UgaW5zdHJ1Y3Rpb25zIGZvciBKUEVHIHdpemFyZHMgb25seS4KKyAgY2hhbmdlLmxvZyAgICAgICAgVmVyc2lvbi10by12ZXJzaW9uIGNoYW5nZSBoaWdobGlnaHRzLgorUHJvZ3JhbW1lciBhbmQgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbjoKKyAgbGlianBlZy50eHQgICAgICAgSG93IHRvIHVzZSB0aGUgSlBFRyBsaWJyYXJ5IGluIHlvdXIgb3duIHByb2dyYW1zLgorICBleGFtcGxlLnR4dCAgICAgICBTYW1wbGUgY29kZSBmb3IgY2FsbGluZyB0aGUgSlBFRyBsaWJyYXJ5LgorICBzdHJ1Y3R1cmUudHh0ICAgICBPdmVydmlldyBvZiB0aGUgSlBFRyBsaWJyYXJ5J3MgaW50ZXJuYWwgc3RydWN0dXJlLgorICBjb2RlcnVsZXMudHh0ICAgICBDb2Rpbmcgc3R5bGUgcnVsZXMgLS0tIHBsZWFzZSByZWFkIGlmIHlvdSBjb250cmlidXRlIGNvZGUuCisKK1BsZWFzZSByZWFkIGF0IGxlYXN0IHVzYWdlLnR4dC4gIFNvbWUgaW5mb3JtYXRpb24gY2FuIGFsc28gYmUgZm91bmQgaW4gdGhlIEpQRUcKK0ZBUSAoRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMpIGFydGljbGUuICBTZWUgQVJDSElWRSBMT0NBVElPTlMgYmVsb3cgdG8gZmluZAorb3V0IHdoZXJlIHRvIG9idGFpbiB0aGUgRkFRIGFydGljbGUuCisKK0lmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBKUEVHIGNvZGUgd29ya3MsIHdlIHN1Z2dlc3QgcmVhZGluZyBvbmUgb3IKK21vcmUgb2YgdGhlIFJFRkVSRU5DRVMsIHRoZW4gbG9va2luZyBhdCB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyAoaW4gcm91Z2hseQordGhlIG9yZGVyIGxpc3RlZCkgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlLgorCisKK09WRVJWSUVXCis9PT09PT09PQorCitUaGlzIHBhY2thZ2UgY29udGFpbnMgQyBzb2Z0d2FyZSB0byBpbXBsZW1lbnQgSlBFRyBpbWFnZSBlbmNvZGluZywgZGVjb2RpbmcsCithbmQgdHJhbnNjb2RpbmcuICBKUEVHIChwcm9ub3VuY2VkICJqYXktcGVnIikgaXMgYSBzdGFuZGFyZGl6ZWQgY29tcHJlc3Npb24KK21ldGhvZCBmb3IgZnVsbC1jb2xvciBhbmQgZ3JheXNjYWxlIGltYWdlcy4gIEpQRUcncyBzdHJvbmcgc3VpdCBpcyBjb21wcmVzc2luZworcGhvdG9ncmFwaGljIGltYWdlcyBvciBvdGhlciB0eXBlcyBvZiBpbWFnZXMgdGhhdCBoYXZlIHNtb290aCBjb2xvciBhbmQKK2JyaWdodG5lc3MgdHJhbnNpdGlvbnMgYmV0d2VlbiBuZWlnaGJvcmluZyBwaXhlbHMuICBJbWFnZXMgd2l0aCBzaGFycCBsaW5lcyBvcgorb3RoZXIgYWJydXB0IGZlYXR1cmVzIG1heSBub3QgY29tcHJlc3Mgd2VsbCB3aXRoIEpQRUcsIGFuZCBhIGhpZ2hlciBKUEVHCitxdWFsaXR5IG1heSBoYXZlIHRvIGJlIHVzZWQgdG8gYXZvaWQgdmlzaWJsZSBjb21wcmVzc2lvbiBhcnRpZmFjdHMgd2l0aCBzdWNoCitpbWFnZXMuCisKK0pQRUcgaXMgbG9zc3ksIG1lYW5pbmcgdGhhdCB0aGUgb3V0cHV0IHBpeGVscyBhcmUgbm90IG5lY2Vzc2FyaWx5IGlkZW50aWNhbCB0bwordGhlIGlucHV0IHBpeGVscy4gIEhvd2V2ZXIsIG9uIHBob3RvZ3JhcGhpYyBjb250ZW50IGFuZCBvdGhlciAic21vb3RoIiBpbWFnZXMsCit2ZXJ5IGdvb2QgY29tcHJlc3Npb24gcmF0aW9zIGNhbiBiZSBvYnRhaW5lZCB3aXRoIG5vIHZpc2libGUgY29tcHJlc3Npb24KK2FydGlmYWN0cywgYW5kIGV4dHJlbWVseSBoaWdoIGNvbXByZXNzaW9uIHJhdGlvcyBhcmUgcG9zc2libGUgaWYgeW91IGFyZQord2lsbGluZyB0byBzYWNyaWZpY2UgaW1hZ2UgcXVhbGl0eSAoYnkgcmVkdWNpbmcgdGhlICJxdWFsaXR5IiBzZXR0aW5nIGluIHRoZQorY29tcHJlc3Nvci4pCisKK1RoaXMgc29mdHdhcmUgaW1wbGVtZW50cyBKUEVHIGJhc2VsaW5lLCBleHRlbmRlZC1zZXF1ZW50aWFsLCBhbmQgcHJvZ3Jlc3NpdmUKK2NvbXByZXNzaW9uIHByb2Nlc3Nlcy4gIFByb3Zpc2lvbiBpcyBtYWRlIGZvciBzdXBwb3J0aW5nIGFsbCB2YXJpYW50cyBvZiB0aGVzZQorcHJvY2Vzc2VzLCBhbHRob3VnaCBzb21lIHVuY29tbW9uIHBhcmFtZXRlciBzZXR0aW5ncyBhcmVuJ3QgaW1wbGVtZW50ZWQgeWV0LgorV2UgaGF2ZSBtYWRlIG5vIHByb3Zpc2lvbiBmb3Igc3VwcG9ydGluZyB0aGUgaGllcmFyY2hpY2FsIG9yIGxvc3NsZXNzCitwcm9jZXNzZXMgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQuCisKK1dlIHByb3ZpZGUgYSBzZXQgb2YgbGlicmFyeSByb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBKUEVHIGltYWdlIGZpbGVzLAorcGx1cyB0d28gc2FtcGxlIGFwcGxpY2F0aW9ucyAiY2pwZWciIGFuZCAiZGpwZWciLCB3aGljaCB1c2UgdGhlIGxpYnJhcnkgdG8KK3BlcmZvcm0gY29udmVyc2lvbiBiZXR3ZWVuIEpQRUcgYW5kIHNvbWUgb3RoZXIgcG9wdWxhciBpbWFnZSBmaWxlIGZvcm1hdHMuCitUaGUgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBiZSByZXVzZWQgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorCitJbiBvcmRlciB0byBzdXBwb3J0IGZpbGUgY29udmVyc2lvbiBhbmQgdmlld2luZyBzb2Z0d2FyZSwgd2UgaGF2ZSBpbmNsdWRlZAorY29uc2lkZXJhYmxlIGZ1bmN0aW9uYWxpdHkgYmV5b25kIHRoZSBiYXJlIEpQRUcgY29kaW5nL2RlY29kaW5nIGNhcGFiaWxpdHk7Citmb3IgZXhhbXBsZSwgdGhlIGNvbG9yIHF1YW50aXphdGlvbiBtb2R1bGVzIGFyZSBub3Qgc3RyaWN0bHkgcGFydCBvZiBKUEVHCitkZWNvZGluZywgYnV0IHRoZXkgYXJlIGVzc2VudGlhbCBmb3Igb3V0cHV0IHRvIGNvbG9ybWFwcGVkIGZpbGUgZm9ybWF0cyBvcgorY29sb3JtYXBwZWQgZGlzcGxheXMuICBUaGVzZSBleHRyYSBmdW5jdGlvbnMgY2FuIGJlIGNvbXBpbGVkIG91dCBvZiB0aGUKK2xpYnJhcnkgaWYgbm90IHJlcXVpcmVkIGZvciBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uCisKK1dlIGhhdmUgYWxzbyBpbmNsdWRlZCAianBlZ3RyYW4iLCBhIHV0aWxpdHkgZm9yIGxvc3NsZXNzIHRyYW5zY29kaW5nIGJldHdlZW4KK2RpZmZlcmVudCBKUEVHIHByb2Nlc3NlcywgYW5kICJyZGpwZ2NvbSIgYW5kICJ3cmpwZ2NvbSIsIHR3byBzaW1wbGUKK2FwcGxpY2F0aW9ucyBmb3IgaW5zZXJ0aW5nIGFuZCBleHRyYWN0aW5nIHRleHR1YWwgY29tbWVudHMgaW4gSkZJRiBmaWxlcy4KKworVGhlIGVtcGhhc2lzIGluIGRlc2lnbmluZyB0aGlzIHNvZnR3YXJlIGhhcyBiZWVuIG9uIGFjaGlldmluZyBwb3J0YWJpbGl0eSBhbmQKK2ZsZXhpYmlsaXR5LCB3aGlsZSBhbHNvIG1ha2luZyBpdCBmYXN0IGVub3VnaCB0byBiZSB1c2VmdWwuICBJbiBwYXJ0aWN1bGFyLAordGhlIHNvZnR3YXJlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSByZWFkIGFzIGEgdHV0b3JpYWwgb24gSlBFRy4gIChTZWUgdGhlCitSRUZFUkVOQ0VTIHNlY3Rpb24gZm9yIGludHJvZHVjdG9yeSBtYXRlcmlhbC4pICBSYXRoZXIsIGl0IGlzIGludGVuZGVkIHRvCitiZSByZWxpYWJsZSwgcG9ydGFibGUsIGluZHVzdHJpYWwtc3RyZW5ndGggY29kZS4gIFdlIGRvIG5vdCBjbGFpbSB0byBoYXZlCithY2hpZXZlZCB0aGF0IGdvYWwgaW4gZXZlcnkgYXNwZWN0IG9mIHRoZSBzb2Z0d2FyZSwgYnV0IHdlIHN0cml2ZSBmb3IgaXQuCisKK1dlIHdlbGNvbWUgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIGEgY29tcG9uZW50IG9mIGNvbW1lcmNpYWwgcHJvZHVjdHMuCitObyByb3lhbHR5IGlzIHJlcXVpcmVkLCBidXQgd2UgZG8gYXNrIGZvciBhbiBhY2tub3dsZWRnZW1lbnQgaW4gcHJvZHVjdAorZG9jdW1lbnRhdGlvbiwgYXMgZGVzY3JpYmVkIHVuZGVyIExFR0FMIElTU1VFUy4KKworCitMRUdBTCBJU1NVRVMKKz09PT09PT09PT09PQorCitJbiBwbGFpbiBFbmdsaXNoOgorCisxLiBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gIChCdXQgaWYgeW91IGZpbmQgYW55IGJ1Z3MsCisgICBwbGVhc2UgbGV0IHVzIGtub3chKQorMi4gWW91IGNhbiB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91IHdhbnQuICBZb3UgZG9uJ3QgaGF2ZSB0byBwYXkgdXMuCiszLiBZb3UgbWF5IG5vdCBwcmV0ZW5kIHRoYXQgeW91IHdyb3RlIHRoaXMgc29mdHdhcmUuICBJZiB5b3UgdXNlIGl0IGluIGEKKyAgIHByb2dyYW0sIHlvdSBtdXN0IGFja25vd2xlZGdlIHNvbWV3aGVyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24gdGhhdAorICAgeW91J3ZlIHVzZWQgdGhlIElKRyBjb2RlLgorCitJbiBsZWdhbGVzZToKKworVGhlIGF1dGhvcnMgbWFrZSBOTyBXQVJSQU5UWSBvciByZXByZXNlbnRhdGlvbiwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwKK3dpdGggcmVzcGVjdCB0byB0aGlzIHNvZnR3YXJlLCBpdHMgcXVhbGl0eSwgYWNjdXJhY3ksIG1lcmNoYW50YWJpbGl0eSwgb3IKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLCBhbmQgeW91LAoraXRzIHVzZXIsIGFzc3VtZSB0aGUgZW50aXJlIHJpc2sgYXMgdG8gaXRzIHF1YWxpdHkgYW5kIGFjY3VyYWN5LgorCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAoQykgMTk5MS0yMDE2LCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQgZXhjZXB0IGFzIHNwZWNpZmllZCBiZWxvdy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIHN1YmplY3QgdG8gdGhlc2UKK2NvbmRpdGlvbnM6CisoMSkgSWYgYW55IHBhcnQgb2YgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkLCB0aGVuIHRoaXMKK1JFQURNRSBmaWxlIG11c3QgYmUgaW5jbHVkZWQsIHdpdGggdGhpcyBjb3B5cmlnaHQgYW5kIG5vLXdhcnJhbnR5IG5vdGljZQordW5hbHRlcmVkOyBhbmQgYW55IGFkZGl0aW9ucywgZGVsZXRpb25zLCBvciBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcworbXVzdCBiZSBjbGVhcmx5IGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4KKygyKSBJZiBvbmx5IGV4ZWN1dGFibGUgY29kZSBpcyBkaXN0cmlidXRlZCwgdGhlbiB0aGUgYWNjb21wYW55aW5nCitkb2N1bWVudGF0aW9uIG11c3Qgc3RhdGUgdGhhdCAidGhpcyBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHRoZSB3b3JrIG9mCit0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCIuCisoMykgUGVybWlzc2lvbiBmb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSB1c2VyIGFjY2VwdHMKK2Z1bGwgcmVzcG9uc2liaWxpdHkgZm9yIGFueSB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXM7IHRoZSBhdXRob3JzIGFjY2VwdAorTk8gTElBQklMSVRZIGZvciBkYW1hZ2VzIG9mIGFueSBraW5kLgorCitUaGVzZSBjb25kaXRpb25zIGFwcGx5IHRvIGFueSBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhlIElKRyBjb2RlLAorbm90IGp1c3QgdG8gdGhlIHVubW9kaWZpZWQgbGlicmFyeS4gIElmIHlvdSB1c2Ugb3VyIHdvcmssIHlvdSBvdWdodCB0bworYWNrbm93bGVkZ2UgdXMuCisKK1Blcm1pc3Npb24gaXMgTk9UIGdyYW50ZWQgZm9yIHRoZSB1c2Ugb2YgYW55IElKRyBhdXRob3IncyBuYW1lIG9yIGNvbXBhbnkgbmFtZQoraW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHJlbGF0aW5nIHRvIHRoaXMgc29mdHdhcmUgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCitpdC4gIFRoaXMgc29mdHdhcmUgbWF5IGJlIHJlZmVycmVkIHRvIG9ubHkgYXMgInRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MKK3NvZnR3YXJlIi4KKworV2Ugc3BlY2lmaWNhbGx5IHBlcm1pdCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0aGUgYmFzaXMgb2YKK2NvbW1lcmNpYWwgcHJvZHVjdHMsIHByb3ZpZGVkIHRoYXQgYWxsIHdhcnJhbnR5IG9yIGxpYWJpbGl0eSBjbGFpbXMgYXJlCithc3N1bWVkIGJ5IHRoZSBwcm9kdWN0IHZlbmRvci4KKworCitUaGUgSUpHIGRpc3RyaWJ1dGlvbiBmb3JtZXJseSBpbmNsdWRlZCBjb2RlIHRvIHJlYWQgYW5kIHdyaXRlIEdJRiBmaWxlcy4KK1RvIGF2b2lkIGVudGFuZ2xlbWVudCB3aXRoIHRoZSBVbmlzeXMgTFpXIHBhdGVudCAobm93IGV4cGlyZWQpLCBHSUYgcmVhZGluZworc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIGFsdG9nZXRoZXIsIGFuZCB0aGUgR0lGIHdyaXRlciBoYXMgYmVlbiBzaW1wbGlmaWVkCit0byBwcm9kdWNlICJ1bmNvbXByZXNzZWQgR0lGcyIuICBUaGlzIHRlY2huaXF1ZSBkb2VzIG5vdCB1c2UgdGhlIExaVworYWxnb3JpdGhtOyB0aGUgcmVzdWx0aW5nIEdJRiBmaWxlcyBhcmUgbGFyZ2VyIHRoYW4gdXN1YWwsIGJ1dCBhcmUgcmVhZGFibGUKK2J5IGFsbCBzdGFuZGFyZCBHSUYgZGVjb2RlcnMuCisKK1dlIGFyZSByZXF1aXJlZCB0byBzdGF0ZSB0aGF0CisgICAgIlRoZSBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQoYykgaXMgdGhlIENvcHlyaWdodCBwcm9wZXJ0eSBvZgorICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiAgR0lGKHNtKSBpcyBhIFNlcnZpY2UgTWFyayBwcm9wZXJ0eSBvZgorICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiIKKworCitSRUZFUkVOQ0VTCis9PT09PT09PT09CisKK1dlIHJlY29tbWVuZCByZWFkaW5nIG9uZSBvciBtb3JlIG9mIHRoZXNlIHJlZmVyZW5jZXMgYmVmb3JlIHRyeWluZyB0bwordW5kZXJzdGFuZCB0aGUgaW5uYXJkcyBvZiB0aGUgSlBFRyBzb2Z0d2FyZS4KKworVGhlIGJlc3Qgc2hvcnQgdGVjaG5pY2FsIGludHJvZHVjdGlvbiB0byB0aGUgSlBFRyBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMKKyAgICAgICAgV2FsbGFjZSwgR3JlZ29yeSBLLiAgIlRoZSBKUEVHIFN0aWxsIFBpY3R1cmUgQ29tcHJlc3Npb24gU3RhbmRhcmQiLAorICAgICAgICBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLCBBcHJpbCAxOTkxICh2b2wuIDM0IG5vLiA0KSwgcHAuIDMwLTQ0LgorKEFkamFjZW50IGFydGljbGVzIGluIHRoYXQgaXNzdWUgZGlzY3VzcyBNUEVHIG1vdGlvbiBwaWN0dXJlIGNvbXByZXNzaW9uLAorYXBwbGljYXRpb25zIG9mIEpQRUcsIGFuZCByZWxhdGVkIHRvcGljcy4pICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgQ0FDTSBpc3N1ZQoraGFuZHksIGEgUERGIGZpbGUgY29udGFpbmluZyBhIHJldmlzZWQgdmVyc2lvbiBvZiBXYWxsYWNlJ3MgYXJ0aWNsZSBpcworYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuaWpnLm9yZy9maWxlcy9XYWxsYWNlLkpQRUcucGRmLiAgVGhlIGZpbGUgKGFjdHVhbGx5CithIHByZXByaW50IGZvciBhbiBhcnRpY2xlIHRoYXQgYXBwZWFyZWQgaW4gSUVFRSBUcmFucy4gQ29uc3VtZXIgRWxlY3Ryb25pY3MpCitvbWl0cyB0aGUgc2FtcGxlIGltYWdlcyB0aGF0IGFwcGVhcmVkIGluIENBQ00sIGJ1dCBpdCBpbmNsdWRlcyBjb3JyZWN0aW9ucworYW5kIHNvbWUgYWRkZWQgbWF0ZXJpYWwuICBOb3RlOiB0aGUgV2FsbGFjZSBhcnRpY2xlIGlzIGNvcHlyaWdodCBBQ00gYW5kIElFRUUsCithbmQgaXQgbWF5IG5vdCBiZSB1c2VkIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLgorCitBIHNvbWV3aGF0IGxlc3MgdGVjaG5pY2FsLCBtb3JlIGxlaXN1cmVseSBpbnRyb2R1Y3Rpb24gdG8gSlBFRyBjYW4gYmUgZm91bmQgaW4KKyJUaGUgRGF0YSBDb21wcmVzc2lvbiBCb29rIiBieSBNYXJrIE5lbHNvbiBhbmQgSmVhbi1sb3VwIEdhaWxseSwgcHVibGlzaGVkIGJ5CitNJlQgQm9va3MgKE5ldyBZb3JrKSwgMm5kIGVkLiAxOTk2LCBJU0JOIDEtNTU4NTEtNDM0LTEuICBUaGlzIGJvb2sgcHJvdmlkZXMKK2dvb2QgZXhwbGFuYXRpb25zIGFuZCBleGFtcGxlIEMgY29kZSBmb3IgYSBtdWx0aXR1ZGUgb2YgY29tcHJlc3Npb24gbWV0aG9kcworaW5jbHVkaW5nIEpQRUcuICBJdCBpcyBhbiBleGNlbGxlbnQgc291cmNlIGlmIHlvdSBhcmUgY29tZm9ydGFibGUgcmVhZGluZyBDCitjb2RlIGJ1dCBkb24ndCBrbm93IG11Y2ggYWJvdXQgZGF0YSBjb21wcmVzc2lvbiBpbiBnZW5lcmFsLiAgVGhlIGJvb2sncyBKUEVHCitzYW1wbGUgY29kZSBpcyBmYXIgZnJvbSBpbmR1c3RyaWFsLXN0cmVuZ3RoLCBidXQgd2hlbiB5b3UgYXJlIHJlYWR5IHRvIGxvb2sKK2F0IGEgZnVsbCBpbXBsZW1lbnRhdGlvbiwgeW91J3ZlIGdvdCBvbmUgaGVyZS4uLgorCitUaGUgYmVzdCBjdXJyZW50bHkgYXZhaWxhYmxlIGRlc2NyaXB0aW9uIG9mIEpQRUcgaXMgdGhlIHRleHRib29rICJKUEVHIFN0aWxsCitJbWFnZSBEYXRhIENvbXByZXNzaW9uIFN0YW5kYXJkIiBieSBXaWxsaWFtIEIuIFBlbm5lYmFrZXIgYW5kIEpvYW4gTC4KK01pdGNoZWxsLCBwdWJsaXNoZWQgYnkgVmFuIE5vc3RyYW5kIFJlaW5ob2xkLCAxOTkzLCBJU0JOIDAtNDQyLTAxMjcyLTEuCitQcmljZSBVUyQ1OS45NSwgNjM4IHBwLiAgVGhlIGJvb2sgaW5jbHVkZXMgdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhlIElTTyBKUEVHCitzdGFuZGFyZHMgKERJUyAxMDkxOC0xIGFuZCBkcmFmdCBESVMgMTA5MTgtMikuCisKK1RoZSBvcmlnaW5hbCBKUEVHIHN0YW5kYXJkIGlzIGRpdmlkZWQgaW50byB0d28gcGFydHMsIFBhcnQgMSBiZWluZyB0aGUgYWN0dWFsCitzcGVjaWZpY2F0aW9uLCB3aGlsZSBQYXJ0IDIgY292ZXJzIGNvbXBsaWFuY2UgdGVzdGluZyBtZXRob2RzLiAgUGFydCAxIGlzCit0aXRsZWQgIkRpZ2l0YWwgQ29tcHJlc3Npb24gYW5kIENvZGluZyBvZiBDb250aW51b3VzLXRvbmUgU3RpbGwgSW1hZ2VzLAorUGFydCAxOiBSZXF1aXJlbWVudHMgYW5kIGd1aWRlbGluZXMiIGFuZCBoYXMgZG9jdW1lbnQgbnVtYmVycyBJU08vSUVDIElTCisxMDkxOC0xLCBJVFUtVCBULjgxLiAgUGFydCAyIGlzIHRpdGxlZCAiRGlnaXRhbCBDb21wcmVzc2lvbiBhbmQgQ29kaW5nIG9mCitDb250aW51b3VzLXRvbmUgU3RpbGwgSW1hZ2VzLCBQYXJ0IDI6IENvbXBsaWFuY2UgdGVzdGluZyIgYW5kIGhhcyBkb2N1bWVudAorbnVtYmVycyBJU08vSUVDIElTIDEwOTE4LTIsIElUVS1UIFQuODMuCisKK1RoZSBKUEVHIHN0YW5kYXJkIGRvZXMgbm90IHNwZWNpZnkgYWxsIGRldGFpbHMgb2YgYW4gaW50ZXJjaGFuZ2VhYmxlIGZpbGUKK2Zvcm1hdC4gIEZvciB0aGUgb21pdHRlZCBkZXRhaWxzLCB3ZSBmb2xsb3cgdGhlICJKRklGIiBjb252ZW50aW9ucywgcmV2aXNpb24KKzEuMDIuICBKRklGIHZlcnNpb24gMSBoYXMgYmVlbiBhZG9wdGVkIGFzIElTTy9JRUMgMTA5MTgtNSAoMDUvMjAxMykgYW5kCitSZWNvbW1lbmRhdGlvbiBJVFUtVCBULjg3MSAoMDUvMjAxMSk6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLSBEaWdpdGFsCitjb21wcmVzc2lvbiBhbmQgY29kaW5nIG9mIGNvbnRpbnVvdXMtdG9uZSBzdGlsbCBpbWFnZXM6IEpQRUcgRmlsZSBJbnRlcmNoYW5nZQorRm9ybWF0IChKRklGKS4gIEl0IGlzIGF2YWlsYWJsZSBhcyBhIGZyZWUgZG93bmxvYWQgaW4gUERGIGZpbGUgZm9ybWF0IGZyb20KK2h0dHBzOi8vd3d3Lmlzby5vcmcvc3RhbmRhcmQvNTQ5ODkuaHRtbCBhbmQgaHR0cDovL3d3dy5pdHUuaW50L3JlYy9ULVJFQy1ULjg3MS4KK0EgUERGIGZpbGUgb2YgdGhlIG9sZGVyIEpGSUYgMS4wMiBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvSlBFRy9qZmlmMy5wZGYuCisKK1RoZSBUSUZGIDYuMCBmaWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBGVFAgZnJvbQorZnRwOi8vZnRwLnNnaS5jb20vZ3JhcGhpY3MvdGlmZi9USUZGNi5wcy5nei4gIFRoZSBKUEVHIGluY29ycG9yYXRpb24gc2NoZW1lCitmb3VuZCBpbiB0aGUgVElGRiA2LjAgc3BlYyBvZiAzLUp1bmUtOTIgaGFzIGEgbnVtYmVyIG9mIHNlcmlvdXMgcHJvYmxlbXMuCitJSkcgZG9lcyBub3QgcmVjb21tZW5kIHVzZSBvZiB0aGUgVElGRiA2LjAgZGVzaWduIChUSUZGIENvbXByZXNzaW9uIHRhZyA2KS4KK0luc3RlYWQsIHdlIHJlY29tbWVuZCB0aGUgSlBFRyBkZXNpZ24gcHJvcG9zZWQgYnkgVElGRiBUZWNobmljYWwgTm90ZSAjMgorKENvbXByZXNzaW9uIHRhZyA3KS4gIENvcGllcyBvZiB0aGlzIE5vdGUgY2FuIGJlIG9idGFpbmVkIGZyb20KK2h0dHA6Ly93d3cuaWpnLm9yZy9maWxlcy8uICBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBuZXh0IHJldmlzaW9uCitvZiB0aGUgVElGRiBzcGVjIHdpbGwgcmVwbGFjZSB0aGUgNi4wIEpQRUcgZGVzaWduIHdpdGggdGhlIE5vdGUncyBkZXNpZ24uCitBbHRob3VnaCBJSkcncyBvd24gY29kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRkYvSlBFRywgdGhlIGZyZWUgbGlidGlmZiBsaWJyYXJ5Cit1c2VzIG91ciBsaWJyYXJ5IHRvIGltcGxlbWVudCBUSUZGL0pQRUcgcGVyIHRoZSBOb3RlLgorCisKK0FSQ0hJVkUgTE9DQVRJT05TCis9PT09PT09PT09PT09PT09PQorCitUaGUgIm9mZmljaWFsIiBhcmNoaXZlIHNpdGUgZm9yIHRoaXMgc29mdHdhcmUgaXMgd3d3LmlqZy5vcmcuCitUaGUgbW9zdCByZWNlbnQgcmVsZWFzZWQgdmVyc2lvbiBjYW4gYWx3YXlzIGJlIGZvdW5kIHRoZXJlIGluCitkaXJlY3RvcnkgImZpbGVzIi4KKworVGhlIEpQRUcgRkFRIChGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucykgYXJ0aWNsZSBpcyBhIHNvdXJjZSBvZiBzb21lCitnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IEpQRUcuCitJdCBpcyBhdmFpbGFibGUgb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0IGh0dHA6Ly93d3cuZmFxcy5vcmcvZmFxcy9qcGVnLWZhcS8KK2FuZCBvdGhlciBuZXdzLmFuc3dlcnMgYXJjaGl2ZSBzaXRlcywgaW5jbHVkaW5nIHRoZSBvZmZpY2lhbCBuZXdzLmFuc3dlcnMKK2FyY2hpdmUgYXQgcnRmbS5taXQuZWR1OiBmdHA6Ly9ydGZtLm1pdC5lZHUvcHViL3VzZW5ldC9uZXdzLmFuc3dlcnMvanBlZy1mYXEvLgorSWYgeW91IGRvbid0IGhhdmUgV2ViIG9yIEZUUCBhY2Nlc3MsIHNlbmQgZS1tYWlsIHRvIG1haWwtc2VydmVyQHJ0Zm0ubWl0LmVkdQord2l0aCBib2R5CisgICAgICAgIHNlbmQgdXNlbmV0L25ld3MuYW5zd2Vycy9qcGVnLWZhcS9wYXJ0MQorICAgICAgICBzZW5kIHVzZW5ldC9uZXdzLmFuc3dlcnMvanBlZy1mYXEvcGFydDIKKworCitGSUxFIEZPUk1BVCBDT01QQVRJQklMSVRZCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc29mdHdhcmUgaW1wbGVtZW50cyBJVFUgVC44MSB8IElTTy9JRUMgMTA5MTggd2l0aCBzb21lIGV4dGVuc2lvbnMgZnJvbQorSVRVIFQuODcxIHwgSVNPL0lFQyAxMDkxOC01IChKUEVHIEZpbGUgSW50ZXJjaGFuZ2UgRm9ybWF0LS0gc2VlIFJFRkVSRU5DRVMpLgorSW5mb3JtYWxseSwgdGhlIHRlcm0gIkpQRUcgaW1hZ2UiIG9yICJKUEVHIGZpbGUiIG1vc3Qgb2Z0ZW4gcmVmZXJzIHRvIEpGSUYgb3IKK2Egc3Vic2V0IHRoZXJlb2YsIGJ1dCB0aGVyZSBhcmUgb3RoZXIgZm9ybWF0cyBjb250YWluaW5nIHRoZSBuYW1lICJKUEVHIiB0aGF0CithcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIERDVC1iYXNlZCBKUEVHIHN0YW5kYXJkIG9yIHdpdGggSkZJRiAoZm9yIGluc3RhbmNlLAorSlBFRyAyMDAwIGFuZCBKUEVHIFhSKS4gIFRoaXMgc29mdHdhcmUgdGhlcmVmb3JlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UKK2Zvcm1hdHMuICBJbmRlZWQsIG9uZSBvZiB0aGUgb3JpZ2luYWwgcmVhc29ucyBmb3IgZGV2ZWxvcGluZyB0aGlzIGZyZWUgc29mdHdhcmUKK3dhcyB0byBoZWxwIGZvcmNlIGNvbnZlcmdlbmNlIG9uIGNvbW1vbiwgaW50ZXJvcGVyYWJsZSBmb3JtYXQgc3RhbmRhcmRzIGZvcgorSlBFRyBmaWxlcy4KKworSkZJRiBpcyBhIG1pbmltYWwgb3IgImxvdyBlbmQiIHJlcHJlc2VudGF0aW9uLiAgVElGRi9KUEVHIChUSUZGIHJldmlzaW9uIDYuMCBhcworbW9kaWZpZWQgYnkgVElGRiBUZWNobmljYWwgTm90ZSAjMikgY2FuIGJlIHVzZWQgZm9yICJoaWdoIGVuZCIgYXBwbGljYXRpb25zCit0aGF0IG5lZWQgdG8gcmVjb3JkIGEgbG90IG9mIGFkZGl0aW9uYWwgZGF0YSBhYm91dCBhbiBpbWFnZS4KKworCitUTyBETworPT09PT0KKworUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMsIG9mZmVycyBvZiBoZWxwLCBldGMuIHRvIGpwZWctaW5mb0BqcGVnY2x1Yi5vcmcuCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9SRUFETUUubWQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2OTI1OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL1JFQURNRS5tZApAQCAtMCwwICsxLDM0NiBAQAorQmFja2dyb3VuZAorPT09PT09PT09PQorCitsaWJqcGVnLXR1cmJvIGlzIGEgSlBFRyBpbWFnZSBjb2RlYyB0aGF0IHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwgU1NFMiwKK0FWWDIsIE5FT04sIEFsdGlWZWMpIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgorb24geDg2LCB4ODYtNjQsIEFSTSwgYW5kIFBvd2VyUEMgc3lzdGVtcywgYXMgd2VsbCBhcyBwcm9ncmVzc2l2ZSBKUEVHCitjb21wcmVzc2lvbiBvbiB4ODYgYW5kIHg4Ni02NCBzeXN0ZW1zLiAgT24gc3VjaCBzeXN0ZW1zLCBsaWJqcGVnLXR1cmJvIGlzCitnZW5lcmFsbHkgMi02eCBhcyBmYXN0IGFzIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLiAgT24gb3RoZXIgdHlwZXMgb2YKK3N5c3RlbXMsIGxpYmpwZWctdHVyYm8gY2FuIHN0aWxsIG91dHBlcmZvcm0gbGlianBlZyBieSBhIHNpZ25pZmljYW50IGFtb3VudCwgYnkKK3ZpcnR1ZSBvZiBpdHMgaGlnaGx5LW9wdGltaXplZCBIdWZmbWFuIGNvZGluZyByb3V0aW5lcy4gIEluIG1hbnkgY2FzZXMsIHRoZQorcGVyZm9ybWFuY2Ugb2YgbGlianBlZy10dXJibyByaXZhbHMgdGhhdCBvZiBwcm9wcmlldGFyeSBoaWdoLXNwZWVkIEpQRUcgY29kZWNzLgorCitsaWJqcGVnLXR1cmJvIGltcGxlbWVudHMgYm90aCB0aGUgdHJhZGl0aW9uYWwgbGlianBlZyBBUEkgYXMgd2VsbCBhcyB0aGUgbGVzcworcG93ZXJmdWwgYnV0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIFR1cmJvSlBFRyBBUEkuICBsaWJqcGVnLXR1cmJvIGFsc28gZmVhdHVyZXMKK2NvbG9yc3BhY2UgZXh0ZW5zaW9ucyB0aGF0IGFsbG93IGl0IHRvIGNvbXByZXNzIGZyb20vZGVjb21wcmVzcyB0byAzMi1iaXQgYW5kCitiaWctZW5kaWFuIHBpeGVsIGJ1ZmZlcnMgKFJHQlgsIFhCR1IsIGV0Yy4pLCBhcyB3ZWxsIGFzIGEgZnVsbC1mZWF0dXJlZCBKYXZhCitpbnRlcmZhY2UuCisKK2xpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1ELCBhbiBNTVgtYWNjZWxlcmF0ZWQKK2Rlcml2YXRpdmUgb2YgbGlianBlZyB2NmIgZGV2ZWxvcGVkIGJ5IE1peWFzYWthIE1hc2FydS4gIFRoZSBUaWdlclZOQyBhbmQKK1ZpcnR1YWxHTCBwcm9qZWN0cyBtYWRlIG51bWVyb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgY29kZWMgaW4gMjAwOSwgYW5kIGluCitlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbAorb2YgbWFraW5nIGhpZ2gtc3BlZWQgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHRlY2hub2xvZ3kgYXZhaWxhYmxlIHRvIGEKK2Jyb2FkZXIgcmFuZ2Ugb2YgdXNlcnMgYW5kIGRldmVsb3BlcnMuCisKKworTGljZW5zZQorPT09PT09PQorCitsaWJqcGVnLXR1cmJvIGlzIGNvdmVyZWQgYnkgdGhyZWUgY29tcGF0aWJsZSBCU0Qtc3R5bGUgb3BlbiBzb3VyY2UgbGljZW5zZXMuCitSZWZlciB0byBbTElDRU5TRS5tZF0oTElDRU5TRS5tZCkgZm9yIGEgcm9sbC11cCBvZiBsaWNlbnNlIHRlcm1zLgorCisKK0J1aWxkaW5nIGxpYmpwZWctdHVyYm8KKz09PT09PT09PT09PT09PT09PT09PT0KKworUmVmZXIgdG8gW0JVSUxESU5HLm1kXShCVUlMRElORy5tZCkgZm9yIGNvbXBsZXRlIGluc3RydWN0aW9ucy4KKworCitVc2luZyBsaWJqcGVnLXR1cmJvCis9PT09PT09PT09PT09PT09PT09CisKK2xpYmpwZWctdHVyYm8gaW5jbHVkZXMgdHdvIEFQSXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb21wcmVzcyBhbmQgZGVjb21wcmVzcworSlBFRyBpbWFnZXM6CisKKy0gKipUdXJib0pQRUcgQVBJKio8YnI+CisgIFRoaXMgQVBJIHByb3ZpZGVzIGFuIGVhc3ktdG8tdXNlIGludGVyZmFjZSBmb3IgY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcKKyAgSlBFRyBpbWFnZXMgaW4gbWVtb3J5LiAgSXQgYWxzbyBwcm92aWRlcyBzb21lIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBub3QgYmUKKyAgc3RyYWlnaHRmb3J3YXJkIHRvIGFjaGlldmUgdXNpbmcgdGhlIHVuZGVybHlpbmcgbGlianBlZyBBUEksIHN1Y2ggYXMKKyAgZ2VuZXJhdGluZyBwbGFuYXIgWVVWIGltYWdlcyBhbmQgcGVyZm9ybWluZyBtdWx0aXBsZSBzaW11bHRhbmVvdXMgbG9zc2xlc3MKKyAgdHJhbnNmb3JtcyBvbiBhbiBpbWFnZS4gIFRoZSBKYXZhIGludGVyZmFjZSBmb3IgbGlianBlZy10dXJibyBpcyB3cml0dGVuIG9uCisgIHRvcCBvZiB0aGUgVHVyYm9KUEVHIEFQSS4gIFRoZSBUdXJib0pQRUcgQVBJIGlzIHJlY29tbWVuZGVkIGZvciBmaXJzdC10aW1lCisgIHVzZXJzIG9mIGxpYmpwZWctdHVyYm8uICBSZWZlciB0byBbdGpleGFtcGxlLmNdKHRqZXhhbXBsZS5jKSBhbmQKKyAgW1RKRXhhbXBsZS5qYXZhXShqYXZhL1RKRXhhbXBsZS5qYXZhKSBmb3IgZXhhbXBsZXMgb2YgaXRzIHVzYWdlIGFuZCB0bworICA8aHR0cDovL2xpYmpwZWctdHVyYm8ub3JnL0RvY3VtZW50YXRpb24vRG9jdW1lbnRhdGlvbj4gZm9yIEFQSSBkb2N1bWVudGF0aW9uLgorCistICoqbGlianBlZyBBUEkqKjxicj4KKyAgVGhpcyBpcyB0aGUgZGUgZmFjdG8gaW5kdXN0cnktc3RhbmRhcmQgQVBJIGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZworICBKUEVHIGltYWdlcy4gIEl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIHVzZSB0aGFuIHRoZSBUdXJib0pQRUcgQVBJIGJ1dCBhbHNvCisgIG1vcmUgcG93ZXJmdWwuICBUaGUgbGlianBlZyBBUEkgaW1wbGVtZW50YXRpb24gaW4gbGlianBlZy10dXJibyBpcyBib3RoCisgIEFQSS9BQkktY29tcGF0aWJsZSBhbmQgbWF0aGVtYXRpY2FsbHkgY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjZiLiAgSXQgY2FuCisgIGFsc28gb3B0aW9uYWxseSBiZSBjb25maWd1cmVkIHRvIGJlIEFQSS9BQkktY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjcgYW5kIHY4CisgIChzZWUgYmVsb3cuKSAgUmVmZXIgdG8gW2NqcGVnLmNdKGNqcGVnLmMpIGFuZCBbZGpwZWcuY10oZGpwZWcuYykgZm9yIGV4YW1wbGVzCisgIG9mIGl0cyB1c2FnZSBhbmQgdG8gW2xpYmpwZWcudHh0XShsaWJqcGVnLnR4dCkgZm9yIEFQSSBkb2N1bWVudGF0aW9uLgorCitUaGVyZSBpcyBubyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhZHZhbnRhZ2UgdG8gZWl0aGVyIEFQSSB3aGVuIGJvdGggYXJlIHVzZWQKK3RvIHBlcmZvcm0gc2ltaWxhciBvcGVyYXRpb25zLgorCitDb2xvcnNwYWNlIEV4dGVuc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsaWJqcGVnLXR1cmJvIGluY2x1ZGVzIGV4dGVuc2lvbnMgdGhhdCBhbGxvdyBKUEVHIGltYWdlcyB0byBiZSBjb21wcmVzc2VkCitkaXJlY3RseSBmcm9tIChhbmQgZGVjb21wcmVzc2VkIGRpcmVjdGx5IHRvKSBidWZmZXJzIHRoYXQgdXNlIEJHUiwgQkdSWCwKK1JHQlgsIFhCR1IsIGFuZCBYUkdCIHBpeGVsIG9yZGVyaW5nLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB3aXRoIHRlbiBuZXcKK2NvbG9yc3BhY2UgY29uc3RhbnRzOgorCisgICAgSkNTX0VYVF9SR0IgICAvKiByZWQvZ3JlZW4vYmx1ZSAqLworICAgIEpDU19FWFRfUkdCWCAgLyogcmVkL2dyZWVuL2JsdWUveCAqLworICAgIEpDU19FWFRfQkdSICAgLyogYmx1ZS9ncmVlbi9yZWQgKi8KKyAgICBKQ1NfRVhUX0JHUlggIC8qIGJsdWUvZ3JlZW4vcmVkL3ggKi8KKyAgICBKQ1NfRVhUX1hCR1IgIC8qIHgvYmx1ZS9ncmVlbi9yZWQgKi8KKyAgICBKQ1NfRVhUX1hSR0IgIC8qIHgvcmVkL2dyZWVuL2JsdWUgKi8KKyAgICBKQ1NfRVhUX1JHQkEgIC8qIHJlZC9ncmVlbi9ibHVlL2FscGhhICovCisgICAgSkNTX0VYVF9CR1JBICAvKiBibHVlL2dyZWVuL3JlZC9hbHBoYSAqLworICAgIEpDU19FWFRfQUJHUiAgLyogYWxwaGEvYmx1ZS9ncmVlbi9yZWQgKi8KKyAgICBKQ1NfRVhUX0FSR0IgIC8qIGFscGhhL3JlZC9ncmVlbi9ibHVlICovCisKK1NldHRpbmcgYGNpbmZvLmluX2NvbG9yX3NwYWNlYCAoY29tcHJlc3Npb24pIG9yIGBjaW5mby5vdXRfY29sb3Jfc3BhY2VgCisoZGVjb21wcmVzc2lvbikgdG8gb25lIG9mIHRoZXNlIHZhbHVlcyB3aWxsIGNhdXNlIGxpYmpwZWctdHVyYm8gdG8gcmVhZCB0aGUKK3JlZCwgZ3JlZW4sIGFuZCBibHVlIHZhbHVlcyBmcm9tIChvciB3cml0ZSB0aGVtIHRvKSB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24gaW4KK3RoZSBwaXhlbCB3aGVuIGNvbXByZXNzaW5nIGZyb20vZGVjb21wcmVzc2luZyB0byBhbiBSR0IgYnVmZmVyLgorCitZb3VyIGFwcGxpY2F0aW9uIGNhbiBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGVzZSBleHRlbnNpb25zIGF0IGNvbXBpbGUKK3RpbWUgd2l0aDoKKworICAgICNpZmRlZiBKQ1NfRVhURU5TSU9OUworCitBdCBydW4gdGltZSwgYXR0ZW1wdGluZyB0byB1c2UgdGhlc2UgZXh0ZW5zaW9ucyB3aXRoIGEgbGlianBlZyBpbXBsZW1lbnRhdGlvbgordGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gd2lsbCByZXN1bHQgaW4gYSAiQm9ndXMgaW5wdXQgY29sb3JzcGFjZSIgZXJyb3IuCitBcHBsaWNhdGlvbnMgY2FuIHRyYXAgdGhpcyBlcnJvciBpbiBvcmRlciB0byB0ZXN0IHdoZXRoZXIgcnVuLXRpbWUgc3VwcG9ydCBpcworYXZhaWxhYmxlIGZvciB0aGUgY29sb3JzcGFjZSBleHRlbnNpb25zLgorCitXaGVuIHVzaW5nIHRoZSBSR0JYLCBCR1JYLCBYQkdSLCBhbmQgWFJHQiBjb2xvcnNwYWNlcyBkdXJpbmcgZGVjb21wcmVzc2lvbiwgdGhlCitYIGJ5dGUgaXMgdW5kZWZpbmVkLCBhbmQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBiZXN0IHBlcmZvcm1hbmNlLCBsaWJqcGVnLXR1cmJvCitjYW4gc2V0IHRoYXQgYnl0ZSB0byB3aGF0ZXZlciB2YWx1ZSBpdCB3aXNoZXMuICBJZiBhbiBhcHBsaWNhdGlvbiBleHBlY3RzIHRoZSBYCitieXRlIHRvIGJlIHVzZWQgYXMgYW4gYWxwaGEgY2hhbm5lbCwgdGhlbiBpdCBzaG91bGQgc3BlY2lmeSBgSkNTX0VYVF9SR0JBYCwKK2BKQ1NfRVhUX0JHUkFgLCBgSkNTX0VYVF9BQkdSYCwgb3IgYEpDU19FWFRfQVJHQmAuICBXaGVuIHRoZXNlIGNvbG9yc3BhY2UKK2NvbnN0YW50cyBhcmUgdXNlZCwgdGhlIFggYnl0ZSBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGlzIGludGVycHJldGVkCithcyBvcGFxdWUuCisKK1lvdXIgYXBwbGljYXRpb24gY2FuIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBhbHBoYSBjaGFubmVsIGNvbG9yc3BhY2UKK2V4dGVuc2lvbnMgYXQgY29tcGlsZSB0aW1lIHdpdGg6CisKKyAgICAjaWZkZWYgSkNTX0FMUEhBX0VYVEVOU0lPTlMKKworW2pjc3Rlc3QuY10oamNzdGVzdC5jKSwgbG9jYXRlZCBpbiB0aGUgbGlianBlZy10dXJibyBzb3VyY2UgdHJlZSwgZGVtb25zdHJhdGVzCitob3cgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyBhdCBjb21waWxlIHRpbWUgYW5kCitydW4gdGltZS4KKworbGlianBlZyB2NyBhbmQgdjggQVBJL0FCSSBFbXVsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggbGlianBlZyB2NyBhbmQgdjgsIG5ldyBmZWF0dXJlcyB3ZXJlIGFkZGVkIHRoYXQgbmVjZXNzaXRhdGVkIGV4dGVuZGluZyB0aGUKK2NvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHN0cnVjdHVyZXMuICBVbmZvcnR1bmF0ZWx5LCBkdWUgdG8gdGhlIGV4cG9zZWQKK25hdHVyZSBvZiB0aG9zZSBzdHJ1Y3R1cmVzLCBleHRlbmRpbmcgdGhlbSBhbHNvIG5lY2Vzc2l0YXRlZCBicmVha2luZyBiYWNrd2FyZAorQUJJIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyBsaWJqcGVnIHJlbGVhc2VzLiAgVGh1cywgcHJvZ3JhbXMgdGhhdCB3ZXJlCitidWlsdCB0byB1c2UgbGlianBlZyB2NyBvciB2OCBkaWQgbm90IHdvcmsgd2l0aCBsaWJqcGVnLXR1cmJvLCBzaW5jZSBpdCBpcworYmFzZWQgb24gdGhlIGxpYmpwZWcgdjZiIGNvZGUgYmFzZS4gIEFsdGhvdWdoIGxpYmpwZWcgdjcgYW5kIHY4IGFyZSBub3QKK2FzIHdpZGVseSB1c2VkIGFzIHY2YiwgZW5vdWdoIHByb2dyYW1zIChpbmNsdWRpbmcgYSBmZXcgTGludXggZGlzdHJvcykgbWFkZQordGhlIHN3aXRjaCB0aGF0IHRoZXJlIHdhcyBhIGRlbWFuZCB0byBlbXVsYXRlIHRoZSBsaWJqcGVnIHY3IGFuZCB2OCBBQklzCitpbiBsaWJqcGVnLXR1cmJvLiAgSXQgc2hvdWxkIGJlIG5vdGVkLCBob3dldmVyLCB0aGF0IHRoaXMgZmVhdHVyZSB3YXMgYWRkZWQKK3ByaW1hcmlseSBzbyB0aGF0IGFwcGxpY2F0aW9ucyB0aGF0IGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQgdG8gdXNlIGxpYmpwZWcKK3Y3KyBjb3VsZCB0YWtlIGFkdmFudGFnZSBvZiBhY2NlbGVyYXRlZCBiYXNlbGluZSBKUEVHIGVuY29kaW5nL2RlY29kaW5nCit3aXRob3V0IHJlY29tcGlsaW5nLiAgbGlianBlZy10dXJibyBkb2VzIG5vdCBjbGFpbSB0byBzdXBwb3J0IGFsbCBvZiB0aGUKK2xpYmpwZWcgdjcrIGZlYXR1cmVzLCBub3IgdG8gcHJvZHVjZSBpZGVudGljYWwgb3V0cHV0IHRvIGxpYmpwZWcgdjcrIGluIGFsbAorY2FzZXMgKHNlZSBiZWxvdy4pCisKK0J5IHBhc3NpbmcgYW4gYXJndW1lbnQgb2YgYC0td2l0aC1qcGVnN2Agb3IgYC0td2l0aC1qcGVnOGAgdG8gYGNvbmZpZ3VyZWAsIG9yCithbiBhcmd1bWVudCBvZiBgLURXSVRIX0pQRUc3PTFgIG9yIGAtRFdJVEhfSlBFRzg9MWAgdG8gYGNtYWtlYCwgeW91IGNhbiBidWlsZCBhCit2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8gdGhhdCBlbXVsYXRlcyB0aGUgbGlianBlZyB2NyBvciB2OCBBQkksIHNvIHRoYXQKK3Byb2dyYW1zIHRoYXQgYXJlIGJ1aWx0IGFnYWluc3QgbGlianBlZyB2NyBvciB2OCBjYW4gYmUgcnVuIHdpdGggbGlianBlZy10dXJiby4KK1RoZSBmb2xsb3dpbmcgc2VjdGlvbiBkZXNjcmliZXMgd2hpY2ggbGlianBlZyB2NysgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhbmQKK3doaWNoIGFyZW4ndC4KKworIyMjIFN1cHBvcnQgZm9yIGxpYmpwZWcgdjcgYW5kIHY4IEZlYXR1cmVzCisKKyMjIyMgRnVsbHkgc3VwcG9ydGVkCisKKy0gKipsaWJqcGVnOiBJRENUIHNjYWxpbmcgZXh0ZW5zaW9ucyBpbiBkZWNvbXByZXNzb3IqKjxicj4KKyAgbGlianBlZy10dXJibyBzdXBwb3J0cyBJRENUIHNjYWxpbmcgd2l0aCBzY2FsaW5nIGZhY3RvcnMgb2YgMS84LCAxLzQsIDMvOCwKKyAgMS8yLCA1LzgsIDMvNCwgNy84LCA5LzgsIDUvNCwgMTEvOCwgMy8yLCAxMy84LCA3LzQsIDE1LzgsIGFuZCAyLzEgKG9ubHkgMS80CisgIGFuZCAxLzIgYXJlIFNJTUQtYWNjZWxlcmF0ZWQuKQorCistICoqbGlianBlZzogQXJpdGhtZXRpYyBjb2RpbmcqKgorCistICoqbGlianBlZzogSW4tbWVtb3J5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbWFuYWdlcnMqKjxicj4KKyAgU2VlIG5vdGVzIGJlbG93LgorCistICoqY2pwZWc6IFNlcGFyYXRlIHF1YWxpdHkgc2V0dGluZ3MgZm9yIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UqKjxicj4KKyAgTm90ZSB0aGF0IHRoZSBsaWJwamVnIHY3KyBBUEkgd2FzIGV4dGVuZGVkIHRvIGFjY29tbW9kYXRlIHRoaXMgZmVhdHVyZSBvbmx5CisgIGZvciBjb252ZW5pZW5jZSBwdXJwb3Nlcy4gIEl0IGhhcyBhbHdheXMgYmVlbiBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcworICBmZWF0dXJlIHdpdGggbGlianBlZyB2NmIgKHNlZSByZHN3aXRjaC5jIGZvciBhbiBleGFtcGxlLikKKworLSAqKmNqcGVnOiAzMi1iaXQgQk1QIHN1cHBvcnQqKgorCistICoqY2pwZWc6IGAtcmdiYCBvcHRpb24qKgorCistICoqanBlZ3RyYW46IExvc3NsZXNzIGNyb3BwaW5nKioKKworLSAqKmpwZWd0cmFuOiBgLXBlcmZlY3RgIG9wdGlvbioqCisKKy0gKipqcGVndHJhbjogRm9yY2luZyB3aWR0aC9oZWlnaHQgd2hlbiBwZXJmb3JtaW5nIGxvc3NsZXNzIGNyb3AqKgorCistICoqcmRqcGdjb206IGAtcmF3YCBvcHRpb24qKgorCistICoqcmRqcGdjb206IExvY2FsZSBhd2FyZW5lc3MqKgorCisKKyMjIyMgTm90IHN1cHBvcnRlZAorCitOT1RFOiAgQXMgb2YgdGhpcyB3cml0aW5nLCBleHRlbnNpdmUgcmVzZWFyY2ggaGFzIGJlZW4gY29uZHVjdGVkIGludG8gdGhlCit1c2VmdWxuZXNzIG9mIERDVCBzY2FsaW5nIGFzIGEgbWVhbnMgb2YgZGF0YSByZWR1Y3Rpb24gYW5kIFNtYXJ0U2NhbGUgYXMgYQorbWVhbnMgb2YgcXVhbGl0eSBpbXByb3ZlbWVudC4gIFRoZSByZWFkZXIgaXMgaW52aXRlZCB0byBwZXJ1c2UgdGhlIHJlc2VhcmNoIGF0Cis8aHR0cDovL3d3dy5saWJqcGVnLXR1cmJvLm9yZy9BYm91dC9TbWFydFNjYWxlPiBhbmQgZHJhdyBoaXMvaGVyIG93biBjb25jbHVzaW9ucywKK2J1dCBpdCBpcyB0aGUgZ2VuZXJhbCBiZWxpZWYgb2Ygb3VyIHByb2plY3QgdGhhdCB0aGVzZSBmZWF0dXJlcyBoYXZlIG5vdAorZGVtb25zdHJhdGVkIHN1ZmZpY2llbnQgdXNlZnVsbmVzcyB0byBqdXN0aWZ5IGluY2x1c2lvbiBpbiBsaWJqcGVnLXR1cmJvLgorCistICoqbGlianBlZzogRENUIHNjYWxpbmcgaW4gY29tcHJlc3NvcioqPGJyPgorICBgY2luZm8uc2NhbGVfbnVtYCBhbmQgYGNpbmZvLnNjYWxlX2Rlbm9tYCBhcmUgc2lsZW50bHkgaWdub3JlZC4KKyAgVGhlcmUgaXMgbm8gdGVjaG5pY2FsIHJlYXNvbiB3aHkgRENUIHNjYWxpbmcgY291bGQgbm90IGJlIHN1cHBvcnRlZCB3aGVuCisgIGVtdWxhdGluZyB0aGUgbGlianBlZyB2NysgQVBJL0FCSSwgYnV0IHdpdGhvdXQgdGhlIFNtYXJ0U2NhbGUgZXh0ZW5zaW9uIChzZWUKKyAgYmVsb3cpLCBvbmx5IHNjYWxpbmcgZmFjdG9ycyBvZiAxLzIsIDgvMTUsIDQvNywgOC8xMywgMi8zLCA4LzExLCA0LzUsIGFuZAorICA4Lzkgd291bGQgYmUgYXZhaWxhYmxlLCB3aGljaCBpcyBvZiBsaW1pdGVkIHVzZWZ1bG5lc3MuCisKKy0gKipsaWJqcGVnOiBTbWFydFNjYWxlKio8YnI+CisgIGBjaW5mby5ibG9ja19zaXplYCBpcyBzaWxlbnRseSBpZ25vcmVkLgorICBTbWFydFNjYWxlIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgSlBFRyBmb3JtYXQgdGhhdCBhbGxvd3MgZm9yIERDVCBibG9jaworICBzaXplcyBvdGhlciB0aGFuIDh4OC4gIFByb3ZpZGluZyBzdXBwb3J0IGZvciB0aGlzIG5ldyBmb3JtYXQgd291bGQgYmUKKyAgZmVhc2libGUgKHBhcnRpY3VsYXJseSB3aXRob3V0IGZ1bGwgYWNjZWxlcmF0aW9uLikgIEhvd2V2ZXIsIHVudGlsL3VubGVzcworICB0aGUgZm9ybWF0IGJlY29tZXMgZWl0aGVyIGFuIG9mZmljaWFsIGluZHVzdHJ5IHN0YW5kYXJkIG9yLCBhdCBtaW5pbXVtLCBhbgorICBhY2NlcHRlZCBzb2x1dGlvbiBpbiB0aGUgY29tbXVuaXR5LCB3ZSBhcmUgaGVzaXRhbnQgdG8gaW1wbGVtZW50IGl0LCBhcworICB0aGVyZSBpcyBubyBzZW5zZSBvZiB3aGV0aGVyIG9yIGhvdyBpdCBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gIEl0IGlzCisgIG91ciBiZWxpZWYgdGhhdCBTbWFydFNjYWxlIGhhcyBub3QgZGVtb25zdHJhdGVkIHN1ZmZpY2llbnQgdXNlZnVsbmVzcyBhcyBhCisgIGxvc3NsZXNzIGZvcm1hdCBub3IgYXMgYSBtZWFucyBvZiBxdWFsaXR5IGVuaGFuY2VtZW50LCBhbmQgdGh1cyBvdXIgcHJpbWFyeQorICBpbnRlcmVzdCBpbiBwcm92aWRpbmcgdGhpcyBmZWF0dXJlIHdvdWxkIGJlIGFzIGEgbWVhbnMgb2Ygc3VwcG9ydGluZworICBhZGRpdGlvbmFsIERDVCBzY2FsaW5nIGZhY3RvcnMuCisKKy0gKipsaWJqcGVnOiBGYW5jeSBkb3duc2FtcGxpbmcgaW4gY29tcHJlc3NvcioqPGJyPgorICBgY2luZm8uZG9fZmFuY3lfZG93bnNhbXBsaW5nYCBpcyBzaWxlbnRseSBpZ25vcmVkLgorICBUaGlzIHJlcXVpcmVzIHRoZSBEQ1Qgc2NhbGluZyBmZWF0dXJlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLgorCistICoqanBlZ3RyYW46IFNjYWxpbmcqKjxicj4KKyAgVGhpcyByZXF1aXJlcyBib3RoIHRoZSBEQ1Qgc2NhbGluZyBhbmQgU21hcnRTY2FsZSBmZWF0dXJlcywgd2hpY2ggYXJlIG5vdAorICBzdXBwb3J0ZWQuCisKKy0gKipMb3NzbGVzcyBSR0IgSlBFRyBmaWxlcyoqPGJyPgorICBUaGlzIHJlcXVpcmVzIHRoZSBTbWFydFNjYWxlIGZlYXR1cmUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyMjIyBXaGF0IEFib3V0IGxpYmpwZWcgdjk/CisKK2xpYmpwZWcgdjkgaW50cm9kdWNlZCB5ZXQgYW5vdGhlciBmaWVsZCB0byB0aGUgSlBFRyBjb21wcmVzc2lvbiBzdHJ1Y3R1cmUKKyhgY29sb3JfdHJhbnNmb3JtYCksIHRodXMgbWFraW5nIHRoZSBBQkkgYmFja3dhcmQgaW5jb21wYXRpYmxlIHdpdGggdGhhdCBvZgorbGlianBlZyB2OC4gIFRoaXMgbmV3IGZpZWxkIHdhcyBpbnRyb2R1Y2VkIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3VwcG9ydGluZworbG9zc2xlc3MgU21hcnRTY2FsZSBlbmNvZGluZy4gIEZ1cnRoZXJtb3JlLCB0aGVyZSB3YXMgYWN0dWFsbHkgbm8gcmVhc29uIHRvCitleHRlbmQgdGhlIEFQSSBpbiB0aGlzIG1hbm5lciwgYXMgdGhlIGNvbG9yIHRyYW5zZm9ybSBjb3VsZCBoYXZlIGp1c3QgYXMgZWFzaWx5CitiZWVuIGFjdGl2YXRlZCBieSB3YXkgb2YgYSBuZXcgSlBFRyBjb2xvcnNwYWNlIGNvbnN0YW50LCB0aHVzIHByZXNlcnZpbmcKK2JhY2t3YXJkIEFCSSBjb21wYXRpYmlsaXR5LgorCitPdXIgcmVzZWFyY2ggKHNlZSBsaW5rIGFib3ZlKSBoYXMgc2hvd24gdGhhdCBsb3NzbGVzcyBTbWFydFNjYWxlIGRvZXMgbm90CitnZW5lcmFsbHkgYWNjb21wbGlzaCBhbnl0aGluZyB0aGF0IGNhbid0IGFscmVhZHkgYmUgYWNjb21wbGlzaGVkIGJldHRlciB3aXRoCitleGlzdGluZywgc3RhbmRhcmQgbG9zc2xlc3MgZm9ybWF0cy4gIFRoZXJlZm9yZSwgYXQgdGhpcyB0aW1lIGl0IGlzIG91ciBiZWxpZWYKK3RoYXQgdGhlcmUgaXMgbm90IHN1ZmZpY2llbnQgdGVjaG5pY2FsIGp1c3RpZmljYXRpb24gZm9yIHNvZnR3YXJlIHByb2plY3RzIHRvCit1cGdyYWRlIGZyb20gbGlianBlZyB2OCB0byBsaWJqcGVnIHY5LCBhbmQgdGh1cyB0aGVyZSBpcyBub3Qgc3VmZmljaWVudAordGVjaG5pY2FsIGp1c3RpZmljYXRpb24gZm9yIHVzIHRvIGVtdWxhdGUgdGhlIGxpYmpwZWcgdjkgQUJJLgorCitJbi1NZW1vcnkgU291cmNlL0Rlc3RpbmF0aW9uIE1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGxpYmpwZWctdHVyYm8gMS4zIGFuZCBsYXRlciBpbmNsdWRlcyB0aGUgYGpwZWdfbWVtX3NyYygpYCBhbmQKK2BqcGVnX21lbV9kZXN0KClgIGZ1bmN0aW9ucywgZXZlbiB3aGVuIG5vdCBlbXVsYXRpbmcgdGhlIGxpYmpwZWcgdjggQVBJL0FCSS4KK1ByZXZpb3VzbHksIGl0IHdhcyBuZWNlc3NhcnkgdG8gYnVpbGQgbGlianBlZy10dXJibyBmcm9tIHNvdXJjZSB3aXRoIGxpYmpwZWcgdjgKK0FQSS9BQkkgZW11bGF0aW9uIGluIG9yZGVyIHRvIHVzZSB0aGUgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VycywKK2J1dCBzZXZlcmFsIHByb2plY3RzIHJlcXVlc3RlZCB0aGF0IHRob3NlIGZ1bmN0aW9ucyBiZSBpbmNsdWRlZCB3aGVuIGVtdWxhdGluZwordGhlIGxpYmpwZWcgdjZiIEFQSS9BQkkgYXMgd2VsbC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgdGhvc2UgZnVuY3Rpb25zIGJ5Citwcm9ncmFtcyB0aGF0IG5lZWQgdGhlbSwgd2l0aG91dCBicmVha2luZyBBQkkgY29tcGF0aWJpbGl0eSBmb3IgcHJvZ3JhbXMgdGhhdAorZG9uJ3QsIGFuZCBpdCBhbGxvd3MgdGhvc2UgZnVuY3Rpb25zIHRvIGJlIHByb3ZpZGVkIGluIHRoZSAib2ZmaWNpYWwiCitsaWJqcGVnLXR1cmJvIGJpbmFyaWVzLgorCitUaG9zZSB3aG8gYXJlIGNvbmNlcm5lZCBhYm91dCBtYWludGFpbmluZyBzdHJpY3QgY29uZm9ybWFuY2Ugd2l0aCB0aGUgbGlianBlZwordjZiIG9yIHY3IEFQSSBjYW4gcGFzcyBhbiBhcmd1bWVudCBvZiBgLS13aXRob3V0LW1lbS1zcmNkc3RgIHRvIGBjb25maWd1cmVgIG9yCithbiBhcmd1bWVudCBvZiBgLURXSVRIX01FTV9TUkNEU1Q9MGAgdG8gYGNtYWtlYCBwcmlvciB0byBidWlsZGluZworbGlianBlZy10dXJiby4gIFRoaXMgd2lsbCByZXN0b3JlIHRoZSBwcmUtMS4zIGJlaGF2aW9yLCBpbiB3aGljaAorYGpwZWdfbWVtX3NyYygpYCBhbmQgYGpwZWdfbWVtX2Rlc3QoKWAgYXJlIG9ubHkgaW5jbHVkZWQgd2hlbiBlbXVsYXRpbmcgdGhlCitsaWJqcGVnIHY4IEFQSS9BQkkuCisKK09uIFVuKnggc3lzdGVtcywgaW5jbHVkaW5nIHRoZSBpbi1tZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXJzIGNoYW5nZXMKK3RoZSBkeW5hbWljIGxpYnJhcnkgdmVyc2lvbiBmcm9tIDYyLjEuMCB0byA2Mi4yLjAgaWYgdXNpbmcgbGlianBlZyB2NmIgQVBJL0FCSQorZW11bGF0aW9uIGFuZCBmcm9tIDcuMS4wIHRvIDcuMi4wIGlmIHVzaW5nIGxpYmpwZWcgdjcgQVBJL0FCSSBlbXVsYXRpb24uCisKK05vdGUgdGhhdCwgb24gbW9zdCBVbip4IHN5c3RlbXMsIHRoZSBkeW5hbWljIGxpbmtlciB3aWxsIG5vdCBsb29rIGZvciBhCitmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdW50aWwgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLiAgVGh1cywgaWYgYSBwcm9ncmFtCitpcyBidWlsdCBhZ2FpbnN0IGxpYmpwZWctdHVyYm8gMS4zKyBhbmQgdXNlcyBganBlZ19tZW1fc3JjKClgIG9yCitganBlZ19tZW1fZGVzdCgpYCwgdGhhdCBwcm9ncmFtIHdpbGwgbm90IGZhaWwgaWYgcnVuIGFnYWluc3QgYW4gb2xkZXIgdmVyc2lvbgorb2YgbGlianBlZy10dXJibyBvciBhZ2FpbnN0IGxpYmpwZWcgdjctIHVudGlsIHRoZSBwcm9ncmFtIGFjdHVhbGx5IHRyaWVzIHRvCitjYWxsIGBqcGVnX21lbV9zcmMoKWAgb3IgYGpwZWdfbWVtX2Rlc3QoKWAuICBTdWNoIGlzIG5vdCB0aGUgY2FzZSBvbiBXaW5kb3dzLgorSWYgYSBwcm9ncmFtIGlzIGJ1aWx0IGFnYWluc3QgdGhlIGxpYmpwZWctdHVyYm8gMS4zKyBETEwgYW5kIHVzZXMKK2BqcGVnX21lbV9zcmMoKWAgb3IgYGpwZWdfbWVtX2Rlc3QoKWAsIHRoZW4gaXQgbXVzdCB1c2UgdGhlIGxpYmpwZWctdHVyYm8gMS4zKworRExMIGF0IHJ1biB0aW1lLgorCitCb3RoIGNqcGVnIGFuZCBkanBlZyBoYXZlIGJlZW4gZXh0ZW5kZWQgdG8gYWxsb3cgdGVzdGluZyB0aGUgaW4tbWVtb3J5Citzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlciBmdW5jdGlvbnMuICBTZWUgdGhlaXIgcmVzcGVjdGl2ZSBtYW4gcGFnZXMgZm9yIG1vcmUKK2RldGFpbHMuCisKKworTWF0aGVtYXRpY2FsIENvbXBhdGliaWxpdHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciB0aGUgbW9zdCBwYXJ0LCBsaWJqcGVnLXR1cmJvIHNob3VsZCBwcm9kdWNlIGlkZW50aWNhbCBvdXRwdXQgdG8gbGlianBlZwordjZiLiAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhpcyBpcyB3aGVuIHVzaW5nIHRoZSBmbG9hdGluZyBwb2ludCBEQ1QvSURDVCwgaW4KK3doaWNoIGNhc2UgdGhlIG91dHB1dHMgb2YgbGlianBlZyB2NmIgYW5kIGxpYmpwZWctdHVyYm8gY2FuIGRpZmZlciBmb3IgdGhlCitmb2xsb3dpbmcgcmVhc29uczoKKworLSBUaGUgU1NFL1NTRTIgZmxvYXRpbmcgcG9pbnQgRENUIGltcGxlbWVudGF0aW9uIGluIGxpYmpwZWctdHVyYm8gaXMgZXZlciBzbworICBzbGlnaHRseSBtb3JlIGFjY3VyYXRlIHRoYW4gdGhlIGltcGxlbWVudGF0aW9uIGluIGxpYmpwZWcgdjZiLCBidXQgbm90IGJ5CisgIGFueSBhbW91bnQgcGVyY2VwdGlibGUgdG8gaHVtYW4gdmlzaW9uIChnZW5lcmFsbHkgaW4gdGhlIHJhbmdlIG9mIDAuMDEgdG8KKyAgMC4wOCBkQiBnYWluIGluIFBOU1IuKQorCistIFdoZW4gbm90IHVzaW5nIHRoZSBTSU1EIGV4dGVuc2lvbnMsIGxpYmpwZWctdHVyYm8gdXNlcyB0aGUgbW9yZSBhY2N1cmF0ZQorICAoYW5kIHNsaWdodGx5IGZhc3RlcikgZmxvYXRpbmcgcG9pbnQgSURDVCBhbGdvcml0aG0gaW50cm9kdWNlZCBpbiBsaWJqcGVnCisgIHY4YSBhcyBvcHBvc2VkIHRvIHRoZSBhbGdvcml0aG0gdXNlZCBpbiBsaWJqcGVnIHY2Yi4gIEl0IHNob3VsZCBiZSBub3RlZCwKKyAgaG93ZXZlciwgdGhhdCB0aGlzIGFsZ29yaXRobSBiYXNpY2FsbHkgYnJpbmdzIHRoZSBhY2N1cmFjeSBvZiB0aGUgZmxvYXRpbmcKKyAgcG9pbnQgSURDVCBpbiBsaW5lIHdpdGggdGhlIGFjY3VyYWN5IG9mIHRoZSBzbG93IGludGVnZXIgSURDVC4gIFRoZSBmbG9hdGluZworICBwb2ludCBEQ1QvSURDVCBhbGdvcml0aG1zIGFyZSBtYWlubHkgYSBsZWdhY3kgZmVhdHVyZSwgYW5kIHRoZXkgZG8gbm90CisgIHByb2R1Y2Ugc2lnbmlmaWNhbnRseSBtb3JlIGFjY3VyYWN5IHRoYW4gdGhlIHNsb3cgaW50ZWdlciBhbGdvcml0aG1zICh0byBwdXQKKyAgbnVtYmVycyBvbiB0aGlzLCB0aGUgdHlwaWNhbCBkaWZmZXJlbmNlIGluIFBOU1IgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMKKyAgaXMgbGVzcyB0aGFuIDAuMTAgZEIsIHdoZXJlYXMgY2hhbmdpbmcgdGhlIHF1YWxpdHkgbGV2ZWwgYnkgMSBpbiB0aGUgdXBwZXIKKyAgcmFuZ2Ugb2YgdGhlIHF1YWxpdHkgc2NhbGUgaXMgdHlwaWNhbGx5IG1vcmUgbGlrZSBhIDEuMCBkQiBkaWZmZXJlbmNlLikKKworLSBJZiB0aGUgZmxvYXRpbmcgcG9pbnQgYWxnb3JpdGhtcyBpbiBsaWJqcGVnLXR1cmJvIGFyZSBub3QgaW1wbGVtZW50ZWQgdXNpbmcKKyAgU0lNRCBpbnN0cnVjdGlvbnMgb24gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLCB0aGVuIHRoZSBhY2N1cmFjeSBvZiB0aGUKKyAgZmxvYXRpbmcgcG9pbnQgRENUL0lEQ1QgY2FuIGRlcGVuZCBvbiB0aGUgY29tcGlsZXIgc2V0dGluZ3MuCisKK1doaWxlIGxpYmpwZWctdHVyYm8gZG9lcyBlbXVsYXRlIHRoZSBsaWJqcGVnIHY4IEFQSS9BQkksIHVuZGVyIHRoZSBob29kIGl0IGlzCitzdGlsbCB1c2luZyB0aGUgc2FtZSBhbGdvcml0aG1zIGFzIGxpYmpwZWcgdjZiLCBzbyB0aGVyZSBhcmUgc2V2ZXJhbCBzcGVjaWZpYworY2FzZXMgaW4gd2hpY2ggbGlianBlZy10dXJibyBjYW5ub3QgYmUgZXhwZWN0ZWQgdG8gcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQgYXMKK2xpYmpwZWcgdjg6CisKKy0gV2hlbiBkZWNvbXByZXNzaW5nIHVzaW5nIHNjYWxpbmcgZmFjdG9ycyBvZiAxLzIgYW5kIDEvNCwgYmVjYXVzZSBsaWJqcGVnIHY4CisgIGltcGxlbWVudHMgdGhvc2Ugc2NhbGluZyBhbGdvcml0aG1zIGRpZmZlcmVudGx5IHRoYW4gbGlianBlZyB2NmIgZG9lcywgYW5kCisgIGxpYmpwZWctdHVyYm8ncyBTSU1EIGV4dGVuc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBsaWJqcGVnIHY2YiBiZWhhdmlvci4KKworLSBXaGVuIHVzaW5nIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLCBiZWNhdXNlIGxpYmpwZWcgdjggaW1wbGVtZW50cyB0aGlzCisgIHdpdGggaXRzIERDVC9JRENUIHNjYWxpbmcgYWxnb3JpdGhtcyByYXRoZXIgdGhhbiB3aXRoIGEgc2VwYXJhdGUKKyAgZG93bnNhbXBsaW5nL3Vwc2FtcGxpbmcgYWxnb3JpdGhtLiAgSW4gb3VyIHRlc3RpbmcsIHRoZSBzdWJzYW1wbGVkL3Vwc2FtcGxlZAorICBvdXRwdXQgb2YgbGlianBlZyB2OCBpcyBsZXNzIGFjY3VyYXRlIHRoYW4gdGhhdCBvZiBsaWJqcGVnIHY2YiBmb3IgdGhpcworICByZWFzb24uCisKKy0gV2hlbiBkZWNvbXByZXNzaW5nIHVzaW5nIGEgc2NhbGluZyBmYWN0b3IgPiAxIGFuZCBtZXJnZWQgKEFLQSAibm9uLWZhbmN5IiBvcgorICAibm9uLXNtb290aCIpIGNocm9taW5hbmNlIHVwc2FtcGxpbmcsIGJlY2F1c2UgbGlianBlZyB2OCBkb2VzIG5vdCBzdXBwb3J0CisgIG1lcmdlZCB1cHNhbXBsaW5nIHdpdGggc2NhbGluZyBmYWN0b3JzID4gMS4KKworCitQZXJmb3JtYW5jZSBQaXRmYWxscworPT09PT09PT09PT09PT09PT09PT0KKworUmVzdGFydCBNYXJrZXJzCistLS0tLS0tLS0tLS0tLS0KKworVGhlIG9wdGltaXplZCBIdWZmbWFuIGRlY29kZXIgaW4gbGlianBlZy10dXJibyBkb2VzIG5vdCBoYW5kbGUgcmVzdGFydCBtYXJrZXJzCitpbiBhIHdheSB0aGF0IG1ha2VzIHRoZSByZXN0IG9mIHRoZSBsaWJqcGVnIGluZnJhc3RydWN0dXJlIGhhcHB5LCBzbyBpdCBpcworbmVjZXNzYXJ5IHRvIHVzZSB0aGUgc2xvdyBIdWZmbWFuIGRlY29kZXIgd2hlbiBkZWNvbXByZXNzaW5nIGEgSlBFRyBpbWFnZSB0aGF0CitoYXMgcmVzdGFydCBtYXJrZXJzLiAgVGhpcyBjYW4gY2F1c2UgdGhlIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UgdG8gZHJvcCBieQorYXMgbXVjaCBhcyAyMCUsIGJ1dCB0aGUgcGVyZm9ybWFuY2Ugd2lsbCBzdGlsbCBiZSBtdWNoIGdyZWF0ZXIgdGhhbiB0aGF0IG9mCitsaWJqcGVnLiAgTWFueSBjb25zdW1lciBwYWNrYWdlcywgc3VjaCBhcyBQaG90b1Nob3AsIHVzZSByZXN0YXJ0IG1hcmtlcnMgd2hlbgorZ2VuZXJhdGluZyBKUEVHIGltYWdlcywgc28gaW1hZ2VzIGdlbmVyYXRlZCBieSB0aG9zZSBwcm9ncmFtcyB3aWxsIGV4cGVyaWVuY2UKK3RoaXMgaXNzdWUuCisKK0Zhc3QgSW50ZWdlciBGb3J3YXJkIERDVCBhdCBIaWdoIFF1YWxpdHkgTGV2ZWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYWxnb3JpdGhtIHVzZWQgYnkgdGhlIFNJTUQtYWNjZWxlcmF0ZWQgcXVhbnRpemF0aW9uIGZ1bmN0aW9uIGNhbm5vdCBwcm9kdWNlCitjb3JyZWN0IHJlc3VsdHMgd2hlbmV2ZXIgdGhlIGZhc3QgaW50ZWdlciBmb3J3YXJkIERDVCBpcyB1c2VkIGFsb25nIHdpdGggYSBKUEVHCitxdWFsaXR5IG9mIDk4LTEwMC4gIFRodXMsIGxpYmpwZWctdHVyYm8gbXVzdCB1c2UgdGhlIG5vbi1TSU1EIHF1YW50aXphdGlvbgorZnVuY3Rpb24gaW4gdGhvc2UgY2FzZXMuICBUaGlzIGNhdXNlcyBwZXJmb3JtYW5jZSB0byBkcm9wIGJ5IGFzIG11Y2ggYXMgNDAlLgorSXQgaXMgdGhlcmVmb3JlIHN0cm9uZ2x5IGFkdmlzZWQgdGhhdCB5b3UgdXNlIHRoZSBzbG93IGludGVnZXIgZm9yd2FyZCBEQ1QKK3doZW5ldmVyIGVuY29kaW5nIGltYWdlcyB3aXRoIGEgSlBFRyBxdWFsaXR5IG9mIDk4IG9yIGhpZ2hlci4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NkZXJyb3IuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NkZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzAzNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY2RlcnJvci5oCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogY2RlcnJvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBlcnJvciBhbmQgbWVzc2FnZSBjb2RlcyBmb3IgdGhlIGNqcGVnL2RqcGVnCisgKiBhcHBsaWNhdGlvbnMuICBUaGVzZSBzdHJpbmdzIGFyZSBub3QgbmVlZGVkIGFzIHBhcnQgb2YgdGhlIEpQRUcgbGlicmFyeQorICogcHJvcGVyLgorICogRWRpdCB0aGlzIGZpbGUgdG8gYWRkIG5ldyBjb2Rlcywgb3IgdG8gdHJhbnNsYXRlIHRoZSBtZXNzYWdlIHN0cmluZ3MgdG8KKyAqIHNvbWUgb3RoZXIgbGFuZ3VhZ2UuCisgKi8KKworLyoKKyAqIFRvIGRlZmluZSB0aGUgZW51bSBsaXN0IG9mIG1lc3NhZ2UgY29kZXMsIGluY2x1ZGUgdGhpcyBmaWxlIHdpdGhvdXQKKyAqIGRlZmluaW5nIG1hY3JvIEpNRVNTQUdFLiAgVG8gY3JlYXRlIGEgbWVzc2FnZSBzdHJpbmcgdGFibGUsIGluY2x1ZGUgaXQKKyAqIGFnYWluIHdpdGggYSBzdWl0YWJsZSBKTUVTU0FHRSBkZWZpbml0aW9uIChzZWUgamVycm9yLmMgZm9yIGFuIGV4YW1wbGUpLgorICovCisjaWZuZGVmIEpNRVNTQUdFCisjaWZuZGVmIENERVJST1JfSAorI2RlZmluZSBDREVSUk9SX0gKKy8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgZGVmaW5lIHRoZSBlbnVtIGxpc3QgKi8KKyNkZWZpbmUgSk1BS0VfRU5VTV9MSVNUCisjZWxzZQorLyogUmVwZWF0ZWQgaW5jbHVzaW9ucyBvZiB0aGlzIGZpbGUgYXJlIG5vLW9wcyB1bmxlc3MgSk1FU1NBR0UgaXMgZGVmaW5lZCAqLworI2RlZmluZSBKTUVTU0FHRShjb2RlLCBzdHJpbmcpCisjZW5kaWYgLyogQ0RFUlJPUl9IICovCisjZW5kaWYgLyogSk1FU1NBR0UgKi8KKworI2lmZGVmIEpNQUtFX0VOVU1fTElTVAorCit0eXBlZGVmIGVudW0geworCisjZGVmaW5lIEpNRVNTQUdFKGNvZGUsIHN0cmluZykgIGNvZGUsCisKKyNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8KKworSk1FU1NBR0UoSk1TR19GSVJTVEFERE9OQ09ERSA9IDEwMDAsIE5VTEwpIC8qIE11c3QgYmUgZmlyc3QgZW50cnkhICovCisKKyNpZmRlZiBCTVBfU1VQUE9SVEVECitKTUVTU0FHRShKRVJSX0JNUF9CQURDTUFQLCAiVW5zdXBwb3J0ZWQgQk1QIGNvbG9ybWFwIGZvcm1hdCIpCitKTUVTU0FHRShKRVJSX0JNUF9CQURERVBUSCwgIk9ubHkgOC0gYW5kIDI0LWJpdCBCTVAgZmlsZXMgYXJlIHN1cHBvcnRlZCIpCitKTUVTU0FHRShKRVJSX0JNUF9CQURIRUFERVIsICJJbnZhbGlkIEJNUCBmaWxlOiBiYWQgaGVhZGVyIGxlbmd0aCIpCitKTUVTU0FHRShKRVJSX0JNUF9CQURQTEFORVMsICJJbnZhbGlkIEJNUCBmaWxlOiBiaVBsYW5lcyBub3QgZXF1YWwgdG8gMSIpCitKTUVTU0FHRShKRVJSX0JNUF9DT0xPUlNQQUNFLCAiQk1QIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQorSk1FU1NBR0UoSkVSUl9CTVBfQ09NUFJFU1NFRCwgIlNvcnJ5LCBjb21wcmVzc2VkIEJNUHMgbm90IHlldCBzdXBwb3J0ZWQiKQorSk1FU1NBR0UoSkVSUl9CTVBfRU1QVFksICJFbXB0eSBCTVAgaW1hZ2UiKQorSk1FU1NBR0UoSkVSUl9CTVBfTk9ULCAiTm90IGEgQk1QIGZpbGUgLSBkb2VzIG5vdCBzdGFydCB3aXRoIEJNIikKK0pNRVNTQUdFKEpUUkNfQk1QLCAiJXV4JXUgMjQtYml0IEJNUCBpbWFnZSIpCitKTUVTU0FHRShKVFJDX0JNUF9NQVBQRUQsICIldXgldSA4LWJpdCBjb2xvcm1hcHBlZCBCTVAgaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19CTVBfT1MyLCAiJXV4JXUgMjQtYml0IE9TMiBCTVAgaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19CTVBfT1MyX01BUFBFRCwgIiV1eCV1IDgtYml0IGNvbG9ybWFwcGVkIE9TMiBCTVAgaW1hZ2UiKQorI2VuZGlmIC8qIEJNUF9TVVBQT1JURUQgKi8KKworI2lmZGVmIEdJRl9TVVBQT1JURUQKK0pNRVNTQUdFKEpFUlJfR0lGX0JVRywgIkdJRiBvdXRwdXQgZ290IGNvbmZ1c2VkIikKK0pNRVNTQUdFKEpFUlJfR0lGX0NPREVTSVpFLCAiQm9ndXMgR0lGIGNvZGVzaXplICVkIikKK0pNRVNTQUdFKEpFUlJfR0lGX0NPTE9SU1BBQ0UsICJHSUYgb3V0cHV0IG11c3QgYmUgZ3JheXNjYWxlIG9yIFJHQiIpCitKTUVTU0FHRShKRVJSX0dJRl9JTUFHRU5PVEZPVU5ELCAiVG9vIGZldyBpbWFnZXMgaW4gR0lGIGZpbGUiKQorSk1FU1NBR0UoSkVSUl9HSUZfTk9ULCAiTm90IGEgR0lGIGZpbGUiKQorSk1FU1NBR0UoSlRSQ19HSUYsICIldXgldXglZCBHSUYgaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19HSUZfQkFEVkVSU0lPTiwKKyAgICAgICAgICJXYXJuaW5nOiB1bmV4cGVjdGVkIEdJRiB2ZXJzaW9uIG51bWJlciAnJWMlYyVjJyIpCitKTUVTU0FHRShKVFJDX0dJRl9FWFRFTlNJT04sICJJZ25vcmluZyBHSUYgZXh0ZW5zaW9uIGJsb2NrIG9mIHR5cGUgMHglMDJ4IikKK0pNRVNTQUdFKEpUUkNfR0lGX05PTlNRVUFSRSwgIkNhdXRpb246IG5vbnNxdWFyZSBwaXhlbHMgaW4gaW5wdXQiKQorSk1FU1NBR0UoSldSTl9HSUZfQkFEREFUQSwgIkNvcnJ1cHQgZGF0YSBpbiBHSUYgZmlsZSIpCitKTUVTU0FHRShKV1JOX0dJRl9DSEFSLCAiQm9ndXMgY2hhciAweCUwMnggaW4gR0lGIGZpbGUsIGlnbm9yaW5nIikKK0pNRVNTQUdFKEpXUk5fR0lGX0VORENPREUsICJQcmVtYXR1cmUgZW5kIG9mIEdJRiBpbWFnZSIpCitKTUVTU0FHRShKV1JOX0dJRl9OT01PUkVEQVRBLCAiUmFuIG91dCBvZiBHSUYgYml0cyIpCisjZW5kaWYgLyogR0lGX1NVUFBPUlRFRCAqLworCisjaWZkZWYgUFBNX1NVUFBPUlRFRAorSk1FU1NBR0UoSkVSUl9QUE1fQ09MT1JTUEFDRSwgIlBQTSBvdXRwdXQgbXVzdCBiZSBncmF5c2NhbGUgb3IgUkdCIikKK0pNRVNTQUdFKEpFUlJfUFBNX05PTk5VTUVSSUMsICJOb25udW1lcmljIGRhdGEgaW4gUFBNIGZpbGUiKQorSk1FU1NBR0UoSkVSUl9QUE1fVE9PTEFSR0UsICJJbnRlZ2VyIHZhbHVlIHRvbyBsYXJnZSBpbiBQUE0gZmlsZSIpCitKTUVTU0FHRShKRVJSX1BQTV9OT1QsICJOb3QgYSBQUE0vUEdNIGZpbGUiKQorSk1FU1NBR0UoSlRSQ19QR00sICIldXgldSBQR00gaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19QR01fVEVYVCwgIiV1eCV1IHRleHQgUEdNIGltYWdlIikKK0pNRVNTQUdFKEpUUkNfUFBNLCAiJXV4JXUgUFBNIGltYWdlIikKK0pNRVNTQUdFKEpUUkNfUFBNX1RFWFQsICIldXgldSB0ZXh0IFBQTSBpbWFnZSIpCisjZW5kaWYgLyogUFBNX1NVUFBPUlRFRCAqLworCisjaWZkZWYgUkxFX1NVUFBPUlRFRAorSk1FU1NBR0UoSkVSUl9STEVfQkFERVJST1IsICJCb2d1cyBlcnJvciBjb2RlIGZyb20gUkxFIGxpYnJhcnkiKQorSk1FU1NBR0UoSkVSUl9STEVfQ09MT1JTUEFDRSwgIlJMRSBvdXRwdXQgbXVzdCBiZSBncmF5c2NhbGUgb3IgUkdCIikKK0pNRVNTQUdFKEpFUlJfUkxFX0RJTUVOU0lPTlMsICJJbWFnZSBkaW1lbnNpb25zICgldXgldSkgdG9vIGxhcmdlIGZvciBSTEUiKQorSk1FU1NBR0UoSkVSUl9STEVfRU1QVFksICJFbXB0eSBSTEUgZmlsZSIpCitKTUVTU0FHRShKRVJSX1JMRV9FT0YsICJQcmVtYXR1cmUgRU9GIGluIFJMRSBoZWFkZXIiKQorSk1FU1NBR0UoSkVSUl9STEVfTUVNLCAiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgUkxFIGhlYWRlciIpCitKTUVTU0FHRShKRVJSX1JMRV9OT1QsICJOb3QgYW4gUkxFIGZpbGUiKQorSk1FU1NBR0UoSkVSUl9STEVfVE9PTUFOWUNIQU5ORUxTLCAiQ2Fubm90IGhhbmRsZSAlZCBvdXRwdXQgY2hhbm5lbHMgZm9yIFJMRSIpCitKTUVTU0FHRShKRVJSX1JMRV9VTlNVUFBPUlRFRCwgIkNhbm5vdCBoYW5kbGUgdGhpcyBSTEUgc2V0dXAiKQorSk1FU1NBR0UoSlRSQ19STEUsICIldXgldSBmdWxsLWNvbG9yIFJMRSBmaWxlIikKK0pNRVNTQUdFKEpUUkNfUkxFX0ZVTExNQVAsICIldXgldSBmdWxsLWNvbG9yIFJMRSBmaWxlIHdpdGggbWFwIG9mIGxlbmd0aCAlZCIpCitKTUVTU0FHRShKVFJDX1JMRV9HUkFZLCAiJXV4JXUgZ3JheXNjYWxlIFJMRSBmaWxlIikKK0pNRVNTQUdFKEpUUkNfUkxFX01BUEdSQVksICIldXgldSBncmF5c2NhbGUgUkxFIGZpbGUgd2l0aCBtYXAgb2YgbGVuZ3RoICVkIikKK0pNRVNTQUdFKEpUUkNfUkxFX01BUFBFRCwgIiV1eCV1IGNvbG9ybWFwcGVkIFJMRSBmaWxlIHdpdGggbWFwIG9mIGxlbmd0aCAlZCIpCisjZW5kaWYgLyogUkxFX1NVUFBPUlRFRCAqLworCisjaWZkZWYgVEFSR0FfU1VQUE9SVEVECitKTUVTU0FHRShKRVJSX1RHQV9CQURDTUFQLCAiVW5zdXBwb3J0ZWQgVGFyZ2EgY29sb3JtYXAgZm9ybWF0IikKK0pNRVNTQUdFKEpFUlJfVEdBX0JBRFBBUk1TLCAiSW52YWxpZCBvciB1bnN1cHBvcnRlZCBUYXJnYSBmaWxlIikKK0pNRVNTQUdFKEpFUlJfVEdBX0NPTE9SU1BBQ0UsICJUYXJnYSBvdXRwdXQgbXVzdCBiZSBncmF5c2NhbGUgb3IgUkdCIikKK0pNRVNTQUdFKEpUUkNfVEdBLCAiJXV4JXUgUkdCIFRhcmdhIGltYWdlIikKK0pNRVNTQUdFKEpUUkNfVEdBX0dSQVksICIldXgldSBncmF5c2NhbGUgVGFyZ2EgaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19UR0FfTUFQUEVELCAiJXV4JXUgY29sb3JtYXBwZWQgVGFyZ2EgaW1hZ2UiKQorI2Vsc2UKK0pNRVNTQUdFKEpFUlJfVEdBX05PVENPTVAsICJUYXJnYSBzdXBwb3J0IHdhcyBub3QgY29tcGlsZWQiKQorI2VuZGlmIC8qIFRBUkdBX1NVUFBPUlRFRCAqLworCitKTUVTU0FHRShKRVJSX0JBRF9DTUFQX0ZJTEUsCisgICAgICAgICAiQ29sb3IgbWFwIGZpbGUgaXMgaW52YWxpZCBvciBvZiB1bnN1cHBvcnRlZCBmb3JtYXQiKQorSk1FU1NBR0UoSkVSUl9UT09fTUFOWV9DT0xPUlMsCisgICAgICAgICAiT3V0cHV0IGZpbGUgZm9ybWF0IGNhbm5vdCBoYW5kbGUgJWQgY29sb3JtYXAgZW50cmllcyIpCitKTUVTU0FHRShKRVJSX1VOR0VUQ19GQUlMRUQsICJ1bmdldGMgZmFpbGVkIikKKyNpZmRlZiBUQVJHQV9TVVBQT1JURUQKK0pNRVNTQUdFKEpFUlJfVU5LTk9XTl9GT1JNQVQsCisgICAgICAgICAiVW5yZWNvZ25pemVkIGlucHV0IGZpbGUgZm9ybWF0IC0tLSBwZXJoYXBzIHlvdSBuZWVkIC10YXJnYSIpCisjZWxzZQorSk1FU1NBR0UoSkVSUl9VTktOT1dOX0ZPUk1BVCwgIlVucmVjb2duaXplZCBpbnB1dCBmaWxlIGZvcm1hdCIpCisjZW5kaWYKK0pNRVNTQUdFKEpFUlJfVU5TVVBQT1JURURfRk9STUFULCAiVW5zdXBwb3J0ZWQgb3V0cHV0IGZpbGUgZm9ybWF0IikKKworI2lmZGVmIEpNQUtFX0VOVU1fTElTVAorCisgIEpNU0dfTEFTVEFERE9OQ09ERQorfSBBRERPTl9NRVNTQUdFX0NPREU7CisKKyN1bmRlZiBKTUFLRV9FTlVNX0xJU1QKKyNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8KKworLyogWmFwIEpNRVNTQUdFIG1hY3JvIHNvIHRoYXQgZnV0dXJlIHJlLWluY2x1c2lvbnMgZG8gbm90aGluZyBieSBkZWZhdWx0ICovCisjdW5kZWYgSk1FU1NBR0UKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NkanBlZy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY2RqcGVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlMzgyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NkanBlZy5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogY2RqcGVnLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIEl0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBjb2RlIHJlbGV2YW50CisgKiB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiBzdXBwb3J0IHJvdXRpbmVzIHVzZWQgYnkgdGhlIElKRyBhcHBsaWNhdGlvbgorICogcHJvZ3JhbXMgKGNqcGVnLCBkanBlZywganBlZ3RyYW4pLgorICovCisKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPiAgICAgICAgICAgICAgLyogdG8gZGVjbGFyZSBpc3VwcGVyKCksIHRvbG93ZXIoKSAqLworI2lmZGVmIFVTRV9TRVRNT0RFCisjaW5jbHVkZSA8ZmNudGwuaD4gICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpJ3MgcGFyYW1ldGVyIG1hY3JvcyAqLworLyogSWYgeW91IGhhdmUgc2V0bW9kZSgpIGJ1dCBub3QgPGlvLmg+LCBqdXN0IGRlbGV0ZSB0aGlzIGxpbmU6ICovCisjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpICovCisjZW5kaWYKKworCisvKgorICogT3B0aW9uYWwgcHJvZ3Jlc3MgbW9uaXRvcjogZGlzcGxheSBhIHBlcmNlbnQtZG9uZSBmaWd1cmUgb24gc3RkZXJyLgorICovCisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKworTUVUSE9EREVGKHZvaWQpCitwcm9ncmVzc19tb25pdG9yKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgY2RfcHJvZ3Jlc3NfcHRyIHByb2cgPSAoY2RfcHJvZ3Jlc3NfcHRyKWNpbmZvLT5wcm9ncmVzczsKKyAgaW50IHRvdGFsX3Bhc3NlcyA9IHByb2ctPnB1Yi50b3RhbF9wYXNzZXMgKyBwcm9nLT50b3RhbF9leHRyYV9wYXNzZXM7CisgIGludCBwZXJjZW50X2RvbmUgPQorICAgIChpbnQpKHByb2ctPnB1Yi5wYXNzX2NvdW50ZXIgKiAxMDBMIC8gcHJvZy0+cHViLnBhc3NfbGltaXQpOworCisgIGlmIChwZXJjZW50X2RvbmUgIT0gcHJvZy0+cGVyY2VudF9kb25lKSB7CisgICAgcHJvZy0+cGVyY2VudF9kb25lID0gcGVyY2VudF9kb25lOworICAgIGlmICh0b3RhbF9wYXNzZXMgPiAxKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxyUGFzcyAlZC8lZDogJTNkJSUgIiwKKyAgICAgICAgICAgICAgcHJvZy0+cHViLmNvbXBsZXRlZF9wYXNzZXMgKyBwcm9nLT5jb21wbGV0ZWRfZXh0cmFfcGFzc2VzICsgMSwKKyAgICAgICAgICAgICAgdG90YWxfcGFzc2VzLCBwZXJjZW50X2RvbmUpOworICAgIH0gZWxzZSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxyICUzZCUlICIsIHBlcmNlbnRfZG9uZSk7CisgICAgfQorICAgIGZmbHVzaChzdGRlcnIpOworICB9Cit9CisKKworR0xPQkFMKHZvaWQpCitzdGFydF9wcm9ncmVzc19tb25pdG9yKGpfY29tbW9uX3B0ciBjaW5mbywgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzKQoreworICAvKiBFbmFibGUgcHJvZ3Jlc3MgZGlzcGxheSwgdW5sZXNzIHRyYWNlIG91dHB1dCBpcyBvbiAqLworICBpZiAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPT0gMCkgeworICAgIHByb2dyZXNzLT5wdWIucHJvZ3Jlc3NfbW9uaXRvciA9IHByb2dyZXNzX21vbml0b3I7CisgICAgcHJvZ3Jlc3MtPmNvbXBsZXRlZF9leHRyYV9wYXNzZXMgPSAwOworICAgIHByb2dyZXNzLT50b3RhbF9leHRyYV9wYXNzZXMgPSAwOworICAgIHByb2dyZXNzLT5wZXJjZW50X2RvbmUgPSAtMTsKKyAgICBjaW5mby0+cHJvZ3Jlc3MgPSAmcHJvZ3Jlc3MtPnB1YjsKKyAgfQorfQorCisKK0dMT0JBTCh2b2lkKQorZW5kX3Byb2dyZXNzX21vbml0b3Ioal9jb21tb25fcHRyIGNpbmZvKQoreworICAvKiBDbGVhciBhd2F5IHByb2dyZXNzIGRpc3BsYXkgKi8KKyAgaWYgKGNpbmZvLT5lcnItPnRyYWNlX2xldmVsID09IDApIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxyICAgICAgICAgICAgICAgIFxyIik7CisgICAgZmZsdXNoKHN0ZGVycik7CisgIH0KK30KKworI2VuZGlmCisKKworLyoKKyAqIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcgb2YgcG9zc2libHktYWJicmV2aWF0ZWQga2V5d29yZCBzd2l0Y2hlcy4KKyAqIGtleXdvcmQgaXMgdGhlIGNvbnN0YW50IGtleXdvcmQgKG11c3QgYmUgbG93ZXIgY2FzZSBhbHJlYWR5KSwKKyAqIG1pbmNoYXJzIGlzIGxlbmd0aCBvZiBtaW5pbXVtIGxlZ2FsIGFiYnJldmlhdGlvbi4KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2tleW1hdGNoKGNoYXIgKmFyZywgY29uc3QgY2hhciAqa2V5d29yZCwgaW50IG1pbmNoYXJzKQoreworICByZWdpc3RlciBpbnQgY2EsIGNrOworICByZWdpc3RlciBpbnQgbm1hdGNoZWQgPSAwOworCisgIHdoaWxlICgoY2EgPSAqYXJnKyspICE9ICdcMCcpIHsKKyAgICBpZiAoKGNrID0gKmtleXdvcmQrKykgPT0gJ1wwJykKKyAgICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgLyogYXJnIGxvbmdlciB0aGFuIGtleXdvcmQsIG5vIGdvb2QgKi8KKyAgICBpZiAoaXN1cHBlcihjYSkpICAgICAgICAgICAgLyogZm9yY2UgYXJnIHRvIGxjYXNlIChhc3N1bWUgY2sgaXMgYWxyZWFkeSkgKi8KKyAgICAgIGNhID0gdG9sb3dlcihjYSk7CisgICAgaWYgKGNhICE9IGNrKQorICAgICAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAvKiBubyBnb29kICovCisgICAgbm1hdGNoZWQrKzsgICAgICAgICAgICAgICAgIC8qIGNvdW50IG1hdGNoZWQgY2hhcmFjdGVycyAqLworICB9CisgIC8qIHJlYWNoZWQgZW5kIG9mIGFyZ3VtZW50OyBmYWlsIGlmIGl0J3MgdG9vIHNob3J0IGZvciB1bmlxdWUgYWJicmV2ICovCisgIGlmIChubWF0Y2hlZCA8IG1pbmNoYXJzKQorICAgIHJldHVybiBGQUxTRTsKKyAgcmV0dXJuIFRSVUU7ICAgICAgICAgICAgICAgICAgLyogQS1PSyAqLworfQorCisKKy8qCisgKiBSb3V0aW5lcyB0byBlc3RhYmxpc2ggYmluYXJ5IEkvTyBtb2RlIGZvciBzdGRpbiBhbmQgc3Rkb3V0LgorICogTm9uLVVuaXggc3lzdGVtcyBvZnRlbiByZXF1aXJlIHNvbWUgaGFja2luZyB0byBnZXQgb3V0IG9mIHRleHQgbW9kZS4KKyAqLworCitHTE9CQUwoRklMRSAqKQorcmVhZF9zdGRpbih2b2lkKQoreworICBGSUxFICppbnB1dF9maWxlID0gc3RkaW47CisKKyNpZmRlZiBVU0VfU0VUTU9ERSAgICAgICAgICAgICAgLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KKyAgc2V0bW9kZShmaWxlbm8oc3RkaW4pLCBPX0JJTkFSWSk7CisjZW5kaWYKKyNpZmRlZiBVU0VfRkRPUEVOICAgICAgICAgICAgICAgLyogbmVlZCB0byByZS1vcGVuIGluIGJpbmFyeSBtb2RlPyAqLworICBpZiAoKGlucHV0X2ZpbGUgPSBmZG9wZW4oZmlsZW5vKHN0ZGluKSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3QgcmVvcGVuIHN0ZGluXG4iKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKyNlbmRpZgorICByZXR1cm4gaW5wdXRfZmlsZTsKK30KKworCitHTE9CQUwoRklMRSAqKQord3JpdGVfc3Rkb3V0KHZvaWQpCit7CisgIEZJTEUgKm91dHB1dF9maWxlID0gc3Rkb3V0OworCisjaWZkZWYgVVNFX1NFVE1PREUgICAgICAgICAgICAgIC8qIG5lZWQgdG8gaGFjayBmaWxlIG1vZGU/ICovCisgIHNldG1vZGUoZmlsZW5vKHN0ZG91dCksIE9fQklOQVJZKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9GRE9QRU4gICAgICAgICAgICAgICAvKiBuZWVkIHRvIHJlLW9wZW4gaW4gYmluYXJ5IG1vZGU/ICovCisgIGlmICgob3V0cHV0X2ZpbGUgPSBmZG9wZW4oZmlsZW5vKHN0ZG91dCksIFdSSVRFX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCByZW9wZW4gc3Rkb3V0XG4iKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKyNlbmRpZgorICByZXR1cm4gb3V0cHV0X2ZpbGU7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9jZGpwZWcuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NkanBlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjhhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9jZGpwZWcuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIGNkanBlZy5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgc2FtcGxlIGFwcGxpY2F0aW9ucworICogY2pwZWcgYW5kIGRqcGVnLiAgSXQgaXMgTk9UIHVzZWQgYnkgdGhlIGNvcmUgSlBFRyBsaWJyYXJ5LgorICovCisKKyNkZWZpbmUgSlBFR19DSlBFR19ESlBFRyAgICAgICAgLyogZGVmaW5lIHByb3BlciBvcHRpb25zIGluIGpjb25maWcuaCAqLworI2RlZmluZSBKUEVHX0lOVEVSTkFMX09QVElPTlMgICAvKiBjanBlZy5jLGRqcGVnLmMgbmVlZCB0byBzZWUgeHh4X1NVUFBPUlRFRCAqLworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImplcnJvci5oIiAgICAgICAgICAgICAvKiBnZXQgbGlicmFyeSBlcnJvciBjb2RlcyB0b28gKi8KKyNpbmNsdWRlICJjZGVycm9yLmgiICAgICAgICAgICAgLyogZ2V0IGFwcGxpY2F0aW9uLXNwZWNpZmljIGVycm9yIGNvZGVzICovCisKKworLyoKKyAqIE9iamVjdCBpbnRlcmZhY2UgZm9yIGNqcGVnJ3Mgc291cmNlIGZpbGUgZGVjb2RpbmcgbW9kdWxlcworICovCisKK3R5cGVkZWYgc3RydWN0IGNqcGVnX3NvdXJjZV9zdHJ1Y3QgKmNqcGVnX3NvdXJjZV9wdHI7CisKK3N0cnVjdCBjanBlZ19zb3VyY2Vfc3RydWN0IHsKKyAgdm9pZCAoKnN0YXJ0X2lucHV0KSAoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pOworICBKRElNRU5TSU9OICgqZ2V0X3BpeGVsX3Jvd3MpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbyk7CisgIHZvaWQgKCpmaW5pc2hfaW5wdXQpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbyk7CisKKyAgRklMRSAqaW5wdXRfZmlsZTsKKworICBKU0FNUEFSUkFZIGJ1ZmZlcjsKKyAgSkRJTUVOU0lPTiBidWZmZXJfaGVpZ2h0OworfTsKKworCisvKgorICogT2JqZWN0IGludGVyZmFjZSBmb3IgZGpwZWcncyBvdXRwdXQgZmlsZSBlbmNvZGluZyBtb2R1bGVzCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZGpwZWdfZGVzdF9zdHJ1Y3QgKmRqcGVnX2Rlc3RfcHRyOworCitzdHJ1Y3QgZGpwZWdfZGVzdF9zdHJ1Y3QgeworICAvKiBzdGFydF9vdXRwdXQgaXMgY2FsbGVkIGFmdGVyIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBmaW5pc2hlcy4KKyAgICogVGhlIGNvbG9yIG1hcCB3aWxsIGJlIHJlYWR5IGF0IHRoaXMgdGltZSwgaWYgb25lIGlzIG5lZWRlZC4KKyAgICovCisgIHZvaWQgKCpzdGFydF9vdXRwdXQpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbyk7CisgIC8qIEVtaXQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcGl4ZWwgcm93cyBmcm9tIHRoZSBidWZmZXIuICovCisgIHZvaWQgKCpwdXRfcGl4ZWxfcm93cykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpOworICAvKiBGaW5pc2ggdXAgYXQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UuICovCisgIHZvaWQgKCpmaW5pc2hfb3V0cHV0KSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8pOworICAvKiBSZS1jYWxjdWxhdGUgYnVmZmVyIGRpbWVuc2lvbnMgYmFzZWQgb24gb3V0cHV0IGRpbWVuc2lvbnMgKGZvciB1c2Ugd2l0aAorICAgICBwYXJ0aWFsIGltYWdlIGRlY29tcHJlc3Npb24uKSAgSWYgdGhpcyBpcyBOVUxMLCB0aGVuIHRoZSBvdXRwdXQgZm9ybWF0CisgICAgIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCBpbWFnZSBkZWNvbXByZXNzaW9uIChCTVAgYW5kIFJMRSwgaW4gcGFydGljdWxhciwKKyAgICAgY2Fubm90IHN1cHBvcnQgcGFydGlhbCBkZWNvbXByZXNzaW9uIGJlY2F1c2UgdGhleSB1c2UgYW4gaW52ZXJzaW9uIGJ1ZmZlcgorICAgICB0byB3cml0ZSB0aGUgaW1hZ2UgaW4gYm90dG9tLXVwIG9yZGVyLikgKi8KKyAgdm9pZCAoKmNhbGNfYnVmZmVyX2RpbWVuc2lvbnMpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKTsKKworCisgIC8qIFRhcmdldCBmaWxlIHNwZWM7IGZpbGxlZCBpbiBieSBkanBlZy5jIGFmdGVyIG9iamVjdCBpcyBjcmVhdGVkLiAqLworICBGSUxFICpvdXRwdXRfZmlsZTsKKworICAvKiBPdXRwdXQgcGl4ZWwtcm93IGJ1ZmZlci4gIENyZWF0ZWQgYnkgbW9kdWxlIGluaXQgb3Igc3RhcnRfb3V0cHV0LgorICAgKiBXaWR0aCBpcyBjaW5mby0+b3V0cHV0X3dpZHRoICogY2luZm8tPm91dHB1dF9jb21wb25lbnRzOworICAgKiBoZWlnaHQgaXMgYnVmZmVyX2hlaWdodC4KKyAgICovCisgIEpTQU1QQVJSQVkgYnVmZmVyOworICBKRElNRU5TSU9OIGJ1ZmZlcl9oZWlnaHQ7Cit9OworCisKKy8qCisgKiBjanBlZy9kanBlZyBtYXkgbmVlZCB0byBwZXJmb3JtIGV4dHJhIHBhc3NlcyB0byBjb252ZXJ0IHRvIG9yIGZyb20KKyAqIHRoZSBzb3VyY2UvZGVzdGluYXRpb24gZmlsZSBmb3JtYXQuICBUaGUgSlBFRyBsaWJyYXJ5IGRvZXMgbm90IGtub3cKKyAqIGFib3V0IHRoZXNlIHBhc3NlcywgYnV0IHdlJ2QgbGlrZSB0aGVtIHRvIGJlIGNvdW50ZWQgYnkgdGhlIHByb2dyZXNzCisgKiBtb25pdG9yLiAgV2UgdXNlIGFuIGV4cGFuZGVkIHByb2dyZXNzIG1vbml0b3Igb2JqZWN0IHRvIGhvbGQgdGhlCisgKiBhZGRpdGlvbmFsIHBhc3MgY291bnQuCisgKi8KKworc3RydWN0IGNkanBlZ19wcm9ncmVzc19tZ3IgeworICBzdHJ1Y3QganBlZ19wcm9ncmVzc19tZ3IgcHViOyAvKiBmaWVsZHMga25vd24gdG8gSlBFRyBsaWJyYXJ5ICovCisgIGludCBjb21wbGV0ZWRfZXh0cmFfcGFzc2VzOyAgIC8qIGV4dHJhIHBhc3NlcyBjb21wbGV0ZWQgKi8KKyAgaW50IHRvdGFsX2V4dHJhX3Bhc3NlczsgICAgICAgLyogdG90YWwgZXh0cmEgKi8KKyAgLyogbGFzdCBwcmludGVkIHBlcmNlbnRhZ2Ugc3RvcmVkIGhlcmUgdG8gYXZvaWQgbXVsdGlwbGUgcHJpbnRvdXRzICovCisgIGludCBwZXJjZW50X2RvbmU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBjZGpwZWdfcHJvZ3Jlc3NfbWdyICpjZF9wcm9ncmVzc19wdHI7CisKKworLyogTW9kdWxlIHNlbGVjdGlvbiByb3V0aW5lcyBmb3IgSS9PIG1vZHVsZXMuICovCisKK0VYVEVSTihjanBlZ19zb3VyY2VfcHRyKSBqaW5pdF9yZWFkX2JtcChqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVzZV9pbnZlcnNpb25fYXJyYXkpOworRVhURVJOKGRqcGVnX2Rlc3RfcHRyKSBqaW5pdF93cml0ZV9ibXAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc19vczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHVzZV9pbnZlcnNpb25fYXJyYXkpOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfZ2lmKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfZ2lmKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfcHBtKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfcHBtKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfcmxlKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfcmxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfdGFyZ2Eoal9jb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKGRqcGVnX2Rlc3RfcHRyKSBqaW5pdF93cml0ZV90YXJnYShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworLyogY2pwZWcgc3VwcG9ydCByb3V0aW5lcyAoaW4gcmRzd2l0Y2guYykgKi8KKworRVhURVJOKGJvb2xlYW4pIHJlYWRfcXVhbnRfdGFibGVzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKTsKK0VYVEVSTihib29sZWFuKSByZWFkX3NjYW5fc2NyaXB0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICpmaWxlbmFtZSk7CitFWFRFUk4oYm9vbGVhbikgc2V0X3F1YWxpdHlfcmF0aW5ncyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSk7CitFWFRFUk4oYm9vbGVhbikgc2V0X3F1YW50X3Nsb3RzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcpOworRVhURVJOKGJvb2xlYW4pIHNldF9zYW1wbGVfZmFjdG9ycyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqYXJnKTsKKworLyogZGpwZWcgc3VwcG9ydCByb3V0aW5lcyAoaW4gcmRjb2xtYXAuYykgKi8KKworRVhURVJOKHZvaWQpIHJlYWRfY29sb3JfbWFwKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEZJTEUgKmluZmlsZSk7CisKKy8qIGNvbW1vbiBzdXBwb3J0IHJvdXRpbmVzIChpbiBjZGpwZWcuYykgKi8KKworRVhURVJOKHZvaWQpIGVuYWJsZV9zaWduYWxfY2F0Y2hlcihqX2NvbW1vbl9wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIHN0YXJ0X3Byb2dyZXNzX21vbml0b3Ioal9jb21tb25fcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzKTsKK0VYVEVSTih2b2lkKSBlbmRfcHJvZ3Jlc3NfbW9uaXRvcihqX2NvbW1vbl9wdHIgY2luZm8pOworRVhURVJOKGJvb2xlYW4pIGtleW1hdGNoKGNoYXIgKmFyZywgY29uc3QgY2hhciAqa2V5d29yZCwgaW50IG1pbmNoYXJzKTsKK0VYVEVSTihGSUxFICopIHJlYWRfc3RkaW4odm9pZCk7CitFWFRFUk4oRklMRSAqKSB3cml0ZV9zdGRvdXQodm9pZCk7CisKKy8qIG1pc2NlbGxhbmVvdXMgdXNlZnVsIG1hY3JvcyAqLworCisjaWZkZWYgRE9OVF9VU0VfQl9NT0RFICAgICAgICAgIC8qIGRlZmluZSBtb2RlIHBhcmFtZXRlcnMgZm9yIGZvcGVuKCkgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyIgorI2RlZmluZSBXUklURV9CSU5BUlkgICAgInciCisjZWxzZQorI2RlZmluZSBSRUFEX0JJTkFSWSAgICAgInJiIgorI2RlZmluZSBXUklURV9CSU5BUlkgICAgIndiIgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFICAgICAgICAgICAgLyogZGVmaW5lIGV4aXQoKSBjb2RlcyBpZiBub3QgcHJvdmlkZWQgKi8KKyNkZWZpbmUgRVhJVF9GQUlMVVJFICAxCisjZW5kaWYKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUyAgMAorI2VuZGlmCisjaWZuZGVmIEVYSVRfV0FSTklORworI2RlZmluZSBFWElUX1dBUk5JTkcgIDIKKyNlbmRpZgorCisjZGVmaW5lIElzRXh0UkdCKGNzKSBcCisgIChjcyA9PSBKQ1NfUkdCIHx8IChjcyA+PSBKQ1NfRVhUX1JHQiAmJiBjcyA8PSBKQ1NfRVhUX0FSR0IpKQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY2hhbmdlLmxvZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NoYW5nZS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5MGQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NoYW5nZS5sb2cKQEAgLTAsMCArMSwzMTUgQEAKK2xpYmpwZWctdHVyYm8gbm90ZTogIFRoaXMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0Cit0byBpbmNsdWRlIG9ubHkgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gbGlianBlZy10dXJiby4gIEl0IGlzIGluY2x1ZGVkIG9ubHkgZm9yCityZWZlcmVuY2UuICBQbGVhc2Ugc2VlIENoYW5nZUxvZy5tZCBmb3IgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gbGlianBlZy10dXJiby4KKworCitDSEFOR0UgTE9HIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgSlBFRyBzb2Z0d2FyZQorCisKK1ZlcnNpb24gOWIgIDE3LUphbi0yMDE2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEb2N1bWVudCAnZicgc3BlY2lmaWVyIGZvciBqcGVndHJhbiAtY3JvcCBzcGVjaWZpY2F0aW9uLgorVGhhbmsgdG8gTWljaGVsZSBNYXJ0b25lIGZvciBzdWdnZXN0aW9uLgorCisKK1ZlcnNpb24gOSAgMTMtSmFuLTIwMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIHJlbWFyayBmb3IganBlZ19tZW1fZGVzdCgpIGluIGpkYXRhZHN0LmMuCitUaGFuayB0byBFbGllLUdyZWdvaXJlIEtob3VyeSBmb3IgdGhlIGhpbnQuCisKK0NvcnJlY3QgYXJndW1lbnQgdHlwZSBpbiBmb3JtYXQgc3RyaW5nLCBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KK1RoYW5rIHRvIFZpbmNlbnQgVG9ycmkgZm9yIGhpbnQuCisKKworVmVyc2lvbiA4ZCAgMTUtSmFuLTIwMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCBjanBlZyAtcmdiIG9wdGlvbiB0byBjcmVhdGUgUkdCIEpQRUcgZmlsZXMuCitVc2luZyB0aGlzIHN3aXRjaCBzdXBwcmVzc2VzIHRoZSBjb252ZXJzaW9uIGZyb20gUkdCCitjb2xvcnNwYWNlIGlucHV0IHRvIHRoZSBkZWZhdWx0IFlDYkNyIEpQRUcgY29sb3JzcGFjZS4KK1RoYW5rIHRvIE1pY2hhZWwgS29jaCBmb3IgdGhlIGluaXRpYWwgc3VnZ2VzdGlvbi4KKworQWRkIG9wdGlvbiB0byBkaXNhYmxlIHRoZSByZWdpb24gYWRqdXN0bWVudCBpbiB0aGUgdHJhbnN1cHAgY3JvcCBjb2RlLgorVGhhbmsgdG8gSmVmZnJleSBGcmllZGwgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisKK1ZlcnNpb24gOGIgIDE2LU1heS0yMDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXBhaXIgcHJvYmxlbSBpbiBuZXcgbWVtb3J5IHNvdXJjZSBtYW5hZ2VyIHdpdGggY29ycnVwdCBKUEVHIGRhdGEuCitUaGFuayB0byBUZWQgQ2FtcGJlbGwgYW5kIFNhbXVlbCBDaHVuIGZvciB0aGUgcmVwb3J0LgorCisKK1ZlcnNpb24gOGEgIDI4LUZlYi0yMDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0aW5nIHRhYmxlcy1vbmx5IGRhdGFzdHJlYW1zIHZpYSBqcGVnX3dyaXRlX3RhYmxlcyB3b3JrcyBhZ2Fpbi4KKworU3VwcG9ydCAzMi1iaXQgQk1QcyAoUkdCIGltYWdlIHdpdGggQWxwaGEgY2hhbm5lbCkgZm9yIHJlYWQgaW4gY2pwZWcuCitUaGFuayB0byBCcmV0dCBCbGFja2hhbSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKworVmVyc2lvbiA4ICAxMC1KYW4tMjAxMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgc2FuaXR5IGNoZWNrIGluIEJNUCByZWFkZXIgbW9kdWxlIHRvIGF2b2lkIGNqcGVnIGNyYXNoIGZvciBlbXB0eSBpbnB1dAoraW1hZ2UgKHRoYW5rIHRvIElzYWV2IElsZGFyIG9mIElTUCBSQVMsIE1vc2NvdywgUlUgZm9yIHJlcG9ydGluZyB0aGlzIGVycm9yKS4KKworQWRkIGRhdGEgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtYW5hZ2VycyBmb3IgcmVhZCBmcm9tIGFuZCB3cml0ZSB0bworbWVtb3J5IGJ1ZmZlcnMuICBOZXcgQVBJIGZ1bmN0aW9ucyBqcGVnX21lbV9zcmMgYW5kIGpwZWdfbWVtX2Rlc3QuCitUaGFuayB0byBSb2JlcnRvIEJvbmkgZnJvbSBJdGFseSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKworVmVyc2lvbiA3ICAyNy1KdW4tMjAwOQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZXcgc2NhbGVkIERDVHMgaW1wbGVtZW50ZWQuCitkanBlZyBub3cgc3VwcG9ydHMgc2NhbGluZ3MgTi84IHdpdGggYWxsIE4gZnJvbSAxIHRvIDE2LgorCitjanBlZyAtcXVhbGl0eSBvcHRpb24gaGFzIGJlZW4gZXh0ZW5kZWQgZm9yIHN1cHBvcnQgb2Ygc2VwYXJhdGUgcXVhbGl0eQorc2V0dGluZ3MgZm9yIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgKG9yIGluIGdlbmVyYWwsIGZvciBldmVyeSBwcm92aWRlZAorcXVhbnRpemF0aW9uIHRhYmxlIHNsb3QpLgorTmV3IEFQSSBmdW5jdGlvbiBqcGVnX2RlZmF1bHRfcXRhYmxlcygpIGFuZCBxX3NjYWxlX2ZhY3RvciBhcnJheSBpbiBsaWJyYXJ5LgorCitTdXBwb3J0IGFyaXRobWV0aWMgZW50cm9weSBlbmNvZGluZyBhbmQgZGVjb2RpbmcuCitBZGRlZCBmaWxlcyBqYXJpY29tLmMsIGpjYXJpdGguYywgamRhcml0aC5jLgorCitqcGVndHJhbiBoYXMgYSBuZXcgImxvc3NsZXNzIiBjcm9wcGluZyBmZWF0dXJlLgorCitJbXBsZW1lbnQgLXBlcmZlY3Qgb3B0aW9uIGluIGpwZWd0cmFuLCBuZXcgQVBJIGZ1bmN0aW9uCitqdHJhbnNmb3JtX3BlcmZlY3RfdHJhbnNmb3JtKCkgaW4gdHJhbnN1cHAuIChEUCAyMDRfcGVyZmVjdC5kcGF0Y2gpCisKK0JldHRlciBlcnJvciBtZXNzYWdlcyBmb3IganBlZ3RyYW4gZm9wZW4gZmFpbHVyZS4KKyhEUCAyMDNfanBlZ3RyYW5fZXJybXNnLmRwYXRjaCkKKworRml4IGJ5dGUgb3JkZXIgaXNzdWUgd2l0aCAxNmJpdCBQUE0vUEdNIGZpbGVzIGluIHJkcHBtLmMvd3JwcG0uYzoKK2FjY29yZGluZyB0byBOZXRwYm0sIHRoZSBkZSBmYWN0byBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUE5NIGZvcm1hdHMsCit0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIGlzIGZpcnN0LiAoRFAgMjAzX3JkcHBtLmRwYXRjaCkKKworQWRkIC1yYXcgb3B0aW9uIHRvIHJkanBnY29tIG5vdCB0byBtYW5nbGUgdGhlIG91dHB1dC4KKyhEUCAyMDVfcmRqcGdjb21fcmF3LmRwYXRjaCkKKworTWFrZSByZGpwZ2NvbSBsb2NhbGUgYXdhcmUuIChEUCAyMDFfcmRqcGdjb21fbG9jYWxlLmRwYXRjaCkKKworQWRkIGV4dGVybiAiQyIgdG8ganBlZ2xpYi5oLgorVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG8gcHV0IGV4dGVybiAiQyIgeyAuLi4gfSBhcm91bmQgI2luY2x1ZGUgImpwZWdsaWIuaCIKK2luIHlvdXIgQysrIGFwcGxpY2F0aW9uLiAgRGVmaW5pbmcgdGhlIHN5bWJvbCBET05UX1VTRV9FWFRFUk5fQyBpbiB0aGUKK2NvbmZpZ3VyYXRpb24gcHJldmVudHMgdGhpcy4gKERQIDIwMl9qcGVnbGliLmhfYysrLmRwYXRjaCkKKworCitWZXJzaW9uIDZiICAyNy1NYXItMTk5OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworanBlZ3RyYW4gaGFzIG5ldyBmZWF0dXJlcyBmb3IgbG9zc2xlc3MgaW1hZ2UgdHJhbnNmb3JtYXRpb25zIChyb3RhdGlvbgorYW5kIGZsaXBwaW5nKSBhcyB3ZWxsIGFzICJsb3NzbGVzcyIgcmVkdWN0aW9uIHRvIGdyYXlzY2FsZS4KKworanBlZ3RyYW4gbm93IGNvcGllcyBjb21tZW50cyBieSBkZWZhdWx0OyBpdCBoYXMgYSAtY29weSBzd2l0Y2ggdG8gZW5hYmxlCitjb3B5aW5nIGFsbCBBUFBuIGJsb2NrcyBhcyB3ZWxsLCBvciB0byBzdXBwcmVzcyBjb21tZW50cy4gIChGb3JtZXJseSBpdAorYWx3YXlzIHN1cHByZXNzZWQgY29tbWVudHMgYW5kIEFQUG4gYmxvY2tzLikgIGpwZWd0cmFuIG5vdyBhbHNvIHByZXNlcnZlcworSkZJRiB2ZXJzaW9uIGFuZCByZXNvbHV0aW9uIGluZm9ybWF0aW9uLgorCitOZXcgZGVjb21wcmVzc29yIGxpYnJhcnkgZmVhdHVyZTogQ09NIGFuZCBBUFBuIG1hcmtlcnMgZm91bmQgaW4gdGhlIGlucHV0CitmaWxlIGNhbiBiZSBzYXZlZCBpbiBtZW1vcnkgZm9yIGxhdGVyIHVzZSBieSB0aGUgYXBwbGljYXRpb24uICAoQmVmb3JlLAoreW91IGhhZCB0byBjb2RlIHRoaXMgdXAgeW91cnNlbGYgd2l0aCBhIGN1c3RvbSBtYXJrZXIgcHJvY2Vzc29yLikKKworVGhlcmUgaXMgYW4gdW51c2VkIGZpZWxkICJ2b2lkICogY2xpZW50X2RhdGEiIG5vdyBpbiBjb21wcmVzcyBhbmQgZGVjb21wcmVzcworcGFyYW1ldGVyIHN0cnVjdHM7IHRoaXMgbWF5IGJlIHVzZWZ1bCBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworSkZJRiB2ZXJzaW9uIG51bWJlciBpbmZvcm1hdGlvbiBpcyBub3cgc2F2ZWQgYnkgdGhlIGRlY29kZXIgYW5kIGFjY2VwdGVkIGJ5Cit0aGUgZW5jb2Rlci4gIGpwZWd0cmFuIHVzZXMgdGhpcyB0byBjb3B5IHRoZSBzb3VyY2UgZmlsZSdzIHZlcnNpb24gbnVtYmVyLAordG8gZW5zdXJlICJqcGVndHJhbiAtY29weSBhbGwiIHdvbid0IGNyZWF0ZSBib2d1cyBmaWxlcyB0aGF0IGNvbnRhaW4gSkZYWAorZXh0ZW5zaW9ucyBidXQgY2xhaW0gdG8gYmUgdmVyc2lvbiAxLjAxLiAgQXBwbGljYXRpb25zIHRoYXQgZ2VuZXJhdGUgdGhlaXIKK293biBKRlhYIGV4dGVuc2lvbiBtYXJrZXJzIGFsc28gKGZpbmFsbHkpIGhhdmUgYSBzdXBwb3J0ZWQgd2F5IHRvIGNhdXNlIHRoZQorZW5jb2RlciB0byBlbWl0IEpGSUYgdmVyc2lvbiBudW1iZXIgMS4wMi4KKworZGpwZWcncyB0cmFjZSBtb2RlIHJlcG9ydHMgSkZJRiAxLjAyIHRodW1ibmFpbCBpbWFnZXMgYXMgc3VjaCwgcmF0aGVyCit0aGFuIGFzIHVua25vd24gQVBQMCBtYXJrZXJzLgorCitJbiAtdmVyYm9zZSBtb2RlLCBkanBlZyBhbmQgcmRqcGdjb20gd2lsbCB0cnkgdG8gcHJpbnQgdGhlIGNvbnRlbnRzIG9mCitBUFAxMiBtYXJrZXJzIGFzIHRleHQuICBTb21lIGRpZ2l0YWwgY2FtZXJhcyBzdG9yZSB1c2VmdWwgdGV4dCBpbmZvcm1hdGlvbgoraW4gQVBQMTIgbWFya2Vycy4KKworSGFuZGxpbmcgb2YgdHJ1bmNhdGVkIGRhdGEgc3RyZWFtcyBpcyBtb3JlIHJvYnVzdDogYmxvY2tzIGJleW9uZCB0aGUgb25lIGluCit3aGljaCB0aGUgZXJyb3Igb2NjdXJzIHdpbGwgYmUgb3V0cHV0IGFzIHVuaWZvcm0gZ3JheSwgb3IgbGVmdCB1bmNoYW5nZWQKK2lmIGRlY29kaW5nIGEgcHJvZ3Jlc3NpdmUgSlBFRy4gIFRoZSBhcHBlYXJhbmNlIG5vIGxvbmdlciBkZXBlbmRzIG9uIHRoZQorSHVmZm1hbiB0YWJsZXMgYmVpbmcgdXNlZC4KKworSHVmZm1hbiB0YWJsZXMgYXJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IG11Y2ggbW9yZSBjYXJlZnVsbHkgdGhhbiBiZWZvcmUuCisKK1RvIGF2b2lkIHRoZSBVbmlzeXMgTFpXIHBhdGVudCwgZGpwZWcncyBHSUYgb3V0cHV0IGNhcGFiaWxpdHkgaGFzIGJlZW4KK2NoYW5nZWQgdG8gcHJvZHVjZSAidW5jb21wcmVzc2VkIEdJRnMiLCBhbmQgY2pwZWcncyBHSUYgaW5wdXQgY2FwYWJpbGl0eQoraGFzIGJlZW4gcmVtb3ZlZCBhbHRvZ2V0aGVyLiAgV2UncmUgbm90IGhhcHB5IGFib3V0IGl0IGVpdGhlciwgYnV0IHRoZXJlCitzZWVtcyB0byBiZSBubyBnb29kIGFsdGVybmF0aXZlLgorCitUaGUgY29uZmlndXJlIHNjcmlwdCBub3cgc3VwcG9ydHMgYnVpbGRpbmcgbGlianBlZyBhcyBhIHNoYXJlZCBsaWJyYXJ5CitvbiBtYW55IGZsYXZvcnMgb2YgVW5peCAoYWxsIHRoZSBvbmVzIHRoYXQgR05VIGxpYnRvb2wga25vd3MgaG93IHRvCitidWlsZCBzaGFyZWQgbGlicmFyaWVzIGZvcikuICBVc2UgIi4vY29uZmlndXJlIC0tZW5hYmxlLXNoYXJlZCIgdG8KK3RyeSB0aGlzIG91dC4KKworTmV3IGpjb25maWcgZmlsZSBhbmQgbWFrZWZpbGVzIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKyBhbmQgRGV2ZWxvcGVyIFN0dWRpby4KK0Fsc28sIGEgamNvbmZpZyBmaWxlIGFuZCBhIGJ1aWxkIHNjcmlwdCBmb3IgTWV0cm93ZXJrcyBDb2RlV2Fycmlvcgorb24gQXBwbGUgTWFjaW50b3NoLiAgbWFrZWZpbGUuZGogaGFzIGJlZW4gdXBkYXRlZCBmb3IgREpHUFAgdjIsIGFuZCB0aGVyZQorYXJlIG1pc2NlbGxhbmVvdXMgb3RoZXIgbWlub3IgaW1wcm92ZW1lbnRzIGluIHRoZSBtYWtlZmlsZXMuCisKK2ptZW1tYWMuYyBub3cga25vd3MgaG93IHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZXMgZm9sbG93aW5nIE1hYyBTeXN0ZW0gNworY29udmVudGlvbnMuCisKK2RqcGVnJ3MgLW1hcCBzd2l0Y2ggaXMgbm93IGFibGUgdG8gcmVhZCByYXctZm9ybWF0IFBQTSBmaWxlcyByZWxpYWJseS4KKworY2pwZWcgLXByb2dyZXNzaXZlIC1yZXN0YXJ0IG5vIGxvbmdlciBnZW5lcmF0ZXMgYW55IHVubmVjZXNzYXJ5IERSSSBtYXJrZXJzLgorCitNdWx0aXBsZSBjYWxscyB0byBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBmb3IgYSBzaW5nbGUgSlBFRyBvYmplY3QKK25vIGxvbmdlciBsZWFrIG1lbW9yeS4KKworCitWZXJzaW9uIDZhICA3LUZlYi05NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGlicmFyeSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBtb2RpZmllZCB0byBkZXRlY3QgdmVyc2lvbiBtaXNtYXRjaGVzCithbmQgc3RydWN0IGZpZWxkIHBhY2tpbmcgbWlzbWF0Y2hlcyBiZXR3ZWVuIGxpYnJhcnkgYW5kIGNhbGxpbmcgYXBwbGljYXRpb24uCitUaGlzIGNoYW5nZSByZXF1aXJlcyBhcHBsaWNhdGlvbnMgdG8gYmUgcmVjb21waWxlZCwgYnV0IGRvZXMgbm90IHJlcXVpcmUKK2FueSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZSBjaGFuZ2UuCisKK0FsbCByb3V0aW5lIGRlY2xhcmF0aW9ucyBjaGFuZ2VkIHRvIHRoZSBzdHlsZSAiR0xPQkFMKHR5cGUpIG5hbWUgLi4uIiwKK3RoYXQgaXMsIEdMT0JBTCwgTE9DQUwsIE1FVEhPRERFRiwgRVhURVJOIGFyZSBub3cgbWFjcm9zIHRha2luZyB0aGUKK3JvdXRpbmUncyByZXR1cm4gdHlwZSBhcyBhbiBhcmd1bWVudC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYWRkCitNaWNyb3NvZnQtc3R5bGUgbGlua2FnZSBrZXl3b3JkcyB0byBhbGwgdGhlIHJvdXRpbmVzIGJ5IGNoYW5naW5nIGp1c3QKK3RoZXNlIG1hY3Jvcy4gIE5vdGUgdGhhdCBhbnkgYXBwbGljYXRpb24gY29kZSB0aGF0IHdhcyB1c2luZyB0aGVzZSBtYWNyb3MKK3dpbGwgaGF2ZSB0byBiZSBjaGFuZ2VkLgorCitEQ1QgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbm93IHN0b3JlZCBpbiBub3JtYWwgYXJyYXkgb3JkZXIKK3JhdGhlciB0aGFuIHppZ3phZyBvcmRlci4gIEFwcGxpY2F0aW9uIGNvZGUgdGhhdCBjYWxscyBqcGVnX2FkZF9xdWFudF90YWJsZSwKK29yIG90aGVyd2lzZSBtYW5pcHVsYXRlcyBxdWFudGl6YXRpb24gdGFibGVzIGRpcmVjdGx5LCB3aWxsIG5lZWQgdG8gYmUKK2NoYW5nZWQuICBJZiB5b3UgbmVlZCB0byBtYWtlIHN1Y2ggY29kZSB3b3JrIHdpdGggZWl0aGVyIG9sZGVyIG9yIG5ld2VyCit2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSwgYSB0ZXN0IGxpa2UgIiNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDYxIiBpcworcmVjb21tZW5kZWQuCisKK2RqcGVnJ3MgdHJhY2UgY2FwYWJpbGl0eSBub3cgZHVtcHMgRFFUIHRhYmxlcyBpbiBuYXR1cmFsIG9yZGVyLCBub3QgemlnemFnCitvcmRlci4gIFRoaXMgYWxsb3dzIHRoZSB0cmFjZSBvdXRwdXQgdG8gYmUgbWFkZSBpbnRvIGEgIi1xdGFibGVzIiBmaWxlCittb3JlIGVhc2lseS4KKworTmV3IHN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZXIgbW9kdWxlIGZvciB1c2Ugb24gQXBwbGUgTWFjaW50b3NoLgorCitGaXggYnVnIGluIGNqcGVnJ3MgLXNtb290aCBvcHRpb246IGxhc3Qgb25lIG9yIHR3byBzY2FubGluZXMgd291bGQgYmUKK2R1cGxpY2F0ZXMgb2YgdGhlIHByaW9yIGxpbmUgdW5sZXNzIHRoZSBpbWFnZSBoZWlnaHQgbW9kIDE2IHdhcyAxIG9yIDIuCisKK1JlcGFpciBtaW5vciBwcm9ibGVtcyBpbiBWTVMsIEJDQywgTUM2IG1ha2VmaWxlcy4KKworTmV3IGNvbmZpZ3VyZSBzY3JpcHQgYmFzZWQgb24gbGF0ZXN0IEdOVSBBdXRvY29uZi4KKworQ29ycmVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlIGZpbGVzIG5lZWRlZCBieSBNZXRyb1dlcmtzIEMgZm9yIGNjb21tYW5kKCkuCisKK051bWVyb3VzIHNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKworCitWZXJzaW9uIDYgIDItQXVnLTk1CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Byb2dyZXNzaXZlIEpQRUcgc3VwcG9ydDogbGlicmFyeSBjYW4gcmVhZCBhbmQgd3JpdGUgZnVsbCBwcm9ncmVzc2l2ZSBKUEVHCitmaWxlcy4gIEEgImJ1ZmZlcmVkIGltYWdlIiBtb2RlIHN1cHBvcnRzIGluY3JlbWVudGFsIGRlY29kaW5nIGZvciBvbi10aGUtZmx5CitkaXNwbGF5IG9mIHByb2dyZXNzaXZlIGltYWdlcy4gIFNpbXBseSByZWNvbXBpbGluZyBhbiBleGlzdGluZyBJSkctdjUtYmFzZWQKK2RlY29kZXIgd2l0aCB2NiBzaG91bGQgYWxsb3cgaXQgdG8gcmVhZCBwcm9ncmVzc2l2ZSBmaWxlcywgdGhvdWdoIG9mIGNvdXJzZQord2l0aG91dCBhbnkgc3BlY2lhbCBwcm9ncmVzc2l2ZSBkaXNwbGF5LgorCitOZXcgImpwZWd0cmFuIiBhcHBsaWNhdGlvbiBwZXJmb3JtcyBsb3NzbGVzcyB0cmFuc2NvZGluZyBiZXR3ZWVuIGRpZmZlcmVudAorSlBFRyBmb3JtYXRzOyBwcmltYXJpbHksIGl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmFzZWxpbmUgdG8gcHJvZ3Jlc3NpdmUKK0pQRUcgYW5kIHZpY2UgdmVyc2EuICBJbiBzdXBwb3J0IG9mIGpwZWd0cmFuLCB0aGUgbGlicmFyeSBub3cgYWxsb3dzIGxvc3NsZXNzCityZWFkaW5nIGFuZCB3cml0aW5nIG9mIEpQRUcgZmlsZXMgYXMgRENUIGNvZWZmaWNpZW50IGFycmF5cy4gIFRoaXMgYWJpbGl0eQorbWF5IGJlIG9mIHVzZSBpbiBvdGhlciBhcHBsaWNhdGlvbnMuCisKK05vdGVzIGZvciBwcm9ncmFtbWVyczoKKyogV2UgY2hhbmdlZCBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKSB0byBiZSBhYmxlIHRvIHN1c3BlbmQ7IHRoaXMgbWFrZXMgYWxsCitkZWNvZGluZyBtb2RlcyBhdmFpbGFibGUgdG8gc3VzcGVuZGluZy1pbnB1dCBhcHBsaWNhdGlvbnMuICBIb3dldmVyLAorZXhpc3RpbmcgYXBwbGljYXRpb25zIHRoYXQgdXNlIHN1c3BlbmRpbmcgaW5wdXQgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQKK3RvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4gIFlvdSBkb24ndCBuZWVkIHRvCitkbyBhbnl0aGluZyBpZiB5b3UgZG9uJ3QgdXNlIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZS4KKyogV2UgY2hhbmdlZCB0aGUgaW50ZXJmYWNlIHRvIHRoZSB2aXJ0dWFsIGFycmF5IHJvdXRpbmVzOiBhY2Nlc3NfdmlydF9hcnJheQorcm91dGluZXMgbm93IHRha2UgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHJvd3MgdG8gYWNjZXNzIHRoaXMgdGltZS4gIFRoZQorbGFzdCBwYXJhbWV0ZXIgdG8gcmVxdWVzdF92aXJ0X2FycmF5IHJvdXRpbmVzIGlzIG5vdyBpbnRlcnByZXRlZCBhcyB0aGUKK21heGltdW0gbnVtYmVyIG9mIHJvd3MgdGhhdCBtYXkgYmUgYWNjZXNzZWQgYXQgb25jZSwgYnV0IG5vdCBuZWNlc3NhcmlseQordGhlIGhlaWdodCBvZiBldmVyeSBhY2Nlc3MuCisKKworVmVyc2lvbiA1YiAgMTUtTWFyLTk1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29ycmVjdCBidWdzIHdpdGggZ3JheXNjYWxlIGltYWdlcyBoYXZpbmcgdl9zYW1wX2ZhY3RvciA+IDEuCisKK2pwZWdfd3JpdGVfcmF3X2RhdGEoKSBub3cgc3VwcG9ydHMgb3V0cHV0IHN1c3BlbnNpb24uCisKK0NvcnJlY3QgYnVncyBpbiAiY29uZmlndXJlIiBzY3JpcHQgZm9yIGNhc2Ugb2YgY29tcGlsaW5nIGluCithIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBvbmUgY29udGFpbmluZyB0aGUgc291cmNlIGZpbGVzLgorCitSZXBhaXIgYnVnIGluIGpxdWFudDEuYzogc29tZXRpbWVzIGRpZG4ndCB1c2UgYXMgbWFueSBjb2xvcnMgYXMgaXQgY291bGQuCisKK0JvcmxhbmQgQyBtYWtlZmlsZSBhbmQgamNvbmZpZyBmaWxlIHdvcmsgdW5kZXIgZWl0aGVyIE1TLURPUyBvciBPUy8yLgorCitNaXNjZWxsYW5lb3VzIGltcHJvdmVtZW50cyB0byBkb2N1bWVudGF0aW9uLgorCisKK1ZlcnNpb24gNWEgIDctRGVjLTk0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VkIGNvbG9yIGNvbnZlcnNpb24gcm91bmRvZmYgYmVoYXZpb3Igc28gdGhhdCBncmF5c2NhbGUgdmFsdWVzIGFyZQorcmVwcmVzZW50ZWQgZXhhY3RseS4gIChUaGlzIGNhdXNlcyB0ZXN0IGltYWdlIGZpbGVzIHRvIGNoYW5nZS4pCisKK01ha2Ugb3JkZXJlZCBkaXRoZXIgdXNlIDE2eDE2IGluc3RlYWQgb2YgNHg0IHBhdHRlcm4gZm9yIGEgc21hbGwgcXVhbGl0eQoraW1wcm92ZW1lbnQuCisKK05ldyBjb25maWd1cmUgc2NyaXB0IGJhc2VkIG9uIGxhdGVzdCBHTlUgQXV0b2NvbmYuCitGaXggY29uZmlndXJlIHNjcmlwdCB0byBoYW5kbGUgQ0ZMQUdTIGNvcnJlY3RseS4KK1JlbmFtZSAqLmF1dG8gZmlsZXMgdG8gKi5jZmcsIHNvIHRoYXQgY29uZmlndXJlIHNjcmlwdCBzdGlsbCB3b3JrcyBpZgorZmlsZSBuYW1lcyBoYXZlIGJlZW4gdHJ1bmNhdGVkIGZvciBET1MuCisKK0ZpeCBidWcgaW4gcmRibXAuYzogZGlkbid0IGFsbG93IGZvciBleHRyYSBkYXRhIGJldHdlZW4gaGVhZGVyIGFuZCBpbWFnZS4KKworTW9kaWZ5IHJkcHBtLmMvd3JwcG0uYyB0byBoYW5kbGUgMi1ieXRlIHJhdyBQUE0vUEdNIGZvcm1hdHMgZm9yIDEyLWJpdCBkYXRhLgorCitGaXggc2V2ZXJhbCBidWdzIGluIHJkcmxlLmMuCisKK05FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgb3B0aW9uIHdhcyBicm9rZW4uCisKK1JldmlzZSBqZXJyb3IuaC9qZXJyb3IuYyBmb3IgbW9yZSBmbGV4aWJpbGl0eSBpbiBtZXNzYWdlIHRhYmxlLgorCitSZXBhaXIgb3ZlcnNpZ2h0IGluIGptZW1uYW1lLmMgTk9fTUtURU1QIGNhc2U6IGZpbGUgY291bGQgYmUgdGhlcmUKK2J1dCB1bnJlYWRhYmxlLgorCisKK1ZlcnNpb24gNSAgMjQtU2VwLTk0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWZXJzaW9uIDUgcmVwcmVzZW50cyBhIG5lYXJseSBjb21wbGV0ZSByZWRlc2lnbiBhbmQgcmV3cml0ZSBvZiB0aGUgSUpHCitzb2Z0d2FyZS4gIE1ham9yIHVzZXItdmlzaWJsZSBjaGFuZ2VzIGluY2x1ZGU6CisgICogQXV0b21hdGljIGNvbmZpZ3VyYXRpb24gc2ltcGxpZmllcyBpbnN0YWxsYXRpb24gZm9yIG1vc3QgVW5peCBzeXN0ZW1zLgorICAqIEEgcmFuZ2Ugb2Ygc3BlZWQgdnMuIGltYWdlIHF1YWxpdHkgdHJhZGVvZmZzIGFyZSBzdXBwb3J0ZWQuCisgICAgVGhpcyBpbmNsdWRlcyByZXNpemluZyBvZiBhbiBpbWFnZSBkdXJpbmcgZGVjb21wcmVzc2lvbjogc2NhbGluZyBkb3duCisgICAgYnkgYSBmYWN0b3Igb2YgMS8yLCAxLzQsIG9yIDEvOCBpcyBoYW5kbGVkIHZlcnkgZWZmaWNpZW50bHkuCisgICogTmV3IHByb2dyYW1zIHJkanBnY29tIGFuZCB3cmpwZ2NvbSBhbGxvdyBpbnNlcnRpb24gYW5kIGV4dHJhY3Rpb24KKyAgICBvZiB0ZXh0IGNvbW1lbnRzIGluIGEgSlBFRyBmaWxlLgorCitUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcidzIGludGVyZmFjZSB0byB0aGUgbGlicmFyeSBoYXMgY2hhbmdlZCBjb21wbGV0ZWx5LgorTm90YWJsZSBpbXByb3ZlbWVudHMgaW5jbHVkZToKKyAgKiBXZSBoYXZlIGVsaW1pbmF0ZWQgdGhlIHVzZSBvZiBjYWxsYmFjayByb3V0aW5lcyBmb3IgaGFuZGxpbmcgdGhlCisgICAgdW5jb21wcmVzc2VkIGltYWdlIGRhdGEuICBUaGUgYXBwbGljYXRpb24gbm93IHNlZXMgdGhlIGxpYnJhcnkgYXMgYQorICAgIHNldCBvZiByb3V0aW5lcyB0aGF0IGl0IGNhbGxzIHRvIHJlYWQgb3Igd3JpdGUgaW1hZ2UgZGF0YSBvbiBhCisgICAgc2NhbmxpbmUtYnktc2NhbmxpbmUgYmFzaXMuCisgICogVGhlIGFwcGxpY2F0aW9uIGltYWdlIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW4gYSBjb252ZW50aW9uYWwgaW50ZXJsZWF2ZWQtCisgICAgcGl4ZWwgZm9ybWF0LCByYXRoZXIgdGhhbiBhcyBhIHNlcGFyYXRlIGFycmF5IGZvciBlYWNoIGNvbG9yIGNoYW5uZWwuCisgICAgVGhpcyBjYW4gc2F2ZSBhIGNvcHlpbmcgc3RlcCBpbiBtYW55IHByb2dyYW1zLgorICAqIFRoZSBoYW5kbGluZyBvZiBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gY2xlYW5lZCB1cDogdGhlIGFwcGxpY2F0aW9uIGNhbgorICAgIHN1cHBseSByb3V0aW5lcyB0byBzb3VyY2Ugb3Igc2luayB0aGUgY29tcHJlc3NlZCBkYXRhLiAgSXQgaXMgcG9zc2libGUgdG8KKyAgICBzdXNwZW5kIHByb2Nlc3Npbmcgb24gc291cmNlL3NpbmsgYnVmZmVyIG92ZXJydW4sIGFsdGhvdWdoIHRoaXMgaXMgbm90CisgICAgc3VwcG9ydGVkIGluIGFsbCBvcGVyYXRpbmcgbW9kZXMuCisgICogQWxsIHN0YXRpYyBzdGF0ZSBoYXMgYmVlbiBlbGltaW5hdGVkIGZyb20gdGhlIGxpYnJhcnksIHNvIHRoYXQgbXVsdGlwbGUKKyAgICBpbnN0YW5jZXMgb2YgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBjYW4gYmUgYWN0aXZlIGNvbmN1cnJlbnRseS4KKyAgKiBKUEVHIGFiYnJldmlhdGVkIGRhdGFzdHJlYW0gZm9ybWF0cyBhcmUgc3VwcG9ydGVkLCBpZSwgcXVhbnRpemF0aW9uIGFuZAorICAgIEh1ZmZtYW4gdGFibGVzIGNhbiBiZSBzdG9yZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBpbWFnZSBkYXRhLgorICAqIEFuZCBub3Qgb25seSB0aGF0LCBidXQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkgaGFzIGltcHJvdmVkCisgICAgY29uc2lkZXJhYmx5IQorCisKK1RoZSBsYXN0IHdpZGVseSB1c2VkIHJlbGVhc2UgYmVmb3JlIHRoZSB2ZXJzaW9uIDUgcmV3cml0ZSB3YXMgdmVyc2lvbiA0QSBvZgorMTgtRmViLTkzLiAgQ2hhbmdlIGxvZ3MgYmVmb3JlIHRoYXQgcG9pbnQgaGF2ZSBiZWVuIGRpc2NhcmRlZCwgc2luY2UgdGhleQorYXJlIG5vdCBvZiBtdWNoIGludGVyZXN0IGFmdGVyIHRoZSByZXdyaXRlLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY2pwZWcuMSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NqcGVnLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlNDdiYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NqcGVnLjEKQEAgLTAsMCArMSwzNTQgQEAKKy5USCBDSlBFRyAxICIxOCBNYXJjaCAyMDE3IgorLlNIIE5BTUUKK2NqcGVnIFwtIGNvbXByZXNzIGFuIGltYWdlIGZpbGUgdG8gYSBKUEVHIGZpbGUKKy5TSCBTWU5PUFNJUworLkIgY2pwZWcKK1sKKy5JIG9wdGlvbnMKK10KK1sKKy5JIGZpbGVuYW1lCitdCisuTFAKKy5TSCBERVNDUklQVElPTgorLkxQCisuQiBjanBlZworY29tcHJlc3NlcyB0aGUgbmFtZWQgaW1hZ2UgZmlsZSwgb3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIG5vIGZpbGUgaXMKK25hbWVkLCBhbmQgcHJvZHVjZXMgYSBKUEVHL0pGSUYgZmlsZSBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgaW5wdXQgZmlsZSBmb3JtYXRzIGFyZTogUFBNIChQQk1QTFVTIGNvbG9yCitmb3JtYXQpLCBQR00gKFBCTVBMVVMgZ3JheXNjYWxlIGZvcm1hdCksIEJNUCwgVGFyZ2EsIGFuZCBSTEUgKFV0YWggUmFzdGVyCitUb29sa2l0IGZvcm1hdCkuICAoUkxFIGlzIHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBVUlQgbGlicmFyeSBpcyBhdmFpbGFibGUuKQorLlNIIE9QVElPTlMKK0FsbCBzd2l0Y2ggbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkOyBmb3IgZXhhbXBsZSwKKy5CIFwtZ3JheXNjYWxlCittYXkgYmUgd3JpdHRlbgorLkIgXC1ncmF5CitvcgorLkJSIFwtZ3IgLgorTW9zdCBvZiB0aGUgImJhc2ljIiBzd2l0Y2hlcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gYXMgbGl0dGxlIGFzIG9uZSBsZXR0ZXIuCitVcHBlciBhbmQgbG93ZXIgY2FzZSBhcmUgZXF1aXZhbGVudCAodGh1cworLkIgXC1CTVAKK2lzIHRoZSBzYW1lIGFzCisuQlIgXC1ibXAgKS4KK0JyaXRpc2ggc3BlbGxpbmdzIGFyZSBhbHNvIGFjY2VwdGVkIChlLmcuLAorLkJSIFwtZ3JleXNjYWxlICksCit0aG91Z2ggZm9yIGJyZXZpdHkgdGhlc2UgYXJlIG5vdCBtZW50aW9uZWQgYmVsb3cuCisuUFAKK1RoZSBiYXNpYyBzd2l0Y2hlcyBhcmU6CisuVFAKKy5CSSBcLXF1YWxpdHkgIiBOWywuLi5dIgorU2NhbGUgcXVhbnRpemF0aW9uIHRhYmxlcyB0byBhZGp1c3QgaW1hZ2UgcXVhbGl0eS4gIFF1YWxpdHkgaXMgMCAod29yc3QpIHRvCisxMDAgKGJlc3QpOyBkZWZhdWx0IGlzIDc1LiAgKFNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvLikKKy5UUAorLkIgXC1ncmF5c2NhbGUKK0NyZWF0ZSBtb25vY2hyb21lIEpQRUcgZmlsZSBmcm9tIGNvbG9yIGlucHV0LiAgQmUgc3VyZSB0byB1c2UgdGhpcyBzd2l0Y2ggd2hlbgorY29tcHJlc3NpbmcgYSBncmF5c2NhbGUgQk1QIGZpbGUsIGJlY2F1c2UKKy5CIGNqcGVnCitpc24ndCBicmlnaHQgZW5vdWdoIHRvIG5vdGljZSB3aGV0aGVyIGEgQk1QIGZpbGUgdXNlcyBvbmx5IHNoYWRlcyBvZiBncmF5LgorQnkgc2F5aW5nCisuQlIgXC1ncmF5c2NhbGUsCit5b3UnbGwgZ2V0IGEgc21hbGxlciBKUEVHIGZpbGUgdGhhdCB0YWtlcyBsZXNzIHRpbWUgdG8gcHJvY2Vzcy4KKy5UUAorLkIgXC1yZ2IKK0NyZWF0ZSBSR0IgSlBFRyBmaWxlLgorVXNpbmcgdGhpcyBzd2l0Y2ggc3VwcHJlc3NlcyB0aGUgY29udmVyc2lvbiBmcm9tIFJHQgorY29sb3JzcGFjZSBpbnB1dCB0byB0aGUgZGVmYXVsdCBZQ2JDciBKUEVHIGNvbG9yc3BhY2UuCisuVFAKKy5CIFwtb3B0aW1pemUKK1BlcmZvcm0gb3B0aW1pemF0aW9uIG9mIGVudHJvcHkgZW5jb2RpbmcgcGFyYW1ldGVycy4gIFdpdGhvdXQgdGhpcywgZGVmYXVsdAorZW5jb2RpbmcgcGFyYW1ldGVycyBhcmUgdXNlZC4KKy5CIFwtb3B0aW1pemUKK3VzdWFsbHkgbWFrZXMgdGhlIEpQRUcgZmlsZSBhIGxpdHRsZSBzbWFsbGVyLCBidXQKKy5CIGNqcGVnCitydW5zIHNvbWV3aGF0IHNsb3dlciBhbmQgbmVlZHMgbXVjaCBtb3JlIG1lbW9yeS4gIEltYWdlIHF1YWxpdHkgYW5kIHNwZWVkIG9mCitkZWNvbXByZXNzaW9uIGFyZSB1bmFmZmVjdGVkIGJ5CisuQlIgXC1vcHRpbWl6ZSAuCisuVFAKKy5CIFwtcHJvZ3Jlc3NpdmUKK0NyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGUgKHNlZSBiZWxvdykuCisuVFAKKy5CIFwtdGFyZ2EKK0lucHV0IGZpbGUgaXMgVGFyZ2EgZm9ybWF0LiAgVGFyZ2EgZmlsZXMgdGhhdCBjb250YWluIGFuICJpZGVudGlmaWNhdGlvbiIKK2ZpZWxkIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVjb2duaXplZCBieQorLkJSIGNqcGVnIDsKK2ZvciBzdWNoIGZpbGVzIHlvdSBtdXN0IHNwZWNpZnkKKy5CIFwtdGFyZ2EKK3RvIG1ha2UKKy5CIGNqcGVnCit0cmVhdCB0aGUgaW5wdXQgYXMgVGFyZ2EgZm9ybWF0LgorRm9yIG1vc3QgVGFyZ2EgZmlsZXMsIHlvdSB3b24ndCBuZWVkIHRoaXMgc3dpdGNoLgorLlBQCitUaGUKKy5CIFwtcXVhbGl0eQorc3dpdGNoIGxldHMgeW91IHRyYWRlIG9mZiBjb21wcmVzc2VkIGZpbGUgc2l6ZSBhZ2FpbnN0IHF1YWxpdHkgb2YgdGhlCityZWNvbnN0cnVjdGVkIGltYWdlOiB0aGUgaGlnaGVyIHRoZSBxdWFsaXR5IHNldHRpbmcsIHRoZSBsYXJnZXIgdGhlIEpQRUcgZmlsZSwKK2FuZCB0aGUgY2xvc2VyIHRoZSBvdXRwdXQgaW1hZ2Ugd2lsbCBiZSB0byB0aGUgb3JpZ2luYWwgaW5wdXQuICBOb3JtYWxseSB5b3UKK3dhbnQgdG8gdXNlIHRoZSBsb3dlc3QgcXVhbGl0eSBzZXR0aW5nIChzbWFsbGVzdCBmaWxlKSB0aGF0IGRlY29tcHJlc3NlcyBpbnRvCitzb21ldGhpbmcgdmlzdWFsbHkgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgb3JpZ2luYWwgaW1hZ2UuICBGb3IgdGhpcworcHVycG9zZSB0aGUgcXVhbGl0eSBzZXR0aW5nIHNob3VsZCBnZW5lcmFsbHkgYmUgYmV0d2VlbiA1MCBhbmQgOTUgKHRoZSBkZWZhdWx0CitpcyA3NSkgZm9yIHBob3RvZ3JhcGhpYyBpbWFnZXMuICBJZiB5b3Ugc2VlIGRlZmVjdHMgYXQKKy5CIFwtcXVhbGl0eQorNzUsIHRoZW4gZ28gdXAgNSBvciAxMCBjb3VudHMgYXQgYSB0aW1lIHVudGlsIHlvdSBhcmUgaGFwcHkgd2l0aCB0aGUgb3V0cHV0CitpbWFnZS4gIChUaGUgb3B0aW1hbCBzZXR0aW5nIHdpbGwgdmFyeSBmcm9tIG9uZSBpbWFnZSB0byBhbm90aGVyLikKKy5QUAorLkIgXC1xdWFsaXR5CisxMDAgd2lsbCBnZW5lcmF0ZSBhIHF1YW50aXphdGlvbiB0YWJsZSBvZiBhbGwgMSdzLCBtaW5pbWl6aW5nIGxvc3MgaW4gdGhlCitxdWFudGl6YXRpb24gc3RlcCAoYnV0IHRoZXJlIGlzIHN0aWxsIGluZm9ybWF0aW9uIGxvc3MgaW4gc3Vic2FtcGxpbmcsIGFzIHdlbGwKK2FzIHJvdW5kb2ZmIGVycm9yLikgIEZvciBtb3N0IGltYWdlcywgc3BlY2lmeWluZyBhIHF1YWxpdHkgdmFsdWUgYWJvdmUKK2Fib3V0IDk1IHdpbGwgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSBkcmFtYXRpY2FsbHksIGFuZCB3aGlsZQordGhlIHF1YWxpdHkgZ2FpbiBmcm9tIHRoZXNlIGhpZ2hlciBxdWFsaXR5IHZhbHVlcyBpcyBtZWFzdXJhYmxlICh1c2luZyBtZXRyaWNzCitzdWNoIGFzIFBTTlIgb3IgU1NJTSksIGl0IGlzIHJhcmVseSBwZXJjZWl2YWJsZSBieSBodW1hbiB2aXNpb24uCisuUFAKK0luIHRoZSBvdGhlciBkaXJlY3Rpb24sIHF1YWxpdHkgdmFsdWVzIGJlbG93IDUwIHdpbGwgcHJvZHVjZSB2ZXJ5IHNtYWxsIGZpbGVzCitvZiBsb3cgaW1hZ2UgcXVhbGl0eS4gIFNldHRpbmdzIGFyb3VuZCA1IHRvIDEwIG1pZ2h0IGJlIHVzZWZ1bCBpbiBwcmVwYXJpbmcgYW4KK2luZGV4IG9mIGEgbGFyZ2UgaW1hZ2UgbGlicmFyeSwgZm9yIGV4YW1wbGUuICBUcnkKKy5CIFwtcXVhbGl0eQorMiAob3Igc28pIGZvciBzb21lIGFtdXNpbmcgQ3ViaXN0IGVmZmVjdHMuICAoTm90ZTogcXVhbGl0eQordmFsdWVzIGJlbG93IGFib3V0IDI1IGdlbmVyYXRlIDItYnl0ZSBxdWFudGl6YXRpb24gdGFibGVzLCB3aGljaCBhcmUKK2NvbnNpZGVyZWQgb3B0aW9uYWwgaW4gdGhlIEpQRUcgc3RhbmRhcmQuCisuQiBjanBlZworZW1pdHMgYSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB5b3UgZ2l2ZSBzdWNoIGEgcXVhbGl0eSB2YWx1ZSwgYmVjYXVzZSBzb21lCitvdGhlciBKUEVHIHByb2dyYW1zIG1heSBiZSB1bmFibGUgdG8gZGVjb2RlIHRoZSByZXN1bHRpbmcgZmlsZS4gIFVzZQorLkIgXC1iYXNlbGluZQoraWYgeW91IG5lZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYXQgbG93IHF1YWxpdHkgdmFsdWVzLikKKy5QUAorVGhlIFxmQi1xdWFsaXR5XGZSIG9wdGlvbiBoYXMgYmVlbiBleHRlbmRlZCBpbiB0aGlzIHZlcnNpb24gb2YgXGZCY2pwZWdcZlIgdG8KK3N1cHBvcnQgc2VwYXJhdGUgcXVhbGl0eSBzZXR0aW5ncyBmb3IgbHVtaW5hbmNlIGFuZCBjaHJvbWluYW5jZSAob3IsIGluCitnZW5lcmFsLCBzZXBhcmF0ZSBzZXR0aW5ncyBmb3IgZXZlcnkgcXVhbnRpemF0aW9uIHRhYmxlIHNsb3QuKSAgVGhlIHByaW5jaXBsZQoraXMgdGhlIHNhbWUgYXMgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmc6ICBzaW5jZSB0aGUgaHVtYW4gZXllIGlzIG1vcmUgc2Vuc2l0aXZlCit0byBzcGF0aWFsIGNoYW5nZXMgaW4gYnJpZ2h0bmVzcyB0aGFuIHNwYXRpYWwgY2hhbmdlcyBpbiBjb2xvciwgdGhlIGNocm9taW5hbmNlCitjb21wb25lbnRzIGNhbiBiZSBxdWFudGl6ZWQgbW9yZSB0aGFuIHRoZSBsdW1pbmFuY2UgY29tcG9uZW50cyB3aXRob3V0CitpbmN1cnJpbmcgYW55IHZpc2libGUgaW1hZ2UgcXVhbGl0eSBsb3NzLiAgSG93ZXZlciwgdW5saWtlIHN1YnNhbXBsaW5nLCB0aGlzCitmZWF0dXJlIHJlZHVjZXMgZGF0YSBpbiB0aGUgZnJlcXVlbmN5IGRvbWFpbiBpbnN0ZWFkIG9mIHRoZSBzcGF0aWFsIGRvbWFpbiwKK3doaWNoIGFsbG93cyBmb3IgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbC4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpbgorcXVhbGl0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zLCBmb3Igd2hpY2ggdGhlIGFydGlmYWN0cyBnZW5lcmF0ZWQgYnkKK3N1YnNhbXBsaW5nIG1heSBiZSB1bmFjY2VwdGFibGUuCisuUFAKK1RoZSBcZkItcXVhbGl0eVxmUiBvcHRpb24gYWNjZXB0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMsIHdoaWNoCityZXNwZWN0aXZlbHkgcmVmZXIgdG8gdGhlIHF1YWxpdHkgbGV2ZWxzIHRoYXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZQorcXVhbnRpemF0aW9uIHRhYmxlIHNsb3RzLiAgSWYgdGhlcmUgYXJlIG1vcmUgcS10YWJsZSBzbG90cyB0aGFuIHBhcmFtZXRlcnMsCit0aGVuIHRoZSBsYXN0IHBhcmFtZXRlciBpcyByZXBsaWNhdGVkLiAgVGh1cywgaWYgb25seSBvbmUgcXVhbGl0eSBwYXJhbWV0ZXIgaXMKK2dpdmVuLCB0aGlzIGlzIHVzZWQgZm9yIGJvdGggbHVtaW5hbmNlIGFuZCBjaHJvbWluYW5jZSAoc2xvdHMgMCBhbmQgMSwKK3Jlc3BlY3RpdmVseSksIHByZXNlcnZpbmcgdGhlIGxlZ2FjeSBiZWhhdmlvciBvZiBjanBlZyB2NmIgYW5kIHByaW9yLgorTW9yZSAob3IgY3VzdG9taXplZCkgcXVhbnRpemF0aW9uIHRhYmxlcyBjYW4gYmUgc2V0IHdpdGggdGhlIFxmQi1xdGFibGVzXGZSCitvcHRpb24gYW5kIGFzc2lnbmVkIHRvIGNvbXBvbmVudHMgd2l0aCB0aGUgXGZCLXFzbG90c1xmUiBvcHRpb24gKHNlZSB0aGUKKyJ3aXphcmQiIHN3aXRjaGVzIGJlbG93LikKKy5QUAorSlBFRyBmaWxlcyBnZW5lcmF0ZWQgd2l0aCBzZXBhcmF0ZSBsdW1pbmFuY2UgYW5kIGNocm9taW5hbmNlIHF1YWxpdHkgYXJlIGZ1bGx5Citjb21wbGlhbnQgd2l0aCBzdGFuZGFyZCBKUEVHIGRlY29kZXJzLgorLlBQCisuQlIgQ0FVVElPTjoKK0ZvciB0aGlzIHNldHRpbmcgdG8gYmUgdXNlZnVsLCBiZSBzdXJlIHRvIHBhc3MgYW4gYXJndW1lbnQgb2YgXGZCLXNhbXBsZSAxeDFcZlIKK3RvIFxmQmNqcGVnXGZSIHRvIGRpc2FibGUgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0CitzdWJzYW1wbGluZyBsZXZlbCAoMngyLCBBS0EgIjQ6MjowIikgd2lsbCBiZSB1c2VkLgorLlBQCitUaGUKKy5CIFwtcHJvZ3Jlc3NpdmUKK3N3aXRjaCBjcmVhdGVzIGEgInByb2dyZXNzaXZlIEpQRUciIGZpbGUuICBJbiB0aGlzIHR5cGUgb2YgSlBFRyBmaWxlLCB0aGUgZGF0YQoraXMgc3RvcmVkIGluIG11bHRpcGxlIHNjYW5zIG9mIGluY3JlYXNpbmcgcXVhbGl0eS4gIElmIHRoZSBmaWxlIGlzIGJlaW5nCit0cmFuc21pdHRlZCBvdmVyIGEgc2xvdyBjb21tdW5pY2F0aW9ucyBsaW5rLCB0aGUgZGVjb2RlciBjYW4gdXNlIHRoZSBmaXJzdAorc2NhbiB0byBkaXNwbGF5IGEgbG93LXF1YWxpdHkgaW1hZ2UgdmVyeSBxdWlja2x5LCBhbmQgY2FuIHRoZW4gaW1wcm92ZSB0aGUKK2Rpc3BsYXkgd2l0aCBlYWNoIHN1YnNlcXVlbnQgc2Nhbi4gIFRoZSBmaW5hbCBpbWFnZSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gYQorc3RhbmRhcmQgSlBFRyBmaWxlIG9mIHRoZSBzYW1lIHF1YWxpdHkgc2V0dGluZywgYW5kIHRoZSB0b3RhbCBmaWxlIHNpemUgaXMKK2Fib3V0IHRoZSBzYW1lIC0tLSBvZnRlbiBhIGxpdHRsZSBzbWFsbGVyLgorLlBQCitTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6CisuVFAKKy5CIFwtYXJpdGhtZXRpYworVXNlIGFyaXRobWV0aWMgY29kaW5nLgorLkIgQ2F1dGlvbjoKK2FyaXRobWV0aWMgY29kZWQgSlBFRyBpcyBub3QgeWV0IHdpZGVseSBpbXBsZW1lbnRlZCwgc28gbWFueSBkZWNvZGVycyB3aWxsIGJlCit1bmFibGUgdG8gdmlldyBhbiBhcml0aG1ldGljIGNvZGVkIEpQRUcgZmlsZSBhdCBhbGwuCisuVFAKKy5CIFwtZGN0IGludAorVXNlIGludGVnZXIgRENUIG1ldGhvZCAoZGVmYXVsdCkuCisuVFAKKy5CIFwtZGN0IGZhc3QKK1VzZSBmYXN0IGludGVnZXIgRENUIChsZXNzIGFjY3VyYXRlKS4KK0luIGxpYmpwZWctdHVyYm8sIHRoZSBmYXN0IG1ldGhvZCBpcyBnZW5lcmFsbHkgYWJvdXQgNS0xNSUgZmFzdGVyIHRoYW4gdGhlIGludAorbWV0aG9kIHdoZW4gdXNpbmcgdGhlIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zIChyZXN1bHRzIG1heSB2YXJ5IHdpdGggb3RoZXIKK1NJTUQgaW1wbGVtZW50YXRpb25zLCBvciB3aGVuIHVzaW5nIGxpYmpwZWctdHVyYm8gd2l0aG91dCBTSU1EIGV4dGVuc2lvbnMuKQorRm9yIHF1YWxpdHkgbGV2ZWxzIG9mIDkwIGFuZCBiZWxvdywgdGhlcmUgc2hvdWxkIGJlIGxpdHRsZSBvciBubyBwZXJjZXB0aWJsZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gYWxnb3JpdGhtcy4gIEZvciBxdWFsaXR5IGxldmVscyBhYm92ZSA5MCwgaG93ZXZlciwKK3RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZhc3QgYW5kIHRoZSBpbnQgbWV0aG9kcyBiZWNvbWVzIG1vcmUgcHJvbm91bmNlZC4KK1dpdGggcXVhbGl0eT05NywgZm9yIGluc3RhbmNlLCB0aGUgZmFzdCBtZXRob2QgaW5jdXJzIGdlbmVyYWxseSBhYm91dCBhIDEtMyBkQgorbG9zcyAoaW4gUFNOUikgcmVsYXRpdmUgdG8gdGhlIGludCBtZXRob2QsIGJ1dCB0aGlzIGNhbiBiZSBsYXJnZXIgZm9yIHNvbWUKK2ltYWdlcy4gIERvIG5vdCB1c2UgdGhlIGZhc3QgbWV0aG9kIHdpdGggcXVhbGl0eSBsZXZlbHMgYWJvdmUgOTcuICBUaGUKK2FsZ29yaXRobSBvZnRlbiBkZWdlbmVyYXRlcyBhdCBxdWFsaXR5PTk4IGFuZCBhYm92ZSBhbmQgY2FuIGFjdHVhbGx5IHByb2R1Y2UgYQorbW9yZSBsb3NzeSBpbWFnZSB0aGFuIGlmIGxvd2VyIHF1YWxpdHkgbGV2ZWxzIGhhZCBiZWVuIHVzZWQuICBBbHNvLCBpbgorbGlianBlZy10dXJibywgdGhlIGZhc3QgbWV0aG9kIGlzIG5vdCBmdWxseSBhY2NlbGVyYXRlZCBmb3IgcXVhbGl0eSBsZXZlbHMKK2Fib3ZlIDk3LCBzbyBpdCB3aWxsIGJlIHNsb3dlciB0aGFuIHRoZSBpbnQgbWV0aG9kLgorLlRQCisuQiBcLWRjdCBmbG9hdAorVXNlIGZsb2F0aW5nLXBvaW50IERDVCBtZXRob2QuCitUaGUgZmxvYXQgbWV0aG9kIGlzIG1haW5seSBhIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcyBub3QgcHJvZHVjZSBzaWduaWZpY2FudGx5Cittb3JlIGFjY3VyYXRlIHJlc3VsdHMgdGhhbiB0aGUgaW50IG1ldGhvZCwgYW5kIGl0IGlzIG11Y2ggc2xvd2VyLiAgVGhlIGZsb2F0CittZXRob2QgbWF5IGFsc28gZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiBkaWZmZXJlbnQgbWFjaGluZXMgZHVlIHRvIHZhcnlpbmcKK3JvdW5kb2ZmIGJlaGF2aW9yLCB3aGVyZWFzIHRoZSBpbnRlZ2VyIG1ldGhvZHMgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBvbgorYWxsIG1hY2hpbmVzLgorLlRQCisuQkkgXC1pY2MgIiBmaWxlIgorRW1iZWQgSUNDIGNvbG9yIG1hbmFnZW1lbnQgcHJvZmlsZSBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBmaWxlLgorLlRQCisuQkkgXC1yZXN0YXJ0ICIgTiIKK0VtaXQgYSBKUEVHIHJlc3RhcnQgbWFya2VyIGV2ZXJ5IE4gTUNVIHJvd3MsIG9yIGV2ZXJ5IE4gTUNVIGJsb2NrcyBpZiAiQiIgaXMKK2F0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisuQiBcLXJlc3RhcnQgMAorKHRoZSBkZWZhdWx0KSBtZWFucyBubyByZXN0YXJ0IG1hcmtlcnMuCisuVFAKKy5CSSBcLXNtb290aCAiIE4iCitTbW9vdGggdGhlIGlucHV0IGltYWdlIHRvIGVsaW1pbmF0ZSBkaXRoZXJpbmcgbm9pc2UuICBOLCByYW5naW5nIGZyb20gMSB0bworMTAwLCBpbmRpY2F0ZXMgdGhlIHN0cmVuZ3RoIG9mIHNtb290aGluZy4gIDAgKHRoZSBkZWZhdWx0KSBtZWFucyBubyBzbW9vdGhpbmcuCisuVFAKKy5CSSBcLW1heG1lbW9yeSAiIE4iCitTZXQgbGltaXQgZm9yIGFtb3VudCBvZiBtZW1vcnkgdG8gdXNlIGluIHByb2Nlc3NpbmcgbGFyZ2UgaW1hZ2VzLiAgVmFsdWUgaXMKK2luIHRob3VzYW5kcyBvZiBieXRlcywgb3IgbWlsbGlvbnMgb2YgYnl0ZXMgaWYgIk0iIGlzIGF0dGFjaGVkIHRvIHRoZQorbnVtYmVyLiAgRm9yIGV4YW1wbGUsCisuQiBcLW1heCA0bQorc2VsZWN0cyA0MDAwMDAwIGJ5dGVzLiAgSWYgbW9yZSBzcGFjZSBpcyBuZWVkZWQsIGFuIGVycm9yIHdpbGwgb2NjdXIuCisuVFAKKy5CSSBcLW91dGZpbGUgIiBuYW1lIgorU2VuZCBvdXRwdXQgaW1hZ2UgdG8gdGhlIG5hbWVkIGZpbGUsIG5vdCB0byBzdGFuZGFyZCBvdXRwdXQuCisuVFAKKy5CSSBcLW1lbWRzdAorQ29tcHJlc3MgdG8gbWVtb3J5IGluc3RlYWQgb2YgYSBmaWxlLiAgVGhpcyBmZWF0dXJlIHdhcyBpbXBsZW1lbnRlZCBtYWlubHkgYXMgYQord2F5IG9mIHRlc3RpbmcgdGhlIGluLW1lbW9yeSBkZXN0aW5hdGlvbiBtYW5hZ2VyIChqcGVnX21lbV9kZXN0KCkpLCBidXQgaXQgaXMKK2Fsc28gdXNlZnVsIGZvciBiZW5jaG1hcmtpbmcsIHNpbmNlIGl0IHJlZHVjZXMgdGhlIEkvTyBvdmVyaGVhZC4KKy5UUAorLkIgXC12ZXJib3NlCitFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlCisuQlIgXC12ICdzCitnaXZlIG1vcmUgb3V0cHV0LiAgQWxzbywgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGF0IHN0YXJ0dXAuCisuVFAKKy5CIFwtZGVidWcKK1NhbWUgYXMKKy5CUiBcLXZlcmJvc2UgLgorLlRQCisuQiBcLXZlcnNpb24KK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuCisuUFAKK1RoZQorLkIgXC1yZXN0YXJ0CitvcHRpb24gaW5zZXJ0cyBleHRyYSBtYXJrZXJzIHRoYXQgYWxsb3cgYSBKUEVHIGRlY29kZXIgdG8gcmVzeW5jaHJvbml6ZSBhZnRlcgorYSB0cmFuc21pc3Npb24gZXJyb3IuICBXaXRob3V0IHJlc3RhcnQgbWFya2VycywgYW55IGRhbWFnZSB0byBhIGNvbXByZXNzZWQKK2ZpbGUgd2lsbCB1c3VhbGx5IHJ1aW4gdGhlIGltYWdlIGZyb20gdGhlIHBvaW50IG9mIHRoZSBlcnJvciB0byB0aGUgZW5kIG9mIHRoZQoraW1hZ2U7IHdpdGggcmVzdGFydCBtYXJrZXJzLCB0aGUgZGFtYWdlIGlzIHVzdWFsbHkgY29uZmluZWQgdG8gdGhlIHBvcnRpb24gb2YKK3RoZSBpbWFnZSB1cCB0byB0aGUgbmV4dCByZXN0YXJ0IG1hcmtlci4gIE9mIGNvdXJzZSwgdGhlIHJlc3RhcnQgbWFya2Vycworb2NjdXB5IGV4dHJhIHNwYWNlLiAgV2UgcmVjb21tZW5kCisuQiBcLXJlc3RhcnQgMQorZm9yIGltYWdlcyB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQgYWNyb3NzIHVucmVsaWFibGUgbmV0d29ya3Mgc3VjaCBhcyBVc2VuZXQuCisuUFAKK1RoZQorLkIgXC1zbW9vdGgKK29wdGlvbiBmaWx0ZXJzIHRoZSBpbnB1dCB0byBlbGltaW5hdGUgZmluZS1zY2FsZSBub2lzZS4gIFRoaXMgaXMgb2Z0ZW4gdXNlZnVsCit3aGVuIGNvbnZlcnRpbmcgZGl0aGVyZWQgaW1hZ2VzIHRvIEpQRUc6IGEgbW9kZXJhdGUgc21vb3RoaW5nIGZhY3RvciBvZiAxMCB0bworNTAgZ2V0cyByaWQgb2YgZGl0aGVyaW5nIHBhdHRlcm5zIGluIHRoZSBpbnB1dCBmaWxlLCByZXN1bHRpbmcgaW4gYSBzbWFsbGVyCitKUEVHIGZpbGUgYW5kIGEgYmV0dGVyLWxvb2tpbmcgaW1hZ2UuICBUb28gbGFyZ2UgYSBzbW9vdGhpbmcgZmFjdG9yIHdpbGwKK3Zpc2libHkgYmx1ciB0aGUgaW1hZ2UsIGhvd2V2ZXIuCisuUFAKK1N3aXRjaGVzIGZvciB3aXphcmRzOgorLlRQCisuQiBcLWJhc2VsaW5lCitGb3JjZSBiYXNlbGluZS1jb21wYXRpYmxlIHF1YW50aXphdGlvbiB0YWJsZXMgdG8gYmUgZ2VuZXJhdGVkLiAgVGhpcyBjbGFtcHMKK3F1YW50aXphdGlvbiB2YWx1ZXMgdG8gOCBiaXRzIGV2ZW4gYXQgbG93IHF1YWxpdHkgc2V0dGluZ3MuICAoVGhpcyBzd2l0Y2ggaXMKK3Bvb3JseSBuYW1lZCwgc2luY2UgaXQgZG9lcyBub3QgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyBhY3R1YWxseSBiYXNlbGluZQorSlBFRy4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZQorLkIgXC1iYXNlbGluZQorYW5kCisuQiBcLXByb2dyZXNzaXZlCit0b2dldGhlci4pCisuVFAKKy5CSSBcLXF0YWJsZXMgIiBmaWxlIgorVXNlIHRoZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIHRoZSBzcGVjaWZpZWQgdGV4dCBmaWxlLgorLlRQCisuQkkgXC1xc2xvdHMgIiBOWywuLi5dIgorU2VsZWN0IHdoaWNoIHF1YW50aXphdGlvbiB0YWJsZSB0byB1c2UgZm9yIGVhY2ggY29sb3IgY29tcG9uZW50LgorLlRQCisuQkkgXC1zYW1wbGUgIiBIeFZbLC4uLl0iCitTZXQgSlBFRyBzYW1wbGluZyBmYWN0b3JzIGZvciBlYWNoIGNvbG9yIGNvbXBvbmVudC4KKy5UUAorLkJJIFwtc2NhbnMgIiBmaWxlIgorVXNlIHRoZSBzY2FuIHNjcmlwdCBnaXZlbiBpbiB0aGUgc3BlY2lmaWVkIHRleHQgZmlsZS4KKy5QUAorVGhlICJ3aXphcmQiIHN3aXRjaGVzIGFyZSBpbnRlbmRlZCBmb3IgZXhwZXJpbWVudGF0aW9uIHdpdGggSlBFRy4gIElmIHlvdQorZG9uJ3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIFxmQmRvbid0IHVzZSB0aGVtXGZSLiAgVGhlc2Ugc3dpdGNoZXMgYXJlCitkb2N1bWVudGVkIGZ1cnRoZXIgaW4gdGhlIGZpbGUgd2l6YXJkLnR4dC4KKy5TSCBFWEFNUExFUworLkxQCitUaGlzIGV4YW1wbGUgY29tcHJlc3NlcyB0aGUgUFBNIGZpbGUgZm9vLnBwbSB3aXRoIGEgcXVhbGl0eSBmYWN0b3Igb2YKKzYwIGFuZCBzYXZlcyB0aGUgb3V0cHV0IGFzIGZvby5qcGc6CisuSVAKKy5CIGNqcGVnIFwtcXVhbGl0eQorLkkgNjAgZm9vLnBwbQorLkIgPgorLkkgZm9vLmpwZworLlNIIEhJTlRTCitDb2xvciBHSUYgZmlsZXMgYXJlIG5vdCB0aGUgaWRlYWwgaW5wdXQgZm9yIEpQRUc7IEpQRUcgaXMgcmVhbGx5IGludGVuZGVkIGZvcgorY29tcHJlc3NpbmcgZnVsbC1jb2xvciAoMjQtYml0KSBpbWFnZXMuICBJbiBwYXJ0aWN1bGFyLCBkb24ndCB0cnkgdG8gY29udmVydAorY2FydG9vbnMsIGxpbmUgZHJhd2luZ3MsIGFuZCBvdGhlciBpbWFnZXMgdGhhdCBoYXZlIG9ubHkgYSBmZXcgZGlzdGluY3QKK2NvbG9ycy4gIEdJRiB3b3JrcyBncmVhdCBvbiB0aGVzZSwgSlBFRyBkb2VzIG5vdC4gIElmIHlvdSB3YW50IHRvIGNvbnZlcnQgYQorR0lGIHRvIEpQRUcsIHlvdSBzaG91bGQgZXhwZXJpbWVudCB3aXRoCisuQlIgY2pwZWcgJ3MKKy5CIFwtcXVhbGl0eQorYW5kCisuQiBcLXNtb290aAorb3B0aW9ucyB0byBnZXQgYSBzYXRpc2ZhY3RvcnkgY29udmVyc2lvbi4KKy5CIFwtc21vb3RoIDEwCitvciBzbyBpcyBvZnRlbiBoZWxwZnVsLgorLlBQCitBdm9pZCBydW5uaW5nIGFuIGltYWdlIHRocm91Z2ggYSBzZXJpZXMgb2YgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uCitjeWNsZXMuICBJbWFnZSBxdWFsaXR5IGxvc3Mgd2lsbCBhY2N1bXVsYXRlOyBhZnRlciB0ZW4gb3Igc28gY3ljbGVzIHRoZSBpbWFnZQorbWF5IGJlIG5vdGljZWFibHkgd29yc2UgdGhhbiBpdCB3YXMgYWZ0ZXIgb25lIGN5Y2xlLiAgSXQncyBiZXN0IHRvIHVzZSBhCitsb3NzbGVzcyBmb3JtYXQgd2hpbGUgbWFuaXB1bGF0aW5nIGFuIGltYWdlLCB0aGVuIGNvbnZlcnQgdG8gSlBFRyBmb3JtYXQgd2hlbgoreW91IGFyZSByZWFkeSB0byBmaWxlIHRoZSBpbWFnZSBhd2F5LgorLlBQCitUaGUKKy5CIFwtb3B0aW1pemUKK29wdGlvbiB0bworLkIgY2pwZWcKK2lzIHdvcnRoIHVzaW5nIHdoZW4geW91IGFyZSBtYWtpbmcgYSAiZmluYWwiIHZlcnNpb24gZm9yIHBvc3Rpbmcgb3IgYXJjaGl2aW5nLgorSXQncyBhbHNvIGEgd2luIHdoZW4geW91IGFyZSB1c2luZyBsb3cgcXVhbGl0eSBzZXR0aW5ncyB0byBtYWtlIHZlcnkgc21hbGwKK0pQRUcgZmlsZXM7IHRoZSBwZXJjZW50YWdlIGltcHJvdmVtZW50IGlzIG9mdGVuIGEgbG90IG1vcmUgdGhhbiBpdCBpcyBvbgorbGFyZ2VyIGZpbGVzLiAgKEF0IHByZXNlbnQsCisuQiBcLW9wdGltaXplCittb2RlIGlzIGFsd2F5cyBzZWxlY3RlZCB3aGVuIGdlbmVyYXRpbmcgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlcy4pCisuU0ggRU5WSVJPTk1FTlQKKy5UUAorLkIgSlBFR01FTQorSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBtZW1vcnkgbGltaXQuCitUaGUgdmFsdWUgaXMgc3BlY2lmaWVkIGFzIGRlc2NyaWJlZCBmb3IgdGhlCisuQiBcLW1heG1lbW9yeQorc3dpdGNoLgorLkIgSlBFR01FTQorb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIHNwZWNpZmllZCB3aGVuIHRoZSBwcm9ncmFtIHdhcyBjb21waWxlZCwgYW5kCitpdHNlbGYgaXMgb3ZlcnJpZGRlbiBieSBhbiBleHBsaWNpdAorLkJSIFwtbWF4bWVtb3J5IC4KKy5TSCBTRUUgQUxTTworLkJSIGRqcGVnICgxKSwKKy5CUiBqcGVndHJhbiAoMSksCisuQlIgcmRqcGdjb20gKDEpLAorLkJSIHdyanBnY29tICgxKQorLmJyCisuQlIgcHBtICg1KSwKKy5CUiBwZ20gKDUpCisuYnIKK1dhbGxhY2UsIEdyZWdvcnkgSy4gICJUaGUgSlBFRyBTdGlsbCBQaWN0dXJlIENvbXByZXNzaW9uIFN0YW5kYXJkIiwKK0NvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sIEFwcmlsIDE5OTEgKHZvbC4gMzQsIG5vLiA0KSwgcHAuIDMwLTQ0LgorLlNIIEFVVEhPUgorSW5kZXBlbmRlbnQgSlBFRyBHcm91cAorLlBQCitUaGlzIGZpbGUgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGluZm9ybWF0aW9uCityZWxldmFudCB0byBsaWJqcGVnLXR1cmJvLCB0byB3b3Jkc21pdGggY2VydGFpbiBzZWN0aW9ucywgYW5kIHRvIGRlc2NyaWJlCitmZWF0dXJlcyBub3QgcHJlc2VudCBpbiBsaWJqcGVnLgorLlNIIElTU1VFUworU3VwcG9ydCBmb3IgR0lGIGlucHV0IGZpbGVzIHdhcyByZW1vdmVkIGluIGNqcGVnIHY2YiBkdWUgdG8gY29uY2VybnMgb3ZlcgordGhlIFVuaXN5cyBMWlcgcGF0ZW50LiAgQWx0aG91Z2ggdGhpcyBwYXRlbnQgZXhwaXJlZCBpbiAyMDA2LCBjanBlZyBzdGlsbAorbGFja3MgR0lGIHN1cHBvcnQsIGZvciB0aGVzZSBoaXN0b3JpY2FsIHJlYXNvbnMuICAoQ29udmVyc2lvbiBvZiBHSUYgZmlsZXMgdG8KK0pQRUcgaXMgdXN1YWxseSBhIGJhZCBpZGVhIGFueXdheSwgc2luY2UgR0lGIGlzIGEgMjU2LWNvbG9yIGZvcm1hdC4pCisuUFAKK05vdCBhbGwgdmFyaWFudHMgb2YgQk1QIGFuZCBUYXJnYSBmaWxlIGZvcm1hdHMgYXJlIHN1cHBvcnRlZC4KKy5QUAorVGhlCisuQiBcLXRhcmdhCitzd2l0Y2ggaXMgbm90IGEgYnVnLCBpdCdzIGEgZmVhdHVyZS4gIChJdCB3b3VsZCBiZSBhIGJ1ZyBpZiB0aGUgVGFyZ2EgZm9ybWF0CitkZXNpZ25lcnMgaGFkIG5vdCBiZWVuIGNsdWVsZXNzLikKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NqcGVnLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9janBlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZTdkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9janBlZy5jCkBAIC0wLDAgKzEsNjk1IEBACisvKgorICogY2pwZWcuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwMy0yMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMtMjAxNCwgMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29tbWFuZC1saW5lIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBjb21wcmVzc29yLgorICogSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB3aXRoIFVuaXgtIG9yIE1TLURPUy1zdHlsZSBjb21tYW5kIGxpbmVzLgorICoKKyAqIFR3byBkaWZmZXJlbnQgY29tbWFuZCBsaW5lIHN0eWxlcyBhcmUgcGVybWl0dGVkLCBkZXBlbmRpbmcgb24gdGhlCisgKiBjb21waWxlLXRpbWUgc3dpdGNoIFRXT19GSUxFX0NPTU1BTkRMSU5FOgorICogICAgICBjanBlZyBbb3B0aW9uc10gIGlucHV0ZmlsZSBvdXRwdXRmaWxlCisgKiAgICAgIGNqcGVnIFtvcHRpb25zXSAgW2lucHV0ZmlsZV0KKyAqIEluIHRoZSBzZWNvbmQgc3R5bGUsIG91dHB1dCBpcyBhbHdheXMgdG8gc3RhbmRhcmQgb3V0cHV0LCB3aGljaCB5b3UnZAorICogbm9ybWFsbHkgcmVkaXJlY3QgdG8gYSBmaWxlIG9yIHBpcGUgdG8gc29tZSBvdGhlciBwcm9ncmFtLiAgSW5wdXQgaXMKKyAqIGVpdGhlciBmcm9tIGEgbmFtZWQgZmlsZSBvciBmcm9tIHN0YW5kYXJkIGlucHV0ICh0eXBpY2FsbHkgcmVkaXJlY3RlZCkuCisgKiBUaGUgc2Vjb25kIHN0eWxlIGlzIGNvbnZlbmllbnQgb24gVW5peCBidXQgaXMgdW5oZWxwZnVsIG9uIHN5c3RlbXMgdGhhdAorICogZG9uJ3Qgc3VwcG9ydCBwaXBlcy4gIEFsc28sIHlvdSBNVVNUIHVzZSB0aGUgZmlyc3Qgc3R5bGUgaWYgeW91ciBzeXN0ZW0KKyAqIGRvZXNuJ3QgZG8gYmluYXJ5IEkvTyB0byBzdGRpbi9zdGRvdXQuCisgKiBUbyBzaW1wbGlmeSBzY3JpcHQgd3JpdGluZywgdGhlICItb3V0ZmlsZSIgc3dpdGNoIGlzIHByb3ZpZGVkLiAgVGhlIHN5bnRheAorICogICAgICBjanBlZyBbb3B0aW9uc10gIC1vdXRmaWxlIG91dHB1dGZpbGUgIGlucHV0ZmlsZQorICogd29ya3MgcmVnYXJkbGVzcyBvZiB3aGljaCBjb21tYW5kIGxpbmUgc3R5bGUgaXMgdXNlZC4KKyAqLworCisjaW5jbHVkZSAiY2RqcGVnLmgiICAgICAgICAgICAgIC8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCisjaW5jbHVkZSAianZlcnNpb24uaCIgICAgICAgICAgIC8qIGZvciB2ZXJzaW9uIG1lc3NhZ2UgKi8KKyNpbmNsdWRlICJqY29uZmlnaW50LmgiCisKKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSxmcmVlKCkgKi8KK2V4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpwdHIpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfQ0NPTU1BTkQgICAgICAgICAgICAgLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCisjaWZkZWYgX19NV0VSS1NfXworI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogLi4uIGFuZCB0aGlzICovCisjZW5kaWYKKyNpZmRlZiBUSElOS19DCisjaW5jbHVkZSA8Y29uc29sZS5oPiAgICAgICAgICAgIC8qIFRoaW5rIGRlY2xhcmVzIGl0IGhlcmUgKi8KKyNlbmRpZgorI2VuZGlmCisKKworLyogQ3JlYXRlIHRoZSBhZGQtb24gbWVzc2FnZSBzdHJpbmcgdGFibGUuICovCisKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSwgc3RyaW5nKSAgc3RyaW5nLAorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNkanBlZ19tZXNzYWdlX3RhYmxlW10gPSB7CisjaW5jbHVkZSAiY2RlcnJvci5oIgorICBOVUxMCit9OworCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgZGV0ZXJtaW5lcyB3aGF0IGZvcm1hdCB0aGUgaW5wdXQgZmlsZSBpcywKKyAqIGFuZCBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBpbnB1dC1yZWFkaW5nIG1vZHVsZS4KKyAqCisgKiBUbyBkZXRlcm1pbmUgd2hpY2ggZmFtaWx5IG9mIGlucHV0IGZvcm1hdHMgdGhlIGZpbGUgYmVsb25ncyB0bywKKyAqIHdlIG1heSBsb29rIG9ubHkgYXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpbGUsIHNpbmNlIEMgZG9lcyBub3QKKyAqIGd1YXJhbnRlZSB0aGF0IG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGNhbiBiZSBwdXNoZWQgYmFjayB3aXRoIHVuZ2V0Yy4KKyAqIExvb2tpbmcgYXQgYWRkaXRpb25hbCBieXRlcyB3b3VsZCByZXF1aXJlIG9uZSBvZiB0aGVzZSBhcHByb2FjaGVzOgorICogICAgIDEpIGFzc3VtZSB3ZSBjYW4gZnNlZWsoKSB0aGUgaW5wdXQgZmlsZSAoZmFpbHMgZm9yIHBpcGVkIGlucHV0KTsKKyAqICAgICAyKSBhc3N1bWUgd2UgY2FuIHB1c2ggYmFjayBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciAod29ya3MgaW4KKyAqICAgICAgICBzb21lIEMgaW1wbGVtZW50YXRpb25zLCBidXQgdW5wb3J0YWJsZSk7CisgKiAgICAgMykgcHJvdmlkZSBvdXIgb3duIGJ1ZmZlcmluZyAoYnJlYWtzIGlucHV0IHJlYWRlcnMgdGhhdCB3YW50IHRvIHVzZQorICogICAgICAgIHN0ZGlvIGRpcmVjdGx5LCBzdWNoIGFzIHRoZSBSTEUgbGlicmFyeSk7CisgKiBvciAgNCkgZG9uJ3QgcHV0IGJhY2sgdGhlIGRhdGEsIGFuZCBtb2RpZnkgdGhlIGlucHV0X2luaXQgbWV0aG9kcyB0byBhc3N1bWUKKyAqICAgICAgICB0aGV5IHN0YXJ0IHJlYWRpbmcgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGZpbGUgKGFsc28gYnJlYWtzIFJMRSBsaWJyYXJ5KS4KKyAqICMxIGlzIGF0dHJhY3RpdmUgZm9yIE1TLURPUyBidXQgaXMgdW50ZW5hYmxlIG9uIFVuaXguCisgKgorICogVGhlIG1vc3QgcG9ydGFibGUgc29sdXRpb24gZm9yIGZpbGUgdHlwZXMgdGhhdCBjYW4ndCBiZSBpZGVudGlmaWVkIGJ5IHRoZWlyCisgKiBmaXJzdCBieXRlIGlzIHRvIG1ha2UgdGhlIHVzZXIgdGVsbCB1cyB3aGF0IHRoZXkgYXJlLiAgVGhpcyBpcyBhbHNvIHRoZQorICogb25seSBhcHByb2FjaCBmb3IgInJhdyIgZmlsZSB0eXBlcyB0aGF0IGNvbnRhaW4gb25seSBhcmJpdHJhcnkgdmFsdWVzLgorICogV2UgcHJlc2VudGx5IGFwcGx5IHRoaXMgbWV0aG9kIGZvciBUYXJnYSBmaWxlcy4gIE1vc3Qgb2YgdGhlIHRpbWUgVGFyZ2EKKyAqIGZpbGVzIHN0YXJ0IHdpdGggMHgwMCwgc28gd2UgcmVjb2duaXplIHRoYXQgY2FzZS4gIFBvdGVudGlhbGx5LCBob3dldmVyLAorICogYSBUYXJnYSBmaWxlIGNvdWxkIHN0YXJ0IHdpdGggYW55IGJ5dGUgdmFsdWUgKGJ5dGUgMCBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorICogc2VsZG9tLXVzZWQgSUQgZmllbGQpLCBzbyB3ZSBwcm92aWRlIGEgc3dpdGNoIHRvIGZvcmNlIFRhcmdhIGlucHV0IG1vZGUuCisgKi8KKworc3RhdGljIGJvb2xlYW4gaXNfdGFyZ2E7ICAgICAgICAvKiByZWNvcmRzIHVzZXIgLXRhcmdhIHN3aXRjaCAqLworCisKK0xPQ0FMKGNqcGVnX3NvdXJjZV9wdHIpCitzZWxlY3RfZmlsZV90eXBlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICppbmZpbGUpCit7CisgIGludCBjOworCisgIGlmIChpc190YXJnYSkgeworI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAorICAgIHJldHVybiBqaW5pdF9yZWFkX3RhcmdhKGNpbmZvKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9UR0FfTk9UQ09NUCk7CisjZW5kaWYKKyAgfQorCisgIGlmICgoYyA9IGdldGMoaW5maWxlKSkgPT0gRU9GKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU1QVFkpOworICBpZiAodW5nZXRjKGMsIGluZmlsZSkgPT0gRU9GKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVU5HRVRDX0ZBSUxFRCk7CisKKyAgc3dpdGNoIChjKSB7CisjaWZkZWYgQk1QX1NVUFBPUlRFRAorICBjYXNlICdCJzoKKyAgICByZXR1cm4gamluaXRfcmVhZF9ibXAoY2luZm8sIFRSVUUpOworI2VuZGlmCisjaWZkZWYgR0lGX1NVUFBPUlRFRAorICBjYXNlICdHJzoKKyAgICByZXR1cm4gamluaXRfcmVhZF9naWYoY2luZm8pOworI2VuZGlmCisjaWZkZWYgUFBNX1NVUFBPUlRFRAorICBjYXNlICdQJzoKKyAgICByZXR1cm4gamluaXRfcmVhZF9wcG0oY2luZm8pOworI2VuZGlmCisjaWZkZWYgUkxFX1NVUFBPUlRFRAorICBjYXNlICdSJzoKKyAgICByZXR1cm4gamluaXRfcmVhZF9ybGUoY2luZm8pOworI2VuZGlmCisjaWZkZWYgVEFSR0FfU1VQUE9SVEVECisgIGNhc2UgMHgwMDoKKyAgICByZXR1cm4gamluaXRfcmVhZF90YXJnYShjaW5mbyk7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1VOS05PV05fRk9STUFUKTsKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmdzICovCit9CisKKworLyoKKyAqIEFyZ3VtZW50LXBhcnNpbmcgY29kZS4KKyAqIFRoZSBzd2l0Y2ggcGFyc2VyIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWZ1bCB3aXRoIERPUy1zdHlsZSBjb21tYW5kIGxpbmUKKyAqIHN5bnRheCwgaWUsIGludGVybWl4ZWQgc3dpdGNoZXMgYW5kIGZpbGUgbmFtZXMsIHdoZXJlIG9ubHkgdGhlIHN3aXRjaGVzCisgKiB0byB0aGUgbGVmdCBvZiBhIGdpdmVuIGZpbGUgbmFtZSBhZmZlY3QgcHJvY2Vzc2luZyBvZiB0aGF0IGZpbGUuCisgKiBUaGUgbWFpbiBwcm9ncmFtIGluIHRoaXMgZmlsZSBkb2Vzbid0IGFjdHVhbGx5IHVzZSB0aGlzIGNhcGFiaWxpdHkuLi4KKyAqLworCisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsgICAgLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNoYXIgKmljY19maWxlbmFtZTsgICAgICAvKiBmb3IgLWljYyBzd2l0Y2ggKi8KK3N0YXRpYyBjaGFyICpvdXRmaWxlbmFtZTsgICAgICAgLyogZm9yIC1vdXRmaWxlIHN3aXRjaCAqLworYm9vbGVhbiBtZW1kc3Q7ICAgICAgICAgICAgICAgICAvKiBmb3IgLW1lbWRzdCBzd2l0Y2ggKi8KKworCitMT0NBTCh2b2lkKQordXNhZ2Uodm9pZCkKKy8qIGNvbXBsYWluIGFib3V0IGJhZCBjb21tYW5kIGxpbmUgKi8KK3sKKyAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgW3N3aXRjaGVzXSAiLCBwcm9nbmFtZSk7CisjaWZkZWYgVFdPX0ZJTEVfQ09NTUFORExJTkUKKyAgZnByaW50ZihzdGRlcnIsICJpbnB1dGZpbGUgb3V0cHV0ZmlsZVxuIik7CisjZWxzZQorICBmcHJpbnRmKHN0ZGVyciwgIltpbnB1dGZpbGVdXG4iKTsKKyNlbmRpZgorCisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgKG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZCk6XG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1xdWFsaXR5IE5bLC4uLl0gICBDb21wcmVzc2lvbiBxdWFsaXR5ICgwLi4xMDA7IDUtOTUgaXMgbW9zdCB1c2VmdWwgcmFuZ2UsXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIDc1KVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtZ3JheXNjYWxlICAgICBDcmVhdGUgbW9ub2Nocm9tZSBKUEVHIGZpbGVcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXJnYiAgICAgICAgICAgQ3JlYXRlIFJHQiBKUEVHIGZpbGVcbiIpOworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW9wdGltaXplICAgICAgT3B0aW1pemUgSHVmZm1hbiB0YWJsZSAoc21hbGxlciBmaWxlLCBidXQgc2xvdyBjb21wcmVzc2lvbilcbiIpOworI2VuZGlmCisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1wcm9ncmVzc2l2ZSAgIENyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVcbiIpOworI2VuZGlmCisjaWZkZWYgVEFSR0FfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtdGFyZ2EgICAgICAgICBJbnB1dCBmaWxlIGlzIFRhcmdhIGZvcm1hdCAodXN1YWxseSBub3QgbmVlZGVkKVxuIik7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6XG4iKTsKKyNpZmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1hcml0aG1ldGljICAgIFVzZSBhcml0aG1ldGljIGNvZGluZ1xuIik7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtZGN0IGludCAgICAgICBVc2UgaW50ZWdlciBEQ1QgbWV0aG9kJXNcbiIsCisgICAgICAgICAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lTTE9XID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmFzdCAgICAgIFVzZSBmYXN0IGludGVnZXIgRENUIChsZXNzIGFjY3VyYXRlKSVzXG4iLAorICAgICAgICAgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9JRkFTVCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtZGN0IGZsb2F0ICAgICBVc2UgZmxvYXRpbmctcG9pbnQgRENUIG1ldGhvZCVzXG4iLAorICAgICAgICAgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9GTE9BVCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICIgIC1pY2MgRklMRSAgICAgIEVtYmVkIElDQyBwcm9maWxlIGNvbnRhaW5lZCBpbiBGSUxFXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1yZXN0YXJ0IE4gICAgIFNldCByZXN0YXJ0IGludGVydmFsIGluIHJvd3MsIG9yIGluIGJsb2NrcyB3aXRoIEJcbiIpOworI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1zbW9vdGggTiAgICAgIFNtb290aCBkaXRoZXJlZCBpbnB1dCAoTj0xLi4xMDAgaXMgc3RyZW5ndGgpXG4iKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW1heG1lbW9yeSBOICAgTWF4aW11bSBtZW1vcnkgdG8gdXNlIChpbiBrYnl0ZXMpXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1vdXRmaWxlIG5hbWUgIFNwZWNpZnkgbmFtZSBmb3Igb3V0cHV0IGZpbGVcbiIpOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKKyAgZnByaW50ZihzdGRlcnIsICIgIC1tZW1kc3QgICAgICAgIENvbXByZXNzIHRvIG1lbW9yeSBpbnN0ZWFkIG9mIGZpbGUgKHVzZWZ1bCBmb3IgYmVuY2htYXJraW5nKVxuIik7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICIgIC12ZXJib3NlICBvciAgLWRlYnVnICAgRW1pdCBkZWJ1ZyBvdXRwdXRcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXZlcnNpb24gICAgICAgUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgZm9yIHdpemFyZHM6XG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1iYXNlbGluZSAgICAgIEZvcmNlIGJhc2VsaW5lIHF1YW50aXphdGlvbiB0YWJsZXNcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXF0YWJsZXMgRklMRSAgVXNlIHF1YW50aXphdGlvbiB0YWJsZXMgZ2l2ZW4gaW4gRklMRVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtcXNsb3RzIE5bLC4uLl0gICAgU2V0IGNvbXBvbmVudCBxdWFudGl6YXRpb24gdGFibGVzXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1zYW1wbGUgSHhWWywuLi5dICBTZXQgY29tcG9uZW50IHNhbXBsaW5nIGZhY3RvcnNcbiIpOworI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXNjYW5zIEZJTEUgICAgQ3JlYXRlIG11bHRpLXNjYW4gSlBFRyBwZXIgc2NyaXB0IEZJTEVcbiIpOworI2VuZGlmCisgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCitMT0NBTChpbnQpCitwYXJzZV9zd2l0Y2hlcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorICAgICAgICAgICAgICAgaW50IGxhc3RfZmlsZV9hcmdfc2VlbiwgYm9vbGVhbiBmb3JfcmVhbCkKKy8qIFBhcnNlIG9wdGlvbmFsIHN3aXRjaGVzLgorICogUmV0dXJucyBhcmd2W10gaW5kZXggb2YgZmlyc3QgZmlsZS1uYW1lIGFyZ3VtZW50ICg9PSBhcmdjIGlmIG5vbmUpLgorICogQW55IGZpbGUgbmFtZXMgd2l0aCBpbmRleGVzIDw9IGxhc3RfZmlsZV9hcmdfc2VlbiBhcmUgaWdub3JlZDsKKyAqIHRoZXkgaGF2ZSBwcmVzdW1hYmx5IGJlZW4gcHJvY2Vzc2VkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLgorICogKFBhc3MgMCBmb3IgbGFzdF9maWxlX2FyZ19zZWVuIG9uIHRoZSBmaXJzdCBvciBvbmx5IGl0ZXJhdGlvbi4pCisgKiBmb3JfcmVhbCBpcyBGQUxTRSBvbiB0aGUgZmlyc3QgKGR1bW15KSBwYXNzOyB3ZSBtYXkgc2tpcCBhbnkgZXhwZW5zaXZlCisgKiBwcm9jZXNzaW5nLgorICovCit7CisgIGludCBhcmduOworICBjaGFyICphcmc7CisgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmU7CisgIGJvb2xlYW4gc2ltcGxlX3Byb2dyZXNzaXZlOworICBjaGFyICpxdWFsaXR5YXJnID0gTlVMTDsgICAgICAvKiBzYXZlcyAtcXVhbGl0eSBwYXJtIGlmIGFueSAqLworICBjaGFyICpxdGFibGVmaWxlID0gTlVMTDsgICAgICAvKiBzYXZlcyAtcXRhYmxlcyBmaWxlbmFtZSBpZiBhbnkgKi8KKyAgY2hhciAqcXNsb3RzYXJnID0gTlVMTDsgICAgICAgLyogc2F2ZXMgLXFzbG90cyBwYXJtIGlmIGFueSAqLworICBjaGFyICpzYW1wbGVhcmcgPSBOVUxMOyAgICAgICAvKiBzYXZlcyAtc2FtcGxlIHBhcm0gaWYgYW55ICovCisgIGNoYXIgKnNjYW5zYXJnID0gTlVMTDsgICAgICAgIC8qIHNhdmVzIC1zY2FucyBwYXJtIGlmIGFueSAqLworCisgIC8qIFNldCB1cCBkZWZhdWx0IEpQRUcgcGFyYW1ldGVycy4gKi8KKworICBmb3JjZV9iYXNlbGluZSA9IEZBTFNFOyAgICAgICAvKiBieSBkZWZhdWx0LCBhbGxvdyAxNi1iaXQgcXVhbnRpemVycyAqLworICBzaW1wbGVfcHJvZ3Jlc3NpdmUgPSBGQUxTRTsKKyAgaXNfdGFyZ2EgPSBGQUxTRTsKKyAgaWNjX2ZpbGVuYW1lID0gTlVMTDsKKyAgb3V0ZmlsZW5hbWUgPSBOVUxMOworICBtZW1kc3QgPSBGQUxTRTsKKyAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPSAwOworCisgIC8qIFNjYW4gY29tbWFuZCBsaW5lIG9wdGlvbnMsIGFkanVzdCBwYXJhbWV0ZXJzICovCisKKyAgZm9yIChhcmduID0gMTsgYXJnbiA8IGFyZ2M7IGFyZ24rKykgeworICAgIGFyZyA9IGFyZ3ZbYXJnbl07CisgICAgaWYgKCphcmcgIT0gJy0nKSB7CisgICAgICAvKiBOb3QgYSBzd2l0Y2gsIG11c3QgYmUgYSBmaWxlIG5hbWUgYXJndW1lbnQgKi8KKyAgICAgIGlmIChhcmduIDw9IGxhc3RfZmlsZV9hcmdfc2VlbikgeworICAgICAgICBvdXRmaWxlbmFtZSA9IE5VTEw7ICAgICAvKiAtb3V0ZmlsZSBhcHBsaWVzIHRvIGp1c3Qgb25lIGlucHV0IGZpbGUgKi8KKyAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyogaWdub3JlIHRoaXMgbmFtZSBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLworICAgICAgfQorICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBlbHNlIGRvbmUgcGFyc2luZyBzd2l0Y2hlcyAqLworICAgIH0KKyAgICBhcmcrKzsgICAgICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IHN3aXRjaCBtYXJrZXIgY2hhcmFjdGVyICovCisKKyAgICBpZiAoa2V5bWF0Y2goYXJnLCAiYXJpdGhtZXRpYyIsIDEpKSB7CisgICAgICAvKiBVc2UgYXJpdGhtZXRpYyBjb2RpbmcuICovCisjaWZkZWYgQ19BUklUSF9DT0RJTkdfU1VQUE9SVEVECisgICAgICBjaW5mby0+YXJpdGhfY29kZSA9IFRSVUU7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIGFyaXRobWV0aWMgY29kaW5nIG5vdCBzdXBwb3J0ZWRcbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJiYXNlbGluZSIsIDEpKSB7CisgICAgICAvKiBGb3JjZSBiYXNlbGluZS1jb21wYXRpYmxlIG91dHB1dCAoOC1iaXQgcXVhbnRpemVyIHZhbHVlcykuICovCisgICAgICBmb3JjZV9iYXNlbGluZSA9IFRSVUU7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRjdCIsIDIpKSB7CisgICAgICAvKiBTZWxlY3QgRENUIGFsZ29yaXRobS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImludCIsIDEpKSB7CisgICAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9JU0xPVzsKKyAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImZhc3QiLCAyKSkgeworICAgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfSUZBU1Q7CisgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJmbG9hdCIsIDIpKSB7CisgICAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9GTE9BVDsKKyAgICAgIH0gZWxzZQorICAgICAgICB1c2FnZSgpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJkZWJ1ZyIsIDEpIHx8IGtleW1hdGNoKGFyZywgInZlcmJvc2UiLCAxKSkgeworICAgICAgLyogRW5hYmxlIGRlYnVnIHByaW50b3V0cy4gKi8KKyAgICAgIC8qIE9uIGZpcnN0IC1kLCBwcmludCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uICovCisgICAgICBzdGF0aWMgYm9vbGVhbiBwcmludGVkX3ZlcnNpb24gPSBGQUxTRTsKKworICAgICAgaWYgKCFwcmludGVkX3ZlcnNpb24pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyB2ZXJzaW9uICVzIChidWlsZCAlcylcbiIsCisgICAgICAgICAgICAgICAgUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcblxuIiwgSkNPUFlSSUdIVCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRW11bGF0aW5nIFRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUsIHZlcnNpb24gJXNcblxuIiwKKyAgICAgICAgICAgICAgICBKVkVSU0lPTik7CisgICAgICAgIHByaW50ZWRfdmVyc2lvbiA9IFRSVUU7CisgICAgICB9CisgICAgICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCsrOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJ2ZXJzaW9uIiwgNCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcyAoYnVpbGQgJXMpXG4iLAorICAgICAgICAgICAgICBQQUNLQUdFX05BTUUsIFZFUlNJT04sIEJVSUxEKTsKKyAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZ3JheXNjYWxlIiwgMikgfHwKKyAgICAgICAgICAgICAgIGtleW1hdGNoKGFyZywgImdyZXlzY2FsZSIsIDIpKSB7CisgICAgICAvKiBGb3JjZSBhIG1vbm9jaHJvbWUgSlBFRyBmaWxlIHRvIGJlIGdlbmVyYXRlZC4gKi8KKyAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19HUkFZU0NBTEUpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJyZ2IiLCAzKSkgeworICAgICAgLyogRm9yY2UgYW4gUkdCIEpQRUcgZmlsZSB0byBiZSBnZW5lcmF0ZWQuICovCisgICAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfUkdCKTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiaWNjIiwgMSkpIHsKKyAgICAgIC8qIFNldCBJQ0MgZmlsZW5hbWUuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgaWNjX2ZpbGVuYW1lID0gYXJndlthcmduXTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibWF4bWVtb3J5IiwgMykpIHsKKyAgICAgIC8qIE1heGltdW0gbWVtb3J5IGluIEtiIChvciBNYiB3aXRoICdtJykuICovCisgICAgICBsb25nIGx2YWw7CisgICAgICBjaGFyIGNoID0gJ3gnOworCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoY2ggPT0gJ20nIHx8IGNoID09ICdNJykKKyAgICAgICAgbHZhbCAqPSAxMDAwTDsKKyAgICAgIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gbHZhbCAqIDEwMDBMOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvcHRpbWl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgIm9wdGltaXNlIiwgMSkpIHsKKyAgICAgIC8qIEVuYWJsZSBlbnRyb3B5IHBhcm0gb3B0aW1pemF0aW9uLiAqLworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICAgICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIGVudHJvcHkgb3B0aW1pemF0aW9uIHdhcyBub3QgY29tcGlsZWQgaW5cbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvdXRmaWxlIiwgNCkpIHsKKyAgICAgIC8qIFNldCBvdXRwdXQgZmlsZSBuYW1lLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIG91dGZpbGVuYW1lID0gYXJndlthcmduXTsgLyogc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicHJvZ3Jlc3NpdmUiLCAxKSkgeworICAgICAgLyogU2VsZWN0IHNpbXBsZSBwcm9ncmVzc2l2ZSBtb2RlLiAqLworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBzaW1wbGVfcHJvZ3Jlc3NpdmUgPSBUUlVFOworICAgICAgLyogV2UgbXVzdCBwb3N0cG9uZSBleGVjdXRpb24gdW50aWwgbnVtX2NvbXBvbmVudHMgaXMga25vd24uICovCisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIHByb2dyZXNzaXZlIG91dHB1dCB3YXMgbm90IGNvbXBpbGVkIGluXG4iLAorICAgICAgICAgICAgICBwcm9nbmFtZSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibWVtZHN0IiwgMikpIHsKKyAgICAgIC8qIFVzZSBpbi1tZW1vcnkgZGVzdGluYXRpb24gbWFuYWdlciAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKKyAgICAgIG1lbWRzdCA9IFRSVUU7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIGluLW1lbW9yeSBkZXN0aW5hdGlvbiBtYW5hZ2VyIHdhcyBub3QgY29tcGlsZWQgaW5cbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJxdWFsaXR5IiwgMSkpIHsKKyAgICAgIC8qIFF1YWxpdHkgcmF0aW5ncyAocXVhbnRpemF0aW9uIHRhYmxlIHNjYWxpbmcgZmFjdG9ycykuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgcXVhbGl0eWFyZyA9IGFyZ3ZbYXJnbl07CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInFzbG90cyIsIDIpKSB7CisgICAgICAvKiBRdWFudGl6YXRpb24gdGFibGUgc2xvdCBudW1iZXJzLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIHFzbG90c2FyZyA9IGFyZ3ZbYXJnbl07CisgICAgICAvKiBNdXN0IGRlbGF5IHNldHRpbmcgcXNsb3RzIHVudGlsIGFmdGVyIHdlIGhhdmUgcHJvY2Vzc2VkIGFueQorICAgICAgICogY29sb3JzcGFjZS1kZXRlcm1pbmluZyBzd2l0Y2hlcywgc2luY2UganBlZ19zZXRfY29sb3JzcGFjZSBzZXRzCisgICAgICAgKiBkZWZhdWx0IHF1YW50IHRhYmxlIG51bWJlcnMuCisgICAgICAgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicXRhYmxlcyIsIDIpKSB7CisgICAgICAvKiBRdWFudGl6YXRpb24gdGFibGVzIGZldGNoZWQgZnJvbSBmaWxlLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIHF0YWJsZWZpbGUgPSBhcmd2W2FyZ25dOworICAgICAgLyogV2UgcG9zdHBvbmUgYWN0dWFsbHkgcmVhZGluZyB0aGUgZmlsZSBpbiBjYXNlIC1xdWFsaXR5IGNvbWVzIGxhdGVyLiAqLworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJyZXN0YXJ0IiwgMSkpIHsKKyAgICAgIC8qIFJlc3RhcnQgaW50ZXJ2YWwgaW4gTUNVIHJvd3MgKG9yIGluIE1DVXMgd2l0aCAnYicpLiAqLworICAgICAgbG9uZyBsdmFsOworICAgICAgY2hhciBjaCA9ICd4JzsKKworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVsZCVjIiwgJmx2YWwsICZjaCkgPCAxKQorICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKGx2YWwgPCAwIHx8IGx2YWwgPiA2NTUzNUwpCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoY2ggPT0gJ2InIHx8IGNoID09ICdCJykgeworICAgICAgICBjaW5mby0+cmVzdGFydF9pbnRlcnZhbCA9ICh1bnNpZ25lZCBpbnQpbHZhbDsKKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IDA7IC8qIGVsc2UgcHJpb3IgJy1yZXN0YXJ0IG4nIG92ZXJyaWRlcyBtZSAqLworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IChpbnQpbHZhbDsKKyAgICAgICAgLyogcmVzdGFydF9pbnRlcnZhbCB3aWxsIGJlIGNvbXB1dGVkIGR1cmluZyBzdGFydHVwICovCisgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInNhbXBsZSIsIDIpKSB7CisgICAgICAvKiBTZXQgc2FtcGxpbmcgZmFjdG9ycy4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBzYW1wbGVhcmcgPSBhcmd2W2FyZ25dOworICAgICAgLyogTXVzdCBkZWxheSBzZXR0aW5nIHNhbXBsZSBmYWN0b3JzIHVudGlsIGFmdGVyIHdlIGhhdmUgcHJvY2Vzc2VkIGFueQorICAgICAgICogY29sb3JzcGFjZS1kZXRlcm1pbmluZyBzd2l0Y2hlcywgc2luY2UganBlZ19zZXRfY29sb3JzcGFjZSBzZXRzCisgICAgICAgKiBkZWZhdWx0IHNhbXBsaW5nIGZhY3RvcnMuCisgICAgICAgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAic2NhbnMiLCA0KSkgeworICAgICAgLyogU2V0IHNjYW4gc2NyaXB0LiAqLworI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIHNjYW5zYXJnID0gYXJndlthcmduXTsKKyAgICAgIC8qIFdlIG11c3QgcG9zdHBvbmUgcmVhZGluZyB0aGUgZmlsZSBpbiBjYXNlIC1wcm9ncmVzc2l2ZSBhcHBlYXJzLiAqLworI2Vsc2UKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBtdWx0aS1zY2FuIG91dHB1dCB3YXMgbm90IGNvbXBpbGVkIGluXG4iLAorICAgICAgICAgICAgICBwcm9nbmFtZSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAic21vb3RoIiwgMikpIHsKKyAgICAgIC8qIFNldCBpbnB1dCBzbW9vdGhpbmcgZmFjdG9yLiAqLworICAgICAgaW50IHZhbDsKKworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkIiwgJnZhbCkgIT0gMSkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IDEwMCkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yID0gdmFsOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJ0YXJnYSIsIDEpKSB7CisgICAgICAvKiBJbnB1dCBmaWxlIGlzIFRhcmdhIGZvcm1hdC4gKi8KKyAgICAgIGlzX3RhcmdhID0gVFJVRTsKKworICAgIH0gZWxzZSB7CisgICAgICB1c2FnZSgpOyAgICAgICAgICAgICAgICAgIC8qIGJvZ3VzIHN3aXRjaCAqLworICAgIH0KKyAgfQorCisgIC8qIFBvc3Qtc3dpdGNoLXNjYW5uaW5nIGNsZWFudXAgKi8KKworICBpZiAoZm9yX3JlYWwpIHsKKworICAgIC8qIFNldCBxdWFudGl6YXRpb24gdGFibGVzIGZvciBzZWxlY3RlZCBxdWFsaXR5LiAqLworICAgIC8qIFNvbWUgb3IgYWxsIG1heSBiZSBvdmVycmlkZGVuIGlmIC1xdGFibGVzIGlzIHByZXNlbnQuICovCisgICAgaWYgKHF1YWxpdHlhcmcgIT0gTlVMTCkgICAgIC8qIHByb2Nlc3MgLXF1YWxpdHkgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghc2V0X3F1YWxpdHlfcmF0aW5ncyhjaW5mbywgcXVhbGl0eWFyZywgZm9yY2VfYmFzZWxpbmUpKQorICAgICAgICB1c2FnZSgpOworCisgICAgaWYgKHF0YWJsZWZpbGUgIT0gTlVMTCkgICAgIC8qIHByb2Nlc3MgLXF0YWJsZXMgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghcmVhZF9xdWFudF90YWJsZXMoY2luZm8sIHF0YWJsZWZpbGUsIGZvcmNlX2Jhc2VsaW5lKSkKKyAgICAgICAgdXNhZ2UoKTsKKworICAgIGlmIChxc2xvdHNhcmcgIT0gTlVMTCkgICAgICAvKiBwcm9jZXNzIC1xc2xvdHMgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghc2V0X3F1YW50X3Nsb3RzKGNpbmZvLCBxc2xvdHNhcmcpKQorICAgICAgICB1c2FnZSgpOworCisgICAgaWYgKHNhbXBsZWFyZyAhPSBOVUxMKSAgICAgIC8qIHByb2Nlc3MgLXNhbXBsZSBpZiBpdCB3YXMgcHJlc2VudCAqLworICAgICAgaWYgKCFzZXRfc2FtcGxlX2ZhY3RvcnMoY2luZm8sIHNhbXBsZWFyZykpCisgICAgICAgIHVzYWdlKCk7CisKKyNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorICAgIGlmIChzaW1wbGVfcHJvZ3Jlc3NpdmUpICAgICAvKiBwcm9jZXNzIC1wcm9ncmVzc2l2ZTsgLXNjYW5zIGNhbiBvdmVycmlkZSAqLworICAgICAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24oY2luZm8pOworI2VuZGlmCisKKyNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyAgICBpZiAoc2NhbnNhcmcgIT0gTlVMTCkgICAgICAgLyogcHJvY2VzcyAtc2NhbnMgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICAgIGlmICghcmVhZF9zY2FuX3NjcmlwdChjaW5mbywgc2NhbnNhcmcpKQorICAgICAgICB1c2FnZSgpOworI2VuZGlmCisgIH0KKworICByZXR1cm4gYXJnbjsgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gaW5kZXggb2YgbmV4dCBhcmcgKGZpbGUgbmFtZSkgKi8KK30KKworCisvKgorICogVGhlIG1haW4gcHJvZ3JhbS4KKyAqLworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87CisgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBqZXJyOworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICBzdHJ1Y3QgY2RqcGVnX3Byb2dyZXNzX21nciBwcm9ncmVzczsKKyNlbmRpZgorICBpbnQgZmlsZV9pbmRleDsKKyAgY2pwZWdfc291cmNlX3B0ciBzcmNfbWdyOworICBGSUxFICppbnB1dF9maWxlOworICBGSUxFICppY2NfZmlsZTsKKyAgSk9DVEVUICppY2NfcHJvZmlsZSA9IE5VTEw7CisgIGxvbmcgaWNjX2xlbiA9IDA7CisgIEZJTEUgKm91dHB1dF9maWxlID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqb3V0YnVmZmVyID0gTlVMTDsKKyAgdW5zaWduZWQgbG9uZyBvdXRzaXplID0gMDsKKyAgSkRJTUVOU0lPTiBudW1fc2NhbmxpbmVzOworCisgIC8qIE9uIE1hYywgZmV0Y2ggYSBjb21tYW5kIGxpbmUuICovCisjaWZkZWYgVVNFX0NDT01NQU5ECisgIGFyZ2MgPSBjY29tbWFuZCgmYXJndik7CisjZW5kaWYKKworICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCisgICAgcHJvZ25hbWUgPSAiY2pwZWciOyAgICAgICAgIC8qIGluIGNhc2UgQyBsaWJyYXJ5IGRvZXNuJ3QgcHJvdmlkZSBpdCAqLworCisgIC8qIEluaXRpYWxpemUgdGhlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0IHdpdGggZGVmYXVsdCBlcnJvciBoYW5kbGluZy4gKi8KKyAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmplcnIpOworICBqcGVnX2NyZWF0ZV9jb21wcmVzcygmY2luZm8pOworICAvKiBBZGQgc29tZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBlcnJvciBtZXNzYWdlcyAoZnJvbSBjZGVycm9yLmgpICovCisgIGplcnIuYWRkb25fbWVzc2FnZV90YWJsZSA9IGNkanBlZ19tZXNzYWdlX3RhYmxlOworICBqZXJyLmZpcnN0X2FkZG9uX21lc3NhZ2UgPSBKTVNHX0ZJUlNUQURET05DT0RFOworICBqZXJyLmxhc3RfYWRkb25fbWVzc2FnZSA9IEpNU0dfTEFTVEFERE9OQ09ERTsKKworICAvKiBJbml0aWFsaXplIEpQRUcgcGFyYW1ldGVycy4KKyAgICogTXVjaCBvZiB0aGlzIG1heSBiZSBvdmVycmlkZGVuIGxhdGVyLgorICAgKiBJbiBwYXJ0aWN1bGFyLCB3ZSBkb24ndCB5ZXQga25vdyB0aGUgaW5wdXQgZmlsZSdzIGNvbG9yIHNwYWNlLAorICAgKiBidXQgd2UgbmVlZCB0byBwcm92aWRlIHNvbWUgdmFsdWUgZm9yIGpwZWdfc2V0X2RlZmF1bHRzKCkgdG8gd29yay4KKyAgICovCisKKyAgY2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOyAvKiBhcmJpdHJhcnkgZ3Vlc3MgKi8KKyAganBlZ19zZXRfZGVmYXVsdHMoJmNpbmZvKTsKKworICAvKiBTY2FuIGNvbW1hbmQgbGluZSB0byBmaW5kIGZpbGUgbmFtZXMuCisgICAqIEl0IGlzIGNvbnZlbmllbnQgdG8gdXNlIGp1c3Qgb25lIHN3aXRjaC1wYXJzaW5nIHJvdXRpbmUsIGJ1dCB0aGUgc3dpdGNoCisgICAqIHZhbHVlcyByZWFkIGhlcmUgYXJlIGlnbm9yZWQ7IHdlIHdpbGwgcmVzY2FuIHRoZSBzd2l0Y2hlcyBhZnRlciBvcGVuaW5nCisgICAqIHRoZSBpbnB1dCBmaWxlLgorICAgKi8KKworICBmaWxlX2luZGV4ID0gcGFyc2Vfc3dpdGNoZXMoJmNpbmZvLCBhcmdjLCBhcmd2LCAwLCBGQUxTRSk7CisKKyNpZmRlZiBUV09fRklMRV9DT01NQU5ETElORQorICBpZiAoIW1lbWRzdCkgeworICAgIC8qIE11c3QgaGF2ZSBlaXRoZXIgLW91dGZpbGUgc3dpdGNoIG9yIGV4cGxpY2l0IG91dHB1dCBmaWxlIG5hbWUgKi8KKyAgICBpZiAob3V0ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgaWYgKGZpbGVfaW5kZXggIT0gYXJnYyAtIDIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogbXVzdCBuYW1lIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCBmaWxlXG4iLAorICAgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIH0KKyAgICAgIG91dGZpbGVuYW1lID0gYXJndltmaWxlX2luZGV4ICsgMV07CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG11c3QgbmFtZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgZmlsZVxuIiwKKyAgICAgICAgICAgICAgICBwcm9nbmFtZSk7CisgICAgICAgIHVzYWdlKCk7CisgICAgICB9CisgICAgfQorICB9CisjZWxzZQorICAvKiBVbml4IHN0eWxlOiBleHBlY3QgemVybyBvciBvbmUgZmlsZSBuYW1lICovCisgIGlmIChmaWxlX2luZGV4IDwgYXJnYyAtIDEpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBvbmx5IG9uZSBpbnB1dCBmaWxlXG4iLCBwcm9nbmFtZSk7CisgICAgdXNhZ2UoKTsKKyAgfQorI2VuZGlmIC8qIFRXT19GSUxFX0NPTU1BTkRMSU5FICovCisKKyAgLyogT3BlbiB0aGUgaW5wdXQgZmlsZS4gKi8KKyAgaWYgKGZpbGVfaW5kZXggPCBhcmdjKSB7CisgICAgaWYgKChpbnB1dF9maWxlID0gZm9wZW4oYXJndltmaWxlX2luZGV4XSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgYXJndltmaWxlX2luZGV4XSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGRlZmF1bHQgaW5wdXQgZmlsZSBpcyBzdGRpbiAqLworICAgIGlucHV0X2ZpbGUgPSByZWFkX3N0ZGluKCk7CisgIH0KKworICAvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZS4gKi8KKyAgaWYgKG91dGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICBpZiAoKG91dHB1dF9maWxlID0gZm9wZW4ob3V0ZmlsZW5hbWUsIFdSSVRFX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXNcbiIsIHByb2duYW1lLCBvdXRmaWxlbmFtZSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9IGVsc2UgaWYgKCFtZW1kc3QpIHsKKyAgICAvKiBkZWZhdWx0IG91dHB1dCBmaWxlIGlzIHN0ZG91dCAqLworICAgIG91dHB1dF9maWxlID0gd3JpdGVfc3Rkb3V0KCk7CisgIH0KKworICBpZiAoaWNjX2ZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICBpZiAoKGljY19maWxlID0gZm9wZW4oaWNjX2ZpbGVuYW1lLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXNcbiIsIHByb2duYW1lLCBpY2NfZmlsZW5hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBpZiAoZnNlZWsoaWNjX2ZpbGUsIDAsIFNFRUtfRU5EKSA8IDAgfHwKKyAgICAgICAgKGljY19sZW4gPSBmdGVsbChpY2NfZmlsZSkpIDwgMSB8fAorICAgICAgICBmc2VlayhpY2NfZmlsZSwgMCwgU0VFS19TRVQpIDwgMCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgZGV0ZXJtaW5lIHNpemUgb2YgJXNcbiIsIHByb2duYW1lLAorICAgICAgICAgICAgICBpY2NfZmlsZW5hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBpZiAoKGljY19wcm9maWxlID0gKEpPQ1RFVCAqKW1hbGxvYyhpY2NfbGVuKSkgPT0gTlVMTCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBJQ0MgcHJvZmlsZVxuIiwgcHJvZ25hbWUpOworICAgICAgZmNsb3NlKGljY19maWxlKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgaWYgKGZyZWFkKGljY19wcm9maWxlLCBpY2NfbGVuLCAxLCBpY2NfZmlsZSkgPCAxKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCByZWFkIElDQyBwcm9maWxlIGZyb20gJXNcbiIsIHByb2duYW1lLAorICAgICAgICAgICAgICBpY2NfZmlsZW5hbWUpOworICAgICAgZnJlZShpY2NfcHJvZmlsZSk7CisgICAgICBmY2xvc2UoaWNjX2ZpbGUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBmY2xvc2UoaWNjX2ZpbGUpOworICB9CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgc3RhcnRfcHJvZ3Jlc3NfbW9uaXRvcigoal9jb21tb25fcHRyKSZjaW5mbywgJnByb2dyZXNzKTsKKyNlbmRpZgorCisgIC8qIEZpZ3VyZSBvdXQgdGhlIGlucHV0IGZpbGUgZm9ybWF0LCBhbmQgc2V0IHVwIHRvIHJlYWQgaXQuICovCisgIHNyY19tZ3IgPSBzZWxlY3RfZmlsZV90eXBlKCZjaW5mbywgaW5wdXRfZmlsZSk7CisgIHNyY19tZ3ItPmlucHV0X2ZpbGUgPSBpbnB1dF9maWxlOworCisgIC8qIFJlYWQgdGhlIGlucHV0IGZpbGUgaGVhZGVyIHRvIG9idGFpbiBmaWxlIHNpemUgJiBjb2xvcnNwYWNlLiAqLworICAoKnNyY19tZ3ItPnN0YXJ0X2lucHV0KSAoJmNpbmZvLCBzcmNfbWdyKTsKKworICAvKiBOb3cgdGhhdCB3ZSBrbm93IGlucHV0IGNvbG9yc3BhY2UsIGZpeCBjb2xvcnNwYWNlLWRlcGVuZGVudCBkZWZhdWx0cyAqLworICBqcGVnX2RlZmF1bHRfY29sb3JzcGFjZSgmY2luZm8pOworCisgIC8qIEFkanVzdCBkZWZhdWx0IGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYnkgcmUtcGFyc2luZyB0aGUgb3B0aW9ucyAqLworICBmaWxlX2luZGV4ID0gcGFyc2Vfc3dpdGNoZXMoJmNpbmZvLCBhcmdjLCBhcmd2LCAwLCBUUlVFKTsKKworICAvKiBTcGVjaWZ5IGRhdGEgZGVzdGluYXRpb24gZm9yIGNvbXByZXNzaW9uICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorICBpZiAobWVtZHN0KQorICAgIGpwZWdfbWVtX2Rlc3QoJmNpbmZvLCAmb3V0YnVmZmVyLCAmb3V0c2l6ZSk7CisgIGVsc2UKKyNlbmRpZgorICAgIGpwZWdfc3RkaW9fZGVzdCgmY2luZm8sIG91dHB1dF9maWxlKTsKKworICAvKiBTdGFydCBjb21wcmVzc29yICovCisgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKKworICBpZiAoaWNjX3Byb2ZpbGUgIT0gTlVMTCkKKyAgICBqcGVnX3dyaXRlX2ljY19wcm9maWxlKCZjaW5mbywgaWNjX3Byb2ZpbGUsICh1bnNpZ25lZCBpbnQpaWNjX2xlbik7CisKKyAgLyogUHJvY2VzcyBkYXRhICovCisgIHdoaWxlIChjaW5mby5uZXh0X3NjYW5saW5lIDwgY2luZm8uaW1hZ2VfaGVpZ2h0KSB7CisgICAgbnVtX3NjYW5saW5lcyA9ICgqc3JjX21nci0+Z2V0X3BpeGVsX3Jvd3MpICgmY2luZm8sIHNyY19tZ3IpOworICAgICh2b2lkKWpwZWdfd3JpdGVfc2NhbmxpbmVzKCZjaW5mbywgc3JjX21nci0+YnVmZmVyLCBudW1fc2NhbmxpbmVzKTsKKyAgfQorCisgIC8qIEZpbmlzaCBjb21wcmVzc2lvbiBhbmQgcmVsZWFzZSBtZW1vcnkgKi8KKyAgKCpzcmNfbWdyLT5maW5pc2hfaW5wdXQpICgmY2luZm8sIHNyY19tZ3IpOworICBqcGVnX2ZpbmlzaF9jb21wcmVzcygmY2luZm8pOworICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKKworICAvKiBDbG9zZSBmaWxlcywgaWYgd2Ugb3BlbmVkIHRoZW0gKi8KKyAgaWYgKGlucHV0X2ZpbGUgIT0gc3RkaW4pCisgICAgZmNsb3NlKGlucHV0X2ZpbGUpOworICBpZiAob3V0cHV0X2ZpbGUgIT0gc3Rkb3V0ICYmIG91dHB1dF9maWxlICE9IE5VTEwpCisgICAgZmNsb3NlKG91dHB1dF9maWxlKTsKKworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICBlbmRfcHJvZ3Jlc3NfbW9uaXRvcigoal9jb21tb25fcHRyKSZjaW5mbyk7CisjZW5kaWYKKworICBpZiAobWVtZHN0KSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDb21wcmVzc2VkIHNpemU6ICAlbHUgYnl0ZXNcbiIsIG91dHNpemUpOworICAgIGlmIChvdXRidWZmZXIgIT0gTlVMTCkKKyAgICAgIGZyZWUob3V0YnVmZmVyKTsKKyAgfQorCisgIGlmIChpY2NfcHJvZmlsZSAhPSBOVUxMKQorICAgIGZyZWUoaWNjX3Byb2ZpbGUpOworCisgIC8qIEFsbCBkb25lLiAqLworICBleGl0KGplcnIubnVtX3dhcm5pbmdzID8gRVhJVF9XQVJOSU5HIDogRVhJVF9TVUNDRVNTKTsKKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgLyogc3VwcHJlc3Mgbm8tcmV0dXJuLXZhbHVlIHdhcm5pbmdzICovCit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9jbWFrZXNjcmlwdHMvQnVpbGRQYWNrYWdlcy5jbWFrZSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NtYWtlc2NyaXB0cy9CdWlsZFBhY2thZ2VzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjA2NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9jbWFrZXNjcmlwdHMvQnVpbGRQYWNrYWdlcy5jbWFrZQpAQCAtMCwwICsxLDE3NyBAQAorIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSB0aGUgdG9wLWxldmVsIENNYWtlTGlzdHMudHh0LiAgV2UganVzdCBzdG9yZSBpdAorIyBoZXJlIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdXAgdGhhdCBmaWxlLgorCitzZXQoUEtHTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0gQ0FDSEUgU1RSSU5HCisgICJEaXN0cmlidXRpb24gcGFja2FnZSBuYW1lIChkZWZhdWx0OiAke0NNQUtFX1BST0pFQ1RfTkFNRX0pIikKK3NldChQS0dWRU5ET1IgIlRoZSAke0NNQUtFX1BST0pFQ1RfTkFNRX0gUHJvamVjdCIgQ0FDSEUgU1RSSU5HCisgICJWZW5kb3IgbmFtZSB0byBiZSBpbmNsdWRlZCBpbiBkaXN0cmlidXRpb24gcGFja2FnZSBkZXNjcmlwdGlvbnMgKGRlZmF1bHQ6IFRoZSAke0NNQUtFX1BST0pFQ1RfTkFNRX0gUHJvamVjdCkiKQorc2V0KFBLR1VSTCAiaHR0cDovL3d3dy4ke0NNQUtFX1BST0pFQ1RfTkFNRX0ub3JnIiBDQUNIRSBTVFJJTkcKKyAgIlVSTCBvZiBwcm9qZWN0IHdlYiBzaXRlIHRvIGJlIGluY2x1ZGVkIGluIGRpc3RyaWJ1dGlvbiBwYWNrYWdlIGRlc2NyaXB0aW9ucyAoZGVmYXVsdDogaHR0cDovL3d3dy4ke0NNQUtFX1BST0pFQ1RfTkFNRX0ub3JnKSIpCitzZXQoUEtHRU1BSUwgImluZm9ybWF0aW9uQCR7Q01BS0VfUFJPSkVDVF9OQU1FfS5vcmciIENBQ0hFIFNUUklORworICAiRS1tYWlsIG9mIHByb2plY3QgbWFpbnRhaW5lciB0byBiZSBpbmNsdWRlZCBpbiBkaXN0cmlidXRpb24gcGFja2FnZSBkZXNjcmlwdGlvbnMgKGRlZmF1bHQ6IGluZm9ybWF0aW9uQCR7Q01BS0VfUFJPSkVDVF9OQU1FfS5vcmciKQorc2V0KFBLR0lEICJjb20uJHtDTUFLRV9QUk9KRUNUX05BTUV9LiR7UEtHTkFNRX0iIENBQ0hFIFNUUklORworICAiR2xvYmFsbHkgdW5pcXVlIHBhY2thZ2UgaWRlbnRpZmllciAocmV2ZXJzZSBETlMgbm90YXRpb24pIChkZWZhdWx0OiBjb20uJHtDTUFLRV9QUk9KRUNUX05BTUV9LiR7UEtHTkFNRX0pIikKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpbnV4IFJQTSBhbmQgREVCCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCisKK3NldChSUE1BUkNIICR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0pCitpZihDUFVfVFlQRSBTVFJFUVVBTCAieDg2XzY0IikKKyAgc2V0KERFQkFSQ0ggYW1kNjQpCitlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJhcm12NyoiKQorICBzZXQoREVCQVJDSCBhcm1oZikKK2Vsc2VpZihDUFVfVFlQRSBTVFJFUVVBTCAiYXJtNjQiKQorICBzZXQoREVCQVJDSCAke0NQVV9UWVBFfSkKK2Vsc2VpZihDUFVfVFlQRSBTVFJFUVVBTCAiYXJtIikKKyAgc2V0KERFQkFSQ0ggYXJtZWwpCitlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUl9MQyBTVFJFUVVBTCAicHBjNjRsZSIpCisgIHNldChERUJBUkNIIHBwYzY0ZWwpCitlbHNlaWYoQ1BVX1RZUEUgU1RSRVFVQUwgInBvd2VycGMiIEFORCBCSVRTIEVRVUFMIDMyKQorICBzZXQoUlBNQVJDSCBwcGMpCisgIHNldChERUJBUkNIIHBwYykKK2Vsc2UoKQorICBzZXQoREVCQVJDSCAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9KQorZW5kaWYoKQorbWVzc2FnZShTVEFUVVMgIlJQTSBhcmNoaXRlY3R1cmUgPSAke1JQTUFSQ0h9LCBERUIgYXJjaGl0ZWN0dXJlID0gJHtERUJBUkNIfSIpCisKKyMgUmUtc2V0IENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgc28gdGhhdCB0aGUgUlBNIHNwZWMgZmlsZSB3b3JrcworIyBwcm9wZXJseQorYm9vbGVhbl9udW1iZXIoQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSkKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9tYWtlcnBtLmluIHBrZ3NjcmlwdHMvbWFrZXJwbSkKK2NvbmZpZ3VyZV9maWxlKHJlbGVhc2UvcnBtLnNwZWMuaW4gcGtnc2NyaXB0cy9ycG0uc3BlYyBAT05MWSkKKworYWRkX2N1c3RvbV90YXJnZXQocnBtIHNoIHBrZ3NjcmlwdHMvbWFrZXJwbQorICBTT1VSQ0VTIHBrZ3NjcmlwdHMvbWFrZXJwbSkKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9tYWtlc3JwbS5pbiBwa2dzY3JpcHRzL21ha2VzcnBtKQorCithZGRfY3VzdG9tX3RhcmdldChzcnBtIHNoIHBrZ3NjcmlwdHMvbWFrZXNycG0KKyAgU09VUkNFUyBwa2dzY3JpcHRzL21ha2VzcnBtCisgIERFUEVORFMgZGlzdCkKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9tYWtlZHBrZy5pbiBwa2dzY3JpcHRzL21ha2VkcGtnKQorY29uZmlndXJlX2ZpbGUocmVsZWFzZS9kZWItY29udHJvbC5pbiBwa2dzY3JpcHRzL2RlYi1jb250cm9sKQorCithZGRfY3VzdG9tX3RhcmdldChkZWIgc2ggcGtnc2NyaXB0cy9tYWtlZHBrZworICBTT1VSQ0VTIHBrZ3NjcmlwdHMvbWFrZWRwa2cpCisKK2VuZGlmKCkgIyBMaW51eAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2luZG93cyBpbnN0YWxsZXIgKE51bGxTb2Z0IEluc3RhbGxlcikKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYoV0lOMzIpCisKK2lmKE1TVkMpCisgIHNldChJTlNUX1BMQVRGT1JNICJWaXN1YWwgQysrIikKKyAgc2V0KElOU1RfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0tJHtWRVJTSU9OfS12YykKKyAgc2V0KElOU1RfUkVHX05BTUUgJHtDTUFLRV9QUk9KRUNUX05BTUV9KQorZWxzZWlmKE1JTkdXKQorICBzZXQoSU5TVF9QTEFURk9STSBHQ0MpCisgIHNldChJTlNUX05BTUUgJHtDTUFLRV9QUk9KRUNUX05BTUV9LSR7VkVSU0lPTn0tZ2NjKQorICBzZXQoSU5TVF9SRUdfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0tZ2NjKQorICBzZXQoSU5TVF9ERUZTIC1ER0NDKQorZW5kaWYoKQorCitpZihCSVRTIEVRVUFMIDY0KQorICBzZXQoSU5TVF9QTEFURk9STSAiJHtJTlNUX1BMQVRGT1JNfSA2NC1iaXQiKQorICBzZXQoSU5TVF9OQU1FICR7SU5TVF9OQU1FfTY0KQorICBzZXQoSU5TVF9SRUdfTkFNRSAke0lOU1RfRElSfTY0KQorICBzZXQoSU5TVF9ERUZTICR7SU5TVF9ERUZTfSAtRFdJTjY0KQorZW5kaWYoKQorCitpZihXSVRIX0pBVkEpCisgIHNldChJTlNUX0RFRlMgJHtJTlNUX0RFRlN9IC1ESkFWQSkKK2VuZGlmKCkKKworaWYoTVNWQ19JREUpCisgIHNldChJTlNUX0RFRlMgJHtJTlNUX0RFRlN9ICItREJVSUxERElSPSR7Q01BS0VfQ0ZHX0lOVERJUn1cXCIpCitlbHNlKCkKKyAgc2V0KElOU1RfREVGUyAke0lOU1RfREVGU30gIi1EQlVJTERESVI9IikKK2VuZGlmKCkKKworc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi8iICJcXFxcIiBJTlNUX0RJUiAke0NNQUtFX0lOU1RBTExfUFJFRklYfSkKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9pbnN0YWxsZXIubnNpLmluIGluc3RhbGxlci5uc2kgQE9OTFkpCisKK2lmKFdJVEhfSkFWQSkKKyAgc2V0KEpBVkFfREVQRU5EIHR1cmJvanBlZy1qYXZhKQorZW5kaWYoKQorYWRkX2N1c3RvbV90YXJnZXQoaW5zdGFsbGVyCisgIG1ha2Vuc2lzIC1ub2NkICR7SU5TVF9ERUZTfSBpbnN0YWxsZXIubnNpCisgIERFUEVORFMganBlZyBqcGVnLXN0YXRpYyB0dXJib2pwZWcgdHVyYm9qcGVnLXN0YXRpYyByZGpwZ2NvbSB3cmpwZ2NvbQorICAgIGNqcGVnIGRqcGVnIGpwZWd0cmFuIHRqYmVuY2ggJHtKQVZBX0RFUEVORH0KKyAgU09VUkNFUyBpbnN0YWxsZXIubnNpKQorCitlbmRpZigpICMgV0lOMzIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEN5Z3dpbiBQYWNrYWdlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmKENZR1dJTikKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9tYWtlY3lnd2lucGtnLmluIHBrZ3NjcmlwdHMvbWFrZWN5Z3dpbnBrZykKKworYWRkX2N1c3RvbV90YXJnZXQoY3lnd2lucGtnIHNoIHBrZ3NjcmlwdHMvbWFrZWN5Z3dpbnBrZykKKworZW5kaWYoKSAjIENZR1dJTgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWFjIERNRworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpZihBUFBMRSkKKworc2V0KERFRkFVTFRfT1NYXzMyQklUX0JVSUxEICR7Q01BS0VfU09VUkNFX0RJUn0vb3N4eDg2KQorc2V0KE9TWF8zMkJJVF9CVUlMRCAke0RFRkFVTFRfT1NYXzMyQklUX0JVSUxEfSBDQUNIRSBQQVRICisgICJEaXJlY3RvcnkgY29udGFpbmluZyAzMi1iaXQgKGkzODYpIE1hYyBidWlsZCB0byBpbmNsdWRlIGluIHVuaXZlcnNhbCBiaW5hcmllcyAoZGVmYXVsdDogJHtERUZBVUxUX09TWF8zMkJJVF9CVUlMRH0pIikKK3NldChERUZBVUxUX0lPU19BUk1WN19CVUlMRCAke0NNQUtFX1NPVVJDRV9ESVJ9L2lvc2FybXY3KQorc2V0KElPU19BUk1WN19CVUlMRCAke0RFRkFVTFRfSU9TX0FSTVY3X0JVSUxEfSBDQUNIRSBQQVRICisgICJEaXJlY3RvcnkgY29udGFpbmluZyBBUk12NyBpT1MgYnVpbGQgdG8gaW5jbHVkZSBpbiB1bml2ZXJzYWwgYmluYXJpZXMgKGRlZmF1bHQ6ICR7REVGQVVMVF9JT1NfQVJNVjdfQlVJTER9KSIpCitzZXQoREVGQVVMVF9JT1NfQVJNVjdTX0JVSUxEICR7Q01BS0VfU09VUkNFX0RJUn0vaW9zYXJtdjdzKQorc2V0KElPU19BUk1WN1NfQlVJTEQgJHtERUZBVUxUX0lPU19BUk1WN1NfQlVJTER9IENBQ0hFIFBBVEgKKyAgIkRpcmVjdG9yeSBjb250YWluaW5nIEFSTXY3cyBpT1MgYnVpbGQgdG8gaW5jbHVkZSBpbiB1bml2ZXJzYWwgYmluYXJpZXMgKGRlZmF1bHQ6ICR7REVGQVVMVF9JT1NfQVJNVjdTX0JVSUxEfSkiKQorc2V0KERFRkFVTFRfSU9TX0FSTVY4X0JVSUxEICR7Q01BS0VfU09VUkNFX0RJUn0vaW9zYXJtdjgpCitzZXQoSU9TX0FSTVY4X0JVSUxEICR7REVGQVVMVF9JT1NfQVJNVjhfQlVJTER9IENBQ0hFIFBBVEgKKyAgIkRpcmVjdG9yeSBjb250YWluaW5nIEFSTXY4IGlPUyBidWlsZCB0byBpbmNsdWRlIGluIHVuaXZlcnNhbCBiaW5hcmllcyAoZGVmYXVsdDogJHtERUZBVUxUX0lPU19BUk1WOF9CVUlMRH0pIikKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9tYWtlbWFjcGtnLmluIHBrZ3NjcmlwdHMvbWFrZW1hY3BrZykKK2NvbmZpZ3VyZV9maWxlKHJlbGVhc2UvRGlzdHJpYnV0aW9uLnhtbC5pbiBwa2dzY3JpcHRzL0Rpc3RyaWJ1dGlvbi54bWwpCitjb25maWd1cmVfZmlsZShyZWxlYXNlL3VuaW5zdGFsbC5pbiBwa2dzY3JpcHRzL3VuaW5zdGFsbCkKKworYWRkX2N1c3RvbV90YXJnZXQoZG1nIHNoIHBrZ3NjcmlwdHMvbWFrZW1hY3BrZworICBTT1VSQ0VTIHBrZ3NjcmlwdHMvbWFrZW1hY3BrZykKKworYWRkX2N1c3RvbV90YXJnZXQodWRtZyBzaCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgdW5pdmVyc2FsCisgIFNPVVJDRVMgcGtnc2NyaXB0cy9tYWtlbWFjcGtnKQorCitlbmRpZigpICMgQVBQTEUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdlbmVyaWMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYWRkX2N1c3RvbV90YXJnZXQoZGlzdAorICBDT01NQU5EIGdpdCBhcmNoaXZlIC0tcHJlZml4PSR7Q01BS0VfUFJPSkVDVF9OQU1FfS0ke1ZFUlNJT059LyBIRUFEIHwKKyAgICBnemlwID4gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7Q01BS0VfUFJPSkVDVF9OQU1FfS0ke1ZFUlNJT059LnRhci5negorICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9tYWtldGFyYmFsbC5pbiBwa2dzY3JpcHRzL21ha2V0YXJiYWxsKQorCithZGRfY3VzdG9tX3RhcmdldCh0YXJiYWxsIHNoIHBrZ3NjcmlwdHMvbWFrZXRhcmJhbGwKKyAgU09VUkNFUyBwa2dzY3JpcHRzL21ha2V0YXJiYWxsKQorCitjb25maWd1cmVfZmlsZShyZWxlYXNlL2xpYmpwZWcucGMuaW4gcGtnc2NyaXB0cy9saWJqcGVnLnBjIEBPTkxZKQorCitjb25maWd1cmVfZmlsZShyZWxlYXNlL2xpYnR1cmJvanBlZy5wYy5pbiBwa2dzY3JpcHRzL2xpYnR1cmJvanBlZy5wYyBAT05MWSkKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NtYWtlc2NyaXB0cy9HTlVJbnN0YWxsRGlycy5jbWFrZSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NtYWtlc2NyaXB0cy9HTlVJbnN0YWxsRGlycy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjU2NGJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY21ha2VzY3JpcHRzL0dOVUluc3RhbGxEaXJzLmNtYWtlCkBAIC0wLDAgKzEsNDE2IEBACisjLnJzdDoKKyMgR05VSW5zdGFsbERpcnMKKyMgLS0tLS0tLS0tLS0tLS0KKyMKKyMgRGVmaW5lIEdOVSBzdGFuZGFyZCBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMKKyMKKyMgUHJvdmlkZXMgaW5zdGFsbCBkaXJlY3RvcnkgdmFyaWFibGVzIGFzIGRlZmluZWQgYnkgdGhlCisjIGBHTlUgQ29kaW5nIFN0YW5kYXJkc2BfLgorIworIyAuLiBfYEdOVSBDb2RpbmcgU3RhbmRhcmRzYDogaHR0cHM6Ly93d3cuZ251Lm9yZy9wcmVwL3N0YW5kYXJkcy9odG1sX25vZGUvRGlyZWN0b3J5LVZhcmlhYmxlcy5odG1sCisjCisjIFJlc3VsdCBWYXJpYWJsZXMKKyMgXl5eXl5eXl5eXl5eXl5eXgorIworIyBJbmNsdXNpb24gb2YgdGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMKKyMgYGBDTUFLRV9JTlNUQUxMXzxkaXI+YGAKKyMKKyMgICBEZXN0aW5hdGlvbiBmb3IgZmlsZXMgb2YgYSBnaXZlbiB0eXBlLiAgVGhpcyB2YWx1ZSBtYXkgYmUgcGFzc2VkIHRvCisjICAgdGhlIGBgREVTVElOQVRJT05gYCBvcHRpb25zIG9mIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kcyBmb3IgdGhlCisjICAgY29ycmVzcG9uZGluZyBmaWxlIHR5cGUuCisjCisjIGBgQ01BS0VfSU5TVEFMTF9GVUxMXzxkaXI+YGAKKyMKKyMgICBUaGUgYWJzb2x1dGUgcGF0aCBnZW5lcmF0ZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBgYENNQUtFX0lOU1RBTExfPGRpcj5gYAorIyAgIHZhbHVlLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIHBhdGgsIGFuIGFic29sdXRlIHBhdGgKKyMgICBpcyBjb25zdHJ1Y3RlZCB0eXBpY2FsbHkgYnkgcHJlcGVuZGluZyB0aGUgdmFsdWUgb2YgdGhlCisjICAgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAgdmFyaWFibGUuICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZQorIyAgIGBzcGVjaWFsIGNhc2VzYF8gYXMgZG9jdW1lbnRlZCBiZWxvdy4KKyMKKyMgd2hlcmUgYGA8ZGlyPmBgIGlzIG9uZSBvZjoKKyMKKyMgYGBCSU5ESVJgYAorIyAgIHVzZXIgZXhlY3V0YWJsZXMgKGBgYmluYGApCisjIGBgU0JJTkRJUmBgCisjICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIChgYHNiaW5gYCkKKyMgYGBMSUJFWEVDRElSYGAKKyMgICBwcm9ncmFtIGV4ZWN1dGFibGVzIChgYGxpYmV4ZWNgYCkKKyMgYGBTWVNDT05GRElSYGAKKyMgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSAoYGBldGNgYCkKKyMgYGBTSEFSRURTVEFURURJUmBgCisjICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSAoYGBjb21gYCkKKyMgYGBMT0NBTFNUQVRFRElSYGAKKyMgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgKGBgdmFyYGApCisjIGBgTElCRElSYGAKKyMgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgKGBgbGliYGAgb3IgYGBsaWI2NGBgCisjICAgb3IgYGBsaWIvPG11bHRpYXJjaC10dXBsZT5gYCBvbiBEZWJpYW4pCisjIGBgSU5DTFVERURJUmBgCisjICAgQyBoZWFkZXIgZmlsZXMgKGBgaW5jbHVkZWBgKQorIyBgYE9MRElOQ0xVREVESVJgYAorIyAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIChgYC91c3IvaW5jbHVkZWBgKQorIyBgYERBVEFST09URElSYGAKKyMgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgcm9vdCAoYGBzaGFyZWBgKQorIyBgYERBVEFESVJgYAorIyAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSAoYGBEQVRBUk9PVERJUmBgKQorIyBgYElORk9ESVJgYAorIyAgIGluZm8gZG9jdW1lbnRhdGlvbiAoYGBEQVRBUk9PVERJUi9pbmZvYGApCisjIGBgTE9DQUxFRElSYGAKKyMgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgKGBgREFUQVJPT1RESVIvbG9jYWxlYGApCisjIGBgTUFORElSYGAKKyMgICBtYW4gZG9jdW1lbnRhdGlvbiAoYGBEQVRBUk9PVERJUi9tYW5gYCkKKyMgYGBET0NESVJgYAorIyAgIGRvY3VtZW50YXRpb24gcm9vdCAoYGBEQVRBUk9PVERJUi9kb2MvUFJPSkVDVF9OQU1FYGApCisjCisjIElmIHRoZSBpbmNsdWRlciBkb2VzIG5vdCBkZWZpbmUgYSB2YWx1ZSB0aGUgYWJvdmUtc2hvd24gZGVmYXVsdCB3aWxsIGJlCisjIHVzZWQgYW5kIHRoZSB2YWx1ZSB3aWxsIGFwcGVhciBpbiB0aGUgY2FjaGUgZm9yIGVkaXRpbmcgYnkgdGhlIHVzZXIuCisjCisjIFNwZWNpYWwgQ2FzZXMKKyMgXl5eXl5eXl5eXl5eXgorIworIyBUaGUgZm9sbG93aW5nIHZhbHVlcyBvZiA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCBhcmUgc3BlY2lhbDoKKyMKKyMgYGAvYGAKKyMKKyMgICBGb3IgYGA8ZGlyPmBgIG90aGVyIHRoYW4gdGhlIGBgU1lTQ09ORkRJUmBgIGFuZCBgYExPQ0FMU1RBVEVESVJgYCwKKyMgICB0aGUgdmFsdWUgb2YgYGBDTUFLRV9JTlNUQUxMXzxkaXI+YGAgaXMgcHJlZml4ZWQgd2l0aCBgYHVzci9gYCBpZgorIyAgIGl0IGlzIG5vdCB1c2VyLXNwZWNpZmllZCBhcyBhbiBhYnNvbHV0ZSBwYXRoLiAgRm9yIGV4YW1wbGUsIHRoZQorIyAgIGBgSU5DTFVERURJUmBgIHZhbHVlIGBgaW5jbHVkZWBgIGJlY29tZXMgYGB1c3IvaW5jbHVkZWBgLgorIyAgIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGBHTlUgQ29kaW5nIFN0YW5kYXJkc2BfLCB3aGljaCBzdGF0ZToKKyMKKyMgICAgIFdoZW4gYnVpbGRpbmcgdGhlIGNvbXBsZXRlIEdOVSBzeXN0ZW0sIHRoZSBwcmVmaXggd2lsbCBiZSBlbXB0eQorIyAgICAgYW5kIGBgL3VzcmBgIHdpbGwgYmUgYSBzeW1ib2xpYyBsaW5rIHRvIGBgL2BgLgorIworIyBgYC91c3JgYAorIworIyAgIEZvciBgYDxkaXI+YGAgZXF1YWwgdG8gYGBTWVNDT05GRElSYGAgb3IgYGBMT0NBTFNUQVRFRElSYGAsIHRoZQorIyAgIGBgQ01BS0VfSU5TVEFMTF9GVUxMXzxkaXI+YGAgaXMgY29tcHV0ZWQgYnkgcHJlcGVuZGluZyBqdXN0IGBgL2BgCisjICAgdG8gdGhlIHZhbHVlIG9mIGBgQ01BS0VfSU5TVEFMTF88ZGlyPmBgIGlmIGl0IGlzIG5vdCB1c2VyLXNwZWNpZmllZAorIyAgIGFzIGFuIGFic29sdXRlIHBhdGguICBGb3IgZXhhbXBsZSwgdGhlIGBgU1lTQ09ORkRJUmBgIHZhbHVlIGBgZXRjYGAKKyMgICBiZWNvbWVzIGBgL2V0Y2BgLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgYEdOVSBDb2RpbmcgU3RhbmRhcmRzYF8uCisjCisjIGBgL29wdC8uLi5gYAorIworIyAgIEZvciBgYDxkaXI+YGAgZXF1YWwgdG8gYGBTWVNDT05GRElSYGAgb3IgYGBMT0NBTFNUQVRFRElSYGAsIHRoZQorIyAgIGBgQ01BS0VfSU5TVEFMTF9GVUxMXzxkaXI+YGAgaXMgY29tcHV0ZWQgYnkgKmFwcGVuZGluZyogdGhlIHByZWZpeAorIyAgIHRvIHRoZSB2YWx1ZSBvZiBgYENNQUtFX0lOU1RBTExfPGRpcj5gYCBpZiBpdCBpcyBub3QgdXNlci1zcGVjaWZpZWQKKyMgICBhcyBhbiBhYnNvbHV0ZSBwYXRoLiAgRm9yIGV4YW1wbGUsIHRoZSBgYFNZU0NPTkZESVJgYCB2YWx1ZSBgYGV0Y2BgCisjICAgYmVjb21lcyBgYC9ldGMvb3B0Ly4uLmBgLiAgVGhpcyBpcyBkZWZpbmVkIGJ5IHRoZQorIyAgIGBGaWxlc3lzdGVtIEhpZXJhcmNoeSBTdGFuZGFyZGBfLgorIworIyAuLiBfYEZpbGVzeXN0ZW0gSGllcmFyY2h5IFN0YW5kYXJkYDogaHR0cHM6Ly9yZWZzcGVjcy5saW51eGZvdW5kYXRpb24ub3JnL0ZIU18zLjAvZmhzL2luZGV4Lmh0bWwKKyMKKyMgTWFjcm9zCisjIF5eXl5eXgorIworIyAuLiBjb21tYW5kOjogR05VSW5zdGFsbERpcnNfZ2V0X2Fic29sdXRlX2luc3RhbGxfZGlyCisjCisjICAgOjoKKyMKKyMgICAgIEdOVUluc3RhbGxEaXJzX2dldF9hYnNvbHV0ZV9pbnN0YWxsX2RpcihhYnN2YXIgdmFyKQorIworIyAgIFNldCB0aGUgZ2l2ZW4gdmFyaWFibGUgYGBhYnN2YXJgYCB0byB0aGUgYWJzb2x1dGUgcGF0aCBjb250YWluZWQKKyMgICB3aXRoaW4gdGhlIHZhcmlhYmxlIGBgdmFyYGAuICBUaGlzIGlzIHRvIGFsbG93IHRoZSBjb21wdXRhdGlvbiBvZiBhbgorIyAgIGFic29sdXRlIHBhdGgsIGFjY291bnRpbmcgZm9yIGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBkb2N1bWVudGVkCisjICAgYWJvdmUuICBXaGlsZSB0aGlzIG1hY3JvIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmFyaW91cworIyAgIGBgQ01BS0VfSU5TVEFMTF9GVUxMXzxkaXI+YGAgdmFyaWFibGVzLCBpdCBpcyBleHBvc2VkIHB1YmxpY2x5IHRvCisjICAgYWxsb3cgdXNlcnMgd2hvIGNyZWF0ZSBhZGRpdGlvbmFsIHBhdGggdmFyaWFibGVzIHRvIGFsc28gY29tcHV0ZQorIyAgIGFic29sdXRlIHBhdGhzIHdoZXJlIG5lY2Vzc2FyeSwgdXNpbmcgdGhlIHNhbWUgbG9naWMuCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb3B5cmlnaHQgMjAxNiBELiBSLiBDb21tYW5kZXIKKyMgQ29weXJpZ2h0IDIwMTYgRG1pdHJ5IE1hcmFrYXNvdgorIyBDb3B5cmlnaHQgMjAxNiBSb2dlciBMZWlnaAorIyBDb3B5cmlnaHQgMjAxNSBBbGV4IFR1cmJvdgorIyBDb3B5cmlnaHQgMjAxNCBSb2xmIEVpa2UgQmVlcgorIyBDb3B5cmlnaHQgMjAxNCBEYW5pZWxlIEUuIERvbWVuaWNoZWxsaQorIyBDb3B5cmlnaHQgMjAxMyBEaW1pdHJpIEpvaG4gTGVka292CisjIENvcHlyaWdodCAyMDExIEFsZXggTmV1bmRvcmYKKyMgQ29weXJpZ2h0IDIwMTEgRXJpYyBOT1VMQVJECisjIENvcHlyaWdodCAyMDExLCAyMDEzLTIwMTUgS2l0d2FyZSwgSW5jLgorIyBDb3B5cmlnaHQgMjAxMSBOaWtpdGEgS3J1cGVuJ2tvCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIEtpdHdhcmUsIEluYy4sIHRoZSBJbnNpZ2h0IFNvZnR3YXJlIENvbnNvcnRpdW0sCisjICAgbm9yIHRoZSBuYW1lcyBvZiB0aGVpciBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisjICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisjICAgcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllcworIworCittYWNybyhHTlVJbnN0YWxsRGlyc19zZXRfaW5zdGFsbF9kaXIgdmFyIGRvY3N0cmluZykKKyAgIyBJZiBDTUFLRV9JTlNUQUxMX1BSRUZJWCBjaGFuZ2VzIGFuZCBDTUFLRV9JTlNUQUxMXypESVIgaXMgc3RpbGwgc2V0IHRvIHRoZQorICAjIGRlZmF1bHQgdmFsdWUsIHRoZW4gbW9kaWZ5IGl0IGFjY29yZGluZ2x5LiAgVGhpcyBwcmVzdW1lcyB0aGF0IHRoZSBkZWZhdWx0CisgICMgdmFsdWUgbWF5IGNoYW5nZSBiYXNlZCBvbiB0aGUgcHJlZml4LgorCisgIHNldChfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9GT1JDRV8ke3Zhcn0gIiIpCisgIGlmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfJHt2YXJ9KQorICAgIHNldChfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9ERUZBVUxUXyR7dmFyfSAxIENBQ0hFIElOVEVSTkFMCisgICAgICAiQ01BS0VfSU5TVEFMTF8ke3Zhcn0gaGFzIGRlZmF1bHQgdmFsdWUiKQorICBlbHNlaWYoREVGSU5FRCBfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9MQVNUX0RFRkFVTFRfJHt2YXJ9IEFORAorICAgIE5PVCAiJHtfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9MQVNUX0RFRkFVTFRfJHt2YXJ9fSIgU1RSRVFVQUwKKyAgICAgICIke0NNQUtFX0lOU1RBTExfREVGQVVMVF8ke3Zhcn19IiBBTkQKKyAgICBfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9ERUZBVUxUXyR7dmFyfSBBTkQKKyAgICAiJHtfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9MQVNUXyR7dmFyfX0iIFNUUkVRVUFMCisgICAgICAiJHtDTUFLRV9JTlNUQUxMXyR7dmFyfX0iKQorICAgIHNldChfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9GT1JDRV8ke3Zhcn0gIkZPUkNFIikKKyAgZW5kaWYoKQorCisgIHNldChDTUFLRV9JTlNUQUxMXyR7dmFyfSAiJHtDTUFLRV9JTlNUQUxMX0RFRkFVTFRfJHt2YXJ9fSIgQ0FDSEUgUEFUSAorICAgICIke2RvY3N0cmluZ30gKERlZmF1bHQ6ICR7Q01BS0VfSU5TVEFMTF9ERUZBVUxUXyR7dmFyfX0pIgorICAgICR7X0dOVUluc3RhbGxEaXJzX0NNQUtFX0lOU1RBTExfRk9SQ0VfJHt2YXJ9fSkKKworICBpZihOT1QgIiR7Q01BS0VfSU5TVEFMTF8ke3Zhcn19IiBTVFJFUVVBTCAiJHtDTUFLRV9JTlNUQUxMX0RFRkFVTFRfJHt2YXJ9fSIpCisgICAgdW5zZXQoX0dOVUluc3RhbGxEaXJzX0NNQUtFX0lOU1RBTExfREVGQVVMVF8ke3Zhcn0gQ0FDSEUpCisgIGVuZGlmKCkKKworICAjIFNhdmUgZm9yIG5leHQgcnVuCisgIHNldChfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9MQVNUXyR7dmFyfSAiJHtDTUFLRV9JTlNUQUxMXyR7dmFyfX0iCisgICAgQ0FDSEUgSU5URVJOQUwgIkNNQUtFX0lOU1RBTExfJHt2YXJ9IGR1cmluZyBsYXN0IHJ1biIpCisgIHNldChfR05VSW5zdGFsbERpcnNfQ01BS0VfSU5TVEFMTF9MQVNUX0RFRkFVTFRfJHt2YXJ9CisgICAgIiR7Q01BS0VfSU5TVEFMTF9ERUZBVUxUXyR7dmFyfX0iIENBQ0hFIElOVEVSTkFMCisgICAgIkNNQUtFX0lOU1RBTExfREVGQVVMVF8ke3Zhcn0gZHVyaW5nIGxhc3QgcnVuIikKK2VuZG1hY3JvKCkKKworaWYoTk9UIERFRklORUQgQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0JJTkRJUikKKyAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9CSU5ESVIgImJpbiIpCitlbmRpZigpCitHTlVJbnN0YWxsRGlyc19zZXRfaW5zdGFsbF9kaXIoQklORElSCisgICJEaXJlY3RvcnkgaW50byB3aGljaCB1c2VyIGV4ZWN1dGFibGVzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfU0JJTkRJUikKKyAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9TQklORElSICJzYmluIikKK2VuZGlmKCkKK0dOVUluc3RhbGxEaXJzX3NldF9pbnN0YWxsX2RpcihTQklORElSCisgICJEaXJlY3RvcnkgaW50byB3aGljaCBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgc2hvdWxkIGJlIGluc3RhbGxlZCIpCisKK2lmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfREVGQVVMVF9MSUJFWEVDRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0xJQkVYRUNESVIgImxpYmV4ZWMiKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKExJQkVYRUNESVIKKyAgIkRpcmVjdG9yeSB1bmRlciB3aGljaCBleGVjdXRhYmxlcyBydW4gYnkgb3RoZXIgcHJvZ3JhbXMgc2hvdWxkIGJlIGluc3RhbGxlZCIpCisKK2lmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfREVGQVVMVF9TWVNDT05GRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1NZU0NPTkZESVIgImV0YyIpCitlbmRpZigpCitHTlVJbnN0YWxsRGlyc19zZXRfaW5zdGFsbF9kaXIoU1lTQ09ORkRJUgorICAiRGlyZWN0b3J5IGludG8gd2hpY2ggbWFjaGluZS1zcGVjaWZpYyByZWFkLW9ubHkgQVNDSUkgZGF0YSBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkIikKKworaWYoTk9UIERFRklORUQgQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1NIQVJFRFNUQVRFRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1NIQVJFRFNUQVRFRElSICJjb20iKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKFNIQVJFRFNUQVRFRElSCisgICJEaXJlY3RvcnkgaW50byB3aGljaCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcnVuLXRpbWUtbW9kaWZpYWJsZSBkYXRhIGZpbGVzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfTE9DQUxTVEFURURJUikKKyAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9MT0NBTFNUQVRFRElSICJ2YXIiKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKExPQ0FMU1RBVEVESVIKKyAgIkRpcmVjdG9yeSBpbnRvIHdoaWNoIG1hY2hpbmUtc3BlY2lmaWMgcnVuLXRpbWUtbW9kaWZpYWJsZSBkYXRhIGZpbGVzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfTElCRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0xJQkRJUiAibGliIikKKyAgIyBPdmVycmlkZSB0aGlzIGRlZmF1bHQgJ2xpYicgd2l0aCAnbGliNjQnIGlmZjoKKyAgIyAgLSB3ZSBhcmUgb24gTGludXggc3lzdGVtIGJ1dCBOT1QgY3Jvc3MtY29tcGlsaW5nCisgICMgIC0gd2UgYXJlIE5PVCBvbiBkZWJpYW4KKyAgIyAgLSB3ZSBhcmUgb24gYSA2NCBiaXRzIHN5c3RlbQorICAjIHJlYXNvbiBpczogYW1kNjQgQUJJOiBodHRwOi8vd3d3Lng4Ni02NC5vcmcvZG9jdW1lbnRhdGlvbi9hYmkucGRmCisgICMgRm9yIERlYmlhbiB3aXRoIG11bHRpYXJjaCwgdXNlICdsaWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0nIGlmCisgICMgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgaXMgc2V0ICh3aGljaCBjb250YWlucyBlLmcuICJpMzg2LWxpbnV4LWdudSIKKyAgIyBhbmQgQ01BS0VfSU5TVEFMTF9QUkVGSVggaXMgIi91c3IiCisgICMgU2VlIGh0dHA6Ly93aWtpLmRlYmlhbi5vcmcvTXVsdGlhcmNoCisgIGlmKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIl4oTGludXh8a0ZyZWVCU0R8R05VKSQiCisgICAgICBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKQorICAgIGlmIChFWElTVFMgIi9ldGMvZGViaWFuX3ZlcnNpb24iKSAjIGlzIHRoaXMgYSBkZWJpYW4gc3lzdGVtID8KKyAgICAgIGlmKENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQorICAgICAgICBpZigiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iIE1BVENIRVMgIl4vdXNyLz8kIikKKyAgICAgICAgICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0xJQkRJUiAibGliLyR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKSAjIG5vdCBkZWJpYW4sIHJlbHkgb24gQ01BS0VfU0laRU9GX1ZPSURfUDoKKyAgICAgIGlmKE5PVCBERUZJTkVEIENNQUtFX1NJWkVPRl9WT0lEX1ApCisgICAgICAgIG1lc3NhZ2UoQVVUSE9SX1dBUk5JTkcKKyAgICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IENNQUtFX0lOU1RBTExfTElCRElSIGRpcmVjdG9yeSBiZWNhdXNlIG5vIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMga25vd24uICIKKyAgICAgICAgICAiUGxlYXNlIGVuYWJsZSBhdCBsZWFzdCBvbmUgbGFuZ3VhZ2UgYmVmb3JlIGluY2x1ZGluZyBHTlVJbnN0YWxsRGlycy4iKQorICAgICAgZWxzZSgpCisgICAgICAgIGlmKCIke0NNQUtFX1NJWkVPRl9WT0lEX1B9IiBFUVVBTCAiOCIpCisgICAgICAgICAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9MSUJESVIgImxpYjY0IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKExJQkRJUgorICAiRGlyZWN0b3J5IGludG8gd2hpY2ggb2JqZWN0IGZpbGVzIGFuZCBvYmplY3QgY29kZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZCIpCisKK2lmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfREVGQVVMVF9JTkNMVURFRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0lOQ0xVREVESVIgImluY2x1ZGUiKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKElOQ0xVREVESVIKKyAgIkRpcmVjdG9yeSBpbnRvIHdoaWNoIEMgaGVhZGVyIGZpbGVzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfT0xESU5DTFVERURJUikKKyAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9PTERJTkNMVURFRElSICIvdXNyL2luY2x1ZGUiKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKE9MRElOQ0xVREVESVIKKyAgUEFUSCAiRGlyZWN0b3J5IGludG8gd2hpY2ggQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1HQ0MgY29tcGlsZXJzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfREFUQVJPT1RESVIpCisgIHNldChDTUFLRV9JTlNUQUxMX0RFRkFVTFRfREFUQVJPT1RESVIgInNoYXJlIikKK2VuZGlmKCkKK0dOVUluc3RhbGxEaXJzX3NldF9pbnN0YWxsX2RpcihEQVRBUk9PVERJUgorICAiVGhlIHJvb3Qgb2YgdGhlIGRpcmVjdG9yeSB0cmVlIGZvciByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgZmlsZXMiKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmFsdWVzIHdob3NlIGRlZmF1bHRzIGFyZSByZWxhdGl2ZSB0byBEQVRBUk9PVERJUi4gIFN0b3JlIGVtcHR5IHZhbHVlcyBpbgorIyB0aGUgY2FjaGUgYW5kIHN0b3JlIHRoZSBkZWZhdWx0cyBpbiBsb2NhbCB2YXJpYWJsZXMgaWYgdGhlIGNhY2hlIHZhbHVlcyBhcmUKKyMgbm90IHNldCBleHBsaWNpdGx5LiAgVGhpcyBhdXRvLXVwZGF0ZXMgdGhlIGRlZmF1bHRzIGFzIERBVEFST09URElSIGNoYW5nZXMuCisKK2lmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfREVGQVVMVF9EQVRBRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RBVEFESVIgIjxDTUFLRV9JTlNUQUxMX0RBVEFST09URElSPiIpCitlbmRpZigpCitHTlVJbnN0YWxsRGlyc19zZXRfaW5zdGFsbF9kaXIoREFUQURJUgorICAiVGhlIGRpcmVjdG9yeSB1bmRlciB3aGljaCByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZCIpCisKK2lmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfREVGQVVMVF9JTkZPRElSKQorICBpZihDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJeKC4qQlNEfERyYWdvbkZseSkkIikKKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0lORk9ESVIgImluZm8iKQorICBlbHNlKCkKKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0lORk9ESVIgIjxDTUFLRV9JTlNUQUxMX0RBVEFST09URElSPi9pbmZvIikKKyAgZW5kaWYoKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKElORk9ESVIKKyAgIlRoZSBkaXJlY3RvcnkgaW50byB3aGljaCBpbmZvIGRvY3VtZW50YXRpb24gZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZCIpCisKK2lmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfREVGQVVMVF9NQU5ESVIpCisgIGlmKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIl4oLipCU0R8RHJhZ29uRmx5KSQiKQorICAgIHNldChDTUFLRV9JTlNUQUxMX0RFRkFVTFRfTUFORElSICJtYW4iKQorICBlbHNlKCkKKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX01BTkRJUiAiPENNQUtFX0lOU1RBTExfREFUQVJPT1RESVI+L21hbiIpCisgIGVuZGlmKCkKK2VuZGlmKCkKK0dOVUluc3RhbGxEaXJzX3NldF9pbnN0YWxsX2RpcihNQU5ESVIKKyAgIlRoZSBkaXJlY3RvcnkgdW5kZXIgd2hpY2ggbWFuIHBhZ2VzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfTE9DQUxFRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0xPQ0FMRURJUiAiPENNQUtFX0lOU1RBTExfREFUQVJPT1RESVI+L2xvY2FsZSIpCitlbmRpZigpCitHTlVJbnN0YWxsRGlyc19zZXRfaW5zdGFsbF9kaXIoTE9DQUxFRElSCisgICJUaGUgZGlyZWN0b3J5IHVuZGVyIHdoaWNoIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlIGNhdGFsb2dzIHNob3VsZCBiZSBpbnN0YWxsZWQiKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRE9DRElSKQorICBzZXQoQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RPQ0RJUiAiPENNQUtFX0lOU1RBTExfREFUQVJPT1RESVI+L2RvYy8ke1BST0pFQ1RfTkFNRX0iKQorZW5kaWYoKQorR05VSW5zdGFsbERpcnNfc2V0X2luc3RhbGxfZGlyKERPQ0RJUgorICAiVGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGRvY3VtZW50YXRpb24gZmlsZXMgKG90aGVyIHRoYW4gaW5mbyBmaWxlcykgc2hvdWxkIGJlIGluc3RhbGxlZCIpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittYXJrX2FzX2FkdmFuY2VkKAorICBDTUFLRV9JTlNUQUxMX0JJTkRJUgorICBDTUFLRV9JTlNUQUxMX1NCSU5ESVIKKyAgQ01BS0VfSU5TVEFMTF9MSUJFWEVDRElSCisgIENNQUtFX0lOU1RBTExfU1lTQ09ORkRJUgorICBDTUFLRV9JTlNUQUxMX1NIQVJFRFNUQVRFRElSCisgIENNQUtFX0lOU1RBTExfTE9DQUxTVEFURURJUgorICBDTUFLRV9JTlNUQUxMX0xJQkRJUgorICBDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVIKKyAgQ01BS0VfSU5TVEFMTF9PTERJTkNMVURFRElSCisgIENNQUtFX0lOU1RBTExfREFUQVJPT1RESVIKKyAgQ01BS0VfSU5TVEFMTF9EQVRBRElSCisgIENNQUtFX0lOU1RBTExfSU5GT0RJUgorICBDTUFLRV9JTlNUQUxMX0xPQ0FMRURJUgorICBDTUFLRV9JTlNUQUxMX01BTkRJUgorICBDTUFLRV9JTlNUQUxMX0RPQ0RJUgorICApCisKK21hY3JvKEdOVUluc3RhbGxEaXJzX2dldF9hYnNvbHV0ZV9pbnN0YWxsX2RpciBhYnN2YXIgdmFyKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiWzw+XSIgIkAiICR7dmFyfSAiJHske3Zhcn19IikKKyAgIyBIYW5kbGUgdGhlIHNwZWNpZmljIGNhc2Ugb2YgYW4gZW1wdHkgQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUgorICBpZihOT1QgQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUiBBTkQKKyAgICAke3Zhcn0gTUFUQ0hFUyAiXEBDTUFLRV9JTlNUQUxMX0RBVEFST09URElSXEAvIikKKyAgICBzdHJpbmcoQ09ORklHVVJFICIkeyR7dmFyfX0iICR7dmFyfSBAT05MWSkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiICR7dmFyfSAiJHske3Zhcn19IikKKyAgZWxzZSgpCisgICAgc3RyaW5nKENPTkZJR1VSRSAiJHske3Zhcn19IiAke3Zhcn0gQE9OTFkpCisgIGVuZGlmKCkKKyAgaWYoTk9UIElTX0FCU09MVVRFICIkeyR7dmFyfX0iKQorICAgICMgSGFuZGxlIHNwZWNpYWwgY2FzZXM6CisgICAgIyAtIENNQUtFX0lOU1RBTExfUFJFRklYID09IC8KKyAgICAjIC0gQ01BS0VfSU5TVEFMTF9QUkVGSVggPT0gL3VzcgorICAgICMgLSBDTUFLRV9JTlNUQUxMX1BSRUZJWCA9PSAvb3B0Ly4uLgorICAgIGlmKCIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIgU1RSRVFVQUwgIi8iKQorICAgICAgaWYoIiR7ZGlyfSIgU1RSRVFVQUwgIlNZU0NPTkZESVIiIE9SICIke2Rpcn0iIFNUUkVRVUFMICJMT0NBTFNUQVRFRElSIikKKyAgICAgICAgc2V0KCR7YWJzdmFyfSAiLyR7JHt2YXJ9fSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgaWYgKE5PVCAiJHske3Zhcn19IiBNQVRDSEVTICJedXNyLyIpCisgICAgICAgICAgc2V0KCR7dmFyfSAidXNyLyR7JHt2YXJ9fSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgc2V0KCR7YWJzdmFyfSAiLyR7JHt2YXJ9fSIpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKCIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIgTUFUQ0hFUyAiXi91c3IvPyQiKQorICAgICAgaWYoIiR7ZGlyfSIgU1RSRVFVQUwgIlNZU0NPTkZESVIiIE9SICIke2Rpcn0iIFNUUkVRVUFMICJMT0NBTFNUQVRFRElSIikKKyAgICAgICAgc2V0KCR7YWJzdmFyfSAiLyR7JHt2YXJ9fSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KCR7YWJzdmFyfSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHske3Zhcn19IikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYoIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9IiBNQVRDSEVTICJeL29wdC8uKiIpCisgICAgICBpZigiJHtkaXJ9IiBTVFJFUVVBTCAiU1lTQ09ORkRJUiIgT1IgIiR7ZGlyfSIgU1RSRVFVQUwgIkxPQ0FMU1RBVEVESVIiKQorICAgICAgICBzZXQoJHthYnN2YXJ9ICIvJHske3Zhcn19JHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCgke2Fic3Zhcn0gIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7JHt2YXJ9fSIpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBzZXQoJHthYnN2YXJ9ICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8keyR7dmFyfX0iKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc2V0KCR7YWJzdmFyfSAiJHske3Zhcn19IikKKyAgZW5kaWYoKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLyQiICIiICR7YWJzdmFyfSAiJHske2Fic3Zhcn19IikKK2VuZG1hY3JvKCkKKworIyBSZXN1bHQgZGlyZWN0b3JpZXMKKyMKK2ZvcmVhY2goZGlyCisgICAgQklORElSCisgICAgU0JJTkRJUgorICAgIExJQkVYRUNESVIKKyAgICBTWVNDT05GRElSCisgICAgU0hBUkVEU1RBVEVESVIKKyAgICBMT0NBTFNUQVRFRElSCisgICAgTElCRElSCisgICAgSU5DTFVERURJUgorICAgIE9MRElOQ0xVREVESVIKKyAgICBEQVRBUk9PVERJUgorICAgIERBVEFESVIKKyAgICBJTkZPRElSCisgICAgTE9DQUxFRElSCisgICAgTUFORElSCisgICAgRE9DRElSCisgICAgKQorICBHTlVJbnN0YWxsRGlyc19nZXRfYWJzb2x1dGVfaW5zdGFsbF9kaXIoQ01BS0VfSU5TVEFMTF9GVUxMXyR7ZGlyfSBDTUFLRV9JTlNUQUxMXyR7ZGlyfSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY21ha2VzY3JpcHRzL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NtYWtlc2NyaXB0cy9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyNmEwZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NtYWtlc2NyaXB0cy9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KQEAgLTAsMCArMSwyNCBAQAorIyBUaGlzIGNvZGUgaXMgZnJvbSB0aGUgQ01ha2UgRkFRCisKK2lmIChOT1QgRVhJU1RTICJAQ01BS0VfQklOQVJZX0RJUkAvaW5zdGFsbF9tYW5pZmVzdC50eHQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDYW5ub3QgZmluZCBpbnN0YWxsIG1hbmlmZXN0OiBcIkBDTUFLRV9CSU5BUllfRElSQC9pbnN0YWxsX21hbmlmZXN0LnR4dFwiIikKK2VuZGlmKE5PVCBFWElTVFMgIkBDTUFLRV9CSU5BUllfRElSQC9pbnN0YWxsX21hbmlmZXN0LnR4dCIpCisKK2ZpbGUoUkVBRCAiQENNQUtFX0JJTkFSWV9ESVJAL2luc3RhbGxfbWFuaWZlc3QudHh0IiBmaWxlcykKK3N0cmluZyhSRUdFWCBSRVBMQUNFICJcbiIgIjsiIGZpbGVzICIke2ZpbGVzfSIpCitsaXN0KFJFVkVSU0UgZmlsZXMpCitmb3JlYWNoIChmaWxlICR7ZmlsZXN9KQorICBtZXNzYWdlKFNUQVRVUyAiVW5pbnN0YWxsaW5nIFwiJEVOVntERVNURElSfSR7ZmlsZX1cIiIpCisgICAgaWYgKEVYSVNUUyAiJEVOVntERVNURElSfSR7ZmlsZX0iKQorICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICBDT01NQU5EICJAQ01BS0VfQ09NTUFOREAiIC1FIHJlbW92ZSAiJEVOVntERVNURElSfSR7ZmlsZX0iCisgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBybV9vdXQKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJtX3JldHZhbAorICAgICAgKQorICAgIGlmKE5PVCAke3JtX3JldHZhbH0gRVFVQUwgMCkKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlByb2JsZW0gd2hlbiByZW1vdmluZyBcIiRFTlZ7REVTVERJUn0ke2ZpbGV9XCIiKQorICAgIGVuZGlmIChOT1QgJHtybV9yZXR2YWx9IEVRVUFMIDApCisgIGVsc2UgKEVYSVNUUyAiJEVOVntERVNURElSfSR7ZmlsZX0iKQorICAgIG1lc3NhZ2UoU1RBVFVTICJGaWxlIFwiJEVOVntERVNURElSfSR7ZmlsZX1cIiBkb2VzIG5vdCBleGlzdC4iKQorICBlbmRpZiAoRVhJU1RTICIkRU5We0RFU1RESVJ9JHtmaWxlfSIpCitlbmRmb3JlYWNoKGZpbGUpCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9jbWFrZXNjcmlwdHMvdGVzdGNsZWFuLmNtYWtlIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY21ha2VzY3JpcHRzL3Rlc3RjbGVhbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzNmYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY21ha2VzY3JpcHRzL3Rlc3RjbGVhbi5jbWFrZQpAQCAtMCwwICsxLDQxIEBACitmaWxlKEdMT0IgRklMRVMKKyAgdGVzdG91dCoKKyAgKl9HUkFZXyouYm1wCisgICpfR1JBWV8qLnBuZworICAqX0dSQVlfKi5wcG0KKyAgKl9HUkFZXyouanBnCisgICpfR1JBWS55dXYKKyAgKl80MjBfKi5ibXAKKyAgKl80MjBfKi5wbmcKKyAgKl80MjBfKi5wcG0KKyAgKl80MjBfKi5qcGcKKyAgKl80MjAueXV2CisgICpfNDIyXyouYm1wCisgICpfNDIyXyoucG5nCisgICpfNDIyXyoucHBtCisgICpfNDIyXyouanBnCisgICpfNDIyLnl1dgorICAqXzQ0NF8qLmJtcAorICAqXzQ0NF8qLnBuZworICAqXzQ0NF8qLnBwbQorICAqXzQ0NF8qLmpwZworICAqXzQ0NC55dXYKKyAgKl80NDBfKi5ibXAKKyAgKl80NDBfKi5wbmcKKyAgKl80NDBfKi5wcG0KKyAgKl80NDBfKi5qcGcKKyAgKl80NDAueXV2CisgICpfNDExXyouYm1wCisgICpfNDExXyoucG5nCisgICpfNDExXyoucHBtCisgICpfNDExXyouanBnCisgICpfNDExLnl1dgorICB0amJlbmNodGVzdCoubG9nCisgIHRqZXhhbXBsZXRlc3QqLmxvZykKKworaWYoTk9UIEZJTEVTIFNUUkVRVUFMICIiKQorICBtZXNzYWdlKFNUQVRVUyAiUmVtb3ZpbmcgdGVzdCBmaWxlcyIpCisgIGZpbGUoUkVNT1ZFICR7RklMRVN9KQorZWxzZSgpCisgIG1lc3NhZ2UoU1RBVFVTICJObyBmaWxlcyB0byByZW1vdmUiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY215ay5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY215ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTg3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9jbXlrLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIGNteWsuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBwZXJmb3JtaW5nIHF1aWNrICYgZGlydHkKKyAqIENNWUs8LT5SR0IgY29udmVyc2lvbi4gIFRoaXMgYWxnb3JpdGhtIGlzIHN1aXRhYmxlIGZvciB0ZXN0aW5nIHB1cnBvc2VzCisgKiBvbmx5LiAgUHJvcGVybHkgY29udmVydGluZyBiZXR3ZWVuIENNWUsgYW5kIFJHQiByZXF1aXJlcyBhIGNvbG9yIG1hbmFnZW1lbnQKKyAqIHN5c3RlbS4KKyAqLworCisjaWZuZGVmIENNWUtfSAorI2RlZmluZSBDTVlLX0gKKworI2luY2x1ZGUgPGppbmNsdWRlLmg+CisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSA8anBlZ2xpYi5oPgorI2luY2x1ZGUgImpjb25maWdpbnQuaCIKKworCisvKiBGdWxseSByZXZlcnNpYmxlICovCisKK0lOTElORQorTE9DQUwodm9pZCkKK3JnYl90b19jbXlrKEpTQU1QTEUgciwgSlNBTVBMRSBnLCBKU0FNUExFIGIsIEpTQU1QTEUgKmMsIEpTQU1QTEUgKm0sCisgICAgICAgICAgICBKU0FNUExFICp5LCBKU0FNUExFICprKQoreworICBkb3VibGUgY3RtcCA9IDEuMCAtICgoZG91YmxlKXIgLyAyNTUuMCk7CisgIGRvdWJsZSBtdG1wID0gMS4wIC0gKChkb3VibGUpZyAvIDI1NS4wKTsKKyAgZG91YmxlIHl0bXAgPSAxLjAgLSAoKGRvdWJsZSliIC8gMjU1LjApOworICBkb3VibGUga3RtcCA9IE1JTihNSU4oY3RtcCwgbXRtcCksIHl0bXApOworCisgIGlmIChrdG1wID09IDEuMCkgY3RtcCA9IG10bXAgPSB5dG1wID0gMC4wOworICBlbHNlIHsKKyAgICBjdG1wID0gKGN0bXAgLSBrdG1wKSAvICgxLjAgLSBrdG1wKTsKKyAgICBtdG1wID0gKG10bXAgLSBrdG1wKSAvICgxLjAgLSBrdG1wKTsKKyAgICB5dG1wID0gKHl0bXAgLSBrdG1wKSAvICgxLjAgLSBrdG1wKTsKKyAgfQorICAqYyA9IChKU0FNUExFKSgyNTUuMCAtIGN0bXAgKiAyNTUuMCArIDAuNSk7CisgICptID0gKEpTQU1QTEUpKDI1NS4wIC0gbXRtcCAqIDI1NS4wICsgMC41KTsKKyAgKnkgPSAoSlNBTVBMRSkoMjU1LjAgLSB5dG1wICogMjU1LjAgKyAwLjUpOworICAqayA9IChKU0FNUExFKSgyNTUuMCAtIGt0bXAgKiAyNTUuMCArIDAuNSk7Cit9CisKKworLyogRnVsbHkgcmV2ZXJzaWJsZSBvbmx5IGZvciBDL00vWS9LIHZhbHVlcyBnZW5lcmF0ZWQgd2l0aCByZ2JfdG9fY215aygpICovCisKK0lOTElORQorTE9DQUwodm9pZCkKK2NteWtfdG9fcmdiKEpTQU1QTEUgYywgSlNBTVBMRSBtLCBKU0FNUExFIHksIEpTQU1QTEUgaywgSlNBTVBMRSAqciwgSlNBTVBMRSAqZywKKyAgICAgICAgICAgIEpTQU1QTEUgKmIpCit7CisgICpyID0gKEpTQU1QTEUpKChkb3VibGUpYyAqIChkb3VibGUpayAvIDI1NS4wICsgMC41KTsKKyAgKmcgPSAoSlNBTVBMRSkoKGRvdWJsZSltICogKGRvdWJsZSlrIC8gMjU1LjAgKyAwLjUpOworICAqYiA9IChKU0FNUExFKSgoZG91YmxlKXkgKiAoZG91YmxlKWsgLyAyNTUuMCArIDAuNSk7Cit9CisKKworI2VuZGlmIC8qIENNWUtfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vY29kZXJ1bGVzLnR4dCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NvZGVydWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmNTkzYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2NvZGVydWxlcy50eHQKQEAgLTAsMCArMSw3OCBAQAorSUpHIEpQRUcgTElCUkFSWTogIENPRElORyBSVUxFUworCitUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKK0NvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KK0l0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBpbmZvcm1hdGlvbgorcmVsZXZhbnQgdG8gbGlianBlZy10dXJiby4KK0ZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnIGZpbGUuCisKKworU2luY2UgbnVtZXJvdXMgcGVvcGxlIHdpbGwgYmUgY29udHJpYnV0aW5nIGNvZGUgYW5kIGJ1ZyBmaXhlcywgaXQncyBpbXBvcnRhbnQKK3RvIGVzdGFibGlzaCBhIGNvbW1vbiBjb2Rpbmcgc3R5bGUuICBUaGUgZ29hbCBvZiB1c2luZyBzaW1pbGFyIGNvZGluZyBzdHlsZXMKK2lzIG11Y2ggbW9yZSBpbXBvcnRhbnQgdGhhbiB0aGUgZGV0YWlscyBvZiBqdXN0IHdoYXQgdGhhdCBzdHlsZSBpcy4KKworSW4gZ2VuZXJhbCB3ZSBmb2xsb3cgdGhlIHJlY29tbWVuZGF0aW9ucyBvZiAiUmVjb21tZW5kZWQgQyBTdHlsZSBhbmQgQ29kaW5nCitTdGFuZGFyZHMiIHJldmlzaW9uIDYuMSAoQ2Fubm9uIGV0IGFsLiBhcyBtb2RpZmllZCBieSBTcGVuY2VyLCBLZXBwZWwgYW5kCitCcmFkZXIpLiAgVGhpcyBkb2N1bWVudCBpcyBhdmFpbGFibGUgaW4gdGhlIElKRyBGVFAgYXJjaGl2ZSAoc2VlCitqcGVnL2RvYy9jc3R5bGUubXMudGJsLlosIG9yIGNzdHlsZS50eHQuWiBmb3IgdGhvc2Ugd2l0aG91dCBucm9mZi90YmwpLgorCitCbG9jayBjb21tZW50cyBzaG91bGQgYmUgbGFpZCBvdXQgdGh1c2x5OgorCisvKgorICogIEJsb2NrIGNvbW1lbnRzIGluIHRoaXMgc3R5bGUuCisgKi8KKworV2UgaW5kZW50IHN0YXRlbWVudHMgaW4gSyZSIHN0eWxlLCBlLmcuLAorICAgICAgICBpZiAodGVzdCkgeworICAgICAgICAgIHRoZW4tcGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbHNlLXBhcnQ7CisgICAgICAgIH0KK3dpdGggdHdvIHNwYWNlcyBwZXIgaW5kZW50YXRpb24gbGV2ZWwuICAoVGhpcyBpbmRlbnRhdGlvbiBjb252ZW50aW9uIGlzCitoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgR05VIEVtYWNzIGFuZCBtYW55IG90aGVyIHRleHQgZWRpdG9ycy4pCisKK011bHRpLXdvcmQgbmFtZXMgc2hvdWxkIGJlIHdyaXR0ZW4gaW4gbG93ZXIgY2FzZSB3aXRoIHVuZGVyc2NvcmVzLCBlLmcuLAorbXVsdGlfd29yZF9uYW1lIChub3QgbXVsdGlXb3JkTmFtZSkuICBQcmVwcm9jZXNzb3Igc3ltYm9scyBhbmQgZW51bSBjb25zdGFudHMKK2FyZSBzaW1pbGFyIGJ1dCB1cHBlciBjYXNlIChNVUxUSV9XT1JEX05BTUUpLiAgTmFtZXMgc2hvdWxkIGJlIHVuaXF1ZSB3aXRoaW4KK3RoZSBmaXJzdCBmaWZ0ZWVuIGNoYXJhY3RlcnMuCisKK05vdGUgdGhhdCBlYWNoIGZ1bmN0aW9uIGRlZmluaXRpb24gbXVzdCBiZWdpbiB3aXRoIEdMT0JBTCh0eXBlKSwgTE9DQUwodHlwZSksCitvciBNRVRIT0RERUYodHlwZSkuICBUaGVzZSBtYWNyb3MgZXhwYW5kIHRvICJzdGF0aWMgdHlwZSIgb3IganVzdCAidHlwZSIgYXMKK2FwcHJvcHJpYXRlLiAgVGhleSBwcm92aWRlIGEgcmVhZGFibGUgaW5kaWNhdGlvbiBvZiB0aGUgcm91dGluZSdzIHVzYWdlIGFuZAorY2FuIHJlYWRpbHkgYmUgY2hhbmdlZCBmb3Igc3BlY2lhbCBuZWVkcy4gIChGb3IgaW5zdGFuY2UsIHNwZWNpYWwgbGlua2FnZQora2V5d29yZHMgY2FuIGJlIGluc2VydGVkIGZvciB1c2UgaW4gV2luZG93cyBETExzLikKKworQSBzaW1pbGFyIHNvbHV0aW9uIGlzIHVzZWQgZm9yIGV4dGVybmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAoc2VlIHRoZSBFWFRFUk4KK21hY3JvLikKKworCitUaGUgSlBFRyBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIGxhcmdlciBwcm9ncmFtcy4gIEZ1cnRoZXJtb3JlLAord2Ugd2FudCBpdCB0byBiZSByZWVudHJhbnQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBwcm9jZXNzCittdWx0aXBsZSBpbWFnZXMgY29uY3VycmVudGx5LiAgVGhlIGZvbGxvd2luZyBydWxlcyBzdXBwb3J0IHRoZXNlIHJlcXVpcmVtZW50czoKKworMS4gQXZvaWQgZGlyZWN0IHVzZSBvZiBmaWxlIEkvTywgIm1hbGxvYyIsIGVycm9yIHJlcG9ydCBwcmludG91dHMsIGV0YzsKK3Bhc3MgdGhlc2UgdGhyb3VnaCB0aGUgY29tbW9uIHJvdXRpbmVzIHByb3ZpZGVkLgorCisyLiBNaW5pbWl6ZSBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbi4gIEZ1bmN0aW9ucyBzaG91bGQgYmUgZGVjbGFyZWQgc3RhdGljCit3aGVyZXZlciBwb3NzaWJsZS4gIChOb3RlIHRoYXQgb3VyIG1ldGhvZC1iYXNlZCBjYWxsaW5nIGNvbnZlbnRpb25zIGhlbHAgdGhpcworYSBsb3Q6IGluIG1hbnkgbW9kdWxlcyBvbmx5IHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB3aWxsIGV2ZXIgbmVlZCB0byBiZQorY2FsbGVkIGRpcmVjdGx5LCBzbyBvbmx5IHRoYXQgZnVuY3Rpb24gbmVlZCBiZSBleHRlcm5hbGx5IHZpc2libGUuKSAgQWxsCitnbG9iYWwgZnVuY3Rpb24gbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggImpwZWdfIi4KKworMy4gRG9uJ3QgdXNlIGdsb2JhbCB2YXJpYWJsZXM7IGFueXRoaW5nIHRoYXQgbXVzdCBiZSB1c2VkIGluIGFub3RoZXIgbW9kdWxlCitzaG91bGQgYmUgaW4gdGhlIGNvbW1vbiBkYXRhIHN0cnVjdHVyZXMuCisKKzQuIERvbid0IHVzZSBzdGF0aWMgdmFyaWFibGVzIGV4Y2VwdCBmb3IgcmVhZC1vbmx5IGNvbnN0YW50IHRhYmxlcy4gIFZhcmlhYmxlcwordGhhdCBzaG91bGQgYmUgcHJpdmF0ZSB0byBhIG1vZHVsZSBjYW4gYmUgcGxhY2VkIGludG8gcHJpdmF0ZSBzdHJ1Y3R1cmVzIChzZWUKK3RoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGRvY3VtZW50LCBzdHJ1Y3R1cmUudHh0KS4KKworNS4gU291cmNlIGZpbGUgbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggImoiIGZvciBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZQorbGlicmFyeSBwcm9wZXI7IHNvdXJjZSBmaWxlcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgbGlicmFyeSwgc3VjaCBhcyBjanBlZy5jCithbmQgZGpwZWcuYywgZG8gbm90IGJlZ2luIHdpdGggImoiLiAgS2VlcCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBjb2RlIGluCitzZXBhcmF0ZSBzb3VyY2UgZmlsZXMgLS0tIHNvbWUgYXBwbGljYXRpb25zIG1heSB3YW50IG9ubHkgb25lIGhhbGYgb2YgdGhlCitsaWJyYXJ5LgorCitOb3RlOiB0aGVzZSBydWxlcyAocGFydGljdWxhcmx5ICM0KSBhcmUgbm90IGZvbGxvd2VkIHJlbGlnaW91c2x5IGluIHRoZQorbW9kdWxlcyB0aGF0IGFyZSB1c2VkIGluIGNqcGVnL2RqcGVnIGJ1dCBhcmUgbm90IHBhcnQgb2YgdGhlIEpQRUcgbGlicmFyeQorcHJvcGVyLiAgVGhvc2UgbW9kdWxlcyBhcmUgbm90IHJlYWxseSBpbnRlbmRlZCB0byBiZSB1c2VkIGluIG90aGVyCithcHBsaWNhdGlvbnMuCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kanBlZy4xIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZGpwZWcuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDIwNGIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZGpwZWcuMQpAQCAtMCwwICsxLDI5NiBAQAorLlRIIERKUEVHIDEgIjEzIE5vdmVtYmVyIDIwMTciCisuU0ggTkFNRQorZGpwZWcgXC0gZGVjb21wcmVzcyBhIEpQRUcgZmlsZSB0byBhbiBpbWFnZSBmaWxlCisuU0ggU1lOT1BTSVMKKy5CIGRqcGVnCitbCisuSSBvcHRpb25zCitdCitbCisuSSBmaWxlbmFtZQorXQorLkxQCisuU0ggREVTQ1JJUFRJT04KKy5MUAorLkIgZGpwZWcKK2RlY29tcHJlc3NlcyB0aGUgbmFtZWQgSlBFRyBmaWxlLCBvciB0aGUgc3RhbmRhcmQgaW5wdXQgaWYgbm8gZmlsZSBpcyBuYW1lZCwKK2FuZCBwcm9kdWNlcyBhbiBpbWFnZSBmaWxlIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBQQk1QTFVTIChQUE0vUEdNKSwgQk1QLAorR0lGLCBUYXJnYSwgb3IgUkxFIChVdGFoIFJhc3RlciBUb29sa2l0KSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBzZWxlY3RlZC4KKyhSTEUgaXMgc3VwcG9ydGVkIG9ubHkgaWYgdGhlIFVSVCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4pCisuU0ggT1BUSU9OUworQWxsIHN3aXRjaCBuYW1lcyBtYXkgYmUgYWJicmV2aWF0ZWQ7IGZvciBleGFtcGxlLAorLkIgXC1ncmF5c2NhbGUKK21heSBiZSB3cml0dGVuCisuQiBcLWdyYXkKK29yCisuQlIgXC1nciAuCitNb3N0IG9mIHRoZSAiYmFzaWMiIHN3aXRjaGVzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBhcyBsaXR0bGUgYXMgb25lIGxldHRlci4KK1VwcGVyIGFuZCBsb3dlciBjYXNlIGFyZSBlcXVpdmFsZW50ICh0aHVzCisuQiBcLUJNUAoraXMgdGhlIHNhbWUgYXMKKy5CUiBcLWJtcCApLgorQnJpdGlzaCBzcGVsbGluZ3MgYXJlIGFsc28gYWNjZXB0ZWQgKGUuZy4sCisuQlIgXC1ncmV5c2NhbGUgKSwKK3Rob3VnaCBmb3IgYnJldml0eSB0aGVzZSBhcmUgbm90IG1lbnRpb25lZCBiZWxvdy4KKy5QUAorVGhlIGJhc2ljIHN3aXRjaGVzIGFyZToKKy5UUAorLkJJIFwtY29sb3JzICIgTiIKK1JlZHVjZSBpbWFnZSB0byBhdCBtb3N0IE4gY29sb3JzLiAgVGhpcyByZWR1Y2VzIHRoZSBudW1iZXIgb2YgY29sb3JzIHVzZWQgaW4KK3RoZSBvdXRwdXQgaW1hZ2UsIHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BsYXllZCBvbiBhIGNvbG9ybWFwcGVkIGRpc3BsYXkgb3IKK3N0b3JlZCBpbiBhIGNvbG9ybWFwcGVkIGZpbGUgZm9ybWF0LiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGFuIDgtYml0CitkaXNwbGF5LCB5b3UnZCBuZWVkIHRvIHJlZHVjZSB0byAyNTYgb3IgZmV3ZXIgY29sb3JzLgorLlRQCisuQkkgXC1xdWFudGl6ZSAiIE4iCitTYW1lIGFzCisuQlIgXC1jb2xvcnMgLgorLkIgXC1jb2xvcnMKK2lzIHRoZSByZWNvbW1lbmRlZCBuYW1lLAorLkIgXC1xdWFudGl6ZQoraXMgcHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisuVFAKKy5CIFwtZmFzdAorU2VsZWN0IHJlY29tbWVuZGVkIHByb2Nlc3Npbmcgb3B0aW9ucyBmb3IgZmFzdCwgbG93IHF1YWxpdHkgb3V0cHV0LiAgKFRoZQorZGVmYXVsdCBvcHRpb25zIGFyZSBjaG9zZW4gZm9yIGhpZ2hlc3QgcXVhbGl0eSBvdXRwdXQuKSAgQ3VycmVudGx5LCB0aGlzIGlzCitlcXVpdmFsZW50IHRvIFxmQlwtZGN0IGZhc3QgXC1ub3Ntb290aCBcLW9uZXBhc3MgXC1kaXRoZXIgb3JkZXJlZFxmUi4KKy5UUAorLkIgXC1ncmF5c2NhbGUKK0ZvcmNlIGdyYXlzY2FsZSBvdXRwdXQgZXZlbiBpZiBKUEVHIGZpbGUgaXMgY29sb3IuICBVc2VmdWwgZm9yIHZpZXdpbmcgb24KK21vbm9jaHJvbWUgZGlzcGxheXM7IGFsc28sCisuQiBkanBlZworcnVucyBub3RpY2VhYmx5IGZhc3RlciBpbiB0aGlzIG1vZGUuCisuVFAKKy5CIFwtcmdiCitGb3JjZSBSR0Igb3V0cHV0IGV2ZW4gaWYgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZS4KKy5UUAorLkJJIFwtc2NhbGUgIiBNL04iCitTY2FsZSB0aGUgb3V0cHV0IGltYWdlIGJ5IGEgZmFjdG9yIE0vTi4gIEN1cnJlbnRseSB0aGUgc2NhbGUgZmFjdG9yIG11c3QgYmUKK00vOCwgd2hlcmUgTSBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTYgaW5jbHVzaXZlLCBvciBhbnkgcmVkdWNlZCBmcmFjdGlvbgordGhlcmVvZiAoc3VjaCBhcyAxLzIsIDMvNCwgZXRjLikgIFNjYWxpbmcgaXMgaGFuZHkgaWYgdGhlIGltYWdlIGlzIGxhcmdlciB0aGFuCit5b3VyIHNjcmVlbjsgYWxzbywKKy5CIGRqcGVnCitydW5zIG11Y2ggZmFzdGVyIHdoZW4gc2NhbGluZyBkb3duIHRoZSBvdXRwdXQuCisuVFAKKy5CIFwtYm1wCitTZWxlY3QgQk1QIG91dHB1dCBmb3JtYXQgKFdpbmRvd3MgZmxhdm9yKS4gIDgtYml0IGNvbG9ybWFwcGVkIGZvcm1hdCBpcworZW1pdHRlZCBpZgorLkIgXC1jb2xvcnMKK29yCisuQiBcLWdyYXlzY2FsZQoraXMgc3BlY2lmaWVkLCBvciBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZTsgb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvcgorZm9ybWF0IGlzIGVtaXR0ZWQuCisuVFAKKy5CIFwtZ2lmCitTZWxlY3QgR0lGIG91dHB1dCBmb3JtYXQuICBTaW5jZSBHSUYgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMjU2IGNvbG9ycywKKy5CIFwtY29sb3JzIDI1NgoraXMgYXNzdW1lZCAodW5sZXNzIHlvdSBzcGVjaWZ5IGEgc21hbGxlciBudW1iZXIgb2YgY29sb3JzKS4KKy5UUAorLkIgXC1vczIKK1NlbGVjdCBCTVAgb3V0cHV0IGZvcm1hdCAoT1MvMiAxLnggZmxhdm9yKS4gIDgtYml0IGNvbG9ybWFwcGVkIGZvcm1hdCBpcworZW1pdHRlZCBpZgorLkIgXC1jb2xvcnMKK29yCisuQiBcLWdyYXlzY2FsZQoraXMgc3BlY2lmaWVkLCBvciBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZTsgb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvcgorZm9ybWF0IGlzIGVtaXR0ZWQuCisuVFAKKy5CIFwtcG5tCitTZWxlY3QgUEJNUExVUyAoUFBNL1BHTSkgb3V0cHV0IGZvcm1hdCAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3JtYXQpLgorUEdNIGlzIGVtaXR0ZWQgaWYgdGhlIEpQRUcgZmlsZSBpcyBncmF5c2NhbGUgb3IgaWYKKy5CIFwtZ3JheXNjYWxlCitpcyBzcGVjaWZpZWQ7IG90aGVyd2lzZSBQUE0gaXMgZW1pdHRlZC4KKy5UUAorLkIgXC1ybGUKK1NlbGVjdCBSTEUgb3V0cHV0IGZvcm1hdC4gIChSZXF1aXJlcyBVUlQgbGlicmFyeS4pCisuVFAKKy5CIFwtdGFyZ2EKK1NlbGVjdCBUYXJnYSBvdXRwdXQgZm9ybWF0LiAgR3JheXNjYWxlIGZvcm1hdCBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMKK2dyYXlzY2FsZSBvciBpZgorLkIgXC1ncmF5c2NhbGUKK2lzIHNwZWNpZmllZDsgb3RoZXJ3aXNlLCBjb2xvcm1hcHBlZCBmb3JtYXQgaXMgZW1pdHRlZCBpZgorLkIgXC1jb2xvcnMKK2lzIHNwZWNpZmllZDsgb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvciBmb3JtYXQgaXMgZW1pdHRlZC4KKy5QUAorU3dpdGNoZXMgZm9yIGFkdmFuY2VkIHVzZXJzOgorLlRQCisuQiBcLWRjdCBpbnQKK1VzZSBpbnRlZ2VyIERDVCBtZXRob2QgKGRlZmF1bHQpLgorLlRQCisuQiBcLWRjdCBmYXN0CitVc2UgZmFzdCBpbnRlZ2VyIERDVCAobGVzcyBhY2N1cmF0ZSkuCitJbiBsaWJqcGVnLXR1cmJvLCB0aGUgZmFzdCBtZXRob2QgaXMgZ2VuZXJhbGx5IGFib3V0IDUtMTUlIGZhc3RlciB0aGFuIHRoZSBpbnQKK21ldGhvZCB3aGVuIHVzaW5nIHRoZSB4ODYveDg2LTY0IFNJTUQgZXh0ZW5zaW9ucyAocmVzdWx0cyBtYXkgdmFyeSB3aXRoIG90aGVyCitTSU1EIGltcGxlbWVudGF0aW9ucywgb3Igd2hlbiB1c2luZyBsaWJqcGVnLXR1cmJvIHdpdGhvdXQgU0lNRCBleHRlbnNpb25zLikgIElmCit0aGUgSlBFRyBpbWFnZSB3YXMgY29tcHJlc3NlZCB1c2luZyBhIHF1YWxpdHkgbGV2ZWwgb2YgODUgb3IgYmVsb3csIHRoZW4gdGhlcmUKK3Nob3VsZCBiZSBsaXR0bGUgb3Igbm8gcGVyY2VwdGlibGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gYWxnb3JpdGhtcy4gIFdoZW4KK2RlY29tcHJlc3NpbmcgaW1hZ2VzIHRoYXQgd2VyZSBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDg1LAoraG93ZXZlciwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmFzdCBhbmQgaW50IG1ldGhvZHMgYmVjb21lcyBtb3JlCitwcm9ub3VuY2VkLiAgV2l0aCBpbWFnZXMgY29tcHJlc3NlZCB1c2luZyBxdWFsaXR5PTk3LCBmb3IgaW5zdGFuY2UsIHRoZSBmYXN0CittZXRob2QgaW5jdXJzIGdlbmVyYWxseSBhYm91dCBhIDQtNiBkQiBsb3NzIChpbiBQU05SKSByZWxhdGl2ZSB0byB0aGUgaW50CittZXRob2QsIGJ1dCB0aGlzIGNhbiBiZSBsYXJnZXIgZm9yIHNvbWUgaW1hZ2VzLiAgSWYgeW91IGNhbiBhdm9pZCBpdCwgZG8gbm90Cit1c2UgdGhlIGZhc3QgbWV0aG9kIHdoZW4gZGVjb21wcmVzc2luZyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQgdXNpbmcKK3F1YWxpdHkgbGV2ZWxzIGFib3ZlIDk3LiAgVGhlIGFsZ29yaXRobSBvZnRlbiBkZWdlbmVyYXRlcyBmb3Igc3VjaCBpbWFnZXMgYW5kCitjYW4gYWN0dWFsbHkgcHJvZHVjZSBhIG1vcmUgbG9zc3kgb3V0cHV0IGltYWdlIHRoYW4gaWYgdGhlIEpQRUcgaW1hZ2UgaGFkIGJlZW4KK2NvbXByZXNzZWQgdXNpbmcgbG93ZXIgcXVhbGl0eSBsZXZlbHMuCisuVFAKKy5CIFwtZGN0IGZsb2F0CitVc2UgZmxvYXRpbmctcG9pbnQgRENUIG1ldGhvZC4KK1RoZSBmbG9hdCBtZXRob2QgaXMgbWFpbmx5IGEgbGVnYWN5IGZlYXR1cmUuICBJdCBkb2VzIG5vdCBwcm9kdWNlIHNpZ25pZmljYW50bHkKK21vcmUgYWNjdXJhdGUgcmVzdWx0cyB0aGFuIHRoZSBpbnQgbWV0aG9kLCBhbmQgaXQgaXMgbXVjaCBzbG93ZXIuICBUaGUgZmxvYXQKK21ldGhvZCBtYXkgYWxzbyBnaXZlIGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyBkdWUgdG8gdmFyeWluZworcm91bmRvZmYgYmVoYXZpb3IsIHdoZXJlYXMgdGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzIG9uCithbGwgbWFjaGluZXMuCisuVFAKKy5CIFwtZGl0aGVyIGZzCitVc2UgRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCisuVFAKKy5CIFwtZGl0aGVyIG9yZGVyZWQKK1VzZSBvcmRlcmVkIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCisuVFAKKy5CIFwtZGl0aGVyIG5vbmUKK0RvIG5vdCB1c2UgZGl0aGVyaW5nIGluIGNvbG9yIHF1YW50aXphdGlvbi4KK0J5IGRlZmF1bHQsIEZsb3lkLVN0ZWluYmVyZyBkaXRoZXJpbmcgaXMgYXBwbGllZCB3aGVuIHF1YW50aXppbmcgY29sb3JzOyB0aGlzCitpcyBzbG93IGJ1dCB1c3VhbGx5IHByb2R1Y2VzIHRoZSBiZXN0IHJlc3VsdHMuICBPcmRlcmVkIGRpdGhlciBpcyBhIGNvbXByb21pc2UKK2JldHdlZW4gc3BlZWQgYW5kIHF1YWxpdHk7IG5vIGRpdGhlcmluZyBpcyBmYXN0IGJ1dCB1c3VhbGx5IGxvb2tzIGF3ZnVsLiAgTm90ZQordGhhdCB0aGVzZSBzd2l0Y2hlcyBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgY29sb3IgcXVhbnRpemF0aW9uIGlzIGJlaW5nIGRvbmUuCitPcmRlcmVkIGRpdGhlciBpcyBvbmx5IGF2YWlsYWJsZSBpbgorLkIgXC1vbmVwYXNzCittb2RlLgorLlRQCisuQkkgXC1pY2MgIiBmaWxlIgorRXh0cmFjdCBJQ0MgY29sb3IgbWFuYWdlbWVudCBwcm9maWxlIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4KKy5UUAorLkJJIFwtbWFwICIgZmlsZSIKK1F1YW50aXplIHRvIHRoZSBjb2xvcnMgdXNlZCBpbiB0aGUgc3BlY2lmaWVkIGltYWdlIGZpbGUuICBUaGlzIGlzIHVzZWZ1bCBmb3IKK3Byb2R1Y2luZyBtdWx0aXBsZSBmaWxlcyB3aXRoIGlkZW50aWNhbCBjb2xvciBtYXBzLCBvciBmb3IgZm9yY2luZyBhCitwcmVkZWZpbmVkIHNldCBvZiBjb2xvcnMgdG8gYmUgdXNlZC4gIFRoZQorLkkgZmlsZQorbXVzdCBiZSBhIEdJRiBvciBQUE0gZmlsZS4gVGhpcyBvcHRpb24gb3ZlcnJpZGVzCisuQiBcLWNvbG9ycworYW5kCisuQlIgXC1vbmVwYXNzIC4KKy5UUAorLkIgXC1ub3Ntb290aAorVXNlIGEgZmFzdGVyLCBsb3dlci1xdWFsaXR5IHVwc2FtcGxpbmcgcm91dGluZS4KKy5UUAorLkIgXC1vbmVwYXNzCitVc2Ugb25lLXBhc3MgaW5zdGVhZCBvZiB0d28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24uICBUaGUgb25lLXBhc3MgbWV0aG9kIGlzCitmYXN0ZXIgYW5kIG5lZWRzIGxlc3MgbWVtb3J5LCBidXQgaXQgcHJvZHVjZXMgYSBsb3dlci1xdWFsaXR5IGltYWdlLgorLkIgXC1vbmVwYXNzCitpcyBpZ25vcmVkIHVubGVzcyB5b3UgYWxzbyBzYXkKKy5CIFwtY29sb3JzCisuSVIgTiAuCitBbHNvLCB0aGUgb25lLXBhc3MgbWV0aG9kIGlzIGFsd2F5cyB1c2VkIGZvciBncmF5c2NhbGUgb3V0cHV0ICh0aGUgdHdvLXBhc3MKK21ldGhvZCBpcyBubyBpbXByb3ZlbWVudCB0aGVuKS4KKy5UUAorLkJJIFwtbWF4bWVtb3J5ICIgTiIKK1NldCBsaW1pdCBmb3IgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gcHJvY2Vzc2luZyBsYXJnZSBpbWFnZXMuICBWYWx1ZSBpcworaW4gdGhvdXNhbmRzIG9mIGJ5dGVzLCBvciBtaWxsaW9ucyBvZiBieXRlcyBpZiAiTSIgaXMgYXR0YWNoZWQgdG8gdGhlCitudW1iZXIuICBGb3IgZXhhbXBsZSwKKy5CIFwtbWF4IDRtCitzZWxlY3RzIDQwMDAwMDAgYnl0ZXMuICBJZiBtb3JlIHNwYWNlIGlzIG5lZWRlZCwgYW4gZXJyb3Igd2lsbCBvY2N1ci4KKy5UUAorLkJJIFwtb3V0ZmlsZSAiIG5hbWUiCitTZW5kIG91dHB1dCBpbWFnZSB0byB0aGUgbmFtZWQgZmlsZSwgbm90IHRvIHN0YW5kYXJkIG91dHB1dC4KKy5UUAorLkJJIFwtbWVtc3JjCitMb2FkIGlucHV0IGZpbGUgaW50byBtZW1vcnkgYmVmb3JlIGRlY29tcHJlc3NpbmcuICBUaGlzIGZlYXR1cmUgd2FzIGltcGxlbWVudGVkCittYWlubHkgYXMgYSB3YXkgb2YgdGVzdGluZyB0aGUgaW4tbWVtb3J5IHNvdXJjZSBtYW5hZ2VyIChqcGVnX21lbV9zcmMoKS4pCisuVFAKKy5CSSBcLXNraXAgIiBZMCxZMSIKK0RlY29tcHJlc3MgYWxsIHJvd3Mgb2YgdGhlIEpQRUcgaW1hZ2UgZXhjZXB0IHRob3NlIGJldHdlZW4gWTAgYW5kIFkxCisoaW5jbHVzaXZlLikgIE5vdGUgdGhhdCBpZiBkZWNvbXByZXNzaW9uIHNjYWxpbmcgaXMgYmVpbmcgdXNlZCwgdGhlbiBZMCBhbmQgWTEKK2FyZSByZWxhdGl2ZSB0byB0aGUgc2NhbGVkIGltYWdlIGRpbWVuc2lvbnMuCisuVFAKKy5CSSBcLWNyb3AgIiBXeEgrWCtZIgorRGVjb21wcmVzcyBvbmx5IGEgcmVjdGFuZ3VsYXIgc3VicmVnaW9uIG9mIHRoZSBpbWFnZSwgc3RhcnRpbmcgYXQgcG9pbnQgWCxZCit3aXRoIHdpZHRoIFcgYW5kIGhlaWdodCBILiAgSWYgbmVjZXNzYXJ5LCBYIHdpbGwgYmUgc2hpZnRlZCBsZWZ0IHRvIHRoZSBuZWFyZXN0CitpTUNVIGJvdW5kYXJ5LCBhbmQgdGhlIHdpZHRoIHdpbGwgYmUgaW5jcmVhc2VkIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IGlmCitkZWNvbXByZXNzaW9uIHNjYWxpbmcgaXMgYmVpbmcgdXNlZCwgdGhlbiBYLCBZLCBXLCBhbmQgSCBhcmUgcmVsYXRpdmUgdG8gdGhlCitzY2FsZWQgaW1hZ2UgZGltZW5zaW9ucy4gIEN1cnJlbnRseSB0aGlzIG9wdGlvbiBvbmx5IHdvcmtzIHdpdGggdGhlCitQQk1QTFVTIChQUE0vUEdNKSwgR0lGLCBhbmQgVGFyZ2Egb3V0cHV0IGZvcm1hdHMuCisuVFAKKy5CIFwtdmVyYm9zZQorRW5hYmxlIGRlYnVnIHByaW50b3V0LiAgTW9yZQorLkJSIFwtdiAncworZ2l2ZSBtb3JlIG91dHB1dC4gIEFsc28sIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBhdCBzdGFydHVwLgorLlRQCisuQiBcLWRlYnVnCitTYW1lIGFzCisuQlIgXC12ZXJib3NlIC4KKy5UUAorLkIgXC12ZXJzaW9uCitQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0LgorLlNIIEVYQU1QTEVTCisuTFAKK1RoaXMgZXhhbXBsZSBkZWNvbXByZXNzZXMgdGhlIEpQRUcgZmlsZSBmb28uanBnLCBxdWFudGl6ZXMgaXQgdG8KKzI1NiBjb2xvcnMsIGFuZCBzYXZlcyB0aGUgb3V0cHV0IGluIDgtYml0IEJNUCBmb3JtYXQgaW4gZm9vLmJtcDoKKy5JUAorLkIgZGpwZWcgXC1jb2xvcnMgMjU2IFwtYm1wCisuSSBmb28uanBnCisuQiA+CisuSSBmb28uYm1wCisuU0ggSElOVFMKK1RvIGdldCBhIHF1aWNrIHByZXZpZXcgb2YgYW4gaW1hZ2UsIHVzZSB0aGUKKy5CIFwtZ3JheXNjYWxlCithbmQvb3IKKy5CIFwtc2NhbGUKK3N3aXRjaGVzLgorLkIgXC1ncmF5c2NhbGUgXC1zY2FsZSAxLzgKK2lzIHRoZSBmYXN0ZXN0IGNhc2UuCisuUFAKK1NldmVyYWwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRoYXQgdHJhZGUgb2ZmIGltYWdlIHF1YWxpdHkgdG8gZ2FpbiBzcGVlZC4KKy5CIFwtZmFzdAordHVybnMgb24gdGhlIHJlY29tbWVuZGVkIHNldHRpbmdzLgorLlBQCisuQiBcLWRjdCBmYXN0CithbmQvb3IKKy5CIFwtbm9zbW9vdGgKK2dhaW4gc3BlZWQgYXQgYSBzbWFsbCBzYWNyaWZpY2UgaW4gcXVhbGl0eS4KK1doZW4gcHJvZHVjaW5nIGEgY29sb3ItcXVhbnRpemVkIGltYWdlLAorLkIgXC1vbmVwYXNzIFwtZGl0aGVyIG9yZGVyZWQKK2lzIGZhc3QgYnV0IG11Y2ggbG93ZXIgcXVhbGl0eSB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorLkIgXC1kaXRoZXIgbm9uZQorbWF5IGdpdmUgYWNjZXB0YWJsZSByZXN1bHRzIGluIHR3by1wYXNzIG1vZGUsIGJ1dCBpcyBzZWxkb20gdG9sZXJhYmxlIGluCitvbmUtcGFzcyBtb2RlLgorLlBQCitJZiB5b3UgYXJlIGZvcnR1bmF0ZSBlbm91Z2ggdG8gaGF2ZSB2ZXJ5IGZhc3QgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUsCitcZkJcLWRjdCBmbG9hdFxmUiBtYXkgYmUgZXZlbiBmYXN0ZXIgdGhhbiBcZkJcLWRjdCBmYXN0XGZSLiAgQnV0IG9uIG1vc3QKK21hY2hpbmVzIFxmQlwtZGN0IGZsb2F0XGZSIGlzIHNsb3dlciB0aGFuIFxmQlwtZGN0IGludFxmUjsgaW4gdGhpcyBjYXNlIGl0IGlzCitub3Qgd29ydGggdXNpbmcsIGJlY2F1c2UgaXRzIHRoZW9yZXRpY2FsIGFjY3VyYWN5IGFkdmFudGFnZSBpcyB0b28gc21hbGwgdG8gYmUKK3NpZ25pZmljYW50IGluIHByYWN0aWNlLgorLlNIIEVOVklST05NRU5UCisuVFAKKy5CIEpQRUdNRU0KK0lmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBpdHMgdmFsdWUgaXMgdGhlIGRlZmF1bHQgbWVtb3J5IGxpbWl0LgorVGhlIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBkZXNjcmliZWQgZm9yIHRoZQorLkIgXC1tYXhtZW1vcnkKK3N3aXRjaC4KKy5CIEpQRUdNRU0KK292ZXJyaWRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBzcGVjaWZpZWQgd2hlbiB0aGUgcHJvZ3JhbSB3YXMgY29tcGlsZWQsIGFuZAoraXRzZWxmIGlzIG92ZXJyaWRkZW4gYnkgYW4gZXhwbGljaXQKKy5CUiBcLW1heG1lbW9yeSAuCisuU0ggU0VFIEFMU08KKy5CUiBjanBlZyAoMSksCisuQlIganBlZ3RyYW4gKDEpLAorLkJSIHJkanBnY29tICgxKSwKKy5CUiB3cmpwZ2NvbSAoMSkKKy5icgorLkJSIHBwbSAoNSksCisuQlIgcGdtICg1KQorLmJyCitXYWxsYWNlLCBHcmVnb3J5IEsuICAiVGhlIEpQRUcgU3RpbGwgUGljdHVyZSBDb21wcmVzc2lvbiBTdGFuZGFyZCIsCitDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLCBBcHJpbCAxOTkxICh2b2wuIDM0LCBuby4gNCksIHBwLiAzMC00NC4KKy5TSCBBVVRIT1IKK0luZGVwZW5kZW50IEpQRUcgR3JvdXAKKy5QUAorVGhpcyBmaWxlIHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBpbmZvcm1hdGlvbgorcmVsZXZhbnQgdG8gbGlianBlZy10dXJibywgdG8gd29yZHNtaXRoIGNlcnRhaW4gc2VjdGlvbnMsIGFuZCB0byBkZXNjcmliZQorZmVhdHVyZXMgbm90IHByZXNlbnQgaW4gbGlianBlZy4KKy5TSCBJU1NVRVMKK1N1cHBvcnQgZm9yIGNvbXByZXNzZWQgR0lGIG91dHB1dCBmaWxlcyB3YXMgcmVtb3ZlZCBpbiBkanBlZyB2NmIgZHVlIHRvCitjb25jZXJucyBvdmVyIHRoZSBVbmlzeXMgTFpXIHBhdGVudC4gIEFsdGhvdWdoIHRoaXMgcGF0ZW50IGV4cGlyZWQgaW4gMjAwNiwKK2RqcGVnIHN0aWxsIGxhY2tzIGNvbXByZXNzZWQgR0lGIHN1cHBvcnQsIGZvciB0aGVzZSBoaXN0b3JpY2FsIHJlYXNvbnMuCisoQ29udmVyc2lvbiBvZiBKUEVHIGZpbGVzIHRvIEdJRiBpcyB1c3VhbGx5IGEgYmFkIGlkZWEgYW55d2F5LCBzaW5jZSBHSUYgaXMgYQorMjU2LWNvbG9yIGZvcm1hdC4pICBUaGUgdW5jb21wcmVzc2VkIEdJRiBmaWxlcyB0aGF0IGRqcGVnIGdlbmVyYXRlcyBhcmUgbGFyZ2VyCit0aGFuIHRoZXkgc2hvdWxkIGJlLCBidXQgdGhleSBhcmUgcmVhZGFibGUgYnkgc3RhbmRhcmQgR0lGIGRlY29kZXJzLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZGpwZWcuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RqcGVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwZTkwZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RqcGVnLmMKQEAgLTAsMCArMSw4MjAgQEAKKy8qCisgKiBkanBlZy5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAyMDEzIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSwgMjAxMy0yMDE3LCBELiBSLiBDb21tYW5kZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEdvb2dsZSwgSW5jLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29tbWFuZC1saW5lIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHdpdGggVW5peC0gb3IgTVMtRE9TLXN0eWxlIGNvbW1hbmQgbGluZXMuCisgKgorICogVHdvIGRpZmZlcmVudCBjb21tYW5kIGxpbmUgc3R5bGVzIGFyZSBwZXJtaXR0ZWQsIGRlcGVuZGluZyBvbiB0aGUKKyAqIGNvbXBpbGUtdGltZSBzd2l0Y2ggVFdPX0ZJTEVfQ09NTUFORExJTkU6CisgKiAgICAgIGRqcGVnIFtvcHRpb25zXSAgaW5wdXRmaWxlIG91dHB1dGZpbGUKKyAqICAgICAgZGpwZWcgW29wdGlvbnNdICBbaW5wdXRmaWxlXQorICogSW4gdGhlIHNlY29uZCBzdHlsZSwgb3V0cHV0IGlzIGFsd2F5cyB0byBzdGFuZGFyZCBvdXRwdXQsIHdoaWNoIHlvdSdkCisgKiBub3JtYWxseSByZWRpcmVjdCB0byBhIGZpbGUgb3IgcGlwZSB0byBzb21lIG90aGVyIHByb2dyYW0uICBJbnB1dCBpcworICogZWl0aGVyIGZyb20gYSBuYW1lZCBmaWxlIG9yIGZyb20gc3RhbmRhcmQgaW5wdXQgKHR5cGljYWxseSByZWRpcmVjdGVkKS4KKyAqIFRoZSBzZWNvbmQgc3R5bGUgaXMgY29udmVuaWVudCBvbiBVbml4IGJ1dCBpcyB1bmhlbHBmdWwgb24gc3lzdGVtcyB0aGF0CisgKiBkb24ndCBzdXBwb3J0IHBpcGVzLiAgQWxzbywgeW91IE1VU1QgdXNlIHRoZSBmaXJzdCBzdHlsZSBpZiB5b3VyIHN5c3RlbQorICogZG9lc24ndCBkbyBiaW5hcnkgSS9PIHRvIHN0ZGluL3N0ZG91dC4KKyAqIFRvIHNpbXBsaWZ5IHNjcmlwdCB3cml0aW5nLCB0aGUgIi1vdXRmaWxlIiBzd2l0Y2ggaXMgcHJvdmlkZWQuICBUaGUgc3ludGF4CisgKiAgICAgIGRqcGVnIFtvcHRpb25zXSAgLW91dGZpbGUgb3V0cHV0ZmlsZSAgaW5wdXRmaWxlCisgKiB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoIGNvbW1hbmQgbGluZSBzdHlsZSBpcyB1c2VkLgorICovCisKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJqdmVyc2lvbi5oIiAgICAgICAgICAgLyogZm9yIHZlcnNpb24gbWVzc2FnZSAqLworI2luY2x1ZGUgImpjb25maWdpbnQuaCIKKworI2lmbmRlZiBIQVZFX1NURExJQl9IICAgICAgICAgICAvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIGZyZWUoKSAqLworZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpwdHIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPiAgICAgICAgICAgICAgLyogdG8gZGVjbGFyZSBpc3ByaW50KCkgKi8KKworI2lmZGVmIFVTRV9DQ09NTUFORCAgICAgICAgICAgICAvKiBjb21tYW5kLWxpbmUgcmVhZGVyIGZvciBNYWNpbnRvc2ggKi8KKyNpZmRlZiBfX01XRVJLU19fCisjaW5jbHVkZSA8U0lPVVguaD4gICAgICAgICAgICAgIC8qIE1ldHJvd2Vya3MgbmVlZHMgdGhpcyAqLworI2luY2x1ZGUgPGNvbnNvbGUuaD4gICAgICAgICAgICAvKiAuLi4gYW5kIHRoaXMgKi8KKyNlbmRpZgorI2lmZGVmIFRISU5LX0MKKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogVGhpbmsgZGVjbGFyZXMgaXQgaGVyZSAqLworI2VuZGlmCisjZW5kaWYKKworCisvKiBDcmVhdGUgdGhlIGFkZC1vbiBtZXNzYWdlIHN0cmluZyB0YWJsZS4gKi8KKworI2RlZmluZSBKTUVTU0FHRShjb2RlLCBzdHJpbmcpICBzdHJpbmcsCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2RqcGVnX21lc3NhZ2VfdGFibGVbXSA9IHsKKyNpbmNsdWRlICJjZGVycm9yLmgiCisgIE5VTEwKK307CisKKworLyoKKyAqIFRoaXMgbGlzdCBkZWZpbmVzIHRoZSBrbm93biBvdXRwdXQgaW1hZ2UgZm9ybWF0cworICogKG5vdCBhbGwgb2Ygd2hpY2ggbmVlZCBiZSBzdXBwb3J0ZWQgYnkgYSBnaXZlbiB2ZXJzaW9uKS4KKyAqIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgYnkgZGVmaW5pbmcgREVGQVVMVF9GTVQ7CisgKiBpbmRlZWQsIHlvdSBoYWQgYmV0dGVyIGRvIHNvIGlmIHlvdSB1bmRlZmluZSBQUE1fU1VQUE9SVEVELgorICovCisKK3R5cGVkZWYgZW51bSB7CisgIEZNVF9CTVAsICAgICAgICAgICAgICAgICAgICAgIC8qIEJNUCBmb3JtYXQgKFdpbmRvd3MgZmxhdm9yKSAqLworICBGTVRfR0lGLCAgICAgICAgICAgICAgICAgICAgICAvKiBHSUYgZm9ybWF0ICovCisgIEZNVF9PUzIsICAgICAgICAgICAgICAgICAgICAgIC8qIEJNUCBmb3JtYXQgKE9TLzIgZmxhdm9yKSAqLworICBGTVRfUFBNLCAgICAgICAgICAgICAgICAgICAgICAvKiBQUE0vUEdNIChQQk1QTFVTIGZvcm1hdHMpICovCisgIEZNVF9STEUsICAgICAgICAgICAgICAgICAgICAgIC8qIFJMRSBmb3JtYXQgKi8KKyAgRk1UX1RBUkdBLCAgICAgICAgICAgICAgICAgICAgLyogVGFyZ2EgZm9ybWF0ICovCisgIEZNVF9USUZGICAgICAgICAgICAgICAgICAgICAgIC8qIFRJRkYgZm9ybWF0ICovCit9IElNQUdFX0ZPUk1BVFM7CisKKyNpZm5kZWYgREVGQVVMVF9GTVQgICAgICAgICAgICAgLyogc28gY2FuIG92ZXJyaWRlIGZyb20gQ0ZMQUdTIGluIE1ha2VmaWxlICovCisjZGVmaW5lIERFRkFVTFRfRk1UICAgICBGTVRfUFBNCisjZW5kaWYKKworc3RhdGljIElNQUdFX0ZPUk1BVFMgcmVxdWVzdGVkX2ZtdDsKKworCisvKgorICogQXJndW1lbnQtcGFyc2luZyBjb2RlLgorICogVGhlIHN3aXRjaCBwYXJzZXIgaXMgZGVzaWduZWQgdG8gYmUgdXNlZnVsIHdpdGggRE9TLXN0eWxlIGNvbW1hbmQgbGluZQorICogc3ludGF4LCBpZSwgaW50ZXJtaXhlZCBzd2l0Y2hlcyBhbmQgZmlsZSBuYW1lcywgd2hlcmUgb25seSB0aGUgc3dpdGNoZXMKKyAqIHRvIHRoZSBsZWZ0IG9mIGEgZ2l2ZW4gZmlsZSBuYW1lIGFmZmVjdCBwcm9jZXNzaW5nIG9mIHRoYXQgZmlsZS4KKyAqIFRoZSBtYWluIHByb2dyYW0gaW4gdGhpcyBmaWxlIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIHRoaXMgY2FwYWJpbGl0eS4uLgorICovCisKKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOyAgICAvKiBwcm9ncmFtIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCitzdGF0aWMgY2hhciAqaWNjX2ZpbGVuYW1lOyAgICAgIC8qIGZvciAtaWNjIHN3aXRjaCAqLworc3RhdGljIGNoYXIgKm91dGZpbGVuYW1lOyAgICAgICAvKiBmb3IgLW91dGZpbGUgc3dpdGNoICovCitib29sZWFuIG1lbXNyYzsgICAgICAgICAgICAgICAgIC8qIGZvciAtbWVtc3JjIHN3aXRjaCAqLworYm9vbGVhbiBza2lwLCBjcm9wOworSkRJTUVOU0lPTiBza2lwX3N0YXJ0LCBza2lwX2VuZDsKK0pESU1FTlNJT04gY3JvcF94LCBjcm9wX3ksIGNyb3Bfd2lkdGgsIGNyb3BfaGVpZ2h0OworI2RlZmluZSBJTlBVVF9CVUZfU0laRSAgNDA5NgorCisKK0xPQ0FMKHZvaWQpCit1c2FnZSh2b2lkKQorLyogY29tcGxhaW4gYWJvdXQgYmFkIGNvbW1hbmQgbGluZSAqLworeworICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBbc3dpdGNoZXNdICIsIHByb2duYW1lKTsKKyNpZmRlZiBUV09fRklMRV9DT01NQU5ETElORQorICBmcHJpbnRmKHN0ZGVyciwgImlucHV0ZmlsZSBvdXRwdXRmaWxlXG4iKTsKKyNlbHNlCisgIGZwcmludGYoc3RkZXJyLCAiW2lucHV0ZmlsZV1cbiIpOworI2VuZGlmCisKKyAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyAobmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkKTpcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWNvbG9ycyBOICAgICAgUmVkdWNlIGltYWdlIHRvIG5vIG1vcmUgdGhhbiBOIGNvbG9yc1xuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtZmFzdCAgICAgICAgICBGYXN0LCBsb3ctcXVhbGl0eSBwcm9jZXNzaW5nXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1ncmF5c2NhbGUgICAgIEZvcmNlIGdyYXlzY2FsZSBvdXRwdXRcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXJnYiAgICAgICAgICAgRm9yY2UgUkdCIG91dHB1dFxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtcmdiNTY1ICAgICAgICBGb3JjZSBSR0I1NjUgb3V0cHV0XG4iKTsKKyNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtc2NhbGUgTS9OICAgICBTY2FsZSBvdXRwdXQgaW1hZ2UgYnkgZnJhY3Rpb24gTS9OLCBlZywgMS84XG4iKTsKKyNlbmRpZgorI2lmZGVmIEJNUF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1ibXAgICAgICAgICAgIFNlbGVjdCBCTVAgb3V0cHV0IGZvcm1hdCAoV2luZG93cyBzdHlsZSklc1xuIiwKKyAgICAgICAgICAoREVGQVVMVF9GTVQgPT0gRk1UX0JNUCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyNpZmRlZiBHSUZfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtZ2lmICAgICAgICAgICBTZWxlY3QgR0lGIG91dHB1dCBmb3JtYXQlc1xuIiwKKyAgICAgICAgICAoREVGQVVMVF9GTVQgPT0gRk1UX0dJRiA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyNpZmRlZiBCTVBfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtb3MyICAgICAgICAgICBTZWxlY3QgQk1QIG91dHB1dCBmb3JtYXQgKE9TLzIgc3R5bGUpJXNcbiIsCisgICAgICAgICAgKERFRkFVTFRfRk1UID09IEZNVF9PUzIgPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisjaWZkZWYgUFBNX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXBubSAgICAgICAgICAgU2VsZWN0IFBCTVBMVVMgKFBQTS9QR00pIG91dHB1dCBmb3JtYXQlc1xuIiwKKyAgICAgICAgICAoREVGQVVMVF9GTVQgPT0gRk1UX1BQTSA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisjZW5kaWYKKyNpZmRlZiBSTEVfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtcmxlICAgICAgICAgICBTZWxlY3QgVXRhaCBSTEUgb3V0cHV0IGZvcm1hdCVzXG4iLAorICAgICAgICAgIChERUZBVUxUX0ZNVCA9PSBGTVRfUkxFID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLXRhcmdhICAgICAgICAgU2VsZWN0IFRhcmdhIG91dHB1dCBmb3JtYXQlc1xuIiwKKyAgICAgICAgICAoREVGQVVMVF9GTVQgPT0gRk1UX1RBUkdBID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIlN3aXRjaGVzIGZvciBhZHZhbmNlZCB1c2VyczpcbiIpOworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgaW50ICAgICAgIFVzZSBpbnRlZ2VyIERDVCBtZXRob2Qlc1xuIiwKKyAgICAgICAgICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfSVNMT1cgPyAiIChkZWZhdWx0KSIgOiAiIikpOworI2VuZGlmCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRjdCBmYXN0ICAgICAgVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpJXNcbiIsCisgICAgICAgICAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lGQVNUID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmxvYXQgICAgIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kJXNcbiIsCisgICAgICAgICAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0ZMT0FUID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWRpdGhlciBmcyAgICAgVXNlIEYtUyBkaXRoZXJpbmcgKGRlZmF1bHQpXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kaXRoZXIgbm9uZSAgIERvbid0IHVzZSBkaXRoZXJpbmcgaW4gcXVhbnRpemF0aW9uXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1kaXRoZXIgb3JkZXJlZCAgVXNlIG9yZGVyZWQgZGl0aGVyIChtZWRpdW0gc3BlZWQsIHF1YWxpdHkpXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1pY2MgRklMRSAgICAgIEV4dHJhY3QgSUNDIHByb2ZpbGUgdG8gRklMRVxuIik7CisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtbWFwIEZJTEUgICAgICBNYXAgdG8gY29sb3JzIHVzZWQgaW4gbmFtZWQgaW1hZ2UgZmlsZVxuIik7CisjZW5kaWYKKyAgZnByaW50ZihzdGRlcnIsICIgIC1ub3Ntb290aCAgICAgIERvbid0IHVzZSBoaWdoLXF1YWxpdHkgdXBzYW1wbGluZ1xuIik7CisjaWZkZWYgUVVBTlRfMVBBU1NfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtb25lcGFzcyAgICAgICBVc2UgMS1wYXNzIHF1YW50aXphdGlvbiAoZmFzdCwgbG93IHF1YWxpdHkpXG4iKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW1heG1lbW9yeSBOICAgTWF4aW11bSBtZW1vcnkgdG8gdXNlIChpbiBrYnl0ZXMpXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1vdXRmaWxlIG5hbWUgIFNwZWNpZnkgbmFtZSBmb3Igb3V0cHV0IGZpbGVcbiIpOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKKyAgZnByaW50ZihzdGRlcnIsICIgIC1tZW1zcmMgICAgICAgIExvYWQgaW5wdXQgZmlsZSBpbnRvIG1lbW9yeSBiZWZvcmUgZGVjb21wcmVzc2luZ1xuIik7CisjZW5kaWYKKworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXNraXAgWTAsWTEgICAgRGVjb21wcmVzcyBhbGwgcm93cyBleGNlcHQgdGhvc2UgYmV0d2VlbiBZMCBhbmQgWTEgKGluY2x1c2l2ZSlcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWNyb3AgV3hIK1grWSAgRGVjb21wcmVzcyBvbmx5IGEgcmVjdGFuZ3VsYXIgc3VicmVnaW9uIG9mIHRoZSBpbWFnZVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAgICAgICBbcmVxdWlyZXMgUEJNUExVUyAoUFBNL1BHTSksIEdJRiwgb3IgVGFyZ2Egb3V0cHV0IGZvcm1hdF1cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXZlcmJvc2UgIG9yICAtZGVidWcgICBFbWl0IGRlYnVnIG91dHB1dFxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtdmVyc2lvbiAgICAgICBQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iKTsKKyAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisKK0xPQ0FMKGludCkKK3BhcnNlX3N3aXRjaGVzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBhcmdjLCBjaGFyICoqYXJndiwKKyAgICAgICAgICAgICAgIGludCBsYXN0X2ZpbGVfYXJnX3NlZW4sIGJvb2xlYW4gZm9yX3JlYWwpCisvKiBQYXJzZSBvcHRpb25hbCBzd2l0Y2hlcy4KKyAqIFJldHVybnMgYXJndltdIGluZGV4IG9mIGZpcnN0IGZpbGUtbmFtZSBhcmd1bWVudCAoPT0gYXJnYyBpZiBub25lKS4KKyAqIEFueSBmaWxlIG5hbWVzIHdpdGggaW5kZXhlcyA8PSBsYXN0X2ZpbGVfYXJnX3NlZW4gYXJlIGlnbm9yZWQ7CisgKiB0aGV5IGhhdmUgcHJlc3VtYWJseSBiZWVuIHByb2Nlc3NlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi4KKyAqIChQYXNzIDAgZm9yIGxhc3RfZmlsZV9hcmdfc2VlbiBvbiB0aGUgZmlyc3Qgb3Igb25seSBpdGVyYXRpb24uKQorICogZm9yX3JlYWwgaXMgRkFMU0Ugb24gdGhlIGZpcnN0IChkdW1teSkgcGFzczsgd2UgbWF5IHNraXAgYW55IGV4cGVuc2l2ZQorICogcHJvY2Vzc2luZy4KKyAqLworeworICBpbnQgYXJnbjsKKyAgY2hhciAqYXJnOworCisgIC8qIFNldCB1cCBkZWZhdWx0IEpQRUcgcGFyYW1ldGVycy4gKi8KKyAgcmVxdWVzdGVkX2ZtdCA9IERFRkFVTFRfRk1UOyAgLyogc2V0IGRlZmF1bHQgb3V0cHV0IGZpbGUgZm9ybWF0ICovCisgIGljY19maWxlbmFtZSA9IE5VTEw7CisgIG91dGZpbGVuYW1lID0gTlVMTDsKKyAgbWVtc3JjID0gRkFMU0U7CisgIHNraXAgPSBGQUxTRTsKKyAgY3JvcCA9IEZBTFNFOworICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA9IDA7CisKKyAgLyogU2NhbiBjb21tYW5kIGxpbmUgb3B0aW9ucywgYWRqdXN0IHBhcmFtZXRlcnMgKi8KKworICBmb3IgKGFyZ24gPSAxOyBhcmduIDwgYXJnYzsgYXJnbisrKSB7CisgICAgYXJnID0gYXJndlthcmduXTsKKyAgICBpZiAoKmFyZyAhPSAnLScpIHsKKyAgICAgIC8qIE5vdCBhIHN3aXRjaCwgbXVzdCBiZSBhIGZpbGUgbmFtZSBhcmd1bWVudCAqLworICAgICAgaWYgKGFyZ24gPD0gbGFzdF9maWxlX2FyZ19zZWVuKSB7CisgICAgICAgIG91dGZpbGVuYW1lID0gTlVMTDsgICAgIC8qIC1vdXRmaWxlIGFwcGxpZXMgdG8ganVzdCBvbmUgaW5wdXQgZmlsZSAqLworICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAvKiBpZ25vcmUgdGhpcyBuYW1lIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovCisgICAgICB9CisgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIGVsc2UgZG9uZSBwYXJzaW5nIHN3aXRjaGVzICovCisgICAgfQorICAgIGFyZysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3Qgc3dpdGNoIG1hcmtlciBjaGFyYWN0ZXIgKi8KKworICAgIGlmIChrZXltYXRjaChhcmcsICJibXAiLCAxKSkgeworICAgICAgLyogQk1QIG91dHB1dCBmb3JtYXQuICovCisgICAgICByZXF1ZXN0ZWRfZm10ID0gRk1UX0JNUDsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiY29sb3JzIiwgMSkgfHwga2V5bWF0Y2goYXJnLCAiY29sb3VycyIsIDEpIHx8CisgICAgICAgICAgICAgICBrZXltYXRjaChhcmcsICJxdWFudGl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgInF1YW50aXNlIiwgMSkpIHsKKyAgICAgIC8qIERvIGNvbG9yIHF1YW50aXphdGlvbi4gKi8KKyAgICAgIGludCB2YWw7CisKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlZCIsICZ2YWwpICE9IDEpCisgICAgICAgIHVzYWdlKCk7CisgICAgICBjaW5mby0+ZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzID0gdmFsOworICAgICAgY2luZm8tPnF1YW50aXplX2NvbG9ycyA9IFRSVUU7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRjdCIsIDIpKSB7CisgICAgICAvKiBTZWxlY3QgSURDVCBhbGdvcml0aG0uICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJpbnQiLCAxKSkgeworICAgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfSVNMT1c7CisgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJmYXN0IiwgMikpIHsKKyAgICAgICAgY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0lGQVNUOworICAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiZmxvYXQiLCAyKSkgeworICAgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkxPQVQ7CisgICAgICB9IGVsc2UKKyAgICAgICAgdXNhZ2UoKTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZGl0aGVyIiwgMikpIHsKKyAgICAgIC8qIFNlbGVjdCBkaXRoZXJpbmcgYWxnb3JpdGhtLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiZnMiLCAyKSkgeworICAgICAgICBjaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX0ZTOworICAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAibm9uZSIsIDIpKSB7CisgICAgICAgIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfTk9ORTsKKyAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgIm9yZGVyZWQiLCAyKSkgeworICAgICAgICBjaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX09SREVSRUQ7CisgICAgICB9IGVsc2UKKyAgICAgICAgdXNhZ2UoKTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZGVidWciLCAxKSB8fCBrZXltYXRjaChhcmcsICJ2ZXJib3NlIiwgMSkpIHsKKyAgICAgIC8qIEVuYWJsZSBkZWJ1ZyBwcmludG91dHMuICovCisgICAgICAvKiBPbiBmaXJzdCAtZCwgcHJpbnQgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiAqLworICAgICAgc3RhdGljIGJvb2xlYW4gcHJpbnRlZF92ZXJzaW9uID0gRkFMU0U7CisKKyAgICAgIGlmICghcHJpbnRlZF92ZXJzaW9uKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcyAoYnVpbGQgJXMpXG4iLAorICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG5cbiIsIEpDT1BZUklHSFQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLCB2ZXJzaW9uICVzXG5cbiIsCisgICAgICAgICAgICAgICAgSlZFUlNJT04pOworICAgICAgICBwcmludGVkX3ZlcnNpb24gPSBUUlVFOworICAgICAgfQorICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAidmVyc2lvbiIsIDQpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXMgKGJ1aWxkICVzKVxuIiwKKyAgICAgICAgICAgICAgUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7CisgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImZhc3QiLCAxKSkgeworICAgICAgLyogU2VsZWN0IHJlY29tbWVuZGVkIHByb2Nlc3Npbmcgb3B0aW9ucyBmb3IgcXVpY2stYW5kLWRpcnR5IG91dHB1dC4gKi8KKyAgICAgIGNpbmZvLT50d29fcGFzc19xdWFudGl6ZSA9IEZBTFNFOworICAgICAgY2luZm8tPmRpdGhlcl9tb2RlID0gSkRJVEhFUl9PUkRFUkVEOworICAgICAgaWYgKCFjaW5mby0+cXVhbnRpemVfY29sb3JzKSAvKiBkb24ndCBvdmVycmlkZSBhbiBlYXJsaWVyIC1jb2xvcnMgKi8KKyAgICAgICAgY2luZm8tPmRlc2lyZWRfbnVtYmVyX29mX2NvbG9ycyA9IDIxNjsKKyAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9GQVNURVNUOworICAgICAgY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPSBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZ2lmIiwgMSkpIHsKKyAgICAgIC8qIEdJRiBvdXRwdXQgZm9ybWF0LiAqLworICAgICAgcmVxdWVzdGVkX2ZtdCA9IEZNVF9HSUY7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImdyYXlzY2FsZSIsIDIpIHx8CisgICAgICAgICAgICAgICBrZXltYXRjaChhcmcsICJncmV5c2NhbGUiLCAyKSkgeworICAgICAgLyogRm9yY2UgbW9ub2Nocm9tZSBvdXRwdXQuICovCisgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicmdiIiwgMikpIHsKKyAgICAgIC8qIEZvcmNlIFJHQiBvdXRwdXQuICovCisgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicmdiNTY1IiwgMikpIHsKKyAgICAgIC8qIEZvcmNlIFJHQjU2NSBvdXRwdXQuICovCisgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX1JHQjU2NTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiaWNjIiwgMSkpIHsKKyAgICAgIC8qIFNldCBJQ0MgZmlsZW5hbWUuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgaWNjX2ZpbGVuYW1lID0gYXJndlthcmduXTsKKyAgICAgIGpwZWdfc2F2ZV9tYXJrZXJzKGNpbmZvLCBKUEVHX0FQUDAgKyAyLCAweEZGRkYpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJtYXAiLCAzKSkgeworICAgICAgLyogUXVhbnRpemUgdG8gYSBjb2xvciBtYXAgdGFrZW4gZnJvbSBhbiBpbnB1dCBmaWxlLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChmb3JfcmVhbCkgeyAgICAgICAgICAgLyogdG9vIGV4cGVuc2l2ZSB0byBkbyB0d2ljZSEgKi8KKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQgICAgLyogb3RoZXJ3aXNlIGNhbid0IHF1YW50aXplIHRvIHN1cHBsaWVkIG1hcCAqLworICAgICAgICBGSUxFICptYXBmaWxlOworCisgICAgICAgIGlmICgobWFwZmlsZSA9IGZvcGVuKGFyZ3ZbYXJnbl0sIFJFQURfQklOQVJZKSkgPT0gTlVMTCkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXNcbiIsIHByb2duYW1lLCBhcmd2W2FyZ25dKTsKKyAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgcmVhZF9jb2xvcl9tYXAoY2luZm8sIG1hcGZpbGUpOworICAgICAgICBmY2xvc2UobWFwZmlsZSk7CisgICAgICAgIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPSBUUlVFOworI2Vsc2UKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm1heG1lbW9yeSIsIDMpKSB7CisgICAgICAvKiBNYXhpbXVtIG1lbW9yeSBpbiBLYiAob3IgTWIgd2l0aCAnbScpLiAqLworICAgICAgbG9uZyBsdmFsOworICAgICAgY2hhciBjaCA9ICd4JzsKKworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVsZCVjIiwgJmx2YWwsICZjaCkgPCAxKQorICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKGNoID09ICdtJyB8fCBjaCA9PSAnTScpCisgICAgICAgIGx2YWwgKj0gMTAwMEw7CisgICAgICBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSA9IGx2YWwgKiAxMDAwTDsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zbW9vdGgiLCAzKSkgeworICAgICAgLyogU3VwcHJlc3MgZmFuY3kgdXBzYW1wbGluZyAqLworICAgICAgY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPSBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAib25lcGFzcyIsIDMpKSB7CisgICAgICAvKiBVc2UgZmFzdCBvbmUtcGFzcyBxdWFudGl6YXRpb24uICovCisgICAgICBjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgPSBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAib3MyIiwgMykpIHsKKyAgICAgIC8qIEJNUCBvdXRwdXQgZm9ybWF0IChPUy8yIGZsYXZvcikuICovCisgICAgICByZXF1ZXN0ZWRfZm10ID0gRk1UX09TMjsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAib3V0ZmlsZSIsIDQpKSB7CisgICAgICAvKiBTZXQgb3V0cHV0IGZpbGUgbmFtZS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBvdXRmaWxlbmFtZSA9IGFyZ3ZbYXJnbl07IC8qIHNhdmUgaXQgYXdheSBmb3IgbGF0ZXIgdXNlICovCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm1lbXNyYyIsIDIpKSB7CisgICAgICAvKiBVc2UgaW4tbWVtb3J5IHNvdXJjZSBtYW5hZ2VyICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorICAgICAgbWVtc3JjID0gVFJVRTsKKyNlbHNlCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgaW4tbWVtb3J5IHNvdXJjZSBtYW5hZ2VyIHdhcyBub3QgY29tcGlsZWQgaW5cbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJwbm0iLCAxKSB8fCBrZXltYXRjaChhcmcsICJwcG0iLCAxKSkgeworICAgICAgLyogUFBNL1BHTSBvdXRwdXQgZm9ybWF0LiAqLworICAgICAgcmVxdWVzdGVkX2ZtdCA9IEZNVF9QUE07CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInJsZSIsIDEpKSB7CisgICAgICAvKiBSTEUgb3V0cHV0IGZvcm1hdC4gKi8KKyAgICAgIHJlcXVlc3RlZF9mbXQgPSBGTVRfUkxFOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJzY2FsZSIsIDIpKSB7CisgICAgICAvKiBTY2FsZSB0aGUgb3V0cHV0IGltYWdlIGJ5IGEgZnJhY3Rpb24gTS9OLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiV1LyV1IiwKKyAgICAgICAgICAgICAgICAgJmNpbmZvLT5zY2FsZV9udW0sICZjaW5mby0+c2NhbGVfZGVub20pICE9IDIpCisgICAgICAgIHVzYWdlKCk7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInNraXAiLCAyKSkgeworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQorICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJXUsJXUiLCAmc2tpcF9zdGFydCwgJnNraXBfZW5kKSAhPSAyIHx8CisgICAgICAgICAgc2tpcF9zdGFydCA+IHNraXBfZW5kKQorICAgICAgICB1c2FnZSgpOworICAgICAgc2tpcCA9IFRSVUU7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImNyb3AiLCAyKSkgeworICAgICAgY2hhciBjOworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQorICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJXUlYyV1KyV1KyV1IiwgJmNyb3Bfd2lkdGgsICZjLCAmY3JvcF9oZWlnaHQsCisgICAgICAgICAgICAgICAgICZjcm9wX3gsICZjcm9wX3kpICE9IDUgfHwKKyAgICAgICAgICAoYyAhPSAnWCcgJiYgYyAhPSAneCcpIHx8IGNyb3Bfd2lkdGggPCAxIHx8IGNyb3BfaGVpZ2h0IDwgMSkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGNyb3AgPSBUUlVFOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJ0YXJnYSIsIDEpKSB7CisgICAgICAvKiBUYXJnYSBvdXRwdXQgZm9ybWF0LiAqLworICAgICAgcmVxdWVzdGVkX2ZtdCA9IEZNVF9UQVJHQTsKKworICAgIH0gZWxzZSB7CisgICAgICB1c2FnZSgpOyAgICAgICAgICAgICAgICAgIC8qIGJvZ3VzIHN3aXRjaCAqLworICAgIH0KKyAgfQorCisgIHJldHVybiBhcmduOyAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBpbmRleCBvZiBuZXh0IGFyZyAoZmlsZSBuYW1lKSAqLworfQorCisKKy8qCisgKiBNYXJrZXIgcHJvY2Vzc29yIGZvciBDT00gYW5kIGludGVyZXN0aW5nIEFQUG4gbWFya2Vycy4KKyAqIFRoaXMgcmVwbGFjZXMgdGhlIGxpYnJhcnkncyBidWlsdC1pbiBwcm9jZXNzb3IsIHdoaWNoIGp1c3Qgc2tpcHMgdGhlIG1hcmtlci4KKyAqIFdlIHdhbnQgdG8gcHJpbnQgb3V0IHRoZSBtYXJrZXIgYXMgdGV4dCwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZS4KKyAqIE5vdGUgdGhpcyBjb2RlIHJlbGllcyBvbiBhIG5vbi1zdXNwZW5kaW5nIGRhdGEgc291cmNlLgorICovCisKK0xPQ0FMKHVuc2lnbmVkIGludCkKK2pwZWdfZ2V0YyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUmVhZCBuZXh0IGJ5dGUgKi8KK3sKKyAgc3RydWN0IGpwZWdfc291cmNlX21nciAqZGF0YXNyYyA9IGNpbmZvLT5zcmM7CisKKyAgaWYgKGRhdGFzcmMtPmJ5dGVzX2luX2J1ZmZlciA9PSAwKSB7CisgICAgaWYgKCEoKmRhdGFzcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworICB9CisgIGRhdGFzcmMtPmJ5dGVzX2luX2J1ZmZlci0tOworICByZXR1cm4gR0VUSk9DVEVUKCpkYXRhc3JjLT5uZXh0X2lucHV0X2J5dGUrKyk7Cit9CisKKworTUVUSE9EREVGKGJvb2xlYW4pCitwcmludF90ZXh0X21hcmtlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBib29sZWFuIHRyYWNlaXQgPSAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPj0gMSk7CisgIGxvbmcgbGVuZ3RoOworICB1bnNpZ25lZCBpbnQgY2g7CisgIHVuc2lnbmVkIGludCBsYXN0Y2ggPSAwOworCisgIGxlbmd0aCA9IGpwZWdfZ2V0YyhjaW5mbykgPDwgODsKKyAgbGVuZ3RoICs9IGpwZWdfZ2V0YyhjaW5mbyk7CisgIGxlbmd0aCAtPSAyOyAgICAgICAgICAgICAgICAgIC8qIGRpc2NvdW50IHRoZSBsZW5ndGggd29yZCBpdHNlbGYgKi8KKworICBpZiAodHJhY2VpdCkgeworICAgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSBKUEVHX0NPTSkKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29tbWVudCwgbGVuZ3RoICVsZDpcbiIsIChsb25nKWxlbmd0aCk7CisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFzc3VtZSBpdCBpcyBhbiBBUFBuIG90aGVyd2lzZSAqLworICAgICAgZnByaW50ZihzdGRlcnIsICJBUFAlZCwgbGVuZ3RoICVsZDpcbiIsCisgICAgICAgICAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyIC0gSlBFR19BUFAwLCAobG9uZylsZW5ndGgpOworICB9CisKKyAgd2hpbGUgKC0tbGVuZ3RoID49IDApIHsKKyAgICBjaCA9IGpwZWdfZ2V0YyhjaW5mbyk7CisgICAgaWYgKHRyYWNlaXQpIHsKKyAgICAgIC8qIEVtaXQgdGhlIGNoYXJhY3RlciBpbiBhIHJlYWRhYmxlIGZvcm0uCisgICAgICAgKiBOb25wcmludGFibGVzIGFyZSBjb252ZXJ0ZWQgdG8gXG5ubiBmb3JtLAorICAgICAgICogd2hpbGUgXCBpcyBjb252ZXJ0ZWQgdG8gXFwuCisgICAgICAgKiBOZXdsaW5lcyBpbiBDUiwgQ1IvTEYsIG9yIExGIGZvcm0gd2lsbCBiZSBwcmludGVkIGFzIG9uZSBuZXdsaW5lLgorICAgICAgICovCisgICAgICBpZiAoY2ggPT0gJ1xyJykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICB9IGVsc2UgaWYgKGNoID09ICdcbicpIHsKKyAgICAgICAgaWYgKGxhc3RjaCAhPSAnXHInKQorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xcJykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxcXFwiKTsKKyAgICAgIH0gZWxzZSBpZiAoaXNwcmludChjaCkpIHsKKyAgICAgICAgcHV0YyhjaCwgc3RkZXJyKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXFwlMDNvIiwgY2gpOworICAgICAgfQorICAgICAgbGFzdGNoID0gY2g7CisgICAgfQorICB9CisKKyAgaWYgKHRyYWNlaXQpCisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBUaGUgbWFpbiBwcm9ncmFtLgorICovCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IGNpbmZvOworICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgamVycjsKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgc3RydWN0IGNkanBlZ19wcm9ncmVzc19tZ3IgcHJvZ3Jlc3M7CisjZW5kaWYKKyAgaW50IGZpbGVfaW5kZXg7CisgIGRqcGVnX2Rlc3RfcHRyIGRlc3RfbWdyID0gTlVMTDsKKyAgRklMRSAqaW5wdXRfZmlsZTsKKyAgRklMRSAqb3V0cHV0X2ZpbGU7CisgIHVuc2lnbmVkIGNoYXIgKmluYnVmZmVyID0gTlVMTDsKKyAgdW5zaWduZWQgbG9uZyBpbnNpemUgPSAwOworICBKRElNRU5TSU9OIG51bV9zY2FubGluZXM7CisKKyAgLyogT24gTWFjLCBmZXRjaCBhIGNvbW1hbmQgbGluZS4gKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQKKyAgYXJnYyA9IGNjb21tYW5kKCZhcmd2KTsKKyNlbmRpZgorCisgIHByb2duYW1lID0gYXJndlswXTsKKyAgaWYgKHByb2duYW1lID09IE5VTEwgfHwgcHJvZ25hbWVbMF0gPT0gMCkKKyAgICBwcm9nbmFtZSA9ICJkanBlZyI7ICAgICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdCB3aXRoIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcuICovCisgIGNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZqZXJyKTsKKyAganBlZ19jcmVhdGVfZGVjb21wcmVzcygmY2luZm8pOworICAvKiBBZGQgc29tZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBlcnJvciBtZXNzYWdlcyAoZnJvbSBjZGVycm9yLmgpICovCisgIGplcnIuYWRkb25fbWVzc2FnZV90YWJsZSA9IGNkanBlZ19tZXNzYWdlX3RhYmxlOworICBqZXJyLmZpcnN0X2FkZG9uX21lc3NhZ2UgPSBKTVNHX0ZJUlNUQURET05DT0RFOworICBqZXJyLmxhc3RfYWRkb25fbWVzc2FnZSA9IEpNU0dfTEFTVEFERE9OQ09ERTsKKworICAvKiBJbnNlcnQgY3VzdG9tIG1hcmtlciBwcm9jZXNzb3IgZm9yIENPTSBhbmQgQVBQMTIuCisgICAqIEFQUDEyIGlzIHVzZWQgYnkgc29tZSBkaWdpdGFsIGNhbWVyYSBtYWtlcnMgZm9yIHRleHR1YWwgaW5mbywKKyAgICogc28gd2UgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBkaXNwbGF5IGl0IGFzIHRleHQuCisgICAqIElmIHlvdSBsaWtlLCBhZGRpdGlvbmFsIEFQUG4gbWFya2VyIHR5cGVzIGNhbiBiZSBzZWxlY3RlZCBmb3IgZGlzcGxheSwKKyAgICogYnV0IGRvbid0IHRyeSB0byBvdmVycmlkZSBBUFAwIG9yIEFQUDE0IHRoaXMgd2F5IChzZWUgbGlianBlZy50eHQpLgorICAgKi8KKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcigmY2luZm8sIEpQRUdfQ09NLCBwcmludF90ZXh0X21hcmtlcik7CisgIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IoJmNpbmZvLCBKUEVHX0FQUDAgKyAxMiwgcHJpbnRfdGV4dF9tYXJrZXIpOworCisgIC8qIFNjYW4gY29tbWFuZCBsaW5lIHRvIGZpbmQgZmlsZSBuYW1lcy4gKi8KKyAgLyogSXQgaXMgY29udmVuaWVudCB0byB1c2UganVzdCBvbmUgc3dpdGNoLXBhcnNpbmcgcm91dGluZSwgYnV0IHRoZSBzd2l0Y2gKKyAgICogdmFsdWVzIHJlYWQgaGVyZSBhcmUgaWdub3JlZDsgd2Ugd2lsbCByZXNjYW4gdGhlIHN3aXRjaGVzIGFmdGVyIG9wZW5pbmcKKyAgICogdGhlIGlucHV0IGZpbGUuCisgICAqIChFeGNlcHRpb246IHRyYWNpbmcgbGV2ZWwgc2V0IGhlcmUgY29udHJvbHMgdmVyYm9zaXR5IGZvciBDT00gbWFya2VycworICAgKiBmb3VuZCBkdXJpbmcganBlZ19yZWFkX2hlYWRlci4uLikKKyAgICovCisKKyAgZmlsZV9pbmRleCA9IHBhcnNlX3N3aXRjaGVzKCZjaW5mbywgYXJnYywgYXJndiwgMCwgRkFMU0UpOworCisjaWZkZWYgVFdPX0ZJTEVfQ09NTUFORExJTkUKKyAgLyogTXVzdCBoYXZlIGVpdGhlciAtb3V0ZmlsZSBzd2l0Y2ggb3IgZXhwbGljaXQgb3V0cHV0IGZpbGUgbmFtZSAqLworICBpZiAob3V0ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MgLSAyKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIHVzYWdlKCk7CisgICAgfQorICAgIG91dGZpbGVuYW1lID0gYXJndltmaWxlX2luZGV4ICsgMV07CisgIH0gZWxzZSB7CisgICAgaWYgKGZpbGVfaW5kZXggIT0gYXJnYyAtIDEpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG11c3QgbmFtZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgZmlsZVxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOworICAgICAgdXNhZ2UoKTsKKyAgICB9CisgIH0KKyNlbHNlCisgIC8qIFVuaXggc3R5bGU6IGV4cGVjdCB6ZXJvIG9yIG9uZSBmaWxlIG5hbWUgKi8KKyAgaWYgKGZpbGVfaW5kZXggPCBhcmdjIC0gMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG9ubHkgb25lIGlucHV0IGZpbGVcbiIsIHByb2duYW1lKTsKKyAgICB1c2FnZSgpOworICB9CisjZW5kaWYgLyogVFdPX0ZJTEVfQ09NTUFORExJTkUgKi8KKworICAvKiBPcGVuIHRoZSBpbnB1dCBmaWxlLiAqLworICBpZiAoZmlsZV9pbmRleCA8IGFyZ2MpIHsKKyAgICBpZiAoKGlucHV0X2ZpbGUgPSBmb3Blbihhcmd2W2ZpbGVfaW5kZXhdLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXNcbiIsIHByb2duYW1lLCBhcmd2W2ZpbGVfaW5kZXhdKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogZGVmYXVsdCBpbnB1dCBmaWxlIGlzIHN0ZGluICovCisgICAgaW5wdXRfZmlsZSA9IHJlYWRfc3RkaW4oKTsKKyAgfQorCisgIC8qIE9wZW4gdGhlIG91dHB1dCBmaWxlLiAqLworICBpZiAob3V0ZmlsZW5hbWUgIT0gTlVMTCkgeworICAgIGlmICgob3V0cHV0X2ZpbGUgPSBmb3BlbihvdXRmaWxlbmFtZSwgV1JJVEVfQklOQVJZKSkgPT0gTlVMTCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIG91dGZpbGVuYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogZGVmYXVsdCBvdXRwdXQgZmlsZSBpcyBzdGRvdXQgKi8KKyAgICBvdXRwdXRfZmlsZSA9IHdyaXRlX3N0ZG91dCgpOworICB9CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgc3RhcnRfcHJvZ3Jlc3NfbW9uaXRvcigoal9jb21tb25fcHRyKSZjaW5mbywgJnByb2dyZXNzKTsKKyNlbmRpZgorCisgIC8qIFNwZWNpZnkgZGF0YSBzb3VyY2UgZm9yIGRlY29tcHJlc3Npb24gKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisgIGlmIChtZW1zcmMpIHsKKyAgICBzaXplX3QgbmJ5dGVzOworICAgIGRvIHsKKyAgICAgIGluYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilyZWFsbG9jKGluYnVmZmVyLCBpbnNpemUgKyBJTlBVVF9CVUZfU0laRSk7CisgICAgICBpZiAoaW5idWZmZXIgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIG5ieXRlcyA9IEpGUkVBRChpbnB1dF9maWxlLCAmaW5idWZmZXJbaW5zaXplXSwgSU5QVVRfQlVGX1NJWkUpOworICAgICAgaWYgKG5ieXRlcyA8IElOUFVUX0JVRl9TSVpFICYmIGZlcnJvcihpbnB1dF9maWxlKSkgeworICAgICAgICBpZiAoZmlsZV9pbmRleCA8IGFyZ2MpCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgcmVhZCBmcm9tICVzXG4iLCBwcm9nbmFtZSwKKyAgICAgICAgICAgICAgICAgIGFyZ3ZbZmlsZV9pbmRleF0pOworICAgICAgICBlbHNlCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgcmVhZCBmcm9tIHN0ZGluXG4iLCBwcm9nbmFtZSk7CisgICAgICB9CisgICAgICBpbnNpemUgKz0gKHVuc2lnbmVkIGxvbmcpbmJ5dGVzOworICAgIH0gd2hpbGUgKG5ieXRlcyA9PSBJTlBVVF9CVUZfU0laRSk7CisgICAgZnByaW50ZihzdGRlcnIsICJDb21wcmVzc2VkIHNpemU6ICAlbHUgYnl0ZXNcbiIsIGluc2l6ZSk7CisgICAganBlZ19tZW1fc3JjKCZjaW5mbywgaW5idWZmZXIsIGluc2l6ZSk7CisgIH0gZWxzZQorI2VuZGlmCisgICAganBlZ19zdGRpb19zcmMoJmNpbmZvLCBpbnB1dF9maWxlKTsKKworICAvKiBSZWFkIGZpbGUgaGVhZGVyLCBzZXQgZGVmYXVsdCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKi8KKyAgKHZvaWQpanBlZ19yZWFkX2hlYWRlcigmY2luZm8sIFRSVUUpOworCisgIC8qIEFkanVzdCBkZWZhdWx0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyBieSByZS1wYXJzaW5nIHRoZSBvcHRpb25zICovCisgIGZpbGVfaW5kZXggPSBwYXJzZV9zd2l0Y2hlcygmY2luZm8sIGFyZ2MsIGFyZ3YsIDAsIFRSVUUpOworCisgIC8qIEluaXRpYWxpemUgdGhlIG91dHB1dCBtb2R1bGUgbm93IHRvIGxldCBpdCBvdmVycmlkZSBhbnkgY3J1Y2lhbAorICAgKiBvcHRpb24gc2V0dGluZ3MgKGZvciBpbnN0YW5jZSwgR0lGIHdhbnRzIHRvIGZvcmNlIGNvbG9yIHF1YW50aXphdGlvbikuCisgICAqLworICBzd2l0Y2ggKHJlcXVlc3RlZF9mbXQpIHsKKyNpZmRlZiBCTVBfU1VQUE9SVEVECisgIGNhc2UgRk1UX0JNUDoKKyAgICBkZXN0X21nciA9IGppbml0X3dyaXRlX2JtcCgmY2luZm8sIEZBTFNFLCBUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBGTVRfT1MyOgorICAgIGRlc3RfbWdyID0gamluaXRfd3JpdGVfYm1wKCZjaW5mbywgVFJVRSwgVFJVRSk7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBHSUZfU1VQUE9SVEVECisgIGNhc2UgRk1UX0dJRjoKKyAgICBkZXN0X21nciA9IGppbml0X3dyaXRlX2dpZigmY2luZm8pOworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgUFBNX1NVUFBPUlRFRAorICBjYXNlIEZNVF9QUE06CisgICAgZGVzdF9tZ3IgPSBqaW5pdF93cml0ZV9wcG0oJmNpbmZvKTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFJMRV9TVVBQT1JURUQKKyAgY2FzZSBGTVRfUkxFOgorICAgIGRlc3RfbWdyID0gamluaXRfd3JpdGVfcmxlKCZjaW5mbyk7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBUQVJHQV9TVVBQT1JURUQKKyAgY2FzZSBGTVRfVEFSR0E6CisgICAgZGVzdF9tZ3IgPSBqaW5pdF93cml0ZV90YXJnYSgmY2luZm8pOworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVCgmY2luZm8sIEpFUlJfVU5TVVBQT1JURURfRk9STUFUKTsKKyAgICBicmVhazsKKyAgfQorICBkZXN0X21nci0+b3V0cHV0X2ZpbGUgPSBvdXRwdXRfZmlsZTsKKworICAvKiBTdGFydCBkZWNvbXByZXNzb3IgKi8KKyAgKHZvaWQpanBlZ19zdGFydF9kZWNvbXByZXNzKCZjaW5mbyk7CisKKyAgLyogU2tpcCByb3dzICovCisgIGlmIChza2lwKSB7CisgICAgSkRJTUVOU0lPTiB0bXA7CisKKyAgICAvKiBDaGVjayBmb3IgdmFsaWQgc2tpcF9lbmQuICBXZSBjYW5ub3QgY2hlY2sgdGhpcyB2YWx1ZSB1bnRpbCBhZnRlcgorICAgICAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpIGlzIGNhbGxlZC4gIE5vdGUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgdmVyaWZpZWQKKyAgICAgKiB0aGF0IHNraXBfc3RhcnQgPD0gc2tpcF9lbmQuCisgICAgICovCisgICAgaWYgKHNraXBfZW5kID4gY2luZm8ub3V0cHV0X2hlaWdodCAtIDEpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNraXAgcmVnaW9uIGV4Y2VlZHMgaW1hZ2UgaGVpZ2h0ICVkXG4iLCBwcm9nbmFtZSwKKyAgICAgICAgICAgICAgY2luZm8ub3V0cHV0X2hlaWdodCk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgLyogV3JpdGUgb3V0cHV0IGZpbGUgaGVhZGVyLiAgVGhpcyBpcyBhIGhhY2sgdG8gZW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uCisgICAgICogbWFuYWdlciBjcmVhdGVzIGFuIG91dHB1dCBpbWFnZSBvZiB0aGUgcHJvcGVyIHNpemUuCisgICAgICovCisgICAgdG1wID0gY2luZm8ub3V0cHV0X2hlaWdodDsKKyAgICBjaW5mby5vdXRwdXRfaGVpZ2h0IC09IChza2lwX2VuZCAtIHNraXBfc3RhcnQgKyAxKTsKKyAgICAoKmRlc3RfbWdyLT5zdGFydF9vdXRwdXQpICgmY2luZm8sIGRlc3RfbWdyKTsKKyAgICBjaW5mby5vdXRwdXRfaGVpZ2h0ID0gdG1wOworCisgICAgLyogUHJvY2VzcyBkYXRhICovCisgICAgd2hpbGUgKGNpbmZvLm91dHB1dF9zY2FubGluZSA8IHNraXBfc3RhcnQpIHsKKyAgICAgIG51bV9zY2FubGluZXMgPSBqcGVnX3JlYWRfc2NhbmxpbmVzKCZjaW5mbywgZGVzdF9tZ3ItPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbWdyLT5idWZmZXJfaGVpZ2h0KTsKKyAgICAgICgqZGVzdF9tZ3ItPnB1dF9waXhlbF9yb3dzKSAoJmNpbmZvLCBkZXN0X21nciwgbnVtX3NjYW5saW5lcyk7CisgICAgfQorICAgIGpwZWdfc2tpcF9zY2FubGluZXMoJmNpbmZvLCBza2lwX2VuZCAtIHNraXBfc3RhcnQgKyAxKTsKKyAgICB3aGlsZSAoY2luZm8ub3V0cHV0X3NjYW5saW5lIDwgY2luZm8ub3V0cHV0X2hlaWdodCkgeworICAgICAgbnVtX3NjYW5saW5lcyA9IGpwZWdfcmVhZF9zY2FubGluZXMoJmNpbmZvLCBkZXN0X21nci0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9tZ3ItPmJ1ZmZlcl9oZWlnaHQpOworICAgICAgKCpkZXN0X21nci0+cHV0X3BpeGVsX3Jvd3MpICgmY2luZm8sIGRlc3RfbWdyLCBudW1fc2NhbmxpbmVzKTsKKyAgICB9CisKKyAgLyogRGVjb21wcmVzcyBhIHN1YnJlZ2lvbiAqLworICB9IGVsc2UgaWYgKGNyb3ApIHsKKyAgICBKRElNRU5TSU9OIHRtcDsKKworICAgIC8qIENoZWNrIGZvciB2YWxpZCBjcm9wIGRpbWVuc2lvbnMuICBXZSBjYW5ub3QgY2hlY2sgdGhlc2UgdmFsdWVzIHVudGlsCisgICAgICogYWZ0ZXIganBlZ19zdGFydF9kZWNvbXByZXNzKCkgaXMgY2FsbGVkLgorICAgICAqLworICAgIGlmIChjcm9wX3ggKyBjcm9wX3dpZHRoID4gY2luZm8ub3V0cHV0X3dpZHRoIHx8CisgICAgICAgIGNyb3BfeSArIGNyb3BfaGVpZ2h0ID4gY2luZm8ub3V0cHV0X2hlaWdodCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY3JvcCBkaW1lbnNpb25zIGV4Y2VlZCBpbWFnZSBkaW1lbnNpb25zICVkIHggJWRcbiIsCisgICAgICAgICAgICAgIHByb2duYW1lLCBjaW5mby5vdXRwdXRfd2lkdGgsIGNpbmZvLm91dHB1dF9oZWlnaHQpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGpwZWdfY3JvcF9zY2FubGluZSgmY2luZm8sICZjcm9wX3gsICZjcm9wX3dpZHRoKTsKKyAgICBpZiAoZGVzdF9tZ3ItPmNhbGNfYnVmZmVyX2RpbWVuc2lvbnMpCisgICAgICAoKmRlc3RfbWdyLT5jYWxjX2J1ZmZlcl9kaW1lbnNpb25zKSAoJmNpbmZvLCBkZXN0X21ncik7CisgICAgZWxzZQorICAgICAgRVJSRVhJVCgmY2luZm8sIEpFUlJfVU5TVVBQT1JURURfRk9STUFUKTsKKworICAgIC8qIFdyaXRlIG91dHB1dCBmaWxlIGhlYWRlci4gIFRoaXMgaXMgYSBoYWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbgorICAgICAqIG1hbmFnZXIgY3JlYXRlcyBhbiBvdXRwdXQgaW1hZ2Ugb2YgdGhlIHByb3BlciBzaXplLgorICAgICAqLworICAgIHRtcCA9IGNpbmZvLm91dHB1dF9oZWlnaHQ7CisgICAgY2luZm8ub3V0cHV0X2hlaWdodCA9IGNyb3BfaGVpZ2h0OworICAgICgqZGVzdF9tZ3ItPnN0YXJ0X291dHB1dCkgKCZjaW5mbywgZGVzdF9tZ3IpOworICAgIGNpbmZvLm91dHB1dF9oZWlnaHQgPSB0bXA7CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgKi8KKyAgICBqcGVnX3NraXBfc2NhbmxpbmVzKCZjaW5mbywgY3JvcF95KTsKKyAgICB3aGlsZSAoY2luZm8ub3V0cHV0X3NjYW5saW5lIDwgY3JvcF95ICsgY3JvcF9oZWlnaHQpIHsKKyAgICAgIG51bV9zY2FubGluZXMgPSBqcGVnX3JlYWRfc2NhbmxpbmVzKCZjaW5mbywgZGVzdF9tZ3ItPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbWdyLT5idWZmZXJfaGVpZ2h0KTsKKyAgICAgICgqZGVzdF9tZ3ItPnB1dF9waXhlbF9yb3dzKSAoJmNpbmZvLCBkZXN0X21nciwgbnVtX3NjYW5saW5lcyk7CisgICAgfQorICAgIGpwZWdfc2tpcF9zY2FubGluZXMoJmNpbmZvLCBjaW5mby5vdXRwdXRfaGVpZ2h0IC0gY3JvcF95IC0gY3JvcF9oZWlnaHQpOworCisgIC8qIE5vcm1hbCBmdWxsLWltYWdlIGRlY29tcHJlc3MgKi8KKyAgfSBlbHNlIHsKKyAgICAvKiBXcml0ZSBvdXRwdXQgZmlsZSBoZWFkZXIgKi8KKyAgICAoKmRlc3RfbWdyLT5zdGFydF9vdXRwdXQpICgmY2luZm8sIGRlc3RfbWdyKTsKKworICAgIC8qIFByb2Nlc3MgZGF0YSAqLworICAgIHdoaWxlIChjaW5mby5vdXRwdXRfc2NhbmxpbmUgPCBjaW5mby5vdXRwdXRfaGVpZ2h0KSB7CisgICAgICBudW1fc2NhbmxpbmVzID0ganBlZ19yZWFkX3NjYW5saW5lcygmY2luZm8sIGRlc3RfbWdyLT5idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X21nci0+YnVmZmVyX2hlaWdodCk7CisgICAgICAoKmRlc3RfbWdyLT5wdXRfcGl4ZWxfcm93cykgKCZjaW5mbywgZGVzdF9tZ3IsIG51bV9zY2FubGluZXMpOworICAgIH0KKyAgfQorCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIC8qIEhhY2s6IGNvdW50IGZpbmFsIHBhc3MgYXMgZG9uZSBpbiBjYXNlIGZpbmlzaF9vdXRwdXQgZG9lcyBhbiBleHRyYSBwYXNzLgorICAgKiBUaGUgbGlicmFyeSB3b24ndCBoYXZlIHVwZGF0ZWQgY29tcGxldGVkX3Bhc3Nlcy4KKyAgICovCisgIHByb2dyZXNzLnB1Yi5jb21wbGV0ZWRfcGFzc2VzID0gcHJvZ3Jlc3MucHViLnRvdGFsX3Bhc3NlczsKKyNlbmRpZgorCisgIGlmIChpY2NfZmlsZW5hbWUgIT0gTlVMTCkgeworICAgIEZJTEUgKmljY19maWxlOworICAgIEpPQ1RFVCAqaWNjX3Byb2ZpbGU7CisgICAgdW5zaWduZWQgaW50IGljY19sZW47CisKKyAgICBpZiAoKGljY19maWxlID0gZm9wZW4oaWNjX2ZpbGVuYW1lLCBXUklURV9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgaWNjX2ZpbGVuYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgaWYgKGpwZWdfcmVhZF9pY2NfcHJvZmlsZSgmY2luZm8sICZpY2NfcHJvZmlsZSwgJmljY19sZW4pKSB7CisgICAgICBpZiAoZndyaXRlKGljY19wcm9maWxlLCBpY2NfbGVuLCAxLCBpY2NfZmlsZSkgPCAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IHJlYWQgSUNDIHByb2ZpbGUgZnJvbSAlc1xuIiwgcHJvZ25hbWUsCisgICAgICAgICAgICAgICAgaWNjX2ZpbGVuYW1lKTsKKyAgICAgICAgZnJlZShpY2NfcHJvZmlsZSk7CisgICAgICAgIGZjbG9zZShpY2NfZmlsZSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIGZyZWUoaWNjX3Byb2ZpbGUpOworICAgICAgZmNsb3NlKGljY19maWxlKTsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLmVyci0+bXNnX2NvZGUgIT0gSldSTl9CT0dVU19JQ0MpCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBubyBJQ0MgcHJvZmlsZSBkYXRhIGluIEpQRUcgZmlsZVxuIiwgcHJvZ25hbWUpOworICB9CisKKyAgLyogRmluaXNoIGRlY29tcHJlc3Npb24gYW5kIHJlbGVhc2UgbWVtb3J5LgorICAgKiBJIG11c3QgZG8gaXQgaW4gdGhpcyBvcmRlciBiZWNhdXNlIG91dHB1dCBtb2R1bGUgaGFzIGFsbG9jYXRlZCBtZW1vcnkKKyAgICogb2YgbGlmZXNwYW4gSlBPT0xfSU1BR0U7IGl0IG5lZWRzIHRvIGZpbmlzaCBiZWZvcmUgcmVsZWFzaW5nIG1lbW9yeS4KKyAgICovCisgICgqZGVzdF9tZ3ItPmZpbmlzaF9vdXRwdXQpICgmY2luZm8sIGRlc3RfbWdyKTsKKyAgKHZvaWQpanBlZ19maW5pc2hfZGVjb21wcmVzcygmY2luZm8pOworICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOworCisgIC8qIENsb3NlIGZpbGVzLCBpZiB3ZSBvcGVuZWQgdGhlbSAqLworICBpZiAoaW5wdXRfZmlsZSAhPSBzdGRpbikKKyAgICBmY2xvc2UoaW5wdXRfZmlsZSk7CisgIGlmIChvdXRwdXRfZmlsZSAhPSBzdGRvdXQpCisgICAgZmNsb3NlKG91dHB1dF9maWxlKTsKKworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICBlbmRfcHJvZ3Jlc3NfbW9uaXRvcigoal9jb21tb25fcHRyKSZjaW5mbyk7CisjZW5kaWYKKworICBpZiAobWVtc3JjICYmIGluYnVmZmVyICE9IE5VTEwpCisgICAgZnJlZShpbmJ1ZmZlcik7CisKKyAgLyogQWxsIGRvbmUuICovCisgIGV4aXQoamVyci5udW1fd2FybmluZ3MgPyBFWElUX1dBUk5JTkcgOiBFWElUX1NVQ0NFU1MpOworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Fubm90YXRlZC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvYW5ub3RhdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyODZkMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Fubm90YXRlZC5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+Cis8dGl0bGU+VHVyYm9KUEVHOiBEYXRhIFN0cnVjdHVyZXM8L3RpdGxlPgorPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorPGRpdiBpZD0idGl0bGVhcmVhIj4KKzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorIDx0Ym9keT4KKyA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4yLjA8L3NwYW4+CisgICA8L2Rpdj4KKyAgPC90ZD4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KKyAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+CisgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CisgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCisgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgICAgICAgICAgICBhbHQ9IiIvPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iTVNlYXJjaEZpZWxkIiB2YWx1ZT0iU2VhcmNoIiBhY2Nlc3NrZXk9IlMiCisgICAgICAgICAgICAgICBvbmZvY3VzPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKHRydWUpIiAKKyAgICAgICAgICAgICAgIG9uYmx1cj0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyhmYWxzZSkiIAorICAgICAgICAgICAgICAgb25rZXl1cD0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRDaGFuZ2UoZXZlbnQpIi8+CisgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPSJyaWdodCI+CisgICAgICAgICAgICA8YSBpZD0iTVNlYXJjaENsb3NlIiBocmVmPSJqYXZhc2NyaXB0OnNlYXJjaEJveC5DbG9zZVJlc3VsdHNXaW5kb3coKSI+PGltZyBpZD0iTVNlYXJjaENsb3NlSW1nIiBib3JkZXI9IjAiIHNyYz0ic2VhcmNoL2Nsb3NlLnBuZyIgYWx0PSIiLz48L2E+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9Im5hdnJvdzIiIGNsYXNzPSJ0YWJzMiI+CisgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KKyAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImNsYXNzZXMuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZSYjMTYwO0luZGV4PC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImZ1bmN0aW9ucy5odG1sIj48c3Bhbj5EYXRhJiMxNjA7RmllbGRzPC9zcGFuPjwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorPC9kaXY+PCEtLSB0b3AgLS0+Cis8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCisgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgorICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KKzxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RnVuY3Rpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VHlwZWRlZnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg1KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg2KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdG9yPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+R3JvdXBzPC9hPjwvZGl2PgorCis8IS0tIGlmcmFtZSBzaG93aW5nIHRoZSBzZWFyY2ggcmVzdWx0cyAoY2xvc2VkIGJ5IGRlZmF1bHQpIC0tPgorPGRpdiBpZD0iTVNlYXJjaFJlc3VsdHNXaW5kb3ciPgorPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6dm9pZCgwKSIgZnJhbWVib3JkZXI9IjAiIAorICAgICAgICBuYW1lPSJNU2VhcmNoUmVzdWx0cyIgaWQ9Ik1TZWFyY2hSZXN1bHRzIj4KKzwvaWZyYW1lPgorPC9kaXY+CisKKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KKzxkaXYgY2xhc3M9InRpdGxlIj5EYXRhIFN0cnVjdHVyZXM8L2Rpdj4gIDwvZGl2PgorPC9kaXY+PCEtLWhlYWRlci0tPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj5IZXJlIGFyZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggYnJpZWYgZGVzY3JpcHRpb25zOjwvZGl2PjxkaXYgY2xhc3M9ImRpcmVjdG9yeSI+Cis8dGFibGUgY2xhc3M9ImRpcmVjdG9yeSI+Cis8dHIgaWQ9InJvd18wXyIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0iZW50cnkiPjxpbWcgc3JjPSJmdHYybm9kZS5wbmciIGFsdD0ibyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjIyIiAvPjxpbWcgc3JjPSJmdHYyY2wucG5nIiBhbHQ9IkMiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgLz48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiIHRhcmdldD0iX3NlbGYiPnRqcmVnaW9uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj5Dcm9wcGluZyByZWdpb248L3RkPjwvdHI+Cis8dHIgaWQ9InJvd18xXyI+PHRkIGNsYXNzPSJlbnRyeSI+PGltZyBzcmM9ImZ0djJub2RlLnBuZyIgYWx0PSJvIiB3aWR0aD0iMTYiIGhlaWdodD0iMjIiIC8+PGltZyBzcmM9ImZ0djJjbC5wbmciIGFsdD0iQyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIyIiAvPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwiIHRhcmdldD0iX3NlbGYiPnRqc2NhbGluZ2ZhY3RvcjwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+U2NhbGluZyBmYWN0b3I8L3RkPjwvdHI+Cis8dHIgaWQ9InJvd18yXyIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0iZW50cnkiPjxpbWcgc3JjPSJmdHYybGFzdG5vZGUucG5nIiBhbHQ9IlwiIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgLz48aW1nIHNyYz0iZnR2MmNsLnBuZyIgYWx0PSJDIiB3aWR0aD0iMjQiIGhlaWdodD0iMjIiIC8+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIiB0YXJnZXQ9Il9zZWxmIj50anRyYW5zZm9ybTwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+TG9zc2xlc3MgdHJhbnNmb3JtPC90ZD48L3RyPgorPC90YWJsZT4KKzwvZGl2PjwhLS0gZGlyZWN0b3J5IC0tPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9iY19zLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2JjX3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNGIyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9iY19zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9iZHduLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Jkd24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGEwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9iZHduLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9jbGFzc2VzLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9jbGFzc2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhMjgxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2NsYXNzZXMuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT05Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSIvPgorPHRpdGxlPlR1cmJvSlBFRzogRGF0YSBTdHJ1Y3R1cmUgSW5kZXg8L3RpdGxlPgorPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorPGRpdiBpZD0idGl0bGVhcmVhIj4KKzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorIDx0Ym9keT4KKyA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4yLjA8L3NwYW4+CisgICA8L2Rpdj4KKyAgPC90ZD4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KKyAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+CisgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CisgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCisgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgICAgICAgICAgICBhbHQ9IiIvPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iTVNlYXJjaEZpZWxkIiB2YWx1ZT0iU2VhcmNoIiBhY2Nlc3NrZXk9IlMiCisgICAgICAgICAgICAgICBvbmZvY3VzPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKHRydWUpIiAKKyAgICAgICAgICAgICAgIG9uYmx1cj0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyhmYWxzZSkiIAorICAgICAgICAgICAgICAgb25rZXl1cD0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRDaGFuZ2UoZXZlbnQpIi8+CisgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPSJyaWdodCI+CisgICAgICAgICAgICA8YSBpZD0iTVNlYXJjaENsb3NlIiBocmVmPSJqYXZhc2NyaXB0OnNlYXJjaEJveC5DbG9zZVJlc3VsdHNXaW5kb3coKSI+PGltZyBpZD0iTVNlYXJjaENsb3NlSW1nIiBib3JkZXI9IjAiIHNyYz0ic2VhcmNoL2Nsb3NlLnBuZyIgYWx0PSIiLz48L2E+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9Im5hdnJvdzIiIGNsYXNzPSJ0YWJzMiI+CisgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KKyAgICAgIDxsaT48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImNsYXNzZXMuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZSYjMTYwO0luZGV4PC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImZ1bmN0aW9ucy5odG1sIj48c3Bhbj5EYXRhJiMxNjA7RmllbGRzPC9zcGFuPjwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorPC9kaXY+PCEtLSB0b3AgLS0+Cis8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCisgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgorICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KKzxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RnVuY3Rpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VHlwZWRlZnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg1KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg2KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdG9yPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+R3JvdXBzPC9hPjwvZGl2PgorCis8IS0tIGlmcmFtZSBzaG93aW5nIHRoZSBzZWFyY2ggcmVzdWx0cyAoY2xvc2VkIGJ5IGRlZmF1bHQpIC0tPgorPGRpdiBpZD0iTVNlYXJjaFJlc3VsdHNXaW5kb3ciPgorPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6dm9pZCgwKSIgZnJhbWVib3JkZXI9IjAiIAorICAgICAgICBuYW1lPSJNU2VhcmNoUmVzdWx0cyIgaWQ9Ik1TZWFyY2hSZXN1bHRzIj4KKzwvaWZyYW1lPgorPC9kaXY+CisKKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KKzxkaXYgY2xhc3M9InRpdGxlIj5EYXRhIFN0cnVjdHVyZSBJbmRleDwvZGl2PiAgPC9kaXY+Cis8L2Rpdj48IS0taGVhZGVyLS0+Cis8ZGl2IGNsYXNzPSJjb250ZW50cyI+Cis8ZGl2IGNsYXNzPSJxaW5kZXgiPjxhIGNsYXNzPSJxaW5kZXgiIGhyZWY9IiNsZXR0ZXJfVCI+VDwvYT48L2Rpdj4KKzx0YWJsZSBzdHlsZT0ibWFyZ2luOiAxMHB4OyB3aGl0ZS1zcGFjZTogbm93cmFwOyIgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijk1JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorPHRyPjx0ZCByb3dzcGFuPSIyIiB2YWxpZ249ImJvdHRvbSI+PGEgbmFtZT0ibGV0dGVyX1QiPjwvYT48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dGQ+PGRpdiBjbGFzcz0iYWgiPiYjMTYwOyYjMTYwO1QmIzE2MDsmIzE2MDs8L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIj50anNjYWxpbmdmYWN0b3I8L2E+JiMxNjA7JiMxNjA7JiMxNjA7PC90ZD48dGQgdmFsaWduPSJ0b3AiPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+JiMxNjA7JiMxNjA7JiMxNjA7PC90ZD48dGQ+PC90ZD48L3RyPgorPHRyPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+Cis8dHI+PHRkIHZhbGlnbj0idG9wIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiYjMTYwOyYjMTYwOyYjMTYwOzwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzx0cj48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InFpbmRleCI+PGEgY2xhc3M9InFpbmRleCIgaHJlZj0iI2xldHRlcl9UIj5UPC9hPjwvZGl2PgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9jbG9zZWQucG5nIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvY2xvc2VkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGNjMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvY2xvc2VkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9kb3h5Z2VuLWV4dHJhLmNzcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2RveHlnZW4tZXh0cmEuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmQ0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9kb3h5Z2VuLWV4dHJhLmNzcwpAQCAtMCwwICsxLDMgQEAKK2NvZGUgeworCWNvbG9yOiAjNDY2NUEyOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZG94eWdlbi5jc3MgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9kb3h5Z2VuLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJhZmYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZG94eWdlbi5jc3MKQEAgLTAsMCArMSwxMTg0IEBACisvKiBUaGUgc3RhbmRhcmQgQ1NTIGZvciBkb3h5Z2VuIDEuOC4zLjEgKi8KKworYm9keSwgdGFibGUsIGRpdiwgcCwgZGwgeworCWZvbnQ6IDQwMCAxNHB4LzE5cHggUm9ib3RvLHNhbnMtc2VyaWY7Cit9CisKKy8qIEBncm91cCBIZWFkaW5nIExldmVscyAqLworCitoMS5ncm91cGhlYWRlciB7CisJZm9udC1zaXplOiAxNTAlOworfQorCisudGl0bGUgeworCWZvbnQtc2l6ZTogMTUwJTsKKwlmb250LXdlaWdodDogYm9sZDsKKwltYXJnaW46IDEwcHggMnB4OworfQorCitoMi5ncm91cGhlYWRlciB7CisJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4NzlFQ0I7CisJY29sb3I6ICMzNTRDN0I7CisJZm9udC1zaXplOiAxNTAlOworCWZvbnQtd2VpZ2h0OiBub3JtYWw7CisJbWFyZ2luLXRvcDogMS43NWVtOworCXBhZGRpbmctdG9wOiA4cHg7CisJcGFkZGluZy1ib3R0b206IDRweDsKKwl3aWR0aDogMTAwJTsKK30KKworaDMuZ3JvdXBoZWFkZXIgeworCWZvbnQtc2l6ZTogMTAwJTsKK30KKworaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7CisJLXdlYmtpdC10cmFuc2l0aW9uOiB0ZXh0LXNoYWRvdyAwLjVzIGxpbmVhcjsKKwktbW96LXRyYW5zaXRpb246IHRleHQtc2hhZG93IDAuNXMgbGluZWFyOworCS1tcy10cmFuc2l0aW9uOiB0ZXh0LXNoYWRvdyAwLjVzIGxpbmVhcjsKKwktby10cmFuc2l0aW9uOiB0ZXh0LXNoYWRvdyAwLjVzIGxpbmVhcjsKKwl0cmFuc2l0aW9uOiB0ZXh0LXNoYWRvdyAwLjVzIGxpbmVhcjsKKwltYXJnaW4tcmlnaHQ6IDE1cHg7Cit9CisKK2gxLmdsb3csIGgyLmdsb3csIGgzLmdsb3csIGg0Lmdsb3csIGg1Lmdsb3csIGg2Lmdsb3cgeworCXRleHQtc2hhZG93OiAwIDAgMTVweCBjeWFuOworfQorCitkdCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2Rpdi5tdWx0aWNvbCB7CisJLW1vei1jb2x1bW4tZ2FwOiAxZW07CisJLXdlYmtpdC1jb2x1bW4tZ2FwOiAxZW07CisJLW1vei1jb2x1bW4tY291bnQ6IDM7CisJLXdlYmtpdC1jb2x1bW4tY291bnQ6IDM7Cit9CisKK3Auc3RhcnRsaSwgcC5zdGFydGRkLCBwLnN0YXJ0dGQgeworCW1hcmdpbi10b3A6IDJweDsKK30KKworcC5lbmRsaSB7CisJbWFyZ2luLWJvdHRvbTogMHB4OworfQorCitwLmVuZGRkIHsKKwltYXJnaW4tYm90dG9tOiA0cHg7Cit9CisKK3AuZW5kdGQgeworCW1hcmdpbi1ib3R0b206IDJweDsKK30KKworLyogQGVuZCAqLworCitjYXB0aW9uIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5sZWdlbmQgeworICAgICAgICBmb250LXNpemU6IDcwJTsKKyAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitoMy52ZXJzaW9uIHsKKyAgICAgICAgZm9udC1zaXplOiA5MCU7CisgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworZGl2LnFpbmRleCwgZGl2Lm5hdnRhYnsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRUJFRkY2OworCWJvcmRlcjogMXB4IHNvbGlkICNBM0I0RDc7CisJdGV4dC1hbGlnbjogY2VudGVyOworfQorCitkaXYucWluZGV4LCBkaXYubmF2cGF0aCB7CisJd2lkdGg6IDEwMCU7CisJbGluZS1oZWlnaHQ6IDE0MCU7Cit9CisKK2Rpdi5uYXZ0YWIgeworCW1hcmdpbi1yaWdodDogMTVweDsKK30KKworLyogQGdyb3VwIExpbmsgU3R5bGluZyAqLworCithIHsKKwljb2xvcjogIzNENTc4QzsKKwlmb250LXdlaWdodDogbm9ybWFsOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLmNvbnRlbnRzIGE6dmlzaXRlZCB7CisJY29sb3I6ICM0NjY1QTI7Cit9CisKK2E6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCithLnFpbmRleCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2EucWluZGV4SEwgeworCWZvbnQtd2VpZ2h0OiBib2xkOworCWJhY2tncm91bmQtY29sb3I6ICM5Q0FGRDQ7CisJY29sb3I6ICNmZmZmZmY7CisJYm9yZGVyOiAxcHggZG91YmxlICM4NjlEQ0E7Cit9CisKKy5jb250ZW50cyBhLnFpbmRleEhMOnZpc2l0ZWQgeworICAgICAgICBjb2xvcjogI2ZmZmZmZjsKK30KKworYS5lbCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2EuZWxSZWYgeworfQorCithLmNvZGUsIGEuY29kZTp2aXNpdGVkIHsKKwljb2xvcjogIzQ2NjVBMjsgCit9CisKK2EuY29kZVJlZiwgYS5jb2RlUmVmOnZpc2l0ZWQgeworCWNvbG9yOiAjNDY2NUEyOyAKK30KKworLyogQGVuZCAqLworCitkbC5lbCB7CisJbWFyZ2luLWxlZnQ6IC0xY207Cit9CisKK3ByZS5mcmFnbWVudCB7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNDNENGRTU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQkZDRkQ7CisgICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CisgICAgICAgIG1hcmdpbjogNHB4IDhweCA0cHggMnB4OworICAgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOworICAgICAgICBmb250LXNpemU6ICA5cHQ7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxMjUlOworICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBmaXhlZDsKKyAgICAgICAgZm9udC1zaXplOiAxMDUlOworfQorCitkaXYuZnJhZ21lbnQgeworICAgICAgICBwYWRkaW5nOiA0cHg7CisgICAgICAgIG1hcmdpbjogNHB4OworCWJhY2tncm91bmQtY29sb3I6ICNGQkZDRkQ7CisJYm9yZGVyOiAxcHggc29saWQgI0M0Q0ZFNTsKK30KKworZGl2LmxpbmUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIGZpeGVkOworICAgICAgICBmb250LXNpemU6IDEzcHg7CisJbWluLWhlaWdodDogMTNweDsKKwlsaW5lLWhlaWdodDogMS4wOworCXRleHQtd3JhcDogdW5yZXN0cmljdGVkOworCXdoaXRlLXNwYWNlOiAtbW96LXByZS13cmFwOyAvKiBNb3ogKi8KKwl3aGl0ZS1zcGFjZTogLXByZS13cmFwOyAgICAgLyogT3BlcmEgNC02ICovCisJd2hpdGUtc3BhY2U6IC1vLXByZS13cmFwOyAgIC8qIE9wZXJhIDcgKi8KKwl3aGl0ZS1zcGFjZTogcHJlLXdyYXA7ICAgICAgLyogQ1NTMyAgKi8KKwl3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7ICAgICAgLyogSUUgNS41KyAqLworCXRleHQtaW5kZW50OiAtNTNweDsKKwlwYWRkaW5nLWxlZnQ6IDUzcHg7CisJcGFkZGluZy1ib3R0b206IDBweDsKKwltYXJnaW46IDBweDsKKwktd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1tb3otdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm94LXNoYWRvdzsKKwktbW96LXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7CisJLW1zLXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW1zLXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7CisJLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm94LXNoYWRvdzsKKwktby10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKK30KKworZGl2LmxpbmUuZ2xvdyB7CisJYmFja2dyb3VuZC1jb2xvcjogY3lhbjsKKwlib3gtc2hhZG93OiAwIDAgMTBweCBjeWFuOworfQorCisKK3NwYW4ubGluZW5vIHsKKwlwYWRkaW5nLXJpZ2h0OiA0cHg7CisJdGV4dC1hbGlnbjogcmlnaHQ7CisJYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzBGMDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRThFOEU4OworICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorc3Bhbi5saW5lbm8gYSB7CisJYmFja2dyb3VuZC1jb2xvcjogI0Q4RDhEODsKK30KKworc3Bhbi5saW5lbm8gYTpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI0M4QzhDODsKK30KKworZGl2LmFoIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKwlmb250LXdlaWdodDogYm9sZDsKKwljb2xvcjogI2ZmZmZmZjsKKwltYXJnaW4tYm90dG9tOiAzcHg7CisJbWFyZ2luLXRvcDogM3B4OworCXBhZGRpbmc6IDAuMmVtOworCWJvcmRlcjogc29saWQgdGhpbiAjMzMzOworCWJvcmRlci1yYWRpdXM6IDAuNWVtOworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogLjVlbTsKKwktbW96LWJvcmRlci1yYWRpdXM6IC41ZW07CisJYm94LXNoYWRvdzogMnB4IDJweCAzcHggIzk5OTsKKwktd2Via2l0LWJveC1zaGFkb3c6IDJweCAycHggM3B4ICM5OTk7CisJLW1vei1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTUpIDJweCAycHggMnB4OworCWJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZSksIHRvKCMwMDApLGNvbG9yLXN0b3AoMC4zLCAjNDQ0KSk7CisJYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQoY2VudGVyIHRvcCwgI2VlZSAwJSwgIzQ0NCA0MCUsICMwMDApOworfQorCitkaXYuZ3JvdXBIZWFkZXIgeworCW1hcmdpbi1sZWZ0OiAxNnB4OworCW1hcmdpbi10b3A6IDEycHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2Rpdi5ncm91cFRleHQgeworCW1hcmdpbi1sZWZ0OiAxNnB4OworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworYm9keSB7CisJYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisJY29sb3I6IGJsYWNrOworICAgICAgICBtYXJnaW46IDA7Cit9CisKK2Rpdi5jb250ZW50cyB7CisJbWFyZ2luLXRvcDogMTBweDsKKwltYXJnaW4tbGVmdDogMTJweDsKKwltYXJnaW4tcmlnaHQ6IDhweDsKK30KKwordGQuaW5kZXhrZXkgeworCWJhY2tncm91bmQtY29sb3I6ICNFQkVGRjY7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJYm9yZGVyOiAxcHggc29saWQgI0M0Q0ZFNTsKKwltYXJnaW46IDJweCAwcHggMnB4IDA7CisJcGFkZGluZzogMnB4IDEwcHg7CisgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkLmluZGV4dmFsdWUgeworCWJhY2tncm91bmQtY29sb3I6ICNFQkVGRjY7CisJYm9yZGVyOiAxcHggc29saWQgI0M0Q0ZFNTsKKwlwYWRkaW5nOiAycHggMTBweDsKKwltYXJnaW46IDJweCAwcHg7Cit9CisKK3RyLm1lbWxpc3QgeworCWJhY2tncm91bmQtY29sb3I6ICNFRUYxRjc7Cit9CisKK3AuZm9ybXVsYURzcCB7CisJdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcuZm9ybXVsYURzcCB7CisJCit9CisKK2ltZy5mb3JtdWxhSW5sIHsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCitkaXYuY2VudGVyIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgIG1hcmdpbi10b3A6IDBweDsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMHB4OworICAgICAgICBwYWRkaW5nOiAwcHg7Cit9CisKK2Rpdi5jZW50ZXIgaW1nIHsKKwlib3JkZXI6IDBweDsKK30KKworYWRkcmVzcy5mb290ZXIgeworCXRleHQtYWxpZ246IHJpZ2h0OworCXBhZGRpbmctcmlnaHQ6IDEycHg7Cit9CisKK2ltZy5mb290ZXIgeworCWJvcmRlcjogMHB4OworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKy8qIEBncm91cCBDb2RlIENvbG9yaXphdGlvbiAqLworCitzcGFuLmtleXdvcmQgeworCWNvbG9yOiAjMDA4MDAwCit9CisKK3NwYW4ua2V5d29yZHR5cGUgeworCWNvbG9yOiAjNjA0MDIwCit9CisKK3NwYW4ua2V5d29yZGZsb3cgeworCWNvbG9yOiAjZTA4MDAwCit9CisKK3NwYW4uY29tbWVudCB7CisJY29sb3I6ICM4MDAwMDAKK30KKworc3Bhbi5wcmVwcm9jZXNzb3IgeworCWNvbG9yOiAjODA2MDIwCit9CisKK3NwYW4uc3RyaW5nbGl0ZXJhbCB7CisJY29sb3I6ICMwMDIwODAKK30KKworc3Bhbi5jaGFybGl0ZXJhbCB7CisJY29sb3I6ICMwMDgwODAKK30KKworc3Bhbi52aGRsZGlnaXQgeyAKKwljb2xvcjogI2ZmMDBmZiAKK30KKworc3Bhbi52aGRsY2hhciB7IAorCWNvbG9yOiAjMDAwMDAwIAorfQorCitzcGFuLnZoZGxrZXl3b3JkIHsgCisJY29sb3I6ICM3MDAwNzAgCit9CisKK3NwYW4udmhkbGxvZ2ljIHsgCisJY29sb3I6ICNmZjAwMDAgCit9CisKK2Jsb2NrcXVvdGUgeworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGOEZCOworICAgICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkICM5Q0FGRDQ7CisgICAgICAgIG1hcmdpbjogMCAyNHB4IDAgNHB4OworICAgICAgICBwYWRkaW5nOiAwIDEycHggMCAxNnB4OworfQorCisvKiBAZW5kICovCisKKy8qCisuc2VhcmNoIHsKKwljb2xvcjogIzAwMzM5OTsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZm9ybS5zZWFyY2ggeworCW1hcmdpbi1ib3R0b206IDBweDsKKwltYXJnaW4tdG9wOiAwcHg7Cit9CisKK2lucHV0LnNlYXJjaCB7CisJZm9udC1zaXplOiA3NSU7CisJY29sb3I6ICMwMDAwODA7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZThlZWYyOworfQorKi8KKwordGQudGlueSB7CisJZm9udC1zaXplOiA3NSU7Cit9CisKKy5kaXJ0YWIgeworCXBhZGRpbmc6IDRweDsKKwlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworCWJvcmRlcjogMXB4IHNvbGlkICNBM0I0RDc7Cit9CisKK3RoLmRpcnRhYiB7CisJYmFja2dyb3VuZDogI0VCRUZGNjsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworaHIgeworCWhlaWdodDogMHB4OworCWJvcmRlcjogbm9uZTsKKwlib3JkZXItdG9wOiAxcHggc29saWQgIzRBNkFBQTsKK30KKworaHIuZm9vdGVyIHsKKwloZWlnaHQ6IDFweDsKK30KKworLyogQGdyb3VwIE1lbWJlciBEZXNjcmlwdGlvbnMgKi8KKwordGFibGUubWVtYmVyZGVjbHMgeworCWJvcmRlci1zcGFjaW5nOiAwcHg7CisJcGFkZGluZzogMHB4OworfQorCisubWVtYmVyZGVjbHMgdGQsIC5maWVsZHRhYmxlIHRyIHsKKwktd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1tb3otdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm94LXNoYWRvdzsKKwktbW96LXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7CisJLW1zLXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW1zLXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7CisJLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm94LXNoYWRvdzsKKwktby10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKK30KKworLm1lbWJlcmRlY2xzIHRkLmdsb3csIC5maWVsZHRhYmxlIHRyLmdsb3cgeworCWJhY2tncm91bmQtY29sb3I6IGN5YW47CisJYm94LXNoYWRvdzogMCAwIDE1cHggY3lhbjsKK30KKworLm1kZXNjTGVmdCwgLm1kZXNjUmlnaHQsCisubWVtSXRlbUxlZnQsIC5tZW1JdGVtUmlnaHQsCisubWVtVGVtcGxJdGVtTGVmdCwgLm1lbVRlbXBsSXRlbVJpZ2h0LCAubWVtVGVtcGxQYXJhbXMgeworCWJhY2tncm91bmQtY29sb3I6ICNGOUZBRkM7CisJYm9yZGVyOiBub25lOworCW1hcmdpbjogNHB4OworCXBhZGRpbmc6IDFweCAwIDAgOHB4OworfQorCisubWRlc2NMZWZ0LCAubWRlc2NSaWdodCB7CisJcGFkZGluZzogMHB4IDhweCA0cHggOHB4OworCWNvbG9yOiAjNTU1OworfQorCisubWVtU2VwYXJhdG9yIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNERUU0RjA7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxcHg7CisgICAgICAgIG1hcmdpbjogMHB4OworICAgICAgICBwYWRkaW5nOiAwcHg7Cit9CisKKy5tZW1JdGVtTGVmdCwgLm1lbVRlbXBsSXRlbUxlZnQgeworICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCisubWVtSXRlbVJpZ2h0IHsKKwl3aWR0aDogMTAwJTsKK30KKworLm1lbVRlbXBsUGFyYW1zIHsKKwljb2xvcjogIzQ2NjVBMjsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKwlmb250LXNpemU6IDgwJTsKK30KKworLyogQGVuZCAqLworCisvKiBAZ3JvdXAgTWVtYmVyIERldGFpbHMgKi8KKworLyogU3R5bGVzIGZvciBkZXRhaWxlZCBtZW1iZXIgZG9jdW1lbnRhdGlvbiAqLworCisubWVtdGVtcGxhdGUgeworCWZvbnQtc2l6ZTogODAlOworCWNvbG9yOiAjNDY2NUEyOworCWZvbnQtd2VpZ2h0OiBub3JtYWw7CisJbWFyZ2luLWxlZnQ6IDlweDsKK30KKworLm1lbW5hdiB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VCRUZGNjsKKwlib3JkZXI6IDFweCBzb2xpZCAjQTNCNEQ3OworCXRleHQtYWxpZ246IGNlbnRlcjsKKwltYXJnaW46IDJweDsKKwltYXJnaW4tcmlnaHQ6IDE1cHg7CisJcGFkZGluZzogMnB4OworfQorCisubWVtcGFnZSB7CisJd2lkdGg6IDEwMCU7Cit9CisKKy5tZW1pdGVtIHsKKwlwYWRkaW5nOiAwOworCW1hcmdpbi1ib3R0b206IDEwcHg7CisJbWFyZ2luLXJpZ2h0OiA1cHg7CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgLW1vei10cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMgbGluZWFyOworICAgICAgICAtbXMtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgLW8tdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsKKyAgICAgICAgd2lkdGg6IDEwMCU7Cit9CisKKy5tZW1pdGVtLmdsb3cgeworICAgICAgICAgYm94LXNoYWRvdzogMCAwIDE1cHggY3lhbjsKK30KKworLm1lbW5hbWUgeworICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IDZweDsKK30KKworLm1lbW5hbWUgdGQgeworCXZlcnRpY2FsLWFsaWduOiBib3R0b207Cit9CisKKy5tZW1wcm90bywgZGwucmVmbGlzdCBkdCB7CisgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQThCOEQ5OworICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIHBhZGRpbmc6IDZweCAwcHggNnB4IDBweDsKKyAgICAgICAgY29sb3I6ICMyNTM1NTU7CisgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICB0ZXh0LXNoYWRvdzogMHB4IDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2YucG5nJyk7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTJFOEYyOworICAgICAgICAvKiBvcGVyYSBzcGVjaWZpYyBtYXJrdXAgKi8KKyAgICAgICAgYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICAvKiBmaXJlZm94IHNwZWNpZmljIG1hcmt1cCAqLworICAgICAgICAtbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSkgNXB4IDVweCA1cHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4OworICAgICAgICAvKiB3ZWJraXQgc3BlY2lmaWMgbWFya3VwICovCisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsKKworfQorCisubWVtZG9jLCBkbC5yZWZsaXN0IGRkIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7ICAgICAgCisgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0E4QjhEOTsgICAgICAKKyAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0E4QjhEOTsgCisgICAgICAgIHBhZGRpbmc6IDZweCAxMHB4IDJweCAxMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJGQ0ZEOworICAgICAgICBib3JkZXItdG9wLXdpZHRoOiAwOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2cucG5nJyk7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOworICAgICAgICAvKiBvcGVyYSBzcGVjaWZpYyBtYXJrdXAgKi8KKyAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICBib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAgICAgICAvKiBmaXJlZm94IHNwZWNpZmljIG1hcmt1cCAqLworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDRweDsKKyAgICAgICAgLW1vei1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTUpIDVweCA1cHggNXB4OworICAgICAgICAvKiB3ZWJraXQgc3BlY2lmaWMgbWFya3VwICovCisgICAgICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7CisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKworZGwucmVmbGlzdCBkdCB7CisgICAgICAgIHBhZGRpbmc6IDVweDsKK30KKworZGwucmVmbGlzdCBkZCB7CisgICAgICAgIG1hcmdpbjogMHB4IDBweCAxMHB4IDBweDsKKyAgICAgICAgcGFkZGluZzogNXB4OworfQorCisucGFyYW1rZXkgeworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisucGFyYW10eXBlIHsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCisucGFyYW1uYW1lIHsKKwljb2xvcjogIzYwMjAyMDsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorLnBhcmFtbmFtZSBlbSB7CisJZm9udC1zdHlsZTogbm9ybWFsOworfQorLnBhcmFtbmFtZSBjb2RlIHsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDE0cHg7Cit9CisKKy5wYXJhbXMsIC5yZXR2YWwsIC5leGNlcHRpb24sIC50cGFyYW1zIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7Cit9ICAgICAgIAorCisucGFyYW1zIC5wYXJhbW5hbWUsIC5yZXR2YWwgLnBhcmFtbmFtZSB7CisgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorICAgICAgICAKKy5wYXJhbXMgLnBhcmFtdHlwZSB7CisgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30gICAgICAgCisgICAgICAgIAorLnBhcmFtcyAucGFyYW1kaXIgeworICAgICAgICBmb250LWZhbWlseTogImNvdXJpZXIgbmV3Iixjb3VyaWVyLG1vbm9zcGFjZTsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGFibGUubWxhYmVscyB7CisJYm9yZGVyLXNwYWNpbmc6IDBweDsKK30KKwordGQubWxhYmVscy1sZWZ0IHsKKwl3aWR0aDogMTAwJTsKKwlwYWRkaW5nOiAwcHg7Cit9CisKK3RkLm1sYWJlbHMtcmlnaHQgeworCXZlcnRpY2FsLWFsaWduOiBib3R0b207CisJcGFkZGluZzogMHB4OworCXdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKK3NwYW4ubWxhYmVscyB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7Cit9CisKK3NwYW4ubWxhYmVsIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzcyOERDMTsKKyAgICAgICAgYm9yZGVyLXRvcDoxcHggc29saWQgIzUzNzNCNDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1MzczQjQ7CisgICAgICAgIGJvcmRlci1yaWdodDoxcHggc29saWQgI0M0Q0ZFNTsKKyAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0M0Q0ZFNTsKKwl0ZXh0LXNoYWRvdzogbm9uZTsKKwljb2xvcjogd2hpdGU7CisJbWFyZ2luLXJpZ2h0OiA0cHg7CisJcGFkZGluZzogMnB4IDNweDsKKwlib3JkZXItcmFkaXVzOiAzcHg7CisJZm9udC1zaXplOiA3cHQ7CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisKKworLyogQGVuZCAqLworCisvKiB0aGVzZSBhcmUgZm9yIHRyZWUgdmlldyB3aGVuIG5vdCB1c2VkIGFzIG1haW4gaW5kZXggKi8KKworZGl2LmRpcmVjdG9yeSB7CisgICAgICAgIG1hcmdpbjogMTBweCAwcHg7CisgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQThCOEQ5OworICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0E4QjhEOTsKKyAgICAgICAgd2lkdGg6IDEwMCU7Cit9CisKKy5kaXJlY3RvcnkgdGFibGUgeworICAgICAgICBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Cit9CisKKy5kaXJlY3RvcnkgdGQgeworICAgICAgICBtYXJnaW46IDBweDsKKyAgICAgICAgcGFkZGluZzogMHB4OworCXZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKKy5kaXJlY3RvcnkgdGQuZW50cnkgeworICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgICAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7Cit9CisKKy5kaXJlY3RvcnkgdGQuZW50cnkgYSB7CisgICAgICAgIG91dGxpbmU6bm9uZTsKK30KKworLmRpcmVjdG9yeSB0ZC5lbnRyeSBhIGltZyB7CisgICAgICAgIGJvcmRlcjogbm9uZTsKK30KKworLmRpcmVjdG9yeSB0ZC5kZXNjIHsKKyAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgIHBhZGRpbmctbGVmdDogNnB4OworCXBhZGRpbmctcmlnaHQ6IDZweDsKKwlwYWRkaW5nLXRvcDogM3B4OworCWJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjA1KTsKK30KKworLmRpcmVjdG9yeSB0ci5ldmVuIHsKKwlwYWRkaW5nLWxlZnQ6IDZweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRjdGOEZCOworfQorCisuZGlyZWN0b3J5IGltZyB7CisJdmVydGljYWwtYWxpZ246IC0zMCU7Cit9CisKKy5kaXJlY3RvcnkgLmxldmVscyB7CisgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgZm9udC1zaXplOiA5cHQ7Cit9CisKKy5kaXJlY3RvcnkgLmxldmVscyBzcGFuIHsKKyAgICAgICAgY3Vyc29yOiBwb2ludGVyOworICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKKyAgICAgICAgcGFkZGluZy1yaWdodDogMnB4OworCWNvbG9yOiAjM0Q1NzhDOworfQorCitkaXYuZHluaGVhZGVyIHsKKyAgICAgICAgbWFyZ2luLXRvcDogOHB4OworCS13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKKwktd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworCS1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsKKwktbW96LXVzZXItc2VsZWN0OiBub25lOworCS1tcy11c2VyLXNlbGVjdDogbm9uZTsKKwl1c2VyLXNlbGVjdDogbm9uZTsKK30KKworYWRkcmVzcyB7CisJZm9udC1zdHlsZTogbm9ybWFsOworCWNvbG9yOiAjMkEzRDYxOworfQorCit0YWJsZS5kb3h0YWJsZSB7CisJYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOworICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKK30KKwordGFibGUuZG94dGFibGUgdGQsIHRhYmxlLmRveHRhYmxlIHRoIHsKKwlib3JkZXI6IDFweCBzb2xpZCAjMkQ0MDY4OworCXBhZGRpbmc6IDNweCA3cHggMnB4OworfQorCit0YWJsZS5kb3h0YWJsZSB0aCB7CisJYmFja2dyb3VuZC1jb2xvcjogIzM3NEY3RjsKKwljb2xvcjogI0ZGRkZGRjsKKwlmb250LXNpemU6IDExMCU7CisJcGFkZGluZy1ib3R0b206IDRweDsKKwlwYWRkaW5nLXRvcDogNXB4OworfQorCit0YWJsZS5maWVsZHRhYmxlIHsKKyAgICAgICAgLyp3aWR0aDogMTAwJTsqLworICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OworICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQThCOEQ5OworICAgICAgICBib3JkZXItc3BhY2luZzogMHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICAgICAgLW1vei1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTUpIDJweCAycHggMnB4OworICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDJweCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgICAgICAgIGJveC1zaGFkb3c6IDJweCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7Cit9CisKKy5maWVsZHRhYmxlIHRkLCAuZmllbGR0YWJsZSB0aCB7CisgICAgICAgIHBhZGRpbmc6IDNweCA3cHggMnB4OworfQorCisuZmllbGR0YWJsZSB0ZC5maWVsZHR5cGUsIC5maWVsZHRhYmxlIHRkLmZpZWxkbmFtZSB7CisgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQThCOEQ5OworICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCisuZmllbGR0YWJsZSB0ZC5maWVsZG5hbWUgeworICAgICAgICBwYWRkaW5nLXRvcDogNXB4OworfQorCisuZmllbGR0YWJsZSB0ZC5maWVsZGRvYyB7CisgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQThCOEQ5OworICAgICAgICAvKndpZHRoOiAxMDAlOyovCit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkZG9jIHA6Zmlyc3QtY2hpbGQgeworICAgICAgICBtYXJnaW4tdG9wOiAycHg7Cit9ICAgICAgIAorICAgICAgICAKKy5maWVsZHRhYmxlIHRkLmZpZWxkZG9jIHA6bGFzdC1jaGlsZCB7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKK30KKworLmZpZWxkdGFibGUgdHI6bGFzdC1jaGlsZCB0ZCB7CisgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKy5maWVsZHRhYmxlIHRoIHsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ25hdl9mLnBuZycpOworICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0UyRThGMjsKKyAgICAgICAgZm9udC1zaXplOiA5MCU7CisgICAgICAgIGNvbG9yOiAjMjUzNTU1OworICAgICAgICBwYWRkaW5nLWJvdHRvbTogNHB4OworICAgICAgICBwYWRkaW5nLXRvcDogNXB4OworICAgICAgICB0ZXh0LWFsaWduOmxlZnQ7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiA0cHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7CisgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7CisgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQThCOEQ5OworfQorCisKKy50YWJzZWFyY2ggeworCXRvcDogMHB4OworCWxlZnQ6IDEwcHg7CisJaGVpZ2h0OiAzNnB4OworCWJhY2tncm91bmQtaW1hZ2U6IHVybCgndGFiX2IucG5nJyk7CisJei1pbmRleDogMTAxOworCW92ZXJmbG93OiBoaWRkZW47CisJZm9udC1zaXplOiAxM3B4OworfQorCisubmF2cGF0aCB1bAoreworCWZvbnQtc2l6ZTogMTFweDsKKwliYWNrZ3JvdW5kLWltYWdlOnVybCgndGFiX2IucG5nJyk7CisJYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNXB4OworCWhlaWdodDozMHB4OworCWxpbmUtaGVpZ2h0OjMwcHg7CisJY29sb3I6IzhBQTBDQzsKKwlib3JkZXI6c29saWQgMXB4ICNDMkNERTQ7CisJb3ZlcmZsb3c6aGlkZGVuOworCW1hcmdpbjowcHg7CisJcGFkZGluZzowcHg7Cit9CisKKy5uYXZwYXRoIGxpCit7CisJbGlzdC1zdHlsZS10eXBlOm5vbmU7CisJZmxvYXQ6bGVmdDsKKwlwYWRkaW5nLWxlZnQ6MTBweDsKKwlwYWRkaW5nLXJpZ2h0OjE1cHg7CisJYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2JjX3MucG5nJyk7CisJYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OworCWJhY2tncm91bmQtcG9zaXRpb246cmlnaHQ7CisJY29sb3I6IzM2NEQ3QzsKK30KKworLm5hdnBhdGggbGkubmF2ZWxlbSBhCit7CisJaGVpZ2h0OjMycHg7CisJZGlzcGxheTpibG9jazsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJb3V0bGluZTogbm9uZTsKKwljb2xvcjogIzI4M0E1RDsKKwlmb250LWZhbWlseTogJ0x1Y2lkYSBHcmFuZGUnLEdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKKwl0ZXh0LXNoYWRvdzogMHB4IDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsgICAgICAgIAorfQorCisubmF2cGF0aCBsaS5uYXZlbGVtIGE6aG92ZXIKK3sKKwljb2xvcjojNjg4NEJEOworfQorCisubmF2cGF0aCBsaS5mb290ZXIKK3sKKyAgICAgICAgbGlzdC1zdHlsZS10eXBlOm5vbmU7CisgICAgICAgIGZsb2F0OnJpZ2h0OworICAgICAgICBwYWRkaW5nLWxlZnQ6MTBweDsKKyAgICAgICAgcGFkZGluZy1yaWdodDoxNXB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsKKyAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodDsKKyAgICAgICAgY29sb3I6IzM2NEQ3QzsKKyAgICAgICAgZm9udC1zaXplOiA4cHQ7Cit9CisKKworZGl2LnN1bW1hcnkKK3sKKwlmbG9hdDogcmlnaHQ7CisJZm9udC1zaXplOiA4cHQ7CisJcGFkZGluZy1yaWdodDogNXB4OworCXdpZHRoOiA1MCU7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9ICAgICAgIAorCitkaXYuc3VtbWFyeSBhCit7CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKworZGl2LmluZ3JvdXBzCit7CisJZm9udC1zaXplOiA4cHQ7CisJd2lkdGg6IDUwJTsKKwl0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYuaW5ncm91cHMgYQoreworCXdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKK2Rpdi5oZWFkZXIKK3sKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ25hdl9oLnBuZycpOworICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRjlGQUZDOworCW1hcmdpbjogIDBweDsKKwlib3JkZXItYm90dG9tOiAxcHggc29saWQgI0M0Q0ZFNTsKK30KKworZGl2LmhlYWRlcnRpdGxlCit7CisJcGFkZGluZzogNXB4IDVweCA1cHggMTBweDsKK30KKworZGwKK3sKKyAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKK30KKworLyogZGwubm90ZSwgZGwud2FybmluZywgZGwuYXR0ZW50aW9uLCBkbC5wcmUsIGRsLnBvc3QsIGRsLmludmFyaWFudCwgZGwuZGVwcmVjYXRlZCwgZGwudG9kbywgZGwudGVzdCwgZGwuYnVnICovCitkbC5zZWN0aW9uCit7CisJbWFyZ2luLWxlZnQ6IDBweDsKKwlwYWRkaW5nLWxlZnQ6IDBweDsKK30KKworZGwubm90ZQoreworICAgICAgICBtYXJnaW4tbGVmdDotN3B4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6NHB4IHNvbGlkOworICAgICAgICBib3JkZXItY29sb3I6ICNEMEMwMDA7Cit9CisKK2RsLndhcm5pbmcsIGRsLmF0dGVudGlvbgoreworICAgICAgICBtYXJnaW4tbGVmdDotN3B4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6NHB4IHNvbGlkOworICAgICAgICBib3JkZXItY29sb3I6ICNGRjAwMDA7Cit9CisKK2RsLnByZSwgZGwucG9zdCwgZGwuaW52YXJpYW50Cit7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogIzAwRDAwMDsKK30KKworZGwuZGVwcmVjYXRlZAoreworICAgICAgICBtYXJnaW4tbGVmdDotN3B4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6NHB4IHNvbGlkOworICAgICAgICBib3JkZXItY29sb3I6ICM1MDUwNTA7Cit9CisKK2RsLnRvZG8KK3sKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKKyAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBDMEUwOworfQorCitkbC50ZXN0Cit7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogIzMwMzBFMDsKK30KKworZGwuYnVnCit7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogI0MwODA1MDsKK30KKworZGwuc2VjdGlvbiBkZCB7CisJbWFyZ2luLWJvdHRvbTogNnB4OworfQorCisKKyNwcm9qZWN0bG9nbworeworCXRleHQtYWxpZ246IGNlbnRlcjsKKwl2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOworCWJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Cit9CisgCisjcHJvamVjdGxvZ28gaW1nCit7IAorCWJvcmRlcjogMHB4IG5vbmU7Cit9CisgCisjcHJvamVjdG5hbWUKK3sKKwlmb250OiAzMDAlIFRhaG9tYSwgQXJpYWwsc2Fucy1zZXJpZjsKKwltYXJnaW46IDBweDsKKwlwYWRkaW5nOiAycHggMHB4OworfQorICAgIAorI3Byb2plY3RicmllZgoreworCWZvbnQ6IDEyMCUgVGFob21hLCBBcmlhbCxzYW5zLXNlcmlmOworCW1hcmdpbjogMHB4OworCXBhZGRpbmc6IDBweDsKK30KKworI3Byb2plY3RudW1iZXIKK3sKKwlmb250OiA1MCUgVGFob21hLCBBcmlhbCxzYW5zLXNlcmlmOworCW1hcmdpbjogMHB4OworCXBhZGRpbmc6IDBweDsKK30KKworI3RpdGxlYXJlYQoreworCXBhZGRpbmc6IDBweDsKKwltYXJnaW46IDBweDsKKwl3aWR0aDogMTAwJTsKKwlib3JkZXItYm90dG9tOiAxcHggc29saWQgIzUzNzNCNDsKK30KKworLmltYWdlCit7CisgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmRvdGdyYXBoCit7CisgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLm1zY2dyYXBoCit7CisgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmNhcHRpb24KK3sKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZGl2Lnpvb20KK3sKKwlib3JkZXI6IDFweCBzb2xpZCAjOTBBNUNFOworfQorCitkbC5jaXRlbGlzdCB7CisgICAgICAgIG1hcmdpbi1ib3R0b206NTBweDsKK30KKworZGwuY2l0ZWxpc3QgZHQgeworICAgICAgICBjb2xvcjojMzM0OTc1OworICAgICAgICBmbG9hdDpsZWZ0OworICAgICAgICBmb250LXdlaWdodDpib2xkOworICAgICAgICBtYXJnaW4tcmlnaHQ6MTBweDsKKyAgICAgICAgcGFkZGluZzo1cHg7Cit9CisKK2RsLmNpdGVsaXN0IGRkIHsKKyAgICAgICAgbWFyZ2luOjJweCAwOworICAgICAgICBwYWRkaW5nOjVweCAwOworfQorCitkaXYudG9jIHsKKyAgICAgICAgcGFkZGluZzogMTRweCAyNXB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNkZBOworICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDhERkVFOworICAgICAgICBib3JkZXItcmFkaXVzOiA3cHggN3B4IDdweCA3cHg7CisgICAgICAgIGZsb2F0OiByaWdodDsKKyAgICAgICAgaGVpZ2h0OiBhdXRvOworICAgICAgICBtYXJnaW46IDAgMjBweCAxMHB4IDEwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKK30KKworZGl2LnRvYyBsaSB7CisgICAgICAgIGJhY2tncm91bmQ6IHVybCgiYmR3bi5wbmciKSBuby1yZXBlYXQgc2Nyb2xsIDAgNXB4IHRyYW5zcGFyZW50OworICAgICAgICBmb250OiAxMHB4LzEuMiBWZXJkYW5hLERlamFWdSBTYW5zLEdlbmV2YSxzYW5zLXNlcmlmOworICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKKyAgICAgICAgcGFkZGluZy10b3A6IDJweDsKK30KKworZGl2LnRvYyBoMyB7CisgICAgICAgIGZvbnQ6IGJvbGQgMTJweC8xLjIgQXJpYWwsRnJlZVNhbnMsc2Fucy1zZXJpZjsKKwljb2xvcjogIzQ2NjVBMjsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMCBub25lOworICAgICAgICBtYXJnaW46IDA7Cit9CisKK2Rpdi50b2MgdWwgeworICAgICAgICBsaXN0LXN0eWxlOiBub25lIG91dHNpZGUgbm9uZTsKKyAgICAgICAgYm9yZGVyOiBtZWRpdW0gbm9uZTsKKyAgICAgICAgcGFkZGluZzogMHB4OworfSAgICAgICAKKworZGl2LnRvYyBsaS5sZXZlbDEgeworICAgICAgICBtYXJnaW4tbGVmdDogMHB4OworfQorCitkaXYudG9jIGxpLmxldmVsMiB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4OworfQorCitkaXYudG9jIGxpLmxldmVsMyB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4OworfQorCitkaXYudG9jIGxpLmxldmVsNCB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworfQorCisuaW5oZXJpdF9oZWFkZXIgeworICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgY29sb3I6IGdyYXk7CisgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKKwktd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CisJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKwkta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CisJLW1vei11c2VyLXNlbGVjdDogbm9uZTsKKwktbXMtdXNlci1zZWxlY3Q6IG5vbmU7CisJdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKy5pbmhlcml0X2hlYWRlciB0ZCB7CisgICAgICAgIHBhZGRpbmc6IDZweCAwcHggMnB4IDVweDsKK30KKworLmluaGVyaXQgeworICAgICAgICBkaXNwbGF5OiBub25lOworfQorCit0ci5oZWFkaW5nIGgyIHsKKyAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OworfQorCitAbWVkaWEgcHJpbnQKK3sKKyAgI3RvcCB7IGRpc3BsYXk6IG5vbmU7IH0KKyAgI3NpZGUtbmF2IHsgZGlzcGxheTogbm9uZTsgfQorICAjbmF2LXBhdGggeyBkaXNwbGF5OiBub25lOyB9CisgIGJvZHkgeyBvdmVyZmxvdzp2aXNpYmxlOyB9CisgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQorICAuc3VtbWFyeSB7IGRpc3BsYXk6IG5vbmU7IH0KKyAgLm1lbWl0ZW0geyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KKyAgI2RvYy1jb250ZW50CisgIHsKKyAgICBtYXJnaW4tbGVmdDowICFpbXBvcnRhbnQ7CisgICAgaGVpZ2h0OmF1dG8gIWltcG9ydGFudDsKKyAgICB3aWR0aDphdXRvICFpbXBvcnRhbnQ7CisgICAgb3ZlcmZsb3c6aW5oZXJpdDsKKyAgICBkaXNwbGF5OmlubGluZTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9kb3h5Z2VuLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2RveHlnZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjE3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9kb3h5Z2VuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9keW5zZWN0aW9ucy5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2R5bnNlY3Rpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDkyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9keW5zZWN0aW9ucy5qcwpAQCAtMCwwICsxLDk3IEBACitmdW5jdGlvbiB0b2dnbGVWaXNpYmlsaXR5KGxpbmtPYmopCit7CisgdmFyIGJhc2UgPSAkKGxpbmtPYmopLmF0dHIoJ2lkJyk7CisgdmFyIHN1bW1hcnkgPSAkKCcjJytiYXNlKyctc3VtbWFyeScpOworIHZhciBjb250ZW50ID0gJCgnIycrYmFzZSsnLWNvbnRlbnQnKTsKKyB2YXIgdHJpZ2dlciA9ICQoJyMnK2Jhc2UrJy10cmlnZ2VyJyk7CisgdmFyIHNyYz0kKHRyaWdnZXIpLmF0dHIoJ3NyYycpOworIGlmIChjb250ZW50LmlzKCc6dmlzaWJsZScpPT09dHJ1ZSkgeworICAgY29udGVudC5oaWRlKCk7CisgICBzdW1tYXJ5LnNob3coKTsKKyAgICQobGlua09iaikuYWRkQ2xhc3MoJ2Nsb3NlZCcpLnJlbW92ZUNsYXNzKCdvcGVuZWQnKTsKKyAgICQodHJpZ2dlcikuYXR0cignc3JjJyxzcmMuc3Vic3RyaW5nKDAsc3JjLmxlbmd0aC04KSsnY2xvc2VkLnBuZycpOworIH0gZWxzZSB7CisgICBjb250ZW50LnNob3coKTsKKyAgIHN1bW1hcnkuaGlkZSgpOworICAgJChsaW5rT2JqKS5yZW1vdmVDbGFzcygnY2xvc2VkJykuYWRkQ2xhc3MoJ29wZW5lZCcpOworICAgJCh0cmlnZ2VyKS5hdHRyKCdzcmMnLHNyYy5zdWJzdHJpbmcoMCxzcmMubGVuZ3RoLTEwKSsnb3Blbi5wbmcnKTsKKyB9IAorIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gdXBkYXRlU3RyaXBlcygpCit7CisgICQoJ3RhYmxlLmRpcmVjdG9yeSB0cicpLgorICAgICAgIHJlbW92ZUNsYXNzKCdldmVuJykuZmlsdGVyKCc6dmlzaWJsZTpldmVuJykuYWRkQ2xhc3MoJ2V2ZW4nKTsKK30KK2Z1bmN0aW9uIHRvZ2dsZUxldmVsKGxldmVsKQoreworICAkKCd0YWJsZS5kaXJlY3RvcnkgdHInKS5lYWNoKGZ1bmN0aW9uKCl7IAorICAgIHZhciBsID0gdGhpcy5pZC5zcGxpdCgnXycpLmxlbmd0aC0xOworICAgIHZhciBpID0gJCgnI2ltZycrdGhpcy5pZC5zdWJzdHJpbmcoMykpOworICAgIHZhciBhID0gJCgnI2FycicrdGhpcy5pZC5zdWJzdHJpbmcoMykpOworICAgIGlmIChsPGxldmVsKzEpIHsKKyAgICAgIGkuYXR0cignc3JjJywnZnR2MmZvbGRlcm9wZW4ucG5nJyk7CisgICAgICBhLmF0dHIoJ3NyYycsJ2Z0djJtbm9kZS5wbmcnKTsKKyAgICAgICQodGhpcykuc2hvdygpOworICAgIH0gZWxzZSBpZiAobD09bGV2ZWwrMSkgeworICAgICAgaS5hdHRyKCdzcmMnLCdmdHYyZm9sZGVyY2xvc2VkLnBuZycpOworICAgICAgYS5hdHRyKCdzcmMnLCdmdHYycG5vZGUucG5nJyk7CisgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgfQorICB9KTsKKyAgdXBkYXRlU3RyaXBlcygpOworfQorCitmdW5jdGlvbiB0b2dnbGVGb2xkZXIoaWQpCit7CisgIC8vVGhlIGNsaWNrZWQgcm93CisgIHZhciBjdXJyZW50Um93ID0gJCgnI3Jvd18nK2lkKTsKKyAgdmFyIGN1cnJlbnRSb3dJbWFnZXMgPSBjdXJyZW50Um93LmZpbmQoImltZyIpOworCisgIC8vQWxsIHJvd3MgYWZ0ZXIgdGhlIGNsaWNrZWQgcm93CisgIHZhciByb3dzID0gY3VycmVudFJvdy5uZXh0QWxsKCJ0ciIpOworCisgIC8vT25seSBtYXRjaCBlbGVtZW50cyBBRlRFUiB0aGlzIG9uZSAoY2FuJ3QgaGlkZSBlbGVtZW50cyBiZWZvcmUpCisgIHZhciBjaGlsZFJvd3MgPSByb3dzLmZpbHRlcihmdW5jdGlvbigpIHsKKyAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCdecm93XycraWQrJ1xcZCtfJCcsICJpIik7IC8vb25seSBvbmUgc3ViCisgICAgcmV0dXJuIHRoaXMuaWQubWF0Y2gocmUpOworICB9KTsKKworICAvL0ZpcnN0IHJvdyBpcyB2aXNpYmxlIHdlIGFyZSBISURJTkcKKyAgaWYgKGNoaWxkUm93cy5maWx0ZXIoJzpmaXJzdCcpLmlzKCc6dmlzaWJsZScpPT09dHJ1ZSkgeworICAgIGN1cnJlbnRSb3dJbWFnZXMuZmlsdGVyKCJbaWRePWFycl0iKS5hdHRyKCdzcmMnLCAnZnR2MnBub2RlLnBuZycpOworICAgIGN1cnJlbnRSb3dJbWFnZXMuZmlsdGVyKCJbaWRePWltZ10iKS5hdHRyKCdzcmMnLCAnZnR2MmZvbGRlcmNsb3NlZC5wbmcnKTsKKyAgICByb3dzLmZpbHRlcigiW2lkXj1yb3dfIitpZCsiXSIpLmhpZGUoKTsKKyAgfSBlbHNlIHsgLy9XZSBhcmUgU0hPV0lORworICAgIC8vQWxsIHN1YiBpbWFnZXMKKyAgICB2YXIgY2hpbGRJbWFnZXMgPSBjaGlsZFJvd3MuZmluZCgiaW1nIik7CisgICAgdmFyIGNoaWxkSW1nID0gY2hpbGRJbWFnZXMuZmlsdGVyKCJbaWRePWltZ10iKTsKKyAgICB2YXIgY2hpbGRBcnIgPSBjaGlsZEltYWdlcy5maWx0ZXIoIltpZF49YXJyXSIpOworCisgICAgY3VycmVudFJvdy5maW5kKCJbaWRePWFycl0iKS5hdHRyKCdzcmMnLCAnZnR2Mm1ub2RlLnBuZycpOyAvL29wZW4gcm93CisgICAgY3VycmVudFJvdy5maW5kKCJbaWRePWltZ10iKS5hdHRyKCdzcmMnLCAnZnR2MmZvbGRlcm9wZW4ucG5nJyk7IC8vb3BlbiByb3cKKyAgICBjaGlsZEltZy5hdHRyKCdzcmMnLCdmdHYyZm9sZGVyY2xvc2VkLnBuZycpOyAvL2NoaWxkcmVuIGNsb3NlZAorICAgIGNoaWxkQXJyLmF0dHIoJ3NyYycsJ2Z0djJwbm9kZS5wbmcnKTsgLy9jaGlsZHJlbiBjbG9zZWQKKyAgICBjaGlsZFJvd3Muc2hvdygpOyAvL3Nob3cgYWxsIGNoaWxkcmVuCisgIH0KKyAgdXBkYXRlU3RyaXBlcygpOworfQorCisKK2Z1bmN0aW9uIHRvZ2dsZUluaGVyaXQoaWQpCit7CisgIHZhciByb3dzID0gJCgndHIuaW5oZXJpdC4nK2lkKTsKKyAgdmFyIGltZyA9ICQoJ3RyLmluaGVyaXRfaGVhZGVyLicraWQrJyBpbWcnKTsKKyAgdmFyIHNyYyA9ICQoaW1nKS5hdHRyKCdzcmMnKTsKKyAgaWYgKHJvd3MuZmlsdGVyKCc6Zmlyc3QnKS5pcygnOnZpc2libGUnKT09PXRydWUpIHsKKyAgICByb3dzLmNzcygnZGlzcGxheScsJ25vbmUnKTsKKyAgICAkKGltZykuYXR0cignc3JjJyxzcmMuc3Vic3RyaW5nKDAsc3JjLmxlbmd0aC04KSsnY2xvc2VkLnBuZycpOworICB9IGVsc2UgeworICAgIHJvd3MuY3NzKCdkaXNwbGF5JywndGFibGUtcm93Jyk7IC8vIHVzaW5nIHNob3coKSBjYXVzZXMganVtcCBpbiBmaXJlZm94CisgICAgJChpbWcpLmF0dHIoJ3NyYycsc3JjLnN1YnN0cmluZygwLHNyYy5sZW5ndGgtMTApKydvcGVuLnBuZycpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJibGFuay5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYyYmxhbmsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYyYmxhbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJjbC5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYyY2wucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmY2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYyY2wucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJkb2MucG5nIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2MmRvYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZGFiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJkb2MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJmb2xkZXJjbG9zZWQucG5nIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2MmZvbGRlcmNsb3NlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4YWIzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJmb2xkZXJjbG9zZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJmb2xkZXJvcGVuLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJmb2xkZXJvcGVuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmM3ZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2MmZvbGRlcm9wZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJsYXN0bm9kZS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybGFzdG5vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybGFzdG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJsaW5rLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJsaW5rLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VkYWJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2MmxpbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJtbGFzdG5vZGUucG5nIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2Mm1sYXN0bm9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2M2Y2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJtbGFzdG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJtbm9kZS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybW5vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjNmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybW5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJtby5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybW8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmI4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybW8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJub2RlLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJub2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M2MDViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2Mm5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJucy5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTNkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYybnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJwbGFzdG5vZGUucG5nIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnR2MnBsYXN0bm9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlZTIyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJwbGFzdG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJwbm9kZS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYycG5vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWUyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYycG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJzcGxpdGJhci5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYyc3BsaXRiYXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlODk1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYyc3BsaXRiYXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z0djJ2ZXJ0bGluZS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYydmVydGxpbmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9mdHYydmVydGxpbmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z1bmN0aW9ucy5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnVuY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0MmFlNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTM0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+Cis8dGl0bGU+VHVyYm9KUEVHOiBEYXRhIEZpZWxkczwvdGl0bGU+Cis8bGluayBocmVmPSJ0YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxsaW5rIGhyZWY9InNlYXJjaC9zZWFyY2guY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2gvc2VhcmNoLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7IHNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7IH0pOworPC9zY3JpcHQ+Cis8bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKzxsaW5rIGhyZWY9ImRveHlnZW4tZXh0cmEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9InRvcCI+PCEtLSBkbyBub3QgcmVtb3ZlIHRoaXMgZGl2LCBpdCBpcyBjbG9zZWQgYnkgZG94eWdlbiEgLS0+Cis8ZGl2IGlkPSJ0aXRsZWFyZWEiPgorPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CisgPHRib2R5PgorIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CisgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgorICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRworICAgJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjIuMDwvc3Bhbj4KKyAgIDwvZGl2PgorICA8L3RkPgorIDwvdHI+CisgPC90Ym9keT4KKzwvdGFibGU+Cis8L2Rpdj4KKzwhLS0gZW5kIGhlYWRlciBwYXJ0IC0tPgorPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjguMy4xIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKKzwvc2NyaXB0PgorICA8ZGl2IGlkPSJuYXZyb3cxIiBjbGFzcz0idGFicyI+CisgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KKyAgICAgIDxsaT48YSBocmVmPSJpbmRleC5odG1sIj48c3Bhbj5NYWluJiMxNjA7UGFnZTwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJtb2R1bGVzLmh0bWwiPjxzcGFuPk1vZHVsZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT4KKyAgICAgICAgPGRpdiBpZD0iTVNlYXJjaEJveCIgY2xhc3M9Ik1TZWFyY2hCb3hJbmFjdGl2ZSI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij4KKyAgICAgICAgICA8aW1nIGlkPSJNU2VhcmNoU2VsZWN0IiBzcmM9InNlYXJjaC9tYWdfc2VsLnBuZyIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgorICAgICAgICAgICAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgICAgICAgICAgIGFsdD0iIi8+CisgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJNU2VhcmNoRmllbGQiIHZhbHVlPSJTZWFyY2giIGFjY2Vzc2tleT0iUyIKKyAgICAgICAgICAgICAgIG9uZm9jdXM9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkRm9jdXModHJ1ZSkiIAorICAgICAgICAgICAgICAgb25ibHVyPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKGZhbHNlKSIgCisgICAgICAgICAgICAgICBvbmtleXVwPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZENoYW5nZShldmVudCkiLz4KKyAgICAgICAgICA8L3NwYW4+PHNwYW4gY2xhc3M9InJpZ2h0Ij4KKyAgICAgICAgICAgIDxhIGlkPSJNU2VhcmNoQ2xvc2UiIGhyZWY9ImphdmFzY3JpcHQ6c2VhcmNoQm94LkNsb3NlUmVzdWx0c1dpbmRvdygpIj48aW1nIGlkPSJNU2VhcmNoQ2xvc2VJbWciIGJvcmRlcj0iMCIgc3JjPSJzZWFyY2gvY2xvc2UucG5nIiBhbHQ9IiIvPjwvYT4KKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9saT4KKyAgICA8L3VsPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0ibmF2cm93MiIgY2xhc3M9InRhYnMyIj4KKyAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgorICAgICAgPGxpPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJjbGFzc2VzLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmUmIzE2MDtJbmRleDwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9Im5hdnJvdzMiIGNsYXNzPSJ0YWJzMiI+CisgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KKyAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkFsbDwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJmdW5jdGlvbnNfdmFycy5odG1sIj48c3Bhbj5WYXJpYWJsZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+Cis8L2Rpdj48IS0tIHRvcCAtLT4KKzwhLS0gd2luZG93IHNob3dpbmcgdGhlIGZpbHRlciBvcHRpb25zIC0tPgorPGRpdiBpZD0iTVNlYXJjaFNlbGVjdFdpbmRvdyIKKyAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCisgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEtleShldmVudCkiPgorPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5GdW5jdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgzKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg0KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5UeXBlZGVmczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDUpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDYpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0b3I8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg3KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5Hcm91cHM8L2E+PC9kaXY+CisKKzwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+Cis8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDp2b2lkKDApIiBmcmFtZWJvcmRlcj0iMCIgCisgICAgICAgIG5hbWU9Ik1TZWFyY2hSZXN1bHRzIiBpZD0iTVNlYXJjaFJlc3VsdHMiPgorPC9pZnJhbWU+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj5IZXJlIGlzIGEgbGlzdCBvZiBhbGwgZG9jdW1lbnRlZCBzdHJ1Y3QgYW5kIHVuaW9uIGZpZWxkcyB3aXRoIGxpbmtzIHRvIHRoZSBzdHJ1Y3QvdW5pb24gZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBmaWVsZDo8L2Rpdj48dWw+Cis8bGk+Y3VzdG9tRmlsdGVyCis6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiPnRqdHJhbnNmb3JtPC9hPgorPC9saT4KKzxsaT5kYXRhCis6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPnRqdHJhbnNmb3JtPC9hPgorPC9saT4KKzxsaT5kZW5vbQorOiA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+dGpzY2FsaW5nZmFjdG9yPC9hPgorPC9saT4KKzxsaT5oCis6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPnRqcmVnaW9uPC9hPgorPC9saT4KKzxsaT5udW0KKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPnRqc2NhbGluZ2ZhY3RvcjwvYT4KKzwvbGk+Cis8bGk+b3AKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+dGp0cmFuc2Zvcm08L2E+Cis8L2xpPgorPGxpPm9wdGlvbnMKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+dGp0cmFuc2Zvcm08L2E+Cis8L2xpPgorPGxpPnIKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+dGp0cmFuc2Zvcm08L2E+Cis8L2xpPgorPGxpPncKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+dGpyZWdpb248L2E+Cis8L2xpPgorPGxpPngKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+dGpyZWdpb248L2E+Cis8L2xpPgorPGxpPnkKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+dGpyZWdpb248L2E+Cis8L2xpPgorPC91bD4KKzwvZGl2PjwhLS0gY29udGVudHMgLS0+Cis8IS0tIHN0YXJ0IGZvb3RlciBwYXJ0IC0tPgorPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+CitHZW5lcmF0ZWQgYnkgJiMxNjA7PGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KKzxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+Cis8L2E+IDEuOC4zLjEKKzwvc21hbGw+PC9hZGRyZXNzPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZnVuY3Rpb25zX3ZhcnMuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z1bmN0aW9uc192YXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNzE1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL2Z1bmN0aW9uc192YXJzLmh0bWwKQEAgLTAsMCArMSwxMzQgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9OSIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiLz4KKzx0aXRsZT5UdXJib0pQRUc6IERhdGEgRmllbGRzIC0gVmFyaWFibGVzPC90aXRsZT4KKzxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgorPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsgc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsgfSk7Cis8L3NjcmlwdD4KKzxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPGxpbmsgaHJlZj0iZG94eWdlbi1leHRyYS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KKzxkaXYgaWQ9InRpdGxlYXJlYSI+Cis8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKyA8dGJvZHk+CisgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KKyAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+CisgICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHCisgICAmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+Mi4wPC9zcGFuPgorICAgPC9kaXY+CisgIDwvdGQ+CisgPC90cj4KKyA8L3Rib2R5PgorPC90YWJsZT4KKzwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CisgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KKyAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgorICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPgorICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgorICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgorICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCisgICAgICAgICAgICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICAgICAgICAgICAgYWx0PSIiLz4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ik1TZWFyY2hGaWVsZCIgdmFsdWU9IlNlYXJjaCIgYWNjZXNza2V5PSJTIgorICAgICAgICAgICAgICAgb25mb2N1cz0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyh0cnVlKSIgCisgICAgICAgICAgICAgICBvbmJsdXI9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkRm9jdXMoZmFsc2UpIiAKKyAgICAgICAgICAgICAgIG9ua2V5dXA9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkQ2hhbmdlKGV2ZW50KSIvPgorICAgICAgICAgIDwvc3Bhbj48c3BhbiBjbGFzcz0icmlnaHQiPgorICAgICAgICAgICAgPGEgaWQ9Ik1TZWFyY2hDbG9zZSIgaHJlZj0iamF2YXNjcmlwdDpzZWFyY2hCb3guQ2xvc2VSZXN1bHRzV2luZG93KCkiPjxpbWcgaWQ9Ik1TZWFyY2hDbG9zZUltZyIgYm9yZGVyPSIwIiBzcmM9InNlYXJjaC9jbG9zZS5wbmciIGFsdD0iIi8+PC9hPgorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJuYXZyb3cyIiBjbGFzcz0idGFiczIiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImNsYXNzZXMuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZSYjMTYwO0luZGV4PC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij48YSBocmVmPSJmdW5jdGlvbnMuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO0ZpZWxkczwvc3Bhbj48L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0ibmF2cm93MyIgY2xhc3M9InRhYnMyIj4KKyAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgorICAgICAgPGxpPjxhIGhyZWY9ImZ1bmN0aW9ucy5odG1sIj48c3Bhbj5BbGw8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImZ1bmN0aW9uc192YXJzLmh0bWwiPjxzcGFuPlZhcmlhYmxlczwvc3Bhbj48L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJjb250ZW50cyI+CismIzE2MDs8dWw+Cis8bGk+Y3VzdG9tRmlsdGVyCis6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiPnRqdHJhbnNmb3JtPC9hPgorPC9saT4KKzxsaT5kYXRhCis6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPnRqdHJhbnNmb3JtPC9hPgorPC9saT4KKzxsaT5kZW5vbQorOiA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+dGpzY2FsaW5nZmFjdG9yPC9hPgorPC9saT4KKzxsaT5oCis6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPnRqcmVnaW9uPC9hPgorPC9saT4KKzxsaT5udW0KKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPnRqc2NhbGluZ2ZhY3RvcjwvYT4KKzwvbGk+Cis8bGk+b3AKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+dGp0cmFuc2Zvcm08L2E+Cis8L2xpPgorPGxpPm9wdGlvbnMKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+dGp0cmFuc2Zvcm08L2E+Cis8L2xpPgorPGxpPnIKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+dGp0cmFuc2Zvcm08L2E+Cis8L2xpPgorPGxpPncKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+dGpyZWdpb248L2E+Cis8L2xpPgorPGxpPngKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+dGpyZWdpb248L2E+Cis8L2xpPgorPGxpPnkKKzogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+dGpyZWdpb248L2E+Cis8L2xpPgorPC91bD4KKzwvZGl2PjwhLS0gY29udGVudHMgLS0+Cis8IS0tIHN0YXJ0IGZvb3RlciBwYXJ0IC0tPgorPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+CitHZW5lcmF0ZWQgYnkgJiMxNjA7PGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KKzxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+Cis8L2E+IDEuOC4zLjEKKzwvc21hbGw+PC9hZGRyZXNzPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWY4NTZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwKQEAgLTAsMCArMSwyNzc1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+Cis8dGl0bGU+VHVyYm9KUEVHOiBUdXJib0pQRUc8L3RpdGxlPgorPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorPGRpdiBpZD0idGl0bGVhcmVhIj4KKzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorIDx0Ym9keT4KKyA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4yLjA8L3NwYW4+CisgICA8L2Rpdj4KKyAgPC90ZD4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KKyAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT4KKyAgICAgICAgPGRpdiBpZD0iTVNlYXJjaEJveCIgY2xhc3M9Ik1TZWFyY2hCb3hJbmFjdGl2ZSI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij4KKyAgICAgICAgICA8aW1nIGlkPSJNU2VhcmNoU2VsZWN0IiBzcmM9InNlYXJjaC9tYWdfc2VsLnBuZyIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgorICAgICAgICAgICAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgICAgICAgICAgIGFsdD0iIi8+CisgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJNU2VhcmNoRmllbGQiIHZhbHVlPSJTZWFyY2giIGFjY2Vzc2tleT0iUyIKKyAgICAgICAgICAgICAgIG9uZm9jdXM9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkRm9jdXModHJ1ZSkiIAorICAgICAgICAgICAgICAgb25ibHVyPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKGZhbHNlKSIgCisgICAgICAgICAgICAgICBvbmtleXVwPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZENoYW5nZShldmVudCkiLz4KKyAgICAgICAgICA8L3NwYW4+PHNwYW4gY2xhc3M9InJpZ2h0Ij4KKyAgICAgICAgICAgIDxhIGlkPSJNU2VhcmNoQ2xvc2UiIGhyZWY9ImphdmFzY3JpcHQ6c2VhcmNoQm94LkNsb3NlUmVzdWx0c1dpbmRvdygpIj48aW1nIGlkPSJNU2VhcmNoQ2xvc2VJbWciIGJvcmRlcj0iMCIgc3JjPSJzZWFyY2gvY2xvc2UucG5nIiBhbHQ9IiIvPjwvYT4KKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9saT4KKyAgICA8L3VsPgorICA8L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KKzxhIGhyZWY9IiNuZXN0ZWQtY2xhc3NlcyI+RGF0YSBTdHJ1Y3R1cmVzPC9hPiAmIzEyNDsKKzxhIGhyZWY9IiNkZWZpbmUtbWVtYmVycyI+TWFjcm9zPC9hPiAmIzEyNDsKKzxhIGhyZWY9IiN0eXBlZGVmLW1lbWJlcnMiPlR5cGVkZWZzPC9hPiAmIzEyNDsKKzxhIGhyZWY9IiNlbnVtLW1lbWJlcnMiPkVudW1lcmF0aW9uczwvYT4gJiMxMjQ7Cis8YSBocmVmPSIjZnVuYy1tZW1iZXJzIj5GdW5jdGlvbnM8L2E+ICYjMTI0OworPGEgaHJlZj0iI3Zhci1tZW1iZXJzIj5WYXJpYWJsZXM8L2E+ICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0iaGVhZGVydGl0bGUiPgorPGRpdiBjbGFzcz0idGl0bGUiPlR1cmJvSlBFRzwvZGl2PiAgPC9kaXY+Cis8L2Rpdj48IS0taGVhZGVyLS0+Cis8ZGl2IGNsYXNzPSJjb250ZW50cyI+CisKKzxwPlR1cmJvSlBFRyBBUEkuICAKKzxhIGhyZWY9IiNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KKzx0YWJsZSBjbGFzcz0ibWVtYmVyZGVjbHMiPgorPHRyIGNsYXNzPSJoZWFkaW5nIj48dGQgY29sc3Bhbj0iMiI+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+PGEgbmFtZT0ibmVzdGVkLWNsYXNzZXMiPjwvYT4KK0RhdGEgU3RydWN0dXJlczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+c3RydWN0ICYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIj50anNjYWxpbmdmYWN0b3I8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5TY2FsaW5nIGZhY3Rvci4gIDxhIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2RldGFpbHMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjoiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdHJ1Y3QgJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5Dcm9wcGluZyByZWdpb24uICA8YSBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2RldGFpbHMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjoiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdHJ1Y3QgJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5Mb3NzbGVzcyB0cmFuc2Zvcm0uICA8YSBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2RldGFpbHMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjoiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8L3RhYmxlPjx0YWJsZSBjbGFzcz0ibWVtYmVyZGVjbHMiPgorPHRyIGNsYXNzPSJoZWFkaW5nIj48dGQgY29sc3Bhbj0iMiI+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+PGEgbmFtZT0iZGVmaW5lLW1lbWJlcnMiPjwvYT4KK01hY3JvczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj5USl9OVU1TQU1QPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBudW1iZXIgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucy4gIDxhIGhyZWY9IiNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIG51bWJlciBvZiBwaXhlbCBmb3JtYXRzLiAgPGEgaHJlZj0iI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMzlmNTdhNmZiMDJkOWNmMzJlN2I2ODkwMDk5YjVhNzEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTM5ZjU3YTZmYjAyZDljZjMyZTdiNjg5MDA5OWI1YTcxIj5USl9OVU1DUzwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EzOWY1N2E2ZmIwMmQ5Y2YzMmU3YjY4OTAwOTliNWE3MSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbnVtYmVyIG9mIEpQRUcgY29sb3JzcGFjZXMuICA8YSBocmVmPSIjZ2EzOWY1N2E2ZmIwMmQ5Y2YzMmU3YjY4OTAwOTliNWE3MSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMzlmNTdhNmZiMDJkOWNmMzJlN2I2ODkwMDk5YjVhNzEiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiPlRKRkxBR19CT1RUT01VUDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgdW5jb21wcmVzc2VkIHNvdXJjZS9kZXN0aW5hdGlvbiBpbWFnZSBpcyBzdG9yZWQgaW4gYm90dG9tLXVwIChXaW5kb3dzLCBPcGVuR0wpIG9yZGVyLCBub3QgdG9wLWRvd24gKFgxMSkgb3JkZXIuICA8YSBocmVmPSIjZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E0ZWU0NTA2YzgxMTc3YTA2Zjc3ZTI1MDRhMjJlZmQyZCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPlRKRkxBR19GQVNUVVBTQU1QTEU8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICA8YSBocmVmPSIjZ2E0ZWU0NTA2YzgxMTc3YTA2Zjc3ZTI1MDRhMjJlZmQyZCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPlRKRkxBR19OT1JFQUxMT0M8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGlzYWJsZSBidWZmZXIgKHJlKWFsbG9jYXRpb24uICA8YSBocmVmPSIjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FhYmNlMjM1ZGI4MGQzZjY5OGIyN2YzNmNiZDQ1M2RhMiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPlRKRkxBR19GQVNURENUPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWFiY2UyMzVkYjgwZDNmNjk4YjI3ZjM2Y2JkNDUzZGEyIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgPGEgaHJlZj0iI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWFiY2UyMzVkYjgwZDNmNjk4YjI3ZjM2Y2JkNDUzZGEyIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWNiMjMzY2ZkNzIyZDY2ZDFjY2JmNDhhN2RlODFmMGUwIj5USkZMQUdfQUNDVVJBVEVEQ1Q8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICA8YSBocmVmPSIjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E1MTljZmE0ZWY2YzE4ZDllNWI0NTVmZGY1OTMwNmEzYSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNTE5Y2ZhNGVmNmMxOGQ5ZTViNDU1ZmRmNTkzMDZhM2EiPlRKRkxBR19TVE9QT05XQVJOSU5HPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTUxOWNmYTRlZjZjMThkOWU1YjQ1NWZkZjU5MzA2YTNhIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIHRoZSBjdXJyZW50IGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24vdHJhbnNmb3JtIG9wZXJhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBjb2RlYyB0aHJvd3MgYSB3YXJuaW5nIChub24tZmF0YWwgZXJyb3IpLiAgPGEgaHJlZj0iI2dhNTE5Y2ZhNGVmNmMxOGQ5ZTViNDU1ZmRmNTkzMDZhM2EiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTUxOWNmYTRlZjZjMThkOWU1YjQ1NWZkZjU5MzA2YTNhIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNDNiNDI2NzUwYjQ2MTkwYTI1ZDM0YTY3ZWY3NmRmMWIiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTQzYjQyNjc1MGI0NjE5MGEyNWQzNGE2N2VmNzZkZjFiIj5USkZMQUdfUFJPR1JFU1NJVkU8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNDNiNDI2NzUwYjQ2MTkwYTI1ZDM0YTY3ZWY3NmRmMWIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VXNlIHByb2dyZXNzaXZlIGVudHJvcHkgY29kaW5nIGluIEpQRUcgaW1hZ2VzIGdlbmVyYXRlZCBieSB0aGUgY29tcHJlc3Npb24gYW5kIHRyYW5zZm9ybSBmdW5jdGlvbnMuICA8YSBocmVmPSIjZ2E0M2I0MjY3NTBiNDYxOTBhMjVkMzRhNjdlZjc2ZGYxYiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNDNiNDI2NzUwYjQ2MTkwYTI1ZDM0YTY3ZWY3NmRmMWIiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E3OWJkZTFiNGEzZTIzNTFlMDA4ODdlNDc3ODFiOTY2ZSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzliZGUxYjRhM2UyMzUxZTAwODg3ZTQ3NzgxYjk2NmUiPlRKX05VTUVSUjwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E3OWJkZTFiNGEzZTIzNTFlMDA4ODdlNDc3ODFiOTY2ZSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbnVtYmVyIG9mIGVycm9yIGNvZGVzLiAgPGEgaHJlZj0iI2dhNzliZGUxYjRhM2UyMzUxZTAwODg3ZTQ3NzgxYjk2NmUiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTc5YmRlMWI0YTNlMjM1MWUwMDg4N2U0Nzc4MWI5NjZlIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMGY2ZGJkMThhZGYzOGI3ZDQ2YWM1NDdmMGY0ZDU2MmMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBmNmRiZDE4YWRmMzhiN2Q0NmFjNTQ3ZjBmNGQ1NjJjIj5USl9OVU1YT1A8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMGY2ZGJkMThhZGYzOGI3ZDQ2YWM1NDdmMGY0ZDU2MmMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIG51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4gIDxhIGhyZWY9IiNnYTBmNmRiZDE4YWRmMzhiN2Q0NmFjNTQ3ZjBmNGQ1NjJjIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2EwZjZkYmQxOGFkZjM4YjdkNDZhYzU0N2YwZjRkNTYyYyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCI+VEpYT1BUX1BFUkZFQ1Q8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhpcyBvcHRpb24gd2lsbCBjYXVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QgcGVyZmVjdC4gIDxhIGhyZWY9IiNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTMxOTgyNmI3ZWIxNTgzYzA1OTViYmU3Yjk1NDI4NzA5Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzMTk4MjZiN2ViMTU4M2MwNTk1YmJlN2I5NTQyODcwOSI+VEpYT1BUX1RSSU08L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMzE5ODI2YjdlYjE1ODNjMDU5NWJiZTdiOTU0Mjg3MDkiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhpcyBvcHRpb24gd2lsbCBjYXVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiB0byBkaXNjYXJkIGFueSBwYXJ0aWFsIE1DVSBibG9ja3MgdGhhdCBjYW5ub3QgYmUgdHJhbnNmb3JtZWQuICA8YSBocmVmPSIjZ2EzMTk4MjZiN2ViMTU4M2MwNTk1YmJlN2I5NTQyODcwOSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMzE5ODI2YjdlYjE1ODNjMDU5NWJiZTdiOTU0Mjg3MDkiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPlRKWE9QVF9DUk9QPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTljNzcxYTc1N2ZjMTI5NGFkZDYxMTkwNmI4OWFiMmQyIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGxvc3NsZXNzIGNyb3BwaW5nLiAgPGEgaHJlZj0iI2dhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTljNzcxYTc1N2ZjMTI5NGFkZDYxMTkwNmI4OWFiMmQyIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhM2FjZWU3YjQ4YWRlMWI5OWU1NTg4NzM2MDA3YzI1ODkiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTNhY2VlN2I0OGFkZTFiOTllNTU4ODczNjAwN2MyNTg5Ij5USlhPUFRfR1JBWTwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgdGhlIGNvbG9yIGRhdGEgaW4gdGhlIGlucHV0IGltYWdlIGFuZCBwcm9kdWNlIGEgZ3JheXNjYWxlIG91dHB1dCBpbWFnZS4gIDxhIGhyZWY9IiNnYTNhY2VlN2I0OGFkZTFiOTllNTU4ODczNjAwN2MyNTg5Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmYmY5OTJiYmY2ZTAwNjcwNTg4NjMzMzcwM2ZmYWIzMSI+VEpYT1BUX05PT1VUUFVUPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiBmcm9tIG91dHB1dHRpbmcgYSBKUEVHIGltYWdlIGZvciB0aGlzIHBhcnRpY3VsYXIgdHJhbnNmb3JtICh0aGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBjdXN0b20gZmlsdGVyIHRvIGNhcHR1cmUgdGhlIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMgd2l0aG91dCB0cmFuc2NvZGluZyB0aGVtLikgIDxhIGhyZWY9IiNnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FmYmY5OTJiYmY2ZTAwNjcwNTg4NjMzMzcwM2ZmYWIzMSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWQyMzcxYzgwNjc0NTg0ZWNjMWE3ZDc1ZTU2NGNmMDI2Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkMjM3MWM4MDY3NDU4NGVjYzFhN2Q3NWU1NjRjZjAyNiI+VEpYT1BUX1BST0dSRVNTSVZFPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWQyMzcxYzgwNjc0NTg0ZWNjMWE3ZDc1ZTU2NGNmMDI2Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHByb2dyZXNzaXZlIGVudHJvcHkgY29kaW5nIGluIHRoZSBvdXRwdXQgaW1hZ2UgZ2VuZXJhdGVkIGJ5IHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0uICA8YSBocmVmPSIjZ2FkMjM3MWM4MDY3NDU4NGVjYzFhN2Q3NWU1NjRjZjAyNiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZDIzNzFjODA2NzQ1ODRlY2MxYTdkNzVlNTY0Y2YwMjYiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2ExNTNiNDY4Y2ZiOTA1ZDBkZTYxNzA2YzgzODk4NmZlOCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMTUzYjQ2OGNmYjkwNWQwZGU2MTcwNmM4Mzg5ODZmZTgiPlRKWE9QVF9DT1BZTk9ORTwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2ExNTNiNDY4Y2ZiOTA1ZDBkZTYxNzA2YzgzODk4NmZlOCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGlzIG9wdGlvbiB3aWxsIHByZXZlbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTljYjhhYmY0Y2M5MTg4MWUwNGEwMzI5YjIyNzBiZTI1IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4gZnJvbSBjb3B5aW5nIGFueSBleHRyYSBtYXJrZXJzIChpbmNsdWRpbmcgRVhJRiBhbmQgSUNDIHByb2ZpbGUgZGF0YSkgZnJvbSB0aGUgc291cmNlIGltYWdlIHRvIHRoZSBvdXRwdXQgaW1hZ2UuICA8YSBocmVmPSIjZ2ExNTNiNDY4Y2ZiOTA1ZDBkZTYxNzA2YzgzODk4NmZlOCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMTUzYjQ2OGNmYjkwNWQwZGU2MTcwNmM4Mzg5ODZmZTgiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiPlRKUEFEPC9hPih3aWR0aCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5QYWQgdGhlIGdpdmVuIHdpZHRoIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeS4gIDxhIGhyZWY9IiNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTg0ODc4YmI2NTQwNDIwNDc0M2FhMThjYWMwMjc4MWRmIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+VEpTQ0FMRUQ8L2E+KGRpbWVuc2lvbiwgc2NhbGluZ0ZhY3Rvcik8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5Db21wdXRlIHRoZSBzY2FsZWQgdmFsdWUgb2YgPGNvZGU+ZGltZW5zaW9uPC9jb2RlPiB1c2luZyB0aGUgZ2l2ZW4gc2NhbGluZyBmYWN0b3IuICA8YSBocmVmPSIjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8L3RhYmxlPjx0YWJsZSBjbGFzcz0ibWVtYmVyZGVjbHMiPgorPHRyIGNsYXNzPSJoZWFkaW5nIj48dGQgY29sc3Bhbj0iMiI+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+PGEgbmFtZT0idHlwZWRlZi1tZW1iZXJzIj48L2E+CitUeXBlZGVmczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnR5cGVkZWYgc3RydWN0IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FhMjlmMzE4OWM0MWJlMTJlYzVkZWU3Y2FlYzMxOGEzMSI+dGp0cmFuc2Zvcm08L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TG9zc2xlc3MgdHJhbnNmb3JtLiAgPGEgaHJlZj0iI2dhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnR5cGVkZWYgdm9pZCAqJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VHVyYm9KUEVHIGluc3RhbmNlIGhhbmRsZS4gIDxhIGhyZWY9IiNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzwvdGFibGU+PHRhYmxlIGNsYXNzPSJtZW1iZXJkZWNscyI+Cis8dHIgY2xhc3M9ImhlYWRpbmciPjx0ZCBjb2xzcGFuPSIyIj48aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj48YSBuYW1lPSJlbnVtLW1lbWJlcnMiPjwvYT4KK0VudW1lcmF0aW9uczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+VEpTQU1QPC9hPiB7IDxici8+CismIzE2MDsmIzE2MDs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YWZiOGRhNGY0NDE5NzgzN2JkZWMwYTRmNTkzZGFjYWUzIj5USlNBTVBfNDQ0PC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTEzNjEzMDkwMmNjNTc4ZjExZjMyNDI5YjU5MzY4NDA0Ij5USlNBTVBfNDIyPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3Ij5USlNBTVBfNDIwPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTNmMWM5NTA0ODQyZGRjN2E0OGQwZjY5MDc1NGI2MjQ4Ij5USlNBTVBfR1JBWTwvYT4sIAorPGJyLz4KKyYjMTYwOyYjMTYwOzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhY2NmNzQwZTZmM2FhNmJhMjBiYTkyMmNhZDEzY2I5NzQiPlRKU0FNUF80NDA8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMjhlYzYyNTc1ZTVlYTI5NWMzZmRlMzAwMWRjNjI4ZTIiPlRKU0FNUF80MTE8L2E+Cis8YnIvPgorIH08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5DaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zLiAgPGEgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+ZW51bSAmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj5USlBGPC9hPiB7IDxici8+CismIzE2MDsmIzE2MDs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTdjZTkzMjMwYmZmNDQ5NTE4Y2UzODdjMTdlNmVkMzdjIj5USlBGX1JHQjwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFiMTA2MjQ0MzdmYjhlZjQ5NWEwYjE1M2U2NTc0OTgzOSI+VEpQRl9CR1I8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODM5NzNiZWJiN2UyZGM2ZmE4YmFlODlmZjNmNDJlMDEiPlRKUEZfUkdCWDwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWEyYTFmYmY1NjljYTc5ODk3ZWFlODg2ZTMzNzZjYTRjOCI+VEpQRl9CR1JYPC9hPiwgCis8YnIvPgorJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFmNjYwM2IyNzE0N2RlNDdlMjEyZTc1ZGFjMDI3YjJhZiI+VEpQRl9YQkdSPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWRhZTk5NjkwNWVmY2ZhM2I0MmEwYmIzYmVhN2Y5ZDg0Ij5USlBGX1hSR0I8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhNTQzMWI1NGIwMTUzMzc3MDVmMTMxMTgwNzM3MTFhMWEiPlRKUEZfR1JBWTwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4OGQyZTg4ZmFiNjdmNjUwM2NmOTcyZTE0ODUxY2MxMiI+VEpQRl9SR0JBPC9hPiwgCis8YnIvPgorJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFjMDM3ZmYxODQ1Y2Y5Yjc0YmI4MWEzNjU5YzJiOWZiNCI+VEpQRl9CR1JBPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTFiYTFhN2YxNjMxZGJlYWE0OWEwYTg1ZmM0YTQwMDgxIj5USlBGX0FCR1I8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZThmODQ2ZWQ5ZDlkZTk5YjZlMWRmZTQ0ODg0ODc2NWMiPlRKUEZfQVJHQjwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3ZjUxMDBlYzQ0YzkxOTk0ZTI0M2YxY2Y1NTU1M2Y4YiI+VEpQRl9DTVlLPC9hPiwgCis8YnIvPgorJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4NGMxYTZjZWFkNzk1Mjk5OGUyZmI4OTU4NDRhMjFlZCI+VEpQRl9VTktOT1dOPC9hPgorPGJyLz4KKyB9PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UGl4ZWwgZm9ybWF0cy4gIDxhIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjAiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMCI+VEpDUzwvYT4geyA8YnIvPgorJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE2NzdjYjdjY2I4NWM0MDM4YWM0MTk2NGEyZTA5ZTU1NSI+VEpDU19SR0I8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjBhNzM4OWI4ZjY1YmIzODdmZmVkY2UzZWZkMGQ3OGVjNzUiPlRKQ1NfWUNiQ3I8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjBhYjNlN2Q2YTg3ZjY5NWU0NWI4MWMxYjUyNjJiNWE1MGEiPlRKQ1NfR1JBWTwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE2YzhiNjM2MTUyYWM4MTk1Yjg2OTU4N2RiMzE1ZWU1MyI+VEpDU19DTVlLPC9hPiwgCis8YnIvPgorJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE1MzgzOWUwZmU4NjdiNzZiNThkMTZiMGExYTdjNTk4ZSI+VEpDU19ZQ0NLPC9hPgorPGJyLz4KKyB9PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjAiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+SlBFRyBjb2xvcnNwYWNlcy4gIDxhIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjAiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTRmODNhZDMzNjhlMGUyOWQxOTU3YmUwZWZhN2MzNzIwIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZmJjMTdjZmE1N2QwZDVkMTFmZWEzNWFjMDI1OTUwZmUiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZSI+VEpFUlI8L2E+IHsgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZWEzNDJkZDZlMmFlZGI0N2JiMjU3YjRlNzU2ODMyOWI1OSI+VEpFUlJfV0FSTklORzwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZWFmYzljY2VlYWRhMTMxMjJiMDllNDg1MWUzNzg4MDM5YSI+VEpFUlJfRkFUQUw8L2E+CisgfTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWZiYzE3Y2ZhNTdkMGQ1ZDExZmVhMzVhYzAyNTk1MGZlIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkVycm9yIGNvZGVzLiAgPGEgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZmJjMTdjZmE1N2QwZDVkMTFmZWEzNWFjMDI1OTUwZmUiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+ZW51bSAmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij5USlhPUDwvYT4geyA8YnIvPgorJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhZDg4YzAzNjZjZDNmN2QwZWFjOWQ3YTNmYTFjMmMyNyI+VEpYT1BfTk9ORTwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhMGRmNjk3NzZjYWEzMGYwZmEyOGUyNjMzMmQzMTFjZSI+VEpYT1BfSEZMSVA8L2E+LCAKKzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzI0ZWRkZmJlYzUzYjdlNjkxZjYxZTU2OTI5ZDBkNWQiPlRKWE9QX1ZGTElQPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMxMDYwYWVkMTk5Zjg4NmFmZGQ0MTdmODA0OTljMzJkIj5USlhPUF9UUkFOU1BPU0U8L2E+LCAKKzxici8+CismIzE2MDsmIzE2MDs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YWYzYjE0ZDQ4OGFlYTZlY2U5ZTViM2RmNzNhNzRkNmE0Ij5USlhPUF9UUkFOU1ZFUlNFPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTQzYjJiYmIyM2JjNGJkNTQ4NDIyZDQzZmJlOWFmMTI4Ij5USlhPUF9ST1Q5MDwvYT4sIAorPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmExNDA5NTJlYjhkZDAzMDBhY2NmY2MyMjcyNmQ2OTY5MiI+VEpYT1BfUk9UMTgwPC9hPiwgCis8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMwNjRlZTVkZmI3ZjAzMmRmMzMyODE4NTg3NTY3YTA4Ij5USlhPUF9ST1QyNzA8L2E+Cis8YnIvPgorIH08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UcmFuc2Zvcm0gb3BlcmF0aW9ucyBmb3IgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTljYjhhYmY0Y2M5MTg4MWUwNGEwMzI5YjIyNzBiZTI1IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4gIDxhIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjYiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT48dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9ImZ1bmMtbWVtYmVycyI+PC9hPgorRnVuY3Rpb25zPC9oMj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E5ZDYzYTA1ZmM2ZDgxM2Y0YWFlMDYxMDcwNDFhMzdlOCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZDYzYTA1ZmM2ZDgxM2Y0YWFlMDYxMDcwNDFhMzdlOCI+dGpJbml0Q29tcHJlc3M8L2E+ICh2b2lkKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTlkNjNhMDVmYzZkODEzZjRhYWUwNjEwNzA0MWEzN2U4Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhOWQ2M2EwNWZjNmQ4MTNmNGFhZTA2MTA3MDQxYTM3ZTgiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTlkNjNhMDVmYzZkODEzZjRhYWUwNjEwNzA0MWEzN2U4Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZmJkY2UwMTEyZmQ3OGZkMzhlZmFlODQxNDQzYTliY2YiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiZGNlMDExMmZkNzhmZDM4ZWZhZTg0MTQ0M2E5YmNmIj50akNvbXByZXNzMjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjQnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCB1bnNpZ25lZCBjaGFyICoqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyAqanBlZ1NpemUsIGludCBqcGVnU3Vic2FtcCwgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZmJkY2UwMTEyZmQ3OGZkMzhlZmFlODQxNDQzYTliY2YiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q29tcHJlc3MgYW4gUkdCLCBncmF5c2NhbGUsIG9yIENNWUsgaW1hZ2UgaW50byBhIEpQRUcgaW1hZ2UuICA8YSBocmVmPSIjZ2FmYmRjZTAxMTJmZDc4ZmQzOGVmYWU4NDE0NDNhOWJjZiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZmJkY2UwMTEyZmQ3OGZkMzhlZmFlODQxNDQzYTliY2YiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E3NjIyYTQ1OWI3OWFhMTAwN2UwMDViNTg3ODNmODc1YiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzYyMmE0NTliNzlhYTEwMDdlMDA1YjU4NzgzZjg3NWIiPnRqQ29tcHJlc3NGcm9tWVVWPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3aWR0aCwgaW50IHBhZCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXAsIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmLCB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNzYyMmE0NTliNzlhYTEwMDdlMDA1YjU4NzgzZjg3NWIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q29tcHJlc3MgYSBZVVYgcGxhbmFyIGltYWdlIGludG8gYSBKUEVHIGltYWdlLiAgPGEgaHJlZj0iI2dhNzYyMmE0NTliNzlhYTEwMDdlMDA1YjU4NzgzZjg3NWIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTc2MjJhNDU5Yjc5YWExMDA3ZTAwNWI1ODc4M2Y4NzViIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMjllYzVkZmJkMmQ4NGI4NzI0ZTk1MWQ2ZmEwZDVkOWUiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTI5ZWM1ZGZiZDJkODRiODcyNGU5NTFkNmZhMGQ1ZDllIj50akNvbXByZXNzRnJvbVlVVlBsYW5lczwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqKnNyY1BsYW5lcywgaW50IHdpZHRoLCBjb25zdCBpbnQgKnN0cmlkZXMsIGludCBoZWlnaHQsIGludCBzdWJzYW1wLCB1bnNpZ25lZCBjaGFyICoqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyAqanBlZ1NpemUsIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTI5ZWM1ZGZiZDJkODRiODcyNGU5NTFkNmZhMGQ1ZDllIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNvbXByZXNzIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgaW50byBhIEpQRUcgaW1hZ2UuICA8YSBocmVmPSIjZ2EyOWVjNWRmYmQyZDg0Yjg3MjRlOTUxZDZmYTBkNWQ5ZSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMjllYzVkZmJkMmQ4NGI4NzI0ZTk1MWQ2ZmEwZDVkOWUiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E2N2FjMTJmZWU3OTA3MzI0MmNiMjE2ZTA3YzlmMWY5MCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIHVuc2lnbmVkIGxvbmcmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY3YWMxMmZlZTc5MDczMjQyY2IyMTZlMDdjOWYxZjkwIj50akJ1ZlNpemU8L2E+IChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBqcGVnU3Vic2FtcCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E2N2FjMTJmZWU3OTA3MzI0MmNiMjE2ZTA3YzlmMWY5MCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRyBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgPGEgaHJlZj0iI2dhNjdhYzEyZmVlNzkwNzMyNDJjYjIxNmUwN2M5ZjFmOTAiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTY3YWMxMmZlZTc5MDczMjQyY2IyMTZlMDdjOWYxZjkwIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMmJlMmI5OTY5ZDRkZjllY2NlOWIwNWRlZWQyNzMxOTQiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB1bnNpZ25lZCBsb25nJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyYmUyYjk5NjlkNGRmOWVjY2U5YjA1ZGVlZDI3MzE5NCI+dGpCdWZTaXplWVVWMjwvYT4gKGludCB3aWR0aCwgaW50IHBhZCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXApPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMmJlMmI5OTY5ZDRkZjllY2NlOWIwNWRlZWQyNzMxOTQiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICA8YSBocmVmPSIjZ2EyYmUyYjk5NjlkNGRmOWVjY2U5YjA1ZGVlZDI3MzE5NCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMmJlMmI5OTY5ZDRkZjllY2NlOWIwNWRlZWQyNzMxOTQiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FiNGFiN2IyNGY2ZTc5N2Q3OWFiYWFhNjcwMzczOTYxZCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIHVuc2lnbmVkIGxvbmcmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWI0YWI3YjI0ZjZlNzk3ZDc5YWJhYWE2NzAzNzM5NjFkIj50alBsYW5lU2l6ZVlVVjwvYT4gKGludCBjb21wb25lbnRJRCwgaW50IHdpZHRoLCBpbnQgc3RyaWRlLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FiNGFiN2IyNGY2ZTc5N2Q3OWFiYWFhNjcwMzczOTYxZCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgPGEgaHJlZj0iI2dhYjRhYjdiMjRmNmU3OTdkNzlhYmFhYTY3MDM3Mzk2MWQiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWI0YWI3YjI0ZjZlNzk3ZDc5YWJhYWE2NzAzNzM5NjFkIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNjNmYjY2YmIxZTM2Yzc0MDA4YzQ2MzQzNjBiZWNiYjEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTYzZmI2NmJiMWUzNmM3NDAwOGM0NjM0MzYwYmVjYmIxIj50alBsYW5lV2lkdGg8L2E+IChpbnQgY29tcG9uZW50SUQsIGludCB3aWR0aCwgaW50IHN1YnNhbXApPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNjNmYjY2YmIxZTM2Yzc0MDA4YzQ2MzQzNjBiZWNiYjEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIHBsYW5lIHdpZHRoIG9mIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICA8YSBocmVmPSIjZ2E2M2ZiNjZiYjFlMzZjNzQwMDhjNDYzNDM2MGJlY2JiMSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNjNmYjY2YmIxZTM2Yzc0MDA4YzQ2MzQzNjBiZWNiYjEiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2ExYTIwOTY5NmM2YTgwNzQ4ZjIwZTEzNGIzYzY0Nzg5ZiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWEyMDk2OTZjNmE4MDc0OGYyMGUxMzRiM2M2NDc4OWYiPnRqUGxhbmVIZWlnaHQ8L2E+IChpbnQgY29tcG9uZW50SUQsIGludCBoZWlnaHQsIGludCBzdWJzYW1wKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTFhMjA5Njk2YzZhODA3NDhmMjBlMTM0YjNjNjQ3ODlmIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBwbGFuZSBoZWlnaHQgb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIDxhIGhyZWY9IiNnYTFhMjA5Njk2YzZhODA3NDhmMjBlMTM0YjNjNjQ3ODlmIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2ExYTIwOTY5NmM2YTgwNzQ4ZjIwZTEzNGIzYzY0Nzg5ZiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWM1MTliOTIyY2RmNDQ2ZTk3ZDBjZGNiYTUxMzYzNmJmIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjNTE5YjkyMmNkZjQ0NmU5N2QwY2RjYmE1MTM2MzZiZiI+dGpFbmNvZGVZVVYzPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHBhZCwgaW50IHN1YnNhbXAsIGludCBmbGFncyk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FjNTE5YjkyMmNkZjQ0NmU5N2QwY2RjYmE1MTM2MzZiZiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5FbmNvZGUgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgWVVWIHBsYW5hciBpbWFnZS4gIDxhIGhyZWY9IiNnYWM1MTliOTIyY2RmNDQ2ZTk3ZDBjZGNiYTUxMzYzNmJmIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FjNTE5YjkyMmNkZjQ0NmU5N2QwY2RjYmE1MTM2MzZiZiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWUyZDA0YzcyNDU3ZmU3ZjRkNjBjZjc4YWIxYjFmZWIxIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlMmQwNGM3MjQ1N2ZlN2Y0ZDYwY2Y3OGFiMWIxZmViMSI+dGpFbmNvZGVZVVZQbGFuZXM8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgdW5zaWduZWQgY2hhciAqKmRzdFBsYW5lcywgaW50ICpzdHJpZGVzLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWUyZDA0YzcyNDU3ZmU3ZjRkNjBjZjc4YWIxYjFmZWIxIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkVuY29kZSBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlIGludG8gc2VwYXJhdGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcy4gIDxhIGhyZWY9IiNnYWUyZDA0YzcyNDU3ZmU3ZjRkNjBjZjc4YWIxYjFmZWIxIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FlMmQwNGM3MjQ1N2ZlN2Y0ZDYwY2Y3OGFiMWIxZmViMSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTUyMzAwZWFjM2YzZDllZjRiYWIzMDNiYzI0NGY2MmQzIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUyMzAwZWFjM2YzZDllZjRiYWIzMDNiYzI0NGY2MmQzIj50akluaXREZWNvbXByZXNzPC9hPiAodm9pZCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E1MjMwMGVhYzNmM2Q5ZWY0YmFiMzAzYmMyNDRmNjJkMyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhNTIzMDBlYWMzZjNkOWVmNGJhYjMwM2JjMjQ0ZjYyZDMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTUyMzAwZWFjM2YzZDllZjRiYWIzMDNiYzI0NGY2MmQzIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMDU5NTY4MTA5NmJiYTcxOTljYzZmMzUzM2NiMjVmNzciPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTA1OTU2ODEwOTZiYmE3MTk5Y2M2ZjM1MzNjYjI1Zjc3Ij50akRlY29tcHJlc3NIZWFkZXIzPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwgaW50ICpqcGVnU3Vic2FtcCwgaW50ICpqcGVnQ29sb3JzcGFjZSk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EwNTk1NjgxMDk2YmJhNzE5OWNjNmYzNTMzY2IyNWY3NyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5SZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIEpQRUcgaW1hZ2Ugd2l0aG91dCBkZWNvbXByZXNzaW5nIGl0LiAgPGEgaHJlZj0iI2dhMDU5NTY4MTA5NmJiYTcxOTljYzZmMzUzM2NiMjVmNzciPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTA1OTU2ODEwOTZiYmE3MTk5Y2M2ZjM1MzNjYjI1Zjc3Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhYzM4NTQ0NzYwMDZiMTA3ODdiZDEyOGY3ZWRlNDgwNTciPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIj50anNjYWxpbmdmYWN0b3I8L2E+IComIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWMzODU0NDc2MDA2YjEwNzg3YmQxMjhmN2VkZTQ4MDU3Ij50akdldFNjYWxpbmdGYWN0b3JzPC9hPiAoaW50ICpudW1zY2FsaW5nZmFjdG9ycyk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FjMzg1NDQ3NjAwNmIxMDc4N2JkMTI4ZjdlZGU0ODA1NyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5SZXR1cm5zIGEgbGlzdCBvZiBmcmFjdGlvbmFsIHNjYWxpbmcgZmFjdG9ycyB0aGF0IHRoZSBKUEVHIGRlY29tcHJlc3NvciBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIFR1cmJvSlBFRyBzdXBwb3J0cy4gIDxhIGhyZWY9IiNnYWMzODU0NDc2MDA2YjEwNzg3YmQxMjhmN2VkZTQ4MDU3Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FjMzg1NDQ3NjAwNmIxMDc4N2JkMTI4ZjdlZGU0ODA1NyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWU5ZWNjZWY4YjY4MmE0OGY0M2E5MTE3YzIzMWVkMDEzIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlOWVjY2VmOGI2ODJhNDhmNDNhOTExN2MyMzFlZDAxMyI+dGpEZWNvbXByZXNzMjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZTllY2NlZjhiNjgyYTQ4ZjQzYTkxMTdjMjMxZWQwMTMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVjb21wcmVzcyBhIEpQRUcgaW1hZ2UgdG8gYW4gUkdCLCBncmF5c2NhbGUsIG9yIENNWUsgaW1hZ2UuICA8YSBocmVmPSIjZ2FlOWVjY2VmOGI2ODJhNDhmNDNhOTExN2MyMzFlZDAxMyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZTllY2NlZjhiNjgyYTQ4ZjQzYTkxMTdjMjMxZWQwMTMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2EwNGQxZTgzOWZmOWEwODYwZGQxNDc1Y2ZmNzhkMzM2NCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMDRkMWU4MzlmZjlhMDg2MGRkMTQ3NWNmZjc4ZDMzNjQiPnRqRGVjb21wcmVzc1RvWVVWMjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgd2lkdGgsIGludCBwYWQsIGludCBoZWlnaHQsIGludCBmbGFncyk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EwNGQxZTgzOWZmOWEwODYwZGQxNDc1Y2ZmNzhkMzM2NCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5EZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhIFlVViBwbGFuYXIgaW1hZ2UuICA8YSBocmVmPSIjZ2EwNGQxZTgzOWZmOWEwODYwZGQxNDc1Y2ZmNzhkMzM2NCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMDRkMWU4MzlmZjlhMDg2MGRkMTQ3NWNmZjc4ZDMzNjQiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FhNTlmOTAxYTUyNThhZGE1YmQwMTg1YWQ1OTM2ODU0MCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYTU5ZjkwMWE1MjU4YWRhNWJkMDE4NWFkNTkzNjg1NDAiPnRqRGVjb21wcmVzc1RvWVVWUGxhbmVzPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCB1bnNpZ25lZCBjaGFyICoqZHN0UGxhbmVzLCBpbnQgd2lkdGgsIGludCAqc3RyaWRlcywgaW50IGhlaWdodCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWE1OWY5MDFhNTI1OGFkYTViZDAxODVhZDU5MzY4NTQwIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkRlY29tcHJlc3MgYSBKUEVHIGltYWdlIGludG8gc2VwYXJhdGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcy4gIDxhIGhyZWY9IiNnYWE1OWY5MDFhNTI1OGFkYTViZDAxODVhZDU5MzY4NTQwIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FhNTlmOTAxYTUyNThhZGE1YmQwMTg1YWQ1OTM2ODU0MCI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTcwYWJiZjM4Zjc3YTI2ZmQ2ZGE4ODEzYmVmOTZmNjk1Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MGFiYmYzOGY3N2EyNmZkNmRhODgxM2JlZjk2ZjY5NSI+dGpEZWNvZGVZVVY8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgaW50IHBhZCwgaW50IHN1YnNhbXAsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTcwYWJiZjM4Zjc3YTI2ZmQ2ZGE4ODEzYmVmOTZmNjk1Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkRlY29kZSBhIFlVViBwbGFuYXIgaW1hZ2UgaW50byBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlLiAgPGEgaHJlZj0iI2dhNzBhYmJmMzhmNzdhMjZmZDZkYTg4MTNiZWY5NmY2OTUiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTcwYWJiZjM4Zjc3YTI2ZmQ2ZGE4ODEzYmVmOTZmNjk1Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMTBlODM3YzA3ZmE5ZDI1NzcwNTY1YjIzN2QzODk4ZDkiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTEwZTgzN2MwN2ZhOWQyNTc3MDU2NWIyMzdkMzg5OGQ5Ij50akRlY29kZVlVVlBsYW5lczwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqKnNyY1BsYW5lcywgY29uc3QgaW50ICpzdHJpZGVzLCBpbnQgc3Vic2FtcCwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMTBlODM3YzA3ZmE5ZDI1NzcwNTY1YjIzN2QzODk4ZDkiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVjb2RlIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgaW50byBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlLiAgPGEgaHJlZj0iI2dhMTBlODM3YzA3ZmE5ZDI1NzcwNTY1YjIzN2QzODk4ZDkiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTEwZTgzN2MwN2ZhOWQyNTc3MDU2NWIyMzdkMzg5OGQ5Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhOTI4YmVmZjZhYzI0OGNlYWRmMDEwODlmYzZiNDE5NTciPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOTI4YmVmZjZhYzI0OGNlYWRmMDEwODlmYzZiNDE5NTciPnRqSW5pdFRyYW5zZm9ybTwvYT4gKHZvaWQpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhOTI4YmVmZjZhYzI0OGNlYWRmMDEwODlmYzZiNDE5NTciPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q3JlYXRlIGEgbmV3IFR1cmJvSlBFRyB0cmFuc2Zvcm1lciBpbnN0YW5jZS4gIDxhIGhyZWY9IiNnYTkyOGJlZmY2YWMyNDhjZWFkZjAxMDg5ZmM2YjQxOTU3Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E5MjhiZWZmNmFjMjQ4Y2VhZGYwMTA4OWZjNmI0MTk1NyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTljYjhhYmY0Y2M5MTg4MWUwNGEwMzI5YjIyNzBiZTI1Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNSI+dGpUcmFuc2Zvcm08L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCBuLCB1bnNpZ25lZCBjaGFyICoqZHN0QnVmcywgdW5zaWduZWQgbG9uZyAqZHN0U2l6ZXMsIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+ICp0cmFuc2Zvcm1zLCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiAgPGEgaHJlZj0iI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTljYjhhYmY0Y2M5MTg4MWUwNGEwMzI5YjIyNzBiZTI1Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNzVmMzU1ZmEyNzIyNWJhMWE0ZWUzOTJjODUyMzk0ZDIiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1ZjM1NWZhMjcyMjViYTFhNGVlMzkyYzg1MjM5NGQyIj50akRlc3Ryb3k8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNzVmMzU1ZmEyNzIyNWJhMWE0ZWUzOTJjODUyMzk0ZDIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVzdHJveSBhIFR1cmJvSlBFRyBjb21wcmVzc29yLCBkZWNvbXByZXNzb3IsIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhNzVmMzU1ZmEyNzIyNWJhMWE0ZWUzOTJjODUyMzk0ZDIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTc1ZjM1NWZhMjcyMjViYTFhNGVlMzkyYzg1MjM5NGQyIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZWM2MjdkZDRjNWYzMGI3YTc3NWE3YWVhM2JlYzVkODMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB1bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWVjNjI3ZGQ0YzVmMzBiN2E3NzVhN2FlYTNiZWM1ZDgzIj50akFsbG9jPC9hPiAoaW50IGJ5dGVzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWVjNjI3ZGQ0YzVmMzBiN2E3NzVhN2FlYTNiZWM1ZDgzIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiAgPGEgaHJlZj0iI2dhZWM2MjdkZDRjNWYzMGI3YTc3NWE3YWVhM2JlYzVkODMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWVjNjI3ZGQ0YzVmMzBiN2E3NzVhN2FlYTNiZWM1ZDgzIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZmZiZDgzYzM3NWU3OWY1ZGI0YjVjNWQ4YWQ0NDY2ZTciPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB1bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZmYmQ4M2MzNzVlNzlmNWRiNGI1YzVkOGFkNDQ2NmU3Ij50akxvYWRJbWFnZTwvYT4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgKndpZHRoLCBpbnQgYWxpZ24sIGludCAqaGVpZ2h0LCBpbnQgKnBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZmZiZDgzYzM3NWU3OWY1ZGI0YjVjNWQ4YWQ0NDY2ZTciPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TG9hZCBhbiB1bmNvbXByZXNzZWQgaW1hZ2UgZnJvbSBkaXNrIGludG8gbWVtb3J5LiAgPGEgaHJlZj0iI2dhZmZiZDgzYzM3NWU3OWY1ZGI0YjVjNWQ4YWQ0NDY2ZTciPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWZmYmQ4M2MzNzVlNzlmNWRiNGI1YzVkOGFkNDQ2NmU3Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNmY0NDViMjJkODkzM2FlNDgxNWIzMzcwYTUzOGQ4NzkiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTZmNDQ1YjIyZDg5MzNhZTQ4MTViMzM3MGE1MzhkODc5Ij50alNhdmVJbWFnZTwvYT4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGludCBmbGFncyk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E2ZjQ0NWIyMmQ4OTMzYWU0ODE1YjMzNzBhNTM4ZDg3OSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5TYXZlIGFuIHVuY29tcHJlc3NlZCBpbWFnZSBmcm9tIG1lbW9yeSB0byBkaXNrLiAgPGEgaHJlZj0iI2dhNmY0NDViMjJkODkzM2FlNDgxNWIzMzcwYTUzOGQ4NzkiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTZmNDQ1YjIyZDg5MzNhZTQ4MTViMzM3MGE1MzhkODc5Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZWE4NjNkMmRhMGNkYjYwOTU2M2FhYmRmOTE5NjUxNGIiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB2b2lkJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYTg2M2QyZGEwY2RiNjA5NTYzYWFiZGY5MTk2NTE0YiI+dGpGcmVlPC9hPiAodW5zaWduZWQgY2hhciAqYnVmZmVyKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWVhODYzZDJkYTBjZGI2MDk1NjNhYWJkZjkxOTY1MTRiIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkZyZWUgYW4gaW1hZ2UgYnVmZmVyIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IFR1cmJvSlBFRy4gIDxhIGhyZWY9IiNnYWVhODYzZDJkYTBjZGI2MDk1NjNhYWJkZjkxOTY1MTRiIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FlYTg2M2QyZGEwY2RiNjA5NTYzYWFiZGY5MTk2NTE0YiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTFlYWQ4NTc0ZjlmMzlmYmFmYzZiNDk3MTI0ZTdhYWZhIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgY2hhciAqJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSI+dGpHZXRFcnJvclN0cjI8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuICA8YSBocmVmPSIjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiPnRqR2V0RXJyb3JDb2RlPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTQxNGZlZWZmYmY4NjBlYmQzMWM3NDVkZjIwM2RlNDEwIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlJldHVybnMgYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiAgPGEgaHJlZj0iI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTQxNGZlZWZmYmY4NjBlYmQzMWM3NDVkZjIwM2RlNDEwIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT48dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InZhci1tZW1iZXJzIj48L2E+CitWYXJpYWJsZXM8L2gyPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyI+dGpNQ1VXaWR0aDwvYT4gWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+VEpfTlVNU0FNUDwvYT5dPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TUNVIGJsb2NrIHdpZHRoIChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgPGEgaHJlZj0iI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIj50ak1DVUhlaWdodDwvYT4gWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+VEpfTlVNU0FNUDwvYT5dPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TUNVIGJsb2NrIGhlaWdodCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIDxhIGhyZWY9IiNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkZDliNDQ2NzQyYWM4YTM5MjNmNzk5MmM3OTg4ZmVhOCI+dGpSZWRPZmZzZXQ8L2E+IFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FkZDliNDQ2NzQyYWM4YTM5MjNmNzk5MmM3OTg4ZmVhOCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5SZWQgb2Zmc2V0IChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiAgPGEgaHJlZj0iI2dhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmIj50akdyZWVuT2Zmc2V0PC9hPiBbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT5dPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+R3JlZW4gb2Zmc2V0IChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiAgPGEgaHJlZj0iI2dhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhODRlMmUzNWQzZjA4MDI1Zjk3NmVjMWVjNTM2OTNkZWEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj50akJsdWVPZmZzZXQ8L2E+IFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5CbHVlIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gIDxhIGhyZWY9IiNnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTVhZjBhYjA2NWZlZWZkNTI2ZGViZjFlMjBjNDNlODM3Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1YWYwYWIwNjVmZWVmZDUyNmRlYmYxZTIwYzQzZTgzNyI+dGpBbHBoYU9mZnNldDwvYT4gWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+XTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTVhZjBhYjA2NWZlZWZkNTI2ZGViZjFlMjBjNDNlODM3Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkFscGhhIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gIDxhIGhyZWY9IiNnYTVhZjBhYjA2NWZlZWZkNTI2ZGViZjFlMjBjNDNlODM3Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E1YWYwYWIwNjVmZWVmZDUyNmRlYmYxZTIwYzQzZTgzNyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyI+dGpQaXhlbFNpemU8L2E+IFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5QaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiAgPGEgaHJlZj0iI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT4KKzxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RGV0YWlsZWQgRGVzY3JpcHRpb248L2gyPgorPHA+VHVyYm9KUEVHIEFQSS4gPC9wPgorPHA+VGhpcyBBUEkgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nLCBkZWNvZGluZywgYW5kIHRyYW5zZm9ybWluZyBwbGFuYXIgWVVWIGFuZCBKUEVHIGltYWdlcyBpbiBtZW1vcnkuPC9wPgorPHA+PGEgY2xhc3M9ImFuY2hvciIgaWQ9IllVVm5vdGVzIj48L2E+PC9wPgorPGgyPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2gyPgorPHA+VGVjaG5pY2FsbHksIHRoZSBKUEVHIGZvcm1hdCB1c2VzIHRoZSBZQ2JDciBjb2xvcnNwYWNlICh3aGljaCBpcyB0ZWNobmljYWxseSBub3QgYSBjb2xvcnNwYWNlIGJ1dCBhIGNvbG9yIHRyYW5zZm9ybSksIGJ1dCBwZXIgdGhlIGNvbnZlbnRpb24gb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvIHJlZmVyIHRvIGFuIGltYWdlIGZvcm1hdCBjb25zaXN0aW5nIG9mIFksIENiLCBhbmQgQ3IgaW1hZ2UgcGxhbmVzLjwvcD4KKzxwPkVhY2ggcGxhbmUgaXMgc2ltcGx5IGEgMkQgYXJyYXkgb2YgYnl0ZXMsIGVhY2ggYnl0ZSByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgY29tcG9uZW50cyAoWSwgQ2IsIG9yIENyKSBhdCBhIHBhcnRpY3VsYXIgbG9jYXRpb24gaW4gdGhlIGltYWdlLiBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiBlYWNoIHBsYW5lIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIFRoZSBsdW1pbmFuY2UgcGxhbmUgd2lkdGggaXMgdGhlIGltYWdlIHdpZHRoIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGUgaG9yaXpvbnRhbCBzdWJzYW1wbGluZyBmYWN0b3IgKDIgaW4gdGhlIGNhc2Ugb2YgNDoyOjAgYW5kIDQ6MjoyLCA0IGluIHRoZSBjYXNlIG9mIDQ6MToxLCAxIGluIHRoZSBjYXNlIG9mIDQ6NDo0IG9yIGdyYXlzY2FsZS4pIFNpbWlsYXJseSwgdGhlIGx1bWluYW5jZSBwbGFuZSBoZWlnaHQgaXMgdGhlIGltYWdlIGhlaWdodCBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhlIHZlcnRpY2FsIHN1YnNhbXBsaW5nIGZhY3RvciAoMiBpbiB0aGUgY2FzZSBvZiA0OjI6MCBvciA0OjQ6MCwgMSBpbiB0aGUgY2FzZSBvZiA0OjQ6NCBvciBncmF5c2NhbGUuKSBUaGlzIGlzIGlycmVzcGVjdGl2ZSBvZiBhbnkgYWRkaXRpb25hbCBwYWRkaW5nIHRoYXQgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgdmFyaW91cyBZVVYgZnVuY3Rpb25zLiBUaGUgY2hyb21pbmFuY2UgcGxhbmUgd2lkdGggaXMgZXF1YWwgdG8gdGhlIGx1bWluYW5jZSBwbGFuZSB3aWR0aCBkaXZpZGVkIGJ5IHRoZSBob3Jpem9udGFsIHN1YnNhbXBsaW5nIGZhY3RvciwgYW5kIHRoZSBjaHJvbWluYW5jZSBwbGFuZSBoZWlnaHQgaXMgZXF1YWwgdG8gdGhlIGx1bWluYW5jZSBwbGFuZSBoZWlnaHQgZGl2aWRlZCBieSB0aGUgdmVydGljYWwgc3Vic2FtcGxpbmcgZmFjdG9yLjwvcD4KKzxwPkZvciBleGFtcGxlLCBpZiB0aGUgc291cmNlIGltYWdlIGlzIDM1IHggMzUgcGl4ZWxzIGFuZCA0OjI6MiBzdWJzYW1wbGluZyBpcyB1c2VkLCB0aGVuIHRoZSBsdW1pbmFuY2UgcGxhbmUgd291bGQgYmUgMzYgeCAzNSBieXRlcywgYW5kIGVhY2ggb2YgdGhlIGNocm9taW5hbmNlIHBsYW5lcyB3b3VsZCBiZSAxOCB4IDM1IGJ5dGVzLiBJZiB5b3Ugc3BlY2lmeSBhIGxpbmUgcGFkZGluZyBvZiA0IGJ5dGVzIG9uIHRvcCBvZiB0aGlzLCB0aGVuIHRoZSBsdW1pbmFuY2UgcGxhbmUgd291bGQgYmUgMzYgeCAzNSBieXRlcywgYW5kIGVhY2ggb2YgdGhlIGNocm9taW5hbmNlIHBsYW5lcyB3b3VsZCBiZSAyMCB4IDM1IGJ5dGVzLiA8L3A+Cis8aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5NYWNybyBEZWZpbml0aW9uIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMzlmNTdhNmZiMDJkOWNmMzJlN2I2ODkwMDk5YjVhNzEiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSl9OVU1DUzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIG51bWJlciBvZiBKUEVHIGNvbG9yc3BhY2VzLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3OWJkZTFiNGEzZTIzNTFlMDA4ODdlNDc3ODFiOTY2ZSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKX05VTUVSUjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIG51bWJlciBvZiBlcnJvciBjb2Rlcy4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSl9OVU1QRjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIG51bWJlciBvZiBwaXhlbCBmb3JtYXRzLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKX05VTVNBTVA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSBudW1iZXIgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucy4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMGY2ZGJkMThhZGYzOGI3ZDQ2YWM1NDdmMGY0ZDU2MmMiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSl9OVU1YT1A8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSBudW1iZXIgb2YgdHJhbnNmb3JtIG9wZXJhdGlvbnMuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWNiMjMzY2ZkNzIyZDY2ZDFjY2JmNDhhN2RlODFmMGUwIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX0FDQ1VSQVRFRENUPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5Vc2UgdGhlIG1vc3QgYWNjdXJhdGUgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4gPC9wPgorPHA+VGhlIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuIEZvciBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19CT1RUT01VUDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywgT3BlbkdMKSBvcmRlciwgbm90IHRvcC1kb3duIChYMTEpIG9yZGVyLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FhYmNlMjM1ZGI4MGQzZjY5OGIyN2YzNmNiZDQ1M2RhMiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19GQVNURENUPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5Vc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4gPC9wPgorPHA+VGhlIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuIEZvciBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E0ZWU0NTA2YzgxMTc3YTA2Zjc3ZTI1MDRhMjJlZmQyZCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19GQVNUVVBTQU1QTEU8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPldoZW4gZGVjb21wcmVzc2luZyBhbiBpbWFnZSB0aGF0IHdhcyBjb21wcmVzc2VkIHVzaW5nIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiA8L3A+Cis8cD5UaGUgZGVmYXVsdCBpcyB0byB1c2Ugc21vb3RoIHVwc2FtcGxpbmcsIHdoaWNoIGNyZWF0ZXMgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIG5laWdoYm9yaW5nIGNocm9taW5hbmNlIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gcmVkdWNlIHVwc2FtcGxpbmcgYXJ0aWZhY3RzIGluIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX05PUkVBTExPQzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+RGlzYWJsZSBidWZmZXIgKHJlKWFsbG9jYXRpb24uIDwvcD4KKzxwPklmIHBhc3NlZCB0byBvbmUgb2YgdGhlIEpQRUcgY29tcHJlc3Npb24gb3IgdHJhbnNmb3JtIGZ1bmN0aW9ucywgdGhpcyBmbGFnIHdpbGwgY2F1c2UgdGhvc2UgZnVuY3Rpb25zIHRvIGdlbmVyYXRlIGFuIGVycm9yIGlmIHRoZSBKUEVHIGltYWdlIGJ1ZmZlciBpcyBpbnZhbGlkIG9yIHRvbyBzbWFsbCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIG9yIHJlYWxsb2NhdGUgdGhhdCBidWZmZXIuIFRoaXMgcmVwcm9kdWNlcyB0aGUgYmVoYXZpb3Igb2YgZWFybGllciB2ZXJzaW9ucyBvZiBUdXJib0pQRUcuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTQzYjQyNjc1MGI0NjE5MGEyNWQzNGE2N2VmNzZkZjFiIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX1BST0dSRVNTSVZFPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5Vc2UgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmcgaW4gSlBFRyBpbWFnZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wcmVzc2lvbiBhbmQgdHJhbnNmb3JtIGZ1bmN0aW9ucy4gPC9wPgorPHA+UHJvZ3Jlc3NpdmUgZW50cm9weSBjb2Rpbmcgd2lsbCBnZW5lcmFsbHkgaW1wcm92ZSBjb21wcmVzc2lvbiByZWxhdGl2ZSB0byBiYXNlbGluZSBlbnRyb3B5IGNvZGluZyAodGhlIGRlZmF1bHQpLCBidXQgaXQgd2lsbCByZWR1Y2UgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhYmx5LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E1MTljZmE0ZWY2YzE4ZDllNWI0NTVmZGY1OTMwNmEzYSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19TVE9QT05XQVJOSU5HPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5JbW1lZGlhdGVseSBkaXNjb250aW51ZSB0aGUgY3VycmVudCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uL3RyYW5zZm9ybSBvcGVyYXRpb24gaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgdGhyb3dzIGEgd2FybmluZyAobm9uLWZhdGFsIGVycm9yKS4gPC9wPgorPHA+VGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYWxsb3cgdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZSB1bmxlc3MgYSBmYXRhbCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSlBBRDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj4mIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlBhZCB0aGUgZ2l2ZW4gd2lkdGggdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKU0NBTEVEPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRpbWVuc2lvbiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPnNjYWxpbmdGYWN0b3ImIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkNvbXB1dGUgdGhlIHNjYWxlZCB2YWx1ZSBvZiA8Y29kZT5kaW1lbnNpb248L2NvZGU+IHVzaW5nIHRoZSBnaXZlbiBzY2FsaW5nIGZhY3Rvci4gPC9wPgorPHA+VGhpcyBtYWNybyBwZXJmb3JtcyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIDxjb2RlPmNlaWwoZGltZW5zaW9uICogc2NhbGluZ0ZhY3Rvcik8L2NvZGU+LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2ExNTNiNDY4Y2ZiOTA1ZDBkZTYxNzA2YzgzODk4NmZlOCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKWE9QVF9DT1BZTk9ORTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhpcyBvcHRpb24gd2lsbCBwcmV2ZW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNSIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IGZyb20gY29weWluZyBhbnkgZXh0cmEgbWFya2VycyAoaW5jbHVkaW5nIEVYSUYgYW5kIElDQyBwcm9maWxlIGRhdGEpIGZyb20gdGhlIHNvdXJjZSBpbWFnZSB0byB0aGUgb3V0cHV0IGltYWdlLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKWE9QVF9DUk9QPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBsb3NzbGVzcyBjcm9wcGluZy4gPC9wPgorPHA+U2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNSIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKWE9QVF9HUkFZPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5UaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgdGhlIGNvbG9yIGRhdGEgaW4gdGhlIGlucHV0IGltYWdlIGFuZCBwcm9kdWNlIGEgZ3JheXNjYWxlIG91dHB1dCBpbWFnZS4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZmJmOTkyYmJmNmUwMDY3MDU4ODYzMzM3MDNmZmFiMzEiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSlhPUFRfTk9PVVRQVVQ8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiBmcm9tIG91dHB1dHRpbmcgYSBKUEVHIGltYWdlIGZvciB0aGlzIHBhcnRpY3VsYXIgdHJhbnNmb3JtICh0aGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBjdXN0b20gZmlsdGVyIHRvIGNhcHR1cmUgdGhlIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMgd2l0aG91dCB0cmFuc2NvZGluZyB0aGVtLikgPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSlhPUFRfUEVSRkVDVDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhpcyBvcHRpb24gd2lsbCBjYXVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QgcGVyZmVjdC4gPC9wPgorPHA+TG9zc2xlc3MgdHJhbnNmb3JtcyBvcGVyYXRlIG9uIE1DVSBibG9ja3MsIHdob3NlIHNpemUgZGVwZW5kcyBvbiB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyIgdGl0bGU9Ik1DVSBibG9jayB3aWR0aCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVV2lkdGg8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYiIHRpdGxlPSJNQ1UgYmxvY2sgaGVpZ2h0IChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiI+dGpNQ1VIZWlnaHQ8L2E+LikgSWYgdGhlIGltYWdlJ3Mgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgc2l6ZSwgdGhlbiB0aGVyZSB3aWxsIGJlIHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgcmlnaHQgYW5kL29yIGJvdHRvbSBlZGdlcy4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIG1vdmUgdGhlc2UgcGFydGlhbCBNQ1UgYmxvY2tzIHRvIHRoZSB0b3Agb3IgbGVmdCBvZiB0aGUgaW1hZ2UsIHNvIGFueSB0cmFuc2Zvcm0gdGhhdCB3b3VsZCByZXF1aXJlIHRoYXQgaXMgImltcGVyZmVjdC4iIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0cmFuc2Zvcm1lZCB3aWxsIGJlIGxlZnQgaW4gcGxhY2UsIHdoaWNoIHdpbGwgY3JlYXRlIG9kZC1sb29raW5nIHN0cmlwcyBvbiB0aGUgcmlnaHQgb3IgYm90dG9tIGVkZ2Ugb2YgdGhlIGltYWdlLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FkMjM3MWM4MDY3NDU4NGVjYzFhN2Q3NWU1NjRjZjAyNiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKWE9QVF9QUk9HUkVTU0lWRTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhpcyBvcHRpb24gd2lsbCBlbmFibGUgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmcgaW4gdGhlIG91dHB1dCBpbWFnZSBnZW5lcmF0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIHRyYW5zZm9ybS4gPC9wPgorPHA+UHJvZ3Jlc3NpdmUgZW50cm9weSBjb2Rpbmcgd2lsbCBnZW5lcmFsbHkgaW1wcm92ZSBjb21wcmVzc2lvbiByZWxhdGl2ZSB0byBiYXNlbGluZSBlbnRyb3B5IGNvZGluZyAodGhlIGRlZmF1bHQpLCBidXQgaXQgd2lsbCByZWR1Y2UgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhYmx5LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2EzMTk4MjZiN2ViMTU4M2MwNTk1YmJlN2I5NTQyODcwOSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKWE9QVF9UUklNPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNSIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IHRvIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0cmFuc2Zvcm1lZC4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGgyIGNsYXNzPSJncm91cGhlYWRlciI+VHlwZWRlZiBEb2N1bWVudGF0aW9uPC9oMj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPnR5cGVkZWYgdm9pZCogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlR1cmJvSlBFRyBpbnN0YW5jZSBoYW5kbGUuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPnR5cGVkZWYgc3RydWN0IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+ICA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwiPnRqdHJhbnNmb3JtPC9hPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+TG9zc2xlc3MgdHJhbnNmb3JtLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5FbnVtZXJhdGlvbiBUeXBlIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjAiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+ZW51bSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjAiPlRKQ1M8L2E+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5KUEVHIGNvbG9yc3BhY2VzLiA8L3A+Cis8dGFibGUgY2xhc3M9ImZpZWxkdGFibGUiPgorPHRyPjx0aCBjb2xzcGFuPSIyIj5FbnVtZXJhdG9yPC90aD48L3RyPjx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE2NzdjYjdjY2I4NWM0MDM4YWM0MTk2NGEyZTA5ZTU1NSI+PC9hPlRKQ1NfUkdCPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+UkdCIGNvbG9yc3BhY2UuIDwvcD4KKzxwPldoZW4gY29tcHJlc3NpbmcgdGhlIEpQRUcgaW1hZ2UsIHRoZSBSLCBHLCBhbmQgQiBjb21wb25lbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UgYXJlIHJlb3JkZXJlZCBpbnRvIGltYWdlIHBsYW5lcywgYnV0IG5vIGNvbG9yc3BhY2UgY29udmVyc2lvbiBvciBzdWJzYW1wbGluZyBpcyBwZXJmb3JtZWQuIFJHQiBKUEVHIGltYWdlcyBjYW4gYmUgZGVjb21wcmVzc2VkIHRvIGFueSBvZiB0aGUgZXh0ZW5kZWQgUkdCIHBpeGVsIGZvcm1hdHMgb3IgZ3JheXNjYWxlLCBidXQgdGhleSBjYW5ub3QgYmUgZGVjb21wcmVzc2VkIHRvIFlVViBpbWFnZXMuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE3Mzg5YjhmNjViYjM4N2ZmZWRjZTNlZmQwZDc4ZWM3NSI+PC9hPlRKQ1NfWUNiQ3I8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5ZQ2JDciBjb2xvcnNwYWNlLiA8L3A+Cis8cD5ZQ2JDciBpcyBub3QgYW4gYWJzb2x1dGUgY29sb3JzcGFjZSBidXQgcmF0aGVyIGEgbWF0aGVtYXRpY2FsIHRyYW5zZm9ybWF0aW9uIG9mIFJHQiBkZXNpZ25lZCBzb2xlbHkgZm9yIHN0b3JhZ2UgYW5kIHRyYW5zbWlzc2lvbi4gWUNiQ3IgaW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIFJHQiBiZWZvcmUgdGhleSBjYW4gYWN0dWFsbHkgYmUgZGlzcGxheWVkLiBJbiB0aGUgWUNiQ3IgY29sb3JzcGFjZSwgdGhlIFkgKGx1bWluYW5jZSkgY29tcG9uZW50IHJlcHJlc2VudHMgdGhlIGJsYWNrICZhbXA7IHdoaXRlIHBvcnRpb24gb2YgdGhlIG9yaWdpbmFsIGltYWdlLCBhbmQgdGhlIENiIGFuZCBDciAoY2hyb21pbmFuY2UpIGNvbXBvbmVudHMgcmVwcmVzZW50IHRoZSBjb2xvciBwb3J0aW9uIG9mIHRoZSBvcmlnaW5hbCBpbWFnZS4gT3JpZ2luYWxseSwgdGhlIGFuYWxvZyBlcXVpdmFsZW50IG9mIHRoaXMgdHJhbnNmb3JtYXRpb24gYWxsb3dlZCB0aGUgc2FtZSBzaWduYWwgdG8gZHJpdmUgYm90aCBibGFjayAmYW1wOyB3aGl0ZSBhbmQgY29sb3IgdGVsZXZpc2lvbnMsIGJ1dCBKUEVHIGltYWdlcyB1c2UgWUNiQ3IgcHJpbWFyaWx5IGJlY2F1c2UgaXQgYWxsb3dzIHRoZSBjb2xvciBkYXRhIHRvIGJlIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlZHVjaW5nIGJhbmR3aWR0aCBvciBkaXNrIHNwYWNlLiBZQ2JDciBpcyB0aGUgbW9zdCBjb21tb24gSlBFRyBjb2xvcnNwYWNlLCBhbmQgWUNiQ3IgSlBFRyBpbWFnZXMgY2FuIGJlIGNvbXByZXNzZWQgZnJvbSBhbmQgZGVjb21wcmVzc2VkIHRvIGFueSBvZiB0aGUgZXh0ZW5kZWQgUkdCIHBpeGVsIGZvcm1hdHMgb3IgZ3JheXNjYWxlLCBvciB0aGV5IGNhbiBiZSBkZWNvbXByZXNzZWQgdG8gWVVWIHBsYW5hciBpbWFnZXMuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGFiM2U3ZDZhODdmNjk1ZTQ1YjgxYzFiNTI2MmI1YTUwYSI+PC9hPlRKQ1NfR1JBWTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkdyYXlzY2FsZSBjb2xvcnNwYWNlLiA8L3A+Cis8cD5UaGUgSlBFRyBpbWFnZSByZXRhaW5zIG9ubHkgdGhlIGx1bWluYW5jZSBkYXRhIChZIGNvbXBvbmVudCksIGFuZCBhbnkgY29sb3IgZGF0YSBmcm9tIHRoZSBzb3VyY2UgaW1hZ2UgaXMgZGlzY2FyZGVkLiBHcmF5c2NhbGUgSlBFRyBpbWFnZXMgY2FuIGJlIGNvbXByZXNzZWQgZnJvbSBhbmQgZGVjb21wcmVzc2VkIHRvIGFueSBvZiB0aGUgZXh0ZW5kZWQgUkdCIHBpeGVsIGZvcm1hdHMgb3IgZ3JheXNjYWxlLCBvciB0aGV5IGNhbiBiZSBkZWNvbXByZXNzZWQgdG8gWVVWIHBsYW5hciBpbWFnZXMuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE2YzhiNjM2MTUyYWM4MTk1Yjg2OTU4N2RiMzE1ZWU1MyI+PC9hPlRKQ1NfQ01ZSzwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkNNWUsgY29sb3JzcGFjZS4gPC9wPgorPHA+V2hlbiBjb21wcmVzc2luZyB0aGUgSlBFRyBpbWFnZSwgdGhlIEMsIE0sIFksIGFuZCBLIGNvbXBvbmVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSBhcmUgcmVvcmRlcmVkIGludG8gaW1hZ2UgcGxhbmVzLCBidXQgbm8gY29sb3JzcGFjZSBjb252ZXJzaW9uIG9yIHN1YnNhbXBsaW5nIGlzIHBlcmZvcm1lZC4gQ01ZSyBKUEVHIGltYWdlcyBjYW4gb25seSBiZSBkZWNvbXByZXNzZWQgdG8gQ01ZSyBwaXhlbHMuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE1MzgzOWUwZmU4NjdiNzZiNThkMTZiMGExYTdjNTk4ZSI+PC9hPlRKQ1NfWUNDSzwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPllDQ0sgY29sb3JzcGFjZS4gPC9wPgorPHA+WUNDSyAoQUtBICJZQ2JDcksiKSBpcyBub3QgYW4gYWJzb2x1dGUgY29sb3JzcGFjZSBidXQgcmF0aGVyIGEgbWF0aGVtYXRpY2FsIHRyYW5zZm9ybWF0aW9uIG9mIENNWUsgZGVzaWduZWQgc29sZWx5IGZvciBzdG9yYWdlIGFuZCB0cmFuc21pc3Npb24uIEl0IGlzIHRvIENNWUsgYXMgWUNiQ3IgaXMgdG8gUkdCLiBDTVlLIHBpeGVscyBjYW4gYmUgcmV2ZXJzaWJseSB0cmFuc2Zvcm1lZCBpbnRvIFlDQ0ssIGFuZCBhcyB3aXRoIFlDYkNyLCB0aGUgY2hyb21pbmFuY2UgY29tcG9uZW50cyBpbiB0aGUgWUNDSyBwaXhlbHMgY2FuIGJlIHN1YnNhbXBsZWQgd2l0aG91dCBpbmN1cnJpbmcgbWFqb3IgcGVyY2VwdHVhbCBsb3NzLiBZQ0NLIEpQRUcgaW1hZ2VzIGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgZnJvbSBhbmQgZGVjb21wcmVzc2VkIHRvIENNWUsgcGl4ZWxzLiA8L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZmJjMTdjZmE1N2QwZDVkMTFmZWEzNWFjMDI1OTUwZmUiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+ZW51bSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZmJjMTdjZmE1N2QwZDVkMTFmZWEzNWFjMDI1OTUwZmUiPlRKRVJSPC9hPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+RXJyb3IgY29kZXMuIDwvcD4KKzx0YWJsZSBjbGFzcz0iZmllbGR0YWJsZSI+Cis8dHI+PHRoIGNvbHNwYW49IjIiPkVudW1lcmF0b3I8L3RoPjwvdHI+PHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWZiYzE3Y2ZhNTdkMGQ1ZDExZmVhMzVhYzAyNTk1MGZlYTM0MmRkNmUyYWVkYjQ3YmIyNTdiNGU3NTY4MzI5YjU5Ij48L2E+VEpFUlJfV0FSTklORzwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPlRoZSBlcnJvciB3YXMgbm9uLWZhdGFsIGFuZCByZWNvdmVyYWJsZSwgYnV0IHRoZSBpbWFnZSBtYXkgc3RpbGwgYmUgY29ycnVwdC4gPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWZiYzE3Y2ZhNTdkMGQ1ZDExZmVhMzVhYzAyNTk1MGZlYWZjOWNjZWVhZGExMzEyMmIwOWU0ODUxZTM3ODgwMzlhIj48L2E+VEpFUlJfRkFUQUw8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5UaGUgZXJyb3Igd2FzIGZhdGFsIGFuZCBub24tcmVjb3ZlcmFibGUuIDwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5lbnVtIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+VEpQRjwvYT48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlBpeGVsIGZvcm1hdHMuIDwvcD4KKzx0YWJsZSBjbGFzcz0iZmllbGR0YWJsZSI+Cis8dHI+PHRoIGNvbHNwYW49IjIiPkVudW1lcmF0b3I8L3RoPjwvdHI+PHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTdjZTkzMjMwYmZmNDQ5NTE4Y2UzODdjMTdlNmVkMzdjIj48L2E+VEpQRl9SR0I8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5SR0IgcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5UaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlIHN0b3JlZCBpbiAzLWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBSLCBHLCBCIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZSBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhYjEwNjI0NDM3ZmI4ZWY0OTVhMGIxNTNlNjU3NDk4MzkiPjwvYT5USlBGX0JHUjwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkJHUiBwaXhlbCBmb3JtYXQuIDwvcD4KKzxwPlRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUgc3RvcmVkIGluIDMtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4Mzk3M2JlYmI3ZTJkYzZmYThiYWU4OWZmM2Y0MmUwMSI+PC9hPlRKUEZfUkdCWDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPlJHQlggcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5UaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlIHN0b3JlZCBpbiA0LWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBSLCBHLCBCIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZSBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhMmExZmJmNTY5Y2E3OTg5N2VhZTg4NmUzMzc2Y2E0YzgiPjwvYT5USlBGX0JHUlg8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5CR1JYIHBpeGVsIGZvcm1hdC4gPC9wPgorPHA+VGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZSBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgQiwgRywgUiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUgYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gVGhlIFggY29tcG9uZW50IGlzIGlnbm9yZWQgd2hlbiBjb21wcmVzc2luZyBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy4gPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWY2NjAzYjI3MTQ3ZGU0N2UyMTJlNzVkYWMwMjdiMmFmIj48L2E+VEpQRl9YQkdSPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+WEJHUiBwaXhlbCBmb3JtYXQuIDwvcD4KKzxwPlRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUgc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIFIsIEcsIEIgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBieXRlIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcgYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFkYWU5OTY5MDVlZmNmYTNiNDJhMGJiM2JlYTdmOWQ4NCI+PC9hPlRKUEZfWFJHQjwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPlhSR0IgcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5UaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlIHN0b3JlZCBpbiA0LWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBCLCBHLCBSIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgYnl0ZSBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhNTQzMWI1NGIwMTUzMzc3MDVmMTMxMTgwNzM3MTFhMWEiPjwvYT5USlBGX0dSQVk8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5HcmF5c2NhbGUgcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5FYWNoIDEtYnl0ZSBwaXhlbCByZXByZXNlbnRzIGEgbHVtaW5hbmNlIChicmlnaHRuZXNzKSBsZXZlbCBmcm9tIDAgdG8gMjU1LiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODhkMmU4OGZhYjY3ZjY1MDNjZjk3MmUxNDg1MWNjMTIiPjwvYT5USlBGX1JHQkE8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5SR0JBIHBpeGVsIGZvcm1hdC4gPC9wPgorPHA+VGhpcyBpcyB0aGUgc2FtZSBhcyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTgzOTczYmViYjdlMmRjNmZhOGJhZTg5ZmYzZjQyZTAxIj5USlBGX1JHQlg8L2E+LCBleGNlcHQgdGhhdCB3aGVuIGRlY29tcHJlc3NpbmcsIHRoZSBYIGNvbXBvbmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4gPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWMwMzdmZjE4NDVjZjliNzRiYjgxYTM2NTljMmI5ZmI0Ij48L2E+VEpQRl9CR1JBPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+QkdSQSBwaXhlbCBmb3JtYXQuIDwvcD4KKzxwPlRoaXMgaXMgdGhlIHNhbWUgYXMgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWEyYTFmYmY1NjljYTc5ODk3ZWFlODg2ZTMzNzZjYTRjOCI+VEpQRl9CR1JYPC9hPiwgZXhjZXB0IHRoYXQgd2hlbiBkZWNvbXByZXNzaW5nLCB0aGUgWCBjb21wb25lbnQgaXMgZ3VhcmFudGVlZCB0byBiZSAweEZGLCB3aGljaCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3BhcXVlIGFscGhhIGNoYW5uZWwuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWExYmExYTdmMTYzMWRiZWFhNDlhMGE4NWZjNGE0MDA4MSI+PC9hPlRKUEZfQUJHUjwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkFCR1IgcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5UaGlzIGlzIHRoZSBzYW1lIGFzIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZjY2MDNiMjcxNDdkZTQ3ZTIxMmU3NWRhYzAyN2IyYWYiPlRKUEZfWEJHUjwvYT4sIGV4Y2VwdCB0aGF0IHdoZW4gZGVjb21wcmVzc2luZywgdGhlIFggY29tcG9uZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZThmODQ2ZWQ5ZDlkZTk5YjZlMWRmZTQ0ODg0ODc2NWMiPjwvYT5USlBGX0FSR0I8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5BUkdCIHBpeGVsIGZvcm1hdC4gPC9wPgorPHA+VGhpcyBpcyB0aGUgc2FtZSBhcyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWRhZTk5NjkwNWVmY2ZhM2I0MmEwYmIzYmVhN2Y5ZDg0Ij5USlBGX1hSR0I8L2E+LCBleGNlcHQgdGhhdCB3aGVuIGRlY29tcHJlc3NpbmcsIHRoZSBYIGNvbXBvbmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4gPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTdmNTEwMGVjNDRjOTE5OTRlMjQzZjFjZjU1NTUzZjhiIj48L2E+VEpQRl9DTVlLPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+Q01ZSyBwaXhlbCBmb3JtYXQuIDwvcD4KKzxwPlVubGlrZSBSR0IsIHdoaWNoIGlzIGFuIGFkZGl0aXZlIGNvbG9yIG1vZGVsIHVzZWQgcHJpbWFyaWx5IGZvciBkaXNwbGF5LCBDTVlLIChDeWFuL01hZ2VudGEvWWVsbG93L0tleSkgaXMgYSBzdWJ0cmFjdGl2ZSBjb2xvciBtb2RlbCB1c2VkIHByaW1hcmlseSBmb3IgcHJpbnRpbmcuIEluIHRoZSBDTVlLIGNvbG9yIG1vZGVsLCB0aGUgdmFsdWUgb2YgZWFjaCBjb2xvciBjb21wb25lbnQgdHlwaWNhbGx5IGNvcnJlc3BvbmRzIHRvIGFuIGFtb3VudCBvZiBjeWFuLCBtYWdlbnRhLCB5ZWxsb3csIG9yIGJsYWNrIGluayB0aGF0IGlzIGFwcGxpZWQgdG8gYSB3aGl0ZSBiYWNrZ3JvdW5kLiBJbiBvcmRlciB0byBjb252ZXJ0IGJldHdlZW4gQ01ZSyBhbmQgUkdCLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGEgY29sb3IgbWFuYWdlbWVudCBzeXN0ZW0gKENNUy4pIEEgQ01TIHdpbGwgYXR0ZW1wdCB0byBtYXAgY29sb3JzIHdpdGhpbiB0aGUgcHJpbnRlcidzIGdhbXV0IHRvIHBlcmNlcHR1YWxseSBzaW1pbGFyIGNvbG9ycyBpbiB0aGUgZGlzcGxheSdzIGdhbXV0IGFuZCB2aWNlIHZlcnNhLCBidXQgdGhlIG1hcHBpbmcgaXMgdHlwaWNhbGx5IG5vdCAxOjEgb3IgcmV2ZXJzaWJsZSwgbm9yIGNhbiBpdCBiZSBkZWZpbmVkIHdpdGggYSBzaW1wbGUgZm9ybXVsYS4gVGh1cywgc3VjaCBhIGNvbnZlcnNpb24gaXMgb3V0IG9mIHNjb3BlIGZvciBhIGNvZGVjIGxpYnJhcnkuIEhvd2V2ZXIsIHRoZSBUdXJib0pQRUcgQVBJIGFsbG93cyBmb3IgY29tcHJlc3NpbmcgQ01ZSyBwaXhlbHMgaW50byBhIFlDQ0sgSlBFRyBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjBhNTM4MzllMGZlODY3Yjc2YjU4ZDE2YjBhMWE3YzU5OGUiIHRpdGxlPSJZQ0NLIGNvbG9yc3BhY2UuIj5USkNTX1lDQ0s8L2E+KSBhbmQgZGVjb21wcmVzc2luZyBZQ0NLIEpQRUcgaW1hZ2VzIGludG8gQ01ZSyBwaXhlbHMuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4NGMxYTZjZWFkNzk1Mjk5OGUyZmI4OTU4NDRhMjFlZCI+PC9hPlRKUEZfVU5LTk9XTjwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPlVua25vd24gcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5DdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgYnkgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZmYmQ4M2MzNzVlNzlmNWRiNGI1YzVkOGFkNDQ2NmU3IiB0aXRsZT0iTG9hZCBhbiB1bmNvbXByZXNzZWQgaW1hZ2UgZnJvbSBkaXNrIGludG8gbWVtb3J5LiI+dGpMb2FkSW1hZ2UoKTwvYT4uIDwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5lbnVtIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+VEpTQU1QPC9hPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+Q2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucy4gPC9wPgorPHA+V2hlbiBwaXhlbHMgYXJlIGNvbnZlcnRlZCBmcm9tIFJHQiB0byBZQ2JDciAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjBhNzM4OWI4ZjY1YmIzODdmZmVkY2UzZWZkMGQ3OGVjNzUiIHRpdGxlPSJZQ2JDciBjb2xvcnNwYWNlLiI+VEpDU19ZQ2JDcjwvYT4pIG9yIGZyb20gQ01ZSyB0byBZQ0NLIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE1MzgzOWUwZmU4NjdiNzZiNThkMTZiMGExYTdjNTk4ZSIgdGl0bGU9IllDQ0sgY29sb3JzcGFjZS4iPlRKQ1NfWUNDSzwvYT4pIGFzIHBhcnQgb2YgdGhlIEpQRUcgY29tcHJlc3Npb24gcHJvY2Vzcywgc29tZSBvZiB0aGUgQ2IgYW5kIENyIChjaHJvbWluYW5jZSkgY29tcG9uZW50cyBjYW4gYmUgZGlzY2FyZGVkIG9yIGF2ZXJhZ2VkIHRvZ2V0aGVyIHRvIHByb2R1Y2UgYSBzbWFsbGVyIGltYWdlIHdpdGggbGl0dGxlIHBlcmNlcHRpYmxlIGxvc3Mgb2YgaW1hZ2UgY2xhcml0eSAodGhlIGh1bWFuIGV5ZSBpcyBtb3JlIHNlbnNpdGl2ZSB0byBzbWFsbCBjaGFuZ2VzIGluIGJyaWdodG5lc3MgdGhhbiB0byBzbWFsbCBjaGFuZ2VzIGluIGNvbG9yLikgVGhpcyBpcyBjYWxsZWQgImNocm9taW5hbmNlIHN1YnNhbXBsaW5nIi4gPC9wPgorPHRhYmxlIGNsYXNzPSJmaWVsZHRhYmxlIj4KKzx0cj48dGggY29sc3Bhbj0iMiI+RW51bWVyYXRvcjwvdGg+PC90cj48dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhZmI4ZGE0ZjQ0MTk3ODM3YmRlYzBhNGY1OTNkYWNhZTMiPjwvYT5USlNBTVBfNDQ0PC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+NDo0OjQgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgKG5vIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nKS4gPC9wPgorPHA+VGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUgY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSBwaXhlbCBpbiB0aGUgc291cmNlIGltYWdlLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMTM2MTMwOTAyY2M1NzhmMTFmMzI0MjliNTkzNjg0MDQiPjwvYT5USlNBTVBfNDIyPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+NDoyOjIgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KKzxwPlRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMngxIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhNjMwODVkYmY2ODNjZmUzOWU1MTNjZGI2MzQzZTM3MzciPjwvYT5USlNBTVBfNDIwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+NDoyOjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KKzxwPlRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMngyIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhM2YxYzk1MDQ4NDJkZGM3YTQ4ZDBmNjkwNzU0YjYyNDgiPjwvYT5USlNBTVBfR1JBWTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkdyYXlzY2FsZS4gPC9wPgorPHA+VGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBubyBjaHJvbWluYW5jZSBjb21wb25lbnRzLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhY2NmNzQwZTZmM2FhNmJhMjBiYTkyMmNhZDEzY2I5NzQiPjwvYT5USlNBTVBfNDQwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+NDo0OjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KKzxwPlRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMXgyIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLjwvcD4KKzxkbCBjbGFzcz0ic2VjdGlvbiBub3RlIj48ZHQ+Tm90ZTwvZHQ+PGRkPjQ6NDowIHN1YnNhbXBsaW5nIGlzIG5vdCBmdWxseSBhY2NlbGVyYXRlZCBpbiBsaWJqcGVnLXR1cmJvLiA8L2RkPjwvZGw+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMjhlYzYyNTc1ZTVlYTI5NWMzZmRlMzAwMWRjNjI4ZTIiPjwvYT5USlNBTVBfNDExPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+NDoxOjEgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KKzxwPlRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgNHgxIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLiBKUEVHIGltYWdlcyBjb21wcmVzc2VkIHdpdGggNDoxOjEgc3Vic2FtcGxpbmcgd2lsbCBiZSBhbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBzaXplIGFzIHRob3NlIGNvbXByZXNzZWQgd2l0aCA0OjI6MCBzdWJzYW1wbGluZywgYW5kIGluIHRoZSBhZ2dyZWdhdGUsIGJvdGggc3Vic2FtcGxpbmcgbWV0aG9kcyBwcm9kdWNlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgcGVyY2VwdHVhbCBxdWFsaXR5LiBIb3dldmVyLCA0OjE6MSBpcyBiZXR0ZXIgYWJsZSB0byByZXByb2R1Y2Ugc2hhcnAgaG9yaXpvbnRhbCBmZWF0dXJlcy48L3A+Cis8ZGwgY2xhc3M9InNlY3Rpb24gbm90ZSI+PGR0Pk5vdGU8L2R0PjxkZD40OjE6MSBzdWJzYW1wbGluZyBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQgaW4gbGlianBlZy10dXJiby4gPC9kZD48L2RsPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmVudW0gPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij5USlhPUDwvYT48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRyYW5zZm9ybSBvcGVyYXRpb25zIGZvciA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWNiOGFiZjRjYzkxODgxZTA0YTAzMjliMjI3MGJlMjUiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiA8L3A+Cis8dGFibGUgY2xhc3M9ImZpZWxkdGFibGUiPgorPHRyPjx0aCBjb2xzcGFuPSIyIj5FbnVtZXJhdG9yPC90aD48L3RyPjx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhZDg4YzAzNjZjZDNmN2QwZWFjOWQ3YTNmYTFjMmMyNyI+PC9hPlRKWE9QX05PTkU8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5EbyBub3QgdHJhbnNmb3JtIHRoZSBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgcGl4ZWxzLiA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYTBkZjY5Nzc2Y2FhMzBmMGZhMjhlMjYzMzJkMzExY2UiPjwvYT5USlhPUF9IRkxJUDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkZsaXAgKG1pcnJvcikgaW1hZ2UgaG9yaXpvbnRhbGx5LiA8L3A+Cis8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiIHRpdGxlPSJUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRqVHJhbnNmb3JtKCkgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QuIj5USlhPUFRfUEVSRkVDVDwvYT4uKSA8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzI0ZWRkZmJlYzUzYjdlNjkxZjYxZTU2OTI5ZDBkNWQiPjwvYT5USlhPUF9WRkxJUDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPkZsaXAgKG1pcnJvcikgaW1hZ2UgdmVydGljYWxseS4gPC9wPgorPHA+VGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIG9uIHRoZSBib3R0b20gZWRnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCIgdGl0bGU9IlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGpUcmFuc2Zvcm0oKSB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QgcGVyZmVjdC4iPlRKWE9QVF9QRVJGRUNUPC9hPi4pIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMTA2MGFlZDE5OWY4ODZhZmRkNDE3ZjgwNDk5YzMyZCI+PC9hPlRKWE9QX1RSQU5TUE9TRTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KKzxwPlRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodCBheGlzLikgVGhpcyB0cmFuc2Zvcm0gaXMgYWx3YXlzIHBlcmZlY3QuIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFmM2IxNGQ0ODhhZWE2ZWNlOWU1YjNkZjczYTc0ZDZhNCI+PC9hPlRKWE9QX1RSQU5TVkVSU0U8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+Cis8cD5UcmFuc3ZlcnNlIHRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgcmlnaHQgdG8gbG93ZXIgbGVmdCBheGlzLikgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIGluIHRoZSBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCIgdGl0bGU9IlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGpUcmFuc2Zvcm0oKSB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QgcGVyZmVjdC4iPlRKWE9QVF9QRVJGRUNUPC9hPi4pIDwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmE0M2IyYmJiMjNiYzRiZDU0ODQyMmQ0M2ZiZTlhZjEyOCI+PC9hPlRKWE9QX1JPVDkwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+Um90YXRlIGltYWdlIGNsb2Nrd2lzZSBieSA5MCBkZWdyZWVzLiA8L3A+Cis8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIGJvdHRvbSBlZGdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIiB0aXRsZT0iVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0alRyYW5zZm9ybSgpIHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBwZXJmZWN0LiI+VEpYT1BUX1BFUkZFQ1Q8L2E+LikgPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTE0MDk1MmViOGRkMDMwMGFjY2ZjYzIyNzI2ZDY5NjkyIj48L2E+VEpYT1BfUk9UMTgwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+Um90YXRlIGltYWdlIDE4MCBkZWdyZWVzLiA8L3A+Cis8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3MgaW4gdGhlIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIiB0aXRsZT0iVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0alRyYW5zZm9ybSgpIHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBwZXJmZWN0LiI+VEpYT1BUX1BFUkZFQ1Q8L2E+LikgPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMwNjRlZTVkZmI3ZjAzMmRmMzMyODE4NTg3NTY3YTA4Ij48L2E+VEpYT1BfUk9UMjcwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgorPHA+Um90YXRlIGltYWdlIGNvdW50ZXItY2xvY2t3aXNlIGJ5IDkwIGRlZ3JlZXMuIDwvcD4KKzxwPlRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgcmlnaHQgZWRnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCIgdGl0bGU9IlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGpUcmFuc2Zvcm0oKSB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QgcGVyZmVjdC4iPlRKWE9QVF9QRVJGRUNUPC9hPi4pIDwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzwvZGl2PgorPC9kaXY+Cis8aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5GdW5jdGlvbiBEb2N1bWVudGF0aW9uPC9oMj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWVjNjI3ZGQ0YzVmMzBiN2E3NzVhN2FlYTNiZWM1ZDgzIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCB1bnNpZ25lZCBjaGFyKiB0akFsbG9jIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+Ynl0ZXM8L2VtPjwvdGQ+PHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiA8L3A+Cis8cD5Zb3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhpcyBmdW5jdGlvbiB0byBhbGxvY2F0ZSB0aGUgSlBFRyBkZXN0aW5hdGlvbiBidWZmZXIocykgZm9yIHRoZSBjb21wcmVzc2lvbiBhbmQgdHJhbnNmb3JtIGZ1bmN0aW9ucyB1bmxlc3MgeW91IGFyZSBkaXNhYmxpbmcgYXV0b21hdGljIGJ1ZmZlciAocmUpYWxsb2NhdGlvbiAoYnkgc2V0dGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+Lik8L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+Ynl0ZXM8L3RkPjx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+YSBwb2ludGVyIHRvIGEgbmV3bHktYWxsb2NhdGVkIGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLjwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiBzZWUiPjxkdD5TZWUgQWxzbzwvZHQ+PGRkPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYTg2M2QyZGEwY2RiNjA5NTYzYWFiZGY5MTk2NTE0YiIgdGl0bGU9IkZyZWUgYW4gaW1hZ2UgYnVmZmVyIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IFR1cmJvSlBFRy4iPnRqRnJlZSgpPC9hPiA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E2N2FjMTJmZWU3OTA3MzI0MmNiMjE2ZTA3YzlmMWY5MCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgdW5zaWduZWQgbG9uZyB0akJ1ZlNpemUgPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmhlaWdodDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdTdWJzYW1wPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIDwvcD4KKzxwPlRoZSBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZS4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBKUEVHIGZvcm1hdCB1c2VzIDE2LWJpdCBjb2VmZmljaWVudHMsIGFuZCBpdCBpcyB0aHVzIHBvc3NpYmxlIGZvciBhIHZlcnkgaGlnaC1xdWFsaXR5IEpQRUcgaW1hZ2Ugd2l0aCB2ZXJ5IGhpZ2gtZnJlcXVlbmN5IGNvbnRlbnQgdG8gZXhwYW5kIHJhdGhlciB0aGFuIGNvbXByZXNzIHdoZW4gY29udmVydGVkIHRvIHRoZSBKUEVHIGZvcm1hdC4gU3VjaCBpbWFnZXMgcmVwcmVzZW50IGEgdmVyeSByYXJlIGNvcm5lciBjYXNlLCBidXQgc2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHByZWRpY3QgdGhlIHNpemUgb2YgYSBKUEVHIGltYWdlIHByaW9yIHRvIGNvbXByZXNzaW9uLCB0aGUgY29ybmVyIGNhc2UgaGFzIHRvIGJlIGhhbmRsZWQuPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+d2lkdGggKGluIHBpeGVscykgb2YgdGhlIGltYWdlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTdWJzYW1wPC90ZD48dGQ+dGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBKUEVHIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5DaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zPC9hPi4pPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+dGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUgaW1hZ2UsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTJiZTJiOTk2OWQ0ZGY5ZWNjZTliMDVkZWVkMjczMTk0Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCB1bnNpZ25lZCBsb25nIHRqQnVmU2l6ZVlVVjIgPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnBhZDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmhlaWdodDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnN1YnNhbXA8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPndpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnBhZDwvdGQ+PHRkPnRoZSB3aWR0aCBvZiBlYWNoIGxpbmUgaW4gZWFjaCBwbGFuZSBvZiB0aGUgaW1hZ2UgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIChtdXN0IGJlIGEgcG93ZXIgb2YgMi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnN1YnNhbXA8L3RkPjx0ZD5sZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyBpbiB0aGUgaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2E+Lik8L3RkPjwvdHI+CisgIDwvdGFibGU+CisgIDwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD50aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUgaW1hZ2UsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWZiZGNlMDExMmZkNzhmZDM4ZWZhZTg0MTQ0M2E5YmNmIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCBpbnQgdGpDb21wcmVzczIgPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmhhbmRsZTwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+Y29uc3QgdW5zaWduZWQgY2hhciAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnNyY0J1ZjwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPndpZHRoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGl0Y2g8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5waXhlbEZvcm1hdDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+dW5zaWduZWQgY2hhciAqKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+anBlZ1NpemU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnU3Vic2FtcDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdRdWFsPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZmxhZ3M8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+Q29tcHJlc3MgYW4gUkdCLCBncmF5c2NhbGUsIG9yIENNWUsgaW1hZ2UgaW50byBhIEpQRUcgaW1hZ2UuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3JjQnVmPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0IsIGdyYXlzY2FsZSwgb3IgQ01ZSyBwaXhlbHMgdG8gYmUgY29tcHJlc3NlZDwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+d2lkdGggKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnBpdGNoPC90ZD48dGQ+Ynl0ZXMgcGVyIGxpbmUgaW4gdGhlIHNvdXJjZSBpbWFnZS4gTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlIDxjb2RlPndpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+IGlmIHRoZSBpbWFnZSBpcyB1bnBhZGRlZCwgb3IgPGNvZGU+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIiB0aXRsZT0iUGFkIHRoZSBnaXZlbiB3aWR0aCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnkuIj5USlBBRDwvYT4od2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XSk8L2NvZGU+IGlmIGVhY2ggbGluZSBvZiB0aGUgaW1hZ2UgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgYXMgaXMgdGhlIGNhc2UgZm9yIFdpbmRvd3MgYml0bWFwcy4gWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsIGV0Yy4gU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gPGNvZGU+d2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XTwvY29kZT4uPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXhlbEZvcm1hdDwvdGQ+PHRkPnBpeGVsIGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj5QaXhlbCBmb3JtYXRzPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ0J1ZjwvdGQ+PHRkPmFkZHJlc3Mgb2YgYSBwb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgSlBFRyBpbWFnZS4gVHVyYm9KUEVHIGhhcyB0aGUgYWJpbGl0eSB0byByZWFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciB0byBhY2NvbW1vZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4gVGh1cywgeW91IGNhbiBjaG9vc2UgdG86PG9sIHR5cGU9IjEiPgorPGxpPnByZS1hbGxvY2F0ZSB0aGUgSlBFRyBidWZmZXIgd2l0aCBhbiBhcmJpdHJhcnkgc2l6ZSB1c2luZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZWM2MjdkZDRjNWYzMGI3YTc3NWE3YWVhM2JlYzVkODMiIHRpdGxlPSJBbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4iPnRqQWxsb2MoKTwvYT4gYW5kIGxldCBUdXJib0pQRUcgZ3JvdyB0aGUgYnVmZmVyIGFzIG5lZWRlZCw8L2xpPgorPGxpPnNldCA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gdG8gTlVMTCB0byB0ZWxsIFR1cmJvSlBFRyB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGZvciB5b3UsIG9yPC9saT4KKzxsaT5wcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBhICJ3b3JzdCBjYXNlIiBzaXplIGRldGVybWluZWQgYnkgY2FsbGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNjdhYzEyZmVlNzkwNzMyNDJjYjIxNmUwN2M5ZjFmOTAiIHRpdGxlPSJUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRyBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLi4uIj50akJ1ZlNpemUoKTwvYT4uIFRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgbmV2ZXIgaGFzIHRvIGJlIHJlLWFsbG9jYXRlZCAoc2V0dGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+IGd1YXJhbnRlZXMgdGhhdCBpdCB3b24ndCBiZS4pPC9saT4KKzwvb2w+CitJZiB5b3UgY2hvb3NlIG9wdGlvbiAxLCA8Y29kZT4qanBlZ1NpemU8L2NvZGU+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgeW91ciBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gSW4gYW55IGNhc2UsIHVubGVzcyB5b3UgaGF2ZSBzZXQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzIiB0aXRsZT0iRGlzYWJsZSBidWZmZXIgKHJlKWFsbG9jYXRpb24uIj5USkZMQUdfTk9SRUFMTE9DPC9hPiwgeW91IHNob3VsZCBhbHdheXMgY2hlY2sgPGNvZGU+KmpwZWdCdWY8L2NvZGU+IHVwb24gcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZC48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnU2l6ZTwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIGJ1ZmZlci4gSWYgPGNvZGU+KmpwZWdCdWY8L2NvZGU+IHBvaW50cyB0byBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLCB0aGVuIDxjb2RlPipqcGVnU2l6ZTwvY29kZT4gc2hvdWxkIGJlIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiBVcG9uIHJldHVybiwgPGNvZGU+KmpwZWdTaXplPC9jb2RlPiB3aWxsIGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzLikgSWYgPGNvZGU+KmpwZWdCdWY8L2NvZGU+IHBvaW50cyB0byBhIEpQRUcgaW1hZ2UgYnVmZmVyIHRoYXQgaXMgYmVpbmcgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIG9uZSBvZiB0aGUgSlBFRyBjb21wcmVzc2lvbiBmdW5jdGlvbnMsIHRoZW4gPGNvZGU+KmpwZWdTaXplPC9jb2RlPiBpcyBpZ25vcmVkLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTdWJzYW1wPC90ZD48dGQ+dGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBKUEVHIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5DaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ1F1YWw8L3RkPjx0ZD50aGUgaW1hZ2UgcXVhbGl0eSBvZiB0aGUgZ2VuZXJhdGVkIEpQRUcgaW1hZ2UgKDEgPSB3b3JzdCwgMTAwID0gYmVzdCk8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPmZsYWdzPC9hPjwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiIHRpdGxlPSJSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4iPnRqR2V0RXJyb3JDb2RlKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNzYyMmE0NTliNzlhYTEwMDdlMDA1YjU4NzgzZjg3NWIiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIGludCB0akNvbXByZXNzRnJvbVlVViA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4mIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGFuZGxlPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5jb25zdCB1bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3JjQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+d2lkdGg8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5wYWQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdWJzYW1wPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBjaGFyICoqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdCdWY8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnVuc2lnbmVkIGxvbmcgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnU2l6ZTwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdRdWFsPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZmxhZ3M8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+Q29tcHJlc3MgYSBZVVYgcGxhbmFyIGltYWdlIGludG8gYSBKUEVHIGltYWdlLiA8L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGFuZGxlPC90ZD48dGQ+YSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnNyY0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlIHRvIGJlIGNvbXByZXNzZWQuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJiZTJiOTk2OWQ0ZGY5ZWNjZTliMDVkZWVkMjczMTk0IiB0aXRsZT0iVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuLi4iPnRqQnVmU2l6ZVlVVjIoKTwvYT4gZm9yIHRoZSBnaXZlbiBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIFRoZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIHNob3VsZCBiZSBzdG9yZWQgc2VxdWVudGlhbGx5IGluIHRoZSBzb3VyY2UgYnVmZmVyIChyZWZlciB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI1lVVm5vdGVzIj5ZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+d2lkdGg8L3RkPjx0ZD53aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlLiBJZiB0aGUgd2lkdGggaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jayB3aWR0aCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyIgdGl0bGU9Ik1DVSBibG9jayB3aWR0aCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVV2lkdGg8L2E+KSwgdGhlbiBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5wYWQ8L3RkPjx0ZD50aGUgbGluZSBwYWRkaW5nIHVzZWQgaW4gdGhlIHNvdXJjZSBpbWFnZS4gRm9yIGluc3RhbmNlLCBpZiBlYWNoIGxpbmUgaW4gZWFjaCBwbGFuZSBvZiB0aGUgWVVWIGltYWdlIGlzIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiA0IGJ5dGVzLCB0aGVuIDxjb2RlPnBhZDwvY29kZT4gc2hvdWxkIGJlIHNldCB0byA0LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlLiBJZiB0aGUgaGVpZ2h0IGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIiB0aXRsZT0iTUNVIGJsb2NrIGhlaWdodCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVSGVpZ2h0PC9hPiksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3Vic2FtcDwvdGQ+PHRkPnRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBzb3VyY2UgaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2E+Lik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnQnVmPC90ZD48dGQ+YWRkcmVzcyBvZiBhIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBKUEVHIGltYWdlLiBUdXJib0pQRUcgaGFzIHRoZSBhYmlsaXR5IHRvIHJlYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyIHRvIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiBUaHVzLCB5b3UgY2FuIGNob29zZSB0bzo8b2wgdHlwZT0iMSI+Cis8bGk+cHJlLWFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciB3aXRoIGFuIGFyYml0cmFyeSBzaXplIHVzaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYzYyN2RkNGM1ZjMwYjdhNzc1YTdhZWEzYmVjNWQ4MyIgdGl0bGU9IkFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiI+dGpBbGxvYygpPC9hPiBhbmQgbGV0IFR1cmJvSlBFRyBncm93IHRoZSBidWZmZXIgYXMgbmVlZGVkLDwvbGk+Cis8bGk+c2V0IDxjb2RlPipqcGVnQnVmPC9jb2RlPiB0byBOVUxMIHRvIHRlbGwgVHVyYm9KUEVHIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIHlvdSwgb3I8L2xpPgorPGxpPnByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGEgIndvcnN0IGNhc2UiIHNpemUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2N2FjMTJmZWU3OTA3MzI0MmNiMjE2ZTA3YzlmMWY5MCIgdGl0bGU9IlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuLi4iPnRqQnVmU2l6ZSgpPC9hPi4gVGhpcyBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBuZXZlciBoYXMgdG8gYmUgcmUtYWxsb2NhdGVkIChzZXR0aW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyIgdGl0bGU9IkRpc2FibGUgYnVmZmVyIChyZSlhbGxvY2F0aW9uLiI+VEpGTEFHX05PUkVBTExPQzwvYT4gZ3VhcmFudGVlcyB0aGF0IGl0IHdvbid0IGJlLik8L2xpPgorPC9vbD4KK0lmIHlvdSBjaG9vc2Ugb3B0aW9uIDEsIDxjb2RlPipqcGVnU2l6ZTwvY29kZT4gc2hvdWxkIGJlIHNldCB0byB0aGUgc2l6ZSBvZiB5b3VyIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBJbiBhbnkgY2FzZSwgdW5sZXNzIHlvdSBoYXZlIHNldCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+LCB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gdXBvbiByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTaXplPC90ZD48dGQ+cG9pbnRlciB0byBhbiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgYnVmZmVyLiBJZiA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gcG9pbnRzIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIsIHRoZW4gPGNvZGU+KmpwZWdTaXplPC9jb2RlPiBzaG91bGQgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIFVwb24gcmV0dXJuLCA8Y29kZT4qanBlZ1NpemU8L2NvZGU+IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMuKSBJZiA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gcG9pbnRzIHRvIGEgSlBFRyBpbWFnZSBidWZmZXIgdGhhdCBpcyBiZWluZyByZXVzZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gb25lIG9mIHRoZSBKUEVHIGNvbXByZXNzaW9uIGZ1bmN0aW9ucywgdGhlbiA8Y29kZT4qanBlZ1NpemU8L2NvZGU+IGlzIGlnbm9yZWQuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ1F1YWw8L3RkPjx0ZD50aGUgaW1hZ2UgcXVhbGl0eSBvZiB0aGUgZ2VuZXJhdGVkIEpQRUcgaW1hZ2UgKDEgPSB3b3JzdCwgMTAwID0gYmVzdCk8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPmZsYWdzPC9hPjwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiIHRpdGxlPSJSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4iPnRqR2V0RXJyb3JDb2RlKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMjllYzVkZmJkMmQ4NGI4NzI0ZTk1MWQ2ZmEwZDVkOWUiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIGludCB0akNvbXByZXNzRnJvbVlVVlBsYW5lcyA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4mIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGFuZGxlPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5jb25zdCB1bnNpZ25lZCBjaGFyICoqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnNyY1BsYW5lczwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPndpZHRoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5jb25zdCBpbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdHJpZGVzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGVpZ2h0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3Vic2FtcDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+dW5zaWduZWQgY2hhciAqKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+anBlZ1NpemU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnUXVhbDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmZsYWdzPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkNvbXByZXNzIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgaW50byBhIEpQRUcgaW1hZ2UuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3JjUGxhbmVzPC90ZD48dGQ+YW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyAob3IganVzdCBhIFkgcGxhbmUsIGlmIGNvbXByZXNzaW5nIGEgZ3JheXNjYWxlIGltYWdlKSB0aGF0IGNvbnRhaW4gYSBZVVYgaW1hZ2UgdG8gYmUgY29tcHJlc3NlZC4gVGhlc2UgcGxhbmVzIGNhbiBiZSBjb250aWd1b3VzIG9yIG5vbi1jb250aWd1b3VzIGluIG1lbW9yeS4gVGhlIHNpemUgb2YgZWFjaCBwbGFuZSBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIHJldHVybmVkIGJ5IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiNGFiN2IyNGY2ZTc5N2Q3OWFiYWFhNjcwMzczOTYxZCIgdGl0bGU9IlRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuLi4iPnRqUGxhbmVTaXplWVVWKCk8L2E+IGZvciB0aGUgZ2l2ZW4gaW1hZ2Ugd2lkdGgsIGhlaWdodCwgc3RyaWRlcywgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiBSZWZlciB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI1lVVm5vdGVzIj5ZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzPC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+d2lkdGggKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZS4gSWYgdGhlIHdpZHRoIGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UgYmxvY2sgd2lkdGggKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiIHRpdGxlPSJNQ1UgYmxvY2sgd2lkdGggKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIj50ak1DVVdpZHRoPC9hPiksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3RyaWRlczwvdGQ+PHRkPmFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgbGluZSBpbiB0aGUgY29ycmVzcG9uZGluZyBwbGFuZSBvZiB0aGUgWVVWIHNvdXJjZSBpbWFnZS4gU2V0dGluZyB0aGUgc3RyaWRlIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjWVVWbm90ZXMiPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2E+LikgSWYgPGNvZGU+c3RyaWRlczwvY29kZT4gaXMgTlVMTCwgdGhlbiB0aGUgc3RyaWRlcyBmb3IgYWxsIHBsYW5lcyB3aWxsIGJlIHNldCB0byB0aGVpciByZXNwZWN0aXZlIHBsYW5lIHdpZHRocy4gWW91IGNhbiBhZGp1c3QgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gc3BlY2lmeSBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIGxpbmUgcGFkZGluZyBpbiBlYWNoIHBsYW5lIG9yIHRvIGNyZWF0ZSBhIEpQRUcgaW1hZ2UgZnJvbSBhIHN1YnJlZ2lvbiBvZiBhIGxhcmdlciBZVVYgcGxhbmFyIGltYWdlLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlLiBJZiB0aGUgaGVpZ2h0IGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIiB0aXRsZT0iTUNVIGJsb2NrIGhlaWdodCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVSGVpZ2h0PC9hPiksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3Vic2FtcDwvdGQ+PHRkPnRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBzb3VyY2UgaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2E+Lik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnQnVmPC90ZD48dGQ+YWRkcmVzcyBvZiBhIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBKUEVHIGltYWdlLiBUdXJib0pQRUcgaGFzIHRoZSBhYmlsaXR5IHRvIHJlYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyIHRvIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiBUaHVzLCB5b3UgY2FuIGNob29zZSB0bzo8b2wgdHlwZT0iMSI+Cis8bGk+cHJlLWFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciB3aXRoIGFuIGFyYml0cmFyeSBzaXplIHVzaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYzYyN2RkNGM1ZjMwYjdhNzc1YTdhZWEzYmVjNWQ4MyIgdGl0bGU9IkFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiI+dGpBbGxvYygpPC9hPiBhbmQgbGV0IFR1cmJvSlBFRyBncm93IHRoZSBidWZmZXIgYXMgbmVlZGVkLDwvbGk+Cis8bGk+c2V0IDxjb2RlPipqcGVnQnVmPC9jb2RlPiB0byBOVUxMIHRvIHRlbGwgVHVyYm9KUEVHIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIHlvdSwgb3I8L2xpPgorPGxpPnByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGEgIndvcnN0IGNhc2UiIHNpemUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2N2FjMTJmZWU3OTA3MzI0MmNiMjE2ZTA3YzlmMWY5MCIgdGl0bGU9IlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuLi4iPnRqQnVmU2l6ZSgpPC9hPi4gVGhpcyBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBuZXZlciBoYXMgdG8gYmUgcmUtYWxsb2NhdGVkIChzZXR0aW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyIgdGl0bGU9IkRpc2FibGUgYnVmZmVyIChyZSlhbGxvY2F0aW9uLiI+VEpGTEFHX05PUkVBTExPQzwvYT4gZ3VhcmFudGVlcyB0aGF0IGl0IHdvbid0IGJlLik8L2xpPgorPC9vbD4KK0lmIHlvdSBjaG9vc2Ugb3B0aW9uIDEsIDxjb2RlPipqcGVnU2l6ZTwvY29kZT4gc2hvdWxkIGJlIHNldCB0byB0aGUgc2l6ZSBvZiB5b3VyIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBJbiBhbnkgY2FzZSwgdW5sZXNzIHlvdSBoYXZlIHNldCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+LCB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gdXBvbiByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTaXplPC90ZD48dGQ+cG9pbnRlciB0byBhbiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgYnVmZmVyLiBJZiA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gcG9pbnRzIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIsIHRoZW4gPGNvZGU+KmpwZWdTaXplPC9jb2RlPiBzaG91bGQgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIFVwb24gcmV0dXJuLCA8Y29kZT4qanBlZ1NpemU8L2NvZGU+IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMuKSBJZiA8Y29kZT4qanBlZ0J1ZjwvY29kZT4gcG9pbnRzIHRvIGEgSlBFRyBpbWFnZSBidWZmZXIgdGhhdCBpcyBiZWluZyByZXVzZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gb25lIG9mIHRoZSBKUEVHIGNvbXByZXNzaW9uIGZ1bmN0aW9ucywgdGhlbiA8Y29kZT4qanBlZ1NpemU8L2NvZGU+IGlzIGlnbm9yZWQuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ1F1YWw8L3RkPjx0ZD50aGUgaW1hZ2UgcXVhbGl0eSBvZiB0aGUgZ2VuZXJhdGVkIEpQRUcgaW1hZ2UgKDEgPSB3b3JzdCwgMTAwID0gYmVzdCk8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPmZsYWdzPC9hPjwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiIHRpdGxlPSJSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4iPnRqR2V0RXJyb3JDb2RlKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNzBhYmJmMzhmNzdhMjZmZDZkYTg4MTNiZWY5NmY2OTUiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIGludCB0akRlY29kZVlVViA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4mIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGFuZGxlPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5jb25zdCB1bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3JjQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGFkPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3Vic2FtcDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+dW5zaWduZWQgY2hhciAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmRzdEJ1ZjwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPndpZHRoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGl0Y2g8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5waXhlbEZvcm1hdDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmZsYWdzPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkRlY29kZSBhIFlVViBwbGFuYXIgaW1hZ2UgaW50byBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlLiA8L3A+Cis8cD5UaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yIGNvbnZlcnNpb24gcm91dGluZXMgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMgYnV0IGRvZXMgbm90IGV4ZWN1dGUgYW55IG9mIHRoZSBvdGhlciBzdGVwcyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIHByb2Nlc3MuPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhhbmRsZTwvdGQ+PHRkPmEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnNyY0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlIHRvIGJlIGRlY29kZWQuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJiZTJiOTk2OWQ0ZGY5ZWNjZTliMDVkZWVkMjczMTk0IiB0aXRsZT0iVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuLi4iPnRqQnVmU2l6ZVlVVjIoKTwvYT4gZm9yIHRoZSBnaXZlbiBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIFRoZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIHNob3VsZCBiZSBzdG9yZWQgc2VxdWVudGlhbGx5IGluIHRoZSBzb3VyY2UgYnVmZmVyIChyZWZlciB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI1lVVm5vdGVzIj5ZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGFkPC90ZD48dGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhhdCB0aGUgd2lkdGggb2YgZWFjaCBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIFlVViBzb3VyY2UgaW1hZ2UgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIChtdXN0IGJlIGEgcG93ZXIgb2YgMi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3Vic2FtcDwvdGQ+PHRkPnRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYgc291cmNlIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5DaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZHN0QnVmPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGRlY29kZWQgaW1hZ2UuIFRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZSA8Y29kZT5waXRjaCAqIGhlaWdodDwvY29kZT4gYnl0ZXMgaW4gc2l6ZSwgYnV0IHRoZSA8Y29kZT5kc3RCdWY8L2NvZGU+IHBvaW50ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBkZWNvZGUgaW50byBhIHNwZWNpZmljIHJlZ2lvbiBvZiBhIGxhcmdlciBidWZmZXIuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+d2lkdGg8L3RkPjx0ZD53aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZXM8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXRjaDwvdGQ+PHRkPmJ5dGVzIHBlciBsaW5lIGluIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlIDxjb2RlPndpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+IGlmIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBpcyB1bnBhZGRlZCwgb3IgPGNvZGU+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIiB0aXRsZT0iUGFkIHRoZSBnaXZlbiB3aWR0aCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnkuIj5USlBBRDwvYT4od2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XSk8L2NvZGU+IGlmIGVhY2ggbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2Ugc2hvdWxkIGJlIHBhZGRlZCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnksIGFzIGlzIHRoZSBjYXNlIGZvciBXaW5kb3dzIGJpdG1hcHMuIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGUgcGl0Y2ggcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsIGV0Yy4gU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gPGNvZGU+d2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XTwvY29kZT4uPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGltYWdlczwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnBpeGVsRm9ybWF0PC90ZD48dGQ+cGl4ZWwgZm9ybWF0IG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+UGl4ZWwgZm9ybWF0czwvYT4uKTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmZsYWdzPC90ZD48dGQ+dGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+ZmxhZ3M8L2E+PC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cjIoKTwvYT4gYW5kIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCIgdGl0bGU9IlJldHVybnMgYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiI+dGpHZXRFcnJvckNvZGUoKTwvYT4uKSA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2ExMGU4MzdjMDdmYTlkMjU3NzA1NjViMjM3ZDM4OThkOSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgaW50IHRqRGVjb2RlWVVWUGxhbmVzIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiomIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3JjUGxhbmVzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5jb25zdCBpbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdHJpZGVzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3Vic2FtcDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+dW5zaWduZWQgY2hhciAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmRzdEJ1ZjwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPndpZHRoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGl0Y2g8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5waXhlbEZvcm1hdDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmZsYWdzPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkRlY29kZSBhIHNldCBvZiBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIGludG8gYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZS4gPC9wPgorPHA+VGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBhY2NlbGVyYXRlZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjIGJ1dCBkb2VzIG5vdCBleGVjdXRlIGFueSBvZiB0aGUgb3RoZXIgc3RlcHMgaW4gdGhlIEpQRUcgZGVjb21wcmVzc2lvbiBwcm9jZXNzLjwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5zcmNQbGFuZXM8L3RkPjx0ZD5hbiBhcnJheSBvZiBwb2ludGVycyB0byBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIChvciBqdXN0IGEgWSBwbGFuZSwgaWYgZGVjb2RpbmcgYSBncmF5c2NhbGUgaW1hZ2UpIHRoYXQgY29udGFpbiBhIFlVViBpbWFnZSB0byBiZSBkZWNvZGVkLiBUaGVzZSBwbGFuZXMgY2FuIGJlIGNvbnRpZ3VvdXMgb3Igbm9uLWNvbnRpZ3VvdXMgaW4gbWVtb3J5LiBUaGUgc2l6ZSBvZiBlYWNoIHBsYW5lIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWI0YWI3YjI0ZjZlNzk3ZDc5YWJhYWE2NzAzNzM5NjFkIiB0aXRsZT0iVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4uLiI+dGpQbGFuZVNpemVZVVYoKTwvYT4gZm9yIHRoZSBnaXZlbiBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBzdHJpZGVzLCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIFJlZmVyIHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjWVVWbm90ZXMiPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2E+IGZvciBtb3JlIGRldGFpbHMuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3RyaWRlczwvdGQ+PHRkPmFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgbGluZSBpbiB0aGUgY29ycmVzcG9uZGluZyBwbGFuZSBvZiB0aGUgWVVWIHNvdXJjZSBpbWFnZS4gU2V0dGluZyB0aGUgc3RyaWRlIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjWVVWbm90ZXMiPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2E+LikgSWYgPGNvZGU+c3RyaWRlczwvY29kZT4gaXMgTlVMTCwgdGhlbiB0aGUgc3RyaWRlcyBmb3IgYWxsIHBsYW5lcyB3aWxsIGJlIHNldCB0byB0aGVpciByZXNwZWN0aXZlIHBsYW5lIHdpZHRocy4gWW91IGNhbiBhZGp1c3QgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gc3BlY2lmeSBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIGxpbmUgcGFkZGluZyBpbiBlYWNoIHBsYW5lIG9yIHRvIGRlY29kZSBhIHN1YnJlZ2lvbiBvZiBhIGxhcmdlciBZVVYgcGxhbmFyIGltYWdlLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnN1YnNhbXA8L3RkPjx0ZD50aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWIHNvdXJjZSBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+Q2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9uczwvYT4uKTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvZGVkIGltYWdlLiBUaGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUgPGNvZGU+cGl0Y2ggKiBoZWlnaHQ8L2NvZGU+IGJ5dGVzIGluIHNpemUsIGJ1dCB0aGUgPGNvZGU+ZHN0QnVmPC9jb2RlPiBwb2ludGVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGVjb2RlIGludG8gYSBzcGVjaWZpYyByZWdpb24gb2YgYSBsYXJnZXIgYnVmZmVyLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+d2lkdGggKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW1hZ2VzPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGl0Y2g8L3RkPjx0ZD5ieXRlcyBwZXIgbGluZSBpbiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuIE5vcm1hbGx5LCB0aGlzIHNob3VsZCBiZSA8Y29kZT53aWR0aCAqIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyIgdGl0bGU9IlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIj50alBpeGVsU2l6ZTwvYT5bcGl4ZWxGb3JtYXRdPC9jb2RlPiBpZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaXMgdW5wYWRkZWQsIG9yIDxjb2RlPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSIgdGl0bGU9IlBhZCB0aGUgZ2l2ZW4gd2lkdGggdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LiI+VEpQQUQ8L2E+KHdpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF0pPC9jb2RlPiBpZiBlYWNoIGxpbmUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlIHNob3VsZCBiZSBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LCBhcyBpcyB0aGUgY2FzZSBmb3IgV2luZG93cyBiaXRtYXBzLiBZb3UgY2FuIGFsc28gYmUgY2xldmVyIGFuZCB1c2UgdGhlIHBpdGNoIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDxjb2RlPndpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZXM8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXhlbEZvcm1hdDwvdGQ+PHRkPnBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPlBpeGVsIGZvcm1hdHM8L2E+Lik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPmZsYWdzPC9hPjwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiIHRpdGxlPSJSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4iPnRqR2V0RXJyb3JDb2RlKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZTllY2NlZjhiNjgyYTQ4ZjQzYTkxMTdjMjMxZWQwMTMiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIGludCB0akRlY29tcHJlc3MyIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdTaXplPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZHN0QnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+d2lkdGg8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5waXRjaDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmhlaWdodDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnBpeGVsRm9ybWF0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZmxhZ3M8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+RGVjb21wcmVzcyBhIEpQRUcgaW1hZ2UgdG8gYW4gUkdCLCBncmF5c2NhbGUsIG9yIENNWUsgaW1hZ2UuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnQnVmPC90ZD48dGQ+cG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlIHRvIGRlY29tcHJlc3M8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnU2l6ZTwvdGQ+PHRkPnNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuIFRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZSA8Y29kZT5waXRjaCAqIHNjYWxlZEhlaWdodDwvY29kZT4gYnl0ZXMgaW4gc2l6ZSwgd2hlcmUgPGNvZGU+c2NhbGVkSGVpZ2h0PC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiIgdGl0bGU9IkNvbXB1dGUgdGhlIHNjYWxlZCB2YWx1ZSBvZiBkaW1lbnNpb24gdXNpbmcgdGhlIGdpdmVuIHNjYWxpbmcgZmFjdG9yLiI+VEpTQ0FMRUQoKTwvYT4gd2l0aCB0aGUgSlBFRyBpbWFnZSBoZWlnaHQgYW5kIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGJ5IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjMzg1NDQ3NjAwNmIxMDc4N2JkMTI4ZjdlZGU0ODA1NyIgdGl0bGU9IlJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyLi4uIj50akdldFNjYWxpbmdGYWN0b3JzKCk8L2E+LiBUaGUgPGNvZGU+ZHN0QnVmPC9jb2RlPiBwb2ludGVyIG1heSBhbHNvIGJlIHVzZWQgdG8gZGVjb21wcmVzcyBpbnRvIGEgc3BlY2lmaWMgcmVnaW9uIG9mIGEgbGFyZ2VyIGJ1ZmZlci48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPmRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBJZiB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIHdpZHRoLiBJZiA8Y29kZT53aWR0aDwvY29kZT4gaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgaGVpZ2h0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXRjaDwvdGQ+PHRkPmJ5dGVzIHBlciBsaW5lIGluIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gTm9ybWFsbHksIHRoaXMgaXMgPGNvZGU+c2NhbGVkV2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XTwvY29kZT4gaWYgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSBpcyB1bnBhZGRlZCwgZWxzZSA8Y29kZT48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiIHRpdGxlPSJQYWQgdGhlIGdpdmVuIHdpZHRoIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeS4iPlRKUEFEPC9hPihzY2FsZWRXaWR0aCAqIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyIgdGl0bGU9IlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIj50alBpeGVsU2l6ZTwvYT5bcGl4ZWxGb3JtYXRdKTwvY29kZT4gaWYgZWFjaCBsaW5lIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgYXMgaXMgdGhlIGNhc2UgZm9yIFdpbmRvd3MgYml0bWFwcy4gKE5PVEU6IDxjb2RlPnNjYWxlZFdpZHRoPC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiIgdGl0bGU9IkNvbXB1dGUgdGhlIHNjYWxlZCB2YWx1ZSBvZiBkaW1lbnNpb24gdXNpbmcgdGhlIGdpdmVuIHNjYWxpbmcgZmFjdG9yLiI+VEpTQ0FMRUQoKTwvYT4gd2l0aCB0aGUgSlBFRyBpbWFnZSB3aWR0aCBhbmQgb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWMzODU0NDc2MDA2YjEwNzg3YmQxMjhmN2VkZTQ4MDU3IiB0aXRsZT0iUmV0dXJucyBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMgdGhhdCB0aGUgSlBFRyBkZWNvbXByZXNzb3IgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBUdXIuLi4iPnRqR2V0U2NhbGluZ0ZhY3RvcnMoKTwvYT4uKSBZb3UgY2FuIGFsc28gYmUgY2xldmVyIGFuZCB1c2UgdGhlIHBpdGNoIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDxjb2RlPnNjYWxlZFdpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gSWYgdGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgaGVpZ2h0LiBJZiA8Y29kZT5oZWlnaHQ8L2NvZGU+IGlzIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIHdpZHRoIHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXhlbEZvcm1hdDwvdGQ+PHRkPnBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPlBpeGVsIGZvcm1hdHM8L2E+Lik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPmZsYWdzPC9hPjwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiIHRpdGxlPSJSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4iPnRqR2V0RXJyb3JDb2RlKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMDU5NTY4MTA5NmJiYTcxOTljYzZmMzUzM2NiMjVmNzciPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIGludCB0akRlY29tcHJlc3NIZWFkZXIzIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdTaXplPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50IComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGVpZ2h0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnU3Vic2FtcDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50IComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+anBlZ0NvbG9yc3BhY2U8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+UmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYSBKUEVHIGltYWdlIHdpdGhvdXQgZGVjb21wcmVzc2luZyBpdC4gPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhhbmRsZTwvdGQ+PHRkPmEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdCdWY8L3RkPjx0ZD5wb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBKUEVHIGltYWdlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ1NpemU8L3RkPjx0ZD5zaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcyk8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIEpQRUcgaW1hZ2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oZWlnaHQ8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgSlBFRyBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTdWJzYW1wPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbnRlZ2VyIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIHdoZW4gdGhlIEpQRUcgaW1hZ2Ugd2FzIGNvbXByZXNzZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2E+Lik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnQ29sb3JzcGFjZTwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSBvbmUgb2YgdGhlIEpQRUcgY29sb3JzcGFjZSBjb25zdGFudHMsIGluZGljYXRpbmcgdGhlIGNvbG9yc3BhY2Ugb2YgdGhlIEpQRUcgaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjAiPkpQRUcgY29sb3JzcGFjZXM8L2E+Lik8L3RkPjwvdHI+CisgIDwvdGFibGU+CisgIDwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD4wIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFlYWQ4NTc0ZjlmMzlmYmFmYzZiNDk3MTI0ZTdhYWZhIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyMigpPC9hPiBhbmQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTQxNGZlZWZmYmY4NjBlYmQzMWM3NDVkZjIwM2RlNDEwIiB0aXRsZT0iUmV0dXJucyBhIGNvZGUgaW5kaWNhdGluZyB0aGUgc2V2ZXJpdHkgb2YgdGhlIGxhc3QgZXJyb3IuIj50akdldEVycm9yQ29kZSgpPC9hPi4pIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTA0ZDFlODM5ZmY5YTA4NjBkZDE0NzVjZmY3OGQzMzY0Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzVG9ZVVYyIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdTaXplPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZHN0QnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+d2lkdGg8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5wYWQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5mbGFnczwvZW0+JiMxNjA7PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD48dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5EZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhIFlVViBwbGFuYXIgaW1hZ2UuIDwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvciBjb252ZXJzaW9uIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0IgaW1hZ2UuPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhhbmRsZTwvdGQ+PHRkPmEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdCdWY8L3RkPjx0ZD5wb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIEpQRUcgaW1hZ2UgdG8gZGVjb21wcmVzczwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTaXplPC90ZD48dGQ+c2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZHN0QnVmPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFlVViBpbWFnZS4gVXNlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyYmUyYjk5NjlkNGRmOWVjY2U5YjA1ZGVlZDI3MzE5NCIgdGl0bGU9IlRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hciBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLi4uIj50akJ1ZlNpemVZVVYyKCk8L2E+IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgdGhpcyBidWZmZXIgYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGFuZCBsZXZlbCBvZiBzdWJzYW1wbGluZy4gVGhlIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgd2lsbCBiZSBzdG9yZWQgc2VxdWVudGlhbGx5IGluIHRoZSBidWZmZXIgKHJlZmVyIHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjWVVWbm90ZXMiPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2E+Lik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPmRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gSWYgdGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZSBKUEVHIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCB3aWR0aC4gSWYgPGNvZGU+d2lkdGg8L2NvZGU+IGlzIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIGhlaWdodCB3aWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuIElmIHRoZSBzY2FsZWQgd2lkdGggaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jayB3aWR0aCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyIgdGl0bGU9Ik1DVSBibG9jayB3aWR0aCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVV2lkdGg8L2E+KSwgdGhlbiBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5wYWQ8L3RkPjx0ZD50aGUgd2lkdGggb2YgZWFjaCBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIFlVViBpbWFnZSB3aWxsIGJlIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGlzIG51bWJlciBvZiBieXRlcyAobXVzdCBiZSBhIHBvd2VyIG9mIDIuKSBUbyBnZW5lcmF0ZSBpbWFnZXMgc3VpdGFibGUgZm9yIFggVmlkZW8sIDxjb2RlPnBhZDwvY29kZT4gc2hvdWxkIGJlIHNldCB0byA0LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UuIElmIHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIGhlaWdodC4gSWYgPGNvZGU+aGVpZ2h0PC9jb2RlPiBpcyBzZXQgdG8gMCwgdGhlbiBvbmx5IHRoZSB3aWR0aCB3aWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuIElmIHRoZSBzY2FsZWQgaGVpZ2h0IGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIiB0aXRsZT0iTUNVIGJsb2NrIGhlaWdodCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVSGVpZ2h0PC9hPiksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZmxhZ3M8L3RkPjx0ZD50aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWNiMjMzY2ZkNzIyZDY2ZDFjY2JmNDhhN2RlODFmMGUwIj5mbGFnczwvYT48L3RkPjwvdHI+CisgIDwvdGFibGU+CisgIDwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD4wIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFlYWQ4NTc0ZjlmMzlmYmFmYzZiNDk3MTI0ZTdhYWZhIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyMigpPC9hPiBhbmQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTQxNGZlZWZmYmY4NjBlYmQzMWM3NDVkZjIwM2RlNDEwIiB0aXRsZT0iUmV0dXJucyBhIGNvZGUgaW5kaWNhdGluZyB0aGUgc2V2ZXJpdHkgb2YgdGhlIGxhc3QgZXJyb3IuIj50akdldEVycm9yQ29kZSgpPC9hPi4pIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWE1OWY5MDFhNTI1OGFkYTViZDAxODVhZDU5MzY4NTQwIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzVG9ZVVZQbGFuZXMgPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmhhbmRsZTwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+Y29uc3QgdW5zaWduZWQgY2hhciAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdCdWY8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnVuc2lnbmVkIGxvbmcmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+anBlZ1NpemU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnVuc2lnbmVkIGNoYXIgKiomIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZHN0UGxhbmVzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+d2lkdGg8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnN0cmlkZXM8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5mbGFnczwvZW0+JiMxNjA7PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD48dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5EZWNvbXByZXNzIGEgSlBFRyBpbWFnZSBpbnRvIHNlcGFyYXRlIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMuIDwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvciBjb252ZXJzaW9uIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0IgaW1hZ2UuPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhhbmRsZTwvdGQ+PHRkPmEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdCdWY8L3RkPjx0ZD5wb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIEpQRUcgaW1hZ2UgdG8gZGVjb21wcmVzczwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTaXplPC90ZD48dGQ+c2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZHN0UGxhbmVzPC90ZD48dGQ+YW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyAob3IganVzdCBhIFkgcGxhbmUsIGlmIGRlY29tcHJlc3NpbmcgYSBncmF5c2NhbGUgaW1hZ2UpIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgaW1hZ2UuIFRoZXNlIHBsYW5lcyBjYW4gYmUgY29udGlndW91cyBvciBub24tY29udGlndW91cyBpbiBtZW1vcnkuIFVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYjRhYjdiMjRmNmU3OTdkNzlhYmFhYTY3MDM3Mzk2MWQiIHRpdGxlPSJUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLi4uIj50alBsYW5lU2l6ZVlVVigpPC9hPiB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIGVhY2ggcGxhbmUgYmFzZWQgb24gdGhlIHNjYWxlZCBpbWFnZSB3aWR0aCwgc2NhbGVkIGltYWdlIGhlaWdodCwgc3RyaWRlcywgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiBSZWZlciB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI1lVVm5vdGVzIj5ZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzPC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+ZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiBJZiB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIHdpZHRoLiBJZiA8Y29kZT53aWR0aDwvY29kZT4gaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgaGVpZ2h0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4gSWYgdGhlIHNjYWxlZCB3aWR0aCBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgTUNVIGJsb2NrIHdpZHRoIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIiB0aXRsZT0iTUNVIGJsb2NrIHdpZHRoIChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiI+dGpNQ1VXaWR0aDwvYT4pLCB0aGVuIGFuIGludGVybWVkaWF0ZSBidWZmZXIgY29weSB3aWxsIGJlIHBlcmZvcm1lZCB3aXRoaW4gVHVyYm9KUEVHLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnN0cmlkZXM8L3RkPjx0ZD5hbiBhcnJheSBvZiBpbnRlZ2VycywgZWFjaCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIG91dHB1dCBpbWFnZS4gU2V0dGluZyB0aGUgc3RyaWRlIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBzY2FsZWQgcGxhbmUgd2lkdGggKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI1lVVm5vdGVzIj5ZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzPC9hPi4pIElmIDxjb2RlPnN0cmlkZXM8L2NvZGU+IGlzIE5VTEwsIHRoZW4gdGhlIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzY2FsZWQgcGxhbmUgd2lkdGhzLiBZb3UgY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBsaW5lIHBhZGRpbmcgdG8gZWFjaCBwbGFuZSBvciB0byBkZWNvbXByZXNzIHRoZSBKUEVHIGltYWdlIGludG8gYSBzdWJyZWdpb24gb2YgYSBsYXJnZXIgWVVWIHBsYW5hciBpbWFnZS48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oZWlnaHQ8L3RkPjx0ZD5kZXNpcmVkIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiBJZiB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZSBKUEVHIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCBoZWlnaHQuIElmIDxjb2RlPmhlaWdodDwvY29kZT4gaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgd2lkdGggd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLiBJZiB0aGUgc2NhbGVkIGhlaWdodCBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgTUNVIGJsb2NrIGhlaWdodCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiIgdGl0bGU9Ik1DVSBibG9jayBoZWlnaHQgKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIj50ak1DVUhlaWdodDwvYT4pLCB0aGVuIGFuIGludGVybWVkaWF0ZSBidWZmZXIgY29weSB3aWxsIGJlIHBlcmZvcm1lZCB3aXRoaW4gVHVyYm9KUEVHLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmZsYWdzPC90ZD48dGQ+dGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+ZmxhZ3M8L2E+PC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cjIoKTwvYT4gYW5kIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCIgdGl0bGU9IlJldHVybnMgYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiI+dGpHZXRFcnJvckNvZGUoKTwvYT4uKSA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3NWYzNTVmYTI3MjI1YmExYTRlZTM5MmM4NTIzOTRkMiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgaW50IHRqRGVzdHJveSA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4mIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGFuZGxlPC9lbT48L3RkPjx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5EZXN0cm95IGEgVHVyYm9KUEVHIGNvbXByZXNzb3IsIGRlY29tcHJlc3Nvciwgb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBjb21wcmVzc29yLCBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2U8L3RkPjwvdHI+CisgIDwvdGFibGU+CisgIDwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD4wIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFlYWQ4NTc0ZjlmMzlmYmFmYzZiNDk3MTI0ZTdhYWZhIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyMigpPC9hPi4pIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWM1MTliOTIyY2RmNDQ2ZTk3ZDBjZGNiYTUxMzYzNmJmIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCBpbnQgdGpFbmNvZGVZVVYzIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zcmNCdWY8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnBpdGNoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGVpZ2h0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGl4ZWxGb3JtYXQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5kc3RCdWY8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5wYWQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdWJzYW1wPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZmxhZ3M8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+RW5jb2RlIGFuIFJHQiBvciBncmF5c2NhbGUgaW1hZ2UgaW50byBhIFlVViBwbGFuYXIgaW1hZ2UuIDwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYWNjZWxlcmF0ZWQgY29sb3IgY29udmVyc2lvbiByb3V0aW5lcyBpbiB0aGUgdW5kZXJseWluZyBjb2RlYyBidXQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgb2YgdGhlIG90aGVyIHN0ZXBzIGluIHRoZSBKUEVHIGNvbXByZXNzaW9uIHByb2Nlc3MuPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhhbmRsZTwvdGQ+PHRkPmEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5zcmNCdWY8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIFJHQiBvciBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGVuY29kZWQ8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPndpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXRjaDwvdGQ+PHRkPmJ5dGVzIHBlciBsaW5lIGluIHRoZSBzb3VyY2UgaW1hZ2UuIE5vcm1hbGx5LCB0aGlzIHNob3VsZCBiZSA8Y29kZT53aWR0aCAqIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyIgdGl0bGU9IlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIj50alBpeGVsU2l6ZTwvYT5bcGl4ZWxGb3JtYXRdPC9jb2RlPiBpZiB0aGUgaW1hZ2UgaXMgdW5wYWRkZWQsIG9yIDxjb2RlPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSIgdGl0bGU9IlBhZCB0aGUgZ2l2ZW4gd2lkdGggdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LiI+VEpQQUQ8L2E+KHdpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF0pPC9jb2RlPiBpZiBlYWNoIGxpbmUgb2YgdGhlIGltYWdlIGlzIHBhZGRlZCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnksIGFzIGlzIHRoZSBjYXNlIGZvciBXaW5kb3dzIGJpdG1hcHMuIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDxjb2RlPndpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGl4ZWxGb3JtYXQ8L3RkPjx0ZD5waXhlbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+UGl4ZWwgZm9ybWF0czwvYT4uKTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgaW1hZ2UuIFVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMmJlMmI5OTY5ZDRkZjllY2NlOWIwNWRlZWQyNzMxOTQiIHRpdGxlPSJUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4uLiI+dGpCdWZTaXplWVVWMigpPC9hPiB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIFRoZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIHdpbGwgYmUgc3RvcmVkIHNlcXVlbnRpYWxseSBpbiB0aGUgYnVmZmVyIChyZWZlciB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI1lVVm5vdGVzIj5ZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGFkPC90ZD48dGQ+dGhlIHdpZHRoIG9mIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBZVVYgaW1hZ2Ugd2lsbCBiZSBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhpcyBudW1iZXIgb2YgYnl0ZXMgKG11c3QgYmUgYSBwb3dlciBvZiAyLikgVG8gZ2VuZXJhdGUgaW1hZ2VzIHN1aXRhYmxlIGZvciBYIFZpZGVvLCA8Y29kZT5wYWQ8L2NvZGU+IHNob3VsZCBiZSBzZXQgdG8gNC48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5zdWJzYW1wPC90ZD48dGQ+dGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBZVVYgaW1hZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2E+LikgVG8gZ2VuZXJhdGUgaW1hZ2VzIHN1aXRhYmxlIGZvciBYIFZpZGVvLCA8Y29kZT5zdWJzYW1wPC9jb2RlPiBzaG91bGQgYmUgc2V0IHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhNjMwODVkYmY2ODNjZmUzOWU1MTNjZGI2MzQzZTM3MzciPlRKU0FNUF80MjA8L2E+LiBUaGlzIHByb2R1Y2VzIGFuIGltYWdlIGNvbXBhdGlibGUgd2l0aCB0aGUgSTQyMCAoQUtBICJZVVY0MjBQIikgZm9ybWF0LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmZsYWdzPC90ZD48dGQ+dGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+ZmxhZ3M8L2E+PC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cjIoKTwvYT4gYW5kIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCIgdGl0bGU9IlJldHVybnMgYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiI+dGpHZXRFcnJvckNvZGUoKTwvYT4uKSA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FlMmQwNGM3MjQ1N2ZlN2Y0ZDYwY2Y3OGFiMWIxZmViMSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgaW50IHRqRW5jb2RlWVVWUGxhbmVzIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zcmNCdWY8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnBpdGNoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGVpZ2h0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGl4ZWxGb3JtYXQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnVuc2lnbmVkIGNoYXIgKiomIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZHN0UGxhbmVzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdHJpZGVzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+c3Vic2FtcDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmZsYWdzPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkVuY29kZSBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlIGludG8gc2VwYXJhdGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcy4gPC9wPgorPHA+VGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBhY2NlbGVyYXRlZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjIGJ1dCBkb2VzIG5vdCBleGVjdXRlIGFueSBvZiB0aGUgb3RoZXIgc3RlcHMgaW4gdGhlIEpQRUcgY29tcHJlc3Npb24gcHJvY2Vzcy48L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGFuZGxlPC90ZD48dGQ+YSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnNyY0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgUkdCIG9yIGdyYXlzY2FsZSBwaXhlbHMgdG8gYmUgZW5jb2RlZDwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+d2lkdGggKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnBpdGNoPC90ZD48dGQ+Ynl0ZXMgcGVyIGxpbmUgaW4gdGhlIHNvdXJjZSBpbWFnZS4gTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlIDxjb2RlPndpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+IGlmIHRoZSBpbWFnZSBpcyB1bnBhZGRlZCwgb3IgPGNvZGU+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIiB0aXRsZT0iUGFkIHRoZSBnaXZlbiB3aWR0aCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnkuIj5USlBBRDwvYT4od2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XSk8L2NvZGU+IGlmIGVhY2ggbGluZSBvZiB0aGUgaW1hZ2UgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgYXMgaXMgdGhlIGNhc2UgZm9yIFdpbmRvd3MgYml0bWFwcy4gWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsIGV0Yy4gU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gPGNvZGU+d2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XTwvY29kZT4uPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXhlbEZvcm1hdDwvdGQ+PHRkPnBpeGVsIGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj5QaXhlbCBmb3JtYXRzPC9hPi4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZHN0UGxhbmVzPC90ZD48dGQ+YW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyAob3IganVzdCBhIFkgcGxhbmUsIGlmIGdlbmVyYXRpbmcgYSBncmF5c2NhbGUgaW1hZ2UpIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBlbmNvZGVkIGltYWdlLiBUaGVzZSBwbGFuZXMgY2FuIGJlIGNvbnRpZ3VvdXMgb3Igbm9uLWNvbnRpZ3VvdXMgaW4gbWVtb3J5LiBVc2UgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWI0YWI3YjI0ZjZlNzk3ZDc5YWJhYWE2NzAzNzM5NjFkIiB0aXRsZT0iVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4uLiI+dGpQbGFuZVNpemVZVVYoKTwvYT4gdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciBlYWNoIHBsYW5lIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBzdHJpZGVzLCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIFJlZmVyIHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjWVVWbm90ZXMiPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2E+IGZvciBtb3JlIGRldGFpbHMuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3RyaWRlczwvdGQ+PHRkPmFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgbGluZSBpbiB0aGUgY29ycmVzcG9uZGluZyBwbGFuZSBvZiB0aGUgb3V0cHV0IGltYWdlLiBTZXR0aW5nIHRoZSBzdHJpZGUgZm9yIGFueSBwbGFuZSB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHBsYW5lIHdpZHRoIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNZVVZub3RlcyI+WVVWIEltYWdlIEZvcm1hdCBOb3RlczwvYT4uKSBJZiA8Y29kZT5zdHJpZGVzPC9jb2RlPiBpcyBOVUxMLCB0aGVuIHRoZSBzdHJpZGVzIGZvciBhbGwgcGxhbmVzIHdpbGwgYmUgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgcGxhbmUgd2lkdGhzLiBZb3UgY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBsaW5lIHBhZGRpbmcgdG8gZWFjaCBwbGFuZSBvciB0byBlbmNvZGUgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgc3VicmVnaW9uIG9mIGEgbGFyZ2VyIFlVViBwbGFuYXIgaW1hZ2UuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3Vic2FtcDwvdGQ+PHRkPnRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgWVVWIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5DaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zPC9hPi4pIFRvIGdlbmVyYXRlIGltYWdlcyBzdWl0YWJsZSBmb3IgWCBWaWRlbywgPGNvZGU+c3Vic2FtcDwvY29kZT4gc2hvdWxkIGJlIHNldCB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3Ij5USlNBTVBfNDIwPC9hPi4gVGhpcyBwcm9kdWNlcyBhbiBpbWFnZSBjb21wYXRpYmxlIHdpdGggdGhlIEk0MjAgKEFLQSAiWVVWNDIwUCIpIGZvcm1hdC48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPmZsYWdzPC9hPjwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNDE0ZmVlZmZiZjg2MGViZDMxYzc0NWRmMjAzZGU0MTAiIHRpdGxlPSJSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4iPnRqR2V0RXJyb3JDb2RlKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZWE4NjNkMmRhMGNkYjYwOTU2M2FhYmRmOTE5NjUxNGIiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIHZvaWQgdGpGcmVlIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBjaGFyIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+YnVmZmVyPC9lbT48L3RkPjx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5GcmVlIGFuIGltYWdlIGJ1ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBUdXJib0pQRUcuIDwvcD4KKzxwPllvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgSlBFRyBkZXN0aW5hdGlvbiBidWZmZXIocykgdGhhdCB3ZXJlIGF1dG9tYXRpY2FsbHkgKHJlKWFsbG9jYXRlZCBieSB0aGUgY29tcHJlc3Npb24gYW5kIHRyYW5zZm9ybSBmdW5jdGlvbnMgb3IgdGhhdCB3ZXJlIG1hbnVhbGx5IGFsbG9jYXRlZCB1c2luZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZWM2MjdkZDRjNWYzMGI3YTc3NWE3YWVhM2JlYzVkODMiIHRpdGxlPSJBbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4iPnRqQWxsb2MoKTwvYT4uPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmJ1ZmZlcjwvdGQ+PHRkPmFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBmcmVlPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiBzZWUiPjxkdD5TZWUgQWxzbzwvZHQ+PGRkPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYzYyN2RkNGM1ZjMwYjdhNzc1YTdhZWEzYmVjNWQ4MyIgdGl0bGU9IkFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiI+dGpBbGxvYygpPC9hPiA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgaW50IHRqR2V0RXJyb3JDb2RlIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPjwvdGQ+PHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlJldHVybnMgYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiA8L3A+Cis8cD5TZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiYzE3Y2ZhNTdkMGQ1ZDExZmVhMzVhYzAyNTk1MGZlIj5FcnJvciBjb2RlczwvYT4uPC9wPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CisgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhhbmRsZTwvdGQ+PHRkPmEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IsIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZTwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPmEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4gU2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZSI+RXJyb3IgY29kZXM8L2E+LiA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgY2hhciogdGpHZXRFcnJvclN0cjIgPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmhhbmRsZTwvZW0+PC90ZD48dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+UmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBjb21wcmVzc29yLCBkZWNvbXByZXNzb3IsIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlLCBvciBOVUxMIGlmIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkIGJ5IGEgZ2xvYmFsIGZ1bmN0aW9uIChidXQgbm90ZSB0aGF0IHJldHJpZXZpbmcgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIGEgZ2xvYmFsIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZS4pPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+YSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FjMzg1NDQ3NjAwNmIxMDc4N2JkMTI4ZjdlZGU0ODA1NyI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCI+dGpzY2FsaW5nZmFjdG9yPC9hPiogdGpHZXRTY2FsaW5nRmFjdG9ycyA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50IComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+bnVtc2NhbGluZ2ZhY3RvcnM8L2VtPjwvdGQ+PHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzLiA8L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+bnVtc2NhbGluZ2ZhY3RvcnM8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdDwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPmEgcG9pbnRlciB0byBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMsIG9yIE5VTEwgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhOWQ2M2EwNWZjNmQ4MTNmNGFhZTA2MTA3MDQxYTM3ZTgiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IHRqSW5pdENvbXByZXNzIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj52b2lkJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PC90ZD48dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+Q3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UuIDwvcD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+YSBoYW5kbGUgdG8gdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+LikgPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNTIzMDBlYWMzZjNkOWVmNGJhYjMwM2JjMjQ0ZjYyZDMiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IHRqSW5pdERlY29tcHJlc3MgPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnZvaWQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48L3RkPjx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlLiA8L3A+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPmEgaGFuZGxlIHRvIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFlYWQ4NTc0ZjlmMzlmYmFmYzZiNDk3MTI0ZTdhYWZhIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyMigpPC9hPi4pIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTkyOGJlZmY2YWMyNDhjZWFkZjAxMDg5ZmM2YjQxOTU3Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiB0akluaXRUcmFuc2Zvcm0gPC90ZD4KKyAgICAgICAgICA8dGQ+KDwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnZvaWQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48L3RkPjx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5DcmVhdGUgYSBuZXcgVHVyYm9KUEVHIHRyYW5zZm9ybWVyIGluc3RhbmNlLiA8L3A+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPmEgaGFuZGxlIHRvIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFlYWQ4NTc0ZjlmMzlmYmFmYzZiNDk3MTI0ZTdhYWZhIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyMigpPC9hPi4pIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWZmYmQ4M2MzNzVlNzlmNWRiNGI1YzVkOGFkNDQ2NmU3Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCB1bnNpZ25lZCBjaGFyKiB0akxvYWRJbWFnZSA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+Y29uc3QgY2hhciAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmZpbGVuYW1lPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmFsaWduPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCAqJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnBpeGVsRm9ybWF0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZmxhZ3M8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+TG9hZCBhbiB1bmNvbXByZXNzZWQgaW1hZ2UgZnJvbSBkaXNrIGludG8gbWVtb3J5LiA8L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZmlsZW5hbWU8L3RkPjx0ZD5uYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGFuIHVuY29tcHJlc3NlZCBpbWFnZSBpbiBXaW5kb3dzIEJNUCBvciBQQk1QTFVTIChQUE0vUEdNKSBmb3JtYXQ8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIHVuY29tcHJlc3NlZCBpbWFnZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmFsaWduPC90ZD48dGQ+cm93IGFsaWdubWVudCBvZiB0aGUgaW1hZ2UgYnVmZmVyIHRvIGJlIHJldHVybmVkIChtdXN0IGJlIGEgcG93ZXIgb2YgMi4pIEZvciBpbnN0YW5jZSwgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byA0IHdpbGwgY2F1c2UgYWxsIHJvd3MgaW4gdGhlIGltYWdlIGJ1ZmZlciB0byBiZSBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LCBhbmQgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxIHdpbGwgY2F1c2UgYWxsIHJvd3MgaW4gdGhlIGltYWdlIGJ1ZmZlciB0byBiZSB1bnBhZGRlZC48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oZWlnaHQ8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgdW5jb21wcmVzc2VkIGltYWdlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGl4ZWxGb3JtYXQ8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCBzcGVjaWZpZXMgb3Igd2lsbCByZWNlaXZlIHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHVuY29tcHJlc3NlZCBpbWFnZSBidWZmZXIuIFRoZSBiZWhhdmlvciBvZiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZmZiZDgzYzM3NWU3OWY1ZGI0YjVjNWQ4YWQ0NDY2ZTciIHRpdGxlPSJMb2FkIGFuIHVuY29tcHJlc3NlZCBpbWFnZSBmcm9tIGRpc2sgaW50byBtZW1vcnkuIj50akxvYWRJbWFnZSgpPC9hPiB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT4qcGl4ZWxGb3JtYXQ8L2NvZGU+IHBhc3NlZCB0byB0aGUgZnVuY3Rpb246PHVsPgorPGxpPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODRjMWE2Y2VhZDc5NTI5OThlMmZiODk1ODQ0YTIxZWQiPlRKUEZfVU5LTk9XTjwvYT4gOiBUaGUgdW5jb21wcmVzc2VkIGltYWdlIGJ1ZmZlciByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gd2lsbCB1c2UgdGhlIG1vc3Qgb3B0aW1hbCBwaXhlbCBmb3JtYXQgZm9yIHRoZSBmaWxlIHR5cGUsIGFuZCA8Y29kZT4qcGl4ZWxGb3JtYXQ8L2NvZGU+IHdpbGwgY29udGFpbiB0aGUgSUQgb2YgdGhpcyBwaXhlbCBmb3JtYXQgdXBvbiBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi48L2xpPgorPGxpPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhNTQzMWI1NGIwMTUzMzc3MDVmMTMxMTgwNzM3MTFhMWEiPlRKUEZfR1JBWTwvYT4gOiBPbmx5IFBHTSBmaWxlcyBhbmQgOC1iaXQgQk1QIGZpbGVzIHdpdGggYSBncmF5c2NhbGUgY29sb3JtYXAgY2FuIGJlIGxvYWRlZC48L2xpPgorPGxpPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhN2Y1MTAwZWM0NGM5MTk5NGUyNDNmMWNmNTU1NTNmOGIiPlRKUEZfQ01ZSzwvYT4gOiBUaGUgUkdCIG9yIGdyYXlzY2FsZSBwaXhlbHMgc3RvcmVkIGluIHRoZSBmaWxlIHdpbGwgYmUgY29udmVydGVkIHVzaW5nIGEgcXVpY2sgJmFtcDsgZGlydHkgYWxnb3JpdGhtIHRoYXQgaXMgc3VpdGFibGUgb25seSBmb3IgdGVzdGluZyBwdXJwb3NlcyAocHJvcGVyIGNvbnZlcnNpb24gYmV0d2VlbiBDTVlLIGFuZCBvdGhlciBmb3JtYXRzIHJlcXVpcmVzIGEgY29sb3IgbWFuYWdlbWVudCBzeXN0ZW0uKTwvbGk+Cis8bGk+T3RoZXIgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj5waXhlbCBmb3JtYXRzPC9hPiA6IFRoZSB1bmNvbXByZXNzZWQgaW1hZ2UgYnVmZmVyIHdpbGwgdXNlIHRoZSBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0LCBhbmQgcGl4ZWwgZm9ybWF0IGNvbnZlcnNpb24gd2lsbCBiZSBwZXJmb3JtZWQgaWYgbmVjZXNzYXJ5LjwvbGk+Cis8L3VsPgorPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZmxhZ3M8L3RkPjx0ZD50aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcyZWNmNGViZTZlYjcwMmQzYzZmNWNhMjc0NTVlMWVjIj5mbGFnczwvYT4uPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+YSBwb2ludGVyIHRvIGEgbmV3bHktYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UsIGNvbnZlcnRlZCB0byB0aGUgY2hvc2VuIHBpeGVsIGZvcm1hdCBhbmQgd2l0aCB0aGUgY2hvc2VuIHJvdyBhbGlnbm1lbnQsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIyKCk8L2E+LikgVGhpcyBidWZmZXIgc2hvdWxkIGJlIGZyZWVkIHVzaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYTg2M2QyZGEwY2RiNjA5NTYzYWFiZGY5MTk2NTE0YiIgdGl0bGU9IkZyZWUgYW4gaW1hZ2UgYnVmZmVyIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IFR1cmJvSlBFRy4iPnRqRnJlZSgpPC9hPi4gPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMWEyMDk2OTZjNmE4MDc0OGYyMGUxMzRiM2M2NDc4OWYiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+RExMRVhQT1JUIGludCB0alBsYW5lSGVpZ2h0IDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+Y29tcG9uZW50SUQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdWJzYW1wPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSBwbGFuZSBoZWlnaHQgb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gPC9wPgorPHA+UmVmZXIgdG8gPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNZVVZub3RlcyI+WVVWIEltYWdlIEZvcm1hdCBOb3RlczwvYT4gZm9yIGEgZGVzY3JpcHRpb24gb2YgcGxhbmUgaGVpZ2h0LjwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb21wb25lbnRJRDwvdGQ+PHRkPklEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwgMiA9IFYvQ3IpPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5zdWJzYW1wPC90ZD48dGQ+bGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgaW4gdGhlIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5DaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zPC9hPi4pPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+dGhlIHBsYW5lIGhlaWdodCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCBvciAtMSBpZiB0aGUgYXJndW1lbnRzIGFyZSBvdXQgb2YgYm91bmRzLiA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FiNGFiN2IyNGY2ZTc5N2Q3OWFiYWFhNjcwMzczOTYxZCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgdW5zaWduZWQgbG9uZyB0alBsYW5lU2l6ZVlVViA8L3RkPgorICAgICAgICAgIDx0ZD4oPC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmNvbXBvbmVudElEPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+d2lkdGg8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdHJpZGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oZWlnaHQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5zdWJzYW1wPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIDwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb21wb25lbnRJRDwvdGQ+PHRkPklEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwgMiA9IFYvQ3IpPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+d2lkdGg8L3RkPjx0ZD53aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiBOT1RFOiB0aGlzIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2hvbGUgaW1hZ2UsIG5vdCB0aGUgcGxhbmUgd2lkdGguPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3RyaWRlPC90ZD48dGQ+Ynl0ZXMgcGVyIGxpbmUgaW4gdGhlIGltYWdlIHBsYW5lLiBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aC48L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oZWlnaHQ8L3RkPjx0ZD5oZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gTk9URTogdGhpcyBpcyB0aGUgaGVpZ2h0IG9mIHRoZSB3aG9sZSBpbWFnZSwgbm90IHRoZSBwbGFuZSBoZWlnaHQuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3Vic2FtcDwvdGQ+PHRkPmxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGluIHRoZSBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+Q2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9uczwvYT4uKTwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPnRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIHRoZSBZVVYgaW1hZ2UgcGxhbmUsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTYzZmI2NmJiMWUzNmM3NDAwOGM0NjM0MzYwYmVjYmIxIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPkRMTEVYUE9SVCBpbnQgdGpQbGFuZVdpZHRoIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+Y29tcG9uZW50SUQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnN1YnNhbXA8L2VtPiYjMTYwOzwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQ+KTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIHBsYW5lIHdpZHRoIG9mIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIDwvcD4KKzxwPlJlZmVyIHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjWVVWbm90ZXMiPllVViBJbWFnZSBGb3JtYXQgTm90ZXM8L2E+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHBsYW5lIHdpZHRoLjwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb21wb25lbnRJRDwvdGQ+PHRkPklEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwgMiA9IFYvQ3IpPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+d2lkdGg8L3RkPjx0ZD53aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+c3Vic2FtcDwvdGQ+PHRkPmxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGluIHRoZSBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+Q2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9uczwvYT4uKTwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPnRoZSBwbGFuZSB3aWR0aCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCBvciAtMSBpZiB0aGUgYXJndW1lbnRzIGFyZSBvdXQgb2YgYm91bmRzLiA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E2ZjQ0NWIyMmQ4OTMzYWU0ODE1YjMzNzBhNTM4ZDg3OSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgaW50IHRqU2F2ZUltYWdlIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5jb25zdCBjaGFyIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZmlsZW5hbWU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPnVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5idWZmZXI8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT53aWR0aDwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPnBpdGNoPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+aGVpZ2h0PC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+cGl4ZWxGb3JtYXQ8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmludCYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5mbGFnczwvZW0+JiMxNjA7PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZD4pPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD48dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5TYXZlIGFuIHVuY29tcHJlc3NlZCBpbWFnZSBmcm9tIG1lbW9yeSB0byBkaXNrLiA8L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZmlsZW5hbWU8L3RkPjx0ZD5uYW1lIG9mIGEgZmlsZSB0byB3aGljaCB0byBzYXZlIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UuIFRoZSBpbWFnZSB3aWxsIGJlIHN0b3JlZCBpbiBXaW5kb3dzIEJNUCBvciBQQk1QTFVTIChQUE0vUEdNKSBmb3JtYXQsIGRlcGVuZGluZyBvbiB0aGUgZmlsZSBleHRlbnNpb24uPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+YnVmZmVyPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0IsIGdyYXlzY2FsZSwgb3IgQ01ZSyBwaXhlbHMgdG8gYmUgc2F2ZWQ8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPndpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5waXRjaDwvdGQ+PHRkPmJ5dGVzIHBlciBsaW5lIGluIHRoZSBpbWFnZSBidWZmZXIuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDxjb2RlPndpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgdW5jb21wcmVzc2VkIGltYWdlPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGl4ZWxGb3JtYXQ8L3RkPjx0ZD5waXhlbCBmb3JtYXQgb2YgdGhlIGltYWdlIGJ1ZmZlciAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+UGl4ZWwgZm9ybWF0czwvYT4uKSBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE1NDMxYjU0YjAxNTMzNzcwNWYxMzExODA3MzcxMWExYSI+VEpQRl9HUkFZPC9hPiwgdGhlbiB0aGUgaW1hZ2Ugd2lsbCBiZSBzdG9yZWQgaW4gUEdNIG9yIDgtYml0IChpbmRleGVkIGNvbG9yKSBCTVAgZm9ybWF0LiBPdGhlcndpc2UsIHRoZSBpbWFnZSB3aWxsIGJlIHN0b3JlZCBpbiBQUE0gb3IgMjQtYml0IEJNUCBmb3JtYXQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTdmNTEwMGVjNDRjOTE5OTRlMjQzZjFjZjU1NTUzZjhiIj5USlBGX0NNWUs8L2E+LCB0aGVuIHRoZSBDTVlLIHBpeGVscyB3aWxsIGJlIGNvbnZlcnRlZCB0byBSR0IgdXNpbmcgYSBxdWljayAmYW1wOyBkaXJ0eSBhbGdvcml0aG0gdGhhdCBpcyBzdWl0YWJsZSBvbmx5IGZvciB0ZXN0aW5nIChwcm9wZXIgY29udmVyc2lvbiBiZXR3ZWVuIENNWUsgYW5kIG90aGVyIGZvcm1hdHMgcmVxdWlyZXMgYSBjb2xvciBtYW5hZ2VtZW50IHN5c3RlbS4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZmxhZ3M8L3RkPjx0ZD50aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcyZWNmNGViZTZlYjcwMmQzYzZmNWNhMjc0NTVlMWVjIj5mbGFnczwvYT4uPC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cjIoKTwvYT4uKSA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5ETExFWFBPUlQgaW50IHRqVHJhbnNmb3JtIDwvdGQ+CisgICAgICAgICAgPHRkPig8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5oYW5kbGU8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPmNvbnN0IHVuc2lnbmVkIGNoYXIgKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5qcGVnQnVmPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nJiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmpwZWdTaXplPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj5pbnQmIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+bjwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+dW5zaWduZWQgY2hhciAqKiYjMTYwOzwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbW5hbWUiPjxlbT5kc3RCdWZzPC9lbT4sIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFta2V5Ij48L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW10eXBlIj51bnNpZ25lZCBsb25nIComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+ZHN0U2l6ZXM8L2VtPiwgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1rZXkiPjwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbXR5cGUiPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+IComIzE2MDs8L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0icGFyYW1uYW1lIj48ZW0+dHJhbnNmb3JtczwvZW0+LCA8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJwYXJhbWtleSI+PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtdHlwZSI+aW50JiMxNjA7PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9InBhcmFtbmFtZSI+PGVtPmZsYWdzPC9lbT4mIzE2MDs8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgPHRkPik8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4gPC9wPgorPHA+TG9zc2xlc3MgdHJhbnNmb3JtcyB3b3JrIGJ5IG1vdmluZyB0aGUgcmF3IERDVCBjb2VmZmljaWVudHMgZnJvbSBvbmUgSlBFRyBpbWFnZSBzdHJ1Y3R1cmUgdG8gYW5vdGhlciB3aXRob3V0IGFsdGVyaW5nIHRoZSB2YWx1ZXMgb2YgdGhlIGNvZWZmaWNpZW50cy4gV2hpbGUgdGhpcyBpcyB0eXBpY2FsbHkgZmFzdGVyIHRoYW4gZGVjb21wcmVzc2luZyB0aGUgaW1hZ2UsIHRyYW5zZm9ybWluZyBpdCwgYW5kIHJlLWNvbXByZXNzaW5nIGl0LCBsb3NzbGVzcyB0cmFuc2Zvcm1zIGFyZSBub3QgZnJlZS4gRWFjaCBsb3NzbGVzcyB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgcGVyZm9ybWluZyBIdWZmbWFuIGRlY29kaW5nIG9uIGFsbCBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBUaHVzLCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgb2YgZ2VuZXJhdGluZyBtdWx0aXBsZSB0cmFuc2Zvcm1lZCBpbWFnZXMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugb3IgYXBwbHlpbmcgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb25zIHNpbXVsdGFuZW91c2x5LCBpbiBvcmRlciB0byBlbGltaW5hdGUgdGhlIG5lZWQgdG8gcmVhZCB0aGUgc291cmNlIGNvZWZmaWNpZW50cyBtdWx0aXBsZSB0aW1lcy48L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KKyAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGFuZGxlPC90ZD48dGQ+YSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgdHJhbnNmb3JtZXIgaW5zdGFuY2U8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnQnVmPC90ZD48dGQ+cG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSB0byB0cmFuc2Zvcm08L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnU2l6ZTwvdGQ+PHRkPnNpemUgb2YgdGhlIEpQRUcgc291cmNlIGltYWdlIChpbiBieXRlcyk8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5uPC90ZD48dGQ+dGhlIG51bWJlciBvZiB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcyB0byBnZW5lcmF0ZTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZnM8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGFycmF5IG9mIG4gaW1hZ2UgYnVmZmVycy4gPGNvZGU+ZHN0QnVmc1tpXTwvY29kZT4gd2lsbCByZWNlaXZlIGEgSlBFRyBpbWFnZSB0aGF0IGhhcyBiZWVuIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGluIDxjb2RlPnRyYW5zZm9ybXNbaV08L2NvZGU+LiBUdXJib0pQRUcgaGFzIHRoZSBhYmlsaXR5IHRvIHJlYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyIHRvIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiBUaHVzLCB5b3UgY2FuIGNob29zZSB0bzo8b2wgdHlwZT0iMSI+Cis8bGk+cHJlLWFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciB3aXRoIGFuIGFyYml0cmFyeSBzaXplIHVzaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYzYyN2RkNGM1ZjMwYjdhNzc1YTdhZWEzYmVjNWQ4MyIgdGl0bGU9IkFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiI+dGpBbGxvYygpPC9hPiBhbmQgbGV0IFR1cmJvSlBFRyBncm93IHRoZSBidWZmZXIgYXMgbmVlZGVkLDwvbGk+Cis8bGk+c2V0IDxjb2RlPmRzdEJ1ZnNbaV08L2NvZGU+IHRvIE5VTEwgdG8gdGVsbCBUdXJib0pQRUcgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciBmb3IgeW91LCBvcjwvbGk+Cis8bGk+cHJlLWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gYSAid29yc3QgY2FzZSIgc2l6ZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY3YWMxMmZlZTc5MDczMjQyY2IyMTZlMDdjOWYxZjkwIiB0aXRsZT0iVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4uLiI+dGpCdWZTaXplKCk8L2E+IHdpdGggdGhlIHRyYW5zZm9ybWVkIG9yIGNyb3BwZWQgd2lkdGggYW5kIGhlaWdodC4gVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgbmV2ZXIgaGFzIHRvIGJlIHJlLWFsbG9jYXRlZCAoc2V0dGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+IGd1YXJhbnRlZXMgdGhhdCBpdCB3b24ndCBiZS4pIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlcmUgYXJlIHNvbWUgcmFyZSBjYXNlcyAoc3VjaCBhcyB0cmFuc2Zvcm1pbmcgaW1hZ2VzIHdpdGggYSBsYXJnZSBhbW91bnQgb2YgZW1iZWRkZWQgRVhJRiBvciBJQ0MgcHJvZmlsZSBkYXRhKSBpbiB3aGljaCB0aGUgb3V0cHV0IGltYWdlIHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIHdvcnN0LWNhc2Ugc2l6ZSwgYW5kIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyIgdGl0bGU9IkRpc2FibGUgYnVmZmVyIChyZSlhbGxvY2F0aW9uLiI+VEpGTEFHX05PUkVBTExPQzwvYT4gY2Fubm90IGJlIHVzZWQgaW4gdGhvc2UgY2FzZXMuPC9saT4KKzwvb2w+CitJZiB5b3UgY2hvb3NlIG9wdGlvbiAxLCA8Y29kZT5kc3RTaXplc1tpXTwvY29kZT4gc2hvdWxkIGJlIHNldCB0byB0aGUgc2l6ZSBvZiB5b3VyIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBJbiBhbnkgY2FzZSwgdW5sZXNzIHlvdSBoYXZlIHNldCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+LCB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayA8Y29kZT5kc3RCdWZzW2ldPC9jb2RlPiB1cG9uIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIGFzIGl0IG1heSBoYXZlIGNoYW5nZWQuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZHN0U2l6ZXM8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGFycmF5IG9mIG4gdW5zaWduZWQgbG9uZyB2YXJpYWJsZXMgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGFjdHVhbCBzaXplcyAoaW4gYnl0ZXMpIG9mIGVhY2ggdHJhbnNmb3JtZWQgSlBFRyBpbWFnZS4gSWYgPGNvZGU+ZHN0QnVmc1tpXTwvY29kZT4gcG9pbnRzIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIsIHRoZW4gPGNvZGU+ZHN0U2l6ZXNbaV08L2NvZGU+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gVXBvbiByZXR1cm4sIDxjb2RlPmRzdFNpemVzW2ldPC9jb2RlPiB3aWxsIGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzLik8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj50cmFuc2Zvcm1zPC90ZD48dGQ+cG9pbnRlciB0byBhbiBhcnJheSBvZiBuIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCIgdGl0bGU9Ikxvc3NsZXNzIHRyYW5zZm9ybS4iPnRqdHJhbnNmb3JtPC9hPiBzdHJ1Y3R1cmVzLCBlYWNoIG9mIHdoaWNoIHNwZWNpZmllcyB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgYW5kL29yIGNyb3BwaW5nIHJlZ2lvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdHJhbnNmb3JtZWQgb3V0cHV0IGltYWdlLjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmZsYWdzPC90ZD48dGQ+dGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+ZmxhZ3M8L2E+PC90ZD48L3RyPgorICA8L3RhYmxlPgorICA8L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZWFkODU3NGY5ZjM5ZmJhZmM2YjQ5NzEyNGU3YWFmYSIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cjIoKTwvYT4gYW5kIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCIgdGl0bGU9IlJldHVybnMgYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiI+dGpHZXRFcnJvckNvZGUoKTwvYT4uKSA8L2RkPjwvZGw+CisKKzwvZGl2PgorPC9kaXY+Cis8aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5WYXJpYWJsZSBEb2N1bWVudGF0aW9uPC9oMj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTVhZjBhYjA2NWZlZWZkNTI2ZGViZjFlMjBjNDNlODM3Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IHRqQWxwaGFPZmZzZXRbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT5dPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgIDwvdGQ+CisgIDx0ZCBjbGFzcz0ibWxhYmVscy1yaWdodCI+Cis8c3BhbiBjbGFzcz0ibWxhYmVscyI+PHNwYW4gY2xhc3M9Im1sYWJlbCI+c3RhdGljPC9zcGFuPjwvc3Bhbj4gIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+QWxwaGEgb2Zmc2V0IChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiA8L3A+Cis8cD5UaGlzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIEFscGhhIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLiBGb3IgaW5zdGFuY2UsIGlmIGEgcGl4ZWwgb2YgZm9ybWF0IFRKX0JHUkEgaXMgc3RvcmVkIGluIDxjb2RlPmNoYXIgcGl4ZWxbXTwvY29kZT4sIHRoZW4gdGhlIGFscGhhIGNvbXBvbmVudCB3aWxsIGJlIDxjb2RlPnBpeGVsW3RqQWxwaGFPZmZzZXRbVEpfQkdSQV1dPC9jb2RlPi4gVGhpcyB3aWxsIGJlIC0xIGlmIHRoZSBwaXhlbCBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhbiBhbHBoYSBjb21wb25lbnQuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IHRqQmx1ZU9mZnNldFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgPC90ZD4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLXJpZ2h0Ij4KKzxzcGFuIGNsYXNzPSJtbGFiZWxzIj48c3BhbiBjbGFzcz0ibWxhYmVsIj5zdGF0aWM8L3NwYW4+PC9zcGFuPiAgPC90ZD4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5CbHVlIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gPC9wPgorPHA+VGhpcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBCbHVlIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLiBGb3IgaW5zdGFuY2UsIGlmIGEgcGl4ZWwgb2YgZm9ybWF0IFRKX0JHUlggaXMgc3RvcmVkIGluIDxjb2RlPmNoYXIgcGl4ZWxbXTwvY29kZT4sIHRoZW4gdGhlIGJsdWUgY29tcG9uZW50IHdpbGwgYmUgPGNvZGU+cGl4ZWxbdGpCbHVlT2Zmc2V0W1RKX0JHUlhdXTwvY29kZT4uIFRoaXMgd2lsbCBiZSAtMSBpZiB0aGUgcGl4ZWwgZm9ybWF0IGRvZXMgbm90IGhhdmUgYSBibHVlIGNvbXBvbmVudC4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorPHRhYmxlIGNsYXNzPSJtbGFiZWxzIj4KKyAgPHRyPgorICA8dGQgY2xhc3M9Im1sYWJlbHMtbGVmdCI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgdGpHcmVlbk9mZnNldFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgPC90ZD4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLXJpZ2h0Ij4KKzxzcGFuIGNsYXNzPSJtbGFiZWxzIj48c3BhbiBjbGFzcz0ibWxhYmVsIj5zdGF0aWM8L3NwYW4+PC9zcGFuPiAgPC90ZD4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5HcmVlbiBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIDwvcD4KKzxwPlRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgZ3JlZW4gY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuIEZvciBpbnN0YW5jZSwgaWYgYSBwaXhlbCBvZiBmb3JtYXQgVEpfQkdSWCBpcyBzdG9yZWQgaW4gPGNvZGU+Y2hhciBwaXhlbFtdPC9jb2RlPiwgdGhlbiB0aGUgZ3JlZW4gY29tcG9uZW50IHdpbGwgYmUgPGNvZGU+cGl4ZWxbdGpHcmVlbk9mZnNldFtUSl9CR1JYXV08L2NvZGU+LiBUaGlzIHdpbGwgYmUgLTEgaWYgdGhlIHBpeGVsIGZvcm1hdCBkb2VzIG5vdCBoYXZlIGEgZ3JlZW4gY29tcG9uZW50LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+Cis8dGFibGUgY2xhc3M9Im1sYWJlbHMiPgorICA8dHI+CisgIDx0ZCBjbGFzcz0ibWxhYmVscy1sZWZ0Ij4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmNvbnN0IGludCB0ak1DVUhlaWdodFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MiPlRKX05VTVNBTVA8L2E+XTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICA8L3RkPgorICA8dGQgY2xhc3M9Im1sYWJlbHMtcmlnaHQiPgorPHNwYW4gY2xhc3M9Im1sYWJlbHMiPjxzcGFuIGNsYXNzPSJtbGFiZWwiPnN0YXRpYzwvc3Bhbj48L3NwYW4+ICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPk1DVSBibG9jayBoZWlnaHQgKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KKzxwPk1DVSBibG9jayBzaXplczo8L3A+Cis8dWw+Cis8bGk+OHg4IGZvciBubyBzdWJzYW1wbGluZyBvciBncmF5c2NhbGU8L2xpPgorPGxpPjE2eDggZm9yIDQ6MjoyPC9saT4KKzxsaT44eDE2IGZvciA0OjQ6MDwvbGk+Cis8bGk+MTZ4MTYgZm9yIDQ6MjowPC9saT4KKzxsaT4zMng4IGZvciA0OjE6MSA8L2xpPgorPC91bD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IHRqTUNVV2lkdGhbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj5USl9OVU1TQU1QPC9hPl08L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgPC90ZD4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLXJpZ2h0Ij4KKzxzcGFuIGNsYXNzPSJtbGFiZWxzIj48c3BhbiBjbGFzcz0ibWxhYmVsIj5zdGF0aWM8L3NwYW4+PC9zcGFuPiAgPC90ZD4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5NQ1UgYmxvY2sgd2lkdGggKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KKzxwPk1DVSBibG9jayBzaXplczo8L3A+Cis8dWw+Cis8bGk+OHg4IGZvciBubyBzdWJzYW1wbGluZyBvciBncmF5c2NhbGU8L2xpPgorPGxpPjE2eDggZm9yIDQ6MjoyPC9saT4KKzxsaT44eDE2IGZvciA0OjQ6MDwvbGk+Cis8bGk+MTZ4MTYgZm9yIDQ6MjowPC9saT4KKzxsaT4zMng4IGZvciA0OjE6MSA8L2xpPgorPC91bD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IHRqUGl4ZWxTaXplWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+XTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICA8L3RkPgorICA8dGQgY2xhc3M9Im1sYWJlbHMtcmlnaHQiPgorPHNwYW4gY2xhc3M9Im1sYWJlbHMiPjxzcGFuIGNsYXNzPSJtbGFiZWwiPnN0YXRpYzwvc3Bhbj48L3NwYW4+ICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IHRqUmVkT2Zmc2V0WzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+XTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICA8L3RkPgorICA8dGQgY2xhc3M9Im1sYWJlbHMtcmlnaHQiPgorPHNwYW4gY2xhc3M9Im1sYWJlbHMiPjxzcGFuIGNsYXNzPSJtbGFiZWwiPnN0YXRpYzwvc3Bhbj48L3NwYW4+ICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlJlZCBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIDwvcD4KKzxwPlRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgcmVkIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLiBGb3IgaW5zdGFuY2UsIGlmIGEgcGl4ZWwgb2YgZm9ybWF0IFRKX0JHUlggaXMgc3RvcmVkIGluIDxjb2RlPmNoYXIgcGl4ZWxbXTwvY29kZT4sIHRoZW4gdGhlIHJlZCBjb21wb25lbnQgd2lsbCBiZSA8Y29kZT5waXhlbFt0alJlZE9mZnNldFtUSl9CR1JYXV08L2NvZGU+LiBUaGlzIHdpbGwgYmUgLTEgaWYgdGhlIHBpeGVsIGZvcm1hdCBkb2VzIG5vdCBoYXZlIGEgcmVkIGNvbXBvbmVudC4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9pbmRleC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBmNGQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDkwIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+Cis8dGl0bGU+VHVyYm9KUEVHOiBNYWluIFBhZ2U8L3RpdGxlPgorPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorPGRpdiBpZD0idGl0bGVhcmVhIj4KKzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorIDx0Ym9keT4KKyA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4yLjA8L3NwYW4+CisgICA8L2Rpdj4KKyAgPC90ZD4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KKyAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+CisgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CisgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCisgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgICAgICAgICAgICBhbHQ9IiIvPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iTVNlYXJjaEZpZWxkIiB2YWx1ZT0iU2VhcmNoIiBhY2Nlc3NrZXk9IlMiCisgICAgICAgICAgICAgICBvbmZvY3VzPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKHRydWUpIiAKKyAgICAgICAgICAgICAgIG9uYmx1cj0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyhmYWxzZSkiIAorICAgICAgICAgICAgICAgb25rZXl1cD0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRDaGFuZ2UoZXZlbnQpIi8+CisgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPSJyaWdodCI+CisgICAgICAgICAgICA8YSBpZD0iTVNlYXJjaENsb3NlIiBocmVmPSJqYXZhc2NyaXB0OnNlYXJjaEJveC5DbG9zZVJlc3VsdHNXaW5kb3coKSI+PGltZyBpZD0iTVNlYXJjaENsb3NlSW1nIiBib3JkZXI9IjAiIHNyYz0ic2VhcmNoL2Nsb3NlLnBuZyIgYWx0PSIiLz48L2E+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+Cis8L2Rpdj48IS0tIHRvcCAtLT4KKzwhLS0gd2luZG93IHNob3dpbmcgdGhlIGZpbHRlciBvcHRpb25zIC0tPgorPGRpdiBpZD0iTVNlYXJjaFNlbGVjdFdpbmRvdyIKKyAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCisgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEtleShldmVudCkiPgorPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5GdW5jdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgzKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg0KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5UeXBlZGVmczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDUpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDYpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0b3I8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg3KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5Hcm91cHM8L2E+PC9kaXY+CisKKzwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+Cis8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDp2b2lkKDApIiBmcmFtZWJvcmRlcj0iMCIgCisgICAgICAgIG5hbWU9Ik1TZWFyY2hSZXN1bHRzIiBpZD0iTVNlYXJjaFJlc3VsdHMiPgorPC9pZnJhbWU+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iaGVhZGVyIj4KKyAgPGRpdiBjbGFzcz0iaGVhZGVydGl0bGUiPgorPGRpdiBjbGFzcz0idGl0bGUiPlR1cmJvSlBFRyBEb2N1bWVudGF0aW9uPC9kaXY+ICA8L2Rpdj4KKzwvZGl2PjwhLS1oZWFkZXItLT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKzwvZGl2PjwhLS0gY29udGVudHMgLS0+Cis8IS0tIHN0YXJ0IGZvb3RlciBwYXJ0IC0tPgorPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+CitHZW5lcmF0ZWQgYnkgJiMxNjA7PGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KKzxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+Cis8L2E+IDEuOC4zLjEKKzwvc21hbGw+PC9hZGRyZXNzPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvanF1ZXJ5LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvanF1ZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTM5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9qcXVlcnkuanMKQEAgLTAsMCArMSw4IEBACisvKiEgalF1ZXJ5IHYxLjcuMSBqcXVlcnkuY29tIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCisoZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjeShhKXtyZXR1cm4gZi5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfWZ1bmN0aW9uIGN2KGEpe2lmKCFja1thXSl7dmFyIGI9Yy5ib2R5LGQ9ZigiPCIrYSsiPiIpLmFwcGVuZFRvKGIpLGU9ZC5jc3MoImRpc3BsYXkiKTtkLnJlbW92ZSgpO2lmKGU9PT0ibm9uZSJ8fGU9PT0iIil7Y2x8fChjbD1jLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGNsLmZyYW1lQm9yZGVyPWNsLndpZHRoPWNsLmhlaWdodD0wKSxiLmFwcGVuZENoaWxkKGNsKTtpZighY218fCFjbC5jcmVhdGVFbGVtZW50KWNtPShjbC5jb250ZW50V2luZG93fHxjbC5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGNtLndyaXRlKChjLmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCI/IjwhZG9jdHlwZSBodG1sPiI6IiIpKyI8aHRtbD48Ym9keT4iKSxjbS5jbG9zZSgpO2Q9Y20uY3JlYXRlRWxlbWVudChhKSxjbS5ib2R5LmFwcGVuZENoaWxkKGQpLGU9Zi5jc3MoZCwiZGlzcGxheSIpLGIucmVtb3ZlQ2hpbGQoY2wpfWNrW2FdPWV9cmV0dXJuIGNrW2FdfWZ1bmN0aW9uIGN1KGEsYil7dmFyIGM9e307Zi5lYWNoKGNxLmNvbmNhdC5hcHBseShbXSxjcS5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2NbdGhpc109YX0pO3JldHVybiBjfWZ1bmN0aW9uIGN0KCl7Y3I9Yn1mdW5jdGlvbiBjcygpe3NldFRpbWVvdXQoY3QsMCk7cmV0dXJuIGNyPWYubm93KCl9ZnVuY3Rpb24gY2ooKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjaSgpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBjYyhhLGMpe2EuZGF0YUZpbHRlciYmKGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlwZSkpO3ZhciBkPWEuZGF0YVR5cGVzLGU9e30sZyxoLGk9ZC5sZW5ndGgsaixrPWRbMF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGggaW4gYS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT0ic3RyaW5nIiYmKGVbaC50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbaF0pO2w9ayxrPWRbZ107aWYoaz09PSIqIilrPWw7ZWxzZSBpZihsIT09IioiJiZsIT09ayl7bT1sKyIgIitrLG49ZVttXXx8ZVsiKiAiK2tdO2lmKCFuKXtwPWI7Zm9yKG8gaW4gZSl7aj1vLnNwbGl0KCIgIik7aWYoalswXT09PWx8fGpbMF09PT0iKiIpe3A9ZVtqWzFdKyIgIitrXTtpZihwKXtvPWVbb10sbz09PSEwP249cDpwPT09ITAmJihuPW8pO2JyZWFrfX19fSFuJiYhcCYmZi5lcnJvcigiTm8gY29udmVyc2lvbiBmcm9tICIrbS5yZXBsYWNlKCIgIiwiIHRvICIpKSxuIT09ITAmJihjPW4/bihjKTpwKG8oYykpKX19cmV0dXJuIGN9ZnVuY3Rpb24gY2IoYSxjLGQpe3ZhciBlPWEuY29udGVudHMsZj1hLmRhdGFUeXBlcyxnPWEucmVzcG9uc2VGaWVsZHMsaCxpLGosaztmb3IoaSBpbiBnKWkgaW4gZCYmKGNbZ1tpXV09ZFtpXSk7d2hpbGUoZlswXT09PSIqIilmLnNoaWZ0KCksaD09PWImJihoPWEubWltZVR5cGV8fGMuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpKTtpZihoKWZvcihpIGluIGUpaWYoZVtpXSYmZVtpXS50ZXN0KGgpKXtmLnVuc2hpZnQoaSk7YnJlYWt9aWYoZlswXWluIGQpaj1mWzBdO2Vsc2V7Zm9yKGkgaW4gZCl7aWYoIWZbMF18fGEuY29udmVydGVyc1tpKyIgIitmWzBdXSl7aj1pO2JyZWFrfWt8fChrPWkpfWo9anx8a31pZihqKXtqIT09ZlswXSYmZi51bnNoaWZ0KGopO3JldHVybiBkW2pdfX1mdW5jdGlvbiBjYShhLGIsYyxkKXtpZihmLmlzQXJyYXkoYikpZi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxiRS50ZXN0KGEpP2QoYSxlKTpjYShhKyJbIisodHlwZW9mIGU9PSJvYmplY3QifHxmLmlzQXJyYXkoZSk/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoIWMmJmIhPW51bGwmJnR5cGVvZiBiPT0ib2JqZWN0Iilmb3IodmFyIGUgaW4gYiljYShhKyJbIitlKyJdIixiW2VdLGMsZCk7ZWxzZSBkKGEsYil9ZnVuY3Rpb24gYl8oYSxjKXt2YXIgZCxlLGc9Zi5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZ1tkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmZi5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBiJChhLGMsZCxlLGYsZyl7Zj1mfHxjLmRhdGFUeXBlc1swXSxnPWd8fHt9LGdbZl09ITA7dmFyIGg9YVtmXSxpPTAsaj1oP2gubGVuZ3RoOjAsaz1hPT09YlQsbDtmb3IoO2k8aiYmKGt8fCFsKTtpKyspbD1oW2ldKGMsZCxlKSx0eXBlb2YgbD09InN0cmluZyImJigha3x8Z1tsXT9sPWI6KGMuZGF0YVR5cGVzLnVuc2hpZnQobCksbD1iJChhLGMsZCxlLGwsZykpKTsoa3x8IWwpJiYhZ1siKiJdJiYobD1iJChhLGMsZCxlLCIqIixnKSk7cmV0dXJuIGx9ZnVuY3Rpb24gYlooYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dHlwZW9mIGIhPSJzdHJpbmciJiYoYz1iLGI9IioiKTtpZihmLmlzRnVuY3Rpb24oYykpe3ZhciBkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChiUCksZT0wLGc9ZC5sZW5ndGgsaCxpLGo7Zm9yKDtlPGc7ZSsrKWg9ZFtlXSxqPS9eXCsvLnRlc3QoaCksaiYmKGg9aC5zdWJzdHIoMSl8fCIqIiksaT1hW2hdPWFbaF18fFtdLGlbaj8idW5zaGlmdCI6InB1c2giXShjKX19fWZ1bmN0aW9uIGJDKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9Yj09PSJ3aWR0aCI/Yng6YnksZz0wLGg9ZS5sZW5ndGg7aWYoZD4wKXtpZihjIT09ImJvcmRlciIpZm9yKDtnPGg7ZysrKWN8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK2VbZ10pKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK2VbZ10pKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrZVtnXSsiV2lkdGgiKSl8fDA7cmV0dXJuIGQrInB4In1kPWJ6KGEsYixiKTtpZihkPDB8fGQ9PW51bGwpZD1hLnN0eWxlW2JdfHwwO2Q9cGFyc2VGbG9hdChkKXx8MDtpZihjKWZvcig7ZzxoO2crKylkKz1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK2VbZ10pKXx8MCxjIT09InBhZGRpbmciJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK2VbZ10rIldpZHRoIikpfHwwKSxjPT09Im1hcmdpbiImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytlW2ddKSl8fDApO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYnAoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmYsIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBibyhhKXt2YXIgYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2JoLmFwcGVuZENoaWxkKGIpLGIuaW5uZXJIVE1MPWEub3V0ZXJIVE1MO3JldHVybiBiLmZpcnN0Q2hpbGR9ZnVuY3Rpb24gYm4oYSl7dmFyIGI9KGEubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpO2I9PT0iaW5wdXQiP2JtKGEpOmIhPT0ic2NyaXB0IiYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiZmLmdyZXAoYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxibSl9ZnVuY3Rpb24gYm0oYSl7aWYoYS50eXBlPT09ImNoZWNrYm94Inx8YS50eXBlPT09InJhZGlvIilhLmRlZmF1bHRDaGVja2VkPWEuY2hlY2tlZH1mdW5jdGlvbiBibChhKXtyZXR1cm4gdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTp0eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsIT0idW5kZWZpbmVkIj9hLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiBiayhhLGIpe3ZhciBjO2lmKGIubm9kZVR5cGU9PT0xKXtiLmNsZWFyQXR0cmlidXRlcyYmYi5jbGVhckF0dHJpYnV0ZXMoKSxiLm1lcmdlQXR0cmlidXRlcyYmYi5tZXJnZUF0dHJpYnV0ZXMoYSksYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoYz09PSJvYmplY3QiKWIub3V0ZXJIVE1MPWEub3V0ZXJIVE1MO2Vsc2UgaWYoYyE9PSJpbnB1dCJ8fGEudHlwZSE9PSJjaGVja2JveCImJmEudHlwZSE9PSJyYWRpbyIpe2lmKGM9PT0ib3B0aW9uIiliLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkO2Vsc2UgaWYoYz09PSJpbnB1dCJ8fGM9PT0idGV4dGFyZWEiKWIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlfWVsc2UgYS5jaGVja2VkJiYoYi5kZWZhdWx0Q2hlY2tlZD1iLmNoZWNrZWQ9YS5jaGVja2VkKSxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSk7Yi5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKX19ZnVuY3Rpb24gYmooYSxiKXtpZihiLm5vZGVUeXBlPT09MSYmISFmLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxnPWYuX2RhdGEoYSksaD1mLl9kYXRhKGIsZyksaT1nLmV2ZW50cztpZihpKXtkZWxldGUgaC5oYW5kbGUsaC5ldmVudHM9e307Zm9yKGMgaW4gaSlmb3IoZD0wLGU9aVtjXS5sZW5ndGg7ZDxlO2QrKylmLmV2ZW50LmFkZChiLGMrKGlbY11bZF0ubmFtZXNwYWNlPyIuIjoiIikraVtjXVtkXS5uYW1lc3BhY2UsaVtjXVtkXSxpW2NdW2RdLmRhdGEpfWguZGF0YSYmKGguZGF0YT1mLmV4dGVuZCh7fSxoLmRhdGEpKX19ZnVuY3Rpb24gYmkoYSxiKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJ0YWJsZSIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gVShhKXt2YXIgYj1WLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfWZ1bmN0aW9uIFQoYSxiLGMpe2I9Ynx8MDtpZihmLmlzRnVuY3Rpb24oYikpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIGQ9Zi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZVR5cGU9PT0xfSk7aWYoTy50ZXN0KGIpKXJldHVybiBmLmZpbHRlcihiLGQsIWMpO2I9Zi5maWx0ZXIoYixkKX1yZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gZi5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gUyhhKXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gSygpe3JldHVybiEwfWZ1bmN0aW9uIEooKXtyZXR1cm4hMX1mdW5jdGlvbiBuKGEsYixjKXt2YXIgZD1iKyJkZWZlciIsZT1iKyJxdWV1ZSIsZz1iKyJtYXJrIixoPWYuX2RhdGEoYSxkKTtoJiYoYz09PSJxdWV1ZSJ8fCFmLl9kYXRhKGEsZSkpJiYoYz09PSJtYXJrInx8IWYuX2RhdGEoYSxnKSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXshZi5fZGF0YShhLGUpJiYhZi5fZGF0YShhLGcpJiYoZi5yZW1vdmVEYXRhKGEsZCwhMCksaC5maXJlKCkpfSwwKX1mdW5jdGlvbiBtKGEpe2Zvcih2YXIgYiBpbiBhKXtpZihiPT09ImRhdGEiJiZmLmlzRW1wdHlPYmplY3QoYVtiXSkpY29udGludWU7aWYoYiE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGwoYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoaywiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6Zi5pc051bWVyaWMoZCk/cGFyc2VGbG9hdChkKTpqLnRlc3QoZCk/Zi5wYXJzZUpTT04oZCk6ZH1jYXRjaChnKXt9Zi5kYXRhKGEsYyxkKX1lbHNlIGQ9Yn1yZXR1cm4gZH1mdW5jdGlvbiBoKGEpe3ZhciBiPWdbYV09e30sYyxkO2E9YS5zcGxpdCgvXHMrLyk7Zm9yKGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspYlthW2NdXT0hMDtyZXR1cm4gYn12YXIgYz1hLmRvY3VtZW50LGQ9YS5uYXZpZ2F0b3IsZT1hLmxvY2F0aW9uLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBKKCl7aWYoIWUuaXNSZWFkeSl7dHJ5e2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChKLDEpO3JldHVybn1lLnJlYWR5KCl9fXZhciBlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBlLmZuLmluaXQoYSxiLGgpfSxmPWEualF1ZXJ5LGc9YS4kLGgsaT0vXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8saj0vXFMvLGs9L15ccysvLGw9L1xzKyQvLG09L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxuPS9eW1xdLDp7fVxzXSokLyxvPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscD0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscT0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHI9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8scz0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdD0vKG1zaWUpIChbXHcuXSspLyx1PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdj0vLShbYS16XXxbMC05XSkvaWcsdz0vXi1tcy0vLHg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYisiIikudG9VcHBlckNhc2UoKX0seT1kLnVzZXJBZ2VudCx6LEEsQixDPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEU9QXJyYXkucHJvdG90eXBlLnB1c2gsRj1BcnJheS5wcm90b3R5cGUuc2xpY2UsRz1TdHJpbmcucHJvdG90eXBlLnRyaW0sSD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixJPXt9O2UuZm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVuZ3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYoZ1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3VtZW50fHxkOmMsaj1tLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNy4xIixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIEYuY2FsbCh0aGlzLDApfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmNvbnN0cnVjdG9yKCk7ZS5pc0FycmF5KGEpP0UuYXBwbHkoZCxhKTplLm1lcmdlKGQsYSksZC5wcmV2T2JqZWN0PXRoaXMsZC5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZpbmQiP2Quc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGQuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpO3JldHVybiBkfSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2UuYmluZFJlYWR5KCksQS5hZGQoYSk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe2E9K2E7cmV0dXJuIGE9PT0tMT90aGlzLnNsaWNlKGEpOnRoaXMuc2xpY2UoYSxhKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhGLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEYuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkUsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixlLmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihlLmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO0EuZmlyZVdpdGgoYyxbZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFBKXtBPWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGUucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixCKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGUucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGQpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSigpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09Im9iamVjdCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD9TdHJpbmcoYSk6SVtDLmNhbGwoYSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXtpZighYXx8ZS50eXBlKGEpIT09Im9iamVjdCJ8fGEubm9kZVR5cGV8fGUuaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFELmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIUQuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfXZhciBkO2ZvcihkIGluIGEpO3JldHVybiBkPT09Ynx8RC5jYWxsKGEsZCl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihuLnRlc3QoYi5yZXBsYWNlKG8sIkAiKS5yZXBsYWNlKHAsIl0iKS5yZXBsYWNlKHEsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UodywibXMtIikucmVwbGFjZSh2LHgpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpHP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkcuY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/RS5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihIKXJldHVybiBILmNhbGwoYixhLGMpO2Q9Yi5sZW5ndGgsYz1jP2M8MD9NYXRoLm1heCgwLGQrYyk6YzowO2Zvcig7YzxkO2MrKylpZihjIGluIGImJmJbY109PT1hKXJldHVybiBjfXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1GLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEYuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1yLmV4ZWMoYSl8fHMuZXhlYyhhKXx8dC5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ1LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SVsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSx6PWUudWFNYXRjaCh5KSx6LmJyb3dzZXImJihlLmJyb3dzZXJbei5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj16LnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9CPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihCPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksZS5yZWFkeSgpKX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbT1mdW5jdGlvbihiKXt2YXIgZCxlLGcsaCxpO2ZvcihkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWc9YltkXSxoPWYudHlwZShnKSxoPT09ImFycmF5Ij9tKGcpOmg9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhby5oYXMoZykpJiZjLnB1c2goZyl9LG49ZnVuY3Rpb24oYixmKXtmPWZ8fFtdLGU9IWEubWVtb3J5fHxbYixmXSxpPSEwLGw9anx8MCxqPTAsaz1jLmxlbmd0aDtmb3IoO2MmJmw8aztsKyspaWYoY1tsXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aT0hMSxjJiYoYS5vbmNlP2U9PT0hMD9vLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCksby5maXJlV2l0aChlWzBdLGVbMV0pKSl9LG89e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO20oYXJndW1lbnRzKSxpP2s9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaj1hLG4oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2kmJmY8PWsmJihrLS0sZjw9bCYmbC0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJm8uZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaT9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbihiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe28uZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZX19O3JldHVybiBvfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtpLmRvbmUuYXBwbHkoaSxhcmd1bWVudHMpLmZhaWwuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxwaXBlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5EZWZlcnJlZChmdW5jdGlvbihkKXtmLmVhY2goe2RvbmU6W2EsInJlc29sdmUiXSxmYWlsOltiLCJyZWplY3QiXSxwcm9ncmVzczpbYywibm90aWZ5Il19LGZ1bmN0aW9uKGEsYil7dmFyIGM9YlswXSxlPWJbMV0sZztmLmlzRnVuY3Rpb24oYyk/aVthXShmdW5jdGlvbigpCit7Zz1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnJiZmLmlzRnVuY3Rpb24oZy5wcm9taXNlKT9nLnByb21pc2UoKS50aGVuKGQucmVzb2x2ZSxkLnJlamVjdCxkLm5vdGlmeSk6ZFtlKyJXaXRoIl0odGhpcz09PWk/ZDp0aGlzLFtnXSl9KTppW2FdKGRbZV0pfSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbClhPWg7ZWxzZSBmb3IodmFyIGIgaW4gaClhW2JdPWhbYl07cmV0dXJuIGF9fSxpPWgucHJvbWlzZSh7fSksajtmb3IoaiBpbiBnKWlbal09Z1tqXS5maXJlLGlbaisiV2l0aCJdPWdbal0uZmlyZVdpdGg7aS5kb25lKGZ1bmN0aW9uKCl7ZT0icmVzb2x2ZWQifSxjLmRpc2FibGUsZC5sb2NrKS5mYWlsKGZ1bmN0aW9uKCl7ZT0icmVqZWN0ZWQifSxiLmRpc2FibGUsZC5sb2NrKSxhJiZhLmNhbGwoaSxpKTtyZXR1cm4gaX0sd2hlbjpmdW5jdGlvbihhKXtmdW5jdGlvbiBtKGEpe3JldHVybiBmdW5jdGlvbihiKXtlW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9pLmNhbGwoYXJndW1lbnRzLDApOmIsai5ub3RpZnlXaXRoKGssZSl9fWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe2JbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YywtLWd8fGoucmVzb2x2ZVdpdGgoaixiKX19dmFyIGI9aS5jYWxsKGFyZ3VtZW50cywwKSxjPTAsZD1iLmxlbmd0aCxlPUFycmF5KGQpLGc9ZCxoPWQsaj1kPD0xJiZhJiZmLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hOmYuRGVmZXJyZWQoKSxrPWoucHJvbWlzZSgpO2lmKGQ+MSl7Zm9yKDtjPGQ7YysrKWJbY10mJmJbY10ucHJvbWlzZSYmZi5pc0Z1bmN0aW9uKGJbY10ucHJvbWlzZSk/YltjXS5wcm9taXNlKCkudGhlbihsKGMpLGoucmVqZWN0LG0oYykpOi0tZztnfHxqLnJlc29sdmVXaXRoKGosYil9ZWxzZSBqIT09YSYmai5yZXNvbHZlV2l0aChqLGQ/W2FdOltdKTtyZXR1cm4ga319KSxmLnN1cHBvcnQ9ZnVuY3Rpb24oKXt2YXIgYixkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxPWMuY3JlYXRlRWxlbWVudCgiZGl2Iikscj1jLmRvY3VtZW50RWxlbWVudDtxLnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLHEuaW5uZXJIVE1MPSIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sYj17bGVhZGluZ1doaXRlc3BhY2U6cS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohcS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjppLnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpoLnNlbGVjdGVkLGdldFNldEF0dHJpYnV0ZTpxLmNsYXNzTmFtZSE9PSJ0IixlbmN0eXBlOiEhYy5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSxodG1sNUNsb25lOmMuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86bmF2PiIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsYi5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGIub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBxLnRlc3R9Y2F0Y2gocyl7Yi5kZWxldGVFeHBhbmRvPSExfSFxLmFkZEV2ZW50TGlzdGVuZXImJnEuYXR0YWNoRXZlbnQmJnEuZmlyZUV2ZW50JiYocS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtiLm5vQ2xvbmVFdmVudD0hMX0pLHEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGIucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLHEuYXBwZW5kQ2hpbGQoaSksaz1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxrLmFwcGVuZENoaWxkKHEubGFzdENoaWxkKSxiLmNoZWNrQ2xvbmU9ay5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYi5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLnJlbW92ZUNoaWxkKGkpLGsuYXBwZW5kQ2hpbGQocSkscS5pbm5lckhUTUw9IiIsYS5nZXRDb21wdXRlZFN0eWxlJiYoaj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGouc3R5bGUud2lkdGg9IjAiLGouc3R5bGUubWFyZ2luUmlnaHQ9IjAiLHEuc3R5bGUud2lkdGg9IjJweCIscS5hcHBlbmRDaGlsZChqKSxiLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChhLmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCk7aWYocS5hdHRhY2hFdmVudClmb3IobyBpbntzdWJtaXQ6MSxjaGFuZ2U6MSxmb2N1c2luOjF9KW49Im9uIitvLHA9biBpbiBxLHB8fChxLnNldEF0dHJpYnV0ZShuLCJyZXR1cm47IikscD10eXBlb2YgcVtuXT09ImZ1bmN0aW9uIiksYltvKyJCdWJibGVzIl09cDtrLnJlbW92ZUNoaWxkKHEpLGs9Zz1oPWo9cT1pPW51bGwsZihmdW5jdGlvbigpe3ZhciBhLGQsZSxnLGgsaSxqLGssbSxuLG8scj1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07IXJ8fChqPTEsaz0icG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjowOyIsbT0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7IixuPSJzdHlsZT0nIitrKyJib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowOyciLG89IjxkaXYgIituKyI+PGRpdj48L2Rpdj48L2Rpdj4iKyI8dGFibGUgIituKyIgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz4iKyI8dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPiIsYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGEuc3R5bGUuY3NzVGV4dD1tKyJ3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOiIraisicHgiLHIuaW5zZXJ0QmVmb3JlKGEsci5maXJzdENoaWxkKSxxPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYS5hcHBlbmRDaGlsZChxKSxxLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQgc3R5bGU9J3BhZGRpbmc6MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUnPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLGw9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxwPWxbMF0ub2Zmc2V0SGVpZ2h0PT09MCxsWzBdLnN0eWxlLmRpc3BsYXk9IiIsbFsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixiLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1wJiZsWzBdLm9mZnNldEhlaWdodD09PTAscS5pbm5lckhUTUw9IiIscS5zdHlsZS53aWR0aD1xLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLGYuYm94TW9kZWw9Yi5ib3hNb2RlbD1xLm9mZnNldFdpZHRoPT09Mix0eXBlb2YgcS5zdHlsZS56b29tIT0idW5kZWZpbmVkIiYmKHEuc3R5bGUuZGlzcGxheT0iaW5saW5lIixxLnN0eWxlLnpvb209MSxiLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9cS5vZmZzZXRXaWR0aD09PTIscS5zdHlsZS5kaXNwbGF5PSIiLHEuaW5uZXJIVE1MPSI8ZGl2IHN0eWxlPSd3aWR0aDo0cHg7Jz48L2Rpdj4iLGIuc2hyaW5rV3JhcEJsb2Nrcz1xLm9mZnNldFdpZHRoIT09MikscS5zdHlsZS5jc3NUZXh0PWsrbSxxLmlubmVySFRNTD1vLGQ9cS5maXJzdENoaWxkLGU9ZC5maXJzdENoaWxkLGg9ZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQsaT17ZG9lc05vdEFkZEJvcmRlcjplLm9mZnNldFRvcCE9PTUsZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM6aC5vZmZzZXRUb3A9PT01fSxlLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZS5zdHlsZS50b3A9IjIwcHgiLGkuZml4ZWRQb3NpdGlvbj1lLm9mZnNldFRvcD09PTIwfHxlLm9mZnNldFRvcD09PTE1LGUuc3R5bGUucG9zaXRpb249ZS5zdHlsZS50b3A9IiIsZC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsaS5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZS5vZmZzZXRUb3A9PT0tNSxpLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PXIub2Zmc2V0VG9wIT09aixyLnJlbW92ZUNoaWxkKGEpLHE9YT1udWxsLGYuZXh0ZW5kKGIsaSkpfSk7cmV0dXJuIGJ9KCk7dmFyIGo9L14oPzpcey4qXH18XFsuKlxdKSQvLGs9LyhbQS1aXSkvZztmLmV4dGVuZCh7Y2FjaGU6e30sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKGYuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXthPWEubm9kZVR5cGU/Zi5jYWNoZVthW2YuZXhwYW5kb11dOmFbZi5leHBhbmRvXTtyZXR1cm4hIWEmJiFtKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYyxkLGUpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZyxoLGksaj1mLmV4cGFuZG8saz10eXBlb2YgYz09InN0cmluZyIsbD1hLm5vZGVUeXBlLG09bD9mLmNhY2hlOmEsbj1sP2Fbal06YVtqXSYmaixvPWM9PT0iZXZlbnRzIjtpZigoIW58fCFtW25dfHwhbyYmIWUmJiFtW25dLmRhdGEpJiZrJiZkPT09YilyZXR1cm47bnx8KGw/YVtqXT1uPSsrZi51dWlkOm49aiksbVtuXXx8KG1bbl09e30sbHx8KG1bbl0udG9KU09OPWYubm9vcCkpO2lmKHR5cGVvZiBjPT0ib2JqZWN0Inx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZT9tW25dPWYuZXh0ZW5kKG1bbl0sYyk6bVtuXS5kYXRhPWYuZXh0ZW5kKG1bbl0uZGF0YSxjKTtnPWg9bVtuXSxlfHwoaC5kYXRhfHwoaC5kYXRhPXt9KSxoPWguZGF0YSksZCE9PWImJihoW2YuY2FtZWxDYXNlKGMpXT1kKTtpZihvJiYhaFtjXSlyZXR1cm4gZy5ldmVudHM7az8oaT1oW2NdLGk9PW51bGwmJihpPWhbZi5jYW1lbENhc2UoYyldKSk6aT1oO3JldHVybiBpfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIsYyl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZyxoPWYuZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP2YuY2FjaGU6YSxrPWk/YVtoXTpoO2lmKCFqW2tdKXJldHVybjtpZihiKXtkPWM/altrXTpqW2tdLmRhdGE7aWYoZCl7Zi5pc0FycmF5KGIpfHwoYiBpbiBkP2I9W2JdOihiPWYuY2FtZWxDYXNlKGIpLGIgaW4gZD9iPVtiXTpiPWIuc3BsaXQoIiAiKSkpO2ZvcihlPTAsZz1iLmxlbmd0aDtlPGc7ZSsrKWRlbGV0ZSBkW2JbZV1dO2lmKCEoYz9tOmYuaXNFbXB0eU9iamVjdCkoZCkpcmV0dXJufX1pZighYyl7ZGVsZXRlIGpba10uZGF0YTtpZighbShqW2tdKSlyZXR1cm59Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fCFqLnNldEludGVydmFsP2RlbGV0ZSBqW2tdOmpba109bnVsbCxpJiYoZi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVsZXRlIGFbaF06YS5yZW1vdmVBdHRyaWJ1dGU/YS5yZW1vdmVBdHRyaWJ1dGUoaCk6YVtoXT1udWxsKX19LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kYXRhKGEsYixjLCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1mLm5vRGF0YVthLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGcsaD1udWxsO2lmKHR5cGVvZiBhPT0idW5kZWZpbmVkIil7aWYodGhpcy5sZW5ndGgpe2g9Zi5kYXRhKHRoaXNbMF0pO2lmKHRoaXNbMF0ubm9kZVR5cGU9PT0xJiYhZi5fZGF0YSh0aGlzWzBdLCJwYXJzZWRBdHRycyIpKXtlPXRoaXNbMF0uYXR0cmlidXRlcztmb3IodmFyIGk9MCxqPWUubGVuZ3RoO2k8ajtpKyspZz1lW2ldLm5hbWUsZy5pbmRleE9mKCJkYXRhLSIpPT09MCYmKGc9Zi5jYW1lbENhc2UoZy5zdWJzdHJpbmcoNSkpLGwodGhpc1swXSxnLGhbZ10pKTtmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIiwhMCl9fXJldHVybiBofWlmKHR5cGVvZiBhPT0ib2JqZWN0IilyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5kYXRhKHRoaXMsYSl9KTtkPWEuc3BsaXQoIi4iKSxkWzFdPWRbMV0/Ii4iK2RbMV06IiI7aWYoYz09PWIpe2g9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIrZFsxXSsiISIsW2RbMF1dKSxoPT09YiYmdGhpcy5sZW5ndGgmJihoPWYuZGF0YSh0aGlzWzBdLGEpLGg9bCh0aGlzWzBdLGEsaCkpO3JldHVybiBoPT09YiYmZFsxXT90aGlzLmRhdGEoZFswXSk6aH1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxlPVtkWzBdLGNdO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2RbMV0rIiEiLGUpLGYuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIrZFsxXSsiISIsZSl9KX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxmLmV4dGVuZCh7X21hcms6ZnVuY3Rpb24oYSxiKXthJiYoYj0oYnx8ImZ4IikrIm1hcmsiLGYuX2RhdGEoYSxiLChmLl9kYXRhKGEsYil8fDApKzEpKX0sX3VubWFyazpmdW5jdGlvbihhLGIsYyl7YSE9PSEwJiYoYz1iLGI9YSxhPSExKTtpZihiKXtjPWN8fCJmeCI7dmFyIGQ9YysibWFyayIsZT1hPzA6KGYuX2RhdGEoYixkKXx8MSktMTtlP2YuX2RhdGEoYixkLGUpOihmLnJlbW92ZURhdGEoYixkLCEwKSxuKGIsYywibWFyayIpKX19LHF1ZXVlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihhKXtiPShifHwiZngiKSsicXVldWUiLGQ9Zi5fZGF0YShhLGIpLGMmJighZHx8Zi5pc0FycmF5KGMpP2Q9Zi5fZGF0YShhLGIsZi5tYWtlQXJyYXkoYykpOmQucHVzaChjKSk7cmV0dXJuIGR8fFtdfX0sZGVxdWV1ZTpmdW5jdGlvbihhLGIpe2I9Ynx8ImZ4Ijt2YXIgYz1mLnF1ZXVlKGEsYiksZD1jLnNoaWZ0KCksZT17fTtkPT09ImlucHJvZ3Jlc3MiJiYoZD1jLnNoaWZ0KCkpLGQmJihiPT09ImZ4IiYmYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksZi5fZGF0YShhLGIrIi5ydW4iLGUpLGQuY2FsbChhLGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKGEsYil9LGUpKSxjLmxlbmd0aHx8KGYucmVtb3ZlRGF0YShhLGIrInF1ZXVlICIrYisiLnJ1biIsITApLG4oYSxiLCJxdWV1ZSIpKX19KSxmLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxjKXt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT0iZngiKTtpZihjPT09YilyZXR1cm4gZi5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mLnF1ZXVlKHRoaXMsYSxjKTthPT09ImZ4IiYmYlswXSE9PSJpbnByb2dyZXNzIiYmZi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVsYXk6ZnVuY3Rpb24oYSxiKXthPWYuZng/Zi5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fCJmeCI7cmV0dXJuIHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBtKCl7LS1ofHxkLnJlc29sdmVXaXRoKGUsW2VdKX10eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT1iKSxhPWF8fCJmeCI7dmFyIGQ9Zi5EZWZlcnJlZCgpLGU9dGhpcyxnPWUubGVuZ3RoLGg9MSxpPWErImRlZmVyIixqPWErInF1ZXVlIixrPWErIm1hcmsiLGw7d2hpbGUoZy0tKWlmKGw9Zi5kYXRhKGVbZ10saSxiLCEwKXx8KGYuZGF0YShlW2ddLGosYiwhMCl8fGYuZGF0YShlW2ddLGssYiwhMCkpJiZmLmRhdGEoZVtnXSxpLGYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCEwKSloKyssbC5hZGQobSk7bSgpO3JldHVybiBkLnByb21pc2UoKX19KTt2YXIgbz0vW1xuXHRccl0vZyxwPS9ccysvLHE9L1xyL2cscj0vXig/OmJ1dHRvbnxpbnB1dCkkL2kscz0vXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSx0PS9eYSg/OnJlYSk/JC9pLHU9L14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksdj1mLnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlLHcseCx5O2YuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxiLCEwLGYuYXR0cil9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YucmVtb3ZlQXR0cih0aGlzLGEpfSl9LHByb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5wcm9wKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXthPWYucHJvcEZpeFthXXx8YTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09YixkZWxldGUgdGhpc1thXX1jYXRjaChjKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGcsaCxpO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmciKXtiPWEuc3BsaXQocCk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2U9dGhpc1tjXTtpZihlLm5vZGVUeXBlPT09MSlpZighZS5jbGFzc05hbWUmJmIubGVuZ3RoPT09MSllLmNsYXNzTmFtZT1hO2Vsc2V7Zz0iICIrZS5jbGFzc05hbWUrIiAiO2ZvcihoPTAsaT1iLmxlbmd0aDtoPGk7aCsrKX5nLmluZGV4T2YoIiAiK2JbaF0rIiAiKXx8KGcrPWJbaF0rIiAiKTtlLmNsYXNzTmFtZT1mLnRyaW0oZyl9fX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGMsZCxlLGcsaCxpLGo7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyJ8fGE9PT1iKXtjPShhfHwiIikuc3BsaXQocCk7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTtpZihnLm5vZGVUeXBlPT09MSYmZy5jbGFzc05hbWUpaWYoYSl7aD0oIiAiK2cuY2xhc3NOYW1lKyIgIikucmVwbGFjZShvLCIgIik7Zm9yKGk9MCxqPWMubGVuZ3RoO2k8ajtpKyspaD1oLnJlcGxhY2UoIiAiK2NbaV0rIiAiLCIgIik7Zy5jbGFzc05hbWU9Zi50cmltKGgpfWVsc2UgZy5jbGFzc05hbWU9IiJ9fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLGQ9dHlwZW9mIGI9PSJib29sZWFuIjtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtmKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoYz09PSJzdHJpbmciKXt2YXIgZSxnPTAsaD1mKHRoaXMpLGk9YixqPWEuc3BsaXQocCk7d2hpbGUoZT1qW2crK10paT1kP2k6IWguaGFzQ2xhc3MoZSksaFtpPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oZSl9ZWxzZSBpZihjPT09InVuZGVmaW5lZCJ8fGM9PT0iYm9vbGVhbiIpdGhpcy5jbGFzc05hbWUmJmYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxhPT09ITE/IiI6Zi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIifSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiPSIgIithKyIgIixjPTAsZD10aGlzLmxlbmd0aDtmb3IoO2M8ZDtjKyspaWYodGhpc1tjXS5ub2RlVHlwZT09PTEmJigiICIrdGhpc1tjXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKS5pbmRleE9mKGIpPi0xKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oYSl7dmFyIGMsZCxlLGc9dGhpc1swXTt7aWYoISFhcmd1bWVudHMubGVuZ3RoKXtlPWYuaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBnPWYodGhpcyksaDtpZih0aGlzLm5vZGVUeXBlPT09MSl7ZT9oPWEuY2FsbCh0aGlzLGQsZy52YWwoKSk6aD1hLGg9PW51bGw/aD0iIjp0eXBlb2YgaD09Im51bWJlciI/aCs9IiI6Zi5pc0FycmF5KGgpJiYoaD1mLm1hcChoLGZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOmErIiJ9KSksYz1mLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV18fGYudmFsSG9va3NbdGhpcy50eXBlXTtpZighY3x8ISgic2V0ImluIGMpfHxjLnNldCh0aGlzLGgsInZhbHVlIik9PT1iKXRoaXMudmFsdWU9aH19KX1pZihnKXtjPWYudmFsSG9va3NbZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tnLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZywidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9Zy52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShxLCIiKTpkPT1udWxsPyIiOmR9fX19KSxmLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4hYnx8Yi5zcGVjaWZpZWQ/YS52YWx1ZTphLnRleHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxnPWEuc2VsZWN0ZWRJbmRleCxoPVtdLGk9YS5vcHRpb25zLGo9YS50eXBlPT09InNlbGVjdC1vbmUiO2lmKGc8MClyZXR1cm4gbnVsbDtjPWo/ZzowLGQ9aj9nKzE6aS5sZW5ndGg7Zm9yKDtjPGQ7YysrKXtlPWlbY107aWYoZS5zZWxlY3RlZCYmKGYuc3VwcG9ydC5vcHREaXNhYmxlZD8hZS5kaXNhYmxlZDplLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIWUucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWYubm9kZU5hbWUoZS5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7Yj1mKGUpLnZhbCgpO2lmKGopcmV0dXJuIGI7aC5wdXNoKGIpfX1pZihqJiYhaC5sZW5ndGgmJmkubGVuZ3RoKXJldHVybiBmKGlbZ10pLnZhbCgpO3JldHVybiBofSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLm1ha2VBcnJheShiKTtmKGEpLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPWYuaW5BcnJheShmKHRoaXMpLnZhbCgpLGMpPj0wfSksYy5sZW5ndGh8fChhLnNlbGVjdGVkSW5kZXg9LTEpO3JldHVybiBjfX19LGF0dHJGbjp7dmFsOiEwLGNzczohMCxodG1sOiEwLHRleHQ6ITAsZGF0YTohMCx3aWR0aDohMCxoZWlnaHQ6ITAsb2Zmc2V0OiEwfSxhdHRyOmZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBnLGgsaSxqPWEubm9kZVR5cGU7aWYoISFhJiZqIT09MyYmaiE9PTgmJmohPT0yKXtpZihlJiZjIGluIGYuYXR0ckZuKXJldHVybiBmKGEpW2NdKGQpO2lmKHR5cGVvZiBhLmdldEF0dHJpYnV0ZT09InVuZGVmaW5lZCIpcmV0dXJuIGYucHJvcChhLGMsZCk7aT1qIT09MXx8IWYuaXNYTUxEb2MoYSksaSYmKGM9Yy50b0xvd2VyQ2FzZSgpLGg9Zi5hdHRySG9va3NbY118fCh1LnRlc3QoYyk/eDp3KSk7aWYoZCE9PWIpe2lmKGQ9PT1udWxsKXtmLnJlbW92ZUF0dHIoYSxjKTtyZXR1cm59aWYoaCYmInNldCJpbiBoJiZpJiYoZz1oLnNldChhLGQsYykpIT09YilyZXR1cm4gZzthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGgmJiJnZXQiaW4gaCYmaSYmKGc9aC5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBnO2c9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGc9PT1udWxsP2I6Z319LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZyxoPTA7aWYoYiYmYS5ub2RlVHlwZT09PTEpe2Q9Yi50b0xvd2VyQ2FzZSgpLnNwbGl0KHApLGc9ZC5sZW5ndGg7Zm9yKDtoPGc7aCsrKWU9ZFtoXSxlJiYoYz1mLnByb3BGaXhbZV18fGUsZi5hdHRyKGEsZSwiIiksYS5yZW1vdmVBdHRyaWJ1dGUodj9lOmMpLHUudGVzdChlKSYmYyBpbiBhJiYoYVtjXT0hMSkpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihyLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpPWEubm9kZVR5cGU7aWYoISFhJiZpIT09MyYmaSE9PTgmJmkhPT0yKXtoPWkhPT0xfHwhZi5pc1hNTERvYyhhKSxoJiYoYz1mLnByb3BGaXhbY118fGMsZz1mLnByb3BIb29rc1tjXSk7cmV0dXJuIGQhPT1iP2cmJiJzZXQiaW4gZyYmKGU9Zy5zZXQoYSxkLGMpKSE9PWI/ZTphW2NdPWQ6ZyYmImdldCJpbiBnJiYoZT1nLmdldChhLGMpKSE9PW51bGw/ZTphW2NdfX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6cy50ZXN0KGEubm9kZU5hbWUpfHx0LnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxmLmF0dHJIb29rcy50YWJpbmRleD1mLnByb3BIb29rcy50YWJJbmRleCx4PXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPWYucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7Yj09PSExP2YucmVtb3ZlQXR0cihhLGMpOihkPWYucHJvcEZpeFtjXXx8YyxkIGluIGEmJihhW2RdPSEwKSxhLnNldEF0dHJpYnV0ZShjLGMudG9Mb3dlckNhc2UoKSkpO3JldHVybiBjfX0sdnx8KHk9e25hbWU6ITAsaWQ6ITB9LHc9Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcuc2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRlbmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShjLDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0pLGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxBPS9eKFteXC5dKik/KD86XC4oLispKT8kLyxCPS9cYmhvdmVyKFwuXFMrKT9cYi8sQz0vXmtleS8sRD0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sRT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sRj0vXihcdyopKD86IyhbXHdcLV0rKSk/KD86XC4oW1x3XC1dKykpPyQvLEc9ZnVuY3Rpb24oYSl7dmFyIGI9Ri5leGVjKGEpO2ImJihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAoIig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxIPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5hdHRyaWJ1dGVzfHx7fTtyZXR1cm4oIWJbMV18fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJbMV0pJiYoIWJbMl18fChjLmlkfHx7fSkudmFsdWU9PT1iWzJdKSYmKCFiWzNdfHxiWzNdLnRlc3QoKGNbImNsYXNzIl18fHt9KS52YWx1ZSkpfSxJPWZ1bmN0aW9uKGEpe3JldHVybiBmLmV2ZW50LnNwZWNpYWwuaG92ZXI/YTphLnJlcGxhY2UoQiwibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIpfTsKK2YuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPWYudHJpbShJKGMpKS5zcGxpdCgiICIpO2ZvcihrPTA7azxjLmxlbmd0aDtrKyspe2w9QS5leGVjKGNba10pfHxbXSxtPWxbMV0sbj0obFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxtPShnP3MuZGVsZWdhdGVUeXBlOnMuYmluZFR5cGUpfHxtLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxvPWYuZXh0ZW5kKHt0eXBlOm0sb3JpZ1R5cGU6bFsxXSxkYXRhOmUsaGFuZGxlcjpkLGd1aWQ6ZC5ndWlkLHNlbGVjdG9yOmcscXVpY2s6RyhnKSxuYW1lc3BhY2U6bi5qb2luKCIuIil9LHApLHI9alttXTtpZighcil7cj1qW21dPVtdLHIuZGVsZWdhdGVDb3VudD0wO2lmKCFzLnNldHVwfHxzLnNldHVwLmNhbGwoYSxlLG4saSk9PT0hMSlhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG0saSwhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK20saSl9cy5hZGQmJihzLmFkZC5jYWxsKGEsbyksby5oYW5kbGVyLmd1aWR8fChvLmhhbmRsZXIuZ3VpZD1kLmd1aWQpKSxnP3Iuc3BsaWNlKHIuZGVsZWdhdGVDb3VudCsrLDAsbyk6ci5wdXNoKG8pLGYuZXZlbnQuZ2xvYmFsW21dPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZz1mLmhhc0RhdGEoYSkmJmYuX2RhdGEoYSksaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoISFnJiYhIShvPWcuZXZlbnRzKSl7Yj1mLnRyaW0oSShifHwiIikpLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKyl7aT1BLmV4ZWMoYltoXSl8fFtdLGo9az1pWzFdLGw9aVsyXTtpZighail7Zm9yKGogaW4gbylmLmV2ZW50LnJlbW92ZShhLGorYltoXSxjLGQsITApO2NvbnRpbnVlfXA9Zi5ldmVudC5zcGVjaWFsW2pdfHx7fSxqPShkP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxqLHI9b1tqXXx8W10sbT1yLmxlbmd0aCxsPWw/bmV3IFJlZ0V4cCgiKF58XFwuKSIrbC5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTpudWxsO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspcz1yW25dLChlfHxrPT09cy5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cy5ndWlkKSYmKCFsfHxsLnRlc3Qocy5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cy5zZWxlY3Rvcnx8ZD09PSIqKiImJnMuc2VsZWN0b3IpJiYoci5zcGxpY2Uobi0tLDEpLHMuc2VsZWN0b3ImJnIuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGEscykpO3IubGVuZ3RoPT09MCYmbSE9PXIubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoYSxsKT09PSExKSYmZi5yZW1vdmVFdmVudChhLGosZy5oYW5kbGUpLGRlbGV0ZSBvW2pdKX1mLmlzRW1wdHlPYmplY3QobykmJihxPWcuaGFuZGxlLHEmJihxLmVsZW09bnVsbCksZi5yZW1vdmVEYXRhKGEsWyJldmVudHMiLCJoYW5kbGUiXSwhMCkpfX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxlLGcpe2lmKCFlfHxlLm5vZGVUeXBlIT09MyYmZS5ub2RlVHlwZSE9PTgpe3ZhciBoPWMudHlwZXx8YyxpPVtdLGosayxsLG0sbixvLHAscSxyLHM7aWYoRS50ZXN0KGgrZi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtoLmluZGV4T2YoIiEiKT49MCYmKGg9aC5zbGljZSgwLC0xKSxrPSEwKSxoLmluZGV4T2YoIi4iKT49MCYmKGk9aC5zcGxpdCgiLiIpLGg9aS5zaGlmdCgpLGkuc29ydCgpKTtpZigoIWV8fGYuZXZlbnQuY3VzdG9tRXZlbnRbaF0pJiYhZi5ldmVudC5nbG9iYWxbaF0pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9ayxjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGwsbz1oLmluZGV4T2YoIjoiKTwwPyJvbiIraDoiIjtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxtPUUudGVzdChzK2gpP2U6ZS5wYXJlbnROb2RlLG49bnVsbDtmb3IoO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2wrKyltPXJbbF1bMF0sYy50eXBlPXJbbF1bMV0scT0oZi5fZGF0YShtLCJldmVudHMiKXx8e30pW2MudHlwZV0mJmYuX2RhdGEobSwiaGFuZGxlIikscSYmcS5hcHBseShtLGQpLHE9byYmbVtvXSxxJiZmLmFjY2VwdERhdGEobSkmJnEuYXBwbHkobSxkKT09PSExJiZjLnByZXZlbnREZWZhdWx0KCk7Yy50eXBlPWgsIWcmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoZS5vd25lckRvY3VtZW50LGQpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSYmbyYmZVtoXSYmKGghPT0iZm9jdXMiJiZoIT09ImJsdXIifHxjLnRhcmdldC5vZmZzZXRXaWR0aCE9PTApJiYhZi5pc1dpbmRvdyhlKSYmKG49ZVtvXSxuJiYoZVtvXT1udWxsKSxmLmV2ZW50LnRyaWdnZXJlZD1oLGVbaF0oKSxmLmV2ZW50LnRyaWdnZXJlZD1iLG4mJihlW29dPW4pKTtyZXR1cm4gYy5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihjKXtjPWYuZXZlbnQuZml4KGN8fGEuZXZlbnQpO3ZhciBkPShmLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10sZT1kLmRlbGVnYXRlQ291bnQsZz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxoPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLGk9W10saixrLGwsbSxuLG8scCxxLHIscyx0O2dbMF09YyxjLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoZSYmIWMudGFyZ2V0LmRpc2FibGVkJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSl7bT1mKHRoaXMpLG0uY29udGV4dD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXM7Zm9yKGw9Yy50YXJnZXQ7bCE9dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcyl7bz17fSxxPVtdLG1bMF09bDtmb3Ioaj0wO2o8ZTtqKyspcj1kW2pdLHM9ci5zZWxlY3RvcixvW3NdPT09YiYmKG9bc109ci5xdWljaz9IKGwsci5xdWljayk6bS5pcyhzKSksb1tzXSYmcS5wdXNoKHIpO3EubGVuZ3RoJiZpLnB1c2goe2VsZW06bCxtYXRjaGVzOnF9KX19ZC5sZW5ndGg+ZSYmaS5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGo9MDtqPGkubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2orKyl7cD1pW2pdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGs9MDtrPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7aysrKXtyPXAubWF0Y2hlc1trXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPSgoZi5ldmVudC5zcGVjaWFsW3Iub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGQpe3ZhciBlLGYsZyxoPWQuYnV0dG9uLGk9ZC5mcm9tRWxlbWVudDthLnBhZ2VYPT1udWxsJiZkLmNsaWVudFghPW51bGwmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsZj1lLmRvY3VtZW50RWxlbWVudCxnPWUuYm9keSxhLnBhZ2VYPWQuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxnJiZnLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGcmJmcuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1kLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxnJiZnLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxnJiZnLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmkmJihhLnJlbGF0ZWRUYXJnZXQ9aT09PWEudGFyZ2V0P2QudG9FbGVtZW50OmkpLCFhLndoaWNoJiZoIT09YiYmKGEud2hpY2g9aCYxPzE6aCYyPzM6aCY0PzI6MCk7cmV0dXJuIGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtmLmV4cGFuZG9dKXJldHVybiBhO3ZhciBkLGUsZz1hLGg9Zi5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxpPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wczthPWYuRXZlbnQoZyk7Zm9yKGQ9aS5sZW5ndGg7ZDspZT1pWy0tZF0sYVtlXT1nW2VdO2EudGFyZ2V0fHwoYS50YXJnZXQ9Zy5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9PT1iJiYoYS5tZXRhS2V5PWEuY3RybEtleSk7cmV0dXJuIGguZmlsdGVyP2guZmlsdGVyKGEsZyk6YX0sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmYuYmluZFJlYWR5fSxsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtmLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Zi5leHRlbmQobmV3IGYuRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP2YuZXZlbnQudHJpZ2dlcihlLG51bGwsYik6Zi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sZi5ldmVudC5oYW5kbGU9Zi5ldmVudC5kaXNwYXRjaCxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgZi5FdmVudCkpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/SzpKKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxmLm5vdygpLHRoaXNbZi5leHBhbmRvXT0hMH0sZi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Szt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1LLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpKLGlzUHJvcGFnYXRpb25TdG9wcGVkOkosaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6Sn0sZi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtmLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1hLnJlbGF0ZWRUYXJnZXQsZT1hLmhhbmRsZU9iaixnPWUuc2VsZWN0b3IsaDtpZighZHx8ZCE9PWMmJiFmLmNvbnRhaW5zKGMsZCkpYS50eXBlPWUub3JpZ1R5cGUsaD1lLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iO3JldHVybiBofX19KSxmLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYoZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7Zi5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYz1hLnRhcmdldCxkPWYubm9kZU5hbWUoYywiaW5wdXQiKXx8Zi5ub2RlTmFtZShjLCJidXR0b24iKT9jLmZvcm06YjtkJiYhZC5fc3VibWl0X2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLGQuX3N1Ym1pdF9hdHRhY2hlZD0hMCl9KX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZih6LnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpZi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSxmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7ei50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxiLl9jaGFuZ2VfYXR0YWNoZWQ9ITApfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIik7cmV0dXJuIHoudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxmLnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fGYuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgZD0wLGU9ZnVuY3Rpb24oYSl7Zi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LGYuZXZlbnQuZml4KGEpLCEwKX07Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7dHlwZW9mIGMhPSJzdHJpbmciJiYoZD1jLGM9Yik7Zm9yKGkgaW4gYSl0aGlzLm9uKGksYyxkLGFbaV0sZyk7cmV0dXJuIHRoaXN9ZD09bnVsbCYmZT09bnVsbD8oZT1jLGQ9Yz1iKTplPT1udWxsJiYodHlwZW9mIGM9PSJzdHJpbmciPyhlPWQsZD1iKTooZT1kLGQ9YyxjPWIpKTtpZihlPT09ITEpZT1KO2Vsc2UgaWYoIWUpcmV0dXJuIHRoaXM7Zz09PTEmJihoPWUsZT1mdW5jdGlvbihhKXtmKCkub2ZmKGEpO3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWguZ3VpZHx8KGguZ3VpZD1mLmd1aWQrKykpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LmFkZCh0aGlzLGEsZSxkLGMpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbi5jYWxsKHRoaXMsYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYyxkKXtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iail7dmFyIGU9YS5oYW5kbGVPYmo7ZihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZS5uYW1lc3BhY2U/ZS50eXBlKyIuIitlLm5hbWVzcGFjZTplLnR5cGUsZS5zZWxlY3RvcixlLmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKHZhciBnIGluIGEpdGhpcy5vZmYoZyxjLGFbZ10pO3JldHVybiB0aGlzfWlmKGM9PT0hMXx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZD1jLGM9YjtkPT09ITEmJihkPUopO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7Zih0aGlzLmNvbnRleHQpLm9uKGEsdGhpcy5zZWxlY3RvcixiLGMpO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtmKHRoaXMuY29udGV4dCkub2ZmKGEsdGhpcy5zZWxlY3Rvcnx8IioqIixiKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhLGMpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2YuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSksYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2UuZ3VpZD1jO3doaWxlKGQ8Yi5sZW5ndGgpYltkKytdLmd1aWQ9YztyZXR1cm4gdGhpcy5jbGljayhlKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSksZi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxsKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfSxmLmF0dHJGbiYmKGYuYXR0ckZuW2JdPSEwKSxDLnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQua2V5SG9va3MpLEQudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3NbYl09Zi5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31pZihqLm5vZGVUeXBlPT09MSl7Z3x8KGpbZF09YyxqLnNpenNldD1oKTtpZih0eXBlb2YgYiE9InN0cmluZyIpe2lmKGo9PT1iKXtrPSEwO2JyZWFrfX1lbHNlIGlmKG0uZmlsdGVyKGIsW2pdKS5sZW5ndGg+MCl7az1qO2JyZWFrfX1qPWpbYV19ZVtoXT1rfX19ZnVuY3Rpb24gdyhhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31qLm5vZGVUeXBlPT09MSYmIWcmJihqW2RdPWMsai5zaXpzZXQ9aCk7aWYoai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yil7az1qO2JyZWFrfWo9althXX1lW2hdPWt9fX12YXIgYT0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLGQ9InNpemNhY2hlIisoTWF0aC5yYW5kb20oKSsiIikucmVwbGFjZSgiLiIsIiIpLGU9MCxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD0hMSxpPSEwLGo9L1xcL2csaz0vXHJcbi9nLGw9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aT0hMTtyZXR1cm4gMH0pO3ZhciBtPWZ1bmN0aW9uKGIsZCxlLGYpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGU7dmFyIGksaixrLGwsbixxLHIsdCx1PSEwLHY9bS5pc1hNTChkKSx3PVtdLHg9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHgpO2lmKGkpe3g9aVszXSx3LnB1c2goaVsxXSk7aWYoaVsyXSl7bD1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYody5sZW5ndGg+MSYmcC5leGVjKGIpKWlmKHcubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVt3WzBdXSlqPXkod1swXSt3WzFdLGQsZik7ZWxzZXtqPW8ucmVsYXRpdmVbd1swXV0/W2RdOm0ody5zaGlmdCgpLGQpO3doaWxlKHcubGVuZ3RoKWI9dy5zaGlmdCgpLG8ucmVsYXRpdmVbYl0mJihiKz13LnNoaWZ0KCkpLGo9eShiLGosZil9ZWxzZXshZiYmdy5sZW5ndGg+MSYmZC5ub2RlVHlwZT09PTkmJiF2JiZvLm1hdGNoLklELnRlc3Qod1swXSkmJiFvLm1hdGNoLklELnRlc3Qod1t3Lmxlbmd0aC0xXSkmJihuPW0uZmluZCh3LnNoaWZ0KCksZCx2KSxkPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpWzBdOm4uc2V0WzBdKTtpZihkKXtuPWY/e2V4cHI6dy5wb3AoKSxzZXQ6cyhmKX06bS5maW5kKHcucG9wKCksdy5sZW5ndGg9PT0xJiYod1swXT09PSJ+Inx8d1swXT09PSIrIikmJmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx2KSxqPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpOm4uc2V0LHcubGVuZ3RoPjA/az1zKGopOnU9ITE7d2hpbGUody5sZW5ndGgpcT13LnBvcCgpLHI9cSxvLnJlbGF0aXZlW3FdP3I9dy5wb3AoKTpxPSIiLHI9PW51bGwmJihyPWQpLG8ucmVsYXRpdmVbcV0oayxyLHYpfWVsc2Ugaz13PVtdfWt8fChrPWopLGt8fG0uZXJyb3IocXx8Yik7aWYoZy5jYWxsKGspPT09IltvYmplY3QgQXJyYXldIilpZighdSllLnB1c2guYXBwbHkoZSxrKTtlbHNlIGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYmKGtbdF09PT0hMHx8a1t0XS5ub2RlVHlwZT09PTEmJm0uY29udGFpbnMoZCxrW3RdKSkmJmUucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYma1t0XS5ub2RlVHlwZT09PTEmJmUucHVzaChqW3RdKTtlbHNlIHMoayxlKTtsJiYobShsLGgsZSxmKSxtLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTttLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYodSl7aD1pLGEuc29ydCh1KTtpZihoKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0sbS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYSxudWxsLG51bGwsYil9LG0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sbS5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWEpcmV0dXJuW107Zm9yKGU9MCxmPW8ub3JkZXIubGVuZ3RoO2U8ZjtlKyspe2g9by5vcmRlcltlXTtpZihnPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe2k9Z1sxXSxnLnNwbGljZSgxLDEpO2lmKGkuc3Vic3RyKGkubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaiwiIiksZD1vLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxtLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLHAscT1hLHI9W10scz1jLHQ9YyYmY1swXSYmbS5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKGggaW4gby5maWx0ZXIpaWYoKGY9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe2s9by5maWx0ZXJbaF0sbD1mWzFdLGc9ITEsZi5zcGxpY2UoMSwxKTtpZihsLnN1YnN0cihsLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7cz09PXImJihyPVtdKTtpZihvLnByZUZpbHRlcltoXSl7Zj1vLnByZUZpbHRlcltoXShmLHMsZCxyLGUsdCk7aWYoIWYpZz1pPSEwO2Vsc2UgaWYoZj09PSEwKWNvbnRpbnVlfWlmKGYpZm9yKG49MDsoaj1zW25dKSE9bnVsbDtuKyspaiYmKGk9ayhqLGYsbixzKSxwPWVeaSxkJiZpIT1udWxsP3A/Zz0hMDpzW25dPSExOnAmJihyLnB1c2goaiksZz0hMCkpO2lmKGkhPT1iKXtkfHwocz1yKSxhPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PXEpaWYoZz09bnVsbCltLmVycm9yKGEpO2Vsc2UgYnJlYWs7cT1hfXJldHVybiBzfSxtLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX07dmFyIG49bS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLm5vZGVUeXBlLGU9IiI7aWYoZCl7aWYoZD09PTF8fGQ9PT05KXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkCismJm0uZmlsdGVyKGIsYSwhMCl9fSwiIjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXcpLGcoInBhcmVudE5vZGUiLGIsZixhLGQsYyl9LCJ+IjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXcpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZCxjKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFjKXt2YXIgZD1iLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBkJiZkLnBhcmVudE5vZGU/W2RdOltdfX0sTkFNRTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT0idW5kZWZpbmVkIil7dmFyIGM9W10sZD1iLmdldEVsZW1lbnRzQnlOYW1lKGFbMV0pO2Zvcih2YXIgZT0wLGY9ZC5sZW5ndGg7ZTxmO2UrKylkW2VdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09YVsxXSYmYy5wdXNoKGRbZV0pO3JldHVybiBjLmxlbmd0aD09PTA/bnVsbDpjfX0sVEFHOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiKXJldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pfX0scHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsxXS5yZXBsYWNlKGosIiIpKyIgIjtpZihmKXJldHVybiBhO2Zvcih2YXIgZz0wLGg7KGg9YltnXSkhPW51bGw7ZysrKWgmJihlXihoLmNsYXNzTmFtZSYmKCIgIitoLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5pbmRleE9mKGEpPj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKX0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKS50b0xvd2VyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihhKXtpZihhWzFdPT09Im50aCIpe2FbMl18fG0uZXJyb3IoYVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyovZywiIik7dmFyIGI9LygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiImJiIybiJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4rIithWzJdfHxhWzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9ZWxzZSBhWzJdJiZtLmVycm9yKGFbMF0pO2FbMF09ZSsrO3JldHVybiBhfSxBVFRSOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hWzFdPWFbMV0ucmVwbGFjZShqLCIiKTshZiYmby5hdHRyTWFwW2ddJiYoYVsxXT1vLmF0dHJNYXBbZ10pLGFbNF09KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGosIiIpLGFbMl09PT0ifj0iJiYoYVs0XT0iICIrYVs0XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQsZSxmKXtpZihiWzFdPT09Im5vdCIpaWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KGJbM10pKWJbM109bShiWzNdLG51bGwsbnVsbCxjKTtlbHNle3ZhciBnPW0uZmlsdGVyKGJbM10sYyxkLCEwXmYpO2R8fGUucHVzaC5hcHBseShlLGcpO3JldHVybiExfWVsc2UgaWYoby5tYXRjaC5QT1MudGVzdChiWzBdKXx8by5tYXRjaC5DSElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVybiBifSxQT1M6ZnVuY3Rpb24oYSl7YS51bnNoaWZ0KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMSYmYS50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09PSEwfSxzZWxlY3RlZDpmdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBhLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rpb24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hIW0oY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2kudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpLGM9YS50eXBlO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYidGV4dCI9PT1jJiYoYj09PWN8fGI9PT1udWxsKX0scmFkaW86ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJyYWRpbyI9PT1hLnR5cGV9LGNoZWNrYm94OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiY2hlY2tib3giPT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiZmlsZSI9PT1hLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicGFzc3dvcmQiPT09YS50eXBlfSxzdWJtaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInN1Ym1pdCI9PT1hLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiaW1hZ2UiPT09YS50eXBlfSxyZXNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5wdXQifHxiPT09ImJ1dHRvbiIpJiYicmVzZXQiPT09YS50eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmImJ1dHRvbiI9PT1hLnR5cGV8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWEub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50fX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PTB9LGxhc3Q6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PT1kLmxlbmd0aC0xfSxldmVuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTB9LG9kZDpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0xfSxsdDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI8Y1szXS0wfSxndDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI+Y1szXS0wfSxudGg6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifSxlcTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9fSxmaWx0ZXI6e1BTRVVETzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzFdLGY9by5maWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCk7aWYoZT09PSJjb250YWlucyIpcmV0dXJuKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxuKFthXSl8fCIiKS5pbmRleE9mKGJbM10pPj0wO2lmKGU9PT0ibm90Iil7dmFyIGc9YlszXTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspaWYoZ1toXT09PWEpcmV0dXJuITE7cmV0dXJuITB9bS5lcnJvcihlKX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPWJbMV0sbD1hO3N3aXRjaChrKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKGw9bC5wcmV2aW91c1NpYmxpbmcpaWYobC5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoaz09PSJmaXJzdCIpcmV0dXJuITA7bD1hO2Nhc2UibGFzdCI6d2hpbGUobD1sLm5leHRTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwO2Nhc2UibnRoIjpjPWJbMl0sZT1iWzNdO2lmKGM9PT0xJiZlPT09MClyZXR1cm4hMDtmPWJbMF0sZz1hLnBhcmVudE5vZGU7aWYoZyYmKGdbZF0hPT1mfHwhYS5ub2RlSW5kZXgpKXtpPTA7Zm9yKGw9Zy5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKWwubm9kZVR5cGU9PT0xJiYobC5ub2RlSW5kZXg9KytpKTtnW2RdPWZ9aj1hLm5vZGVJbmRleC1lO3JldHVybiBjPT09MD9qPT09MDpqJWM9PT0wJiZqL2M+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fCEhYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn0sQ0xBU1M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIiAiKyhhLmNsYXNzTmFtZXx8YS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihiKT4tMX0sQVRUUjpmdW5jdGlvbihhLGIpe3ZhciBjPWJbMV0sZD1tLmF0dHI/bS5hdHRyKGEsYyk6by5hdHRySGFuZGxlW2NdP28uYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6IWYmJm0uYXR0cj9kIT1udWxsOmY9PT0iPSI/ZT09PWc6Zj09PSIqPSI/ZS5pbmRleE9mKGcpPj0wOmY9PT0ifj0iPygiICIrZSsiICIpLmluZGV4T2YoZyk+PTA6Zz9mPT09IiE9Ij9lIT09ZzpmPT09Il49Ij9lLmluZGV4T2YoZyk9PT0wOmY9PT0iJD0iP2Uuc3Vic3RyKGUubGVuZ3RoLWcubGVuZ3RoKT09PWc6Zj09PSJ8PSI/ZT09PWd8fGUuc3Vic3RyKDAsZy5sZW5ndGgrMSk9PT1nKyItIjohMTplJiZkIT09ITF9LFBPUzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzJdLGY9by5zZXRGaWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCl9fX0scD1vLm1hdGNoLlBPUyxxPWZ1bmN0aW9uKGEsYil7cmV0dXJuIlxcIisoYi0wKzEpfTtmb3IodmFyIHIgaW4gby5tYXRjaClvLm1hdGNoW3JdPW5ldyBSZWdFeHAoby5tYXRjaFtyXS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSxvLmxlZnRNYXRjaFtyXT1uZXcgUmVnRXhwKC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2Urby5tYXRjaFtyXS5zb3VyY2UucmVwbGFjZSgvXFwoXGQrKS9nLHEpKTt2YXIgcz1mdW5jdGlvbihhLGIpe2E9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwwKTtpZihiKXtiLnB1c2guYXBwbHkoYixhKTtyZXR1cm4gYn1yZXR1cm4gYX07dHJ5e0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2godCl7cz1mdW5jdGlvbihhLGIpe3ZhciBjPTAsZD1ifHxbXTtpZihnLmNhbGwoYSk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsYSk7ZWxzZSBpZih0eXBlb2YgYS5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZT1hLmxlbmd0aDtjPGU7YysrKWQucHVzaChhW2NdKTtlbHNlIGZvcig7YVtjXTtjKyspZC5wdXNoKGFbY10pO3JldHVybiBkfX12YXIgdSx2O2MuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP3U9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7aD0hMDtyZXR1cm4gMH1pZighYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MTtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0Py0xOjF9Oih1PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoYS5zb3VyY2VJbmRleCYmYi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1bXSxmPVtdLGc9YS5wYXJlbnROb2RlLGk9Yi5wYXJlbnROb2RlLGo9ZztpZihnPT09aSlyZXR1cm4gdihhLGIpO2lmKCFnKXJldHVybi0xO2lmKCFpKXJldHVybiAxO3doaWxlKGopZS51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2o9aTt3aGlsZShqKWYudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtjPWUubGVuZ3RoLGQ9Zi5sZW5ndGg7Zm9yKHZhciBrPTA7azxjJiZrPGQ7aysrKWlmKGVba10hPT1mW2tdKXJldHVybiB2KGVba10sZltrXSk7cmV0dXJuIGs9PT1jP3YoYSxmW2tdLC0xKTp2KGVba10sYiwxKX0sdj1mdW5jdGlvbihhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihkPT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9KSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKSxlPWMuZG9jdW1lbnRFbGVtZW50O2EuaW5uZXJIVE1MPSI8YSBuYW1lPSciK2QrIicvPiIsZS5pbnNlcnRCZWZvcmUoYSxlLmZpcnN0Q2hpbGQpLGMuZ2V0RWxlbWVudEJ5SWQoZCkmJihvLmZpbmQuSUQ9ZnVuY3Rpb24oYSxjLGQpe2lmKHR5cGVvZiBjLmdldEVsZW1lbnRCeUlkIT0idW5kZWZpbmVkIiYmIWQpe3ZhciBlPWMuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7cmV0dXJuIGU/ZS5pZD09PWFbMV18fHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09YVsxXT9bZV06YjpbXX19LG8uZmlsdGVyLklEPWZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCImJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmMmJmMubm9kZVZhbHVlPT09Yn0pLGUucmVtb3ZlQ2hpbGQoYSksZT1hPW51bGx9KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuYXBwZW5kQ2hpbGQoYy5jcmVhdGVDb21tZW50KCIiKSksYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wJiYoby5maW5kLlRBRz1mdW5jdGlvbihhLGIpe3ZhciBjPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSk7aWYoYVsxXT09PSIqIil7dmFyIGQ9W107Zm9yKHZhciBlPTA7Y1tlXTtlKyspY1tlXS5ub2RlVHlwZT09PTEmJmQucHVzaChjW2VdKTtjPWR9cmV0dXJuIGN9KSxhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBlb2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9InVuZGVmaW5lZCImJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PSIjIiYmKG8uYXR0ckhhbmRsZS5ocmVmPWZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9KSxhPW51bGx9KCksYy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBhPW0sYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9Il9fc2l6emxlX18iO2IuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIWIucXVlcnlTZWxlY3RvckFsbHx8Yi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCE9PTApe209ZnVuY3Rpb24oYixlLGYsZyl7ZT1lfHxjO2lmKCFnJiYhbS5pc1hNTChlKSl7dmFyIGg9L14oXHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdcLV0rJCkvLmV4ZWMoYik7aWYoaCYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09OSkpe2lmKGhbMV0pcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKSxmKTtpZihoWzJdJiZvLmZpbmQuQ0xBU1MmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gcyhlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaFsyXSksZil9aWYoZS5ub2RlVHlwZT09PTkpe2lmKGI9PT0iYm9keSImJmUuYm9keSlyZXR1cm4gcyhbZS5ib2R5XSxmKTtpZihoJiZoWzNdKXt2YXIgaT1lLmdldEVsZW1lbnRCeUlkKGhbM10pO2lmKCFpfHwhaS5wYXJlbnROb2RlKXJldHVybiBzKFtdLGYpO2lmKGkuaWQ9PT1oWzNdKXJldHVybiBzKFtpXSxmKX10cnl7cmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKGIpLGYpfWNhdGNoKGope319ZWxzZSBpZihlLm5vZGVUeXBlPT09MSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe3ZhciBrPWUsbD1lLmdldEF0dHJpYnV0ZSgiaWQiKSxuPWx8fGQscD1lLnBhcmVudE5vZGUscT0vXlxzKlsrfl0vLnRlc3QoYik7bD9uPW4ucmVwbGFjZSgvJy9nLCJcXCQmIik6ZS5zZXRBdHRyaWJ1dGUoImlkIixuKSxxJiZwJiYoZT1lLnBhcmVudE5vZGUpO3RyeXtpZighcXx8cClyZXR1cm4gcyhlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZD0nIituKyInXSAiK2IpLGYpfWNhdGNoKHIpe31maW5hbGx5e2x8fGsucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGEoYixlLGYsZyl9O2Zvcih2YXIgZSBpbiBhKW1bZV09YVtlXTtiPW51bGx9fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5kb2N1bWVudEVsZW1lbnQsYj1hLm1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yO2lmKGIpe3ZhciBkPSFiLmNhbGwoYy5jcmVhdGVFbGVtZW50KCJkaXYiKSwiZGl2IiksZT0hMTt0cnl7Yi5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKGYpe2U9ITB9bS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxjKXtjPWMucmVwbGFjZSgvXD1ccyooW14nIlxdXSopXHMqXF0vZywiPSckMSddIik7aWYoIW0uaXNYTUwoYSkpdHJ5e2lmKGV8fCFvLm1hdGNoLlBTRVVETy50ZXN0KGMpJiYhLyE9Ly50ZXN0KGMpKXt2YXIgZj1iLmNhbGwoYSxjKTtpZihmfHwhZHx8YS5kb2N1bWVudCYmYS5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBmfX1jYXRjaChnKXt9cmV0dXJuIG0oYyxudWxsLG51bGwsW2FdKS5sZW5ndGg+MH19fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEhYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0wKXthLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpcmV0dXJuO28ub3JkZXIuc3BsaWNlKDEsMCwiQ0xBU1MiKSxvLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPSJ1bmRlZmluZWQiJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGFbMV0pfSxhPW51bGx9fSgpLGMuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zP20uY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSE9PWImJihhLmNvbnRhaW5zP2EuY29udGFpbnMoYik6ITApfTpjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNil9Om0uY29udGFpbnM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj0oYT9hLm93bmVyRG9jdW1lbnR8fGE6MCkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiP2Iubm9kZU5hbWUhPT0iSFRNTCI6ITF9O3ZhciB5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9IiIsZz1iLm5vZGVUeXBlP1tiXTpiO3doaWxlKGQ9by5tYXRjaC5QU0VVRE8uZXhlYyhhKSlmKz1kWzBdLGE9YS5yZXBsYWNlKG8ubWF0Y2guUFNFVURPLCIiKTthPW8ucmVsYXRpdmVbYV0/YSsiKiI6YTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspbShhLGdbaF0sZSxjKTtyZXR1cm4gbS5maWx0ZXIoZixlKX07bS5hdHRyPWYuYXR0cixtLnNlbGVjdG9ycy5hdHRyTWFwPXt9LGYuZmluZD1tLGYuZXhwcj1tLnNlbGVjdG9ycyxmLmV4cHJbIjoiXT1mLmV4cHIuZmlsdGVycyxmLnVuaXF1ZT1tLnVuaXF1ZVNvcnQsZi50ZXh0PW0uZ2V0VGV4dCxmLmlzWE1MRG9jPW0uaXNYTUwsZi5jb250YWlucz1tLmNvbnRhaW5zfSgpO3ZhciBMPS9VbnRpbCQvLE09L14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sTj0vLC8sTz0vXi5bXjojXFtcLixdKiQvLFA9QXJyYXkucHJvdG90eXBlLnNsaWNlLFE9Zi5leHByLm1hdGNoLlBPUyxSPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2YuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYyxkO2lmKHR5cGVvZiBhIT0ic3RyaW5nIilyZXR1cm4gZihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylpZihmLmNvbnRhaW5zKGJbY10sdGhpcykpcmV0dXJuITB9KTt2YXIgZT10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsYSksZyxoLGk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2c9ZS5sZW5ndGgsZi5maW5kKGEsdGhpc1tjXSxlKTtpZihjPjApZm9yKGg9ZztoPGUubGVuZ3RoO2grKylmb3IoaT0wO2k8ZztpKyspaWYoZVtpXT09PWVbaF0pe2Uuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGV9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1mKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9Yi5sZW5ndGg7YTxjO2ErKylpZihmLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsYSwhMSksIm5vdCIsYSl9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/US50ZXN0KGEpP2YoYSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOmYuZmlsdGVyKGEsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoYSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZCxlLGc9dGhpc1swXTtpZihmLmlzQXJyYXkoYSkpe3ZhciBoPTE7d2hpbGUoZyYmZy5vd25lckRvY3VtZW50JiZnIT09Yil7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmKGcpLmlzKGFbZF0pJiZjLnB1c2goe3NlbGVjdG9yOmFbZF0sZWxlbTpnLGxldmVsOmh9KTtnPWcucGFyZW50Tm9kZSxoKyt9cmV0dXJuIGN9dmFyIGk9US50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/ZihhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO3doaWxlKGcpe2lmKGk/aS5pbmRleChnKT4tMTpmLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGcsYSkpe2MucHVzaChnKTticmVha31nPWcucGFyZW50Tm9kZTtpZighZ3x8IWcub3duZXJEb2N1bWVudHx8Zz09PWJ8fGcubm9kZVR5cGU9PT0xMSlicmVha319Yz1jLmxlbmd0aD4xP2YudW5pcXVlKGMpOmM7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGMsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMucHJldkFsbCgpLmxlbmd0aDotMTtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGYuaW5BcnJheSh0aGlzWzBdLGYoYSkpO3JldHVybiBmLmluQXJyYXkoYS5qcXVlcnk/YVswXTphLHRoaXMpfSxhZGQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYT09InN0cmluZyI/ZihhLGIpOmYubWFrZUFycmF5KGEmJmEubm9kZVR5cGU/W2FdOmEpLGQ9Zi5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhTKGNbMF0pfHxTKGRbMF0pP2Q6Zi51bmlxdWUoZCkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSksZi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBmLnNpYmxpbmcoYS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBmLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpmLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMsZCl7dmFyIGU9Zi5tYXAodGhpcyxiLGMpO0wudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFSW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fE4udGVzdChkKSkmJk0udGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsUC5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSxmLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtjJiYoYT0iOm5vdCgiK2ErIikiKTtyZXR1cm4gYi5sZW5ndGg9PT0xP2YuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106Zi5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxnPWFbY107d2hpbGUoZyYmZy5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zy5ub2RlVHlwZSE9PTF8fCFmKGcpLmlzKGQpKSlnLm5vZGVUeXBlPT09MSYmZS5wdXNoKGcpLGc9Z1tjXTtyZXR1cm4gZX0sbnRoOmZ1bmN0aW9uKGEsYixjLGQpe2I9Ynx8MTt2YXIgZT0wO2Zvcig7YTthPWFbY10paWYoYS5ub2RlVHlwZT09PTEmJisrZT09PWIpYnJlYWs7cmV0dXJuIGF9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IoO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pO3ZhciBWPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98Y2FudmFzfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixXPS8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csWD0vXlxzKy8sWT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLFo9LzwoW1x3Ol0rKS8sJD0vPHRib2R5L2ksXz0vPHwmIz9cdys7LyxiYT0vPCg/OnNjcmlwdHxzdHlsZSkvaSxiYj0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLGJjPW5ldyBSZWdFeHAoIjwoPzoiK1YrIikiLCJpIiksYmQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYmU9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxiZj0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pLyxiZz17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxiaD1VKGMpO2JnLm9wdGdyb3VwPWJnLm9wdGlvbixiZy50Ym9keT1iZy50Zm9vdD1iZy5jb2xncm91cD1iZy5jYXB0aW9uPWJnLnRoZWFkLGJnLnRoPWJnLnRkLGYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwoYmcuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il0pLGYuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Yy50ZXh0KGEuY2FsbCh0aGlzLGIsYy50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmYSE9PWIpcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YykuY3JlYXRlVGV4dE5vZGUoYSkpO3JldHVybiBmLnRleHQodGhpcyl9LHdyYXBBbGw6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPWYoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTEpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtmKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Zi5jbGVhbihhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGYuY2xlYW4oYXJndW1lbnRzKSk7cmV0dXJuIGF9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkOyhkPXRoaXNbY10pIT1udWxsO2MrKylpZighYXx8Zi5maWx0ZXIoYSxbZF0pLmxlbmd0aCkhYiYmZC5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YShkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLAorZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCkKK3tmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKyl7Yi5ub2RlVHlwZT09PTEmJmYuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYi5maXJzdENoaWxkKWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXthPWE9PW51bGw/ITE6YSxiPWI9PW51bGw/YTpiO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBmLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe2lmKGE9PT1iKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLm5vZGVUeXBlPT09MT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKFcsIiIpOm51bGw7aWYodHlwZW9mIGE9PSJzdHJpbmciJiYhYmEudGVzdChhKSYmKGYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVgudGVzdChhKSkmJiFiZ1soWi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcih2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl0aGlzW2NdLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKHRoaXNbY10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdGhpc1tjXS5pbm5lckhUTUw9YSl9Y2F0Y2goZSl7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBmLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Yy5odG1sKGEuY2FsbCh0aGlzLGIsYy5odG1sKCkpKX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKSxkPWMuaHRtbCgpO2MucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixkKSl9KTt0eXBlb2YgYSE9InN0cmluZyImJihhPWYoYSkuZGV0YWNoKCkpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5leHRTaWJsaW5nLGM9dGhpcy5wYXJlbnROb2RlO2YodGhpcykucmVtb3ZlKCksYj9mKGIpLmJlZm9yZShhKTpmKGMpLmFwcGVuZChhKX0pfXJldHVybiB0aGlzLmxlbmd0aD90aGlzLnB1c2hTdGFjayhmKGYuaXNGdW5jdGlvbihhKT9hKCk6YSksInJlcGxhY2VXaXRoIixhKTp0aGlzfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGksaj1hWzBdLGs9W107aWYoIWYuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGo9PSJzdHJpbmciJiZiZC50ZXN0KGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKHRoaXMpLmRvbU1hbmlwKGEsYyxkLCEwKX0pO2lmKGYuaXNGdW5jdGlvbihqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPWYodGhpcyk7YVswXT1qLmNhbGwodGhpcyxlLGM/Zy5odG1sKCk6YiksZy5kb21NYW5pcChhLGMsZCl9KTtpZih0aGlzWzBdKXtpPWomJmoucGFyZW50Tm9kZSxmLnN1cHBvcnQucGFyZW50Tm9kZSYmaSYmaS5ub2RlVHlwZT09PTExJiZpLmNoaWxkTm9kZXMubGVuZ3RoPT09dGhpcy5sZW5ndGg/ZT17ZnJhZ21lbnQ6aX06ZT1mLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGg9ZS5mcmFnbWVudCxoLmNoaWxkTm9kZXMubGVuZ3RoPT09MT9nPWg9aC5maXJzdENoaWxkOmc9aC5maXJzdENoaWxkO2lmKGcpe2M9YyYmZi5ub2RlTmFtZShnLCJ0ciIpO2Zvcih2YXIgbD0wLG09dGhpcy5sZW5ndGgsbj1tLTE7bDxtO2wrKylkLmNhbGwoYz9iaSh0aGlzW2xdLGcpOnRoaXNbbF0sZS5jYWNoZWFibGV8fG0+MSYmbDxuP2YuY2xvbmUoaCwhMCwhMCk6aCl9ay5sZW5ndGgmJmYuZWFjaChrLGJwKX1yZXR1cm4gdGhpc319KSxmLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGcsaCxpLGo9YVswXTtiJiZiWzBdJiYoaT1iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF0pLGkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8KGk9YyksYS5sZW5ndGg9PT0xJiZ0eXBlb2Ygaj09InN0cmluZyImJmoubGVuZ3RoPDUxMiYmaT09PWMmJmouY2hhckF0KDApPT09IjwiJiYhYmIudGVzdChqKSYmKGYuc3VwcG9ydC5jaGVja0Nsb25lfHwhYmQudGVzdChqKSkmJihmLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJjLnRlc3QoaikpJiYoZz0hMCxoPWYuZnJhZ21lbnRzW2pdLGgmJmghPT0xJiYoZT1oKSksZXx8KGU9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZi5jbGVhbihhLGksZSxkKSksZyYmKGYuZnJhZ21lbnRzW2pdPWg/ZToxKTtyZXR1cm57ZnJhZ21lbnQ6ZSxjYWNoZWFibGU6Z319LGYuZnJhZ21lbnRzPXt9LGYuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjKXt2YXIgZD1bXSxlPWYoYyksZz10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZihnJiZnLm5vZGVUeXBlPT09MTEmJmcuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiZlLmxlbmd0aD09PTEpe2VbYl0odGhpc1swXSk7cmV0dXJuIHRoaXN9Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj0oaD4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpO2YoZVtoXSlbYl0oaiksZD1kLmNvbmNhdChqKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZCxhLGUuc2VsZWN0b3IpfX0pLGYuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnLGg9Zi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCFiYy50ZXN0KCI8IithLm5vZGVOYW1lKT9hLmNsb25lTm9kZSghMCk6Ym8oYSk7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7YmsoYSxoKSxkPWJsKGEpLGU9YmwoaCk7Zm9yKGc9MDtkW2ddOysrZyllW2ddJiZiayhkW2ddLGVbZ10pfWlmKGIpe2JqKGEsaCk7aWYoYyl7ZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpYmooZFtnXSxlW2ddKX19ZD1lPW51bGw7cmV0dXJuIGh9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIV8udGVzdChrKSlrPWIuY3JlYXRlVGV4dE5vZGUoayk7ZWxzZXtrPWsucmVwbGFjZShZLCI8JDE+PC8kMj4iKTt2YXIgbD0oWi5leGVjKGspfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG09YmdbbF18fGJnLl9kZWZhdWx0LG49bVswXSxvPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yj09PWM/YmguYXBwZW5kQ2hpbGQobyk6VShiKS5hcHBlbmRDaGlsZChvKSxvLmlubmVySFRNTD1tWzFdK2srbVsyXTt3aGlsZShuLS0pbz1vLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcD0kLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmWC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKFguZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJuKGtbaV0pO2Vsc2UgYm4oayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiZS50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJxPS9hbHBoYVwoW14pXSpcKS9pLGJyPS9vcGFjaXR5PShbXildKikvLGJzPS8oW0EtWl18Xm1zKS9nLGJ0PS9eLT9cZCsoPzpweCk/JC9pLGJ1PS9eLT9cZC8sYnY9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ4PVsiTGVmdCIsIlJpZ2h0Il0sYnk9WyJUb3AiLCJCb3R0b20iXSxieixiQSxiQjtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnooYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1idi5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYnopcmV0dXJuIGJ6KGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiQyhhLGIsZCk7Zi5zd2FwKGEsYncsZnVuY3Rpb24oKXtlPWJDKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ0LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBici50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnEsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icS50ZXN0KGcpP2cucmVwbGFjZShicSxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1ieihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7Yj1iLnJlcGxhY2UoYnMsIi0kMSIpLnRvTG93ZXJDYXNlKCksKGQ9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSYmKGU9ZC5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkpJiYoYz1lLmdldFByb3BlcnR5VmFsdWUoYiksYz09PSIiJiYhZi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGEpJiYoYz1mLnN0eWxlKGEsYikpKTtyZXR1cm4gY30pLGMuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKGJCPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGc9YS5zdHlsZTtmPT09bnVsbCYmZyYmKGU9Z1tiXSkmJihmPWUpLCFidC50ZXN0KGYpJiZidS50ZXN0KGYpJiYoYz1nLmxlZnQsZD1hLnJ1bnRpbWVTdHlsZSYmYS5ydW50aW1lU3R5bGUubGVmdCxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxnLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6Znx8MCxmPWcucGl4ZWxMZWZ0KyJweCIsZy5sZWZ0PWMsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9ZCkpO3JldHVybiBmPT09IiI/ImF1dG8iOmZ9KSxiej1iQXx8YkIsZi5leHByJiZmLmV4cHIuZmlsdGVycyYmKGYuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFdpZHRoLGM9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGI9PT0wJiZjPT09MHx8IWYuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihhLnN0eWxlJiZhLnN0eWxlLmRpc3BsYXl8fGYuY3NzKGEsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LGYuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIWYuZXhwci5maWx0ZXJzLmhpZGRlbihhKX0pO3ZhciBiRD0vJTIwL2csYkU9L1xbXF0kLyxiRj0vXHI/XG4vZyxiRz0vIy4qJC8sYkg9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxiST0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYko9L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxiSz0vXig/OkdFVHxIRUFEKSQvLGJMPS9eXC9cLy8sYk09L1w/LyxiTj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxiTz0vXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSxiUD0vXHMrLyxiUT0vKFs/Jl0pXz1bXiZdKi8sYlI9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/KT8vLGJTPWYuZm4ubG9hZCxiVD17fSxiVT17fSxiVixiVyxiWD1bIiovIl0rWyIqIl07dHJ5e2JWPWUuaHJlZn1jYXRjaChiWSl7YlY9Yy5jcmVhdGVFbGVtZW50KCJhIiksYlYuaHJlZj0iIixiVj1iVi5ocmVmfWJXPWJSLmV4ZWMoYlYudG9Mb3dlckNhc2UoKSl8fFtdLGYuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYSE9InN0cmluZyImJmJTKXJldHVybiBiUy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBlPWEuaW5kZXhPZigiICIpO2lmKGU+PTApe3ZhciBnPWEuc2xpY2UoZSxhLmxlbmd0aCk7YT1hLnNsaWNlKDAsZSl9dmFyIGg9IkdFVCI7YyYmKGYuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6dHlwZW9mIGM9PSJvYmplY3QiJiYoYz1mLnBhcmFtKGMsZi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLGg9IlBPU1QiKSk7dmFyIGk9dGhpcztmLmFqYXgoe3VybDphLHR5cGU6aCxkYXRhVHlwZToiaHRtbCIsZGF0YTpjLGNvbXBsZXRlOmZ1bmN0aW9uKGEsYixjKXtjPWEucmVzcG9uc2VUZXh0LGEuaXNSZXNvbHZlZCgpJiYoYS5kb25lKGZ1bmN0aW9uKGEpe2M9YX0pLGkuaHRtbChnP2YoIjxkaXY+IikuYXBwZW5kKGMucmVwbGFjZShiTiwiIikpLmZpbmQoZyk6YykpLGQmJmkuZWFjaChkLFtjLGIsYV0pfX0pO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP2YubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Yk8udGVzdCh0aGlzLm5vZGVOYW1lKXx8YkkudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWYodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpmLmlzQXJyYXkoYyk/Zi5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYkYsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGJGLCJcclxuIil9fSkuZ2V0KCl9fSksZi5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2JfKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksYl8oYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlYsaXNMb2NhbDpiSi50ZXN0KGJXWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylh9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6YlooYlQpLGFqYXhUcmFuc3BvcnQ6YlooYlUpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NiKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNjKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJILmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJHLCIiKS5yZXBsYWNlKGJMLGJXWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlApLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJSLmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iV1sxXSYmclsyXT09YldbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiV1szXXx8KGJXWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGIkKGJULGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJLLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJNLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlEsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk0udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWCsiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1iJChiVSxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7aWYoczwyKXcoLTEseik7ZWxzZSB0aHJvdyB6fX1yZXR1cm4gdn0scGFyYW06ZnVuY3Rpb24oYSxjKXt2YXIgZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1mLmlzRnVuY3Rpb24oYik/YigpOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYoZi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIWYuaXNQbGFpbk9iamVjdChhKSlmLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IodmFyIGcgaW4gYSljYShnLGFbZ10sYyxlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShiRCwiKyIpfX0pLGYuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBjZD1mLm5vdygpLGNlPS8oXD0pXD8oJnwkKXxcP1w/L2k7Zi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiBmLmV4cGFuZG8rIl8iK2NkKyt9fSksZi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi5jb250ZW50VHlwZT09PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiJiZ0eXBlb2YgYi5kYXRhPT0ic3RyaW5nIjtpZihiLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGIuanNvbnAhPT0hMSYmKGNlLnRlc3QoYi51cmwpfHxlJiZjZS50ZXN0KGIuZGF0YSkpKXt2YXIgZyxoPWIuanNvbnBDYWxsYmFjaz1mLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaT1hW2hdLGo9Yi51cmwsaz1iLmRhdGEsbD0iJDEiK2grIiQyIjtiLmpzb25wIT09ITEmJihqPWoucmVwbGFjZShjZSxsKSxiLnVybD09PWomJihlJiYoaz1rLnJlcGxhY2UoY2UsbCkpLGIuZGF0YT09PWsmJihqKz0oL1w/Ly50ZXN0KGopPyImIjoiPyIpK2IuanNvbnArIj0iK2gpKSksYi51cmw9aixiLmRhdGE9ayxhW2hdPWZ1bmN0aW9uKGEpe2c9W2FdfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbaF09aSxnJiZmLmlzRnVuY3Rpb24oaSkmJmFbaF0oZ1swXSl9KSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtnfHxmLmVycm9yKGgrIiB3YXMgbm90IGNhbGxlZCIpO3JldHVybiBnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiI7cmV0dXJuInNjcmlwdCJ9fSksZi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe2YuZ2xvYmFsRXZhbChhKTtyZXR1cm4gYX19fSksZi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxmLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGQsZT1jLmhlYWR8fGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8Yy5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtkPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksZC5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGQuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGQuc3JjPWEudXJsLGQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7aWYoY3x8IWQucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChkLnJlYWR5U3RhdGUpKWQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZSYmZC5wYXJlbnROb2RlJiZlLnJlbW92ZUNoaWxkKGQpLGQ9YixjfHxnKDIwMCwic3VjY2VzcyIpfSxlLmluc2VydEJlZm9yZShkLGUuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7ZCYmZC5vbmxvYWQoMCwxKX19fX0pO3ZhciBjZj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY2gpY2hbYV0oMCwxKX06ITEsY2c9MCxjaDtmLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY2koKXx8Y2ooKX06Y2ksZnVuY3Rpb24oYSl7Zi5leHRlbmQoZi5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KGYuYWpheFNldHRpbmdzLnhocigpKSxmLnN1cHBvcnQuYWpheCYmZi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpCit7aWYoIWMuY3Jvc3NEb21haW58fGYuc3VwcG9ydC5jb3JzKXt2YXIgZDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGcpe3ZhciBoPWMueGhyKCksaSxqO2MudXNlcm5hbWU/aC5vcGVuKGMudHlwZSxjLnVybCxjLmFzeW5jLGMudXNlcm5hbWUsYy5wYXNzd29yZCk6aC5vcGVuKGMudHlwZSxjLnVybCxjLmFzeW5jKTtpZihjLnhockZpZWxkcylmb3IoaiBpbiBjLnhockZpZWxkcyloW2pdPWMueGhyRmllbGRzW2pdO2MubWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlKGMubWltZVR5cGUpLCFjLmNyb3NzRG9tYWluJiYhZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdJiYoZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtmb3IoaiBpbiBlKWguc2V0UmVxdWVzdEhlYWRlcihqLGVbal0pfWNhdGNoKGspe31oLnNlbmQoYy5oYXNDb250ZW50JiZjLmRhdGF8fG51bGwpLGQ9ZnVuY3Rpb24oYSxlKXt2YXIgaixrLGwsbSxuO3RyeXtpZihkJiYoZXx8aC5yZWFkeVN0YXRlPT09NCkpe2Q9YixpJiYoaC5vbnJlYWR5c3RhdGVjaGFuZ2U9Zi5ub29wLGNmJiZkZWxldGUgY2hbaV0pO2lmKGUpaC5yZWFkeVN0YXRlIT09NCYmaC5hYm9ydCgpO2Vsc2V7aj1oLnN0YXR1cyxsPWguZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksbT17fSxuPWgucmVzcG9uc2VYTUwsbiYmbi5kb2N1bWVudEVsZW1lbnQmJihtLnhtbD1uKSxtLnRleHQ9aC5yZXNwb25zZVRleHQ7dHJ5e2s9aC5zdGF0dXNUZXh0fWNhdGNoKG8pe2s9IiJ9IWomJmMuaXNMb2NhbCYmIWMuY3Jvc3NEb21haW4/aj1tLnRleHQ/MjAwOjQwNDpqPT09MTIyMyYmKGo9MjA0KX19fWNhdGNoKHApe2V8fGcoLTEscCl9bSYmZyhqLGssbSxsKX0sIWMuYXN5bmN8fGgucmVhZHlTdGF0ZT09PTQ/ZCgpOihpPSsrY2csY2YmJihjaHx8KGNoPXt9LGYoYSkudW5sb2FkKGNmKSksY2hbaV09ZCksaC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZCl9LGFib3J0OmZ1bmN0aW9uKCl7ZCYmZCgwLDEpfX19fSk7dmFyIGNrPXt9LGNsLGNtLGNuPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxjbz0vXihbK1wtXT0pPyhbXGQrLlwtXSspKFthLXolXSopJC9pLGNwLGNxPVtbImhlaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sWyJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0sWyJvcGFjaXR5Il1dLGNyO2YuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoY3UoInNob3ciLDMpLGEsYixjKTtmb3IodmFyIGc9MCxoPXRoaXMubGVuZ3RoO2c8aDtnKyspZD10aGlzW2ddLGQuc3R5bGUmJihlPWQuc3R5bGUuZGlzcGxheSwhZi5fZGF0YShkLCJvbGRkaXNwbGF5IikmJmU9PT0ibm9uZSImJihlPWQuc3R5bGUuZGlzcGxheT0iIiksZT09PSIiJiZmLmNzcyhkLCJkaXNwbGF5Iik9PT0ibm9uZSImJmYuX2RhdGEoZCwib2xkZGlzcGxheSIsY3YoZC5ub2RlTmFtZSkpKTtmb3IoZz0wO2c8aDtnKyspe2Q9dGhpc1tnXTtpZihkLnN0eWxlKXtlPWQuc3R5bGUuZGlzcGxheTtpZihlPT09IiJ8fGU9PT0ibm9uZSIpZC5zdHlsZS5kaXNwbGF5PWYuX2RhdGEoZCwib2xkZGlzcGxheSIpfHwiIn19cmV0dXJuIHRoaXN9LGhpZGU6ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoY3UoImhpZGUiLDMpLGEsYixjKTt2YXIgZCxlLGc9MCxoPXRoaXMubGVuZ3RoO2Zvcig7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9Zi5jc3MoZCwiZGlzcGxheSIpLGUhPT0ibm9uZSImJiFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixlKSk7Zm9yKGc9MDtnPGg7ZysrKXRoaXNbZ10uc3R5bGUmJih0aGlzW2ddLnN0eWxlLmRpc3BsYXk9Im5vbmUiKTtyZXR1cm4gdGhpc30sX3RvZ2dsZTpmLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXR5cGVvZiBhPT0iYm9vbGVhbiI7Zi5pc0Z1bmN0aW9uKGEpJiZmLmlzRnVuY3Rpb24oYik/dGhpcy5fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphPT1udWxsfHxkP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWQ/YTpmKHRoaXMpLmlzKCI6aGlkZGVuIik7Zih0aGlzKVtiPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoY3UoInRvZ2dsZSIsMyksYSxiLGMpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZygpe2UucXVldWU9PT0hMSYmZi5fbWFyayh0aGlzKTt2YXIgYj1mLmV4dGVuZCh7fSxlKSxjPXRoaXMubm9kZVR5cGU9PT0xLGQ9YyYmZih0aGlzKS5pcygiOmhpZGRlbiIpLGcsaCxpLGosayxsLG0sbixvO2IuYW5pbWF0ZWRQcm9wZXJ0aWVzPXt9O2ZvcihpIGluIGEpe2c9Zi5jYW1lbENhc2UoaSksaSE9PWcmJihhW2ddPWFbaV0sZGVsZXRlIGFbaV0pLGg9YVtnXSxmLmlzQXJyYXkoaCk/KGIuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ddPWhbMV0saD1hW2ddPWhbMF0pOmIuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ddPWIuc3BlY2lhbEVhc2luZyYmYi5zcGVjaWFsRWFzaW5nW2ddfHxiLmVhc2luZ3x8InN3aW5nIjtpZihoPT09ImhpZGUiJiZkfHxoPT09InNob3ciJiYhZClyZXR1cm4gYi5jb21wbGV0ZS5jYWxsKHRoaXMpO2MmJihnPT09ImhlaWdodCJ8fGc9PT0id2lkdGgiKSYmKGIub3ZlcmZsb3c9W3RoaXMuc3R5bGUub3ZlcmZsb3csdGhpcy5zdHlsZS5vdmVyZmxvd1gsdGhpcy5zdHlsZS5vdmVyZmxvd1ldLGYuY3NzKHRoaXMsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZmLmNzcyh0aGlzLCJmbG9hdCIpPT09Im5vbmUiJiYoIWYuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0fHxjdih0aGlzLm5vZGVOYW1lKT09PSJpbmxpbmUiP3RoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjp0aGlzLnN0eWxlLnpvb209MSkpfWIub3ZlcmZsb3chPW51bGwmJih0aGlzLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKTtmb3IoaSBpbiBhKWo9bmV3IGYuZngodGhpcyxiLGkpLGg9YVtpXSxjbi50ZXN0KGgpPyhvPWYuX2RhdGEodGhpcywidG9nZ2xlIitpKXx8KGg9PT0idG9nZ2xlIj9kPyJzaG93IjoiaGlkZSI6MCksbz8oZi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2ksbz09PSJzaG93Ij8iaGlkZSI6InNob3ciKSxqW29dKCkpOmpbaF0oKSk6KGs9Y28uZXhlYyhoKSxsPWouY3VyKCksaz8obT1wYXJzZUZsb2F0KGtbMl0pLG49a1szXXx8KGYuY3NzTnVtYmVyW2ldPyIiOiJweCIpLG4hPT0icHgiJiYoZi5zdHlsZSh0aGlzLGksKG18fDEpK24pLGw9KG18fDEpL2ouY3VyKCkqbCxmLnN0eWxlKHRoaXMsaSxsK24pKSxrWzFdJiYobT0oa1sxXT09PSItPSI/LTE6MSkqbStsKSxqLmN1c3RvbShsLG0sbikpOmouY3VzdG9tKGwsaCwiIikpO3JldHVybiEwfXZhciBlPWYuc3BlZWQoYixjLGQpO2lmKGYuaXNFbXB0eU9iamVjdChhKSlyZXR1cm4gdGhpcy5lYWNoKGUuY29tcGxldGUsWyExXSk7YT1mLmV4dGVuZCh7fSxhKTtyZXR1cm4gZS5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGUucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxjLGQpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGQ9YyxjPWEsYT1iKSxjJiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2Z1bmN0aW9uIGgoYSxiLGMpe3ZhciBlPWJbY107Zi5yZW1vdmVEYXRhKGEsYywhMCksZS5zdG9wKGQpfXZhciBiLGM9ITEsZT1mLnRpbWVycyxnPWYuX2RhdGEodGhpcyk7ZHx8Zi5fdW5tYXJrKCEwLHRoaXMpO2lmKGE9PW51bGwpZm9yKGIgaW4gZylnW2JdJiZnW2JdLnN0b3AmJmIuaW5kZXhPZigiLnJ1biIpPT09Yi5sZW5ndGgtNCYmaCh0aGlzLGcsYik7ZWxzZSBnW2I9YSsiLnJ1biJdJiZnW2JdLnN0b3AmJmgodGhpcyxnLGIpO2ZvcihiPWUubGVuZ3RoO2ItLTspZVtiXS5lbGVtPT09dGhpcyYmKGE9PW51bGx8fGVbYl0ucXVldWU9PT1hKSYmKGQ/ZVtiXSghMCk6ZVtiXS5zYXZlU3RhdGUoKSxjPSEwLGUuc3BsaWNlKGIsMSkpOyghZHx8IWMpJiZmLmRlcXVldWUodGhpcyxhKX0pfX0pLGYuZWFjaCh7c2xpZGVEb3duOmN1KCJzaG93IiwxKSxzbGlkZVVwOmN1KCJoaWRlIiwxKSxzbGlkZVRvZ2dsZTpjdSgidG9nZ2xlIiwxKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxmLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJnR5cGVvZiBhPT0ib2JqZWN0Ij9mLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fGYuaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhZi5pc0Z1bmN0aW9uKGIpJiZifTtkLmR1cmF0aW9uPWYuZngub2ZmPzA6dHlwZW9mIGQuZHVyYXRpb249PSJudW1iZXIiP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBmLmZ4LnNwZWVkcz9mLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpmLmZ4LnNwZWVkcy5fZGVmYXVsdDtpZihkLnF1ZXVlPT1udWxsfHxkLnF1ZXVlPT09ITApZC5xdWV1ZT0iZngiO2Qub2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbihhKXtmLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWU/Zi5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSk6YSE9PSExJiZmLl91bm1hcmsodGhpcyl9O3JldHVybiBkfSxlYXNpbmc6e2xpbmVhcjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYytkKmF9LHN3aW5nOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybigtTWF0aC5jb3MoYSpNYXRoLlBJKS8yKy41KSpkK2N9fSx0aW1lcnM6W10sZng6ZnVuY3Rpb24oYSxiLGMpe3RoaXMub3B0aW9ucz1iLHRoaXMuZWxlbT1hLHRoaXMucHJvcD1jLGIub3JpZz1iLm9yaWd8fHt9fX0pLGYuZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksKGYuZnguc3RlcFt0aGlzLnByb3BdfHxmLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpfSxjdXI6ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1bdGhpcy5wcm9wXSE9bnVsbCYmKCF0aGlzLmVsZW0uc3R5bGV8fHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdPT1udWxsKSlyZXR1cm4gdGhpcy5lbGVtW3RoaXMucHJvcF07dmFyIGEsYj1mLmNzcyh0aGlzLmVsZW0sdGhpcy5wcm9wKTtyZXR1cm4gaXNOYU4oYT1wYXJzZUZsb2F0KGIpKT8hYnx8Yj09PSJhdXRvIj8wOmI6YX0sY3VzdG9tOmZ1bmN0aW9uKGEsYyxkKXtmdW5jdGlvbiBoKGEpe3JldHVybiBlLnN0ZXAoYSl9dmFyIGU9dGhpcyxnPWYuZng7dGhpcy5zdGFydFRpbWU9Y3J8fGNzKCksdGhpcy5lbmQ9Yyx0aGlzLm5vdz10aGlzLnN0YXJ0PWEsdGhpcy5wb3M9dGhpcy5zdGF0ZT0wLHRoaXMudW5pdD1kfHx0aGlzLnVuaXR8fChmLmNzc051bWJlclt0aGlzLnByb3BdPyIiOiJweCIpLGgucXVldWU9dGhpcy5vcHRpb25zLnF1ZXVlLGguZWxlbT10aGlzLmVsZW0saC5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtlLm9wdGlvbnMuaGlkZSYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wKT09PWImJmYuX2RhdGEoZS5lbGVtLCJmeHNob3ciK2UucHJvcCxlLnN0YXJ0KX0saCgpJiZmLnRpbWVycy5wdXNoKGgpJiYhY3AmJihjcD1zZXRJbnRlcnZhbChnLnRpY2ssZy5pbnRlcnZhbCkpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIGE9Zi5fZGF0YSh0aGlzLmVsZW0sImZ4c2hvdyIrdGhpcy5wcm9wKTt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWF8fGYuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLnNob3c9ITAsYSE9PWI/dGhpcy5jdXN0b20odGhpcy5jdXIoKSxhKTp0aGlzLmN1c3RvbSh0aGlzLnByb3A9PT0id2lkdGgifHx0aGlzLnByb3A9PT0iaGVpZ2h0Ij8xOjAsdGhpcy5jdXIoKSksZih0aGlzLmVsZW0pLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5fZGF0YSh0aGlzLmVsZW0sImZ4c2hvdyIrdGhpcy5wcm9wKXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuaGlkZT0hMCx0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWNyfHxjcygpLGc9ITAsaD10aGlzLmVsZW0saT10aGlzLm9wdGlvbnM7aWYoYXx8ZT49aS5kdXJhdGlvbit0aGlzLnN0YXJ0VGltZSl7dGhpcy5ub3c9dGhpcy5lbmQsdGhpcy5wb3M9dGhpcy5zdGF0ZT0xLHRoaXMudXBkYXRlKCksaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXT0hMDtmb3IoYiBpbiBpLmFuaW1hdGVkUHJvcGVydGllcylpLmFuaW1hdGVkUHJvcGVydGllc1tiXSE9PSEwJiYoZz0hMSk7aWYoZyl7aS5vdmVyZmxvdyE9bnVsbCYmIWYuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzJiZmLmVhY2goWyIiLCJYIiwiWSJdLGZ1bmN0aW9uKGEsYil7aC5zdHlsZVsib3ZlcmZsb3ciK2JdPWkub3ZlcmZsb3dbYV19KSxpLmhpZGUmJmYoaCkuaGlkZSgpO2lmKGkuaGlkZXx8aS5zaG93KWZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWYuc3R5bGUoaCxiLGkub3JpZ1tiXSksZi5yZW1vdmVEYXRhKGgsImZ4c2hvdyIrYiwhMCksZi5yZW1vdmVEYXRhKGgsInRvZ2dsZSIrYiwhMCk7ZD1pLmNvbXBsZXRlLGQmJihpLmNvbXBsZXRlPSExLGQuY2FsbChoKSl9cmV0dXJuITF9aS5kdXJhdGlvbj09SW5maW5pdHk/dGhpcy5ub3c9ZTooYz1lLXRoaXMuc3RhcnRUaW1lLHRoaXMuc3RhdGU9Yy9pLmR1cmF0aW9uLHRoaXMucG9zPWYuZWFzaW5nW2kuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF1dKHRoaXMuc3RhdGUsYywwLDEsaS5kdXJhdGlvbiksdGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpLHRoaXMudXBkYXRlKCk7cmV0dXJuITB9fSxmLmV4dGVuZChmLmZ4LHt0aWNrOmZ1bmN0aW9uKCl7dmFyIGEsYj1mLnRpbWVycyxjPTA7Zm9yKDtjPGIubGVuZ3RoO2MrKylhPWJbY10sIWEoKSYmYltjXT09PWEmJmIuc3BsaWNlKGMtLSwxKTtiLmxlbmd0aHx8Zi5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGNwKSxjcD1udWxsfSxzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtmLnN0eWxlKGEuZWxlbSwib3BhY2l0eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXthLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsP2EuZWxlbS5zdHlsZVthLnByb3BdPWEubm93K2EudW5pdDphLmVsZW1bYS5wcm9wXT1hLm5vd319fSksZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuZnguc3RlcFtiXT1mdW5jdGlvbihhKXtmLnN0eWxlKGEuZWxlbSxiLE1hdGgubWF4KDAsYS5ub3cpK2EudW5pdCl9fSksZi5leHByJiZmLmV4cHIuZmlsdGVycyYmKGYuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBmLmdyZXAoZi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9KTt2YXIgY3c9L150KD86YWJsZXxkfGgpJC9pLGN4PS9eKD86Ym9keXxodG1sKSQvaTsiZ2V0Qm91bmRpbmdDbGllbnRSZWN0ImluIGMuZG9jdW1lbnRFbGVtZW50P2YuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF0sYztpZihhKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO2lmKCFifHwhYi5vd25lckRvY3VtZW50KXJldHVybiBudWxsO2lmKGI9PT1iLm93bmVyRG9jdW1lbnQuYm9keSlyZXR1cm4gZi5vZmZzZXQuYm9keU9mZnNldChiKTt0cnl7Yz1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGQpe312YXIgZT1iLm93bmVyRG9jdW1lbnQsZz1lLmRvY3VtZW50RWxlbWVudDtpZighY3x8IWYuY29udGFpbnMoZyxiKSlyZXR1cm4gYz97dG9wOmMudG9wLGxlZnQ6Yy5sZWZ0fTp7dG9wOjAsbGVmdDowfTt2YXIgaD1lLmJvZHksaT1jeShlKSxqPWcuY2xpZW50VG9wfHxoLmNsaWVudFRvcHx8MCxrPWcuY2xpZW50TGVmdHx8aC5jbGllbnRMZWZ0fHwwLGw9aS5wYWdlWU9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbFRvcHx8aC5zY3JvbGxUb3AsbT1pLnBhZ2VYT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0LG49Yy50b3ArbC1qLG89Yy5sZWZ0K20taztyZXR1cm57dG9wOm4sbGVmdDpvfX06Zi5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXTtpZihhKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO2lmKCFifHwhYi5vd25lckRvY3VtZW50KXJldHVybiBudWxsO2lmKGI9PT1iLm93bmVyRG9jdW1lbnQuYm9keSlyZXR1cm4gZi5vZmZzZXQuYm9keU9mZnNldChiKTt2YXIgYyxkPWIub2Zmc2V0UGFyZW50LGU9YixnPWIub3duZXJEb2N1bWVudCxoPWcuZG9jdW1lbnRFbGVtZW50LGk9Zy5ib2R5LGo9Zy5kZWZhdWx0VmlldyxrPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGUsbD1iLm9mZnNldFRvcCxtPWIub2Zmc2V0TGVmdDt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiZiIT09aSYmYiE9PWgpe2lmKGYuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIilicmVhaztjPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGUsbC09Yi5zY3JvbGxUb3AsbS09Yi5zY3JvbGxMZWZ0LGI9PT1kJiYobCs9Yi5vZmZzZXRUb3AsbSs9Yi5vZmZzZXRMZWZ0LGYuc3VwcG9ydC5kb2VzTm90QWRkQm9yZGVyJiYoIWYuc3VwcG9ydC5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsc3x8IWN3LnRlc3QoYi5ub2RlTmFtZSkpJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksZT1kLGQ9Yi5vZmZzZXRQYXJlbnQpLGYuc3VwcG9ydC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJmMub3ZlcmZsb3chPT0idmlzaWJsZSImJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxrPWN9aWYoay5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGsucG9zaXRpb249PT0ic3RhdGljIilsKz1pLm9mZnNldFRvcCxtKz1pLm9mZnNldExlZnQ7Zi5zdXBwb3J0LmZpeGVkUG9zaXRpb24mJmsucG9zaXRpb249PT0iZml4ZWQiJiYobCs9TWF0aC5tYXgoaC5zY3JvbGxUb3AsaS5zY3JvbGxUb3ApLG0rPU1hdGgubWF4KGguc2Nyb2xsTGVmdCxpLnNjcm9sbExlZnQpKTtyZXR1cm57dG9wOmwsbGVmdDptfX0sZi5vZmZzZXQ9e2JvZHlPZmZzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRUb3AsYz1hLm9mZnNldExlZnQ7Zi5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0JiYoYis9cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsYys9cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwKTtyZXR1cm57dG9wOmIsbGVmdDpjfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mLmNzcyhhLCJwb3NpdGlvbiIpO2Q9PT0ic3RhdGljIiYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGU9ZihhKSxnPWUub2Zmc2V0KCksaD1mLmNzcyhhLCJ0b3AiKSxpPWYuY3NzKGEsImxlZnQiKSxqPShkPT09ImFic29sdXRlInx8ZD09PSJmaXhlZCIpJiZmLmluQXJyYXkoImF1dG8iLFtoLGldKT4tMSxrPXt9LGw9e30sbSxuO2o/KGw9ZS5wb3NpdGlvbigpLG09bC50b3Asbj1sLmxlZnQpOihtPXBhcnNlRmxvYXQoaCl8fDAsbj1wYXJzZUZsb2F0KGkpfHwwKSxmLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsZykpLGIudG9wIT1udWxsJiYoay50b3A9Yi50b3AtZy50b3ArbSksYi5sZWZ0IT1udWxsJiYoay5sZWZ0PWIubGVmdC1nLmxlZnQrbiksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsayk6ZS5jc3Moayl9fSxmLmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm4gbnVsbDt2YXIgYT10aGlzWzBdLGI9dGhpcy5vZmZzZXRQYXJlbnQoKSxjPXRoaXMub2Zmc2V0KCksZD1jeC50ZXN0KGJbMF0ubm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCk7Yy50b3AtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGQudG9wKz1wYXJzZUZsb2F0KGYuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGQubGVmdCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDA7cmV0dXJue3RvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8Yy5ib2R5O3doaWxlKGEmJiFjeC50ZXN0KGEubm9kZU5hbWUpJiZmLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYX0pfX0pLGYuZWFjaChbIkxlZnQiLCJUb3AiXSxmdW5jdGlvbihhLGMpe3ZhciBkPSJzY3JvbGwiK2M7Zi5mbltkXT1mdW5jdGlvbihjKXt2YXIgZSxnO2lmKGM9PT1iKXtlPXRoaXNbMF07aWYoIWUpcmV0dXJuIG51bGw7Zz1jeShlKTtyZXR1cm4gZz8icGFnZVhPZmZzZXQiaW4gZz9nW2E/InBhZ2VZT2Zmc2V0IjoicGFnZVhPZmZzZXQiXTpmLnN1cHBvcnQuYm94TW9kZWwmJmcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2RdfHxnLmRvY3VtZW50LmJvZHlbZF06ZVtkXX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zz1jeSh0aGlzKSxnP2cuc2Nyb2xsVG8oYT9mKGcpLnNjcm9sbExlZnQoKTpjLGE/YzpmKGcpLnNjcm9sbFRvcCgpKTp0aGlzW2RdPWN9KX19KSxmLmVhY2goWyJIZWlnaHQiLCJXaWR0aCJdLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yy50b0xvd2VyQ2FzZSgpO2YuZm5bImlubmVyIitjXT1mdW5jdGlvbigpe3ZhciBhPXRoaXNbMF07cmV0dXJuIGE/YS5zdHlsZT9wYXJzZUZsb2F0KGYuY3NzKGEsZCwicGFkZGluZyIpKTp0aGlzW2RdKCk6bnVsbH0sZi5mblsib3V0ZXIiK2NdPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07cmV0dXJuIGI/Yi5zdHlsZT9wYXJzZUZsb2F0KGYuY3NzKGIsZCxhPyJtYXJnaW4iOiJib3JkZXIiKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bZF09ZnVuY3Rpb24oYSl7dmFyIGU9dGhpc1swXTtpZighZSlyZXR1cm4gYT09bnVsbD9udWxsOnRoaXM7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjW2RdKGEuY2FsbCh0aGlzLGIsY1tkXSgpKSl9KTtpZihmLmlzV2luZG93KGUpKXt2YXIgZz1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitjXSxoPWUuZG9jdW1lbnQuYm9keTtyZXR1cm4gZS5kb2N1bWVudC5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiJiZnfHxoJiZoWyJjbGllbnQiK2NdfHxnfWlmKGUubm9kZVR5cGU9PT05KXJldHVybiBNYXRoLm1heChlLmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitjXSxlLmJvZHlbInNjcm9sbCIrY10sZS5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrY10sZS5ib2R5WyJvZmZzZXQiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK2NdKTtpZihhPT09Yil7dmFyIGk9Zi5jc3MoZSxkKSxqPXBhcnNlRmxvYXQoaSk7cmV0dXJuIGYuaXNOdW1lcmljKGopP2o6aX1yZXR1cm4gdGhpcy5jc3MoZCx0eXBlb2YgYT09InN0cmluZyI/YTphKyJweCIpfX0pLGEualF1ZXJ5PWEuJD1mLHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZn0pfSkod2luZG93KTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL21vZHVsZXMuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL21vZHVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzlmMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvbW9kdWxlcy5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9OSIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiLz4KKzx0aXRsZT5UdXJib0pQRUc6IE1vZHVsZXM8L3RpdGxlPgorPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorPGRpdiBpZD0idGl0bGVhcmVhIj4KKzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorIDx0Ym9keT4KKyA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4yLjA8L3NwYW4+CisgICA8L2Rpdj4KKyAgPC90ZD4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KKyAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+CisgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CisgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCisgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgICAgICAgICAgICBhbHQ9IiIvPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iTVNlYXJjaEZpZWxkIiB2YWx1ZT0iU2VhcmNoIiBhY2Nlc3NrZXk9IlMiCisgICAgICAgICAgICAgICBvbmZvY3VzPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKHRydWUpIiAKKyAgICAgICAgICAgICAgIG9uYmx1cj0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyhmYWxzZSkiIAorICAgICAgICAgICAgICAgb25rZXl1cD0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRDaGFuZ2UoZXZlbnQpIi8+CisgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPSJyaWdodCI+CisgICAgICAgICAgICA8YSBpZD0iTVNlYXJjaENsb3NlIiBocmVmPSJqYXZhc2NyaXB0OnNlYXJjaEJveC5DbG9zZVJlc3VsdHNXaW5kb3coKSI+PGltZyBpZD0iTVNlYXJjaENsb3NlSW1nIiBib3JkZXI9IjAiIHNyYz0ic2VhcmNoL2Nsb3NlLnBuZyIgYWx0PSIiLz48L2E+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+Cis8L2Rpdj48IS0tIHRvcCAtLT4KKzwhLS0gd2luZG93IHNob3dpbmcgdGhlIGZpbHRlciBvcHRpb25zIC0tPgorPGRpdiBpZD0iTVNlYXJjaFNlbGVjdFdpbmRvdyIKKyAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCisgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEtleShldmVudCkiPgorPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5GdW5jdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgzKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg0KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5UeXBlZGVmczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDUpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDYpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0b3I8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg3KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5Hcm91cHM8L2E+PC9kaXY+CisKKzwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+Cis8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDp2b2lkKDApIiBmcmFtZWJvcmRlcj0iMCIgCisgICAgICAgIG5hbWU9Ik1TZWFyY2hSZXN1bHRzIiBpZD0iTVNlYXJjaFJlc3VsdHMiPgorPC9pZnJhbWU+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iaGVhZGVyIj4KKyAgPGRpdiBjbGFzcz0iaGVhZGVydGl0bGUiPgorPGRpdiBjbGFzcz0idGl0bGUiPk1vZHVsZXM8L2Rpdj4gIDwvZGl2PgorPC9kaXY+PCEtLWhlYWRlci0tPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj5IZXJlIGlzIGEgbGlzdCBvZiBhbGwgbW9kdWxlczo8L2Rpdj48ZGl2IGNsYXNzPSJkaXJlY3RvcnkiPgorPHRhYmxlIGNsYXNzPSJkaXJlY3RvcnkiPgorPHRyIGlkPSJyb3dfMF8iIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9ImVudHJ5Ij48aW1nIHNyYz0iZnR2Mmxhc3Rub2RlLnBuZyIgYWx0PSJcIiB3aWR0aD0iMTYiIGhlaWdodD0iMjIiIC8+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCIgdGFyZ2V0PSJfc2VsZiI+VHVyYm9KUEVHPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj5UdXJib0pQRUcgQVBJPC90ZD48L3RyPgorPC90YWJsZT4KKzwvZGl2PjwhLS0gZGlyZWN0b3J5IC0tPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9uYXZfZi5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9uYXZfZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNThhNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL25hdl9mLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9uYXZfZy5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9uYXZfZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5M2EyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL25hdl9nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9uYXZfaC5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9uYXZfaC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzODliMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL25hdl9oLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9vcGVuLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL29wZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjc1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9vcGVuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmMzRkYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNjMuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNjMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJTUlBhZ2UiPgorPGRpdiBpZD0iU1JJbmRleCI+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2FkaW5nIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTm9NYXRjaGVzIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Cit2YXIgc2VhcmNoUmVzdWx0cyA9IG5ldyBTZWFyY2hSZXN1bHRzKCJzZWFyY2hSZXN1bHRzIik7CitzZWFyY2hSZXN1bHRzLlNlYXJjaCgpOworLS0+PC9zY3JpcHQ+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNjMuanMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDU4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsnY3VzdG9tZmlsdGVyJyxbJ2N1c3RvbUZpbHRlcicsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMScsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDYwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzY0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYWxsXzY0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzY0LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTlhMDUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5qcwpAQCAtMCwwICsxLDUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ2RhdGEnLFsnZGF0YScsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E2ODhmZThmMWE4ZWNjMTJhNTM4ZDllNTYxY2YzMzhlMycsMSwndGp0cmFuc2Zvcm0nXV1dLAorICBbJ2Rlbm9tJyxbJ2Rlbm9tJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMycsMSwndGpzY2FsaW5nZmFjdG9yJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWM0MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82OC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImFsbF82OC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82OC5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxN2U5NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydoJyxbJ2gnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUnLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGZkNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82ZS5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImFsbF82ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82ZS5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmYWExMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydudW0nLFsnbnVtJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2E5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYycsMSwndGpzY2FsaW5nZmFjdG9yJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg2YjAzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82Zi5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImFsbF82Zi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF82Zi5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjYTgzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuanMKQEAgLTAsMCArMSw1IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydvcCcsWydvcCcsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCcsMSwndGp0cmFuc2Zvcm0nXV1dLAorICBbJ29wdGlvbnMnLFsnb3B0aW9ucycsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNicsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Mi5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Mi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0N2I5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzcyLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYWxsXzcyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzcyLmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Mi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWNkZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Mi5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3InLFsncicsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZicsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDZhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYWxsXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc0LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk3YzcxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83NC5qcwpAQCAtMCwwICsxLDEwMiBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsndGpfNWZudW1jcycsWydUSl9OVU1DUycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTM5ZjU3YTZmYjAyZDljZjMyZTdiNjg5MDA5OWI1YTcxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpfNWZudW1lcnInLFsnVEpfTlVNRVJSJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzliZGUxYjRhM2UyMzUxZTAwODg3ZTQ3NzgxYjk2NmUnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0al81Zm51bXBmJyxbJ1RKX05VTVBGJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0al81Zm51bXNhbXAnLFsnVEpfTlVNU0FNUCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpfNWZudW14b3AnLFsnVEpfTlVNWE9QJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGY2ZGJkMThhZGYzOGI3ZDQ2YWM1NDdmMGY0ZDU2MmMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amFsbG9jJyxbJ3RqQWxsb2MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlYzYyN2RkNGM1ZjMwYjdhNzc1YTdhZWEzYmVjNWQ4MycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqYWxwaGFvZmZzZXQnLFsndGpBbHBoYU9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVhZjBhYjA2NWZlZWZkNTI2ZGViZjFlMjBjNDNlODM3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpibHVlb2Zmc2V0JyxbJ3RqQmx1ZU9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpidWZzaXplJyxbJ3RqQnVmU2l6ZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY3YWMxMmZlZTc5MDczMjQyY2IyMTZlMDdjOWYxZjkwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpidWZzaXpleXV2MicsWyd0akJ1ZlNpemVZVVYyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMmJlMmI5OTY5ZDRkZjllY2NlOWIwNWRlZWQyNzMxOTQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amNvbXByZXNzMicsWyd0akNvbXByZXNzMicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiZGNlMDExMmZkNzhmZDM4ZWZhZTg0MTQ0M2E5YmNmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjb21wcmVzc2Zyb215dXYnLFsndGpDb21wcmVzc0Zyb21ZVVYnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NjIyYTQ1OWI3OWFhMTAwN2UwMDViNTg3ODNmODc1YicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY29tcHJlc3Nmcm9teXV2cGxhbmVzJyxbJ3RqQ29tcHJlc3NGcm9tWVVWUGxhbmVzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMjllYzVkZmJkMmQ4NGI4NzI0ZTk1MWQ2ZmEwZDVkOWUnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amNzJyxbJ1RKQ1MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY3NfNWZjbXlrJyxbJ1RKQ1NfQ01ZSycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE2YzhiNjM2MTUyYWM4MTk1Yjg2OTU4N2RiMzE1ZWU1MycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY3NfNWZncmF5JyxbJ1RKQ1NfR1JBWScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGFiM2U3ZDZhODdmNjk1ZTQ1YjgxYzFiNTI2MmI1YTUwYScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY3NfNWZyZ2InLFsnVEpDU19SR0InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhNGY4M2FkMzM2OGUwZTI5ZDE5NTdiZTBlZmE3YzM3MjBhNjc3Y2I3Y2NiODVjNDAzOGFjNDE5NjRhMmUwOWU1NTUnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amNzXzVmeWNiY3InLFsnVEpDU19ZQ2JDcicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE3Mzg5YjhmNjViYjM4N2ZmZWRjZTNlZmQwZDc4ZWM3NScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY3NfNWZ5Y2NrJyxbJ1RKQ1NfWUNDSycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE1MzgzOWUwZmU4NjdiNzZiNThkMTZiMGExYTdjNTk4ZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb2RleXV2JyxbJ3RqRGVjb2RlWVVWJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzBhYmJmMzhmNzdhMjZmZDZkYTg4MTNiZWY5NmY2OTUnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlY29kZXl1dnBsYW5lcycsWyd0akRlY29kZVlVVlBsYW5lcycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTEwZTgzN2MwN2ZhOWQyNTc3MDU2NWIyMzdkMzg5OGQ5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpkZWNvbXByZXNzMicsWyd0akRlY29tcHJlc3MyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTllY2NlZjhiNjgyYTQ4ZjQzYTkxMTdjMjMxZWQwMTMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlY29tcHJlc3NoZWFkZXIzJyxbJ3RqRGVjb21wcmVzc0hlYWRlcjMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwNTk1NjgxMDk2YmJhNzE5OWNjNmYzNTMzY2IyNWY3NycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb21wcmVzc3RveXV2MicsWyd0akRlY29tcHJlc3NUb1lVVjInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwNGQxZTgzOWZmOWEwODYwZGQxNDc1Y2ZmNzhkMzM2NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb21wcmVzc3RveXV2cGxhbmVzJyxbJ3RqRGVjb21wcmVzc1RvWVVWUGxhbmVzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYTU5ZjkwMWE1MjU4YWRhNWJkMDE4NWFkNTkzNjg1NDAnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlc3Ryb3knLFsndGpEZXN0cm95JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzVmMzU1ZmEyNzIyNWJhMWE0ZWUzOTJjODUyMzk0ZDInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amVuY29kZXl1djMnLFsndGpFbmNvZGVZVVYzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzUxOWI5MjJjZGY0NDZlOTdkMGNkY2JhNTEzNjM2YmYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amVuY29kZXl1dnBsYW5lcycsWyd0akVuY29kZVlVVlBsYW5lcycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWUyZDA0YzcyNDU3ZmU3ZjRkNjBjZjc4YWIxYjFmZWIxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGplcnInLFsnVEpFUlInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZXJyXzVmZmF0YWwnLFsnVEpFUlJfRkFUQUwnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhZmJjMTdjZmE1N2QwZDVkMTFmZWEzNWFjMDI1OTUwZmVhZmM5Y2NlZWFkYTEzMTIyYjA5ZTQ4NTFlMzc4ODAzOWEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amVycl81Zndhcm5pbmcnLFsnVEpFUlJfV0FSTklORycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZWEzNDJkZDZlMmFlZGI0N2JiMjU3YjRlNzU2ODMyOWI1OScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZmxhZ181ZmFjY3VyYXRlZGN0JyxbJ1RKRkxBR19BQ0NVUkFURURDVCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWNiMjMzY2ZkNzIyZDY2ZDFjY2JmNDhhN2RlODFmMGUwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmbGFnXzVmYm90dG9tdXAnLFsnVEpGTEFHX0JPVFRPTVVQJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amZsYWdfNWZmYXN0ZGN0JyxbJ1RKRkxBR19GQVNURENUJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amZsYWdfNWZmYXN0dXBzYW1wbGUnLFsnVEpGTEFHX0ZBU1RVUFNBTVBMRScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTRlZTQ1MDZjODExNzdhMDZmNzdlMjUwNGEyMmVmZDJkJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmbGFnXzVmbm9yZWFsbG9jJyxbJ1RKRkxBR19OT1JFQUxMT0MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZmxhZ181ZnByb2dyZXNzaXZlJyxbJ1RKRkxBR19QUk9HUkVTU0lWRScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTQzYjQyNjc1MGI0NjE5MGEyNWQzNGE2N2VmNzZkZjFiJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmbGFnXzVmc3RvcG9ud2FybmluZycsWydUSkZMQUdfU1RPUE9OV0FSTklORycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUxOWNmYTRlZjZjMThkOWU1YjQ1NWZkZjU5MzA2YTNhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmcmVlJyxbJ3RqRnJlZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWVhODYzZDJkYTBjZGI2MDk1NjNhYWJkZjkxOTY1MTRiJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpnZXRlcnJvcmNvZGUnLFsndGpHZXRFcnJvckNvZGUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZ2V0ZXJyb3JzdHIyJyxbJ3RqR2V0RXJyb3JTdHIyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amdldHNjYWxpbmdmYWN0b3JzJyxbJ3RqR2V0U2NhbGluZ0ZhY3RvcnMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjMzg1NDQ3NjAwNmIxMDc4N2JkMTI4ZjdlZGU0ODA1NycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZ3JlZW5vZmZzZXQnLFsndGpHcmVlbk9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpoYW5kbGUnLFsndGpoYW5kbGUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdGNvbXByZXNzJyxbJ3RqSW5pdENvbXByZXNzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWQ2M2EwNWZjNmQ4MTNmNGFhZTA2MTA3MDQxYTM3ZTgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amluaXRkZWNvbXByZXNzJyxbJ3RqSW5pdERlY29tcHJlc3MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MjMwMGVhYzNmM2Q5ZWY0YmFiMzAzYmMyNDRmNjJkMycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdHRyYW5zZm9ybScsWyd0akluaXRUcmFuc2Zvcm0nLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5MjhiZWZmNmFjMjQ4Y2VhZGYwMTA4OWZjNmI0MTk1NycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqbG9hZGltYWdlJyxbJ3RqTG9hZEltYWdlJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZmZiZDgzYzM3NWU3OWY1ZGI0YjVjNWQ4YWQ0NDY2ZTcnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0am1jdWhlaWdodCcsWyd0ak1DVUhlaWdodCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGptY3V3aWR0aCcsWyd0ak1DVVdpZHRoJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBhZCcsWydUSlBBRCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZicsWydUSlBGJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmYWJncicsWydUSlBGX0FCR1InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhMWJhMWE3ZjE2MzFkYmVhYTQ5YTBhODVmYzRhNDAwODEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmYXJnYicsWydUSlBGX0FSR0InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZThmODQ2ZWQ5ZDlkZTk5YjZlMWRmZTQ0ODg0ODc2NWMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmYmdyJyxbJ1RKUEZfQkdSJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWIxMDYyNDQzN2ZiOGVmNDk1YTBiMTUzZTY1NzQ5ODM5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmJncmEnLFsnVEpQRl9CR1JBJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWMwMzdmZjE4NDVjZjliNzRiYjgxYTM2NTljMmI5ZmI0JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmJncngnLFsnVEpQRl9CR1JYJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTJhMWZiZjU2OWNhNzk4OTdlYWU4ODZlMzM3NmNhNGM4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmNteWsnLFsnVEpQRl9DTVlLJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTdmNTEwMGVjNDRjOTE5OTRlMjQzZjFjZjU1NTUzZjhiJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmdyYXknLFsnVEpQRl9HUkFZJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTU0MzFiNTRiMDE1MzM3NzA1ZjEzMTE4MDczNzExYTFhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZnJnYicsWydUSlBGX1JHQicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3Y2U5MzIzMGJmZjQ0OTUxOGNlMzg3YzE3ZTZlZDM3YycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZyZ2JhJyxbJ1RKUEZfUkdCQScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4OGQyZTg4ZmFiNjdmNjUwM2NmOTcyZTE0ODUxY2MxMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZyZ2J4JyxbJ1RKUEZfUkdCWCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4Mzk3M2JlYmI3ZTJkYzZmYThiYWU4OWZmM2Y0MmUwMScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZ1bmtub3duJyxbJ1RKUEZfVU5LTk9XTicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE4NGMxYTZjZWFkNzk1Mjk5OGUyZmI4OTU4NDRhMjFlZCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZ4YmdyJyxbJ1RKUEZfWEJHUicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFmNjYwM2IyNzE0N2RlNDdlMjEyZTc1ZGFjMDI3YjJhZicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZ4cmdiJyxbJ1RKUEZfWFJHQicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFkYWU5OTY5MDVlZmNmYTNiNDJhMGJiM2JlYTdmOWQ4NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGl4ZWxzaXplJyxbJ3RqUGl4ZWxTaXplJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBsYW5laGVpZ2h0JyxbJ3RqUGxhbmVIZWlnaHQnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExYTIwOTY5NmM2YTgwNzQ4ZjIwZTEzNGIzYzY0Nzg5ZicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGxhbmVzaXpleXV2JyxbJ3RqUGxhbmVTaXplWVVWJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYjRhYjdiMjRmNmU3OTdkNzlhYmFhYTY3MDM3Mzk2MWQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBsYW5ld2lkdGgnLFsndGpQbGFuZVdpZHRoJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNjNmYjY2YmIxZTM2Yzc0MDA4YzQ2MzQzNjBiZWNiYjEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anJlZG9mZnNldCcsWyd0alJlZE9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpyZWdpb24nLFsndGpyZWdpb24nLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCcsMSwnJ11dXSwKKyAgWyd0anNhbXAnLFsnVEpTQU1QJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0MTEnLFsnVEpTQU1QXzQxMScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEyOGVjNjI1NzVlNWVhMjk1YzNmZGUzMDAxZGM2MjhlMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQyMCcsWydUSlNBTVBfNDIwJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmNDIyJyxbJ1RKU0FNUF80MjInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMTM2MTMwOTAyY2M1NzhmMTFmMzI0MjliNTkzNjg0MDQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0NDAnLFsnVEpTQU1QXzQ0MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGFjY2Y3NDBlNmYzYWE2YmEyMGJhOTIyY2FkMTNjYjk3NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQ0NCcsWydUSlNBTVBfNDQ0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YWZiOGRhNGY0NDE5NzgzN2JkZWMwYTRmNTkzZGFjYWUzJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmZ3JheScsWydUSlNBTVBfR1JBWScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEzZjFjOTUwNDg0MmRkYzdhNDhkMGY2OTA3NTRiNjI0OCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2F2ZWltYWdlJyxbJ3RqU2F2ZUltYWdlJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNmY0NDViMjJkODkzM2FlNDgxNWIzMzcwYTUzOGQ4NzknLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNjYWxlZCcsWydUSlNDQUxFRCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg0ODc4YmI2NTQwNDIwNDc0M2FhMThjYWMwMjc4MWRmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzY2FsaW5nZmFjdG9yJyxbJ3Rqc2NhbGluZ2ZhY3RvcicsWycuLi9zdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCcsMSwnJ11dXSwKKyAgWyd0anRyYW5zZm9ybScsWyd0anRyYW5zZm9ybScsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sJywxLCd0anRyYW5zZm9ybSddLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FhMjlmMzE4OWM0MWJlMTJlYzVkZWU3Y2FlYzMxOGEzMScsMSwndGp0cmFuc2Zvcm0oKTomIzE2MDt0dXJib2pwZWcuaCddLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNScsMSwndGpUcmFuc2Zvcm0odGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgbiwgdW5zaWduZWQgY2hhciAqKmRzdEJ1ZnMsIHVuc2lnbmVkIGxvbmcgKmRzdFNpemVzLCB0anRyYW5zZm9ybSAqdHJhbnNmb3JtcywgaW50IGZsYWdzKTomIzE2MDt0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3AnLFsnVEpYT1AnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmaGZsaXAnLFsnVEpYT1BfSEZMSVAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYTBkZjY5Nzc2Y2FhMzBmMGZhMjhlMjYzMzJkMzExY2UnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81Zm5vbmUnLFsnVEpYT1BfTk9ORScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhZDg4YzAzNjZjZDNmN2QwZWFjOWQ3YTNmYTFjMmMyNycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmcm90MTgwJyxbJ1RKWE9QX1JPVDE4MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmExNDA5NTJlYjhkZDAzMDBhY2NmY2MyMjcyNmQ2OTY5MicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmcm90MjcwJyxbJ1RKWE9QX1JPVDI3MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMDY0ZWU1ZGZiN2YwMzJkZjMzMjgxODU4NzU2N2EwOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmcm90OTAnLFsnVEpYT1BfUk9UOTAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhNDNiMmJiYjIzYmM0YmQ1NDg0MjJkNDNmYmU5YWYxMjgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnRyYW5zcG9zZScsWydUSlhPUF9UUkFOU1BPU0UnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzEwNjBhZWQxOTlmODg2YWZkZDQxN2Y4MDQ5OWMzMmQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnRyYW5zdmVyc2UnLFsnVEpYT1BfVFJBTlNWRVJTRScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFmM2IxNGQ0ODhhZWE2ZWNlOWU1YjNkZjczYTc0ZDZhNCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmdmZsaXAnLFsnVEpYT1BfVkZMSVAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzI0ZWRkZmJlYzUzYjdlNjkxZjYxZTU2OTI5ZDBkNWQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcHRfNWZjb3B5bm9uZScsWydUSlhPUFRfQ09QWU5PTkUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExNTNiNDY4Y2ZiOTA1ZDBkZTYxNzA2YzgzODk4NmZlOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wdF81ZmNyb3AnLFsnVEpYT1BUX0NST1AnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wdF81ZmdyYXknLFsnVEpYT1BUX0dSQVknLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wdF81Zm5vb3V0cHV0JyxbJ1RKWE9QVF9OT09VVFBVVCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3B0XzVmcGVyZmVjdCcsWydUSlhPUFRfUEVSRkVDVCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3B0XzVmcHJvZ3Jlc3NpdmUnLFsnVEpYT1BUX1BST0dSRVNTSVZFJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDIzNzFjODA2NzQ1ODRlY2MxYTdkNzVlNTY0Y2YwMjYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcHRfNWZ0cmltJyxbJ1RKWE9QVF9UUklNJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMzE5ODI2YjdlYjE1ODNjMDU5NWJiZTdiOTU0Mjg3MDknLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0dXJib2pwZWcnLFsnVHVyYm9KUEVHJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sJywxLCcnXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Ny5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Ny5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDcxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc3Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYWxsXzc3LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc3LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Ny5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjY3MDAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83Ny5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3cnLFsndycsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MicsMSwndGpyZWdpb24nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDc1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc4Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYWxsXzc4LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc4LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWEyN2YyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OC5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3gnLFsneCcsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOScsMSwndGpyZWdpb24nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OS5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzcxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc5Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYWxsXzc5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvYWxsXzc5LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njg5MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2FsbF83OS5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3knLFsneScsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2E3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMicsMSwndGpyZWdpb24nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2NsYXNzZXNfNzQuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9jbGFzc2VzXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwZmRhYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9jbGFzc2VzXzc0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iY2xhc3Nlc183NC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2NsYXNzZXNfNzQuanMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvY2xhc3Nlc183NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDYyM2QyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2NsYXNzZXNfNzQuanMKQEAgLTAsMCArMSw2IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd0anJlZ2lvbicsWyd0anJlZ2lvbicsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sJywxLCcnXV1dLAorICBbJ3Rqc2NhbGluZ2ZhY3RvcicsWyd0anNjYWxpbmdmYWN0b3InLFsnLi4vc3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwnLDEsJyddXV0sCisgIFsndGp0cmFuc2Zvcm0nLFsndGp0cmFuc2Zvcm0nLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCcsMSwnJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9jbG9zZS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvY2xvc2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDJkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvY2xvc2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9lbnVtc183NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2VudW1zXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NTRlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9lbnVtc183NC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVudW1zXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvZW51bXNfNzQuanMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvZW51bXNfNzQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljMjBjZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9lbnVtc183NC5qcwpAQCAtMCwwICsxLDggQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3RqY3MnLFsnVEpDUycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTRmODNhZDMzNjhlMGUyOWQxOTU3YmUwZWZhN2MzNzIwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGplcnInLFsnVEpFUlInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGYnLFsnVEpQRicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wJyxbJ1RKU0FNUCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3AnLFsnVEpYT1AnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NicsMSwndHVyYm9qcGVnLmgnXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2VudW12YWx1ZXNfNzQuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9lbnVtdmFsdWVzXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2OWEwYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9lbnVtdmFsdWVzXzc0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZW51bXZhbHVlc183NC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2VudW12YWx1ZXNfNzQuanMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvZW51bXZhbHVlc183NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjgzODU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2VudW12YWx1ZXNfNzQuanMKQEAgLTAsMCArMSwzNyBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsndGpjc181ZmNteWsnLFsnVEpDU19DTVlLJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTRmODNhZDMzNjhlMGUyOWQxOTU3YmUwZWZhN2MzNzIwYTZjOGI2MzYxNTJhYzgxOTViODY5NTg3ZGIzMTVlZTUzJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjc181ZmdyYXknLFsnVEpDU19HUkFZJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTRmODNhZDMzNjhlMGUyOWQxOTU3YmUwZWZhN2MzNzIwYWIzZTdkNmE4N2Y2OTVlNDViODFjMWI1MjYyYjVhNTBhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjc181ZnJnYicsWydUSkNTX1JHQicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2E0ZjgzYWQzMzY4ZTBlMjlkMTk1N2JlMGVmYTdjMzcyMGE2NzdjYjdjY2I4NWM0MDM4YWM0MTk2NGEyZTA5ZTU1NScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY3NfNWZ5Y2JjcicsWydUSkNTX1lDYkNyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTRmODNhZDMzNjhlMGUyOWQxOTU3YmUwZWZhN2MzNzIwYTczODliOGY2NWJiMzg3ZmZlZGNlM2VmZDBkNzhlYzc1JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjc181ZnljY2snLFsnVEpDU19ZQ0NLJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTRmODNhZDMzNjhlMGUyOWQxOTU3YmUwZWZhN2MzNzIwYTUzODM5ZTBmZTg2N2I3NmI1OGQxNmIwYTFhN2M1OThlJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGplcnJfNWZmYXRhbCcsWydUSkVSUl9GQVRBTCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FmYmMxN2NmYTU3ZDBkNWQxMWZlYTM1YWMwMjU5NTBmZWFmYzljY2VlYWRhMTMxMjJiMDllNDg1MWUzNzg4MDM5YScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZXJyXzVmd2FybmluZycsWydUSkVSUl9XQVJOSU5HJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWZiYzE3Y2ZhNTdkMGQ1ZDExZmVhMzVhYzAyNTk1MGZlYTM0MmRkNmUyYWVkYjQ3YmIyNTdiNGU3NTY4MzI5YjU5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmFiZ3InLFsnVEpQRl9BQkdSJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTFiYTFhN2YxNjMxZGJlYWE0OWEwYTg1ZmM0YTQwMDgxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmFyZ2InLFsnVEpQRl9BUkdCJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWU4Zjg0NmVkOWQ5ZGU5OWI2ZTFkZmU0NDg4NDg3NjVjJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmJncicsWydUSlBGX0JHUicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFiMTA2MjQ0MzdmYjhlZjQ5NWEwYjE1M2U2NTc0OTgzOScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZiZ3JhJyxbJ1RKUEZfQkdSQScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFjMDM3ZmYxODQ1Y2Y5Yjc0YmI4MWEzNjU5YzJiOWZiNCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZiZ3J4JyxbJ1RKUEZfQkdSWCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWEyYTFmYmY1NjljYTc5ODk3ZWFlODg2ZTMzNzZjYTRjOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZjbXlrJyxbJ1RKUEZfQ01ZSycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3ZjUxMDBlYzQ0YzkxOTk0ZTI0M2YxY2Y1NTU1M2Y4YicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZncmF5JyxbJ1RKUEZfR1JBWScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE1NDMxYjU0YjAxNTMzNzcwNWYxMzExODA3MzcxMWExYScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZyZ2InLFsnVEpQRl9SR0InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhN2NlOTMyMzBiZmY0NDk1MThjZTM4N2MxN2U2ZWQzN2MnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmcmdiYScsWydUSlBGX1JHQkEnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODhkMmU4OGZhYjY3ZjY1MDNjZjk3MmUxNDg1MWNjMTInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmcmdieCcsWydUSlBGX1JHQlgnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODM5NzNiZWJiN2UyZGM2ZmE4YmFlODlmZjNmNDJlMDEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmdW5rbm93bicsWydUSlBGX1VOS05PV04nLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODRjMWE2Y2VhZDc5NTI5OThlMmZiODk1ODQ0YTIxZWQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmeGJncicsWydUSlBGX1hCR1InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZjY2MDNiMjcxNDdkZTQ3ZTIxMmU3NWRhYzAyN2IyYWYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmeHJnYicsWydUSlBGX1hSR0InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZGFlOTk2OTA1ZWZjZmEzYjQyYTBiYjNiZWE3ZjlkODQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0MTEnLFsnVEpTQU1QXzQxMScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEyOGVjNjI1NzVlNWVhMjk1YzNmZGUzMDAxZGM2MjhlMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQyMCcsWydUSlNBTVBfNDIwJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmNDIyJyxbJ1RKU0FNUF80MjInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMTM2MTMwOTAyY2M1NzhmMTFmMzI0MjliNTkzNjg0MDQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0NDAnLFsnVEpTQU1QXzQ0MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGFjY2Y3NDBlNmYzYWE2YmEyMGJhOTIyY2FkMTNjYjk3NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQ0NCcsWydUSlNBTVBfNDQ0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YWZiOGRhNGY0NDE5NzgzN2JkZWMwYTRmNTkzZGFjYWUzJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmZ3JheScsWydUSlNBTVBfR1JBWScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEzZjFjOTUwNDg0MmRkYzdhNDhkMGY2OTA3NTRiNjI0OCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmaGZsaXAnLFsnVEpYT1BfSEZMSVAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYTBkZjY5Nzc2Y2FhMzBmMGZhMjhlMjYzMzJkMzExY2UnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81Zm5vbmUnLFsnVEpYT1BfTk9ORScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhZDg4YzAzNjZjZDNmN2QwZWFjOWQ3YTNmYTFjMmMyNycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmcm90MTgwJyxbJ1RKWE9QX1JPVDE4MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmExNDA5NTJlYjhkZDAzMDBhY2NmY2MyMjcyNmQ2OTY5MicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmcm90MjcwJyxbJ1RKWE9QX1JPVDI3MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMDY0ZWU1ZGZiN2YwMzJkZjMzMjgxODU4NzU2N2EwOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmcm90OTAnLFsnVEpYT1BfUk9UOTAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhNDNiMmJiYjIzYmM0YmQ1NDg0MjJkNDNmYmU5YWYxMjgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnRyYW5zcG9zZScsWydUSlhPUF9UUkFOU1BPU0UnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzEwNjBhZWQxOTlmODg2YWZkZDQxN2Y4MDQ5OWMzMmQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnRyYW5zdmVyc2UnLFsnVEpYT1BfVFJBTlNWRVJTRScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFmM2IxNGQ0ODhhZWE2ZWNlOWU1YjNkZjczYTc0ZDZhNCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmdmZsaXAnLFsnVEpYT1BfVkZMSVAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzI0ZWRkZmJlYzUzYjdlNjkxZjYxZTU2OTI5ZDBkNWQnLDEsJ3R1cmJvanBlZy5oJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9mdW5jdGlvbnNfNzQuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9mdW5jdGlvbnNfNzQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjA1OTAxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2Z1bmN0aW9uc183NC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImZ1bmN0aW9uc183NC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2Z1bmN0aW9uc183NC5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9mdW5jdGlvbnNfNzQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0ZjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9mdW5jdGlvbnNfNzQuanMKQEAgLTAsMCArMSwzMSBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsndGphbGxvYycsWyd0akFsbG9jJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZWM2MjdkZDRjNWYzMGI3YTc3NWE3YWVhM2JlYzVkODMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amJ1ZnNpemUnLFsndGpCdWZTaXplJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNjdhYzEyZmVlNzkwNzMyNDJjYjIxNmUwN2M5ZjFmOTAnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amJ1ZnNpemV5dXYyJyxbJ3RqQnVmU2l6ZVlVVjInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyYmUyYjk5NjlkNGRmOWVjY2U5YjA1ZGVlZDI3MzE5NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqY29tcHJlc3MyJyxbJ3RqQ29tcHJlc3MyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZmJkY2UwMTEyZmQ3OGZkMzhlZmFlODQxNDQzYTliY2YnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amNvbXByZXNzZnJvbXl1dicsWyd0akNvbXByZXNzRnJvbVlVVicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc2MjJhNDU5Yjc5YWExMDA3ZTAwNWI1ODc4M2Y4NzViJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjb21wcmVzc2Zyb215dXZwbGFuZXMnLFsndGpDb21wcmVzc0Zyb21ZVVZQbGFuZXMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyOWVjNWRmYmQyZDg0Yjg3MjRlOTUxZDZmYTBkNWQ5ZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb2RleXV2JyxbJ3RqRGVjb2RlWVVWJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzBhYmJmMzhmNzdhMjZmZDZkYTg4MTNiZWY5NmY2OTUnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlY29kZXl1dnBsYW5lcycsWyd0akRlY29kZVlVVlBsYW5lcycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTEwZTgzN2MwN2ZhOWQyNTc3MDU2NWIyMzdkMzg5OGQ5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpkZWNvbXByZXNzMicsWyd0akRlY29tcHJlc3MyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTllY2NlZjhiNjgyYTQ4ZjQzYTkxMTdjMjMxZWQwMTMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlY29tcHJlc3NoZWFkZXIzJyxbJ3RqRGVjb21wcmVzc0hlYWRlcjMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwNTk1NjgxMDk2YmJhNzE5OWNjNmYzNTMzY2IyNWY3NycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb21wcmVzc3RveXV2MicsWyd0akRlY29tcHJlc3NUb1lVVjInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwNGQxZTgzOWZmOWEwODYwZGQxNDc1Y2ZmNzhkMzM2NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb21wcmVzc3RveXV2cGxhbmVzJyxbJ3RqRGVjb21wcmVzc1RvWVVWUGxhbmVzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYTU5ZjkwMWE1MjU4YWRhNWJkMDE4NWFkNTkzNjg1NDAnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlc3Ryb3knLFsndGpEZXN0cm95JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzVmMzU1ZmEyNzIyNWJhMWE0ZWUzOTJjODUyMzk0ZDInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amVuY29kZXl1djMnLFsndGpFbmNvZGVZVVYzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzUxOWI5MjJjZGY0NDZlOTdkMGNkY2JhNTEzNjM2YmYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amVuY29kZXl1dnBsYW5lcycsWyd0akVuY29kZVlVVlBsYW5lcycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWUyZDA0YzcyNDU3ZmU3ZjRkNjBjZjc4YWIxYjFmZWIxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmcmVlJyxbJ3RqRnJlZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWVhODYzZDJkYTBjZGI2MDk1NjNhYWJkZjkxOTY1MTRiJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpnZXRlcnJvcmNvZGUnLFsndGpHZXRFcnJvckNvZGUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0MTRmZWVmZmJmODYwZWJkMzFjNzQ1ZGYyMDNkZTQxMCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZ2V0ZXJyb3JzdHIyJyxbJ3RqR2V0RXJyb3JTdHIyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWVhZDg1NzRmOWYzOWZiYWZjNmI0OTcxMjRlN2FhZmEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amdldHNjYWxpbmdmYWN0b3JzJyxbJ3RqR2V0U2NhbGluZ0ZhY3RvcnMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjMzg1NDQ3NjAwNmIxMDc4N2JkMTI4ZjdlZGU0ODA1NycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdGNvbXByZXNzJyxbJ3RqSW5pdENvbXByZXNzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWQ2M2EwNWZjNmQ4MTNmNGFhZTA2MTA3MDQxYTM3ZTgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amluaXRkZWNvbXByZXNzJyxbJ3RqSW5pdERlY29tcHJlc3MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MjMwMGVhYzNmM2Q5ZWY0YmFiMzAzYmMyNDRmNjJkMycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdHRyYW5zZm9ybScsWyd0akluaXRUcmFuc2Zvcm0nLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5MjhiZWZmNmFjMjQ4Y2VhZGYwMTA4OWZjNmI0MTk1NycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqbG9hZGltYWdlJyxbJ3RqTG9hZEltYWdlJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZmZiZDgzYzM3NWU3OWY1ZGI0YjVjNWQ4YWQ0NDY2ZTcnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBsYW5laGVpZ2h0JyxbJ3RqUGxhbmVIZWlnaHQnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExYTIwOTY5NmM2YTgwNzQ4ZjIwZTEzNGIzYzY0Nzg5ZicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGxhbmVzaXpleXV2JyxbJ3RqUGxhbmVTaXplWVVWJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYjRhYjdiMjRmNmU3OTdkNzlhYmFhYTY3MDM3Mzk2MWQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBsYW5ld2lkdGgnLFsndGpQbGFuZVdpZHRoJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNjNmYjY2YmIxZTM2Yzc0MDA4YzQ2MzQzNjBiZWNiYjEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhdmVpbWFnZScsWyd0alNhdmVJbWFnZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTZmNDQ1YjIyZDg5MzNhZTQ4MTViMzM3MGE1MzhkODc5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp0cmFuc2Zvcm0nLFsndGpUcmFuc2Zvcm0nLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNScsMSwndHVyYm9qcGVnLmgnXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2dyb3Vwc183NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2dyb3Vwc183NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjk1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvZ3JvdXBzXzc0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZ3JvdXBzXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvZ3JvdXBzXzc0LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2dyb3Vwc183NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Q0ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL2dyb3Vwc183NC5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3R1cmJvanBlZycsWydUdXJib0pQRUcnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwnLDEsJyddXV0KK107CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvbWFnX3NlbC5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvbWFnX3NlbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmNjA0MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9tYWdfc2VsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvbm9tYXRjaGVzLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvbm9tYXRjaGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkZWQyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9ub21hdGNoZXMuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2guY3NzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3NlYXJjaC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyMDhlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2guY3NzCkBAIC0wLDAgKzEsMjcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0gU2VhcmNoIEJveCAqLworCisjRlNlYXJjaEJveCB7CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisKKyNNU2VhcmNoQm94IHsKKyAgICB3aGl0ZS1zcGFjZSA6IG5vd3JhcDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgZmxvYXQ6IG5vbmU7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIG1hcmdpbi10b3A6IDhweDsKKyAgICByaWdodDogMHB4OworICAgIHdpZHRoOiAxNzBweDsKKyAgICB6LWluZGV4OiAxMDI7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKKyNNU2VhcmNoQm94IC5sZWZ0Cit7CisgICAgZGlzcGxheTpibG9jazsKKyAgICBwb3NpdGlvbjphYnNvbHV0ZTsKKyAgICBsZWZ0OjEwcHg7CisgICAgd2lkdGg6MjBweDsKKyAgICBoZWlnaHQ6MTlweDsKKyAgICBiYWNrZ3JvdW5kOnVybCgnc2VhcmNoX2wucG5nJykgbm8tcmVwZWF0OworICAgIGJhY2tncm91bmQtcG9zaXRpb246cmlnaHQ7Cit9CisKKyNNU2VhcmNoU2VsZWN0IHsKKyAgICBkaXNwbGF5OmJsb2NrOworICAgIHBvc2l0aW9uOmFic29sdXRlOworICAgIHdpZHRoOjIwcHg7CisgICAgaGVpZ2h0OjE5cHg7Cit9CisKKy5sZWZ0ICNNU2VhcmNoU2VsZWN0IHsKKyAgICBsZWZ0OjRweDsKK30KKworLnJpZ2h0ICNNU2VhcmNoU2VsZWN0IHsKKyAgICByaWdodDo1cHg7Cit9CisKKyNNU2VhcmNoRmllbGQgeworICAgIGRpc3BsYXk6YmxvY2s7CisgICAgcG9zaXRpb246YWJzb2x1dGU7CisgICAgaGVpZ2h0OjE5cHg7CisgICAgYmFja2dyb3VuZDp1cmwoJ3NlYXJjaF9tLnBuZycpIHJlcGVhdC14OworICAgIGJvcmRlcjpub25lOworICAgIHdpZHRoOjExNnB4OworICAgIG1hcmdpbi1sZWZ0OjIwcHg7CisgICAgcGFkZGluZy1sZWZ0OjRweDsKKyAgICBjb2xvcjogIzkwOTA5MDsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGZvbnQ6IDlwdCBBcmlhbCwgVmVyZGFuYSwgc2Fucy1zZXJpZjsKK30KKworI0ZTZWFyY2hCb3ggI01TZWFyY2hGaWVsZCB7CisgICAgbWFyZ2luLWxlZnQ6MTVweDsKK30KKworI01TZWFyY2hCb3ggLnJpZ2h0IHsKKyAgICBkaXNwbGF5OmJsb2NrOworICAgIHBvc2l0aW9uOmFic29sdXRlOworICAgIHJpZ2h0OjEwcHg7CisgICAgdG9wOjBweDsKKyAgICB3aWR0aDoyMHB4OworICAgIGhlaWdodDoxOXB4OworICAgIGJhY2tncm91bmQ6dXJsKCdzZWFyY2hfci5wbmcnKSBuby1yZXBlYXQ7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0OworfQorCisjTVNlYXJjaENsb3NlIHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDRweDsKKyAgICBiYWNrZ3JvdW5kIDogbm9uZTsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgbWFyZ2luOiAwcHggNHB4IDBweCAwcHg7CisgICAgcGFkZGluZzogMHB4IDBweDsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisubGVmdCAjTVNlYXJjaENsb3NlIHsKKyAgICBsZWZ0OiA2cHg7Cit9CisKKy5yaWdodCAjTVNlYXJjaENsb3NlIHsKKyAgICByaWdodDogMnB4OworfQorCisuTVNlYXJjaEJveEFjdGl2ZSAjTVNlYXJjaEZpZWxkIHsKKyAgICBjb2xvcjogIzAwMDAwMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tIFNlYXJjaCBmaWx0ZXIgc2VsZWN0aW9uICovCisKKyNNU2VhcmNoU2VsZWN0V2luZG93IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBsZWZ0OiAwOyB0b3A6IDA7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzkwQTVDRTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjlGQUZDOworICAgIHotaW5kZXg6IDE7CisgICAgcGFkZGluZy10b3A6IDRweDsKKyAgICBwYWRkaW5nLWJvdHRvbTogNHB4OworICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICAgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKKyAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7CisgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpOworfQorCisuU2VsZWN0SXRlbSB7CisgICAgZm9udDogOHB0IEFyaWFsLCBWZXJkYW5hLCBzYW5zLXNlcmlmOworICAgIHBhZGRpbmctbGVmdDogIDJweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4OworICAgIGJvcmRlcjogMHB4OworfQorCitzcGFuLlNlbGVjdGlvbk1hcmsgeworICAgIG1hcmdpbi1yaWdodDogNHB4OworICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgb3V0bGluZS1zdHlsZTogbm9uZTsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKK2EuU2VsZWN0SXRlbSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgb3V0bGluZS1zdHlsZTogbm9uZTsKKyAgICBjb2xvcjogIzAwMDAwMDsgCisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIHBhZGRpbmctbGVmdDogICA2cHg7CisgICAgcGFkZGluZy1yaWdodDogMTJweDsKK30KKworYS5TZWxlY3RJdGVtOmZvY3VzLAorYS5TZWxlY3RJdGVtOmFjdGl2ZSB7CisgICAgY29sb3I6ICMwMDAwMDA7IAorICAgIG91dGxpbmUtc3R5bGU6IG5vbmU7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCithLlNlbGVjdEl0ZW06aG92ZXIgeworICAgIGNvbG9yOiAjRkZGRkZGOworICAgIGJhY2tncm91bmQtY29sb3I6ICMzRDU3OEM7CisgICAgb3V0bGluZS1zdHlsZTogbm9uZTsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0gU2VhcmNoIHJlc3VsdHMgd2luZG93ICovCisKK2lmcmFtZSNNU2VhcmNoUmVzdWx0cyB7CisgICAgd2lkdGg6IDYwZXg7CisgICAgaGVpZ2h0OiAxNWVtOworfQorCisjTVNlYXJjaFJlc3VsdHNXaW5kb3cgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGxlZnQ6IDA7IHRvcDogMDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwOworICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUYxRjc7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI1NSSW5kZXggeworICAgIGNsZWFyOmJvdGg7IAorICAgIHBhZGRpbmctYm90dG9tOiAxNXB4OworfQorCisuU1JFbnRyeSB7CisgICAgZm9udC1zaXplOiAxMHB0OworICAgIHBhZGRpbmctbGVmdDogMWV4OworfQorCisuU1JQYWdlIC5TUkVudHJ5IHsKKyAgICBmb250LXNpemU6IDhwdDsKKyAgICBwYWRkaW5nOiAxcHggNXB4OworfQorCitib2R5LlNSUGFnZSB7CisgICAgbWFyZ2luOiA1cHggMnB4OworfQorCisuU1JDaGlsZHJlbiB7CisgICAgcGFkZGluZy1sZWZ0OiAzZXg7IHBhZGRpbmctYm90dG9tOiAuNWVtIAorfQorCisuU1JQYWdlIC5TUkNoaWxkcmVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisuU1JTeW1ib2wgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOyAKKyAgICBjb2xvcjogIzQyNUU5NzsKKyAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIHNhbnMtc2VyaWY7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKK2EuU1JTY29wZSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgY29sb3I6ICM0MjVFOTc7IAorICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgVmVyZGFuYSwgc2Fucy1zZXJpZjsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworYS5TUlN5bWJvbDpmb2N1cywgYS5TUlN5bWJvbDphY3RpdmUsCithLlNSU2NvcGU6Zm9jdXMsIGEuU1JTY29wZTphY3RpdmUgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitzcGFuLlNSU2NvcGUgeworICAgIHBhZGRpbmctbGVmdDogNHB4OworfQorCisuU1JQYWdlIC5TUlN0YXR1cyB7CisgICAgcGFkZGluZzogMnB4IDVweDsKKyAgICBmb250LXNpemU6IDhwdDsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5TUlJlc3VsdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworRElWLnNlYXJjaHJlc3VsdHMgeworICAgIG1hcmdpbi1sZWZ0OiAxMHB4OworICAgIG1hcmdpbi1yaWdodDogMTBweDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tIEV4dGVybmFsIHNlYXJjaCBwYWdlIHJlc3VsdHMgKi8KKworLnNlYXJjaHJlc3VsdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjNGODsKK30KKworLnBhZ2VzIGIgeworICAgY29sb3I6IHdoaXRlOworICAgcGFkZGluZzogNXB4IDVweCAzcHggNXB4OworICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIuLi90YWJfYS5wbmciKTsKKyAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgIHRleHQtc2hhZG93OiAwIDFweCAxcHggIzAwMDAwMDsKK30KKworLnBhZ2VzIHsKKyAgICBsaW5lLWhlaWdodDogMTdweDsKKyAgICBtYXJnaW4tbGVmdDogNHB4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLmhsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKK30KKworI3NlYXJjaHJlc3VsdHMgeworICAgIG1hcmdpbi1ib3R0b206IDIwcHg7Cit9CisKKy5zZWFyY2hwYWdlcyB7CisgICAgbWFyZ2luLXRvcDogMTBweDsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3NlYXJjaC5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5NjcyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2guanMKQEAgLTAsMCArMSw4MDkgQEAKKy8vIFNlYXJjaCBzY3JpcHQgZ2VuZXJhdGVkIGJ5IGRveHlnZW4KKy8vIENvcHlyaWdodCAoQykgMjAwOSBieSBEaW1pdHJpIHZhbiBIZWVzY2guCisKKy8vIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBsb29zbHkgYmFzZWQgb24gbWFpbi5qcywgcGFydCBvZiBOYXR1cmFsIERvY3MsCisvLyB3aGljaCBpcyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBHcmVnIFZhbHVyZQorLy8gTmF0dXJhbCBEb2NzIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisKK3ZhciBpbmRleFNlY3Rpb25zV2l0aENvbnRlbnQgPQoreworICAwOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEwMDAxMDAwMDAxMTAwMTAxMDAxMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgIDE6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgMjogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICAzOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEwMDAxMDAwMDAxMTAwMTAxMDAxMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgIDQ6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgNTogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICA2OiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgIDc6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorfTsKKwordmFyIGluZGV4U2VjdGlvbk5hbWVzID0KK3sKKyAgMDogImFsbCIsCisgIDE6ICJjbGFzc2VzIiwKKyAgMjogImZ1bmN0aW9ucyIsCisgIDM6ICJ2YXJpYWJsZXMiLAorICA0OiAidHlwZWRlZnMiLAorICA1OiAiZW51bXMiLAorICA2OiAiZW51bXZhbHVlcyIsCisgIDc6ICJncm91cHMiCit9OworCitmdW5jdGlvbiBjb252ZXJ0VG9JZChzZWFyY2gpCit7CisgIHZhciByZXN1bHQgPSAnJzsKKyAgZm9yIChpPTA7aTxzZWFyY2gubGVuZ3RoO2krKykKKyAgeworICAgIHZhciBjID0gc2VhcmNoLmNoYXJBdChpKTsKKyAgICB2YXIgY24gPSBjLmNoYXJDb2RlQXQoMCk7CisgICAgaWYgKGMubWF0Y2goL1thLXowLTldLykpCisgICAgeworICAgICAgcmVzdWx0Kz1jOworICAgIH0KKyAgICBlbHNlIGlmIChjbjwxNikgCisgICAgeworICAgICAgcmVzdWx0Kz0iXzAiK2NuLnRvU3RyaW5nKDE2KTsKKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICByZXN1bHQrPSJfIitjbi50b1N0cmluZygxNik7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGdldFhQb3MoaXRlbSkKK3sKKyAgdmFyIHggPSAwOworICBpZiAoaXRlbS5vZmZzZXRXaWR0aCkKKyAgeworICAgIHdoaWxlIChpdGVtICYmIGl0ZW0hPWRvY3VtZW50LmJvZHkpCisgICAgeworICAgICAgeCAgICs9IGl0ZW0ub2Zmc2V0TGVmdDsKKyAgICAgIGl0ZW0gPSBpdGVtLm9mZnNldFBhcmVudDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHg7Cit9CisKK2Z1bmN0aW9uIGdldFlQb3MoaXRlbSkKK3sKKyAgdmFyIHkgPSAwOworICBpZiAoaXRlbS5vZmZzZXRXaWR0aCkKKyAgeworICAgICB3aGlsZSAoaXRlbSAmJiBpdGVtIT1kb2N1bWVudC5ib2R5KQorICAgICB7CisgICAgICAgeSAgICs9IGl0ZW0ub2Zmc2V0VG9wOworICAgICAgIGl0ZW0gPSBpdGVtLm9mZnNldFBhcmVudDsKKyAgICAgfQorICB9CisgIHJldHVybiB5OworfQorCisvKiBBIGNsYXNzIGhhbmRsaW5nIGV2ZXJ5dGhpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWFyY2ggcGFuZWwuCisKKyAgIFBhcmFtZXRlcnM6CisgICBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgCisgICAgICAgICAgc3RvcmluZyB0aGlzIGluc3RhbmNlLiAgSXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gc2V0IHRpbWVvdXRzLgorICAgcmVzdWx0UGF0aCAtIHBhdGggdG8gdXNlIGZvciBleHRlcm5hbCBmaWxlcworKi8KK2Z1bmN0aW9uIFNlYXJjaEJveChuYW1lLCByZXN1bHRzUGF0aCwgaW5GcmFtZSwgbGFiZWwpCit7CisgIGlmICghbmFtZSB8fCAhcmVzdWx0c1BhdGgpIHsgIGFsZXJ0KCJNaXNzaW5nIHBhcmFtZXRlcnMgdG8gU2VhcmNoQm94LiIpOyB9CisgICAKKyAgLy8gLS0tLS0tLS0tLSBJbnN0YW5jZSB2YXJpYWJsZXMKKyAgdGhpcy5uYW1lICAgICAgICAgICAgICAgICAgPSBuYW1lOworICB0aGlzLnJlc3VsdHNQYXRoICAgICAgICAgICA9IHJlc3VsdHNQYXRoOworICB0aGlzLmtleVRpbWVvdXQgICAgICAgICAgICA9IDA7CisgIHRoaXMua2V5VGltZW91dExlbmd0aCAgICAgID0gNTAwOworICB0aGlzLmNsb3NlU2VsZWN0aW9uVGltZW91dCA9IDMwMDsKKyAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgICAgICAgPSAiIjsKKyAgdGhpcy5sYXN0UmVzdWx0c1BhZ2UgICAgICAgPSAiIjsKKyAgdGhpcy5oaWRlVGltZW91dCAgICAgICAgICAgPSAwOworICB0aGlzLnNlYXJjaEluZGV4ICAgICAgICAgICA9IDA7CisgIHRoaXMuc2VhcmNoQWN0aXZlICAgICAgICAgID0gZmFsc2U7CisgIHRoaXMuaW5zaWRlRnJhbWUgICAgICAgICAgID0gaW5GcmFtZTsKKyAgdGhpcy5zZWFyY2hMYWJlbCAgICAgICAgICAgPSBsYWJlbDsKKworICAvLyAtLS0tLS0tLS0tLSBET00gRWxlbWVudHMKKworICB0aGlzLkRPTVNlYXJjaEZpZWxkID0gZnVuY3Rpb24oKQorICB7ICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk1TZWFyY2hGaWVsZCIpOyAgfQorCisgIHRoaXMuRE9NU2VhcmNoU2VsZWN0ID0gZnVuY3Rpb24oKQorICB7ICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk1TZWFyY2hTZWxlY3QiKTsgIH0KKworICB0aGlzLkRPTVNlYXJjaFNlbGVjdFdpbmRvdyA9IGZ1bmN0aW9uKCkKKyAgeyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJNU2VhcmNoU2VsZWN0V2luZG93Iik7ICB9CisKKyAgdGhpcy5ET01Qb3B1cFNlYXJjaFJlc3VsdHMgPSBmdW5jdGlvbigpCisgIHsgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTVNlYXJjaFJlc3VsdHMiKTsgIH0KKworICB0aGlzLkRPTVBvcHVwU2VhcmNoUmVzdWx0c1dpbmRvdyA9IGZ1bmN0aW9uKCkKKyAgeyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJNU2VhcmNoUmVzdWx0c1dpbmRvdyIpOyAgfQorCisgIHRoaXMuRE9NU2VhcmNoQ2xvc2UgPSBmdW5jdGlvbigpCisgIHsgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTVNlYXJjaENsb3NlIik7IH0KKworICB0aGlzLkRPTVNlYXJjaEJveCA9IGZ1bmN0aW9uKCkKKyAgeyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJNU2VhcmNoQm94Iik7ICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tIEV2ZW50IEhhbmRsZXJzCisKKyAgLy8gQ2FsbGVkIHdoZW4gZm9jdXMgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBzZWFyY2ggZmllbGQuCisgIHRoaXMuT25TZWFyY2hGaWVsZEZvY3VzID0gZnVuY3Rpb24oaXNBY3RpdmUpCisgIHsKKyAgICB0aGlzLkFjdGl2YXRlKGlzQWN0aXZlKTsKKyAgfQorCisgIHRoaXMuT25TZWFyY2hTZWxlY3RTaG93ID0gZnVuY3Rpb24oKQorICB7CisgICAgdmFyIHNlYXJjaFNlbGVjdFdpbmRvdyA9IHRoaXMuRE9NU2VhcmNoU2VsZWN0V2luZG93KCk7CisgICAgdmFyIHNlYXJjaEZpZWxkICAgICAgICA9IHRoaXMuRE9NU2VhcmNoU2VsZWN0KCk7CisKKyAgICBpZiAodGhpcy5pbnNpZGVGcmFtZSkKKyAgICB7CisgICAgICB2YXIgbGVmdCA9IGdldFhQb3Moc2VhcmNoRmllbGQpOworICAgICAgdmFyIHRvcCAgPSBnZXRZUG9zKHNlYXJjaEZpZWxkKTsKKyAgICAgIGxlZnQgKz0gc2VhcmNoRmllbGQub2Zmc2V0V2lkdGggKyA2OworICAgICAgdG9wICs9IHNlYXJjaEZpZWxkLm9mZnNldEhlaWdodDsKKworICAgICAgLy8gc2hvdyBzZWFyY2ggc2VsZWN0aW9uIHBvcHVwCisgICAgICBzZWFyY2hTZWxlY3RXaW5kb3cuc3R5bGUuZGlzcGxheT0nYmxvY2snOworICAgICAgbGVmdCAtPSBzZWFyY2hTZWxlY3RXaW5kb3cub2Zmc2V0V2lkdGg7CisgICAgICBzZWFyY2hTZWxlY3RXaW5kb3cuc3R5bGUubGVmdCA9ICBsZWZ0ICsgJ3B4JzsKKyAgICAgIHNlYXJjaFNlbGVjdFdpbmRvdy5zdHlsZS50b3AgID0gIHRvcCAgKyAncHgnOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFyIGxlZnQgPSBnZXRYUG9zKHNlYXJjaEZpZWxkKTsKKyAgICAgIHZhciB0b3AgID0gZ2V0WVBvcyhzZWFyY2hGaWVsZCk7CisgICAgICB0b3AgKz0gc2VhcmNoRmllbGQub2Zmc2V0SGVpZ2h0OworCisgICAgICAvLyBzaG93IHNlYXJjaCBzZWxlY3Rpb24gcG9wdXAKKyAgICAgIHNlYXJjaFNlbGVjdFdpbmRvdy5zdHlsZS5kaXNwbGF5PSdibG9jayc7CisgICAgICBzZWFyY2hTZWxlY3RXaW5kb3cuc3R5bGUubGVmdCA9ICBsZWZ0ICsgJ3B4JzsKKyAgICAgIHNlYXJjaFNlbGVjdFdpbmRvdy5zdHlsZS50b3AgID0gIHRvcCAgKyAncHgnOworICAgIH0KKworICAgIC8vIHN0b3Agc2VsZWN0aW9uIGhpZGUgdGltZXIKKyAgICBpZiAodGhpcy5oaWRlVGltZW91dCkgCisgICAgeworICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVvdXQpOworICAgICAgdGhpcy5oaWRlVGltZW91dD0wOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7IC8vIHRvIGF2b2lkICJpbWFnZSBkcmFnIiBkZWZhdWx0IGV2ZW50CisgIH0KKworICB0aGlzLk9uU2VhcmNoU2VsZWN0SGlkZSA9IGZ1bmN0aW9uKCkKKyAgeworICAgIHRoaXMuaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMubmFtZSArIi5DbG9zZVNlbGVjdGlvbldpbmRvdygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2VsZWN0aW9uVGltZW91dCk7CisgIH0KKworICAvLyBDYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgc2VhcmNoIGZpZWxkIGlzIGNoYW5nZWQuCisgIHRoaXMuT25TZWFyY2hGaWVsZENoYW5nZSA9IGZ1bmN0aW9uKGV2dCkKKyAgeworICAgIGlmICh0aGlzLmtleVRpbWVvdXQpIC8vIGtpbGwgcnVubmluZyB0aW1lcgorICAgIHsKKyAgICAgIGNsZWFyVGltZW91dCh0aGlzLmtleVRpbWVvdXQpOworICAgICAgdGhpcy5rZXlUaW1lb3V0ID0gMDsKKyAgICB9CisKKyAgICB2YXIgZSAgPSAoZXZ0KSA/IGV2dCA6IHdpbmRvdy5ldmVudDsgLy8gZm9yIElFCisgICAgaWYgKGUua2V5Q29kZT09NDAgfHwgZS5rZXlDb2RlPT0xMykKKyAgICB7CisgICAgICBpZiAoZS5zaGlmdEtleT09MSkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5PblNlYXJjaFNlbGVjdFNob3coKTsKKyAgICAgICAgdmFyIHdpbj10aGlzLkRPTVNlYXJjaFNlbGVjdFdpbmRvdygpOyAKKyAgICAgICAgZm9yIChpPTA7aTx3aW4uY2hpbGROb2Rlcy5sZW5ndGg7aSsrKQorICAgICAgICB7CisgICAgICAgICAgdmFyIGNoaWxkID0gd2luLmNoaWxkTm9kZXNbaV07IC8vIGdldCBzcGFuIHdpdGhpbiBhCisgICAgICAgICAgaWYgKGNoaWxkLmNsYXNzTmFtZT09J1NlbGVjdEl0ZW0nKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoaWxkLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHdpbmRvdy5mcmFtZXMuTVNlYXJjaFJlc3VsdHMuc2VhcmNoUmVzdWx0cykKKyAgICAgIHsKKyAgICAgICAgdmFyIGVsZW0gPSB3aW5kb3cuZnJhbWVzLk1TZWFyY2hSZXN1bHRzLnNlYXJjaFJlc3VsdHMuTmF2TmV4dCgwKTsKKyAgICAgICAgaWYgKGVsZW0pIGVsZW0uZm9jdXMoKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZS5rZXlDb2RlPT0yNykgLy8gRXNjYXBlIG91dCBvZiB0aGUgc2VhcmNoIGZpZWxkCisgICAgeworICAgICAgdGhpcy5ET01TZWFyY2hGaWVsZCgpLmJsdXIoKTsKKyAgICAgIHRoaXMuRE9NUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93KCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgIHRoaXMuRE9NU2VhcmNoQ2xvc2UoKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJzsKKyAgICAgIHRoaXMuQWN0aXZhdGUoZmFsc2UpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIHN0cmlwIHdoaXRlc3BhY2VzCisgICAgdmFyIHNlYXJjaFZhbHVlID0gdGhpcy5ET01TZWFyY2hGaWVsZCgpLnZhbHVlLnJlcGxhY2UoLyArL2csICIiKTsKKworICAgIGlmIChzZWFyY2hWYWx1ZSAhPSB0aGlzLmxhc3RTZWFyY2hWYWx1ZSkgLy8gc2VhcmNoIHZhbHVlIGhhcyBjaGFuZ2VkCisgICAgeworICAgICAgaWYgKHNlYXJjaFZhbHVlICE9ICIiKSAvLyBub24tZW1wdHkgc2VhcmNoCisgICAgICB7CisgICAgICAgIC8vIHNldCB0aW1lciBmb3Igc2VhcmNoIHVwZGF0ZQorICAgICAgICB0aGlzLmtleVRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMubmFtZSArICcuU2VhcmNoKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5VGltZW91dExlbmd0aCk7CisgICAgICB9CisgICAgICBlbHNlIC8vIGVtcHR5IHNlYXJjaCBmaWVsZAorICAgICAgeworICAgICAgICB0aGlzLkRPTVBvcHVwU2VhcmNoUmVzdWx0c1dpbmRvdygpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIHRoaXMuRE9NU2VhcmNoQ2xvc2UoKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHRoaXMuU2VsZWN0SXRlbUNvdW50ID0gZnVuY3Rpb24oaWQpCisgIHsKKyAgICB2YXIgY291bnQ9MDsKKyAgICB2YXIgd2luPXRoaXMuRE9NU2VhcmNoU2VsZWN0V2luZG93KCk7IAorICAgIGZvciAoaT0wO2k8d2luLmNoaWxkTm9kZXMubGVuZ3RoO2krKykKKyAgICB7CisgICAgICB2YXIgY2hpbGQgPSB3aW4uY2hpbGROb2Rlc1tpXTsgLy8gZ2V0IHNwYW4gd2l0aGluIGEKKyAgICAgIGlmIChjaGlsZC5jbGFzc05hbWU9PSdTZWxlY3RJdGVtJykKKyAgICAgIHsKKyAgICAgICAgY291bnQrKzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworICB9CisKKyAgdGhpcy5TZWxlY3RJdGVtU2V0ID0gZnVuY3Rpb24oaWQpCisgIHsKKyAgICB2YXIgaSxqPTA7CisgICAgdmFyIHdpbj10aGlzLkRPTVNlYXJjaFNlbGVjdFdpbmRvdygpOyAKKyAgICBmb3IgKGk9MDtpPHdpbi5jaGlsZE5vZGVzLmxlbmd0aDtpKyspCisgICAgeworICAgICAgdmFyIGNoaWxkID0gd2luLmNoaWxkTm9kZXNbaV07IC8vIGdldCBzcGFuIHdpdGhpbiBhCisgICAgICBpZiAoY2hpbGQuY2xhc3NOYW1lPT0nU2VsZWN0SXRlbScpCisgICAgICB7CisgICAgICAgIHZhciBub2RlID0gY2hpbGQuZmlyc3RDaGlsZDsKKyAgICAgICAgaWYgKGo9PWlkKQorICAgICAgICB7CisgICAgICAgICAgbm9kZS5pbm5lckhUTUw9JyYjODIyNjsnOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIG5vZGUuaW5uZXJIVE1MPScmIzE2MDsnOworICAgICAgICB9CisgICAgICAgIGorKzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBDYWxsZWQgd2hlbiBhbiBzZWFyY2ggZmlsdGVyIHNlbGVjdGlvbiBpcyBtYWRlLgorICAvLyBzZXQgaXRlbSB3aXRoIGluZGV4IGlkIGFzIHRoZSBhY3RpdmUgaXRlbQorICB0aGlzLk9uU2VsZWN0SXRlbSA9IGZ1bmN0aW9uKGlkKQorICB7CisgICAgdGhpcy5zZWFyY2hJbmRleCA9IGlkOworICAgIHRoaXMuU2VsZWN0SXRlbVNldChpZCk7CisgICAgdmFyIHNlYXJjaFZhbHVlID0gdGhpcy5ET01TZWFyY2hGaWVsZCgpLnZhbHVlLnJlcGxhY2UoLyArL2csICIiKTsKKyAgICBpZiAoc2VhcmNoVmFsdWUhPSIiICYmIHRoaXMuc2VhcmNoQWN0aXZlKSAvLyBzb21ldGhpbmcgd2FzIGZvdW5kIC0+IGRvIGEgc2VhcmNoCisgICAgeworICAgICAgdGhpcy5TZWFyY2goKTsKKyAgICB9CisgIH0KKworICB0aGlzLk9uU2VhcmNoU2VsZWN0S2V5ID0gZnVuY3Rpb24oZXZ0KQorICB7CisgICAgdmFyIGUgPSAoZXZ0KSA/IGV2dCA6IHdpbmRvdy5ldmVudDsgLy8gZm9yIElFCisgICAgaWYgKGUua2V5Q29kZT09NDAgJiYgdGhpcy5zZWFyY2hJbmRleDx0aGlzLlNlbGVjdEl0ZW1Db3VudCgpKSAvLyBEb3duCisgICAgeworICAgICAgdGhpcy5zZWFyY2hJbmRleCsrOworICAgICAgdGhpcy5PblNlbGVjdEl0ZW0odGhpcy5zZWFyY2hJbmRleCk7CisgICAgfQorICAgIGVsc2UgaWYgKGUua2V5Q29kZT09MzggJiYgdGhpcy5zZWFyY2hJbmRleD4wKSAvLyBVcAorICAgIHsKKyAgICAgIHRoaXMuc2VhcmNoSW5kZXgtLTsKKyAgICAgIHRoaXMuT25TZWxlY3RJdGVtKHRoaXMuc2VhcmNoSW5kZXgpOworICAgIH0KKyAgICBlbHNlIGlmIChlLmtleUNvZGU9PTEzIHx8IGUua2V5Q29kZT09MjcpCisgICAgeworICAgICAgdGhpcy5PblNlbGVjdEl0ZW0odGhpcy5zZWFyY2hJbmRleCk7CisgICAgICB0aGlzLkNsb3NlU2VsZWN0aW9uV2luZG93KCk7CisgICAgICB0aGlzLkRPTVNlYXJjaEZpZWxkKCkuZm9jdXMoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gLS0tLS0tLS0tIEFjdGlvbnMKKworICAvLyBDbG9zZXMgdGhlIHJlc3VsdHMgd2luZG93LgorICB0aGlzLkNsb3NlUmVzdWx0c1dpbmRvdyA9IGZ1bmN0aW9uKCkKKyAgeworICAgIHRoaXMuRE9NUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93KCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB0aGlzLkRPTVNlYXJjaENsb3NlKCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB0aGlzLkFjdGl2YXRlKGZhbHNlKTsKKyAgfQorCisgIHRoaXMuQ2xvc2VTZWxlY3Rpb25XaW5kb3cgPSBmdW5jdGlvbigpCisgIHsKKyAgICB0aGlzLkRPTVNlYXJjaFNlbGVjdFdpbmRvdygpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIH0KKworICAvLyBQZXJmb3JtcyBhIHNlYXJjaC4KKyAgdGhpcy5TZWFyY2ggPSBmdW5jdGlvbigpCisgIHsKKyAgICB0aGlzLmtleVRpbWVvdXQgPSAwOworCisgICAgLy8gc3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgdmFyIHNlYXJjaFZhbHVlID0gdGhpcy5ET01TZWFyY2hGaWVsZCgpLnZhbHVlLnJlcGxhY2UoL14gKy8sICIiKTsKKworICAgIHZhciBjb2RlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKS5jaGFyQ29kZUF0KDApOworICAgIHZhciBoZXhDb2RlOworICAgIGlmIChjb2RlPDE2KSAKKyAgICB7CisgICAgICBoZXhDb2RlPSIwIitjb2RlLnRvU3RyaW5nKDE2KTsKKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICBoZXhDb2RlPWNvZGUudG9TdHJpbmcoMTYpOworICAgIH0KKworICAgIHZhciByZXN1bHRzUGFnZTsKKyAgICB2YXIgcmVzdWx0c1BhZ2VXaXRoU2VhcmNoOworICAgIHZhciBoYXNSZXN1bHRzUGFnZTsKKworICAgIGlmIChpbmRleFNlY3Rpb25zV2l0aENvbnRlbnRbdGhpcy5zZWFyY2hJbmRleF0uY2hhckF0KGNvZGUpID09ICcxJykKKyAgICB7CisgICAgICAgcmVzdWx0c1BhZ2UgPSB0aGlzLnJlc3VsdHNQYXRoICsgJy8nICsgaW5kZXhTZWN0aW9uTmFtZXNbdGhpcy5zZWFyY2hJbmRleF0gKyAnXycgKyBoZXhDb2RlICsgJy5odG1sJzsKKyAgICAgICByZXN1bHRzUGFnZVdpdGhTZWFyY2ggPSByZXN1bHRzUGFnZSsnPycrZXNjYXBlKHNlYXJjaFZhbHVlKTsKKyAgICAgICBoYXNSZXN1bHRzUGFnZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgLy8gbm90aGluZyBhdmFpbGFibGUgZm9yIHRoaXMgc2VhcmNoIHRlcm0KKyAgICB7CisgICAgICAgcmVzdWx0c1BhZ2UgPSB0aGlzLnJlc3VsdHNQYXRoICsgJy9ub21hdGNoZXMuaHRtbCc7CisgICAgICAgcmVzdWx0c1BhZ2VXaXRoU2VhcmNoID0gcmVzdWx0c1BhZ2U7CisgICAgICAgaGFzUmVzdWx0c1BhZ2UgPSBmYWxzZTsKKyAgICB9CisKKyAgICB3aW5kb3cuZnJhbWVzLk1TZWFyY2hSZXN1bHRzLmxvY2F0aW9uID0gcmVzdWx0c1BhZ2VXaXRoU2VhcmNoOyAgCisgICAgdmFyIGRvbVBvcHVwU2VhcmNoUmVzdWx0c1dpbmRvdyA9IHRoaXMuRE9NUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93KCk7CisKKyAgICBpZiAoZG9tUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93LnN0eWxlLmRpc3BsYXkhPSdibG9jaycpCisgICAgeworICAgICAgIHZhciBkb21TZWFyY2hCb3ggPSB0aGlzLkRPTVNlYXJjaEJveCgpOworICAgICAgIHRoaXMuRE9NU2VhcmNoQ2xvc2UoKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CisgICAgICAgaWYgKHRoaXMuaW5zaWRlRnJhbWUpCisgICAgICAgeworICAgICAgICAgdmFyIGRvbVBvcHVwU2VhcmNoUmVzdWx0cyA9IHRoaXMuRE9NUG9wdXBTZWFyY2hSZXN1bHRzKCk7CisgICAgICAgICBkb21Qb3B1cFNlYXJjaFJlc3VsdHNXaW5kb3cuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICAgZG9tUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93LnN0eWxlLmRpc3BsYXkgID0gJ2Jsb2NrJzsKKyAgICAgICAgIHZhciB3aWR0aCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggLSA4OyAvLyB0aGUgLTggaXMgZm9yIElFIDotKAorICAgICAgICAgZG9tUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93LnN0eWxlLndpZHRoICAgID0gd2lkdGggKyAncHgnOworICAgICAgICAgZG9tUG9wdXBTZWFyY2hSZXN1bHRzLnN0eWxlLndpZHRoICAgICAgICAgID0gd2lkdGggKyAncHgnOworICAgICAgIH0KKyAgICAgICBlbHNlCisgICAgICAgeworICAgICAgICAgdmFyIGRvbVBvcHVwU2VhcmNoUmVzdWx0cyA9IHRoaXMuRE9NUG9wdXBTZWFyY2hSZXN1bHRzKCk7CisgICAgICAgICB2YXIgbGVmdCA9IGdldFhQb3MoZG9tU2VhcmNoQm94KSArIDE1MDsgLy8gZG9tU2VhcmNoQm94Lm9mZnNldFdpZHRoOworICAgICAgICAgdmFyIHRvcCAgPSBnZXRZUG9zKGRvbVNlYXJjaEJveCkgKyAyMDsgIC8vIGRvbVNlYXJjaEJveC5vZmZzZXRIZWlnaHQgKyAxOworICAgICAgICAgZG9tUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgICAgICAgbGVmdCAtPSBkb21Qb3B1cFNlYXJjaFJlc3VsdHMub2Zmc2V0V2lkdGg7CisgICAgICAgICBkb21Qb3B1cFNlYXJjaFJlc3VsdHNXaW5kb3cuc3R5bGUudG9wICAgICA9IHRvcCAgKyAncHgnOworICAgICAgICAgZG9tUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93LnN0eWxlLmxlZnQgICAgPSBsZWZ0ICsgJ3B4JzsKKyAgICAgICB9CisgICAgfQorCisgICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZTsKKyAgICB0aGlzLmxhc3RSZXN1bHRzUGFnZSA9IHJlc3VsdHNQYWdlOworICB9CisKKyAgLy8gLS0tLS0tLS0gQWN0aXZhdGlvbiBGdW5jdGlvbnMKKworICAvLyBBY3RpdmF0ZXMgb3IgZGVhY3RpdmF0ZXMgdGhlIHNlYXJjaCBwYW5lbCwgcmVzZXR0aW5nIHRoaW5ncyB0byAKKyAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMgaWYgbmVjZXNzYXJ5LiAKKyAgdGhpcy5BY3RpdmF0ZSA9IGZ1bmN0aW9uKGlzQWN0aXZlKQorICB7CisgICAgaWYgKGlzQWN0aXZlIHx8IC8vIG9wZW4gaXQKKyAgICAgICAgdGhpcy5ET01Qb3B1cFNlYXJjaFJlc3VsdHNXaW5kb3coKS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgCisgICAgICAgKQorICAgIHsKKyAgICAgIHRoaXMuRE9NU2VhcmNoQm94KCkuY2xhc3NOYW1lID0gJ01TZWFyY2hCb3hBY3RpdmUnOworCisgICAgICB2YXIgc2VhcmNoRmllbGQgPSB0aGlzLkRPTVNlYXJjaEZpZWxkKCk7CisKKyAgICAgIGlmIChzZWFyY2hGaWVsZC52YWx1ZSA9PSB0aGlzLnNlYXJjaExhYmVsKSAvLyBjbGVhciAiU2VhcmNoIiB0ZXJtIHVwb24gZW50cnkKKyAgICAgIHsgIAorICAgICAgICBzZWFyY2hGaWVsZC52YWx1ZSA9ICcnOyAgCisgICAgICAgIHRoaXMuc2VhcmNoQWN0aXZlID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIWlzQWN0aXZlKSAvLyBkaXJlY3RseSByZW1vdmUgdGhlIHBhbmVsCisgICAgeworICAgICAgdGhpcy5ET01TZWFyY2hCb3goKS5jbGFzc05hbWUgPSAnTVNlYXJjaEJveEluYWN0aXZlJzsKKyAgICAgIHRoaXMuRE9NU2VhcmNoRmllbGQoKS52YWx1ZSAgID0gdGhpcy5zZWFyY2hMYWJlbDsKKyAgICAgIHRoaXMuc2VhcmNoQWN0aXZlICAgICAgICAgICAgID0gZmFsc2U7CisgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSAgICAgICAgICA9ICcnCisgICAgICB0aGlzLmxhc3RSZXN1bHRzUGFnZSAgICAgICAgICA9ICcnOworICAgIH0KKyAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBUaGUgY2xhc3MgdGhhdCBoYW5kbGVzIGV2ZXJ5dGhpbmcgb24gdGhlIHNlYXJjaCByZXN1bHRzIHBhZ2UuCitmdW5jdGlvbiBTZWFyY2hSZXN1bHRzKG5hbWUpCit7CisgICAgLy8gVGhlIG51bWJlciBvZiBtYXRjaGVzIGZyb20gdGhlIGxhc3QgcnVuIG9mIDxTZWFyY2goKT4uCisgICAgdGhpcy5sYXN0TWF0Y2hDb3VudCA9IDA7CisgICAgdGhpcy5sYXN0S2V5ID0gMDsKKyAgICB0aGlzLnJlcGVhdE9uID0gZmFsc2U7CisKKyAgICAvLyBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwYXNzZWQgZWxlbWVudCBJRC4KKyAgICB0aGlzLkZpbmRDaGlsZEVsZW1lbnQgPSBmdW5jdGlvbihpZCkKKyAgICB7CisgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgIHZhciBlbGVtZW50ID0gcGFyZW50RWxlbWVudC5maXJzdENoaWxkOworCisgICAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50IT1wYXJlbnRFbGVtZW50KQorICAgICAgeworICAgICAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PSAnRElWJyAmJiBlbGVtZW50LmNsYXNzTmFtZSA9PSAnU1JDaGlsZHJlbicpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbGVtZW50Lm5vZGVOYW1lID09ICdESVYnICYmIGVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKQorICAgICAgICB7ICAKKyAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsgIAorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQubmV4dFNpYmxpbmcpCisgICAgICAgIHsgIAorICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudCE9cGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5uZXh0U2libGluZyk7CisKKyAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50IT1wYXJlbnRFbGVtZW50KQorICAgICAgICAgIHsgIAorICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7ICAKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLlRvZ2dsZSA9IGZ1bmN0aW9uKGlkKQorICAgIHsKKyAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5GaW5kQ2hpbGRFbGVtZW50KGlkKTsKKyAgICAgIGlmIChlbGVtZW50KQorICAgICAgeworICAgICAgICBpZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycpCisgICAgICAgIHsKKyAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8vIFNlYXJjaGVzIGZvciB0aGUgcGFzc2VkIHN0cmluZy4gIElmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciwKKyAgICAvLyBpdCB0YWtlcyBpdCBmcm9tIHRoZSBVUkwgcXVlcnkuCisgICAgLy8KKyAgICAvLyBBbHdheXMgcmV0dXJucyB0cnVlLCBzaW5jZSBvdGhlciBkb2N1bWVudHMgbWF5IHRyeSB0byBjYWxsIGl0CisgICAgLy8gYW5kIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgcG9zc2libGUuCisgICAgdGhpcy5TZWFyY2ggPSBmdW5jdGlvbihzZWFyY2gpCisgICAgeworICAgICAgaWYgKCFzZWFyY2gpIC8vIGdldCBzZWFyY2ggd29yZCBmcm9tIFVSTAorICAgICAgeworICAgICAgICBzZWFyY2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgICAgICBzZWFyY2ggPSBzZWFyY2guc3Vic3RyaW5nKDEpOyAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nICc/JworICAgICAgICBzZWFyY2ggPSB1bmVzY2FwZShzZWFyY2gpOworICAgICAgfQorCisgICAgICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgvXiArLywgIiIpOyAvLyBzdHJpcCBsZWFkaW5nIHNwYWNlcworICAgICAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoLyArJC8sICIiKTsgLy8gc3RyaXAgdHJhaWxpbmcgc3BhY2VzCisgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTsKKyAgICAgIHNlYXJjaCA9IGNvbnZlcnRUb0lkKHNlYXJjaCk7CisKKyAgICAgIHZhciByZXN1bHRSb3dzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOworICAgICAgdmFyIG1hdGNoZXMgPSAwOworCisgICAgICB2YXIgaSA9IDA7CisgICAgICB3aGlsZSAoaSA8IHJlc3VsdFJvd3MubGVuZ3RoKQorICAgICAgeworICAgICAgICB2YXIgcm93ID0gcmVzdWx0Um93cy5pdGVtKGkpOworICAgICAgICBpZiAocm93LmNsYXNzTmFtZSA9PSAiU1JSZXN1bHQiKQorICAgICAgICB7CisgICAgICAgICAgdmFyIHJvd01hdGNoTmFtZSA9IHJvdy5pZC50b0xvd2VyQ2FzZSgpOworICAgICAgICAgIHJvd01hdGNoTmFtZSA9IHJvd01hdGNoTmFtZS5yZXBsYWNlKC9ec3JcZCpfLywgJycpOyAvLyBzdHJpcCAnc3IxMjNfJworCisgICAgICAgICAgaWYgKHNlYXJjaC5sZW5ndGg8PXJvd01hdGNoTmFtZS5sZW5ndGggJiYgCisgICAgICAgICAgICAgcm93TWF0Y2hOYW1lLnN1YnN0cigwLCBzZWFyY2gubGVuZ3RoKT09c2VhcmNoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAgICAgIG1hdGNoZXMrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpKys7CisgICAgICB9CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiU2VhcmNoaW5nIikuc3R5bGUuZGlzcGxheT0nbm9uZSc7CisgICAgICBpZiAobWF0Y2hlcyA9PSAwKSAvLyBubyByZXN1bHRzCisgICAgICB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7CisgICAgICB9CisgICAgICBlbHNlIC8vIGF0IGxlYXN0IG9uZSByZXN1bHQKKyAgICAgIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9J25vbmUnOworICAgICAgfQorICAgICAgdGhpcy5sYXN0TWF0Y2hDb3VudCA9IG1hdGNoZXM7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGl0ZW0gd2l0aCBpbmRleCBpbmRleCBvciBoaWdoZXIgdGhhdCBpcyB2aXNpYmxlCisgICAgdGhpcy5OYXZOZXh0ID0gZnVuY3Rpb24oaW5kZXgpCisgICAgeworICAgICAgdmFyIGZvY3VzSXRlbTsKKyAgICAgIHdoaWxlICgxKQorICAgICAgeworICAgICAgICB2YXIgZm9jdXNOYW1lID0gJ0l0ZW0nK2luZGV4OworICAgICAgICBmb2N1c0l0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb2N1c05hbWUpOworICAgICAgICBpZiAoZm9jdXNJdGVtICYmIGZvY3VzSXRlbS5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT09J2Jsb2NrJykKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFmb2N1c0l0ZW0pIC8vIGxhc3QgZWxlbWVudAorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9jdXNJdGVtPW51bGw7CisgICAgICAgIGluZGV4Kys7CisgICAgICB9CisgICAgICByZXR1cm4gZm9jdXNJdGVtOworICAgIH0KKworICAgIHRoaXMuTmF2UHJldiA9IGZ1bmN0aW9uKGluZGV4KQorICAgIHsKKyAgICAgIHZhciBmb2N1c0l0ZW07CisgICAgICB3aGlsZSAoMSkKKyAgICAgIHsKKyAgICAgICAgdmFyIGZvY3VzTmFtZSA9ICdJdGVtJytpbmRleDsKKyAgICAgICAgZm9jdXNJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9jdXNOYW1lKTsKKyAgICAgICAgaWYgKGZvY3VzSXRlbSAmJiBmb2N1c0l0ZW0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9PSdibG9jaycpCisgICAgICAgIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghZm9jdXNJdGVtKSAvLyBsYXN0IGVsZW1lbnQKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvY3VzSXRlbT1udWxsOworICAgICAgICBpbmRleC0tOworICAgICAgfQorICAgICAgcmV0dXJuIGZvY3VzSXRlbTsKKyAgICB9CisKKyAgICB0aGlzLlByb2Nlc3NLZXlzID0gZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICBpZiAoZS50eXBlID09ICJrZXlkb3duIikgCisgICAgICB7CisgICAgICAgIHRoaXMucmVwZWF0T24gPSBmYWxzZTsKKyAgICAgICAgdGhpcy5sYXN0S2V5ID0gZS5rZXlDb2RlOworICAgICAgfQorICAgICAgZWxzZSBpZiAoZS50eXBlID09ICJrZXlwcmVzcyIpCisgICAgICB7CisgICAgICAgIGlmICghdGhpcy5yZXBlYXRPbikKKyAgICAgICAgeworICAgICAgICAgIGlmICh0aGlzLmxhc3RLZXkpIHRoaXMucmVwZWF0T24gPSB0cnVlOworICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gaWdub3JlIGZpcnN0IGtleXByZXNzIGFmdGVyIGtleWRvd24KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoZS50eXBlID09ICJrZXl1cCIpCisgICAgICB7CisgICAgICAgIHRoaXMubGFzdEtleSA9IDA7CisgICAgICAgIHRoaXMucmVwZWF0T24gPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLmxhc3RLZXkhPTA7CisgICAgfQorCisgICAgdGhpcy5OYXYgPSBmdW5jdGlvbihldnQsaXRlbUluZGV4KSAKKyAgICB7CisgICAgICB2YXIgZSAgPSAoZXZ0KSA/IGV2dCA6IHdpbmRvdy5ldmVudDsgLy8gZm9yIElFCisgICAgICBpZiAoZS5rZXlDb2RlPT0xMykgcmV0dXJuIHRydWU7CisgICAgICBpZiAoIXRoaXMuUHJvY2Vzc0tleXMoZSkpIHJldHVybiBmYWxzZTsKKworICAgICAgaWYgKHRoaXMubGFzdEtleT09MzgpIC8vIFVwCisgICAgICB7CisgICAgICAgIHZhciBuZXdJbmRleCA9IGl0ZW1JbmRleC0xOworICAgICAgICB2YXIgZm9jdXNJdGVtID0gdGhpcy5OYXZQcmV2KG5ld0luZGV4KTsKKyAgICAgICAgaWYgKGZvY3VzSXRlbSkKKyAgICAgICAgeworICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuRmluZENoaWxkRWxlbWVudChmb2N1c0l0ZW0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkKTsKKyAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuc3R5bGUuZGlzcGxheSA9PSAnYmxvY2snKSAvLyBjaGlsZHJlbiB2aXNpYmxlCisgICAgICAgICAgeyAKKyAgICAgICAgICAgIHZhciBuPTA7CisgICAgICAgICAgICB2YXIgdG1wRWxlbTsKKyAgICAgICAgICAgIHdoaWxlICgxKSAvLyBzZWFyY2ggZm9yIGxhc3QgY2hpbGQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdG1wRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJdGVtJytuZXdJbmRleCsnX2MnK24pOworICAgICAgICAgICAgICBpZiAodG1wRWxlbSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvY3VzSXRlbSA9IHRtcEVsZW07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSAvLyBmb3VuZCBpdCEKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvY3VzSXRlbSkKKyAgICAgICAgeworICAgICAgICAgIGZvY3VzSXRlbS5mb2N1cygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgLy8gcmV0dXJuIGZvY3VzIHRvIHNlYXJjaCBmaWVsZAorICAgICAgICB7CisgICAgICAgICAgIHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTVNlYXJjaEZpZWxkIikuZm9jdXMoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAodGhpcy5sYXN0S2V5PT00MCkgLy8gRG93bgorICAgICAgeworICAgICAgICB2YXIgbmV3SW5kZXggPSBpdGVtSW5kZXgrMTsKKyAgICAgICAgdmFyIGZvY3VzSXRlbTsKKyAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSXRlbScraXRlbUluZGV4KTsKKyAgICAgICAgdmFyIGVsZW0gPSB0aGlzLkZpbmRDaGlsZEVsZW1lbnQoaXRlbS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQpOworICAgICAgICBpZiAoZWxlbSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkgPT0gJ2Jsb2NrJykgLy8gY2hpbGRyZW4gdmlzaWJsZQorICAgICAgICB7CisgICAgICAgICAgZm9jdXNJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0l0ZW0nK2l0ZW1JbmRleCsnX2MwJyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb2N1c0l0ZW0pIGZvY3VzSXRlbSA9IHRoaXMuTmF2TmV4dChuZXdJbmRleCk7CisgICAgICAgIGlmIChmb2N1c0l0ZW0pICBmb2N1c0l0ZW0uZm9jdXMoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRoaXMubGFzdEtleT09MzkpIC8vIFJpZ2h0CisgICAgICB7CisgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0l0ZW0nK2l0ZW1JbmRleCk7CisgICAgICAgIHZhciBlbGVtID0gdGhpcy5GaW5kQ2hpbGRFbGVtZW50KGl0ZW0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkKTsKKyAgICAgICAgaWYgKGVsZW0pIGVsZW0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisgICAgICB9CisgICAgICBlbHNlIGlmICh0aGlzLmxhc3RLZXk9PTM3KSAvLyBMZWZ0CisgICAgICB7CisgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0l0ZW0nK2l0ZW1JbmRleCk7CisgICAgICAgIHZhciBlbGVtID0gdGhpcy5GaW5kQ2hpbGRFbGVtZW50KGl0ZW0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkKTsKKyAgICAgICAgaWYgKGVsZW0pIGVsZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRoaXMubGFzdEtleT09MjcpIC8vIEVzY2FwZQorICAgICAgeworICAgICAgICBwYXJlbnQuc2VhcmNoQm94LkNsb3NlUmVzdWx0c1dpbmRvdygpOworICAgICAgICBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk1TZWFyY2hGaWVsZCIpLmZvY3VzKCk7CisgICAgICB9CisgICAgICBlbHNlIGlmICh0aGlzLmxhc3RLZXk9PTEzKSAvLyBFbnRlcgorICAgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0aGlzLk5hdkNoaWxkID0gZnVuY3Rpb24oZXZ0LGl0ZW1JbmRleCxjaGlsZEluZGV4KQorICAgIHsKKyAgICAgIHZhciBlICA9IChldnQpID8gZXZ0IDogd2luZG93LmV2ZW50OyAvLyBmb3IgSUUKKyAgICAgIGlmIChlLmtleUNvZGU9PTEzKSByZXR1cm4gdHJ1ZTsKKyAgICAgIGlmICghdGhpcy5Qcm9jZXNzS2V5cyhlKSkgcmV0dXJuIGZhbHNlOworCisgICAgICBpZiAodGhpcy5sYXN0S2V5PT0zOCkgLy8gVXAKKyAgICAgIHsKKyAgICAgICAgaWYgKGNoaWxkSW5kZXg+MCkKKyAgICAgICAgeworICAgICAgICAgIHZhciBuZXdJbmRleCA9IGNoaWxkSW5kZXgtMTsKKyAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSXRlbScraXRlbUluZGV4KydfYycrbmV3SW5kZXgpLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvLyBhbHJlYWR5IGF0IGZpcnN0IGNoaWxkLCBqdW1wIHRvIHBhcmVudAorICAgICAgICB7CisgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0l0ZW0nK2l0ZW1JbmRleCkuZm9jdXMoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAodGhpcy5sYXN0S2V5PT00MCkgLy8gRG93bgorICAgICAgeworICAgICAgICB2YXIgbmV3SW5kZXggPSBjaGlsZEluZGV4KzE7CisgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0l0ZW0nK2l0ZW1JbmRleCsnX2MnK25ld0luZGV4KTsKKyAgICAgICAgaWYgKCFlbGVtKSAvLyBsYXN0IGNoaWxkLCBqdW1wIHRvIHBhcmVudCBuZXh0IHBhcmVudAorICAgICAgICB7CisgICAgICAgICAgZWxlbSA9IHRoaXMuTmF2TmV4dChpdGVtSW5kZXgrMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVsZW0pCisgICAgICAgIHsKKyAgICAgICAgICBlbGVtLmZvY3VzKCk7CisgICAgICAgIH0gCisgICAgICB9CisgICAgICBlbHNlIGlmICh0aGlzLmxhc3RLZXk9PTI3KSAvLyBFc2NhcGUKKyAgICAgIHsKKyAgICAgICAgcGFyZW50LnNlYXJjaEJveC5DbG9zZVJlc3VsdHNXaW5kb3coKTsKKyAgICAgICAgcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJNU2VhcmNoRmllbGQiKS5mb2N1cygpOworICAgICAgfQorICAgICAgZWxzZSBpZiAodGhpcy5sYXN0S2V5PT0xMykgLy8gRW50ZXIKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitmdW5jdGlvbiBzZXRLZXlBY3Rpb25zKGVsZW0sYWN0aW9uKQoreworICBlbGVtLnNldEF0dHJpYnV0ZSgnb25rZXlkb3duJyxhY3Rpb24pOworICBlbGVtLnNldEF0dHJpYnV0ZSgnb25rZXlwcmVzcycsYWN0aW9uKTsKKyAgZWxlbS5zZXRBdHRyaWJ1dGUoJ29ua2V5dXAnLGFjdGlvbik7Cit9CisKK2Z1bmN0aW9uIHNldENsYXNzQXR0cihlbGVtLGF0dHIpCit7CisgIGVsZW0uc2V0QXR0cmlidXRlKCdjbGFzcycsYXR0cik7CisgIGVsZW0uc2V0QXR0cmlidXRlKCdjbGFzc05hbWUnLGF0dHIpOworfQorCitmdW5jdGlvbiBjcmVhdGVSZXN1bHRzKCkKK3sKKyAgdmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiU1JSZXN1bHRzIik7CisgIGZvciAodmFyIGU9MDsgZTxzZWFyY2hEYXRhLmxlbmd0aDsgZSsrKQorICB7CisgICAgdmFyIGlkID0gc2VhcmNoRGF0YVtlXVswXTsKKyAgICB2YXIgc3JSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBzclJlc3VsdC5zZXRBdHRyaWJ1dGUoJ2lkJywnU1JfJytpZCk7CisgICAgc2V0Q2xhc3NBdHRyKHNyUmVzdWx0LCdTUlJlc3VsdCcpOworICAgIHZhciBzckVudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgc2V0Q2xhc3NBdHRyKHNyRW50cnksJ1NSRW50cnknKTsKKyAgICB2YXIgc3JMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgIHNyTGluay5zZXRBdHRyaWJ1dGUoJ2lkJywnSXRlbScrZSk7CisgICAgc2V0S2V5QWN0aW9ucyhzckxpbmssJ3JldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwnK2UrJyknKTsKKyAgICBzZXRDbGFzc0F0dHIoc3JMaW5rLCdTUlN5bWJvbCcpOworICAgIHNyTGluay5pbm5lckhUTUwgPSBzZWFyY2hEYXRhW2VdWzFdWzBdOworICAgIHNyRW50cnkuYXBwZW5kQ2hpbGQoc3JMaW5rKTsKKyAgICBpZiAoc2VhcmNoRGF0YVtlXVsxXS5sZW5ndGg9PTIpIC8vIHNpbmdsZSByZXN1bHQKKyAgICB7CisgICAgICBzckxpbmsuc2V0QXR0cmlidXRlKCdocmVmJyxzZWFyY2hEYXRhW2VdWzFdWzFdWzBdKTsKKyAgICAgIGlmIChzZWFyY2hEYXRhW2VdWzFdWzFdWzFdKQorICAgICAgeworICAgICAgIHNyTGluay5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsJ19wYXJlbnQnKTsKKyAgICAgIH0KKyAgICAgIHZhciBzclNjb3BlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgc2V0Q2xhc3NBdHRyKHNyU2NvcGUsJ1NSU2NvcGUnKTsKKyAgICAgIHNyU2NvcGUuaW5uZXJIVE1MID0gc2VhcmNoRGF0YVtlXVsxXVsxXVsyXTsKKyAgICAgIHNyRW50cnkuYXBwZW5kQ2hpbGQoc3JTY29wZSk7CisgICAgfQorICAgIGVsc2UgLy8gbXVsdGlwbGUgcmVzdWx0cworICAgIHsKKyAgICAgIHNyTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCdqYXZhc2NyaXB0OnNlYXJjaFJlc3VsdHMuVG9nZ2xlKCJTUl8nK2lkKyciKScpOworICAgICAgdmFyIHNyQ2hpbGRyZW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgIHNldENsYXNzQXR0cihzckNoaWxkcmVuLCdTUkNoaWxkcmVuJyk7CisgICAgICBmb3IgKHZhciBjPTA7IGM8c2VhcmNoRGF0YVtlXVsxXS5sZW5ndGgtMTsgYysrKQorICAgICAgeworICAgICAgICB2YXIgc3JDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgICAgc3JDaGlsZC5zZXRBdHRyaWJ1dGUoJ2lkJywnSXRlbScrZSsnX2MnK2MpOworICAgICAgICBzZXRLZXlBY3Rpb25zKHNyQ2hpbGQsJ3JldHVybiBzZWFyY2hSZXN1bHRzLk5hdkNoaWxkKGV2ZW50LCcrZSsnLCcrYysnKScpOworICAgICAgICBzZXRDbGFzc0F0dHIoc3JDaGlsZCwnU1JTY29wZScpOworICAgICAgICBzckNoaWxkLnNldEF0dHJpYnV0ZSgnaHJlZicsc2VhcmNoRGF0YVtlXVsxXVtjKzFdWzBdKTsKKyAgICAgICAgaWYgKHNlYXJjaERhdGFbZV1bMV1bYysxXVsxXSkKKyAgICAgICAgeworICAgICAgICAgc3JDaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsJ19wYXJlbnQnKTsKKyAgICAgICAgfQorICAgICAgICBzckNoaWxkLmlubmVySFRNTCA9IHNlYXJjaERhdGFbZV1bMV1bYysxXVsyXTsKKyAgICAgICAgc3JDaGlsZHJlbi5hcHBlbmRDaGlsZChzckNoaWxkKTsKKyAgICAgIH0KKyAgICAgIHNyRW50cnkuYXBwZW5kQ2hpbGQoc3JDaGlsZHJlbik7CisgICAgfQorICAgIHNyUmVzdWx0LmFwcGVuZENoaWxkKHNyRW50cnkpOworICAgIHJlc3VsdHMuYXBwZW5kQ2hpbGQoc3JSZXN1bHQpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2hfbC5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoX2wucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NzJmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoX2wucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2hfbS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoX20ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjlhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoX20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC9zZWFyY2hfci5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoX3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWU4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoX3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC90eXBlZGVmc183NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3R5cGVkZWZzXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmNmQyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC90eXBlZGVmc183NC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InR5cGVkZWZzXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdHlwZWRlZnNfNzQuanMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdHlwZWRlZnNfNzQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViMDBmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC90eXBlZGVmc183NC5qcwpAQCAtMCwwICsxLDUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3RqaGFuZGxlJyxbJ3RqaGFuZGxlJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anRyYW5zZm9ybScsWyd0anRyYW5zZm9ybScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxJywxLCd0dXJib2pwZWcuaCddXV0KK107CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMDg1YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjMuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ2YXJpYWJsZXNfNjMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJTUlBhZ2UiPgorPGRpdiBpZD0iU1JJbmRleCI+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2FkaW5nIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTm9NYXRjaGVzIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Cit2YXIgc2VhcmNoUmVzdWx0cyA9IG5ldyBTZWFyY2hSZXN1bHRzKCJzZWFyY2hSZXN1bHRzIik7CitzZWFyY2hSZXN1bHRzLlNlYXJjaCgpOworLS0+PC9zY3JpcHQ+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjMuanMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDU4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsnY3VzdG9tZmlsdGVyJyxbJ2N1c3RvbUZpbHRlcicsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMScsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDQxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzY0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY0LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTlhMDUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182NC5qcwpAQCAtMCwwICsxLDUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ2RhdGEnLFsnZGF0YScsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E2ODhmZThmMWE4ZWNjMTJhNTM4ZDllNTYxY2YzMzhlMycsMSwndGp0cmFuc2Zvcm0nXV1dLAorICBbJ2Rlbm9tJyxbJ2Rlbm9tJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMycsMSwndGpzY2FsaW5nZmFjdG9yJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjguaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBhODYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182OC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc182OC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182OC5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxN2U5NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjguanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydoJyxbJ2gnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUnLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmUuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI0ZGVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182ZS5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc182ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182ZS5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmYWExMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmUuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydudW0nLFsnbnVtJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2E5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYycsMSwndGpzY2FsaW5nZmFjdG9yJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmYuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDZlMmUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182Zi5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc182Zi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182Zi5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjYTgzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmYuanMKQEAgLTAsMCArMSw1IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydvcCcsWydvcCcsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCcsMSwndGp0cmFuc2Zvcm0nXV1dLAorICBbJ29wdGlvbnMnLFsnb3B0aW9ucycsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNicsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Mi5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Mi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNGVlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzcyLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzcyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzcyLmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Mi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWNkZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Mi5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3InLFsncicsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZicsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183NC5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NjVmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc0LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwOTQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183NC5qcwpAQCAtMCwwICsxLDEwIEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd0amFscGhhb2Zmc2V0JyxbJ3RqQWxwaGFPZmZzZXQnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1YWYwYWIwNjVmZWVmZDUyNmRlYmYxZTIwYzQzZTgzNycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqYmx1ZW9mZnNldCcsWyd0akJsdWVPZmZzZXQnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZ3JlZW5vZmZzZXQnLFsndGpHcmVlbk9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGptY3VoZWlnaHQnLFsndGpNQ1VIZWlnaHQnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqbWN1d2lkdGgnLFsndGpNQ1VXaWR0aCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwaXhlbHNpemUnLFsndGpQaXhlbFNpemUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcmVkb2Zmc2V0JyxbJ3RqUmVkT2Zmc2V0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgnLDEsJ3R1cmJvanBlZy5oJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzcuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzRjNmRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Ny5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc183Ny5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Ny5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2NzAwMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzcuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd3JyxbJ3cnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDInLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzguaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDJlODc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc183OC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OC5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhMjdmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzguanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd4JyxbJ3gnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDknLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzkuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZhZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OS5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc183OS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OS5qcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4OTBhNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzkuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd5JyxbJ3knLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzInLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3N0cnVjdHRqcmVnaW9uLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zdHJ1Y3R0anJlZ2lvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTlhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zdHJ1Y3R0anJlZ2lvbi5odG1sCkBAIC0wLDAgKzEsMTg2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+Cis8dGl0bGU+VHVyYm9KUEVHOiB0anJlZ2lvbiBTdHJ1Y3QgUmVmZXJlbmNlPC90aXRsZT4KKzxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgorPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsgc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsgfSk7Cis8L3NjcmlwdD4KKzxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPGxpbmsgaHJlZj0iZG94eWdlbi1leHRyYS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KKzxkaXYgaWQ9InRpdGxlYXJlYSI+Cis8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKyA8dGJvZHk+CisgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KKyAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+CisgICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHCisgICAmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+Mi4wPC9zcGFuPgorICAgPC9kaXY+CisgIDwvdGQ+CisgPC90cj4KKyA8L3Rib2R5PgorPC90YWJsZT4KKzwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CisgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KKyAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgorICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPgorICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgorICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgorICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCisgICAgICAgICAgICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICAgICAgICAgICAgYWx0PSIiLz4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ik1TZWFyY2hGaWVsZCIgdmFsdWU9IlNlYXJjaCIgYWNjZXNza2V5PSJTIgorICAgICAgICAgICAgICAgb25mb2N1cz0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyh0cnVlKSIgCisgICAgICAgICAgICAgICBvbmJsdXI9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkRm9jdXMoZmFsc2UpIiAKKyAgICAgICAgICAgICAgIG9ua2V5dXA9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkQ2hhbmdlKGV2ZW50KSIvPgorICAgICAgICAgIDwvc3Bhbj48c3BhbiBjbGFzcz0icmlnaHQiPgorICAgICAgICAgICAgPGEgaWQ9Ik1TZWFyY2hDbG9zZSIgaHJlZj0iamF2YXNjcmlwdDpzZWFyY2hCb3guQ2xvc2VSZXN1bHRzV2luZG93KCkiPjxpbWcgaWQ9Ik1TZWFyY2hDbG9zZUltZyIgYm9yZGVyPSIwIiBzcmM9InNlYXJjaC9jbG9zZS5wbmciIGFsdD0iIi8+PC9hPgorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJuYXZyb3cyIiBjbGFzcz0idGFiczIiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImNsYXNzZXMuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZSYjMTYwO0luZGV4PC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImZ1bmN0aW9ucy5odG1sIj48c3Bhbj5EYXRhJiMxNjA7RmllbGRzPC9zcGFuPjwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KKzwvZGl2PgorCis8L2Rpdj48IS0tIHRvcCAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9InN1bW1hcnkiPgorPGEgaHJlZj0iI3B1Yi1hdHRyaWJzIj5EYXRhIEZpZWxkczwvYT4gIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJoZWFkZXJ0aXRsZSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+dGpyZWdpb24gU3RydWN0IFJlZmVyZW5jZTxkaXYgY2xhc3M9ImluZ3JvdXBzIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sIj5UdXJib0pQRUc8L2E+PC9kaXY+PC9kaXY+ICA8L2Rpdj4KKzwvZGl2PjwhLS1oZWFkZXItLT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKworPHA+Q3JvcHBpbmcgcmVnaW9uLiAgCisgPGEgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KKworPHA+PGNvZGU+I2luY2x1ZGUgJmx0O3R1cmJvanBlZy5oJmd0OzwvY29kZT48L3A+Cis8dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InB1Yi1hdHRyaWJzIj48L2E+CitEYXRhIEZpZWxkczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmE0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDkiPng8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmE0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbGVmdCBib3VuZGFyeSBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgPGEgaHJlZj0iI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmE0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTphN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwjYTdiM2UwYzI0Y2ZlODdhY2M4MGUzMzRjYWZkY2YyMmMyIj55PC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICA8YSBocmVmPSIjYTdiM2UwYzI0Y2ZlODdhY2M4MGUzMzRjYWZkY2YyMmMyIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6YTdiM2UwYzI0Y2ZlODdhY2M4MGUzMzRjYWZkY2YyMmMyIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmFiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDIiPnc8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmFiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgd2lkdGggb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDIiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FlY2VmYzQ1YTI2ZjRkOGI2MGRkNGQ4MjVjMTcxMDExNSI+aDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBoZWlnaHQgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGEgbmFtZT0iZGV0YWlscyIgaWQ9ImRldGFpbHMiPjwvYT48aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5EZXRhaWxlZCBEZXNjcmlwdGlvbjwvaDI+Cis8ZGl2IGNsYXNzPSJ0ZXh0YmxvY2siPjxwPkNyb3BwaW5nIHJlZ2lvbi4gPC9wPgorPC9kaXY+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RmllbGQgRG9jdW1lbnRhdGlvbjwvaDI+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iYWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCB0anJlZ2lvbjo6aDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIGhlaWdodCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiA8L3A+Cis8cD5TZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0geS4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImFiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGpyZWdpb246Onc8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSB3aWR0aCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiA8L3A+Cis8cD5TZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgc291cmNlIEpQRUcgaW1hZ2UgLSB4LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iYTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCB0anJlZ2lvbjo6eDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gPC9wPgorPHA+VGhpcyBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgdGhlIE1DVSBibG9jayB3aWR0aCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyIgdGl0bGU9Ik1DVSBibG9jayB3aWR0aCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVV2lkdGg8L2E+LikgPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGpyZWdpb246Onk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiA8L3A+Cis8cD5UaGlzIG11c3QgYmUgZXZlbmx5IGRpdmlzaWJsZSBieSB0aGUgTUNVIGJsb2NrIGhlaWdodCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiIgdGl0bGU9Ik1DVSBibG9jayBoZWlnaHQgKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIj50ak1DVUhlaWdodDwvYT4uKSA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8aHIvPlRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHN0cnVjdCB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBmaWxlOjx1bD4KKzxsaT50dXJib2pwZWcuaDwvbGk+Cis8L3VsPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmE2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbApAQCAtMCwwICsxLDE0OCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT05Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSIvPgorPHRpdGxlPlR1cmJvSlBFRzogdGpzY2FsaW5nZmFjdG9yIFN0cnVjdCBSZWZlcmVuY2U8L3RpdGxlPgorPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorPGRpdiBpZD0idGl0bGVhcmVhIj4KKzx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorIDx0Ym9keT4KKyA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4yLjA8L3NwYW4+CisgICA8L2Rpdj4KKyAgPC90ZD4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KKyAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+CisgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CisgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCisgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgICAgICAgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCisgICAgICAgICAgICAgICBhbHQ9IiIvPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iTVNlYXJjaEZpZWxkIiB2YWx1ZT0iU2VhcmNoIiBhY2Nlc3NrZXk9IlMiCisgICAgICAgICAgICAgICBvbmZvY3VzPSJzZWFyY2hCb3guT25TZWFyY2hGaWVsZEZvY3VzKHRydWUpIiAKKyAgICAgICAgICAgICAgIG9uYmx1cj0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyhmYWxzZSkiIAorICAgICAgICAgICAgICAgb25rZXl1cD0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRDaGFuZ2UoZXZlbnQpIi8+CisgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPSJyaWdodCI+CisgICAgICAgICAgICA8YSBpZD0iTVNlYXJjaENsb3NlIiBocmVmPSJqYXZhc2NyaXB0OnNlYXJjaEJveC5DbG9zZVJlc3VsdHNXaW5kb3coKSI+PGltZyBpZD0iTVNlYXJjaENsb3NlSW1nIiBib3JkZXI9IjAiIHNyYz0ic2VhcmNoL2Nsb3NlLnBuZyIgYWx0PSIiLz48L2E+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9Im5hdnJvdzIiIGNsYXNzPSJ0YWJzMiI+CisgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KKyAgICAgIDxsaT48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iY2xhc3Nlcy5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlJiMxNjA7SW5kZXg8L3NwYW4+PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+Cis8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCisgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgorICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KKzxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RnVuY3Rpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VHlwZWRlZnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg1KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg2KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdG9yPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+R3JvdXBzPC9hPjwvZGl2PgorCis8IS0tIGlmcmFtZSBzaG93aW5nIHRoZSBzZWFyY2ggcmVzdWx0cyAoY2xvc2VkIGJ5IGRlZmF1bHQpIC0tPgorPGRpdiBpZD0iTVNlYXJjaFJlc3VsdHNXaW5kb3ciPgorPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6dm9pZCgwKSIgZnJhbWVib3JkZXI9IjAiIAorICAgICAgICBuYW1lPSJNU2VhcmNoUmVzdWx0cyIgaWQ9Ik1TZWFyY2hSZXN1bHRzIj4KKzwvaWZyYW1lPgorPC9kaXY+CisKKzwvZGl2PjwhLS0gdG9wIC0tPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKyAgPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8YSBocmVmPSIjcHViLWF0dHJpYnMiPkRhdGEgRmllbGRzPC9hPiAgPC9kaXY+CisgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KKzxkaXYgY2xhc3M9InRpdGxlIj50anNjYWxpbmdmYWN0b3IgU3RydWN0IFJlZmVyZW5jZTxkaXYgY2xhc3M9ImluZ3JvdXBzIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sIj5UdXJib0pQRUc8L2E+PC9kaXY+PC9kaXY+ICA8L2Rpdj4KKzwvZGl2PjwhLS1oZWFkZXItLT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKworPHA+U2NhbGluZyBmYWN0b3IuICAKKyA8YSBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KKworPHA+PGNvZGU+I2luY2x1ZGUgJmx0O3R1cmJvanBlZy5oJmd0OzwvY29kZT48L3A+Cis8dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InB1Yi1hdHRyaWJzIj48L2E+CitEYXRhIEZpZWxkczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmE5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwjYTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIj5udW08L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmE5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5OdW1lcmF0b3IuICA8YSBocmVmPSIjYTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6YTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmFlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwjYWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj5kZW5vbTwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkRlbm9taW5hdG9yLiAgPGEgaHJlZj0iI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmFlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8YSBuYW1lPSJkZXRhaWxzIiBpZD0iZGV0YWlscyI+PC9hPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPkRldGFpbGVkIERlc2NyaXB0aW9uPC9oMj4KKzxkaXYgY2xhc3M9InRleHRibG9jayI+PHA+U2NhbGluZyBmYWN0b3IuIDwvcD4KKzwvZGl2PjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPkZpZWxkIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImFlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGpzY2FsaW5nZmFjdG9yOjpkZW5vbTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+RGVub21pbmF0b3IuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+aW50IHRqc2NhbGluZ2ZhY3Rvcjo6bnVtPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5OdW1lcmF0b3IuIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxoci8+VGhlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgc3RydWN0IHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGU6PHVsPgorPGxpPnR1cmJvanBlZy5oPC9saT4KKzwvdWw+Cis8L2Rpdj48IS0tIGNvbnRlbnRzIC0tPgorPCEtLSBzdGFydCBmb290ZXIgcGFydCAtLT4KKzxociBjbGFzcz0iZm9vdGVyIi8+PGFkZHJlc3MgY2xhc3M9ImZvb3RlciI+PHNtYWxsPgorR2VuZXJhdGVkIGJ5ICYjMTYwOzxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Cis8aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPgorPC9hPiAxLjguMy4xCis8L3NtYWxsPjwvYWRkcmVzcz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjcyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sCkBAIC0wLDAgKzEsMjEyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+Cis8dGl0bGU+VHVyYm9KUEVHOiB0anRyYW5zZm9ybSBTdHJ1Y3QgUmVmZXJlbmNlPC90aXRsZT4KKzxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgorPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsgc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsgfSk7Cis8L3NjcmlwdD4KKzxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPGxpbmsgaHJlZj0iZG94eWdlbi1leHRyYS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KKzxkaXYgaWQ9InRpdGxlYXJlYSI+Cis8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKyA8dGJvZHk+CisgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KKyAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+CisgICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHCisgICAmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+Mi4wPC9zcGFuPgorICAgPC9kaXY+CisgIDwvdGQ+CisgPC90cj4KKyA8L3Rib2R5PgorPC90YWJsZT4KKzwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CisgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KKyAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgorICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPgorICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgorICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgorICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCisgICAgICAgICAgICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICAgICAgICAgICAgYWx0PSIiLz4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ik1TZWFyY2hGaWVsZCIgdmFsdWU9IlNlYXJjaCIgYWNjZXNza2V5PSJTIgorICAgICAgICAgICAgICAgb25mb2N1cz0ic2VhcmNoQm94Lk9uU2VhcmNoRmllbGRGb2N1cyh0cnVlKSIgCisgICAgICAgICAgICAgICBvbmJsdXI9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkRm9jdXMoZmFsc2UpIiAKKyAgICAgICAgICAgICAgIG9ua2V5dXA9InNlYXJjaEJveC5PblNlYXJjaEZpZWxkQ2hhbmdlKGV2ZW50KSIvPgorICAgICAgICAgIDwvc3Bhbj48c3BhbiBjbGFzcz0icmlnaHQiPgorICAgICAgICAgICAgPGEgaWQ9Ik1TZWFyY2hDbG9zZSIgaHJlZj0iamF2YXNjcmlwdDpzZWFyY2hCb3guQ2xvc2VSZXN1bHRzV2luZG93KCkiPjxpbWcgaWQ9Ik1TZWFyY2hDbG9zZUltZyIgYm9yZGVyPSIwIiBzcmM9InNlYXJjaC9jbG9zZS5wbmciIGFsdD0iIi8+PC9hPgorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJuYXZyb3cyIiBjbGFzcz0idGFiczIiPgorICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CisgICAgICA8bGk+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImNsYXNzZXMuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZSYjMTYwO0luZGV4PC9zcGFuPjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImZ1bmN0aW9ucy5odG1sIj48c3Bhbj5EYXRhJiMxNjA7RmllbGRzPC9zcGFuPjwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KKzwvZGl2PgorCis8L2Rpdj48IS0tIHRvcCAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9InN1bW1hcnkiPgorPGEgaHJlZj0iI3B1Yi1hdHRyaWJzIj5EYXRhIEZpZWxkczwvYT4gIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJoZWFkZXJ0aXRsZSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+dGp0cmFuc2Zvcm0gU3RydWN0IFJlZmVyZW5jZTxkaXYgY2xhc3M9ImluZ3JvdXBzIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sIj5UdXJib0pQRUc8L2E+PC9kaXY+PC9kaXY+ICA8L2Rpdj4KKzwvZGl2PjwhLS1oZWFkZXItLT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKworPHA+TG9zc2xlc3MgdHJhbnNmb3JtLiAgCisgPGEgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KKworPHA+PGNvZGU+I2luY2x1ZGUgJmx0O3R1cmJvanBlZy5oJmd0OzwvY29kZT48L3A+Cis8dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InB1Yi1hdHRyaWJzIj48L2E+CitEYXRhIEZpZWxkczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmFjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+cjwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YTI1MjVhYWI0YmE2OTc4YTFjMjczZjc0ZmVmNTBlNDk4Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+b3A8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmEyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5PbmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+dHJhbnNmb3JtIG9wZXJhdGlvbnM8L2E+LiAgPGEgaHJlZj0iI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmEyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTphYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMwZTc0NjU1YmFhNDQwMjIwOWEyMWUxYWU0ODFjOGY2Ij5vcHRpb25zPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9mIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+dHJhbnNmb3JtIG9wdGlvbnM8L2E+LiAgPGEgaHJlZj0iI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmFjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTphNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnZvaWQgKiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTY4OGZlOGYxYThlY2MxMmE1MzhkOWU1NjFjZjMzOGUzIj5kYXRhPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+QXJiaXRyYXJ5IGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIDxhIGhyZWY9IiNhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQoKiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj5jdXN0b21GaWx0ZXI8L2E+ICkoc2hvcnQgKmNvZWZmcywgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4gYXJyYXlSZWdpb24sIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+IHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsIGludCB0cmFuc2Zvcm1JbmRleCwgc3RydWN0IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+ICp0cmFuc2Zvcm0pPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmE0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5BIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3IEpQRUcgaW1hZ2UuICA8YSBocmVmPSIjYTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6YTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT4KKzxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RGV0YWlsZWQgRGVzY3JpcHRpb248L2gyPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj48cD5Mb3NzbGVzcyB0cmFuc2Zvcm0uIDwvcD4KKzwvZGl2PjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPkZpZWxkIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQoKiB0anRyYW5zZm9ybTo6Y3VzdG9tRmlsdGVyKShzaG9ydCAqY29lZmZzLCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiBhcnJheVJlZ2lvbiwgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4gcGxhbmVSZWdpb24sIGludCBjb21wb25lbnRJbmRleCwgaW50IHRyYW5zZm9ybUluZGV4LCBzdHJ1Y3QgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT4gKnRyYW5zZm9ybSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIERDVCBjb2VmZmljaWVudHMgYWZ0ZXIgdGhleSBhcmUgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCBidXQgYmVmb3JlIHRoZXkgYXJlIHRyYW5zY29kZWQgdG8gYSBuZXcgSlBFRyBpbWFnZS4gPC9wPgorPHA+VGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBhcHBsaWVkIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLjwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb2VmZnM8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGFycmF5IG9mIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMuIChOT1RFOiB0aGlzIHBvaW50ZXIgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgb25jZSB0aGUgY2FsbGJhY2sgcmV0dXJucywgc28gYXBwbGljYXRpb25zIHdpc2hpbmcgdG8gaGFuZCBvZmYgdGhlIERDVCBjb2VmZmljaWVudHMgdG8gYW5vdGhlciBmdW5jdGlvbiBvciBsaWJyYXJ5IHNob3VsZCBtYWtlIGEgY29weSBvZiB0aGVtIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2FsbGJhY2suKTwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmFycmF5UmVnaW9uPC90ZD48dGQ+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIiB0aXRsZT0iQ3JvcHBpbmcgcmVnaW9uLiI+dGpyZWdpb248L2E+IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDxjb2RlPmNvZWZmczwvY29kZT4gYXMgd2VsbCBhcyBpdHMgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjb21wb25lbnQgcGxhbmUuIFR1cmJvSlBFRyBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSB0byBzcGxpdCBlYWNoIGNvbXBvbmVudCBwbGFuZSBpbnRvIG11bHRpcGxlIERDVCBjb2VmZmljaWVudCBhcnJheXMgYW5kIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggYXJyYXkuPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGxhbmVSZWdpb248L3RkPjx0ZD48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiIHRpdGxlPSJDcm9wcGluZyByZWdpb24uIj50anJlZ2lvbjwvYT4gc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudCBwbGFuZSB0byB3aGljaCA8Y29kZT5jb2VmZnM8L2NvZGU+IGJlbG9uZ3M8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb21wb25lbnRJRDwvdGQ+PHRkPklEIG51bWJlciBvZiB0aGUgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoIDxjb2RlPmNvZWZmczwvY29kZT4gYmVsb25ncyAoWSwgQ2IsIGFuZCBDciBoYXZlLCByZXNwZWN0aXZlbHksIElEJ3Mgb2YgMCwgMSwgYW5kIDIgaW4gdHlwaWNhbCBKUEVHIGltYWdlcy4pPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+dHJhbnNmb3JtSUQ8L3RkPjx0ZD5JRCBudW1iZXIgb2YgdGhlIHRyYW5zZm9ybWVkIGltYWdlIHRvIHdoaWNoIDxjb2RlPmNvZWZmczwvY29kZT4gYmVsb25ncy4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgaW5kZXggb2YgdGhlIHRyYW5zZm9ybSBpbiB0aGUgPGNvZGU+dHJhbnNmb3JtczwvY29kZT4gYXJyYXkgdGhhdCB3YXMgcGFzc2VkIHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Y2I4YWJmNGNjOTE4ODFlMDRhMDMyOWIyMjcwYmUyNSIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+LjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnRyYW5zZm9ybTwvdGQ+PHRkPmEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCIgdGl0bGU9Ikxvc3NsZXNzIHRyYW5zZm9ybS4iPnRqdHJhbnNmb3JtPC9hPiBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgdGhlIHBhcmFtZXRlcnMgYW5kL29yIGNyb3BwaW5nIHJlZ2lvbiBmb3IgdGhpcyB0cmFuc2Zvcm08L3RkPjwvdHI+CisgIDwvdGFibGU+CisgIDwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD4wIGlmIHRoZSBjYWxsYmFjayB3YXMgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIDwvZGQ+PC9kbD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+dm9pZCogdGp0cmFuc2Zvcm06OmRhdGE8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkFyYml0cmFyeSBkYXRhIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJhMjUyNWFhYjRiYTY5NzhhMWMyNzNmNzRmZWY1MGU0OTgiPjwvYT4KKzxkaXYgY2xhc3M9Im1lbWl0ZW0iPgorPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+aW50IHRqdHJhbnNmb3JtOjpvcDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+T25lIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjYiPnRyYW5zZm9ybSBvcGVyYXRpb25zPC9hPi4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImFjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGp0cmFuc2Zvcm06Om9wdGlvbnM8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPlRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvZiBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPnRyYW5zZm9ybSBvcHRpb25zPC9hPi4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImFjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiB0anRyYW5zZm9ybTo6cjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+Q3JvcHBpbmcgcmVnaW9uLiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8aHIvPlRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHN0cnVjdCB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBmaWxlOjx1bD4KKzxsaT50dXJib2pwZWcuaDwvbGk+Cis8L3VsPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zeW5jX29mZi5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zeW5jX29mZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0NDNmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3N5bmNfb2ZmLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zeW5jX29uLnBuZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3N5bmNfb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODMyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC9zeW5jX29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfYS5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfYS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3MjVjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3RhYl9hLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfYi5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiNGE4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3RhYl9iLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfaC5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfaC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1Y2I3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3RhYl9oLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfcy5wbmcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJfcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0NzhjOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3RhYl9zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJzLmNzcyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RvYy9odG1sL3RhYnMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjU3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb2MvaHRtbC90YWJzLmNzcwpAQCAtMCwwICsxLDYwIEBACisudGFicywgLnRhYnMyLCAudGFiczMgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgndGFiX2IucG5nJyk7CisgICAgd2lkdGg6IDEwMCU7CisgICAgei1pbmRleDogMTAxOworICAgIGZvbnQtc2l6ZTogMTNweDsKKyAgICBmb250LWZhbWlseTogJ0x1Y2lkYSBHcmFuZGUnLEdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKK30KKworLnRhYnMyIHsKKyAgICBmb250LXNpemU6IDEwcHg7Cit9CisudGFiczMgeworICAgIGZvbnQtc2l6ZTogOXB4OworfQorCisudGFibGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgZGlzcGxheTogdGFibGU7Cit9CisKKy50YWJsaXN0IGxpIHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgndGFiX2IucG5nJyk7CisgICAgbGluZS1oZWlnaHQ6IDM2cHg7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworLnRhYmxpc3QgYSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgcGFkZGluZzogMCAyMHB4OworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCd0YWJfcy5wbmcnKTsKKyAgICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodDsKKyAgICBjb2xvcjogIzI4M0E1RDsKKyAgICB0ZXh0LXNoYWRvdzogMHB4IDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisudGFiczMgLnRhYmxpc3QgYSB7CisgICAgcGFkZGluZzogMCAxMHB4OworfQorCisudGFibGlzdCBhOmhvdmVyIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3RhYl9oLnBuZycpOworICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgIGNvbG9yOiAjZmZmOworICAgIHRleHQtc2hhZG93OiAwcHggMXB4IDFweCByZ2JhKDAsIDAsIDAsIDEuMCk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisudGFibGlzdCBsaS5jdXJyZW50IGEgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgndGFiX2EucG5nJyk7CisgICAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgICAgY29sb3I6ICNmZmY7CisgICAgdGV4dC1zaGFkb3c6IDBweCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMS4wKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RveHlnZW4tZXh0cmEuY3NzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vZG94eWdlbi1leHRyYS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiZDRjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RveHlnZW4tZXh0cmEuY3NzCkBAIC0wLDAgKzEsMyBAQAorY29kZSB7CisJY29sb3I6ICM0NjY1QTI7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb3h5Z2VuLmNvbmZpZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2RveHlnZW4uY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODg0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9kb3h5Z2VuLmNvbmZpZwpAQCAtMCwwICsxLDE2IEBACitQUk9KRUNUX05BTUUgPSBUdXJib0pQRUcKK1BST0pFQ1RfTlVNQkVSID0gMi4wCitPVVRQVVRfRElSRUNUT1JZID0gZG9jLworVVNFX1dJTkRPV1NfRU5DT0RJTkcgPSBOTworT1BUSU1JWkVfT1VUUFVUX0ZPUl9DID0gWUVTCitXQVJOX05PX1BBUkFNRE9DID0gWUVTCitHRU5FUkFURV9MQVRFWCA9IE5PCitGSUxFX1BBVFRFUk5TID0gdHVyYm9qcGVnLmgKK0hJREVfVU5ET0NfTUVNQkVSUyA9IFlFUworVkVSQkFUSU1fSEVBREVSUyA9IE5PCitFWFRSQUNUX1NUQVRJQyA9IFlFUworSkFWQURPQ19BVVRPQlJJRUYgPSBZRVMKK01BWF9JTklUSUFMSVpFUl9MSU5FUyA9IDAKK0FMV0FZU19ERVRBSUxFRF9TRUMgPSBZRVMKK0hUTUxfVElNRVNUQU1QID0gTk8KK0hUTUxfRVhUUkFfU1RZTEVTSEVFVCA9IGRveHlnZW4tZXh0cmEuY3NzCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9leGFtcGxlLnR4dCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2V4YW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzExZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9leGFtcGxlLnR4dApAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqIGV4YW1wbGUudHh0CisgKgorICogVGhpcyBmaWxlIGlsbHVzdHJhdGVzIGhvdyB0byB1c2UgdGhlIElKRyBjb2RlIGFzIGEgc3Vicm91dGluZSBsaWJyYXJ5CisgKiB0byByZWFkIG9yIHdyaXRlIEpQRUcgaW1hZ2UgZmlsZXMuICBZb3Ugc2hvdWxkIGxvb2sgYXQgdGhpcyBjb2RlIGluCisgKiBjb25qdW5jdGlvbiB3aXRoIHRoZSBkb2N1bWVudGF0aW9uIGZpbGUgbGlianBlZy50eHQuCisgKgorICogVGhpcyBjb2RlIHdpbGwgbm90IGRvIGFueXRoaW5nIHVzZWZ1bCBhcy1pcywgYnV0IGl0IG1heSBiZSBoZWxwZnVsIGFzIGEKKyAqIHNrZWxldG9uIGZvciBjb25zdHJ1Y3Rpbmcgcm91dGluZXMgdGhhdCBjYWxsIHRoZSBKUEVHIGxpYnJhcnkuCisgKgorICogV2UgcHJlc2VudCB0aGVzZSByb3V0aW5lcyBpbiB0aGUgc2FtZSBjb2Rpbmcgc3R5bGUgdXNlZCBpbiB0aGUgSlBFRyBjb2RlCisgKiAoQU5TSSBmdW5jdGlvbiBkZWZpbml0aW9ucywgZXRjKTsgYnV0IHlvdSBhcmUgb2YgY291cnNlIGZyZWUgdG8gY29kZSB5b3VyCisgKiByb3V0aW5lcyBpbiBhIGRpZmZlcmVudCBzdHlsZSBpZiB5b3UgcHJlZmVyLgorICovCisKKy8qIFRoaXMgZXhhbXBsZSB3YXMgcGFydCBvZiB0aGUgb3JpZ2luYWwgbGlianBlZyBkb2N1bWVudGF0aW9uIGFuZCBoYXMgYmVlbgorICogdW5jaGFuZ2VkIHNpbmNlIDE5OTQuICBJdCBpcywgYXMgZGVzY3JpYmVkIGluIGxpYmpwZWcudHh0LCAiaGVhdmlseQorICogY29tbWVudGVkIHNrZWxldG9uIGNvZGUgZm9yIGNhbGxpbmcgdGhlIEpQRUcgbGlicmFyeS4iICBJdCBpcyBub3QgbWVhbnQgdG8KKyAqIGJlIGNvbXBpbGVkIGFzIGEgc3RhbmRhbG9uZSBwcm9ncmFtLCBzaW5jZSBpdCBoYXMgbm8gbWFpbigpIGZ1bmN0aW9uIGFuZAorICogZG9lcyBub3QgY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIGEgcmVhbCBpbWFnZSBidWZmZXIgKGNvcm9sbGFyeToKKyAqIHB1dF9zY2FubGluZV9zb21lcGxhY2UoKSBpcyBub3QgYSByZWFsIGZ1bmN0aW9uLikgIEZpcnN0LXRpbWUgdXNlcnMgb2YKKyAqIGxpYmpwZWctdHVyYm8gd291bGQgYmUgYmV0dGVyIHNlcnZlZCBieSBsb29raW5nIGF0IHRqZXhhbXBsZS5jLCB3aGljaCB1c2VzCisgKiB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgVHVyYm9KUEVHIEFQSSwgb3IgYXQgY2pwZWcuYyBhbmQgZGpwZWcuYywgd2hpY2ggYXJlCisgKiBleGFtcGxlcyBvZiBsaWJqcGVnIEFQSSB1c2FnZSB0aGF0IGNhbiBiZSAoYW5kIGFyZSkgY29tcGlsZWQgaW50byBzdGFuZGFsb25lCisgKiBwcm9ncmFtcy4gIE5vdGUgdGhhdCB0aGlzIGV4YW1wbGUsIGFzIHdlbGwgYXMgdGhlIGV4YW1wbGVzIGluIGNqcGVnLmMgYW5kCisgKiBkanBlZy5jLCBpbnRlcmxlYXZlIGRpc2sgSS9PIHdpdGggSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uLCBzbyBub25lIG9mCisgKiB0aGVzZSBleGFtcGxlcyBpcyBzdWl0YWJsZSBmb3IgYmVuY2htYXJraW5nIHB1cnBvc2VzLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogSW5jbHVkZSBmaWxlIGZvciB1c2VycyBvZiBKUEVHIGxpYnJhcnkuCisgKiBZb3Ugd2lsbCBuZWVkIHRvIGhhdmUgaW5jbHVkZWQgc3lzdGVtIGhlYWRlcnMgdGhhdCBkZWZpbmUgYXQgbGVhc3QKKyAqIHRoZSB0eXBlZGVmcyBGSUxFIGFuZCBzaXplX3QgYmVmb3JlIHlvdSBjYW4gaW5jbHVkZSBqcGVnbGliLmguCisgKiAoc3RkaW8uaCBpcyBzdWZmaWNpZW50IG9uIEFOU0ktY29uZm9ybWluZyBzeXN0ZW1zLikKKyAqIFlvdSBtYXkgYWxzbyB3aXNoIHRvIGluY2x1ZGUgImplcnJvci5oIi4KKyAqLworCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisvKgorICogPHNldGptcC5oPiBpcyB1c2VkIGZvciB0aGUgb3B0aW9uYWwgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIHNob3duIGluCisgKiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGV4YW1wbGUuCisgKi8KKworI2luY2x1ZGUgPHNldGptcC5oPgorCisKKworLyoqKioqKioqKioqKioqKioqKioqIEpQRUcgQ09NUFJFU1NJT04gU0FNUExFIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGhhbGYgb2YgdGhlIGV4YW1wbGUgc2hvd3MgaG93IHRvIGZlZWQgZGF0YSBpbnRvIHRoZSBKUEVHIGNvbXByZXNzb3IuCisgKiBXZSBwcmVzZW50IGEgbWluaW1hbCB2ZXJzaW9uIHRoYXQgZG9lcyBub3Qgd29ycnkgYWJvdXQgcmVmaW5lbWVudHMgc3VjaAorICogYXMgZXJyb3IgcmVjb3ZlcnkgKHRoZSBKUEVHIGNvZGUgd2lsbCBqdXN0IGV4aXQoKSBpZiBpdCBnZXRzIGFuIGVycm9yKS4KKyAqLworCisKKy8qCisgKiBJTUFHRSBEQVRBIEZPUk1BVFM6CisgKgorICogVGhlIHN0YW5kYXJkIGlucHV0IGltYWdlIGZvcm1hdCBpcyBhIHJlY3Rhbmd1bGFyIGFycmF5IG9mIHBpeGVscywgd2l0aAorICogZWFjaCBwaXhlbCBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mICJjb21wb25lbnQiIHZhbHVlcyAoY29sb3IgY2hhbm5lbHMpLgorICogRWFjaCBwaXhlbCByb3cgaXMgYW4gYXJyYXkgb2YgSlNBTVBMRXMgKHdoaWNoIHR5cGljYWxseSBhcmUgdW5zaWduZWQgY2hhcnMpLgorICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggY29sb3IgZGF0YSwgdGhlbiB0aGUgY29sb3IgdmFsdWVzIGZvciBlYWNoIHBpeGVsCisgKiBtdXN0IGJlIGFkamFjZW50IGluIHRoZSByb3c7IGZvciBleGFtcGxlLCBSLEcsQixSLEcsQixSLEcsQiwuLi4gZm9yIDI0LWJpdAorICogUkdCIGNvbG9yLgorICoKKyAqIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIGFzc3VtZSB0aGF0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgd2F5CisgKiBvdXIgYXBwbGljYXRpb24gaGFzIHN0b3JlZCB0aGUgaW1hZ2UgaW4gbWVtb3J5LCBzbyB3ZSBjYW4ganVzdCBwYXNzIGEKKyAqIHBvaW50ZXIgdG8gb3VyIGltYWdlIGJ1ZmZlci4gIEluIHBhcnRpY3VsYXIsIGxldCdzIHNheSB0aGF0IHRoZSBpbWFnZSBpcworICogUkdCIGNvbG9yIGFuZCBpcyBkZXNjcmliZWQgYnk6CisgKi8KKworZXh0ZXJuIEpTQU1QTEUgKmltYWdlX2J1ZmZlcjsgICAvKiBQb2ludHMgdG8gbGFyZ2UgYXJyYXkgb2YgUixHLEItb3JkZXIgZGF0YSAqLworZXh0ZXJuIGludCBpbWFnZV9oZWlnaHQ7ICAgICAgICAvKiBOdW1iZXIgb2Ygcm93cyBpbiBpbWFnZSAqLworZXh0ZXJuIGludCBpbWFnZV93aWR0aDsgICAgICAgICAvKiBOdW1iZXIgb2YgY29sdW1ucyBpbiBpbWFnZSAqLworCisKKy8qCisgKiBTYW1wbGUgcm91dGluZSBmb3IgSlBFRyBjb21wcmVzc2lvbi4gIFdlIGFzc3VtZSB0aGF0IHRoZSB0YXJnZXQgZmlsZSBuYW1lCisgKiBhbmQgYSBjb21wcmVzc2lvbiBxdWFsaXR5IGZhY3RvciBhcmUgcGFzc2VkIGluLgorICovCisKK0dMT0JBTCh2b2lkKQord3JpdGVfSlBFR19maWxlKGNoYXIgKmZpbGVuYW1lLCBpbnQgcXVhbGl0eSkKK3sKKyAgLyogVGhpcyBzdHJ1Y3QgY29udGFpbnMgdGhlIEpQRUcgY29tcHJlc3Npb24gcGFyYW1ldGVycyBhbmQgcG9pbnRlcnMgdG8KKyAgICogd29ya2luZyBzcGFjZSAod2hpY2ggaXMgYWxsb2NhdGVkIGFzIG5lZWRlZCBieSB0aGUgSlBFRyBsaWJyYXJ5KS4KKyAgICogSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBzZXZlcmFsIHN1Y2ggc3RydWN0dXJlcywgcmVwcmVzZW50aW5nIG11bHRpcGxlCisgICAqIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcHJvY2Vzc2VzLCBpbiBleGlzdGVuY2UgYXQgb25jZS4gIFdlIHJlZmVyCisgICAqIHRvIGFueSBvbmUgc3RydWN0IChhbmQgaXRzIGFzc29jaWF0ZWQgd29ya2luZyBkYXRhKSBhcyBhICJKUEVHIG9iamVjdCIuCisgICAqLworICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87CisgIC8qIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgYSBKUEVHIGVycm9yIGhhbmRsZXIuICBJdCBpcyBkZWNsYXJlZCBzZXBhcmF0ZWx5CisgICAqIGJlY2F1c2UgYXBwbGljYXRpb25zIG9mdGVuIHdhbnQgdG8gc3VwcGx5IGEgc3BlY2lhbGl6ZWQgZXJyb3IgaGFuZGxlcgorICAgKiAoc2VlIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGlzIGZpbGUgZm9yIGFuIGV4YW1wbGUpLiAgQnV0IGhlcmUgd2UganVzdAorICAgKiB0YWtlIHRoZSBlYXN5IHdheSBvdXQgYW5kIHVzZSB0aGUgc3RhbmRhcmQgZXJyb3IgaGFuZGxlciwgd2hpY2ggd2lsbAorICAgKiBwcmludCBhIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBjYWxsIGV4aXQoKSBpZiBjb21wcmVzc2lvbiBmYWlscy4KKyAgICogTm90ZSB0aGF0IHRoaXMgc3RydWN0IG11c3QgbGl2ZSBhcyBsb25nIGFzIHRoZSBtYWluIEpQRUcgcGFyYW1ldGVyCisgICAqIHN0cnVjdCwgdG8gYXZvaWQgZGFuZ2xpbmctcG9pbnRlciBwcm9ibGVtcy4KKyAgICovCisgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBqZXJyOworICAvKiBNb3JlIHN0dWZmICovCisgIEZJTEUgKm91dGZpbGU7ICAgICAgICAgICAgICAgIC8qIHRhcmdldCBmaWxlICovCisgIEpTQU1QUk9XIHJvd19wb2ludGVyWzFdOyAgICAgIC8qIHBvaW50ZXIgdG8gSlNBTVBMRSByb3dbc10gKi8KKyAgaW50IHJvd19zdHJpZGU7ICAgICAgICAgICAgICAgLyogcGh5c2ljYWwgcm93IHdpZHRoIGluIGltYWdlIGJ1ZmZlciAqLworCisgIC8qIFN0ZXAgMTogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QgKi8KKworICAvKiBXZSBoYXZlIHRvIHNldCB1cCB0aGUgZXJyb3IgaGFuZGxlciBmaXJzdCwgaW4gY2FzZSB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICogc3RlcCBmYWlscy4gIChVbmxpa2VseSwgYnV0IGl0IGNvdWxkIGhhcHBlbiBpZiB5b3UgYXJlIG91dCBvZiBtZW1vcnkuKQorICAgKiBUaGlzIHJvdXRpbmUgZmlsbHMgaW4gdGhlIGNvbnRlbnRzIG9mIHN0cnVjdCBqZXJyLCBhbmQgcmV0dXJucyBqZXJyJ3MKKyAgICogYWRkcmVzcyB3aGljaCB3ZSBwbGFjZSBpbnRvIHRoZSBsaW5rIGZpZWxkIGluIGNpbmZvLgorICAgKi8KKyAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmplcnIpOworICAvKiBOb3cgd2UgY2FuIGluaXRpYWxpemUgdGhlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0LiAqLworICBqcGVnX2NyZWF0ZV9jb21wcmVzcygmY2luZm8pOworCisgIC8qIFN0ZXAgMjogc3BlY2lmeSBkYXRhIGRlc3RpbmF0aW9uIChlZywgYSBmaWxlKSAqLworICAvKiBOb3RlOiBzdGVwcyAyIGFuZCAzIGNhbiBiZSBkb25lIGluIGVpdGhlciBvcmRlci4gKi8KKworICAvKiBIZXJlIHdlIHVzZSB0aGUgbGlicmFyeS1zdXBwbGllZCBjb2RlIHRvIHNlbmQgY29tcHJlc3NlZCBkYXRhIHRvIGEKKyAgICogc3RkaW8gc3RyZWFtLiAgWW91IGNhbiBhbHNvIHdyaXRlIHlvdXIgb3duIGNvZGUgdG8gZG8gc29tZXRoaW5nIGVsc2UuCisgICAqIFZFUlkgSU1QT1JUQU5UOiB1c2UgImIiIG9wdGlvbiB0byBmb3BlbigpIGlmIHlvdSBhcmUgb24gYSBtYWNoaW5lIHRoYXQKKyAgICogcmVxdWlyZXMgaXQgaW4gb3JkZXIgdG8gd3JpdGUgYmluYXJ5IGZpbGVzLgorICAgKi8KKyAgaWYgKChvdXRmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3YiIpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBvcGVuICVzXG4iLCBmaWxlbmFtZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICBqcGVnX3N0ZGlvX2Rlc3QoJmNpbmZvLCBvdXRmaWxlKTsKKworICAvKiBTdGVwIDM6IHNldCBwYXJhbWV0ZXJzIGZvciBjb21wcmVzc2lvbiAqLworCisgIC8qIEZpcnN0IHdlIHN1cHBseSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnB1dCBpbWFnZS4KKyAgICogRm91ciBmaWVsZHMgb2YgdGhlIGNpbmZvIHN0cnVjdCBtdXN0IGJlIGZpbGxlZCBpbjoKKyAgICovCisgIGNpbmZvLmltYWdlX3dpZHRoID0gaW1hZ2Vfd2lkdGg7ICAgICAgLyogaW1hZ2Ugd2lkdGggYW5kIGhlaWdodCwgaW4gcGl4ZWxzICovCisgIGNpbmZvLmltYWdlX2hlaWdodCA9IGltYWdlX2hlaWdodDsKKyAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IDM7ICAgICAgICAgICAvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgcGVyIHBpeGVsICovCisgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgICAgICAgLyogY29sb3JzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLworICAvKiBOb3cgdXNlIHRoZSBsaWJyYXJ5J3Mgcm91dGluZSB0byBzZXQgZGVmYXVsdCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLgorICAgKiAoWW91IG11c3Qgc2V0IGF0IGxlYXN0IGNpbmZvLmluX2NvbG9yX3NwYWNlIGJlZm9yZSBjYWxsaW5nIHRoaXMsCisgICAqIHNpbmNlIHRoZSBkZWZhdWx0cyBkZXBlbmQgb24gdGhlIHNvdXJjZSBjb2xvciBzcGFjZS4pCisgICAqLworICBqcGVnX3NldF9kZWZhdWx0cygmY2luZm8pOworICAvKiBOb3cgeW91IGNhbiBzZXQgYW55IG5vbi1kZWZhdWx0IHBhcmFtZXRlcnMgeW91IHdpc2ggdG8uCisgICAqIEhlcmUgd2UganVzdCBpbGx1c3RyYXRlIHRoZSB1c2Ugb2YgcXVhbGl0eSAocXVhbnRpemF0aW9uIHRhYmxlKSBzY2FsaW5nOgorICAgKi8KKyAganBlZ19zZXRfcXVhbGl0eSgmY2luZm8sIHF1YWxpdHksIFRSVUUgLyogbGltaXQgdG8gYmFzZWxpbmUtSlBFRyB2YWx1ZXMgKi8pOworCisgIC8qIFN0ZXAgNDogU3RhcnQgY29tcHJlc3NvciAqLworCisgIC8qIFRSVUUgZW5zdXJlcyB0aGF0IHdlIHdpbGwgd3JpdGUgYSBjb21wbGV0ZSBpbnRlcmNoYW5nZS1KUEVHIGZpbGUuCisgICAqIFBhc3MgVFJVRSB1bmxlc3MgeW91IGFyZSB2ZXJ5IHN1cmUgb2Ygd2hhdCB5b3UncmUgZG9pbmcuCisgICAqLworICBqcGVnX3N0YXJ0X2NvbXByZXNzKCZjaW5mbywgVFJVRSk7CisKKyAgLyogU3RlcCA1OiB3aGlsZSAoc2NhbiBsaW5lcyByZW1haW4gdG8gYmUgd3JpdHRlbikgKi8KKyAgLyogICAgICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKC4uLik7ICovCisKKyAgLyogSGVyZSB3ZSB1c2UgdGhlIGxpYnJhcnkncyBzdGF0ZSB2YXJpYWJsZSBjaW5mby5uZXh0X3NjYW5saW5lIGFzIHRoZQorICAgKiBsb29wIGNvdW50ZXIsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHRyYWNrIG91cnNlbHZlcy4KKyAgICogVG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCB3ZSBwYXNzIG9uZSBzY2FubGluZSBwZXIgY2FsbDsgeW91IGNhbiBwYXNzCisgICAqIG1vcmUgaWYgeW91IHdpc2gsIHRob3VnaC4KKyAgICovCisgIHJvd19zdHJpZGUgPSBpbWFnZV93aWR0aCAqIDM7IC8qIEpTQU1QTEVzIHBlciByb3cgaW4gaW1hZ2VfYnVmZmVyICovCisKKyAgd2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKKyAgICAvKiBqcGVnX3dyaXRlX3NjYW5saW5lcyBleHBlY3RzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHNjYW5saW5lcy4KKyAgICAgKiBIZXJlIHRoZSBhcnJheSBpcyBvbmx5IG9uZSBlbGVtZW50IGxvbmcsIGJ1dCB5b3UgY291bGQgcGFzcworICAgICAqIG1vcmUgdGhhbiBvbmUgc2NhbmxpbmUgYXQgYSB0aW1lIGlmIHRoYXQncyBtb3JlIGNvbnZlbmllbnQuCisgICAgICovCisgICAgcm93X3BvaW50ZXJbMF0gPSAmaW1hZ2VfYnVmZmVyW2NpbmZvLm5leHRfc2NhbmxpbmUgKiByb3dfc3RyaWRlXTsKKyAgICAodm9pZClqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8sIHJvd19wb2ludGVyLCAxKTsKKyAgfQorCisgIC8qIFN0ZXAgNjogRmluaXNoIGNvbXByZXNzaW9uICovCisKKyAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsKKyAgLyogQWZ0ZXIgZmluaXNoX2NvbXByZXNzLCB3ZSBjYW4gY2xvc2UgdGhlIG91dHB1dCBmaWxlLiAqLworICBmY2xvc2Uob3V0ZmlsZSk7CisKKyAgLyogU3RlcCA3OiByZWxlYXNlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0ICovCisKKyAgLyogVGhpcyBpcyBhbiBpbXBvcnRhbnQgc3RlcCBzaW5jZSBpdCB3aWxsIHJlbGVhc2UgYSBnb29kIGRlYWwgb2YgbWVtb3J5LiAqLworICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKKworICAvKiBBbmQgd2UncmUgZG9uZSEgKi8KK30KKworCisvKgorICogU09NRSBGSU5FIFBPSU5UUzoKKyAqCisgKiBJbiB0aGUgYWJvdmUgbG9vcCwgd2UgaWdub3JlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGpwZWdfd3JpdGVfc2NhbmxpbmVzLAorICogd2hpY2ggaXMgdGhlIG51bWJlciBvZiBzY2FubGluZXMgYWN0dWFsbHkgd3JpdHRlbi4gIFdlIGNvdWxkIGdldCBhd2F5CisgKiB3aXRoIHRoaXMgYmVjYXVzZSB3ZSB3ZXJlIG9ubHkgcmVseWluZyBvbiB0aGUgdmFsdWUgb2YgY2luZm8ubmV4dF9zY2FubGluZSwKKyAqIHdoaWNoIHdpbGwgYmUgaW5jcmVtZW50ZWQgY29ycmVjdGx5LiAgSWYgeW91IG1haW50YWluIGFkZGl0aW9uYWwgbG9vcAorICogdmFyaWFibGVzIHRoZW4geW91IHNob3VsZCBiZSBjYXJlZnVsIHRvIGluY3JlbWVudCB0aGVtIHByb3Blcmx5LgorICogQWN0dWFsbHksIGZvciBvdXRwdXQgdG8gYSBzdGRpbyBzdHJlYW0geW91IG5lZWRuJ3Qgd29ycnksIGJlY2F1c2UKKyAqIHRoZW4ganBlZ193cml0ZV9zY2FubGluZXMgd2lsbCB3cml0ZSBhbGwgdGhlIGxpbmVzIHBhc3NlZCAob3IgZWxzZSBleGl0CisgKiB3aXRoIGEgZmF0YWwgZXJyb3IpLiAgUGFydGlhbCB3cml0ZXMgY2FuIG9ubHkgb2NjdXIgaWYgeW91IHVzZSBhIGRhdGEKKyAqIGRlc3RpbmF0aW9uIG1vZHVsZSB0aGF0IGNhbiBkZW1hbmQgc3VzcGVuc2lvbiBvZiB0aGUgY29tcHJlc3Nvci4KKyAqIChJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoYXQncyBmb3IsIHlvdSBkb24ndCBuZWVkIGl0LikKKyAqCisgKiBJZiB0aGUgY29tcHJlc3NvciByZXF1aXJlcyBmdWxsLWltYWdlIGJ1ZmZlcnMgKGZvciBlbnRyb3B5LWNvZGluZworICogb3B0aW1pemF0aW9uIG9yIGEgbXVsdGktc2NhbiBKUEVHIGZpbGUpLCBpdCB3aWxsIGNyZWF0ZSB0ZW1wb3JhcnkKKyAqIGZpbGVzIGZvciBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgZml0IHdpdGhpbiB0aGUgbWF4aW11bS1tZW1vcnkgc2V0dGluZy4KKyAqIChOb3RlIHRoYXQgdGVtcCBmaWxlcyBhcmUgTk9UIG5lZWRlZCBpZiB5b3UgdXNlIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuKQorICogT24gc29tZSBzeXN0ZW1zIHlvdSBtYXkgbmVlZCB0byBzZXQgdXAgYSBzaWduYWwgaGFuZGxlciB0byBlbnN1cmUgdGhhdAorICogdGVtcG9yYXJ5IGZpbGVzIGFyZSBkZWxldGVkIGlmIHRoZSBwcm9ncmFtIGlzIGludGVycnVwdGVkLiAgU2VlIGxpYmpwZWcudHh0LgorICoKKyAqIFNjYW5saW5lcyBNVVNUIGJlIHN1cHBsaWVkIGluIHRvcC10by1ib3R0b20gb3JkZXIgaWYgeW91IHdhbnQgeW91ciBKUEVHCisgKiBmaWxlcyB0byBiZSBjb21wYXRpYmxlIHdpdGggZXZlcnlvbmUgZWxzZSdzLiAgSWYgeW91IGNhbm5vdCByZWFkaWx5IHJlYWQKKyAqIHlvdXIgZGF0YSBpbiB0aGF0IG9yZGVyLCB5b3UnbGwgbmVlZCBhbiBpbnRlcm1lZGlhdGUgYXJyYXkgdG8gaG9sZCB0aGUKKyAqIGltYWdlLiAgU2VlIHJkdGFyZ2EuYyBvciByZGJtcC5jIGZvciBleGFtcGxlcyBvZiBoYW5kbGluZyBib3R0b20tdG8tdG9wCisgKiBzb3VyY2UgZGF0YSB1c2luZyB0aGUgSlBFRyBjb2RlJ3MgaW50ZXJuYWwgdmlydHVhbC1hcnJheSBtZWNoYW5pc21zLgorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKiogSlBFRyBERUNPTVBSRVNTSU9OIFNBTVBMRSBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBoYWxmIG9mIHRoZSBleGFtcGxlIHNob3dzIGhvdyB0byByZWFkIGRhdGEgZnJvbSB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKiBJdCdzIGEgYml0IG1vcmUgcmVmaW5lZCB0aGFuIHRoZSBhYm92ZSwgaW4gdGhhdCB3ZSBzaG93OgorICogICAoYSkgaG93IHRvIG1vZGlmeSB0aGUgSlBFRyBsaWJyYXJ5J3Mgc3RhbmRhcmQgZXJyb3ItcmVwb3J0aW5nIGJlaGF2aW9yOworICogICAoYikgaG93IHRvIGFsbG9jYXRlIHdvcmtzcGFjZSB1c2luZyB0aGUgbGlicmFyeSdzIG1lbW9yeSBtYW5hZ2VyLgorICoKKyAqIEp1c3QgdG8gbWFrZSB0aGlzIGV4YW1wbGUgYSBsaXR0bGUgZGlmZmVyZW50IGZyb20gdGhlIGZpcnN0IG9uZSwgd2UnbGwKKyAqIGFzc3VtZSB0aGF0IHdlIGRvIG5vdCBpbnRlbmQgdG8gcHV0IHRoZSB3aG9sZSBpbWFnZSBpbnRvIGFuIGluLW1lbW9yeQorICogYnVmZmVyLCBidXQgdG8gc2VuZCBpdCBsaW5lLWJ5LWxpbmUgc29tZXBsYWNlIGVsc2UuICBXZSBuZWVkIGEgb25lLQorICogc2NhbmxpbmUtaGlnaCBKU0FNUExFIGFycmF5IGFzIGEgd29yayBidWZmZXIsIGFuZCB3ZSB3aWxsIGxldCB0aGUgSlBFRworICogbWVtb3J5IG1hbmFnZXIgYWxsb2NhdGUgaXQgZm9yIHVzLiAgVGhpcyBhcHByb2FjaCBpcyBhY3R1YWxseSBxdWl0ZSB1c2VmdWwKKyAqIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byByZW1lbWJlciB0byBkZWFsbG9jYXRlIHRoZSBidWZmZXIgc2VwYXJhdGVseTogaXQKKyAqIHdpbGwgZ28gYXdheSBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIEpQRUcgb2JqZWN0IGlzIGNsZWFuZWQgdXAuCisgKi8KKworCisvKgorICogRVJST1IgSEFORExJTkc6CisgKgorICogVGhlIEpQRUcgbGlicmFyeSdzIHN0YW5kYXJkIGVycm9yIGhhbmRsZXIgKGplcnJvci5jKSBpcyBkaXZpZGVkIGludG8KKyAqIHNldmVyYWwgIm1ldGhvZHMiIHdoaWNoIHlvdSBjYW4gb3ZlcnJpZGUgaW5kaXZpZHVhbGx5LiAgVGhpcyBsZXRzIHlvdQorICogYWRqdXN0IHRoZSBiZWhhdmlvciB3aXRob3V0IGR1cGxpY2F0aW5nIGEgbG90IG9mIGNvZGUsIHdoaWNoIHlvdSBtaWdodAorICogaGF2ZSB0byB1cGRhdGUgd2l0aCBlYWNoIGZ1dHVyZSByZWxlYXNlLgorICoKKyAqIE91ciBleGFtcGxlIGhlcmUgc2hvd3MgaG93IHRvIG92ZXJyaWRlIHRoZSAiZXJyb3JfZXhpdCIgbWV0aG9kIHNvIHRoYXQKKyAqIGNvbnRyb2wgaXMgcmV0dXJuZWQgdG8gdGhlIGxpYnJhcnkncyBjYWxsZXIgd2hlbiBhIGZhdGFsIGVycm9yIG9jY3VycywKKyAqIHJhdGhlciB0aGFuIGNhbGxpbmcgZXhpdCgpIGFzIHRoZSBzdGFuZGFyZCBlcnJvcl9leGl0IG1ldGhvZCBkb2VzLgorICoKKyAqIFdlIHVzZSBDJ3Mgc2V0am1wL2xvbmdqbXAgZmFjaWxpdHkgdG8gcmV0dXJuIGNvbnRyb2wuICBUaGlzIG1lYW5zIHRoYXQgdGhlCisgKiByb3V0aW5lIHdoaWNoIGNhbGxzIHRoZSBKUEVHIGxpYnJhcnkgbXVzdCBmaXJzdCBleGVjdXRlIGEgc2V0am1wKCkgY2FsbCB0bworICogZXN0YWJsaXNoIHRoZSByZXR1cm4gcG9pbnQuICBXZSB3YW50IHRoZSByZXBsYWNlbWVudCBlcnJvcl9leGl0IHRvIGRvIGEKKyAqIGxvbmdqbXAoKS4gIEJ1dCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHNldGptcCBidWZmZXIgYWNjZXNzaWJsZSB0byB0aGUKKyAqIGVycm9yX2V4aXQgcm91dGluZS4gIFRvIGRvIHRoaXMsIHdlIG1ha2UgYSBwcml2YXRlIGV4dGVuc2lvbiBvZiB0aGUKKyAqIHN0YW5kYXJkIEpQRUcgZXJyb3IgaGFuZGxlciBvYmplY3QuICAoSWYgd2Ugd2VyZSB1c2luZyBDKyssIHdlJ2Qgc2F5IHdlCisgKiB3ZXJlIG1ha2luZyBhIHN1YmNsYXNzIG9mIHRoZSByZWd1bGFyIGVycm9yIGhhbmRsZXIuKQorICoKKyAqIEhlcmUncyB0aGUgZXh0ZW5kZWQgZXJyb3IgaGFuZGxlciBzdHJ1Y3Q6CisgKi8KKworc3RydWN0IG15X2Vycm9yX21nciB7CisgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBwdWI7ICAgIC8qICJwdWJsaWMiIGZpZWxkcyAqLworCisgIGptcF9idWYgc2V0am1wX2J1ZmZlcjsgICAgICAgIC8qIGZvciByZXR1cm4gdG8gY2FsbGVyICovCit9OworCit0eXBlZGVmIHN0cnVjdCBteV9lcnJvcl9tZ3IgKm15X2Vycm9yX3B0cjsKKworLyoKKyAqIEhlcmUncyB0aGUgcm91dGluZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3RhbmRhcmQgZXJyb3JfZXhpdCBtZXRob2Q6CisgKi8KKworTUVUSE9EREVGKHZvaWQpCitteV9lcnJvcl9leGl0KGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgLyogY2luZm8tPmVyciByZWFsbHkgcG9pbnRzIHRvIGEgbXlfZXJyb3JfbWdyIHN0cnVjdCwgc28gY29lcmNlIHBvaW50ZXIgKi8KKyAgbXlfZXJyb3JfcHRyIG15ZXJyID0gKG15X2Vycm9yX3B0ciljaW5mby0+ZXJyOworCisgIC8qIEFsd2F5cyBkaXNwbGF5IHRoZSBtZXNzYWdlLiAqLworICAvKiBXZSBjb3VsZCBwb3N0cG9uZSB0aGlzIHVudGlsIGFmdGVyIHJldHVybmluZywgaWYgd2UgY2hvc2UuICovCisgICgqY2luZm8tPmVyci0+b3V0cHV0X21lc3NhZ2UpIChjaW5mbyk7CisKKyAgLyogUmV0dXJuIGNvbnRyb2wgdG8gdGhlIHNldGptcCBwb2ludCAqLworICBsb25nam1wKG15ZXJyLT5zZXRqbXBfYnVmZmVyLCAxKTsKK30KKworCisvKgorICogU2FtcGxlIHJvdXRpbmUgZm9yIEpQRUcgZGVjb21wcmVzc2lvbi4gIFdlIGFzc3VtZSB0aGF0IHRoZSBzb3VyY2UgZmlsZSBuYW1lCisgKiBpcyBwYXNzZWQgaW4uICBXZSB3YW50IHRvIHJldHVybiAxIG9uIHN1Y2Nlc3MsIDAgb24gZXJyb3IuCisgKi8KKworCitHTE9CQUwoaW50KQorcmVhZF9KUEVHX2ZpbGUoY2hhciAqZmlsZW5hbWUpCit7CisgIC8qIFRoaXMgc3RydWN0IGNvbnRhaW5zIHRoZSBKUEVHIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyBhbmQgcG9pbnRlcnMgdG8KKyAgICogd29ya2luZyBzcGFjZSAod2hpY2ggaXMgYWxsb2NhdGVkIGFzIG5lZWRlZCBieSB0aGUgSlBFRyBsaWJyYXJ5KS4KKyAgICovCisgIHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IGNpbmZvOworICAvKiBXZSB1c2Ugb3VyIHByaXZhdGUgZXh0ZW5zaW9uIEpQRUcgZXJyb3IgaGFuZGxlci4KKyAgICogTm90ZSB0aGF0IHRoaXMgc3RydWN0IG11c3QgbGl2ZSBhcyBsb25nIGFzIHRoZSBtYWluIEpQRUcgcGFyYW1ldGVyCisgICAqIHN0cnVjdCwgdG8gYXZvaWQgZGFuZ2xpbmctcG9pbnRlciBwcm9ibGVtcy4KKyAgICovCisgIHN0cnVjdCBteV9lcnJvcl9tZ3IgamVycjsKKyAgLyogTW9yZSBzdHVmZiAqLworICBGSUxFICppbmZpbGU7ICAgICAgICAgICAgICAgICAvKiBzb3VyY2UgZmlsZSAqLworICBKU0FNUEFSUkFZIGJ1ZmZlcjsgICAgICAgICAgICAvKiBPdXRwdXQgcm93IGJ1ZmZlciAqLworICBpbnQgcm93X3N0cmlkZTsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCByb3cgd2lkdGggaW4gb3V0cHV0IGJ1ZmZlciAqLworCisgIC8qIEluIHRoaXMgZXhhbXBsZSB3ZSB3YW50IHRvIG9wZW4gdGhlIGlucHV0IGZpbGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsCisgICAqIHNvIHRoYXQgdGhlIHNldGptcCgpIGVycm9yIHJlY292ZXJ5IGJlbG93IGNhbiBhc3N1bWUgdGhlIGZpbGUgaXMgb3Blbi4KKyAgICogVkVSWSBJTVBPUlRBTlQ6IHVzZSAiYiIgb3B0aW9uIHRvIGZvcGVuKCkgaWYgeW91IGFyZSBvbiBhIG1hY2hpbmUgdGhhdAorICAgKiByZXF1aXJlcyBpdCBpbiBvcmRlciB0byByZWFkIGJpbmFyeSBmaWxlcy4KKyAgICovCisKKyAgaWYgKChpbmZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIFN0ZXAgMTogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdCAqLworCisgIC8qIFdlIHNldCB1cCB0aGUgbm9ybWFsIEpQRUcgZXJyb3Igcm91dGluZXMsIHRoZW4gb3ZlcnJpZGUgZXJyb3JfZXhpdC4gKi8KKyAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmplcnIucHViKTsKKyAgamVyci5wdWIuZXJyb3JfZXhpdCA9IG15X2Vycm9yX2V4aXQ7CisgIC8qIEVzdGFibGlzaCB0aGUgc2V0am1wIHJldHVybiBjb250ZXh0IGZvciBteV9lcnJvcl9leGl0IHRvIHVzZS4gKi8KKyAgaWYgKHNldGptcChqZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLgorICAgICAqIFdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIEpQRUcgb2JqZWN0LCBjbG9zZSB0aGUgaW5wdXQgZmlsZSwgYW5kIHJldHVybi4KKyAgICAgKi8KKyAgICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOworICAgIGZjbG9zZShpbmZpbGUpOworICAgIHJldHVybiAwOworICB9CisgIC8qIE5vdyB3ZSBjYW4gaW5pdGlhbGl6ZSB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdC4gKi8KKyAganBlZ19jcmVhdGVfZGVjb21wcmVzcygmY2luZm8pOworCisgIC8qIFN0ZXAgMjogc3BlY2lmeSBkYXRhIHNvdXJjZSAoZWcsIGEgZmlsZSkgKi8KKworICBqcGVnX3N0ZGlvX3NyYygmY2luZm8sIGluZmlsZSk7CisKKyAgLyogU3RlcCAzOiByZWFkIGZpbGUgcGFyYW1ldGVycyB3aXRoIGpwZWdfcmVhZF9oZWFkZXIoKSAqLworCisgICh2b2lkKWpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsKKyAgLyogV2UgY2FuIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20ganBlZ19yZWFkX2hlYWRlciBzaW5jZQorICAgKiAgIChhKSBzdXNwZW5zaW9uIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHRoZSBzdGRpbyBkYXRhIHNvdXJjZSwgYW5kCisgICAqICAgKGIpIHdlIHBhc3NlZCBUUlVFIHRvIHJlamVjdCBhIHRhYmxlcy1vbmx5IEpQRUcgZmlsZSBhcyBhbiBlcnJvci4KKyAgICogU2VlIGxpYmpwZWcudHh0IGZvciBtb3JlIGluZm8uCisgICAqLworCisgIC8qIFN0ZXAgNDogc2V0IHBhcmFtZXRlcnMgZm9yIGRlY29tcHJlc3Npb24gKi8KKworICAvKiBJbiB0aGlzIGV4YW1wbGUsIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueSBvZiB0aGUgZGVmYXVsdHMgc2V0IGJ5CisgICAqIGpwZWdfcmVhZF9oZWFkZXIoKSwgc28gd2UgZG8gbm90aGluZyBoZXJlLgorICAgKi8KKworICAvKiBTdGVwIDU6IFN0YXJ0IGRlY29tcHJlc3NvciAqLworCisgICh2b2lkKWpwZWdfc3RhcnRfZGVjb21wcmVzcygmY2luZm8pOworICAvKiBXZSBjYW4gaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgc2luY2Ugc3VzcGVuc2lvbiBpcyBub3QgcG9zc2libGUKKyAgICogd2l0aCB0aGUgc3RkaW8gZGF0YSBzb3VyY2UuCisgICAqLworCisgIC8qIFdlIG1heSBuZWVkIHRvIGRvIHNvbWUgc2V0dXAgb2Ygb3VyIG93biBhdCB0aGlzIHBvaW50IGJlZm9yZSByZWFkaW5nCisgICAqIHRoZSBkYXRhLiAgQWZ0ZXIganBlZ19zdGFydF9kZWNvbXByZXNzKCkgd2UgaGF2ZSB0aGUgY29ycmVjdCBzY2FsZWQKKyAgICogb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYXZhaWxhYmxlLCBhcyB3ZWxsIGFzIHRoZSBvdXRwdXQgY29sb3JtYXAKKyAgICogaWYgd2UgYXNrZWQgZm9yIGNvbG9yIHF1YW50aXphdGlvbi4KKyAgICogSW4gdGhpcyBleGFtcGxlLCB3ZSBuZWVkIHRvIG1ha2UgYW4gb3V0cHV0IHdvcmsgYnVmZmVyIG9mIHRoZSByaWdodCBzaXplLgorICAgKi8KKyAgLyogSlNBTVBMRXMgcGVyIHJvdyBpbiBvdXRwdXQgYnVmZmVyICovCisgIHJvd19zdHJpZGUgPSBjaW5mby5vdXRwdXRfd2lkdGggKiBjaW5mby5vdXRwdXRfY29tcG9uZW50czsKKyAgLyogTWFrZSBhIG9uZS1yb3ctaGlnaCBzYW1wbGUgYXJyYXkgdGhhdCB3aWxsIGdvIGF3YXkgd2hlbiBkb25lIHdpdGggaW1hZ2UgKi8KKyAgYnVmZmVyID0gKCpjaW5mby5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAgICAgICAgICAgICAoKGpfY29tbW9uX3B0cikmY2luZm8sIEpQT09MX0lNQUdFLCByb3dfc3RyaWRlLCAxKTsKKworICAvKiBTdGVwIDY6IHdoaWxlIChzY2FuIGxpbmVzIHJlbWFpbiB0byBiZSByZWFkKSAqLworICAvKiAgICAgICAgICAganBlZ19yZWFkX3NjYW5saW5lcyguLi4pOyAqLworCisgIC8qIEhlcmUgd2UgdXNlIHRoZSBsaWJyYXJ5J3Mgc3RhdGUgdmFyaWFibGUgY2luZm8ub3V0cHV0X3NjYW5saW5lIGFzIHRoZQorICAgKiBsb29wIGNvdW50ZXIsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHRyYWNrIG91cnNlbHZlcy4KKyAgICovCisgIHdoaWxlIChjaW5mby5vdXRwdXRfc2NhbmxpbmUgPCBjaW5mby5vdXRwdXRfaGVpZ2h0KSB7CisgICAgLyoganBlZ19yZWFkX3NjYW5saW5lcyBleHBlY3RzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHNjYW5saW5lcy4KKyAgICAgKiBIZXJlIHRoZSBhcnJheSBpcyBvbmx5IG9uZSBlbGVtZW50IGxvbmcsIGJ1dCB5b3UgY291bGQgYXNrIGZvcgorICAgICAqIG1vcmUgdGhhbiBvbmUgc2NhbmxpbmUgYXQgYSB0aW1lIGlmIHRoYXQncyBtb3JlIGNvbnZlbmllbnQuCisgICAgICovCisgICAgKHZvaWQpanBlZ19yZWFkX3NjYW5saW5lcygmY2luZm8sIGJ1ZmZlciwgMSk7CisgICAgLyogQXNzdW1lIHB1dF9zY2FubGluZV9zb21lcGxhY2Ugd2FudHMgYSBwb2ludGVyIGFuZCBzYW1wbGUgY291bnQuICovCisgICAgcHV0X3NjYW5saW5lX3NvbWVwbGFjZShidWZmZXJbMF0sIHJvd19zdHJpZGUpOworICB9CisKKyAgLyogU3RlcCA3OiBGaW5pc2ggZGVjb21wcmVzc2lvbiAqLworCisgICh2b2lkKWpwZWdfZmluaXNoX2RlY29tcHJlc3MoJmNpbmZvKTsKKyAgLyogV2UgY2FuIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIHNpbmNlIHN1c3BlbnNpb24gaXMgbm90IHBvc3NpYmxlCisgICAqIHdpdGggdGhlIHN0ZGlvIGRhdGEgc291cmNlLgorICAgKi8KKworICAvKiBTdGVwIDg6IFJlbGVhc2UgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdCAqLworCisgIC8qIFRoaXMgaXMgYW4gaW1wb3J0YW50IHN0ZXAgc2luY2UgaXQgd2lsbCByZWxlYXNlIGEgZ29vZCBkZWFsIG9mIG1lbW9yeS4gKi8KKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJmNpbmZvKTsKKworICAvKiBBZnRlciBmaW5pc2hfZGVjb21wcmVzcywgd2UgY2FuIGNsb3NlIHRoZSBpbnB1dCBmaWxlLgorICAgKiBIZXJlIHdlIHBvc3Rwb25lIGl0IHVudGlsIGFmdGVyIG5vIG1vcmUgSlBFRyBlcnJvcnMgYXJlIHBvc3NpYmxlLAorICAgKiBzbyBhcyB0byBzaW1wbGlmeSB0aGUgc2V0am1wIGVycm9yIGxvZ2ljIGFib3ZlLiAgKEFjdHVhbGx5LCBJIGRvbid0CisgICAqIHRoaW5rIHRoYXQganBlZ19kZXN0cm95IGNhbiBkbyBhbiBlcnJvciBleGl0LCBidXQgd2h5IGFzc3VtZSBhbnl0aGluZy4uLikKKyAgICovCisgIGZjbG9zZShpbmZpbGUpOworCisgIC8qIEF0IHRoaXMgcG9pbnQgeW91IG1heSB3YW50IHRvIGNoZWNrIHRvIHNlZSB3aGV0aGVyIGFueSBjb3JydXB0LWRhdGEKKyAgICogd2FybmluZ3Mgb2NjdXJyZWQgKHRlc3Qgd2hldGhlciBqZXJyLnB1Yi5udW1fd2FybmluZ3MgaXMgbm9uemVybykuCisgICAqLworCisgIC8qIEFuZCB3ZSdyZSBkb25lISAqLworICByZXR1cm4gMTsKK30KKworCisvKgorICogU09NRSBGSU5FIFBPSU5UUzoKKyAqCisgKiBJbiB0aGUgYWJvdmUgY29kZSwgd2UgaWdub3JlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGpwZWdfcmVhZF9zY2FubGluZXMsCisgKiB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyBhY3R1YWxseSByZWFkLiAgV2UgY291bGQgZ2V0IGF3YXkgd2l0aAorICogdGhpcyBiZWNhdXNlIHdlIGFza2VkIGZvciBvbmx5IG9uZSBsaW5lIGF0IGEgdGltZSBhbmQgd2Ugd2VyZW4ndCB1c2luZworICogYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlLiAgU2VlIGxpYmpwZWcudHh0IGZvciBtb3JlIGluZm8uCisgKgorICogV2UgY2hlYXRlZCBhIGJpdCBieSBjYWxsaW5nIGFsbG9jX3NhcnJheSgpIGFmdGVyIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpOworICogd2Ugc2hvdWxkIGhhdmUgZG9uZSBpdCBiZWZvcmVoYW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBzcGFjZSB3b3VsZCBiZQorICogY291bnRlZCBhZ2FpbnN0IHRoZSBKUEVHIG1heF9tZW1vcnkgc2V0dGluZy4gIEluIHNvbWUgc3lzdGVtcyB0aGUgYWJvdmUKKyAqIGNvZGUgd291bGQgcmlzayBhbiBvdXQtb2YtbWVtb3J5IGVycm9yLiAgSG93ZXZlciwgaW4gZ2VuZXJhbCB3ZSBkb24ndAorICoga25vdyB0aGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYmVmb3JlIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLCB1bmxlc3Mgd2UKKyAqIGNhbGwganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKCkuICBTZWUgbGlianBlZy50eHQgZm9yIG1vcmUgYWJvdXQgdGhpcy4KKyAqCisgKiBTY2FubGluZXMgYXJlIHJldHVybmVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBKUEVHIGZpbGUsCisgKiB3aGljaCBpcyBzdGFuZGFyZGx5IHRvcC10by1ib3R0b20uICBJZiB5b3UgbXVzdCBlbWl0IGRhdGEgYm90dG9tLXRvLXRvcCwKKyAqIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgdmlydHVhbCBhcnJheXMgcHJvdmlkZWQgYnkgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIKKyAqIHRvIGludmVydCB0aGUgZGF0YS4gIFNlZSB3cmJtcC5jIGZvciBhbiBleGFtcGxlLgorICoKKyAqIEFzIHdpdGggY29tcHJlc3Npb24sIHNvbWUgb3BlcmF0aW5nIG1vZGVzIG1heSByZXF1aXJlIHRlbXBvcmFyeSBmaWxlcy4KKyAqIE9uIHNvbWUgc3lzdGVtcyB5b3UgbWF5IG5lZWQgdG8gc2V0IHVwIGEgc2lnbmFsIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQKKyAqIHRlbXBvcmFyeSBmaWxlcyBhcmUgZGVsZXRlZCBpZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcnJ1cHRlZC4gIFNlZSBsaWJqcGVnLnR4dC4KKyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamFyaWNvbS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamFyaWNvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGJlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXJpY29tLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBqYXJpY29tLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIERldmVsb3BlZCAxOTk3LTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHByb2JhYmlsaXR5IGVzdGltYXRpb24gdGFibGVzIGZvciBjb21tb24gdXNlIGluCisgKiBhcml0aG1ldGljIGVudHJvcHkgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHJvdXRpbmVzLgorICoKKyAqIFRoaXMgZGF0YSByZXByZXNlbnRzIFRhYmxlIEQuMiBpbiB0aGUgSlBFRyBzcGVjIChJU08vSUVDIElTIDEwOTE4LTEKKyAqIGFuZCBDQ0lUVCBSZWNvbW1lbmRhdGlvbiBJVFUtVCBULjgxKSBhbmQgVGFibGUgMjQgaW4gdGhlIEpCSUcgc3BlYworICogKElTTy9JRUMgSVMgMTE1NDQgYW5kIENDSVRUIFJlY29tbWVuZGF0aW9uIElUVS1UIFQuODIpLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworLyogVGhlIGZvbGxvd2luZyAjZGVmaW5lIHNwZWNpZmllcyB0aGUgcGFja2luZyBvZiB0aGUgZm91ciBjb21wb25lbnRzCisgKiBpbnRvIHRoZSBjb21wYWN0IEpMT05HIHJlcHJlc2VudGF0aW9uLgorICogTm90ZSB0aGF0IHRoaXMgZm9ybXVsYSBtdXN0IG1hdGNoIHRoZSBhY3R1YWwgYXJpdGhtZXRpYyBlbmNvZGVyCisgKiBhbmQgZGVjb2RlciBpbXBsZW1lbnRhdGlvbi4gIFRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gYmUgY2hhbmdlZAorICogaWYgdGhpcyBmb3JtdWxhIGlzIGNoYW5nZWQuCisgKiBUaGUgY3VycmVudCBvcmdhbml6YXRpb24gaXMgbGVhbmVkIG9uIE1hcmt1cyBLdWhuJ3MgSkJJRworICogaW1wbGVtZW50YXRpb24gKGpiaWdfdGFiLmMpLgorICovCisKKyNkZWZpbmUgVihpLCBhLCBiLCBjLCBkKSBcCisgICgoKEpMT05HKWEgPDwgMTYpIHwgKChKTE9ORyljIDw8IDgpIHwgKChKTE9ORylkIDw8IDcpIHwgYikKKworY29uc3QgSkxPTkcganBlZ19hcml0YWJbMTEzICsgMV0gPSB7CisvKgorICogSW5kZXgsIFFlX1ZhbHVlLCBOZXh0X0luZGV4X0xQUywgTmV4dF9JbmRleF9NUFMsIFN3aXRjaF9NUFMKKyAqLworICBWKCAgIDAsIDB4NWExZCwgICAxLCAgIDEsIDEgKSwKKyAgViggICAxLCAweDI1ODYsICAxNCwgICAyLCAwICksCisgIFYoICAgMiwgMHgxMTE0LCAgMTYsICAgMywgMCApLAorICBWKCAgIDMsIDB4MDgwYiwgIDE4LCAgIDQsIDAgKSwKKyAgViggICA0LCAweDAzZDgsICAyMCwgICA1LCAwICksCisgIFYoICAgNSwgMHgwMWRhLCAgMjMsICAgNiwgMCApLAorICBWKCAgIDYsIDB4MDBlNSwgIDI1LCAgIDcsIDAgKSwKKyAgViggICA3LCAweDAwNmYsICAyOCwgICA4LCAwICksCisgIFYoICAgOCwgMHgwMDM2LCAgMzAsICAgOSwgMCApLAorICBWKCAgIDksIDB4MDAxYSwgIDMzLCAgMTAsIDAgKSwKKyAgViggIDEwLCAweDAwMGQsICAzNSwgIDExLCAwICksCisgIFYoICAxMSwgMHgwMDA2LCAgIDksICAxMiwgMCApLAorICBWKCAgMTIsIDB4MDAwMywgIDEwLCAgMTMsIDAgKSwKKyAgViggIDEzLCAweDAwMDEsICAxMiwgIDEzLCAwICksCisgIFYoICAxNCwgMHg1YTdmLCAgMTUsICAxNSwgMSApLAorICBWKCAgMTUsIDB4M2YyNSwgIDM2LCAgMTYsIDAgKSwKKyAgViggIDE2LCAweDJjZjIsICAzOCwgIDE3LCAwICksCisgIFYoICAxNywgMHgyMDdjLCAgMzksICAxOCwgMCApLAorICBWKCAgMTgsIDB4MTdiOSwgIDQwLCAgMTksIDAgKSwKKyAgViggIDE5LCAweDExODIsICA0MiwgIDIwLCAwICksCisgIFYoICAyMCwgMHgwY2VmLCAgNDMsICAyMSwgMCApLAorICBWKCAgMjEsIDB4MDlhMSwgIDQ1LCAgMjIsIDAgKSwKKyAgViggIDIyLCAweDA3MmYsICA0NiwgIDIzLCAwICksCisgIFYoICAyMywgMHgwNTVjLCAgNDgsICAyNCwgMCApLAorICBWKCAgMjQsIDB4MDQwNiwgIDQ5LCAgMjUsIDAgKSwKKyAgViggIDI1LCAweDAzMDMsICA1MSwgIDI2LCAwICksCisgIFYoICAyNiwgMHgwMjQwLCAgNTIsICAyNywgMCApLAorICBWKCAgMjcsIDB4MDFiMSwgIDU0LCAgMjgsIDAgKSwKKyAgViggIDI4LCAweDAxNDQsICA1NiwgIDI5LCAwICksCisgIFYoICAyOSwgMHgwMGY1LCAgNTcsICAzMCwgMCApLAorICBWKCAgMzAsIDB4MDBiNywgIDU5LCAgMzEsIDAgKSwKKyAgViggIDMxLCAweDAwOGEsICA2MCwgIDMyLCAwICksCisgIFYoICAzMiwgMHgwMDY4LCAgNjIsICAzMywgMCApLAorICBWKCAgMzMsIDB4MDA0ZSwgIDYzLCAgMzQsIDAgKSwKKyAgViggIDM0LCAweDAwM2IsICAzMiwgIDM1LCAwICksCisgIFYoICAzNSwgMHgwMDJjLCAgMzMsICAgOSwgMCApLAorICBWKCAgMzYsIDB4NWFlMSwgIDM3LCAgMzcsIDEgKSwKKyAgViggIDM3LCAweDQ4NGMsICA2NCwgIDM4LCAwICksCisgIFYoICAzOCwgMHgzYTBkLCAgNjUsICAzOSwgMCApLAorICBWKCAgMzksIDB4MmVmMSwgIDY3LCAgNDAsIDAgKSwKKyAgViggIDQwLCAweDI2MWYsICA2OCwgIDQxLCAwICksCisgIFYoICA0MSwgMHgxZjMzLCAgNjksICA0MiwgMCApLAorICBWKCAgNDIsIDB4MTlhOCwgIDcwLCAgNDMsIDAgKSwKKyAgViggIDQzLCAweDE1MTgsICA3MiwgIDQ0LCAwICksCisgIFYoICA0NCwgMHgxMTc3LCAgNzMsICA0NSwgMCApLAorICBWKCAgNDUsIDB4MGU3NCwgIDc0LCAgNDYsIDAgKSwKKyAgViggIDQ2LCAweDBiZmIsICA3NSwgIDQ3LCAwICksCisgIFYoICA0NywgMHgwOWY4LCAgNzcsICA0OCwgMCApLAorICBWKCAgNDgsIDB4MDg2MSwgIDc4LCAgNDksIDAgKSwKKyAgViggIDQ5LCAweDA3MDYsICA3OSwgIDUwLCAwICksCisgIFYoICA1MCwgMHgwNWNkLCAgNDgsICA1MSwgMCApLAorICBWKCAgNTEsIDB4MDRkZSwgIDUwLCAgNTIsIDAgKSwKKyAgViggIDUyLCAweDA0MGYsICA1MCwgIDUzLCAwICksCisgIFYoICA1MywgMHgwMzYzLCAgNTEsICA1NCwgMCApLAorICBWKCAgNTQsIDB4MDJkNCwgIDUyLCAgNTUsIDAgKSwKKyAgViggIDU1LCAweDAyNWMsICA1MywgIDU2LCAwICksCisgIFYoICA1NiwgMHgwMWY4LCAgNTQsICA1NywgMCApLAorICBWKCAgNTcsIDB4MDFhNCwgIDU1LCAgNTgsIDAgKSwKKyAgViggIDU4LCAweDAxNjAsICA1NiwgIDU5LCAwICksCisgIFYoICA1OSwgMHgwMTI1LCAgNTcsICA2MCwgMCApLAorICBWKCAgNjAsIDB4MDBmNiwgIDU4LCAgNjEsIDAgKSwKKyAgViggIDYxLCAweDAwY2IsICA1OSwgIDYyLCAwICksCisgIFYoICA2MiwgMHgwMGFiLCAgNjEsICA2MywgMCApLAorICBWKCAgNjMsIDB4MDA4ZiwgIDYxLCAgMzIsIDAgKSwKKyAgViggIDY0LCAweDViMTIsICA2NSwgIDY1LCAxICksCisgIFYoICA2NSwgMHg0ZDA0LCAgODAsICA2NiwgMCApLAorICBWKCAgNjYsIDB4NDEyYywgIDgxLCAgNjcsIDAgKSwKKyAgViggIDY3LCAweDM3ZDgsICA4MiwgIDY4LCAwICksCisgIFYoICA2OCwgMHgyZmU4LCAgODMsICA2OSwgMCApLAorICBWKCAgNjksIDB4MjkzYywgIDg0LCAgNzAsIDAgKSwKKyAgViggIDcwLCAweDIzNzksICA4NiwgIDcxLCAwICksCisgIFYoICA3MSwgMHgxZWRmLCAgODcsICA3MiwgMCApLAorICBWKCAgNzIsIDB4MWFhOSwgIDg3LCAgNzMsIDAgKSwKKyAgViggIDczLCAweDE3NGUsICA3MiwgIDc0LCAwICksCisgIFYoICA3NCwgMHgxNDI0LCAgNzIsICA3NSwgMCApLAorICBWKCAgNzUsIDB4MTE5YywgIDc0LCAgNzYsIDAgKSwKKyAgViggIDc2LCAweDBmNmIsICA3NCwgIDc3LCAwICksCisgIFYoICA3NywgMHgwZDUxLCAgNzUsICA3OCwgMCApLAorICBWKCAgNzgsIDB4MGJiNiwgIDc3LCAgNzksIDAgKSwKKyAgViggIDc5LCAweDBhNDAsICA3NywgIDQ4LCAwICksCisgIFYoICA4MCwgMHg1ODMyLCAgODAsICA4MSwgMSApLAorICBWKCAgODEsIDB4NGQxYywgIDg4LCAgODIsIDAgKSwKKyAgViggIDgyLCAweDQzOGUsICA4OSwgIDgzLCAwICksCisgIFYoICA4MywgMHgzYmRkLCAgOTAsICA4NCwgMCApLAorICBWKCAgODQsIDB4MzRlZSwgIDkxLCAgODUsIDAgKSwKKyAgViggIDg1LCAweDJlYWUsICA5MiwgIDg2LCAwICksCisgIFYoICA4NiwgMHgyOTlhLCAgOTMsICA4NywgMCApLAorICBWKCAgODcsIDB4MjUxNiwgIDg2LCAgNzEsIDAgKSwKKyAgViggIDg4LCAweDU1NzAsICA4OCwgIDg5LCAxICksCisgIFYoICA4OSwgMHg0Y2E5LCAgOTUsICA5MCwgMCApLAorICBWKCAgOTAsIDB4NDRkOSwgIDk2LCAgOTEsIDAgKSwKKyAgViggIDkxLCAweDNlMjIsICA5NywgIDkyLCAwICksCisgIFYoICA5MiwgMHgzODI0LCAgOTksICA5MywgMCApLAorICBWKCAgOTMsIDB4MzJiNCwgIDk5LCAgOTQsIDAgKSwKKyAgViggIDk0LCAweDJlMTcsICA5MywgIDg2LCAwICksCisgIFYoICA5NSwgMHg1NmE4LCAgOTUsICA5NiwgMSApLAorICBWKCAgOTYsIDB4NGY0NiwgMTAxLCAgOTcsIDAgKSwKKyAgViggIDk3LCAweDQ3ZTUsIDEwMiwgIDk4LCAwICksCisgIFYoICA5OCwgMHg0MWNmLCAxMDMsICA5OSwgMCApLAorICBWKCAgOTksIDB4M2MzZCwgMTA0LCAxMDAsIDAgKSwKKyAgViggMTAwLCAweDM3NWUsICA5OSwgIDkzLCAwICksCisgIFYoIDEwMSwgMHg1MjMxLCAxMDUsIDEwMiwgMCApLAorICBWKCAxMDIsIDB4NGMwZiwgMTA2LCAxMDMsIDAgKSwKKyAgViggMTAzLCAweDQ2MzksIDEwNywgMTA0LCAwICksCisgIFYoIDEwNCwgMHg0MTVlLCAxMDMsICA5OSwgMCApLAorICBWKCAxMDUsIDB4NTYyNywgMTA1LCAxMDYsIDEgKSwKKyAgViggMTA2LCAweDUwZTcsIDEwOCwgMTA3LCAwICksCisgIFYoIDEwNywgMHg0Yjg1LCAxMDksIDEwMywgMCApLAorICBWKCAxMDgsIDB4NTU5NywgMTEwLCAxMDksIDAgKSwKKyAgViggMTA5LCAweDUwNGYsIDExMSwgMTA3LCAwICksCisgIFYoIDExMCwgMHg1YTEwLCAxMTAsIDExMSwgMSApLAorICBWKCAxMTEsIDB4NTUyMiwgMTEyLCAxMDksIDAgKSwKKyAgViggMTEyLCAweDU5ZWIsIDExMiwgMTExLCAxICksCisvKgorICogVGhpcyBsYXN0IGVudHJ5IGlzIHVzZWQgZm9yIGZpeGVkIHByb2JhYmlsaXR5IGVzdGltYXRlIG9mIDAuNQorICogYXMgcmVjb21tZW5kZWQgaW4gU2VjdGlvbiAxMC4zIFRhYmxlIDUgb2YgSVRVLVQgUmVjLiBULjg1MS4KKyAqLworICBWKCAxMTMsIDB4NWExZCwgMTEzLCAxMTMsIDAgKQorfTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvQ01ha2VMaXN0cy50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWFkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNzggQEAKK2ZpbmRfcGFja2FnZShKYXZhIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKEpOSSBSRVFVSVJFRCkKKworIyBBbGxvdyB0aGUgSmF2YSBjb21waWxlciBmbGFncyB0byBiZSBzZXQgdXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKK2lmKE5PVCBERUZJTkVEIENNQUtFX0pBVkFfQ09NUElMRV9GTEFHUyBBTkQgREVGSU5FRCBFTlZ7SkFWQUZMQUdTfSkKKyAgc2V0KENNQUtFX0pBVkFfQ09NUElMRV9GTEFHUyAkRU5We0pBVkFGTEFHU30pCitlbmRpZigpCisKK2luY2x1ZGUoVXNlSmF2YSkKKworc2V0KENNQUtFX0pBVkFfQ09NUElMRV9GTEFHUyAiJHtDTUFLRV9KQVZBX0NPTVBJTEVfRkxBR1N9IC1KLURmaWxlLmVuY29kaW5nPVVURjgiKQorbWVzc2FnZShTVEFUVVMgIkNNQUtFX0pBVkFfQ09NUElMRV9GTEFHUyA9ICR7Q01BS0VfSkFWQV9DT01QSUxFX0ZMQUdTfSIpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiICIgIjsiIENNQUtFX0pBVkFfQ09NUElMRV9GTEFHUyAiJHtDTUFLRV9KQVZBX0NPTVBJTEVfRkxBR1N9IikKKworc2V0KEpBVkFBUkdTICIiIENBQ0hFIFNUUklORyAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBqYXZhIHdoZW4gcnVubmluZyB1bml0IHRlc3RzIChleGFtcGxlOiAtZDMyKSIpCittZXNzYWdlKFNUQVRVUyAiSkFWQUFSR1MgPSAke0pBVkFBUkdTfSIpCisKK3NldChKQVZBX1NPVVJDRVMgb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouamF2YQorICBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuamF2YQorICBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5qYXZhCisgIG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmphdmEKKyAgb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uamF2YQorICBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuamF2YQorICBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5qYXZhCisgIG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuamF2YQorICBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5qYXZhCisgIFRKVW5pdFRlc3QuamF2YQorICBUSkV4YW1wbGUuamF2YQorICBUSkJlbmNoLmphdmEpCisKK3NldChUVVJCT0pQRUdfRExMX05BTUUgInR1cmJvanBlZyIpCitpZihNSU5HVykKKyAgc2V0KFRVUkJPSlBFR19ETExfTkFNRSAibGlidHVyYm9qcGVnIikKK2VuZGlmKCkKK2lmKFdJTjMyKQorICBjb25maWd1cmVfZmlsZShvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci13aW4uamF2YS5pbgorICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci5qYXZhKQorZWxzZSgpCisgIGNvbmZpZ3VyZV9maWxlKG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLXVuaXguamF2YS5pbgorICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci5qYXZhKQorZW5kaWYoKQorc2V0KEpBVkFfU09VUkNFUyAke0pBVkFfU09VUkNFU30KKyAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmEpCisKK2lmKE1TWVMpCisgICMgVUdMWSBIQUNLIEFMRVJUOiBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIFVzZUphdmEuY21ha2Ugd2lsbCBzZXBhcmF0ZQorICAjIGNsYXNzIHBhdGggbWVtYmVycyB3aXRoIGEgc2VtaWNvbG9uLCB3aGljaCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQKKyAgIyBzZXBhcmF0b3IgYnkgdGhlIE1TWVMgc2hlbGwuCisgIHNldChDTUFLRV9IT1NUX1NZU1RFTV9OQU1FX0JBSyAke0NNQUtFX0hPU1RfU1lTVEVNX05BTUV9KQorICBzZXQoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSAiTVNZUyIpCitlbmRpZigpCithZGRfamFyKHR1cmJvanBlZy1qYXZhICR7SkFWQV9TT1VSQ0VTfSBPVVRQVVRfTkFNRSB0dXJib2pwZWcKKyAgRU5UUllfUE9JTlQgVEpFeGFtcGxlKQoraWYoTVNZUykKKyAgc2V0KENNQUtFX0hPU1RfU1lTVEVNX05BTUUgJHtDTUFLRV9IT1NUX1NZU1RFTV9OQU1FX0JBS30pCitlbmRpZigpCisKK2FkZF9jdXN0b21fdGFyZ2V0KGphdmFkb2MgQ09NTUFORAorICBqYXZhZG9jIC1ub3RpbWVzdGFtcCAtZCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZG9jIC1zb3VyY2VwYXRoICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZykKK3NldChKQVZBQ0xBU1NQQVRIICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vdHVyYm9qcGVnLWphdmEuZGlyKQorYWRkX2N1c3RvbV90YXJnZXQoamF2YWgKKyAgQ09NTUFORCBqYXZhaCAtZCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0gLWNsYXNzcGF0aCAke0pBVkFDTEFTU1BBVEh9IG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKCisgIENPTU1BTkQgamF2YWggLWQgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IC1jbGFzc3BhdGggJHtKQVZBQ0xBU1NQQVRIfSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3IKKyAgQ09NTUFORCBqYXZhaCAtZCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0gLWNsYXNzcGF0aCAke0pBVkFDTEFTU1BBVEh9IG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKRGVjb21wcmVzc29yCisgIENPTU1BTkQgamF2YWggLWQgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IC1jbGFzc3BhdGggJHtKQVZBQ0xBU1NQQVRIfSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybWVyKQorCitpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfSkFWQURJUikKKyAgc2V0KENNQUtFX0lOU1RBTExfREVGQVVMVF9KQVZBRElSICI8Q01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUj4vamF2YSIpCitlbmRpZigpCitHTlVJbnN0YWxsRGlyc19zZXRfaW5zdGFsbF9kaXIoSkFWQURJUgorICAiVGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIEphdmEgY2xhc3NlcyBzaG91bGQgYmUgaW5zdGFsbGVkIikKK0dOVUluc3RhbGxEaXJzX2dldF9hYnNvbHV0ZV9pbnN0YWxsX2RpcihDTUFLRV9JTlNUQUxMX0ZVTExfSkFWQURJUgorICBDTUFLRV9JTlNUQUxMX0pBVkFESVIpCitzZXQoQ01BS0VfSU5TVEFMTF9KQVZBRElSICR7Q01BS0VfSU5TVEFMTF9KQVZBRElSfSBQQVJFTlRfU0NPUEUpCitzZXQoQ01BS0VfSU5TVEFMTF9GVUxMX0pBVkFESVIgJHtDTUFLRV9JTlNUQUxMX0ZVTExfSkFWQURJUn0gUEFSRU5UX1NDT1BFKQorcmVwb3J0X2RpcmVjdG9yeShKQVZBRElSKQoraW5zdGFsbF9qYXIodHVyYm9qcGVnLWphdmEgJHtDTUFLRV9JTlNUQUxMX0pBVkFESVJ9KQorbWFya19hc19hZHZhbmNlZChDTEVBUiBDTUFLRV9JTlNUQUxMX0pBVkFESVIpCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL01BTklGRVNULk1GIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjNiYzUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorTWFpbi1DbGFzczogVEpFeGFtcGxlCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL1JFQURNRSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL1JFQURNRQpAQCAtMCwwICsxLDUyIEBACitUdXJib0pQRUcgSmF2YSBXcmFwcGVyCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBUdXJib0pQRUcgc2hhcmVkIGxpYnJhcnkgY2FuIG9wdGlvbmFsbHkgYmUgYnVpbHQgd2l0aCBhIEphdmEgTmF0aXZlCitJbnRlcmZhY2Ugd3JhcHBlciwgd2hpY2ggYWxsb3dzIHRoZSBsaWJyYXJ5IHRvIGJlIGxvYWRlZCBhbmQgdXNlZCBkaXJlY3RseSBmcm9tCitKYXZhIGFwcGxpY2F0aW9ucy4gIFRoZSBKYXZhIGZyb250IGVuZCBmb3IgdGhpcyBpcyBkZWZpbmVkIGluIHNldmVyYWwgY2xhc3NlcworbG9jYXRlZCB1bmRlciBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy4gIFRoZSBzb3VyY2UgY29kZSBmb3IgdGhlc2UgSmF2YQorY2xhc3NlcyBpcyBsaWNlbnNlZCB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlLCBzbyB0aGUgZmlsZXMgY2FuIGJlIGluY29ycG9yYXRlZAorZGlyZWN0bHkgaW50byBib3RoIG9wZW4gc291cmNlIGFuZCBwcm9wcmlldGFyeSBwcm9qZWN0cyB3aXRob3V0IHJlc3RyaWN0aW9uLiAgQQorSmF2YSBhcmNoaXZlIChKQVIpIGZpbGUgY29udGFpbmluZyB0aGVzZSBjbGFzc2VzIGlzIGFsc28gc2hpcHBlZCB3aXRoIHRoZQorIm9mZmljaWFsIiBkaXN0cmlidXRpb24gcGFja2FnZXMgb2YgbGlianBlZy10dXJiby4KKworVEpFeGFtcGxlLmphdmEsIHdoaWNoIHNob3VsZCBhbHNvIGJlIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMKK1JFQURNRSBmaWxlLCBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgVHVyYm9KUEVHIEphdmEgQVBJIHRvIGNvbXByZXNzIGFuZAorZGVjb21wcmVzcyBKUEVHIGltYWdlcyBpbiBtZW1vcnkuCisKKworUGVyZm9ybWFuY2UgUGl0ZmFsbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBUdXJib0pQRUcgSmF2YSBBUEkgZGVmaW5lcyBzZXZlcmFsIGNvbnZlbmllbmNlIG1ldGhvZHMgdGhhdCBjYW4gYWxsb2NhdGUKK2ltYWdlIGJ1ZmZlcnMgb3IgaW5zdGFudGlhdGUgY2xhc3NlcyB0byBob2xkIHRoZSByZXN1bHQgb2YgY29tcHJlc3MsCitkZWNvbXByZXNzLCBvciB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4gIEhvd2V2ZXIsIGlmIHlvdSB1c2UgdGhlc2UgbWV0aG9kcywgdGhlbgorYmUgbWluZGZ1bCBvZiB0aGUgYW1vdW50IG9mIG5ldyBkYXRhIHlvdSBhcmUgY3JlYXRpbmcgb24gdGhlIGhlYXAuICBJdCBtYXkgYmUKK25lY2Vzc2FyeSB0byBtYW51YWxseSBpbnZva2UgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRvIHByZXZlbnQgaGVhcCBleGhhdXN0aW9uCitvciB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLiAgQmFja2dyb3VuZCBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGtpbGwKK3BlcmZvcm1hbmNlLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudCAoSmF2YSBwYXVzZXMgYWxsCit0aHJlYWRzIHdoZW4gdGhlIEdDIHJ1bnMuKQorCitUaGUgVHVyYm9KUEVHIEphdmEgQVBJIGFsd2F5cyBnaXZlcyB5b3UgdGhlIG9wdGlvbiBvZiBwcmUtYWxsb2NhdGluZyB5b3VyIG93bgorc291cmNlIGFuZCBkZXN0aW5hdGlvbiBidWZmZXJzLCB3aGljaCBhbGxvd3MgeW91IHRvIHJlLXVzZSB0aG9zZSBidWZmZXJzIGZvcgorY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyBtdWx0aXBsZSBpbWFnZXMuICBJZiB0aGUgaW1hZ2Ugc2VxdWVuY2UgeW91IGFyZQorY29tcHJlc3Npbmcgb3IgZGVjb21wcmVzc2luZyBjb25zaXN0cyBvZiBpbWFnZXMgb2YgdGhlIHNhbWUgc2l6ZSwgdGhlbgorcHJlLWFsbG9jYXRpbmcgdGhlIGJ1ZmZlcnMgaXMgcmVjb21tZW5kZWQuCisKKworSW5zdGFsbGF0aW9uIERpcmVjdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgVHVyYm9KUEVHIEphdmEgV3JhcHBlciB3aWxsIGxvb2sgZm9yIHRoZSBUdXJib0pQRUcgSk5JIGxpYnJhcnkKKyhsaWJ0dXJib2pwZWcuc28sIGxpYnR1cmJvanBlZy5qbmlsaWIsIG9yIHR1cmJvanBlZy5kbGwpIGluIHRoZSBzeXN0ZW0gbGlicmFyeQorcGF0aHMgb3IgaW4gYW55IHBhdGhzIHNwZWNpZmllZCBpbiBMRF9MSUJSQVJZX1BBVEggKFVuKngpLCBEWUxEX0xJQlJBUllfUEFUSAorKE1hYyksIG9yIFBBVEggKFdpbmRvd3MuKSAgRmFpbGluZyB0aGlzLCBvbiBVbip4IGFuZCBNYWMgc3lzdGVtcywgdGhlIHdyYXBwZXIKK3dpbGwgbG9vayBmb3IgdGhlIEpOSSBsaWJyYXJ5IHVuZGVyIHRoZSBsaWJyYXJ5IGRpcmVjdG9yeSBjb25maWd1cmVkIHdoZW4KK2xpYmpwZWctdHVyYm8gd2FzIGJ1aWx0LiAgSWYgdGhhdCBsaWJyYXJ5IGRpcmVjdG9yeSBpcworL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyLCB0aGVuIC9vcHQvbGlianBlZy10dXJiby9saWI2NCBpcyBhbHNvIHNlYXJjaGVkLCBhbmQKK3ZpY2UgdmVyc2EuCisKK0lmIHlvdSBpbnN0YWxsZWQgdGhlIEpOSSBsaWJyYXJ5IGludG8gYW5vdGhlciBkaXJlY3RvcnksIHRoZW4geW91IHdpbGwgbmVlZAordG8gcGFzcyBhbiBhcmd1bWVudCBvZiAtRGphdmEubGlicmFyeS5wYXRoPXtwYXRoX3RvX0pOSV9saWJyYXJ5fSB0byBqYXZhLCBvcgorbWFuaXB1bGF0ZSBMRF9MSUJSQVJZX1BBVEgsIERZTERfTElCUkFSWV9QQVRILCBvciBQQVRIIHRvIGluY2x1ZGUgdGhlIGRpcmVjdG9yeQorY29udGFpbmluZyB0aGUgSk5JIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL1RKQmVuY2guamF2YSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvVEpCZW5jaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNTU1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL1RKQmVuY2guamF2YQpAQCAtMCwwICsxLDEwMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAwOS0yMDE0LCAyMDE2LTIwMTggRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5hd3QuaW1hZ2UuKjsKK2ltcG9ydCBqYXZheC5pbWFnZWlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuKjsKKworZmluYWwgY2xhc3MgVEpCZW5jaCB7CisKKyAgcHJpdmF0ZSBUSkJlbmNoKCkge30KKworICBwcml2YXRlIHN0YXRpYyBpbnQgZmxhZ3MgPSAwLCBxdWlldCA9IDAsIHBmID0gVEouUEZfQkdSLCB5dXZQYWQgPSAxOworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNvbXBPbmx5LCBkZWNvbXBPbmx5LCBkb1RpbGUsIGRvWVVWLCB3cml0ZSA9IHRydWU7CisKKyAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFBJWEZPUk1BVFNUUiA9IHsKKyAgICAiUkdCIiwgIkJHUiIsICJSR0JYIiwgIkJHUlgiLCAiWEJHUiIsICJYUkdCIiwgIkdSQVkiCisgIH07CisKKyAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFNVQk5BTUVfTE9ORyA9IHsKKyAgICAiNDo0OjQiLCAiNDoyOjIiLCAiNDoyOjAiLCAiR1JBWSIsICI0OjQ6MCIsICI0OjE6MSIKKyAgfTsKKworICBzdGF0aWMgZmluYWwgU3RyaW5nW10gU1VCTkFNRSA9IHsKKyAgICAiNDQ0IiwgIjQyMiIsICI0MjAiLCAiR1JBWSIsICI0NDAiLCAiNDExIgorICB9OworCisgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDU05BTUUgPSB7CisgICAgIlJHQiIsICJZQ2JDciIsICJHUkFZIiwgIkNNWUsiLCAiWUNDSyIKKyAgfTsKKworICBwcml2YXRlIHN0YXRpYyBUSlNjYWxpbmdGYWN0b3Igc2Y7CisgIHByaXZhdGUgc3RhdGljIGludCB4Zm9ybU9wID0gVEpUcmFuc2Zvcm0uT1BfTk9ORSwgeGZvcm1PcHQgPSAwOworICBwcml2YXRlIHN0YXRpYyBkb3VibGUgYmVuY2hUaW1lID0gNS4wLCB3YXJtdXAgPSAxLjA7CisKKworICBzdGF0aWMgZG91YmxlIGdldFRpbWUoKSB7CisgICAgcmV0dXJuIChkb3VibGUpU3lzdGVtLm5hbm9UaW1lKCkgLyAxLjBlOTsKKyAgfQorCisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRqRXJyb3JNc2c7CisgIHByaXZhdGUgc3RhdGljIGludCB0akVycm9yQ29kZSA9IC0xOworCisgIHN0YXRpYyB2b2lkIGhhbmRsZVRKRXhjZXB0aW9uKFRKRXhjZXB0aW9uIGUpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIGVycm9yTXNnID0gZS5nZXRNZXNzYWdlKCk7CisgICAgaW50IGVycm9yQ29kZSA9IGUuZ2V0RXJyb3JDb2RlKCk7CisKKyAgICBpZiAoKGZsYWdzICYgVEouRkxBR19TVE9QT05XQVJOSU5HKSA9PSAwICYmCisgICAgICAgIGVycm9yQ29kZSA9PSBUSi5FUlJfV0FSTklORykgeworICAgICAgaWYgKHRqRXJyb3JNc2cgPT0gbnVsbCB8fCAhdGpFcnJvck1zZy5lcXVhbHMoZXJyb3JNc2cpIHx8CisgICAgICAgICAgdGpFcnJvckNvZGUgIT0gZXJyb3JDb2RlKSB7CisgICAgICAgIHRqRXJyb3JNc2cgPSBlcnJvck1zZzsKKyAgICAgICAgdGpFcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV0FSTklORzogIiArIGVycm9yTXNnKTsKKyAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgIHRocm93IGU7CisgIH0KKworCisgIHN0YXRpYyBTdHJpbmcgZm9ybWF0TmFtZShpbnQgc3Vic2FtcCwgaW50IGNzKSB7CisgICAgaWYgKGNzID09IFRKLkNTX1lDYkNyKQorICAgICAgcmV0dXJuIFNVQk5BTUVfTE9OR1tzdWJzYW1wXTsKKyAgICBlbHNlIGlmIChjcyA9PSBUSi5DU19ZQ0NLKQorICAgICAgcmV0dXJuIENTTkFNRVtjc10gKyAiICIgKyBTVUJOQU1FX0xPTkdbc3Vic2FtcF07CisgICAgZWxzZQorICAgICAgcmV0dXJuIENTTkFNRVtjc107CisgIH0KKworCisgIHN0YXRpYyBTdHJpbmcgc2lnRmlnKGRvdWJsZSB2YWwsIGludCBmaWdzKSB7CisgICAgU3RyaW5nIGZvcm1hdDsKKyAgICBpbnQgZGlnaXRzQWZ0ZXJEZWNpbWFsID0gZmlncyAtIChpbnQpTWF0aC5jZWlsKE1hdGgubG9nMTAoTWF0aC5hYnModmFsKSkpOworCisgICAgaWYgKGRpZ2l0c0FmdGVyRGVjaW1hbCA8IDEpCisgICAgICBmb3JtYXQgPSBuZXcgU3RyaW5nKCIlLjBmIik7CisgICAgZWxzZQorICAgICAgZm9ybWF0ID0gbmV3IFN0cmluZygiJS4iICsgZGlnaXRzQWZ0ZXJEZWNpbWFsICsgImYiKTsKKyAgICByZXR1cm4gU3RyaW5nLmZvcm1hdChmb3JtYXQsIHZhbCk7CisgIH0KKworCisgIHN0YXRpYyBieXRlW10gbG9hZEltYWdlKFN0cmluZyBmaWxlTmFtZSwgaW50W10gdywgaW50W10gaCwgaW50IHBpeGVsRm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBCdWZmZXJlZEltYWdlIGltZyA9IEltYWdlSU8ucmVhZChuZXcgRmlsZShmaWxlTmFtZSkpOworCisgICAgaWYgKGltZyA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ291bGQgbm90IHJlYWQgIiArIGZpbGVOYW1lKTsKKyAgICB3WzBdID0gaW1nLmdldFdpZHRoKCk7CisgICAgaFswXSA9IGltZy5nZXRIZWlnaHQoKTsKKworICAgIGludFtdIHJnYiA9IGltZy5nZXRSR0IoMCwgMCwgd1swXSwgaFswXSwgbnVsbCwgMCwgd1swXSk7CisgICAgaW50IHBzID0gVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KTsKKyAgICBpbnQgcmluZGV4ID0gVEouZ2V0UmVkT2Zmc2V0KHBpeGVsRm9ybWF0KTsKKyAgICBpbnQgZ2luZGV4ID0gVEouZ2V0R3JlZW5PZmZzZXQocGl4ZWxGb3JtYXQpOworICAgIGludCBiaW5kZXggPSBUSi5nZXRCbHVlT2Zmc2V0KHBpeGVsRm9ybWF0KTsKKyAgICBieXRlW10gZHN0QnVmID0gbmV3IGJ5dGVbd1swXSAqIGhbMF0gKiBwc107CisgICAgaW50IHBpeGVscyA9IHdbMF0gKiBoWzBdLCBkc3RQdHIgPSAwLCByZ2JQdHIgPSAwOworCisgICAgd2hpbGUgKHBpeGVscy0tID4gMCkgeworICAgICAgZHN0QnVmW2RzdFB0ciArIHJpbmRleF0gPSAoYnl0ZSkoKHJnYltyZ2JQdHJdID4+IDE2KSAmIDB4ZmYpOworICAgICAgZHN0QnVmW2RzdFB0ciArIGdpbmRleF0gPSAoYnl0ZSkoKHJnYltyZ2JQdHJdID4+IDgpICYgMHhmZik7CisgICAgICBkc3RCdWZbZHN0UHRyICsgYmluZGV4XSA9IChieXRlKShyZ2JbcmdiUHRyXSAmIDB4ZmYpOworICAgICAgZHN0UHRyICs9IHBzOworICAgICAgcmdiUHRyKys7CisgICAgfQorICAgIHJldHVybiBkc3RCdWY7CisgIH0KKworCisgIHN0YXRpYyB2b2lkIHNhdmVJbWFnZShTdHJpbmcgZmlsZU5hbWUsIGJ5dGVbXSBzcmNCdWYsIGludCB3LCBpbnQgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbEZvcm1hdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBuZXcgQnVmZmVyZWRJbWFnZSh3LCBoLCBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQik7CisgICAgaW50IHBpeGVscyA9IHcgKiBoLCBzcmNQdHIgPSAwOworICAgIGludCBwcyA9IFRKLmdldFBpeGVsU2l6ZShwaXhlbEZvcm1hdCk7CisgICAgaW50IHJpbmRleCA9IFRKLmdldFJlZE9mZnNldChwaXhlbEZvcm1hdCk7CisgICAgaW50IGdpbmRleCA9IFRKLmdldEdyZWVuT2Zmc2V0KHBpeGVsRm9ybWF0KTsKKyAgICBpbnQgYmluZGV4ID0gVEouZ2V0Qmx1ZU9mZnNldChwaXhlbEZvcm1hdCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyssIHNyY1B0ciArPSBwcykgeworICAgICAgICBpbnQgcGl4ZWwgPSAoc3JjQnVmW3NyY1B0ciArIHJpbmRleF0gJiAweGZmKSA8PCAxNiB8CisgICAgICAgICAgICAgICAgICAgIChzcmNCdWZbc3JjUHRyICsgZ2luZGV4XSAmIDB4ZmYpIDw8IDggfAorICAgICAgICAgICAgICAgICAgICAoc3JjQnVmW3NyY1B0ciArIGJpbmRleF0gJiAweGZmKTsKKworICAgICAgICBpbWcuc2V0UkdCKHgsIHksIHBpeGVsKTsKKyAgICAgIH0KKyAgICB9CisgICAgSW1hZ2VJTy53cml0ZShpbWcsICJibXAiLCBuZXcgRmlsZShmaWxlTmFtZSkpOworICB9CisKKworICAvKiBEZWNvbXByZXNzaW9uIHRlc3QgKi8KKyAgc3RhdGljIHZvaWQgZGVjb21wKGJ5dGVbXSBzcmNCdWYsIGJ5dGVbXVtdIGpwZWdCdWYsIGludFtdIGpwZWdTaXplLAorICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGRzdEJ1ZiwgaW50IHcsIGludCBoLCBpbnQgc3Vic2FtcCwgaW50IGpwZWdRdWFsLAorICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lLCBpbnQgdGlsZXcsIGludCB0aWxlaCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHF1YWxTdHIgPSBuZXcgU3RyaW5nKCIiKSwgc2l6ZVN0ciwgdGVtcFN0cjsKKyAgICBUSkRlY29tcHJlc3NvciB0amQ7CisgICAgZG91YmxlIGVsYXBzZWQsIGVsYXBzZWREZWNvZGU7CisgICAgaW50IHBzID0gVEouZ2V0UGl4ZWxTaXplKHBmKSwgaSwgaXRlciA9IDA7CisgICAgaW50IHNjYWxlZHcgPSBzZi5nZXRTY2FsZWQodyk7CisgICAgaW50IHNjYWxlZGggPSBzZi5nZXRTY2FsZWQoaCk7CisgICAgaW50IHBpdGNoID0gc2NhbGVkdyAqIHBzOworICAgIFlVVkltYWdlIHl1dkltYWdlID0gbnVsbDsKKworICAgIGlmIChqcGVnUXVhbCA+IDApCisgICAgICBxdWFsU3RyID0gbmV3IFN0cmluZygiX1EiICsganBlZ1F1YWwpOworCisgICAgdGpkID0gbmV3IFRKRGVjb21wcmVzc29yKCk7CisKKyAgICBpZiAoZHN0QnVmID09IG51bGwpCisgICAgICBkc3RCdWYgPSBuZXcgYnl0ZVtwaXRjaCAqIHNjYWxlZGhdOworCisgICAgLyogU2V0IHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgdG8gZ3JheSBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlIGRlY29tcHJlc3NvcgorICAgICAgIGF0dGVtcHRlZCB0byB3cml0ZSB0byBpdCAqLworICAgIEFycmF5cy5maWxsKGRzdEJ1ZiwgKGJ5dGUpMTI3KTsKKworICAgIGlmIChkb1lVVikgeworICAgICAgaW50IHdpZHRoID0gZG9UaWxlID8gdGlsZXcgOiBzY2FsZWR3OworICAgICAgaW50IGhlaWdodCA9IGRvVGlsZSA/IHRpbGVoIDogc2NhbGVkaDsKKworICAgICAgeXV2SW1hZ2UgPSBuZXcgWVVWSW1hZ2Uod2lkdGgsIHl1dlBhZCwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgICAgIEFycmF5cy5maWxsKHl1dkltYWdlLmdldEJ1ZigpLCAoYnl0ZSkxMjcpOworICAgIH0KKworICAgIC8qIEJlbmNobWFyayAqLworICAgIGl0ZXIgPSAtMTsKKyAgICBlbGFwc2VkID0gZWxhcHNlZERlY29kZSA9IDAuMDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgaW50IHRpbGUgPSAwOworICAgICAgZG91YmxlIHN0YXJ0ID0gZ2V0VGltZSgpOworCisgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkgKz0gdGlsZWgpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4ICs9IHRpbGV3LCB0aWxlKyspIHsKKyAgICAgICAgICBpbnQgd2lkdGggPSBkb1RpbGUgPyBNYXRoLm1pbih0aWxldywgdyAtIHgpIDogc2NhbGVkdzsKKyAgICAgICAgICBpbnQgaGVpZ2h0ID0gZG9UaWxlID8gTWF0aC5taW4odGlsZWgsIGggLSB5KSA6IHNjYWxlZGg7CisKKyAgICAgICAgICB0amQuc2V0U291cmNlSW1hZ2UoanBlZ0J1Zlt0aWxlXSwganBlZ1NpemVbdGlsZV0pOworICAgICAgICAgIGlmIChkb1lVVikgeworICAgICAgICAgICAgeXV2SW1hZ2Uuc2V0QnVmKHl1dkltYWdlLmdldEJ1ZigpLCB3aWR0aCwgeXV2UGFkLCBoZWlnaHQsIHN1YnNhbXApOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgdGpkLmRlY29tcHJlc3NUb1lVVih5dXZJbWFnZSwgZmxhZ3MpOworICAgICAgICAgICAgfSBjYXRjaCAoVEpFeGNlcHRpb24gZSkgeyBoYW5kbGVUSkV4Y2VwdGlvbihlKTsgfQorICAgICAgICAgICAgZG91YmxlIHN0YXJ0RGVjb2RlID0gZ2V0VGltZSgpOworICAgICAgICAgICAgdGpkLnNldFNvdXJjZUltYWdlKHl1dkltYWdlKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHRqZC5kZWNvbXByZXNzKGRzdEJ1ZiwgeCwgeSwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncyk7CisgICAgICAgICAgICB9IGNhdGNoIChUSkV4Y2VwdGlvbiBlKSB7IGhhbmRsZVRKRXhjZXB0aW9uKGUpOyB9CisgICAgICAgICAgICBpZiAoaXRlciA+PSAwKQorICAgICAgICAgICAgICBlbGFwc2VkRGVjb2RlICs9IGdldFRpbWUoKSAtIHN0YXJ0RGVjb2RlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICB0amQuZGVjb21wcmVzcyhkc3RCdWYsIHgsIHksIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwgZmxhZ3MpOworICAgICAgICAgICAgfSBjYXRjaCAoVEpFeGNlcHRpb24gZSkgeyBoYW5kbGVUSkV4Y2VwdGlvbihlKTsgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxhcHNlZCArPSBnZXRUaW1lKCkgLSBzdGFydDsKKyAgICAgIGlmIChpdGVyID49IDApIHsKKyAgICAgICAgaXRlcisrOworICAgICAgICBpZiAoZWxhcHNlZCA+PSBiZW5jaFRpbWUpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9IGVsc2UgaWYgKGVsYXBzZWQgPj0gd2FybXVwKSB7CisgICAgICAgIGl0ZXIgPSAwOworICAgICAgICBlbGFwc2VkID0gZWxhcHNlZERlY29kZSA9IDAuMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGRvWVVWKQorICAgICAgZWxhcHNlZCAtPSBlbGFwc2VkRGVjb2RlOworCisgICAgdGpkID0gbnVsbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwganBlZ0J1Zi5sZW5ndGg7IGkrKykKKyAgICAgIGpwZWdCdWZbaV0gPSBudWxsOworICAgIGpwZWdCdWYgPSBudWxsOyAganBlZ1NpemUgPSBudWxsOworICAgIFN5c3RlbS5nYygpOworCisgICAgaWYgKHF1aWV0ICE9IDApIHsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlLTZzJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnRmlnKChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0ID09IDIgPyAiXG4iIDogIiAgIik7CisgICAgICBpZiAoZG9ZVVYpCisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnRmlnKChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpaXRlciAvIGVsYXBzZWREZWNvZGUsIDQpKTsKKyAgICAgIGVsc2UgaWYgKHF1aWV0ICE9IDIpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlcyAtLT4gRnJhbWUgcmF0ZTogICAgICAgICAlZiBmcHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoZG9ZVVYgPyAiRGVjb21wIHRvIFlVViIgOiAiRGVjb21wcmVzcyAgICIpLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlpdGVyIC8gZWxhcHNlZCk7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICAgICAgICAgICAgICAgVGhyb3VnaHB1dDogICAgICAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpdGVyIC8gZWxhcHNlZCk7CisgICAgICBpZiAoZG9ZVVYpIHsKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIllVViBEZWNvZGUgICAgLS0+IEZyYW1lIHJhdGU6ICAgICAgICAgJWYgZnBzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkRGVjb2RlKTsKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgICAgICAgICAgICAgICAgIFRocm91Z2hwdXQ6ICAgICAgICAgJWYgTWVnYXBpeGVscy9zZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlpdGVyIC8gZWxhcHNlZERlY29kZSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCF3cml0ZSkgcmV0dXJuOworCisgICAgaWYgKHNmLmdldE51bSgpICE9IDEgfHwgc2YuZ2V0RGVub20oKSAhPSAxKQorICAgICAgc2l6ZVN0ciA9IG5ldyBTdHJpbmcoc2YuZ2V0TnVtKCkgKyAiXyIgKyBzZi5nZXREZW5vbSgpKTsKKyAgICBlbHNlIGlmICh0aWxldyAhPSB3IHx8IHRpbGVoICE9IGgpCisgICAgICBzaXplU3RyID0gbmV3IFN0cmluZyh0aWxldyArICJ4IiArIHRpbGVoKTsKKyAgICBlbHNlCisgICAgICBzaXplU3RyID0gbmV3IFN0cmluZygiZnVsbCIpOworICAgIGlmIChkZWNvbXBPbmx5KQorICAgICAgdGVtcFN0ciA9IG5ldyBTdHJpbmcoZmlsZU5hbWUgKyAiXyIgKyBzaXplU3RyICsgIi5ibXAiKTsKKyAgICBlbHNlCisgICAgICB0ZW1wU3RyID0gbmV3IFN0cmluZyhmaWxlTmFtZSArICJfIiArIFNVQk5BTUVbc3Vic2FtcF0gKyBxdWFsU3RyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJfIiArIHNpemVTdHIgKyAiLmJtcCIpOworCisgICAgc2F2ZUltYWdlKHRlbXBTdHIsIGRzdEJ1Ziwgc2NhbGVkdywgc2NhbGVkaCwgcGYpOworICAgIGludCBuZHggPSB0ZW1wU3RyLmxhc3RJbmRleE9mKCcuJyk7CisgICAgdGVtcFN0ciA9IG5ldyBTdHJpbmcodGVtcFN0ci5zdWJzdHJpbmcoMCwgbmR4KSArICItZXJyLmJtcCIpOworICAgIGlmIChzcmNCdWYgIT0gbnVsbCAmJiBzZi5nZXROdW0oKSA9PSAxICYmIHNmLmdldERlbm9tKCkgPT0gMSkgeworICAgICAgaWYgKHF1aWV0ID09IDApCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29tcHJlc3Npb24gZXJyb3Igd3JpdHRlbiB0byAiICsgdGVtcFN0ciArICIuIik7CisgICAgICBpZiAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkpIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDAsIGluZGV4ID0gMDsgeSA8IGg7IHkrKywgaW5kZXggKz0gcGl0Y2gpIHsKKyAgICAgICAgICBmb3IgKGludCB4ID0gMCwgaW5kZXgyID0gaW5kZXg7IHggPCB3OyB4KyssIGluZGV4MiArPSBwcykgeworICAgICAgICAgICAgaW50IHJpbmRleCA9IGluZGV4MiArIFRKLmdldFJlZE9mZnNldChwZik7CisgICAgICAgICAgICBpbnQgZ2luZGV4ID0gaW5kZXgyICsgVEouZ2V0R3JlZW5PZmZzZXQocGYpOworICAgICAgICAgICAgaW50IGJpbmRleCA9IGluZGV4MiArIFRKLmdldEJsdWVPZmZzZXQocGYpOworICAgICAgICAgICAgaW50IGx1bSA9IChpbnQpKChkb3VibGUpKHNyY0J1ZltyaW5kZXhdICYgMHhmZikgKiAwLjI5OSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkoc3JjQnVmW2dpbmRleF0gJiAweGZmKSAqIDAuNTg3ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKShzcmNCdWZbYmluZGV4XSAmIDB4ZmYpICogMC4xMTQgKyAwLjUpOworCisgICAgICAgICAgICBpZiAobHVtID4gMjU1KSBsdW0gPSAyNTU7CisgICAgICAgICAgICBpZiAobHVtIDwgMCkgbHVtID0gMDsKKyAgICAgICAgICAgIGRzdEJ1ZltyaW5kZXhdID0gKGJ5dGUpTWF0aC5hYnMoKGRzdEJ1ZltyaW5kZXhdICYgMHhmZikgLSBsdW0pOworICAgICAgICAgICAgZHN0QnVmW2dpbmRleF0gPSAoYnl0ZSlNYXRoLmFicygoZHN0QnVmW2dpbmRleF0gJiAweGZmKSAtIGx1bSk7CisgICAgICAgICAgICBkc3RCdWZbYmluZGV4XSA9IChieXRlKU1hdGguYWJzKChkc3RCdWZbYmluZGV4XSAmIDB4ZmYpIC0gbHVtKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKQorICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdyAqIHBzOyB4KyspCisgICAgICAgICAgICBkc3RCdWZbcGl0Y2ggKiB5ICsgeF0gPQorICAgICAgICAgICAgICAoYnl0ZSlNYXRoLmFicygoZHN0QnVmW3BpdGNoICogeSArIHhdICYgMHhmZikgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjQnVmW3BpdGNoICogeSArIHhdICYgMHhmZikpOworICAgICAgfQorICAgICAgc2F2ZUltYWdlKHRlbXBTdHIsIGRzdEJ1ZiwgdywgaCwgcGYpOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQgZnVsbFRlc3QoYnl0ZVtdIHNyY0J1ZiwgaW50IHcsIGludCBoLCBpbnQgc3Vic2FtcCwgaW50IGpwZWdRdWFsLAorICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFRKQ29tcHJlc3NvciB0amM7CisgICAgYnl0ZVtdIHRtcEJ1ZjsKKyAgICBieXRlW11bXSBqcGVnQnVmOworICAgIGludFtdIGpwZWdTaXplOworICAgIGRvdWJsZSBzdGFydCwgZWxhcHNlZCwgZWxhcHNlZEVuY29kZTsKKyAgICBpbnQgdG90YWxKcGVnU2l6ZSA9IDAsIHRpbGV3LCB0aWxlaCwgaSwgaXRlcjsKKyAgICBpbnQgcHMgPSBUSi5nZXRQaXhlbFNpemUocGYpOworICAgIGludCBudGlsZXN3ID0gMSwgbnRpbGVzaCA9IDEsIHBpdGNoID0gdyAqIHBzOworICAgIFN0cmluZyBwZlN0ciA9IFBJWEZPUk1BVFNUUltwZl07CisgICAgWVVWSW1hZ2UgeXV2SW1hZ2UgPSBudWxsOworCisgICAgdG1wQnVmID0gbmV3IGJ5dGVbcGl0Y2ggKiBoXTsKKworICAgIGlmIChxdWlldCA9PSAwKQorICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIj4+Pj4+ICAlcyAoJXMpIDwtLT4gSlBFRyAlcyBRJWQgIDw8PDw8XG4iLCBwZlN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgIkJvdHRvbS11cCIgOiAiVG9wLWRvd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCTkFNRV9MT05HW3N1YnNhbXBdLCBqcGVnUXVhbCk7CisKKyAgICB0amMgPSBuZXcgVEpDb21wcmVzc29yKCk7CisKKyAgICBmb3IgKHRpbGV3ID0gZG9UaWxlID8gOCA6IHcsIHRpbGVoID0gZG9UaWxlID8gOCA6IGg7IDsKKyAgICAgICAgIHRpbGV3ICo9IDIsIHRpbGVoICo9IDIpIHsKKyAgICAgIGlmICh0aWxldyA+IHcpCisgICAgICAgIHRpbGV3ID0gdzsKKyAgICAgIGlmICh0aWxlaCA+IGgpCisgICAgICAgIHRpbGVoID0gaDsKKyAgICAgIG50aWxlc3cgPSAodyArIHRpbGV3IC0gMSkgLyB0aWxldzsKKyAgICAgIG50aWxlc2ggPSAoaCArIHRpbGVoIC0gMSkgLyB0aWxlaDsKKworICAgICAganBlZ0J1ZiA9IG5ldyBieXRlW250aWxlc3cgKiBudGlsZXNoXVtUSi5idWZTaXplKHRpbGV3LCB0aWxlaCwgc3Vic2FtcCldOworICAgICAganBlZ1NpemUgPSBuZXcgaW50W250aWxlc3cgKiBudGlsZXNoXTsKKworICAgICAgLyogQ29tcHJlc3Npb24gdGVzdCAqLworICAgICAgaWYgKHF1aWV0ID09IDEpCisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlLTRzICglcykgICUtNXMgICAgJS0zZCAgICIsIHBmU3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwID8gIkJVIiA6ICJURCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQk5BTUVfTE9OR1tzdWJzYW1wXSwganBlZ1F1YWwpOworICAgICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmNCdWYsIHcgKiBwcyAqIGksIHRtcEJ1ZiwgcGl0Y2ggKiBpLCB3ICogcHMpOworICAgICAgdGpjLnNldEpQRUdRdWFsaXR5KGpwZWdRdWFsKTsKKyAgICAgIHRqYy5zZXRTdWJzYW1wKHN1YnNhbXApOworCisgICAgICBpZiAoZG9ZVVYpIHsKKyAgICAgICAgeXV2SW1hZ2UgPSBuZXcgWVVWSW1hZ2UodGlsZXcsIHl1dlBhZCwgdGlsZWgsIHN1YnNhbXApOworICAgICAgICBBcnJheXMuZmlsbCh5dXZJbWFnZS5nZXRCdWYoKSwgKGJ5dGUpMTI3KTsKKyAgICAgIH0KKworICAgICAgLyogQmVuY2htYXJrICovCisgICAgICBpdGVyID0gLTE7CisgICAgICBlbGFwc2VkID0gZWxhcHNlZEVuY29kZSA9IDAuMDsKKyAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGludCB0aWxlID0gMDsKKworICAgICAgICB0b3RhbEpwZWdTaXplID0gMDsKKyAgICAgICAgc3RhcnQgPSBnZXRUaW1lKCk7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArPSB0aWxlaCkgeworICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCArPSB0aWxldywgdGlsZSsrKSB7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBNYXRoLm1pbih0aWxldywgdyAtIHgpOworICAgICAgICAgICAgaW50IGhlaWdodCA9IE1hdGgubWluKHRpbGVoLCBoIC0geSk7CisKKyAgICAgICAgICAgIHRqYy5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIHgsIHksIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZik7CisgICAgICAgICAgICBpZiAoZG9ZVVYpIHsKKyAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0RW5jb2RlID0gZ2V0VGltZSgpOworCisgICAgICAgICAgICAgIHl1dkltYWdlLnNldEJ1Zih5dXZJbWFnZS5nZXRCdWYoKSwgd2lkdGgsIHl1dlBhZCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcCk7CisgICAgICAgICAgICAgIHRqYy5lbmNvZGVZVVYoeXV2SW1hZ2UsIGZsYWdzKTsKKyAgICAgICAgICAgICAgaWYgKGl0ZXIgPj0gMCkKKyAgICAgICAgICAgICAgICBlbGFwc2VkRW5jb2RlICs9IGdldFRpbWUoKSAtIHN0YXJ0RW5jb2RlOworICAgICAgICAgICAgICB0amMuc2V0U291cmNlSW1hZ2UoeXV2SW1hZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGpjLmNvbXByZXNzKGpwZWdCdWZbdGlsZV0sIGZsYWdzKTsKKyAgICAgICAgICAgIGpwZWdTaXplW3RpbGVdID0gdGpjLmdldENvbXByZXNzZWRTaXplKCk7CisgICAgICAgICAgICB0b3RhbEpwZWdTaXplICs9IGpwZWdTaXplW3RpbGVdOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbGFwc2VkICs9IGdldFRpbWUoKSAtIHN0YXJ0OworICAgICAgICBpZiAoaXRlciA+PSAwKSB7CisgICAgICAgICAgaXRlcisrOworICAgICAgICAgIGlmIChlbGFwc2VkID49IGJlbmNoVGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGVsYXBzZWQgPj0gd2FybXVwKSB7CisgICAgICAgICAgaXRlciA9IDA7CisgICAgICAgICAgZWxhcHNlZCA9IGVsYXBzZWRFbmNvZGUgPSAwLjA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChkb1lVVikKKyAgICAgICAgZWxhcHNlZCAtPSBlbGFwc2VkRW5jb2RlOworCisgICAgICBpZiAocXVpZXQgPT0gMSkKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUtNWQgICUtNWQgICAiLCB0aWxldywgdGlsZWgpOworICAgICAgaWYgKHF1aWV0ICE9IDApIHsKKyAgICAgICAgaWYgKGRvWVVWKQorICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlLTZzJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ0ZpZygoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpaXRlciAvIGVsYXBzZWRFbmNvZGUsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0ID09IDIgPyAiXG4iIDogIiAgIik7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlLTZzJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdGaWcoKGRvdWJsZSkodyAqIGgpIC8gMTAwMDAwMC4gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlpdGVyIC8gZWxhcHNlZCwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0ID09IDIgPyAiXG4iIDogIiAgIik7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlLTZzJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdGaWcoKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXRvdGFsSnBlZ1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQgPT0gMiA/ICJcbiIgOiAiICAiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJcbiVzIHNpemU6ICVkIHggJWRcbiIsIGRvVGlsZSA/ICJUaWxlIiA6ICJJbWFnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGV3LCB0aWxlaCk7CisgICAgICAgIGlmIChkb1lVVikgeworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJFbmNvZGUgWVVWICAgIC0tPiBGcmFtZSByYXRlOiAgICAgICAgICVmIGZwc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkRW5jb2RlKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICAgICAgICAgICAgICAgT3V0cHV0IGltYWdlIHNpemU6ICAlZCBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZJbWFnZS5nZXRTaXplKCkpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiByYXRpbzogICVmOjFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXl1dkltYWdlLmdldFNpemUoKSk7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgICAgICAgICAgICAgICAgIFRocm91Z2hwdXQ6ICAgICAgICAgJWYgTWVnYXBpeGVscy9zZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGgpIC8gMTAwMDAwMC4gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpaXRlciAvIGVsYXBzZWRFbmNvZGUpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgICAgICAgICAgICAgICBPdXRwdXQgYml0IHN0cmVhbTogICVmIE1lZ2FiaXRzL3NlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXl1dkltYWdlLmdldFNpemUoKSAqIDguIC8gMTAwMDAwMC4gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpaXRlciAvIGVsYXBzZWRFbmNvZGUpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlcyAtLT4gRnJhbWUgcmF0ZTogICAgICAgICAlZiBmcHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvWVVWID8gIkNvbXAgZnJvbSBZVVYiIDogIkNvbXByZXNzICAgICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkKTsKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgICAgICAgICAgICAgICAgIE91dHB1dCBpbWFnZSBzaXplOiAgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSnBlZ1NpemUpOworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gcmF0aW86ICAlZjoxXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSh3ICogaCAqIHBzKSAvIChkb3VibGUpdG90YWxKcGVnU2l6ZSk7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgICAgICAgICAgICAgICBUaHJvdWdocHV0OiAgICAgICAgICVmIE1lZ2FwaXhlbHMvc2VjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqIChkb3VibGUpaXRlciAvIGVsYXBzZWQpOworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICAgICAgICAgICAgICAgT3V0cHV0IGJpdCBzdHJlYW06ICAlZiBNZWdhYml0cy9zZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpdG90YWxKcGVnU2l6ZSAqIDguIC8gMTAwMDAwMC4gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aWxldyA9PSB3ICYmIHRpbGVoID09IGggJiYgd3JpdGUpIHsKKyAgICAgICAgU3RyaW5nIHRlbXBTdHIgPSBmaWxlTmFtZSArICJfIiArIFNVQk5BTUVbc3Vic2FtcF0gKyAiXyIgKyAiUSIgKworICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdRdWFsICsgIi5qcGciOworICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRlbXBTdHIpOworCisgICAgICAgIGZvcy53cml0ZShqcGVnQnVmWzBdLCAwLCBqcGVnU2l6ZVswXSk7CisgICAgICAgIGZvcy5jbG9zZSgpOworICAgICAgICBpZiAocXVpZXQgPT0gMCkKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZmVyZW5jZSBpbWFnZSB3cml0dGVuIHRvICIgKyB0ZW1wU3RyKTsKKyAgICAgIH0KKworICAgICAgLyogRGVjb21wcmVzc2lvbiB0ZXN0ICovCisgICAgICBpZiAoIWNvbXBPbmx5KQorICAgICAgICBkZWNvbXAoc3JjQnVmLCBqcGVnQnVmLCBqcGVnU2l6ZSwgdG1wQnVmLCB3LCBoLCBzdWJzYW1wLCBqcGVnUXVhbCwKKyAgICAgICAgICAgICAgIGZpbGVOYW1lLCB0aWxldywgdGlsZWgpOworCisgICAgICBpZiAodGlsZXcgPT0gdyAmJiB0aWxlaCA9PSBoKSBicmVhazsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkIGRlY29tcFRlc3QoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBUSlRyYW5zZm9ybWVyIHRqdDsKKyAgICBieXRlW11bXSBqcGVnQnVmID0gbnVsbDsKKyAgICBieXRlW10gc3JjQnVmOworICAgIGludFtdIGpwZWdTaXplID0gbnVsbDsKKyAgICBpbnQgdG90YWxKcGVnU2l6ZTsKKyAgICBkb3VibGUgc3RhcnQsIGVsYXBzZWQ7CisgICAgaW50IHBzID0gVEouZ2V0UGl4ZWxTaXplKHBmKSwgdGlsZSwgeCwgeSwgaXRlcjsKKyAgICAvLyBPcmlnaW5hbCBpbWFnZQorICAgIGludCB3ID0gMCwgaCA9IDAsIG50aWxlc3cgPSAxLCBudGlsZXNoID0gMSwgc3Vic2FtcCA9IC0xLCBjcyA9IC0xOworICAgIC8vIFRyYW5zZm9ybWVkIGltYWdlCisgICAgaW50IHR3LCB0aCwgdHRpbGV3LCB0dGlsZWgsIHRudGlsZXN3LCB0bnRpbGVzaCwgdHN1YnNhbXA7CisKKyAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlTmFtZSk7CisgICAgaW50IHNyY1NpemUgPSAoaW50KWZpcy5nZXRDaGFubmVsKCkuc2l6ZSgpOworICAgIHNyY0J1ZiA9IG5ldyBieXRlW3NyY1NpemVdOworICAgIGZpcy5yZWFkKHNyY0J1ZiwgMCwgc3JjU2l6ZSk7CisgICAgZmlzLmNsb3NlKCk7CisKKyAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpOworICAgIGlmIChpbmRleCA+PSAwKQorICAgICAgZmlsZU5hbWUgPSBuZXcgU3RyaW5nKGZpbGVOYW1lLnN1YnN0cmluZygwLCBpbmRleCkpOworCisgICAgdGp0ID0gbmV3IFRKVHJhbnNmb3JtZXIoKTsKKworICAgIHRqdC5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIHNyY1NpemUpOworICAgIHcgPSB0anQuZ2V0V2lkdGgoKTsKKyAgICBoID0gdGp0LmdldEhlaWdodCgpOworICAgIHN1YnNhbXAgPSB0anQuZ2V0U3Vic2FtcCgpOworICAgIGNzID0gdGp0LmdldENvbG9yc3BhY2UoKTsKKworICAgIGlmIChxdWlldCA9PSAxKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFsbCBwZXJmb3JtYW5jZSB2YWx1ZXMgaW4gTXBpeGVscy9zZWNcbiIpOworICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIkJpdG1hcCAgICAgSlBFRyAgIEpQRUcgICAgICVzICAlcyAgIFhmb3JtICAgQ29tcCAgICBEZWNvbXAgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAoZG9UaWxlID8gIlRpbGUgIiA6ICJJbWFnZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRvVGlsZSA/ICJUaWxlICIgOiAiSW1hZ2UiKSk7CisgICAgICBpZiAoZG9ZVVYpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkRlY29kZSIpOworICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkZvcm1hdCAgICAgQ1MgICAgIFN1YnNhbXAgIFdpZHRoICBIZWlnaHQgIFBlcmYgICAgUmF0aW8gICBQZXJmICAgICIpOworICAgICAgaWYgKGRvWVVWKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJQZXJmIik7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7CisgICAgfSBlbHNlIGlmIChxdWlldCA9PSAwKQorICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIj4+Pj4+ICBKUEVHICVzIC0tPiAlcyAoJXMpICA8PDw8PFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdE5hbWUoc3Vic2FtcCwgY3MpLCBQSVhGT1JNQVRTVFJbcGZdLAorICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCA/CisgICAgICAgICAgICAgICAgICAgICAgICAiQm90dG9tLXVwIiA6ICJUb3AtZG93biIpOworCisgICAgZm9yIChpbnQgdGlsZXcgPSBkb1RpbGUgPyAxNiA6IHcsIHRpbGVoID0gZG9UaWxlID8gMTYgOiBoOyA7CisgICAgICAgICB0aWxldyAqPSAyLCB0aWxlaCAqPSAyKSB7CisgICAgICBpZiAodGlsZXcgPiB3KQorICAgICAgICB0aWxldyA9IHc7CisgICAgICBpZiAodGlsZWggPiBoKQorICAgICAgICB0aWxlaCA9IGg7CisgICAgICBudGlsZXN3ID0gKHcgKyB0aWxldyAtIDEpIC8gdGlsZXc7CisgICAgICBudGlsZXNoID0gKGggKyB0aWxlaCAtIDEpIC8gdGlsZWg7CisKKyAgICAgIHR3ID0gdzsgIHRoID0gaDsgIHR0aWxldyA9IHRpbGV3OyAgdHRpbGVoID0gdGlsZWg7CisgICAgICBpZiAocXVpZXQgPT0gMCkgeworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiXG4lcyBzaXplOiAlZCB4ICVkIiwgKGRvVGlsZSA/ICJUaWxlIiA6ICJJbWFnZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0dGlsZXcsIHR0aWxlaCk7CisgICAgICAgIGlmIChzZi5nZXROdW0oKSAhPSAxIHx8IHNmLmdldERlbm9tKCkgIT0gMSkKKyAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiIC0tPiAlZCB4ICVkIiwgc2YuZ2V0U2NhbGVkKHR3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZi5nZXRTY2FsZWQodGgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgIH0gZWxzZSBpZiAocXVpZXQgPT0gMSkgeworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJS00cyAoJXMpICAlLTVzICAlLTVzICAgICIsIFBJWEZPUk1BVFNUUltwZl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDAgPyAiQlUiIDogIlREIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NOQU1FW2NzXSwgU1VCTkFNRV9MT05HW3N1YnNhbXBdKTsKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUtNWQgICUtNWQgICAiLCB0aWxldywgdGlsZWgpOworICAgICAgfQorCisgICAgICB0c3Vic2FtcCA9IHN1YnNhbXA7CisgICAgICBpZiAoZG9UaWxlIHx8IHhmb3JtT3AgIT0gVEpUcmFuc2Zvcm0uT1BfTk9ORSB8fCB4Zm9ybU9wdCAhPSAwKSB7CisgICAgICAgIGlmICh4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1RSQU5TUE9TRSB8fAorICAgICAgICAgICAgeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9UUkFOU1ZFUlNFIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1JPVDkwIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1JPVDI3MCkgeworICAgICAgICAgIHR3ID0gaDsgIHRoID0gdzsgIHR0aWxldyA9IHRpbGVoOyAgdHRpbGVoID0gdGlsZXc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHhmb3JtT3B0ICYgVEpUcmFuc2Zvcm0uT1BUX0dSQVkpICE9IDApCisgICAgICAgICAgdHN1YnNhbXAgPSBUSi5TQU1QX0dSQVk7CisgICAgICAgIGlmICh4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX0hGTElQIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1JPVDE4MCkKKyAgICAgICAgICB0dyA9IHR3IC0gKHR3ICUgVEouZ2V0TUNVV2lkdGgodHN1YnNhbXApKTsKKyAgICAgICAgaWYgKHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfVkZMSVAgfHwKKyAgICAgICAgICAgIHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfUk9UMTgwKQorICAgICAgICAgIHRoID0gdGggLSAodGggJSBUSi5nZXRNQ1VIZWlnaHQodHN1YnNhbXApKTsKKyAgICAgICAgaWYgKHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfVFJBTlNWRVJTRSB8fAorICAgICAgICAgICAgeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9ST1Q5MCkKKyAgICAgICAgICB0dyA9IHR3IC0gKHR3ICUgVEouZ2V0TUNVSGVpZ2h0KHRzdWJzYW1wKSk7CisgICAgICAgIGlmICh4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1RSQU5TVkVSU0UgfHwKKyAgICAgICAgICAgIHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfUk9UMjcwKQorICAgICAgICAgIHRoID0gdGggLSAodGggJSBUSi5nZXRNQ1VXaWR0aCh0c3Vic2FtcCkpOworICAgICAgICB0bnRpbGVzdyA9ICh0dyArIHR0aWxldyAtIDEpIC8gdHRpbGV3OworICAgICAgICB0bnRpbGVzaCA9ICh0aCArIHR0aWxlaCAtIDEpIC8gdHRpbGVoOworCisgICAgICAgIGlmICh4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1RSQU5TUE9TRSB8fAorICAgICAgICAgICAgeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9UUkFOU1ZFUlNFIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1JPVDkwIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1JPVDI3MCkgeworICAgICAgICAgIGlmICh0c3Vic2FtcCA9PSBUSi5TQU1QXzQyMikKKyAgICAgICAgICAgIHRzdWJzYW1wID0gVEouU0FNUF80NDA7CisgICAgICAgICAgZWxzZSBpZiAodHN1YnNhbXAgPT0gVEouU0FNUF80NDApCisgICAgICAgICAgICB0c3Vic2FtcCA9IFRKLlNBTVBfNDIyOworICAgICAgICB9CisKKyAgICAgICAgVEpUcmFuc2Zvcm1bXSB0ID0gbmV3IFRKVHJhbnNmb3JtW3RudGlsZXN3ICogdG50aWxlc2hdOworICAgICAgICBqcGVnQnVmID0KKyAgICAgICAgICBuZXcgYnl0ZVt0bnRpbGVzdyAqIHRudGlsZXNoXVtUSi5idWZTaXplKHR0aWxldywgdHRpbGVoLCBzdWJzYW1wKV07CisKKyAgICAgICAgZm9yICh5ID0gMCwgdGlsZSA9IDA7IHkgPCB0aDsgeSArPSB0dGlsZWgpIHsKKyAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgdHc7IHggKz0gdHRpbGV3LCB0aWxlKyspIHsKKyAgICAgICAgICAgIHRbdGlsZV0gPSBuZXcgVEpUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHRbdGlsZV0ud2lkdGggPSBNYXRoLm1pbih0dGlsZXcsIHR3IC0geCk7CisgICAgICAgICAgICB0W3RpbGVdLmhlaWdodCA9IE1hdGgubWluKHR0aWxlaCwgdGggLSB5KTsKKyAgICAgICAgICAgIHRbdGlsZV0ueCA9IHg7CisgICAgICAgICAgICB0W3RpbGVdLnkgPSB5OworICAgICAgICAgICAgdFt0aWxlXS5vcCA9IHhmb3JtT3A7CisgICAgICAgICAgICB0W3RpbGVdLm9wdGlvbnMgPSB4Zm9ybU9wdCB8IFRKVHJhbnNmb3JtLk9QVF9UUklNOworICAgICAgICAgICAgaWYgKCh0W3RpbGVdLm9wdGlvbnMgJiBUSlRyYW5zZm9ybS5PUFRfTk9PVVRQVVQpICE9IDAgJiYKKyAgICAgICAgICAgICAgICBqcGVnQnVmW3RpbGVdICE9IG51bGwpCisgICAgICAgICAgICAgIGpwZWdCdWZbdGlsZV0gPSBudWxsOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGl0ZXIgPSAtMTsKKyAgICAgICAgZWxhcHNlZCA9IDAuOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgIHN0YXJ0ID0gZ2V0VGltZSgpOworICAgICAgICAgIHRqdC50cmFuc2Zvcm0oanBlZ0J1ZiwgdCwgZmxhZ3MpOworICAgICAgICAgIGpwZWdTaXplID0gdGp0LmdldFRyYW5zZm9ybWVkU2l6ZXMoKTsKKyAgICAgICAgICBlbGFwc2VkICs9IGdldFRpbWUoKSAtIHN0YXJ0OworICAgICAgICAgIGlmIChpdGVyID49IDApIHsKKyAgICAgICAgICAgIGl0ZXIrKzsKKyAgICAgICAgICAgIGlmIChlbGFwc2VkID49IGJlbmNoVGltZSkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIGlmIChlbGFwc2VkID49IHdhcm11cCkgeworICAgICAgICAgICAgaXRlciA9IDA7CisgICAgICAgICAgICBlbGFwc2VkID0gMC4wOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0ID0gbnVsbDsKKworICAgICAgICBmb3IgKHRpbGUgPSAwLCB0b3RhbEpwZWdTaXplID0gMDsgdGlsZSA8IHRudGlsZXN3ICogdG50aWxlc2g7IHRpbGUrKykKKyAgICAgICAgICB0b3RhbEpwZWdTaXplICs9IGpwZWdTaXplW3RpbGVdOworCisgICAgICAgIGlmIChxdWlldCAhPSAwKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUtNnMlcyUtNnMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnRmlnKChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuIC8gZWxhcHNlZCwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQgPT0gMiA/ICJcbiIgOiAiICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ0ZpZygoZG91YmxlKSh3ICogaCAqIHBzKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpdG90YWxKcGVnU2l6ZSwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQgPT0gMiA/ICJcbiIgOiAiICAiKTsKKyAgICAgICAgfSBlbHNlIGlmIChxdWlldCA9PSAwKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIlRyYW5zZm9ybSAgICAgLS0+IEZyYW1lIHJhdGU6ICAgICAgICAgJWYgZnBzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCAvIGVsYXBzZWQpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgICAgICAgICAgICAgICBPdXRwdXQgaW1hZ2Ugc2l6ZTogICVkIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSnBlZ1NpemUpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiByYXRpbzogICVmOjFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXRvdGFsSnBlZ1NpemUpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgICAgICAgICAgICAgICBUaHJvdWdocHV0OiAgICAgICAgICVmIE1lZ2FwaXhlbHMvc2VjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuIC8gZWxhcHNlZCk7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgICAgICAgICAgICAgICAgIE91dHB1dCBiaXQgc3RyZWFtOiAgJWYgTWVnYWJpdHMvc2VjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpdG90YWxKcGVnU2l6ZSAqIDguIC8gMTAwMDAwMC4gLyBlbGFwc2VkKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHF1aWV0ID09IDEpCisgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiTi9BICAgICBOL0EgICAgICIpOworICAgICAgICBqcGVnQnVmID0gbmV3IGJ5dGVbMV1bVEouYnVmU2l6ZSh0dGlsZXcsIHR0aWxlaCwgc3Vic2FtcCldOworICAgICAgICBqcGVnU2l6ZSA9IG5ldyBpbnRbMV07CisgICAgICAgIGpwZWdCdWZbMF0gPSBzcmNCdWY7CisgICAgICAgIGpwZWdTaXplWzBdID0gc3JjU2l6ZTsKKyAgICAgIH0KKworICAgICAgaWYgKHcgPT0gdGlsZXcpCisgICAgICAgIHR0aWxldyA9IHR3OworICAgICAgaWYgKGggPT0gdGlsZWgpCisgICAgICAgIHR0aWxlaCA9IHRoOworICAgICAgaWYgKCh4Zm9ybU9wdCAmIFRKVHJhbnNmb3JtLk9QVF9OT09VVFBVVCkgPT0gMCkKKyAgICAgICAgZGVjb21wKG51bGwsIGpwZWdCdWYsIGpwZWdTaXplLCBudWxsLCB0dywgdGgsIHRzdWJzYW1wLCAwLAorICAgICAgICAgICAgICAgZmlsZU5hbWUsIHR0aWxldywgdHRpbGVoKTsKKyAgICAgIGVsc2UgaWYgKHF1aWV0ID09IDEpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTi9BIik7CisKKyAgICAgIGpwZWdCdWYgPSBudWxsOworICAgICAganBlZ1NpemUgPSBudWxsOworCisgICAgICBpZiAodGlsZXcgPT0gdyAmJiB0aWxlaCA9PSBoKSBicmVhazsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkIHVzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaW50IGk7CisgICAgVEpTY2FsaW5nRmFjdG9yW10gc2NhbGluZ0ZhY3RvcnMgPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOworICAgIGludCBuc2YgPSBzY2FsaW5nRmFjdG9ycy5sZW5ndGg7CisgICAgU3RyaW5nIGNsYXNzTmFtZSA9IG5ldyBUSkJlbmNoKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVNBR0U6IGphdmEgIiArIGNsYXNzTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgPElucHV0ZmlsZSAoQk1QKT4gPFF1YWxpdHk+IFtvcHRpb25zXVxuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgamF2YSAiICsgY2xhc3NOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICA8SW5wdXRmaWxlIChKUEcpPiBbb3B0aW9uc11cbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3B0aW9uczpcbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWFsbG9jID0gRHluYW1pY2FsbHkgYWxsb2NhdGUgSlBFRyBpbWFnZSBidWZmZXJzIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItYm90dG9tdXAgPSBUZXN0IGJvdHRvbS11cCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItdGlsZSA9IFRlc3QgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvZGVjIHdoZW4gdGhlIGltYWdlIGlzIGVuY29kZWQgYXMgc2VwYXJhdGUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgdGlsZXMgb2YgdmFyeWluZyBzaXplcy4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1yZ2IsIC1iZ3IsIC1yZ2J4LCAtYmdyeCwgLXhiZ3IsIC14cmdiID0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgVGVzdCB0aGUgc3BlY2lmaWVkIGNvbG9yIGNvbnZlcnNpb24gcGF0aCBpbiB0aGUgY29kZWMgKGRlZmF1bHQgPSBCR1IpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItZmFzdHVwc2FtcGxlID0gVXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICB0aGUgdW5kZXJseWluZyBjb2RlYyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWZhc3RkY3QgPSBVc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtcyBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmciKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgY29kZWMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1hY2N1cmF0ZWRjdCA9IFVzZSB0aGUgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG1zIGF2YWlsYWJsZSBpbiB0aGUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgdW5kZXJseWluZyBjb2RlYyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXByb2dyZXNzaXZlID0gVXNlIHByb2dyZXNzaXZlIGVudHJvcHkgY29kaW5nIGluIEpQRUcgaW1hZ2VzIGdlbmVyYXRlZCBieSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBjb21wcmVzc2lvbiBhbmQgdHJhbnNmb3JtIG9wZXJhdGlvbnMuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItc3Vic2FtcCA8cz4gPSBXaGVuIHRlc3RpbmcgSlBFRyBjb21wcmVzc2lvbiwgdGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBsZXZlbCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byB1c2UgKDxzPiA9IDQ0NCwgNDIyLCA0NDAsIDQyMCwgNDExLCBvciIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBHUkFZKS4gIFRoZSBkZWZhdWx0IGlzIHRvIHRlc3QgR3JheXNjYWxlLCA0OjI6MCwgNDoyOjIsIGFuZCA0OjQ6NCBpbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBzZXF1ZW5jZS4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1xdWlldCA9IE91dHB1dCByZXN1bHRzIGluIHRhYnVsYXIgcmF0aGVyIHRoYW4gdmVyYm9zZSBmb3JtYXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi15dXYgPSBUZXN0IFlVViBlbmNvZGluZy9kZWNvZGluZyBmdW5jdGlvbnMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi15dXZwYWQgPHA+ID0gSWYgdGVzdGluZyBZVVYgZW5jb2RpbmcvZGVjb2RpbmcsIHRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgYnl0ZXMgdG8gd2hpY2ggZWFjaCByb3cgb2YgZWFjaCBwbGFuZSBpbiB0aGUgaW50ZXJtZWRpYXRlIFlVViBpbWFnZSBpcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBwYWRkZWQgKGRlZmF1bHQgPSAxKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXNjYWxlIE0vTiA9IFNjYWxlIGRvd24gdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgZGVjb21wcmVzc2VkIEpQRUcgaW1hZ2UgYnkgYSIpOworICAgIFN5c3RlbS5vdXQucHJpbnQgICgiICAgICBmYWN0b3Igb2YgTS9OIChNL04gPSAiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnNmOyBpKyspIHsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlZC8lZCIsIHNjYWxpbmdGYWN0b3JzW2ldLmdldE51bSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGluZ0ZhY3RvcnNbaV0uZ2V0RGVub20oKSk7CisgICAgICBpZiAobnNmID09IDIgJiYgaSAhPSBuc2YgLSAxKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgb3IgIik7CisgICAgICBlbHNlIGlmIChuc2YgPiAyKSB7CisgICAgICAgIGlmIChpICE9IG5zZiAtIDEpCisgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLCAiKTsKKyAgICAgICAgaWYgKGkgPT0gbnNmIC0gMikKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJvciAiKTsKKyAgICAgIH0KKyAgICAgIGlmIChpICUgOCA9PSAwICYmIGkgIT0gMCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gICAgICIpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIikiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1oZmxpcCwgLXZmbGlwLCAtdHJhbnNwb3NlLCAtdHJhbnN2ZXJzZSwgLXJvdDkwLCAtcm90MTgwLCAtcm90MjcwID0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgUGVyZm9ybSB0aGUgY29ycmVzcG9uZGluZyBsb3NzbGVzcyB0cmFuc2Zvcm0gcHJpb3IgdG8iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgZGVjb21wcmVzc2lvbiAodGhlc2Ugb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWdyYXlzY2FsZSA9IFBlcmZvcm0gbG9zc2xlc3MgZ3JheXNjYWxlIGNvbnZlcnNpb24gcHJpb3IgdG8gZGVjb21wcmVzc2lvbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICB0ZXN0IChjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgb3RoZXIgdHJhbnNmb3JtcyBhYm92ZSkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1jb3B5bm9uZSA9IERvIG5vdCBjb3B5IGFueSBleHRyYSBtYXJrZXJzIChpbmNsdWRpbmcgRVhJRiBhbmQgSUNDIHByb2ZpbGUgZGF0YSkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgd2hlbiB0cmFuc2Zvcm1pbmcgdGhlIGltYWdlLiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWJlbmNodGltZSA8dD4gPSBSdW4gZWFjaCBiZW5jaG1hcmsgZm9yIGF0IGxlYXN0IDx0PiBzZWNvbmRzIChkZWZhdWx0ID0gNS4wKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXdhcm11cCA8dD4gPSBSdW4gZWFjaCBiZW5jaG1hcmsgZm9yIDx0PiBzZWNvbmRzIChkZWZhdWx0ID0gMS4wKSBwcmlvciB0byIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBzdGFydGluZyB0aGUgdGltZXIsIGluIG9yZGVyIHRvIHByaW1lIHRoZSBjYWNoZXMgYW5kIHRodXMgaW1wcm92ZSB0aGUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgY29uc2lzdGVuY3kgb2YgdGhlIHJlc3VsdHMuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItY29tcG9ubHkgPSBTdG9wIGFmdGVyIHJ1bm5pbmcgY29tcHJlc3Npb24gdGVzdHMuICBEbyBub3QgdGVzdCBkZWNvbXByZXNzaW9uLiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLW5vd3JpdGUgPSBEbyBub3Qgd3JpdGUgcmVmZXJlbmNlIG9yIG91dHB1dCBpbWFnZXMgKGltcHJvdmVzIGNvbnNpc3RlbmN5Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIG9mIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cy4pIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItc3RvcG9ud2FybmluZyA9IEltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIHRoZSBjdXJyZW50Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24vdHJhbnNmb3JtIG9wZXJhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBjb2RlYyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICB0aHJvd3MgYSB3YXJuaW5nIChub24tZmF0YWwgZXJyb3IpXG4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5PVEU6ICBJZiB0aGUgcXVhbGl0eSBpcyBzcGVjaWZpZWQgYXMgYSByYW5nZSAoZS5nLiA5MC0xMDApLCBhIHNlcGFyYXRlIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IHdpbGwgYmUgcGVyZm9ybWVkIGZvciBhbGwgcXVhbGl0eSB2YWx1ZXMgaW4gdGhlIHJhbmdlLlxuIik7CisgICAgU3lzdGVtLmV4aXQoMSk7CisgIH0KKworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHsKKyAgICBieXRlW10gc3JjQnVmID0gbnVsbDsKKyAgICBpbnQgdyA9IDAsIGggPSAwLCBtaW5RdWFsID0gLTEsIG1heFF1YWwgPSAtMTsKKyAgICBpbnQgbWluQXJnID0gMSwgcmV0dmFsID0gMDsKKyAgICBpbnQgc3Vic2FtcCA9IC0xOworCisgICAgdHJ5IHsKKworICAgICAgaWYgKGFyZ3YubGVuZ3RoIDwgbWluQXJnKQorICAgICAgICB1c2FnZSgpOworCisgICAgICBTdHJpbmcgdGVtcFN0ciA9IGFyZ3ZbMF0udG9Mb3dlckNhc2UoKTsKKyAgICAgIGlmICh0ZW1wU3RyLmVuZHNXaXRoKCIuanBnIikgfHwgdGVtcFN0ci5lbmRzV2l0aCgiLmpwZWciKSkKKyAgICAgICAgZGVjb21wT25seSA9IHRydWU7CisKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisKKyAgICAgIGlmICghZGVjb21wT25seSkgeworICAgICAgICBtaW5BcmcgPSAyOworICAgICAgICBpZiAoYXJndi5sZW5ndGggPCBtaW5BcmcpCisgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBtaW5RdWFsID0gSW50ZWdlci5wYXJzZUludChhcmd2WzFdKTsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHt9CisgICAgICAgIGlmIChtaW5RdWFsIDwgMSB8fCBtaW5RdWFsID4gMTAwKQorICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlF1YWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMC4iKTsKKyAgICAgICAgaW50IGRhc2hJbmRleCA9IGFyZ3ZbMV0uaW5kZXhPZignLScpOworICAgICAgICBpZiAoZGFzaEluZGV4ID4gMCAmJiBhcmd2WzFdLmxlbmd0aCgpID4gZGFzaEluZGV4ICsgMSkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtYXhRdWFsID0gSW50ZWdlci5wYXJzZUludChhcmd2WzFdLnN1YnN0cmluZyhkYXNoSW5kZXggKyAxKSk7CisgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1heFF1YWwgPCAxIHx8IG1heFF1YWwgPiAxMDApCisgICAgICAgICAgbWF4UXVhbCA9IG1pblF1YWw7CisgICAgICB9CisKKyAgICAgIGlmIChhcmd2Lmxlbmd0aCA+IG1pbkFyZykgeworICAgICAgICBmb3IgKGludCBpID0gbWluQXJnOyBpIDwgYXJndi5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi10aWxlIikpIHsKKyAgICAgICAgICAgIGRvVGlsZSA9IHRydWU7ICB4Zm9ybU9wdCB8PSBUSlRyYW5zZm9ybS5PUFRfQ1JPUDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhc3R1cHNhbXBsZSIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIGZhc3QgdXBzYW1wbGluZyBjb2RlXG4iKTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRkFTVFVQU0FNUExFOworICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZmFzdGRjdCIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtXG4iKTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRkFTVERDVDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWFjY3VyYXRlZGN0IikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG1cbiIpOworICAgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19BQ0NVUkFURURDVDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXByb2dyZXNzaXZlIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmdcbiIpOworICAgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19QUk9HUkVTU0lWRTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJnYiIpKQorICAgICAgICAgICAgcGYgPSBUSi5QRl9SR0I7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItcmdieCIpKQorICAgICAgICAgICAgcGYgPSBUSi5QRl9SR0JYOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWJnciIpKQorICAgICAgICAgICAgcGYgPSBUSi5QRl9CR1I7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmdyeCIpKQorICAgICAgICAgICAgcGYgPSBUSi5QRl9CR1JYOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXhiZ3IiKSkKKyAgICAgICAgICAgIHBmID0gVEouUEZfWEJHUjsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi14cmdiIikpCisgICAgICAgICAgICBwZiA9IFRKLlBGX1hSR0I7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYm90dG9tdXAiKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfQk9UVE9NVVA7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItcXVpZXQiKSkKKyAgICAgICAgICAgIHF1aWV0ID0gMTsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1xcSIpKQorICAgICAgICAgICAgcXVpZXQgPSAyOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXNjYWxlIikgJiYgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgaW50IHRlbXAxID0gMCwgdGVtcDIgPSAwOworICAgICAgICAgICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlLCBzY2FubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKGFyZ3ZbKytpXSkudXNlRGVsaW1pdGVyKCIvIik7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHRlbXAxID0gc2Nhbm5lci5uZXh0SW50KCk7CisgICAgICAgICAgICAgIHRlbXAyID0gc2Nhbm5lci5uZXh0SW50KCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIGlmICh0ZW1wMiA8PSAwKSB0ZW1wMiA9IDE7CisgICAgICAgICAgICBpZiAodGVtcDEgPiAwKSB7CisgICAgICAgICAgICAgIFRKU2NhbGluZ0ZhY3RvcltdIHNjYWxpbmdGYWN0b3JzID0gVEouZ2V0U2NhbGluZ0ZhY3RvcnMoKTsKKworICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNjYWxpbmdGYWN0b3JzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKChkb3VibGUpdGVtcDEgLyAoZG91YmxlKXRlbXAyID09CisgICAgICAgICAgICAgICAgICAgIChkb3VibGUpc2NhbGluZ0ZhY3RvcnNbal0uZ2V0TnVtKCkgLworICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXNjYWxpbmdGYWN0b3JzW2pdLmdldERlbm9tKCkpIHsKKyAgICAgICAgICAgICAgICAgIHNmID0gc2NhbGluZ0ZhY3RvcnNbal07CisgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKCFtYXRjaCkgdXNhZ2UoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItaGZsaXAiKSkKKyAgICAgICAgICAgIHhmb3JtT3AgPSBUSlRyYW5zZm9ybS5PUF9IRkxJUDsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi12ZmxpcCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1ZGTElQOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXRyYW5zcG9zZSIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1RSQU5TUE9TRTsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi10cmFuc3ZlcnNlIikpCisgICAgICAgICAgICB4Zm9ybU9wID0gVEpUcmFuc2Zvcm0uT1BfVFJBTlNWRVJTRTsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1yb3Q5MCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1JPVDkwOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJvdDE4MCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1JPVDE4MDsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1yb3QyNzAiKSkKKyAgICAgICAgICAgIHhmb3JtT3AgPSBUSlRyYW5zZm9ybS5PUF9ST1QyNzA7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZ3JheXNjYWxlIikpCisgICAgICAgICAgICB4Zm9ybU9wdCB8PSBUSlRyYW5zZm9ybS5PUFRfR1JBWTsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1ub291dHB1dCIpKQorICAgICAgICAgICAgeGZvcm1PcHQgfD0gVEpUcmFuc2Zvcm0uT1BUX05PT1VUUFVUOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWNvcHlub25lIikpCisgICAgICAgICAgICB4Zm9ybU9wdCB8PSBUSlRyYW5zZm9ybS5PUFRfQ09QWU5PTkU7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmVuY2h0aW1lIikgJiYKKyAgICAgICAgICAgICAgICAgICBpIDwgYXJndi5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICBkb3VibGUgdGVtcCA9IC0xOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICB0ZW1wID0gRG91YmxlLnBhcnNlRG91YmxlKGFyZ3ZbKytpXSk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIGlmICh0ZW1wID4gMC4wKQorICAgICAgICAgICAgICBiZW5jaFRpbWUgPSB0ZW1wOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItd2FybXVwIikgJiYKKyAgICAgICAgICAgICAgICAgICAgIGkgPCBhcmd2Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0ZW1wID0gLTE7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHRlbXAgPSBEb3VibGUucGFyc2VEb3VibGUoYXJndlsrK2ldKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgaWYgKHRlbXAgPj0gMC4wKSB7CisgICAgICAgICAgICAgIHdhcm11cCA9IHRlbXA7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJXYXJtdXAgdGltZSA9ICUuMWYgc2Vjb25kc1xuXG4iLCB3YXJtdXApOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgfSBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi15dXYiKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIFlVViBwbGFuYXIgZW5jb2RpbmcvZGVjb2RpbmdcbiIpOworICAgICAgICAgICAgZG9ZVVYgPSB0cnVlOworICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCIteXV2cGFkIikgJiYKKyAgICAgICAgICAgICAgICAgICAgIGkgPCBhcmd2Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGludCB0ZW1wID0gMDsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgdGVtcCA9IEludGVnZXIucGFyc2VJbnQoYXJndlsrK2ldKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgaWYgKHRlbXAgPj0gMSkKKyAgICAgICAgICAgICAgeXV2UGFkID0gdGVtcDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXN1YnNhbXAiKSAmJgorICAgICAgICAgICAgICAgICAgICAgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgaWYgKGFyZ3ZbaV0udG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKCJHIikpCisgICAgICAgICAgICAgIHN1YnNhbXAgPSBUSi5TQU1QX0dSQVk7CisgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiNDQ0IikpCisgICAgICAgICAgICAgIHN1YnNhbXAgPSBUSi5TQU1QXzQ0NDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0MjIiKSkKKyAgICAgICAgICAgICAgc3Vic2FtcCA9IFRKLlNBTVBfNDIyOworICAgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHMoIjQ0MCIpKQorICAgICAgICAgICAgICBzdWJzYW1wID0gVEouU0FNUF80NDA7CisgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiNDIwIikpCisgICAgICAgICAgICAgIHN1YnNhbXAgPSBUSi5TQU1QXzQyMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0MTEiKSkKKyAgICAgICAgICAgICAgc3Vic2FtcCA9IFRKLlNBTVBfNDExOworICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItY29tcG9ubHkiKSkKKyAgICAgICAgICAgIGNvbXBPbmx5ID0gdHJ1ZTsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1ub3dyaXRlIikpCisgICAgICAgICAgICB3cml0ZSA9IGZhbHNlOworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXN0b3Bvbndhcm5pbmciKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfU1RPUE9OV0FSTklORzsKKyAgICAgICAgICBlbHNlIHVzYWdlKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHNmID09IG51bGwpCisgICAgICAgIHNmID0gbmV3IFRKU2NhbGluZ0ZhY3RvcigxLCAxKTsKKworICAgICAgaWYgKChzZi5nZXROdW0oKSAhPSAxIHx8IHNmLmdldERlbm9tKCkgIT0gMSkgJiYgZG9UaWxlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGlzYWJsaW5nIHRpbGVkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVzdHMsIGJlY2F1c2UgdGhvc2UgdGVzdHMgZG8gbm90Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid29yayB3aGVuIHNjYWxlZCBkZWNvbXByZXNzaW9uIGlzIGVuYWJsZWQuIik7CisgICAgICAgIGRvVGlsZSA9IGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAoIWRlY29tcE9ubHkpIHsKKyAgICAgICAgaW50W10gd2lkdGggPSBuZXcgaW50WzFdLCBoZWlnaHQgPSBuZXcgaW50WzFdOworCisgICAgICAgIHNyY0J1ZiA9IGxvYWRJbWFnZShhcmd2WzBdLCB3aWR0aCwgaGVpZ2h0LCBwZik7CisgICAgICAgIHcgPSB3aWR0aFswXTsgIGggPSBoZWlnaHRbMF07CisgICAgICAgIGludCBpbmRleCA9IC0xOworICAgICAgICBpZiAoKGluZGV4ID0gYXJndlswXS5sYXN0SW5kZXhPZignLicpKSA+PSAwKQorICAgICAgICAgIGFyZ3ZbMF0gPSBhcmd2WzBdLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICB9CisKKyAgICAgIGlmIChxdWlldCA9PSAxICYmICFkZWNvbXBPbmx5KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWxsIHBlcmZvcm1hbmNlIHZhbHVlcyBpbiBNcGl4ZWxzL3NlY1xuIik7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJCaXRtYXAgICAgIEpQRUcgICAgIEpQRUcgICVzICAlcyAgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb1RpbGUgPyAiVGlsZSAiIDogIkltYWdlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb1RpbGUgPyAiVGlsZSAiIDogIkltYWdlIikpOworICAgICAgICBpZiAoZG9ZVVYpCisgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRW5jb2RlICAiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiQ29tcCAgICBDb21wICAgIERlY29tcCAgIik7CisgICAgICAgIGlmIChkb1lVVikKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJEZWNvZGUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRm9ybWF0ICAgICBTdWJzYW1wICBRdWFsICBXaWR0aCAgSGVpZ2h0ICAiKTsKKyAgICAgICAgaWYgKGRvWVVWKQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBlcmYgICAgIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBlcmYgICAgUmF0aW8gICBQZXJmICAgICIpOworICAgICAgICBpZiAoZG9ZVVYpCisgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiUGVyZiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7CisgICAgICB9CisKKyAgICAgIGlmIChkZWNvbXBPbmx5KSB7CisgICAgICAgIGRlY29tcFRlc3QoYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5leGl0KHJldHZhbCk7CisgICAgICB9CisKKyAgICAgIFN5c3RlbS5nYygpOworICAgICAgaWYgKHN1YnNhbXAgPj0gMCAmJiBzdWJzYW1wIDwgVEouTlVNU0FNUCkgeworICAgICAgICBmb3IgKGludCBpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICAgICAgZnVsbFRlc3Qoc3JjQnVmLCB3LCBoLCBzdWJzYW1wLCBpLCBhcmd2WzBdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBtYXhRdWFsOyBpID49IG1pblF1YWw7IGktLSkKKyAgICAgICAgICBmdWxsVGVzdChzcmNCdWYsIHcsIGgsIFRKLlNBTVBfR1JBWSwgaSwgYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICBmb3IgKGludCBpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICAgICAgZnVsbFRlc3Qoc3JjQnVmLCB3LCBoLCBUSi5TQU1QXzQyMCwgaSwgYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICBmb3IgKGludCBpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICAgICAgZnVsbFRlc3Qoc3JjQnVmLCB3LCBoLCBUSi5TQU1QXzQyMiwgaSwgYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICBmb3IgKGludCBpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICAgICAgZnVsbFRlc3Qoc3JjQnVmLCB3LCBoLCBUSi5TQU1QXzQ0NCwgaSwgYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICB9CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUSkV4Y2VwdGlvbikgeworICAgICAgICBUSkV4Y2VwdGlvbiB0amUgPSAoVEpFeGNlcHRpb24pZTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKHRqZS5nZXRFcnJvckNvZGUoKSA9PSBUSi5FUlJfV0FSTklORyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6ICIgOiAiRVJST1I6ICIpICsgdGplLmdldE1lc3NhZ2UoKSk7CisgICAgICB9IGVsc2UKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICByZXR2YWwgPSAtMTsKKyAgICB9CisKKyAgICBTeXN0ZW0uZXhpdChyZXR2YWwpOworICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvVEpFeGFtcGxlLmphdmEgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL1RKRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTk4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL1RKRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxMiwgMjAxNC0yMDE1LCAyMDE3LTIwMTggRC4gUi4gQ29tbWFuZGVyLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIGhvdyB0byBjb21wcmVzcywgZGVjb21wcmVzcywgYW5kIHRyYW5zZm9ybSBKUEVHCisgKiBpbWFnZXMgdXNpbmcgdGhlIFR1cmJvSlBFRyBKYXZhIEFQSQorICovCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5pbWFnZS4qOworaW1wb3J0IGphdmEubmlvLio7CitpbXBvcnQgamF2YXguaW1hZ2Vpby4qOworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuKjsKKworCitAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jVHlwZSIpCitjbGFzcyBUSkV4YW1wbGUgaW1wbGVtZW50cyBUSkN1c3RvbUZpbHRlciB7CisKKyAgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19OQU1FID0KKyAgICBuZXcgVEpFeGFtcGxlKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisKKyAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NVQlNBTVAgPSBUSi5TQU1QXzQ0NDsKKyAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1FVQUxJVFkgPSA5NTsKKworCisgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBTVUJTQU1QX05BTUUgPSB7CisgICAgIjQ6NDo0IiwgIjQ6MjoyIiwgIjQ6MjowIiwgIkdyYXlzY2FsZSIsICI0OjQ6MCIsICI0OjE6MSIKKyAgfTsKKworICBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ09MT1JTUEFDRV9OQU1FID0geworICAgICJSR0IiLCAiWUNiQ3IiLCAiR1JBWSIsICJDTVlLIiwgIllDQ0siCisgIH07CisKKworICAvKiBEQ1QgZmlsdGVyIGV4YW1wbGUuICBUaGlzIHByb2R1Y2VzIGEgbmVnYXRpdmUgb2YgdGhlIGltYWdlLiAqLworCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkphdmFkb2NNZXRob2QiKQorICBwdWJsaWMgdm9pZCBjdXN0b21GaWx0ZXIoU2hvcnRCdWZmZXIgY29lZmZCdWZmZXIsIFJlY3RhbmdsZSBidWZmZXJSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGUgcGxhbmVSZWdpb24sIGludCBjb21wb25lbnRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFuc2Zvcm1JbmRleCwgVEpUcmFuc2Zvcm0gdHJhbnNmb3JtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlclJlZ2lvbi53aWR0aCAqIGJ1ZmZlclJlZ2lvbi5oZWlnaHQ7IGkrKykgeworICAgICAgY29lZmZCdWZmZXIucHV0KGksIChzaG9ydCkoLWNvZWZmQnVmZmVyLmdldChpKSkpOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQgdXNhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVNBR0U6IGphdmEgW0phdmEgb3B0aW9uc10gIiArIENMQVNTX05BTUUgKworICAgICAgICAgICAgICAgICAgICAgICAiIDxJbnB1dCBpbWFnZT4gPE91dHB1dCBpbWFnZT4gW29wdGlvbnNdXG4iKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5wdXQgYW5kIG91dHB1dCBpbWFnZXMgY2FuIGJlIGluIGFueSBpbWFnZSBmb3JtYXQgdGhhdCB0aGUgSmF2YSBJbWFnZSBJL08iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4dGVuc2lvbnMgdW5kZXJzdGFuZC4gIElmIGVpdGhlciBmaWxlbmFtZSBlbmRzIGluIGEgLmpwZyBleHRlbnNpb24sIHRoZW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRoZSBUdXJib0pQRUcgQVBJIHdpbGwgYmUgdXNlZCB0byBjb21wcmVzcyBvciBkZWNvbXByZXNzIHRoZSBpbWFnZS5cbiIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb21wcmVzc2lvbiBPcHRpb25zICh1c2VkIGlmIHRoZSBvdXRwdXQgaW1hZ2UgaXMgYSBKUEVHIGltYWdlKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItc3Vic2FtcCA8NDQ0fDQyMnw0MjB8Z3JheT4gPSBBcHBseSB0aGlzIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHdoZW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgY29tcHJlc3NpbmcgdGhlIG91dHB1dCBpbWFnZS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgc2FtZSBsZXZlbCBvZiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBzdWJzYW1wbGluZyBhcyBpbiB0aGUgaW5wdXQgaW1hZ2UsIGlmIHRoZSBpbnB1dCBpbWFnZSBpcyBhbHNvIGEgSlBFRyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBpbWFnZSwgb3IgdG8gdXNlIGdyYXlzY2FsZSBpZiB0aGUgaW5wdXQgaW1hZ2UgaXMgYSBncmF5c2NhbGUgbm9uLUpQRUciKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgaW1hZ2UsIG9yIHRvIHVzZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgU1VCU0FNUF9OQU1FW0RFRkFVTFRfU1VCU0FNUF0gKworICAgICAgICAgICAgICAgICAgICAgICAiIHN1YnNhbXBsaW5nIG90aGVyd2lzZS5cbiIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItcSA8MS0xMDA+ID0gQ29tcHJlc3MgdGhlIG91dHB1dCBpbWFnZSB3aXRoIHRoaXMgSlBFRyBxdWFsaXR5IGxldmVsIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIChkZWZhdWx0ID0gIiArIERFRkFVTFRfUVVBTElUWSArICIpLlxuIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlY29tcHJlc3Npb24gT3B0aW9ucyAodXNlZCBpZiB0aGUgaW5wdXQgaW1hZ2UgaXMgYSBKUEVHIGltYWdlKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXNjYWxlIE0vTiA9IFNjYWxlIHRoZSBpbnB1dCBpbWFnZSBieSBhIGZhY3RvciBvZiBNL04gd2hlbiBkZWNvbXByZXNzaW5nIGl0LiIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIihNL04gPSAiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNDQUxJTkdfRkFDVE9SUy5sZW5ndGg7IGkrKykgeworICAgICAgU3lzdGVtLm91dC5wcmludChTQ0FMSU5HX0ZBQ1RPUlNbaV0uZ2V0TnVtKCkgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgICBTQ0FMSU5HX0ZBQ1RPUlNbaV0uZ2V0RGVub20oKSk7CisgICAgICBpZiAoU0NBTElOR19GQUNUT1JTLmxlbmd0aCA9PSAyICYmIGkgIT0gU0NBTElOR19GQUNUT1JTLmxlbmd0aCAtIDEpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiBvciAiKTsKKyAgICAgIGVsc2UgaWYgKFNDQUxJTkdfRkFDVE9SUy5sZW5ndGggPiAyKSB7CisgICAgICAgIGlmIChpICE9IFNDQUxJTkdfRkFDVE9SUy5sZW5ndGggLSAxKQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiwgIik7CisgICAgICAgIGlmIChpID09IFNDQUxJTkdfRkFDVE9SUy5sZW5ndGggLSAyKQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIm9yICIpOworICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIilcbiIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItaGZsaXAsIC12ZmxpcCwgLXRyYW5zcG9zZSwgLXRyYW5zdmVyc2UsIC1yb3Q5MCwgLXJvdDE4MCwgLXJvdDI3MCA9Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIFBlcmZvcm0gb25lIG9mIHRoZXNlIGxvc3NsZXNzIHRyYW5zZm9ybSBvcGVyYXRpb25zIG9uIHRoZSBpbnB1dCBpbWFnZSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBwcmlvciB0byBkZWNvbXByZXNzaW5nIGl0ICh0aGVzZSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuKVxuIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1ncmF5c2NhbGUgPSBQZXJmb3JtIGxvc3NsZXNzIGdyYXlzY2FsZSBjb252ZXJzaW9uIG9uIHRoZSBpbnB1dCBpbWFnZSBwcmlvciIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICB0byBkZWNvbXByZXNzaW5nIGl0IChjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgb3RoZXIgdHJhbnNmb3JtIG9wZXJhdGlvbnMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgYWJvdmUuKVxuIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1jcm9wIFd4SCtYK1kgPSBQZXJmb3JtIGxvc3NsZXNzIGNyb3BwaW5nIG9uIHRoZSBpbnB1dCBpbWFnZSBwcmlvciB0byIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBkZWNvbXByZXNzaW5nIGl0LiAgWCBhbmQgWSBzcGVjaWZ5IHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgY3JvcHBpbmciKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgcmVnaW9uLCBhbmQgVyBhbmQgSCBzcGVjaWZ5IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBjcm9wcGluZyByZWdpb24uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIFggYW5kIFkgbXVzdCBiZSBldmVubHkgZGl2aWJsZSBieSB0aGUgTUNVIGJsb2NrIHNpemUgKDh4OCBpZiB0aGUgaW5wdXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgaW1hZ2Ugd2FzIGNvbXByZXNzZWQgdXNpbmcgbm8gc3Vic2FtcGxpbmcgb3IgZ3JheXNjYWxlLCAxNng4IGlmIGl0IHdhcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBjb21wcmVzc2VkIHVzaW5nIDQ6MjoyIHN1YnNhbXBsaW5nLCBvciAxNngxNiBpZiBpdCB3YXMgY29tcHJlc3NlZCB1c2luZyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICA0OjI6MCBzdWJzYW1wbGluZy4pXG4iKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2VuZXJhbCBPcHRpb25zIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1cbiIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItZGlzcGxheSA9IERpc3BsYXkgb3V0cHV0IGltYWdlIChPdXRwdXQgZmlsZW5hbWUgbmVlZCBub3QgYmUgc3BlY2lmaWVkIGluIHRoaXMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgY2FzZS4pXG4iKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWZhc3R1cHNhbXBsZSA9IFVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBhdmFpbGFibGUgaW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgdGhlIHVuZGVybHlpbmcgY29kZWMuXG4iKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWZhc3RkY3QgPSBVc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtcyBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmciKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgY29kZWMuXG4iKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWFjY3VyYXRlZGN0ID0gVXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobXMgYXZhaWxhYmxlIGluIHRoZSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICB1bmRlcmx5aW5nIGNvZGVjLlxuIik7CisKKyAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgfQorCisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgeworCisgICAgdHJ5IHsKKworICAgICAgVEpTY2FsaW5nRmFjdG9yIHNjYWxpbmdGYWN0b3IgPSBuZXcgVEpTY2FsaW5nRmFjdG9yKDEsIDEpOworICAgICAgaW50IG91dFN1YnNhbXAgPSAtMSwgb3V0UXVhbCA9IC0xOworICAgICAgVEpUcmFuc2Zvcm0geGZvcm0gPSBuZXcgVEpUcmFuc2Zvcm0oKTsKKyAgICAgIGJvb2xlYW4gZGlzcGxheSA9IGZhbHNlOworICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgICAgU3RyaW5nIGluRm9ybWF0ID0gImpwZyIsIG91dEZvcm1hdCA9ICJqcGciOworICAgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOworICAgICAgYnl0ZVtdIGltZ0J1ZiA9IG51bGw7CisKKyAgICAgIGlmIChhcmd2Lmxlbmd0aCA8IDIpCisgICAgICAgIHVzYWdlKCk7CisKKyAgICAgIGlmIChhcmd2WzFdLnN1YnN0cmluZygwLCAyKS5lcXVhbHNJZ25vcmVDYXNlKCItZCIpKQorICAgICAgICBkaXNwbGF5ID0gdHJ1ZTsKKworICAgICAgLyogUGFyc2UgYXJndW1lbnRzLiAqLworICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChhcmd2W2ldLmxlbmd0aCgpIDwgMikKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZWxzZSBpZiAoYXJndltpXS5sZW5ndGgoKSA+IDIgJiYKKyAgICAgICAgICAgICAgICAgYXJndltpXS5zdWJzdHJpbmcoMCwgMykuZXF1YWxzSWdub3JlQ2FzZSgiLXNjIikgJiYKKyAgICAgICAgICAgICAgICAgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgIGludCBtYXRjaCA9IDA7CisgICAgICAgICAgU3RyaW5nW10gc2NhbGVBcmcgPSBhcmd2WysraV0uc3BsaXQoIi8iKTsKKyAgICAgICAgICBpZiAoc2NhbGVBcmcubGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAgIFRKU2NhbGluZ0ZhY3RvciB0ZW1wc2YgPQorICAgICAgICAgICAgICBuZXcgVEpTY2FsaW5nRmFjdG9yKEludGVnZXIucGFyc2VJbnQoc2NhbGVBcmdbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoc2NhbGVBcmdbMV0pKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgU0NBTElOR19GQUNUT1JTLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgIGlmICh0ZW1wc2YuZXF1YWxzKFNDQUxJTkdfRkFDVE9SU1tqXSkpIHsKKyAgICAgICAgICAgICAgICBzY2FsaW5nRmFjdG9yID0gU0NBTElOR19GQUNUT1JTW2pdOworICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobWF0Y2ggIT0gMSkKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5sZW5ndGgoKSA+IDIgJiYKKyAgICAgICAgICAgICAgICAgICBhcmd2W2ldLnN1YnN0cmluZygwLCAzKS5lcXVhbHNJZ25vcmVDYXNlKCItc3UiKSAmJgorICAgICAgICAgICAgICAgICAgIGkgPCBhcmd2Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICBpKys7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDEpLmVxdWFsc0lnbm9yZUNhc2UoImciKSkKKyAgICAgICAgICAgIG91dFN1YnNhbXAgPSBUSi5TQU1QX0dSQVk7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHMoIjQ0NCIpKQorICAgICAgICAgICAgb3V0U3Vic2FtcCA9IFRKLlNBTVBfNDQ0OworICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0MjIiKSkKKyAgICAgICAgICAgIG91dFN1YnNhbXAgPSBUSi5TQU1QXzQyMjsKKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiNDIwIikpCisgICAgICAgICAgICBvdXRTdWJzYW1wID0gVEouU0FNUF80MjA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd2W2ldLnN1YnN0cmluZygwLCAyKS5lcXVhbHNJZ25vcmVDYXNlKCItcSIpICYmCisgICAgICAgICAgICAgICAgICAgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgIG91dFF1YWwgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3ZbKytpXSk7CisgICAgICAgICAgaWYgKG91dFF1YWwgPCAxIHx8IG91dFF1YWwgPiAxMDApCisgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDIpLmVxdWFsc0lnbm9yZUNhc2UoIi1nIikpCisgICAgICAgICAgeGZvcm0ub3B0aW9ucyB8PSBUSlRyYW5zZm9ybS5PUFRfR1JBWTsKKyAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItaGZsaXAiKSkKKyAgICAgICAgICB4Zm9ybS5vcCA9IFRKVHJhbnNmb3JtLk9QX0hGTElQOworICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi12ZmxpcCIpKQorICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfVkZMSVA7CisgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXRyYW5zcG9zZSIpKQorICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfVFJBTlNQT1NFOworICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi10cmFuc3ZlcnNlIikpCisgICAgICAgICAgeGZvcm0ub3AgPSBUSlRyYW5zZm9ybS5PUF9UUkFOU1ZFUlNFOworICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1yb3Q5MCIpKQorICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfUk9UOTA7CisgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJvdDE4MCIpKQorICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfUk9UMTgwOworICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1yb3QyNzAiKSkKKyAgICAgICAgICB4Zm9ybS5vcCA9IFRKVHJhbnNmb3JtLk9QX1JPVDI3MDsKKyAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItY3VzdG9tIikpCisgICAgICAgICAgeGZvcm0uY2YgPSBuZXcgVEpFeGFtcGxlKCk7CisgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0ubGVuZ3RoKCkgPiAyICYmCisgICAgICAgICAgICAgICAgIGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDIpLmVxdWFsc0lnbm9yZUNhc2UoIi1jIikgJiYKKyAgICAgICAgICAgICAgICAgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgIFN0cmluZ1tdIGNyb3BBcmcgPSBhcmd2WysraV0uc3BsaXQoIlt4XFwrXSIpOworICAgICAgICAgIGlmIChjcm9wQXJnLmxlbmd0aCAhPSA0KQorICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICB4Zm9ybS53aWR0aCA9IEludGVnZXIucGFyc2VJbnQoY3JvcEFyZ1swXSk7CisgICAgICAgICAgeGZvcm0uaGVpZ2h0ID0gSW50ZWdlci5wYXJzZUludChjcm9wQXJnWzFdKTsKKyAgICAgICAgICB4Zm9ybS54ID0gSW50ZWdlci5wYXJzZUludChjcm9wQXJnWzJdKTsKKyAgICAgICAgICB4Zm9ybS55ID0gSW50ZWdlci5wYXJzZUludChjcm9wQXJnWzNdKTsKKyAgICAgICAgICBpZiAoeGZvcm0ueCA8IDAgfHwgeGZvcm0ueSA8IDAgfHwgeGZvcm0ud2lkdGggPCAxIHx8CisgICAgICAgICAgICAgIHhmb3JtLmhlaWdodCA8IDEpCisgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgIHhmb3JtLm9wdGlvbnMgfD0gVEpUcmFuc2Zvcm0uT1BUX0NST1A7CisgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLWQiKSkKKyAgICAgICAgICBkaXNwbGF5ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZmFzdHVwc2FtcGxlIikpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIGZhc3QgdXBzYW1wbGluZyBjb2RlIik7CisgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19GQVNUVVBTQU1QTEU7CisgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZmFzdGRjdCIpKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobSIpOworICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRkFTVERDVDsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1hY2N1cmF0ZWRjdCIpKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSIpOworICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfQUNDVVJBVEVEQ1Q7CisgICAgICAgIH0gZWxzZSB1c2FnZSgpOworICAgICAgfQorCisgICAgICAvKiBEZXRlcm1pbmUgaW5wdXQgYW5kIG91dHB1dCBpbWFnZSBmb3JtYXRzIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9ucy4gKi8KKyAgICAgIFN0cmluZ1tdIGluRmlsZVRva2VucyA9IGFyZ3ZbMF0uc3BsaXQoIlxcLiIpOworICAgICAgaWYgKGluRmlsZVRva2Vucy5sZW5ndGggPiAxKQorICAgICAgICBpbkZvcm1hdCA9IGluRmlsZVRva2Vuc1tpbkZpbGVUb2tlbnMubGVuZ3RoIC0gMV07CisgICAgICBTdHJpbmdbXSBvdXRGaWxlVG9rZW5zOworICAgICAgaWYgKGRpc3BsYXkpCisgICAgICAgIG91dEZvcm1hdCA9ICJibXAiOworICAgICAgZWxzZSB7CisgICAgICAgIG91dEZpbGVUb2tlbnMgPSBhcmd2WzFdLnNwbGl0KCJcXC4iKTsKKyAgICAgICAgaWYgKG91dEZpbGVUb2tlbnMubGVuZ3RoID4gMSkKKyAgICAgICAgICBvdXRGb3JtYXQgPSBvdXRGaWxlVG9rZW5zW291dEZpbGVUb2tlbnMubGVuZ3RoIC0gMV07CisgICAgICB9CisKKyAgICAgIGlmIChpbkZvcm1hdC5lcXVhbHNJZ25vcmVDYXNlKCJqcGciKSkgeworICAgICAgICAvKiBJbnB1dCBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UuICBEZWNvbXByZXNzIGFuZC9vciB0cmFuc2Zvcm0gaXQuICovCisgICAgICAgIGJvb2xlYW4gZG9UcmFuc2Zvcm0gPSAoeGZvcm0ub3AgIT0gVEpUcmFuc2Zvcm0uT1BfTk9ORSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhmb3JtLm9wdGlvbnMgIT0gMCB8fCB4Zm9ybS5jZiAhPSBudWxsKTsKKworICAgICAgICAvKiBSZWFkIHRoZSBKUEVHIGZpbGUgaW50byBtZW1vcnkuICovCisgICAgICAgIEZpbGUganBlZ0ZpbGUgPSBuZXcgRmlsZShhcmd2WzBdKTsKKyAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oanBlZ0ZpbGUpOworICAgICAgICBpbnQganBlZ1NpemUgPSBmaXMuYXZhaWxhYmxlKCk7CisgICAgICAgIGlmIChqcGVnU2l6ZSA8IDEpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklucHV0IGZpbGUgY29udGFpbnMgbm8gZGF0YSIpOworICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIGJ5dGVbXSBqcGVnQnVmID0gbmV3IGJ5dGVbanBlZ1NpemVdOworICAgICAgICBmaXMucmVhZChqcGVnQnVmKTsKKyAgICAgICAgZmlzLmNsb3NlKCk7CisKKyAgICAgICAgVEpEZWNvbXByZXNzb3IgdGpkOworICAgICAgICBpZiAoZG9UcmFuc2Zvcm0pIHsKKyAgICAgICAgICAvKiBUcmFuc2Zvcm0gaXQuICovCisgICAgICAgICAgVEpUcmFuc2Zvcm1lciB0anQgPSBuZXcgVEpUcmFuc2Zvcm1lcihqcGVnQnVmKTsKKyAgICAgICAgICBUSlRyYW5zZm9ybVtdIHhmb3JtcyA9IG5ldyBUSlRyYW5zZm9ybVsxXTsKKyAgICAgICAgICB4Zm9ybXNbMF0gPSB4Zm9ybTsKKyAgICAgICAgICB4Zm9ybXNbMF0ub3B0aW9ucyB8PSBUSlRyYW5zZm9ybS5PUFRfVFJJTTsKKyAgICAgICAgICBUSkRlY29tcHJlc3NvcltdIHRqZHMgPSB0anQudHJhbnNmb3JtKHhmb3JtcywgMCk7CisgICAgICAgICAgdGpkID0gdGpkc1swXTsKKyAgICAgICAgICB0anQuY2xvc2UoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgdGpkID0gbmV3IFRKRGVjb21wcmVzc29yKGpwZWdCdWYpOworCisgICAgICAgIHdpZHRoID0gdGpkLmdldFdpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHRqZC5nZXRIZWlnaHQoKTsKKyAgICAgICAgaW50IGluU3Vic2FtcCA9IHRqZC5nZXRTdWJzYW1wKCk7CisgICAgICAgIGludCBpbkNvbG9yc3BhY2UgPSB0amQuZ2V0Q29sb3JzcGFjZSgpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoZG9UcmFuc2Zvcm0gPyAiVHJhbnNmb3JtZWQiIDogIklucHV0IikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBJbWFnZSAoanBnKTogICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcGl4ZWxzLCAiICsgU1VCU0FNUF9OQU1FW2luU3Vic2FtcF0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzdWJzYW1wbGluZywgIiArIENPTE9SU1BBQ0VfTkFNRVtpbkNvbG9yc3BhY2VdKTsKKworICAgICAgICBpZiAob3V0Rm9ybWF0LmVxdWFsc0lnbm9yZUNhc2UoImpwZyIpICYmIGRvVHJhbnNmb3JtICYmCisgICAgICAgICAgICBzY2FsaW5nRmFjdG9yLmlzT25lKCkgJiYgb3V0U3Vic2FtcCA8IDAgJiYgb3V0UXVhbCA8IDApIHsKKyAgICAgICAgICAvKiBJbnB1dCBpbWFnZSBoYXMgYmVlbiB0cmFuc2Zvcm1lZCwgYW5kIG5vIHJlLWNvbXByZXNzaW9uIG9wdGlvbnMKKyAgICAgICAgICAgICBoYXZlIGJlZW4gc2VsZWN0ZWQuICBXcml0ZSB0aGUgdHJhbnNmb3JtZWQgaW1hZ2UgdG8gZGlzayBhbmQKKyAgICAgICAgICAgICBleGl0LiAqLworICAgICAgICAgIEZpbGUgb3V0RmlsZSA9IG5ldyBGaWxlKGFyZ3ZbMV0pOworICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0RmlsZSk7CisgICAgICAgICAgZm9zLndyaXRlKHRqZC5nZXRKUEVHQnVmKCksIDAsIHRqZC5nZXRKUEVHU2l6ZSgpKTsKKyAgICAgICAgICBmb3MuY2xvc2UoKTsKKyAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNjYWxpbmcgYW5kL29yIGEgbm9uLUpQRUcgb3V0cHV0IGltYWdlIGZvcm1hdCBhbmQvb3IgY29tcHJlc3Npb24KKyAgICAgICAgICAgb3B0aW9ucyBoYXZlIGJlZW4gc2VsZWN0ZWQsIHNvIHdlIG5lZWQgdG8gZGVjb21wcmVzcyB0aGUKKyAgICAgICAgICAgaW5wdXQvdHJhbnNmb3JtZWQgaW1hZ2UuICovCisgICAgICAgIHdpZHRoID0gc2NhbGluZ0ZhY3Rvci5nZXRTY2FsZWQod2lkdGgpOworICAgICAgICBoZWlnaHQgPSBzY2FsaW5nRmFjdG9yLmdldFNjYWxlZChoZWlnaHQpOworICAgICAgICBpZiAob3V0U3Vic2FtcCA8IDApCisgICAgICAgICAgb3V0U3Vic2FtcCA9IGluU3Vic2FtcDsKKworICAgICAgICBpZiAoIW91dEZvcm1hdC5lcXVhbHNJZ25vcmVDYXNlKCJqcGciKSkKKyAgICAgICAgICBpbWcgPSB0amQuZGVjb21wcmVzcyh3aWR0aCwgaGVpZ2h0LCBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbWdCdWYgPSB0amQuZGVjb21wcmVzcyh3aWR0aCwgMCwgaGVpZ2h0LCBUSi5QRl9CR1JYLCBmbGFncyk7CisgICAgICAgIHRqZC5jbG9zZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogSW5wdXQgaW1hZ2UgaXMgbm90IGEgSlBFRyBpbWFnZS4gIExvYWQgaXQgaW50byBtZW1vcnkuICovCisgICAgICAgIGltZyA9IEltYWdlSU8ucmVhZChuZXcgRmlsZShhcmd2WzBdKSk7CisgICAgICAgIGlmIChpbWcgPT0gbnVsbCkKKyAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnB1dCBpbWFnZSB0eXBlIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHdpZHRoID0gaW1nLmdldFdpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IGltZy5nZXRIZWlnaHQoKTsKKyAgICAgICAgaWYgKG91dFN1YnNhbXAgPCAwKSB7CisgICAgICAgICAgaWYgKGltZy5nZXRUeXBlKCkgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0JZVEVfR1JBWSkKKyAgICAgICAgICAgIG91dFN1YnNhbXAgPSBUSi5TQU1QX0dSQVk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0U3Vic2FtcCA9IERFRkFVTFRfU1VCU0FNUDsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklucHV0IEltYWdlOiAgIiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwaXhlbHMiKTsKKyAgICAgIH0KKyAgICAgIFN5c3RlbS5nYygpOworICAgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJPdXRwdXQgSW1hZ2UgKCIgKyBvdXRGb3JtYXQgKyAiKTogICIgKyB3aWR0aCArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiB4ICIgKyBoZWlnaHQgKyAiIHBpeGVscyIpOworCisgICAgICBpZiAoZGlzcGxheSkgeworICAgICAgICAvKiBEaXNwbGF5IHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UgKi8KKyAgICAgICAgSW1hZ2VJY29uIGljb24gPSBuZXcgSW1hZ2VJY29uKGltZyk7CisgICAgICAgIEpMYWJlbCBsYWJlbCA9IG5ldyBKTGFiZWwoaWNvbiwgSkxhYmVsLkNFTlRFUik7CisgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG51bGwsIGxhYmVsLCAiT3V0cHV0IEltYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSk9wdGlvblBhbmUuUExBSU5fTUVTU0FHRSk7CisgICAgICB9IGVsc2UgaWYgKG91dEZvcm1hdC5lcXVhbHNJZ25vcmVDYXNlKCJqcGciKSkgeworICAgICAgICAvKiBPdXRwdXQgaW1hZ2UgZm9ybWF0IGlzIEpQRUcuICBDb21wcmVzcyB0aGUgdW5jb21wcmVzc2VkIGltYWdlLiAqLworICAgICAgICBpZiAob3V0UXVhbCA8IDApCisgICAgICAgICAgb3V0UXVhbCA9IERFRkFVTFRfUVVBTElUWTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIsICIgKyBTVUJTQU1QX05BTUVbb3V0U3Vic2FtcF0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzdWJzYW1wbGluZywgcXVhbGl0eSA9ICIgKyBvdXRRdWFsKTsKKworICAgICAgICBUSkNvbXByZXNzb3IgdGpjID0gbmV3IFRKQ29tcHJlc3NvcigpOworICAgICAgICB0amMuc2V0U3Vic2FtcChvdXRTdWJzYW1wKTsKKyAgICAgICAgdGpjLnNldEpQRUdRdWFsaXR5KG91dFF1YWwpOworICAgICAgICBpZiAoaW1nICE9IG51bGwpCisgICAgICAgICAgdGpjLnNldFNvdXJjZUltYWdlKGltZywgMCwgMCwgMCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0amMuc2V0U291cmNlSW1hZ2UoaW1nQnVmLCAwLCAwLCB3aWR0aCwgMCwgaGVpZ2h0LCBUSi5QRl9CR1JYKTsKKyAgICAgICAgYnl0ZVtdIGpwZWdCdWYgPSB0amMuY29tcHJlc3MoZmxhZ3MpOworICAgICAgICBpbnQganBlZ1NpemUgPSB0amMuZ2V0Q29tcHJlc3NlZFNpemUoKTsKKyAgICAgICAgdGpjLmNsb3NlKCk7CisKKyAgICAgICAgLyogV3JpdGUgdGhlIEpQRUcgaW1hZ2UgdG8gZGlzay4gKi8KKyAgICAgICAgRmlsZSBvdXRGaWxlID0gbmV3IEZpbGUoYXJndlsxXSk7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0RmlsZSk7CisgICAgICAgIGZvcy53cml0ZShqcGVnQnVmLCAwLCBqcGVnU2l6ZSk7CisgICAgICAgIGZvcy5jbG9zZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogT3V0cHV0IGltYWdlIGZvcm1hdCBpcyBub3QgSlBFRy4gIFNhdmUgdGhlIHVuY29tcHJlc3NlZCBpbWFnZQorICAgICAgICAgICBkaXJlY3RseSB0byBkaXNrLiAqLworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgICBGaWxlIG91dEZpbGUgPSBuZXcgRmlsZShhcmd2WzFdKTsKKyAgICAgICAgSW1hZ2VJTy53cml0ZShpbWcsIG91dEZvcm1hdCwgb3V0RmlsZSk7CisgICAgICB9CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgZmluYWwgVEpTY2FsaW5nRmFjdG9yW10gU0NBTElOR19GQUNUT1JTID0KKyAgICBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOworfTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvVEpVbml0VGVzdC5qYXZhIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9USlVuaXRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhZDVmZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvVEpVbml0VGVzdC5qYXZhCkBAIC0wLDAgKzEsOTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxOCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSB0ZXN0cyB0aGUgdmFyaW91cyBjb2RlIHBhdGhzIGluIHRoZSBUdXJib0pQRUcgSk5JIFdyYXBwZXIKKyAqLworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEuYXd0LmltYWdlLio7CitpbXBvcnQgamF2YXguaW1hZ2Vpby4qOworaW1wb3J0IGphdmEubmlvLio7CitpbXBvcnQgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuKjsKKworQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY1R5cGUiKQorZmluYWwgY2xhc3MgVEpVbml0VGVzdCB7CisKKyAgcHJpdmF0ZSBUSlVuaXRUZXN0KCkge30KKworICBzdGF0aWMgZmluYWwgU3RyaW5nIENMQVNTX05BTUUgPQorICAgIG5ldyBUSlVuaXRUZXN0KCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisKKyAgc3RhdGljIHZvaWQgdXNhZ2UoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblVTQUdFOiBqYXZhICIgKyBDTEFTU19OQU1FICsgIiBbb3B0aW9uc11cbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3B0aW9uczoiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi15dXYgPSB0ZXN0IFlVViBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItbm95dXZwYWQgPSBkbyBub3QgcGFkIGVhY2ggbGluZSBvZiBlYWNoIFksIFUsIGFuZCBWIHBsYW5lIHRvIHRoZSBuZWFyZXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgICA0LWJ5dGUgYm91bmRhcnkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1iaSA9IHRlc3QgQnVmZmVyZWRJbWFnZSBzdXBwb3J0XG4iKTsKKyAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgfQorCisgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBTVUJOQU1FX0xPTkcgPSB7CisgICAgIjQ6NDo0IiwgIjQ6MjoyIiwgIjQ6MjowIiwgIkdSQVkiLCAiNDo0OjAiLCAiNDoxOjEiCisgIH07CisgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBTVUJOQU1FID0geworICAgICI0NDQiLCAiNDIyIiwgIjQyMCIsICJHUkFZIiwgIjQ0MCIsICI0MTEiCisgIH07CisKKyAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFBJWEZPUk1BVFNUUiA9IHsKKyAgICAiUkdCIiwgIkJHUiIsICJSR0JYIiwgIkJHUlgiLCAiWEJHUiIsICJYUkdCIiwgIkdyYXlzY2FsZSIsCisgICAgIlJHQkEiLCAiQkdSQSIsICJBQkdSIiwgIkFSR0IiLCAiQ01ZSyIKKyAgfTsKKworICBzdGF0aWMgZmluYWwgaW50W10gRk9STUFUU18zQllURSA9IHsKKyAgICBUSi5QRl9SR0IsIFRKLlBGX0JHUgorICB9OworICBzdGF0aWMgZmluYWwgaW50W10gRk9STUFUU18zQllURUJJID0geworICAgIEJ1ZmZlcmVkSW1hZ2UuVFlQRV8zQllURV9CR1IKKyAgfTsKKyAgc3RhdGljIGZpbmFsIGludFtdIEZPUk1BVFNfNEJZVEUgPSB7CisgICAgVEouUEZfUkdCWCwgVEouUEZfQkdSWCwgVEouUEZfWEJHUiwgVEouUEZfWFJHQiwgVEouUEZfQ01ZSworICB9OworICBzdGF0aWMgZmluYWwgaW50W10gRk9STUFUU180QllURUJJID0geworICAgIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQkdSLCBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQiwKKyAgICBCdWZmZXJlZEltYWdlLlRZUEVfNEJZVEVfQUJHUiwgQnVmZmVyZWRJbWFnZS5UWVBFXzRCWVRFX0FCR1JfUFJFLAorICAgIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQiwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCX1BSRQorICB9OworICBzdGF0aWMgZmluYWwgaW50W10gRk9STUFUU19HUkFZID0geworICAgIFRKLlBGX0dSQVkKKyAgfTsKKyAgc3RhdGljIGZpbmFsIGludFtdIEZPUk1BVFNfR1JBWUJJID0geworICAgIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9CWVRFX0dSQVkKKyAgfTsKKyAgc3RhdGljIGZpbmFsIGludFtdIEZPUk1BVFNfUkdCID0geworICAgIFRKLlBGX1JHQgorICB9OworCisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9ZVVYgPSBmYWxzZTsKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IHBhZCA9IDQ7CisgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gYmkgPSBmYWxzZTsKKworICBwcml2YXRlIHN0YXRpYyBpbnQgZXhpdFN0YXR1cyA9IDA7CisKKyAgc3RhdGljIGludCBiaVR5cGVQRihpbnQgYmlUeXBlKSB7CisgICAgQnl0ZU9yZGVyIGJ5dGVPcmRlciA9IEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpOworICAgIHN3aXRjaCAoYmlUeXBlKSB7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfM0JZVEVfQkdSOgorICAgICAgcmV0dXJuIFRKLlBGX0JHUjsKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV80QllURV9BQkdSOgorICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzRCWVRFX0FCR1JfUFJFOgorICAgICAgcmV0dXJuIFRKLlBGX0FCR1I7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfQllURV9HUkFZOgorICAgICAgcmV0dXJuIFRKLlBGX0dSQVk7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0JHUjoKKyAgICAgIHJldHVybiBUSi5QRl9SR0JYOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6CisgICAgICByZXR1cm4gVEouUEZfQkdSWDsKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjoKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQl9QUkU6CisgICAgICByZXR1cm4gVEouUEZfQkdSQTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyAgc3RhdGljIFN0cmluZyBiaVR5cGVTdHIoaW50IGJpVHlwZSkgeworICAgIHN3aXRjaCAoYmlUeXBlKSB7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfM0JZVEVfQkdSOgorICAgICAgcmV0dXJuICIzQllURV9CR1IiOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzRCWVRFX0FCR1I6CisgICAgICByZXR1cm4gIjRCWVRFX0FCR1IiOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzRCWVRFX0FCR1JfUFJFOgorICAgICAgcmV0dXJuICI0QllURV9BQkdSX1BSRSI7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfQllURV9HUkFZOgorICAgICAgcmV0dXJuICJCWVRFX0dSQVkiOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1I6CisgICAgICByZXR1cm4gIklOVF9CR1IiOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6CisgICAgICByZXR1cm4gIklOVF9SR0IiOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCOgorICAgICAgcmV0dXJuICJJTlRfQVJHQiI7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFOgorICAgICAgcmV0dXJuICJJTlRfQVJHQl9QUkUiOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KKyAgfQorCisgIHN0YXRpYyB2b2lkIGluaXRCdWYoYnl0ZVtdIGJ1ZiwgaW50IHcsIGludCBwaXRjaCwgaW50IGgsIGludCBwZiwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIGludCByb2Zmc2V0ID0gVEouZ2V0UmVkT2Zmc2V0KHBmKTsKKyAgICBpbnQgZ29mZnNldCA9IFRKLmdldEdyZWVuT2Zmc2V0KHBmKTsKKyAgICBpbnQgYm9mZnNldCA9IFRKLmdldEJsdWVPZmZzZXQocGYpOworICAgIGludCBhb2Zmc2V0ID0gVEouZ2V0QWxwaGFPZmZzZXQocGYpOworICAgIGludCBwcyA9IFRKLmdldFBpeGVsU2l6ZShwZik7CisgICAgaW50IGluZGV4LCByb3csIGNvbCwgaGFsZndheSA9IDE2OworCisgICAgaWYgKHBmID09IFRKLlBGX0dSQVkpIHsKKyAgICAgIEFycmF5cy5maWxsKGJ1ZiwgKGJ5dGUpMCk7CisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKKyAgICAgICAgICBpZiAoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKKyAgICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiAoaCAtIHJvdyAtIDEpICsgY29sOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiByb3cgKyBjb2w7CisgICAgICAgICAgaWYgKCgocm93IC8gOCkgKyAoY29sIC8gOCkpICUgMiA9PSAwKQorICAgICAgICAgICAgYnVmW2luZGV4XSA9IChyb3cgPCBoYWxmd2F5KSA/IChieXRlKTI1NSA6IDA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnVmW2luZGV4XSA9IChyb3cgPCBoYWxmd2F5KSA/IDc2IDogKGJ5dGUpMjI2OworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwZiA9PSBUSi5QRl9DTVlLKSB7CisgICAgICBBcnJheXMuZmlsbChidWYsIChieXRlKTI1NSk7CisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKKyAgICAgICAgICBpZiAoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKKyAgICAgICAgICAgIGluZGV4ID0gKGggLSByb3cgLSAxKSAqIHcgKyBjb2w7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZXggPSByb3cgKiB3ICsgY29sOworICAgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgICAgaWYgKHJvdyA+PSBoYWxmd2F5KSBidWZbaW5kZXggKiBwcyArIDNdID0gMDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmW2luZGV4ICogcHMgKyAyXSA9IDA7CisgICAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkKKyAgICAgICAgICAgICAgYnVmW2luZGV4ICogcHMgKyAxXSA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXJyYXlzLmZpbGwoYnVmLCAoYnl0ZSkwKTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgICAgIGlmICgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKQorICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiAoaCAtIHJvdyAtIDEpICsgY29sICogcHM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbmRleCA9IHBpdGNoICogcm93ICsgY29sICogcHM7CisgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgICBidWZbaW5kZXggKyByb2Zmc2V0XSA9IChieXRlKTI1NTsKKyAgICAgICAgICAgIGJ1ZltpbmRleCArIGdvZmZzZXRdID0gKGJ5dGUpMjU1OworICAgICAgICAgICAgYnVmW2luZGV4ICsgYm9mZnNldF0gPSAoYnl0ZSkyNTU7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJ1ZltpbmRleCArIHJvZmZzZXRdID0gKGJ5dGUpMjU1OworICAgICAgICAgIGlmIChyb3cgPj0gaGFsZndheSkKKyAgICAgICAgICAgIGJ1ZltpbmRleCArIGdvZmZzZXRdID0gKGJ5dGUpMjU1OworICAgICAgICB9CisgICAgICAgIGlmIChhb2Zmc2V0ID49IDApCisgICAgICAgICAgYnVmW2luZGV4ICsgYW9mZnNldF0gPSAoYnl0ZSkyNTU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgc3RhdGljIHZvaWQgaW5pdEludEJ1ZihpbnRbXSBidWYsIGludCB3LCBpbnQgcGl0Y2gsIGludCBoLCBpbnQgcGYsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbnQgcnNoaWZ0ID0gVEouZ2V0UmVkT2Zmc2V0KHBmKSAqIDg7CisgICAgaW50IGdzaGlmdCA9IFRKLmdldEdyZWVuT2Zmc2V0KHBmKSAqIDg7CisgICAgaW50IGJzaGlmdCA9IFRKLmdldEJsdWVPZmZzZXQocGYpICogODsKKyAgICBpbnQgYXNoaWZ0ID0gVEouZ2V0QWxwaGFPZmZzZXQocGYpICogODsKKyAgICBpbnQgaW5kZXgsIHJvdywgY29sLCBoYWxmd2F5ID0gMTY7CisKKyAgICBBcnJheXMuZmlsbChidWYsIDApOworICAgIGZvciAocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKKyAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKKyAgICAgICAgaWYgKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApCisgICAgICAgICAgaW5kZXggPSBwaXRjaCAqIChoIC0gcm93IC0gMSkgKyBjb2w7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbmRleCA9IHBpdGNoICogcm93ICsgY29sOworICAgICAgICBpZiAoKChyb3cgLyA4KSArIChjb2wgLyA4KSkgJSAyID09IDApIHsKKyAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgeworICAgICAgICAgICAgYnVmW2luZGV4XSB8PSAoMjU1IDw8IHJzaGlmdCk7CisgICAgICAgICAgICBidWZbaW5kZXhdIHw9ICgyNTUgPDwgZ3NoaWZ0KTsKKyAgICAgICAgICAgIGJ1ZltpbmRleF0gfD0gKDI1NSA8PCBic2hpZnQpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBidWZbaW5kZXhdIHw9ICgyNTUgPDwgcnNoaWZ0KTsKKyAgICAgICAgICBpZiAocm93ID49IGhhbGZ3YXkpCisgICAgICAgICAgICBidWZbaW5kZXhdIHw9ICgyNTUgPDwgZ3NoaWZ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXNoaWZ0ID49IDApCisgICAgICAgICAgYnVmW2luZGV4XSB8PSAoMjU1IDw8IGFzaGlmdCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgc3RhdGljIHZvaWQgaW5pdEltZyhCdWZmZXJlZEltYWdlIGltZywgaW50IHBmLCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gaW1nLmdldFJhc3RlcigpOworICAgIGludCBpbWdUeXBlID0gaW1nLmdldFR5cGUoKTsKKworICAgIGlmIChpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCIHx8CisgICAgICAgIGltZ1R5cGUgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1IgfHwKKyAgICAgICAgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IgfHwKKyAgICAgICAgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFKSB7CisgICAgICBTaW5nbGVQaXhlbFBhY2tlZFNhbXBsZU1vZGVsIHNtID0KKyAgICAgICAgKFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwpaW1nLmdldFNhbXBsZU1vZGVsKCk7CisgICAgICBpbnQgcGl0Y2ggPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOworICAgICAgRGF0YUJ1ZmZlckludCBkYiA9IChEYXRhQnVmZmVySW50KXdyLmdldERhdGFCdWZmZXIoKTsKKyAgICAgIGludFtdIGJ1ZiA9IGRiLmdldERhdGEoKTsKKyAgICAgIGluaXRJbnRCdWYoYnVmLCBpbWcuZ2V0V2lkdGgoKSwgcGl0Y2gsIGltZy5nZXRIZWlnaHQoKSwgcGYsIGZsYWdzKTsKKyAgICB9IGVsc2UgeworICAgICAgQ29tcG9uZW50U2FtcGxlTW9kZWwgc20gPSAoQ29tcG9uZW50U2FtcGxlTW9kZWwpaW1nLmdldFNhbXBsZU1vZGVsKCk7CisgICAgICBpbnQgcGl0Y2ggPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOworICAgICAgRGF0YUJ1ZmZlckJ5dGUgZGIgPSAoRGF0YUJ1ZmZlckJ5dGUpd3IuZ2V0RGF0YUJ1ZmZlcigpOworICAgICAgYnl0ZVtdIGJ1ZiA9IGRiLmdldERhdGEoKTsKKyAgICAgIGluaXRCdWYoYnVmLCBpbWcuZ2V0V2lkdGgoKSwgcGl0Y2gsIGltZy5nZXRIZWlnaHQoKSwgcGYsIGZsYWdzKTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgdm9pZCBjaGVja1ZhbChpbnQgcm93LCBpbnQgY29sLCBpbnQgdiwgU3RyaW5nIHZuYW1lLCBpbnQgY3YpCisgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIHYgPSAodiA8IDApID8gdiArIDI1NiA6IHY7CisgICAgaWYgKHYgPCBjdiAtIDEgfHwgdiA+IGN2ICsgMSkgeworICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ29tcC4gIiArIHZuYW1lICsgIiBhdCAiICsgcm93ICsgIiwiICsgY29sICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzaG91bGQgYmUgIiArIGN2ICsgIiwgbm90ICIgKyB2KTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgdm9pZCBjaGVja1ZhbDAoaW50IHJvdywgaW50IGNvbCwgaW50IHYsIFN0cmluZyB2bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIHYgPSAodiA8IDApID8gdiArIDI1NiA6IHY7CisgICAgaWYgKHYgPiAxKSB7CisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDb21wLiAiICsgdm5hbWUgKyAiIGF0ICIgKyByb3cgKyAiLCIgKyBjb2wgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiIHNob3VsZCBiZSAwLCBub3QgIiArIHYpOworICAgIH0KKyAgfQorCisgIHN0YXRpYyB2b2lkIGNoZWNrVmFsMjU1KGludCByb3csIGludCBjb2wsIGludCB2LCBTdHJpbmcgdm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIHYgPSAodiA8IDApID8gdiArIDI1NiA6IHY7CisgICAgaWYgKHYgPCAyNTQpIHsKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvbXAuICIgKyB2bmFtZSArICIgYXQgIiArIHJvdyArICIsIiArIGNvbCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2hvdWxkIGJlIDI1NSwgbm90ICIgKyB2KTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgaW50IGNoZWNrQnVmKGJ5dGVbXSBidWYsIGludCB3LCBpbnQgcGl0Y2gsIGludCBoLCBpbnQgcGYsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgIFRKU2NhbGluZ0ZhY3RvciBzZiwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbnQgcm9mZnNldCA9IFRKLmdldFJlZE9mZnNldChwZik7CisgICAgaW50IGdvZmZzZXQgPSBUSi5nZXRHcmVlbk9mZnNldChwZik7CisgICAgaW50IGJvZmZzZXQgPSBUSi5nZXRCbHVlT2Zmc2V0KHBmKTsKKyAgICBpbnQgYW9mZnNldCA9IFRKLmdldEFscGhhT2Zmc2V0KHBmKTsKKyAgICBpbnQgcHMgPSBUSi5nZXRQaXhlbFNpemUocGYpOworICAgIGludCBpbmRleCwgcm93LCBjb2wsIHJldHZhbCA9IDE7CisgICAgaW50IGhhbGZ3YXkgPSAxNiAqIHNmLmdldE51bSgpIC8gc2YuZ2V0RGVub20oKTsKKyAgICBpbnQgYmxvY2tTaXplID0gOCAqIHNmLmdldE51bSgpIC8gc2YuZ2V0RGVub20oKTsKKworICAgIHRyeSB7CisKKyAgICAgIGlmIChwZiA9PSBUSi5QRl9HUkFZKQorICAgICAgICByb2Zmc2V0ID0gZ29mZnNldCA9IGJvZmZzZXQgPSAwOworCisgICAgICBpZiAocGYgPT0gVEouUEZfQ01ZSykgeworICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICAgICAgaWYgKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApCisgICAgICAgICAgICAgIGluZGV4ID0gKGggLSByb3cgLSAxKSAqIHcgKyBjb2w7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGluZGV4ID0gcm93ICogdyArIGNvbDsKKyAgICAgICAgICAgIGJ5dGUgYyA9IGJ1ZltpbmRleCAqIHBzXTsKKyAgICAgICAgICAgIGJ5dGUgbSA9IGJ1ZltpbmRleCAqIHBzICsgMV07CisgICAgICAgICAgICBieXRlIHkgPSBidWZbaW5kZXggKiBwcyArIDJdOworICAgICAgICAgICAgYnl0ZSBrID0gYnVmW2luZGV4ICogcHMgKyAzXTsKKyAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBjLCAiQyIpOworICAgICAgICAgICAgaWYgKCgocm93IC8gYmxvY2tTaXplKSArIChjb2wgLyBibG9ja1NpemUpKSAlIDIgPT0gMCkgeworICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgbSwgIk0iKTsKKyAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIHksICJZIik7CisgICAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KQorICAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBrLCAiSyIpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCBrLCAiSyIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCB5LCAiWSIpOworICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgaywgIksiKTsKKyAgICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpCisgICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCBtLCAiTSIpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIG0sICJNIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGhhbGZ3YXk7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKKyAgICAgICAgICBpZiAoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKKyAgICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiAoaCAtIHJvdyAtIDEpICsgY29sICogcHM7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZXggPSBwaXRjaCAqIHJvdyArIGNvbCAqIHBzOworICAgICAgICAgIGJ5dGUgciA9IGJ1ZltpbmRleCArIHJvZmZzZXRdOworICAgICAgICAgIGJ5dGUgZyA9IGJ1ZltpbmRleCArIGdvZmZzZXRdOworICAgICAgICAgIGJ5dGUgYiA9IGJ1ZltpbmRleCArIGJvZmZzZXRdOworICAgICAgICAgIGJ5dGUgYSA9IGFvZmZzZXQgPj0gMCA/IGJ1ZltpbmRleCArIGFvZmZzZXRdIDogKGJ5dGUpMjU1OworICAgICAgICAgIGlmICgoKHJvdyAvIGJsb2NrU2l6ZSkgKyAoY29sIC8gYmxvY2tTaXplKSkgJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCByLCAiUiIpOworICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgZywgIkciKTsKKyAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIGIsICJCIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIHIsICJSIik7CisgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgZywgIkciKTsKKyAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCBiLCAiQiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkpIHsKKyAgICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpIHsKKyAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgciwgIlIiLCA3Nik7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIGcsICJHIiwgNzYpOworICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCBiLCAiQiIsIDc2KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgciwgIlIiLCAyMjYpOworICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCBnLCAiRyIsIDIyNik7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIGIsICJCIiwgMjI2KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIHIsICJSIik7CisgICAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCBnLCAiRyIpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBnLCAiRyIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgYiwgIkIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIGEsICJBIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICByZXR2YWwgPSAwOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgICAgICAgaWYgKHBmID09IFRKLlBGX0NNWUspIHsKKyAgICAgICAgICAgIGludCBjID0gYnVmW3BpdGNoICogcm93ICsgY29sICogcHNdOworICAgICAgICAgICAgaW50IG0gPSBidWZbcGl0Y2ggKiByb3cgKyBjb2wgKiBwcyArIDFdOworICAgICAgICAgICAgaW50IHkgPSBidWZbcGl0Y2ggKiByb3cgKyBjb2wgKiBwcyArIDJdOworICAgICAgICAgICAgaW50IGsgPSBidWZbcGl0Y2ggKiByb3cgKyBjb2wgKiBwcyArIDNdOworICAgICAgICAgICAgaWYgKGMgPCAwKSBjICs9IDI1NjsKKyAgICAgICAgICAgIGlmIChtIDwgMCkgbSArPSAyNTY7CisgICAgICAgICAgICBpZiAoeSA8IDApIHkgKz0gMjU2OworICAgICAgICAgICAgaWYgKGsgPCAwKSBrICs9IDI1NjsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlM2QvJTNkLyUzZC8lM2QgIiwgYywgbSwgeSwgayk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCByID0gYnVmW3BpdGNoICogcm93ICsgY29sICogcHMgKyByb2Zmc2V0XTsKKyAgICAgICAgICAgIGludCBnID0gYnVmW3BpdGNoICogcm93ICsgY29sICogcHMgKyBnb2Zmc2V0XTsKKyAgICAgICAgICAgIGludCBiID0gYnVmW3BpdGNoICogcm93ICsgY29sICogcHMgKyBib2Zmc2V0XTsKKyAgICAgICAgICAgIGlmIChyIDwgMCkgciArPSAyNTY7CisgICAgICAgICAgICBpZiAoZyA8IDApIGcgKz0gMjU2OworICAgICAgICAgICAgaWYgKGIgPCAwKSBiICs9IDI1NjsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlM2QvJTNkLyUzZCAiLCByLCBnLCBiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKKyAgfQorCisgIHN0YXRpYyBpbnQgY2hlY2tJbnRCdWYoaW50W10gYnVmLCBpbnQgdywgaW50IHBpdGNoLCBpbnQgaCwgaW50IHBmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdWJzYW1wLCBUSlNjYWxpbmdGYWN0b3Igc2YsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbnQgcnNoaWZ0ID0gVEouZ2V0UmVkT2Zmc2V0KHBmKSAqIDg7CisgICAgaW50IGdzaGlmdCA9IFRKLmdldEdyZWVuT2Zmc2V0KHBmKSAqIDg7CisgICAgaW50IGJzaGlmdCA9IFRKLmdldEJsdWVPZmZzZXQocGYpICogODsKKyAgICBpbnQgYXNoaWZ0ID0gVEouZ2V0QWxwaGFPZmZzZXQocGYpICogODsKKyAgICBpbnQgaW5kZXgsIHJvdywgY29sLCByZXR2YWwgPSAxOworICAgIGludCBoYWxmd2F5ID0gMTYgKiBzZi5nZXROdW0oKSAvIHNmLmdldERlbm9tKCk7CisgICAgaW50IGJsb2NrU2l6ZSA9IDggKiBzZi5nZXROdW0oKSAvIHNmLmdldERlbm9tKCk7CisKKyAgICB0cnkgeworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoYWxmd2F5OyByb3crKykgeworICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgICAgICAgaWYgKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApCisgICAgICAgICAgICBpbmRleCA9IHBpdGNoICogKGggLSByb3cgLSAxKSArIGNvbDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmRleCA9IHBpdGNoICogcm93ICsgY29sOworICAgICAgICAgIGludCByID0gKGJ1ZltpbmRleF0gPj4gcnNoaWZ0KSAmIDB4RkY7CisgICAgICAgICAgaW50IGcgPSAoYnVmW2luZGV4XSA+PiBnc2hpZnQpICYgMHhGRjsKKyAgICAgICAgICBpbnQgYiA9IChidWZbaW5kZXhdID4+IGJzaGlmdCkgJiAweEZGOworICAgICAgICAgIGludCBhID0gYXNoaWZ0ID49IDAgPyAoYnVmW2luZGV4XSA+PiBhc2hpZnQpICYgMHhGRiA6IDI1NTsKKyAgICAgICAgICBpZiAoKChyb3cgLyBibG9ja1NpemUpICsgKGNvbCAvIGJsb2NrU2l6ZSkpICUgMiA9PSAwKSB7CisgICAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgeworICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgciwgIlIiKTsKKyAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIGcsICJHIik7CisgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBiLCAiQiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCByLCAiUiIpOworICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIGcsICJHIik7CisgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgYiwgIkIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHN1YnNhbXAgPT0gVEouU0FNUF9HUkFZKSB7CisgICAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIHIsICJSIiwgNzYpOworICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCBnLCAiRyIsIDc2KTsKKyAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgYiwgIkIiLCA3Nik7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIHIsICJSIiwgMjI2KTsKKyAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgZywgIkciLCAyMjYpOworICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCBiLCAiQiIsIDIyNik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCByLCAiUiIpOworICAgICAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgeworICAgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgZywgIkciKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgZywgIkciKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIGIsICJCIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBhLCAiQSIpOworICAgICAgICB9CisgICAgICB9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgcmV0dmFsID0gMDsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID09IDApIHsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICAgIGludCByID0gKGJ1ZltwaXRjaCAqIHJvdyArIGNvbF0gPj4gcnNoaWZ0KSAmIDB4RkY7CisgICAgICAgICAgaW50IGcgPSAoYnVmW3BpdGNoICogcm93ICsgY29sXSA+PiBnc2hpZnQpICYgMHhGRjsKKyAgICAgICAgICBpbnQgYiA9IChidWZbcGl0Y2ggKiByb3cgKyBjb2xdID4+IGJzaGlmdCkgJiAweEZGOworICAgICAgICAgIGlmIChyIDwgMCkgciArPSAyNTY7CisgICAgICAgICAgaWYgKGcgPCAwKSBnICs9IDI1NjsKKyAgICAgICAgICBpZiAoYiA8IDApIGIgKz0gMjU2OworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlM2QvJTNkLyUzZCAiLCByLCBnLCBiKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworICB9CisKKyAgc3RhdGljIGludCBjaGVja0ltZyhCdWZmZXJlZEltYWdlIGltZywgaW50IHBmLCBpbnQgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgICAgICBUSlNjYWxpbmdGYWN0b3Igc2YsIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgV3JpdGFibGVSYXN0ZXIgd3IgPSBpbWcuZ2V0UmFzdGVyKCk7CisgICAgaW50IGltZ1R5cGUgPSBpbWcuZ2V0VHlwZSgpOworICAgIGlmIChpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCIHx8CisgICAgICAgIGltZ1R5cGUgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1IgfHwKKyAgICAgICAgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IgfHwKKyAgICAgICAgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFKSB7CisgICAgICBTaW5nbGVQaXhlbFBhY2tlZFNhbXBsZU1vZGVsIHNtID0KKyAgICAgICAgKFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwpaW1nLmdldFNhbXBsZU1vZGVsKCk7CisgICAgICBpbnQgcGl0Y2ggPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOworICAgICAgRGF0YUJ1ZmZlckludCBkYiA9IChEYXRhQnVmZmVySW50KXdyLmdldERhdGFCdWZmZXIoKTsKKyAgICAgIGludFtdIGJ1ZiA9IGRiLmdldERhdGEoKTsKKyAgICAgIHJldHVybiBjaGVja0ludEJ1ZihidWYsIGltZy5nZXRXaWR0aCgpLCBwaXRjaCwgaW1nLmdldEhlaWdodCgpLCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wLCBzZiwgZmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICBDb21wb25lbnRTYW1wbGVNb2RlbCBzbSA9IChDb21wb25lbnRTYW1wbGVNb2RlbClpbWcuZ2V0U2FtcGxlTW9kZWwoKTsKKyAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CisgICAgICBEYXRhQnVmZmVyQnl0ZSBkYiA9IChEYXRhQnVmZmVyQnl0ZSl3ci5nZXREYXRhQnVmZmVyKCk7CisgICAgICBieXRlW10gYnVmID0gZGIuZ2V0RGF0YSgpOworICAgICAgcmV0dXJuIGNoZWNrQnVmKGJ1ZiwgaW1nLmdldFdpZHRoKCksIHBpdGNoLCBpbWcuZ2V0SGVpZ2h0KCksIHBmLCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgIHNmLCBmbGFncyk7CisgICAgfQorICB9CisKKyAgc3RhdGljIGludCBwYWQoaW50IHYsIGludCBwKSB7CisgICAgcmV0dXJuICgodiArIChwKSAtIDEpICYgKH4oKHApIC0gMSkpKTsKKyAgfQorCisgIHN0YXRpYyBpbnQgY2hlY2tCdWZZVVYoYnl0ZVtdIGJ1ZiwgaW50IHNpemUsIGludCB3LCBpbnQgaCwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgVEpTY2FsaW5nRmFjdG9yIHNmKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbnQgcm93LCBjb2w7CisgICAgaW50IGhzZiA9IFRKLmdldE1DVVdpZHRoKHN1YnNhbXApIC8gOCwgdnNmID0gVEouZ2V0TUNVSGVpZ2h0KHN1YnNhbXApIC8gODsKKyAgICBpbnQgcHcgPSBwYWQodywgaHNmKSwgcGggPSBwYWQoaCwgdnNmKTsKKyAgICBpbnQgY3cgPSBwdyAvIGhzZiwgY2ggPSBwaCAvIHZzZjsKKyAgICBpbnQgeXBpdGNoID0gcGFkKHB3LCBwYWQpLCB1dnBpdGNoID0gcGFkKGN3LCBwYWQpOworICAgIGludCByZXR2YWwgPSAxOworICAgIGludCBjb3JyZWN0c2l6ZSA9IHlwaXRjaCAqIHBoICsKKyAgICAgICAgICAgICAgICAgICAgICAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkgPyAwIDogdXZwaXRjaCAqIGNoICogMik7CisgICAgaW50IGhhbGZ3YXkgPSAxNiAqIHNmLmdldE51bSgpIC8gc2YuZ2V0RGVub20oKTsKKyAgICBpbnQgYmxvY2tTaXplID0gOCAqIHNmLmdldE51bSgpIC8gc2YuZ2V0RGVub20oKTsKKworICAgIHRyeSB7CisgICAgICBpZiAoc2l6ZSAhPSBjb3JyZWN0c2l6ZSkKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW5jb3JyZWN0IHNpemUgIiArIHNpemUgKyAiLiAgU2hvdWxkIGJlICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RzaXplKTsKKworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBwaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBwdzsgY29sKyspIHsKKyAgICAgICAgICBieXRlIHkgPSBidWZbeXBpdGNoICogcm93ICsgY29sXTsKKyAgICAgICAgICBpZiAoKChyb3cgLyBibG9ja1NpemUpICsgKGNvbCAvIGJsb2NrU2l6ZSkpICUgMiA9PSAwKSB7CisgICAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkKKyAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIHksICJZIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgeSwgIlkiKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpCisgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCB5LCAiWSIsIDc2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIHksICJZIiwgMjI2KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChzdWJzYW1wICE9IFRKLlNBTVBfR1JBWSkgeworICAgICAgICBoYWxmd2F5ID0gMTYgLyB2c2YgKiBzZi5nZXROdW0oKSAvIHNmLmdldERlbm9tKCk7CisgICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgY2g7IHJvdysrKSB7CisgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBjdzsgY29sKyspIHsKKyAgICAgICAgICAgIGJ5dGUgdSA9IGJ1Zlt5cGl0Y2ggKiBwaCArICh1dnBpdGNoICogcm93ICsgY29sKV0sCisgICAgICAgICAgICAgICAgIHYgPSBidWZbeXBpdGNoICogcGggKyB1dnBpdGNoICogY2ggKyAodXZwaXRjaCAqIHJvdyArIGNvbCldOworICAgICAgICAgICAgaWYgKCgocm93ICogdnNmIC8gYmxvY2tTaXplKSArIChjb2wgKiBoc2YgLyBibG9ja1NpemUpKSAlIDIgPT0gMCkgeworICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgdSwgIlUiLCAxMjgpOworICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgdiwgIlYiLCAxMjgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpIHsKKyAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgdSwgIlUiLCA4NSk7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIHYsICJWIik7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCB1LCAiVSIpOworICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCB2LCAiViIsIDE0OSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICByZXR2YWwgPSAwOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBwaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBwdzsgY29sKyspIHsKKyAgICAgICAgICBpbnQgeSA9IGJ1Zlt5cGl0Y2ggKiByb3cgKyBjb2xdOworICAgICAgICAgIGlmICh5IDwgMCkgeSArPSAyNTY7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZCAiLCB5KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgfQorICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgY2g7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgY3c7IGNvbCsrKSB7CisgICAgICAgICAgaW50IHUgPSBidWZbeXBpdGNoICogcGggKyAodXZwaXRjaCAqIHJvdyArIGNvbCldOworICAgICAgICAgIGlmICh1IDwgMCkgdSArPSAyNTY7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZCAiLCB1KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgfQorICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgY2g7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgY3c7IGNvbCsrKSB7CisgICAgICAgICAgaW50IHYgPSBidWZbeXBpdGNoICogcGggKyB1dnBpdGNoICogY2ggKyAodXZwaXRjaCAqIHJvdyArIGNvbCldOworICAgICAgICAgIGlmICh2IDwgMCkgdiArPSAyNTY7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZCAiLCB2KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR2YWw7CisgIH0KKworICBzdGF0aWMgdm9pZCB3cml0ZUpQRUcoYnl0ZVtdIGpwZWdCdWYsIGludCBqcGVnQnVmU2l6ZSwgU3RyaW5nIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOworICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CisgICAgZm9zLndyaXRlKGpwZWdCdWYsIDAsIGpwZWdCdWZTaXplKTsKKyAgICBmb3MuY2xvc2UoKTsKKyAgfQorCisgIHN0YXRpYyBpbnQgY29tcFRlc3QoVEpDb21wcmVzc29yIHRqYywgYnl0ZVtdIGRzdEJ1ZiwgaW50IHcsIGludCBoLCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhc2VOYW1lLCBpbnQgc3Vic2FtcCwgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgU3RyaW5nIHRlbXBTdHI7CisgICAgYnl0ZVtdIHNyY0J1ZiA9IG51bGw7CisgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOworICAgIFN0cmluZyBwZlN0ciwgcGZTdHJMb25nOworICAgIFN0cmluZyBidVN0ciA9IChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDAgPyAiQlUiIDogIlREIjsKKyAgICBTdHJpbmcgYnVTdHJMb25nID0gKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCA/CisgICAgICAgICAgICAgICAgICAgICAgICJCb3R0b20tVXAiIDogIlRvcC1Eb3duICI7CisgICAgaW50IHNpemUgPSAwLCBwcywgaW1nVHlwZSA9IHBmOworCisgICAgaWYgKGJpKSB7CisgICAgICBwZiA9IGJpVHlwZVBGKGltZ1R5cGUpOworICAgICAgcGZTdHIgPSBiaVR5cGVTdHIoaW1nVHlwZSk7CisgICAgICBwZlN0ckxvbmcgPSBwZlN0ciArICIgKCIgKyBQSVhGT1JNQVRTVFJbcGZdICsgIikiOworICAgIH0gZWxzZSB7CisgICAgICBwZlN0ciA9IFBJWEZPUk1BVFNUUltwZl07CisgICAgICBwZlN0ckxvbmcgPSBwZlN0cjsKKyAgICB9CisgICAgcHMgPSAgVEouZ2V0UGl4ZWxTaXplKHBmKTsKKworICAgIGlmIChiaSkgeworICAgICAgaW1nID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgaW1nVHlwZSk7CisgICAgICBpbml0SW1nKGltZywgcGYsIGZsYWdzKTsKKyAgICAgIHRlbXBTdHIgPSBiYXNlTmFtZSArICJfZW5jXyIgKyBwZlN0ciArICJfIiArIGJ1U3RyICsgIl8iICsKKyAgICAgICAgICAgICAgICBTVUJOQU1FW3N1YnNhbXBdICsgIl9RIiArIGpwZWdRdWFsICsgIi5wbmciOworICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUodGVtcFN0cik7CisgICAgICBJbWFnZUlPLndyaXRlKGltZywgInBuZyIsIGZpbGUpOworICAgICAgdGpjLnNldFNvdXJjZUltYWdlKGltZywgMCwgMCwgMCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHNyY0J1ZiA9IG5ldyBieXRlW3cgKiBoICogcHMgKyAxXTsKKyAgICAgIGluaXRCdWYoc3JjQnVmLCB3LCB3ICogcHMsIGgsIHBmLCBmbGFncyk7CisgICAgICB0amMuc2V0U291cmNlSW1hZ2Uoc3JjQnVmLCAwLCAwLCB3LCAwLCBoLCBwZik7CisgICAgfQorICAgIEFycmF5cy5maWxsKGRzdEJ1ZiwgKGJ5dGUpMCk7CisKKyAgICB0amMuc2V0U3Vic2FtcChzdWJzYW1wKTsKKyAgICB0amMuc2V0SlBFR1F1YWxpdHkoanBlZ1F1YWwpOworICAgIGlmIChkb1lVVikgeworICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiVzICVzIC0+IFlVViAlcyAuLi4gIiwgcGZTdHJMb25nLCBidVN0ckxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJOQU1FX0xPTkdbc3Vic2FtcF0pOworICAgICAgWVVWSW1hZ2UgeXV2SW1hZ2UgPSB0amMuZW5jb2RlWVVWKHBhZCwgZmxhZ3MpOworICAgICAgaWYgKGNoZWNrQnVmWVVWKHl1dkltYWdlLmdldEJ1ZigpLCB5dXZJbWFnZS5nZXRTaXplKCksIHcsIGgsIHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgbmV3IFRKU2NhbGluZ0ZhY3RvcigxLCAxKSkgPT0gMSkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiUGFzc2VkLlxuIik7CisgICAgICBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRkFJTEVEIVxuIik7CisgICAgICAgIGV4aXRTdGF0dXMgPSAtMTsKKyAgICAgIH0KKworICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIllVViAlcyAlcyAtPiBKUEVHIFElZCAuLi4gIiwgU1VCTkFNRV9MT05HW3N1YnNhbXBdLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVTdHJMb25nLCBqcGVnUXVhbCk7CisgICAgICB0amMuc2V0U291cmNlSW1hZ2UoeXV2SW1hZ2UpOworICAgIH0gZWxzZSB7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJXMgJXMgLT4gJXMgUSVkIC4uLiAiLCBwZlN0ckxvbmcsIGJ1U3RyTG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQk5BTUVfTE9OR1tzdWJzYW1wXSwganBlZ1F1YWwpOworICAgIH0KKyAgICB0amMuY29tcHJlc3MoZHN0QnVmLCBmbGFncyk7CisgICAgc2l6ZSA9IHRqYy5nZXRDb21wcmVzc2VkU2l6ZSgpOworCisgICAgdGVtcFN0ciA9IGJhc2VOYW1lICsgIl9lbmNfIiArIHBmU3RyICsgIl8iICsgYnVTdHIgKyAiXyIgKworICAgICAgICAgICAgICBTVUJOQU1FW3N1YnNhbXBdICsgIl9RIiArIGpwZWdRdWFsICsgIi5qcGciOworICAgIHdyaXRlSlBFRyhkc3RCdWYsIHNpemUsIHRlbXBTdHIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZS5cbiAgUmVzdWx0IGluICIgKyB0ZW1wU3RyKTsKKworICAgIHJldHVybiBzaXplOworICB9CisKKyAgc3RhdGljIHZvaWQgZGVjb21wVGVzdChUSkRlY29tcHJlc3NvciB0amQsIGJ5dGVbXSBqcGVnQnVmLCBpbnQganBlZ1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHcsIGludCBoLCBpbnQgcGYsIFN0cmluZyBiYXNlTmFtZSwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBUSlNjYWxpbmdGYWN0b3Igc2YpIHRocm93cyBFeGNlcHRpb24geworICAgIFN0cmluZyBwZlN0ciwgcGZTdHJMb25nLCB0ZW1wU3RyOworICAgIFN0cmluZyBidVN0ckxvbmcgPSAoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgIkJvdHRvbS1VcCIgOiAiVG9wLURvd24gIjsKKyAgICBpbnQgc2NhbGVkV2lkdGggPSBzZi5nZXRTY2FsZWQodyk7CisgICAgaW50IHNjYWxlZEhlaWdodCA9IHNmLmdldFNjYWxlZChoKTsKKyAgICBpbnQgdGVtcDEsIHRlbXAyLCBpbWdUeXBlID0gcGY7CisgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOworICAgIGJ5dGVbXSBkc3RCdWYgPSBudWxsOworCisgICAgaWYgKGJpKSB7CisgICAgICBwZiA9IGJpVHlwZVBGKGltZ1R5cGUpOworICAgICAgcGZTdHIgPSBiaVR5cGVTdHIoaW1nVHlwZSk7CisgICAgICBwZlN0ckxvbmcgPSBwZlN0ciArICIgKCIgKyBQSVhGT1JNQVRTVFJbcGZdICsgIikiOworICAgIH0gZWxzZSB7CisgICAgICBwZlN0ciA9IFBJWEZPUk1BVFNUUltwZl07CisgICAgICBwZlN0ckxvbmcgPSBwZlN0cjsKKyAgICB9CisKKyAgICB0amQuc2V0U291cmNlSW1hZ2UoanBlZ0J1ZiwganBlZ1NpemUpOworICAgIGlmICh0amQuZ2V0V2lkdGgoKSAhPSB3IHx8IHRqZC5nZXRIZWlnaHQoKSAhPSBoIHx8CisgICAgICAgIHRqZC5nZXRTdWJzYW1wKCkgIT0gc3Vic2FtcCkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkluY29ycmVjdCBKUEVHIGhlYWRlciIpOworCisgICAgdGVtcDEgPSBzY2FsZWRXaWR0aDsKKyAgICB0ZW1wMiA9IHNjYWxlZEhlaWdodDsKKyAgICB0ZW1wMSA9IHRqZC5nZXRTY2FsZWRXaWR0aCh0ZW1wMSwgdGVtcDIpOworICAgIHRlbXAyID0gdGpkLmdldFNjYWxlZEhlaWdodCh0ZW1wMSwgdGVtcDIpOworICAgIGlmICh0ZW1wMSAhPSBzY2FsZWRXaWR0aCB8fCB0ZW1wMiAhPSBzY2FsZWRIZWlnaHQpCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTY2FsZWQgc2l6ZSBtaXNtYXRjaCIpOworCisgICAgaWYgKGRvWVVWKSB7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiSlBFRyAtPiBZVVYgJXMgIiwgU1VCTkFNRV9MT05HW3N1YnNhbXBdKTsKKyAgICAgIGlmICghc2YuaXNPbmUoKSkKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiVkLyVkIC4uLiAiLCBzZi5nZXROdW0oKSwgc2YuZ2V0RGVub20oKSk7CisgICAgICBlbHNlIFN5c3RlbS5vdXQucHJpbnQoIi4uLiAiKTsKKyAgICAgIFlVVkltYWdlIHl1dkltYWdlID0gdGpkLmRlY29tcHJlc3NUb1lVVihzY2FsZWRXaWR0aCwgcGFkLCBzY2FsZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICAgICAgaWYgKGNoZWNrQnVmWVVWKHl1dkltYWdlLmdldEJ1ZigpLCB5dXZJbWFnZS5nZXRTaXplKCksIHNjYWxlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZEhlaWdodCwgc3Vic2FtcCwgc2YpID09IDEpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBhc3NlZC5cbiIpOworICAgICAgZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkZBSUxFRCFcbiIpOyAgZXhpdFN0YXR1cyA9IC0xOworICAgICAgfQorCisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiWVVWICVzIC0+ICVzICVzIC4uLiAiLCBTVUJOQU1FX0xPTkdbc3Vic2FtcF0sCisgICAgICAgICAgICAgICAgICAgICAgICBwZlN0ckxvbmcsIGJ1U3RyTG9uZyk7CisgICAgICB0amQuc2V0U291cmNlSW1hZ2UoeXV2SW1hZ2UpOworICAgIH0gZWxzZSB7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiSlBFRyAtPiAlcyAlcyAiLCBwZlN0ckxvbmcsIGJ1U3RyTG9uZyk7CisgICAgICBpZiAoIXNmLmlzT25lKCkpCisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlZC8lZCAuLi4gIiwgc2YuZ2V0TnVtKCksIHNmLmdldERlbm9tKCkpOworICAgICAgZWxzZSBTeXN0ZW0ub3V0LnByaW50KCIuLi4gIik7CisgICAgfQorICAgIGlmIChiaSkKKyAgICAgIGltZyA9IHRqZC5kZWNvbXByZXNzKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIGltZ1R5cGUsIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICBkc3RCdWYgPSB0amQuZGVjb21wcmVzcyhzY2FsZWRXaWR0aCwgMCwgc2NhbGVkSGVpZ2h0LCBwZiwgZmxhZ3MpOworCisgICAgaWYgKGJpKSB7CisgICAgICB0ZW1wU3RyID0gYmFzZU5hbWUgKyAiX2RlY18iICsgcGZTdHIgKyAiXyIgKworICAgICAgICAgICAgICAgICgoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkgPyAiQlUiIDogIlREIikgKyAiXyIgKworICAgICAgICAgICAgICAgIFNVQk5BTUVbc3Vic2FtcF0gKyAiXyIgKworICAgICAgICAgICAgICAgIChkb3VibGUpc2YuZ2V0TnVtKCkgLyAoZG91YmxlKXNmLmdldERlbm9tKCkgKyAieCIgKyAiLnBuZyI7CisgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSh0ZW1wU3RyKTsKKyAgICAgIEltYWdlSU8ud3JpdGUoaW1nLCAicG5nIiwgZmlsZSk7CisgICAgfQorCisgICAgaWYgKChiaSAmJiBjaGVja0ltZyhpbWcsIHBmLCBzdWJzYW1wLCBzZiwgZmxhZ3MpID09IDEpIHx8CisgICAgICAgICghYmkgJiYgY2hlY2tCdWYoZHN0QnVmLCBzY2FsZWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRXaWR0aCAqIFRKLmdldFBpeGVsU2l6ZShwZiksIHNjYWxlZEhlaWdodCwgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcCwgc2YsIGZsYWdzKSA9PSAxKSkKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBhc3NlZC5cbiIpOworICAgIGVsc2UgeworICAgICAgU3lzdGVtLm91dC5wcmludCgiRkFJTEVEIVxuIik7CisgICAgICBleGl0U3RhdHVzID0gLTE7CisgICAgfQorICB9CisKKyAgc3RhdGljIHZvaWQgZGVjb21wVGVzdChUSkRlY29tcHJlc3NvciB0amQsIGJ5dGVbXSBqcGVnQnVmLCBpbnQganBlZ1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHcsIGludCBoLCBpbnQgcGYsIFN0cmluZyBiYXNlTmFtZSwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpbnQgaTsKKyAgICBUSlNjYWxpbmdGYWN0b3JbXSBzZiA9IFRKLmdldFNjYWxpbmdGYWN0b3JzKCk7CisgICAgZm9yIChpID0gMDsgaSA8IHNmLmxlbmd0aDsgaSsrKSB7CisgICAgICBpbnQgbnVtID0gc2ZbaV0uZ2V0TnVtKCk7CisgICAgICBpbnQgZGVub20gPSBzZltpXS5nZXREZW5vbSgpOworICAgICAgaWYgKHN1YnNhbXAgPT0gVEouU0FNUF80NDQgfHwgc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkgfHwKKyAgICAgICAgICAoc3Vic2FtcCA9PSBUSi5TQU1QXzQxMSAmJiBudW0gPT0gMSAmJgorICAgICAgICAgICAoZGVub20gPT0gMiB8fCBkZW5vbSA9PSAxKSkgfHwKKyAgICAgICAgICAoc3Vic2FtcCAhPSBUSi5TQU1QXzQxMSAmJiBudW0gPT0gMSAmJgorICAgICAgICAgICAoZGVub20gPT0gNCB8fCBkZW5vbSA9PSAyIHx8IGRlbm9tID09IDEpKSkKKyAgICAgICAgZGVjb21wVGVzdCh0amQsIGpwZWdCdWYsIGpwZWdTaXplLCB3LCBoLCBwZiwgYmFzZU5hbWUsIHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgZmxhZ3MsIHNmW2ldKTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgdm9pZCBkb1Rlc3QoaW50IHcsIGludCBoLCBpbnRbXSBmb3JtYXRzLCBpbnQgc3Vic2FtcCwgU3RyaW5nIGJhc2VOYW1lKQorICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgVEpDb21wcmVzc29yIHRqYyA9IG51bGw7CisgICAgVEpEZWNvbXByZXNzb3IgdGpkID0gbnVsbDsKKyAgICBpbnQgc2l6ZTsKKyAgICBieXRlW10gZHN0QnVmOworCisgICAgZHN0QnVmID0gbmV3IGJ5dGVbVEouYnVmU2l6ZSh3LCBoLCBzdWJzYW1wKV07CisKKyAgICB0cnkgeworICAgICAgdGpjID0gbmV3IFRKQ29tcHJlc3NvcigpOworICAgICAgdGpkID0gbmV3IFRKRGVjb21wcmVzc29yKCk7CisKKyAgICAgIGZvciAoaW50IHBmIDogZm9ybWF0cykgeworICAgICAgICBpZiAocGYgPCAwKSBjb250aW51ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgICAgIGlmIChzdWJzYW1wID09IFRKLlNBTVBfNDIyIHx8IHN1YnNhbXAgPT0gVEouU0FNUF80MjAgfHwKKyAgICAgICAgICAgICAgc3Vic2FtcCA9PSBUSi5TQU1QXzQ0MCB8fCBzdWJzYW1wID09IFRKLlNBTVBfNDExKQorICAgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19GQVNUVVBTQU1QTEU7CisgICAgICAgICAgaWYgKGkgPT0gMSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfQk9UVE9NVVA7CisgICAgICAgICAgc2l6ZSA9IGNvbXBUZXN0KHRqYywgZHN0QnVmLCB3LCBoLCBwZiwgYmFzZU5hbWUsIHN1YnNhbXAsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICAgICAgICAgIGRlY29tcFRlc3QodGpkLCBkc3RCdWYsIHNpemUsIHcsIGgsIHBmLCBiYXNlTmFtZSwgc3Vic2FtcCwgZmxhZ3MpOworICAgICAgICAgIGlmIChwZiA+PSBUSi5QRl9SR0JYICYmIHBmIDw9IFRKLlBGX1hSR0IgJiYgIWJpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgICAgICAgZGVjb21wVGVzdCh0amQsIGRzdEJ1Ziwgc2l6ZSwgdywgaCwgcGYgKyAoVEouUEZfUkdCQSAtIFRKLlBGX1JHQlgpLAorICAgICAgICAgICAgICAgICAgICAgICBiYXNlTmFtZSwgc3Vic2FtcCwgZmxhZ3MpOworICAgICAgICAgIH0KKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOworICAgICAgICB9CisgICAgICB9CisgICAgICBTeXN0ZW0ub3V0LnByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgaWYgKHRqYyAhPSBudWxsKSB0amMuY2xvc2UoKTsKKyAgICAgIGlmICh0amQgIT0gbnVsbCkgdGpkLmNsb3NlKCk7CisgICAgICB0aHJvdyBlOworICAgIH0KKyAgICBpZiAodGpjICE9IG51bGwpIHRqYy5jbG9zZSgpOworICAgIGlmICh0amQgIT0gbnVsbCkgdGpkLmNsb3NlKCk7CisgIH0KKworICBzdGF0aWMgdm9pZCBidWZTaXplVGVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGludCB3LCBoLCBpLCBzdWJzYW1wOworICAgIGJ5dGVbXSBzcmNCdWYsIGRzdEJ1ZiA9IG51bGw7CisgICAgWVVWSW1hZ2UgZHN0SW1hZ2UgPSBudWxsOworICAgIFRKQ29tcHJlc3NvciB0amMgPSBudWxsOworICAgIFJhbmRvbSByID0gbmV3IFJhbmRvbSgpOworCisgICAgdHJ5IHsKKyAgICAgIHRqYyA9IG5ldyBUSkNvbXByZXNzb3IoKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQnVmZmVyIHNpemUgcmVncmVzc2lvbiB0ZXN0Iik7CisgICAgICBmb3IgKHN1YnNhbXAgPSAwOyBzdWJzYW1wIDwgVEouTlVNU0FNUDsgc3Vic2FtcCsrKSB7CisgICAgICAgIGZvciAodyA9IDE7IHcgPCA0ODsgdysrKSB7CisgICAgICAgICAgaW50IG1heGggPSAodyA9PSAxKSA/IDIwNDggOiA0ODsKKyAgICAgICAgICBmb3IgKGggPSAxOyBoIDwgbWF4aDsgaCsrKSB7CisgICAgICAgICAgICBpZiAoaCAlIDEwMCA9PSAwKQorICAgICAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJTA0ZCB4ICUwNGRcYlxiXGJcYlxiXGJcYlxiXGJcYlxiIiwgdywgaCk7CisgICAgICAgICAgICBzcmNCdWYgPSBuZXcgYnl0ZVt3ICogaCAqIDRdOworICAgICAgICAgICAgaWYgKGRvWVVWKQorICAgICAgICAgICAgICBkc3RJbWFnZSA9IG5ldyBZVVZJbWFnZSh3LCBwYWQsIGgsIHN1YnNhbXApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBkc3RCdWYgPSBuZXcgYnl0ZVtUSi5idWZTaXplKHcsIGgsIHN1YnNhbXApXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ICogaCAqIDQ7IGkrKykgeworICAgICAgICAgICAgICBzcmNCdWZbaV0gPSAoYnl0ZSkoci5uZXh0SW50KDIpICogMjU1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRqYy5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIDAsIDAsIHcsIDAsIGgsIFRKLlBGX0JHUlgpOworICAgICAgICAgICAgdGpjLnNldFN1YnNhbXAoc3Vic2FtcCk7CisgICAgICAgICAgICB0amMuc2V0SlBFR1F1YWxpdHkoMTAwKTsKKyAgICAgICAgICAgIGlmIChkb1lVVikKKyAgICAgICAgICAgICAgdGpjLmVuY29kZVlVVihkc3RJbWFnZSwgMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHRqYy5jb21wcmVzcyhkc3RCdWYsIDApOworCisgICAgICAgICAgICBzcmNCdWYgPSBuZXcgYnl0ZVtoICogdyAqIDRdOworICAgICAgICAgICAgaWYgKGRvWVVWKQorICAgICAgICAgICAgICBkc3RJbWFnZSA9IG5ldyBZVVZJbWFnZShoLCBwYWQsIHcsIHN1YnNhbXApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBkc3RCdWYgPSBuZXcgYnl0ZVtUSi5idWZTaXplKGgsIHcsIHN1YnNhbXApXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoICogdyAqIDQ7IGkrKykgeworICAgICAgICAgICAgICBzcmNCdWZbaV0gPSAoYnl0ZSkoci5uZXh0SW50KDIpICogMjU1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRqYy5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIDAsIDAsIGgsIDAsIHcsIFRKLlBGX0JHUlgpOworICAgICAgICAgICAgaWYgKGRvWVVWKQorICAgICAgICAgICAgICB0amMuZW5jb2RlWVVWKGRzdEltYWdlLCAwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgdGpjLmNvbXByZXNzKGRzdEJ1ZiwgMCk7CisgICAgICAgICAgfQorICAgICAgICAgIGRzdEltYWdlID0gbnVsbDsKKyAgICAgICAgICBkc3RCdWYgPSBudWxsOworICAgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICB9CisgICAgICB9CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUuICAgICAgIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIGlmICh0amMgIT0gbnVsbCkgdGpjLmNsb3NlKCk7CisgICAgICB0aHJvdyBlOworICAgIH0KKyAgICBpZiAodGpjICE9IG51bGwpIHRqYy5jbG9zZSgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgeworICAgIHRyeSB7CisgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAiamF2YXRlc3QiOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi15dXYiKSkKKyAgICAgICAgICBkb1lVViA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLW5veXV2cGFkIikpCisgICAgICAgICAgcGFkID0gMTsKKyAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmkiKSkgeworICAgICAgICAgIGJpID0gdHJ1ZTsKKyAgICAgICAgICB0ZXN0TmFtZSA9ICJqYXZhYml0ZXN0IjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgIH0KKyAgICAgIGlmIChkb1lVVikKKyAgICAgICAgRk9STUFUU180QllURVs0XSA9IC0xOworICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBGT1JNQVRTXzNCWVRFQkkgOiBGT1JNQVRTXzNCWVRFLCBUSi5TQU1QXzQ0NCwKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CisgICAgICBkb1Rlc3QoMzksIDQxLCBiaSA/IEZPUk1BVFNfNEJZVEVCSSA6IEZPUk1BVFNfNEJZVEUsIFRKLlNBTVBfNDQ0LAorICAgICAgICAgICAgIHRlc3ROYW1lKTsKKyAgICAgIGRvVGVzdCg0MSwgMzUsIGJpID8gRk9STUFUU18zQllURUJJIDogRk9STUFUU18zQllURSwgVEouU0FNUF80MjIsCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBGT1JNQVRTXzRCWVRFQkkgOiBGT1JNQVRTXzRCWVRFLCBUSi5TQU1QXzQyMiwKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CisgICAgICBkb1Rlc3QoMzksIDQxLCBiaSA/IEZPUk1BVFNfM0JZVEVCSSA6IEZPUk1BVFNfM0JZVEUsIFRKLlNBTVBfNDIwLAorICAgICAgICAgICAgIHRlc3ROYW1lKTsKKyAgICAgIGRvVGVzdCg0MSwgMzUsIGJpID8gRk9STUFUU180QllURUJJIDogRk9STUFUU180QllURSwgVEouU0FNUF80MjAsCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBGT1JNQVRTXzNCWVRFQkkgOiBGT1JNQVRTXzNCWVRFLCBUSi5TQU1QXzQ0MCwKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CisgICAgICBkb1Rlc3QoMzksIDQxLCBiaSA/IEZPUk1BVFNfNEJZVEVCSSA6IEZPUk1BVFNfNEJZVEUsIFRKLlNBTVBfNDQwLAorICAgICAgICAgICAgIHRlc3ROYW1lKTsKKyAgICAgIGRvVGVzdCg0MSwgMzUsIGJpID8gRk9STUFUU18zQllURUJJIDogRk9STUFUU18zQllURSwgVEouU0FNUF80MTEsCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBGT1JNQVRTXzRCWVRFQkkgOiBGT1JNQVRTXzRCWVRFLCBUSi5TQU1QXzQxMSwKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CisgICAgICBkb1Rlc3QoMzksIDQxLCBiaSA/IEZPUk1BVFNfR1JBWUJJIDogRk9STUFUU19HUkFZLCBUSi5TQU1QX0dSQVksCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgZG9UZXN0KDQxLCAzNSwgYmkgPyBGT1JNQVRTXzNCWVRFQkkgOiBGT1JNQVRTXzNCWVRFLCBUSi5TQU1QX0dSQVksCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgRk9STUFUU180QllURVs0XSA9IC0xOworICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBGT1JNQVRTXzRCWVRFQkkgOiBGT1JNQVRTXzRCWVRFLCBUSi5TQU1QX0dSQVksCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgaWYgKCFiaSkKKyAgICAgICAgYnVmU2l6ZVRlc3QoKTsKKyAgICAgIGlmIChkb1lVViAmJiAhYmkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKyAgICAgICAgZG9UZXN0KDQ4LCA0OCwgRk9STUFUU19SR0IsIFRKLlNBTVBfNDQ0LCAiamF2YXRlc3RfeXV2MCIpOworICAgICAgICBkb1Rlc3QoNDgsIDQ4LCBGT1JNQVRTX1JHQiwgVEouU0FNUF80MjIsICJqYXZhdGVzdF95dXYwIik7CisgICAgICAgIGRvVGVzdCg0OCwgNDgsIEZPUk1BVFNfUkdCLCBUSi5TQU1QXzQyMCwgImphdmF0ZXN0X3l1djAiKTsKKyAgICAgICAgZG9UZXN0KDQ4LCA0OCwgRk9STUFUU19SR0IsIFRKLlNBTVBfNDQwLCAiamF2YXRlc3RfeXV2MCIpOworICAgICAgICBkb1Rlc3QoNDgsIDQ4LCBGT1JNQVRTX1JHQiwgVEouU0FNUF80MTEsICJqYXZhdGVzdF95dXYwIik7CisgICAgICAgIGRvVGVzdCg0OCwgNDgsIEZPUk1BVFNfUkdCLCBUSi5TQU1QX0dSQVksICJqYXZhdGVzdF95dXYwIik7CisgICAgICAgIGRvVGVzdCg0OCwgNDgsIEZPUk1BVFNfR1JBWSwgVEouU0FNUF9HUkFZLCAiamF2YXRlc3RfeXV2MCIpOworICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgZXhpdFN0YXR1cyA9IC0xOworICAgIH0KKyAgICBTeXN0ZW0uZXhpdChleGl0U3RhdHVzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvYWxsY2xhc3Nlcy1mcmFtZS5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvYWxsY2xhc3Nlcy1mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlY2FjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9hbGxjbGFzc2VzLWZyYW1lLmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbGwgQ2xhc3NlczwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZXNoZWV0LmNzcyIgdGl0bGU9IlN0eWxlIj4KKzwvaGVhZD4KKzxib2R5PgorPGgxIGNsYXNzPSJiYXIiPkFsbCBDbGFzc2VzPC9oMT4KKzxkaXYgY2xhc3M9ImluZGV4Q29udGFpbmVyIj4KKzx1bD4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+VEo8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlRKQ29tcHJlc3NvcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+PGk+VEpDdXN0b21GaWx0ZXI8L2k+PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlRKRGVjb21wcmVzc29yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlRKRXhjZXB0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5USlNjYWxpbmdGYWN0b3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+VEpUcmFuc2Zvcm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5USlRyYW5zZm9ybWVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPllVVkltYWdlPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmN2ZkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFsbCBDbGFzc2VzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InN0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8aDEgY2xhc3M9ImJhciI+QWxsIENsYXNzZXM8L2gxPgorPGRpdiBjbGFzcz0iaW5kZXhDb250YWluZXIiPgorPHVsPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48aT5USkN1c3RvbUZpbHRlcjwvaT48L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKU2NhbGluZ0ZhY3RvcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm1lcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2NvbnN0YW50LXZhbHVlcy5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvY29uc3RhbnQtdmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzMzMyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2NvbnN0YW50LXZhbHVlcy5odG1sCkBAIC0wLDAgKzEsNTMyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZXNoZWV0LmNzcyIgdGl0bGU9IlN0eWxlIj4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgICB0cnkgeworICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCdpcy1leHRlcm5hbD10cnVlJykgPT0gLTEpIHsKKyAgICAgICAgICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iQ29uc3RhbnQgRmllbGQgVmFsdWVzIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChlcnIpIHsKKyAgICB9CisvLy0tPgorPC9zY3JpcHQ+Cis8bm9zY3JpcHQ+Cis8ZGl2PkphdmFTY3JpcHQgaXMgZGlzYWJsZWQgb24geW91ciBicm93c2VyLjwvZGl2PgorPC9ub3NjcmlwdD4KKzwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KKzxkaXYgY2xhc3M9InRvcE5hdiI+PGEgbmFtZT0ibmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaT5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImhlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPlByZXY8L2xpPgorPGxpPk5leHQ8L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbD9jb25zdGFudC12YWx1ZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjb25zdGFudC12YWx1ZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl90b3AiPgorPGxpPjxhIGhyZWY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl90b3AiKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+Cis8aDEgdGl0bGU9IkNvbnN0YW50IEZpZWxkIFZhbHVlcyIgY2xhc3M9InRpdGxlIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2gxPgorPGgyIHRpdGxlPSJDb250ZW50cyI+Q29udGVudHM8L2gyPgorPHVsPgorPGxpPjxhIGhyZWY9IiNvcmcubGlianBlZ3R1cmJvIj5vcmcubGlianBlZ3R1cmJvLio8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbnN0YW50VmFsdWVzQ29udGFpbmVyIj48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMiB0aXRsZT0ib3JnLmxpYmpwZWd0dXJibyI+b3JnLmxpYmpwZWd0dXJiby4qPC9oMj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iQ29uc3RhbnQgRmllbGQgVmFsdWVzIHRhYmxlLCBsaXN0aW5nIGNvbnN0YW50IGZpZWxkcywgYW5kIHZhbHVlcyI+Cis8Y2FwdGlvbj48c3Bhbj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xGaXJzdCIgc2NvcGU9ImNvbCI+TW9kaWZpZXIgYW5kIFR5cGU8L3RoPgorPHRoIHNjb3BlPSJjb2wiPkNvbnN0YW50IEZpZWxkPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+VmFsdWU8L3RoPgorPC90cj4KKzx0Ym9keT4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouQ1NfQ01ZSyI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0NTX0NNWUsiPkNTX0NNWUs8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjM8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkNTX0dSQVkiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19HUkFZIj5DU19HUkFZPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4yPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5DU19SR0IiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19SR0IiPkNTX1JHQjwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MDwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouQ1NfWUNiQ3IiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19ZQ2JDciI+Q1NfWUNiQ3I8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjE8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkNTX1lDQ0siPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19ZQ0NLIj5DU19ZQ0NLPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT40PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5FUlJfRkFUQUwiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNFUlJfRkFUQUwiPkVSUl9GQVRBTDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRVJSX1dBUk5JTkciPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNFUlJfV0FSTklORyI+RVJSX1dBUk5JTkc8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjA8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfQUNDVVJBVEVEQ1QiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0FDQ1VSQVRFRENUIj5GTEFHX0FDQ1VSQVRFRENUPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT40MDk2PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX0JPVFRPTVVQIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+RkxBR19CT1RUT01VUDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MjwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GQVNURENUIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GQVNURENUIj5GTEFHX0ZBU1REQ1Q8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjIwNDg8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRkFTVFVQU0FNUExFIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GQVNUVVBTQU1QTEUiPkZMQUdfRkFTVFVQU0FNUExFPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4yNTY8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRk9SQ0VNTVgiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZPUkNFTU1YIj5GTEFHX0ZPUkNFTU1YPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT44PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX0ZPUkNFU1NFIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRSI+RkxBR19GT1JDRVNTRTwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTY8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRk9SQ0VTU0UyIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRTIiPkZMQUdfRk9SQ0VTU0UyPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4zMjwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GT1JDRVNTRTMiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZPUkNFU1NFMyI+RkxBR19GT1JDRVNTRTM8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjEyODwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19QUk9HUkVTU0lWRSI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfUFJPR1JFU1NJVkUiPkZMQUdfUFJPR1JFU1NJVkU8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjE2Mzg0PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX1NUT1BPTldBUk5JTkciPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX1NUT1BPTldBUk5JTkciPkZMQUdfU1RPUE9OV0FSTklORzwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+ODE5MjwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouTlVNQ1MiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNOVU1DUyI+TlVNQ1M8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjU8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLk5VTUVSUiI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI05VTUVSUiI+TlVNRVJSPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4yPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5OVU1QRiI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI05VTVBGIj5OVU1QRjwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTI8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLk5VTVNBTVAiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNOVU1TQU1QIj5OVU1TQU1QPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT42PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9BQkdSIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQUJHUiI+UEZfQUJHUjwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+OTwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfQVJHQiI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX0FSR0IiPlBGX0FSR0I8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjEwPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9CR1IiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9CR1IiPlBGX0JHUjwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfQkdSQSI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX0JHUkEiPlBGX0JHUkE8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjg8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX0JHUlgiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9CR1JYIj5QRl9CR1JYPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4zPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9DTVlLIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQ01ZSyI+UEZfQ01ZSzwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTE8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX0dSQVkiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9HUkFZIj5QRl9HUkFZPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT42PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9SR0IiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0IiPlBGX1JHQjwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MDwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfUkdCQSI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQkEiPlBGX1JHQkE8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjc8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX1JHQlgiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0JYIj5QRl9SR0JYPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4yPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9YQkdSIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfWEJHUiI+UEZfWEJHUjwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+NDwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfWFJHQiI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1hSR0IiPlBGX1hSR0I8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjU8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlNBTVBfNDExIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80MTEiPlNBTVBfNDExPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT41PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5TQU1QXzQyMCI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDIwIj5TQU1QXzQyMDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MjwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouU0FNUF80MjIiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQyMiI+U0FNUF80MjI8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjE8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlNBTVBfNDQwIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDAiPlNBTVBfNDQwPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT40PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5TQU1QXzQ0NCI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQ0Ij5TQU1QXzQ0NDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MDwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouU0FNUF9HUkFZIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF9HUkFZIj5TQU1QX0dSQVk8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjM8L2NvZGU+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT4KKzwvbGk+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkNvbnN0YW50IEZpZWxkIFZhbHVlcyB0YWJsZSwgbGlzdGluZyBjb25zdGFudCBmaWVsZHMsIGFuZCB2YWx1ZXMiPgorPGNhcHRpb24+PHNwYW4+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBzY29wZT0iY29sIj5Db25zdGFudCBGaWVsZDwvdGg+Cis8dGggY2xhc3M9ImNvbExhc3QiIHNjb3BlPSJjb2wiPlZhbHVlPC90aD4KKzwvdHI+Cis8dGJvZHk+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk5VTU9QIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjTlVNT1AiPk5VTU9QPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT44PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUF9IRkxJUCI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX0hGTElQIj5PUF9IRkxJUDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BfTk9ORSI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX05PTkUiPk9QX05PTkU8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjA8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QX1JPVDE4MCI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1JPVDE4MCI+T1BfUk9UMTgwPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT42PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUF9ST1QyNzAiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9ST1QyNzAiPk9QX1JPVDI3MDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+NzwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BfUk9UOTAiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9ST1Q5MCI+T1BfUk9UOTA8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjU8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QX1RSQU5TUE9TRSI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1RSQU5TUE9TRSI+T1BfVFJBTlNQT1NFPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4zPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUF9UUkFOU1ZFUlNFIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BfVFJBTlNWRVJTRSI+T1BfVFJBTlNWRVJTRTwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+NDwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BfVkZMSVAiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9WRkxJUCI+T1BfVkZMSVA8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjI8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QVF9DT1BZTk9ORSI+Cis8IS0tICAgLS0+Cis8L2E+PGNvZGU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L2NvZGU+PC90ZD4KKzx0ZD48Y29kZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9DT1BZTk9ORSI+T1BUX0NPUFlOT05FPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT42NDwvY29kZT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgbmFtZT0ib3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BUX0NST1AiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfQ1JPUCI+T1BUX0NST1A8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjQ8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QVF9HUkFZIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX0dSQVkiPk9QVF9HUkFZPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT44PC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUFRfTk9PVVRQVVQiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfTk9PVVRQVVQiPk9QVF9OT09VVFBVVDwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MTY8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QVF9QRVJGRUNUIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX1BFUkZFQ1QiPk9QVF9QRVJGRUNUPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4xPC9jb2RlPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBuYW1lPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUFRfUFJPR1JFU1NJVkUiPgorPCEtLSAgIC0tPgorPC9hPjxjb2RlPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9jb2RlPjwvdGQ+Cis8dGQ+PGNvZGU+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfUFJPR1JFU1NJVkUiPk9QVF9QUk9HUkVTU0lWRTwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+MzI8L2NvZGU+PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QVF9UUklNIj4KKzwhLS0gICAtLT4KKzwvYT48Y29kZT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvY29kZT48L3RkPgorPHRkPjxjb2RlPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX1RSSU0iPk9QVF9UUklNPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT4yPC9jb2RlPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sP2NvbnN0YW50LXZhbHVlcy5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNvbnN0YW50LXZhbHVlcy5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+Cis8bGk+PGEgaHJlZj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvZGVwcmVjYXRlZC1saXN0Lmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9kZXByZWNhdGVkLWxpc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ0ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvZGVwcmVjYXRlZC1saXN0Lmh0bWwKQEAgLTAsMCArMSwyNTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPCEtLSBOZXdQYWdlIC0tPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGVwcmVjYXRlZCBMaXN0PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InN0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJEZXByZWNhdGVkIExpc3QiOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKGVycikgeworICAgIH0KKy8vLS0+Cis8L3NjcmlwdD4KKzxub3NjcmlwdD4KKzxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+RGVwcmVjYXRlZDwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sP2RlcHJlY2F0ZWQtbGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+Cis8bGk+PGEgaHJlZj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX3RvcCIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKzxoMSB0aXRsZT0iRGVwcmVjYXRlZCBBUEkiIGNsYXNzPSJ0aXRsZSI+RGVwcmVjYXRlZCBBUEk8L2gxPgorPGgyIHRpdGxlPSJDb250ZW50cyI+Q29udGVudHM8L2gyPgorPHVsPgorPGxpPjxhIGhyZWY9IiNmaWVsZCI+RGVwcmVjYXRlZCBGaWVsZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kIj5EZXByZWNhdGVkIE1ldGhvZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3IiPkRlcHJlY2F0ZWQgQ29uc3RydWN0b3JzPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb250ZW50Q29udGFpbmVyIj48YSBuYW1lPSJmaWVsZCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkRlcHJlY2F0ZWQgRmllbGRzIHRhYmxlLCBsaXN0aW5nIGRlcHJlY2F0ZWQgZmllbGRzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+RGVwcmVjYXRlZCBGaWVsZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sT25lIiBzY29wZT0iY29sIj5GaWVsZCBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0Ym9keT4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRU1NWCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GT1JDRU1NWDwvYT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GT1JDRVNTRTwvYT48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRTIiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRk9SQ0VTU0UyPC9hPjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZPUkNFU1NFMyI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GT1JDRVNTRTM8L2E+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ibWV0aG9kIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iRGVwcmVjYXRlZCBNZXRob2RzIHRhYmxlLCBsaXN0aW5nIGRlcHJlY2F0ZWQgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPkRlcHJlY2F0ZWQgTWV0aG9kczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xPbmUiIHNjb3BlPSJjb2wiPk1ldGhvZCBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0Ym9keT4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCkiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLmJ1ZlNpemVZVVYoaW50LCBpbnQsIGludCk8L2E+Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlIDxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USi5idWZTaXplWVVWKGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBieXRlW10sJTIwaW50KSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpDb21wcmVzc29yLmNvbXByZXNzKEJ1ZmZlcmVkSW1hZ2UsIGJ5dGVbXSwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gYW5kCisgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoYnl0ZVtdLCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5jb21wcmVzcyhieXRlW10sIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3IuY29tcHJlc3MoQnVmZmVyZWRJbWFnZSwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gYW5kCisgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmNvbXByZXNzKGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpEZWNvbXByZXNzb3IuZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKRGVjb21wcmVzc29yLmRlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGJ5dGVbXSwlMjBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkRlY29tcHJlc3Nvci5kZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCBpbnQpPC9hPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSwlMjBpbnQpIj48Y29kZT5USkRlY29tcHJlc3Nvci5kZWNvbXByZXNzVG9ZVVYoWVVWSW1hZ2UsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50KSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpEZWNvbXByZXNzb3IuZGVjb21wcmVzc1RvWVVWKGludCk8L2E+Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlIDxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKRGVjb21wcmVzc29yLmRlY29tcHJlc3NUb1lVVihpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGJ5dGVbXSwlMjBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3IuZW5jb2RlWVVWKEJ1ZmZlcmVkSW1hZ2UsIGJ5dGVbXSwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gYW5kCisgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGJ5dGVbXSwlMjBpbnQpIj48Y29kZT5USkNvbXByZXNzb3IuZW5jb2RlWVVWKGJ5dGVbXSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3IuZW5jb2RlWVVWKEJ1ZmZlcmVkSW1hZ2UsIGludCk8L2E+Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlCisgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USkNvbXByZXNzb3Iuc2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGFuZAorIDxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmVuY29kZVlVVihpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGJ5dGVbXSwlMjBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3IuZW5jb2RlWVVWKGJ5dGVbXSwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLllVVkltYWdlLCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5lbmNvZGVZVVYoWVVWSW1hZ2UsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGludCkiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKQ29tcHJlc3Nvci5lbmNvZGVZVVYoaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGludCwlMjBpbnQpIj48Y29kZT5USkNvbXByZXNzb3IuZW5jb2RlWVVWKGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI3NldEpQRUdJbWFnZShieXRlW10sJTIwaW50KSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpEZWNvbXByZXNzb3Iuc2V0SlBFR0ltYWdlKGJ5dGVbXSwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UgPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50KSI+PGNvZGU+VEpEZWNvbXByZXNzb3Iuc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3Iuc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpPC9hPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjb25zdHJ1Y3RvciI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkRlcHJlY2F0ZWQgQ29uc3RydWN0b3JzIHRhYmxlLCBsaXN0aW5nIGRlcHJlY2F0ZWQgY29uc3RydWN0b3JzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+RGVwcmVjYXRlZCBDb25zdHJ1Y3RvcnM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sT25lIiBzY29wZT0iY29sIj5Db25zdHJ1Y3RvciBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0Ym9keT4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI1RKQ29tcHJlc3NvcihieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KTwvYT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLlRKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImJvdHRvbU5hdiI+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaT5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkRlcHJlY2F0ZWQ8L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImhlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPlByZXY8L2xpPgorPGxpPk5leHQ8L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbD9kZXByZWNhdGVkLWxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJkZXByZWNhdGVkLWxpc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iPgorPGxpPjxhIGhyZWY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2hlbHAtZG9jLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9oZWxwLWRvYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDVkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9oZWxwLWRvYy5odG1sCkBAIC0wLDAgKzEsMjEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFQSSBIZWxwPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InN0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJBUEkgSGVscCI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGk+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkhlbHA8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sP2hlbHAtZG9jLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaGVscC1kb2MuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl90b3AiPgorPGxpPjxhIGhyZWY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl90b3AiKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+Cis8aDEgY2xhc3M9InRpdGxlIj5Ib3cgVGhpcyBBUEkgRG9jdW1lbnQgSXMgT3JnYW5pemVkPC9oMT4KKzxkaXYgY2xhc3M9InN1YlRpdGxlIj5UaGlzIEFQSSAoQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlKSBkb2N1bWVudCBoYXMgcGFnZXMgY29ycmVzcG9uZGluZyB0byB0aGUgaXRlbXMgaW4gdGhlIG5hdmlnYXRpb24gYmFyLCBkZXNjcmliZWQgYXMgZm9sbG93cy48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDI+UGFja2FnZTwvaDI+Cis8cD5FYWNoIHBhY2thZ2UgaGFzIGEgcGFnZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBpdHMgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcywgd2l0aCBhIHN1bW1hcnkgZm9yIGVhY2guIFRoaXMgcGFnZSBjYW4gY29udGFpbiBzaXggY2F0ZWdvcmllczo8L3A+Cis8dWw+Cis8bGk+SW50ZXJmYWNlcyAoaXRhbGljKTwvbGk+Cis8bGk+Q2xhc3NlczwvbGk+Cis8bGk+RW51bXM8L2xpPgorPGxpPkV4Y2VwdGlvbnM8L2xpPgorPGxpPkVycm9yczwvbGk+Cis8bGk+QW5ub3RhdGlvbiBUeXBlczwvbGk+Cis8L3VsPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoMj5DbGFzcy9JbnRlcmZhY2U8L2gyPgorPHA+RWFjaCBjbGFzcywgaW50ZXJmYWNlLCBuZXN0ZWQgY2xhc3MgYW5kIG5lc3RlZCBpbnRlcmZhY2UgaGFzIGl0cyBvd24gc2VwYXJhdGUgcGFnZS4gRWFjaCBvZiB0aGVzZSBwYWdlcyBoYXMgdGhyZWUgc2VjdGlvbnMgY29uc2lzdGluZyBvZiBhIGNsYXNzL2ludGVyZmFjZSBkZXNjcmlwdGlvbiwgc3VtbWFyeSB0YWJsZXMsIGFuZCBkZXRhaWxlZCBtZW1iZXIgZGVzY3JpcHRpb25zOjwvcD4KKzx1bD4KKzxsaT5DbGFzcyBpbmhlcml0YW5jZSBkaWFncmFtPC9saT4KKzxsaT5EaXJlY3QgU3ViY2xhc3NlczwvbGk+Cis8bGk+QWxsIEtub3duIFN1YmludGVyZmFjZXM8L2xpPgorPGxpPkFsbCBLbm93biBJbXBsZW1lbnRpbmcgQ2xhc3NlczwvbGk+Cis8bGk+Q2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uPC9saT4KKzxsaT5DbGFzcy9pbnRlcmZhY2UgZGVzY3JpcHRpb248L2xpPgorPC91bD4KKzx1bD4KKzxsaT5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvbGk+Cis8bGk+RmllbGQgU3VtbWFyeTwvbGk+Cis8bGk+Q29uc3RydWN0b3IgU3VtbWFyeTwvbGk+Cis8bGk+TWV0aG9kIFN1bW1hcnk8L2xpPgorPC91bD4KKzx1bD4KKzxsaT5GaWVsZCBEZXRhaWw8L2xpPgorPGxpPkNvbnN0cnVjdG9yIERldGFpbDwvbGk+Cis8bGk+TWV0aG9kIERldGFpbDwvbGk+Cis8L3VsPgorPHA+RWFjaCBzdW1tYXJ5IGVudHJ5IGNvbnRhaW5zIHRoZSBmaXJzdCBzZW50ZW5jZSBmcm9tIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBmb3IgdGhhdCBpdGVtLiBUaGUgc3VtbWFyeSBlbnRyaWVzIGFyZSBhbHBoYWJldGljYWwsIHdoaWxlIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuIFRoaXMgcHJlc2VydmVzIHRoZSBsb2dpY2FsIGdyb3VwaW5ncyBlc3RhYmxpc2hlZCBieSB0aGUgcHJvZ3JhbW1lci48L3A+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGgyPkFubm90YXRpb24gVHlwZTwvaDI+Cis8cD5FYWNoIGFubm90YXRpb24gdHlwZSBoYXMgaXRzIG93biBzZXBhcmF0ZSBwYWdlIHdpdGggdGhlIGZvbGxvd2luZyBzZWN0aW9uczo8L3A+Cis8dWw+Cis8bGk+QW5ub3RhdGlvbiBUeXBlIGRlY2xhcmF0aW9uPC9saT4KKzxsaT5Bbm5vdGF0aW9uIFR5cGUgZGVzY3JpcHRpb248L2xpPgorPGxpPlJlcXVpcmVkIEVsZW1lbnQgU3VtbWFyeTwvbGk+Cis8bGk+T3B0aW9uYWwgRWxlbWVudCBTdW1tYXJ5PC9saT4KKzxsaT5FbGVtZW50IERldGFpbDwvbGk+Cis8L3VsPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoMj5FbnVtPC9oMj4KKzxwPkVhY2ggZW51bSBoYXMgaXRzIG93biBzZXBhcmF0ZSBwYWdlIHdpdGggdGhlIGZvbGxvd2luZyBzZWN0aW9uczo8L3A+Cis8dWw+Cis8bGk+RW51bSBkZWNsYXJhdGlvbjwvbGk+Cis8bGk+RW51bSBkZXNjcmlwdGlvbjwvbGk+Cis8bGk+RW51bSBDb25zdGFudCBTdW1tYXJ5PC9saT4KKzxsaT5FbnVtIENvbnN0YW50IERldGFpbDwvbGk+Cis8L3VsPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoMj5UcmVlIChDbGFzcyBIaWVyYXJjaHkpPC9oMj4KKzxwPlRoZXJlIGlzIGEgPGEgaHJlZj0ib3ZlcnZpZXctdHJlZS5odG1sIj5DbGFzcyBIaWVyYXJjaHk8L2E+IHBhZ2UgZm9yIGFsbCBwYWNrYWdlcywgcGx1cyBhIGhpZXJhcmNoeSBmb3IgZWFjaCBwYWNrYWdlLiBFYWNoIGhpZXJhcmNoeSBwYWdlIGNvbnRhaW5zIGEgbGlzdCBvZiBjbGFzc2VzIGFuZCBhIGxpc3Qgb2YgaW50ZXJmYWNlcy4gVGhlIGNsYXNzZXMgYXJlIG9yZ2FuaXplZCBieSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUgc3RhcnRpbmcgd2l0aCA8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPi4gVGhlIGludGVyZmFjZXMgZG8gbm90IGluaGVyaXQgZnJvbSA8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPi48L3A+Cis8dWw+Cis8bGk+V2hlbiB2aWV3aW5nIHRoZSBPdmVydmlldyBwYWdlLCBjbGlja2luZyBvbiAiVHJlZSIgZGlzcGxheXMgdGhlIGhpZXJhcmNoeSBmb3IgYWxsIHBhY2thZ2VzLjwvbGk+Cis8bGk+V2hlbiB2aWV3aW5nIGEgcGFydGljdWxhciBwYWNrYWdlLCBjbGFzcyBvciBpbnRlcmZhY2UgcGFnZSwgY2xpY2tpbmcgIlRyZWUiIGRpc3BsYXlzIHRoZSBoaWVyYXJjaHkgZm9yIG9ubHkgdGhhdCBwYWNrYWdlLjwvbGk+Cis8L3VsPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoMj5EZXByZWNhdGVkIEFQSTwvaDI+Cis8cD5UaGUgPGEgaHJlZj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQgQVBJPC9hPiBwYWdlIGxpc3RzIGFsbCBvZiB0aGUgQVBJIHRoYXQgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuIEEgZGVwcmVjYXRlZCBBUEkgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UsIGdlbmVyYWxseSBkdWUgdG8gaW1wcm92ZW1lbnRzLCBhbmQgYSByZXBsYWNlbWVudCBBUEkgaXMgdXN1YWxseSBnaXZlbi4gRGVwcmVjYXRlZCBBUElzIG1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMuPC9wPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoMj5JbmRleDwvaDI+Cis8cD5UaGUgPGEgaHJlZj0iaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPiBjb250YWlucyBhbiBhbHBoYWJldGljIGxpc3Qgb2YgYWxsIGNsYXNzZXMsIGludGVyZmFjZXMsIGNvbnN0cnVjdG9ycywgbWV0aG9kcywgYW5kIGZpZWxkcy48L3A+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGgyPlByZXYvTmV4dDwvaDI+Cis8cD5UaGVzZSBsaW5rcyB0YWtlIHlvdSB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBjbGFzcywgaW50ZXJmYWNlLCBwYWNrYWdlLCBvciByZWxhdGVkIHBhZ2UuPC9wPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoMj5GcmFtZXMvTm8gRnJhbWVzPC9oMj4KKzxwPlRoZXNlIGxpbmtzIHNob3cgYW5kIGhpZGUgdGhlIEhUTUwgZnJhbWVzLiAgQWxsIHBhZ2VzIGFyZSBhdmFpbGFibGUgd2l0aCBvciB3aXRob3V0IGZyYW1lcy48L3A+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGgyPkFsbCBDbGFzc2VzPC9oMj4KKzxwPlRoZSA8YSBocmVmPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+IGxpbmsgc2hvd3MgYWxsIGNsYXNzZXMgYW5kIGludGVyZmFjZXMgZXhjZXB0IG5vbi1zdGF0aWMgbmVzdGVkIHR5cGVzLjwvcD4KKzwvbGk+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDI+U2VyaWFsaXplZCBGb3JtPC9oMj4KKzxwPkVhY2ggc2VyaWFsaXphYmxlIG9yIGV4dGVybmFsaXphYmxlIGNsYXNzIGhhcyBhIGRlc2NyaXB0aW9uIG9mIGl0cyBzZXJpYWxpemF0aW9uIGZpZWxkcyBhbmQgbWV0aG9kcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvZiBpbnRlcmVzdCB0byByZS1pbXBsZW1lbnRvcnMsIG5vdCB0byBkZXZlbG9wZXJzIHVzaW5nIHRoZSBBUEkuIFdoaWxlIHRoZXJlIGlzIG5vIGxpbmsgaW4gdGhlIG5hdmlnYXRpb24gYmFyLCB5b3UgY2FuIGdldCB0byB0aGlzIGluZm9ybWF0aW9uIGJ5IGdvaW5nIHRvIGFueSBzZXJpYWxpemVkIGNsYXNzIGFuZCBjbGlja2luZyAiU2VyaWFsaXplZCBGb3JtIiBpbiB0aGUgIlNlZSBhbHNvIiBzZWN0aW9uIG9mIHRoZSBjbGFzcyBkZXNjcmlwdGlvbi48L3A+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGgyPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvaDI+Cis8cD5UaGUgPGEgaHJlZj0iY29uc3RhbnQtdmFsdWVzLmh0bWwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT4gcGFnZSBsaXN0cyB0aGUgc3RhdGljIGZpbmFsIGZpZWxkcyBhbmQgdGhlaXIgdmFsdWVzLjwvcD4KKzwvbGk+Cis8L3VsPgorPGVtPlRoaXMgaGVscCBmaWxlIGFwcGxpZXMgdG8gQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZCBkb2NsZXQuPC9lbT48L2Rpdj4KKzwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImJvdHRvbU5hdiI+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaT5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+SGVscDwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2PC9saT4KKzxsaT5OZXh0PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWw/aGVscC1kb2MuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJoZWxwLWRvYy5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+Cis8bGk+PGEgaHJlZj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvaW5kZXgtYWxsLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9pbmRleC1hbGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjZjN2VhMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2luZGV4LWFsbC5odG1sCkBAIC0wLDAgKzEsMTAyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbmRleDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuL3N0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJbmRleCI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaT5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkluZGV4PC9saT4KKzxsaT48YSBocmVmPSIuL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPlByZXY8L2xpPgorPGxpPk5leHQ8L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi9pbmRleC5odG1sP2luZGV4LWFsbC5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4LWFsbC5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+Cis8bGk+PGEgaHJlZj0iLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJjb250ZW50Q29udGFpbmVyIj48YSBocmVmPSIjX0JfIj5CPC9hPiZuYnNwOzxhIGhyZWY9IiNfQ18iPkM8L2E+Jm5ic3A7PGEgaHJlZj0iI19EXyI+RDwvYT4mbmJzcDs8YSBocmVmPSIjX0VfIj5FPC9hPiZuYnNwOzxhIGhyZWY9IiNfRl8iPkY8L2E+Jm5ic3A7PGEgaHJlZj0iI19HXyI+RzwvYT4mbmJzcDs8YSBocmVmPSIjX0hfIj5IPC9hPiZuYnNwOzxhIGhyZWY9IiNfSV8iPkk8L2E+Jm5ic3A7PGEgaHJlZj0iI19KXyI+SjwvYT4mbmJzcDs8YSBocmVmPSIjX05fIj5OPC9hPiZuYnNwOzxhIGhyZWY9IiNfT18iPk88L2E+Jm5ic3A7PGEgaHJlZj0iI19QXyI+UDwvYT4mbmJzcDs8YSBocmVmPSIjX1NfIj5TPC9hPiZuYnNwOzxhIGhyZWY9IiNfVF8iPlQ8L2E+Jm5ic3A7PGEgaHJlZj0iI19ZXyI+WTwvYT4mbmJzcDs8YSBuYW1lPSJfQl8iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+QjwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemUoaW50LCUyMGludCwlMjBpbnQpIj5idWZTaXplKGludCwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcKKyBpbWFnZSB3aXRoIHRoZSBnaXZlbiB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNidWZTaXplWVVWKGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPmJ1ZlNpemVZVVYoaW50LCBpbnQsIGludCwgaW50KTwvYT48L3NwYW4+IC0gU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hcgorIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemVZVVYoaW50LCUyMGludCwlMjBpbnQpIj5idWZTaXplWVVWKGludCwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USi5idWZTaXplWVVWKGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzwvZGw+Cis8YSBuYW1lPSJfQ18iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+QzwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI2NmIj5jZjwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3VzdG9tIGZpbHRlciBpbnN0YW5jZTwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2Nsb3NlKCkiPmNsb3NlKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkZyZWUgdGhlIG5hdGl2ZSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNjbG9zZSgpIj5jbG9zZSgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+RnJlZSB0aGUgbmF0aXZlIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2NvbXByZXNzKGJ5dGVbXSwlMjBpbnQpIj5jb21wcmVzcyhieXRlW10sIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNvbXByZXNzIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgSlBFRyBpbWFnZSB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2NvbXByZXNzKGludCkiPmNvbXByZXNzKGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNvbXByZXNzIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBKUEVHIGltYWdlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2NvbXByZXNzKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwYnl0ZVtdLCUyMGludCkiPmNvbXByZXNzKEJ1ZmZlcmVkSW1hZ2UsIGJ5dGVbXSwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlCisgPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gYW5kCisgPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNjb21wcmVzcyhieXRlW10sJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmNvbXByZXNzKGJ5dGVbXSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQpIj5jb21wcmVzcyhCdWZmZXJlZEltYWdlLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBhbmQKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2NvbXByZXNzKGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5jb21wcmVzcyhpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0NTX0NNWUsiPkNTX0NNWUs8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DTVlLIGNvbG9yc3BhY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19HUkFZIj5DU19HUkFZPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+R3JheXNjYWxlIGNvbG9yc3BhY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19SR0IiPkNTX1JHQjwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJHQiBjb2xvcnNwYWNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjQ1NfWUNiQ3IiPkNTX1lDYkNyPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+WUNiQ3IgY29sb3JzcGFjZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0NTX1lDQ0siPkNTX1lDQ0s8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5ZQ0NLIGNvbG9yc3BhY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCNjdXN0b21GaWx0ZXIoamF2YS5uaW8uU2hvcnRCdWZmZXIsJTIwamF2YS5hd3QuUmVjdGFuZ2xlLCUyMGphdmEuYXd0LlJlY3RhbmdsZSwlMjBpbnQsJTIwaW50LCUyMG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtKSI+Y3VzdG9tRmlsdGVyKFNob3J0QnVmZmVyLCBSZWN0YW5nbGUsIFJlY3RhbmdsZSwgaW50LCBpbnQsIFRKVHJhbnNmb3JtKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGludGVyZmFjZSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ3VzdG9tRmlsdGVyPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgRENUIGNvZWZmaWNpZW50cyBhZnRlcgorIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3CisgSlBFRyBpbWFnZS48L2Rpdj4KKzwvZGQ+Cis8L2RsPgorPGEgbmFtZT0iX0RfIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMiBjbGFzcz0idGl0bGUiPkQ8L2gyPgorPGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZ3JheXNjYWxlLCBSR0IsIG9yIENNWUsgaW1hZ2UKKyB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpEZWNvbXByZXNzb3IuZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzcyhpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoaW50W10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzcyhpbnRbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZ3JheXNjYWxlLCBSR0IsIG9yIENNWUsgaW1hZ2UKKyB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCkiPmRlY29tcHJlc3MoQnVmZmVyZWRJbWFnZSwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZGVjb21wcmVzc2VkL2RlY29kZWQgaW1hZ2UgdG8KKyB0aGUgZ2l2ZW4gPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3MoaW50LCBpbnQsIGludCwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4KKyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSwlMjBpbnQpIj5kZWNvbXByZXNzVG9ZVVYoWVVWSW1hZ2UsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgWVVWIHBsYW5hciBpbWFnZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGdpdmVuCisgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGJ5dGVbXSwlMjBpbnQpIj5kZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+PGNvZGU+VEpEZWNvbXByZXNzb3IuZGVjb21wcmVzc1RvWVVWKFlVVkltYWdlLCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihpbnQsJTIwaW50W10sJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3NUb1lVVihpbnQsIGludFtdLCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgYW5kIHJldHVybiBhCisgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSBwbGFuZXMuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzc1RvWVVWKGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgdW5pZmllZCBZVVYgcGxhbmFyIGltYWdlIGJ1ZmZlciBhbmQgcmV0dXJuIGEKKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGltYWdlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGludCkiPmRlY29tcHJlc3NUb1lVVihpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpEZWNvbXByZXNzb3IuZGVjb21wcmVzc1RvWVVWKGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzwvZGw+Cis8YSBuYW1lPSJfRV8iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+RTwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+ZW5jb2RlWVVWKFlVVkltYWdlLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGUgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4KKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGJ5dGVbXSwlMjBpbnQpIj5lbmNvZGVZVVYoYnl0ZVtdLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UgPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmVuY29kZVlVVihZVVZJbWFnZSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGludCwlMjBpbnQpIj5lbmNvZGVZVVYoaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGUgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gYSB1bmlmaWVkIFlVViBwbGFuYXIgaW1hZ2UgYnVmZmVyIGFuZCByZXR1cm4gYQorIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBlbmNvZGVkIGltYWdlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnRbXSwlMjBpbnQpIj5lbmNvZGVZVVYoaW50W10sIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkVuY29kZSB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yCisgaW5zdGFuY2UgaW50byBzZXBhcmF0ZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIGFuZCByZXR1cm4gYQorIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBlbmNvZGVkIGltYWdlIHBsYW5lcy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYoaW50KSI+ZW5jb2RlWVVWKGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmVuY29kZVlVVihpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGJ5dGVbXSwlMjBpbnQpIj5lbmNvZGVZVVYoQnVmZmVyZWRJbWFnZSwgYnl0ZVtdLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBhbmQKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihieXRlW10sJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmVuY29kZVlVVihieXRlW10sIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCkiPmVuY29kZVlVVihCdWZmZXJlZEltYWdlLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBhbmQKKyA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLmVuY29kZVlVVihpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sI2VxdWFscyhvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlNjYWxpbmdGYWN0b3IpIj5lcXVhbHMoVEpTY2FsaW5nRmFjdG9yKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpTY2FsaW5nRmFjdG9yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGluc3RhbmNlIGFuZAorIDxjb2RlPm90aGVyPC9jb2RlPiBoYXZlIHRoZSBzYW1lIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNFUlJfRkFUQUwiPkVSUl9GQVRBTDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBlcnJvciB3YXMgZmF0YWwgYW5kIG5vbi1yZWNvdmVyYWJsZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0VSUl9XQVJOSU5HIj5FUlJfV0FSTklORzwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBlcnJvciB3YXMgbm9uLWZhdGFsIGFuZCByZWNvdmVyYWJsZSwgYnV0IHRoZSBpbWFnZSBtYXkgc3RpbGwgYmUKKyBjb3JydXB0LjwvZGl2PgorPC9kZD4KKzwvZGw+Cis8YSBuYW1lPSJfRl8iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+RjwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZSgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZSgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19BQ0NVUkFURURDVCI+RkxBR19BQ0NVUkFURURDVDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlVzZSB0aGUgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nCisgY29kZWMuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj5GTEFHX0JPVFRPTVVQPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywKKyBPcGVuR0wpIG9yZGVyLCBub3QgdG9wLWRvd24gKFgxMSkgb3JkZXIuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZBU1REQ1QiPkZMQUdfRkFTVERDVDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GQVNUVVBTQU1QTEUiPkZMQUdfRkFTVFVQU0FNUExFPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbgorIHRoZSB1bmRlcmx5aW5nIGNvZGVjLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRU1NWCI+RkxBR19GT1JDRU1NWDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRSI+RkxBR19GT1JDRVNTRTwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRTIiPkZMQUdfRk9SQ0VTU0UyPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+PC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZPUkNFU1NFMyI+RkxBR19GT1JDRVNTRTM8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfUFJPR1JFU1NJVkUiPkZMQUdfUFJPR1JFU1NJVkU8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Vc2UgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmcgaW4gSlBFRyBpbWFnZXMgZ2VuZXJhdGVkIGJ5IGNvbXByZXNzaW9uIGFuZAorIHRyYW5zZm9ybSBvcGVyYXRpb25zLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19TVE9QT05XQVJOSU5HIj5GTEFHX1NUT1BPTldBUk5JTkc8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5JbW1lZGlhdGVseSBkaXNjb250aW51ZSB0aGUgY3VycmVudCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uL3RyYW5zZm9ybQorIG9wZXJhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBjb2RlYyB0aHJvd3MgYSB3YXJuaW5nIChub24tZmF0YWwgZXJyb3IpLjwvZGl2PgorPC9kZD4KKzwvZGw+Cis8YSBuYW1lPSJfR18iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+RzwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldEFscGhhT2Zmc2V0KGludCkiPmdldEFscGhhT2Zmc2V0KGludCk8L2E+PC9zcGFuPiAtIFN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Rm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBhbHBoYQorIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0Qmx1ZU9mZnNldChpbnQpIj5nZXRCbHVlT2Zmc2V0KGludCk8L2E+PC9zcGFuPiAtIFN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Rm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBibHVlCisgY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRCdWYoKSI+Z2V0QnVmKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBZVVYgaW1hZ2UgYnVmZmVyIChpZiB0aGlzIGltYWdlIGlzIHN0b3JlZCBpbiBhIHVuaWZpZWQKKyBidWZmZXIgcmF0aGVyIHRoYW4gc2VwYXJhdGUgaW1hZ2UgcGxhbmVzLik8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldENvbG9yc3BhY2UoKSI+Z2V0Q29sb3JzcGFjZSgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgY29sb3JzcGFjZSB1c2VkIGluIHRoZSBzb3VyY2UgaW1hZ2UgKEpQRUcgb3IgWVVWKSBhc3NvY2lhdGVkCisgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNnZXRDb21wcmVzc2VkU2l6ZSgpIj5nZXRDb21wcmVzc2VkU2l6ZSgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbWFnZSAoaW4gYnl0ZXMpIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQKKyBjb21wcmVzcyBvcGVyYXRpb24uPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZ2V0RGVub20oKSI+Z2V0RGVub20oKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpTY2FsaW5nRmFjdG9yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBkZW5vbWluYXRvcjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjZ2V0RXJyb3JDb2RlKCkiPmdldEVycm9yQ29kZSgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gZXhjZXB0aW9uIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBjb2RlIChvbmUgb2YgPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKLkVSUl8qPC9jb2RlPjwvYT4pIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZQorIGxhc3QgZXJyb3IuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRHcmVlbk9mZnNldChpbnQpIj5nZXRHcmVlbk9mZnNldChpbnQpPC9hPjwvc3Bhbj4gLSBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgZ3JlZW4KKyBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldEhlaWdodCgpIj5nZXRIZWlnaHQoKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRIZWlnaHQoKSI+Z2V0SGVpZ2h0KCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIFlVViBpbWFnZSAob3Igc3VicmVnaW9uLik8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldEpQRUdCdWYoKSI+Z2V0SlBFR0J1ZigpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgSlBFRyBpbWFnZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SlBFR1NpemUoKSI+Z2V0SlBFR1NpemUoKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKSBhc3NvY2lhdGVkIHdpdGggdGhpcworIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldE1DVUhlaWdodChpbnQpIj5nZXRNQ1VIZWlnaHQoaW50KTwvYT48L3NwYW4+IC0gU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldE1DVVdpZHRoKGludCkiPmdldE1DVVdpZHRoKGludCk8L2E+PC9zcGFuPiAtIFN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgTUNVIGJsb2NrIHdpZHRoIGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCNnZXROdW0oKSI+Z2V0TnVtKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKU2NhbGluZ0ZhY3RvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgbnVtZXJhdG9yPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRPZmZzZXRzKCkiPmdldE9mZnNldHMoKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIG9mZnNldHMgKGluIGJ5dGVzKSBvZiBlYWNoIHBsYW5lIHdpdGhpbiB0aGUgcGxhbmVzIG9mIGEgbGFyZ2VyCisgWVVWIGltYWdlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjZ2V0UGFkKCkiPmdldFBhZCgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbGluZSBwYWRkaW5nIHVzZWQgaW4gdGhlIFlVViBpbWFnZSBidWZmZXIgKGlmIHRoaXMgaW1hZ2UgaXMKKyBzdG9yZWQgaW4gYSB1bmlmaWVkIGJ1ZmZlciByYXRoZXIgdGhhbiBzZXBhcmF0ZSBpbWFnZSBwbGFuZXMuKTwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0UGl4ZWxTaXplKGludCkiPmdldFBpeGVsU2l6ZShpbnQpPC9hPjwvc3Bhbj4gLSBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI2dldFBsYW5lcygpIj5nZXRQbGFuZXMoKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIFlVViBpbWFnZSBwbGFuZXMuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRSZWRPZmZzZXQoaW50KSI+Z2V0UmVkT2Zmc2V0KGludCk8L2E+PC9zcGFuPiAtIFN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Rm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSByZWQKKyBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCNnZXRTY2FsZWQoaW50KSI+Z2V0U2NhbGVkKGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKU2NhbGluZ0ZhY3RvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHNjYWxlZCB2YWx1ZSBvZiA8Y29kZT5kaW1lbnNpb248L2NvZGU+LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkSGVpZ2h0KGludCwlMjBpbnQpIj5nZXRTY2FsZWRIZWlnaHQoaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCisgaGVpZ2h0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkV2lkdGgoaW50LCUyMGludCkiPmdldFNjYWxlZFdpZHRoKGludCwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCisgaGVpZ2h0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0U2NhbGluZ0ZhY3RvcnMoKSI+Z2V0U2NhbGluZ0ZhY3RvcnMoKTwvYT48L3NwYW4+IC0gU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgbGlzdCBvZiBmcmFjdGlvbmFsIHNjYWxpbmcgZmFjdG9ycyB0aGF0IHRoZSBKUEVHIGRlY29tcHJlc3NvciBpbgorIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjZ2V0U2l6ZSgpIj5nZXRTaXplKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIFlVViBpbWFnZSBidWZmZXIgKGlmIHRoaXMgaW1hZ2UgaXMKKyBzdG9yZWQgaW4gYSB1bmlmaWVkIGJ1ZmZlciByYXRoZXIgdGhhbiBzZXBhcmF0ZSBpbWFnZSBwbGFuZXMuKTwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjZ2V0U3RyaWRlcygpIj5nZXRTdHJpZGVzKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGxpbmUgb2YgZWFjaCBwbGFuZSBpbiB0aGUgWVVWIGltYWdlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U3Vic2FtcCgpIj5nZXRTdWJzYW1wKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBzb3VyY2UgaW1hZ2UKKyAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI2dldFN1YnNhbXAoKSI+Z2V0U3Vic2FtcCgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCNnZXRUcmFuc2Zvcm1lZFNpemVzKCkiPmdldFRyYW5zZm9ybWVkU2l6ZXMoKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtZXI8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcworIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQgdHJhbnNmb3JtIG9wZXJhdGlvbi48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFdpZHRoKCkiPmdldFdpZHRoKCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRXaWR0aCgpIj5nZXRXaWR0aCgpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIFlVViBpbWFnZSAob3Igc3VicmVnaW9uLik8L2Rpdj4KKzwvZGQ+Cis8L2RsPgorPGEgbmFtZT0iX0hfIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMiBjbGFzcz0idGl0bGUiPkg8L2gyPgorPGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNoYW5kbGUiPmhhbmRsZTwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjaGFuZGxlIj5oYW5kbGU8L2E+PC9zcGFuPiAtIFZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2R0PgorPGRkPiZuYnNwOzwvZGQ+Cis8L2RsPgorPGEgbmFtZT0iX0lfIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMiBjbGFzcz0idGl0bGUiPkk8L2gyPgorPGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjaXNPbmUoKSI+aXNPbmUoKTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpTY2FsaW5nRmFjdG9yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGluc3RhbmNlIGlzIGVxdWFsIHRvCisgMS8xLjwvZGl2PgorPC9kZD4KKzwvZGw+Cis8YSBuYW1lPSJfSl8iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+SjwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2pwZWdCdWYiPmpwZWdCdWY8L2E+PC9zcGFuPiAtIFZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPiZuYnNwOzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2pwZWdCdWZTaXplIj5qcGVnQnVmU2l6ZTwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjanBlZ0NvbG9yc3BhY2UiPmpwZWdDb2xvcnNwYWNlPC9hPjwvc3Bhbj4gLSBWYXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNqcGVnSGVpZ2h0Ij5qcGVnSGVpZ2h0PC9hPjwvc3Bhbj4gLSBWYXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNqcGVnU3Vic2FtcCI+anBlZ1N1YnNhbXA8L2E+PC9zcGFuPiAtIFZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPiZuYnNwOzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2pwZWdXaWR0aCI+anBlZ1dpZHRoPC9hPjwvc3Bhbj4gLSBWYXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPC9kbD4KKzxhIG5hbWU9Il9OXyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDIgY2xhc3M9InRpdGxlIj5OPC9oMj4KKzxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjTlVNQ1MiPk5VTUNTPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhlIG51bWJlciBvZiBKUEVHIGNvbG9yc3BhY2VzPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNOVU1FUlIiPk5VTUVSUjwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgZXJyb3IgY29kZXM8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI05VTU9QIj5OVU1PUDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgbG9zc2xlc3MgdHJhbnNmb3JtIG9wZXJhdGlvbnM8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI05VTVBGIj5OVU1QRjwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgcGl4ZWwgZm9ybWF0czwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjTlVNU0FNUCI+TlVNU0FNUDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9uczwvZGl2PgorPC9kZD4KKzwvZGw+Cis8YSBuYW1lPSJfT18iPgorPCEtLSAgIC0tPgorPC9hPgorPGgyIGNsYXNzPSJ0aXRsZSI+TzwvaDI+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI29wIj5vcDwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNmb3JtIG9wZXJhdGlvbiAob25lIG9mIDxjb2RlPk9QXyo8L2NvZGU+KTwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BfSEZMSVAiPk9QX0hGTElQPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+RmxpcCAobWlycm9yKSBpbWFnZSBob3Jpem9udGFsbHkuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9OT05FIj5PUF9OT05FPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+RG8gbm90IHRyYW5zZm9ybSB0aGUgcG9zaXRpb24gb2YgdGhlIGltYWdlIHBpeGVscy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1JPVDE4MCI+T1BfUk9UMTgwPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Um90YXRlIGltYWdlIDE4MCBkZWdyZWVzLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BfUk9UMjcwIj5PUF9ST1QyNzA8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Sb3RhdGUgaW1hZ2UgY291bnRlci1jbG9ja3dpc2UgYnkgOTAgZGVncmVlcy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1JPVDkwIj5PUF9ST1Q5MDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJvdGF0ZSBpbWFnZSBjbG9ja3dpc2UgYnkgOTAgZGVncmVlcy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1RSQU5TUE9TRSI+T1BfVFJBTlNQT1NFPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0IGF4aXMpLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BfVFJBTlNWRVJTRSI+T1BfVFJBTlNWRVJTRTwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRyYW5zdmVyc2UgdHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciByaWdodCB0byBsb3dlciBsZWZ0CisgYXhpcykuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9WRkxJUCI+T1BfVkZMSVA8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5GbGlwIChtaXJyb3IpIGltYWdlIHZlcnRpY2FsbHkuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfQ09QWU5PTkUiPk9QVF9DT1BZTk9ORTwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sJTIwb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm1bXSwlMjBpbnQpIj48Y29kZT5USlRyYW5zZm9ybWVyLnRyYW5zZm9ybSgpPC9jb2RlPjwvYT4gZnJvbSBjb3B5aW5nIGFueSBleHRyYSBtYXJrZXJzIChpbmNsdWRpbmcgRVhJRgorIGFuZCBJQ0MgcHJvZmlsZSBkYXRhKSBmcm9tIHRoZSBzb3VyY2UgaW1hZ2UgdG8gdGhlIG91dHB1dCBpbWFnZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9DUk9QIj5PUFRfQ1JPUDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGxvc3NsZXNzIGNyb3BwaW5nLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX0dSQVkiPk9QVF9HUkFZPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBvcHRpb24gd2lsbCBkaXNjYXJkIHRoZSBjb2xvciBkYXRhIGluIHRoZSBpbnB1dCBpbWFnZSBhbmQgcHJvZHVjZQorIGEgZ3JheXNjYWxlIG91dHB1dCBpbWFnZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9OT09VVFBVVCI+T1BUX05PT1VUUFVUPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBvcHRpb24gd2lsbCBwcmV2ZW50IDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPjxjb2RlPlRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCk8L2NvZGU+PC9hPiBmcm9tIG91dHB1dHRpbmcgYSBKUEVHIGltYWdlIGZvciB0aGlzCisgcGFydGljdWxhciB0cmFuc2Zvcm0uPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfUEVSRkVDVCI+T1BUX1BFUkZFQ1Q8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPjxjb2RlPlRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCk8L2NvZGU+PC9hPiB0byB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QKKyBwZXJmZWN0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX1BST0dSRVNTSVZFIj5PUFRfUFJPR1JFU1NJVkU8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiB0aGUgb3V0cHV0IGltYWdlCisgZ2VuZXJhdGVkIGJ5IHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0uPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfVFJJTSI+T1BUX1RSSU08L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZQorIHRyYW5zZm9ybWVkLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjb3B0aW9ucyI+b3B0aW9uczwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNmb3JtIG9wdGlvbnMgKGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPGNvZGU+T1BUXyo8L2NvZGU+KTwvZGl2PgorPC9kZD4KKzxkdD48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvYT4gLSBwYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPC9kbD4KKzxhIG5hbWU9Il9QXyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDIgY2xhc3M9InRpdGxlIj5QPC9oMj4KKzxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQUJHUiI+UEZfQUJHUjwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkFCR1IgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQVJHQiI+UEZfQVJHQjwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkFSR0IgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQkdSIj5QRl9CR1I8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5CR1IgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQkdSQSI+UEZfQkdSQTwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkJHUkEgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQkdSWCI+UEZfQkdSWDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkJHUlggcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfQ01ZSyI+UEZfQ01ZSzwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNNWUsgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfR1JBWSI+UEZfR1JBWTwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkdyYXlzY2FsZSBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0IiPlBGX1JHQjwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJHQiBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0JBIj5QRl9SR0JBPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UkdCQSBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0JYIj5QRl9SR0JYPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UkdCWCBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9YQkdSIj5QRl9YQkdSPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+WEJHUiBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9YUkdCIj5QRl9YUkdCPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+WFJHQiBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNwbGFuZUhlaWdodChpbnQsJTIwaW50LCUyMGludCkiPnBsYW5lSGVpZ2h0KGludCwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHBsYW5lIGhlaWdodCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjcGxhbmVTaXplWVVWKGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5wbGFuZVNpemVZVVYoaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgaW1hZ2UKKyBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjcGxhbmVXaWR0aChpbnQsJTIwaW50LCUyMGludCkiPnBsYW5lV2lkdGgoaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIFN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgcGxhbmUgd2lkdGggb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy48L2Rpdj4KKzwvZGQ+Cis8L2RsPgorPGEgbmFtZT0iX1NfIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMiBjbGFzcz0idGl0bGUiPlM8L2gyPgorPGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQxMSI+U0FNUF80MTE8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj40OjE6MSBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDIwIj5TQU1QXzQyMDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjQ6MjowIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80MjIiPlNBTVBfNDIyPC9hPjwvc3Bhbj4gLSBTdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+NDoyOjIgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQ0MCI+U0FNUF80NDA8L2E+PC9zcGFuPiAtIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj40OjQ6MCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQ0Ij5TQU1QXzQ0NDwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjQ6NDo0IGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChubyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZykuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QX0dSQVkiPlNBTVBfR1JBWTwvYT48L3NwYW4+IC0gU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkdyYXlzY2FsZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI3NldEJ1ZihieXRlW11bXSwlMjBpbnRbXSwlMjBpbnQsJTIwaW50W10sJTIwaW50LCUyMGludCkiPnNldEJ1ZihieXRlW11bXSwgaW50W10sIGludCwgaW50W10sIGludCwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkFzc2lnbiBhIHNldCBvZiBpbWFnZSBwbGFuZXMgdG8gdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNzZXRCdWYoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPnNldEJ1ZihieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NpZ24gYSB1bmlmaWVkIGltYWdlIGJ1ZmZlciB0byB0aGlzIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI3NldEpQRUdJbWFnZShieXRlW10sJTIwaW50KSI+c2V0SlBFR0ltYWdlKGJ5dGVbXSwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCkiPjxjb2RlPlRKRGVjb21wcmVzc29yLnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0SlBFR1F1YWxpdHkoaW50KSI+c2V0SlBFR1F1YWxpdHkoaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+U2V0IHRoZSBKUEVHIGltYWdlIHF1YWxpdHkgbGV2ZWwgZm9yIHN1YnNlcXVlbnQgY29tcHJlc3Mgb3BlcmF0aW9ucy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIFJHQiwgZ3JheXNjYWxlLCBvciBDTVlLIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMKKyBjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEpDb21wcmVzc29yLnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIGFuIHVuY29tcHJlc3NlZCBSR0Igb3IgZ3JheXNjYWxlIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMKKyBjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLllVVkltYWdlKSI+c2V0U291cmNlSW1hZ2UoWVVWSW1hZ2UpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIFlVViBwbGFuYXIgc291cmNlIGltYWdlIHdpdGggdGhpcyBjb21wcmVzc29yCisgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50KSI+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIHRoZSBKUEVHIGltYWdlIG9mIGxlbmd0aCA8Y29kZT5pbWFnZVNpemU8L2NvZGU+IGJ5dGVzIHN0b3JlZCBpbgorIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLllVVkltYWdlKSI+c2V0U291cmNlSW1hZ2UoWVVWSW1hZ2UpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIHRoZSBzcGVjaWZpZWQgWVVWIHBsYW5hciBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorIGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFN1YnNhbXAoaW50KSI+c2V0U3Vic2FtcChpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5TZXQgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGZvciBzdWJzZXF1ZW50IGNvbXByZXNzL2VuY29kZQorIG9wZXJhdGlvbnMuPC9kaXY+Cis8L2RkPgorPC9kbD4KKzxhIG5hbWU9Il9UXyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDIgY2xhc3M9InRpdGxlIj5UPC9oMj4KKzxkbD4KKzxkdD48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEo8L3NwYW4+PC9hPiAtIENsYXNzIGluIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHVyYm9KUEVHIHV0aWxpdHkgY2xhc3MgKGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQpPC9kaXY+Cis8L2RkPgorPGR0PjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpDb21wcmVzc29yPC9zcGFuPjwvYT4gLSBDbGFzcyBpbiA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlR1cmJvSlBFRyBjb21wcmVzc29yPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKCkiPlRKQ29tcHJlc3NvcigpPC9hPjwvc3Bhbj4gLSBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+VEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIHVuY29tcHJlc3NlZAorIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+c3JjSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQKKyBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPlRKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPgorPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3Nvci5USkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+VEpDb21wcmVzc29yKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIHVuY29tcHJlc3NlZAorIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+c3JjSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQKKyBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USkN1c3RvbUZpbHRlcjwvc3Bhbj48L2E+IC0gSW50ZXJmYWNlIGluIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3VzdG9tIGZpbHRlciBjYWxsYmFjayBpbnRlcmZhY2U8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKRGVjb21wcmVzc29yPC9zcGFuPjwvYT4gLSBDbGFzcyBpbiA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlR1cmJvSlBFRyBkZWNvbXByZXNzb3I8L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI1RKRGVjb21wcmVzc29yKCkiPlRKRGVjb21wcmVzc29yKCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI1RKRGVjb21wcmVzc29yKGJ5dGVbXSkiPlRKRGVjb21wcmVzc29yKGJ5dGVbXSk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcgc291cmNlCisgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI1RKRGVjb21wcmVzc29yKGJ5dGVbXSwlMjBpbnQpIj5USkRlY29tcHJlc3NvcihieXRlW10sIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcgc291cmNlCisgaW1hZ2Ugb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluCisgPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjVEpEZWNvbXByZXNzb3Iob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UpIj5USkRlY29tcHJlc3NvcihZVVZJbWFnZSk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIFlVViBwbGFuYXIKKyBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnl1dkltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCisgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USkV4Y2VwdGlvbjwvc3Bhbj48L2E+IC0gRXhjZXB0aW9uIGluIDxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oKSI+VEpFeGNlcHRpb24oKTwvYT48L3NwYW4+IC0gQ29uc3RydWN0b3IgZm9yIGV4Y2VwdGlvbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCNUSkV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5UaHJvd2FibGUpIj5USkV4Y2VwdGlvbihTdHJpbmcsIFRocm93YWJsZSk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBleGNlcHRpb24gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZykiPlRKRXhjZXB0aW9uKFN0cmluZyk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBleGNlcHRpb24gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywlMjBpbnQpIj5USkV4Y2VwdGlvbihTdHJpbmcsIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBleGNlcHRpb24gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSkiPlRKRXhjZXB0aW9uKFRocm93YWJsZSk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBleGNlcHRpb24gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKU2NhbGluZ0ZhY3Rvcjwvc3Bhbj48L2E+IC0gQ2xhc3MgaW4gPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5GcmFjdGlvbmFsIHNjYWxpbmcgZmFjdG9yPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjVEpTY2FsaW5nRmFjdG9yKGludCwlMjBpbnQpIj5USlNjYWxpbmdGYWN0b3IoaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlNjYWxpbmdGYWN0b3I8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgc2NhbGluZyBmYWN0b3IgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USlRyYW5zZm9ybTwvc3Bhbj48L2E+IC0gQ2xhc3MgaW4gPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Mb3NzbGVzcyB0cmFuc2Zvcm0gcGFyYW1ldGVyczwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjVEpUcmFuc2Zvcm0oKSI+VEpUcmFuc2Zvcm0oKTwvYT48L3NwYW4+IC0gQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyBsb3NzbGVzcyB0cmFuc2Zvcm0gaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNUSlRyYW5zZm9ybShpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkN1c3RvbUZpbHRlcikiPlRKVHJhbnNmb3JtKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFRKQ3VzdG9tRmlsdGVyKTwvYT48L3NwYW4+IC0gQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyBsb3NzbGVzcyB0cmFuc2Zvcm0gaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI1RKVHJhbnNmb3JtKGphdmEuYXd0LlJlY3RhbmdsZSwlMjBpbnQsJTIwaW50LCUyMG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKQ3VzdG9tRmlsdGVyKSI+VEpUcmFuc2Zvcm0oUmVjdGFuZ2xlLCBpbnQsIGludCwgVEpDdXN0b21GaWx0ZXIpPC9hPjwvc3Bhbj4gLSBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IGxvc3NsZXNzIHRyYW5zZm9ybSBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGl2PgorPC9kZD4KKzxkdD48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USlRyYW5zZm9ybWVyPC9zcGFuPjwvYT4gLSBDbGFzcyBpbiA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPlR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lcjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCNUSlRyYW5zZm9ybWVyKCkiPlRKVHJhbnNmb3JtZXIoKTwvYT48L3NwYW4+IC0gQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtZXI8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgbG9zc2xlc3MgdHJhbnNmb3JtZXIgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI1RKVHJhbnNmb3JtZXIoYnl0ZVtdKSI+VEpUcmFuc2Zvcm1lcihieXRlW10pPC9hPjwvc3Bhbj4gLSBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm1lcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCisgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjVEpUcmFuc2Zvcm1lcihieXRlW10sJTIwaW50KSI+VEpUcmFuc2Zvcm1lcihieXRlW10sIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybWVyPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKKyBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KKyA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPnRyYW5zZm9ybShieXRlW11bXSwgVEpUcmFuc2Zvcm1bXSwgaW50KTwvYT48L3NwYW4+IC0gTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtZXI8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Mb3NzbGVzc2x5IHRyYW5zZm9ybSB0aGUgSlBFRyBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmFuc2Zvcm1lcgorIGluc3RhbmNlIGludG8gb25lIG9yIG1vcmUgSlBFRyBpbWFnZXMgc3RvcmVkIGluIHRoZSBnaXZlbiBkZXN0aW5hdGlvbgorIGJ1ZmZlcnMuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPnRyYW5zZm9ybShUSlRyYW5zZm9ybVtdLCBpbnQpPC9hPjwvc3Bhbj4gLSBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm1lcjwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkxvc3NsZXNzbHkgdHJhbnNmb3JtIHRoZSBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5zZm9ybWVyCisgaW5zdGFuY2UgYW5kIHJldHVybiBhbiBhcnJheSBvZiA8YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEpEZWNvbXByZXNzb3I8L2NvZGU+PC9hPiBpbnN0YW5jZXMsIGVhY2ggb2YKKyB3aGljaCBoYXMgYSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC48L2Rpdj4KKzwvZGQ+Cis8L2RsPgorPGEgbmFtZT0iX1lfIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMiBjbGFzcz0idGl0bGUiPlk8L2gyPgorPGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCN5dXZIZWlnaHQiPnl1dkhlaWdodDwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjeXV2SW1hZ2UiPnl1dkltYWdlPC9hPjwvc3Bhbj4gLSBWYXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPGR0PjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5ZVVZJbWFnZTwvc3Bhbj48L2E+IC0gQ2xhc3MgaW4gPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyBhIFlVViBwbGFuYXIgaW1hZ2UgYW5kIHRoZSBtZXRhZGF0YQorIGFzc29jaWF0ZWQgd2l0aCBpdC48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI1lVVkltYWdlKGludCwlMjBpbnRbXSwlMjBpbnQsJTIwaW50KSI+WVVWSW1hZ2UoaW50LCBpbnRbXSwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBiYWNrZWQgYnkgc2VwYXJhdGUgaW1hZ2UKKyBwbGFuZXMsIGFuZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbWFnZSBwbGFuZXMuPC9kaXY+Cis8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNZVVZJbWFnZShpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5ZVVZJbWFnZShpbnQsIGludCwgaW50LCBpbnQpPC9hPjwvc3Bhbj4gLSBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBiYWNrZWQgYnkgYSB1bmlmaWVkIGltYWdlCisgYnVmZmVyLCBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW1hZ2UgYnVmZmVyLjwvZGl2PgorPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjWVVWSW1hZ2UoYnl0ZVtdW10sJTIwaW50W10sJTIwaW50LCUyMGludFtdLCUyMGludCwlMjBpbnQpIj5ZVVZJbWFnZShieXRlW11bXSwgaW50W10sIGludCwgaW50W10sIGludCwgaW50KTwvYT48L3NwYW4+IC0gQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2R0PgorPGRkPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgZnJvbSBhIHNldCBvZiBleGlzdGluZyBpbWFnZQorIHBsYW5lcy48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI1lVVkltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5ZVVZJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L2E+PC9zcGFuPiAtIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBuZXcgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGZyb20gYW4gZXhpc3RpbmcgdW5pZmllZCBpbWFnZQorIGJ1ZmZlci48L2Rpdj4KKzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI3l1dk9mZnNldHMiPnl1dk9mZnNldHM8L2E+PC9zcGFuPiAtIFZhcmlhYmxlIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2R0PgorPGRkPiZuYnNwOzwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+PGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI3l1dlBhZCI+eXV2UGFkPC9hPjwvc3Bhbj4gLSBWYXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCN5dXZQbGFuZXMiPnl1dlBsYW5lczwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjeXV2U3RyaWRlcyI+eXV2U3RyaWRlczwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjeXV2U3Vic2FtcCI+eXV2U3Vic2FtcDwvYT48L3NwYW4+IC0gVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvZHQ+Cis8ZGQ+Jm5ic3A7PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjeXV2V2lkdGgiPnl1dldpZHRoPC9hPjwvc3Bhbj4gLSBWYXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9kdD4KKzxkZD4mbmJzcDs8L2RkPgorPC9kbD4KKzxhIGhyZWY9IiNfQl8iPkI8L2E+Jm5ic3A7PGEgaHJlZj0iI19DXyI+QzwvYT4mbmJzcDs8YSBocmVmPSIjX0RfIj5EPC9hPiZuYnNwOzxhIGhyZWY9IiNfRV8iPkU8L2E+Jm5ic3A7PGEgaHJlZj0iI19GXyI+RjwvYT4mbmJzcDs8YSBocmVmPSIjX0dfIj5HPC9hPiZuYnNwOzxhIGhyZWY9IiNfSF8iPkg8L2E+Jm5ic3A7PGEgaHJlZj0iI19JXyI+STwvYT4mbmJzcDs8YSBocmVmPSIjX0pfIj5KPC9hPiZuYnNwOzxhIGhyZWY9IiNfTl8iPk48L2E+Jm5ic3A7PGEgaHJlZj0iI19PXyI+TzwvYT4mbmJzcDs8YSBocmVmPSIjX1BfIj5QPC9hPiZuYnNwOzxhIGhyZWY9IiNfU18iPlM8L2E+Jm5ic3A7PGEgaHJlZj0iI19UXyI+VDwvYT4mbmJzcDs8YSBocmVmPSIjX1lfIj5ZPC9hPiZuYnNwOzwvZGl2PgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGk+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5JbmRleDwvbGk+Cis8bGk+PGEgaHJlZj0iLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2PC9saT4KKzxsaT5OZXh0PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4vaW5kZXguaHRtbD9pbmRleC1hbGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC1hbGwuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iPgorPGxpPjxhIGhyZWY9Ii4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvaW5kZXguaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyMTA3NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgRnJhbWVzZXQvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvZnJhbWVzZXQuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdlbmVyYXRlZCBEb2N1bWVudGF0aW9uIChVbnRpdGxlZCk8L3RpdGxlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgIHRtcFRhcmdldFBhZ2UgPSAiIiArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHRtcFRhcmdldFBhZ2UgIT0gIiIgJiYgdG1wVGFyZ2V0UGFnZSAhPSAidW5kZWZpbmVkIikKKyAgICAgICAgdG1wVGFyZ2V0UGFnZSA9IHRtcFRhcmdldFBhZ2Uuc3Vic3RyaW5nKDEpOworICAgIGlmICh0bXBUYXJnZXRQYWdlLmluZGV4T2YoIjoiKSAhPSAtMSB8fCAodG1wVGFyZ2V0UGFnZSAhPSAiIiAmJiAhdmFsaWRVUkwodG1wVGFyZ2V0UGFnZSkpKQorICAgICAgICB0bXBUYXJnZXRQYWdlID0gInVuZGVmaW5lZCI7CisgICAgdGFyZ2V0UGFnZSA9IHRtcFRhcmdldFBhZ2U7CisgICAgZnVuY3Rpb24gdmFsaWRVUkwodXJsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB1cmwgPSBkZWNvZGVVUklDb21wb25lbnQodXJsKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcG9zID0gdXJsLmluZGV4T2YoIi5odG1sIik7CisgICAgICAgIGlmIChwb3MgPT0gLTEgfHwgcG9zICE9IHVybC5sZW5ndGggLSA1KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YXIgYWxsb3dOdW1iZXIgPSBmYWxzZTsKKyAgICAgICAgdmFyIGFsbG93U2VwID0gZmFsc2U7CisgICAgICAgIHZhciBzZWVuRG90ID0gZmFsc2U7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJsLmxlbmd0aCAtIDU7IGkrKykgeworICAgICAgICAgICAgdmFyIGNoID0gdXJsLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmICgnYScgPD0gY2ggJiYgY2ggPD0gJ3onIHx8CisgICAgICAgICAgICAgICAgICAgICdBJyA8PSBjaCAmJiBjaCA8PSAnWicgfHwKKyAgICAgICAgICAgICAgICAgICAgY2ggPT0gJyQnIHx8CisgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJyB8fAorICAgICAgICAgICAgICAgICAgICBjaC5jaGFyQ29kZUF0KDApID4gMTI3KSB7CisgICAgICAgICAgICAgICAgYWxsb3dOdW1iZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGFsbG93U2VwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JworICAgICAgICAgICAgICAgICAgICB8fCBjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93TnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLycgfHwgY2ggPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxvd1NlcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGFsbG93TnVtYmVyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYWxsb3dTZXAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nKQorICAgICAgICAgICAgICAgICAgICAgc2VlbkRvdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcvJyAmJiBzZWVuRG90KQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGZ1bmN0aW9uIGxvYWRGcmFtZXMoKSB7CisgICAgICAgIGlmICh0YXJnZXRQYWdlICE9ICIiICYmIHRhcmdldFBhZ2UgIT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICAgdG9wLmNsYXNzRnJhbWUubG9jYXRpb24gPSB0b3AudGFyZ2V0UGFnZTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxmcmFtZXNldCBjb2xzPSIyMCUsODAlIiB0aXRsZT0iRG9jdW1lbnRhdGlvbiBmcmFtZSIgb25sb2FkPSJ0b3AubG9hZEZyYW1lcygpIj4KKzxmcmFtZSBzcmM9ImFsbGNsYXNzZXMtZnJhbWUuaHRtbCIgbmFtZT0icGFja2FnZUZyYW1lIiB0aXRsZT0iQWxsIGNsYXNzZXMgYW5kIGludGVyZmFjZXMgKGV4Y2VwdCBub24tc3RhdGljIG5lc3RlZCB0eXBlcykiPgorPGZyYW1lIHNyYz0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIG5hbWU9ImNsYXNzRnJhbWUiIHRpdGxlPSJQYWNrYWdlLCBjbGFzcyBhbmQgaW50ZXJmYWNlIGRlc2NyaXB0aW9ucyIgc2Nyb2xsaW5nPSJ5ZXMiPgorPG5vZnJhbWVzPgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8aDI+RnJhbWUgQWxlcnQ8L2gyPgorPHA+VGhpcyBkb2N1bWVudCBpcyBkZXNpZ25lZCB0byBiZSB2aWV3ZWQgdXNpbmcgdGhlIGZyYW1lcyBmZWF0dXJlLiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSwgeW91IGFyZSB1c2luZyBhIG5vbi1mcmFtZS1jYXBhYmxlIHdlYiBjbGllbnQuIExpbmsgdG8gPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPk5vbi1mcmFtZSB2ZXJzaW9uPC9hPi48L3A+Cis8L25vZnJhbWVzPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjlmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sCkBAIC0wLDAgKzEsMTM1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgdGl0bGU9IlN0eWxlIj4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgICB0cnkgeworICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCdpcy1leHRlcm5hbD10cnVlJykgPT0gLTEpIHsKKyAgICAgICAgICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVEoiOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKGVycikgeworICAgIH0KKy8vLS0+Cis8L3NjcmlwdD4KKzxub3NjcmlwdD4KKzxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2IENsYXNzPC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxkaXY+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPlN1bW1hcnk6Jm5ic3A7PC9saT4KKzxsaT5OZXN0ZWQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjZmllbGRfc3VtbWFyeSI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9kZXRhaWwiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPkNvbnN0ciZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2RfZGV0YWlsIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorPGRpdiBjbGFzcz0ic3ViVGl0bGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9kaXY+Cis8aDIgdGl0bGU9IkNsYXNzIFRKIiBjbGFzcz0idGl0bGUiPkNsYXNzIFRKPC9oMj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5qYXZhLmxhbmcuT2JqZWN0PC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxocj4KKzxicj4KKzxwcmU+cHVibGljIGZpbmFsIGNsYXNzIDxzcGFuIGNsYXNzPSJzdHJvbmciPlRKPC9zcGFuPgorZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHVyYm9KUEVHIHV0aWxpdHkgY2xhc3MgKGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQpPC9kaXY+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iZmllbGRfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+RmllbGQgU3VtbWFyeTwvaDM+Cis8dGFibGUgY2xhc3M9Im92ZXJ2aWV3U3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkZpZWxkIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgZmllbGRzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+RmllbGRzPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWJFbmQiPiZuYnNwOzwvc3Bhbj48L2NhcHRpb24+Cis8dHI+Cis8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5Nb2RpZmllciBhbmQgVHlwZTwvdGg+Cis8dGggY2xhc3M9ImNvbExhc3QiIHNjb3BlPSJjb2wiPkZpZWxkIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19DTVlLIj5DU19DTVlLPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DTVlLIGNvbG9yc3BhY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjQ1NfR1JBWSI+Q1NfR1JBWTwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+R3JheXNjYWxlIGNvbG9yc3BhY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjQ1NfUkdCIj5DU19SR0I8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJHQiBjb2xvcnNwYWNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0NTX1lDYkNyIj5DU19ZQ2JDcjwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+WUNiQ3IgY29sb3JzcGFjZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19ZQ0NLIj5DU19ZQ0NLPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5ZQ0NLIGNvbG9yc3BhY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRVJSX0ZBVEFMIj5FUlJfRkFUQUw8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBlcnJvciB3YXMgZmF0YWwgYW5kIG5vbi1yZWNvdmVyYWJsZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNFUlJfV0FSTklORyI+RVJSX1dBUk5JTkc8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBlcnJvciB3YXMgbm9uLWZhdGFsIGFuZCByZWNvdmVyYWJsZSwgYnV0IHRoZSBpbWFnZSBtYXkgc3RpbGwgYmUKKyBjb3JydXB0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQUNDVVJBVEVEQ1QiPkZMQUdfQUNDVVJBVEVEQ1Q8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlVzZSB0aGUgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nCisgY29kZWMuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+RkxBR19CT1RUT01VUDwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywKKyBPcGVuR0wpIG9yZGVyLCBub3QgdG9wLWRvd24gKFgxMSkgb3JkZXIuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GQVNURENUIj5GTEFHX0ZBU1REQ1Q8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfRkFTVFVQU0FNUExFIj5GTEFHX0ZBU1RVUFNBTVBMRTwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbgorIHRoZSB1bmRlcmx5aW5nIGNvZGVjLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfRk9SQ0VNTVgiPkZMQUdfRk9SQ0VNTVg8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzdHJvbmc+RGVwcmVjYXRlZC48L3N0cm9uZz4mbmJzcDs8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZPUkNFU1NFIj5GTEFHX0ZPUkNFU1NFPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3Ryb25nPkRlcHJlY2F0ZWQuPC9zdHJvbmc+Jm5ic3A7PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRTIiPkZMQUdfRk9SQ0VTU0UyPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3Ryb25nPkRlcHJlY2F0ZWQuPC9zdHJvbmc+Jm5ic3A7PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GT1JDRVNTRTMiPkZMQUdfRk9SQ0VTU0UzPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3Ryb25nPkRlcHJlY2F0ZWQuPC9zdHJvbmc+Jm5ic3A7PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19QUk9HUkVTU0lWRSI+RkxBR19QUk9HUkVTU0lWRTwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VXNlIHByb2dyZXNzaXZlIGVudHJvcHkgY29kaW5nIGluIEpQRUcgaW1hZ2VzIGdlbmVyYXRlZCBieSBjb21wcmVzc2lvbiBhbmQKKyB0cmFuc2Zvcm0gb3BlcmF0aW9ucy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX1NUT1BPTldBUk5JTkciPkZMQUdfU1RPUE9OV0FSTklORzwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+SW1tZWRpYXRlbHkgZGlzY29udGludWUgdGhlIGN1cnJlbnQgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbi90cmFuc2Zvcm0KKyBvcGVyYXRpb24gaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgdGhyb3dzIGEgd2FybmluZyAobm9uLWZhdGFsIGVycm9yKS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNOVU1DUyI+TlVNQ1M8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgSlBFRyBjb2xvcnNwYWNlczwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI05VTUVSUiI+TlVNRVJSPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgbnVtYmVyIG9mIGVycm9yIGNvZGVzPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjTlVNUEYiPk5VTVBGPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHM8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNOVU1TQU1QIj5OVU1TQU1QPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgbnVtYmVyIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9BQkdSIj5QRl9BQkdSPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5BQkdSIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9BUkdCIj5QRl9BUkdCPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5BUkdCIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9CR1IiPlBGX0JHUjwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QkdSIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9CR1JBIj5QRl9CR1JBPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5CR1JBIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9CR1JYIj5QRl9CR1JYPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5CR1JYIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9DTVlLIj5QRl9DTVlLPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DTVlLIHBpeGVsIGZvcm1hdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9HUkFZIj5QRl9HUkFZPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5HcmF5c2NhbGUgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQiI+UEZfUkdCPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SR0IgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQkEiPlBGX1JHQkE8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJHQkEgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQlgiPlBGX1JHQlg8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJHQlggcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1hCR1IiPlBGX1hCR1I8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlhCR1IgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1hSR0IiPlBGX1hSR0I8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlhSR0IgcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDExIj5TQU1QXzQxMTwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+NDoxOjEgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80MjAiPlNBTVBfNDIwPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj40OjI6MCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQyMiI+U0FNUF80MjI8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPjQ6MjoyIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQwIj5TQU1QXzQ0MDwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+NDo0OjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDQiPlNBTVBfNDQ0PC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj40OjQ6NCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyAobm8gY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcpLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfR1JBWSI+U0FNUF9HUkFZPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5HcmF5c2NhbGUuPC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2Rfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJNZXRob2QgU3VtbWFyeSB0YWJsZSwgbGlzdGluZyBtZXRob2RzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+TWV0aG9kczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xGaXJzdCIgc2NvcGU9ImNvbCI+TW9kaWZpZXIgYW5kIFR5cGU8L3RoPgorPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5NZXRob2QgYW5kIERlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemUoaW50LCUyMGludCwlMjBpbnQpIj5idWZTaXplPC9hPjwvc3Ryb25nPihpbnQmbmJzcDt3aWR0aCwKKyAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgaW50Jm5ic3A7anBlZ1N1YnNhbXApPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcKKyBpbWFnZSB3aXRoIHRoZSBnaXZlbiB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCkiPmJ1ZlNpemVZVVY8L2E+PC9zdHJvbmc+KGludCZuYnNwO3dpZHRoLAorICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICBpbnQmbmJzcDtzdWJzYW1wKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3Ryb25nPkRlcHJlY2F0ZWQuPC9zdHJvbmc+Jm5ic3A7Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5idWZTaXplWVVWKGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemVZVVYoaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+YnVmU2l6ZVlVVjwvYT48L3N0cm9uZz4oaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgaW50Jm5ic3A7cGFkLAorICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICBpbnQmbmJzcDtzdWJzYW1wKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hcgorIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRBbHBoYU9mZnNldChpbnQpIj5nZXRBbHBoYU9mZnNldDwvYT48L3N0cm9uZz4oaW50Jm5ic3A7cGl4ZWxGb3JtYXQpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgYWxwaGEKKyBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRCbHVlT2Zmc2V0KGludCkiPmdldEJsdWVPZmZzZXQ8L2E+PC9zdHJvbmc+KGludCZuYnNwO3BpeGVsRm9ybWF0KTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Gb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGJsdWUKKyBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRHcmVlbk9mZnNldChpbnQpIj5nZXRHcmVlbk9mZnNldDwvYT48L3N0cm9uZz4oaW50Jm5ic3A7cGl4ZWxGb3JtYXQpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgZ3JlZW4KKyBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRNQ1VIZWlnaHQoaW50KSI+Z2V0TUNVSGVpZ2h0PC9hPjwvc3Ryb25nPihpbnQmbmJzcDtzdWJzYW1wKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRNQ1VXaWR0aChpbnQpIj5nZXRNQ1VXaWR0aDwvYT48L3N0cm9uZz4oaW50Jm5ic3A7c3Vic2FtcCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgTUNVIGJsb2NrIHdpZHRoIGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRQaXhlbFNpemUoaW50KSI+Z2V0UGl4ZWxTaXplPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgcGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldFJlZE9mZnNldChpbnQpIj5nZXRSZWRPZmZzZXQ8L2E+PC9zdHJvbmc+KGludCZuYnNwO3BpeGVsRm9ybWF0KTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Gb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHJlZAorIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlNjYWxpbmdGYWN0b3I8L2E+W108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldFNjYWxpbmdGYWN0b3JzKCkiPmdldFNjYWxpbmdGYWN0b3JzPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluCisgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgc3VwcG9ydHMuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjcGxhbmVIZWlnaHQoaW50LCUyMGludCwlMjBpbnQpIj5wbGFuZUhlaWdodDwvYT48L3N0cm9uZz4oaW50Jm5ic3A7Y29tcG9uZW50SUQsCisgICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgcGxhbmUgaGVpZ2h0IG9mIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjcGxhbmVTaXplWVVWKGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5wbGFuZVNpemVZVVY8L2E+PC9zdHJvbmc+KGludCZuYnNwO2NvbXBvbmVudElELAorICAgICAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgICBpbnQmbmJzcDtzdHJpZGUsCisgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICBpbnQmbmJzcDtzdWJzYW1wKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIGltYWdlCisgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNwbGFuZVdpZHRoKGludCwlMjBpbnQsJTIwaW50KSI+cGxhbmVXaWR0aDwvYT48L3N0cm9uZz4oaW50Jm5ic3A7Y29tcG9uZW50SUQsCisgICAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgcGxhbmUgd2lkdGggb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9oMz4KKzxjb2RlPmNsb25lLCBlcXVhbHMsIGZpbmFsaXplLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvY29kZT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImRldGFpbHMiPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkX2RldGFpbCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+RmllbGQgRGV0YWlsPC9oMz4KKzxhIG5hbWU9Ik5VTVNBTVAiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pk5VTVNBTVA8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE5VTVNBTVA8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgbnVtYmVyIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnM8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLk5VTVNBTVAiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlNBTVBfNDQ0Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5TQU1QXzQ0NDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgU0FNUF80NDQ8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj40OjQ6NCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyAobm8gY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcpLiAgVGhlIEpQRUcKKyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZSBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IHBpeGVsIGluIHRoZQorIHNvdXJjZSBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlNBTVBfNDQ0Ij5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJTQU1QXzQyMiI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+U0FNUF80MjI8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IFNBTVBfNDIyPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+NDoyOjIgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZQorIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMngxIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouU0FNUF80MjIiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlNBTVBfNDIwIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5TQU1QXzQyMDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgU0FNUF80MjA8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj40OjI6MCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIFRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lCisgY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSAyeDIgYmxvY2sgb2YgcGl4ZWxzIGluIHRoZSBzb3VyY2UgaW1hZ2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5TQU1QXzQyMCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU0FNUF9HUkFZIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5TQU1QX0dSQVk8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IFNBTVBfR1JBWTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkdyYXlzY2FsZS4gIFRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gbm8gY2hyb21pbmFuY2UgY29tcG9uZW50cy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlNBTVBfR1JBWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU0FNUF80NDAiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlNBTVBfNDQwPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBTQU1QXzQ0MDwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjQ6NDowIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDF4MiBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyBOb3RlIHRoYXQgNDo0OjAgc3Vic2FtcGxpbmcgaXMgbm90IGZ1bGx5IGFjY2VsZXJhdGVkIGluIGxpYmpwZWctdHVyYm8uPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5TQU1QXzQ0MCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iU0FNUF80MTEiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlNBTVBfNDExPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBTQU1QXzQxMTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjQ6MToxIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDR4MSBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyBKUEVHIGltYWdlcyBjb21wcmVzc2VkIHdpdGggNDoxOjEgc3Vic2FtcGxpbmcgd2lsbCBiZSBhbG1vc3QgZXhhY3RseSB0aGUKKyBzYW1lIHNpemUgYXMgdGhvc2UgY29tcHJlc3NlZCB3aXRoIDQ6MjowIHN1YnNhbXBsaW5nLCBhbmQgaW4gdGhlCisgYWdncmVnYXRlLCBib3RoIHN1YnNhbXBsaW5nIG1ldGhvZHMgcHJvZHVjZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lCisgcGVyY2VwdHVhbCBxdWFsaXR5LiAgSG93ZXZlciwgNDoxOjEgaXMgYmV0dGVyIGFibGUgdG8gcmVwcm9kdWNlIHNoYXJwCisgaG9yaXpvbnRhbCBmZWF0dXJlcy4gIE5vdGUgdGhhdCA0OjE6MSBzdWJzYW1wbGluZyBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQKKyBpbiBsaWJqcGVnLXR1cmJvLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouU0FNUF80MTEiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik5VTVBGIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5OVU1QRjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgTlVNUEY8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHM8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLk5VTVBGIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJQRl9SR0IiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlBGX1JHQjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgUEZfUkdCPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UkdCIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKKyBzdG9yZWQgaW4gMy1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfUkdCIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJQRl9CR1IiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlBGX0JHUjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgUEZfQkdSPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QkdSIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKKyBzdG9yZWQgaW4gMy1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgQiwgRywgUiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfQkdSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJQRl9SR0JYIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5QRl9SR0JYPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBQRl9SR0JYPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UkdCWCBwaXhlbCBmb3JtYXQuICBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlCisgc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIFIsIEcsIEIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlCisgYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX1JHQlgiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlBGX0JHUlgiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlBGX0JHUlg8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IFBGX0JHUlg8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5CR1JYIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKKyBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgQiwgRywgUiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiAgVGhlIFggY29tcG9uZW50IGlzIGlnbm9yZWQgd2hlbiBjb21wcmVzc2luZworIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfQkdSWCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iUEZfWEJHUiI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+UEZfWEJHUjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgUEZfWEJHUjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlhCR1IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorIHN0b3JlZCBpbiA0LWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBSLCBHLCBCIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgYnl0ZQorIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuICBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nCisgYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9YQkdSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJQRl9YUkdCIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5QRl9YUkdCPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBQRl9YUkdCPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+WFJHQiBwaXhlbCBmb3JtYXQuICBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlCisgc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBieXRlCisgYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX1hSR0IiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlBGX0dSQVkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlBGX0dSQVk8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IFBGX0dSQVk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5HcmF5c2NhbGUgcGl4ZWwgZm9ybWF0LiAgRWFjaCAxLWJ5dGUgcGl4ZWwgcmVwcmVzZW50cyBhIGx1bWluYW5jZQorIChicmlnaHRuZXNzKSBsZXZlbCBmcm9tIDAgdG8gMjU1LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfR1JBWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iUEZfUkdCQSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+UEZfUkdCQTwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgUEZfUkdCQTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJHQkEgcGl4ZWwgZm9ybWF0LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQlgiPjxjb2RlPlBGX1JHQlg8L2NvZGU+PC9hPiwgZXhjZXB0IHRoYXQgd2hlbgorIGRlY29tcHJlc3NpbmcsIHRoZSBYIGJ5dGUgaXMgZ3VhcmFudGVlZCB0byBiZSAweEZGLCB3aGljaCBjYW4gYmUKKyBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX1JHQkEiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlBGX0JHUkEiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlBGX0JHUkE8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IFBGX0JHUkE8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5CR1JBIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9CR1JYIj48Y29kZT5QRl9CR1JYPC9jb2RlPjwvYT4sIGV4Y2VwdCB0aGF0IHdoZW4KKyBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgaW50ZXJwcmV0ZWQgYXMgYW4gb3BhcXVlIGFscGhhIGNoYW5uZWwuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5QRl9CR1JBIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJQRl9BQkdSIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5QRl9BQkdSPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBQRl9BQkdSPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QUJHUiBwaXhlbCBmb3JtYXQuICBUaGlzIGlzIHRoZSBzYW1lIGFzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfWEJHUiI+PGNvZGU+UEZfWEJHUjwvY29kZT48L2E+LCBleGNlcHQgdGhhdCB3aGVuCisgZGVjb21wcmVzc2luZywgdGhlIFggYnl0ZSBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZQorIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouUEZfQUJHUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iUEZfQVJHQiI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+UEZfQVJHQjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgUEZfQVJHQjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkFSR0IgcGl4ZWwgZm9ybWF0LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1hSR0IiPjxjb2RlPlBGX1hSR0I8L2NvZGU+PC9hPiwgZXhjZXB0IHRoYXQgd2hlbgorIGRlY29tcHJlc3NpbmcsIHRoZSBYIGJ5dGUgaXMgZ3VhcmFudGVlZCB0byBiZSAweEZGLCB3aGljaCBjYW4gYmUKKyBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX0FSR0IiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlBGX0NNWUsiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlBGX0NNWUs8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IFBGX0NNWUs8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DTVlLIHBpeGVsIGZvcm1hdC4gIFVubGlrZSBSR0IsIHdoaWNoIGlzIGFuIGFkZGl0aXZlIGNvbG9yIG1vZGVsIHVzZWQKKyBwcmltYXJpbHkgZm9yIGRpc3BsYXksIENNWUsgKEN5YW4vTWFnZW50YS9ZZWxsb3cvS2V5KSBpcyBhIHN1YnRyYWN0aXZlCisgY29sb3IgbW9kZWwgdXNlZCBwcmltYXJpbHkgZm9yIHByaW50aW5nLiAgSW4gdGhlIENNWUsgY29sb3IgbW9kZWwsIHRoZQorIHZhbHVlIG9mIGVhY2ggY29sb3IgY29tcG9uZW50IHR5cGljYWxseSBjb3JyZXNwb25kcyB0byBhbiBhbW91bnQgb2YgY3lhbiwKKyBtYWdlbnRhLCB5ZWxsb3csIG9yIGJsYWNrIGluayB0aGF0IGlzIGFwcGxpZWQgdG8gYSB3aGl0ZSBiYWNrZ3JvdW5kLiAgSW4KKyBvcmRlciB0byBjb252ZXJ0IGJldHdlZW4gQ01ZSyBhbmQgUkdCLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGEgY29sb3IKKyBtYW5hZ2VtZW50IHN5c3RlbSAoQ01TLikgIEEgQ01TIHdpbGwgYXR0ZW1wdCB0byBtYXAgY29sb3JzIHdpdGhpbiB0aGUKKyBwcmludGVyJ3MgZ2FtdXQgdG8gcGVyY2VwdHVhbGx5IHNpbWlsYXIgY29sb3JzIGluIHRoZSBkaXNwbGF5J3MgZ2FtdXQgYW5kCisgdmljZSB2ZXJzYSwgYnV0IHRoZSBtYXBwaW5nIGlzIHR5cGljYWxseSBub3QgMToxIG9yIHJldmVyc2libGUsIG5vciBjYW4gaXQKKyBiZSBkZWZpbmVkIHdpdGggYSBzaW1wbGUgZm9ybXVsYS4gIFRodXMsIHN1Y2ggYSBjb252ZXJzaW9uIGlzIG91dCBvZiBzY29wZQorIGZvciBhIGNvZGVjIGxpYnJhcnkuICBIb3dldmVyLCB0aGUgVHVyYm9KUEVHIEFQSSBhbGxvd3MgZm9yIGNvbXByZXNzaW5nCisgQ01ZSyBwaXhlbHMgaW50byBhIFlDQ0sgSlBFRyBpbWFnZSAoc2VlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjQ1NfWUNDSyI+PGNvZGU+Q1NfWUNDSzwvY29kZT48L2E+KSBhbmQKKyBkZWNvbXByZXNzaW5nIFlDQ0sgSlBFRyBpbWFnZXMgaW50byBDTVlLIHBpeGVscy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlBGX0NNWUsiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik5VTUNTIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5OVU1DUzwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgTlVNQ1M8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgbnVtYmVyIG9mIEpQRUcgY29sb3JzcGFjZXM8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLk5VTUNTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJDU19SR0IiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PkNTX1JHQjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgQ1NfUkdCPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UkdCIGNvbG9yc3BhY2UuICBXaGVuIGNvbXByZXNzaW5nIHRoZSBKUEVHIGltYWdlLCB0aGUgUiwgRywgYW5kIEIKKyBjb21wb25lbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UgYXJlIHJlb3JkZXJlZCBpbnRvIGltYWdlIHBsYW5lcywgYnV0IG5vCisgY29sb3JzcGFjZSBjb252ZXJzaW9uIG9yIHN1YnNhbXBsaW5nIGlzIHBlcmZvcm1lZC4gIFJHQiBKUEVHIGltYWdlcyBjYW4gYmUKKyBkZWNvbXByZXNzZWQgdG8gYW55IG9mIHRoZSBleHRlbmRlZCBSR0IgcGl4ZWwgZm9ybWF0cyBvciBncmF5c2NhbGUsIGJ1dAorIHRoZXkgY2Fubm90IGJlIGRlY29tcHJlc3NlZCB0byBZVVYgaW1hZ2VzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouQ1NfUkdCIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJDU19ZQ2JDciI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Q1NfWUNiQ3I8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IENTX1lDYkNyPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+WUNiQ3IgY29sb3JzcGFjZS4gIFlDYkNyIGlzIG5vdCBhbiBhYnNvbHV0ZSBjb2xvcnNwYWNlIGJ1dCByYXRoZXIgYQorIG1hdGhlbWF0aWNhbCB0cmFuc2Zvcm1hdGlvbiBvZiBSR0IgZGVzaWduZWQgc29sZWx5IGZvciBzdG9yYWdlIGFuZAorIHRyYW5zbWlzc2lvbi4gIFlDYkNyIGltYWdlcyBtdXN0IGJlIGNvbnZlcnRlZCB0byBSR0IgYmVmb3JlIHRoZXkgY2FuCisgYWN0dWFsbHkgYmUgZGlzcGxheWVkLiAgSW4gdGhlIFlDYkNyIGNvbG9yc3BhY2UsIHRoZSBZIChsdW1pbmFuY2UpCisgY29tcG9uZW50IHJlcHJlc2VudHMgdGhlIGJsYWNrICYgd2hpdGUgcG9ydGlvbiBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UsIGFuZAorIHRoZSBDYiBhbmQgQ3IgKGNocm9taW5hbmNlKSBjb21wb25lbnRzIHJlcHJlc2VudCB0aGUgY29sb3IgcG9ydGlvbiBvZiB0aGUKKyBvcmlnaW5hbCBpbWFnZS4gIE9yaWdpbmFsbHksIHRoZSBhbmFsb2cgZXF1aXZhbGVudCBvZiB0aGlzIHRyYW5zZm9ybWF0aW9uCisgYWxsb3dlZCB0aGUgc2FtZSBzaWduYWwgdG8gZHJpdmUgYm90aCBibGFjayAmIHdoaXRlIGFuZCBjb2xvciB0ZWxldmlzaW9ucywKKyBidXQgSlBFRyBpbWFnZXMgdXNlIFlDYkNyIHByaW1hcmlseSBiZWNhdXNlIGl0IGFsbG93cyB0aGUgY29sb3IgZGF0YSB0byBiZQorIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlZHVjaW5nIGJhbmR3aWR0aCBvciBkaXNrCisgc3BhY2UuICBZQ2JDciBpcyB0aGUgbW9zdCBjb21tb24gSlBFRyBjb2xvcnNwYWNlLCBhbmQgWUNiQ3IgSlBFRyBpbWFnZXMKKyBjYW4gYmUgY29tcHJlc3NlZCBmcm9tIGFuZCBkZWNvbXByZXNzZWQgdG8gYW55IG9mIHRoZSBleHRlbmRlZCBSR0IgcGl4ZWwKKyBmb3JtYXRzIG9yIGdyYXlzY2FsZSwgb3IgdGhleSBjYW4gYmUgZGVjb21wcmVzc2VkIHRvIFlVViBwbGFuYXIgaW1hZ2VzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouQ1NfWUNiQ3IiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IkNTX0dSQVkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PkNTX0dSQVk8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IENTX0dSQVk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5HcmF5c2NhbGUgY29sb3JzcGFjZS4gIFRoZSBKUEVHIGltYWdlIHJldGFpbnMgb25seSB0aGUgbHVtaW5hbmNlIGRhdGEgKFkKKyBjb21wb25lbnQpLCBhbmQgYW55IGNvbG9yIGRhdGEgZnJvbSB0aGUgc291cmNlIGltYWdlIGlzIGRpc2NhcmRlZC4KKyBHcmF5c2NhbGUgSlBFRyBpbWFnZXMgY2FuIGJlIGNvbXByZXNzZWQgZnJvbSBhbmQgZGVjb21wcmVzc2VkIHRvIGFueSBvZgorIHRoZSBleHRlbmRlZCBSR0IgcGl4ZWwgZm9ybWF0cyBvciBncmF5c2NhbGUsIG9yIHRoZXkgY2FuIGJlIGRlY29tcHJlc3NlZAorIHRvIFlVViBwbGFuYXIgaW1hZ2VzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouQ1NfR1JBWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iQ1NfQ01ZSyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Q1NfQ01ZSzwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgQ1NfQ01ZSzwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNNWUsgY29sb3JzcGFjZS4gIFdoZW4gY29tcHJlc3NpbmcgdGhlIEpQRUcgaW1hZ2UsIHRoZSBDLCBNLCBZLCBhbmQgSworIGNvbXBvbmVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSBhcmUgcmVvcmRlcmVkIGludG8gaW1hZ2UgcGxhbmVzLCBidXQgbm8KKyBjb2xvcnNwYWNlIGNvbnZlcnNpb24gb3Igc3Vic2FtcGxpbmcgaXMgcGVyZm9ybWVkLiAgQ01ZSyBKUEVHIGltYWdlcyBjYW4KKyBvbmx5IGJlIGRlY29tcHJlc3NlZCB0byBDTVlLIHBpeGVscy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkNTX0NNWUsiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IkNTX1lDQ0siPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PkNTX1lDQ0s8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IENTX1lDQ0s8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5ZQ0NLIGNvbG9yc3BhY2UuICBZQ0NLIChBS0EgIllDYkNySyIpIGlzIG5vdCBhbiBhYnNvbHV0ZSBjb2xvcnNwYWNlIGJ1dAorIHJhdGhlciBhIG1hdGhlbWF0aWNhbCB0cmFuc2Zvcm1hdGlvbiBvZiBDTVlLIGRlc2lnbmVkIHNvbGVseSBmb3Igc3RvcmFnZQorIGFuZCB0cmFuc21pc3Npb24uICBJdCBpcyB0byBDTVlLIGFzIFlDYkNyIGlzIHRvIFJHQi4gIENNWUsgcGl4ZWxzIGNhbiBiZQorIHJldmVyc2libHkgdHJhbnNmb3JtZWQgaW50byBZQ0NLLCBhbmQgYXMgd2l0aCBZQ2JDciwgdGhlIGNocm9taW5hbmNlCisgY29tcG9uZW50cyBpbiB0aGUgWUNDSyBwaXhlbHMgY2FuIGJlIHN1YnNhbXBsZWQgd2l0aG91dCBpbmN1cnJpbmcgbWFqb3IKKyBwZXJjZXB0dWFsIGxvc3MuICBZQ0NLIEpQRUcgaW1hZ2VzIGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgZnJvbSBhbmQKKyBkZWNvbXByZXNzZWQgdG8gQ01ZSyBwaXhlbHMuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5DU19ZQ0NLIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJGTEFHX0JPVFRPTVVQIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5GTEFHX0JPVFRPTVVQPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBGTEFHX0JPVFRPTVVQPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywKKyBPcGVuR0wpIG9yZGVyLCBub3QgdG9wLWRvd24gKFgxMSkgb3JkZXIuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX0JPVFRPTVVQIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJGTEFHX0ZPUkNFTU1YIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5GTEFHX0ZPUkNFTU1YPC9oND4KKzxwcmU+QERlcHJlY2F0ZWQKK3B1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgRkxBR19GT1JDRU1NWDwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPiZuYnNwOzwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GT1JDRU1NWCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iRkxBR19GT1JDRVNTRSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+RkxBR19GT1JDRVNTRTwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IEZMQUdfRk9SQ0VTU0U8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4mbmJzcDs8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRk9SQ0VTU0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IkZMQUdfRk9SQ0VTU0UyIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5GTEFHX0ZPUkNFU1NFMjwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IEZMQUdfRk9SQ0VTU0UyPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX0ZPUkNFU1NFMiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iRkxBR19GT1JDRVNTRTMiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PkZMQUdfRk9SQ0VTU0UzPC9oND4KKzxwcmU+QERlcHJlY2F0ZWQKK3B1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgRkxBR19GT1JDRVNTRTM8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4mbmJzcDs8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRk9SQ0VTU0UzIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJGTEFHX0ZBU1RVUFNBTVBMRSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+RkxBR19GQVNUVVBTQU1QTEU8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IEZMQUdfRkFTVFVQU0FNUExFPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbgorIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHNtb290aCB1cHNhbXBsaW5nLCB3aGljaAorIGNyZWF0ZXMgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIG5laWdoYm9yaW5nIGNocm9taW5hbmNlIGNvbXBvbmVudHMgaW4KKyBvcmRlciB0byByZWR1Y2UgdXBzYW1wbGluZyBhcnRpZmFjdHMgaW4gdGhlIGRlY29tcHJlc3NlZCBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRkFTVFVQU0FNUExFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJGTEFHX0ZBU1REQ1QiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PkZMQUdfRkFTVERDVDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgRkxBR19GQVNURENUPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VXNlIHRoZSBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICBUaGUKKyBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yCisgZXhhbXBsZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIFR1cmJvSlBFRyBmb3IgbGlianBlZ1stdHVyYm9dIHVzZXMgdGhlIGZhc3QKKyBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZQorIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0KKyB3aGVuIGRlY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIGEgbGFyZ2VyIGVmZmVjdC48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfRkFTVERDVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iRkxBR19BQ0NVUkFURURDVCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+RkxBR19BQ0NVUkFURURDVDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgRkxBR19BQ0NVUkFURURDVDwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlVzZSB0aGUgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nCisgY29kZWMuICBUaGUgZGVmYXVsdCBpZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpcworIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgZm9yCisgbGlianBlZ1stdHVyYm9dIHVzZXMgdGhlIGZhc3QgYWxnb3JpdGhtIGJ5IGRlZmF1bHQgd2hlbiBjb21wcmVzc2luZywKKyBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LAorIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0gd2hlbiBkZWNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzCisgYmVlbiBzaG93biB0byBoYXZlIGEgbGFyZ2VyIGVmZmVjdC48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfQUNDVVJBVEVEQ1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IkZMQUdfU1RPUE9OV0FSTklORyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+RkxBR19TVE9QT05XQVJOSU5HPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBGTEFHX1NUT1BPTldBUk5JTkc8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5JbW1lZGlhdGVseSBkaXNjb250aW51ZSB0aGUgY3VycmVudCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uL3RyYW5zZm9ybQorIG9wZXJhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBjb2RlYyB0aHJvd3MgYSB3YXJuaW5nIChub24tZmF0YWwgZXJyb3IpLiAgVGhlCisgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBhbGxvdyB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlIHVubGVzcyBhIGZhdGFsCisgZXJyb3IgaXMgZW5jb3VudGVyZWQuCisgPHA+CisgTk9URTogZHVlIHRvIHRoZSBkZXNpZ24gb2YgdGhlIFR1cmJvSlBFRyBKYXZhIEFQSSwgb25seSBjZXJ0YWluIG1ldGhvZHMKKyAoc3BlY2lmaWNhbGx5LCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKRGVjb21wcmVzc29yLmRlY29tcHJlc3MqKCk8L2NvZGU+PC9hPiBtZXRob2RzCisgd2l0aCBhIHZvaWQgcmV0dXJuIHR5cGUpIHdpbGwgY29tcGxldGUgYW5kIGxlYXZlIHRoZSBvdXRwdXQgaW1hZ2UgaW4gYQorIGZ1bGx5IHJlY292ZXJhYmxlIHN0YXRlIGFmdGVyIGEgbm9uLWZhdGFsIGVycm9yIG9jY3Vycy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLkZMQUdfU1RPUE9OV0FSTklORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iRkxBR19QUk9HUkVTU0lWRSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+RkxBR19QUk9HUkVTU0lWRTwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgRkxBR19QUk9HUkVTU0lWRTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlVzZSBwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiBKUEVHIGltYWdlcyBnZW5lcmF0ZWQgYnkgY29tcHJlc3Npb24gYW5kCisgdHJhbnNmb3JtIG9wZXJhdGlvbnMuICBQcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyB3aWxsIGdlbmVyYWxseSBpbXByb3ZlCisgY29tcHJlc3Npb24gcmVsYXRpdmUgdG8gYmFzZWxpbmUgZW50cm9weSBjb2RpbmcgKHRoZSBkZWZhdWx0KSwgYnV0IGl0IHdpbGwKKyByZWR1Y2UgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhYmx5LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19QUk9HUkVTU0lWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iTlVNRVJSIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5OVU1FUlI8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE5VTUVSUjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgZXJyb3IgY29kZXM8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLk5VTUVSUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iRVJSX1dBUk5JTkciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PkVSUl9XQVJOSU5HPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBFUlJfV0FSTklORzwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBlcnJvciB3YXMgbm9uLWZhdGFsIGFuZCByZWNvdmVyYWJsZSwgYnV0IHRoZSBpbWFnZSBtYXkgc3RpbGwgYmUKKyBjb3JydXB0LgorIDxwPgorIE5PVEU6IGR1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBUdXJib0pQRUcgSmF2YSBBUEksIG9ubHkgY2VydGFpbiBtZXRob2RzCisgKHNwZWNpZmljYWxseSwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKigpPC9jb2RlPjwvYT4gbWV0aG9kcworIHdpdGggYSB2b2lkIHJldHVybiB0eXBlKSB3aWxsIGNvbXBsZXRlIGFuZCBsZWF2ZSB0aGUgb3V0cHV0IGltYWdlIGluIGEKKyBmdWxseSByZWNvdmVyYWJsZSBzdGF0ZSBhZnRlciBhIG5vbi1mYXRhbCBlcnJvciBvY2N1cnMuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5FUlJfV0FSTklORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iRVJSX0ZBVEFMIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+RVJSX0ZBVEFMPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBFUlJfRkFUQUw8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGUgZXJyb3Igd2FzIGZhdGFsIGFuZCBub24tcmVjb3ZlcmFibGUuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5FUlJfRkFUQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZF9kZXRhaWwiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBEZXRhaWw8L2gzPgorPGEgbmFtZT0iZ2V0TUNVV2lkdGgoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0TUNVV2lkdGg8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7aW50Jm5ic3A7Z2V0TUNVV2lkdGgoaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBNQ1UgYmxvY2sgd2lkdGggZm9yIHRoZSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZQorIHN1YnNhbXBsaW5nLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyAob25lIG9mCisgPGNvZGU+U0FNUF8qPC9jb2RlPik8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBNQ1UgYmxvY2sgd2lkdGggZm9yIHRoZSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZQorIHN1YnNhbXBsaW5nLjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0TUNVSGVpZ2h0KGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldE1DVUhlaWdodDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDtpbnQmbmJzcDtnZXRNQ1VIZWlnaHQoaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+c3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgKG9uZSBvZgorIDxjb2RlPlNBTVBfKjwvY29kZT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgTUNVIGJsb2NrIGhlaWdodCBmb3IgdGhlIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlCisgc3Vic2FtcGxpbmcuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRQaXhlbFNpemUoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0UGl4ZWxTaXplPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyZuYnNwO2ludCZuYnNwO2dldFBpeGVsU2l6ZShpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnBpeGVsRm9ybWF0PC9jb2RlPiAtIHRoZSBwaXhlbCBmb3JtYXQgKG9uZSBvZiA8Y29kZT5QRl8qPC9jb2RlPik8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRSZWRPZmZzZXQoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0UmVkT2Zmc2V0PC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyZuYnNwO2ludCZuYnNwO2dldFJlZE9mZnNldChpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Gb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHJlZAorIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLiAgRm9yIGluc3RhbmNlLCBpZiBhIHBpeGVsCisgb2YgZm9ybWF0IDxjb2RlPlRKLlBGX0JHUlg8L2NvZGU+IGlzIHN0b3JlZCBpbiA8Y29kZT5jaGFyIHBpeGVsW108L2NvZGU+LAorIHRoZW4gdGhlIHJlZCBjb21wb25lbnQgd2lsbCBiZQorIDxjb2RlPnBpeGVsW1RKLmdldFJlZE9mZnNldChUSi5QRl9CR1JYKV08L2NvZGU+LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5waXhlbEZvcm1hdDwvY29kZT4gLSB0aGUgcGl4ZWwgZm9ybWF0IChvbmUgb2YgPGNvZGU+UEZfKjwvY29kZT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgcmVkIG9mZnNldCBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgb3IgLTEgaWYgdGhlIHBpeGVsCisgZm9ybWF0IGRvZXMgbm90IGhhdmUgYSByZWQgY29tcG9uZW50LjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0R3JlZW5PZmZzZXQoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0R3JlZW5PZmZzZXQ8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7aW50Jm5ic3A7Z2V0R3JlZW5PZmZzZXQoaW50Jm5ic3A7cGl4ZWxGb3JtYXQpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Rm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBncmVlbgorIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLiAgRm9yIGluc3RhbmNlLCBpZiBhIHBpeGVsCisgb2YgZm9ybWF0IDxjb2RlPlRKLlBGX0JHUlg8L2NvZGU+IGlzIHN0b3JlZCBpbiA8Y29kZT5jaGFyIHBpeGVsW108L2NvZGU+LAorIHRoZW4gdGhlIGdyZWVuIGNvbXBvbmVudCB3aWxsIGJlCisgPGNvZGU+cGl4ZWxbVEouZ2V0R3JlZW5PZmZzZXQoVEouUEZfQkdSWCldPC9jb2RlPi48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+cGl4ZWxGb3JtYXQ8L2NvZGU+IC0gdGhlIHBpeGVsIGZvcm1hdCAob25lIG9mIDxjb2RlPlBGXyo8L2NvZGU+KTwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGdyZWVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgb3IgLTEgaWYgdGhlIHBpeGVsCisgZm9ybWF0IGRvZXMgbm90IGhhdmUgYSBncmVlbiBjb21wb25lbnQuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRCbHVlT2Zmc2V0KGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldEJsdWVPZmZzZXQ8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7aW50Jm5ic3A7Z2V0Qmx1ZU9mZnNldChpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Gb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGJsdWUKKyBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC4gIEZvciBpbnN0YW5jZSwgaWYgYSBwaXhlbAorIG9mIGZvcm1hdCA8Y29kZT5USi5QRl9CR1JYPC9jb2RlPiBpcyBzdG9yZWQgaW4gPGNvZGU+Y2hhciBwaXhlbFtdPC9jb2RlPiwKKyB0aGVuIHRoZSBibHVlIGNvbXBvbmVudCB3aWxsIGJlCisgPGNvZGU+cGl4ZWxbVEouZ2V0Qmx1ZU9mZnNldChUSi5QRl9CR1JYKV08L2NvZGU+LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5waXhlbEZvcm1hdDwvY29kZT4gLSB0aGUgcGl4ZWwgZm9ybWF0IChvbmUgb2YgPGNvZGU+UEZfKjwvY29kZT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgYmx1ZSBvZmZzZXQgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIG9yIC0xIGlmIHRoZSBwaXhlbAorIGZvcm1hdCBkb2VzIG5vdCBoYXZlIGEgYmx1ZSBjb21wb25lbnQuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRBbHBoYU9mZnNldChpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRBbHBoYU9mZnNldDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDtpbnQmbmJzcDtnZXRBbHBoYU9mZnNldChpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Gb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGFscGhhCisgY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuICBGb3IgaW5zdGFuY2UsIGlmIGEgcGl4ZWwKKyBvZiBmb3JtYXQgPGNvZGU+VEouUEZfQkdSQTwvY29kZT4gaXMgc3RvcmVkIGluIDxjb2RlPmNoYXIgcGl4ZWxbXTwvY29kZT4sCisgdGhlbiB0aGUgYWxwaGEgY29tcG9uZW50IHdpbGwgYmUKKyA8Y29kZT5waXhlbFtUSi5nZXRBbHBoYU9mZnNldChUSi5QRl9CR1JBKV08L2NvZGU+LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5waXhlbEZvcm1hdDwvY29kZT4gLSB0aGUgcGl4ZWwgZm9ybWF0IChvbmUgb2YgPGNvZGU+UEZfKjwvY29kZT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgYWxwaGEgb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCBvciAtMSBpZiB0aGUgcGl4ZWwKKyBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhIGFscGhhIGNvbXBvbmVudC48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImJ1ZlNpemUoaW50LCBpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmJ1ZlNpemU8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7aW50Jm5ic3A7YnVmU2l6ZShpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgaW50Jm5ic3A7anBlZ1N1YnNhbXApPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRworIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+d2lkdGg8L2NvZGU+IC0gdGhlIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBKUEVHIGltYWdlPC9kZD48ZGQ+PGNvZGU+aGVpZ2h0PC9jb2RlPiAtIHRoZSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIEpQRUcgaW1hZ2U8L2RkPjxkZD48Y29kZT5qcGVnU3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdG8gYmUgdXNlZCB3aGVuCisgZ2VuZXJhdGluZyB0aGUgSlBFRyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEouU0FNUF8qPC9jb2RlPjwvYT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRworIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImJ1ZlNpemVZVVYoaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+YnVmU2l6ZVlVVjwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDtpbnQmbmJzcDtidWZTaXplWVVWKGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgIGludCZuYnNwO3BhZCwKKyAgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hcgorIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+d2lkdGg8L2NvZGU+IC0gdGhlIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5wYWQ8L2NvZGU+IC0gdGhlIHdpZHRoIG9mIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBpbWFnZSBpcyBwYWRkZWQgdG8KKyB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGlzIG51bWJlciBvZiBieXRlcyAobXVzdCBiZSBhIHBvd2VyIG9mIDIuKTwvZGQ+PGRkPjxjb2RlPmhlaWdodDwvY29kZT4gLSB0aGUgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYKKyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEouU0FNUF8qPC9jb2RlPjwvYT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIKKyBpbWFnZSB3aXRoIHRoZSBnaXZlbiB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJidWZTaXplWVVWKGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5idWZTaXplWVVWPC9oND4KKzxwcmU+QERlcHJlY2F0ZWQKK3B1YmxpYyBzdGF0aWMmbmJzcDtpbnQmbmJzcDtidWZTaXplWVVWKGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4mbmJzcDs8aT5Vc2UgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNidWZTaXplWVVWKGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPmJ1ZlNpemVZVVYoaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJwbGFuZVNpemVZVVYoaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5wbGFuZVNpemVZVVY8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7aW50Jm5ic3A7cGxhbmVTaXplWVVWKGludCZuYnNwO2NvbXBvbmVudElELAorICAgICAgICAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtzdHJpZGUsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtzdWJzYW1wKTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgaW1hZ2UKKyBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jb21wb25lbnRJRDwvY29kZT4gLSBJRCBudW1iZXIgb2YgdGhlIGltYWdlIHBsYW5lICgwID0gWSwgMSA9IFUvQ2IsCisgMiA9IFYvQ3IpPC9kZD48ZGQ+PGNvZGU+d2lkdGg8L2NvZGU+IC0gd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIE5PVEU6IHRoaXMgaXMgdGhlIHdpZHRoCisgb2YgdGhlIHdob2xlIGltYWdlLCBub3QgdGhlIHBsYW5lIHdpZHRoLjwvZGQ+PGRkPjxjb2RlPnN0cmlkZTwvY29kZT4gLSBieXRlcyBwZXIgbGluZSBpbiB0aGUgaW1hZ2UgcGxhbmUuPC9kZD48ZGQ+PGNvZGU+aGVpZ2h0PC9jb2RlPiAtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiAgTk9URTogdGhpcyBpcyB0aGUKKyBoZWlnaHQgb2YgdGhlIHdob2xlIGltYWdlLCBub3QgdGhlIHBsYW5lIGhlaWdodC48L2RkPjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYKKyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEouU0FNUF8qPC9jb2RlPjwvYT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIKKyBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0icGxhbmVXaWR0aChpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+cGxhbmVXaWR0aDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMmbmJzcDtpbnQmbmJzcDtwbGFuZVdpZHRoKGludCZuYnNwO2NvbXBvbmVudElELAorICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgIGludCZuYnNwO3N1YnNhbXApPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgcGxhbmUgd2lkdGggb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyBSZWZlciB0byA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPllVVkltYWdlPC9jb2RlPjwvYT4gZm9yIGEgZGVzY3JpcHRpb24gb2YgcGxhbmUgd2lkdGguPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmNvbXBvbmVudElEPC9jb2RlPiAtIElEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwKKyAyID0gVi9Dcik8L2RkPjxkZD48Y29kZT53aWR0aDwvY29kZT4gLSB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlPC9kZD48ZGQ+PGNvZGU+c3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlCisgKG9uZSBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+KTwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIHBsYW5lIHdpZHRoIG9mIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJwbGFuZUhlaWdodChpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+cGxhbmVIZWlnaHQ8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljJm5ic3A7aW50Jm5ic3A7cGxhbmVIZWlnaHQoaW50Jm5ic3A7Y29tcG9uZW50SUQsCisgICAgICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBwbGFuZSBoZWlnaHQgb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyBSZWZlciB0byA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPllVVkltYWdlPC9jb2RlPjwvYT4gZm9yIGEgZGVzY3JpcHRpb24gb2YgcGxhbmUgaGVpZ2h0LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jb21wb25lbnRJRDwvY29kZT4gLSBJRCBudW1iZXIgb2YgdGhlIGltYWdlIHBsYW5lICgwID0gWSwgMSA9IFUvQ2IsCisgMiA9IFYvQ3IpPC9kZD48ZGQ+PGNvZGU+aGVpZ2h0PC9jb2RlPiAtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlPC9kZD48ZGQ+PGNvZGU+c3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlCisgKG9uZSBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+KTwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIHBsYW5lIGhlaWdodCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0U2NhbGluZ0ZhY3RvcnMoKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldFNjYWxpbmdGYWN0b3JzPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKU2NhbGluZ0ZhY3RvcjwvYT5bXSZuYnNwO2dldFNjYWxpbmdGYWN0b3JzKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgbGlzdCBvZiBmcmFjdGlvbmFsIHNjYWxpbmcgZmFjdG9ycyB0aGF0IHRoZSBKUEVHIGRlY29tcHJlc3NvciBpbgorIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMgdGhhdCB0aGUgSlBFRyBkZWNvbXByZXNzb3IgaW4KKyB0aGlzIGltcGxlbWVudGF0aW9uIG9mIFR1cmJvSlBFRyBzdXBwb3J0cy48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2IENsYXNzPC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxkaXY+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPlN1bW1hcnk6Jm5ic3A7PC9saT4KKzxsaT5OZXN0ZWQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjZmllbGRfc3VtbWFyeSI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9kZXRhaWwiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPkNvbnN0ciZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2RfZGV0YWlsIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2Y4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbApAQCAtMCwwICsxLDkyNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USkNvbXByZXNzb3I8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7CisgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlRKQ29tcHJlc3NvciI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSkNvbXByZXNzb3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl90b3AiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl90b3AiKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPk5lc3RlZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+RGV0YWlsOiZuYnNwOzwvbGk+Cis8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+Cis8ZGl2IGNsYXNzPSJzdWJUaXRsZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2Rpdj4KKzxoMiB0aXRsZT0iQ2xhc3MgVEpDb21wcmVzc29yIiBjbGFzcz0idGl0bGUiPkNsYXNzIFRKQ29tcHJlc3NvcjwvaDI+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbnRlbnRDb250YWluZXIiPgorPHVsIGNsYXNzPSJpbmhlcml0YW5jZSI+Cis8bGk+amF2YS5sYW5nLk9iamVjdDwvbGk+Cis8bGk+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3I8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGRsPgorPGR0PkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvZHQ+Cis8ZGQ+amF2YS5pby5DbG9zZWFibGUsIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlPC9kZD4KKzwvZGw+Cis8aHI+Cis8YnI+Cis8cHJlPnB1YmxpYyBjbGFzcyA8c3BhbiBjbGFzcz0ic3Ryb25nIj5USkNvbXByZXNzb3I8L3NwYW4+CitleHRlbmRzIGphdmEubGFuZy5PYmplY3QKK2ltcGxlbWVudHMgamF2YS5pby5DbG9zZWFibGU8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UdXJib0pQRUcgY29tcHJlc3NvcjwvZGl2PgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1bW1hcnkiPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJDb25zdHJ1Y3RvciBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGNvbnN0cnVjdG9ycywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPkNvbnN0cnVjdG9yczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xPbmUiIHNjb3BlPSJjb2wiPkNvbnN0cnVjdG9yIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoKSI+VEpDb21wcmVzc29yPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI1RKQ29tcHJlc3NvcihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPlRKQ29tcHJlc3NvcjwvYT48L3N0cm9uZz4oamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgaW50Jm5ic3A7eCwKKyAgICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICAgIGludCZuYnNwO2hlaWdodCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgdW5jb21wcmVzc2VkCisgc291cmNlIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5zcmNJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZAorIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI1RKQ29tcHJlc3NvcihieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+VEpDb21wcmVzc29yPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI1RKQ29tcHJlc3NvcihieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPlRKQ29tcHJlc3NvcjwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgdW5jb21wcmVzc2VkCisgc291cmNlIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5zcmNJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZAorIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY2xvc2UoKSI+Y2xvc2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RnJlZSB0aGUgbmF0aXZlIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBieXRlW10sJTIwaW50KSI+Y29tcHJlc3M8L2E+PC9zdHJvbmc+KGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgYnl0ZVtdJm5ic3A7ZHN0QnVmLAorICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGFuZAorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2NvbXByZXNzKGJ5dGVbXSwlMjBpbnQpIj48Y29kZT5jb21wcmVzcyhieXRlW10sIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmJ5dGVbXTwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2NvbXByZXNzKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50KSI+Y29tcHJlc3M8L2E+PC9zdHJvbmc+KGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzdHJvbmc+RGVwcmVjYXRlZC48L3N0cm9uZz4mbmJzcDsKKzxkaXYgY2xhc3M9ImJsb2NrIj48aT5Vc2UKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBhbmQKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNjb21wcmVzcyhpbnQpIj48Y29kZT5jb21wcmVzcyhpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjY29tcHJlc3MoYnl0ZVtdLCUyMGludCkiPmNvbXByZXNzPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Db21wcmVzcyB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yCisgaW5zdGFuY2UgYW5kIG91dHB1dCBhIEpQRUcgaW1hZ2UgdG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uIGJ1ZmZlci48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ieXRlW108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNjb21wcmVzcyhpbnQpIj5jb21wcmVzczwvYT48L3N0cm9uZz4oaW50Jm5ic3A7ZmxhZ3MpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNvbXByZXNzIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBKUEVHIGltYWdlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBieXRlW10sJTIwaW50KSI+ZW5jb2RlWVVWPC9hPjwvc3Ryb25nPihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICBieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGFuZAorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihieXRlW10sJTIwaW50KSI+PGNvZGU+ZW5jb2RlWVVWKGJ5dGVbXSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ynl0ZVtdPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50KSI+ZW5jb2RlWVVWPC9hPjwvc3Ryb25nPihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGFuZAorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnQsJTIwaW50KSI+PGNvZGU+ZW5jb2RlWVVWKGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihieXRlW10sJTIwaW50KSI+ZW5jb2RlWVVWPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+PGNvZGU+ZW5jb2RlWVVWKFlVVkltYWdlLCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ieXRlW108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYoaW50KSI+ZW5jb2RlWVVWPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYoaW50LCUyMGludCkiPjxjb2RlPmVuY29kZVlVVihpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGludFtdLCUyMGludCkiPmVuY29kZVlVVjwvYT48L3N0cm9uZz4oaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkVuY29kZSB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yCisgaW5zdGFuY2UgaW50byBzZXBhcmF0ZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIGFuZCByZXR1cm4gYQorIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBlbmNvZGVkIGltYWdlIHBsYW5lcy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnQsJTIwaW50KSI+ZW5jb2RlWVVWPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtwYWQsCisgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RW5jb2RlIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgdW5pZmllZCBZVVYgcGxhbmFyIGltYWdlIGJ1ZmZlciBhbmQgcmV0dXJuIGEKKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZW5jb2RlZCBpbWFnZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLllVVkltYWdlLCUyMGludCkiPmVuY29kZVlVVjwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDtkc3RJbWFnZSwKKyAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGUgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4KKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvYT48L3N0cm9uZz4oKTwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZ2V0Q29tcHJlc3NlZFNpemUoKSI+Z2V0Q29tcHJlc3NlZFNpemU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgKGluIGJ5dGVzKSBnZW5lcmF0ZWQgYnkgdGhlIG1vc3QgcmVjZW50CisgY29tcHJlc3Mgb3BlcmF0aW9uLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRKUEVHUXVhbGl0eShpbnQpIj5zZXRKUEVHUXVhbGl0eTwvYT48L3N0cm9uZz4oaW50Jm5ic3A7cXVhbGl0eSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+U2V0IHRoZSBKUEVHIGltYWdlIHF1YWxpdHkgbGV2ZWwgZm9yIHN1YnNlcXVlbnQgY29tcHJlc3Mgb3BlcmF0aW9ucy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5zZXRTb3VyY2VJbWFnZTwvYT48L3N0cm9uZz4oamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgICAgICBpbnQmbmJzcDt5LAorICAgICAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0KTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIFJHQiBvciBncmF5c2NhbGUgc291cmNlIGltYWdlIHdpdGggdGhpcworIGNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5zZXRTb3VyY2VJbWFnZTwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5zZXRTb3VyY2VJbWFnZTwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIGFuIHVuY29tcHJlc3NlZCBSR0IsIGdyYXlzY2FsZSwgb3IgQ01ZSyBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGlzCisgY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2Uob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UpIj5zZXRTb3VyY2VJbWFnZTwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDtzcmNJbWFnZSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIGFuIHVuY29tcHJlc3NlZCBZVVYgcGxhbmFyIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMgY29tcHJlc3NvcgorIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTdWJzYW1wKGludCkiPnNldFN1YnNhbXA8L2E+PC9zdHJvbmc+KGludCZuYnNwO25ld1N1YnNhbXApPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlNldCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgZm9yIHN1YnNlcXVlbnQgY29tcHJlc3MvZW5jb2RlCisgb3BlcmF0aW9ucy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9oMz4KKzxjb2RlPmNsb25lLCBlcXVhbHMsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9jb2RlPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZGV0YWlscyI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3JfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5Db25zdHJ1Y3RvciBEZXRhaWw8L2gzPgorPGEgbmFtZT0iVEpDb21wcmVzc29yKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlRKQ29tcHJlc3NvcjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKQ29tcHJlc3NvcigpCisgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlRKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkNvbXByZXNzb3I8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSkNvbXByZXNzb3IoYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCkKKyAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSB1bmNvbXByZXNzZWQKKyBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnNyY0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCisgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnNyY0ltYWdlPC9jb2RlPiAtIHNlZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gZm9yIGRlc2NyaXB0aW9uPC9kZD48ZGQ+PGNvZGU+eDwvY29kZT4gLSBzZWUgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGZvciBkZXNjcmlwdGlvbjwvZGQ+PGRkPjxjb2RlPnk8L2NvZGU+IC0gc2VlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBmb3IgZGVzY3JpcHRpb248L2RkPjxkZD48Y29kZT53aWR0aDwvY29kZT4gLSBzZWUgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGZvciBkZXNjcmlwdGlvbjwvZGQ+PGRkPjxjb2RlPnBpdGNoPC9jb2RlPiAtIHNlZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gZm9yIGRlc2NyaXB0aW9uPC9kZD48ZGQ+PGNvZGU+aGVpZ2h0PC9jb2RlPiAtIHNlZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gZm9yIGRlc2NyaXB0aW9uPC9kZD48ZGQ+PGNvZGU+cGl4ZWxGb3JtYXQ8L2NvZGU+IC0gcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKG9uZSBvZgorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfUkdCIj48Y29kZT5USi5QRl8qPC9jb2RlPjwvYT4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJUSkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkNvbXByZXNzb3I8L2g0PgorPHByZT5ARGVwcmVjYXRlZAorcHVibGljJm5ic3A7VEpDb21wcmVzc29yKGJ5dGVbXSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQpCisgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VXNlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPlRKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlRKQ29tcHJlc3NvcihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+VEpDb21wcmVzc29yPC9oND4KKzxwcmU+cHVibGljJm5ic3A7VEpDb21wcmVzc29yKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICBpbnQmbmJzcDt5LAorICAgICAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQpCisgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgdW5jb21wcmVzc2VkCisgc291cmNlIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5zcmNJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZAorIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5zcmNJbWFnZTwvY29kZT4gLSBzZWUKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBmb3IgZGVzY3JpcHRpb248L2RkPjxkZD48Y29kZT54PC9jb2RlPiAtIHNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGZvciBkZXNjcmlwdGlvbjwvZGQ+PGRkPjxjb2RlPnk8L2NvZGU+IC0gc2VlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gZm9yIGRlc2NyaXB0aW9uPC9kZD48ZGQ+PGNvZGU+d2lkdGg8L2NvZGU+IC0gc2VlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gZm9yIGRlc2NyaXB0aW9uPC9kZD48ZGQ+PGNvZGU+aGVpZ2h0PC9jb2RlPiAtIHNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGZvciBkZXNjcmlwdGlvbjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX2RldGFpbCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kIERldGFpbDwvaDM+Cis8YSBuYW1lPSJzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5zZXRTb3VyY2VJbWFnZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRTb3VyY2VJbWFnZShieXRlW10mbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt5LAorICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICAgICAgICAgIGludCZuYnNwO3BpeGVsRm9ybWF0KQorICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIFJHQiwgZ3JheXNjYWxlLCBvciBDTVlLIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMKKyBjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5zcmNJbWFnZTwvY29kZT4gLSBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0IsIGdyYXlzY2FsZSwgb3IgQ01ZSyBwaXhlbHMgdG8KKyBiZSBjb21wcmVzc2VkIG9yIGVuY29kZWQuICBUaGlzIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuPC9kZD48ZGQ+PGNvZGU+eDwvY29kZT4gLSB4IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgaW1hZ2UgZnJvbSB3aGljaAorIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkPC9kZD48ZGQ+PGNvZGU+eTwvY29kZT4gLSB5IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgaW1hZ2UgZnJvbSB3aGljaAorIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkPC9kZD48ZGQ+PGNvZGU+d2lkdGg8L2NvZGU+IC0gd2lkdGggKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20KKyB3aGljaCB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZDwvZGQ+PGRkPjxjb2RlPnBpdGNoPC9jb2RlPiAtIGJ5dGVzIHBlciBsaW5lIG9mIHRoZSBzb3VyY2UgaW1hZ2UuICBOb3JtYWxseSwgdGhpcyBzaG91bGQgYmUKKyA8Y29kZT53aWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+IGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMKKyB1bnBhZGRlZCwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIHRvLCBmb3IgaW5zdGFuY2UsIHNwZWNpZnkgdGhhdAorIHRoZSBzY2FubGluZXMgaW4gdGhlIHNvdXJjZSBpbWFnZSBhcmUgcGFkZGVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5IG9yIHRvCisgY29tcHJlc3MvZW5jb2RlIGEgSlBFRyBvciBZVVYgaW1hZ2UgZnJvbSBhIHJlZ2lvbiBvZiBhIGxhcmdlciBzb3VyY2UKKyBpbWFnZS4gIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuCisgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8KKyA8Y29kZT53aWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LjwvZGQ+PGRkPjxjb2RlPmhlaWdodDwvY29kZT4gLSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20KKyB3aGljaCB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZDwvZGQ+PGRkPjxjb2RlPnBpeGVsRm9ybWF0PC9jb2RlPiAtIHBpeGVsIGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIChvbmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQiI+PGNvZGU+VEouUEZfKjwvY29kZT48L2E+KTwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ic2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5zZXRTb3VyY2VJbWFnZTwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMmbmJzcDt2b2lkJm5ic3A7c2V0U291cmNlSW1hZ2UoYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VXNlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5zZXRTb3VyY2VJbWFnZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIFJHQiBvciBncmF5c2NhbGUgc291cmNlIGltYWdlIHdpdGggdGhpcworIGNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnNyY0ltYWdlPC9jb2RlPiAtIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyBSR0Igb3IKKyBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGNvbXByZXNzZWQgb3IgZW5jb2RlZC4gIFRoaXMgaW1hZ2UgaXMgbm90IG1vZGlmaWVkLjwvZGQ+PGRkPjxjb2RlPng8L2NvZGU+IC0geCBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20gd2hpY2gKKyB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZDwvZGQ+PGRkPjxjb2RlPnk8L2NvZGU+IC0geSBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20gd2hpY2gKKyB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZDwvZGQ+PGRkPjxjb2RlPndpZHRoPC9jb2RlPiAtIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgd2hpY2ggdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQgKDAgPSB1c2UgdGhlCisgd2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZSk8L2RkPjxkZD48Y29kZT5oZWlnaHQ8L2NvZGU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgd2hpY2ggdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQgKDAgPSB1c2UgdGhlCisgaGVpZ2h0IG9mIHRoZSBzb3VyY2UgaW1hZ2UpPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJzZXRTb3VyY2VJbWFnZShvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PnNldFNvdXJjZUltYWdlPC9oND4KKzxwcmU+cHVibGljJm5ic3A7dm9pZCZuYnNwO3NldFNvdXJjZUltYWdlKDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+Jm5ic3A7c3JjSW1hZ2UpCisgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkFzc29jaWF0ZSBhbiB1bmNvbXByZXNzZWQgWVVWIHBsYW5hciBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+c3JjSW1hZ2U8L2NvZGU+IC0gWVVWIHBsYW5hciBpbWFnZSB0byBiZSBjb21wcmVzc2VkLiAgVGhpcyBpbWFnZSBpcyBub3QKKyBtb2RpZmllZC48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9InNldFN1YnNhbXAoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+c2V0U3Vic2FtcDwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRTdWJzYW1wKGludCZuYnNwO25ld1N1YnNhbXApPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+U2V0IHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyBmb3Igc3Vic2VxdWVudCBjb21wcmVzcy9lbmNvZGUKKyBvcGVyYXRpb25zLiAgV2hlbiBwaXhlbHMgYXJlIGNvbnZlcnRlZCBmcm9tIFJHQiB0byBZQ2JDciAoc2VlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19ZQ2JDciI+PGNvZGU+VEouQ1NfWUNiQ3I8L2NvZGU+PC9hPikgb3IgZnJvbSBDTVlLIHRvIFlDQ0sgKHNlZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0NTX1lDQ0siPjxjb2RlPlRKLkNTX1lDQ0s8L2NvZGU+PC9hPikgYXMgcGFydAorIG9mIHRoZSBKUEVHIGNvbXByZXNzaW9uIHByb2Nlc3MsIHNvbWUgb2YgdGhlIENiIGFuZCBDciAoY2hyb21pbmFuY2UpCisgY29tcG9uZW50cyBjYW4gYmUgZGlzY2FyZGVkIG9yIGF2ZXJhZ2VkIHRvZ2V0aGVyIHRvIHByb2R1Y2UgYSBzbWFsbGVyCisgaW1hZ2Ugd2l0aCBsaXR0bGUgcGVyY2VwdGlibGUgbG9zcyBvZiBpbWFnZSBjbGFyaXR5ICh0aGUgaHVtYW4gZXllIGlzIG1vcmUKKyBzZW5zaXRpdmUgdG8gc21hbGwgY2hhbmdlcyBpbiBicmlnaHRuZXNzIHRoYW4gdG8gc21hbGwgY2hhbmdlcyBpbiBjb2xvci4pCisgVGhpcyBpcyBjYWxsZWQgImNocm9taW5hbmNlIHN1YnNhbXBsaW5nIi4KKyA8cD4KKyBOT1RFOiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IHdoZW4gY29tcHJlc3NpbmcgYSBKUEVHIGltYWdlIGZyb20gYSBZVVYKKyBwbGFuYXIgc291cmNlLiAgSW4gdGhhdCBjYXNlLCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgaW4KKyB0aGUgSlBFRyBpbWFnZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzb3VyY2UuICBGdXJ0aGVybW9yZSwgdGhpcyBtZXRob2QgaGFzCisgbm8gZWZmZWN0IHdoZW4gZW5jb2RpbmcgdG8gYSBwcmUtYWxsb2NhdGVkIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+WVVWSW1hZ2U8L2NvZGU+PC9hPiBpbnN0YW5jZS4gIEluCisgdGhhdCBjYXNlLCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKyBkZXN0aW5hdGlvbi48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bmV3U3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdG8gdXNlIGluCisgc3Vic2VxdWVudCBjb21wcmVzcy9lbmNvZGUgb2VwcmF0aW9ucyAob25lIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQ0NCI+PGNvZGU+VEouU0FNUF8qPC9jb2RlPjwvYT4pPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJzZXRKUEVHUXVhbGl0eShpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5zZXRKUEVHUXVhbGl0eTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRKUEVHUXVhbGl0eShpbnQmbmJzcDtxdWFsaXR5KTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlNldCB0aGUgSlBFRyBpbWFnZSBxdWFsaXR5IGxldmVsIGZvciBzdWJzZXF1ZW50IGNvbXByZXNzIG9wZXJhdGlvbnMuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnF1YWxpdHk8L2NvZGU+IC0gdGhlIG5ldyBKUEVHIGltYWdlIHF1YWxpdHkgbGV2ZWwgKDEgdG8gMTAwLCAxID0gd29yc3QsCisgMTAwID0gYmVzdCk8L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImNvbXByZXNzKGJ5dGVbXSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Y29tcHJlc3M8L2g0PgorPHByZT5wdWJsaWMmbmJzcDt2b2lkJm5ic3A7Y29tcHJlc3MoYnl0ZVtdJm5ic3A7ZHN0QnVmLAorICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNvbXByZXNzIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgSlBFRyBpbWFnZSB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5kc3RCdWY8L2NvZGU+IC0gYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBKUEVHIGltYWdlLiAgVXNlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNidWZTaXplKGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEouYnVmU2l6ZShpbnQsIGludCwgaW50KTwvY29kZT48L2E+IHRvIGRldGVybWluZSB0aGUgbWF4aW11bSBzaXplIGZvciB0aGlzIGJ1ZmZlciBiYXNlZCBvbgorIHRoZSBzb3VyY2UgaW1hZ2UncyB3aWR0aCBhbmQgaGVpZ2h0IGFuZCB0aGUgZGVzaXJlZCBsZXZlbCBvZiBjaHJvbWluYW5jZQorIHN1YnNhbXBsaW5nLjwvZGQ+PGRkPjxjb2RlPmZsYWdzPC9jb2RlPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Y29kZT5USi5GTEFHXyo8L2NvZGU+PC9hPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY29tcHJlc3MoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Y29tcHJlc3M8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtieXRlW10mbmJzcDtjb21wcmVzcyhpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Db21wcmVzcyB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yCisgaW5zdGFuY2UgYW5kIHJldHVybiBhIGJ1ZmZlciBjb250YWluaW5nIGEgSlBFRyBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZmxhZ3M8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxjb2RlPlRKLkZMQUdfKjwvY29kZT48L2E+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIGJ1ZmZlciBjb250YWluaW5nIGEgSlBFRyBpbWFnZS4gIFRoZSBsZW5ndGggb2YgdGhpcyBidWZmZXIgd2lsbAorIG5vdCBiZSBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4gIFVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNnZXRDb21wcmVzc2VkU2l6ZSgpIj48Y29kZT5nZXRDb21wcmVzc2VkU2l6ZSgpPC9jb2RlPjwvYT4gdG8gb2J0YWluIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwgYnl0ZVtdLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5jb21wcmVzczwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMmbmJzcDt2b2lkJm5ic3A7Y29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4mbmJzcDs8aT5Vc2UKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBhbmQKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNjb21wcmVzcyhieXRlW10sJTIwaW50KSI+PGNvZGU+Y29tcHJlc3MoYnl0ZVtdLCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImNvbXByZXNzKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmNvbXByZXNzPC9oND4KKzxwcmU+QERlcHJlY2F0ZWQKK3B1YmxpYyZuYnNwO2J5dGVbXSZuYnNwO2NvbXByZXNzKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4mbmJzcDs8aT5Vc2UKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBhbmQKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNjb21wcmVzcyhpbnQpIj48Y29kZT5jb21wcmVzcyhpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImVuY29kZVlVVihvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZW5jb2RlWVVWPC9oND4KKzxwcmU+cHVibGljJm5ic3A7dm9pZCZuYnNwO2VuY29kZVlVVig8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPiZuYnNwO2RzdEltYWdlLAorICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RW5jb2RlIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgWVVWIHBsYW5hciBpbWFnZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGdpdmVuCisgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlLiAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yCisgY29udmVyc2lvbiByb3V0aW5lcyBpbiBUdXJib0pQRUcncyB1bmRlcmx5aW5nIGNvZGVjIGJ1dCBkb2VzIG5vdCBleGVjdXRlCisgYW55IG9mIHRoZSBvdGhlciBzdGVwcyBpbiB0aGUgSlBFRyBjb21wcmVzc2lvbiBwcm9jZXNzLiAgRW5jb2RpbmcKKyBDTVlLIHNvdXJjZSBpbWFnZXMgdG8gWVVWIGlzIG5vdCBzdXBwb3J0ZWQuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmRzdEltYWdlPC9jb2RlPiAtIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+WVVWSW1hZ2U8L2NvZGU+PC9hPiBpbnN0YW5jZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgWVVWIHBsYW5hcgorIGltYWdlPC9kZD48ZGQ+PGNvZGU+ZmxhZ3M8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxjb2RlPlRKLkZMQUdfKjwvY29kZT48L2E+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJlbmNvZGVZVVYoYnl0ZVtdLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5lbmNvZGVZVVY8L2g0PgorPHByZT5ARGVwcmVjYXRlZAorcHVibGljJm5ic3A7dm9pZCZuYnNwO2VuY29kZVlVVihieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPiZuYnNwOzxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNlbmNvZGVZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+PGNvZGU+ZW5jb2RlWVVWKFlVVkltYWdlLCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImVuY29kZVlVVihpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmVuY29kZVlVVjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+Jm5ic3A7ZW5jb2RlWVVWKGludCZuYnNwO3BhZCwKKyAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RW5jb2RlIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgdW5pZmllZCBZVVYgcGxhbmFyIGltYWdlIGJ1ZmZlciBhbmQgcmV0dXJuIGEKKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZW5jb2RlZCBpbWFnZS4gIFRoaXMgbWV0aG9kCisgdXNlcyB0aGUgYWNjZWxlcmF0ZWQgY29sb3IgY29udmVyc2lvbiByb3V0aW5lcyBpbiBUdXJib0pQRUcncyB1bmRlcmx5aW5nCisgY29kZWMgYnV0IGRvZXMgbm90IGV4ZWN1dGUgYW55IG9mIHRoZSBvdGhlciBzdGVwcyBpbiB0aGUgSlBFRyBjb21wcmVzc2lvbgorIHByb2Nlc3MuICBFbmNvZGluZyBDTVlLIHNvdXJjZSBpbWFnZXMgdG8gWVVWIGlzIG5vdCBzdXBwb3J0ZWQuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnBhZDwvY29kZT4gLSB0aGUgd2lkdGggb2YgZWFjaCBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIFlVViBpbWFnZSB3aWxsIGJlCisgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIChtdXN0IGJlIGEgcG93ZXIgb2YKKyAyLik8L2RkPjxkZD48Y29kZT5mbGFnczwvY29kZT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PGNvZGU+VEouRkxBR18qPC9jb2RlPjwvYT48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmEgWVVWIHBsYW5hciBpbWFnZS48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImVuY29kZVlVVihpbnRbXSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZW5jb2RlWVVWPC9oND4KKzxwcmU+cHVibGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDtlbmNvZGVZVVYoaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5FbmNvZGUgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gc2VwYXJhdGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyBhbmQgcmV0dXJuIGEKKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZW5jb2RlZCBpbWFnZSBwbGFuZXMuICBUaGlzCisgbWV0aG9kIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yIGNvbnZlcnNpb24gcm91dGluZXMgaW4gVHVyYm9KUEVHJ3MKKyB1bmRlcmx5aW5nIGNvZGVjIGJ1dCBkb2VzIG5vdCBleGVjdXRlIGFueSBvZiB0aGUgb3RoZXIgc3RlcHMgaW4gdGhlIEpQRUcKKyBjb21wcmVzc2lvbiBwcm9jZXNzLiAgRW5jb2RpbmcgQ01ZSyBzb3VyY2UgaW1hZ2VzIHRvIFlVViBpcyBub3Qgc3VwcG9ydGVkLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5zdHJpZGVzPC9jb2RlPiAtIGFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcworIHBlciBsaW5lIGluIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lIG9mIHRoZSBvdXRwdXQgaW1hZ2UuICBTZXR0aW5nIHRoZQorIHN0cmlkZSBmb3IgYW55IHBsYW5lIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgY29tcG9uZW50IHdpZHRoCisgb2YgdGhlIHBsYW5lLiAgSWYgPGNvZGU+c3RyaWRlczwvY29kZT4gaXMgbnVsbCwgdGhlbiB0aGUgc3RyaWRlcyBmb3IgYWxsCisgcGxhbmVzIHdpbGwgYmUgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgY29tcG9uZW50IHdpZHRocy4gIFlvdSBjYW4gYWRqdXN0CisgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gYWRkIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgbGluZSBwYWRkaW5nIHRvIGVhY2gKKyBwbGFuZS48L2RkPjxkZD48Y29kZT5mbGFnczwvY29kZT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PGNvZGU+VEouRkxBR18qPC9jb2RlPjwvYT48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmEgWVVWIHBsYW5hciBpbWFnZS48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImVuY29kZVlVVihpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5lbmNvZGVZVVY8L2g0PgorPHByZT5ARGVwcmVjYXRlZAorcHVibGljJm5ic3A7Ynl0ZVtdJm5ic3A7ZW5jb2RlWVVWKGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5EZXByZWNhdGVkLjwvc3Bhbj4mbmJzcDs8aT5Vc2UgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGludCwlMjBpbnQpIj48Y29kZT5lbmNvZGVZVVYoaW50LCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImVuY29kZVlVVihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCBieXRlW10sIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmVuY29kZVlVVjwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMmbmJzcDt2b2lkJm5ic3A7ZW5jb2RlWVVWKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSZuYnNwO2RzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VXNlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gYW5kCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGJ5dGVbXSwlMjBpbnQpIj48Y29kZT5lbmNvZGVZVVYoYnl0ZVtdLCBpbnQpPC9jb2RlPjwvYT4gaW5zdGVhZC48L2k+PC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImVuY29kZVlVVihqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5lbmNvZGVZVVY8L2g0PgorPHByZT5ARGVwcmVjYXRlZAorcHVibGljJm5ic3A7Ynl0ZVtdJm5ic3A7ZW5jb2RlWVVWKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtzcmNJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPiZuYnNwOzxpPlVzZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+c2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGFuZAorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihpbnQsJTIwaW50KSI+PGNvZGU+ZW5jb2RlWVVWKGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRDb21wcmVzc2VkU2l6ZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRDb21wcmVzc2VkU2l6ZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2dldENvbXByZXNzZWRTaXplKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbWFnZSAoaW4gYnl0ZXMpIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQKKyBjb21wcmVzcyBvcGVyYXRpb24uPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBzaXplIG9mIHRoZSBpbWFnZSAoaW4gYnl0ZXMpIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQKKyBjb21wcmVzcyBvcGVyYXRpb24uPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJjbG9zZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5jbG9zZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtjbG9zZSgpCisgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkZyZWUgdGhlIG5hdGl2ZSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+Cis8ZHQ+PHN0cm9uZz5TcGVjaWZpZWQgYnk6PC9zdHJvbmc+PC9kdD4KKzxkZD48Y29kZT5jbG9zZTwvY29kZT4mbmJzcDtpbiBpbnRlcmZhY2UmbmJzcDs8Y29kZT5qYXZhLmlvLkNsb3NlYWJsZTwvY29kZT48L2RkPgorPGR0PjxzdHJvbmc+U3BlY2lmaWVkIGJ5Ojwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PGNvZGU+Y2xvc2U8L2NvZGU+Jm5ic3A7aW4gaW50ZXJmYWNlJm5ic3A7PGNvZGU+amF2YS5sYW5nLkF1dG9DbG9zZWFibGU8L2NvZGU+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJmaW5hbGl6ZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZmluYWxpemU8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDt2b2lkJm5ic3A7ZmluYWxpemUoKQorICAgICAgICAgICAgICAgICB0aHJvd3MgamF2YS5sYW5nLlRocm93YWJsZTwvcHJlPgorPGRsPgorPGR0PjxzdHJvbmc+T3ZlcnJpZGVzOjwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PGNvZGU+ZmluYWxpemU8L2NvZGU+Jm5ic3A7aW4gY2xhc3MmbmJzcDs8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPmphdmEubGFuZy5UaHJvd2FibGU8L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImJvdHRvbU5hdiI+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5QcmV2IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKQ29tcHJlc3Nvci5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8ZGl2PgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+Cis8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2Rfc3VtbWFyeSI+TWV0aG9kPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5EZXRhaWw6Jm5ic3A7PC9saT4KKzxsaT5GaWVsZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX2RldGFpbCI+TWV0aG9kPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyZGNkNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwKQEAgLTAsMCArMSwyNDEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPCEtLSBOZXdQYWdlIC0tPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VEpDdXN0b21GaWx0ZXI8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7CisgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlRKQ3VzdG9tRmlsdGVyIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChlcnIpIHsKKyAgICB9CisvLy0tPgorPC9zY3JpcHQ+Cis8bm9zY3JpcHQ+Cis8ZGl2PkphdmFTY3JpcHQgaXMgZGlzYWJsZWQgb24geW91ciBicm93c2VyLjwvZGl2PgorPC9ub3NjcmlwdD4KKzwhLS0gPT09PT09PT09IFNUQVJUIE9GIFRPUCBOQVZCQVIgPT09PT09PSAtLT4KKzxkaXYgY2xhc3M9InRvcE5hdiI+PGEgbmFtZT0ibmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX3RvcCIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpDdXN0b21GaWx0ZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl90b3AiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl90b3AiKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPk5lc3RlZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+Cis8ZGl2IGNsYXNzPSJzdWJUaXRsZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2Rpdj4KKzxoMiB0aXRsZT0iSW50ZXJmYWNlIFRKQ3VzdG9tRmlsdGVyIiBjbGFzcz0idGl0bGUiPkludGVyZmFjZSBUSkN1c3RvbUZpbHRlcjwvaDI+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbnRlbnRDb250YWluZXIiPgorPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGhyPgorPGJyPgorPHByZT5wdWJsaWMgaW50ZXJmYWNlIDxzcGFuIGNsYXNzPSJzdHJvbmciPlRKQ3VzdG9tRmlsdGVyPC9zcGFuPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkN1c3RvbSBmaWx0ZXIgY2FsbGJhY2sgaW50ZXJmYWNlPC9kaXY+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCNjdXN0b21GaWx0ZXIoamF2YS5uaW8uU2hvcnRCdWZmZXIsJTIwamF2YS5hd3QuUmVjdGFuZ2xlLCUyMGphdmEuYXd0LlJlY3RhbmdsZSwlMjBpbnQsJTIwaW50LCUyMG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtKSI+Y3VzdG9tRmlsdGVyPC9hPjwvc3Ryb25nPihqYXZhLm5pby5TaG9ydEJ1ZmZlciZuYnNwO2NvZWZmQnVmZmVyLAorICAgICAgICAgICAgamF2YS5hd3QuUmVjdGFuZ2xlJm5ic3A7YnVmZmVyUmVnaW9uLAorICAgICAgICAgICAgamF2YS5hd3QuUmVjdGFuZ2xlJm5ic3A7cGxhbmVSZWdpb24sCisgICAgICAgICAgICBpbnQmbmJzcDtjb21wb25lbnRJRCwKKyAgICAgICAgICAgIGludCZuYnNwO3RyYW5zZm9ybUlELAorICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT4mbmJzcDt0cmFuc2Zvcm0pPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIERDVCBjb2VmZmljaWVudHMgYWZ0ZXIKKyB0aGV5IGFyZSBsb3NzbGVzc2x5IHRyYW5zZm9ybWVkIGJ1dCBiZWZvcmUgdGhleSBhcmUgdHJhbnNjb2RlZCB0byBhIG5ldworIEpQRUcgaW1hZ2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5NZXRob2QgRGV0YWlsPC9oMz4KKzxhIG5hbWU9ImN1c3RvbUZpbHRlcihqYXZhLm5pby5TaG9ydEJ1ZmZlciwgamF2YS5hd3QuUmVjdGFuZ2xlLCBqYXZhLmF3dC5SZWN0YW5nbGUsIGludCwgaW50LCBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybSkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5jdXN0b21GaWx0ZXI8L2g0PgorPHByZT52b2lkJm5ic3A7Y3VzdG9tRmlsdGVyKGphdmEubmlvLlNob3J0QnVmZmVyJm5ic3A7Y29lZmZCdWZmZXIsCisgICAgICAgICAgICAgICAgamF2YS5hd3QuUmVjdGFuZ2xlJm5ic3A7YnVmZmVyUmVnaW9uLAorICAgICAgICAgICAgICAgIGphdmEuYXd0LlJlY3RhbmdsZSZuYnNwO3BsYW5lUmVnaW9uLAorICAgICAgICAgICAgICAgIGludCZuYnNwO2NvbXBvbmVudElELAorICAgICAgICAgICAgICAgIGludCZuYnNwO3RyYW5zZm9ybUlELAorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+Jm5ic3A7dHJhbnNmb3JtKQorICAgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgRENUIGNvZWZmaWNpZW50cyBhZnRlcgorIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3CisgSlBFRyBpbWFnZS4gIFRoaXMgYWxsb3dzIGZvciBjdXN0b20gZmlsdGVycyBvciBvdGhlciB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUKKyBhcHBsaWVkIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jb2VmZkJ1ZmZlcjwvY29kZT4gLSBhIGJ1ZmZlciBjb250YWluaW5nIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMuCisgKE5PVEU6IHRoaXMgYnVmZmVyIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIG9uY2UgdGhlIGNhbGxiYWNrCisgcmV0dXJucywgc28gYXBwbGljYXRpb25zIHdpc2hpbmcgdG8gaGFuZCBvZmYgdGhlIERDVCBjb2VmZmljaWVudHMgdG8KKyBhbm90aGVyIGZ1bmN0aW9uIG9yIGxpYnJhcnkgc2hvdWxkIG1ha2UgYSBjb3B5IG9mIHRoZW0gd2l0aGluIHRoZSBib2R5IG9mCisgdGhlIGNhbGxiYWNrLik8L2RkPjxkZD48Y29kZT5idWZmZXJSZWdpb248L2NvZGU+IC0gcmVjdGFuZ2xlIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKKyA8Y29kZT5jb2VmZkJ1ZmZlcjwvY29kZT4gYXMgd2VsbCBhcyBpdHMgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjb21wb25lbnQKKyBwbGFuZS4gIFR1cmJvSlBFRyBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSB0byBzcGxpdCBlYWNoIGNvbXBvbmVudCBwbGFuZQorIGludG8gbXVsdGlwbGUgRENUIGNvZWZmaWNpZW50IGJ1ZmZlcnMgYW5kIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uY2UKKyBmb3IgZWFjaCBidWZmZXIuPC9kZD48ZGQ+PGNvZGU+cGxhbmVSZWdpb248L2NvZGU+IC0gcmVjdGFuZ2xlIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlCisgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoIDxjb2RlPmNvZWZmQnVmZmVyPC9jb2RlPiBiZWxvbmdzPC9kZD48ZGQ+PGNvZGU+Y29tcG9uZW50SUQ8L2NvZGU+IC0gSUQgbnVtYmVyIG9mIHRoZSBjb21wb25lbnQgcGxhbmUgdG8gd2hpY2gKKyA8Y29kZT5jb2VmZkJ1ZmZlcjwvY29kZT4gYmVsb25ncyAoWSwgQ2IsIGFuZCBDciBoYXZlLCByZXNwZWN0aXZlbHksIElEJ3MKKyBvZiAwLCAxLCBhbmQgMiBpbiB0eXBpY2FsIEpQRUcgaW1hZ2VzLik8L2RkPjxkZD48Y29kZT50cmFuc2Zvcm1JRDwvY29kZT4gLSBJRCBudW1iZXIgb2YgdGhlIHRyYW5zZm9ybWVkIGltYWdlIHRvIHdoaWNoCisgPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+IGJlbG9uZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBvZiB0aGUKKyB0cmFuc2Zvcm0gaW4gdGhlIDxjb2RlPnRyYW5zZm9ybXM8L2NvZGU+IGFycmF5IHRoYXQgd2FzIHBhc3NlZCB0byA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjdHJhbnNmb3JtKGJ5dGVbXVtdLCUyMG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sJTIwaW50KSI+PGNvZGU+VEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKTwvY29kZT48L2E+LjwvZGQ+PGRkPjxjb2RlPnRyYW5zZm9ybTwvY29kZT4gLSBhIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEpUcmFuc2Zvcm08L2NvZGU+PC9hPiBpbnN0YW5jZSB0aGF0IHNwZWNpZmllcyB0aGUKKyBwYXJhbWV0ZXJzIGFuZC9vciBjcm9wcGluZyByZWdpb24gZm9yIHRoaXMgdHJhbnNmb3JtPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImJvdHRvbU5hdiI+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpDdXN0b21GaWx0ZXIuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPk5lc3RlZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sCkBAIC0wLDAgKzEsMTI1NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USkRlY29tcHJlc3NvcjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgdGl0bGU9IlN0eWxlIj4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgICB0cnkgeworICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCdpcy1leHRlcm5hbD10cnVlJykgPT0gLTEpIHsKKyAgICAgICAgICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iVEpEZWNvbXByZXNzb3IiOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKGVycikgeworICAgIH0KKy8vLS0+Cis8L3NjcmlwdD4KKzxub3NjcmlwdD4KKzxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5QcmV2IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+TmV4dCBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSkRlY29tcHJlc3Nvci5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX3RvcCIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8ZGl2PgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+Cis8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkX3N1bW1hcnkiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9kZXRhaWwiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX2RldGFpbCI+TWV0aG9kPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgorPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKzxkaXYgY2xhc3M9InN1YlRpdGxlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvZGl2PgorPGgyIHRpdGxlPSJDbGFzcyBUSkRlY29tcHJlc3NvciIgY2xhc3M9InRpdGxlIj5DbGFzcyBUSkRlY29tcHJlc3NvcjwvaDI+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbnRlbnRDb250YWluZXIiPgorPHVsIGNsYXNzPSJpbmhlcml0YW5jZSI+Cis8bGk+amF2YS5sYW5nLk9iamVjdDwvbGk+Cis8bGk+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkRlY29tcHJlc3NvcjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8ZGw+Cis8ZHQ+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9kdD4KKzxkZD5qYXZhLmlvLkNsb3NlYWJsZSwgamF2YS5sYW5nLkF1dG9DbG9zZWFibGU8L2RkPgorPC9kbD4KKzxkbD4KKzxkdD5EaXJlY3QgS25vd24gU3ViY2xhc3Nlczo8L2R0PgorPGRkPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybWVyPC9hPjwvZGQ+Cis8L2RsPgorPGhyPgorPGJyPgorPHByZT5wdWJsaWMgY2xhc3MgPHNwYW4gY2xhc3M9InN0cm9uZyI+VEpEZWNvbXByZXNzb3I8L3NwYW4+CitleHRlbmRzIGphdmEubGFuZy5PYmplY3QKK2ltcGxlbWVudHMgamF2YS5pby5DbG9zZWFibGU8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UdXJib0pQRUcgZGVjb21wcmVzc29yPC9kaXY+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iZmllbGRfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+RmllbGQgU3VtbWFyeTwvaDM+Cis8dGFibGUgY2xhc3M9Im92ZXJ2aWV3U3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkZpZWxkIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgZmllbGRzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+RmllbGRzPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWJFbmQiPiZuYnNwOzwvc3Bhbj48L2NhcHRpb24+Cis8dHI+Cis8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5Nb2RpZmllciBhbmQgVHlwZTwvdGg+Cis8dGggY2xhc3M9ImNvbExhc3QiIHNjb3BlPSJjb2wiPkZpZWxkIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5wcm90ZWN0ZWQgbG9uZzwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjaGFuZGxlIj5oYW5kbGU8L2E+PC9zdHJvbmc+PC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5wcm90ZWN0ZWQgYnl0ZVtdPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNqcGVnQnVmIj5qcGVnQnVmPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjanBlZ0J1ZlNpemUiPmpwZWdCdWZTaXplPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjanBlZ0NvbG9yc3BhY2UiPmpwZWdDb2xvcnNwYWNlPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjanBlZ0hlaWdodCI+anBlZ0hlaWdodDwvYT48L3N0cm9uZz48L2NvZGU+Jm5ic3A7PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2pwZWdTdWJzYW1wIj5qcGVnU3Vic2FtcDwvYT48L3N0cm9uZz48L2NvZGU+Jm5ic3A7PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2pwZWdXaWR0aCI+anBlZ1dpZHRoPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCN5dXZJbWFnZSI+eXV2SW1hZ2U8L2E+PC9zdHJvbmc+PC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJDb25zdHJ1Y3RvciBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGNvbnN0cnVjdG9ycywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPkNvbnN0cnVjdG9yczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xPbmUiIHNjb3BlPSJjb2wiPkNvbnN0cnVjdG9yIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI1RKRGVjb21wcmVzc29yKCkiPlRKRGVjb21wcmVzc29yPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzc29yIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjVEpEZWNvbXByZXNzb3IoYnl0ZVtdKSI+VEpEZWNvbXByZXNzb3I8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2pwZWdJbWFnZSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHIHNvdXJjZQorIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNUSkRlY29tcHJlc3NvcihieXRlW10sJTIwaW50KSI+VEpEZWNvbXByZXNzb3I8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2pwZWdJbWFnZSwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7aW1hZ2VTaXplKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcgc291cmNlCisgaW1hZ2Ugb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluCisgPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjVEpEZWNvbXByZXNzb3Iob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UpIj5USkRlY29tcHJlc3NvcjwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDt5dXZJbWFnZSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBZVVYgcGxhbmFyCisgc291cmNlIGltYWdlIHN0b3JlZCBpbiA8Y29kZT55dXZJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZAorIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNjbG9zZSgpIj5jbG9zZTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5GcmVlIHRoZSBuYXRpdmUgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCUyMGludCkiPmRlY29tcHJlc3M8L2E+PC9zdHJvbmc+KGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtkc3RJbWFnZSwKKyAgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2Ugb3IgZGVjb2RlIHRoZSBZVVYgc291cmNlIGltYWdlIGFzc29jaWF0ZWQKKyB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBvdXRwdXQgYSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZSB0bworIHRoZSBnaXZlbiA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzczwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7ZHN0QnVmLAorICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgIGludCZuYnNwO3BpeGVsRm9ybWF0LAorICAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3Ryb25nPkRlcHJlY2F0ZWQuPC9zdHJvbmc+Jm5ic3A7Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzczwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7ZHN0QnVmLAorICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkV2lkdGgsCisgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCwKKyAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCwKKyAgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2Ugb3IgZGVjb2RlIHRoZSBZVVYgc291cmNlIGltYWdlIGFzc29jaWF0ZWQKKyB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBvdXRwdXQgYSBncmF5c2NhbGUsIFJHQiwgb3IgQ01ZSyBpbWFnZQorIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnRbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5kZWNvbXByZXNzPC9hPjwvc3Ryb25nPihpbnRbXSZuYnNwO2RzdEJ1ZiwKKyAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgIGludCZuYnNwO3N0cmlkZSwKKyAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgIGludCZuYnNwO3BpeGVsRm9ybWF0LAorICAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBvciBkZWNvZGUgdGhlIFlVViBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZAorIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIG91dHB1dCBhIGdyYXlzY2FsZSwgUkdCLCBvciBDTVlLIGltYWdlCisgdG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uIGJ1ZmZlci48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5qYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3M8L2E+PC9zdHJvbmc+KGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgIGludCZuYnNwO2J1ZmZlcmVkSW1hZ2VUeXBlLAorICAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBvciBkZWNvZGUgdGhlIFlVViBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZAorIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIHJldHVybiBhIDxjb2RlPkJ1ZmZlcmVkSW1hZ2U8L2NvZGU+CisgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkL2RlY29kZWQgaW1hZ2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ynl0ZVtdPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5kZWNvbXByZXNzPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtkZXNpcmVkV2lkdGgsCisgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCwKKyAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCwKKyAgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCisgaW5zdGFuY2UgYW5kIHJldHVybiBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGJ5dGVbXSwlMjBpbnQpIj5kZWNvbXByZXNzVG9ZVVY8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2RzdEJ1ZiwKKyAgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj48c3Ryb25nPkRlcHJlY2F0ZWQuPC9zdHJvbmc+Jm5ic3A7Cis8ZGl2IGNsYXNzPSJibG9jayI+PGk+VXNlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLllVVkltYWdlLCUyMGludCkiPjxjb2RlPmRlY29tcHJlc3NUb1lVVihZVVZJbWFnZSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ynl0ZVtdPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5kZWNvbXByZXNzVG9ZVVYoaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihpbnQsJTIwaW50W10sJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3NUb1lVVjwvYT48L3N0cm9uZz4oaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCwKKyAgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgYW5kIHJldHVybiBhCisgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSBwbGFuZXMuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5kZWNvbXByZXNzVG9ZVVY8L2E+PC9zdHJvbmc+KGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgICAgIGludCZuYnNwO3BhZCwKKyAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCisgaW5zdGFuY2UgaW50byBhIHVuaWZpZWQgWVVWIHBsYW5hciBpbWFnZSBidWZmZXIgYW5kIHJldHVybiBhCisgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPllVVkltYWdlPC9hPiZuYnNwO2RzdEltYWdlLAorICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4KKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9hPjwvc3Ryb25nPigpPC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldENvbG9yc3BhY2UoKSI+Z2V0Q29sb3JzcGFjZTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBjb2xvcnNwYWNlIHVzZWQgaW4gdGhlIHNvdXJjZSBpbWFnZSAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQKKyB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SGVpZ2h0KCkiPmdldEhlaWdodDwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZSAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgZGVjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmJ5dGVbXTwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SlBFR0J1ZigpIj5nZXRKUEVHQnVmPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIEpQRUcgaW1hZ2UgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldEpQRUdTaXplKCkiPmdldEpQRUdTaXplPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKSBhc3NvY2lhdGVkIHdpdGggdGhpcworIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFNjYWxlZEhlaWdodChpbnQsJTIwaW50KSI+Z2V0U2NhbGVkSGVpZ2h0PC9hPjwvc3Ryb25nPihpbnQmbmJzcDtkZXNpcmVkV2lkdGgsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0KTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3Qgc2NhbGVkLWRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgZGVjb21wcmVzc29yIGNhbiBnZW5lcmF0ZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgZGVzaXJlZCBpbWFnZSB3aWR0aCBhbmQKKyBoZWlnaHQuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRXaWR0aChpbnQsJTIwaW50KSI+Z2V0U2NhbGVkV2lkdGg8L2E+PC9zdHJvbmc+KGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGxhcmdlc3Qgc2NhbGVkLWRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgZGVjb21wcmVzc29yIGNhbiBnZW5lcmF0ZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgZGVzaXJlZCBpbWFnZSB3aWR0aCBhbmQKKyBoZWlnaHQuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTdWJzYW1wKCkiPmdldFN1YnNhbXA8L2E+PC9zdHJvbmc+KCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlCisgKEpQRUcgb3IgWVVWKSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRXaWR0aCgpIj5nZXRXaWR0aDwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjc2V0SlBFR0ltYWdlKGJ5dGVbXSwlMjBpbnQpIj5zZXRKUEVHSW1hZ2U8L2E+PC9zdHJvbmc+KGJ5dGVbXSZuYnNwO2pwZWdJbWFnZSwKKyAgICAgICAgICAgIGludCZuYnNwO2ltYWdlU2l6ZSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHN0cm9uZz5EZXByZWNhdGVkLjwvc3Ryb25nPiZuYnNwOworPGRpdiBjbGFzcz0iYmxvY2siPjxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQpIj48Y29kZT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwlMjBpbnQpIj5zZXRTb3VyY2VJbWFnZTwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7anBlZ0ltYWdlLAorICAgICAgICAgICAgICBpbnQmbmJzcDtpbWFnZVNpemUpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkFzc29jaWF0ZSB0aGUgSlBFRyBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KKyA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2Uob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UpIj5zZXRTb3VyY2VJbWFnZTwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDtzcmNJbWFnZSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIHRoZSBzcGVjaWZpZWQgWVVWIHBsYW5hciBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyZuYnNwO2phdmEubGFuZy5PYmplY3Q8L2gzPgorPGNvZGU+Y2xvbmUsIGVxdWFscywgZ2V0Q2xhc3MsIGhhc2hDb2RlLCBub3RpZnksIG5vdGlmeUFsbCwgdG9TdHJpbmcsIHdhaXQsIHdhaXQsIHdhaXQ8L2NvZGU+PC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJmaWVsZF9kZXRhaWwiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkZpZWxkIERldGFpbDwvaDM+Cis8YSBuYW1lPSJoYW5kbGUiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmhhbmRsZTwvaDQ+Cis8cHJlPnByb3RlY3RlZCZuYnNwO2xvbmcgaGFuZGxlPC9wcmU+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImpwZWdCdWYiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmpwZWdCdWY8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDtieXRlW10ganBlZ0J1ZjwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJqcGVnQnVmU2l6ZSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+anBlZ0J1ZlNpemU8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDtpbnQganBlZ0J1ZlNpemU8L3ByZT4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ieXV2SW1hZ2UiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pnl1dkltYWdlPC9oND4KKzxwcmU+cHJvdGVjdGVkJm5ic3A7PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4geXV2SW1hZ2U8L3ByZT4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ianBlZ1dpZHRoIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5qcGVnV2lkdGg8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDtpbnQganBlZ1dpZHRoPC9wcmU+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImpwZWdIZWlnaHQiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmpwZWdIZWlnaHQ8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDtpbnQganBlZ0hlaWdodDwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJqcGVnU3Vic2FtcCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+anBlZ1N1YnNhbXA8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDtpbnQganBlZ1N1YnNhbXA8L3ByZT4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ianBlZ0NvbG9yc3BhY2UiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5qcGVnQ29sb3JzcGFjZTwvaDQ+Cis8cHJlPnByb3RlY3RlZCZuYnNwO2ludCBqcGVnQ29sb3JzcGFjZTwvcHJlPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkNvbnN0cnVjdG9yIERldGFpbDwvaDM+Cis8YSBuYW1lPSJUSkRlY29tcHJlc3NvcigpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkRlY29tcHJlc3NvcjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKRGVjb21wcmVzc29yKCkKKyAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzc29yIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJUSkRlY29tcHJlc3NvcihieXRlW10pIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkRlY29tcHJlc3NvcjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKRGVjb21wcmVzc29yKGJ5dGVbXSZuYnNwO2pwZWdJbWFnZSkKKyAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBzb3VyY2UKKyBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IC0gSlBFRyBpbWFnZSBidWZmZXIgKHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgaXMgYXNzdW1lZCB0bworIGJlIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LikgIFRoaXMgYnVmZmVyIGlzIG5vdCBtb2RpZmllZC48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlRKRGVjb21wcmVzc29yKGJ5dGVbXSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+VEpEZWNvbXByZXNzb3I8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSkRlY29tcHJlc3NvcihieXRlW10mbmJzcDtqcGVnSW1hZ2UsCisgICAgICAgICAgICAgIGludCZuYnNwO2ltYWdlU2l6ZSkKKyAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBzb3VyY2UKKyBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KKyA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmpwZWdJbWFnZTwvY29kZT4gLSBKUEVHIGltYWdlIGJ1ZmZlci4gIFRoaXMgYnVmZmVyIGlzIG5vdCBtb2RpZmllZC48L2RkPjxkZD48Y29kZT5pbWFnZVNpemU8L2NvZGU+IC0gc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJUSkRlY29tcHJlc3NvcihvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkRlY29tcHJlc3NvcjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKRGVjb21wcmVzc29yKDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+Jm5ic3A7eXV2SW1hZ2UpCisgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIFlVViBwbGFuYXIKKyBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnl1dkltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCisgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnl1dkltYWdlPC9jb2RlPiAtIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+WVVWSW1hZ2U8L2NvZGU+PC9hPiBpbnN0YW5jZSBjb250YWluaW5nIGEgWVVWIHBsYW5hcgorIGltYWdlIHRvIGJlIGRlY29kZWQuICBUaGlzIGltYWdlIGlzIG5vdCBtb2RpZmllZC48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZF9kZXRhaWwiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBEZXRhaWw8L2gzPgorPGEgbmFtZT0ic2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5zZXRTb3VyY2VJbWFnZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRTb3VyY2VJbWFnZShieXRlW10mbmJzcDtqcGVnSW1hZ2UsCisgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtpbWFnZVNpemUpCisgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkFzc29jaWF0ZSB0aGUgSlBFRyBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KKyA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuICBUaGlzIGltYWdlIHdpbGwKKyBiZSB1c2VkIGFzIHRoZSBzb3VyY2UgaW1hZ2UgZm9yIHN1YnNlcXVlbnQgZGVjb21wcmVzcyBvcGVyYXRpb25zLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IC0gSlBFRyBpbWFnZSBidWZmZXIuICBUaGlzIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuPC9kZD48ZGQ+PGNvZGU+aW1hZ2VTaXplPC9jb2RlPiAtIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKTwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ic2V0SlBFR0ltYWdlKGJ5dGVbXSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+c2V0SlBFR0ltYWdlPC9oND4KKzxwcmU+QERlcHJlY2F0ZWQKK3B1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRKUEVHSW1hZ2UoYnl0ZVtdJm5ic3A7anBlZ0ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aW1hZ2VTaXplKQorICAgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VXNlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCkiPjxjb2RlPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJzZXRTb3VyY2VJbWFnZShvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PnNldFNvdXJjZUltYWdlPC9oND4KKzxwcmU+cHVibGljJm5ic3A7dm9pZCZuYnNwO3NldFNvdXJjZUltYWdlKDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+Jm5ic3A7c3JjSW1hZ2UpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzb2NpYXRlIHRoZSBzcGVjaWZpZWQgWVVWIHBsYW5hciBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorIGluc3RhbmNlLiAgU3Vic2VxdWVudCBkZWNvbXByZXNzIG9wZXJhdGlvbnMgd2lsbCBkZWNvZGUgdGhpcyBpbWFnZSBpbnRvIGFuCisgUkdCIG9yIGdyYXlzY2FsZSBkZXN0aW5hdGlvbiBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+c3JjSW1hZ2U8L2NvZGU+IC0gPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5ZVVZJbWFnZTwvY29kZT48L2E+IGluc3RhbmNlIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlIHRvCisgYmUgZGVjb2RlZC4gIFRoaXMgaW1hZ2UgaXMgbm90IG1vZGlmaWVkLjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0V2lkdGgoKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0V2lkdGg8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtnZXRXaWR0aCgpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZSAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgZGVjb21wcmVzc29yIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZSAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgZGVjb21wcmVzc29yIGluc3RhbmNlLjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0SGVpZ2h0KCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldEhlaWdodDwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2dldEhlaWdodCgpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKEpQRUcgb3IgWVVWKSBhc3NvY2lhdGVkIHdpdGggdGhpcworIGRlY29tcHJlc3NvciBpbnN0YW5jZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGhlaWdodCBvZiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRTdWJzYW1wKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldFN1YnNhbXA8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtnZXRTdWJzYW1wKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBzb3VyY2UgaW1hZ2UKKyAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS4gIFNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDQiPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlCisgKEpQRUcgb3IgWVVWKSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRDb2xvcnNwYWNlKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldENvbG9yc3BhY2U8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtnZXRDb2xvcnNwYWNlKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBjb2xvcnNwYWNlIHVzZWQgaW4gdGhlIHNvdXJjZSBpbWFnZSAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQKKyB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLiAgU2VlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjQ1NfUkdCIj48Y29kZT5USi5DU18qPC9jb2RlPjwvYT4uICBJZiB0aGUKKyBzb3VyY2UgaW1hZ2UgaXMgWVVWLCB0aGVuIHRoaXMgYWx3YXlzIHJldHVybnMgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNDU19ZQ2JDciI+PGNvZGU+VEouQ1NfWUNiQ3I8L2NvZGU+PC9hPi48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGNvbG9yc3BhY2UgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZAorIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRKUEVHQnVmKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldEpQRUdCdWY8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtieXRlW10mbmJzcDtnZXRKUEVHQnVmKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBKUEVHIGltYWdlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBKUEVHIGltYWdlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRKUEVHU2l6ZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRKUEVHU2l6ZTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2dldEpQRUdTaXplKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRTY2FsZWRXaWR0aChpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldFNjYWxlZFdpZHRoPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0U2NhbGVkV2lkdGgoaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0KTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCisgaGVpZ2h0LjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5kZXNpcmVkV2lkdGg8L2NvZGU+IC0gZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgorIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHdpZHRoIG9mIHRoZSBKUEVHIGltYWdlCisgKGluIG90aGVyIHdvcmRzLCB0aGUgd2lkdGggd2lsbCBub3QgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZQorIHNjYWxlZCBpbWFnZSBzaXplLik8L2RkPjxkZD48Y29kZT5kZXNpcmVkSGVpZ2h0PC9jb2RlPiAtIGRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCisgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHCisgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgaGVpZ2h0IHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZworIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgd2lkdGggb2YgdGhlIGxhcmdlc3Qgc2NhbGVkLWRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgZGVjb21wcmVzc29yIGNhbiBnZW5lcmF0ZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgZGVzaXJlZCBpbWFnZSB3aWR0aCBhbmQKKyBoZWlnaHQuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRTY2FsZWRIZWlnaHQoaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRTY2FsZWRIZWlnaHQ8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtnZXRTY2FsZWRIZWlnaHQoaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3Qgc2NhbGVkLWRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgZGVjb21wcmVzc29yIGNhbiBnZW5lcmF0ZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgZGVzaXJlZCBpbWFnZSB3aWR0aCBhbmQKKyBoZWlnaHQuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmRlc2lyZWRXaWR0aDwvY29kZT4gLSBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCisgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UKKyAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlCisgc2NhbGVkIGltYWdlIHNpemUuKTwvZGQ+PGRkPjxjb2RlPmRlc2lyZWRIZWlnaHQ8L2NvZGU+IC0gZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KKyBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcKKyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nCisgdGhlIHNjYWxlZCBpbWFnZSBzaXplLik8L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3Qgc2NhbGVkLWRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgZGVjb21wcmVzc29yIGNhbiBnZW5lcmF0ZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgZGVzaXJlZCBpbWFnZSB3aWR0aCBhbmQKKyBoZWlnaHQuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZGVjb21wcmVzczwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtkZWNvbXByZXNzKGJ5dGVbXSZuYnNwO2RzdEJ1ZiwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7eCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZ3JheXNjYWxlLCBSR0IsIG9yIENNWUsgaW1hZ2UKKyB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLgorIDxwPgorIE5PVEU6IFRoZSBvdXRwdXQgaW1hZ2UgaXMgZnVsbHkgcmVjb3ZlcmFibGUgaWYgdGhpcyBtZXRob2QgdGhyb3dzIGEKKyBub24tZmF0YWwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkV4Y2VwdGlvbjwvY29kZT48L2E+ICh1bmxlc3MKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfU1RPUE9OV0FSTklORyI+PGNvZGU+VEouRkxBR19TVE9QT05XQVJOSU5HPC9jb2RlPjwvYT4gaXMgc3BlY2lmaWVkLik8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZHN0QnVmPC9jb2RlPiAtIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgZGVjb21wcmVzc2VkL2RlY29kZWQgaW1hZ2UuCisgSWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4gdGhpcyBidWZmZXIgc2hvdWxkIG5vcm1hbGx5IGJlCisgPGNvZGU+cGl0Y2ggKiBzY2FsZWRIZWlnaHQ8L2NvZGU+IGJ5dGVzIGluIHNpemUsIHdoZXJlCisgPGNvZGU+c2NhbGVkSGVpZ2h0PC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxjb2RlPgorIHNjYWxpbmdGYWN0b3IuPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZ2V0U2NhbGVkKGludCkiPjxjb2RlPmdldFNjYWxlZDwvY29kZT48L2E+KGpwZWdIZWlnaHQpCisgPC9jb2RlPiB3aXRoIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGZyb20gPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRTY2FsaW5nRmFjdG9ycygpIj48Y29kZT5USi5nZXRTY2FsaW5nRmFjdG9ycygpPC9jb2RlPjwvYT4gb3IgYnkgY2FsbGluZyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFNjYWxlZEhlaWdodChpbnQsJTIwaW50KSI+PGNvZGU+Z2V0U2NhbGVkSGVpZ2h0KGludCwgaW50KTwvY29kZT48L2E+LiAgSWYgdGhlCisgc291cmNlIGltYWdlIGlzIGEgWVVWIGltYWdlLCB0aGVuIHRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZQorIDxjb2RlPnBpdGNoICogaGVpZ2h0PC9jb2RlPiBieXRlcyBpbiBzaXplLCB3aGVyZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGlzCisgdGhlIGhlaWdodCBvZiB0aGUgWVVWIGltYWdlLiAgSG93ZXZlciwgdGhlIGJ1ZmZlciBtYXkgYWxzbyBiZSBsYXJnZXIgdGhhbgorIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2UgaW1hZ2UsIGluIHdoaWNoIGNhc2UgdGhlIDxjb2RlPng8L2NvZGU+LAorIDxjb2RlPnk8L2NvZGU+LCBhbmQgPGNvZGU+cGl0Y2g8L2NvZGU+IHBhcmFtZXRlcnMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorIHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgc291cmNlIGltYWdlIHNob3VsZCBiZSBkZWNvbXByZXNzZWQvZGVjb2RlZC48L2RkPjxkZD48Y29kZT54PC9jb2RlPiAtIHggb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlIGludG8KKyB3aGljaCB0aGUgc291cmNlIGltYWdlIHNob3VsZCBiZSBkZWNvbXByZXNzZWQvZGVjb2RlZDwvZGQ+PGRkPjxjb2RlPnk8L2NvZGU+IC0geSBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaW50bworIHdoaWNoIHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJlIGRlY29tcHJlc3NlZC9kZWNvZGVkPC9kZD48ZGQ+PGNvZGU+ZGVzaXJlZFdpZHRoPC9jb2RlPiAtIElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBKUEVHIGltYWdlLCB0aGVuIHRoaXMKKyBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50CisgdGhhbiB0aGUgc291cmNlIGltYWdlIGRpbWVuc2lvbnMsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlCisgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorIHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZworIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZQorIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKSAgVGhpcyBwYXJhbWV0ZXIgaXMKKyBpZ25vcmVkIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBZVVYgaW1hZ2UuPC9kZD48ZGQ+PGNvZGU+cGl0Y2g8L2NvZGU+IC0gYnl0ZXMgcGVyIGxpbmUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiAgTm9ybWFsbHksIHRoaXMKKyBzaG91bGQgYmUgc2V0IHRvIDxjb2RlPnNjYWxlZFdpZHRoICogVEoucGl4ZWxTaXplKHBpeGVsRm9ybWF0KTwvY29kZT4gaWYKKyB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaXMgdW5wYWRkZWQsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvLCBmb3IgaW5zdGFuY2UsCisgcGFkIGVhY2ggbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgdG8gYSA0LWJ5dGUgYm91bmRhcnkgb3IgdG8KKyBkZWNvbXByZXNzL2RlY29kZSB0aGUgc291cmNlIGltYWdlIGludG8gYSByZWdpb24gb2YgYSBsYXJnZXIgaW1hZ2UuICBOT1RFOgorIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBKUEVHIGltYWdlLCB0aGVuIDxjb2RlPnNjYWxlZFdpZHRoPC9jb2RlPiBjYW4gYmUKKyBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+Cisgc2NhbGluZ0ZhY3Rvci48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCNnZXRTY2FsZWQoaW50KSI+PGNvZGU+Z2V0U2NhbGVkPC9jb2RlPjwvYT4oanBlZ1dpZHRoKQorIDwvY29kZT4gb3IgYnkgY2FsbGluZyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFNjYWxlZFdpZHRoKGludCwlMjBpbnQpIj48Y29kZT5nZXRTY2FsZWRXaWR0aChpbnQsIGludCk8L2NvZGU+PC9hPi4gIElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYQorIFlVViBpbWFnZSwgdGhlbiA8Y29kZT5zY2FsZWRXaWR0aDwvY29kZT4gaXMgdGhlIHdpZHRoIG9mIHRoZSBZVVYgaW1hZ2UuCisgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8KKyA8Y29kZT5zY2FsZWRXaWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LjwvZGQ+PGRkPjxjb2RlPmRlc2lyZWRIZWlnaHQ8L2NvZGU+IC0gSWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4gdGhpcworIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50CisgdGhhbiB0aGUgc291cmNlIGltYWdlIGRpbWVuc2lvbnMsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlCisgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorIHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZworIGl0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgaGVpZ2h0IHdpbGwgbm90IGJlCisgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pICBUaGlzIHBhcmFtZXRlciBpcworIGlnbm9yZWQgaWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIFlVViBpbWFnZS48L2RkPjxkZD48Y29kZT5waXhlbEZvcm1hdDwvY29kZT4gLSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZC9kZWNvZGVkIGltYWdlIChvbmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQiI+PGNvZGU+VEouUEZfKjwvY29kZT48L2E+KTwvZGQ+PGRkPjxjb2RlPmZsYWdzPC9jb2RlPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Y29kZT5USi5GTEFHXyo8L2NvZGU+PC9hPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZGVjb21wcmVzczwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMmbmJzcDt2b2lkJm5ic3A7ZGVjb21wcmVzcyhieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+PHNwYW4gY2xhc3M9InN0cm9uZyI+RGVwcmVjYXRlZC48L3NwYW4+Jm5ic3A7PGk+VXNlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJkZWNvbXByZXNzKGludCwgaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZGVjb21wcmVzczwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2J5dGVbXSZuYnNwO2RlY29tcHJlc3MoaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgIGludCZuYnNwO3BpdGNoLAorICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZGVzaXJlZFdpZHRoPC9jb2RlPiAtIHNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPgorIGZvciBkZXNjcmlwdGlvbjwvZGQ+PGRkPjxjb2RlPnBpdGNoPC9jb2RlPiAtIHNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPgorIGZvciBkZXNjcmlwdGlvbjwvZGQ+PGRkPjxjb2RlPmRlc2lyZWRIZWlnaHQ8L2NvZGU+IC0gc2VlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+CisgZm9yIGRlc2NyaXB0aW9uPC9kZD48ZGQ+PGNvZGU+cGl4ZWxGb3JtYXQ8L2NvZGU+IC0gcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgKG9uZSBvZgorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfUkdCIj48Y29kZT5USi5QRl8qPC9jb2RlPjwvYT4pPC9kZD48ZGQ+PGNvZGU+ZmxhZ3M8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxjb2RlPlRKLkZMQUdfKjwvY29kZT48L2E+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5hIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJkZWNvbXByZXNzVG9ZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmRlY29tcHJlc3NUb1lVVjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtkZWNvbXByZXNzVG9ZVVYoPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDtkc3RJbWFnZSwKKyAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4KKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuICBUaGlzIG1ldGhvZCBwZXJmb3JtcyBKUEVHIGRlY29tcHJlc3Npb24KKyBidXQgbGVhdmVzIG91dCB0aGUgY29sb3IgY29udmVyc2lvbiBzdGVwLCBzbyBhIHBsYW5hciBZVVYgaW1hZ2UgaXMKKyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlLiAgVGhpcyBtZXRob2QgY2Fubm90IGJlCisgdXNlZCB0byBkZWNvbXByZXNzIEpQRUcgc291cmNlIGltYWdlcyB3aXRoIHRoZSBDTVlLIG9yIFlDQ0sgY29sb3JzcGFjZS4KKyA8cD4KKyBOT1RFOiBUaGUgWVVWIHBsYW5hciBvdXRwdXQgaW1hZ2UgaXMgZnVsbHkgcmVjb3ZlcmFibGUgaWYgdGhpcyBtZXRob2QKKyB0aHJvd3MgYSBub24tZmF0YWwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkV4Y2VwdGlvbjwvY29kZT48L2E+ICh1bmxlc3MKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfU1RPUE9OV0FSTklORyI+PGNvZGU+VEouRkxBR19TVE9QT05XQVJOSU5HPC9jb2RlPjwvYT4gaXMgc3BlY2lmaWVkLik8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZHN0SW1hZ2U8L2NvZGU+IC0gPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5ZVVZJbWFnZTwvY29kZT48L2E+IGluc3RhbmNlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgcGxhbmFyCisgaW1hZ2UuICBUaGUgbGV2ZWwgb2Ygc3Vic2FtcGxpbmcgc3BlY2lmaWVkIGluIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+CisgaW5zdGFuY2UgbXVzdCBtYXRjaCB0aGF0IG9mIHRoZSBKUEVHIGltYWdlLCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQKKyBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUKKyBzY2FsZWQgaW1hZ2Ugc2l6ZXMgdGhhdCBUdXJib0pQRUcgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGZyb20gdGhlIEpQRUcKKyBzb3VyY2UgaW1hZ2UuPC9kZD48ZGQ+PGNvZGU+ZmxhZ3M8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxjb2RlPlRKLkZMQUdfKjwvY29kZT48L2E+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJkZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5kZWNvbXByZXNzVG9ZVVY8L2g0PgorPHByZT5ARGVwcmVjYXRlZAorcHVibGljJm5ic3A7dm9pZCZuYnNwO2RlY29tcHJlc3NUb1lVVihieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPiZuYnNwOzxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSwlMjBpbnQpIj48Y29kZT5kZWNvbXByZXNzVG9ZVVYoWVVWSW1hZ2UsIGludCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvaT48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZGVjb21wcmVzc1RvWVVWKGludCwgaW50W10sIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZGVjb21wcmVzc1RvWVVWPC9oND4KKzxwcmU+cHVibGljJm5ic3A7PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT4mbmJzcDtkZWNvbXByZXNzVG9ZVVYoaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSZuYnNwO3N0cmlkZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorIGluc3RhbmNlIGludG8gYSBzZXQgb2YgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyBhbmQgcmV0dXJuIGEKKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGltYWdlIHBsYW5lcy4KKyBUaGlzIG1ldGhvZCBwZXJmb3JtcyBKUEVHIGRlY29tcHJlc3Npb24gYnV0IGxlYXZlcyBvdXQgdGhlIGNvbG9yCisgY29udmVyc2lvbiBzdGVwLCBzbyBhIHBsYW5hciBZVVYgaW1hZ2UgaXMgZ2VuZXJhdGVkIGluc3RlYWQgb2YgYW4gUkdCIG9yCisgZ3JheXNjYWxlIGltYWdlLiAgVGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gZGVjb21wcmVzcyBKUEVHIHNvdXJjZQorIGltYWdlcyB3aXRoIHRoZSBDTVlLIG9yIFlDQ0sgY29sb3JzcGFjZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZGVzaXJlZFdpZHRoPC9jb2RlPiAtIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIElmIHRoZQorIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcKKyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcKKyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4KKyB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0bworIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZQorIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTwvZGQ+PGRkPjxjb2RlPnN0cmlkZXM8L2NvZGU+IC0gYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGVhY2ggc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIG91dHB1dCBpbWFnZS4gIFNldHRpbmcgdGhlCisgc3RyaWRlIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBzY2FsZWQKKyBjb21wb25lbnQgd2lkdGggb2YgdGhlIHBsYW5lLiAgSWYgPHR0PnN0cmlkZXM8L3R0PiBpcyBOVUxMLCB0aGVuIHRoZQorIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzY2FsZWQgY29tcG9uZW50Cisgd2lkdGhzLiAgWW91IGNhbiBhZGp1c3QgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gYWRkIGFuIGFyYml0cmFyeSBhbW91bnQgb2YKKyBsaW5lIHBhZGRpbmcgdG8gZWFjaCBwbGFuZS48L2RkPjxkZD48Y29kZT5kZXNpcmVkSGVpZ2h0PC9jb2RlPiAtIGRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UuICBJZiB0aGUKKyBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHCisgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZSBKUEVHCisgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluCisgdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8KKyB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIGhlaWdodCB3aWxsIG5vdCBiZQorIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTwvZGQ+PGRkPjxjb2RlPmZsYWdzPC9jb2RlPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Y29kZT5USi5GTEFHXyo8L2NvZGU+PC9hPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSBZVVYgcGxhbmFyIGltYWdlLjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZGVjb21wcmVzc1RvWVVWKGludCwgaW50LCBpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmRlY29tcHJlc3NUb1lVVjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+WVVWSW1hZ2U8L2E+Jm5ic3A7ZGVjb21wcmVzc1RvWVVWKGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGFkLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBpbnRvIGEgdW5pZmllZCBZVVYgcGxhbmFyIGltYWdlIGJ1ZmZlciBhbmQgcmV0dXJuIGEKKyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGltYWdlLiAgVGhpcworIG1ldGhvZCBwZXJmb3JtcyBKUEVHIGRlY29tcHJlc3Npb24gYnV0IGxlYXZlcyBvdXQgdGhlIGNvbG9yIGNvbnZlcnNpb24KKyBzdGVwLCBzbyBhIHBsYW5hciBZVVYgaW1hZ2UgaXMgZ2VuZXJhdGVkIGluc3RlYWQgb2YgYW4gUkdCIG9yIGdyYXlzY2FsZQorIGltYWdlLiAgVGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gZGVjb21wcmVzcyBKUEVHIHNvdXJjZSBpbWFnZXMgd2l0aAorIHRoZSBDTVlLIG9yIFlDQ0sgY29sb3JzcGFjZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZGVzaXJlZFdpZHRoPC9jb2RlPiAtIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIElmIHRoZQorIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcKKyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcKKyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4KKyB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0bworIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZQorIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTwvZGQ+PGRkPjxjb2RlPnBhZDwvY29kZT4gLSB0aGUgd2lkdGggb2YgZWFjaCBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIFlVViBpbWFnZSB3aWxsIGJlCisgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIChtdXN0IGJlIGEgcG93ZXIgb2YKKyAyLik8L2RkPjxkZD48Y29kZT5kZXNpcmVkSGVpZ2h0PC9jb2RlPiAtIGRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UuICBJZiB0aGUKKyBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHCisgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZSBKUEVHCisgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluCisgdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8KKyB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIGhlaWdodCB3aWxsIG5vdCBiZQorIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTwvZGQ+PGRkPjxjb2RlPmZsYWdzPC9jb2RlPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Y29kZT5USi5GTEFHXyo8L2NvZGU+PC9hPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSBZVVYgcGxhbmFyIGltYWdlLjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZGVjb21wcmVzc1RvWVVWKGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmRlY29tcHJlc3NUb1lVVjwvaDQ+Cis8cHJlPkBEZXByZWNhdGVkCitwdWJsaWMmbmJzcDtieXRlW10mbmJzcDtkZWNvbXByZXNzVG9ZVVYoaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJzdHJvbmciPkRlcHJlY2F0ZWQuPC9zcGFuPiZuYnNwOzxpPlVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3NUb1lVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5kZWNvbXByZXNzVG9ZVVYoaW50LCBpbnQsIGludCwgaW50KTwvY29kZT48L2E+IGluc3RlYWQuPC9pPjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJkZWNvbXByZXNzKGludFtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5kZWNvbXByZXNzPC9oND4KKzxwcmU+cHVibGljJm5ic3A7dm9pZCZuYnNwO2RlY29tcHJlc3MoaW50W10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7c3RyaWRlLAorICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2Ugb3IgZGVjb2RlIHRoZSBZVVYgc291cmNlIGltYWdlIGFzc29jaWF0ZWQKKyB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBvdXRwdXQgYSBncmF5c2NhbGUsIFJHQiwgb3IgQ01ZSyBpbWFnZQorIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuCisgPHA+CisgTk9URTogVGhlIG91dHB1dCBpbWFnZSBpcyBmdWxseSByZWNvdmVyYWJsZSBpZiB0aGlzIG1ldGhvZCB0aHJvd3MgYQorIG5vbi1mYXRhbCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKRXhjZXB0aW9uPC9jb2RlPjwvYT4gKHVubGVzcworIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19TVE9QT05XQVJOSU5HIj48Y29kZT5USi5GTEFHX1NUT1BPTldBUk5JTkc8L2NvZGU+PC9hPiBpcyBzcGVjaWZpZWQuKTwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5kc3RCdWY8L2NvZGU+IC0gYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZS4KKyBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEgSlBFRyBpbWFnZSwgdGhlbiB0aGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUKKyA8Y29kZT5zdHJpZGUgKiBzY2FsZWRIZWlnaHQ8L2NvZGU+IHBpeGVscyBpbiBzaXplLCB3aGVyZQorIDxjb2RlPnNjYWxlZEhlaWdodDwvY29kZT4gY2FuIGJlIGRldGVybWluZWQgYnkgY2FsbGluZyA8Y29kZT4KKyBzY2FsaW5nRmFjdG9yLjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sI2dldFNjYWxlZChpbnQpIj48Y29kZT5nZXRTY2FsZWQ8L2NvZGU+PC9hPihqcGVnSGVpZ2h0KQorIDwvY29kZT4gd2l0aCBvbmUgb2YgdGhlIHNjYWxpbmcgZmFjdG9ycyByZXR1cm5lZCBmcm9tIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0U2NhbGluZ0ZhY3RvcnMoKSI+PGNvZGU+VEouZ2V0U2NhbGluZ0ZhY3RvcnMoKTwvY29kZT48L2E+IG9yIGJ5IGNhbGxpbmcgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRIZWlnaHQoaW50LCUyMGludCkiPjxjb2RlPmdldFNjYWxlZEhlaWdodChpbnQsIGludCk8L2NvZGU+PC9hPi4gIElmIHRoZQorIHNvdXJjZSBpbWFnZSBpcyBhIFlVViBpbWFnZSwgdGhlbiB0aGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUKKyA8Y29kZT5zdHJpZGUgKiBoZWlnaHQ8L2NvZGU+IHBpeGVscyBpbiBzaXplLCB3aGVyZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGlzCisgdGhlIGhlaWdodCBvZiB0aGUgWVVWIGltYWdlLiAgSG93ZXZlciwgdGhlIGJ1ZmZlciBtYXkgYWxzbyBiZSBsYXJnZXIgdGhhbgorIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHIGltYWdlLCBpbiB3aGljaCBjYXNlIHRoZSA8Y29kZT54PC9jb2RlPiwKKyA8Y29kZT55PC9jb2RlPiwgYW5kIDxjb2RlPnN0cmlkZTwvY29kZT4gcGFyYW1ldGVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJlIGRlY29tcHJlc3NlZC48L2RkPjxkZD48Y29kZT54PC9jb2RlPiAtIHggb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlIGludG8KKyB3aGljaCB0aGUgc291cmNlIGltYWdlIHNob3VsZCBiZSBkZWNvbXByZXNzZWQvZGVjb2RlZDwvZGQ+PGRkPjxjb2RlPnk8L2NvZGU+IC0geSBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaW50bworIHdoaWNoIHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJlIGRlY29tcHJlc3NlZC9kZWNvZGVkPC9kZD48ZGQ+PGNvZGU+ZGVzaXJlZFdpZHRoPC9jb2RlPiAtIElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBKUEVHIGltYWdlLCB0aGVuIHRoaXMKKyBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50CisgdGhhbiB0aGUgc291cmNlIGltYWdlIGRpbWVuc2lvbnMsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlCisgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorIHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZworIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZQorIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKSAgVGhpcyBwYXJhbWV0ZXIgaXMKKyBpZ25vcmVkIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBZVVYgaW1hZ2UuPC9kZD48ZGQ+PGNvZGU+c3RyaWRlPC9jb2RlPiAtIHBpeGVscyBwZXIgbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBOb3JtYWxseSwgdGhpcworIHNob3VsZCBiZSBzZXQgdG8gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+LCBidXQgeW91IGNhbiB1c2UgdGhpcyB0bywgZm9yCisgaW5zdGFuY2UsIGRlY29tcHJlc3MgdGhlIEpQRUcgaW1hZ2UgaW50byBhIHJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZS4KKyBOT1RFOiBpZiB0aGUgc291cmNlIGltYWdlIGlzIGEgSlBFRyBpbWFnZSwgdGhlbiA8Y29kZT5zY2FsZWRXaWR0aDwvY29kZT4KKyBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxjb2RlPgorIHNjYWxpbmdGYWN0b3IuPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZ2V0U2NhbGVkKGludCkiPjxjb2RlPmdldFNjYWxlZDwvY29kZT48L2E+KGpwZWdXaWR0aCkKKyA8L2NvZGU+IG9yIGJ5IGNhbGxpbmcgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRXaWR0aChpbnQsJTIwaW50KSI+PGNvZGU+Z2V0U2NhbGVkV2lkdGgoaW50LCBpbnQpPC9jb2RlPjwvYT4uICBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEKKyBZVVYgaW1hZ2UsIHRoZW4gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+IGlzIHRoZSB3aWR0aCBvZiB0aGUgWVVWIGltYWdlLgorIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvCisgPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+LjwvZGQ+PGRkPjxjb2RlPmRlc2lyZWRIZWlnaHQ8L2NvZGU+IC0gSWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4gdGhpcworIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50CisgdGhhbiB0aGUgc291cmNlIGltYWdlIGRpbWVuc2lvbnMsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlCisgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorIHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZworIGl0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgaGVpZ2h0IHdpbGwgbm90IGJlCisgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pICBUaGlzIHBhcmFtZXRlciBpcworIGlnbm9yZWQgaWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIFlVViBpbWFnZS48L2RkPjxkZD48Y29kZT5waXhlbEZvcm1hdDwvY29kZT4gLSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob25lIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0IiPjxjb2RlPlRKLlBGXyo8L2NvZGU+PC9hPik8L2RkPjxkZD48Y29kZT5mbGFnczwvY29kZT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PGNvZGU+VEouRkxBR18qPC9jb2RlPjwvYT48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImRlY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZGVjb21wcmVzczwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtkZWNvbXByZXNzKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UmbmJzcDtkc3RJbWFnZSwKKyAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2Ugb3IgZGVjb2RlIHRoZSBZVVYgc291cmNlIGltYWdlIGFzc29jaWF0ZWQKKyB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBvdXRwdXQgYSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZSB0bworIHRoZSBnaXZlbiA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZS4KKyA8cD4KKyBOT1RFOiBUaGUgb3V0cHV0IGltYWdlIGlzIGZ1bGx5IHJlY292ZXJhYmxlIGlmIHRoaXMgbWV0aG9kIHRocm93cyBhCisgbm9uLWZhdGFsIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEpFeGNlcHRpb248L2NvZGU+PC9hPiAodW5sZXNzCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX1NUT1BPTldBUk5JTkciPjxjb2RlPlRKLkZMQUdfU1RPUE9OV0FSTklORzwvY29kZT48L2E+IGlzIHNwZWNpZmllZC4pPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmRzdEltYWdlPC9jb2RlPiAtIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgdGhhdCB3aWxsIHJlY2VpdmUKKyB0aGUgZGVjb21wcmVzc2VkL2RlY29kZWQgaW1hZ2UuICBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEgSlBFRyBpbWFnZSwgdGhlbgorIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBtdXN0IG1hdGNoCisgb25lIG9mIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZXMgdGhhdCBUdXJib0pQRUcgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGZyb20KKyB0aGUgSlBFRyBpbWFnZS4gIElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBZVVYgaW1hZ2UsIHRoZW4gdGhlIHdpZHRoIGFuZAorIGhlaWdodCBvZiB0aGUgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgbXVzdCBtYXRjaCB0aGUgd2lkdGggYW5kCisgaGVpZ2h0IG9mIHRoZSBZVVYgaW1hZ2UuPC9kZD48ZGQ+PGNvZGU+ZmxhZ3M8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxjb2RlPlRKLkZMQUdfKjwvY29kZT48L2E+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJkZWNvbXByZXNzKGludCwgaW50LCBpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmRlY29tcHJlc3M8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlJm5ic3A7ZGVjb21wcmVzcyhpbnQmbmJzcDtkZXNpcmVkV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2J1ZmZlcmVkSW1hZ2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBvciBkZWNvZGUgdGhlIFlVViBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZAorIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIHJldHVybiBhIDxjb2RlPkJ1ZmZlcmVkSW1hZ2U8L2NvZGU+CisgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkL2RlY29kZWQgaW1hZ2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmRlc2lyZWRXaWR0aDwvY29kZT4gLSBzZWUKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPjxjb2RlPmRlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gZm9yCisgZGVzY3JpcHRpb248L2RkPjxkZD48Y29kZT5kZXNpcmVkSGVpZ2h0PC9jb2RlPiAtIHNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiBmb3IKKyBkZXNjcmlwdGlvbjwvZGQ+PGRkPjxjb2RlPmJ1ZmZlcmVkSW1hZ2VUeXBlPC9jb2RlPiAtIHRoZSBpbWFnZSB0eXBlIG9mIHRoZSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPgorIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIChmb3IgaW5zdGFuY2UsCisgPGNvZGU+QnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I8L2NvZGU+KTwvZGQ+PGRkPjxjb2RlPmZsYWdzPC9jb2RlPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Y29kZT5USi5GTEFHXyo8L2NvZGU+PC9hPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZQorIGRlY29tcHJlc3NlZC9kZWNvZGVkIGltYWdlLjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY2xvc2UoKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Y2xvc2U8L2g0PgorPHByZT5wdWJsaWMmbmJzcDt2b2lkJm5ic3A7Y2xvc2UoKQorICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5GcmVlIHRoZSBuYXRpdmUgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuPC9kaXY+Cis8ZGw+Cis8ZHQ+PHN0cm9uZz5TcGVjaWZpZWQgYnk6PC9zdHJvbmc+PC9kdD4KKzxkZD48Y29kZT5jbG9zZTwvY29kZT4mbmJzcDtpbiBpbnRlcmZhY2UmbmJzcDs8Y29kZT5qYXZhLmlvLkNsb3NlYWJsZTwvY29kZT48L2RkPgorPGR0PjxzdHJvbmc+U3BlY2lmaWVkIGJ5Ojwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PGNvZGU+Y2xvc2U8L2NvZGU+Jm5ic3A7aW4gaW50ZXJmYWNlJm5ic3A7PGNvZGU+amF2YS5sYW5nLkF1dG9DbG9zZWFibGU8L2NvZGU+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJmaW5hbGl6ZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+ZmluYWxpemU8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDt2b2lkJm5ic3A7ZmluYWxpemUoKQorICAgICAgICAgICAgICAgICB0aHJvd3MgamF2YS5sYW5nLlRocm93YWJsZTwvcHJlPgorPGRsPgorPGR0PjxzdHJvbmc+T3ZlcnJpZGVzOjwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PGNvZGU+ZmluYWxpemU8L2NvZGU+Jm5ic3A7aW4gY2xhc3MmbmJzcDs8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPmphdmEubGFuZy5UaHJvd2FibGU8L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImJvdHRvbU5hdiI+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpEZWNvbXByZXNzb3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPk5lc3RlZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9zdW1tYXJ5Ij5GaWVsZDwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2Rfc3VtbWFyeSI+TWV0aG9kPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5EZXRhaWw6Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjZmllbGRfZGV0YWlsIj5GaWVsZDwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDczZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sCkBAIC0wLDAgKzEsMzQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRKRXhjZXB0aW9uPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJUSkV4Y2VwdGlvbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKRXhjZXB0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxkaXY+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPlN1bW1hcnk6Jm5ic3A7PC9saT4KKzxsaT5OZXN0ZWQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT5GaWVsZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2RfZGV0YWlsIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorPGRpdiBjbGFzcz0ic3ViVGl0bGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9kaXY+Cis8aDIgdGl0bGU9IkNsYXNzIFRKRXhjZXB0aW9uIiBjbGFzcz0idGl0bGUiPkNsYXNzIFRKRXhjZXB0aW9uPC9oMj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5qYXZhLmxhbmcuT2JqZWN0PC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPmphdmEubGFuZy5UaHJvd2FibGU8L2xpPgorPGxpPgorPHVsIGNsYXNzPSJpbmhlcml0YW5jZSI+Cis8bGk+amF2YS5sYW5nLkV4Y2VwdGlvbjwvbGk+Cis8bGk+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5qYXZhLmlvLklPRXhjZXB0aW9uPC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKRXhjZXB0aW9uPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxkbD4KKzxkdD5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L2R0PgorPGRkPmphdmEuaW8uU2VyaWFsaXphYmxlPC9kZD4KKzwvZGw+Cis8aHI+Cis8YnI+Cis8cHJlPnB1YmxpYyBjbGFzcyA8c3BhbiBjbGFzcz0ic3Ryb25nIj5USkV4Y2VwdGlvbjwvc3Bhbj4KK2V4dGVuZHMgamF2YS5pby5JT0V4Y2VwdGlvbjwvcHJlPgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vc2VyaWFsaXplZC1mb3JtLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpFeGNlcHRpb24iPlNlcmlhbGl6ZWQgRm9ybTwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDM+Cis8dGFibGUgY2xhc3M9Im92ZXJ2aWV3U3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkNvbnN0cnVjdG9yIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgY29uc3RydWN0b3JzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+Q29uc3RydWN0b3JzPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWJFbmQiPiZuYnNwOzwvc3Bhbj48L2NhcHRpb24+Cis8dHI+Cis8dGggY2xhc3M9ImNvbE9uZSIgc2NvcGU9ImNvbCI+Q29uc3RydWN0b3IgYW5kIERlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oKSI+VEpFeGNlcHRpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+Jm5ic3A7PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZykiPlRKRXhjZXB0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bWVzc2FnZSk8L2NvZGU+Jm5ic3A7PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwjVEpFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywlMjBpbnQpIj5USkV4Y2VwdGlvbjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyZuYnNwO21lc3NhZ2UsCisgICAgICAgICAgIGludCZuYnNwO2NvZGUpPC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sI1RKRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsJTIwamF2YS5sYW5nLlRocm93YWJsZSkiPlRKRXhjZXB0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bWVzc2FnZSwKKyAgICAgICAgICAgamF2YS5sYW5nLlRocm93YWJsZSZuYnNwO2NhdXNlKTwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCNUSkV4Y2VwdGlvbihqYXZhLmxhbmcuVGhyb3dhYmxlKSI+VEpFeGNlcHRpb248L2E+PC9zdHJvbmc+KGphdmEubGFuZy5UaHJvd2FibGUmbmJzcDtjYXVzZSk8L2NvZGU+Jm5ic3A7PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sI2dldEVycm9yQ29kZSgpIj5nZXRFcnJvckNvZGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhIGNvZGUgKG9uZSBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKLkVSUl8qPC9jb2RlPjwvYT4pIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZQorIGxhc3QgZXJyb3IuPC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuVGhyb3dhYmxlIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzJm5ic3A7amF2YS5sYW5nLlRocm93YWJsZTwvaDM+Cis8Y29kZT5hZGRTdXBwcmVzc2VkLCBmaWxsSW5TdGFja1RyYWNlLCBnZXRDYXVzZSwgZ2V0TG9jYWxpemVkTWVzc2FnZSwgZ2V0TWVzc2FnZSwgZ2V0U3RhY2tUcmFjZSwgZ2V0U3VwcHJlc3NlZCwgaW5pdENhdXNlLCBwcmludFN0YWNrVHJhY2UsIHByaW50U3RhY2tUcmFjZSwgcHJpbnRTdGFja1RyYWNlLCBzZXRTdGFja1RyYWNlLCB0b1N0cmluZzwvY29kZT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9oMz4KKzxjb2RlPmNsb25lLCBlcXVhbHMsIGZpbmFsaXplLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB3YWl0LCB3YWl0LCB3YWl0PC9jb2RlPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZGV0YWlscyI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3JfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5Db25zdHJ1Y3RvciBEZXRhaWw8L2gzPgorPGEgbmFtZT0iVEpFeGNlcHRpb24oKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+VEpFeGNlcHRpb248L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSkV4Y2VwdGlvbigpPC9wcmU+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlRKRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkV4Y2VwdGlvbjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlLAorICAgICAgICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlJm5ic3A7Y2F1c2UpPC9wcmU+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IlRKRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkV4Y2VwdGlvbjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlKTwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJUSkV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USkV4Y2VwdGlvbjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlLAorICAgICAgICAgICBpbnQmbmJzcDtjb2RlKTwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJUSkV4Y2VwdGlvbihqYXZhLmxhbmcuVGhyb3dhYmxlKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlRKRXhjZXB0aW9uPC9oND4KKzxwcmU+cHVibGljJm5ic3A7VEpFeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSZuYnNwO2NhdXNlKTwvcHJlPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5NZXRob2QgRGV0YWlsPC9oMz4KKzxhIG5hbWU9ImdldEVycm9yQ29kZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0RXJyb3JDb2RlPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0RXJyb3JDb2RlKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGEgY29kZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEouRVJSXyo8L2NvZGU+PC9hPikgaW5kaWNhdGluZyB0aGUgc2V2ZXJpdHkgb2YgdGhlCisgbGFzdCBlcnJvci48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YSBjb2RlIChvbmUgb2YgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USi5FUlJfKjwvY29kZT48L2E+KSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUKKyBsYXN0IGVycm9yLjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJib3R0b21OYXYiPjxhIG5hbWU9Im5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKRXhjZXB0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxkaXY+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPlN1bW1hcnk6Jm5ic3A7PC9saT4KKzxsaT5OZXN0ZWQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT5GaWVsZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2RfZGV0YWlsIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDZiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbApAQCAtMCwwICsxLDM0MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USlNjYWxpbmdGYWN0b3I8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7CisgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlRKU2NhbGluZ0ZhY3RvciI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKU2NhbGluZ0ZhY3Rvci5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX3RvcCIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8ZGl2PgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+Cis8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2Rfc3VtbWFyeSI+TWV0aG9kPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5EZXRhaWw6Jm5ic3A7PC9saT4KKzxsaT5GaWVsZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX2RldGFpbCI+TWV0aG9kPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgorPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKzxkaXYgY2xhc3M9InN1YlRpdGxlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvZGl2PgorPGgyIHRpdGxlPSJDbGFzcyBUSlNjYWxpbmdGYWN0b3IiIGNsYXNzPSJ0aXRsZSI+Q2xhc3MgVEpTY2FsaW5nRmFjdG9yPC9oMj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5qYXZhLmxhbmcuT2JqZWN0PC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKU2NhbGluZ0ZhY3RvcjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aHI+Cis8YnI+Cis8cHJlPnB1YmxpYyBjbGFzcyA8c3BhbiBjbGFzcz0ic3Ryb25nIj5USlNjYWxpbmdGYWN0b3I8L3NwYW4+CitleHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5GcmFjdGlvbmFsIHNjYWxpbmcgZmFjdG9yPC9kaXY+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDM+Cis8dGFibGUgY2xhc3M9Im92ZXJ2aWV3U3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkNvbnN0cnVjdG9yIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgY29uc3RydWN0b3JzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+Q29uc3RydWN0b3JzPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWJFbmQiPiZuYnNwOzwvc3Bhbj48L2NhcHRpb24+Cis8dHI+Cis8dGggY2xhc3M9ImNvbE9uZSIgc2NvcGU9ImNvbCI+Q29uc3RydWN0b3IgYW5kIERlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sI1RKU2NhbGluZ0ZhY3RvcihpbnQsJTIwaW50KSI+VEpTY2FsaW5nRmFjdG9yPC9hPjwvc3Ryb25nPihpbnQmbmJzcDtudW0sCisgICAgICAgICAgICAgICBpbnQmbmJzcDtkZW5vbSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIHNjYWxpbmcgZmFjdG9yIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ib29sZWFuPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZXF1YWxzKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKU2NhbGluZ0ZhY3RvcikiPmVxdWFsczwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpTY2FsaW5nRmFjdG9yPC9hPiZuYnNwO290aGVyKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRydWUgb3IgZmFsc2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaW5zdGFuY2UgYW5kCisgPGNvZGU+b3RoZXI8L2NvZGU+IGhhdmUgdGhlIHNhbWUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvci48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCNnZXREZW5vbSgpIj5nZXREZW5vbTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGRlbm9taW5hdG9yPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZ2V0TnVtKCkiPmdldE51bTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIG51bWVyYXRvcjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sI2dldFNjYWxlZChpbnQpIj5nZXRTY2FsZWQ8L2E+PC9zdHJvbmc+KGludCZuYnNwO2RpbWVuc2lvbik8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc2NhbGVkIHZhbHVlIG9mIDxjb2RlPmRpbWVuc2lvbjwvY29kZT4uPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sI2lzT25lKCkiPmlzT25lPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBpcyBlcXVhbCB0bworIDEvMS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9oMz4KKzxjb2RlPmNsb25lLCBlcXVhbHMsIGZpbmFsaXplLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvY29kZT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImRldGFpbHMiPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImNvbnN0cnVjdG9yX2RldGFpbCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+Q29uc3RydWN0b3IgRGV0YWlsPC9oMz4KKzxhIG5hbWU9IlRKU2NhbGluZ0ZhY3RvcihpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USlNjYWxpbmdGYWN0b3I8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSlNjYWxpbmdGYWN0b3IoaW50Jm5ic3A7bnVtLAorICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVub20pPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIHNjYWxpbmcgZmFjdG9yIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5udW08L2NvZGU+IC0gbnVtZXJhdG9yPC9kZD48ZGQ+PGNvZGU+ZGVub208L2NvZGU+IC0gZGVub21pbmF0b3I8L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZF9kZXRhaWwiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBEZXRhaWw8L2gzPgorPGEgbmFtZT0iZ2V0TnVtKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldE51bTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2dldE51bSgpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBudW1lcmF0b3I8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+bnVtZXJhdG9yPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXREZW5vbSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXREZW5vbTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludCZuYnNwO2dldERlbm9tKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGRlbm9taW5hdG9yPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmRlbm9taW5hdG9yPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRTY2FsZWQoaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0U2NhbGVkPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0U2NhbGVkKGludCZuYnNwO2RpbWVuc2lvbik8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBzY2FsZWQgdmFsdWUgb2YgPGNvZGU+ZGltZW5zaW9uPC9jb2RlPi4gIFRoaXMgZnVuY3Rpb24KKyBwZXJmb3JtcyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mCisgPGNvZGU+Y2VpbChkaW1lbnNpb24gKiBzY2FsaW5nRmFjdG9yKTwvY29kZT4uPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPmRpbWVuc2lvbjwvY29kZT4gLSB3aWR0aCBvciBoZWlnaHQgdG8gbXVsdGlwbHkgYnkgdGhpcyBzY2FsaW5nIGZhY3RvcjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIHNjYWxlZCB2YWx1ZSBvZiA8Y29kZT5kaW1lbnNpb248L2NvZGU+LjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZXF1YWxzKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKU2NhbGluZ0ZhY3RvcikiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmVxdWFsczwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2Jvb2xlYW4mbmJzcDtlcXVhbHMoPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpTY2FsaW5nRmFjdG9yPC9hPiZuYnNwO290aGVyKTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBhbmQKKyA8Y29kZT5vdGhlcjwvY29kZT4gaGF2ZSB0aGUgc2FtZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5vdGhlcjwvY29kZT4gLSB0aGUgc2NhbGluZyBmYWN0b3IgYWdhaW5zdCB3aGljaCB0byBjb21wYXJlIHRoaXMgb25lPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGluc3RhbmNlIGFuZAorIDxjb2RlPm90aGVyPC9jb2RlPiBoYXZlIHRoZSBzYW1lIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJpc09uZSgpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+aXNPbmU8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtib29sZWFuJm5ic3A7aXNPbmUoKTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBpcyBlcXVhbCB0bworIDEvMS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBpcyBlcXVhbCB0bworIDEvMS48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlByZXYgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSlNjYWxpbmdGYWN0b3IuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPk5lc3RlZCZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+RGV0YWlsOiZuYnNwOzwvbGk+Cis8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjI2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sCkBAIC0wLDAgKzEsNzUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRKVHJhbnNmb3JtPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJUSlRyYW5zZm9ybSI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlByZXYgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpUcmFuc2Zvcm0uaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl90b3AiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl90b3AiKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEIj5OZXN0ZWQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkX3N1bW1hcnkiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5hd3QuUmVjdGFuZ2xlIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9kZXRhaWwiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT5NZXRob2Q8L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+Cis8ZGl2IGNsYXNzPSJzdWJUaXRsZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2Rpdj4KKzxoMiB0aXRsZT0iQ2xhc3MgVEpUcmFuc2Zvcm0iIGNsYXNzPSJ0aXRsZSI+Q2xhc3MgVEpUcmFuc2Zvcm08L2gyPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb250ZW50Q29udGFpbmVyIj4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPmphdmEubGFuZy5PYmplY3Q8L2xpPgorPGxpPgorPHVsIGNsYXNzPSJpbmhlcml0YW5jZSI+Cis8bGk+amF2YS5hd3QuZ2VvbS5SZWN0YW5ndWxhclNoYXBlPC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPmphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQ8L2xpPgorPGxpPgorPHVsIGNsYXNzPSJpbmhlcml0YW5jZSI+Cis8bGk+amF2YS5hd3QuUmVjdGFuZ2xlPC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxkbD4KKzxkdD5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L2R0PgorPGRkPmphdmEuYXd0LlNoYXBlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgamF2YS5sYW5nLkNsb25lYWJsZTwvZGQ+Cis8L2RsPgorPGhyPgorPGJyPgorPHByZT5wdWJsaWMgY2xhc3MgPHNwYW4gY2xhc3M9InN0cm9uZyI+VEpUcmFuc2Zvcm08L3NwYW4+CitleHRlbmRzIGphdmEuYXd0LlJlY3RhbmdsZTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkxvc3NsZXNzIHRyYW5zZm9ybSBwYXJhbWV0ZXJzPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybSI+U2VyaWFsaXplZCBGb3JtPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9oMz4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5OZXN0ZWQgY2xhc3Nlcy9pbnRlcmZhY2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzJm5ic3A7amF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRDwvaDM+Cis8Y29kZT5qYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJELkRvdWJsZSwgamF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRC5GbG9hdDwvY29kZT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkZpZWxkIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJGaWVsZCBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGZpZWxkcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPkZpZWxkczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xGaXJzdCIgc2NvcGU9ImNvbCI+TW9kaWZpZXIgYW5kIFR5cGU8L3RoPgorPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5GaWVsZCBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDdXN0b21GaWx0ZXI8L2E+PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNjZiI+Y2Y8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkN1c3RvbSBmaWx0ZXIgaW5zdGFuY2U8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNOVU1PUCI+TlVNT1A8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoZSBudW1iZXIgb2YgbG9zc2xlc3MgdHJhbnNmb3JtIG9wZXJhdGlvbnM8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI29wIj5vcDwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNmb3JtIG9wZXJhdGlvbiAob25lIG9mIDxjb2RlPk9QXyo8L2NvZGU+KTwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX0hGTElQIj5PUF9IRkxJUDwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RmxpcCAobWlycm9yKSBpbWFnZSBob3Jpem9udGFsbHkuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BfTk9ORSI+T1BfTk9ORTwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RG8gbm90IHRyYW5zZm9ybSB0aGUgcG9zaXRpb24gb2YgdGhlIGltYWdlIHBpeGVscy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9ST1QxODAiPk9QX1JPVDE4MDwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Um90YXRlIGltYWdlIDE4MCBkZWdyZWVzLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1JPVDI3MCI+T1BfUk9UMjcwPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Sb3RhdGUgaW1hZ2UgY291bnRlci1jbG9ja3dpc2UgYnkgOTAgZGVncmVlcy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9ST1Q5MCI+T1BfUk9UOTA8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJvdGF0ZSBpbWFnZSBjbG9ja3dpc2UgYnkgOTAgZGVncmVlcy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUF9UUkFOU1BPU0UiPk9QX1RSQU5TUE9TRTwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0IGF4aXMpLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QX1RSQU5TVkVSU0UiPk9QX1RSQU5TVkVSU0U8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRyYW5zdmVyc2UgdHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciByaWdodCB0byBsb3dlciBsZWZ0CisgYXhpcykuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BfVkZMSVAiPk9QX1ZGTElQPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5GbGlwIChtaXJyb3IpIGltYWdlIHZlcnRpY2FsbHkuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX0NPUFlOT05FIj5PUFRfQ09QWU5PTkU8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjdHJhbnNmb3JtKGJ5dGVbXVtdLCUyMG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sJTIwaW50KSI+PGNvZGU+VEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKTwvY29kZT48L2E+IGZyb20gY29weWluZyBhbnkgZXh0cmEgbWFya2VycyAoaW5jbHVkaW5nIEVYSUYKKyBhbmQgSUNDIHByb2ZpbGUgZGF0YSkgZnJvbSB0aGUgc291cmNlIGltYWdlIHRvIHRoZSBvdXRwdXQgaW1hZ2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX0NST1AiPk9QVF9DUk9QPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBsb3NzbGVzcyBjcm9wcGluZy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfR1JBWSI+T1BUX0dSQVk8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb3B0aW9uIHdpbGwgZGlzY2FyZCB0aGUgY29sb3IgZGF0YSBpbiB0aGUgaW5wdXQgaW1hZ2UgYW5kIHByb2R1Y2UKKyBhIGdyYXlzY2FsZSBvdXRwdXQgaW1hZ2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX05PT1VUUFVUIj5PUFRfTk9PVVRQVVQ8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjdHJhbnNmb3JtKGJ5dGVbXVtdLCUyMG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sJTIwaW50KSI+PGNvZGU+VEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKTwvY29kZT48L2E+IGZyb20gb3V0cHV0dGluZyBhIEpQRUcgaW1hZ2UgZm9yIHRoaXMKKyBwYXJ0aWN1bGFyIHRyYW5zZm9ybS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5zdGF0aWMgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfUEVSRkVDVCI+T1BUX1BFUkZFQ1Q8L2E+PC9zdHJvbmc+PC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPjxjb2RlPlRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCk8L2NvZGU+PC9hPiB0byB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QKKyBwZXJmZWN0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnN0YXRpYyBpbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9QUk9HUkVTU0lWRSI+T1BUX1BST0dSRVNTSVZFPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiB0aGUgb3V0cHV0IGltYWdlCisgZ2VuZXJhdGVkIGJ5IHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0uPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+c3RhdGljIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjT1BUX1RSSU0iPk9QVF9UUklNPC9hPjwvc3Ryb25nPjwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZQorIHRyYW5zZm9ybWVkLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjb3B0aW9ucyI+b3B0aW9uczwvYT48L3N0cm9uZz48L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNmb3JtIG9wdGlvbnMgKGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPGNvZGU+T1BUXyo8L2NvZGU+KTwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5SZWN0YW5nbGUiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyZuYnNwO2phdmEuYXd0LlJlY3RhbmdsZTwvaDM+Cis8Y29kZT5oZWlnaHQsIHdpZHRoLCB4LCB5PC9jb2RlPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEPC9oMz4KKzxjb2RlPk9VVF9CT1RUT00sIE9VVF9MRUZULCBPVVRfUklHSFQsIE9VVF9UT1A8L2NvZGU+PC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iQ29uc3RydWN0b3IgU3VtbWFyeSB0YWJsZSwgbGlzdGluZyBjb25zdHJ1Y3RvcnMsIGFuZCBhbiBleHBsYW5hdGlvbiI+Cis8Y2FwdGlvbj48c3Bhbj5Db25zdHJ1Y3RvcnM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sT25lIiBzY29wZT0iY29sIj5Db25zdHJ1Y3RvciBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNUSlRyYW5zZm9ybSgpIj5USlRyYW5zZm9ybTwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBuZXcgbG9zc2xlc3MgdHJhbnNmb3JtIGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwjVEpUcmFuc2Zvcm0oaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpDdXN0b21GaWx0ZXIpIj5USlRyYW5zZm9ybTwvYT48L3N0cm9uZz4oaW50Jm5ic3A7eCwKKyAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgaW50Jm5ic3A7dywKKyAgICAgICAgICAgaW50Jm5ic3A7aCwKKyAgICAgICAgICAgaW50Jm5ic3A7b3AsCisgICAgICAgICAgIGludCZuYnNwO29wdGlvbnMsCisgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ3VzdG9tRmlsdGVyPC9hPiZuYnNwO2NmKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBuZXcgbG9zc2xlc3MgdHJhbnNmb3JtIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNUSlRyYW5zZm9ybShqYXZhLmF3dC5SZWN0YW5nbGUsJTIwaW50LCUyMGludCwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkN1c3RvbUZpbHRlcikiPlRKVHJhbnNmb3JtPC9hPjwvc3Ryb25nPihqYXZhLmF3dC5SZWN0YW5nbGUmbmJzcDtyLAorICAgICAgICAgICBpbnQmbmJzcDtvcCwKKyAgICAgICAgICAgaW50Jm5ic3A7b3B0aW9ucywKKyAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDdXN0b21GaWx0ZXI8L2E+Jm5ic3A7Y2YpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyBsb3NzbGVzcyB0cmFuc2Zvcm0gaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZF9zdW1tYXJ5Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5NZXRob2QgU3VtbWFyeTwvaDM+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5SZWN0YW5nbGUiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmF3dC5SZWN0YW5nbGU8L2gzPgorPGNvZGU+YWRkLCBhZGQsIGFkZCwgY29udGFpbnMsIGNvbnRhaW5zLCBjb250YWlucywgY29udGFpbnMsIGNyZWF0ZUludGVyc2VjdGlvbiwgY3JlYXRlVW5pb24sIGVxdWFscywgZ2V0Qm91bmRzLCBnZXRCb3VuZHMyRCwgZ2V0SGVpZ2h0LCBnZXRMb2NhdGlvbiwgZ2V0U2l6ZSwgZ2V0V2lkdGgsIGdldFgsIGdldFksIGdyb3csIGluc2lkZSwgaW50ZXJzZWN0aW9uLCBpbnRlcnNlY3RzLCBpc0VtcHR5LCBtb3ZlLCBvdXRjb2RlLCByZXNoYXBlLCByZXNpemUsIHNldEJvdW5kcywgc2V0Qm91bmRzLCBzZXRMb2NhdGlvbiwgc2V0TG9jYXRpb24sIHNldFJlY3QsIHNldFNpemUsIHNldFNpemUsIHRvU3RyaW5nLCB0cmFuc2xhdGUsIHVuaW9uPC9jb2RlPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyZuYnNwO2phdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQ8L2gzPgorPGNvZGU+YWRkLCBhZGQsIGFkZCwgY29udGFpbnMsIGNvbnRhaW5zLCBnZXRQYXRoSXRlcmF0b3IsIGdldFBhdGhJdGVyYXRvciwgaGFzaENvZGUsIGludGVyc2VjdCwgaW50ZXJzZWN0cywgaW50ZXJzZWN0c0xpbmUsIGludGVyc2VjdHNMaW5lLCBvdXRjb2RlLCBzZXRGcmFtZSwgc2V0UmVjdCwgdW5pb248L2NvZGU+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5nZW9tLlJlY3Rhbmd1bGFyU2hhcGUiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmF3dC5nZW9tLlJlY3Rhbmd1bGFyU2hhcGU8L2gzPgorPGNvZGU+Y2xvbmUsIGNvbnRhaW5zLCBjb250YWlucywgZ2V0Q2VudGVyWCwgZ2V0Q2VudGVyWSwgZ2V0RnJhbWUsIGdldE1heFgsIGdldE1heFksIGdldE1pblgsIGdldE1pblksIGludGVyc2VjdHMsIHNldEZyYW1lLCBzZXRGcmFtZSwgc2V0RnJhbWVGcm9tQ2VudGVyLCBzZXRGcmFtZUZyb21DZW50ZXIsIHNldEZyYW1lRnJvbURpYWdvbmFsLCBzZXRGcmFtZUZyb21EaWFnb25hbDwvY29kZT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9oMz4KKzxjb2RlPmZpbmFsaXplLCBnZXRDbGFzcywgbm90aWZ5LCBub3RpZnlBbGwsIHdhaXQsIHdhaXQsIHdhaXQ8L2NvZGU+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5TaGFwZSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2UmbmJzcDtqYXZhLmF3dC5TaGFwZTwvaDM+Cis8Y29kZT5jb250YWlucywgY29udGFpbnMsIGNvbnRhaW5zLCBjb250YWlucywgZ2V0UGF0aEl0ZXJhdG9yLCBnZXRQYXRoSXRlcmF0b3IsIGludGVyc2VjdHMsIGludGVyc2VjdHM8L2NvZGU+PC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJmaWVsZF9kZXRhaWwiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkZpZWxkIERldGFpbDwvaDM+Cis8YSBuYW1lPSJOVU1PUCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+TlVNT1A8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE5VTU9QPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhlIG51bWJlciBvZiBsb3NzbGVzcyB0cmFuc2Zvcm0gb3BlcmF0aW9uczwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uTlVNT1AiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QX05PTkUiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pk9QX05PTkU8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE9QX05PTkU8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5EbyBub3QgdHJhbnNmb3JtIHRoZSBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgcGl4ZWxzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BfTk9ORSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iT1BfSEZMSVAiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pk9QX0hGTElQPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBPUF9IRkxJUDwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkZsaXAgKG1pcnJvcikgaW1hZ2UgaG9yaXpvbnRhbGx5LiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlCisgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9QRVJGRUNUIj48Y29kZT5PUFRfUEVSRkVDVDwvY29kZT48L2E+LCAKKzxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QX0hGTElQIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJPUF9WRkxJUCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+T1BfVkZMSVA8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE9QX1ZGTElQPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+RmxpcCAobWlycm9yKSBpbWFnZSB2ZXJ0aWNhbGx5LiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlIGFyZQorIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIGJvdHRvbSBlZGdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfUEVSRkVDVCI+PGNvZGU+T1BUX1BFUkZFQ1Q8L2NvZGU+PC9hPiwgCis8YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUF9WRkxJUCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iT1BfVFJBTlNQT1NFIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5PUF9UUkFOU1BPU0U8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE9QX1RSQU5TUE9TRTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodCBheGlzKS4gIFRoaXMKKyB0cmFuc2Zvcm0gaXMgYWx3YXlzIHBlcmZlY3QuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9QRVJGRUNUIj48Y29kZT5PUFRfUEVSRkVDVDwvY29kZT48L2E+LCAKKzxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QX1RSQU5TUE9TRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9hPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iT1BfVFJBTlNWRVJTRSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+T1BfVFJBTlNWRVJTRTwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BfVFJBTlNWRVJTRTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRyYW5zdmVyc2UgdHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciByaWdodCB0byBsb3dlciBsZWZ0CisgYXhpcykuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3MgaW4KKyB0aGUgaW1hZ2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9QRVJGRUNUIj48Y29kZT5PUFRfUEVSRkVDVDwvY29kZT48L2E+LCAKKzxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QX1RSQU5TVkVSU0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QX1JPVDkwIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5PUF9ST1Q5MDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BfUk9UOTA8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Sb3RhdGUgaW1hZ2UgY2xvY2t3aXNlIGJ5IDkwIGRlZ3JlZXMuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYKKyB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgYm90dG9tIGVkZ2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sI09QVF9QRVJGRUNUIj48Y29kZT5PUFRfUEVSRkVDVDwvY29kZT48L2E+LCAKKzxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QX1JPVDkwIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJPUF9ST1QxODAiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pk9QX1JPVDE4MDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BfUk9UMTgwPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Um90YXRlIGltYWdlIDE4MCBkZWdyZWVzLiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlIGFyZSBhbnkKKyBwYXJ0aWFsIE1DVSBibG9ja3MgaW4gdGhlIGltYWdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfUEVSRkVDVCI+PGNvZGU+T1BUX1BFUkZFQ1Q8L2NvZGU+PC9hPiwgCis8YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUF9ST1QxODAiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QX1JPVDI3MCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+T1BfUk9UMjcwPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBPUF9ST1QyNzA8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Sb3RhdGUgaW1hZ2UgY291bnRlci1jbG9ja3dpc2UgYnkgOTAgZGVncmVlcy4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdAorIGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIG9uIHRoZSByaWdodCBlZGdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNPUFRfUEVSRkVDVCI+PGNvZGU+T1BUX1BFUkZFQ1Q8L2NvZGU+PC9hPiwgCis8YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUF9ST1QyNzAiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QVF9QRVJGRUNUIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5PUFRfUEVSRkVDVDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BUX1BFUkZFQ1Q8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sJTIwb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm1bXSwlMjBpbnQpIj48Y29kZT5USlRyYW5zZm9ybWVyLnRyYW5zZm9ybSgpPC9jb2RlPjwvYT4gdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90CisgcGVyZmVjdC4gIExvc3NsZXNzIHRyYW5zZm9ybXMgb3BlcmF0ZSBvbiBNQ1UgYmxvY2tzLCB3aG9zZSBzaXplIGRlcGVuZHMgb24KKyB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZC4gIElmIHRoZSBpbWFnZSdzIHdpZHRoIG9yIGhlaWdodAorIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgc2l6ZSAoc2VlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0TUNVV2lkdGgoaW50KSI+PGNvZGU+VEouZ2V0TUNVV2lkdGgoaW50KTwvY29kZT48L2E+CisgYW5kIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0TUNVSGVpZ2h0KGludCkiPjxjb2RlPlRKLmdldE1DVUhlaWdodChpbnQpPC9jb2RlPjwvYT4pLCB0aGVuIHRoZXJlIHdpbGwgYmUgcGFydGlhbCBNQ1UgYmxvY2tzIG9uIHRoZQorIHJpZ2h0IGFuZC9vciBib3R0b20gZWRnZXMuICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIG1vdmUgdGhlc2UgcGFydGlhbCBNQ1UKKyBibG9ja3MgdG8gdGhlIHRvcCBvciBsZWZ0IG9mIHRoZSBpbWFnZSwgc28gYW55IHRyYW5zZm9ybSB0aGF0IHdvdWxkCisgcmVxdWlyZSB0aGF0IGlzICJpbXBlcmZlY3QuIiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlbiBhbnkKKyBwYXJ0aWFsIE1DVSBibG9ja3MgdGhhdCBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgd2lsbCBiZSBsZWZ0IGluIHBsYWNlLCB3aGljaAorIHdpbGwgY3JlYXRlIG9kZC1sb29raW5nIHN0cmlwcyBvbiB0aGUgcmlnaHQgb3IgYm90dG9tIGVkZ2Ugb2YgdGhlIGltYWdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BUX1BFUkZFQ1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QVF9UUklNIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5PUFRfVFJJTTwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BUX1RSSU08L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZQorIHRyYW5zZm9ybWVkLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BUX1RSSU0iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QVF9DUk9QIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5PUFRfQ1JPUDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BUX0NST1A8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBsb3NzbGVzcyBjcm9wcGluZy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QVF9DUk9QIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJPUFRfR1JBWSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+T1BUX0dSQVk8L2g0PgorPHByZT5wdWJsaWMgc3RhdGljIGZpbmFsJm5ic3A7aW50IE9QVF9HUkFZPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBvcHRpb24gd2lsbCBkaXNjYXJkIHRoZSBjb2xvciBkYXRhIGluIHRoZSBpbnB1dCBpbWFnZSBhbmQgcHJvZHVjZQorIGEgZ3JheXNjYWxlIG91dHB1dCBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+U2VlIEFsc286PC9zcGFuPjwvZHQ+PGRkPjxhIGhyZWY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtLk9QVF9HUkFZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJPUFRfTk9PVVRQVVQiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pk9QVF9OT09VVFBVVDwvaDQ+Cis8cHJlPnB1YmxpYyBzdGF0aWMgZmluYWwmbmJzcDtpbnQgT1BUX05PT1VUUFVUPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBvcHRpb24gd2lsbCBwcmV2ZW50IDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sJTIwb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm1bXSwlMjBpbnQpIj48Y29kZT5USlRyYW5zZm9ybWVyLnRyYW5zZm9ybSgpPC9jb2RlPjwvYT4gZnJvbSBvdXRwdXR0aW5nIGEgSlBFRyBpbWFnZSBmb3IgdGhpcworIHBhcnRpY3VsYXIgdHJhbnNmb3JtLiAgVGhpcyBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgY3VzdG9tCisgZmlsdGVyIHRvIGNhcHR1cmUgdGhlIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMgd2l0aG91dCB0cmFuc2NvZGluZworIHRoZW0uPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUFRfTk9PVVRQVVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QVF9QUk9HUkVTU0lWRSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+T1BUX1BST0dSRVNTSVZFPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBPUFRfUFJPR1JFU1NJVkU8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiB0aGUgb3V0cHV0IGltYWdlCisgZ2VuZXJhdGVkIGJ5IHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0uICBQcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyB3aWxsCisgZ2VuZXJhbGx5IGltcHJvdmUgY29tcHJlc3Npb24gcmVsYXRpdmUgdG8gYmFzZWxpbmUgZW50cm9weSBjb2RpbmcgKHRoZQorIGRlZmF1bHQpLCBidXQgaXQgd2lsbCByZWR1Y2UgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UKKyBjb25zaWRlcmFibHkuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlNlZSBBbHNvOjwvc3Bhbj48L2R0PjxkZD48YSBocmVmPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybS5PUFRfUFJPR1JFU1NJVkUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvYT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Ik9QVF9DT1BZTk9ORSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+T1BUX0NPUFlOT05FPC9oND4KKzxwcmU+cHVibGljIHN0YXRpYyBmaW5hbCZuYnNwO2ludCBPUFRfQ09QWU5PTkU8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIG9wdGlvbiB3aWxsIHByZXZlbnQgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPjxjb2RlPlRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCk8L2NvZGU+PC9hPiBmcm9tIGNvcHlpbmcgYW55IGV4dHJhIG1hcmtlcnMgKGluY2x1ZGluZyBFWElGCisgYW5kIElDQyBwcm9maWxlIGRhdGEpIGZyb20gdGhlIHNvdXJjZSBpbWFnZSB0byB0aGUgb3V0cHV0IGltYWdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5TZWUgQWxzbzo8L3NwYW4+PC9kdD48ZGQ+PGEgaHJlZj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm0uT1BUX0NPUFlOT05FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L2E+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJvcCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+b3A8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQgb3A8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UcmFuc2Zvcm0gb3BlcmF0aW9uIChvbmUgb2YgPGNvZGU+T1BfKjwvY29kZT4pPC9kaXY+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Im9wdGlvbnMiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pm9wdGlvbnM8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQgb3B0aW9uczwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRyYW5zZm9ybSBvcHRpb25zIChiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDxjb2RlPk9QVF8qPC9jb2RlPik8L2Rpdj4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iY2YiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5jZjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwOzxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ3VzdG9tRmlsdGVyPC9hPiBjZjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkN1c3RvbSBmaWx0ZXIgaW5zdGFuY2U8L2Rpdj4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3JfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5Db25zdHJ1Y3RvciBEZXRhaWw8L2gzPgorPGEgbmFtZT0iVEpUcmFuc2Zvcm0oKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+VEpUcmFuc2Zvcm08L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSlRyYW5zZm9ybSgpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IGxvc3NsZXNzIHRyYW5zZm9ybSBpbnN0YW5jZS48L2Rpdj4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iVEpUcmFuc2Zvcm0oaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpDdXN0b21GaWx0ZXIpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USlRyYW5zZm9ybTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO1RKVHJhbnNmb3JtKGludCZuYnNwO3gsCisgICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgIGludCZuYnNwO3csCisgICAgICAgICAgIGludCZuYnNwO2gsCisgICAgICAgICAgIGludCZuYnNwO29wLAorICAgICAgICAgICBpbnQmbmJzcDtvcHRpb25zLAorICAgICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkN1c3RvbUZpbHRlcjwvYT4mbmJzcDtjZik8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBuZXcgbG9zc2xlc3MgdHJhbnNmb3JtIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPng8L2NvZGU+IC0gdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFRoaXMgbXVzdCBiZSBldmVubHkKKyBkaXZpc2libGUgYnkgdGhlIE1DVSBibG9jayB3aWR0aCAoc2VlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjZ2V0TUNVV2lkdGgoaW50KSI+PGNvZGU+VEouZ2V0TUNVV2lkdGgoaW50KTwvY29kZT48L2E+KTwvZGQ+PGRkPjxjb2RlPnk8L2NvZGU+IC0gdGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICBUaGlzIG11c3QgYmUgZXZlbmx5CisgZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRNQ1VIZWlnaHQoaW50KSI+PGNvZGU+VEouZ2V0TUNVSGVpZ2h0KGludCk8L2NvZGU+PC9hPik8L2RkPjxkZD48Y29kZT53PC9jb2RlPiAtIHRoZSB3aWR0aCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlCisgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvICh3aWR0aCBvZiB0aGUgc291cmNlIEpQRUcgaW1hZ2UgLQorIDxjb2RlPng8L2NvZGU+KS48L2RkPjxkZD48Y29kZT5oPC9jb2RlPiAtIHRoZSBoZWlnaHQgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byAoaGVpZ2h0IG9mIHRoZSBzb3VyY2UgSlBFRyBpbWFnZSAtCisgPGNvZGU+eTwvY29kZT4pLjwvZGQ+PGRkPjxjb2RlPm9wPC9jb2RlPiAtIG9uZSBvZiB0aGUgdHJhbnNmb3JtIG9wZXJhdGlvbnMgKDxjb2RlPk9QXyo8L2NvZGU+KTwvZGQ+PGRkPjxjb2RlPm9wdGlvbnM8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHRyYW5zZm9ybSBvcHRpb25zCisgKDxjb2RlPk9QVF8qPC9jb2RlPik8L2RkPjxkZD48Y29kZT5jZjwvY29kZT4gLSBhbiBpbnN0YW5jZSBvZiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkN1c3RvbUZpbHRlcjwvY29kZT48L2E+IGludGVyZmFjZSwgb3IgbnVsbCBpZiBubyBjdXN0b20gZmlsdGVyIGlzIG5lZWRlZDwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iVEpUcmFuc2Zvcm0oamF2YS5hd3QuUmVjdGFuZ2xlLCBpbnQsIGludCwgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpDdXN0b21GaWx0ZXIpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+VEpUcmFuc2Zvcm08L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSlRyYW5zZm9ybShqYXZhLmF3dC5SZWN0YW5nbGUmbmJzcDtyLAorICAgICAgICAgICBpbnQmbmJzcDtvcCwKKyAgICAgICAgICAgaW50Jm5ic3A7b3B0aW9ucywKKyAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDdXN0b21GaWx0ZXI8L2E+Jm5ic3A7Y2YpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IGxvc3NsZXNzIHRyYW5zZm9ybSBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5yPC9jb2RlPiAtIGEgPGNvZGU+UmVjdGFuZ2xlPC9jb2RlPiBpbnN0YW5jZSB0aGF0IHNwZWNpZmllcyB0aGUgY3JvcHBpbmcKKyByZWdpb24uICBTZWUgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCNUSlRyYW5zZm9ybShpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkN1c3RvbUZpbHRlcikiPjxjb2RlPlRKVHJhbnNmb3JtKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFRKQ3VzdG9tRmlsdGVyKTwvY29kZT48L2E+IGZvciBtb3JlCisgZGV0YWlsLjwvZGQ+PGRkPjxjb2RlPm9wPC9jb2RlPiAtIG9uZSBvZiB0aGUgdHJhbnNmb3JtIG9wZXJhdGlvbnMgKDxjb2RlPk9QXyo8L2NvZGU+KTwvZGQ+PGRkPjxjb2RlPm9wdGlvbnM8L2NvZGU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHRyYW5zZm9ybSBvcHRpb25zCisgKDxjb2RlPk9QVF8qPC9jb2RlPik8L2RkPjxkZD48Y29kZT5jZjwvY29kZT4gLSBhbiBpbnN0YW5jZSBvZiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkN1c3RvbUZpbHRlcjwvY29kZT48L2E+IGludGVyZmFjZSwgb3IgbnVsbCBpZiBubyBjdXN0b20gZmlsdGVyIGlzIG5lZWRlZDwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJib3R0b21OYXYiPjxhIG5hbWU9Im5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlByZXYgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpUcmFuc2Zvcm0uaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPgorPC91bD4KKzxkaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl9ib3R0b20iKTsKKyAgaWYod2luZG93PT10b3ApIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIC8vLS0+Cis8L3NjcmlwdD4KKzwvZGl2PgorPGRpdj4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+U3VtbWFyeTombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEIj5OZXN0ZWQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkX3N1bW1hcnkiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5hd3QuUmVjdGFuZ2xlIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPkRldGFpbDombmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9kZXRhaWwiPkZpZWxkPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT5NZXRob2Q8L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBmZTMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sCkBAIC0wLDAgKzEsNDIxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRKVHJhbnNmb3JtZXI8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7CisgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlRKVHJhbnNmb3JtZXIiOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKGVycikgeworICAgIH0KKy8vLS0+Cis8L3NjcmlwdD4KKzxub3NjcmlwdD4KKzxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlByZXYgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpUcmFuc2Zvcm1lci5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX3RvcCIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8ZGl2PgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+Cis8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkRlY29tcHJlc3NvciI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+RGV0YWlsOiZuYnNwOzwvbGk+Cis8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4KKzwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+Cis8ZGl2IGNsYXNzPSJzdWJUaXRsZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2Rpdj4KKzxoMiB0aXRsZT0iQ2xhc3MgVEpUcmFuc2Zvcm1lciIgY2xhc3M9InRpdGxlIj5DbGFzcyBUSlRyYW5zZm9ybWVyPC9oMj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5qYXZhLmxhbmcuT2JqZWN0PC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpEZWNvbXByZXNzb3I8L2E+PC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtZXI8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8ZGw+Cis8ZHQ+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9kdD4KKzxkZD5qYXZhLmlvLkNsb3NlYWJsZSwgamF2YS5sYW5nLkF1dG9DbG9zZWFibGU8L2RkPgorPC9kbD4KKzxocj4KKzxicj4KKzxwcmU+cHVibGljIGNsYXNzIDxzcGFuIGNsYXNzPSJzdHJvbmciPlRKVHJhbnNmb3JtZXI8L3NwYW4+CitleHRlbmRzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyPC9kaXY+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3VtbWFyeSI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iZmllbGRfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+RmllbGQgU3VtbWFyeTwvaDM+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKRGVjb21wcmVzc29yIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvaDM+Cis8Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2hhbmRsZSI+aGFuZGxlPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNqcGVnQnVmIj5qcGVnQnVmPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNqcGVnQnVmU2l6ZSI+anBlZ0J1ZlNpemU8L2E+LCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2pwZWdDb2xvcnNwYWNlIj5qcGVnQ29sb3JzcGFjZTwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjanBlZ0hlaWdodCI+anBlZ0hlaWdodDwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjanBlZ1N1YnNhbXAiPmpwZWdTdWJzYW1wPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNqcGVnV2lkdGgiPmpwZWdXaWR0aDwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjeXV2SW1hZ2UiPnl1dkltYWdlPC9hPjwvY29kZT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJDb25zdHJ1Y3RvciBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGNvbnN0cnVjdG9ycywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPkNvbnN0cnVjdG9yczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xPbmUiIHNjb3BlPSJjb2wiPkNvbnN0cnVjdG9yIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjVEpUcmFuc2Zvcm1lcigpIj5USlRyYW5zZm9ybWVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjVEpUcmFuc2Zvcm1lcihieXRlW10pIj5USlRyYW5zZm9ybWVyPC9hPjwvc3Ryb25nPihieXRlW10mbmJzcDtqcGVnSW1hZ2UpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCisgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjVEpUcmFuc2Zvcm1lcihieXRlW10sJTIwaW50KSI+VEpUcmFuc2Zvcm1lcjwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7anBlZ0ltYWdlLAorICAgICAgICAgICAgIGludCZuYnNwO2ltYWdlU2l6ZSk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKKyBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KKyA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2Rfc3VtbWFyeSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJNZXRob2QgU3VtbWFyeSB0YWJsZSwgbGlzdGluZyBtZXRob2RzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+TWV0aG9kczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xGaXJzdCIgc2NvcGU9ImNvbCI+TW9kaWZpZXIgYW5kIFR5cGU8L3RoPgorPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5NZXRob2QgYW5kIERlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludFtdPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI2dldFRyYW5zZm9ybWVkU2l6ZXMoKSI+Z2V0VHJhbnNmb3JtZWRTaXplczwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcworIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQgdHJhbnNmb3JtIG9wZXJhdGlvbi48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwlMjBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCUyMGludCkiPnRyYW5zZm9ybTwvYT48L3N0cm9uZz4oYnl0ZVtdW10mbmJzcDtkc3RCdWZzLAorICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybTwvYT5bXSZuYnNwO3RyYW5zZm9ybXMsCisgICAgICAgICBpbnQmbmJzcDtmbGFncyk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+TG9zc2xlc3NseSB0cmFuc2Zvcm0gdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNmb3JtZXIKKyBpbnN0YW5jZSBpbnRvIG9uZSBvciBtb3JlIEpQRUcgaW1hZ2VzIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gZGVzdGluYXRpb24KKyBidWZmZXJzLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L2E+W108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjdHJhbnNmb3JtKG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sJTIwaW50KSI+dHJhbnNmb3JtPC9hPjwvc3Ryb25nPig8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPltdJm5ic3A7dHJhbnNmb3JtcywKKyAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Mb3NzbGVzc2x5IHRyYW5zZm9ybSB0aGUgSlBFRyBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmFuc2Zvcm1lcgorIGluc3RhbmNlIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkRlY29tcHJlc3NvcjwvY29kZT48L2E+IGluc3RhbmNlcywgZWFjaCBvZgorIHdoaWNoIGhhcyBhIHRyYW5zZm9ybWVkIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIGl0LjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpEZWNvbXByZXNzb3IiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPjwvaDM+Cis8Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2Nsb3NlKCkiPmNsb3NlPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UsJTIwaW50KSI+ZGVjb21wcmVzczwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3M8L2E+LCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPmRlY29tcHJlc3M8L2E+LCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoaW50W10sJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzczwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5kZWNvbXByZXNzPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5kZWNvbXByZXNzPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCUyMGludCkiPmRlY29tcHJlc3NUb1lVVjwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGludCkiPmRlY29tcHJlc3NUb1lVVjwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGludCwlMjBpbnRbXSwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYob3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuWVVWSW1hZ2UsJTIwaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0Q29sb3JzcGFjZSgpIj5nZXRDb2xvcnNwYWNlPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRIZWlnaHQoKSI+Z2V0SGVpZ2h0PC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRKUEVHQnVmKCkiPmdldEpQRUdCdWY8L2E+LCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldEpQRUdTaXplKCkiPmdldEpQRUdTaXplPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRIZWlnaHQoaW50LCUyMGludCkiPmdldFNjYWxlZEhlaWdodDwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkV2lkdGgoaW50LCUyMGludCkiPmdldFNjYWxlZFdpZHRoPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTdWJzYW1wKCkiPmdldFN1YnNhbXA8L2E+LCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFdpZHRoKCkiPmdldFdpZHRoPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNzZXRKUEVHSW1hZ2UoYnl0ZVtdLCUyMGludCkiPnNldEpQRUdJbWFnZTwvYT4sIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCUyMGludCkiPnNldFNvdXJjZUltYWdlPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5ZVVZJbWFnZSkiPnNldFNvdXJjZUltYWdlPC9hPjwvY29kZT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MmbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9oMz4KKzxjb2RlPmNsb25lLCBlcXVhbHMsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9jb2RlPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZGV0YWlscyI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iY29uc3RydWN0b3JfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5Db25zdHJ1Y3RvciBEZXRhaWw8L2gzPgorPGEgbmFtZT0iVEpUcmFuc2Zvcm1lcigpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USlRyYW5zZm9ybWVyPC9oND4KKzxwcmU+cHVibGljJm5ic3A7VEpUcmFuc2Zvcm1lcigpCisgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iVEpUcmFuc2Zvcm1lcihieXRlW10pIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5USlRyYW5zZm9ybWVyPC9oND4KKzxwcmU+cHVibGljJm5ic3A7VEpUcmFuc2Zvcm1lcihieXRlW10mbmJzcDtqcGVnSW1hZ2UpCisgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCisgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+anBlZ0ltYWdlPC9jb2RlPiAtIEpQRUcgaW1hZ2UgYnVmZmVyIChzaXplIG9mIHRoZSBKUEVHIGltYWdlIGlzIGFzc3VtZWQgdG8KKyBiZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4pICBUaGlzIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuPC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+Cis8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L2NvZGU+PC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJUSlRyYW5zZm9ybWVyKGJ5dGVbXSwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PlRKVHJhbnNmb3JtZXI8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtUSlRyYW5zZm9ybWVyKGJ5dGVbXSZuYnNwO2pwZWdJbWFnZSwKKyAgICAgICAgICAgICBpbnQmbmJzcDtpbWFnZVNpemUpCisgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCisgaW1hZ2Ugb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluCisgPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IC0gSlBFRyBpbWFnZSBidWZmZXIuICBUaGlzIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuPC9kZD48ZGQ+PGNvZGU+aW1hZ2VTaXplPC9jb2RlPiAtIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKTwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX2RldGFpbCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kIERldGFpbDwvaDM+Cis8YSBuYW1lPSJ0cmFuc2Zvcm0oYnl0ZVtdW10sIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PnRyYW5zZm9ybTwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDt0cmFuc2Zvcm0oYnl0ZVtdW10mbmJzcDtkc3RCdWZzLAorICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+W10mbmJzcDt0cmFuc2Zvcm1zLAorICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+TG9zc2xlc3NseSB0cmFuc2Zvcm0gdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNmb3JtZXIKKyBpbnN0YW5jZSBpbnRvIG9uZSBvciBtb3JlIEpQRUcgaW1hZ2VzIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gZGVzdGluYXRpb24KKyBidWZmZXJzLiAgTG9zc2xlc3MgdHJhbnNmb3JtcyB3b3JrIGJ5IG1vdmluZyB0aGUgcmF3IGNvZWZmaWNpZW50cyBmcm9tIG9uZQorIEpQRUcgaW1hZ2Ugc3RydWN0dXJlIHRvIGFub3RoZXIgd2l0aG91dCBhbHRlcmluZyB0aGUgdmFsdWVzIG9mIHRoZQorIGNvZWZmaWNpZW50cy4gIFdoaWxlIHRoaXMgaXMgdHlwaWNhbGx5IGZhc3RlciB0aGFuIGRlY29tcHJlc3NpbmcgdGhlCisgaW1hZ2UsIHRyYW5zZm9ybWluZyBpdCwgYW5kIHJlLWNvbXByZXNzaW5nIGl0LCBsb3NzbGVzcyB0cmFuc2Zvcm1zIGFyZSBub3QKKyBmcmVlLiAgRWFjaCBsb3NzbGVzcyB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgcGVyZm9ybWluZyBIdWZmbWFuCisgZGVjb2Rpbmcgb24gYWxsIG9mIHRoZSBjb2VmZmljaWVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSwgcmVnYXJkbGVzcyBvZiB0aGUKKyBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gIFRodXMsIHRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgbWVhbnMgb2YKKyBnZW5lcmF0aW5nIG11bHRpcGxlIHRyYW5zZm9ybWVkIGltYWdlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciBvZiBhcHBseWluZworIG11bHRpcGxlIHRyYW5zZm9ybWF0aW9ucyBzaW11bHRhbmVvdXNseSwgaW4gb3JkZXIgdG8gZWxpbWluYXRlIHRoZSBuZWVkIHRvCisgcmVhZCB0aGUgc291cmNlIGNvZWZmaWNpZW50cyBtdWx0aXBsZSB0aW1lcy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+ZHN0QnVmczwvY29kZT4gLSBhbiBhcnJheSBvZiBpbWFnZSBidWZmZXJzLiAgPGNvZGU+ZHN0YnVmc1tpXTwvY29kZT4gd2lsbAorIHJlY2VpdmUgYSBKUEVHIGltYWdlIHRoYXQgaGFzIGJlZW4gdHJhbnNmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlcnMgaW4KKyA8Y29kZT50cmFuc2Zvcm1zW2ldPC9jb2RlPi4gIFVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemUoaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USi5idWZTaXplKGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gdG8gZGV0ZXJtaW5lIHRoZQorIG1heGltdW0gc2l6ZSBmb3IgZWFjaCBidWZmZXIgYmFzZWQgb24gdGhlIHRyYW5zZm9ybWVkIG9yIGNyb3BwZWQgd2lkdGggYW5kCisgaGVpZ2h0IGFuZCB0aGUgbGV2ZWwgb2Ygc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlLjwvZGQ+PGRkPjxjb2RlPnRyYW5zZm9ybXM8L2NvZGU+IC0gYW4gYXJyYXkgb2YgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USlRyYW5zZm9ybTwvY29kZT48L2E+IGluc3RhbmNlcywgZWFjaCBvZgorIHdoaWNoIHNwZWNpZmllcyB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgYW5kL29yIGNyb3BwaW5nIHJlZ2lvbiBmb3IgdGhlCisgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2U8L2RkPjxkZD48Y29kZT5mbGFnczwvY29kZT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PGNvZGU+VEouRkxBR18qPC9jb2RlPjwvYT48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4KKzxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRXhjZXB0aW9uPC9hPjwvY29kZT48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9InRyYW5zZm9ybShvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCBpbnQpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND50cmFuc2Zvcm08L2g0PgorPHByZT5wdWJsaWMmbmJzcDs8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9hPltdJm5ic3A7dHJhbnNmb3JtKDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm08L2E+W10mbmJzcDt0cmFuc2Zvcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+TG9zc2xlc3NseSB0cmFuc2Zvcm0gdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNmb3JtZXIKKyBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGFycmF5IG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+VEpEZWNvbXByZXNzb3I8L2NvZGU+PC9hPiBpbnN0YW5jZXMsIGVhY2ggb2YKKyB3aGljaCBoYXMgYSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+dHJhbnNmb3JtczwvY29kZT4gLSBhbiBhcnJheSBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPlRKVHJhbnNmb3JtPC9jb2RlPjwvYT4gaW5zdGFuY2VzLCBlYWNoIG9mCisgd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUKKyBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybWVkIG91dHB1dCBpbWFnZTwvZGQ+PGRkPjxjb2RlPmZsYWdzPC9jb2RlPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Y29kZT5USi5GTEFHXyo8L2NvZGU+PC9hPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+YW4gYXJyYXkgb2YgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5USkRlY29tcHJlc3NvcjwvY29kZT48L2E+IGluc3RhbmNlcywgZWFjaCBvZgorIHdoaWNoIGhhcyBhIHRyYW5zZm9ybWVkIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIGl0LjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0PgorPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpFeGNlcHRpb248L2E+PC9jb2RlPjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0VHJhbnNmb3JtZWRTaXplcygpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0VHJhbnNmb3JtZWRTaXplczwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2ludFtdJm5ic3A7Z2V0VHJhbnNmb3JtZWRTaXplcygpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzaXplcyBvZiB0aGUgdHJhbnNmb3JtZWQgSlBFRyBpbWFnZXMKKyBnZW5lcmF0ZWQgYnkgdGhlIG1vc3QgcmVjZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcworIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQgdHJhbnNmb3JtIG9wZXJhdGlvbi48L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlByZXYgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5OZXh0IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpUcmFuc2Zvcm1lci5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8ZGl2PgorPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4KKzxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+Cis8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkRlY29tcHJlc3NvciI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+RGV0YWlsOiZuYnNwOzwvbGk+Cis8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjY29uc3RydWN0b3JfZGV0YWlsIj5Db25zdHI8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGEgbmFtZT0ic2tpcC1uYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48L2Rpdj4KKzwhLS0gPT09PT09PT0gRU5EIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09PSAtLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDg1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sCkBAIC0wLDAgKzEsNzY1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPllVVkltYWdlPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJZVVZJbWFnZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5QcmV2IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPGxpPk5leHQgQ2xhc3M8L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IllVVkltYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxkaXY+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPlN1bW1hcnk6Jm5ic3A7PC9saT4KKzxsaT5OZXN0ZWQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjZmllbGRfc3VtbWFyeSI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+RGV0YWlsOiZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkX2RldGFpbCI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2RfZGV0YWlsIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorPGRpdiBjbGFzcz0ic3ViVGl0bGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9kaXY+Cis8aDIgdGl0bGU9IkNsYXNzIFlVVkltYWdlIiBjbGFzcz0idGl0bGUiPkNsYXNzIFlVVkltYWdlPC9oMj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8dWwgY2xhc3M9ImluaGVyaXRhbmNlIj4KKzxsaT5qYXZhLmxhbmcuT2JqZWN0PC9saT4KKzxsaT4KKzx1bCBjbGFzcz0iaW5oZXJpdGFuY2UiPgorPGxpPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLllVVkltYWdlPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxocj4KKzxicj4KKzxwcmU+cHVibGljIGNsYXNzIDxzcGFuIGNsYXNzPSJzdHJvbmciPllVVkltYWdlPC9zcGFuPgorZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgYSBZVVYgcGxhbmFyIGltYWdlIGFuZCB0aGUgbWV0YWRhdGEKKyBhc3NvY2lhdGVkIHdpdGggaXQuICBUaGUgVHVyYm9KUEVHIEFQSSBhbGxvd3MgYm90aCB0aGUgSlBFRyBjb21wcmVzc2lvbiBhbmQKKyBkZWNvbXByZXNzaW9uIHBpcGVsaW5lcyB0byBiZSBzcGxpdCBpbnRvIHN0YWdlczogIFlVViBlbmNvZGUsIGNvbXByZXNzIGZyb20KKyBZVVYsIGRlY29tcHJlc3MgdG8gWVVWLCBhbmQgWVVWIGRlY29kZS4gIEEgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlCisgc2VydmVzIGFzIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBmb3IgWVVWIGVuY29kZSBhbmQgZGVjb21wcmVzcy10by1ZVVYKKyBvcGVyYXRpb25zIGFuZCBhcyB0aGUgc291cmNlIGltYWdlIGZvciBjb21wcmVzcy1mcm9tLVlVViBhbmQgWVVWIGRlY29kZQorIG9wZXJhdGlvbnMuCisgPHA+CisgVGVjaG5pY2FsbHksIHRoZSBKUEVHIGZvcm1hdCB1c2VzIHRoZSBZQ2JDciBjb2xvcnNwYWNlICh3aGljaCB0ZWNobmljYWxseSBpcworIG5vdCBhICJjb2xvcnNwYWNlIiBidXQgcmF0aGVyIGEgImNvbG9yIHRyYW5zZm9ybSIpLCBidXQgcGVyIHRoZSBjb252ZW50aW9uCisgb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvIHJlZmVyIHRvIGFuCisgaW1hZ2UgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgWSwgQ2IsIGFuZCBDciBpbWFnZSBwbGFuZXMuCisgPHA+CisgRWFjaCBwbGFuZSBpcyBzaW1wbHkgYSAyRCBhcnJheSBvZiBieXRlcywgZWFjaCBieXRlIHJlcHJlc2VudGluZyB0aGUgdmFsdWUKKyBvZiBvbmUgb2YgdGhlIGNvbXBvbmVudHMgKFksIENiLCBvciBDcikgYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uIGluIHRoZQorIGltYWdlLiAgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgZWFjaCBwbGFuZSBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgaW1hZ2UKKyB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgbHVtaW5hbmNlIHBsYW5lCisgd2lkdGggaXMgdGhlIGltYWdlIHdpZHRoIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGUgaG9yaXpvbnRhbAorIHN1YnNhbXBsaW5nIGZhY3RvciAoMiBpbiB0aGUgY2FzZSBvZiA0OjI6MCBhbmQgNDoyOjIsIDQgaW4gdGhlIGNhc2Ugb2YKKyA0OjE6MSwgMSBpbiB0aGUgY2FzZSBvZiA0OjQ6NCBvciBncmF5c2NhbGUuKSAgU2ltaWxhcmx5LCB0aGUgbHVtaW5hbmNlIHBsYW5lCisgaGVpZ2h0IGlzIHRoZSBpbWFnZSBoZWlnaHQgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoZSB2ZXJ0aWNhbAorIHN1YnNhbXBsaW5nIGZhY3RvciAoMiBpbiB0aGUgY2FzZSBvZiA0OjI6MCBvciA0OjQ6MCwgMSBpbiB0aGUgY2FzZSBvZiA0OjQ6NAorIG9yIGdyYXlzY2FsZS4pICBUaGUgY2hyb21pbmFuY2UgcGxhbmUgd2lkdGggaXMgZXF1YWwgdG8gdGhlIGx1bWluYW5jZSBwbGFuZQorIHdpZHRoIGRpdmlkZWQgYnkgdGhlIGhvcml6b250YWwgc3Vic2FtcGxpbmcgZmFjdG9yLCBhbmQgdGhlIGNocm9taW5hbmNlCisgcGxhbmUgaGVpZ2h0IGlzIGVxdWFsIHRvIHRoZSBsdW1pbmFuY2UgcGxhbmUgaGVpZ2h0IGRpdmlkZWQgYnkgdGhlIHZlcnRpY2FsCisgc3Vic2FtcGxpbmcgZmFjdG9yLgorIDxwPgorIEZvciBleGFtcGxlLCBpZiB0aGUgc291cmNlIGltYWdlIGlzIDM1IHggMzUgcGl4ZWxzIGFuZCA0OjI6MiBzdWJzYW1wbGluZyBpcworIHVzZWQsIHRoZW4gdGhlIGx1bWluYW5jZSBwbGFuZSB3b3VsZCBiZSAzNiB4IDM1IGJ5dGVzLCBhbmQgZWFjaCBvZiB0aGUKKyBjaHJvbWluYW5jZSBwbGFuZXMgd291bGQgYmUgMTggeCAzNSBieXRlcy4gIElmIHlvdSBzcGVjaWZ5IGEgbGluZSBwYWRkaW5nIG9mCisgNCBieXRlcyBvbiB0b3Agb2YgdGhpcywgdGhlbiB0aGUgbHVtaW5hbmNlIHBsYW5lIHdvdWxkIGJlIDM2IHggMzUgYnl0ZXMsIGFuZAorIGVhY2ggb2YgdGhlIGNocm9taW5hbmNlIHBsYW5lcyB3b3VsZCBiZSAyMCB4IDM1IGJ5dGVzLjwvZGl2PgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1bW1hcnkiPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImZpZWxkX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPkZpZWxkIFN1bW1hcnk8L2gzPgorPHRhYmxlIGNsYXNzPSJvdmVydmlld1N1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJGaWVsZCBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGZpZWxkcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPkZpZWxkczwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xGaXJzdCIgc2NvcGU9ImNvbCI+TW9kaWZpZXIgYW5kIFR5cGU8L3RoPgorPHRoIGNsYXNzPSJjb2xMYXN0IiBzY29wZT0iY29sIj5GaWVsZCBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIGxvbmc8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI2hhbmRsZSI+aGFuZGxlPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjeXV2SGVpZ2h0Ij55dXZIZWlnaHQ8L2E+PC9zdHJvbmc+PC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5wcm90ZWN0ZWQgaW50W108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI3l1dk9mZnNldHMiPnl1dk9mZnNldHM8L2E+PC9zdHJvbmc+PC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCN5dXZQYWQiPnl1dlBhZDwvYT48L3N0cm9uZz48L2NvZGU+Jm5ic3A7PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnByb3RlY3RlZCBieXRlW11bXTwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjeXV2UGxhbmVzIj55dXZQbGFuZXM8L2E+PC9zdHJvbmc+PC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5wcm90ZWN0ZWQgaW50W108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI3l1dlN0cmlkZXMiPnl1dlN0cmlkZXM8L2E+PC9zdHJvbmc+PC9jb2RlPiZuYnNwOzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCN5dXZTdWJzYW1wIj55dXZTdWJzYW1wPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjeXV2V2lkdGgiPnl1dldpZHRoPC9hPjwvc3Ryb25nPjwvY29kZT4mbmJzcDs8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2xpPgorPC91bD4KKzwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij48YSBuYW1lPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iQ29uc3RydWN0b3IgU3VtbWFyeSB0YWJsZSwgbGlzdGluZyBjb25zdHJ1Y3RvcnMsIGFuZCBhbiBleHBsYW5hdGlvbiI+Cis8Y2FwdGlvbj48c3Bhbj5Db25zdHJ1Y3RvcnM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sT25lIiBzY29wZT0iY29sIj5Db25zdHJ1Y3RvciBhbmQgRGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNZVVZJbWFnZShieXRlW11bXSwlMjBpbnRbXSwlMjBpbnQsJTIwaW50W10sJTIwaW50LCUyMGludCkiPllVVkltYWdlPC9hPjwvc3Ryb25nPihieXRlW11bXSZuYnNwO3BsYW5lcywKKyAgICAgICAgaW50W10mbmJzcDtvZmZzZXRzLAorICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgIGludCZuYnNwO3N1YnNhbXApPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgZnJvbSBhIHNldCBvZiBleGlzdGluZyBpbWFnZQorIHBsYW5lcy48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJyb3dDb2xvciI+Cis8dGQgY2xhc3M9ImNvbE9uZSI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI1lVVkltYWdlKGJ5dGVbXSwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj5ZVVZJbWFnZTwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7eXV2SW1hZ2UsCisgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICBpbnQmbmJzcDtwYWQsCisgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBmcm9tIGFuIGV4aXN0aW5nIHVuaWZpZWQgaW1hZ2UKKyBidWZmZXIuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xPbmUiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNZVVZJbWFnZShpbnQsJTIwaW50W10sJTIwaW50LCUyMGludCkiPllVVkltYWdlPC9hPjwvc3Ryb25nPihpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgIGludCZuYnNwO3N1YnNhbXApPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgYmFja2VkIGJ5IHNlcGFyYXRlIGltYWdlCisgcGxhbmVzLCBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW1hZ2UgcGxhbmVzLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sT25lIj48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjWVVWSW1hZ2UoaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+WVVWSW1hZ2U8L2E+PC9zdHJvbmc+KGludCZuYnNwO3dpZHRoLAorICAgICAgICBpbnQmbmJzcDtwYWQsCisgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBiYWNrZWQgYnkgYSB1bmlmaWVkIGltYWdlCisgYnVmZmVyLCBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW1hZ2UgYnVmZmVyLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4KKzx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4KKzxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ieXRlW108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI2dldEJ1ZigpIj5nZXRCdWY8L2E+PC9zdHJvbmc+KCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgWVVWIGltYWdlIGJ1ZmZlciAoaWYgdGhpcyBpbWFnZSBpcyBzdG9yZWQgaW4gYSB1bmlmaWVkCisgYnVmZmVyIHJhdGhlciB0aGFuIHNlcGFyYXRlIGltYWdlIHBsYW5lcy4pPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRIZWlnaHQoKSI+Z2V0SGVpZ2h0PC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgWVVWIGltYWdlIChvciBzdWJyZWdpb24uKTwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludFtdPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRPZmZzZXRzKCkiPmdldE9mZnNldHM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgb2Zmc2V0cyAoaW4gYnl0ZXMpIG9mIGVhY2ggcGxhbmUgd2l0aGluIHRoZSBwbGFuZXMgb2YgYSBsYXJnZXIKKyBZVVYgaW1hZ2UuPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50PC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNnZXRQYWQoKSI+Z2V0UGFkPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGxpbmUgcGFkZGluZyB1c2VkIGluIHRoZSBZVVYgaW1hZ2UgYnVmZmVyIChpZiB0aGlzIGltYWdlIGlzCisgc3RvcmVkIGluIGEgdW5pZmllZCBidWZmZXIgcmF0aGVyIHRoYW4gc2VwYXJhdGUgaW1hZ2UgcGxhbmVzLik8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5ieXRlW11bXTwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjZ2V0UGxhbmVzKCkiPmdldFBsYW5lczwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBZVVYgaW1hZ2UgcGxhbmVzLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjZ2V0U2l6ZSgpIj5nZXRTaXplPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgWVVWIGltYWdlIGJ1ZmZlciAoaWYgdGhpcyBpbWFnZSBpcworIHN0b3JlZCBpbiBhIHVuaWZpZWQgYnVmZmVyIHJhdGhlciB0aGFuIHNlcGFyYXRlIGltYWdlIHBsYW5lcy4pPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+aW50W108L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI2dldFN0cmlkZXMoKSI+Z2V0U3RyaWRlczwvYT48L3N0cm9uZz4oKTwvY29kZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGxpbmUgb2YgZWFjaCBwbGFuZSBpbiB0aGUgWVVWIGltYWdlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9InJvd0NvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPmludDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjZ2V0U3Vic2FtcCgpIj5nZXRTdWJzYW1wPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIFlVViBpbWFnZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT5pbnQ8L2NvZGU+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sI2dldFdpZHRoKCkiPmdldFdpZHRoPC9hPjwvc3Ryb25nPigpPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBZVVYgaW1hZ2UgKG9yIHN1YnJlZ2lvbi4pPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+dm9pZDwvY29kZT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwjc2V0QnVmKGJ5dGVbXVtdLCUyMGludFtdLCUyMGludCwlMjBpbnRbXSwlMjBpbnQsJTIwaW50KSI+c2V0QnVmPC9hPjwvc3Ryb25nPihieXRlW11bXSZuYnNwO3BsYW5lcywKKyAgICAgIGludFtdJm5ic3A7b2Zmc2V0cywKKyAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L2NvZGU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzaWduIGEgc2V0IG9mIGltYWdlIHBsYW5lcyB0byB0aGlzIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZS48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCNzZXRCdWYoYnl0ZVtdLCUyMGludCwlMjBpbnQsJTIwaW50LCUyMGludCkiPnNldEJ1ZjwvYT48L3N0cm9uZz4oYnl0ZVtdJm5ic3A7eXV2SW1hZ2UsCisgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgIGludCZuYnNwO3BhZCwKKyAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgIGludCZuYnNwO3N1YnNhbXApPC9jb2RlPgorPGRpdiBjbGFzcz0iYmxvY2siPkFzc2lnbiBhIHVuaWZpZWQgaW1hZ2UgYnVmZmVyIHRvIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlLjwvZGl2PgorPC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyZuYnNwO2phdmEubGFuZy5PYmplY3Q8L2gzPgorPGNvZGU+Y2xvbmUsIGVxdWFscywgZmluYWxpemUsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9jb2RlPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZGV0YWlscyI+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0iZmllbGRfZGV0YWlsIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5GaWVsZCBEZXRhaWw8L2gzPgorPGEgbmFtZT0iaGFuZGxlIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5oYW5kbGU8L2g0PgorPHByZT5wcm90ZWN0ZWQmbmJzcDtsb25nIGhhbmRsZTwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ5dXZQbGFuZXMiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pnl1dlBsYW5lczwvaDQ+Cis8cHJlPnByb3RlY3RlZCZuYnNwO2J5dGVbXVtdIHl1dlBsYW5lczwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ5dXZPZmZzZXRzIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND55dXZPZmZzZXRzPC9oND4KKzxwcmU+cHJvdGVjdGVkJm5ic3A7aW50W10geXV2T2Zmc2V0czwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ5dXZTdHJpZGVzIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND55dXZTdHJpZGVzPC9oND4KKzxwcmU+cHJvdGVjdGVkJm5ic3A7aW50W10geXV2U3RyaWRlczwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ5dXZQYWQiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pnl1dlBhZDwvaDQ+Cis8cHJlPnByb3RlY3RlZCZuYnNwO2ludCB5dXZQYWQ8L3ByZT4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ieXV2V2lkdGgiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0Pnl1dldpZHRoPC9oND4KKzxwcmU+cHJvdGVjdGVkJm5ic3A7aW50IHl1dldpZHRoPC9wcmU+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9Inl1dkhlaWdodCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+eXV2SGVpZ2h0PC9oND4KKzxwcmU+cHJvdGVjdGVkJm5ic3A7aW50IHl1dkhlaWdodDwvcHJlPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJ5dXZTdWJzYW1wIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+eXV2U3Vic2FtcDwvaDQ+Cis8cHJlPnByb3RlY3RlZCZuYnNwO2ludCB5dXZTdWJzYW1wPC9wcmU+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9ImNvbnN0cnVjdG9yX2RldGFpbCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+Q29uc3RydWN0b3IgRGV0YWlsPC9oMz4KKzxhIG5hbWU9IllVVkltYWdlKGludCwgaW50W10sIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+WVVWSW1hZ2U8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtZVVZJbWFnZShpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgaW50W10mbmJzcDtzdHJpZGVzLAorICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgIGludCZuYnNwO3N1YnNhbXApPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBiYWNrZWQgYnkgc2VwYXJhdGUgaW1hZ2UKKyBwbGFuZXMsIGFuZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbWFnZSBwbGFuZXMuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPndpZHRoPC9jb2RlPiAtIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5zdHJpZGVzPC9jb2RlPiAtIGFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcworIHBlciBsaW5lIGluIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lIG9mIHRoZSBZVVYgaW1hZ2UuICBTZXR0aW5nIHRoZSBzdHJpZGUKKyBmb3IgYW55IHBsYW5lIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgcGxhbmUgd2lkdGggKHNlZQorIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+YWJvdmU8L2NvZGU+PC9hPi4pICBJZiA8Y29kZT5zdHJpZGVzPC9jb2RlPiBpcyBudWxsLCB0aGVuIHRoZQorIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwbGFuZSB3aWR0aHMuICBXaGVuCisgdXNpbmcgdGhpcyBjb25zdHJ1Y3RvciwgdGhlIHN0cmlkZSBmb3IgZWFjaCBwbGFuZSBtdXN0IGJlIGVxdWFsIHRvIG9yCisgZ3JlYXRlciB0aGFuIHRoZSBwbGFuZSB3aWR0aC48L2RkPjxkZD48Y29kZT5oZWlnaHQ8L2NvZGU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byBiZSB1c2VkIGluIHRoZSBZVVYKKyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDQiPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+KTwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iWVVWSW1hZ2UoaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+WVVWSW1hZ2U8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtZVVZJbWFnZShpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgaW50Jm5ic3A7cGFkLAorICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgIGludCZuYnNwO3N1YnNhbXApPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+Q3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBiYWNrZWQgYnkgYSB1bmlmaWVkIGltYWdlCisgYnVmZmVyLCBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW1hZ2UgYnVmZmVyLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT53aWR0aDwvY29kZT4gLSB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlPC9kZD48ZGQ+PGNvZGU+cGFkPC9jb2RlPiAtIEVhY2ggbGluZSBvZiBlYWNoIHBsYW5lIGluIHRoZSBZVVYgaW1hZ2UgYnVmZmVyIHdpbGwgYmUgcGFkZGVkCisgdG8gdGhpcyBudW1iZXIgb2YgYnl0ZXMgKG11c3QgYmUgYSBwb3dlciBvZiAyLik8L2RkPjxkZD48Y29kZT5oZWlnaHQ8L2NvZGU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byBiZSB1c2VkIGluIHRoZSBZVVYKKyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDQiPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+KTwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iWVVWSW1hZ2UoYnl0ZVtdW10sIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PllVVkltYWdlPC9oND4KKzxwcmU+cHVibGljJm5ic3A7WVVWSW1hZ2UoYnl0ZVtdW10mbmJzcDtwbGFuZXMsCisgICAgICAgIGludFtdJm5ic3A7b2Zmc2V0cywKKyAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgIGludFtdJm5ic3A7c3RyaWRlcywKKyAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICBpbnQmbmJzcDtzdWJzYW1wKTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPkNyZWF0ZSBhIG5ldyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgZnJvbSBhIHNldCBvZiBleGlzdGluZyBpbWFnZQorIHBsYW5lcy48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+cGxhbmVzPC9jb2RlPiAtIGFuIGFycmF5IG9mIGJ1ZmZlcnMgcmVwcmVzZW50aW5nIHRoZSBZLCBVIChDYiksIGFuZCBWIChDcikKKyBpbWFnZSBwbGFuZXMgKG9yIGp1c3QgdGhlIFkgcGxhbmUsIGlmIHRoZSBpbWFnZSBpcyBncmF5c2NhbGUuKSAgIFRoZXNlCisgcGxhbmVzIGNhbiBiZSBjb250aWd1b3VzIG9yIG5vbi1jb250aWd1b3VzIGluIG1lbW9yeS4gIFBsYW5lCisgPGNvZGU+aTwvY29kZT4gc2hvdWxkIGJlIGF0IGxlYXN0IDxjb2RlPm9mZnNldHNbaV0gKworIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjcGxhbmVTaXplWVVWKGludCwlMjBpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USi5wbGFuZVNpemVZVVY8L2NvZGU+PC9hPihpLCB3aWR0aCwgc3RyaWRlc1tpXSwgaGVpZ2h0LCBzdWJzYW1wKTwvY29kZT4KKyBieXRlcyBpbiBzaXplLjwvZGQ+PGRkPjxjb2RlPm9mZnNldHM8L2NvZGU+IC0gSWYgdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgcmVwcmVzZW50cyBhCisgc3VicmVnaW9uIG9mIGEgbGFyZ2VyIGltYWdlLCB0aGVuIDxjb2RlPm9mZnNldHNbaV08L2NvZGU+IHNwZWNpZmllcyB0aGUKKyBvZmZzZXQgKGluIGJ5dGVzKSBvZiB0aGUgc3VicmVnaW9uIHdpdGhpbiBwbGFuZSA8Y29kZT5pPC9jb2RlPiBvZiB0aGUKKyBsYXJnZXIgaW1hZ2UuICBTZXR0aW5nIHRoaXMgdG8gbnVsbCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIHRoZSBvZmZzZXRzIGZvcgorIGFsbCBwbGFuZXMgdG8gMC48L2RkPjxkZD48Y29kZT53aWR0aDwvY29kZT4gLSB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgbmV3IFlVViBpbWFnZSAob3Igc3VicmVnaW9uKTwvZGQ+PGRkPjxjb2RlPnN0cmlkZXM8L2NvZGU+IC0gYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGVhY2ggc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIFlVViBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZQorIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aCAoc2VlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5hYm92ZTwvY29kZT48L2E+LikgIElmIDxjb2RlPnN0cmlkZXM8L2NvZGU+IGlzIG51bGwsIHRoZW4gdGhlCisgc3RyaWRlcyBmb3IgYWxsIHBsYW5lcyB3aWxsIGJlIHNldCB0byB0aGVpciByZXNwZWN0aXZlIHBsYW5lIHdpZHRocy4gIFlvdQorIGNhbiBhZGp1c3QgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gYWRkIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgbGluZSBwYWRkaW5nCisgdG8gZWFjaCBwbGFuZSBvciB0byBzcGVjaWZ5IHRoYXQgdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgaXMgYQorIHN1YnJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZSAoaW4gd2hpY2ggY2FzZSwgPGNvZGU+c3RyaWRlc1tpXTwvY29kZT4gc2hvdWxkCisgYmUgc2V0IHRvIHRoZSBwbGFuZSB3aWR0aCBvZiBwbGFuZSA8Y29kZT5pPC9jb2RlPiBpbiB0aGUgbGFyZ2VyIGltYWdlLik8L2RkPjxkZD48Y29kZT5oZWlnaHQ8L2NvZGU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBuZXcgWVVWIGltYWdlIChvciBzdWJyZWdpb24pPC9kZD48ZGQ+PGNvZGU+c3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWCisgaW1hZ2UgKG9uZSBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQ0Ij48Y29kZT5USi5TQU1QXyo8L2NvZGU+PC9hPik8L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9IllVVkltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PllVVkltYWdlPC9oND4KKzxwcmU+cHVibGljJm5ic3A7WVVWSW1hZ2UoYnl0ZVtdJm5ic3A7eXV2SW1hZ2UsCisgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICBpbnQmbmJzcDtwYWQsCisgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DcmVhdGUgYSBuZXcgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGZyb20gYW4gZXhpc3RpbmcgdW5pZmllZCBpbWFnZQorIGJ1ZmZlci48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+eXV2SW1hZ2U8L2NvZGU+IC0gaW1hZ2UgYnVmZmVyIHRoYXQgY29udGFpbnMgb3Igd2lsbCBjb250YWluIFlVViBwbGFuYXIKKyBpbWFnZSBkYXRhLiAgVXNlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQpIj48Y29kZT5USi5idWZTaXplWVVWKGludCwgaW50LCBpbnQsIGludCk8L2NvZGU+PC9hPiB0byBkZXRlcm1pbmUgdGhlIG1pbmltdW0gc2l6ZSBmb3IKKyB0aGlzIGJ1ZmZlci4gIFRoZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIGFyZSBzdG9yZWQKKyBzZXF1ZW50aWFsbHkgaW4gdGhlIGJ1ZmZlciAoc2VlIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PGNvZGU+YWJvdmU8L2NvZGU+PC9hPiBmb3IgYSBkZXNjcmlwdGlvbgorIG9mIHRoZSBpbWFnZSBmb3JtYXQuKTwvZGQ+PGRkPjxjb2RlPndpZHRoPC9jb2RlPiAtIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5wYWQ8L2NvZGU+IC0gdGhlIGxpbmUgcGFkZGluZyB1c2VkIGluIHRoZSBZVVYgaW1hZ2UgYnVmZmVyLiAgRm9yCisgaW5zdGFuY2UsIGlmIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBidWZmZXIgaXMgcGFkZGVkIHRvIHRoZQorIG5lYXJlc3QgbXVsdGlwbGUgb2YgNCBieXRlcywgdGhlbiA8Y29kZT5wYWQ8L2NvZGU+IHNob3VsZCBiZSBzZXQgdG8gNC48L2RkPjxkZD48Y29kZT5oZWlnaHQ8L2NvZGU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2U8L2RkPjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYKKyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDQiPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+KTwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX2RldGFpbCI+Cis8IS0tICAgLS0+Cis8L2E+Cis8aDM+TWV0aG9kIERldGFpbDwvaDM+Cis8YSBuYW1lPSJzZXRCdWYoYnl0ZVtdW10sIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PnNldEJ1ZjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO3ZvaWQmbmJzcDtzZXRCdWYoYnl0ZVtdW10mbmJzcDtwbGFuZXMsCisgICAgICAgICAgaW50W10mbmJzcDtvZmZzZXRzLAorICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgIGludFtdJm5ic3A7c3RyaWRlcywKKyAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgaW50Jm5ic3A7c3Vic2FtcCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5Bc3NpZ24gYSBzZXQgb2YgaW1hZ2UgcGxhbmVzIHRvIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5wbGFuZXM8L2NvZGU+IC0gYW4gYXJyYXkgb2YgYnVmZmVycyByZXByZXNlbnRpbmcgdGhlIFksIFUgKENiKSwgYW5kIFYgKENyKQorIGltYWdlIHBsYW5lcyAob3IganVzdCB0aGUgWSBwbGFuZSwgaWYgdGhlIGltYWdlIGlzIGdyYXlzY2FsZS4pICBUaGVzZQorIHBsYW5lcyBjYW4gYmUgY29udGlndW91cyBvciBub24tY29udGlndW91cyBpbiBtZW1vcnkuICBQbGFuZQorIDxjb2RlPmk8L2NvZGU+IHNob3VsZCBiZSBhdCBsZWFzdCA8Y29kZT5vZmZzZXRzW2ldICsKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI3BsYW5lU2l6ZVlVVihpbnQsJTIwaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEoucGxhbmVTaXplWVVWPC9jb2RlPjwvYT4oaSwgd2lkdGgsIHN0cmlkZXNbaV0sIGhlaWdodCwgc3Vic2FtcCk8L2NvZGU+CisgYnl0ZXMgaW4gc2l6ZS48L2RkPjxkZD48Y29kZT5vZmZzZXRzPC9jb2RlPiAtIElmIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIHJlcHJlc2VudHMgYQorIHN1YnJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZSwgdGhlbiA8Y29kZT5vZmZzZXRzW2ldPC9jb2RlPiBzcGVjaWZpZXMgdGhlCisgb2Zmc2V0IChpbiBieXRlcykgb2YgdGhlIHN1YnJlZ2lvbiB3aXRoaW4gcGxhbmUgPGNvZGU+aTwvY29kZT4gb2YgdGhlCisgbGFyZ2VyIGltYWdlLiAgU2V0dGluZyB0aGlzIHRvIG51bGwgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyB0aGUgb2Zmc2V0cyBmb3IKKyBhbGwgcGxhbmVzIHRvIDAuPC9kZD48ZGQ+PGNvZGU+d2lkdGg8L2NvZGU+IC0gd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZSAob3Igc3VicmVnaW9uKTwvZGQ+PGRkPjxjb2RlPnN0cmlkZXM8L2NvZGU+IC0gYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGVhY2ggc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIFlVViBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZQorIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aCAoc2VlCisgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Y29kZT5hYm92ZTwvY29kZT48L2E+LikgIElmIDxjb2RlPnN0cmlkZXM8L2NvZGU+IGlzIG51bGwsIHRoZW4gdGhlCisgc3RyaWRlcyBmb3IgYWxsIHBsYW5lcyB3aWxsIGJlIHNldCB0byB0aGVpciByZXNwZWN0aXZlIHBsYW5lIHdpZHRocy4gIFlvdQorIGNhbiBhZGp1c3QgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gYWRkIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgbGluZSBwYWRkaW5nCisgdG8gZWFjaCBwbGFuZSBvciB0byBzcGVjaWZ5IHRoYXQgdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW1hZ2UgaXMgYQorIHN1YnJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZSAoaW4gd2hpY2ggY2FzZSwgPGNvZGU+c3RyaWRlc1tpXTwvY29kZT4gc2hvdWxkCisgYmUgc2V0IHRvIHRoZSBwbGFuZSB3aWR0aCBvZiBwbGFuZSA8Y29kZT5pPC9jb2RlPiBpbiB0aGUgbGFyZ2VyIGltYWdlLik8L2RkPjxkZD48Y29kZT5oZWlnaHQ8L2NvZGU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UgKG9yIHN1YnJlZ2lvbik8L2RkPjxkZD48Y29kZT5zdWJzYW1wPC9jb2RlPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYKKyBpbWFnZSAob25lIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjU0FNUF80NDQiPjxjb2RlPlRKLlNBTVBfKjwvY29kZT48L2E+KTwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0ic2V0QnVmKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+c2V0QnVmPC9oND4KKzxwcmU+cHVibGljJm5ic3A7dm9pZCZuYnNwO3NldEJ1ZihieXRlW10mbmJzcDt5dXZJbWFnZSwKKyAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICBpbnQmbmJzcDtwYWQsCisgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICAgIGludCZuYnNwO3N1YnNhbXApPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+QXNzaWduIGEgdW5pZmllZCBpbWFnZSBidWZmZXIgdG8gdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPnl1dkltYWdlPC9jb2RlPiAtIGltYWdlIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG9yIHdpbGwgY29udGFpbiBZVVYgcGxhbmFyCisgaW1hZ2UgZGF0YS4gIFVzZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemVZVVYoaW50LCUyMGludCwlMjBpbnQsJTIwaW50KSI+PGNvZGU+VEouYnVmU2l6ZVlVVihpbnQsIGludCwgaW50LCBpbnQpPC9jb2RlPjwvYT4gdG8gZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIHNpemUgZm9yCisgdGhpcyBidWZmZXIuICBUaGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyBhcmUgc3RvcmVkCisgc2VxdWVudGlhbGx5IGluIHRoZSBidWZmZXIgKHNlZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxjb2RlPmFib3ZlPC9jb2RlPjwvYT4gZm9yIGEgZGVzY3JpcHRpb24KKyBvZiB0aGUgaW1hZ2UgZm9ybWF0Lik8L2RkPjxkZD48Y29kZT53aWR0aDwvY29kZT4gLSB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlPC9kZD48ZGQ+PGNvZGU+cGFkPC9jb2RlPiAtIHRoZSBsaW5lIHBhZGRpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlIGJ1ZmZlci4gIEZvcgorIGluc3RhbmNlLCBpZiBlYWNoIGxpbmUgaW4gZWFjaCBwbGFuZSBvZiB0aGUgYnVmZmVyIGlzIHBhZGRlZCB0byB0aGUKKyBuZWFyZXN0IG11bHRpcGxlIG9mIDQgYnl0ZXMsIHRoZW4gPGNvZGU+cGFkPC9jb2RlPiBzaG91bGQgYmUgc2V0IHRvIDQuPC9kZD48ZGQ+PGNvZGU+aGVpZ2h0PC9jb2RlPiAtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlPC9kZD48ZGQ+PGNvZGU+c3Vic2FtcDwvY29kZT4gLSB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWCisgaW1hZ2UgKG9uZSBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQ0Ij48Y29kZT5USi5TQU1QXyo8L2NvZGU+PC9hPik8L2RkPjwvZGw+Cis8L2xpPgorPC91bD4KKzxhIG5hbWU9ImdldFdpZHRoKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldFdpZHRoPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0V2lkdGgoKTwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBZVVYgaW1hZ2UgKG9yIHN1YnJlZ2lvbi4pPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSB3aWR0aCBvZiB0aGUgWVVWIGltYWdlIChvciBzdWJyZWdpb24pPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRIZWlnaHQoKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0SGVpZ2h0PC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0SGVpZ2h0KCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIFlVViBpbWFnZSAob3Igc3VicmVnaW9uLik8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGhlaWdodCBvZiB0aGUgWVVWIGltYWdlIChvciBzdWJyZWdpb24pPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRQYWQoKSI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+Z2V0UGFkPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0UGFkKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBsaW5lIHBhZGRpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlIGJ1ZmZlciAoaWYgdGhpcyBpbWFnZSBpcworIHN0b3JlZCBpbiBhIHVuaWZpZWQgYnVmZmVyIHJhdGhlciB0aGFuIHNlcGFyYXRlIGltYWdlIHBsYW5lcy4pPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBsaW5lIHBhZGRpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlIGJ1ZmZlcjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0U3RyaWRlcygpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRTdHJpZGVzPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50W10mbmJzcDtnZXRTdHJpZGVzKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGxpbmUgb2YgZWFjaCBwbGFuZSBpbiB0aGUgWVVWIGltYWdlLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBsaW5lIG9mIGVhY2ggcGxhbmUgaW4gdGhlIFlVViBpbWFnZTwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0T2Zmc2V0cygpIj4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRPZmZzZXRzPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50W10mbmJzcDtnZXRPZmZzZXRzKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBvZmZzZXRzIChpbiBieXRlcykgb2YgZWFjaCBwbGFuZSB3aXRoaW4gdGhlIHBsYW5lcyBvZiBhIGxhcmdlcgorIFlVViBpbWFnZS48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIG9mZnNldHMgKGluIGJ5dGVzKSBvZiBlYWNoIHBsYW5lIHdpdGhpbiB0aGUgcGxhbmVzIG9mIGEgbGFyZ2VyCisgWVVWIGltYWdlPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRTdWJzYW1wKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldFN1YnNhbXA8L2g0PgorPHByZT5wdWJsaWMmbmJzcDtpbnQmbmJzcDtnZXRTdWJzYW1wKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYgaW1hZ2UuICBTZWUKKyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQ0Ij48Y29kZT5USi5TQU1QXyo8L2NvZGU+PC9hPi48L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIFlVViBpbWFnZTwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0UGxhbmVzKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldFBsYW5lczwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2J5dGVbXVtdJm5ic3A7Z2V0UGxhbmVzKCk8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5SZXR1cm5zIHRoZSBZVVYgaW1hZ2UgcGxhbmVzLiAgSWYgdGhlIGltYWdlIGlzIHN0b3JlZCBpbiBhIHVuaWZpZWQgYnVmZmVyLAorIHRoZW4gYWxsIGltYWdlIHBsYW5lcyB3aWxsIHBvaW50IHRvIHRoYXQgYnVmZmVyLjwvZGl2PgorPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD50aGUgWVVWIGltYWdlIHBsYW5lczwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPGEgbmFtZT0iZ2V0QnVmKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGg0PmdldEJ1ZjwvaDQ+Cis8cHJlPnB1YmxpYyZuYnNwO2J5dGVbXSZuYnNwO2dldEJ1ZigpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgWVVWIGltYWdlIGJ1ZmZlciAoaWYgdGhpcyBpbWFnZSBpcyBzdG9yZWQgaW4gYSB1bmlmaWVkCisgYnVmZmVyIHJhdGhlciB0aGFuIHNlcGFyYXRlIGltYWdlIHBsYW5lcy4pPC9kaXY+Cis8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPnRoZSBZVVYgaW1hZ2UgYnVmZmVyPC9kZD48L2RsPgorPC9saT4KKzwvdWw+Cis8YSBuYW1lPSJnZXRTaXplKCkiPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJibG9ja0xpc3RMYXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5nZXRTaXplPC9oND4KKzxwcmU+cHVibGljJm5ic3A7aW50Jm5ic3A7Z2V0U2l6ZSgpPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+UmV0dXJucyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBZVVYgaW1hZ2UgYnVmZmVyIChpZiB0aGlzIGltYWdlIGlzCisgc3RvcmVkIGluIGEgdW5pZmllZCBidWZmZXIgcmF0aGVyIHRoYW4gc2VwYXJhdGUgaW1hZ2UgcGxhbmVzLik8L2Rpdj4KKzxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+dGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgWVVWIGltYWdlIGJ1ZmZlcjwvZGQ+PC9kbD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Cis8IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJib3R0b21OYXYiPjxhIG5hbWU9Im5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGkgY2xhc3M9Im5hdkJhckNlbGwxUmV2Ij5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5QcmV2IENsYXNzPC9zcGFuPjwvYT48L2xpPgorPGxpPk5leHQgQ2xhc3M8L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IllVVkltYWdlLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxkaXY+Cis8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPgorPGxpPlN1bW1hcnk6Jm5ic3A7PC9saT4KKzxsaT5OZXN0ZWQmbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjZmllbGRfc3VtbWFyeSI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNvbnN0cjwvYT4mbmJzcDt8Jm5ic3A7PC9saT4KKzxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+Cis8bGk+RGV0YWlsOiZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkX2RldGFpbCI+RmllbGQ8L2E+Jm5ic3A7fCZuYnNwOzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q29uc3RyPC9hPiZuYnNwO3wmbmJzcDs8L2xpPgorPGxpPjxhIGhyZWY9IiNtZXRob2RfZGV0YWlsIj5NZXRob2Q8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLWZyYW1lLmh0bWwgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhOGJmOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtZnJhbWUuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8aDEgY2xhc3M9ImJhciI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iY2xhc3NGcmFtZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2E+PC9oMT4KKzxkaXYgY2xhc3M9ImluZGV4Q29udGFpbmVyIj4KKzxoMiB0aXRsZT0iSW50ZXJmYWNlcyI+SW50ZXJmYWNlczwvaDI+Cis8dWwgdGl0bGU9IkludGVyZmFjZXMiPgorPGxpPjxhIGhyZWY9IlRKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+PGk+VEpDdXN0b21GaWx0ZXI8L2k+PC9hPjwvbGk+Cis8L3VsPgorPGgyIHRpdGxlPSJDbGFzc2VzIj5DbGFzc2VzPC9oMj4KKzx1bCB0aXRsZT0iQ2xhc3NlcyI+Cis8bGk+PGEgaHJlZj0iVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlRKPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5USkNvbXByZXNzb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+VEpEZWNvbXByZXNzb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlRKU2NhbGluZ0ZhY3RvcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyIgdGFyZ2V0PSJjbGFzc0ZyYW1lIj5USlRyYW5zZm9ybTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIiB0YXJnZXQ9ImNsYXNzRnJhbWUiPlRKVHJhbnNmb3JtZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+WVVWSW1hZ2U8L2E+PC9saT4KKzwvdWw+Cis8aDIgdGl0bGU9IkV4Y2VwdGlvbnMiPkV4Y2VwdGlvbnM8L2gyPgorPHVsIHRpdGxlPSJFeGNlcHRpb25zIj4KKzxsaT48YSBocmVmPSJUSkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciIHRhcmdldD0iY2xhc3NGcmFtZSI+VEpFeGNlcHRpb248L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkY2NlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sCkBAIC0wLDAgKzEsMjAyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzwhLS0gTmV3UGFnZSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGk+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2IFBhY2thZ2U8L2xpPgorPGxpPk5leHQgUGFja2FnZTwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2Utc3VtbWFyeS5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX3RvcCI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX3RvcCIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKzxoMSB0aXRsZT0iUGFja2FnZSIgY2xhc3M9InRpdGxlIj5QYWNrYWdlJm5ic3A7b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2gxPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJjb250ZW50Q29udGFpbmVyIj4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzx0YWJsZSBjbGFzcz0icGFja2FnZVN1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJJbnRlcmZhY2UgU3VtbWFyeSB0YWJsZSwgbGlzdGluZyBpbnRlcmZhY2VzLCBhbmQgYW4gZXhwbGFuYXRpb24iPgorPGNhcHRpb24+PHNwYW4+SW50ZXJmYWNlIFN1bW1hcnk8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4KKzx0cj4KKzx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPkludGVyZmFjZTwvdGg+Cis8dGggY2xhc3M9ImNvbExhc3QiIHNjb3BlPSJjb2wiPkRlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dGJvZHk+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ3VzdG9tRmlsdGVyPC9hPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPgorPGRpdiBjbGFzcz0iYmxvY2siPkN1c3RvbSBmaWx0ZXIgY2FsbGJhY2sgaW50ZXJmYWNlPC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzx0YWJsZSBjbGFzcz0icGFja2FnZVN1bW1hcnkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJDbGFzcyBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGNsYXNzZXMsIGFuZCBhbiBleHBsYW5hdGlvbiI+Cis8Y2FwdGlvbj48c3Bhbj5DbGFzcyBTdW1tYXJ5PC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWJFbmQiPiZuYnNwOzwvc3Bhbj48L2NhcHRpb24+Cis8dHI+Cis8dGggY2xhc3M9ImNvbEZpcnN0IiBzY29wZT0iY29sIj5DbGFzczwvdGg+Cis8dGggY2xhc3M9ImNvbExhc3QiIHNjb3BlPSJjb2wiPkRlc2NyaXB0aW9uPC90aD4KKzwvdHI+Cis8dGJvZHk+Cis8dHIgY2xhc3M9ImFsdENvbG9yIj4KKzx0ZCBjbGFzcz0iY29sRmlyc3QiPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L2E+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHVyYm9KUEVHIHV0aWxpdHkgY2xhc3MgKGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQpPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9hPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPgorPGRpdiBjbGFzcz0iYmxvY2siPlR1cmJvSlBFRyBjb21wcmVzc29yPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvYT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UdXJib0pQRUcgZGVjb21wcmVzc29yPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpTY2FsaW5nRmFjdG9yPC9hPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPgorPGRpdiBjbGFzcz0iYmxvY2siPkZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3I8L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJhbHRDb2xvciI+Cis8dGQgY2xhc3M9ImNvbEZpcnN0Ij48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtPC9hPjwvdGQ+Cis8dGQgY2xhc3M9ImNvbExhc3QiPgorPGRpdiBjbGFzcz0iYmxvY2siPkxvc3NsZXNzIHRyYW5zZm9ybSBwYXJhbWV0ZXJzPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0icm93Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtZXI8L2E+PC90ZD4KKzx0ZCBjbGFzcz0iY29sTGFzdCI+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyPC9kaXY+Cis8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvWVVWSW1hZ2UuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5ZVVZJbWFnZTwvYT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij4KKzxkaXYgY2xhc3M9ImJsb2NrIj5UaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyBhIFlVViBwbGFuYXIgaW1hZ2UgYW5kIHRoZSBtZXRhZGF0YQorIGFzc29jaWF0ZWQgd2l0aCBpdC48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPHRhYmxlIGNsYXNzPSJwYWNrYWdlU3VtbWFyeSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkV4Y2VwdGlvbiBTdW1tYXJ5IHRhYmxlLCBsaXN0aW5nIGV4Y2VwdGlvbnMsIGFuZCBhbiBleHBsYW5hdGlvbiI+Cis8Y2FwdGlvbj48c3Bhbj5FeGNlcHRpb24gU3VtbWFyeTwvc3Bhbj48c3BhbiBjbGFzcz0idGFiRW5kIj4mbmJzcDs8L3NwYW4+PC9jYXB0aW9uPgorPHRyPgorPHRoIGNsYXNzPSJjb2xGaXJzdCIgc2NvcGU9ImNvbCI+RXhjZXB0aW9uPC90aD4KKzx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+RGVzY3JpcHRpb248L3RoPgorPC90cj4KKzx0Ym9keT4KKzx0ciBjbGFzcz0iYWx0Q29sb3IiPgorPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkV4Y2VwdGlvbjwvYT48L3RkPgorPHRkIGNsYXNzPSJjb2xMYXN0Ij4mbmJzcDs8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KKzxkaXYgY2xhc3M9ImJvdHRvbU5hdiI+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PGEgaHJlZj0iI3NraXAtbmF2YmFyX2JvdHRvbSIgdGl0bGU9IlNraXAgbmF2aWdhdGlvbiBsaW5rcyI+PC9hPjxhIG5hbWU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPgorPCEtLSAgIC0tPgorPC9hPgorPHVsIGNsYXNzPSJuYXZMaXN0IiB0aXRsZT0iTmF2aWdhdGlvbiI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4KKzxsaT5DbGFzczwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InN1Yk5hdiI+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPlByZXYgUGFja2FnZTwvbGk+Cis8bGk+TmV4dCBQYWNrYWdlPC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGY4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbApAQCAtMCwwICsxLDE2MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyBDbGFzcyBIaWVyYXJjaHk8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7CisgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIENsYXNzIEhpZXJhcmNoeSI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGk+Q2xhc3M8L2xpPgorPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+VHJlZTwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2PC9saT4KKzxsaT5OZXh0PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorPGgxIGNsYXNzPSJ0aXRsZSI+SGllcmFyY2h5IEZvciBQYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnPC9oMT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8aDIgdGl0bGU9IkNsYXNzIEhpZXJhcmNoeSI+Q2xhc3MgSGllcmFyY2h5PC9oMj4KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEubGFuZy5PYmplY3QKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuYXd0Lmdlb20uUmVjdGFuZ3VsYXJTaGFwZSAoaW1wbGVtZW50cyBqYXZhLmxhbmcuQ2xvbmVhYmxlLCBqYXZhLmF3dC5TaGFwZSkKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuYXd0LlJlY3RhbmdsZSAoaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgamF2YS5hd3QuU2hhcGUpCis8dWw+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKVHJhbnNmb3JtPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPGxpIHR5cGU9ImNpcmNsZSI+amF2YS5sYW5nLlRocm93YWJsZSAoaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEubGFuZy5FeGNlcHRpb24KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuaW8uSU9FeGNlcHRpb24KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpFeGNlcHRpb248L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKPC9zcGFuPjwvYT48L2xpPgorPGxpIHR5cGU9ImNpcmNsZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpDb21wcmVzc29yPC9zcGFuPjwvYT4gKGltcGxlbWVudHMgamF2YS5pby5DbG9zZWFibGUpPC9saT4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpEZWNvbXByZXNzb3I8L3NwYW4+PC9hPiAoaW1wbGVtZW50cyBqYXZhLmlvLkNsb3NlYWJsZSkKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USlRyYW5zZm9ybWVyPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USlNjYWxpbmdGYWN0b3I8L3NwYW4+PC9hPjwvbGk+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPllVVkltYWdlPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPGgyIHRpdGxlPSJJbnRlcmZhY2UgSGllcmFyY2h5Ij5JbnRlcmZhY2UgSGllcmFyY2h5PC9oMj4KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKQ3VzdG9tRmlsdGVyPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpPkNsYXNzPC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPlRyZWU8L2xpPgorPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InBhY2thZ2UtdHJlZS5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+Cis8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvb3ZlcnZpZXctdHJlZS5odG1sIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvb3ZlcnZpZXctdHJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTk5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9vdmVydmlldy10cmVlLmh0bWwKQEAgLTAsMCArMSwxNjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPCEtLSBOZXdQYWdlIC0tPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q2xhc3MgSGllcmFyY2h5PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InN0eWxlc2hlZXQuY3NzIiB0aXRsZT0iU3R5bGUiPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorICAgIHRyeSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgeworICAgICAgICAgICAgcGFyZW50LmRvY3VtZW50LnRpdGxlPSJDbGFzcyBIaWVyYXJjaHkiOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKGVycikgeworICAgIH0KKy8vLS0+Cis8L3NjcmlwdD4KKzxub3NjcmlwdD4KKzxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+Cis8L25vc2NyaXB0PgorPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPgorPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpPkNsYXNzPC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPlRyZWU8L2xpPgorPGxpPjxhIGhyZWY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sP292ZXJ2aWV3LXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvdmVydmlldy10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKzxsaT48YSBocmVmPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorPGgxIGNsYXNzPSJ0aXRsZSI+SGllcmFyY2h5IEZvciBBbGwgUGFja2FnZXM8L2gxPgorPHNwYW4gY2xhc3M9InN0cm9uZyI+UGFja2FnZSBIaWVyYXJjaGllczo8L3NwYW4+Cis8dWwgY2xhc3M9Imhvcml6b250YWwiPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29udGVudENvbnRhaW5lciI+Cis8aDIgdGl0bGU9IkNsYXNzIEhpZXJhcmNoeSI+Q2xhc3MgSGllcmFyY2h5PC9oMj4KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEubGFuZy5PYmplY3QKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuYXd0Lmdlb20uUmVjdGFuZ3VsYXJTaGFwZSAoaW1wbGVtZW50cyBqYXZhLmxhbmcuQ2xvbmVhYmxlLCBqYXZhLmF3dC5TaGFwZSkKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuYXd0LlJlY3RhbmdsZSAoaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSwgamF2YS5hd3QuU2hhcGUpCis8dWw+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKVHJhbnNmb3JtPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPGxpIHR5cGU9ImNpcmNsZSI+amF2YS5sYW5nLlRocm93YWJsZSAoaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSkKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEubGFuZy5FeGNlcHRpb24KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPmphdmEuaW8uSU9FeGNlcHRpb24KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpFeGNlcHRpb248L3NwYW4+PC9hPjwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKPC9zcGFuPjwvYT48L2xpPgorPGxpIHR5cGU9ImNpcmNsZSI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPGEgaHJlZj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpDb21wcmVzc29yPC9zcGFuPjwvYT4gKGltcGxlbWVudHMgamF2YS5pby5DbG9zZWFibGUpPC9saT4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PHNwYW4gY2xhc3M9InN0cm9uZyI+VEpEZWNvbXByZXNzb3I8L3NwYW4+PC9hPiAoaW1wbGVtZW50cyBqYXZhLmlvLkNsb3NlYWJsZSkKKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USlRyYW5zZm9ybWVyPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48c3BhbiBjbGFzcz0ic3Ryb25nIj5USlNjYWxpbmdGYWN0b3I8L3NwYW4+PC9hPjwvbGk+Cis8bGkgdHlwZT0iY2lyY2xlIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPllVVkltYWdlPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPGgyIHRpdGxlPSJJbnRlcmZhY2UgSGllcmFyY2h5Ij5JbnRlcmZhY2UgSGllcmFyY2h5PC9oMj4KKzx1bD4KKzxsaSB0eXBlPSJjaXJjbGUiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxzcGFuIGNsYXNzPSJzdHJvbmciPlRKQ3VzdG9tRmlsdGVyPC9zcGFuPjwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpPkNsYXNzPC9saT4KKzxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPlRyZWU8L2xpPgorPGxpPjxhIGhyZWY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sP292ZXJ2aWV3LXRyZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvdmVydmlldy10cmVlLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIj4KKzxsaT48YSBocmVmPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfYm90dG9tIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX2JvdHRvbSI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9wYWNrYWdlLWxpc3QgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9wYWNrYWdlLWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4ZDkzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL3BhY2thZ2UtbGlzdApAQCAtMCwwICsxIEBACitvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL2JhY2tncm91bmQuZ2lmIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL2JhY2tncm91bmQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzE5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9yZXNvdXJjZXMvYmFja2dyb3VuZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL3RhYi5naWYgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9yZXNvdXJjZXMvdGFiLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTczYTgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL3RhYi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL3RpdGxlYmFyLmdpZiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL3Jlc291cmNlcy90aXRsZWJhci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0NDNiMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL3Jlc291cmNlcy90aXRsZWJhci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL3RpdGxlYmFyX2VuZC5naWYgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9yZXNvdXJjZXMvdGl0bGViYXJfZW5kLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ3OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2MvcmVzb3VyY2VzL3RpdGxlYmFyX2VuZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvc2NyaXB0LmpzIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvc2NyaXB0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDYzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9zY3JpcHQuanMKQEAgLTAsMCArMSwzMCBAQAorZnVuY3Rpb24gc2hvdyh0eXBlKQoreworICAgIGNvdW50ID0gMDsKKyAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykgeworICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5KTsKKyAgICAgICAgaWYgKChtZXRob2RzW2tleV0gJiAgdHlwZSkgIT0gMCkgeworICAgICAgICAgICAgcm93LnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICAgICAgICAgIHJvdy5jbGFzc05hbWUgPSAoY291bnQrKyAlIDIpID8gcm93Q29sb3IgOiBhbHRDb2xvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB9CisgICAgdXBkYXRlVGFicyh0eXBlKTsKK30KKworZnVuY3Rpb24gdXBkYXRlVGFicyh0eXBlKQoreworICAgIGZvciAodmFyIHZhbHVlIGluIHRhYnMpIHsKKyAgICAgICAgdmFyIHNOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFic1t2YWx1ZV1bMF0pOworICAgICAgICB2YXIgc3Bhbk5vZGUgPSBzTm9kZS5maXJzdENoaWxkOworICAgICAgICBpZiAodmFsdWUgPT0gdHlwZSkgeworICAgICAgICAgICAgc05vZGUuY2xhc3NOYW1lID0gYWN0aXZlVGFibGVUYWI7CisgICAgICAgICAgICBzcGFuTm9kZS5pbm5lckhUTUwgPSB0YWJzW3ZhbHVlXVsxXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNOb2RlLmNsYXNzTmFtZSA9IHRhYmxlVGFiOworICAgICAgICAgICAgc3Bhbk5vZGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3coIisgdmFsdWUgKyAiKTtcIj4iICsgdGFic1t2YWx1ZV1bMV0gKyAiPC9hPiI7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9zZXJpYWxpemVkLWZvcm0uaHRtbCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvZG9jL3NlcmlhbGl6ZWQtZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmJjODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9zZXJpYWxpemVkLWZvcm0uaHRtbApAQCAtMCwwICsxLDE3NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8IS0tIE5ld1BhZ2UgLS0+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TZXJpYWxpemVkIEZvcm08L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic3R5bGVzaGVldC5jc3MiIHRpdGxlPSJTdHlsZSI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7CisgICAgICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNlcmlhbGl6ZWQgRm9ybSI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goZXJyKSB7CisgICAgfQorLy8tLT4KKzwvc2NyaXB0PgorPG5vc2NyaXB0PgorPGRpdj5KYXZhU2NyaXB0IGlzIGRpc2FibGVkIG9uIHlvdXIgYnJvd3Nlci48L2Rpdj4KKzwvbm9zY3JpcHQ+Cis8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJ0b3BOYXYiPjxhIG5hbWU9Im5hdmJhcl90b3AiPgorPCEtLSAgIC0tPgorPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl90b3AiIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij4KKzwhLS0gICAtLT4KKzwvYT4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5QYWNrYWdlPC9hPjwvbGk+Cis8bGk+Q2xhc3M8L2xpPgorPGxpPjxhIGhyZWY9Im9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sIj5UcmVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPkRlcHJlY2F0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC1hbGwuaHRtbCI+SW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJoZWxwLWRvYy5odG1sIj5IZWxwPC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzdWJOYXYiPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT5QcmV2PC9saT4KKzxsaT5OZXh0PC9saT4KKzwvdWw+Cis8dWwgY2xhc3M9Im5hdkxpc3QiPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWw/c2VyaWFsaXplZC1mb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2VyaWFsaXplZC1mb3JtLmh0bWwiIHRhcmdldD0iX3RvcCI+Tm8gRnJhbWVzPC9hPjwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0IiBpZD0iYWxsY2xhc3Nlc19uYXZiYXJfdG9wIj4KKzxsaT48YSBocmVmPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+QWxsIENsYXNzZXM8L2E+PC9saT4KKzwvdWw+Cis8ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KKyAgYWxsQ2xhc3Nlc0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsY2xhc3Nlc19uYXZiYXJfdG9wIik7CisgIGlmKHdpbmRvdz09dG9wKSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIH0KKyAgZWxzZSB7CisgICAgYWxsQ2xhc3Nlc0xpbmsuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgfQorICAvLy0tPgorPC9zY3JpcHQ+Cis8L2Rpdj4KKzxhIG5hbWU9InNraXAtbmF2YmFyX3RvcCI+Cis8IS0tICAgLS0+Cis8L2E+PC9kaXY+Cis8IS0tID09PT09PT09PSBFTkQgT0YgVE9QIE5BVkJBUiA9PT09PT09PT0gLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorPGgxIHRpdGxlPSJTZXJpYWxpemVkIEZvcm0iIGNsYXNzPSJ0aXRsZSI+U2VyaWFsaXplZCBGb3JtPC9oMT4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VyaWFsaXplZEZvcm1Db250YWluZXIiPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPgorPGgyIHRpdGxlPSJQYWNrYWdlIj5QYWNrYWdlJm5ic3A7b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L2gyPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKRXhjZXB0aW9uIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5DbGFzcyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKRXhjZXB0aW9uPC9hPiBleHRlbmRzIGphdmEuaW8uSU9FeGNlcHRpb24gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L2gzPgorPGRsIGNsYXNzPSJuYW1lVmFsdWUiPgorPGR0PnNlcmlhbFZlcnNpb25VSUQ6PC9kdD4KKzxkZD4xTDwvZGQ+Cis8L2RsPgorPHVsIGNsYXNzPSJibG9ja0xpc3QiPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9InNlcmlhbGl6ZWRGb3JtIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5TZXJpYWxpemVkIEZpZWxkczwvaDM+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdExhc3QiPgorPGg0PmVycm9yQ29kZTwvaDQ+Cis8cHJlPmludCBlcnJvckNvZGU8L3ByZT4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtIj4KKzwhLS0gICAtLT4KKzwvYT4KKzxoMz5DbGFzcyA8YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtPC9hPiBleHRlbmRzIGphdmEuYXd0LlJlY3RhbmdsZSBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZTwvaDM+Cis8ZGwgY2xhc3M9Im5hbWVWYWx1ZSI+Cis8ZHQ+c2VyaWFsVmVyc2lvblVJRDo8L2R0PgorPGRkPi0xMjczNjc3MDU3NjE0MzAzNzFMPC9kZD4KKzwvZGw+Cis8dWwgY2xhc3M9ImJsb2NrTGlzdCI+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ic2VyaWFsaXplZEZvcm0iPgorPCEtLSAgIC0tPgorPC9hPgorPGgzPlNlcmlhbGl6ZWQgRmllbGRzPC9oMz4KKzx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4KKzxoND5vcDwvaDQ+Cis8cHJlPmludCBvcDwvcHJlPgorPGRpdiBjbGFzcz0iYmxvY2siPlRyYW5zZm9ybSBvcGVyYXRpb24gKG9uZSBvZiA8Y29kZT5PUF8qPC9jb2RlPik8L2Rpdj4KKzwvbGk+Cis8bGkgY2xhc3M9ImJsb2NrTGlzdCI+Cis8aDQ+b3B0aW9uczwvaDQ+Cis8cHJlPmludCBvcHRpb25zPC9wcmU+Cis8ZGl2IGNsYXNzPSJibG9jayI+VHJhbnNmb3JtIG9wdGlvbnMgKGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPGNvZGU+T1BUXyo8L2NvZGU+KTwvZGl2PgorPC9saT4KKzxsaSBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+Cis8aDQ+Y2Y8L2g0PgorPHByZT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkN1c3RvbUZpbHRlcjwvYT4gY2Y8L3ByZT4KKzxkaXYgY2xhc3M9ImJsb2NrIj5DdXN0b20gZmlsdGVyIGluc3RhbmNlPC9kaXY+Cis8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPCEtLSA9PT09PT09IFNUQVJUIE9GIEJPVFRPTSBOQVZCQVIgPT09PT09IC0tPgorPGRpdiBjbGFzcz0iYm90dG9tTmF2Ij48YSBuYW1lPSJuYXZiYXJfYm90dG9tIj4KKzwhLS0gICAtLT4KKzwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+Cis8IS0tICAgLS0+Cis8L2E+Cis8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPgorPGxpPkNsYXNzPC9saT4KKzxsaT48YSBocmVmPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic3ViTmF2Ij4KKzx1bCBjbGFzcz0ibmF2TGlzdCI+Cis8bGk+UHJldjwvbGk+Cis8bGk+TmV4dDwvbGk+Cis8L3VsPgorPHVsIGNsYXNzPSJuYXZMaXN0Ij4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sP3NlcmlhbGl6ZWQtZm9ybS5odG1sIiB0YXJnZXQ9Il90b3AiPkZyYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNlcmlhbGl6ZWQtZm9ybS5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPgorPC91bD4KKzx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+Cis8bGk+PGEgaHJlZj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+Cis8L3VsPgorPGRpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCisgIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOworICBpZih3aW5kb3c9PXRvcCkgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICB9CisgIGVsc2UgeworICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgLy8tLT4KKzwvc2NyaXB0PgorPC9kaXY+Cis8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPgorPCEtLSAgIC0tPgorPC9hPjwvZGl2PgorPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvc3R5bGVzaGVldC5jc3MgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL2RvYy9zdHlsZXNoZWV0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWVhYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9kb2Mvc3R5bGVzaGVldC5jc3MKQEAgLTAsMCArMSw0NzQgQEAKKy8qIEphdmFkb2Mgc3R5bGUgc2hlZXQgKi8KKy8qCitPdmVyYWxsIGRvY3VtZW50IHN0eWxlCisqLworYm9keSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOworICAgIGNvbG9yOiMzNTM4MzM7CisgICAgZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKKyAgICBmb250LXNpemU6NzYlOworICAgIG1hcmdpbjowOworfQorYTpsaW5rLCBhOnZpc2l0ZWQgeworICAgIHRleHQtZGVjb3JhdGlvbjpub25lOworICAgIGNvbG9yOiM0YzZiODc7Cit9CithOmhvdmVyLCBhOmZvY3VzIHsKKyAgICB0ZXh0LWRlY29yYXRpb246bm9uZTsKKyAgICBjb2xvcjojYmI3YTJhOworfQorYTphY3RpdmUgeworICAgIHRleHQtZGVjb3JhdGlvbjpub25lOworICAgIGNvbG9yOiM0YzZiODc7Cit9CithW25hbWVdIHsKKyAgICBjb2xvcjojMzUzODMzOworfQorYVtuYW1lXTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CisgICAgY29sb3I6IzM1MzgzMzsKK30KK3ByZSB7CisgICAgZm9udC1zaXplOjEuM2VtOworfQoraDEgeworICAgIGZvbnQtc2l6ZToxLjhlbTsKK30KK2gyIHsKKyAgICBmb250LXNpemU6MS41ZW07Cit9CitoMyB7CisgICAgZm9udC1zaXplOjEuNGVtOworfQoraDQgeworICAgIGZvbnQtc2l6ZToxLjNlbTsKK30KK2g1IHsKKyAgICBmb250LXNpemU6MS4yZW07Cit9CitoNiB7CisgICAgZm9udC1zaXplOjEuMWVtOworfQordWwgeworICAgIGxpc3Qtc3R5bGUtdHlwZTpkaXNjOworfQorY29kZSwgdHQgeworICAgIGZvbnQtc2l6ZToxLjJlbTsKK30KK2R0IGNvZGUgeworICAgIGZvbnQtc2l6ZToxLjJlbTsKK30KK3RhYmxlIHRyIHRkIGR0IGNvZGUgeworICAgIGZvbnQtc2l6ZToxLjJlbTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjp0b3A7Cit9CitzdXAgeworICAgIGZvbnQtc2l6ZTouNmVtOworfQorLyoKK0RvY3VtZW50IHRpdGxlIGFuZCBDb3B5cmlnaHQgc3R5bGVzCisqLworLmNsZWFyIHsKKyAgICBjbGVhcjpib3RoOworICAgIGhlaWdodDowcHg7CisgICAgb3ZlcmZsb3c6aGlkZGVuOworfQorLmFib3V0TGFuZ3VhZ2UgeworICAgIGZsb2F0OnJpZ2h0OworICAgIHBhZGRpbmc6MHB4IDIxcHg7CisgICAgZm9udC1zaXplOi44ZW07CisgICAgei1pbmRleDoyMDA7CisgICAgbWFyZ2luLXRvcDotN3B4OworfQorLmxlZ2FsQ29weSB7CisgICAgbWFyZ2luLWxlZnQ6LjVlbTsKK30KKy5iYXIgYSwgLmJhciBhOmxpbmssIC5iYXIgYTp2aXNpdGVkLCAuYmFyIGE6YWN0aXZlIHsKKyAgICBjb2xvcjojRkZGRkZGOworICAgIHRleHQtZGVjb3JhdGlvbjpub25lOworfQorLmJhciBhOmhvdmVyLCAuYmFyIGE6Zm9jdXMgeworICAgIGNvbG9yOiNiYjdhMmE7Cit9CisudGFiIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiMwMDY2RkY7CisgICAgYmFja2dyb3VuZC1pbWFnZTp1cmwocmVzb3VyY2VzL3RpdGxlYmFyLmdpZik7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IHRvcDsKKyAgICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7CisgICAgY29sb3I6I2ZmZmZmZjsKKyAgICBwYWRkaW5nOjhweDsKKyAgICB3aWR0aDo1ZW07CisgICAgZm9udC13ZWlnaHQ6Ym9sZDsKK30KKy8qCitOYXZpZ2F0aW9uIGJhciBzdHlsZXMKKyovCisuYmFyIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOnVybChyZXNvdXJjZXMvYmFja2dyb3VuZC5naWYpOworICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgIGNvbG9yOiNGRkZGRkY7CisgICAgcGFkZGluZzouOGVtIC41ZW0gLjRlbSAuOGVtOworICAgIGhlaWdodDphdXRvOy8qaGVpZ2h0OjEuOGVtOyovCisgICAgZm9udC1zaXplOjFlbTsKKyAgICBtYXJnaW46MDsKK30KKy50b3BOYXYgeworICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKHJlc291cmNlcy9iYWNrZ3JvdW5kLmdpZik7CisgICAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgICAgY29sb3I6I0ZGRkZGRjsKKyAgICBmbG9hdDpsZWZ0OworICAgIHBhZGRpbmc6MDsKKyAgICB3aWR0aDoxMDAlOworICAgIGNsZWFyOnJpZ2h0OworICAgIGhlaWdodDoyLjhlbTsKKyAgICBwYWRkaW5nLXRvcDoxMHB4OworICAgIG92ZXJmbG93OmhpZGRlbjsKK30KKy5ib3R0b21OYXYgeworICAgIG1hcmdpbi10b3A6MTBweDsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOnVybChyZXNvdXJjZXMvYmFja2dyb3VuZC5naWYpOworICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgIGNvbG9yOiNGRkZGRkY7CisgICAgZmxvYXQ6bGVmdDsKKyAgICBwYWRkaW5nOjA7CisgICAgd2lkdGg6MTAwJTsKKyAgICBjbGVhcjpyaWdodDsKKyAgICBoZWlnaHQ6Mi44ZW07CisgICAgcGFkZGluZy10b3A6MTBweDsKKyAgICBvdmVyZmxvdzpoaWRkZW47Cit9Cisuc3ViTmF2IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNkZWUzZTk7CisgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzllYWRjMDsKKyAgICBmbG9hdDpsZWZ0OworICAgIHdpZHRoOjEwMCU7CisgICAgb3ZlcmZsb3c6aGlkZGVuOworfQorLnN1Yk5hdiBkaXYgeworICAgIGNsZWFyOmxlZnQ7CisgICAgZmxvYXQ6bGVmdDsKKyAgICBwYWRkaW5nOjAgMCA1cHggNnB4OworfQordWwubmF2TGlzdCwgdWwuc3ViTmF2TGlzdCB7CisgICAgZmxvYXQ6bGVmdDsKKyAgICBtYXJnaW46MCAyNXB4IDAgMDsKKyAgICBwYWRkaW5nOjA7Cit9Cit1bC5uYXZMaXN0IGxpeworICAgIGxpc3Qtc3R5bGU6bm9uZTsKKyAgICBmbG9hdDpsZWZ0OworICAgIHBhZGRpbmc6M3B4IDZweDsKK30KK3VsLnN1Yk5hdkxpc3QgbGl7CisgICAgbGlzdC1zdHlsZTpub25lOworICAgIGZsb2F0OmxlZnQ7CisgICAgZm9udC1zaXplOjkwJTsKK30KKy50b3BOYXYgYTpsaW5rLCAudG9wTmF2IGE6YWN0aXZlLCAudG9wTmF2IGE6dmlzaXRlZCwgLmJvdHRvbU5hdiBhOmxpbmssIC5ib3R0b21OYXYgYTphY3RpdmUsIC5ib3R0b21OYXYgYTp2aXNpdGVkIHsKKyAgICBjb2xvcjojRkZGRkZGOworICAgIHRleHQtZGVjb3JhdGlvbjpub25lOworfQorLnRvcE5hdiBhOmhvdmVyLCAuYm90dG9tTmF2IGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjpub25lOworICAgIGNvbG9yOiNiYjdhMmE7Cit9CisubmF2QmFyQ2VsbDFSZXYgeworICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKHJlc291cmNlcy90YWIuZ2lmKTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNhODg4MzQ7CisgICAgY29sb3I6I0ZGRkZGRjsKKyAgICBtYXJnaW46IGF1dG8gNXB4OworICAgIGJvcmRlcjoxcHggc29saWQgI2M5YWE0NDsKK30KKy8qCitQYWdlIGhlYWRlciBhbmQgZm9vdGVyIHN0eWxlcworKi8KKy5oZWFkZXIsIC5mb290ZXIgeworICAgIGNsZWFyOmJvdGg7CisgICAgbWFyZ2luOjAgMjBweDsKKyAgICBwYWRkaW5nOjVweCAwIDAgMDsKK30KKy5pbmRleEhlYWRlciB7CisgICAgbWFyZ2luOjEwcHg7CisgICAgcG9zaXRpb246cmVsYXRpdmU7Cit9CisuaW5kZXhIZWFkZXIgaDEgeworICAgIGZvbnQtc2l6ZToxLjNlbTsKK30KKy50aXRsZSB7CisgICAgY29sb3I6IzJjNDU1NzsKKyAgICBtYXJnaW46MTBweCAwOworfQorLnN1YlRpdGxlIHsKKyAgICBtYXJnaW46NXB4IDAgMCAwOworfQorLmhlYWRlciB1bCB7CisgICAgbWFyZ2luOjAgMCAyNXB4IDA7CisgICAgcGFkZGluZzowOworfQorLmZvb3RlciB1bCB7CisgICAgbWFyZ2luOjIwcHggMCA1cHggMDsKK30KKy5oZWFkZXIgdWwgbGksIC5mb290ZXIgdWwgbGkgeworICAgIGxpc3Qtc3R5bGU6bm9uZTsKKyAgICBmb250LXNpemU6MS4yZW07Cit9CisvKgorSGVhZGluZyBzdHlsZXMKKyovCitkaXYuZGV0YWlscyB1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IHVsLmJsb2NrTGlzdCBsaS5ibG9ja0xpc3QgaDQsIGRpdi5kZXRhaWxzIHVsLmJsb2NrTGlzdCB1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0TGFzdCBsaS5ibG9ja0xpc3QgaDQgeworICAgIGJhY2tncm91bmQtY29sb3I6I2RlZTNlOTsKKyAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjOWVhZGMwOworICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICM5ZWFkYzA7CisgICAgbWFyZ2luOjAgMCA2cHggLThweDsKKyAgICBwYWRkaW5nOjJweCA1cHg7Cit9Cit1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IHVsLmJsb2NrTGlzdCBsaS5ibG9ja0xpc3QgaDMgeworICAgIGJhY2tncm91bmQtY29sb3I6I2RlZTNlOTsKKyAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjOWVhZGMwOworICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICM5ZWFkYzA7CisgICAgbWFyZ2luOjAgMCA2cHggLThweDsKKyAgICBwYWRkaW5nOjJweCA1cHg7Cit9Cit1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IGxpLmJsb2NrTGlzdCBoMyB7CisgICAgcGFkZGluZzowOworICAgIG1hcmdpbjoxNXB4IDA7Cit9Cit1bC5ibG9ja0xpc3QgbGkuYmxvY2tMaXN0IGgyIHsKKyAgICBwYWRkaW5nOjBweCAwIDIwcHggMDsKK30KKy8qCitQYWdlIGxheW91dCBjb250YWluZXIgc3R5bGVzCisqLworLmNvbnRlbnRDb250YWluZXIsIC5zb3VyY2VDb250YWluZXIsIC5jbGFzc1VzZUNvbnRhaW5lciwgLnNlcmlhbGl6ZWRGb3JtQ29udGFpbmVyLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgeworICAgIGNsZWFyOmJvdGg7CisgICAgcGFkZGluZzoxMHB4IDIwcHg7CisgICAgcG9zaXRpb246cmVsYXRpdmU7Cit9CisuaW5kZXhDb250YWluZXIgeworICAgIG1hcmdpbjoxMHB4OworICAgIHBvc2l0aW9uOnJlbGF0aXZlOworICAgIGZvbnQtc2l6ZToxLjBlbTsKK30KKy5pbmRleENvbnRhaW5lciBoMiB7CisgICAgZm9udC1zaXplOjEuMWVtOworICAgIHBhZGRpbmc6MCAwIDNweCAwOworfQorLmluZGV4Q29udGFpbmVyIHVsIHsKKyAgICBtYXJnaW46MDsKKyAgICBwYWRkaW5nOjA7Cit9CisuaW5kZXhDb250YWluZXIgdWwgbGkgeworICAgIGxpc3Qtc3R5bGU6bm9uZTsKK30KKy5jb250ZW50Q29udGFpbmVyIC5kZXNjcmlwdGlvbiBkbCBkdCwgLmNvbnRlbnRDb250YWluZXIgLmRldGFpbHMgZGwgZHQsIC5zZXJpYWxpemVkRm9ybUNvbnRhaW5lciBkbCBkdCB7CisgICAgZm9udC1zaXplOjEuMWVtOworICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgICAgbWFyZ2luOjEwcHggMCAwIDA7CisgICAgY29sb3I6IzRFNEU0RTsKK30KKy5jb250ZW50Q29udGFpbmVyIC5kZXNjcmlwdGlvbiBkbCBkZCwgLmNvbnRlbnRDb250YWluZXIgLmRldGFpbHMgZGwgZGQsIC5zZXJpYWxpemVkRm9ybUNvbnRhaW5lciBkbCBkZCB7CisgICAgbWFyZ2luOjEwcHggMCAxMHB4IDIwcHg7Cit9Cisuc2VyaWFsaXplZEZvcm1Db250YWluZXIgZGwubmFtZVZhbHVlIGR0IHsKKyAgICBtYXJnaW4tbGVmdDoxcHg7CisgICAgZm9udC1zaXplOjEuMWVtOworICAgIGRpc3BsYXk6aW5saW5lOworICAgIGZvbnQtd2VpZ2h0OmJvbGQ7Cit9Cisuc2VyaWFsaXplZEZvcm1Db250YWluZXIgZGwubmFtZVZhbHVlIGRkIHsKKyAgICBtYXJnaW46MCAwIDAgMXB4OworICAgIGZvbnQtc2l6ZToxLjFlbTsKKyAgICBkaXNwbGF5OmlubGluZTsKK30KKy8qCitMaXN0IHN0eWxlcworKi8KK3VsLmhvcml6b250YWwgbGkgeworICAgIGRpc3BsYXk6aW5saW5lOworICAgIGZvbnQtc2l6ZTowLjllbTsKK30KK3VsLmluaGVyaXRhbmNlIHsKKyAgICBtYXJnaW46MDsKKyAgICBwYWRkaW5nOjA7Cit9Cit1bC5pbmhlcml0YW5jZSBsaSB7CisgICAgZGlzcGxheTppbmxpbmU7CisgICAgbGlzdC1zdHlsZTpub25lOworfQordWwuaW5oZXJpdGFuY2UgbGkgdWwuaW5oZXJpdGFuY2UgeworICAgIG1hcmdpbi1sZWZ0OjE1cHg7CisgICAgcGFkZGluZy1sZWZ0OjE1cHg7CisgICAgcGFkZGluZy10b3A6MXB4OworfQordWwuYmxvY2tMaXN0LCB1bC5ibG9ja0xpc3RMYXN0IHsKKyAgICBtYXJnaW46MTBweCAwIDEwcHggMDsKKyAgICBwYWRkaW5nOjA7Cit9Cit1bC5ibG9ja0xpc3QgbGkuYmxvY2tMaXN0LCB1bC5ibG9ja0xpc3RMYXN0IGxpLmJsb2NrTGlzdCB7CisgICAgbGlzdC1zdHlsZTpub25lOworICAgIG1hcmdpbi1ib3R0b206MjVweDsKK30KK3VsLmJsb2NrTGlzdCB1bC5ibG9ja0xpc3QgbGkuYmxvY2tMaXN0LCB1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0TGFzdCBsaS5ibG9ja0xpc3QgeworICAgIHBhZGRpbmc6MHB4IDIwcHggNXB4IDEwcHg7CisgICAgYm9yZGVyOjFweCBzb2xpZCAjOWVhZGMwOworICAgIGJhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTsKK30KK3VsLmJsb2NrTGlzdCB1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IGxpLmJsb2NrTGlzdCwgdWwuYmxvY2tMaXN0IHVsLmJsb2NrTGlzdCB1bC5ibG9ja0xpc3RMYXN0IGxpLmJsb2NrTGlzdCB7CisgICAgcGFkZGluZzowIDAgNXB4IDhweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7CisgICAgYm9yZGVyOjFweCBzb2xpZCAjOWVhZGMwOworICAgIGJvcmRlci10b3A6bm9uZTsKK30KK3VsLmJsb2NrTGlzdCB1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IHVsLmJsb2NrTGlzdCBsaS5ibG9ja0xpc3QgeworICAgIG1hcmdpbi1sZWZ0OjA7CisgICAgcGFkZGluZy1sZWZ0OjA7CisgICAgcGFkZGluZy1ib3R0b206MTVweDsKKyAgICBib3JkZXI6bm9uZTsKKyAgICBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOWVhZGMwOworfQordWwuYmxvY2tMaXN0IHVsLmJsb2NrTGlzdCB1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IGxpLmJsb2NrTGlzdExhc3QgeworICAgIGxpc3Qtc3R5bGU6bm9uZTsKKyAgICBib3JkZXItYm90dG9tOm5vbmU7CisgICAgcGFkZGluZy1ib3R0b206MDsKK30KK3RhYmxlIHRyIHRkIGRsLCB0YWJsZSB0ciB0ZCBkbCBkdCwgdGFibGUgdHIgdGQgZGwgZGQgeworICAgIG1hcmdpbi10b3A6MDsKKyAgICBtYXJnaW4tYm90dG9tOjFweDsKK30KKy8qCitUYWJsZSBzdHlsZXMKKyovCisuY29udGVudENvbnRhaW5lciB0YWJsZSwgLmNsYXNzVXNlQ29udGFpbmVyIHRhYmxlLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgdGFibGUgeworICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICM5ZWFkYzA7CisgICAgd2lkdGg6MTAwJTsKK30KKy5jb250ZW50Q29udGFpbmVyIHVsIGxpIHRhYmxlLCAuY2xhc3NVc2VDb250YWluZXIgdWwgbGkgdGFibGUsIC5jb25zdGFudFZhbHVlc0NvbnRhaW5lciB1bCBsaSB0YWJsZSB7CisgICAgd2lkdGg6MTAwJTsKK30KKy5jb250ZW50Q29udGFpbmVyIC5kZXNjcmlwdGlvbiB0YWJsZSwgLmNvbnRlbnRDb250YWluZXIgLmRldGFpbHMgdGFibGUgeworICAgIGJvcmRlci1ib3R0b206bm9uZTsKK30KKy5jb250ZW50Q29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLmNvbE9uZSwgLmNvbnRlbnRDb250YWluZXIgdWwgbGkgdGFibGUgdGguY29sRmlyc3QsIC5jb250ZW50Q29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLmNvbExhc3QsIC5jbGFzc1VzZUNvbnRhaW5lciB1bCBsaSB0YWJsZSB0aCwgLmNvbnN0YW50VmFsdWVzQ29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLCAuY29udGVudENvbnRhaW5lciB1bCBsaSB0YWJsZSB0ZC5jb2xPbmUsIC5jb250ZW50Q29udGFpbmVyIHVsIGxpIHRhYmxlIHRkLmNvbEZpcnN0LCAuY29udGVudENvbnRhaW5lciB1bCBsaSB0YWJsZSB0ZC5jb2xMYXN0LCAuY2xhc3NVc2VDb250YWluZXIgdWwgbGkgdGFibGUgdGQsIC5jb25zdGFudFZhbHVlc0NvbnRhaW5lciB1bCBsaSB0YWJsZSB0ZHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjp0b3A7CisgICAgcGFkZGluZy1yaWdodDoyMHB4OworfQorLmNvbnRlbnRDb250YWluZXIgdWwgbGkgdGFibGUgdGguY29sTGFzdCwgLmNsYXNzVXNlQ29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLmNvbExhc3QsLmNvbnN0YW50VmFsdWVzQ29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLmNvbExhc3QsCisuY29udGVudENvbnRhaW5lciB1bCBsaSB0YWJsZSB0ZC5jb2xMYXN0LCAuY2xhc3NVc2VDb250YWluZXIgdWwgbGkgdGFibGUgdGQuY29sTGFzdCwuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgdWwgbGkgdGFibGUgdGQuY29sTGFzdCwKKy5jb250ZW50Q29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLmNvbE9uZSwgLmNsYXNzVXNlQ29udGFpbmVyIHVsIGxpIHRhYmxlIHRoLmNvbE9uZSwKKy5jb250ZW50Q29udGFpbmVyIHVsIGxpIHRhYmxlIHRkLmNvbE9uZSwgLmNsYXNzVXNlQ29udGFpbmVyIHVsIGxpIHRhYmxlIHRkLmNvbE9uZSB7CisgICAgcGFkZGluZy1yaWdodDozcHg7Cit9Cisub3ZlcnZpZXdTdW1tYXJ5IGNhcHRpb24sIC5wYWNrYWdlU3VtbWFyeSBjYXB0aW9uLCAuY29udGVudENvbnRhaW5lciB1bC5ibG9ja0xpc3QgbGkuYmxvY2tMaXN0IGNhcHRpb24sIC5zdW1tYXJ5IGNhcHRpb24sIC5jbGFzc1VzZUNvbnRhaW5lciBjYXB0aW9uLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgY2FwdGlvbiB7CisgICAgcG9zaXRpb246cmVsYXRpdmU7CisgICAgdGV4dC1hbGlnbjpsZWZ0OworICAgIGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsKKyAgICBjb2xvcjojRkZGRkZGOworICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgICAgY2xlYXI6bm9uZTsKKyAgICBvdmVyZmxvdzpoaWRkZW47CisgICAgcGFkZGluZzowcHg7CisgICAgbWFyZ2luOjBweDsKK30KK2NhcHRpb24gYTpsaW5rLCBjYXB0aW9uIGE6aG92ZXIsIGNhcHRpb24gYTphY3RpdmUsIGNhcHRpb24gYTp2aXNpdGVkIHsKKyAgICBjb2xvcjojRkZGRkZGOworfQorLm92ZXJ2aWV3U3VtbWFyeSBjYXB0aW9uIHNwYW4sIC5wYWNrYWdlU3VtbWFyeSBjYXB0aW9uIHNwYW4sIC5jb250ZW50Q29udGFpbmVyIHVsLmJsb2NrTGlzdCBsaS5ibG9ja0xpc3QgY2FwdGlvbiBzcGFuLCAuc3VtbWFyeSBjYXB0aW9uIHNwYW4sIC5jbGFzc1VzZUNvbnRhaW5lciBjYXB0aW9uIHNwYW4sIC5jb25zdGFudFZhbHVlc0NvbnRhaW5lciBjYXB0aW9uIHNwYW4geworICAgIHdoaXRlLXNwYWNlOm5vd3JhcDsKKyAgICBwYWRkaW5nLXRvcDo4cHg7CisgICAgcGFkZGluZy1sZWZ0OjhweDsKKyAgICBkaXNwbGF5OmJsb2NrOworICAgIGZsb2F0OmxlZnQ7CisgICAgYmFja2dyb3VuZC1pbWFnZTp1cmwocmVzb3VyY2VzL3RpdGxlYmFyLmdpZik7CisgICAgaGVpZ2h0OjE4cHg7Cit9Cisub3ZlcnZpZXdTdW1tYXJ5IC50YWJFbmQsIC5wYWNrYWdlU3VtbWFyeSAudGFiRW5kLCAuY29udGVudENvbnRhaW5lciB1bC5ibG9ja0xpc3QgbGkuYmxvY2tMaXN0IC50YWJFbmQsIC5zdW1tYXJ5IC50YWJFbmQsIC5jbGFzc1VzZUNvbnRhaW5lciAudGFiRW5kLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgLnRhYkVuZCB7CisgICAgd2lkdGg6MTBweDsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOnVybChyZXNvdXJjZXMvdGl0bGViYXJfZW5kLmdpZik7CisgICAgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OworICAgIGJhY2tncm91bmQtcG9zaXRpb246dG9wIHJpZ2h0OworICAgIHBvc2l0aW9uOnJlbGF0aXZlOworICAgIGZsb2F0OmxlZnQ7Cit9Cit1bC5ibG9ja0xpc3QgdWwuYmxvY2tMaXN0IGxpLmJsb2NrTGlzdCB0YWJsZSB7CisgICAgbWFyZ2luOjAgMCAxMnB4IDBweDsKKyAgICB3aWR0aDoxMDAlOworfQorLnRhYmxlU3ViSGVhZGluZ0NvbG9yIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworfQorLmFsdENvbG9yIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlZWVlZWY7Cit9Cisucm93Q29sb3IgeworICAgIGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZjsKK30KKy5vdmVydmlld1N1bW1hcnkgdGQsIC5wYWNrYWdlU3VtbWFyeSB0ZCwgLmNvbnRlbnRDb250YWluZXIgdWwuYmxvY2tMaXN0IGxpLmJsb2NrTGlzdCB0ZCwgLnN1bW1hcnkgdGQsIC5jbGFzc1VzZUNvbnRhaW5lciB0ZCwgLmNvbnN0YW50VmFsdWVzQ29udGFpbmVyIHRkIHsKKyAgICB0ZXh0LWFsaWduOmxlZnQ7CisgICAgcGFkZGluZzozcHggM3B4IDNweCA3cHg7Cit9Cit0aC5jb2xGaXJzdCwgdGguY29sTGFzdCwgdGguY29sT25lLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgdGggeworICAgIGJhY2tncm91bmQ6I2RlZTNlOTsKKyAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjOWVhZGMwOworICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICM5ZWFkYzA7CisgICAgdGV4dC1hbGlnbjpsZWZ0OworICAgIHBhZGRpbmc6M3B4IDNweCAzcHggN3B4OworfQordGQuY29sT25lIGE6bGluaywgdGQuY29sT25lIGE6YWN0aXZlLCB0ZC5jb2xPbmUgYTp2aXNpdGVkLCB0ZC5jb2xPbmUgYTpob3ZlciwgdGQuY29sRmlyc3QgYTpsaW5rLCB0ZC5jb2xGaXJzdCBhOmFjdGl2ZSwgdGQuY29sRmlyc3QgYTp2aXNpdGVkLCB0ZC5jb2xGaXJzdCBhOmhvdmVyLCB0ZC5jb2xMYXN0IGE6bGluaywgdGQuY29sTGFzdCBhOmFjdGl2ZSwgdGQuY29sTGFzdCBhOnZpc2l0ZWQsIHRkLmNvbExhc3QgYTpob3ZlciwgLmNvbnN0YW50VmFsdWVzQ29udGFpbmVyIHRkIGE6bGluaywgLmNvbnN0YW50VmFsdWVzQ29udGFpbmVyIHRkIGE6YWN0aXZlLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgdGQgYTp2aXNpdGVkLCAuY29uc3RhbnRWYWx1ZXNDb250YWluZXIgdGQgYTpob3ZlciB7CisgICAgZm9udC13ZWlnaHQ6Ym9sZDsKK30KK3RkLmNvbEZpcnN0LCB0aC5jb2xGaXJzdCB7CisgICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM5ZWFkYzA7CisgICAgd2hpdGUtc3BhY2U6bm93cmFwOworfQordGQuY29sTGFzdCwgdGguY29sTGFzdCB7CisgICAgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOWVhZGMwOworfQordGQuY29sT25lLCB0aC5jb2xPbmUgeworICAgIGJvcmRlci1yaWdodDoxcHggc29saWQgIzllYWRjMDsKKyAgICBib3JkZXItbGVmdDoxcHggc29saWQgIzllYWRjMDsKK30KK3RhYmxlLm92ZXJ2aWV3U3VtbWFyeSAgeworICAgIHBhZGRpbmc6MHB4OworICAgIG1hcmdpbi1sZWZ0OjBweDsKK30KK3RhYmxlLm92ZXJ2aWV3U3VtbWFyeSB0ZC5jb2xGaXJzdCwgdGFibGUub3ZlcnZpZXdTdW1tYXJ5IHRoLmNvbEZpcnN0LAordGFibGUub3ZlcnZpZXdTdW1tYXJ5IHRkLmNvbE9uZSwgdGFibGUub3ZlcnZpZXdTdW1tYXJ5IHRoLmNvbE9uZSB7CisgICAgd2lkdGg6MjUlOworICAgIHZlcnRpY2FsLWFsaWduOm1pZGRsZTsKK30KK3RhYmxlLnBhY2thZ2VTdW1tYXJ5IHRkLmNvbEZpcnN0LCB0YWJsZS5vdmVydmlld1N1bW1hcnkgdGguY29sRmlyc3QgeworICAgIHdpZHRoOjI1JTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Cit9CisvKgorQ29udGVudCBzdHlsZXMKKyovCisuZGVzY3JpcHRpb24gcHJlIHsKKyAgICBtYXJnaW4tdG9wOjA7Cit9CisuZGVwcmVjYXRlZENvbnRlbnQgeworICAgIG1hcmdpbjowOworICAgIHBhZGRpbmc6MTBweCAwOworfQorLmRvY1N1bW1hcnkgeworICAgIHBhZGRpbmc6MDsKK30KKy8qCitGb3JtYXR0aW5nIGVmZmVjdCBzdHlsZXMKKyovCisuc291cmNlTGluZU5vIHsKKyAgICBjb2xvcjpncmVlbjsKKyAgICBwYWRkaW5nOjAgMzBweCAwIDA7Cit9CitoMS5oaWRkZW4geworICAgIHZpc2liaWxpdHk6aGlkZGVuOworICAgIG92ZXJmbG93OmhpZGRlbjsKKyAgICBmb250LXNpemU6LjllbTsKK30KKy5ibG9jayB7CisgICAgZGlzcGxheTpibG9jazsKKyAgICBtYXJnaW46M3B4IDAgMCAwOworfQorLnN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6Ym9sZDsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouamF2YSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI0OWRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5qYXZhCkBAIC0wLDAgKzEsNTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxMywgMjAxNy0yMDE4IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpMjAxNSBWaWt0b3IgU3phdGhtw6FyeS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnOworCisvKioKKyAqIFR1cmJvSlBFRyB1dGlsaXR5IGNsYXNzIChjYW5ub3QgYmUgaW5zdGFudGlhdGVkKQorICovCitwdWJsaWMgZmluYWwgY2xhc3MgVEogeworCisgIHByaXZhdGUgVEooKSB7fQorCisgIC8qKgorICAgKiBUaGUgbnVtYmVyIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTVNBTVAgICA9IDY7CisgIC8qKgorICAgKiA0OjQ6NCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyAobm8gY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcpLiAgVGhlIEpQRUcKKyAgICogb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUgY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSBwaXhlbCBpbiB0aGUKKyAgICogc291cmNlIGltYWdlLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0FNUF80NDQgID0gMDsKKyAgLyoqCisgICAqIDQ6MjoyIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyAgICogY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSAyeDEgYmxvY2sgb2YgcGl4ZWxzIGluIHRoZSBzb3VyY2UgaW1hZ2UuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQU1QXzQyMiAgPSAxOworICAvKioKKyAgICogNDoyOjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZQorICAgKiBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDJ4MiBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBTVBfNDIwICA9IDI7CisgIC8qKgorICAgKiBHcmF5c2NhbGUuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG5vIGNocm9taW5hbmNlIGNvbXBvbmVudHMuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQU1QX0dSQVkgPSAzOworICAvKioKKyAgICogNDo0OjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZQorICAgKiBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDF4MiBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyAgICogTm90ZSB0aGF0IDQ6NDowIHN1YnNhbXBsaW5nIGlzIG5vdCBmdWxseSBhY2NlbGVyYXRlZCBpbiBsaWJqcGVnLXR1cmJvLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0FNUF80NDAgID0gNDsKKyAgLyoqCisgICAqIDQ6MToxIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyAgICogY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSA0eDEgYmxvY2sgb2YgcGl4ZWxzIGluIHRoZSBzb3VyY2UgaW1hZ2UuCisgICAqIEpQRUcgaW1hZ2VzIGNvbXByZXNzZWQgd2l0aCA0OjE6MSBzdWJzYW1wbGluZyB3aWxsIGJlIGFsbW9zdCBleGFjdGx5IHRoZQorICAgKiBzYW1lIHNpemUgYXMgdGhvc2UgY29tcHJlc3NlZCB3aXRoIDQ6MjowIHN1YnNhbXBsaW5nLCBhbmQgaW4gdGhlCisgICAqIGFnZ3JlZ2F0ZSwgYm90aCBzdWJzYW1wbGluZyBtZXRob2RzIHByb2R1Y2UgYXBwcm94aW1hdGVseSB0aGUgc2FtZQorICAgKiBwZXJjZXB0dWFsIHF1YWxpdHkuICBIb3dldmVyLCA0OjE6MSBpcyBiZXR0ZXIgYWJsZSB0byByZXByb2R1Y2Ugc2hhcnAKKyAgICogaG9yaXpvbnRhbCBmZWF0dXJlcy4gIE5vdGUgdGhhdCA0OjE6MSBzdWJzYW1wbGluZyBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQKKyAgICogaW4gbGlianBlZy10dXJiby4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBTVBfNDExICA9IDU7CisKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgTUNVIGJsb2NrIHdpZHRoIGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyAgICogc3Vic2FtcGxpbmcuCisgICAqCisgICAqIEBwYXJhbSBzdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyAob25lIG9mCisgICAqIDxjb2RlPlNBTVBfKjwvY29kZT4pCisgICAqCisgICAqIEByZXR1cm4gdGhlIE1DVSBibG9jayB3aWR0aCBmb3IgdGhlIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlCisgICAqIHN1YnNhbXBsaW5nLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBpbnQgZ2V0TUNVV2lkdGgoaW50IHN1YnNhbXApIHsKKyAgICBjaGVja1N1YnNhbXBsaW5nKHN1YnNhbXApOworICAgIHJldHVybiBNQ1VfV0lEVEhbc3Vic2FtcF07CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBNQ1VfV0lEVEggPSB7CisgICAgOCwgMTYsIDE2LCA4LCA4LCAzMgorICB9OworCisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIE1DVSBibG9jayBoZWlnaHQgZm9yIHRoZSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZQorICAgKiBzdWJzYW1wbGluZy4KKyAgICoKKyAgICogQHBhcmFtIHN1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChvbmUgb2YKKyAgICogPGNvZGU+U0FNUF8qPC9jb2RlPikKKyAgICoKKyAgICogQHJldHVybiB0aGUgTUNVIGJsb2NrIGhlaWdodCBmb3IgdGhlIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlCisgICAqIHN1YnNhbXBsaW5nLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBpbnQgZ2V0TUNVSGVpZ2h0KGludCBzdWJzYW1wKSB7CisgICAgY2hlY2tTdWJzYW1wbGluZyhzdWJzYW1wKTsKKyAgICByZXR1cm4gTUNVX0hFSUdIVFtzdWJzYW1wXTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIE1DVV9IRUlHSFQgPSB7CisgICAgOCwgOCwgMTYsIDgsIDE2LCA4CisgIH07CisKKworICAvKioKKyAgICogVGhlIG51bWJlciBvZiBwaXhlbCBmb3JtYXRzCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1QRiAgID0gMTI7CisgIC8qKgorICAgKiBSR0IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gMy1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBGX1JHQiAgPSAwOworICAvKioKKyAgICogQkdSIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKKyAgICogc3RvcmVkIGluIDMtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlCisgICAqIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9CR1IgID0gMTsKKyAgLyoqCisgICAqIFJHQlggcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyAgICogYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9SR0JYID0gMjsKKyAgLyoqCisgICAqIEJHUlggcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgQiwgRywgUiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyAgICogYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9CR1JYID0gMzsKKyAgLyoqCisgICAqIFhCR1IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyAgICogYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9YQkdSID0gNDsKKyAgLyoqCisgICAqIFhSR0IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgQiwgRywgUiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyAgICogYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9YUkdCID0gNTsKKyAgLyoqCisgICAqIEdyYXlzY2FsZSBwaXhlbCBmb3JtYXQuICBFYWNoIDEtYnl0ZSBwaXhlbCByZXByZXNlbnRzIGEgbHVtaW5hbmNlCisgICAqIChicmlnaHRuZXNzKSBsZXZlbCBmcm9tIDAgdG8gMjU1LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfR1JBWSA9IDY7CisgIC8qKgorICAgKiBSR0JBIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rICNQRl9SR0JYfSwgZXhjZXB0IHRoYXQgd2hlbgorICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfUkdCQSA9IDc7CisgIC8qKgorICAgKiBCR1JBIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rICNQRl9CR1JYfSwgZXhjZXB0IHRoYXQgd2hlbgorICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfQkdSQSA9IDg7CisgIC8qKgorICAgKiBBQkdSIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rICNQRl9YQkdSfSwgZXhjZXB0IHRoYXQgd2hlbgorICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfQUJHUiA9IDk7CisgIC8qKgorICAgKiBBUkdCIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rICNQRl9YUkdCfSwgZXhjZXB0IHRoYXQgd2hlbgorICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfQVJHQiA9IDEwOworICAvKioKKyAgICogQ01ZSyBwaXhlbCBmb3JtYXQuICBVbmxpa2UgUkdCLCB3aGljaCBpcyBhbiBhZGRpdGl2ZSBjb2xvciBtb2RlbCB1c2VkCisgICAqIHByaW1hcmlseSBmb3IgZGlzcGxheSwgQ01ZSyAoQ3lhbi9NYWdlbnRhL1llbGxvdy9LZXkpIGlzIGEgc3VidHJhY3RpdmUKKyAgICogY29sb3IgbW9kZWwgdXNlZCBwcmltYXJpbHkgZm9yIHByaW50aW5nLiAgSW4gdGhlIENNWUsgY29sb3IgbW9kZWwsIHRoZQorICAgKiB2YWx1ZSBvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCB0eXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYW4gYW1vdW50IG9mIGN5YW4sCisgICAqIG1hZ2VudGEsIHllbGxvdywgb3IgYmxhY2sgaW5rIHRoYXQgaXMgYXBwbGllZCB0byBhIHdoaXRlIGJhY2tncm91bmQuICBJbgorICAgKiBvcmRlciB0byBjb252ZXJ0IGJldHdlZW4gQ01ZSyBhbmQgUkdCLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGEgY29sb3IKKyAgICogbWFuYWdlbWVudCBzeXN0ZW0gKENNUy4pICBBIENNUyB3aWxsIGF0dGVtcHQgdG8gbWFwIGNvbG9ycyB3aXRoaW4gdGhlCisgICAqIHByaW50ZXIncyBnYW11dCB0byBwZXJjZXB0dWFsbHkgc2ltaWxhciBjb2xvcnMgaW4gdGhlIGRpc3BsYXkncyBnYW11dCBhbmQKKyAgICogdmljZSB2ZXJzYSwgYnV0IHRoZSBtYXBwaW5nIGlzIHR5cGljYWxseSBub3QgMToxIG9yIHJldmVyc2libGUsIG5vciBjYW4gaXQKKyAgICogYmUgZGVmaW5lZCB3aXRoIGEgc2ltcGxlIGZvcm11bGEuICBUaHVzLCBzdWNoIGEgY29udmVyc2lvbiBpcyBvdXQgb2Ygc2NvcGUKKyAgICogZm9yIGEgY29kZWMgbGlicmFyeS4gIEhvd2V2ZXIsIHRoZSBUdXJib0pQRUcgQVBJIGFsbG93cyBmb3IgY29tcHJlc3NpbmcKKyAgICogQ01ZSyBwaXhlbHMgaW50byBhIFlDQ0sgSlBFRyBpbWFnZSAoc2VlIHtAbGluayAjQ1NfWUNDS30pIGFuZAorICAgKiBkZWNvbXByZXNzaW5nIFlDQ0sgSlBFRyBpbWFnZXMgaW50byBDTVlLIHBpeGVscy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBGX0NNWUsgPSAxMTsKKworCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuCisgICAqCisgICAqIEBwYXJhbSBwaXhlbEZvcm1hdCB0aGUgcGl4ZWwgZm9ybWF0IChvbmUgb2YgPGNvZGU+UEZfKjwvY29kZT4pCisgICAqCisgICAqIEByZXR1cm4gdGhlIHBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBpeGVsU2l6ZShpbnQgcGl4ZWxGb3JtYXQpIHsKKyAgICBjaGVja1BpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsKKyAgICByZXR1cm4gUElYRUxfU0laRVtwaXhlbEZvcm1hdF07CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBQSVhFTF9TSVpFID0geworICAgIDMsIDMsIDQsIDQsIDQsIDQsIDEsIDQsIDQsIDQsIDQsIDQKKyAgfTsKKworCisgIC8qKgorICAgKiBGb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHJlZAorICAgKiBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC4gIEZvciBpbnN0YW5jZSwgaWYgYSBwaXhlbAorICAgKiBvZiBmb3JtYXQgPGNvZGU+VEouUEZfQkdSWDwvY29kZT4gaXMgc3RvcmVkIGluIDxjb2RlPmNoYXIgcGl4ZWxbXTwvY29kZT4sCisgICAqIHRoZW4gdGhlIHJlZCBjb21wb25lbnQgd2lsbCBiZQorICAgKiA8Y29kZT5waXhlbFtUSi5nZXRSZWRPZmZzZXQoVEouUEZfQkdSWCldPC9jb2RlPi4KKyAgICoKKyAgICogQHBhcmFtIHBpeGVsRm9ybWF0IHRoZSBwaXhlbCBmb3JtYXQgKG9uZSBvZiA8Y29kZT5QRl8qPC9jb2RlPikKKyAgICoKKyAgICogQHJldHVybiB0aGUgcmVkIG9mZnNldCBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgb3IgLTEgaWYgdGhlIHBpeGVsCisgICAqIGZvcm1hdCBkb2VzIG5vdCBoYXZlIGEgcmVkIGNvbXBvbmVudC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgaW50IGdldFJlZE9mZnNldChpbnQgcGl4ZWxGb3JtYXQpIHsKKyAgICBjaGVja1BpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsKKyAgICByZXR1cm4gUkVEX09GRlNFVFtwaXhlbEZvcm1hdF07CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBSRURfT0ZGU0VUID0geworICAgIDAsIDIsIDAsIDIsIDMsIDEsIC0xLCAwLCAyLCAzLCAxLCAtMQorICB9OworCisKKyAgLyoqCisgICAqIEZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgZ3JlZW4KKyAgICogY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuICBGb3IgaW5zdGFuY2UsIGlmIGEgcGl4ZWwKKyAgICogb2YgZm9ybWF0IDxjb2RlPlRKLlBGX0JHUlg8L2NvZGU+IGlzIHN0b3JlZCBpbiA8Y29kZT5jaGFyIHBpeGVsW108L2NvZGU+LAorICAgKiB0aGVuIHRoZSBncmVlbiBjb21wb25lbnQgd2lsbCBiZQorICAgKiA8Y29kZT5waXhlbFtUSi5nZXRHcmVlbk9mZnNldChUSi5QRl9CR1JYKV08L2NvZGU+LgorICAgKgorICAgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgdGhlIHBpeGVsIGZvcm1hdCAob25lIG9mIDxjb2RlPlBGXyo8L2NvZGU+KQorICAgKgorICAgKiBAcmV0dXJuIHRoZSBncmVlbiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIG9yIC0xIGlmIHRoZSBwaXhlbAorICAgKiBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhIGdyZWVuIGNvbXBvbmVudC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgaW50IGdldEdyZWVuT2Zmc2V0KGludCBwaXhlbEZvcm1hdCkgeworICAgIGNoZWNrUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOworICAgIHJldHVybiBHUkVFTl9PRkZTRVRbcGl4ZWxGb3JtYXRdOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gR1JFRU5fT0ZGU0VUID0geworICAgIDEsIDEsIDEsIDEsIDIsIDIsIC0xLCAxLCAxLCAyLCAyLCAtMQorICB9OworCisKKyAgLyoqCisgICAqIEZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgYmx1ZQorICAgKiBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC4gIEZvciBpbnN0YW5jZSwgaWYgYSBwaXhlbAorICAgKiBvZiBmb3JtYXQgPGNvZGU+VEouUEZfQkdSWDwvY29kZT4gaXMgc3RvcmVkIGluIDxjb2RlPmNoYXIgcGl4ZWxbXTwvY29kZT4sCisgICAqIHRoZW4gdGhlIGJsdWUgY29tcG9uZW50IHdpbGwgYmUKKyAgICogPGNvZGU+cGl4ZWxbVEouZ2V0Qmx1ZU9mZnNldChUSi5QRl9CR1JYKV08L2NvZGU+LgorICAgKgorICAgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgdGhlIHBpeGVsIGZvcm1hdCAob25lIG9mIDxjb2RlPlBGXyo8L2NvZGU+KQorICAgKgorICAgKiBAcmV0dXJuIHRoZSBibHVlIG9mZnNldCBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgb3IgLTEgaWYgdGhlIHBpeGVsCisgICAqIGZvcm1hdCBkb2VzIG5vdCBoYXZlIGEgYmx1ZSBjb21wb25lbnQuCisgICAqLworICBwdWJsaWMgc3RhdGljIGludCBnZXRCbHVlT2Zmc2V0KGludCBwaXhlbEZvcm1hdCkgeworICAgIGNoZWNrUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOworICAgIHJldHVybiBCTFVFX09GRlNFVFtwaXhlbEZvcm1hdF07CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBCTFVFX09GRlNFVCA9IHsKKyAgICAyLCAwLCAyLCAwLCAxLCAzLCAtMSwgMiwgMCwgMSwgMywgLTEKKyAgfTsKKworCisgIC8qKgorICAgKiBGb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGFscGhhCisgICAqIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLiAgRm9yIGluc3RhbmNlLCBpZiBhIHBpeGVsCisgICAqIG9mIGZvcm1hdCA8Y29kZT5USi5QRl9CR1JBPC9jb2RlPiBpcyBzdG9yZWQgaW4gPGNvZGU+Y2hhciBwaXhlbFtdPC9jb2RlPiwKKyAgICogdGhlbiB0aGUgYWxwaGEgY29tcG9uZW50IHdpbGwgYmUKKyAgICogPGNvZGU+cGl4ZWxbVEouZ2V0QWxwaGFPZmZzZXQoVEouUEZfQkdSQSldPC9jb2RlPi4KKyAgICoKKyAgICogQHBhcmFtIHBpeGVsRm9ybWF0IHRoZSBwaXhlbCBmb3JtYXQgKG9uZSBvZiA8Y29kZT5QRl8qPC9jb2RlPikKKyAgICoKKyAgICogQHJldHVybiB0aGUgYWxwaGEgb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LCBvciAtMSBpZiB0aGUgcGl4ZWwKKyAgICogZm9ybWF0IGRvZXMgbm90IGhhdmUgYSBhbHBoYSBjb21wb25lbnQuCisgICAqLworICBwdWJsaWMgc3RhdGljIGludCBnZXRBbHBoYU9mZnNldChpbnQgcGl4ZWxGb3JtYXQpIHsKKyAgICBjaGVja1BpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsKKyAgICByZXR1cm4gQUxQSEFfT0ZGU0VUW3BpeGVsRm9ybWF0XTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIEFMUEhBX09GRlNFVCA9IHsKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMywgMywgMCwgMCwgLTEKKyAgfTsKKworCisgIC8qKgorICAgKiBUaGUgbnVtYmVyIG9mIEpQRUcgY29sb3JzcGFjZXMKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTUNTID0gNTsKKyAgLyoqCisgICAqIFJHQiBjb2xvcnNwYWNlLiAgV2hlbiBjb21wcmVzc2luZyB0aGUgSlBFRyBpbWFnZSwgdGhlIFIsIEcsIGFuZCBCCisgICAqIGNvbXBvbmVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSBhcmUgcmVvcmRlcmVkIGludG8gaW1hZ2UgcGxhbmVzLCBidXQgbm8KKyAgICogY29sb3JzcGFjZSBjb252ZXJzaW9uIG9yIHN1YnNhbXBsaW5nIGlzIHBlcmZvcm1lZC4gIFJHQiBKUEVHIGltYWdlcyBjYW4gYmUKKyAgICogZGVjb21wcmVzc2VkIHRvIGFueSBvZiB0aGUgZXh0ZW5kZWQgUkdCIHBpeGVsIGZvcm1hdHMgb3IgZ3JheXNjYWxlLCBidXQKKyAgICogdGhleSBjYW5ub3QgYmUgZGVjb21wcmVzc2VkIHRvIFlVViBpbWFnZXMuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDU19SR0IgPSAwOworICAvKioKKyAgICogWUNiQ3IgY29sb3JzcGFjZS4gIFlDYkNyIGlzIG5vdCBhbiBhYnNvbHV0ZSBjb2xvcnNwYWNlIGJ1dCByYXRoZXIgYQorICAgKiBtYXRoZW1hdGljYWwgdHJhbnNmb3JtYXRpb24gb2YgUkdCIGRlc2lnbmVkIHNvbGVseSBmb3Igc3RvcmFnZSBhbmQKKyAgICogdHJhbnNtaXNzaW9uLiAgWUNiQ3IgaW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIFJHQiBiZWZvcmUgdGhleSBjYW4KKyAgICogYWN0dWFsbHkgYmUgZGlzcGxheWVkLiAgSW4gdGhlIFlDYkNyIGNvbG9yc3BhY2UsIHRoZSBZIChsdW1pbmFuY2UpCisgICAqIGNvbXBvbmVudCByZXByZXNlbnRzIHRoZSBibGFjayAmIHdoaXRlIHBvcnRpb24gb2YgdGhlIG9yaWdpbmFsIGltYWdlLCBhbmQKKyAgICogdGhlIENiIGFuZCBDciAoY2hyb21pbmFuY2UpIGNvbXBvbmVudHMgcmVwcmVzZW50IHRoZSBjb2xvciBwb3J0aW9uIG9mIHRoZQorICAgKiBvcmlnaW5hbCBpbWFnZS4gIE9yaWdpbmFsbHksIHRoZSBhbmFsb2cgZXF1aXZhbGVudCBvZiB0aGlzIHRyYW5zZm9ybWF0aW9uCisgICAqIGFsbG93ZWQgdGhlIHNhbWUgc2lnbmFsIHRvIGRyaXZlIGJvdGggYmxhY2sgJiB3aGl0ZSBhbmQgY29sb3IgdGVsZXZpc2lvbnMsCisgICAqIGJ1dCBKUEVHIGltYWdlcyB1c2UgWUNiQ3IgcHJpbWFyaWx5IGJlY2F1c2UgaXQgYWxsb3dzIHRoZSBjb2xvciBkYXRhIHRvIGJlCisgICAqIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlZHVjaW5nIGJhbmR3aWR0aCBvciBkaXNrCisgICAqIHNwYWNlLiAgWUNiQ3IgaXMgdGhlIG1vc3QgY29tbW9uIEpQRUcgY29sb3JzcGFjZSwgYW5kIFlDYkNyIEpQRUcgaW1hZ2VzCisgICAqIGNhbiBiZSBjb21wcmVzc2VkIGZyb20gYW5kIGRlY29tcHJlc3NlZCB0byBhbnkgb2YgdGhlIGV4dGVuZGVkIFJHQiBwaXhlbAorICAgKiBmb3JtYXRzIG9yIGdyYXlzY2FsZSwgb3IgdGhleSBjYW4gYmUgZGVjb21wcmVzc2VkIHRvIFlVViBwbGFuYXIgaW1hZ2VzLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6Q29uc3RhbnROYW1lIikKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1NfWUNiQ3IgPSAxOworICAvKioKKyAgICogR3JheXNjYWxlIGNvbG9yc3BhY2UuICBUaGUgSlBFRyBpbWFnZSByZXRhaW5zIG9ubHkgdGhlIGx1bWluYW5jZSBkYXRhIChZCisgICAqIGNvbXBvbmVudCksIGFuZCBhbnkgY29sb3IgZGF0YSBmcm9tIHRoZSBzb3VyY2UgaW1hZ2UgaXMgZGlzY2FyZGVkLgorICAgKiBHcmF5c2NhbGUgSlBFRyBpbWFnZXMgY2FuIGJlIGNvbXByZXNzZWQgZnJvbSBhbmQgZGVjb21wcmVzc2VkIHRvIGFueSBvZgorICAgKiB0aGUgZXh0ZW5kZWQgUkdCIHBpeGVsIGZvcm1hdHMgb3IgZ3JheXNjYWxlLCBvciB0aGV5IGNhbiBiZSBkZWNvbXByZXNzZWQKKyAgICogdG8gWVVWIHBsYW5hciBpbWFnZXMuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDU19HUkFZID0gMjsKKyAgLyoqCisgICAqIENNWUsgY29sb3JzcGFjZS4gIFdoZW4gY29tcHJlc3NpbmcgdGhlIEpQRUcgaW1hZ2UsIHRoZSBDLCBNLCBZLCBhbmQgSworICAgKiBjb21wb25lbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UgYXJlIHJlb3JkZXJlZCBpbnRvIGltYWdlIHBsYW5lcywgYnV0IG5vCisgICAqIGNvbG9yc3BhY2UgY29udmVyc2lvbiBvciBzdWJzYW1wbGluZyBpcyBwZXJmb3JtZWQuICBDTVlLIEpQRUcgaW1hZ2VzIGNhbgorICAgKiBvbmx5IGJlIGRlY29tcHJlc3NlZCB0byBDTVlLIHBpeGVscy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENTX0NNWUsgPSAzOworICAvKioKKyAgICogWUNDSyBjb2xvcnNwYWNlLiAgWUNDSyAoQUtBICJZQ2JDcksiKSBpcyBub3QgYW4gYWJzb2x1dGUgY29sb3JzcGFjZSBidXQKKyAgICogcmF0aGVyIGEgbWF0aGVtYXRpY2FsIHRyYW5zZm9ybWF0aW9uIG9mIENNWUsgZGVzaWduZWQgc29sZWx5IGZvciBzdG9yYWdlCisgICAqIGFuZCB0cmFuc21pc3Npb24uICBJdCBpcyB0byBDTVlLIGFzIFlDYkNyIGlzIHRvIFJHQi4gIENNWUsgcGl4ZWxzIGNhbiBiZQorICAgKiByZXZlcnNpYmx5IHRyYW5zZm9ybWVkIGludG8gWUNDSywgYW5kIGFzIHdpdGggWUNiQ3IsIHRoZSBjaHJvbWluYW5jZQorICAgKiBjb21wb25lbnRzIGluIHRoZSBZQ0NLIHBpeGVscyBjYW4gYmUgc3Vic2FtcGxlZCB3aXRob3V0IGluY3VycmluZyBtYWpvcgorICAgKiBwZXJjZXB0dWFsIGxvc3MuICBZQ0NLIEpQRUcgaW1hZ2VzIGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgZnJvbSBhbmQKKyAgICogZGVjb21wcmVzc2VkIHRvIENNWUsgcGl4ZWxzLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1NfWUNDSyA9IDQ7CisKKworICAvKioKKyAgICogVGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywKKyAgICogT3BlbkdMKSBvcmRlciwgbm90IHRvcC1kb3duIChYMTEpIG9yZGVyLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19CT1RUT01VUCAgICAgID0gMjsKKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jVmFyaWFibGUiKQorICBARGVwcmVjYXRlZAorICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZPUkNFTU1YICAgICAgPSA4OworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jVmFyaWFibGUiKQorICBARGVwcmVjYXRlZAorICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZPUkNFU1NFICAgICAgPSAxNjsKKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY1ZhcmlhYmxlIikKKyAgQERlcHJlY2F0ZWQKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GT1JDRVNTRTIgICAgID0gMzI7CisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkphdmFkb2NWYXJpYWJsZSIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRk9SQ0VTU0UzICAgICA9IDEyODsKKworICAvKioKKyAgICogV2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyAgICogc3Vic2FtcGxpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBhdmFpbGFibGUgaW4KKyAgICogdGhlIHVuZGVybHlpbmcgY29kZWMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2Ugc21vb3RoIHVwc2FtcGxpbmcsIHdoaWNoCisgICAqIGNyZWF0ZXMgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIG5laWdoYm9yaW5nIGNocm9taW5hbmNlIGNvbXBvbmVudHMgaW4KKyAgICogb3JkZXIgdG8gcmVkdWNlIHVwc2FtcGxpbmcgYXJ0aWZhY3RzIGluIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZBU1RVUFNBTVBMRSAgPSAyNTY7CisgIC8qKgorICAgKiBVc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4gIFRoZQorICAgKiBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yCisgICAqIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgZm9yIGxpYmpwZWdbLXR1cmJvXSB1c2VzIHRoZSBmYXN0CisgICAqIGFsZ29yaXRobSBieSBkZWZhdWx0IHdoZW4gY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlCisgICAqIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0KKyAgICogd2hlbiBkZWNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBhIGxhcmdlciBlZmZlY3QuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZBU1REQ1QgICAgICAgPSAyMDQ4OworICAvKioKKyAgICogVXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcKKyAgICogY29kZWMuICBUaGUgZGVmYXVsdCBpZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpcworICAgKiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIEZvciBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvcgorICAgKiBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLAorICAgKiBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LAorICAgKiBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcworICAgKiBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ0NVUkFURURDVCAgID0gNDA5NjsKKyAgLyoqCisgICAqIEltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIHRoZSBjdXJyZW50IGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24vdHJhbnNmb3JtCisgICAqIG9wZXJhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBjb2RlYyB0aHJvd3MgYSB3YXJuaW5nIChub24tZmF0YWwgZXJyb3IpLiAgVGhlCisgICAqIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYWxsb3cgdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZSB1bmxlc3MgYSBmYXRhbAorICAgKiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKyAgICogPHA+CisgICAqIE5PVEU6IGR1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBUdXJib0pQRUcgSmF2YSBBUEksIG9ubHkgY2VydGFpbiBtZXRob2RzCisgICAqIChzcGVjaWZpY2FsbHksIHtAbGluayBUSkRlY29tcHJlc3NvciBUSkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKigpfSBtZXRob2RzCisgICAqIHdpdGggYSB2b2lkIHJldHVybiB0eXBlKSB3aWxsIGNvbXBsZXRlIGFuZCBsZWF2ZSB0aGUgb3V0cHV0IGltYWdlIGluIGEKKyAgICogZnVsbHkgcmVjb3ZlcmFibGUgc3RhdGUgYWZ0ZXIgYSBub24tZmF0YWwgZXJyb3Igb2NjdXJzLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVE9QT05XQVJOSU5HID0gODE5MjsKKyAgLyoqCisgICAqIFVzZSBwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiBKUEVHIGltYWdlcyBnZW5lcmF0ZWQgYnkgY29tcHJlc3Npb24gYW5kCisgICAqIHRyYW5zZm9ybSBvcGVyYXRpb25zLiAgUHJvZ3Jlc3NpdmUgZW50cm9weSBjb2Rpbmcgd2lsbCBnZW5lcmFsbHkgaW1wcm92ZQorICAgKiBjb21wcmVzc2lvbiByZWxhdGl2ZSB0byBiYXNlbGluZSBlbnRyb3B5IGNvZGluZyAodGhlIGRlZmF1bHQpLCBidXQgaXQgd2lsbAorICAgKiByZWR1Y2UgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhYmx5LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QUk9HUkVTU0lWRSAgID0gMTYzODQ7CisKKworICAvKioKKyAgICogVGhlIG51bWJlciBvZiBlcnJvciBjb2RlcworICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNRVJSID0gMjsKKyAgLyoqCisgICAqIFRoZSBlcnJvciB3YXMgbm9uLWZhdGFsIGFuZCByZWNvdmVyYWJsZSwgYnV0IHRoZSBpbWFnZSBtYXkgc3RpbGwgYmUKKyAgICogY29ycnVwdC4KKyAgICogPHA+CisgICAqIE5PVEU6IGR1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBUdXJib0pQRUcgSmF2YSBBUEksIG9ubHkgY2VydGFpbiBtZXRob2RzCisgICAqIChzcGVjaWZpY2FsbHksIHtAbGluayBUSkRlY29tcHJlc3NvciBUSkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKigpfSBtZXRob2RzCisgICAqIHdpdGggYSB2b2lkIHJldHVybiB0eXBlKSB3aWxsIGNvbXBsZXRlIGFuZCBsZWF2ZSB0aGUgb3V0cHV0IGltYWdlIGluIGEKKyAgICogZnVsbHkgcmVjb3ZlcmFibGUgc3RhdGUgYWZ0ZXIgYSBub24tZmF0YWwgZXJyb3Igb2NjdXJzLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJSX1dBUk5JTkcgPSAwOworICAvKioKKyAgICogVGhlIGVycm9yIHdhcyBmYXRhbCBhbmQgbm9uLXJlY292ZXJhYmxlLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJSX0ZBVEFMID0gMTsKKworCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHCisgICAqIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KKyAgICoKKyAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgSlBFRyBpbWFnZQorICAgKgorICAgKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIEpQRUcgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIGpwZWdTdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byBiZSB1c2VkIHdoZW4KKyAgICogZ2VuZXJhdGluZyB0aGUgSlBFRyBpbWFnZSAob25lIG9mIHtAbGluayBUSiBUSi5TQU1QXyp9KQorICAgKgorICAgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHCisgICAqIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBidWZTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGpwZWdTdWJzYW1wKTsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIKKyAgICogaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLgorICAgKgorICAgKiBAcGFyYW0gd2lkdGggdGhlIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIHBhZCB0aGUgd2lkdGggb2YgZWFjaCBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIGltYWdlIGlzIHBhZGRlZCB0bworICAgKiB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGlzIG51bWJlciBvZiBieXRlcyAobXVzdCBiZSBhIHBvd2VyIG9mIDIuKQorICAgKgorICAgKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZQorICAgKgorICAgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWCisgICAqIGltYWdlIChvbmUgb2Yge0BsaW5rIFRKIFRKLlNBTVBfKn0pCisgICAqCisgICAqIEByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyCisgICAqIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBidWZTaXplWVVWKGludCB3aWR0aCwgaW50IHBhZCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnNhbXApOworCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNidWZTaXplWVVWKGludCwgaW50LCBpbnQsIGludCl9IGluc3RlYWQuCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgQERlcHJlY2F0ZWQKKyAgcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IGJ1ZlNpemVZVVYoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCk7CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgaW1hZ2UKKyAgICogcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAgICoKKyAgICogQHBhcmFtIGNvbXBvbmVudElEIElEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwKKyAgICogMiA9IFYvQ3IpCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiAgTk9URTogdGhpcyBpcyB0aGUgd2lkdGgKKyAgICogb2YgdGhlIHdob2xlIGltYWdlLCBub3QgdGhlIHBsYW5lIHdpZHRoLgorICAgKgorICAgKiBAcGFyYW0gc3RyaWRlIGJ5dGVzIHBlciBsaW5lIGluIHRoZSBpbWFnZSBwbGFuZS4KKyAgICoKKyAgICogQHBhcmFtIGhlaWdodCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIE5PVEU6IHRoaXMgaXMgdGhlCisgICAqIGhlaWdodCBvZiB0aGUgd2hvbGUgaW1hZ2UsIG5vdCB0aGUgcGxhbmUgaGVpZ2h0LgorICAgKgorICAgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWCisgICAqIGltYWdlIChvbmUgb2Yge0BsaW5rIFRKIFRKLlNBTVBfKn0pCisgICAqCisgICAqIEByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyCisgICAqIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuCisgICAqLworICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBpbnQgcGxhbmVTaXplWVVWKGludCBjb21wb25lbnRJRCwgaW50IHdpZHRoLCBpbnQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCBzdWJzYW1wKTsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgcGxhbmUgd2lkdGggb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAgICogUmVmZXIgdG8ge0BsaW5rIFlVVkltYWdlIFlVVkltYWdlfSBmb3IgYSBkZXNjcmlwdGlvbiBvZiBwbGFuZSB3aWR0aC4KKyAgICoKKyAgICogQHBhcmFtIGNvbXBvbmVudElEIElEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwKKyAgICogMiA9IFYvQ3IpCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlCisgICAqCisgICAqIEBwYXJhbSBzdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYgaW1hZ2UKKyAgICogKG9uZSBvZiB7QGxpbmsgVEogVEouU0FNUF8qfSkKKyAgICoKKyAgICogQHJldHVybiB0aGUgcGxhbmUgd2lkdGggb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBwbGFuZVdpZHRoKGludCBjb21wb25lbnRJRCwgaW50IHdpZHRoLCBpbnQgc3Vic2FtcCk7CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHBsYW5lIGhlaWdodCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorICAgKiBSZWZlciB0byB7QGxpbmsgWVVWSW1hZ2UgWVVWSW1hZ2V9IGZvciBhIGRlc2NyaXB0aW9uIG9mIHBsYW5lIGhlaWdodC4KKyAgICoKKyAgICogQHBhcmFtIGNvbXBvbmVudElEIElEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwKKyAgICogMiA9IFYvQ3IpCisgICAqCisgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIHN1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIFlVViBpbWFnZQorICAgKiAob25lIG9mIHtAbGluayBUSiBUSi5TQU1QXyp9KQorICAgKgorICAgKiBAcmV0dXJuIHRoZSBwbGFuZSBoZWlnaHQgb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBwbGFuZUhlaWdodChpbnQgY29tcG9uZW50SUQsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3Vic2FtcCk7CisKKyAgLyoqCisgICAqIFJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluCisgICAqIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzLgorICAgKgorICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBmcmFjdGlvbmFsIHNjYWxpbmcgZmFjdG9ycyB0aGF0IHRoZSBKUEVHIGRlY29tcHJlc3NvciBpbgorICAgKiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIFR1cmJvSlBFRyBzdXBwb3J0cy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIFRKU2NhbGluZ0ZhY3RvcltdIGdldFNjYWxpbmdGYWN0b3JzKCk7CisKKyAgc3RhdGljIHsKKyAgICBUSkxvYWRlci5sb2FkKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUGl4ZWxGb3JtYXQoaW50IHBpeGVsRm9ybWF0KSB7CisgICAgaWYgKHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBOVU1QRikKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcGl4ZWwgZm9ybWF0Iik7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrU3Vic2FtcGxpbmcoaW50IHN1YnNhbXApIHsKKyAgICBpZiAoc3Vic2FtcCA8IDAgfHwgc3Vic2FtcCA+PSBOVU1TQU1QKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzdWJzYW1wbGluZyB0eXBlIik7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuamF2YSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlNWRiOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmphdmEKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAxMS0yMDE1LCAyMDE4IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpMjAxNSBWaWt0b3IgU3phdGhtw6FyeS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnOworCitpbXBvcnQgamF2YS5hd3QuaW1hZ2UuKjsKK2ltcG9ydCBqYXZhLm5pby4qOworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiBUdXJib0pQRUcgY29tcHJlc3NvcgorICovCitwdWJsaWMgY2xhc3MgVEpDb21wcmVzc29yIGltcGxlbWVudHMgQ2xvc2VhYmxlIHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fQVNTT0NfRVJST1IgPQorICAgICJObyBzb3VyY2UgaW1hZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UiOworCisgIC8qKgorICAgKiBDcmVhdGUgYSBUdXJib0pQRUcgY29tcHJlc3NvciBpbnN0YW5jZS4KKyAgICovCisgIHB1YmxpYyBUSkNvbXByZXNzb3IoKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGluaXQoKTsKKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGUgYSBUdXJib0pQRUcgY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSB1bmNvbXByZXNzZWQKKyAgICogc291cmNlIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5zcmNJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZAorICAgKiBpbnN0YW5jZS4KKyAgICoKKyAgICogQHBhcmFtIHNyY0ltYWdlIHNlZSB7QGxpbmsgI3NldFNvdXJjZUltYWdlfSBmb3IgZGVzY3JpcHRpb24KKyAgICoKKyAgICogQHBhcmFtIHggc2VlIHtAbGluayAjc2V0U291cmNlSW1hZ2V9IGZvciBkZXNjcmlwdGlvbgorICAgKgorICAgKiBAcGFyYW0geSBzZWUge0BsaW5rICNzZXRTb3VyY2VJbWFnZX0gZm9yIGRlc2NyaXB0aW9uCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCBzZWUge0BsaW5rICNzZXRTb3VyY2VJbWFnZX0gZm9yIGRlc2NyaXB0aW9uCisgICAqCisgICAqIEBwYXJhbSBwaXRjaCBzZWUge0BsaW5rICNzZXRTb3VyY2VJbWFnZX0gZm9yIGRlc2NyaXB0aW9uCisgICAqCisgICAqIEBwYXJhbSBoZWlnaHQgc2VlIHtAbGluayAjc2V0U291cmNlSW1hZ2V9IGZvciBkZXNjcmlwdGlvbgorICAgKgorICAgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKG9uZSBvZgorICAgKiB7QGxpbmsgVEojUEZfUkdCIFRKLlBGXyp9KQorICAgKi8KKyAgcHVibGljIFRKQ29tcHJlc3NvcihieXRlW10gc3JjSW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0KSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIHNldFNvdXJjZUltYWdlKHNyY0ltYWdlLCB4LCB5LCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQpOworICB9CisKKyAgLyoqCisgICAqIEBkZXByZWNhdGVkIFVzZQorICAgKiB7QGxpbmsgI1RKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfSBpbnN0ZWFkLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyBUSkNvbXByZXNzb3IoYnl0ZVtdIHNyY0ltYWdlLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgc2V0U291cmNlSW1hZ2Uoc3JjSW1hZ2UsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCk7CisgIH0KKworICAvKioKKyAgICogQ3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgdW5jb21wcmVzc2VkCisgICAqIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+c3JjSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQKKyAgICogaW5zdGFuY2UuCisgICAqCisgICAqIEBwYXJhbSBzcmNJbWFnZSBzZWUKKyAgICoge0BsaW5rICNzZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpfSBmb3IgZGVzY3JpcHRpb24KKyAgICoKKyAgICogQHBhcmFtIHggc2VlCisgICAqIHtAbGluayAjc2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KX0gZm9yIGRlc2NyaXB0aW9uCisgICAqCisgICAqIEBwYXJhbSB5IHNlZQorICAgKiB7QGxpbmsgI3NldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2UsIGludCwgaW50LCBpbnQsIGludCl9IGZvciBkZXNjcmlwdGlvbgorICAgKgorICAgKiBAcGFyYW0gd2lkdGggc2VlCisgICAqIHtAbGluayAjc2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KX0gZm9yIGRlc2NyaXB0aW9uCisgICAqCisgICAqIEBwYXJhbSBoZWlnaHQgc2VlCisgICAqIHtAbGluayAjc2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KX0gZm9yIGRlc2NyaXB0aW9uCisgICAqLworICBwdWJsaWMgVEpDb21wcmVzc29yKEJ1ZmZlcmVkSW1hZ2Ugc3JjSW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgc2V0U291cmNlSW1hZ2Uoc3JjSW1hZ2UsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICB9CisKKyAgLyoqCisgICAqIEFzc29jaWF0ZSBhbiB1bmNvbXByZXNzZWQgUkdCLCBncmF5c2NhbGUsIG9yIENNWUsgc291cmNlIGltYWdlIHdpdGggdGhpcworICAgKiBjb21wcmVzc29yIGluc3RhbmNlLgorICAgKgorICAgKiBAcGFyYW0gc3JjSW1hZ2UgaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgUkdCLCBncmF5c2NhbGUsIG9yIENNWUsgcGl4ZWxzIHRvCisgICAqIGJlIGNvbXByZXNzZWQgb3IgZW5jb2RlZC4gIFRoaXMgYnVmZmVyIGlzIG5vdCBtb2RpZmllZC4KKyAgICoKKyAgICogQHBhcmFtIHggeCBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20gd2hpY2gKKyAgICogdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQKKyAgICoKKyAgICogQHBhcmFtIHkgeSBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20gd2hpY2gKKyAgICogdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQKKyAgICoKKyAgICogQHBhcmFtIHdpZHRoIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgICAqIHdoaWNoIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkCisgICAqCisgICAqIEBwYXJhbSBwaXRjaCBieXRlcyBwZXIgbGluZSBvZiB0aGUgc291cmNlIGltYWdlLiAgTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlCisgICAqIDxjb2RlPndpZHRoICogVEoucGl4ZWxTaXplKHBpeGVsRm9ybWF0KTwvY29kZT4gaWYgdGhlIHNvdXJjZSBpbWFnZSBpcworICAgKiB1bnBhZGRlZCwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIHRvLCBmb3IgaW5zdGFuY2UsIHNwZWNpZnkgdGhhdAorICAgKiB0aGUgc2NhbmxpbmVzIGluIHRoZSBzb3VyY2UgaW1hZ2UgYXJlIHBhZGRlZCB0byBhIDQtYnl0ZSBib3VuZGFyeSBvciB0bworICAgKiBjb21wcmVzcy9lbmNvZGUgYSBKUEVHIG9yIFlVViBpbWFnZSBmcm9tIGEgcmVnaW9uIG9mIGEgbGFyZ2VyIHNvdXJjZQorICAgKiBpbWFnZS4gIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuCisgICAqIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvCisgICAqIDxjb2RlPndpZHRoICogVEoucGl4ZWxTaXplKHBpeGVsRm9ybWF0KTwvY29kZT4uCisgICAqCisgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgICAqIHdoaWNoIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkCisgICAqCisgICAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwaXhlbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBpbWFnZSAob25lIG9mCisgICAqIHtAbGluayBUSiNQRl9SR0IgVEouUEZfKn0pCisgICAqLworICBwdWJsaWMgdm9pZCBzZXRTb3VyY2VJbWFnZShieXRlW10gc3JjSW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBpZiAoaGFuZGxlID09IDApIGluaXQoKTsKKyAgICBpZiAoc3JjSW1hZ2UgPT0gbnVsbCB8fCB4IDwgMCB8fCB5IDwgMCB8fCB3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSB8fAorICAgICAgICBwaXRjaCA8IDAgfHwgcGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IFRKLk5VTVBGKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBzZXRTb3VyY2VJbWFnZSgpIik7CisgICAgc3JjQnVmID0gc3JjSW1hZ2U7CisgICAgc3JjV2lkdGggPSB3aWR0aDsKKyAgICBpZiAocGl0Y2ggPT0gMCkKKyAgICAgIHNyY1BpdGNoID0gd2lkdGggKiBUSi5nZXRQaXhlbFNpemUocGl4ZWxGb3JtYXQpOworICAgIGVsc2UKKyAgICAgIHNyY1BpdGNoID0gcGl0Y2g7CisgICAgc3JjSGVpZ2h0ID0gaGVpZ2h0OworICAgIHNyY1BpeGVsRm9ybWF0ID0gcGl4ZWxGb3JtYXQ7CisgICAgc3JjWCA9IHg7CisgICAgc3JjWSA9IHk7CisgICAgc3JjQnVmSW50ID0gbnVsbDsKKyAgICBzcmNZVVZJbWFnZSA9IG51bGw7CisgIH0KKworICAvKioKKyAgICogQGRlcHJlY2F0ZWQgVXNlCisgICAqIHtAbGluayAjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KX0gaW5zdGVhZC4KKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkphdmFkb2NNZXRob2QiKQorICBARGVwcmVjYXRlZAorICBwdWJsaWMgdm9pZCBzZXRTb3VyY2VJbWFnZShieXRlW10gc3JjSW1hZ2UsIGludCB3aWR0aCwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgc2V0U291cmNlSW1hZ2Uoc3JjSW1hZ2UsIDAsIDAsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCk7CisgICAgc3JjWCA9IHNyY1kgPSAtMTsKKyAgfQorCisgIC8qKgorICAgKiBBc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIFJHQiBvciBncmF5c2NhbGUgc291cmNlIGltYWdlIHdpdGggdGhpcworICAgKiBjb21wcmVzc29yIGluc3RhbmNlLgorICAgKgorICAgKiBAcGFyYW0gc3JjSW1hZ2UgYSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIFJHQiBvcgorICAgKiBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGNvbXByZXNzZWQgb3IgZW5jb2RlZC4gIFRoaXMgaW1hZ2UgaXMgbm90IG1vZGlmaWVkLgorICAgKgorICAgKiBAcGFyYW0geCB4IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgaW1hZ2UgZnJvbSB3aGljaAorICAgKiB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZAorICAgKgorICAgKiBAcGFyYW0geSB5IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgaW1hZ2UgZnJvbSB3aGljaAorICAgKiB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZAorICAgKgorICAgKiBAcGFyYW0gd2lkdGggd2lkdGggKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgc291cmNlIGltYWdlIGZyb20KKyAgICogd2hpY2ggdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQgKDAgPSB1c2UgdGhlCisgICAqIHdpZHRoIG9mIHRoZSBzb3VyY2UgaW1hZ2UpCisgICAqCisgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgICAqIHdoaWNoIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkICgwID0gdXNlIHRoZQorICAgKiBoZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZSkKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldFNvdXJjZUltYWdlKEJ1ZmZlcmVkSW1hZ2Ugc3JjSW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGlmIChoYW5kbGUgPT0gMCkgaW5pdCgpOworICAgIGlmIChzcmNJbWFnZSA9PSBudWxsIHx8IHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBzZXRTb3VyY2VJbWFnZSgpIik7CisgICAgc3JjWCA9IHg7CisgICAgc3JjWSA9IHk7CisgICAgc3JjV2lkdGggPSAod2lkdGggPT0gMCkgPyBzcmNJbWFnZS5nZXRXaWR0aCgpIDogd2lkdGg7CisgICAgc3JjSGVpZ2h0ID0gKGhlaWdodCA9PSAwKSA/IHNyY0ltYWdlLmdldEhlaWdodCgpIDogaGVpZ2h0OworICAgIGlmICh4ICsgd2lkdGggPiBzcmNJbWFnZS5nZXRXaWR0aCgpIHx8IHkgKyBoZWlnaHQgPiBzcmNJbWFnZS5nZXRIZWlnaHQoKSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvbXByZXNzaW9uIHJlZ2lvbiBleGNlZWRzIHRoZSBib3VuZHMgb2YgdGhlIHNvdXJjZSBpbWFnZSIpOworCisgICAgaW50IHBpeGVsRm9ybWF0OworICAgIGJvb2xlYW4gaW50UGl4ZWxzID0gZmFsc2U7CisgICAgaWYgKGJ5dGVPcmRlciA9PSBudWxsKQorICAgICAgYnl0ZU9yZGVyID0gQnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCk7CisgICAgc3dpdGNoIChzcmNJbWFnZS5nZXRUeXBlKCkpIHsKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV8zQllURV9CR1I6CisgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0JHUjsgIGJyZWFrOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzRCWVRFX0FCR1I6CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfNEJZVEVfQUJHUl9QUkU6CisgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hCR1I7ICBicmVhazsKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9CWVRFX0dSQVk6CisgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0dSQVk7ICBicmVhazsKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQkdSOgorICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgcGl4ZWxGb3JtYXQgPSBUSi5QRl9YQkdSOworICAgICAgZWxzZQorICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1JHQlg7CisgICAgICBpbnRQaXhlbHMgPSB0cnVlOyAgYnJlYWs7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQjoKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjoKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQl9QUkU6CisgICAgICBpZiAoYnl0ZU9yZGVyID09IEJ5dGVPcmRlci5CSUdfRU5ESUFOKQorICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hSR0I7CisgICAgICBlbHNlCisgICAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfQkdSWDsKKyAgICAgIGludFBpeGVscyA9IHRydWU7ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgQnVmZmVyZWRJbWFnZSBmb3JtYXQiKTsKKyAgICB9CisgICAgc3JjUGl4ZWxGb3JtYXQgPSBwaXhlbEZvcm1hdDsKKworICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gc3JjSW1hZ2UuZ2V0UmFzdGVyKCk7CisgICAgaWYgKGludFBpeGVscykgeworICAgICAgU2luZ2xlUGl4ZWxQYWNrZWRTYW1wbGVNb2RlbCBzbSA9CisgICAgICAgIChTaW5nbGVQaXhlbFBhY2tlZFNhbXBsZU1vZGVsKXNyY0ltYWdlLmdldFNhbXBsZU1vZGVsKCk7CisgICAgICBzcmNTdHJpZGUgPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOworICAgICAgRGF0YUJ1ZmZlckludCBkYiA9IChEYXRhQnVmZmVySW50KXdyLmdldERhdGFCdWZmZXIoKTsKKyAgICAgIHNyY0J1ZkludCA9IGRiLmdldERhdGEoKTsKKyAgICAgIHNyY0J1ZiA9IG51bGw7CisgICAgfSBlbHNlIHsKKyAgICAgIENvbXBvbmVudFNhbXBsZU1vZGVsIHNtID0KKyAgICAgICAgKENvbXBvbmVudFNhbXBsZU1vZGVsKXNyY0ltYWdlLmdldFNhbXBsZU1vZGVsKCk7CisgICAgICBpbnQgcGl4ZWxTaXplID0gc20uZ2V0UGl4ZWxTdHJpZGUoKTsKKyAgICAgIGlmIChwaXhlbFNpemUgIT0gVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KSkKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHBpeGVsIGZvcm1hdCBhbmQgcGl4ZWwgc2l6ZSBpbiBCdWZmZXJlZEltYWdlIik7CisgICAgICBzcmNQaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CisgICAgICBEYXRhQnVmZmVyQnl0ZSBkYiA9IChEYXRhQnVmZmVyQnl0ZSl3ci5nZXREYXRhQnVmZmVyKCk7CisgICAgICBzcmNCdWYgPSBkYi5nZXREYXRhKCk7CisgICAgICBzcmNCdWZJbnQgPSBudWxsOworICAgIH0KKyAgICBzcmNZVVZJbWFnZSA9IG51bGw7CisgIH0KKworICAvKioKKyAgICogQXNzb2NpYXRlIGFuIHVuY29tcHJlc3NlZCBZVVYgcGxhbmFyIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMgY29tcHJlc3NvcgorICAgKiBpbnN0YW5jZS4KKyAgICoKKyAgICogQHBhcmFtIHNyY0ltYWdlIFlVViBwbGFuYXIgaW1hZ2UgdG8gYmUgY29tcHJlc3NlZC4gIFRoaXMgaW1hZ2UgaXMgbm90CisgICAqIG1vZGlmaWVkLgorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0U291cmNlSW1hZ2UoWVVWSW1hZ2Ugc3JjSW1hZ2UpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGhhbmRsZSA9PSAwKSBpbml0KCk7CisgICAgaWYgKHNyY0ltYWdlID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIHNldFNvdXJjZUltYWdlKCkiKTsKKyAgICBzcmNZVVZJbWFnZSA9IHNyY0ltYWdlOworICAgIHNyY0J1ZiA9IG51bGw7CisgICAgc3JjQnVmSW50ID0gbnVsbDsKKyAgfQorCisgIC8qKgorICAgKiBTZXQgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGZvciBzdWJzZXF1ZW50IGNvbXByZXNzL2VuY29kZQorICAgKiBvcGVyYXRpb25zLiAgV2hlbiBwaXhlbHMgYXJlIGNvbnZlcnRlZCBmcm9tIFJHQiB0byBZQ2JDciAoc2VlCisgICAqIHtAbGluayBUSiNDU19ZQ2JDcn0pIG9yIGZyb20gQ01ZSyB0byBZQ0NLIChzZWUge0BsaW5rIFRKI0NTX1lDQ0t9KSBhcyBwYXJ0CisgICAqIG9mIHRoZSBKUEVHIGNvbXByZXNzaW9uIHByb2Nlc3MsIHNvbWUgb2YgdGhlIENiIGFuZCBDciAoY2hyb21pbmFuY2UpCisgICAqIGNvbXBvbmVudHMgY2FuIGJlIGRpc2NhcmRlZCBvciBhdmVyYWdlZCB0b2dldGhlciB0byBwcm9kdWNlIGEgc21hbGxlcgorICAgKiBpbWFnZSB3aXRoIGxpdHRsZSBwZXJjZXB0aWJsZSBsb3NzIG9mIGltYWdlIGNsYXJpdHkgKHRoZSBodW1hbiBleWUgaXMgbW9yZQorICAgKiBzZW5zaXRpdmUgdG8gc21hbGwgY2hhbmdlcyBpbiBicmlnaHRuZXNzIHRoYW4gdG8gc21hbGwgY2hhbmdlcyBpbiBjb2xvci4pCisgICAqIFRoaXMgaXMgY2FsbGVkICJjaHJvbWluYW5jZSBzdWJzYW1wbGluZyIuCisgICAqIDxwPgorICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IHdoZW4gY29tcHJlc3NpbmcgYSBKUEVHIGltYWdlIGZyb20gYSBZVVYKKyAgICogcGxhbmFyIHNvdXJjZS4gIEluIHRoYXQgY2FzZSwgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGluCisgICAqIHRoZSBKUEVHIGltYWdlIGlzIGRldGVybWluZWQgYnkgdGhlIHNvdXJjZS4gIEZ1cnRoZXJtb3JlLCB0aGlzIG1ldGhvZCBoYXMKKyAgICogbm8gZWZmZWN0IHdoZW4gZW5jb2RpbmcgdG8gYSBwcmUtYWxsb2NhdGVkIHtAbGluayBZVVZJbWFnZX0gaW5zdGFuY2UuICBJbgorICAgKiB0aGF0IGNhc2UsIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorICAgKiBkZXN0aW5hdGlvbi4KKyAgICoKKyAgICogQHBhcmFtIG5ld1N1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIHVzZSBpbgorICAgKiBzdWJzZXF1ZW50IGNvbXByZXNzL2VuY29kZSBvZXByYXRpb25zIChvbmUgb2YKKyAgICoge0BsaW5rIFRKI1NBTVBfNDQ0IFRKLlNBTVBfKn0pCisgICAqLworICBwdWJsaWMgdm9pZCBzZXRTdWJzYW1wKGludCBuZXdTdWJzYW1wKSB7CisgICAgaWYgKG5ld1N1YnNhbXAgPCAwIHx8IG5ld1N1YnNhbXAgPj0gVEouTlVNU0FNUCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gc2V0U3Vic2FtcCgpIik7CisgICAgc3Vic2FtcCA9IG5ld1N1YnNhbXA7CisgIH0KKworICAvKioKKyAgICogU2V0IHRoZSBKUEVHIGltYWdlIHF1YWxpdHkgbGV2ZWwgZm9yIHN1YnNlcXVlbnQgY29tcHJlc3Mgb3BlcmF0aW9ucy4KKyAgICoKKyAgICogQHBhcmFtIHF1YWxpdHkgdGhlIG5ldyBKUEVHIGltYWdlIHF1YWxpdHkgbGV2ZWwgKDEgdG8gMTAwLCAxID0gd29yc3QsCisgICAqIDEwMCA9IGJlc3QpCisgICAqLworICBwdWJsaWMgdm9pZCBzZXRKUEVHUXVhbGl0eShpbnQgcXVhbGl0eSkgeworICAgIGlmIChxdWFsaXR5IDwgMSB8fCBxdWFsaXR5ID4gMTAwKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBzZXRKUEVHUXVhbGl0eSgpIik7CisgICAganBlZ1F1YWxpdHkgPSBxdWFsaXR5OworICB9CisKKyAgLyoqCisgICAqIENvbXByZXNzIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyAgICogaW5zdGFuY2UgYW5kIG91dHB1dCBhIEpQRUcgaW1hZ2UgdG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAgICoKKyAgICogQHBhcmFtIGRzdEJ1ZiBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIEpQRUcgaW1hZ2UuICBVc2UKKyAgICoge0BsaW5rIFRKI2J1ZlNpemV9IHRvIGRldGVybWluZSB0aGUgbWF4aW11bSBzaXplIGZvciB0aGlzIGJ1ZmZlciBiYXNlZCBvbgorICAgKiB0aGUgc291cmNlIGltYWdlJ3Mgd2lkdGggYW5kIGhlaWdodCBhbmQgdGhlIGRlc2lyZWQgbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyAgICogc3Vic2FtcGxpbmcuCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqLworICBwdWJsaWMgdm9pZCBjb21wcmVzcyhieXRlW10gZHN0QnVmLCBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGRzdEJ1ZiA9PSBudWxsIHx8IGZsYWdzIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gY29tcHJlc3MoKSIpOworICAgIGlmIChzcmNCdWYgPT0gbnVsbCAmJiBzcmNCdWZJbnQgPT0gbnVsbCAmJiBzcmNZVVZJbWFnZSA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKGpwZWdRdWFsaXR5IDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkpQRUcgUXVhbGl0eSBub3Qgc2V0Iik7CisgICAgaWYgKHN1YnNhbXAgPCAwICYmIHNyY1lVVkltYWdlID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTdWJzYW1wbGluZyBsZXZlbCBub3Qgc2V0Iik7CisKKyAgICBpZiAoc3JjWVVWSW1hZ2UgIT0gbnVsbCkKKyAgICAgIGNvbXByZXNzZWRTaXplID0gY29tcHJlc3NGcm9tWVVWKHNyY1lVVkltYWdlLmdldFBsYW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWVVWSW1hZ2UuZ2V0T2Zmc2V0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWVVWSW1hZ2UuZ2V0V2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1lVVkltYWdlLmdldFN0cmlkZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1lVVkltYWdlLmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWVVWSW1hZ2UuZ2V0U3Vic2FtcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QnVmLCBqcGVnUXVhbGl0eSwgZmxhZ3MpOworICAgIGVsc2UgaWYgKHNyY0J1ZiAhPSBudWxsKSB7CisgICAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCkKKyAgICAgICAgY29tcHJlc3NlZFNpemUgPSBjb21wcmVzcyhzcmNCdWYsIHNyY1gsIHNyY1ksIHNyY1dpZHRoLCBzcmNQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNIZWlnaHQsIHNyY1BpeGVsRm9ybWF0LCBkc3RCdWYsIHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ1F1YWxpdHksIGZsYWdzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgY29tcHJlc3NlZFNpemUgPSBjb21wcmVzcyhzcmNCdWYsIHNyY1dpZHRoLCBzcmNQaXRjaCwgc3JjSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BpeGVsRm9ybWF0LCBkc3RCdWYsIHN1YnNhbXAsIGpwZWdRdWFsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICB9IGVsc2UgaWYgKHNyY0J1ZkludCAhPSBudWxsKSB7CisgICAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCkKKyAgICAgICAgY29tcHJlc3NlZFNpemUgPSBjb21wcmVzcyhzcmNCdWZJbnQsIHNyY1gsIHNyY1ksIHNyY1dpZHRoLCBzcmNTdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjSGVpZ2h0LCBzcmNQaXhlbEZvcm1hdCwgZHN0QnVmLCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdRdWFsaXR5LCBmbGFncyk7CisgICAgICBlbHNlCisgICAgICAgIGNvbXByZXNzZWRTaXplID0gY29tcHJlc3Moc3JjQnVmSW50LCBzcmNXaWR0aCwgc3JjU3RyaWRlLCBzcmNIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGl4ZWxGb3JtYXQsIGRzdEJ1Ziwgc3Vic2FtcCwganBlZ1F1YWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDb21wcmVzcyB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yCisgICAqIGluc3RhbmNlIGFuZCByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyBhIEpQRUcgaW1hZ2UuCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqCisgICAqIEByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyBhIEpQRUcgaW1hZ2UuICBUaGUgbGVuZ3RoIG9mIHRoaXMgYnVmZmVyIHdpbGwKKyAgICogbm90IGJlIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiAgVXNlIHtAbGluaworICAgKiAjZ2V0Q29tcHJlc3NlZFNpemV9IHRvIG9idGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4KKyAgICovCisgIHB1YmxpYyBieXRlW10gY29tcHJlc3MoaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGNoZWNrU291cmNlSW1hZ2UoKTsKKyAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbVEouYnVmU2l6ZShzcmNXaWR0aCwgc3JjSGVpZ2h0LCBzdWJzYW1wKV07CisgICAgY29tcHJlc3MoYnVmLCBmbGFncyk7CisgICAgcmV0dXJuIGJ1ZjsKKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2UKKyAgICoge0BsaW5rICNzZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpfSBhbmQKKyAgICoge0BsaW5rICNjb21wcmVzcyhieXRlW10sIGludCl9IGluc3RlYWQuCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgQERlcHJlY2F0ZWQKKyAgcHVibGljIHZvaWQgY29tcHJlc3MoQnVmZmVyZWRJbWFnZSBzcmNJbWFnZSwgYnl0ZVtdIGRzdEJ1ZiwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIHNldFNvdXJjZUltYWdlKHNyY0ltYWdlLCAwLCAwLCAwLCAwKTsKKyAgICBjb21wcmVzcyhkc3RCdWYsIGZsYWdzKTsKKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2UKKyAgICoge0BsaW5rICNzZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpfSBhbmQKKyAgICoge0BsaW5rICNjb21wcmVzcyhpbnQpfSBpbnN0ZWFkLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyBieXRlW10gY29tcHJlc3MoQnVmZmVyZWRJbWFnZSBzcmNJbWFnZSwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgc2V0U291cmNlSW1hZ2Uoc3JjSW1hZ2UsIDAsIDAsIDAsIDApOworICAgIHJldHVybiBjb21wcmVzcyhmbGFncyk7CisgIH0KKworICAvKioKKyAgICogRW5jb2RlIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXByZXNzb3IKKyAgICogaW5zdGFuY2UgaW50byBhIFlVViBwbGFuYXIgaW1hZ2UgYW5kIHN0b3JlIGl0IGluIHRoZSBnaXZlbgorICAgKiA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UuICAgVGhpcyBtZXRob2QgdXNlcyB0aGUgYWNjZWxlcmF0ZWQgY29sb3IKKyAgICogY29udmVyc2lvbiByb3V0aW5lcyBpbiBUdXJib0pQRUcncyB1bmRlcmx5aW5nIGNvZGVjIGJ1dCBkb2VzIG5vdCBleGVjdXRlCisgICAqIGFueSBvZiB0aGUgb3RoZXIgc3RlcHMgaW4gdGhlIEpQRUcgY29tcHJlc3Npb24gcHJvY2Vzcy4gIEVuY29kaW5nCisgICAqIENNWUsgc291cmNlIGltYWdlcyB0byBZVVYgaXMgbm90IHN1cHBvcnRlZC4KKyAgICoKKyAgICogQHBhcmFtIGRzdEltYWdlIHtAbGluayBZVVZJbWFnZX0gaW5zdGFuY2UgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFlVViBwbGFuYXIKKyAgICogaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KKyAgICovCisgIHB1YmxpYyB2b2lkIGVuY29kZVlVVihZVVZJbWFnZSBkc3RJbWFnZSwgaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGlmIChkc3RJbWFnZSA9PSBudWxsIHx8IGZsYWdzIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZW5jb2RlWVVWKCkiKTsKKyAgICBpZiAoc3JjQnVmID09IG51bGwgJiYgc3JjQnVmSW50ID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoc3JjWVVWSW1hZ2UgIT0gbnVsbCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlNvdXJjZSBpbWFnZSBpcyBub3QgY29ycmVjdCB0eXBlIik7CisgICAgY2hlY2tTdWJzYW1wbGluZygpOworICAgIGlmIChzcmNXaWR0aCAhPSBkc3RJbWFnZS5nZXRXaWR0aCgpIHx8IHNyY0hlaWdodCAhPSBkc3RJbWFnZS5nZXRIZWlnaHQoKSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkRlc3RpbmF0aW9uIGltYWdlIGlzIHRoZSB3cm9uZyBzaXplIik7CisKKyAgICBpZiAoc3JjQnVmSW50ICE9IG51bGwpIHsKKyAgICAgIGVuY29kZVlVVihzcmNCdWZJbnQsIHNyY1gsIHNyY1ksIHNyY1dpZHRoLCBzcmNTdHJpZGUsIHNyY0hlaWdodCwKKyAgICAgICAgICAgICAgICBzcmNQaXhlbEZvcm1hdCwgZHN0SW1hZ2UuZ2V0UGxhbmVzKCksIGRzdEltYWdlLmdldE9mZnNldHMoKSwKKyAgICAgICAgICAgICAgICBkc3RJbWFnZS5nZXRTdHJpZGVzKCksIGRzdEltYWdlLmdldFN1YnNhbXAoKSwgZmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICBlbmNvZGVZVVYoc3JjQnVmLCBzcmNYLCBzcmNZLCBzcmNXaWR0aCwgc3JjUGl0Y2gsIHNyY0hlaWdodCwKKyAgICAgICAgICAgICAgICBzcmNQaXhlbEZvcm1hdCwgZHN0SW1hZ2UuZ2V0UGxhbmVzKCksIGRzdEltYWdlLmdldE9mZnNldHMoKSwKKyAgICAgICAgICAgICAgICBkc3RJbWFnZS5nZXRTdHJpZGVzKCksIGRzdEltYWdlLmdldFN1YnNhbXAoKSwgZmxhZ3MpOworICAgIH0KKyAgICBjb21wcmVzc2VkU2l6ZSA9IDA7CisgIH0KKworICAvKioKKyAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjZW5jb2RlWVVWKFlVVkltYWdlLCBpbnQpfSBpbnN0ZWFkLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyB2b2lkIGVuY29kZVlVVihieXRlW10gZHN0QnVmLCBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGRzdEJ1ZiA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBlbmNvZGVZVVYoKSIpOworICAgIGNoZWNrU291cmNlSW1hZ2UoKTsKKyAgICBjaGVja1N1YnNhbXBsaW5nKCk7CisgICAgWVVWSW1hZ2UgZHN0WVVWSW1hZ2UgPSBuZXcgWVVWSW1hZ2UoZHN0QnVmLCBzcmNXaWR0aCwgNCwgc3JjSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXApOworICAgIGVuY29kZVlVVihkc3RZVVZJbWFnZSwgZmxhZ3MpOworICB9CisKKyAgLyoqCisgICAqIEVuY29kZSB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yCisgICAqIGluc3RhbmNlIGludG8gYSB1bmlmaWVkIFlVViBwbGFuYXIgaW1hZ2UgYnVmZmVyIGFuZCByZXR1cm4gYQorICAgKiA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZW5jb2RlZCBpbWFnZS4gIFRoaXMgbWV0aG9kCisgICAqIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yIGNvbnZlcnNpb24gcm91dGluZXMgaW4gVHVyYm9KUEVHJ3MgdW5kZXJseWluZworICAgKiBjb2RlYyBidXQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgb2YgdGhlIG90aGVyIHN0ZXBzIGluIHRoZSBKUEVHIGNvbXByZXNzaW9uCisgICAqIHByb2Nlc3MuICBFbmNvZGluZyBDTVlLIHNvdXJjZSBpbWFnZXMgdG8gWVVWIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAqCisgICAqIEBwYXJhbSBwYWQgdGhlIHdpZHRoIG9mIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBZVVYgaW1hZ2Ugd2lsbCBiZQorICAgKiBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhpcyBudW1iZXIgb2YgYnl0ZXMgKG11c3QgYmUgYSBwb3dlciBvZgorICAgKiAyLikKKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KKyAgICoKKyAgICogQHJldHVybiBhIFlVViBwbGFuYXIgaW1hZ2UuCisgICAqLworICBwdWJsaWMgWVVWSW1hZ2UgZW5jb2RlWVVWKGludCBwYWQsIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBjaGVja1NvdXJjZUltYWdlKCk7CisgICAgY2hlY2tTdWJzYW1wbGluZygpOworICAgIGlmIChwYWQgPCAxIHx8ICgocGFkICYgKHBhZCAtIDEpKSAhPSAwKSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZW5jb2RlWVVWKCkiKTsKKyAgICBZVVZJbWFnZSBkc3RZVVZJbWFnZSA9IG5ldyBZVVZJbWFnZShzcmNXaWR0aCwgcGFkLCBzcmNIZWlnaHQsIHN1YnNhbXApOworICAgIGVuY29kZVlVVihkc3RZVVZJbWFnZSwgZmxhZ3MpOworICAgIHJldHVybiBkc3RZVVZJbWFnZTsKKyAgfQorCisgIC8qKgorICAgKiBFbmNvZGUgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvcgorICAgKiBpbnN0YW5jZSBpbnRvIHNlcGFyYXRlIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgYW5kIHJldHVybiBhCisgICAqIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBlbmNvZGVkIGltYWdlIHBsYW5lcy4gIFRoaXMKKyAgICogbWV0aG9kIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yIGNvbnZlcnNpb24gcm91dGluZXMgaW4gVHVyYm9KUEVHJ3MKKyAgICogdW5kZXJseWluZyBjb2RlYyBidXQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgb2YgdGhlIG90aGVyIHN0ZXBzIGluIHRoZSBKUEVHCisgICAqIGNvbXByZXNzaW9uIHByb2Nlc3MuICBFbmNvZGluZyBDTVlLIHNvdXJjZSBpbWFnZXMgdG8gWVVWIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAqCisgICAqIEBwYXJhbSBzdHJpZGVzIGFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcworICAgKiBwZXIgbGluZSBpbiB0aGUgY29ycmVzcG9uZGluZyBwbGFuZSBvZiB0aGUgb3V0cHV0IGltYWdlLiAgU2V0dGluZyB0aGUKKyAgICogc3RyaWRlIGZvciBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBjb21wb25lbnQgd2lkdGgKKyAgICogb2YgdGhlIHBsYW5lLiAgSWYgPGNvZGU+c3RyaWRlczwvY29kZT4gaXMgbnVsbCwgdGhlbiB0aGUgc3RyaWRlcyBmb3IgYWxsCisgICAqIHBsYW5lcyB3aWxsIGJlIHNldCB0byB0aGVpciByZXNwZWN0aXZlIGNvbXBvbmVudCB3aWR0aHMuICBZb3UgY2FuIGFkanVzdAorICAgKiB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBsaW5lIHBhZGRpbmcgdG8gZWFjaAorICAgKiBwbGFuZS4KKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KKyAgICoKKyAgICogQHJldHVybiBhIFlVViBwbGFuYXIgaW1hZ2UuCisgICAqLworICBwdWJsaWMgWVVWSW1hZ2UgZW5jb2RlWVVWKGludFtdIHN0cmlkZXMsIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBjaGVja1NvdXJjZUltYWdlKCk7CisgICAgY2hlY2tTdWJzYW1wbGluZygpOworICAgIFlVVkltYWdlIGRzdFlVVkltYWdlID0gbmV3IFlVVkltYWdlKHNyY1dpZHRoLCBzdHJpZGVzLCBzcmNIZWlnaHQsIHN1YnNhbXApOworICAgIGVuY29kZVlVVihkc3RZVVZJbWFnZSwgZmxhZ3MpOworICAgIHJldHVybiBkc3RZVVZJbWFnZTsKKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNlbmNvZGVZVVYoaW50LCBpbnQpfSBpbnN0ZWFkLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyBieXRlW10gZW5jb2RlWVVWKGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBjaGVja1NvdXJjZUltYWdlKCk7CisgICAgY2hlY2tTdWJzYW1wbGluZygpOworICAgIFlVVkltYWdlIGRzdFlVVkltYWdlID0gbmV3IFlVVkltYWdlKHNyY1dpZHRoLCA0LCBzcmNIZWlnaHQsIHN1YnNhbXApOworICAgIGVuY29kZVlVVihkc3RZVVZJbWFnZSwgZmxhZ3MpOworICAgIHJldHVybiBkc3RZVVZJbWFnZS5nZXRCdWYoKTsKKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2UKKyAgICoge0BsaW5rICNzZXRTb3VyY2VJbWFnZShCdWZmZXJlZEltYWdlLCBpbnQsIGludCwgaW50LCBpbnQpfSBhbmQKKyAgICoge0BsaW5rICNlbmNvZGVZVVYoYnl0ZVtdLCBpbnQpfSBpbnN0ZWFkLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyB2b2lkIGVuY29kZVlVVihCdWZmZXJlZEltYWdlIHNyY0ltYWdlLCBieXRlW10gZHN0QnVmLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIHNldFNvdXJjZUltYWdlKHNyY0ltYWdlLCAwLCAwLCAwLCAwKTsKKyAgICBlbmNvZGVZVVYoZHN0QnVmLCBmbGFncyk7CisgIH0KKworICAvKioKKyAgICogQGRlcHJlY2F0ZWQgVXNlCisgICAqIHtAbGluayAjc2V0U291cmNlSW1hZ2UoQnVmZmVyZWRJbWFnZSwgaW50LCBpbnQsIGludCwgaW50KX0gYW5kCisgICAqIHtAbGluayAjZW5jb2RlWVVWKGludCwgaW50KX0gaW5zdGVhZC4KKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkphdmFkb2NNZXRob2QiKQorICBARGVwcmVjYXRlZAorICBwdWJsaWMgYnl0ZVtdIGVuY29kZVlVVihCdWZmZXJlZEltYWdlIHNyY0ltYWdlLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgc2V0U291cmNlSW1hZ2Uoc3JjSW1hZ2UsIDAsIDAsIDAsIDApOworICAgIHJldHVybiBlbmNvZGVZVVYoZmxhZ3MpOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGltYWdlIChpbiBieXRlcykgZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudAorICAgKiBjb21wcmVzcyBvcGVyYXRpb24uCisgICAqCisgICAqIEByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGltYWdlIChpbiBieXRlcykgZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudAorICAgKiBjb21wcmVzcyBvcGVyYXRpb24uCisgICAqLworICBwdWJsaWMgaW50IGdldENvbXByZXNzZWRTaXplKCkgeworICAgIHJldHVybiBjb21wcmVzc2VkU2l6ZTsKKyAgfQorCisgIC8qKgorICAgKiBGcmVlIHRoZSBuYXRpdmUgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21wcmVzc29yIGluc3RhbmNlLgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBpZiAoaGFuZGxlICE9IDApCisgICAgICBkZXN0cm95KCk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpEZXNpZ25Gb3JFeHRlbnNpb24iKQorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICB0cnkgeworICAgICAgY2xvc2UoKTsKKyAgICB9IGNhdGNoIChUSkV4Y2VwdGlvbiBlKSB7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgfQorICB9OworCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgaW5pdCgpIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgLy8gSlBFRyBzaXplIGluIGJ5dGVzIGlzIHJldHVybmVkCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkhpZGRlbkZpZWxkIikKKyAgQERlcHJlY2F0ZWQKKyAgcHJpdmF0ZSBuYXRpdmUgaW50IGNvbXByZXNzKGJ5dGVbXSBzcmNCdWYsIGludCB3aWR0aCwgaW50IHBpdGNoLAorICAgIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgYnl0ZVtdIGpwZWdCdWYsIGludCBqcGVnU3Vic2FtcCwgaW50IGpwZWdRdWFsLAorICAgIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkhpZGRlbkZpZWxkIikKKyAgcHJpdmF0ZSBuYXRpdmUgaW50IGNvbXByZXNzKGJ5dGVbXSBzcmNCdWYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAorICAgIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10ganBlZ0J1ZiwgaW50IGpwZWdTdWJzYW1wLAorICAgIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SGlkZGVuRmllbGQiKQorICBARGVwcmVjYXRlZAorICBwcml2YXRlIG5hdGl2ZSBpbnQgY29tcHJlc3MoaW50W10gc3JjQnVmLCBpbnQgd2lkdGgsIGludCBzdHJpZGUsCisgICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10ganBlZ0J1ZiwgaW50IGpwZWdTdWJzYW1wLCBpbnQganBlZ1F1YWwsCisgICAgaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SGlkZGVuRmllbGQiKQorICBwcml2YXRlIG5hdGl2ZSBpbnQgY29tcHJlc3MoaW50W10gc3JjQnVmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwKKyAgICBpbnQgc3RyaWRlLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGJ5dGVbXSBqcGVnQnVmLCBpbnQganBlZ1N1YnNhbXAsCisgICAgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpIaWRkZW5GaWVsZCIpCisgIHByaXZhdGUgbmF0aXZlIGludCBjb21wcmVzc0Zyb21ZVVYoYnl0ZVtdW10gc3JjUGxhbmVzLCBpbnRbXSBzcmNPZmZzZXRzLAorICAgIGludCB3aWR0aCwgaW50W10gc3JjU3RyaWRlcywgaW50IGhlaWdodCwgaW50IHN1YnNhbXAsIGJ5dGVbXSBqcGVnQnVmLAorICAgIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKQorICAgIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpIaWRkZW5GaWVsZCIpCisgIEBEZXByZWNhdGVkCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgZW5jb2RlWVVWKGJ5dGVbXSBzcmNCdWYsIGludCB3aWR0aCwgaW50IHBpdGNoLAorICAgIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgYnl0ZVtdIGRzdEJ1ZiwgaW50IHN1YnNhbXAsIGludCBmbGFncykKKyAgICB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SGlkZGVuRmllbGQiKQorICBwcml2YXRlIG5hdGl2ZSB2b2lkIGVuY29kZVlVVihieXRlW10gc3JjQnVmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwKKyAgICBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgYnl0ZVtdW10gZHN0UGxhbmVzLAorICAgIGludFtdIGRzdE9mZnNldHMsIGludFtdIGRzdFN0cmlkZXMsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpCisgICAgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkhpZGRlbkZpZWxkIikKKyAgQERlcHJlY2F0ZWQKKyAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBlbmNvZGVZVVYoaW50W10gc3JjQnVmLCBpbnQgd2lkdGgsIGludCBzdHJpZGUsCisgICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0QnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKQorICAgIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpIaWRkZW5GaWVsZCIpCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgZW5jb2RlWVVWKGludFtdIHNyY0J1ZiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsCisgICAgaW50IHNyY1N0cmlkZSwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW11bXSBkc3RQbGFuZXMsCisgICAgaW50W10gZHN0T2Zmc2V0cywgaW50W10gZHN0U3RyaWRlcywgaW50IHN1YnNhbXAsIGludCBmbGFncykKKyAgICB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgc3RhdGljIHsKKyAgICBUSkxvYWRlci5sb2FkKCk7CisgIH0KKworICBwcml2YXRlIHZvaWQgY2hlY2tTb3VyY2VJbWFnZSgpIHsKKyAgICBpZiAoc3JjV2lkdGggPCAxIHx8IHNyY0hlaWdodCA8IDEpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgfQorCisgIHByaXZhdGUgdm9pZCBjaGVja1N1YnNhbXBsaW5nKCkgeworICAgIGlmIChzdWJzYW1wIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKKyAgfQorCisgIHByaXZhdGUgbG9uZyBoYW5kbGUgPSAwOworICBwcml2YXRlIGJ5dGVbXSBzcmNCdWYgPSBudWxsOworICBwcml2YXRlIGludFtdIHNyY0J1ZkludCA9IG51bGw7CisgIHByaXZhdGUgaW50IHNyY1dpZHRoID0gMDsKKyAgcHJpdmF0ZSBpbnQgc3JjSGVpZ2h0ID0gMDsKKyAgcHJpdmF0ZSBpbnQgc3JjWCA9IC0xOworICBwcml2YXRlIGludCBzcmNZID0gLTE7CisgIHByaXZhdGUgaW50IHNyY1BpdGNoID0gMDsKKyAgcHJpdmF0ZSBpbnQgc3JjU3RyaWRlID0gMDsKKyAgcHJpdmF0ZSBpbnQgc3JjUGl4ZWxGb3JtYXQgPSAtMTsKKyAgcHJpdmF0ZSBZVVZJbWFnZSBzcmNZVVZJbWFnZSA9IG51bGw7CisgIHByaXZhdGUgaW50IHN1YnNhbXAgPSAtMTsKKyAgcHJpdmF0ZSBpbnQganBlZ1F1YWxpdHkgPSAtMTsKKyAgcHJpdmF0ZSBpbnQgY29tcHJlc3NlZFNpemUgPSAwOworICBwcml2YXRlIGludCB5dXZQYWQgPSA0OworICBwcml2YXRlIEJ5dGVPcmRlciBieXRlT3JkZXIgPSBudWxsOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5qYXZhIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzQ1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmphdmEKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDExLCAyMDEzIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLm5pby4qOworCisvKioKKyAqIEN1c3RvbSBmaWx0ZXIgY2FsbGJhY2sgaW50ZXJmYWNlCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVEpDdXN0b21GaWx0ZXIgeworCisgIC8qKgorICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyCisgICAqIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3CisgICAqIEpQRUcgaW1hZ2UuICBUaGlzIGFsbG93cyBmb3IgY3VzdG9tIGZpbHRlcnMgb3Igb3RoZXIgdHJhbnNmb3JtYXRpb25zIHRvIGJlCisgICAqIGFwcGxpZWQgaW4gdGhlIGZyZXF1ZW5jeSBkb21haW4uCisgICAqCisgICAqIEBwYXJhbSBjb2VmZkJ1ZmZlciBhIGJ1ZmZlciBjb250YWluaW5nIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMuCisgICAqIChOT1RFOiB0aGlzIGJ1ZmZlciBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBvbmNlIHRoZSBjYWxsYmFjaworICAgKiByZXR1cm5zLCBzbyBhcHBsaWNhdGlvbnMgd2lzaGluZyB0byBoYW5kIG9mZiB0aGUgRENUIGNvZWZmaWNpZW50cyB0bworICAgKiBhbm90aGVyIGZ1bmN0aW9uIG9yIGxpYnJhcnkgc2hvdWxkIG1ha2UgYSBjb3B5IG9mIHRoZW0gd2l0aGluIHRoZSBib2R5IG9mCisgICAqIHRoZSBjYWxsYmFjay4pCisgICAqCisgICAqIEBwYXJhbSBidWZmZXJSZWdpb24gcmVjdGFuZ2xlIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKKyAgICogPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+IGFzIHdlbGwgYXMgaXRzIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgY29tcG9uZW50CisgICAqIHBsYW5lLiAgVHVyYm9KUEVHIGltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIHRvIHNwbGl0IGVhY2ggY29tcG9uZW50IHBsYW5lCisgICAqIGludG8gbXVsdGlwbGUgRENUIGNvZWZmaWNpZW50IGJ1ZmZlcnMgYW5kIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uY2UKKyAgICogZm9yIGVhY2ggYnVmZmVyLgorICAgKgorICAgKiBAcGFyYW0gcGxhbmVSZWdpb24gcmVjdGFuZ2xlIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlCisgICAqIGNvbXBvbmVudCBwbGFuZSB0byB3aGljaCA8Y29kZT5jb2VmZkJ1ZmZlcjwvY29kZT4gYmVsb25ncworICAgKgorICAgKiBAcGFyYW0gY29tcG9uZW50SUQgSUQgbnVtYmVyIG9mIHRoZSBjb21wb25lbnQgcGxhbmUgdG8gd2hpY2gKKyAgICogPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+IGJlbG9uZ3MgKFksIENiLCBhbmQgQ3IgaGF2ZSwgcmVzcGVjdGl2ZWx5LCBJRCdzCisgICAqIG9mIDAsIDEsIGFuZCAyIGluIHR5cGljYWwgSlBFRyBpbWFnZXMuKQorICAgKgorICAgKiBAcGFyYW0gdHJhbnNmb3JtSUQgSUQgbnVtYmVyIG9mIHRoZSB0cmFuc2Zvcm1lZCBpbWFnZSB0byB3aGljaAorICAgKiA8Y29kZT5jb2VmZkJ1ZmZlcjwvY29kZT4gYmVsb25ncy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGluZGV4IG9mIHRoZQorICAgKiB0cmFuc2Zvcm0gaW4gdGhlIDxjb2RlPnRyYW5zZm9ybXM8L2NvZGU+IGFycmF5IHRoYXQgd2FzIHBhc3NlZCB0byB7QGxpbmsKKyAgICogVEpUcmFuc2Zvcm1lciN0cmFuc2Zvcm0gVEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKX0uCisgICAqCisgICAqIEBwYXJhbSB0cmFuc2Zvcm0gYSB7QGxpbmsgVEpUcmFuc2Zvcm19IGluc3RhbmNlIHRoYXQgc3BlY2lmaWVzIHRoZQorICAgKiBwYXJhbWV0ZXJzIGFuZC9vciBjcm9wcGluZyByZWdpb24gZm9yIHRoaXMgdHJhbnNmb3JtCisgICAqLworICB2b2lkIGN1c3RvbUZpbHRlcihTaG9ydEJ1ZmZlciBjb2VmZkJ1ZmZlciwgUmVjdGFuZ2xlIGJ1ZmZlclJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgUmVjdGFuZ2xlIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SUQsIGludCB0cmFuc2Zvcm1JRCwKKyAgICAgICAgICAgICAgICAgICAgVEpUcmFuc2Zvcm0gdHJhbnNmb3JtKQorICAgIHRocm93cyBUSkV4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuamF2YSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE5ZmYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5qYXZhCkBAIC0wLDAgKzEsOTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxNSwgMjAxOCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTUgVmlrdG9yIFN6YXRobcOhcnkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzsKKworaW1wb3J0IGphdmEuYXd0LmltYWdlLio7CitpbXBvcnQgamF2YS5uaW8uKjsKK2ltcG9ydCBqYXZhLmlvLio7CisKKy8qKgorICogVHVyYm9KUEVHIGRlY29tcHJlc3NvcgorICovCitwdWJsaWMgY2xhc3MgVEpEZWNvbXByZXNzb3IgaW1wbGVtZW50cyBDbG9zZWFibGUgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19BU1NPQ19FUlJPUiA9CisgICAgIk5vIEpQRUcgaW1hZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UiOworCisgIC8qKgorICAgKiBDcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc3NvciBpbnN0YW5jZS4KKyAgICovCisgIHB1YmxpYyBUSkRlY29tcHJlc3NvcigpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaW5pdCgpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBzb3VyY2UKKyAgICogaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KKyAgICoKKyAgICogQHBhcmFtIGpwZWdJbWFnZSBKUEVHIGltYWdlIGJ1ZmZlciAoc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSBpcyBhc3N1bWVkIHRvCisgICAqIGJlIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LikgIFRoaXMgYnVmZmVyIGlzIG5vdCBtb2RpZmllZC4KKyAgICovCisgIHB1YmxpYyBUSkRlY29tcHJlc3NvcihieXRlW10ganBlZ0ltYWdlKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGluaXQoKTsKKyAgICBzZXRTb3VyY2VJbWFnZShqcGVnSW1hZ2UsIGpwZWdJbWFnZS5sZW5ndGgpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBzb3VyY2UKKyAgICogaW1hZ2Ugb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluCisgICAqIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KKyAgICoKKyAgICogQHBhcmFtIGpwZWdJbWFnZSBKUEVHIGltYWdlIGJ1ZmZlci4gIFRoaXMgYnVmZmVyIGlzIG5vdCBtb2RpZmllZC4KKyAgICoKKyAgICogQHBhcmFtIGltYWdlU2l6ZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykKKyAgICovCisgIHB1YmxpYyBUSkRlY29tcHJlc3NvcihieXRlW10ganBlZ0ltYWdlLCBpbnQgaW1hZ2VTaXplKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGluaXQoKTsKKyAgICBzZXRTb3VyY2VJbWFnZShqcGVnSW1hZ2UsIGltYWdlU2l6ZSk7CisgIH0KKworICAvKioKKyAgICogQ3JlYXRlIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBZVVYgcGxhbmFyCisgICAqIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+eXV2SW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQKKyAgICogaW5zdGFuY2UuCisgICAqCisgICAqIEBwYXJhbSB5dXZJbWFnZSB7QGxpbmsgWVVWSW1hZ2V9IGluc3RhbmNlIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyCisgICAqIGltYWdlIHRvIGJlIGRlY29kZWQuICBUaGlzIGltYWdlIGlzIG5vdCBtb2RpZmllZC4KKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkhpZGRlbkZpZWxkIikKKyAgcHVibGljIFRKRGVjb21wcmVzc29yKFlVVkltYWdlIHl1dkltYWdlKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGluaXQoKTsKKyAgICBzZXRTb3VyY2VJbWFnZSh5dXZJbWFnZSk7CisgIH0KKworICAvKioKKyAgICogQXNzb2NpYXRlIHRoZSBKUEVHIGltYWdlIG9mIGxlbmd0aCA8Y29kZT5pbWFnZVNpemU8L2NvZGU+IGJ5dGVzIHN0b3JlZCBpbgorICAgKiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuICBUaGlzIGltYWdlIHdpbGwKKyAgICogYmUgdXNlZCBhcyB0aGUgc291cmNlIGltYWdlIGZvciBzdWJzZXF1ZW50IGRlY29tcHJlc3Mgb3BlcmF0aW9ucy4KKyAgICoKKyAgICogQHBhcmFtIGpwZWdJbWFnZSBKUEVHIGltYWdlIGJ1ZmZlci4gIFRoaXMgYnVmZmVyIGlzIG5vdCBtb2RpZmllZC4KKyAgICoKKyAgICogQHBhcmFtIGltYWdlU2l6ZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldFNvdXJjZUltYWdlKGJ5dGVbXSBqcGVnSW1hZ2UsIGludCBpbWFnZVNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGpwZWdJbWFnZSA9PSBudWxsIHx8IGltYWdlU2l6ZSA8IDEpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIHNldFNvdXJjZUltYWdlKCkiKTsKKyAgICBqcGVnQnVmID0ganBlZ0ltYWdlOworICAgIGpwZWdCdWZTaXplID0gaW1hZ2VTaXplOworICAgIGRlY29tcHJlc3NIZWFkZXIoanBlZ0J1ZiwganBlZ0J1ZlNpemUpOworICAgIHl1dkltYWdlID0gbnVsbDsKKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCl9IGluc3RlYWQuCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgQERlcHJlY2F0ZWQKKyAgcHVibGljIHZvaWQgc2V0SlBFR0ltYWdlKGJ5dGVbXSBqcGVnSW1hZ2UsIGludCBpbWFnZVNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIHNldFNvdXJjZUltYWdlKGpwZWdJbWFnZSwgaW1hZ2VTaXplKTsKKyAgfQorCisgIC8qKgorICAgKiBBc3NvY2lhdGUgdGhlIHNwZWNpZmllZCBZVVYgcGxhbmFyIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMgZGVjb21wcmVzc29yCisgICAqIGluc3RhbmNlLiAgU3Vic2VxdWVudCBkZWNvbXByZXNzIG9wZXJhdGlvbnMgd2lsbCBkZWNvZGUgdGhpcyBpbWFnZSBpbnRvIGFuCisgICAqIFJHQiBvciBncmF5c2NhbGUgZGVzdGluYXRpb24gaW1hZ2UuCisgICAqCisgICAqIEBwYXJhbSBzcmNJbWFnZSB7QGxpbmsgWVVWSW1hZ2V9IGluc3RhbmNlIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlIHRvCisgICAqIGJlIGRlY29kZWQuICBUaGlzIGltYWdlIGlzIG5vdCBtb2RpZmllZC4KKyAgICovCisgIHB1YmxpYyB2b2lkIHNldFNvdXJjZUltYWdlKFlVVkltYWdlIHNyY0ltYWdlKSB7CisgICAgaWYgKHNyY0ltYWdlID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIHNldFNvdXJjZUltYWdlKCkiKTsKKyAgICB5dXZJbWFnZSA9IHNyY0ltYWdlOworICAgIGpwZWdCdWYgPSBudWxsOworICAgIGpwZWdCdWZTaXplID0gMDsKKyAgfQorCisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBzb3VyY2UgaW1hZ2UgKEpQRUcgb3IgWVVWKSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgKiBkZWNvbXByZXNzb3IgaW5zdGFuY2UuCisgICAqCisgICAqIEByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBzb3VyY2UgaW1hZ2UgKEpQRUcgb3IgWVVWKSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgKiBkZWNvbXByZXNzb3IgaW5zdGFuY2UuCisgICAqLworICBwdWJsaWMgaW50IGdldFdpZHRoKCkgeworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKQorICAgICAgcmV0dXJuIHl1dkltYWdlLmdldFdpZHRoKCk7CisgICAgaWYgKGpwZWdXaWR0aCA8IDEpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICByZXR1cm4ganBlZ1dpZHRoOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICogZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKgorICAgKiBAcmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZSAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAqIGRlY29tcHJlc3NvciBpbnN0YW5jZS4KKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgeworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKQorICAgICAgcmV0dXJuIHl1dkltYWdlLmdldEhlaWdodCgpOworICAgIGlmIChqcGVnSGVpZ2h0IDwgMSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIHJldHVybiBqcGVnSGVpZ2h0OworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIHNvdXJjZSBpbWFnZQorICAgKiAoSlBFRyBvciBZVVYpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS4gIFNlZQorICAgKiB7QGxpbmsgVEojU0FNUF80NDQgVEouU0FNUF8qfS4KKyAgICoKKyAgICogQHJldHVybiB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlCisgICAqIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKi8KKyAgcHVibGljIGludCBnZXRTdWJzYW1wKCkgeworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKQorICAgICAgcmV0dXJuIHl1dkltYWdlLmdldFN1YnNhbXAoKTsKKyAgICBpZiAoanBlZ1N1YnNhbXAgPCAwKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKGpwZWdTdWJzYW1wID49IFRKLk5VTVNBTVApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJKUEVHIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBpbnZhbGlkIik7CisgICAgcmV0dXJuIGpwZWdTdWJzYW1wOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIGNvbG9yc3BhY2UgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZAorICAgKiB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLiAgU2VlIHtAbGluayBUSiNDU19SR0IgVEouQ1NfKn0uICBJZiB0aGUKKyAgICogc291cmNlIGltYWdlIGlzIFlVViwgdGhlbiB0aGlzIGFsd2F5cyByZXR1cm5zIHtAbGluayBUSiNDU19ZQ2JDcn0uCisgICAqCisgICAqIEByZXR1cm4gdGhlIGNvbG9yc3BhY2UgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlIChKUEVHIG9yIFlVVikgYXNzb2NpYXRlZAorICAgKiB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKi8KKyAgcHVibGljIGludCBnZXRDb2xvcnNwYWNlKCkgeworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKQorICAgICAgcmV0dXJuIFRKLkNTX1lDYkNyOworICAgIGlmIChqcGVnQ29sb3JzcGFjZSA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoanBlZ0NvbG9yc3BhY2UgPj0gVEouTlVNQ1MpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJKUEVHIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBpbnZhbGlkIik7CisgICAgcmV0dXJuIGpwZWdDb2xvcnNwYWNlOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIEpQRUcgaW1hZ2UgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS4KKyAgICoKKyAgICogQHJldHVybiB0aGUgSlBFRyBpbWFnZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKi8KKyAgcHVibGljIGJ5dGVbXSBnZXRKUEVHQnVmKCkgeworICAgIGlmIChqcGVnQnVmID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICByZXR1cm4ganBlZ0J1ZjsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICogZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKgorICAgKiBAcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICogZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKi8KKyAgcHVibGljIGludCBnZXRKUEVHU2l6ZSgpIHsKKyAgICBpZiAoanBlZ0J1ZlNpemUgPCAxKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgcmV0dXJuIGpwZWdCdWZTaXplOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworICAgKiBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAorICAgKiBoZWlnaHQuCisgICAqCisgICAqIEBwYXJhbSBkZXNpcmVkV2lkdGggZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgorICAgKiBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZQorICAgKiAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlCisgICAqIHNjYWxlZCBpbWFnZSBzaXplLikKKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KKyAgICogU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHCisgICAqIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIGhlaWdodCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcKKyAgICogdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKKyAgICoKKyAgICogQHJldHVybiB0aGUgd2lkdGggb2YgdGhlIGxhcmdlc3Qgc2NhbGVkLWRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgICAqIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCisgICAqIGhlaWdodC4KKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0U2NhbGVkV2lkdGgoaW50IGRlc2lyZWRXaWR0aCwgaW50IGRlc2lyZWRIZWlnaHQpIHsKKyAgICBpZiAoanBlZ1dpZHRoIDwgMSB8fCBqcGVnSGVpZ2h0IDwgMSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGlmIChkZXNpcmVkV2lkdGggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBnZXRTY2FsZWRXaWR0aCgpIik7CisgICAgVEpTY2FsaW5nRmFjdG9yW10gc2YgPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOworICAgIGlmIChkZXNpcmVkV2lkdGggPT0gMCkKKyAgICAgIGRlc2lyZWRXaWR0aCA9IGpwZWdXaWR0aDsKKyAgICBpZiAoZGVzaXJlZEhlaWdodCA9PSAwKQorICAgICAgZGVzaXJlZEhlaWdodCA9IGpwZWdIZWlnaHQ7CisgICAgaW50IHNjYWxlZFdpZHRoID0ganBlZ1dpZHRoLCBzY2FsZWRIZWlnaHQgPSBqcGVnSGVpZ2h0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2YubGVuZ3RoOyBpKyspIHsKKyAgICAgIHNjYWxlZFdpZHRoID0gc2ZbaV0uZ2V0U2NhbGVkKGpwZWdXaWR0aCk7CisgICAgICBzY2FsZWRIZWlnaHQgPSBzZltpXS5nZXRTY2FsZWQoanBlZ0hlaWdodCk7CisgICAgICBpZiAoc2NhbGVkV2lkdGggPD0gZGVzaXJlZFdpZHRoICYmIHNjYWxlZEhlaWdodCA8PSBkZXNpcmVkSGVpZ2h0KQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHNjYWxlZFdpZHRoID4gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCA+IGRlc2lyZWRIZWlnaHQpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb3VsZCBub3Qgc2NhbGUgZG93biB0byBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMiKTsKKyAgICByZXR1cm4gc2NhbGVkV2lkdGg7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworICAgKiBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAorICAgKiBoZWlnaHQuCisgICAqCisgICAqIEBwYXJhbSBkZXNpcmVkV2lkdGggZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgorICAgKiBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZQorICAgKiAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlCisgICAqIHNjYWxlZCBpbWFnZSBzaXplLikKKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KKyAgICogU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHCisgICAqIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIGhlaWdodCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcKKyAgICogdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKKyAgICoKKyAgICogQHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworICAgKiBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAorICAgKiBoZWlnaHQuCisgICAqLworICBwdWJsaWMgaW50IGdldFNjYWxlZEhlaWdodChpbnQgZGVzaXJlZFdpZHRoLCBpbnQgZGVzaXJlZEhlaWdodCkgeworICAgIGlmIChqcGVnV2lkdGggPCAxIHx8IGpwZWdIZWlnaHQgPCAxKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKGRlc2lyZWRXaWR0aCA8IDAgfHwgZGVzaXJlZEhlaWdodCA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGdldFNjYWxlZEhlaWdodCgpIik7CisgICAgVEpTY2FsaW5nRmFjdG9yW10gc2YgPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOworICAgIGlmIChkZXNpcmVkV2lkdGggPT0gMCkKKyAgICAgIGRlc2lyZWRXaWR0aCA9IGpwZWdXaWR0aDsKKyAgICBpZiAoZGVzaXJlZEhlaWdodCA9PSAwKQorICAgICAgZGVzaXJlZEhlaWdodCA9IGpwZWdIZWlnaHQ7CisgICAgaW50IHNjYWxlZFdpZHRoID0ganBlZ1dpZHRoLCBzY2FsZWRIZWlnaHQgPSBqcGVnSGVpZ2h0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2YubGVuZ3RoOyBpKyspIHsKKyAgICAgIHNjYWxlZFdpZHRoID0gc2ZbaV0uZ2V0U2NhbGVkKGpwZWdXaWR0aCk7CisgICAgICBzY2FsZWRIZWlnaHQgPSBzZltpXS5nZXRTY2FsZWQoanBlZ0hlaWdodCk7CisgICAgICBpZiAoc2NhbGVkV2lkdGggPD0gZGVzaXJlZFdpZHRoICYmIHNjYWxlZEhlaWdodCA8PSBkZXNpcmVkSGVpZ2h0KQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHNjYWxlZFdpZHRoID4gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCA+IGRlc2lyZWRIZWlnaHQpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb3VsZCBub3Qgc2NhbGUgZG93biB0byBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMiKTsKKyAgICByZXR1cm4gc2NhbGVkSGVpZ2h0OworICB9CisKKyAgLyoqCisgICAqIERlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgICAqIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIG91dHB1dCBhIGdyYXlzY2FsZSwgUkdCLCBvciBDTVlLIGltYWdlCisgICAqIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuCisgICAqIDxwPgorICAgKiBOT1RFOiBUaGUgb3V0cHV0IGltYWdlIGlzIGZ1bGx5IHJlY292ZXJhYmxlIGlmIHRoaXMgbWV0aG9kIHRocm93cyBhCisgICAqIG5vbi1mYXRhbCB7QGxpbmsgVEpFeGNlcHRpb259ICh1bmxlc3MKKyAgICoge0BsaW5rIFRKI0ZMQUdfU1RPUE9OV0FSTklORyBUSi5GTEFHX1NUT1BPTldBUk5JTkd9IGlzIHNwZWNpZmllZC4pCisgICAqCisgICAqIEBwYXJhbSBkc3RCdWYgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZS4KKyAgICogSWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4gdGhpcyBidWZmZXIgc2hvdWxkIG5vcm1hbGx5IGJlCisgICAqIDxjb2RlPnBpdGNoICogc2NhbGVkSGVpZ2h0PC9jb2RlPiBieXRlcyBpbiBzaXplLCB3aGVyZQorICAgKiA8Y29kZT5zY2FsZWRIZWlnaHQ8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CisgICAqIHNjYWxpbmdGYWN0b3Iue0BsaW5rIFRKU2NhbGluZ0ZhY3RvciNnZXRTY2FsZWQgZ2V0U2NhbGVkfShqcGVnSGVpZ2h0KQorICAgKiA8L2NvZGU+IHdpdGggb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgZnJvbSB7QGxpbmsKKyAgICogVEojZ2V0U2NhbGluZ0ZhY3RvcnN9IG9yIGJ5IGNhbGxpbmcge0BsaW5rICNnZXRTY2FsZWRIZWlnaHR9LiAgSWYgdGhlCisgICAqIHNvdXJjZSBpbWFnZSBpcyBhIFlVViBpbWFnZSwgdGhlbiB0aGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUKKyAgICogPGNvZGU+cGl0Y2ggKiBoZWlnaHQ8L2NvZGU+IGJ5dGVzIGluIHNpemUsIHdoZXJlIDxjb2RlPmhlaWdodDwvY29kZT4gaXMKKyAgICogdGhlIGhlaWdodCBvZiB0aGUgWVVWIGltYWdlLiAgSG93ZXZlciwgdGhlIGJ1ZmZlciBtYXkgYWxzbyBiZSBsYXJnZXIgdGhhbgorICAgKiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgc291cmNlIGltYWdlLCBpbiB3aGljaCBjYXNlIHRoZSA8Y29kZT54PC9jb2RlPiwKKyAgICogPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT5waXRjaDwvY29kZT4gcGFyYW1ldGVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisgICAqIHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgc291cmNlIGltYWdlIHNob3VsZCBiZSBkZWNvbXByZXNzZWQvZGVjb2RlZC4KKyAgICoKKyAgICogQHBhcmFtIHggeCBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaW50bworICAgKiB3aGljaCB0aGUgc291cmNlIGltYWdlIHNob3VsZCBiZSBkZWNvbXByZXNzZWQvZGVjb2RlZAorICAgKgorICAgKiBAcGFyYW0geSB5IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBpbnRvCisgICAqIHdoaWNoIHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJlIGRlY29tcHJlc3NlZC9kZWNvZGVkCisgICAqCisgICAqIEBwYXJhbSBkZXNpcmVkV2lkdGggSWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4gdGhpcworICAgKiBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyAgICogaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudAorICAgKiB0aGFuIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucywgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUKKyAgICogSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorICAgKiB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcKKyAgICogaXQgdG8gdGhlIHdpZHRoIG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIHdpZHRoIHdpbGwgbm90IGJlCisgICAqIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKSAgVGhpcyBwYXJhbWV0ZXIgaXMKKyAgICogaWdub3JlZCBpZiB0aGUgc291cmNlIGltYWdlIGlzIGEgWVVWIGltYWdlLgorICAgKgorICAgKiBAcGFyYW0gcGl0Y2ggYnl0ZXMgcGVyIGxpbmUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiAgTm9ybWFsbHksIHRoaXMKKyAgICogc2hvdWxkIGJlIHNldCB0byA8Y29kZT5zY2FsZWRXaWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+IGlmCisgICAqIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBpcyB1bnBhZGRlZCwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgdG8sIGZvciBpbnN0YW5jZSwKKyAgICogcGFkIGVhY2ggbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgdG8gYSA0LWJ5dGUgYm91bmRhcnkgb3IgdG8KKyAgICogZGVjb21wcmVzcy9kZWNvZGUgdGhlIHNvdXJjZSBpbWFnZSBpbnRvIGEgcmVnaW9uIG9mIGEgbGFyZ2VyIGltYWdlLiAgTk9URToKKyAgICogaWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+IGNhbiBiZQorICAgKiBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CisgICAqIHNjYWxpbmdGYWN0b3Iue0BsaW5rIFRKU2NhbGluZ0ZhY3RvciNnZXRTY2FsZWQgZ2V0U2NhbGVkfShqcGVnV2lkdGgpCisgICAqIDwvY29kZT4gb3IgYnkgY2FsbGluZyB7QGxpbmsgI2dldFNjYWxlZFdpZHRofS4gIElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYQorICAgKiBZVVYgaW1hZ2UsIHRoZW4gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+IGlzIHRoZSB3aWR0aCBvZiB0aGUgWVVWIGltYWdlLgorICAgKiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0bworICAgKiA8Y29kZT5zY2FsZWRXaWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LgorICAgKgorICAgKiBAcGFyYW0gZGVzaXJlZEhlaWdodCBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEgSlBFRyBpbWFnZSwgdGhlbiB0aGlzCisgICAqIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyAgICogaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudAorICAgKiB0aGFuIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucywgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUKKyAgICogSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorICAgKiB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcKKyAgICogaXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUKKyAgICogY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pICBUaGlzIHBhcmFtZXRlciBpcworICAgKiBpZ25vcmVkIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBZVVYgaW1hZ2UuCisgICAqCisgICAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZC9kZWNvZGVkIGltYWdlIChvbmUgb2YKKyAgICoge0BsaW5rIFRKI1BGX1JHQiBUSi5QRl8qfSkKKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KKyAgICovCisgIHB1YmxpYyB2b2lkIGRlY29tcHJlc3MoYnl0ZVtdIGRzdEJ1ZiwgaW50IHgsIGludCB5LCBpbnQgZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXRjaCwgaW50IGRlc2lyZWRIZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGpwZWdCdWYgPT0gbnVsbCAmJiB5dXZJbWFnZSA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKGRzdEJ1ZiA9PSBudWxsIHx8IHggPCAwIHx8IHkgPCAwIHx8IHBpdGNoIDwgMCB8fAorICAgICAgICAoeXV2SW1hZ2UgIT0gbnVsbCAmJiAoZGVzaXJlZFdpZHRoIDwgMCB8fCBkZXNpcmVkSGVpZ2h0IDwgMCkpIHx8CisgICAgICAgIHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBUSi5OVU1QRiB8fCBmbGFncyA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKQorICAgICAgZGVjb2RlWVVWKHl1dkltYWdlLmdldFBsYW5lcygpLCB5dXZJbWFnZS5nZXRPZmZzZXRzKCksCisgICAgICAgICAgICAgICAgeXV2SW1hZ2UuZ2V0U3RyaWRlcygpLCB5dXZJbWFnZS5nZXRTdWJzYW1wKCksIGRzdEJ1ZiwgeCwgeSwKKyAgICAgICAgICAgICAgICB5dXZJbWFnZS5nZXRXaWR0aCgpLCBwaXRjaCwgeXV2SW1hZ2UuZ2V0SGVpZ2h0KCksIHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICBlbHNlIHsKKyAgICAgIGlmICh4ID4gMCB8fCB5ID4gMCkKKyAgICAgICAgZGVjb21wcmVzcyhqcGVnQnVmLCBqcGVnQnVmU2l6ZSwgZHN0QnVmLCB4LCB5LCBkZXNpcmVkV2lkdGgsIHBpdGNoLAorICAgICAgICAgICAgICAgICAgIGRlc2lyZWRIZWlnaHQsIHBpeGVsRm9ybWF0LCBmbGFncyk7CisgICAgICBlbHNlCisgICAgICAgIGRlY29tcHJlc3MoanBlZ0J1ZiwganBlZ0J1ZlNpemUsIGRzdEJ1ZiwgZGVzaXJlZFdpZHRoLCBwaXRjaCwKKyAgICAgICAgICAgICAgICAgICBkZXNpcmVkSGVpZ2h0LCBwaXhlbEZvcm1hdCwgZmxhZ3MpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2UKKyAgICoge0BsaW5rICNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KX0gaW5zdGVhZC4KKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkphdmFkb2NNZXRob2QiKQorICBARGVwcmVjYXRlZAorICBwdWJsaWMgdm9pZCBkZWNvbXByZXNzKGJ5dGVbXSBkc3RCdWYsIGludCBkZXNpcmVkV2lkdGgsIGludCBwaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZEhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBkZWNvbXByZXNzKGRzdEJ1ZiwgMCwgMCwgZGVzaXJlZFdpZHRoLCBwaXRjaCwgZGVzaXJlZEhlaWdodCwgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICBmbGFncyk7CisgIH0KKworICAvKioKKyAgICogRGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCisgICAqIGluc3RhbmNlIGFuZCByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgorICAgKgorICAgKiBAcGFyYW0gZGVzaXJlZFdpZHRoIHNlZQorICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfQorICAgKiBmb3IgZGVzY3JpcHRpb24KKyAgICoKKyAgICogQHBhcmFtIHBpdGNoIHNlZQorICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfQorICAgKiBmb3IgZGVzY3JpcHRpb24KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgc2VlCisgICAqIHtAbGluayAjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9CisgICAqIGZvciBkZXNjcmlwdGlvbgorICAgKgorICAgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgKG9uZSBvZgorICAgKiB7QGxpbmsgVEojUEZfUkdCIFRKLlBGXyp9KQorICAgKgorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQorICAgKgorICAgKiBAcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KKyAgICovCisgIHB1YmxpYyBieXRlW10gZGVjb21wcmVzcyhpbnQgZGVzaXJlZFdpZHRoLCBpbnQgcGl0Y2gsIGludCBkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKHBpdGNoIDwgMCB8fAorICAgICAgICAoeXV2SW1hZ2UgPT0gbnVsbCAmJiAoZGVzaXJlZFdpZHRoIDwgMCB8fCBkZXNpcmVkSGVpZ2h0IDwgMCkpIHx8CisgICAgICAgIHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBUSi5OVU1QRiB8fCBmbGFncyA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworICAgIGludCBwaXhlbFNpemUgPSBUSi5nZXRQaXhlbFNpemUocGl4ZWxGb3JtYXQpOworICAgIGludCBzY2FsZWRXaWR0aCA9IGdldFNjYWxlZFdpZHRoKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7CisgICAgaW50IHNjYWxlZEhlaWdodCA9IGdldFNjYWxlZEhlaWdodChkZXNpcmVkV2lkdGgsIGRlc2lyZWRIZWlnaHQpOworICAgIGlmIChwaXRjaCA9PSAwKQorICAgICAgcGl0Y2ggPSBzY2FsZWRXaWR0aCAqIHBpeGVsU2l6ZTsKKyAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbcGl0Y2ggKiBzY2FsZWRIZWlnaHRdOworICAgIGRlY29tcHJlc3MoYnVmLCBkZXNpcmVkV2lkdGgsIHBpdGNoLCBkZXNpcmVkSGVpZ2h0LCBwaXhlbEZvcm1hdCwgZmxhZ3MpOworICAgIHJldHVybiBidWY7CisgIH0KKworICAvKioKKyAgICogRGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCisgICAqIGluc3RhbmNlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4KKyAgICogPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlLiAgVGhpcyBtZXRob2QgcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uCisgICAqIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvciBjb252ZXJzaW9uIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcworICAgKiBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlLiAgVGhpcyBtZXRob2QgY2Fubm90IGJlCisgICAqIHVzZWQgdG8gZGVjb21wcmVzcyBKUEVHIHNvdXJjZSBpbWFnZXMgd2l0aCB0aGUgQ01ZSyBvciBZQ0NLIGNvbG9yc3BhY2UuCisgICAqIDxwPgorICAgKiBOT1RFOiBUaGUgWVVWIHBsYW5hciBvdXRwdXQgaW1hZ2UgaXMgZnVsbHkgcmVjb3ZlcmFibGUgaWYgdGhpcyBtZXRob2QKKyAgICogdGhyb3dzIGEgbm9uLWZhdGFsIHtAbGluayBUSkV4Y2VwdGlvbn0gKHVubGVzcworICAgKiB7QGxpbmsgVEojRkxBR19TVE9QT05XQVJOSU5HIFRKLkZMQUdfU1RPUE9OV0FSTklOR30gaXMgc3BlY2lmaWVkLikKKyAgICoKKyAgICogQHBhcmFtIGRzdEltYWdlIHtAbGluayBZVVZJbWFnZX0gaW5zdGFuY2UgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFlVViBwbGFuYXIKKyAgICogaW1hZ2UuICBUaGUgbGV2ZWwgb2Ygc3Vic2FtcGxpbmcgc3BlY2lmaWVkIGluIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+CisgICAqIGluc3RhbmNlIG11c3QgbWF0Y2ggdGhhdCBvZiB0aGUgSlBFRyBpbWFnZSwgYW5kIHRoZSB3aWR0aCBhbmQgaGVpZ2h0CisgICAqIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIG11c3QgbWF0Y2ggb25lIG9mIHRoZQorICAgKiBzY2FsZWQgaW1hZ2Ugc2l6ZXMgdGhhdCBUdXJib0pQRUcgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGZyb20gdGhlIEpQRUcKKyAgICogc291cmNlIGltYWdlLgorICAgKgorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQorICAgKi8KKyAgcHVibGljIHZvaWQgZGVjb21wcmVzc1RvWVVWKFlVVkltYWdlIGRzdEltYWdlLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGlmIChqcGVnQnVmID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoZHN0SW1hZ2UgPT0gbnVsbCB8fCBmbGFncyA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3NUb1lVVigpIik7CisgICAgaW50IHNjYWxlZFdpZHRoID0gZ2V0U2NhbGVkV2lkdGgoZHN0SW1hZ2UuZ2V0V2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RJbWFnZS5nZXRIZWlnaHQoKSk7CisgICAgaW50IHNjYWxlZEhlaWdodCA9IGdldFNjYWxlZEhlaWdodChkc3RJbWFnZS5nZXRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0SW1hZ2UuZ2V0SGVpZ2h0KCkpOworICAgIGlmIChzY2FsZWRXaWR0aCAhPSBkc3RJbWFnZS5nZXRXaWR0aCgpIHx8CisgICAgICAgIHNjYWxlZEhlaWdodCAhPSBkc3RJbWFnZS5nZXRIZWlnaHQoKSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIllVVkltYWdlIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIG9uZSBvZiB0aGUgc2NhbGVkIGltYWdlIHNpemVzIHRoYXQgVHVyYm9KUEVHIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZy4iKTsKKyAgICBpZiAoanBlZ1N1YnNhbXAgIT0gZHN0SW1hZ2UuZ2V0U3Vic2FtcCgpKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiWVVWSW1hZ2Ugc3Vic2FtcGxpbmcgbGV2ZWwgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgSlBFRyBpbWFnZSIpOworCisgICAgZGVjb21wcmVzc1RvWVVWKGpwZWdCdWYsIGpwZWdCdWZTaXplLCBkc3RJbWFnZS5nZXRQbGFuZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgZHN0SW1hZ2UuZ2V0T2Zmc2V0cygpLCBkc3RJbWFnZS5nZXRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICBkc3RJbWFnZS5nZXRTdHJpZGVzKCksIGRzdEltYWdlLmdldEhlaWdodCgpLCBmbGFncyk7CisgIH0KKworICAvKioKKyAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjZGVjb21wcmVzc1RvWVVWKFlVVkltYWdlLCBpbnQpfSBpbnN0ZWFkLgorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyB2b2lkIGRlY29tcHJlc3NUb1lVVihieXRlW10gZHN0QnVmLCBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgWVVWSW1hZ2UgZHN0WVVWSW1hZ2UgPSBuZXcgWVVWSW1hZ2UoZHN0QnVmLCBqcGVnV2lkdGgsIDQsIGpwZWdIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ1N1YnNhbXApOworICAgIGRlY29tcHJlc3NUb1lVVihkc3RZVVZJbWFnZSwgZmxhZ3MpOworICB9CisKKyAgLyoqCisgICAqIERlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorICAgKiBpbnN0YW5jZSBpbnRvIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgYW5kIHJldHVybiBhCisgICAqIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgcGxhbmVzLgorICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBKUEVHIGRlY29tcHJlc3Npb24gYnV0IGxlYXZlcyBvdXQgdGhlIGNvbG9yCisgICAqIGNvbnZlcnNpb24gc3RlcCwgc28gYSBwbGFuYXIgWVVWIGltYWdlIGlzIGdlbmVyYXRlZCBpbnN0ZWFkIG9mIGFuIFJHQiBvcgorICAgKiBncmF5c2NhbGUgaW1hZ2UuICBUaGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBkZWNvbXByZXNzIEpQRUcgc291cmNlCisgICAqIGltYWdlcyB3aXRoIHRoZSBDTVlLIG9yIFlDQ0sgY29sb3JzcGFjZS4KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRXaWR0aCBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UuICBJZiB0aGUKKyAgICogZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIGFyZSBkaWZmZXJlbnQgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgSlBFRworICAgKiBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcKKyAgICogZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluCisgICAqIHRoZSBkZXNpcmVkIGRpbWVuc2lvbnMuICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvCisgICAqIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSB3aWR0aCB3aWxsIG5vdCBiZQorICAgKiBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKKyAgICoKKyAgICogQHBhcmFtIHN0cmlkZXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGVhY2ggc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAqIHBlciBsaW5lIGluIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lIG9mIHRoZSBvdXRwdXQgaW1hZ2UuICBTZXR0aW5nIHRoZQorICAgKiBzdHJpZGUgZm9yIGFueSBwbGFuZSB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHNjYWxlZAorICAgKiBjb21wb25lbnQgd2lkdGggb2YgdGhlIHBsYW5lLiAgSWYgPHR0PnN0cmlkZXM8L3R0PiBpcyBOVUxMLCB0aGVuIHRoZQorICAgKiBzdHJpZGVzIGZvciBhbGwgcGxhbmVzIHdpbGwgYmUgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgc2NhbGVkIGNvbXBvbmVudAorICAgKiB3aWR0aHMuICBZb3UgY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZgorICAgKiBsaW5lIHBhZGRpbmcgdG8gZWFjaCBwbGFuZS4KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIElmIHRoZQorICAgKiBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHCisgICAqIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRworICAgKiBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4KKyAgICogdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8KKyAgICogdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUKKyAgICogY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqCisgICAqIEByZXR1cm4gYSBZVVYgcGxhbmFyIGltYWdlLgorICAgKi8KKyAgcHVibGljIFlVVkltYWdlIGRlY29tcHJlc3NUb1lVVihpbnQgZGVzaXJlZFdpZHRoLCBpbnRbXSBzdHJpZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBpZiAoZmxhZ3MgPCAwKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzVG9ZVVYoKSIpOworICAgIGlmIChqcGVnV2lkdGggPCAxIHx8IGpwZWdIZWlnaHQgPCAxIHx8IGpwZWdTdWJzYW1wIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGlmIChqcGVnU3Vic2FtcCA+PSBUSi5OVU1TQU1QKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSlBFRyBoZWFkZXIgaW5mb3JtYXRpb24gaXMgaW52YWxpZCIpOworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiU291cmNlIGltYWdlIGlzIHRoZSB3cm9uZyB0eXBlIik7CisKKyAgICBpbnQgc2NhbGVkV2lkdGggPSBnZXRTY2FsZWRXaWR0aChkZXNpcmVkV2lkdGgsIGRlc2lyZWRIZWlnaHQpOworICAgIGludCBzY2FsZWRIZWlnaHQgPSBnZXRTY2FsZWRIZWlnaHQoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0KTsKKyAgICBZVVZJbWFnZSBkc3RZVVZJbWFnZSA9IG5ldyBZVVZJbWFnZShzY2FsZWRXaWR0aCwgbnVsbCwgc2NhbGVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdTdWJzYW1wKTsKKyAgICBkZWNvbXByZXNzVG9ZVVYoZHN0WVVWSW1hZ2UsIGZsYWdzKTsKKyAgICByZXR1cm4gZHN0WVVWSW1hZ2U7CisgIH0KKworICAvKioKKyAgICogRGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCisgICAqIGluc3RhbmNlIGludG8gYSB1bmlmaWVkIFlVViBwbGFuYXIgaW1hZ2UgYnVmZmVyIGFuZCByZXR1cm4gYQorICAgKiA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGltYWdlLiAgVGhpcworICAgKiBtZXRob2QgcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvciBjb252ZXJzaW9uCisgICAqIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0Igb3IgZ3JheXNjYWxlCisgICAqIGltYWdlLiAgVGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gZGVjb21wcmVzcyBKUEVHIHNvdXJjZSBpbWFnZXMgd2l0aAorICAgKiB0aGUgQ01ZSyBvciBZQ0NLIGNvbG9yc3BhY2UuCisgICAqCisgICAqIEBwYXJhbSBkZXNpcmVkV2lkdGggZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiAgSWYgdGhlCisgICAqIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcKKyAgICogaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZSBKUEVHCisgICAqIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbgorICAgKiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0bworICAgKiB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgd2lkdGggd2lsbCBub3QgYmUKKyAgICogY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCisgICAqCisgICAqIEBwYXJhbSBwYWQgdGhlIHdpZHRoIG9mIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBZVVYgaW1hZ2Ugd2lsbCBiZQorICAgKiBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhpcyBudW1iZXIgb2YgYnl0ZXMgKG11c3QgYmUgYSBwb3dlciBvZgorICAgKiAyLikKKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIElmIHRoZQorICAgKiBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHCisgICAqIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRworICAgKiBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4KKyAgICogdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8KKyAgICogdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUKKyAgICogY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqCisgICAqIEByZXR1cm4gYSBZVVYgcGxhbmFyIGltYWdlLgorICAgKi8KKyAgcHVibGljIFlVVkltYWdlIGRlY29tcHJlc3NUb1lVVihpbnQgZGVzaXJlZFdpZHRoLCBpbnQgcGFkLCBpbnQgZGVzaXJlZEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGZsYWdzIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZGVjb21wcmVzc1RvWVVWKCkiKTsKKyAgICBpZiAoanBlZ1dpZHRoIDwgMSB8fCBqcGVnSGVpZ2h0IDwgMSB8fCBqcGVnU3Vic2FtcCA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoanBlZ1N1YnNhbXAgPj0gVEouTlVNU0FNUCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkpQRUcgaGVhZGVyIGluZm9ybWF0aW9uIGlzIGludmFsaWQiKTsKKyAgICBpZiAoeXV2SW1hZ2UgIT0gbnVsbCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlNvdXJjZSBpbWFnZSBpcyB0aGUgd3JvbmcgdHlwZSIpOworCisgICAgaW50IHNjYWxlZFdpZHRoID0gZ2V0U2NhbGVkV2lkdGgoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0KTsKKyAgICBpbnQgc2NhbGVkSGVpZ2h0ID0gZ2V0U2NhbGVkSGVpZ2h0KGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7CisgICAgWVVWSW1hZ2UgZHN0WVVWSW1hZ2UgPSBuZXcgWVVWSW1hZ2Uoc2NhbGVkV2lkdGgsIHBhZCwgc2NhbGVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdTdWJzYW1wKTsKKyAgICBkZWNvbXByZXNzVG9ZVVYoZHN0WVVWSW1hZ2UsIGZsYWdzKTsKKyAgICByZXR1cm4gZHN0WVVWSW1hZ2U7CisgIH0KKworICAvKioKKyAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjZGVjb21wcmVzc1RvWVVWKGludCwgaW50LCBpbnQsIGludCl9IGluc3RlYWQuCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgQERlcHJlY2F0ZWQKKyAgcHVibGljIGJ5dGVbXSBkZWNvbXByZXNzVG9ZVVYoaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIFlVVkltYWdlIGRzdFlVVkltYWdlID0gbmV3IFlVVkltYWdlKGpwZWdXaWR0aCwgNCwganBlZ0hlaWdodCwganBlZ1N1YnNhbXApOworICAgIGRlY29tcHJlc3NUb1lVVihkc3RZVVZJbWFnZSwgZmxhZ3MpOworICAgIHJldHVybiBkc3RZVVZJbWFnZS5nZXRCdWYoKTsKKyAgfQorCisgIC8qKgorICAgKiBEZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBvciBkZWNvZGUgdGhlIFlVViBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZAorICAgKiB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBvdXRwdXQgYSBncmF5c2NhbGUsIFJHQiwgb3IgQ01ZSyBpbWFnZQorICAgKiB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLgorICAgKiA8cD4KKyAgICogTk9URTogVGhlIG91dHB1dCBpbWFnZSBpcyBmdWxseSByZWNvdmVyYWJsZSBpZiB0aGlzIG1ldGhvZCB0aHJvd3MgYQorICAgKiBub24tZmF0YWwge0BsaW5rIFRKRXhjZXB0aW9ufSAodW5sZXNzCisgICAqIHtAbGluayBUSiNGTEFHX1NUT1BPTldBUk5JTkcgVEouRkxBR19TVE9QT05XQVJOSU5HfSBpcyBzcGVjaWZpZWQuKQorICAgKgorICAgKiBAcGFyYW0gZHN0QnVmIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgZGVjb21wcmVzc2VkL2RlY29kZWQgaW1hZ2UuCisgICAqIElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBKUEVHIGltYWdlLCB0aGVuIHRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZQorICAgKiA8Y29kZT5zdHJpZGUgKiBzY2FsZWRIZWlnaHQ8L2NvZGU+IHBpeGVscyBpbiBzaXplLCB3aGVyZQorICAgKiA8Y29kZT5zY2FsZWRIZWlnaHQ8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CisgICAqIHNjYWxpbmdGYWN0b3Iue0BsaW5rIFRKU2NhbGluZ0ZhY3RvciNnZXRTY2FsZWQgZ2V0U2NhbGVkfShqcGVnSGVpZ2h0KQorICAgKiA8L2NvZGU+IHdpdGggb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgZnJvbSB7QGxpbmsKKyAgICogVEojZ2V0U2NhbGluZ0ZhY3RvcnN9IG9yIGJ5IGNhbGxpbmcge0BsaW5rICNnZXRTY2FsZWRIZWlnaHR9LiAgSWYgdGhlCisgICAqIHNvdXJjZSBpbWFnZSBpcyBhIFlVViBpbWFnZSwgdGhlbiB0aGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUKKyAgICogPGNvZGU+c3RyaWRlICogaGVpZ2h0PC9jb2RlPiBwaXhlbHMgaW4gc2l6ZSwgd2hlcmUgPGNvZGU+aGVpZ2h0PC9jb2RlPiBpcworICAgKiB0aGUgaGVpZ2h0IG9mIHRoZSBZVVYgaW1hZ2UuICBIb3dldmVyLCB0aGUgYnVmZmVyIG1heSBhbHNvIGJlIGxhcmdlciB0aGFuCisgICAqIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHIGltYWdlLCBpbiB3aGljaCBjYXNlIHRoZSA8Y29kZT54PC9jb2RlPiwKKyAgICogPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT5zdHJpZGU8L2NvZGU+IHBhcmFtZXRlcnMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorICAgKiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhlIHNvdXJjZSBpbWFnZSBzaG91bGQgYmUgZGVjb21wcmVzc2VkLgorICAgKgorICAgKiBAcGFyYW0geCB4IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBpbnRvCisgICAqIHdoaWNoIHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJlIGRlY29tcHJlc3NlZC9kZWNvZGVkCisgICAqCisgICAqIEBwYXJhbSB5IHkgb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlIGludG8KKyAgICogd2hpY2ggdGhlIHNvdXJjZSBpbWFnZSBzaG91bGQgYmUgZGVjb21wcmVzc2VkL2RlY29kZWQKKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRXaWR0aCBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEgSlBFRyBpbWFnZSwgdGhlbiB0aGlzCisgICAqIHNwZWNpZmllcyB0aGUgZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlIChvcgorICAgKiBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50CisgICAqIHRoYW4gdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZQorICAgKiBKUEVHIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0CisgICAqIHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZworICAgKiBpdCB0byB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgd2lkdGggd2lsbCBub3QgYmUKKyAgICogY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pICBUaGlzIHBhcmFtZXRlciBpcworICAgKiBpZ25vcmVkIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBZVVYgaW1hZ2UuCisgICAqCisgICAqIEBwYXJhbSBzdHJpZGUgcGl4ZWxzIHBlciBsaW5lIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gIE5vcm1hbGx5LCB0aGlzCisgICAqIHNob3VsZCBiZSBzZXQgdG8gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+LCBidXQgeW91IGNhbiB1c2UgdGhpcyB0bywgZm9yCisgICAqIGluc3RhbmNlLCBkZWNvbXByZXNzIHRoZSBKUEVHIGltYWdlIGludG8gYSByZWdpb24gb2YgYSBsYXJnZXIgaW1hZ2UuCisgICAqIE5PVEU6IGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBKUEVHIGltYWdlLCB0aGVuIDxjb2RlPnNjYWxlZFdpZHRoPC9jb2RlPgorICAgKiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxjb2RlPgorICAgKiBzY2FsaW5nRmFjdG9yLntAbGluayBUSlNjYWxpbmdGYWN0b3IjZ2V0U2NhbGVkIGdldFNjYWxlZH0oanBlZ1dpZHRoKQorICAgKiA8L2NvZGU+IG9yIGJ5IGNhbGxpbmcge0BsaW5rICNnZXRTY2FsZWRXaWR0aH0uICBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEKKyAgICogWVVWIGltYWdlLCB0aGVuIDxjb2RlPnNjYWxlZFdpZHRoPC9jb2RlPiBpcyB0aGUgd2lkdGggb2YgdGhlIFlVViBpbWFnZS4KKyAgICogU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8KKyAgICogPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+LgorICAgKgorICAgKiBAcGFyYW0gZGVzaXJlZEhlaWdodCBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEgSlBFRyBpbWFnZSwgdGhlbiB0aGlzCisgICAqIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob3IKKyAgICogaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudAorICAgKiB0aGFuIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucywgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUKKyAgICogSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdAorICAgKiB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcKKyAgICogaXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUKKyAgICogY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pICBUaGlzIHBhcmFtZXRlciBpcworICAgKiBpZ25vcmVkIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgYSBZVVYgaW1hZ2UuCisgICAqCisgICAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob25lIG9mCisgICAqIHtAbGluayBUSiNQRl9SR0IgVEouUEZfKn0pCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqLworICBwdWJsaWMgdm9pZCBkZWNvbXByZXNzKGludFtdIGRzdEJ1ZiwgaW50IHgsIGludCB5LCBpbnQgZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGUsIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGlmIChqcGVnQnVmID09IG51bGwgJiYgeXV2SW1hZ2UgPT0gbnVsbCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGlmIChkc3RCdWYgPT0gbnVsbCB8fCB4IDwgMCB8fCB5IDwgMCB8fCBzdHJpZGUgPCAwIHx8CisgICAgICAgICh5dXZJbWFnZSAhPSBudWxsICYmIChkZXNpcmVkV2lkdGggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwKSkgfHwKKyAgICAgICAgcGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IFRKLk5VTVBGIHx8IGZsYWdzIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZGVjb21wcmVzcygpIik7CisgICAgaWYgKHl1dkltYWdlICE9IG51bGwpCisgICAgICBkZWNvZGVZVVYoeXV2SW1hZ2UuZ2V0UGxhbmVzKCksIHl1dkltYWdlLmdldE9mZnNldHMoKSwKKyAgICAgICAgICAgICAgICB5dXZJbWFnZS5nZXRTdHJpZGVzKCksIHl1dkltYWdlLmdldFN1YnNhbXAoKSwgZHN0QnVmLCB4LCB5LAorICAgICAgICAgICAgICAgIHl1dkltYWdlLmdldFdpZHRoKCksIHN0cmlkZSwgeXV2SW1hZ2UuZ2V0SGVpZ2h0KCksIHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICBkZWNvbXByZXNzKGpwZWdCdWYsIGpwZWdCdWZTaXplLCBkc3RCdWYsIHgsIHksIGRlc2lyZWRXaWR0aCwgc3RyaWRlLAorICAgICAgICAgICAgICAgICBkZXNpcmVkSGVpZ2h0LCBwaXhlbEZvcm1hdCwgZmxhZ3MpOworICB9CisKKyAgLyoqCisgICAqIERlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIG9yIGRlY29kZSB0aGUgWVVWIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkCisgICAqIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIG91dHB1dCBhIGRlY29tcHJlc3NlZC9kZWNvZGVkIGltYWdlIHRvCisgICAqIHRoZSBnaXZlbiA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZS4KKyAgICogPHA+CisgICAqIE5PVEU6IFRoZSBvdXRwdXQgaW1hZ2UgaXMgZnVsbHkgcmVjb3ZlcmFibGUgaWYgdGhpcyBtZXRob2QgdGhyb3dzIGEKKyAgICogbm9uLWZhdGFsIHtAbGluayBUSkV4Y2VwdGlvbn0gKHVubGVzcworICAgKiB7QGxpbmsgVEojRkxBR19TVE9QT05XQVJOSU5HIFRKLkZMQUdfU1RPUE9OV0FSTklOR30gaXMgc3BlY2lmaWVkLikKKyAgICoKKyAgICogQHBhcmFtIGRzdEltYWdlIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgdGhhdCB3aWxsIHJlY2VpdmUKKyAgICogdGhlIGRlY29tcHJlc3NlZC9kZWNvZGVkIGltYWdlLiAgSWYgdGhlIHNvdXJjZSBpbWFnZSBpcyBhIEpQRUcgaW1hZ2UsIHRoZW4KKyAgICogdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIDxjb2RlPkJ1ZmZlcmVkSW1hZ2U8L2NvZGU+IGluc3RhbmNlIG11c3QgbWF0Y2gKKyAgICogb25lIG9mIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZXMgdGhhdCBUdXJib0pQRUcgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGZyb20KKyAgICogdGhlIEpQRUcgaW1hZ2UuICBJZiB0aGUgc291cmNlIGltYWdlIGlzIGEgWVVWIGltYWdlLCB0aGVuIHRoZSB3aWR0aCBhbmQKKyAgICogaGVpZ2h0IG9mIHRoZSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBtdXN0IG1hdGNoIHRoZSB3aWR0aCBhbmQKKyAgICogaGVpZ2h0IG9mIHRoZSBZVVYgaW1hZ2UuCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqLworICBwdWJsaWMgdm9pZCBkZWNvbXByZXNzKEJ1ZmZlcmVkSW1hZ2UgZHN0SW1hZ2UsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGlmIChkc3RJbWFnZSA9PSBudWxsIHx8IGZsYWdzIDwgMCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZGVjb21wcmVzcygpIik7CisgICAgaW50IGRlc2lyZWRXaWR0aCA9IGRzdEltYWdlLmdldFdpZHRoKCk7CisgICAgaW50IGRlc2lyZWRIZWlnaHQgPSBkc3RJbWFnZS5nZXRIZWlnaHQoKTsKKyAgICBpbnQgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodDsKKworICAgIGlmICh5dXZJbWFnZSAhPSBudWxsKSB7CisgICAgICBpZiAoZGVzaXJlZFdpZHRoICE9IHl1dkltYWdlLmdldFdpZHRoKCkgfHwKKyAgICAgICAgICBkZXNpcmVkSGVpZ2h0ICE9IHl1dkltYWdlLmdldEhlaWdodCgpKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCdWZmZXJlZEltYWdlIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2UgaW1hZ2UuIik7CisgICAgICBzY2FsZWRXaWR0aCA9IHl1dkltYWdlLmdldFdpZHRoKCk7CisgICAgICBzY2FsZWRIZWlnaHQgPSB5dXZJbWFnZS5nZXRIZWlnaHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgc2NhbGVkV2lkdGggPSBnZXRTY2FsZWRXaWR0aChkZXNpcmVkV2lkdGgsIGRlc2lyZWRIZWlnaHQpOworICAgICAgc2NhbGVkSGVpZ2h0ID0gZ2V0U2NhbGVkSGVpZ2h0KGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7CisgICAgICBpZiAoc2NhbGVkV2lkdGggIT0gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCAhPSBkZXNpcmVkSGVpZ2h0KQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCdWZmZXJlZEltYWdlIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIG9uZSBvZiB0aGUgc2NhbGVkIGltYWdlIHNpemVzIHRoYXQgVHVyYm9KUEVHIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZy4iKTsKKyAgICB9CisgICAgaW50IHBpeGVsRm9ybWF0OyAgYm9vbGVhbiBpbnRQaXhlbHMgPSBmYWxzZTsKKyAgICBpZiAoYnl0ZU9yZGVyID09IG51bGwpCisgICAgICBieXRlT3JkZXIgPSBCeXRlT3JkZXIubmF0aXZlT3JkZXIoKTsKKyAgICBzd2l0Y2ggKGRzdEltYWdlLmdldFR5cGUoKSkgeworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzNCWVRFX0JHUjoKKyAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfQkdSOyAgYnJlYWs7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfNEJZVEVfQUJHUjoKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV80QllURV9BQkdSX1BSRToKKyAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfWEJHUjsgIGJyZWFrOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0JZVEVfR1JBWToKKyAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfR1JBWTsgIGJyZWFrOworICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1I6CisgICAgICBpZiAoYnl0ZU9yZGVyID09IEJ5dGVPcmRlci5CSUdfRU5ESUFOKQorICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hCR1I7CisgICAgICBlbHNlCisgICAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfUkdCWDsKKyAgICAgIGludFBpeGVscyA9IHRydWU7ICBicmVhazsKKyAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCOgorICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgcGl4ZWxGb3JtYXQgPSBUSi5QRl9YUkdCOworICAgICAgZWxzZQorICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0JHUlg7CisgICAgICBpbnRQaXhlbHMgPSB0cnVlOyAgYnJlYWs7CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0I6CisgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFOgorICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgcGl4ZWxGb3JtYXQgPSBUSi5QRl9BUkdCOworICAgICAgZWxzZQorICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0JHUkE7CisgICAgICBpbnRQaXhlbHMgPSB0cnVlOyAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3VwcG9ydGVkIEJ1ZmZlcmVkSW1hZ2UgZm9ybWF0Iik7CisgICAgfQorICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gZHN0SW1hZ2UuZ2V0UmFzdGVyKCk7CisgICAgaWYgKGludFBpeGVscykgeworICAgICAgU2luZ2xlUGl4ZWxQYWNrZWRTYW1wbGVNb2RlbCBzbSA9CisgICAgICAgIChTaW5nbGVQaXhlbFBhY2tlZFNhbXBsZU1vZGVsKWRzdEltYWdlLmdldFNhbXBsZU1vZGVsKCk7CisgICAgICBpbnQgc3RyaWRlID0gc20uZ2V0U2NhbmxpbmVTdHJpZGUoKTsKKyAgICAgIERhdGFCdWZmZXJJbnQgZGIgPSAoRGF0YUJ1ZmZlckludCl3ci5nZXREYXRhQnVmZmVyKCk7CisgICAgICBpbnRbXSBidWYgPSBkYi5nZXREYXRhKCk7CisgICAgICBpZiAoeXV2SW1hZ2UgIT0gbnVsbCkKKyAgICAgICAgZGVjb2RlWVVWKHl1dkltYWdlLmdldFBsYW5lcygpLCB5dXZJbWFnZS5nZXRPZmZzZXRzKCksCisgICAgICAgICAgICAgICAgICB5dXZJbWFnZS5nZXRTdHJpZGVzKCksIHl1dkltYWdlLmdldFN1YnNhbXAoKSwgYnVmLCAwLCAwLAorICAgICAgICAgICAgICAgICAgeXV2SW1hZ2UuZ2V0V2lkdGgoKSwgc3RyaWRlLCB5dXZJbWFnZS5nZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgIHBpeGVsRm9ybWF0LCBmbGFncyk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGpwZWdCdWYgPT0gbnVsbCkKKyAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICAgICAgZGVjb21wcmVzcyhqcGVnQnVmLCBqcGVnQnVmU2l6ZSwgYnVmLCAwLCAwLCBzY2FsZWRXaWR0aCwgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgIHNjYWxlZEhlaWdodCwgcGl4ZWxGb3JtYXQsIGZsYWdzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgQ29tcG9uZW50U2FtcGxlTW9kZWwgc20gPQorICAgICAgICAoQ29tcG9uZW50U2FtcGxlTW9kZWwpZHN0SW1hZ2UuZ2V0U2FtcGxlTW9kZWwoKTsKKyAgICAgIGludCBwaXhlbFNpemUgPSBzbS5nZXRQaXhlbFN0cmlkZSgpOworICAgICAgaWYgKHBpeGVsU2l6ZSAhPSBUSi5nZXRQaXhlbFNpemUocGl4ZWxGb3JtYXQpKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbmNvbnNpc3RlbmN5IGJldHdlZW4gcGl4ZWwgZm9ybWF0IGFuZCBwaXhlbCBzaXplIGluIEJ1ZmZlcmVkSW1hZ2UiKTsKKyAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CisgICAgICBEYXRhQnVmZmVyQnl0ZSBkYiA9IChEYXRhQnVmZmVyQnl0ZSl3ci5nZXREYXRhQnVmZmVyKCk7CisgICAgICBieXRlW10gYnVmID0gZGIuZ2V0RGF0YSgpOworICAgICAgZGVjb21wcmVzcyhidWYsIDAsIDAsIHNjYWxlZFdpZHRoLCBwaXRjaCwgc2NhbGVkSGVpZ2h0LCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgZmxhZ3MpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBEZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBvciBkZWNvZGUgdGhlIFlVViBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZAorICAgKiB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCByZXR1cm4gYSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPgorICAgKiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZS4KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRXaWR0aCBzZWUKKyAgICoge0BsaW5rICNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KX0gZm9yCisgICAqIGRlc2NyaXB0aW9uCisgICAqCisgICAqIEBwYXJhbSBkZXNpcmVkSGVpZ2h0IHNlZQorICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfSBmb3IKKyAgICogZGVzY3JpcHRpb24KKyAgICoKKyAgICogQHBhcmFtIGJ1ZmZlcmVkSW1hZ2VUeXBlIHRoZSBpbWFnZSB0eXBlIG9mIHRoZSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPgorICAgKiBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCAoZm9yIGluc3RhbmNlLAorICAgKiA8Y29kZT5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQjwvY29kZT4pCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqCisgICAqIEByZXR1cm4gYSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZQorICAgKiBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZS4KKyAgICovCisgIHB1YmxpYyBCdWZmZXJlZEltYWdlIGRlY29tcHJlc3MoaW50IGRlc2lyZWRXaWR0aCwgaW50IGRlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcmVkSW1hZ2VUeXBlLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBpZiAoKHl1dkltYWdlID09IG51bGwgJiYgKGRlc2lyZWRXaWR0aCA8IDAgfHwgZGVzaXJlZEhlaWdodCA8IDApKSB8fAorICAgICAgICBmbGFncyA8IDApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworICAgIGludCBzY2FsZWRXaWR0aCA9IGdldFNjYWxlZFdpZHRoKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7CisgICAgaW50IHNjYWxlZEhlaWdodCA9IGdldFNjYWxlZEhlaWdodChkZXNpcmVkV2lkdGgsIGRlc2lyZWRIZWlnaHQpOworICAgIEJ1ZmZlcmVkSW1hZ2UgaW1nID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkSW1hZ2VUeXBlKTsKKyAgICBkZWNvbXByZXNzKGltZywgZmxhZ3MpOworICAgIHJldHVybiBpbWc7CisgIH0KKworICAvKioKKyAgICogRnJlZSB0aGUgbmF0aXZlIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFRKRXhjZXB0aW9uIHsKKyAgICBpZiAoaGFuZGxlICE9IDApCisgICAgICBkZXN0cm95KCk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpEZXNpZ25Gb3JFeHRlbnNpb24iKQorICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICB0cnkgeworICAgICAgY2xvc2UoKTsKKyAgICB9IGNhdGNoIChUSkV4Y2VwdGlvbiBlKSB7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgfQorICB9OworCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgaW5pdCgpIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBkZWNvbXByZXNzSGVhZGVyKGJ5dGVbXSBzcmNCdWYsIGludCBzaXplKQorICAgIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBARGVwcmVjYXRlZAorICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlY29tcHJlc3MoYnl0ZVtdIHNyY0J1ZiwgaW50IHNpemUsIGJ5dGVbXSBkc3RCdWYsCisgICAgaW50IGRlc2lyZWRXaWR0aCwgaW50IHBpdGNoLCBpbnQgZGVzaXJlZEhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpCisgICAgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb21wcmVzcyhieXRlW10gc3JjQnVmLCBpbnQgc2l6ZSwgYnl0ZVtdIGRzdEJ1ZiwgaW50IHgsCisgICAgaW50IHksIGludCBkZXNpcmVkV2lkdGgsIGludCBwaXRjaCwgaW50IGRlc2lyZWRIZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBARGVwcmVjYXRlZAorICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlY29tcHJlc3MoYnl0ZVtdIHNyY0J1ZiwgaW50IHNpemUsIGludFtdIGRzdEJ1ZiwKKyAgICBpbnQgZGVzaXJlZFdpZHRoLCBpbnQgc3RyaWRlLCBpbnQgZGVzaXJlZEhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb21wcmVzcyhieXRlW10gc3JjQnVmLCBpbnQgc2l6ZSwgaW50W10gZHN0QnVmLCBpbnQgeCwKKyAgICBpbnQgeSwgaW50IGRlc2lyZWRXaWR0aCwgaW50IHN0cmlkZSwgaW50IGRlc2lyZWRIZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBARGVwcmVjYXRlZAorICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlY29tcHJlc3NUb1lVVihieXRlW10gc3JjQnVmLCBpbnQgc2l6ZSwgYnl0ZVtdIGRzdEJ1ZiwKKyAgICBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbjsKKworICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlY29tcHJlc3NUb1lVVihieXRlW10gc3JjQnVmLCBpbnQgc2l6ZSwKKyAgICBieXRlW11bXSBkc3RQbGFuZXMsIGludFtdIGRzdE9mZnNldHMsIGludCBkZXNpcmVkV2lkdGgsIGludFtdIGRzdFN0cmlkZXMsCisgICAgaW50IGRlc2lyZWRoZWlnaHQsIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb2RlWVVWKGJ5dGVbXVtdIHNyY1BsYW5lcywgaW50W10gc3JjT2Zmc2V0cywKKyAgICBpbnRbXSBzcmNTdHJpZGVzLCBpbnQgc3Vic2FtcCwgYnl0ZVtdIGRzdEJ1ZiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsCisgICAgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb2RlWVVWKGJ5dGVbXVtdIHNyY1BsYW5lcywgaW50W10gc3JjT2Zmc2V0cywKKyAgICBpbnRbXSBzcmNTdHJpZGVzLCBpbnQgc3Vic2FtcCwgaW50W10gZHN0QnVmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwKKyAgICBpbnQgc3RyaWRlLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGludCBmbGFncykgdGhyb3dzIFRKRXhjZXB0aW9uOworCisgIHN0YXRpYyB7CisgICAgVEpMb2FkZXIubG9hZCgpOworICB9CisKKyAgcHJvdGVjdGVkIGxvbmcgaGFuZGxlID0gMDsKKyAgcHJvdGVjdGVkIGJ5dGVbXSBqcGVnQnVmID0gbnVsbDsKKyAgcHJvdGVjdGVkIGludCBqcGVnQnVmU2l6ZSA9IDA7CisgIHByb3RlY3RlZCBZVVZJbWFnZSB5dXZJbWFnZSA9IG51bGw7CisgIHByb3RlY3RlZCBpbnQganBlZ1dpZHRoID0gMDsKKyAgcHJvdGVjdGVkIGludCBqcGVnSGVpZ2h0ID0gMDsKKyAgcHJvdGVjdGVkIGludCBqcGVnU3Vic2FtcCA9IC0xOworICBwcm90ZWN0ZWQgaW50IGpwZWdDb2xvcnNwYWNlID0gLTE7CisgIHByaXZhdGUgQnl0ZU9yZGVyIGJ5dGVPcmRlciA9IG51bGw7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmphdmEgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzYTI1NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTUgVmlrdG9yIFN6YXRobcOhcnkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTctMjAxOCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK0BTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkphdmFkb2NUeXBlIikKK3B1YmxpYyBjbGFzcyBUSkV4Y2VwdGlvbiBleHRlbmRzIElPRXhjZXB0aW9uIHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgcHVibGljIFRKRXhjZXB0aW9uKCkgeworICAgIHN1cGVyKCk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgcHVibGljIFRKRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgY2F1c2UpIHsKKyAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgcHVibGljIFRKRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisgICAgc3VwZXIobWVzc2FnZSk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpKYXZhZG9jTWV0aG9kIikKKyAgcHVibGljIFRKRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBpbnQgY29kZSkgeworICAgIHN1cGVyKG1lc3NhZ2UpOworICAgIGlmIChlcnJvckNvZGUgPj0gMCAmJiBlcnJvckNvZGUgPCBUSi5OVU1FUlIpCisgICAgICBlcnJvckNvZGUgPSBjb2RlOworICB9CisKKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6SmF2YWRvY01ldGhvZCIpCisgIHB1YmxpYyBUSkV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpIHsKKyAgICBzdXBlcihjYXVzZSk7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyBhIGNvZGUgKG9uZSBvZiB7QGxpbmsgVEogVEouRVJSXyp9KSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUKKyAgICogbGFzdCBlcnJvci4KKyAgICoKKyAgICogQHJldHVybiBhIGNvZGUgKG9uZSBvZiB7QGxpbmsgVEogVEouRVJSXyp9KSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUKKyAgICogbGFzdCBlcnJvci4KKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0RXJyb3JDb2RlKCkgeworICAgIHJldHVybiBlcnJvckNvZGU7CisgIH0KKworICBwcml2YXRlIGludCBlcnJvckNvZGUgPSBUSi5FUlJfRkFUQUw7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLXVuaXguamF2YS5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXItdW5peC5qYXZhLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODg0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLXVuaXguamF2YS5pbgpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxMywgMjAxNiBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzsKKworZmluYWwgY2xhc3MgVEpMb2FkZXIgeworICBzdGF0aWMgdm9pZCBsb2FkKCkgeworICAgIHRyeSB7CisgICAgICBTeXN0ZW0ubG9hZExpYnJhcnkoInR1cmJvanBlZyIpOworICAgIH0gY2F0Y2ggKGphdmEubGFuZy5VbnNhdGlzZmllZExpbmtFcnJvciBlKSB7CisgICAgICBTdHJpbmcgb3MgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKS50b0xvd2VyQ2FzZSgpOworICAgICAgaWYgKG9zLmluZGV4T2YoIm1hYyIpID49IDApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBTeXN0ZW0ubG9hZCgiQENNQUtFX0lOU1RBTExfRlVMTF9MSUJESVJAL2xpYnR1cmJvanBlZy5qbmlsaWIiKTsKKyAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLlVuc2F0aXNmaWVkTGlua0Vycm9yIGUyKSB7CisgICAgICAgICAgU3lzdGVtLmxvYWQoIi91c3IvbGliL2xpYnR1cmJvanBlZy5qbmlsaWIiKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBTeXN0ZW0ubG9hZCgiQENNQUtFX0lOU1RBTExfRlVMTF9MSUJESVJAL2xpYnR1cmJvanBlZy5zbyIpOworICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuVW5zYXRpc2ZpZWRMaW5rRXJyb3IgZTMpIHsKKyAgICAgICAgICBTdHJpbmcgbGliZGlyID0gIkBDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSQCI7CisgICAgICAgICAgaWYgKGxpYmRpci5lcXVhbHMoIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQC9saWI2NCIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ubG9hZCgiQENNQUtFX0lOU1RBTExfREVGQVVMVF9QUkVGSVhAL2xpYjMyL2xpYnR1cmJvanBlZy5zbyIpOworICAgICAgICAgIH0gZWxzZSBpZiAobGliZGlyLmVxdWFscygiQENNQUtFX0lOU1RBTExfREVGQVVMVF9QUkVGSVhAL2xpYjMyIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5sb2FkKCJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAvbGliNjQvbGlidHVyYm9qcGVnLnNvIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IGUzOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci13aW4uamF2YS5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXItd2luLmphdmEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5Nzc4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXItd2luLmphdmEuaW4KQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDExIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnOworCitmaW5hbCBjbGFzcyBUSkxvYWRlciB7CisgIHN0YXRpYyB2b2lkIGxvYWQoKSB7CisgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJAVFVSQk9KUEVHX0RMTF9OQU1FQCIpOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5qYXZhIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Y5MTc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuamF2YQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDExLCAyMDE4IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpMjAxNSBWaWt0b3IgU3phdGhtw6FyeS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnOworCisvKioKKyAqIEZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3IKKyAqLworcHVibGljIGNsYXNzIFRKU2NhbGluZ0ZhY3RvciB7CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBzY2FsaW5nIGZhY3RvciBpbnN0YW5jZS4KKyAgICoKKyAgICogQHBhcmFtIG51bSBudW1lcmF0b3IKKyAgICogQHBhcmFtIGRlbm9tIGRlbm9taW5hdG9yCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygiY2hlY2tzdHlsZTpIaWRkZW5GaWVsZCIpCisgIHB1YmxpYyBUSlNjYWxpbmdGYWN0b3IoaW50IG51bSwgaW50IGRlbm9tKSB7CisgICAgaWYgKG51bSA8IDEgfHwgZGVub20gPCAxKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBtdXN0IGJlID49IDEiKTsKKyAgICB0aGlzLm51bSA9IG51bTsKKyAgICB0aGlzLmRlbm9tID0gZGVub207CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyBudW1lcmF0b3IKKyAgICoKKyAgICogQHJldHVybiBudW1lcmF0b3IKKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0TnVtKCkgeworICAgIHJldHVybiBudW07CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyBkZW5vbWluYXRvcgorICAgKgorICAgKiBAcmV0dXJuIGRlbm9taW5hdG9yCisgICAqLworICBwdWJsaWMgaW50IGdldERlbm9tKCkgeworICAgIHJldHVybiBkZW5vbTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzY2FsZWQgdmFsdWUgb2YgPGNvZGU+ZGltZW5zaW9uPC9jb2RlPi4gIFRoaXMgZnVuY3Rpb24KKyAgICogcGVyZm9ybXMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZgorICAgKiA8Y29kZT5jZWlsKGRpbWVuc2lvbiAqIHNjYWxpbmdGYWN0b3IpPC9jb2RlPi4KKyAgICoKKyAgICogQHBhcmFtIGRpbWVuc2lvbiB3aWR0aCBvciBoZWlnaHQgdG8gbXVsdGlwbHkgYnkgdGhpcyBzY2FsaW5nIGZhY3RvcgorICAgKgorICAgKiBAcmV0dXJuIHRoZSBzY2FsZWQgdmFsdWUgb2YgPGNvZGU+ZGltZW5zaW9uPC9jb2RlPi4KKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0U2NhbGVkKGludCBkaW1lbnNpb24pIHsKKyAgICByZXR1cm4gKGRpbWVuc2lvbiAqIG51bSArIGRlbm9tIC0gMSkgLyBkZW5vbTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRydWUgb3IgZmFsc2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaW5zdGFuY2UgYW5kCisgICAqIDxjb2RlPm90aGVyPC9jb2RlPiBoYXZlIHRoZSBzYW1lIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuCisgICAqCisgICAqIEBwYXJhbSBvdGhlciB0aGUgc2NhbGluZyBmYWN0b3IgYWdhaW5zdCB3aGljaCB0byBjb21wYXJlIHRoaXMgb25lCisgICAqCisgICAqIEByZXR1cm4gdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBhbmQKKyAgICogPGNvZGU+b3RoZXI8L2NvZGU+IGhhdmUgdGhlIHNhbWUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvci4KKyAgICovCisgIHB1YmxpYyBib29sZWFuIGVxdWFscyhUSlNjYWxpbmdGYWN0b3Igb3RoZXIpIHsKKyAgICByZXR1cm4gdGhpcy5udW0gPT0gb3RoZXIubnVtICYmIHRoaXMuZGVub20gPT0gb3RoZXIuZGVub207CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGluc3RhbmNlIGlzIGVxdWFsIHRvCisgICAqIDEvMS4KKyAgICoKKyAgICogQHJldHVybiB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGluc3RhbmNlIGlzIGVxdWFsIHRvCisgICAqIDEvMS4KKyAgICovCisgIHB1YmxpYyBib29sZWFuIGlzT25lKCkgeworICAgIHJldHVybiBudW0gPT0gMSAmJiBkZW5vbSA9PSAxOworICB9CisKKyAgLyoqCisgICAqIE51bWVyYXRvcgorICAgKi8KKyAgcHJpdmF0ZSBpbnQgbnVtID0gMTsKKworICAvKioKKyAgICogRGVub21pbmF0b3IKKyAgICovCisgIHByaXZhdGUgaW50IGRlbm9tID0gMTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uamF2YSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWM0YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5qYXZhCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEsIDIwMTMsIDIwMTggRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworCisvKioKKyAqIExvc3NsZXNzIHRyYW5zZm9ybSBwYXJhbWV0ZXJzCisgKi8KK3B1YmxpYyBjbGFzcyBUSlRyYW5zZm9ybSBleHRlbmRzIFJlY3RhbmdsZSB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTEyNzM2NzcwNTc2MTQzMDM3MUw7CisKKyAgLyoqCisgICAqIFRoZSBudW1iZXIgb2YgbG9zc2xlc3MgdHJhbnNmb3JtIG9wZXJhdGlvbnMKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTU9QICAgICAgICAgPSA4OworICAvKioKKyAgICogRG8gbm90IHRyYW5zZm9ybSB0aGUgcG9zaXRpb24gb2YgdGhlIGltYWdlIHBpeGVscy4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QX05PTkUgICAgICAgPSAwOworICAvKioKKyAgICogRmxpcCAobWlycm9yKSBpbWFnZSBob3Jpem9udGFsbHkuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUKKyAgICogYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UuCisgICAqIEBzZWUgI09QVF9QRVJGRUNUCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUF9IRkxJUCAgICAgID0gMTsKKyAgLyoqCisgICAqIEZsaXAgKG1pcnJvcikgaW1hZ2UgdmVydGljYWxseS4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUKKyAgICogYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgYm90dG9tIGVkZ2UuCisgICAqIEBzZWUgI09QVF9QRVJGRUNUCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUF9WRkxJUCAgICAgID0gMjsKKyAgLyoqCisgICAqIFRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodCBheGlzKS4gIFRoaXMKKyAgICogdHJhbnNmb3JtIGlzIGFsd2F5cyBwZXJmZWN0LgorICAgKiBAc2VlICNPUFRfUEVSRkVDVAorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BfVFJBTlNQT1NFICA9IDM7CisgIC8qKgorICAgKiBUcmFuc3ZlcnNlIHRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgcmlnaHQgdG8gbG93ZXIgbGVmdAorICAgKiBheGlzKS4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBpbgorICAgKiB0aGUgaW1hZ2UuCisgICAqIEBzZWUgI09QVF9QRVJGRUNUCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUF9UUkFOU1ZFUlNFID0gNDsKKyAgLyoqCisgICAqIFJvdGF0ZSBpbWFnZSBjbG9ja3dpc2UgYnkgOTAgZGVncmVlcy4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZgorICAgKiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgYm90dG9tIGVkZ2UuCisgICAqIEBzZWUgI09QVF9QRVJGRUNUCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUF9ST1Q5MCAgICAgID0gNTsKKyAgLyoqCisgICAqIFJvdGF0ZSBpbWFnZSAxODAgZGVncmVlcy4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUgYW55CisgICAqIHBhcnRpYWwgTUNVIGJsb2NrcyBpbiB0aGUgaW1hZ2UuCisgICAqIEBzZWUgI09QVF9QRVJGRUNUCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUF9ST1QxODAgICAgID0gNjsKKyAgLyoqCisgICAqIFJvdGF0ZSBpbWFnZSBjb3VudGVyLWNsb2Nrd2lzZSBieSA5MCBkZWdyZWVzLiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0CisgICAqIGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIG9uIHRoZSByaWdodCBlZGdlLgorICAgKiBAc2VlICNPUFRfUEVSRkVDVAorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BfUk9UMjcwICAgICA9IDc7CisKKworICAvKioKKyAgICogVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB7QGxpbmsgVEpUcmFuc2Zvcm1lciN0cmFuc2Zvcm0KKyAgICogVEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKX0gdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90CisgICAqIHBlcmZlY3QuICBMb3NzbGVzcyB0cmFuc2Zvcm1zIG9wZXJhdGUgb24gTUNVIGJsb2Nrcywgd2hvc2Ugc2l6ZSBkZXBlbmRzIG9uCisgICAqIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkLiAgSWYgdGhlIGltYWdlJ3Mgd2lkdGggb3IgaGVpZ2h0CisgICAqIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgc2l6ZSAoc2VlIHtAbGluayBUSiNnZXRNQ1VXaWR0aH0KKyAgICogYW5kIHtAbGluayBUSiNnZXRNQ1VIZWlnaHR9KSwgdGhlbiB0aGVyZSB3aWxsIGJlIHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUKKyAgICogcmlnaHQgYW5kL29yIGJvdHRvbSBlZGdlcy4gICBJdCBpcyBub3QgcG9zc2libGUgdG8gbW92ZSB0aGVzZSBwYXJ0aWFsIE1DVQorICAgKiBibG9ja3MgdG8gdGhlIHRvcCBvciBsZWZ0IG9mIHRoZSBpbWFnZSwgc28gYW55IHRyYW5zZm9ybSB0aGF0IHdvdWxkCisgICAqIHJlcXVpcmUgdGhhdCBpcyAiaW1wZXJmZWN0LiIgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gYW55CisgICAqIHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0cmFuc2Zvcm1lZCB3aWxsIGJlIGxlZnQgaW4gcGxhY2UsIHdoaWNoCisgICAqIHdpbGwgY3JlYXRlIG9kZC1sb29raW5nIHN0cmlwcyBvbiB0aGUgcmlnaHQgb3IgYm90dG9tIGVkZ2Ugb2YgdGhlIGltYWdlLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BUX1BFUkZFQ1QgICAgID0gMTsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHdpbGwgZGlzY2FyZCBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIHRoYXQgY2Fubm90IGJlCisgICAqIHRyYW5zZm9ybWVkLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BUX1RSSU0gICAgICAgID0gMjsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGxvc3NsZXNzIGNyb3BwaW5nLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BUX0NST1AgICAgICAgID0gNDsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHdpbGwgZGlzY2FyZCB0aGUgY29sb3IgZGF0YSBpbiB0aGUgaW5wdXQgaW1hZ2UgYW5kIHByb2R1Y2UKKyAgICogYSBncmF5c2NhbGUgb3V0cHV0IGltYWdlLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BUX0dSQVkgICAgICAgID0gODsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCB7QGxpbmsgVEpUcmFuc2Zvcm1lciN0cmFuc2Zvcm0KKyAgICogVEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKX0gZnJvbSBvdXRwdXR0aW5nIGEgSlBFRyBpbWFnZSBmb3IgdGhpcworICAgKiBwYXJ0aWN1bGFyIHRyYW5zZm9ybS4gIFRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGN1c3RvbQorICAgKiBmaWx0ZXIgdG8gY2FwdHVyZSB0aGUgdHJhbnNmb3JtZWQgRENUIGNvZWZmaWNpZW50cyB3aXRob3V0IHRyYW5zY29kaW5nCisgICAqIHRoZW0uCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUFRfTk9PVVRQVVQgICAgPSAxNjsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHByb2dyZXNzaXZlIGVudHJvcHkgY29kaW5nIGluIHRoZSBvdXRwdXQgaW1hZ2UKKyAgICogZ2VuZXJhdGVkIGJ5IHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0uICBQcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyB3aWxsCisgICAqIGdlbmVyYWxseSBpbXByb3ZlIGNvbXByZXNzaW9uIHJlbGF0aXZlIHRvIGJhc2VsaW5lIGVudHJvcHkgY29kaW5nICh0aGUKKyAgICogZGVmYXVsdCksIGJ1dCBpdCB3aWxsIHJlZHVjZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBwZXJmb3JtYW5jZQorICAgKiBjb25zaWRlcmFibHkuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUFRfUFJPR1JFU1NJVkUgPSAzMjsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCB7QGxpbmsgVEpUcmFuc2Zvcm1lciN0cmFuc2Zvcm0KKyAgICogVEpUcmFuc2Zvcm1lci50cmFuc2Zvcm0oKX0gZnJvbSBjb3B5aW5nIGFueSBleHRyYSBtYXJrZXJzIChpbmNsdWRpbmcgRVhJRgorICAgKiBhbmQgSUNDIHByb2ZpbGUgZGF0YSkgZnJvbSB0aGUgc291cmNlIGltYWdlIHRvIHRoZSBvdXRwdXQgaW1hZ2UuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUFRfQ09QWU5PTkUgICAgPSA2NDsKKworCisgIC8qKgorICAgKiBDcmVhdGUgYSBuZXcgbG9zc2xlc3MgdHJhbnNmb3JtIGluc3RhbmNlLgorICAgKi8KKyAgcHVibGljIFRKVHJhbnNmb3JtKCkgeworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIG5ldyBsb3NzbGVzcyB0cmFuc2Zvcm0gaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAgICoKKyAgICogQHBhcmFtIHggdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFRoaXMgbXVzdCBiZSBldmVubHkKKyAgICogZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgd2lkdGggKHNlZSB7QGxpbmsgVEojZ2V0TUNVV2lkdGh9KQorICAgKgorICAgKiBAcGFyYW0geSB0aGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFRoaXMgbXVzdCBiZSBldmVubHkKKyAgICogZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUge0BsaW5rIFRKI2dldE1DVUhlaWdodH0pCisgICAqCisgICAqIEBwYXJhbSB3IHRoZSB3aWR0aCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlCisgICAqIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byAod2lkdGggb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0KKyAgICogPGNvZGU+eDwvY29kZT4pLgorICAgKgorICAgKiBAcGFyYW0gaCB0aGUgaGVpZ2h0IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUKKyAgICogZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIChoZWlnaHQgb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0KKyAgICogPGNvZGU+eTwvY29kZT4pLgorICAgKgorICAgKiBAcGFyYW0gb3Agb25lIG9mIHRoZSB0cmFuc2Zvcm0gb3BlcmF0aW9ucyAoPGNvZGU+T1BfKjwvY29kZT4pCisgICAqCisgICAqIEBwYXJhbSBvcHRpb25zIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSB0cmFuc2Zvcm0gb3B0aW9ucworICAgKiAoPGNvZGU+T1BUXyo8L2NvZGU+KQorICAgKgorICAgKiBAcGFyYW0gY2YgYW4gaW5zdGFuY2Ugb2YgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUge0BsaW5rCisgICAqIFRKQ3VzdG9tRmlsdGVyfSBpbnRlcmZhY2UsIG9yIG51bGwgaWYgbm8gY3VzdG9tIGZpbHRlciBpcyBuZWVkZWQKKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkhpZGRlbkZpZWxkIikKKyAgcHVibGljIFRKVHJhbnNmb3JtKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgb3AsIGludCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgVEpDdXN0b21GaWx0ZXIgY2YpIHsKKyAgICBzdXBlcih4LCB5LCB3LCBoKTsKKyAgICB0aGlzLm9wID0gb3A7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICB0aGlzLmNmID0gY2Y7CisgIH0KKworICAvKioKKyAgICogQ3JlYXRlIGEgbmV3IGxvc3NsZXNzIHRyYW5zZm9ybSBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorICAgKgorICAgKiBAcGFyYW0gciBhIDxjb2RlPlJlY3RhbmdsZTwvY29kZT4gaW5zdGFuY2UgdGhhdCBzcGVjaWZpZXMgdGhlIGNyb3BwaW5nCisgICAqIHJlZ2lvbi4gIFNlZSB7QGxpbmsKKyAgICogI1RKVHJhbnNmb3JtKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFRKQ3VzdG9tRmlsdGVyKX0gZm9yIG1vcmUKKyAgICogZGV0YWlsLgorICAgKgorICAgKiBAcGFyYW0gb3Agb25lIG9mIHRoZSB0cmFuc2Zvcm0gb3BlcmF0aW9ucyAoPGNvZGU+T1BfKjwvY29kZT4pCisgICAqCisgICAqIEBwYXJhbSBvcHRpb25zIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSB0cmFuc2Zvcm0gb3B0aW9ucworICAgKiAoPGNvZGU+T1BUXyo8L2NvZGU+KQorICAgKgorICAgKiBAcGFyYW0gY2YgYW4gaW5zdGFuY2Ugb2YgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUge0BsaW5rCisgICAqIFRKQ3VzdG9tRmlsdGVyfSBpbnRlcmZhY2UsIG9yIG51bGwgaWYgbm8gY3VzdG9tIGZpbHRlciBpcyBuZWVkZWQKKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOkhpZGRlbkZpZWxkIikKKyAgcHVibGljIFRKVHJhbnNmb3JtKFJlY3RhbmdsZSByLCBpbnQgb3AsIGludCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgVEpDdXN0b21GaWx0ZXIgY2YpIHsKKyAgICBzdXBlcihyKTsKKyAgICB0aGlzLm9wID0gb3A7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICB0aGlzLmNmID0gY2Y7CisgIH0KKworICAvKioKKyAgICogVHJhbnNmb3JtIG9wZXJhdGlvbiAob25lIG9mIDxjb2RlPk9QXyo8L2NvZGU+KQorICAgKi8KKyAgQFN1cHByZXNzV2FybmluZ3MoImNoZWNrc3R5bGU6VmlzaWJpbGl0eU1vZGlmaWVyIikKKyAgcHVibGljIGludCBvcCA9IDA7CisKKyAgLyoqCisgICAqIFRyYW5zZm9ybSBvcHRpb25zIChiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDxjb2RlPk9QVF8qPC9jb2RlPikKKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOlZpc2liaWxpdHlNb2RpZmllciIpCisgIHB1YmxpYyBpbnQgb3B0aW9ucyA9IDA7CisKKyAgLyoqCisgICAqIEN1c3RvbSBmaWx0ZXIgaW5zdGFuY2UKKyAgICovCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJjaGVja3N0eWxlOlZpc2liaWxpdHlNb2RpZmllciIpCisgIHB1YmxpYyBUSkN1c3RvbUZpbHRlciBjZiA9IG51bGw7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuamF2YSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTU2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDExLCAyMDEzLTIwMTUgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykyMDE1IFZpa3RvciBTemF0aG3DoXJ5LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc7CisKKy8qKgorICogVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyCisgKi8KK3B1YmxpYyBjbGFzcyBUSlRyYW5zZm9ybWVyIGV4dGVuZHMgVEpEZWNvbXByZXNzb3IgeworCisgIC8qKgorICAgKiBDcmVhdGUgYSBUdXJib0pQRUcgbG9zc2xlc3MgdHJhbnNmb3JtZXIgaW5zdGFuY2UuCisgICAqLworICBwdWJsaWMgVEpUcmFuc2Zvcm1lcigpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaW5pdCgpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCisgICAqIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCisgICAqCisgICAqIEBwYXJhbSBqcGVnSW1hZ2UgSlBFRyBpbWFnZSBidWZmZXIgKHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgaXMgYXNzdW1lZCB0bworICAgKiBiZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4pICBUaGlzIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuCisgICAqLworICBwdWJsaWMgVEpUcmFuc2Zvcm1lcihieXRlW10ganBlZ0ltYWdlKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGluaXQoKTsKKyAgICBzZXRTb3VyY2VJbWFnZShqcGVnSW1hZ2UsIGpwZWdJbWFnZS5sZW5ndGgpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCisgICAqIGltYWdlIG9mIGxlbmd0aCA8Y29kZT5pbWFnZVNpemU8L2NvZGU+IGJ5dGVzIHN0b3JlZCBpbgorICAgKiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCisgICAqCisgICAqIEBwYXJhbSBqcGVnSW1hZ2UgSlBFRyBpbWFnZSBidWZmZXIuICBUaGlzIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQuCisgICAqCisgICAqIEBwYXJhbSBpbWFnZVNpemUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpCisgICAqLworICBwdWJsaWMgVEpUcmFuc2Zvcm1lcihieXRlW10ganBlZ0ltYWdlLCBpbnQgaW1hZ2VTaXplKSB0aHJvd3MgVEpFeGNlcHRpb24geworICAgIGluaXQoKTsKKyAgICBzZXRTb3VyY2VJbWFnZShqcGVnSW1hZ2UsIGltYWdlU2l6ZSk7CisgIH0KKworICAvKioKKyAgICogTG9zc2xlc3NseSB0cmFuc2Zvcm0gdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNmb3JtZXIKKyAgICogaW5zdGFuY2UgaW50byBvbmUgb3IgbW9yZSBKUEVHIGltYWdlcyBzdG9yZWQgaW4gdGhlIGdpdmVuIGRlc3RpbmF0aW9uCisgICAqIGJ1ZmZlcnMuICBMb3NzbGVzcyB0cmFuc2Zvcm1zIHdvcmsgYnkgbW92aW5nIHRoZSByYXcgY29lZmZpY2llbnRzIGZyb20gb25lCisgICAqIEpQRUcgaW1hZ2Ugc3RydWN0dXJlIHRvIGFub3RoZXIgd2l0aG91dCBhbHRlcmluZyB0aGUgdmFsdWVzIG9mIHRoZQorICAgKiBjb2VmZmljaWVudHMuICBXaGlsZSB0aGlzIGlzIHR5cGljYWxseSBmYXN0ZXIgdGhhbiBkZWNvbXByZXNzaW5nIHRoZQorICAgKiBpbWFnZSwgdHJhbnNmb3JtaW5nIGl0LCBhbmQgcmUtY29tcHJlc3NpbmcgaXQsIGxvc3NsZXNzIHRyYW5zZm9ybXMgYXJlIG5vdAorICAgKiBmcmVlLiAgRWFjaCBsb3NzbGVzcyB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgcGVyZm9ybWluZyBIdWZmbWFuCisgICAqIGRlY29kaW5nIG9uIGFsbCBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICAqIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiAgVGh1cywgdGhpcyBtZXRob2QgcHJvdmlkZXMgYSBtZWFucyBvZgorICAgKiBnZW5lcmF0aW5nIG11bHRpcGxlIHRyYW5zZm9ybWVkIGltYWdlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciBvZiBhcHBseWluZworICAgKiBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCB0bworICAgKiByZWFkIHRoZSBzb3VyY2UgY29lZmZpY2llbnRzIG11bHRpcGxlIHRpbWVzLgorICAgKgorICAgKiBAcGFyYW0gZHN0QnVmcyBhbiBhcnJheSBvZiBpbWFnZSBidWZmZXJzLiAgPGNvZGU+ZHN0YnVmc1tpXTwvY29kZT4gd2lsbAorICAgKiByZWNlaXZlIGEgSlBFRyBpbWFnZSB0aGF0IGhhcyBiZWVuIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGluCisgICAqIDxjb2RlPnRyYW5zZm9ybXNbaV08L2NvZGU+LiAgVXNlIHtAbGluayBUSiNidWZTaXplfSB0byBkZXRlcm1pbmUgdGhlCisgICAqIG1heGltdW0gc2l6ZSBmb3IgZWFjaCBidWZmZXIgYmFzZWQgb24gdGhlIHRyYW5zZm9ybWVkIG9yIGNyb3BwZWQgd2lkdGggYW5kCisgICAqIGhlaWdodCBhbmQgdGhlIGxldmVsIG9mIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyAgICoKKyAgICogQHBhcmFtIHRyYW5zZm9ybXMgYW4gYXJyYXkgb2Yge0BsaW5rIFRKVHJhbnNmb3JtfSBpbnN0YW5jZXMsIGVhY2ggb2YKKyAgICogd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUKKyAgICogY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KKyAgICovCisgIHB1YmxpYyB2b2lkIHRyYW5zZm9ybShieXRlW11bXSBkc3RCdWZzLCBUSlRyYW5zZm9ybVtdIHRyYW5zZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgaWYgKGpwZWdCdWYgPT0gbnVsbCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkpQRUcgYnVmZmVyIG5vdCBpbml0aWFsaXplZCIpOworICAgIHRyYW5zZm9ybWVkU2l6ZXMgPSB0cmFuc2Zvcm0oanBlZ0J1ZiwganBlZ0J1ZlNpemUsIGRzdEJ1ZnMsIHRyYW5zZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgIH0KKworICAvKioKKyAgICogTG9zc2xlc3NseSB0cmFuc2Zvcm0gdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNmb3JtZXIKKyAgICogaW5zdGFuY2UgYW5kIHJldHVybiBhbiBhcnJheSBvZiB7QGxpbmsgVEpEZWNvbXByZXNzb3J9IGluc3RhbmNlcywgZWFjaCBvZgorICAgKiB3aGljaCBoYXMgYSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAgICoKKyAgICogQHBhcmFtIHRyYW5zZm9ybXMgYW4gYXJyYXkgb2Yge0BsaW5rIFRKVHJhbnNmb3JtfSBpbnN0YW5jZXMsIGVhY2ggb2YKKyAgICogd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUKKyAgICogY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KKyAgICoKKyAgICogQHJldHVybiBhbiBhcnJheSBvZiB7QGxpbmsgVEpEZWNvbXByZXNzb3J9IGluc3RhbmNlcywgZWFjaCBvZgorICAgKiB3aGljaCBoYXMgYSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAgICovCisgIHB1YmxpYyBUSkRlY29tcHJlc3NvcltdIHRyYW5zZm9ybShUSlRyYW5zZm9ybVtdIHRyYW5zZm9ybXMsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBUSkV4Y2VwdGlvbiB7CisgICAgYnl0ZVtdW10gZHN0QnVmcyA9IG5ldyBieXRlW3RyYW5zZm9ybXMubGVuZ3RoXVtdOworICAgIGlmIChqcGVnV2lkdGggPCAxIHx8IGpwZWdIZWlnaHQgPCAxKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSlBFRyBidWZmZXIgbm90IGluaXRpYWxpemVkIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7CisgICAgICBpbnQgdyA9IGpwZWdXaWR0aCwgaCA9IGpwZWdIZWlnaHQ7CisgICAgICBpZiAoKHRyYW5zZm9ybXNbaV0ub3B0aW9ucyAmIFRKVHJhbnNmb3JtLk9QVF9DUk9QKSAhPSAwKSB7CisgICAgICAgIGlmICh0cmFuc2Zvcm1zW2ldLndpZHRoICE9IDApIHcgPSB0cmFuc2Zvcm1zW2ldLndpZHRoOworICAgICAgICBpZiAodHJhbnNmb3Jtc1tpXS5oZWlnaHQgIT0gMCkgaCA9IHRyYW5zZm9ybXNbaV0uaGVpZ2h0OworICAgICAgfQorICAgICAgZHN0QnVmc1tpXSA9IG5ldyBieXRlW1RKLmJ1ZlNpemUodywgaCwganBlZ1N1YnNhbXApXTsKKyAgICB9CisgICAgVEpEZWNvbXByZXNzb3JbXSB0amQgPSBuZXcgVEpEZWNvbXByZXNzb3JbdHJhbnNmb3Jtcy5sZW5ndGhdOworICAgIHRyYW5zZm9ybShkc3RCdWZzLCB0cmFuc2Zvcm1zLCBmbGFncyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKQorICAgICAgdGpkW2ldID0gbmV3IFRKRGVjb21wcmVzc29yKGRzdEJ1ZnNbaV0sIHRyYW5zZm9ybWVkU2l6ZXNbaV0pOworICAgIHJldHVybiB0amQ7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzaXplcyBvZiB0aGUgdHJhbnNmb3JtZWQgSlBFRyBpbWFnZXMKKyAgICogZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgorICAgKgorICAgKiBAcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcworICAgKiBnZW5lcmF0ZWQgYnkgdGhlIG1vc3QgcmVjZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCisgICAqLworICBwdWJsaWMgaW50W10gZ2V0VHJhbnNmb3JtZWRTaXplcygpIHsKKyAgICBpZiAodHJhbnNmb3JtZWRTaXplcyA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm8gaW1hZ2UgaGFzIGJlZW4gdHJhbnNmb3JtZWQgeWV0Iik7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkU2l6ZXM7CisgIH0KKworICBwcml2YXRlIG5hdGl2ZSB2b2lkIGluaXQoKSB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgcHJpdmF0ZSBuYXRpdmUgaW50W10gdHJhbnNmb3JtKGJ5dGVbXSBzcmNCdWYsIGludCBzcmNTaXplLCBieXRlW11bXSBkc3RCdWZzLAorICAgIFRKVHJhbnNmb3JtW10gdHJhbnNmb3JtcywgaW50IGZsYWdzKSB0aHJvd3MgVEpFeGNlcHRpb247CisKKyAgc3RhdGljIHsKKyAgICBUSkxvYWRlci5sb2FkKCk7CisgIH0KKworICBwcml2YXRlIGludFtdIHRyYW5zZm9ybWVkU2l6ZXMgPSBudWxsOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5qYXZhIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9ZVVZJbWFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYTk4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1lVVkltYWdlLmphdmEKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAxNCwgMjAxNyBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTUgVmlrdG9yIFN6YXRobcOhcnkuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzsKKworLyoqCisgKiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyBhIFlVViBwbGFuYXIgaW1hZ2UgYW5kIHRoZSBtZXRhZGF0YQorICogYXNzb2NpYXRlZCB3aXRoIGl0LiAgVGhlIFR1cmJvSlBFRyBBUEkgYWxsb3dzIGJvdGggdGhlIEpQRUcgY29tcHJlc3Npb24gYW5kCisgKiBkZWNvbXByZXNzaW9uIHBpcGVsaW5lcyB0byBiZSBzcGxpdCBpbnRvIHN0YWdlczogIFlVViBlbmNvZGUsIGNvbXByZXNzIGZyb20KKyAqIFlVViwgZGVjb21wcmVzcyB0byBZVVYsIGFuZCBZVVYgZGVjb2RlLiAgQSA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UKKyAqIHNlcnZlcyBhcyB0aGUgZGVzdGluYXRpb24gaW1hZ2UgZm9yIFlVViBlbmNvZGUgYW5kIGRlY29tcHJlc3MtdG8tWVVWCisgKiBvcGVyYXRpb25zIGFuZCBhcyB0aGUgc291cmNlIGltYWdlIGZvciBjb21wcmVzcy1mcm9tLVlVViBhbmQgWVVWIGRlY29kZQorICogb3BlcmF0aW9ucy4KKyAqIDxwPgorICogVGVjaG5pY2FsbHksIHRoZSBKUEVHIGZvcm1hdCB1c2VzIHRoZSBZQ2JDciBjb2xvcnNwYWNlICh3aGljaCB0ZWNobmljYWxseSBpcworICogbm90IGEgImNvbG9yc3BhY2UiIGJ1dCByYXRoZXIgYSAiY29sb3IgdHJhbnNmb3JtIiksIGJ1dCBwZXIgdGhlIGNvbnZlbnRpb24KKyAqIG9mIHRoZSBkaWdpdGFsIHZpZGVvIGNvbW11bml0eSwgdGhlIFR1cmJvSlBFRyBBUEkgdXNlcyAiWVVWIiB0byByZWZlciB0byBhbgorICogaW1hZ2UgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgWSwgQ2IsIGFuZCBDciBpbWFnZSBwbGFuZXMuCisgKiA8cD4KKyAqIEVhY2ggcGxhbmUgaXMgc2ltcGx5IGEgMkQgYXJyYXkgb2YgYnl0ZXMsIGVhY2ggYnl0ZSByZXByZXNlbnRpbmcgdGhlIHZhbHVlCisgKiBvZiBvbmUgb2YgdGhlIGNvbXBvbmVudHMgKFksIENiLCBvciBDcikgYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uIGluIHRoZQorICogaW1hZ2UuICBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiBlYWNoIHBsYW5lIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBpbWFnZQorICogd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIGx1bWluYW5jZSBwbGFuZQorICogd2lkdGggaXMgdGhlIGltYWdlIHdpZHRoIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGUgaG9yaXpvbnRhbAorICogc3Vic2FtcGxpbmcgZmFjdG9yICgyIGluIHRoZSBjYXNlIG9mIDQ6MjowIGFuZCA0OjI6MiwgNCBpbiB0aGUgY2FzZSBvZgorICogNDoxOjEsIDEgaW4gdGhlIGNhc2Ugb2YgNDo0OjQgb3IgZ3JheXNjYWxlLikgIFNpbWlsYXJseSwgdGhlIGx1bWluYW5jZSBwbGFuZQorICogaGVpZ2h0IGlzIHRoZSBpbWFnZSBoZWlnaHQgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoZSB2ZXJ0aWNhbAorICogc3Vic2FtcGxpbmcgZmFjdG9yICgyIGluIHRoZSBjYXNlIG9mIDQ6MjowIG9yIDQ6NDowLCAxIGluIHRoZSBjYXNlIG9mIDQ6NDo0CisgKiBvciBncmF5c2NhbGUuKSAgVGhlIGNocm9taW5hbmNlIHBsYW5lIHdpZHRoIGlzIGVxdWFsIHRvIHRoZSBsdW1pbmFuY2UgcGxhbmUKKyAqIHdpZHRoIGRpdmlkZWQgYnkgdGhlIGhvcml6b250YWwgc3Vic2FtcGxpbmcgZmFjdG9yLCBhbmQgdGhlIGNocm9taW5hbmNlCisgKiBwbGFuZSBoZWlnaHQgaXMgZXF1YWwgdG8gdGhlIGx1bWluYW5jZSBwbGFuZSBoZWlnaHQgZGl2aWRlZCBieSB0aGUgdmVydGljYWwKKyAqIHN1YnNhbXBsaW5nIGZhY3Rvci4KKyAqIDxwPgorICogRm9yIGV4YW1wbGUsIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgMzUgeCAzNSBwaXhlbHMgYW5kIDQ6MjoyIHN1YnNhbXBsaW5nIGlzCisgKiB1c2VkLCB0aGVuIHRoZSBsdW1pbmFuY2UgcGxhbmUgd291bGQgYmUgMzYgeCAzNSBieXRlcywgYW5kIGVhY2ggb2YgdGhlCisgKiBjaHJvbWluYW5jZSBwbGFuZXMgd291bGQgYmUgMTggeCAzNSBieXRlcy4gIElmIHlvdSBzcGVjaWZ5IGEgbGluZSBwYWRkaW5nIG9mCisgKiA0IGJ5dGVzIG9uIHRvcCBvZiB0aGlzLCB0aGVuIHRoZSBsdW1pbmFuY2UgcGxhbmUgd291bGQgYmUgMzYgeCAzNSBieXRlcywgYW5kCisgKiBlYWNoIG9mIHRoZSBjaHJvbWluYW5jZSBwbGFuZXMgd291bGQgYmUgMjAgeCAzNSBieXRlcy4KKyAqLworcHVibGljIGNsYXNzIFlVVkltYWdlIHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fQVNTT0NfRVJST1IgPQorICAgICJObyBpbWFnZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlIjsKKworICAvKioKKyAgICogQ3JlYXRlIGEgbmV3IDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZSBiYWNrZWQgYnkgc2VwYXJhdGUgaW1hZ2UKKyAgICogcGxhbmVzLCBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW1hZ2UgcGxhbmVzLgorICAgKgorICAgKiBAcGFyYW0gd2lkdGggd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZQorICAgKgorICAgKiBAcGFyYW0gc3RyaWRlcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgZWFjaCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgICogcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIFlVViBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZQorICAgKiBmb3IgYW55IHBsYW5lIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgcGxhbmUgd2lkdGggKHNlZQorICAgKiB7QGxpbmsgWVVWSW1hZ2UgYWJvdmV9LikgIElmIDxjb2RlPnN0cmlkZXM8L2NvZGU+IGlzIG51bGwsIHRoZW4gdGhlCisgICAqIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwbGFuZSB3aWR0aHMuICBXaGVuCisgICAqIHVzaW5nIHRoaXMgY29uc3RydWN0b3IsIHRoZSBzdHJpZGUgZm9yIGVhY2ggcGxhbmUgbXVzdCBiZSBlcXVhbCB0byBvcgorICAgKiBncmVhdGVyIHRoYW4gdGhlIHBsYW5lIHdpZHRoLgorICAgKgorICAgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlCisgICAqCisgICAqIEBwYXJhbSBzdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byBiZSB1c2VkIGluIHRoZSBZVVYKKyAgICogaW1hZ2UgKG9uZSBvZiB7QGxpbmsgVEojU0FNUF80NDQgVEouU0FNUF8qfSkKKyAgICovCisgIHB1YmxpYyBZVVZJbWFnZShpbnQgd2lkdGgsIGludFtdIHN0cmlkZXMsIGludCBoZWlnaHQsIGludCBzdWJzYW1wKSB7CisgICAgc2V0QnVmKG51bGwsIG51bGwsIHdpZHRoLCBzdHJpZGVzLCBoZWlnaHQsIHN1YnNhbXAsIHRydWUpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIG5ldyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgYmFja2VkIGJ5IGEgdW5pZmllZCBpbWFnZQorICAgKiBidWZmZXIsIGFuZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbWFnZSBidWZmZXIuCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlCisgICAqCisgICAqIEBwYXJhbSBwYWQgRWFjaCBsaW5lIG9mIGVhY2ggcGxhbmUgaW4gdGhlIFlVViBpbWFnZSBidWZmZXIgd2lsbCBiZSBwYWRkZWQKKyAgICogdG8gdGhpcyBudW1iZXIgb2YgYnl0ZXMgKG11c3QgYmUgYSBwb3dlciBvZiAyLikKKyAgICoKKyAgICogQHBhcmFtIGhlaWdodCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZQorICAgKgorICAgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdG8gYmUgdXNlZCBpbiB0aGUgWVVWCisgICAqIGltYWdlIChvbmUgb2Yge0BsaW5rIFRKI1NBTVBfNDQ0IFRKLlNBTVBfKn0pCisgICAqLworICBwdWJsaWMgWVVWSW1hZ2UoaW50IHdpZHRoLCBpbnQgcGFkLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCkgeworICAgIHNldEJ1ZihuZXcgYnl0ZVtUSi5idWZTaXplWVVWKHdpZHRoLCBwYWQsIGhlaWdodCwgc3Vic2FtcCldLCB3aWR0aCwgcGFkLAorICAgICAgICAgICBoZWlnaHQsIHN1YnNhbXApOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIG5ldyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgZnJvbSBhIHNldCBvZiBleGlzdGluZyBpbWFnZQorICAgKiBwbGFuZXMuCisgICAqCisgICAqIEBwYXJhbSBwbGFuZXMgYW4gYXJyYXkgb2YgYnVmZmVycyByZXByZXNlbnRpbmcgdGhlIFksIFUgKENiKSwgYW5kIFYgKENyKQorICAgKiBpbWFnZSBwbGFuZXMgKG9yIGp1c3QgdGhlIFkgcGxhbmUsIGlmIHRoZSBpbWFnZSBpcyBncmF5c2NhbGUuKSAgIFRoZXNlCisgICAqIHBsYW5lcyBjYW4gYmUgY29udGlndW91cyBvciBub24tY29udGlndW91cyBpbiBtZW1vcnkuICBQbGFuZQorICAgKiA8Y29kZT5pPC9jb2RlPiBzaG91bGQgYmUgYXQgbGVhc3QgPGNvZGU+b2Zmc2V0c1tpXSArCisgICAqIHtAbGluayBUSiNwbGFuZVNpemVZVVYgVEoucGxhbmVTaXplWVVWfShpLCB3aWR0aCwgc3RyaWRlc1tpXSwgaGVpZ2h0LCBzdWJzYW1wKTwvY29kZT4KKyAgICogYnl0ZXMgaW4gc2l6ZS4KKyAgICoKKyAgICogQHBhcmFtIG9mZnNldHMgSWYgdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgcmVwcmVzZW50cyBhCisgICAqIHN1YnJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZSwgdGhlbiA8Y29kZT5vZmZzZXRzW2ldPC9jb2RlPiBzcGVjaWZpZXMgdGhlCisgICAqIG9mZnNldCAoaW4gYnl0ZXMpIG9mIHRoZSBzdWJyZWdpb24gd2l0aGluIHBsYW5lIDxjb2RlPmk8L2NvZGU+IG9mIHRoZQorICAgKiBsYXJnZXIgaW1hZ2UuICBTZXR0aW5nIHRoaXMgdG8gbnVsbCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIHRoZSBvZmZzZXRzIGZvcgorICAgKiBhbGwgcGxhbmVzIHRvIDAuCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgbmV3IFlVViBpbWFnZSAob3Igc3VicmVnaW9uKQorICAgKgorICAgKiBAcGFyYW0gc3RyaWRlcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgZWFjaCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgICogcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIFlVViBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZQorICAgKiBmb3IgYW55IHBsYW5lIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgcGxhbmUgd2lkdGggKHNlZQorICAgKiB7QGxpbmsgWVVWSW1hZ2UgYWJvdmV9LikgIElmIDxjb2RlPnN0cmlkZXM8L2NvZGU+IGlzIG51bGwsIHRoZW4gdGhlCisgICAqIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwbGFuZSB3aWR0aHMuICBZb3UKKyAgICogY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBsaW5lIHBhZGRpbmcKKyAgICogdG8gZWFjaCBwbGFuZSBvciB0byBzcGVjaWZ5IHRoYXQgdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW5zdGFuY2UgaXMgYQorICAgKiBzdWJyZWdpb24gb2YgYSBsYXJnZXIgaW1hZ2UgKGluIHdoaWNoIGNhc2UsIDxjb2RlPnN0cmlkZXNbaV08L2NvZGU+IHNob3VsZAorICAgKiBiZSBzZXQgdG8gdGhlIHBsYW5lIHdpZHRoIG9mIHBsYW5lIDxjb2RlPmk8L2NvZGU+IGluIHRoZSBsYXJnZXIgaW1hZ2UuKQorICAgKgorICAgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgbmV3IFlVViBpbWFnZSAob3Igc3VicmVnaW9uKQorICAgKgorICAgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgWVVWCisgICAqIGltYWdlIChvbmUgb2Yge0BsaW5rIFRKI1NBTVBfNDQ0IFRKLlNBTVBfKn0pCisgICAqLworICBwdWJsaWMgWVVWSW1hZ2UoYnl0ZVtdW10gcGxhbmVzLCBpbnRbXSBvZmZzZXRzLCBpbnQgd2lkdGgsIGludFtdIHN0cmlkZXMsCisgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCkgeworICAgIHNldEJ1ZihwbGFuZXMsIG9mZnNldHMsIHdpZHRoLCBzdHJpZGVzLCBoZWlnaHQsIHN1YnNhbXAsIGZhbHNlKTsKKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGUgYSBuZXcgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGZyb20gYW4gZXhpc3RpbmcgdW5pZmllZCBpbWFnZQorICAgKiBidWZmZXIuCisgICAqCisgICAqIEBwYXJhbSB5dXZJbWFnZSBpbWFnZSBidWZmZXIgdGhhdCBjb250YWlucyBvciB3aWxsIGNvbnRhaW4gWVVWIHBsYW5hcgorICAgKiBpbWFnZSBkYXRhLiAgVXNlIHtAbGluayBUSiNidWZTaXplWVVWfSB0byBkZXRlcm1pbmUgdGhlIG1pbmltdW0gc2l6ZSBmb3IKKyAgICogdGhpcyBidWZmZXIuICBUaGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyBhcmUgc3RvcmVkCisgICAqIHNlcXVlbnRpYWxseSBpbiB0aGUgYnVmZmVyIChzZWUge0BsaW5rIFlVVkltYWdlIGFib3ZlfSBmb3IgYSBkZXNjcmlwdGlvbgorICAgKiBvZiB0aGUgaW1hZ2UgZm9ybWF0LikKKyAgICoKKyAgICogQHBhcmFtIHdpZHRoIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIHBhZCB0aGUgbGluZSBwYWRkaW5nIHVzZWQgaW4gdGhlIFlVViBpbWFnZSBidWZmZXIuICBGb3IKKyAgICogaW5zdGFuY2UsIGlmIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBidWZmZXIgaXMgcGFkZGVkIHRvIHRoZQorICAgKiBuZWFyZXN0IG11bHRpcGxlIG9mIDQgYnl0ZXMsIHRoZW4gPGNvZGU+cGFkPC9jb2RlPiBzaG91bGQgYmUgc2V0IHRvIDQuCisgICAqCisgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UKKyAgICoKKyAgICogQHBhcmFtIHN1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIFlVVgorICAgKiBpbWFnZSAob25lIG9mIHtAbGluayBUSiNTQU1QXzQ0NCBUSi5TQU1QXyp9KQorICAgKi8KKyAgcHVibGljIFlVVkltYWdlKGJ5dGVbXSB5dXZJbWFnZSwgaW50IHdpZHRoLCBpbnQgcGFkLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgaW50IHN1YnNhbXApIHsKKyAgICBzZXRCdWYoeXV2SW1hZ2UsIHdpZHRoLCBwYWQsIGhlaWdodCwgc3Vic2FtcCk7CisgIH0KKworICAvKioKKyAgICogQXNzaWduIGEgc2V0IG9mIGltYWdlIHBsYW5lcyB0byB0aGlzIDxjb2RlPllVVkltYWdlPC9jb2RlPiBpbnN0YW5jZS4KKyAgICoKKyAgICogQHBhcmFtIHBsYW5lcyBhbiBhcnJheSBvZiBidWZmZXJzIHJlcHJlc2VudGluZyB0aGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpCisgICAqIGltYWdlIHBsYW5lcyAob3IganVzdCB0aGUgWSBwbGFuZSwgaWYgdGhlIGltYWdlIGlzIGdyYXlzY2FsZS4pICBUaGVzZQorICAgKiBwbGFuZXMgY2FuIGJlIGNvbnRpZ3VvdXMgb3Igbm9uLWNvbnRpZ3VvdXMgaW4gbWVtb3J5LiAgUGxhbmUKKyAgICogPGNvZGU+aTwvY29kZT4gc2hvdWxkIGJlIGF0IGxlYXN0IDxjb2RlPm9mZnNldHNbaV0gKworICAgKiB7QGxpbmsgVEojcGxhbmVTaXplWVVWIFRKLnBsYW5lU2l6ZVlVVn0oaSwgd2lkdGgsIHN0cmlkZXNbaV0sIGhlaWdodCwgc3Vic2FtcCk8L2NvZGU+CisgICAqIGJ5dGVzIGluIHNpemUuCisgICAqCisgICAqIEBwYXJhbSBvZmZzZXRzIElmIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlIHJlcHJlc2VudHMgYQorICAgKiBzdWJyZWdpb24gb2YgYSBsYXJnZXIgaW1hZ2UsIHRoZW4gPGNvZGU+b2Zmc2V0c1tpXTwvY29kZT4gc3BlY2lmaWVzIHRoZQorICAgKiBvZmZzZXQgKGluIGJ5dGVzKSBvZiB0aGUgc3VicmVnaW9uIHdpdGhpbiBwbGFuZSA8Y29kZT5pPC9jb2RlPiBvZiB0aGUKKyAgICogbGFyZ2VyIGltYWdlLiAgU2V0dGluZyB0aGlzIHRvIG51bGwgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyB0aGUgb2Zmc2V0cyBmb3IKKyAgICogYWxsIHBsYW5lcyB0byAwLgorICAgKgorICAgKiBAcGFyYW0gd2lkdGggd2lkdGggKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZSAob3Igc3VicmVnaW9uKQorICAgKgorICAgKiBAcGFyYW0gc3RyaWRlcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgZWFjaCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgICogcGVyIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIFlVViBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZQorICAgKiBmb3IgYW55IHBsYW5lIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgcGxhbmUgd2lkdGggKHNlZQorICAgKiB7QGxpbmsgWVVWSW1hZ2UgYWJvdmV9LikgIElmIDxjb2RlPnN0cmlkZXM8L2NvZGU+IGlzIG51bGwsIHRoZW4gdGhlCisgICAqIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwbGFuZSB3aWR0aHMuICBZb3UKKyAgICogY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBsaW5lIHBhZGRpbmcKKyAgICogdG8gZWFjaCBwbGFuZSBvciB0byBzcGVjaWZ5IHRoYXQgdGhpcyA8Y29kZT5ZVVZJbWFnZTwvY29kZT4gaW1hZ2UgaXMgYQorICAgKiBzdWJyZWdpb24gb2YgYSBsYXJnZXIgaW1hZ2UgKGluIHdoaWNoIGNhc2UsIDxjb2RlPnN0cmlkZXNbaV08L2NvZGU+IHNob3VsZAorICAgKiBiZSBzZXQgdG8gdGhlIHBsYW5lIHdpZHRoIG9mIHBsYW5lIDxjb2RlPmk8L2NvZGU+IGluIHRoZSBsYXJnZXIgaW1hZ2UuKQorICAgKgorICAgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlIChvciBzdWJyZWdpb24pCisgICAqCisgICAqIEBwYXJhbSBzdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYKKyAgICogaW1hZ2UgKG9uZSBvZiB7QGxpbmsgVEojU0FNUF80NDQgVEouU0FNUF8qfSkKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldEJ1ZihieXRlW11bXSBwbGFuZXMsIGludFtdIG9mZnNldHMsIGludCB3aWR0aCwgaW50W10gc3RyaWRlcywKKyAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCBzdWJzYW1wKSB7CisgICAgc2V0QnVmKHBsYW5lcywgb2Zmc2V0cywgd2lkdGgsIHN0cmlkZXMsIGhlaWdodCwgc3Vic2FtcCwgZmFsc2UpOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHNldEJ1ZihieXRlW11bXSBwbGFuZXMsIGludFtdIG9mZnNldHMsIGludCB3aWR0aCwgaW50W10gc3RyaWRlcywKKyAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCBzdWJzYW1wLCBib29sZWFuIGFsbG9jKSB7CisgICAgaWYgKChwbGFuZXMgPT0gbnVsbCAmJiAhYWxsb2MpIHx8IHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxIHx8IHN1YnNhbXAgPCAwIHx8CisgICAgICAgIHN1YnNhbXAgPj0gVEouTlVNU0FNUCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gWVVWSW1hZ2U6OnNldEJ1ZigpIik7CisKKyAgICBpbnQgbmMgPSAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkgPyAxIDogMyk7CisgICAgaWYgKChwbGFuZXMgIT0gbnVsbCAmJiBwbGFuZXMubGVuZ3RoICE9IG5jKSB8fAorICAgICAgICAob2Zmc2V0cyAhPSBudWxsICYmIG9mZnNldHMubGVuZ3RoICE9IG5jKSB8fAorICAgICAgICAoc3RyaWRlcyAhPSBudWxsICYmIHN0cmlkZXMubGVuZ3RoICE9IG5jKSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIllVVkltYWdlOjpzZXRCdWYoKTogcGxhbmVzLCBvZmZzZXRzLCBvciBzdHJpZGVzIGFycmF5IGlzIHRoZSB3cm9uZyBzaXplIik7CisKKyAgICBpZiAocGxhbmVzID09IG51bGwpCisgICAgICBwbGFuZXMgPSBuZXcgYnl0ZVtuY11bXTsKKyAgICBpZiAob2Zmc2V0cyA9PSBudWxsKQorICAgICAgb2Zmc2V0cyA9IG5ldyBpbnRbbmNdOworICAgIGlmIChzdHJpZGVzID09IG51bGwpCisgICAgICBzdHJpZGVzID0gbmV3IGludFtuY107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5jOyBpKyspIHsKKyAgICAgIGludCBwdyA9IFRKLnBsYW5lV2lkdGgoaSwgd2lkdGgsIHN1YnNhbXApOworICAgICAgaW50IHBoID0gVEoucGxhbmVIZWlnaHQoaSwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgICAgIGludCBwbGFuZVNpemUgPSBUSi5wbGFuZVNpemVZVVYoaSwgd2lkdGgsIHN0cmlkZXNbaV0sIGhlaWdodCwgc3Vic2FtcCk7CisKKyAgICAgIGlmIChzdHJpZGVzW2ldID09IDApCisgICAgICAgIHN0cmlkZXNbaV0gPSBwdzsKKyAgICAgIGlmIChhbGxvYykgeworICAgICAgICBpZiAoc3RyaWRlc1tpXSA8IHB3KQorICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlN0cmlkZSBtdXN0IGJlID49IHBsYW5lIHdpZHRoIHdoZW4gYWxsb2NhdGluZyBhIG5ldyBZVVYgaW1hZ2UiKTsKKyAgICAgICAgcGxhbmVzW2ldID0gbmV3IGJ5dGVbc3RyaWRlc1tpXSAqIHBoXTsKKyAgICAgIH0KKyAgICAgIGlmIChwbGFuZXNbaV0gPT0gbnVsbCB8fCBvZmZzZXRzW2ldIDwgMCkKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBZVVZJbWFnZTo6c2V0QnVmKCkiKTsKKyAgICAgIGlmIChzdHJpZGVzW2ldIDwgMCAmJiBvZmZzZXRzW2ldIC0gcGxhbmVTaXplICsgcHcgPCAwKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdHJpZGUgZm9yIHBsYW5lICIgKyBpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdvdWxkIGNhdXNlIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBiZWxvdyBwbGFuZSBib3VuZGFyeSIpOworICAgICAgaWYgKHBsYW5lc1tpXS5sZW5ndGggPCBvZmZzZXRzW2ldICsgcGxhbmVTaXplKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbWFnZSBwbGFuZSAiICsgaSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisgICAgfQorCisgICAgeXV2UGxhbmVzID0gcGxhbmVzOworICAgIHl1dk9mZnNldHMgPSBvZmZzZXRzOworICAgIHl1dldpZHRoID0gd2lkdGg7CisgICAgeXV2U3RyaWRlcyA9IHN0cmlkZXM7CisgICAgeXV2SGVpZ2h0ID0gaGVpZ2h0OworICAgIHl1dlN1YnNhbXAgPSBzdWJzYW1wOworICB9CisKKyAgLyoqCisgICAqIEFzc2lnbiBhIHVuaWZpZWQgaW1hZ2UgYnVmZmVyIHRvIHRoaXMgPGNvZGU+WVVWSW1hZ2U8L2NvZGU+IGluc3RhbmNlLgorICAgKgorICAgKiBAcGFyYW0geXV2SW1hZ2UgaW1hZ2UgYnVmZmVyIHRoYXQgY29udGFpbnMgb3Igd2lsbCBjb250YWluIFlVViBwbGFuYXIKKyAgICogaW1hZ2UgZGF0YS4gIFVzZSB7QGxpbmsgVEojYnVmU2l6ZVlVVn0gdG8gZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIHNpemUgZm9yCisgICAqIHRoaXMgYnVmZmVyLiAgVGhlIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgYXJlIHN0b3JlZAorICAgKiBzZXF1ZW50aWFsbHkgaW4gdGhlIGJ1ZmZlciAoc2VlIHtAbGluayBZVVZJbWFnZSBhYm92ZX0gZm9yIGEgZGVzY3JpcHRpb24KKyAgICogb2YgdGhlIGltYWdlIGZvcm1hdC4pCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlCisgICAqCisgICAqIEBwYXJhbSBwYWQgdGhlIGxpbmUgcGFkZGluZyB1c2VkIGluIHRoZSBZVVYgaW1hZ2UgYnVmZmVyLiAgRm9yCisgICAqIGluc3RhbmNlLCBpZiBlYWNoIGxpbmUgaW4gZWFjaCBwbGFuZSBvZiB0aGUgYnVmZmVyIGlzIHBhZGRlZCB0byB0aGUKKyAgICogbmVhcmVzdCBtdWx0aXBsZSBvZiA0IGJ5dGVzLCB0aGVuIDxjb2RlPnBhZDwvY29kZT4gc2hvdWxkIGJlIHNldCB0byA0LgorICAgKgorICAgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlCisgICAqCisgICAqIEBwYXJhbSBzdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYKKyAgICogaW1hZ2UgKG9uZSBvZiB7QGxpbmsgVEojU0FNUF80NDQgVEouU0FNUF8qfSkKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldEJ1ZihieXRlW10geXV2SW1hZ2UsIGludCB3aWR0aCwgaW50IHBhZCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzdWJzYW1wKSB7CisgICAgaWYgKHl1dkltYWdlID09IG51bGwgfHwgd2lkdGggPCAxIHx8IHBhZCA8IDEgfHwgKChwYWQgJiAocGFkIC0gMSkpICE9IDApIHx8CisgICAgICAgIGhlaWdodCA8IDEgfHwgc3Vic2FtcCA8IDAgfHwgc3Vic2FtcCA+PSBUSi5OVU1TQU1QKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBZVVZJbWFnZTo6c2V0QnVmKCkiKTsKKyAgICBpZiAoeXV2SW1hZ2UubGVuZ3RoIDwgVEouYnVmU2l6ZVlVVih3aWR0aCwgcGFkLCBoZWlnaHQsIHN1YnNhbXApKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiWVVWIGltYWdlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisKKyAgICBpbnQgbmMgPSAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkgPyAxIDogMyk7CisgICAgYnl0ZVtdW10gcGxhbmVzID0gbmV3IGJ5dGVbbmNdW107CisgICAgaW50W10gc3RyaWRlcyA9IG5ldyBpbnRbbmNdOworICAgIGludFtdIG9mZnNldHMgPSBuZXcgaW50W25jXTsKKworICAgIHBsYW5lc1swXSA9IHl1dkltYWdlOworICAgIHN0cmlkZXNbMF0gPSBwYWQoVEoucGxhbmVXaWR0aCgwLCB3aWR0aCwgc3Vic2FtcCksIHBhZCk7CisgICAgaWYgKHN1YnNhbXAgIT0gVEouU0FNUF9HUkFZKSB7CisgICAgICBzdHJpZGVzWzFdID0gc3RyaWRlc1syXSA9IHBhZChUSi5wbGFuZVdpZHRoKDEsIHdpZHRoLCBzdWJzYW1wKSwgcGFkKTsKKyAgICAgIHBsYW5lc1sxXSA9IHBsYW5lc1syXSA9IHl1dkltYWdlOworICAgICAgb2Zmc2V0c1sxXSA9IG9mZnNldHNbMF0gKworICAgICAgICBzdHJpZGVzWzBdICogVEoucGxhbmVIZWlnaHQoMCwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgICAgIG9mZnNldHNbMl0gPSBvZmZzZXRzWzFdICsKKyAgICAgICAgc3RyaWRlc1sxXSAqIFRKLnBsYW5lSGVpZ2h0KDEsIGhlaWdodCwgc3Vic2FtcCk7CisgICAgfQorCisgICAgeXV2UGFkID0gcGFkOworICAgIHNldEJ1ZihwbGFuZXMsIG9mZnNldHMsIHdpZHRoLCBzdHJpZGVzLCBoZWlnaHQsIHN1YnNhbXApOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBZVVYgaW1hZ2UgKG9yIHN1YnJlZ2lvbi4pCisgICAqCisgICAqIEByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBZVVYgaW1hZ2UgKG9yIHN1YnJlZ2lvbikKKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB7CisgICAgaWYgKHl1dldpZHRoIDwgMSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIHJldHVybiB5dXZXaWR0aDsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIFlVViBpbWFnZSAob3Igc3VicmVnaW9uLikKKyAgICoKKyAgICogQHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBZVVYgaW1hZ2UgKG9yIHN1YnJlZ2lvbikKKyAgICovCisgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgeworICAgIGlmICh5dXZIZWlnaHQgPCAxKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgcmV0dXJuIHl1dkhlaWdodDsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBsaW5lIHBhZGRpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlIGJ1ZmZlciAoaWYgdGhpcyBpbWFnZSBpcworICAgKiBzdG9yZWQgaW4gYSB1bmlmaWVkIGJ1ZmZlciByYXRoZXIgdGhhbiBzZXBhcmF0ZSBpbWFnZSBwbGFuZXMuKQorICAgKgorICAgKiBAcmV0dXJuIHRoZSBsaW5lIHBhZGRpbmcgdXNlZCBpbiB0aGUgWVVWIGltYWdlIGJ1ZmZlcgorICAgKi8KKyAgcHVibGljIGludCBnZXRQYWQoKSB7CisgICAgaWYgKHl1dlBsYW5lcyA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKHl1dlBhZCA8IDEgfHwgKCh5dXZQYWQgJiAoeXV2UGFkIC0gMSkpICE9IDApKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSW1hZ2UgaXMgbm90IHN0b3JlZCBpbiBhIHVuaWZpZWQgYnVmZmVyIik7CisgICAgcmV0dXJuIHl1dlBhZDsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGxpbmUgb2YgZWFjaCBwbGFuZSBpbiB0aGUgWVVWIGltYWdlLgorICAgKgorICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGxpbmUgb2YgZWFjaCBwbGFuZSBpbiB0aGUgWVVWIGltYWdlCisgICAqLworICBwdWJsaWMgaW50W10gZ2V0U3RyaWRlcygpIHsKKyAgICBpZiAoeXV2U3RyaWRlcyA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgcmV0dXJuIHl1dlN0cmlkZXM7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgb2Zmc2V0cyAoaW4gYnl0ZXMpIG9mIGVhY2ggcGxhbmUgd2l0aGluIHRoZSBwbGFuZXMgb2YgYSBsYXJnZXIKKyAgICogWVVWIGltYWdlLgorICAgKgorICAgKiBAcmV0dXJuIHRoZSBvZmZzZXRzIChpbiBieXRlcykgb2YgZWFjaCBwbGFuZSB3aXRoaW4gdGhlIHBsYW5lcyBvZiBhIGxhcmdlcgorICAgKiBZVVYgaW1hZ2UKKyAgICovCisgIHB1YmxpYyBpbnRbXSBnZXRPZmZzZXRzKCkgeworICAgIGlmICh5dXZPZmZzZXRzID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICByZXR1cm4geXV2T2Zmc2V0czsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYgaW1hZ2UuICBTZWUKKyAgICoge0BsaW5rIFRKI1NBTVBfNDQ0IFRKLlNBTVBfKn0uCisgICAqCisgICAqIEByZXR1cm4gdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIFlVViBpbWFnZQorICAgKi8KKyAgcHVibGljIGludCBnZXRTdWJzYW1wKCkgeworICAgIGlmICh5dXZTdWJzYW1wIDwgMCB8fCB5dXZTdWJzYW1wID49IFRKLk5VTVNBTVApCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICByZXR1cm4geXV2U3Vic2FtcDsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBZVVYgaW1hZ2UgcGxhbmVzLiAgSWYgdGhlIGltYWdlIGlzIHN0b3JlZCBpbiBhIHVuaWZpZWQgYnVmZmVyLAorICAgKiB0aGVuIGFsbCBpbWFnZSBwbGFuZXMgd2lsbCBwb2ludCB0byB0aGF0IGJ1ZmZlci4KKyAgICoKKyAgICogQHJldHVybiB0aGUgWVVWIGltYWdlIHBsYW5lcworICAgKi8KKyAgcHVibGljIGJ5dGVbXVtdIGdldFBsYW5lcygpIHsKKyAgICBpZiAoeXV2UGxhbmVzID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICByZXR1cm4geXV2UGxhbmVzOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIFlVViBpbWFnZSBidWZmZXIgKGlmIHRoaXMgaW1hZ2UgaXMgc3RvcmVkIGluIGEgdW5pZmllZAorICAgKiBidWZmZXIgcmF0aGVyIHRoYW4gc2VwYXJhdGUgaW1hZ2UgcGxhbmVzLikKKyAgICoKKyAgICogQHJldHVybiB0aGUgWVVWIGltYWdlIGJ1ZmZlcgorICAgKi8KKyAgcHVibGljIGJ5dGVbXSBnZXRCdWYoKSB7CisgICAgaWYgKHl1dlBsYW5lcyA9PSBudWxsIHx8IHl1dlN1YnNhbXAgPCAwIHx8IHl1dlN1YnNhbXAgPj0gVEouTlVNU0FNUCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGludCBuYyA9ICh5dXZTdWJzYW1wID09IFRKLlNBTVBfR1JBWSA/IDEgOiAzKTsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG5jOyBpKyspIHsKKyAgICAgIGlmICh5dXZQbGFuZXNbaV0gIT0geXV2UGxhbmVzWzBdKQorICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbWFnZSBpcyBub3Qgc3RvcmVkIGluIGEgdW5pZmllZCBidWZmZXIiKTsKKyAgICB9CisgICAgcmV0dXJuIHl1dlBsYW5lc1swXTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIFlVViBpbWFnZSBidWZmZXIgKGlmIHRoaXMgaW1hZ2UgaXMKKyAgICogc3RvcmVkIGluIGEgdW5pZmllZCBidWZmZXIgcmF0aGVyIHRoYW4gc2VwYXJhdGUgaW1hZ2UgcGxhbmVzLikKKyAgICoKKyAgICogQHJldHVybiB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBZVVYgaW1hZ2UgYnVmZmVyCisgICAqLworICBwdWJsaWMgaW50IGdldFNpemUoKSB7CisgICAgaWYgKHl1dlBsYW5lcyA9PSBudWxsIHx8IHl1dlN1YnNhbXAgPCAwIHx8IHl1dlN1YnNhbXAgPj0gVEouTlVNU0FNUCkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGludCBuYyA9ICh5dXZTdWJzYW1wID09IFRKLlNBTVBfR1JBWSA/IDEgOiAzKTsKKyAgICBpZiAoeXV2UGFkIDwgMSkKKyAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkltYWdlIGlzIG5vdCBzdG9yZWQgaW4gYSB1bmlmaWVkIGJ1ZmZlciIpOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbmM7IGkrKykgeworICAgICAgaWYgKHl1dlBsYW5lc1tpXSAhPSB5dXZQbGFuZXNbMF0pCisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkltYWdlIGlzIG5vdCBzdG9yZWQgaW4gYSB1bmlmaWVkIGJ1ZmZlciIpOworICAgIH0KKyAgICByZXR1cm4gVEouYnVmU2l6ZVlVVih5dXZXaWR0aCwgeXV2UGFkLCB5dXZIZWlnaHQsIHl1dlN1YnNhbXApOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IHBhZChpbnQgdiwgaW50IHApIHsKKyAgICByZXR1cm4gKHYgKyBwIC0gMSkgJiAofihwIC0gMSkpOworICB9CisKKyAgcHJvdGVjdGVkIGxvbmcgaGFuZGxlID0gMDsKKyAgcHJvdGVjdGVkIGJ5dGVbXVtdIHl1dlBsYW5lcyA9IG51bGw7CisgIHByb3RlY3RlZCBpbnRbXSB5dXZPZmZzZXRzID0gbnVsbDsKKyAgcHJvdGVjdGVkIGludFtdIHl1dlN0cmlkZXMgPSBudWxsOworICBwcm90ZWN0ZWQgaW50IHl1dlBhZCA9IDA7CisgIHByb3RlY3RlZCBpbnQgeXV2V2lkdGggPSAwOworICBwcm90ZWN0ZWQgaW50IHl1dkhlaWdodCA9IDA7CisgIHByb3RlY3RlZCBpbnQgeXV2U3Vic2FtcCA9IC0xOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USi5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZWU4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qIERPIE5PVCBFRElUIFRISVMgRklMRSAtIGl0IGlzIG1hY2hpbmUgZ2VuZXJhdGVkICovCisjaW5jbHVkZSA8am5pLmg+CisvKiBIZWFkZXIgZm9yIGNsYXNzIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKICovCisKKyNpZm5kZWYgX0luY2x1ZGVkX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKCisjZGVmaW5lIF9JbmNsdWRlZF9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVNBTVAKKyNkZWZpbmUgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNU0FNUCA2TAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfNDQ0CisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfNDQ0IDBMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfU0FNUF80MjIKKyNkZWZpbmUgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfU0FNUF80MjIgMUwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9TQU1QXzQyMAorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9TQU1QXzQyMCAyTAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfR1JBWQorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9TQU1QX0dSQVkgM0wKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9TQU1QXzQ0MAorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9TQU1QXzQ0MCA0TAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfNDExCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfNDExIDVMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYKKyNkZWZpbmUgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYgMTJMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfUEZfUkdCCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX1JHQiAwTAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX0JHUgorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9CR1IgMUwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9SR0JYCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX1JHQlggMkwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9CR1JYCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX0JHUlggM0wKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9YQkdSCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX1hCR1IgNEwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9YUkdCCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX1hSR0IgNUwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9HUkFZCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX0dSQVkgNkwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9SR0JBCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX1JHQkEgN0wKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9CR1JBCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX0JHUkEgOEwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9BQkdSCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX0FCR1IgOUwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9BUkdCCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1BGX0FSR0IgMTBMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfUEZfQ01ZSworI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9QRl9DTVlLIDExTAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTUNTCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTUNTIDVMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfQ1NfUkdCCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0NTX1JHQiAwTAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0NTX1lDYkNyCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0NTX1lDYkNyIDFMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfQ1NfR1JBWQorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9DU19HUkFZIDJMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfQ1NfQ01ZSworI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9DU19DTVlLIDNMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfQ1NfWUNDSworI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9DU19ZQ0NLIDRMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfRkxBR19CT1RUT01VUAorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9GTEFHX0JPVFRPTVVQIDJMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfRkxBR19GQVNUVVBTQU1QTEUKKyNkZWZpbmUgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfRkxBR19GQVNUVVBTQU1QTEUgMjU2TAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0ZMQUdfRkFTVERDVAorI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9GTEFHX0ZBU1REQ1QgMjA0OEwKKyN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9GTEFHX0FDQ1VSQVRFRENUCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0ZMQUdfQUNDVVJBVEVEQ1QgNDA5NkwKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKCisgKiBNZXRob2Q6ICAgIGJ1ZlNpemUKKyAqIFNpZ25hdHVyZTogKElJSSlJCisgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9idWZTaXplCisgIChKTklFbnYgKiwgamNsYXNzLCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEoKKyAqIE1ldGhvZDogICAgYnVmU2l6ZVlVVgorICogU2lnbmF0dXJlOiAoSUlJSSlJCisgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9idWZTaXplWVVWX19JSUlJCisgIChKTklFbnYgKiwgamNsYXNzLCBqaW50LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEoKKyAqIE1ldGhvZDogICAgYnVmU2l6ZVlVVgorICogU2lnbmF0dXJlOiAoSUlJKUkKKyAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX2J1ZlNpemVZVVZfX0lJSQorICAoSk5JRW52ICosIGpjbGFzcywgamludCwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKCisgKiBNZXRob2Q6ICAgIHBsYW5lU2l6ZVlVVgorICogU2lnbmF0dXJlOiAoSUlJSUkpSQorICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfcGxhbmVTaXplWVVWX19JSUlJSQorICAoSk5JRW52ICosIGpjbGFzcywgamludCwgamludCwgamludCwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKCisgKiBNZXRob2Q6ICAgIHBsYW5lV2lkdGgKKyAqIFNpZ25hdHVyZTogKElJSSlJCisgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9wbGFuZVdpZHRoX19JSUkKKyAgKEpOSUVudiAqLCBqY2xhc3MsIGppbnQsIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USgorICogTWV0aG9kOiAgICBwbGFuZUhlaWdodAorICogU2lnbmF0dXJlOiAoSUlJKUkKKyAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX3BsYW5lSGVpZ2h0X19JSUkKKyAgKEpOSUVudiAqLCBqY2xhc3MsIGppbnQsIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USgorICogTWV0aG9kOiAgICBnZXRTY2FsaW5nRmFjdG9ycworICogU2lnbmF0dXJlOiAoKVtMb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yOworICovCitKTklFWFBPUlQgam9iamVjdEFycmF5IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9nZXRTY2FsaW5nRmFjdG9ycworICAoSk5JRW52ICosIGpjbGFzcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NmJkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvci5oCkBAIC0wLDAgKzEsMTAxIEBACisvKiBETyBOT1QgRURJVCBUSElTIEZJTEUgLSBpdCBpcyBtYWNoaW5lIGdlbmVyYXRlZCAqLworI2luY2x1ZGUgPGpuaS5oPgorLyogSGVhZGVyIGZvciBjbGFzcyBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IgKi8KKworI2lmbmRlZiBfSW5jbHVkZWRfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yCisjZGVmaW5lIF9JbmNsdWRlZF9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3NvcgorICogTWV0aG9kOiAgICBpbml0CisgKiBTaWduYXR1cmU6ICgpVgorICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2luaXQKKyAgKEpOSUVudiAqLCBqb2JqZWN0KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yCisgKiBNZXRob2Q6ICAgIGRlc3Ryb3kKKyAqIFNpZ25hdHVyZTogKClWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZGVzdHJveQorICAoSk5JRW52ICosIGpvYmplY3QpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgY29tcHJlc3MKKyAqIFNpZ25hdHVyZTogKFtCSUlJSVtCSUlJKUkKKyAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNCSUlJSV8zQklJSQorICAoSk5JRW52ICosIGpvYmplY3QsIGpieXRlQXJyYXksIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGpieXRlQXJyYXksIGppbnQsIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgY29tcHJlc3MKKyAqIFNpZ25hdHVyZTogKFtCSUlJSUlJW0JJSUkpSQorICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0JJSUlJSUlfM0JJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqYnl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqYnl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yCisgKiBNZXRob2Q6ICAgIGNvbXByZXNzCisgKiBTaWduYXR1cmU6IChbSUlJSUlbQklJSSlJCisgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NfX18zSUlJSUlfM0JJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqaW50QXJyYXksIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGpieXRlQXJyYXksIGppbnQsIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgY29tcHJlc3MKKyAqIFNpZ25hdHVyZTogKFtJSUlJSUlJW0JJSUkpSQorICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0lJSUlJSUlfM0JJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqaW50QXJyYXksIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGpieXRlQXJyYXksIGppbnQsIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgY29tcHJlc3NGcm9tWVVWCisgKiBTaWduYXR1cmU6IChbW0JbSUlbSUlJW0JJSSlJCisgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NGcm9tWVVWX19fM18zQl8zSUlfM0lJSV8zQklJCisgIChKTklFbnYgKiwgam9iamVjdCwgam9iamVjdEFycmF5LCBqaW50QXJyYXksIGppbnQsIGppbnRBcnJheSwgamludCwgamludCwgamJ5dGVBcnJheSwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3NvcgorICogTWV0aG9kOiAgICBlbmNvZGVZVVYKKyAqIFNpZ25hdHVyZTogKFtCSUlJSVtCSUkpVgorICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2VuY29kZVlVVl9fXzNCSUlJSV8zQklJCisgIChKTklFbnYgKiwgam9iamVjdCwgamJ5dGVBcnJheSwgamludCwgamludCwgamludCwgamludCwgamJ5dGVBcnJheSwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3NvcgorICogTWV0aG9kOiAgICBlbmNvZGVZVVYKKyAqIFNpZ25hdHVyZTogKFtCSUlJSUlJW1tCW0lbSUlJKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9lbmNvZGVZVVZfX18zQklJSUlJSV8zXzNCXzNJXzNJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqYnl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqb2JqZWN0QXJyYXksIGppbnRBcnJheSwgamludEFycmF5LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yCisgKiBNZXRob2Q6ICAgIGVuY29kZVlVVgorICogU2lnbmF0dXJlOiAoW0lJSUlJW0JJSSlWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZW5jb2RlWVVWX19fM0lJSUlJXzNCSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqaW50QXJyYXksIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGpieXRlQXJyYXksIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZW5jb2RlWVVWCisgKiBTaWduYXR1cmU6IChbSUlJSUlJSVtbQltJW0lJSSlWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZW5jb2RlWVVWX19fM0lJSUlJSUlfM18zQl8zSV8zSUlJCisgIChKTklFbnYgKiwgam9iamVjdCwgamludEFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqb2JqZWN0QXJyYXksIGppbnRBcnJheSwgamludEFycmF5LCBqaW50LCBqaW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvci5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNThlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qIERPIE5PVCBFRElUIFRISVMgRklMRSAtIGl0IGlzIG1hY2hpbmUgZ2VuZXJhdGVkICovCisjaW5jbHVkZSA8am5pLmg+CisvKiBIZWFkZXIgZm9yIGNsYXNzIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yICovCisKKyNpZm5kZWYgX0luY2x1ZGVkX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yCisjZGVmaW5lIF9JbmNsdWRlZF9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3NvcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgaW5pdAorICogU2lnbmF0dXJlOiAoKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2luaXQKKyAgKEpOSUVudiAqLCBqb2JqZWN0KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVzdHJveQorICogU2lnbmF0dXJlOiAoKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2Rlc3Ryb3kKKyAgKEpOSUVudiAqLCBqb2JqZWN0KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb21wcmVzc0hlYWRlcgorICogU2lnbmF0dXJlOiAoW0JJKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NIZWFkZXIKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqYnl0ZUFycmF5LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb21wcmVzcworICogU2lnbmF0dXJlOiAoW0JJW0JJSUlJSSlWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNCSUlJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqYnl0ZUFycmF5LCBqaW50LCBqYnl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb21wcmVzcworICogU2lnbmF0dXJlOiAoW0JJW0JJSUlJSUlJKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX18zQklfM0JJSUlJSUlJCisgIChKTklFbnYgKiwgam9iamVjdCwgamJ5dGVBcnJheSwgamludCwgamJ5dGVBcnJheSwgamludCwgamludCwgamludCwgamludCwgamludCwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yCisgKiBNZXRob2Q6ICAgIGRlY29tcHJlc3MKKyAqIFNpZ25hdHVyZTogKFtCSVtJSUlJSUkpVgorICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fXzNCSV8zSUlJSUlJCisgIChKTklFbnYgKiwgam9iamVjdCwgamJ5dGVBcnJheSwgamludCwgamludEFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb21wcmVzcworICogU2lnbmF0dXJlOiAoW0JJW0lJSUlJSUlJKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX18zQklfM0lJSUlJSUlJCisgIChKTklFbnYgKiwgam9iamVjdCwgamJ5dGVBcnJheSwgamludCwgamludEFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb21wcmVzc1RvWVVWCisgKiBTaWduYXR1cmU6IChbQklbQkkpVgorICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc1RvWVVWX19fM0JJXzNCSQorICAoSk5JRW52ICosIGpvYmplY3QsIGpieXRlQXJyYXksIGppbnQsIGpieXRlQXJyYXksIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3NvcgorICogTWV0aG9kOiAgICBkZWNvbXByZXNzVG9ZVVYKKyAqIFNpZ25hdHVyZTogKFtCSVtbQltJSVtJSUkpVgorICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc1RvWVVWX19fM0JJXzNfM0JfM0lJXzNJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqYnl0ZUFycmF5LCBqaW50LCBqb2JqZWN0QXJyYXksIGppbnRBcnJheSwgamludCwgamludEFycmF5LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb2RlWVVWCisgKiBTaWduYXR1cmU6IChbW0JbSVtJSVtCSUlJSUlJSSlWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvZGVZVVZfX18zXzNCXzNJXzNJSV8zQklJSUlJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqb2JqZWN0QXJyYXksIGppbnRBcnJheSwgamludEFycmF5LCBqaW50LCBqYnl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb2RlWVVWCisgKiBTaWduYXR1cmU6IChbW0JbSVtJSVtJSUlJSUlJSSlWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvZGVZVVZfX18zXzNCXzNJXzNJSV8zSUlJSUlJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqb2JqZWN0QXJyYXksIGppbnRBcnJheSwgamludEFycmF5LCBqaW50LCBqaW50QXJyYXksIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXIuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2phdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpUcmFuc2Zvcm1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGFkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXIuaApAQCAtMCwwICsxLDI5IEBACisvKiBETyBOT1QgRURJVCBUSElTIEZJTEUgLSBpdCBpcyBtYWNoaW5lIGdlbmVyYXRlZCAqLworI2luY2x1ZGUgPGpuaS5oPgorLyogSGVhZGVyIGZvciBjbGFzcyBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USlRyYW5zZm9ybWVyICovCisKKyNpZm5kZWYgX0luY2x1ZGVkX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXIKKyNkZWZpbmUgX0luY2x1ZGVkX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXIKKyAqIE1ldGhvZDogICAgaW5pdAorICogU2lnbmF0dXJlOiAoKVYKKyAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfaW5pdAorICAoSk5JRW52ICosIGpvYmplY3QpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USlRyYW5zZm9ybWVyCisgKiBNZXRob2Q6ICAgIHRyYW5zZm9ybQorICogU2lnbmF0dXJlOiAoW0JJW1tCW0xvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybTtJKVtJCisgKi8KK0pOSUVYUE9SVCBqaW50QXJyYXkgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfdHJhbnNmb3JtCisgIChKTklFbnYgKiwgam9iamVjdCwgamJ5dGVBcnJheSwgamludCwgam9iamVjdEFycmF5LCBqb2JqZWN0QXJyYXksIGppbnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2FwaW1pbi5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNhcGltaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhjNTViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNhcGltaW4uYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIGpjYXBpbWluLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDMtMjAxMCBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgcmVsZXZhbnQKKyAqIHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBjb21wcmVzc2lvbiBoYWxmCisgKiBvZiB0aGUgSlBFRyBsaWJyYXJ5LiAgVGhlc2UgYXJlIHRoZSAibWluaW11bSIgQVBJIHJvdXRpbmVzIHRoYXQgbWF5IGJlCisgKiBuZWVkZWQgaW4gZWl0aGVyIHRoZSBub3JtYWwgZnVsbC1jb21wcmVzc2lvbiBjYXNlIG9yIHRoZSB0cmFuc2NvZGluZy1vbmx5CisgKiBjYXNlLgorICoKKyAqIE1vc3Qgb2YgdGhlIHJvdXRpbmVzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSBhbiBhcHBsaWNhdGlvbgorICogYXJlIGluIHRoaXMgZmlsZSBvciBpbiBqY2FwaXN0ZC5jLiAgQnV0IGFsc28gc2VlIGpjcGFyYW0uYyBmb3IKKyAqIHBhcmFtZXRlci1zZXR1cCBoZWxwZXIgcm91dGluZXMsIGpjb21hcGkuYyBmb3Igcm91dGluZXMgc2hhcmVkIGJ5CisgKiBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiwgYW5kIGpjdHJhbnMuYyBmb3IgdGhlIHRyYW5zY29kaW5nIGNhc2UuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBJbml0aWFsaXphdGlvbiBvZiBhIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0LgorICogVGhlIGVycm9yIG1hbmFnZXIgbXVzdCBhbHJlYWR5IGJlIHNldCB1cCAoaW4gY2FzZSBtZW1vcnkgbWFuYWdlciBmYWlscykuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX0NyZWF0ZUNvbXByZXNzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgdmVyc2lvbiwgc2l6ZV90IHN0cnVjdHNpemUpCit7CisgIGludCBpOworCisgIC8qIEd1YXJkIGFnYWluc3QgdmVyc2lvbiBtaXNtYXRjaGVzIGJldHdlZW4gbGlicmFyeSBhbmQgY2FsbGVyLiAqLworICBjaW5mby0+bWVtID0gTlVMTDsgICAgICAgICAgICAvKiBzbyBqcGVnX2Rlc3Ryb3kga25vd3MgbWVtIG1nciBub3QgY2FsbGVkICovCisgIGlmICh2ZXJzaW9uICE9IEpQRUdfTElCX1ZFUlNJT04pCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX0xJQl9WRVJTSU9OLCBKUEVHX0xJQl9WRVJTSU9OLCB2ZXJzaW9uKTsKKyAgaWYgKHN0cnVjdHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX1NUUlVDVF9TSVpFLAorICAgICAgICAgICAgIChpbnQpc2l6ZW9mKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCksIChpbnQpc3RydWN0c2l6ZSk7CisKKyAgLyogRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgd2UgemVybyB0aGUgd2hvbGUgbWFzdGVyIHN0cnVjdHVyZS4KKyAgICogQnV0IHRoZSBhcHBsaWNhdGlvbiBoYXMgYWxyZWFkeSBzZXQgdGhlIGVyciBwb2ludGVyLCBhbmQgbWF5IGhhdmUgc2V0CisgICAqIGNsaWVudF9kYXRhLCBzbyB3ZSBoYXZlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhvc2UgZmllbGRzLgorICAgKiBOb3RlOiBpZiBhcHBsaWNhdGlvbiBoYXNuJ3Qgc2V0IGNsaWVudF9kYXRhLCB0b29scyBsaWtlIFB1cmlmeSBtYXkKKyAgICogY29tcGxhaW4gaGVyZS4KKyAgICovCisgIHsKKyAgICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKmVyciA9IGNpbmZvLT5lcnI7CisgICAgdm9pZCAqY2xpZW50X2RhdGEgPSBjaW5mby0+Y2xpZW50X2RhdGE7IC8qIGlnbm9yZSBQdXJpZnkgY29tcGxhaW50IGhlcmUgKi8KKyAgICBNRU1aRVJPKGNpbmZvLCBzaXplb2Yoc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0KSk7CisgICAgY2luZm8tPmVyciA9IGVycjsKKyAgICBjaW5mby0+Y2xpZW50X2RhdGEgPSBjbGllbnRfZGF0YTsKKyAgfQorICBjaW5mby0+aXNfZGVjb21wcmVzc29yID0gRkFMU0U7CisKKyAgLyogSW5pdGlhbGl6ZSBhIG1lbW9yeSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIG9iamVjdCAqLworICBqaW5pdF9tZW1vcnlfbWdyKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIC8qIFplcm8gb3V0IHBvaW50ZXJzIHRvIHBlcm1hbmVudCBzdHJ1Y3R1cmVzLiAqLworICBjaW5mby0+cHJvZ3Jlc3MgPSBOVUxMOworICBjaW5mby0+ZGVzdCA9IE5VTEw7CisKKyAgY2luZm8tPmNvbXBfaW5mbyA9IE5VTEw7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspIHsKKyAgICBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gPSBOVUxMOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgICBjaW5mby0+cV9zY2FsZV9mYWN0b3JbaV0gPSAxMDA7CisjZW5kaWYKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSA9IE5VTEw7CisgICAgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gPSBOVUxMOworICB9CisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisgIC8qIE11c3QgZG8gaXQgaGVyZSBmb3IgZW1pdF9kcXQgaW4gY2FzZSBqcGVnX3dyaXRlX3RhYmxlcyBpcyB1c2VkICovCisgIGNpbmZvLT5ibG9ja19zaXplID0gRENUU0laRTsKKyAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI7CisgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMiAtIDE7CisjZW5kaWYKKworICBjaW5mby0+c2NyaXB0X3NwYWNlID0gTlVMTDsKKworICBjaW5mby0+aW5wdXRfZ2FtbWEgPSAxLjA7ICAgICAvKiBpbiBjYXNlIGFwcGxpY2F0aW9uIGZvcmdldHMgKi8KKworICAvKiBPSywgSSdtIHJlYWR5ICovCisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBDU1RBVEVfU1RBUlQ7Cit9CisKKworLyoKKyAqIERlc3RydWN0aW9uIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QKKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZGVzdHJveV9jb21wcmVzcyhqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAganBlZ19kZXN0cm95KChqX2NvbW1vbl9wdHIpY2luZm8pOyAvKiB1c2UgY29tbW9uIHJvdXRpbmUgKi8KK30KKworCisvKgorICogQWJvcnQgcHJvY2Vzc2luZyBvZiBhIEpQRUcgY29tcHJlc3Npb24gb3BlcmF0aW9uLAorICogYnV0IGRvbid0IGRlc3Ryb3kgdGhlIG9iamVjdCBpdHNlbGYuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2Fib3J0X2NvbXByZXNzKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBqcGVnX2Fib3J0KChqX2NvbW1vbl9wdHIpY2luZm8pOyAvKiB1c2UgY29tbW9uIHJvdXRpbmUgKi8KK30KKworCisvKgorICogRm9yY2libHkgc3VwcHJlc3Mgb3IgdW4tc3VwcHJlc3MgYWxsIHF1YW50aXphdGlvbiBhbmQgSHVmZm1hbiB0YWJsZXMuCisgKiBNYXJrcyBhbGwgY3VycmVudGx5IGRlZmluZWQgdGFibGVzIGFzIGFscmVhZHkgd3JpdHRlbiAoaWYgc3VwcHJlc3MpCisgKiBvciBub3Qgd3JpdHRlbiAoaWYgIXN1cHByZXNzKS4gIFRoaXMgd2lsbCBjb250cm9sIHdoZXRoZXIgdGhleSBnZXQgZW1pdHRlZAorICogYnkgYSBzdWJzZXF1ZW50IGpwZWdfc3RhcnRfY29tcHJlc3MgY2FsbC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IHRvIHByb2R1Y2UKKyAqIGFiYnJldmlhdGVkIEpQRUcgZGF0YXN0cmVhbXMuICBJdCBsb2dpY2FsbHkgYmVsb25ncyBpbiBqY3BhcmFtLmMsIGJ1dAorICogc2luY2UgaXQgaXMgY2FsbGVkIGJ5IGpwZWdfc3RhcnRfY29tcHJlc3MsIHdlIHB1dCBpdCBoZXJlIC0tLSBvdGhlcndpc2UKKyAqIGpjcGFyYW0ubyB3b3VsZCBiZSBsaW5rZWQgd2hldGhlciB0aGUgYXBwbGljYXRpb24gdXNlZCBpdCBvciBub3QuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX3N1cHByZXNzX3RhYmxlcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBzdXBwcmVzcykKK3sKKyAgaW50IGk7CisgIEpRVUFOVF9UQkwgKnF0Ymw7CisgIEpIVUZGX1RCTCAqaHRibDsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykgeworICAgIGlmICgocXRibCA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1tpXSkgIT0gTlVMTCkKKyAgICAgIHF0YmwtPnNlbnRfdGFibGUgPSBzdXBwcmVzczsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBpZiAoKGh0YmwgPSBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSkgIT0gTlVMTCkKKyAgICAgIGh0YmwtPnNlbnRfdGFibGUgPSBzdXBwcmVzczsKKyAgICBpZiAoKGh0YmwgPSBjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpXSkgIT0gTlVMTCkKKyAgICAgIGh0YmwtPnNlbnRfdGFibGUgPSBzdXBwcmVzczsKKyAgfQorfQorCisKKy8qCisgKiBGaW5pc2ggSlBFRyBjb21wcmVzc2lvbi4KKyAqCisgKiBJZiBhIG11bHRpcGFzcyBvcGVyYXRpbmcgbW9kZSB3YXMgc2VsZWN0ZWQsIHRoaXMgbWF5IGRvIGEgZ3JlYXQgZGVhbCBvZgorICogd29yayBpbmNsdWRpbmcgbW9zdCBvZiB0aGUgYWN0dWFsIG91dHB1dC4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZmluaXNoX2NvbXByZXNzKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBKRElNRU5TSU9OIGlNQ1Vfcm93OworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID09IENTVEFURV9TQ0FOTklORyB8fAorICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBDU1RBVEVfUkFXX09LKSB7CisgICAgLyogVGVybWluYXRlIGZpcnN0IHBhc3MgKi8KKyAgICBpZiAoY2luZm8tPm5leHRfc2NhbmxpbmUgPCBjaW5mby0+aW1hZ2VfaGVpZ2h0KQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9UT09fTElUVExFX0RBVEEpOworICAgICgqY2luZm8tPm1hc3Rlci0+ZmluaXNoX3Bhc3MpIChjaW5mbyk7CisgIH0gZWxzZSBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfV1JDT0VGUykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICAvKiBQZXJmb3JtIGFueSByZW1haW5pbmcgcGFzc2VzICovCisgIHdoaWxlICghY2luZm8tPm1hc3Rlci0+aXNfbGFzdF9wYXNzKSB7CisgICAgKCpjaW5mby0+bWFzdGVyLT5wcmVwYXJlX2Zvcl9wYXNzKSAoY2luZm8pOworICAgIGZvciAoaU1DVV9yb3cgPSAwOyBpTUNVX3JvdyA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7IGlNQ1Vfcm93KyspIHsKKyAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKWlNQ1Vfcm93OworICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZyljaW5mby0+dG90YWxfaU1DVV9yb3dzOworICAgICAgICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAgfQorICAgICAgLyogV2UgYnlwYXNzIHRoZSBtYWluIGNvbnRyb2xsZXIgYW5kIGludm9rZSBjb2VmIGNvbnRyb2xsZXIgZGlyZWN0bHk7CisgICAgICAgKiBhbGwgd29yayBpcyBiZWluZyBkb25lIGZyb20gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgICAgICAqLworICAgICAgaWYgKCEoKmNpbmZvLT5jb2VmLT5jb21wcmVzc19kYXRhKSAoY2luZm8sIChKU0FNUElNQUdFKU5VTEwpKQorICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7CisgICAgfQorICAgICgqY2luZm8tPm1hc3Rlci0+ZmluaXNoX3Bhc3MpIChjaW5mbyk7CisgIH0KKyAgLyogV3JpdGUgRU9JLCBkbyBmaW5hbCBjbGVhbnVwICovCisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfZmlsZV90cmFpbGVyKSAoY2luZm8pOworICAoKmNpbmZvLT5kZXN0LT50ZXJtX2Rlc3RpbmF0aW9uKSAoY2luZm8pOworICAvKiBXZSBjYW4gdXNlIGpwZWdfYWJvcnQgdG8gcmVsZWFzZSBtZW1vcnkgYW5kIHJlc2V0IGdsb2JhbF9zdGF0ZSAqLworICBqcGVnX2Fib3J0KChqX2NvbW1vbl9wdHIpY2luZm8pOworfQorCisKKy8qCisgKiBXcml0ZSBhIHNwZWNpYWwgbWFya2VyLgorICogVGhpcyBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciB3cml0aW5nIENPTSBvciBBUFBuIG1hcmtlcnMuCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgYW5kIGJlZm9yZQorICogZmlyc3QgY2FsbCB0byBqcGVnX3dyaXRlX3NjYW5saW5lcygpIG9yIGpwZWdfd3JpdGVfcmF3X2RhdGEoKS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfd3JpdGVfbWFya2VyKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLCBjb25zdCBKT0NURVQgKmRhdGFwdHIsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbikKK3sKKyAgdm9pZCAoKndyaXRlX21hcmtlcl9ieXRlKSAoal9jb21wcmVzc19wdHIgaW5mbywgaW50IHZhbCk7CisKKyAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lICE9IDAgfHwKKyAgICAgIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TQ0FOTklORyAmJgorICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1JBV19PSyAmJgorICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1dSQ09FRlMpKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9tYXJrZXJfaGVhZGVyKSAoY2luZm8sIG1hcmtlciwgZGF0YWxlbik7CisgIHdyaXRlX21hcmtlcl9ieXRlID0gY2luZm8tPm1hcmtlci0+d3JpdGVfbWFya2VyX2J5dGU7IC8qIGNvcHkgZm9yIHNwZWVkICovCisgIHdoaWxlIChkYXRhbGVuLS0pIHsKKyAgICAoKndyaXRlX21hcmtlcl9ieXRlKSAoY2luZm8sICpkYXRhcHRyKTsKKyAgICBkYXRhcHRyKys7CisgIH0KK30KKworLyogU2FtZSwgYnV0IHBpZWNlbWVhbC4gKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX3dyaXRlX21faGVhZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKK3sKKyAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lICE9IDAgfHwKKyAgICAgIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TQ0FOTklORyAmJgorICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1JBV19PSyAmJgorICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1dSQ09FRlMpKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9tYXJrZXJfaGVhZGVyKSAoY2luZm8sIG1hcmtlciwgZGF0YWxlbik7Cit9CisKK0dMT0JBTCh2b2lkKQoranBlZ193cml0ZV9tX2J5dGUoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpCit7CisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfbWFya2VyX2J5dGUpIChjaW5mbywgdmFsKTsKK30KKworCisvKgorICogQWx0ZXJuYXRlIGNvbXByZXNzaW9uIGZ1bmN0aW9uOiBqdXN0IHdyaXRlIGFuIGFiYnJldmlhdGVkIHRhYmxlIGZpbGUuCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzLCBhbGwgcGFyYW1ldGVycyBhbmQgYSBkYXRhIGRlc3RpbmF0aW9uIG11c3QgYmUgc2V0IHVwLgorICoKKyAqIFRvIHByb2R1Y2UgYSBwYWlyIG9mIGZpbGVzIGNvbnRhaW5pbmcgYWJicmV2aWF0ZWQgdGFibGVzIGFuZCBhYmJyZXZpYXRlZAorICogaW1hZ2UgZGF0YSwgb25lIHdvdWxkIHByb2NlZWQgYXMgZm9sbG93czoKKyAqCisgKiAgICAgICAgICAgICAgaW5pdGlhbGl6ZSBKUEVHIG9iamVjdAorICogICAgICAgICAgICAgIHNldCBKUEVHIHBhcmFtZXRlcnMKKyAqICAgICAgICAgICAgICBzZXQgZGVzdGluYXRpb24gdG8gdGFibGUgZmlsZQorICogICAgICAgICAgICAgIGpwZWdfd3JpdGVfdGFibGVzKGNpbmZvKTsKKyAqICAgICAgICAgICAgICBzZXQgZGVzdGluYXRpb24gdG8gaW1hZ2UgZmlsZQorICogICAgICAgICAgICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoY2luZm8sIEZBTFNFKTsKKyAqICAgICAgICAgICAgICB3cml0ZSBkYXRhLi4uCisgKiAgICAgICAgICAgICAganBlZ19maW5pc2hfY29tcHJlc3MoY2luZm8pOworICoKKyAqIGpwZWdfd3JpdGVfdGFibGVzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFya2luZyBhbGwgdGFibGVzIHdyaXR0ZW4KKyAqIChzYW1lIGFzIGpwZWdfc3VwcHJlc3NfdGFibGVzKC4uLiwgVFJVRSkpLiAgVGh1cyBhIHN1YnNlcXVlbnQgc3RhcnRfY29tcHJlc3MKKyAqIHdpbGwgbm90IHJlLWVtaXQgdGhlIHRhYmxlcyB1bmxlc3MgaXQgaXMgcGFzc2VkIHdyaXRlX2FsbF90YWJsZXM9VFJVRS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfd3JpdGVfdGFibGVzKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICAvKiAoUmUpaW5pdGlhbGl6ZSBlcnJvciBtZ3IgYW5kIGRlc3RpbmF0aW9uIG1vZHVsZXMgKi8KKyAgKCpjaW5mby0+ZXJyLT5yZXNldF9lcnJvcl9tZ3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgKCpjaW5mby0+ZGVzdC0+aW5pdF9kZXN0aW5hdGlvbikgKGNpbmZvKTsKKyAgLyogSW5pdGlhbGl6ZSB0aGUgbWFya2VyIHdyaXRlciAuLi4gYml0IG9mIGEgY3JvY2sgdG8gZG8gaXQgaGVyZS4gKi8KKyAgamluaXRfbWFya2VyX3dyaXRlcihjaW5mbyk7CisgIC8qIFdyaXRlIHRoZW0gdGFibGVzISAqLworICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX3RhYmxlc19vbmx5KSAoY2luZm8pOworICAvKiBBbmQgY2xlYW4gdXAuICovCisgICgqY2luZm8tPmRlc3QtPnRlcm1fZGVzdGluYXRpb24pIChjaW5mbyk7CisgIC8qCisgICAqIEluIGxpYnJhcnkgcmVsZWFzZXMgdXAgdGhyb3VnaCB2NmEsIHdlIGNhbGxlZCBqcGVnX2Fib3J0KCkgaGVyZSB0byBmcmVlCisgICAqIGFueSB3b3JraW5nIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGRlc3RpbmF0aW9uIG1hbmFnZXIgYW5kIG1hcmtlcgorICAgKiB3cml0ZXIuICBTb21lIGFwcGxpY2F0aW9ucyBoYWQgYSBwcm9ibGVtIHdpdGggdGhhdDogdGhleSBhbGxvY2F0ZWQgc3BhY2UKKyAgICogb2YgdGhlaXIgb3duIGZyb20gdGhlIGxpYnJhcnkgbWVtb3J5IG1hbmFnZXIsIGFuZCBkaWRuJ3Qgd2FudCBpdCB0byBnbworICAgKiBhd2F5IGR1cmluZyB3cml0ZV90YWJsZXMuICBTbyBub3cgd2UgZG8gbm90aGluZy4gIFRoaXMgd2lsbCBjYXVzZSBhCisgICAqIG1lbW9yeSBsZWFrIGlmIGFuIGFwcCBjYWxscyB3cml0ZV90YWJsZXMgcmVwZWF0ZWRseSB3aXRob3V0IGRvaW5nIGEgZnVsbAorICAgKiBjb21wcmVzc2lvbiBjeWNsZSBvciBvdGhlcndpc2UgcmVzZXR0aW5nIHRoZSBKUEVHIG9iamVjdC4gIEhvd2V2ZXIsIHRoYXQKKyAgICogc2VlbXMgbGVzcyBiYWQgdGhhbiB1bmV4cGVjdGVkbHkgZnJlZWluZyBtZW1vcnkgaW4gdGhlIG5vcm1hbCBjYXNlLgorICAgKiBBbiBhcHAgdGhhdCBwcmVmZXJzIHRoZSBvbGQgYmVoYXZpb3IgY2FuIGNhbGwganBlZ19hYm9ydCBmb3IgaXRzZWxmIGFmdGVyCisgICAqIGVhY2ggY2FsbCB0byBqcGVnX3dyaXRlX3RhYmxlcygpLgorICAgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjYXBpc3RkLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2FwaXN0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMmFhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2FwaXN0ZC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogamNhcGlzdGQuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBjb21wcmVzc2lvbiBoYWxmCisgKiBvZiB0aGUgSlBFRyBsaWJyYXJ5LiAgVGhlc2UgYXJlIHRoZSAic3RhbmRhcmQiIEFQSSByb3V0aW5lcyB0aGF0IGFyZQorICogdXNlZCBpbiB0aGUgbm9ybWFsIGZ1bGwtY29tcHJlc3Npb24gY2FzZS4gIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IGEKKyAqIHRyYW5zY29kaW5nLW9ubHkgYXBwbGljYXRpb24uICBOb3RlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gbGlua3MgaW4KKyAqIGpwZWdfc3RhcnRfY29tcHJlc3MsIGl0IHdpbGwgZW5kIHVwIGxpbmtpbmcgaW4gdGhlIGVudGlyZSBjb21wcmVzc29yLgorICogV2UgdGh1cyBtdXN0IHNlcGFyYXRlIHRoaXMgZmlsZSBmcm9tIGpjYXBpbWluLmMgdG8gYXZvaWQgbGlua2luZyB0aGUKKyAqIHdob2xlIGNvbXByZXNzaW9uIGxpYnJhcnkgaW50byBhIHRyYW5zY29kZXIuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBDb21wcmVzc2lvbiBpbml0aWFsaXphdGlvbi4KKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMsIGFsbCBwYXJhbWV0ZXJzIGFuZCBhIGRhdGEgZGVzdGluYXRpb24gbXVzdCBiZSBzZXQgdXAuCisgKgorICogV2UgcmVxdWlyZSBhIHdyaXRlX2FsbF90YWJsZXMgcGFyYW1ldGVyIGFzIGEgZmFpbHNhZmUgY2hlY2sgd2hlbiB3cml0aW5nCisgKiBtdWx0aXBsZSBkYXRhc3RyZWFtcyBmcm9tIHRoZSBzYW1lIGNvbXByZXNzaW9uIG9iamVjdC4gIFNpbmNlIHByaW9yIHJ1bnMKKyAqIHdpbGwgaGF2ZSBsZWZ0IGFsbCB0aGUgdGFibGVzIG1hcmtlZCBzZW50X3RhYmxlPVRSVUUsIGEgc3Vic2VxdWVudCBydW4KKyAqIHdvdWxkIGVtaXQgYW4gYWJicmV2aWF0ZWQgc3RyZWFtIChubyB0YWJsZXMpIGJ5IGRlZmF1bHQuICBUaGlzIG1heSBiZSB3aGF0CisgKiBpcyB3YW50ZWQsIGJ1dCBmb3Igc2FmZXR5J3Mgc2FrZSBpdCBzaG91bGQgbm90IGJlIHRoZSBkZWZhdWx0IGJlaGF2aW9yOgorICogcHJvZ3JhbW1lcnMgc2hvdWxkIGhhdmUgdG8gbWFrZSBhIGRlbGliZXJhdGUgY2hvaWNlIHRvIGVtaXQgYWJicmV2aWF0ZWQKKyAqIGltYWdlcy4gIFRoZXJlZm9yZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMgc2hvdWxkIGVuY291cmFnZSBwZW9wbGUKKyAqIHRvIHBhc3Mgd3JpdGVfYWxsX3RhYmxlcz1UUlVFOyB0aGVuIGl0IHdpbGwgdGFrZSBhY3RpdmUgdGhvdWdodCB0byBkbyB0aGUKKyAqIHdyb25nIHRoaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zdGFydF9jb21wcmVzcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiB3cml0ZV9hbGxfdGFibGVzKQoreworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICBpZiAod3JpdGVfYWxsX3RhYmxlcykKKyAgICBqcGVnX3N1cHByZXNzX3RhYmxlcyhjaW5mbywgRkFMU0UpOyAvKiBtYXJrIGFsbCB0YWJsZXMgdG8gYmUgd3JpdHRlbiAqLworCisgIC8qIChSZSlpbml0aWFsaXplIGVycm9yIG1nciBhbmQgZGVzdGluYXRpb24gbW9kdWxlcyAqLworICAoKmNpbmZvLT5lcnItPnJlc2V0X2Vycm9yX21ncikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAoKmNpbmZvLT5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uKSAoY2luZm8pOworICAvKiBQZXJmb3JtIG1hc3RlciBzZWxlY3Rpb24gb2YgYWN0aXZlIG1vZHVsZXMgKi8KKyAgamluaXRfY29tcHJlc3NfbWFzdGVyKGNpbmZvKTsKKyAgLyogU2V0IHVwIGZvciB0aGUgZmlyc3QgcGFzcyAqLworICAoKmNpbmZvLT5tYXN0ZXItPnByZXBhcmVfZm9yX3Bhc3MpIChjaW5mbyk7CisgIC8qIFJlYWR5IGZvciBhcHBsaWNhdGlvbiB0byBkcml2ZSBmaXJzdCBwYXNzIHRocm91Z2gganBlZ193cml0ZV9zY2FubGluZXMKKyAgICogb3IganBlZ193cml0ZV9yYXdfZGF0YS4KKyAgICovCisgIGNpbmZvLT5uZXh0X3NjYW5saW5lID0gMDsKKyAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IChjaW5mby0+cmF3X2RhdGFfaW4gPyBDU1RBVEVfUkFXX09LIDogQ1NUQVRFX1NDQU5OSU5HKTsKK30KKworCisvKgorICogV3JpdGUgc29tZSBzY2FubGluZXMgb2YgZGF0YSB0byB0aGUgSlBFRyBjb21wcmVzc29yLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIGxpbmVzIGFjdHVhbGx5IHdyaXR0ZW4uCisgKiBUaGlzIHNob3VsZCBiZSBsZXNzIHRoYW4gdGhlIHN1cHBsaWVkIG51bV9saW5lcyBvbmx5IGluIGNhc2UgdGhhdAorICogdGhlIGRhdGEgZGVzdGluYXRpb24gbW9kdWxlIGhhcyByZXF1ZXN0ZWQgc3VzcGVuc2lvbiBvZiB0aGUgY29tcHJlc3NvciwKKyAqIG9yIGlmIG1vcmUgdGhhbiBpbWFnZV9oZWlnaHQgc2NhbmxpbmVzIGFyZSBwYXNzZWQgaW4uCisgKgorICogTm90ZTogd2Ugd2FybiBhYm91dCBleGNlc3MgY2FsbHMgdG8ganBlZ193cml0ZV9zY2FubGluZXMoKSBzaW5jZQorICogdGhpcyBsaWtlbHkgc2lnbmFscyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIGVycm9yLiAgSG93ZXZlciwKKyAqIGV4Y2VzcyBzY2FubGluZXMgcGFzc2VkIGluIHRoZSBsYXN0IHZhbGlkIGNhbGwgYXJlICpzaWxlbnRseSogaWdub3JlZCwKKyAqIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG5lZWQgbm90IGFkanVzdCBudW1fbGluZXMgZm9yIGVuZC1vZi1pbWFnZQorICogd2hlbiB1c2luZyBhIG11bHRpcGxlLXNjYW5saW5lIGJ1ZmZlci4KKyAqLworCitHTE9CQUwoSkRJTUVOU0lPTikKK2pwZWdfd3JpdGVfc2NhbmxpbmVzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIHNjYW5saW5lcywKKyAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKQoreworICBKRElNRU5TSU9OIHJvd19jdHIsIHJvd3NfbGVmdDsKKworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU0NBTk5JTkcpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lID49IGNpbmZvLT5pbWFnZV9oZWlnaHQpCisgICAgV0FSTk1TKGNpbmZvLCBKV1JOX1RPT19NVUNIX0RBVEEpOworCisgIC8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8KKyAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPSAobG9uZyljaW5mby0+bmV4dF9zY2FubGluZTsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZyljaW5mby0+aW1hZ2VfaGVpZ2h0OworICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgIH0KKworICAvKiBHaXZlIG1hc3RlciBjb250cm9sIG1vZHVsZSBhbm90aGVyIGNoYW5jZSBpZiB0aGlzIGlzIGZpcnN0IGNhbGwgdG8KKyAgICoganBlZ193cml0ZV9zY2FubGluZXMuICBUaGlzIGxldHMgb3V0cHV0IG9mIHRoZSBmcmFtZS9zY2FuIGhlYWRlcnMgYmUKKyAgICogZGVsYXllZCBzbyB0aGF0IGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBDT00sIGV0YywgbWFya2VycyBiZXR3ZWVuCisgICAqIGpwZWdfc3RhcnRfY29tcHJlc3MgYW5kIGpwZWdfd3JpdGVfc2NhbmxpbmVzLgorICAgKi8KKyAgaWYgKGNpbmZvLT5tYXN0ZXItPmNhbGxfcGFzc19zdGFydHVwKQorICAgICgqY2luZm8tPm1hc3Rlci0+cGFzc19zdGFydHVwKSAoY2luZm8pOworCisgIC8qIElnbm9yZSBhbnkgZXh0cmEgc2NhbmxpbmVzIGF0IGJvdHRvbSBvZiBpbWFnZS4gKi8KKyAgcm93c19sZWZ0ID0gY2luZm8tPmltYWdlX2hlaWdodCAtIGNpbmZvLT5uZXh0X3NjYW5saW5lOworICBpZiAobnVtX2xpbmVzID4gcm93c19sZWZ0KQorICAgIG51bV9saW5lcyA9IHJvd3NfbGVmdDsKKworICByb3dfY3RyID0gMDsKKyAgKCpjaW5mby0+bWFpbi0+cHJvY2Vzc19kYXRhKSAoY2luZm8sIHNjYW5saW5lcywgJnJvd19jdHIsIG51bV9saW5lcyk7CisgIGNpbmZvLT5uZXh0X3NjYW5saW5lICs9IHJvd19jdHI7CisgIHJldHVybiByb3dfY3RyOworfQorCisKKy8qCisgKiBBbHRlcm5hdGUgZW50cnkgcG9pbnQgdG8gd3JpdGUgcmF3IGRhdGEuCisgKiBQcm9jZXNzZXMgZXhhY3RseSBvbmUgaU1DVSByb3cgcGVyIGNhbGwsIHVubGVzcyBzdXNwZW5kZWQuCisgKi8KKworR0xPQkFMKEpESU1FTlNJT04pCitqcGVnX3dyaXRlX3Jhd19kYXRhKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGRhdGEsCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKQoreworICBKRElNRU5TSU9OIGxpbmVzX3Blcl9pTUNVX3JvdzsKKworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfUkFXX09LKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIGlmIChjaW5mby0+bmV4dF9zY2FubGluZSA+PSBjaW5mby0+aW1hZ2VfaGVpZ2h0KSB7CisgICAgV0FSTk1TKGNpbmZvLCBKV1JOX1RPT19NVUNIX0RBVEEpOworICAgIHJldHVybiAwOworICB9CisKKyAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLworICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpIHsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKWNpbmZvLT5uZXh0X3NjYW5saW5lOworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKWNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICAgKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgfQorCisgIC8qIEdpdmUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlIGFub3RoZXIgY2hhbmNlIGlmIHRoaXMgaXMgZmlyc3QgY2FsbCB0bworICAgKiBqcGVnX3dyaXRlX3Jhd19kYXRhLiAgVGhpcyBsZXRzIG91dHB1dCBvZiB0aGUgZnJhbWUvc2NhbiBoZWFkZXJzIGJlCisgICAqIGRlbGF5ZWQgc28gdGhhdCBhcHBsaWNhdGlvbiBjYW4gd3JpdGUgQ09NLCBldGMsIG1hcmtlcnMgYmV0d2VlbgorICAgKiBqcGVnX3N0YXJ0X2NvbXByZXNzIGFuZCBqcGVnX3dyaXRlX3Jhd19kYXRhLgorICAgKi8KKyAgaWYgKGNpbmZvLT5tYXN0ZXItPmNhbGxfcGFzc19zdGFydHVwKQorICAgICgqY2luZm8tPm1hc3Rlci0+cGFzc19zdGFydHVwKSAoY2luZm8pOworCisgIC8qIFZlcmlmeSB0aGF0IGF0IGxlYXN0IG9uZSBpTUNVIHJvdyBoYXMgYmVlbiBwYXNzZWQuICovCisgIGxpbmVzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkU7CisgIGlmIChudW1fbGluZXMgPCBsaW5lc19wZXJfaU1DVV9yb3cpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisKKyAgLyogRGlyZWN0bHkgY29tcHJlc3MgdGhlIHJvdy4gKi8KKyAgaWYgKCEoKmNpbmZvLT5jb2VmLT5jb21wcmVzc19kYXRhKSAoY2luZm8sIGRhdGEpKSB7CisgICAgLyogSWYgY29tcHJlc3NvciBkaWQgbm90IGNvbnN1bWUgdGhlIHdob2xlIHJvdywgc3VzcGVuZCBwcm9jZXNzaW5nLiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgLyogT0ssIHdlIHByb2Nlc3NlZCBvbmUgaU1DVSByb3cuICovCisgIGNpbmZvLT5uZXh0X3NjYW5saW5lICs9IGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgcmV0dXJuIGxpbmVzX3Blcl9pTUNVX3JvdzsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjYXJpdGguYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjYXJpdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTVjMGVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNhcml0aC5jCkBAIC0wLDAgKzEsOTI5IEBACisvKgorICogamNhcml0aC5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBEZXZlbG9wZWQgMTk5Ny0yMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwb3J0YWJsZSBhcml0aG1ldGljIGVudHJvcHkgZW5jb2Rpbmcgcm91dGluZXMgZm9yIEpQRUcKKyAqIChpbXBsZW1lbnRpbmcgdGhlIElTTy9JRUMgSVMgMTA5MTgtMSBhbmQgQ0NJVFQgUmVjb21tZW5kYXRpb24gSVRVLVQgVC44MSkuCisgKgorICogQm90aCBzZXF1ZW50aWFsIGFuZCBwcm9ncmVzc2l2ZSBtb2RlcyBhcmUgc3VwcG9ydGVkIGluIHRoaXMgc2luZ2xlIG1vZHVsZS4KKyAqCisgKiBTdXNwZW5zaW9uIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIHRoaXMgbW9kdWxlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBFeHBhbmRlZCBlbnRyb3B5IGVuY29kZXIgb2JqZWN0IGZvciBhcml0aG1ldGljIGVuY29kaW5nLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBKTE9ORyBjOyAvKiBDIHJlZ2lzdGVyLCBiYXNlIG9mIGNvZGluZyBpbnRlcnZhbCwgbGF5b3V0IGFzIGluIHNlYy4gRC4xLjMgKi8KKyAgSkxPTkcgYTsgICAgICAgICAgICAgICAvKiBBIHJlZ2lzdGVyLCBub3JtYWxpemVkIHNpemUgb2YgY29kaW5nIGludGVydmFsICovCisgIEpMT05HIHNjOyAgICAgICAgLyogY291bnRlciBmb3Igc3RhY2tlZCAweEZGIHZhbHVlcyB3aGljaCBtaWdodCBvdmVyZmxvdyAqLworICBKTE9ORyB6YzsgICAgICAgICAgLyogY291bnRlciBmb3IgcGVuZGluZyAweDAwIG91dHB1dCB2YWx1ZXMgd2hpY2ggbWlnaHQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIGRpc2NhcmRlZCBhdCB0aGUgZW5kICgiUGFjbWFuIiB0ZXJtaW5hdGlvbikgKi8KKyAgaW50IGN0OyAgLyogYml0IHNoaWZ0IGNvdW50ZXIsIGRldGVybWluZXMgd2hlbiBuZXh0IGJ5dGUgd2lsbCBiZSB3cml0dGVuICovCisgIGludCBidWZmZXI7ICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgbW9zdCByZWNlbnQgb3V0cHV0IGJ5dGUgIT0gMHhGRiAqLworCisgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8KKyAgaW50IGRjX2NvbnRleHRbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBjb250ZXh0IGluZGV4IGZvciBEQyBjb25kaXRpb25pbmcgKi8KKworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287ICAvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCisgIGludCBuZXh0X3Jlc3RhcnRfbnVtOyAgICAgICAgIC8qIG5leHQgcmVzdGFydCBudW1iZXIgdG8gd3JpdGUgKDAtNykgKi8KKworICAvKiBQb2ludGVycyB0byBzdGF0aXN0aWNzIGFyZWFzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pICovCisgIHVuc2lnbmVkIGNoYXIgKmRjX3N0YXRzW05VTV9BUklUSF9UQkxTXTsKKyAgdW5zaWduZWQgY2hhciAqYWNfc3RhdHNbTlVNX0FSSVRIX1RCTFNdOworCisgIC8qIFN0YXRpc3RpY3MgYmluIGZvciBjb2Rpbmcgd2l0aCBmaXhlZCBwcm9iYWJpbGl0eSAwLjUgKi8KKyAgdW5zaWduZWQgY2hhciBmaXhlZF9iaW5bNF07Cit9IGFyaXRoX2VudHJvcHlfZW5jb2RlcjsKKwordHlwZWRlZiBhcml0aF9lbnRyb3B5X2VuY29kZXIgKmFyaXRoX2VudHJvcHlfcHRyOworCisvKiBUaGUgZm9sbG93aW5nIHR3byBkZWZpbml0aW9ucyBzcGVjaWZ5IHRoZSBhbGxvY2F0aW9uIGNodW5rIHNpemUKKyAqIGZvciB0aGUgc3RhdGlzdGljcyBhcmVhLgorICogQWNjb3JkaW5nIHRvIHNlY3Rpb25zIEYuMS40LjQuMS4zIGFuZCBGLjEuNC40LjIsIHdlIG5lZWQgYXQgbGVhc3QKKyAqIDQ5IHN0YXRpc3RpY3MgYmlucyBmb3IgREMsIGFuZCAyNDUgc3RhdGlzdGljcyBiaW5zIGZvciBBQyBjb2RpbmcuCisgKgorICogV2UgdXNlIGEgY29tcGFjdCByZXByZXNlbnRhdGlvbiB3aXRoIDEgYnl0ZSBwZXIgc3RhdGlzdGljcyBiaW4sCisgKiB0aHVzIHRoZSBudW1iZXJzIGRpcmVjdGx5IHJlcHJlc2VudCBieXRlIHNpemVzLgorICogVGhpcyAxIGJ5dGUgcGVyIHN0YXRpc3RpY3MgYmluIGNvbnRhaW5zIHRoZSBtZWFuaW5nIG9mIHRoZSBNUFMKKyAqIChtb3JlIHByb2JhYmxlIHN5bWJvbCkgaW4gdGhlIGhpZ2hlc3QgYml0IChtYXNrIDB4ODApLCBhbmQgdGhlCisgKiBpbmRleCBpbnRvIHRoZSBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uIHN0YXRlIG1hY2hpbmUgdGFibGUKKyAqIGluIHRoZSBsb3dlciBiaXRzIChtYXNrIDB4N0YpLgorICovCisKKyNkZWZpbmUgRENfU1RBVF9CSU5TICA2NAorI2RlZmluZSBBQ19TVEFUX0JJTlMgIDI1NgorCisvKiBOT1RFOiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyAjZGVmaW5lIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUKKyAqIGdpdmVuIGZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRoZSBBQyBjb25kaXRpb25pbmcgcGFyYW1ldGVyIEt4CisgKiBmb3Igc3BlY3RyYWwgc2VsZWN0aW9uIHByb2dyZXNzaXZlIGNvZGluZyBpbiBzZWN0aW9uIEcuMS4zLjIKKyAqIG9mIHRoZSBzcGVjIChLeCA9IEttaW4gKyBTUkwgKDggKyBTZSAtIEttaW4pIDQpLgorICogQWx0aG91Z2ggdGhlIHNwZWMgYW5kIFAmTSBhdXRob3JzIGNsYWltIHRoYXQgdGhpcyAiaGFzIHByb3ZlbgorICogdG8gZ2l2ZSBnb29kIHJlc3VsdHMgZm9yIDggYml0IHByZWNpc2lvbiBzYW1wbGVzIiwgSSdtIG5vdAorICogY29udmluY2VkIHlldCB0aGF0IHRoaXMgaXMgcmVhbGx5IGJlbmVmaWNpYWwuCisgKiBFYXJseSB0ZXN0cyBnYXZlIG9ubHkgdmVyeSBtYXJnaW5hbCBjb21wcmVzc2lvbiBlbmhhbmNlbWVudHMKKyAqIChhIGZldyAtIGFyb3VuZCA1IG9yIHNvIC0gYnl0ZXMgZXZlbiBmb3IgdmVyeSBsYXJnZSBmaWxlcyksCisgKiB3aGljaCB3b3VsZCB0dXJuIG91dCByYXRoZXIgbmVnYXRpdmUgaWYgd2UnZCBzdXBwcmVzcyB0aGUKKyAqIERBQyAoRGVmaW5lIEFyaXRobWV0aWMgQ29uZGl0aW9uaW5nKSBtYXJrZXIgc2VnbWVudHMgZm9yCisgKiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGluIHRoZSBmdXR1cmUuCisgKiBOb3RlIHRoYXQgY3VycmVudGx5IHRoZSBtYXJrZXIgd3JpdGluZyBtb2R1bGUgZW1pdHMgMTItYnl0ZQorICogREFDIHNlZ21lbnRzIGZvciBhIGZ1bGwtY29tcG9uZW50IHNjYW4gaW4gYSBjb2xvciBpbWFnZS4KKyAqIFRoaXMgaXMgbm90IHdvcnRoIHdvcnJ5aW5nIGFib3V0IElNSE8uIEhvd2V2ZXIsIHNpbmNlIHRoZQorICogc3BlYyBkZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlcyB0byBiZSB1c2VkIGlmIHRoZSB0YWJsZXMKKyAqIGFyZSBvbWl0dGVkICh1bmxpa2UgSHVmZm1hbiB0YWJsZXMsIHdoaWNoIGFyZSByZXF1aXJlZAorICogYW55d2F5KSwgb25lIG1pZ2h0IG9wdGltaXplIHRoaXMgYmVoYXZpb3VyIGluIHRoZSBmdXR1cmUsCisgKiBhbmQgdGhlbiBpdCB3b3VsZCBiZSBkaXNhZHZhbnRhZ2VvdXMgdG8gdXNlIGN1c3RvbSB0YWJsZXMgaWYKKyAqIHRoZXkgZG9uJ3QgcHJvdmlkZSBzdWZmaWNpZW50IGdhaW4gdG8gZXhjZWVkIHRoZSBEQUMgc2l6ZS4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgSSdkIGNvbnNpZGVyIGl0IGFzIGEgcmVhc29uYWJsZSByZXN1bHQKKyAqIHRoYXQgdGhlIGNvbmRpdGlvbmluZyBoYXMgbm8gc2lnbmlmaWNhbnQgaW5mbHVlbmNlIG9uIHRoZQorICogY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYmFzaWMKKyAqIHN0YXRpc3RpY2FsIG1vZGVsIGlzIGFscmVhZHkgcmF0aGVyIHN0YWJsZS4KKyAqCisgKiBUaHVzLCBhdCB0aGUgbW9tZW50LCB3ZSB1c2UgdGhlIGRlZmF1bHQgY29uZGl0aW9uaW5nIHZhbHVlcworICogYW55d2F5LCBhbmQgZG8gbm90IHVzZSB0aGUgY3VzdG9tIGZvcm11bGEuCisgKgorI2RlZmluZSBDQUxDVUxBVEVfU1BFQ1RSQUxfQ09ORElUSU9OSU5HCisgKi8KKworLyogSVJJR0hUX1NISUZUIGlzIGxpa2UgUklHSFRfU0hJRlQsIGJ1dCB3b3JrcyBvbiBpbnQgcmF0aGVyIHRoYW4gSkxPTkcuCisgKiBXZSBhc3N1bWUgdGhhdCBpbnQgcmlnaHQgc2hpZnQgaXMgdW5zaWduZWQgaWYgSkxPTkcgcmlnaHQgc2hpZnQgaXMsCisgKiB3aGljaCBzaG91bGQgYmUgc2FmZS4KKyAqLworCisjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyNkZWZpbmUgSVNISUZUX1RFTVBTICAgIGludCBpc2hpZnRfdGVtcDsKKyNkZWZpbmUgSVJJR0hUX1NISUZUKHgsIHNoZnQpIFwKKyAgKChpc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXAorICAgKGlzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4wKSA8PCAoMTYgLSAoc2hmdCkpKSA6IFwKKyAgIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQorI2Vsc2UKKyNkZWZpbmUgSVNISUZUX1RFTVBTCisjZGVmaW5lIElSSUdIVF9TSElGVCh4LCBzaGZ0KSAgICgoeCkgPj4gKHNoZnQpKQorI2VuZGlmCisKKworTE9DQUwodm9pZCkKK2VtaXRfYnl0ZShpbnQgdmFsLCBqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIFdyaXRlIG5leHQgb3V0cHV0IGJ5dGU7IHdlIGRvIG5vdCBzdXBwb3J0IHN1c3BlbnNpb24gaW4gdGhpcyBtb2R1bGUuICovCit7CisgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqZGVzdCA9IGNpbmZvLT5kZXN0OworCisgICpkZXN0LT5uZXh0X291dHB1dF9ieXRlKysgPSAoSk9DVEVUKXZhbDsKKyAgaWYgKC0tZGVzdC0+ZnJlZV9pbl9idWZmZXIgPT0gMCkKKyAgICBpZiAoISgqZGVzdC0+ZW1wdHlfb3V0cHV0X2J1ZmZlcikgKGNpbmZvKSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ0FOVF9TVVNQRU5EKTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgYW4gYXJpdGhtZXRpYy1jb21wcmVzc2VkIHNjYW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfcGFzcyhqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgYXJpdGhfZW50cm9weV9wdHIgZSA9IChhcml0aF9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgSkxPTkcgdGVtcDsKKworICAvKiBTZWN0aW9uIEQuMS44OiBUZXJtaW5hdGlvbiBvZiBlbmNvZGluZyAqLworCisgIC8qIEZpbmQgdGhlIGUtPmMgaW4gdGhlIGNvZGluZyBpbnRlcnZhbCB3aXRoIHRoZSBsYXJnZXN0CisgICAqIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgKi8KKyAgaWYgKCh0ZW1wID0gKGUtPmEgLSAxICsgZS0+YykgJiAweEZGRkYwMDAwVUwpIDwgZS0+YykKKyAgICBlLT5jID0gdGVtcCArIDB4ODAwMEw7CisgIGVsc2UKKyAgICBlLT5jID0gdGVtcDsKKyAgLyogU2VuZCByZW1haW5pbmcgYnl0ZXMgdG8gb3V0cHV0ICovCisgIGUtPmMgPDw9IGUtPmN0OworICBpZiAoZS0+YyAmIDB4RjgwMDAwMDBVTCkgeworICAgIC8qIE9uZSBmaW5hbCBvdmVyZmxvdyBoYXMgdG8gYmUgaGFuZGxlZCAqLworICAgIGlmIChlLT5idWZmZXIgPj0gMCkgeworICAgICAgaWYgKGUtPnpjKQorICAgICAgICBkbyBlbWl0X2J5dGUoMHgwMCwgY2luZm8pOworICAgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgICBlbWl0X2J5dGUoZS0+YnVmZmVyICsgMSwgY2luZm8pOworICAgICAgaWYgKGUtPmJ1ZmZlciArIDEgPT0gMHhGRikKKyAgICAgICAgZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKKyAgICB9CisgICAgZS0+emMgKz0gZS0+c2M7ICAvKiBjYXJyeS1vdmVyIGNvbnZlcnRzIHN0YWNrZWQgMHhGRiBieXRlcyB0byAweDAwICovCisgICAgZS0+c2MgPSAwOworICB9IGVsc2UgeworICAgIGlmIChlLT5idWZmZXIgPT0gMCkKKyAgICAgICsrZS0+emM7CisgICAgZWxzZSBpZiAoZS0+YnVmZmVyID49IDApIHsKKyAgICAgIGlmIChlLT56YykKKyAgICAgICAgZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKKyAgICAgICAgd2hpbGUgKC0tZS0+emMpOworICAgICAgZW1pdF9ieXRlKGUtPmJ1ZmZlciwgY2luZm8pOworICAgIH0KKyAgICBpZiAoZS0+c2MpIHsKKyAgICAgIGlmIChlLT56YykKKyAgICAgICAgZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKKyAgICAgICAgd2hpbGUgKC0tZS0+emMpOworICAgICAgZG8geworICAgICAgICBlbWl0X2J5dGUoMHhGRiwgY2luZm8pOworICAgICAgICBlbWl0X2J5dGUoMHgwMCwgY2luZm8pOworICAgICAgfSB3aGlsZSAoLS1lLT5zYyk7CisgICAgfQorICB9CisgIC8qIE91dHB1dCBmaW5hbCBieXRlcyBvbmx5IGlmIHRoZXkgYXJlIG5vdCAweDAwICovCisgIGlmIChlLT5jICYgMHg3RkZGODAwTCkgeworICAgIGlmIChlLT56YykgIC8qIG91dHB1dCBmaW5hbCBwZW5kaW5nIHplcm8gYnl0ZXMgKi8KKyAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgZW1pdF9ieXRlKChlLT5jID4+IDE5KSAmIDB4RkYsIGNpbmZvKTsKKyAgICBpZiAoKChlLT5jID4+IDE5KSAmIDB4RkYpID09IDB4RkYpCisgICAgICBlbWl0X2J5dGUoMHgwMCwgY2luZm8pOworICAgIGlmIChlLT5jICYgMHg3RjgwMEwpIHsKKyAgICAgIGVtaXRfYnl0ZSgoZS0+YyA+PiAxMSkgJiAweEZGLCBjaW5mbyk7CisgICAgICBpZiAoKChlLT5jID4+IDExKSAmIDB4RkYpID09IDB4RkYpCisgICAgICAgIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIFRoZSBjb3JlIGFyaXRobWV0aWMgZW5jb2Rpbmcgcm91dGluZSAoY29tbW9uIGluIEpQRUcgYW5kIEpCSUcpLgorICogVGhpcyBuZWVkcyB0byBnbyBhcyBmYXN0IGFzIHBvc3NpYmxlLgorICogTWFjaGluZS1kZXBlbmRlbnQgb3B0aW1pemF0aW9uIGZhY2lsaXRpZXMKKyAqIGFyZSBub3QgdXRpbGl6ZWQgaW4gdGhpcyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbi4KKyAqIEhvd2V2ZXIsIHRoaXMgY29kZSBzaG91bGQgYmUgZmFpcmx5IGVmZmljaWVudCBhbmQKKyAqIG1heSBiZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciBvcHRpbWl6YXRpb25zIGFueXdheS4KKyAqCisgKiBQYXJhbWV0ZXIgJ3ZhbCcgdG8gYmUgZW5jb2RlZCBtYXkgYmUgMCBvciAxIChiaW5hcnkgZGVjaXNpb24pLgorICoKKyAqIE5vdGU6IEkndmUgYWRkZWQgZnVsbCAiUGFjbWFuIiB0ZXJtaW5hdGlvbiBzdXBwb3J0IHRvIHRoZQorICogYnl0ZSBvdXRwdXQgcm91dGluZXMsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIG9wdGlvbmFsCisgKiBEaXNjYXJkX2ZpbmFsX3plcm9zIHByb2NlZHVyZSAoRmlndXJlIEQuMTUpIGluIHRoZSBzcGVjLgorICogVGh1cywgd2UgYWx3YXlzIHByb2R1Y2UgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIG91dHB1dAorICogc3RyZWFtIGNvbXBsaWFudCB0byB0aGUgc3BlYyAobm8gdHJhaWxpbmcgemVybyBieXRlcywKKyAqIGV4Y2VwdCBmb3IgRkYgc3R1ZmZpbmcpLgorICoKKyAqIEkndmUgYWxzbyBpbnRyb2R1Y2VkIGEgbmV3IHNjaGVtZSBmb3IgYWNjZXNzaW5nCisgKiB0aGUgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiBzdGF0ZSBtYWNoaW5lIHRhYmxlLAorICogZGVyaXZlZCBmcm9tIE1hcmt1cyBLdWhuJ3MgSkJJRyBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitMT0NBTCh2b2lkKQorYXJpdGhfZW5jb2RlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCB1bnNpZ25lZCBjaGFyICpzdCwgaW50IHZhbCkKK3sKKyAgcmVnaXN0ZXIgYXJpdGhfZW50cm9weV9wdHIgZSA9IChhcml0aF9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBubCwgbm07CisgIHJlZ2lzdGVyIEpMT05HIHFlLCB0ZW1wOworICByZWdpc3RlciBpbnQgc3Y7CisKKyAgLyogRmV0Y2ggdmFsdWVzIGZyb20gb3VyIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgVGFibGUgRC4yOgorICAgKiBRZSB2YWx1ZXMgYW5kIHByb2JhYmlsaXR5IGVzdGltYXRpb24gc3RhdGUgbWFjaGluZQorICAgKi8KKyAgc3YgPSAqc3Q7CisgIHFlID0ganBlZ19hcml0YWJbc3YgJiAweDdGXTsgIC8qID0+IFFlX1ZhbHVlICovCisgIG5sID0gcWUgJiAweEZGOyAgcWUgPj49IDg7ICAgIC8qIE5leHRfSW5kZXhfTFBTICsgU3dpdGNoX01QUyAqLworICBubSA9IHFlICYgMHhGRjsgIHFlID4+PSA4OyAgICAvKiBOZXh0X0luZGV4X01QUyAqLworCisgIC8qIEVuY29kZSAmIGVzdGltYXRpb24gcHJvY2VkdXJlcyBwZXIgc2VjdGlvbnMgRC4xLjQgJiBELjEuNSAqLworICBlLT5hIC09IHFlOworICBpZiAodmFsICE9IChzdiA+PiA3KSkgeworICAgIC8qIEVuY29kZSB0aGUgbGVzcyBwcm9iYWJsZSBzeW1ib2wgKi8KKyAgICBpZiAoZS0+YSA+PSBxZSkgeworICAgICAgLyogSWYgdGhlIGludGVydmFsIHNpemUgKHFlKSBmb3IgdGhlIGxlc3MgcHJvYmFibGUgc3ltYm9sIChMUFMpCisgICAgICAgKiBpcyBsYXJnZXIgdGhhbiB0aGUgaW50ZXJ2YWwgc2l6ZSBmb3IgdGhlIE1QUywgdGhlbiBleGNoYW5nZQorICAgICAgICogdGhlIHR3byBzeW1ib2xzIGZvciBjb2RpbmcgZWZmaWNpZW5jeSwgb3RoZXJ3aXNlIGNvZGUgdGhlIExQUworICAgICAgICogYXMgdXN1YWw6ICovCisgICAgICBlLT5jICs9IGUtPmE7CisgICAgICBlLT5hID0gcWU7CisgICAgfQorICAgICpzdCA9IChzdiAmIDB4ODApIF4gbmw7ICAgICAvKiBFc3RpbWF0ZV9hZnRlcl9MUFMgKi8KKyAgfSBlbHNlIHsKKyAgICAvKiBFbmNvZGUgdGhlIG1vcmUgcHJvYmFibGUgc3ltYm9sICovCisgICAgaWYgKGUtPmEgPj0gMHg4MDAwTCkKKyAgICAgIHJldHVybjsgIC8qIEEgPj0gMHg4MDAwIC0+IHJlYWR5LCBubyByZW5vcm1hbGl6YXRpb24gcmVxdWlyZWQgKi8KKyAgICBpZiAoZS0+YSA8IHFlKSB7CisgICAgICAvKiBJZiB0aGUgaW50ZXJ2YWwgc2l6ZSAocWUpIGZvciB0aGUgbGVzcyBwcm9iYWJsZSBzeW1ib2wgKExQUykKKyAgICAgICAqIGlzIGxhcmdlciB0aGFuIHRoZSBpbnRlcnZhbCBzaXplIGZvciB0aGUgTVBTLCB0aGVuIGV4Y2hhbmdlCisgICAgICAgKiB0aGUgdHdvIHN5bWJvbHMgZm9yIGNvZGluZyBlZmZpY2llbmN5OiAqLworICAgICAgZS0+YyArPSBlLT5hOworICAgICAgZS0+YSA9IHFlOworICAgIH0KKyAgICAqc3QgPSAoc3YgJiAweDgwKSBeIG5tOyAgICAgLyogRXN0aW1hdGVfYWZ0ZXJfTVBTICovCisgIH0KKworICAvKiBSZW5vcm1hbGl6YXRpb24gJiBkYXRhIG91dHB1dCBwZXIgc2VjdGlvbiBELjEuNiAqLworICBkbyB7CisgICAgZS0+YSA8PD0gMTsKKyAgICBlLT5jIDw8PSAxOworICAgIGlmICgtLWUtPmN0ID09IDApIHsKKyAgICAgIC8qIEFub3RoZXIgYnl0ZSBpcyByZWFkeSBmb3Igb3V0cHV0ICovCisgICAgICB0ZW1wID0gZS0+YyA+PiAxOTsKKyAgICAgIGlmICh0ZW1wID4gMHhGRikgeworICAgICAgICAvKiBIYW5kbGUgb3ZlcmZsb3cgb3ZlciBhbGwgc3RhY2tlZCAweEZGIGJ5dGVzICovCisgICAgICAgIGlmIChlLT5idWZmZXIgPj0gMCkgeworICAgICAgICAgIGlmIChlLT56YykKKyAgICAgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgICAgZW1pdF9ieXRlKGUtPmJ1ZmZlciArIDEsIGNpbmZvKTsKKyAgICAgICAgICBpZiAoZS0+YnVmZmVyICsgMSA9PSAweEZGKQorICAgICAgICAgICAgZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlLT56YyArPSBlLT5zYzsgIC8qIGNhcnJ5LW92ZXIgY29udmVydHMgc3RhY2tlZCAweEZGIGJ5dGVzIHRvIDB4MDAgKi8KKyAgICAgICAgZS0+c2MgPSAwOworICAgICAgICAvKiBOb3RlOiBUaGUgMyBzcGFjZXIgYml0cyBpbiB0aGUgQyByZWdpc3RlciBndWFyYW50ZWUKKyAgICAgICAgICogdGhhdCB0aGUgbmV3IGJ1ZmZlciBieXRlIGNhbid0IGJlIDB4RkYgaGVyZQorICAgICAgICAgKiAoc2VlIHBhZ2UgMTYwIGluIHRoZSBQJk0gSlBFRyBib29rKS4gKi8KKyAgICAgICAgZS0+YnVmZmVyID0gdGVtcCAmIDB4RkY7ICAvKiBuZXcgb3V0cHV0IGJ5dGUsIG1pZ2h0IG92ZXJmbG93IGxhdGVyICovCisgICAgICB9IGVsc2UgaWYgKHRlbXAgPT0gMHhGRikgeworICAgICAgICArK2UtPnNjOyAgLyogc3RhY2sgMHhGRiBieXRlICh3aGljaCBtaWdodCBvdmVyZmxvdyBsYXRlcikgKi8KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIE91dHB1dCBhbGwgc3RhY2tlZCAweEZGIGJ5dGVzLCB0aGV5IHdpbGwgbm90IG92ZXJmbG93IGFueSBtb3JlICovCisgICAgICAgIGlmIChlLT5idWZmZXIgPT0gMCkKKyAgICAgICAgICArK2UtPnpjOworICAgICAgICBlbHNlIGlmIChlLT5idWZmZXIgPj0gMCkgeworICAgICAgICAgIGlmIChlLT56YykKKyAgICAgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgICAgZW1pdF9ieXRlKGUtPmJ1ZmZlciwgY2luZm8pOworICAgICAgICB9CisgICAgICAgIGlmIChlLT5zYykgeworICAgICAgICAgIGlmIChlLT56YykKKyAgICAgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgZW1pdF9ieXRlKDB4RkYsIGNpbmZvKTsKKyAgICAgICAgICAgIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgfSB3aGlsZSAoLS1lLT5zYyk7CisgICAgICAgIH0KKyAgICAgICAgZS0+YnVmZmVyID0gdGVtcCAmIDB4RkY7ICAvKiBuZXcgb3V0cHV0IGJ5dGUgKGNhbiBzdGlsbCBvdmVyZmxvdykgKi8KKyAgICAgIH0KKyAgICAgIGUtPmMgJj0gMHg3RkZGRkw7CisgICAgICBlLT5jdCArPSA4OworICAgIH0KKyAgfSB3aGlsZSAoZS0+YSA8IDB4ODAwMEwpOworfQorCisKKy8qCisgKiBFbWl0IGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIHByZWRpY3Rpb25zLgorICovCisKK0xPQ0FMKHZvaWQpCitlbWl0X3Jlc3RhcnQoal9jb21wcmVzc19wdHIgY2luZm8sIGludCByZXN0YXJ0X251bSkKK3sKKyAgYXJpdGhfZW50cm9weV9wdHIgZW50cm9weSA9IChhcml0aF9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGZpbmlzaF9wYXNzKGNpbmZvKTsKKworICBlbWl0X2J5dGUoMHhGRiwgY2luZm8pOworICBlbWl0X2J5dGUoSlBFR19SU1QwICsgcmVzdGFydF9udW0sIGNpbmZvKTsKKworICAvKiBSZS1pbml0aWFsaXplIHN0YXRpc3RpY3MgYXJlYXMgKi8KKyAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKKyAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgIC8qIERDIG5lZWRzIG5vIHRhYmxlIGZvciByZWZpbmVtZW50IHNjYW4gKi8KKyAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPT0gMCB8fCAoY2luZm8tPlNzID09IDAgJiYgY2luZm8tPkFoID09IDApKSB7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmRjX3N0YXRzW2NvbXBwdHItPmRjX3RibF9ub10sIERDX1NUQVRfQklOUyk7CisgICAgICAvKiBSZXNldCBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOworICAgIH0KKyAgICAvKiBBQyBuZWVkcyBubyB0YWJsZSB3aGVuIG5vdCBwcmVzZW50ICovCisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID09IDAgfHwgY2luZm8tPlNlKSB7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmFjX3N0YXRzW2NvbXBwdHItPmFjX3RibF9ub10sIEFDX1NUQVRfQklOUyk7CisgICAgfQorICB9CisKKyAgLyogUmVzZXQgYXJpdGhtZXRpYyBlbmNvZGluZyB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+YyA9IDA7CisgIGVudHJvcHktPmEgPSAweDEwMDAwTDsKKyAgZW50cm9weS0+c2MgPSAwOworICBlbnRyb3B5LT56YyA9IDA7CisgIGVudHJvcHktPmN0ID0gMTE7CisgIGVudHJvcHktPmJ1ZmZlciA9IC0xOyAgLyogZW1wdHkgKi8KK30KKworCisvKgorICogTUNVIGVuY29kaW5nIGZvciBEQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X0RDX2ZpcnN0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBKQkxPQ0tST1cgYmxvY2s7CisgIHVuc2lnbmVkIGNoYXIgKnN0OworICBpbnQgYmxrbiwgY2ksIHRibDsKKyAgaW50IHYsIHYyLCBtOworICBJU0hJRlRfVEVNUFMKKworICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgeworICAgICAgZW1pdF9yZXN0YXJ0KGNpbmZvLCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgdGJsID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldLT5kY190Ymxfbm87CisKKyAgICAvKiBDb21wdXRlIHRoZSBEQyB2YWx1ZSBhZnRlciB0aGUgcmVxdWlyZWQgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLgorICAgICAqIFRoaXMgaXMgc2ltcGx5IGFuIGFyaXRobWV0aWMgcmlnaHQgc2hpZnQuCisgICAgICovCisgICAgbSA9IElSSUdIVF9TSElGVCgoaW50KSgoKmJsb2NrKVswXSksIGNpbmZvLT5BbCk7CisKKyAgICAvKiBTZWN0aW9ucyBGLjEuNC4xICYgRi4xLjQuNC4xOiBFbmNvZGluZyBvZiBEQyBjb2VmZmljaWVudHMgKi8KKworICAgIC8qIFRhYmxlIEYuNDogUG9pbnQgdG8gc3RhdGlzdGljcyBiaW4gUzAgZm9yIERDIGNvZWZmaWNpZW50IGNvZGluZyAqLworICAgIHN0ID0gZW50cm9weS0+ZGNfc3RhdHNbdGJsXSArIGVudHJvcHktPmRjX2NvbnRleHRbY2ldOworCisgICAgLyogRmlndXJlIEYuNDogRW5jb2RlX0RDX0RJRkYgKi8KKyAgICBpZiAoKHYgPSBtIC0gZW50cm9weS0+bGFzdF9kY192YWxbY2ldKSA9PSAwKSB7CisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsKKyAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsgICAgICAvKiB6ZXJvIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICB9IGVsc2UgeworICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gbTsKKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgLyogRmlndXJlIEYuNjogRW5jb2Rpbmcgbm9uemVybyB2YWx1ZSB2ICovCisgICAgICAvKiBGaWd1cmUgRi43OiBFbmNvZGluZyB0aGUgc2lnbiBvZiB2ICovCisgICAgICBpZiAodiA+IDApIHsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCArIDEsIDApOyAvKiBUYWJsZSBGLjQ6IFNTID0gUzAgKyAxICovCisgICAgICAgIHN0ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFibGUgRi40OiBTUCA9IFMwICsgMiAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDQ7ICAgIC8qIHNtYWxsIHBvc2l0aXZlIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHYgPSAtdjsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCArIDEsIDEpOyAvKiBUYWJsZSBGLjQ6IFNTID0gUzAgKyAxICovCisgICAgICAgIHN0ICs9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFibGUgRi40OiBTTiA9IFMwICsgMyAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDg7ICAgIC8qIHNtYWxsIG5lZ2F0aXZlIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIH0KKyAgICAgIC8qIEZpZ3VyZSBGLjg6IEVuY29kaW5nIHRoZSBtYWduaXR1ZGUgY2F0ZWdvcnkgb2YgdiAqLworICAgICAgbSA9IDA7CisgICAgICBpZiAodiAtPSAxKSB7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgICBtID0gMTsKKyAgICAgICAgdjIgPSB2OworICAgICAgICBzdCA9IGVudHJvcHktPmRjX3N0YXRzW3RibF0gKyAyMDsgLyogVGFibGUgRi40OiBYMSA9IDIwICovCisgICAgICAgIHdoaWxlICh2MiA+Pj0gMSkgeworICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgICAgIG0gPDw9IDE7CisgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7CisgICAgICAvKiBTZWN0aW9uIEYuMS40LjQuMS4yOiBFc3RhYmxpc2ggZGNfY29udGV4dCBjb25kaXRpb25pbmcgY2F0ZWdvcnkgKi8KKyAgICAgIGlmIChtIDwgKGludCkoKDFMIDw8IGNpbmZvLT5hcml0aF9kY19MW3RibF0pID4+IDEpKQorICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7ICAgIC8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLworICAgICAgZWxzZSBpZiAobSA+IChpbnQpKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gKz0gODsgICAvKiBsYXJnZSBkaWZmIGNhdGVnb3J5ICovCisgICAgICAvKiBGaWd1cmUgRi45OiBFbmNvZGluZyB0aGUgbWFnbml0dWRlIGJpdCBwYXR0ZXJuIG9mIHYgKi8KKyAgICAgIHN0ICs9IDE0OworICAgICAgd2hpbGUgKG0gPj49IDEpCisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIChtICYgdikgPyAxIDogMCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgQUMgaW5pdGlhbCBzY2FuIChlaXRoZXIgc3BlY3RyYWwgc2VsZWN0aW9uLAorICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZW5jb2RlX21jdV9BQ19maXJzdChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgYXJpdGhfZW50cm9weV9wdHIgZW50cm9weSA9IChhcml0aF9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgSkJMT0NLUk9XIGJsb2NrOworICB1bnNpZ25lZCBjaGFyICpzdDsKKyAgaW50IHRibCwgaywga2U7CisgIGludCB2LCB2MiwgbTsKKworICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgeworICAgICAgZW1pdF9yZXN0YXJ0KGNpbmZvLCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovCisgIGJsb2NrID0gTUNVX2RhdGFbMF07CisgIHRibCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5hY190Ymxfbm87CisKKyAgLyogU2VjdGlvbnMgRi4xLjQuMiAmIEYuMS40LjQuMjogRW5jb2Rpbmcgb2YgQUMgY29lZmZpY2llbnRzICovCisKKyAgLyogRXN0YWJsaXNoIEVPQiAoZW5kLW9mLWJsb2NrKSBpbmRleCAqLworICBmb3IgKGtlID0gY2luZm8tPlNlOyBrZSA+IDA7IGtlLS0pCisgICAgLyogV2UgbXVzdCBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLiAgRm9yIEFDIGNvZWZmaWNpZW50cyB0aGlzCisgICAgICogaXMgYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIHJvdW5kaW5nIHRvd2FyZHMgMC4gIFRvIGRvIHRoaXMgcG9ydGFibHkKKyAgICAgKiBpbiBDLCB3ZSBzaGlmdCBhZnRlciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlLgorICAgICAqLworICAgIGlmICgodiA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrZV1dKSA+PSAwKSB7CisgICAgICBpZiAodiA+Pj0gY2luZm8tPkFsKSBicmVhazsKKyAgICB9IGVsc2UgeworICAgICAgdiA9IC12OworICAgICAgaWYgKHYgPj49IGNpbmZvLT5BbCkgYnJlYWs7CisgICAgfQorCisgIC8qIEZpZ3VyZSBGLjU6IEVuY29kZV9BQ19Db2VmZmljaWVudHMgKi8KKyAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IGtlOyBrKyspIHsKKyAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKyAzICogKGsgLSAxKTsKKyAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsgICAgICAgICAvKiBFT0IgZGVjaXNpb24gKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICBpZiAoKHYgPSAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dKSA+PSAwKSB7CisgICAgICAgIGlmICh2ID4+PSBjaW5mby0+QWwpIHsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7CisgICAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4sIDApOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB2ID0gLXY7CisgICAgICAgIGlmICh2ID4+PSBjaW5mby0+QWwpIHsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7CisgICAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4sIDEpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMCk7ICBzdCArPSAzOyAgaysrOworICAgIH0KKyAgICBzdCArPSAyOworICAgIC8qIEZpZ3VyZSBGLjg6IEVuY29kaW5nIHRoZSBtYWduaXR1ZGUgY2F0ZWdvcnkgb2YgdiAqLworICAgIG0gPSAwOworICAgIGlmICh2IC09IDEpIHsKKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgbSA9IDE7CisgICAgICB2MiA9IHY7CisgICAgICBpZiAodjIgPj49IDEpIHsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgICAgICAgIG0gPDw9IDE7CisgICAgICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArCisgICAgICAgICAgICAgKGsgPD0gY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA/IDE4OSA6IDIxNyk7CisgICAgICAgIHdoaWxlICh2MiA+Pj0gMSkgeworICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgICAgIG0gPDw9IDE7CisgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsKKyAgICAvKiBGaWd1cmUgRi45OiBFbmNvZGluZyB0aGUgbWFnbml0dWRlIGJpdCBwYXR0ZXJuIG9mIHYgKi8KKyAgICBzdCArPSAxNDsKKyAgICB3aGlsZSAobSA+Pj0gMSkKKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIChtICYgdikgPyAxIDogMCk7CisgIH0KKyAgLyogRW5jb2RlIEVPQiBkZWNpc2lvbiBvbmx5IGlmIGsgPD0gY2luZm8tPlNlICovCisgIGlmIChrIDw9IGNpbmZvLT5TZSkgeworICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOworICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgREMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfRENfcmVmaW5lKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICB1bnNpZ25lZCBjaGFyICpzdDsKKyAgaW50IEFsLCBibGtuOworCisgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbWl0X3Jlc3RhcnQoY2luZm8sIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworICAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKKyAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0rKzsKKyAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gJj0gNzsKKyAgICB9CisgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKyAgfQorCisgIHN0ID0gZW50cm9weS0+Zml4ZWRfYmluOyAgICAgIC8qIHVzZSBmaXhlZCBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uICovCisgIEFsID0gY2luZm8tPkFsOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgLyogV2Ugc2ltcGx5IGVtaXQgdGhlIEFsJ3RoIGJpdCBvZiB0aGUgREMgY29lZmZpY2llbnQgdmFsdWUuICovCisgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgKE1DVV9kYXRhW2Jsa25dWzBdWzBdID4+IEFsKSAmIDEpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfQUNfcmVmaW5lKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBKQkxPQ0tST1cgYmxvY2s7CisgIHVuc2lnbmVkIGNoYXIgKnN0OworICBpbnQgdGJsLCBrLCBrZSwga2V4OworICBpbnQgdjsKKworICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgeworICAgICAgZW1pdF9yZXN0YXJ0KGNpbmZvLCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovCisgIGJsb2NrID0gTUNVX2RhdGFbMF07CisgIHRibCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5hY190Ymxfbm87CisKKyAgLyogU2VjdGlvbiBHLjEuMy4zOiBFbmNvZGluZyBvZiBBQyBjb2VmZmljaWVudHMgKi8KKworICAvKiBFc3RhYmxpc2ggRU9CIChlbmQtb2YtYmxvY2spIGluZGV4ICovCisgIGZvciAoa2UgPSBjaW5mby0+U2U7IGtlID4gMDsga2UtLSkKKyAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMKKyAgICAgKiBpcyBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmRpbmcgdG93YXJkcyAwLiAgVG8gZG8gdGhpcyBwb3J0YWJseQorICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWUuCisgICAgICovCisgICAgaWYgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tlXV0pID49IDApIHsKKyAgICAgIGlmICh2ID4+PSBjaW5mby0+QWwpIGJyZWFrOworICAgIH0gZWxzZSB7CisgICAgICB2ID0gLXY7CisgICAgICBpZiAodiA+Pj0gY2luZm8tPkFsKSBicmVhazsKKyAgICB9CisKKyAgLyogRXN0YWJsaXNoIEVPQnggKHByZXZpb3VzIHN0YWdlIGVuZC1vZi1ibG9jaykgaW5kZXggKi8KKyAgZm9yIChrZXggPSBrZTsga2V4ID4gMDsga2V4LS0pCisgICAgaWYgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tleF1dKSA+PSAwKSB7CisgICAgICBpZiAodiA+Pj0gY2luZm8tPkFoKSBicmVhazsKKyAgICB9IGVsc2UgeworICAgICAgdiA9IC12OworICAgICAgaWYgKHYgPj49IGNpbmZvLT5BaCkgYnJlYWs7CisgICAgfQorCisgIC8qIEZpZ3VyZSBHLjEwOiBFbmNvZGVfQUNfQ29lZmZpY2llbnRzX1NBICovCisgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBrZTsgaysrKSB7CisgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CisgICAgaWYgKGsgPiBrZXgpCisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsgICAgICAgLyogRU9CIGRlY2lzaW9uICovCisgICAgZm9yICg7OykgeworICAgICAgaWYgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSkgPj0gMCkgeworICAgICAgICBpZiAodiA+Pj0gY2luZm8tPkFsKSB7CisgICAgICAgICAgaWYgKHYgPj4gMSkgICAgICAgICAgICAgICAgICAgLyogcHJldmlvdXNseSBub256ZXJvIGNvZWYgKi8KKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAyLCAodiAmIDEpKTsKKyAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXdseSBub256ZXJvIGNvZWYgKi8KKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsKKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgZW50cm9weS0+Zml4ZWRfYmluLCAwKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHYgPSAtdjsKKyAgICAgICAgaWYgKHYgPj49IGNpbmZvLT5BbCkgeworICAgICAgICAgIGlmICh2ID4+IDEpICAgICAgICAgICAgICAgICAgIC8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMiwgKHYgJiAxKSk7CisgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbmV3bHkgbm9uemVybyBjb2VmICovCisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7CisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMSk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMCk7ICBzdCArPSAzOyAgaysrOworICAgIH0KKyAgfQorICAvKiBFbmNvZGUgRU9CIGRlY2lzaW9uIG9ubHkgaWYgayA8PSBjaW5mby0+U2UgKi8KKyAgaWYgKGsgPD0gY2luZm8tPlNlKSB7CisgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CisgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRW5jb2RlIGFuZCBvdXRwdXQgb25lIE1DVSdzIHdvcnRoIG9mIGFyaXRobWV0aWMtY29tcHJlc3NlZCBjb2VmZmljaWVudHMuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKQkxPQ0tST1cgYmxvY2s7CisgIHVuc2lnbmVkIGNoYXIgKnN0OworICBpbnQgYmxrbiwgY2ksIHRibCwgaywga2U7CisgIGludCB2LCB2MiwgbTsKKworICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgeworICAgICAgZW1pdF9yZXN0YXJ0KGNpbmZvLCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKworICAgIC8qIFNlY3Rpb25zIEYuMS40LjEgJiBGLjEuNC40LjE6IEVuY29kaW5nIG9mIERDIGNvZWZmaWNpZW50cyAqLworCisgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworCisgICAgLyogVGFibGUgRi40OiBQb2ludCB0byBzdGF0aXN0aWNzIGJpbiBTMCBmb3IgREMgY29lZmZpY2llbnQgY29kaW5nICovCisgICAgc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgZW50cm9weS0+ZGNfY29udGV4dFtjaV07CisKKyAgICAvKiBGaWd1cmUgRi40OiBFbmNvZGVfRENfRElGRiAqLworICAgIGlmICgodiA9ICgqYmxvY2spWzBdIC0gZW50cm9weS0+bGFzdF9kY192YWxbY2ldKSA9PSAwKSB7CisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsKKyAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsgICAgICAvKiB6ZXJvIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICB9IGVsc2UgeworICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gKCpibG9jaylbMF07CisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgIC8qIEZpZ3VyZSBGLjY6IEVuY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLworICAgICAgLyogRmlndXJlIEYuNzogRW5jb2RpbmcgdGhlIHNpZ24gb2YgdiAqLworICAgICAgaWYgKHYgPiAwKSB7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAwKTsgLyogVGFibGUgRi40OiBTUyA9IFMwICsgMSAqLworICAgICAgICBzdCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRhYmxlIEYuNDogU1AgPSBTMCArIDIgKi8KKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSA0OyAgICAvKiBzbWFsbCBwb3NpdGl2ZSBkaWZmIGNhdGVnb3J5ICovCisgICAgICB9IGVsc2UgeworICAgICAgICB2ID0gLXY7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsgLyogVGFibGUgRi40OiBTUyA9IFMwICsgMSAqLworICAgICAgICBzdCArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRhYmxlIEYuNDogU04gPSBTMCArIDMgKi8KKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSA4OyAgICAvKiBzbWFsbCBuZWdhdGl2ZSBkaWZmIGNhdGVnb3J5ICovCisgICAgICB9CisgICAgICAvKiBGaWd1cmUgRi44OiBFbmNvZGluZyB0aGUgbWFnbml0dWRlIGNhdGVnb3J5IG9mIHYgKi8KKyAgICAgIG0gPSAwOworICAgICAgaWYgKHYgLT0gMSkgeworICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgICAgbSA9IDE7CisgICAgICAgIHYyID0gdjsKKyAgICAgICAgc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgMjA7IC8qIFRhYmxlIEYuNDogWDEgPSAyMCAqLworICAgICAgICB3aGlsZSAodjIgPj49IDEpIHsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgICAgICBtIDw8PSAxOworICAgICAgICAgIHN0ICs9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDApOworICAgICAgLyogU2VjdGlvbiBGLjEuNC40LjEuMjogRXN0YWJsaXNoIGRjX2NvbnRleHQgY29uZGl0aW9uaW5nIGNhdGVnb3J5ICovCisgICAgICBpZiAobSA8IChpbnQpKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfTFt0YmxdKSA+PiAxKSkKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOyAgICAvKiB6ZXJvIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIGVsc2UgaWYgKG0gPiAoaW50KSgoMUwgPDwgY2luZm8tPmFyaXRoX2RjX1VbdGJsXSkgPj4gMSkpCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldICs9IDg7ICAgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLworICAgICAgLyogRmlndXJlIEYuOTogRW5jb2RpbmcgdGhlIG1hZ25pdHVkZSBiaXQgcGF0dGVybiBvZiB2ICovCisgICAgICBzdCArPSAxNDsKKyAgICAgIHdoaWxlIChtID4+PSAxKQorICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAobSAmIHYpID8gMSA6IDApOworICAgIH0KKworICAgIC8qIFNlY3Rpb25zIEYuMS40LjIgJiBGLjEuNC40LjI6IEVuY29kaW5nIG9mIEFDIGNvZWZmaWNpZW50cyAqLworCisgICAgdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOworCisgICAgLyogRXN0YWJsaXNoIEVPQiAoZW5kLW9mLWJsb2NrKSBpbmRleCAqLworICAgIGZvciAoa2UgPSBEQ1RTSVpFMiAtIDE7IGtlID4gMDsga2UtLSkKKyAgICAgIGlmICgoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba2VdXSkgYnJlYWs7CisKKyAgICAvKiBGaWd1cmUgRi41OiBFbmNvZGVfQUNfQ29lZmZpY2llbnRzICovCisgICAgZm9yIChrID0gMTsgayA8PSBrZTsgaysrKSB7CisgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKyAzICogKGsgLSAxKTsKKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDApOyAgICAgICAvKiBFT0IgZGVjaXNpb24gKi8KKyAgICAgIHdoaWxlICgodiA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0pID09IDApIHsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCArIDEsIDApOyAgc3QgKz0gMzsgIGsrKzsKKyAgICAgIH0KKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsKKyAgICAgIC8qIEZpZ3VyZSBGLjY6IEVuY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLworICAgICAgLyogRmlndXJlIEYuNzogRW5jb2RpbmcgdGhlIHNpZ24gb2YgdiAqLworICAgICAgaWYgKHYgPiAwKSB7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgZW50cm9weS0+Zml4ZWRfYmluLCAwKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHYgPSAtdjsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4sIDEpOworICAgICAgfQorICAgICAgc3QgKz0gMjsKKyAgICAgIC8qIEZpZ3VyZSBGLjg6IEVuY29kaW5nIHRoZSBtYWduaXR1ZGUgY2F0ZWdvcnkgb2YgdiAqLworICAgICAgbSA9IDA7CisgICAgICBpZiAodiAtPSAxKSB7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgICBtID0gMTsKKyAgICAgICAgdjIgPSB2OworICAgICAgICBpZiAodjIgPj49IDEpIHsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgICAgICBtIDw8PSAxOworICAgICAgICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArCisgICAgICAgICAgICAgICAoayA8PSBjaW5mby0+YXJpdGhfYWNfS1t0YmxdID8gMTg5IDogMjE3KTsKKyAgICAgICAgICB3aGlsZSAodjIgPj49IDEpIHsKKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgICAgIHN0ICs9IDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsKKyAgICAgIC8qIEZpZ3VyZSBGLjk6IEVuY29kaW5nIHRoZSBtYWduaXR1ZGUgYml0IHBhdHRlcm4gb2YgdiAqLworICAgICAgc3QgKz0gMTQ7CisgICAgICB3aGlsZSAobSA+Pj0gMSkKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgKG0gJiB2KSA/IDEgOiAwKTsKKyAgICB9CisgICAgLyogRW5jb2RlIEVPQiBkZWNpc2lvbiBvbmx5IGlmIGsgPD0gRENUU0laRTIgLSAxICovCisgICAgaWYgKGsgPD0gRENUU0laRTIgLSAxKSB7CisgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKyAzICogKGsgLSAxKTsKKyAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgIH0KKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiBhcml0aG1ldGljLWNvbXByZXNzZWQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3Moal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpCit7CisgIGFyaXRoX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoYXJpdGhfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCBjaSwgdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGlmIChnYXRoZXJfc3RhdGlzdGljcykKKyAgICAvKiBNYWtlIHN1cmUgdG8gYXZvaWQgdGhhdCBpbiB0aGUgbWFzdGVyIGNvbnRyb2wgbG9naWMhCisgICAgICogV2UgYXJlIGZ1bGx5IGFkYXB0aXZlIGhlcmUgYW5kIG5lZWQgbm8gZXh0cmEKKyAgICAgKiBzdGF0aXN0aWNzIGdhdGhlcmluZyBwYXNzIQorICAgICAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKworICAvKiBXZSBhc3N1bWUgamNtYXN0ZXIuYyBhbHJlYWR5IHZhbGlkYXRlZCB0aGUgcHJvZ3Jlc3NpdmUgc2NhbiBwYXJhbWV0ZXJzLiAqLworCisgIC8qIFNlbGVjdCBleGVjdXRpb24gcm91dGluZXMgKi8KKyAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisgICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7CisgICAgICBpZiAoY2luZm8tPlNzID09IDApCisgICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19maXJzdDsKKyAgICAgIGVsc2UKKyAgICAgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0FDX2ZpcnN0OworICAgIH0gZWxzZSB7CisgICAgICBpZiAoY2luZm8tPlNzID09IDApCisgICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19yZWZpbmU7CisgICAgICBlbHNlCisgICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9BQ19yZWZpbmU7CisgICAgfQorICB9IGVsc2UKKyAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3U7CisKKyAgLyogQWxsb2NhdGUgJiBpbml0aWFsaXplIHJlcXVlc3RlZCBzdGF0aXN0aWNzIGFyZWFzICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovCisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID09IDAgfHwgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKSkgeworICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgICAgaWYgKHRibCA8IDAgfHwgdGJsID49IE5VTV9BUklUSF9UQkxTKQorICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19BUklUSF9UQUJMRSwgdGJsKTsKKyAgICAgIGlmIChlbnRyb3B5LT5kY19zdGF0c1t0YmxdID09IE5VTEwpCisgICAgICAgIGVudHJvcHktPmRjX3N0YXRzW3RibF0gPSAodW5zaWduZWQgY2hhciAqKSgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisgICAgICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBEQ19TVEFUX0JJTlMpOworICAgICAgTUVNWkVSTyhlbnRyb3B5LT5kY19zdGF0c1t0YmxdLCBEQ19TVEFUX0JJTlMpOworICAgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOworICAgIH0KKyAgICAvKiBBQyBuZWVkcyBubyB0YWJsZSB3aGVuIG5vdCBwcmVzZW50ICovCisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID09IDAgfHwgY2luZm8tPlNlKSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgICBpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0FSSVRIX1RCTFMpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0FSSVRIX1RBQkxFLCB0YmwpOworICAgICAgaWYgKGVudHJvcHktPmFjX3N0YXRzW3RibF0gPT0gTlVMTCkKKyAgICAgICAgZW50cm9weS0+YWNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIEFDX1NUQVRfQklOUyk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmFjX3N0YXRzW3RibF0sIEFDX1NUQVRfQklOUyk7CisjaWZkZWYgQ0FMQ1VMQVRFX1NQRUNUUkFMX0NPTkRJVElPTklORworICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQorICAgICAgICAvKiBTZWN0aW9uIEcuMS4zLjI6IFNldCBhcHByb3ByaWF0ZSBhcml0aG1ldGljIGNvbmRpdGlvbmluZyB2YWx1ZSBLeCAqLworICAgICAgICBjaW5mby0+YXJpdGhfYWNfS1t0YmxdID0gY2luZm8tPlNzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoOCArIGNpbmZvLT5TZSAtIGNpbmZvLT5TcykgPj4gNCk7CisjZW5kaWYKKyAgICB9CisgIH0KKworICAvKiBJbml0aWFsaXplIGFyaXRobWV0aWMgZW5jb2RpbmcgdmFyaWFibGVzICovCisgIGVudHJvcHktPmMgPSAwOworICBlbnRyb3B5LT5hID0gMHgxMDAwMEw7CisgIGVudHJvcHktPnNjID0gMDsKKyAgZW50cm9weS0+emMgPSAwOworICBlbnRyb3B5LT5jdCA9IDExOworICBlbnRyb3B5LT5idWZmZXIgPSAtMTsgIC8qIGVtcHR5ICovCisKKyAgLyogSW5pdGlhbGl6ZSByZXN0YXJ0IHN0dWZmICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gPSAwOworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYXJpdGhtZXRpYyBlbnRyb3B5IGVuY29kaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfYXJpdGhfZW5jb2RlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgYXJpdGhfZW50cm9weV9wdHIgZW50cm9weTsKKyAgaW50IGk7CisKKyAgZW50cm9weSA9IChhcml0aF9lbnRyb3B5X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhcml0aF9lbnRyb3B5X2VuY29kZXIpKTsKKyAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICopZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzOworICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzczsKKworICAvKiBNYXJrIHRhYmxlcyB1bmFsbG9jYXRlZCAqLworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgeworICAgIGVudHJvcHktPmRjX3N0YXRzW2ldID0gTlVMTDsKKyAgICBlbnRyb3B5LT5hY19zdGF0c1tpXSA9IE5VTEw7CisgIH0KKworICAvKiBJbml0aWFsaXplIGluZGV4IGZvciBmaXhlZCBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uICovCisgIGVudHJvcHktPmZpeGVkX2JpblswXSA9IDExMzsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjY29lZmN0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2NvZWZjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODIzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2NvZWZjdC5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogamNjb2VmY3QuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgYW5kCisgKiBpbmZvcm1hdGlvbiByZWxldmFudCB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2VmZmljaWVudCBidWZmZXIgY29udHJvbGxlciBmb3IgY29tcHJlc3Npb24uCisgKiBUaGlzIGNvbnRyb2xsZXIgaXMgdGhlIHRvcCBsZXZlbCBvZiB0aGUgSlBFRyBjb21wcmVzc29yIHByb3Blci4KKyAqIFRoZSBjb2VmZmljaWVudCBidWZmZXIgbGllcyBiZXR3ZWVuIGZvcndhcmQtRENUIGFuZCBlbnRyb3B5IGVuY29kaW5nIHN0ZXBzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBXZSB1c2UgYSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGJ1ZmZlciB3aGVuIGRvaW5nIEh1ZmZtYW4gb3B0aW1pemF0aW9uLAorICogYW5kIGFsc28gZm9yIHdyaXRpbmcgbXVsdGlwbGUtc2NhbiBKUEVHIGZpbGVzLiAgSW4gYWxsIGNhc2VzLCB0aGUgRENUCisgKiBzdGVwIGlzIHJ1biBkdXJpbmcgdGhlIGZpcnN0IHBhc3MsIGFuZCBzdWJzZXF1ZW50IHBhc3NlcyBuZWVkIG9ubHkgcmVhZAorICogdGhlIGJ1ZmZlcmVkIGNvZWZmaWNpZW50cy4KKyAqLworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorI2RlZmluZSBGVUxMX0NPRUZfQlVGRkVSX1NVUFBPUlRFRAorI2Vsc2UKKyNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyNkZWZpbmUgRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQKKyNlbmRpZgorI2VuZGlmCisKKworLyogUHJpdmF0ZSBidWZmZXIgY29udHJvbGxlciBvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBKRElNRU5TSU9OIGlNQ1Vfcm93X251bTsgICAgICAvKiBpTUNVIHJvdyAjIHdpdGhpbiBpbWFnZSAqLworICBKRElNRU5TSU9OIG1jdV9jdHI7ICAgICAgICAgICAvKiBjb3VudHMgTUNVcyBwcm9jZXNzZWQgaW4gY3VycmVudCByb3cgKi8KKyAgaW50IE1DVV92ZXJ0X29mZnNldDsgICAgICAgICAgLyogY291bnRzIE1DVSByb3dzIHdpdGhpbiBpTUNVIHJvdyAqLworICBpbnQgTUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OyAgICAvKiBudW1iZXIgb2Ygc3VjaCByb3dzIG5lZWRlZCAqLworCisgIC8qIEZvciBzaW5nbGUtcGFzcyBjb21wcmVzc2lvbiwgaXQncyBzdWZmaWNpZW50IHRvIGJ1ZmZlciBqdXN0IG9uZSBNQ1UKKyAgICogKGFsdGhvdWdoIHRoaXMgbWF5IHByb3ZlIGEgYml0IHNsb3cgaW4gcHJhY3RpY2UpLiAgV2UgYWxsb2NhdGUgYQorICAgKiB3b3Jrc3BhY2Ugb2YgQ19NQVhfQkxPQ0tTX0lOX01DVSBjb2VmZmljaWVudCBibG9ja3MsIGFuZCByZXVzZSBpdCBmb3IgZWFjaAorICAgKiBNQ1UgY29uc3RydWN0ZWQgYW5kIHNlbnQuICBJbiBtdWx0aS1wYXNzIG1vZGVzLCB0aGlzIGFycmF5IHBvaW50cyB0byB0aGUKKyAgICogY3VycmVudCBNQ1UncyBibG9ja3Mgd2l0aGluIHRoZSB2aXJ0dWFsIGFycmF5cy4KKyAgICovCisgIEpCTE9DS1JPVyBNQ1VfYnVmZmVyW0NfTUFYX0JMT0NLU19JTl9NQ1VdOworCisgIC8qIEluIG11bHRpLXBhc3MgbW9kZXMsIHdlIG5lZWQgYSB2aXJ0dWFsIGJsb2NrIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudC4gKi8KKyAganZpcnRfYmFycmF5X3B0ciB3aG9sZV9pbWFnZVtNQVhfQ09NUE9ORU5UU107Cit9IG15X2NvZWZfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9jb2VmX2NvbnRyb2xsZXIgKm15X2NvZWZfcHRyOworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYoYm9vbGVhbikgY29tcHJlc3NfZGF0YShqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpOworI2lmZGVmIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVECitNRVRIT0RERUYoYm9vbGVhbikgY29tcHJlc3NfZmlyc3RfcGFzcyhqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmKTsKK01FVEhPRERFRihib29sZWFuKSBjb21wcmVzc19vdXRwdXQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKTsKKyNlbmRpZgorCisKK0xPQ0FMKHZvaWQpCitzdGFydF9pTUNVX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIFJlc2V0IHdpdGhpbi1pTUNVLXJvdyBjb3VudGVycyBmb3IgYSBuZXcgcm93ICovCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisKKyAgLyogSW4gYW4gaW50ZXJsZWF2ZWQgc2NhbiwgYW4gTUNVIHJvdyBpcyB0aGUgc2FtZSBhcyBhbiBpTUNVIHJvdy4KKyAgICogSW4gYSBub25pbnRlcmxlYXZlZCBzY2FuLCBhbiBpTUNVIHJvdyBoYXMgdl9zYW1wX2ZhY3RvciBNQ1Ugcm93cy4KKyAgICogQnV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLCBwcm9jZXNzIG9ubHkgd2hhdCdzIGxlZnQuCisgICAqLworICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPiAxKSB7CisgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgKGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxKSkKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT52X3NhbXBfZmFjdG9yOworICAgIGVsc2UKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5sYXN0X3Jvd19oZWlnaHQ7CisgIH0KKworICBjb2VmLT5tY3VfY3RyID0gMDsKKyAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0gMDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2NvZWYoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKWNpbmZvLT5jb2VmOworCisgIGNvZWYtPmlNQ1Vfcm93X251bSA9IDA7CisgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsKKworICBzd2l0Y2ggKHBhc3NfbW9kZSkgeworICBjYXNlIEpCVUZfUEFTU19USFJVOgorICAgIGlmIChjb2VmLT53aG9sZV9pbWFnZVswXSAhPSBOVUxMKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIGNvZWYtPnB1Yi5jb21wcmVzc19kYXRhID0gY29tcHJlc3NfZGF0YTsKKyAgICBicmVhazsKKyNpZmRlZiBGVUxMX0NPRUZfQlVGRkVSX1NVUFBPUlRFRAorICBjYXNlIEpCVUZfU0FWRV9BTkRfUEFTUzoKKyAgICBpZiAoY29lZi0+d2hvbGVfaW1hZ2VbMF0gPT0gTlVMTCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKKyAgICBjb2VmLT5wdWIuY29tcHJlc3NfZGF0YSA9IGNvbXByZXNzX2ZpcnN0X3Bhc3M7CisgICAgYnJlYWs7CisgIGNhc2UgSkJVRl9DUkFOS19ERVNUOgorICAgIGlmIChjb2VmLT53aG9sZV9pbWFnZVswXSA9PSBOVUxMKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIGNvZWYtPnB1Yi5jb21wcmVzc19kYXRhID0gY29tcHJlc3Nfb3V0cHV0OworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBzaW5nbGUtcGFzcyBjYXNlLgorICogV2UgcHJvY2VzcyB0aGUgZXF1aXZhbGVudCBvZiBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykKKyAqIHBlciBjYWxsLCBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgaW1hZ2UuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGlNQ1Ugcm93IGlzIGNvbXBsZXRlZCwgRkFMU0UgaWYgc3VzcGVuZGVkLgorICoKKyAqIE5COiBpbnB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UsCisgKiB3aGljaCB3ZSBpbmRleCBhY2NvcmRpbmcgdG8gdGhlIGNvbXBvbmVudCdzIFNPRiBwb3NpdGlvbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2NvbXByZXNzX2RhdGEoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKWNpbmZvLT5jb2VmOworICBKRElNRU5TSU9OIE1DVV9jb2xfbnVtOyAgICAgICAvKiBpbmRleCBvZiBjdXJyZW50IE1DVSB3aXRoaW4gcm93ICovCisgIEpESU1FTlNJT04gbGFzdF9NQ1VfY29sID0gY2luZm8tPk1DVXNfcGVyX3JvdyAtIDE7CisgIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOworICBpbnQgYmxrbiwgYmksIGNpLCB5aW5kZXgsIHlvZmZzZXQsIGJsb2NrY250OworICBKRElNRU5TSU9OIHlwb3MsIHhwb3M7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogTG9vcCB0byB3cml0ZSBhcyBtdWNoIGFzIG9uZSB3aG9sZSBpTUNVIHJvdyAqLworICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CisgICAgICAgeW9mZnNldCsrKSB7CisgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPm1jdV9jdHI7IE1DVV9jb2xfbnVtIDw9IGxhc3RfTUNVX2NvbDsKKyAgICAgICAgIE1DVV9jb2xfbnVtKyspIHsKKyAgICAgIC8qIERldGVybWluZSB3aGVyZSBkYXRhIGNvbWVzIGZyb20gaW4gaW5wdXRfYnVmIGFuZCBkbyB0aGUgRENUIHRoaW5nLgorICAgICAgICogRWFjaCBjYWxsIG9uIGZvcndhcmRfRENUIHByb2Nlc3NlcyBhIGhvcml6b250YWwgcm93IG9mIERDVCBibG9ja3MKKyAgICAgICAqIGFzIHdpZGUgYXMgYW4gTUNVOyB3ZSByZWx5IG9uIGhhdmluZyBhbGxvY2F0ZWQgdGhlIE1DVV9idWZmZXJbXSBibG9ja3MKKyAgICAgICAqIHNlcXVlbnRpYWxseS4gIER1bW15IGJsb2NrcyBhdCB0aGUgcmlnaHQgb3IgYm90dG9tIGVkZ2UgYXJlIGZpbGxlZCBpbgorICAgICAgICogc3BlY2lhbGx5LiAgVGhlIGRhdGEgaW4gdGhlbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIGltYWdlIHJlY29uc3RydWN0aW9uLAorICAgICAgICogc28gd2UgZmlsbCB0aGVtIHdpdGggdmFsdWVzIHRoYXQgd2lsbCBlbmNvZGUgdG8gdGhlIHNtYWxsZXN0IGFtb3VudCBvZgorICAgICAgICogZGF0YSwgdml6OiBhbGwgemVyb2VzIGluIHRoZSBBQyBlbnRyaWVzLCBEQyBlbnRyaWVzIGVxdWFsIHRvIHByZXZpb3VzCisgICAgICAgKiBibG9jaydzIERDIHZhbHVlLiAgKFRoYW5rcyB0byBUaG9tYXMgS2luc21hbiBmb3IgdGhpcyBpZGVhLikKKyAgICAgICAqLworICAgICAgYmxrbiA9IDA7CisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgICBibG9ja2NudCA9IChNQ1VfY29sX251bSA8IGxhc3RfTUNVX2NvbCkgPyBjb21wcHRyLT5NQ1Vfd2lkdGggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aDsKKyAgICAgICAgeHBvcyA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aDsKKyAgICAgICAgeXBvcyA9IHlvZmZzZXQgKiBEQ1RTSVpFOyAvKiB5cG9zID09ICh5b2Zmc2V0K3lpbmRleCkgKiBEQ1RTSVpFICovCisgICAgICAgIGZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsKKyAgICAgICAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgbGFzdF9pTUNVX3JvdyB8fAorICAgICAgICAgICAgICB5b2Zmc2V0ICsgeWluZGV4IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7CisgICAgICAgICAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXBvcywgeHBvcywgKEpESU1FTlNJT04pYmxvY2tjbnQpOworICAgICAgICAgICAgaWYgKGJsb2NrY250IDwgY29tcHB0ci0+TUNVX3dpZHRoKSB7CisgICAgICAgICAgICAgIC8qIENyZWF0ZSBzb21lIGR1bW15IGJsb2NrcyBhdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgaW1hZ2UuICovCisgICAgICAgICAgICAgIGp6ZXJvX2Zhcigodm9pZCAqKWNvZWYtPk1DVV9idWZmZXJbYmxrbiArIGJsb2NrY250XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb21wcHRyLT5NQ1Vfd2lkdGggLSBibG9ja2NudCkgKiBzaXplb2YoSkJMT0NLKSk7CisgICAgICAgICAgICAgIGZvciAoYmkgPSBibG9ja2NudDsgYmkgPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IGJpKyspIHsKKyAgICAgICAgICAgICAgICBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24gKyBiaV1bMF1bMF0gPQorICAgICAgICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuICsgYmkgLSAxXVswXVswXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBDcmVhdGUgYSByb3cgb2YgZHVtbXkgYmxvY2tzIGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLiAqLworICAgICAgICAgICAganplcm9fZmFyKCh2b2lkICopY29lZi0+TUNVX2J1ZmZlcltibGtuXSwKKyAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5NQ1Vfd2lkdGggKiBzaXplb2YoSkJMT0NLKSk7CisgICAgICAgICAgICBmb3IgKGJpID0gMDsgYmkgPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IGJpKyspIHsKKyAgICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuICsgYmldWzBdWzBdID0KKyAgICAgICAgICAgICAgICBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24gLSAxXVswXVswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYmxrbiArPSBjb21wcHRyLT5NQ1Vfd2lkdGg7CisgICAgICAgICAgeXBvcyArPSBEQ1RTSVpFOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBUcnkgdG8gd3JpdGUgdGhlIE1DVS4gIEluIGV2ZW50IG9mIGEgc3VzcGVuc2lvbiBmYWlsdXJlLCB3ZSB3aWxsCisgICAgICAgKiByZS1EQ1QgdGhlIE1DVSBvbiByZXN0YXJ0IChhIGJpdCBpbmVmZmljaWVudCwgY291bGQgYmUgZml4ZWQuLi4pCisgICAgICAgKi8KKyAgICAgIGlmICghKCpjaW5mby0+ZW50cm9weS0+ZW5jb2RlX21jdSkgKGNpbmZvLCBjb2VmLT5NQ1VfYnVmZmVyKSkgeworICAgICAgICAvKiBTdXNwZW5zaW9uIGZvcmNlZDsgdXBkYXRlIHN0YXRlIGNvdW50ZXJzIGFuZCBleGl0ICovCisgICAgICAgIGNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IHlvZmZzZXQ7CisgICAgICAgIGNvZWYtPm1jdV9jdHIgPSBNQ1VfY29sX251bTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0KKyAgICAvKiBDb21wbGV0ZWQgYW4gTUNVIHJvdywgYnV0IHBlcmhhcHMgbm90IGFuIGlNQ1Ugcm93ICovCisgICAgY29lZi0+bWN1X2N0ciA9IDA7CisgIH0KKyAgLyogQ29tcGxldGVkIHRoZSBpTUNVIHJvdywgYWR2YW5jZSBjb3VudGVycyBmb3IgbmV4dCBvbmUgKi8KKyAgY29lZi0+aU1DVV9yb3dfbnVtKys7CisgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworI2lmZGVmIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVECisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgZmlyc3QgcGFzcyBvZiBhIG11bHRpLXBhc3MgY2FzZS4KKyAqIFdlIHByb2Nlc3MgdGhlIGVxdWl2YWxlbnQgb2Ygb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpCisgKiBwZXIgY2FsbCwgaWUsIHZfc2FtcF9mYWN0b3IgYmxvY2sgcm93cyBmb3IgZWFjaCBjb21wb25lbnQgaW4gdGhlIGltYWdlLgorICogVGhpcyBhbW91bnQgb2YgZGF0YSBpcyByZWFkIGZyb20gdGhlIHNvdXJjZSBidWZmZXIsIERDVCdkIGFuZCBxdWFudGl6ZWQsCisgKiBhbmQgc2F2ZWQgaW50byB0aGUgdmlydHVhbCBhcnJheXMuICBXZSBhbHNvIGdlbmVyYXRlIHN1aXRhYmxlIGR1bW15IGJsb2NrcworICogYXMgbmVlZGVkIGF0IHRoZSByaWdodCBhbmQgbG93ZXIgZWRnZXMuICAoVGhlIGR1bW15IGJsb2NrcyBhcmUgY29uc3RydWN0ZWQKKyAqIGluIHRoZSB2aXJ0dWFsIGFycmF5cywgd2hpY2ggaGF2ZSBiZWVuIHBhZGRlZCBhcHByb3ByaWF0ZWx5LikgIFRoaXMgbWFrZXMKKyAqIGl0IHBvc3NpYmxlIGZvciBzdWJzZXF1ZW50IHBhc3NlcyBub3QgdG8gd29ycnkgYWJvdXQgcmVhbCB2cy4gZHVtbXkgYmxvY2tzLgorICoKKyAqIFdlIG11c3QgYWxzbyBlbWl0IHRoZSBkYXRhIHRvIHRoZSBlbnRyb3B5IGVuY29kZXIuICBUaGlzIGlzIGNvbnZlbmllbnRseQorICogZG9uZSBieSBjYWxsaW5nIGNvbXByZXNzX291dHB1dCgpIGFmdGVyIHdlJ3ZlIGxvYWRlZCB0aGUgY3VycmVudCBzdHJpcAorICogb2YgdGhlIHZpcnR1YWwgYXJyYXlzLgorICoKKyAqIE5COiBpbnB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UuICBBbGwKKyAqIGNvbXBvbmVudHMgYXJlIERDVCdkIGFuZCBsb2FkZWQgaW50byB0aGUgdmlydHVhbCBhcnJheXMgaW4gdGhpcyBwYXNzLgorICogSG93ZXZlciwgaXQgbWF5IGJlIHRoYXQgb25seSBhIHN1YnNldCBvZiB0aGUgY29tcG9uZW50cyBhcmUgZW1pdHRlZCB0bworICogdGhlIGVudHJvcHkgZW5jb2RlciBkdXJpbmcgdGhpcyBmaXJzdCBwYXNzOyBiZSBjYXJlZnVsIGFib3V0IGxvb2tpbmcKKyAqIGF0IHRoZSBzY2FuLWRlcGVuZGVudCB2YXJpYWJsZXMgKE1DVSBkaW1lbnNpb25zLCBldGMpLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorY29tcHJlc3NfZmlyc3RfcGFzcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisgIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOworICBKRElNRU5TSU9OIGJsb2Nrc19hY3Jvc3MsIE1DVXNfYWNyb3NzLCBNQ1VpbmRleDsKKyAgaW50IGJpLCBjaSwgaF9zYW1wX2ZhY3RvciwgYmxvY2tfcm93LCBibG9ja19yb3dzLCBuZHVtbXk7CisgIEpDT0VGIGxhc3REQzsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyOworICBKQkxPQ0tST1cgdGhpc2Jsb2Nrcm93LCBsYXN0YmxvY2tyb3c7CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAvKiBBbGlnbiB0aGUgdmlydHVhbCBidWZmZXIgZm9yIHRoaXMgY29tcG9uZW50LiAqLworICAgIGJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NpXSwKKyAgICAgICBjb2VmLT5pTUNVX3Jvd19udW0gKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLworICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPCBsYXN0X2lNQ1Vfcm93KQorICAgICAgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZWxzZSB7CisgICAgICAvKiBOQjogY2FuJ3QgdXNlIGxhc3Rfcm93X2hlaWdodCBoZXJlLCBzaW5jZSBtYXkgbm90IGJlIHNldCEgKi8KKyAgICAgIGJsb2NrX3Jvd3MgPSAoaW50KShjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICUgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgICAgICBpZiAoYmxvY2tfcm93cyA9PSAwKSBibG9ja19yb3dzID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICB9CisgICAgYmxvY2tzX2Fjcm9zcyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKKyAgICBoX3NhbXBfZmFjdG9yID0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICAvKiBDb3VudCBudW1iZXIgb2YgZHVtbXkgYmxvY2tzIHRvIGJlIGFkZGVkIGF0IHRoZSByaWdodCBtYXJnaW4uICovCisgICAgbmR1bW15ID0gKGludCkoYmxvY2tzX2Fjcm9zcyAlIGhfc2FtcF9mYWN0b3IpOworICAgIGlmIChuZHVtbXkgPiAwKQorICAgICAgbmR1bW15ID0gaF9zYW1wX2ZhY3RvciAtIG5kdW1teTsKKyAgICAvKiBQZXJmb3JtIERDVCBmb3IgYWxsIG5vbi1kdW1teSBibG9ja3MgaW4gdGhpcyBpTUNVIHJvdy4gIEVhY2ggY2FsbAorICAgICAqIG9uIGZvcndhcmRfRENUIHByb2Nlc3NlcyBhIGNvbXBsZXRlIGhvcml6b250YWwgcm93IG9mIERDVCBibG9ja3MuCisgICAgICovCisgICAgZm9yIChibG9ja19yb3cgPSAwOyBibG9ja19yb3cgPCBibG9ja19yb3dzOyBibG9ja19yb3crKykgeworICAgICAgdGhpc2Jsb2Nrcm93ID0gYnVmZmVyW2Jsb2NrX3Jvd107CisgICAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWZbY2ldLCB0aGlzYmxvY2tyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKShibG9ja19yb3cgKiBEQ1RTSVpFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pMCwgYmxvY2tzX2Fjcm9zcyk7CisgICAgICBpZiAobmR1bW15ID4gMCkgeworICAgICAgICAvKiBDcmVhdGUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8KKyAgICAgICAgdGhpc2Jsb2Nrcm93ICs9IGJsb2Nrc19hY3Jvc3M7IC8qID0+IGZpcnN0IGR1bW15IGJsb2NrICovCisgICAgICAgIGp6ZXJvX2Zhcigodm9pZCAqKXRoaXNibG9ja3JvdywgbmR1bW15ICogc2l6ZW9mKEpCTE9DSykpOworICAgICAgICBsYXN0REMgPSB0aGlzYmxvY2tyb3dbLTFdWzBdOworICAgICAgICBmb3IgKGJpID0gMDsgYmkgPCBuZHVtbXk7IGJpKyspIHsKKyAgICAgICAgICB0aGlzYmxvY2tyb3dbYmldWzBdID0gbGFzdERDOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIC8qIElmIGF0IGVuZCBvZiBpbWFnZSwgY3JlYXRlIGR1bW15IGJsb2NrIHJvd3MgYXMgbmVlZGVkLgorICAgICAqIFRoZSB0cmlja3kgcGFydCBoZXJlIGlzIHRoYXQgd2l0aGluIGVhY2ggTUNVLCB3ZSB3YW50IHRoZSBEQyB2YWx1ZXMKKyAgICAgKiBvZiB0aGUgZHVtbXkgYmxvY2tzIHRvIG1hdGNoIHRoZSBsYXN0IHJlYWwgYmxvY2sncyBEQyB2YWx1ZS4KKyAgICAgKiBUaGlzIHNxdWVlemVzIGEgZmV3IG1vcmUgYnl0ZXMgb3V0IG9mIHRoZSByZXN1bHRpbmcgZmlsZS4uLgorICAgICAqLworICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPT0gbGFzdF9pTUNVX3JvdykgeworICAgICAgYmxvY2tzX2Fjcm9zcyArPSBuZHVtbXk7ICAvKiBpbmNsdWRlIGxvd2VyIHJpZ2h0IGNvcm5lciAqLworICAgICAgTUNVc19hY3Jvc3MgPSBibG9ja3NfYWNyb3NzIC8gaF9zYW1wX2ZhY3RvcjsKKyAgICAgIGZvciAoYmxvY2tfcm93ID0gYmxvY2tfcm93czsgYmxvY2tfcm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICAgICAgICAgYmxvY2tfcm93KyspIHsKKyAgICAgICAgdGhpc2Jsb2Nrcm93ID0gYnVmZmVyW2Jsb2NrX3Jvd107CisgICAgICAgIGxhc3RibG9ja3JvdyA9IGJ1ZmZlcltibG9ja19yb3cgLSAxXTsKKyAgICAgICAganplcm9fZmFyKCh2b2lkICopdGhpc2Jsb2Nrcm93LAorICAgICAgICAgICAgICAgICAgKHNpemVfdCkoYmxvY2tzX2Fjcm9zcyAqIHNpemVvZihKQkxPQ0spKSk7CisgICAgICAgIGZvciAoTUNVaW5kZXggPSAwOyBNQ1VpbmRleCA8IE1DVXNfYWNyb3NzOyBNQ1VpbmRleCsrKSB7CisgICAgICAgICAgbGFzdERDID0gbGFzdGJsb2Nrcm93W2hfc2FtcF9mYWN0b3IgLSAxXVswXTsKKyAgICAgICAgICBmb3IgKGJpID0gMDsgYmkgPCBoX3NhbXBfZmFjdG9yOyBiaSsrKSB7CisgICAgICAgICAgICB0aGlzYmxvY2tyb3dbYmldWzBdID0gbGFzdERDOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzYmxvY2tyb3cgKz0gaF9zYW1wX2ZhY3RvcjsgLyogYWR2YW5jZSB0byBuZXh0IE1DVSBpbiByb3cgKi8KKyAgICAgICAgICBsYXN0YmxvY2tyb3cgKz0gaF9zYW1wX2ZhY3RvcjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICAvKiBOQjogY29tcHJlc3Nfb3V0cHV0IHdpbGwgaW5jcmVtZW50IGlNQ1Vfcm93X251bSBpZiBzdWNjZXNzZnVsLgorICAgKiBBIHN1c3BlbnNpb24gcmV0dXJuIHdpbGwgcmVzdWx0IGluIHJlZG9pbmcgYWxsIHRoZSB3b3JrIGFib3ZlIG5leHQgdGltZS4KKyAgICovCisKKyAgLyogRW1pdCBkYXRhIHRvIHRoZSBlbnRyb3B5IGVuY29kZXIsIHNoYXJpbmcgY29kZSB3aXRoIHN1YnNlcXVlbnQgcGFzc2VzICovCisgIHJldHVybiBjb21wcmVzc19vdXRwdXQoY2luZm8sIGlucHV0X2J1Zik7Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHN1YnNlcXVlbnQgcGFzc2VzIG9mIGEgbXVsdGktcGFzcyBjYXNlLgorICogV2UgcHJvY2VzcyB0aGUgZXF1aXZhbGVudCBvZiBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykKKyAqIHBlciBjYWxsLCBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgc2Nhbi4KKyAqIFRoZSBkYXRhIGlzIG9idGFpbmVkIGZyb20gdGhlIHZpcnR1YWwgYXJyYXlzIGFuZCBmZWQgdG8gdGhlIGVudHJvcHkgY29kZXIuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGlNQ1Ugcm93IGlzIGNvbXBsZXRlZCwgRkFMU0UgaWYgc3VzcGVuZGVkLgorICoKKyAqIE5COiBpbnB1dF9idWYgaXMgaWdub3JlZDsgaXQgaXMgbGlrZWx5IHRvIGJlIGEgTlVMTCBwb2ludGVyLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorY29tcHJlc3Nfb3V0cHV0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikKK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0ciljaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0OworICBKRElNRU5TSU9OIHN0YXJ0X2NvbDsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsKKyAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uCisgICAqIE5COiBkdXJpbmcgZmlyc3QgcGFzcywgdGhpcyBpcyBzYWZlIG9ubHkgYmVjYXVzZSB0aGUgYnVmZmVycyB3aWxsCisgICAqIGFscmVhZHkgYmUgYWxpZ25lZCBwcm9wZXJseSwgc28gam1lbW1nci5jIHdvbid0IG5lZWQgdG8gZG8gYW55IEkvTy4KKyAgICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBidWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwKKyAgICAgICBjb2VmLT5pTUNVX3Jvd19udW0gKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgfQorCisgIC8qIExvb3AgdG8gcHJvY2VzcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8KKyAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OworICAgICAgIHlvZmZzZXQrKykgeworICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5tY3VfY3RyOyBNQ1VfY29sX251bSA8IGNpbmZvLT5NQ1VzX3Blcl9yb3c7CisgICAgICAgICBNQ1VfY29sX251bSsrKSB7CisgICAgICAvKiBDb25zdHJ1Y3QgbGlzdCBvZiBwb2ludGVycyB0byBEQ1QgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGlzIE1DVSAqLworICAgICAgYmxrbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgICBzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKyAgICAgICAgZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworICAgICAgICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCArIHlvZmZzZXRdICsgc3RhcnRfY29sOworICAgICAgICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgeworICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogVHJ5IHRvIHdyaXRlIHRoZSBNQ1UuICovCisgICAgICBpZiAoISgqY2luZm8tPmVudHJvcHktPmVuY29kZV9tY3UpIChjaW5mbywgY29lZi0+TUNVX2J1ZmZlcikpIHsKKyAgICAgICAgLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLworICAgICAgICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworICAgICAgICBjb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLworICAgIGNvZWYtPm1jdV9jdHIgPSAwOworICB9CisgIC8qIENvbXBsZXRlZCB0aGUgaU1DVSByb3csIGFkdmFuY2UgY291bnRlcnMgZm9yIG5leHQgb25lICovCisgIGNvZWYtPmlNQ1Vfcm93X251bSsrOworICBzdGFydF9pTUNVX3JvdyhjaW5mbyk7CisgIHJldHVybiBUUlVFOworfQorCisjZW5kaWYgLyogRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQgKi8KKworCisvKgorICogSW5pdGlhbGl6ZSBjb2VmZmljaWVudCBidWZmZXIgY29udHJvbGxlci4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2NfY29lZl9jb250cm9sbGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpCit7CisgIG15X2NvZWZfcHRyIGNvZWY7CisKKyAgY29lZiA9IChteV9jb2VmX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9jb2VmX2NvbnRyb2xsZXIpKTsKKyAgY2luZm8tPmNvZWYgPSAoc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgKiljb2VmOworICBjb2VmLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfY29lZjsKKworICAvKiBDcmVhdGUgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gKi8KKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsKKyNpZmRlZiBGVUxMX0NPRUZfQlVGRkVSX1NVUFBPUlRFRAorICAgIC8qIEFsbG9jYXRlIGEgZnVsbC1pbWFnZSB2aXJ0dWFsIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudCwgKi8KKyAgICAvKiBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiBzYW1wX2ZhY3RvciBEQ1QgYmxvY2tzIGluIGVhY2ggZGlyZWN0aW9uLiAqLworICAgIGludCBjaTsKKyAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgY29lZi0+d2hvbGVfaW1hZ2VbY2ldID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgKEpESU1FTlNJT04panJvdW5kX3VwKChsb25nKWNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyljb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwKKyAgICAgICAgIChKRElNRU5TSU9OKWpyb3VuZF91cCgobG9uZyljb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLAorICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgICAgfQorI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICAvKiBXZSBvbmx5IG5lZWQgYSBzaW5nbGUtTUNVIGJ1ZmZlci4gKi8KKyAgICBKQkxPQ0tST1cgYnVmZmVyOworICAgIGludCBpOworCisgICAgYnVmZmVyID0gKEpCTE9DS1JPVykKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX01BWF9CTE9DS1NfSU5fTUNVICogc2l6ZW9mKEpCTE9DSykpOworICAgIGZvciAoaSA9IDA7IGkgPCBDX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsKKyAgICAgIGNvZWYtPk1DVV9idWZmZXJbaV0gPSBidWZmZXIgKyBpOworICAgIH0KKyAgICBjb2VmLT53aG9sZV9pbWFnZVswXSA9IE5VTEw7IC8qIGZsYWcgZm9yIG5vIHZpcnR1YWwgYXJyYXlzICovCisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjY29sZXh0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2NvbGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yzk1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2NvbGV4dC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogamNjb2xleHQuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIsIDIwMTUsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBpbnB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24gcm91dGluZXMuCisgKi8KKworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgamNjb2xvci5jICovCisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4KKyAqCisgKiBOb3RlIHRoYXQgd2UgY2hhbmdlIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgaW50ZXJsZWF2ZWQtcGl4ZWwgZm9ybWF0CisgKiB0byBvdXIgaW50ZXJuYWwgbm9uaW50ZXJsZWF2ZWQsIG9uZS1wbGFuZS1wZXItY29tcG9uZW50IGZvcm1hdC4KKyAqIFRoZSBpbnB1dCBidWZmZXIgaXMgdGhlcmVmb3JlIHRocmVlIHRpbWVzIGFzIHdpZGUgYXMgdGhlIG91dHB1dCBidWZmZXIuCisgKgorICogQSBzdGFydGluZyByb3cgb2Zmc2V0IGlzIHByb3ZpZGVkIG9ubHkgZm9yIHRoZSBvdXRwdXQgYnVmZmVyLiAgVGhlIGNhbGxlcgorICogY2FuIGVhc2lseSBhZGp1c3QgdGhlIHBhc3NlZCBpbnB1dF9idWYgdmFsdWUgdG8gYWNjb21tb2RhdGUgYW55IHJvdworICogb2Zmc2V0IHJlcXVpcmVkIG9uIHRoYXQgc2lkZS4KKyAqLworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCityZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0ciljaW5mby0+Y2NvbnZlcnQ7CisgIHJlZ2lzdGVyIGludCByLCBnLCBiOworICByZWdpc3RlciBKTE9ORyAqY3RhYiA9IGNjb252ZXJ0LT5yZ2JfeWNjX3RhYjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjAsIG91dHB0cjEsIG91dHB0cjI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICBvdXRwdHIwID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIxID0gb3V0cHV0X2J1ZlsxXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdXRfcm93Kys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIHIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9SRURdKTsKKyAgICAgIGcgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9HUkVFTl0pOworICAgICAgYiA9IEdFVEpTQU1QTEUoaW5wdHJbUkdCX0JMVUVdKTsKKyAgICAgIGlucHRyICs9IFJHQl9QSVhFTFNJWkU7CisgICAgICAvKiBJZiB0aGUgaW5wdXRzIGFyZSAwLi5NQVhKU0FNUExFLCB0aGUgb3V0cHV0cyBvZiB0aGVzZSBlcXVhdGlvbnMKKyAgICAgICAqIG11c3QgYmUgdG9vOyB3ZSBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCByYW5nZS1saW1pdGluZyBvcGVyYXRpb24uCisgICAgICAgKiBIZW5jZSB0aGUgdmFsdWUgYmVpbmcgc2hpZnRlZCBpcyBuZXZlciBuZWdhdGl2ZSwgYW5kIHdlIGRvbid0CisgICAgICAgKiBuZWVkIHRoZSBnZW5lcmFsIFJJR0hUX1NISUZUIG1hY3JvLgorICAgICAgICovCisgICAgICAvKiBZICovCisgICAgICBvdXRwdHIwW2NvbF0gPSAoSlNBTVBMRSkoKGN0YWJbciArIFJfWV9PRkZdICsgY3RhYltnICsgR19ZX09GRl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGFiW2IgKyBCX1lfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICAgIC8qIENiICovCisgICAgICBvdXRwdHIxW2NvbF0gPSAoSlNBTVBMRSkoKGN0YWJbciArIFJfQ0JfT0ZGXSArIGN0YWJbZyArIEdfQ0JfT0ZGXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0YWJbYiArIEJfQ0JfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICAgIC8qIENyICovCisgICAgICBvdXRwdHIyW2NvbF0gPSAoSlNBTVBMRSkoKGN0YWJbciArIFJfQ1JfT0ZGXSArIGN0YWJbZyArIEdfQ1JfT0ZGXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0YWJbYiArIEJfQ1JfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICB9CisgIH0KK30KKworCisvKioqKioqKioqKioqKioqKiBDYXNlcyBvdGhlciB0aGFuIFJHQiAtPiBZQ2JDciAqKioqKioqKioqKioqKi8KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgUkdCLT5ncmF5c2NhbGUgY29udmVyc2lvbiwgd2hpY2ggaXMgdGhlIHNhbWUKKyAqIGFzIHRoZSBSR0ItPlkgcG9ydGlvbiBvZiBSR0ItPllDYkNyLgorICogV2UgYXNzdW1lIHJnYl95Y2Nfc3RhcnQgaGFzIGJlZW4gY2FsbGVkICh3ZSBvbmx5IHVzZSB0aGUgWSB0YWJsZXMpLgorICovCisKK0lOTElORQorTE9DQUwodm9pZCkKK3JnYl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgcmVnaXN0ZXIgaW50IHIsIGcsIGI7CisgIHJlZ2lzdGVyIEpMT05HICpjdGFiID0gY2NvbnZlcnQtPnJnYl95Y2NfdGFiOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIgPSAqaW5wdXRfYnVmKys7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdXRfcm93Kys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIHIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9SRURdKTsKKyAgICAgIGcgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9HUkVFTl0pOworICAgICAgYiA9IEdFVEpTQU1QTEUoaW5wdHJbUkdCX0JMVUVdKTsKKyAgICAgIGlucHRyICs9IFJHQl9QSVhFTFNJWkU7CisgICAgICAvKiBZICovCisgICAgICBvdXRwdHJbY29sXSA9IChKU0FNUExFKSgoY3RhYltyICsgUl9ZX09GRl0gKyBjdGFiW2cgKyBHX1lfT0ZGXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RhYltiICsgQl9ZX09GRl0pID4+IFNDQUxFQklUUyk7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIGV4dGVuZGVkIFJHQi0+cGxhaW4gUkdCIGNvbnZlcnNpb24KKyAqLworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCityZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjAsIG91dHB0cjEsIG91dHB0cjI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICBvdXRwdHIwID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIxID0gb3V0cHV0X2J1ZlsxXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdXRfcm93Kys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIG91dHB0cjBbY29sXSA9IEdFVEpTQU1QTEUoaW5wdHJbUkdCX1JFRF0pOworICAgICAgb3V0cHRyMVtjb2xdID0gR0VUSlNBTVBMRShpbnB0cltSR0JfR1JFRU5dKTsKKyAgICAgIG91dHB0cjJbY29sXSA9IEdFVEpTQU1QTEUoaW5wdHJbUkdCX0JMVUVdKTsKKyAgICAgIGlucHRyICs9IFJHQl9QSVhFTFNJWkU7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2NvbG9yLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2NvbG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2ZjYwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjY29sb3IuYwpAQCAtMCwwICsxLDcxMCBAQAorLyoKKyAqIGpjY29sb3IuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIsIDIwMTUsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIENhbGlmb3JuaWEuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgaW5wdXQgY29sb3JzcGFjZSBjb252ZXJzaW9uIHJvdXRpbmVzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqc2ltZC5oIgorI2luY2x1ZGUgImpjb25maWdpbnQuaCIKKworCisvKiBQcml2YXRlIHN1Ym9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NvbG9yX2NvbnZlcnRlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBQcml2YXRlIHN0YXRlIGZvciBSR0ItPllDQyBjb252ZXJzaW9uICovCisgIEpMT05HICpyZ2JfeWNjX3RhYjsgICAgICAgICAgIC8qID0+IHRhYmxlIGZvciBSR0IgdG8gWUNiQ3IgY29udmVyc2lvbiAqLworfSBteV9jb2xvcl9jb252ZXJ0ZXI7CisKK3R5cGVkZWYgbXlfY29sb3JfY29udmVydGVyICpteV9jY29udmVydF9wdHI7CisKKworLyoqKioqKioqKioqKioqKiogUkdCIC0+IFlDYkNyIGNvbnZlcnNpb246IG1vc3QgY29tbW9uIGNhc2UgKioqKioqKioqKioqKiovCisKKy8qCisgKiBZQ2JDciBpcyBkZWZpbmVkIHBlciBDQ0lSIDYwMS0xLCBleGNlcHQgdGhhdCBDYiBhbmQgQ3IgYXJlCisgKiBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwLi5NQVhKU0FNUExFIHJhdGhlciB0aGFuIC0wLjUgLi4gMC41LgorICogVGhlIGNvbnZlcnNpb24gZXF1YXRpb25zIHRvIGJlIGltcGxlbWVudGVkIGFyZSB0aGVyZWZvcmUKKyAqICAgICAgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgKiAgICAgIENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiAgKyBDRU5URVJKU0FNUExFCisgKiAgICAgIENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiAgKyBDRU5URVJKU0FNUExFCisgKiAoVGhlc2UgbnVtYmVycyBhcmUgZGVyaXZlZCBmcm9tIFRJRkYgNi4wIHNlY3Rpb24gMjEsIGRhdGVkIDMtSnVuZS05Mi4pCisgKiBOb3RlOiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgSUpHIGNvZGUgdXNlZCBhIHplcm8gb2Zmc2V0IG9mIE1BWEpTQU1QTEUvMiwKKyAqIHJhdGhlciB0aGFuIENFTlRFUkpTQU1QTEUsIGZvciBDYiBhbmQgQ3IuICBUaGlzIGdhdmUgZXF1YWwgcG9zaXRpdmUgYW5kCisgKiBuZWdhdGl2ZSBzd2luZ3MgZm9yIENiL0NyLCBidXQgbWVhbnQgdGhhdCBncmF5c2NhbGUgdmFsdWVzIChDYj1Dcj0wKQorICogd2VyZSBub3QgcmVwcmVzZW50ZWQgZXhhY3RseS4gIE5vdyB3ZSBzYWNyaWZpY2UgZXhhY3QgcmVwcmVzZW50YXRpb24gb2YKKyAqIG1heGltdW0gcmVkIGFuZCBtYXhpbXVtIGJsdWUgaW4gb3JkZXIgdG8gZ2V0IGV4YWN0IGdyYXlzY2FsZXMuCisgKgorICogVG8gYXZvaWQgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYywgd2UgcmVwcmVzZW50IHRoZSBmcmFjdGlvbmFsIGNvbnN0YW50cworICogYXMgaW50ZWdlcnMgc2NhbGVkIHVwIGJ5IDJeMTYgKGFib3V0IDQgZGlnaXRzIHByZWNpc2lvbik7IHdlIGhhdmUgdG8gZGl2aWRlCisgKiB0aGUgcHJvZHVjdHMgYnkgMl4xNiwgd2l0aCBhcHByb3ByaWF0ZSByb3VuZGluZywgdG8gZ2V0IHRoZSBjb3JyZWN0IGFuc3dlci4KKyAqCisgKiBGb3IgZXZlbiBtb3JlIHNwZWVkLCB3ZSBhdm9pZCBkb2luZyBhbnkgbXVsdGlwbGljYXRpb25zIGluIHRoZSBpbm5lciBsb29wCisgKiBieSBwcmVjYWxjdWxhdGluZyB0aGUgY29uc3RhbnRzIHRpbWVzIFIsRyxCIGZvciBhbGwgcG9zc2libGUgdmFsdWVzLgorICogRm9yIDgtYml0IEpTQU1QTEVzIHRoaXMgaXMgdmVyeSByZWFzb25hYmxlIChvbmx5IDI1NiBlbnRyaWVzIHBlciB0YWJsZSk7CisgKiBmb3IgMTItYml0IHNhbXBsZXMgaXQgaXMgc3RpbGwgYWNjZXB0YWJsZS4gIEl0J3Mgbm90IHZlcnkgcmVhc29uYWJsZSBmb3IKKyAqIDE2LWJpdCBzYW1wbGVzLCBidXQgaWYgeW91IHdhbnQgbG9zc2xlc3Mgc3RvcmFnZSB5b3Ugc2hvdWxkbid0IGJlIGNoYW5naW5nCisgKiBjb2xvcnNwYWNlIGFueXdheS4KKyAqIFRoZSBDRU5URVJKU0FNUExFIG9mZnNldHMgYW5kIHRoZSByb3VuZGluZyBmdWRnZS1mYWN0b3Igb2YgMC41IGFyZSBpbmNsdWRlZAorICogaW4gdGhlIHRhYmxlcyB0byBzYXZlIGFkZGluZyB0aGVtIHNlcGFyYXRlbHkgaW4gdGhlIGlubmVyIGxvb3AuCisgKi8KKworI2RlZmluZSBTQ0FMRUJJVFMgICAgICAgMTYgICAgICAvKiBzcGVlZGllc3QgcmlnaHQtc2hpZnQgb24gc29tZSBtYWNoaW5lcyAqLworI2RlZmluZSBDQkNSX09GRlNFVCAgICAgKChKTE9ORylDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKKyNkZWZpbmUgT05FX0hBTEYgICAgICAgICgoSkxPTkcpMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisjZGVmaW5lIEZJWCh4KSAgICAgICAgICAoKEpMT05HKSgoeCkgKiAoMUwgPDwgU0NBTEVCSVRTKSArIDAuNSkpCisKKy8qIFdlIGFsbG9jYXRlIG9uZSBiaWcgdGFibGUgYW5kIGRpdmlkZSBpdCB1cCBpbnRvIGVpZ2h0IHBhcnRzLCBpbnN0ZWFkIG9mCisgKiBkb2luZyBlaWdodCBhbGxvY19zbWFsbCByZXF1ZXN0cy4gIFRoaXMgbGV0cyB1cyB1c2UgYSBzaW5nbGUgdGFibGUgYmFzZQorICogYWRkcmVzcywgd2hpY2ggY2FuIGJlIGhlbGQgaW4gYSByZWdpc3RlciBpbiB0aGUgaW5uZXIgbG9vcHMgb24gbWFueQorICogbWFjaGluZXMgKG1vcmUgdGhhbiBjYW4gaG9sZCBhbGwgZWlnaHQgYWRkcmVzc2VzLCBhbnl3YXkpLgorICovCisKKyNkZWZpbmUgUl9ZX09GRiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB0byBSID0+IFkgc2VjdGlvbiAqLworI2RlZmluZSBHX1lfT0ZGICAgICAgICAgKDEgKiAoTUFYSlNBTVBMRSArIDEpKSAgLyogb2Zmc2V0IHRvIEcgPT4gWSBzZWN0aW9uICovCisjZGVmaW5lIEJfWV9PRkYgICAgICAgICAoMiAqIChNQVhKU0FNUExFICsgMSkpICAvKiBldGMuICovCisjZGVmaW5lIFJfQ0JfT0ZGICAgICAgICAoMyAqIChNQVhKU0FNUExFICsgMSkpCisjZGVmaW5lIEdfQ0JfT0ZGICAgICAgICAoNCAqIChNQVhKU0FNUExFICsgMSkpCisjZGVmaW5lIEJfQ0JfT0ZGICAgICAgICAoNSAqIChNQVhKU0FNUExFICsgMSkpCisjZGVmaW5lIFJfQ1JfT0ZGICAgICAgICBCX0NCX09GRiAgICAgICAgICAgICAgICAvKiBCPT5DYiwgUj0+Q3IgYXJlIHRoZSBzYW1lICovCisjZGVmaW5lIEdfQ1JfT0ZGICAgICAgICAoNiAqIChNQVhKU0FNUExFICsgMSkpCisjZGVmaW5lIEJfQ1JfT0ZGICAgICAgICAoNyAqIChNQVhKU0FNUExFICsgMSkpCisjZGVmaW5lIFRBQkxFX1NJWkUgICAgICAoOCAqIChNQVhKU0FNUExFICsgMSkpCisKKworLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAqLworCisjaW5jbHVkZSAiamNjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyNkZWZpbmUgcmdiX3ljY19jb252ZXJ0X2ludGVybmFsICBleHRyZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbCAgZXh0cmdiX2dyYXlfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIGV4dHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbAorI2luY2x1ZGUgImpjY29sZXh0LmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIHJnYl95Y2NfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKworI2RlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyNkZWZpbmUgcmdiX3ljY19jb252ZXJ0X2ludGVybmFsICBleHRyZ2J4X3ljY19jb252ZXJ0X2ludGVybmFsCisjZGVmaW5lIHJnYl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwgIGV4dHJnYnhfZ3JheV9jb252ZXJ0X2ludGVybmFsCisjZGVmaW5lIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbCAgZXh0cmdieF9yZ2JfY29udmVydF9pbnRlcm5hbAorI2luY2x1ZGUgImpjY29sZXh0LmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIHJnYl95Y2NfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKworI2RlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorI2RlZmluZSByZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwgIGV4dGJncl95Y2NfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSByZ2JfZ3JheV9jb252ZXJ0X2ludGVybmFsICBleHRiZ3JfZ3JheV9jb252ZXJ0X2ludGVybmFsCisjZGVmaW5lIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbCAgZXh0YmdyX3JnYl9jb252ZXJ0X2ludGVybmFsCisjaW5jbHVkZSAiamNjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgcmdiX3ljY19jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbAorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JYX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JYX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSWF9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorI2RlZmluZSByZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwgIGV4dGJncnhfeWNjX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbCAgZXh0YmdyeF9ncmF5X2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsICBleHRiZ3J4X3JnYl9jb252ZXJ0X2ludGVybmFsCisjaW5jbHVkZSAiamNjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgcmdiX3ljY19jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbAorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorI2RlZmluZSByZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwgIGV4dHhiZ3JfeWNjX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbCAgZXh0eGJncl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsICBleHR4YmdyX3JnYl9jb252ZXJ0X2ludGVybmFsCisjaW5jbHVkZSAiamNjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgcmdiX3ljY19jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbAorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorI2RlZmluZSByZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwgIGV4dHhyZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbCAgZXh0eHJnYl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsICBleHR4cmdiX3JnYl9jb252ZXJ0X2ludGVybmFsCisjaW5jbHVkZSAiamNjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgcmdiX3ljY19jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX2dyYXlfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbAorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBSR0ItPllDQyBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZ2JfeWNjX3N0YXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgSkxPTkcgKnJnYl95Y2NfdGFiOworICBKTE9ORyBpOworCisgIC8qIEFsbG9jYXRlIGFuZCBmaWxsIGluIHRoZSBjb252ZXJzaW9uIHRhYmxlcy4gKi8KKyAgY2NvbnZlcnQtPnJnYl95Y2NfdGFiID0gcmdiX3ljY190YWIgPSAoSkxPTkcgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUQUJMRV9TSVpFICogc2l6ZW9mKEpMT05HKSkpOworCisgIGZvciAoaSA9IDA7IGkgPD0gTUFYSlNBTVBMRTsgaSsrKSB7CisgICAgcmdiX3ljY190YWJbaSArIFJfWV9PRkZdID0gRklYKDAuMjk5MDApICogaTsKKyAgICByZ2JfeWNjX3RhYltpICsgR19ZX09GRl0gPSBGSVgoMC41ODcwMCkgKiBpOworICAgIHJnYl95Y2NfdGFiW2kgKyBCX1lfT0ZGXSA9IEZJWCgwLjExNDAwKSAqIGkgICArIE9ORV9IQUxGOworICAgIHJnYl95Y2NfdGFiW2kgKyBSX0NCX09GRl0gPSAoLUZJWCgwLjE2ODc0KSkgKiBpOworICAgIHJnYl95Y2NfdGFiW2kgKyBHX0NCX09GRl0gPSAoLUZJWCgwLjMzMTI2KSkgKiBpOworICAgIC8qIFdlIHVzZSBhIHJvdW5kaW5nIGZ1ZGdlLWZhY3RvciBvZiAwLjUtZXBzaWxvbiBmb3IgQ2IgYW5kIENyLgorICAgICAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBtYXhpbXVtIG91dHB1dCB3aWxsIHJvdW5kIHRvIE1BWEpTQU1QTEUKKyAgICAgKiBub3QgTUFYSlNBTVBMRSsxLCBhbmQgdGh1cyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmFuZ2UtbGltaXQuCisgICAgICovCisgICAgcmdiX3ljY190YWJbaSArIEJfQ0JfT0ZGXSA9IEZJWCgwLjUwMDAwKSAqIGkgICsgQ0JDUl9PRkZTRVQgKyBPTkVfSEFMRiAtIDE7CisvKiAgQj0+Q2IgYW5kIFI9PkNyIHRhYmxlcyBhcmUgdGhlIHNhbWUKKyAgICByZ2JfeWNjX3RhYltpICsgUl9DUl9PRkZdID0gRklYKDAuNTAwMDApICogaSAgKyBDQkNSX09GRlNFVCArIE9ORV9IQUxGIC0gMTsKKyovCisgICAgcmdiX3ljY190YWJbaSArIEdfQ1JfT0ZGXSA9ICgtRklYKDAuNDE4NjkpKSAqIGk7CisgICAgcmdiX3ljY190YWJbaSArIEJfQ1JfT0ZGXSA9ICgtRklYKDAuMDgxMzEpKSAqIGk7CisgIH0KK30KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICovCisKK01FVEhPRERFRih2b2lkKQorcmdiX3ljY19jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQoreworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGV4dHJnYl95Y2NfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBleHRyZ2J4X3ljY19jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgZXh0YmdyX3ljY19jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGV4dGJncnhfeWNjX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGV4dHhiZ3JfeWNjX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGV4dHhyZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZ2JfeWNjX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoqKioqKioqKioqKioqKiogQ2FzZXMgb3RoZXIgdGhhbiBSR0IgLT4gWUNiQ3IgKioqKioqKioqKioqKiovCisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3JnYl9ncmF5X2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQoreworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGV4dHJnYl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGV4dHJnYnhfZ3JheV9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGV4dGJncl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGV4dGJncnhfZ3JheV9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgZXh0eGJncl9ncmF5X2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBleHR4cmdiX2dyYXlfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZ2JfZ3JheV9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogRXh0ZW5kZWQgUkdCIHRvIHBsYWluIFJHQiBjb252ZXJzaW9uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZ2JfcmdiX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCit7CisgIHN3aXRjaCAoY2luZm8tPmluX2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgZXh0cmdiX3JnYl9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGV4dHJnYnhfcmdiX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBleHRiZ3JfcmdiX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgZXh0YmdyeF9yZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgZXh0eGJncl9yZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgZXh0eHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgQWRvYmUtc3R5bGUgQ01ZSy0+WUNDSyBjb252ZXJzaW9uLAorICogd2hlcmUgd2UgY29udmVydCBSPTEtQywgRz0xLU0sIGFuZCBCPTEtWSB0byBZQ2JDciB1c2luZyB0aGUgc2FtZQorICogY29udmVyc2lvbiBhcyBhYm92ZSwgd2hpbGUgcGFzc2luZyBLIChibGFjaykgdW5jaGFuZ2VkLgorICogV2UgYXNzdW1lIHJnYl95Y2Nfc3RhcnQgaGFzIGJlZW4gY2FsbGVkLgorICovCisKK01FVEhPRERFRih2b2lkKQorY215a195Y2NrX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0ciljaW5mby0+Y2NvbnZlcnQ7CisgIHJlZ2lzdGVyIGludCByLCBnLCBiOworICByZWdpc3RlciBKTE9ORyAqY3RhYiA9IGNjb252ZXJ0LT5yZ2JfeWNjX3RhYjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjAsIG91dHB0cjEsIG91dHB0cjIsIG91dHB0cjM7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICBvdXRwdHIwID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIxID0gb3V0cHV0X2J1ZlsxXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIzID0gb3V0cHV0X2J1ZlszXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdXRfcm93Kys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIHIgPSBNQVhKU0FNUExFIC0gR0VUSlNBTVBMRShpbnB0clswXSk7CisgICAgICBnID0gTUFYSlNBTVBMRSAtIEdFVEpTQU1QTEUoaW5wdHJbMV0pOworICAgICAgYiA9IE1BWEpTQU1QTEUgLSBHRVRKU0FNUExFKGlucHRyWzJdKTsKKyAgICAgIC8qIEsgcGFzc2VzIHRocm91Z2ggYXMtaXMgKi8KKyAgICAgIG91dHB0cjNbY29sXSA9IGlucHRyWzNdOyAgLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFIGhlcmUgKi8KKyAgICAgIGlucHRyICs9IDQ7CisgICAgICAvKiBJZiB0aGUgaW5wdXRzIGFyZSAwLi5NQVhKU0FNUExFLCB0aGUgb3V0cHV0cyBvZiB0aGVzZSBlcXVhdGlvbnMKKyAgICAgICAqIG11c3QgYmUgdG9vOyB3ZSBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCByYW5nZS1saW1pdGluZyBvcGVyYXRpb24uCisgICAgICAgKiBIZW5jZSB0aGUgdmFsdWUgYmVpbmcgc2hpZnRlZCBpcyBuZXZlciBuZWdhdGl2ZSwgYW5kIHdlIGRvbid0CisgICAgICAgKiBuZWVkIHRoZSBnZW5lcmFsIFJJR0hUX1NISUZUIG1hY3JvLgorICAgICAgICovCisgICAgICAvKiBZICovCisgICAgICBvdXRwdHIwW2NvbF0gPSAoSlNBTVBMRSkoKGN0YWJbciArIFJfWV9PRkZdICsgY3RhYltnICsgR19ZX09GRl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGFiW2IgKyBCX1lfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICAgIC8qIENiICovCisgICAgICBvdXRwdHIxW2NvbF0gPSAoSlNBTVBMRSkoKGN0YWJbciArIFJfQ0JfT0ZGXSArIGN0YWJbZyArIEdfQ0JfT0ZGXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0YWJbYiArIEJfQ0JfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICAgIC8qIENyICovCisgICAgICBvdXRwdHIyW2NvbF0gPSAoSlNBTVBMRSkoKGN0YWJbciArIFJfQ1JfT0ZGXSArIGN0YWJbZyArIEdfQ1JfT0ZGXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0YWJbYiArIEJfQ1JfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgZ3JheXNjYWxlIG91dHB1dCB3aXRoIG5vIGNvbnZlcnNpb24uCisgKiBUaGUgc291cmNlIGNhbiBiZSBlaXRoZXIgcGxhaW4gZ3JheXNjYWxlIG9yIFlDYkNyIChzaW5jZSBZID09IGdyYXkpLgorICovCisKK01FVEhPRERFRih2b2lkKQorZ3JheXNjYWxlX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7CisgIGludCBpbnN0cmlkZSA9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdW291dHB1dF9yb3ddOworICAgIG91dHB1dF9yb3crKzsKKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgb3V0cHRyW2NvbF0gPSBpbnB0clswXTsgICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICBpbnB0ciArPSBpbnN0cmlkZTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgbXVsdGktY29tcG9uZW50IGNvbG9yc3BhY2VzIHdpdGhvdXQgY29udmVyc2lvbi4KKyAqIFdlIGFzc3VtZSBpbnB1dF9jb21wb25lbnRzID09IG51bV9jb21wb25lbnRzLgorICovCisKK01FVEhPRERFRih2b2lkKQorbnVsbF9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQoreworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyLCBvdXRwdHIwLCBvdXRwdHIxLCBvdXRwdHIyLCBvdXRwdHIzOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgcmVnaXN0ZXIgaW50IGNpOworICBpbnQgbmMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7CisKKyAgaWYgKG5jID09IDMpIHsKKyAgICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICAgIG91dHB0cjAgPSBvdXRwdXRfYnVmWzBdW291dHB1dF9yb3ddOworICAgICAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd107CisgICAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsKKyAgICAgIG91dHB1dF9yb3crKzsKKyAgICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICAgIG91dHB0cjBbY29sXSA9ICppbnB0cisrOworICAgICAgICBvdXRwdHIxW2NvbF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyMltjb2xdID0gKmlucHRyKys7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKG5jID09IDQpIHsKKyAgICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICAgIG91dHB0cjAgPSBvdXRwdXRfYnVmWzBdW291dHB1dF9yb3ddOworICAgICAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd107CisgICAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsKKyAgICAgIG91dHB0cjMgPSBvdXRwdXRfYnVmWzNdW291dHB1dF9yb3ddOworICAgICAgb3V0cHV0X3JvdysrOworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgICAgb3V0cHRyMFtjb2xdID0gKmlucHRyKys7CisgICAgICAgIG91dHB0cjFbY29sXSA9ICppbnB0cisrOworICAgICAgICBvdXRwdHIyW2NvbF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyM1tjb2xdID0gKmlucHRyKys7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICAgIC8qIEl0IHNlZW1zIGZhc3Rlc3QgdG8gbWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGVhY2ggY29tcG9uZW50LiAqLworICAgICAgZm9yIChjaSA9IDA7IGNpIDwgbmM7IGNpKyspIHsKKyAgICAgICAgaW5wdHIgPSAqaW5wdXRfYnVmOworICAgICAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2NpXVtvdXRwdXRfcm93XTsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgICAgICBvdXRwdHJbY29sXSA9IGlucHRyW2NpXTsgLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgICAgIGlucHRyICs9IG5jOworICAgICAgICB9CisgICAgICB9CisgICAgICBpbnB1dF9idWYrKzsKKyAgICAgIG91dHB1dF9yb3crKzsKKyAgICB9CisgIH0KK30KKworCisvKgorICogRW1wdHkgbWV0aG9kIGZvciBzdGFydF9wYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorbnVsbF9tZXRob2Qoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIG5vIHdvcmsgbmVlZGVkICovCit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBpbnB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9jb2xvcl9jb252ZXJ0ZXIoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2Njb252ZXJ0X3B0ciBjY29udmVydDsKKworICBjY29udmVydCA9IChteV9jY29udmVydF9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfY29sb3JfY29udmVydGVyKSk7CisgIGNpbmZvLT5jY29udmVydCA9IChzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgKiljY29udmVydDsKKyAgLyogc2V0IHN0YXJ0X3Bhc3MgdG8gbnVsbCBtZXRob2QgdW50aWwgd2UgZmluZCBvdXQgZGlmZmVyZW50bHkgKi8KKyAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gbnVsbF9tZXRob2Q7CisKKyAgLyogTWFrZSBzdXJlIGlucHV0X2NvbXBvbmVudHMgYWdyZWVzIHdpdGggaW5fY29sb3Jfc3BhY2UgKi8KKyAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfR1JBWVNDQUxFOgorICAgIGlmIChjaW5mby0+aW5wdXRfY29tcG9uZW50cyAhPSAxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgaWYgKGNpbmZvLT5pbnB1dF9jb21wb25lbnRzICE9IHJnYl9waXhlbHNpemVbY2luZm8tPmluX2NvbG9yX3NwYWNlXSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGlmIChjaW5mby0+aW5wdXRfY29tcG9uZW50cyAhPSAzKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgY2FzZSBKQ1NfWUNDSzoKKyAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgIT0gNCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLworICAgIGlmIChjaW5mby0+aW5wdXRfY29tcG9uZW50cyA8IDEpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIENoZWNrIG51bV9jb21wb25lbnRzLCBzZXQgY29udmVyc2lvbiBtZXRob2QgYmFzZWQgb24gcmVxdWVzdGVkIHNwYWNlICovCisgIHN3aXRjaCAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfR1JBWVNDQUxFOgorICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQorICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7CisgICAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19SR0IgfHwKKyAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9SR0IgfHwKKyAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9SR0JYIHx8CisgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSIHx8CisgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSWCB8fAorICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1hCR1IgfHwKKyAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9YUkdCIHx8CisgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfUkdCQSB8fAorICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX0JHUkEgfHwKKyAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9BQkdSIHx8CisgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQVJHQikgeworICAgICAgaWYgKGpzaW1kX2Nhbl9yZ2JfZ3JheSgpKQorICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0OworICAgICAgZWxzZSB7CisgICAgICAgIGNjb252ZXJ0LT5wdWIuc3RhcnRfcGFzcyA9IHJnYl95Y2Nfc3RhcnQ7CisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHJnYl9ncmF5X2NvbnZlcnQ7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKQorICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7CisgICAgZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1JHQjoKKyAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICAgIGlmIChyZ2JfcmVkW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV0gPT0gMCAmJgorICAgICAgICByZ2JfZ3JlZW5bY2luZm8tPmluX2NvbG9yX3NwYWNlXSA9PSAxICYmCisgICAgICAgIHJnYl9ibHVlW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV0gPT0gMiAmJgorICAgICAgICByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV0gPT0gMykgeworI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgICBpZiAoanNpbWRfY19jYW5fbnVsbF9jb252ZXJ0KCkpCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpzaW1kX2NfbnVsbF9jb252ZXJ0OworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCIHx8CisgICAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9SR0IgfHwKKyAgICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1JHQlggfHwKKyAgICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX0JHUiB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSWCB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfWEJHUiB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfWFJHQiB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfUkdCQSB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSQSB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQUJHUiB8fAorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQVJHQikKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHJnYl9yZ2JfY29udmVydDsKKyAgICBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfWUNiQ3I6CisgICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSAzKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19SR0IgfHwKKyAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfUkdCIHx8CisgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1JHQlggfHwKKyAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSIHx8CisgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX0JHUlggfHwKKyAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfWEJHUiB8fAorICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9YUkdCIHx8CisgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1JHQkEgfHwKKyAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSQSB8fAorICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9BQkdSIHx8CisgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX0FSR0IpIHsKKyAgICAgIGlmIChqc2ltZF9jYW5fcmdiX3ljYygpKQorICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnQ7CisgICAgICBlbHNlIHsKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gcmdiX3ljY19zdGFydDsKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gcmdiX3ljY19jb252ZXJ0OworICAgICAgfQorICAgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgeworI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgICBpZiAoanNpbWRfY19jYW5fbnVsbF9jb252ZXJ0KCkpCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpzaW1kX2NfbnVsbF9jb252ZXJ0OworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICB9IGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKKyAgICBicmVhazsKKworICBjYXNlIEpDU19DTVlLOgorICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gNCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgICBpZiAoanNpbWRfY19jYW5fbnVsbF9jb252ZXJ0KCkpCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpzaW1kX2NfbnVsbF9jb252ZXJ0OworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICB9IGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKKyAgICBicmVhazsKKworICBjYXNlIEpDU19ZQ0NLOgorICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gNCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgICAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gcmdiX3ljY19zdGFydDsKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGNteWtfeWNja19jb252ZXJ0OworICAgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19ZQ0NLKSB7CisjaWYgZGVmaW5lZChfX21pcHNfXykKKyAgICAgIGlmIChqc2ltZF9jX2Nhbl9udWxsX2NvbnZlcnQoKSkKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0ganNpbWRfY19udWxsX2NvbnZlcnQ7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gbnVsbF9jb252ZXJ0OworICAgIH0gZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIGFsbG93IG51bGwgY29udmVyc2lvbiBvZiBKQ1NfVU5LTk9XTiAqLworICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSAhPSBjaW5mby0+aW5fY29sb3Jfc3BhY2UgfHwKKyAgICAgICAgY2luZm8tPm51bV9jb21wb25lbnRzICE9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgaWYgKGpzaW1kX2NfY2FuX251bGxfY29udmVydCgpKQorICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0ganNpbWRfY19udWxsX2NvbnZlcnQ7CisgICAgZWxzZQorI2VuZGlmCisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgYnJlYWs7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjZGN0bWdyLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2RjdG1nci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDA1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2RjdG1nci5jCkBAIC0wLDAgKzEsNzIxIEBACisvKgorICogamNkY3RtZ3IuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNC0yMDE1LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZvcndhcmQtRENUIG1hbmFnZW1lbnQgbG9naWMuCisgKiBUaGlzIGNvZGUgc2VsZWN0cyBhIHBhcnRpY3VsYXIgRENUIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQsCisgKiBhbmQgaXQgcGVyZm9ybXMgcmVsYXRlZCBob3VzZWtlZXBpbmcgY2hvcmVzIGluY2x1ZGluZyBjb2VmZmljaWVudAorICogcXVhbnRpemF0aW9uLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKyNpbmNsdWRlICJqc2ltZGRjdC5oIgorCisKKy8qIFByaXZhdGUgc3Vib2JqZWN0IGZvciB0aGlzIG1vZHVsZSAqLworCit0eXBlZGVmIHZvaWQgKCpmb3J3YXJkX0RDVF9tZXRob2RfcHRyKSAoRENURUxFTSAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpmbG9hdF9EQ1RfbWV0aG9kX3B0cikgKEZBU1RfRkxPQVQgKmRhdGEpOworCit0eXBlZGVmIHZvaWQgKCpjb252c2FtcF9tZXRob2RfcHRyKSAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpOwordHlwZWRlZiB2b2lkICgqZmxvYXRfY29udnNhbXBfbWV0aG9kX3B0cikgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKwordHlwZWRlZiB2b2lkICgqcXVhbnRpemVfbWV0aG9kX3B0cikgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSk7Cit0eXBlZGVmIHZvaWQgKCpmbG9hdF9xdWFudGl6ZV9tZXRob2RfcHRyKSAoSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICpkaXZpc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworCitNRVRIT0RERUYodm9pZCkgcXVhbnRpemUoSkNPRUZQVFIsIERDVEVMRU0gKiwgRENURUxFTSAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCBwdWI7ICAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogUG9pbnRlciB0byB0aGUgRENUIHJvdXRpbmUgYWN0dWFsbHkgaW4gdXNlICovCisgIGZvcndhcmRfRENUX21ldGhvZF9wdHIgZGN0OworICBjb252c2FtcF9tZXRob2RfcHRyIGNvbnZzYW1wOworICBxdWFudGl6ZV9tZXRob2RfcHRyIHF1YW50aXplOworCisgIC8qIFRoZSBhY3R1YWwgcG9zdC1EQ1QgZGl2aXNvcnMgLS0tIG5vdCBpZGVudGljYWwgdG8gdGhlIHF1YW50IHRhYmxlCisgICAqIGVudHJpZXMsIGJlY2F1c2Ugb2Ygc2NhbGluZyAoZXNwZWNpYWxseSBmb3IgYW4gdW5ub3JtYWxpemVkIERDVCkuCisgICAqIEVhY2ggdGFibGUgaXMgZ2l2ZW4gaW4gbm9ybWFsIGFycmF5IG9yZGVyLgorICAgKi8KKyAgRENURUxFTSAqZGl2aXNvcnNbTlVNX1FVQU5UX1RCTFNdOworCisgIC8qIHdvcmsgYXJlYSBmb3IgRkRDVCBzdWJyb3V0aW5lICovCisgIERDVEVMRU0gKndvcmtzcGFjZTsKKworI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgLyogU2FtZSBhcyBhYm92ZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IGNhc2UuICovCisgIGZsb2F0X0RDVF9tZXRob2RfcHRyIGZsb2F0X2RjdDsKKyAgZmxvYXRfY29udnNhbXBfbWV0aG9kX3B0ciBmbG9hdF9jb252c2FtcDsKKyAgZmxvYXRfcXVhbnRpemVfbWV0aG9kX3B0ciBmbG9hdF9xdWFudGl6ZTsKKyAgRkFTVF9GTE9BVCAqZmxvYXRfZGl2aXNvcnNbTlVNX1FVQU5UX1RCTFNdOworICBGQVNUX0ZMT0FUICpmbG9hdF93b3Jrc3BhY2U7CisjZW5kaWYKK30gbXlfZmRjdF9jb250cm9sbGVyOworCit0eXBlZGVmIG15X2ZkY3RfY29udHJvbGxlciAqbXlfZmRjdF9wdHI7CisKKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisKKy8qCisgKiBGaW5kIHRoZSBoaWdoZXN0IGJpdCBpbiBhbiBpbnRlZ2VyIHRocm91Z2ggYmluYXJ5IHNlYXJjaC4KKyAqLworCitMT0NBTChpbnQpCitmbHNzKFVJTlQxNiB2YWwpCit7CisgIGludCBiaXQ7CisKKyAgYml0ID0gMTY7CisKKyAgaWYgKCF2YWwpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCEodmFsICYgMHhmZjAwKSkgeworICAgIGJpdCAtPSA4OworICAgIHZhbCA8PD0gODsKKyAgfQorICBpZiAoISh2YWwgJiAweGYwMDApKSB7CisgICAgYml0IC09IDQ7CisgICAgdmFsIDw8PSA0OworICB9CisgIGlmICghKHZhbCAmIDB4YzAwMCkpIHsKKyAgICBiaXQgLT0gMjsKKyAgICB2YWwgPDw9IDI7CisgIH0KKyAgaWYgKCEodmFsICYgMHg4MDAwKSkgeworICAgIGJpdCAtPSAxOworICAgIHZhbCA8PD0gMTsKKyAgfQorCisgIHJldHVybiBiaXQ7Cit9CisKKworLyoKKyAqIENvbXB1dGUgdmFsdWVzIHRvIGRvIGEgZGl2aXNpb24gdXNpbmcgcmVjaXByb2NhbC4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKyAqICAgIkhvdyB0byBvcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gZmFtaWx5IG9mIG1pY3JvcHJvY2Vzc29ycyIKKyAqICAgKGh0dHA6Ly93d3cuYWduZXIub3JnL2Fzc2VtLykuCisgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYXNpYyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluCisgKiB0aGUgcGFwZXIgIkludGVnZXIgRGl2aXNpb24gVXNpbmcgUmVjaXByb2NhbHMiIGJ5IFJvYmVydCBBbHZlcnNvbi4KKyAqCisgKiBUaGUgYmFzaWMgaWRlYSBpcyB0byByZXBsYWNlIHgvZCBieSB4ICogZF4tMS4gSW4gb3JkZXIgdG8gc3RvcmUKKyAqIGReLTEgd2l0aCBlbm91Z2ggcHJlY2lzaW9uIHdlIHNoaWZ0IGl0IGxlZnQgYSBmZXcgcGxhY2VzLiBJdCB0dXJucworICogb3V0IHRoYXQgdGhpcyBhbGdvcmlnaHQgZ2l2ZXMganVzdCBlbm91Z2ggcHJlY2lzaW9uLCBhbmQgYWxzbyBmaXRzCisgKiBpbnRvIERDVEVMRU06CisgKgorICogICBiID0gKHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyBpbiBkaXZpc29yKSAtIDEKKyAqICAgciA9ICh3b3JkIHNpemUpICsgYgorICogICBmID0gMl5yIC8gZGl2aXNvcgorICoKKyAqIGYgd2lsbCBub3QgYmUgYW4gaW50ZWdlciBmb3IgbW9zdCBjYXNlcywgc28gd2UgbmVlZCB0byBjb21wZW5zYXRlCisgKiBmb3IgdGhlIHJvdW5kaW5nIGVycm9yIGludHJvZHVjZWQ6CisgKgorICogICBubyBmcmFjdGlvbmFsIHBhcnQ6CisgKgorICogICAgICAgcmVzdWx0ID0gaW5wdXQgPj4gcgorICoKKyAqICAgZnJhY3Rpb25hbCBwYXJ0IG9mIGYgPCAwLjU6CisgKgorICogICAgICAgcm91bmQgZiBkb3duIHRvIG5lYXJlc3QgaW50ZWdlcgorICogICAgICAgcmVzdWx0ID0gKChpbnB1dCArIDEpICogZikgPj4gcgorICoKKyAqICAgZnJhY3Rpb25hbCBwYXJ0IG9mIGYgPiAwLjU6CisgKgorICogICAgICAgcm91bmQgZiB1cCB0byBuZWFyZXN0IGludGVnZXIKKyAqICAgICAgIHJlc3VsdCA9IChpbnB1dCAqIGYpID4+IHIKKyAqCisgKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBhbGdvcml0aG0gdGhhdCBnaXZlcyB0cnVuY2F0ZWQgcmVzdWx0cy4gQnV0IHdlCisgKiB3YW50IHByb3Blcmx5IHJvdW5kZWQgcmVzdWx0cywgc28gd2UgcmVwbGFjZSAiaW5wdXQiIHdpdGgKKyAqICJpbnB1dCArIGRpdmlzb3IvMiIuCisgKgorICogSW4gb3JkZXIgdG8gYWxsb3cgU0lNRCBpbXBsZW1lbnRhdGlvbnMgd2UgYWxzbyB0d2VhayB0aGUgdmFsdWVzIHRvCisgKiBhbGxvdyB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0byBiZSBtYWRlIGF0IGFsbCB0aW1lczoKKyAqCisgKiAgIGRjdGJsWzBdID0gZiByb3VuZGVkIHRvIG5lYXJlc3QgaW50ZWdlcgorICogICBkY3RibFsxXSA9IGRpdmlzb3IgLyAyICgrIDEgaWYgZnJhY3Rpb25hbCBwYXJ0IG9mIGYgPCAwLjUpCisgKiAgIGRjdGJsWzJdID0gMSA8PCAoKHdvcmQgc2l6ZSkgKiAyIC0gcikKKyAqICAgZGN0YmxbM10gPSByIC0gKHdvcmQgc2l6ZSkKKyAqCisgKiBkY3RibFsyXSBpcyBmb3Igc3R1cGlkIGluc3RydWN0aW9uIHNldHMgd2hlcmUgdGhlIHNoaWZ0IG9wZXJhdGlvbgorICogaXNuJ3QgbWVtYmVyIHdpc2UgKGUuZy4gTU1YKS4KKyAqCisgKiBUaGUgcmVhc29uIGRjdGJsWzJdIGFuZCBkY3RibFszXSByZWR1Y2UgdGhlIHNoaWZ0IHdpdGggKHdvcmQgc2l6ZSkKKyAqIGlzIHRoYXQgbW9zdCBTSU1EIGltcGxlbWVudGF0aW9ucyBoYXZlIGEgIm11bHRpcGx5IGFuZCBzdG9yZSB0b3AKKyAqIGhhbGYiIG9wZXJhdGlvbi4KKyAqCisgKiBMYXN0bHksIHdlIHN0b3JlIGVhY2ggb2YgdGhlIHZhbHVlcyBpbiB0aGVpciBvd24gdGFibGUgaW5zdGVhZAorICogb2YgaW4gYSBjb25zZWN1dGl2ZSBtYW5uZXIsIHlldCBhZ2FpbiBpbiBvcmRlciB0byBhbGxvdyBTSU1ECisgKiByb3V0aW5lcy4KKyAqLworCitMT0NBTChpbnQpCitjb21wdXRlX3JlY2lwcm9jYWwoVUlOVDE2IGRpdmlzb3IsIERDVEVMRU0gKmR0YmwpCit7CisgIFVEQ1RFTEVNMiBmcSwgZnI7CisgIFVEQ1RFTEVNIGM7CisgIGludCBiLCByOworCisgIGlmIChkaXZpc29yID09IDEpIHsKKyAgICAvKiBkaXZpc29yID09IDEgbWVhbnMgdW5xdWFudGl6ZWQsIHNvIHRoZXNlIHJlY2lwcm9jYWwvY29ycmVjdGlvbi9zaGlmdAorICAgICAqIHZhbHVlcyB3aWxsIGNhdXNlIHRoZSBDIHF1YW50aXphdGlvbiBhbGdvcml0aG0gdG8gYWN0IGxpa2UgdGhlCisgICAgICogaWRlbnRpdHkgZnVuY3Rpb24uICBTaW5jZSBvbmx5IHRoZSBDIHF1YW50aXphdGlvbiBhbGdvcml0aG0gaXMgdXNlZCBpbgorICAgICAqIHRoZXNlIGNhc2VzLCB0aGUgc2NhbGUgdmFsdWUgaXMgaXJyZWxldmFudC4KKyAgICAgKi8KKyAgICBkdGJsW0RDVFNJWkUyICogMF0gPSAoRENURUxFTSkxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlY2lwcm9jYWwgKi8KKyAgICBkdGJsW0RDVFNJWkUyICogMV0gPSAoRENURUxFTSkwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcnJlY3Rpb24gKi8KKyAgICBkdGJsW0RDVFNJWkUyICogMl0gPSAoRENURUxFTSkxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjYWxlICovCisgICAgZHRibFtEQ1RTSVpFMiAqIDNdID0gLShEQ1RFTEVNKShzaXplb2YoRENURUxFTSkgKiA4KTsgICAvKiBzaGlmdCAqLworICAgIHJldHVybiAwOworICB9CisKKyAgYiA9IGZsc3MoZGl2aXNvcikgLSAxOworICByICA9IHNpemVvZihEQ1RFTEVNKSAqIDggKyBiOworCisgIGZxID0gKChVRENURUxFTTIpMSA8PCByKSAvIGRpdmlzb3I7CisgIGZyID0gKChVRENURUxFTTIpMSA8PCByKSAlIGRpdmlzb3I7CisKKyAgYyA9IGRpdmlzb3IgLyAyOyAgICAgICAgICAgICAgICAgICAgICAvKiBmb3Igcm91bmRpbmcgKi8KKworICBpZiAoZnIgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpdmlzb3IgaXMgcG93ZXIgb2YgdHdvICovCisgICAgLyogZnEgd2lsbCBiZSBvbmUgYml0IHRvbyBsYXJnZSB0byBmaXQgaW4gRENURUxFTSwgc28gYWRqdXN0ICovCisgICAgZnEgPj49IDE7CisgICAgci0tOworICB9IGVsc2UgaWYgKGZyIDw9IChkaXZpc29yIC8gMlUpKSB7ICAgIC8qIGZyYWN0aW9uYWwgcGFydCBpcyA8IDAuNSAqLworICAgIGMrKzsKKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmFjdGlvbmFsIHBhcnQgaXMgPiAwLjUgKi8KKyAgICBmcSsrOworICB9CisKKyAgZHRibFtEQ1RTSVpFMiAqIDBdID0gKERDVEVMRU0pZnE7ICAgICAvKiByZWNpcHJvY2FsICovCisgIGR0YmxbRENUU0laRTIgKiAxXSA9IChEQ1RFTEVNKWM7ICAgICAgLyogY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yICovCisjaWZkZWYgV0lUSF9TSU1ECisgIGR0YmxbRENUU0laRTIgKiAyXSA9IChEQ1RFTEVNKSgxIDw8IChzaXplb2YoRENURUxFTSkgKiA4ICogMiAtIHIpKTsgLyogc2NhbGUgKi8KKyNlbHNlCisgIGR0YmxbRENUU0laRTIgKiAyXSA9IDE7CisjZW5kaWYKKyAgZHRibFtEQ1RTSVpFMiAqIDNdID0gKERDVEVMRU0pciAtIHNpemVvZihEQ1RFTEVNKSAqIDg7IC8qIHNoaWZ0ICovCisKKyAgaWYgKHIgPD0gMTYpIHJldHVybiAwOworICBlbHNlIHJldHVybiAxOworfQorCisjZW5kaWYKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKiBWZXJpZnkgdGhhdCBhbGwgcmVmZXJlbmNlZCBRLXRhYmxlcyBhcmUgcHJlc2VudCwgYW5kIHNldCB1cAorICogdGhlIGRpdmlzb3IgdGFibGUgZm9yIGVhY2ggb25lLgorICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIERDVCBvZiBhbGwgY29tcG9uZW50cyBpcyBkb25lIGR1cmluZworICogdGhlIGZpcnN0IHBhc3MsIGV2ZW4gaWYgb25seSBzb21lIGNvbXBvbmVudHMgd2lsbCBiZSBvdXRwdXQgaW4gdGhlCisgKiBmaXJzdCBzY2FuLiAgSGVuY2UgYWxsIGNvbXBvbmVudHMgc2hvdWxkIGJlIGV4YW1pbmVkIGhlcmUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2ZkY3RtZ3Ioal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2ZkY3RfcHRyIGZkY3QgPSAobXlfZmRjdF9wdHIpY2luZm8tPmZkY3Q7CisgIGludCBjaSwgcXRibG5vLCBpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKUVVBTlRfVEJMICpxdGJsOworICBEQ1RFTEVNICpkdGJsOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgcXRibG5vID0gY29tcHB0ci0+cXVhbnRfdGJsX25vOworICAgIC8qIE1ha2Ugc3VyZSBzcGVjaWZpZWQgcXVhbnRpemF0aW9uIHRhYmxlIGlzIHByZXNlbnQgKi8KKyAgICBpZiAocXRibG5vIDwgMCB8fCBxdGJsbm8gPj0gTlVNX1FVQU5UX1RCTFMgfHwKKyAgICAgICAgY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkKKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX1FVQU5UX1RBQkxFLCBxdGJsbm8pOworICAgIHF0YmwgPSBjaW5mby0+cXVhbnRfdGJsX3B0cnNbcXRibG5vXTsKKyAgICAvKiBDb21wdXRlIGRpdmlzb3JzIGZvciB0aGlzIHF1YW50IHRhYmxlICovCisgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIHNhbWUgdGFibGUsIGJ1dCBpdCdzIG5vdCBhIGJpZyBkZWFsICovCisgICAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgICBjYXNlIEpEQ1RfSVNMT1c6CisgICAgICAvKiBGb3IgTEwmTSBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHJhdyBxdWFudGl6YXRpb24KKyAgICAgICAqIGNvZWZmaWNpZW50cyBtdWx0aXBsaWVkIGJ5IDggKHRvIGNvdW50ZXJhY3Qgc2NhbGluZykuCisgICAgICAgKi8KKyAgICAgIGlmIChmZGN0LT5kaXZpc29yc1txdGJsbm9dID09IE5VTEwpIHsKKyAgICAgICAgZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9IChEQ1RFTEVNICopCisgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRENUU0laRTIgKiA0KSAqIHNpemVvZihEQ1RFTEVNKSk7CisgICAgICB9CisgICAgICBkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyAgICAgICAgaWYgKCFjb21wdXRlX3JlY2lwcm9jYWwocXRibC0+cXVhbnR2YWxbaV0gPDwgMywgJmR0YmxbaV0pICYmCisgICAgICAgICAgICBmZGN0LT5xdWFudGl6ZSA9PSBqc2ltZF9xdWFudGl6ZSkKKyAgICAgICAgICBmZGN0LT5xdWFudGl6ZSA9IHF1YW50aXplOworI2Vsc2UKKyAgICAgICAgZHRibFtpXSA9ICgoRENURUxFTSlxdGJsLT5xdWFudHZhbFtpXSkgPDwgMzsKKyNlbmRpZgorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgICAgY2FzZSBKRENUX0lGQVNUOgorICAgICAgeworICAgICAgICAvKiBGb3IgQUEmTiBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbgorICAgICAgICAgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUKKyAgICAgICAgICogICBzY2FsZWZhY3RvclswXSA9IDEKKyAgICAgICAgICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNworICAgICAgICAgKiBXZSBhcHBseSBhIGZ1cnRoZXIgc2NhbGUgZmFjdG9yIG9mIDguCisgICAgICAgICAqLworI2RlZmluZSBDT05TVF9CSVRTICAxNAorICAgICAgICBzdGF0aWMgY29uc3QgSU5UMTYgYWFuc2NhbGVzW0RDVFNJWkUyXSA9IHsKKyAgICAgICAgICAvKiBwcmVjb21wdXRlZCB2YWx1ZXMgc2NhbGVkIHVwIGJ5IDE0IGJpdHMgKi8KKyAgICAgICAgICAxNjM4NCwgMjI3MjUsIDIxNDA3LCAxOTI2NiwgMTYzODQsIDEyODczLCAgODg2NywgIDQ1MjAsCisgICAgICAgICAgMjI3MjUsIDMxNTIxLCAyOTY5MiwgMjY3MjIsIDIyNzI1LCAxNzg1NSwgMTIyOTksICA2MjcwLAorICAgICAgICAgIDIxNDA3LCAyOTY5MiwgMjc5NjksIDI1MTcyLCAyMTQwNywgMTY4MTksIDExNTg1LCAgNTkwNiwKKyAgICAgICAgICAxOTI2NiwgMjY3MjIsIDI1MTcyLCAyMjY1NCwgMTkyNjYsIDE1MTM3LCAxMDQyNiwgIDUzMTUsCisgICAgICAgICAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAorICAgICAgICAgIDEyODczLCAxNzg1NSwgMTY4MTksIDE1MTM3LCAxMjg3MywgMTAxMTQsICA2OTY3LCAgMzU1MiwKKyAgICAgICAgICAgODg2NywgMTIyOTksIDExNTg1LCAxMDQyNiwgIDg4NjcsICA2OTY3LCAgNDc5OSwgIDI0NDYsCisgICAgICAgICAgIDQ1MjAsICA2MjcwLCAgNTkwNiwgIDUzMTUsICA0NTIwLCAgMzU1MiwgIDI0NDYsICAxMjQ3CisgICAgICAgIH07CisgICAgICAgIFNISUZUX1RFTVBTCisKKyAgICAgICAgaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgeworICAgICAgICAgIGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPSAoRENURUxFTSAqKQorICAgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQ1RTSVpFMiAqIDQpICogc2l6ZW9mKERDVEVMRU0pKTsKKyAgICAgICAgfQorICAgICAgICBkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorICAgICAgICAgIGlmICghY29tcHV0ZV9yZWNpcHJvY2FsKAorICAgICAgICAgICAgICAgIERFU0NBTEUoTVVMVElQTFkxNlYxNigoSkxPTkcpcXRibC0+cXVhbnR2YWxbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKTE9ORylhYW5zY2FsZXNbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyAtIDMpLCAmZHRibFtpXSkgJiYKKyAgICAgICAgICAgICAgZmRjdC0+cXVhbnRpemUgPT0ganNpbWRfcXVhbnRpemUpCisgICAgICAgICAgICBmZGN0LT5xdWFudGl6ZSA9IHF1YW50aXplOworI2Vsc2UKKyAgICAgICAgICBkdGJsW2ldID0gKERDVEVMRU0pCisgICAgICAgICAgICBERVNDQUxFKE1VTFRJUExZMTZWMTYoKEpMT05HKXF0YmwtPnF1YW50dmFsW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKTE9ORylhYW5zY2FsZXNbaV0pLAorICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTIC0gMyk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgICAgY2FzZSBKRENUX0ZMT0FUOgorICAgICAgeworICAgICAgICAvKiBGb3IgZmxvYXQgQUEmTiBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbgorICAgICAgICAgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUKKyAgICAgICAgICogICBzY2FsZWZhY3RvclswXSA9IDEKKyAgICAgICAgICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNworICAgICAgICAgKiBXZSBhcHBseSBhIGZ1cnRoZXIgc2NhbGUgZmFjdG9yIG9mIDguCisgICAgICAgICAqIFdoYXQncyBhY3R1YWxseSBzdG9yZWQgaXMgMS9kaXZpc29yIHNvIHRoYXQgdGhlIGlubmVyIGxvb3AgY2FuCisgICAgICAgICAqIHVzZSBhIG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIGEgZGl2aXNpb24uCisgICAgICAgICAqLworICAgICAgICBGQVNUX0ZMT0FUICpmZHRibDsKKyAgICAgICAgaW50IHJvdywgY29sOworICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGFhbnNjYWxlZmFjdG9yW0RDVFNJWkVdID0geworICAgICAgICAgIDEuMCwgMS4zODcwMzk4NDUsIDEuMzA2NTYyOTY1LCAxLjE3NTg3NTYwMiwKKyAgICAgICAgICAxLjAsIDAuNzg1Njk0OTU4LCAwLjU0MTE5NjEwMCwgMC4yNzU4OTkzNzkKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7CisgICAgICAgICAgZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9IChGQVNUX0ZMT0FUICopCisgICAgICAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENUU0laRTIgKiBzaXplb2YoRkFTVF9GTE9BVCkpOworICAgICAgICB9CisgICAgICAgIGZkdGJsID0gZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgRENUU0laRTsgcm93KyspIHsKKyAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IERDVFNJWkU7IGNvbCsrKSB7CisgICAgICAgICAgICBmZHRibFtpXSA9IChGQVNUX0ZMT0FUKQorICAgICAgICAgICAgICAoMS4wIC8gKCgoZG91YmxlKXF0YmwtPnF1YW50dmFsW2ldICoKKyAgICAgICAgICAgICAgICAgICAgICAgYWFuc2NhbGVmYWN0b3Jbcm93XSAqIGFhbnNjYWxlZmFjdG9yW2NvbF0gKiA4LjApKSk7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworCisvKgorICogTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitjb252c2FtcChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgRENURUxFTSAqd29ya3NwYWNlKQoreworICByZWdpc3RlciBEQ1RFTEVNICp3b3Jrc3BhY2VwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGVsZW1wdHI7CisgIHJlZ2lzdGVyIGludCBlbGVtcjsKKworICB3b3Jrc3BhY2VwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoZWxlbXIgPSAwOyBlbGVtciA8IERDVFNJWkU7IGVsZW1yKyspIHsKKyAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbZWxlbXJdICsgc3RhcnRfY29sOworCisjaWYgRENUU0laRSA9PSA4ICAgICAgICAgICAgICAgIC8qIHVucm9sbCB0aGUgaW5uZXIgbG9vcCAqLworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworI2Vsc2UKKyAgICB7CisgICAgICByZWdpc3RlciBpbnQgZWxlbWM7CisgICAgICBmb3IgKGVsZW1jID0gRENUU0laRTsgZWxlbWMgPiAwOyBlbGVtYy0tKQorICAgICAgICAqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKyAgICB9CisjZW5kaWYKKyAgfQorfQorCisKKy8qCisgKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitxdWFudGl6ZShKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywgRENURUxFTSAqd29ya3NwYWNlKQoreworICBpbnQgaTsKKyAgRENURUxFTSB0ZW1wOworICBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9jazsKKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisKKyAgVURDVEVMRU0gcmVjaXAsIGNvcnI7CisgIGludCBzaGlmdDsKKyAgVURDVEVMRU0yIHByb2R1Y3Q7CisKKyAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICB0ZW1wID0gd29ya3NwYWNlW2ldOworICAgIHJlY2lwID0gZGl2aXNvcnNbaSArIERDVFNJWkUyICogMF07CisgICAgY29yciA9ICBkaXZpc29yc1tpICsgRENUU0laRTIgKiAxXTsKKyAgICBzaGlmdCA9IGRpdmlzb3JzW2kgKyBEQ1RTSVpFMiAqIDNdOworCisgICAgaWYgKHRlbXAgPCAwKSB7CisgICAgICB0ZW1wID0gLXRlbXA7CisgICAgICBwcm9kdWN0ID0gKFVEQ1RFTEVNMikodGVtcCArIGNvcnIpICogcmVjaXA7CisgICAgICBwcm9kdWN0ID4+PSBzaGlmdCArIHNpemVvZihEQ1RFTEVNKSAqIDg7CisgICAgICB0ZW1wID0gKERDVEVMRU0pcHJvZHVjdDsKKyAgICAgIHRlbXAgPSAtdGVtcDsKKyAgICB9IGVsc2UgeworICAgICAgcHJvZHVjdCA9IChVRENURUxFTTIpKHRlbXAgKyBjb3JyKSAqIHJlY2lwOworICAgICAgcHJvZHVjdCA+Pj0gc2hpZnQgKyBzaXplb2YoRENURUxFTSkgKiA4OworICAgICAgdGVtcCA9IChEQ1RFTEVNKXByb2R1Y3Q7CisgICAgfQorICAgIG91dHB1dF9wdHJbaV0gPSAoSkNPRUYpdGVtcDsKKyAgfQorCisjZWxzZQorCisgIHJlZ2lzdGVyIERDVEVMRU0gcXZhbDsKKworICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgIHF2YWwgPSBkaXZpc29yc1tpXTsKKyAgICB0ZW1wID0gd29ya3NwYWNlW2ldOworICAgIC8qIERpdmlkZSB0aGUgY29lZmZpY2llbnQgdmFsdWUgYnkgcXZhbCwgZW5zdXJpbmcgcHJvcGVyIHJvdW5kaW5nLgorICAgICAqIFNpbmNlIEMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nIGZvciBuZWdhdGl2ZQorICAgICAqIHF1b3RpZW50cywgd2UgaGF2ZSB0byBmb3JjZSB0aGUgZGl2aWRlbmQgcG9zaXRpdmUgZm9yIHBvcnRhYmlsaXR5LgorICAgICAqCisgICAgICogSW4gbW9zdCBmaWxlcywgYXQgbGVhc3QgaGFsZiBvZiB0aGUgb3V0cHV0IHZhbHVlcyB3aWxsIGJlIHplcm8KKyAgICAgKiAoYXQgZGVmYXVsdCBxdWFudGl6YXRpb24gc2V0dGluZ3MsIG1vcmUgbGlrZSB0aHJlZS1xdWFydGVycy4uLikKKyAgICAgKiBzbyB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhpcyBjYXNlIGlzIGZhc3QuICBPbiBtYW55IG1hY2hpbmVzLAorICAgICAqIGEgY29tcGFyaXNvbiBpcyBlbm91Z2ggY2hlYXBlciB0aGFuIGEgZGl2aWRlIHRvIG1ha2UgYSBzcGVjaWFsIHRlc3QKKyAgICAgKiBhIHdpbi4gIFNpbmNlIGJvdGggaW5wdXRzIHdpbGwgYmUgbm9ubmVnYXRpdmUsIHdlIG5lZWQgb25seSB0ZXN0CisgICAgICogZm9yIGEgPCBiIHRvIGRpc2NvdmVyIHdoZXRoZXIgYS9iIGlzIDAuCisgICAgICogSWYgeW91ciBtYWNoaW5lJ3MgZGl2aXNpb24gaXMgZmFzdCBlbm91Z2gsIGRlZmluZSBGQVNUX0RJVklERS4KKyAgICAgKi8KKyNpZmRlZiBGQVNUX0RJVklERQorI2RlZmluZSBESVZJREVfQlkoYSwgYikgIGEgLz0gYgorI2Vsc2UKKyNkZWZpbmUgRElWSURFX0JZKGEsIGIpICBpZiAoYSA+PSBiKSBhIC89IGI7ICBlbHNlIGEgPSAwCisjZW5kaWYKKyAgICBpZiAodGVtcCA8IDApIHsKKyAgICAgIHRlbXAgPSAtdGVtcDsKKyAgICAgIHRlbXAgKz0gcXZhbCA+PiAxOyAgICAgICAgLyogZm9yIHJvdW5kaW5nICovCisgICAgICBESVZJREVfQlkodGVtcCwgcXZhbCk7CisgICAgICB0ZW1wID0gLXRlbXA7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlbXAgKz0gcXZhbCA+PiAxOyAgICAgICAgLyogZm9yIHJvdW5kaW5nICovCisgICAgICBESVZJREVfQlkodGVtcCwgcXZhbCk7CisgICAgfQorICAgIG91dHB1dF9wdHJbaV0gPSAoSkNPRUYpdGVtcDsKKyAgfQorCisjZW5kaWYKKworfQorCisKKy8qCisgKiBQZXJmb3JtIGZvcndhcmQgRENUIG9uIG9uZSBvciBtb3JlIGJsb2NrcyBvZiBhIGNvbXBvbmVudC4KKyAqCisgKiBUaGUgaW5wdXQgc2FtcGxlcyBhcmUgdGFrZW4gZnJvbSB0aGUgc2FtcGxlX2RhdGFbXSBhcnJheSBzdGFydGluZyBhdAorICogcG9zaXRpb24gc3RhcnRfcm93L3N0YXJ0X2NvbCwgYW5kIG1vdmluZyB0byB0aGUgcmlnaHQgZm9yIGFueSBhZGRpdGlvbmFsCisgKiBibG9ja3MuIFRoZSBxdWFudGl6ZWQgY29lZmZpY2llbnRzIGFyZSByZXR1cm5lZCBpbiBjb2VmX2Jsb2Nrc1tdLgorICovCisKK01FVEhPRERFRih2b2lkKQorZm9yd2FyZF9EQ1Qoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsCisgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsIEpESU1FTlNJT04gbnVtX2Jsb2NrcykKKy8qIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGZvciBpbnRlZ2VyIERDVCBpbXBsZW1lbnRhdGlvbnMuICovCit7CisgIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIGl0IHRpZ2h0bHkuICovCisgIG15X2ZkY3RfcHRyIGZkY3QgPSAobXlfZmRjdF9wdHIpY2luZm8tPmZkY3Q7CisgIERDVEVMRU0gKmRpdmlzb3JzID0gZmRjdC0+ZGl2aXNvcnNbY29tcHB0ci0+cXVhbnRfdGJsX25vXTsKKyAgRENURUxFTSAqd29ya3NwYWNlOworICBKRElNRU5TSU9OIGJpOworCisgIC8qIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lc24ndCBsb29rIHVwIHRoZXNlIGV2ZXJ5IHBhc3MgKi8KKyAgZm9yd2FyZF9EQ1RfbWV0aG9kX3B0ciBkb19kY3QgPSBmZGN0LT5kY3Q7CisgIGNvbnZzYW1wX21ldGhvZF9wdHIgZG9fY29udnNhbXAgPSBmZGN0LT5jb252c2FtcDsKKyAgcXVhbnRpemVfbWV0aG9kX3B0ciBkb19xdWFudGl6ZSA9IGZkY3QtPnF1YW50aXplOworICB3b3Jrc3BhY2UgPSBmZGN0LT53b3Jrc3BhY2U7CisKKyAgc2FtcGxlX2RhdGEgKz0gc3RhcnRfcm93OyAgICAgLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8KKworICBmb3IgKGJpID0gMDsgYmkgPCBudW1fYmxvY2tzOyBiaSsrLCBzdGFydF9jb2wgKz0gRENUU0laRSkgeworICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCisgICAgKCpkb19jb252c2FtcCkgKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7CisKKyAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8KKyAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSk7CisKKyAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8KKyAgICAoKmRvX3F1YW50aXplKSAoY29lZl9ibG9ja3NbYmldLCBkaXZpc29ycywgd29ya3NwYWNlKTsKKyAgfQorfQorCisKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisKK01FVEhPRERFRih2b2lkKQorY29udnNhbXBfZmxvYXQoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7CisgIHJlZ2lzdGVyIEZBU1RfRkxPQVQgKndvcmtzcGFjZXB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgZWxlbXB0cjsKKyAgcmVnaXN0ZXIgaW50IGVsZW1yOworCisgIHdvcmtzcGFjZXB0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChlbGVtciA9IDA7IGVsZW1yIDwgRENUU0laRTsgZWxlbXIrKykgeworICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7CisjaWYgRENUU0laRSA9PSA4ICAgICAgICAgICAgICAgIC8qIHVucm9sbCB0aGUgaW5uZXIgbG9vcCAqLworICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKyAgICAqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKyAgICAqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKyNlbHNlCisgICAgeworICAgICAgcmVnaXN0ZXIgaW50IGVsZW1jOworICAgICAgZm9yIChlbGVtYyA9IERDVFNJWkU7IGVsZW1jID4gMDsgZWxlbWMtLSkKKyAgICAgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisgICAgfQorI2VuZGlmCisgIH0KK30KKworCitNRVRIT0RERUYodm9pZCkKK3F1YW50aXplX2Zsb2F0KEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKmRpdmlzb3JzLAorICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKQoreworICByZWdpc3RlciBGQVNUX0ZMT0FUIHRlbXA7CisgIHJlZ2lzdGVyIGludCBpOworICByZWdpc3RlciBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9jazsKKworICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgIC8qIEFwcGx5IHRoZSBxdWFudGl6YXRpb24gYW5kIHNjYWxpbmcgZmFjdG9yICovCisgICAgdGVtcCA9IHdvcmtzcGFjZVtpXSAqIGRpdmlzb3JzW2ldOworCisgICAgLyogUm91bmQgdG8gbmVhcmVzdCBpbnRlZ2VyLgorICAgICAqIFNpbmNlIEMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nIGZvciBuZWdhdGl2ZQorICAgICAqIHF1b3RpZW50cywgd2UgaGF2ZSB0byBmb3JjZSB0aGUgZGl2aWRlbmQgcG9zaXRpdmUgZm9yIHBvcnRhYmlsaXR5LgorICAgICAqIFRoZSBtYXhpbXVtIGNvZWZmaWNpZW50IHNpemUgaXMgKy0xNksgKGZvciAxMi1iaXQgZGF0YSksIHNvIHRoaXMKKyAgICAgKiBjb2RlIHNob3VsZCB3b3JrIGZvciBlaXRoZXIgMTYtYml0IG9yIDMyLWJpdCBpbnRzLgorICAgICAqLworICAgIG91dHB1dF9wdHJbaV0gPSAoSkNPRUYpKChpbnQpKHRlbXAgKyAoRkFTVF9GTE9BVCkxNjM4NC41KSAtIDE2Mzg0KTsKKyAgfQorfQorCisKK01FVEhPRERFRih2b2lkKQorZm9yd2FyZF9EQ1RfZmxvYXQoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgRENUIGltcGxlbWVudGF0aW9ucy4gKi8KK3sKKyAgLyogVGhpcyByb3V0aW5lIGlzIGhlYXZpbHkgdXNlZCwgc28gaXQncyB3b3J0aCBjb2RpbmcgaXQgdGlnaHRseS4gKi8KKyAgbXlfZmRjdF9wdHIgZmRjdCA9IChteV9mZGN0X3B0ciljaW5mby0+ZmRjdDsKKyAgRkFTVF9GTE9BVCAqZGl2aXNvcnMgPSBmZGN0LT5mbG9hdF9kaXZpc29yc1tjb21wcHRyLT5xdWFudF90Ymxfbm9dOworICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2U7CisgIEpESU1FTlNJT04gYmk7CisKKworICAvKiBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbG9vayB1cCB0aGVzZSBldmVyeSBwYXNzICovCisgIGZsb2F0X0RDVF9tZXRob2RfcHRyIGRvX2RjdCA9IGZkY3QtPmZsb2F0X2RjdDsKKyAgZmxvYXRfY29udnNhbXBfbWV0aG9kX3B0ciBkb19jb252c2FtcCA9IGZkY3QtPmZsb2F0X2NvbnZzYW1wOworICBmbG9hdF9xdWFudGl6ZV9tZXRob2RfcHRyIGRvX3F1YW50aXplID0gZmRjdC0+ZmxvYXRfcXVhbnRpemU7CisgIHdvcmtzcGFjZSA9IGZkY3QtPmZsb2F0X3dvcmtzcGFjZTsKKworICBzYW1wbGVfZGF0YSArPSBzdGFydF9yb3c7ICAgICAvKiBmb2xkIGluIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgb25jZSAqLworCisgIGZvciAoYmkgPSAwOyBiaSA8IG51bV9ibG9ja3M7IGJpKyssIHN0YXJ0X2NvbCArPSBEQ1RTSVpFKSB7CisgICAgLyogTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KKyAgICAoKmRvX2NvbnZzYW1wKSAoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKKworICAgIC8qIFBlcmZvcm0gdGhlIERDVCAqLworICAgICgqZG9fZGN0KSAod29ya3NwYWNlKTsKKworICAgIC8qIFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9ja3NbXSAqLworICAgICgqZG9fcXVhbnRpemUpIChjb2VmX2Jsb2Nrc1tiaV0sIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworICB9Cit9CisKKyNlbmRpZiAvKiBEQ1RfRkxPQVRfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgRkRDVCBtYW5hZ2VyLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfZm9yd2FyZF9kY3Qoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2ZkY3RfcHRyIGZkY3Q7CisgIGludCBpOworCisgIGZkY3QgPSAobXlfZmRjdF9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfZmRjdF9jb250cm9sbGVyKSk7CisgIGNpbmZvLT5mZGN0ID0gKHN0cnVjdCBqcGVnX2ZvcndhcmRfZGN0ICopZmRjdDsKKyAgZmRjdC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2ZkY3RtZ3I7CisKKyAgLyogRmlyc3QgZGV0ZXJtaW5lIHRoZSBEQ1QuLi4gKi8KKyAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgY2FzZSBKRENUX0lTTE9XOgorICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVCA9IGZvcndhcmRfRENUOworICAgIGlmIChqc2ltZF9jYW5fZmRjdF9pc2xvdygpKQorICAgICAgZmRjdC0+ZGN0ID0ganNpbWRfZmRjdF9pc2xvdzsKKyAgICBlbHNlCisgICAgICBmZGN0LT5kY3QgPSBqcGVnX2ZkY3RfaXNsb3c7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9JRkFTVDoKKyAgICBmZGN0LT5wdWIuZm9yd2FyZF9EQ1QgPSBmb3J3YXJkX0RDVDsKKyAgICBpZiAoanNpbWRfY2FuX2ZkY3RfaWZhc3QoKSkKKyAgICAgIGZkY3QtPmRjdCA9IGpzaW1kX2ZkY3RfaWZhc3Q7CisgICAgZWxzZQorICAgICAgZmRjdC0+ZGN0ID0ganBlZ19mZGN0X2lmYXN0OworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfRkxPQVQ6CisgICAgZmRjdC0+cHViLmZvcndhcmRfRENUID0gZm9yd2FyZF9EQ1RfZmxvYXQ7CisgICAgaWYgKGpzaW1kX2Nhbl9mZGN0X2Zsb2F0KCkpCisgICAgICBmZGN0LT5mbG9hdF9kY3QgPSBqc2ltZF9mZGN0X2Zsb2F0OworICAgIGVsc2UKKyAgICAgIGZkY3QtPmZsb2F0X2RjdCA9IGpwZWdfZmRjdF9mbG9hdDsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIC4uLnRoZW4gdGhlIHN1cHBvcnRpbmcgc3RhZ2VzLiAqLworICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfSVNMT1c6CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9JRkFTVDoKKyNlbmRpZgorI2lmIGRlZmluZWQoRENUX0lTTE9XX1NVUFBPUlRFRCkgfHwgZGVmaW5lZChEQ1RfSUZBU1RfU1VQUE9SVEVEKQorICAgIGlmIChqc2ltZF9jYW5fY29udnNhbXAoKSkKKyAgICAgIGZkY3QtPmNvbnZzYW1wID0ganNpbWRfY29udnNhbXA7CisgICAgZWxzZQorICAgICAgZmRjdC0+Y29udnNhbXAgPSBjb252c2FtcDsKKyAgICBpZiAoanNpbWRfY2FuX3F1YW50aXplKCkpCisgICAgICBmZGN0LT5xdWFudGl6ZSA9IGpzaW1kX3F1YW50aXplOworICAgIGVsc2UKKyAgICAgIGZkY3QtPnF1YW50aXplID0gcXVhbnRpemU7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9GTE9BVDoKKyAgICBpZiAoanNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KCkpCisgICAgICBmZGN0LT5mbG9hdF9jb252c2FtcCA9IGpzaW1kX2NvbnZzYW1wX2Zsb2F0OworICAgIGVsc2UKKyAgICAgIGZkY3QtPmZsb2F0X2NvbnZzYW1wID0gY29udnNhbXBfZmxvYXQ7CisgICAgaWYgKGpzaW1kX2Nhbl9xdWFudGl6ZV9mbG9hdCgpKQorICAgICAgZmRjdC0+ZmxvYXRfcXVhbnRpemUgPSBqc2ltZF9xdWFudGl6ZV9mbG9hdDsKKyAgICBlbHNlCisgICAgICBmZGN0LT5mbG9hdF9xdWFudGl6ZSA9IHF1YW50aXplX2Zsb2F0OworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworICAgIGJyZWFrOworICB9CisKKyAgLyogQWxsb2NhdGUgd29ya3NwYWNlIG1lbW9yeSAqLworI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgaWYgKGNpbmZvLT5kY3RfbWV0aG9kID09IEpEQ1RfRkxPQVQpCisgICAgZmRjdC0+ZmxvYXRfd29ya3NwYWNlID0gKEZBU1RfRkxPQVQgKikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRkFTVF9GTE9BVCkgKiBEQ1RTSVpFMik7CisgIGVsc2UKKyNlbmRpZgorICAgIGZkY3QtPndvcmtzcGFjZSA9IChEQ1RFTEVNICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKERDVEVMRU0pICogRENUU0laRTIpOworCisgIC8qIE1hcmsgZGl2aXNvciB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspIHsKKyAgICBmZGN0LT5kaXZpc29yc1tpXSA9IE5VTEw7CisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICAgIGZkY3QtPmZsb2F0X2Rpdmlzb3JzW2ldID0gTlVMTDsKKyNlbmRpZgorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2h1ZmYuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjaHVmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNWExZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2h1ZmYuYwpAQCAtMCwwICsxLDEwODcgQEAKKy8qCisgKiBqY2h1ZmYuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIDIwMTQtMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlldSBEYXJib2lzLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyByb3V0aW5lcy4KKyAqCisgKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBvdXRwdXQgc3VzcGVuc2lvbi4KKyAqIElmIHRoZSBkYXRhIGRlc3RpbmF0aW9uIG1vZHVsZSBkZW1hbmRzIHN1c3BlbnNpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0bworICogYmFjayB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgTUNVLiAgVG8gZG8gdGhpcywgd2UgY29weSBzdGF0ZQorICogdmFyaWFibGVzIGludG8gbG9jYWwgd29ya2luZyBzdG9yYWdlLCBhbmQgdXBkYXRlIHRoZW0gYmFjayB0byB0aGUKKyAqIHBlcm1hbmVudCBKUEVHIG9iamVjdHMgb25seSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhbiBNQ1UuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKgorICogTk9URTogSWYgVVNFX0NMWl9JTlRSSU5TSUMgaXMgZGVmaW5lZCwgdGhlbiBjbHovYnNyIGluc3RydWN0aW9ucyB3aWxsIGJlCisgKiB1c2VkIGZvciBiaXQgY291bnRpbmcgcmF0aGVyIHRoYW4gdGhlIGxvb2t1cCB0YWJsZS4gIFRoaXMgd2lsbCByZWR1Y2UgdGhlCisgKiBtZW1vcnkgZm9vdHByaW50IGJ5IDY0aywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBzb21lIG1vYmlsZSBhcHBsaWNhdGlvbnMKKyAqIHRoYXQgY3JlYXRlIG1hbnkgaXNvbGF0ZWQgaW5zdGFuY2VzIG9mIGxpYmpwZWctdHVyYm8gKHdlYiBicm93c2VycywgZm9yCisgKiBpbnN0YW5jZS4pICBUaGlzIG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlIG9uIHNvbWUgbW9iaWxlIHBsYXRmb3JtcyBhcyB3ZWxsLgorICogVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IG9uIEFSTSBwcm9jZXNzb3JzLCBiZWNhdXNlIHNvbWUgeDg2CisgKiBjaGlwcyBoYXZlIGEgc2xvdyBpbXBsZW1lbnRhdGlvbiBvZiBic3IsIGFuZCB0aGUgdXNlIG9mIGNsei9ic3IgY2Fubm90IGJlCisgKiBzaG93biB0byBoYXZlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0IGV2ZW4gb24gdGhlIHg4NiBjaGlwcyB0aGF0CisgKiBoYXZlIGEgZmFzdCBpbXBsZW1lbnRhdGlvbiBvZiBpdC4gIFdoZW4gYnVpbGRpbmcgZm9yIEFSTXY2LCB5b3UgY2FuCisgKiBleHBsaWNpdGx5IGRpc2FibGUgdGhlIHVzZSBvZiBjbHovYnNyIGJ5IGFkZGluZyAtbXRodW1iIHRvIHRoZSBjb21waWxlcgorICogZmxhZ3MgKHRoaXMgZGVmaW5lcyBfX3RodW1iX18pLgorICovCisKKy8qIE5PVEU6IEJvdGggR0NDIGFuZCBDbGFuZyBkZWZpbmUgX19HTlVDX18gKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIChkZWZpbmVkIF9fYXJtX18gfHwgZGVmaW5lZCBfX2FhcmNoNjRfXykKKyNpZiAhZGVmaW5lZCBfX3RodW1iX18gfHwgZGVmaW5lZCBfX3RodW1iMl9fCisjZGVmaW5lIFVTRV9DTFpfSU5UUklOU0lDCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVVNFX0NMWl9JTlRSSU5TSUMKKyNkZWZpbmUgSlBFR19OQklUU19OT05aRVJPKHgpICAoMzIgLSBfX2J1aWx0aW5fY2x6KHgpKQorI2RlZmluZSBKUEVHX05CSVRTKHgpICAgICAgICAgICh4ID8gSlBFR19OQklUU19OT05aRVJPKHgpIDogMCkKKyNlbHNlCisjaW5jbHVkZSAianBlZ19uYml0c190YWJsZS5oIgorI2RlZmluZSBKUEVHX05CSVRTKHgpICAgICAgICAgIChqcGVnX25iaXRzX3RhYmxlW3hdKQorI2RlZmluZSBKUEVHX05CSVRTX05PTlpFUk8oeCkgIEpQRUdfTkJJVFMoeCkKKyNlbmRpZgorCisKKy8qIEV4cGFuZGVkIGVudHJvcHkgZW5jb2RlciBvYmplY3QgZm9yIEh1ZmZtYW4gZW5jb2RpbmcuCisgKgorICogVGhlIHNhdmFibGVfc3RhdGUgc3VicmVjb3JkIGNvbnRhaW5zIGZpZWxkcyB0aGF0IGNoYW5nZSB3aXRoaW4gYW4gTUNVLAorICogYnV0IG11c3Qgbm90IGJlIHVwZGF0ZWQgcGVybWFuZW50bHkgdW50aWwgd2UgY29tcGxldGUgdGhlIE1DVS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHNpemVfdCBwdXRfYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBiaXQtYWNjdW11bGF0aW9uIGJ1ZmZlciAqLworICBpbnQgcHV0X2JpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICMgb2YgYml0cyBub3cgaW4gaXQgKi8KKyAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgICAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCit9IHNhdmFibGVfc3RhdGU7CisKKy8qIFRoaXMgbWFjcm8gaXMgdG8gd29yayBhcm91bmQgY29tcGlsZXJzIHdpdGggbWlzc2luZyBvciBicm9rZW4KKyAqIHN0cnVjdHVyZSBhc3NpZ25tZW50LiAgWW91J2xsIG5lZWQgdG8gZml4IHRoaXMgY29kZSBpZiB5b3UgaGF2ZQorICogc3VjaCBhIGNvbXBpbGVyIGFuZCB5b3UgY2hhbmdlIE1BWF9DT01QU19JTl9TQ0FOLgorICovCisKKyNpZm5kZWYgTk9fU1RSVUNUX0FTU0lHTgorI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCwgc3JjKSAgKChkZXN0KSA9IChzcmMpKQorI2Vsc2UKKyNpZiBNQVhfQ09NUFNfSU5fU0NBTiA9PSA0CisjZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LCBzcmMpIFwKKyAgKChkZXN0KS5wdXRfYnVmZmVyID0gKHNyYykucHV0X2J1ZmZlciwgXAorICAgKGRlc3QpLnB1dF9iaXRzID0gKHNyYykucHV0X2JpdHMsIFwKKyAgIChkZXN0KS5sYXN0X2RjX3ZhbFswXSA9IChzcmMpLmxhc3RfZGNfdmFsWzBdLCBcCisgICAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAorICAgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwKKyAgIChkZXN0KS5sYXN0X2RjX3ZhbFszXSA9IChzcmMpLmxhc3RfZGNfdmFsWzNdKQorI2VuZGlmCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBzYXZhYmxlX3N0YXRlIHNhdmVkOyAgICAgICAgICAvKiBCaXQgYnVmZmVyICYgREMgc3RhdGUgYXQgc3RhcnQgb2YgTUNVICovCisKKyAgLyogVGhlc2UgZmllbGRzIGFyZSBOT1QgbG9hZGVkIGludG8gbG9jYWwgd29ya2luZyBzdGF0ZS4gKi8KKyAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOyAgLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworICBpbnQgbmV4dF9yZXN0YXJ0X251bTsgICAgICAgICAvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIHRvIHdyaXRlICgwLTcpICovCisKKyAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KKyAgY19kZXJpdmVkX3RibCAqZGNfZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOworICBjX2Rlcml2ZWRfdGJsICphY19kZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107CisKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQgICAgLyogU3RhdGlzdGljcyB0YWJsZXMgZm9yIG9wdGltaXphdGlvbiAqLworICBsb25nICpkY19jb3VudF9wdHJzW05VTV9IVUZGX1RCTFNdOworICBsb25nICphY19jb3VudF9wdHJzW05VTV9IVUZGX1RCTFNdOworI2VuZGlmCisKKyAgaW50IHNpbWQ7Cit9IGh1ZmZfZW50cm9weV9lbmNvZGVyOworCit0eXBlZGVmIGh1ZmZfZW50cm9weV9lbmNvZGVyICpodWZmX2VudHJvcHlfcHRyOworCisvKiBXb3JraW5nIHN0YXRlIHdoaWxlIHdyaXRpbmcgYW4gTUNVLgorICogVGhpcyBzdHJ1Y3QgY29udGFpbnMgYWxsIHRoZSBmaWVsZHMgdGhhdCBhcmUgbmVlZGVkIGJ5IHN1YnJvdXRpbmVzLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSk9DVEVUICpuZXh0X291dHB1dF9ieXRlOyAgICAgLyogPT4gbmV4dCBieXRlIHRvIHdyaXRlIGluIGJ1ZmZlciAqLworICBzaXplX3QgZnJlZV9pbl9idWZmZXI7ICAgICAgICAvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KKyAgc2F2YWJsZV9zdGF0ZSBjdXI7ICAgICAgICAgICAgLyogQ3VycmVudCBiaXQgYnVmZmVyICYgREMgc3RhdGUgKi8KKyAgal9jb21wcmVzc19wdHIgY2luZm87ICAgICAgICAgLyogZHVtcF9idWZmZXIgbmVlZHMgYWNjZXNzIHRvIHRoaXMgKi8KK30gd29ya2luZ19zdGF0ZTsKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfaHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSk7CitNRVRIT0RERUYodm9pZCkgZmluaXNoX3Bhc3NfaHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9nYXRoZXIoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSk7CitNRVRIT0RERUYodm9pZCkgZmluaXNoX3Bhc3NfZ2F0aGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKyNlbmRpZgorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLgorICogSWYgZ2F0aGVyX3N0YXRpc3RpY3MgaXMgVFJVRSwgd2UgZG8gbm90IG91dHB1dCBhbnl0aGluZyBkdXJpbmcgdGhlIHNjYW4sCisgKiBqdXN0IGNvdW50IHRoZSBIdWZmbWFuIHN5bWJvbHMgdXNlZCBhbmQgZ2VuZXJhdGUgSHVmZm1hbiBjb2RlIHRhYmxlcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfaHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCBjaSwgZGN0YmwsIGFjdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGlmIChnYXRoZXJfc3RhdGlzdGljcykgeworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9nYXRoZXI7CisgICAgZW50cm9weS0+cHViLmZpbmlzaF9wYXNzID0gZmluaXNoX3Bhc3NfZ2F0aGVyOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfaHVmZjsKKyAgICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19odWZmOworICB9CisKKyAgZW50cm9weS0+c2ltZCA9IGpzaW1kX2Nhbl9odWZmX2VuY29kZV9vbmVfYmxvY2soKTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgZGN0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CisgICAgYWN0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKSB7CisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECisgICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB0YWJsZSBpbmRleGVzICovCisgICAgICAvKiAobWFrZV9jX2Rlcml2ZWRfdGJsIGRvZXMgdGhpcyBpbiB0aGUgb3RoZXIgcGF0aCkgKi8KKyAgICAgIGlmIChkY3RibCA8IDAgfHwgZGN0YmwgPj0gTlVNX0hVRkZfVEJMUykKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgZGN0YmwpOworICAgICAgaWYgKGFjdGJsIDwgMCB8fCBhY3RibCA+PSBOVU1fSFVGRl9UQkxTKQorICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBhY3RibCk7CisgICAgICAvKiBBbGxvY2F0ZSBhbmQgemVybyB0aGUgc3RhdGlzdGljcyB0YWJsZXMgKi8KKyAgICAgIC8qIE5vdGUgdGhhdCBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIGV4cGVjdHMgMjU3IGVudHJpZXMgaW4gZWFjaCB0YWJsZSEgKi8KKyAgICAgIGlmIChlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSA9PSBOVUxMKQorICAgICAgICBlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSA9IChsb25nICopCisgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTcgKiBzaXplb2YobG9uZykpOworICAgICAgTUVNWkVSTyhlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSwgMjU3ICogc2l6ZW9mKGxvbmcpKTsKKyAgICAgIGlmIChlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSA9PSBOVUxMKQorICAgICAgICBlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSA9IChsb25nICopCisgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTcgKiBzaXplb2YobG9uZykpOworICAgICAgTUVNWkVSTyhlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSwgMjU3ICogc2l6ZW9mKGxvbmcpKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLworICAgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIGEgdGFibGUsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUgKi8KKyAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCBkY3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbZGN0YmxdKTsKKyAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgYWN0YmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2FjdGJsXSk7CisgICAgfQorICAgIC8qIEluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLworICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgIH0KKworICAvKiBJbml0aWFsaXplIGJpdCBidWZmZXIgdG8gZW1wdHkgKi8KKyAgZW50cm9weS0+c2F2ZWQucHV0X2J1ZmZlciA9IDA7CisgIGVudHJvcHktPnNhdmVkLnB1dF9iaXRzID0gMDsKKworICAvKiBJbml0aWFsaXplIHJlc3RhcnQgc3R1ZmYgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKKyAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSA9IDA7Cit9CisKKworLyoKKyAqIENvbXB1dGUgdGhlIGRlcml2ZWQgdmFsdWVzIGZvciBhIEh1ZmZtYW4gdGFibGUuCisgKiBUaGlzIHJvdXRpbmUgYWxzbyBwZXJmb3JtcyBzb21lIHZhbGlkYXRpb24gY2hlY2tzIG9uIHRoZSB0YWJsZS4KKyAqCisgKiBOb3RlIHRoaXMgaXMgYWxzbyB1c2VkIGJ5IGpjcGh1ZmYuYy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKipwZHRibCkKK3sKKyAgSkhVRkZfVEJMICpodGJsOworICBjX2Rlcml2ZWRfdGJsICpkdGJsOworICBpbnQgcCwgaSwgbCwgbGFzdHAsIHNpLCBtYXhzeW1ib2w7CisgIGNoYXIgaHVmZnNpemVbMjU3XTsKKyAgdW5zaWduZWQgaW50IGh1ZmZjb2RlWzI1N107CisgIHVuc2lnbmVkIGludCBjb2RlOworCisgIC8qIE5vdGUgdGhhdCBodWZmc2l6ZVtdIGFuZCBodWZmY29kZVtdIGFyZSBmaWxsZWQgaW4gY29kZS1sZW5ndGggb3JkZXIsCisgICAqIHBhcmFsbGVsaW5nIHRoZSBvcmRlciBvZiB0aGUgc3ltYm9scyB0aGVtc2VsdmVzIGluIGh0YmwtPmh1ZmZ2YWxbXS4KKyAgICovCisKKyAgLyogRmluZCB0aGUgaW5wdXQgSHVmZm1hbiB0YWJsZSAqLworICBpZiAodGJsbm8gPCAwIHx8IHRibG5vID49IE5VTV9IVUZGX1RCTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsbm8pOworICBodGJsID0KKyAgICBpc0RDID8gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbdGJsbm9dIDogY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsbm9dOworICBpZiAoaHRibCA9PSBOVUxMKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibG5vKTsKKworICAvKiBBbGxvY2F0ZSBhIHdvcmtzcGFjZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBzby4gKi8KKyAgaWYgKCpwZHRibCA9PSBOVUxMKQorICAgICpwZHRibCA9IChjX2Rlcml2ZWRfdGJsICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNfZGVyaXZlZF90YmwpKTsKKyAgZHRibCA9ICpwZHRibDsKKworICAvKiBGaWd1cmUgQy4xOiBtYWtlIHRhYmxlIG9mIEh1ZmZtYW4gY29kZSBsZW5ndGggZm9yIGVhY2ggc3ltYm9sICovCisKKyAgcCA9IDA7CisgIGZvciAobCA9IDE7IGwgPD0gMTY7IGwrKykgeworICAgIGkgPSAoaW50KWh0YmwtPmJpdHNbbF07CisgICAgaWYgKGkgPCAwIHx8IHAgKyBpID4gMjU2KSAgIC8qIHByb3RlY3QgYWdhaW5zdCB0YWJsZSBvdmVycnVuICovCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsKKyAgICB3aGlsZSAoaS0tKQorICAgICAgaHVmZnNpemVbcCsrXSA9IChjaGFyKWw7CisgIH0KKyAgaHVmZnNpemVbcF0gPSAwOworICBsYXN0cCA9IHA7CisKKyAgLyogRmlndXJlIEMuMjogZ2VuZXJhdGUgdGhlIGNvZGVzIHRoZW1zZWx2ZXMgKi8KKyAgLyogV2UgYWxzbyB2YWxpZGF0ZSB0aGF0IHRoZSBjb3VudHMgcmVwcmVzZW50IGEgbGVnYWwgSHVmZm1hbiBjb2RlIHRyZWUuICovCisKKyAgY29kZSA9IDA7CisgIHNpID0gaHVmZnNpemVbMF07CisgIHAgPSAwOworICB3aGlsZSAoaHVmZnNpemVbcF0pIHsKKyAgICB3aGlsZSAoKChpbnQpaHVmZnNpemVbcF0pID09IHNpKSB7CisgICAgICBodWZmY29kZVtwKytdID0gY29kZTsKKyAgICAgIGNvZGUrKzsKKyAgICB9CisgICAgLyogY29kZSBpcyBub3cgMSBtb3JlIHRoYW4gdGhlIGxhc3QgY29kZSB1c2VkIGZvciBjb2RlbGVuZ3RoIHNpOyBidXQKKyAgICAgKiBpdCBtdXN0IHN0aWxsIGZpdCBpbiBzaSBiaXRzLCBzaW5jZSBubyBjb2RlIGlzIGFsbG93ZWQgdG8gYmUgYWxsIG9uZXMuCisgICAgICovCisgICAgaWYgKCgoSkxPTkcpY29kZSkgPj0gKCgoSkxPTkcpMSkgPDwgc2kpKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisgICAgY29kZSA8PD0gMTsKKyAgICBzaSsrOworICB9CisKKyAgLyogRmlndXJlIEMuMzogZ2VuZXJhdGUgZW5jb2RpbmcgdGFibGVzICovCisgIC8qIFRoZXNlIGFyZSBjb2RlIGFuZCBzaXplIGluZGV4ZWQgYnkgc3ltYm9sIHZhbHVlICovCisKKyAgLyogU2V0IGFsbCBjb2RlbGVzcyBzeW1ib2xzIHRvIGhhdmUgY29kZSBsZW5ndGggMDsKKyAgICogdGhpcyBsZXRzIHVzIGRldGVjdCBkdXBsaWNhdGUgVkFMIGVudHJpZXMgaGVyZSwgYW5kIGxhdGVyCisgICAqIGFsbG93cyBlbWl0X2JpdHMgdG8gZGV0ZWN0IGFueSBhdHRlbXB0IHRvIGVtaXQgc3VjaCBzeW1ib2xzLgorICAgKi8KKyAgTUVNWkVSTyhkdGJsLT5laHVmc2ksIHNpemVvZihkdGJsLT5laHVmc2kpKTsKKworICAvKiBUaGlzIGlzIGFsc28gYSBjb252ZW5pZW50IHBsYWNlIHRvIGNoZWNrIGZvciBvdXQtb2YtcmFuZ2UKKyAgICogYW5kIGR1cGxpY2F0ZWQgVkFMIGVudHJpZXMuICBXZSBhbGxvdyAwLi4yNTUgZm9yIEFDIHN5bWJvbHMKKyAgICogYnV0IG9ubHkgMC4uMTUgZm9yIERDLiAgKFdlIGNvdWxkIGNvbnN0cmFpbiB0aGVtIGZ1cnRoZXIKKyAgICogYmFzZWQgb24gZGF0YSBkZXB0aCBhbmQgbW9kZSwgYnV0IHRoaXMgc2VlbXMgZW5vdWdoLikKKyAgICovCisgIG1heHN5bWJvbCA9IGlzREMgPyAxNSA6IDI1NTsKKworICBmb3IgKHAgPSAwOyBwIDwgbGFzdHA7IHArKykgeworICAgIGkgPSBodGJsLT5odWZmdmFsW3BdOworICAgIGlmIChpIDwgMCB8fCBpID4gbWF4c3ltYm9sIHx8IGR0YmwtPmVodWZzaVtpXSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOworICAgIGR0YmwtPmVodWZjb1tpXSA9IGh1ZmZjb2RlW3BdOworICAgIGR0YmwtPmVodWZzaVtpXSA9IGh1ZmZzaXplW3BdOworICB9Cit9CisKKworLyogT3V0cHV0dGluZyBieXRlcyB0byB0aGUgZmlsZSAqLworCisvKiBFbWl0IGEgYnl0ZSwgdGFraW5nICdhY3Rpb24nIGlmIG11c3Qgc3VzcGVuZC4gKi8KKyNkZWZpbmUgZW1pdF9ieXRlKHN0YXRlLCB2YWwsIGFjdGlvbikgeyBcCisgICooc3RhdGUpLT5uZXh0X291dHB1dF9ieXRlKysgPSAoSk9DVEVUKSh2YWwpOyBcCisgIGlmICgtLShzdGF0ZSktPmZyZWVfaW5fYnVmZmVyID09IDApIFwKKyAgICBpZiAoIWR1bXBfYnVmZmVyKHN0YXRlKSkgXAorICAgICAgeyBhY3Rpb247IH0gXAorfQorCisKK0xPQ0FMKGJvb2xlYW4pCitkdW1wX2J1ZmZlcih3b3JraW5nX3N0YXRlICpzdGF0ZSkKKy8qIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyOyByZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBpZiBtdXN0IHN1c3BlbmQgKi8KK3sKKyAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICpkZXN0ID0gc3RhdGUtPmNpbmZvLT5kZXN0OworCisgIGlmICghKCpkZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyKSAoc3RhdGUtPmNpbmZvKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIC8qIEFmdGVyIGEgc3VjY2Vzc2Z1bCBidWZmZXIgZHVtcCwgbXVzdCByZXNldCBidWZmZXIgcG9pbnRlcnMgKi8KKyAgc3RhdGUtPm5leHRfb3V0cHV0X2J5dGUgPSBkZXN0LT5uZXh0X291dHB1dF9ieXRlOworICBzdGF0ZS0+ZnJlZV9pbl9idWZmZXIgPSBkZXN0LT5mcmVlX2luX2J1ZmZlcjsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyogT3V0cHV0dGluZyBiaXRzIHRvIHRoZSBmaWxlICovCisKKy8qIFRoZXNlIG1hY3JvcyBwZXJmb3JtIHRoZSBzYW1lIHRhc2sgYXMgdGhlIGVtaXRfYml0cygpIGZ1bmN0aW9uIGluIHRoZQorICogb3JpZ2luYWwgbGlianBlZyBjb2RlLiAgSW4gYWRkaXRpb24gdG8gcmVkdWNpbmcgb3ZlcmhlYWQgYnkgZXhwbGljaXRseQorICogaW5saW5pbmcgdGhlIGNvZGUsIGFkZGl0aW9uYWwgcGVyZm9ybWFuY2UgaXMgYWNoaWV2ZWQgYnkgdGFraW5nIGludG8KKyAqIGFjY291bnQgdGhlIHNpemUgb2YgdGhlIGJpdCBidWZmZXIgYW5kIHdhaXRpbmcgdW50aWwgaXQgaXMgYWxtb3N0IGZ1bGwKKyAqIGJlZm9yZSBlbXB0eWluZyBpdC4gIFRoaXMgbW9zdGx5IGJlbmVmaXRzIDY0LWJpdCBwbGF0Zm9ybXMsIHNpbmNlIDYKKyAqIGJ5dGVzIGNhbiBiZSBzdG9yZWQgaW4gYSA2NC1iaXQgYml0IGJ1ZmZlciBiZWZvcmUgaXQgaGFzIHRvIGJlIGVtcHRpZWQuCisgKi8KKworI2RlZmluZSBFTUlUX0JZVEUoKSB7IFwKKyAgSk9DVEVUIGM7IFwKKyAgcHV0X2JpdHMgLT0gODsgXAorICBjID0gKEpPQ1RFVClHRVRKT0NURVQocHV0X2J1ZmZlciA+PiBwdXRfYml0cyk7IFwKKyAgKmJ1ZmZlcisrID0gYzsgXAorICBpZiAoYyA9PSAweEZGKSAgLyogbmVlZCB0byBzdHVmZiBhIHplcm8gYnl0ZT8gKi8gXAorICAgICpidWZmZXIrKyA9IDA7IFwKK30KKworI2RlZmluZSBQVVRfQklUUyhjb2RlLCBzaXplKSB7IFwKKyAgcHV0X2JpdHMgKz0gc2l6ZTsgXAorICBwdXRfYnVmZmVyID0gKHB1dF9idWZmZXIgPDwgc2l6ZSkgfCBjb2RlOyBcCit9CisKKyNkZWZpbmUgQ0hFQ0tCVUYxNSgpIHsgXAorICBpZiAocHV0X2JpdHMgPiAxNSkgeyBcCisgICAgRU1JVF9CWVRFKCkgXAorICAgIEVNSVRfQllURSgpIFwKKyAgfSBcCit9CisKKyNkZWZpbmUgQ0hFQ0tCVUYzMSgpIHsgXAorICBpZiAocHV0X2JpdHMgPiAzMSkgeyBcCisgICAgRU1JVF9CWVRFKCkgXAorICAgIEVNSVRfQllURSgpIFwKKyAgICBFTUlUX0JZVEUoKSBcCisgICAgRU1JVF9CWVRFKCkgXAorICB9IFwKK30KKworI2RlZmluZSBDSEVDS0JVRjQ3KCkgeyBcCisgIGlmIChwdXRfYml0cyA+IDQ3KSB7IFwKKyAgICBFTUlUX0JZVEUoKSBcCisgICAgRU1JVF9CWVRFKCkgXAorICAgIEVNSVRfQllURSgpIFwKKyAgICBFTUlUX0JZVEUoKSBcCisgICAgRU1JVF9CWVRFKCkgXAorICAgIEVNSVRfQllURSgpIFwKKyAgfSBcCit9CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKFNJWkVPRl9TSVpFX1QpCisjZXJyb3IgQ2Fubm90IGRldGVybWluZSB3b3JkIHNpemUKKyNlbmRpZgorCisjaWYgU0laRU9GX1NJWkVfVCA9PSA4IHx8IGRlZmluZWQoX1dJTjY0KQorCisjZGVmaW5lIEVNSVRfQklUUyhjb2RlLCBzaXplKSB7IFwKKyAgQ0hFQ0tCVUY0NygpIFwKKyAgUFVUX0JJVFMoY29kZSwgc2l6ZSkgXAorfQorCisjZGVmaW5lIEVNSVRfQ09ERShjb2RlLCBzaXplKSB7IFwKKyAgdGVtcDIgJj0gKCgoSkxPTkcpMSkgPDwgbmJpdHMpIC0gMTsgXAorICBDSEVDS0JVRjMxKCkgXAorICBQVVRfQklUUyhjb2RlLCBzaXplKSBcCisgIFBVVF9CSVRTKHRlbXAyLCBuYml0cykgXAorfQorCisjZWxzZQorCisjZGVmaW5lIEVNSVRfQklUUyhjb2RlLCBzaXplKSB7IFwKKyAgUFVUX0JJVFMoY29kZSwgc2l6ZSkgXAorICBDSEVDS0JVRjE1KCkgXAorfQorCisjZGVmaW5lIEVNSVRfQ09ERShjb2RlLCBzaXplKSB7IFwKKyAgdGVtcDIgJj0gKCgoSkxPTkcpMSkgPDwgbmJpdHMpIC0gMTsgXAorICBQVVRfQklUUyhjb2RlLCBzaXplKSBcCisgIENIRUNLQlVGMTUoKSBcCisgIFBVVF9CSVRTKHRlbXAyLCBuYml0cykgXAorICBDSEVDS0JVRjE1KCkgXAorfQorCisjZW5kaWYKKworCisvKiBBbHRob3VnaCBpdCBpcyBleGNlZWRpbmdseSByYXJlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBIdWZmbWFuLWVuY29kZWQKKyAqIGNvZWZmaWNpZW50IGJsb2NrIHRvIGJlIGxhcmdlciB0aGFuIHRoZSAxMjgtYnl0ZSB1bmVuY29kZWQgYmxvY2suICBGb3IgZWFjaAorICogb2YgdGhlIDY0IGNvZWZmaWNpZW50cywgUFVUX0JJVFMgaXMgaW52b2tlZCB0d2ljZSwgYW5kIGVhY2ggaW52b2NhdGlvbiBjYW4KKyAqIHRoZW9yZXRpY2FsbHkgc3RvcmUgMTYgYml0cyAoZm9yIGEgbWF4aW11bSBvZiAyMDQ4IGJpdHMgb3IgMjU2IGJ5dGVzIHBlcgorICogZW5jb2RlZCBibG9jay4pICBJZiwgZm9yIGluc3RhbmNlLCBvbmUgYXJ0aWZpY2lhbGx5IHNldHMgdGhlIEFDCisgKiBjb2VmZmljaWVudHMgdG8gYWx0ZXJuYXRpbmcgdmFsdWVzIG9mIDMyNzY3IGFuZCAtMzI3NjggKHVzaW5nIHRoZSBKUEVHCisgKiBzY2FubmluZyBvcmRlci0tIDEsIDgsIDE2LCBldGMuKSwgdGhlbiB0aGlzIHdpbGwgcHJvZHVjZSBhbiBlbmNvZGVkIGJsb2NrCisgKiBsYXJnZXIgdGhhbiAyMDAgYnl0ZXMuCisgKi8KKyNkZWZpbmUgQlVGU0laRSAgKERDVFNJWkUyICogNCkKKworI2RlZmluZSBMT0FEX0JVRkZFUigpIHsgXAorICBpZiAoc3RhdGUtPmZyZWVfaW5fYnVmZmVyIDwgQlVGU0laRSkgeyBcCisgICAgbG9jYWxidWYgPSAxOyBcCisgICAgYnVmZmVyID0gX2J1ZmZlcjsgXAorICB9IGVsc2UgXAorICAgIGJ1ZmZlciA9IHN0YXRlLT5uZXh0X291dHB1dF9ieXRlOyBcCit9CisKKyNkZWZpbmUgU1RPUkVfQlVGRkVSKCkgeyBcCisgIGlmIChsb2NhbGJ1ZikgeyBcCisgICAgYnl0ZXMgPSBidWZmZXIgLSBfYnVmZmVyOyBcCisgICAgYnVmZmVyID0gX2J1ZmZlcjsgXAorICAgIHdoaWxlIChieXRlcyA+IDApIHsgXAorICAgICAgYnl0ZXN0b2NvcHkgPSBNSU4oYnl0ZXMsIHN0YXRlLT5mcmVlX2luX2J1ZmZlcik7IFwKKyAgICAgIE1FTUNPUFkoc3RhdGUtPm5leHRfb3V0cHV0X2J5dGUsIGJ1ZmZlciwgYnl0ZXN0b2NvcHkpOyBcCisgICAgICBzdGF0ZS0+bmV4dF9vdXRwdXRfYnl0ZSArPSBieXRlc3RvY29weTsgXAorICAgICAgYnVmZmVyICs9IGJ5dGVzdG9jb3B5OyBcCisgICAgICBzdGF0ZS0+ZnJlZV9pbl9idWZmZXIgLT0gYnl0ZXN0b2NvcHk7IFwKKyAgICAgIGlmIChzdGF0ZS0+ZnJlZV9pbl9idWZmZXIgPT0gMCkgXAorICAgICAgICBpZiAoIWR1bXBfYnVmZmVyKHN0YXRlKSkgcmV0dXJuIEZBTFNFOyBcCisgICAgICBieXRlcyAtPSBieXRlc3RvY29weTsgXAorICAgIH0gXAorICB9IGVsc2UgeyBcCisgICAgc3RhdGUtPmZyZWVfaW5fYnVmZmVyIC09IChidWZmZXIgLSBzdGF0ZS0+bmV4dF9vdXRwdXRfYnl0ZSk7IFwKKyAgICBzdGF0ZS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGJ1ZmZlcjsgXAorICB9IFwKK30KKworCitMT0NBTChib29sZWFuKQorZmx1c2hfYml0cyh3b3JraW5nX3N0YXRlICpzdGF0ZSkKK3sKKyAgSk9DVEVUIF9idWZmZXJbQlVGU0laRV0sICpidWZmZXI7CisgIHNpemVfdCBwdXRfYnVmZmVyOyAgaW50IHB1dF9iaXRzOworICBzaXplX3QgYnl0ZXMsIGJ5dGVzdG9jb3B5OyAgaW50IGxvY2FsYnVmID0gMDsKKworICBwdXRfYnVmZmVyID0gc3RhdGUtPmN1ci5wdXRfYnVmZmVyOworICBwdXRfYml0cyA9IHN0YXRlLT5jdXIucHV0X2JpdHM7CisgIExPQURfQlVGRkVSKCkKKworICAvKiBmaWxsIGFueSBwYXJ0aWFsIGJ5dGUgd2l0aCBvbmVzICovCisgIFBVVF9CSVRTKDB4N0YsIDcpCisgIHdoaWxlIChwdXRfYml0cyA+PSA4KSBFTUlUX0JZVEUoKQorCisgIHN0YXRlLT5jdXIucHV0X2J1ZmZlciA9IDA7ICAgIC8qIGFuZCByZXNldCBiaXQtYnVmZmVyIHRvIGVtcHR5ICovCisgIHN0YXRlLT5jdXIucHV0X2JpdHMgPSAwOworICBTVE9SRV9CVUZGRVIoKQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qIEVuY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLworCitMT0NBTChib29sZWFuKQorZW5jb2RlX29uZV9ibG9ja19zaW1kKHdvcmtpbmdfc3RhdGUgKnN0YXRlLCBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAorICAgICAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgSk9DVEVUIF9idWZmZXJbQlVGU0laRV0sICpidWZmZXI7CisgIHNpemVfdCBieXRlcywgYnl0ZXN0b2NvcHk7ICBpbnQgbG9jYWxidWYgPSAwOworCisgIExPQURfQlVGRkVSKCkKKworICBidWZmZXIgPSBqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2soc3RhdGUsIGJ1ZmZlciwgYmxvY2ssIGxhc3RfZGNfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0YmwsIGFjdGJsKTsKKworICBTVE9SRV9CVUZGRVIoKQorCisgIHJldHVybiBUUlVFOworfQorCitMT0NBTChib29sZWFuKQorZW5jb2RlX29uZV9ibG9jayh3b3JraW5nX3N0YXRlICpzdGF0ZSwgSkNPRUZQVFIgYmxvY2ssIGludCBsYXN0X2RjX3ZhbCwKKyAgICAgICAgICAgICAgICAgY19kZXJpdmVkX3RibCAqZGN0YmwsIGNfZGVyaXZlZF90YmwgKmFjdGJsKQoreworICBpbnQgdGVtcCwgdGVtcDIsIHRlbXAzOworICBpbnQgbmJpdHM7CisgIGludCByLCBjb2RlLCBzaXplOworICBKT0NURVQgX2J1ZmZlcltCVUZTSVpFXSwgKmJ1ZmZlcjsKKyAgc2l6ZV90IHB1dF9idWZmZXI7ICBpbnQgcHV0X2JpdHM7CisgIGludCBjb2RlXzB4ZjAgPSBhY3RibC0+ZWh1ZmNvWzB4ZjBdLCBzaXplXzB4ZjAgPSBhY3RibC0+ZWh1ZnNpWzB4ZjBdOworICBzaXplX3QgYnl0ZXMsIGJ5dGVzdG9jb3B5OyAgaW50IGxvY2FsYnVmID0gMDsKKworICBwdXRfYnVmZmVyID0gc3RhdGUtPmN1ci5wdXRfYnVmZmVyOworICBwdXRfYml0cyA9IHN0YXRlLT5jdXIucHV0X2JpdHM7CisgIExPQURfQlVGRkVSKCkKKworICAvKiBFbmNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgcGVyIHNlY3Rpb24gRi4xLjIuMSAqLworCisgIHRlbXAgPSB0ZW1wMiA9IGJsb2NrWzBdIC0gbGFzdF9kY192YWw7CisKKyAgLyogVGhpcyBpcyBhIHdlbGwta25vd24gdGVjaG5pcXVlIGZvciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlIHdpdGhvdXQgYQorICAgKiBicmFuY2guICBJdCBpcyBkZXJpdmVkIGZyb20gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgdGVjaG5pcXVlIHByZXNlbnRlZCBpbgorICAgKiAiSG93IHRvIE9wdGltaXplIGZvciB0aGUgUGVudGl1bSBQcm9jZXNzb3JzIiwgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IGJ5CisgICAqIEFnbmVyIEZvZy4KKyAgICovCisgIHRlbXAzID0gdGVtcCA+PiAoQ0hBUl9CSVQgKiBzaXplb2YoaW50KSAtIDEpOworICB0ZW1wIF49IHRlbXAzOworICB0ZW1wIC09IHRlbXAzOworCisgIC8qIEZvciBhIG5lZ2F0aXZlIGlucHV0LCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhpbnB1dCkgKi8KKyAgLyogVGhpcyBjb2RlIGFzc3VtZXMgd2UgYXJlIG9uIGEgdHdvJ3MgY29tcGxlbWVudCBtYWNoaW5lICovCisgIHRlbXAyICs9IHRlbXAzOworCisgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgbmJpdHMgPSBKUEVHX05CSVRTKHRlbXApOworCisgIC8qIEVtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgY29kZSA9IGRjdGJsLT5laHVmY29bbmJpdHNdOworICBzaXplID0gZGN0YmwtPmVodWZzaVtuYml0c107CisgIEVNSVRfQklUUyhjb2RlLCBzaXplKQorCisgIC8qIE1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8KKyAgdGVtcDIgJj0gKCgoSkxPTkcpMSkgPDwgbmJpdHMpIC0gMTsKKworICAvKiBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwgKi8KKyAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCisgIEVNSVRfQklUUyh0ZW1wMiwgbmJpdHMpCisKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRi4xLjIuMiAqLworCisgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisKKy8qIE1hbnVhbGx5IHVucm9sbCB0aGUgayBsb29wIHRvIGVsaW1pbmF0ZSB0aGUgY291bnRlciB2YXJpYWJsZS4gIFRoaXMKKyAqIGltcHJvdmVzIHBlcmZvcm1hbmNlIGdyZWF0bHkgb24gc3lzdGVtcyB3aXRoIGEgbGltaXRlZCBudW1iZXIgb2YKKyAqIHJlZ2lzdGVycyAoc3VjaCBhcyB4ODYuKQorICovCisjZGVmaW5lIGtsb29wKGpwZWdfbmF0dXJhbF9vcmRlcl9vZl9rKSB7IFwKKyAgaWYgKCh0ZW1wID0gYmxvY2tbanBlZ19uYXR1cmFsX29yZGVyX29mX2tdKSA9PSAwKSB7IFwKKyAgICByKys7IFwKKyAgfSBlbHNlIHsgXAorICAgIHRlbXAyID0gdGVtcDsgXAorICAgIC8qIEJyYW5jaC1sZXNzIGFic29sdXRlIHZhbHVlLCBiaXR3aXNlIGNvbXBsZW1lbnQsIGV0Yy4sIHNhbWUgYXMgYWJvdmUgKi8gXAorICAgIHRlbXAzID0gdGVtcCA+PiAoQ0hBUl9CSVQgKiBzaXplb2YoaW50KSAtIDEpOyBcCisgICAgdGVtcCBePSB0ZW1wMzsgXAorICAgIHRlbXAgLT0gdGVtcDM7IFwKKyAgICB0ZW1wMiArPSB0ZW1wMzsgXAorICAgIG5iaXRzID0gSlBFR19OQklUU19OT05aRVJPKHRlbXApOyBcCisgICAgLyogaWYgcnVuIGxlbmd0aCA+IDE1LCBtdXN0IGVtaXQgc3BlY2lhbCBydW4tbGVuZ3RoLTE2IGNvZGVzICgweEYwKSAqLyBcCisgICAgd2hpbGUgKHIgPiAxNSkgeyBcCisgICAgICBFTUlUX0JJVFMoY29kZV8weGYwLCBzaXplXzB4ZjApIFwKKyAgICAgIHIgLT0gMTY7IFwKKyAgICB9IFwKKyAgICAvKiBFbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8gXAorICAgIHRlbXAzID0gKHIgPDwgNCkgKyBuYml0czsgXAorICAgIGNvZGUgPSBhY3RibC0+ZWh1ZmNvW3RlbXAzXTsgXAorICAgIHNpemUgPSBhY3RibC0+ZWh1ZnNpW3RlbXAzXTsgXAorICAgIEVNSVRfQ09ERShjb2RlLCBzaXplKSBcCisgICAgciA9IDA7IFwKKyAgfSBcCit9CisKKyAgLyogT25lIGl0ZXJhdGlvbiBmb3IgZWFjaCB2YWx1ZSBpbiBqcGVnX25hdHVyYWxfb3JkZXJbXSAqLworICBrbG9vcCgxKTsgICBrbG9vcCg4KTsgICBrbG9vcCgxNik7ICBrbG9vcCg5KTsgICBrbG9vcCgyKTsgICBrbG9vcCgzKTsKKyAga2xvb3AoMTApOyAga2xvb3AoMTcpOyAga2xvb3AoMjQpOyAga2xvb3AoMzIpOyAga2xvb3AoMjUpOyAga2xvb3AoMTgpOworICBrbG9vcCgxMSk7ICBrbG9vcCg0KTsgICBrbG9vcCg1KTsgICBrbG9vcCgxMik7ICBrbG9vcCgxOSk7ICBrbG9vcCgyNik7CisgIGtsb29wKDMzKTsgIGtsb29wKDQwKTsgIGtsb29wKDQ4KTsgIGtsb29wKDQxKTsgIGtsb29wKDM0KTsgIGtsb29wKDI3KTsKKyAga2xvb3AoMjApOyAga2xvb3AoMTMpOyAga2xvb3AoNik7ICAga2xvb3AoNyk7ICAga2xvb3AoMTQpOyAga2xvb3AoMjEpOworICBrbG9vcCgyOCk7ICBrbG9vcCgzNSk7ICBrbG9vcCg0Mik7ICBrbG9vcCg0OSk7ICBrbG9vcCg1Nik7ICBrbG9vcCg1Nyk7CisgIGtsb29wKDUwKTsgIGtsb29wKDQzKTsgIGtsb29wKDM2KTsgIGtsb29wKDI5KTsgIGtsb29wKDIyKTsgIGtsb29wKDE1KTsKKyAga2xvb3AoMjMpOyAga2xvb3AoMzApOyAga2xvb3AoMzcpOyAga2xvb3AoNDQpOyAga2xvb3AoNTEpOyAga2xvb3AoNTgpOworICBrbG9vcCg1OSk7ICBrbG9vcCg1Mik7ICBrbG9vcCg0NSk7ICBrbG9vcCgzOCk7ICBrbG9vcCgzMSk7ICBrbG9vcCgzOSk7CisgIGtsb29wKDQ2KTsgIGtsb29wKDUzKTsgIGtsb29wKDYwKTsgIGtsb29wKDYxKTsgIGtsb29wKDU0KTsgIGtsb29wKDQ3KTsKKyAga2xvb3AoNTUpOyAga2xvb3AoNjIpOyAga2xvb3AoNjMpOworCisgIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovCisgIGlmIChyID4gMCkgeworICAgIGNvZGUgPSBhY3RibC0+ZWh1ZmNvWzBdOworICAgIHNpemUgPSBhY3RibC0+ZWh1ZnNpWzBdOworICAgIEVNSVRfQklUUyhjb2RlLCBzaXplKQorICB9CisKKyAgc3RhdGUtPmN1ci5wdXRfYnVmZmVyID0gcHV0X2J1ZmZlcjsKKyAgc3RhdGUtPmN1ci5wdXRfYml0cyA9IHB1dF9iaXRzOworICBTVE9SRV9CVUZGRVIoKQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBFbWl0IGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIHByZWRpY3Rpb25zLgorICovCisKK0xPQ0FMKGJvb2xlYW4pCitlbWl0X3Jlc3RhcnQod29ya2luZ19zdGF0ZSAqc3RhdGUsIGludCByZXN0YXJ0X251bSkKK3sKKyAgaW50IGNpOworCisgIGlmICghZmx1c2hfYml0cyhzdGF0ZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGVtaXRfYnl0ZShzdGF0ZSwgMHhGRiwgcmV0dXJuIEZBTFNFKTsKKyAgZW1pdF9ieXRlKHN0YXRlLCBKUEVHX1JTVDAgKyByZXN0YXJ0X251bSwgcmV0dXJuIEZBTFNFKTsKKworICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgZm9yIChjaSA9IDA7IGNpIDwgc3RhdGUtPmNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQorICAgIHN0YXRlLT5jdXIubGFzdF9kY192YWxbY2ldID0gMDsKKworICAvKiBUaGUgcmVzdGFydCBjb3VudGVyIGlzIG5vdCB1cGRhdGVkIHVudGlsIHdlIHN1Y2Nlc3NmdWxseSB3cml0ZSB0aGUgTUNVLiAqLworCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBFbmNvZGUgYW5kIG91dHB1dCBvbmUgTUNVJ3Mgd29ydGggb2YgSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfaHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIHdvcmtpbmdfc3RhdGUgc3RhdGU7CisgIGludCBibGtuLCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgc3RhdGUubmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOworICBzdGF0ZS5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsKKyAgQVNTSUdOX1NUQVRFKHN0YXRlLmN1ciwgZW50cm9weS0+c2F2ZWQpOworICBzdGF0ZS5jaW5mbyA9IGNpbmZvOworCisgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgaWYgKCFlbWl0X3Jlc3RhcnQoJnN0YXRlLCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgLyogRW5jb2RlIHRoZSBNQ1UgZGF0YSBibG9ja3MgKi8KKyAgaWYgKGVudHJvcHktPnNpbWQpIHsKKyAgICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgaWYgKCFlbmNvZGVfb25lX2Jsb2NrX3NpbWQoJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNVX2RhdGFbYmxrbl1bMF0sIHN0YXRlLmN1ci5sYXN0X2RjX3ZhbFtjaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbY29tcHB0ci0+ZGNfdGJsX25vXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5hY190Ymxfbm9dKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgLyogVXBkYXRlIGxhc3RfZGNfdmFsICovCisgICAgICBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldID0gTUNVX2RhdGFbYmxrbl1bMF1bMF07CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgICBpZiAoIWVuY29kZV9vbmVfYmxvY2soJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVV9kYXRhW2Jsa25dWzBdLCBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5kY190Ymxfbm9dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5hY190Ymxfbm9dKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgLyogVXBkYXRlIGxhc3RfZGNfdmFsICovCisgICAgICBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldID0gTUNVX2RhdGFbYmxrbl1bMF1bMF07CisgICAgfQorICB9CisKKyAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gc3RhdGUubmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gc3RhdGUuZnJlZV9pbl9idWZmZXI7CisgIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUuY3VyKTsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgYSBIdWZmbWFuLWNvbXByZXNzZWQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzX2h1ZmYoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICB3b3JraW5nX3N0YXRlIHN0YXRlOworCisgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAuLi4gZmx1c2hfYml0cyBuZWVkcyBpdCAqLworICBzdGF0ZS5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIHN0YXRlLmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOworICBBU1NJR05fU1RBVEUoc3RhdGUuY3VyLCBlbnRyb3B5LT5zYXZlZCk7CisgIHN0YXRlLmNpbmZvID0gY2luZm87CisKKyAgLyogRmx1c2ggb3V0IHRoZSBsYXN0IGRhdGEgKi8KKyAgaWYgKCFmbHVzaF9iaXRzKCZzdGF0ZSkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworCisgIC8qIFVwZGF0ZSBzdGF0ZSAqLworICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IHN0YXRlLm5leHRfb3V0cHV0X2J5dGU7CisgIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IHN0YXRlLmZyZWVfaW5fYnVmZmVyOworICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlLmN1cik7Cit9CisKKworLyoKKyAqIEh1ZmZtYW4gY29kaW5nIG9wdGltaXphdGlvbi4KKyAqCisgKiBXZSBmaXJzdCBzY2FuIHRoZSBzdXBwbGllZCBkYXRhIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgZWFjaCBzeW1ib2wKKyAqIHRoYXQgaXMgdG8gYmUgSHVmZm1hbi1jb2RlZC4gKFRoaXMgcHJvY2VzcyBNVVNUIGFncmVlIHdpdGggdGhlIGNvZGUgYWJvdmUuKQorICogVGhlbiB3ZSBidWlsZCBhIEh1ZmZtYW4gY29kaW5nIHRyZWUgZm9yIHRoZSBvYnNlcnZlZCBjb3VudHMuCisgKiBTeW1ib2xzIHdoaWNoIGFyZSBub3QgbmVlZGVkIGF0IGFsbCBmb3IgdGhlIHBhcnRpY3VsYXIgaW1hZ2UgYXJlIG5vdAorICogYXNzaWduZWQgYW55IGNvZGUsIHdoaWNoIHNhdmVzIHNwYWNlIGluIHRoZSBESFQgbWFya2VyIGFzIHdlbGwgYXMgaW4KKyAqIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgKi8KKworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorCisKKy8qIFByb2Nlc3MgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8KKworTE9DQUwodm9pZCkKK2h0ZXN0X29uZV9ibG9jayhqX2NvbXByZXNzX3B0ciBjaW5mbywgSkNPRUZQVFIgYmxvY2ssIGludCBsYXN0X2RjX3ZhbCwKKyAgICAgICAgICAgICAgICBsb25nIGRjX2NvdW50c1tdLCBsb25nIGFjX2NvdW50c1tdKQoreworICByZWdpc3RlciBpbnQgdGVtcDsKKyAgcmVnaXN0ZXIgaW50IG5iaXRzOworICByZWdpc3RlciBpbnQgaywgcjsKKworICAvKiBFbmNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgcGVyIHNlY3Rpb24gRi4xLjIuMSAqLworCisgIHRlbXAgPSBibG9ja1swXSAtIGxhc3RfZGNfdmFsOworICBpZiAodGVtcCA8IDApCisgICAgdGVtcCA9IC10ZW1wOworCisgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgbmJpdHMgPSAwOworICB3aGlsZSAodGVtcCkgeworICAgIG5iaXRzKys7CisgICAgdGVtcCA+Pj0gMTsKKyAgfQorICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcy4KKyAgICogU2luY2Ugd2UncmUgZW5jb2RpbmcgYSBkaWZmZXJlbmNlLCB0aGUgcmFuZ2UgbGltaXQgaXMgdHdpY2UgYXMgbXVjaC4KKyAgICovCisgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMgKyAxKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKKworICAvKiBDb3VudCB0aGUgSHVmZm1hbiBzeW1ib2wgZm9yIHRoZSBudW1iZXIgb2YgYml0cyAqLworICBkY19jb3VudHNbbmJpdHNdKys7CisKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRi4xLjIuMiAqLworCisgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisKKyAgZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKKyAgICBpZiAoKHRlbXAgPSBibG9ja1tqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7CisgICAgICByKys7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGlmIHJ1biBsZW5ndGggPiAxNSwgbXVzdCBlbWl0IHNwZWNpYWwgcnVuLWxlbmd0aC0xNiBjb2RlcyAoMHhGMCkgKi8KKyAgICAgIHdoaWxlIChyID4gMTUpIHsKKyAgICAgICAgYWNfY291bnRzWzB4RjBdKys7CisgICAgICAgIHIgLT0gMTY7CisgICAgICB9CisKKyAgICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgICAgIGlmICh0ZW1wIDwgMCkKKyAgICAgICAgdGVtcCA9IC10ZW1wOworCisgICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovCisgICAgICBuYml0cyA9IDE7ICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovCisgICAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQorICAgICAgICBuYml0cysrOworICAgICAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBjb2VmZmljaWVudCB2YWx1ZXMgKi8KKyAgICAgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMpCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKKworICAgICAgLyogQ291bnQgSHVmZm1hbiBzeW1ib2wgZm9yIHJ1biBsZW5ndGggLyBudW1iZXIgb2YgYml0cyAqLworICAgICAgYWNfY291bnRzWyhyIDw8IDQpICsgbmJpdHNdKys7CisKKyAgICAgIHIgPSAwOworICAgIH0KKyAgfQorCisgIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovCisgIGlmIChyID4gMCkKKyAgICBhY19jb3VudHNbMF0rKzsKK30KKworCisvKgorICogVHJpYWwtZW5jb2RlIG9uZSBNQ1UncyB3b3J0aCBvZiBIdWZmbWFuLWNvbXByZXNzZWQgY29lZmZpY2llbnRzLgorICogTm8gZGF0YSBpcyBhY3R1YWxseSBvdXRwdXQsIHNvIG5vIHN1c3BlbnNpb24gcmV0dXJuIGlzIHBvc3NpYmxlLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZW5jb2RlX21jdV9nYXRoZXIoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBpbnQgYmxrbiwgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogVGFrZSBjYXJlIG9mIHJlc3RhcnQgaW50ZXJ2YWxzIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgeworICAgICAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykKKyAgICAgICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsKKyAgICAgIC8qIFVwZGF0ZSByZXN0YXJ0IHN0YXRlICovCisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKyAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgIGh0ZXN0X29uZV9ibG9jayhjaW5mbywgTUNVX2RhdGFbYmxrbl1bMF0sIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSwKKyAgICAgICAgICAgICAgICAgICAgZW50cm9weS0+ZGNfY291bnRfcHRyc1tjb21wcHRyLT5kY190Ymxfbm9dLAorICAgICAgICAgICAgICAgICAgICBlbnRyb3B5LT5hY19jb3VudF9wdHJzW2NvbXBwdHItPmFjX3RibF9ub10pOworICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IE1DVV9kYXRhW2Jsa25dWzBdWzBdOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEdlbmVyYXRlIHRoZSBiZXN0IEh1ZmZtYW4gY29kZSB0YWJsZSBmb3IgdGhlIGdpdmVuIGNvdW50cywgZmlsbCBodGJsLgorICogTm90ZSB0aGlzIGlzIGFsc28gdXNlZCBieSBqY3BodWZmLmMuCisgKgorICogVGhlIEpQRUcgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBubyBzeW1ib2wgYmUgYXNzaWduZWQgYSBjb2Rld29yZCBvZiBhbGwKKyAqIG9uZSBiaXRzIChzbyB0aGF0IHBhZGRpbmcgYml0cyBhZGRlZCBhdCB0aGUgZW5kIG9mIGEgY29tcHJlc3NlZCBzZWdtZW50CisgKiBjYW4ndCBsb29rIGxpa2UgYSB2YWxpZCBjb2RlKS4gIEJlY2F1c2Ugb2YgdGhlIGNhbm9uaWNhbCBvcmRlcmluZyBvZgorICogY29kZXdvcmRzLCB0aGlzIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSBtdXN0IGJlIGFuIHVudXNlZCBzbG90IGluIHRoZQorICogbG9uZ2VzdCBjb2Rld29yZCBsZW5ndGggY2F0ZWdvcnkuICBTZWN0aW9uIEsuMiBvZiB0aGUgSlBFRyBzcGVjIHN1Z2dlc3RzCisgKiByZXNlcnZpbmcgc3VjaCBhIHNsb3QgYnkgcHJldGVuZGluZyB0aGF0IHN5bWJvbCAyNTYgaXMgYSB2YWxpZCBzeW1ib2wKKyAqIHdpdGggY291bnQgMS4gIEluIHRoZW9yeSB0aGF0J3Mgbm90IG9wdGltYWw7IGdpdmluZyBpdCBjb3VudCB6ZXJvIGJ1dAorICogaW5jbHVkaW5nIGl0IGluIHRoZSBzeW1ib2wgc2V0IGFueXdheSBzaG91bGQgZ2l2ZSBhIGJldHRlciBIdWZmbWFuIGNvZGUuCisgKiBCdXQgdGhlIHRoZW9yZXRpY2FsbHkgYmV0dGVyIGNvZGUgYWN0dWFsbHkgc2VlbXMgdG8gY29tZSBvdXQgd29yc2UgaW4KKyAqIHByYWN0aWNlLCBiZWNhdXNlIGl0IHByb2R1Y2VzIG1vcmUgYWxsLW9uZXMgYnl0ZXMgKHdoaWNoIGluY3VyIHN0dWZmZWQKKyAqIHplcm8gYnl0ZXMgaW4gdGhlIGZpbmFsIGZpbGUpLiAgSW4gYW55IGNhc2UgdGhlIGRpZmZlcmVuY2UgaXMgdGlueS4KKyAqCisgKiBUaGUgSlBFRyBzdGFuZGFyZCByZXF1aXJlcyBIdWZmbWFuIGNvZGVzIHRvIGJlIG5vIG1vcmUgdGhhbiAxNiBiaXRzIGxvbmcuCisgKiBJZiBzb21lIHN5bWJvbHMgaGF2ZSBhIHZlcnkgc21hbGwgYnV0IG5vbnplcm8gcHJvYmFiaWxpdHksIHRoZSBIdWZmbWFuIHRyZWUKKyAqIG11c3QgYmUgYWRqdXN0ZWQgdG8gbWVldCB0aGUgY29kZSBsZW5ndGggcmVzdHJpY3Rpb24uICBXZSBjdXJyZW50bHkgdXNlCisgKiB0aGUgYWRqdXN0bWVudCBtZXRob2Qgc3VnZ2VzdGVkIGluIEpQRUcgc2VjdGlvbiBLLjIuICBUaGlzIG1ldGhvZCBpcyAqbm90KgorICogb3B0aW1hbDsgaXQgbWF5IG5vdCBjaG9vc2UgdGhlIGJlc3QgcG9zc2libGUgbGltaXRlZC1sZW5ndGggY29kZS4gIEJ1dAorICogdHlwaWNhbGx5IG9ubHkgdmVyeS1sb3ctZnJlcXVlbmN5IHN5bWJvbHMgd2lsbCBiZSBnaXZlbiBsZXNzLXRoYW4tb3B0aW1hbAorICogbGVuZ3Rocywgc28gdGhlIGNvZGUgaXMgYWxtb3N0IG9wdGltYWwuICBFeHBlcmltZW50YWwgY29tcGFyaXNvbnMgYWdhaW5zdAorICogYW4gb3B0aW1hbCBsaW1pdGVkLWxlbmd0aC1jb2RlIGFsZ29yaXRobSBpbmRpY2F0ZSB0aGF0IHRoZSBkaWZmZXJlbmNlIGlzCisgKiBtaWNyb3Njb3BpYyAtLS0gdXN1YWxseSBsZXNzIHRoYW4gYSBodW5kcmVkdGggb2YgYSBwZXJjZW50IG9mIHRvdGFsIHNpemUuCisgKiBTbyB0aGUgZXh0cmEgY29tcGxleGl0eSBvZiBhbiBvcHRpbWFsIGFsZ29yaXRobSBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZ2VuX29wdGltYWxfdGFibGUoal9jb21wcmVzc19wdHIgY2luZm8sIEpIVUZGX1RCTCAqaHRibCwgbG9uZyBmcmVxW10pCit7CisjZGVmaW5lIE1BWF9DTEVOICAzMiAgICAgICAgICAgIC8qIGFzc3VtZWQgbWF4aW11bSBpbml0aWFsIGNvZGUgbGVuZ3RoICovCisgIFVJTlQ4IGJpdHNbTUFYX0NMRU4gKyAxXTsgICAgIC8qIGJpdHNba10gPSAjIG9mIHN5bWJvbHMgd2l0aCBjb2RlIGxlbmd0aCBrICovCisgIGludCBjb2Rlc2l6ZVsyNTddOyAgICAgICAgICAgIC8qIGNvZGVzaXplW2tdID0gY29kZSBsZW5ndGggb2Ygc3ltYm9sIGsgKi8KKyAgaW50IG90aGVyc1syNTddOyAgICAgICAgICAgICAgLyogbmV4dCBzeW1ib2wgaW4gY3VycmVudCBicmFuY2ggb2YgdHJlZSAqLworICBpbnQgYzEsIGMyOworICBpbnQgcCwgaSwgajsKKyAgbG9uZyB2OworCisgIC8qIFRoaXMgYWxnb3JpdGhtIGlzIGV4cGxhaW5lZCBpbiBzZWN0aW9uIEsuMiBvZiB0aGUgSlBFRyBzdGFuZGFyZCAqLworCisgIE1FTVpFUk8oYml0cywgc2l6ZW9mKGJpdHMpKTsKKyAgTUVNWkVSTyhjb2Rlc2l6ZSwgc2l6ZW9mKGNvZGVzaXplKSk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTc7IGkrKykKKyAgICBvdGhlcnNbaV0gPSAtMTsgICAgICAgICAgICAgLyogaW5pdCBsaW5rcyB0byBlbXB0eSAqLworCisgIGZyZXFbMjU2XSA9IDE7ICAgICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSAyNTYgaGFzIGEgbm9uemVybyBjb3VudCAqLworICAvKiBJbmNsdWRpbmcgdGhlIHBzZXVkby1zeW1ib2wgMjU2IGluIHRoZSBIdWZmbWFuIHByb2NlZHVyZSBndWFyYW50ZWVzCisgICAqIHRoYXQgbm8gcmVhbCBzeW1ib2wgaXMgZ2l2ZW4gY29kZS12YWx1ZSBvZiBhbGwgb25lcywgYmVjYXVzZSAyNTYKKyAgICogd2lsbCBiZSBwbGFjZWQgbGFzdCBpbiB0aGUgbGFyZ2VzdCBjb2Rld29yZCBjYXRlZ29yeS4KKyAgICovCisKKyAgLyogSHVmZm1hbidzIGJhc2ljIGFsZ29yaXRobSB0byBhc3NpZ24gb3B0aW1hbCBjb2RlIGxlbmd0aHMgdG8gc3ltYm9scyAqLworCisgIGZvciAoOzspIHsKKyAgICAvKiBGaW5kIHRoZSBzbWFsbGVzdCBub256ZXJvIGZyZXF1ZW5jeSwgc2V0IGMxID0gaXRzIHN5bWJvbCAqLworICAgIC8qIEluIGNhc2Ugb2YgdGllcywgdGFrZSB0aGUgbGFyZ2VyIHN5bWJvbCBudW1iZXIgKi8KKyAgICBjMSA9IC0xOworICAgIHYgPSAxMDAwMDAwMDAwTDsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IDI1NjsgaSsrKSB7CisgICAgICBpZiAoZnJlcVtpXSAmJiBmcmVxW2ldIDw9IHYpIHsKKyAgICAgICAgdiA9IGZyZXFbaV07CisgICAgICAgIGMxID0gaTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaW5kIHRoZSBuZXh0IHNtYWxsZXN0IG5vbnplcm8gZnJlcXVlbmN5LCBzZXQgYzIgPSBpdHMgc3ltYm9sICovCisgICAgLyogSW4gY2FzZSBvZiB0aWVzLCB0YWtlIHRoZSBsYXJnZXIgc3ltYm9sIG51bWJlciAqLworICAgIGMyID0gLTE7CisgICAgdiA9IDEwMDAwMDAwMDBMOworICAgIGZvciAoaSA9IDA7IGkgPD0gMjU2OyBpKyspIHsKKyAgICAgIGlmIChmcmVxW2ldICYmIGZyZXFbaV0gPD0gdiAmJiBpICE9IGMxKSB7CisgICAgICAgIHYgPSBmcmVxW2ldOworICAgICAgICBjMiA9IGk7CisgICAgICB9CisgICAgfQorCisgICAgLyogRG9uZSBpZiB3ZSd2ZSBtZXJnZWQgZXZlcnl0aGluZyBpbnRvIG9uZSBmcmVxdWVuY3kgKi8KKyAgICBpZiAoYzIgPCAwKQorICAgICAgYnJlYWs7CisKKyAgICAvKiBFbHNlIG1lcmdlIHRoZSB0d28gY291bnRzL3RyZWVzICovCisgICAgZnJlcVtjMV0gKz0gZnJlcVtjMl07CisgICAgZnJlcVtjMl0gPSAwOworCisgICAgLyogSW5jcmVtZW50IHRoZSBjb2Rlc2l6ZSBvZiBldmVyeXRoaW5nIGluIGMxJ3MgdHJlZSBicmFuY2ggKi8KKyAgICBjb2Rlc2l6ZVtjMV0rKzsKKyAgICB3aGlsZSAob3RoZXJzW2MxXSA+PSAwKSB7CisgICAgICBjMSA9IG90aGVyc1tjMV07CisgICAgICBjb2Rlc2l6ZVtjMV0rKzsKKyAgICB9CisKKyAgICBvdGhlcnNbYzFdID0gYzI7ICAgICAgICAgICAgLyogY2hhaW4gYzIgb250byBjMSdzIHRyZWUgYnJhbmNoICovCisKKyAgICAvKiBJbmNyZW1lbnQgdGhlIGNvZGVzaXplIG9mIGV2ZXJ5dGhpbmcgaW4gYzIncyB0cmVlIGJyYW5jaCAqLworICAgIGNvZGVzaXplW2MyXSsrOworICAgIHdoaWxlIChvdGhlcnNbYzJdID49IDApIHsKKyAgICAgIGMyID0gb3RoZXJzW2MyXTsKKyAgICAgIGNvZGVzaXplW2MyXSsrOworICAgIH0KKyAgfQorCisgIC8qIE5vdyBjb3VudCB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgb2YgZWFjaCBjb2RlIGxlbmd0aCAqLworICBmb3IgKGkgPSAwOyBpIDw9IDI1NjsgaSsrKSB7CisgICAgaWYgKGNvZGVzaXplW2ldKSB7CisgICAgICAvKiBUaGUgSlBFRyBzdGFuZGFyZCBzZWVtcyB0byB0aGluayB0aGF0IHRoaXMgY2FuJ3QgaGFwcGVuLCAqLworICAgICAgLyogYnV0IEknbSBwYXJhbm9pZC4uLiAqLworICAgICAgaWYgKGNvZGVzaXplW2ldID4gTUFYX0NMRU4pCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSFVGRl9DTEVOX09WRVJGTE9XKTsKKworICAgICAgYml0c1tjb2Rlc2l6ZVtpXV0rKzsKKyAgICB9CisgIH0KKworICAvKiBKUEVHIGRvZXNuJ3QgYWxsb3cgc3ltYm9scyB3aXRoIGNvZGUgbGVuZ3RocyBvdmVyIDE2IGJpdHMsIHNvIGlmIHRoZSBwdXJlCisgICAqIEh1ZmZtYW4gcHJvY2VkdXJlIGFzc2lnbmVkIGFueSBzdWNoIGxlbmd0aHMsIHdlIG11c3QgYWRqdXN0IHRoZSBjb2RpbmcuCisgICAqIEhlcmUgaXMgd2hhdCB0aGUgSlBFRyBzcGVjIHNheXMgYWJvdXQgaG93IHRoaXMgbmV4dCBiaXQgd29ya3M6CisgICAqIFNpbmNlIHN5bWJvbHMgYXJlIHBhaXJlZCBmb3IgdGhlIGxvbmdlc3QgSHVmZm1hbiBjb2RlLCB0aGUgc3ltYm9scyBhcmUKKyAgICogcmVtb3ZlZCBmcm9tIHRoaXMgbGVuZ3RoIGNhdGVnb3J5IHR3byBhdCBhIHRpbWUuICBUaGUgcHJlZml4IGZvciB0aGUgcGFpcgorICAgKiAod2hpY2ggaXMgb25lIGJpdCBzaG9ydGVyKSBpcyBhbGxvY2F0ZWQgdG8gb25lIG9mIHRoZSBwYWlyOyB0aGVuLAorICAgKiBza2lwcGluZyB0aGUgQklUUyBlbnRyeSBmb3IgdGhhdCBwcmVmaXggbGVuZ3RoLCBhIGNvZGUgd29yZCBmcm9tIHRoZSBuZXh0CisgICAqIHNob3J0ZXN0IG5vbnplcm8gQklUUyBlbnRyeSBpcyBjb252ZXJ0ZWQgaW50byBhIHByZWZpeCBmb3IgdHdvIGNvZGUgd29yZHMKKyAgICogb25lIGJpdCBsb25nZXIuCisgICAqLworCisgIGZvciAoaSA9IE1BWF9DTEVOOyBpID4gMTY7IGktLSkgeworICAgIHdoaWxlIChiaXRzW2ldID4gMCkgeworICAgICAgaiA9IGkgLSAyOyAgICAgICAgICAgICAgICAvKiBmaW5kIGxlbmd0aCBvZiBuZXcgcHJlZml4IHRvIGJlIHVzZWQgKi8KKyAgICAgIHdoaWxlIChiaXRzW2pdID09IDApCisgICAgICAgIGotLTsKKworICAgICAgYml0c1tpXSAtPSAyOyAgICAgICAgICAgICAvKiByZW1vdmUgdHdvIHN5bWJvbHMgKi8KKyAgICAgIGJpdHNbaSAtIDFdKys7ICAgICAgICAgICAgLyogb25lIGdvZXMgaW4gdGhpcyBsZW5ndGggKi8KKyAgICAgIGJpdHNbaiArIDFdICs9IDI7ICAgICAgICAgLyogdHdvIG5ldyBzeW1ib2xzIGluIHRoaXMgbGVuZ3RoICovCisgICAgICBiaXRzW2pdLS07ICAgICAgICAgICAgICAgIC8qIHN5bWJvbCBvZiB0aGlzIGxlbmd0aCBpcyBub3cgYSBwcmVmaXggKi8KKyAgICB9CisgIH0KKworICAvKiBSZW1vdmUgdGhlIGNvdW50IGZvciB0aGUgcHNldWRvLXN5bWJvbCAyNTYgZnJvbSB0aGUgbGFyZ2VzdCBjb2RlbGVuZ3RoICovCisgIHdoaWxlIChiaXRzW2ldID09IDApICAgICAgICAgIC8qIGZpbmQgbGFyZ2VzdCBjb2RlbGVuZ3RoIHN0aWxsIGluIHVzZSAqLworICAgIGktLTsKKyAgYml0c1tpXS0tOworCisgIC8qIFJldHVybiBmaW5hbCBzeW1ib2wgY291bnRzIChvbmx5IGZvciBsZW5ndGhzIDAuLjE2KSAqLworICBNRU1DT1BZKGh0YmwtPmJpdHMsIGJpdHMsIHNpemVvZihodGJsLT5iaXRzKSk7CisKKyAgLyogUmV0dXJuIGEgbGlzdCBvZiB0aGUgc3ltYm9scyBzb3J0ZWQgYnkgY29kZSBsZW5ndGggKi8KKyAgLyogSXQncyBub3QgcmVhbCBjbGVhciB0byBtZSB3aHkgd2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciB0aGUgY29kZWxlbmd0aAorICAgKiBjaGFuZ2VzIG1hZGUgYWJvdmUsIGJ1dCB0aGUgSlBFRyBzcGVjIHNlZW1zIHRvIHRoaW5rIHRoaXMgd29ya3MuCisgICAqLworICBwID0gMDsKKyAgZm9yIChpID0gMTsgaSA8PSBNQVhfQ0xFTjsgaSsrKSB7CisgICAgZm9yIChqID0gMDsgaiA8PSAyNTU7IGorKykgeworICAgICAgaWYgKGNvZGVzaXplW2pdID09IGkpIHsKKyAgICAgICAgaHRibC0+aHVmZnZhbFtwXSA9IChVSU5UOClqOworICAgICAgICBwKys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogU2V0IHNlbnRfdGFibGUgRkFMU0Ugc28gdXBkYXRlZCB0YWJsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gSlBFRyBmaWxlLiAqLworICBodGJsLT5zZW50X3RhYmxlID0gRkFMU0U7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhIHN0YXRpc3RpY3MtZ2F0aGVyaW5nIHBhc3MgYW5kIGNyZWF0ZSB0aGUgbmV3IEh1ZmZtYW4gdGFibGVzLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX3Bhc3NfZ2F0aGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgaW50IGNpLCBkY3RibCwgYWN0Ymw7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpIVUZGX1RCTCAqKmh0YmxwdHI7CisgIGJvb2xlYW4gZGlkX2RjW05VTV9IVUZGX1RCTFNdOworICBib29sZWFuIGRpZF9hY1tOVU1fSFVGRl9UQkxTXTsKKworICAvKiBJdCdzIGltcG9ydGFudCBub3QgdG8gYXBwbHkganBlZ19nZW5fb3B0aW1hbF90YWJsZSBtb3JlIHRoYW4gb25jZQorICAgKiBwZXIgdGFibGUsIGJlY2F1c2UgaXQgY2xvYmJlcnMgdGhlIGlucHV0IGZyZXF1ZW5jeSBjb3VudHMhCisgICAqLworICBNRU1aRVJPKGRpZF9kYywgc2l6ZW9mKGRpZF9kYykpOworICBNRU1aRVJPKGRpZF9hYywgc2l6ZW9mKGRpZF9hYykpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICBpZiAoIWRpZF9kY1tkY3RibF0pIHsKKyAgICAgIGh0YmxwdHIgPSAmY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbZGN0YmxdOworICAgICAgaWYgKCpodGJscHRyID09IE5VTEwpCisgICAgICAgICpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAganBlZ19nZW5fb3B0aW1hbF90YWJsZShjaW5mbywgKmh0YmxwdHIsIGVudHJvcHktPmRjX2NvdW50X3B0cnNbZGN0YmxdKTsKKyAgICAgIGRpZF9kY1tkY3RibF0gPSBUUlVFOworICAgIH0KKyAgICBpZiAoIWRpZF9hY1thY3RibF0pIHsKKyAgICAgIGh0YmxwdHIgPSAmY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbYWN0YmxdOworICAgICAgaWYgKCpodGJscHRyID09IE5VTEwpCisgICAgICAgICpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAganBlZ19nZW5fb3B0aW1hbF90YWJsZShjaW5mbywgKmh0YmxwdHIsIGVudHJvcHktPmFjX2NvdW50X3B0cnNbYWN0YmxdKTsKKyAgICAgIGRpZF9hY1thY3RibF0gPSBUUlVFOworICAgIH0KKyAgfQorfQorCisKKyNlbmRpZiAvKiBFTlRST1BZX09QVF9TVVBQT1JURUQgKi8KKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2h1ZmZfZW5jb2RlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5OworICBpbnQgaTsKKworICBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaHVmZl9lbnRyb3B5X2VuY29kZXIpKTsKKyAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICopZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2h1ZmY7CisKKyAgLyogTWFyayB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgeworICAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tpXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tpXSA9IE5VTEw7CisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECisgICAgZW50cm9weS0+ZGNfY291bnRfcHRyc1tpXSA9IGVudHJvcHktPmFjX2NvdW50X3B0cnNbaV0gPSBOVUxMOworI2VuZGlmCisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjaHVmZi5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNodWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0YTIzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjaHVmZi5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBqY2h1ZmYuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgcmVsZXZhbnQKKyAqIHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVjbGFyYXRpb25zIGZvciBIdWZmbWFuIGVudHJvcHkgZW5jb2Rpbmcgcm91dGluZXMKKyAqIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZXF1ZW50aWFsIGVuY29kZXIgKGpjaHVmZi5jKSBhbmQgdGhlCisgKiBwcm9ncmVzc2l2ZSBlbmNvZGVyIChqY3BodWZmLmMpLiAgTm8gb3RoZXIgbW9kdWxlcyBuZWVkIHRvIHNlZSB0aGVzZS4KKyAqLworCisvKiBUaGUgbGVnYWwgcmFuZ2Ugb2YgYSBEQ1QgY29lZmZpY2llbnQgaXMKKyAqICAtMTAyNCAuLiArMTAyMyAgZm9yIDgtYml0IGRhdGE7CisgKiAtMTYzODQgLi4gKzE2MzgzIGZvciAxMi1iaXQgZGF0YS4KKyAqIEhlbmNlIHRoZSBtYWduaXR1ZGUgc2hvdWxkIGFsd2F5cyBmaXQgaW4gMTAgb3IgMTQgYml0cyByZXNwZWN0aXZlbHkuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIE1BWF9DT0VGX0JJVFMgIDEwCisjZWxzZQorI2RlZmluZSBNQVhfQ09FRl9CSVRTICAxNAorI2VuZGlmCisKKy8qIERlcml2ZWQgZGF0YSBjb25zdHJ1Y3RlZCBmb3IgZWFjaCBIdWZmbWFuIHRhYmxlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGVodWZjb1syNTZdOyAgICAgLyogY29kZSBmb3IgZWFjaCBzeW1ib2wgKi8KKyAgY2hhciBlaHVmc2lbMjU2XTsgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovCisgIC8qIElmIG5vIGNvZGUgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciBhIHN5bWJvbCBTLCBlaHVmc2lbU10gY29udGFpbnMgMCAqLworfSBjX2Rlcml2ZWRfdGJsOworCisvKiBFeHBhbmQgYSBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24gaW50byB0aGUgZGVyaXZlZCBmb3JtYXQgKi8KK0VYVEVSTih2b2lkKSBqcGVnX21ha2VfY19kZXJpdmVkX3RibChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc0RDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YmxubywgY19kZXJpdmVkX3RibCAqKnBkdGJsKTsKKworLyogR2VuZXJhdGUgYW4gb3B0aW1hbCB0YWJsZSBkZWZpbml0aW9uIGdpdmVuIHRoZSBzcGVjaWZpZWQgY291bnRzICovCitFWFRFUk4odm9pZCkganBlZ19nZW5fb3B0aW1hbF90YWJsZShqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICpodGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmcmVxW10pOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNpY2MuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjaWNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwMzdmZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjaWNjLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBqY2ljYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTgsIFRob21hcyBHLiBMYW5lLCBUb2RkIE5ld21hbi4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIGNvZGUgdG8gd3JpdGUgSW50ZXJuYXRpb25hbCBDb2xvciBDb25zb3J0aXVtIChJQ0MpIGRldmljZQorICogcHJvZmlsZXMgZW1iZWRkZWQgaW4gSkZJRiBKUEVHIGltYWdlIGZpbGVzLiAgVGhlIElDQyBoYXMgZGVmaW5lZCBhIHN0YW5kYXJkCisgKiBmb3IgaW5jbHVkaW5nIHN1Y2ggZGF0YSBpbiBKUEVHICJBUFAyIiBtYXJrZXJzLiAgVGhlIGNvZGUgZ2l2ZW4gaGVyZSBkb2VzCisgKiBub3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBJQ0MgcHJvZmlsZSBkYXRhOyBpdAorICoganVzdCBrbm93cyBob3cgdG8gZW1iZWQgdGhlIHByb2ZpbGUgZGF0YSBpbiBhIEpQRUcgZmlsZSB3aGlsZSB3cml0aW5nIGl0LgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZXJyb3IuaCIKKworCisvKgorICogU2luY2UgYW4gSUNDIHByb2ZpbGUgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBKUEVHIG1hcmtlcgorICogKDY0SyksIHdlIG5lZWQgcHJvdmlzaW9ucyB0byBzcGxpdCBpdCBpbnRvIG11bHRpcGxlIG1hcmtlcnMuICBUaGUgZm9ybWF0CisgKiBkZWZpbmVkIGJ5IHRoZSBJQ0Mgc3BlY2lmaWVzIG9uZSBvciBtb3JlIEFQUDIgbWFya2VycyBjb250YWluaW5nIHRoZQorICogZm9sbG93aW5nIGRhdGE6CisgKiAgICAgIElkZW50aWZ5aW5nIHN0cmluZyAgICAgIEFTQ0lJICJJQ0NfUFJPRklMRVwwIiAgKDEyIGJ5dGVzKQorICogICAgICBNYXJrZXIgc2VxdWVuY2UgbnVtYmVyICAxIGZvciBmaXJzdCBBUFAyLCAyIGZvciBuZXh0LCBldGMgKDEgYnl0ZSkKKyAqICAgICAgTnVtYmVyIG9mIG1hcmtlcnMgICAgICAgVG90YWwgbnVtYmVyIG9mIEFQUDIncyB1c2VkICgxIGJ5dGUpCisgKiAgICAgIFByb2ZpbGUgZGF0YSAgICAgICAgICAgIChyZW1haW5kZXIgb2YgQVBQMiBkYXRhKQorICogRGVjb2RlcnMgc2hvdWxkIHVzZSB0aGUgbWFya2VyIHNlcXVlbmNlIG51bWJlcnMgdG8gcmVhc3NlbWJsZSB0aGUgcHJvZmlsZSwKKyAqIHJhdGhlciB0aGFuIGFzc3VtaW5nIHRoYXQgdGhlIEFQUDIgbWFya2VycyBhcHBlYXIgaW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2UuCisgKi8KKworI2RlZmluZSBJQ0NfTUFSS0VSICAoSlBFR19BUFAwICsgMikgICAgIC8qIEpQRUcgbWFya2VyIGNvZGUgZm9yIElDQyAqLworI2RlZmluZSBJQ0NfT1ZFUkhFQURfTEVOICAxNCAgICAgICAgICAgIC8qIHNpemUgb2Ygbm9uLXByb2ZpbGUgZGF0YSBpbiBBUFAyICovCisjZGVmaW5lIE1BWF9CWVRFU19JTl9NQVJLRVIgIDY1NTMzICAgICAgLyogbWF4aW11bSBkYXRhIGxlbiBvZiBhIEpQRUcgbWFya2VyICovCisjZGVmaW5lIE1BWF9EQVRBX0JZVEVTX0lOX01BUktFUiAgKE1BWF9CWVRFU19JTl9NQVJLRVIgLSBJQ0NfT1ZFUkhFQURfTEVOKQorCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgd3JpdGVzIHRoZSBnaXZlbiBJQ0MgcHJvZmlsZSBkYXRhIGludG8gYSBKUEVHIGZpbGUuICBJdCAqbXVzdCoKKyAqIGJlIGNhbGxlZCBBRlRFUiBjYWxsaW5nIGpwZWdfc3RhcnRfY29tcHJlc3MoKSBhbmQgQkVGT1JFIHRoZSBmaXJzdCBjYWxsIHRvCisgKiBqcGVnX3dyaXRlX3NjYW5saW5lcygpLiAgKFRoaXMgb3JkZXJpbmcgZW5zdXJlcyB0aGF0IHRoZSBBUFAyIG1hcmtlcihzKSB3aWxsCisgKiBhcHBlYXIgYWZ0ZXIgdGhlIFNPSSBhbmQgSkZJRiBvciBBZG9iZSBtYXJrZXJzLCBidXQgYmVmb3JlIGFsbCBlbHNlLikKKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfd3JpdGVfaWNjX3Byb2ZpbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGNvbnN0IEpPQ1RFVCAqaWNjX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWNjX2RhdGFfbGVuKQoreworICB1bnNpZ25lZCBpbnQgbnVtX21hcmtlcnM7ICAgICAvKiB0b3RhbCBudW1iZXIgb2YgbWFya2VycyB3ZSdsbCB3cml0ZSAqLworICBpbnQgY3VyX21hcmtlciA9IDE7ICAgICAgICAgICAvKiBwZXIgc3BlYywgY291bnRpbmcgc3RhcnRzIGF0IDEgKi8KKyAgdW5zaWduZWQgaW50IGxlbmd0aDsgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIGluIHRoaXMgbWFya2VyICovCisKKyAgaWYgKGljY19kYXRhX3B0ciA9PSBOVUxMIHx8IGljY19kYXRhX2xlbiA9PSAwKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA8IENTVEFURV9TQ0FOTklORykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworCisgIC8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG1hcmtlcnMgd2UnbGwgbmVlZCwgcm91bmRpbmcgdXAgb2YgY291cnNlICovCisgIG51bV9tYXJrZXJzID0gaWNjX2RhdGFfbGVuIC8gTUFYX0RBVEFfQllURVNfSU5fTUFSS0VSOworICBpZiAobnVtX21hcmtlcnMgKiBNQVhfREFUQV9CWVRFU19JTl9NQVJLRVIgIT0gaWNjX2RhdGFfbGVuKQorICAgIG51bV9tYXJrZXJzKys7CisKKyAgd2hpbGUgKGljY19kYXRhX2xlbiA+IDApIHsKKyAgICAvKiBsZW5ndGggb2YgcHJvZmlsZSB0byBwdXQgaW4gdGhpcyBtYXJrZXIgKi8KKyAgICBsZW5ndGggPSBpY2NfZGF0YV9sZW47CisgICAgaWYgKGxlbmd0aCA+IE1BWF9EQVRBX0JZVEVTX0lOX01BUktFUikKKyAgICAgIGxlbmd0aCA9IE1BWF9EQVRBX0JZVEVTX0lOX01BUktFUjsKKyAgICBpY2NfZGF0YV9sZW4gLT0gbGVuZ3RoOworCisgICAgLyogV3JpdGUgdGhlIEpQRUcgbWFya2VyIGhlYWRlciAoQVBQMiBjb2RlIGFuZCBtYXJrZXIgbGVuZ3RoKSAqLworICAgIGpwZWdfd3JpdGVfbV9oZWFkZXIoY2luZm8sIElDQ19NQVJLRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShsZW5ndGggKyBJQ0NfT1ZFUkhFQURfTEVOKSk7CisKKyAgICAvKiBXcml0ZSB0aGUgbWFya2VyIGlkZW50aWZ5aW5nIHN0cmluZyAiSUNDX1BST0ZJTEUiIChudWxsLXRlcm1pbmF0ZWQpLiAgV2UKKyAgICAgKiBjb2RlIGl0IGluIHRoaXMgbGVzcy10aGFuLXRyYW5zcGFyZW50IHdheSBzbyB0aGF0IHRoZSBjb2RlIHdvcmtzIGV2ZW4gaWYKKyAgICAgKiB0aGUgbG9jYWwgY2hhcmFjdGVyIHNldCBpcyBub3QgQVNDSUkuCisgICAgICovCisgICAganBlZ193cml0ZV9tX2J5dGUoY2luZm8sIDB4NDkpOworICAgIGpwZWdfd3JpdGVfbV9ieXRlKGNpbmZvLCAweDQzKTsKKyAgICBqcGVnX3dyaXRlX21fYnl0ZShjaW5mbywgMHg0Myk7CisgICAganBlZ193cml0ZV9tX2J5dGUoY2luZm8sIDB4NUYpOworICAgIGpwZWdfd3JpdGVfbV9ieXRlKGNpbmZvLCAweDUwKTsKKyAgICBqcGVnX3dyaXRlX21fYnl0ZShjaW5mbywgMHg1Mik7CisgICAganBlZ193cml0ZV9tX2J5dGUoY2luZm8sIDB4NEYpOworICAgIGpwZWdfd3JpdGVfbV9ieXRlKGNpbmZvLCAweDQ2KTsKKyAgICBqcGVnX3dyaXRlX21fYnl0ZShjaW5mbywgMHg0OSk7CisgICAganBlZ193cml0ZV9tX2J5dGUoY2luZm8sIDB4NEMpOworICAgIGpwZWdfd3JpdGVfbV9ieXRlKGNpbmZvLCAweDQ1KTsKKyAgICBqcGVnX3dyaXRlX21fYnl0ZShjaW5mbywgMHgwKTsKKworICAgIC8qIEFkZCB0aGUgc2VxdWVuY2luZyBpbmZvICovCisgICAganBlZ193cml0ZV9tX2J5dGUoY2luZm8sIGN1cl9tYXJrZXIpOworICAgIGpwZWdfd3JpdGVfbV9ieXRlKGNpbmZvLCAoaW50KW51bV9tYXJrZXJzKTsKKworICAgIC8qIEFkZCB0aGUgcHJvZmlsZSBkYXRhICovCisgICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgICBqcGVnX3dyaXRlX21fYnl0ZShjaW5mbywgKmljY19kYXRhX3B0cik7CisgICAgICBpY2NfZGF0YV9wdHIrKzsKKyAgICB9CisgICAgY3VyX21hcmtlcisrOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2luaXQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWE0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY2luaXQuYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogamNpbml0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciB0aGUgSlBFRyBjb21wcmVzc29yLgorICogVGhpcyByb3V0aW5lIGlzIGluIGNoYXJnZSBvZiBzZWxlY3RpbmcgdGhlIG1vZHVsZXMgdG8gYmUgZXhlY3V0ZWQgYW5kCisgKiBtYWtpbmcgYW4gaW5pdGlhbGl6YXRpb24gY2FsbCB0byBlYWNoIG9uZS4KKyAqCisgKiBMb2dpY2FsbHksIHRoaXMgY29kZSBiZWxvbmdzIGluIGpjbWFzdGVyLmMuICBJdCdzIHNwbGl0IG91dCBiZWNhdXNlCisgKiBsaW5raW5nIHRoaXMgcm91dGluZSBpbXBsaWVzIGxpbmtpbmcgdGhlIGVudGlyZSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorICogRm9yIGEgdHJhbnNjb2Rpbmctb25seSBhcHBsaWNhdGlvbiwgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBqY21hc3Rlci5jCisgKiB3aXRob3V0IGxpbmtpbmcgaW4gdGhlIHdob2xlIGxpYnJhcnkuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGNvbXByZXNzaW9uIG1vZHVsZXMuCisgKiBUaGlzIGlzIGRvbmUgb25jZSBhdCB0aGUgc3RhcnQgb2YgcHJvY2Vzc2luZyBhbiBpbWFnZS4gIFdlIGRldGVybWluZQorICogd2hpY2ggbW9kdWxlcyB3aWxsIGJlIHVzZWQgYW5kIGdpdmUgdGhlbSBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiBjYWxscy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2NvbXByZXNzX21hc3RlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogSW5pdGlhbGl6ZSBtYXN0ZXIgY29udHJvbCAoaW5jbHVkZXMgcGFyYW1ldGVyIGNoZWNraW5nL3Byb2Nlc3NpbmcpICovCisgIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIEZBTFNFIC8qIGZ1bGwgY29tcHJlc3Npb24gKi8pOworCisgIC8qIFByZXByb2Nlc3NpbmcgKi8KKyAgaWYgKCFjaW5mby0+cmF3X2RhdGFfaW4pIHsKKyAgICBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIoY2luZm8pOworICAgIGppbml0X2Rvd25zYW1wbGVyKGNpbmZvKTsKKyAgICBqaW5pdF9jX3ByZXBfY29udHJvbGxlcihjaW5mbywgRkFMU0UgLyogbmV2ZXIgbmVlZCBmdWxsIGJ1ZmZlciBoZXJlICovKTsKKyAgfQorICAvKiBGb3J3YXJkIERDVCAqLworICBqaW5pdF9mb3J3YXJkX2RjdChjaW5mbyk7CisgIC8qIEVudHJvcHkgZW5jb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyNpZmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgICBqaW5pdF9hcml0aF9lbmNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9BUklUSF9OT1RJTVBMKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9lbmNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZW5jb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBOZWVkIGEgZnVsbC1pbWFnZSBjb2VmZmljaWVudCBidWZmZXIgaW4gYW55IG11bHRpLXBhc3MgbW9kZS4gKi8KKyAgamluaXRfY19jb2VmX2NvbnRyb2xsZXIoY2luZm8sIChib29sZWFuKShjaW5mby0+bnVtX3NjYW5zID4gMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpKTsKKyAgamluaXRfY19tYWluX2NvbnRyb2xsZXIoY2luZm8sIEZBTFNFIC8qIG5ldmVyIG5lZWQgZnVsbCBidWZmZXIgaGVyZSAqLyk7CisKKyAgamluaXRfbWFya2VyX3dyaXRlcihjaW5mbyk7CisKKyAgLyogV2UgY2FuIG5vdyB0ZWxsIHRoZSBtZW1vcnkgbWFuYWdlciB0byBhbGxvY2F0ZSB2aXJ0dWFsIGFycmF5cy4gKi8KKyAgKCpjaW5mby0+bWVtLT5yZWFsaXplX3ZpcnRfYXJyYXlzKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisKKyAgLyogV3JpdGUgdGhlIGRhdGFzdHJlYW0gaGVhZGVyIChTT0kpIGltbWVkaWF0ZWx5LgorICAgKiBGcmFtZSBhbmQgc2NhbiBoZWFkZXJzIGFyZSBwb3N0cG9uZWQgdGlsbCBsYXRlci4KKyAgICogVGhpcyBsZXRzIGFwcGxpY2F0aW9uIGluc2VydCBzcGVjaWFsIG1hcmtlcnMgYWZ0ZXIgdGhlIFNPSS4KKyAgICovCisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfZmlsZV9oZWFkZXIpIChjaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY21haW5jdC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNtYWluY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjIzMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNtYWluY3QuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIGpjbWFpbmN0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIEl0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBjb2RlIHJlbGV2YW50CisgKiB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYWluIGJ1ZmZlciBjb250cm9sbGVyIGZvciBjb21wcmVzc2lvbi4KKyAqIFRoZSBtYWluIGJ1ZmZlciBsaWVzIGJldHdlZW4gdGhlIHByZS1wcm9jZXNzb3IgYW5kIHRoZSBKUEVHCisgKiBjb21wcmVzc29yIHByb3BlcjsgaXQgaG9sZHMgZG93bnNhbXBsZWQgZGF0YSBpbiB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NfbWFpbl9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIEpESU1FTlNJT04gY3VyX2lNQ1Vfcm93OyAgICAgIC8qIG51bWJlciBvZiBjdXJyZW50IGlNQ1Ugcm93ICovCisgIEpESU1FTlNJT04gcm93Z3JvdXBfY3RyOyAgICAgIC8qIGNvdW50cyByb3cgZ3JvdXBzIHJlY2VpdmVkIGluIGlNQ1Ugcm93ICovCisgIGJvb2xlYW4gc3VzcGVuZGVkOyAgICAgICAgICAgIC8qIHJlbWVtYmVyIGlmIHdlIHN1c3BlbmRlZCBvdXRwdXQgKi8KKyAgSl9CVUZfTU9ERSBwYXNzX21vZGU7ICAgICAgICAgLyogY3VycmVudCBvcGVyYXRpbmcgbW9kZSAqLworCisgIC8qIElmIHVzaW5nIGp1c3QgYSBzdHJpcCBidWZmZXIsIHRoaXMgcG9pbnRzIHRvIHRoZSBlbnRpcmUgc2V0IG9mIGJ1ZmZlcnMKKyAgICogKHdlIGFsbG9jYXRlIG9uZSBmb3IgZWFjaCBjb21wb25lbnQpLiAgSW4gdGhlIGZ1bGwtaW1hZ2UgY2FzZSwgdGhpcworICAgKiBwb2ludHMgdG8gdGhlIGN1cnJlbnRseSBhY2Nlc3NpYmxlIHN0cmlwcyBvZiB0aGUgdmlydHVhbCBhcnJheXMuCisgICAqLworICBKU0FNUEFSUkFZIGJ1ZmZlcltNQVhfQ09NUE9ORU5UU107Cit9IG15X21haW5fY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9tYWluX2NvbnRyb2xsZXIgKm15X21haW5fcHRyOworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYodm9pZCkgcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsKTsKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX21haW4oal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0ciljaW5mby0+bWFpbjsKKworICAvKiBEbyBub3RoaW5nIGluIHJhdy1kYXRhIG1vZGUuICovCisgIGlmIChjaW5mby0+cmF3X2RhdGFfaW4pCisgICAgcmV0dXJuOworCisgIGlmIChwYXNzX21vZGUgIT0gSkJVRl9QQVNTX1RIUlUpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworCisgIG1haW5fcHRyLT5jdXJfaU1DVV9yb3cgPSAwOyAgIC8qIGluaXRpYWxpemUgY291bnRlcnMgKi8KKyAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CisgIG1haW5fcHRyLT5zdXNwZW5kZWQgPSBGQUxTRTsKKyAgbWFpbl9wdHItPnBhc3NfbW9kZSA9IHBhc3NfbW9kZTsgICAgICAvKiBzYXZlIG1vZGUgZm9yIHVzZSBieSBwcm9jZXNzX2RhdGEgKi8KKyAgbWFpbl9wdHItPnB1Yi5wcm9jZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGFfc2ltcGxlX21haW47Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhLgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgdGhlIHNpbXBsZSBwYXNzLXRocm91Z2ggbW9kZSwKKyAqIHdoZXJlIHdlIGhhdmUgb25seSBhIHN0cmlwIGJ1ZmZlci4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Byb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbihqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsKQoreworICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0ciljaW5mby0+bWFpbjsKKworICB3aGlsZSAobWFpbl9wdHItPmN1cl9pTUNVX3JvdyA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpIHsKKyAgICAvKiBSZWFkIGlucHV0IGRhdGEgaWYgd2UgaGF2ZW4ndCBmaWxsZWQgdGhlIG1haW4gYnVmZmVyIHlldCAqLworICAgIGlmIChtYWluX3B0ci0+cm93Z3JvdXBfY3RyIDwgRENUU0laRSkKKyAgICAgICgqY2luZm8tPnByZXAtPnByZV9wcm9jZXNzX2RhdGEpIChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Jvd3NfYXZhaWwsIG1haW5fcHRyLT5idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1haW5fcHRyLT5yb3dncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pRENUU0laRSk7CisKKyAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgZnVsbCBpTUNVIHJvdyBidWZmZXJlZCwgcmV0dXJuIHRvIGFwcGxpY2F0aW9uIGZvcgorICAgICAqIG1vcmUgZGF0YS4gIE5vdGUgdGhhdCBwcmVwcm9jZXNzb3Igd2lsbCBhbHdheXMgcGFkIHRvIGZpbGwgdGhlIGlNQ1Ugcm93CisgICAgICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UuCisgICAgICovCisgICAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgIT0gRENUU0laRSkKKyAgICAgIHJldHVybjsKKworICAgIC8qIFNlbmQgdGhlIGNvbXBsZXRlZCByb3cgdG8gdGhlIGNvbXByZXNzb3IgKi8KKyAgICBpZiAoISgqY2luZm8tPmNvZWYtPmNvbXByZXNzX2RhdGEpIChjaW5mbywgbWFpbl9wdHItPmJ1ZmZlcikpIHsKKyAgICAgIC8qIElmIGNvbXByZXNzb3IgZGlkIG5vdCBjb25zdW1lIHRoZSB3aG9sZSByb3csIHRoZW4gd2UgbXVzdCBuZWVkIHRvCisgICAgICAgKiBzdXNwZW5kIHByb2Nlc3NpbmcgYW5kIHJldHVybiB0byB0aGUgYXBwbGljYXRpb24uICBJbiB0aGlzIHNpdHVhdGlvbgorICAgICAgICogd2UgcHJldGVuZCB3ZSBkaWRuJ3QgeWV0IGNvbnN1bWUgdGhlIGxhc3QgaW5wdXQgcm93OyBvdGhlcndpc2UsIGlmCisgICAgICAgKiBpdCBoYXBwZW5lZCB0byBiZSB0aGUgbGFzdCByb3cgb2YgdGhlIGltYWdlLCB0aGUgYXBwbGljYXRpb24gd291bGQKKyAgICAgICAqIHRoaW5rIHdlIHdlcmUgZG9uZS4KKyAgICAgICAqLworICAgICAgaWYgKCFtYWluX3B0ci0+c3VzcGVuZGVkKSB7CisgICAgICAgICgqaW5fcm93X2N0ciktLTsKKyAgICAgICAgbWFpbl9wdHItPnN1c3BlbmRlZCA9IFRSVUU7CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIFdlIGRpZCBmaW5pc2ggdGhlIHJvdy4gIFVuZG8gb3VyIGxpdHRsZSBzdXNwZW5zaW9uIGhhY2sgaWYgYSBwcmV2aW91cworICAgICAqIGNhbGwgc3VzcGVuZGVkOyB0aGVuIG1hcmsgdGhlIG1haW4gYnVmZmVyIGVtcHR5LgorICAgICAqLworICAgIGlmIChtYWluX3B0ci0+c3VzcGVuZGVkKSB7CisgICAgICAoKmluX3Jvd19jdHIpKys7CisgICAgICBtYWluX3B0ci0+c3VzcGVuZGVkID0gRkFMU0U7CisgICAgfQorICAgIG1haW5fcHRyLT5yb3dncm91cF9jdHIgPSAwOworICAgIG1haW5fcHRyLT5jdXJfaU1DVV9yb3crKzsKKyAgfQorfQorCisKKy8qCisgKiBJbml0aWFsaXplIG1haW4gYnVmZmVyIGNvbnRyb2xsZXIuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9jX21haW5fY29udHJvbGxlcihqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKQoreworICBteV9tYWluX3B0ciBtYWluX3B0cjsKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIG1haW5fcHRyID0gKG15X21haW5fcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG15X21haW5fY29udHJvbGxlcikpOworICBjaW5mby0+bWFpbiA9IChzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciAqKW1haW5fcHRyOworICBtYWluX3B0ci0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX21haW47CisKKyAgLyogV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBidWZmZXIgaW4gcmF3LWRhdGEgbW9kZS4gKi8KKyAgaWYgKGNpbmZvLT5yYXdfZGF0YV9pbikKKyAgICByZXR1cm47CisKKyAgLyogQ3JlYXRlIHRoZSBidWZmZXIuICBJdCBob2xkcyBkb3duc2FtcGxlZCBkYXRhLCBzbyBlYWNoIGNvbXBvbmVudAorICAgKiBtYXkgYmUgb2YgYSBkaWZmZXJlbnQgc2l6ZS4KKyAgICovCisgIGlmIChuZWVkX2Z1bGxfYnVmZmVyKSB7CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICB9IGVsc2UgeworICAgIC8qIEFsbG9jYXRlIGEgc3RyaXAgYnVmZmVyIGZvciBlYWNoIGNvbXBvbmVudCAqLworICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgIG1haW5fcHRyLT5idWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsCisgICAgICAgICAoSkRJTUVOU0lPTikoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjbWFya2VyLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY21hcmtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWZiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY21hcmtlci5jCkBAIC0wLDAgKzEsNjY0IEBACisvKgorICogamNtYXJrZXIuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwMy0yMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byB3cml0ZSBKUEVHIGRhdGFzdHJlYW0gbWFya2Vycy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKKworCit0eXBlZGVmIGVudW0geyAgICAgICAgICAgICAgICAgIC8qIEpQRUcgbWFya2VyIGNvZGVzICovCisgIE1fU09GMCAgPSAweGMwLAorICBNX1NPRjEgID0gMHhjMSwKKyAgTV9TT0YyICA9IDB4YzIsCisgIE1fU09GMyAgPSAweGMzLAorCisgIE1fU09GNSAgPSAweGM1LAorICBNX1NPRjYgID0gMHhjNiwKKyAgTV9TT0Y3ICA9IDB4YzcsCisKKyAgTV9KUEcgICA9IDB4YzgsCisgIE1fU09GOSAgPSAweGM5LAorICBNX1NPRjEwID0gMHhjYSwKKyAgTV9TT0YxMSA9IDB4Y2IsCisKKyAgTV9TT0YxMyA9IDB4Y2QsCisgIE1fU09GMTQgPSAweGNlLAorICBNX1NPRjE1ID0gMHhjZiwKKworICBNX0RIVCAgID0gMHhjNCwKKworICBNX0RBQyAgID0gMHhjYywKKworICBNX1JTVDAgID0gMHhkMCwKKyAgTV9SU1QxICA9IDB4ZDEsCisgIE1fUlNUMiAgPSAweGQyLAorICBNX1JTVDMgID0gMHhkMywKKyAgTV9SU1Q0ICA9IDB4ZDQsCisgIE1fUlNUNSAgPSAweGQ1LAorICBNX1JTVDYgID0gMHhkNiwKKyAgTV9SU1Q3ICA9IDB4ZDcsCisKKyAgTV9TT0kgICA9IDB4ZDgsCisgIE1fRU9JICAgPSAweGQ5LAorICBNX1NPUyAgID0gMHhkYSwKKyAgTV9EUVQgICA9IDB4ZGIsCisgIE1fRE5MICAgPSAweGRjLAorICBNX0RSSSAgID0gMHhkZCwKKyAgTV9ESFAgICA9IDB4ZGUsCisgIE1fRVhQICAgPSAweGRmLAorCisgIE1fQVBQMCAgPSAweGUwLAorICBNX0FQUDEgID0gMHhlMSwKKyAgTV9BUFAyICA9IDB4ZTIsCisgIE1fQVBQMyAgPSAweGUzLAorICBNX0FQUDQgID0gMHhlNCwKKyAgTV9BUFA1ICA9IDB4ZTUsCisgIE1fQVBQNiAgPSAweGU2LAorICBNX0FQUDcgID0gMHhlNywKKyAgTV9BUFA4ICA9IDB4ZTgsCisgIE1fQVBQOSAgPSAweGU5LAorICBNX0FQUDEwID0gMHhlYSwKKyAgTV9BUFAxMSA9IDB4ZWIsCisgIE1fQVBQMTIgPSAweGVjLAorICBNX0FQUDEzID0gMHhlZCwKKyAgTV9BUFAxNCA9IDB4ZWUsCisgIE1fQVBQMTUgPSAweGVmLAorCisgIE1fSlBHMCAgPSAweGYwLAorICBNX0pQRzEzID0gMHhmZCwKKyAgTV9DT00gICA9IDB4ZmUsCisKKyAgTV9URU0gICA9IDB4MDEsCisKKyAgTV9FUlJPUiA9IDB4MTAwCit9IEpQRUdfTUFSS0VSOworCisKKy8qIFByaXZhdGUgc3RhdGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIHVuc2lnbmVkIGludCBsYXN0X3Jlc3RhcnRfaW50ZXJ2YWw7IC8qIGxhc3QgRFJJIHZhbHVlIGVtaXR0ZWQ7IDAgYWZ0ZXIgU09JICovCit9IG15X21hcmtlcl93cml0ZXI7CisKK3R5cGVkZWYgbXlfbWFya2VyX3dyaXRlciAqbXlfbWFya2VyX3B0cjsKKworCisvKgorICogQmFzaWMgb3V0cHV0IHJvdXRpbmVzLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5zaW9uIHdoaWxlIHdyaXRpbmcgYSBtYXJrZXIuCisgKiBUaGVyZWZvcmUsIGFuIGFwcGxpY2F0aW9uIHVzaW5nIHN1c3BlbnNpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGVyZSBpcworICogZW5vdWdoIGJ1ZmZlciBzcGFjZSBmb3IgdGhlIGluaXRpYWwgbWFya2VycyAodHlwLiA2MDAtNzAwIGJ5dGVzKSBiZWZvcmUKKyAqIGNhbGxpbmcganBlZ19zdGFydF9jb21wcmVzcywgYW5kIGVub3VnaCBzcGFjZSB0byB3cml0ZSB0aGUgdHJhaWxpbmcgRU9JCisgKiAoYSBmZXcgYnl0ZXMpIGJlZm9yZSBjYWxsaW5nIGpwZWdfZmluaXNoX2NvbXByZXNzLiAgTXVsdGlwYXNzIGNvbXByZXNzaW9uCisgKiBtb2RlcyBhcmUgbm90IHN1cHBvcnRlZCBhdCBhbGwgd2l0aCBzdXNwZW5zaW9uLCBzbyB0aG9zZSB0d28gYXJlIHRoZSBvbmx5CisgKiBwb2ludHMgd2hlcmUgbWFya2VycyB3aWxsIGJlIHdyaXR0ZW4uCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfYnl0ZShqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkKKy8qIEVtaXQgYSBieXRlICovCit7CisgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqZGVzdCA9IGNpbmZvLT5kZXN0OworCisgICooZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSkrKyA9IChKT0NURVQpdmFsOworICBpZiAoLS1kZXN0LT5mcmVlX2luX2J1ZmZlciA9PSAwKSB7CisgICAgaWYgKCEoKmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIpIChjaW5mbykpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9tYXJrZXIoal9jb21wcmVzc19wdHIgY2luZm8sIEpQRUdfTUFSS0VSIG1hcmspCisvKiBFbWl0IGEgbWFya2VyIGNvZGUgKi8KK3sKKyAgZW1pdF9ieXRlKGNpbmZvLCAweEZGKTsKKyAgZW1pdF9ieXRlKGNpbmZvLCAoaW50KW1hcmspOworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0XzJieXRlcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbHVlKQorLyogRW1pdCBhIDItYnl0ZSBpbnRlZ2VyOyB0aGVzZSBhcmUgYWx3YXlzIE1TQiBmaXJzdCBpbiBKUEVHIGZpbGVzICovCit7CisgIGVtaXRfYnl0ZShjaW5mbywgKHZhbHVlID4+IDgpICYgMHhGRik7CisgIGVtaXRfYnl0ZShjaW5mbywgdmFsdWUgJiAweEZGKTsKK30KKworCisvKgorICogUm91dGluZXMgdG8gd3JpdGUgc3BlY2lmaWMgbWFya2VyIHR5cGVzLgorICovCisKK0xPQ0FMKGludCkKK2VtaXRfZHF0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgaW5kZXgpCisvKiBFbWl0IGEgRFFUIG1hcmtlciAqLworLyogUmV0dXJucyB0aGUgcHJlY2lzaW9uIHVzZWQgKDAgPSA4Yml0cywgMSA9IDE2Yml0cykgZm9yIGJhc2VsaW5lIGNoZWNraW5nICovCit7CisgIEpRVUFOVF9UQkwgKnF0YmwgPSBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaW5kZXhdOworICBpbnQgcHJlYzsKKyAgaW50IGk7CisKKyAgaWYgKHF0YmwgPT0gTlVMTCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19RVUFOVF9UQUJMRSwgaW5kZXgpOworCisgIHByZWMgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgIGlmIChxdGJsLT5xdWFudHZhbFtpXSA+IDI1NSkKKyAgICAgIHByZWMgPSAxOworICB9CisKKyAgaWYgKCFxdGJsLT5zZW50X3RhYmxlKSB7CisgICAgZW1pdF9tYXJrZXIoY2luZm8sIE1fRFFUKTsKKworICAgIGVtaXRfMmJ5dGVzKGNpbmZvLCBwcmVjID8gRENUU0laRTIgKiAyICsgMSArIDIgOiBEQ1RTSVpFMiArIDEgKyAyKTsKKworICAgIGVtaXRfYnl0ZShjaW5mbywgaW5kZXggKyAocHJlYyA8PCA0KSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgICAgLyogVGhlIHRhYmxlIGVudHJpZXMgbXVzdCBiZSBlbWl0dGVkIGluIHppZ3phZyBvcmRlci4gKi8KKyAgICAgIHVuc2lnbmVkIGludCBxdmFsID0gcXRibC0+cXVhbnR2YWxbanBlZ19uYXR1cmFsX29yZGVyW2ldXTsKKyAgICAgIGlmIChwcmVjKQorICAgICAgICBlbWl0X2J5dGUoY2luZm8sIChpbnQpKHF2YWwgPj4gOCkpOworICAgICAgZW1pdF9ieXRlKGNpbmZvLCAoaW50KShxdmFsICYgMHhGRikpOworICAgIH0KKworICAgIHF0YmwtPnNlbnRfdGFibGUgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHByZWM7Cit9CisKKworTE9DQUwodm9pZCkKK2VtaXRfZGh0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgaW5kZXgsIGJvb2xlYW4gaXNfYWMpCisvKiBFbWl0IGEgREhUIG1hcmtlciAqLworeworICBKSFVGRl9UQkwgKmh0Ymw7CisgIGludCBsZW5ndGgsIGk7CisKKyAgaWYgKGlzX2FjKSB7CisgICAgaHRibCA9IGNpbmZvLT5hY19odWZmX3RibF9wdHJzW2luZGV4XTsKKyAgICBpbmRleCArPSAweDEwOyAgICAgICAgICAgICAgLyogb3V0cHV0IGluZGV4IGhhcyBBQyBiaXQgc2V0ICovCisgIH0gZWxzZSB7CisgICAgaHRibCA9IGNpbmZvLT5kY19odWZmX3RibF9wdHJzW2luZGV4XTsKKyAgfQorCisgIGlmIChodGJsID09IE5VTEwpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgaW5kZXgpOworCisgIGlmICghaHRibC0+c2VudF90YWJsZSkgeworICAgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0RIVCk7CisKKyAgICBsZW5ndGggPSAwOworICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykKKyAgICAgIGxlbmd0aCArPSBodGJsLT5iaXRzW2ldOworCisgICAgZW1pdF8yYnl0ZXMoY2luZm8sIGxlbmd0aCArIDIgKyAxICsgMTYpOworICAgIGVtaXRfYnl0ZShjaW5mbywgaW5kZXgpOworCisgICAgZm9yIChpID0gMTsgaSA8PSAxNjsgaSsrKQorICAgICAgZW1pdF9ieXRlKGNpbmZvLCBodGJsLT5iaXRzW2ldKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgIGVtaXRfYnl0ZShjaW5mbywgaHRibC0+aHVmZnZhbFtpXSk7CisKKyAgICBodGJsLT5zZW50X3RhYmxlID0gVFJVRTsKKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X2RhYyhqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIEVtaXQgYSBEQUMgbWFya2VyICovCisvKiBTaW5jZSB0aGUgdXNlZnVsIGluZm8gaXMgc28gc21hbGwsIHdlIHdhbnQgdG8gZW1pdCBhbGwgdGhlIHRhYmxlcyBpbiAqLworLyogb25lIERBQyBtYXJrZXIuICBUaGVyZWZvcmUgdGhpcyByb3V0aW5lIGRvZXMgaXRzIG93biBzY2FuIG9mIHRoZSB0YWJsZS4gKi8KK3sKKyNpZmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgY2hhciBkY19pbl91c2VbTlVNX0FSSVRIX1RCTFNdOworICBjaGFyIGFjX2luX3VzZVtOVU1fQVJJVEhfVEJMU107CisgIGludCBsZW5ndGgsIGk7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspCisgICAgZGNfaW5fdXNlW2ldID0gYWNfaW5fdXNlW2ldID0gMDsKKworICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGkrKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tpXTsKKyAgICAvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovCisgICAgaWYgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKQorICAgICAgZGNfaW5fdXNlW2NvbXBwdHItPmRjX3RibF9ub10gPSAxOworICAgIC8qIEFDIG5lZWRzIG5vIHRhYmxlIHdoZW4gbm90IHByZXNlbnQgKi8KKyAgICBpZiAoY2luZm8tPlNlKQorICAgICAgYWNfaW5fdXNlW2NvbXBwdHItPmFjX3RibF9ub10gPSAxOworICB9CisKKyAgbGVuZ3RoID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspCisgICAgbGVuZ3RoICs9IGRjX2luX3VzZVtpXSArIGFjX2luX3VzZVtpXTsKKworICBpZiAobGVuZ3RoKSB7CisgICAgZW1pdF9tYXJrZXIoY2luZm8sIE1fREFDKTsKKworICAgIGVtaXRfMmJ5dGVzKGNpbmZvLCBsZW5ndGggKiAyICsgMik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgeworICAgICAgaWYgKGRjX2luX3VzZVtpXSkgeworICAgICAgICBlbWl0X2J5dGUoY2luZm8sIGkpOworICAgICAgICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5hcml0aF9kY19MW2ldICsgKGNpbmZvLT5hcml0aF9kY19VW2ldIDw8IDQpKTsKKyAgICAgIH0KKyAgICAgIGlmIChhY19pbl91c2VbaV0pIHsKKyAgICAgICAgZW1pdF9ieXRlKGNpbmZvLCBpICsgMHgxMCk7CisgICAgICAgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmFyaXRoX2FjX0tbaV0pOworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmIC8qIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X2RyaShqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIEVtaXQgYSBEUkkgbWFya2VyICovCit7CisgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0RSSSk7CisKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDQpOyAgICAgICAgLyogZml4ZWQgbGVuZ3RoICovCisKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpOworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X3NvZihqX2NvbXByZXNzX3B0ciBjaW5mbywgSlBFR19NQVJLRVIgY29kZSkKKy8qIEVtaXQgYSBTT0YgbWFya2VyICovCit7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBlbWl0X21hcmtlcihjaW5mbywgY29kZSk7CisKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDMgKiBjaW5mby0+bnVtX2NvbXBvbmVudHMgKyAyICsgNSArIDEpOyAvKiBsZW5ndGggKi8KKworICAvKiBNYWtlIHN1cmUgaW1hZ2UgaXNuJ3QgYmlnZ2VyIHRoYW4gU09GIGZpZWxkIGNhbiBoYW5kbGUgKi8KKyAgaWYgKChsb25nKWNpbmZvLT5fanBlZ19oZWlnaHQgPiA2NTUzNUwgfHwgKGxvbmcpY2luZm8tPl9qcGVnX3dpZHRoID4gNjU1MzVMKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0lNQUdFX1RPT19CSUcsICh1bnNpZ25lZCBpbnQpNjU1MzUpOworCisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmRhdGFfcHJlY2lzaW9uKTsKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpY2luZm8tPl9qcGVnX2hlaWdodCk7CisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KWNpbmZvLT5fanBlZ193aWR0aCk7CisKKyAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+bnVtX2NvbXBvbmVudHMpOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgZW1pdF9ieXRlKGNpbmZvLCBjb21wcHRyLT5jb21wb25lbnRfaWQpOworICAgIGVtaXRfYnl0ZShjaW5mbywgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgPDwgNCkgKyBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICBlbWl0X2J5dGUoY2luZm8sIGNvbXBwdHItPnF1YW50X3RibF9ubyk7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9zb3Moal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBFbWl0IGEgU09TIG1hcmtlciAqLworeworICBpbnQgaSwgdGQsIHRhOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGVtaXRfbWFya2VyKGNpbmZvLCBNX1NPUyk7CisKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDIgKiBjaW5mby0+Y29tcHNfaW5fc2NhbiArIDIgKyAxICsgMyk7IC8qIGxlbmd0aCAqLworCisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmNvbXBzX2luX3NjYW4pOworCisgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldOworICAgIGVtaXRfYnl0ZShjaW5mbywgY29tcHB0ci0+Y29tcG9uZW50X2lkKTsKKworICAgIC8qIFdlIGVtaXQgMCBmb3IgdW51c2VkIGZpZWxkKHMpOyB0aGlzIGlzIHJlY29tbWVuZGVkIGJ5IHRoZSBQJk0gdGV4dAorICAgICAqIGJ1dCBkb2VzIG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUgc3RhbmRhcmQuCisgICAgICovCisKKyAgICAvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovCisgICAgdGQgPSBjaW5mby0+U3MgPT0gMCAmJiBjaW5mby0+QWggPT0gMCA/IGNvbXBwdHItPmRjX3RibF9ubyA6IDA7CisgICAgLyogQUMgbmVlZHMgbm8gdGFibGUgd2hlbiBub3QgcHJlc2VudCAqLworICAgIHRhID0gY2luZm8tPlNlID8gY29tcHB0ci0+YWNfdGJsX25vIDogMDsKKworICAgIGVtaXRfYnl0ZShjaW5mbywgKHRkIDw8IDQpICsgdGEpOworICB9CisKKyAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+U3MpOworICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5TZSk7CisgIGVtaXRfYnl0ZShjaW5mbywgKGNpbmZvLT5BaCA8PCA0KSArIGNpbmZvLT5BbCk7Cit9CisKKworTE9DQUwodm9pZCkKK2VtaXRfamZpZl9hcHAwKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRW1pdCBhIEpGSUYtY29tcGxpYW50IEFQUDAgbWFya2VyICovCit7CisgIC8qCisgICAqIExlbmd0aCBvZiBBUFAwIGJsb2NrICAgICAgICgyIGJ5dGVzKQorICAgKiBCbG9jayBJRCAgICAgICAgICAgICAgICAgICAoNCBieXRlcyAtIEFTQ0lJICJKRklGIikKKyAgICogWmVybyBieXRlICAgICAgICAgICAgICAgICAgKDEgYnl0ZSB0byB0ZXJtaW5hdGUgdGhlIElEIHN0cmluZykKKyAgICogVmVyc2lvbiBNYWpvciwgTWlub3IgICAgICAgKDIgYnl0ZXMgLSBtYWpvciBmaXJzdCkKKyAgICogVW5pdHMgICAgICAgICAgICAgICAgICAgICAgKDEgYnl0ZSAtIDB4MDAgPSBub25lLCAweDAxID0gaW5jaCwgMHgwMiA9IGNtKQorICAgKiBYZHB1ICAgICAgICAgICAgICAgICAgICAgICAoMiBieXRlcyAtIGRvdHMgcGVyIHVuaXQgaG9yaXpvbnRhbCkKKyAgICogWWRwdSAgICAgICAgICAgICAgICAgICAgICAgKDIgYnl0ZXMgLSBkb3RzIHBlciB1bml0IHZlcnRpY2FsKQorICAgKiBUaHVtYm5haWwgWCBzaXplICAgICAgICAgICAoMSBieXRlKQorICAgKiBUaHVtYm5haWwgWSBzaXplICAgICAgICAgICAoMSBieXRlKQorICAgKi8KKworICBlbWl0X21hcmtlcihjaW5mbywgTV9BUFAwKTsKKworICBlbWl0XzJieXRlcyhjaW5mbywgMiArIDQgKyAxICsgMiArIDEgKyAyICsgMiArIDEgKyAxKTsgLyogbGVuZ3RoICovCisKKyAgZW1pdF9ieXRlKGNpbmZvLCAweDRBKTsgICAgICAgLyogSWRlbnRpZmllcjogQVNDSUkgIkpGSUYiICovCisgIGVtaXRfYnl0ZShjaW5mbywgMHg0Nik7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg0OSk7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg0Nik7CisgIGVtaXRfYnl0ZShjaW5mbywgMCk7CisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbik7IC8qIFZlcnNpb24gZmllbGRzICovCisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbik7CisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmRlbnNpdHlfdW5pdCk7IC8qIFBpeGVsIHNpemUgaW5mb3JtYXRpb24gKi8KKyAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpY2luZm8tPlhfZGVuc2l0eSk7CisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KWNpbmZvLT5ZX2RlbnNpdHkpOworICBlbWl0X2J5dGUoY2luZm8sIDApOyAgICAgICAgICAvKiBObyB0aHVtYm5haWwgaW1hZ2UgKi8KKyAgZW1pdF9ieXRlKGNpbmZvLCAwKTsKK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9hZG9iZV9hcHAxNChqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIEVtaXQgYW4gQWRvYmUgQVBQMTQgbWFya2VyICovCit7CisgIC8qCisgICAqIExlbmd0aCBvZiBBUFAxNCBibG9jayAgICAgICgyIGJ5dGVzKQorICAgKiBCbG9jayBJRCAgICAgICAgICAgICAgICAgICAoNSBieXRlcyAtIEFTQ0lJICJBZG9iZSIpCisgICAqIFZlcnNpb24gTnVtYmVyICAgICAgICAgICAgICgyIGJ5dGVzIC0gY3VycmVudGx5IDEwMCkKKyAgICogRmxhZ3MwICAgICAgICAgICAgICAgICAgICAgKDIgYnl0ZXMgLSBjdXJyZW50bHkgMCkKKyAgICogRmxhZ3MxICAgICAgICAgICAgICAgICAgICAgKDIgYnl0ZXMgLSBjdXJyZW50bHkgMCkKKyAgICogQ29sb3IgdHJhbnNmb3JtICAgICAgICAgICAgKDEgYnl0ZSkKKyAgICoKKyAgICogQWx0aG91Z2ggQWRvYmUgVE4gNTExNiBtZW50aW9ucyBWZXJzaW9uID0gMTAxLCBhbGwgdGhlIEFkb2JlIGZpbGVzCisgICAqIG5vdyBpbiBjaXJjdWxhdGlvbiBzZWVtIHRvIHVzZSBWZXJzaW9uID0gMTAwLCBzbyB0aGF0J3Mgd2hhdCB3ZSB3cml0ZS4KKyAgICoKKyAgICogV2Ugd3JpdGUgdGhlIGNvbG9yIHRyYW5zZm9ybSBieXRlIGFzIDEgaWYgdGhlIEpQRUcgY29sb3Igc3BhY2UgaXMKKyAgICogWUNiQ3IsIDIgaWYgaXQncyBZQ0NLLCAwIG90aGVyd2lzZS4gIEFkb2JlJ3MgZGVmaW5pdGlvbiBoYXMgdG8gZG8gd2l0aAorICAgKiB3aGV0aGVyIHRoZSBlbmNvZGVyIHBlcmZvcm1lZCBhIHRyYW5zZm9ybWF0aW9uLCB3aGljaCBpcyBwcmV0dHkgdXNlbGVzcy4KKyAgICovCisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fQVBQMTQpOworCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICsgNSArIDIgKyAyICsgMiArIDEpOyAvKiBsZW5ndGggKi8KKworICBlbWl0X2J5dGUoY2luZm8sIDB4NDEpOyAgICAgICAvKiBJZGVudGlmaWVyOiBBU0NJSSAiQWRvYmUiICovCisgIGVtaXRfYnl0ZShjaW5mbywgMHg2NCk7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg2Rik7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg2Mik7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg2NSk7CisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAxMDApOyAgICAgIC8qIFZlcnNpb24gKi8KKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDApOyAgICAgICAgLyogRmxhZ3MwICovCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAwKTsgICAgICAgIC8qIEZsYWdzMSAqLworICBzd2l0Y2ggKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGVtaXRfYnl0ZShjaW5mbywgMSk7ICAgICAgICAvKiBDb2xvciB0cmFuc2Zvcm0gPSAxICovCisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1lDQ0s6CisgICAgZW1pdF9ieXRlKGNpbmZvLCAyKTsgICAgICAgIC8qIENvbG9yIHRyYW5zZm9ybSA9IDIgKi8KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBlbWl0X2J5dGUoY2luZm8sIDApOyAgICAgICAgLyogQ29sb3IgdHJhbnNmb3JtID0gMCAqLworICAgIGJyZWFrOworICB9Cit9CisKKworLyoKKyAqIFRoZXNlIHJvdXRpbmVzIGFsbG93IHdyaXRpbmcgYW4gYXJiaXRyYXJ5IG1hcmtlciB3aXRoIHBhcmFtZXRlcnMuCisgKiBUaGUgb25seSBpbnRlbmRlZCB1c2UgaXMgdG8gZW1pdCBDT00gb3IgQVBQbiBtYXJrZXJzIGFmdGVyIGNhbGxpbmcKKyAqIHdyaXRlX2ZpbGVfaGVhZGVyIGFuZCBiZWZvcmUgY2FsbGluZyB3cml0ZV9mcmFtZV9oZWFkZXIuCisgKiBPdGhlciB1c2VzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGRlc2lyYWJsZSByZXN1bHRzLgorICogQ291bnRpbmcgdGhlIHBhcmFtZXRlciBieXRlcyBwcm9wZXJseSBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV9tYXJrZXJfaGVhZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKKy8qIEVtaXQgYW4gYXJiaXRyYXJ5IG1hcmtlciBoZWFkZXIgKi8KK3sKKyAgaWYgKGRhdGFsZW4gPiAodW5zaWduZWQgaW50KTY1NTMzKSAgICAgICAgICAgIC8qIHNhZmV0eSBjaGVjayAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIChKUEVHX01BUktFUiltYXJrZXIpOworCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KShkYXRhbGVuICsgMikpOyAgICAgICAvKiB0b3RhbCBsZW5ndGggKi8KK30KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV9tYXJrZXJfYnl0ZShqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkKKy8qIEVtaXQgb25lIGJ5dGUgb2YgbWFya2VyIHBhcmFtZXRlcnMgZm9sbG93aW5nIHdyaXRlX21hcmtlcl9oZWFkZXIgKi8KK3sKKyAgZW1pdF9ieXRlKGNpbmZvLCB2YWwpOworfQorCisKKy8qCisgKiBXcml0ZSBkYXRhc3RyZWFtIGhlYWRlci4KKyAqIFRoaXMgY29uc2lzdHMgb2YgYW4gU09JIGFuZCBvcHRpb25hbCBBUFBuIG1hcmtlcnMuCisgKiBXZSByZWNvbW1lbmQgdXNlIG9mIHRoZSBKRklGIG1hcmtlciwgYnV0IG5vdCB0aGUgQWRvYmUgbWFya2VyLAorICogd2hlbiB1c2luZyBZQ2JDciBvciBncmF5c2NhbGUgZGF0YS4gIFRoZSBKRklGIG1hcmtlciBzaG91bGQgTk9UCisgKiBiZSB1c2VkIGZvciBhbnkgb3RoZXIgSlBFRyBjb2xvcnNwYWNlLiAgVGhlIEFkb2JlIG1hcmtlciBpcyBoZWxwZnVsCisgKiB0byBkaXN0aW5ndWlzaCBSR0IsIENNWUssIGFuZCBZQ0NLIGNvbG9yc3BhY2VzLgorICogTm90ZSB0aGF0IGFuIGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBhZGRpdGlvbmFsIGhlYWRlciBtYXJrZXJzIGFmdGVyCisgKiBqcGVnX3N0YXJ0X2NvbXByZXNzIHJldHVybnMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV9maWxlX2hlYWRlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFya2VyX3B0ciBtYXJrZXIgPSAobXlfbWFya2VyX3B0ciljaW5mby0+bWFya2VyOworCisgIGVtaXRfbWFya2VyKGNpbmZvLCBNX1NPSSk7ICAgIC8qIGZpcnN0IHRoZSBTT0kgKi8KKworICAvKiBTT0kgaXMgZGVmaW5lZCB0byByZXNldCByZXN0YXJ0IGludGVydmFsIHRvIDAgKi8KKyAgbWFya2VyLT5sYXN0X3Jlc3RhcnRfaW50ZXJ2YWwgPSAwOworCisgIGlmIChjaW5mby0+d3JpdGVfSkZJRl9oZWFkZXIpIC8qIG5leHQgYW4gb3B0aW9uYWwgSkZJRiBBUFAwICovCisgICAgZW1pdF9qZmlmX2FwcDAoY2luZm8pOworICBpZiAoY2luZm8tPndyaXRlX0Fkb2JlX21hcmtlcikgLyogbmV4dCBhbiBvcHRpb25hbCBBZG9iZSBBUFAxNCAqLworICAgIGVtaXRfYWRvYmVfYXBwMTQoY2luZm8pOworfQorCisKKy8qCisgKiBXcml0ZSBmcmFtZSBoZWFkZXIuCisgKiBUaGlzIGNvbnNpc3RzIG9mIERRVCBhbmQgU09GbiBtYXJrZXJzLgorICogTm90ZSB0aGF0IHdlIGRvIG5vdCBlbWl0IHRoZSBTT0YgdW50aWwgd2UgaGF2ZSBlbWl0dGVkIHRoZSBEUVQocykuCisgKiBUaGlzIGF2b2lkcyBjb21wYXRpYmlsaXR5IHByb2JsZW1zIHdpdGggaW5jb3JyZWN0IGltcGxlbWVudGF0aW9ucyB0aGF0CisgKiB0cnkgdG8gZXJyb3ItY2hlY2sgdGhlIHF1YW50IHRhYmxlIG51bWJlcnMgYXMgc29vbiBhcyB0aGV5IHNlZSB0aGUgU09GLgorICovCisKK01FVEhPRERFRih2b2lkKQord3JpdGVfZnJhbWVfaGVhZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgY2ksIHByZWM7CisgIGJvb2xlYW4gaXNfYmFzZWxpbmU7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogRW1pdCBEUVQgZm9yIGVhY2ggcXVhbnRpemF0aW9uIHRhYmxlLgorICAgKiBOb3RlIHRoYXQgZW1pdF9kcXQoKSBzdXBwcmVzc2VzIGFueSBkdXBsaWNhdGUgdGFibGVzLgorICAgKi8KKyAgcHJlYyA9IDA7CisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgcHJlYyArPSBlbWl0X2RxdChjaW5mbywgY29tcHB0ci0+cXVhbnRfdGJsX25vKTsKKyAgfQorICAvKiBub3cgcHJlYyBpcyBub256ZXJvIGlmZiB0aGVyZSBhcmUgYW55IDE2LWJpdCBxdWFudCB0YWJsZXMuICovCisKKyAgLyogQ2hlY2sgZm9yIGEgbm9uLWJhc2VsaW5lIHNwZWNpZmljYXRpb24uCisgICAqIE5vdGUgd2UgYXNzdW1lIHRoYXQgSHVmZm1hbiB0YWJsZSBudW1iZXJzIHdvbid0IGJlIGNoYW5nZWQgbGF0ZXIuCisgICAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUgfHwgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwKKyAgICAgIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiAhPSA4KSB7CisgICAgaXNfYmFzZWxpbmUgPSBGQUxTRTsKKyAgfSBlbHNlIHsKKyAgICBpc19iYXNlbGluZSA9IFRSVUU7CisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgaWYgKGNvbXBwdHItPmRjX3RibF9ubyA+IDEgfHwgY29tcHB0ci0+YWNfdGJsX25vID4gMSkKKyAgICAgICAgaXNfYmFzZWxpbmUgPSBGQUxTRTsKKyAgICB9CisgICAgaWYgKHByZWMgJiYgaXNfYmFzZWxpbmUpIHsKKyAgICAgIGlzX2Jhc2VsaW5lID0gRkFMU0U7CisgICAgICAvKiBJZiBpdCdzIGJhc2VsaW5lIGV4Y2VwdCBmb3IgcXVhbnRpemVyIHNpemUsIHdhcm4gdGhlIHVzZXIgKi8KKyAgICAgIFRSQUNFTVMoY2luZm8sIDAsIEpUUkNfMTZCSVRfVEFCTEVTKTsKKyAgICB9CisgIH0KKworICAvKiBFbWl0IHRoZSBwcm9wZXIgU09GIG1hcmtlciAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCisgICAgICBlbWl0X3NvZihjaW5mbywgTV9TT0YxMCk7IC8qIFNPRiBjb2RlIGZvciBwcm9ncmVzc2l2ZSBhcml0aG1ldGljICovCisgICAgZWxzZQorICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GOSk7ICAvKiBTT0YgY29kZSBmb3Igc2VxdWVudGlhbCBhcml0aG1ldGljICovCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQorICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMik7ICAvKiBTT0YgY29kZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiAqLworICAgIGVsc2UgaWYgKGlzX2Jhc2VsaW5lKQorICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMCk7ICAvKiBTT0YgY29kZSBmb3IgYmFzZWxpbmUgaW1wbGVtZW50YXRpb24gKi8KKyAgICBlbHNlCisgICAgICBlbWl0X3NvZihjaW5mbywgTV9TT0YxKTsgIC8qIFNPRiBjb2RlIGZvciBub24tYmFzZWxpbmUgSHVmZm1hbiBmaWxlICovCisgIH0KK30KKworCisvKgorICogV3JpdGUgc2NhbiBoZWFkZXIuCisgKiBUaGlzIGNvbnNpc3RzIG9mIERIVCBvciBEQUMgbWFya2Vycywgb3B0aW9uYWwgRFJJLCBhbmQgU09TLgorICogQ29tcHJlc3NlZCBkYXRhIHdpbGwgYmUgd3JpdHRlbiBmb2xsb3dpbmcgdGhlIFNPUy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3dyaXRlX3NjYW5faGVhZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKWNpbmZvLT5tYXJrZXI7CisgIGludCBpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSkgeworICAgIC8qIEVtaXQgYXJpdGggY29uZGl0aW9uaW5nIGluZm8uICBXZSBtYXkgaGF2ZSBzb21lIGR1cGxpY2F0aW9uCisgICAgICogaWYgdGhlIGZpbGUgaGFzIG11bHRpcGxlIHNjYW5zLCBidXQgaXQncyBzbyBzbWFsbCBpdCdzIGhhcmRseQorICAgICAqIHdvcnRoIHdvcnJ5aW5nIGFib3V0LgorICAgICAqLworICAgIGVtaXRfZGFjKGNpbmZvKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBFbWl0IEh1ZmZtYW4gdGFibGVzLgorICAgICAqIE5vdGUgdGhhdCBlbWl0X2RodCgpIHN1cHByZXNzZXMgYW55IGR1cGxpY2F0ZSB0YWJsZXMuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBpKyspIHsKKyAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tpXTsKKyAgICAgIC8qIERDIG5lZWRzIG5vIHRhYmxlIGZvciByZWZpbmVtZW50IHNjYW4gKi8KKyAgICAgIGlmIChjaW5mby0+U3MgPT0gMCAmJiBjaW5mby0+QWggPT0gMCkKKyAgICAgICAgZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmRjX3RibF9ubywgRkFMU0UpOworICAgICAgLyogQUMgbmVlZHMgbm8gdGFibGUgd2hlbiBub3QgcHJlc2VudCAqLworICAgICAgaWYgKGNpbmZvLT5TZSkKKyAgICAgICAgZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmFjX3RibF9ubywgVFJVRSk7CisgICAgfQorICB9CisKKyAgLyogRW1pdCBEUkkgaWYgcmVxdWlyZWQgLS0tIG5vdGUgdGhhdCBEUkkgdmFsdWUgY291bGQgY2hhbmdlIGZvciBlYWNoIHNjYW4uCisgICAqIFdlIGF2b2lkIHdhc3Rpbmcgc3BhY2Ugd2l0aCB1bm5lY2Vzc2FyeSBEUklzLCBob3dldmVyLgorICAgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsICE9IG1hcmtlci0+bGFzdF9yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgZW1pdF9kcmkoY2luZm8pOworICAgIG1hcmtlci0+bGFzdF9yZXN0YXJ0X2ludGVydmFsID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgIH0KKworICBlbWl0X3NvcyhjaW5mbyk7Cit9CisKKworLyoKKyAqIFdyaXRlIGRhdGFzdHJlYW0gdHJhaWxlci4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3dyaXRlX2ZpbGVfdHJhaWxlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fRU9JKTsKK30KKworCisvKgorICogV3JpdGUgYW4gYWJicmV2aWF0ZWQgdGFibGUtc3BlY2lmaWNhdGlvbiBkYXRhc3RyZWFtLgorICogVGhpcyBjb25zaXN0cyBvZiBTT0ksIERRVCBhbmQgREhUIHRhYmxlcywgYW5kIEVPSS4KKyAqIEFueSB0YWJsZSB0aGF0IGlzIGRlZmluZWQgYW5kIG5vdCBtYXJrZWQgc2VudF90YWJsZSA9IFRSVUUgd2lsbCBiZQorICogZW1pdHRlZC4gIE5vdGUgdGhhdCBhbGwgdGFibGVzIHdpbGwgYmUgbWFya2VkIHNlbnRfdGFibGUgPSBUUlVFIGF0IGV4aXQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV90YWJsZXNfb25seShqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaW50IGk7CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09JKTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykgeworICAgIGlmIChjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gIT0gTlVMTCkKKyAgICAgICh2b2lkKWVtaXRfZHF0KGNpbmZvLCBpKTsKKyAgfQorCisgIGlmICghY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7CisgICAgICBpZiAoY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaV0gIT0gTlVMTCkKKyAgICAgICAgZW1pdF9kaHQoY2luZm8sIGksIEZBTFNFKTsKKyAgICAgIGlmIChjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpXSAhPSBOVUxMKQorICAgICAgICBlbWl0X2RodChjaW5mbywgaSwgVFJVRSk7CisgICAgfQorICB9CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fRU9JKTsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgbWFya2VyIHdyaXRlciBtb2R1bGUuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9tYXJrZXJfd3JpdGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXJrZXJfcHRyIG1hcmtlcjsKKworICAvKiBDcmVhdGUgdGhlIHN1Ym9iamVjdCAqLworICBtYXJrZXIgPSAobXlfbWFya2VyX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9tYXJrZXJfd3JpdGVyKSk7CisgIGNpbmZvLT5tYXJrZXIgPSAoc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciAqKW1hcmtlcjsKKyAgLyogSW5pdGlhbGl6ZSBtZXRob2QgcG9pbnRlcnMgKi8KKyAgbWFya2VyLT5wdWIud3JpdGVfZmlsZV9oZWFkZXIgPSB3cml0ZV9maWxlX2hlYWRlcjsKKyAgbWFya2VyLT5wdWIud3JpdGVfZnJhbWVfaGVhZGVyID0gd3JpdGVfZnJhbWVfaGVhZGVyOworICBtYXJrZXItPnB1Yi53cml0ZV9zY2FuX2hlYWRlciA9IHdyaXRlX3NjYW5faGVhZGVyOworICBtYXJrZXItPnB1Yi53cml0ZV9maWxlX3RyYWlsZXIgPSB3cml0ZV9maWxlX3RyYWlsZXI7CisgIG1hcmtlci0+cHViLndyaXRlX3RhYmxlc19vbmx5ID0gd3JpdGVfdGFibGVzX29ubHk7CisgIG1hcmtlci0+cHViLndyaXRlX21hcmtlcl9oZWFkZXIgPSB3cml0ZV9tYXJrZXJfaGVhZGVyOworICBtYXJrZXItPnB1Yi53cml0ZV9tYXJrZXJfYnl0ZSA9IHdyaXRlX21hcmtlcl9ieXRlOworICAvKiBJbml0aWFsaXplIHByaXZhdGUgc3RhdGUgKi8KKyAgbWFya2VyLT5sYXN0X3Jlc3RhcnRfaW50ZXJ2YWwgPSAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNtYXN0ZXIuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjbWFzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUxNmY0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjbWFzdGVyLmMKQEAgLTAsMCArMSw2NDAgQEAKKy8qCisgKiBqY21hc3Rlci5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAyMDAzLTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hc3RlciBjb250cm9sIGxvZ2ljIGZvciB0aGUgSlBFRyBjb21wcmVzc29yLgorICogVGhlc2Ugcm91dGluZXMgYXJlIGNvbmNlcm5lZCB3aXRoIHBhcmFtZXRlciB2YWxpZGF0aW9uLCBpbml0aWFsIHNldHVwLAorICogYW5kIGludGVyLXBhc3MgY29udHJvbCAoZGV0ZXJtaW5pbmcgdGhlIG51bWJlciBvZiBwYXNzZXMgYW5kIHRoZSB3b3JrCisgKiB0byBiZSBkb25lIGluIGVhY2ggcGFzcykuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpwZWdjb21wLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorCisKKy8qIFByaXZhdGUgc3RhdGUgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgbWFpbl9wYXNzLCAgICAgICAgICAgICAgICAgICAgLyogaW5wdXQgZGF0YSwgYWxzbyBkbyBmaXJzdCBvdXRwdXQgc3RlcCAqLworICBodWZmX29wdF9wYXNzLCAgICAgICAgICAgICAgICAvKiBIdWZmbWFuIGNvZGUgb3B0aW1pemF0aW9uIHBhc3MgKi8KKyAgb3V0cHV0X3Bhc3MgICAgICAgICAgICAgICAgICAgLyogZGF0YSBvdXRwdXQgcGFzcyAqLworfSBjX3Bhc3NfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19jb21wX21hc3RlciBwdWI7ICAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgY19wYXNzX3R5cGUgcGFzc190eXBlOyAgICAgICAgLyogdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgcGFzcyAqLworCisgIGludCBwYXNzX251bWJlcjsgICAgICAgICAgICAgIC8qICMgb2YgcGFzc2VzIGNvbXBsZXRlZCAqLworICBpbnQgdG90YWxfcGFzc2VzOyAgICAgICAgICAgICAvKiB0b3RhbCAjIG9mIHBhc3NlcyBuZWVkZWQgKi8KKworICBpbnQgc2Nhbl9udW1iZXI7ICAgICAgICAgICAgICAvKiBjdXJyZW50IGluZGV4IGluIHNjYW5faW5mb1tdICovCisKKyAgLyoKKyAgICogVGhpcyBpcyBoZXJlIHNvIHdlIGNhbiBhZGQgbGlianBlZy10dXJibyB2ZXJzaW9uL2J1aWxkIGluZm9ybWF0aW9uIHRvIHRoZQorICAgKiBnbG9iYWwgc3RyaW5nIHRhYmxlIHdpdGhvdXQgaW50cm9kdWNpbmcgYSBuZXcgZ2xvYmFsIHN5bWJvbC4gIEFkZGluZyB0aGlzCisgICAqIGluZm9ybWF0aW9uIHRvIHRoZSBnbG9iYWwgc3RyaW5nIHRhYmxlIGFsbG93cyBvbmUgdG8gZXhhbWluZSBhIGJpbmFyeQorICAgKiBvYmplY3QgYW5kIGRldGVybWluZSB3aGljaCB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8gaXQgd2FzIGJ1aWx0IGZyb20gb3IKKyAgICogbGlua2VkIGFnYWluc3QuCisgICAqLworICBjb25zdCBjaGFyICpqcGVnX3ZlcnNpb247CisKK30gbXlfY29tcF9tYXN0ZXI7CisKK3R5cGVkZWYgbXlfY29tcF9tYXN0ZXIgKm15X21hc3Rlcl9wdHI7CisKKworLyoKKyAqIFN1cHBvcnQgcm91dGluZXMgdGhhdCBkbyB2YXJpb3VzIGVzc2VudGlhbCBjYWxjdWxhdGlvbnMuCisgKi8KKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKy8qCisgKiBDb21wdXRlIEpQRUcgaW1hZ2UgZGltZW5zaW9ucyBhbmQgcmVsYXRlZCB2YWx1ZXMuCisgKiBOT1RFOiB0aGlzIGlzIGV4cG9ydGVkIGZvciBwb3NzaWJsZSB1c2UgYnkgYXBwbGljYXRpb24uCisgKiBIZW5jZSBpdCBtdXN0bid0IGRvIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgZG9uZSB0d2ljZS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBEbyBjb21wdXRhdGlvbnMgdGhhdCBhcmUgbmVlZGVkIGJlZm9yZSBtYXN0ZXIgc2VsZWN0aW9uIHBoYXNlICovCit7CisgIC8qIEhhcmR3aXJlIGl0IHRvICJubyBzY2FsaW5nIiAqLworICBjaW5mby0+anBlZ193aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gY2luZm8tPmltYWdlX2hlaWdodDsKKyAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CisgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOworfQorI2VuZGlmCisKKworTE9DQUwodm9pZCkKK2luaXRpYWxfc2V0dXAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gdHJhbnNjb2RlX29ubHkpCisvKiBEbyBjb21wdXRhdGlvbnMgdGhhdCBhcmUgbmVlZGVkIGJlZm9yZSBtYXN0ZXIgc2VsZWN0aW9uIHBoYXNlICovCit7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgbG9uZyBzYW1wbGVzcGVycm93OworICBKRElNRU5TSU9OIGpkX3NhbXBsZXNwZXJyb3c7CisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorICBpZiAoIXRyYW5zY29kZV9vbmx5KQorI2VuZGlmCisgICAganBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucyhjaW5mbyk7CisjZW5kaWYKKworICAvKiBTYW5pdHkgY2hlY2sgb24gaW1hZ2UgZGltZW5zaW9ucyAqLworICBpZiAoY2luZm8tPl9qcGVnX2hlaWdodCA8PSAwIHx8IGNpbmZvLT5fanBlZ193aWR0aCA8PSAwIHx8CisgICAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgPD0gMCB8fCBjaW5mby0+aW5wdXRfY29tcG9uZW50cyA8PSAwKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRU1QVFlfSU1BR0UpOworCisgIC8qIE1ha2Ugc3VyZSBpbWFnZSBpc24ndCBiaWdnZXIgdGhhbiBJIGNhbiBoYW5kbGUgKi8KKyAgaWYgKChsb25nKWNpbmZvLT5fanBlZ19oZWlnaHQgPiAobG9uZylKUEVHX01BWF9ESU1FTlNJT04gfHwKKyAgICAgIChsb25nKWNpbmZvLT5fanBlZ193aWR0aCA+IChsb25nKUpQRUdfTUFYX0RJTUVOU0lPTikKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9JTUFHRV9UT09fQklHLCAodW5zaWduZWQgaW50KUpQRUdfTUFYX0RJTUVOU0lPTik7CisKKyAgLyogV2lkdGggb2YgYW4gaW5wdXQgc2NhbmxpbmUgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIEpESU1FTlNJT04uICovCisgIHNhbXBsZXNwZXJyb3cgPSAobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiAobG9uZyljaW5mby0+aW5wdXRfY29tcG9uZW50czsKKyAgamRfc2FtcGxlc3BlcnJvdyA9IChKRElNRU5TSU9OKXNhbXBsZXNwZXJyb3c7CisgIGlmICgobG9uZylqZF9zYW1wbGVzcGVycm93ICE9IHNhbXBsZXNwZXJyb3cpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9XSURUSF9PVkVSRkxPVyk7CisKKyAgLyogRm9yIG5vdywgcHJlY2lzaW9uIG11c3QgbWF0Y2ggY29tcGlsZWQtaW4gdmFsdWUuLi4gKi8KKyAgaWYgKGNpbmZvLT5kYXRhX3ByZWNpc2lvbiAhPSBCSVRTX0lOX0pTQU1QTEUpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BSRUNJU0lPTiwgY2luZm8tPmRhdGFfcHJlY2lzaW9uKTsKKworICAvKiBDaGVjayB0aGF0IG51bWJlciBvZiBjb21wb25lbnRzIHdvbid0IGV4Y2VlZCBpbnRlcm5hbCBhcnJheSBzaXplcyAqLworICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzID4gTUFYX0NPTVBPTkVOVFMpCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBjaW5mby0+bnVtX2NvbXBvbmVudHMsCisgICAgICAgICAgICAgTUFYX0NPTVBPTkVOVFMpOworCisgIC8qIENvbXB1dGUgbWF4aW11bSBzYW1wbGluZyBmYWN0b3JzOyBjaGVjayBmYWN0b3IgdmFsaWRpdHkgKi8KKyAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gMTsKKyAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gMTsKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA8PSAwIHx8CisgICAgICAgIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgPiBNQVhfU0FNUF9GQUNUT1IgfHwKKyAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA8PSAwIHx8CisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPiBNQVhfU0FNUF9GQUNUT1IpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9TQU1QTElORyk7CisgICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcik7CisgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgIH0KKworICAvKiBDb21wdXRlIGRpbWVuc2lvbnMgb2YgY29tcG9uZW50cyAqLworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIEZpbGwgaW4gdGhlIGNvcnJlY3QgY29tcG9uZW50X2luZGV4IHZhbHVlOyBkb24ndCByZWx5IG9uIGFwcGxpY2F0aW9uICovCisgICAgY29tcHB0ci0+Y29tcG9uZW50X2luZGV4ID0gY2k7CisgICAgLyogRm9yIGNvbXByZXNzaW9uLCB3ZSBuZXZlciBkbyBEQ1Qgc2NhbGluZy4gKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgICAgY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPSBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CisjZWxzZQorICAgIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CisjZW5kaWYKKyAgICAvKiBTaXplIGluIERDVCBibG9ja3MgKi8KKyAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPl9qcGVnX3dpZHRoICogKGxvbmcpY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5fanBlZ19oZWlnaHQgKiAobG9uZyljb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAobG9uZykoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgIC8qIFNpemUgaW4gc2FtcGxlcyAqLworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5fanBlZ193aWR0aCAqIChsb25nKWNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgIChsb25nKWNpbmZvLT5tYXhfaF9zYW1wX2ZhY3Rvcik7CisgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5fanBlZ19oZWlnaHQgKiAobG9uZyljb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAobG9uZyljaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgIC8qIE1hcmsgY29tcG9uZW50IG5lZWRlZCAodGhpcyBmbGFnIGlzbid0IGFjdHVhbGx5IHVzZWQgZm9yIGNvbXByZXNzaW9uKSAqLworICAgIGNvbXBwdHItPmNvbXBvbmVudF9uZWVkZWQgPSBUUlVFOworICB9CisKKyAgLyogQ29tcHV0ZSBudW1iZXIgb2YgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvd3MgKG51bWJlciBvZiB0aW1lcyB0aGF0CisgICAqIG1haW4gY29udHJvbGxlciB3aWxsIGNhbGwgY29lZmZpY2llbnQgY29udHJvbGxlcikuCisgICAqLworICBjaW5mby0+dG90YWxfaU1DVV9yb3dzID0gKEpESU1FTlNJT04pCisgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+X2pwZWdfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgKGxvbmcpKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKK30KKworCisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisKK0xPQ0FMKHZvaWQpCit2YWxpZGF0ZV9zY3JpcHQoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBWZXJpZnkgdGhhdCB0aGUgc2NhbiBzY3JpcHQgaW4gY2luZm8tPnNjYW5faW5mb1tdIGlzIHZhbGlkOyBhbHNvCisgKiBkZXRlcm1pbmUgd2hldGhlciBpdCB1c2VzIHByb2dyZXNzaXZlIEpQRUcsIGFuZCBzZXQgY2luZm8tPnByb2dyZXNzaXZlX21vZGUuCisgKi8KK3sKKyAgY29uc3QganBlZ19zY2FuX2luZm8gKnNjYW5wdHI7CisgIGludCBzY2Fubm8sIG5jb21wcywgY2ksIGNvZWZpLCB0aGlzaTsKKyAgaW50IFNzLCBTZSwgQWgsIEFsOworICBib29sZWFuIGNvbXBvbmVudF9zZW50W01BWF9DT01QT05FTlRTXTsKKyNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorICBpbnQgKmxhc3RfYml0cG9zX3B0cjsKKyAgaW50IGxhc3RfYml0cG9zW01BWF9DT01QT05FTlRTXVtEQ1RTSVpFMl07CisgIC8qIC0xIHVudGlsIHRoYXQgY29lZmZpY2llbnQgaGFzIGJlZW4gc2VlbjsgdGhlbiBsYXN0IEFsIGZvciBpdCAqLworI2VuZGlmCisKKyAgaWYgKGNpbmZvLT5udW1fc2NhbnMgPD0gMCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU0NBTl9TQ1JJUFQsIDApOworCisgIC8qIEZvciBzZXF1ZW50aWFsIEpQRUcsIGFsbCBzY2FucyBtdXN0IGhhdmUgU3M9MCwgU2U9RENUU0laRTItMTsKKyAgICogZm9yIHByb2dyZXNzaXZlIEpQRUcsIG5vIHNjYW4gY2FuIGhhdmUgdGhpcy4KKyAgICovCisgIHNjYW5wdHIgPSBjaW5mby0+c2Nhbl9pbmZvOworICBpZiAoc2NhbnB0ci0+U3MgIT0gMCB8fCBzY2FucHRyLT5TZSAhPSBEQ1RTSVpFMiAtIDEpIHsKKyNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorICAgIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID0gVFJVRTsKKyAgICBsYXN0X2JpdHBvc19wdHIgPSAmbGFzdF9iaXRwb3NbMF1bMF07CisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKQorICAgICAgZm9yIChjb2VmaSA9IDA7IGNvZWZpIDwgRENUU0laRTI7IGNvZWZpKyspCisgICAgICAgICpsYXN0X2JpdHBvc19wdHIrKyA9IC0xOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSA9IEZBTFNFOworICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykKKyAgICAgIGNvbXBvbmVudF9zZW50W2NpXSA9IEZBTFNFOworICB9CisKKyAgZm9yIChzY2Fubm8gPSAxOyBzY2Fubm8gPD0gY2luZm8tPm51bV9zY2Fuczsgc2NhbnB0cisrLCBzY2Fubm8rKykgeworICAgIC8qIFZhbGlkYXRlIGNvbXBvbmVudCBpbmRleGVzICovCisgICAgbmNvbXBzID0gc2NhbnB0ci0+Y29tcHNfaW5fc2NhbjsKKyAgICBpZiAobmNvbXBzIDw9IDAgfHwgbmNvbXBzID4gTUFYX0NPTVBTX0lOX1NDQU4pCisgICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIG5jb21wcywgTUFYX0NPTVBTX0lOX1NDQU4pOworICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgeworICAgICAgdGhpc2kgPSBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ldOworICAgICAgaWYgKHRoaXNpIDwgMCB8fCB0aGlzaSA+PSBjaW5mby0+bnVtX2NvbXBvbmVudHMpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TQ0FOX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgIC8qIENvbXBvbmVudHMgbXVzdCBhcHBlYXIgaW4gU09GIG9yZGVyIHdpdGhpbiBlYWNoIHNjYW4gKi8KKyAgICAgIGlmIChjaSA+IDAgJiYgdGhpc2kgPD0gc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpIC0gMV0pCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TQ0FOX1NDUklQVCwgc2Nhbm5vKTsKKyAgICB9CisgICAgLyogVmFsaWRhdGUgcHJvZ3Jlc3Npb24gcGFyYW1ldGVycyAqLworICAgIFNzID0gc2NhbnB0ci0+U3M7CisgICAgU2UgPSBzY2FucHRyLT5TZTsKKyAgICBBaCA9IHNjYW5wdHItPkFoOworICAgIEFsID0gc2NhbnB0ci0+QWw7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICAgIC8qIFRoZSBKUEVHIHNwZWMgc2ltcGx5IGdpdmVzIHRoZSByYW5nZXMgMC4uMTMgZm9yIEFoIGFuZCBBbCwgYnV0IHRoYXQKKyAgICAgICAqIHNlZW1zIHdyb25nOiB0aGUgdXBwZXIgYm91bmQgb3VnaHQgdG8gZGVwZW5kIG9uIGRhdGEgcHJlY2lzaW9uLgorICAgICAgICogUGVyaGFwcyB0aGV5IHJlYWxseSBtZWFudCAwLi5OKzEgZm9yIE4tYml0IHByZWNpc2lvbi4KKyAgICAgICAqIEhlcmUgd2UgYWxsb3cgMC4uMTAgZm9yIDgtYml0IGRhdGE7IEFsIGxhcmdlciB0aGFuIDEwIHJlc3VsdHMgaW4KKyAgICAgICAqIG91dC1vZi1yYW5nZSByZWNvbnN0cnVjdGVkIERDIHZhbHVlcyBkdXJpbmcgdGhlIGZpcnN0IERDIHNjYW4sCisgICAgICAgKiB3aGljaCBtaWdodCBjYXVzZSBwcm9ibGVtcyBmb3Igc29tZSBkZWNvZGVycy4KKyAgICAgICAqLworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIE1BWF9BSF9BTCAgMTAKKyNlbHNlCisjZGVmaW5lIE1BWF9BSF9BTCAgMTMKKyNlbmRpZgorICAgICAgaWYgKFNzIDwgMCB8fCBTcyA+PSBEQ1RTSVpFMiB8fCBTZSA8IFNzIHx8IFNlID49IERDVFNJWkUyIHx8CisgICAgICAgICAgQWggPCAwIHx8IEFoID4gTUFYX0FIX0FMIHx8IEFsIDwgMCB8fCBBbCA+IE1BWF9BSF9BTCkKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworICAgICAgaWYgKFNzID09IDApIHsKKyAgICAgICAgaWYgKFNlICE9IDApICAgICAgICAgICAgLyogREMgYW5kIEFDIHRvZ2V0aGVyIG5vdCBPSyAqLworICAgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChuY29tcHMgIT0gMSkgICAgICAgIC8qIEFDIHNjYW5zIG11c3QgYmUgZm9yIG9ubHkgb25lIGNvbXBvbmVudCAqLworICAgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgIH0KKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgeworICAgICAgICBsYXN0X2JpdHBvc19wdHIgPSAmbGFzdF9iaXRwb3Nbc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXV1bMF07CisgICAgICAgIGlmIChTcyAhPSAwICYmIGxhc3RfYml0cG9zX3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLworICAgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgICAgZm9yIChjb2VmaSA9IFNzOyBjb2VmaSA8PSBTZTsgY29lZmkrKykgeworICAgICAgICAgIGlmIChsYXN0X2JpdHBvc19wdHJbY29lZmldIDwgMCkgeworICAgICAgICAgICAgLyogZmlyc3Qgc2NhbiBvZiB0aGlzIGNvZWZmaWNpZW50ICovCisgICAgICAgICAgICBpZiAoQWggIT0gMCkKKyAgICAgICAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBub3QgZmlyc3Qgc2NhbiAqLworICAgICAgICAgICAgaWYgKEFoICE9IGxhc3RfYml0cG9zX3B0cltjb2VmaV0gfHwgQWwgIT0gQWggLSAxKQorICAgICAgICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAgICAgfQorICAgICAgICAgIGxhc3RfYml0cG9zX3B0cltjb2VmaV0gPSBBbDsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgIC8qIEZvciBzZXF1ZW50aWFsIEpQRUcsIGFsbCBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzIG11c3QgYmUgdGhlc2U6ICovCisgICAgICBpZiAoU3MgIT0gMCB8fCBTZSAhPSBEQ1RTSVpFMiAtIDEgfHwgQWggIT0gMCB8fCBBbCAhPSAwKQorICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAvKiBNYWtlIHN1cmUgY29tcG9uZW50cyBhcmUgbm90IHNlbnQgdHdpY2UgKi8KKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgeworICAgICAgICB0aGlzaSA9IHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFtjaV07CisgICAgICAgIGlmIChjb21wb25lbnRfc2VudFt0aGlzaV0pCisgICAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOworICAgICAgICBjb21wb25lbnRfc2VudFt0aGlzaV0gPSBUUlVFOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qIE5vdyB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGdvdCBzZW50LiAqLworICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpIHsKKyNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorICAgIC8qIEZvciBwcm9ncmVzc2l2ZSBtb2RlLCB3ZSBvbmx5IGNoZWNrIHRoYXQgYXQgbGVhc3Qgc29tZSBEQyBkYXRhCisgICAgICogZ290IHNlbnQgZm9yIGVhY2ggY29tcG9uZW50OyB0aGUgc3BlYyBkb2VzIG5vdCByZXF1aXJlIHRoYXQgYWxsIGJpdHMKKyAgICAgKiBvZiBhbGwgY29lZmZpY2llbnRzIGJlIHRyYW5zbWl0dGVkLiAgV291bGQgaXQgYmUgd2lzZXIgdG8gZW5mb3JjZQorICAgICAqIHRyYW5zbWlzc2lvbiBvZiBhbGwgY29lZmZpY2llbnQgYml0cz8/CisgICAgICovCisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgICBpZiAobGFzdF9iaXRwb3NbY2ldWzBdIDwgMCkKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9NSVNTSU5HX0RBVEEpOworICAgIH0KKyNlbmRpZgorICB9IGVsc2UgeworICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgICAgaWYgKCFjb21wb25lbnRfc2VudFtjaV0pCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTUlTU0lOR19EQVRBKTsKKyAgICB9CisgIH0KK30KKworI2VuZGlmIC8qIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLworCisKK0xPQ0FMKHZvaWQpCitzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogU2V0IHVwIHRoZSBzY2FuIHBhcmFtZXRlcnMgZm9yIHRoZSBjdXJyZW50IHNjYW4gKi8KK3sKKyAgaW50IGNpOworCisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgIGlmIChjaW5mby0+c2Nhbl9pbmZvICE9IE5VTEwpIHsKKyAgICAvKiBQcmVwYXJlIGZvciBjdXJyZW50IHNjYW4gLS0tIHRoZSBzY3JpcHQgaXMgYWxyZWFkeSB2YWxpZGF0ZWQgKi8KKyAgICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKWNpbmZvLT5tYXN0ZXI7CisgICAgY29uc3QganBlZ19zY2FuX2luZm8gKnNjYW5wdHIgPSBjaW5mby0+c2Nhbl9pbmZvICsgbWFzdGVyLT5zY2FuX251bWJlcjsKKworICAgIGNpbmZvLT5jb21wc19pbl9zY2FuID0gc2NhbnB0ci0+Y29tcHNfaW5fc2NhbjsKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBzY2FucHRyLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgICBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0gPQorICAgICAgICAmY2luZm8tPmNvbXBfaW5mb1tzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ldXTsKKyAgICB9CisgICAgY2luZm8tPlNzID0gc2NhbnB0ci0+U3M7CisgICAgY2luZm8tPlNlID0gc2NhbnB0ci0+U2U7CisgICAgY2luZm8tPkFoID0gc2NhbnB0ci0+QWg7CisgICAgY2luZm8tPkFsID0gc2NhbnB0ci0+QWw7CisgIH0gZWxzZQorI2VuZGlmCisgIHsKKyAgICAvKiBQcmVwYXJlIGZvciBzaW5nbGUgc2VxdWVudGlhbC1KUEVHIHNjYW4gY29udGFpbmluZyBhbGwgY29tcG9uZW50cyAqLworICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPm51bV9jb21wb25lbnRzLAorICAgICAgICAgICAgICAgTUFYX0NPTVBTX0lOX1NDQU4pOworICAgIGNpbmZvLT5jb21wc19pbl9zY2FuID0gY2luZm8tPm51bV9jb21wb25lbnRzOworICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgICAgY2luZm8tPmN1cl9jb21wX2luZm9bY2ldID0gJmNpbmZvLT5jb21wX2luZm9bY2ldOworICAgIH0KKyAgICBjaW5mby0+U3MgPSAwOworICAgIGNpbmZvLT5TZSA9IERDVFNJWkUyIC0gMTsKKyAgICBjaW5mby0+QWggPSAwOworICAgIGNpbmZvLT5BbCA9IDA7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorcGVyX3NjYW5fc2V0dXAoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBEbyBjb21wdXRhdGlvbnMgdGhhdCBhcmUgbmVlZGVkIGJlZm9yZSBwcm9jZXNzaW5nIGEgSlBFRyBzY2FuICovCisvKiBjaW5mby0+Y29tcHNfaW5fc2NhbiBhbmQgY2luZm8tPmN1cl9jb21wX2luZm9bXSBhcmUgYWxyZWFkeSBzZXQgKi8KK3sKKyAgaW50IGNpLCBtY3VibGtzLCB0bXA7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuID09IDEpIHsKKworICAgIC8qIE5vbmludGVybGVhdmVkIChzaW5nbGUtY29tcG9uZW50KSBzY2FuICovCisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdOworCisgICAgLyogT3ZlcmFsbCBpbWFnZSBzaXplIGluIE1DVXMgKi8KKyAgICBjaW5mby0+TUNVc19wZXJfcm93ID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOworICAgIGNpbmZvLT5NQ1Vfcm93c19pbl9zY2FuID0gY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKKworICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FuLCBhbHdheXMgb25lIGJsb2NrIHBlciBNQ1UgKi8KKyAgICBjb21wcHRyLT5NQ1Vfd2lkdGggPSAxOworICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSAxOworICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSAxOworICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBEQ1RTSVpFOworICAgIGNvbXBwdHItPmxhc3RfY29sX3dpZHRoID0gMTsKKyAgICAvKiBGb3Igbm9uaW50ZXJsZWF2ZWQgc2NhbnMsIGl0IGlzIGNvbnZlbmllbnQgdG8gZGVmaW5lIGxhc3Rfcm93X2hlaWdodAorICAgICAqIGFzIHRoZSBudW1iZXIgb2YgYmxvY2sgcm93cyBwcmVzZW50IGluIHRoZSBsYXN0IGlNQ1Ugcm93LgorICAgICAqLworICAgIHRtcCA9IChpbnQpKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0ID0gdG1wOworCisgICAgLyogUHJlcGFyZSBhcnJheSBkZXNjcmliaW5nIE1DVSBjb21wb3NpdGlvbiAqLworICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMTsKKyAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbMF0gPSAwOworCisgIH0gZWxzZSB7CisKKyAgICAvKiBJbnRlcmxlYXZlZCAobXVsdGktY29tcG9uZW50KSBzY2FuICovCisgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDw9IDAgfHwgY2luZm8tPmNvbXBzX2luX3NjYW4gPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPmNvbXBzX2luX3NjYW4sCisgICAgICAgICAgICAgICBNQVhfQ09NUFNfSU5fU0NBTik7CisKKyAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLworICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPl9qcGVnX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAobG9uZykoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgIGNpbmZvLT5NQ1Vfcm93c19pbl9zY2FuID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5fanBlZ19oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIChsb25nKShjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisKKyAgICBjaW5mby0+YmxvY2tzX2luX01DVSA9IDA7CisKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAgIC8qIFNhbXBsaW5nIGZhY3RvcnMgZ2l2ZSAjIG9mIGJsb2NrcyBvZiBjb21wb25lbnQgaW4gZWFjaCBNQ1UgKi8KKyAgICAgIGNvbXBwdHItPk1DVV93aWR0aCA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgICBjb21wcHRyLT5NQ1VfaGVpZ2h0ID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSBjb21wcHRyLT5NQ1Vfd2lkdGggKiBjb21wcHRyLT5NQ1VfaGVpZ2h0OworICAgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPk1DVV93aWR0aCAqIERDVFNJWkU7CisgICAgICAvKiBGaWd1cmUgbnVtYmVyIG9mIG5vbi1kdW1teSBibG9ja3MgaW4gbGFzdCBNQ1UgY29sdW1uICYgcm93ICovCisgICAgICB0bXAgPSAoaW50KShjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgJSBjb21wcHRyLT5NQ1Vfd2lkdGgpOworICAgICAgaWYgKHRtcCA9PSAwKSB0bXAgPSBjb21wcHRyLT5NQ1Vfd2lkdGg7CisgICAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCA9IHRtcDsKKyAgICAgIHRtcCA9IChpbnQpKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT5NQ1VfaGVpZ2h0KTsKKyAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX2hlaWdodDsKKyAgICAgIGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCA9IHRtcDsKKyAgICAgIC8qIFByZXBhcmUgYXJyYXkgZGVzY3JpYmluZyBNQ1UgY29tcG9zaXRpb24gKi8KKyAgICAgIG1jdWJsa3MgPSBjb21wcHRyLT5NQ1VfYmxvY2tzOworICAgICAgaWYgKGNpbmZvLT5ibG9ja3NfaW5fTUNVICsgbWN1YmxrcyA+IENfTUFYX0JMT0NLU19JTl9NQ1UpCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX01DVV9TSVpFKTsKKyAgICAgIHdoaWxlIChtY3VibGtzLS0gPiAwKSB7CisgICAgICAgIGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtjaW5mby0+YmxvY2tzX2luX01DVSsrXSA9IGNpOworICAgICAgfQorICAgIH0KKworICB9CisKKyAgLyogQ29udmVydCByZXN0YXJ0IHNwZWNpZmllZCBpbiByb3dzIHRvIGFjdHVhbCBNQ1UgY291bnQuICovCisgIC8qIE5vdGUgdGhhdCBjb3VudCBtdXN0IGZpdCBpbiAxNiBiaXRzLCBzbyB3ZSBwcm92aWRlIGxpbWl0aW5nLiAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW5fcm93cyA+IDApIHsKKyAgICBsb25nIG5vbWluYWwgPSAobG9uZyljaW5mby0+cmVzdGFydF9pbl9yb3dzICogKGxvbmcpY2luZm8tPk1DVXNfcGVyX3JvdzsKKyAgICBjaW5mby0+cmVzdGFydF9pbnRlcnZhbCA9ICh1bnNpZ25lZCBpbnQpTUlOKG5vbWluYWwsIDY1NTM1TCk7CisgIH0KK30KKworCisvKgorICogUGVyLXBhc3Mgc2V0dXAuCisgKiBUaGlzIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcGFzcy4gIFdlIGRldGVybWluZSB3aGljaCBtb2R1bGVzCisgKiB3aWxsIGJlIGFjdGl2ZSBkdXJpbmcgdGhpcyBwYXNzIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUgc3RhcnRfcGFzcyBjYWxscy4KKyAqIFdlIGFsc28gc2V0IGlzX2xhc3RfcGFzcyB0byBpbmRpY2F0ZSB3aGV0aGVyIGFueSBtb3JlIHBhc3NlcyB3aWxsIGJlCisgKiByZXF1aXJlZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3ByZXBhcmVfZm9yX3Bhc3Moal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpY2luZm8tPm1hc3RlcjsKKworICBzd2l0Y2ggKG1hc3Rlci0+cGFzc190eXBlKSB7CisgIGNhc2UgbWFpbl9wYXNzOgorICAgIC8qIEluaXRpYWwgcGFzczogd2lsbCBjb2xsZWN0IGlucHV0IGRhdGEsIGFuZCBkbyBlaXRoZXIgSHVmZm1hbgorICAgICAqIG9wdGltaXphdGlvbiBvciBkYXRhIG91dHB1dCBmb3IgdGhlIGZpcnN0IHNjYW4uCisgICAgICovCisgICAgc2VsZWN0X3NjYW5fcGFyYW1ldGVycyhjaW5mbyk7CisgICAgcGVyX3NjYW5fc2V0dXAoY2luZm8pOworICAgIGlmICghY2luZm8tPnJhd19kYXRhX2luKSB7CisgICAgICAoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAgICgqY2luZm8tPmRvd25zYW1wbGUtPnN0YXJ0X3Bhc3MpIChjaW5mbyk7CisgICAgICAoKmNpbmZvLT5wcmVwLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsKKyAgICB9CisgICAgKCpjaW5mby0+ZmRjdC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8sIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpOworICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X3Bhc3MpIChjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hc3Rlci0+dG90YWxfcGFzc2VzID4gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQlVGX1NBVkVfQU5EX1BBU1MgOiBKQlVGX1BBU1NfVEhSVSkpOworICAgICgqY2luZm8tPm1haW4tPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9QQVNTX1RIUlUpOworICAgIGlmIChjaW5mby0+b3B0aW1pemVfY29kaW5nKSB7CisgICAgICAvKiBObyBpbW1lZGlhdGUgZGF0YSBvdXRwdXQ7IHBvc3Rwb25lIHdyaXRpbmcgZnJhbWUvc2NhbiBoZWFkZXJzICovCisgICAgICBtYXN0ZXItPnB1Yi5jYWxsX3Bhc3Nfc3RhcnR1cCA9IEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICAvKiBXaWxsIHdyaXRlIGZyYW1lL3NjYW4gaGVhZGVycyBhdCBmaXJzdCBqcGVnX3dyaXRlX3NjYW5saW5lcyBjYWxsICovCisgICAgICBtYXN0ZXItPnB1Yi5jYWxsX3Bhc3Nfc3RhcnR1cCA9IFRSVUU7CisgICAgfQorICAgIGJyZWFrOworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICBjYXNlIGh1ZmZfb3B0X3Bhc3M6CisgICAgLyogRG8gSHVmZm1hbiBvcHRpbWl6YXRpb24gZm9yIGEgc2NhbiBhZnRlciB0aGUgZmlyc3Qgb25lLiAqLworICAgIHNlbGVjdF9zY2FuX3BhcmFtZXRlcnMoY2luZm8pOworICAgIHBlcl9zY2FuX3NldHVwKGNpbmZvKTsKKyAgICBpZiAoY2luZm8tPlNzICE9IDAgfHwgY2luZm8tPkFoID09IDAgfHwgY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICAgICgqY2luZm8tPmVudHJvcHktPnN0YXJ0X3Bhc3MpIChjaW5mbywgVFJVRSk7CisgICAgICAoKmNpbmZvLT5jb2VmLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfQ1JBTktfREVTVCk7CisgICAgICBtYXN0ZXItPnB1Yi5jYWxsX3Bhc3Nfc3RhcnR1cCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFNwZWNpYWwgY2FzZTogSHVmZm1hbiBEQyByZWZpbmVtZW50IHNjYW5zIG5lZWQgbm8gSHVmZm1hbiB0YWJsZQorICAgICAqIGFuZCB0aGVyZWZvcmUgd2UgY2FuIHNraXAgdGhlIG9wdGltaXphdGlvbiBwYXNzIGZvciB0aGVtLgorICAgICAqLworICAgIG1hc3Rlci0+cGFzc190eXBlID0gb3V0cHV0X3Bhc3M7CisgICAgbWFzdGVyLT5wYXNzX251bWJlcisrOworICAgIC8qRkFMTFRIUk9VR0gqLworI2VuZGlmCisgIGNhc2Ugb3V0cHV0X3Bhc3M6CisgICAgLyogRG8gYSBkYXRhLW91dHB1dCBwYXNzLiAqLworICAgIC8qIFdlIG5lZWQgbm90IHJlcGVhdCBwZXItc2NhbiBzZXR1cCBpZiBwcmlvciBvcHRpbWl6YXRpb24gcGFzcyBkaWQgaXQuICovCisgICAgaWYgKCFjaW5mby0+b3B0aW1pemVfY29kaW5nKSB7CisgICAgICBzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGNpbmZvKTsKKyAgICAgIHBlcl9zY2FuX3NldHVwKGNpbmZvKTsKKyAgICB9CisgICAgKCpjaW5mby0+ZW50cm9weS0+c3RhcnRfcGFzcykgKGNpbmZvLCBGQUxTRSk7CisgICAgKCpjaW5mby0+Y29lZi0+c3RhcnRfcGFzcykgKGNpbmZvLCBKQlVGX0NSQU5LX0RFU1QpOworICAgIC8qIFdlIGVtaXQgZnJhbWUvc2NhbiBoZWFkZXJzIG5vdyAqLworICAgIGlmIChtYXN0ZXItPnNjYW5fbnVtYmVyID09IDApCisgICAgICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX2ZyYW1lX2hlYWRlcikgKGNpbmZvKTsKKyAgICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX3NjYW5faGVhZGVyKSAoY2luZm8pOworICAgIG1hc3Rlci0+cHViLmNhbGxfcGFzc19zdGFydHVwID0gRkFMU0U7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworICB9CisKKyAgbWFzdGVyLT5wdWIuaXNfbGFzdF9wYXNzID0gKG1hc3Rlci0+cGFzc19udW1iZXIgPT0gbWFzdGVyLT50b3RhbF9wYXNzZXMgLSAxKTsKKworICAvKiBTZXQgdXAgcHJvZ3Jlc3MgbW9uaXRvcidzIHBhc3MgaW5mbyBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+Y29tcGxldGVkX3Bhc3NlcyA9IG1hc3Rlci0+cGFzc19udW1iZXI7CisgICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgPSBtYXN0ZXItPnRvdGFsX3Bhc3NlczsKKyAgfQorfQorCisKKy8qCisgKiBTcGVjaWFsIHN0YXJ0LW9mLXBhc3MgaG9vay4KKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGpwZWdfd3JpdGVfc2NhbmxpbmVzIGlmIGNhbGxfcGFzc19zdGFydHVwIGlzIFRSVUUuCisgKiBJbiBzaW5nbGUtcGFzcyBwcm9jZXNzaW5nLCB3ZSBuZWVkIHRoaXMgaG9vayBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8KKyAqIHdyaXRlIGZyYW1lL3NjYW4gaGVhZGVycyBkdXJpbmcganBlZ19zdGFydF9jb21wcmVzczsgd2Ugd2FudCB0byBsZXQgdGhlCisgKiBhcHBsaWNhdGlvbiB3cml0ZSBDT00gbWFya2VycyBldGMuIGJldHdlZW4ganBlZ19zdGFydF9jb21wcmVzcyBhbmQgdGhlCisgKiBqcGVnX3dyaXRlX3NjYW5saW5lcyBsb29wLgorICogSW4gbXVsdGktcGFzcyBwcm9jZXNzaW5nLCB0aGlzIHJvdXRpbmUgaXMgbm90IHVzZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwYXNzX3N0YXJ0dXAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIGNpbmZvLT5tYXN0ZXItPmNhbGxfcGFzc19zdGFydHVwID0gRkFMU0U7IC8qIHJlc2V0IGZsYWcgc28gY2FsbCBvbmx5IG9uY2UgKi8KKworICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX2ZyYW1lX2hlYWRlcikgKGNpbmZvKTsKKyAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9zY2FuX2hlYWRlcikgKGNpbmZvKTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IGVuZCBvZiBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX3Bhc3NfbWFzdGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKWNpbmZvLT5tYXN0ZXI7CisKKyAgLyogVGhlIGVudHJvcHkgY29kZXIgYWx3YXlzIG5lZWRzIGFuIGVuZC1vZi1wYXNzIGNhbGwsCisgICAqIGVpdGhlciB0byBhbmFseXplIHN0YXRpc3RpY3Mgb3IgdG8gZmx1c2ggaXRzIG91dHB1dCBidWZmZXIuCisgICAqLworICAoKmNpbmZvLT5lbnRyb3B5LT5maW5pc2hfcGFzcykgKGNpbmZvKTsKKworICAvKiBVcGRhdGUgc3RhdGUgZm9yIG5leHQgcGFzcyAqLworICBzd2l0Y2ggKG1hc3Rlci0+cGFzc190eXBlKSB7CisgIGNhc2UgbWFpbl9wYXNzOgorICAgIC8qIG5leHQgcGFzcyBpcyBlaXRoZXIgb3V0cHV0IG9mIHNjYW4gMCAoYWZ0ZXIgb3B0aW1pemF0aW9uKQorICAgICAqIG9yIG91dHB1dCBvZiBzY2FuIDEgKGlmIG5vIG9wdGltaXphdGlvbikuCisgICAgICovCisgICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBvdXRwdXRfcGFzczsKKyAgICBpZiAoIWNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpCisgICAgICBtYXN0ZXItPnNjYW5fbnVtYmVyKys7CisgICAgYnJlYWs7CisgIGNhc2UgaHVmZl9vcHRfcGFzczoKKyAgICAvKiBuZXh0IHBhc3MgaXMgYWx3YXlzIG91dHB1dCBvZiBjdXJyZW50IHNjYW4gKi8KKyAgICBtYXN0ZXItPnBhc3NfdHlwZSA9IG91dHB1dF9wYXNzOworICAgIGJyZWFrOworICBjYXNlIG91dHB1dF9wYXNzOgorICAgIC8qIG5leHQgcGFzcyBpcyBlaXRoZXIgb3B0aW1pemF0aW9uIG9yIG91dHB1dCBvZiBuZXh0IHNjYW4gKi8KKyAgICBpZiAoY2luZm8tPm9wdGltaXplX2NvZGluZykKKyAgICAgIG1hc3Rlci0+cGFzc190eXBlID0gaHVmZl9vcHRfcGFzczsKKyAgICBtYXN0ZXItPnNjYW5fbnVtYmVyKys7CisgICAgYnJlYWs7CisgIH0KKworICBtYXN0ZXItPnBhc3NfbnVtYmVyKys7Cit9CisKKworLyoKKyAqIEluaXRpYWxpemUgbWFzdGVyIGNvbXByZXNzaW9uIGNvbnRyb2wuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9jX21hc3Rlcl9jb250cm9sKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHRyYW5zY29kZV9vbmx5KQoreworICBteV9tYXN0ZXJfcHRyIG1hc3RlcjsKKworICBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9jb21wX21hc3RlcikpOworICBjaW5mby0+bWFzdGVyID0gKHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyICopbWFzdGVyOworICBtYXN0ZXItPnB1Yi5wcmVwYXJlX2Zvcl9wYXNzID0gcHJlcGFyZV9mb3JfcGFzczsKKyAgbWFzdGVyLT5wdWIucGFzc19zdGFydHVwID0gcGFzc19zdGFydHVwOworICBtYXN0ZXItPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX21hc3RlcjsKKyAgbWFzdGVyLT5wdWIuaXNfbGFzdF9wYXNzID0gRkFMU0U7CisKKyAgLyogVmFsaWRhdGUgcGFyYW1ldGVycywgZGV0ZXJtaW5lIGRlcml2ZWQgdmFsdWVzICovCisgIGluaXRpYWxfc2V0dXAoY2luZm8sIHRyYW5zY29kZV9vbmx5KTsKKworICBpZiAoY2luZm8tPnNjYW5faW5mbyAhPSBOVUxMKSB7CisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgICAgdmFsaWRhdGVfc2NyaXB0KGNpbmZvKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPSBGQUxTRTsKKyAgICBjaW5mby0+bnVtX3NjYW5zID0gMTsKKyAgfQorCisgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSAmJiAhY2luZm8tPmFyaXRoX2NvZGUpICAvKiAgVEVNUE9SQVJZIEhBQ0sgPz8/ICovCisgICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7IC8qIGFzc3VtZSBkZWZhdWx0IHRhYmxlcyBubyBnb29kIGZvciBwcm9ncmVzc2l2ZSBtb2RlICovCisKKyAgLyogSW5pdGlhbGl6ZSBteSBwcml2YXRlIHN0YXRlICovCisgIGlmICh0cmFuc2NvZGVfb25seSkgeworICAgIC8qIG5vIG1haW4gcGFzcyBpbiB0cmFuc2NvZGluZyAqLworICAgIGlmIChjaW5mby0+b3B0aW1pemVfY29kaW5nKQorICAgICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBodWZmX29wdF9wYXNzOworICAgIGVsc2UKKyAgICAgIG1hc3Rlci0+cGFzc190eXBlID0gb3V0cHV0X3Bhc3M7CisgIH0gZWxzZSB7CisgICAgLyogZm9yIG5vcm1hbCBjb21wcmVzc2lvbiwgZmlyc3QgcGFzcyBpcyBhbHdheXMgdGhpcyB0eXBlOiAqLworICAgIG1hc3Rlci0+cGFzc190eXBlID0gbWFpbl9wYXNzOworICB9CisgIG1hc3Rlci0+c2Nhbl9udW1iZXIgPSAwOworICBtYXN0ZXItPnBhc3NfbnVtYmVyID0gMDsKKyAgaWYgKGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpCisgICAgbWFzdGVyLT50b3RhbF9wYXNzZXMgPSBjaW5mby0+bnVtX3NjYW5zICogMjsKKyAgZWxzZQorICAgIG1hc3Rlci0+dG90YWxfcGFzc2VzID0gY2luZm8tPm51bV9zY2FuczsKKworICBtYXN0ZXItPmpwZWdfdmVyc2lvbiA9IFBBQ0tBR0VfTkFNRSAiIHZlcnNpb24gIiBWRVJTSU9OICIgKGJ1aWxkICIgQlVJTEQgIikiOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbWFwaS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbWFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmI4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY29tYXBpLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBqY29tYXBpLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIEl0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBjb2RlIHJlbGV2YW50CisgKiB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFwcGxpY2F0aW9uIGludGVyZmFjZSByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGZvciBib3RoCisgKiBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyoKKyAqIEFib3J0IHByb2Nlc3Npbmcgb2YgYSBKUEVHIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gb3BlcmF0aW9uLAorICogYnV0IGRvbid0IGRlc3Ryb3kgdGhlIG9iamVjdCBpdHNlbGYuCisgKgorICogRm9yIHRoaXMsIHdlIG1lcmVseSBjbGVhbiB1cCBhbGwgdGhlIG5vbnBlcm1hbmVudCBtZW1vcnkgcG9vbHMuCisgKiBOb3RlIHRoYXQgdGVtcCBmaWxlcyAodmlydHVhbCBhcnJheXMpIGFyZSBub3QgYWxsb3dlZCB0byBiZWxvbmcgdG8KKyAqIHRoZSBwZXJtYW5lbnQgcG9vbCwgc28gd2Ugd2lsbCBiZSBhYmxlIHRvIGNsb3NlIGFsbCB0ZW1wIGZpbGVzIGhlcmUuCisgKiBDbG9zaW5nIGEgZGF0YSBzb3VyY2Ugb3IgZGVzdGluYXRpb24sIGlmIG5lY2Vzc2FyeSwgaXMgdGhlIGFwcGxpY2F0aW9uJ3MKKyAqIHJlc3BvbnNpYmlsaXR5LgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19hYm9ydChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIGludCBwb29sOworCisgIC8qIERvIG5vdGhpbmcgaWYgY2FsbGVkIG9uIGEgbm90LWluaXRpYWxpemVkIG9yIGRlc3Ryb3llZCBKUEVHIG9iamVjdC4gKi8KKyAgaWYgKGNpbmZvLT5tZW0gPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogUmVsZWFzaW5nIHBvb2xzIGluIHJldmVyc2Ugb3JkZXIgbWlnaHQgaGVscCBhdm9pZCBmcmFnbWVudGF0aW9uCisgICAqIHdpdGggc29tZSAoYnJhaW4tZGFtYWdlZCkgbWFsbG9jIGxpYnJhcmllcy4KKyAgICovCisgIGZvciAocG9vbCA9IEpQT09MX05VTVBPT0xTIC0gMTsgcG9vbCA+IEpQT09MX1BFUk1BTkVOVDsgcG9vbC0tKSB7CisgICAgKCpjaW5mby0+bWVtLT5mcmVlX3Bvb2wpIChjaW5mbywgcG9vbCk7CisgIH0KKworICAvKiBSZXNldCBvdmVyYWxsIHN0YXRlIGZvciBwb3NzaWJsZSByZXVzZSBvZiBvYmplY3QgKi8KKyAgaWYgKGNpbmZvLT5pc19kZWNvbXByZXNzb3IpIHsKKyAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1NUQVJUOworICAgIC8qIFRyeSB0byBrZWVwIGFwcGxpY2F0aW9uIGZyb20gYWNjZXNzaW5nIG5vdy1kZWxldGVkIG1hcmtlciBsaXN0LgorICAgICAqIEEgYml0IGtsdWRneSB0byBkbyBpdCBoZXJlLCBidXQgdGhpcyBpcyB0aGUgbW9zdCBjZW50cmFsIHBsYWNlLgorICAgICAqLworICAgICgoal9kZWNvbXByZXNzX3B0ciljaW5mbyktPm1hcmtlcl9saXN0ID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gQ1NUQVRFX1NUQVJUOworICB9Cit9CisKKworLyoKKyAqIERlc3RydWN0aW9uIG9mIGEgSlBFRyBvYmplY3QuCisgKgorICogRXZlcnl0aGluZyBnZXRzIGRlYWxsb2NhdGVkIGV4Y2VwdCB0aGUgbWFzdGVyIGpwZWdfY29tcHJlc3Nfc3RydWN0IGl0c2VsZgorICogYW5kIHRoZSBlcnJvciBtYW5hZ2VyIHN0cnVjdC4gIEJvdGggb2YgdGhlc2UgYXJlIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorICogYW5kIG11c3QgYmUgZnJlZWQsIGlmIG5lY2Vzc2FyeSwgYnkgdGhlIGFwcGxpY2F0aW9uLiAgKE9mdGVuIHRoZXkgYXJlIG9uCisgKiB0aGUgc3RhY2sgYW5kIHNvIGRvbid0IG5lZWQgdG8gYmUgZnJlZWQgYW55d2F5LikKKyAqIENsb3NpbmcgYSBkYXRhIHNvdXJjZSBvciBkZXN0aW5hdGlvbiwgaWYgbmVjZXNzYXJ5LCBpcyB0aGUgYXBwbGljYXRpb24ncworICogcmVzcG9uc2liaWxpdHkuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2Rlc3Ryb3koal9jb21tb25fcHRyIGNpbmZvKQoreworICAvKiBXZSBuZWVkIG9ubHkgdGVsbCB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gcmVsZWFzZSBldmVyeXRoaW5nLiAqLworICAvKiBOQjogbWVtIHBvaW50ZXIgaXMgTlVMTCBpZiBtZW1vcnkgbWdyIGZhaWxlZCB0byBpbml0aWFsaXplLiAqLworICBpZiAoY2luZm8tPm1lbSAhPSBOVUxMKQorICAgICgqY2luZm8tPm1lbS0+c2VsZl9kZXN0cnVjdCkgKGNpbmZvKTsKKyAgY2luZm8tPm1lbSA9IE5VTEw7ICAgICAgICAgICAgLyogYmUgc2FmZSBpZiBqcGVnX2Rlc3Ryb3kgaXMgY2FsbGVkIHR3aWNlICovCisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSAwOyAgICAgIC8qIG1hcmsgaXQgZGVzdHJveWVkICovCit9CisKKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmVzIGZvciBhbGxvY2F0aW5nIHF1YW50aXphdGlvbiBhbmQgSHVmZm1hbiB0YWJsZXMuCisgKiAoV291bGQganV0aWxzLmMgYmUgYSBtb3JlIHJlYXNvbmFibGUgcGxhY2UgdG8gcHV0IHRoZXNlPykKKyAqLworCitHTE9CQUwoSlFVQU5UX1RCTCAqKQoranBlZ19hbGxvY19xdWFudF90YWJsZShqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIEpRVUFOVF9UQkwgKnRibDsKKworICB0YmwgPSAoSlFVQU5UX1RCTCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpIChjaW5mbywgSlBPT0xfUEVSTUFORU5ULCBzaXplb2YoSlFVQU5UX1RCTCkpOworICB0YmwtPnNlbnRfdGFibGUgPSBGQUxTRTsgICAgICAvKiBtYWtlIHN1cmUgdGhpcyBpcyBmYWxzZSBpbiBhbnkgbmV3IHRhYmxlICovCisgIHJldHVybiB0Ymw7Cit9CisKKworR0xPQkFMKEpIVUZGX1RCTCAqKQoranBlZ19hbGxvY19odWZmX3RhYmxlKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgSkhVRkZfVEJMICp0Ymw7CisKKyAgdGJsID0gKEpIVUZGX1RCTCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpIChjaW5mbywgSlBPT0xfUEVSTUFORU5ULCBzaXplb2YoSkhVRkZfVEJMKSk7CisgIHRibC0+c2VudF90YWJsZSA9IEZBTFNFOyAgICAgIC8qIG1ha2Ugc3VyZSB0aGlzIGlzIGZhbHNlIGluIGFueSBuZXcgdGFibGUgKi8KKyAgcmV0dXJuIHRibDsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjb25maWcuaC5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQyNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbmZpZy5oLmluCkBAIC0wLDAgKzEsNzMgQEAKKy8qIFZlcnNpb24gSUQgZm9yIHRoZSBKUEVHIGxpYnJhcnkuCisgKiBNaWdodCBiZSB1c2VmdWwgZm9yIHRlc3RzIGxpa2UgIiNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDYwIi4KKyAqLworI2RlZmluZSBKUEVHX0xJQl9WRVJTSU9OICBASlBFR19MSUJfVkVSU0lPTkAKKworLyogbGlianBlZy10dXJibyB2ZXJzaW9uICovCisjZGVmaW5lIExJQkpQRUdfVFVSQk9fVkVSU0lPTiAgQFZFUlNJT05ACisKKy8qIGxpYmpwZWctdHVyYm8gdmVyc2lvbiBpbiBpbnRlZ2VyIGZvcm0gKi8KKyNkZWZpbmUgTElCSlBFR19UVVJCT19WRVJTSU9OX05VTUJFUiAgQExJQkpQRUdfVFVSQk9fVkVSU0lPTl9OVU1CRVJACisKKy8qIFN1cHBvcnQgYXJpdGhtZXRpYyBlbmNvZGluZyAqLworI2NtYWtlZGVmaW5lIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorCisvKiBTdXBwb3J0IGFyaXRobWV0aWMgZGVjb2RpbmcgKi8KKyNjbWFrZWRlZmluZSBEX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKworLyogU3VwcG9ydCBpbi1tZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXJzICovCisjY21ha2VkZWZpbmUgTUVNX1NSQ0RTVF9TVVBQT1JURUQKKworLyogVXNlIGFjY2VsZXJhdGVkIFNJTUQgcm91dGluZXMuICovCisjY21ha2VkZWZpbmUgV0lUSF9TSU1ECisKKy8qCisgKiBEZWZpbmUgQklUU19JTl9KU0FNUExFIGFzIGVpdGhlcgorICogICA4ICAgZm9yIDgtYml0IHNhbXBsZSB2YWx1ZXMgKHRoZSB1c3VhbCBzZXR0aW5nKQorICogICAxMiAgZm9yIDEyLWJpdCBzYW1wbGUgdmFsdWVzCisgKiBPbmx5IDggYW5kIDEyIGFyZSBsZWdhbCBkYXRhIHByZWNpc2lvbnMgZm9yIGxvc3N5IEpQRUcgYWNjb3JkaW5nIHRvIHRoZQorICogSlBFRyBzdGFuZGFyZCwgYW5kIHRoZSBJSkcgY29kZSBkb2VzIG5vdCBzdXBwb3J0IGFueXRoaW5nIGVsc2UhCisgKiBXZSBkbyBub3Qgc3VwcG9ydCBydW4tdGltZSBzZWxlY3Rpb24gb2YgZGF0YSBwcmVjaXNpb24sIHNvcnJ5LgorICovCisKKyNkZWZpbmUgQklUU19JTl9KU0FNUExFICBAQklUU19JTl9KU0FNUExFQCAgICAgIC8qIHVzZSA4IG9yIDEyICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTE9DQUxFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TVERERUZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSBpZiB5b3UgbmVlZCB0byBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gdG8gZ2V0IHNpemVfdC4gKi8KKyNjbWFrZWRlZmluZSBORUVEX1NZU19UWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBCU0QtbGlrZSBiemVybyBhbmQgYmNvcHkgaW4gPHN0cmluZ3MuaD4gcmF0aGVyIHRoYW4KKyAgIG1lbXNldC9tZW1jcHkgaW4gPHN0cmluZy5oPi4gKi8KKyNjbWFrZWRlZmluZSBORUVEX0JTRF9TVFJJTkdTCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1bnNpZ25lZCBjaGFyJy4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVuc2lnbmVkIHNob3J0Jy4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCisKKy8qIENvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgcG9pbnRlcnMgdG8gdW5kZWZpbmVkIHN0cnVjdHVyZXMuICovCisjY21ha2VkZWZpbmUgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KKworLyogRGVmaW5lIGlmIHlvdXIgKGJyb2tlbikgY29tcGlsZXIgc2hpZnRzIHNpZ25lZCB2YWx1ZXMgYXMgaWYgdGhleSB3ZXJlCisgICB1bnNpZ25lZC4gKi8KKyNjbWFrZWRlZmluZSBSSUdIVF9TSElGVF9JU19VTlNJR05FRAorCisvKiBEZWZpbmUgdG8gMSBpZiB0eXBlIGBjaGFyJyBpcyB1bnNpZ25lZCBhbmQgeW91IGFyZSBub3QgdXNpbmcgZ2NjLiAgKi8KKyNpZm5kZWYgX19DSEFSX1VOU0lHTkVEX18KKyAgI2NtYWtlZGVmaW5lIF9fQ0hBUl9VTlNJR05FRF9fCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisvKiAjdW5kZWYgY29uc3QgKi8KKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIHNpemVfdCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbmZpZy50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNkNzI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbmZpZy50eHQKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBqY29uZmlnLnR4dAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTQsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgcmVsZXZhbnQKKyAqIHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8KKyAqIGN1c3RvbWl6ZSB0aGUgSlBFRyBzb2Z0d2FyZSBmb3IgYSBwYXJ0aWN1bGFyIHN5c3RlbS4KKyAqCisgKiBUaGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIGluc3RhbGxhdGlvbiBhcmUgc3RvcmVkCisgKiBpbiBqY29uZmlnLmguICBPbiBtYW55IG1hY2hpbmVzLCBqY29uZmlnLmggY2FuIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5CisgKiBvciBjb3BpZWQgZnJvbSBvbmUgb2YgdGhlICJjYW5uZWQiIGpjb25maWcgZmlsZXMgdGhhdCB3ZSBzdXBwbHkuICBCdXQgaWYKKyAqIHlvdSBuZWVkIHRvIGdlbmVyYXRlIGEgamNvbmZpZy5oIGZpbGUgYnkgaGFuZCwgdGhpcyBmaWxlIHRlbGxzIHlvdSBob3cuCisgKgorICogRE8gTk9UIEVESVQgVEhJUyBGSUxFIC0tLSBJVCBXT04nVCBBQ0NPTVBMSVNIIEFOWVRISU5HLgorICogRURJVCBBIENPUFkgTkFNRUQgSkNPTkZJRy5ILgorICovCisKKworLyoKKyAqIFRoZXNlIHN5bWJvbHMgaW5kaWNhdGUgdGhlIHByb3BlcnRpZXMgb2YgeW91ciBtYWNoaW5lIG9yIGNvbXBpbGVyLgorICogI2RlZmluZSB0aGUgc3ltYm9sIGlmIHllcywgI3VuZGVmIGl0IGlmIG5vLgorICovCisKKy8qIERvZXMgeW91ciBjb21waWxlciBzdXBwb3J0IHRoZSBkZWNsYXJhdGlvbiAidW5zaWduZWQgY2hhciIgPworICogSG93IGFib3V0ICJ1bnNpZ25lZCBzaG9ydCIgPworICovCisjZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgorI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCisKKy8qIERlZmluZSAidm9pZCIgYXMgImNoYXIiIGlmIHlvdXIgY29tcGlsZXIgZG9lc24ndCBrbm93IGFib3V0IHR5cGUgdm9pZC4KKyAqIE5PVEU6IGJlIHN1cmUgdG8gZGVmaW5lIHZvaWQgc3VjaCB0aGF0ICJ2b2lkICoiIHJlcHJlc2VudHMgdGhlIG1vc3QgZ2VuZXJhbAorICogcG9pbnRlciB0eXBlLCBlLmcuLCB0aGF0IHJldHVybmVkIGJ5IG1hbGxvYygpLgorICovCisvKiAjZGVmaW5lIHZvaWQgY2hhciAqLworCisvKiBEZWZpbmUgImNvbnN0IiBhcyBlbXB0eSBpZiB5b3VyIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB0aGUgImNvbnN0IiBrZXl3b3JkLgorICovCisvKiAjZGVmaW5lIGNvbnN0ICovCisKKy8qIERlZmluZSB0aGlzIGlmIGFuIG9yZGluYXJ5ICJjaGFyIiB0eXBlIGlzIHVuc2lnbmVkLgorICogSWYgeW91J3JlIG5vdCBzdXJlLCBsZWF2aW5nIGl0IHVuZGVmaW5lZCB3aWxsIHdvcmsgYXQgc29tZSBjb3N0IGluIHNwZWVkLgorICogSWYgeW91IGRlZmluZWQgSEFWRV9VTlNJR05FRF9DSEFSIHRoZW4gdGhlIHNwZWVkIGRpZmZlcmVuY2UgaXMgbWluaW1hbC4KKyAqLworI3VuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdXIgc3lzdGVtIGhhcyBhbiBBTlNJLWNvbmZvcm1pbmcgPHN0ZGRlZi5oPiBmaWxlLgorICovCisjZGVmaW5lIEhBVkVfU1REREVGX0gKKworLyogRGVmaW5lIHRoaXMgaWYgeW91ciBzeXN0ZW0gaGFzIGFuIEFOU0ktY29uZm9ybWluZyA8c3RkbGliLmg+IGZpbGUuCisgKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGFuIEFOU0kvU3lzViA8c3RyaW5nLmg+LAorICogYnV0IGRvZXMgaGF2ZSBhIEJTRC1zdHlsZSA8c3RyaW5ncy5oPi4KKyAqLworI3VuZGVmIE5FRURfQlNEX1NUUklOR1MKKworLyogRGVmaW5lIHRoaXMgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSB0eXBlZGVmIHNpemVfdCBpbiBhbnkgb2YgdGhlCisgKiBBTlNJLXN0YW5kYXJkIHBsYWNlcyAoc3RkZGVmLmgsIHN0ZGxpYi5oLCBvciBzdGRpby5oKSwgYnV0IHBsYWNlcyBpdCBpbgorICogPHN5cy90eXBlcy5oPiBpbnN0ZWFkLgorICovCisjdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAorCisvKiBBbHRob3VnaCBhIHJlYWwgQU5TSSBDIGNvbXBpbGVyIGNhbiBkZWFsIHBlcmZlY3RseSB3ZWxsIHdpdGggcG9pbnRlcnMgdG8KKyAqIHVuc3BlY2lmaWVkIHN0cnVjdHVyZXMgKHNlZSAiaW5jb21wbGV0ZSB0eXBlcyIgaW4gdGhlIHNwZWMpLCBhIGZldyBwcmUtQU5TSQorICogYW5kIHBzZXVkby1BTlNJIGNvbXBpbGVycyBnZXQgY29uZnVzZWQuICBUbyBrZWVwIG9uZSBvZiB0aGVzZSBib3pvcyBoYXBweSwKKyAqIGRlZmluZSBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTi4gIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3UKKyAqIGFjdHVhbGx5IGdldCAibWlzc2luZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiIgd2FybmluZ3Mgb3IgZXJyb3JzIHdoaWxlCisgKiBjb21waWxpbmcgdGhlIEpQRUcgY29kZS4KKyAqLworI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisKKy8qIERlZmluZSAiYm9vbGVhbiIgYXMgdW5zaWduZWQgY2hhciwgbm90IGludCwgb24gV2luZG93cyBzeXN0ZW1zLgorICovCisjaWZkZWYgX1dJTjMyCisjaWZuZGVmIF9fUlBDTkRSX0hfXyAgICAgICAgICAgIC8qIGRvbid0IGNvbmZsaWN0IGlmIHJwY25kci5oIGFscmVhZHkgcmVhZCAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJvb2xlYW47CisjZW5kaWYKKyNkZWZpbmUgSEFWRV9CT09MRUFOICAgICAgICAgICAgLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLworI2VuZGlmCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgY29kZSBzZWxlY3Rpb24gd2l0aGluIHRoZSBKUEVHIGxpYnJhcnksCisgKiBidXQgdGhleSBkb24ndCBuZWVkIHRvIGJlIHZpc2libGUgdG8gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5LgorICogVG8gbWluaW1pemUgYXBwbGljYXRpb24gbmFtZXNwYWNlIHBvbGx1dGlvbiwgdGhlIHN5bWJvbHMgd29uJ3QgYmUKKyAqIGRlZmluZWQgdW5sZXNzIEpQRUdfSU5URVJOQUxTIGhhcyBiZWVuIGRlZmluZWQuCisgKi8KKworI2lmZGVmIEpQRUdfSU5URVJOQUxTCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdXIgY29tcGlsZXIgaW1wbGVtZW50cyAiPj4iIG9uIHNpZ25lZCB2YWx1ZXMgYXMgYSBsb2dpY2FsCisgKiAodW5zaWduZWQpIHNoaWZ0OyBsZWF2ZSBpdCB1bmRlZmluZWQgaWYgIj4+IiBpcyBhIHNpZ25lZCAoYXJpdGhtZXRpYykgc2hpZnQsCisgKiB3aGljaCBpcyB0aGUgbm9ybWFsIGFuZCByYXRpb25hbCBkZWZpbml0aW9uLgorICovCisjdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKworCisjZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KKworCisvKgorICogVGhlIHJlbWFpbmluZyBvcHRpb25zIGRvIG5vdCBhZmZlY3QgdGhlIEpQRUcgbGlicmFyeSBwcm9wZXIsCisgKiBidXQgb25seSB0aGUgc2FtcGxlIGFwcGxpY2F0aW9ucyBjanBlZy9kanBlZyAoc2VlIGNqcGVnLmMsIGRqcGVnLmMpLgorICogT3RoZXIgYXBwbGljYXRpb25zIGNhbiBpZ25vcmUgdGhlc2UuCisgKi8KKworI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKKworLyogVGhlc2UgZGVmaW5lcyBpbmRpY2F0ZSB3aGljaCBpbWFnZSAobm9uLUpQRUcpIGZpbGUgZm9ybWF0cyBhcmUgYWxsb3dlZC4gKi8KKworI2RlZmluZSBCTVBfU1VQUE9SVEVEICAgICAgICAgICAvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgR0lGX1NVUFBPUlRFRCAgICAgICAgICAgLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCisjZGVmaW5lIFBQTV9TVVBQT1JURUQgICAgICAgICAgIC8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI3VuZGVmIFJMRV9TVVBQT1JURUQgICAgICAgICAgICAvKiBVdGFoIFJMRSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBUQVJHQV9TVVBQT1JURUQgICAgICAgICAvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBuYW1lIGJvdGggaW5wdXQgYW5kIG91dHB1dCBmaWxlcyBvbiB0aGUgY29tbWFuZAorICogbGluZSwgcmF0aGVyIHRoYW4gdXNpbmcgc3Rkb3V0IGFuZCBvcHRpb25hbGx5IHN0ZGluLiAgWW91IE1VU1QgZG8gdGhpcyBpZgorICogeW91ciBzeXN0ZW0gY2FuJ3QgY29wZSB3aXRoIGJpbmFyeSBJL08gdG8gc3RkaW4vc3Rkb3V0LiAgU2VlIGNvbW1lbnRzIGF0CisgKiBoZWFkIG9mIGNqcGVnLmMgb3IgZGpwZWcuYy4KKyAqLworI3VuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCisKKy8qIEJ5IGRlZmF1bHQsIHdlIG9wZW4gaW1hZ2UgZmlsZXMgd2l0aCBmb3BlbiguLi4sICJyYiIpIG9yIGZvcGVuKC4uLiwgIndiIikuCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSBvbiBzeXN0ZW1zIHRoYXQgZGlzdGluZ3Vpc2ggdGV4dCBmaWxlcyBmcm9tIGJpbmFyeSBmaWxlcywKKyAqIGFuZCBpcyBoYXJtbGVzcyBvbiBtb3N0IHN5c3RlbXMgdGhhdCBkb24ndC4gIElmIHlvdSBoYXZlIG9uZSBvZiB0aGUgcmFyZQorICogc3lzdGVtcyB0aGF0IGNvbXBsYWlucyBhYm91dCB0aGUgImIiIHNwZWMsIGRlZmluZSB0aGlzIHN5bWJvbC4KKyAqLworI3VuZGVmIERPTlRfVVNFX0JfTU9ERQorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCBwZXJjZW50LWRvbmUgcHJvZ3Jlc3MgcmVwb3J0cyBmcm9tIGNqcGVnL2RqcGVnLgorICovCisjdW5kZWYgUFJPR1JFU1NfUkVQT1JUCisKKworI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjb25maWdpbnQuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjb25maWdpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzdjZmZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbmZpZ2ludC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIGpjb25maWdpbnQuaC4gIEdlbmVyYXRlZCBmcm9tIGpjb25maWdpbnQuaC5pbiBieSBjb25maWd1cmUuICAqLworLyogbGlianBlZy10dXJibyBidWlsZCBudW1iZXIgKi8KKyNkZWZpbmUgQlVJTEQgIiIKKworLyogSG93IHRvIG9idGFpbiBmdW5jdGlvbiBpbmxpbmluZy4gKi8KKyNpZm5kZWYgSU5MSU5FCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgSU5MSU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIElOTElORSBfX2ZvcmNlaW5saW5lCisjZWxzZQorI2RlZmluZSBJTkxJTkUKKyNlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJsaWJqcGVnLXR1cmJvIgorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjZGVmaW5lIFZFUlNJT04gIjEuNC45MCIKKworLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNpZiBfX1dPUkRTSVpFPT02NCB8fCBkZWZpbmVkKF9XSU42NCkKKyNkZWZpbmUgU0laRU9GX1NJWkVfVCA4CisjZWxzZQorI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjb25maWdpbnQuaC5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjb25maWdpbnQuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWRmMDUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNvbmZpZ2ludC5oLmluCkBAIC0wLDAgKzEsMzEgQEAKKy8qIGxpYmpwZWctdHVyYm8gYnVpbGQgbnVtYmVyICovCisjZGVmaW5lIEJVSUxEICAiQEJVSUxEQCIKKworLyogQ29tcGlsZXIncyBpbmxpbmUga2V5d29yZCAqLworI3VuZGVmIGlubGluZQorCisvKiBIb3cgdG8gb2J0YWluIGZ1bmN0aW9uIGlubGluaW5nLiAqLworI2RlZmluZSBJTkxJTkUgIEBJTkxJTkVACisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICAiQENNQUtFX1BST0pFQ1RfTkFNRUAiCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyNkZWZpbmUgVkVSU0lPTiAgIkBWRVJTSU9OQCIKKworLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NJWkVfVCAgQFNJWkVfVEAKKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgaGFzIF9fYnVpbHRpbl9jdHpsKCkgYW5kIHNpemVvZih1bnNpZ25lZCBsb25nKSA9PSBzaXplb2Yoc2l6ZV90KS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0JVSUxUSU5fQ1RaTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHJpbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lOVFJJTl9ICisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKEhBVkVfSU5UUklOX0gpCisjaWYgKFNJWkVPRl9TSVpFX1QgPT0gOCkKKyNkZWZpbmUgSEFWRV9CSVRTQ0FORk9SV0FSRDY0CisjZWxpZiAoU0laRU9GX1NJWkVfVCA9PSA0KQorI2RlZmluZSBIQVZFX0JJVFNDQU5GT1JXQVJECisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNwYXJhbS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNwYXJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZWE5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY3BhcmFtLmMKQEAgLTAsMCArMSw1NDAgQEAKKy8qCisgKiBqY3BhcmFtLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDMtMjAwOCBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBvcHRpb25hbCBkZWZhdWx0LXNldHRpbmcgY29kZSBmb3IgdGhlIEpQRUcgY29tcHJlc3Nvci4KKyAqIEFwcGxpY2F0aW9ucyBkbyBub3QgaGF2ZSB0byB1c2UgdGhpcyBmaWxlLCBidXQgdGhvc2UgdGhhdCBkb24ndCB1c2UgaXQKKyAqIG11c3Qga25vdyBhIGxvdCBtb3JlIGFib3V0IHRoZSBpbm5hcmRzIG9mIHRoZSBKUEVHIGNvZGUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzdGRodWZmLmMiCisKKworLyoKKyAqIFF1YW50aXphdGlvbiB0YWJsZSBzZXR1cCByb3V0aW5lcworICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19hZGRfcXVhbnRfdGFibGUoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB3aGljaF90YmwsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLCBpbnQgc2NhbGVfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKKy8qIERlZmluZSBhIHF1YW50aXphdGlvbiB0YWJsZSBlcXVhbCB0byB0aGUgYmFzaWNfdGFibGUgdGltZXMKKyAqIGEgc2NhbGUgZmFjdG9yIChnaXZlbiBhcyBhIHBlcmNlbnRhZ2UpLgorICogSWYgZm9yY2VfYmFzZWxpbmUgaXMgVFJVRSwgdGhlIGNvbXB1dGVkIHF1YW50aXphdGlvbiB0YWJsZSBlbnRyaWVzCisgKiBhcmUgbGltaXRlZCB0byAxLi4yNTUgZm9yIEpQRUcgYmFzZWxpbmUgY29tcGF0aWJpbGl0eS4KKyAqLworeworICBKUVVBTlRfVEJMICoqcXRibHB0cjsKKyAgaW50IGk7CisgIGxvbmcgdGVtcDsKKworICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICBpZiAod2hpY2hfdGJsIDwgMCB8fCB3aGljaF90YmwgPj0gTlVNX1FVQU5UX1RCTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfRFFUX0lOREVYLCB3aGljaF90YmwpOworCisgIHF0YmxwdHIgPSAmY2luZm8tPnF1YW50X3RibF9wdHJzW3doaWNoX3RibF07CisKKyAgaWYgKCpxdGJscHRyID09IE5VTEwpCisgICAgKnF0YmxwdHIgPSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisgICAgdGVtcCA9ICgobG9uZyliYXNpY190YWJsZVtpXSAqIHNjYWxlX2ZhY3RvciArIDUwTCkgLyAxMDBMOworICAgIC8qIGxpbWl0IHRoZSB2YWx1ZXMgdG8gdGhlIHZhbGlkIHJhbmdlICovCisgICAgaWYgKHRlbXAgPD0gMEwpIHRlbXAgPSAxTDsKKyAgICBpZiAodGVtcCA+IDMyNzY3TCkgdGVtcCA9IDMyNzY3TDsgLyogbWF4IHF1YW50aXplciBuZWVkZWQgZm9yIDEyIGJpdHMgKi8KKyAgICBpZiAoZm9yY2VfYmFzZWxpbmUgJiYgdGVtcCA+IDI1NUwpCisgICAgICB0ZW1wID0gMjU1TDsgICAgICAgICAgICAgIC8qIGxpbWl0IHRvIGJhc2VsaW5lIHJhbmdlIGlmIHJlcXVlc3RlZCAqLworICAgICgqcXRibHB0ciktPnF1YW50dmFsW2ldID0gKFVJTlQxNil0ZW1wOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBzZW50X3RhYmxlIEZBTFNFIHNvIHRhYmxlIHdpbGwgYmUgd3JpdHRlbiB0byBKUEVHIGZpbGUuICovCisgICgqcXRibHB0ciktPnNlbnRfdGFibGUgPSBGQUxTRTsKK30KKworCisvKiBUaGVzZSBhcmUgdGhlIHNhbXBsZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIEpQRUcgc3BlYyBzZWN0aW9uIEsuMS4KKyAqIFRoZSBzcGVjIHNheXMgdGhhdCB0aGUgdmFsdWVzIGdpdmVuIHByb2R1Y2UgImdvb2QiIHF1YWxpdHksIGFuZAorICogd2hlbiBkaXZpZGVkIGJ5IDIsICJ2ZXJ5IGdvb2QiIHF1YWxpdHkuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RkX2x1bWluYW5jZV9xdWFudF90YmxbRENUU0laRTJdID0geworICAxNiwgIDExLCAgMTAsICAxNiwgIDI0LCAgNDAsICA1MSwgIDYxLAorICAxMiwgIDEyLCAgMTQsICAxOSwgIDI2LCAgNTgsICA2MCwgIDU1LAorICAxNCwgIDEzLCAgMTYsICAyNCwgIDQwLCAgNTcsICA2OSwgIDU2LAorICAxNCwgIDE3LCAgMjIsICAyOSwgIDUxLCAgODcsICA4MCwgIDYyLAorICAxOCwgIDIyLCAgMzcsICA1NiwgIDY4LCAxMDksIDEwMywgIDc3LAorICAyNCwgIDM1LCAgNTUsICA2NCwgIDgxLCAxMDQsIDExMywgIDkyLAorICA0OSwgIDY0LCAgNzgsICA4NywgMTAzLCAxMjEsIDEyMCwgMTAxLAorICA3MiwgIDkyLCAgOTUsICA5OCwgMTEyLCAxMDAsIDEwMywgIDk5Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsW0RDVFNJWkUyXSA9IHsKKyAgMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwKKyAgMTgsICAyMSwgIDI2LCAgNjYsICA5OSwgIDk5LCAgOTksICA5OSwKKyAgMjQsICAyNiwgIDU2LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OQorfTsKKworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorR0xPQkFMKHZvaWQpCitqcGVnX2RlZmF1bHRfcXRhYmxlcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKKy8qIFNldCBvciBjaGFuZ2UgdGhlICdxdWFsaXR5JyAocXVhbnRpemF0aW9uKSBzZXR0aW5nLCB1c2luZyBkZWZhdWx0IHRhYmxlcworICogYW5kIHN0cmFpZ2h0IHBlcmNlbnRhZ2Utc2NhbGluZyBxdWFsaXR5IHNjYWxlcy4KKyAqIFRoaXMgZW50cnkgcG9pbnQgYWxsb3dzIGRpZmZlcmVudCBzY2FsaW5ncyBmb3IgbHVtaW5hbmNlIGFuZCBjaHJvbWluYW5jZS4KKyAqLworeworICAvKiBTZXQgdXAgdHdvIHF1YW50aXphdGlvbiB0YWJsZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBzY2FsaW5nICovCisgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCAwLCBzdGRfbHVtaW5hbmNlX3F1YW50X3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPnFfc2NhbGVfZmFjdG9yWzBdLCBmb3JjZV9iYXNlbGluZSk7CisgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCAxLCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsLAorICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+cV9zY2FsZV9mYWN0b3JbMV0sIGZvcmNlX2Jhc2VsaW5lKTsKK30KKyNlbmRpZgorCisKK0dMT0JBTCh2b2lkKQoranBlZ19zZXRfbGluZWFyX3F1YWxpdHkoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBzY2FsZV9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorLyogU2V0IG9yIGNoYW5nZSB0aGUgJ3F1YWxpdHknIChxdWFudGl6YXRpb24pIHNldHRpbmcsIHVzaW5nIGRlZmF1bHQgdGFibGVzCisgKiBhbmQgYSBzdHJhaWdodCBwZXJjZW50YWdlLXNjYWxpbmcgcXVhbGl0eSBzY2FsZS4gIEluIG1vc3QgY2FzZXMgaXQncyBiZXR0ZXIKKyAqIHRvIHVzZSBqcGVnX3NldF9xdWFsaXR5IChiZWxvdyk7IHRoaXMgZW50cnkgcG9pbnQgaXMgcHJvdmlkZWQgZm9yCisgKiBhcHBsaWNhdGlvbnMgdGhhdCBpbnNpc3Qgb24gYSBsaW5lYXIgcGVyY2VudGFnZSBzY2FsaW5nLgorICovCit7CisgIC8qIFNldCB1cCB0d28gcXVhbnRpemF0aW9uIHRhYmxlcyB1c2luZyB0aGUgc3BlY2lmaWVkIHNjYWxpbmcgKi8KKyAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDAsIHN0ZF9sdW1pbmFuY2VfcXVhbnRfdGJsLAorICAgICAgICAgICAgICAgICAgICAgICBzY2FsZV9mYWN0b3IsIGZvcmNlX2Jhc2VsaW5lKTsKKyAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDEsIHN0ZF9jaHJvbWluYW5jZV9xdWFudF90YmwsCisgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlX2ZhY3RvciwgZm9yY2VfYmFzZWxpbmUpOworfQorCisKK0dMT0JBTChpbnQpCitqcGVnX3F1YWxpdHlfc2NhbGluZyhpbnQgcXVhbGl0eSkKKy8qIENvbnZlcnQgYSB1c2VyLXNwZWNpZmllZCBxdWFsaXR5IHJhdGluZyB0byBhIHBlcmNlbnRhZ2Ugc2NhbGluZyBmYWN0b3IKKyAqIGZvciBhbiB1bmRlcmx5aW5nIHF1YW50aXphdGlvbiB0YWJsZSwgdXNpbmcgb3VyIHJlY29tbWVuZGVkIHNjYWxpbmcgY3VydmUuCisgKiBUaGUgaW5wdXQgJ3F1YWxpdHknIGZhY3RvciBzaG91bGQgYmUgMCAodGVycmlibGUpIHRvIDEwMCAodmVyeSBnb29kKS4KKyAqLworeworICAvKiBTYWZldHkgbGltaXQgb24gcXVhbGl0eSBmYWN0b3IuICBDb252ZXJ0IDAgdG8gMSB0byBhdm9pZCB6ZXJvIGRpdmlkZS4gKi8KKyAgaWYgKHF1YWxpdHkgPD0gMCkgcXVhbGl0eSA9IDE7CisgIGlmIChxdWFsaXR5ID4gMTAwKSBxdWFsaXR5ID0gMTAwOworCisgIC8qIFRoZSBiYXNpYyB0YWJsZSBpcyB1c2VkIGFzLWlzIChzY2FsaW5nIDEwMCkgZm9yIGEgcXVhbGl0eSBvZiA1MC4KKyAgICogUXVhbGl0aWVzIDUwLi4xMDAgYXJlIGNvbnZlcnRlZCB0byBzY2FsaW5nIHBlcmNlbnRhZ2UgMjAwIC0gMipROworICAgKiBub3RlIHRoYXQgYXQgUT0xMDAgdGhlIHNjYWxpbmcgaXMgMCwgd2hpY2ggd2lsbCBjYXVzZSBqcGVnX2FkZF9xdWFudF90YWJsZQorICAgKiB0byBtYWtlIGFsbCB0aGUgdGFibGUgZW50cmllcyAxIChoZW5jZSwgbWluaW11bSBxdWFudGl6YXRpb24gbG9zcykuCisgICAqIFF1YWxpdGllcyAxLi41MCBhcmUgY29udmVydGVkIHRvIHNjYWxpbmcgcGVyY2VudGFnZSA1MDAwL1EuCisgICAqLworICBpZiAocXVhbGl0eSA8IDUwKQorICAgIHF1YWxpdHkgPSA1MDAwIC8gcXVhbGl0eTsKKyAgZWxzZQorICAgIHF1YWxpdHkgPSAyMDAgLSBxdWFsaXR5ICogMjsKKworICByZXR1cm4gcXVhbGl0eTsKK30KKworCitHTE9CQUwodm9pZCkKK2pwZWdfc2V0X3F1YWxpdHkoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBxdWFsaXR5LCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorLyogU2V0IG9yIGNoYW5nZSB0aGUgJ3F1YWxpdHknIChxdWFudGl6YXRpb24pIHNldHRpbmcsIHVzaW5nIGRlZmF1bHQgdGFibGVzLgorICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgcXVhbGl0eS1hZGp1c3RpbmcgZW50cnkgcG9pbnQgZm9yIHR5cGljYWwgdXNlcgorICogaW50ZXJmYWNlczsgb25seSB0aG9zZSB3aG8gd2FudCBkZXRhaWxlZCBjb250cm9sIG92ZXIgcXVhbnRpemF0aW9uIHRhYmxlcworICogd291bGQgdXNlIHRoZSBwcmVjZWRpbmcgdGhyZWUgcm91dGluZXMgZGlyZWN0bHkuCisgKi8KK3sKKyAgLyogQ29udmVydCB1c2VyIDAtMTAwIHJhdGluZyB0byBwZXJjZW50YWdlIHNjYWxpbmcgKi8KKyAgcXVhbGl0eSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKHF1YWxpdHkpOworCisgIC8qIFNldCB1cCBzdGFuZGFyZCBxdWFsaXR5IHRhYmxlcyAqLworICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eShjaW5mbywgcXVhbGl0eSwgZm9yY2VfYmFzZWxpbmUpOworfQorCisKKy8qCisgKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24uCisgKgorICogQXBwbGljYXRpb25zIHRoYXQgZG9uJ3QgY2hvb3NlIHRvIHVzZSB0aGlzIHJvdXRpbmUgbXVzdCBkbyB0aGVpcgorICogb3duIHNldHVwIG9mIGFsbCB0aGVzZSBwYXJhbWV0ZXJzLiAgQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2FsbCB0aGlzCisgKiB0byBlc3RhYmxpc2ggZGVmYXVsdHMgYW5kIHRoZW4gYWx0ZXIgcGFyYW1ldGVycyBzZWxlY3RpdmVseS4gIFRoaXMKKyAqIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBzaW5jZSwgaWYgd2UgYWRkIGFueSBuZXcgcGFyYW1ldGVycywKKyAqIHlvdXIgY29kZSB3aWxsIHN0aWxsIHdvcmsgKHRoZXknbGwgYmUgc2V0IHRvIHJlYXNvbmFibGUgZGVmYXVsdHMpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zZXRfZGVmYXVsdHMoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIGludCBpOworCisgIC8qIFNhZmV0eSBjaGVjayB0byBlbnN1cmUgc3RhcnRfY29tcHJlc3Mgbm90IGNhbGxlZCB5ZXQuICovCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TVEFSVCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworCisgIC8qIEFsbG9jYXRlIGNvbXBfaW5mbyBhcnJheSBsYXJnZSBlbm91Z2ggZm9yIG1heGltdW0gY29tcG9uZW50IGNvdW50LgorICAgKiBBcnJheSBpcyBtYWRlIHBlcm1hbmVudCBpbiBjYXNlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGNvbXByZXNzCisgICAqIG11bHRpcGxlIGltYWdlcyBhdCBzYW1lIHBhcmFtIHNldHRpbmdzLgorICAgKi8KKyAgaWYgKGNpbmZvLT5jb21wX2luZm8gPT0gTlVMTCkKKyAgICBjaW5mby0+Y29tcF9pbmZvID0gKGpwZWdfY29tcG9uZW50X2luZm8gKikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX0NPTVBPTkVOVFMgKiBzaXplb2YoanBlZ19jb21wb25lbnRfaW5mbykpOworCisgIC8qIEluaXRpYWxpemUgZXZlcnl0aGluZyBub3QgZGVwZW5kZW50IG9uIHRoZSBjb2xvciBzcGFjZSAqLworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICBjaW5mby0+c2NhbGVfbnVtID0gMTsgICAgICAgICAvKiAxOjEgc2NhbGluZyAqLworICBjaW5mby0+c2NhbGVfZGVub20gPSAxOworI2VuZGlmCisgIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiA9IEJJVFNfSU5fSlNBTVBMRTsKKyAgLyogU2V0IHVwIHR3byBxdWFudGl6YXRpb24gdGFibGVzIHVzaW5nIGRlZmF1bHQgcXVhbGl0eSBvZiA3NSAqLworICBqcGVnX3NldF9xdWFsaXR5KGNpbmZvLCA3NSwgVFJVRSk7CisgIC8qIFNldCB1cCB0d28gSHVmZm1hbiB0YWJsZXMgKi8KKyAgc3RkX2h1ZmZfdGFibGVzKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIC8qIEluaXRpYWxpemUgZGVmYXVsdCBhcml0aG1ldGljIGNvZGluZyBjb25kaXRpb25pbmcgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspIHsKKyAgICBjaW5mby0+YXJpdGhfZGNfTFtpXSA9IDA7CisgICAgY2luZm8tPmFyaXRoX2RjX1VbaV0gPSAxOworICAgIGNpbmZvLT5hcml0aF9hY19LW2ldID0gNTsKKyAgfQorCisgIC8qIERlZmF1bHQgaXMgbm8gbXVsdGlwbGUtc2NhbiBvdXRwdXQgKi8KKyAgY2luZm8tPnNjYW5faW5mbyA9IE5VTEw7CisgIGNpbmZvLT5udW1fc2NhbnMgPSAwOworCisgIC8qIEV4cGVjdCBub3JtYWwgc291cmNlIGltYWdlLCBub3QgcmF3IGRvd25zYW1wbGVkIGRhdGEgKi8KKyAgY2luZm8tPnJhd19kYXRhX2luID0gRkFMU0U7CisKKyAgLyogVXNlIEh1ZmZtYW4gY29kaW5nLCBub3QgYXJpdGhtZXRpYyBjb2RpbmcsIGJ5IGRlZmF1bHQgKi8KKyAgY2luZm8tPmFyaXRoX2NvZGUgPSBGQUxTRTsKKworICAvKiBCeSBkZWZhdWx0LCBkb24ndCBkbyBleHRyYSBwYXNzZXMgdG8gb3B0aW1pemUgZW50cm9weSBjb2RpbmcgKi8KKyAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IEZBTFNFOworICAvKiBUaGUgc3RhbmRhcmQgSHVmZm1hbiB0YWJsZXMgYXJlIG9ubHkgdmFsaWQgZm9yIDgtYml0IGRhdGEgcHJlY2lzaW9uLgorICAgKiBJZiB0aGUgcHJlY2lzaW9uIGlzIGhpZ2hlciwgZm9yY2Ugb3B0aW1pemF0aW9uIG9uIHNvIHRoYXQgdXNhYmxlCisgICAqIHRhYmxlcyB3aWxsIGJlIGNvbXB1dGVkLiAgVGhpcyB0ZXN0IGNhbiBiZSByZW1vdmVkIGlmIGRlZmF1bHQgdGFibGVzCisgICAqIGFyZSBzdXBwbGllZCB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlIGRlc2lyZWQgcHJlY2lzaW9uLgorICAgKi8KKyAgaWYgKGNpbmZvLT5kYXRhX3ByZWNpc2lvbiA+IDgpCisgICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisKKyAgLyogQnkgZGVmYXVsdCwgdXNlIHRoZSBzaW1wbGVyIG5vbi1jb3NpdGVkIHNhbXBsaW5nIGFsaWdubWVudCAqLworICBjaW5mby0+Q0NJUjYwMV9zYW1wbGluZyA9IEZBTFNFOworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAvKiBCeSBkZWZhdWx0LCBhcHBseSBmYW5jeSBkb3duc2FtcGxpbmcgKi8KKyAgY2luZm8tPmRvX2ZhbmN5X2Rvd25zYW1wbGluZyA9IFRSVUU7CisjZW5kaWYKKworICAvKiBObyBpbnB1dCBzbW9vdGhpbmcgKi8KKyAgY2luZm8tPnNtb290aGluZ19mYWN0b3IgPSAwOworCisgIC8qIERDVCBhbGdvcml0aG0gcHJlZmVyZW5jZSAqLworICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfREVGQVVMVDsKKworICAvKiBObyByZXN0YXJ0IG1hcmtlcnMgKi8KKyAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSAwOworICBjaW5mby0+cmVzdGFydF9pbl9yb3dzID0gMDsKKworICAvKiBGaWxsIGluIGRlZmF1bHQgSkZJRiBtYXJrZXIgcGFyYW1ldGVycy4gIE5vdGUgdGhhdCB3aGV0aGVyIHRoZSBtYXJrZXIKKyAgICogd2lsbCBhY3R1YWxseSBiZSB3cml0dGVuIGlzIGRldGVybWluZWQgYnkganBlZ19zZXRfY29sb3JzcGFjZS4KKyAgICoKKyAgICogQnkgZGVmYXVsdCwgdGhlIGxpYnJhcnkgZW1pdHMgSkZJRiB2ZXJzaW9uIGNvZGUgMS4wMS4KKyAgICogQW4gYXBwbGljYXRpb24gdGhhdCB3YW50cyB0byBlbWl0IEpGSUYgMS4wMiBleHRlbnNpb24gbWFya2VycyBzaG91bGQgc2V0CisgICAqIEpGSUZfbWlub3JfdmVyc2lvbiB0byAyLiAgV2UgY291bGQgcHJvYmFibHkgZ2V0IGF3YXkgd2l0aCBqdXN0IGRlZmF1bHRpbmcKKyAgICogdG8gMS4wMiwgYnV0IHRoZXJlIG1heSBzdGlsbCBiZSBzb21lIGRlY29kZXJzIGluIHVzZSB0aGF0IHdpbGwgY29tcGxhaW4KKyAgICogYWJvdXQgdGhhdDsgc2F5aW5nIDEuMDEgc2hvdWxkIG1pbmltaXplIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMuCisgICAqLworICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uID0gMTsgLyogRGVmYXVsdCBKRklGIHZlcnNpb24gPSAxLjAxICovCisgIGNpbmZvLT5KRklGX21pbm9yX3ZlcnNpb24gPSAxOworICBjaW5mby0+ZGVuc2l0eV91bml0ID0gMDsgICAgICAvKiBQaXhlbCBzaXplIGlzIHVua25vd24gYnkgZGVmYXVsdCAqLworICBjaW5mby0+WF9kZW5zaXR5ID0gMTsgICAgICAgICAvKiBQaXhlbCBhc3BlY3QgcmF0aW8gaXMgc3F1YXJlIGJ5IGRlZmF1bHQgKi8KKyAgY2luZm8tPllfZGVuc2l0eSA9IDE7CisKKyAgLyogQ2hvb3NlIEpQRUcgY29sb3JzcGFjZSBiYXNlZCBvbiBpbnB1dCBzcGFjZSwgc2V0IGRlZmF1bHRzIGFjY29yZGluZ2x5ICovCisKKyAganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UoY2luZm8pOworfQorCisKKy8qCisgKiBTZWxlY3QgYW4gYXBwcm9wcmlhdGUgSlBFRyBjb2xvcnNwYWNlIGZvciBpbl9jb2xvcl9zcGFjZS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZGVmYXVsdF9jb2xvcnNwYWNlKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAganBlZ19zZXRfY29sb3JzcGFjZShjaW5mbywgSkNTX0dSQVlTQ0FMRSk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1JHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0NNWUs6CisgICAganBlZ19zZXRfY29sb3JzcGFjZShjaW5mbywgSkNTX0NNWUspOyAvKiBCeSBkZWZhdWx0LCBubyB0cmFuc2xhdGlvbiAqLworICAgIGJyZWFrOworICBjYXNlIEpDU19ZQ0NLOgorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ0NLKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfVU5LTk9XTjoKKyAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfVU5LTk9XTik7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CisgIH0KK30KKworCisvKgorICogU2V0IHRoZSBKUEVHIGNvbG9yc3BhY2UsIGFuZCBjaG9vc2UgY29sb3JzcGFjZS1kZXBlbmRlbnQgZGVmYXVsdCB2YWx1ZXMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX3NldF9jb2xvcnNwYWNlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0NPTE9SX1NQQUNFIGNvbG9yc3BhY2UpCit7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGludCBjaTsKKworI2RlZmluZSBTRVRfQ09NUChpbmRleCwgaWQsIGhzYW1wLCB2c2FtcCwgcXVhbnQsIGRjdGJsLCBhY3RibCkgXAorICAoY29tcHB0ciA9ICZjaW5mby0+Y29tcF9pbmZvW2luZGV4XSwgXAorICAgY29tcHB0ci0+Y29tcG9uZW50X2lkID0gKGlkKSwgXAorICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9IChoc2FtcCksIFwKKyAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPSAodnNhbXApLCBcCisgICBjb21wcHRyLT5xdWFudF90Ymxfbm8gPSAocXVhbnQpLCBcCisgICBjb21wcHRyLT5kY190Ymxfbm8gPSAoZGN0YmwpLCBcCisgICBjb21wcHRyLT5hY190Ymxfbm8gPSAoYWN0YmwpICkKKworICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICAvKiBGb3IgYWxsIGNvbG9yc3BhY2VzLCB3ZSB1c2UgUSBhbmQgSHVmZiB0YWJsZXMgMCBmb3IgbHVtaW5hbmNlIGNvbXBvbmVudHMsCisgICAqIHRhYmxlcyAxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLgorICAgKi8KKworICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IGNvbG9yc3BhY2U7CisKKyAgY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gRkFMU0U7IC8qIE5vIG1hcmtlciBmb3Igbm9uLUpGSUYgY29sb3JzcGFjZXMgKi8KKyAgY2luZm8tPndyaXRlX0Fkb2JlX21hcmtlciA9IEZBTFNFOyAvKiB3cml0ZSBubyBBZG9iZSBtYXJrZXIgYnkgZGVmYXVsdCAqLworCisgIHN3aXRjaCAoY29sb3JzcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gVFJVRTsgLyogV3JpdGUgYSBKRklGIG1hcmtlciAqLworICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IDE7CisgICAgLyogSkZJRiBzcGVjaWZpZXMgY29tcG9uZW50IElEIDEgKi8KKyAgICBTRVRfQ09NUCgwLCAxLCAxLCAxLCAwLCAwLCAwKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfUkdCOgorICAgIGNpbmZvLT53cml0ZV9BZG9iZV9tYXJrZXIgPSBUUlVFOyAvKiB3cml0ZSBBZG9iZSBtYXJrZXIgdG8gZmxhZyBSR0IgKi8KKyAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgPSAzOworICAgIFNFVF9DT01QKDAsIDB4NTIgLyogJ1InICovLCAxLCAxLCAwLCAwLCAwKTsKKyAgICBTRVRfQ09NUCgxLCAweDQ3IC8qICdHJyAqLywgMSwgMSwgMCwgMCwgMCk7CisgICAgU0VUX0NPTVAoMiwgMHg0MiAvKiAnQicgKi8sIDEsIDEsIDAsIDAsIDApOworICAgIGJyZWFrOworICBjYXNlIEpDU19ZQ2JDcjoKKyAgICBjaW5mby0+d3JpdGVfSkZJRl9oZWFkZXIgPSBUUlVFOyAvKiBXcml0ZSBhIEpGSUYgbWFya2VyICovCisgICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gMzsKKyAgICAvKiBKRklGIHNwZWNpZmllcyBjb21wb25lbnQgSURzIDEsMiwzICovCisgICAgLyogV2UgZGVmYXVsdCB0byAyeDIgc3Vic2FtcGxlcyBvZiBjaHJvbWluYW5jZSAqLworICAgIFNFVF9DT01QKDAsIDEsIDIsIDIsIDAsIDAsIDApOworICAgIFNFVF9DT01QKDEsIDIsIDEsIDEsIDEsIDEsIDEpOworICAgIFNFVF9DT01QKDIsIDMsIDEsIDEsIDEsIDEsIDEpOworICAgIGJyZWFrOworICBjYXNlIEpDU19DTVlLOgorICAgIGNpbmZvLT53cml0ZV9BZG9iZV9tYXJrZXIgPSBUUlVFOyAvKiB3cml0ZSBBZG9iZSBtYXJrZXIgdG8gZmxhZyBDTVlLICovCisgICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gNDsKKyAgICBTRVRfQ09NUCgwLCAweDQzIC8qICdDJyAqLywgMSwgMSwgMCwgMCwgMCk7CisgICAgU0VUX0NPTVAoMSwgMHg0RCAvKiAnTScgKi8sIDEsIDEsIDAsIDAsIDApOworICAgIFNFVF9DT01QKDIsIDB4NTkgLyogJ1knICovLCAxLCAxLCAwLCAwLCAwKTsKKyAgICBTRVRfQ09NUCgzLCAweDRCIC8qICdLJyAqLywgMSwgMSwgMCwgMCwgMCk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1lDQ0s6CisgICAgY2luZm8tPndyaXRlX0Fkb2JlX21hcmtlciA9IFRSVUU7IC8qIHdyaXRlIEFkb2JlIG1hcmtlciB0byBmbGFnIFlDQ0sgKi8KKyAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgPSA0OworICAgIFNFVF9DT01QKDAsIDEsIDIsIDIsIDAsIDAsIDApOworICAgIFNFVF9DT01QKDEsIDIsIDEsIDEsIDEsIDEsIDEpOworICAgIFNFVF9DT01QKDIsIDMsIDEsIDEsIDEsIDEsIDEpOworICAgIFNFVF9DT01QKDMsIDQsIDIsIDIsIDAsIDAsIDApOworICAgIGJyZWFrOworICBjYXNlIEpDU19VTktOT1dOOgorICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzOworICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPCAxIHx8IGNpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQorICAgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBjaW5mby0+bnVtX2NvbXBvbmVudHMsCisgICAgICAgICAgICAgICBNQVhfQ09NUE9ORU5UUyk7CisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgICBTRVRfQ09NUChjaSwgY2ksIDEsIDEsIDAsIDAsIDApOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICB9Cit9CisKKworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisKK0xPQ0FMKGpwZWdfc2Nhbl9pbmZvICopCitmaWxsX2Ffc2NhbihqcGVnX3NjYW5faW5mbyAqc2NhbnB0ciwgaW50IGNpLCBpbnQgU3MsIGludCBTZSwgaW50IEFoLCBpbnQgQWwpCisvKiBTdXBwb3J0IHJvdXRpbmU6IGdlbmVyYXRlIG9uZSBzY2FuIGZvciBzcGVjaWZpZWQgY29tcG9uZW50ICovCit7CisgIHNjYW5wdHItPmNvbXBzX2luX3NjYW4gPSAxOworICBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbMF0gPSBjaTsKKyAgc2NhbnB0ci0+U3MgPSBTczsKKyAgc2NhbnB0ci0+U2UgPSBTZTsKKyAgc2NhbnB0ci0+QWggPSBBaDsKKyAgc2NhbnB0ci0+QWwgPSBBbDsKKyAgc2NhbnB0cisrOworICByZXR1cm4gc2NhbnB0cjsKK30KKworTE9DQUwoanBlZ19zY2FuX2luZm8gKikKK2ZpbGxfc2NhbnMoanBlZ19zY2FuX2luZm8gKnNjYW5wdHIsIGludCBuY29tcHMsIGludCBTcywgaW50IFNlLCBpbnQgQWgsIGludCBBbCkKKy8qIFN1cHBvcnQgcm91dGluZTogZ2VuZXJhdGUgb25lIHNjYW4gZm9yIGVhY2ggY29tcG9uZW50ICovCit7CisgIGludCBjaTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBuY29tcHM7IGNpKyspIHsKKyAgICBzY2FucHRyLT5jb21wc19pbl9zY2FuID0gMTsKKyAgICBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbMF0gPSBjaTsKKyAgICBzY2FucHRyLT5TcyA9IFNzOworICAgIHNjYW5wdHItPlNlID0gU2U7CisgICAgc2NhbnB0ci0+QWggPSBBaDsKKyAgICBzY2FucHRyLT5BbCA9IEFsOworICAgIHNjYW5wdHIrKzsKKyAgfQorICByZXR1cm4gc2NhbnB0cjsKK30KKworTE9DQUwoanBlZ19zY2FuX2luZm8gKikKK2ZpbGxfZGNfc2NhbnMoanBlZ19zY2FuX2luZm8gKnNjYW5wdHIsIGludCBuY29tcHMsIGludCBBaCwgaW50IEFsKQorLyogU3VwcG9ydCByb3V0aW5lOiBnZW5lcmF0ZSBpbnRlcmxlYXZlZCBEQyBzY2FuIGlmIHBvc3NpYmxlLCBlbHNlIE4gc2NhbnMgKi8KK3sKKyAgaW50IGNpOworCisgIGlmIChuY29tcHMgPD0gTUFYX0NPTVBTX0lOX1NDQU4pIHsKKyAgICAvKiBTaW5nbGUgaW50ZXJsZWF2ZWQgREMgc2NhbiAqLworICAgIHNjYW5wdHItPmNvbXBzX2luX3NjYW4gPSBuY29tcHM7CisgICAgZm9yIChjaSA9IDA7IGNpIDwgbmNvbXBzOyBjaSsrKQorICAgICAgc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXSA9IGNpOworICAgIHNjYW5wdHItPlNzID0gc2NhbnB0ci0+U2UgPSAwOworICAgIHNjYW5wdHItPkFoID0gQWg7CisgICAgc2NhbnB0ci0+QWwgPSBBbDsKKyAgICBzY2FucHRyKys7CisgIH0gZWxzZSB7CisgICAgLyogTm9uaW50ZXJsZWF2ZWQgREMgc2NhbiBmb3IgZWFjaCBjb21wb25lbnQgKi8KKyAgICBzY2FucHRyID0gZmlsbF9zY2FucyhzY2FucHRyLCBuY29tcHMsIDAsIDAsIEFoLCBBbCk7CisgIH0KKyAgcmV0dXJuIHNjYW5wdHI7Cit9CisKKworLyoKKyAqIENyZWF0ZSBhIHJlY29tbWVuZGVkIHByb2dyZXNzaXZlLUpQRUcgc2NyaXB0LgorICogY2luZm8tPm51bV9jb21wb25lbnRzIGFuZCBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSBtdXN0IGJlIGNvcnJlY3QuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaW50IG5jb21wcyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgaW50IG5zY2FuczsKKyAganBlZ19zY2FuX2luZm8gKnNjYW5wdHI7CisKKyAgLyogU2FmZXR5IGNoZWNrIHRvIGVuc3VyZSBzdGFydF9jb21wcmVzcyBub3QgY2FsbGVkIHlldC4gKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgLyogRmlndXJlIHNwYWNlIG5lZWRlZCBmb3Igc2NyaXB0LiAgQ2FsY3VsYXRpb24gbXVzdCBtYXRjaCBjb2RlIGJlbG93ISAqLworICBpZiAobmNvbXBzID09IDMgJiYgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKSB7CisgICAgLyogQ3VzdG9tIHNjcmlwdCBmb3IgWUNiQ3IgY29sb3IgaW1hZ2VzLiAqLworICAgIG5zY2FucyA9IDEwOworICB9IGVsc2UgeworICAgIC8qIEFsbC1wdXJwb3NlIHNjcmlwdCBmb3Igb3RoZXIgY29sb3Igc3BhY2VzLiAqLworICAgIGlmIChuY29tcHMgPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICAgIG5zY2FucyA9IDYgKiBuY29tcHM7ICAgICAgLyogMiBEQyArIDQgQUMgc2NhbnMgcGVyIGNvbXBvbmVudCAqLworICAgIGVsc2UKKyAgICAgIG5zY2FucyA9IDIgKyA0ICogbmNvbXBzOyAgLyogMiBEQyBzY2FuczsgNCBBQyBzY2FucyBwZXIgY29tcG9uZW50ICovCisgIH0KKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3Igc2NyaXB0LgorICAgKiBXZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGUgcGVybWFuZW50IHBvb2wgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gcGVyZm9ybXMKKyAgICogbXVsdGlwbGUgY29tcHJlc3Npb25zIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNldHRpbmdzLiAgVG8gYXZvaWQgYSBtZW1vcnkKKyAgICogbGVhayBpZiBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBpcyBjYWxsZWQgcmVwZWF0ZWRseSBmb3IgdGhlIHNhbWUgSlBFRworICAgKiBvYmplY3QsIHdlIHRyeSB0byByZS11c2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgc3BhY2UsIGFuZCB3ZSBhbGxvY2F0ZQorICAgKiBlbm91Z2ggc3BhY2UgdG8gaGFuZGxlIFlDYkNyIGV2ZW4gaWYgaW5pdGlhbGx5IGFza2VkIGZvciBncmF5c2NhbGUuCisgICAqLworICBpZiAoY2luZm8tPnNjcmlwdF9zcGFjZSA9PSBOVUxMIHx8IGNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSA8IG5zY2FucykgeworICAgIGNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSA9IE1BWChuc2NhbnMsIDEwKTsKKyAgICBjaW5mby0+c2NyaXB0X3NwYWNlID0gKGpwZWdfc2Nhbl9pbmZvICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPnNjcmlwdF9zcGFjZV9zaXplICogc2l6ZW9mKGpwZWdfc2Nhbl9pbmZvKSk7CisgIH0KKyAgc2NhbnB0ciA9IGNpbmZvLT5zY3JpcHRfc3BhY2U7CisgIGNpbmZvLT5zY2FuX2luZm8gPSBzY2FucHRyOworICBjaW5mby0+bnVtX3NjYW5zID0gbnNjYW5zOworCisgIGlmIChuY29tcHMgPT0gMyAmJiBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpIHsKKyAgICAvKiBDdXN0b20gc2NyaXB0IGZvciBZQ2JDciBjb2xvciBpbWFnZXMuICovCisgICAgLyogSW5pdGlhbCBEQyBzY2FuICovCisgICAgc2NhbnB0ciA9IGZpbGxfZGNfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAwLCAxKTsKKyAgICAvKiBJbml0aWFsIEFDIHNjYW46IGdldCBzb21lIGx1bWEgZGF0YSBvdXQgaW4gYSBodXJyeSAqLworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAwLCAxLCA1LCAwLCAyKTsKKyAgICAvKiBDaHJvbWEgZGF0YSBpcyB0b28gc21hbGwgdG8gYmUgd29ydGggZXhwZW5kaW5nIG1hbnkgc2NhbnMgb24gKi8KKyAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMiwgMSwgNjMsIDAsIDEpOworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAxLCAxLCA2MywgMCwgMSk7CisgICAgLyogQ29tcGxldGUgc3BlY3RyYWwgc2VsZWN0aW9uIGZvciBsdW1hIEFDICovCisgICAgc2NhbnB0ciA9IGZpbGxfYV9zY2FuKHNjYW5wdHIsIDAsIDYsIDYzLCAwLCAyKTsKKyAgICAvKiBSZWZpbmUgbmV4dCBiaXQgb2YgbHVtYSBBQyAqLworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAwLCAxLCA2MywgMiwgMSk7CisgICAgLyogRmluaXNoIERDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiAqLworICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgMCk7CisgICAgLyogRmluaXNoIEFDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiAqLworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAyLCAxLCA2MywgMSwgMCk7CisgICAgc2NhbnB0ciA9IGZpbGxfYV9zY2FuKHNjYW5wdHIsIDEsIDEsIDYzLCAxLCAwKTsKKyAgICAvKiBMdW1hIGJvdHRvbSBiaXQgY29tZXMgbGFzdCBzaW5jZSBpdCdzIHVzdWFsbHkgbGFyZ2VzdCBzY2FuICovCisgICAgc2NhbnB0ciA9IGZpbGxfYV9zY2FuKHNjYW5wdHIsIDAsIDEsIDYzLCAxLCAwKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBBbGwtcHVycG9zZSBzY3JpcHQgZm9yIG90aGVyIGNvbG9yIHNwYWNlcy4gKi8KKyAgICAvKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gZmlyc3QgcGFzcyAqLworICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMCwgMSk7CisgICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAxLCA1LCAwLCAyKTsKKyAgICBzY2FucHRyID0gZmlsbF9zY2FucyhzY2FucHRyLCBuY29tcHMsIDYsIDYzLCAwLCAyKTsKKyAgICAvKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gc2Vjb25kIHBhc3MgKi8KKyAgICBzY2FucHRyID0gZmlsbF9zY2FucyhzY2FucHRyLCBuY29tcHMsIDEsIDYzLCAyLCAxKTsKKyAgICAvKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gZmluYWwgcGFzcyAqLworICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgMCk7CisgICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAxLCA2MywgMSwgMCk7CisgIH0KK30KKworI2VuZGlmIC8qIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY3BodWZmLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY3BodWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZDNhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjcGh1ZmYuYwpAQCAtMCwwICsxLDExMDUgQEAKKy8qCisgKiBqY3BodWZmLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSwgMjAxOCwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyByb3V0aW5lcyBmb3IgcHJvZ3Jlc3NpdmUgSlBFRy4KKyAqCisgKiBXZSBkbyBub3Qgc3VwcG9ydCBvdXRwdXQgc3VzcGVuc2lvbiBpbiB0aGlzIG1vZHVsZSwgc2luY2UgdGhlIGxpYnJhcnkKKyAqIGN1cnJlbnRseSBkb2VzIG5vdCBhbGxvdyBtdWx0aXBsZS1zY2FuIGZpbGVzIHRvIGJlIHdyaXR0ZW4gd2l0aCBvdXRwdXQKKyAqIHN1c3BlbnNpb24uCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWZkZWYgSEFWRV9JTlRSSU5fSAorI2luY2x1ZGUgPGludHJpbi5oPgorI2lmZGVmIF9NU0NfVkVSCisjaWZkZWYgSEFWRV9CSVRTQ0FORk9SV0FSRDY0CisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQ2NCkKKyNlbmRpZgorI2lmZGVmIEhBVkVfQklUU0NBTkZPUldBUkQKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuRm9yd2FyZCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisKKy8qCisgKiBOT1RFOiBJZiBVU0VfQ0xaX0lOVFJJTlNJQyBpcyBkZWZpbmVkLCB0aGVuIGNsei9ic3IgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUKKyAqIHVzZWQgZm9yIGJpdCBjb3VudGluZyByYXRoZXIgdGhhbiB0aGUgbG9va3VwIHRhYmxlLiAgVGhpcyB3aWxsIHJlZHVjZSB0aGUKKyAqIG1lbW9yeSBmb290cHJpbnQgYnkgNjRrLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHNvbWUgbW9iaWxlIGFwcGxpY2F0aW9ucworICogdGhhdCBjcmVhdGUgbWFueSBpc29sYXRlZCBpbnN0YW5jZXMgb2YgbGlianBlZy10dXJibyAod2ViIGJyb3dzZXJzLCBmb3IKKyAqIGluc3RhbmNlLikgIFRoaXMgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2Ugb24gc29tZSBtb2JpbGUgcGxhdGZvcm1zIGFzIHdlbGwuCisgKiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9ubHkgb24gQVJNIHByb2Nlc3NvcnMsIGJlY2F1c2Ugc29tZSB4ODYKKyAqIGNoaXBzIGhhdmUgYSBzbG93IGltcGxlbWVudGF0aW9uIG9mIGJzciwgYW5kIHRoZSB1c2Ugb2YgY2x6L2JzciBjYW5ub3QgYmUKKyAqIHNob3duIHRvIGhhdmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBhY3QgZXZlbiBvbiB0aGUgeDg2IGNoaXBzIHRoYXQKKyAqIGhhdmUgYSBmYXN0IGltcGxlbWVudGF0aW9uIG9mIGl0LiAgV2hlbiBidWlsZGluZyBmb3IgQVJNdjYsIHlvdSBjYW4KKyAqIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGUgdXNlIG9mIGNsei9ic3IgYnkgYWRkaW5nIC1tdGh1bWIgdG8gdGhlIGNvbXBpbGVyCisgKiBmbGFncyAodGhpcyBkZWZpbmVzIF9fdGh1bWJfXykuCisgKi8KKworLyogTk9URTogQm90aCBHQ0MgYW5kIENsYW5nIGRlZmluZSBfX0dOVUNfXyAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKGRlZmluZWQgX19hcm1fXyB8fCBkZWZpbmVkIF9fYWFyY2g2NF9fKQorI2lmICFkZWZpbmVkIF9fdGh1bWJfXyB8fCBkZWZpbmVkIF9fdGh1bWIyX18KKyNkZWZpbmUgVVNFX0NMWl9JTlRSSU5TSUMKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVU0VfQ0xaX0lOVFJJTlNJQworI2RlZmluZSBKUEVHX05CSVRTX05PTlpFUk8oeCkgICgzMiAtIF9fYnVpbHRpbl9jbHooeCkpCisjZGVmaW5lIEpQRUdfTkJJVFMoeCkgICAgICAgICAgKHggPyBKUEVHX05CSVRTX05PTlpFUk8oeCkgOiAwKQorI2Vsc2UKKyNpbmNsdWRlICJqcGVnX25iaXRzX3RhYmxlLmgiCisjZGVmaW5lIEpQRUdfTkJJVFMoeCkgICAgICAgICAgKGpwZWdfbmJpdHNfdGFibGVbeF0pCisjZGVmaW5lIEpQRUdfTkJJVFNfTk9OWkVSTyh4KSAgSlBFR19OQklUUyh4KQorI2VuZGlmCisKKworLyogRXhwYW5kZWQgZW50cm9weSBlbmNvZGVyIG9iamVjdCBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBlbmNvZGluZy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogUG9pbnRlciB0byByb3V0aW5lIHRvIHByZXBhcmUgZGF0YSBmb3IgZW5jb2RlX21jdV9BQ19maXJzdCgpICovCisgIHZvaWQgKCpBQ19maXJzdF9wcmVwYXJlKSAoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LCBpbnQgU2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IEFsLCBKQ09FRiAqdmFsdWVzLCBzaXplX3QgKnplcm9iaXRzKTsKKyAgLyogUG9pbnRlciB0byByb3V0aW5lIHRvIHByZXBhcmUgZGF0YSBmb3IgZW5jb2RlX21jdV9BQ19yZWZpbmUoKSAqLworICBpbnQgKCpBQ19yZWZpbmVfcHJlcGFyZSkgKGNvbnN0IEpDT0VGICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBBbCwgSkNPRUYgKmFic3ZhbHVlcywgc2l6ZV90ICpiaXRzKTsKKworICAvKiBNb2RlIGZsYWc6IFRSVUUgZm9yIG9wdGltaXphdGlvbiwgRkFMU0UgZm9yIGFjdHVhbCBkYXRhIG91dHB1dCAqLworICBib29sZWFuIGdhdGhlcl9zdGF0aXN0aWNzOworCisgIC8qIEJpdC1sZXZlbCBjb2Rpbmcgc3RhdHVzLgorICAgKiBuZXh0X291dHB1dF9ieXRlL2ZyZWVfaW5fYnVmZmVyIGFyZSBsb2NhbCBjb3BpZXMgb2YgY2luZm8tPmRlc3QgZmllbGRzLgorICAgKi8KKyAgSk9DVEVUICpuZXh0X291dHB1dF9ieXRlOyAgICAgLyogPT4gbmV4dCBieXRlIHRvIHdyaXRlIGluIGJ1ZmZlciAqLworICBzaXplX3QgZnJlZV9pbl9idWZmZXI7ICAgICAgICAvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IHB1dF9idWZmZXI7ICAgICAgICAgICAgLyogY3VycmVudCBiaXQtYWNjdW11bGF0aW9uIGJ1ZmZlciAqLworICBpbnQgcHV0X2JpdHM7ICAgICAgICAgICAgICAgICAvKiAjIG9mIGJpdHMgbm93IGluIGl0ICovCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvOyAgICAgICAgIC8qIGxpbmsgdG8gY2luZm8gKG5lZWRlZCBmb3IgZHVtcF9idWZmZXIpICovCisKKyAgLyogQ29kaW5nIHN0YXR1cyBmb3IgREMgY29tcG9uZW50cyAqLworICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCisKKyAgLyogQ29kaW5nIHN0YXR1cyBmb3IgQUMgY29tcG9uZW50cyAqLworICBpbnQgYWNfdGJsX25vOyAgICAgICAgICAgICAgICAvKiB0aGUgdGFibGUgbnVtYmVyIG9mIHRoZSBzaW5nbGUgY29tcG9uZW50ICovCisgIHVuc2lnbmVkIGludCBFT0JSVU47ICAgICAgICAgIC8qIHJ1biBsZW5ndGggb2YgRU9CcyAqLworICB1bnNpZ25lZCBpbnQgQkU7ICAgICAgICAgICAgICAvKiAjIG9mIGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyBiZWZvcmUgTUNVICovCisgIGNoYXIgKmJpdF9idWZmZXI7ICAgICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgY29ycmVjdGlvbiBiaXRzICgxIHBlciBjaGFyKSAqLworICAvKiBwYWNraW5nIGNvcnJlY3Rpb24gYml0cyB0aWdodGx5IHdvdWxkIHNhdmUgc29tZSBzcGFjZSBidXQgY29zdCB0aW1lLi4uICovCisKKyAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOyAgLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworICBpbnQgbmV4dF9yZXN0YXJ0X251bTsgICAgICAgICAvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIHRvIHdyaXRlICgwLTcpICovCisKKyAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikuCisgICAqIFNpbmNlIGFueSBvbmUgc2NhbiBjb2RlcyBvbmx5IERDIG9yIG9ubHkgQUMsIHdlIG9ubHkgbmVlZCBvbmUgc2V0CisgICAqIG9mIHRhYmxlcywgbm90IG9uZSBmb3IgREMgYW5kIG9uZSBmb3IgQUMuCisgICAqLworICBjX2Rlcml2ZWRfdGJsICpkZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107CisKKyAgLyogU3RhdGlzdGljcyB0YWJsZXMgZm9yIG9wdGltaXphdGlvbjsgYWdhaW4sIG9uZSBzZXQgaXMgZW5vdWdoICovCisgIGxvbmcgKmNvdW50X3B0cnNbTlVNX0hVRkZfVEJMU107Cit9IHBodWZmX2VudHJvcHlfZW5jb2RlcjsKKwordHlwZWRlZiBwaHVmZl9lbnRyb3B5X2VuY29kZXIgKnBodWZmX2VudHJvcHlfcHRyOworCisvKiBNQVhfQ09SUl9CSVRTIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0aGUgQUMgcmVmaW5lbWVudCBjb3JyZWN0aW9uLWJpdAorICogYnVmZmVyIGNhbiBob2xkLiAgTGFyZ2VyIHNpemVzIG1heSBzbGlnaHRseSBpbXByb3ZlIGNvbXByZXNzaW9uLCBidXQKKyAqIDEwMDAgaXMgYWxyZWFkeSB3ZWxsIGludG8gdGhlIHJlYWxtIG9mIG92ZXJraWxsLgorICogVGhlIG1pbmltdW0gc2FmZSBzaXplIGlzIDY0IGJpdHMuCisgKi8KKworI2RlZmluZSBNQVhfQ09SUl9CSVRTICAxMDAwICAgICAvKiBNYXggIyBvZiBjb3JyZWN0aW9uIGJpdHMgSSBjYW4gYnVmZmVyICovCisKKy8qIElSSUdIVF9TSElGVCBpcyBsaWtlIFJJR0hUX1NISUZULCBidXQgd29ya3Mgb24gaW50IHJhdGhlciB0aGFuIEpMT05HLgorICogV2UgYXNzdW1lIHRoYXQgaW50IHJpZ2h0IHNoaWZ0IGlzIHVuc2lnbmVkIGlmIEpMT05HIHJpZ2h0IHNoaWZ0IGlzLAorICogd2hpY2ggc2hvdWxkIGJlIHNhZmUuCisgKi8KKworI2lmZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECisjZGVmaW5lIElTSElGVF9URU1QUyAgICBpbnQgaXNoaWZ0X3RlbXA7CisjZGVmaW5lIElSSUdIVF9TSElGVCh4LCBzaGZ0KSBcCisgICgoaXNoaWZ0X3RlbXAgPSAoeCkpIDwgMCA/IFwKKyAgIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+MCkgPDwgKDE2IC0gKHNoZnQpKSkgOiBcCisgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKKyNlbHNlCisjZGVmaW5lIElTSElGVF9URU1QUworI2RlZmluZSBJUklHSFRfU0hJRlQoeCwgc2hmdCkgICAoKHgpID4+IChzaGZ0KSkKKyNlbmRpZgorCisjZGVmaW5lIFBBRCh2LCBwKSAgKCh2ICsgKHApIC0gMSkgJiAofigocCkgLSAxKSkpCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9EQ19maXJzdChqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpOworTUVUSE9EREVGKHZvaWQpIGVuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZQorICAoY29uc3QgSkNPRUYgKmJsb2NrLCBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLCBpbnQgQWwsCisgICBKQ09FRiAqdmFsdWVzLCBzaXplX3QgKnplcm9iaXRzKTsKK01FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0FDX2ZpcnN0KGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSk7CitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9EQ19yZWZpbmUoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSk7CitNRVRIT0RERUYoaW50KSBlbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlCisgIChjb25zdCBKQ09FRiAqYmxvY2ssIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LCBpbnQgU2wsIGludCBBbCwKKyAgIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cyk7CitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9BQ19yZWZpbmUoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSk7CitNRVRIT0RERUYodm9pZCkgZmluaXNoX3Bhc3NfcGh1ZmYoal9jb21wcmVzc19wdHIgY2luZm8pOworTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX2dhdGhlcl9waHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisKKworLyogQ291bnQgYml0IGxvb3AgemVyb2VzICovCitJTkxJTkUKK01FVEhPRERFRihpbnQpCitjb3VudF96ZXJvZXMoc2l6ZV90ICp4KQoreworICBpbnQgcmVzdWx0OworI2lmIGRlZmluZWQoSEFWRV9CVUlMVElOX0NUWkwpCisgIHJlc3VsdCA9IF9fYnVpbHRpbl9jdHpsKCp4KTsKKyAgKnggPj49IHJlc3VsdDsKKyNlbGlmIGRlZmluZWQoSEFWRV9CSVRTQ0FORk9SV0FSRDY0KQorICBfQml0U2NhbkZvcndhcmQ2NCgmcmVzdWx0LCAqeCk7CisgICp4ID4+PSByZXN1bHQ7CisjZWxpZiBkZWZpbmVkKEhBVkVfQklUU0NBTkZPUldBUkQpCisgIF9CaXRTY2FuRm9yd2FyZCgmcmVzdWx0LCAqeCk7CisgICp4ID4+PSByZXN1bHQ7CisjZWxzZQorICByZXN1bHQgPSAwOworICB3aGlsZSAoKCp4ICYgMSkgPT0gMCkgeworICAgICsrcmVzdWx0OworICAgICp4ID4+PSAxOworICB9CisjZW5kaWYKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBIdWZmbWFuLWNvbXByZXNzZWQgc2NhbiB1c2luZyBwcm9ncmVzc2l2ZSBKUEVHLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzc19waHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgYm9vbGVhbiBpc19EQ19iYW5kOworICBpbnQgY2ksIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBlbnRyb3B5LT5jaW5mbyA9IGNpbmZvOworICBlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcyA9IGdhdGhlcl9zdGF0aXN0aWNzOworCisgIGlzX0RDX2JhbmQgPSAoY2luZm8tPlNzID09IDApOworCisgIC8qIFdlIGFzc3VtZSBqY21hc3Rlci5jIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBzY2FuIHBhcmFtZXRlcnMuICovCisKKyAgLyogU2VsZWN0IGV4ZWN1dGlvbiByb3V0aW5lcyAqLworICBpZiAoY2luZm8tPkFoID09IDApIHsKKyAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19maXJzdDsKKyAgICBlbHNlCisgICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfQUNfZmlyc3Q7CisgICAgaWYgKGpzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmUoKSkKKyAgICAgIGVudHJvcHktPkFDX2ZpcnN0X3ByZXBhcmUgPSBqc2ltZF9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmU7CisgICAgZWxzZQorICAgICAgZW50cm9weS0+QUNfZmlyc3RfcHJlcGFyZSA9IGVuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19yZWZpbmU7CisgICAgZWxzZSB7CisgICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfQUNfcmVmaW5lOworICAgICAgaWYgKGpzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlKCkpCisgICAgICAgIGVudHJvcHktPkFDX3JlZmluZV9wcmVwYXJlID0ganNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZTsKKyAgICAgIGVsc2UKKyAgICAgICAgZW50cm9weS0+QUNfcmVmaW5lX3ByZXBhcmUgPSBlbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlOworICAgICAgLyogQUMgcmVmaW5lbWVudCBuZWVkcyBhIGNvcnJlY3Rpb24gYml0IGJ1ZmZlciAqLworICAgICAgaWYgKGVudHJvcHktPmJpdF9idWZmZXIgPT0gTlVMTCkKKyAgICAgICAgZW50cm9weS0+Yml0X2J1ZmZlciA9IChjaGFyICopCisgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfQ09SUl9CSVRTICogc2l6ZW9mKGNoYXIpKTsKKyAgICB9CisgIH0KKyAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKQorICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX2dhdGhlcl9waHVmZjsKKyAgZWxzZQorICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX3BodWZmOworCisgIC8qIE9ubHkgREMgY29lZmZpY2llbnRzIG1heSBiZSBpbnRlcmxlYXZlZCwgc28gY2luZm8tPmNvbXBzX2luX3NjYW4gPSAxCisgICAqIGZvciBBQyBjb2VmZmljaWVudHMuCisgICAqLworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gMDsKKyAgICAvKiBHZXQgdGFibGUgaW5kZXggKi8KKyAgICBpZiAoaXNfRENfYmFuZCkgeworICAgICAgaWYgKGNpbmZvLT5BaCAhPSAwKSAgICAgICAvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisgICAgICAgIGNvbnRpbnVlOworICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgIH0gZWxzZSB7CisgICAgICBlbnRyb3B5LT5hY190Ymxfbm8gPSB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgfQorICAgIGlmIChnYXRoZXJfc3RhdGlzdGljcykgeworICAgICAgLyogQ2hlY2sgZm9yIGludmFsaWQgdGFibGUgaW5kZXggKi8KKyAgICAgIC8qIChtYWtlX2NfZGVyaXZlZF90YmwgZG9lcyB0aGlzIGluIHRoZSBvdGhlciBwYXRoKSAqLworICAgICAgaWYgKHRibCA8IDAgfHwgdGJsID49IE5VTV9IVUZGX1RCTFMpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibCk7CisgICAgICAvKiBBbGxvY2F0ZSBhbmQgemVybyB0aGUgc3RhdGlzdGljcyB0YWJsZXMgKi8KKyAgICAgIC8qIE5vdGUgdGhhdCBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIGV4cGVjdHMgMjU3IGVudHJpZXMgaW4gZWFjaCB0YWJsZSEgKi8KKyAgICAgIGlmIChlbnRyb3B5LT5jb3VudF9wdHJzW3RibF0gPT0gTlVMTCkKKyAgICAgICAgZW50cm9weS0+Y291bnRfcHRyc1t0YmxdID0gKGxvbmcgKikKKyAgICAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NyAqIHNpemVvZihsb25nKSk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmNvdW50X3B0cnNbdGJsXSwgMjU3ICogc2l6ZW9mKGxvbmcpKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogQ29tcHV0ZSBkZXJpdmVkIHZhbHVlcyBmb3IgSHVmZm1hbiB0YWJsZSAqLworICAgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIGEgdGFibGUsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUgKi8KKyAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBpc19EQ19iYW5kLCB0YmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cm9weS0+ZGVyaXZlZF90YmxzW3RibF0pOworICAgIH0KKyAgfQorCisgIC8qIEluaXRpYWxpemUgQUMgc3R1ZmYgKi8KKyAgZW50cm9weS0+RU9CUlVOID0gMDsKKyAgZW50cm9weS0+QkUgPSAwOworCisgIC8qIEluaXRpYWxpemUgYml0IGJ1ZmZlciB0byBlbXB0eSAqLworICBlbnRyb3B5LT5wdXRfYnVmZmVyID0gMDsKKyAgZW50cm9weS0+cHV0X2JpdHMgPSAwOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBzdHVmZiAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtID0gMDsKK30KKworCisvKiBPdXRwdXR0aW5nIGJ5dGVzIHRvIHRoZSBmaWxlLgorICogTkI6IHRoZXNlIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiBhY3R1YWxseSBvdXRwdXR0aW5nLAorICogdGhhdCBpcywgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPT0gRkFMU0UuCisgKi8KKworLyogRW1pdCBhIGJ5dGUgKi8KKyNkZWZpbmUgZW1pdF9ieXRlKGVudHJvcHksIHZhbCkgeyBcCisgICooZW50cm9weSktPm5leHRfb3V0cHV0X2J5dGUrKyA9IChKT0NURVQpKHZhbCk7IFwKKyAgaWYgKC0tKGVudHJvcHkpLT5mcmVlX2luX2J1ZmZlciA9PSAwKSBcCisgICAgZHVtcF9idWZmZXIoZW50cm9weSk7IFwKK30KKworCitMT0NBTCh2b2lkKQorZHVtcF9idWZmZXIocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSkKKy8qIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyOyB3ZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5zaW9uIGluIHRoaXMgbW9kdWxlLiAqLworeworICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKmRlc3QgPSBlbnRyb3B5LT5jaW5mby0+ZGVzdDsKKworICBpZiAoISgqZGVzdC0+ZW1wdHlfb3V0cHV0X2J1ZmZlcikgKGVudHJvcHktPmNpbmZvKSkKKyAgICBFUlJFWElUKGVudHJvcHktPmNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7CisgIC8qIEFmdGVyIGEgc3VjY2Vzc2Z1bCBidWZmZXIgZHVtcCwgbXVzdCByZXNldCBidWZmZXIgcG9pbnRlcnMgKi8KKyAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gZGVzdC0+ZnJlZV9pbl9idWZmZXI7Cit9CisKKworLyogT3V0cHV0dGluZyBiaXRzIHRvIHRoZSBmaWxlICovCisKKy8qIE9ubHkgdGhlIHJpZ2h0IDI0IGJpdHMgb2YgcHV0X2J1ZmZlciBhcmUgdXNlZDsgdGhlIHZhbGlkIGJpdHMgYXJlCisgKiBsZWZ0LWp1c3RpZmllZCBpbiB0aGlzIHBhcnQuICBBdCBtb3N0IDE2IGJpdHMgY2FuIGJlIHBhc3NlZCB0byBlbWl0X2JpdHMKKyAqIGluIG9uZSBjYWxsLCBhbmQgd2UgbmV2ZXIgcmV0YWluIG1vcmUgdGhhbiA3IGJpdHMgaW4gcHV0X2J1ZmZlcgorICogYmV0d2VlbiBjYWxscywgc28gMjQgYml0cyBhcmUgc3VmZmljaWVudC4KKyAqLworCitMT0NBTCh2b2lkKQorZW1pdF9iaXRzKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHksIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgc2l6ZSkKKy8qIEVtaXQgc29tZSBiaXRzLCB1bmxlc3Mgd2UgYXJlIGluIGdhdGhlciBtb2RlICovCit7CisgIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIHRpZ2h0bHkuICovCisgIHJlZ2lzdGVyIHNpemVfdCBwdXRfYnVmZmVyID0gKHNpemVfdCljb2RlOworICByZWdpc3RlciBpbnQgcHV0X2JpdHMgPSBlbnRyb3B5LT5wdXRfYml0czsKKworICAvKiBpZiBzaXplIGlzIDAsIGNhbGxlciB1c2VkIGFuIGludmFsaWQgSHVmZm1hbiB0YWJsZSBlbnRyeSAqLworICBpZiAoc2l6ZSA9PSAwKQorICAgIEVSUkVYSVQoZW50cm9weS0+Y2luZm8sIEpFUlJfSFVGRl9NSVNTSU5HX0NPREUpOworCisgIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykKKyAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBpZiB3ZSdyZSBvbmx5IGdldHRpbmcgc3RhdHMgKi8KKworICBwdXRfYnVmZmVyICY9ICgoKHNpemVfdCkxKSA8PCBzaXplKSAtIDE7IC8qIG1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8KKworICBwdXRfYml0cyArPSBzaXplOyAgICAgICAgICAgICAvKiBuZXcgbnVtYmVyIG9mIGJpdHMgaW4gYnVmZmVyICovCisKKyAgcHV0X2J1ZmZlciA8PD0gMjQgLSBwdXRfYml0czsgLyogYWxpZ24gaW5jb21pbmcgYml0cyAqLworCisgIHB1dF9idWZmZXIgfD0gZW50cm9weS0+cHV0X2J1ZmZlcjsgLyogYW5kIG1lcmdlIHdpdGggb2xkIGJ1ZmZlciBjb250ZW50cyAqLworCisgIHdoaWxlIChwdXRfYml0cyA+PSA4KSB7CisgICAgaW50IGMgPSAoaW50KSgocHV0X2J1ZmZlciA+PiAxNikgJiAweEZGKTsKKworICAgIGVtaXRfYnl0ZShlbnRyb3B5LCBjKTsKKyAgICBpZiAoYyA9PSAweEZGKSB7ICAgICAgICAgICAgLyogbmVlZCB0byBzdHVmZiBhIHplcm8gYnl0ZT8gKi8KKyAgICAgIGVtaXRfYnl0ZShlbnRyb3B5LCAwKTsKKyAgICB9CisgICAgcHV0X2J1ZmZlciA8PD0gODsKKyAgICBwdXRfYml0cyAtPSA4OworICB9CisKKyAgZW50cm9weS0+cHV0X2J1ZmZlciA9IHB1dF9idWZmZXI7IC8qIHVwZGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+cHV0X2JpdHMgPSBwdXRfYml0czsKK30KKworCitMT0NBTCh2b2lkKQorZmx1c2hfYml0cyhwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5KQoreworICBlbWl0X2JpdHMoZW50cm9weSwgMHg3RiwgNyk7IC8qIGZpbGwgYW55IHBhcnRpYWwgYnl0ZSB3aXRoIG9uZXMgKi8KKyAgZW50cm9weS0+cHV0X2J1ZmZlciA9IDA7ICAgICAvKiBhbmQgcmVzZXQgYml0LWJ1ZmZlciB0byBlbXB0eSAqLworICBlbnRyb3B5LT5wdXRfYml0cyA9IDA7Cit9CisKKworLyoKKyAqIEVtaXQgKG9yIGp1c3QgY291bnQpIGEgSHVmZm1hbiBzeW1ib2wuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfc3ltYm9sKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHksIGludCB0Ymxfbm8sIGludCBzeW1ib2wpCit7CisgIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykKKyAgICBlbnRyb3B5LT5jb3VudF9wdHJzW3RibF9ub11bc3ltYm9sXSsrOworICBlbHNlIHsKKyAgICBjX2Rlcml2ZWRfdGJsICp0YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsX25vXTsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgdGJsLT5laHVmY29bc3ltYm9sXSwgdGJsLT5laHVmc2lbc3ltYm9sXSk7CisgIH0KK30KKworCisvKgorICogRW1pdCBiaXRzIGZyb20gYSBjb3JyZWN0aW9uIGJpdCBidWZmZXIuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfYnVmZmVyZWRfYml0cyhwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5LCBjaGFyICpidWZzdGFydCwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMpCit7CisgIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykKKyAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogbm8gcmVhbCB3b3JrICovCisKKyAgd2hpbGUgKG5iaXRzID4gMCkgeworICAgIGVtaXRfYml0cyhlbnRyb3B5LCAodW5zaWduZWQgaW50KSgqYnVmc3RhcnQpLCAxKTsKKyAgICBidWZzdGFydCsrOworICAgIG5iaXRzLS07CisgIH0KK30KKworCisvKgorICogRW1pdCBhbnkgcGVuZGluZyBFT0JSVU4gc3ltYm9sLgorICovCisKK0xPQ0FMKHZvaWQpCitlbWl0X2VvYnJ1bihwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5KQoreworICByZWdpc3RlciBpbnQgdGVtcCwgbmJpdHM7CisKKyAgaWYgKGVudHJvcHktPkVPQlJVTiA+IDApIHsgICAgLyogaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgRU9CUlVOICovCisgICAgdGVtcCA9IGVudHJvcHktPkVPQlJVTjsKKyAgICBuYml0cyA9IEpQRUdfTkJJVFNfTk9OWkVSTyh0ZW1wKSAtIDE7CisgICAgLyogc2FmZXR5IGNoZWNrOiBzaG91bGRuJ3QgaGFwcGVuIGdpdmVuIGxpbWl0ZWQgY29ycmVjdGlvbi1iaXQgYnVmZmVyICovCisgICAgaWYgKG5iaXRzID4gMTQpCisgICAgICBFUlJFWElUKGVudHJvcHktPmNpbmZvLCBKRVJSX0hVRkZfTUlTU0lOR19DT0RFKTsKKworICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgbmJpdHMgPDwgNCk7CisgICAgaWYgKG5iaXRzKQorICAgICAgZW1pdF9iaXRzKGVudHJvcHksIGVudHJvcHktPkVPQlJVTiwgbmJpdHMpOworCisgICAgZW50cm9weS0+RU9CUlVOID0gMDsKKworICAgIC8qIEVtaXQgYW55IGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyAqLworICAgIGVtaXRfYnVmZmVyZWRfYml0cyhlbnRyb3B5LCBlbnRyb3B5LT5iaXRfYnVmZmVyLCBlbnRyb3B5LT5CRSk7CisgICAgZW50cm9weS0+QkUgPSAwOworICB9Cit9CisKKworLyoKKyAqIEVtaXQgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgcHJlZGljdGlvbnMuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfcmVzdGFydChwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5LCBpbnQgcmVzdGFydF9udW0pCit7CisgIGludCBjaTsKKworICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKworICBpZiAoIWVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKSB7CisgICAgZmx1c2hfYml0cyhlbnRyb3B5KTsKKyAgICBlbWl0X2J5dGUoZW50cm9weSwgMHhGRik7CisgICAgZW1pdF9ieXRlKGVudHJvcHksIEpQRUdfUlNUMCArIHJlc3RhcnRfbnVtKTsKKyAgfQorCisgIGlmIChlbnRyb3B5LT5jaW5mby0+U3MgPT0gMCkgeworICAgIC8qIFJlLWluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLworICAgIGZvciAoY2kgPSAwOyBjaSA8IGVudHJvcHktPmNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQorICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gMDsKKyAgfSBlbHNlIHsKKyAgICAvKiBSZS1pbml0aWFsaXplIGFsbCBBQy1yZWxhdGVkIGZpZWxkcyB0byAwICovCisgICAgZW50cm9weS0+RU9CUlVOID0gMDsKKyAgICBlbnRyb3B5LT5CRSA9IDA7CisgIH0KK30KKworCisvKgorICogTUNVIGVuY29kaW5nIGZvciBEQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X0RDX2ZpcnN0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICByZWdpc3RlciBpbnQgdGVtcCwgdGVtcDIsIHRlbXAzOworICByZWdpc3RlciBpbnQgbmJpdHM7CisgIGludCBibGtuLCBjaTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICBKQkxPQ0tST1cgYmxvY2s7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIElTSElGVF9URU1QUworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKyAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworCisgICAgLyogQ29tcHV0ZSB0aGUgREMgdmFsdWUgYWZ0ZXIgdGhlIHJlcXVpcmVkIHBvaW50IHRyYW5zZm9ybSBieSBBbC4KKyAgICAgKiBUaGlzIGlzIHNpbXBseSBhbiBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0LgorICAgICAqLworICAgIHRlbXAyID0gSVJJR0hUX1NISUZUKChpbnQpKCgqYmxvY2spWzBdKSwgQWwpOworCisgICAgLyogREMgZGlmZmVyZW5jZXMgYXJlIGZpZ3VyZWQgb24gdGhlIHBvaW50LXRyYW5zZm9ybWVkIHZhbHVlcy4gKi8KKyAgICB0ZW1wID0gdGVtcDIgLSBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV07CisgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gdGVtcDI7CisKKyAgICAvKiBFbmNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgcGVyIHNlY3Rpb24gRy4xLjIuMSAqLworCisgICAgLyogVGhpcyBpcyBhIHdlbGwta25vd24gdGVjaG5pcXVlIGZvciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlIHdpdGhvdXQKKyAgICAgKiBhIGJyYW5jaC4gIEl0IGlzIGRlcml2ZWQgZnJvbSBhbiBhc3NlbWJseSBsYW5ndWFnZSB0ZWNobmlxdWUgcHJlc2VudGVkCisgICAgICogaW4gIkhvdyB0byBPcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gUHJvY2Vzc29ycyIsIENvcHlyaWdodCAoYykgMTk5NiwKKyAgICAgKiAxOTk3IGJ5IEFnbmVyIEZvZy4KKyAgICAgKi8KKyAgICB0ZW1wMyA9IHRlbXAgPj4gKENIQVJfQklUICogc2l6ZW9mKGludCkgLSAxKTsKKyAgICB0ZW1wIF49IHRlbXAzOworICAgIHRlbXAgLT0gdGVtcDM7ICAgICAgICAgICAgICAvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLworICAgIC8qIEZvciBhIG5lZ2F0aXZlIGlucHV0LCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhpbnB1dCkgKi8KKyAgICB0ZW1wMiA9IHRlbXAgXiB0ZW1wMzsKKworICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgICBuYml0cyA9IEpQRUdfTkJJVFModGVtcCk7CisgICAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBjb2VmZmljaWVudCB2YWx1ZXMuCisgICAgICogU2luY2Ugd2UncmUgZW5jb2RpbmcgYSBkaWZmZXJlbmNlLCB0aGUgcmFuZ2UgbGltaXQgaXMgdHdpY2UgYXMgbXVjaC4KKyAgICAgKi8KKyAgICBpZiAobmJpdHMgPiBNQVhfQ09FRl9CSVRTICsgMSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKKworICAgIC8qIENvdW50L2VtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBjb21wcHRyLT5kY190Ymxfbm8sIG5iaXRzKTsKKworICAgIC8qIEVtaXQgdGhhdCBudW1iZXIgb2YgYml0cyBvZiB0aGUgdmFsdWUsIGlmIHBvc2l0aXZlLCAqLworICAgIC8qIG9yIHRoZSBjb21wbGVtZW50IG9mIGl0cyBtYWduaXR1ZGUsIGlmIG5lZ2F0aXZlLiAqLworICAgIGlmIChuYml0cykgICAgICAgICAgICAgICAgICAvKiBlbWl0X2JpdHMgcmVqZWN0cyBjYWxscyB3aXRoIHNpemUgMCAqLworICAgICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpdGVtcDIsIG5iaXRzKTsKKyAgfQorCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIERhdGEgcHJlcGFyYXRpb24gZm9yIGVuY29kZV9tY3VfQUNfZmlyc3QoKS4KKyAqLworCisjZGVmaW5lIENPTVBVVEVfQUJTVkFMVUVTX0FDX0ZJUlNUKFNsKSB7IFwKKyAgZm9yIChrID0gMDsgayA8IFNsOyBrKyspIHsgXAorICAgIHRlbXAgPSBibG9ja1tqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnRba11dOyBcCisgICAgaWYgKHRlbXAgPT0gMCkgXAorICAgICAgY29udGludWU7IFwKKyAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMgXAorICAgICAqIGlzIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCByb3VuZGluZyB0b3dhcmRzIDAuICBUbyBkbyB0aGlzIHBvcnRhYmx5IFwKKyAgICAgKiBpbiBDLCB3ZSBzaGlmdCBhZnRlciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlOyBzbyB0aGUgY29kZSBpcyBcCisgICAgICogaW50ZXJ3b3ZlbiB3aXRoIGZpbmRpbmcgdGhlIGFicyB2YWx1ZSAodGVtcCkgYW5kIG91dHB1dCBiaXRzICh0ZW1wMikuIFwKKyAgICAgKi8gXAorICAgIHRlbXAyID0gdGVtcCA+PiAoQ0hBUl9CSVQgKiBzaXplb2YoaW50KSAtIDEpOyBcCisgICAgdGVtcCBePSB0ZW1wMjsgXAorICAgIHRlbXAgLT0gdGVtcDI7ICAgICAgICAgICAgICAvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLyBcCisgICAgdGVtcCA+Pj0gQWw7ICAgICAgICAgICAgICAgIC8qIGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gKi8gXAorICAgIC8qIFdhdGNoIG91dCBmb3IgY2FzZSB0aGF0IG5vbnplcm8gY29lZiBpcyB6ZXJvIGFmdGVyIHBvaW50IHRyYW5zZm9ybSAqLyBcCisgICAgaWYgKHRlbXAgPT0gMCkgXAorICAgICAgY29udGludWU7IFwKKyAgICAvKiBGb3IgYSBuZWdhdGl2ZSBjb2VmLCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhjb2VmKSAqLyBcCisgICAgdGVtcDIgXj0gdGVtcDsgXAorICAgIHZhbHVlc1trXSA9IHRlbXA7IFwKKyAgICB2YWx1ZXNbayArIERDVFNJWkUyXSA9IHRlbXAyOyBcCisgICAgemVyb2JpdHMgfD0gKChzaXplX3QpMVUpIDw8IGs7IFwKKyAgfSBcCit9CisKK01FVEhPRERFRih2b2lkKQorZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKGNvbnN0IEpDT0VGICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBBbCwgSkNPRUYgKnZhbHVlcywgc2l6ZV90ICpiaXRzKQoreworICByZWdpc3RlciBpbnQgaywgdGVtcCwgdGVtcDI7CisgIHNpemVfdCB6ZXJvYml0cyA9IDBVOworICBpbnQgU2wwID0gU2w7CisKKyNpZiBTSVpFT0ZfU0laRV9UID09IDQKKyAgaWYgKFNsMCA+IDMyKQorICAgIFNsMCA9IDMyOworI2VuZGlmCisKKyAgQ09NUFVURV9BQlNWQUxVRVNfQUNfRklSU1QoU2wwKTsKKworICBiaXRzWzBdID0gemVyb2JpdHM7CisjaWYgU0laRU9GX1NJWkVfVCA9PSA0CisgIHplcm9iaXRzID0gMFU7CisKKyAgaWYgKFNsID4gMzIpIHsKKyAgICBTbCAtPSAzMjsKKyAgICBqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQgKz0gMzI7CisgICAgdmFsdWVzICs9IDMyOworCisgICAgQ09NUFVURV9BQlNWQUxVRVNfQUNfRklSU1QoU2wpOworICB9CisgIGJpdHNbMV0gPSB6ZXJvYml0czsKKyNlbmRpZgorfQorCisvKgorICogTUNVIGVuY29kaW5nIGZvciBBQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworI2RlZmluZSBFTkNPREVfQ09FRlNfQUNfRklSU1QobGFiZWwpIHsgXAorICB3aGlsZSAoemVyb2JpdHMpIHsgXAorICAgIHIgPSBjb3VudF96ZXJvZXMoJnplcm9iaXRzKTsgXAorICAgIGN2YWx1ZSArPSByOyBcCitsYWJlbCBcCisgICAgdGVtcCAgPSBjdmFsdWVbMF07IFwKKyAgICB0ZW1wMiA9IGN2YWx1ZVtEQ1RTSVpFMl07IFwKKyAgICBcCisgICAgLyogaWYgcnVuIGxlbmd0aCA+IDE1LCBtdXN0IGVtaXQgc3BlY2lhbCBydW4tbGVuZ3RoLTE2IGNvZGVzICgweEYwKSAqLyBcCisgICAgd2hpbGUgKHIgPiAxNSkgeyBcCisgICAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIDB4RjApOyBcCisgICAgICByIC09IDE2OyBcCisgICAgfSBcCisgICAgXAorICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8gXAorICAgIG5iaXRzID0gSlBFR19OQklUU19OT05aRVJPKHRlbXApOyAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgMSBiaXQgKi8gXAorICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzICovIFwKKyAgICBpZiAobmJpdHMgPiBNQVhfQ09FRl9CSVRTKSBcCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7IFwKKyAgICBcCisgICAgLyogQ291bnQvZW1pdCBIdWZmbWFuIHN5bWJvbCBmb3IgcnVuIGxlbmd0aCAvIG51bWJlciBvZiBiaXRzICovIFwKKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIChyIDw8IDQpICsgbmJpdHMpOyBcCisgICAgXAorICAgIC8qIEVtaXQgdGhhdCBudW1iZXIgb2YgYml0cyBvZiB0aGUgdmFsdWUsIGlmIHBvc2l0aXZlLCAqLyBcCisgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovIFwKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCl0ZW1wMiwgbmJpdHMpOyBcCisgICAgXAorICAgIGN2YWx1ZSsrOyBcCisgICAgemVyb2JpdHMgPj49IDE7IFwKKyAgfSBcCit9CisKK01FVEhPRERFRihib29sZWFuKQorZW5jb2RlX21jdV9BQ19maXJzdChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgcmVnaXN0ZXIgaW50IHRlbXAsIHRlbXAyOworICByZWdpc3RlciBpbnQgbmJpdHMsIHI7CisgIGludCBTbCA9IGNpbmZvLT5TZSAtIGNpbmZvLT5TcyArIDE7CisgIGludCBBbCA9IGNpbmZvLT5BbDsKKyAgSkNPRUYgdmFsdWVzX3VuYWxpZ25lZFsyICogRENUU0laRTIgKyAxNV07CisgIEpDT0VGICp2YWx1ZXM7CisgIGNvbnN0IEpDT0VGICpjdmFsdWU7CisgIHNpemVfdCB6ZXJvYml0czsKKyAgc2l6ZV90IGJpdHNbOCAvIFNJWkVPRl9TSVpFX1RdOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisjaWZkZWYgV0lUSF9TSU1ECisgIGN2YWx1ZSA9IHZhbHVlcyA9IChKQ09FRiAqKVBBRCgoc2l6ZV90KXZhbHVlc191bmFsaWduZWQsIDE2KTsKKyNlbHNlCisgIC8qIE5vdCB1c2luZyBTSU1ELCBzbyBhbGlnbm1lbnQgaXMgbm90IG5lZWRlZCAqLworICBjdmFsdWUgPSB2YWx1ZXMgPSB2YWx1ZXNfdW5hbGlnbmVkOworI2VuZGlmCisKKyAgLyogUHJlcGFyZSBkYXRhICovCisgIGVudHJvcHktPkFDX2ZpcnN0X3ByZXBhcmUoTUNVX2RhdGFbMF1bMF0sIGpwZWdfbmF0dXJhbF9vcmRlciArIGNpbmZvLT5TcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbCwgQWwsIHZhbHVlcywgYml0cyk7CisKKyAgemVyb2JpdHMgPSBiaXRzWzBdOworI2lmIFNJWkVPRl9TSVpFX1QgPT0gNAorICB6ZXJvYml0cyB8PSBiaXRzWzFdOworI2VuZGlmCisKKyAgLyogRW1pdCBhbnkgcGVuZGluZyBFT0JSVU4gKi8KKyAgaWYgKHplcm9iaXRzICYmIChlbnRyb3B5LT5FT0JSVU4gPiAwKSkKKyAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKworI2lmIFNJWkVPRl9TSVpFX1QgPT0gNAorICB6ZXJvYml0cyA9IGJpdHNbMF07CisjZW5kaWYKKworICAvKiBFbmNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyBwZXIgc2VjdGlvbiBHLjEuMi4yLCBmaWcuIEcuMyAqLworCisgIEVOQ09ERV9DT0VGU19BQ19GSVJTVCgodm9pZCkwOyk7CisKKyNpZiBTSVpFT0ZfU0laRV9UID09IDQKKyAgemVyb2JpdHMgPSBiaXRzWzFdOworICBpZiAoemVyb2JpdHMpIHsKKyAgICBpbnQgZGlmZiA9ICgodmFsdWVzICsgRENUU0laRTIgLyAyKSAtIGN2YWx1ZSk7CisgICAgciA9IGNvdW50X3plcm9lcygmemVyb2JpdHMpOworICAgIHIgKz0gZGlmZjsKKyAgICBjdmFsdWUgKz0gcjsKKyAgICBnb3RvIGZpcnN0X2l0ZXJfYWNfZmlyc3Q7CisgIH0KKworICBFTkNPREVfQ09FRlNfQUNfRklSU1QoZmlyc3RfaXRlcl9hY19maXJzdDopOworI2VuZGlmCisKKyAgaWYgKGN2YWx1ZSA8ICh2YWx1ZXMgKyBTbCkpIHsgLyogSWYgdGhlcmUgYXJlIHRyYWlsaW5nIHplcm9lcywgKi8KKyAgICBlbnRyb3B5LT5FT0JSVU4rKzsgICAgICAgICAgLyogY291bnQgYW4gRU9CICovCisgICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYpCisgICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsgICAgIC8qIGZvcmNlIGl0IG91dCB0byBhdm9pZCBvdmVyZmxvdyAqLworICB9CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGVuY29kaW5nIGZvciBEQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLgorICogTm90ZTogd2UgYXNzdW1lIHN1Y2ggc2NhbnMgY2FuIGJlIG11bHRpLWNvbXBvbmVudCwgYWx0aG91Z2ggdGhlIHNwZWMKKyAqIGlzIG5vdCB2ZXJ5IGNsZWFyIG9uIHRoZSBwb2ludC4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfRENfcmVmaW5lKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICByZWdpc3RlciBpbnQgdGVtcDsKKyAgaW50IGJsa247CisgIGludCBBbCA9IGNpbmZvLT5BbDsKKyAgSkJMT0NLUk9XIGJsb2NrOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKworICAgIC8qIFdlIHNpbXBseSBlbWl0IHRoZSBBbCd0aCBiaXQgb2YgdGhlIERDIGNvZWZmaWNpZW50IHZhbHVlLiAqLworICAgIHRlbXAgPSAoKmJsb2NrKVswXTsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkodGVtcCA+PiBBbCksIDEpOworICB9CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRGF0YSBwcmVwYXJhdGlvbiBmb3IgZW5jb2RlX21jdV9BQ19yZWZpbmUoKS4KKyAqLworCisjZGVmaW5lIENPTVBVVEVfQUJTVkFMVUVTX0FDX1JFRklORShTbCwga29mZnNldCkgeyBcCisgIC8qIEl0IGlzIGNvbnZlbmllbnQgdG8gbWFrZSBhIHByZS1wYXNzIHRvIGRldGVybWluZSB0aGUgdHJhbnNmb3JtZWQgXAorICAgKiBjb2VmZmljaWVudHMnIGFic29sdXRlIHZhbHVlcyBhbmQgdGhlIEVPQiBwb3NpdGlvbi4gXAorICAgKi8gXAorICBmb3IgKGsgPSAwOyBrIDwgU2w7IGsrKykgeyBcCisgICAgdGVtcCA9IGJsb2NrW2pwZWdfbmF0dXJhbF9vcmRlcl9zdGFydFtrXV07IFwKKyAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMgXAorICAgICAqIGlzIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCByb3VuZGluZyB0b3dhcmRzIDAuICBUbyBkbyB0aGlzIHBvcnRhYmx5IFwKKyAgICAgKiBpbiBDLCB3ZSBzaGlmdCBhZnRlciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlLiBcCisgICAgICovIFwKKyAgICB0ZW1wMiA9IHRlbXAgPj4gKENIQVJfQklUICogc2l6ZW9mKGludCkgLSAxKTsgXAorICAgIHRlbXAgXj0gdGVtcDI7IFwKKyAgICB0ZW1wIC09IHRlbXAyOyAgICAgICAgICAgICAgLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8gXAorICAgIHRlbXAgPj49IEFsOyAgICAgICAgICAgICAgICAvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovIFwKKyAgICBpZiAodGVtcCAhPSAwKSB7IFwKKyAgICAgIHplcm9iaXRzIHw9ICgoc2l6ZV90KTFVKSA8PCBrOyBcCisgICAgICBzaWduYml0cyB8PSAoKHNpemVfdCkodGVtcDIgKyAxKSkgPDwgazsgXAorICAgIH0gXAorICAgIGFic3ZhbHVlc1trXSA9IChKQ09FRil0ZW1wOyAvKiBzYXZlIGFicyB2YWx1ZSBmb3IgbWFpbiBwYXNzICovIFwKKyAgICBpZiAodGVtcCA9PSAxKSBcCisgICAgICBFT0IgPSBrICsga29mZnNldDsgICAgICAgIC8qIEVPQiA9IGluZGV4IG9mIGxhc3QgbmV3bHktbm9uemVybyBjb2VmICovIFwKKyAgfSBcCit9CisKK01FVEhPRERFRihpbnQpCitlbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlKGNvbnN0IEpDT0VGICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IEFsLCBKQ09FRiAqYWJzdmFsdWVzLCBzaXplX3QgKmJpdHMpCit7CisgIHJlZ2lzdGVyIGludCBrLCB0ZW1wLCB0ZW1wMjsKKyAgaW50IEVPQiA9IDA7CisgIHNpemVfdCB6ZXJvYml0cyA9IDBVLCBzaWduYml0cyA9IDBVOworICBpbnQgU2wwID0gU2w7CisKKyNpZiBTSVpFT0ZfU0laRV9UID09IDQKKyAgaWYgKFNsMCA+IDMyKQorICAgIFNsMCA9IDMyOworI2VuZGlmCisKKyAgQ09NUFVURV9BQlNWQUxVRVNfQUNfUkVGSU5FKFNsMCwgMCk7CisKKyAgYml0c1swXSA9IHplcm9iaXRzOworI2lmIFNJWkVPRl9TSVpFX1QgPT0gOAorICBiaXRzWzFdID0gc2lnbmJpdHM7CisjZWxzZQorICBiaXRzWzJdID0gc2lnbmJpdHM7CisKKyAgemVyb2JpdHMgPSAwVTsKKyAgc2lnbmJpdHMgPSAwVTsKKworICBpZiAoU2wgPiAzMikgeworICAgIFNsIC09IDMyOworICAgIGpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCArPSAzMjsKKyAgICBhYnN2YWx1ZXMgKz0gMzI7CisKKyAgICBDT01QVVRFX0FCU1ZBTFVFU19BQ19SRUZJTkUoU2wsIDMyKTsKKyAgfQorCisgIGJpdHNbMV0gPSB6ZXJvYml0czsKKyAgYml0c1szXSA9IHNpZ25iaXRzOworI2VuZGlmCisKKyAgcmV0dXJuIEVPQjsKK30KKworCisvKgorICogTUNVIGVuY29kaW5nIGZvciBBQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLgorICovCisKKyNkZWZpbmUgRU5DT0RFX0NPRUZTX0FDX1JFRklORShsYWJlbCkgeyBcCisgIHdoaWxlICh6ZXJvYml0cykgeyBcCisgICAgaW50IGlkeCA9IGNvdW50X3plcm9lcygmemVyb2JpdHMpOyBcCisgICAgciArPSBpZHg7IFwKKyAgICBjYWJzdmFsdWUgKz0gaWR4OyBcCisgICAgc2lnbmJpdHMgPj49IGlkeDsgXAorbGFiZWwgXAorICAgIC8qIEVtaXQgYW55IHJlcXVpcmVkIFpSTHMsIGJ1dCBub3QgaWYgdGhleSBjYW4gYmUgZm9sZGVkIGludG8gRU9CICovIFwKKyAgICB3aGlsZSAociA+IDE1ICYmIChjYWJzdmFsdWUgPD0gRU9CUFRSKSkgeyBcCisgICAgICAvKiBlbWl0IGFueSBwZW5kaW5nIEVPQlJVTiBhbmQgdGhlIEJFIGNvcnJlY3Rpb24gYml0cyAqLyBcCisgICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsgXAorICAgICAgLyogRW1pdCBaUkwgKi8gXAorICAgICAgZW1pdF9zeW1ib2woZW50cm9weSwgZW50cm9weS0+YWNfdGJsX25vLCAweEYwKTsgXAorICAgICAgciAtPSAxNjsgXAorICAgICAgLyogRW1pdCBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgdGhhdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBaUkwgKi8gXAorICAgICAgZW1pdF9idWZmZXJlZF9iaXRzKGVudHJvcHksIEJSX2J1ZmZlciwgQlIpOyBcCisgICAgICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyOyAvKiBCRSBiaXRzIGFyZSBnb25lIG5vdyAqLyBcCisgICAgICBCUiA9IDA7IFwKKyAgICB9IFwKKyAgICBcCisgICAgdGVtcCA9ICpjYWJzdmFsdWUrKzsgXAorICAgIFwKKyAgICAvKiBJZiB0aGUgY29lZiB3YXMgcHJldmlvdXNseSBub256ZXJvLCBpdCBvbmx5IG5lZWRzIGEgY29ycmVjdGlvbiBiaXQuIFwKKyAgICAgKiBOT1RFOiBhIHN0cmFpZ2h0IHRyYW5zbGF0aW9uIG9mIHRoZSBzcGVjJ3MgZmlndXJlIEcuNyB3b3VsZCBzdWdnZXN0IFwKKyAgICAgKiB0aGF0IHdlIGFsc28gbmVlZCB0byB0ZXN0IHIgPiAxNS4gIEJ1dCBpZiByID4gMTUsIHdlIGNhbiBvbmx5IGdldCBoZXJlIFwKKyAgICAgKiBpZiBrID4gRU9CLCB3aGljaCBpbXBsaWVzIHRoYXQgdGhpcyBjb2VmZmljaWVudCBpcyBub3QgMS4gXAorICAgICAqLyBcCisgICAgaWYgKHRlbXAgPiAxKSB7IFwKKyAgICAgIC8qIFRoZSBjb3JyZWN0aW9uIGJpdCBpcyB0aGUgbmV4dCBiaXQgb2YgdGhlIGFic29sdXRlIHZhbHVlLiAqLyBcCisgICAgICBCUl9idWZmZXJbQlIrK10gPSAoY2hhcikodGVtcCAmIDEpOyBcCisgICAgICBzaWduYml0cyA+Pj0gMTsgXAorICAgICAgemVyb2JpdHMgPj49IDE7IFwKKyAgICAgIGNvbnRpbnVlOyBcCisgICAgfSBcCisgICAgXAorICAgIC8qIEVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovIFwKKyAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsgXAorICAgIFwKKyAgICAvKiBDb3VudC9lbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8gXAorICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgKHIgPDwgNCkgKyAxKTsgXAorICAgIFwKKyAgICAvKiBFbWl0IG91dHB1dCBiaXQgZm9yIG5ld2x5LW5vbnplcm8gY29lZiAqLyBcCisgICAgdGVtcCA9IHNpZ25iaXRzICYgMTsgLyogKCgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcl9zdGFydFtrXV0gPCAwKSA/IDAgOiAxICovIFwKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCl0ZW1wLCAxKTsgXAorICAgIFwKKyAgICAvKiBFbWl0IGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyB0aGF0IG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAqLyBcCisgICAgZW1pdF9idWZmZXJlZF9iaXRzKGVudHJvcHksIEJSX2J1ZmZlciwgQlIpOyBcCisgICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlcjsgLyogQkUgYml0cyBhcmUgZ29uZSBub3cgKi8gXAorICAgIEJSID0gMDsgXAorICAgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldCB6ZXJvIHJ1biBsZW5ndGggKi8gXAorICAgIHNpZ25iaXRzID4+PSAxOyBcCisgICAgemVyb2JpdHMgPj49IDE7IFwKKyAgfSBcCit9CisKK01FVEhPRERFRihib29sZWFuKQorZW5jb2RlX21jdV9BQ19yZWZpbmUoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIHJlZ2lzdGVyIGludCB0ZW1wLCByOworICBjaGFyICpCUl9idWZmZXI7CisgIHVuc2lnbmVkIGludCBCUjsKKyAgaW50IFNsID0gY2luZm8tPlNlIC0gY2luZm8tPlNzICsgMTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICBKQ09FRiBhYnN2YWx1ZXNfdW5hbGlnbmVkW0RDVFNJWkUyICsgMTVdOworICBKQ09FRiAqYWJzdmFsdWVzOworICBjb25zdCBKQ09FRiAqY2Fic3ZhbHVlLCAqRU9CUFRSOworICBzaXplX3QgemVyb2JpdHMsIHNpZ25iaXRzOworICBzaXplX3QgYml0c1sxNiAvIFNJWkVPRl9TSVpFX1RdOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisjaWZkZWYgV0lUSF9TSU1ECisgIGNhYnN2YWx1ZSA9IGFic3ZhbHVlcyA9IChKQ09FRiAqKVBBRCgoc2l6ZV90KWFic3ZhbHVlc191bmFsaWduZWQsIDE2KTsKKyNlbHNlCisgIC8qIE5vdCB1c2luZyBTSU1ELCBzbyBhbGlnbm1lbnQgaXMgbm90IG5lZWRlZCAqLworICBjYWJzdmFsdWUgPSBhYnN2YWx1ZXMgPSBhYnN2YWx1ZXNfdW5hbGlnbmVkOworI2VuZGlmCisKKyAgLyogUHJlcGFyZSBkYXRhICovCisgIEVPQlBUUiA9IGFic3ZhbHVlcyArCisgICAgZW50cm9weS0+QUNfcmVmaW5lX3ByZXBhcmUoTUNVX2RhdGFbMF1bMF0sIGpwZWdfbmF0dXJhbF9vcmRlciArIGNpbmZvLT5TcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbCwgQWwsIGFic3ZhbHVlcywgYml0cyk7CisKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRy4xLjIuMywgZmlnLiBHLjcgKi8KKworICByID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLworICBCUiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBCUiA9IGNvdW50IG9mIGJ1ZmZlcmVkIGJpdHMgYWRkZWQgbm93ICovCisgIEJSX2J1ZmZlciA9IGVudHJvcHktPmJpdF9idWZmZXIgKyBlbnRyb3B5LT5CRTsgLyogQXBwZW5kIGJpdHMgdG8gYnVmZmVyICovCisKKyAgemVyb2JpdHMgPSBiaXRzWzBdOworI2lmIFNJWkVPRl9TSVpFX1QgPT0gOAorICBzaWduYml0cyA9IGJpdHNbMV07CisjZWxzZQorICBzaWduYml0cyA9IGJpdHNbMl07CisjZW5kaWYKKyAgRU5DT0RFX0NPRUZTX0FDX1JFRklORSgodm9pZCkwOyk7CisKKyNpZiBTSVpFT0ZfU0laRV9UID09IDQKKyAgemVyb2JpdHMgPSBiaXRzWzFdOworICBzaWduYml0cyA9IGJpdHNbM107CisKKyAgaWYgKHplcm9iaXRzKSB7CisgICAgaW50IGRpZmYgPSAoKGFic3ZhbHVlcyArIERDVFNJWkUyIC8gMikgLSBjYWJzdmFsdWUpOworICAgIGludCBpZHggPSBjb3VudF96ZXJvZXMoJnplcm9iaXRzKTsKKyAgICBzaWduYml0cyA+Pj0gaWR4OworICAgIGlkeCArPSBkaWZmOworICAgIHIgKz0gaWR4OworICAgIGNhYnN2YWx1ZSArPSBpZHg7CisgICAgZ290byBmaXJzdF9pdGVyX2FjX3JlZmluZTsKKyAgfQorCisgIEVOQ09ERV9DT0VGU19BQ19SRUZJTkUoZmlyc3RfaXRlcl9hY19yZWZpbmU6KTsKKyNlbmRpZgorCisgIHIgfD0gKGludCkoKGFic3ZhbHVlcyArIFNsKSAtIGNhYnN2YWx1ZSk7CisKKyAgaWYgKHIgPiAwIHx8IEJSID4gMCkgeyAgICAgICAgLyogSWYgdGhlcmUgYXJlIHRyYWlsaW5nIHplcm9lcywgKi8KKyAgICBlbnRyb3B5LT5FT0JSVU4rKzsgICAgICAgICAgLyogY291bnQgYW4gRU9CICovCisgICAgZW50cm9weS0+QkUgKz0gQlI7ICAgICAgICAgIC8qIGNvbmNhdCBteSBjb3JyZWN0aW9uIGJpdHMgdG8gb2xkZXIgb25lcyAqLworICAgIC8qIFdlIGZvcmNlIG91dCB0aGUgRU9CIGlmIHdlIHJpc2sgZWl0aGVyOgorICAgICAqIDEuIG92ZXJmbG93IG9mIHRoZSBFT0IgY291bnRlcjsKKyAgICAgKiAyLiBvdmVyZmxvdyBvZiB0aGUgY29ycmVjdGlvbiBiaXQgYnVmZmVyIGR1cmluZyB0aGUgbmV4dCBNQ1UuCisgICAgICovCisgICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYgfHwKKyAgICAgICAgZW50cm9weS0+QkUgPiAoTUFYX0NPUlJfQklUUyAtIERDVFNJWkUyICsgMSkpCisgICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKyAgfQorCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIGEgSHVmZm1hbi1jb21wcmVzc2VkIHByb2dyZXNzaXZlIHNjYW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfcGFzc19waHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKworICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOworCisgIC8qIEZsdXNoIG91dCBhbnkgYnVmZmVyZWQgZGF0YSAqLworICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKyAgZmx1c2hfYml0cyhlbnRyb3B5KTsKKworICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGU7CisgIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IGVudHJvcHktPmZyZWVfaW5fYnVmZmVyOworfQorCisKKy8qCisgKiBGaW5pc2ggdXAgYSBzdGF0aXN0aWNzLWdhdGhlcmluZyBwYXNzIGFuZCBjcmVhdGUgdGhlIG5ldyBIdWZmbWFuIHRhYmxlcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzX2dhdGhlcl9waHVmZihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgYm9vbGVhbiBpc19EQ19iYW5kOworICBpbnQgY2ksIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgSkhVRkZfVEJMICoqaHRibHB0cjsKKyAgYm9vbGVhbiBkaWRbTlVNX0hVRkZfVEJMU107CisKKyAgLyogRmx1c2ggb3V0IGJ1ZmZlcmVkIGRhdGEgKGFsbCB3ZSBjYXJlIGFib3V0IGlzIGNvdW50aW5nIHRoZSBFT0Igc3ltYm9sKSAqLworICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKworICBpc19EQ19iYW5kID0gKGNpbmZvLT5TcyA9PSAwKTsKKworICAvKiBJdCdzIGltcG9ydGFudCBub3QgdG8gYXBwbHkganBlZ19nZW5fb3B0aW1hbF90YWJsZSBtb3JlIHRoYW4gb25jZQorICAgKiBwZXIgdGFibGUsIGJlY2F1c2UgaXQgY2xvYmJlcnMgdGhlIGlucHV0IGZyZXF1ZW5jeSBjb3VudHMhCisgICAqLworICBNRU1aRVJPKGRpZCwgc2l6ZW9mKGRpZCkpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBpZiAoaXNfRENfYmFuZCkgeworICAgICAgaWYgKGNpbmZvLT5BaCAhPSAwKSAgICAgICAvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisgICAgICAgIGNvbnRpbnVlOworICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgIH0gZWxzZSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgfQorICAgIGlmICghZGlkW3RibF0pIHsKKyAgICAgIGlmIChpc19EQ19iYW5kKQorICAgICAgICBodGJscHRyID0gJmNpbmZvLT5kY19odWZmX3RibF9wdHJzW3RibF07CisgICAgICBlbHNlCisgICAgICAgIGh0YmxwdHIgPSAmY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsXTsKKyAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQorICAgICAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgICAgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUoY2luZm8sICpodGJscHRyLCBlbnRyb3B5LT5jb3VudF9wdHJzW3RibF0pOworICAgICAgZGlkW3RibF0gPSBUUlVFOworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBlbnRyb3B5IGVuY29kaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfcGh1ZmZfZW5jb2RlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weTsKKyAgaW50IGk7CisKKyAgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwaHVmZl9lbnRyb3B5X2VuY29kZXIpKTsKKyAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICopZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX3BodWZmOworCisgIC8qIE1hcmsgdGFibGVzIHVuYWxsb2NhdGVkICovCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBlbnRyb3B5LT5kZXJpdmVkX3RibHNbaV0gPSBOVUxMOworICAgIGVudHJvcHktPmNvdW50X3B0cnNbaV0gPSBOVUxMOworICB9CisgIGVudHJvcHktPmJpdF9idWZmZXIgPSBOVUxMOyAgIC8qIG5lZWRlZCBvbmx5IGluIEFDIHJlZmluZW1lbnQgc2NhbiAqLworfQorCisjZW5kaWYgLyogQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjcHJlcGN0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY3ByZXBjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTcxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qY3ByZXBjdC5jCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogamNwcmVwY3QuYworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBJdCB3YXMgbW9kaWZpZWQgYnkgVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCB0byBpbmNsdWRlIG9ubHkgY29kZSByZWxldmFudAorICogdG8gbGlianBlZy10dXJiby4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29tcHJlc3Npb24gcHJlcHJvY2Vzc2luZyBjb250cm9sbGVyLgorICogVGhpcyBjb250cm9sbGVyIG1hbmFnZXMgdGhlIGNvbG9yIGNvbnZlcnNpb24sIGRvd25zYW1wbGluZywKKyAqIGFuZCBlZGdlIGV4cGFuc2lvbiBzdGVwcy4KKyAqCisgKiBNb3N0IG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaXMgYXNzb2NpYXRlZCB3aXRoIGJ1ZmZlcmluZyBpbnB1dCByb3dzCisgKiBhcyByZXF1aXJlZCBieSB0aGUgZG93bnNhbXBsZXIuICBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBoZWFkIG9mCisgKiBqY3NhbXBsZS5jIGZvciB0aGUgZG93bnNhbXBsZXIncyBuZWVkcy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyogQXQgcHJlc2VudCwgamNzYW1wbGUuYyBjYW4gcmVxdWVzdCBjb250ZXh0IHJvd3Mgb25seSBmb3Igc21vb3RoaW5nLgorICogSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBuZWVkIGNvbnRleHQgcm93cyBmb3IgQ0NJUjYwMSBzYW1wbGluZworICogb3Igb3RoZXIgbW9yZS1jb21wbGV4IGRvd25zYW1wbGluZyBwcm9jZWR1cmVzLiAgVGhlIGNvZGUgdG8gc3VwcG9ydAorICogY29udGV4dCByb3dzIHNob3VsZCBiZSBjb21waWxlZCBvbmx5IGlmIG5lZWRlZC4KKyAqLworI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKKyNkZWZpbmUgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRAorI2VuZGlmCisKKworLyoKKyAqIEZvciB0aGUgc2ltcGxlIChuby1jb250ZXh0LXJvdykgY2FzZSwgd2UganVzdCBuZWVkIHRvIGJ1ZmZlciBvbmUKKyAqIHJvdyBncm91cCdzIHdvcnRoIG9mIHBpeGVscyBmb3IgdGhlIGRvd25zYW1wbGluZyBzdGVwLiAgQXQgdGhlIGJvdHRvbSBvZgorICogdGhlIGltYWdlLCB3ZSBwYWQgdG8gYSBmdWxsIHJvdyBncm91cCBieSByZXBsaWNhdGluZyB0aGUgbGFzdCBwaXhlbCByb3cuCisgKiBUaGUgZG93bnNhbXBsZXIncyBsYXN0IG91dHB1dCByb3cgaXMgdGhlbiByZXBsaWNhdGVkIGlmIG5lZWRlZCB0byBwYWQKKyAqIG91dCB0byBhIGZ1bGwgaU1DVSByb3cuCisgKgorICogV2hlbiBwcm92aWRpbmcgY29udGV4dCByb3dzLCB3ZSBtdXN0IGJ1ZmZlciB0aHJlZSByb3cgZ3JvdXBzJyB3b3J0aCBvZgorICogcGl4ZWxzLiAgVGhyZWUgcm93IGdyb3VwcyBhcmUgcGh5c2ljYWxseSBhbGxvY2F0ZWQsIGJ1dCB0aGUgcm93IHBvaW50ZXIKKyAqIGFycmF5cyBhcmUgbWFkZSBmaXZlIHJvdyBncm91cHMgaGlnaCwgd2l0aCB0aGUgZXh0cmEgcG9pbnRlcnMgYWJvdmUgYW5kCisgKiBiZWxvdyAid3JhcHBpbmcgYXJvdW5kIiB0byBwb2ludCB0byB0aGUgbGFzdCBhbmQgZmlyc3QgcmVhbCByb3cgZ3JvdXBzLgorICogVGhpcyBhbGxvd3MgdGhlIGRvd25zYW1wbGVyIHRvIGFjY2VzcyB0aGUgcHJvcGVyIGNvbnRleHQgcm93cy4KKyAqIEF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHdlIGNyZWF0ZSBkdW1teSBjb250ZXh0IHJvd3MgYnkKKyAqIGNvcHlpbmcgdGhlIGZpcnN0IG9yIGxhc3QgcmVhbCBwaXhlbCByb3cuICBUaGlzIGNvcHlpbmcgY291bGQgYmUgYXZvaWRlZAorICogYnkgcG9pbnRlciBoYWNraW5nIGFzIGlzIGRvbmUgaW4gamRtYWluY3QuYywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUKKyAqIHRyb3VibGUgb24gdGhlIGNvbXByZXNzaW9uIHNpZGUuCisgKi8KKworCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NfcHJlcF9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIERvd25zYW1wbGluZyBpbnB1dCBidWZmZXIuICBUaGlzIGJ1ZmZlciBob2xkcyBjb2xvci1jb252ZXJ0ZWQgZGF0YQorICAgKiB1bnRpbCB3ZSBoYXZlIGVub3VnaCB0byBkbyBhIGRvd25zYW1wbGUgc3RlcC4KKyAgICovCisgIEpTQU1QQVJSQVkgY29sb3JfYnVmW01BWF9DT01QT05FTlRTXTsKKworICBKRElNRU5TSU9OIHJvd3NfdG9fZ287ICAgICAgICAvKiBjb3VudHMgcm93cyByZW1haW5pbmcgaW4gc291cmNlIGltYWdlICovCisgIGludCBuZXh0X2J1Zl9yb3c7ICAgICAgICAgICAgIC8qIGluZGV4IG9mIG5leHQgcm93IHRvIHN0b3JlIGluIGNvbG9yX2J1ZiAqLworCisjaWZkZWYgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRCAgIC8qIG9ubHkgbmVlZGVkIGZvciBjb250ZXh0IGNhc2UgKi8KKyAgaW50IHRoaXNfcm93X2dyb3VwOyAgICAgICAgICAgLyogc3RhcnRpbmcgcm93IGluZGV4IG9mIGdyb3VwIHRvIHByb2Nlc3MgKi8KKyAgaW50IG5leHRfYnVmX3N0b3A7ICAgICAgICAgICAgLyogZG93bnNhbXBsZSB3aGVuIHdlIHJlYWNoIHRoaXMgaW5kZXggKi8KKyNlbmRpZgorfSBteV9wcmVwX2NvbnRyb2xsZXI7CisKK3R5cGVkZWYgbXlfcHJlcF9jb250cm9sbGVyICpteV9wcmVwX3B0cjsKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3ByZXAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKWNpbmZvLT5wcmVwOworCisgIGlmIChwYXNzX21vZGUgIT0gSkJVRl9QQVNTX1RIUlUpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworCisgIC8qIEluaXRpYWxpemUgdG90YWwtaGVpZ2h0IGNvdW50ZXIgZm9yIGRldGVjdGluZyBib3R0b20gb2YgaW1hZ2UgKi8KKyAgcHJlcC0+cm93c190b19nbyA9IGNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgIC8qIE1hcmsgdGhlIGNvbnZlcnNpb24gYnVmZmVyIGVtcHR5ICovCisgIHByZXAtPm5leHRfYnVmX3JvdyA9IDA7CisjaWZkZWYgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRAorICAvKiBQcmVzZXQgYWRkaXRpb25hbCBzdGF0ZSB2YXJpYWJsZXMgZm9yIGNvbnRleHQgbW9kZS4KKyAgICogVGhlc2UgYXJlbid0IHVzZWQgaW4gbm9uLWNvbnRleHQgbW9kZSwgc28gd2UgbmVlZG4ndCB0ZXN0IHdoaWNoIG1vZGUuCisgICAqLworICBwcmVwLT50aGlzX3Jvd19ncm91cCA9IDA7CisgIC8qIFNldCBuZXh0X2J1Zl9zdG9wIHRvIHN0b3AgYWZ0ZXIgdHdvIHJvdyBncm91cHMgaGF2ZSBiZWVuIHJlYWQgaW4uICovCisgIHByZXAtPm5leHRfYnVmX3N0b3AgPSAyICogY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworI2VuZGlmCit9CisKKworLyoKKyAqIEV4cGFuZCBhbiBpbWFnZSB2ZXJ0aWNhbGx5IGZyb20gaGVpZ2h0IGlucHV0X3Jvd3MgdG8gaGVpZ2h0IG91dHB1dF9yb3dzLAorICogYnkgZHVwbGljYXRpbmcgdGhlIGJvdHRvbSByb3cuCisgKi8KKworTE9DQUwodm9pZCkKK2V4cGFuZF9ib3R0b21fZWRnZShKU0FNUEFSUkFZIGltYWdlX2RhdGEsIEpESU1FTlNJT04gbnVtX2NvbHMsIGludCBpbnB1dF9yb3dzLAorICAgICAgICAgICAgICAgICAgIGludCBvdXRwdXRfcm93cykKK3sKKyAgcmVnaXN0ZXIgaW50IHJvdzsKKworICBmb3IgKHJvdyA9IGlucHV0X3Jvd3M7IHJvdyA8IG91dHB1dF9yb3dzOyByb3crKykgeworICAgIGpjb3B5X3NhbXBsZV9yb3dzKGltYWdlX2RhdGEsIGlucHV0X3Jvd3MgLSAxLCBpbWFnZV9kYXRhLCByb3csIDEsCisgICAgICAgICAgICAgICAgICAgICAgbnVtX2NvbHMpOworICB9Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBzaW1wbGUgbm8tY29udGV4dCBjYXNlLgorICoKKyAqIFByZXByb2Nlc3NvciBvdXRwdXQgZGF0YSBpcyBjb3VudGVkIGluICJyb3cgZ3JvdXBzIi4gIEEgcm93IGdyb3VwCisgKiBpcyBkZWZpbmVkIHRvIGJlIHZfc2FtcF9mYWN0b3Igc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQuCisgKiBEb3duc2FtcGxpbmcgd2lsbCBwcm9kdWNlIHRoaXMgbXVjaCBkYXRhIGZyb20gZWFjaCBtYXhfdl9zYW1wX2ZhY3RvcgorICogaW5wdXQgcm93cy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3ByZV9wcm9jZXNzX2RhdGEoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfY3RyLCBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCisgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cHNfYXZhaWwpCit7CisgIG15X3ByZXBfcHRyIHByZXAgPSAobXlfcHJlcF9wdHIpY2luZm8tPnByZXA7CisgIGludCBudW1yb3dzLCBjaTsKKyAgSkRJTUVOU0lPTiBpbnJvd3M7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgd2hpbGUgKCppbl9yb3dfY3RyIDwgaW5fcm93c19hdmFpbCAmJgorICAgICAgICAgKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsKKyAgICAvKiBEbyBjb2xvciBjb252ZXJzaW9uIHRvIGZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLiAqLworICAgIGlucm93cyA9IGluX3Jvd3NfYXZhaWwgLSAqaW5fcm93X2N0cjsKKyAgICBudW1yb3dzID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yIC0gcHJlcC0+bmV4dF9idWZfcm93OworICAgIG51bXJvd3MgPSAoaW50KU1JTigoSkRJTUVOU0lPTiludW1yb3dzLCBpbnJvd3MpOworICAgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIGlucHV0X2J1ZiArICppbl9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcC0+Y29sb3JfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pcHJlcC0+bmV4dF9idWZfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcm93cyk7CisgICAgKmluX3Jvd19jdHIgKz0gbnVtcm93czsKKyAgICBwcmVwLT5uZXh0X2J1Zl9yb3cgKz0gbnVtcm93czsKKyAgICBwcmVwLT5yb3dzX3RvX2dvIC09IG51bXJvd3M7CisgICAgLyogSWYgYXQgYm90dG9tIG9mIGltYWdlLCBwYWQgdG8gZmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIuICovCisgICAgaWYgKHByZXAtPnJvd3NfdG9fZ28gPT0gMCAmJgorICAgICAgICBwcmVwLT5uZXh0X2J1Zl9yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgICAgICBleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcC0+bmV4dF9idWZfcm93LCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgICAgfQorICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgIH0KKyAgICAvKiBJZiB3ZSd2ZSBmaWxsZWQgdGhlIGNvbnZlcnNpb24gYnVmZmVyLCBlbXB0eSBpdC4gKi8KKyAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93ID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICAgKCpjaW5mby0+ZG93bnNhbXBsZS0+ZG93bnNhbXBsZSkgKGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXAtPmNvbG9yX2J1ZiwgKEpESU1FTlNJT04pMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmLCAqb3V0X3Jvd19ncm91cF9jdHIpOworICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gMDsKKyAgICAgICgqb3V0X3Jvd19ncm91cF9jdHIpKys7CisgICAgfQorICAgIC8qIElmIGF0IGJvdHRvbSBvZiBpbWFnZSwgcGFkIHRoZSBvdXRwdXQgdG8gYSBmdWxsIGlNQ1UgaGVpZ2h0LgorICAgICAqIE5vdGUgd2UgYXNzdW1lIHRoZSBjYWxsZXIgaXMgcHJvdmlkaW5nIGEgb25lLWlNQ1UtaGVpZ2h0IG91dHB1dCBidWZmZXIhCisgICAgICovCisgICAgaWYgKHByZXAtPnJvd3NfdG9fZ28gPT0gMCAmJiAqb3V0X3Jvd19ncm91cF9jdHIgPCBvdXRfcm93X2dyb3Vwc19hdmFpbCkgeworICAgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgICAgIGV4cGFuZF9ib3R0b21fZWRnZShvdXRwdXRfYnVmW2NpXSwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCpvdXRfcm93X2dyb3VwX2N0ciAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkob3V0X3Jvd19ncm91cHNfYXZhaWwgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSk7CisgICAgICB9CisgICAgICAqb3V0X3Jvd19ncm91cF9jdHIgPSBvdXRfcm93X2dyb3Vwc19hdmFpbDsKKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogY2FuIGV4aXQgb3V0ZXIgbG9vcCB3aXRob3V0IHRlc3QgKi8KKyAgICB9CisgIH0KK30KKworCisjaWZkZWYgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRAorCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIGNvbnRleHQgY2FzZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3ByZV9wcm9jZXNzX2NvbnRleHQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfY3RyLCBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cHNfYXZhaWwpCit7CisgIG15X3ByZXBfcHRyIHByZXAgPSAobXlfcHJlcF9wdHIpY2luZm8tPnByZXA7CisgIGludCBudW1yb3dzLCBjaTsKKyAgaW50IGJ1Zl9oZWlnaHQgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiAzOworICBKRElNRU5TSU9OIGlucm93czsKKworICB3aGlsZSAoKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsKKyAgICBpZiAoKmluX3Jvd19jdHIgPCBpbl9yb3dzX2F2YWlsKSB7CisgICAgICAvKiBEbyBjb2xvciBjb252ZXJzaW9uIHRvIGZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLiAqLworICAgICAgaW5yb3dzID0gaW5fcm93c19hdmFpbCAtICppbl9yb3dfY3RyOworICAgICAgbnVtcm93cyA9IHByZXAtPm5leHRfYnVmX3N0b3AgLSBwcmVwLT5uZXh0X2J1Zl9yb3c7CisgICAgICBudW1yb3dzID0gKGludClNSU4oKEpESU1FTlNJT04pbnVtcm93cywgaW5yb3dzKTsKKyAgICAgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIGlucHV0X2J1ZiArICppbl9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwLT5jb2xvcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKXByZXAtPm5leHRfYnVmX3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcm93cyk7CisgICAgICAvKiBQYWQgYXQgdG9wIG9mIGltYWdlLCBpZiBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKyAgICAgIGlmIChwcmVwLT5yb3dzX3RvX2dvID09IGNpbmZvLT5pbWFnZV9oZWlnaHQpIHsKKyAgICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgICAgICAgaW50IHJvdzsKKyAgICAgICAgICBmb3IgKHJvdyA9IDE7IHJvdyA8PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7IHJvdysrKSB7CisgICAgICAgICAgICBqY29weV9zYW1wbGVfcm93cyhwcmVwLT5jb2xvcl9idWZbY2ldLCAwLCBwcmVwLT5jb2xvcl9idWZbY2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJvdywgMSwgY2luZm8tPmltYWdlX3dpZHRoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICppbl9yb3dfY3RyICs9IG51bXJvd3M7CisgICAgICBwcmVwLT5uZXh0X2J1Zl9yb3cgKz0gbnVtcm93czsKKyAgICAgIHByZXAtPnJvd3NfdG9fZ28gLT0gbnVtcm93czsKKyAgICB9IGVsc2UgeworICAgICAgLyogUmV0dXJuIGZvciBtb3JlIGRhdGEsIHVubGVzcyB3ZSBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UuICovCisgICAgICBpZiAocHJlcC0+cm93c190b19nbyAhPSAwKQorICAgICAgICBicmVhazsKKyAgICAgIC8qIFdoZW4gYXQgYm90dG9tIG9mIGltYWdlLCBwYWQgdG8gZmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIuICovCisgICAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93IDwgcHJlcC0+bmV4dF9idWZfc3RvcCkgeworICAgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgICAgICBleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwLT5uZXh0X2J1Zl9yb3csIHByZXAtPm5leHRfYnVmX3N0b3ApOworICAgICAgICB9CisgICAgICAgIHByZXAtPm5leHRfYnVmX3JvdyA9IHByZXAtPm5leHRfYnVmX3N0b3A7CisgICAgICB9CisgICAgfQorICAgIC8qIElmIHdlJ3ZlIGdvdHRlbiBlbm91Z2ggZGF0YSwgZG93bnNhbXBsZSBhIHJvdyBncm91cC4gKi8KKyAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93ID09IHByZXAtPm5leHRfYnVmX3N0b3ApIHsKKyAgICAgICgqY2luZm8tPmRvd25zYW1wbGUtPmRvd25zYW1wbGUpIChjaW5mbywgcHJlcC0+Y29sb3JfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKXByZXAtPnRoaXNfcm93X2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYsICpvdXRfcm93X2dyb3VwX2N0cik7CisgICAgICAoKm91dF9yb3dfZ3JvdXBfY3RyKSsrOworICAgICAgLyogQWR2YW5jZSBwb2ludGVycyB3aXRoIHdyYXBhcm91bmQgYXMgbmVjZXNzYXJ5LiAqLworICAgICAgcHJlcC0+dGhpc19yb3dfZ3JvdXAgKz0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgICAgaWYgKHByZXAtPnRoaXNfcm93X2dyb3VwID49IGJ1Zl9oZWlnaHQpCisgICAgICAgIHByZXAtPnRoaXNfcm93X2dyb3VwID0gMDsKKyAgICAgIGlmIChwcmVwLT5uZXh0X2J1Zl9yb3cgPj0gYnVmX2hlaWdodCkKKyAgICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gMDsKKyAgICAgIHByZXAtPm5leHRfYnVmX3N0b3AgPSBwcmVwLT5uZXh0X2J1Zl9yb3cgKyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIENyZWF0ZSB0aGUgd3JhcHBlZC1hcm91bmQgZG93bnNhbXBsaW5nIGlucHV0IGJ1ZmZlciBuZWVkZWQgZm9yIGNvbnRleHQgbW9kZS4KKyAqLworCitMT0NBTCh2b2lkKQorY3JlYXRlX2NvbnRleHRfYnVmZmVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKWNpbmZvLT5wcmVwOworICBpbnQgcmdyb3VwX2hlaWdodCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgaW50IGNpLCBpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKU0FNUEFSUkFZIHRydWVfYnVmZmVyLCBmYWtlX2J1ZmZlcjsKKworICAvKiBHcmFiIGVub3VnaCBzcGFjZSBmb3IgZmFrZSByb3cgcG9pbnRlcnMgZm9yIGFsbCB0aGUgY29tcG9uZW50czsKKyAgICogd2UgbmVlZCBmaXZlIHJvdyBncm91cHMnIHdvcnRoIG9mIHBvaW50ZXJzIGZvciBlYWNoIGNvbXBvbmVudC4KKyAgICovCisgIGZha2VfYnVmZmVyID0gKEpTQU1QQVJSQVkpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2luZm8tPm51bV9jb21wb25lbnRzICogNSAqIHJncm91cF9oZWlnaHQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEpTQU1QUk9XKSk7CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAvKiBBbGxvY2F0ZSB0aGUgYWN0dWFsIGJ1ZmZlciBzcGFjZSAoMyByb3cgZ3JvdXBzKSBmb3IgdGhpcyBjb21wb25lbnQuCisgICAgICogV2UgbWFrZSB0aGUgYnVmZmVyIHdpZGUgZW5vdWdoIHRvIGFsbG93IHRoZSBkb3duc2FtcGxlciB0byBlZGdlLWV4cGFuZAorICAgICAqIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGJ1ZmZlciwgaWYgaXQgc28gY2hvb3Nlcy4KKyAgICAgKi8KKyAgICB0cnVlX2J1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgIChKRElNRU5TSU9OKSgoKGxvbmcpY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSAqCisgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpIC8gY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisgICAgICAgKEpESU1FTlNJT04pKDMgKiByZ3JvdXBfaGVpZ2h0KSk7CisgICAgLyogQ29weSB0cnVlIGJ1ZmZlciByb3cgcG9pbnRlcnMgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmYWtlIHJvdyBhcnJheSAqLworICAgIE1FTUNPUFkoZmFrZV9idWZmZXIgKyByZ3JvdXBfaGVpZ2h0LCB0cnVlX2J1ZmZlciwKKyAgICAgICAgICAgIDMgKiByZ3JvdXBfaGVpZ2h0ICogc2l6ZW9mKEpTQU1QUk9XKSk7CisgICAgLyogRmlsbCBpbiB0aGUgYWJvdmUgYW5kIGJlbG93IHdyYXBhcm91bmQgcG9pbnRlcnMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwX2hlaWdodDsgaSsrKSB7CisgICAgICBmYWtlX2J1ZmZlcltpXSA9IHRydWVfYnVmZmVyWzIgKiByZ3JvdXBfaGVpZ2h0ICsgaV07CisgICAgICBmYWtlX2J1ZmZlcls0ICogcmdyb3VwX2hlaWdodCArIGldID0gdHJ1ZV9idWZmZXJbaV07CisgICAgfQorICAgIHByZXAtPmNvbG9yX2J1ZltjaV0gPSBmYWtlX2J1ZmZlciArIHJncm91cF9oZWlnaHQ7CisgICAgZmFrZV9idWZmZXIgKz0gNSAqIHJncm91cF9oZWlnaHQ7IC8qIHBvaW50IHRvIHNwYWNlIGZvciBuZXh0IGNvbXBvbmVudCAqLworICB9Cit9CisKKyNlbmRpZiAvKiBDT05URVhUX1JPV1NfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgcHJlcHJvY2Vzc2luZyBjb250cm9sbGVyLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfY19wcmVwX2NvbnRyb2xsZXIoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikKK3sKKyAgbXlfcHJlcF9wdHIgcHJlcDsKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGlmIChuZWVkX2Z1bGxfYnVmZmVyKSAgICAgICAgIC8qIHNhZmV0eSBjaGVjayAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKKworICBwcmVwID0gKG15X3ByZXBfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG15X3ByZXBfY29udHJvbGxlcikpOworICBjaW5mby0+cHJlcCA9IChzdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciAqKXByZXA7CisgIHByZXAtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19wcmVwOworCisgIC8qIEFsbG9jYXRlIHRoZSBjb2xvciBjb252ZXJzaW9uIGJ1ZmZlci4KKyAgICogV2UgbWFrZSB0aGUgYnVmZmVyIHdpZGUgZW5vdWdoIHRvIGFsbG93IHRoZSBkb3duc2FtcGxlciB0byBlZGdlLWV4cGFuZAorICAgKiBob3Jpem9udGFsbHkgd2l0aGluIHRoZSBidWZmZXIsIGlmIGl0IHNvIGNob29zZXMuCisgICAqLworICBpZiAoY2luZm8tPmRvd25zYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7CisgICAgLyogU2V0IHVwIHRvIHByb3ZpZGUgY29udGV4dCByb3dzICovCisjaWZkZWYgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRAorICAgIHByZXAtPnB1Yi5wcmVfcHJvY2Vzc19kYXRhID0gcHJlX3Byb2Nlc3NfY29udGV4dDsKKyAgICBjcmVhdGVfY29udGV4dF9idWZmZXIoY2luZm8pOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICAvKiBObyBjb250ZXh0LCBqdXN0IG1ha2UgaXQgdGFsbCBlbm91Z2ggZm9yIG9uZSByb3cgZ3JvdXAgKi8KKyAgICBwcmVwLT5wdWIucHJlX3Byb2Nlc3NfZGF0YSA9IHByZV9wcm9jZXNzX2RhdGE7CisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgcHJlcC0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAoSkRJTUVOU0lPTikoKChsb25nKWNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUgKgorICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpIC8gY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTiljaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNzYW1wbGUuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjc2FtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyN2I4NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjc2FtcGxlLmMKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBqY3NhbXBsZS5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZG93bnNhbXBsaW5nIHJvdXRpbmVzLgorICoKKyAqIERvd25zYW1wbGluZyBpbnB1dCBkYXRhIGlzIGNvdW50ZWQgaW4gInJvdyBncm91cHMiLiAgQSByb3cgZ3JvdXAKKyAqIGlzIGRlZmluZWQgdG8gYmUgbWF4X3Zfc2FtcF9mYWN0b3IgcGl4ZWwgcm93cyBvZiBlYWNoIGNvbXBvbmVudCwKKyAqIGZyb20gd2hpY2ggdGhlIGRvd25zYW1wbGVyIHByb2R1Y2VzIHZfc2FtcF9mYWN0b3Igc2FtcGxlIHJvd3MuCisgKiBBIHNpbmdsZSByb3cgZ3JvdXAgaXMgcHJvY2Vzc2VkIGluIGVhY2ggY2FsbCB0byB0aGUgZG93bnNhbXBsZXIgbW9kdWxlLgorICoKKyAqIFRoZSBkb3duc2FtcGxlciBpcyByZXNwb25zaWJsZSBmb3IgZWRnZS1leHBhbnNpb24gb2YgaXRzIG91dHB1dCBkYXRhCisgKiB0byBmaWxsIGFuIGludGVncmFsIG51bWJlciBvZiBEQ1QgYmxvY2tzIGhvcml6b250YWxseS4gIFRoZSBzb3VyY2UgYnVmZmVyCisgKiBtYXkgYmUgbW9kaWZpZWQgaWYgaXQgaXMgaGVscGZ1bCBmb3IgdGhpcyBwdXJwb3NlICh0aGUgc291cmNlIGJ1ZmZlciBpcworICogYWxsb2NhdGVkIHdpZGUgZW5vdWdoIHRvIGNvcnJlc3BvbmQgdG8gdGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoKS4KKyAqIFRoZSBjYWxsZXIgKHRoZSBwcmVwIGNvbnRyb2xsZXIpIGlzIHJlc3BvbnNpYmxlIGZvciB2ZXJ0aWNhbCBwYWRkaW5nLgorICoKKyAqIFRoZSBkb3duc2FtcGxlciBtYXkgcmVxdWVzdCAiY29udGV4dCByb3dzIiBieSBzZXR0aW5nIG5lZWRfY29udGV4dF9yb3dzCisgKiBkdXJpbmcgc3RhcnR1cC4gIEluIHRoaXMgY2FzZSwgdGhlIGlucHV0IGFycmF5cyB3aWxsIGNvbnRhaW4gYXQgbGVhc3QKKyAqIG9uZSByb3cgZ3JvdXAncyB3b3J0aCBvZiBwaXhlbHMgYWJvdmUgYW5kIGJlbG93IHRoZSBwYXNzZWQtaW4gZGF0YTsKKyAqIHRoZSBjYWxsZXIgd2lsbCBjcmVhdGUgZHVtbXkgcm93cyBhdCBpbWFnZSB0b3AgYW5kIGJvdHRvbSBieSByZXBsaWNhdGluZworICogdGhlIGZpcnN0IG9yIGxhc3QgcmVhbCBwaXhlbCByb3cuCisgKgorICogQW4gZXhjZWxsZW50IHJlZmVyZW5jZSBmb3IgaW1hZ2UgcmVzYW1wbGluZyBpcworICogICBEaWdpdGFsIEltYWdlIFdhcnBpbmcsIEdlb3JnZSBXb2xiZXJnLCAxOTkwLgorICogICBQdWIuIGJ5IElFRUUgQ29tcHV0ZXIgU29jaWV0eSBQcmVzcywgTG9zIEFsYW1pdG9zLCBDQS4gSVNCTiAwLTgxODYtODk0NC03LgorICoKKyAqIFRoZSBkb3duc2FtcGxpbmcgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBhIHNpbXBsZSBhdmVyYWdlIG9mIHRoZSBzb3VyY2UKKyAqIHBpeGVscyBjb3ZlcmVkIGJ5IHRoZSBvdXRwdXQgcGl4ZWwuICBUaGUgaGktZmFsdXRpbiBzYW1wbGluZyBsaXRlcmF0dXJlCisgKiByZWZlcnMgdG8gdGhpcyBhcyBhICJib3ggZmlsdGVyIi4gIEluIGdlbmVyYWwgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhIGJveAorICogZmlsdGVyIGFyZSBub3QgdmVyeSBnb29kLCBidXQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlcyB3ZSBub3JtYWxseSB1c2UgKDE6MQorICogYW5kIDI6MSByYXRpb3MpIHRoZSBib3ggaXMgZXF1aXZhbGVudCB0byBhICJ0cmlhbmdsZSBmaWx0ZXIiIHdoaWNoIGlzIG5vdAorICogbmVhcmx5IHNvIGJhZC4gIElmIHlvdSBpbnRlbmQgdG8gdXNlIG90aGVyIHNhbXBsaW5nIHJhdGlvcywgeW91J2QgYmUgd2VsbAorICogYWR2aXNlZCB0byBpbXByb3ZlIHRoaXMgY29kZS4KKyAqCisgKiBBIHNpbXBsZSBpbnB1dC1zbW9vdGhpbmcgY2FwYWJpbGl0eSBpcyBwcm92aWRlZC4gIFRoaXMgaXMgbWFpbmx5IGludGVuZGVkCisgKiBmb3IgY2xlYW5pbmcgdXAgY29sb3ItZGl0aGVyZWQgR0lGIGlucHV0IGZpbGVzIChpZiB5b3UgZmluZCBpdCBpbmFkZXF1YXRlLAorICogd2Ugc3VnZ2VzdCB1c2luZyBhbiBleHRlcm5hbCBmaWx0ZXJpbmcgcHJvZ3JhbSBzdWNoIGFzIHBubWNvbnZvbCkuICBXaGVuCisgKiBlbmFibGVkLCBlYWNoIGlucHV0IHBpeGVsIFAgaXMgcmVwbGFjZWQgYnkgYSB3ZWlnaHRlZCBzdW0gb2YgaXRzZWxmIGFuZCBpdHMKKyAqIGVpZ2h0IG5laWdoYm9ycy4gIFAncyB3ZWlnaHQgaXMgMS04KlNGIGFuZCBlYWNoIG5laWdoYm9yJ3Mgd2VpZ2h0IGlzIFNGLAorICogd2hlcmUgU0YgPSAoc21vb3RoaW5nX2ZhY3RvciAvIDEwMjQpLgorICogQ3VycmVudGx5LCBzbW9vdGhpbmcgaXMgb25seSBzdXBwb3J0ZWQgZm9yIDJoMnYgc2FtcGxpbmcgZmFjdG9ycy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianNpbWQuaCIKKworCisvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gZG93bnNhbXBsZSBhIHNpbmdsZSBjb21wb25lbnQgKi8KK3R5cGVkZWYgdm9pZCAoKmRvd25zYW1wbGUxX3B0cikgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCisvKiBQcml2YXRlIHN1Ym9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyIHB1YjsgIC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBEb3duc2FtcGxpbmcgbWV0aG9kIHBvaW50ZXJzLCBvbmUgcGVyIGNvbXBvbmVudCAqLworICBkb3duc2FtcGxlMV9wdHIgbWV0aG9kc1tNQVhfQ09NUE9ORU5UU107Cit9IG15X2Rvd25zYW1wbGVyOworCit0eXBlZGVmIG15X2Rvd25zYW1wbGVyICpteV9kb3duc2FtcGxlX3B0cjsKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBkb3duc2FtcGxpbmcgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogbm8gd29yayBmb3Igbm93ICovCit9CisKKworLyoKKyAqIEV4cGFuZCBhIGNvbXBvbmVudCBob3Jpem9udGFsbHkgZnJvbSB3aWR0aCBpbnB1dF9jb2xzIHRvIHdpZHRoIG91dHB1dF9jb2xzLAorICogYnkgZHVwbGljYXRpbmcgdGhlIHJpZ2h0bW9zdCBzYW1wbGVzLgorICovCisKK0xPQ0FMKHZvaWQpCitleHBhbmRfcmlnaHRfZWRnZShKU0FNUEFSUkFZIGltYWdlX2RhdGEsIGludCBudW1fcm93cywgSkRJTUVOU0lPTiBpbnB1dF9jb2xzLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29scykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKU0FNUExFIHBpeHZhbDsKKyAgcmVnaXN0ZXIgaW50IGNvdW50OworICBpbnQgcm93OworICBpbnQgbnVtY29scyA9IChpbnQpKG91dHB1dF9jb2xzIC0gaW5wdXRfY29scyk7CisKKyAgaWYgKG51bWNvbHMgPiAwKSB7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBudW1fcm93czsgcm93KyspIHsKKyAgICAgIHB0ciA9IGltYWdlX2RhdGFbcm93XSArIGlucHV0X2NvbHM7CisgICAgICBwaXh2YWwgPSBwdHJbLTFdOyAgICAgICAgIC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgIGZvciAoY291bnQgPSBudW1jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICpwdHIrKyA9IHBpeHZhbDsKKyAgICB9CisgIH0KK30KKworCisvKgorICogRG8gZG93bnNhbXBsaW5nIGZvciBhIHdob2xlIHJvdyBncm91cCAoYWxsIGNvbXBvbmVudHMpLgorICoKKyAqIEluIHRoaXMgdmVyc2lvbiB3ZSBzaW1wbHkgZG93bnNhbXBsZSBlYWNoIGNvbXBvbmVudCBpbmRlcGVuZGVudGx5LgorICovCisKK01FVEhPRERFRih2b2lkKQorc2VwX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfaW5kZXgsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cF9pbmRleCkKK3sKKyAgbXlfZG93bnNhbXBsZV9wdHIgZG93bnNhbXBsZSA9IChteV9kb3duc2FtcGxlX3B0ciljaW5mby0+ZG93bnNhbXBsZTsKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKU0FNUEFSUkFZIGluX3B0ciwgb3V0X3B0cjsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIGluX3B0ciA9IGlucHV0X2J1ZltjaV0gKyBpbl9yb3dfaW5kZXg7CisgICAgb3V0X3B0ciA9IG91dHB1dF9idWZbY2ldICsgKG91dF9yb3dfZ3JvdXBfaW5kZXggKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICAoKmRvd25zYW1wbGUtPm1ldGhvZHNbY2ldKSAoY2luZm8sIGNvbXBwdHIsIGluX3B0ciwgb3V0X3B0cik7CisgIH0KK30KKworCisvKgorICogRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorICogT25lIHJvdyBncm91cCBpcyBwcm9jZXNzZWQgcGVyIGNhbGwuCisgKiBUaGlzIHZlcnNpb24gaGFuZGxlcyBhcmJpdHJhcnkgaW50ZWdyYWwgc2FtcGxpbmcgcmF0aW9zLCB3aXRob3V0IHNtb290aGluZy4KKyAqIE5vdGUgdGhhdCB0aGlzIHZlcnNpb24gaXMgbm90IGFjdHVhbGx5IHVzZWQgZm9yIGN1c3RvbWFyeSBzYW1wbGluZyByYXRpb3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitpbnRfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaW50IGlucm93LCBvdXRyb3csIGhfZXhwYW5kLCB2X2V4cGFuZCwgbnVtcGl4LCBudW1waXgyLCBoLCB2OworICBKRElNRU5TSU9OIG91dGNvbCwgb3V0Y29sX2g7ICAvKiBvdXRjb2xfaCA9PSBvdXRjb2wqaF9leHBhbmQgKi8KKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CisgIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIEpMT05HIG91dHZhbHVlOworCisgIGhfZXhwYW5kID0gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yIC8gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgdl9leHBhbmQgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgLyBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICBudW1waXggPSBoX2V4cGFuZCAqIHZfZXhwYW5kOworICBudW1waXgyID0gbnVtcGl4IC8gMjsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29scyAqIGhfZXhwYW5kKTsKKworICBpbnJvdyA9IDA7CisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIGZvciAob3V0Y29sID0gMCwgb3V0Y29sX2ggPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsKKyAgICAgICAgIG91dGNvbCsrLCBvdXRjb2xfaCArPSBoX2V4cGFuZCkgeworICAgICAgb3V0dmFsdWUgPSAwOworICAgICAgZm9yICh2ID0gMDsgdiA8IHZfZXhwYW5kOyB2KyspIHsKKyAgICAgICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93ICsgdl0gKyBvdXRjb2xfaDsKKyAgICAgICAgZm9yIChoID0gMDsgaCA8IGhfZXhwYW5kOyBoKyspIHsKKyAgICAgICAgICBvdXR2YWx1ZSArPSAoSkxPTkcpR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSgob3V0dmFsdWUgKyBudW1waXgyKSAvIG51bXBpeCk7CisgICAgfQorICAgIGlucm93ICs9IHZfZXhwYW5kOworICB9Cit9CisKKworLyoKKyAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBmdWxsLXNpemUgY29tcG9uZW50LAorICogd2l0aG91dCBzbW9vdGhpbmcuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmdWxsc2l6ZV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIC8qIENvcHkgdGhlIGRhdGEgKi8KKyAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfZGF0YSwgMCwgb3V0cHV0X2RhdGEsIDAsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPmltYWdlX3dpZHRoKTsKKyAgLyogRWRnZS1leHBhbmQgKi8KKyAgZXhwYW5kX3JpZ2h0X2VkZ2Uob3V0cHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFKTsKK30KKworCisvKgorICogRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwsCisgKiB3aXRob3V0IHNtb290aGluZy4KKyAqCisgKiBBIG5vdGUgYWJvdXQgdGhlICJiaWFzIiBjYWxjdWxhdGlvbnM6IHdoZW4gcm91bmRpbmcgZnJhY3Rpb25hbCB2YWx1ZXMgdG8KKyAqIGludGVnZXIsIHdlIGRvIG5vdCB3YW50IHRvIGFsd2F5cyByb3VuZCAwLjUgdXAgdG8gdGhlIG5leHQgaW50ZWdlci4KKyAqIElmIHdlIGRpZCB0aGF0LCB3ZSdkIGludHJvZHVjZSBhIG5vdGljZWFibGUgYmlhcyB0b3dhcmRzIGxhcmdlciB2YWx1ZXMuCisgKiBJbnN0ZWFkLCB0aGlzIGNvZGUgaXMgYXJyYW5nZWQgc28gdGhhdCAwLjUgd2lsbCBiZSByb3VuZGVkIHVwIG9yIGRvd24gYXQKKyAqIGFsdGVybmF0ZSBwaXhlbCBsb2NhdGlvbnMgKGEgc2ltcGxlIG9yZGVyZWQgZGl0aGVyIHBhdHRlcm4pLgorICovCisKK01FVEhPRERFRih2b2lkKQoraDJ2MV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaW50IG91dHJvdzsKKyAgSkRJTUVOU0lPTiBvdXRjb2w7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBpbnQgYmlhczsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29scyAqIDIpOworCisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIGlucHRyID0gaW5wdXRfZGF0YVtvdXRyb3ddOworICAgIGJpYXMgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBiaWFzID0gMCwxLDAsMSwuLi4gZm9yIHN1Y2Nlc3NpdmUgc2FtcGxlcyAqLworICAgIGZvciAob3V0Y29sID0gMDsgb3V0Y29sIDwgb3V0cHV0X2NvbHM7IG91dGNvbCsrKSB7CisgICAgICAqb3V0cHRyKysgPQorICAgICAgICAoSlNBTVBMRSkoKEdFVEpTQU1QTEUoKmlucHRyKSArIEdFVEpTQU1QTEUoaW5wdHJbMV0pICsgYmlhcykgPj4gMSk7CisgICAgICBiaWFzIF49IDE7ICAgICAgICAgICAgICAgIC8qIDA9PjEsIDE9PjAgKi8KKyAgICAgIGlucHRyICs9IDI7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCisgKiB3aXRob3V0IHNtb290aGluZy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGludCBpbnJvdywgb3V0cm93OworICBKRElNRU5TSU9OIG91dGNvbDsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBvdXRwdHI7CisgIHJlZ2lzdGVyIGludCBiaWFzOworCisgIC8qIEV4cGFuZCBpbnB1dCBkYXRhIGVub3VnaCB0byBsZXQgYWxsIHRoZSBvdXRwdXQgc2FtcGxlcyBiZSBnZW5lcmF0ZWQKKyAgICogYnkgdGhlIHN0YW5kYXJkIGxvb3AuICBTcGVjaWFsLWNhc2luZyBwYWRkZWQgb3V0cHV0IHdvdWxkIGJlIG1vcmUKKyAgICogZWZmaWNpZW50LgorICAgKi8KKyAgZXhwYW5kX3JpZ2h0X2VkZ2UoaW5wdXRfZGF0YSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLCBjaW5mby0+aW1hZ2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2xzICogMik7CisKKyAgaW5yb3cgPSAwOworICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKKyAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93ICsgMV07CisgICAgYmlhcyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIGJpYXMgPSAxLDIsMSwyLC4uLiBmb3Igc3VjY2Vzc2l2ZSBzYW1wbGVzICovCisgICAgZm9yIChvdXRjb2wgPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsgb3V0Y29sKyspIHsKKyAgICAgICpvdXRwdHIrKyA9CisgICAgICAgIChKU0FNUExFKSgoR0VUSlNBTVBMRSgqaW5wdHIwKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArCisgICAgICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzFdKSArIGJpYXMpID4+IDIpOworICAgICAgYmlhcyBePSAzOyAgICAgICAgICAgICAgICAvKiAxPT4yLCAyPT4xICovCisgICAgICBpbnB0cjAgKz0gMjsgIGlucHRyMSArPSAyOworICAgIH0KKyAgICBpbnJvdyArPSAyOworICB9Cit9CisKKworI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKKworLyoKKyAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCisgKiB3aXRoIHNtb290aGluZy4gIE9uZSByb3cgb2YgY29udGV4dCBpcyByZXF1aXJlZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfc21vb3RoX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaW50IGlucm93LCBvdXRyb3c7CisgIEpESU1FTlNJT04gY29sY3RyOworICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIGFib3ZlX3B0ciwgYmVsb3dfcHRyLCBvdXRwdHI7CisgIEpMT05HIG1lbWJlcnN1bSwgbmVpZ2hzdW0sIG1lbWJlcnNjYWxlLCBuZWlnaHNjYWxlOworCisgIC8qIEV4cGFuZCBpbnB1dCBkYXRhIGVub3VnaCB0byBsZXQgYWxsIHRoZSBvdXRwdXQgc2FtcGxlcyBiZSBnZW5lcmF0ZWQKKyAgICogYnkgdGhlIHN0YW5kYXJkIGxvb3AuICBTcGVjaWFsLWNhc2luZyBwYWRkZWQgb3V0cHV0IHdvdWxkIGJlIG1vcmUKKyAgICogZWZmaWNpZW50LgorICAgKi8KKyAgZXhwYW5kX3JpZ2h0X2VkZ2UoaW5wdXRfZGF0YSAtIDEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciArIDIsCisgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKKworICAvKiBXZSBkb24ndCBib3RoZXIgdG8gZm9ybSB0aGUgaW5kaXZpZHVhbCAic21vb3RoZWQiIGlucHV0IHBpeGVsIHZhbHVlczsKKyAgICogd2UgY2FuIGRpcmVjdGx5IGNvbXB1dGUgdGhlIG91dHB1dCB3aGljaCBpcyB0aGUgYXZlcmFnZSBvZiB0aGUgZm91cgorICAgKiBzbW9vdGhlZCB2YWx1ZXMuICBFYWNoIG9mIHRoZSBmb3VyIG1lbWJlciBwaXhlbHMgY29udHJpYnV0ZXMgYSBmcmFjdGlvbgorICAgKiAoMS04KlNGKSB0byBpdHMgb3duIHNtb290aGVkIGltYWdlIGFuZCBhIGZyYWN0aW9uIFNGIHRvIGVhY2ggb2YgdGhlIHRocmVlCisgICAqIG90aGVyIHNtb290aGVkIHBpeGVscywgdGhlcmVmb3JlIGEgdG90YWwgZnJhY3Rpb24gKDEtNSpTRikvNCB0byB0aGUgZmluYWwKKyAgICogb3V0cHV0LiAgVGhlIGZvdXIgY29ybmVyLWFkamFjZW50IG5laWdoYm9yIHBpeGVscyBjb250cmlidXRlIGEgZnJhY3Rpb24KKyAgICogU0YgdG8ganVzdCBvbmUgc21vb3RoZWQgcGl4ZWwsIG9yIFNGLzQgdG8gdGhlIGZpbmFsIG91dHB1dDsgd2hpbGUgdGhlCisgICAqIGVpZ2h0IGVkZ2UtYWRqYWNlbnQgbmVpZ2hib3JzIGNvbnRyaWJ1dGUgU0YgdG8gZWFjaCBvZiB0d28gc21vb3RoZWQKKyAgICogcGl4ZWxzLCBvciBTRi8yIG92ZXJhbGwuICBJbiBvcmRlciB0byB1c2UgaW50ZWdlciBhcml0aG1ldGljLCB0aGVzZQorICAgKiBmYWN0b3JzIGFyZSBzY2FsZWQgYnkgMl4xNiA9IDY1NTM2LgorICAgKiBBbHNvIHJlY2FsbCB0aGF0IFNGID0gc21vb3RoaW5nX2ZhY3RvciAvIDEwMjQuCisgICAqLworCisgIG1lbWJlcnNjYWxlID0gMTYzODQgLSBjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAqIDgwOyAvKiBzY2FsZWQgKDEtNSpTRikvNCAqLworICBuZWlnaHNjYWxlID0gY2luZm8tPnNtb290aGluZ19mYWN0b3IgKiAxNjsgLyogc2NhbGVkIFNGLzQgKi8KKworICBpbnJvdyA9IDA7CisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3cgKyAxXTsKKyAgICBhYm92ZV9wdHIgPSBpbnB1dF9kYXRhW2lucm93IC0gMV07CisgICAgYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtpbnJvdyArIDJdOworCisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW46IHByZXRlbmQgY29sdW1uIC0xIGlzIHNhbWUgYXMgY29sdW1uIDAgKi8KKyAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsKKyAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOworICAgIG5laWdoc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArCisgICAgICAgICAgICAgICBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMV0pICsKKyAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsyXSkgKworICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzJdKTsKKyAgICBuZWlnaHN1bSArPSBuZWlnaHN1bTsKKyAgICBuZWlnaHN1bSArPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMl0pICsKKyAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMl0pOworICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKKyAgICBpbnB0cjAgKz0gMjsgIGlucHRyMSArPSAyOyAgYWJvdmVfcHRyICs9IDI7ICBiZWxvd19wdHIgKz0gMjsKKworICAgIGZvciAoY29sY3RyID0gb3V0cHV0X2NvbHMgLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworICAgICAgLyogc3VtIG9mIHBpeGVscyBkaXJlY3RseSBtYXBwZWQgdG8gdGhpcyBvdXRwdXQgZWxlbWVudCAqLworICAgICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIwKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArCisgICAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOworICAgICAgLyogc3VtIG9mIGVkZ2UtbmVpZ2hib3IgcGl4ZWxzICovCisgICAgICBuZWlnaHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKGFib3ZlX3B0clsxXSkgKworICAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMV0pICsKKyAgICAgICAgICAgICAgICAgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzJdKSArCisgICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoaW5wdHIxWy0xXSkgKyBHRVRKU0FNUExFKGlucHRyMVsyXSk7CisgICAgICAvKiBUaGUgZWRnZS1uZWlnaGJvcnMgY291bnQgdHdpY2UgYXMgbXVjaCBhcyBjb3JuZXItbmVpZ2hib3JzICovCisgICAgICBuZWlnaHN1bSArPSBuZWlnaHN1bTsKKyAgICAgIC8qIEFkZCBpbiB0aGUgY29ybmVyLW5laWdoYm9ycyAqLworICAgICAgbmVpZ2hzdW0gKz0gR0VUSlNBTVBMRShhYm92ZV9wdHJbLTFdKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzJdKSArCisgICAgICAgICAgICAgICAgICBHRVRKU0FNUExFKGJlbG93X3B0clstMV0pICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMl0pOworICAgICAgLyogZm9ybSBmaW5hbCBvdXRwdXQgc2NhbGVkIHVwIGJ5IDJeMTYgKi8KKyAgICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOworICAgICAgLyogcm91bmQsIGRlc2NhbGUgYW5kIG91dHB1dCBpdCAqLworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKChtZW1iZXJzdW0gKyAzMjc2OCkgPj4gMTYpOworICAgICAgaW5wdHIwICs9IDI7ICBpbnB0cjEgKz0gMjsgIGFib3ZlX3B0ciArPSAyOyAgYmVsb3dfcHRyICs9IDI7CisgICAgfQorCisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBsYXN0IGNvbHVtbiAqLworICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsxXSkgKworICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmlucHRyMSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSk7CisgICAgbmVpZ2hzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMV0pICsKKyAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSkgKworICAgICAgICAgICAgICAgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArCisgICAgICAgICAgICAgICBHRVRKU0FNUExFKGlucHRyMVstMV0pICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOworICAgIG5laWdoc3VtICs9IG5laWdoc3VtOworICAgIG5laWdoc3VtICs9IEdFVEpTQU1QTEUoYWJvdmVfcHRyWy0xXSkgKyBHRVRKU0FNUExFKGFib3ZlX3B0clsxXSkgKworICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoYmVsb3dfcHRyWy0xXSkgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSk7CisgICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7CisgICAgKm91dHB0ciA9IChKU0FNUExFKSgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKKworICAgIGlucm93ICs9IDI7CisgIH0KK30KKworCisvKgorICogRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIGZ1bGwtc2l6ZSBjb21wb25lbnQsCisgKiB3aXRoIHNtb290aGluZy4gIE9uZSByb3cgb2YgY29udGV4dCBpcyByZXF1aXJlZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2Z1bGxzaXplX3Ntb290aF9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBpbnQgb3V0cm93OworICBKRElNRU5TSU9OIGNvbGN0cjsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBhYm92ZV9wdHIsIGJlbG93X3B0ciwgb3V0cHRyOworICBKTE9ORyBtZW1iZXJzdW0sIG5laWdoc3VtLCBtZW1iZXJzY2FsZSwgbmVpZ2hzY2FsZTsKKyAgaW50IGNvbHN1bSwgbGFzdGNvbHN1bSwgbmV4dGNvbHN1bTsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEgLSAxLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKyAyLAorICAgICAgICAgICAgICAgICAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzKTsKKworICAvKiBFYWNoIG9mIHRoZSBlaWdodCBuZWlnaGJvciBwaXhlbHMgY29udHJpYnV0ZXMgYSBmcmFjdGlvbiBTRiB0byB0aGUKKyAgICogc21vb3RoZWQgcGl4ZWwsIHdoaWxlIHRoZSBtYWluIHBpeGVsIGNvbnRyaWJ1dGVzICgxLTgqU0YpLiAgSW4gb3JkZXIKKyAgICogdG8gdXNlIGludGVnZXIgYXJpdGhtZXRpYywgdGhlc2UgZmFjdG9ycyBhcmUgbXVsdGlwbGllZCBieSAyXjE2ID0gNjU1MzYuCisgICAqIEFsc28gcmVjYWxsIHRoYXQgU0YgPSBzbW9vdGhpbmdfZmFjdG9yIC8gMTAyNC4KKyAgICovCisKKyAgbWVtYmVyc2NhbGUgPSA2NTUzNkwgLSBjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAqIDUxMkw7IC8qIHNjYWxlZCAxLTgqU0YgKi8KKyAgbmVpZ2hzY2FsZSA9IGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yICogNjQ7IC8qIHNjYWxlZCBTRiAqLworCisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIGlucHRyID0gaW5wdXRfZGF0YVtvdXRyb3ddOworICAgIGFib3ZlX3B0ciA9IGlucHV0X2RhdGFbb3V0cm93IC0gMV07CisgICAgYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtvdXRyb3cgKyAxXTsKKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uICovCisgICAgY29sc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKyspICsgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKyspICsKKyAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cik7CisgICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsKKyAgICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIpOworICAgIG5laWdoc3VtID0gY29sc3VtICsgKGNvbHN1bSAtIG1lbWJlcnN1bSkgKyBuZXh0Y29sc3VtOworICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKKyAgICBsYXN0Y29sc3VtID0gY29sc3VtOyAgY29sc3VtID0gbmV4dGNvbHN1bTsKKworICAgIGZvciAoY29sY3RyID0gb3V0cHV0X2NvbHMgLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworICAgICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICBhYm92ZV9wdHIrKzsgIGJlbG93X3B0cisrOworICAgICAgbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsKKyAgICAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cik7CisgICAgICBuZWlnaHN1bSA9IGxhc3Rjb2xzdW0gKyAoY29sc3VtIC0gbWVtYmVyc3VtKSArIG5leHRjb2xzdW07CisgICAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKKyAgICAgIGxhc3Rjb2xzdW0gPSBjb2xzdW07ICBjb2xzdW0gPSBuZXh0Y29sc3VtOworICAgIH0KKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbGFzdCBjb2x1bW4gKi8KKyAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cik7CisgICAgbmVpZ2hzdW0gPSBsYXN0Y29sc3VtICsgKGNvbHN1bSAtIG1lbWJlcnN1bSkgKyBjb2xzdW07CisgICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7CisgICAgKm91dHB0ciA9IChKU0FNUExFKSgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKKworICB9Cit9CisKKyNlbmRpZiAvKiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVEICovCisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBkb3duc2FtcGxpbmcuCisgKiBOb3RlIHRoYXQgd2UgbXVzdCBzZWxlY3QgYSByb3V0aW5lIGZvciBlYWNoIGNvbXBvbmVudC4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2Rvd25zYW1wbGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9kb3duc2FtcGxlX3B0ciBkb3duc2FtcGxlOworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGJvb2xlYW4gc21vb3Rob2sgPSBUUlVFOworCisgIGRvd25zYW1wbGUgPSAobXlfZG93bnNhbXBsZV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfZG93bnNhbXBsZXIpKTsKKyAgY2luZm8tPmRvd25zYW1wbGUgPSAoc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgKilkb3duc2FtcGxlOworICBkb3duc2FtcGxlLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfZG93bnNhbXBsZTsKKyAgZG93bnNhbXBsZS0+cHViLmRvd25zYW1wbGUgPSBzZXBfZG93bnNhbXBsZTsKKyAgZG93bnNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gRkFMU0U7CisKKyAgaWYgKGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ0NJUjYwMV9OT1RJTVBMKTsKKworICAvKiBWZXJpZnkgd2UgY2FuIGhhbmRsZSB0aGUgc2FtcGxpbmcgZmFjdG9ycywgYW5kIHNldCB1cCBtZXRob2QgcG9pbnRlcnMgKi8KKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKyAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVECisgICAgICBpZiAoY2luZm8tPnNtb290aGluZ19mYWN0b3IpIHsKKyAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBmdWxsc2l6ZV9zbW9vdGhfZG93bnNhbXBsZTsKKyAgICAgICAgZG93bnNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gVFJVRTsKKyAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gZnVsbHNpemVfZG93bnNhbXBsZTsKKyAgICB9IGVsc2UgaWYgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiAyID09IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAmJgorICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgICAgIHNtb290aG9rID0gRkFMU0U7CisgICAgICBpZiAoanNpbWRfY2FuX2gydjFfZG93bnNhbXBsZSgpKQorICAgICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjFfZG93bnNhbXBsZTsKKyAgICAgIGVsc2UKKyAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2Rvd25zYW1wbGU7CisgICAgfSBlbHNlIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKyAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiAyID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKKyAgICAgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvcikgeworI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgICAgIGlmIChqc2ltZF9jYW5faDJ2Ml9zbW9vdGhfZG93bnNhbXBsZSgpKQorICAgICAgICAgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0ganNpbWRfaDJ2Ml9zbW9vdGhfZG93bnNhbXBsZTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX3Ntb290aF9kb3duc2FtcGxlOworICAgICAgICBkb3duc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOworICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgIHsKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUoKSkKKyAgICAgICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjJfZG93bnNhbXBsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9kb3duc2FtcGxlOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAlIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpID09IDAgJiYKKyAgICAgICAgICAgICAgIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSA9PSAwKSB7CisgICAgICBzbW9vdGhvayA9IEZBTFNFOworICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBpbnRfZG93bnNhbXBsZTsKKyAgICB9IGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRlJBQ1RfU0FNUExFX05PVElNUEwpOworICB9CisKKyNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVECisgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAmJiAhc21vb3Rob2spCisgICAgVFJBQ0VNUyhjaW5mbywgMCwgSlRSQ19TTU9PVEhfTk9USU1QTCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjc3Rlc3QuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjc3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjFmZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamNzdGVzdC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIFRoaXMgcHJvZ3JhbSBkZW1vbnN0cmF0ZXMgaG93IHRvIGNoZWNrIGZvciB0aGUgY29sb3JzcGFjZSBleHRlbnNpb24KKyAgIGNhcGFiaWxpdGllcyBvZiBsaWJqcGVnLXR1cmJvIGF0IGJvdGggY29tcGlsZSB0aW1lIGFuZCBydW4gdGltZS4gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8anBlZ2xpYi5oPgorI2luY2x1ZGUgPGplcnJvci5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorCisjaWZuZGVmIEpDU19FWFRFTlNJT05TCisjZGVmaW5lIEpDU19FWFRfUkdCICA2CisjZW5kaWYKKyNpZiAhZGVmaW5lZChKQ1NfRVhURU5TSU9OUykgfHwgIWRlZmluZWQoSkNTX0FMUEhBX0VYVEVOU0lPTlMpCisjZGVmaW5lIEpDU19FWFRfUkdCQSAgMTIKKyNlbmRpZgorCitzdGF0aWMgY2hhciBsYXN0ZXJyb3JbSk1TR19MRU5HVEhfTUFYXSA9ICJObyBlcnJvciI7CisKK3R5cGVkZWYgc3RydWN0IF9lcnJvcl9tZ3IgeworICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgcHViOworICBqbXBfYnVmIGpiOworfSBlcnJvcl9tZ3I7CisKK3N0YXRpYyB2b2lkIG15X2Vycm9yX2V4aXQoal9jb21tb25fcHRyIGNpbmZvKQoreworICBlcnJvcl9tZ3IgKm15ZXJyID0gKGVycm9yX21nciAqKWNpbmZvLT5lcnI7CisgICgqY2luZm8tPmVyci0+b3V0cHV0X21lc3NhZ2UpIChjaW5mbyk7CisgIGxvbmdqbXAobXllcnItPmpiLCAxKTsKK30KKworc3RhdGljIHZvaWQgbXlfb3V0cHV0X21lc3NhZ2Uoal9jb21tb25fcHRyIGNpbmZvKQoreworICAoKmNpbmZvLT5lcnItPmZvcm1hdF9tZXNzYWdlKSAoY2luZm8sIGxhc3RlcnJvcik7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIGludCBqY3NfdmFsaWQgPSAtMSwgamNzX2FscGhhX3ZhbGlkID0gLTE7CisgIHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgZXJyb3JfbWdyIGplcnI7CisKKyAgcHJpbnRmKCJsaWJqcGVnLXR1cmJvIGNvbG9yc3BhY2UgZXh0ZW5zaW9uczpcbiIpOworI2lmIEpDU19FWFRFTlNJT05TCisgIHByaW50ZigiICBQcmVzZW50IGF0IGNvbXBpbGUgdGltZVxuIik7CisjZWxzZQorICBwcmludGYoIiAgTm90IHByZXNlbnQgYXQgY29tcGlsZSB0aW1lXG4iKTsKKyNlbmRpZgorCisgIGNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZqZXJyLnB1Yik7CisgIGplcnIucHViLmVycm9yX2V4aXQgPSBteV9lcnJvcl9leGl0OworICBqZXJyLnB1Yi5vdXRwdXRfbWVzc2FnZSA9IG15X291dHB1dF9tZXNzYWdlOworCisgIGlmIChzZXRqbXAoamVyci5qYikpIHsKKyAgICAvKiB0aGlzIHdpbGwgZXhlY3V0ZSBpZiBsaWJqcGVnIGhhcyBhbiBlcnJvciAqLworICAgIGpjc192YWxpZCA9IDA7CisgICAgZ290byBkb25lOworICB9CisKKyAganBlZ19jcmVhdGVfY29tcHJlc3MoJmNpbmZvKTsKKyAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IDM7CisgIGpwZWdfc2V0X2RlZmF1bHRzKCZjaW5mbyk7CisgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX0VYVF9SR0I7CisgIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlKCZjaW5mbyk7CisgIGpjc192YWxpZCA9IDE7CisKK2RvbmU6CisgIGlmIChqY3NfdmFsaWQpCisgICAgcHJpbnRmKCIgIFdvcmtpbmcgcHJvcGVybHlcbiIpOworICBlbHNlCisgICAgcHJpbnRmKCIgIE5vdCB3b3JraW5nIHByb3Blcmx5LiAgRXJyb3IgcmV0dXJuZWQgd2FzOlxuICAgICVzXG4iLAorICAgICAgICAgICBsYXN0ZXJyb3IpOworCisgIHByaW50ZigibGlianBlZy10dXJibyBhbHBoYSBjb2xvcnNwYWNlIGV4dGVuc2lvbnM6XG4iKTsKKyNpZiBKQ1NfQUxQSEFfRVhURU5TSU9OUworICBwcmludGYoIiAgUHJlc2VudCBhdCBjb21waWxlIHRpbWVcbiIpOworI2Vsc2UKKyAgcHJpbnRmKCIgIE5vdCBwcmVzZW50IGF0IGNvbXBpbGUgdGltZVxuIik7CisjZW5kaWYKKworICBpZiAoc2V0am1wKGplcnIuamIpKSB7CisgICAgLyogdGhpcyB3aWxsIGV4ZWN1dGUgaWYgbGlianBlZyBoYXMgYW4gZXJyb3IgKi8KKyAgICBqY3NfYWxwaGFfdmFsaWQgPSAwOworICAgIGdvdG8gZG9uZTI7CisgIH0KKworICBjaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19FWFRfUkdCQTsKKyAganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UoJmNpbmZvKTsKKyAgamNzX2FscGhhX3ZhbGlkID0gMTsKKworZG9uZTI6CisgIGlmIChqY3NfYWxwaGFfdmFsaWQpCisgICAgcHJpbnRmKCIgIFdvcmtpbmcgcHJvcGVybHlcbiIpOworICBlbHNlCisgICAgcHJpbnRmKCIgIE5vdCB3b3JraW5nIHByb3Blcmx5LiAgRXJyb3IgcmV0dXJuZWQgd2FzOlxuICAgICVzXG4iLAorICAgICAgICAgICBsYXN0ZXJyb3IpOworCisgIGpwZWdfZGVzdHJveV9jb21wcmVzcygmY2luZm8pOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjdHJhbnMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pjdHJhbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTcwYTMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamN0cmFucy5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogamN0cmFucy5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAyMDAwLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIEl0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBjb2RlIHJlbGV2YW50CisgKiB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGxpYnJhcnkgcm91dGluZXMgZm9yIHRyYW5zY29kaW5nIGNvbXByZXNzaW9uLAorICogdGhhdCBpcywgd3JpdGluZyByYXcgRENUIGNvZWZmaWNpZW50IGFycmF5cyB0byBhbiBvdXRwdXQgSlBFRyBmaWxlLgorICogVGhlIHJvdXRpbmVzIGluIGpjYXBpbWluLmMgd2lsbCBhbHNvIGJlIG5lZWRlZCBieSBhIHRyYW5zY29kZXIuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitMT0NBTCh2b2lkKSB0cmFuc2VuY29kZV9tYXN0ZXJfc2VsZWN0aW9uKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5cyk7CitMT0NBTCh2b2lkKSB0cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXIoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqY29lZl9hcnJheXMpOworCisKKy8qCisgKiBDb21wcmVzc2lvbiBpbml0aWFsaXphdGlvbiBmb3Igd3JpdGluZyByYXctY29lZmZpY2llbnQgZGF0YS4KKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMsIGFsbCBwYXJhbWV0ZXJzIGFuZCBhIGRhdGEgZGVzdGluYXRpb24gbXVzdCBiZSBzZXQgdXAuCisgKiBDYWxsIGpwZWdfZmluaXNoX2NvbXByZXNzKCkgdG8gYWN0dWFsbHkgd3JpdGUgdGhlIGRhdGEuCisgKgorICogVGhlIG51bWJlciBvZiBwYXNzZWQgdmlydHVhbCBhcnJheXMgbXVzdCBtYXRjaCBjaW5mby0+bnVtX2NvbXBvbmVudHMuCisgKiBOb3RlIHRoYXQgdGhlIHZpcnR1YWwgYXJyYXlzIG5lZWQgbm90IGJlIGZpbGxlZCBvciBldmVuIHJlYWxpemVkIGF0CisgKiB0aGUgdGltZSB3cml0ZV9jb2VmZmljaWVudHMgaXMgY2FsbGVkOyBpbmRlZWQsIGlmIHRoZSB2aXJ0dWFsIGFycmF5cworICogd2VyZSByZXF1ZXN0ZWQgZnJvbSB0aGlzIGNvbXByZXNzaW9uIG9iamVjdCdzIG1lbW9yeSBtYW5hZ2VyLCB0aGV5CisgKiB0eXBpY2FsbHkgd2lsbCBiZSByZWFsaXplZCBkdXJpbmcgdGhpcyByb3V0aW5lIGFuZCBmaWxsZWQgYWZ0ZXJ3YXJkcy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfd3JpdGVfY29lZmZpY2llbnRzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5cykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIC8qIE1hcmsgYWxsIHRhYmxlcyB0byBiZSB3cml0dGVuICovCisgIGpwZWdfc3VwcHJlc3NfdGFibGVzKGNpbmZvLCBGQUxTRSk7CisgIC8qIChSZSlpbml0aWFsaXplIGVycm9yIG1nciBhbmQgZGVzdGluYXRpb24gbW9kdWxlcyAqLworICAoKmNpbmZvLT5lcnItPnJlc2V0X2Vycm9yX21ncikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAoKmNpbmZvLT5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uKSAoY2luZm8pOworICAvKiBQZXJmb3JtIG1hc3RlciBzZWxlY3Rpb24gb2YgYWN0aXZlIG1vZHVsZXMgKi8KKyAgdHJhbnNlbmNvZGVfbWFzdGVyX3NlbGVjdGlvbihjaW5mbywgY29lZl9hcnJheXMpOworICAvKiBXYWl0IGZvciBqcGVnX2ZpbmlzaF9jb21wcmVzcygpIGNhbGwgKi8KKyAgY2luZm8tPm5leHRfc2NhbmxpbmUgPSAwOyAgICAgLyogc28ganBlZ193cml0ZV9tYXJrZXIgd29ya3MgKi8KKyAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IENTVEFURV9XUkNPRUZTOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMsCisgKiB0aGVuIGNvcHkgZnJvbSB0aGUgc291cmNlIG9iamVjdCBhbGwgcGFyYW1ldGVycyBuZWVkZWQgZm9yIGxvc3NsZXNzCisgKiB0cmFuc2NvZGluZy4gIFBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdmFyaWVkIHdpdGhvdXQgbG9zcyAoc3VjaCBhcworICogc2NhbiBzY3JpcHQgYW5kIEh1ZmZtYW4gb3B0aW1pemF0aW9uKSBhcmUgbGVmdCBpbiB0aGVpciBkZWZhdWx0IHN0YXRlcy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbykKK3sKKyAgSlFVQU5UX1RCTCAqKnF0YmxwdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmluY29tcCwgKm91dGNvbXA7CisgIEpRVUFOVF9UQkwgKmNfcXVhbnQsICpzbG90X3F1YW50OworICBpbnQgdGJsbm8sIGNpLCBjb2VmaTsKKworICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLworICBpZiAoZHN0aW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TVEFSVCkKKyAgICBFUlJFWElUMShkc3RpbmZvLCBKRVJSX0JBRF9TVEFURSwgZHN0aW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgLyogQ29weSBmdW5kYW1lbnRhbCBpbWFnZSBkaW1lbnNpb25zICovCisgIGRzdGluZm8tPmltYWdlX3dpZHRoID0gc3JjaW5mby0+aW1hZ2Vfd2lkdGg7CisgIGRzdGluZm8tPmltYWdlX2hlaWdodCA9IHNyY2luZm8tPmltYWdlX2hlaWdodDsKKyAgZHN0aW5mby0+aW5wdXRfY29tcG9uZW50cyA9IHNyY2luZm8tPm51bV9jb21wb25lbnRzOworICBkc3RpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IHNyY2luZm8tPmpwZWdfY29sb3Jfc3BhY2U7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICBkc3RpbmZvLT5qcGVnX3dpZHRoID0gc3JjaW5mby0+b3V0cHV0X3dpZHRoOworICBkc3RpbmZvLT5qcGVnX2hlaWdodCA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQ7CisgIGRzdGluZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IHNyY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKKyAgZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gc3JjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOworI2VuZGlmCisgIC8qIEluaXRpYWxpemUgYWxsIHBhcmFtZXRlcnMgdG8gZGVmYXVsdCB2YWx1ZXMgKi8KKyAganBlZ19zZXRfZGVmYXVsdHMoZHN0aW5mbyk7CisgIC8qIGpwZWdfc2V0X2RlZmF1bHRzIG1heSBjaG9vc2Ugd3JvbmcgY29sb3JzcGFjZSwgZWcgWUNiQ3IgaWYgaW5wdXQgaXMgUkdCLgorICAgKiBGaXggaXQgdG8gZ2V0IHRoZSByaWdodCBoZWFkZXIgbWFya2VycyBmb3IgdGhlIGltYWdlIGNvbG9yc3BhY2UuCisgICAqLworICBqcGVnX3NldF9jb2xvcnNwYWNlKGRzdGluZm8sIHNyY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpOworICBkc3RpbmZvLT5kYXRhX3ByZWNpc2lvbiA9IHNyY2luZm8tPmRhdGFfcHJlY2lzaW9uOworICBkc3RpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nID0gc3JjaW5mby0+Q0NJUjYwMV9zYW1wbGluZzsKKyAgLyogQ29weSB0aGUgc291cmNlJ3MgcXVhbnRpemF0aW9uIHRhYmxlcy4gKi8KKyAgZm9yICh0YmxubyA9IDA7IHRibG5vIDwgTlVNX1FVQU5UX1RCTFM7IHRibG5vKyspIHsKKyAgICBpZiAoc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dICE9IE5VTEwpIHsKKyAgICAgIHF0YmxwdHIgPSAmZHN0aW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOworICAgICAgaWYgKCpxdGJscHRyID09IE5VTEwpCisgICAgICAgICpxdGJscHRyID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKWRzdGluZm8pOworICAgICAgTUVNQ09QWSgoKnF0YmxwdHIpLT5xdWFudHZhbCwgc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dLT5xdWFudHZhbCwKKyAgICAgICAgICAgICAgc2l6ZW9mKCgqcXRibHB0ciktPnF1YW50dmFsKSk7CisgICAgICAoKnF0YmxwdHIpLT5zZW50X3RhYmxlID0gRkFMU0U7CisgICAgfQorICB9CisgIC8qIENvcHkgdGhlIHNvdXJjZSdzIHBlci1jb21wb25lbnQgaW5mby4KKyAgICogTm90ZSB3ZSBhc3N1bWUganBlZ19zZXRfZGVmYXVsdHMgaGFzIGFsbG9jYXRlZCB0aGUgZGVzdCBjb21wX2luZm8gYXJyYXkuCisgICAqLworICBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9IHNyY2luZm8tPm51bV9jb21wb25lbnRzOworICBpZiAoZHN0aW5mby0+bnVtX2NvbXBvbmVudHMgPCAxIHx8IGRzdGluZm8tPm51bV9jb21wb25lbnRzID4gTUFYX0NPTVBPTkVOVFMpCisgICAgRVJSRVhJVDIoZHN0aW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGRzdGluZm8tPm51bV9jb21wb25lbnRzLAorICAgICAgICAgICAgIE1BWF9DT01QT05FTlRTKTsKKyAgZm9yIChjaSA9IDAsIGluY29tcCA9IHNyY2luZm8tPmNvbXBfaW5mbywgb3V0Y29tcCA9IGRzdGluZm8tPmNvbXBfaW5mbzsKKyAgICAgICBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrLCBpbmNvbXArKywgb3V0Y29tcCsrKSB7CisgICAgb3V0Y29tcC0+Y29tcG9uZW50X2lkID0gaW5jb21wLT5jb21wb25lbnRfaWQ7CisgICAgb3V0Y29tcC0+aF9zYW1wX2ZhY3RvciA9IGluY29tcC0+aF9zYW1wX2ZhY3RvcjsKKyAgICBvdXRjb21wLT52X3NhbXBfZmFjdG9yID0gaW5jb21wLT52X3NhbXBfZmFjdG9yOworICAgIG91dGNvbXAtPnF1YW50X3RibF9ubyA9IGluY29tcC0+cXVhbnRfdGJsX25vOworICAgIC8qIE1ha2Ugc3VyZSBzYXZlZCBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNvbXBvbmVudCBtYXRjaGVzIHRoZSBxdGFibGUKKyAgICAgKiBzbG90LiAgSWYgbm90LCB0aGUgaW5wdXQgZmlsZSByZS11c2VkIHRoaXMgcXRhYmxlIHNsb3QuCisgICAgICogSUpHIGVuY29kZXIgY3VycmVudGx5IGNhbm5vdCBkdXBsaWNhdGUgdGhpcy4KKyAgICAgKi8KKyAgICB0YmxubyA9IG91dGNvbXAtPnF1YW50X3RibF9ubzsKKyAgICBpZiAodGJsbm8gPCAwIHx8IHRibG5vID49IE5VTV9RVUFOVF9UQkxTIHx8CisgICAgICAgIHNyY2luZm8tPnF1YW50X3RibF9wdHJzW3RibG5vXSA9PSBOVUxMKQorICAgICAgRVJSRVhJVDEoZHN0aW5mbywgSkVSUl9OT19RVUFOVF9UQUJMRSwgdGJsbm8pOworICAgIHNsb3RfcXVhbnQgPSBzcmNpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub107CisgICAgY19xdWFudCA9IGluY29tcC0+cXVhbnRfdGFibGU7CisgICAgaWYgKGNfcXVhbnQgIT0gTlVMTCkgeworICAgICAgZm9yIChjb2VmaSA9IDA7IGNvZWZpIDwgRENUU0laRTI7IGNvZWZpKyspIHsKKyAgICAgICAgaWYgKGNfcXVhbnQtPnF1YW50dmFsW2NvZWZpXSAhPSBzbG90X3F1YW50LT5xdWFudHZhbFtjb2VmaV0pCisgICAgICAgICAgRVJSRVhJVDEoZHN0aW5mbywgSkVSUl9NSVNNQVRDSEVEX1FVQU5UX1RBQkxFLCB0Ymxubyk7CisgICAgICB9CisgICAgfQorICAgIC8qIE5vdGU6IHdlIGRvIG5vdCBjb3B5IHRoZSBzb3VyY2UncyBIdWZmbWFuIHRhYmxlIGFzc2lnbm1lbnRzOworICAgICAqIGluc3RlYWQgd2UgcmVseSBvbiBqcGVnX3NldF9jb2xvcnNwYWNlIHRvIGhhdmUgbWFkZSBhIHN1aXRhYmxlIGNob2ljZS4KKyAgICAgKi8KKyAgfQorICAvKiBBbHNvIGNvcHkgSkZJRiB2ZXJzaW9uIGFuZCByZXNvbHV0aW9uIGluZm9ybWF0aW9uLCBpZiBhdmFpbGFibGUuCisgICAqIFN0cmljdGx5IHNwZWFraW5nIHRoaXMgaXNuJ3QgImNyaXRpY2FsIiBpbmZvLCBidXQgaXQncyBuZWFybHkKKyAgICogYWx3YXlzIGFwcHJvcHJpYXRlIHRvIGNvcHkgaXQgaWYgYXZhaWxhYmxlLiAgSW4gcGFydGljdWxhciwKKyAgICogaWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgdG8gY29weSBKRklGIDEuMDIgZXh0ZW5zaW9uIG1hcmtlcnMgZnJvbQorICAgKiB0aGUgc291cmNlIGZpbGUsIHdlIG5lZWQgdG8gY29weSB0aGUgdmVyc2lvbiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QKKyAgICogZW1pdCBhIGZpbGUgdGhhdCBoYXMgMS4wMiBleHRlbnNpb25zIGJ1dCBhIGNsYWltZWQgdmVyc2lvbiBvZiAxLjAxLgorICAgKiBXZSB3aWxsICpub3QqLCBob3dldmVyLCBjb3B5IHZlcnNpb24gaW5mbyBmcm9tIG1pc2xhYmVsZWQgIjIuMDEiIGZpbGVzLgorICAgKi8KKyAgaWYgKHNyY2luZm8tPnNhd19KRklGX21hcmtlcikgeworICAgIGlmIChzcmNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24gPT0gMSkgeworICAgICAgZHN0aW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uID0gc3JjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uOworICAgICAgZHN0aW5mby0+SkZJRl9taW5vcl92ZXJzaW9uID0gc3JjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uOworICAgIH0KKyAgICBkc3RpbmZvLT5kZW5zaXR5X3VuaXQgPSBzcmNpbmZvLT5kZW5zaXR5X3VuaXQ7CisgICAgZHN0aW5mby0+WF9kZW5zaXR5ID0gc3JjaW5mby0+WF9kZW5zaXR5OworICAgIGRzdGluZm8tPllfZGVuc2l0eSA9IHNyY2luZm8tPllfZGVuc2l0eTsKKyAgfQorfQorCisKKy8qCisgKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGNvbXByZXNzaW9uIG1vZHVsZXMgZm9yIHRyYW5zY29kaW5nLgorICogVGhpcyBzdWJzdGl0dXRlcyBmb3IgamNpbml0LmMncyBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnVsbCBjb21wcmVzc29yLgorICovCisKK0xPQ0FMKHZvaWQpCit0cmFuc2VuY29kZV9tYXN0ZXJfc2VsZWN0aW9uKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5cykKK3sKKyAgLyogQWx0aG91Z2ggd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGlucHV0X2NvbXBvbmVudHMgZm9yIHRyYW5zY29kaW5nLAorICAgKiBqY21hc3Rlci5jJ3MgaW5pdGlhbF9zZXR1cCB3aWxsIGNvbXBsYWluIGlmIGlucHV0X2NvbXBvbmVudHMgaXMgMC4KKyAgICovCisgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMTsKKyAgLyogSW5pdGlhbGl6ZSBtYXN0ZXIgY29udHJvbCAoaW5jbHVkZXMgcGFyYW1ldGVyIGNoZWNraW5nL3Byb2Nlc3NpbmcpICovCisgIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIFRSVUUgLyogdHJhbnNjb2RlIG9ubHkgKi8pOworCisgIC8qIEVudHJvcHkgZW5jb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyNpZmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgICBqaW5pdF9hcml0aF9lbmNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9BUklUSF9OT1RJTVBMKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9lbmNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZW5jb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBXZSBuZWVkIGEgc3BlY2lhbCBjb2VmZmljaWVudCBidWZmZXIgY29udHJvbGxlci4gKi8KKyAgdHJhbnNlbmNvZGVfY29lZl9jb250cm9sbGVyKGNpbmZvLCBjb2VmX2FycmF5cyk7CisKKyAgamluaXRfbWFya2VyX3dyaXRlcihjaW5mbyk7CisKKyAgLyogV2UgY2FuIG5vdyB0ZWxsIHRoZSBtZW1vcnkgbWFuYWdlciB0byBhbGxvY2F0ZSB2aXJ0dWFsIGFycmF5cy4gKi8KKyAgKCpjaW5mby0+bWVtLT5yZWFsaXplX3ZpcnRfYXJyYXlzKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisKKyAgLyogV3JpdGUgdGhlIGRhdGFzdHJlYW0gaGVhZGVyIChTT0ksIEpGSUYpIGltbWVkaWF0ZWx5LgorICAgKiBGcmFtZSBhbmQgc2NhbiBoZWFkZXJzIGFyZSBwb3N0cG9uZWQgdGlsbCBsYXRlci4KKyAgICogVGhpcyBsZXRzIGFwcGxpY2F0aW9uIGluc2VydCBzcGVjaWFsIG1hcmtlcnMgYWZ0ZXIgdGhlIFNPSS4KKyAgICovCisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfZmlsZV9oZWFkZXIpIChjaW5mbyk7Cit9CisKKworLyoKKyAqIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyBhIHNwZWNpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvZWZmaWNpZW50CisgKiBidWZmZXIgY29udHJvbGxlci4gIFRoaXMgaXMgc2ltaWxhciB0byBqY2NvZWZjdC5jLCBidXQgaXQgaGFuZGxlcyBvbmx5CisgKiBvdXRwdXQgZnJvbSBwcmVzdXBwbGllZCB2aXJ0dWFsIGFycmF5cy4gIEZ1cnRoZXJtb3JlLCB3ZSBnZW5lcmF0ZSBhbnkKKyAqIGR1bW15IHBhZGRpbmcgYmxvY2tzIG9uLXRoZS1mbHkgcmF0aGVyIHRoYW4gZXhwZWN0aW5nIHRoZW0gdG8gYmUgcHJlc2VudAorICogaW4gdGhlIGFycmF5cy4KKyAqLworCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIEpESU1FTlNJT04gaU1DVV9yb3dfbnVtOyAgICAgIC8qIGlNQ1Ugcm93ICMgd2l0aGluIGltYWdlICovCisgIEpESU1FTlNJT04gbWN1X2N0cjsgICAgICAgICAgIC8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLworICBpbnQgTUNVX3ZlcnRfb2Zmc2V0OyAgICAgICAgICAvKiBjb3VudHMgTUNVIHJvd3Mgd2l0aGluIGlNQ1Ugcm93ICovCisgIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7ICAgIC8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovCisKKyAgLyogVmlydHVhbCBibG9jayBhcnJheSBmb3IgZWFjaCBjb21wb25lbnQuICovCisgIGp2aXJ0X2JhcnJheV9wdHIgKndob2xlX2ltYWdlOworCisgIC8qIFdvcmtzcGFjZSBmb3IgY29uc3RydWN0aW5nIGR1bW15IGJsb2NrcyBhdCByaWdodC9ib3R0b20gZWRnZXMuICovCisgIEpCTE9DS1JPVyBkdW1teV9idWZmZXJbQ19NQVhfQkxPQ0tTX0lOX01DVV07Cit9IG15X2NvZWZfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9jb2VmX2NvbnRyb2xsZXIgKm15X2NvZWZfcHRyOworCisKK0xPQ0FMKHZvaWQpCitzdGFydF9pTUNVX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIFJlc2V0IHdpdGhpbi1pTUNVLXJvdyBjb3VudGVycyBmb3IgYSBuZXcgcm93ICovCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisKKyAgLyogSW4gYW4gaW50ZXJsZWF2ZWQgc2NhbiwgYW4gTUNVIHJvdyBpcyB0aGUgc2FtZSBhcyBhbiBpTUNVIHJvdy4KKyAgICogSW4gYSBub25pbnRlcmxlYXZlZCBzY2FuLCBhbiBpTUNVIHJvdyBoYXMgdl9zYW1wX2ZhY3RvciBNQ1Ugcm93cy4KKyAgICogQnV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLCBwcm9jZXNzIG9ubHkgd2hhdCdzIGxlZnQuCisgICAqLworICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPiAxKSB7CisgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgKGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxKSkKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT52X3NhbXBfZmFjdG9yOworICAgIGVsc2UKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5sYXN0X3Jvd19oZWlnaHQ7CisgIH0KKworICBjb2VmLT5tY3VfY3RyID0gMDsKKyAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0gMDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2NvZWYoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKWNpbmZvLT5jb2VmOworCisgIGlmIChwYXNzX21vZGUgIT0gSkJVRl9DUkFOS19ERVNUKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKKworICBjb2VmLT5pTUNVX3Jvd19udW0gPSAwOworICBzdGFydF9pTUNVX3JvdyhjaW5mbyk7Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhLgorICogV2UgcHJvY2VzcyB0aGUgZXF1aXZhbGVudCBvZiBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykKKyAqIHBlciBjYWxsLCBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgc2Nhbi4KKyAqIFRoZSBkYXRhIGlzIG9idGFpbmVkIGZyb20gdGhlIHZpcnR1YWwgYXJyYXlzIGFuZCBmZWQgdG8gdGhlIGVudHJvcHkgY29kZXIuCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGlNQ1Ugcm93IGlzIGNvbXBsZXRlZCwgRkFMU0UgaWYgc3VzcGVuZGVkLgorICoKKyAqIE5COiBpbnB1dF9idWYgaXMgaWdub3JlZDsgaXQgaXMgbGlrZWx5IHRvIGJlIGEgTlVMTCBwb2ludGVyLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorY29tcHJlc3Nfb3V0cHV0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikKK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0ciljaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBKRElNRU5TSU9OIGxhc3RfTUNVX2NvbCA9IGNpbmZvLT5NQ1VzX3Blcl9yb3cgLSAxOworICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKKyAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldCwgYmxvY2tjbnQ7CisgIEpESU1FTlNJT04gc3RhcnRfY29sOworICBKQkxPQ0tBUlJBWSBidWZmZXJbTUFYX0NPTVBTX0lOX1NDQU5dOworICBKQkxPQ0tST1cgTUNVX2J1ZmZlcltDX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBidWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwKKyAgICAgICBjb2VmLT5pTUNVX3Jvd19udW0gKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgfQorCisgIC8qIExvb3AgdG8gcHJvY2VzcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8KKyAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OworICAgICAgIHlvZmZzZXQrKykgeworICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5tY3VfY3RyOyBNQ1VfY29sX251bSA8IGNpbmZvLT5NQ1VzX3Blcl9yb3c7CisgICAgICAgICBNQ1VfY29sX251bSsrKSB7CisgICAgICAvKiBDb25zdHJ1Y3QgbGlzdCBvZiBwb2ludGVycyB0byBEQ1QgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGlzIE1DVSAqLworICAgICAgYmxrbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgICBzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKyAgICAgICAgYmxvY2tjbnQgPSAoTUNVX2NvbF9udW0gPCBsYXN0X01DVV9jb2wpID8gY29tcHB0ci0+TUNVX3dpZHRoIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+bGFzdF9jb2xfd2lkdGg7CisgICAgICAgIGZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsKKyAgICAgICAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgbGFzdF9pTUNVX3JvdyB8fAorICAgICAgICAgICAgICB5aW5kZXggKyB5b2Zmc2V0IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7CisgICAgICAgICAgICAvKiBGaWxsIGluIHBvaW50ZXJzIHRvIHJlYWwgYmxvY2tzIGluIHRoaXMgcm93ICovCisgICAgICAgICAgICBidWZmZXJfcHRyID0gYnVmZmVyW2NpXVt5aW5kZXggKyB5b2Zmc2V0XSArIHN0YXJ0X2NvbDsKKyAgICAgICAgICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgYmxvY2tjbnQ7IHhpbmRleCsrKQorICAgICAgICAgICAgICBNQ1VfYnVmZmVyW2Jsa24rK10gPSBidWZmZXJfcHRyKys7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIEF0IGJvdHRvbSBvZiBpbWFnZSwgbmVlZCBhIHdob2xlIHJvdyBvZiBkdW1teSBibG9ja3MgKi8KKyAgICAgICAgICAgIHhpbmRleCA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIEZpbGwgaW4gYW55IGR1bW15IGJsb2NrcyBuZWVkZWQgaW4gdGhpcyByb3cuCisgICAgICAgICAgICogRHVtbXkgYmxvY2tzIGFyZSBmaWxsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGluIGpjY29lZmN0LmM6CisgICAgICAgICAgICogYWxsIHplcm9lcyBpbiB0aGUgQUMgZW50cmllcywgREMgZW50cmllcyBlcXVhbCB0byBwcmV2aW91cworICAgICAgICAgICAqIGJsb2NrJ3MgREMgdmFsdWUuICBUaGUgaW5pdCByb3V0aW5lIGhhcyBhbHJlYWR5IHplcm9lZCB0aGUKKyAgICAgICAgICAgKiBBQyBlbnRyaWVzLCBzbyB3ZSBuZWVkIG9ubHkgc2V0IHRoZSBEQyBlbnRyaWVzIGNvcnJlY3RseS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBmb3IgKDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgeworICAgICAgICAgICAgTUNVX2J1ZmZlcltibGtuXSA9IGNvZWYtPmR1bW15X2J1ZmZlcltibGtuXTsKKyAgICAgICAgICAgIE1DVV9idWZmZXJbYmxrbl1bMF1bMF0gPSBNQ1VfYnVmZmVyW2Jsa24gLSAxXVswXVswXTsKKyAgICAgICAgICAgIGJsa24rKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIFRyeSB0byB3cml0ZSB0aGUgTUNVLiAqLworICAgICAgaWYgKCEoKmNpbmZvLT5lbnRyb3B5LT5lbmNvZGVfbWN1KSAoY2luZm8sIE1DVV9idWZmZXIpKSB7CisgICAgICAgIC8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KKyAgICAgICAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsKKyAgICAgICAgY29lZi0+bWN1X2N0ciA9IE1DVV9jb2xfbnVtOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgfQorICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8KKyAgICBjb2VmLT5tY3VfY3RyID0gMDsKKyAgfQorICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLworICBjb2VmLT5pTUNVX3Jvd19udW0rKzsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSBjb2VmZmljaWVudCBidWZmZXIgY29udHJvbGxlci4KKyAqCisgKiBFYWNoIHBhc3NlZCBjb2VmZmljaWVudCBhcnJheSBtdXN0IGJlIHRoZSByaWdodCBzaXplIGZvciB0aGF0CisgKiBjb2VmZmljaWVudDogd2lkdGhfaW5fYmxvY2tzIHdpZGUgYW5kIGhlaWdodF9pbl9ibG9ja3MgaGlnaCwKKyAqIHdpdGggdW5pdGhlaWdodCBhdCBsZWFzdCB2X3NhbXBfZmFjdG9yLgorICovCisKK0xPQ0FMKHZvaWQpCit0cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXIoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqY29lZl9hcnJheXMpCit7CisgIG15X2NvZWZfcHRyIGNvZWY7CisgIEpCTE9DS1JPVyBidWZmZXI7CisgIGludCBpOworCisgIGNvZWYgPSAobXlfY29lZl9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfY29lZl9jb250cm9sbGVyKSk7CisgIGNpbmZvLT5jb2VmID0gKHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyICopY29lZjsKKyAgY29lZi0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2NvZWY7CisgIGNvZWYtPnB1Yi5jb21wcmVzc19kYXRhID0gY29tcHJlc3Nfb3V0cHV0OworCisgIC8qIFNhdmUgcG9pbnRlciB0byB2aXJ0dWFsIGFycmF5cyAqLworICBjb2VmLT53aG9sZV9pbWFnZSA9IGNvZWZfYXJyYXlzOworCisgIC8qIEFsbG9jYXRlIGFuZCBwcmUtemVybyBzcGFjZSBmb3IgZHVtbXkgRENUIGJsb2Nrcy4gKi8KKyAgYnVmZmVyID0gKEpCTE9DS1JPVykKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfTUFYX0JMT0NLU19JTl9NQ1UgKiBzaXplb2YoSkJMT0NLKSk7CisgIGp6ZXJvX2Zhcigodm9pZCAqKWJ1ZmZlciwgQ19NQVhfQkxPQ0tTX0lOX01DVSAqIHNpemVvZihKQkxPQ0spKTsKKyAgZm9yIChpID0gMDsgaSA8IENfTUFYX0JMT0NLU19JTl9NQ1U7IGkrKykgeworICAgIGNvZWYtPmR1bW15X2J1ZmZlcltpXSA9IGJ1ZmZlciArIGk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkYXBpbWluLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGFwaW1pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTQxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGFwaW1pbi5jCkBAIC0wLDAgKzEsNDA3IEBACisvKgorICogamRhcGltaW4uYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBkZWNvbXByZXNzaW9uIGhhbGYKKyAqIG9mIHRoZSBKUEVHIGxpYnJhcnkuICBUaGVzZSBhcmUgdGhlICJtaW5pbXVtIiBBUEkgcm91dGluZXMgdGhhdCBtYXkgYmUKKyAqIG5lZWRlZCBpbiBlaXRoZXIgdGhlIG5vcm1hbCBmdWxsLWRlY29tcHJlc3Npb24gY2FzZSBvciB0aGUKKyAqIHRyYW5zY29kaW5nLW9ubHkgY2FzZS4KKyAqCisgKiBNb3N0IG9mIHRoZSByb3V0aW5lcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgYW4gYXBwbGljYXRpb24KKyAqIGFyZSBpbiB0aGlzIGZpbGUgb3IgaW4gamRhcGlzdGQuYy4gIEJ1dCBhbHNvIHNlZSBqY29tYXBpLmMgZm9yIHJvdXRpbmVzCisgKiBzaGFyZWQgYnkgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24sIGFuZCBqZHRyYW5zLmMgZm9yIHRoZSB0cmFuc2NvZGluZworICogY2FzZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRtYXN0ZXIuaCIKKworCisvKgorICogSW5pdGlhbGl6YXRpb24gb2YgYSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0LgorICogVGhlIGVycm9yIG1hbmFnZXIgbXVzdCBhbHJlYWR5IGJlIHNldCB1cCAoaW4gY2FzZSBtZW1vcnkgbWFuYWdlciBmYWlscykuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX0NyZWF0ZURlY29tcHJlc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKQoreworICBpbnQgaTsKKworICAvKiBHdWFyZCBhZ2FpbnN0IHZlcnNpb24gbWlzbWF0Y2hlcyBiZXR3ZWVuIGxpYnJhcnkgYW5kIGNhbGxlci4gKi8KKyAgY2luZm8tPm1lbSA9IE5VTEw7ICAgICAgICAgICAgLyogc28ganBlZ19kZXN0cm95IGtub3dzIG1lbSBtZ3Igbm90IGNhbGxlZCAqLworICBpZiAodmVyc2lvbiAhPSBKUEVHX0xJQl9WRVJTSU9OKQorICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0JBRF9MSUJfVkVSU0lPTiwgSlBFR19MSUJfVkVSU0lPTiwgdmVyc2lvbik7CisgIGlmIChzdHJ1Y3RzaXplICE9IHNpemVvZihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCkpCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX1NUUlVDVF9TSVpFLAorICAgICAgICAgICAgIChpbnQpc2l6ZW9mKHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KSwgKGludClzdHJ1Y3RzaXplKTsKKworICAvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB3ZSB6ZXJvIHRoZSB3aG9sZSBtYXN0ZXIgc3RydWN0dXJlLgorICAgKiBCdXQgdGhlIGFwcGxpY2F0aW9uIGhhcyBhbHJlYWR5IHNldCB0aGUgZXJyIHBvaW50ZXIsIGFuZCBtYXkgaGF2ZSBzZXQKKyAgICogY2xpZW50X2RhdGEsIHNvIHdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aG9zZSBmaWVsZHMuCisgICAqIE5vdGU6IGlmIGFwcGxpY2F0aW9uIGhhc24ndCBzZXQgY2xpZW50X2RhdGEsIHRvb2xzIGxpa2UgUHVyaWZ5IG1heQorICAgKiBjb21wbGFpbiBoZXJlLgorICAgKi8KKyAgeworICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciAqZXJyID0gY2luZm8tPmVycjsKKyAgICB2b2lkICpjbGllbnRfZGF0YSA9IGNpbmZvLT5jbGllbnRfZGF0YTsgLyogaWdub3JlIFB1cmlmeSBjb21wbGFpbnQgaGVyZSAqLworICAgIE1FTVpFUk8oY2luZm8sIHNpemVvZihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCkpOworICAgIGNpbmZvLT5lcnIgPSBlcnI7CisgICAgY2luZm8tPmNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7CisgIH0KKyAgY2luZm8tPmlzX2RlY29tcHJlc3NvciA9IFRSVUU7CisKKyAgLyogSW5pdGlhbGl6ZSBhIG1lbW9yeSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIG9iamVjdCAqLworICBqaW5pdF9tZW1vcnlfbWdyKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIC8qIFplcm8gb3V0IHBvaW50ZXJzIHRvIHBlcm1hbmVudCBzdHJ1Y3R1cmVzLiAqLworICBjaW5mby0+cHJvZ3Jlc3MgPSBOVUxMOworICBjaW5mby0+c3JjID0gTlVMTDsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykKKyAgICBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gPSBOVUxMOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSA9IE5VTEw7CisgICAgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gPSBOVUxMOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBtYXJrZXIgcHJvY2Vzc29yIHNvIGFwcGxpY2F0aW9uIGNhbiBvdmVycmlkZSBtZXRob2RzCisgICAqIGZvciBDT00sIEFQUG4gbWFya2VycyBiZWZvcmUgY2FsbGluZyBqcGVnX3JlYWRfaGVhZGVyLgorICAgKi8KKyAgY2luZm8tPm1hcmtlcl9saXN0ID0gTlVMTDsKKyAgamluaXRfbWFya2VyX3JlYWRlcihjaW5mbyk7CisKKyAgLyogQW5kIGluaXRpYWxpemUgdGhlIG92ZXJhbGwgaW5wdXQgY29udHJvbGxlci4gKi8KKyAgamluaXRfaW5wdXRfY29udHJvbGxlcihjaW5mbyk7CisKKyAgLyogT0ssIEknbSByZWFkeSAqLworICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1NUQVJUOworCisgIC8qIFRoZSBtYXN0ZXIgc3RydWN0IGlzIHVzZWQgdG8gc3RvcmUgZXh0ZW5zaW9uIHBhcmFtZXRlcnMsIHNvIHdlIGFsbG9jYXRlIGl0CisgICAqIGhlcmUuCisgICAqLworICBjaW5mby0+bWFzdGVyID0gKHN0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfZGVjb21wX21hc3RlcikpOworICBNRU1aRVJPKGNpbmZvLT5tYXN0ZXIsIHNpemVvZihteV9kZWNvbXBfbWFzdGVyKSk7Cit9CisKKworLyoKKyAqIERlc3RydWN0aW9uIG9mIGEgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdAorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19kZXN0cm95X2RlY29tcHJlc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAganBlZ19kZXN0cm95KChqX2NvbW1vbl9wdHIpY2luZm8pOyAvKiB1c2UgY29tbW9uIHJvdXRpbmUgKi8KK30KKworCisvKgorICogQWJvcnQgcHJvY2Vzc2luZyBvZiBhIEpQRUcgZGVjb21wcmVzc2lvbiBvcGVyYXRpb24sCisgKiBidXQgZG9uJ3QgZGVzdHJveSB0aGUgb2JqZWN0IGl0c2VsZi4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfYWJvcnRfZGVjb21wcmVzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBqcGVnX2Fib3J0KChqX2NvbW1vbl9wdHIpY2luZm8pOyAvKiB1c2UgY29tbW9uIHJvdXRpbmUgKi8KK30KKworCisvKgorICogU2V0IGRlZmF1bHQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLgorICovCisKK0xPQ0FMKHZvaWQpCitkZWZhdWx0X2RlY29tcHJlc3NfcGFybXMoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogR3Vlc3MgdGhlIGlucHV0IGNvbG9yc3BhY2UsIGFuZCBzZXQgb3V0cHV0IGNvbG9yc3BhY2UgYWNjb3JkaW5nbHkuICovCisgIC8qIChXaXNoIEpQRUcgY29tbWl0dGVlIGhhZCBwcm92aWRlZCBhIHJlYWwgd2F5IHRvIHNwZWNpZnkgdGhpcy4uLikgKi8KKyAgLyogTm90ZSBhcHBsaWNhdGlvbiBtYXkgb3ZlcnJpZGUgb3VyIGd1ZXNzZXMuICovCisgIHN3aXRjaCAoY2luZm8tPm51bV9jb21wb25lbnRzKSB7CisgIGNhc2UgMToKKyAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19HUkFZU0NBTEU7CisgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9IEpDU19HUkFZU0NBTEU7CisgICAgYnJlYWs7CisKKyAgY2FzZSAzOgorICAgIGlmIChjaW5mby0+c2F3X0pGSUZfbWFya2VyKSB7CisgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogSkZJRiBpbXBsaWVzIFlDYkNyICovCisgICAgfSBlbHNlIGlmIChjaW5mby0+c2F3X0Fkb2JlX21hcmtlcikgeworICAgICAgc3dpdGNoIChjaW5mby0+QWRvYmVfdHJhbnNmb3JtKSB7CisgICAgICBjYXNlIDA6CisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDE6CisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFdBUk5NUzEoY2luZm8sIEpXUk5fQURPQkVfWEZPUk0sIGNpbmZvLT5BZG9iZV90cmFuc2Zvcm0pOworICAgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogYXNzdW1lIGl0J3MgWUNiQ3IgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIFNhdyBubyBzcGVjaWFsIG1hcmtlcnMsIHRyeSB0byBndWVzcyBmcm9tIHRoZSBjb21wb25lbnQgSURzICovCisgICAgICBpbnQgY2lkMCA9IGNpbmZvLT5jb21wX2luZm9bMF0uY29tcG9uZW50X2lkOworICAgICAgaW50IGNpZDEgPSBjaW5mby0+Y29tcF9pbmZvWzFdLmNvbXBvbmVudF9pZDsKKyAgICAgIGludCBjaWQyID0gY2luZm8tPmNvbXBfaW5mb1syXS5jb21wb25lbnRfaWQ7CisKKyAgICAgIGlmIChjaWQwID09IDEgJiYgY2lkMSA9PSAyICYmIGNpZDIgPT0gMykKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIGFzc3VtZSBKRklGIHcvb3V0IG1hcmtlciAqLworICAgICAgZWxzZSBpZiAoY2lkMCA9PSA4MiAmJiBjaWQxID09IDcxICYmIGNpZDIgPT0gNjYpCisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgLyogQVNDSUkgJ1InLCAnRycsICdCJyAqLworICAgICAgZWxzZSB7CisgICAgICAgIFRSQUNFTVMzKGNpbmZvLCAxLCBKVFJDX1VOS05PV05fSURTLCBjaWQwLCBjaWQxLCBjaWQyKTsKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIGFzc3VtZSBpdCdzIFlDYkNyICovCisgICAgICB9CisgICAgfQorICAgIC8qIEFsd2F5cyBndWVzcyBSR0IgaXMgcHJvcGVyIG91dHB1dCBjb2xvcnNwYWNlLiAqLworICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworICAgIGJyZWFrOworCisgIGNhc2UgNDoKKyAgICBpZiAoY2luZm8tPnNhd19BZG9iZV9tYXJrZXIpIHsKKyAgICAgIHN3aXRjaCAoY2luZm8tPkFkb2JlX3RyYW5zZm9ybSkgeworICAgICAgY2FzZSAwOgorICAgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19DTVlLOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNDSzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBXQVJOTVMxKGNpbmZvLCBKV1JOX0FET0JFX1hGT1JNLCBjaW5mby0+QWRvYmVfdHJhbnNmb3JtKTsKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNDSzsgLyogYXNzdW1lIGl0J3MgWUNDSyAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogTm8gc3BlY2lhbCBtYXJrZXJzLCBhc3N1bWUgc3RyYWlnaHQgQ01ZSy4gKi8KKyAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7CisgICAgfQorICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfQ01ZSzsKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1VOS05PV047CisgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9IEpDU19VTktOT1dOOworICAgIGJyZWFrOworICB9CisKKyAgLyogU2V0IGRlZmF1bHRzIGZvciBvdGhlciBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICovCisgIGNpbmZvLT5zY2FsZV9udW0gPSAxOyAgICAgICAgIC8qIDE6MSBzY2FsaW5nICovCisgIGNpbmZvLT5zY2FsZV9kZW5vbSA9IDE7CisgIGNpbmZvLT5vdXRwdXRfZ2FtbWEgPSAxLjA7CisgIGNpbmZvLT5idWZmZXJlZF9pbWFnZSA9IEZBTFNFOworICBjaW5mby0+cmF3X2RhdGFfb3V0ID0gRkFMU0U7CisgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9ERUZBVUxUOworICBjaW5mby0+ZG9fZmFuY3lfdXBzYW1wbGluZyA9IFRSVUU7CisgIGNpbmZvLT5kb19ibG9ja19zbW9vdGhpbmcgPSBUUlVFOworICBjaW5mby0+cXVhbnRpemVfY29sb3JzID0gRkFMU0U7CisgIC8qIFdlIHNldCB0aGVzZSBpbiBjYXNlIGFwcGxpY2F0aW9uIG9ubHkgc2V0cyBxdWFudGl6ZV9jb2xvcnMuICovCisgIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfRlM7CisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECisgIGNpbmZvLT50d29fcGFzc19xdWFudGl6ZSA9IFRSVUU7CisjZWxzZQorICBjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgPSBGQUxTRTsKKyNlbmRpZgorICBjaW5mby0+ZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzID0gMjU2OworICBjaW5mby0+Y29sb3JtYXAgPSBOVUxMOworICAvKiBJbml0aWFsaXplIGZvciBubyBtb2RlIGNoYW5nZSBpbiBidWZmZXJlZC1pbWFnZSBtb2RlLiAqLworICBjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50ID0gRkFMU0U7CisgIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgPSBGQUxTRTsKKyAgY2luZm8tPmVuYWJsZV8ycGFzc19xdWFudCA9IEZBTFNFOworfQorCisKKy8qCisgKiBEZWNvbXByZXNzaW9uIHN0YXJ0dXA6IHJlYWQgc3RhcnQgb2YgSlBFRyBkYXRhc3RyZWFtIHRvIHNlZSB3aGF0J3MgdGhlcmUuCisgKiBOZWVkIG9ubHkgaW5pdGlhbGl6ZSBKUEVHIG9iamVjdCBhbmQgc3VwcGx5IGEgZGF0YSBzb3VyY2UgYmVmb3JlIGNhbGxpbmcuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgcmVhZCBhcyBmYXIgYXMgdGhlIGZpcnN0IFNPUyBtYXJrZXIgKGllLCBhY3R1YWwgc3RhcnQgb2YKKyAqIGNvbXByZXNzZWQgZGF0YSksIGFuZCB3aWxsIHNhdmUgYWxsIHRhYmxlcyBhbmQgcGFyYW1ldGVycyBpbiB0aGUgSlBFRworICogb2JqZWN0LiAgSXQgd2lsbCBhbHNvIGluaXRpYWxpemUgdGhlIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyB0byBkZWZhdWx0CisgKiB2YWx1ZXMsIGFuZCBmaW5hbGx5IHJldHVybiBKUEVHX0hFQURFUl9PSy4gIE9uIHJldHVybiwgdGhlIGFwcGxpY2F0aW9uIG1heQorICogYWRqdXN0IHRoZSBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYW5kIHRoZW4gY2FsbCBqcGVnX3N0YXJ0X2RlY29tcHJlc3MuCisgKiAoT3IsIGlmIHRoZSBhcHBsaWNhdGlvbiBvbmx5IHdhbnRlZCB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHBhcmFtZXRlcnMsCisgKiB0aGUgZGF0YSBuZWVkIG5vdCBiZSBkZWNvbXByZXNzZWQuICBJbiB0aGF0IGNhc2UsIGNhbGwganBlZ19hYm9ydCBvcgorICoganBlZ19kZXN0cm95IHRvIHJlbGVhc2UgYW55IHRlbXBvcmFyeSBzcGFjZS4pCisgKiBJZiBhbiBhYmJyZXZpYXRlZCAodGFibGVzIG9ubHkpIGRhdGFzdHJlYW0gaXMgcHJlc2VudGVkLCB0aGUgcm91dGluZSB3aWxsCisgKiByZXR1cm4gSlBFR19IRUFERVJfVEFCTEVTX09OTFkgdXBvbiByZWFjaGluZyBFT0kuICBUaGUgYXBwbGljYXRpb24gbWF5IHRoZW4KKyAqIHJlLXVzZSB0aGUgSlBFRyBvYmplY3QgdG8gcmVhZCB0aGUgYWJicmV2aWF0ZWQgaW1hZ2UgZGF0YXN0cmVhbShzKS4KKyAqIEl0IGlzIHVubmVjZXNzYXJ5IChidXQgT0spIHRvIGNhbGwganBlZ19hYm9ydCBpbiB0aGlzIGNhc2UuCisgKiBUaGUgSlBFR19TVVNQRU5ERUQgcmV0dXJuIGNvZGUgb25seSBvY2N1cnMgaWYgdGhlIGRhdGEgc291cmNlIG1vZHVsZQorICogcmVxdWVzdHMgc3VzcGVuc2lvbiBvZiB0aGUgZGVjb21wcmVzc29yLiAgSW4gdGhpcyBjYXNlIHRoZSBhcHBsaWNhdGlvbgorICogc2hvdWxkIGxvYWQgbW9yZSBzb3VyY2UgZGF0YSBhbmQgdGhlbiByZS1jYWxsIGpwZWdfcmVhZF9oZWFkZXIgdG8gcmVzdW1lCisgKiBwcm9jZXNzaW5nLgorICogSWYgYSBub24tc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBpcyB1c2VkIGFuZCByZXF1aXJlX2ltYWdlIGlzIFRSVUUsIHRoZW4gdGhlCisgKiByZXR1cm4gY29kZSBuZWVkIG5vdCBiZSBpbnNwZWN0ZWQgc2luY2Ugb25seSBKUEVHX0hFQURFUl9PSyBpcyBwb3NzaWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgbm93IGp1c3QgYSBmcm9udCBlbmQgdG8ganBlZ19jb25zdW1lX2lucHV0LCB3aXRoIHNvbWUKKyAqIGV4dHJhIGVycm9yIGNoZWNraW5nLgorICovCisKK0dMT0JBTChpbnQpCitqcGVnX3JlYWRfaGVhZGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gcmVxdWlyZV9pbWFnZSkKK3sKKyAgaW50IHJldGNvZGU7CisKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1NUQVJUICYmCisgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9JTkhFQURFUikKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworCisgIHJldGNvZGUgPSBqcGVnX2NvbnN1bWVfaW5wdXQoY2luZm8pOworCisgIHN3aXRjaCAocmV0Y29kZSkgeworICBjYXNlIEpQRUdfUkVBQ0hFRF9TT1M6CisgICAgcmV0Y29kZSA9IEpQRUdfSEVBREVSX09LOworICAgIGJyZWFrOworICBjYXNlIEpQRUdfUkVBQ0hFRF9FT0k6CisgICAgaWYgKHJlcXVpcmVfaW1hZ2UpICAgICAgICAgIC8qIENvbXBsYWluIGlmIGFwcGxpY2F0aW9uIHdhbnRlZCBhbiBpbWFnZSAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT19JTUFHRSk7CisgICAgLyogUmVzZXQgdG8gc3RhcnQgc3RhdGU7IGl0IHdvdWxkIGJlIHNhZmVyIHRvIHJlcXVpcmUgdGhlIGFwcGxpY2F0aW9uIHRvCisgICAgICogY2FsbCBqcGVnX2Fib3J0LCBidXQgd2UgY2FuJ3QgY2hhbmdlIGl0IG5vdyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorICAgICAqIEEgc2lkZSBlZmZlY3QgaXMgdG8gZnJlZSBhbnkgdGVtcG9yYXJ5IG1lbW9yeSAodGhlcmUgc2hvdWxkbid0IGJlIGFueSkuCisgICAgICovCisgICAganBlZ19hYm9ydCgoal9jb21tb25fcHRyKWNpbmZvKTsgLyogc2V0cyBzdGF0ZSA9IERTVEFURV9TVEFSVCAqLworICAgIHJldGNvZGUgPSBKUEVHX0hFQURFUl9UQUJMRVNfT05MWTsKKyAgICBicmVhazsKKyAgY2FzZSBKUEVHX1NVU1BFTkRFRDoKKyAgICAvKiBubyB3b3JrICovCisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmV0Y29kZTsKK30KKworCisvKgorICogQ29uc3VtZSBkYXRhIGluIGFkdmFuY2Ugb2Ygd2hhdCB0aGUgZGVjb21wcmVzc29yIHJlcXVpcmVzLgorICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIG9uY2UgdGhlIGRlY29tcHJlc3NvciBvYmplY3QgaGFzCisgKiBiZWVuIGNyZWF0ZWQgYW5kIGEgZGF0YSBzb3VyY2UgaGFzIGJlZW4gc2V0IHVwLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBlc3NlbnRpYWxseSBhIHN0YXRlIG1hY2hpbmUgdGhhdCBoYW5kbGVzIGEgY291cGxlCisgKiBvZiBjcml0aWNhbCBzdGF0ZS10cmFuc2l0aW9uIGFjdGlvbnMsIG5hbWVseSBpbml0aWFsIHNldHVwIGFuZAorICogdHJhbnNpdGlvbiBmcm9tIGhlYWRlciBzY2FubmluZyB0byByZWFkeS1mb3Itc3RhcnRfZGVjb21wcmVzcy4KKyAqIEFsbCB0aGUgYWN0dWFsIGlucHV0IGlzIGRvbmUgdmlhIHRoZSBpbnB1dCBjb250cm9sbGVyJ3MgY29uc3VtZV9pbnB1dAorICogbWV0aG9kLgorICovCisKK0dMT0JBTChpbnQpCitqcGVnX2NvbnN1bWVfaW5wdXQoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaW50IHJldGNvZGUgPSBKUEVHX1NVU1BFTkRFRDsKKworICAvKiBOQjogZXZlcnkgcG9zc2libGUgRFNUQVRFIHZhbHVlIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhpcyBzd2l0Y2ggKi8KKyAgc3dpdGNoIChjaW5mby0+Z2xvYmFsX3N0YXRlKSB7CisgIGNhc2UgRFNUQVRFX1NUQVJUOgorICAgIC8qIFN0YXJ0LW9mLWRhdGFzdHJlYW0gYWN0aW9uczogcmVzZXQgYXBwcm9wcmlhdGUgbW9kdWxlcyAqLworICAgICgqY2luZm8tPmlucHV0Y3RsLT5yZXNldF9pbnB1dF9jb250cm9sbGVyKSAoY2luZm8pOworICAgIC8qIEluaXRpYWxpemUgYXBwbGljYXRpb24ncyBkYXRhIHNvdXJjZSBtb2R1bGUgKi8KKyAgICAoKmNpbmZvLT5zcmMtPmluaXRfc291cmNlKSAoY2luZm8pOworICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfSU5IRUFERVI7CisgICAgLypGQUxMVEhST1VHSCovCisgIGNhc2UgRFNUQVRFX0lOSEVBREVSOgorICAgIHJldGNvZGUgPSAoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKTsKKyAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfU09TKSB7IC8qIEZvdW5kIFNPUywgcHJlcGFyZSB0byBkZWNvbXByZXNzICovCisgICAgICAvKiBTZXQgdXAgZGVmYXVsdCBwYXJhbWV0ZXJzIGJhc2VkIG9uIGhlYWRlciBkYXRhICovCisgICAgICBkZWZhdWx0X2RlY29tcHJlc3NfcGFybXMoY2luZm8pOworICAgICAgLyogU2V0IGdsb2JhbCBzdGF0ZTogcmVhZHkgZm9yIHN0YXJ0X2RlY29tcHJlc3MgKi8KKyAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfUkVBRFk7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIERTVEFURV9SRUFEWToKKyAgICAvKiBDYW4ndCBhZHZhbmNlIHBhc3QgZmlyc3QgU09TIHVudGlsIHN0YXJ0X2RlY29tcHJlc3MgaXMgY2FsbGVkICovCisgICAgcmV0Y29kZSA9IEpQRUdfUkVBQ0hFRF9TT1M7CisgICAgYnJlYWs7CisgIGNhc2UgRFNUQVRFX1BSRUxPQUQ6CisgIGNhc2UgRFNUQVRFX1BSRVNDQU46CisgIGNhc2UgRFNUQVRFX1NDQU5OSU5HOgorICBjYXNlIERTVEFURV9SQVdfT0s6CisgIGNhc2UgRFNUQVRFX0JVRklNQUdFOgorICBjYXNlIERTVEFURV9CVUZQT1NUOgorICBjYXNlIERTVEFURV9TVE9QUElORzoKKyAgICByZXRjb2RlID0gKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgfQorICByZXR1cm4gcmV0Y29kZTsKK30KKworCisvKgorICogSGF2ZSB3ZSBmaW5pc2hlZCByZWFkaW5nIHRoZSBpbnB1dCBmaWxlPworICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19pbnB1dF9jb21wbGV0ZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBDaGVjayBmb3IgdmFsaWQganBlZyBvYmplY3QgKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPCBEU1RBVEVfU1RBUlQgfHwKKyAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPiBEU1RBVEVfU1RPUFBJTkcpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgcmV0dXJuIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQ7Cit9CisKKworLyoKKyAqIElzIHRoZXJlIG1vcmUgdGhhbiBvbmUgc2Nhbj8KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2pwZWdfaGFzX211bHRpcGxlX3NjYW5zKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIE9ubHkgdmFsaWQgYWZ0ZXIganBlZ19yZWFkX2hlYWRlciBjb21wbGV0ZXMgKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPCBEU1RBVEVfUkVBRFkgfHwKKyAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPiBEU1RBVEVfU1RPUFBJTkcpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgcmV0dXJuIGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zOworfQorCisKKy8qCisgKiBGaW5pc2ggSlBFRyBkZWNvbXByZXNzaW9uLgorICoKKyAqIFRoaXMgd2lsbCBub3JtYWxseSBqdXN0IHZlcmlmeSB0aGUgZmlsZSB0cmFpbGVyIGFuZCByZWxlYXNlIHRlbXAgc3RvcmFnZS4KKyAqCisgKiBSZXR1cm5zIEZBTFNFIGlmIHN1c3BlbmRlZC4gIFRoZSByZXR1cm4gdmFsdWUgbmVlZCBiZSBpbnNwZWN0ZWQgb25seSBpZgorICogYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlIGlzIHVzZWQuCisgKi8KKworR0xPQkFMKGJvb2xlYW4pCitqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGlmICgoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfU0NBTk5JTkcgfHwKKyAgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9SQVdfT0spICYmICFjaW5mby0+YnVmZmVyZWRfaW1hZ2UpIHsKKyAgICAvKiBUZXJtaW5hdGUgZmluYWwgcGFzcyBvZiBub24tYnVmZmVyZWQgbW9kZSAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgY2luZm8tPm91dHB1dF9oZWlnaHQpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RPT19MSVRUTEVfREFUQSk7CisgICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfb3V0cHV0X3Bhc3MpIChjaW5mbyk7CisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9TVE9QUElORzsKKyAgfSBlbHNlIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9CVUZJTUFHRSkgeworICAgIC8qIEZpbmlzaGluZyBhZnRlciBhIGJ1ZmZlcmVkLWltYWdlIG9wZXJhdGlvbiAqLworICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfU1RPUFBJTkc7CisgIH0gZWxzZSBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfU1RPUFBJTkcpIHsKKyAgICAvKiBTVE9QUElORyA9IHJlcGVhdCBjYWxsIGFmdGVyIGEgc3VzcGVuc2lvbiwgYW55dGhpbmcgZWxzZSBpcyBlcnJvciAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIH0KKyAgLyogUmVhZCB1bnRpbCBFT0kgKi8KKyAgd2hpbGUgKCFjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7CisgICAgaWYgKCgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pID09IEpQRUdfU1VTUEVOREVEKQorICAgICAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAvKiBTdXNwZW5kLCBjb21lIGJhY2sgbGF0ZXIgKi8KKyAgfQorICAvKiBEbyBmaW5hbCBjbGVhbnVwICovCisgICgqY2luZm8tPnNyYy0+dGVybV9zb3VyY2UpIChjaW5mbyk7CisgIC8qIFdlIGNhbiB1c2UganBlZ19hYm9ydCB0byByZWxlYXNlIG1lbW9yeSBhbmQgcmVzZXQgZ2xvYmFsX3N0YXRlICovCisgIGpwZWdfYWJvcnQoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhcGlzdGQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkYXBpc3RkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwNjQyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkYXBpc3RkLmMKQEAgLTAsMCArMSw2MzQgQEAKKy8qCisgKiBqZGFwaXN0ZC5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTUtMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBHb29nbGUsIEluYy4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhcHBsaWNhdGlvbiBpbnRlcmZhY2UgY29kZSBmb3IgdGhlIGRlY29tcHJlc3Npb24gaGFsZgorICogb2YgdGhlIEpQRUcgbGlicmFyeS4gIFRoZXNlIGFyZSB0aGUgInN0YW5kYXJkIiBBUEkgcm91dGluZXMgdGhhdCBhcmUKKyAqIHVzZWQgaW4gdGhlIG5vcm1hbCBmdWxsLWRlY29tcHJlc3Npb24gY2FzZS4gIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IGEKKyAqIHRyYW5zY29kaW5nLW9ubHkgYXBwbGljYXRpb24uICBOb3RlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gbGlua3MgaW4KKyAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcywgaXQgd2lsbCBlbmQgdXAgbGlua2luZyBpbiB0aGUgZW50aXJlIGRlY29tcHJlc3Nvci4KKyAqIFdlIHRodXMgbXVzdCBzZXBhcmF0ZSB0aGlzIGZpbGUgZnJvbSBqZGFwaW1pbi5jIHRvIGF2b2lkIGxpbmtpbmcgdGhlCisgKiB3aG9sZSBkZWNvbXByZXNzaW9uIGxpYnJhcnkgaW50byBhIHRyYW5zY29kZXIuCisgKi8KKworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAiamRtYWluY3QuaCIKKyNpbmNsdWRlICJqZGNvZWZjdC5oIgorI2luY2x1ZGUgImpkc2FtcGxlLmgiCisjaW5jbHVkZSAiam1lbXN5cy5oIgorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTE9DQUwoYm9vbGVhbikgb3V0cHV0X3Bhc3Nfc2V0dXAoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CisKKworLyoKKyAqIERlY29tcHJlc3Npb24gaW5pdGlhbGl6YXRpb24uCisgKiBqcGVnX3JlYWRfaGVhZGVyIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgKgorICogSWYgYSBtdWx0aXBhc3Mgb3BlcmF0aW5nIG1vZGUgd2FzIHNlbGVjdGVkLCB0aGlzIHdpbGwgZG8gYWxsIGJ1dCB0aGUKKyAqIGxhc3QgcGFzcywgYW5kIHRodXMgbWF5IHRha2UgYSBncmVhdCBkZWFsIG9mIHRpbWUuCisgKgorICogUmV0dXJucyBGQUxTRSBpZiBzdXNwZW5kZWQuICBUaGUgcmV0dXJuIHZhbHVlIG5lZWQgYmUgaW5zcGVjdGVkIG9ubHkgaWYKKyAqIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBpcyB1c2VkLgorICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19zdGFydF9kZWNvbXByZXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9SRUFEWSkgeworICAgIC8qIEZpcnN0IGNhbGw6IGluaXRpYWxpemUgbWFzdGVyIGNvbnRyb2wsIHNlbGVjdCBhY3RpdmUgbW9kdWxlcyAqLworICAgIGppbml0X21hc3Rlcl9kZWNvbXByZXNzKGNpbmZvKTsKKyAgICBpZiAoY2luZm8tPmJ1ZmZlcmVkX2ltYWdlKSB7CisgICAgICAvKiBObyBtb3JlIHdvcmsgaGVyZTsgZXhwZWN0aW5nIGpwZWdfc3RhcnRfb3V0cHV0IG5leHQgKi8KKyAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGSU1BR0U7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9QUkVMT0FEOworICB9CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9QUkVMT0FEKSB7CisgICAgLyogSWYgZmlsZSBoYXMgbXVsdGlwbGUgc2NhbnMsIGFic29yYiB0aGVtIGFsbCBpbnRvIHRoZSBjb2VmIGJ1ZmZlciAqLworICAgIGlmIChjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2FucykgeworI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICAgICAgZm9yICg7OykgeworICAgICAgICBpbnQgcmV0Y29kZTsKKyAgICAgICAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLworICAgICAgICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpCisgICAgICAgICAgKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgICAgICAgLyogQWJzb3JiIHNvbWUgbW9yZSBpbnB1dCAqLworICAgICAgICByZXRjb2RlID0gKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbyk7CisgICAgICAgIGlmIChyZXRjb2RlID09IEpQRUdfU1VTUEVOREVEKQorICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgaWYgKHJldGNvZGUgPT0gSlBFR19SRUFDSEVEX0VPSSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogQWR2YW5jZSBwcm9ncmVzcyBjb3VudGVyIGlmIGFwcHJvcHJpYXRlICovCisgICAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCAmJgorICAgICAgICAgICAgKHJldGNvZGUgPT0gSlBFR19ST1dfQ09NUExFVEVEIHx8IHJldGNvZGUgPT0gSlBFR19SRUFDSEVEX1NPUykpIHsKKyAgICAgICAgICBpZiAoKytjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA+PSBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQpIHsKKyAgICAgICAgICAgIC8qIGpkbWFzdGVyIHVuZGVyZXN0aW1hdGVkIG51bWJlciBvZiBzY2FuczsgcmF0Y2hldCB1cCBvbmUgc2NhbiAqLworICAgICAgICAgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ICs9IChsb25nKWNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisjZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmIC8qIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLworICAgIH0KKyAgICBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID0gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyOworICB9IGVsc2UgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1BSRVNDQU4pCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgLyogUGVyZm9ybSBhbnkgZHVtbXkgb3V0cHV0IHBhc3NlcywgYW5kIHNldCB1cCBmb3IgdGhlIGZpbmFsIHBhc3MgKi8KKyAgcmV0dXJuIG91dHB1dF9wYXNzX3NldHVwKGNpbmZvKTsKK30KKworCisvKgorICogU2V0IHVwIGZvciBhbiBvdXRwdXQgcGFzcywgYW5kIHBlcmZvcm0gYW55IGR1bW15IHBhc3MoZXMpIG5lZWRlZC4KKyAqIENvbW1vbiBzdWJyb3V0aW5lIGZvciBqcGVnX3N0YXJ0X2RlY29tcHJlc3MgYW5kIGpwZWdfc3RhcnRfb3V0cHV0LgorICogRW50cnk6IGdsb2JhbF9zdGF0ZSA9IERTVEFURV9QUkVTQ0FOIG9ubHkgaWYgcHJldmlvdXNseSBzdXNwZW5kZWQuCisgKiBFeGl0OiBJZiBkb25lLCByZXR1cm5zIFRSVUUgYW5kIHNldHMgZ2xvYmFsX3N0YXRlIGZvciBwcm9wZXIgb3V0cHV0IG1vZGUuCisgKiAgICAgICBJZiBzdXNwZW5kZWQsIHJldHVybnMgRkFMU0UgYW5kIHNldHMgZ2xvYmFsX3N0YXRlID0gRFNUQVRFX1BSRVNDQU4uCisgKi8KKworTE9DQUwoYm9vbGVhbikKK291dHB1dF9wYXNzX3NldHVwKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9QUkVTQ0FOKSB7CisgICAgLyogRmlyc3QgY2FsbDogZG8gcGFzcyBzZXR1cCAqLworICAgICgqY2luZm8tPm1hc3Rlci0+cHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3MpIChjaW5mbyk7CisgICAgY2luZm8tPm91dHB1dF9zY2FubGluZSA9IDA7CisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9QUkVTQ0FOOworICB9CisgIC8qIExvb3Agb3ZlciBhbnkgcmVxdWlyZWQgZHVtbXkgcGFzc2VzICovCisgIHdoaWxlIChjaW5mby0+bWFzdGVyLT5pc19kdW1teV9wYXNzKSB7CisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECisgICAgLyogQ3JhbmsgdGhyb3VnaCB0aGUgZHVtbXkgcGFzcyAqLworICAgIHdoaWxlIChjaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgY2luZm8tPm91dHB1dF9oZWlnaHQpIHsKKyAgICAgIEpESU1FTlNJT04gbGFzdF9zY2FubGluZTsKKyAgICAgIC8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8KKyAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKWNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisgICAgICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKWNpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgICAgICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAgfQorICAgICAgLyogUHJvY2VzcyBzb21lIGRhdGEgKi8KKyAgICAgIGxhc3Rfc2NhbmxpbmUgPSBjaW5mby0+b3V0cHV0X3NjYW5saW5lOworICAgICAgKCpjaW5mby0+bWFpbi0+cHJvY2Vzc19kYXRhKSAoY2luZm8sIChKU0FNUEFSUkFZKU5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2luZm8tPm91dHB1dF9zY2FubGluZSwgKEpESU1FTlNJT04pMCk7CisgICAgICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA9PSBsYXN0X3NjYW5saW5lKQorICAgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAvKiBObyBwcm9ncmVzcyBtYWRlLCBtdXN0IHN1c3BlbmQgKi8KKyAgICB9CisgICAgLyogRmluaXNoIHVwIGR1bW15IHBhc3MsIGFuZCBzZXQgdXAgZm9yIGFub3RoZXIgb25lICovCisgICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfb3V0cHV0X3Bhc3MpIChjaW5mbyk7CisgICAgKCpjaW5mby0+bWFzdGVyLT5wcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcykgKGNpbmZvKTsKKyAgICBjaW5mby0+b3V0cHV0X3NjYW5saW5lID0gMDsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmIC8qIFFVQU5UXzJQQVNTX1NVUFBPUlRFRCAqLworICB9CisgIC8qIFJlYWR5IGZvciBhcHBsaWNhdGlvbiB0byBkcml2ZSBvdXRwdXQgcGFzcyB0aHJvdWdoCisgICAqIGpwZWdfcmVhZF9zY2FubGluZXMgb3IganBlZ19yZWFkX3Jhd19kYXRhLgorICAgKi8KKyAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IGNpbmZvLT5yYXdfZGF0YV9vdXQgPyBEU1RBVEVfUkFXX09LIDogRFNUQVRFX1NDQU5OSU5HOworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRW5hYmxlIHBhcnRpYWwgc2NhbmxpbmUgZGVjb21wcmVzc2lvbgorICoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpIGFuZCBiZWZvcmUgYW55IGNhbGxzIHRvCisgKiBqcGVnX3JlYWRfc2NhbmxpbmVzKCkgb3IganBlZ19za2lwX3NjYW5saW5lcygpLgorICoKKyAqIFJlZmVyIHRvIGxpYmpwZWcudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19jcm9wX3NjYW5saW5lKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpESU1FTlNJT04gKnhvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqd2lkdGgpCit7CisgIGludCBjaSwgYWxpZ24sIG9yaWdfZG93bnNhbXBsZWRfd2lkdGg7CisgIEpESU1FTlNJT04gaW5wdXRfeG9mZnNldDsKKyAgYm9vbGVhbiByZWluaXRfdXBzYW1wbGVyID0gRkFMU0U7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1NDQU5OSU5HIHx8IGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgIT0gMCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworCisgIGlmICgheG9mZnNldCB8fCAhd2lkdGgpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ1JPUF9TUEVDKTsKKworICAvKiB4b2Zmc2V0IGFuZCB3aWR0aCBtdXN0IGZhbGwgd2l0aGluIHRoZSBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucy4gKi8KKyAgaWYgKCp3aWR0aCA9PSAwIHx8ICp4b2Zmc2V0ICsgKndpZHRoID4gY2luZm8tPm91dHB1dF93aWR0aCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1dJRFRIX09WRVJGTE9XKTsKKworICAvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nIGlmIHRoZSBjYWxsZXIgd2FudHMgdGhlIGVudGlyZSB3aWR0aC4gKi8KKyAgaWYgKCp3aWR0aCA9PSBjaW5mby0+b3V0cHV0X3dpZHRoKQorICAgIHJldHVybjsKKworICAvKiBFbnN1cmluZyB0aGUgcHJvcGVyIGFsaWdubWVudCBvZiB4b2Zmc2V0IGlzIHRyaWNreS4gIEF0IG1pbmltdW0sIGl0CisgICAqIG11c3QgYWxpZ24gd2l0aCBhbiBNQ1UgYm91bmRhcnksIGJlY2F1c2U6CisgICAqCisgICAqICAgKDEpIFRoZSBJRENUIGlzIHBlcmZvcm1lZCBpbiBibG9ja3MsIGFuZCBpdCBpcyBub3QgZmVhc2libGUgdG8gbW9kaWZ5CisgICAqICAgICAgIHRoZSBhbGdvcml0aG0gc28gdGhhdCBpdCBjYW4gdHJhbnNmb3JtIHBhcnRpYWwgYmxvY2tzLgorICAgKiAgICgyKSBCZWNhdXNlIG9mIHRoZSBTSU1EIGV4dGVuc2lvbnMsIGFueSBpbnB1dCBidWZmZXIgcGFzc2VkIHRvIHRoZQorICAgKiAgICAgICB1cHNhbXBsaW5nIGFuZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIG11c3QgYmUgYWxpZ25lZCB0byB0aGUKKyAgICogICAgICAgU0lNRCB3b3JkIHNpemUgKGZvciBpbnN0YW5jZSwgMTI4LWJpdCBpbiB0aGUgY2FzZSBvZiBTU0UyLikgIFRoZQorICAgKiAgICAgICBlYXNpZXN0IHdheSB0byBhY2NvbXBsaXNoIHRoaXMgd2l0aG91dCBjb3B5aW5nIGRhdGEgaXMgdG8gZW5zdXJlCisgICAqICAgICAgIHRoYXQgdXBzYW1wbGluZyBhbmQgY29sb3IgY29udmVyc2lvbiBiZWdpbiBhdCB0aGUgc3RhcnQgb2YgdGhlCisgICAqICAgICAgIGZpcnN0IE1DVSBjb2x1bW4gdGhhdCB3aWxsIGJlIGludmVyc2UgdHJhbnNmb3JtZWQuCisgICAqCisgICAqIEluIHByYWN0aWNlLCB3ZSBhY3R1YWxseSBpbXBvc2UgYSBzdHJpY3RlciBhbGlnbm1lbnQgcmVxdWlyZW1lbnQuICBXZQorICAgKiByZXF1aXJlIHRoYXQgeG9mZnNldCBiZSBhIG11bHRpcGxlIG9mIHRoZSBtYXhpbXVtIE1DVSBjb2x1bW4gd2lkdGggb2YgYWxsCisgICAqIG9mIHRoZSBjb21wb25lbnRzICh0aGUgImlNQ1UgY29sdW1uIHdpZHRoLiIpICBUaGlzIGlzIHRvIHNpbXBsaWZ5IHRoZQorICAgKiBzaW5nbGUtcGFzcyBkZWNvbXByZXNzaW9uIGNhc2UsIGFsbG93aW5nIHVzIHRvIHVzZSB0aGUgc2FtZSBNQ1UgY29sdW1uCisgICAqIHdpZHRoIGZvciBhbGwgb2YgdGhlIGNvbXBvbmVudHMuCisgICAqLworICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPT0gMSAmJiBjaW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMSkKKyAgICBhbGlnbiA9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgZWxzZQorICAgIGFsaWduID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplICogY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yOworCisgIC8qIEFkanVzdCB4b2Zmc2V0IHRvIHRoZSBuZWFyZXN0IGlNQ1UgYm91bmRhcnkgPD0gdGhlIHJlcXVlc3RlZCB2YWx1ZSAqLworICBpbnB1dF94b2Zmc2V0ID0gKnhvZmZzZXQ7CisgICp4b2Zmc2V0ID0gKGlucHV0X3hvZmZzZXQgLyBhbGlnbikgKiBhbGlnbjsKKworICAvKiBBZGp1c3QgdGhlIHdpZHRoIHNvIHRoYXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIG91dHB1dCBpbWFnZSBpcyBhcworICAgKiByZXF1ZXN0ZWQgKG9ubHkgdGhlIGxlZnQgZWRnZSBpcyBhbHRlcmVkLikgIEl0IGlzIGltcG9ydGFudCB0aGF0IGNhbGxpbmcKKyAgICogcHJvZ3JhbXMgY2hlY2sgdGhpcyB2YWx1ZSBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHRoYXQgdGhleSBjYW4KKyAgICogYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzaXplLgorICAgKi8KKyAgKndpZHRoID0gKndpZHRoICsgaW5wdXRfeG9mZnNldCAtICp4b2Zmc2V0OworICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKndpZHRoOworCisgIC8qIFNldCB0aGUgZmlyc3QgYW5kIGxhc3QgaU1DVSBjb2x1bW5zIHRoYXQgd2UgbXVzdCBkZWNvbXByZXNzLiAgVGhlc2UgdmFsdWVzCisgICAqIHdpbGwgYmUgdXNlZCBpbiBzaW5nbGUtc2NhbiBkZWNvbXByZXNzaW9ucy4KKyAgICovCisgIGNpbmZvLT5tYXN0ZXItPmZpcnN0X2lNQ1VfY29sID0gKEpESU1FTlNJT04pKGxvbmcpKCp4b2Zmc2V0KSAvIChsb25nKWFsaWduOworICBjaW5mby0+bWFzdGVyLT5sYXN0X2lNQ1VfY29sID0KKyAgICAoSkRJTUVOU0lPTilqZGl2X3JvdW5kX3VwKChsb25nKSgqeG9mZnNldCArIGNpbmZvLT5vdXRwdXRfd2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpYWxpZ24pIC0gMTsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIGludCBoc2YgPSAoY2luZm8tPmNvbXBzX2luX3NjYW4gPT0gMSAmJiBjaW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMSkgPworICAgICAgICAgICAgICAxIDogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKworICAgIC8qIFNldCBkb3duc2FtcGxlZF93aWR0aCB0byB0aGUgbmV3IG91dHB1dCB3aWR0aC4gKi8KKyAgICBvcmlnX2Rvd25zYW1wbGVkX3dpZHRoID0gY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGg7CisgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPQorICAgICAgKEpESU1FTlNJT04pamRpdl9yb3VuZF91cCgobG9uZykoY2luZm8tPm91dHB1dF93aWR0aCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKTsKKyAgICBpZiAoY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPCAyICYmIG9yaWdfZG93bnNhbXBsZWRfd2lkdGggPj0gMikKKyAgICAgIHJlaW5pdF91cHNhbXBsZXIgPSBUUlVFOworCisgICAgLyogU2V0IHRoZSBmaXJzdCBhbmQgbGFzdCBpTUNVIGNvbHVtbnMgdGhhdCB3ZSBtdXN0IGRlY29tcHJlc3MuICBUaGVzZQorICAgICAqIHZhbHVlcyB3aWxsIGJlIHVzZWQgaW4gbXVsdGktc2NhbiBkZWNvbXByZXNzaW9ucy4KKyAgICAgKi8KKyAgICBjaW5mby0+bWFzdGVyLT5maXJzdF9NQ1VfY29sW2NpXSA9CisgICAgICAoSkRJTUVOU0lPTikobG9uZykoKnhvZmZzZXQgKiBoc2YpIC8gKGxvbmcpYWxpZ247CisgICAgY2luZm8tPm1hc3Rlci0+bGFzdF9NQ1VfY29sW2NpXSA9CisgICAgICAoSkRJTUVOU0lPTilqZGl2X3JvdW5kX3VwKChsb25nKSgoKnhvZmZzZXQgKyBjaW5mby0+b3V0cHV0X3dpZHRoKSAqIGhzZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWFsaWduKSAtIDE7CisgIH0KKworICBpZiAocmVpbml0X3Vwc2FtcGxlcikgeworICAgIGNpbmZvLT5tYXN0ZXItPmppbml0X3Vwc2FtcGxlcl9ub19hbGxvYyA9IFRSVUU7CisgICAgamluaXRfdXBzYW1wbGVyKGNpbmZvKTsKKyAgICBjaW5mby0+bWFzdGVyLT5qaW5pdF91cHNhbXBsZXJfbm9fYWxsb2MgPSBGQUxTRTsKKyAgfQorfQorCisKKy8qCisgKiBSZWFkIHNvbWUgc2NhbmxpbmVzIG9mIGRhdGEgZnJvbSB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2YgbGluZXMgYWN0dWFsbHkgcmVhZC4KKyAqIFRoaXMgbWF5IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZCBpbiBzZXZlcmFsIGNhc2VzLAorICogaW5jbHVkaW5nIGJvdHRvbSBvZiBpbWFnZSwgZGF0YSBzb3VyY2Ugc3VzcGVuc2lvbiwgYW5kIG9wZXJhdGluZworICogbW9kZXMgdGhhdCBlbWl0IG11bHRpcGxlIHNjYW5saW5lcyBhdCBhIHRpbWUuCisgKgorICogTm90ZTogd2Ugd2FybiBhYm91dCBleGNlc3MgY2FsbHMgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIHNpbmNlCisgKiB0aGlzIGxpa2VseSBzaWduYWxzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgZXJyb3IuICBIb3dldmVyLAorICogYW4gb3ZlcnNpemUgYnVmZmVyIChtYXhfbGluZXMgPiBzY2FubGluZXMgcmVtYWluaW5nKSBpcyBub3QgYW4gZXJyb3IuCisgKi8KKworR0xPQkFMKEpESU1FTlNJT04pCitqcGVnX3JlYWRfc2NhbmxpbmVzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG1heF9saW5lcykKK3sKKyAgSkRJTUVOU0lPTiByb3dfY3RyOworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9TQ0FOTklORykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA+PSBjaW5mby0+b3V0cHV0X2hlaWdodCkgeworICAgIFdBUk5NUyhjaW5mbywgSldSTl9UT09fTVVDSF9EQVRBKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8KKyAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPSAobG9uZyljaW5mby0+b3V0cHV0X3NjYW5saW5lOworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKWNpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgIH0KKworICAvKiBQcm9jZXNzIHNvbWUgZGF0YSAqLworICByb3dfY3RyID0gMDsKKyAgKCpjaW5mby0+bWFpbi0+cHJvY2Vzc19kYXRhKSAoY2luZm8sIHNjYW5saW5lcywgJnJvd19jdHIsIG1heF9saW5lcyk7CisgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gcm93X2N0cjsKKyAgcmV0dXJuIHJvd19jdHI7Cit9CisKKworLyogRHVtbXkgY29sb3IgY29udmVydCBmdW5jdGlvbiB1c2VkIGJ5IGpwZWdfc2tpcF9zY2FubGluZXMoKSAqLworTE9DQUwodm9pZCkKK25vb3BfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCit7Cit9CisKKworLyogRHVtbXkgcXVhbnRpemUgZnVuY3Rpb24gdXNlZCBieSBqcGVnX3NraXBfc2NhbmxpbmVzKCkgKi8KK0xPQ0FMKHZvaWQpCitub29wX3F1YW50aXplKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKK3sKK30KKworCisvKgorICogSW4gc29tZSBjYXNlcywgaXQgaXMgYmVzdCB0byBjYWxsIGpwZWdfcmVhZF9zY2FubGluZXMoKSBhbmQgZGlzY2FyZCB0aGUKKyAqIG91dHB1dCwgcmF0aGVyIHRoYW4gc2tpcHBpbmcgdGhlIHNjYW5saW5lcywgYmVjYXVzZSB0aGlzIGFsbG93cyB1cyB0bworICogbWFpbnRhaW4gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjb250ZXh0LWJhc2VkIHVwc2FtcGxlci4gIEluIHRoZXNlIGNhc2VzLAorICogd2Ugc2V0IHVwIGFuZCB0ZWFyIGRvd24gYSBkdW1teSBjb2xvciBjb252ZXJ0ZXIgaW4gb3JkZXIgdG8gYXZvaWQgdmFsZ3JpbmQKKyAqIGVycm9ycyBhbmQgdG8gYWNoaWV2ZSB0aGUgYmVzdCBwb3NzaWJsZSBwZXJmb3JtYW5jZS4KKyAqLworCitMT0NBTCh2b2lkKQorcmVhZF9hbmRfZGlzY2FyZF9zY2FubGluZXMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkRJTUVOU0lPTiBudW1fbGluZXMpCit7CisgIEpESU1FTlNJT04gbjsKKyAgdm9pZCAoKmNvbG9yX2NvbnZlcnQpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cyk7CisgIHZvaWQgKCpjb2xvcl9xdWFudGl6ZSkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykgPSBOVUxMOworCisgIGNvbG9yX2NvbnZlcnQgPSBjaW5mby0+Y2NvbnZlcnQtPmNvbG9yX2NvbnZlcnQ7CisgIGNpbmZvLT5jY29udmVydC0+Y29sb3JfY29udmVydCA9IG5vb3BfY29udmVydDsKKyAgaWYgKGNpbmZvLT5jcXVhbnRpemUgJiYgY2luZm8tPmNxdWFudGl6ZS0+Y29sb3JfcXVhbnRpemUpIHsKKyAgICBjb2xvcl9xdWFudGl6ZSA9IGNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplOworICAgIGNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplID0gbm9vcF9xdWFudGl6ZTsKKyAgfQorCisgIGZvciAobiA9IDA7IG4gPCBudW1fbGluZXM7IG4rKykKKyAgICBqcGVnX3JlYWRfc2NhbmxpbmVzKGNpbmZvLCBOVUxMLCAxKTsKKworICBjaW5mby0+Y2NvbnZlcnQtPmNvbG9yX2NvbnZlcnQgPSBjb2xvcl9jb252ZXJ0OworICBpZiAoY29sb3JfcXVhbnRpemUpCisgICAgY2luZm8tPmNxdWFudGl6ZS0+Y29sb3JfcXVhbnRpemUgPSBjb2xvcl9xdWFudGl6ZTsKK30KKworCisvKgorICogQ2FsbGVkIGJ5IGpwZWdfc2tpcF9zY2FubGluZXMoKS4gIFRoaXMgcGFydGlhbGx5IHNraXBzIGEgZGVjb21wcmVzcyBibG9jayBieQorICogaW5jcmVtZW50aW5nIHRoZSByb3dncm91cCBjb3VudGVyLgorICovCisKK0xPQ0FMKHZvaWQpCitpbmNyZW1lbnRfc2ltcGxlX3Jvd2dyb3VwX2N0cihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKRElNRU5TSU9OIHJvd3MpCit7CisgIEpESU1FTlNJT04gcm93c19sZWZ0OworICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0ciljaW5mby0+bWFpbjsKKworICAvKiBJbmNyZW1lbnQgdGhlIGNvdW50ZXIgdG8gdGhlIG5leHQgcm93IGdyb3VwIGFmdGVyIHRoZSBza2lwcGVkIHJvd3MuICovCisgIG1haW5fcHRyLT5yb3dncm91cF9jdHIgKz0gcm93cyAvIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKworICAvKiBQYXJ0aWFsbHkgc2tpcHBpbmcgYSByb3cgZ3JvdXAgd291bGQgaW52b2x2ZSBtb2RpZnlpbmcgdGhlIGludGVybmFsIHN0YXRlCisgICAqIG9mIHRoZSB1cHNhbXBsZXIsIHNvIHJlYWQgdGhlIHJlbWFpbmluZyByb3dzIGludG8gYSBkdW1teSBidWZmZXIgaW5zdGVhZC4KKyAgICovCisgIHJvd3NfbGVmdCA9IHJvd3MgJSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gcm93cyAtIHJvd3NfbGVmdDsKKworICByZWFkX2FuZF9kaXNjYXJkX3NjYW5saW5lcyhjaW5mbywgcm93c19sZWZ0KTsKK30KKworLyoKKyAqIFNraXBzIHNvbWUgc2NhbmxpbmVzIG9mIGRhdGEgZnJvbSB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2YgbGluZXMgYWN0dWFsbHkgc2tpcHBlZC4gIElmIHNraXBwaW5nCisgKiBudW1fbGluZXMgd291bGQgbW92ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UsIHRoZW4gdGhlIGFjdHVhbCBudW1iZXIgb2YKKyAqIGxpbmVzIHJlbWFpbmluZyBpbiB0aGUgaW1hZ2UgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UsIHRoZSByZXR1cm4gdmFsdWUgd2lsbAorICogYmUgZXF1YWwgdG8gbnVtX2xpbmVzLgorICoKKyAqIFJlZmVyIHRvIGxpYmpwZWcudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisKK0dMT0JBTChKRElNRU5TSU9OKQoranBlZ19za2lwX3NjYW5saW5lcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKRElNRU5TSU9OIG51bV9saW5lcykKK3sKKyAgbXlfbWFpbl9wdHIgbWFpbl9wdHIgPSAobXlfbWFpbl9wdHIpY2luZm8tPm1haW47CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICBKRElNRU5TSU9OIGksIHg7CisgIGludCB5OworICBKRElNRU5TSU9OIGxpbmVzX3Blcl9pTUNVX3JvdywgbGluZXNfbGVmdF9pbl9pTUNVX3JvdywgbGluZXNfYWZ0ZXJfaU1DVV9yb3c7CisgIEpESU1FTlNJT04gbGluZXNfdG9fc2tpcCwgbGluZXNfdG9fcmVhZDsKKworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfU0NBTk5JTkcpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICAvKiBEbyBub3Qgc2tpcCBwYXN0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLiAqLworICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSArIG51bV9saW5lcyA+PSBjaW5mby0+b3V0cHV0X2hlaWdodCkgeworICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPSBjaW5mby0+b3V0cHV0X2hlaWdodDsKKyAgICAoKmNpbmZvLT5pbnB1dGN0bC0+ZmluaXNoX2lucHV0X3Bhc3MpIChjaW5mbyk7CisgICAgY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCA9IFRSVUU7CisgICAgcmV0dXJuIGNpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gY2luZm8tPm91dHB1dF9zY2FubGluZTsKKyAgfQorCisgIGlmIChudW1fbGluZXMgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBsaW5lc19wZXJfaU1DVV9yb3cgPSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUgKiBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgIGxpbmVzX2xlZnRfaW5faU1DVV9yb3cgPQorICAgIChsaW5lc19wZXJfaU1DVV9yb3cgLSAoY2luZm8tPm91dHB1dF9zY2FubGluZSAlIGxpbmVzX3Blcl9pTUNVX3JvdykpICUKKyAgICBsaW5lc19wZXJfaU1DVV9yb3c7CisgIGxpbmVzX2FmdGVyX2lNQ1Vfcm93ID0gbnVtX2xpbmVzIC0gbGluZXNfbGVmdF9pbl9pTUNVX3JvdzsKKworICAvKiBTa2lwIHRoZSBsaW5lcyByZW1haW5pbmcgaW4gdGhlIGN1cnJlbnQgaU1DVSByb3cuICBXaGVuIHVwc2FtcGxpbmcKKyAgICogcmVxdWlyZXMgY29udGV4dCByb3dzLCB3ZSBuZWVkIHRoZSBwcmV2aW91cyBhbmQgbmV4dCByb3dzIGluIG9yZGVyIHRvIHJlYWQKKyAgICogdGhlIGN1cnJlbnQgcm93LiAgVGhpcyBhZGRzIHNvbWUgY29tcGxleGl0eS4KKyAgICovCisgIGlmIChjaW5mby0+dXBzYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7CisgICAgLyogSWYgdGhlIHNraXBwZWQgbGluZXMgd291bGQgbm90IG1vdmUgdXMgcGFzdCB0aGUgY3VycmVudCBpTUNVIHJvdywgd2UKKyAgICAgKiByZWFkIHRoZSBsaW5lcyBhbmQgaWdub3JlIHRoZW0uICBUaGVyZSBtaWdodCBiZSBhIGZhc3RlciB3YXkgb2YgZG9pbmcKKyAgICAgKiB0aGlzLCBidXQgd2UgYXJlIGZhY2luZyBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgZm9yIGRpbWluaXNoaW5nIHJldHVybnMuCisgICAgICogVGhlIGluY3JlYXNpbmcgY29tcGxleGl0eSB3b3VsZCBiZSBhIGJ5LXByb2R1Y3Qgb2YgbWVkZGxpbmcgd2l0aCB0aGUKKyAgICAgKiBzdGF0ZSBtYWNoaW5lIHVzZWQgdG8gc2tpcCBjb250ZXh0IHJvd3MuICBOZWFyIHRoZSBlbmQgb2YgYW4gaU1DVSByb3csCisgICAgICogdGhlIG5leHQgaU1DVSByb3cgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGVudHJvcHktZGVjb2RlZC4gIEluIHRoaXMgdW5pcXVlCisgICAgICogY2FzZSwgd2Ugd2lsbCByZWFkIHRoZSBuZXh0IGlNQ1Ugcm93IGlmIHdlIGNhbm5vdCBza2lwIHBhc3QgaXQgYXMgd2VsbC4KKyAgICAgKi8KKyAgICBpZiAoKG51bV9saW5lcyA8IGxpbmVzX2xlZnRfaW5faU1DVV9yb3cgKyAxKSB8fAorICAgICAgICAobGluZXNfbGVmdF9pbl9pTUNVX3JvdyA8PSAxICYmIG1haW5fcHRyLT5idWZmZXJfZnVsbCAmJgorICAgICAgICAgbGluZXNfYWZ0ZXJfaU1DVV9yb3cgPCBsaW5lc19wZXJfaU1DVV9yb3cgKyAxKSkgeworICAgICAgcmVhZF9hbmRfZGlzY2FyZF9zY2FubGluZXMoY2luZm8sIG51bV9saW5lcyk7CisgICAgICByZXR1cm4gbnVtX2xpbmVzOworICAgIH0KKworICAgIC8qIElmIHRoZSBuZXh0IGlNQ1Ugcm93IGhhcyBhbHJlYWR5IGJlZW4gZW50cm9weS1kZWNvZGVkLCBtYWtlIHN1cmUgdGhhdAorICAgICAqIHdlIGRvIG5vdCBza2lwIHRvbyBmYXIuCisgICAgICovCisgICAgaWYgKGxpbmVzX2xlZnRfaW5faU1DVV9yb3cgPD0gMSAmJiBtYWluX3B0ci0+YnVmZmVyX2Z1bGwpIHsKKyAgICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gbGluZXNfbGVmdF9pbl9pTUNVX3JvdyArIGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgICAgIGxpbmVzX2FmdGVyX2lNQ1Vfcm93IC09IGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgICB9IGVsc2UgeworICAgICAgY2luZm8tPm91dHB1dF9zY2FubGluZSArPSBsaW5lc19sZWZ0X2luX2lNQ1Vfcm93OworICAgIH0KKworICAgIC8qIElmIHdlIGhhdmUganVzdCBjb21wbGV0ZWQgdGhlIGZpcnN0IGJsb2NrLCBhZGp1c3QgdGhlIGJ1ZmZlciBwb2ludGVycyAqLworICAgIGlmIChtYWluX3B0ci0+aU1DVV9yb3dfY3RyID09IDAgfHwKKyAgICAgICAgKG1haW5fcHRyLT5pTUNVX3Jvd19jdHIgPT0gMSAmJiBsaW5lc19sZWZ0X2luX2lNQ1Vfcm93ID4gMikpCisgICAgICBzZXRfd3JhcGFyb3VuZF9wb2ludGVycyhjaW5mbyk7CisgICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gRkFMU0U7CisgICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CisgICAgbWFpbl9wdHItPmNvbnRleHRfc3RhdGUgPSBDVFhfUFJFUEFSRV9GT1JfSU1DVTsKKyAgICB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgIHVwc2FtcGxlLT5yb3dzX3RvX2dvID0gY2luZm8tPm91dHB1dF9oZWlnaHQgLSBjaW5mby0+b3V0cHV0X3NjYW5saW5lOworICB9CisKKyAgLyogU2tpcHBpbmcgaXMgbXVjaCBzaW1wbGVyIHdoZW4gY29udGV4dCByb3dzIGFyZSBub3QgcmVxdWlyZWQuICovCisgIGVsc2UgeworICAgIGlmIChudW1fbGluZXMgPCBsaW5lc19sZWZ0X2luX2lNQ1Vfcm93KSB7CisgICAgICBpbmNyZW1lbnRfc2ltcGxlX3Jvd2dyb3VwX2N0cihjaW5mbywgbnVtX2xpbmVzKTsKKyAgICAgIHJldHVybiBudW1fbGluZXM7CisgICAgfSBlbHNlIHsKKyAgICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gbGluZXNfbGVmdF9pbl9pTUNVX3JvdzsKKyAgICAgIG1haW5fcHRyLT5idWZmZXJfZnVsbCA9IEZBTFNFOworICAgICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CisgICAgICB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgICAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gPSBjaW5mby0+b3V0cHV0X2hlaWdodCAtIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisgICAgfQorICB9CisKKyAgLyogQ2FsY3VsYXRlIGhvdyBtYW55IGZ1bGwgaU1DVSByb3dzIHdlIGNhbiBza2lwLiAqLworICBpZiAoY2luZm8tPnVwc2FtcGxlLT5uZWVkX2NvbnRleHRfcm93cykKKyAgICBsaW5lc190b19za2lwID0gKChsaW5lc19hZnRlcl9pTUNVX3JvdyAtIDEpIC8gbGluZXNfcGVyX2lNQ1Vfcm93KSAqCisgICAgICAgICAgICAgICAgICAgIGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgZWxzZQorICAgIGxpbmVzX3RvX3NraXAgPSAobGluZXNfYWZ0ZXJfaU1DVV9yb3cgLyBsaW5lc19wZXJfaU1DVV9yb3cpICoKKyAgICAgICAgICAgICAgICAgICAgbGluZXNfcGVyX2lNQ1Vfcm93OworICAvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IHJlbWFpbiB0byBiZSBza2lwcGVkIGFmdGVyIHNraXBwaW5nIGFsbAorICAgKiBvZiB0aGUgZnVsbCBpTUNVIHJvd3MgdGhhdCB3ZSBjYW4uICBXZSB3aWxsIG5vdCByZWFkIHRoZXNlIGxpbmVzIHVubGVzcyB3ZQorICAgKiBoYXZlIHRvLgorICAgKi8KKyAgbGluZXNfdG9fcmVhZCA9IGxpbmVzX2FmdGVyX2lNQ1Vfcm93IC0gbGluZXNfdG9fc2tpcDsKKworICAvKiBGb3IgaW1hZ2VzIHJlcXVpcmluZyBtdWx0aXBsZSBzY2FucyAocHJvZ3Jlc3NpdmUsIG5vbi1pbnRlcmxlYXZlZCwgZXRjLiksCisgICAqIGFsbCBvZiB0aGUgZW50cm9weSBkZWNvZGluZyBvY2N1cnMgaW4ganBlZ19zdGFydF9kZWNvbXByZXNzKCksIGFzc3VtaW5nCisgICAqIHRoYXQgdGhlIGlucHV0IGRhdGEgc291cmNlIGlzIG5vbi1zdXNwZW5kaW5nLiAgVGhpcyBtYWtlcyBza2lwcGluZyBlYXN5LgorICAgKi8KKyAgaWYgKGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zKSB7CisgICAgaWYgKGNpbmZvLT51cHNhbXBsZS0+bmVlZF9jb250ZXh0X3Jvd3MpIHsKKyAgICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gbGluZXNfdG9fc2tpcDsKKyAgICAgIGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgKz0gbGluZXNfdG9fc2tpcCAvIGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgICAgIG1haW5fcHRyLT5pTUNVX3Jvd19jdHIgKz0gbGluZXNfYWZ0ZXJfaU1DVV9yb3cgLyBsaW5lc19wZXJfaU1DVV9yb3c7CisgICAgICAvKiBJdCBpcyBjb21wbGV4IHRvIHByb3Blcmx5IG1vdmUgdG8gdGhlIG1pZGRsZSBvZiBhIGNvbnRleHQgYmxvY2ssIHNvCisgICAgICAgKiByZWFkIHRoZSByZW1haW5pbmcgbGluZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtLgorICAgICAgICovCisgICAgICByZWFkX2FuZF9kaXNjYXJkX3NjYW5saW5lcyhjaW5mbywgbGluZXNfdG9fcmVhZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gbGluZXNfdG9fc2tpcDsKKyAgICAgIGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgKz0gbGluZXNfdG9fc2tpcCAvIGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgICAgIGluY3JlbWVudF9zaW1wbGVfcm93Z3JvdXBfY3RyKGNpbmZvLCBsaW5lc190b19yZWFkKTsKKyAgICB9CisgICAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gPSBjaW5mby0+b3V0cHV0X2hlaWdodCAtIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisgICAgcmV0dXJuIG51bV9saW5lczsKKyAgfQorCisgIC8qIFNraXAgdGhlIGlNQ1Ugcm93cyB0aGF0IHdlIGNhbiBzYWZlbHkgc2tpcC4gKi8KKyAgZm9yIChpID0gMDsgaSA8IGxpbmVzX3RvX3NraXA7IGkgKz0gbGluZXNfcGVyX2lNQ1Vfcm93KSB7CisgICAgZm9yICh5ID0gMDsgeSA8IGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdzsgeSsrKSB7CisgICAgICBmb3IgKHggPSAwOyB4IDwgY2luZm8tPk1DVXNfcGVyX3JvdzsgeCsrKSB7CisgICAgICAgIC8qIENhbGxpbmcgZGVjb2RlX21jdSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgY2F1c2VzIGl0IHRvIGRpc2NhcmQgdGhlCisgICAgICAgICAqIGRlY29kZWQgY29lZmZpY2llbnRzLiAgVGhpcyBpcyB+NSUgZmFzdGVyIGZvciBsYXJnZSBzdWJzZXRzLCBidXQKKyAgICAgICAgICogaXQncyB0b3VnaCB0byB0ZWxsIGEgZGlmZmVyZW5jZSBmb3Igc21hbGxlciBpbWFnZXMuCisgICAgICAgICAqLworICAgICAgICAoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIE5VTEwpOworICAgICAgfQorICAgIH0KKyAgICBjaW5mby0+aW5wdXRfaU1DVV9yb3crKzsKKyAgICBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93Kys7CisgICAgaWYgKGNpbmZvLT5pbnB1dF9pTUNVX3JvdyA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpCisgICAgICBzdGFydF9pTUNVX3JvdyhjaW5mbyk7CisgICAgZWxzZQorICAgICAgKCpjaW5mby0+aW5wdXRjdGwtPmZpbmlzaF9pbnB1dF9wYXNzKSAoY2luZm8pOworICB9CisgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gbGluZXNfdG9fc2tpcDsKKworICBpZiAoY2luZm8tPnVwc2FtcGxlLT5uZWVkX2NvbnRleHRfcm93cykgeworICAgIC8qIENvbnRleHQtYmFzZWQgdXBzYW1wbGluZyBrZWVwcyB0cmFjayBvZiBpTUNVIHJvd3MuICovCisgICAgbWFpbl9wdHItPmlNQ1Vfcm93X2N0ciArPSBsaW5lc190b19za2lwIC8gbGluZXNfcGVyX2lNQ1Vfcm93OworCisgICAgLyogSXQgaXMgY29tcGxleCB0byBwcm9wZXJseSBtb3ZlIHRvIHRoZSBtaWRkbGUgb2YgYSBjb250ZXh0IGJsb2NrLCBzbworICAgICAqIHJlYWQgdGhlIHJlbWFpbmluZyBsaW5lcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0uCisgICAgICovCisgICAgcmVhZF9hbmRfZGlzY2FyZF9zY2FubGluZXMoY2luZm8sIGxpbmVzX3RvX3JlYWQpOworICB9IGVsc2UgeworICAgIGluY3JlbWVudF9zaW1wbGVfcm93Z3JvdXBfY3RyKGNpbmZvLCBsaW5lc190b19yZWFkKTsKKyAgfQorCisgIC8qIFNpbmNlIHNraXBwaW5nIGxpbmVzIGludm9sdmVzIHNraXBwaW5nIHRoZSB1cHNhbXBsaW5nIHN0ZXAsIHRoZSB2YWx1ZSBvZgorICAgKiAicm93c190b19nbyIgd2lsbCBiZWNvbWUgaW52YWxpZCB1bmxlc3Mgd2Ugc2V0IGl0IGhlcmUuICBOT1RFOiBUaGlzIGlzIGEKKyAgICogYml0IG9kZCwgc2luY2UgInJvd3NfdG9fZ28iIHNlZW1zIHRvIGJlIHJlZHVuZGFudGx5IGtlZXBpbmcgdHJhY2sgb2YKKyAgICogb3V0cHV0X3NjYW5saW5lLgorICAgKi8KKyAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gPSBjaW5mby0+b3V0cHV0X2hlaWdodCAtIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisKKyAgLyogQWx3YXlzIHNraXAgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgbGluZXMuICovCisgIHJldHVybiBudW1fbGluZXM7Cit9CisKKy8qCisgKiBBbHRlcm5hdGUgZW50cnkgcG9pbnQgdG8gcmVhZCByYXcgZGF0YS4KKyAqIFByb2Nlc3NlcyBleGFjdGx5IG9uZSBpTUNVIHJvdyBwZXIgY2FsbCwgdW5sZXNzIHN1c3BlbmRlZC4KKyAqLworCitHTE9CQUwoSkRJTUVOU0lPTikKK2pwZWdfcmVhZF9yYXdfZGF0YShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGRhdGEsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpCit7CisgIEpESU1FTlNJT04gbGluZXNfcGVyX2lNQ1Vfcm93OworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9SQVdfT0spCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgaWYgKGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPj0gY2luZm8tPm91dHB1dF9oZWlnaHQpIHsKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpY2luZm8tPm91dHB1dF9zY2FubGluZTsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZyljaW5mby0+b3V0cHV0X2hlaWdodDsKKyAgICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgYXQgbGVhc3Qgb25lIGlNQ1Ugcm93IGNhbiBiZSByZXR1cm5lZC4gKi8KKyAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOworICBpZiAobWF4X2xpbmVzIDwgbGluZXNfcGVyX2lNQ1Vfcm93KQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworCisgIC8qIERlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyJ3MgYnVmZmVyLiAqLworICBpZiAoISgqY2luZm8tPmNvZWYtPmRlY29tcHJlc3NfZGF0YSkgKGNpbmZvLCBkYXRhKSkKKyAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogc3VzcGVuc2lvbiBmb3JjZWQsIGNhbiBkbyBub3RoaW5nIG1vcmUgKi8KKworICAvKiBPSywgd2UgcHJvY2Vzc2VkIG9uZSBpTUNVIHJvdy4gKi8KKyAgY2luZm8tPm91dHB1dF9zY2FubGluZSArPSBsaW5lc19wZXJfaU1DVV9yb3c7CisgIHJldHVybiBsaW5lc19wZXJfaU1DVV9yb3c7Cit9CisKKworLyogQWRkaXRpb25hbCBlbnRyeSBwb2ludHMgZm9yIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovCisKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGFuIG91dHB1dCBwYXNzIGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUuCisgKi8KKworR0xPQkFMKGJvb2xlYW4pCitqcGVnX3N0YXJ0X291dHB1dChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgc2Nhbl9udW1iZXIpCit7CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9CVUZJTUFHRSAmJgorICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfUFJFU0NBTikKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICAvKiBMaW1pdCBzY2FuIG51bWJlciB0byB2YWxpZCByYW5nZSAqLworICBpZiAoc2Nhbl9udW1iZXIgPD0gMCkKKyAgICBzY2FuX251bWJlciA9IDE7CisgIGlmIChjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkICYmIHNjYW5fbnVtYmVyID4gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKQorICAgIHNjYW5fbnVtYmVyID0gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyOworICBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID0gc2Nhbl9udW1iZXI7CisgIC8qIFBlcmZvcm0gYW55IGR1bW15IG91dHB1dCBwYXNzZXMsIGFuZCBzZXQgdXAgZm9yIHRoZSByZWFsIHBhc3MgKi8KKyAgcmV0dXJuIG91dHB1dF9wYXNzX3NldHVwKGNpbmZvKTsKK30KKworCisvKgorICogRmluaXNoIHVwIGFmdGVyIGFuIG91dHB1dCBwYXNzIGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUuCisgKgorICogUmV0dXJucyBGQUxTRSBpZiBzdXNwZW5kZWQuICBUaGUgcmV0dXJuIHZhbHVlIG5lZWQgYmUgaW5zcGVjdGVkIG9ubHkgaWYKKyAqIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBpcyB1c2VkLgorICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19maW5pc2hfb3V0cHV0KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGlmICgoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfU0NBTk5JTkcgfHwKKyAgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9SQVdfT0spICYmIGNpbmZvLT5idWZmZXJlZF9pbWFnZSkgeworICAgIC8qIFRlcm1pbmF0ZSB0aGlzIHBhc3MuICovCisgICAgLyogV2UgZG8gbm90IHJlcXVpcmUgdGhlIHdob2xlIHBhc3MgdG8gaGF2ZSBiZWVuIGNvbXBsZXRlZC4gKi8KKyAgICAoKmNpbmZvLT5tYXN0ZXItPmZpbmlzaF9vdXRwdXRfcGFzcykgKGNpbmZvKTsKKyAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX0JVRlBPU1Q7CisgIH0gZWxzZSBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfQlVGUE9TVCkgeworICAgIC8qIEJVRlBPU1QgPSByZXBlYXQgY2FsbCBhZnRlciBhIHN1c3BlbnNpb24sIGFueXRoaW5nIGVsc2UgaXMgZXJyb3IgKi8KKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICB9CisgIC8qIFJlYWQgbWFya2VycyBsb29raW5nIGZvciBTT1Mgb3IgRU9JICovCisgIHdoaWxlIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPD0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlciAmJgorICAgICAgICAgIWNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQpIHsKKyAgICBpZiAoKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbykgPT0gSlBFR19TVVNQRU5ERUQpCisgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgIC8qIFN1c3BlbmQsIGNvbWUgYmFjayBsYXRlciAqLworICB9CisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGSU1BR0U7CisgIHJldHVybiBUUlVFOworfQorCisjZW5kaWYgLyogRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGFyaXRoLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGFyaXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3OTk1YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkYXJpdGguYwpAQCAtMCwwICsxLDc3MCBAQAorLyoKKyAqIGpkYXJpdGguYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogRGV2ZWxvcGVkIDE5OTctMjAxNSBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwb3J0YWJsZSBhcml0aG1ldGljIGVudHJvcHkgZGVjb2Rpbmcgcm91dGluZXMgZm9yIEpQRUcKKyAqIChpbXBsZW1lbnRpbmcgdGhlIElTTy9JRUMgSVMgMTA5MTgtMSBhbmQgQ0NJVFQgUmVjb21tZW5kYXRpb24gSVRVLVQgVC44MSkuCisgKgorICogQm90aCBzZXF1ZW50aWFsIGFuZCBwcm9ncmVzc2l2ZSBtb2RlcyBhcmUgc3VwcG9ydGVkIGluIHRoaXMgc2luZ2xlIG1vZHVsZS4KKyAqCisgKiBTdXNwZW5zaW9uIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIHRoaXMgbW9kdWxlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisjZGVmaW5lIE5FR18xICAoKHVuc2lnbmVkIGludCktMSkKKworCisvKiBFeHBhbmRlZCBlbnRyb3B5IGRlY29kZXIgb2JqZWN0IGZvciBhcml0aG1ldGljIGRlY29kaW5nLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBKTE9ORyBjOyAgICAgICAvKiBDIHJlZ2lzdGVyLCBiYXNlIG9mIGNvZGluZyBpbnRlcnZhbCArIGlucHV0IGJpdCBidWZmZXIgKi8KKyAgSkxPTkcgYTsgICAgICAgICAgICAgICAvKiBBIHJlZ2lzdGVyLCBub3JtYWxpemVkIHNpemUgb2YgY29kaW5nIGludGVydmFsICovCisgIGludCBjdDsgICAgIC8qIGJpdCBzaGlmdCBjb3VudGVyLCAjIG9mIGJpdHMgbGVmdCBpbiBiaXQgYnVmZmVyIHBhcnQgb2YgQyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdDogY3QgPSAtMTYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ1bjogY3QgPSAwLi43ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvcjogY3QgPSAtMSAqLworICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCisgIGludCBkY19jb250ZXh0W01BWF9DT01QU19JTl9TQ0FOXTsgLyogY29udGV4dCBpbmRleCBmb3IgREMgY29uZGl0aW9uaW5nICovCisKKyAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOyAgLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworCisgIC8qIFBvaW50ZXJzIHRvIHN0YXRpc3RpY3MgYXJlYXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KKyAgdW5zaWduZWQgY2hhciAqZGNfc3RhdHNbTlVNX0FSSVRIX1RCTFNdOworICB1bnNpZ25lZCBjaGFyICphY19zdGF0c1tOVU1fQVJJVEhfVEJMU107CisKKyAgLyogU3RhdGlzdGljcyBiaW4gZm9yIGNvZGluZyB3aXRoIGZpeGVkIHByb2JhYmlsaXR5IDAuNSAqLworICB1bnNpZ25lZCBjaGFyIGZpeGVkX2Jpbls0XTsKK30gYXJpdGhfZW50cm9weV9kZWNvZGVyOworCit0eXBlZGVmIGFyaXRoX2VudHJvcHlfZGVjb2RlciAqYXJpdGhfZW50cm9weV9wdHI7CisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGRlZmluaXRpb25zIHNwZWNpZnkgdGhlIGFsbG9jYXRpb24gY2h1bmsgc2l6ZQorICogZm9yIHRoZSBzdGF0aXN0aWNzIGFyZWEuCisgKiBBY2NvcmRpbmcgdG8gc2VjdGlvbnMgRi4xLjQuNC4xLjMgYW5kIEYuMS40LjQuMiwgd2UgbmVlZCBhdCBsZWFzdAorICogNDkgc3RhdGlzdGljcyBiaW5zIGZvciBEQywgYW5kIDI0NSBzdGF0aXN0aWNzIGJpbnMgZm9yIEFDIGNvZGluZy4KKyAqCisgKiBXZSB1c2UgYSBjb21wYWN0IHJlcHJlc2VudGF0aW9uIHdpdGggMSBieXRlIHBlciBzdGF0aXN0aWNzIGJpbiwKKyAqIHRodXMgdGhlIG51bWJlcnMgZGlyZWN0bHkgcmVwcmVzZW50IGJ5dGUgc2l6ZXMuCisgKiBUaGlzIDEgYnl0ZSBwZXIgc3RhdGlzdGljcyBiaW4gY29udGFpbnMgdGhlIG1lYW5pbmcgb2YgdGhlIE1QUworICogKG1vcmUgcHJvYmFibGUgc3ltYm9sKSBpbiB0aGUgaGlnaGVzdCBiaXQgKG1hc2sgMHg4MCksIGFuZCB0aGUKKyAqIGluZGV4IGludG8gdGhlIHByb2JhYmlsaXR5IGVzdGltYXRpb24gc3RhdGUgbWFjaGluZSB0YWJsZQorICogaW4gdGhlIGxvd2VyIGJpdHMgKG1hc2sgMHg3RikuCisgKi8KKworI2RlZmluZSBEQ19TVEFUX0JJTlMgIDY0CisjZGVmaW5lIEFDX1NUQVRfQklOUyAgMjU2CisKKworTE9DQUwoaW50KQorZ2V0X2J5dGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFJlYWQgbmV4dCBpbnB1dCBieXRlOyB3ZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5zaW9uIGluIHRoaXMgbW9kdWxlLiAqLworeworICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICpzcmMgPSBjaW5mby0+c3JjOworCisgIGlmIChzcmMtPmJ5dGVzX2luX2J1ZmZlciA9PSAwKQorICAgIGlmICghKCpzcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworICBzcmMtPmJ5dGVzX2luX2J1ZmZlci0tOworICByZXR1cm4gR0VUSk9DVEVUKCpzcmMtPm5leHRfaW5wdXRfYnl0ZSsrKTsKK30KKworCisvKgorICogVGhlIGNvcmUgYXJpdGhtZXRpYyBkZWNvZGluZyByb3V0aW5lIChjb21tb24gaW4gSlBFRyBhbmQgSkJJRykuCisgKiBUaGlzIG5lZWRzIHRvIGdvIGFzIGZhc3QgYXMgcG9zc2libGUuCisgKiBNYWNoaW5lLWRlcGVuZGVudCBvcHRpbWl6YXRpb24gZmFjaWxpdGllcworICogYXJlIG5vdCB1dGlsaXplZCBpbiB0aGlzIHBvcnRhYmxlIGltcGxlbWVudGF0aW9uLgorICogSG93ZXZlciwgdGhpcyBjb2RlIHNob3VsZCBiZSBmYWlybHkgZWZmaWNpZW50IGFuZAorICogbWF5IGJlIGEgZ29vZCBiYXNlIGZvciBmdXJ0aGVyIG9wdGltaXphdGlvbnMgYW55d2F5LgorICoKKyAqIFJldHVybiB2YWx1ZSBpcyAwIG9yIDEgKGJpbmFyeSBkZWNpc2lvbikuCisgKgorICogTm90ZTogSSd2ZSBjaGFuZ2VkIHRoZSBoYW5kbGluZyBvZiB0aGUgY29kZSBiYXNlICYgYml0CisgKiBidWZmZXIgcmVnaXN0ZXIgQyBjb21wYXJlZCB0byBvdGhlciBpbXBsZW1lbnRhdGlvbnMKKyAqIGJhc2VkIG9uIHRoZSBzdGFuZGFyZHMgbGF5b3V0ICYgcHJvY2VkdXJlcy4KKyAqIFdoaWxlIGl0IGFsc28gY29udGFpbnMgYm90aCB0aGUgYWN0dWFsIGJhc2Ugb2YgdGhlCisgKiBjb2RpbmcgaW50ZXJ2YWwgKDE2IGJpdHMpIGFuZCB0aGUgbmV4dC1iaXRzIGJ1ZmZlciwKKyAqIHRoZSBjdXQtcG9pbnQgYmV0d2VlbiB0aGVzZSB0d28gcGFydHMgaXMgZmxvYXRpbmcKKyAqIChpbnN0ZWFkIG9mIGZpeGVkKSB3aXRoIHRoZSBiaXQgc2hpZnQgY291bnRlciBDVC4KKyAqIFRodXMsIHdlIGFsc28gbmVlZCBvbmx5IG9uZSAodmFyaWFibGUgaW5zdGVhZCBvZgorICogZml4ZWQgc2l6ZSkgc2hpZnQgZm9yIHRoZSBMUFMvTVBTIGRlY2lzaW9uLCBhbmQKKyAqIHdlIGNhbiBkbyBhd2F5IHdpdGggYW55IHJlbm9ybWFsaXphdGlvbiB1cGRhdGUKKyAqIG9mIEMgKGV4Y2VwdCBmb3IgbmV3IGRhdGEgaW5zZXJ0aW9uLCBvZiBjb3Vyc2UpLgorICoKKyAqIEkndmUgYWxzbyBpbnRyb2R1Y2VkIGEgbmV3IHNjaGVtZSBmb3IgYWNjZXNzaW5nCisgKiB0aGUgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiBzdGF0ZSBtYWNoaW5lIHRhYmxlLAorICogZGVyaXZlZCBmcm9tIE1hcmt1cyBLdWhuJ3MgSkJJRyBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitMT0NBTChpbnQpCithcml0aF9kZWNvZGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgdW5zaWduZWQgY2hhciAqc3QpCit7CisgIHJlZ2lzdGVyIGFyaXRoX2VudHJvcHlfcHRyIGUgPSAoYXJpdGhfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgbmwsIG5tOworICByZWdpc3RlciBKTE9ORyBxZSwgdGVtcDsKKyAgcmVnaXN0ZXIgaW50IHN2LCBkYXRhOworCisgIC8qIFJlbm9ybWFsaXphdGlvbiAmIGRhdGEgaW5wdXQgcGVyIHNlY3Rpb24gRC4yLjYgKi8KKyAgd2hpbGUgKGUtPmEgPCAweDgwMDBMKSB7CisgICAgaWYgKC0tZS0+Y3QgPCAwKSB7CisgICAgICAvKiBOZWVkIHRvIGZldGNoIG5leHQgZGF0YSBieXRlICovCisgICAgICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIpCisgICAgICAgIGRhdGEgPSAwOyAgICAgICAgICAgICAgIC8qIHN0dWZmIHplcm8gZGF0YSAqLworICAgICAgZWxzZSB7CisgICAgICAgIGRhdGEgPSBnZXRfYnl0ZShjaW5mbyk7IC8qIHJlYWQgbmV4dCBpbnB1dCBieXRlICovCisgICAgICAgIGlmIChkYXRhID09IDB4RkYpIHsgICAgIC8qIHplcm8gc3R1ZmYgb3IgbWFya2VyIGNvZGUgKi8KKyAgICAgICAgICBkbyBkYXRhID0gZ2V0X2J5dGUoY2luZm8pOworICAgICAgICAgIHdoaWxlIChkYXRhID09IDB4RkYpOyAvKiBzd2FsbG93IGV4dHJhIDB4RkYgYnl0ZXMgKi8KKyAgICAgICAgICBpZiAoZGF0YSA9PSAwKQorICAgICAgICAgICAgZGF0YSA9IDB4RkY7ICAgICAgICAvKiBkaXNjYXJkIHN0dWZmZWQgemVybyBieXRlICovCisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBOb3RlOiBEaWZmZXJlbnQgZnJvbSB0aGUgSHVmZm1hbiBkZWNvZGVyLCBoaXR0aW5nCisgICAgICAgICAgICAgKiBhIG1hcmtlciB3aGlsZSBwcm9jZXNzaW5nIHRoZSBjb21wcmVzc2VkIGRhdGEKKyAgICAgICAgICAgICAqIHNlZ21lbnQgaXMgbGVnYWwgaW4gYXJpdGhtZXRpYyBjb2RpbmcuCisgICAgICAgICAgICAgKiBUaGUgY29udmVudGlvbiBpcyB0byBzdXBwbHkgemVybyBkYXRhCisgICAgICAgICAgICAgKiB0aGVuIHVudGlsIGRlY29kaW5nIGlzIGNvbXBsZXRlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGUtPmMgPSAoZS0+YyA8PCA4KSB8IGRhdGE7IC8qIGluc2VydCBkYXRhIGludG8gQyByZWdpc3RlciAqLworICAgICAgaWYgKChlLT5jdCArPSA4KSA8IDApICAgICAgLyogdXBkYXRlIGJpdCBzaGlmdCBjb3VudGVyICovCisgICAgICAgIC8qIE5lZWQgbW9yZSBpbml0aWFsIGJ5dGVzICovCisgICAgICAgIGlmICgrK2UtPmN0ID09IDApCisgICAgICAgICAgLyogR290IDIgaW5pdGlhbCBieXRlcyAtPiByZS1pbml0IEEgYW5kIGV4aXQgbG9vcCAqLworICAgICAgICAgIGUtPmEgPSAweDgwMDBMOyAvKiA9PiBlLT5hID0gMHgxMDAwMEwgYWZ0ZXIgbG9vcCBleGl0ICovCisgICAgfQorICAgIGUtPmEgPDw9IDE7CisgIH0KKworICAvKiBGZXRjaCB2YWx1ZXMgZnJvbSBvdXIgY29tcGFjdCByZXByZXNlbnRhdGlvbiBvZiBUYWJsZSBELjI6CisgICAqIFFlIHZhbHVlcyBhbmQgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiBzdGF0ZSBtYWNoaW5lCisgICAqLworICBzdiA9ICpzdDsKKyAgcWUgPSBqcGVnX2FyaXRhYltzdiAmIDB4N0ZdOyAgLyogPT4gUWVfVmFsdWUgKi8KKyAgbmwgPSBxZSAmIDB4RkY7ICBxZSA+Pj0gODsgICAgLyogTmV4dF9JbmRleF9MUFMgKyBTd2l0Y2hfTVBTICovCisgIG5tID0gcWUgJiAweEZGOyAgcWUgPj49IDg7ICAgIC8qIE5leHRfSW5kZXhfTVBTICovCisKKyAgLyogRGVjb2RlICYgZXN0aW1hdGlvbiBwcm9jZWR1cmVzIHBlciBzZWN0aW9ucyBELjIuNCAmIEQuMi41ICovCisgIHRlbXAgPSBlLT5hIC0gcWU7CisgIGUtPmEgPSB0ZW1wOworICB0ZW1wIDw8PSBlLT5jdDsKKyAgaWYgKGUtPmMgPj0gdGVtcCkgeworICAgIGUtPmMgLT0gdGVtcDsKKyAgICAvKiBDb25kaXRpb25hbCBMUFMgKGxlc3MgcHJvYmFibGUgc3ltYm9sKSBleGNoYW5nZSAqLworICAgIGlmIChlLT5hIDwgcWUpIHsKKyAgICAgIGUtPmEgPSBxZTsKKyAgICAgICpzdCA9IChzdiAmIDB4ODApIF4gbm07ICAgLyogRXN0aW1hdGVfYWZ0ZXJfTVBTICovCisgICAgfSBlbHNlIHsKKyAgICAgIGUtPmEgPSBxZTsKKyAgICAgICpzdCA9IChzdiAmIDB4ODApIF4gbmw7ICAgLyogRXN0aW1hdGVfYWZ0ZXJfTFBTICovCisgICAgICBzdiBePSAweDgwOyAgICAgICAgICAgICAgIC8qIEV4Y2hhbmdlIExQUy9NUFMgKi8KKyAgICB9CisgIH0gZWxzZSBpZiAoZS0+YSA8IDB4ODAwMEwpIHsKKyAgICAvKiBDb25kaXRpb25hbCBNUFMgKG1vcmUgcHJvYmFibGUgc3ltYm9sKSBleGNoYW5nZSAqLworICAgIGlmIChlLT5hIDwgcWUpIHsKKyAgICAgICpzdCA9IChzdiAmIDB4ODApIF4gbmw7ICAgLyogRXN0aW1hdGVfYWZ0ZXJfTFBTICovCisgICAgICBzdiBePSAweDgwOyAgICAgICAgICAgICAgIC8qIEV4Y2hhbmdlIExQUy9NUFMgKi8KKyAgICB9IGVsc2UgeworICAgICAgKnN0ID0gKHN2ICYgMHg4MCkgXiBubTsgICAvKiBFc3RpbWF0ZV9hZnRlcl9NUFMgKi8KKyAgICB9CisgIH0KKworICByZXR1cm4gc3YgPj4gNzsKK30KKworCisvKgorICogQ2hlY2sgZm9yIGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIGRlY29kZXIuCisgKi8KKworTE9DQUwodm9pZCkKK3Byb2Nlc3NfcmVzdGFydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWR2YW5jZSBwYXN0IHRoZSBSU1RuIG1hcmtlciAqLworICBpZiAoISgqY2luZm8tPm1hcmtlci0+cmVhZF9yZXN0YXJ0X21hcmtlcikgKGNpbmZvKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7CisKKyAgLyogUmUtaW5pdGlhbGl6ZSBzdGF0aXN0aWNzIGFyZWFzICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBpZiAoIWNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlIHx8IChjaW5mby0+U3MgPT0gMCAmJiBjaW5mby0+QWggPT0gMCkpIHsKKyAgICAgIE1FTVpFUk8oZW50cm9weS0+ZGNfc3RhdHNbY29tcHB0ci0+ZGNfdGJsX25vXSwgRENfU1RBVF9CSU5TKTsKKyAgICAgIC8qIFJlc2V0IERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgICAgIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7CisgICAgfQorICAgIGlmICghY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwgY2luZm8tPlNzKSB7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmFjX3N0YXRzW2NvbXBwdHItPmFjX3RibF9ub10sIEFDX1NUQVRfQklOUyk7CisgICAgfQorICB9CisKKyAgLyogUmVzZXQgYXJpdGhtZXRpYyBkZWNvZGluZyB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+YyA9IDA7CisgIGVudHJvcHktPmEgPSAwOworICBlbnRyb3B5LT5jdCA9IC0xNjsgICAgLyogZm9yY2UgcmVhZGluZyAyIGluaXRpYWwgYnl0ZXMgdG8gZmlsbCBDICovCisKKyAgLyogUmVzZXQgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Cit9CisKKworLyoKKyAqIEFyaXRobWV0aWMgTUNVIGRlY29kaW5nLgorICogRWFjaCBvZiB0aGVzZSByb3V0aW5lcyBkZWNvZGVzIGFuZCByZXR1cm5zIG9uZSBNQ1UncyB3b3J0aCBvZgorICogYXJpdGhtZXRpYy1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4KKyAqIFRoZSBjb2VmZmljaWVudHMgYXJlIHJlb3JkZXJlZCBmcm9tIHppZ3phZyBvcmRlciBpbnRvIG5hdHVyYWwgYXJyYXkgb3JkZXIsCisgKiBidXQgYXJlIG5vdCBkZXF1YW50aXplZC4KKyAqCisgKiBUaGUgaSd0aCBibG9jayBvZiB0aGUgTUNVIGlzIHN0b3JlZCBpbnRvIHRoZSBibG9jayBwb2ludGVkIHRvIGJ5CisgKiBNQ1VfZGF0YVtpXS4gIFdFIEFTU1VNRSBUSElTIEFSRUEgSVMgSU5JVElBTExZIFpFUk9FRCBCWSBUSEUgQ0FMTEVSLgorICovCisKKy8qCisgKiBNQ1UgZGVjb2RpbmcgZm9yIERDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwKKyAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2RlY29kZV9tY3VfRENfZmlyc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgYXJpdGhfZW50cm9weV9wdHIgZW50cm9weSA9IChhcml0aF9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgSkJMT0NLUk9XIGJsb2NrOworICB1bnNpZ25lZCBjaGFyICpzdDsKKyAgaW50IGJsa24sIGNpLCB0YmwsIHNpZ247CisgIGludCB2LCBtOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKTsKKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgaWYgKGVudHJvcHktPmN0ID09IC0xKSByZXR1cm4gVFJVRTsgICAvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCisKKyAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLworCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKyAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICB0YmwgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0tPmRjX3RibF9ubzsKKworICAgIC8qIFNlY3Rpb25zIEYuMi40LjEgJiBGLjEuNC40LjE6IERlY29kaW5nIG9mIERDIGNvZWZmaWNpZW50cyAqLworCisgICAgLyogVGFibGUgRi40OiBQb2ludCB0byBzdGF0aXN0aWNzIGJpbiBTMCBmb3IgREMgY29lZmZpY2llbnQgY29kaW5nICovCisgICAgc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgZW50cm9weS0+ZGNfY29udGV4dFtjaV07CisKKyAgICAvKiBGaWd1cmUgRi4xOTogRGVjb2RlX0RDX0RJRkYgKi8KKyAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkgPT0gMCkKKyAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsKKyAgICBlbHNlIHsKKyAgICAgIC8qIEZpZ3VyZSBGLjIxOiBEZWNvZGluZyBub256ZXJvIHZhbHVlIHYgKi8KKyAgICAgIC8qIEZpZ3VyZSBGLjIyOiBEZWNvZGluZyB0aGUgc2lnbiBvZiB2ICovCisgICAgICBzaWduID0gYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDEpOworICAgICAgc3QgKz0gMjsgIHN0ICs9IHNpZ247CisgICAgICAvKiBGaWd1cmUgRi4yMzogRGVjb2RpbmcgdGhlIG1hZ25pdHVkZSBjYXRlZ29yeSBvZiB2ICovCisgICAgICBpZiAoKG0gPSBhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgIT0gMCkgeworICAgICAgICBzdCA9IGVudHJvcHktPmRjX3N0YXRzW3RibF0gKyAyMDsgICAgICAgLyogVGFibGUgRi40OiBYMSA9IDIwICovCisgICAgICAgIHdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgeworICAgICAgICAgIGlmICgobSA8PD0gMSkgPT0gMHg4MDAwKSB7CisgICAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgICAgZW50cm9weS0+Y3QgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogbWFnbml0dWRlIG92ZXJmbG93ICovCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogU2VjdGlvbiBGLjEuNC40LjEuMjogRXN0YWJsaXNoIGRjX2NvbnRleHQgY29uZGl0aW9uaW5nIGNhdGVnb3J5ICovCisgICAgICBpZiAobSA8IChpbnQpKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfTFt0YmxdKSA+PiAxKSkKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOyAgICAgICAgICAgICAgIC8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLworICAgICAgZWxzZSBpZiAobSA+IChpbnQpKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAxMiArIChzaWduICogNCk7IC8qIGxhcmdlIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIGVsc2UKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSA0ICsgKHNpZ24gKiA0KTsgIC8qIHNtYWxsIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIHYgPSBtOworICAgICAgLyogRmlndXJlIEYuMjQ6IERlY29kaW5nIHRoZSBtYWduaXR1ZGUgYml0IHBhdHRlcm4gb2YgdiAqLworICAgICAgc3QgKz0gMTQ7CisgICAgICB3aGlsZSAobSA+Pj0gMSkKKyAgICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CisgICAgICB2ICs9IDE7ICBpZiAoc2lnbikgdiA9IC12OworICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gKGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSArIHYpICYgMHhmZmZmOworICAgIH0KKworICAgIC8qIFNjYWxlIGFuZCBvdXRwdXQgdGhlIERDIGNvZWZmaWNpZW50IChhc3N1bWVzIGpwZWdfbmF0dXJhbF9vcmRlclswXT0wKSAqLworICAgICgqYmxvY2spWzBdID0gKEpDT0VGKUxFRlRfU0hJRlQoZW50cm9weS0+bGFzdF9kY192YWxbY2ldLCBjaW5mby0+QWwpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBkZWNvZGluZyBmb3IgQUMgaW5pdGlhbCBzY2FuIChlaXRoZXIgc3BlY3RyYWwgc2VsZWN0aW9uLAorICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZGVjb2RlX21jdV9BQ19maXJzdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBKQkxPQ0tST1cgYmxvY2s7CisgIHVuc2lnbmVkIGNoYXIgKnN0OworICBpbnQgdGJsLCBzaWduLCBrOworICBpbnQgdiwgbTsKKworICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIHByb2Nlc3NfcmVzdGFydChjaW5mbyk7CisgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKyAgfQorCisgIGlmIChlbnRyb3B5LT5jdCA9PSAtMSkgcmV0dXJuIFRSVUU7ICAgLyogaWYgZXJyb3IgZG8gbm90aGluZyAqLworCisgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCisgIGJsb2NrID0gTUNVX2RhdGFbMF07CisgIHRibCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5hY190Ymxfbm87CisKKyAgLyogU2VjdGlvbnMgRi4yLjQuMiAmIEYuMS40LjQuMjogRGVjb2Rpbmcgb2YgQUMgY29lZmZpY2llbnRzICovCisKKyAgLyogRmlndXJlIEYuMjA6IERlY29kZV9BQ19jb2VmZmljaWVudHMgKi8KKyAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IGNpbmZvLT5TZTsgaysrKSB7CisgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CisgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSBicmVhazsgICAgICAgICAvKiBFT0IgZmxhZyAqLworICAgIHdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0ICsgMSkgPT0gMCkgeworICAgICAgc3QgKz0gMzsgIGsrKzsKKyAgICAgIGlmIChrID4gY2luZm8tPlNlKSB7CisgICAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9BUklUSF9CQURfQ09ERSk7CisgICAgICAgIGVudHJvcHktPmN0ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzcGVjdHJhbCBvdmVyZmxvdyAqLworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogRmlndXJlIEYuMjE6IERlY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLworICAgIC8qIEZpZ3VyZSBGLjIyOiBEZWNvZGluZyB0aGUgc2lnbiBvZiB2ICovCisgICAgc2lnbiA9IGFyaXRoX2RlY29kZShjaW5mbywgZW50cm9weS0+Zml4ZWRfYmluKTsKKyAgICBzdCArPSAyOworICAgIC8qIEZpZ3VyZSBGLjIzOiBEZWNvZGluZyB0aGUgbWFnbml0dWRlIGNhdGVnb3J5IG9mIHYgKi8KKyAgICBpZiAoKG0gPSBhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgIT0gMCkgeworICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB7CisgICAgICAgIG0gPDw9IDE7CisgICAgICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArCisgICAgICAgICAgICAgKGsgPD0gY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA/IDE4OSA6IDIxNyk7CisgICAgICAgIHdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgeworICAgICAgICAgIGlmICgobSA8PD0gMSkgPT0gMHg4MDAwKSB7CisgICAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgICAgZW50cm9weS0+Y3QgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogbWFnbml0dWRlIG92ZXJmbG93ICovCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICB2ID0gbTsKKyAgICAvKiBGaWd1cmUgRi4yNDogRGVjb2RpbmcgdGhlIG1hZ25pdHVkZSBiaXQgcGF0dGVybiBvZiB2ICovCisgICAgc3QgKz0gMTQ7CisgICAgd2hpbGUgKG0gPj49IDEpCisgICAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIHYgfD0gbTsKKyAgICB2ICs9IDE7ICBpZiAoc2lnbikgdiA9IC12OworICAgIC8qIFNjYWxlIGFuZCBvdXRwdXQgY29lZmZpY2llbnQgaW4gbmF0dXJhbCAoZGV6aWd6YWdnZWQpIG9yZGVyICovCisgICAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikoKHVuc2lnbmVkKXYgPDwgY2luZm8tPkFsKTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBNQ1UgZGVjb2RpbmcgZm9yIERDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW4uCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1X0RDX3JlZmluZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICB1bnNpZ25lZCBjaGFyICpzdDsKKyAgaW50IHAxLCBibGtuOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKTsKKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgc3QgPSBlbnRyb3B5LT5maXhlZF9iaW47ICAgICAgLyogdXNlIGZpeGVkIHByb2JhYmlsaXR5IGVzdGltYXRpb24gKi8KKyAgcDEgPSAxIDw8IGNpbmZvLT5BbDsgICAgICAgICAgLyogMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisKKyAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLworCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgLyogRW5jb2RlZCBkYXRhIGlzIHNpbXBseSB0aGUgbmV4dCBiaXQgb2YgdGhlIHR3bydzLWNvbXBsZW1lbnQgREMgdmFsdWUgKi8KKyAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpCisgICAgICBNQ1VfZGF0YVtibGtuXVswXVswXSB8PSBwMTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBNQ1UgZGVjb2RpbmcgZm9yIEFDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW4uCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1X0FDX3JlZmluZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBKQkxPQ0tST1cgYmxvY2s7CisgIEpDT0VGUFRSIHRoaXNjb2VmOworICB1bnNpZ25lZCBjaGFyICpzdDsKKyAgaW50IHRibCwgaywga2V4OworICBpbnQgcDEsIG0xOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKTsKKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgaWYgKGVudHJvcHktPmN0ID09IC0xKSByZXR1cm4gVFJVRTsgICAvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCisKKyAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8KKyAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKKyAgdGJsID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPmFjX3RibF9ubzsKKworICBwMSA9IDEgPDwgY2luZm8tPkFsOyAgICAgICAgICAvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KKyAgbTEgPSAoTkVHXzEpIDw8IGNpbmZvLT5BbDsgICAgLyogLTEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworCisgIC8qIEVzdGFibGlzaCBFT0J4IChwcmV2aW91cyBzdGFnZSBlbmQtb2YtYmxvY2spIGluZGV4ICovCisgIGZvciAoa2V4ID0gY2luZm8tPlNlOyBrZXggPiAwOyBrZXgtLSkKKyAgICBpZiAoKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tleF1dKSBicmVhazsKKworICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gY2luZm8tPlNlOyBrKyspIHsKKyAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKyAzICogKGsgLSAxKTsKKyAgICBpZiAoayA+IGtleCkKKyAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgYnJlYWs7ICAgICAgIC8qIEVPQiBmbGFnICovCisgICAgZm9yICg7OykgeworICAgICAgdGhpc2NvZWYgPSAqYmxvY2sgKyBqcGVnX25hdHVyYWxfb3JkZXJba107CisgICAgICBpZiAoKnRoaXNjb2VmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmV2aW91c2x5IG5vbnplcm8gY29lZiAqLworICAgICAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDIpKSB7CisgICAgICAgICAgaWYgKCp0aGlzY29lZiA8IDApCisgICAgICAgICAgICAqdGhpc2NvZWYgKz0gbTE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgKnRoaXNjb2VmICs9IHAxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QgKyAxKSkgeyAgICAgICAgLyogbmV3bHkgbm9uemVybyBjb2VmICovCisgICAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbikpCisgICAgICAgICAgKnRoaXNjb2VmID0gbTE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAqdGhpc2NvZWYgPSBwMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdCArPSAzOyAgaysrOworICAgICAgaWYgKGsgPiBjaW5mby0+U2UpIHsKKyAgICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKKyAgICAgICAgZW50cm9weS0+Y3QgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZWN0cmFsIG92ZXJmbG93ICovCisgICAgICAgIHJldHVybiBUUlVFOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBEZWNvZGUgb25lIE1DVSdzIHdvcnRoIG9mIGFyaXRobWV0aWMtY29tcHJlc3NlZCBjb2VmZmljaWVudHMuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIGFyaXRoX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoYXJpdGhfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpCTE9DS1JPVyBibG9jazsKKyAgdW5zaWduZWQgY2hhciAqc3Q7CisgIGludCBibGtuLCBjaSwgdGJsLCBzaWduLCBrOworICBpbnQgdiwgbTsKKworICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIHByb2Nlc3NfcmVzdGFydChjaW5mbyk7CisgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKyAgfQorCisgIGlmIChlbnRyb3B5LT5jdCA9PSAtMSkgcmV0dXJuIFRSVUU7ICAgLyogaWYgZXJyb3IgZG8gbm90aGluZyAqLworCisgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KKworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIGJsb2NrID0gTUNVX2RhdGEgPyBNQ1VfZGF0YVtibGtuXSA6IE5VTEw7CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKworICAgIC8qIFNlY3Rpb25zIEYuMi40LjEgJiBGLjEuNC40LjE6IERlY29kaW5nIG9mIERDIGNvZWZmaWNpZW50cyAqLworCisgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworCisgICAgLyogVGFibGUgRi40OiBQb2ludCB0byBzdGF0aXN0aWNzIGJpbiBTMCBmb3IgREMgY29lZmZpY2llbnQgY29kaW5nICovCisgICAgc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgZW50cm9weS0+ZGNfY29udGV4dFtjaV07CisKKyAgICAvKiBGaWd1cmUgRi4xOTogRGVjb2RlX0RDX0RJRkYgKi8KKyAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkgPT0gMCkKKyAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsKKyAgICBlbHNlIHsKKyAgICAgIC8qIEZpZ3VyZSBGLjIxOiBEZWNvZGluZyBub256ZXJvIHZhbHVlIHYgKi8KKyAgICAgIC8qIEZpZ3VyZSBGLjIyOiBEZWNvZGluZyB0aGUgc2lnbiBvZiB2ICovCisgICAgICBzaWduID0gYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDEpOworICAgICAgc3QgKz0gMjsgIHN0ICs9IHNpZ247CisgICAgICAvKiBGaWd1cmUgRi4yMzogRGVjb2RpbmcgdGhlIG1hZ25pdHVkZSBjYXRlZ29yeSBvZiB2ICovCisgICAgICBpZiAoKG0gPSBhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgIT0gMCkgeworICAgICAgICBzdCA9IGVudHJvcHktPmRjX3N0YXRzW3RibF0gKyAyMDsgICAgICAgLyogVGFibGUgRi40OiBYMSA9IDIwICovCisgICAgICAgIHdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgeworICAgICAgICAgIGlmICgobSA8PD0gMSkgPT0gMHg4MDAwKSB7CisgICAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgICAgZW50cm9weS0+Y3QgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogbWFnbml0dWRlIG92ZXJmbG93ICovCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogU2VjdGlvbiBGLjEuNC40LjEuMjogRXN0YWJsaXNoIGRjX2NvbnRleHQgY29uZGl0aW9uaW5nIGNhdGVnb3J5ICovCisgICAgICBpZiAobSA8IChpbnQpKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfTFt0YmxdKSA+PiAxKSkKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOyAgICAgICAgICAgICAgIC8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLworICAgICAgZWxzZSBpZiAobSA+IChpbnQpKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAxMiArIChzaWduICogNCk7IC8qIGxhcmdlIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIGVsc2UKKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSA0ICsgKHNpZ24gKiA0KTsgIC8qIHNtYWxsIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIHYgPSBtOworICAgICAgLyogRmlndXJlIEYuMjQ6IERlY29kaW5nIHRoZSBtYWduaXR1ZGUgYml0IHBhdHRlcm4gb2YgdiAqLworICAgICAgc3QgKz0gMTQ7CisgICAgICB3aGlsZSAobSA+Pj0gMSkKKyAgICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CisgICAgICB2ICs9IDE7ICBpZiAoc2lnbikgdiA9IC12OworICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gKGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSArIHYpICYgMHhmZmZmOworICAgIH0KKworICAgIGlmIChibG9jaykKKyAgICAgICgqYmxvY2spWzBdID0gKEpDT0VGKWVudHJvcHktPmxhc3RfZGNfdmFsW2NpXTsKKworICAgIC8qIFNlY3Rpb25zIEYuMi40LjIgJiBGLjEuNC40LjI6IERlY29kaW5nIG9mIEFDIGNvZWZmaWNpZW50cyAqLworCisgICAgdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOworCisgICAgLyogRmlndXJlIEYuMjA6IERlY29kZV9BQ19jb2VmZmljaWVudHMgKi8KKyAgICBmb3IgKGsgPSAxOyBrIDw9IERDVFNJWkUyIC0gMTsgaysrKSB7CisgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKyAzICogKGsgLSAxKTsKKyAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgYnJlYWs7ICAgICAgIC8qIEVPQiBmbGFnICovCisgICAgICB3aGlsZSAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDEpID09IDApIHsKKyAgICAgICAgc3QgKz0gMzsgIGsrKzsKKyAgICAgICAgaWYgKGsgPiBEQ1RTSVpFMiAtIDEpIHsKKyAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgIGVudHJvcHktPmN0ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgLyogc3BlY3RyYWwgb3ZlcmZsb3cgKi8KKyAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogRmlndXJlIEYuMjE6IERlY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLworICAgICAgLyogRmlndXJlIEYuMjI6IERlY29kaW5nIHRoZSBzaWduIG9mIHYgKi8KKyAgICAgIHNpZ24gPSBhcml0aF9kZWNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2Jpbik7CisgICAgICBzdCArPSAyOworICAgICAgLyogRmlndXJlIEYuMjM6IERlY29kaW5nIHRoZSBtYWduaXR1ZGUgY2F0ZWdvcnkgb2YgdiAqLworICAgICAgaWYgKChtID0gYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpICE9IDApIHsKKyAgICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB7CisgICAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKworICAgICAgICAgICAgICAgKGsgPD0gY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA/IDE4OSA6IDIxNyk7CisgICAgICAgICAgd2hpbGUgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB7CisgICAgICAgICAgICBpZiAoKG0gPDw9IDEpID09IDB4ODAwMCkgeworICAgICAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgICAgICBlbnRyb3B5LT5jdCA9IC0xOyAgICAgICAgICAgICAgICAgLyogbWFnbml0dWRlIG92ZXJmbG93ICovCisgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHYgPSBtOworICAgICAgLyogRmlndXJlIEYuMjQ6IERlY29kaW5nIHRoZSBtYWduaXR1ZGUgYml0IHBhdHRlcm4gb2YgdiAqLworICAgICAgc3QgKz0gMTQ7CisgICAgICB3aGlsZSAobSA+Pj0gMSkKKyAgICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CisgICAgICB2ICs9IDE7ICBpZiAoc2lnbikgdiA9IC12OworICAgICAgaWYgKGJsb2NrKQorICAgICAgICAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKXY7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGFuIGFyaXRobWV0aWMtY29tcHJlc3NlZCBzY2FuLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBpbnQgY2ksIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpIHsKKyAgICAvKiBWYWxpZGF0ZSBwcm9ncmVzc2l2ZSBzY2FuIHBhcmFtZXRlcnMgKi8KKyAgICBpZiAoY2luZm8tPlNzID09IDApIHsKKyAgICAgIGlmIChjaW5mby0+U2UgIT0gMCkKKyAgICAgICAgZ290byBiYWQ7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIG5lZWQgbm90IGNoZWNrIFNzL1NlIDwgMCBzaW5jZSB0aGV5IGNhbWUgZnJvbSB1bnNpZ25lZCBieXRlcyAqLworICAgICAgaWYgKGNpbmZvLT5TZSA8IGNpbmZvLT5TcyB8fCBjaW5mby0+U2UgPiBEQ1RTSVpFMiAtIDEpCisgICAgICAgIGdvdG8gYmFkOworICAgICAgLyogQUMgc2NhbnMgbWF5IGhhdmUgb25seSBvbmUgY29tcG9uZW50ICovCisgICAgICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gIT0gMSkKKyAgICAgICAgZ290byBiYWQ7CisgICAgfQorICAgIGlmIChjaW5mby0+QWggIT0gMCkgeworICAgICAgLyogU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2NhbjogbXVzdCBoYXZlIEFsID0gQWgtMS4gKi8KKyAgICAgIGlmIChjaW5mby0+QWggLSAxICE9IGNpbmZvLT5BbCkKKyAgICAgICAgZ290byBiYWQ7CisgICAgfQorICAgIGlmIChjaW5mby0+QWwgPiAxMykgeyAgICAgICAvKiBuZWVkIG5vdCBjaGVjayBmb3IgPCAwICovCitiYWQ6CisgICAgICBFUlJFWElUNChjaW5mbywgSkVSUl9CQURfUFJPR1JFU1NJT04sCisgICAgICAgICAgICAgICBjaW5mby0+U3MsIGNpbmZvLT5TZSwgY2luZm8tPkFoLCBjaW5mby0+QWwpOworICAgIH0KKyAgICAvKiBVcGRhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzLCBhbmQgdmVyaWZ5IHRoYXQgc2NhbiBvcmRlciBpcyBsZWdhbC4KKyAgICAgKiBOb3RlIHRoYXQgaW50ZXItc2NhbiBpbmNvbnNpc3RlbmNpZXMgYXJlIHRyZWF0ZWQgYXMgd2FybmluZ3MKKyAgICAgKiBub3QgZmF0YWwgZXJyb3JzIC4uLiBub3QgY2xlYXIgaWYgdGhpcyBpcyByaWdodCB3YXkgdG8gYmVoYXZlLgorICAgICAqLworICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgICBpbnQgY29lZmksIGNpbmRleCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXS0+Y29tcG9uZW50X2luZGV4OworICAgICAgaW50ICpjb2VmX2JpdF9wdHIgPSAmY2luZm8tPmNvZWZfYml0c1tjaW5kZXhdWzBdOworICAgICAgaWYgKGNpbmZvLT5TcyAmJiBjb2VmX2JpdF9wdHJbMF0gPCAwKSAvKiBBQyB3aXRob3V0IHByaW9yIERDIHNjYW4gKi8KKyAgICAgICAgV0FSTk1TMihjaW5mbywgSldSTl9CT0dVU19QUk9HUkVTU0lPTiwgY2luZGV4LCAwKTsKKyAgICAgIGZvciAoY29lZmkgPSBjaW5mby0+U3M7IGNvZWZpIDw9IGNpbmZvLT5TZTsgY29lZmkrKykgeworICAgICAgICBpbnQgZXhwZWN0ZWQgPSAoY29lZl9iaXRfcHRyW2NvZWZpXSA8IDApID8gMCA6IGNvZWZfYml0X3B0cltjb2VmaV07CisgICAgICAgIGlmIChjaW5mby0+QWggIT0gZXhwZWN0ZWQpCisgICAgICAgICAgV0FSTk1TMihjaW5mbywgSldSTl9CT0dVU19QUk9HUkVTU0lPTiwgY2luZGV4LCBjb2VmaSk7CisgICAgICAgIGNvZWZfYml0X3B0cltjb2VmaV0gPSBjaW5mby0+QWw7CisgICAgICB9CisgICAgfQorICAgIC8qIFNlbGVjdCBNQ1UgZGVjb2Rpbmcgcm91dGluZSAqLworICAgIGlmIChjaW5mby0+QWggPT0gMCkgeworICAgICAgaWYgKGNpbmZvLT5TcyA9PSAwKQorICAgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfZmlyc3Q7CisgICAgICBlbHNlCisgICAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19maXJzdDsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGNpbmZvLT5TcyA9PSAwKQorICAgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfcmVmaW5lOworICAgICAgZWxzZQorICAgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfQUNfcmVmaW5lOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBDaGVjayB0aGF0IHRoZSBzY2FuIHBhcmFtZXRlcnMgU3MsIFNlLCBBaC9BbCBhcmUgT0sgZm9yIHNlcXVlbnRpYWwgSlBFRy4KKyAgICAgKiBUaGlzIG91Z2h0IHRvIGJlIGFuIGVycm9yIGNvbmRpdGlvbiwgYnV0IHdlIG1ha2UgaXQgYSB3YXJuaW5nLgorICAgICAqLworICAgIGlmIChjaW5mby0+U3MgIT0gMCB8fCBjaW5mby0+QWggIT0gMCB8fCBjaW5mby0+QWwgIT0gMCB8fAorICAgICAgICAoY2luZm8tPlNlIDwgRENUU0laRTIgJiYgY2luZm8tPlNlICE9IERDVFNJWkUyIC0gMSkpCisgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fTk9UX1NFUVVFTlRJQUwpOworICAgIC8qIFNlbGVjdCBNQ1UgZGVjb2Rpbmcgcm91dGluZSAqLworICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdTsKKyAgfQorCisgIC8qIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSByZXF1ZXN0ZWQgc3RhdGlzdGljcyBhcmVhcyAqLworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgaWYgKCFjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSB8fCAoY2luZm8tPlNzID09IDAgJiYgY2luZm8tPkFoID09IDApKSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CisgICAgICBpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0FSSVRIX1RCTFMpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0FSSVRIX1RBQkxFLCB0YmwpOworICAgICAgaWYgKGVudHJvcHktPmRjX3N0YXRzW3RibF0gPT0gTlVMTCkKKyAgICAgICAgZW50cm9weS0+ZGNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIERDX1NUQVRfQklOUyk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmRjX3N0YXRzW3RibF0sIERDX1NUQVRfQklOUyk7CisgICAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgICAgIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7CisgICAgfQorICAgIGlmICghY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwgY2luZm8tPlNzKSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgICBpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0FSSVRIX1RCTFMpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0FSSVRIX1RBQkxFLCB0YmwpOworICAgICAgaWYgKGVudHJvcHktPmFjX3N0YXRzW3RibF0gPT0gTlVMTCkKKyAgICAgICAgZW50cm9weS0+YWNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIEFDX1NUQVRfQklOUyk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmFjX3N0YXRzW3RibF0sIEFDX1NUQVRfQklOUyk7CisgICAgfQorICB9CisKKyAgLyogSW5pdGlhbGl6ZSBhcml0aG1ldGljIGRlY29kaW5nIHZhcmlhYmxlcyAqLworICBlbnRyb3B5LT5jID0gMDsKKyAgZW50cm9weS0+YSA9IDA7CisgIGVudHJvcHktPmN0ID0gLTE2OyAgICAvKiBmb3JjZSByZWFkaW5nIDIgaW5pdGlhbCBieXRlcyB0byBmaWxsIEMgKi8KKworICAvKiBJbml0aWFsaXplIHJlc3RhcnQgY291bnRlciAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYXJpdGhtZXRpYyBlbnRyb3B5IGRlY29kaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfYXJpdGhfZGVjb2RlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBhcml0aF9lbnRyb3B5X3B0ciBlbnRyb3B5OworICBpbnQgaTsKKworICBlbnRyb3B5ID0gKGFyaXRoX2VudHJvcHlfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyaXRoX2VudHJvcHlfZGVjb2RlcikpOworICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKillbnRyb3B5OworICBlbnRyb3B5LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3M7CisKKyAgLyogTWFyayB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspIHsKKyAgICBlbnRyb3B5LT5kY19zdGF0c1tpXSA9IE5VTEw7CisgICAgZW50cm9weS0+YWNfc3RhdHNbaV0gPSBOVUxMOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBpbmRleCBmb3IgZml4ZWQgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiAqLworICBlbnRyb3B5LT5maXhlZF9iaW5bMF0gPSAxMTM7CisKKyAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisgICAgLyogQ3JlYXRlIHByb2dyZXNzaW9uIHN0YXR1cyB0YWJsZSAqLworICAgIGludCAqY29lZl9iaXRfcHRyLCBjaTsKKyAgICBjaW5mby0+Y29lZl9iaXRzID0gKGludCAoKilbRENUU0laRTJdKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqIERDVFNJWkUyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50KSk7CisgICAgY29lZl9iaXRfcHRyID0gJmNpbmZvLT5jb2VmX2JpdHNbMF1bMF07CisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKQorICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspCisgICAgICAgICpjb2VmX2JpdF9wdHIrKyA9IC0xOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGF0YWRzdC10ai5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhdGFkc3QtdGouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmQ5NjFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhdGFkc3QtdGouYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIGpkYXRhZHN0LXRqLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDktMjAxMiBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29tcHJlc3Npb24gZGF0YSBkZXN0aW5hdGlvbiByb3V0aW5lcyBmb3IgdGhlIGNhc2Ugb2YKKyAqIGVtaXR0aW5nIEpQRUcgZGF0YSB0byBtZW1vcnkgb3IgdG8gYSBmaWxlIChvciBhbnkgc3RkaW8gc3RyZWFtKS4KKyAqIFdoaWxlIHRoZXNlIHJvdXRpbmVzIGFyZSBzdWZmaWNpZW50IGZvciBtb3N0IGFwcGxpY2F0aW9ucywKKyAqIHNvbWUgd2lsbCB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBkZXN0aW5hdGlvbiBtYW5hZ2VyLgorICogSU1QT1JUQU5UOiB3ZSBhc3N1bWUgdGhhdCBmd3JpdGUoKSB3aWxsIGNvcnJlY3RseSB0cmFuc2NyaWJlIGFuIGFycmF5IG9mCisgKiBKT0NURVRzIGludG8gOC1iaXQtd2lkZSBlbGVtZW50cyBvbiBleHRlcm5hbCBzdG9yYWdlLiAgSWYgY2hhciBpcyB3aWRlcgorICogdGhhbiA4IGJpdHMgb24geW91ciBtYWNoaW5lLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZSB0d2Vha2luZy4KKyAqLworCisvKiB0aGlzIGlzIG5vdCBhIGNvcmUgbGlicmFyeSBtb2R1bGUsIHNvIGl0IGRvZXNuJ3QgZGVmaW5lIEpQRUdfSU5URVJOQUxTICovCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamVycm9yLmgiCisKKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSxmcmVlKCkgKi8KK2V4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpwdHIpOworI2VuZGlmCisKKworI2RlZmluZSBPVVRQVVRfQlVGX1NJWkUgIDQwOTYgICAvKiBjaG9vc2UgYW4gZWZmaWNpZW50bHkgZndyaXRlJ2FibGUgc2l6ZSAqLworCisKKy8qIEV4cGFuZGVkIGRhdGEgZGVzdGluYXRpb24gb2JqZWN0IGZvciBtZW1vcnkgb3V0cHV0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIHVuc2lnbmVkIGNoYXIgKipvdXRidWZmZXI7ICAgIC8qIHRhcmdldCBidWZmZXIgKi8KKyAgdW5zaWduZWQgbG9uZyAqb3V0c2l6ZTsKKyAgdW5zaWduZWQgY2hhciAqbmV3YnVmZmVyOyAgICAgLyogbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciAqLworICBKT0NURVQgKmJ1ZmZlcjsgICAgICAgICAgICAgICAvKiBzdGFydCBvZiBidWZmZXIgKi8KKyAgc2l6ZV90IGJ1ZnNpemU7CisgIGJvb2xlYW4gYWxsb2M7Cit9IG15X21lbV9kZXN0aW5hdGlvbl9tZ3I7CisKK3R5cGVkZWYgbXlfbWVtX2Rlc3RpbmF0aW9uX21nciAqbXlfbWVtX2Rlc3RfcHRyOworCisKKy8qCisgKiBJbml0aWFsaXplIGRlc3RpbmF0aW9uIC0tLSBjYWxsZWQgYnkganBlZ19zdGFydF9jb21wcmVzcworICogYmVmb3JlIGFueSBkYXRhIGlzIGFjdHVhbGx5IHdyaXR0ZW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitpbml0X21lbV9kZXN0aW5hdGlvbihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogbm8gd29yayBuZWNlc3NhcnkgaGVyZSAqLworfQorCisKKy8qCisgKiBFbXB0eSB0aGUgb3V0cHV0IGJ1ZmZlciAtLS0gY2FsbGVkIHdoZW5ldmVyIGJ1ZmZlciBmaWxscyB1cC4KKyAqCisgKiBJbiB0eXBpY2FsIGFwcGxpY2F0aW9ucywgdGhpcyBzaG91bGQgd3JpdGUgdGhlIGVudGlyZSBvdXRwdXQgYnVmZmVyCisgKiAoaWdub3JpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV4dF9vdXRwdXRfYnl0ZSAmIGZyZWVfaW5fYnVmZmVyKSwKKyAqIHJlc2V0IHRoZSBwb2ludGVyICYgY291bnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIsIGFuZCByZXR1cm4gVFJVRQorICogaW5kaWNhdGluZyB0aGF0IHRoZSBidWZmZXIgaGFzIGJlZW4gZHVtcGVkLgorICoKKyAqIEluIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWJsZSB0byBzdXNwZW5kIGNvbXByZXNzaW9uIGR1ZSB0byBvdXRwdXQKKyAqIG92ZXJydW4sIGEgRkFMU0UgcmV0dXJuIGluZGljYXRlcyB0aGF0IHRoZSBidWZmZXIgY2Fubm90IGJlIGVtcHRpZWQgbm93LgorICogSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBjb21wcmVzc29yIHdpbGwgcmV0dXJuIHRvIGl0cyBjYWxsZXIgKHBvc3NpYmx5IHdpdGgKKyAqIGFuIGluZGljYXRpb24gdGhhdCBpdCBoYXMgbm90IGFjY2VwdGVkIGFsbCB0aGUgc3VwcGxpZWQgc2NhbmxpbmVzKS4gIFRoZQorICogYXBwbGljYXRpb24gc2hvdWxkIHJlc3VtZSBjb21wcmVzc2lvbiBhZnRlciBpdCBoYXMgbWFkZSBtb3JlIHJvb20gaW4gdGhlCisgKiBvdXRwdXQgYnVmZmVyLiAgTm90ZSB0aGF0IHRoZXJlIGFyZSBzdWJzdGFudGlhbCByZXN0cmljdGlvbnMgb24gdGhlIHVzZSBvZgorICogc3VzcGVuc2lvbiAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorICoKKyAqIFdoZW4gc3VzcGVuZGluZywgdGhlIGNvbXByZXNzb3Igd2lsbCBiYWNrIHVwIHRvIGEgY29udmVuaWVudCByZXN0YXJ0IHBvaW50CisgKiAodHlwaWNhbGx5IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBNQ1UpLiBuZXh0X291dHB1dF9ieXRlICYgZnJlZV9pbl9idWZmZXIKKyAqIGluZGljYXRlIHdoZXJlIHRoZSByZXN0YXJ0IHBvaW50IHdpbGwgYmUgaWYgdGhlIGN1cnJlbnQgY2FsbCByZXR1cm5zIEZBTFNFLgorICogRGF0YSBiZXlvbmQgdGhpcyBwb2ludCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGFmdGVyIHJlc3VtcHRpb24sIHNvIGRvIG5vdAorICogd3JpdGUgaXQgb3V0IHdoZW4gZW1wdHlpbmcgdGhlIGJ1ZmZlciBleHRlcm5hbGx5LgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZW1wdHlfbWVtX291dHB1dF9idWZmZXIoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIHNpemVfdCBuZXh0c2l6ZTsKKyAgSk9DVEVUICpuZXh0YnVmZmVyOworICBteV9tZW1fZGVzdF9wdHIgZGVzdCA9IChteV9tZW1fZGVzdF9wdHIpY2luZm8tPmRlc3Q7CisKKyAgaWYgKCFkZXN0LT5hbGxvYykgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisKKyAgLyogVHJ5IHRvIGFsbG9jYXRlIG5ldyBidWZmZXIgd2l0aCBkb3VibGUgc2l6ZSAqLworICBuZXh0c2l6ZSA9IGRlc3QtPmJ1ZnNpemUgKiAyOworICBuZXh0YnVmZmVyID0gKEpPQ1RFVCAqKW1hbGxvYyhuZXh0c2l6ZSk7CisKKyAgaWYgKG5leHRidWZmZXIgPT0gTlVMTCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCAxMCk7CisKKyAgTUVNQ09QWShuZXh0YnVmZmVyLCBkZXN0LT5idWZmZXIsIGRlc3QtPmJ1ZnNpemUpOworCisgIGlmIChkZXN0LT5uZXdidWZmZXIgIT0gTlVMTCkKKyAgICBmcmVlKGRlc3QtPm5ld2J1ZmZlcik7CisKKyAgZGVzdC0+bmV3YnVmZmVyID0gbmV4dGJ1ZmZlcjsKKworICBkZXN0LT5wdWIubmV4dF9vdXRwdXRfYnl0ZSA9IG5leHRidWZmZXIgKyBkZXN0LT5idWZzaXplOworICBkZXN0LT5wdWIuZnJlZV9pbl9idWZmZXIgPSBkZXN0LT5idWZzaXplOworCisgIGRlc3QtPmJ1ZmZlciA9IG5leHRidWZmZXI7CisgIGRlc3QtPmJ1ZnNpemUgPSBuZXh0c2l6ZTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogVGVybWluYXRlIGRlc3RpbmF0aW9uIC0tLSBjYWxsZWQgYnkganBlZ19maW5pc2hfY29tcHJlc3MKKyAqIGFmdGVyIGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4uICBVc3VhbGx5IG5lZWRzIHRvIGZsdXNoIGJ1ZmZlci4KKyAqCisgKiBOQjogKm5vdCogY2FsbGVkIGJ5IGpwZWdfYWJvcnQgb3IganBlZ19kZXN0cm95OyBzdXJyb3VuZGluZworICogYXBwbGljYXRpb24gbXVzdCBkZWFsIHdpdGggYW55IGNsZWFudXAgdGhhdCBzaG91bGQgaGFwcGVuIGV2ZW4KKyAqIGZvciBlcnJvciBleGl0LgorICovCisKK01FVEhPRERFRih2b2lkKQordGVybV9tZW1fZGVzdGluYXRpb24oal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21lbV9kZXN0X3B0ciBkZXN0ID0gKG15X21lbV9kZXN0X3B0ciljaW5mby0+ZGVzdDsKKworICBpZiAoZGVzdC0+YWxsb2MpICpkZXN0LT5vdXRidWZmZXIgPSBkZXN0LT5idWZmZXI7CisgICpkZXN0LT5vdXRzaXplID0gKHVuc2lnbmVkIGxvbmcpKGRlc3QtPmJ1ZnNpemUgLSBkZXN0LT5wdWIuZnJlZV9pbl9idWZmZXIpOworfQorCisKKy8qCisgKiBQcmVwYXJlIGZvciBvdXRwdXQgdG8gYSBtZW1vcnkgYnVmZmVyLgorICogVGhlIGNhbGxlciBtYXkgc3VwcGx5IGFuIG93biBpbml0aWFsIGJ1ZmZlciB3aXRoIGFwcHJvcHJpYXRlIHNpemUuCisgKiBPdGhlcndpc2UsIG9yIHdoZW4gdGhlIGFjdHVhbCBkYXRhIG91dHB1dCBleGNlZWRzIHRoZSBnaXZlbiBzaXplLAorICogdGhlIGxpYnJhcnkgYWRhcHRzIHRoZSBidWZmZXIgc2l6ZSBhcyBuZWNlc3NhcnkuCisgKiBUaGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgbWFsbG9jL2ZyZWUgYXJlIHVzZWQgZm9yIGFsbG9jYXRpbmcKKyAqIGxhcmdlciBtZW1vcnksIHNvIHRoZSBidWZmZXIgaXMgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbiBhZnRlcgorICogZmluaXNoaW5nIGNvbXByZXNzaW9uLCBhbmQgdGhlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yCisgKiBmcmVlaW5nIHRoZSByZXF1ZXN0ZWQgbWVtb3J5LgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19tZW1fZGVzdF90aihqX2NvbXByZXNzX3B0ciBjaW5mbywgdW5zaWduZWQgY2hhciAqKm91dGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0c2l6ZSwgYm9vbGVhbiBhbGxvYykKK3sKKyAgYm9vbGVhbiByZXVzZWQgPSBGQUxTRTsKKyAgbXlfbWVtX2Rlc3RfcHRyIGRlc3Q7CisKKyAgaWYgKG91dGJ1ZmZlciA9PSBOVUxMIHx8IG91dHNpemUgPT0gTlVMTCkgICAgIC8qIHNhbml0eSBjaGVjayAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworCisgIC8qIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QgaXMgbWFkZSBwZXJtYW5lbnQgc28gdGhhdCBtdWx0aXBsZSBKUEVHIGltYWdlcworICAgKiBjYW4gYmUgd3JpdHRlbiB0byB0aGUgc2FtZSBidWZmZXIgd2l0aG91dCByZS1leGVjdXRpbmcganBlZ19tZW1fZGVzdC4KKyAgICovCisgIGlmIChjaW5mby0+ZGVzdCA9PSBOVUxMKSB7ICAgIC8qIGZpcnN0IHRpbWUgZm9yIHRoaXMgSlBFRyBvYmplY3Q/ICovCisgICAgY2luZm8tPmRlc3QgPSAoc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9tZW1fZGVzdGluYXRpb25fbWdyKSk7CisgICAgZGVzdCA9IChteV9tZW1fZGVzdF9wdHIpY2luZm8tPmRlc3Q7CisgICAgZGVzdC0+bmV3YnVmZmVyID0gTlVMTDsKKyAgICBkZXN0LT5idWZmZXIgPSBOVUxMOworICB9IGVsc2UgaWYgKGNpbmZvLT5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uICE9IGluaXRfbWVtX2Rlc3RpbmF0aW9uKSB7CisgICAgLyogSXQgaXMgdW5zYWZlIHRvIHJldXNlIHRoZSBleGlzdGluZyBkZXN0aW5hdGlvbiBtYW5hZ2VyIHVubGVzcyBpdCB3YXMKKyAgICAgKiBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgICovCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisgIH0KKworICBkZXN0ID0gKG15X21lbV9kZXN0X3B0ciljaW5mby0+ZGVzdDsKKyAgZGVzdC0+cHViLmluaXRfZGVzdGluYXRpb24gPSBpbml0X21lbV9kZXN0aW5hdGlvbjsKKyAgZGVzdC0+cHViLmVtcHR5X291dHB1dF9idWZmZXIgPSBlbXB0eV9tZW1fb3V0cHV0X2J1ZmZlcjsKKyAgZGVzdC0+cHViLnRlcm1fZGVzdGluYXRpb24gPSB0ZXJtX21lbV9kZXN0aW5hdGlvbjsKKyAgaWYgKGRlc3QtPmJ1ZmZlciA9PSAqb3V0YnVmZmVyICYmICpvdXRidWZmZXIgIT0gTlVMTCAmJiBhbGxvYykKKyAgICByZXVzZWQgPSBUUlVFOworICBkZXN0LT5vdXRidWZmZXIgPSBvdXRidWZmZXI7CisgIGRlc3QtPm91dHNpemUgPSBvdXRzaXplOworICBkZXN0LT5hbGxvYyA9IGFsbG9jOworCisgIGlmICgqb3V0YnVmZmVyID09IE5VTEwgfHwgKm91dHNpemUgPT0gMCkgeworICAgIGlmIChhbGxvYykgeworICAgICAgLyogQWxsb2NhdGUgaW5pdGlhbCBidWZmZXIgKi8KKyAgICAgIGRlc3QtPm5ld2J1ZmZlciA9ICpvdXRidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhPVVRQVVRfQlVGX1NJWkUpOworICAgICAgaWYgKGRlc3QtPm5ld2J1ZmZlciA9PSBOVUxMKQorICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCAxMCk7CisgICAgICAqb3V0c2l6ZSA9IE9VVFBVVF9CVUZfU0laRTsKKyAgICB9IGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworICB9CisKKyAgZGVzdC0+cHViLm5leHRfb3V0cHV0X2J5dGUgPSBkZXN0LT5idWZmZXIgPSAqb3V0YnVmZmVyOworICBpZiAoIXJldXNlZCkKKyAgICBkZXN0LT5idWZzaXplID0gKm91dHNpemU7CisgIGRlc3QtPnB1Yi5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPmJ1ZnNpemU7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGF0YWRzdC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhdGFkc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTY4Yjk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhdGFkc3QuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIGpkYXRhZHN0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDktMjAxMiBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29tcHJlc3Npb24gZGF0YSBkZXN0aW5hdGlvbiByb3V0aW5lcyBmb3IgdGhlIGNhc2Ugb2YKKyAqIGVtaXR0aW5nIEpQRUcgZGF0YSB0byBtZW1vcnkgb3IgdG8gYSBmaWxlIChvciBhbnkgc3RkaW8gc3RyZWFtKS4KKyAqIFdoaWxlIHRoZXNlIHJvdXRpbmVzIGFyZSBzdWZmaWNpZW50IGZvciBtb3N0IGFwcGxpY2F0aW9ucywKKyAqIHNvbWUgd2lsbCB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBkZXN0aW5hdGlvbiBtYW5hZ2VyLgorICogSU1QT1JUQU5UOiB3ZSBhc3N1bWUgdGhhdCBmd3JpdGUoKSB3aWxsIGNvcnJlY3RseSB0cmFuc2NyaWJlIGFuIGFycmF5IG9mCisgKiBKT0NURVRzIGludG8gOC1iaXQtd2lkZSBlbGVtZW50cyBvbiBleHRlcm5hbCBzdG9yYWdlLiAgSWYgY2hhciBpcyB3aWRlcgorICogdGhhbiA4IGJpdHMgb24geW91ciBtYWNoaW5lLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZSB0d2Vha2luZy4KKyAqLworCisvKiB0aGlzIGlzIG5vdCBhIGNvcmUgbGlicmFyeSBtb2R1bGUsIHNvIGl0IGRvZXNuJ3QgZGVmaW5lIEpQRUdfSU5URVJOQUxTICovCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamVycm9yLmgiCisKKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSxmcmVlKCkgKi8KK2V4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpwdHIpOworI2VuZGlmCisKKworLyogRXhwYW5kZWQgZGF0YSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIHN0ZGlvIG91dHB1dCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBGSUxFICpvdXRmaWxlOyAgICAgICAgICAgICAgICAvKiB0YXJnZXQgc3RyZWFtICovCisgIEpPQ1RFVCAqYnVmZmVyOyAgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGJ1ZmZlciAqLworfSBteV9kZXN0aW5hdGlvbl9tZ3I7CisKK3R5cGVkZWYgbXlfZGVzdGluYXRpb25fbWdyICpteV9kZXN0X3B0cjsKKworI2RlZmluZSBPVVRQVVRfQlVGX1NJWkUgIDQwOTYgICAvKiBjaG9vc2UgYW4gZWZmaWNpZW50bHkgZndyaXRlJ2FibGUgc2l6ZSAqLworCisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisvKiBFeHBhbmRlZCBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgbWVtb3J5IG91dHB1dCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICB1bnNpZ25lZCBjaGFyICoqb3V0YnVmZmVyOyAgICAvKiB0YXJnZXQgYnVmZmVyICovCisgIHVuc2lnbmVkIGxvbmcgKm91dHNpemU7CisgIHVuc2lnbmVkIGNoYXIgKm5ld2J1ZmZlcjsgICAgIC8qIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgKi8KKyAgSk9DVEVUICpidWZmZXI7ICAgICAgICAgICAgICAgLyogc3RhcnQgb2YgYnVmZmVyICovCisgIHNpemVfdCBidWZzaXplOworfSBteV9tZW1fZGVzdGluYXRpb25fbWdyOworCit0eXBlZGVmIG15X21lbV9kZXN0aW5hdGlvbl9tZ3IgKm15X21lbV9kZXN0X3B0cjsKKyNlbmRpZgorCisKKy8qCisgKiBJbml0aWFsaXplIGRlc3RpbmF0aW9uIC0tLSBjYWxsZWQgYnkganBlZ19zdGFydF9jb21wcmVzcworICogYmVmb3JlIGFueSBkYXRhIGlzIGFjdHVhbGx5IHdyaXR0ZW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitpbml0X2Rlc3RpbmF0aW9uKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9kZXN0X3B0ciBkZXN0ID0gKG15X2Rlc3RfcHRyKWNpbmZvLT5kZXN0OworCisgIC8qIEFsbG9jYXRlIHRoZSBvdXRwdXQgYnVmZmVyIC0tLSBpdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gZG9uZSB3aXRoIGltYWdlICovCisgIGRlc3QtPmJ1ZmZlciA9IChKT0NURVQgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9CVUZfU0laRSAqIHNpemVvZihKT0NURVQpKTsKKworICBkZXN0LT5wdWIubmV4dF9vdXRwdXRfYnl0ZSA9IGRlc3QtPmJ1ZmZlcjsKKyAgZGVzdC0+cHViLmZyZWVfaW5fYnVmZmVyID0gT1VUUFVUX0JVRl9TSVpFOworfQorCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorTUVUSE9EREVGKHZvaWQpCitpbml0X21lbV9kZXN0aW5hdGlvbihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogbm8gd29yayBuZWNlc3NhcnkgaGVyZSAqLworfQorI2VuZGlmCisKKworLyoKKyAqIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyIC0tLSBjYWxsZWQgd2hlbmV2ZXIgYnVmZmVyIGZpbGxzIHVwLgorICoKKyAqIEluIHR5cGljYWwgYXBwbGljYXRpb25zLCB0aGlzIHNob3VsZCB3cml0ZSB0aGUgZW50aXJlIG91dHB1dCBidWZmZXIKKyAqIChpZ25vcmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBuZXh0X291dHB1dF9ieXRlICYgZnJlZV9pbl9idWZmZXIpLAorICogcmVzZXQgdGhlIHBvaW50ZXIgJiBjb3VudCB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIHJldHVybiBUUlVFCisgKiBpbmRpY2F0aW5nIHRoYXQgdGhlIGJ1ZmZlciBoYXMgYmVlbiBkdW1wZWQuCisgKgorICogSW4gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byBiZSBhYmxlIHRvIHN1c3BlbmQgY29tcHJlc3Npb24gZHVlIHRvIG91dHB1dAorICogb3ZlcnJ1biwgYSBGQUxTRSByZXR1cm4gaW5kaWNhdGVzIHRoYXQgdGhlIGJ1ZmZlciBjYW5ub3QgYmUgZW1wdGllZCBub3cuCisgKiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gdG8gaXRzIGNhbGxlciAocG9zc2libHkgd2l0aAorICogYW4gaW5kaWNhdGlvbiB0aGF0IGl0IGhhcyBub3QgYWNjZXB0ZWQgYWxsIHRoZSBzdXBwbGllZCBzY2FubGluZXMpLiAgVGhlCisgKiBhcHBsaWNhdGlvbiBzaG91bGQgcmVzdW1lIGNvbXByZXNzaW9uIGFmdGVyIGl0IGhhcyBtYWRlIG1vcmUgcm9vbSBpbiB0aGUKKyAqIG91dHB1dCBidWZmZXIuICBOb3RlIHRoYXQgdGhlcmUgYXJlIHN1YnN0YW50aWFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgdXNlIG9mCisgKiBzdXNwZW5zaW9uIC0tLSBzZWUgdGhlIGRvY3VtZW50YXRpb24uCisgKgorICogV2hlbiBzdXNwZW5kaW5nLCB0aGUgY29tcHJlc3NvciB3aWxsIGJhY2sgdXAgdG8gYSBjb252ZW5pZW50IHJlc3RhcnQgcG9pbnQKKyAqICh0eXBpY2FsbHkgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IE1DVSkuIG5leHRfb3V0cHV0X2J5dGUgJiBmcmVlX2luX2J1ZmZlcgorICogaW5kaWNhdGUgd2hlcmUgdGhlIHJlc3RhcnQgcG9pbnQgd2lsbCBiZSBpZiB0aGUgY3VycmVudCBjYWxsIHJldHVybnMgRkFMU0UuCisgKiBEYXRhIGJleW9uZCB0aGlzIHBvaW50IHdpbGwgYmUgcmVnZW5lcmF0ZWQgYWZ0ZXIgcmVzdW1wdGlvbiwgc28gZG8gbm90CisgKiB3cml0ZSBpdCBvdXQgd2hlbiBlbXB0eWluZyB0aGUgYnVmZmVyIGV4dGVybmFsbHkuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbXB0eV9vdXRwdXRfYnVmZmVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9kZXN0X3B0ciBkZXN0ID0gKG15X2Rlc3RfcHRyKWNpbmZvLT5kZXN0OworCisgIGlmIChKRldSSVRFKGRlc3QtPm91dGZpbGUsIGRlc3QtPmJ1ZmZlciwgT1VUUFVUX0JVRl9TSVpFKSAhPQorICAgICAgKHNpemVfdClPVVRQVVRfQlVGX1NJWkUpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKKworICBkZXN0LT5wdWIubmV4dF9vdXRwdXRfYnl0ZSA9IGRlc3QtPmJ1ZmZlcjsKKyAgZGVzdC0+cHViLmZyZWVfaW5fYnVmZmVyID0gT1VUUFVUX0JVRl9TSVpFOworCisgIHJldHVybiBUUlVFOworfQorCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorTUVUSE9EREVGKGJvb2xlYW4pCitlbXB0eV9tZW1fb3V0cHV0X2J1ZmZlcihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgc2l6ZV90IG5leHRzaXplOworICBKT0NURVQgKm5leHRidWZmZXI7CisgIG15X21lbV9kZXN0X3B0ciBkZXN0ID0gKG15X21lbV9kZXN0X3B0ciljaW5mby0+ZGVzdDsKKworICAvKiBUcnkgdG8gYWxsb2NhdGUgbmV3IGJ1ZmZlciB3aXRoIGRvdWJsZSBzaXplICovCisgIG5leHRzaXplID0gZGVzdC0+YnVmc2l6ZSAqIDI7CisgIG5leHRidWZmZXIgPSAoSk9DVEVUICopbWFsbG9jKG5leHRzaXplKTsKKworICBpZiAobmV4dGJ1ZmZlciA9PSBOVUxMKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIDEwKTsKKworICBNRU1DT1BZKG5leHRidWZmZXIsIGRlc3QtPmJ1ZmZlciwgZGVzdC0+YnVmc2l6ZSk7CisKKyAgaWYgKGRlc3QtPm5ld2J1ZmZlciAhPSBOVUxMKQorICAgIGZyZWUoZGVzdC0+bmV3YnVmZmVyKTsKKworICBkZXN0LT5uZXdidWZmZXIgPSBuZXh0YnVmZmVyOworCisgIGRlc3QtPnB1Yi5uZXh0X291dHB1dF9ieXRlID0gbmV4dGJ1ZmZlciArIGRlc3QtPmJ1ZnNpemU7CisgIGRlc3QtPnB1Yi5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPmJ1ZnNpemU7CisKKyAgZGVzdC0+YnVmZmVyID0gbmV4dGJ1ZmZlcjsKKyAgZGVzdC0+YnVmc2l6ZSA9IG5leHRzaXplOworCisgIHJldHVybiBUUlVFOworfQorI2VuZGlmCisKKworLyoKKyAqIFRlcm1pbmF0ZSBkZXN0aW5hdGlvbiAtLS0gY2FsbGVkIGJ5IGpwZWdfZmluaXNoX2NvbXByZXNzCisgKiBhZnRlciBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuLiAgVXN1YWxseSBuZWVkcyB0byBmbHVzaCBidWZmZXIuCisgKgorICogTkI6ICpub3QqIGNhbGxlZCBieSBqcGVnX2Fib3J0IG9yIGpwZWdfZGVzdHJveTsgc3Vycm91bmRpbmcKKyAqIGFwcGxpY2F0aW9uIG11c3QgZGVhbCB3aXRoIGFueSBjbGVhbnVwIHRoYXQgc2hvdWxkIGhhcHBlbiBldmVuCisgKiBmb3IgZXJyb3IgZXhpdC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Rlcm1fZGVzdGluYXRpb24oal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2Rlc3RfcHRyIGRlc3QgPSAobXlfZGVzdF9wdHIpY2luZm8tPmRlc3Q7CisgIHNpemVfdCBkYXRhY291bnQgPSBPVVRQVVRfQlVGX1NJWkUgLSBkZXN0LT5wdWIuZnJlZV9pbl9idWZmZXI7CisKKyAgLyogV3JpdGUgYW55IGRhdGEgcmVtYWluaW5nIGluIHRoZSBidWZmZXIgKi8KKyAgaWYgKGRhdGFjb3VudCA+IDApIHsKKyAgICBpZiAoSkZXUklURShkZXN0LT5vdXRmaWxlLCBkZXN0LT5idWZmZXIsIGRhdGFjb3VudCkgIT0gZGF0YWNvdW50KQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKKyAgfQorICBmZmx1c2goZGVzdC0+b3V0ZmlsZSk7CisgIC8qIE1ha2Ugc3VyZSB3ZSB3cm90ZSB0aGUgb3V0cHV0IGZpbGUgT0sgKi8KKyAgaWYgKGZlcnJvcihkZXN0LT5vdXRmaWxlKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOworfQorCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorTUVUSE9EREVGKHZvaWQpCit0ZXJtX21lbV9kZXN0aW5hdGlvbihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWVtX2Rlc3RfcHRyIGRlc3QgPSAobXlfbWVtX2Rlc3RfcHRyKWNpbmZvLT5kZXN0OworCisgICpkZXN0LT5vdXRidWZmZXIgPSBkZXN0LT5idWZmZXI7CisgICpkZXN0LT5vdXRzaXplID0gKHVuc2lnbmVkIGxvbmcpKGRlc3QtPmJ1ZnNpemUgLSBkZXN0LT5wdWIuZnJlZV9pbl9idWZmZXIpOworfQorI2VuZGlmCisKKworLyoKKyAqIFByZXBhcmUgZm9yIG91dHB1dCB0byBhIHN0ZGlvIHN0cmVhbS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgb3BlbmVkIHRoZSBzdHJlYW0sIGFuZCBpcyByZXNwb25zaWJsZQorICogZm9yIGNsb3NpbmcgaXQgYWZ0ZXIgZmluaXNoaW5nIGNvbXByZXNzaW9uLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zdGRpb19kZXN0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICpvdXRmaWxlKQoreworICBteV9kZXN0X3B0ciBkZXN0OworCisgIC8qIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QgaXMgbWFkZSBwZXJtYW5lbnQgc28gdGhhdCBtdWx0aXBsZSBKUEVHIGltYWdlcworICAgKiBjYW4gYmUgd3JpdHRlbiB0byB0aGUgc2FtZSBmaWxlIHdpdGhvdXQgcmUtZXhlY3V0aW5nIGpwZWdfc3RkaW9fZGVzdC4KKyAgICovCisgIGlmIChjaW5mby0+ZGVzdCA9PSBOVUxMKSB7ICAgIC8qIGZpcnN0IHRpbWUgZm9yIHRoaXMgSlBFRyBvYmplY3Q/ICovCisgICAgY2luZm8tPmRlc3QgPSAoc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9kZXN0aW5hdGlvbl9tZ3IpKTsKKyAgfSBlbHNlIGlmIChjaW5mby0+ZGVzdC0+aW5pdF9kZXN0aW5hdGlvbiAhPSBpbml0X2Rlc3RpbmF0aW9uKSB7CisgICAgLyogSXQgaXMgdW5zYWZlIHRvIHJldXNlIHRoZSBleGlzdGluZyBkZXN0aW5hdGlvbiBtYW5hZ2VyIHVubGVzcyBpdCB3YXMKKyAgICAgKiBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlcndpc2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZQorICAgICAqIG9wYXF1ZSBzdHJ1Y3R1cmUgaXMgdGhlIHJpZ2h0IHNpemUuICBOb3RlIHRoYXQgd2UgY291bGQganVzdCBjcmVhdGUgYQorICAgICAqIG5ldyBzdHJ1Y3R1cmUsIGJ1dCB0aGUgb2xkIHN0cnVjdHVyZSB3b3VsZCBub3QgYmUgZnJlZWQgdW50aWwKKyAgICAgKiBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoKSB3YXMgY2FsbGVkLgorICAgICAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworICB9CisKKyAgZGVzdCA9IChteV9kZXN0X3B0ciljaW5mby0+ZGVzdDsKKyAgZGVzdC0+cHViLmluaXRfZGVzdGluYXRpb24gPSBpbml0X2Rlc3RpbmF0aW9uOworICBkZXN0LT5wdWIuZW1wdHlfb3V0cHV0X2J1ZmZlciA9IGVtcHR5X291dHB1dF9idWZmZXI7CisgIGRlc3QtPnB1Yi50ZXJtX2Rlc3RpbmF0aW9uID0gdGVybV9kZXN0aW5hdGlvbjsKKyAgZGVzdC0+b3V0ZmlsZSA9IG91dGZpbGU7Cit9CisKKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKKy8qCisgKiBQcmVwYXJlIGZvciBvdXRwdXQgdG8gYSBtZW1vcnkgYnVmZmVyLgorICogVGhlIGNhbGxlciBtYXkgc3VwcGx5IGFuIG93biBpbml0aWFsIGJ1ZmZlciB3aXRoIGFwcHJvcHJpYXRlIHNpemUuCisgKiBPdGhlcndpc2UsIG9yIHdoZW4gdGhlIGFjdHVhbCBkYXRhIG91dHB1dCBleGNlZWRzIHRoZSBnaXZlbiBzaXplLAorICogdGhlIGxpYnJhcnkgYWRhcHRzIHRoZSBidWZmZXIgc2l6ZSBhcyBuZWNlc3NhcnkuCisgKiBUaGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgbWFsbG9jL2ZyZWUgYXJlIHVzZWQgZm9yIGFsbG9jYXRpbmcKKyAqIGxhcmdlciBtZW1vcnksIHNvIHRoZSBidWZmZXIgaXMgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbiBhZnRlcgorICogZmluaXNoaW5nIGNvbXByZXNzaW9uLCBhbmQgdGhlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yCisgKiBmcmVlaW5nIHRoZSByZXF1ZXN0ZWQgbWVtb3J5LgorICogTm90ZTogIEFuIGluaXRpYWwgYnVmZmVyIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIG1hbmFnZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIGxpYnJhcnkgZG9lcyBub3QgZnJlZSBzdWNoIGJ1ZmZlcgorICogd2hlbiBhbGxvY2F0aW5nIGEgbGFyZ2VyIGJ1ZmZlci4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfbWVtX2Rlc3Qoal9jb21wcmVzc19wdHIgY2luZm8sIHVuc2lnbmVkIGNoYXIgKipvdXRidWZmZXIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dHNpemUpCit7CisgIG15X21lbV9kZXN0X3B0ciBkZXN0OworCisgIGlmIChvdXRidWZmZXIgPT0gTlVMTCB8fCBvdXRzaXplID09IE5VTEwpICAgICAvKiBzYW5pdHkgY2hlY2sgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JVRkZFUl9TSVpFKTsKKworICAvKiBUaGUgZGVzdGluYXRpb24gb2JqZWN0IGlzIG1hZGUgcGVybWFuZW50IHNvIHRoYXQgbXVsdGlwbGUgSlBFRyBpbWFnZXMKKyAgICogY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIHNhbWUgYnVmZmVyIHdpdGhvdXQgcmUtZXhlY3V0aW5nIGpwZWdfbWVtX2Rlc3QuCisgICAqLworICBpZiAoY2luZm8tPmRlc3QgPT0gTlVMTCkgeyAgICAvKiBmaXJzdCB0aW1lIGZvciB0aGlzIEpQRUcgb2JqZWN0PyAqLworICAgIGNpbmZvLT5kZXN0ID0gKHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX1BFUk1BTkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfbWVtX2Rlc3RpbmF0aW9uX21ncikpOworICB9IGVsc2UgaWYgKGNpbmZvLT5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uICE9IGluaXRfbWVtX2Rlc3RpbmF0aW9uKSB7CisgICAgLyogSXQgaXMgdW5zYWZlIHRvIHJldXNlIHRoZSBleGlzdGluZyBkZXN0aW5hdGlvbiBtYW5hZ2VyIHVubGVzcyBpdCB3YXMKKyAgICAgKiBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgICovCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisgIH0KKworICBkZXN0ID0gKG15X21lbV9kZXN0X3B0ciljaW5mby0+ZGVzdDsKKyAgZGVzdC0+cHViLmluaXRfZGVzdGluYXRpb24gPSBpbml0X21lbV9kZXN0aW5hdGlvbjsKKyAgZGVzdC0+cHViLmVtcHR5X291dHB1dF9idWZmZXIgPSBlbXB0eV9tZW1fb3V0cHV0X2J1ZmZlcjsKKyAgZGVzdC0+cHViLnRlcm1fZGVzdGluYXRpb24gPSB0ZXJtX21lbV9kZXN0aW5hdGlvbjsKKyAgZGVzdC0+b3V0YnVmZmVyID0gb3V0YnVmZmVyOworICBkZXN0LT5vdXRzaXplID0gb3V0c2l6ZTsKKyAgZGVzdC0+bmV3YnVmZmVyID0gTlVMTDsKKworICBpZiAoKm91dGJ1ZmZlciA9PSBOVUxMIHx8ICpvdXRzaXplID09IDApIHsKKyAgICAvKiBBbGxvY2F0ZSBpbml0aWFsIGJ1ZmZlciAqLworICAgIGRlc3QtPm5ld2J1ZmZlciA9ICpvdXRidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhPVVRQVVRfQlVGX1NJWkUpOworICAgIGlmIChkZXN0LT5uZXdidWZmZXIgPT0gTlVMTCkKKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIDEwKTsKKyAgICAqb3V0c2l6ZSA9IE9VVFBVVF9CVUZfU0laRTsKKyAgfQorCisgIGRlc3QtPnB1Yi5uZXh0X291dHB1dF9ieXRlID0gZGVzdC0+YnVmZmVyID0gKm91dGJ1ZmZlcjsKKyAgZGVzdC0+cHViLmZyZWVfaW5fYnVmZmVyID0gZGVzdC0+YnVmc2l6ZSA9ICpvdXRzaXplOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGF0YXNyYy10ai5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhdGFzcmMtdGouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcxMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRhdGFzcmMtdGouYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIGpkYXRhc3JjLXRqLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDktMjAxMSBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVjb21wcmVzc2lvbiBkYXRhIHNvdXJjZSByb3V0aW5lcyBmb3IgdGhlIGNhc2Ugb2YKKyAqIHJlYWRpbmcgSlBFRyBkYXRhIGZyb20gbWVtb3J5IG9yIGZyb20gYSBmaWxlIChvciBhbnkgc3RkaW8gc3RyZWFtKS4KKyAqIFdoaWxlIHRoZXNlIHJvdXRpbmVzIGFyZSBzdWZmaWNpZW50IGZvciBtb3N0IGFwcGxpY2F0aW9ucywKKyAqIHNvbWUgd2lsbCB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzb3VyY2UgbWFuYWdlci4KKyAqIElNUE9SVEFOVDogd2UgYXNzdW1lIHRoYXQgZnJlYWQoKSB3aWxsIGNvcnJlY3RseSB0cmFuc2NyaWJlIGFuIGFycmF5IG9mCisgKiBKT0NURVRzIGZyb20gOC1iaXQtd2lkZSBlbGVtZW50cyBvbiBleHRlcm5hbCBzdG9yYWdlLiAgSWYgY2hhciBpcyB3aWRlcgorICogdGhhbiA4IGJpdHMgb24geW91ciBtYWNoaW5lLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZSB0d2Vha2luZy4KKyAqLworCisvKiB0aGlzIGlzIG5vdCBhIGNvcmUgbGlicmFyeSBtb2R1bGUsIHNvIGl0IGRvZXNuJ3QgZGVmaW5lIEpQRUdfSU5URVJOQUxTICovCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamVycm9yLmgiCisKKworLyoKKyAqIEluaXRpYWxpemUgc291cmNlIC0tLSBjYWxsZWQgYnkganBlZ19yZWFkX2hlYWRlcgorICogYmVmb3JlIGFueSBkYXRhIGlzIGFjdHVhbGx5IHJlYWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitpbml0X21lbV9zb3VyY2Uoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogbm8gd29yayBuZWNlc3NhcnkgaGVyZSAqLworfQorCisKKy8qCisgKiBGaWxsIHRoZSBpbnB1dCBidWZmZXIgLS0tIGNhbGxlZCB3aGVuZXZlciBidWZmZXIgaXMgZW1wdGllZC4KKyAqCisgKiBJbiB0eXBpY2FsIGFwcGxpY2F0aW9ucywgdGhpcyBzaG91bGQgcmVhZCBmcmVzaCBkYXRhIGludG8gdGhlIGJ1ZmZlcgorICogKGlnbm9yaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5leHRfaW5wdXRfYnl0ZSAmIGJ5dGVzX2luX2J1ZmZlciksCisgKiByZXNldCB0aGUgcG9pbnRlciAmIGNvdW50IHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgcmV0dXJuIFRSVUUKKyAqIGluZGljYXRpbmcgdGhhdCB0aGUgYnVmZmVyIGhhcyBiZWVuIHJlbG9hZGVkLiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0bworICogZmlsbCB0aGUgYnVmZmVyIGVudGlyZWx5LCBvbmx5IHRvIG9idGFpbiBhdCBsZWFzdCBvbmUgbW9yZSBieXRlLgorICoKKyAqIFRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYW4gRU9GIHJldHVybi4gIElmIHRoZSBlbmQgb2YgdGhlIGZpbGUgaGFzIGJlZW4KKyAqIHJlYWNoZWQsIHRoZSByb3V0aW5lIGhhcyBhIGNob2ljZSBvZiBFUlJFWElUKCkgb3IgaW5zZXJ0aW5nIGZha2UgZGF0YSBpbnRvCisgKiB0aGUgYnVmZmVyLiAgSW4gbW9zdCBjYXNlcywgZ2VuZXJhdGluZyBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgaW5zZXJ0aW5nIGEKKyAqIGZha2UgRU9JIG1hcmtlciBpcyB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIC0tLSB0aGlzIHdpbGwgYWxsb3cgdGhlCisgKiBkZWNvbXByZXNzb3IgdG8gb3V0cHV0IGhvd2V2ZXIgbXVjaCBvZiB0aGUgaW1hZ2UgaXMgdGhlcmUuICBIb3dldmVyLAorICogdGhlIHJlc3VsdGluZyBlcnJvciBtZXNzYWdlIGlzIG1pc2xlYWRpbmcgaWYgdGhlIHJlYWwgcHJvYmxlbSBpcyBhbiBlbXB0eQorICogaW5wdXQgZmlsZSwgc28gd2UgaGFuZGxlIHRoYXQgY2FzZSBzcGVjaWFsbHkuCisgKgorICogSW4gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byBiZSBhYmxlIHRvIHN1c3BlbmQgY29tcHJlc3Npb24gZHVlIHRvIGlucHV0CisgKiBub3QgYmVpbmcgYXZhaWxhYmxlIHlldCwgYSBGQUxTRSByZXR1cm4gaW5kaWNhdGVzIHRoYXQgbm8gbW9yZSBkYXRhIGNhbiBiZQorICogb2J0YWluZWQgcmlnaHQgbm93LCBidXQgbW9yZSBtYXkgYmUgZm9ydGhjb21pbmcgbGF0ZXIuICBJbiB0aGlzIHNpdHVhdGlvbiwKKyAqIHRoZSBkZWNvbXByZXNzb3Igd2lsbCByZXR1cm4gdG8gaXRzIGNhbGxlciAod2l0aCBhbiBpbmRpY2F0aW9uIG9mIHRoZQorICogbnVtYmVyIG9mIHNjYW5saW5lcyBpdCBoYXMgcmVhZCwgaWYgYW55KS4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgcmVzdW1lCisgKiBkZWNvbXByZXNzaW9uIGFmdGVyIGl0IGhhcyBsb2FkZWQgbW9yZSBkYXRhIGludG8gdGhlIGlucHV0IGJ1ZmZlci4gIE5vdGUKKyAqIHRoYXQgdGhlcmUgYXJlIHN1YnN0YW50aWFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgdXNlIG9mIHN1c3BlbnNpb24gLS0tIHNlZQorICogdGhlIGRvY3VtZW50YXRpb24uCisgKgorICogV2hlbiBzdXNwZW5kaW5nLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYmFjayB1cCB0byBhIGNvbnZlbmllbnQgcmVzdGFydCBwb2ludAorICogKHR5cGljYWxseSB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgTUNVKS4gbmV4dF9pbnB1dF9ieXRlICYgYnl0ZXNfaW5fYnVmZmVyCisgKiBpbmRpY2F0ZSB3aGVyZSB0aGUgcmVzdGFydCBwb2ludCB3aWxsIGJlIGlmIHRoZSBjdXJyZW50IGNhbGwgcmV0dXJucyBGQUxTRS4KKyAqIERhdGEgYmV5b25kIHRoaXMgcG9pbnQgbXVzdCBiZSByZXNjYW5uZWQgYWZ0ZXIgcmVzdW1wdGlvbiwgc28gbW92ZSBpdCB0bworICogdGhlIGZyb250IG9mIHRoZSBidWZmZXIgcmF0aGVyIHRoYW4gZGlzY2FyZGluZyBpdC4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2ZpbGxfbWVtX2lucHV0X2J1ZmZlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBzdGF0aWMgY29uc3QgSk9DVEVUIG15YnVmZmVyWzRdID0geworICAgIChKT0NURVQpMHhGRiwgKEpPQ1RFVClKUEVHX0VPSSwgMCwgMAorICB9OworCisgIC8qIFRoZSB3aG9sZSBKUEVHIGRhdGEgaXMgZXhwZWN0ZWQgdG8gcmVzaWRlIGluIHRoZSBzdXBwbGllZCBtZW1vcnkKKyAgICogYnVmZmVyLCBzbyBhbnkgcmVxdWVzdCBmb3IgbW9yZSBkYXRhIGJleW9uZCB0aGUgZ2l2ZW4gYnVmZmVyIHNpemUKKyAgICogaXMgdHJlYXRlZCBhcyBhbiBlcnJvci4KKyAgICovCisgIFdBUk5NUyhjaW5mbywgSldSTl9KUEVHX0VPRik7CisKKyAgLyogSW5zZXJ0IGEgZmFrZSBFT0kgbWFya2VyICovCisKKyAgY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gbXlidWZmZXI7CisgIGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA9IDI7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIFNraXAgZGF0YSAtLS0gdXNlZCB0byBza2lwIG92ZXIgYSBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnQgb2YKKyAqIHVuaW50ZXJlc3RpbmcgZGF0YSAoc3VjaCBhcyBhbiBBUFBuIG1hcmtlcikuCisgKgorICogV3JpdGVycyBvZiBzdXNwZW5kYWJsZS1pbnB1dCBhcHBsaWNhdGlvbnMgbXVzdCBub3RlIHRoYXQgc2tpcF9pbnB1dF9kYXRhCisgKiBpcyBub3QgZ3JhbnRlZCB0aGUgcmlnaHQgdG8gZ2l2ZSBhIHN1c3BlbnNpb24gcmV0dXJuLiAgSWYgdGhlIHNraXAgZXh0ZW5kcworICogYmV5b25kIHRoZSBkYXRhIGN1cnJlbnRseSBpbiB0aGUgYnVmZmVyLCB0aGUgYnVmZmVyIGNhbiBiZSBtYXJrZWQgZW1wdHkgc28KKyAqIHRoYXQgdGhlIG5leHQgcmVhZCB3aWxsIGNhdXNlIGEgZmlsbF9pbnB1dF9idWZmZXIgY2FsbCB0aGF0IGNhbiBzdXNwZW5kLgorICogQXJyYW5naW5nIGZvciBhZGRpdGlvbmFsIGJ5dGVzIHRvIGJlIGRpc2NhcmRlZCBiZWZvcmUgcmVsb2FkaW5nIHRoZSBpbnB1dAorICogYnVmZmVyIGlzIHRoZSBhcHBsaWNhdGlvbiB3cml0ZXIncyBwcm9ibGVtLgorICovCisKK01FVEhPRERFRih2b2lkKQorc2tpcF9pbnB1dF9kYXRhKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGxvbmcgbnVtX2J5dGVzKQoreworICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICpzcmMgPSBjaW5mby0+c3JjOworCisgIC8qIEp1c3QgYSBkdW1iIGltcGxlbWVudGF0aW9uIGZvciBub3cuICBDb3VsZCB1c2UgZnNlZWsoKSBleGNlcHQKKyAgICogaXQgZG9lc24ndCB3b3JrIG9uIHBpcGVzLiAgTm90IGNsZWFyIHRoYXQgYmVpbmcgc21hcnQgaXMgd29ydGgKKyAgICogYW55IHRyb3VibGUgYW55d2F5IC0tLSBsYXJnZSBza2lwcyBhcmUgaW5mcmVxdWVudC4KKyAgICovCisgIGlmIChudW1fYnl0ZXMgPiAwKSB7CisgICAgd2hpbGUgKG51bV9ieXRlcyA+IChsb25nKXNyYy0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisgICAgICBudW1fYnl0ZXMgLT0gKGxvbmcpc3JjLT5ieXRlc19pbl9idWZmZXI7CisgICAgICAodm9pZCkoKnNyYy0+ZmlsbF9pbnB1dF9idWZmZXIpIChjaW5mbyk7CisgICAgICAvKiBub3RlIHdlIGFzc3VtZSB0aGF0IGZpbGxfaW5wdXRfYnVmZmVyIHdpbGwgbmV2ZXIgcmV0dXJuIEZBTFNFLAorICAgICAgICogc28gc3VzcGVuc2lvbiBuZWVkIG5vdCBiZSBoYW5kbGVkLgorICAgICAgICovCisgICAgfQorICAgIHNyYy0+bmV4dF9pbnB1dF9ieXRlICs9IChzaXplX3QpbnVtX2J5dGVzOworICAgIHNyYy0+Ynl0ZXNfaW5fYnVmZmVyIC09IChzaXplX3QpbnVtX2J5dGVzOworICB9Cit9CisKKworLyoKKyAqIEFuIGFkZGl0aW9uYWwgbWV0aG9kIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IGRhdGEgc291cmNlIG1vZHVsZXMgaXMgdGhlCisgKiByZXN5bmNfdG9fcmVzdGFydCBtZXRob2QgZm9yIGVycm9yIHJlY292ZXJ5IGluIHRoZSBwcmVzZW5jZSBvZiBSU1QgbWFya2Vycy4KKyAqIEZvciB0aGUgbW9tZW50LCB0aGlzIHNvdXJjZSBtb2R1bGUganVzdCB1c2VzIHRoZSBkZWZhdWx0IHJlc3luYyBtZXRob2QKKyAqIHByb3ZpZGVkIGJ5IHRoZSBKUEVHIGxpYnJhcnkuICBUaGF0IG1ldGhvZCBhc3N1bWVzIHRoYXQgbm8gYmFja3RyYWNraW5nCisgKiBpcyBwb3NzaWJsZS4KKyAqLworCisKKy8qCisgKiBUZXJtaW5hdGUgc291cmNlIC0tLSBjYWxsZWQgYnkganBlZ19maW5pc2hfZGVjb21wcmVzcworICogYWZ0ZXIgYWxsIGRhdGEgaGFzIGJlZW4gcmVhZC4gIE9mdGVuIGEgbm8tb3AuCisgKgorICogTkI6ICpub3QqIGNhbGxlZCBieSBqcGVnX2Fib3J0IG9yIGpwZWdfZGVzdHJveTsgc3Vycm91bmRpbmcKKyAqIGFwcGxpY2F0aW9uIG11c3QgZGVhbCB3aXRoIGFueSBjbGVhbnVwIHRoYXQgc2hvdWxkIGhhcHBlbiBldmVuCisgKiBmb3IgZXJyb3IgZXhpdC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Rlcm1fc291cmNlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIG5vIHdvcmsgbmVjZXNzYXJ5IGhlcmUgKi8KK30KKworCisvKgorICogUHJlcGFyZSBmb3IgaW5wdXQgZnJvbSBhIHN1cHBsaWVkIG1lbW9yeSBidWZmZXIuCisgKiBUaGUgYnVmZmVyIG11c3QgY29udGFpbiB0aGUgd2hvbGUgSlBFRyBkYXRhLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19tZW1fc3JjX3RqKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmZmVyLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5zaXplKQoreworICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICpzcmM7CisKKyAgaWYgKGluYnVmZmVyID09IE5VTEwgfHwgaW5zaXplID09IDApICAvKiBUcmVhdCBlbXB0eSBpbnB1dCBhcyBmYXRhbCBlcnJvciAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU1QVFkpOworCisgIC8qIFRoZSBzb3VyY2Ugb2JqZWN0IGlzIG1hZGUgcGVybWFuZW50IHNvIHRoYXQgYSBzZXJpZXMgb2YgSlBFRyBpbWFnZXMKKyAgICogY2FuIGJlIHJlYWQgZnJvbSB0aGUgc2FtZSBidWZmZXIgYnkgY2FsbGluZyBqcGVnX21lbV9zcmMgb25seSBiZWZvcmUKKyAgICogdGhlIGZpcnN0IG9uZS4KKyAgICovCisgIGlmIChjaW5mby0+c3JjID09IE5VTEwpIHsgICAgIC8qIGZpcnN0IHRpbWUgZm9yIHRoaXMgSlBFRyBvYmplY3Q/ICovCisgICAgY2luZm8tPnNyYyA9IChzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QganBlZ19zb3VyY2VfbWdyKSk7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNyYy0+aW5pdF9zb3VyY2UgIT0gaW5pdF9tZW1fc291cmNlKSB7CisgICAgLyogSXQgaXMgdW5zYWZlIHRvIHJldXNlIHRoZSBleGlzdGluZyBzb3VyY2UgbWFuYWdlciB1bmxlc3MgaXQgd2FzIGNyZWF0ZWQKKyAgICAgKiBieSB0aGlzIGZ1bmN0aW9uLgorICAgICAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworICB9CisKKyAgc3JjID0gY2luZm8tPnNyYzsKKyAgc3JjLT5pbml0X3NvdXJjZSA9IGluaXRfbWVtX3NvdXJjZTsKKyAgc3JjLT5maWxsX2lucHV0X2J1ZmZlciA9IGZpbGxfbWVtX2lucHV0X2J1ZmZlcjsKKyAgc3JjLT5za2lwX2lucHV0X2RhdGEgPSBza2lwX2lucHV0X2RhdGE7CisgIHNyYy0+cmVzeW5jX3RvX3Jlc3RhcnQgPSBqcGVnX3Jlc3luY190b19yZXN0YXJ0OyAvKiB1c2UgZGVmYXVsdCBtZXRob2QgKi8KKyAgc3JjLT50ZXJtX3NvdXJjZSA9IHRlcm1fc291cmNlOworICBzcmMtPmJ5dGVzX2luX2J1ZmZlciA9IChzaXplX3QpaW5zaXplOworICBzcmMtPm5leHRfaW5wdXRfYnl0ZSA9IChjb25zdCBKT0NURVQgKilpbmJ1ZmZlcjsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkYXRhc3JjLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGF0YXNyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZGI0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGF0YXNyYy5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogamRhdGFzcmMuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwOS0yMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNvbXByZXNzaW9uIGRhdGEgc291cmNlIHJvdXRpbmVzIGZvciB0aGUgY2FzZSBvZgorICogcmVhZGluZyBKUEVHIGRhdGEgZnJvbSBtZW1vcnkgb3IgZnJvbSBhIGZpbGUgKG9yIGFueSBzdGRpbyBzdHJlYW0pLgorICogV2hpbGUgdGhlc2Ugcm91dGluZXMgYXJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgYXBwbGljYXRpb25zLAorICogc29tZSB3aWxsIHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHNvdXJjZSBtYW5hZ2VyLgorICogSU1QT1JUQU5UOiB3ZSBhc3N1bWUgdGhhdCBmcmVhZCgpIHdpbGwgY29ycmVjdGx5IHRyYW5zY3JpYmUgYW4gYXJyYXkgb2YKKyAqIEpPQ1RFVHMgZnJvbSA4LWJpdC13aWRlIGVsZW1lbnRzIG9uIGV4dGVybmFsIHN0b3JhZ2UuICBJZiBjaGFyIGlzIHdpZGVyCisgKiB0aGFuIDggYml0cyBvbiB5b3VyIG1hY2hpbmUsIHlvdSBtYXkgbmVlZCB0byBkbyBzb21lIHR3ZWFraW5nLgorICovCisKKy8qIHRoaXMgaXMgbm90IGEgY29yZSBsaWJyYXJ5IG1vZHVsZSwgc28gaXQgZG9lc24ndCBkZWZpbmUgSlBFR19JTlRFUk5BTFMgKi8KKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZXJyb3IuaCIKKworCisvKiBFeHBhbmRlZCBkYXRhIHNvdXJjZSBvYmplY3QgZm9yIHN0ZGlvIGlucHV0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfc291cmNlX21nciBwdWI7ICAgLyogcHVibGljIGZpZWxkcyAqLworCisgIEZJTEUgKmluZmlsZTsgICAgICAgICAgICAgICAgIC8qIHNvdXJjZSBzdHJlYW0gKi8KKyAgSk9DVEVUICpidWZmZXI7ICAgICAgICAgICAgICAgLyogc3RhcnQgb2YgYnVmZmVyICovCisgIGJvb2xlYW4gc3RhcnRfb2ZfZmlsZTsgICAgICAgIC8qIGhhdmUgd2UgZ290dGVuIGFueSBkYXRhIHlldD8gKi8KK30gbXlfc291cmNlX21ncjsKKwordHlwZWRlZiBteV9zb3VyY2VfbWdyICpteV9zcmNfcHRyOworCisjZGVmaW5lIElOUFVUX0JVRl9TSVpFICA0MDk2ICAgIC8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmcmVhZCdhYmxlIHNpemUgKi8KKworCisvKgorICogSW5pdGlhbGl6ZSBzb3VyY2UgLS0tIGNhbGxlZCBieSBqcGVnX3JlYWRfaGVhZGVyCisgKiBiZWZvcmUgYW55IGRhdGEgaXMgYWN0dWFsbHkgcmVhZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2luaXRfc291cmNlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X3NyY19wdHIgc3JjID0gKG15X3NyY19wdHIpY2luZm8tPnNyYzsKKworICAvKiBXZSByZXNldCB0aGUgZW1wdHktaW5wdXQtZmlsZSBmbGFnIGZvciBlYWNoIGltYWdlLAorICAgKiBidXQgd2UgZG9uJ3QgY2xlYXIgdGhlIGlucHV0IGJ1ZmZlci4KKyAgICogVGhpcyBpcyBjb3JyZWN0IGJlaGF2aW9yIGZvciByZWFkaW5nIGEgc2VyaWVzIG9mIGltYWdlcyBmcm9tIG9uZSBzb3VyY2UuCisgICAqLworICBzcmMtPnN0YXJ0X29mX2ZpbGUgPSBUUlVFOworfQorCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorTUVUSE9EREVGKHZvaWQpCitpbml0X21lbV9zb3VyY2Uoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogbm8gd29yayBuZWNlc3NhcnkgaGVyZSAqLworfQorI2VuZGlmCisKKworLyoKKyAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlciAtLS0gY2FsbGVkIHdoZW5ldmVyIGJ1ZmZlciBpcyBlbXB0aWVkLgorICoKKyAqIEluIHR5cGljYWwgYXBwbGljYXRpb25zLCB0aGlzIHNob3VsZCByZWFkIGZyZXNoIGRhdGEgaW50byB0aGUgYnVmZmVyCisgKiAoaWdub3JpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV4dF9pbnB1dF9ieXRlICYgYnl0ZXNfaW5fYnVmZmVyKSwKKyAqIHJlc2V0IHRoZSBwb2ludGVyICYgY291bnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIsIGFuZCByZXR1cm4gVFJVRQorICogaW5kaWNhdGluZyB0aGF0IHRoZSBidWZmZXIgaGFzIGJlZW4gcmVsb2FkZWQuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvCisgKiBmaWxsIHRoZSBidWZmZXIgZW50aXJlbHksIG9ubHkgdG8gb2J0YWluIGF0IGxlYXN0IG9uZSBtb3JlIGJ5dGUuCisgKgorICogVGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBFT0YgcmV0dXJuLiAgSWYgdGhlIGVuZCBvZiB0aGUgZmlsZSBoYXMgYmVlbgorICogcmVhY2hlZCwgdGhlIHJvdXRpbmUgaGFzIGEgY2hvaWNlIG9mIEVSUkVYSVQoKSBvciBpbnNlcnRpbmcgZmFrZSBkYXRhIGludG8KKyAqIHRoZSBidWZmZXIuICBJbiBtb3N0IGNhc2VzLCBnZW5lcmF0aW5nIGEgd2FybmluZyBtZXNzYWdlIGFuZCBpbnNlcnRpbmcgYQorICogZmFrZSBFT0kgbWFya2VyIGlzIHRoZSBiZXN0IGNvdXJzZSBvZiBhY3Rpb24gLS0tIHRoaXMgd2lsbCBhbGxvdyB0aGUKKyAqIGRlY29tcHJlc3NvciB0byBvdXRwdXQgaG93ZXZlciBtdWNoIG9mIHRoZSBpbWFnZSBpcyB0aGVyZS4gIEhvd2V2ZXIsCisgKiB0aGUgcmVzdWx0aW5nIGVycm9yIG1lc3NhZ2UgaXMgbWlzbGVhZGluZyBpZiB0aGUgcmVhbCBwcm9ibGVtIGlzIGFuIGVtcHR5CisgKiBpbnB1dCBmaWxlLCBzbyB3ZSBoYW5kbGUgdGhhdCBjYXNlIHNwZWNpYWxseS4KKyAqCisgKiBJbiBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFibGUgdG8gc3VzcGVuZCBjb21wcmVzc2lvbiBkdWUgdG8gaW5wdXQKKyAqIG5vdCBiZWluZyBhdmFpbGFibGUgeWV0LCBhIEZBTFNFIHJldHVybiBpbmRpY2F0ZXMgdGhhdCBubyBtb3JlIGRhdGEgY2FuIGJlCisgKiBvYnRhaW5lZCByaWdodCBub3csIGJ1dCBtb3JlIG1heSBiZSBmb3J0aGNvbWluZyBsYXRlci4gIEluIHRoaXMgc2l0dWF0aW9uLAorICogdGhlIGRlY29tcHJlc3NvciB3aWxsIHJldHVybiB0byBpdHMgY2FsbGVyICh3aXRoIGFuIGluZGljYXRpb24gb2YgdGhlCisgKiBudW1iZXIgb2Ygc2NhbmxpbmVzIGl0IGhhcyByZWFkLCBpZiBhbnkpLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXN1bWUKKyAqIGRlY29tcHJlc3Npb24gYWZ0ZXIgaXQgaGFzIGxvYWRlZCBtb3JlIGRhdGEgaW50byB0aGUgaW5wdXQgYnVmZmVyLiAgTm90ZQorICogdGhhdCB0aGVyZSBhcmUgc3Vic3RhbnRpYWwgcmVzdHJpY3Rpb25zIG9uIHRoZSB1c2Ugb2Ygc3VzcGVuc2lvbiAtLS0gc2VlCisgKiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBXaGVuIHN1c3BlbmRpbmcsIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBiYWNrIHVwIHRvIGEgY29udmVuaWVudCByZXN0YXJ0IHBvaW50CisgKiAodHlwaWNhbGx5IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBNQ1UpLiBuZXh0X2lucHV0X2J5dGUgJiBieXRlc19pbl9idWZmZXIKKyAqIGluZGljYXRlIHdoZXJlIHRoZSByZXN0YXJ0IHBvaW50IHdpbGwgYmUgaWYgdGhlIGN1cnJlbnQgY2FsbCByZXR1cm5zIEZBTFNFLgorICogRGF0YSBiZXlvbmQgdGhpcyBwb2ludCBtdXN0IGJlIHJlc2Nhbm5lZCBhZnRlciByZXN1bXB0aW9uLCBzbyBtb3ZlIGl0IHRvCisgKiB0aGUgZnJvbnQgb2YgdGhlIGJ1ZmZlciByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0LgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZmlsbF9pbnB1dF9idWZmZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfc3JjX3B0ciBzcmMgPSAobXlfc3JjX3B0ciljaW5mby0+c3JjOworICBzaXplX3QgbmJ5dGVzOworCisgIG5ieXRlcyA9IEpGUkVBRChzcmMtPmluZmlsZSwgc3JjLT5idWZmZXIsIElOUFVUX0JVRl9TSVpFKTsKKworICBpZiAobmJ5dGVzIDw9IDApIHsKKyAgICBpZiAoc3JjLT5zdGFydF9vZl9maWxlKSAgICAgLyogVHJlYXQgZW1wdHkgaW5wdXQgZmlsZSBhcyBmYXRhbCBlcnJvciAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9JTlBVVF9FTVBUWSk7CisgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0pQRUdfRU9GKTsKKyAgICAvKiBJbnNlcnQgYSBmYWtlIEVPSSBtYXJrZXIgKi8KKyAgICBzcmMtPmJ1ZmZlclswXSA9IChKT0NURVQpMHhGRjsKKyAgICBzcmMtPmJ1ZmZlclsxXSA9IChKT0NURVQpSlBFR19FT0k7CisgICAgbmJ5dGVzID0gMjsKKyAgfQorCisgIHNyYy0+cHViLm5leHRfaW5wdXRfYnl0ZSA9IHNyYy0+YnVmZmVyOworICBzcmMtPnB1Yi5ieXRlc19pbl9idWZmZXIgPSBuYnl0ZXM7CisgIHNyYy0+c3RhcnRfb2ZfZmlsZSA9IEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorTUVUSE9EREVGKGJvb2xlYW4pCitmaWxsX21lbV9pbnB1dF9idWZmZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgc3RhdGljIGNvbnN0IEpPQ1RFVCBteWJ1ZmZlcls0XSA9IHsKKyAgICAoSk9DVEVUKTB4RkYsIChKT0NURVQpSlBFR19FT0ksIDAsIDAKKyAgfTsKKworICAvKiBUaGUgd2hvbGUgSlBFRyBkYXRhIGlzIGV4cGVjdGVkIHRvIHJlc2lkZSBpbiB0aGUgc3VwcGxpZWQgbWVtb3J5CisgICAqIGJ1ZmZlciwgc28gYW55IHJlcXVlc3QgZm9yIG1vcmUgZGF0YSBiZXlvbmQgdGhlIGdpdmVuIGJ1ZmZlciBzaXplCisgICAqIGlzIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCisgICAqLworICBXQVJOTVMoY2luZm8sIEpXUk5fSlBFR19FT0YpOworCisgIC8qIEluc2VydCBhIGZha2UgRU9JIG1hcmtlciAqLworCisgIGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IG15YnVmZmVyOworICBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgPSAyOworCisgIHJldHVybiBUUlVFOworfQorI2VuZGlmCisKKworLyoKKyAqIFNraXAgZGF0YSAtLS0gdXNlZCB0byBza2lwIG92ZXIgYSBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnQgb2YKKyAqIHVuaW50ZXJlc3RpbmcgZGF0YSAoc3VjaCBhcyBhbiBBUFBuIG1hcmtlcikuCisgKgorICogV3JpdGVycyBvZiBzdXNwZW5kYWJsZS1pbnB1dCBhcHBsaWNhdGlvbnMgbXVzdCBub3RlIHRoYXQgc2tpcF9pbnB1dF9kYXRhCisgKiBpcyBub3QgZ3JhbnRlZCB0aGUgcmlnaHQgdG8gZ2l2ZSBhIHN1c3BlbnNpb24gcmV0dXJuLiAgSWYgdGhlIHNraXAgZXh0ZW5kcworICogYmV5b25kIHRoZSBkYXRhIGN1cnJlbnRseSBpbiB0aGUgYnVmZmVyLCB0aGUgYnVmZmVyIGNhbiBiZSBtYXJrZWQgZW1wdHkgc28KKyAqIHRoYXQgdGhlIG5leHQgcmVhZCB3aWxsIGNhdXNlIGEgZmlsbF9pbnB1dF9idWZmZXIgY2FsbCB0aGF0IGNhbiBzdXNwZW5kLgorICogQXJyYW5naW5nIGZvciBhZGRpdGlvbmFsIGJ5dGVzIHRvIGJlIGRpc2NhcmRlZCBiZWZvcmUgcmVsb2FkaW5nIHRoZSBpbnB1dAorICogYnVmZmVyIGlzIHRoZSBhcHBsaWNhdGlvbiB3cml0ZXIncyBwcm9ibGVtLgorICovCisKK01FVEhPRERFRih2b2lkKQorc2tpcF9pbnB1dF9kYXRhKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGxvbmcgbnVtX2J5dGVzKQoreworICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICpzcmMgPSBjaW5mby0+c3JjOworCisgIC8qIEp1c3QgYSBkdW1iIGltcGxlbWVudGF0aW9uIGZvciBub3cuICBDb3VsZCB1c2UgZnNlZWsoKSBleGNlcHQKKyAgICogaXQgZG9lc24ndCB3b3JrIG9uIHBpcGVzLiAgTm90IGNsZWFyIHRoYXQgYmVpbmcgc21hcnQgaXMgd29ydGgKKyAgICogYW55IHRyb3VibGUgYW55d2F5IC0tLSBsYXJnZSBza2lwcyBhcmUgaW5mcmVxdWVudC4KKyAgICovCisgIGlmIChudW1fYnl0ZXMgPiAwKSB7CisgICAgd2hpbGUgKG51bV9ieXRlcyA+IChsb25nKXNyYy0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisgICAgICBudW1fYnl0ZXMgLT0gKGxvbmcpc3JjLT5ieXRlc19pbl9idWZmZXI7CisgICAgICAodm9pZCkoKnNyYy0+ZmlsbF9pbnB1dF9idWZmZXIpIChjaW5mbyk7CisgICAgICAvKiBub3RlIHdlIGFzc3VtZSB0aGF0IGZpbGxfaW5wdXRfYnVmZmVyIHdpbGwgbmV2ZXIgcmV0dXJuIEZBTFNFLAorICAgICAgICogc28gc3VzcGVuc2lvbiBuZWVkIG5vdCBiZSBoYW5kbGVkLgorICAgICAgICovCisgICAgfQorICAgIHNyYy0+bmV4dF9pbnB1dF9ieXRlICs9IChzaXplX3QpbnVtX2J5dGVzOworICAgIHNyYy0+Ynl0ZXNfaW5fYnVmZmVyIC09IChzaXplX3QpbnVtX2J5dGVzOworICB9Cit9CisKKworLyoKKyAqIEFuIGFkZGl0aW9uYWwgbWV0aG9kIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IGRhdGEgc291cmNlIG1vZHVsZXMgaXMgdGhlCisgKiByZXN5bmNfdG9fcmVzdGFydCBtZXRob2QgZm9yIGVycm9yIHJlY292ZXJ5IGluIHRoZSBwcmVzZW5jZSBvZiBSU1QgbWFya2Vycy4KKyAqIEZvciB0aGUgbW9tZW50LCB0aGlzIHNvdXJjZSBtb2R1bGUganVzdCB1c2VzIHRoZSBkZWZhdWx0IHJlc3luYyBtZXRob2QKKyAqIHByb3ZpZGVkIGJ5IHRoZSBKUEVHIGxpYnJhcnkuICBUaGF0IG1ldGhvZCBhc3N1bWVzIHRoYXQgbm8gYmFja3RyYWNraW5nCisgKiBpcyBwb3NzaWJsZS4KKyAqLworCisKKy8qCisgKiBUZXJtaW5hdGUgc291cmNlIC0tLSBjYWxsZWQgYnkganBlZ19maW5pc2hfZGVjb21wcmVzcworICogYWZ0ZXIgYWxsIGRhdGEgaGFzIGJlZW4gcmVhZC4gIE9mdGVuIGEgbm8tb3AuCisgKgorICogTkI6ICpub3QqIGNhbGxlZCBieSBqcGVnX2Fib3J0IG9yIGpwZWdfZGVzdHJveTsgc3Vycm91bmRpbmcKKyAqIGFwcGxpY2F0aW9uIG11c3QgZGVhbCB3aXRoIGFueSBjbGVhbnVwIHRoYXQgc2hvdWxkIGhhcHBlbiBldmVuCisgKiBmb3IgZXJyb3IgZXhpdC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Rlcm1fc291cmNlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIG5vIHdvcmsgbmVjZXNzYXJ5IGhlcmUgKi8KK30KKworCisvKgorICogUHJlcGFyZSBmb3IgaW5wdXQgZnJvbSBhIHN0ZGlvIHN0cmVhbS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgb3BlbmVkIHRoZSBzdHJlYW0sIGFuZCBpcyByZXNwb25zaWJsZQorICogZm9yIGNsb3NpbmcgaXQgYWZ0ZXIgZmluaXNoaW5nIGRlY29tcHJlc3Npb24uCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX3N0ZGlvX3NyYyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICppbmZpbGUpCit7CisgIG15X3NyY19wdHIgc3JjOworCisgIC8qIFRoZSBzb3VyY2Ugb2JqZWN0IGFuZCBpbnB1dCBidWZmZXIgYXJlIG1hZGUgcGVybWFuZW50IHNvIHRoYXQgYSBzZXJpZXMKKyAgICogb2YgSlBFRyBpbWFnZXMgY2FuIGJlIHJlYWQgZnJvbSB0aGUgc2FtZSBmaWxlIGJ5IGNhbGxpbmcganBlZ19zdGRpb19zcmMKKyAgICogb25seSBiZWZvcmUgdGhlIGZpcnN0IG9uZS4gIChJZiB3ZSBkaXNjYXJkZWQgdGhlIGJ1ZmZlciBhdCB0aGUgZW5kIG9mCisgICAqIG9uZSBpbWFnZSwgd2UnZCBsaWtlbHkgbG9zZSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgb25lLikKKyAgICovCisgIGlmIChjaW5mby0+c3JjID09IE5VTEwpIHsgICAgIC8qIGZpcnN0IHRpbWUgZm9yIHRoaXMgSlBFRyBvYmplY3Q/ICovCisgICAgY2luZm8tPnNyYyA9IChzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9zb3VyY2VfbWdyKSk7CisgICAgc3JjID0gKG15X3NyY19wdHIpY2luZm8tPnNyYzsKKyAgICBzcmMtPmJ1ZmZlciA9IChKT0NURVQgKikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5QVVRfQlVGX1NJWkUgKiBzaXplb2YoSk9DVEVUKSk7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNyYy0+aW5pdF9zb3VyY2UgIT0gaW5pdF9zb3VyY2UpIHsKKyAgICAvKiBJdCBpcyB1bnNhZmUgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIHNvdXJjZSBtYW5hZ2VyIHVubGVzcyBpdCB3YXMgY3JlYXRlZAorICAgICAqIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlcndpc2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBvcGFxdWUKKyAgICAgKiBzdHJ1Y3R1cmUgaXMgdGhlIHJpZ2h0IHNpemUuICBOb3RlIHRoYXQgd2UgY291bGQganVzdCBjcmVhdGUgYSBuZXcKKyAgICAgKiBzdHJ1Y3R1cmUsIGJ1dCB0aGUgb2xkIHN0cnVjdHVyZSB3b3VsZCBub3QgYmUgZnJlZWQgdW50aWwKKyAgICAgKiBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygpIHdhcyBjYWxsZWQuCisgICAgICovCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisgIH0KKworICBzcmMgPSAobXlfc3JjX3B0ciljaW5mby0+c3JjOworICBzcmMtPnB1Yi5pbml0X3NvdXJjZSA9IGluaXRfc291cmNlOworICBzcmMtPnB1Yi5maWxsX2lucHV0X2J1ZmZlciA9IGZpbGxfaW5wdXRfYnVmZmVyOworICBzcmMtPnB1Yi5za2lwX2lucHV0X2RhdGEgPSBza2lwX2lucHV0X2RhdGE7CisgIHNyYy0+cHViLnJlc3luY190b19yZXN0YXJ0ID0ganBlZ19yZXN5bmNfdG9fcmVzdGFydDsgLyogdXNlIGRlZmF1bHQgbWV0aG9kICovCisgIHNyYy0+cHViLnRlcm1fc291cmNlID0gdGVybV9zb3VyY2U7CisgIHNyYy0+aW5maWxlID0gaW5maWxlOworICBzcmMtPnB1Yi5ieXRlc19pbl9idWZmZXIgPSAwOyAvKiBmb3JjZXMgZmlsbF9pbnB1dF9idWZmZXIgb24gZmlyc3QgcmVhZCAqLworICBzcmMtPnB1Yi5uZXh0X2lucHV0X2J5dGUgPSBOVUxMOyAvKiB1bnRpbCBidWZmZXIgbG9hZGVkICovCit9CisKKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKKy8qCisgKiBQcmVwYXJlIGZvciBpbnB1dCBmcm9tIGEgc3VwcGxpZWQgbWVtb3J5IGJ1ZmZlci4KKyAqIFRoZSBidWZmZXIgbXVzdCBjb250YWluIHRoZSB3aG9sZSBKUEVHIGRhdGEuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX21lbV9zcmMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWZmZXIsCisgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNpemUpCit7CisgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKnNyYzsKKworICBpZiAoaW5idWZmZXIgPT0gTlVMTCB8fCBpbnNpemUgPT0gMCkgIC8qIFRyZWF0IGVtcHR5IGlucHV0IGFzIGZhdGFsIGVycm9yICovCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9JTlBVVF9FTVBUWSk7CisKKyAgLyogVGhlIHNvdXJjZSBvYmplY3QgaXMgbWFkZSBwZXJtYW5lbnQgc28gdGhhdCBhIHNlcmllcyBvZiBKUEVHIGltYWdlcworICAgKiBjYW4gYmUgcmVhZCBmcm9tIHRoZSBzYW1lIGJ1ZmZlciBieSBjYWxsaW5nIGpwZWdfbWVtX3NyYyBvbmx5IGJlZm9yZQorICAgKiB0aGUgZmlyc3Qgb25lLgorICAgKi8KKyAgaWYgKGNpbmZvLT5zcmMgPT0gTlVMTCkgeyAgICAgLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KKyAgICBjaW5mby0+c3JjID0gKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IpKTsKKyAgfSBlbHNlIGlmIChjaW5mby0+c3JjLT5pbml0X3NvdXJjZSAhPSBpbml0X21lbV9zb3VyY2UpIHsKKyAgICAvKiBJdCBpcyB1bnNhZmUgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIHNvdXJjZSBtYW5hZ2VyIHVubGVzcyBpdCB3YXMgY3JlYXRlZAorICAgICAqIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgICovCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisgIH0KKworICBzcmMgPSBjaW5mby0+c3JjOworICBzcmMtPmluaXRfc291cmNlID0gaW5pdF9tZW1fc291cmNlOworICBzcmMtPmZpbGxfaW5wdXRfYnVmZmVyID0gZmlsbF9tZW1faW5wdXRfYnVmZmVyOworICBzcmMtPnNraXBfaW5wdXRfZGF0YSA9IHNraXBfaW5wdXRfZGF0YTsKKyAgc3JjLT5yZXN5bmNfdG9fcmVzdGFydCA9IGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQ7IC8qIHVzZSBkZWZhdWx0IG1ldGhvZCAqLworICBzcmMtPnRlcm1fc291cmNlID0gdGVybV9zb3VyY2U7CisgIHNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gKHNpemVfdClpbnNpemU7CisgIHNyYy0+bmV4dF9pbnB1dF9ieXRlID0gKGNvbnN0IEpPQ1RFVCAqKWluYnVmZmVyOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGNvZWZjdC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjb2VmY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjNhOWFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjb2VmY3QuYwpAQCAtMCwwICsxLDY5MiBAQAorLyoKKyAqIGpkY29lZmN0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNS0yMDE2LCBELiBSLiBDb21tYW5kZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEdvb2dsZSwgSW5jLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2VmZmljaWVudCBidWZmZXIgY29udHJvbGxlciBmb3IgZGVjb21wcmVzc2lvbi4KKyAqIFRoaXMgY29udHJvbGxlciBpcyB0aGUgdG9wIGxldmVsIG9mIHRoZSBKUEVHIGRlY29tcHJlc3NvciBwcm9wZXIuCisgKiBUaGUgY29lZmZpY2llbnQgYnVmZmVyIGxpZXMgYmV0d2VlbiBlbnRyb3B5IGRlY29kaW5nIGFuZCBpbnZlcnNlLURDVCBzdGVwcy4KKyAqCisgKiBJbiBidWZmZXJlZC1pbWFnZSBtb2RlLCB0aGlzIGNvbnRyb2xsZXIgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuCisgKiBpbnB1dC1vcmllbnRlZCBwcm9jZXNzaW5nIGFuZCBvdXRwdXQtb3JpZW50ZWQgcHJvY2Vzc2luZy4KKyAqIEFsc28sIHRoZSBpbnB1dCBzaWRlIChvbmx5KSBpcyB1c2VkIHdoZW4gcmVhZGluZyBhIGZpbGUgZm9yIHRyYW5zY29kaW5nLgorICovCisKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpkY29lZmN0LmgiCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKGludCkgZGVjb21wcmVzc19vbmVwYXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKTsKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKK01FVEhPRERFRihpbnQpIGRlY29tcHJlc3NfZGF0YShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpOworI2VuZGlmCisjaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRAorTE9DQUwoYm9vbGVhbikgc21vb3RoaW5nX29rKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworTUVUSE9EREVGKGludCkgZGVjb21wcmVzc19zbW9vdGhfZGF0YShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYpOworI2VuZGlmCisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGFuIGlucHV0IHByb2Nlc3NpbmcgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X2lucHV0X3Bhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgY2luZm8tPmlucHV0X2lNQ1Vfcm93ID0gMDsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiBvdXRwdXQgcHJvY2Vzc2luZyBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfb3V0cHV0X3Bhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVECisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisKKyAgLyogSWYgbXVsdGlwYXNzLCBjaGVjayB0byBzZWUgd2hldGhlciB0byB1c2UgYmxvY2sgc21vb3RoaW5nIG9uIHRoaXMgcGFzcyAqLworICBpZiAoY29lZi0+cHViLmNvZWZfYXJyYXlzICE9IE5VTEwpIHsKKyAgICBpZiAoY2luZm8tPmRvX2Jsb2NrX3Ntb290aGluZyAmJiBzbW9vdGhpbmdfb2soY2luZm8pKQorICAgICAgY29lZi0+cHViLmRlY29tcHJlc3NfZGF0YSA9IGRlY29tcHJlc3Nfc21vb3RoX2RhdGE7CisgICAgZWxzZQorICAgICAgY29lZi0+cHViLmRlY29tcHJlc3NfZGF0YSA9IGRlY29tcHJlc3NfZGF0YTsKKyAgfQorI2VuZGlmCisgIGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgPSAwOworfQorCisKKy8qCisgKiBEZWNvbXByZXNzIGFuZCByZXR1cm4gc29tZSBkYXRhIGluIHRoZSBzaW5nbGUtcGFzcyBjYXNlLgorICogQWx3YXlzIGF0dGVtcHRzIHRvIGVtaXQgb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpLgorICogSW5wdXQgYW5kIG91dHB1dCBtdXN0IHJ1biBpbiBsb2Nrc3RlcCBzaW5jZSB3ZSBoYXZlIG9ubHkgYSBvbmUtTUNVIGJ1ZmZlci4KKyAqIFJldHVybiB2YWx1ZSBpcyBKUEVHX1JPV19DT01QTEVURUQsIEpQRUdfU0NBTl9DT01QTEVURUQsIG9yIEpQRUdfU1VTUEVOREVELgorICoKKyAqIE5COiBvdXRwdXRfYnVmIGNvbnRhaW5zIGEgcGxhbmUgZm9yIGVhY2ggY29tcG9uZW50IGluIGltYWdlLAorICogd2hpY2ggd2UgaW5kZXggYWNjb3JkaW5nIHRvIHRoZSBjb21wb25lbnQncyBTT0YgcG9zaXRpb24uCisgKi8KKworTUVUSE9EREVGKGludCkKK2RlY29tcHJlc3Nfb25lcGFzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisgIEpESU1FTlNJT04gTUNVX2NvbF9udW07ICAgICAgIC8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8KKyAgSkRJTUVOU0lPTiBsYXN0X01DVV9jb2wgPSBjaW5mby0+TUNVc19wZXJfcm93IC0gMTsKKyAgSkRJTUVOU0lPTiBsYXN0X2lNQ1Vfcm93ID0gY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyAtIDE7CisgIGludCBibGtuLCBjaSwgeGluZGV4LCB5aW5kZXgsIHlvZmZzZXQsIHVzZWZ1bF93aWR0aDsKKyAgSlNBTVBBUlJBWSBvdXRwdXRfcHRyOworICBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgb3V0cHV0X2NvbDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpbnZlcnNlX0RDVDsKKworICAvKiBMb29wIHRvIHByb2Nlc3MgYXMgbXVjaCBhcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8KKyAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OworICAgICAgIHlvZmZzZXQrKykgeworICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5NQ1VfY3RyOyBNQ1VfY29sX251bSA8PSBsYXN0X01DVV9jb2w7CisgICAgICAgICBNQ1VfY29sX251bSsrKSB7CisgICAgICAvKiBUcnkgdG8gZmV0Y2ggYW4gTUNVLiAgRW50cm9weSBkZWNvZGVyIGV4cGVjdHMgYnVmZmVyIHRvIGJlIHplcm9lZC4gKi8KKyAgICAgIGp6ZXJvX2Zhcigodm9pZCAqKWNvZWYtPk1DVV9idWZmZXJbMF0sCisgICAgICAgICAgICAgICAgKHNpemVfdCkoY2luZm8tPmJsb2Nrc19pbl9NQ1UgKiBzaXplb2YoSkJMT0NLKSkpOworICAgICAgaWYgKCEoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7CisgICAgICAgIC8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KKyAgICAgICAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsKKyAgICAgICAgY29lZi0+TUNVX2N0ciA9IE1DVV9jb2xfbnVtOworICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICB9CisKKyAgICAgIC8qIE9ubHkgcGVyZm9ybSB0aGUgSURDVCBvbiBibG9ja3MgdGhhdCBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgZGVzaXJlZAorICAgICAgICogY3JvcHBpbmcgcmVnaW9uLgorICAgICAgICovCisgICAgICBpZiAoTUNVX2NvbF9udW0gPj0gY2luZm8tPm1hc3Rlci0+Zmlyc3RfaU1DVV9jb2wgJiYKKyAgICAgICAgICBNQ1VfY29sX251bSA8PSBjaW5mby0+bWFzdGVyLT5sYXN0X2lNQ1VfY29sKSB7CisgICAgICAgIC8qIERldGVybWluZSB3aGVyZSBkYXRhIHNob3VsZCBnbyBpbiBvdXRwdXRfYnVmIGFuZCBkbyB0aGUgSURDVCB0aGluZy4KKyAgICAgICAgICogV2Ugc2tpcCBkdW1teSBibG9ja3MgYXQgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgKGJ1dCBibGtuIGdldHMKKyAgICAgICAgICogaW5jcmVtZW50ZWQgcGFzdCB0aGVtISkuICBOb3RlIHRoZSBpbm5lciBsb29wIHJlbGllcyBvbiBoYXZpbmcKKyAgICAgICAgICogYWxsb2NhdGVkIHRoZSBNQ1VfYnVmZmVyW10gYmxvY2tzIHNlcXVlbnRpYWxseS4KKyAgICAgICAgICovCisgICAgICAgIGJsa24gPSAwOyAgICAgICAgICAgICAgIC8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKKyAgICAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgICAgIC8qIERvbid0IGJvdGhlciB0byBJRENUIGFuIHVuaW50ZXJlc3RpbmcgY29tcG9uZW50LiAqLworICAgICAgICAgIGlmICghY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgeworICAgICAgICAgICAgYmxrbiArPSBjb21wcHRyLT5NQ1VfYmxvY2tzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CisgICAgICAgICAgdXNlZnVsX3dpZHRoID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+TUNVX3dpZHRoIDogY29tcHB0ci0+bGFzdF9jb2xfd2lkdGg7CisgICAgICAgICAgb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSArCisgICAgICAgICAgICAgICAgICAgICAgIHlvZmZzZXQgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOworICAgICAgICAgIHN0YXJ0X2NvbCA9IChNQ1VfY29sX251bSAtIGNpbmZvLT5tYXN0ZXItPmZpcnN0X2lNQ1VfY29sKSAqCisgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aDsKKyAgICAgICAgICBmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAoY2luZm8tPmlucHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdyB8fAorICAgICAgICAgICAgICAgIHlvZmZzZXQgKyB5aW5kZXggPCBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQpIHsKKyAgICAgICAgICAgICAgb3V0cHV0X2NvbCA9IHN0YXJ0X2NvbDsKKyAgICAgICAgICAgICAgZm9yICh4aW5kZXggPSAwOyB4aW5kZXggPCB1c2VmdWxfd2lkdGg7IHhpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgKCppbnZlcnNlX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSkNPRUZQVFIpY29lZi0+TUNVX2J1ZmZlcltibGtuICsgeGluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7CisgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBibGtuICs9IGNvbXBwdHItPk1DVV93aWR0aDsKKyAgICAgICAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLworICAgIGNvZWYtPk1DVV9jdHIgPSAwOworICB9CisgIC8qIENvbXBsZXRlZCB0aGUgaU1DVSByb3csIGFkdmFuY2UgY291bnRlcnMgZm9yIG5leHQgb25lICovCisgIGNpbmZvLT5vdXRwdXRfaU1DVV9yb3crKzsKKyAgaWYgKCsrKGNpbmZvLT5pbnB1dF9pTUNVX3JvdykgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKSB7CisgICAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworICAgIHJldHVybiBKUEVHX1JPV19DT01QTEVURUQ7CisgIH0KKyAgLyogQ29tcGxldGVkIHRoZSBzY2FuICovCisgICgqY2luZm8tPmlucHV0Y3RsLT5maW5pc2hfaW5wdXRfcGFzcykgKGNpbmZvKTsKKyAgcmV0dXJuIEpQRUdfU0NBTl9DT01QTEVURUQ7Cit9CisKKworLyoKKyAqIER1bW15IGNvbnN1bWUtaW5wdXQgcm91dGluZSBmb3Igc2luZ2xlLXBhc3Mgb3BlcmF0aW9uLgorICovCisKK01FVEhPRERFRihpbnQpCitkdW1teV9jb25zdW1lX2RhdGEoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOyAgICAgICAgLyogQWx3YXlzIGluZGljYXRlIG5vdGhpbmcgd2FzIGRvbmUgKi8KK30KKworCisjaWZkZWYgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisKKy8qCisgKiBDb25zdW1lIGlucHV0IGRhdGEgYW5kIHN0b3JlIGl0IGluIHRoZSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAqIFdlIHJlYWQgYXMgbXVjaCBhcyBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykgcGVyIGNhbGwsCisgKiBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgc2Nhbi4KKyAqIFJldHVybiB2YWx1ZSBpcyBKUEVHX1JPV19DT01QTEVURUQsIEpQRUdfU0NBTl9DT01QTEVURUQsIG9yIEpQRUdfU1VTUEVOREVELgorICovCisKK01FVEhPRERFRihpbnQpCitjb25zdW1lX2RhdGEoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0ciljaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0OworICBKRElNRU5TSU9OIHN0YXJ0X2NvbDsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsKKyAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBidWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwKKyAgICAgICBjaW5mby0+aW5wdXRfaU1DVV9yb3cgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgIC8qIE5vdGU6IGVudHJvcHkgZGVjb2RlciBleHBlY3RzIGJ1ZmZlciB0byBiZSB6ZXJvZWQsCisgICAgICogYnV0IHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBtZW1vcnkgbWFuYWdlcgorICAgICAqIGJlY2F1c2Ugd2UgcmVxdWVzdGVkIGEgcHJlLXplcm9lZCBhcnJheS4KKyAgICAgKi8KKyAgfQorCisgIC8qIExvb3AgdG8gcHJvY2VzcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8KKyAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OworICAgICAgIHlvZmZzZXQrKykgeworICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5NQ1VfY3RyOyBNQ1VfY29sX251bSA8IGNpbmZvLT5NQ1VzX3Blcl9yb3c7CisgICAgICAgICBNQ1VfY29sX251bSsrKSB7CisgICAgICAvKiBDb25zdHJ1Y3QgbGlzdCBvZiBwb2ludGVycyB0byBEQ1QgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGlzIE1DVSAqLworICAgICAgYmxrbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgICBzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKyAgICAgICAgZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworICAgICAgICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCArIHlvZmZzZXRdICsgc3RhcnRfY29sOworICAgICAgICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgeworICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogVHJ5IHRvIGZldGNoIHRoZSBNQ1UuICovCisgICAgICBpZiAoISgqY2luZm8tPmVudHJvcHktPmRlY29kZV9tY3UpIChjaW5mbywgY29lZi0+TUNVX2J1ZmZlcikpIHsKKyAgICAgICAgLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLworICAgICAgICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworICAgICAgICBjb2VmLT5NQ1VfY3RyID0gTUNVX2NvbF9udW07CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLworICAgIGNvZWYtPk1DVV9jdHIgPSAwOworICB9CisgIC8qIENvbXBsZXRlZCB0aGUgaU1DVSByb3csIGFkdmFuY2UgY291bnRlcnMgZm9yIG5leHQgb25lICovCisgIGlmICgrKyhjaW5mby0+aW5wdXRfaU1DVV9yb3cpIDwgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cykgeworICAgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsKKyAgICByZXR1cm4gSlBFR19ST1dfQ09NUExFVEVEOworICB9CisgIC8qIENvbXBsZXRlZCB0aGUgc2NhbiAqLworICAoKmNpbmZvLT5pbnB1dGN0bC0+ZmluaXNoX2lucHV0X3Bhc3MpIChjaW5mbyk7CisgIHJldHVybiBKUEVHX1NDQU5fQ09NUExFVEVEOworfQorCisKKy8qCisgKiBEZWNvbXByZXNzIGFuZCByZXR1cm4gc29tZSBkYXRhIGluIHRoZSBtdWx0aS1wYXNzIGNhc2UuCisgKiBBbHdheXMgYXR0ZW1wdHMgdG8gZW1pdCBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykuCisgKiBSZXR1cm4gdmFsdWUgaXMgSlBFR19ST1dfQ09NUExFVEVELCBKUEVHX1NDQU5fQ09NUExFVEVELCBvciBKUEVHX1NVU1BFTkRFRC4KKyAqCisgKiBOQjogb3V0cHV0X2J1ZiBjb250YWlucyBhIHBsYW5lIGZvciBlYWNoIGNvbXBvbmVudCBpbiBpbWFnZS4KKyAqLworCitNRVRIT0RERUYoaW50KQorZGVjb21wcmVzc19kYXRhKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikKK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0ciljaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBsYXN0X2lNQ1Vfcm93ID0gY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyAtIDE7CisgIEpESU1FTlNJT04gYmxvY2tfbnVtOworICBpbnQgY2ksIGJsb2NrX3JvdywgYmxvY2tfcm93czsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyOworICBKQkxPQ0tST1cgYnVmZmVyX3B0cjsKKyAgSlNBTVBBUlJBWSBvdXRwdXRfcHRyOworICBKRElNRU5TSU9OIG91dHB1dF9jb2w7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1Q7CisKKyAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8KKyAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8IGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgfHwKKyAgICAgICAgIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPT0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlciAmJgorICAgICAgICAgIGNpbmZvLT5pbnB1dF9pTUNVX3JvdyA8PSBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93KSkgeworICAgIGlmICgoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKSA9PSBKUEVHX1NVU1BFTkRFRCkKKyAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgfQorCisgIC8qIE9LLCBvdXRwdXQgZnJvbSB0aGUgdmlydHVhbCBhcnJheXMuICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCisgICAgaWYgKCFjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkKQorICAgICAgY29udGludWU7CisgICAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVyIGZvciB0aGlzIGNvbXBvbmVudC4gKi8KKyAgICBidWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBjb2VmLT53aG9sZV9pbWFnZVtjaV0sCisgICAgICAgY2luZm8tPm91dHB1dF9pTUNVX3JvdyAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdykKKyAgICAgIGJsb2NrX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIGVsc2UgeworICAgICAgLyogTkI6IGNhbid0IHVzZSBsYXN0X3Jvd19oZWlnaHQgaGVyZTsgaXQgaXMgaW5wdXQtc2lkZS1kZXBlbmRlbnQhICovCisgICAgICBibG9ja19yb3dzID0gKGludCkoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICAgICAgaWYgKGJsb2NrX3Jvd3MgPT0gMCkgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgfQorICAgIGludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NpXTsKKyAgICBvdXRwdXRfcHRyID0gb3V0cHV0X2J1ZltjaV07CisgICAgLyogTG9vcCBvdmVyIGFsbCBEQ1QgYmxvY2tzIHRvIGJlIHByb2Nlc3NlZC4gKi8KKyAgICBmb3IgKGJsb2NrX3JvdyA9IDA7IGJsb2NrX3JvdyA8IGJsb2NrX3Jvd3M7IGJsb2NrX3JvdysrKSB7CisgICAgICBidWZmZXJfcHRyID0gYnVmZmVyW2Jsb2NrX3Jvd10gKyBjaW5mby0+bWFzdGVyLT5maXJzdF9NQ1VfY29sW2NpXTsKKyAgICAgIG91dHB1dF9jb2wgPSAwOworICAgICAgZm9yIChibG9ja19udW0gPSBjaW5mby0+bWFzdGVyLT5maXJzdF9NQ1VfY29sW2NpXTsKKyAgICAgICAgICAgYmxvY2tfbnVtIDw9IGNpbmZvLT5tYXN0ZXItPmxhc3RfTUNVX2NvbFtjaV07IGJsb2NrX251bSsrKSB7CisgICAgICAgICgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwgKEpDT0VGUFRSKWJ1ZmZlcl9wdHIsIG91dHB1dF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKKyAgICAgICAgYnVmZmVyX3B0cisrOworICAgICAgICBvdXRwdXRfY29sICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgICB9CisgICAgICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgfQorICB9CisKKyAgaWYgKCsrKGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cpIDwgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cykKKyAgICByZXR1cm4gSlBFR19ST1dfQ09NUExFVEVEOworICByZXR1cm4gSlBFR19TQ0FOX0NPTVBMRVRFRDsKK30KKworI2VuZGlmIC8qIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLworCisKKyNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVECisKKy8qCisgKiBUaGlzIGNvZGUgYXBwbGllcyBpbnRlcmJsb2NrIHNtb290aGluZyBhcyBkZXNjcmliZWQgYnkgc2VjdGlvbiBLLjgKKyAqIG9mIHRoZSBKUEVHIHN0YW5kYXJkOiB0aGUgZmlyc3QgNSBBQyBjb2VmZmljaWVudHMgYXJlIGVzdGltYXRlZCBmcm9tCisgKiB0aGUgREMgdmFsdWVzIG9mIGEgRENUIGJsb2NrIGFuZCBpdHMgOCBuZWlnaGJvcmluZyBibG9ja3MuCisgKiBXZSBhcHBseSBzbW9vdGhpbmcgb25seSBmb3IgcHJvZ3Jlc3NpdmUgSlBFRyBkZWNvZGluZywgYW5kIG9ubHkgaWYKKyAqIHRoZSBjb2VmZmljaWVudHMgaXQgY2FuIGVzdGltYXRlIGFyZSBub3QgeWV0IGtub3duIHRvIGZ1bGwgcHJlY2lzaW9uLgorICovCisKKy8qIE5hdHVyYWwtb3JkZXIgYXJyYXkgcG9zaXRpb25zIG9mIHRoZSBmaXJzdCA1IHppZ3phZy1vcmRlciBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgUTAxX1BPUyAgMQorI2RlZmluZSBRMTBfUE9TICA4CisjZGVmaW5lIFEyMF9QT1MgIDE2CisjZGVmaW5lIFExMV9QT1MgIDkKKyNkZWZpbmUgUTAyX1BPUyAgMgorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgYmxvY2sgc21vb3RoaW5nIGlzIGFwcGxpY2FibGUgYW5kIHNhZmUuCisgKiBXZSBhbHNvIGxhdGNoIHRoZSBjdXJyZW50IHN0YXRlcyBvZiB0aGUgY29lZl9iaXRzW10gZW50cmllcyBmb3IgdGhlCisgKiBBQyBjb2VmZmljaWVudHM7IG90aGVyd2lzZSwgaWYgdGhlIGlucHV0IHNpZGUgb2YgdGhlIGRlY29tcHJlc3NvcgorICogYWR2YW5jZXMgaW50byBhIG5ldyBzY2FuLCB3ZSBtaWdodCB0aGluayB0aGUgY29lZmZpY2llbnRzIGFyZSBrbm93bgorICogbW9yZSBhY2N1cmF0ZWx5IHRoYW4gdGhleSByZWFsbHkgYXJlLgorICovCisKK0xPQ0FMKGJvb2xlYW4pCitzbW9vdGhpbmdfb2soal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0ciljaW5mby0+Y29lZjsKKyAgYm9vbGVhbiBzbW9vdGhpbmdfdXNlZnVsID0gRkFMU0U7CisgIGludCBjaSwgY29lZmk7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpRVUFOVF9UQkwgKnF0YWJsZTsKKyAgaW50ICpjb2VmX2JpdHM7CisgIGludCAqY29lZl9iaXRzX2xhdGNoOworCisgIGlmICghY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwgY2luZm8tPmNvZWZfYml0cyA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBBbGxvY2F0ZSBsYXRjaCBhcmVhIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKyAgaWYgKGNvZWYtPmNvZWZfYml0c19sYXRjaCA9PSBOVUxMKQorICAgIGNvZWYtPmNvZWZfYml0c19sYXRjaCA9IChpbnQgKikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQVZFRF9DT0VGUyAqIHNpemVvZihpbnQpKSk7CisgIGNvZWZfYml0c19sYXRjaCA9IGNvZWYtPmNvZWZfYml0c19sYXRjaDsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIEFsbCBjb21wb25lbnRzJyBxdWFudGl6YXRpb24gdmFsdWVzIG11c3QgYWxyZWFkeSBiZSBsYXRjaGVkLiAqLworICAgIGlmICgocXRhYmxlID0gY29tcHB0ci0+cXVhbnRfdGFibGUpID09IE5VTEwpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgLyogVmVyaWZ5IERDICYgZmlyc3QgNSBBQyBxdWFudGl6ZXJzIGFyZSBub256ZXJvIHRvIGF2b2lkIHplcm8tZGl2aWRlLiAqLworICAgIGlmIChxdGFibGUtPnF1YW50dmFsWzBdID09IDAgfHwKKyAgICAgICAgcXRhYmxlLT5xdWFudHZhbFtRMDFfUE9TXSA9PSAwIHx8CisgICAgICAgIHF0YWJsZS0+cXVhbnR2YWxbUTEwX1BPU10gPT0gMCB8fAorICAgICAgICBxdGFibGUtPnF1YW50dmFsW1EyMF9QT1NdID09IDAgfHwKKyAgICAgICAgcXRhYmxlLT5xdWFudHZhbFtRMTFfUE9TXSA9PSAwIHx8CisgICAgICAgIHF0YWJsZS0+cXVhbnR2YWxbUTAyX1BPU10gPT0gMCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICAvKiBEQyB2YWx1ZXMgbXVzdCBiZSBhdCBsZWFzdCBwYXJ0bHkga25vd24gZm9yIGFsbCBjb21wb25lbnRzLiAqLworICAgIGNvZWZfYml0cyA9IGNpbmZvLT5jb2VmX2JpdHNbY2ldOworICAgIGlmIChjb2VmX2JpdHNbMF0gPCAwKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIC8qIEJsb2NrIHNtb290aGluZyBpcyBoZWxwZnVsIGlmIHNvbWUgQUMgY29lZmZpY2llbnRzIHJlbWFpbiBpbmFjY3VyYXRlLiAqLworICAgIGZvciAoY29lZmkgPSAxOyBjb2VmaSA8PSA1OyBjb2VmaSsrKSB7CisgICAgICBjb2VmX2JpdHNfbGF0Y2hbY29lZmldID0gY29lZl9iaXRzW2NvZWZpXTsKKyAgICAgIGlmIChjb2VmX2JpdHNbY29lZmldICE9IDApCisgICAgICAgIHNtb290aGluZ191c2VmdWwgPSBUUlVFOworICAgIH0KKyAgICBjb2VmX2JpdHNfbGF0Y2ggKz0gU0FWRURfQ09FRlM7CisgIH0KKworICByZXR1cm4gc21vb3RoaW5nX3VzZWZ1bDsKK30KKworCisvKgorICogVmFyaWFudCBvZiBkZWNvbXByZXNzX2RhdGEgZm9yIHVzZSB3aGVuIGRvaW5nIGJsb2NrIHNtb290aGluZy4KKyAqLworCitNRVRIT0RERUYoaW50KQorZGVjb21wcmVzc19zbW9vdGhfZGF0YShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpY2luZm8tPmNvZWY7CisgIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOworICBKRElNRU5TSU9OIGJsb2NrX251bSwgbGFzdF9ibG9ja19jb2x1bW47CisgIGludCBjaSwgYmxvY2tfcm93LCBibG9ja19yb3dzLCBhY2Nlc3Nfcm93czsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyOworICBKQkxPQ0tST1cgYnVmZmVyX3B0ciwgcHJldl9ibG9ja19yb3csIG5leHRfYmxvY2tfcm93OworICBKU0FNUEFSUkFZIG91dHB1dF9wdHI7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpbnZlcnNlX0RDVDsKKyAgYm9vbGVhbiBmaXJzdF9yb3csIGxhc3Rfcm93OworICBKQ09FRiAqd29ya3NwYWNlOworICBpbnQgKmNvZWZfYml0czsKKyAgSlFVQU5UX1RCTCAqcXVhbnR0Ymw7CisgIEpMT05HIFEwMCwgUTAxLCBRMDIsIFExMCwgUTExLCBRMjAsIG51bTsKKyAgaW50IERDMSwgREMyLCBEQzMsIERDNCwgREM1LCBEQzYsIERDNywgREM4LCBEQzk7CisgIGludCBBbCwgcHJlZDsKKworICAvKiBLZWVwIGEgbG9jYWwgdmFyaWFibGUgdG8gYXZvaWQgbG9va2luZyBpdCB1cCBtb3JlIHRoYW4gb25jZSAqLworICB3b3Jrc3BhY2UgPSBjb2VmLT53b3Jrc3BhY2U7CisKKyAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8KKyAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8PSBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyICYmCisgICAgICAgICAhY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCkgeworICAgIGlmIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPT0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlcikgeworICAgICAgLyogSWYgaW5wdXQgaXMgd29ya2luZyBvbiBjdXJyZW50IHNjYW4sIHdlIG9yZGluYXJpbHkgd2FudCBpdCB0bworICAgICAgICogaGF2ZSBjb21wbGV0ZWQgdGhlIGN1cnJlbnQgcm93LiAgQnV0IGlmIGlucHV0IHNjYW4gaXMgREMsCisgICAgICAgKiB3ZSB3YW50IGl0IHRvIGtlZXAgb25lIHJvdyBhaGVhZCBzbyB0aGF0IG5leHQgYmxvY2sgcm93J3MgREMKKyAgICAgICAqIHZhbHVlcyBhcmUgdXAgdG8gZGF0ZS4KKyAgICAgICAqLworICAgICAgSkRJTUVOU0lPTiBkZWx0YSA9IChjaW5mby0+U3MgPT0gMCkgPyAxIDogMDsKKyAgICAgIGlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPiBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93ICsgZGVsdGEpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbykgPT0gSlBFR19TVVNQRU5ERUQpCisgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgIH0KKworICAvKiBPSywgb3V0cHV0IGZyb20gdGhlIHZpcnR1YWwgYXJyYXlzLiAqLworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIERvbid0IGJvdGhlciB0byBJRENUIGFuIHVuaW50ZXJlc3RpbmcgY29tcG9uZW50LiAqLworICAgIGlmICghY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkKKyAgICAgIGNvbnRpbnVlOworICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdykgeworICAgICAgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgICBhY2Nlc3Nfcm93cyA9IGJsb2NrX3Jvd3MgKiAyOyAvKiB0aGlzIGFuZCBuZXh0IGlNQ1Ugcm93ICovCisgICAgICBsYXN0X3JvdyA9IEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICAvKiBOQjogY2FuJ3QgdXNlIGxhc3Rfcm93X2hlaWdodCBoZXJlOyBpdCBpcyBpbnB1dC1zaWRlLWRlcGVuZGVudCEgKi8KKyAgICAgIGJsb2NrX3Jvd3MgPSAoaW50KShjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICUgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgICAgICBpZiAoYmxvY2tfcm93cyA9PSAwKSBibG9ja19yb3dzID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICAgIGFjY2Vzc19yb3dzID0gYmxvY2tfcm93czsgLyogdGhpcyBpTUNVIHJvdyBvbmx5ICovCisgICAgICBsYXN0X3JvdyA9IFRSVUU7CisgICAgfQorICAgIC8qIEFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlciBmb3IgdGhpcyBjb21wb25lbnQuICovCisgICAgaWYgKGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgPiAwKSB7CisgICAgICBhY2Nlc3Nfcm93cyArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyAvKiBwcmlvciBpTUNVIHJvdyB0b28gKi8KKyAgICAgIGJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY2ldLAorICAgICAgICAgKGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgLSAxKSAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAoSkRJTUVOU0lPTilhY2Nlc3Nfcm93cywgRkFMU0UpOworICAgICAgYnVmZmVyICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IC8qIHBvaW50IHRvIGN1cnJlbnQgaU1DVSByb3cgKi8KKyAgICAgIGZpcnN0X3JvdyA9IEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICBidWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NpXSwKKyAgICAgICAgIChKRElNRU5TSU9OKTAsIChKRElNRU5TSU9OKWFjY2Vzc19yb3dzLCBGQUxTRSk7CisgICAgICBmaXJzdF9yb3cgPSBUUlVFOworICAgIH0KKyAgICAvKiBGZXRjaCBjb21wb25lbnQtZGVwZW5kZW50IGluZm8gKi8KKyAgICBjb2VmX2JpdHMgPSBjb2VmLT5jb2VmX2JpdHNfbGF0Y2ggKyAoY2kgKiBTQVZFRF9DT0VGUyk7CisgICAgcXVhbnR0YmwgPSBjb21wcHRyLT5xdWFudF90YWJsZTsKKyAgICBRMDAgPSBxdWFudHRibC0+cXVhbnR2YWxbMF07CisgICAgUTAxID0gcXVhbnR0YmwtPnF1YW50dmFsW1EwMV9QT1NdOworICAgIFExMCA9IHF1YW50dGJsLT5xdWFudHZhbFtRMTBfUE9TXTsKKyAgICBRMjAgPSBxdWFudHRibC0+cXVhbnR2YWxbUTIwX1BPU107CisgICAgUTExID0gcXVhbnR0YmwtPnF1YW50dmFsW1ExMV9QT1NdOworICAgIFEwMiA9IHF1YW50dGJsLT5xdWFudHZhbFtRMDJfUE9TXTsKKyAgICBpbnZlcnNlX0RDVCA9IGNpbmZvLT5pZGN0LT5pbnZlcnNlX0RDVFtjaV07CisgICAgb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbY2ldOworICAgIC8qIExvb3Agb3ZlciBhbGwgRENUIGJsb2NrcyB0byBiZSBwcm9jZXNzZWQuICovCisgICAgZm9yIChibG9ja19yb3cgPSAwOyBibG9ja19yb3cgPCBibG9ja19yb3dzOyBibG9ja19yb3crKykgeworICAgICAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltibG9ja19yb3ddICsgY2luZm8tPm1hc3Rlci0+Zmlyc3RfTUNVX2NvbFtjaV07CisgICAgICBpZiAoZmlyc3Rfcm93ICYmIGJsb2NrX3JvdyA9PSAwKQorICAgICAgICBwcmV2X2Jsb2NrX3JvdyA9IGJ1ZmZlcl9wdHI7CisgICAgICBlbHNlCisgICAgICAgIHByZXZfYmxvY2tfcm93ID0gYnVmZmVyW2Jsb2NrX3JvdyAtIDFdOworICAgICAgaWYgKGxhc3Rfcm93ICYmIGJsb2NrX3JvdyA9PSBibG9ja19yb3dzIC0gMSkKKyAgICAgICAgbmV4dF9ibG9ja19yb3cgPSBidWZmZXJfcHRyOworICAgICAgZWxzZQorICAgICAgICBuZXh0X2Jsb2NrX3JvdyA9IGJ1ZmZlcltibG9ja19yb3cgKyAxXTsKKyAgICAgIC8qIFdlIGZldGNoIHRoZSBzdXJyb3VuZGluZyBEQyB2YWx1ZXMgdXNpbmcgYSBzbGlkaW5nLXJlZ2lzdGVyIGFwcHJvYWNoLgorICAgICAgICogSW5pdGlhbGl6ZSBhbGwgbmluZSBoZXJlIHNvIGFzIHRvIGRvIHRoZSByaWdodCB0aGluZyBvbiBuYXJyb3cgcGljcy4KKyAgICAgICAqLworICAgICAgREMxID0gREMyID0gREMzID0gKGludClwcmV2X2Jsb2NrX3Jvd1swXVswXTsKKyAgICAgIERDNCA9IERDNSA9IERDNiA9IChpbnQpYnVmZmVyX3B0clswXVswXTsKKyAgICAgIERDNyA9IERDOCA9IERDOSA9IChpbnQpbmV4dF9ibG9ja19yb3dbMF1bMF07CisgICAgICBvdXRwdXRfY29sID0gMDsKKyAgICAgIGxhc3RfYmxvY2tfY29sdW1uID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzIC0gMTsKKyAgICAgIGZvciAoYmxvY2tfbnVtID0gY2luZm8tPm1hc3Rlci0+Zmlyc3RfTUNVX2NvbFtjaV07CisgICAgICAgICAgIGJsb2NrX251bSA8PSBjaW5mby0+bWFzdGVyLT5sYXN0X01DVV9jb2xbY2ldOyBibG9ja19udW0rKykgeworICAgICAgICAvKiBGZXRjaCBjdXJyZW50IERDVCBibG9jayBpbnRvIHdvcmtzcGFjZSBzbyB3ZSBjYW4gbW9kaWZ5IGl0LiAqLworICAgICAgICBqY29weV9ibG9ja19yb3coYnVmZmVyX3B0ciwgKEpCTE9DS1JPVyl3b3Jrc3BhY2UsIChKRElNRU5TSU9OKTEpOworICAgICAgICAvKiBVcGRhdGUgREMgdmFsdWVzICovCisgICAgICAgIGlmIChibG9ja19udW0gPCBsYXN0X2Jsb2NrX2NvbHVtbikgeworICAgICAgICAgIERDMyA9IChpbnQpcHJldl9ibG9ja19yb3dbMV1bMF07CisgICAgICAgICAgREM2ID0gKGludClidWZmZXJfcHRyWzFdWzBdOworICAgICAgICAgIERDOSA9IChpbnQpbmV4dF9ibG9ja19yb3dbMV1bMF07CisgICAgICAgIH0KKyAgICAgICAgLyogQ29tcHV0ZSBjb2VmZmljaWVudCBlc3RpbWF0ZXMgcGVyIEsuOC4KKyAgICAgICAgICogQW4gZXN0aW1hdGUgaXMgYXBwbGllZCBvbmx5IGlmIGNvZWZmaWNpZW50IGlzIHN0aWxsIHplcm8sCisgICAgICAgICAqIGFuZCBpcyBub3Qga25vd24gdG8gYmUgZnVsbHkgYWNjdXJhdGUuCisgICAgICAgICAqLworICAgICAgICAvKiBBQzAxICovCisgICAgICAgIGlmICgoQWwgPSBjb2VmX2JpdHNbMV0pICE9IDAgJiYgd29ya3NwYWNlWzFdID09IDApIHsKKyAgICAgICAgICBudW0gPSAzNiAqIFEwMCAqIChEQzQgLSBEQzYpOworICAgICAgICAgIGlmIChudW0gPj0gMCkgeworICAgICAgICAgICAgcHJlZCA9IChpbnQpKCgoUTAxIDw8IDcpICsgbnVtKSAvIChRMDEgPDwgOCkpOworICAgICAgICAgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxIDw8IEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxIDw8IEFsKSAtIDE7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSgoKFEwMSA8PCA3KSAtIG51bSkgLyAoUTAxIDw8IDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMSA8PCBBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMSA8PCBBbCkgLSAxOworICAgICAgICAgICAgcHJlZCA9IC1wcmVkOworICAgICAgICAgIH0KKyAgICAgICAgICB3b3Jrc3BhY2VbMV0gPSAoSkNPRUYpcHJlZDsKKyAgICAgICAgfQorICAgICAgICAvKiBBQzEwICovCisgICAgICAgIGlmICgoQWwgPSBjb2VmX2JpdHNbMl0pICE9IDAgJiYgd29ya3NwYWNlWzhdID09IDApIHsKKyAgICAgICAgICBudW0gPSAzNiAqIFEwMCAqIChEQzIgLSBEQzgpOworICAgICAgICAgIGlmIChudW0gPj0gMCkgeworICAgICAgICAgICAgcHJlZCA9IChpbnQpKCgoUTEwIDw8IDcpICsgbnVtKSAvIChRMTAgPDwgOCkpOworICAgICAgICAgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxIDw8IEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxIDw8IEFsKSAtIDE7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSgoKFExMCA8PCA3KSAtIG51bSkgLyAoUTEwIDw8IDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMSA8PCBBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMSA8PCBBbCkgLSAxOworICAgICAgICAgICAgcHJlZCA9IC1wcmVkOworICAgICAgICAgIH0KKyAgICAgICAgICB3b3Jrc3BhY2VbOF0gPSAoSkNPRUYpcHJlZDsKKyAgICAgICAgfQorICAgICAgICAvKiBBQzIwICovCisgICAgICAgIGlmICgoQWwgPSBjb2VmX2JpdHNbM10pICE9IDAgJiYgd29ya3NwYWNlWzE2XSA9PSAwKSB7CisgICAgICAgICAgbnVtID0gOSAqIFEwMCAqIChEQzIgKyBEQzggLSAyICogREM1KTsKKyAgICAgICAgICBpZiAobnVtID49IDApIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSgoKFEyMCA8PCA3KSArIG51bSkgLyAoUTIwIDw8IDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMSA8PCBBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMSA8PCBBbCkgLSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkoKChRMjAgPDwgNykgLSBudW0pIC8gKFEyMCA8PCA4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDEgPDwgQWwpKQorICAgICAgICAgICAgICBwcmVkID0gKDEgPDwgQWwpIC0gMTsKKyAgICAgICAgICAgIHByZWQgPSAtcHJlZDsKKyAgICAgICAgICB9CisgICAgICAgICAgd29ya3NwYWNlWzE2XSA9IChKQ09FRilwcmVkOworICAgICAgICB9CisgICAgICAgIC8qIEFDMTEgKi8KKyAgICAgICAgaWYgKChBbCA9IGNvZWZfYml0c1s0XSkgIT0gMCAmJiB3b3Jrc3BhY2VbOV0gPT0gMCkgeworICAgICAgICAgIG51bSA9IDUgKiBRMDAgKiAoREMxIC0gREMzIC0gREM3ICsgREM5KTsKKyAgICAgICAgICBpZiAobnVtID49IDApIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSgoKFExMSA8PCA3KSArIG51bSkgLyAoUTExIDw8IDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMSA8PCBBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMSA8PCBBbCkgLSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkoKChRMTEgPDwgNykgLSBudW0pIC8gKFExMSA8PCA4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDEgPDwgQWwpKQorICAgICAgICAgICAgICBwcmVkID0gKDEgPDwgQWwpIC0gMTsKKyAgICAgICAgICAgIHByZWQgPSAtcHJlZDsKKyAgICAgICAgICB9CisgICAgICAgICAgd29ya3NwYWNlWzldID0gKEpDT0VGKXByZWQ7CisgICAgICAgIH0KKyAgICAgICAgLyogQUMwMiAqLworICAgICAgICBpZiAoKEFsID0gY29lZl9iaXRzWzVdKSAhPSAwICYmIHdvcmtzcGFjZVsyXSA9PSAwKSB7CisgICAgICAgICAgbnVtID0gOSAqIFEwMCAqIChEQzQgKyBEQzYgLSAyICogREM1KTsKKyAgICAgICAgICBpZiAobnVtID49IDApIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSgoKFEwMiA8PCA3KSArIG51bSkgLyAoUTAyIDw8IDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMSA8PCBBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMSA8PCBBbCkgLSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkoKChRMDIgPDwgNykgLSBudW0pIC8gKFEwMiA8PCA4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDEgPDwgQWwpKQorICAgICAgICAgICAgICBwcmVkID0gKDEgPDwgQWwpIC0gMTsKKyAgICAgICAgICAgIHByZWQgPSAtcHJlZDsKKyAgICAgICAgICB9CisgICAgICAgICAgd29ya3NwYWNlWzJdID0gKEpDT0VGKXByZWQ7CisgICAgICAgIH0KKyAgICAgICAgLyogT0ssIGRvIHRoZSBJRENUICovCisgICAgICAgICgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwgKEpDT0VGUFRSKXdvcmtzcGFjZSwgb3V0cHV0X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworICAgICAgICAvKiBBZHZhbmNlIGZvciBuZXh0IGNvbHVtbiAqLworICAgICAgICBEQzEgPSBEQzI7ICBEQzIgPSBEQzM7CisgICAgICAgIERDNCA9IERDNTsgIERDNSA9IERDNjsKKyAgICAgICAgREM3ID0gREM4OyAgREM4ID0gREM5OworICAgICAgICBidWZmZXJfcHRyKyssIHByZXZfYmxvY2tfcm93KyssIG5leHRfYmxvY2tfcm93Kys7CisgICAgICAgIG91dHB1dF9jb2wgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKKyAgICAgIH0KKyAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKKyAgICB9CisgIH0KKworICBpZiAoKysoY2luZm8tPm91dHB1dF9pTUNVX3JvdykgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKQorICAgIHJldHVybiBKUEVHX1JPV19DT01QTEVURUQ7CisgIHJldHVybiBKUEVHX1NDQU5fQ09NUExFVEVEOworfQorCisjZW5kaWYgLyogQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBJbml0aWFsaXplIGNvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sbGVyLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfZF9jb2VmX2NvbnRyb2xsZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKQoreworICBteV9jb2VmX3B0ciBjb2VmOworCisgIGNvZWYgPSAobXlfY29lZl9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfY29lZl9jb250cm9sbGVyKSk7CisgIGNpbmZvLT5jb2VmID0gKHN0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyICopY29lZjsKKyAgY29lZi0+cHViLnN0YXJ0X2lucHV0X3Bhc3MgPSBzdGFydF9pbnB1dF9wYXNzOworICBjb2VmLT5wdWIuc3RhcnRfb3V0cHV0X3Bhc3MgPSBzdGFydF9vdXRwdXRfcGFzczsKKyNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVECisgIGNvZWYtPmNvZWZfYml0c19sYXRjaCA9IE5VTEw7CisjZW5kaWYKKworICAvKiBDcmVhdGUgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gKi8KKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyAgICAvKiBBbGxvY2F0ZSBhIGZ1bGwtaW1hZ2UgdmlydHVhbCBhcnJheSBmb3IgZWFjaCBjb21wb25lbnQsICovCisgICAgLyogcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2Ygc2FtcF9mYWN0b3IgRENUIGJsb2NrcyBpbiBlYWNoIGRpcmVjdGlvbi4gKi8KKyAgICAvKiBOb3RlIHdlIGFzayBmb3IgYSBwcmUtemVyb2VkIGFycmF5LiAqLworICAgIGludCBjaSwgYWNjZXNzX3Jvd3M7CisgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgIGFjY2Vzc19yb3dzID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVECisgICAgICAvKiBJZiBibG9jayBzbW9vdGhpbmcgY291bGQgYmUgdXNlZCwgbmVlZCBhIGJpZ2dlciB3aW5kb3cgKi8KKyAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkKKyAgICAgICAgYWNjZXNzX3Jvd3MgKj0gMzsKKyNlbmRpZgorICAgICAgY29lZi0+d2hvbGVfaW1hZ2VbY2ldID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIFRSVUUsCisgICAgICAgICAoSkRJTUVOU0lPTilqcm91bmRfdXAoKGxvbmcpY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWNvbXBwdHItPmhfc2FtcF9mYWN0b3IpLAorICAgICAgICAgKEpESU1FTlNJT04panJvdW5kX3VwKChsb25nKWNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTilhY2Nlc3Nfcm93cyk7CisgICAgfQorICAgIGNvZWYtPnB1Yi5jb25zdW1lX2RhdGEgPSBjb25zdW1lX2RhdGE7CisgICAgY29lZi0+cHViLmRlY29tcHJlc3NfZGF0YSA9IGRlY29tcHJlc3NfZGF0YTsKKyAgICBjb2VmLT5wdWIuY29lZl9hcnJheXMgPSBjb2VmLT53aG9sZV9pbWFnZTsgLyogbGluayB0byB2aXJ0dWFsIGFycmF5cyAqLworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICAvKiBXZSBvbmx5IG5lZWQgYSBzaW5nbGUtTUNVIGJ1ZmZlci4gKi8KKyAgICBKQkxPQ0tST1cgYnVmZmVyOworICAgIGludCBpOworCisgICAgYnVmZmVyID0gKEpCTE9DS1JPVykKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEX01BWF9CTE9DS1NfSU5fTUNVICogc2l6ZW9mKEpCTE9DSykpOworICAgIGZvciAoaSA9IDA7IGkgPCBEX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsKKyAgICAgIGNvZWYtPk1DVV9idWZmZXJbaV0gPSBidWZmZXIgKyBpOworICAgIH0KKyAgICBjb2VmLT5wdWIuY29uc3VtZV9kYXRhID0gZHVtbXlfY29uc3VtZV9kYXRhOworICAgIGNvZWYtPnB1Yi5kZWNvbXByZXNzX2RhdGEgPSBkZWNvbXByZXNzX29uZXBhc3M7CisgICAgY29lZi0+cHViLmNvZWZfYXJyYXlzID0gTlVMTDsgLyogZmxhZyBmb3Igbm8gdmlydHVhbCBhcnJheXMgKi8KKyAgfQorCisgIC8qIEFsbG9jYXRlIHRoZSB3b3Jrc3BhY2UgYnVmZmVyICovCisgIGNvZWYtPndvcmtzcGFjZSA9IChKQ09FRiAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEpDT0VGKSAqIERDVFNJWkUyKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY29lZmN0LmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGNvZWZjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDE5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGNvZWZjdC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBqZGNvZWZjdC5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qIEJsb2NrIHNtb290aGluZyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHByb2dyZXNzaXZlIEpQRUcsIHNvOiAqLworI2lmbmRlZiBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorI3VuZGVmIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQKKyNlbmRpZgorCisKKy8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogVGhlc2UgdmFyaWFibGVzIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIGlucHV0IHNpZGUuICovCisgIC8qIGNpbmZvLT5pbnB1dF9pTUNVX3JvdyBpcyBhbHNvIHVzZWQgZm9yIHRoaXMuICovCisgIEpESU1FTlNJT04gTUNVX2N0cjsgICAgICAgICAgIC8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLworICBpbnQgTUNVX3ZlcnRfb2Zmc2V0OyAgICAgICAgICAvKiBjb3VudHMgTUNVIHJvd3Mgd2l0aGluIGlNQ1Ugcm93ICovCisgIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7ICAgIC8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovCisKKyAgLyogVGhlIG91dHB1dCBzaWRlJ3MgbG9jYXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgY2luZm8tPm91dHB1dF9pTUNVX3Jvdy4gKi8KKworICAvKiBJbiBzaW5nbGUtcGFzcyBtb2RlcywgaXQncyBzdWZmaWNpZW50IHRvIGJ1ZmZlciBqdXN0IG9uZSBNQ1UuCisgICAqIFdlIGFsbG9jYXRlIGEgd29ya3NwYWNlIG9mIERfTUFYX0JMT0NLU19JTl9NQ1UgY29lZmZpY2llbnQgYmxvY2tzLAorICAgKiBhbmQgbGV0IHRoZSBlbnRyb3B5IGRlY29kZXIgd3JpdGUgaW50byB0aGF0IHdvcmtzcGFjZSBlYWNoIHRpbWUuCisgICAqIEluIG11bHRpLXBhc3MgbW9kZXMsIHRoaXMgYXJyYXkgcG9pbnRzIHRvIHRoZSBjdXJyZW50IE1DVSdzIGJsb2NrcworICAgKiB3aXRoaW4gdGhlIHZpcnR1YWwgYXJyYXlzOyBpdCBpcyB1c2VkIG9ubHkgYnkgdGhlIGlucHV0IHNpZGUuCisgICAqLworICBKQkxPQ0tST1cgTUNVX2J1ZmZlcltEX01BWF9CTE9DS1NfSU5fTUNVXTsKKworICAvKiBUZW1wb3Jhcnkgd29ya3NwYWNlIGZvciBvbmUgTUNVICovCisgIEpDT0VGICp3b3Jrc3BhY2U7CisKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyAgLyogSW4gbXVsdGktcGFzcyBtb2Rlcywgd2UgbmVlZCBhIHZpcnR1YWwgYmxvY2sgYXJyYXkgZm9yIGVhY2ggY29tcG9uZW50LiAqLworICBqdmlydF9iYXJyYXlfcHRyIHdob2xlX2ltYWdlW01BWF9DT01QT05FTlRTXTsKKyNlbmRpZgorCisjaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRAorICAvKiBXaGVuIGRvaW5nIGJsb2NrIHNtb290aGluZywgd2UgbGF0Y2ggY29lZmZpY2llbnQgQWwgdmFsdWVzIGhlcmUgKi8KKyAgaW50ICpjb2VmX2JpdHNfbGF0Y2g7CisjZGVmaW5lIFNBVkVEX0NPRUZTICA2ICAgICAgICAgIC8qIHdlIHNhdmUgY29lZl9iaXRzWzAuLjVdICovCisjZW5kaWYKK30gbXlfY29lZl9jb250cm9sbGVyOworCit0eXBlZGVmIG15X2NvZWZfY29udHJvbGxlciAqbXlfY29lZl9wdHI7CisKKworTE9DQUwodm9pZCkKK3N0YXJ0X2lNQ1Vfcm93KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBSZXNldCB3aXRoaW4taU1DVS1yb3cgY291bnRlcnMgZm9yIGEgbmV3IHJvdyAoaW5wdXQgc2lkZSkgKi8KK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0ciljaW5mby0+Y29lZjsKKworICAvKiBJbiBhbiBpbnRlcmxlYXZlZCBzY2FuLCBhbiBNQ1Ugcm93IGlzIHRoZSBzYW1lIGFzIGFuIGlNQ1Ugcm93LgorICAgKiBJbiBhIG5vbmludGVybGVhdmVkIHNjYW4sIGFuIGlNQ1Ugcm93IGhhcyB2X3NhbXBfZmFjdG9yIE1DVSByb3dzLgorICAgKiBCdXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHByb2Nlc3Mgb25seSB3aGF0J3MgbGVmdC4KKyAgICovCisgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA+IDEpIHsKKyAgICBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3cgPSAxOworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPCAoY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyAtIDEpKQorICAgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPnZfc2FtcF9mYWN0b3I7CisgICAgZWxzZQorICAgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPmxhc3Rfcm93X2hlaWdodDsKKyAgfQorCisgIGNvZWYtPk1DVV9jdHIgPSAwOworICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjb2w1NjUuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY29sNTY1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNjhlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY29sNTY1LmMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBqZGNvbDU2NS5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDEzLCBMaW5hcm8gTGltaXRlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgb3V0cHV0IGNvbG9yc3BhY2UgY29udmVyc2lvbiByb3V0aW5lcy4KKyAqLworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgamRjb2xvci5jICovCisKKworSU5MSU5FCitMT0NBTCh2b2lkKQoreWNjX3JnYjU2NV9jb252ZXJ0X2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgcmVnaXN0ZXIgaW50IHksIGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgIC8qIGNvcHkgdGhlc2UgcG9pbnRlcnMgaW50byByZWdpc3RlcnMgaWYgcG9zc2libGUgKi8KKyAgcmVnaXN0ZXIgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICByZWdpc3RlciBpbnQgKkNycnRhYiA9IGNjb252ZXJ0LT5Dcl9yX3RhYjsKKyAgcmVnaXN0ZXIgaW50ICpDYmJ0YWIgPSBjY29udmVydC0+Q2JfYl90YWI7CisgIHJlZ2lzdGVyIEpMT05HICpDcmd0YWIgPSBjY29udmVydC0+Q3JfZ190YWI7CisgIHJlZ2lzdGVyIEpMT05HICpDYmd0YWIgPSBjY29udmVydC0+Q2JfZ190YWI7CisgIFNISUZUX1RFTVBTCisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIEpMT05HIHJnYjsKKyAgICB1bnNpZ25lZCBpbnQgciwgZywgYjsKKyAgICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93XTsKKyAgICBpbnB0cjEgPSBpbnB1dF9idWZbMV1baW5wdXRfcm93XTsKKyAgICBpbnB0cjIgPSBpbnB1dF9idWZbMl1baW5wdXRfcm93XTsKKyAgICBpbnB1dF9yb3crKzsKKyAgICBvdXRwdHIgPSAqb3V0cHV0X2J1ZisrOworCisgICAgaWYgKFBBQ0tfTkVFRF9BTElHTk1FTlQob3V0cHRyKSkgeworICAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjArKyk7CisgICAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKyspOworICAgICAgciA9IHJhbmdlX2xpbWl0W3kgKyBDcnJ0YWJbY3JdXTsKKyAgICAgIGcgPSByYW5nZV9saW1pdFt5ICsgKChpbnQpUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQUxFQklUUykpXTsKKyAgICAgIGIgPSByYW5nZV9saW1pdFt5ICsgQ2JidGFiW2NiXV07CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICAgICAgb3V0cHRyICs9IDI7CisgICAgICBudW1fY29scy0tOworICAgIH0KKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IChudW1fY29scyA+PiAxKTsgY29sKyspIHsKKyAgICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICAgIHIgPSByYW5nZV9saW1pdFt5ICsgQ3JydGFiW2NyXV07CisgICAgICBnID0gcmFuZ2VfbGltaXRbeSArICgoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRUJJVFMpKV07CisgICAgICBiID0gcmFuZ2VfbGltaXRbeSArIENiYnRhYltjYl1dOworICAgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisKKyAgICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICAgIHIgPSByYW5nZV9saW1pdFt5ICsgQ3JydGFiW2NyXV07CisgICAgICBnID0gcmFuZ2VfbGltaXRbeSArICgoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRUJJVFMpKV07CisgICAgICBiID0gcmFuZ2VfbGltaXRbeSArIENiYnRhYltjYl1dOworICAgICAgcmdiID0gUEFDS19UV09fUElYRUxTKHJnYiwgUEFDS19TSE9SVF81NjUociwgZywgYikpOworCisgICAgICBXUklURV9UV09fQUxJR05FRF9QSVhFTFMob3V0cHRyLCByZ2IpOworICAgICAgb3V0cHRyICs9IDQ7CisgICAgfQorICAgIGlmIChudW1fY29scyAmIDEpIHsKKyAgICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKTsKKyAgICAgIGNiID0gR0VUSlNBTVBMRSgqaW5wdHIxKTsKKyAgICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsKKyAgICAgIHIgPSByYW5nZV9saW1pdFt5ICsgQ3JydGFiW2NyXV07CisgICAgICBnID0gcmFuZ2VfbGltaXRbeSArICgoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRUJJVFMpKV07CisgICAgICBiID0gcmFuZ2VfbGltaXRbeSArIENiYnRhYltjYl1dOworICAgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisgICAgICAqKElOVDE2ICopb3V0cHRyID0gKElOVDE2KXJnYjsKKyAgICB9CisgIH0KK30KKworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCit5Y2NfcmdiNTY1RF9jb252ZXJ0X2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIG15X2Njb252ZXJ0X3B0ciBjY29udmVydCA9IChteV9jY29udmVydF9wdHIpY2luZm8tPmNjb252ZXJ0OworICByZWdpc3RlciBpbnQgeSwgY2IsIGNyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPm91dHB1dF93aWR0aDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIHJlZ2lzdGVyIGludCAqQ3JydGFiID0gY2NvbnZlcnQtPkNyX3JfdGFiOworICByZWdpc3RlciBpbnQgKkNiYnRhYiA9IGNjb252ZXJ0LT5DYl9iX3RhYjsKKyAgcmVnaXN0ZXIgSkxPTkcgKkNyZ3RhYiA9IGNjb252ZXJ0LT5Dcl9nX3RhYjsKKyAgcmVnaXN0ZXIgSkxPTkcgKkNiZ3RhYiA9IGNjb252ZXJ0LT5DYl9nX3RhYjsKKyAgSkxPTkcgZDAgPSBkaXRoZXJfbWF0cml4W2NpbmZvLT5vdXRwdXRfc2NhbmxpbmUgJiBESVRIRVJfTUFTS107CisgIFNISUZUX1RFTVBTCisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIEpMT05HIHJnYjsKKyAgICB1bnNpZ25lZCBpbnQgciwgZywgYjsKKworICAgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgIGlucHV0X3JvdysrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgaWYgKFBBQ0tfTkVFRF9BTElHTk1FTlQob3V0cHRyKSkgeworICAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjArKyk7CisgICAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKyspOworICAgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUih5ICsgQ3JydGFiW2NyXSwgZDApXTsKKyAgICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0coeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRUJJVFMpKSwgZDApXTsKKyAgICAgIGIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0IoeSArIENiYnRhYltjYl0sIGQwKV07CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICAgICAgb3V0cHRyICs9IDI7CisgICAgICBudW1fY29scy0tOworICAgIH0KKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IChudW1fY29scyA+PiAxKTsgY29sKyspIHsKKyAgICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICAgIHIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoeSArIENycnRhYltjcl0sIGQwKV07CisgICAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKHkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludClSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NBTEVCSVRTKSksIGQwKV07CisgICAgICBiID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9CKHkgKyBDYmJ0YWJbY2JdLCBkMCldOworICAgICAgZDAgPSBESVRIRVJfUk9UQVRFKGQwKTsKKyAgICAgIHJnYiA9IFBBQ0tfU0hPUlRfNTY1KHIsIGcsIGIpOworCisgICAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKTsKKyAgICAgIGNiID0gR0VUSlNBTVBMRSgqaW5wdHIxKyspOworICAgICAgY3IgPSBHRVRKU0FNUExFKCppbnB0cjIrKyk7CisgICAgICByID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9SKHkgKyBDcnJ0YWJbY3JdLCBkMCldOworICAgICAgZyA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfRyh5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbnQpUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQUxFQklUUykpLCBkMCldOworICAgICAgYiA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfQih5ICsgQ2JidGFiW2NiXSwgZDApXTsKKyAgICAgIGQwID0gRElUSEVSX1JPVEFURShkMCk7CisgICAgICByZ2IgPSBQQUNLX1RXT19QSVhFTFMocmdiLCBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKSk7CisKKyAgICAgIFdSSVRFX1RXT19BTElHTkVEX1BJWEVMUyhvdXRwdHIsIHJnYik7CisgICAgICBvdXRwdHIgKz0gNDsKKyAgICB9CisgICAgaWYgKG51bV9jb2xzICYgMSkgeworICAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjApOworICAgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjEpOworICAgICAgY3IgPSBHRVRKU0FNUExFKCppbnB0cjIpOworICAgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUih5ICsgQ3JydGFiW2NyXSwgZDApXTsKKyAgICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0coeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRUJJVFMpKSwgZDApXTsKKyAgICAgIGIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0IoeSArIENiYnRhYltjYl0sIGQwKV07CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICAgIH0KKyAgfQorfQorCisKK0lOTElORQorTE9DQUwodm9pZCkKK3JnYl9yZ2I1NjVfY29udmVydF9pbnRlcm5hbChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgIFNISUZUX1RFTVBTCisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIEpMT05HIHJnYjsKKyAgICB1bnNpZ25lZCBpbnQgciwgZywgYjsKKworICAgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgIGlucHV0X3JvdysrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgaWYgKFBBQ0tfTkVFRF9BTElHTk1FTlQob3V0cHRyKSkgeworICAgICAgciA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKTsKKyAgICAgIGcgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICBiID0gR0VUSlNBTVBMRSgqaW5wdHIyKyspOworICAgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisgICAgICAqKElOVDE2ICopb3V0cHRyID0gKElOVDE2KXJnYjsKKyAgICAgIG91dHB0ciArPSAyOworICAgICAgbnVtX2NvbHMtLTsKKyAgICB9CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCAobnVtX2NvbHMgPj4gMSk7IGNvbCsrKSB7CisgICAgICByID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgICAgZyA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICAgIGIgPSBHRVRKU0FNUExFKCppbnB0cjIrKyk7CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKworICAgICAgciA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKTsKKyAgICAgIGcgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICBiID0gR0VUSlNBTVBMRSgqaW5wdHIyKyspOworICAgICAgcmdiID0gUEFDS19UV09fUElYRUxTKHJnYiwgUEFDS19TSE9SVF81NjUociwgZywgYikpOworCisgICAgICBXUklURV9UV09fQUxJR05FRF9QSVhFTFMob3V0cHRyLCByZ2IpOworICAgICAgb3V0cHRyICs9IDQ7CisgICAgfQorICAgIGlmIChudW1fY29scyAmIDEpIHsKKyAgICAgIHIgPSBHRVRKU0FNUExFKCppbnB0cjApOworICAgICAgZyA9IEdFVEpTQU1QTEUoKmlucHRyMSk7CisgICAgICBiID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsKKyAgICAgIHJnYiA9IFBBQ0tfU0hPUlRfNTY1KHIsIGcsIGIpOworICAgICAgKihJTlQxNiAqKW91dHB0ciA9IChJTlQxNilyZ2I7CisgICAgfQorICB9Cit9CisKKworSU5MSU5FCitMT0NBTCh2b2lkKQorcmdiX3JnYjU2NURfY29udmVydF9pbnRlcm5hbChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworICBKTE9ORyBkMCA9IGRpdGhlcl9tYXRyaXhbY2luZm8tPm91dHB1dF9zY2FubGluZSAmIERJVEhFUl9NQVNLXTsKKyAgU0hJRlRfVEVNUFMKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgSkxPTkcgcmdiOworICAgIHVuc2lnbmVkIGludCByLCBnLCBiOworCisgICAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2lucHV0X3Jvd107CisgICAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2lucHV0X3Jvd107CisgICAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2lucHV0X3Jvd107CisgICAgaW5wdXRfcm93Kys7CisgICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsKKyAgICBpZiAoUEFDS19ORUVEX0FMSUdOTUVOVChvdXRwdHIpKSB7CisgICAgICByID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9SKEdFVEpTQU1QTEUoKmlucHRyMCsrKSwgZDApXTsKKyAgICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0coR0VUSlNBTVBMRSgqaW5wdHIxKyspLCBkMCldOworICAgICAgYiA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfQihHRVRKU0FNUExFKCppbnB0cjIrKyksIGQwKV07CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICAgICAgb3V0cHRyICs9IDI7CisgICAgICBudW1fY29scy0tOworICAgIH0KKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IChudW1fY29scyA+PiAxKTsgY29sKyspIHsKKyAgICAgIHIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoR0VUSlNBTVBMRSgqaW5wdHIwKyspLCBkMCldOworICAgICAgZyA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfRyhHRVRKU0FNUExFKCppbnB0cjErKyksIGQwKV07CisgICAgICBiID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9CKEdFVEpTQU1QTEUoKmlucHRyMisrKSwgZDApXTsKKyAgICAgIGQwID0gRElUSEVSX1JPVEFURShkMCk7CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKworICAgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUihHRVRKU0FNUExFKCppbnB0cjArKyksIGQwKV07CisgICAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKEdFVEpTQU1QTEUoKmlucHRyMSsrKSwgZDApXTsKKyAgICAgIGIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0IoR0VUSlNBTVBMRSgqaW5wdHIyKyspLCBkMCldOworICAgICAgZDAgPSBESVRIRVJfUk9UQVRFKGQwKTsKKyAgICAgIHJnYiA9IFBBQ0tfVFdPX1BJWEVMUyhyZ2IsIFBBQ0tfU0hPUlRfNTY1KHIsIGcsIGIpKTsKKworICAgICAgV1JJVEVfVFdPX0FMSUdORURfUElYRUxTKG91dHB0ciwgcmdiKTsKKyAgICAgIG91dHB0ciArPSA0OworICAgIH0KKyAgICBpZiAobnVtX2NvbHMgJiAxKSB7CisgICAgICByID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9SKEdFVEpTQU1QTEUoKmlucHRyMCksIGQwKV07CisgICAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKEdFVEpTQU1QTEUoKmlucHRyMSksIGQwKV07CisgICAgICBiID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9CKEdFVEpTQU1QTEUoKmlucHRyMiksIGQwKV07CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICAgIH0KKyAgfQorfQorCisKK0lOTElORQorTE9DQUwodm9pZCkKK2dyYXlfcmdiNTY1X2NvbnZlcnRfaW50ZXJuYWwoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBKTE9ORyByZ2I7CisgICAgdW5zaWduZWQgaW50IGc7CisKKyAgICBpbnB0ciA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3crK107CisgICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsKKyAgICBpZiAoUEFDS19ORUVEX0FMSUdOTUVOVChvdXRwdHIpKSB7CisgICAgICBnID0gKmlucHRyKys7CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShnLCBnLCBnKTsKKyAgICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICAgICAgb3V0cHRyICs9IDI7CisgICAgICBudW1fY29scy0tOworICAgIH0KKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IChudW1fY29scyA+PiAxKTsgY29sKyspIHsKKyAgICAgIGcgPSAqaW5wdHIrKzsKKyAgICAgIHJnYiA9IFBBQ0tfU0hPUlRfNTY1KGcsIGcsIGcpOworICAgICAgZyA9ICppbnB0cisrOworICAgICAgcmdiID0gUEFDS19UV09fUElYRUxTKHJnYiwgUEFDS19TSE9SVF81NjUoZywgZywgZykpOworICAgICAgV1JJVEVfVFdPX0FMSUdORURfUElYRUxTKG91dHB0ciwgcmdiKTsKKyAgICAgIG91dHB0ciArPSA0OworICAgIH0KKyAgICBpZiAobnVtX2NvbHMgJiAxKSB7CisgICAgICBnID0gKmlucHRyOworICAgICAgcmdiID0gUEFDS19TSE9SVF81NjUoZywgZywgZyk7CisgICAgICAqKElOVDE2ICopb3V0cHRyID0gKElOVDE2KXJnYjsKKyAgICB9CisgIH0KK30KKworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCitncmF5X3JnYjU2NURfY29udmVydF9pbnRlcm5hbChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworICBKTE9ORyBkMCA9IGRpdGhlcl9tYXRyaXhbY2luZm8tPm91dHB1dF9zY2FubGluZSAmIERJVEhFUl9NQVNLXTsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgSkxPTkcgcmdiOworICAgIHVuc2lnbmVkIGludCBnOworCisgICAgaW5wdHIgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93KytdOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgaWYgKFBBQ0tfTkVFRF9BTElHTk1FTlQob3V0cHRyKSkgeworICAgICAgZyA9ICppbnB0cisrOworICAgICAgZyA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUihnLCBkMCldOworICAgICAgcmdiID0gUEFDS19TSE9SVF81NjUoZywgZywgZyk7CisgICAgICAqKElOVDE2ICopb3V0cHRyID0gKElOVDE2KXJnYjsKKyAgICAgIG91dHB0ciArPSAyOworICAgICAgbnVtX2NvbHMtLTsKKyAgICB9CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCAobnVtX2NvbHMgPj4gMSk7IGNvbCsrKSB7CisgICAgICBnID0gKmlucHRyKys7CisgICAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9SKGcsIGQwKV07CisgICAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShnLCBnLCBnKTsKKyAgICAgIGQwID0gRElUSEVSX1JPVEFURShkMCk7CisKKyAgICAgIGcgPSAqaW5wdHIrKzsKKyAgICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoZywgZDApXTsKKyAgICAgIHJnYiA9IFBBQ0tfVFdPX1BJWEVMUyhyZ2IsIFBBQ0tfU0hPUlRfNTY1KGcsIGcsIGcpKTsKKyAgICAgIGQwID0gRElUSEVSX1JPVEFURShkMCk7CisKKyAgICAgIFdSSVRFX1RXT19BTElHTkVEX1BJWEVMUyhvdXRwdHIsIHJnYik7CisgICAgICBvdXRwdHIgKz0gNDsKKyAgICB9CisgICAgaWYgKG51bV9jb2xzICYgMSkgeworICAgICAgZyA9ICppbnB0cjsKKyAgICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoZywgZDApXTsKKyAgICAgIHJnYiA9IFBBQ0tfU0hPUlRfNTY1KGcsIGcsIGcpOworICAgICAgKihJTlQxNiAqKW91dHB0ciA9IChJTlQxNilyZ2I7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGNvbGV4dC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjb2xleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmE1MzAxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjb2xleHQuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIGpkY29sZXh0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG91dHB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24gcm91dGluZXMuCisgKi8KKworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgamRjb2xvci5jICovCisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBjaGFuZ2UgZnJvbSBub25pbnRlcmxlYXZlZCwgb25lLXBsYW5lLXBlci1jb21wb25lbnQgZm9ybWF0CisgKiB0byBpbnRlcmxlYXZlZC1waXhlbCBmb3JtYXQuICBUaGUgb3V0cHV0IGJ1ZmZlciBpcyB0aGVyZWZvcmUgdGhyZWUgdGltZXMKKyAqIGFzIHdpZGUgYXMgdGhlIGlucHV0IGJ1ZmZlci4KKyAqIEEgc3RhcnRpbmcgcm93IG9mZnNldCBpcyBwcm92aWRlZCBvbmx5IGZvciB0aGUgaW5wdXQgYnVmZmVyLiAgVGhlIGNhbGxlcgorICogY2FuIGVhc2lseSBhZGp1c3QgdGhlIHBhc3NlZCBvdXRwdXRfYnVmIHZhbHVlIHRvIGFjY29tbW9kYXRlIGFueSByb3cKKyAqIG9mZnNldCByZXF1aXJlZCBvbiB0aGF0IHNpZGUuCisgKi8KKworSU5MSU5FCitMT0NBTCh2b2lkKQoreWNjX3JnYl9jb252ZXJ0X2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgcmVnaXN0ZXIgaW50IHksIGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgIC8qIGNvcHkgdGhlc2UgcG9pbnRlcnMgaW50byByZWdpc3RlcnMgaWYgcG9zc2libGUgKi8KKyAgcmVnaXN0ZXIgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICByZWdpc3RlciBpbnQgKkNycnRhYiA9IGNjb252ZXJ0LT5Dcl9yX3RhYjsKKyAgcmVnaXN0ZXIgaW50ICpDYmJ0YWIgPSBjY29udmVydC0+Q2JfYl90YWI7CisgIHJlZ2lzdGVyIEpMT05HICpDcmd0YWIgPSBjY29udmVydC0+Q3JfZ190YWI7CisgIHJlZ2lzdGVyIEpMT05HICpDYmd0YWIgPSBjY29udmVydC0+Q2JfZ190YWI7CisgIFNISUZUX1RFTVBTCisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgIGlucHV0X3JvdysrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIHkgID0gR0VUSlNBTVBMRShpbnB0cjBbY29sXSk7CisgICAgICBjYiA9IEdFVEpTQU1QTEUoaW5wdHIxW2NvbF0pOworICAgICAgY3IgPSBHRVRKU0FNUExFKGlucHRyMltjb2xdKTsKKyAgICAgIC8qIFJhbmdlLWxpbWl0aW5nIGlzIGVzc2VudGlhbCBkdWUgdG8gbm9pc2UgaW50cm9kdWNlZCBieSBEQ1QgbG9zc2VzLiAqLworICAgICAgb3V0cHRyW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgQ3JydGFiW2NyXV07CisgICAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbnQpUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FMRUJJVFMpKV07CisgICAgICBvdXRwdHJbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBDYmJ0YWJbY2JdXTsKKyAgICAgIC8qIFNldCB1bnVzZWQgYnl0ZSB0byAweEZGIHNvIGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgKi8KKyAgICAgIC8qIGFscGhhIGNoYW5uZWwgdmFsdWUgKi8KKyNpZmRlZiBSR0JfQUxQSEEKKyAgICAgIG91dHB0cltSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgICAgb3V0cHRyICs9IFJHQl9QSVhFTFNJWkU7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIENvbnZlcnQgZ3JheXNjYWxlIHRvIFJHQjoganVzdCBkdXBsaWNhdGUgdGhlIGdyYXlsZXZlbCB0aHJlZSB0aW1lcy4KKyAqIFRoaXMgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdCBkb24ndCB3YW50IHRvIGNvcGUKKyAqIHdpdGggZ3JheXNjYWxlIGFzIGEgc2VwYXJhdGUgY2FzZS4KKyAqLworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCitncmF5X3JnYl9jb252ZXJ0X2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPm91dHB1dF93aWR0aDsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93KytdOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIC8qIFdlIGNhbiBkaXNwZW5zZSB3aXRoIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICBvdXRwdHJbUkdCX1JFRF0gPSBvdXRwdHJbUkdCX0dSRUVOXSA9IG91dHB0cltSR0JfQkxVRV0gPSBpbnB0cltjb2xdOworICAgICAgLyogU2V0IHVudXNlZCBieXRlIHRvIDB4RkYgc28gaXQgY2FuIGJlIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSAqLworICAgICAgLyogYWxwaGEgY2hhbm5lbCB2YWx1ZSAqLworI2lmZGVmIFJHQl9BTFBIQQorICAgICAgb3V0cHRyW1JHQl9BTFBIQV0gPSAweEZGOworI2VuZGlmCisgICAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogQ29udmVydCBSR0IgdG8gZXh0ZW5kZWQgUkdCOiBqdXN0IHN3YXAgdGhlIG9yZGVyIG9mIHNvdXJjZSBwaXhlbHMKKyAqLworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCityZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93XTsKKyAgICBpbnB0cjEgPSBpbnB1dF9idWZbMV1baW5wdXRfcm93XTsKKyAgICBpbnB0cjIgPSBpbnB1dF9idWZbMl1baW5wdXRfcm93XTsKKyAgICBpbnB1dF9yb3crKzsKKyAgICBvdXRwdHIgPSAqb3V0cHV0X2J1ZisrOworICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICAvKiBXZSBjYW4gZGlzcGVuc2Ugd2l0aCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgb3V0cHRyW1JHQl9SRURdID0gaW5wdHIwW2NvbF07CisgICAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IGlucHRyMVtjb2xdOworICAgICAgb3V0cHRyW1JHQl9CTFVFXSA9IGlucHRyMltjb2xdOworICAgICAgLyogU2V0IHVudXNlZCBieXRlIHRvIDB4RkYgc28gaXQgY2FuIGJlIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSAqLworICAgICAgLyogYWxwaGEgY2hhbm5lbCB2YWx1ZSAqLworI2lmZGVmIFJHQl9BTFBIQQorICAgICAgb3V0cHRyW1JHQl9BTFBIQV0gPSAweEZGOworI2VuZGlmCisgICAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY29sb3IuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY29sb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDdmNjYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjb2xvci5jCkBAIC0wLDAgKzEsODgzIEBACisvKgorICogamRjb2xvci5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAyMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEtMjAxMiwgMjAxNC0yMDE1LCBELiBSLiBDb21tYW5kZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIExpbmFybyBMaW1pdGVkLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG91dHB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24gcm91dGluZXMuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorCisKKy8qIFByaXZhdGUgc3Vib2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgWUNDLT5SR0IgY29udmVyc2lvbiAqLworICBpbnQgKkNyX3JfdGFiOyAgICAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gUiBjb252ZXJzaW9uICovCisgIGludCAqQ2JfYl90YWI7ICAgICAgICAgICAgICAgIC8qID0+IHRhYmxlIGZvciBDYiB0byBCIGNvbnZlcnNpb24gKi8KKyAgSkxPTkcgKkNyX2dfdGFiOyAgICAgICAgICAgICAgLyogPT4gdGFibGUgZm9yIENyIHRvIEcgY29udmVyc2lvbiAqLworICBKTE9ORyAqQ2JfZ190YWI7ICAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ2IgdG8gRyBjb252ZXJzaW9uICovCisKKyAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgUkdCLT5ZIGNvbnZlcnNpb24gKi8KKyAgSkxPTkcgKnJnYl95X3RhYjsgICAgICAgICAgICAgLyogPT4gdGFibGUgZm9yIFJHQiB0byBZIGNvbnZlcnNpb24gKi8KK30gbXlfY29sb3JfZGVjb252ZXJ0ZXI7CisKK3R5cGVkZWYgbXlfY29sb3JfZGVjb252ZXJ0ZXIgKm15X2Njb252ZXJ0X3B0cjsKKworCisvKioqKioqKioqKioqKioqKiBZQ2JDciAtPiBSR0IgY29udmVyc2lvbjogbW9zdCBjb21tb24gY2FzZSAqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqICAgUkdCIC0+IFkgICBjb252ZXJzaW9uOiBsZXNzIGNvbW1vbiBjYXNlICoqKioqKioqKioqKioqLworCisvKgorICogWUNiQ3IgaXMgZGVmaW5lZCBwZXIgQ0NJUiA2MDEtMSwgZXhjZXB0IHRoYXQgQ2IgYW5kIENyIGFyZQorICogbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMC4uTUFYSlNBTVBMRSByYXRoZXIgdGhhbiAtMC41IC4uIDAuNS4KKyAqIFRoZSBjb252ZXJzaW9uIGVxdWF0aW9ucyB0byBiZSBpbXBsZW1lbnRlZCBhcmUgdGhlcmVmb3JlCisgKgorICogICAgICBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorICogICAgICBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICogICAgICBCID0gWSArIDEuNzcyMDAgKiBDYgorICoKKyAqICAgICAgWSA9IDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICoKKyAqIHdoZXJlIENiIGFuZCBDciByZXByZXNlbnQgdGhlIGluY29taW5nIHZhbHVlcyBsZXNzIENFTlRFUkpTQU1QTEUuCisgKiAoVGhlc2UgbnVtYmVycyBhcmUgZGVyaXZlZCBmcm9tIFRJRkYgNi4wIHNlY3Rpb24gMjEsIGRhdGVkIDMtSnVuZS05Mi4pCisgKgorICogVG8gYXZvaWQgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYywgd2UgcmVwcmVzZW50IHRoZSBmcmFjdGlvbmFsIGNvbnN0YW50cworICogYXMgaW50ZWdlcnMgc2NhbGVkIHVwIGJ5IDJeMTYgKGFib3V0IDQgZGlnaXRzIHByZWNpc2lvbik7IHdlIGhhdmUgdG8gZGl2aWRlCisgKiB0aGUgcHJvZHVjdHMgYnkgMl4xNiwgd2l0aCBhcHByb3ByaWF0ZSByb3VuZGluZywgdG8gZ2V0IHRoZSBjb3JyZWN0IGFuc3dlci4KKyAqIE5vdGljZSB0aGF0IFksIGJlaW5nIGFuIGludGVncmFsIGlucHV0LCBkb2VzIG5vdCBjb250cmlidXRlIGFueSBmcmFjdGlvbgorICogc28gaXQgbmVlZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIHJvdW5kaW5nLgorICoKKyAqIEZvciBldmVuIG1vcmUgc3BlZWQsIHdlIGF2b2lkIGRvaW5nIGFueSBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIGlubmVyIGxvb3AKKyAqIGJ5IHByZWNhbGN1bGF0aW5nIHRoZSBjb25zdGFudHMgdGltZXMgQ2IgYW5kIENyIGZvciBhbGwgcG9zc2libGUgdmFsdWVzLgorICogRm9yIDgtYml0IEpTQU1QTEVzIHRoaXMgaXMgdmVyeSByZWFzb25hYmxlIChvbmx5IDI1NiBlbnRyaWVzIHBlciB0YWJsZSk7CisgKiBmb3IgMTItYml0IHNhbXBsZXMgaXQgaXMgc3RpbGwgYWNjZXB0YWJsZS4gIEl0J3Mgbm90IHZlcnkgcmVhc29uYWJsZSBmb3IKKyAqIDE2LWJpdCBzYW1wbGVzLCBidXQgaWYgeW91IHdhbnQgbG9zc2xlc3Mgc3RvcmFnZSB5b3Ugc2hvdWxkbid0IGJlIGNoYW5naW5nCisgKiBjb2xvcnNwYWNlIGFueXdheS4KKyAqIFRoZSBDcj0+UiBhbmQgQ2I9PkIgdmFsdWVzIGNhbiBiZSByb3VuZGVkIHRvIGludGVnZXJzIGluIGFkdmFuY2U7IHRoZQorICogdmFsdWVzIGZvciB0aGUgRyBjYWxjdWxhdGlvbiBhcmUgbGVmdCBzY2FsZWQgdXAsIHNpbmNlIHdlIG11c3QgYWRkIHRoZW0KKyAqIHRvZ2V0aGVyIGJlZm9yZSByb3VuZGluZy4KKyAqLworCisjZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNiAgICAgIC8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovCisjZGVmaW5lIE9ORV9IQUxGICAgICAgICAoKEpMT05HKTEgPDwgKFNDQUxFQklUUyAtIDEpKQorI2RlZmluZSBGSVgoeCkgICAgICAgICAgKChKTE9ORykoKHgpICogKDFMIDw8IFNDQUxFQklUUykgKyAwLjUpKQorCisvKiBXZSBhbGxvY2F0ZSBvbmUgYmlnIHRhYmxlIGZvciBSR0ItPlkgY29udmVyc2lvbiBhbmQgZGl2aWRlIGl0IHVwIGludG8KKyAqIHRocmVlIHBhcnRzLCBpbnN0ZWFkIG9mIGRvaW5nIHRocmVlIGFsbG9jX3NtYWxsIHJlcXVlc3RzLiAgVGhpcyBsZXRzIHVzCisgKiB1c2UgYSBzaW5nbGUgdGFibGUgYmFzZSBhZGRyZXNzLCB3aGljaCBjYW4gYmUgaGVsZCBpbiBhIHJlZ2lzdGVyIGluIHRoZQorICogaW5uZXIgbG9vcHMgb24gbWFueSBtYWNoaW5lcyAobW9yZSB0aGFuIGNhbiBob2xkIGFsbCB0aHJlZSBhZGRyZXNzZXMsCisgKiBhbnl3YXkpLgorICovCisKKyNkZWZpbmUgUl9ZX09GRiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB0byBSID0+IFkgc2VjdGlvbiAqLworI2RlZmluZSBHX1lfT0ZGICAgICAgICAgKDEgKiAoTUFYSlNBTVBMRSArIDEpKSAgLyogb2Zmc2V0IHRvIEcgPT4gWSBzZWN0aW9uICovCisjZGVmaW5lIEJfWV9PRkYgICAgICAgICAoMiAqIChNQVhKU0FNUExFICsgMSkpICAvKiBldGMuICovCisjZGVmaW5lIFRBQkxFX1NJWkUgICAgICAoMyAqIChNQVhKU0FNUExFICsgMSkpCisKKworLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAqLworCisjaW5jbHVkZSAiamRjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyNkZWZpbmUgeWNjX3JnYl9jb252ZXJ0X2ludGVybmFsICB5Y2NfZXh0cmdiX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgZ3JheV9yZ2JfY29udmVydF9pbnRlcm5hbCAgZ3JheV9leHRyZ2JfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIHJnYl9leHRyZ2JfY29udmVydF9pbnRlcm5hbAorI2luY2x1ZGUgImpkY29sZXh0LmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIHljY19yZ2JfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIGdyYXlfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKworI2RlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorI2RlZmluZSBSR0JfQUxQSEEgIDMKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCisjZGVmaW5lIHljY19yZ2JfY29udmVydF9pbnRlcm5hbCAgeWNjX2V4dHJnYnhfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSBncmF5X3JnYl9jb252ZXJ0X2ludGVybmFsICBncmF5X2V4dHJnYnhfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIHJnYl9leHRyZ2J4X2NvbnZlcnRfaW50ZXJuYWwKKyNpbmNsdWRlICJqZGNvbGV4dC5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9BTFBIQQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiB5Y2NfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiBncmF5X3JnYl9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyNkZWZpbmUgeWNjX3JnYl9jb252ZXJ0X2ludGVybmFsICB5Y2NfZXh0YmdyX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgZ3JheV9yZ2JfY29udmVydF9pbnRlcm5hbCAgZ3JheV9leHRiZ3JfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIHJnYl9leHRiZ3JfY29udmVydF9pbnRlcm5hbAorI2luY2x1ZGUgImpkY29sZXh0LmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIHljY19yZ2JfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIGdyYXlfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKworI2RlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorI2RlZmluZSBSR0JfQUxQSEEgIDMKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCisjZGVmaW5lIHljY19yZ2JfY29udmVydF9pbnRlcm5hbCAgeWNjX2V4dGJncnhfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSBncmF5X3JnYl9jb252ZXJ0X2ludGVybmFsICBncmF5X2V4dGJncnhfY29udmVydF9pbnRlcm5hbAorI2RlZmluZSByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIHJnYl9leHRiZ3J4X2NvbnZlcnRfaW50ZXJuYWwKKyNpbmNsdWRlICJqZGNvbGV4dC5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9BTFBIQQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiB5Y2NfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiBncmF5X3JnYl9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1hCR1JfUkVECisjZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hCR1JfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9YQkdSX0JMVUUKKyNkZWZpbmUgUkdCX0FMUEhBICAwCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorI2RlZmluZSB5Y2NfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIHljY19leHR4YmdyX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgZ3JheV9yZ2JfY29udmVydF9pbnRlcm5hbCAgZ3JheV9leHR4YmdyX2NvbnZlcnRfaW50ZXJuYWwKKyNkZWZpbmUgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsICByZ2JfZXh0eGJncl9jb252ZXJ0X2ludGVybmFsCisjaW5jbHVkZSAiamRjb2xleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfQUxQSEEKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgeWNjX3JnYl9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgZ3JheV9yZ2JfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbAorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCisjZGVmaW5lIFJHQl9BTFBIQSAgMAorI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWFJHQl9QSVhFTFNJWkUKKyNkZWZpbmUgeWNjX3JnYl9jb252ZXJ0X2ludGVybmFsICB5Y2NfZXh0eHJnYl9jb252ZXJ0X2ludGVybmFsCisjZGVmaW5lIGdyYXlfcmdiX2NvbnZlcnRfaW50ZXJuYWwgIGdyYXlfZXh0eHJnYl9jb252ZXJ0X2ludGVybmFsCisjZGVmaW5lIHJnYl9yZ2JfY29udmVydF9pbnRlcm5hbCAgcmdiX2V4dHhyZ2JfY29udmVydF9pbnRlcm5hbAorI2luY2x1ZGUgImpkY29sZXh0LmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX0FMUEhBCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIHljY19yZ2JfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIGdyYXlfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiByZ2JfcmdiX2NvbnZlcnRfaW50ZXJuYWwKKworCisvKgorICogSW5pdGlhbGl6ZSB0YWJsZXMgZm9yIFlDQy0+UkdCIGNvbG9yc3BhY2UgY29udmVyc2lvbi4KKyAqLworCitMT0NBTCh2b2lkKQorYnVpbGRfeWNjX3JnYl90YWJsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgaW50IGk7CisgIEpMT05HIHg7CisgIFNISUZUX1RFTVBTCisKKyAgY2NvbnZlcnQtPkNyX3JfdGFiID0gKGludCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BWEpTQU1QTEUgKyAxKSAqIHNpemVvZihpbnQpKTsKKyAgY2NvbnZlcnQtPkNiX2JfdGFiID0gKGludCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BWEpTQU1QTEUgKyAxKSAqIHNpemVvZihpbnQpKTsKKyAgY2NvbnZlcnQtPkNyX2dfdGFiID0gKEpMT05HICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSArIDEpICogc2l6ZW9mKEpMT05HKSk7CisgIGNjb252ZXJ0LT5DYl9nX3RhYiA9IChKTE9ORyAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BWEpTQU1QTEUgKyAxKSAqIHNpemVvZihKTE9ORykpOworCisgIGZvciAoaSA9IDAsIHggPSAtQ0VOVEVSSlNBTVBMRTsgaSA8PSBNQVhKU0FNUExFOyBpKyssIHgrKykgeworICAgIC8qIGkgaXMgdGhlIGFjdHVhbCBpbnB1dCBwaXhlbCB2YWx1ZSwgaW4gdGhlIHJhbmdlIDAuLk1BWEpTQU1QTEUgKi8KKyAgICAvKiBUaGUgQ2Igb3IgQ3IgdmFsdWUgd2UgYXJlIHRoaW5raW5nIG9mIGlzIHggPSBpIC0gQ0VOVEVSSlNBTVBMRSAqLworICAgIC8qIENyPT5SIHZhbHVlIGlzIG5lYXJlc3QgaW50IHRvIDEuNDAyMDAgKiB4ICovCisgICAgY2NvbnZlcnQtPkNyX3JfdGFiW2ldID0gKGludCkKKyAgICAgICAgICAgICAgICAgICAgUklHSFRfU0hJRlQoRklYKDEuNDAyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOworICAgIC8qIENiPT5CIHZhbHVlIGlzIG5lYXJlc3QgaW50IHRvIDEuNzcyMDAgKiB4ICovCisgICAgY2NvbnZlcnQtPkNiX2JfdGFiW2ldID0gKGludCkKKyAgICAgICAgICAgICAgICAgICAgUklHSFRfU0hJRlQoRklYKDEuNzcyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOworICAgIC8qIENyPT5HIHZhbHVlIGlzIHNjYWxlZC11cCAtMC43MTQxNCAqIHggKi8KKyAgICBjY29udmVydC0+Q3JfZ190YWJbaV0gPSAoLUZJWCgwLjcxNDE0KSkgKiB4OworICAgIC8qIENiPT5HIHZhbHVlIGlzIHNjYWxlZC11cCAtMC4zNDQxNCAqIHggKi8KKyAgICAvKiBXZSBhbHNvIGFkZCBpbiBPTkVfSEFMRiBzbyB0aGF0IG5lZWQgbm90IGRvIGl0IGluIGlubmVyIGxvb3AgKi8KKyAgICBjY29udmVydC0+Q2JfZ190YWJbaV0gPSAoLUZJWCgwLjM0NDE0KSkgKiB4ICsgT05FX0hBTEY7CisgIH0KK30KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit5Y2NfcmdiX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICB5Y2NfZXh0cmdiX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICB5Y2NfZXh0cmdieF9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICB5Y2NfZXh0YmdyX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICB5Y2NfZXh0YmdyeF9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIHljY19leHR4YmdyX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgeWNjX2V4dHhyZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgeWNjX3JnYl9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoqKioqKioqKioqKioqKiogQ2FzZXMgb3RoZXIgdGhhbiBZQ2JDciAtPiBSR0IgKioqKioqKioqKioqKiovCisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIFJHQi0+Z3JheXNjYWxlIGNvbG9yc3BhY2UgY29udmVyc2lvbi4KKyAqLworCitMT0NBTCh2b2lkKQorYnVpbGRfcmdiX3lfdGFibGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0ciljaW5mby0+Y2NvbnZlcnQ7CisgIEpMT05HICpyZ2JfeV90YWI7CisgIEpMT05HIGk7CisKKyAgLyogQWxsb2NhdGUgYW5kIGZpbGwgaW4gdGhlIGNvbnZlcnNpb24gdGFibGVzLiAqLworICBjY29udmVydC0+cmdiX3lfdGFiID0gcmdiX3lfdGFiID0gKEpMT05HICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEFCTEVfU0laRSAqIHNpemVvZihKTE9ORykpKTsKKworICBmb3IgKGkgPSAwOyBpIDw9IE1BWEpTQU1QTEU7IGkrKykgeworICAgIHJnYl95X3RhYltpICsgUl9ZX09GRl0gPSBGSVgoMC4yOTkwMCkgKiBpOworICAgIHJnYl95X3RhYltpICsgR19ZX09GRl0gPSBGSVgoMC41ODcwMCkgKiBpOworICAgIHJnYl95X3RhYltpICsgQl9ZX09GRl0gPSBGSVgoMC4xMTQwMCkgKiBpICsgT05FX0hBTEY7CisgIH0KK30KKworCisvKgorICogQ29udmVydCBSR0IgdG8gZ3JheXNjYWxlLgorICovCisKK01FVEhPRERFRih2b2lkKQorcmdiX2dyYXlfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgcmVnaXN0ZXIgaW50IHIsIGcsIGI7CisgIHJlZ2lzdGVyIEpMT05HICpjdGFiID0gY2NvbnZlcnQtPnJnYl95X3RhYjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgIGlucHV0X3JvdysrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIHIgPSBHRVRKU0FNUExFKGlucHRyMFtjb2xdKTsKKyAgICAgIGcgPSBHRVRKU0FNUExFKGlucHRyMVtjb2xdKTsKKyAgICAgIGIgPSBHRVRKU0FNUExFKGlucHRyMltjb2xdKTsKKyAgICAgIC8qIFkgKi8KKyAgICAgIG91dHB0cltjb2xdID0gKEpTQU1QTEUpKChjdGFiW3IgKyBSX1lfT0ZGXSArIGN0YWJbZyArIEdfWV9PRkZdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGFiW2IgKyBCX1lfT0ZGXSkgPj4gU0NBTEVCSVRTKTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogQ29sb3IgY29udmVyc2lvbiBmb3Igbm8gY29sb3JzcGFjZSBjaGFuZ2U6IGp1c3QgY29weSB0aGUgZGF0YSwKKyAqIGNvbnZlcnRpbmcgZnJvbSBzZXBhcmF0ZS1wbGFuZXMgdG8gaW50ZXJsZWF2ZWQgcmVwcmVzZW50YXRpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitudWxsX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgaW5wdHIwLCBpbnB0cjEsIGlucHRyMiwgaW5wdHIzLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICByZWdpc3RlciBpbnQgbnVtX2NvbXBvbmVudHMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworICBpbnQgY2k7CisKKyAgaWYgKG51bV9jb21wb25lbnRzID09IDMpIHsKKyAgICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93XTsKKyAgICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgICAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2lucHV0X3Jvd107CisgICAgICBpbnB1dF9yb3crKzsKKyAgICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgICAqb3V0cHRyKysgPSBpbnB0cjBbY29sXTsKKyAgICAgICAgKm91dHB0cisrID0gaW5wdHIxW2NvbF07CisgICAgICAgICpvdXRwdHIrKyA9IGlucHRyMltjb2xdOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIGlmIChudW1fY29tcG9uZW50cyA9PSA0KSB7CisgICAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgICAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2lucHV0X3Jvd107CisgICAgICBpbnB0cjEgPSBpbnB1dF9idWZbMV1baW5wdXRfcm93XTsKKyAgICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgICAgaW5wdHIzID0gaW5wdXRfYnVmWzNdW2lucHV0X3Jvd107CisgICAgICBpbnB1dF9yb3crKzsKKyAgICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgICAqb3V0cHRyKysgPSBpbnB0cjBbY29sXTsKKyAgICAgICAgKm91dHB0cisrID0gaW5wdHIxW2NvbF07CisgICAgICAgICpvdXRwdHIrKyA9IGlucHRyMltjb2xdOworICAgICAgICAqb3V0cHRyKysgPSBpbnB0cjNbY29sXTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgICAgZm9yIChjaSA9IDA7IGNpIDwgbnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgICAgaW5wdHIgPSBpbnB1dF9idWZbY2ldW2lucHV0X3Jvd107CisgICAgICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmOworICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgICAgIG91dHB0cltjaV0gPSBpbnB0cltjb2xdOworICAgICAgICAgIG91dHB0ciArPSBudW1fY29tcG9uZW50czsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgb3V0cHV0X2J1ZisrOworICAgICAgaW5wdXRfcm93Kys7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIENvbG9yIGNvbnZlcnNpb24gZm9yIGdyYXlzY2FsZToganVzdCBjb3B5IHRoZSBkYXRhLgorICogVGhpcyBhbHNvIHdvcmtzIGZvciBZQ2JDciAtPiBncmF5c2NhbGUgY29udmVyc2lvbiwgaW4gd2hpY2gKKyAqIHdlIGp1c3QgY29weSB0aGUgWSAobHVtaW5hbmNlKSBjb21wb25lbnQgYW5kIGlnbm9yZSBjaHJvbWluYW5jZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2dyYXlzY2FsZV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBqY29weV9zYW1wbGVfcm93cyhpbnB1dF9idWZbMF0sIChpbnQpaW5wdXRfcm93LCBvdXRwdXRfYnVmLCAwLCBudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCk7Cit9CisKKworLyoKKyAqIENvbnZlcnQgZ3JheXNjYWxlIHRvIFJHQgorICovCisKK01FVEhPRERFRih2b2lkKQorZ3JheV9yZ2JfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBncmF5X2V4dHJnYl9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGdyYXlfZXh0cmdieF9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgZ3JheV9leHRiZ3JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICBncmF5X2V4dGJncnhfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgZ3JheV9leHR4YmdyX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGdyYXlfZXh0eHJnYl9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgZ3JheV9yZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogQ29udmVydCBwbGFpbiBSR0IgdG8gZXh0ZW5kZWQgUkdCCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZ2JfcmdiX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICByZ2JfZXh0cmdiX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICByZ2JfZXh0cmdieF9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICByZ2JfZXh0YmdyX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICByZ2JfZXh0YmdyeF9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIHJnYl9leHR4YmdyX2NvbnZlcnRfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgcmdiX2V4dHhyZ2JfY29udmVydF9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcm93cyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmdiX3JnYl9jb252ZXJ0X2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jvd3MpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoKKyAqIEFkb2JlLXN0eWxlIFlDQ0stPkNNWUsgY29udmVyc2lvbi4KKyAqIFdlIGNvbnZlcnQgWUNiQ3IgdG8gUj0xLUMsIEc9MS1NLCBhbmQgQj0xLVkgdXNpbmcgdGhlIHNhbWUKKyAqIGNvbnZlcnNpb24gYXMgYWJvdmUsIHdoaWxlIHBhc3NpbmcgSyAoYmxhY2spIHVuY2hhbmdlZC4KKyAqIFdlIGFzc3VtZSBidWlsZF95Y2NfcmdiX3RhYmxlIGhhcyBiZWVuIGNhbGxlZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3ljY2tfY215a19jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKWNpbmZvLT5jY29udmVydDsKKyAgcmVnaXN0ZXIgaW50IHksIGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyLCBpbnB0cjM7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPm91dHB1dF93aWR0aDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIHJlZ2lzdGVyIGludCAqQ3JydGFiID0gY2NvbnZlcnQtPkNyX3JfdGFiOworICByZWdpc3RlciBpbnQgKkNiYnRhYiA9IGNjb252ZXJ0LT5DYl9iX3RhYjsKKyAgcmVnaXN0ZXIgSkxPTkcgKkNyZ3RhYiA9IGNjb252ZXJ0LT5Dcl9nX3RhYjsKKyAgcmVnaXN0ZXIgSkxPTkcgKkNiZ3RhYiA9IGNjb252ZXJ0LT5DYl9nX3RhYjsKKyAgU0hJRlRfVEVNUFMKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2lucHV0X3Jvd107CisgICAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2lucHV0X3Jvd107CisgICAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2lucHV0X3Jvd107CisgICAgaW5wdHIzID0gaW5wdXRfYnVmWzNdW2lucHV0X3Jvd107CisgICAgaW5wdXRfcm93Kys7CisgICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsKKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgeSAgPSBHRVRKU0FNUExFKGlucHRyMFtjb2xdKTsKKyAgICAgIGNiID0gR0VUSlNBTVBMRShpbnB0cjFbY29sXSk7CisgICAgICBjciA9IEdFVEpTQU1QTEUoaW5wdHIyW2NvbF0pOworICAgICAgLyogUmFuZ2UtbGltaXRpbmcgaXMgZXNzZW50aWFsIGR1ZSB0byBub2lzZSBpbnRyb2R1Y2VkIGJ5IERDVCBsb3NzZXMuICovCisgICAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFtNQVhKU0FNUExFIC0gKHkgKyBDcnJ0YWJbY3JdKV07ICAgLyogcmVkICovCisgICAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFtNQVhKU0FNUExFIC0gKHkgKyAgICAgICAgICAgICAgICAgLyogZ3JlZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQUxFQklUUykpKV07CisgICAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFtNQVhKU0FNUExFIC0gKHkgKyBDYmJ0YWJbY2JdKV07ICAgLyogYmx1ZSAqLworICAgICAgLyogSyBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgKi8KKyAgICAgIG91dHB0clszXSA9IGlucHRyM1tjb2xdOyAgLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFIGhlcmUgKi8KKyAgICAgIG91dHB0ciArPSA0OworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBSR0I1NjUgY29udmVyc2lvbgorICovCisKKyNkZWZpbmUgUEFDS19TSE9SVF81NjVfTEUociwgZywgYikgICgoKChyKSA8PCA4KSAmIDB4RjgwMCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZykgPDwgMykgJiAweDdFMCkgfCAoKGIpID4+IDMpKQorI2RlZmluZSBQQUNLX1NIT1JUXzU2NV9CRShyLCBnLCBiKSAgKCgocikgJiAweEY4KSB8ICgoZykgPj4gNSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZykgPDwgMTEpICYgMHhFMDAwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChiKSA8PCA1KSAmIDB4MUYwMCkpCisKKyNkZWZpbmUgUEFDS19UV09fUElYRUxTX0xFKGwsIHIpICAgICgociA8PCAxNikgfCBsKQorI2RlZmluZSBQQUNLX1RXT19QSVhFTFNfQkUobCwgcikgICAgKChsIDw8IDE2KSB8IHIpCisKKyNkZWZpbmUgUEFDS19ORUVEX0FMSUdOTUVOVChwdHIpICAgICgoKHNpemVfdCkocHRyKSkgJiAzKQorCisjZGVmaW5lIFdSSVRFX1RXT19BTElHTkVEX1BJWEVMUyhhZGRyLCBwaXhlbHMpICAoKCooaW50ICopKGFkZHIpKSA9IHBpeGVscykKKworI2RlZmluZSBESVRIRVJfNTY1X1IociwgZGl0aGVyKSAgKChyKSArICgoZGl0aGVyKSAmIDB4RkYpKQorI2RlZmluZSBESVRIRVJfNTY1X0coZywgZGl0aGVyKSAgKChnKSArICgoKGRpdGhlcikgJiAweEZGKSA+PiAxKSkKKyNkZWZpbmUgRElUSEVSXzU2NV9CKGIsIGRpdGhlcikgICgoYikgKyAoKGRpdGhlcikgJiAweEZGKSkKKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIG9yZGVyZWQgZGl0aGVyaW5nCisgKgorICogV2UgdXNlIGEgNHg0IG9yZGVyZWQgZGl0aGVyIGFycmF5IHBhY2tlZCBpbnRvIDMyIGJpdHMuICBUaGlzIGFycmF5IGlzCisgKiBzdWZmaWNlbnQgZm9yIGRpdGhlcmluZyBSR0I4ODggdG8gUkdCNTY1LgorICovCisKKyNkZWZpbmUgRElUSEVSX01BU0sgICAgICAgMHgzCisjZGVmaW5lIERJVEhFUl9ST1RBVEUoeCkgICgoKCh4KSAmIDB4RkYpIDw8IDI0KSB8ICgoKHgpID4+IDgpICYgMHgwMEZGRkZGRikpCitzdGF0aWMgY29uc3QgSkxPTkcgZGl0aGVyX21hdHJpeFs0XSA9IHsKKyAgMHgwMDA4MDIwQSwKKyAgMHgwQzA0MEUwNiwKKyAgMHgwMzBCMDEwOSwKKyAgMHgwRjA3MEQwNQorfTsKKworCitzdGF0aWMgSU5MSU5FIGJvb2xlYW4gaXNfYmlnX2VuZGlhbih2b2lkKQoreworICBpbnQgdGVzdF92YWx1ZSA9IDE7CisgIGlmICgqKGNoYXIgKikmdGVzdF92YWx1ZSAhPSAxKQorICAgIHJldHVybiBUUlVFOworICByZXR1cm4gRkFMU0U7Cit9CisKKworLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIFJHQjU2NSBjb252ZXJzaW9uICovCisKKyNkZWZpbmUgUEFDS19TSE9SVF81NjUgIFBBQ0tfU0hPUlRfNTY1X0xFCisjZGVmaW5lIFBBQ0tfVFdPX1BJWEVMUyAgUEFDS19UV09fUElYRUxTX0xFCisjZGVmaW5lIHljY19yZ2I1NjVfY29udmVydF9pbnRlcm5hbCAgeWNjX3JnYjU2NV9jb252ZXJ0X2xlCisjZGVmaW5lIHljY19yZ2I1NjVEX2NvbnZlcnRfaW50ZXJuYWwgIHljY19yZ2I1NjVEX2NvbnZlcnRfbGUKKyNkZWZpbmUgcmdiX3JnYjU2NV9jb252ZXJ0X2ludGVybmFsICByZ2JfcmdiNTY1X2NvbnZlcnRfbGUKKyNkZWZpbmUgcmdiX3JnYjU2NURfY29udmVydF9pbnRlcm5hbCAgcmdiX3JnYjU2NURfY29udmVydF9sZQorI2RlZmluZSBncmF5X3JnYjU2NV9jb252ZXJ0X2ludGVybmFsICBncmF5X3JnYjU2NV9jb252ZXJ0X2xlCisjZGVmaW5lIGdyYXlfcmdiNTY1RF9jb252ZXJ0X2ludGVybmFsICBncmF5X3JnYjU2NURfY29udmVydF9sZQorI2luY2x1ZGUgImpkY29sNTY1LmMiCisjdW5kZWYgUEFDS19TSE9SVF81NjUKKyN1bmRlZiBQQUNLX1RXT19QSVhFTFMKKyN1bmRlZiB5Y2NfcmdiNTY1X2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiB5Y2NfcmdiNTY1RF9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX3JnYjU2NV9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgcmdiX3JnYjU2NURfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIGdyYXlfcmdiNTY1X2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiBncmF5X3JnYjU2NURfY29udmVydF9pbnRlcm5hbAorCisjZGVmaW5lIFBBQ0tfU0hPUlRfNTY1ICBQQUNLX1NIT1JUXzU2NV9CRQorI2RlZmluZSBQQUNLX1RXT19QSVhFTFMgIFBBQ0tfVFdPX1BJWEVMU19CRQorI2RlZmluZSB5Y2NfcmdiNTY1X2NvbnZlcnRfaW50ZXJuYWwgIHljY19yZ2I1NjVfY29udmVydF9iZQorI2RlZmluZSB5Y2NfcmdiNTY1RF9jb252ZXJ0X2ludGVybmFsICB5Y2NfcmdiNTY1RF9jb252ZXJ0X2JlCisjZGVmaW5lIHJnYl9yZ2I1NjVfY29udmVydF9pbnRlcm5hbCAgcmdiX3JnYjU2NV9jb252ZXJ0X2JlCisjZGVmaW5lIHJnYl9yZ2I1NjVEX2NvbnZlcnRfaW50ZXJuYWwgIHJnYl9yZ2I1NjVEX2NvbnZlcnRfYmUKKyNkZWZpbmUgZ3JheV9yZ2I1NjVfY29udmVydF9pbnRlcm5hbCAgZ3JheV9yZ2I1NjVfY29udmVydF9iZQorI2RlZmluZSBncmF5X3JnYjU2NURfY29udmVydF9pbnRlcm5hbCAgZ3JheV9yZ2I1NjVEX2NvbnZlcnRfYmUKKyNpbmNsdWRlICJqZGNvbDU2NS5jIgorI3VuZGVmIFBBQ0tfU0hPUlRfNTY1CisjdW5kZWYgUEFDS19UV09fUElYRUxTCisjdW5kZWYgeWNjX3JnYjU2NV9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgeWNjX3JnYjU2NURfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2I1NjVfY29udmVydF9pbnRlcm5hbAorI3VuZGVmIHJnYl9yZ2I1NjVEX2NvbnZlcnRfaW50ZXJuYWwKKyN1bmRlZiBncmF5X3JnYjU2NV9jb252ZXJ0X2ludGVybmFsCisjdW5kZWYgZ3JheV9yZ2I1NjVEX2NvbnZlcnRfaW50ZXJuYWwKKworCitNRVRIT0RERUYodm9pZCkKK3ljY19yZ2I1NjVfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCit7CisgIGlmIChpc19iaWdfZW5kaWFuKCkpCisgICAgeWNjX3JnYjU2NV9jb252ZXJ0X2JlKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworICBlbHNlCisgICAgeWNjX3JnYjU2NV9jb252ZXJ0X2xlKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworfQorCisKK01FVEhPRERFRih2b2lkKQoreWNjX3JnYjU2NURfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBpZiAoaXNfYmlnX2VuZGlhbigpKQorICAgIHljY19yZ2I1NjVEX2NvbnZlcnRfYmUoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7CisgIGVsc2UKKyAgICB5Y2NfcmdiNTY1RF9jb252ZXJ0X2xlKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworfQorCisKK01FVEhPRERFRih2b2lkKQorcmdiX3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKK3sKKyAgaWYgKGlzX2JpZ19lbmRpYW4oKSkKKyAgICByZ2JfcmdiNTY1X2NvbnZlcnRfYmUoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7CisgIGVsc2UKKyAgICByZ2JfcmdiNTY1X2NvbnZlcnRfbGUoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7Cit9CisKKworTUVUSE9EREVGKHZvaWQpCityZ2JfcmdiNTY1RF9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCit7CisgIGlmIChpc19iaWdfZW5kaWFuKCkpCisgICAgcmdiX3JnYjU2NURfY29udmVydF9iZShjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKKyAgZWxzZQorICAgIHJnYl9yZ2I1NjVEX2NvbnZlcnRfbGUoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitncmF5X3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCit7CisgIGlmIChpc19iaWdfZW5kaWFuKCkpCisgICAgZ3JheV9yZ2I1NjVfY29udmVydF9iZShjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKKyAgZWxzZQorICAgIGdyYXlfcmdiNTY1X2NvbnZlcnRfbGUoY2luZm8sIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitncmF5X3JnYjU2NURfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKK3sKKyAgaWYgKGlzX2JpZ19lbmRpYW4oKSkKKyAgICBncmF5X3JnYjU2NURfY29udmVydF9iZShjaW5mbywgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKKyAgZWxzZQorICAgIGdyYXlfcmdiNTY1RF9jb252ZXJ0X2xlKGNpbmZvLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworfQorCisKKy8qCisgKiBFbXB0eSBtZXRob2QgZm9yIHN0YXJ0X3Bhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2Rjb2xvcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBubyB3b3JrIG5lZWRlZCAqLworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3Igb3V0cHV0IGNvbG9yc3BhY2UgY29udmVyc2lvbi4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2NvbG9yX2RlY29udmVydGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2Njb252ZXJ0X3B0ciBjY29udmVydDsKKyAgaW50IGNpOworCisgIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9jb2xvcl9kZWNvbnZlcnRlcikpOworICBjaW5mby0+Y2NvbnZlcnQgPSAoc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgKiljY29udmVydDsKKyAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19kY29sb3I7CisKKyAgLyogTWFrZSBzdXJlIG51bV9jb21wb25lbnRzIGFncmVlcyB3aXRoIGpwZWdfY29sb3Jfc3BhY2UgKi8KKyAgc3dpdGNoIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSAxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKworICBjYXNlIEpDU19SR0I6CisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgY2FzZSBKQ1NfWUNDSzoKKyAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDQpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLworICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPCAxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIFNldCBvdXRfY29sb3JfY29tcG9uZW50cyBhbmQgY29udmVyc2lvbiBtZXRob2QgYmFzZWQgb24gcmVxdWVzdGVkIHNwYWNlLgorICAgKiBBbHNvIGNsZWFyIHRoZSBjb21wb25lbnRfbmVlZGVkIGZsYWdzIGZvciBhbnkgdW51c2VkIGNvbXBvbmVudHMsCisgICAqIHNvIHRoYXQgZWFybGllciBwaXBlbGluZSBzdGFnZXMgY2FuIGF2b2lkIHVzZWxlc3MgY29tcHV0YXRpb24uCisgICAqLworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID0gMTsKKyAgICBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSB8fAorICAgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpIHsKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGdyYXlzY2FsZV9jb252ZXJ0OworICAgICAgLyogRm9yIGNvbG9yLT5ncmF5c2NhbGUgY29udmVyc2lvbiwgb25seSB0aGUgWSAoMCkgY29tcG9uZW50IGlzIG5lZWRlZCAqLworICAgICAgZm9yIChjaSA9IDE7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKQorICAgICAgICBjaW5mby0+Y29tcF9pbmZvW2NpXS5jb21wb25lbnRfbmVlZGVkID0gRkFMU0U7CisgICAgfSBlbHNlIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7CisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfZ3JheV9jb252ZXJ0OworICAgICAgYnVpbGRfcmdiX3lfdGFibGUoY2luZm8pOworICAgIH0gZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1JHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IHJnYl9waXhlbHNpemVbY2luZm8tPm91dF9jb2xvcl9zcGFjZV07CisgICAgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgeworICAgICAgaWYgKGpzaW1kX2Nhbl95Y2NfcmdiKCkpCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpzaW1kX3ljY19yZ2JfY29udmVydDsKKyAgICAgIGVsc2UgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSB5Y2NfcmdiX2NvbnZlcnQ7CisgICAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgeworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheV9yZ2JfY29udmVydDsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19SR0IpIHsKKyAgICAgIGlmIChyZ2JfcmVkW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdID09IDAgJiYKKyAgICAgICAgICByZ2JfZ3JlZW5bY2luZm8tPm91dF9jb2xvcl9zcGFjZV0gPT0gMSAmJgorICAgICAgICAgIHJnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdID09IDIgJiYKKyAgICAgICAgICByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdID09IDMpCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICAgIGVsc2UKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gcmdiX3JnYl9jb252ZXJ0OworICAgIH0gZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1JHQjU2NToKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSAzOworICAgIGlmIChjaW5mby0+ZGl0aGVyX21vZGUgPT0gSkRJVEhFUl9OT05FKSB7CisgICAgICBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKSB7CisgICAgICAgIGlmIChqc2ltZF9jYW5feWNjX3JnYjU2NSgpKQorICAgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpzaW1kX3ljY19yZ2I1NjVfY29udmVydDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0geWNjX3JnYjU2NV9jb252ZXJ0OworICAgICAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpIHsKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheV9yZ2I1NjVfY29udmVydDsKKyAgICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfcmdiNTY1X2NvbnZlcnQ7CisgICAgICB9IGVsc2UKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIH0gZWxzZSB7CisgICAgICAvKiBvbmx5IG9yZGVyZWQgZGl0aGVyaW5nIGlzIHN1cHBvcnRlZCAqLworICAgICAgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSB5Y2NfcmdiNTY1RF9jb252ZXJ0OworICAgICAgICBidWlsZF95Y2NfcmdiX3RhYmxlKGNpbmZvKTsKKyAgICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBncmF5X3JnYjU2NURfY29udmVydDsKKyAgICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfcmdiNTY1RF9jb252ZXJ0OworICAgICAgfSBlbHNlCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSA0OworICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNDSykgeworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0geWNja19jbXlrX2NvbnZlcnQ7CisgICAgICBidWlsZF95Y2NfcmdiX3RhYmxlKGNpbmZvKTsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSB7CisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgfSBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICAvKiBQZXJtaXQgbnVsbCBjb252ZXJzaW9uIHRvIHNhbWUgb3V0cHV0IHNwYWNlICovCisgICAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsKKyAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgbm9uLW51bGwgY29udmVyc2lvbiAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworICB9CisKKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpCisgICAgY2luZm8tPm91dHB1dF9jb21wb25lbnRzID0gMTsgLyogc2luZ2xlIGNvbG9ybWFwcGVkIG91dHB1dCBjb21wb25lbnQgKi8KKyAgZWxzZQorICAgIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50cyA9IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY3QuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQxNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRjdC5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogamRjdC5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgaW5jbHVkZSBmaWxlIGNvbnRhaW5zIGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBmb3J3YXJkIGFuZAorICogaW52ZXJzZSBEQ1QgbW9kdWxlcy4gIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgcHJpdmF0ZSB0byB0aGUgRENUIG1hbmFnZXJzCisgKiAoamNkY3RtZ3IuYywgamRkY3RtZ3IuYykgYW5kIHRoZSBpbmRpdmlkdWFsIERDVCBhbGdvcml0aG1zLgorICogVGhlIGluZGl2aWR1YWwgRENUIGFsZ29yaXRobXMgYXJlIGtlcHQgaW4gc2VwYXJhdGUgZmlsZXMgdG8gZWFzZQorICogbWFjaGluZS1kZXBlbmRlbnQgdHVuaW5nIChlLmcuLCBhc3NlbWJseSBjb2RpbmcpLgorICovCisKKworLyoKKyAqIEEgZm9yd2FyZCBEQ1Qgcm91dGluZSBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gYSB3b3JrIGFyZWEgb2YgdHlwZSBEQ1RFTEVNW107CisgKiB0aGUgRENUIGlzIHRvIGJlIHBlcmZvcm1lZCBpbi1wbGFjZSBpbiB0aGF0IGJ1ZmZlci4gIFR5cGUgRENURUxFTSBpcyBpbnQKKyAqIGZvciA4LWJpdCBzYW1wbGVzLCBKTE9ORyBmb3IgMTItYml0IHNhbXBsZXMuICAoTk9URTogRmxvYXRpbmctcG9pbnQgRENUCisgKiBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIGFycmF5IG9mIHR5cGUgRkFTVF9GTE9BVCwgaW5zdGVhZC4pCisgKiBUaGUgRENUIGlucHV0cyBhcmUgZXhwZWN0ZWQgdG8gYmUgc2lnbmVkIChyYW5nZSArLUNFTlRFUkpTQU1QTEUpLgorICogVGhlIERDVCBvdXRwdXRzIGFyZSByZXR1cm5lZCBzY2FsZWQgdXAgYnkgYSBmYWN0b3Igb2YgODsgdGhleSB0aGVyZWZvcmUKKyAqIGhhdmUgYSByYW5nZSBvZiArLThLIGZvciA4LWJpdCBkYXRhLCArLTEyOEsgZm9yIDEyLWJpdCBkYXRhLiAgVGhpcworICogY29udmVudGlvbiBpbXByb3ZlcyBhY2N1cmFjeSBpbiBpbnRlZ2VyIGltcGxlbWVudGF0aW9ucyBhbmQgc2F2ZXMgc29tZQorICogd29yayBpbiBmbG9hdGluZy1wb2ludCBvbmVzLgorICogUXVhbnRpemF0aW9uIG9mIHRoZSBvdXRwdXQgY29lZmZpY2llbnRzIGlzIGRvbmUgYnkgamNkY3RtZ3IuYy4gVGhpcworICogc3RlcCByZXF1aXJlcyBhbiB1bnNpZ25lZCB0eXBlIGFuZCBhbHNvIG9uZSB3aXRoIHR3aWNlIHRoZSBiaXRzLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2lmbmRlZiBXSVRIX1NJTUQKK3R5cGVkZWYgaW50IERDVEVMRU07ICAgICAgICAgICAgLyogMTYgb3IgMzIgYml0cyBpcyBmaW5lICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBVRENURUxFTTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFVEQ1RFTEVNMjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IERDVEVMRU07ICAgICAgICAgIC8qIHByZWZlciAxNiBiaXQgd2l0aCBTSU1EIGZvciBwYXJlbGxlbGlzbSAqLwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVRENURUxFTTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVEQ1RFTEVNMjsKKyNlbmRpZgorI2Vsc2UKK3R5cGVkZWYgSkxPTkcgRENURUxFTTsgICAgICAgICAgLyogbXVzdCBoYXZlIDMyIGJpdHMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFVEQ1RFTEVNMjsKKyNlbmRpZgorCisKKy8qCisgKiBBbiBpbnZlcnNlIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byB0aGUgaW5wdXQgSkJMT0NLIGFuZCBhIHBvaW50ZXIKKyAqIHRvIGFuIG91dHB1dCBzYW1wbGUgYXJyYXkuICBUaGUgcm91dGluZSBtdXN0IGRlcXVhbnRpemUgdGhlIGlucHV0IGRhdGEgYXMKKyAqIHdlbGwgYXMgcGVyZm9ybSB0aGUgSURDVDsgZm9yIGRlcXVhbnRpemF0aW9uLCBpdCB1c2VzIHRoZSBtdWx0aXBsaWVyIHRhYmxlCisgKiBwb2ludGVkIHRvIGJ5IGNvbXBwdHItPmRjdF90YWJsZS4gIFRoZSBvdXRwdXQgZGF0YSBpcyB0byBiZSBwbGFjZWQgaW50byB0aGUKKyAqIHNhbXBsZSBhcnJheSBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBjb2x1bW4uICAoQW55IHJvdyBvZmZzZXQgbmVlZGVkIHdpbGwKKyAqIGJlIGFwcGxpZWQgdG8gdGhlIGFycmF5IHBvaW50ZXIgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgSURDVCBjb2RlLikKKyAqIE5vdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZW1pdHRlZCBieSB0aGUgSURDVCByb3V0aW5lIGlzCisgKiBEQ1Rfc2NhbGVkX3NpemUgKiBEQ1Rfc2NhbGVkX3NpemUuCisgKi8KKworLyogdHlwZWRlZiBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGlzIGRlY2xhcmVkIGluIGpwZWdpbnQuaCAqLworCisvKgorICogRWFjaCBJRENUIHJvdXRpbmUgaGFzIGl0cyBvd24gaWRlYXMgYWJvdXQgdGhlIGJlc3QgZGN0X3RhYmxlIGVsZW1lbnQgdHlwZS4KKyAqLworCit0eXBlZGVmIE1VTFRJUExJRVIgSVNMT1dfTVVMVF9UWVBFOyAgLyogc2hvcnQgb3IgaW50LCB3aGljaGV2ZXIgaXMgZmFzdGVyICovCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKK3R5cGVkZWYgTVVMVElQTElFUiBJRkFTVF9NVUxUX1RZUEU7ICAvKiAxNiBiaXRzIGlzIE9LLCB1c2Ugc2hvcnQgaWYgZmFzdGVyICovCisjZGVmaW5lIElGQVNUX1NDQUxFX0JJVFMgIDIgICAgICAgICAgLyogZnJhY3Rpb25hbCBiaXRzIGluIHNjYWxlIGZhY3RvcnMgKi8KKyNlbHNlCit0eXBlZGVmIEpMT05HIElGQVNUX01VTFRfVFlQRTsgICAgICAgLyogbmVlZCAzMiBiaXRzIGZvciBzY2FsZWQgcXVhbnRpemVycyAqLworI2RlZmluZSBJRkFTVF9TQ0FMRV9CSVRTICAxMyAgICAgICAgIC8qIGZyYWN0aW9uYWwgYml0cyBpbiBzY2FsZSBmYWN0b3JzICovCisjZW5kaWYKK3R5cGVkZWYgRkFTVF9GTE9BVCBGTE9BVF9NVUxUX1RZUEU7ICAvKiBwcmVmZXJyZWQgZmxvYXRpbmcgdHlwZSAqLworCisKKy8qCisgKiBFYWNoIElEQ1Qgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcmFuZ2UtbGltaXRpbmcgaXRzIHJlc3VsdHMgYW5kCisgKiBjb252ZXJ0aW5nIHRoZW0gdG8gdW5zaWduZWQgZm9ybSAoMC4uTUFYSlNBTVBMRSkuICBUaGUgcmF3IG91dHB1dHMgY291bGQKKyAqIGJlIHF1aXRlIGZhciBvdXQgb2YgcmFuZ2UgaWYgdGhlIGlucHV0IGRhdGEgaXMgY29ycnVwdCwgc28gYSBidWxsZXRwcm9vZgorICogcmFuZ2UtbGltaXRpbmcgc3RlcCBpcyByZXF1aXJlZC4gIFdlIHVzZSBhIG1hc2stYW5kLXRhYmxlLWxvb2t1cCBtZXRob2QKKyAqIHRvIGRvIHRoZSBjb21iaW5lZCBvcGVyYXRpb25zIHF1aWNrbHkuICBTZWUgdGhlIGNvbW1lbnRzIHdpdGgKKyAqIHByZXBhcmVfcmFuZ2VfbGltaXRfdGFibGUgKGluIGpkbWFzdGVyLmMpIGZvciBtb3JlIGluZm8uCisgKi8KKworI2RlZmluZSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKSAgKChjaW5mbyktPnNhbXBsZV9yYW5nZV9saW1pdCArIENFTlRFUkpTQU1QTEUpCisKKyNkZWZpbmUgUkFOR0VfTUFTSyAgKE1BWEpTQU1QTEUgKiA0ICsgMykgLyogMiBiaXRzIHdpZGVyIHRoYW4gbGVnYWwgc2FtcGxlcyAqLworCisKKy8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBmb3J3YXJkIGFuZCBpbnZlcnNlIERDVCByb3V0aW5lcy4gKi8KKworRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pc2xvdyhEQ1RFTEVNICpkYXRhKTsKK0VYVEVSTih2b2lkKSBqcGVnX2ZkY3RfaWZhc3QoRENURUxFTSAqZGF0YSk7CitFWFRFUk4odm9pZCkganBlZ19mZGN0X2Zsb2F0KEZBU1RfRkxPQVQgKmRhdGEpOworCitFWFRFUk4odm9pZCkganBlZ19pZGN0X2lzbG93KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9mbG9hdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0Xzd4NyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfNng2KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF81eDUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzR4NChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfM3gzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzF4MShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfOXg5KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xMHgxMChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzExeDExKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfMTJ4MTIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xM3gxMyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzE0eDE0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfMTV4MTUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xNngxNihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKKworLyoKKyAqIE1hY3JvcyBmb3IgaGFuZGxpbmcgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYzsgdGhlc2UgYXJlIHVzZWQgYnkgbWFueQorICogYnV0IG5vdCBhbGwgb2YgdGhlIERDVC9JRENUIG1vZHVsZXMuCisgKgorICogQWxsIHZhbHVlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBKTE9ORy4KKyAqIEZyYWN0aW9uYWwgY29uc3RhbnRzIGFyZSBzY2FsZWQgbGVmdCBieSBDT05TVF9CSVRTIGJpdHMuCisgKiBDT05TVF9CSVRTIGlzIGRlZmluZWQgd2l0aGluIGVhY2ggbW9kdWxlIHVzaW5nIHRoZXNlIG1hY3JvcywKKyAqIGFuZCBtYXkgZGlmZmVyIGZyb20gb25lIG1vZHVsZSB0byB0aGUgbmV4dC4KKyAqLworCisjZGVmaW5lIE9ORSAgICAgICAgICAoKEpMT05HKTEpCisjZGVmaW5lIENPTlNUX1NDQUxFICAoT05FIDw8IENPTlNUX0JJVFMpCisKKy8qIENvbnZlcnQgYSBwb3NpdGl2ZSByZWFsIGNvbnN0YW50IHRvIGFuIGludGVnZXIgc2NhbGVkIGJ5IENPTlNUX1NDQUxFLgorICogQ2F1dGlvbjogc29tZSBDIGNvbXBpbGVycyBmYWlsIHRvIHJlZHVjZSAiRklYKGNvbnN0YW50KSIgYXQgY29tcGlsZSB0aW1lLAorICogdGh1cyBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4KKyAqLworCisjZGVmaW5lIEZJWCh4KSAgKChKTE9ORykoKHgpICogQ09OU1RfU0NBTEUgKyAwLjUpKQorCisvKiBEZXNjYWxlIGFuZCBjb3JyZWN0bHkgcm91bmQgYSBKTE9ORyB2YWx1ZSB0aGF0J3Mgc2NhbGVkIGJ5IE4gYml0cy4KKyAqIFdlIGFzc3VtZSBSSUdIVF9TSElGVCByb3VuZHMgdG93YXJkcyBtaW51cyBpbmZpbml0eSwgc28gYWRkaW5nCisgKiB0aGUgZnVkZ2UgZmFjdG9yIGlzIGNvcnJlY3QgZm9yIGVpdGhlciBzaWduIG9mIFguCisgKi8KKworI2RlZmluZSBERVNDQUxFKHgsIG4pICBSSUdIVF9TSElGVCgoeCkgKyAoT05FIDw8ICgobikgLSAxKSksIG4pCisKKy8qIE11bHRpcGx5IGEgSkxPTkcgdmFyaWFibGUgYnkgYSBKTE9ORyBjb25zdGFudCB0byB5aWVsZCBhIEpMT05HIHJlc3VsdC4KKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCBvbmx5IHdoZW4gdGhlIHR3byBpbnB1dHMgd2lsbCBhY3R1YWxseSBiZSBubyBtb3JlIHRoYW4KKyAqIDE2IGJpdHMgd2lkZSwgc28gdGhhdCBhIDE2eDE2LT4zMiBiaXQgbXVsdGlwbHkgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhCisgKiBmdWxsIDMyeDMyIG11bHRpcGx5LiAgVGhpcyBwcm92aWRlcyBhIHVzZWZ1bCBzcGVlZHVwIG9uIG1hbnkgbWFjaGluZXMuCisgKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHdheSB0byBzcGVjaWZ5IGEgMTZ4MTYtPjMyIG11bHRpcGx5IHBvcnRhYmx5CisgKiBpbiBDLCBidXQgc29tZSBDIGNvbXBpbGVycyB3aWxsIGRvIHRoZSByaWdodCB0aGluZyBpZiB5b3UgcHJvdmlkZSB0aGUKKyAqIGNvcnJlY3QgY29tYmluYXRpb24gb2YgY2FzdHMuCisgKi8KKworI2lmZGVmIFNIT1JUeFNIT1JUXzMyICAgICAgICAgICAvKiBtYXkgd29yayBpZiAnaW50JyBpcyAzMiBiaXRzICovCisjZGVmaW5lIE1VTFRJUExZMTZDMTYodmFyLCBjb25zdCkgICgoKElOVDE2KSh2YXIpKSAqICgoSU5UMTYpKGNvbnN0KSkpCisjZW5kaWYKKyNpZmRlZiBTSE9SVHhMQ09OU1RfMzIgICAgICAgICAgLyoga25vd24gdG8gd29yayB3aXRoIE1pY3Jvc29mdCBDIDYuMCAqLworI2RlZmluZSBNVUxUSVBMWTE2QzE2KHZhciwgY29uc3QpICAoKChJTlQxNikodmFyKSkgKiAoKEpMT05HKShjb25zdCkpKQorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElQTFkxNkMxNiAgICAgICAgICAgLyogZGVmYXVsdCBkZWZpbml0aW9uICovCisjZGVmaW5lIE1VTFRJUExZMTZDMTYodmFyLCBjb25zdCkgICgodmFyKSAqIChjb25zdCkpCisjZW5kaWYKKworLyogU2FtZSBleGNlcHQgYm90aCBpbnB1dHMgYXJlIHZhcmlhYmxlcy4gKi8KKworI2lmZGVmIFNIT1JUeFNIT1JUXzMyICAgICAgICAgICAvKiBtYXkgd29yayBpZiAnaW50JyBpcyAzMiBiaXRzICovCisjZGVmaW5lIE1VTFRJUExZMTZWMTYodmFyMSwgdmFyMikgICgoKElOVDE2KSh2YXIxKSkgKiAoKElOVDE2KSh2YXIyKSkpCisjZW5kaWYKKworI2lmbmRlZiBNVUxUSVBMWTE2VjE2ICAgICAgICAgICAvKiBkZWZhdWx0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgTVVMVElQTFkxNlYxNih2YXIxLCB2YXIyKSAgKCh2YXIxKSAqICh2YXIyKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRkY3RtZ3IuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkZGN0bWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2ZjQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkZGN0bWdyLmMKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBqZGRjdG1nci5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAyMDAyLTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgQ2FsaWZvcm5pYS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW52ZXJzZS1EQ1QgbWFuYWdlbWVudCBsb2dpYy4KKyAqIFRoaXMgY29kZSBzZWxlY3RzIGEgcGFydGljdWxhciBJRENUIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQsCisgKiBhbmQgaXQgcGVyZm9ybXMgcmVsYXRlZCBob3VzZWtlZXBpbmcgY2hvcmVzLiAgTm8gY29kZSBpbiB0aGlzIGZpbGUKKyAqIGlzIGV4ZWN1dGVkIHBlciBJRENUIHN0ZXAsIG9ubHkgZHVyaW5nIG91dHB1dCBwYXNzIHNldHVwLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgSURDVCByb3V0aW5lcyBhcmUgcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgY29lZmZpY2llbnQKKyAqIGRlcXVhbnRpemF0aW9uIGFzIHdlbGwgYXMgdGhlIElEQ1QgcHJvcGVyLiAgVGhpcyBtb2R1bGUgc2V0cyB1cCB0aGUKKyAqIGRlcXVhbnRpemF0aW9uIG11bHRpcGxpZXIgdGFibGUgbmVlZGVkIGJ5IHRoZSBJRENUIHJvdXRpbmUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpkY3QuaCIgICAgICAgICAgICAgICAvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworI2luY2x1ZGUgImpzaW1kZGN0LmgiCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKKworCisvKgorICogVGhlIGRlY29tcHJlc3NvciBpbnB1dCBzaWRlIChqZGlucHV0LmMpIHNhdmVzIGF3YXkgdGhlIGFwcHJvcHJpYXRlCisgKiBxdWFudGl6YXRpb24gdGFibGUgZm9yIGVhY2ggY29tcG9uZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2NhbgorICogaW52b2x2aW5nIHRoYXQgY29tcG9uZW50LiAgKFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGNvcnJlY3RseQorICogZGVjb2RlIGZpbGVzIHRoYXQgcmV1c2UgUS10YWJsZSBzbG90cy4pCisgKiBXaGVuIHdlIGFyZSByZWFkeSB0byBtYWtlIGFuIG91dHB1dCBwYXNzLCB0aGUgc2F2ZWQgUS10YWJsZSBpcyBjb252ZXJ0ZWQKKyAqIHRvIGEgbXVsdGlwbGllciB0YWJsZSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgdXNlZCBieSB0aGUgSURDVCByb3V0aW5lLgorICogVGhlIG11bHRpcGxpZXIgdGFibGUgY29udGVudHMgYXJlIElEQ1QtbWV0aG9kLWRlcGVuZGVudC4gIFRvIHN1cHBvcnQKKyAqIGFwcGxpY2F0aW9uIGNoYW5nZXMgaW4gSURDVCBtZXRob2QgYmV0d2VlbiBzY2Fucywgd2UgY2FuIHJlbWFrZSB0aGUKKyAqIG11bHRpcGxpZXIgdGFibGVzIGlmIG5lY2Vzc2FyeS4KKyAqIEluIGJ1ZmZlcmVkLWltYWdlIG1vZGUsIHRoZSBmaXJzdCBvdXRwdXQgcGFzcyBtYXkgb2NjdXIgYmVmb3JlIGFueSBkYXRhCisgKiBoYXMgYmVlbiBzZWVuIGZvciBzb21lIGNvbXBvbmVudHMsIGFuZCB0aHVzIGJlZm9yZSB0aGVpciBRLXRhYmxlcyBoYXZlCisgKiBiZWVuIHNhdmVkIGF3YXkuICBUbyBoYW5kbGUgdGhpcyBjYXNlLCBtdWx0aXBsaWVyIHRhYmxlcyBhcmUgcHJlc2V0CisgKiB0byB6ZXJvZXM7IHRoZSByZXN1bHQgb2YgdGhlIElEQ1Qgd2lsbCBiZSBhIG5ldXRyYWwgZ3JheSBsZXZlbC4KKyAqLworCisKKy8qIFByaXZhdGUgc3Vib2JqZWN0IGZvciB0aGlzIG1vZHVsZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0IHB1YjsgIC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBJRENUIG1ldGhvZCBjb2RlIHRoYXQgZWFjaCBtdWx0aXBsaWVyIHRhYmxlCisgICAqIGlzIGN1cnJlbnRseSBzZXQgdXAgZm9yLCBvciAtMSBpZiBpdCdzIG5vdCB5ZXQgc2V0IHVwLgorICAgKiBUaGUgYWN0dWFsIG11bHRpcGxpZXIgdGFibGVzIGFyZSBwb2ludGVkIHRvIGJ5IGRjdF90YWJsZSBpbiB0aGUKKyAgICogcGVyLWNvbXBvbmVudCBjb21wX2luZm8gc3RydWN0dXJlcy4KKyAgICovCisgIGludCBjdXJfbWV0aG9kW01BWF9DT01QT05FTlRTXTsKK30gbXlfaWRjdF9jb250cm9sbGVyOworCit0eXBlZGVmIG15X2lkY3RfY29udHJvbGxlciAqbXlfaWRjdF9wdHI7CisKKworLyogQWxsb2NhdGVkIG11bHRpcGxpZXIgdGFibGVzOiBiaWcgZW5vdWdoIGZvciBhbnkgc3VwcG9ydGVkIHZhcmlhbnQgKi8KKwordHlwZWRlZiB1bmlvbiB7CisgIElTTE9XX01VTFRfVFlQRSBpc2xvd19hcnJheVtEQ1RTSVpFMl07CisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICBJRkFTVF9NVUxUX1RZUEUgaWZhc3RfYXJyYXlbRENUU0laRTJdOworI2VuZGlmCisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICBGTE9BVF9NVUxUX1RZUEUgZmxvYXRfYXJyYXlbRENUU0laRTJdOworI2VuZGlmCit9IG11bHRpcGxpZXJfdGFibGU7CisKKworLyogVGhlIGN1cnJlbnQgc2NhbGVkLUlEQ1Qgcm91dGluZXMgcmVxdWlyZSBJU0xPVy1zdHlsZSBtdWx0aXBsaWVyIHRhYmxlcywKKyAqIHNvIGJlIHN1cmUgdG8gY29tcGlsZSB0aGF0IGNvZGUgaWYgZWl0aGVyIElTTE9XIG9yIFNDQUxJTkcgaXMgcmVxdWVzdGVkLgorICovCisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorI2RlZmluZSBQUk9WSURFX0lTTE9XX1RBQkxFUworI2Vsc2UKKyNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisjZGVmaW5lIFBST1ZJREVfSVNMT1dfVEFCTEVTCisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBQcmVwYXJlIGZvciBhbiBvdXRwdXQgcGFzcy4KKyAqIEhlcmUgd2Ugc2VsZWN0IHRoZSBwcm9wZXIgSURDVCByb3V0aW5lIGZvciBlYWNoIGNvbXBvbmVudCBhbmQgYnVpbGQKKyAqIGEgbWF0Y2hpbmcgbXVsdGlwbGllciB0YWJsZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfaWRjdF9wdHIgaWRjdCA9IChteV9pZGN0X3B0ciljaW5mby0+aWRjdDsKKyAgaW50IGNpLCBpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBpbnQgbWV0aG9kID0gMDsKKyAgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBtZXRob2RfcHRyID0gTlVMTDsKKyAgSlFVQU5UX1RCTCAqcXRibDsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIFNlbGVjdCB0aGUgcHJvcGVyIElEQ1Qgcm91dGluZSBmb3IgdGhpcyBjb21wb25lbnQncyBzY2FsaW5nICovCisgICAgc3dpdGNoIChjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSB7CisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorICAgIGNhc2UgMToKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMXgxOworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdHJlZCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBpZiAoanNpbWRfY2FuX2lkY3RfMngyKCkpCisgICAgICAgIG1ldGhvZF9wdHIgPSBqc2ltZF9pZGN0XzJ4MjsKKyAgICAgIGVsc2UKKyAgICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8yeDI7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfM3gzOworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICBpZiAoanNpbWRfY2FuX2lkY3RfNHg0KCkpCisgICAgICAgIG1ldGhvZF9wdHIgPSBqc2ltZF9pZGN0XzR4NDsKKyAgICAgIGVsc2UKKyAgICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF80eDQ7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfNXg1OworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDY6CisjaWYgZGVmaW5lZChfX21pcHNfXykKKyAgICAgIGlmIChqc2ltZF9jYW5faWRjdF82eDYoKSkKKyAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfNng2OworICAgICAgZWxzZQorI2VuZGlmCisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzZ4NjsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF83eDc7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBEQ1RTSVpFOgorICAgICAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgICAgIGNhc2UgSkRDVF9JU0xPVzoKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9pZGN0X2lzbG93KCkpCisgICAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfaXNsb3c7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2lzbG93OworICAgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgICAgIGNhc2UgSkRDVF9JRkFTVDoKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9pZGN0X2lmYXN0KCkpCisgICAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfaWZhc3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2lmYXN0OworICAgICAgICBtZXRob2QgPSBKRENUX0lGQVNUOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgICAgIGNhc2UgSkRDVF9GTE9BVDoKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9pZGN0X2Zsb2F0KCkpCisgICAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfZmxvYXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2Zsb2F0OworICAgICAgICBtZXRob2QgPSBKRENUX0ZMT0FUOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgICBjYXNlIDk6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0Xzl4OTsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAxMDoKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTB4MTA7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTE6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzExeDExOworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDEyOgorI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgICBpZiAoanNpbWRfY2FuX2lkY3RfMTJ4MTIoKSkKKyAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfMTJ4MTI7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTJ4MTI7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTM6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzEzeDEzOworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDE0OgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xNHgxNDsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAxNToKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTV4MTU7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTY6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzE2eDE2OworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfRENUU0laRSwgY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWRjdC0+cHViLmludmVyc2VfRENUW2NpXSA9IG1ldGhvZF9wdHI7CisgICAgLyogQ3JlYXRlIG11bHRpcGxpZXIgdGFibGUgZnJvbSBxdWFudCB0YWJsZS4KKyAgICAgKiBIb3dldmVyLCB3ZSBjYW4gc2tpcCB0aGlzIGlmIHRoZSBjb21wb25lbnQgaXMgdW5pbnRlcmVzdGluZworICAgICAqIG9yIGlmIHdlIGFscmVhZHkgYnVpbHQgdGhlIHRhYmxlLiAgQWxzbywgaWYgbm8gcXVhbnQgdGFibGUKKyAgICAgKiBoYXMgeWV0IGJlZW4gc2F2ZWQgZm9yIHRoZSBjb21wb25lbnQsIHdlIGxlYXZlIHRoZQorICAgICAqIG11bHRpcGxpZXIgdGFibGUgYWxsLXplcm87IHdlJ2xsIGJlIHJlYWRpbmcgemVyb2VzIGZyb20gdGhlCisgICAgICogY29lZmZpY2llbnQgY29udHJvbGxlcidzIGJ1ZmZlciBhbnl3YXkuCisgICAgICovCisgICAgaWYgKCFjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkIHx8IGlkY3QtPmN1cl9tZXRob2RbY2ldID09IG1ldGhvZCkKKyAgICAgIGNvbnRpbnVlOworICAgIHF0YmwgPSBjb21wcHRyLT5xdWFudF90YWJsZTsKKyAgICBpZiAocXRibCA9PSBOVUxMKSAgICAgICAgICAgLyogaGFwcGVucyBpZiBubyBkYXRhIHlldCBmb3IgY29tcG9uZW50ICovCisgICAgICBjb250aW51ZTsKKyAgICBpZGN0LT5jdXJfbWV0aG9kW2NpXSA9IG1ldGhvZDsKKyAgICBzd2l0Y2ggKG1ldGhvZCkgeworI2lmZGVmIFBST1ZJREVfSVNMT1dfVEFCTEVTCisgICAgY2FzZSBKRENUX0lTTE9XOgorICAgICAgeworICAgICAgICAvKiBGb3IgTEwmTSBJRENUIG1ldGhvZCwgbXVsdGlwbGllcnMgYXJlIGVxdWFsIHRvIHJhdyBxdWFudGl6YXRpb24KKyAgICAgICAgICogY29lZmZpY2llbnRzLCBidXQgYXJlIHN0b3JlZCBhcyBpbnRzIHRvIGVuc3VyZSBhY2Nlc3MgZWZmaWNpZW5jeS4KKyAgICAgICAgICovCisgICAgICAgIElTTE9XX01VTFRfVFlQRSAqaXNtdGJsID0gKElTTE9XX01VTFRfVFlQRSAqKWNvbXBwdHItPmRjdF90YWJsZTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICAgICAgICBpc210YmxbaV0gPSAoSVNMT1dfTVVMVF9UWVBFKXF0YmwtPnF1YW50dmFsW2ldOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgICBjYXNlIEpEQ1RfSUZBU1Q6CisgICAgICB7CisgICAgICAgIC8qIEZvciBBQSZOIElEQ1QgbWV0aG9kLCBtdWx0aXBsaWVycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCisgICAgICAgICAqIGNvZWZmaWNpZW50cyBzY2FsZWQgYnkgc2NhbGVmYWN0b3Jbcm93XSpzY2FsZWZhY3Rvcltjb2xdLCB3aGVyZQorICAgICAgICAgKiAgIHNjYWxlZmFjdG9yWzBdID0gMQorICAgICAgICAgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43CisgICAgICAgICAqIEZvciBpbnRlZ2VyIG9wZXJhdGlvbiwgdGhlIG11bHRpcGxpZXIgdGFibGUgaXMgdG8gYmUgc2NhbGVkIGJ5CisgICAgICAgICAqIElGQVNUX1NDQUxFX0JJVFMuCisgICAgICAgICAqLworICAgICAgICBJRkFTVF9NVUxUX1RZUEUgKmlmbXRibCA9IChJRkFTVF9NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisjZGVmaW5lIENPTlNUX0JJVFMgIDE0CisgICAgICAgIHN0YXRpYyBjb25zdCBJTlQxNiBhYW5zY2FsZXNbRENUU0laRTJdID0geworICAgICAgICAgIC8qIHByZWNvbXB1dGVkIHZhbHVlcyBzY2FsZWQgdXAgYnkgMTQgYml0cyAqLworICAgICAgICAgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwKKyAgICAgICAgICAyMjcyNSwgMzE1MjEsIDI5NjkyLCAyNjcyMiwgMjI3MjUsIDE3ODU1LCAxMjI5OSwgIDYyNzAsCisgICAgICAgICAgMjE0MDcsIDI5NjkyLCAyNzk2OSwgMjUxNzIsIDIxNDA3LCAxNjgxOSwgMTE1ODUsICA1OTA2LAorICAgICAgICAgIDE5MjY2LCAyNjcyMiwgMjUxNzIsIDIyNjU0LCAxOTI2NiwgMTUxMzcsIDEwNDI2LCAgNTMxNSwKKyAgICAgICAgICAxNjM4NCwgMjI3MjUsIDIxNDA3LCAxOTI2NiwgMTYzODQsIDEyODczLCAgODg2NywgIDQ1MjAsCisgICAgICAgICAgMTI4NzMsIDE3ODU1LCAxNjgxOSwgMTUxMzcsIDEyODczLCAxMDExNCwgIDY5NjcsICAzNTUyLAorICAgICAgICAgICA4ODY3LCAxMjI5OSwgMTE1ODUsIDEwNDI2LCAgODg2NywgIDY5NjcsICA0Nzk5LCAgMjQ0NiwKKyAgICAgICAgICAgNDUyMCwgIDYyNzAsICA1OTA2LCAgNTMxNSwgIDQ1MjAsICAzNTUyLCAgMjQ0NiwgIDEyNDcKKyAgICAgICAgfTsKKyAgICAgICAgU0hJRlRfVEVNUFMKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgICAgICAgIGlmbXRibFtpXSA9IChJRkFTVF9NVUxUX1RZUEUpCisgICAgICAgICAgICBERVNDQUxFKE1VTFRJUExZMTZWMTYoKEpMT05HKXF0YmwtPnF1YW50dmFsW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKTE9ORylhYW5zY2FsZXNbaV0pLAorICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTIC0gSUZBU1RfU0NBTEVfQklUUyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICAgIGNhc2UgSkRDVF9GTE9BVDoKKyAgICAgIHsKKyAgICAgICAgLyogRm9yIGZsb2F0IEFBJk4gSURDVCBtZXRob2QsIG11bHRpcGxpZXJzIGFyZSBlcXVhbCB0byBxdWFudGl6YXRpb24KKyAgICAgICAgICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlCisgICAgICAgICAqICAgc2NhbGVmYWN0b3JbMF0gPSAxCisgICAgICAgICAqICAgc2NhbGVmYWN0b3Jba10gPSBjb3MoaypQSS8xNikgKiBzcXJ0KDIpICAgIGZvciBrPTEuLjcKKyAgICAgICAgICovCisgICAgICAgIEZMT0FUX01VTFRfVFlQRSAqZm10YmwgPSAoRkxPQVRfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICAgICAgICBpbnQgcm93LCBjb2w7CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgYWFuc2NhbGVmYWN0b3JbRENUU0laRV0gPSB7CisgICAgICAgICAgMS4wLCAxLjM4NzAzOTg0NSwgMS4zMDY1NjI5NjUsIDEuMTc1ODc1NjAyLAorICAgICAgICAgIDEuMCwgMC43ODU2OTQ5NTgsIDAuNTQxMTk2MTAwLCAwLjI3NTg5OTM3OQorICAgICAgICB9OworCisgICAgICAgIGkgPSAwOworICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IERDVFNJWkU7IHJvdysrKSB7CisgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBEQ1RTSVpFOyBjb2wrKykgeworICAgICAgICAgICAgZm10YmxbaV0gPSAoRkxPQVRfTVVMVF9UWVBFKQorICAgICAgICAgICAgICAoKGRvdWJsZSlxdGJsLT5xdWFudHZhbFtpXSAqCisgICAgICAgICAgICAgICBhYW5zY2FsZWZhY3Rvcltyb3ddICogYWFuc2NhbGVmYWN0b3JbY29sXSk7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworCisvKgorICogSW5pdGlhbGl6ZSBJRENUIG1hbmFnZXIuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9pbnZlcnNlX2RjdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9pZGN0X3B0ciBpZGN0OworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgaWRjdCA9IChteV9pZGN0X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9pZGN0X2NvbnRyb2xsZXIpKTsKKyAgY2luZm8tPmlkY3QgPSAoc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgKilpZGN0OworICBpZGN0LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3M7CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAvKiBBbGxvY2F0ZSBhbmQgcHJlLXplcm8gYSBtdWx0aXBsaWVyIHRhYmxlIGZvciBlYWNoIGNvbXBvbmVudCAqLworICAgIGNvbXBwdHItPmRjdF90YWJsZSA9CisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG11bHRpcGxpZXJfdGFibGUpKTsKKyAgICBNRU1aRVJPKGNvbXBwdHItPmRjdF90YWJsZSwgc2l6ZW9mKG11bHRpcGxpZXJfdGFibGUpKTsKKyAgICAvKiBNYXJrIG11bHRpcGxpZXIgdGFibGUgbm90IHlldCBzZXQgdXAgZm9yIGFueSBtZXRob2QgKi8KKyAgICBpZGN0LT5jdXJfbWV0aG9kW2NpXSA9IC0xOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGh1ZmYuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkaHVmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YjliNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGh1ZmYuYwpAQCAtMCwwICsxLDgyNCBAQAorLyoKKyAqIGpkaHVmZi5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcy4KKyAqCisgKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBpbnB1dCBzdXNwZW5zaW9uLgorICogSWYgdGhlIGRhdGEgc291cmNlIG1vZHVsZSBkZW1hbmRzIHN1c3BlbnNpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBiYWNrCisgKiB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgTUNVLiAgVG8gZG8gdGhpcywgd2UgY29weSBzdGF0ZSB2YXJpYWJsZXMKKyAqIGludG8gbG9jYWwgd29ya2luZyBzdG9yYWdlLCBhbmQgdXBkYXRlIHRoZW0gYmFjayB0byB0aGUgcGVybWFuZW50CisgKiBzdG9yYWdlIG9ubHkgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gTUNVLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGh1ZmYuaCIgICAgICAgICAgICAgLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpkcGh1ZmYuYyAqLworI2luY2x1ZGUgImpwZWdjb21wLmgiCisjaW5jbHVkZSAianN0ZGh1ZmYuYyIKKworCisvKgorICogRXhwYW5kZWQgZW50cm9weSBkZWNvZGVyIG9iamVjdCBmb3IgSHVmZm1hbiBkZWNvZGluZy4KKyAqCisgKiBUaGUgc2F2YWJsZV9zdGF0ZSBzdWJyZWNvcmQgY29udGFpbnMgZmllbGRzIHRoYXQgY2hhbmdlIHdpdGhpbiBhbiBNQ1UsCisgKiBidXQgbXVzdCBub3QgYmUgdXBkYXRlZCBwZXJtYW5lbnRseSB1bnRpbCB3ZSBjb21wbGV0ZSB0aGUgTUNVLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLworfSBzYXZhYmxlX3N0YXRlOworCisvKiBUaGlzIG1hY3JvIGlzIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVycyB3aXRoIG1pc3Npbmcgb3IgYnJva2VuCisgKiBzdHJ1Y3R1cmUgYXNzaWdubWVudC4gIFlvdSdsbCBuZWVkIHRvIGZpeCB0aGlzIGNvZGUgaWYgeW91IGhhdmUKKyAqIHN1Y2ggYSBjb21waWxlciBhbmQgeW91IGNoYW5nZSBNQVhfQ09NUFNfSU5fU0NBTi4KKyAqLworCisjaWZuZGVmIE5PX1NUUlVDVF9BU1NJR04KKyNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3QsIHNyYykgICgoZGVzdCkgPSAoc3JjKSkKKyNlbHNlCisjaWYgTUFYX0NPTVBTX0lOX1NDQU4gPT0gNAorI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCwgc3JjKSBcCisgICgoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAorICAgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwKKyAgIChkZXN0KS5sYXN0X2RjX3ZhbFsyXSA9IChzcmMpLmxhc3RfZGNfdmFsWzJdLCBcCisgICAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKKyNlbmRpZgorI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogVGhlc2UgZmllbGRzIGFyZSBsb2FkZWQgaW50byBsb2NhbCB2YXJpYWJsZXMgYXQgc3RhcnQgb2YgZWFjaCBNQ1UuCisgICAqIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgd2UgZXhpdCBXSVRIT1VUIHVwZGF0aW5nIHRoZW0uCisgICAqLworICBiaXRyZWFkX3Blcm1fc3RhdGUgYml0c3RhdGU7ICAvKiBCaXQgYnVmZmVyIGF0IHN0YXJ0IG9mIE1DVSAqLworICBzYXZhYmxlX3N0YXRlIHNhdmVkOyAgICAgICAgICAvKiBPdGhlciBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgYXJlIE5PVCBsb2FkZWQgaW50byBsb2NhbCB3b3JraW5nIHN0YXRlLiAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287ICAvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCisKKyAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KKyAgZF9kZXJpdmVkX3RibCAqZGNfZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOworICBkX2Rlcml2ZWRfdGJsICphY19kZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107CisKKyAgLyogUHJlY2FsY3VsYXRlZCBpbmZvIHNldCB1cCBieSBzdGFydF9wYXNzIGZvciB1c2UgaW4gZGVjb2RlX21jdTogKi8KKworICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyB0byBiZSB1c2VkIGZvciBlYWNoIGJsb2NrIHdpdGhpbiBhbiBNQ1UgKi8KKyAgZF9kZXJpdmVkX3RibCAqZGNfY3VyX3RibHNbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIGRfZGVyaXZlZF90YmwgKmFjX2N1cl90YmxzW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworICAvKiBXaGV0aGVyIHdlIGNhcmUgYWJvdXQgdGhlIERDIGFuZCBBQyBjb2VmZmljaWVudCB2YWx1ZXMgZm9yIGVhY2ggYmxvY2sgKi8KKyAgYm9vbGVhbiBkY19uZWVkZWRbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIGJvb2xlYW4gYWNfbmVlZGVkW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworfSBodWZmX2VudHJvcHlfZGVjb2RlcjsKKwordHlwZWRlZiBodWZmX2VudHJvcHlfZGVjb2RlciAqaHVmZl9lbnRyb3B5X3B0cjsKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBIdWZmbWFuLWNvbXByZXNzZWQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfaHVmZl9kZWNvZGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBpbnQgY2ksIGJsa24sIGRjdGJsLCBhY3RibDsKKyAgZF9kZXJpdmVkX3RibCAqKnBkdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIENoZWNrIHRoYXQgdGhlIHNjYW4gcGFyYW1ldGVycyBTcywgU2UsIEFoL0FsIGFyZSBPSyBmb3Igc2VxdWVudGlhbCBKUEVHLgorICAgKiBUaGlzIG91Z2h0IHRvIGJlIGFuIGVycm9yIGNvbmRpdGlvbiwgYnV0IHdlIG1ha2UgaXQgYSB3YXJuaW5nIGJlY2F1c2UKKyAgICogdGhlcmUgYXJlIHNvbWUgYmFzZWxpbmUgZmlsZXMgb3V0IHRoZXJlIHdpdGggYWxsIHplcm9lcyBpbiB0aGVzZSBieXRlcy4KKyAgICovCisgIGlmIChjaW5mby0+U3MgIT0gMCB8fCBjaW5mby0+U2UgIT0gRENUU0laRTIgLSAxIHx8CisgICAgICBjaW5mby0+QWggIT0gMCB8fCBjaW5mby0+QWwgIT0gMCkKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fTk9UX1NFUVVFTlRJQUwpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLworICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovCisgICAgcGR0YmwgPSAoZF9kZXJpdmVkX3RibCAqKikoZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzKSArIGRjdGJsOworICAgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCBkY3RibCwgcGR0YmwpOworICAgIHBkdGJsID0gKGRfZGVyaXZlZF90YmwgKiopKGVudHJvcHktPmFjX2Rlcml2ZWRfdGJscykgKyBhY3RibDsKKyAgICBqcGVnX21ha2VfZF9kZXJpdmVkX3RibChjaW5mbywgRkFMU0UsIGFjdGJsLCBwZHRibCk7CisgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsKKyAgfQorCisgIC8qIFByZWNhbGN1bGF0ZSBkZWNvZGluZyBpbmZvIGZvciBlYWNoIGJsb2NrIGluIGFuIE1DVSBvZiB0aGlzIHNjYW4gKi8KKyAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKyAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgIC8qIFByZWNhbGN1bGF0ZSB3aGljaCB0YWJsZSB0byB1c2UgZm9yIGVhY2ggYmxvY2sgKi8KKyAgICBlbnRyb3B5LT5kY19jdXJfdGJsc1tibGtuXSA9IGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5kY190Ymxfbm9dOworICAgIGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dID0gZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2NvbXBwdHItPmFjX3RibF9ub107CisgICAgLyogRGVjaWRlIHdoZXRoZXIgd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIGNvZWZmaWNpZW50IHZhbHVlcyAqLworICAgIGlmIChjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkKSB7CisgICAgICBlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0gPSBUUlVFOworICAgICAgLyogd2UgZG9uJ3QgbmVlZCB0aGUgQUNzIGlmIHByb2R1Y2luZyBhIDEvOHRoLXNpemUgaW1hZ2UgKi8KKyAgICAgIGVudHJvcHktPmFjX25lZWRlZFtibGtuXSA9IChjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplID4gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGVudHJvcHktPmRjX25lZWRlZFtibGtuXSA9IGVudHJvcHktPmFjX25lZWRlZFtibGtuXSA9IEZBTFNFOworICAgIH0KKyAgfQorCisgIC8qIEluaXRpYWxpemUgYml0cmVhZCBzdGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsKKyAgZW50cm9weS0+Yml0c3RhdGUuZ2V0X2J1ZmZlciA9IDA7IC8qIHVubmVjZXNzYXJ5LCBidXQga2VlcHMgUHVyaWZ5IHF1aWV0ICovCisgIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Cit9CisKKworLyoKKyAqIENvbXB1dGUgdGhlIGRlcml2ZWQgdmFsdWVzIGZvciBhIEh1ZmZtYW4gdGFibGUuCisgKiBUaGlzIHJvdXRpbmUgYWxzbyBwZXJmb3JtcyBzb21lIHZhbGlkYXRpb24gY2hlY2tzIG9uIHRoZSB0YWJsZS4KKyAqCisgKiBOb3RlIHRoaXMgaXMgYWxzbyB1c2VkIGJ5IGpkcGh1ZmYuYy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLAorICAgICAgICAgICAgICAgICAgICAgICAgZF9kZXJpdmVkX3RibCAqKnBkdGJsKQoreworICBKSFVGRl9UQkwgKmh0Ymw7CisgIGRfZGVyaXZlZF90YmwgKmR0Ymw7CisgIGludCBwLCBpLCBsLCBzaSwgbnVtc3ltYm9sczsKKyAgaW50IGxvb2tiaXRzLCBjdHI7CisgIGNoYXIgaHVmZnNpemVbMjU3XTsKKyAgdW5zaWduZWQgaW50IGh1ZmZjb2RlWzI1N107CisgIHVuc2lnbmVkIGludCBjb2RlOworCisgIC8qIE5vdGUgdGhhdCBodWZmc2l6ZVtdIGFuZCBodWZmY29kZVtdIGFyZSBmaWxsZWQgaW4gY29kZS1sZW5ndGggb3JkZXIsCisgICAqIHBhcmFsbGVsaW5nIHRoZSBvcmRlciBvZiB0aGUgc3ltYm9scyB0aGVtc2VsdmVzIGluIGh0YmwtPmh1ZmZ2YWxbXS4KKyAgICovCisKKyAgLyogRmluZCB0aGUgaW5wdXQgSHVmZm1hbiB0YWJsZSAqLworICBpZiAodGJsbm8gPCAwIHx8IHRibG5vID49IE5VTV9IVUZGX1RCTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsbm8pOworICBodGJsID0KKyAgICBpc0RDID8gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbdGJsbm9dIDogY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsbm9dOworICBpZiAoaHRibCA9PSBOVUxMKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibG5vKTsKKworICAvKiBBbGxvY2F0ZSBhIHdvcmtzcGFjZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBzby4gKi8KKyAgaWYgKCpwZHRibCA9PSBOVUxMKQorICAgICpwZHRibCA9IChkX2Rlcml2ZWRfdGJsICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRfZGVyaXZlZF90YmwpKTsKKyAgZHRibCA9ICpwZHRibDsKKyAgZHRibC0+cHViID0gaHRibDsgICAgICAgICAgICAgLyogZmlsbCBpbiBiYWNrIGxpbmsgKi8KKworICAvKiBGaWd1cmUgQy4xOiBtYWtlIHRhYmxlIG9mIEh1ZmZtYW4gY29kZSBsZW5ndGggZm9yIGVhY2ggc3ltYm9sICovCisKKyAgcCA9IDA7CisgIGZvciAobCA9IDE7IGwgPD0gMTY7IGwrKykgeworICAgIGkgPSAoaW50KWh0YmwtPmJpdHNbbF07CisgICAgaWYgKGkgPCAwIHx8IHAgKyBpID4gMjU2KSAgIC8qIHByb3RlY3QgYWdhaW5zdCB0YWJsZSBvdmVycnVuICovCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsKKyAgICB3aGlsZSAoaS0tKQorICAgICAgaHVmZnNpemVbcCsrXSA9IChjaGFyKWw7CisgIH0KKyAgaHVmZnNpemVbcF0gPSAwOworICBudW1zeW1ib2xzID0gcDsKKworICAvKiBGaWd1cmUgQy4yOiBnZW5lcmF0ZSB0aGUgY29kZXMgdGhlbXNlbHZlcyAqLworICAvKiBXZSBhbHNvIHZhbGlkYXRlIHRoYXQgdGhlIGNvdW50cyByZXByZXNlbnQgYSBsZWdhbCBIdWZmbWFuIGNvZGUgdHJlZS4gKi8KKworICBjb2RlID0gMDsKKyAgc2kgPSBodWZmc2l6ZVswXTsKKyAgcCA9IDA7CisgIHdoaWxlIChodWZmc2l6ZVtwXSkgeworICAgIHdoaWxlICgoKGludClodWZmc2l6ZVtwXSkgPT0gc2kpIHsKKyAgICAgIGh1ZmZjb2RlW3ArK10gPSBjb2RlOworICAgICAgY29kZSsrOworICAgIH0KKyAgICAvKiBjb2RlIGlzIG5vdyAxIG1vcmUgdGhhbiB0aGUgbGFzdCBjb2RlIHVzZWQgZm9yIGNvZGVsZW5ndGggc2k7IGJ1dAorICAgICAqIGl0IG11c3Qgc3RpbGwgZml0IGluIHNpIGJpdHMsIHNpbmNlIG5vIGNvZGUgaXMgYWxsb3dlZCB0byBiZSBhbGwgb25lcy4KKyAgICAgKi8KKyAgICBpZiAoKChKTE9ORyljb2RlKSA+PSAoKChKTE9ORykxKSA8PCBzaSkpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsKKyAgICBjb2RlIDw8PSAxOworICAgIHNpKys7CisgIH0KKworICAvKiBGaWd1cmUgRi4xNTogZ2VuZXJhdGUgZGVjb2RpbmcgdGFibGVzIGZvciBiaXQtc2VxdWVudGlhbCBkZWNvZGluZyAqLworCisgIHAgPSAwOworICBmb3IgKGwgPSAxOyBsIDw9IDE2OyBsKyspIHsKKyAgICBpZiAoaHRibC0+Yml0c1tsXSkgeworICAgICAgLyogdmFsb2Zmc2V0W2xdID0gaHVmZnZhbFtdIGluZGV4IG9mIDFzdCBzeW1ib2wgb2YgY29kZSBsZW5ndGggbCwKKyAgICAgICAqIG1pbnVzIHRoZSBtaW5pbXVtIGNvZGUgb2YgbGVuZ3RoIGwKKyAgICAgICAqLworICAgICAgZHRibC0+dmFsb2Zmc2V0W2xdID0gKEpMT05HKXAgLSAoSkxPTkcpaHVmZmNvZGVbcF07CisgICAgICBwICs9IGh0YmwtPmJpdHNbbF07CisgICAgICBkdGJsLT5tYXhjb2RlW2xdID0gaHVmZmNvZGVbcCAtIDFdOyAvKiBtYXhpbXVtIGNvZGUgb2YgbGVuZ3RoIGwgKi8KKyAgICB9IGVsc2UgeworICAgICAgZHRibC0+bWF4Y29kZVtsXSA9IC0xOyAgICAvKiAtMSBpZiBubyBjb2RlcyBvZiB0aGlzIGxlbmd0aCAqLworICAgIH0KKyAgfQorICBkdGJsLT52YWxvZmZzZXRbMTddID0gMDsKKyAgZHRibC0+bWF4Y29kZVsxN10gPSAweEZGRkZGTDsgLyogZW5zdXJlcyBqcGVnX2h1ZmZfZGVjb2RlIHRlcm1pbmF0ZXMgKi8KKworICAvKiBDb21wdXRlIGxvb2thaGVhZCB0YWJsZXMgdG8gc3BlZWQgdXAgZGVjb2RpbmcuCisgICAqIEZpcnN0IHdlIHNldCBhbGwgdGhlIHRhYmxlIGVudHJpZXMgdG8gMCwgaW5kaWNhdGluZyAidG9vIGxvbmciOworICAgKiB0aGVuIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSHVmZm1hbiBjb2RlcyB0aGF0IGFyZSBzaG9ydCBlbm91Z2ggYW5kCisgICAqIGZpbGwgaW4gYWxsIHRoZSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBiaXQgc2VxdWVuY2VzIHN0YXJ0aW5nCisgICAqIHdpdGggdGhhdCBjb2RlLgorICAgKi8KKworICBmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVGRl9MT09LQUhFQUQpOyBpKyspCisgICAgZHRibC0+bG9va3VwW2ldID0gKEhVRkZfTE9PS0FIRUFEICsgMSkgPDwgSFVGRl9MT09LQUhFQUQ7CisKKyAgcCA9IDA7CisgIGZvciAobCA9IDE7IGwgPD0gSFVGRl9MT09LQUhFQUQ7IGwrKykgeworICAgIGZvciAoaSA9IDE7IGkgPD0gKGludClodGJsLT5iaXRzW2xdOyBpKyssIHArKykgeworICAgICAgLyogbCA9IGN1cnJlbnQgY29kZSdzIGxlbmd0aCwgcCA9IGl0cyBpbmRleCBpbiBodWZmY29kZVtdICYgaHVmZnZhbFtdLiAqLworICAgICAgLyogR2VuZXJhdGUgbGVmdC1qdXN0aWZpZWQgY29kZSBmb2xsb3dlZCBieSBhbGwgcG9zc2libGUgYml0IHNlcXVlbmNlcyAqLworICAgICAgbG9va2JpdHMgPSBodWZmY29kZVtwXSA8PCAoSFVGRl9MT09LQUhFQUQgLSBsKTsKKyAgICAgIGZvciAoY3RyID0gMSA8PCAoSFVGRl9MT09LQUhFQUQgLSBsKTsgY3RyID4gMDsgY3RyLS0pIHsKKyAgICAgICAgZHRibC0+bG9va3VwW2xvb2tiaXRzXSA9IChsIDw8IEhVRkZfTE9PS0FIRUFEKSB8IGh0YmwtPmh1ZmZ2YWxbcF07CisgICAgICAgIGxvb2tiaXRzKys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogVmFsaWRhdGUgc3ltYm9scyBhcyBiZWluZyByZWFzb25hYmxlLgorICAgKiBGb3IgQUMgdGFibGVzLCB3ZSBtYWtlIG5vIGNoZWNrLCBidXQgYWNjZXB0IGFsbCBieXRlIHZhbHVlcyAwLi4yNTUuCisgICAqIEZvciBEQyB0YWJsZXMsIHdlIHJlcXVpcmUgdGhlIHN5bWJvbHMgdG8gYmUgaW4gcmFuZ2UgMC4uMTUuCisgICAqIChUaWdodGVyIGJvdW5kcyBjb3VsZCBiZSBhcHBsaWVkIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBkZXB0aCBhbmQgbW9kZSwKKyAgICogYnV0IHRoaXMgaXMgc3VmZmljaWVudCB0byBlbnN1cmUgc2FmZSBkZWNvZGluZy4pCisgICAqLworICBpZiAoaXNEQykgeworICAgIGZvciAoaSA9IDA7IGkgPCBudW1zeW1ib2xzOyBpKyspIHsKKyAgICAgIGludCBzeW0gPSBodGJsLT5odWZmdmFsW2ldOworICAgICAgaWYgKHN5bSA8IDAgfHwgc3ltID4gMTUpCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBPdXQtb2YtbGluZSBjb2RlIGZvciBiaXQgZmV0Y2hpbmcgKHNoYXJlZCB3aXRoIGpkcGh1ZmYuYykuCisgKiBTZWUgamRodWZmLmggZm9yIGluZm8gYWJvdXQgdXNhZ2UuCisgKiBOb3RlOiBjdXJyZW50IHZhbHVlcyBvZiBnZXRfYnVmZmVyIGFuZCBiaXRzX2xlZnQgYXJlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLAorICogYnV0IGFyZSByZXR1cm5lZCBpbiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhlIHN0YXRlIHN0cnVjdC4KKyAqCisgKiBPbiBtb3N0IG1hY2hpbmVzIE1JTl9HRVRfQklUUyBzaG91bGQgYmUgMjUgdG8gYWxsb3cgdGhlIGZ1bGwgMzItYml0IHdpZHRoCisgKiBvZiBnZXRfYnVmZmVyIHRvIGJlIHVzZWQuICAoT24gbWFjaGluZXMgd2l0aCB3aWRlciB3b3JkcywgYW4gZXZlbiBsYXJnZXIKKyAqIGJ1ZmZlciBjb3VsZCBiZSB1c2VkLikgIEhvd2V2ZXIsIG9uIHNvbWUgbWFjaGluZXMgMzItYml0IHNoaWZ0cyBhcmUKKyAqIHF1aXRlIHNsb3cgYW5kIHRha2UgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBwbGFjZXMgc2hpZnRlZC4KKyAqIChUaGlzIGlzIHRydWUgd2l0aCBtb3N0IFBDIGNvbXBpbGVycywgZm9yIGluc3RhbmNlLikgIEluIHRoaXMgY2FzZSBpdCBtYXkKKyAqIGJlIGEgd2luIHRvIHNldCBNSU5fR0VUX0JJVFMgdG8gdGhlIG1pbmltdW0gdmFsdWUgb2YgMTUuICBUaGlzIHJlZHVjZXMgdGhlCisgKiBhdmVyYWdlIHNoaWZ0IGRpc3RhbmNlIGF0IHRoZSBjb3N0IG9mIG1vcmUgY2FsbHMgdG8ganBlZ19maWxsX2JpdF9idWZmZXIuCisgKi8KKworI2lmZGVmIFNMT1dfU0hJRlRfMzIKKyNkZWZpbmUgTUlOX0dFVF9CSVRTICAxNSAgICAgICAgLyogbWluaW11bSBhbGxvd2FibGUgdmFsdWUgKi8KKyNlbHNlCisjZGVmaW5lIE1JTl9HRVRfQklUUyAgKEJJVF9CVUZfU0laRSAtIDcpCisjZW5kaWYKKworCitHTE9CQUwoYm9vbGVhbikKK2pwZWdfZmlsbF9iaXRfYnVmZmVyKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBuYml0cykKKy8qIExvYWQgdXAgdGhlIGJpdCBidWZmZXIgdG8gYSBkZXB0aCBvZiBhdCBsZWFzdCBuYml0cyAqLworeworICAvKiBDb3B5IGhlYXZpbHkgdXNlZCBzdGF0ZSBmaWVsZHMgaW50byBsb2NhbHMgKGhvcGVmdWxseSByZWdpc3RlcnMpICovCisgIHJlZ2lzdGVyIGNvbnN0IEpPQ1RFVCAqbmV4dF9pbnB1dF9ieXRlID0gc3RhdGUtPm5leHRfaW5wdXRfYnl0ZTsKKyAgcmVnaXN0ZXIgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlciA9IHN0YXRlLT5ieXRlc19pbl9idWZmZXI7CisgIGpfZGVjb21wcmVzc19wdHIgY2luZm8gPSBzdGF0ZS0+Y2luZm87CisKKyAgLyogQXR0ZW1wdCB0byBsb2FkIGF0IGxlYXN0IE1JTl9HRVRfQklUUyBiaXRzIGludG8gZ2V0X2J1ZmZlci4gKi8KKyAgLyogKEl0IGlzIGFzc3VtZWQgdGhhdCBubyByZXF1ZXN0IHdpbGwgYmUgZm9yIG1vcmUgdGhhbiB0aGF0IG1hbnkgYml0cy4pICovCisgIC8qIFdlIGZhaWwgdG8gZG8gc28gb25seSBpZiB3ZSBoaXQgYSBtYXJrZXIgb3IgYXJlIGZvcmNlZCB0byBzdXNwZW5kLiAqLworCisgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7ICAgICAgLyogY2Fubm90IGFkdmFuY2UgcGFzdCBhIG1hcmtlciAqLworICAgIHdoaWxlIChiaXRzX2xlZnQgPCBNSU5fR0VUX0JJVFMpIHsKKyAgICAgIHJlZ2lzdGVyIGludCBjOworCisgICAgICAvKiBBdHRlbXB0IHRvIHJlYWQgYSBieXRlICovCisgICAgICBpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDApIHsKKyAgICAgICAgaWYgKCEoKmNpbmZvLT5zcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKQorICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgbmV4dF9pbnB1dF9ieXRlID0gY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlOworICAgICAgICBieXRlc19pbl9idWZmZXIgPSBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXI7CisgICAgICB9CisgICAgICBieXRlc19pbl9idWZmZXItLTsKKyAgICAgIGMgPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsKKworICAgICAgLyogSWYgaXQncyAweEZGLCBjaGVjayBhbmQgZGlzY2FyZCBzdHVmZmVkIHplcm8gYnl0ZSAqLworICAgICAgaWYgKGMgPT0gMHhGRikgeworICAgICAgICAvKiBMb29wIGhlcmUgdG8gZGlzY2FyZCBhbnkgcGFkZGluZyBGRidzIG9uIHRlcm1pbmF0aW5nIG1hcmtlciwKKyAgICAgICAgICogc28gdGhhdCB3ZSBjYW4gc2F2ZSBhIHZhbGlkIHVucmVhZF9tYXJrZXIgdmFsdWUuICBOT1RFOiB3ZSB3aWxsCisgICAgICAgICAqIGFjY2VwdCBtdWx0aXBsZSBGRidzIGZvbGxvd2VkIGJ5IGEgMCBhcyBtZWFuaW5nIGEgc2luZ2xlIEZGIGRhdGEKKyAgICAgICAgICogYnl0ZS4gIFRoaXMgZGF0YSBwYXR0ZXJuIGlzIG5vdCB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorICAgICAgICAgKi8KKyAgICAgICAgZG8geworICAgICAgICAgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCkgeworICAgICAgICAgICAgaWYgKCEoKmNpbmZvLT5zcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKQorICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICBuZXh0X2lucHV0X2J5dGUgPSBjaW5mby0+c3JjLT5uZXh0X2lucHV0X2J5dGU7CisgICAgICAgICAgICBieXRlc19pbl9idWZmZXIgPSBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXI7CisgICAgICAgICAgfQorICAgICAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOworICAgICAgICAgIGMgPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsKKyAgICAgICAgfSB3aGlsZSAoYyA9PSAweEZGKTsKKworICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgLyogRm91bmQgRkYvMDAsIHdoaWNoIHJlcHJlc2VudHMgYW4gRkYgZGF0YSBieXRlICovCisgICAgICAgICAgYyA9IDB4RkY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogT29wcywgaXQncyBhY3R1YWxseSBhIG1hcmtlciBpbmRpY2F0aW5nIGVuZCBvZiBjb21wcmVzc2VkIGRhdGEuCisgICAgICAgICAgICogU2F2ZSB0aGUgbWFya2VyIGNvZGUgZm9yIGxhdGVyIHVzZS4KKyAgICAgICAgICAgKiBGaW5lIHBvaW50OiBpdCBtaWdodCBhcHBlYXIgdGhhdCB3ZSBzaG91bGQgc2F2ZSB0aGUgbWFya2VyIGludG8KKyAgICAgICAgICAgKiBiaXRyZWFkIHdvcmtpbmcgc3RhdGUsIG5vdCBzdHJhaWdodCBpbnRvIHBlcm1hbmVudCBzdGF0ZS4gIEJ1dAorICAgICAgICAgICAqIG9uY2Ugd2UgaGF2ZSBoaXQgYSBtYXJrZXIsIHdlIGNhbm5vdCBuZWVkIHRvIHN1c3BlbmQgd2l0aGluIHRoZQorICAgICAgICAgICAqIGN1cnJlbnQgTUNVLCBiZWNhdXNlIHdlIHdpbGwgcmVhZCBubyBtb3JlIGJ5dGVzIGZyb20gdGhlIGRhdGEKKyAgICAgICAgICAgKiBzb3VyY2UuICBTbyBpdCBpcyBPSyB0byB1cGRhdGUgcGVybWFuZW50IHN0YXRlIHJpZ2h0IGF3YXkuCisgICAgICAgICAgICovCisgICAgICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOworICAgICAgICAgIC8qIFNlZSBpZiB3ZSBuZWVkIHRvIGluc2VydCBzb21lIGZha2UgemVybyBiaXRzLiAqLworICAgICAgICAgIGdvdG8gbm9fbW9yZV9ieXRlczsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBPSywgbG9hZCBjIGludG8gZ2V0X2J1ZmZlciAqLworICAgICAgZ2V0X2J1ZmZlciA9IChnZXRfYnVmZmVyIDw8IDgpIHwgYzsKKyAgICAgIGJpdHNfbGVmdCArPSA4OworICAgIH0gLyogZW5kIHdoaWxlICovCisgIH0gZWxzZSB7Citub19tb3JlX2J5dGVzOgorICAgIC8qIFdlIGdldCBoZXJlIGlmIHdlJ3ZlIHJlYWQgdGhlIG1hcmtlciB0aGF0IHRlcm1pbmF0ZXMgdGhlIGNvbXByZXNzZWQKKyAgICAgKiBkYXRhIHNlZ21lbnQuICBUaGVyZSBzaG91bGQgYmUgZW5vdWdoIGJpdHMgaW4gdGhlIGJ1ZmZlciByZWdpc3RlcgorICAgICAqIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3Q7IGlmIHNvLCBubyBwcm9ibGVtLgorICAgICAqLworICAgIGlmIChuYml0cyA+IGJpdHNfbGVmdCkgeworICAgICAgLyogVWgtb2guICBSZXBvcnQgY29ycnVwdGVkIGRhdGEgdG8gdXNlciBhbmQgc3R1ZmYgemVyb2VzIGludG8KKyAgICAgICAqIHRoZSBkYXRhIHN0cmVhbSwgc28gdGhhdCB3ZSBjYW4gcHJvZHVjZSBzb21lIGtpbmQgb2YgaW1hZ2UuCisgICAgICAgKiBXZSB1c2UgYSBub252b2xhdGlsZSBmbGFnIHRvIGVuc3VyZSB0aGF0IG9ubHkgb25lIHdhcm5pbmcgbWVzc2FnZQorICAgICAgICogYXBwZWFycyBwZXIgZGF0YSBzZWdtZW50LgorICAgICAgICovCisgICAgICBpZiAoIWNpbmZvLT5lbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSkgeworICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fSElUX01BUktFUik7CisgICAgICAgIGNpbmZvLT5lbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSA9IFRSVUU7CisgICAgICB9CisgICAgICAvKiBGaWxsIHRoZSBidWZmZXIgd2l0aCB6ZXJvIGJpdHMgKi8KKyAgICAgIGdldF9idWZmZXIgPDw9IE1JTl9HRVRfQklUUyAtIGJpdHNfbGVmdDsKKyAgICAgIGJpdHNfbGVmdCA9IE1JTl9HRVRfQklUUzsKKyAgICB9CisgIH0KKworICAvKiBVbmxvYWQgdGhlIGxvY2FsIHJlZ2lzdGVycyAqLworICBzdGF0ZS0+bmV4dF9pbnB1dF9ieXRlID0gbmV4dF9pbnB1dF9ieXRlOworICBzdGF0ZS0+Ynl0ZXNfaW5fYnVmZmVyID0gYnl0ZXNfaW5fYnVmZmVyOworICBzdGF0ZS0+Z2V0X2J1ZmZlciA9IGdldF9idWZmZXI7CisgIHN0YXRlLT5iaXRzX2xlZnQgPSBiaXRzX2xlZnQ7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyogTWFjcm8gdmVyc2lvbiBvZiB0aGUgYWJvdmUsIHdoaWNoIHBlcmZvcm1zIG11Y2ggYmV0dGVyIGJ1dCBkb2VzIG5vdAorICAgaGFuZGxlIG1hcmtlcnMuICBXZSBoYXZlIHRvIGhhbmQgb2ZmIGFueSBibG9ja3Mgd2l0aCBtYXJrZXJzIHRvIHRoZQorICAgc2xvd2VyIHJvdXRpbmVzLiAqLworCisjZGVmaW5lIEdFVF9CWVRFIHsgXAorICByZWdpc3RlciBpbnQgYzAsIGMxOyBcCisgIGMwID0gR0VUSk9DVEVUKCpidWZmZXIrKyk7IFwKKyAgYzEgPSBHRVRKT0NURVQoKmJ1ZmZlcik7IFwKKyAgLyogUHJlLWV4ZWN1dGUgbW9zdCBjb21tb24gY2FzZSAqLyBcCisgIGdldF9idWZmZXIgPSAoZ2V0X2J1ZmZlciA8PCA4KSB8IGMwOyBcCisgIGJpdHNfbGVmdCArPSA4OyBcCisgIGlmIChjMCA9PSAweEZGKSB7IFwKKyAgICAvKiBQcmUtZXhlY3V0ZSBjYXNlIG9mIEZGLzAwLCB3aGljaCByZXByZXNlbnRzIGFuIEZGIGRhdGEgYnl0ZSAqLyBcCisgICAgYnVmZmVyKys7IFwKKyAgICBpZiAoYzEgIT0gMCkgeyBcCisgICAgICAvKiBPb3BzLCBpdCdzIGFjdHVhbGx5IGEgbWFya2VyIGluZGljYXRpbmcgZW5kIG9mIGNvbXByZXNzZWQgZGF0YS4gKi8gXAorICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjMTsgXAorICAgICAgLyogQmFjayBvdXQgcHJlLWV4ZWN1dGlvbiBhbmQgZmlsbCB0aGUgYnVmZmVyIHdpdGggemVybyBiaXRzICovIFwKKyAgICAgIGJ1ZmZlciAtPSAyOyBcCisgICAgICBnZXRfYnVmZmVyICY9IH4weEZGOyBcCisgICAgfSBcCisgIH0gXAorfQorCisjaWYgU0laRU9GX1NJWkVfVCA9PSA4IHx8IGRlZmluZWQoX1dJTjY0KQorCisvKiBQcmUtZmV0Y2ggNDggYnl0ZXMsIGJlY2F1c2UgdGhlIGhvbGRpbmcgcmVnaXN0ZXIgaXMgNjQtYml0ICovCisjZGVmaW5lIEZJTExfQklUX0JVRkZFUl9GQVNUIFwKKyAgaWYgKGJpdHNfbGVmdCA8PSAxNikgeyBcCisgICAgR0VUX0JZVEUgR0VUX0JZVEUgR0VUX0JZVEUgR0VUX0JZVEUgR0VUX0JZVEUgR0VUX0JZVEUgXAorICB9CisKKyNlbHNlCisKKy8qIFByZS1mZXRjaCAxNiBieXRlcywgYmVjYXVzZSB0aGUgaG9sZGluZyByZWdpc3RlciBpcyAzMi1iaXQgKi8KKyNkZWZpbmUgRklMTF9CSVRfQlVGRkVSX0ZBU1QgXAorICBpZiAoYml0c19sZWZ0IDw9IDE2KSB7IFwKKyAgICBHRVRfQllURSBHRVRfQllURSBcCisgIH0KKworI2VuZGlmCisKKworLyoKKyAqIE91dC1vZi1saW5lIGNvZGUgZm9yIEh1ZmZtYW4gY29kZSBkZWNvZGluZy4KKyAqIFNlZSBqZGh1ZmYuaCBmb3IgaW5mbyBhYm91dCB1c2FnZS4KKyAqLworCitHTE9CQUwoaW50KQoranBlZ19odWZmX2RlY29kZShiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKKyAgICAgICAgICAgICAgICAgZF9kZXJpdmVkX3RibCAqaHRibCwgaW50IG1pbl9iaXRzKQoreworICByZWdpc3RlciBpbnQgbCA9IG1pbl9iaXRzOworICByZWdpc3RlciBKTE9ORyBjb2RlOworCisgIC8qIEhVRkZfREVDT0RFIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlIGNvZGUgaXMgYXQgbGVhc3QgbWluX2JpdHMgKi8KKyAgLyogYml0cyBsb25nLCBzbyBmZXRjaCB0aGF0IG1hbnkgYml0cyBpbiBvbmUgc3dvb3AuICovCisKKyAgQ0hFQ0tfQklUX0JVRkZFUigqc3RhdGUsIGwsIHJldHVybiAtMSk7CisgIGNvZGUgPSBHRVRfQklUUyhsKTsKKworICAvKiBDb2xsZWN0IHRoZSByZXN0IG9mIHRoZSBIdWZmbWFuIGNvZGUgb25lIGJpdCBhdCBhIHRpbWUuICovCisgIC8qIFRoaXMgaXMgcGVyIEZpZ3VyZSBGLjE2IGluIHRoZSBKUEVHIHNwZWMuICovCisKKyAgd2hpbGUgKGNvZGUgPiBodGJsLT5tYXhjb2RlW2xdKSB7CisgICAgY29kZSA8PD0gMTsKKyAgICBDSEVDS19CSVRfQlVGRkVSKCpzdGF0ZSwgMSwgcmV0dXJuIC0xKTsKKyAgICBjb2RlIHw9IEdFVF9CSVRTKDEpOworICAgIGwrKzsKKyAgfQorCisgIC8qIFVubG9hZCB0aGUgbG9jYWwgcmVnaXN0ZXJzICovCisgIHN0YXRlLT5nZXRfYnVmZmVyID0gZ2V0X2J1ZmZlcjsKKyAgc3RhdGUtPmJpdHNfbGVmdCA9IGJpdHNfbGVmdDsKKworICAvKiBXaXRoIGdhcmJhZ2UgaW5wdXQgd2UgbWF5IHJlYWNoIHRoZSBzZW50aW5lbCB2YWx1ZSBsID0gMTcuICovCisKKyAgaWYgKGwgPiAxNikgeworICAgIFdBUk5NUyhzdGF0ZS0+Y2luZm8sIEpXUk5fSFVGRl9CQURfQ09ERSk7CisgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIGZha2UgYSB6ZXJvIGFzIHRoZSBzYWZlc3QgcmVzdWx0ICovCisgIH0KKworICByZXR1cm4gaHRibC0+cHViLT5odWZmdmFsWyhpbnQpKGNvZGUgKyBodGJsLT52YWxvZmZzZXRbbF0pXTsKK30KKworCisvKgorICogRmlndXJlIEYuMTI6IGV4dGVuZCBzaWduIGJpdC4KKyAqIE9uIHNvbWUgbWFjaGluZXMsIGEgc2hpZnQgYW5kIGFkZCB3aWxsIGJlIGZhc3RlciB0aGFuIGEgdGFibGUgbG9va3VwLgorICovCisKKyNkZWZpbmUgQVZPSURfVEFCTEVTCisjaWZkZWYgQVZPSURfVEFCTEVTCisKKyNkZWZpbmUgTkVHXzEgICgodW5zaWduZWQgaW50KS0xKQorI2RlZmluZSBIVUZGX0VYVEVORCh4LCBzKSBcCisgICgoeCkgKyAoKCgoeCkgLSAoMSA8PCAoKHMpIC0gMSkpKSA+PiAzMSkgJiAoKChORUdfMSkgPDwgKHMpKSArIDEpKSkKKworI2Vsc2UKKworI2RlZmluZSBIVUZGX0VYVEVORCh4LCBzKSBcCisgICgoeCkgPCBleHRlbmRfdGVzdFtzXSA/ICh4KSArIGV4dGVuZF9vZmZzZXRbc10gOiAoeCkpCisKK3N0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX3Rlc3RbMTZdID0geyAgIC8qIGVudHJ5IG4gaXMgMioqKG4tMSkgKi8KKyAgMCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsCisgIDB4MDEwMCwgMHgwMjAwLCAweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMAorfTsKKworc3RhdGljIGNvbnN0IGludCBleHRlbmRfb2Zmc2V0WzE2XSA9IHsgLyogZW50cnkgbiBpcyAoLTEgPDwgbikgKyAxICovCisgIDAsICgoLTEpIDw8IDEpICsgMSwgKCgtMSkgPDwgMikgKyAxLCAoKC0xKSA8PCAzKSArIDEsICgoLTEpIDw8IDQpICsgMSwKKyAgKCgtMSkgPDwgNSkgKyAxLCAoKC0xKSA8PCA2KSArIDEsICgoLTEpIDw8IDcpICsgMSwgKCgtMSkgPDwgOCkgKyAxLAorICAoKC0xKSA8PCA5KSArIDEsICgoLTEpIDw8IDEwKSArIDEsICgoLTEpIDw8IDExKSArIDEsICgoLTEpIDw8IDEyKSArIDEsCisgICgoLTEpIDw8IDEzKSArIDEsICgoLTEpIDw8IDE0KSArIDEsICgoLTEpIDw8IDE1KSArIDEKK307CisKKyNlbmRpZiAvKiBBVk9JRF9UQUJMRVMgKi8KKworCisvKgorICogQ2hlY2sgZm9yIGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIGRlY29kZXIuCisgKiBSZXR1cm5zIEZBTFNFIGlmIG11c3Qgc3VzcGVuZC4KKyAqLworCitMT0NBTChib29sZWFuKQorcHJvY2Vzc19yZXN0YXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKWNpbmZvLT5lbnRyb3B5OworICBpbnQgY2k7CisKKyAgLyogVGhyb3cgYXdheSBhbnkgdW51c2VkIGJpdHMgcmVtYWluaW5nIGluIGJpdCBidWZmZXI7ICovCisgIC8qIGluY2x1ZGUgYW55IGZ1bGwgYnl0ZXMgaW4gbmV4dF9tYXJrZXIncyBjb3VudCBvZiBkaXNjYXJkZWQgYnl0ZXMgKi8KKyAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICs9IGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCAvIDg7CisgIGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCA9IDA7CisKKyAgLyogQWR2YW5jZSBwYXN0IHRoZSBSU1RuIG1hcmtlciAqLworICBpZiAoISgqY2luZm8tPm1hcmtlci0+cmVhZF9yZXN0YXJ0X21hcmtlcikgKGNpbmZvKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQorICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisKKyAgLyogUmVzZXQgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisKKyAgLyogUmVzZXQgb3V0LW9mLWRhdGEgZmxhZywgdW5sZXNzIHJlYWRfcmVzdGFydF9tYXJrZXIgbGVmdCB1cyBzbWFjayB1cAorICAgKiBhZ2FpbnN0IGEgbWFya2VyLiAgSW4gdGhhdCBjYXNlIHdlIHdpbGwgZW5kIHVwIHRyZWF0aW5nIHRoZSBuZXh0IGRhdGEKKyAgICogc2VnbWVudCBhcyBlbXB0eSwgYW5kIHdlIGNhbiBhdm9pZCBwcm9kdWNpbmcgYm9ndXMgb3V0cHV0IHBpeGVscyBieQorICAgKiBsZWF2aW5nIHRoZSBmbGFnIHNldC4KKyAgICovCisgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKQorICAgIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorCisKK0xPQ0FMKGJvb2xlYW4pCitkZWNvZGVfbWN1X3Nsb3coal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIEJJVFJFQURfU1RBVEVfVkFSUzsKKyAgaW50IGJsa247CisgIHNhdmFibGVfc3RhdGUgc3RhdGU7CisgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KKworICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLCBlbnRyb3B5LT5iaXRzdGF0ZSk7CisgIEFTU0lHTl9TVEFURShzdGF0ZSwgZW50cm9weS0+c2F2ZWQpOworCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgSkJMT0NLUk9XIGJsb2NrID0gTUNVX2RhdGEgPyBNQ1VfZGF0YVtibGtuXSA6IE5VTEw7CisgICAgZF9kZXJpdmVkX3RibCAqZGN0YmwgPSBlbnRyb3B5LT5kY19jdXJfdGJsc1tibGtuXTsKKyAgICBkX2Rlcml2ZWRfdGJsICphY3RibCA9IGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dOworICAgIHJlZ2lzdGVyIGludCBzLCBrLCByOworCisgICAgLyogRGVjb2RlIGEgc2luZ2xlIGJsb2NrJ3Mgd29ydGggb2YgY29lZmZpY2llbnRzICovCisKKyAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLworICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBkY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOworICAgIGlmIChzKSB7CisgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworICAgICAgciA9IEdFVF9CSVRTKHMpOworICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOworICAgIH0KKworICAgIGlmIChlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0pIHsKKyAgICAgIC8qIENvbnZlcnQgREMgZGlmZmVyZW5jZSB0byBhY3R1YWwgdmFsdWUsIHVwZGF0ZSBsYXN0X2RjX3ZhbCAqLworICAgICAgaW50IGNpID0gY2luZm8tPk1DVV9tZW1iZXJzaGlwW2Jsa25dOworICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07CisgICAgICBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOworICAgICAgaWYgKGJsb2NrKSB7CisgICAgICAgIC8qIE91dHB1dCB0aGUgREMgY29lZmZpY2llbnQgKGFzc3VtZXMganBlZ19uYXR1cmFsX29yZGVyWzBdID0gMCkgKi8KKyAgICAgICAgKCpibG9jaylbMF0gPSAoSkNPRUYpczsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZW50cm9weS0+YWNfbmVlZGVkW2Jsa25dICYmIGJsb2NrKSB7CisKKyAgICAgIC8qIFNlY3Rpb24gRi4yLjIuMjogZGVjb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgKi8KKyAgICAgIC8qIFNpbmNlIHplcm9lcyBhcmUgc2tpcHBlZCwgb3V0cHV0IGFyZWEgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZWhhbmQgKi8KKyAgICAgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisgICAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBhY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDIpOworCisgICAgICAgIHIgPSBzID4+IDQ7CisgICAgICAgIHMgJj0gMTU7CisKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBrICs9IHI7CisgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKyAgICAgICAgICByID0gR0VUX0JJVFMocyk7CisgICAgICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOworICAgICAgICAgIC8qIE91dHB1dCBjb2VmZmljaWVudCBpbiBuYXR1cmFsIChkZXppZ3phZ2dlZCkgb3JkZXIuCisgICAgICAgICAgICogTm90ZTogdGhlIGV4dHJhIGVudHJpZXMgaW4ganBlZ19uYXR1cmFsX29yZGVyW10gd2lsbCBzYXZlIHVzCisgICAgICAgICAgICogaWYgayA+PSBEQ1RTSVpFMiwgd2hpY2ggY291bGQgaGFwcGVuIGlmIHRoZSBkYXRhIGlzIGNvcnJ1cHRlZC4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKXM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHIgIT0gMTUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBrICs9IDE1OworICAgICAgICB9CisgICAgICB9CisKKyAgICB9IGVsc2UgeworCisgICAgICAvKiBTZWN0aW9uIEYuMi4yLjI6IGRlY29kZSB0aGUgQUMgY29lZmZpY2llbnRzICovCisgICAgICAvKiBJbiB0aGlzIHBhdGggd2UganVzdCBkaXNjYXJkIHRoZSB2YWx1ZXMgKi8KKyAgICAgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisgICAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBhY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDMpOworCisgICAgICAgIHIgPSBzID4+IDQ7CisgICAgICAgIHMgJj0gMTU7CisKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBrICs9IHI7CisgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKyAgICAgICAgICBEUk9QX0JJVFMocyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHIgIT0gMTUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBrICs9IDE1OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbywgZW50cm9weS0+Yml0c3RhdGUpOworICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworTE9DQUwoYm9vbGVhbikKK2RlY29kZV9tY3VfZmFzdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgQklUUkVBRF9TVEFURV9WQVJTOworICBKT0NURVQgKmJ1ZmZlcjsKKyAgaW50IGJsa247CisgIHNhdmFibGVfc3RhdGUgc3RhdGU7CisgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KKworICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLCBlbnRyb3B5LT5iaXRzdGF0ZSk7CisgIGJ1ZmZlciA9IChKT0NURVQgKilicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGU7CisgIEFTU0lHTl9TVEFURShzdGF0ZSwgZW50cm9weS0+c2F2ZWQpOworCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgSkJMT0NLUk9XIGJsb2NrID0gTUNVX2RhdGEgPyBNQ1VfZGF0YVtibGtuXSA6IE5VTEw7CisgICAgZF9kZXJpdmVkX3RibCAqZGN0YmwgPSBlbnRyb3B5LT5kY19jdXJfdGJsc1tibGtuXTsKKyAgICBkX2Rlcml2ZWRfdGJsICphY3RibCA9IGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dOworICAgIHJlZ2lzdGVyIGludCBzLCBrLCByLCBsOworCisgICAgSFVGRl9ERUNPREVfRkFTVChzLCBsLCBkY3RibCk7CisgICAgaWYgKHMpIHsKKyAgICAgIEZJTExfQklUX0JVRkZFUl9GQVNUCisgICAgICByID0gR0VUX0JJVFMocyk7CisgICAgICBzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgfQorCisgICAgaWYgKGVudHJvcHktPmRjX25lZWRlZFtibGtuXSkgeworICAgICAgaW50IGNpID0gY2luZm8tPk1DVV9tZW1iZXJzaGlwW2Jsa25dOworICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07CisgICAgICBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOworICAgICAgaWYgKGJsb2NrKQorICAgICAgICAoKmJsb2NrKVswXSA9IChKQ09FRilzOworICAgIH0KKworICAgIGlmIChlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0gJiYgYmxvY2spIHsKKworICAgICAgZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKKyAgICAgICAgSFVGRl9ERUNPREVfRkFTVChzLCBsLCBhY3RibCk7CisgICAgICAgIHIgPSBzID4+IDQ7CisgICAgICAgIHMgJj0gMTU7CisKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBrICs9IHI7CisgICAgICAgICAgRklMTF9CSVRfQlVGRkVSX0ZBU1QKKyAgICAgICAgICByID0gR0VUX0JJVFMocyk7CisgICAgICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOworICAgICAgICAgICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAociAhPSAxNSkgYnJlYWs7CisgICAgICAgICAgayArPSAxNTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgfSBlbHNlIHsKKworICAgICAgZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKKyAgICAgICAgSFVGRl9ERUNPREVfRkFTVChzLCBsLCBhY3RibCk7CisgICAgICAgIHIgPSBzID4+IDQ7CisgICAgICAgIHMgJj0gMTU7CisKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBrICs9IHI7CisgICAgICAgICAgRklMTF9CSVRfQlVGRkVSX0ZBU1QKKyAgICAgICAgICBEUk9QX0JJVFMocyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHIgIT0gMTUpIGJyZWFrOworICAgICAgICAgIGsgKz0gMTU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgIT0gMCkgeworICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgLT0gKGJ1ZmZlciAtIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSk7CisgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IGJ1ZmZlcjsKKyAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLCBlbnRyb3B5LT5iaXRzdGF0ZSk7CisgIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUpOworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRGVjb2RlIGFuZCByZXR1cm4gb25lIE1DVSdzIHdvcnRoIG9mIEh1ZmZtYW4tY29tcHJlc3NlZCBjb2VmZmljaWVudHMuCisgKiBUaGUgY29lZmZpY2llbnRzIGFyZSByZW9yZGVyZWQgZnJvbSB6aWd6YWcgb3JkZXIgaW50byBuYXR1cmFsIGFycmF5IG9yZGVyLAorICogYnV0IGFyZSBub3QgZGVxdWFudGl6ZWQuCisgKgorICogVGhlIGkndGggYmxvY2sgb2YgdGhlIE1DVSBpcyBzdG9yZWQgaW50byB0aGUgYmxvY2sgcG9pbnRlZCB0byBieQorICogTUNVX2RhdGFbaV0uICBXRSBBU1NVTUUgVEhJUyBBUkVBIEhBUyBCRUVOIFpFUk9FRCBCWSBUSEUgQ0FMTEVSLgorICogKFdob2xlc2FsZSB6ZXJvaW5nIGlzIHVzdWFsbHkgYSBsaXR0bGUgZmFzdGVyIHRoYW4gcmV0YWlsLi4uKQorICoKKyAqIFJldHVybnMgRkFMU0UgaWYgZGF0YSBzb3VyY2UgcmVxdWVzdGVkIHN1c3BlbnNpb24uICBJbiB0aGF0IGNhc2Ugbm8KKyAqIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gcGVybWFuZW50IHN0YXRlLiAgKEV4Y2VwdGlvbjogc29tZSBvdXRwdXQKKyAqIGNvZWZmaWNpZW50cyBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQuICBUaGlzIGlzIGhhcm1sZXNzIGZvcgorICogdGhpcyBtb2R1bGUsIHNpbmNlIHdlJ2xsIGp1c3QgcmUtYXNzaWduIHRoZW0gb24gdGhlIG5leHQgY2FsbC4pCisgKi8KKworI2RlZmluZSBCVUZTSVpFICAoRENUU0laRTIgKiA4KQorCitNRVRIT0RERUYoYm9vbGVhbikKK2RlY29kZV9tY3Uoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCB1c2VmYXN0ID0gMTsKKworICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGlmICghcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIHVzZWZhc3QgPSAwOworICB9CisKKyAgaWYgKGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA8IEJVRlNJWkUgKiAoc2l6ZV90KWNpbmZvLT5ibG9ja3NfaW5fTUNVIHx8CisgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciAhPSAwKQorICAgIHVzZWZhc3QgPSAwOworCisgIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuCisgICAqIFRoaXMgd2F5LCB3ZSByZXR1cm4gdW5pZm9ybSBncmF5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZWdtZW50LgorICAgKi8KKyAgaWYgKCFlbnRyb3B5LT5wdWIuaW5zdWZmaWNpZW50X2RhdGEpIHsKKworICAgIGlmICh1c2VmYXN0KSB7CisgICAgICBpZiAoIWRlY29kZV9tY3VfZmFzdChjaW5mbywgTUNVX2RhdGEpKSBnb3RvIHVzZV9zbG93OworICAgIH0gZWxzZSB7Cit1c2Vfc2xvdzoKKyAgICAgIGlmICghZGVjb2RlX21jdV9zbG93KGNpbmZvLCBNQ1VfZGF0YSkpIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgfQorCisgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2h1ZmZfZGVjb2RlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHk7CisgIGludCBpOworCisgIC8qIE1vdGlvbiBKUEVHIGZyYW1lcyB0eXBpY2FsbHkgZG8gbm90IGluY2x1ZGUgdGhlIEh1ZmZtYW4gdGFibGVzIGlmIHRoZXkKKyAgICAgYXJlIHRoZSBkZWZhdWx0IHRhYmxlcy4gIFRodXMsIGlmIHRoZSB0YWJsZXMgYXJlIG5vdCBzZXQgYnkgdGhlIHRpbWUKKyAgICAgdGhlIEh1ZmZtYW4gZGVjb2RlciBpcyBpbml0aWFsaXplZCAodXN1YWxseSB3aXRoaW4gdGhlIGJvZHkgb2YKKyAgICAganBlZ19zdGFydF9kZWNvbXByZXNzKCkpLCB3ZSBzZXQgdGhlbSB0byBkZWZhdWx0IHZhbHVlcy4gKi8KKyAgc3RkX2h1ZmZfdGFibGVzKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihodWZmX2VudHJvcHlfZGVjb2RlcikpOworICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKillbnRyb3B5OworICBlbnRyb3B5LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfaHVmZl9kZWNvZGVyOworICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3U7CisKKyAgLyogTWFyayB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgeworICAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tpXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tpXSA9IE5VTEw7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkaHVmZi5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRodWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE4ZDkwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkaHVmZi5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogamRodWZmLmgKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExLCAyMDE1LTIwMTYsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcworICogdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIHNlcXVlbnRpYWwgZGVjb2RlciAoamRodWZmLmMpIGFuZCB0aGUKKyAqIHByb2dyZXNzaXZlIGRlY29kZXIgKGpkcGh1ZmYuYykuICBObyBvdGhlciBtb2R1bGVzIG5lZWQgdG8gc2VlIHRoZXNlLgorICovCisKKyNpbmNsdWRlICJqY29uZmlnaW50LmgiCisKKworLyogRGVyaXZlZCBkYXRhIGNvbnN0cnVjdGVkIGZvciBlYWNoIEh1ZmZtYW4gdGFibGUgKi8KKworI2RlZmluZSBIVUZGX0xPT0tBSEVBRCAgOCAgICAgICAvKiAjIG9mIGJpdHMgb2YgbG9va2FoZWFkICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogQmFzaWMgdGFibGVzOiAoZWxlbWVudCBbMF0gb2YgZWFjaCBhcnJheSBpcyB1bnVzZWQpICovCisgIEpMT05HIG1heGNvZGVbMThdOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSBvZiBsZW5ndGggayAoLTEgaWYgbm9uZSkgKi8KKyAgLyogKG1heGNvZGVbMTddIGlzIGEgc2VudGluZWwgdG8gZW5zdXJlIGpwZWdfaHVmZl9kZWNvZGUgdGVybWluYXRlcykgKi8KKyAgSkxPTkcgdmFsb2Zmc2V0WzE4XTsgICAgICAgICAgLyogaHVmZnZhbFtdIG9mZnNldCBmb3IgY29kZXMgb2YgbGVuZ3RoIGsgKi8KKyAgLyogdmFsb2Zmc2V0W2tdID0gaHVmZnZhbFtdIGluZGV4IG9mIDFzdCBzeW1ib2wgb2YgY29kZSBsZW5ndGggaywgbGVzcworICAgKiB0aGUgc21hbGxlc3QgY29kZSBvZiBsZW5ndGggazsgc28gZ2l2ZW4gYSBjb2RlIG9mIGxlbmd0aCBrLCB0aGUKKyAgICogY29ycmVzcG9uZGluZyBzeW1ib2wgaXMgaHVmZnZhbFtjb2RlICsgdmFsb2Zmc2V0W2tdXQorICAgKi8KKworICAvKiBMaW5rIHRvIHB1YmxpYyBIdWZmbWFuIHRhYmxlIChuZWVkZWQgb25seSBpbiBqcGVnX2h1ZmZfZGVjb2RlKSAqLworICBKSFVGRl9UQkwgKnB1YjsKKworICAvKiBMb29rYWhlYWQgdGFibGU6IGluZGV4ZWQgYnkgdGhlIG5leHQgSFVGRl9MT09LQUhFQUQgYml0cyBvZgorICAgKiB0aGUgaW5wdXQgZGF0YSBzdHJlYW0uICBJZiB0aGUgbmV4dCBIdWZmbWFuIGNvZGUgaXMgbm8gbW9yZQorICAgKiB0aGFuIEhVRkZfTE9PS0FIRUFEIGJpdHMgbG9uZywgd2UgY2FuIG9idGFpbiBpdHMgbGVuZ3RoIGFuZAorICAgKiB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgZGlyZWN0bHkgZnJvbSB0aGlzIHRhYmxlcy4KKyAgICoKKyAgICogVGhlIGxvd2VyIDggYml0cyBvZiBlYWNoIHRhYmxlIGVudHJ5IGNvbnRhaW4gdGhlIG51bWJlciBvZgorICAgKiBiaXRzIGluIHRoZSBjb3JyZXNwb25kaW5nIEh1ZmZtYW4gY29kZSwgb3IgSFVGRl9MT09LQUhFQUQgKyAxCisgICAqIGlmIHRvbyBsb25nLiAgVGhlIG5leHQgOCBiaXRzIG9mIGVhY2ggZW50cnkgY29udGFpbiB0aGUKKyAgICogc3ltYm9sLgorICAgKi8KKyAgaW50IGxvb2t1cFsxIDw8IEhVRkZfTE9PS0FIRUFEXTsKK30gZF9kZXJpdmVkX3RibDsKKworLyogRXhwYW5kIGEgSHVmZm1hbiB0YWJsZSBkZWZpbml0aW9uIGludG8gdGhlIGRlcml2ZWQgZm9ybWF0ICovCitFWFRFUk4odm9pZCkganBlZ19tYWtlX2RfZGVyaXZlZF90Ymwoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc0RDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YmxubywgZF9kZXJpdmVkX3RibCAqKnBkdGJsKTsKKworCisvKgorICogRmV0Y2hpbmcgdGhlIG5leHQgTiBiaXRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBpcyBhIHRpbWUtY3JpdGljYWwgb3BlcmF0aW9uCisgKiBmb3IgdGhlIEh1ZmZtYW4gZGVjb2RlcnMuICBXZSBpbXBsZW1lbnQgaXQgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGlubGluZQorICogbWFjcm9zIGFuZCBvdXQtb2YtbGluZSBzdWJyb3V0aW5lcy4gIE5vdGUgdGhhdCBOICh0aGUgbnVtYmVyIG9mIGJpdHMKKyAqIGRlbWFuZGVkIGF0IG9uZSB0aW1lKSBuZXZlciBleGNlZWRzIDE1IGZvciBKUEVHIHVzZS4KKyAqCisgKiBXZSByZWFkIHNvdXJjZSBieXRlcyBpbnRvIGdldF9idWZmZXIgYW5kIGRvbGUgb3V0IGJpdHMgYXMgbmVlZGVkLgorICogSWYgZ2V0X2J1ZmZlciBhbHJlYWR5IGNvbnRhaW5zIGVub3VnaCBiaXRzLCB0aGV5IGFyZSBmZXRjaGVkIGluLWxpbmUKKyAqIGJ5IHRoZSBtYWNyb3MgQ0hFQ0tfQklUX0JVRkZFUiBhbmQgR0VUX0JJVFMuICBXaGVuIHRoZXJlIGFyZW4ndCBlbm91Z2gKKyAqIGJpdHMsIGpwZWdfZmlsbF9iaXRfYnVmZmVyIGlzIGNhbGxlZDsgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbGwgZ2V0X2J1ZmZlcgorICogYXMgZnVsbCBhcyBwb3NzaWJsZSAobm90IGp1c3QgdG8gdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZDsgdGhpcworICogcHJlZmV0Y2hpbmcgcmVkdWNlcyB0aGUgb3ZlcmhlYWQgY29zdCBvZiBjYWxsaW5nIGpwZWdfZmlsbF9iaXRfYnVmZmVyKS4KKyAqIE5vdGUgdGhhdCBqcGVnX2ZpbGxfYml0X2J1ZmZlciBtYXkgcmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHN1c3BlbnNpb24uCisgKiBPbiBUUlVFIHJldHVybiwganBlZ19maWxsX2JpdF9idWZmZXIgZ3VhcmFudGVlcyB0aGF0IGdldF9idWZmZXIgY29udGFpbnMKKyAqIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJpdHMgLS0tIGR1bW15IHplcm9lcyBhcmUgaW5zZXJ0ZWQgaWYKKyAqIG5lY2Vzc2FyeS4KKyAqLworCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChTSVpFT0ZfU0laRV9UKQorI2Vycm9yIENhbm5vdCBkZXRlcm1pbmUgd29yZCBzaXplCisjZW5kaWYKKworI2lmIFNJWkVPRl9TSVpFX1QgPT0gOCB8fCBkZWZpbmVkKF9XSU42NCkKKwordHlwZWRlZiBzaXplX3QgYml0X2J1Zl90eXBlOyAgICAgICAgICAgIC8qIHR5cGUgb2YgYml0LWV4dHJhY3Rpb24gYnVmZmVyICovCisjZGVmaW5lIEJJVF9CVUZfU0laRSAgNjQgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgaW4gYml0cyAqLworCisjZWxzZQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYml0X2J1Zl90eXBlOyAgICAgLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyNkZWZpbmUgQklUX0JVRl9TSVpFICAzMiAgICAgICAgICAgICAgICAvKiBzaXplIG9mIGJ1ZmZlciBpbiBiaXRzICovCisKKyNlbmRpZgorCisvKiBJZiBsb25nIGlzID4gMzIgYml0cyBvbiB5b3VyIG1hY2hpbmUsIGFuZCBzaGlmdGluZy9tYXNraW5nIGxvbmdzIGlzCisgKiByZWFzb25hYmx5IGZhc3QsIG1ha2luZyBiaXRfYnVmX3R5cGUgYmUgbG9uZyBhbmQgc2V0dGluZyBCSVRfQlVGX1NJWkUKKyAqIGFwcHJvcHJpYXRlbHkgc2hvdWxkIGJlIGEgd2luLiAgVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCBkZWZpbmUgdGhlIHNpemUKKyAqIHdpdGggc29tZXRoaW5nIGxpa2UgICNkZWZpbmUgQklUX0JVRl9TSVpFIChzaXplb2YoYml0X2J1Zl90eXBlKSo4KQorICogYmVjYXVzZSBub3QgYWxsIG1hY2hpbmVzIG1lYXN1cmUgc2l6ZW9mIGluIDgtYml0IGJ5dGVzLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgLyogQml0cmVhZGluZyBzdGF0ZSBzYXZlZCBhY3Jvc3MgTUNVcyAqLworICBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlcjsgICAgICAvKiBjdXJyZW50IGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLworICBpbnQgYml0c19sZWZ0OyAgICAgICAgICAgICAgICAvKiAjIG9mIHVudXNlZCBiaXRzIGluIGl0ICovCit9IGJpdHJlYWRfcGVybV9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAvKiBCaXRyZWFkaW5nIHdvcmtpbmcgc3RhdGUgd2l0aGluIGFuIE1DVSAqLworICAvKiBDdXJyZW50IGRhdGEgc291cmNlIGxvY2F0aW9uICovCisgIC8qIFdlIG5lZWQgYSBjb3B5LCByYXRoZXIgdGhhbiBtdW5naW5nIHRoZSBvcmlnaW5hbCwgaW4gY2FzZSBvZiBzdXNwZW5zaW9uICovCisgIGNvbnN0IEpPQ1RFVCAqbmV4dF9pbnB1dF9ieXRlOyAvKiA9PiBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIHNvdXJjZSAqLworICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyOyAgICAgICAvKiAjIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBzb3VyY2UgYnVmZmVyICovCisgIC8qIEJpdCBpbnB1dCBidWZmZXIgLS0tIG5vdGUgdGhlc2UgdmFsdWVzIGFyZSBrZXB0IGluIHJlZ2lzdGVyIHZhcmlhYmxlcywKKyAgICogbm90IGluIHRoaXMgc3RydWN0LCBpbnNpZGUgdGhlIGlubmVyIGxvb3BzLgorICAgKi8KKyAgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7ICAgICAgLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyAgaW50IGJpdHNfbGVmdDsgICAgICAgICAgICAgICAgLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLworICAvKiBQb2ludGVyIG5lZWRlZCBieSBqcGVnX2ZpbGxfYml0X2J1ZmZlci4gKi8KKyAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsgICAgICAgLyogYmFjayBsaW5rIHRvIGRlY29tcHJlc3MgbWFzdGVyIHJlY29yZCAqLworfSBiaXRyZWFkX3dvcmtpbmdfc3RhdGU7CisKKy8qIE1hY3JvcyB0byBkZWNsYXJlIGFuZCBsb2FkL3NhdmUgYml0cmVhZCBsb2NhbCB2YXJpYWJsZXMuICovCisjZGVmaW5lIEJJVFJFQURfU1RBVEVfVkFSUyBcCisgIHJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOyBcCisgIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQ7IFwKKyAgYml0cmVhZF93b3JraW5nX3N0YXRlIGJyX3N0YXRlCisKKyNkZWZpbmUgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvcCwgcGVybXN0YXRlKSBcCisgIGJyX3N0YXRlLmNpbmZvID0gY2luZm9wOyBcCisgIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IGNpbmZvcC0+c3JjLT5uZXh0X2lucHV0X2J5dGU7IFwKKyAgYnJfc3RhdGUuYnl0ZXNfaW5fYnVmZmVyID0gY2luZm9wLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsgXAorICBnZXRfYnVmZmVyID0gcGVybXN0YXRlLmdldF9idWZmZXI7IFwKKyAgYml0c19sZWZ0ID0gcGVybXN0YXRlLmJpdHNfbGVmdDsKKworI2RlZmluZSBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm9wLCBwZXJtc3RhdGUpIFwKKyAgY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsgXAorICBjaW5mb3AtPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gYnJfc3RhdGUuYnl0ZXNfaW5fYnVmZmVyOyBcCisgIHBlcm1zdGF0ZS5nZXRfYnVmZmVyID0gZ2V0X2J1ZmZlcjsgXAorICBwZXJtc3RhdGUuYml0c19sZWZ0ID0gYml0c19sZWZ0CisKKy8qCisgKiBUaGVzZSBtYWNyb3MgcHJvdmlkZSB0aGUgaW4tbGluZSBwb3J0aW9uIG9mIGJpdCBmZXRjaGluZy4KKyAqIFVzZSBDSEVDS19CSVRfQlVGRkVSIHRvIGVuc3VyZSB0aGVyZSBhcmUgTiBiaXRzIGluIGdldF9idWZmZXIKKyAqIGJlZm9yZSB1c2luZyBHRVRfQklUUywgUEVFS19CSVRTLCBvciBEUk9QX0JJVFMuCisgKiBUaGUgdmFyaWFibGVzIGdldF9idWZmZXIgYW5kIGJpdHNfbGVmdCBhcmUgYXNzdW1lZCB0byBiZSBsb2NhbHMsCisgKiBidXQgdGhlIHN0YXRlIHN0cnVjdCBtaWdodCBub3QgYmUgKGpwZWdfaHVmZl9kZWNvZGUgbmVlZHMgdGhpcykuCisgKiAgICAgIENIRUNLX0JJVF9CVUZGRVIoc3RhdGUsIG4sIGFjdGlvbik7CisgKiAgICAgICAgICAgICAgRW5zdXJlIHRoZXJlIGFyZSBOIGJpdHMgaW4gZ2V0X2J1ZmZlcjsgaWYgc3VzcGVuZCwgdGFrZSBhY3Rpb24uCisgKiAgICAgIHZhbCA9IEdFVF9CSVRTKG4pOworICogICAgICAgICAgICAgIEZldGNoIG5leHQgTiBiaXRzLgorICogICAgICB2YWwgPSBQRUVLX0JJVFMobik7CisgKiAgICAgICAgICAgICAgRmV0Y2ggbmV4dCBOIGJpdHMgd2l0aG91dCByZW1vdmluZyB0aGVtIGZyb20gdGhlIGJ1ZmZlci4KKyAqICAgICAgRFJPUF9CSVRTKG4pOworICogICAgICAgICAgICAgIERpc2NhcmQgbmV4dCBOIGJpdHMuCisgKiBUaGUgdmFsdWUgTiBzaG91bGQgYmUgYSBzaW1wbGUgdmFyaWFibGUsIG5vdCBhbiBleHByZXNzaW9uLCBiZWNhdXNlIGl0CisgKiBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMuCisgKi8KKworI2RlZmluZSBDSEVDS19CSVRfQlVGRkVSKHN0YXRlLCBuYml0cywgYWN0aW9uKSB7IFwKKyAgaWYgKGJpdHNfbGVmdCA8IChuYml0cykpIHsgXAorICAgIGlmICghanBlZ19maWxsX2JpdF9idWZmZXIoJihzdGF0ZSksIGdldF9idWZmZXIsIGJpdHNfbGVmdCwgbmJpdHMpKSBcCisgICAgICB7IGFjdGlvbjsgfSBcCisgICAgZ2V0X2J1ZmZlciA9IChzdGF0ZSkuZ2V0X2J1ZmZlcjsgIGJpdHNfbGVmdCA9IChzdGF0ZSkuYml0c19sZWZ0OyBcCisgIH0gXAorfQorCisjZGVmaW5lIEdFVF9CSVRTKG5iaXRzKSBcCisgICgoKGludCkoZ2V0X2J1ZmZlciA+PiAoYml0c19sZWZ0IC09IChuYml0cykpKSkgJiAoKDEgPDwgKG5iaXRzKSkgLSAxKSkKKworI2RlZmluZSBQRUVLX0JJVFMobmJpdHMpIFwKKyAgKCgoaW50KShnZXRfYnVmZmVyID4+IChiaXRzX2xlZnQgLSAgKG5iaXRzKSkpKSAmICgoMSA8PCAobmJpdHMpKSAtIDEpKQorCisjZGVmaW5lIERST1BfQklUUyhuYml0cykgXAorICAoYml0c19sZWZ0IC09IChuYml0cykpCisKKy8qIExvYWQgdXAgdGhlIGJpdCBidWZmZXIgdG8gYSBkZXB0aCBvZiBhdCBsZWFzdCBuYml0cyAqLworRVhURVJOKGJvb2xlYW4pIGpwZWdfZmlsbF9iaXRfYnVmZmVyKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwgaW50IG5iaXRzKTsKKworCisvKgorICogQ29kZSBmb3IgZXh0cmFjdGluZyBuZXh0IEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZyb20gaW5wdXQgYml0IHN0cmVhbS4KKyAqIEFnYWluLCB0aGlzIGlzIHRpbWUtY3JpdGljYWwgYW5kIHdlIG1ha2UgdGhlIG1haW4gcGF0aHMgYmUgbWFjcm9zLgorICoKKyAqIFdlIHVzZSBhIGxvb2thaGVhZCB0YWJsZSB0byBwcm9jZXNzIGNvZGVzIG9mIHVwIHRvIEhVRkZfTE9PS0FIRUFEIGJpdHMKKyAqIHdpdGhvdXQgbG9vcGluZy4gIFVzdWFsbHksIG1vcmUgdGhhbiA5NSUgb2YgdGhlIEh1ZmZtYW4gY29kZXMgd2lsbCBiZSA4CisgKiBvciBmZXdlciBiaXRzIGxvbmcuICBUaGUgZmV3IG92ZXJsZW5ndGggY29kZXMgYXJlIGhhbmRsZWQgd2l0aCBhIGxvb3AsCisgKiB3aGljaCBuZWVkIG5vdCBiZSBpbmxpbmUgY29kZS4KKyAqCisgKiBOb3RlcyBhYm91dCB0aGUgSFVGRl9ERUNPREUgbWFjcm86CisgKiAxLiBOZWFyIHRoZSBlbmQgb2YgdGhlIGRhdGEgc2VnbWVudCwgd2UgbWF5IGZhaWwgdG8gZ2V0IGVub3VnaCBiaXRzCisgKiAgICBmb3IgYSBsb29rYWhlYWQuICBJbiB0aGF0IGNhc2UsIHdlIGRvIGl0IHRoZSBoYXJkIHdheS4KKyAqIDIuIElmIHRoZSBsb29rYWhlYWQgdGFibGUgY29udGFpbnMgbm8gZW50cnksIHRoZSBuZXh0IGNvZGUgbXVzdCBiZQorICogICAgbW9yZSB0aGFuIEhVRkZfTE9PS0FIRUFEIGJpdHMgbG9uZy4KKyAqIDMuIGpwZWdfaHVmZl9kZWNvZGUgcmV0dXJucyAtMSBpZiBmb3JjZWQgdG8gc3VzcGVuZC4KKyAqLworCisjZGVmaW5lIEhVRkZfREVDT0RFKHJlc3VsdCwgc3RhdGUsIGh0YmwsIGZhaWxhY3Rpb24sIHNsb3dsYWJlbCkgeyBcCisgIHJlZ2lzdGVyIGludCBuYiwgbG9vazsgXAorICBpZiAoYml0c19sZWZ0IDwgSFVGRl9MT09LQUhFQUQpIHsgXAorICAgIGlmICghanBlZ19maWxsX2JpdF9idWZmZXIoJnN0YXRlLCBnZXRfYnVmZmVyLCBiaXRzX2xlZnQsIDApKSBcCisgICAgICB7IGZhaWxhY3Rpb247IH0gXAorICAgIGdldF9idWZmZXIgPSBzdGF0ZS5nZXRfYnVmZmVyOyAgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcCisgICAgaWYgKGJpdHNfbGVmdCA8IEhVRkZfTE9PS0FIRUFEKSB7IFwKKyAgICAgIG5iID0gMTsgIGdvdG8gc2xvd2xhYmVsOyBcCisgICAgfSBcCisgIH0gXAorICBsb29rID0gUEVFS19CSVRTKEhVRkZfTE9PS0FIRUFEKTsgXAorICBpZiAoKG5iID0gKGh0YmwtPmxvb2t1cFtsb29rXSA+PiBIVUZGX0xPT0tBSEVBRCkpIDw9IEhVRkZfTE9PS0FIRUFEKSB7IFwKKyAgICBEUk9QX0JJVFMobmIpOyBcCisgICAgcmVzdWx0ID0gaHRibC0+bG9va3VwW2xvb2tdICYgKCgxIDw8IEhVRkZfTE9PS0FIRUFEKSAtIDEpOyBcCisgIH0gZWxzZSB7IFwKK3Nsb3dsYWJlbDogXAorICAgIGlmICgocmVzdWx0ID0gXAorICAgICAgICAganBlZ19odWZmX2RlY29kZSgmc3RhdGUsIGdldF9idWZmZXIsIGJpdHNfbGVmdCwgaHRibCwgbmIpKSA8IDApIFwKKyAgICAgIHsgZmFpbGFjdGlvbjsgfSBcCisgICAgZ2V0X2J1ZmZlciA9IHN0YXRlLmdldF9idWZmZXI7ICBiaXRzX2xlZnQgPSBzdGF0ZS5iaXRzX2xlZnQ7IFwKKyAgfSBcCit9CisKKyNkZWZpbmUgSFVGRl9ERUNPREVfRkFTVChzLCBuYiwgaHRibCkgXAorICBGSUxMX0JJVF9CVUZGRVJfRkFTVDsgXAorICBzID0gUEVFS19CSVRTKEhVRkZfTE9PS0FIRUFEKTsgXAorICBzID0gaHRibC0+bG9va3VwW3NdOyBcCisgIG5iID0gcyA+PiBIVUZGX0xPT0tBSEVBRDsgXAorICAvKiBQcmUtZXhlY3V0ZSB0aGUgY29tbW9uIGNhc2Ugb2YgbmIgPD0gSFVGRl9MT09LQUhFQUQgKi8gXAorICBEUk9QX0JJVFMobmIpOyBcCisgIHMgPSBzICYgKCgxIDw8IEhVRkZfTE9PS0FIRUFEKSAtIDEpOyBcCisgIGlmIChuYiA+IEhVRkZfTE9PS0FIRUFEKSB7IFwKKyAgICAvKiBFcXVpdmFsZW50IG9mIGpwZWdfaHVmZl9kZWNvZGUoKSAqLyBcCisgICAgLyogRG9uJ3QgdXNlIEdFVF9CSVRTKCkgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IGJpdHNfbGVmdCAqLyBcCisgICAgcyA9IChnZXRfYnVmZmVyID4+IGJpdHNfbGVmdCkgJiAoKDEgPDwgKG5iKSkgLSAxKTsgXAorICAgIHdoaWxlIChzID4gaHRibC0+bWF4Y29kZVtuYl0pIHsgXAorICAgICAgcyA8PD0gMTsgXAorICAgICAgcyB8PSBHRVRfQklUUygxKTsgXAorICAgICAgbmIrKzsgXAorICAgIH0gXAorICAgIHMgPSBodGJsLT5wdWItPmh1ZmZ2YWxbKGludCkocyArIGh0YmwtPnZhbG9mZnNldFtuYl0pICYgMHhGRl07IFwKKyAgfQorCisvKiBPdXQtb2YtbGluZSBjYXNlIGZvciBIdWZmbWFuIGNvZGUgZmV0Y2hpbmcgKi8KK0VYVEVSTihpbnQpIGpwZWdfaHVmZl9kZWNvZGUoYml0cmVhZF93b3JraW5nX3N0YXRlICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQsIGRfZGVyaXZlZF90YmwgKmh0YmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW5fYml0cyk7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGljYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRpY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI0Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRpY2MuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIGpkaWNjLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OCwgVGhvbWFzIEcuIExhbmUsIFRvZGQgTmV3bWFuLgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29kZSB0byByZWFkIEludGVybmF0aW9uYWwgQ29sb3IgQ29uc29ydGl1bSAoSUNDKSBkZXZpY2UKKyAqIHByb2ZpbGVzIGVtYmVkZGVkIGluIEpGSUYgSlBFRyBpbWFnZSBmaWxlcy4gIFRoZSBJQ0MgaGFzIGRlZmluZWQgYSBzdGFuZGFyZAorICogZm9yIGluY2x1ZGluZyBzdWNoIGRhdGEgaW4gSlBFRyAiQVBQMiIgbWFya2Vycy4gIFRoZSBjb2RlIGdpdmVuIGhlcmUgZG9lcworICogbm90IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUgSUNDIHByb2ZpbGUgZGF0YTsgaXQKKyAqIGp1c3Qga25vd3MgaG93IHRvIGdldCB0aGUgcHJvZmlsZSBkYXRhIGZyb20gYSBKUEVHIGZpbGUgd2hpbGUgcmVhZGluZyBpdC4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamVycm9yLmgiCisKKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSAqLworZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworCisjZGVmaW5lIElDQ19NQVJLRVIgIChKUEVHX0FQUDAgKyAyKSAgICAgLyogSlBFRyBtYXJrZXIgY29kZSBmb3IgSUNDICovCisjZGVmaW5lIElDQ19PVkVSSEVBRF9MRU4gIDE0ICAgICAgICAgICAgLyogc2l6ZSBvZiBub24tcHJvZmlsZSBkYXRhIGluIEFQUDIgKi8KKworCisvKgorICogSGFuZHkgc3Vicm91dGluZSB0byB0ZXN0IHdoZXRoZXIgYSBzYXZlZCBtYXJrZXIgaXMgYW4gSUNDIHByb2ZpbGUgbWFya2VyLgorICovCisKK0xPQ0FMKGJvb2xlYW4pCittYXJrZXJfaXNfaWNjKGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBtYXJrZXIpCit7CisgIHJldHVybgorICAgIG1hcmtlci0+bWFya2VyID09IElDQ19NQVJLRVIgJiYKKyAgICBtYXJrZXItPmRhdGFfbGVuZ3RoID49IElDQ19PVkVSSEVBRF9MRU4gJiYKKyAgICAvKiB2ZXJpZnkgdGhlIGlkZW50aWZ5aW5nIHN0cmluZyAqLworICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMF0pID09IDB4NDkgJiYKKyAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzFdKSA9PSAweDQzICYmCisgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsyXSkgPT0gMHg0MyAmJgorICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbM10pID09IDB4NUYgJiYKKyAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzRdKSA9PSAweDUwICYmCisgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVs1XSkgPT0gMHg1MiAmJgorICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbNl0pID09IDB4NEYgJiYKKyAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzddKSA9PSAweDQ2ICYmCisgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVs4XSkgPT0gMHg0OSAmJgorICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbOV0pID09IDB4NEMgJiYKKyAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzEwXSkgPT0gMHg0NSAmJgorICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMTFdKSA9PSAweDA7Cit9CisKKworLyoKKyAqIFNlZSBpZiB0aGVyZSB3YXMgYW4gSUNDIHByb2ZpbGUgaW4gdGhlIEpQRUcgZmlsZSBiZWluZyByZWFkOyBpZiBzbywKKyAqIHJlYXNzZW1ibGUgYW5kIHJldHVybiB0aGUgcHJvZmlsZSBkYXRhLgorICoKKyAqIFRSVUUgaXMgcmV0dXJuZWQgaWYgYW4gSUNDIHByb2ZpbGUgd2FzIGZvdW5kLCBGQUxTRSBpZiBub3QuICBJZiBUUlVFIGlzCisgKiByZXR1cm5lZCwgKmljY19kYXRhX3B0ciBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIHJldHVybmVkIGRhdGEsIGFuZAorICogKmljY19kYXRhX2xlbiBpcyBzZXQgdG8gaXRzIGxlbmd0aC4KKyAqCisgKiBJTVBPUlRBTlQ6IHRoZSBkYXRhIGF0ICppY2NfZGF0YV9wdHIgaXMgYWxsb2NhdGVkIHdpdGggbWFsbG9jKCkgYW5kIG11c3QgYmUKKyAqIGZyZWVkIGJ5IHRoZSBjYWxsZXIgd2l0aCBmcmVlKCkgd2hlbiB0aGUgY2FsbGVyIG5vIGxvbmdlciBuZWVkcyBpdC4KKyAqIChBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCB3cml0ZSB0aGlzIHJvdXRpbmUgdG8gdXNlIHRoZSBJSkcgbGlicmFyeSdzIG1lbW9yeQorICogYWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBkYXRhIHdvdWxkIGJlIGZyZWVkIGltcGxpY2l0bHkgd2hlbgorICoganBlZ19maW5pc2hfZGVjb21wcmVzcygpIGlzIGNhbGxlZC4gIEJ1dCBpdCBzZWVtcyBsaWtlbHkgdGhhdCBtYW55CisgKiBhcHBsaWNhdGlvbnMgd2lsbCBwcmVmZXIgdG8gaGF2ZSB0aGUgZGF0YSBzdGljayBhcm91bmQgYWZ0ZXIgZGVjb21wcmVzc2lvbgorICogZmluaXNoZXMuKQorICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19yZWFkX2ljY19wcm9maWxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpPQ1RFVCAqKmljY19kYXRhX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmljY19kYXRhX2xlbikKK3sKKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIG1hcmtlcjsKKyAgaW50IG51bV9tYXJrZXJzID0gMDsKKyAgaW50IHNlcV9ubzsKKyAgSk9DVEVUICppY2NfZGF0YTsKKyAgdW5zaWduZWQgaW50IHRvdGFsX2xlbmd0aDsKKyNkZWZpbmUgTUFYX1NFUV9OTyAgMjU1ICAgICAgICAgLyogc3VmZmljaWVudCBzaW5jZSBtYXJrZXIgbnVtYmVycyBhcmUgYnl0ZXMgKi8KKyAgY2hhciBtYXJrZXJfcHJlc2VudFtNQVhfU0VRX05PICsgMV07ICAgICAgLyogMSBpZiBtYXJrZXIgZm91bmQgKi8KKyAgdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoW01BWF9TRVFfTk8gKyAxXTsgLyogc2l6ZSBvZiBwcm9maWxlIGRhdGEgaW4gbWFya2VyICovCisgIHVuc2lnbmVkIGludCBkYXRhX29mZnNldFtNQVhfU0VRX05PICsgMV07IC8qIG9mZnNldCBmb3IgZGF0YSBpbiBtYXJrZXIgKi8KKworICBpZiAoaWNjX2RhdGFfcHRyID09IE5VTEwgfHwgaWNjX2RhdGFfbGVuID09IE5VTEwpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlIDwgRFNUQVRFX1JFQURZKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgKmljY19kYXRhX3B0ciA9IE5VTEw7ICAgICAgICAgLyogYXZvaWQgY29uZnVzaW9uIGlmIEZBTFNFIHJldHVybiAqLworICAqaWNjX2RhdGFfbGVuID0gMDsKKworICAvKiBUaGlzIGZpcnN0IHBhc3Mgb3ZlciB0aGUgc2F2ZWQgbWFya2VycyBkaXNjb3ZlcnMgd2hldGhlciB0aGVyZSBhcmUKKyAgICogYW55IElDQyBtYXJrZXJzIGFuZCB2ZXJpZmllcyB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIG1hcmtlciBudW1iZXJpbmcuCisgICAqLworCisgIGZvciAoc2VxX25vID0gMTsgc2VxX25vIDw9IE1BWF9TRVFfTk87IHNlcV9ubysrKQorICAgIG1hcmtlcl9wcmVzZW50W3NlcV9ub10gPSAwOworCisgIGZvciAobWFya2VyID0gY2luZm8tPm1hcmtlcl9saXN0OyBtYXJrZXIgIT0gTlVMTDsgbWFya2VyID0gbWFya2VyLT5uZXh0KSB7CisgICAgaWYgKG1hcmtlcl9pc19pY2MobWFya2VyKSkgeworICAgICAgaWYgKG51bV9tYXJrZXJzID09IDApCisgICAgICAgIG51bV9tYXJrZXJzID0gR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsxM10pOworICAgICAgZWxzZSBpZiAobnVtX21hcmtlcnMgIT0gR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsxM10pKSB7CisgICAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9CT0dVU19JQ0MpOyAgLyogaW5jb25zaXN0ZW50IG51bV9tYXJrZXJzIGZpZWxkcyAqLworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICBzZXFfbm8gPSBHRVRKT0NURVQobWFya2VyLT5kYXRhWzEyXSk7CisgICAgICBpZiAoc2VxX25vIDw9IDAgfHwgc2VxX25vID4gbnVtX21hcmtlcnMpIHsKKyAgICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0JPR1VTX0lDQyk7ICAvKiBib2d1cyBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgaWYgKG1hcmtlcl9wcmVzZW50W3NlcV9ub10pIHsKKyAgICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0JPR1VTX0lDQyk7ICAvKiBkdXBsaWNhdGUgc2VxdWVuY2UgbnVtYmVycyAqLworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICBtYXJrZXJfcHJlc2VudFtzZXFfbm9dID0gMTsKKyAgICAgIGRhdGFfbGVuZ3RoW3NlcV9ub10gPSBtYXJrZXItPmRhdGFfbGVuZ3RoIC0gSUNDX09WRVJIRUFEX0xFTjsKKyAgICB9CisgIH0KKworICBpZiAobnVtX21hcmtlcnMgPT0gMCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogQ2hlY2sgZm9yIG1pc3NpbmcgbWFya2VycywgY291bnQgdG90YWwgc3BhY2UgbmVlZGVkLAorICAgKiBjb21wdXRlIG9mZnNldCBvZiBlYWNoIG1hcmtlcidzIHBhcnQgb2YgdGhlIGRhdGEuCisgICAqLworCisgIHRvdGFsX2xlbmd0aCA9IDA7CisgIGZvciAoc2VxX25vID0gMTsgc2VxX25vIDw9IG51bV9tYXJrZXJzOyBzZXFfbm8rKykgeworICAgIGlmIChtYXJrZXJfcHJlc2VudFtzZXFfbm9dID09IDApIHsKKyAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9CT0dVU19JQ0MpOyAgLyogbWlzc2luZyBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZGF0YV9vZmZzZXRbc2VxX25vXSA9IHRvdGFsX2xlbmd0aDsKKyAgICB0b3RhbF9sZW5ndGggKz0gZGF0YV9sZW5ndGhbc2VxX25vXTsKKyAgfQorCisgIGlmICh0b3RhbF9sZW5ndGggPT0gMCkgeworICAgIFdBUk5NUyhjaW5mbywgSldSTl9CT0dVU19JQ0MpOyAgLyogZm91bmQgb25seSBlbXB0eSBtYXJrZXJzPyAqLworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBhc3NlbWJsZWQgZGF0YSAqLworICBpY2NfZGF0YSA9IChKT0NURVQgKiltYWxsb2ModG90YWxfbGVuZ3RoICogc2l6ZW9mKEpPQ1RFVCkpOworICBpZiAoaWNjX2RhdGEgPT0gTlVMTCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCAxMSk7ICAvKiBvb3BzLCBvdXQgb2YgbWVtb3J5ICovCisKKyAgLyogYW5kIGZpbGwgaXQgaW4gKi8KKyAgZm9yIChtYXJrZXIgPSBjaW5mby0+bWFya2VyX2xpc3Q7IG1hcmtlciAhPSBOVUxMOyBtYXJrZXIgPSBtYXJrZXItPm5leHQpIHsKKyAgICBpZiAobWFya2VyX2lzX2ljYyhtYXJrZXIpKSB7CisgICAgICBKT0NURVQgRkFSICpzcmNfcHRyOworICAgICAgSk9DVEVUICpkc3RfcHRyOworICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgICAgIHNlcV9ubyA9IEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMTJdKTsKKyAgICAgIGRzdF9wdHIgPSBpY2NfZGF0YSArIGRhdGFfb2Zmc2V0W3NlcV9ub107CisgICAgICBzcmNfcHRyID0gbWFya2VyLT5kYXRhICsgSUNDX09WRVJIRUFEX0xFTjsKKyAgICAgIGxlbmd0aCA9IGRhdGFfbGVuZ3RoW3NlcV9ub107CisgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAgICAgICAgKmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgKmljY19kYXRhX3B0ciA9IGljY19kYXRhOworICAqaWNjX2RhdGFfbGVuID0gdG90YWxfbGVuZ3RoOworCisgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRpbnB1dC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRpbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjhiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZGlucHV0LmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBqZGlucHV0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBHb29nbGUsIEluYy4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBpbnB1dCBjb250cm9sIGxvZ2ljIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggY29udHJvbGxpbmcgdGhlIGRlY29tcHJlc3NvcidzIGlucHV0CisgKiBwcm9jZXNzaW5nIChtYXJrZXIgcmVhZGluZyBhbmQgY29lZmZpY2llbnQgZGVjb2RpbmcpLiAgVGhlIGFjdHVhbCBpbnB1dAorICogcmVhZGluZyBpcyBkb25lIGluIGpkbWFya2VyLmMsIGpkaHVmZi5jLCBhbmQgamRwaHVmZi5jLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgorCisKKy8qIFByaXZhdGUgc3RhdGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIGJvb2xlYW4gaW5oZWFkZXJzOyAgICAgICAgICAgIC8qIFRSVUUgdW50aWwgZmlyc3QgU09TIGlzIHJlYWNoZWQgKi8KK30gbXlfaW5wdXRfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9pbnB1dF9jb250cm9sbGVyICpteV9pbnB1dGN0bF9wdHI7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRihpbnQpIGNvbnN1bWVfbWFya2VycyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworCisvKgorICogUm91dGluZXMgdG8gY2FsY3VsYXRlIHZhcmlvdXMgcXVhbnRpdGllcyByZWxhdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBpbWFnZS4KKyAqLworCitMT0NBTCh2b2lkKQoraW5pdGlhbF9zZXR1cChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogQ2FsbGVkIG9uY2UsIHdoZW4gZmlyc3QgU09TIG1hcmtlciBpcyByZWFjaGVkICovCit7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICAvKiBNYWtlIHN1cmUgaW1hZ2UgaXNuJ3QgYmlnZ2VyIHRoYW4gSSBjYW4gaGFuZGxlICovCisgIGlmICgobG9uZyljaW5mby0+aW1hZ2VfaGVpZ2h0ID4gKGxvbmcpSlBFR19NQVhfRElNRU5TSU9OIHx8CisgICAgICAobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggPiAobG9uZylKUEVHX01BWF9ESU1FTlNJT04pCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfSU1BR0VfVE9PX0JJRywgKHVuc2lnbmVkIGludClKUEVHX01BWF9ESU1FTlNJT04pOworCisgIC8qIEZvciBub3csIHByZWNpc2lvbiBtdXN0IG1hdGNoIGNvbXBpbGVkLWluIHZhbHVlLi4uICovCisgIGlmIChjaW5mby0+ZGF0YV9wcmVjaXNpb24gIT0gQklUU19JTl9KU0FNUExFKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUkVDSVNJT04sIGNpbmZvLT5kYXRhX3ByZWNpc2lvbik7CisKKyAgLyogQ2hlY2sgdGhhdCBudW1iZXIgb2YgY29tcG9uZW50cyB3b24ndCBleGNlZWQgaW50ZXJuYWwgYXJyYXkgc2l6ZXMgKi8KKyAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQorICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPm51bV9jb21wb25lbnRzLAorICAgICAgICAgICAgIE1BWF9DT01QT05FTlRTKTsKKworICAvKiBDb21wdXRlIG1heGltdW0gc2FtcGxpbmcgZmFjdG9yczsgY2hlY2sgZmFjdG9yIHZhbGlkaXR5ICovCisgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IDE7CisgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IDE7CisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgaWYgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgPD0gMCB8fAorICAgICAgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yID4gTUFYX1NBTVBfRkFDVE9SIHx8CisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPD0gMCB8fAorICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yID4gTUFYX1NBTVBfRkFDVE9SKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfU0FNUExJTkcpOworICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IE1BWChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpOworICAgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IE1BWChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICB9CisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisgIGNpbmZvLT5ibG9ja19zaXplID0gRENUU0laRTsKKyAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI7CisgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMiAtIDE7CisjZW5kaWYKKworICAvKiBXZSBpbml0aWFsaXplIERDVF9zY2FsZWRfc2l6ZSBhbmQgbWluX0RDVF9zY2FsZWRfc2l6ZSB0byBEQ1RTSVpFLgorICAgKiBJbiB0aGUgZnVsbCBkZWNvbXByZXNzb3IsIHRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGpkbWFzdGVyLmM7CisgICAqIGJ1dCBpbiB0aGUgdHJhbnNjb2RlciwgamRtYXN0ZXIuYyBpcyBub3QgdXNlZCwgc28gd2UgbXVzdCBkbyBpdCBoZXJlLgorICAgKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbHNlCisgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbmRpZgorCisgIC8qIENvbXB1dGUgZGltZW5zaW9ucyBvZiBjb21wb25lbnRzICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAgIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplID0gY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOworI2Vsc2UKKyAgICBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOworI2VuZGlmCisgICAgLyogU2l6ZSBpbiBEQ1QgYmxvY2tzICovCisgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIChsb25nKWNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgIChsb25nKShjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2VfaGVpZ2h0ICogKGxvbmcpY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICAvKiBTZXQgdGhlIGZpcnN0IGFuZCBsYXN0IE1DVSBjb2x1bW5zIHRvIGRlY29tcHJlc3MgZnJvbSBtdWx0aS1zY2FuIGltYWdlcy4KKyAgICAgKiBCeSBkZWZhdWx0LCBkZWNvbXByZXNzIGFsbCBvZiB0aGUgTUNVIGNvbHVtbnMuCisgICAgICovCisgICAgY2luZm8tPm1hc3Rlci0+Zmlyc3RfTUNVX2NvbFtjaV0gPSAwOworICAgIGNpbmZvLT5tYXN0ZXItPmxhc3RfTUNVX2NvbFtjaV0gPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgLSAxOworICAgIC8qIGRvd25zYW1wbGVkX3dpZHRoIGFuZCBkb3duc2FtcGxlZF9oZWlnaHQgd2lsbCBhbHNvIGJlIG92ZXJyaWRkZW4gYnkKKyAgICAgKiBqZG1hc3Rlci5jIGlmIHdlIGFyZSBkb2luZyBmdWxsIGRlY29tcHJlc3Npb24uICBUaGUgdHJhbnNjb2RlciBsaWJyYXJ5CisgICAgICogZG9lc24ndCB1c2UgdGhlc2UgdmFsdWVzLCBidXQgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gbWlnaHQuCisgICAgICovCisgICAgLyogU2l6ZSBpbiBzYW1wbGVzICovCisgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX3dpZHRoICogKGxvbmcpY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKTsKKyAgICBjb21wcHRyLT5kb3duc2FtcGxlZF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIChsb25nKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgIChsb25nKWNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkLCB1bnRpbCBjb2xvciBjb252ZXJzaW9uIHNheXMgb3RoZXJ3aXNlICovCisgICAgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCA9IFRSVUU7CisgICAgLyogTWFyayBubyBxdWFudGl6YXRpb24gdGFibGUgeWV0IHNhdmVkIGZvciBjb21wb25lbnQgKi8KKyAgICBjb21wcHRyLT5xdWFudF90YWJsZSA9IE5VTEw7CisgIH0KKworICAvKiBDb21wdXRlIG51bWJlciBvZiBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93cy4gKi8KKyAgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyA9IChKRElNRU5TSU9OKQorICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgIChsb25nKShjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisKKyAgLyogRGVjaWRlIHdoZXRoZXIgZmlsZSBjb250YWlucyBtdWx0aXBsZSBzY2FucyAqLworICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPCBjaW5mby0+bnVtX2NvbXBvbmVudHMgfHwgY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCisgICAgY2luZm8tPmlucHV0Y3RsLT5oYXNfbXVsdGlwbGVfc2NhbnMgPSBUUlVFOworICBlbHNlCisgICAgY2luZm8tPmlucHV0Y3RsLT5oYXNfbXVsdGlwbGVfc2NhbnMgPSBGQUxTRTsKK30KKworCitMT0NBTCh2b2lkKQorcGVyX3NjYW5fc2V0dXAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgYSBKUEVHIHNjYW4gKi8KKy8qIGNpbmZvLT5jb21wc19pbl9zY2FuIGFuZCBjaW5mby0+Y3VyX2NvbXBfaW5mb1tdIHdlcmUgc2V0IGZyb20gU09TIG1hcmtlciAqLworeworICBpbnQgY2ksIG1jdWJsa3MsIHRtcDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPT0gMSkgeworCisgICAgLyogTm9uaW50ZXJsZWF2ZWQgKHNpbmdsZS1jb21wb25lbnQpIHNjYW4gKi8KKyAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF07CisKKyAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLworICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworCisgICAgLyogRm9yIG5vbmludGVybGVhdmVkIHNjYW4sIGFsd2F5cyBvbmUgYmxvY2sgcGVyIE1DVSAqLworICAgIGNvbXBwdHItPk1DVV93aWR0aCA9IDE7CisgICAgY29tcHB0ci0+TUNVX2hlaWdodCA9IDE7CisgICAgY29tcHB0ci0+TUNVX2Jsb2NrcyA9IDE7CisgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgY29tcHB0ci0+bGFzdF9jb2xfd2lkdGggPSAxOworICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FucywgaXQgaXMgY29udmVuaWVudCB0byBkZWZpbmUgbGFzdF9yb3dfaGVpZ2h0CisgICAgICogYXMgdGhlIG51bWJlciBvZiBibG9jayByb3dzIHByZXNlbnQgaW4gdGhlIGxhc3QgaU1DVSByb3cuCisgICAgICovCisgICAgdG1wID0gKGludCkoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQgPSB0bXA7CisKKyAgICAvKiBQcmVwYXJlIGFycmF5IGRlc2NyaWJpbmcgTUNVIGNvbXBvc2l0aW9uICovCisgICAgY2luZm8tPmJsb2Nrc19pbl9NQ1UgPSAxOworICAgIGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFswXSA9IDA7CisKKyAgfSBlbHNlIHsKKworICAgIC8qIEludGVybGVhdmVkIChtdWx0aS1jb21wb25lbnQpIHNjYW4gKi8KKyAgICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPD0gMCB8fCBjaW5mby0+Y29tcHNfaW5fc2NhbiA+IE1BWF9DT01QU19JTl9TQ0FOKQorICAgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBjaW5mby0+Y29tcHNfaW5fc2NhbiwKKyAgICAgICAgICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsKKworICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovCisgICAgY2luZm8tPk1DVXNfcGVyX3JvdyA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIChsb25nKShjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKworICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMDsKKworICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgLyogU2FtcGxpbmcgZmFjdG9ycyBnaXZlICMgb2YgYmxvY2tzIG9mIGNvbXBvbmVudCBpbiBlYWNoIE1DVSAqLworICAgICAgY29tcHB0ci0+TUNVX3dpZHRoID0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgICAgY29tcHB0ci0+TUNVX2Jsb2NrcyA9IGNvbXBwdHItPk1DVV93aWR0aCAqIGNvbXBwdHItPk1DVV9oZWlnaHQ7CisgICAgICBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoID0gY29tcHB0ci0+TUNVX3dpZHRoICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOworICAgICAgLyogRmlndXJlIG51bWJlciBvZiBub24tZHVtbXkgYmxvY2tzIGluIGxhc3QgTUNVIGNvbHVtbiAmIHJvdyAqLworICAgICAgdG1wID0gKGludCkoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX3dpZHRoKTsKKyAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX3dpZHRoOworICAgICAgY29tcHB0ci0+bGFzdF9jb2xfd2lkdGggPSB0bXA7CisgICAgICB0bXAgPSAoaW50KShjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX2hlaWdodCk7CisgICAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPk1DVV9oZWlnaHQ7CisgICAgICBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQgPSB0bXA7CisgICAgICAvKiBQcmVwYXJlIGFycmF5IGRlc2NyaWJpbmcgTUNVIGNvbXBvc2l0aW9uICovCisgICAgICBtY3VibGtzID0gY29tcHB0ci0+TUNVX2Jsb2NrczsKKyAgICAgIGlmIChjaW5mby0+YmxvY2tzX2luX01DVSArIG1jdWJsa3MgPiBEX01BWF9CTE9DS1NfSU5fTUNVKQorICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9NQ1VfU0laRSk7CisgICAgICB3aGlsZSAobWN1Ymxrcy0tID4gMCkgeworICAgICAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbY2luZm8tPmJsb2Nrc19pbl9NQ1UrK10gPSBjaTsKKyAgICAgIH0KKyAgICB9CisKKyAgfQorfQorCisKKy8qCisgKiBTYXZlIGF3YXkgYSBjb3B5IG9mIHRoZSBRLXRhYmxlIHJlZmVyZW5jZWQgYnkgZWFjaCBjb21wb25lbnQgcHJlc2VudAorICogaW4gdGhlIGN1cnJlbnQgc2NhbiwgdW5sZXNzIGFscmVhZHkgc2F2ZWQgZHVyaW5nIGEgcHJpb3Igc2Nhbi4KKyAqCisgKiBJbiBhIG11bHRpcGxlLXNjYW4gSlBFRyBmaWxlLCB0aGUgZW5jb2RlciBjb3VsZCBhc3NpZ24gZGlmZmVyZW50IGNvbXBvbmVudHMKKyAqIHRoZSBzYW1lIFEtdGFibGUgc2xvdCBudW1iZXIsIGJ1dCBjaGFuZ2UgdGFibGUgZGVmaW5pdGlvbnMgYmV0d2VlbiBzY2FucworICogc28gdGhhdCBlYWNoIGNvbXBvbmVudCB1c2VzIGEgZGlmZmVyZW50IFEtdGFibGUuICAoVGhlIElKRyBlbmNvZGVyIGlzIG5vdAorICogY3VycmVudGx5IGNhcGFibGUgb2YgZG9pbmcgdGhpcywgYnV0IG90aGVyIGVuY29kZXJzIG1pZ2h0LikgIFNpbmNlIHdlIHdhbnQKKyAqIHRvIGJlIGFibGUgdG8gZGVxdWFudGl6ZSBhbGwgdGhlIGNvbXBvbmVudHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgdGhpcworICogbWVhbnMgdGhhdCB3ZSBoYXZlIHRvIHNhdmUgYXdheSB0aGUgdGFibGUgYWN0dWFsbHkgdXNlZCBmb3IgZWFjaCBjb21wb25lbnQuCisgKiBXZSBkbyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHRhYmxlIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2NhbiBjb250YWluaW5nCisgKiB0aGUgY29tcG9uZW50LgorICogVGhlIEpQRUcgc3BlYyBwcm9oaWJpdHMgdGhlIGVuY29kZXIgZnJvbSBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgYSBRLXRhYmxlCisgKiBzbG90IGJldHdlZW4gc2NhbnMgb2YgYSBjb21wb25lbnQgdXNpbmcgdGhhdCBzbG90LiAgSWYgdGhlIGVuY29kZXIgZG9lcyBzbworICogYW55d2F5LCB0aGlzIGRlY29kZXIgd2lsbCBzaW1wbHkgdXNlIHRoZSBRLXRhYmxlIHZhbHVlcyB0aGF0IHdlcmUgY3VycmVudAorICogYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzY2FuIGZvciB0aGUgY29tcG9uZW50LgorICoKKyAqIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbG9va3Mgb25seSBhdCB0aGUgc2F2ZWQgcXVhbnQgdGFibGVzLAorICogbm90IGF0IHRoZSBjdXJyZW50IFEtdGFibGUgc2xvdHMuCisgKi8KKworTE9DQUwodm9pZCkKK2xhdGNoX3F1YW50X3RhYmxlcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgY2ksIHF0YmxubzsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgSlFVQU5UX1RCTCAqcXRibDsKKworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgLyogTm8gd29yayBpZiB3ZSBhbHJlYWR5IHNhdmVkIFEtdGFibGUgZm9yIHRoaXMgY29tcG9uZW50ICovCisgICAgaWYgKGNvbXBwdHItPnF1YW50X3RhYmxlICE9IE5VTEwpCisgICAgICBjb250aW51ZTsKKyAgICAvKiBNYWtlIHN1cmUgc3BlY2lmaWVkIHF1YW50aXphdGlvbiB0YWJsZSBpcyBwcmVzZW50ICovCisgICAgcXRibG5vID0gY29tcHB0ci0+cXVhbnRfdGJsX25vOworICAgIGlmIChxdGJsbm8gPCAwIHx8IHF0YmxubyA+PSBOVU1fUVVBTlRfVEJMUyB8fAorICAgICAgICBjaW5mby0+cXVhbnRfdGJsX3B0cnNbcXRibG5vXSA9PSBOVUxMKQorICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fUVVBTlRfVEFCTEUsIHF0Ymxubyk7CisgICAgLyogT0ssIHNhdmUgYXdheSB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCisgICAgcXRibCA9IChKUVVBTlRfVEJMICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEpRVUFOVF9UQkwpKTsKKyAgICBNRU1DT1BZKHF0YmwsIGNpbmZvLT5xdWFudF90YmxfcHRyc1txdGJsbm9dLCBzaXplb2YoSlFVQU5UX1RCTCkpOworICAgIGNvbXBwdHItPnF1YW50X3RhYmxlID0gcXRibDsKKyAgfQorfQorCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBpbnB1dCBtb2R1bGVzIHRvIHJlYWQgYSBzY2FuIG9mIGNvbXByZXNzZWQgZGF0YS4KKyAqIFRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgaXMgZG9uZSBieSBqZG1hc3Rlci5jIGFmdGVyIGluaXRpYWxpemluZworICogdGhlIGVudGlyZSBkZWNvbXByZXNzb3IgKGR1cmluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MpLgorICogU3Vic2VxdWVudCBjYWxscyBjb21lIGZyb20gY29uc3VtZV9tYXJrZXJzLCBiZWxvdy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X2lucHV0X3Bhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGVyX3NjYW5fc2V0dXAoY2luZm8pOworICBsYXRjaF9xdWFudF90YWJsZXMoY2luZm8pOworICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8pOworICAoKmNpbmZvLT5jb2VmLT5zdGFydF9pbnB1dF9wYXNzKSAoY2luZm8pOworICBjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQgPSBjaW5mby0+Y29lZi0+Y29uc3VtZV9kYXRhOworfQorCisKKy8qCisgKiBGaW5pc2ggdXAgYWZ0ZXIgaW5wdXR0aW5nIGEgY29tcHJlc3NlZC1kYXRhIHNjYW4uCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgY29lZmZpY2llbnQgY29udHJvbGxlciBhZnRlciBpdCdzIHJlYWQgYWxsCisgKiB0aGUgZXhwZWN0ZWQgZGF0YSBvZiB0aGUgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9pbnB1dF9wYXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCA9IGNvbnN1bWVfbWFya2VyczsKK30KKworCisvKgorICogUmVhZCBKUEVHIG1hcmtlcnMgYmVmb3JlLCBiZXR3ZWVuLCBvciBhZnRlciBjb21wcmVzc2VkLWRhdGEgc2NhbnMuCisgKiBDaGFuZ2Ugc3RhdGUgYXMgbmVjZXNzYXJ5IHdoZW4gYSBuZXcgc2NhbiBpcyByZWFjaGVkLgorICogUmV0dXJuIHZhbHVlIGlzIEpQRUdfU1VTUEVOREVELCBKUEVHX1JFQUNIRURfU09TLCBvciBKUEVHX1JFQUNIRURfRU9JLgorICoKKyAqIFRoZSBjb25zdW1lX2lucHV0IG1ldGhvZCBwb2ludGVyIHBvaW50cyBlaXRoZXIgaGVyZSBvciB0byB0aGUKKyAqIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIncyBjb25zdW1lX2RhdGEgcm91dGluZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAqIHdlIGFyZSByZWFkaW5nIGEgY29tcHJlc3NlZCBkYXRhIHNlZ21lbnQgb3IgaW50ZXItc2VnbWVudCBtYXJrZXJzLgorICovCisKK01FVEhPRERFRihpbnQpCitjb25zdW1lX21hcmtlcnMoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfaW5wdXRjdGxfcHRyIGlucHV0Y3RsID0gKG15X2lucHV0Y3RsX3B0ciljaW5mby0+aW5wdXRjdGw7CisgIGludCB2YWw7CisKKyAgaWYgKGlucHV0Y3RsLT5wdWIuZW9pX3JlYWNoZWQpIC8qIEFmdGVyIGhpdHRpbmcgRU9JLCByZWFkIG5vIGZ1cnRoZXIgKi8KKyAgICByZXR1cm4gSlBFR19SRUFDSEVEX0VPSTsKKworICB2YWwgPSAoKmNpbmZvLT5tYXJrZXItPnJlYWRfbWFya2VycykgKGNpbmZvKTsKKworICBzd2l0Y2ggKHZhbCkgeworICBjYXNlIEpQRUdfUkVBQ0hFRF9TT1M6ICAgICAgICAvKiBGb3VuZCBTT1MgKi8KKyAgICBpZiAoaW5wdXRjdGwtPmluaGVhZGVycykgeyAgLyogMXN0IFNPUyAqLworICAgICAgaW5pdGlhbF9zZXR1cChjaW5mbyk7CisgICAgICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gRkFMU0U7CisgICAgICAvKiBOb3RlOiBzdGFydF9pbnB1dF9wYXNzIG11c3QgYmUgY2FsbGVkIGJ5IGpkbWFzdGVyLmMKKyAgICAgICAqIGJlZm9yZSBhbnkgbW9yZSBpbnB1dCBjYW4gYmUgY29uc3VtZWQuICBqZGFwaW1pbi5jIGlzCisgICAgICAgKiByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIHRoaXMgc2VxdWVuY2luZy4KKyAgICAgICAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiAybmQgb3IgbGF0ZXIgU09TIG1hcmtlciAqLworICAgICAgaWYgKCFpbnB1dGN0bC0+cHViLmhhc19tdWx0aXBsZV9zY2FucykKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9FT0lfRVhQRUNURUQpOyAvKiBPb3BzLCBJIHdhc24ndCBleHBlY3RpbmcgdGhpcyEgKi8KKyAgICAgIHN0YXJ0X2lucHV0X3Bhc3MoY2luZm8pOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBKUEVHX1JFQUNIRURfRU9JOiAgICAgICAgLyogRm91bmQgRU9JICovCisgICAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IFRSVUU7CisgICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsgIC8qIFRhYmxlcy1vbmx5IGRhdGFzdHJlYW0sIGFwcGFyZW50bHkgKi8KKyAgICAgIGlmIChjaW5mby0+bWFya2VyLT5zYXdfU09GKQorICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPRl9OT19TT1MpOworICAgIH0gZWxzZSB7CisgICAgICAvKiBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY29lZiBjdGxyJ3MgZGVjb21wcmVzc19kYXRhIHJvdXRpbmUKKyAgICAgICAqIGlmIHVzZXIgc2V0IG91dHB1dF9zY2FuX251bWJlciBsYXJnZXIgdGhhbiBudW1iZXIgb2Ygc2NhbnMuCisgICAgICAgKi8KKyAgICAgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID4gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKQorICAgICAgICBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID0gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBKUEVHX1NVU1BFTkRFRDoKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiB2YWw7Cit9CisKKworLyoKKyAqIFJlc2V0IHN0YXRlIHRvIGJlZ2luIGEgZnJlc2ggZGF0YXN0cmVhbS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Jlc2V0X2lucHV0X2NvbnRyb2xsZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfaW5wdXRjdGxfcHRyIGlucHV0Y3RsID0gKG15X2lucHV0Y3RsX3B0ciljaW5mby0+aW5wdXRjdGw7CisKKyAgaW5wdXRjdGwtPnB1Yi5jb25zdW1lX2lucHV0ID0gY29uc3VtZV9tYXJrZXJzOworICBpbnB1dGN0bC0+cHViLmhhc19tdWx0aXBsZV9zY2FucyA9IEZBTFNFOyAvKiAidW5rbm93biIgd291bGQgYmUgYmV0dGVyICovCisgIGlucHV0Y3RsLT5wdWIuZW9pX3JlYWNoZWQgPSBGQUxTRTsKKyAgaW5wdXRjdGwtPmluaGVhZGVycyA9IFRSVUU7CisgIC8qIFJlc2V0IG90aGVyIG1vZHVsZXMgKi8KKyAgKCpjaW5mby0+ZXJyLT5yZXNldF9lcnJvcl9tZ3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgKCpjaW5mby0+bWFya2VyLT5yZXNldF9tYXJrZXJfcmVhZGVyKSAoY2luZm8pOworICAvKiBSZXNldCBwcm9ncmVzc2lvbiBzdGF0ZSAtLSB3b3VsZCBiZSBjbGVhbmVyIGlmIGVudHJvcHkgZGVjb2RlciBkaWQgdGhpcyAqLworICBjaW5mby0+Y29lZl9iaXRzID0gTlVMTDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW5wdXQgY29udHJvbGxlciBtb2R1bGUuCisgKiBUaGlzIGlzIGNhbGxlZCBvbmx5IG9uY2UsIHdoZW4gdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0IGlzIGNyZWF0ZWQuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9pbnB1dF9jb250cm9sbGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2lucHV0Y3RsX3B0ciBpbnB1dGN0bDsKKworICAvKiBDcmVhdGUgc3Vib2JqZWN0IGluIHBlcm1hbmVudCBwb29sICovCisgIGlucHV0Y3RsID0gKG15X2lucHV0Y3RsX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfUEVSTUFORU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfaW5wdXRfY29udHJvbGxlcikpOworICBjaW5mby0+aW5wdXRjdGwgPSAoc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciAqKWlucHV0Y3RsOworICAvKiBJbml0aWFsaXplIG1ldGhvZCBwb2ludGVycyAqLworICBpbnB1dGN0bC0+cHViLmNvbnN1bWVfaW5wdXQgPSBjb25zdW1lX21hcmtlcnM7CisgIGlucHV0Y3RsLT5wdWIucmVzZXRfaW5wdXRfY29udHJvbGxlciA9IHJlc2V0X2lucHV0X2NvbnRyb2xsZXI7CisgIGlucHV0Y3RsLT5wdWIuc3RhcnRfaW5wdXRfcGFzcyA9IHN0YXJ0X2lucHV0X3Bhc3M7CisgIGlucHV0Y3RsLT5wdWIuZmluaXNoX2lucHV0X3Bhc3MgPSBmaW5pc2hfaW5wdXRfcGFzczsKKyAgLyogSW5pdGlhbGl6ZSBzdGF0ZTogY2FuJ3QgdXNlIHJlc2V0X2lucHV0X2NvbnRyb2xsZXIgc2luY2Ugd2UgZG9uJ3QKKyAgICogd2FudCB0byB0cnkgdG8gcmVzZXQgb3RoZXIgbW9kdWxlcyB5ZXQuCisgICAqLworICBpbnB1dGN0bC0+cHViLmhhc19tdWx0aXBsZV9zY2FucyA9IEZBTFNFOyAvKiAidW5rbm93biIgd291bGQgYmUgYmV0dGVyICovCisgIGlucHV0Y3RsLT5wdWIuZW9pX3JlYWNoZWQgPSBGQUxTRTsKKyAgaW5wdXRjdGwtPmluaGVhZGVycyA9IFRSVUU7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1haW5jdC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtYWluY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDMwMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtYWluY3QuYwpAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqIGpkbWFpbmN0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYWluIGJ1ZmZlciBjb250cm9sbGVyIGZvciBkZWNvbXByZXNzaW9uLgorICogVGhlIG1haW4gYnVmZmVyIGxpZXMgYmV0d2VlbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgcHJvcGVyIGFuZCB0aGUKKyAqIHBvc3QtcHJvY2Vzc29yOyBpdCBob2xkcyBkb3duc2FtcGxlZCBkYXRhIGluIHRoZSBKUEVHIGNvbG9yc3BhY2UuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBieXBhc3NlZCBpbiByYXctZGF0YSBtb2RlLCBzaW5jZSB0aGUgYXBwbGljYXRpb24KKyAqIHN1cHBsaWVzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBtYWluIGJ1ZmZlciBpbiB0aGF0IGNhc2UuCisgKi8KKworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAiamRtYWluY3QuaCIKKworCisvKgorICogSW4gdGhlIGN1cnJlbnQgc3lzdGVtIGRlc2lnbiwgdGhlIG1haW4gYnVmZmVyIG5lZWQgbmV2ZXIgYmUgYSBmdWxsLWltYWdlCisgKiBidWZmZXI7IGFueSBmdWxsLWhlaWdodCBidWZmZXJzIHdpbGwgYmUgZm91bmQgaW5zaWRlIHRoZSBjb2VmZmljaWVudCBvcgorICogcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlcnMuICBOb25ldGhlbGVzcywgdGhlIG1haW4gY29udHJvbGxlciBpcyBub3QKKyAqIHRyaXZpYWwuICBJdHMgcmVzcG9uc2liaWxpdHkgaXMgdG8gcHJvdmlkZSBjb250ZXh0IHJvd3MgZm9yIHVwc2FtcGxpbmcvCisgKiByZXNjYWxpbmcsIGFuZCBkb2luZyB0aGlzIGluIGFuIGVmZmljaWVudCBmYXNoaW9uIGlzIGEgYml0IHRyaWNreS4KKyAqCisgKiBQb3N0cHJvY2Vzc29yIGlucHV0IGRhdGEgaXMgY291bnRlZCBpbiAicm93IGdyb3VwcyIuICBBIHJvdyBncm91cAorICogaXMgZGVmaW5lZCB0byBiZSAodl9zYW1wX2ZhY3RvciAqIERDVF9zY2FsZWRfc2l6ZSAvIG1pbl9EQ1Rfc2NhbGVkX3NpemUpCisgKiBzYW1wbGUgcm93cyBvZiBlYWNoIGNvbXBvbmVudC4gIChXZSByZXF1aXJlIERDVF9zY2FsZWRfc2l6ZSB2YWx1ZXMgdG8gYmUKKyAqIGNob3NlbiBzdWNoIHRoYXQgdGhlc2UgbnVtYmVycyBhcmUgaW50ZWdlcnMuICBJbiBwcmFjdGljZSBEQ1Rfc2NhbGVkX3NpemUKKyAqIHZhbHVlcyB3aWxsIGxpa2VseSBiZSBwb3dlcnMgb2YgdHdvLCBzbyB3ZSBhY3R1YWxseSBoYXZlIHRoZSBzdHJvbmdlcgorICogY29uZGl0aW9uIHRoYXQgRENUX3NjYWxlZF9zaXplIC8gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyBhbiBpbnRlZ2VyLikKKyAqIFVwc2FtcGxpbmcgd2lsbCB0eXBpY2FsbHkgcHJvZHVjZSBtYXhfdl9zYW1wX2ZhY3RvciBwaXhlbCByb3dzIGZyb20gZWFjaAorICogcm93IGdyb3VwICh0aW1lcyBhbnkgYWRkaXRpb25hbCBzY2FsZSBmYWN0b3IgdGhhdCB0aGUgdXBzYW1wbGVyIGlzCisgKiBhcHBseWluZykuCisgKgorICogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIgd2lsbCBkZWxpdmVyIGRhdGEgdG8gdXMgb25lIGlNQ1Ugcm93IGF0IGEgdGltZTsKKyAqIGVhY2ggaU1DVSByb3cgY29udGFpbnMgdl9zYW1wX2ZhY3RvciAqIERDVF9zY2FsZWRfc2l6ZSBzYW1wbGUgcm93cywgb3IKKyAqIGV4YWN0bHkgbWluX0RDVF9zY2FsZWRfc2l6ZSByb3cgZ3JvdXBzLiAgKFRoaXMgYW1vdW50IG9mIGRhdGEgY29ycmVzcG9uZHMKKyAqIHRvIG9uZSByb3cgb2YgTUNVcyB3aGVuIHRoZSBpbWFnZSBpcyBmdWxseSBpbnRlcmxlYXZlZC4pICBOb3RlIHRoYXQgdGhlCisgKiBudW1iZXIgb2Ygc2FtcGxlIHJvd3MgdmFyaWVzIGFjcm9zcyBjb21wb25lbnRzLCBidXQgdGhlIG51bWJlciBvZiByb3cKKyAqIGdyb3VwcyBkb2VzIG5vdC4gIFNvbWUgZ2FyYmFnZSBzYW1wbGUgcm93cyBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIGxhc3QgaU1DVQorICogcm93IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLgorICoKKyAqIERlcGVuZGluZyBvbiB0aGUgdmVydGljYWwgc2NhbGluZyBhbGdvcml0aG0gdXNlZCwgdGhlIHVwc2FtcGxlciBtYXkgbmVlZAorICogYWNjZXNzIHRvIHRoZSBzYW1wbGUgcm93KHMpIGFib3ZlIGFuZCBiZWxvdyBpdHMgY3VycmVudCBpbnB1dCByb3cgZ3JvdXAuCisgKiBUaGUgdXBzYW1wbGVyIGlzIHJlcXVpcmVkIHRvIHNldCBuZWVkX2NvbnRleHRfcm93cyBUUlVFIGF0IGdsb2JhbCBzZWxlY3Rpb24KKyAqIHRpbWUgaWYgc28uICBXaGVuIG5lZWRfY29udGV4dF9yb3dzIGlzIEZBTFNFLCB0aGlzIGNvbnRyb2xsZXIgY2FuIHNpbXBseQorICogb2J0YWluIG9uZSBpTUNVIHJvdyBhdCBhIHRpbWUgZnJvbSB0aGUgY29lZmZpY2llbnQgY29udHJvbGxlciBhbmQgZG9sZSBpdAorICogb3V0IGFzIHJvdyBncm91cHMgdG8gdGhlIHBvc3Rwcm9jZXNzb3IuCisgKgorICogV2hlbiBuZWVkX2NvbnRleHRfcm93cyBpcyBUUlVFLCB0aGlzIGNvbnRyb2xsZXIgZ3VhcmFudGVlcyB0aGF0IHRoZSBidWZmZXIKKyAqIHBhc3NlZCB0byBwb3N0cHJvY2Vzc2luZyBjb250YWlucyBhdCBsZWFzdCBvbmUgcm93IGdyb3VwJ3Mgd29ydGggb2Ygc2FtcGxlcworICogYWJvdmUgYW5kIGJlbG93IHRoZSByb3cgZ3JvdXAocykgYmVpbmcgcHJvY2Vzc2VkLiAgTm90ZSB0aGF0IHRoZSBjb250ZXh0CisgKiByb3dzICJhYm92ZSIgdGhlIGZpcnN0IHBhc3NlZCByb3cgZ3JvdXAgYXBwZWFyIGF0IG5lZ2F0aXZlIHJvdyBvZmZzZXRzIGluCisgKiB0aGUgcGFzc2VkIGJ1ZmZlci4gIEF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHRoZSByZXF1aXJlZAorICogY29udGV4dCByb3dzIGFyZSBtYW51ZmFjdHVyZWQgYnkgZHVwbGljYXRpbmcgdGhlIGZpcnN0IG9yIGxhc3QgcmVhbCBzYW1wbGUKKyAqIHJvdzsgdGhpcyBhdm9pZHMgaGF2aW5nIHNwZWNpYWwgY2FzZXMgaW4gdGhlIHVwc2FtcGxpbmcgaW5uZXIgbG9vcHMuCisgKgorICogVGhlIGFtb3VudCBvZiBjb250ZXh0IGlzIGZpeGVkIGF0IG9uZSByb3cgZ3JvdXAganVzdCBiZWNhdXNlIHRoYXQncyBhCisgKiBjb252ZW5pZW50IG51bWJlciBmb3IgdGhpcyBjb250cm9sbGVyIHRvIHdvcmsgd2l0aC4gIFRoZSBleGlzdGluZworICogdXBzYW1wbGVycyByZWFsbHkgb25seSBuZWVkIG9uZSBzYW1wbGUgcm93IG9mIGNvbnRleHQuICBBbiB1cHNhbXBsZXIKKyAqIHN1cHBvcnRpbmcgYXJiaXRyYXJ5IG91dHB1dCByZXNjYWxpbmcgbWlnaHQgd2lzaCBmb3IgbW9yZSB0aGFuIG9uZSByb3cKKyAqIGdyb3VwIG9mIGNvbnRleHQgd2hlbiBzaHJpbmtpbmcgdGhlIGltYWdlOyB0b3VnaCwgd2UgZG9uJ3QgaGFuZGxlIHRoYXQuCisgKiAoVGhpcyBpcyBqdXN0aWZpZWQgYnkgdGhlIGFzc3VtcHRpb24gdGhhdCBkb3duc2l6aW5nIHdpbGwgYmUgaGFuZGxlZCBtb3N0bHkKKyAqIGJ5IGFkanVzdGluZyB0aGUgRENUX3NjYWxlZF9zaXplIHZhbHVlcywgc28gdGhhdCB0aGUgYWN0dWFsIHNjYWxlIGZhY3RvciBhdAorICogdGhlIHVwc2FtcGxlIHN0ZXAgbmVlZG4ndCBiZSBtdWNoIGxlc3MgdGhhbiBvbmUuKQorICoKKyAqIFRvIHByb3ZpZGUgdGhlIGRlc2lyZWQgY29udGV4dCwgd2UgaGF2ZSB0byByZXRhaW4gdGhlIGxhc3QgdHdvIHJvdyBncm91cHMKKyAqIG9mIG9uZSBpTUNVIHJvdyB3aGlsZSByZWFkaW5nIGluIHRoZSBuZXh0IGlNQ1Ugcm93LiAgKFRoZSBsYXN0IHJvdyBncm91cAorICogY2FuJ3QgYmUgcHJvY2Vzc2VkIHVudGlsIHdlIGhhdmUgYW5vdGhlciByb3cgZ3JvdXAgZm9yIGl0cyBiZWxvdy1jb250ZXh0LAorICogYW5kIHNvIHdlIGhhdmUgdG8gc2F2ZSB0aGUgbmV4dC10by1sYXN0IGdyb3VwIHRvbyBmb3IgaXRzIGFib3ZlLWNvbnRleHQuKQorICogV2UgY291bGQgZG8gdGhpcyBtb3N0IHNpbXBseSBieSBjb3B5aW5nIGRhdGEgYXJvdW5kIGluIG91ciBidWZmZXIsIGJ1dAorICogdGhhdCdkIGJlIHZlcnkgc2xvdy4gIFdlIGNhbiBhdm9pZCBjb3B5aW5nIGFueSBkYXRhIGJ5IGNyZWF0aW5nIGEgcmF0aGVyCisgKiBzdHJhbmdlIHBvaW50ZXIgc3RydWN0dXJlLiAgSGVyZSdzIGhvdyBpdCB3b3Jrcy4gIFdlIGFsbG9jYXRlIGEgd29ya3NwYWNlCisgKiBjb25zaXN0aW5nIG9mIE0rMiByb3cgZ3JvdXBzICh3aGVyZSBNID0gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyB0aGUgbnVtYmVyCisgKiBvZiByb3cgZ3JvdXBzIHBlciBpTUNVIHJvdykuICBXZSBjcmVhdGUgdHdvIHNldHMgb2YgcmVkdW5kYW50IHBvaW50ZXJzIHRvCisgKiB0aGUgd29ya3NwYWNlLiAgTGFiZWxpbmcgdGhlIHBoeXNpY2FsIHJvdyBncm91cHMgMCB0byBNKzEsIHRoZSBzeW50aGVzaXplZAorICogcG9pbnRlciBsaXN0cyBsb29rIGxpa2UgdGhpczoKKyAqICAgICAgICAgICAgICAgICAgIE0rMSAgICAgICAgICAgICAgICAgICAgICAgICAgTS0xCisgKiBtYXN0ZXIgcG9pbnRlciAtLT4gMCAgICAgICAgIG1hc3RlciBwb2ludGVyIC0tPiAwCisgKiAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgKiAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICogICAgICAgICAgICAgICAgICAgTS0zICAgICAgICAgICAgICAgICAgICAgICAgICBNLTMKKyAqICAgICAgICAgICAgICAgICAgIE0tMiAgICAgICAgICAgICAgICAgICAgICAgICAgIE0KKyAqICAgICAgICAgICAgICAgICAgIE0tMSAgICAgICAgICAgICAgICAgICAgICAgICAgTSsxCisgKiAgICAgICAgICAgICAgICAgICAgTSAgICAgICAgICAgICAgICAgICAgICAgICAgIE0tMgorICogICAgICAgICAgICAgICAgICAgTSsxICAgICAgICAgICAgICAgICAgICAgICAgICBNLTEKKyAqICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAqIFdlIHJlYWQgYWx0ZXJuYXRlIGlNQ1Ugcm93cyB1c2luZyBlYWNoIG1hc3RlciBwb2ludGVyOyB0aHVzIHRoZSBsYXN0IHR3bworICogcm93IGdyb3VwcyBvZiB0aGUgcHJldmlvdXMgaU1DVSByb3cgcmVtYWluIHVuLW92ZXJ3cml0dGVuIGluIHRoZSB3b3Jrc3BhY2UuCisgKiBUaGUgcG9pbnRlciBsaXN0cyBhcmUgc2V0IHVwIHNvIHRoYXQgdGhlIHJlcXVpcmVkIGNvbnRleHQgcm93cyBhcHBlYXIgdG8KKyAqIGJlIGFkamFjZW50IHRvIHRoZSBwcm9wZXIgcGxhY2VzIHdoZW4gd2UgcGFzcyB0aGUgcG9pbnRlciBsaXN0cyB0byB0aGUKKyAqIHVwc2FtcGxlci4KKyAqCisgKiBUaGUgYWJvdmUgcGljdHVyZXMgZGVzY3JpYmUgdGhlIG5vcm1hbCBzdGF0ZSBvZiB0aGUgcG9pbnRlciBsaXN0cy4KKyAqIEF0IHRvcCBhbmQgYm90dG9tIG9mIHRoZSBpbWFnZSwgd2UgZGlkZGxlIHRoZSBwb2ludGVyIGxpc3RzIHRvIGR1cGxpY2F0ZQorICogdGhlIGZpcnN0IG9yIGxhc3Qgc2FtcGxlIHJvdyBhcyBuZWNlc3NhcnkgKHRoaXMgaXMgY2hlYXBlciB0aGFuIGNvcHlpbmcKKyAqIHNhbXBsZSByb3dzIGFyb3VuZCkuCisgKgorICogVGhpcyBzY2hlbWUgYnJlYWtzIGRvd24gaWYgTSA8IDIsIGllLCBtaW5fRENUX3NjYWxlZF9zaXplIGlzIDEuICBJbiB0aGF0CisgKiBzaXR1YXRpb24gZWFjaCBpTUNVIHJvdyBwcm92aWRlcyBvbmx5IG9uZSByb3cgZ3JvdXAgc28gdGhlIGJ1ZmZlcmluZyBsb2dpYworICogbXVzdCBiZSBkaWZmZXJlbnQgKGVnLCB3ZSBtdXN0IHJlYWQgdHdvIGlNQ1Ugcm93cyBiZWZvcmUgd2UgY2FuIGVtaXQgdGhlCisgKiBmaXJzdCByb3cgZ3JvdXApLiAgRm9yIG5vdywgd2Ugc2ltcGx5IGRvIG5vdCBzdXBwb3J0IHByb3ZpZGluZyBjb250ZXh0CisgKiByb3dzIHdoZW4gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyAxLiAgVGhhdCBjb21iaW5hdGlvbiBzZWVtcyB1bmxpa2VseSB0bworICogYmUgd29ydGggcHJvdmlkaW5nIC0tLSBpZiBzb21lb25lIHdhbnRzIGEgMS84dGgtc2l6ZSBwcmV2aWV3LCB0aGV5IHByb2JhYmx5CisgKiB3YW50IGl0IHF1aWNrIGFuZCBkaXJ0eSwgc28gYSBjb250ZXh0LWZyZWUgdXBzYW1wbGVyIGlzIHN1ZmZpY2llbnQuCisgKi8KKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKTsKK01FVEhPRERFRih2b2lkKSBwcm9jZXNzX2RhdGFfY29udGV4dF9tYWluKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9jcmFua19wb3N0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpOworI2VuZGlmCisKKworTE9DQUwodm9pZCkKK2FsbG9jX2Z1bm55X3BvaW50ZXJzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGZ1bm55IHBvaW50ZXIgbGlzdHMuCisgKiBUaGlzIGlzIGRvbmUgb25seSBvbmNlLCBub3Qgb25jZSBwZXIgcGFzcy4KKyAqLworeworICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0ciljaW5mby0+bWFpbjsKKyAgaW50IGNpLCByZ3JvdXA7CisgIGludCBNID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKU0FNUEFSUkFZIHhidWY7CisKKyAgLyogR2V0IHRvcC1sZXZlbCBzcGFjZSBmb3IgY29tcG9uZW50IGFycmF5IHBvaW50ZXJzLgorICAgKiBXZSBhbGxvYyBib3RoIGFycmF5cyB3aXRoIG9uZSBjYWxsIHRvIHNhdmUgYSBmZXcgY3ljbGVzLgorICAgKi8KKyAgbWFpbl9wdHItPnhidWZmZXJbMF0gPSAoSlNBTVBJTUFHRSkKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqIDIgKiBzaXplb2YoSlNBTVBBUlJBWSkpOworICBtYWluX3B0ci0+eGJ1ZmZlclsxXSA9IG1haW5fcHRyLT54YnVmZmVyWzBdICsgY2luZm8tPm51bV9jb21wb25lbnRzOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgcmdyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCisgICAgICBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8KKyAgICAvKiBHZXQgc3BhY2UgZm9yIHBvaW50ZXIgbGlzdHMgLS0tIE0rNCByb3cgZ3JvdXBzIGluIGVhY2ggbGlzdC4KKyAgICAgKiBXZSBhbGxvYyBib3RoIHBvaW50ZXIgbGlzdHMgd2l0aCBvbmUgY2FsbCB0byBzYXZlIGEgZmV3IGN5Y2xlcy4KKyAgICAgKi8KKyAgICB4YnVmID0gKEpTQU1QQVJSQVkpCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIChyZ3JvdXAgKiAoTSArIDQpKSAqIHNpemVvZihKU0FNUFJPVykpOworICAgIHhidWYgKz0gcmdyb3VwOyAgICAgICAgICAgICAvKiB3YW50IG9uZSByb3cgZ3JvdXAgYXQgbmVnYXRpdmUgb2Zmc2V0cyAqLworICAgIG1haW5fcHRyLT54YnVmZmVyWzBdW2NpXSA9IHhidWY7CisgICAgeGJ1ZiArPSByZ3JvdXAgKiAoTSArIDQpOworICAgIG1haW5fcHRyLT54YnVmZmVyWzFdW2NpXSA9IHhidWY7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorbWFrZV9mdW5ueV9wb2ludGVycyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogQ3JlYXRlIHRoZSBmdW5ueSBwb2ludGVyIGxpc3RzIGRpc2N1c3NlZCBpbiB0aGUgY29tbWVudHMgYWJvdmUuCisgKiBUaGUgYWN0dWFsIHdvcmtzcGFjZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCAoaW4gbWFpbl9wdHItPmJ1ZmZlciksCisgKiBhbmQgdGhlIHNwYWNlIGZvciB0aGUgcG9pbnRlciBsaXN0cyBpcyBhbGxvY2F0ZWQgdG9vLgorICogVGhpcyByb3V0aW5lIGp1c3QgZmlsbHMgaW4gdGhlIGN1cmlvdXNseSBvcmRlcmVkIGxpc3RzLgorICogVGhpcyB3aWxsIGJlIHJlcGVhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBwYXNzLgorICovCit7CisgIG15X21haW5fcHRyIG1haW5fcHRyID0gKG15X21haW5fcHRyKWNpbmZvLT5tYWluOworICBpbnQgY2ksIGksIHJncm91cDsKKyAgaW50IE0gPSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpTQU1QQVJSQVkgYnVmLCB4YnVmMCwgeGJ1ZjE7CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLworICAgIHhidWYwID0gbWFpbl9wdHItPnhidWZmZXJbMF1bY2ldOworICAgIHhidWYxID0gbWFpbl9wdHItPnhidWZmZXJbMV1bY2ldOworICAgIC8qIEZpcnN0IGNvcHkgdGhlIHdvcmtzcGFjZSBwb2ludGVycyBhcy1pcyAqLworICAgIGJ1ZiA9IG1haW5fcHRyLT5idWZmZXJbY2ldOworICAgIGZvciAoaSA9IDA7IGkgPCByZ3JvdXAgKiAoTSArIDIpOyBpKyspIHsKKyAgICAgIHhidWYwW2ldID0geGJ1ZjFbaV0gPSBidWZbaV07CisgICAgfQorICAgIC8qIEluIHRoZSBzZWNvbmQgbGlzdCwgcHV0IHRoZSBsYXN0IGZvdXIgcm93IGdyb3VwcyBpbiBzd2FwcGVkIG9yZGVyICovCisgICAgZm9yIChpID0gMDsgaSA8IHJncm91cCAqIDI7IGkrKykgeworICAgICAgeGJ1ZjFbcmdyb3VwICogKE0gLSAyKSArIGldID0gYnVmW3Jncm91cCAqIE0gKyBpXTsKKyAgICAgIHhidWYxW3Jncm91cCAqIE0gKyBpXSA9IGJ1ZltyZ3JvdXAgKiAoTSAtIDIpICsgaV07CisgICAgfQorICAgIC8qIFRoZSB3cmFwYXJvdW5kIHBvaW50ZXJzIGF0IHRvcCBhbmQgYm90dG9tIHdpbGwgYmUgZmlsbGVkIGxhdGVyCisgICAgICogKHNlZSBzZXRfd3JhcGFyb3VuZF9wb2ludGVycywgYmVsb3cpLiAgSW5pdGlhbGx5IHdlIHdhbnQgdGhlICJhYm92ZSIKKyAgICAgKiBwb2ludGVycyB0byBkdXBsaWNhdGUgdGhlIGZpcnN0IGFjdHVhbCBkYXRhIGxpbmUuICBUaGlzIG9ubHkgbmVlZHMKKyAgICAgKiB0byBoYXBwZW4gaW4geGJ1ZmZlclswXS4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwOyBpKyspIHsKKyAgICAgIHhidWYwW2kgLSByZ3JvdXBdID0geGJ1ZjBbMF07CisgICAgfQorICB9Cit9CisKKworTE9DQUwodm9pZCkKK3NldF9ib3R0b21fcG9pbnRlcnMoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIENoYW5nZSB0aGUgcG9pbnRlciBsaXN0cyB0byBkdXBsaWNhdGUgdGhlIGxhc3Qgc2FtcGxlIHJvdyBhdCB0aGUgYm90dG9tCisgKiBvZiB0aGUgaW1hZ2UuICB3aGljaHB0ciBpbmRpY2F0ZXMgd2hpY2ggeGJ1ZmZlciBob2xkcyB0aGUgZmluYWwgaU1DVSByb3cuCisgKiBBbHNvIHNldHMgcm93Z3JvdXBzX2F2YWlsIHRvIGluZGljYXRlIG51bWJlciBvZiBub25kdW1teSByb3cgZ3JvdXBzIGluIHJvdy4KKyAqLworeworICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0ciljaW5mby0+bWFpbjsKKyAgaW50IGNpLCBpLCByZ3JvdXAsIGlNQ1VoZWlnaHQsIHJvd3NfbGVmdDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgSlNBTVBBUlJBWSB4YnVmOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogQ291bnQgc2FtcGxlIHJvd3MgaW4gb25lIGlNQ1Ugcm93IGFuZCBpbiBvbmUgcm93IGdyb3VwICovCisgICAgaU1DVWhlaWdodCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOworICAgIHJncm91cCA9IGlNQ1VoZWlnaHQgLyBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgLyogQ291bnQgbm9uZHVtbXkgc2FtcGxlIHJvd3MgcmVtYWluaW5nIGZvciB0aGlzIGNvbXBvbmVudCAqLworICAgIHJvd3NfbGVmdCA9IChpbnQpKGNvbXBwdHItPmRvd25zYW1wbGVkX2hlaWdodCAlIChKRElNRU5TSU9OKWlNQ1VoZWlnaHQpOworICAgIGlmIChyb3dzX2xlZnQgPT0gMCkgcm93c19sZWZ0ID0gaU1DVWhlaWdodDsKKyAgICAvKiBDb3VudCBub25kdW1teSByb3cgZ3JvdXBzLiAgU2hvdWxkIGdldCBzYW1lIGFuc3dlciBmb3IgZWFjaCBjb21wb25lbnQsCisgICAgICogc28gd2UgbmVlZCBvbmx5IGRvIGl0IG9uY2UuCisgICAgICovCisgICAgaWYgKGNpID09IDApIHsKKyAgICAgIG1haW5fcHRyLT5yb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikoKHJvd3NfbGVmdCAtIDEpIC8gcmdyb3VwICsgMSk7CisgICAgfQorICAgIC8qIER1cGxpY2F0ZSB0aGUgbGFzdCByZWFsIHNhbXBsZSByb3cgcmdyb3VwKjIgdGltZXM7IHRoaXMgcGFkcyBvdXQgdGhlCisgICAgICogbGFzdCBwYXJ0aWFsIHJvd2dyb3VwIGFuZCBlbnN1cmVzIGF0IGxlYXN0IG9uZSBmdWxsIHJvd2dyb3VwIG9mIGNvbnRleHQuCisgICAgICovCisgICAgeGJ1ZiA9IG1haW5fcHRyLT54YnVmZmVyW21haW5fcHRyLT53aGljaHB0cl1bY2ldOworICAgIGZvciAoaSA9IDA7IGkgPCByZ3JvdXAgKiAyOyBpKyspIHsKKyAgICAgIHhidWZbcm93c19sZWZ0ICsgaV0gPSB4YnVmW3Jvd3NfbGVmdCAtIDFdOworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfbWFpbihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkKK3sKKyAgbXlfbWFpbl9wdHIgbWFpbl9wdHIgPSAobXlfbWFpbl9wdHIpY2luZm8tPm1haW47CisKKyAgc3dpdGNoIChwYXNzX21vZGUpIHsKKyAgY2FzZSBKQlVGX1BBU1NfVEhSVToKKyAgICBpZiAoY2luZm8tPnVwc2FtcGxlLT5uZWVkX2NvbnRleHRfcm93cykgeworICAgICAgbWFpbl9wdHItPnB1Yi5wcm9jZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGFfY29udGV4dF9tYWluOworICAgICAgbWFrZV9mdW5ueV9wb2ludGVycyhjaW5mbyk7IC8qIENyZWF0ZSB0aGUgeGJ1ZmZlcltdIGxpc3RzICovCisgICAgICBtYWluX3B0ci0+d2hpY2hwdHIgPSAwOyAgIC8qIFJlYWQgZmlyc3QgaU1DVSByb3cgaW50byB4YnVmZmVyWzBdICovCisgICAgICBtYWluX3B0ci0+Y29udGV4dF9zdGF0ZSA9IENUWF9QUkVQQVJFX0ZPUl9JTUNVOworICAgICAgbWFpbl9wdHItPmlNQ1Vfcm93X2N0ciA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIFNpbXBsZSBjYXNlIHdpdGggbm8gY29udGV4dCBuZWVkZWQgKi8KKyAgICAgIG1haW5fcHRyLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluOworICAgIH0KKyAgICBtYWluX3B0ci0+YnVmZmVyX2Z1bGwgPSBGQUxTRTsgICAgICAvKiBNYXJrIGJ1ZmZlciBlbXB0eSAqLworICAgIG1haW5fcHRyLT5yb3dncm91cF9jdHIgPSAwOworICAgIGJyZWFrOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorICBjYXNlIEpCVUZfQ1JBTktfREVTVDoKKyAgICAvKiBGb3IgbGFzdCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24sIGp1c3QgY3JhbmsgdGhlIHBvc3Rwcm9jZXNzb3IgKi8KKyAgICBtYWluX3B0ci0+cHViLnByb2Nlc3NfZGF0YSA9IHByb2Nlc3NfZGF0YV9jcmFua19wb3N0OworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhLgorICogVGhpcyBoYW5kbGVzIHRoZSBzaW1wbGUgY2FzZSB3aGVyZSBubyBjb250ZXh0IGlzIHJlcXVpcmVkLgorICovCisKK01FVEhPRERFRih2b2lkKQorcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkKK3sKKyAgbXlfbWFpbl9wdHIgbWFpbl9wdHIgPSAobXlfbWFpbl9wdHIpY2luZm8tPm1haW47CisgIEpESU1FTlNJT04gcm93Z3JvdXBzX2F2YWlsOworCisgIC8qIFJlYWQgaW5wdXQgZGF0YSBpZiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgbWFpbiBidWZmZXIgeWV0ICovCisgIGlmICghbWFpbl9wdHItPmJ1ZmZlcl9mdWxsKSB7CisgICAgaWYgKCEoKmNpbmZvLT5jb2VmLT5kZWNvbXByZXNzX2RhdGEpIChjaW5mbywgbWFpbl9wdHItPmJ1ZmZlcikpCisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCisgICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gVFJVRTsgICAgICAgLyogT0ssIHdlIGhhdmUgYW4gaU1DVSByb3cgdG8gd29yayB3aXRoICovCisgIH0KKworICAvKiBUaGVyZSBhcmUgYWx3YXlzIG1pbl9EQ1Rfc2NhbGVkX3NpemUgcm93IGdyb3VwcyBpbiBhbiBpTUNVIHJvdy4gKi8KKyAgcm93Z3JvdXBzX2F2YWlsID0gKEpESU1FTlNJT04pY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOworICAvKiBOb3RlOiBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSwgd2UgbWF5IHBhc3MgZXh0cmEgZ2FyYmFnZSByb3cgZ3JvdXBzCisgICAqIHRvIHRoZSBwb3N0cHJvY2Vzc29yLiAgVGhlIHBvc3Rwcm9jZXNzb3IgaGFzIHRvIGNoZWNrIGZvciBib3R0b20KKyAgICogb2YgaW1hZ2UgYW55d2F5IChhdCByb3cgcmVzb2x1dGlvbiksIHNvIG5vIHBvaW50IGluIHVzIGRvaW5nIGl0IHRvby4KKyAgICovCisKKyAgLyogRmVlZCB0aGUgcG9zdHByb2Nlc3NvciAqLworICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLCBtYWluX3B0ci0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLCByb3dncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Ziwgb3V0X3Jvd19jdHIsIG91dF9yb3dzX2F2YWlsKTsKKworICAvKiBIYXMgcG9zdHByb2Nlc3NvciBjb25zdW1lZCBhbGwgdGhlIGRhdGEgeWV0PyBJZiBzbywgbWFyayBidWZmZXIgZW1wdHkgKi8KKyAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgPj0gcm93Z3JvdXBzX2F2YWlsKSB7CisgICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gRkFMU0U7CisgICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CisgIH0KK30KKworCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEuCisgKiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgY29udGV4dCByb3dzIG11c3QgYmUgcHJvdmlkZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwcm9jZXNzX2RhdGFfY29udGV4dF9tYWluKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCit7CisgIG15X21haW5fcHRyIG1haW5fcHRyID0gKG15X21haW5fcHRyKWNpbmZvLT5tYWluOworCisgIC8qIFJlYWQgaW5wdXQgZGF0YSBpZiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgbWFpbiBidWZmZXIgeWV0ICovCisgIGlmICghbWFpbl9wdHItPmJ1ZmZlcl9mdWxsKSB7CisgICAgaWYgKCEoKmNpbmZvLT5jb2VmLT5kZWNvbXByZXNzX2RhdGEpIChjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHRyLT54YnVmZmVyW21haW5fcHRyLT53aGljaHB0cl0pKQorICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiBzdXNwZW5zaW9uIGZvcmNlZCwgY2FuIGRvIG5vdGhpbmcgbW9yZSAqLworICAgIG1haW5fcHRyLT5idWZmZXJfZnVsbCA9IFRSVUU7ICAgICAgIC8qIE9LLCB3ZSBoYXZlIGFuIGlNQ1Ugcm93IHRvIHdvcmsgd2l0aCAqLworICAgIG1haW5fcHRyLT5pTUNVX3Jvd19jdHIrKzsgICAvKiBjb3VudCByb3dzIHJlY2VpdmVkICovCisgIH0KKworICAvKiBQb3N0cHJvY2Vzc29yIHR5cGljYWxseSB3aWxsIG5vdCBzd2FsbG93IGFsbCB0aGUgaW5wdXQgZGF0YSBpdCBpcyBoYW5kZWQKKyAgICogaW4gb25lIGNhbGwgKGR1ZSB0byBmaWxsaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGZpcnN0KS4gIE11c3QgYmUgcHJlcGFyZWQKKyAgICogdG8gZXhpdCBhbmQgcmVzdGFydC4gIFRoaXMgc3dpdGNoIGxldHMgdXMga2VlcCB0cmFjayBvZiBob3cgZmFyIHdlIGdvdC4KKyAgICogTm90ZSB0aGF0IGVhY2ggY2FzZSBmYWxscyB0aHJvdWdoIHRvIHRoZSBuZXh0IG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKyAgICovCisgIHN3aXRjaCAobWFpbl9wdHItPmNvbnRleHRfc3RhdGUpIHsKKyAgY2FzZSBDVFhfUE9TVFBPTkVEX1JPVzoKKyAgICAvKiBDYWxsIHBvc3Rwcm9jZXNzb3IgdXNpbmcgcHJldmlvdXNseSBzZXQgcG9pbnRlcnMgZm9yIHBvc3Rwb25lZCByb3cgKi8KKyAgICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wdHItPnhidWZmZXJbbWFpbl9wdHItPndoaWNocHRyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wdHItPnJvd2dyb3Vwc19hdmFpbCwgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7CisgICAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgPCBtYWluX3B0ci0+cm93Z3JvdXBzX2F2YWlsKQorICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIHN1c3BlbmQgKi8KKyAgICBtYWluX3B0ci0+Y29udGV4dF9zdGF0ZSA9IENUWF9QUkVQQVJFX0ZPUl9JTUNVOworICAgIGlmICgqb3V0X3Jvd19jdHIgPj0gb3V0X3Jvd3NfYXZhaWwpCisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8qIFBvc3Rwcm9jZXNzb3IgZXhhY3RseSBmaWxsZWQgb3V0cHV0IGJ1ZiAqLworICAgIC8qRkFMTFRIUk9VR0gqLworICBjYXNlIENUWF9QUkVQQVJFX0ZPUl9JTUNVOgorICAgIC8qIFByZXBhcmUgdG8gcHJvY2VzcyBmaXJzdCBNLTEgcm93IGdyb3VwcyBvZiB0aGlzIGlNQ1Ugcm93ICovCisgICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CisgICAgbWFpbl9wdHItPnJvd2dyb3Vwc19hdmFpbCA9IChKRElNRU5TSU9OKShjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUgLSAxKTsKKyAgICAvKiBDaGVjayBmb3IgYm90dG9tIG9mIGltYWdlOiBpZiBzbywgdHdlYWsgcG9pbnRlcnMgdG8gImR1cGxpY2F0ZSIKKyAgICAgKiB0aGUgbGFzdCBzYW1wbGUgcm93LCBhbmQgYWRqdXN0IHJvd2dyb3Vwc19hdmFpbCB0byBpZ25vcmUgcGFkZGluZyByb3dzLgorICAgICAqLworICAgIGlmIChtYWluX3B0ci0+aU1DVV9yb3dfY3RyID09IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpCisgICAgICBzZXRfYm90dG9tX3BvaW50ZXJzKGNpbmZvKTsKKyAgICBtYWluX3B0ci0+Y29udGV4dF9zdGF0ZSA9IENUWF9QUk9DRVNTX0lNQ1U7CisgICAgLypGQUxMVEhST1VHSCovCisgIGNhc2UgQ1RYX1BST0NFU1NfSU1DVToKKyAgICAvKiBDYWxsIHBvc3Rwcm9jZXNzb3IgdXNpbmcgcHJldmlvdXNseSBzZXQgcG9pbnRlcnMgKi8KKyAgICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wdHItPnhidWZmZXJbbWFpbl9wdHItPndoaWNocHRyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wdHItPnJvd2dyb3Vwc19hdmFpbCwgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7CisgICAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgPCBtYWluX3B0ci0+cm93Z3JvdXBzX2F2YWlsKQorICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIHN1c3BlbmQgKi8KKyAgICAvKiBBZnRlciB0aGUgZmlyc3QgaU1DVSwgY2hhbmdlIHdyYXBhcm91bmQgcG9pbnRlcnMgdG8gbm9ybWFsIHN0YXRlICovCisgICAgaWYgKG1haW5fcHRyLT5pTUNVX3Jvd19jdHIgPT0gMSkKKyAgICAgIHNldF93cmFwYXJvdW5kX3BvaW50ZXJzKGNpbmZvKTsKKyAgICAvKiBQcmVwYXJlIHRvIGxvYWQgbmV3IGlNQ1Ugcm93IHVzaW5nIG90aGVyIHhidWZmZXIgbGlzdCAqLworICAgIG1haW5fcHRyLT53aGljaHB0ciBePSAxOyAgICAvKiAwPT4xIG9yIDE9PjAgKi8KKyAgICBtYWluX3B0ci0+YnVmZmVyX2Z1bGwgPSBGQUxTRTsKKyAgICAvKiBTdGlsbCBuZWVkIHRvIHByb2Nlc3MgbGFzdCByb3cgZ3JvdXAgb2YgdGhpcyBpTUNVIHJvdywgKi8KKyAgICAvKiB3aGljaCBpcyBzYXZlZCBhdCBpbmRleCBNKzEgb2YgdGhlIG90aGVyIHhidWZmZXIgKi8KKyAgICBtYWluX3B0ci0+cm93Z3JvdXBfY3RyID0gKEpESU1FTlNJT04pKGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSArIDEpOworICAgIG1haW5fcHRyLT5yb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikoY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplICsgMik7CisgICAgbWFpbl9wdHItPmNvbnRleHRfc3RhdGUgPSBDVFhfUE9TVFBPTkVEX1JPVzsKKyAgfQorfQorCisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YS4KKyAqIEZpbmFsIHBhc3Mgb2YgdHdvLXBhc3MgcXVhbnRpemF0aW9uOiBqdXN0IGNhbGwgdGhlIHBvc3Rwcm9jZXNzb3IuCisgKiBTb3VyY2UgZGF0YSB3aWxsIGJlIHRoZSBwb3N0cHJvY2Vzc29yIGNvbnRyb2xsZXIncyBpbnRlcm5hbCBidWZmZXIuCisgKi8KKworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorCitNRVRIT0RERUYodm9pZCkKK3Byb2Nlc3NfZGF0YV9jcmFua19wb3N0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLCBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQoreworICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLCAoSlNBTVBJTUFHRSlOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OICopTlVMTCwgKEpESU1FTlNJT04pMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmLCBvdXRfcm93X2N0ciwgb3V0X3Jvd3NfYXZhaWwpOworfQorCisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgbWFpbiBidWZmZXIgY29udHJvbGxlci4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2RfbWFpbl9jb250cm9sbGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikKK3sKKyAgbXlfbWFpbl9wdHIgbWFpbl9wdHI7CisgIGludCBjaSwgcmdyb3VwLCBuZ3JvdXBzOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIG1haW5fcHRyID0gKG15X21haW5fcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG15X21haW5fY29udHJvbGxlcikpOworICBjaW5mby0+bWFpbiA9IChzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciAqKW1haW5fcHRyOworICBtYWluX3B0ci0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX21haW47CisKKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpICAgICAgICAgLyogc2hvdWxkbid0IGhhcHBlbiAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKKworICAvKiBBbGxvY2F0ZSB0aGUgd29ya3NwYWNlLgorICAgKiBuZ3JvdXBzIGlzIHRoZSBudW1iZXIgb2Ygcm93IGdyb3VwcyB3ZSBuZWVkLgorICAgKi8KKyAgaWYgKGNpbmZvLT51cHNhbXBsZS0+bmVlZF9jb250ZXh0X3Jvd3MpIHsKKyAgICBpZiAoY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplIDwgMikgLyogdW5zdXBwb3J0ZWQsIHNlZSBjb21tZW50cyBhYm92ZSAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RJTVBMKTsKKyAgICBhbGxvY19mdW5ueV9wb2ludGVycyhjaW5mbyk7IC8qIEFsbG9jIHNwYWNlIGZvciB4YnVmZmVyW10gbGlzdHMgKi8KKyAgICBuZ3JvdXBzID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplICsgMjsKKyAgfSBlbHNlIHsKKyAgICBuZ3JvdXBzID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOworICB9CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLworICAgIG1haW5fcHRyLT5idWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgICAgICAgICAgICAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoSkRJTUVOU0lPTikocmdyb3VwICogbmdyb3VwcykpOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1haW5jdC5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtYWluY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2IyMDFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtYWluY3QuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogamRtYWluY3QuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgorCisKKy8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogUG9pbnRlciB0byBhbGxvY2F0ZWQgd29ya3NwYWNlIChNIG9yIE0rMiByb3cgZ3JvdXBzKS4gKi8KKyAgSlNBTVBBUlJBWSBidWZmZXJbTUFYX0NPTVBPTkVOVFNdOworCisgIGJvb2xlYW4gYnVmZmVyX2Z1bGw7ICAgICAgICAgIC8qIEhhdmUgd2UgZ290dGVuIGFuIGlNQ1Ugcm93IGZyb20gZGVjb2Rlcj8gKi8KKyAgSkRJTUVOU0lPTiByb3dncm91cF9jdHI7ICAgICAgLyogY291bnRzIHJvdyBncm91cHMgb3V0cHV0IHRvIHBvc3Rwcm9jZXNzb3IgKi8KKworICAvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBvbmx5IHVzZWQgaW4gdGhlIGNvbnRleHQgY2FzZS4gKi8KKworICAvKiBUaGVzZSBhcmUgdGhlIG1hc3RlciBwb2ludGVycyB0byB0aGUgZnVubnktb3JkZXIgcG9pbnRlciBsaXN0cy4gKi8KKyAgSlNBTVBJTUFHRSB4YnVmZmVyWzJdOyAgICAgICAgLyogcG9pbnRlcnMgdG8gd2VpcmQgcG9pbnRlciBsaXN0cyAqLworCisgIGludCB3aGljaHB0cjsgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlcyB3aGljaCBwb2ludGVyIHNldCBpcyBub3cgaW4gdXNlICovCisgIGludCBjb250ZXh0X3N0YXRlOyAgICAgICAgICAgIC8qIHByb2Nlc3NfZGF0YSBzdGF0ZSBtYWNoaW5lIHN0YXR1cyAqLworICBKRElNRU5TSU9OIHJvd2dyb3Vwc19hdmFpbDsgICAvKiByb3cgZ3JvdXBzIGF2YWlsYWJsZSB0byBwb3N0cHJvY2Vzc29yICovCisgIEpESU1FTlNJT04gaU1DVV9yb3dfY3RyOyAgICAgIC8qIGNvdW50cyBpTUNVIHJvd3MgdG8gZGV0ZWN0IGltYWdlIHRvcC9ib3QgKi8KK30gbXlfbWFpbl9jb250cm9sbGVyOworCit0eXBlZGVmIG15X21haW5fY29udHJvbGxlciAqbXlfbWFpbl9wdHI7CisKKworLyogY29udGV4dF9zdGF0ZSB2YWx1ZXM6ICovCisjZGVmaW5lIENUWF9QUkVQQVJFX0ZPUl9JTUNVICAgIDAgICAgICAgLyogbmVlZCB0byBwcmVwYXJlIGZvciBNQ1Ugcm93ICovCisjZGVmaW5lIENUWF9QUk9DRVNTX0lNQ1UgICAgICAgIDEgICAgICAgLyogZmVlZGluZyBpTUNVIHRvIHBvc3Rwcm9jZXNzb3IgKi8KKyNkZWZpbmUgQ1RYX1BPU1RQT05FRF9ST1cgICAgICAgMiAgICAgICAvKiBmZWVkaW5nIHBvc3Rwb25lZCByb3cgZ3JvdXAgKi8KKworCitMT0NBTCh2b2lkKQorc2V0X3dyYXBhcm91bmRfcG9pbnRlcnMoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFNldCB1cCB0aGUgIndyYXBhcm91bmQiIHBvaW50ZXJzIGF0IHRvcCBhbmQgYm90dG9tIG9mIHRoZSBwb2ludGVyIGxpc3RzLgorICogVGhpcyBjaGFuZ2VzIHRoZSBwb2ludGVyIGxpc3Qgc3RhdGUgZnJvbSB0b3Atb2YtaW1hZ2UgdG8gdGhlIG5vcm1hbCBzdGF0ZS4KKyAqLworeworICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0ciljaW5mby0+bWFpbjsKKyAgaW50IGNpLCBpLCByZ3JvdXA7CisgIGludCBNID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKU0FNUEFSUkFZIHhidWYwLCB4YnVmMTsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSkgLworICAgICAgY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOyAvKiBoZWlnaHQgb2YgYSByb3cgZ3JvdXAgb2YgY29tcG9uZW50ICovCisgICAgeGJ1ZjAgPSBtYWluX3B0ci0+eGJ1ZmZlclswXVtjaV07CisgICAgeGJ1ZjEgPSBtYWluX3B0ci0+eGJ1ZmZlclsxXVtjaV07CisgICAgZm9yIChpID0gMDsgaSA8IHJncm91cDsgaSsrKSB7CisgICAgICB4YnVmMFtpIC0gcmdyb3VwXSA9IHhidWYwW3Jncm91cCAqIChNICsgMSkgKyBpXTsKKyAgICAgIHhidWYxW2kgLSByZ3JvdXBdID0geGJ1ZjFbcmdyb3VwICogKE0gKyAxKSArIGldOworICAgICAgeGJ1ZjBbcmdyb3VwICogKE0gKyAyKSArIGldID0geGJ1ZjBbaV07CisgICAgICB4YnVmMVtyZ3JvdXAgKiAoTSArIDIpICsgaV0gPSB4YnVmMVtpXTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbWFya2VyLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1hcmtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YzdlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1hcmtlci5jCkBAIC0wLDAgKzEsMTM3NyBAQAorLyoKKyAqIGpkbWFya2VyLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRvIGRlY29kZSBKUEVHIGRhdGFzdHJlYW0gbWFya2Vycy4KKyAqIE1vc3Qgb2YgdGhlIGNvbXBsZXhpdHkgYXJpc2VzIGZyb20gb3VyIGRlc2lyZSB0byBzdXBwb3J0IGlucHV0CisgKiBzdXNwZW5zaW9uOiBpZiBub3QgYWxsIG9mIHRoZSBkYXRhIGZvciBhIG1hcmtlciBpcyBhdmFpbGFibGUsCisgKiB3ZSBtdXN0IGV4aXQgYmFjayB0byB0aGUgYXBwbGljYXRpb24uICBPbiByZXN1bXB0aW9uLCB3ZSByZXByb2Nlc3MKKyAqIHRoZSBtYXJrZXIuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKK3R5cGVkZWYgZW51bSB7ICAgICAgICAgICAgICAgICAgLyogSlBFRyBtYXJrZXIgY29kZXMgKi8KKyAgTV9TT0YwICA9IDB4YzAsCisgIE1fU09GMSAgPSAweGMxLAorICBNX1NPRjIgID0gMHhjMiwKKyAgTV9TT0YzICA9IDB4YzMsCisKKyAgTV9TT0Y1ICA9IDB4YzUsCisgIE1fU09GNiAgPSAweGM2LAorICBNX1NPRjcgID0gMHhjNywKKworICBNX0pQRyAgID0gMHhjOCwKKyAgTV9TT0Y5ICA9IDB4YzksCisgIE1fU09GMTAgPSAweGNhLAorICBNX1NPRjExID0gMHhjYiwKKworICBNX1NPRjEzID0gMHhjZCwKKyAgTV9TT0YxNCA9IDB4Y2UsCisgIE1fU09GMTUgPSAweGNmLAorCisgIE1fREhUICAgPSAweGM0LAorCisgIE1fREFDICAgPSAweGNjLAorCisgIE1fUlNUMCAgPSAweGQwLAorICBNX1JTVDEgID0gMHhkMSwKKyAgTV9SU1QyICA9IDB4ZDIsCisgIE1fUlNUMyAgPSAweGQzLAorICBNX1JTVDQgID0gMHhkNCwKKyAgTV9SU1Q1ICA9IDB4ZDUsCisgIE1fUlNUNiAgPSAweGQ2LAorICBNX1JTVDcgID0gMHhkNywKKworICBNX1NPSSAgID0gMHhkOCwKKyAgTV9FT0kgICA9IDB4ZDksCisgIE1fU09TICAgPSAweGRhLAorICBNX0RRVCAgID0gMHhkYiwKKyAgTV9ETkwgICA9IDB4ZGMsCisgIE1fRFJJICAgPSAweGRkLAorICBNX0RIUCAgID0gMHhkZSwKKyAgTV9FWFAgICA9IDB4ZGYsCisKKyAgTV9BUFAwICA9IDB4ZTAsCisgIE1fQVBQMSAgPSAweGUxLAorICBNX0FQUDIgID0gMHhlMiwKKyAgTV9BUFAzICA9IDB4ZTMsCisgIE1fQVBQNCAgPSAweGU0LAorICBNX0FQUDUgID0gMHhlNSwKKyAgTV9BUFA2ICA9IDB4ZTYsCisgIE1fQVBQNyAgPSAweGU3LAorICBNX0FQUDggID0gMHhlOCwKKyAgTV9BUFA5ICA9IDB4ZTksCisgIE1fQVBQMTAgPSAweGVhLAorICBNX0FQUDExID0gMHhlYiwKKyAgTV9BUFAxMiA9IDB4ZWMsCisgIE1fQVBQMTMgPSAweGVkLAorICBNX0FQUDE0ID0gMHhlZSwKKyAgTV9BUFAxNSA9IDB4ZWYsCisKKyAgTV9KUEcwICA9IDB4ZjAsCisgIE1fSlBHMTMgPSAweGZkLAorICBNX0NPTSAgID0gMHhmZSwKKworICBNX1RFTSAgID0gMHgwMSwKKworICBNX0VSUk9SID0gMHgxMDAKK30gSlBFR19NQVJLRVI7CisKKworLyogUHJpdmF0ZSBzdGF0ZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogQXBwbGljYXRpb24tb3ZlcnJpZGFibGUgbWFya2VyIHByb2Nlc3NpbmcgbWV0aG9kcyAqLworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NfQ09NOworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NfQVBQblsxNl07CisKKyAgLyogTGltaXQgb24gbWFya2VyIGRhdGEgbGVuZ3RoIHRvIHNhdmUgZm9yIGVhY2ggbWFya2VyIHR5cGUgKi8KKyAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdF9DT007CisgIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXRfQVBQblsxNl07CisKKyAgLyogU3RhdHVzIG9mIENPTS9BUFBuIG1hcmtlciBzYXZpbmcgKi8KKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIGN1cl9tYXJrZXI7ICAgICAvKiBOVUxMIGlmIG5vdCBwcm9jZXNzaW5nIGEgbWFya2VyICovCisgIHVuc2lnbmVkIGludCBieXRlc19yZWFkOyAgICAgICAgICAgICAgLyogZGF0YSBieXRlcyByZWFkIHNvIGZhciBpbiBtYXJrZXIgKi8KKyAgLyogTm90ZTogY3VyX21hcmtlciBpcyBub3QgbGlua2VkIGludG8gbWFya2VyX2xpc3QgdW50aWwgaXQncyBhbGwgcmVhZC4gKi8KK30gbXlfbWFya2VyX3JlYWRlcjsKKwordHlwZWRlZiBteV9tYXJrZXJfcmVhZGVyICpteV9tYXJrZXJfcHRyOworCisKKy8qCisgKiBNYWNyb3MgZm9yIGZldGNoaW5nIGRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2UgbW9kdWxlLgorICoKKyAqIEF0IGFsbCB0aW1lcywgY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlIGFuZCAtPmJ5dGVzX2luX2J1ZmZlciByZWZsZWN0CisgKiB0aGUgY3VycmVudCByZXN0YXJ0IHBvaW50OyB3ZSB1cGRhdGUgdGhlbSBvbmx5IHdoZW4gd2UgaGF2ZSByZWFjaGVkIGEKKyAqIHN1aXRhYmxlIHBsYWNlIHRvIHJlc3RhcnQgaWYgYSBzdXNwZW5zaW9uIG9jY3Vycy4KKyAqLworCisvKiBEZWNsYXJlIGFuZCBpbml0aWFsaXplIGxvY2FsIGNvcGllcyBvZiBpbnB1dCBwb2ludGVyL2NvdW50ICovCisjZGVmaW5lIElOUFVUX1ZBUlMoY2luZm8pIFwKKyAgc3RydWN0IGpwZWdfc291cmNlX21nciAqZGF0YXNyYyA9IChjaW5mbyktPnNyYzsgXAorICBjb25zdCBKT0NURVQgKm5leHRfaW5wdXRfYnl0ZSA9IGRhdGFzcmMtPm5leHRfaW5wdXRfYnl0ZTsgXAorICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyID0gZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyCisKKy8qIFVubG9hZCB0aGUgbG9jYWwgY29waWVzIC0tLSBkbyB0aGlzIG9ubHkgYXQgYSByZXN0YXJ0IGJvdW5kYXJ5ICovCisjZGVmaW5lIElOUFVUX1NZTkMoY2luZm8pIFwKKyAgKCBkYXRhc3JjLT5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGUsIFwKKyAgICBkYXRhc3JjLT5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXIgKQorCisvKiBSZWxvYWQgdGhlIGxvY2FsIGNvcGllcyAtLS0gdXNlZCBvbmx5IGluIE1BS0VfQllURV9BVkFJTCAqLworI2RlZmluZSBJTlBVVF9SRUxPQUQoY2luZm8pIFwKKyAgKCBuZXh0X2lucHV0X2J5dGUgPSBkYXRhc3JjLT5uZXh0X2lucHV0X2J5dGUsIFwKKyAgICBieXRlc19pbl9idWZmZXIgPSBkYXRhc3JjLT5ieXRlc19pbl9idWZmZXIgKQorCisvKiBJbnRlcm5hbCBtYWNybyBmb3IgSU5QVVRfQllURSBhbmQgSU5QVVRfMkJZVEVTOiBtYWtlIGEgYnl0ZSBhdmFpbGFibGUuCisgKiBOb3RlIHdlIGRvICpub3QqIGRvIElOUFVUX1NZTkMgYmVmb3JlIGNhbGxpbmcgZmlsbF9pbnB1dF9idWZmZXIsCisgKiBidXQgd2UgbXVzdCByZWxvYWQgdGhlIGxvY2FsIGNvcGllcyBhZnRlciBhIHN1Y2Nlc3NmdWwgZmlsbC4KKyAqLworI2RlZmluZSBNQUtFX0JZVEVfQVZBSUwoY2luZm8sIGFjdGlvbikgXAorICBpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDApIHsgXAorICAgIGlmICghKCpkYXRhc3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkgXAorICAgICAgeyBhY3Rpb247IH0gXAorICAgIElOUFVUX1JFTE9BRChjaW5mbyk7IFwKKyAgfQorCisvKiBSZWFkIGEgYnl0ZSBpbnRvIHZhcmlhYmxlIFYuCisgKiBJZiBtdXN0IHN1c3BlbmQsIHRha2UgdGhlIHNwZWNpZmllZCBhY3Rpb24gKHR5cGljYWxseSAicmV0dXJuIEZBTFNFIikuCisgKi8KKyNkZWZpbmUgSU5QVVRfQllURShjaW5mbywgViwgYWN0aW9uKSBcCisgIE1BS0VTVE1UKCBNQUtFX0JZVEVfQVZBSUwoY2luZm8sIGFjdGlvbik7IFwKKyAgICAgICAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOyBcCisgICAgICAgICAgICBWID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7ICkKKworLyogQXMgYWJvdmUsIGJ1dCByZWFkIHR3byBieXRlcyBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlci4KKyAqIFYgc2hvdWxkIGJlIGRlY2xhcmVkIHVuc2lnbmVkIGludCBvciBwZXJoYXBzIEpMT05HLgorICovCisjZGVmaW5lIElOUFVUXzJCWVRFUyhjaW5mbywgViwgYWN0aW9uKSBcCisgIE1BS0VTVE1UKCBNQUtFX0JZVEVfQVZBSUwoY2luZm8sIGFjdGlvbik7IFwKKyAgICAgICAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOyBcCisgICAgICAgICAgICBWID0gKCh1bnNpZ25lZCBpbnQpR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKykpIDw8IDg7IFwKKyAgICAgICAgICAgIE1BS0VfQllURV9BVkFJTChjaW5mbywgYWN0aW9uKTsgXAorICAgICAgICAgICAgYnl0ZXNfaW5fYnVmZmVyLS07IFwKKyAgICAgICAgICAgIFYgKz0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7ICkKKworCisvKgorICogUm91dGluZXMgdG8gcHJvY2VzcyBKUEVHIG1hcmtlcnMuCisgKgorICogRW50cnkgY29uZGl0aW9uOiBKUEVHIG1hcmtlciBpdHNlbGYgaGFzIGJlZW4gcmVhZCBhbmQgaXRzIGNvZGUgc2F2ZWQKKyAqICAgaW4gY2luZm8tPnVucmVhZF9tYXJrZXI7IGlucHV0IHJlc3RhcnQgcG9pbnQgaXMganVzdCBhZnRlciB0aGUgbWFya2VyLgorICoKKyAqIEV4aXQ6IGlmIHJldHVybiBUUlVFLCBoYXZlIHJlYWQgYW5kIHByb2Nlc3NlZCBhbnkgcGFyYW1ldGVycywgYW5kIGhhdmUKKyAqICAgdXBkYXRlZCB0aGUgcmVzdGFydCBwb2ludCB0byBwb2ludCBhZnRlciB0aGUgcGFyYW1ldGVycy4KKyAqICAgSWYgcmV0dXJuIEZBTFNFLCB3YXMgZm9yY2VkIHRvIHN1c3BlbmQgYmVmb3JlIHJlYWNoaW5nIGVuZCBvZgorICogICBtYXJrZXIgcGFyYW1ldGVyczsgcmVzdGFydCBwb2ludCBoYXMgbm90IGJlZW4gbW92ZWQuICBTYW1lIHJvdXRpbmUKKyAqICAgd2lsbCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgYXBwbGljYXRpb24gc3VwcGxpZXMgbW9yZSBpbnB1dCBkYXRhLgorICoKKyAqIFRoaXMgYXBwcm9hY2ggdG8gc3VzcGVuc2lvbiBhc3N1bWVzIHRoYXQgYWxsIG9mIGEgbWFya2VyJ3MgcGFyYW1ldGVycworICogY2FuIGZpdCBpbnRvIGEgc2luZ2xlIGlucHV0IGJ1ZmZlcmxvYWQuICBUaGlzIHNob3VsZCBob2xkIGZvciAibm9ybWFsIgorICogbWFya2Vycy4gIFNvbWUgQ09NL0FQUG4gbWFya2VycyBtaWdodCBoYXZlIGxhcmdlIHBhcmFtZXRlciBzZWdtZW50cworICogdGhhdCBtaWdodCBub3QgZml0LiAgSWYgd2UgYXJlIHNpbXBseSBkcm9wcGluZyBzdWNoIGEgbWFya2VyLCB3ZSB1c2UKKyAqIHNraXBfaW5wdXRfZGF0YSB0byBnZXQgcGFzdCBpdCwgYW5kIHRoZXJlYnkgcHV0IHRoZSBwcm9ibGVtIG9uIHRoZQorICogc291cmNlIG1hbmFnZXIncyBzaG91bGRlcnMuICBJZiB3ZSBhcmUgc2F2aW5nIHRoZSBtYXJrZXIncyBjb250ZW50cworICogaW50byBtZW1vcnksIHdlIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBjb252ZW50aW9uOiB3aGVuIGZvcmNlZCB0bworICogc3VzcGVuZCwgdGhlIG1hcmtlciBwcm9jZXNzb3IgdXBkYXRlcyB0aGUgcmVzdGFydCBwb2ludCB0byB0aGUgZW5kIG9mCisgKiB3aGF0IGl0J3MgY29uc3VtZWQgKGllLCB0aGUgZW5kIG9mIHRoZSBidWZmZXIpIGJlZm9yZSByZXR1cm5pbmcgRkFMU0UuCisgKiBPbiByZXN1bXB0aW9uLCBjaW5mby0+dW5yZWFkX21hcmtlciBzdGlsbCBjb250YWlucyB0aGUgbWFya2VyIGNvZGUsCisgKiBidXQgdGhlIGRhdGEgc291cmNlIHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgY2h1bmsgb2YgbWFya2VyIGRhdGEuCisgKiBUaGUgbWFya2VyIHByb2Nlc3NvciBtdXN0IHJldGFpbiBpbnRlcm5hbCBzdGF0ZSB0byBkZWFsIHdpdGggdGhpcy4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgYm90aGVyIHRvIGF2b2lkIGR1cGxpY2F0ZSB0cmFjZSBtZXNzYWdlcyBpZiBhCisgKiBzdXNwZW5zaW9uIG9jY3VycyB3aXRoaW4gbWFya2VyIHBhcmFtZXRlcnMuICBPdGhlciBzaWRlIGVmZmVjdHMKKyAqIHJlcXVpcmUgbW9yZSBjYXJlLgorICovCisKKworTE9DQUwoYm9vbGVhbikKK2dldF9zb2koal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFByb2Nlc3MgYW4gU09JIG1hcmtlciAqLworeworICBpbnQgaTsKKworICBUUkFDRU1TKGNpbmZvLCAxLCBKVFJDX1NPSSk7CisKKyAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0kpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9TT0lfRFVQTElDQVRFKTsKKworICAvKiBSZXNldCBhbGwgcGFyYW1ldGVycyB0aGF0IGFyZSBkZWZpbmVkIHRvIGJlIHJlc2V0IGJ5IFNPSSAqLworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVJJVEhfVEJMUzsgaSsrKSB7CisgICAgY2luZm8tPmFyaXRoX2RjX0xbaV0gPSAwOworICAgIGNpbmZvLT5hcml0aF9kY19VW2ldID0gMTsKKyAgICBjaW5mby0+YXJpdGhfYWNfS1tpXSA9IDU7CisgIH0KKyAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSAwOworCisgIC8qIFNldCBpbml0aWFsIGFzc3VtcHRpb25zIGZvciBjb2xvcnNwYWNlIGV0YyAqLworCisgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1VOS05PV047CisgIGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nID0gRkFMU0U7IC8qIEFzc3VtZSBub24tQ0NJUiBzYW1wbGluZz8/PyAqLworCisgIGNpbmZvLT5zYXdfSkZJRl9tYXJrZXIgPSBGQUxTRTsKKyAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9IDE7IC8qIHNldCBkZWZhdWx0IEpGSUYgQVBQMCB2YWx1ZXMgKi8KKyAgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IDE7CisgIGNpbmZvLT5kZW5zaXR5X3VuaXQgPSAwOworICBjaW5mby0+WF9kZW5zaXR5ID0gMTsKKyAgY2luZm8tPllfZGVuc2l0eSA9IDE7CisgIGNpbmZvLT5zYXdfQWRvYmVfbWFya2VyID0gRkFMU0U7CisgIGNpbmZvLT5BZG9iZV90cmFuc2Zvcm0gPSAwOworCisgIGNpbmZvLT5tYXJrZXItPnNhd19TT0kgPSBUUlVFOworCisgIHJldHVybiBUUlVFOworfQorCisKK0xPQ0FMKGJvb2xlYW4pCitnZXRfc29mKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNfcHJvZywgYm9vbGVhbiBpc19hcml0aCkKKy8qIFByb2Nlc3MgYSBTT0ZuIG1hcmtlciAqLworeworICBKTE9ORyBsZW5ndGg7CisgIGludCBjLCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgSU5QVVRfVkFSUyhjaW5mbyk7CisKKyAgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPSBpc19wcm9nOworICBjaW5mby0+YXJpdGhfY29kZSA9IGlzX2FyaXRoOworCisgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworCisgIElOUFVUX0JZVEUoY2luZm8sIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiwgcmV0dXJuIEZBTFNFKTsKKyAgSU5QVVRfMkJZVEVTKGNpbmZvLCBjaW5mby0+aW1hZ2VfaGVpZ2h0LCByZXR1cm4gRkFMU0UpOworICBJTlBVVF8yQllURVMoY2luZm8sIGNpbmZvLT5pbWFnZV93aWR0aCwgcmV0dXJuIEZBTFNFKTsKKyAgSU5QVVRfQllURShjaW5mbywgY2luZm8tPm51bV9jb21wb25lbnRzLCByZXR1cm4gRkFMU0UpOworCisgIGxlbmd0aCAtPSA4OworCisgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1NPRiwgY2luZm8tPnVucmVhZF9tYXJrZXIsCisgICAgICAgICAgIChpbnQpY2luZm8tPmltYWdlX3dpZHRoLCAoaW50KWNpbmZvLT5pbWFnZV9oZWlnaHQsCisgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyk7CisKKyAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0YpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9TT0ZfRFVQTElDQVRFKTsKKworICAvKiBXZSBkb24ndCBzdXBwb3J0IGZpbGVzIGluIHdoaWNoIHRoZSBpbWFnZSBoZWlnaHQgaXMgaW5pdGlhbGx5IHNwZWNpZmllZCAqLworICAvKiBhcyAwIGFuZCBpcyBsYXRlciByZWRlZmluZWQgYnkgRE5MLiAgQXMgbG9uZyBhcyB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQsICAqLworICAvKiBtaWdodCBhcyB3ZWxsIGhhdmUgYSBnZW5lcmFsIHNhbml0eSBjaGVjay4gKi8KKyAgaWYgKGNpbmZvLT5pbWFnZV9oZWlnaHQgPD0gMCB8fCBjaW5mby0+aW1hZ2Vfd2lkdGggPD0gMCB8fAorICAgICAgY2luZm8tPm51bV9jb21wb25lbnRzIDw9IDApCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9FTVBUWV9JTUFHRSk7CisKKyAgaWYgKGxlbmd0aCAhPSAoY2luZm8tPm51bV9jb21wb25lbnRzICogMykpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTEVOR1RIKTsKKworICBpZiAoY2luZm8tPmNvbXBfaW5mbyA9PSBOVUxMKSAvKiBkbyBvbmx5IG9uY2UsIGV2ZW4gaWYgc3VzcGVuZCAqLworICAgIGNpbmZvLT5jb21wX2luZm8gPSAoanBlZ19jb21wb25lbnRfaW5mbyAqKSgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm51bV9jb21wb25lbnRzICogc2l6ZW9mKGpwZWdfY29tcG9uZW50X2luZm8pKTsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIGNvbXBwdHItPmNvbXBvbmVudF9pbmRleCA9IGNpOworICAgIElOUFVUX0JZVEUoY2luZm8sIGNvbXBwdHItPmNvbXBvbmVudF9pZCwgcmV0dXJuIEZBTFNFKTsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOworICAgIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgPSAoYyA+PiA0KSAmIDE1OworICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPSAoYyAgICAgKSAmIDE1OworICAgIElOUFVUX0JZVEUoY2luZm8sIGNvbXBwdHItPnF1YW50X3RibF9ubywgcmV0dXJuIEZBTFNFKTsKKworICAgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1NPRl9DT01QT05FTlQsCisgICAgICAgICAgICAgY29tcHB0ci0+Y29tcG9uZW50X2lkLCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPnF1YW50X3RibF9ubyk7CisgIH0KKworICBjaW5mby0+bWFya2VyLT5zYXdfU09GID0gVFJVRTsKKworICBJTlBVVF9TWU5DKGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworTE9DQUwoYm9vbGVhbikKK2dldF9zb3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFByb2Nlc3MgYSBTT1MgbWFya2VyICovCit7CisgIEpMT05HIGxlbmd0aDsKKyAgaW50IGksIGNpLCBuLCBjLCBjYywgcGk7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIGlmICghY2luZm8tPm1hcmtlci0+c2F3X1NPRikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPU19OT19TT0YpOworCisgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworCisgIElOUFVUX0JZVEUoY2luZm8sIG4sIHJldHVybiBGQUxTRSk7IC8qIE51bWJlciBvZiBjb21wb25lbnRzICovCisKKyAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfU09TLCBuKTsKKworICBpZiAobGVuZ3RoICE9IChuICogMiArIDYpIHx8IG4gPCAxIHx8IG4gPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIGNpbmZvLT5jb21wc19pbl9zY2FuID0gbjsKKworICAvKiBDb2xsZWN0IHRoZSBjb21wb25lbnQtc3BlYyBwYXJhbWV0ZXJzICovCisKKyAgZm9yIChpID0gMDsgaSA8IE1BWF9DT01QU19JTl9TQ0FOOyBpKyspCisgICAgY2luZm8tPmN1cl9jb21wX2luZm9baV0gPSBOVUxMOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBjYywgcmV0dXJuIEZBTFNFKTsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOworCisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOworICAgICAgICAgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHMgJiYgY2kgPCBNQVhfQ09NUFNfSU5fU0NBTjsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgaWYgKGNjID09IGNvbXBwdHItPmNvbXBvbmVudF9pZCAmJiAhY2luZm8tPmN1cl9jb21wX2luZm9bY2ldKQorICAgICAgICBnb3RvIGlkX2ZvdW5kOworICAgIH0KKworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9DT01QT05FTlRfSUQsIGNjKTsKKworaWRfZm91bmQ6CisKKyAgICBjaW5mby0+Y3VyX2NvbXBfaW5mb1tpXSA9IGNvbXBwdHI7CisgICAgY29tcHB0ci0+ZGNfdGJsX25vID0gKGMgPj4gNCkgJiAxNTsKKyAgICBjb21wcHRyLT5hY190Ymxfbm8gPSAoYyAgICAgKSAmIDE1OworCisgICAgVFJBQ0VNUzMoY2luZm8sIDEsIEpUUkNfU09TX0NPTVBPTkVOVCwgY2MsCisgICAgICAgICAgICAgY29tcHB0ci0+ZGNfdGJsX25vLCBjb21wcHRyLT5hY190Ymxfbm8pOworCisgICAgLyogVGhpcyBDU2kgKGNjKSBzaG91bGQgZGlmZmVyIGZyb20gdGhlIHByZXZpb3VzIENTaSAqLworICAgIGZvciAocGkgPSAwOyBwaSA8IGk7IHBpKyspIHsKKyAgICAgIGlmIChjaW5mby0+Y3VyX2NvbXBfaW5mb1twaV0gPT0gY29tcHB0cikgeworICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfQ09NUE9ORU5UX0lELCBjYyk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogQ29sbGVjdCB0aGUgYWRkaXRpb25hbCBzY2FuIHBhcmFtZXRlcnMgU3MsIFNlLCBBaC9BbC4gKi8KKyAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsKKyAgY2luZm8tPlNzID0gYzsKKyAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsKKyAgY2luZm8tPlNlID0gYzsKKyAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsKKyAgY2luZm8tPkFoID0gKGMgPj4gNCkgJiAxNTsKKyAgY2luZm8tPkFsID0gKGMgICAgICkgJiAxNTsKKworICBUUkFDRU1TNChjaW5mbywgMSwgSlRSQ19TT1NfUEFSQU1TLCBjaW5mby0+U3MsIGNpbmZvLT5TZSwKKyAgICAgICAgICAgY2luZm8tPkFoLCBjaW5mby0+QWwpOworCisgIC8qIFByZXBhcmUgdG8gc2NhbiBkYXRhICYgcmVzdGFydCBtYXJrZXJzICovCisgIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gPSAwOworCisgIC8qIENvdW50IGFub3RoZXIgU09TIG1hcmtlciAqLworICBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIrKzsKKworICBJTlBVVF9TWU5DKGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworI2lmZGVmIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorCitMT0NBTChib29sZWFuKQorZ2V0X2RhYyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhIERBQyBtYXJrZXIgKi8KK3sKKyAgSkxPTkcgbGVuZ3RoOworICBpbnQgaW5kZXgsIHZhbDsKKyAgSU5QVVRfVkFSUyhjaW5mbyk7CisKKyAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7CisgIGxlbmd0aCAtPSAyOworCisgIHdoaWxlIChsZW5ndGggPiAwKSB7CisgICAgSU5QVVRfQllURShjaW5mbywgaW5kZXgsIHJldHVybiBGQUxTRSk7CisgICAgSU5QVVRfQllURShjaW5mbywgdmFsLCByZXR1cm4gRkFMU0UpOworCisgICAgbGVuZ3RoIC09IDI7CisKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19EQUMsIGluZGV4LCB2YWwpOworCisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoMiAqIE5VTV9BUklUSF9UQkxTKSkKKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0RBQ19JTkRFWCwgaW5kZXgpOworCisgICAgaWYgKGluZGV4ID49IE5VTV9BUklUSF9UQkxTKSB7IC8qIGRlZmluZSBBQyB0YWJsZSAqLworICAgICAgY2luZm8tPmFyaXRoX2FjX0tbaW5kZXggLSBOVU1fQVJJVEhfVEJMU10gPSAoVUlOVDgpdmFsOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmUgREMgdGFibGUgKi8KKyAgICAgIGNpbmZvLT5hcml0aF9kY19MW2luZGV4XSA9IChVSU5UOCkodmFsICYgMHgwRik7CisgICAgICBjaW5mby0+YXJpdGhfZGNfVVtpbmRleF0gPSAoVUlOVDgpKHZhbCA+PiA0KTsKKyAgICAgIGlmIChjaW5mby0+YXJpdGhfZGNfTFtpbmRleF0gPiBjaW5mby0+YXJpdGhfZGNfVVtpbmRleF0pCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0RBQ19WQUxVRSwgdmFsKTsKKyAgICB9CisgIH0KKworICBpZiAobGVuZ3RoICE9IDApCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTEVOR1RIKTsKKworICBJTlBVVF9TWU5DKGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNlbHNlIC8qICFEX0FSSVRIX0NPRElOR19TVVBQT1JURUQgKi8KKworI2RlZmluZSBnZXRfZGFjKGNpbmZvKSAgc2tpcF92YXJpYWJsZShjaW5mbykKKworI2VuZGlmIC8qIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLworCisKK0xPQ0FMKGJvb2xlYW4pCitnZXRfZGh0KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBQcm9jZXNzIGEgREhUIG1hcmtlciAqLworeworICBKTE9ORyBsZW5ndGg7CisgIFVJTlQ4IGJpdHNbMTddOworICBVSU5UOCBodWZmdmFsWzI1Nl07CisgIGludCBpLCBpbmRleCwgY291bnQ7CisgIEpIVUZGX1RCTCAqKmh0YmxwdHI7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworICBsZW5ndGggLT0gMjsKKworICB3aGlsZSAobGVuZ3RoID4gMTYpIHsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBpbmRleCwgcmV0dXJuIEZBTFNFKTsKKworICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX0RIVCwgaW5kZXgpOworCisgICAgYml0c1swXSA9IDA7CisgICAgY291bnQgPSAwOworICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykgeworICAgICAgSU5QVVRfQllURShjaW5mbywgYml0c1tpXSwgcmV0dXJuIEZBTFNFKTsKKyAgICAgIGNvdW50ICs9IGJpdHNbaV07CisgICAgfQorCisgICAgbGVuZ3RoIC09IDEgKyAxNjsKKworICAgIFRSQUNFTVM4KGNpbmZvLCAyLCBKVFJDX0hVRkZCSVRTLAorICAgICAgICAgICAgIGJpdHNbMV0sIGJpdHNbMl0sIGJpdHNbM10sIGJpdHNbNF0sCisgICAgICAgICAgICAgYml0c1s1XSwgYml0c1s2XSwgYml0c1s3XSwgYml0c1s4XSk7CisgICAgVFJBQ0VNUzgoY2luZm8sIDIsIEpUUkNfSFVGRkJJVFMsCisgICAgICAgICAgICAgYml0c1s5XSwgYml0c1sxMF0sIGJpdHNbMTFdLCBiaXRzWzEyXSwKKyAgICAgICAgICAgICBiaXRzWzEzXSwgYml0c1sxNF0sIGJpdHNbMTVdLCBiaXRzWzE2XSk7CisKKyAgICAvKiBIZXJlIHdlIGp1c3QgZG8gbWluaW1hbCB2YWxpZGF0aW9uIG9mIHRoZSBjb3VudHMgdG8gYXZvaWQgd2Fsa2luZworICAgICAqIG9mZiB0aGUgZW5kIG9mIG91ciB0YWJsZSBzcGFjZS4gIGpkaHVmZi5jIHdpbGwgY2hlY2sgbW9yZSBjYXJlZnVsbHkuCisgICAgICovCisgICAgaWYgKGNvdW50ID4gMjU2IHx8ICgoSkxPTkcpY291bnQpID4gbGVuZ3RoKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgIElOUFVUX0JZVEUoY2luZm8sIGh1ZmZ2YWxbaV0sIHJldHVybiBGQUxTRSk7CisKKyAgICBNRU1aRVJPKCZodWZmdmFsW2NvdW50XSwgKDI1NiAtIGNvdW50KSAqIHNpemVvZihVSU5UOCkpOworCisgICAgbGVuZ3RoIC09IGNvdW50OworCisgICAgaWYgKGluZGV4ICYgMHgxMCkgeyAgICAgICAgIC8qIEFDIHRhYmxlIGRlZmluaXRpb24gKi8KKyAgICAgIGluZGV4IC09IDB4MTA7CisgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IE5VTV9IVUZGX1RCTFMpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0RIVF9JTkRFWCwgaW5kZXgpOworICAgICAgaHRibHB0ciA9ICZjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpbmRleF07CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIERDIHRhYmxlIGRlZmluaXRpb24gKi8KKyAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTlVNX0hVRkZfVEJMUykKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfREhUX0lOREVYLCBpbmRleCk7CisgICAgICBodGJscHRyID0gJmNpbmZvLT5kY19odWZmX3RibF9wdHJzW2luZGV4XTsKKyAgICB9CisKKyAgICBpZiAoKmh0YmxwdHIgPT0gTlVMTCkKKyAgICAgICpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgICAgTUVNQ09QWSgoKmh0YmxwdHIpLT5iaXRzLCBiaXRzLCBzaXplb2YoKCpodGJscHRyKS0+Yml0cykpOworICAgIE1FTUNPUFkoKCpodGJscHRyKS0+aHVmZnZhbCwgaHVmZnZhbCwgc2l6ZW9mKCgqaHRibHB0ciktPmh1ZmZ2YWwpKTsKKyAgfQorCisgIGlmIChsZW5ndGggIT0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCitMT0NBTChib29sZWFuKQorZ2V0X2RxdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhIERRVCBtYXJrZXIgKi8KK3sKKyAgSkxPTkcgbGVuZ3RoOworICBpbnQgbiwgaSwgcHJlYzsKKyAgdW5zaWduZWQgaW50IHRtcDsKKyAgSlFVQU5UX1RCTCAqcXVhbnRfcHRyOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKyAgbGVuZ3RoIC09IDI7CisKKyAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBuLCByZXR1cm4gRkFMU0UpOworICAgIHByZWMgPSBuID4+IDQ7CisgICAgbiAmPSAweDBGOworCisgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfRFFULCBuLCBwcmVjKTsKKworICAgIGlmIChuID49IE5VTV9RVUFOVF9UQkxTKQorICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfRFFUX0lOREVYLCBuKTsKKworICAgIGlmIChjaW5mby0+cXVhbnRfdGJsX3B0cnNbbl0gPT0gTlVMTCkKKyAgICAgIGNpbmZvLT5xdWFudF90YmxfcHRyc1tuXSA9IGpwZWdfYWxsb2NfcXVhbnRfdGFibGUoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgICAgcXVhbnRfcHRyID0gY2luZm8tPnF1YW50X3RibF9wdHJzW25dOworCisgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICAgIGlmIChwcmVjKQorICAgICAgICBJTlBVVF8yQllURVMoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKKyAgICAgIGVsc2UKKyAgICAgICAgSU5QVVRfQllURShjaW5mbywgdG1wLCByZXR1cm4gRkFMU0UpOworICAgICAgLyogV2UgY29udmVydCB0aGUgemlnemFnLW9yZGVyIHRhYmxlIHRvIG5hdHVyYWwgYXJyYXkgb3JkZXIuICovCisgICAgICBxdWFudF9wdHItPnF1YW50dmFsW2pwZWdfbmF0dXJhbF9vcmRlcltpXV0gPSAoVUlOVDE2KXRtcDsKKyAgICB9CisKKyAgICBpZiAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPj0gMikgeworICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpICs9IDgpIHsKKyAgICAgICAgVFJBQ0VNUzgoY2luZm8sIDIsIEpUUkNfUVVBTlRWQUxTLAorICAgICAgICAgICAgICAgICBxdWFudF9wdHItPnF1YW50dmFsW2ldLCAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtpICsgMV0sCisgICAgICAgICAgICAgICAgIHF1YW50X3B0ci0+cXVhbnR2YWxbaSArIDJdLCBxdWFudF9wdHItPnF1YW50dmFsW2kgKyAzXSwKKyAgICAgICAgICAgICAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtpICsgNF0sIHF1YW50X3B0ci0+cXVhbnR2YWxbaSArIDVdLAorICAgICAgICAgICAgICAgICBxdWFudF9wdHItPnF1YW50dmFsW2kgKyA2XSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpICsgN10pOworICAgICAgfQorICAgIH0KKworICAgIGxlbmd0aCAtPSBEQ1RTSVpFMiArIDE7CisgICAgaWYgKHByZWMpIGxlbmd0aCAtPSBEQ1RTSVpFMjsKKyAgfQorCisgIGlmIChsZW5ndGggIT0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCitMT0NBTChib29sZWFuKQorZ2V0X2RyaShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhIERSSSBtYXJrZXIgKi8KK3sKKyAgSkxPTkcgbGVuZ3RoOworICB1bnNpZ25lZCBpbnQgdG1wOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKworICBpZiAobGVuZ3RoICE9IDQpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTEVOR1RIKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKKworICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19EUkksIHRtcCk7CisKKyAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSB0bXA7CisKKyAgSU5QVVRfU1lOQyhjaW5mbyk7CisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBSb3V0aW5lcyBmb3IgcHJvY2Vzc2luZyBBUFBuIGFuZCBDT00gbWFya2Vycy4KKyAqIFRoZXNlIGFyZSBlaXRoZXIgc2F2ZWQgaW4gbWVtb3J5IG9yIGRpc2NhcmRlZCwgcGVyIGFwcGxpY2F0aW9uIHJlcXVlc3QuCisgKiBBUFAwIGFuZCBBUFAxNCBhcmUgc3BlY2lhbGx5IGNoZWNrZWQgdG8gc2VlIGlmIHRoZXkgYXJlCisgKiBKRklGIGFuZCBBZG9iZSBtYXJrZXJzLCByZXNwZWN0aXZlbHkuCisgKi8KKworI2RlZmluZSBBUFAwX0RBVEFfTEVOICAgMTQgICAgICAvKiBMZW5ndGggb2YgaW50ZXJlc3RpbmcgZGF0YSBpbiBBUFAwICovCisjZGVmaW5lIEFQUDE0X0RBVEFfTEVOICAxMiAgICAgIC8qIExlbmd0aCBvZiBpbnRlcmVzdGluZyBkYXRhIGluIEFQUDE0ICovCisjZGVmaW5lIEFQUE5fREFUQV9MRU4gICAxNCAgICAgIC8qIE11c3QgYmUgdGhlIGxhcmdlc3Qgb2YgdGhlIGFib3ZlISEgKi8KKworCitMT0NBTCh2b2lkKQorZXhhbWluZV9hcHAwKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpPQ1RFVCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisgICAgICAgICAgICAgSkxPTkcgcmVtYWluaW5nKQorLyogRXhhbWluZSBmaXJzdCBmZXcgYnl0ZXMgZnJvbSBhbiBBUFAwLgorICogVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaWYgaXQgaXMgYSBKRklGIG1hcmtlci4KKyAqIGRhdGFsZW4gaXMgIyBvZiBieXRlcyBhdCBkYXRhW10sIHJlbWFpbmluZyBpcyBsZW5ndGggb2YgcmVzdCBvZiBtYXJrZXIgZGF0YS4KKyAqLworeworICBKTE9ORyB0b3RhbGxlbiA9IChKTE9ORylkYXRhbGVuICsgcmVtYWluaW5nOworCisgIGlmIChkYXRhbGVuID49IEFQUDBfREFUQV9MRU4gJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzBdKSA9PSAweDRBICYmCisgICAgICBHRVRKT0NURVQoZGF0YVsxXSkgPT0gMHg0NiAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbMl0pID09IDB4NDkgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzNdKSA9PSAweDQ2ICYmCisgICAgICBHRVRKT0NURVQoZGF0YVs0XSkgPT0gMCkgeworICAgIC8qIEZvdW5kIEpGSUYgQVBQMCBtYXJrZXI6IHNhdmUgaW5mbyAqLworICAgIGNpbmZvLT5zYXdfSkZJRl9tYXJrZXIgPSBUUlVFOworICAgIGNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24gPSBHRVRKT0NURVQoZGF0YVs1XSk7CisgICAgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IEdFVEpPQ1RFVChkYXRhWzZdKTsKKyAgICBjaW5mby0+ZGVuc2l0eV91bml0ID0gR0VUSk9DVEVUKGRhdGFbN10pOworICAgIGNpbmZvLT5YX2RlbnNpdHkgPSAoR0VUSk9DVEVUKGRhdGFbOF0pIDw8IDgpICsgR0VUSk9DVEVUKGRhdGFbOV0pOworICAgIGNpbmZvLT5ZX2RlbnNpdHkgPSAoR0VUSk9DVEVUKGRhdGFbMTBdKSA8PCA4KSArIEdFVEpPQ1RFVChkYXRhWzExXSk7CisgICAgLyogQ2hlY2sgdmVyc2lvbi4KKyAgICAgKiBNYWpvciB2ZXJzaW9uIG11c3QgYmUgMSwgYW55dGhpbmcgZWxzZSBzaWduYWxzIGFuIGluY29tcGF0aWJsZSBjaGFuZ2UuCisgICAgICogKFdlIHVzZWQgdG8gdHJlYXQgdGhpcyBhcyBhbiBlcnJvciwgYnV0IG5vdyBpdCdzIGEgbm9uZmF0YWwgd2FybmluZywKKyAgICAgKiBiZWNhdXNlIHNvbWUgYm96byBhdCBIaWphYWsgY291bGRuJ3QgcmVhZCB0aGUgc3BlYy4pCisgICAgICogTWlub3IgdmVyc2lvbiBzaG91bGQgYmUgMC4uMiwgYnV0IHByb2Nlc3MgYW55d2F5IGlmIG5ld2VyLgorICAgICAqLworICAgIGlmIChjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uICE9IDEpCisgICAgICBXQVJOTVMyKGNpbmZvLCBKV1JOX0pGSUZfTUFKT1IsCisgICAgICAgICAgICAgIGNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24sIGNpbmZvLT5KRklGX21pbm9yX3ZlcnNpb24pOworICAgIC8qIEdlbmVyYXRlIHRyYWNlIG1lc3NhZ2VzICovCisgICAgVFJBQ0VNUzUoY2luZm8sIDEsIEpUUkNfSkZJRiwKKyAgICAgICAgICAgICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uLCBjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uLAorICAgICAgICAgICAgIGNpbmZvLT5YX2RlbnNpdHksIGNpbmZvLT5ZX2RlbnNpdHksIGNpbmZvLT5kZW5zaXR5X3VuaXQpOworICAgIC8qIFZhbGlkYXRlIHRodW1ibmFpbCBkaW1lbnNpb25zIGFuZCBpc3N1ZSBhcHByb3ByaWF0ZSBtZXNzYWdlcyAqLworICAgIGlmIChHRVRKT0NURVQoZGF0YVsxMl0pIHwgR0VUSk9DVEVUKGRhdGFbMTNdKSkKKyAgICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX0pGSUZfVEhVTUJOQUlMLAorICAgICAgICAgICAgICAgR0VUSk9DVEVUKGRhdGFbMTJdKSwgR0VUSk9DVEVUKGRhdGFbMTNdKSk7CisgICAgdG90YWxsZW4gLT0gQVBQMF9EQVRBX0xFTjsKKyAgICBpZiAodG90YWxsZW4gIT0KKyAgICAgICAgKChKTE9ORylHRVRKT0NURVQoZGF0YVsxMl0pICogKEpMT05HKUdFVEpPQ1RFVChkYXRhWzEzXSkgKiAoSkxPTkcpMykpCisgICAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19KRklGX0JBRFRIVU1CTkFJTFNJWkUsIChpbnQpdG90YWxsZW4pOworICB9IGVsc2UgaWYgKGRhdGFsZW4gPj0gNiAmJgorICAgICAgICAgICAgIEdFVEpPQ1RFVChkYXRhWzBdKSA9PSAweDRBICYmCisgICAgICAgICAgICAgR0VUSk9DVEVUKGRhdGFbMV0pID09IDB4NDYgJiYKKyAgICAgICAgICAgICBHRVRKT0NURVQoZGF0YVsyXSkgPT0gMHg1OCAmJgorICAgICAgICAgICAgIEdFVEpPQ1RFVChkYXRhWzNdKSA9PSAweDU4ICYmCisgICAgICAgICAgICAgR0VUSk9DVEVUKGRhdGFbNF0pID09IDApIHsKKyAgICAvKiBGb3VuZCBKRklGICJKRlhYIiBleHRlbnNpb24gQVBQMCBtYXJrZXIgKi8KKyAgICAvKiBUaGUgbGlicmFyeSBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHdpdGggdGhlc2UsCisgICAgICogYnV0IHdlIHRyeSB0byBwcm9kdWNlIGEgaGVscGZ1bCB0cmFjZSBtZXNzYWdlLgorICAgICAqLworICAgIHN3aXRjaCAoR0VUSk9DVEVUKGRhdGFbNV0pKSB7CisgICAgY2FzZSAweDEwOgorICAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfVEhVTUJfSlBFRywgKGludCl0b3RhbGxlbik7CisgICAgICBicmVhazsKKyAgICBjYXNlIDB4MTE6CisgICAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19USFVNQl9QQUxFVFRFLCAoaW50KXRvdGFsbGVuKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMHgxMzoKKyAgICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX1RIVU1CX1JHQiwgKGludCl0b3RhbGxlbik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfSkZJRl9FWFRFTlNJT04sCisgICAgICAgICAgICAgICBHRVRKT0NURVQoZGF0YVs1XSksIChpbnQpdG90YWxsZW4pOworICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIFN0YXJ0IG9mIEFQUDAgZG9lcyBub3QgbWF0Y2ggIkpGSUYiIG9yICJKRlhYIiwgb3IgdG9vIHNob3J0ICovCisgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfQVBQMCwgKGludCl0b3RhbGxlbik7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZXhhbWluZV9hcHAxNChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKT0NURVQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorICAgICAgICAgICAgICBKTE9ORyByZW1haW5pbmcpCisvKiBFeGFtaW5lIGZpcnN0IGZldyBieXRlcyBmcm9tIGFuIEFQUDE0LgorICogVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaWYgaXQgaXMgYW4gQWRvYmUgbWFya2VyLgorICogZGF0YWxlbiBpcyAjIG9mIGJ5dGVzIGF0IGRhdGFbXSwgcmVtYWluaW5nIGlzIGxlbmd0aCBvZiByZXN0IG9mIG1hcmtlciBkYXRhLgorICovCit7CisgIHVuc2lnbmVkIGludCB2ZXJzaW9uLCBmbGFnczAsIGZsYWdzMSwgdHJhbnNmb3JtOworCisgIGlmIChkYXRhbGVuID49IEFQUDE0X0RBVEFfTEVOICYmCisgICAgICBHRVRKT0NURVQoZGF0YVswXSkgPT0gMHg0MSAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbMV0pID09IDB4NjQgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzJdKSA9PSAweDZGICYmCisgICAgICBHRVRKT0NURVQoZGF0YVszXSkgPT0gMHg2MiAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbNF0pID09IDB4NjUpIHsKKyAgICAvKiBGb3VuZCBBZG9iZSBBUFAxNCBtYXJrZXIgKi8KKyAgICB2ZXJzaW9uID0gKEdFVEpPQ1RFVChkYXRhWzVdKSA8PCA4KSArIEdFVEpPQ1RFVChkYXRhWzZdKTsKKyAgICBmbGFnczAgPSAoR0VUSk9DVEVUKGRhdGFbN10pIDw8IDgpICsgR0VUSk9DVEVUKGRhdGFbOF0pOworICAgIGZsYWdzMSA9IChHRVRKT0NURVQoZGF0YVs5XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVsxMF0pOworICAgIHRyYW5zZm9ybSA9IEdFVEpPQ1RFVChkYXRhWzExXSk7CisgICAgVFJBQ0VNUzQoY2luZm8sIDEsIEpUUkNfQURPQkUsIHZlcnNpb24sIGZsYWdzMCwgZmxhZ3MxLCB0cmFuc2Zvcm0pOworICAgIGNpbmZvLT5zYXdfQWRvYmVfbWFya2VyID0gVFJVRTsKKyAgICBjaW5mby0+QWRvYmVfdHJhbnNmb3JtID0gKFVJTlQ4KXRyYW5zZm9ybTsKKyAgfSBlbHNlIHsKKyAgICAvKiBTdGFydCBvZiBBUFAxNCBkb2VzIG5vdCBtYXRjaCAiQWRvYmUiLCBvciB0b28gc2hvcnQgKi8KKyAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19BUFAxNCwgKGludCkoZGF0YWxlbiArIHJlbWFpbmluZykpOworICB9Cit9CisKKworTUVUSE9EREVGKGJvb2xlYW4pCitnZXRfaW50ZXJlc3RpbmdfYXBwbihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhbiBBUFAwIG9yIEFQUDE0IG1hcmtlciB3aXRob3V0IHNhdmluZyBpdCAqLworeworICBKTE9ORyBsZW5ndGg7CisgIEpPQ1RFVCBiW0FQUE5fREFUQV9MRU5dOworICB1bnNpZ25lZCBpbnQgaSwgbnVtdG9yZWFkOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKyAgbGVuZ3RoIC09IDI7CisKKyAgLyogZ2V0IHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBtYXJrZXIgZGF0YSAqLworICBpZiAobGVuZ3RoID49IEFQUE5fREFUQV9MRU4pCisgICAgbnVtdG9yZWFkID0gQVBQTl9EQVRBX0xFTjsKKyAgZWxzZSBpZiAobGVuZ3RoID4gMCkKKyAgICBudW10b3JlYWQgPSAodW5zaWduZWQgaW50KWxlbmd0aDsKKyAgZWxzZQorICAgIG51bXRvcmVhZCA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBudW10b3JlYWQ7IGkrKykKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBiW2ldLCByZXR1cm4gRkFMU0UpOworICBsZW5ndGggLT0gbnVtdG9yZWFkOworCisgIC8qIHByb2Nlc3MgaXQgKi8KKyAgc3dpdGNoIChjaW5mby0+dW5yZWFkX21hcmtlcikgeworICBjYXNlIE1fQVBQMDoKKyAgICBleGFtaW5lX2FwcDAoY2luZm8sIChKT0NURVQgKiliLCBudW10b3JlYWQsIGxlbmd0aCk7CisgICAgYnJlYWs7CisgIGNhc2UgTV9BUFAxNDoKKyAgICBleGFtaW5lX2FwcDE0KGNpbmZvLCAoSk9DVEVUICopYiwgbnVtdG9yZWFkLCBsZW5ndGgpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIC8qIGNhbid0IGdldCBoZXJlIHVubGVzcyBqcGVnX3NhdmVfbWFya2VycyBjaG9vc2VzIHdyb25nIHByb2Nlc3NvciAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1VOS05PV05fTUFSS0VSLCBjaW5mby0+dW5yZWFkX21hcmtlcik7CisgICAgYnJlYWs7CisgIH0KKworICAvKiBza2lwIGFueSByZW1haW5pbmcgZGF0YSAtLSBjb3VsZCBiZSBsb3RzICovCisgIElOUFVUX1NZTkMoY2luZm8pOworICBpZiAobGVuZ3RoID4gMCkKKyAgICAoKmNpbmZvLT5zcmMtPnNraXBfaW5wdXRfZGF0YSkgKGNpbmZvLCAobG9uZylsZW5ndGgpOworCisgIHJldHVybiBUUlVFOworfQorCisKKyNpZmRlZiBTQVZFX01BUktFUlNfU1VQUE9SVEVECisKK01FVEhPRERFRihib29sZWFuKQorc2F2ZV9tYXJrZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFNhdmUgYW4gQVBQbiBvciBDT00gbWFya2VyIGludG8gdGhlIG1hcmtlciBsaXN0ICovCit7CisgIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpY2luZm8tPm1hcmtlcjsKKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIGN1cl9tYXJrZXIgPSBtYXJrZXItPmN1cl9tYXJrZXI7CisgIHVuc2lnbmVkIGludCBieXRlc19yZWFkLCBkYXRhX2xlbmd0aDsKKyAgSk9DVEVUICpkYXRhOworICBKTE9ORyBsZW5ndGggPSAwOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBpZiAoY3VyX21hcmtlciA9PSBOVUxMKSB7CisgICAgLyogYmVnaW4gcmVhZGluZyBhIG1hcmtlciAqLworICAgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworICAgIGxlbmd0aCAtPSAyOworICAgIGlmIChsZW5ndGggPj0gMCkgeyAgICAgICAgICAvKiB3YXRjaCBvdXQgZm9yIGJvZ3VzIGxlbmd0aCB3b3JkICovCisgICAgICAvKiBmaWd1cmUgb3V0IGhvdyBtdWNoIHdlIHdhbnQgdG8gc2F2ZSAqLworICAgICAgdW5zaWduZWQgaW50IGxpbWl0OworICAgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IChpbnQpTV9DT00pCisgICAgICAgIGxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQ09NOworICAgICAgZWxzZQorICAgICAgICBsaW1pdCA9IG1hcmtlci0+bGVuZ3RoX2xpbWl0X0FQUG5bY2luZm8tPnVucmVhZF9tYXJrZXIgLSAoaW50KU1fQVBQMF07CisgICAgICBpZiAoKHVuc2lnbmVkIGludClsZW5ndGggPCBsaW1pdCkKKyAgICAgICAgbGltaXQgPSAodW5zaWduZWQgaW50KWxlbmd0aDsKKyAgICAgIC8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBtYXJrZXIgaXRlbSAqLworICAgICAgY3VyX21hcmtlciA9IChqcGVnX3NhdmVkX21hcmtlcl9wdHIpCisgICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0KSArIGxpbWl0KTsKKyAgICAgIGN1cl9tYXJrZXItPm5leHQgPSBOVUxMOworICAgICAgY3VyX21hcmtlci0+bWFya2VyID0gKFVJTlQ4KWNpbmZvLT51bnJlYWRfbWFya2VyOworICAgICAgY3VyX21hcmtlci0+b3JpZ2luYWxfbGVuZ3RoID0gKHVuc2lnbmVkIGludClsZW5ndGg7CisgICAgICBjdXJfbWFya2VyLT5kYXRhX2xlbmd0aCA9IGxpbWl0OworICAgICAgLyogZGF0YSBhcmVhIGlzIGp1c3QgYmV5b25kIHRoZSBqcGVnX21hcmtlcl9zdHJ1Y3QgKi8KKyAgICAgIGRhdGEgPSBjdXJfbWFya2VyLT5kYXRhID0gKEpPQ1RFVCAqKShjdXJfbWFya2VyICsgMSk7CisgICAgICBtYXJrZXItPmN1cl9tYXJrZXIgPSBjdXJfbWFya2VyOworICAgICAgbWFya2VyLT5ieXRlc19yZWFkID0gMDsKKyAgICAgIGJ5dGVzX3JlYWQgPSAwOworICAgICAgZGF0YV9sZW5ndGggPSBsaW1pdDsKKyAgICB9IGVsc2UgeworICAgICAgLyogZGVhbCB3aXRoIGJvZ3VzIGxlbmd0aCB3b3JkICovCisgICAgICBieXRlc19yZWFkID0gZGF0YV9sZW5ndGggPSAwOworICAgICAgZGF0YSA9IE5VTEw7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIHJlc3VtZSByZWFkaW5nIGEgbWFya2VyICovCisgICAgYnl0ZXNfcmVhZCA9IG1hcmtlci0+Ynl0ZXNfcmVhZDsKKyAgICBkYXRhX2xlbmd0aCA9IGN1cl9tYXJrZXItPmRhdGFfbGVuZ3RoOworICAgIGRhdGEgPSBjdXJfbWFya2VyLT5kYXRhICsgYnl0ZXNfcmVhZDsKKyAgfQorCisgIHdoaWxlIChieXRlc19yZWFkIDwgZGF0YV9sZW5ndGgpIHsKKyAgICBJTlBVVF9TWU5DKGNpbmZvKTsgICAgICAgICAgLyogbW92ZSB0aGUgcmVzdGFydCBwb2ludCB0byBoZXJlICovCisgICAgbWFya2VyLT5ieXRlc19yZWFkID0gYnl0ZXNfcmVhZDsKKyAgICAvKiBJZiB0aGVyZSdzIG5vdCBhdCBsZWFzdCBvbmUgYnl0ZSBpbiBidWZmZXIsIHN1c3BlbmQgKi8KKyAgICBNQUtFX0JZVEVfQVZBSUwoY2luZm8sIHJldHVybiBGQUxTRSk7CisgICAgLyogQ29weSBieXRlcyB3aXRoIHJlYXNvbmFibGUgcmFwaWRpdHkgKi8KKyAgICB3aGlsZSAoYnl0ZXNfcmVhZCA8IGRhdGFfbGVuZ3RoICYmIGJ5dGVzX2luX2J1ZmZlciA+IDApIHsKKyAgICAgICpkYXRhKysgPSAqbmV4dF9pbnB1dF9ieXRlKys7CisgICAgICBieXRlc19pbl9idWZmZXItLTsKKyAgICAgIGJ5dGVzX3JlYWQrKzsKKyAgICB9CisgIH0KKworICAvKiBEb25lIHJlYWRpbmcgd2hhdCB3ZSB3YW50IHRvIHJlYWQgKi8KKyAgaWYgKGN1cl9tYXJrZXIgIT0gTlVMTCkgeyAgICAgLyogd2lsbCBiZSBOVUxMIGlmIGJvZ3VzIGxlbmd0aCB3b3JkICovCisgICAgLyogQWRkIG5ldyBtYXJrZXIgdG8gZW5kIG9mIGxpc3QgKi8KKyAgICBpZiAoY2luZm8tPm1hcmtlcl9saXN0ID09IE5VTEwpIHsKKyAgICAgIGNpbmZvLT5tYXJrZXJfbGlzdCA9IGN1cl9tYXJrZXI7CisgICAgfSBlbHNlIHsKKyAgICAgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBwcmV2ID0gY2luZm8tPm1hcmtlcl9saXN0OworICAgICAgd2hpbGUgKHByZXYtPm5leHQgIT0gTlVMTCkKKyAgICAgICAgcHJldiA9IHByZXYtPm5leHQ7CisgICAgICBwcmV2LT5uZXh0ID0gY3VyX21hcmtlcjsKKyAgICB9CisgICAgLyogUmVzZXQgcG9pbnRlciAmIGNhbGMgcmVtYWluaW5nIGRhdGEgbGVuZ3RoICovCisgICAgZGF0YSA9IGN1cl9tYXJrZXItPmRhdGE7CisgICAgbGVuZ3RoID0gY3VyX21hcmtlci0+b3JpZ2luYWxfbGVuZ3RoIC0gZGF0YV9sZW5ndGg7CisgIH0KKyAgLyogUmVzZXQgdG8gaW5pdGlhbCBzdGF0ZSBmb3IgbmV4dCBtYXJrZXIgKi8KKyAgbWFya2VyLT5jdXJfbWFya2VyID0gTlVMTDsKKworICAvKiBQcm9jZXNzIHRoZSBtYXJrZXIgaWYgaW50ZXJlc3Rpbmc7IGVsc2UganVzdCBtYWtlIGEgZ2VuZXJpYyB0cmFjZSBtc2cgKi8KKyAgc3dpdGNoIChjaW5mby0+dW5yZWFkX21hcmtlcikgeworICBjYXNlIE1fQVBQMDoKKyAgICBleGFtaW5lX2FwcDAoY2luZm8sIGRhdGEsIGRhdGFfbGVuZ3RoLCBsZW5ndGgpOworICAgIGJyZWFrOworICBjYXNlIE1fQVBQMTQ6CisgICAgZXhhbWluZV9hcHAxNChjaW5mbywgZGF0YSwgZGF0YV9sZW5ndGgsIGxlbmd0aCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfTUlTQ19NQVJLRVIsIGNpbmZvLT51bnJlYWRfbWFya2VyLAorICAgICAgICAgICAgIChpbnQpKGRhdGFfbGVuZ3RoICsgbGVuZ3RoKSk7CisgICAgYnJlYWs7CisgIH0KKworICAvKiBza2lwIGFueSByZW1haW5pbmcgZGF0YSAtLSBjb3VsZCBiZSBsb3RzICovCisgIElOUFVUX1NZTkMoY2luZm8pOyAgICAgICAgICAgIC8qIGRvIGJlZm9yZSBza2lwX2lucHV0X2RhdGEgKi8KKyAgaWYgKGxlbmd0aCA+IDApCisgICAgKCpjaW5mby0+c3JjLT5za2lwX2lucHV0X2RhdGEpIChjaW5mbywgKGxvbmcpbGVuZ3RoKTsKKworICByZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8qIFNBVkVfTUFSS0VSU19TVVBQT1JURUQgKi8KKworCitNRVRIT0RERUYoYm9vbGVhbikKK3NraXBfdmFyaWFibGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFNraXAgb3ZlciBhbiB1bmtub3duIG9yIHVuaW50ZXJlc3RpbmcgdmFyaWFibGUtbGVuZ3RoIG1hcmtlciAqLworeworICBKTE9ORyBsZW5ndGg7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworICBsZW5ndGggLT0gMjsKKworICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19NSVNDX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIsIChpbnQpbGVuZ3RoKTsKKworICBJTlBVVF9TWU5DKGNpbmZvKTsgICAgICAgICAgICAvKiBkbyBiZWZvcmUgc2tpcF9pbnB1dF9kYXRhICovCisgIGlmIChsZW5ndGggPiAwKQorICAgICgqY2luZm8tPnNyYy0+c2tpcF9pbnB1dF9kYXRhKSAoY2luZm8sIChsb25nKWxlbmd0aCk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEZpbmQgdGhlIG5leHQgSlBFRyBtYXJrZXIsIHNhdmUgaXQgaW4gY2luZm8tPnVucmVhZF9tYXJrZXIuCisgKiBSZXR1cm5zIEZBTFNFIGlmIGhhZCB0byBzdXNwZW5kIGJlZm9yZSByZWFjaGluZyBhIG1hcmtlcjsKKyAqIGluIHRoYXQgY2FzZSBjaW5mby0+dW5yZWFkX21hcmtlciBpcyB1bmNoYW5nZWQuCisgKgorICogTm90ZSB0aGF0IHRoZSByZXN1bHQgbWlnaHQgbm90IGJlIGEgdmFsaWQgbWFya2VyIGNvZGUsCisgKiBidXQgaXQgd2lsbCBuZXZlciBiZSAwIG9yIEZGLgorICovCisKK0xPQ0FMKGJvb2xlYW4pCituZXh0X21hcmtlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgYzsKKyAgSU5QVVRfVkFSUyhjaW5mbyk7CisKKyAgZm9yICg7OykgeworICAgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgICAgLyogU2tpcCBhbnkgbm9uLUZGIGJ5dGVzLgorICAgICAqIFRoaXMgbWF5IGxvb2sgYSBiaXQgaW5lZmZpY2llbnQsIGJ1dCBpdCB3aWxsIG5vdCBvY2N1ciBpbiBhIHZhbGlkIGZpbGUuCisgICAgICogV2Ugc3luYyBhZnRlciBlYWNoIGRpc2NhcmRlZCBieXRlIHNvIHRoYXQgYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlCisgICAgICogY2FuIGRpc2NhcmQgdGhlIGJ5dGUgZnJvbSBpdHMgYnVmZmVyLgorICAgICAqLworICAgIHdoaWxlIChjICE9IDB4RkYpIHsKKyAgICAgIGNpbmZvLT5tYXJrZXItPmRpc2NhcmRlZF9ieXRlcysrOworICAgICAgSU5QVVRfU1lOQyhjaW5mbyk7CisgICAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOworICAgIH0KKyAgICAvKiBUaGlzIGxvb3Agc3dhbGxvd3MgYW55IGR1cGxpY2F0ZSBGRiBieXRlcy4gIEV4dHJhIEZGcyBhcmUgbGVnYWwgYXMKKyAgICAgKiBwYWQgYnl0ZXMsIHNvIGRvbid0IGNvdW50IHRoZW0gaW4gZGlzY2FyZGVkX2J5dGVzLiAgV2UgYXNzdW1lIHRoZXJlCisgICAgICogd2lsbCBub3QgYmUgc28gbWFueSBjb25zZWN1dGl2ZSBGRiBieXRlcyBhcyB0byBvdmVyZmxvdyBhIHN1c3BlbmRpbmcKKyAgICAgKiBkYXRhIHNvdXJjZSdzIGlucHV0IGJ1ZmZlci4KKyAgICAgKi8KKyAgICBkbyB7CisgICAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOworICAgIH0gd2hpbGUgKGMgPT0gMHhGRik7CisgICAgaWYgKGMgIT0gMCkKKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSB2YWxpZCBtYXJrZXIsIGV4aXQgbG9vcCAqLworICAgIC8qIFJlYWNoIGhlcmUgaWYgd2UgZm91bmQgYSBzdHVmZmVkLXplcm8gZGF0YSBzZXF1ZW5jZSAoRkYvMDApLgorICAgICAqIERpc2NhcmQgaXQgYW5kIGxvb3AgYmFjayB0byB0cnkgYWdhaW4uCisgICAgICovCisgICAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICs9IDI7CisgICAgSU5QVVRfU1lOQyhjaW5mbyk7CisgIH0KKworICBpZiAoY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICE9IDApIHsKKyAgICBXQVJOTVMyKGNpbmZvLCBKV1JOX0VYVFJBTkVPVVNfREFUQSwgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzLCBjKTsKKyAgICBjaW5mby0+bWFya2VyLT5kaXNjYXJkZWRfYnl0ZXMgPSAwOworICB9CisKKyAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCitMT0NBTChib29sZWFuKQorZmlyc3RfbWFya2VyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBMaWtlIG5leHRfbWFya2VyLCBidXQgdXNlZCB0byBvYnRhaW4gdGhlIGluaXRpYWwgU09JIG1hcmtlci4gKi8KKy8qIEZvciB0aGlzIG1hcmtlciwgd2UgZG8gbm90IGFsbG93IHByZWNlZGluZyBnYXJiYWdlIG9yIGZpbGw7IG90aGVyd2lzZSwKKyAqIHdlIG1pZ2h0IHdlbGwgc2NhbiBhbiBlbnRpcmUgaW5wdXQgZmlsZSBiZWZvcmUgcmVhbGl6aW5nIGl0IGFpbid0IEpQRUcuCisgKiBJZiBhbiBhcHBsaWNhdGlvbiB3YW50cyB0byBwcm9jZXNzIG5vbi1KRklGIGZpbGVzLCBpdCBtdXN0IHNlZWsgdG8gdGhlCisgKiBTT0kgYmVmb3JlIGNhbGxpbmcgdGhlIEpQRUcgbGlicmFyeS4KKyAqLworeworICBpbnQgYywgYzI7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgIElOUFVUX0JZVEUoY2luZm8sIGMyLCByZXR1cm4gRkFMU0UpOworICBpZiAoYyAhPSAweEZGIHx8IGMyICE9IChpbnQpTV9TT0kpCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfTk9fU09JLCBjLCBjMik7CisKKyAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjMjsKKworICBJTlBVVF9TWU5DKGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIFJlYWQgbWFya2VycyB1bnRpbCBTT1Mgb3IgRU9JLgorICoKKyAqIFJldHVybnMgc2FtZSBjb2RlcyBhcyBhcmUgZGVmaW5lZCBmb3IganBlZ19jb25zdW1lX2lucHV0OgorICogSlBFR19TVVNQRU5ERUQsIEpQRUdfUkVBQ0hFRF9TT1MsIG9yIEpQRUdfUkVBQ0hFRF9FT0kuCisgKi8KKworTUVUSE9EREVGKGludCkKK3JlYWRfbWFya2VycyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBPdXRlciBsb29wIHJlcGVhdHMgb25jZSBmb3IgZWFjaCBtYXJrZXIuICovCisgIGZvciAoOzspIHsKKyAgICAvKiBDb2xsZWN0IHRoZSBtYXJrZXIgcHJvcGVyLCB1bmxlc3Mgd2UgYWxyZWFkeSBkaWQuICovCisgICAgLyogTkI6IGZpcnN0X21hcmtlcigpIGVuZm9yY2VzIHRoZSByZXF1aXJlbWVudCB0aGF0IFNPSSBhcHBlYXIgZmlyc3QuICovCisgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKyAgICAgIGlmICghY2luZm8tPm1hcmtlci0+c2F3X1NPSSkgeworICAgICAgICBpZiAoIWZpcnN0X21hcmtlcihjaW5mbykpCisgICAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFuZXh0X21hcmtlcihjaW5mbykpCisgICAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgfQorICAgIH0KKyAgICAvKiBBdCB0aGlzIHBvaW50IGNpbmZvLT51bnJlYWRfbWFya2VyIGNvbnRhaW5zIHRoZSBtYXJrZXIgY29kZSBhbmQgdGhlCisgICAgICogaW5wdXQgcG9pbnQgaXMganVzdCBwYXN0IHRoZSBtYXJrZXIgcHJvcGVyLCBidXQgYmVmb3JlIGFueSBwYXJhbWV0ZXJzLgorICAgICAqIEEgc3VzcGVuc2lvbiB3aWxsIGNhdXNlIHVzIHRvIHJldHVybiB3aXRoIHRoaXMgc3RhdGUgc3RpbGwgdHJ1ZS4KKyAgICAgKi8KKyAgICBzd2l0Y2ggKGNpbmZvLT51bnJlYWRfbWFya2VyKSB7CisgICAgY2FzZSBNX1NPSToKKyAgICAgIGlmICghZ2V0X3NvaShjaW5mbykpCisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNX1NPRjA6ICAgICAgICAgICAgICAgIC8qIEJhc2VsaW5lICovCisgICAgY2FzZSBNX1NPRjE6ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KKyAgICAgIGlmICghZ2V0X3NvZihjaW5mbywgRkFMU0UsIEZBTFNFKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fU09GMjogICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KKyAgICAgIGlmICghZ2V0X3NvZihjaW5mbywgVFJVRSwgRkFMU0UpKQorICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTV9TT0Y5OiAgICAgICAgICAgICAgICAvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgICBpZiAoIWdldF9zb2YoY2luZm8sIEZBTFNFLCBUUlVFKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fU09GMTA6ICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KKyAgICAgIGlmICghZ2V0X3NvZihjaW5mbywgVFJVRSwgVFJVRSkpCisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworCisgICAgLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIFNPRm4gdHlwZXMgKi8KKyAgICBjYXNlIE1fU09GMzogICAgICAgICAgICAgICAgLyogTG9zc2xlc3MsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNTogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNjogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjc6ICAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgSHVmZm1hbiAqLworICAgIGNhc2UgTV9KUEc6ICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zICovCisgICAgY2FzZSBNX1NPRjExOiAgICAgICAgICAgICAgIC8qIExvc3NsZXNzLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjEzOiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjE0OiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBwcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxNTogICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1NPRl9VTlNVUFBPUlRFRCwgY2luZm8tPnVucmVhZF9tYXJrZXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fU09TOgorICAgICAgaWYgKCFnZXRfc29zKGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOyAvKiBwcm9jZXNzZWQgdGhlIG1hcmtlciAqLworICAgICAgcmV0dXJuIEpQRUdfUkVBQ0hFRF9TT1M7CisKKyAgICBjYXNlIE1fRU9JOgorICAgICAgVFJBQ0VNUyhjaW5mbywgMSwgSlRSQ19FT0kpOworICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOyAvKiBwcm9jZXNzZWQgdGhlIG1hcmtlciAqLworICAgICAgcmV0dXJuIEpQRUdfUkVBQ0hFRF9FT0k7CisKKyAgICBjYXNlIE1fREFDOgorICAgICAgaWYgKCFnZXRfZGFjKGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fREhUOgorICAgICAgaWYgKCFnZXRfZGh0KGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fRFFUOgorICAgICAgaWYgKCFnZXRfZHF0KGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fRFJJOgorICAgICAgaWYgKCFnZXRfZHJpKGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fQVBQMDoKKyAgICBjYXNlIE1fQVBQMToKKyAgICBjYXNlIE1fQVBQMjoKKyAgICBjYXNlIE1fQVBQMzoKKyAgICBjYXNlIE1fQVBQNDoKKyAgICBjYXNlIE1fQVBQNToKKyAgICBjYXNlIE1fQVBQNjoKKyAgICBjYXNlIE1fQVBQNzoKKyAgICBjYXNlIE1fQVBQODoKKyAgICBjYXNlIE1fQVBQOToKKyAgICBjYXNlIE1fQVBQMTA6CisgICAgY2FzZSBNX0FQUDExOgorICAgIGNhc2UgTV9BUFAxMjoKKyAgICBjYXNlIE1fQVBQMTM6CisgICAgY2FzZSBNX0FQUDE0OgorICAgIGNhc2UgTV9BUFAxNToKKyAgICAgIGlmICghKCooKG15X21hcmtlcl9wdHIpY2luZm8tPm1hcmtlciktPnByb2Nlc3NfQVBQblsKKyAgICAgICAgICAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyIC0gKGludClNX0FQUDBdKSAoY2luZm8pKQorICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTV9DT006CisgICAgICBpZiAoISgqKChteV9tYXJrZXJfcHRyKWNpbmZvLT5tYXJrZXIpLT5wcm9jZXNzX0NPTSkgKGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fUlNUMDogICAgICAgICAgICAgICAgLyogdGhlc2UgYXJlIGFsbCBwYXJhbWV0ZXJsZXNzICovCisgICAgY2FzZSBNX1JTVDE6CisgICAgY2FzZSBNX1JTVDI6CisgICAgY2FzZSBNX1JTVDM6CisgICAgY2FzZSBNX1JTVDQ6CisgICAgY2FzZSBNX1JTVDU6CisgICAgY2FzZSBNX1JTVDY6CisgICAgY2FzZSBNX1JTVDc6CisgICAgY2FzZSBNX1RFTToKKyAgICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX1BBUk1MRVNTX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fRE5MOiAgICAgICAgICAgICAgICAgLyogSWdub3JlIEROTCAuLi4gcGVyaGFwcyB0aGUgd3JvbmcgdGhpbmcgKi8KKyAgICAgIGlmICghc2tpcF92YXJpYWJsZShjaW5mbykpCisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIG11c3QgYmUgREhQLCBFWFAsIEpQR24sIG9yIFJFU24gKi8KKyAgICAgIC8qIEZvciBub3csIHdlIHRyZWF0IHRoZSByZXNlcnZlZCBtYXJrZXJzIGFzIGZhdGFsIGVycm9ycyBzaW5jZSB0aGV5IGFyZQorICAgICAgICogbGlrZWx5IHRvIGJlIHVzZWQgdG8gc2lnbmFsIGluY29tcGF0aWJsZSBKUEVHIFBhcnQgMyBleHRlbnNpb25zLgorICAgICAgICogT25jZSB0aGUgSlBFRyAzIHZlcnNpb24tbnVtYmVyIG1hcmtlciBpcyB3ZWxsIGRlZmluZWQsIHRoaXMgY29kZQorICAgICAgICogb3VnaHQgdG8gY2hhbmdlIQorICAgICAgICovCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9VTktOT1dOX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgbWFya2VyLCBzbyByZXNldCBzdGF0ZSB2YXJpYWJsZSAqLworICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsKKyAgfSAvKiBlbmQgbG9vcCAqLworfQorCisKKy8qCisgKiBSZWFkIGEgcmVzdGFydCBtYXJrZXIsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGFwcGVhciBuZXh0IGluIHRoZSBkYXRhc3RyZWFtOworICogaWYgdGhlIG1hcmtlciBpcyBub3QgdGhlcmUsIHRha2UgYXBwcm9wcmlhdGUgcmVjb3ZlcnkgYWN0aW9uLgorICogUmV0dXJucyBGQUxTRSBpZiBzdXNwZW5zaW9uIGlzIHJlcXVpcmVkLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBlbnRyb3B5IGRlY29kZXIgYWZ0ZXIgaXQgaGFzIHJlYWQgYW4gYXBwcm9wcmlhdGUKKyAqIG51bWJlciBvZiBNQ1VzLiAgY2luZm8tPnVucmVhZF9tYXJrZXIgbWF5IGJlIG5vbnplcm8gaWYgdGhlIGVudHJvcHkgZGVjb2RlcgorICogaGFzIGFscmVhZHkgcmVhZCBhIG1hcmtlciBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gIFVuZGVyIG5vcm1hbCBjb25kaXRpb25zCisgKiBjaW5mby0+dW5yZWFkX21hcmtlciB3aWxsIGJlIHJlc2V0IHRvIDAgYmVmb3JlIHJldHVybmluZzsgaWYgbm90IHJlc2V0LAorICogaXQgaG9sZHMgYSBtYXJrZXIgd2hpY2ggdGhlIGRlY29kZXIgd2lsbCBiZSB1bmFibGUgdG8gcmVhZCBwYXN0LgorICovCisKK01FVEhPRERFRihib29sZWFuKQorcmVhZF9yZXN0YXJ0X21hcmtlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBPYnRhaW4gYSBtYXJrZXIgdW5sZXNzIHdlIGFscmVhZHkgZGlkLiAqLworICAvKiBOb3RlIHRoYXQgbmV4dF9tYXJrZXIgd2lsbCBjb21wbGFpbiBpZiBpdCBza2lwcyBhbnkgZGF0YS4gKi8KKyAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKyAgICBpZiAoIW5leHRfbWFya2VyKGNpbmZvKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PQorICAgICAgKChpbnQpTV9SU1QwICsgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSkpIHsKKyAgICAvKiBOb3JtYWwgY2FzZSAtLS0gc3dhbGxvdyB0aGUgbWFya2VyIGFuZCBsZXQgZW50cm9weSBkZWNvZGVyIGNvbnRpbnVlICovCisgICAgVFJBQ0VNUzEoY2luZm8sIDMsIEpUUkNfUlNULCBjaW5mby0+bWFya2VyLT5uZXh0X3Jlc3RhcnRfbnVtKTsKKyAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7CisgIH0gZWxzZSB7CisgICAgLyogVWgtb2gsIHRoZSByZXN0YXJ0IG1hcmtlcnMgaGF2ZSBiZWVuIG1lc3NlZCB1cC4gKi8KKyAgICAvKiBMZXQgdGhlIGRhdGEgc291cmNlIG1hbmFnZXIgZGV0ZXJtaW5lIGhvdyB0byByZXN5bmMuICovCisgICAgaWYgKCEoKmNpbmZvLT5zcmMtPnJlc3luY190b19yZXN0YXJ0KSAoY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSkpCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBVcGRhdGUgbmV4dC1yZXN0YXJ0IHN0YXRlICovCisgIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gPSAoY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSArIDEpICYgNzsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogVGhpcyBpcyB0aGUgZGVmYXVsdCByZXN5bmNfdG9fcmVzdGFydCBtZXRob2QgZm9yIGRhdGEgc291cmNlIG1hbmFnZXJzCisgKiB0byB1c2UgaWYgdGhleSBkb24ndCBoYXZlIGFueSBiZXR0ZXIgYXBwcm9hY2guICBTb21lIGRhdGEgc291cmNlIG1hbmFnZXJzCisgKiBtYXkgYmUgYWJsZSB0byBiYWNrIHVwLCBvciBtYXkgaGF2ZSBhZGRpdGlvbmFsIGtub3dsZWRnZSBhYm91dCB0aGUgZGF0YQorICogd2hpY2ggcGVybWl0cyBhIG1vcmUgaW50ZWxsaWdlbnQgcmVjb3Zlcnkgc3RyYXRlZ3k7IHN1Y2ggbWFuYWdlcnMgd291bGQKKyAqIHByZXN1bWFibHkgc3VwcGx5IHRoZWlyIG93biByZXN5bmMgbWV0aG9kLgorICoKKyAqIHJlYWRfcmVzdGFydF9tYXJrZXIgY2FsbHMgcmVzeW5jX3RvX3Jlc3RhcnQgaWYgaXQgZmluZHMgYSBtYXJrZXIgb3RoZXIgdGhhbgorICogdGhlIHJlc3RhcnQgbWFya2VyIGl0IHdhcyBleHBlY3RpbmcuICAoVGhpcyBjb2RlIGlzICpub3QqIHVzZWQgdW5sZXNzCisgKiBhIG5vbnplcm8gcmVzdGFydCBpbnRlcnZhbCBoYXMgYmVlbiBkZWNsYXJlZC4pICBjaW5mby0+dW5yZWFkX21hcmtlciBpcworICogdGhlIG1hcmtlciBjb2RlIGFjdHVhbGx5IGZvdW5kIChtaWdodCBiZSBhbnl0aGluZywgZXhjZXB0IDAgb3IgRkYpLgorICogVGhlIGRlc2lyZWQgcmVzdGFydCBtYXJrZXIgbnVtYmVyICgwLi43KSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgKiBUaGlzIHJvdXRpbmUgaXMgc3VwcG9zZWQgdG8gYXBwbHkgd2hhdGV2ZXIgZXJyb3IgcmVjb3Zlcnkgc3RyYXRlZ3kgc2VlbXMKKyAqIGFwcHJvcHJpYXRlIGluIG9yZGVyIHRvIHBvc2l0aW9uIHRoZSBpbnB1dCBzdHJlYW0gdG8gdGhlIG5leHQgZGF0YSBzZWdtZW50LgorICogTm90ZSB0aGF0IGNpbmZvLT51bnJlYWRfbWFya2VyIGlzIHRyZWF0ZWQgYXMgYSBtYXJrZXIgYXBwZWFyaW5nIGJlZm9yZQorICogdGhlIGN1cnJlbnQgZGF0YS1zb3VyY2UgaW5wdXQgcG9pbnQ7IHVzdWFsbHkgaXQgc2hvdWxkIGJlIHJlc2V0IHRvIHplcm8KKyAqIGJlZm9yZSByZXR1cm5pbmcuCisgKiBSZXR1cm5zIEZBTFNFIGlmIHN1c3BlbnNpb24gaXMgcmVxdWlyZWQuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBzdWJzdGFudGlhbGx5IGNvbnN0cmFpbmVkIGJ5IHdhbnRpbmcgdG8gdHJlYXQgdGhlCisgKiBpbnB1dCBhcyBhIGRhdGEgc3RyZWFtOyB0aGlzIG1lYW5zIHdlIGNhbid0IGJhY2sgdXAuICBUaGVyZWZvcmUsIHdlIGhhdmUKKyAqIG9ubHkgdGhlIGZvbGxvd2luZyBhY3Rpb25zIHRvIHdvcmsgd2l0aDoKKyAqICAgMS4gU2ltcGx5IGRpc2NhcmQgdGhlIG1hcmtlciBhbmQgbGV0IHRoZSBlbnRyb3B5IGRlY29kZXIgcmVzdW1lIGF0IG5leHQKKyAqICAgICAgYnl0ZSBvZiBmaWxlLgorICogICAyLiBSZWFkIGZvcndhcmQgdW50aWwgd2UgZmluZCBhbm90aGVyIG1hcmtlciwgZGlzY2FyZGluZyBpbnRlcnZlbmluZworICogICAgICBkYXRhLiAgKEluIHRoZW9yeSB3ZSBjb3VsZCBsb29rIGFoZWFkIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXJsb2FkLAorICogICAgICB3aXRob3V0IGhhdmluZyB0byBkaXNjYXJkIGRhdGEgaWYgd2UgZG9uJ3QgZmluZCB0aGUgZGVzaXJlZCBtYXJrZXIuCisgKiAgICAgIFRoaXMgaWRlYSBpcyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgaW4gcGFydCBiZWNhdXNlIGl0IG1ha2VzIGJlaGF2aW9yCisgKiAgICAgIGRlcGVuZGVudCBvbiBidWZmZXIgc2l6ZSBhbmQgY2hhbmNlIGJ1ZmZlci1ib3VuZGFyeSBwb3NpdGlvbnMuKQorICogICAzLiBMZWF2ZSB0aGUgbWFya2VyIHVucmVhZCAoYnkgZmFpbGluZyB0byB6ZXJvIGNpbmZvLT51bnJlYWRfbWFya2VyKS4KKyAqICAgICAgVGhpcyB3aWxsIGNhdXNlIHRoZSBlbnRyb3B5IGRlY29kZXIgdG8gcHJvY2VzcyBhbiBlbXB0eSBkYXRhIHNlZ21lbnQsCisgKiAgICAgIGluc2VydGluZyBkdW1teSB6ZXJvZXMsIGFuZCB0aGVuIHdlIHdpbGwgcmVwcm9jZXNzIHRoZSBtYXJrZXIuCisgKgorICogIzIgaXMgYXBwcm9wcmlhdGUgaWYgd2UgdGhpbmsgdGhlIGRlc2lyZWQgbWFya2VyIGxpZXMgYWhlYWQsIHdoaWxlICMzIGlzCisgKiBhcHByb3ByaWF0ZSBpZiB0aGUgZm91bmQgbWFya2VyIGlzIGEgZnV0dXJlIHJlc3RhcnQgbWFya2VyIChpbmRpY2F0aW5nCisgKiB0aGF0IHdlIGhhdmUgbWlzc2VkIHRoZSBkZXNpcmVkIHJlc3RhcnQgbWFya2VyLCBwcm9iYWJseSBiZWNhdXNlIGl0IGdvdAorICogY29ycnVwdGVkKS4KKyAqIFdlIGFwcGx5ICMyIG9yICMzIGlmIHRoZSBmb3VuZCBtYXJrZXIgaXMgYSByZXN0YXJ0IG1hcmtlciBubyBtb3JlIHRoYW4KKyAqIHR3byBjb3VudHMgYmVoaW5kIG9yIGFoZWFkIG9mIHRoZSBleHBlY3RlZCBvbmUuICBXZSBhbHNvIGFwcGx5ICMyIGlmIHRoZQorICogZm91bmQgbWFya2VyIGlzIG5vdCBhIGxlZ2FsIEpQRUcgbWFya2VyIGNvZGUgKGl0J3MgY2VydGFpbmx5IGJvZ3VzIGRhdGEpLgorICogSWYgdGhlIGZvdW5kIG1hcmtlciBpcyBhIHJlc3RhcnQgbWFya2VyIG1vcmUgdGhhbiAyIGNvdW50cyBhd2F5LCB3ZSBkbyAjMQorICogKHRvbyBtdWNoIHJpc2sgdGhhdCB0aGUgbWFya2VyIGlzIGVycm9uZW91czsgd2l0aCBsdWNrIHdlIHdpbGwgYmUgYWJsZSB0bworICogcmVzeW5jIGF0IHNvbWUgZnV0dXJlIHBvaW50KS4KKyAqIEZvciBhbnkgdmFsaWQgbm9uLXJlc3RhcnQgSlBFRyBtYXJrZXIsIHdlIGFwcGx5ICMzLiAgVGhpcyBrZWVwcyB1cyBmcm9tCisgKiBvdmVycnVubmluZyB0aGUgZW5kIG9mIGEgc2Nhbi4gIEFuIGltcGxlbWVudGF0aW9uIGxpbWl0ZWQgdG8gc2luZ2xlLXNjYW4KKyAqIGZpbGVzIG1pZ2h0IGZpbmQgaXQgYmV0dGVyIHRvIGFwcGx5ICMyIGZvciBtYXJrZXJzIG90aGVyIHRoYW4gRU9JLCBzaW5jZQorICogYW55IG90aGVyIG1hcmtlciB3b3VsZCBoYXZlIHRvIGJlIGJvZ3VzIGRhdGEgaW4gdGhhdCBjYXNlLgorICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19yZXN5bmNfdG9fcmVzdGFydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgZGVzaXJlZCkKK3sKKyAgaW50IG1hcmtlciA9IGNpbmZvLT51bnJlYWRfbWFya2VyOworICBpbnQgYWN0aW9uID0gMTsKKworICAvKiBBbHdheXMgcHV0IHVwIGEgd2FybmluZy4gKi8KKyAgV0FSTk1TMihjaW5mbywgSldSTl9NVVNUX1JFU1lOQywgbWFya2VyLCBkZXNpcmVkKTsKKworICAvKiBPdXRlciBsb29wIGhhbmRsZXMgcmVwZWF0ZWQgZGVjaXNpb24gYWZ0ZXIgc2Nhbm5pbmcgZm9yd2FyZC4gKi8KKyAgZm9yICg7OykgeworICAgIGlmIChtYXJrZXIgPCAoaW50KU1fU09GMCkKKyAgICAgIGFjdGlvbiA9IDI7ICAgICAgICAgICAgICAgLyogaW52YWxpZCBtYXJrZXIgKi8KKyAgICBlbHNlIGlmIChtYXJrZXIgPCAoaW50KU1fUlNUMCB8fCBtYXJrZXIgPiAoaW50KU1fUlNUNykKKyAgICAgIGFjdGlvbiA9IDM7ICAgICAgICAgICAgICAgLyogdmFsaWQgbm9uLXJlc3RhcnQgbWFya2VyICovCisgICAgZWxzZSB7CisgICAgICBpZiAobWFya2VyID09ICgoaW50KU1fUlNUMCArICgoZGVzaXJlZCArIDEpICYgNykpIHx8CisgICAgICAgICAgbWFya2VyID09ICgoaW50KU1fUlNUMCArICgoZGVzaXJlZCArIDIpICYgNykpKQorICAgICAgICBhY3Rpb24gPSAzOyAgICAgICAgICAgICAvKiBvbmUgb2YgdGhlIG5leHQgdHdvIGV4cGVjdGVkIHJlc3RhcnRzICovCisgICAgICBlbHNlIGlmIChtYXJrZXIgPT0gKChpbnQpTV9SU1QwICsgKChkZXNpcmVkIC0gMSkgJiA3KSkgfHwKKyAgICAgICAgICAgICAgIG1hcmtlciA9PSAoKGludClNX1JTVDAgKyAoKGRlc2lyZWQgLSAyKSAmIDcpKSkKKyAgICAgICAgYWN0aW9uID0gMjsgICAgICAgICAgICAgLyogYSBwcmlvciByZXN0YXJ0LCBzbyBhZHZhbmNlICovCisgICAgICBlbHNlCisgICAgICAgIGFjdGlvbiA9IDE7ICAgICAgICAgICAgIC8qIGRlc2lyZWQgcmVzdGFydCBvciB0b28gZmFyIGF3YXkgKi8KKyAgICB9CisgICAgVFJBQ0VNUzIoY2luZm8sIDQsIEpUUkNfUkVDT1ZFUllfQUNUSU9OLCBtYXJrZXIsIGFjdGlvbik7CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICBjYXNlIDE6CisgICAgICAvKiBEaXNjYXJkIG1hcmtlciBhbmQgbGV0IGVudHJvcHkgZGVjb2RlciByZXN1bWUgcHJvY2Vzc2luZy4gKi8KKyAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsKKyAgICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgMjoKKyAgICAgIC8qIFNjYW4gdG8gdGhlIG5leHQgbWFya2VyLCBhbmQgcmVwZWF0IHRoZSBkZWNpc2lvbiBsb29wLiAqLworICAgICAgaWYgKCFuZXh0X21hcmtlcihjaW5mbykpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIG1hcmtlciA9IGNpbmZvLT51bnJlYWRfbWFya2VyOworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgLyogUmV0dXJuIHdpdGhvdXQgYWR2YW5jaW5nIHBhc3QgdGhpcyBtYXJrZXIuICovCisgICAgICAvKiBFbnRyb3B5IGRlY29kZXIgd2lsbCBiZSBmb3JjZWQgdG8gcHJvY2VzcyBhbiBlbXB0eSBzZWdtZW50LiAqLworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICB9IC8qIGVuZCBsb29wICovCit9CisKKworLyoKKyAqIFJlc2V0IG1hcmtlciBwcm9jZXNzaW5nIHN0YXRlIHRvIGJlZ2luIGEgZnJlc2ggZGF0YXN0cmVhbS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Jlc2V0X21hcmtlcl9yZWFkZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFya2VyX3B0ciBtYXJrZXIgPSAobXlfbWFya2VyX3B0ciljaW5mby0+bWFya2VyOworCisgIGNpbmZvLT5jb21wX2luZm8gPSBOVUxMOyAgICAgICAgICAgICAgLyogdW50aWwgYWxsb2NhdGVkIGJ5IGdldF9zb2YgKi8KKyAgY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyID0gMDsgICAgICAgICAvKiBubyBTT1Mgc2VlbiB5ZXQgKi8KKyAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOyAgICAgICAgICAgICAvKiBubyBwZW5kaW5nIG1hcmtlciAqLworICBtYXJrZXItPnB1Yi5zYXdfU09JID0gRkFMU0U7ICAgICAgICAgIC8qIHNldCBpbnRlcm5hbCBzdGF0ZSB0b28gKi8KKyAgbWFya2VyLT5wdWIuc2F3X1NPRiA9IEZBTFNFOworICBtYXJrZXItPnB1Yi5kaXNjYXJkZWRfYnl0ZXMgPSAwOworICBtYXJrZXItPmN1cl9tYXJrZXIgPSBOVUxMOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBtYXJrZXIgcmVhZGVyIG1vZHVsZS4KKyAqIFRoaXMgaXMgY2FsbGVkIG9ubHkgb25jZSwgd2hlbiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QgaXMgY3JlYXRlZC4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X21hcmtlcl9yZWFkZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFya2VyX3B0ciBtYXJrZXI7CisgIGludCBpOworCisgIC8qIENyZWF0ZSBzdWJvYmplY3QgaW4gcGVybWFuZW50IHBvb2wgKi8KKyAgbWFya2VyID0gKG15X21hcmtlcl9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX1BFUk1BTkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG15X21hcmtlcl9yZWFkZXIpKTsKKyAgY2luZm8tPm1hcmtlciA9IChzdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyICopbWFya2VyOworICAvKiBJbml0aWFsaXplIHB1YmxpYyBtZXRob2QgcG9pbnRlcnMgKi8KKyAgbWFya2VyLT5wdWIucmVzZXRfbWFya2VyX3JlYWRlciA9IHJlc2V0X21hcmtlcl9yZWFkZXI7CisgIG1hcmtlci0+cHViLnJlYWRfbWFya2VycyA9IHJlYWRfbWFya2VyczsKKyAgbWFya2VyLT5wdWIucmVhZF9yZXN0YXJ0X21hcmtlciA9IHJlYWRfcmVzdGFydF9tYXJrZXI7CisgIC8qIEluaXRpYWxpemUgQ09NL0FQUG4gcHJvY2Vzc2luZy4KKyAgICogQnkgZGVmYXVsdCwgd2UgZXhhbWluZSBhbmQgdGhlbiBkaXNjYXJkIEFQUDAgYW5kIEFQUDE0LAorICAgKiBidXQgc2ltcGx5IGRpc2NhcmQgQ09NIGFuZCBhbGwgb3RoZXIgQVBQbi4KKyAgICovCisgIG1hcmtlci0+cHJvY2Vzc19DT00gPSBza2lwX3ZhcmlhYmxlOworICBtYXJrZXItPmxlbmd0aF9saW1pdF9DT00gPSAwOworICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgIG1hcmtlci0+cHJvY2Vzc19BUFBuW2ldID0gc2tpcF92YXJpYWJsZTsKKyAgICBtYXJrZXItPmxlbmd0aF9saW1pdF9BUFBuW2ldID0gMDsKKyAgfQorICBtYXJrZXItPnByb2Nlc3NfQVBQblswXSA9IGdldF9pbnRlcmVzdGluZ19hcHBuOworICBtYXJrZXItPnByb2Nlc3NfQVBQblsxNF0gPSBnZXRfaW50ZXJlc3RpbmdfYXBwbjsKKyAgLyogUmVzZXQgbWFya2VyIHByb2Nlc3Npbmcgc3RhdGUgKi8KKyAgcmVzZXRfbWFya2VyX3JlYWRlcihjaW5mbyk7Cit9CisKKworLyoKKyAqIENvbnRyb2wgc2F2aW5nIG9mIENPTSBhbmQgQVBQbiBtYXJrZXJzIGludG8gbWFya2VyX2xpc3QuCisgKi8KKworI2lmZGVmIFNBVkVfTUFSS0VSU19TVVBQT1JURUQKKworR0xPQkFMKHZvaWQpCitqcGVnX3NhdmVfbWFya2VycyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xpbWl0KQoreworICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKWNpbmZvLT5tYXJrZXI7CisgIGxvbmcgbWF4bGVuZ3RoOworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NvcjsKKworICAvKiBMZW5ndGggbGltaXQgbXVzdG4ndCBiZSBsYXJnZXIgdGhhbiB3aGF0IHdlIGNhbiBhbGxvY2F0ZQorICAgKiAoc2hvdWxkIG9ubHkgYmUgYSBjb25jZXJuIGluIGEgMTYtYml0IGVudmlyb25tZW50KS4KKyAgICovCisgIG1heGxlbmd0aCA9IGNpbmZvLT5tZW0tPm1heF9hbGxvY19jaHVuayAtIHNpemVvZihzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0KTsKKyAgaWYgKCgobG9uZylsZW5ndGhfbGltaXQpID4gbWF4bGVuZ3RoKQorICAgIGxlbmd0aF9saW1pdCA9ICh1bnNpZ25lZCBpbnQpbWF4bGVuZ3RoOworCisgIC8qIENob29zZSBwcm9jZXNzb3Igcm91dGluZSB0byB1c2UuCisgICAqIEFQUDAvQVBQMTQgaGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50cy4KKyAgICovCisgIGlmIChsZW5ndGhfbGltaXQpIHsKKyAgICBwcm9jZXNzb3IgPSBzYXZlX21hcmtlcjsKKyAgICAvKiBJZiBzYXZpbmcgQVBQMC9BUFAxNCwgc2F2ZSBhdCBsZWFzdCBlbm91Z2ggZm9yIG91ciBpbnRlcm5hbCB1c2UuICovCisgICAgaWYgKG1hcmtlcl9jb2RlID09IChpbnQpTV9BUFAwICYmIGxlbmd0aF9saW1pdCA8IEFQUDBfREFUQV9MRU4pCisgICAgICBsZW5ndGhfbGltaXQgPSBBUFAwX0RBVEFfTEVOOworICAgIGVsc2UgaWYgKG1hcmtlcl9jb2RlID09IChpbnQpTV9BUFAxNCAmJiBsZW5ndGhfbGltaXQgPCBBUFAxNF9EQVRBX0xFTikKKyAgICAgIGxlbmd0aF9saW1pdCA9IEFQUDE0X0RBVEFfTEVOOworICB9IGVsc2UgeworICAgIHByb2Nlc3NvciA9IHNraXBfdmFyaWFibGU7CisgICAgLyogSWYgZGlzY2FyZGluZyBBUFAwL0FQUDE0LCB1c2Ugb3VyIHJlZ3VsYXIgb24tdGhlLWZseSBwcm9jZXNzb3IuICovCisgICAgaWYgKG1hcmtlcl9jb2RlID09IChpbnQpTV9BUFAwIHx8IG1hcmtlcl9jb2RlID09IChpbnQpTV9BUFAxNCkKKyAgICAgIHByb2Nlc3NvciA9IGdldF9pbnRlcmVzdGluZ19hcHBuOworICB9CisKKyAgaWYgKG1hcmtlcl9jb2RlID09IChpbnQpTV9DT00pIHsKKyAgICBtYXJrZXItPnByb2Nlc3NfQ09NID0gcHJvY2Vzc29yOworICAgIG1hcmtlci0+bGVuZ3RoX2xpbWl0X0NPTSA9IGxlbmd0aF9saW1pdDsKKyAgfSBlbHNlIGlmIChtYXJrZXJfY29kZSA+PSAoaW50KU1fQVBQMCAmJiBtYXJrZXJfY29kZSA8PSAoaW50KU1fQVBQMTUpIHsKKyAgICBtYXJrZXItPnByb2Nlc3NfQVBQblttYXJrZXJfY29kZSAtIChpbnQpTV9BUFAwXSA9IHByb2Nlc3NvcjsKKyAgICBtYXJrZXItPmxlbmd0aF9saW1pdF9BUFBuW21hcmtlcl9jb2RlIC0gKGludClNX0FQUDBdID0gbGVuZ3RoX2xpbWl0OworICB9IGVsc2UKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9VTktOT1dOX01BUktFUiwgbWFya2VyX2NvZGUpOworfQorCisjZW5kaWYgLyogU0FWRV9NQVJLRVJTX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBJbnN0YWxsIGEgc3BlY2lhbCBwcm9jZXNzaW5nIG1ldGhvZCBmb3IgQ09NIG9yIEFQUG4gbWFya2Vycy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3Ioal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHJvdXRpbmUpCit7CisgIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpY2luZm8tPm1hcmtlcjsKKworICBpZiAobWFya2VyX2NvZGUgPT0gKGludClNX0NPTSkKKyAgICBtYXJrZXItPnByb2Nlc3NfQ09NID0gcm91dGluZTsKKyAgZWxzZSBpZiAobWFya2VyX2NvZGUgPj0gKGludClNX0FQUDAgJiYgbWFya2VyX2NvZGUgPD0gKGludClNX0FQUDE1KQorICAgIG1hcmtlci0+cHJvY2Vzc19BUFBuW21hcmtlcl9jb2RlIC0gKGludClNX0FQUDBdID0gcm91dGluZTsKKyAgZWxzZQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1VOS05PV05fTUFSS0VSLCBtYXJrZXJfY29kZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1hc3Rlci5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtYXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjA5MDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtYXN0ZXIuYwpAQCAtMCwwICsxLDczNyBAQAorLyoKKyAqIGpkbWFzdGVyLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDItMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgTGluYXJvIExpbWl0ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEdvb2dsZSwgSW5jLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hc3RlciBjb250cm9sIGxvZ2ljIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggc2VsZWN0aW5nIHRoZSBtb2R1bGVzIHRvIGJlIGV4ZWN1dGVkCisgKiBhbmQgd2l0aCBkZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBhbmQgdGhlIHdvcmsgdG8gYmUgZG9uZSBpbiBlYWNoCisgKiBwYXNzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgorI2luY2x1ZGUgImpkbWFzdGVyLmgiCisjaW5jbHVkZSAianNpbWQuaCIKKworCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgbWVyZ2VkIHVwc2FtcGxlL2NvbG9yIGNvbnZlcnNpb24gc2hvdWxkIGJlIHVzZWQuCisgKiBDUlVDSUFMOiB0aGlzIG11c3QgbWF0Y2ggdGhlIGFjdHVhbCBjYXBhYmlsaXRpZXMgb2YgamRtZXJnZS5jIQorICovCisKK0xPQ0FMKGJvb2xlYW4pCit1c2VfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisjaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKKyAgLyogTWVyZ2luZyBpcyB0aGUgZXF1aXZhbGVudCBvZiBwbGFpbiBib3gtZmlsdGVyIHVwc2FtcGxpbmcgKi8KKyAgaWYgKGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nIHx8IGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nKQorICAgIHJldHVybiBGQUxTRTsKKyAgLyogamRtZXJnZS5jIG9ubHkgc3VwcG9ydHMgWUNDPT5SR0IgYW5kIFlDQz0+UkdCNTY1IGNvbG9yIGNvbnZlcnNpb24gKi8KKyAgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlICE9IEpDU19ZQ2JDciB8fCBjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMyB8fAorICAgICAgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQiAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQjU2NSAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0VYVF9SR0IgJiYKKyAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfUkdCWCAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0VYVF9CR1IgJiYKKyAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfQkdSWCAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0VYVF9YQkdSICYmCisgICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfRVhUX1hSR0IgJiYKKyAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfUkdCQSAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0VYVF9CR1JBICYmCisgICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfRVhUX0FCR1IgJiYKKyAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfQVJHQikpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQjU2NSAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyAhPSAzKSB8fAorICAgICAgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQjU2NSAmJgorICAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyAhPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIC8qIGFuZCBpdCBvbmx5IGhhbmRsZXMgMmgxdiBvciAyaDJ2IHNhbXBsaW5nIHJhdGlvcyAqLworICBpZiAoY2luZm8tPmNvbXBfaW5mb1swXS5oX3NhbXBfZmFjdG9yICE9IDIgfHwKKyAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0uaF9zYW1wX2ZhY3RvciAhPSAxIHx8CisgICAgICBjaW5mby0+Y29tcF9pbmZvWzJdLmhfc2FtcF9mYWN0b3IgIT0gMSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID4gIDIgfHwKKyAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0udl9zYW1wX2ZhY3RvciAhPSAxIHx8CisgICAgICBjaW5mby0+Y29tcF9pbmZvWzJdLnZfc2FtcF9mYWN0b3IgIT0gMSkKKyAgICByZXR1cm4gRkFMU0U7CisgIC8qIGZ1cnRoZXJtb3JlLCBpdCBkb2Vzbid0IHdvcmsgaWYgd2UndmUgc2NhbGVkIHRoZSBJRENUcyBkaWZmZXJlbnRseSAqLworICBpZiAoY2luZm8tPmNvbXBfaW5mb1swXS5fRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1sxXS5fRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5fRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSkKKyAgICByZXR1cm4gRkFMU0U7CisjaWZkZWYgV0lUSF9TSU1ECisgIC8qIElmIFlDYkNyLXRvLVJHQiBjb2xvciBjb252ZXJzaW9uIGlzIFNJTUQtYWNjZWxlcmF0ZWQgYnV0IG1lcmdlZCB1cHNhbXBsaW5nCisgICAgIGlzbid0LCB0aGVuIGRpc2FibGluZyBtZXJnZWQgdXBzYW1wbGluZyBpcyBsaWtlbHkgdG8gYmUgZmFzdGVyIHdoZW4KKyAgICAgZGVjb21wcmVzc2luZyBZQ2JDciBKUEVHIGltYWdlcy4gKi8KKyAgaWYgKCFqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUoKSAmJiAhanNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKCkgJiYKKyAgICAgIGpzaW1kX2Nhbl95Y2NfcmdiKCkgJiYgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyICYmCisgICAgICAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCIHx8CisgICAgICAgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPj0gSkNTX0VYVF9SR0IgJiYKKyAgICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA8PSBKQ1NfRVhUX0FSR0IpKSkKKyAgICByZXR1cm4gRkFMU0U7CisjZW5kaWYKKyAgLyogPz8/IGFsc28gbmVlZCB0byB0ZXN0IGZvciB1cHNhbXBsZS10aW1lIHJlc2NhbGluZywgd2hlbiAmIGlmIHN1cHBvcnRlZCAqLworICByZXR1cm4gVFJVRTsgICAgICAgICAgICAgICAgICAvKiBieSBnb2xseSwgaXQnbGwgd29yay4uLiAqLworI2Vsc2UKKyAgcmV0dXJuIEZBTFNFOworI2VuZGlmCit9CisKKworLyoKKyAqIENvbXB1dGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIHJlbGF0ZWQgdmFsdWVzLgorICogTk9URTogdGhpcyBpcyBleHBvcnRlZCBmb3IgcG9zc2libGUgdXNlIGJ5IGFwcGxpY2F0aW9uLgorICogSGVuY2UgaXQgbXVzdG4ndCBkbyBhbnl0aGluZyB0aGF0IGNhbid0IGJlIGRvbmUgdHdpY2UuCisgKi8KKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKK0dMT0JBTCh2b2lkKQorI2Vsc2UKK0xPQ0FMKHZvaWQpCisjZW5kaWYKK2pwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgbWFzdGVyIHNlbGVjdGlvbiBwaGFzZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdHJhbnNjb2RpbmcgYW5kIGZ1bGwgZGVjb21wcmVzc2lvbi4KKyAqLworeworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIENvbXB1dGUgYWN0dWFsIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLworICBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7CisgICAgLyogUHJvdmlkZSAxL2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX3dpZHRoLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2VfaGVpZ2h0LCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDE7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDIpIHsKKyAgICAvKiBQcm92aWRlIDIvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiAyTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDJMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDI7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAyOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDMpIHsKKyAgICAvKiBQcm92aWRlIDMvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiAzTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDNMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDM7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAzOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDQpIHsKKyAgICAvKiBQcm92aWRlIDQvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiA0TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDRMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDQ7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA0OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDUpIHsKKyAgICAvKiBQcm92aWRlIDUvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiA1TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDVMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDU7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA1OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDYpIHsKKyAgICAvKiBQcm92aWRlIDYvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiA2TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDZMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDY7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA2OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDcpIHsKKyAgICAvKiBQcm92aWRlIDcvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiA3TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDdMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDc7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA3OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDgpIHsKKyAgICAvKiBQcm92aWRlIDgvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiA4TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDhMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDg7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA4OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDkpIHsKKyAgICAvKiBQcm92aWRlIDkvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiA5TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDlMLCAobG9uZylEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDk7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA5OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDEwKSB7CisgICAgLyogUHJvdmlkZSAxMC9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIDEwTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDEwTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMDsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEwOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDExKSB7CisgICAgLyogUHJvdmlkZSAxMS9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIDExTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDExTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMTsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDExOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDEyKSB7CisgICAgLyogUHJvdmlkZSAxMi9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIDEyTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDEyTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMjsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEyOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDEzKSB7CisgICAgLyogUHJvdmlkZSAxMy9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIDEzTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDEzTCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMzsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEzOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDE0KSB7CisgICAgLyogUHJvdmlkZSAxNC9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIDE0TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDE0TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxNDsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDE0OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDE1KSB7CisgICAgLyogUHJvdmlkZSAxNS9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV93aWR0aCAqIDE1TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqIDE1TCwgKGxvbmcpRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxNTsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDE1OworICB9IGVsc2UgeworICAgIC8qIFByb3ZpZGUgMTYvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZyljaW5mby0+aW1hZ2Vfd2lkdGggKiAxNkwsIChsb25nKURDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKWNpbmZvLT5pbWFnZV9oZWlnaHQgKiAxNkwsIChsb25nKURDVFNJWkUpOworICAgIGNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTY7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxNjsKKyAgfQorCisgIC8qIFJlY29tcHV0ZSBkaW1lbnNpb25zIG9mIGNvbXBvbmVudHMgKi8KKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBjb21wcHRyLT5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKKyAgICBjb21wcHRyLT5fRENUX3Zfc2NhbGVkX3NpemUgPSBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKKyAgfQorCisjZWxzZSAvKiAhSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLworCisgIC8qIEhhcmR3aXJlIGl0IHRvICJubyBzY2FsaW5nIiAqLworICBjaW5mby0+b3V0cHV0X3dpZHRoID0gY2luZm8tPmltYWdlX3dpZHRoOworICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IGNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgIC8qIGpkaW5wdXQuYyBoYXMgYWxyZWFkeSBpbml0aWFsaXplZCBEQ1Rfc2NhbGVkX3NpemUsCisgICAqIGFuZCBoYXMgY29tcHV0ZWQgdW5zY2FsZWQgZG93bnNhbXBsZWRfd2lkdGggYW5kIGRvd25zYW1wbGVkX2hlaWdodC4KKyAgICovCisKKyNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCit9CisKKworLyoKKyAqIENvbXB1dGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIHJlbGF0ZWQgdmFsdWVzLgorICogTk9URTogdGhpcyBpcyBleHBvcnRlZCBmb3IgcG9zc2libGUgdXNlIGJ5IGFwcGxpY2F0aW9uLgorICogSGVuY2UgaXQgbXVzdG4ndCBkbyBhbnl0aGluZyB0aGF0IGNhbid0IGJlIGRvbmUgdHdpY2UuCisgKiBBbHNvIG5vdGUgdGhhdCBpdCBtYXkgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbWFzdGVyIG1vZHVsZSBpcyBpbml0aWFsaXplZCEKKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgbWFzdGVyIHNlbGVjdGlvbiBwaGFzZSAqLworeworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworI2VuZGlmCisKKyAgLyogUHJldmVudCBhcHBsaWNhdGlvbiBmcm9tIGNhbGxpbmcgbWUgYXQgd3JvbmcgdGltZXMgKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1JFQURZKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgLyogQ29tcHV0ZSBjb3JlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLworICBqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOworCisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorCisgIC8qIEluIHNlbGVjdGluZyB0aGUgYWN0dWFsIERDVCBzY2FsaW5nIGZvciBlYWNoIGNvbXBvbmVudCwgd2UgdHJ5IHRvCisgICAqIHNjYWxlIHVwIHRoZSBjaHJvbWEgY29tcG9uZW50cyB2aWEgSURDVCBzY2FsaW5nIHJhdGhlciB0aGFuIHVwc2FtcGxpbmcuCisgICAqIFRoaXMgc2F2ZXMgdGltZSBpZiB0aGUgdXBzYW1wbGVyIGdldHMgdG8gdXNlIDE6MSBzY2FsaW5nLgorICAgKiBOb3RlIHRoaXMgY29kZSBhZGFwdHMgc3Vic2FtcGxpbmcgcmF0aW9zIHdoaWNoIGFyZSBwb3dlcnMgb2YgMi4KKyAgICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgaW50IHNzaXplID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOworICAgIHdoaWxlIChzc2l6ZSA8IERDVFNJWkUgJiYKKyAgICAgICAgICAgKChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUpICUKKyAgICAgICAgICAgIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogc3NpemUgKiAyKSA9PSAwKSAmJgorICAgICAgICAgICAoKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSkgJQorICAgICAgICAgICAgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBzc2l6ZSAqIDIpID09IDApKSB7CisgICAgICBzc2l6ZSA9IHNzaXplICogMjsKKyAgICB9CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAgIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplID0gY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUgPSBzc2l6ZTsKKyNlbHNlCisgICAgY29tcHB0ci0+RENUX3NjYWxlZF9zaXplID0gc3NpemU7CisjZW5kaWYKKyAgfQorCisgIC8qIFJlY29tcHV0ZSBkb3duc2FtcGxlZCBkaW1lbnNpb25zIG9mIGNvbXBvbmVudHM7CisgICAqIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGtub3cgdGhlc2UgaWYgdXNpbmcgcmF3IGRvd25zYW1wbGVkIGRhdGEuCisgICAqLworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIFNpemUgaW4gc2FtcGxlcywgYWZ0ZXIgSURDVCBzY2FsaW5nICovCisgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX3dpZHRoICoKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICBjb21wcHRyLT5kb3duc2FtcGxlZF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodCAqCisgICAgICAgICAgICAgICAgICAgIChsb25nKShjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSksCisgICAgICAgICAgICAgICAgICAgIChsb25nKShjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgIH0KKworI2Vsc2UgLyogIUlEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKworICAvKiBIYXJkd2lyZSBpdCB0byAibm8gc2NhbGluZyIgKi8KKyAgY2luZm8tPm91dHB1dF93aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAvKiBqZGlucHV0LmMgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgRENUX3NjYWxlZF9zaXplIHRvIERDVFNJWkUsCisgICAqIGFuZCBoYXMgY29tcHV0ZWQgdW5zY2FsZWQgZG93bnNhbXBsZWRfd2lkdGggYW5kIGRvd25zYW1wbGVkX2hlaWdodC4KKyAgICovCisKKyNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCisKKyAgLyogUmVwb3J0IG51bWJlciBvZiBjb21wb25lbnRzIGluIHNlbGVjdGVkIGNvbG9yc3BhY2UuICovCisgIC8qIFByb2JhYmx5IHRoaXMgc2hvdWxkIGJlIGluIHRoZSBjb2xvciBjb252ZXJzaW9uIG1vZHVsZS4uLiAqLworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfR1JBWVNDQUxFOgorICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDE7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1JHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IHJnYl9waXhlbHNpemVbY2luZm8tPm91dF9jb2xvcl9zcGFjZV07CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1lDYkNyOgorICBjYXNlIEpDU19SR0I1NjU6CisgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID0gMzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgY2FzZSBKQ1NfWUNDSzoKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSA0OworICAgIGJyZWFrOworICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBlbHNlIG11c3QgYmUgc2FtZSBjb2xvcnNwYWNlIGFzIGluIGZpbGUgKi8KKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgYnJlYWs7CisgIH0KKyAgY2luZm8tPm91dHB1dF9jb21wb25lbnRzID0gKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPyAxIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyk7CisKKyAgLyogU2VlIGlmIHVwc2FtcGxlciB3aWxsIHdhbnQgdG8gZW1pdCBtb3JlIHRoYW4gb25lIHJvdyBhdCBhIHRpbWUgKi8KKyAgaWYgKHVzZV9tZXJnZWRfdXBzYW1wbGUoY2luZm8pKQorICAgIGNpbmZvLT5yZWNfb3V0YnVmX2hlaWdodCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgZWxzZQorICAgIGNpbmZvLT5yZWNfb3V0YnVmX2hlaWdodCA9IDE7Cit9CisKKworLyoKKyAqIFNldmVyYWwgZGVjb21wcmVzc2lvbiBwcm9jZXNzZXMgbmVlZCB0byByYW5nZS1saW1pdCB2YWx1ZXMgdG8gdGhlIHJhbmdlCisgKiAwLi5NQVhKU0FNUExFOyB0aGUgaW5wdXQgdmFsdWUgbWF5IGZhbGwgc29tZXdoYXQgb3V0c2lkZSB0aGlzIHJhbmdlCisgKiBkdWUgdG8gbm9pc2UgaW50cm9kdWNlZCBieSBxdWFudGl6YXRpb24sIHJvdW5kb2ZmIGVycm9yLCBldGMuICBUaGVzZQorICogcHJvY2Vzc2VzIGFyZSBpbm5lciBsb29wcyBhbmQgbmVlZCB0byBiZSBhcyBmYXN0IGFzIHBvc3NpYmxlLiAgT24gbW9zdAorICogbWFjaGluZXMsIHBhcnRpY3VsYXJseSBDUFVzIHdpdGggcGlwZWxpbmVzIG9yIGluc3RydWN0aW9uIHByZWZldGNoLAorICogYSAoc3Vic2NyaXB0LWNoZWNrLWxlc3MpIEMgdGFibGUgbG9va3VwCisgKiAgICAgICAgICAgICAgeCA9IHNhbXBsZV9yYW5nZV9saW1pdFt4XTsKKyAqIGlzIGZhc3RlciB0aGFuIGV4cGxpY2l0IHRlc3RzCisgKiAgICAgICAgICAgICAgaWYgKHggPCAwKSAgeCA9IDA7CisgKiAgICAgICAgICAgICAgZWxzZSBpZiAoeCA+IE1BWEpTQU1QTEUpICB4ID0gTUFYSlNBTVBMRTsKKyAqIFRoZXNlIHByb2Nlc3NlcyBhbGwgdXNlIGEgY29tbW9uIHRhYmxlIHByZXBhcmVkIGJ5IHRoZSByb3V0aW5lIGJlbG93LgorICoKKyAqIEZvciBtb3N0IHN0ZXBzIHdlIGNhbiBtYXRoZW1hdGljYWxseSBndWFyYW50ZWUgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZQorICogb2YgeCBpcyB3aXRoaW4gTUFYSlNBTVBMRSsxIG9mIHRoZSBsZWdhbCByYW5nZSwgc28gYSB0YWJsZSBydW5uaW5nIGZyb20KKyAqIC0oTUFYSlNBTVBMRSsxKSB0byAyKk1BWEpTQU1QTEUrMSBpcyBzdWZmaWNpZW50LiAgQnV0IGZvciB0aGUgaW5pdGlhbAorICogbGltaXRpbmcgc3RlcCAoanVzdCBhZnRlciB0aGUgSURDVCksIGEgd2lsZGx5IG91dC1vZi1yYW5nZSB2YWx1ZSBpcworICogcG9zc2libGUgaWYgdGhlIGlucHV0IGRhdGEgaXMgY29ycnVwdC4gIFRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgaW5kZXhpbmcKKyAqIG9mZiB0aGUgZW5kIG9mIG1lbW9yeSBhbmQgZ2V0dGluZyBhIGJhZC1wb2ludGVyIHRyYXAsIHdlIHBlcmZvcm0gdGhlCisgKiBwb3N0LUlEQ1QgbGltaXRpbmcgdGh1czoKKyAqICAgICAgICAgICAgICB4ID0gcmFuZ2VfbGltaXRbeCAmIE1BU0tdOworICogd2hlcmUgTUFTSyBpcyAyIGJpdHMgd2lkZXIgdGhhbiBsZWdhbCBzYW1wbGUgZGF0YSwgaWUgMTAgYml0cyBmb3IgOC1iaXQKKyAqIHNhbXBsZXMuICBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB0aGlzIGlzIG1vcmUgdGhhbiBlbm91Z2ggcmFuZ2UgYW5kCisgKiBhIGNvcnJlY3Qgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkOyB3aXRoIGJvZ3VzIGlucHV0IGRhdGEgdGhlIG1hc2sgd2lsbAorICogY2F1c2Ugd3JhcGFyb3VuZCwgYW5kIHdlIHdpbGwgc2FmZWx5IGdlbmVyYXRlIGEgYm9ndXMtYnV0LWluLXJhbmdlIG91dHB1dC4KKyAqIEZvciB0aGUgcG9zdC1JRENUIHN0ZXAsIHdlIHdhbnQgdG8gY29udmVydCB0aGUgZGF0YSBmcm9tIHNpZ25lZCB0byB1bnNpZ25lZAorICogcmVwcmVzZW50YXRpb24gYnkgYWRkaW5nIENFTlRFUkpTQU1QTEUgYXQgdGhlIHNhbWUgdGltZSB0aGF0IHdlIGxpbWl0IGl0LgorICogU28gdGhlIHBvc3QtSURDVCBsaW1pdGluZyB0YWJsZSBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGlzOgorICogICBDRU5URVJKU0FNUExFLENFTlRFUkpTQU1QTEUrMSwuLi4sTUFYSlNBTVBMRSwKKyAqICAgTUFYSlNBTVBMRSAocmVwZWF0IDIqKE1BWEpTQU1QTEUrMSktQ0VOVEVSSlNBTVBMRSB0aW1lcyksCisgKiAgIDAgICAgICAgICAgKHJlcGVhdCAyKihNQVhKU0FNUExFKzEpLUNFTlRFUkpTQU1QTEUgdGltZXMpLAorICogICAwLDEsLi4uLENFTlRFUkpTQU1QTEUtMQorICogTmVnYXRpdmUgaW5wdXRzIHNlbGVjdCB2YWx1ZXMgZnJvbSB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgdGFibGUgYWZ0ZXIKKyAqIG1hc2tpbmcuCisgKgorICogV2UgY2FuIHNhdmUgc29tZSBzcGFjZSBieSBvdmVybGFwcGluZyB0aGUgc3RhcnQgb2YgdGhlIHBvc3QtSURDVCB0YWJsZQorICogd2l0aCB0aGUgc2ltcGxlciByYW5nZSBsaW1pdGluZyB0YWJsZS4gIFRoZSBwb3N0LUlEQ1QgdGFibGUgYmVnaW5zIGF0CisgKiBzYW1wbGVfcmFuZ2VfbGltaXQgKyBDRU5URVJKU0FNUExFLgorICovCisKK0xPQ0FMKHZvaWQpCitwcmVwYXJlX3JhbmdlX2xpbWl0X3RhYmxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBBbGxvY2F0ZSBhbmQgZmlsbCBpbiB0aGUgc2FtcGxlX3JhbmdlX2xpbWl0IHRhYmxlICovCit7CisgIEpTQU1QTEUgKnRhYmxlOworICBpbnQgaTsKKworICB0YWJsZSA9IChKU0FNUExFICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICg1ICogKE1BWEpTQU1QTEUgKyAxKSArIENFTlRFUkpTQU1QTEUpICogc2l6ZW9mKEpTQU1QTEUpKTsKKyAgdGFibGUgKz0gKE1BWEpTQU1QTEUgKyAxKTsgICAgLyogYWxsb3cgbmVnYXRpdmUgc3Vic2NyaXB0cyBvZiBzaW1wbGUgdGFibGUgKi8KKyAgY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdCA9IHRhYmxlOworICAvKiBGaXJzdCBzZWdtZW50IG9mICJzaW1wbGUiIHRhYmxlOiBsaW1pdFt4XSA9IDAgZm9yIHggPCAwICovCisgIE1FTVpFUk8odGFibGUgLSAoTUFYSlNBTVBMRSArIDEpLCAoTUFYSlNBTVBMRSArIDEpICogc2l6ZW9mKEpTQU1QTEUpKTsKKyAgLyogTWFpbiBwYXJ0IG9mICJzaW1wbGUiIHRhYmxlOiBsaW1pdFt4XSA9IHggKi8KKyAgZm9yIChpID0gMDsgaSA8PSBNQVhKU0FNUExFOyBpKyspCisgICAgdGFibGVbaV0gPSAoSlNBTVBMRSlpOworICB0YWJsZSArPSBDRU5URVJKU0FNUExFOyAgICAgICAvKiBQb2ludCB0byB3aGVyZSBwb3N0LUlEQ1QgdGFibGUgc3RhcnRzICovCisgIC8qIEVuZCBvZiBzaW1wbGUgdGFibGUsIHJlc3Qgb2YgZmlyc3QgaGFsZiBvZiBwb3N0LUlEQ1QgdGFibGUgKi8KKyAgZm9yIChpID0gQ0VOVEVSSlNBTVBMRTsgaSA8IDIgKiAoTUFYSlNBTVBMRSArIDEpOyBpKyspCisgICAgdGFibGVbaV0gPSBNQVhKU0FNUExFOworICAvKiBTZWNvbmQgaGFsZiBvZiBwb3N0LUlEQ1QgdGFibGUgKi8KKyAgTUVNWkVSTyh0YWJsZSArICgyICogKE1BWEpTQU1QTEUgKyAxKSksCisgICAgICAgICAgKDIgKiAoTUFYSlNBTVBMRSArIDEpIC0gQ0VOVEVSSlNBTVBMRSkgKiBzaXplb2YoSlNBTVBMRSkpOworICBNRU1DT1BZKHRhYmxlICsgKDQgKiAoTUFYSlNBTVBMRSArIDEpIC0gQ0VOVEVSSlNBTVBMRSksCisgICAgICAgICAgY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdCwgQ0VOVEVSSlNBTVBMRSAqIHNpemVvZihKU0FNUExFKSk7Cit9CisKKworLyoKKyAqIE1hc3RlciBzZWxlY3Rpb24gb2YgZGVjb21wcmVzc2lvbiBtb2R1bGVzLgorICogVGhpcyBpcyBkb25lIG9uY2UgYXQganBlZ19zdGFydF9kZWNvbXByZXNzIHRpbWUuICBXZSBkZXRlcm1pbmUKKyAqIHdoaWNoIG1vZHVsZXMgd2lsbCBiZSB1c2VkIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUgaW5pdGlhbGl6YXRpb24gY2FsbHMuCisgKiBXZSBhbHNvIGluaXRpYWxpemUgdGhlIGRlY29tcHJlc3NvciBpbnB1dCBzaWRlIHRvIGJlZ2luIGNvbnN1bWluZyBkYXRhLgorICoKKyAqIFNpbmNlIGpwZWdfcmVhZF9oZWFkZXIgaGFzIGZpbmlzaGVkLCB3ZSBrbm93IHdoYXQgaXMgaW4gdGhlIFNPRgorICogYW5kIChmaXJzdCkgU09TIG1hcmtlcnMuICBXZSBhbHNvIGhhdmUgYWxsIHRoZSBhcHBsaWNhdGlvbiBwYXJhbWV0ZXIKKyAqIHNldHRpbmdzLgorICovCisKK0xPQ0FMKHZvaWQpCittYXN0ZXJfc2VsZWN0aW9uKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpY2luZm8tPm1hc3RlcjsKKyAgYm9vbGVhbiB1c2VfY19idWZmZXI7CisgIGxvbmcgc2FtcGxlc3BlcnJvdzsKKyAgSkRJTUVOU0lPTiBqZF9zYW1wbGVzcGVycm93OworCisgIC8qIEluaXRpYWxpemUgZGltZW5zaW9ucyBhbmQgb3RoZXIgc3R1ZmYgKi8KKyAganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKGNpbmZvKTsKKyAgcHJlcGFyZV9yYW5nZV9saW1pdF90YWJsZShjaW5mbyk7CisKKyAgLyogV2lkdGggb2YgYW4gb3V0cHV0IHNjYW5saW5lIG11c3QgYmUgcmVwcmVzZW50YWJsZSBhcyBKRElNRU5TSU9OLiAqLworICBzYW1wbGVzcGVycm93ID0gKGxvbmcpY2luZm8tPm91dHB1dF93aWR0aCAqCisgICAgICAgICAgICAgICAgICAobG9uZyljaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7CisgIGpkX3NhbXBsZXNwZXJyb3cgPSAoSkRJTUVOU0lPTilzYW1wbGVzcGVycm93OworICBpZiAoKGxvbmcpamRfc2FtcGxlc3BlcnJvdyAhPSBzYW1wbGVzcGVycm93KQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOworCisgIC8qIEluaXRpYWxpemUgbXkgcHJpdmF0ZSBzdGF0ZSAqLworICBtYXN0ZXItPnBhc3NfbnVtYmVyID0gMDsKKyAgbWFzdGVyLT51c2luZ19tZXJnZWRfdXBzYW1wbGUgPSB1c2VfbWVyZ2VkX3Vwc2FtcGxlKGNpbmZvKTsKKworICAvKiBDb2xvciBxdWFudGl6ZXIgc2VsZWN0aW9uICovCisgIG1hc3Rlci0+cXVhbnRpemVyXzFwYXNzID0gTlVMTDsKKyAgbWFzdGVyLT5xdWFudGl6ZXJfMnBhc3MgPSBOVUxMOworICAvKiBObyBtb2RlIGNoYW5nZXMgaWYgbm90IHVzaW5nIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovCisgIGlmICghY2luZm8tPnF1YW50aXplX2NvbG9ycyB8fCAhY2luZm8tPmJ1ZmZlcmVkX2ltYWdlKSB7CisgICAgY2luZm8tPmVuYWJsZV8xcGFzc19xdWFudCA9IEZBTFNFOworICAgIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgPSBGQUxTRTsKKyAgICBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID0gRkFMU0U7CisgIH0KKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpIHsKKyAgICBpZiAoY2luZm8tPnJhd19kYXRhX291dCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9USU1QTCk7CisgICAgLyogMi1wYXNzIHF1YW50aXplciBvbmx5IHdvcmtzIGluIDMtY29tcG9uZW50IGNvbG9yIHNwYWNlLiAqLworICAgIGlmIChjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgIT0gMykgeworICAgICAgY2luZm8tPmVuYWJsZV8xcGFzc19xdWFudCA9IFRSVUU7CisgICAgICBjaW5mby0+ZW5hYmxlX2V4dGVybmFsX3F1YW50ID0gRkFMU0U7CisgICAgICBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID0gRkFMU0U7CisgICAgICBjaW5mby0+Y29sb3JtYXAgPSBOVUxMOworICAgIH0gZWxzZSBpZiAoY2luZm8tPmNvbG9ybWFwICE9IE5VTEwpIHsKKyAgICAgIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgPSBUUlVFOworICAgIH0gZWxzZSBpZiAoY2luZm8tPnR3b19wYXNzX3F1YW50aXplKSB7CisgICAgICBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID0gVFJVRTsKKyAgICB9IGVsc2UgeworICAgICAgY2luZm8tPmVuYWJsZV8xcGFzc19xdWFudCA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKGNpbmZvLT5lbmFibGVfMXBhc3NfcXVhbnQpIHsKKyNpZmRlZiBRVUFOVF8xUEFTU19TVVBQT1JURUQKKyAgICAgIGppbml0XzFwYXNzX3F1YW50aXplcihjaW5mbyk7CisgICAgICBtYXN0ZXItPnF1YW50aXplcl8xcGFzcyA9IGNpbmZvLT5jcXVhbnRpemU7CisjZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgICAgfQorCisgICAgLyogV2UgdXNlIHRoZSAyLXBhc3MgY29kZSB0byBtYXAgdG8gZXh0ZXJuYWwgY29sb3JtYXBzLiAqLworICAgIGlmIChjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50IHx8IGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQpIHsKKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKyAgICAgIGppbml0XzJwYXNzX3F1YW50aXplcihjaW5mbyk7CisgICAgICBtYXN0ZXItPnF1YW50aXplcl8ycGFzcyA9IGNpbmZvLT5jcXVhbnRpemU7CisjZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgICAgfQorICAgIC8qIElmIGJvdGggcXVhbnRpemVycyBhcmUgaW5pdGlhbGl6ZWQsIHRoZSAyLXBhc3Mgb25lIGlzIGxlZnQgYWN0aXZlOworICAgICAqIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBzdGFydGluZyB3aXRoIHF1YW50aXphdGlvbiB0byBhbiBleHRlcm5hbCBtYXAuCisgICAgICovCisgIH0KKworICAvKiBQb3N0LXByb2Nlc3Npbmc6IGluIHBhcnRpY3VsYXIsIGNvbG9yIGNvbnZlcnNpb24gZmlyc3QgKi8KKyAgaWYgKCFjaW5mby0+cmF3X2RhdGFfb3V0KSB7CisgICAgaWYgKG1hc3Rlci0+dXNpbmdfbWVyZ2VkX3Vwc2FtcGxlKSB7CisjaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKKyAgICAgIGppbml0X21lcmdlZF91cHNhbXBsZXIoY2luZm8pOyAvKiBkb2VzIGNvbG9yIGNvbnZlcnNpb24gdG9vICovCisjZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgIGppbml0X2NvbG9yX2RlY29udmVydGVyKGNpbmZvKTsKKyAgICAgIGppbml0X3Vwc2FtcGxlcihjaW5mbyk7CisgICAgfQorICAgIGppbml0X2RfcG9zdF9jb250cm9sbGVyKGNpbmZvLCBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50KTsKKyAgfQorICAvKiBJbnZlcnNlIERDVCAqLworICBqaW5pdF9pbnZlcnNlX2RjdChjaW5mbyk7CisgIC8qIEVudHJvcHkgZGVjb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyNpZmRlZiBEX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgICBqaW5pdF9hcml0aF9kZWNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9BUklUSF9OT1RJTVBMKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9kZWNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZGVjb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBJbml0aWFsaXplIHByaW5jaXBhbCBidWZmZXIgY29udHJvbGxlcnMuICovCisgIHVzZV9jX2J1ZmZlciA9IGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zIHx8IGNpbmZvLT5idWZmZXJlZF9pbWFnZTsKKyAgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIoY2luZm8sIHVzZV9jX2J1ZmZlcik7CisKKyAgaWYgKCFjaW5mby0+cmF3X2RhdGFfb3V0KQorICAgIGppbml0X2RfbWFpbl9jb250cm9sbGVyKGNpbmZvLCBGQUxTRSAvKiBuZXZlciBuZWVkIGZ1bGwgYnVmZmVyIGhlcmUgKi8pOworCisgIC8qIFdlIGNhbiBub3cgdGVsbCB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWxsb2NhdGUgdmlydHVhbCBhcnJheXMuICovCisgICgqY2luZm8tPm1lbS0+cmVhbGl6ZV92aXJ0X2FycmF5cykgKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIC8qIEluaXRpYWxpemUgaW5wdXQgc2lkZSBvZiBkZWNvbXByZXNzb3IgdG8gY29uc3VtZSBmaXJzdCBzY2FuLiAqLworICAoKmNpbmZvLT5pbnB1dGN0bC0+c3RhcnRfaW5wdXRfcGFzcykgKGNpbmZvKTsKKworICAvKiBTZXQgdGhlIGZpcnN0IGFuZCBsYXN0IGlNQ1UgY29sdW1ucyB0byBkZWNvbXByZXNzIGZyb20gc2luZ2xlLXNjYW4gaW1hZ2VzLgorICAgKiBCeSBkZWZhdWx0LCBkZWNvbXByZXNzIGFsbCBvZiB0aGUgaU1DVSBjb2x1bW5zLgorICAgKi8KKyAgY2luZm8tPm1hc3Rlci0+Zmlyc3RfaU1DVV9jb2wgPSAwOworICBjaW5mby0+bWFzdGVyLT5sYXN0X2lNQ1VfY29sID0gY2luZm8tPk1DVXNfcGVyX3JvdyAtIDE7CisKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyAgLyogSWYganBlZ19zdGFydF9kZWNvbXByZXNzIHdpbGwgcmVhZCB0aGUgd2hvbGUgZmlsZSwgaW5pdGlhbGl6ZQorICAgKiBwcm9ncmVzcyBtb25pdG9yaW5nIGFwcHJvcHJpYXRlbHkuICBUaGUgaW5wdXQgc3RlcCBpcyBjb3VudGVkCisgICAqIGFzIG9uZSBwYXNzLgorICAgKi8KKyAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMICYmICFjaW5mby0+YnVmZmVyZWRfaW1hZ2UgJiYKKyAgICAgIGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zKSB7CisgICAgaW50IG5zY2FuczsKKyAgICAvKiBFc3RpbWF0ZSBudW1iZXIgb2Ygc2NhbnMgdG8gc2V0IHBhc3NfbGltaXQuICovCisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisgICAgICAvKiBBcmJpdHJhcmlseSBlc3RpbWF0ZSAyIGludGVybGVhdmVkIERDIHNjYW5zICsgMyBBQyBzY2Fucy9jb21wb25lbnQuICovCisgICAgICBuc2NhbnMgPSAyICsgMyAqIGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICB9IGVsc2UgeworICAgICAgLyogRm9yIGEgbm9ucHJvZ3Jlc3NpdmUgbXVsdGlzY2FuIGZpbGUsIGVzdGltYXRlIDEgc2NhbiBwZXIgY29tcG9uZW50LiAqLworICAgICAgbnNjYW5zID0gY2luZm8tPm51bV9jb21wb25lbnRzOworICAgIH0KKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IDBMOworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKWNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgKiBuc2NhbnM7CisgICAgY2luZm8tPnByb2dyZXNzLT5jb21wbGV0ZWRfcGFzc2VzID0gMDsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyA9IChjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID8gMyA6IDIpOworICAgIC8qIENvdW50IHRoZSBpbnB1dCBwYXNzIGFzIGRvbmUgKi8KKyAgICBtYXN0ZXItPnBhc3NfbnVtYmVyKys7CisgIH0KKyNlbmRpZiAvKiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8KK30KKworCisvKgorICogUGVyLXBhc3Mgc2V0dXAuCisgKiBUaGlzIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggb3V0cHV0IHBhc3MuICBXZSBkZXRlcm1pbmUgd2hpY2gKKyAqIG1vZHVsZXMgd2lsbCBiZSBhY3RpdmUgZHVyaW5nIHRoaXMgcGFzcyBhbmQgZ2l2ZSB0aGVtIGFwcHJvcHJpYXRlCisgKiBzdGFydF9wYXNzIGNhbGxzLiAgV2UgYWxzbyBzZXQgaXNfZHVtbXlfcGFzcyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMKKyAqIGlzIGEgInJlYWwiIG91dHB1dCBwYXNzIG9yIGEgZHVtbXkgcGFzcyBmb3IgY29sb3IgcXVhbnRpemF0aW9uLgorICogKEluIHRoZSBsYXR0ZXIgY2FzZSwgamRhcGlzdGQuYyB3aWxsIGNyYW5rIHRoZSBwYXNzIHRvIGNvbXBsZXRpb24uKQorICovCisKK01FVEhPRERFRih2b2lkKQorcHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFzdGVyX3B0ciBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0ciljaW5mby0+bWFzdGVyOworCisgIGlmIChtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzKSB7CisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECisgICAgLyogRmluYWwgcGFzcyBvZiAyLXBhc3MgcXVhbnRpemF0aW9uICovCisgICAgbWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA9IEZBTFNFOworICAgICgqY2luZm8tPmNxdWFudGl6ZS0+c3RhcnRfcGFzcykgKGNpbmZvLCBGQUxTRSk7CisgICAgKCpjaW5mby0+cG9zdC0+c3RhcnRfcGFzcykgKGNpbmZvLCBKQlVGX0NSQU5LX0RFU1QpOworICAgICgqY2luZm8tPm1haW4tPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9DUkFOS19ERVNUKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmIC8qIFFVQU5UXzJQQVNTX1NVUFBPUlRFRCAqLworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzICYmIGNpbmZvLT5jb2xvcm1hcCA9PSBOVUxMKSB7CisgICAgICAvKiBTZWxlY3QgbmV3IHF1YW50aXphdGlvbiBtZXRob2QgKi8KKyAgICAgIGlmIChjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgJiYgY2luZm8tPmVuYWJsZV8ycGFzc19xdWFudCkgeworICAgICAgICBjaW5mby0+Y3F1YW50aXplID0gbWFzdGVyLT5xdWFudGl6ZXJfMnBhc3M7CisgICAgICAgIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPSBUUlVFOworICAgICAgfSBlbHNlIGlmIChjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50KSB7CisgICAgICAgIGNpbmZvLT5jcXVhbnRpemUgPSBtYXN0ZXItPnF1YW50aXplcl8xcGFzczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTU9ERV9DSEFOR0UpOworICAgICAgfQorICAgIH0KKyAgICAoKmNpbmZvLT5pZGN0LT5zdGFydF9wYXNzKSAoY2luZm8pOworICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X291dHB1dF9wYXNzKSAoY2luZm8pOworICAgIGlmICghY2luZm8tPnJhd19kYXRhX291dCkgeworICAgICAgaWYgKCFtYXN0ZXItPnVzaW5nX21lcmdlZF91cHNhbXBsZSkKKyAgICAgICAgKCpjaW5mby0+Y2NvbnZlcnQtPnN0YXJ0X3Bhc3MpIChjaW5mbyk7CisgICAgICAoKmNpbmZvLT51cHNhbXBsZS0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKQorICAgICAgICAoKmNpbmZvLT5jcXVhbnRpemUtPnN0YXJ0X3Bhc3MpIChjaW5mbywgbWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyk7CisgICAgICAoKmNpbmZvLT5wb3N0LT5zdGFydF9wYXNzKSAoY2luZm8sCisgICAgICAgICAgICAobWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA/IEpCVUZfU0FWRV9BTkRfUEFTUyA6IEpCVUZfUEFTU19USFJVKSk7CisgICAgICAoKmNpbmZvLT5tYWluLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsKKyAgICB9CisgIH0KKworICAvKiBTZXQgdXAgcHJvZ3Jlc3MgbW9uaXRvcidzIHBhc3MgaW5mbyBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+Y29tcGxldGVkX3Bhc3NlcyA9IG1hc3Rlci0+cGFzc19udW1iZXI7CisgICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgPSBtYXN0ZXItPnBhc3NfbnVtYmVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzID8gMiA6IDEpOworICAgIC8qIEluIGJ1ZmZlcmVkLWltYWdlIG1vZGUsIHdlIGFzc3VtZSBvbmUgbW9yZSBvdXRwdXQgcGFzcyBpZiBFT0kgbm90CisgICAgICogeWV0IHJlYWNoZWQsIGJ1dCBubyBtb3JlIHBhc3NlcyBpZiBFT0kgaGFzIGJlZW4gcmVhY2hlZC4KKyAgICAgKi8KKyAgICBpZiAoY2luZm8tPmJ1ZmZlcmVkX2ltYWdlICYmICFjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7CisgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyArPSAoY2luZm8tPmVuYWJsZV8ycGFzc19xdWFudCA/IDIgOiAxKTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogRmluaXNoIHVwIGF0IGVuZCBvZiBhbiBvdXRwdXQgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9vdXRwdXRfcGFzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKWNpbmZvLT5tYXN0ZXI7CisKKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpCisgICAgKCpjaW5mby0+Y3F1YW50aXplLT5maW5pc2hfcGFzcykgKGNpbmZvKTsKKyAgbWFzdGVyLT5wYXNzX251bWJlcisrOworfQorCisKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKworLyoKKyAqIFN3aXRjaCB0byBhIG5ldyBleHRlcm5hbCBjb2xvcm1hcCBiZXR3ZWVuIG91dHB1dCBwYXNzZXMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX25ld19jb2xvcm1hcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKWNpbmZvLT5tYXN0ZXI7CisKKyAgLyogUHJldmVudCBhcHBsaWNhdGlvbiBmcm9tIGNhbGxpbmcgbWUgYXQgd3JvbmcgdGltZXMgKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX0JVRklNQUdFKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgJiYgY2luZm8tPmVuYWJsZV9leHRlcm5hbF9xdWFudCAmJgorICAgICAgY2luZm8tPmNvbG9ybWFwICE9IE5VTEwpIHsKKyAgICAvKiBTZWxlY3QgMi1wYXNzIHF1YW50aXplciBmb3IgZXh0ZXJuYWwgY29sb3JtYXAgdXNlICovCisgICAgY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzJwYXNzOworICAgIC8qIE5vdGlmeSBxdWFudGl6ZXIgb2YgY29sb3JtYXAgY2hhbmdlICovCisgICAgKCpjaW5mby0+Y3F1YW50aXplLT5uZXdfY29sb3JfbWFwKSAoY2luZm8pOworICAgIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPSBGQUxTRTsgLyoganVzdCBpbiBjYXNlICovCisgIH0gZWxzZQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTU9ERV9DSEFOR0UpOworfQorCisjZW5kaWYgLyogRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgbWFzdGVyIGRlY29tcHJlc3Npb24gY29udHJvbCBhbmQgc2VsZWN0IGFjdGl2ZSBtb2R1bGVzLgorICogVGhpcyBpcyBwZXJmb3JtZWQgYXQgdGhlIHN0YXJ0IG9mIGpwZWdfc3RhcnRfZGVjb21wcmVzcy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X21hc3Rlcl9kZWNvbXByZXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpY2luZm8tPm1hc3RlcjsKKworICBtYXN0ZXItPnB1Yi5wcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcyA9IHByZXBhcmVfZm9yX291dHB1dF9wYXNzOworICBtYXN0ZXItPnB1Yi5maW5pc2hfb3V0cHV0X3Bhc3MgPSBmaW5pc2hfb3V0cHV0X3Bhc3M7CisKKyAgbWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA9IEZBTFNFOworICBtYXN0ZXItPnB1Yi5qaW5pdF91cHNhbXBsZXJfbm9fYWxsb2MgPSBGQUxTRTsKKworICBtYXN0ZXJfc2VsZWN0aW9uKGNpbmZvKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbWFzdGVyLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1hc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODk3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1hc3Rlci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBqZG1hc3Rlci5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NSwgVGhvbWFzIEcuIExhbmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1hc3RlciBjb250cm9sIHN0cnVjdHVyZSBmb3IgdGhlIEpQRUcgZGVjb21wcmVzc29yLgorICovCisKKy8qIFByaXZhdGUgc3RhdGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19kZWNvbXBfbWFzdGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIGludCBwYXNzX251bWJlcjsgICAgICAgICAgICAgIC8qICMgb2YgcGFzc2VzIGNvbXBsZXRlZCAqLworCisgIGJvb2xlYW4gdXNpbmdfbWVyZ2VkX3Vwc2FtcGxlOyAvKiBUUlVFIGlmIHVzaW5nIG1lcmdlZCB1cHNhbXBsZS9jY29udmVydCAqLworCisgIC8qIFNhdmVkIHJlZmVyZW5jZXMgdG8gaW5pdGlhbGl6ZWQgcXVhbnRpemVyIG1vZHVsZXMsCisgICAqIGluIGNhc2Ugd2UgbmVlZCB0byBzd2l0Y2ggbW9kZXMuCisgICAqLworICBzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgKnF1YW50aXplcl8xcGFzczsKKyAgc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyICpxdWFudGl6ZXJfMnBhc3M7Cit9IG15X2RlY29tcF9tYXN0ZXI7CisKK3R5cGVkZWYgbXlfZGVjb21wX21hc3RlciAqbXlfbWFzdGVyX3B0cjsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbWVyZ2UuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjdmYWVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtZXJnZS5jCkBAIC0wLDAgKzEsNjE5IEBACisvKgorICogamRtZXJnZS5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCBMaW5hcm8gTGltaXRlZC4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBjb21iaW5lcyBmdW5jdGlvbnMgZnJvbSBqZHNhbXBsZS5jIGFuZCBqZGNvbG9yLmM7CisgKiByZWFkIHRob3NlIGZpbGVzIGZpcnN0IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLgorICoKKyAqIFdoZW4gdGhlIGNocm9tYSBjb21wb25lbnRzIGFyZSB0byBiZSB1cHNhbXBsZWQgYnkgc2ltcGxlIHJlcGxpY2F0aW9uCisgKiAoaWUsIGJveCBmaWx0ZXJpbmcpLCB3ZSBjYW4gc2F2ZSBzb21lIHdvcmsgaW4gY29sb3IgY29udmVyc2lvbiBieQorICogY2FsY3VsYXRpbmcgYWxsIHRoZSBvdXRwdXQgcGl4ZWxzIGNvcnJlc3BvbmRpbmcgdG8gYSBwYWlyIG9mIGNocm9tYQorICogc2FtcGxlcyBhdCBvbmUgdGltZS4gIEluIHRoZSBjb252ZXJzaW9uIGVxdWF0aW9ucworICogICAgICBSID0gWSAgICAgICAgICAgKyBLMSAqIENyCisgKiAgICAgIEcgPSBZICsgSzIgKiBDYiArIEszICogQ3IKKyAqICAgICAgQiA9IFkgKyBLNCAqIENiCisgKiBvbmx5IHRoZSBZIHRlcm0gdmFyaWVzIGFtb25nIHRoZSBncm91cCBvZiBwaXhlbHMgY29ycmVzcG9uZGluZyB0byBhIHBhaXIKKyAqIG9mIGNocm9tYSBzYW1wbGVzLCBzbyB0aGUgcmVzdCBvZiB0aGUgdGVybXMgY2FuIGJlIGNhbGN1bGF0ZWQganVzdCBvbmNlLgorICogQXQgdHlwaWNhbCBzYW1wbGluZyByYXRpb3MsIHRoaXMgZWxpbWluYXRlcyBoYWxmIG9yIHRocmVlLXF1YXJ0ZXJzIG9mIHRoZQorICogbXVsdGlwbGljYXRpb25zIG5lZWRlZCBmb3IgY29sb3IgY29udmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgY3VycmVudGx5IHByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAqICAgICAgWUNiQ3IgPT4gUkdCIGNvbG9yIGNvbnZlcnNpb24gb25seS4KKyAqICAgICAgU2FtcGxpbmcgcmF0aW9zIG9mIDJoMXYgb3IgMmgydi4KKyAqICAgICAgTm8gc2NhbGluZyBuZWVkZWQgYXQgdXBzYW1wbGUgdGltZS4KKyAqICAgICAgQ29ybmVyLWFsaWduZWQgKG5vbi1DQ0lSNjAxKSBzYW1wbGluZyBhbGlnbm1lbnQuCisgKiBPdGhlciBzcGVjaWFsIGNhc2VzIGNvdWxkIGJlIGFkZGVkLCBidXQgaW4gbW9zdCBhcHBsaWNhdGlvbnMgdGhlc2UgYXJlCisgKiB0aGUgb25seSBjb21tb24gY2FzZXMuICAoRm9yIHVuY29tbW9uIGNhc2VzIHdlIGZhbGwgYmFjayBvbiB0aGUgbW9yZQorICogZ2VuZXJhbCBjb2RlIGluIGpkc2FtcGxlLmMgYW5kIGpkY29sb3IuYy4pCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorCisjaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKKworCisvKiBQcml2YXRlIHN1Ym9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciBwdWI7ICAgIC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gZG8gYWN0dWFsIHVwc2FtcGxpbmcvY29udmVyc2lvbiBvZiBvbmUgcm93IGdyb3VwICovCisgIHZvaWQgKCp1cG1ldGhvZCkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CisKKyAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgWUNDLT5SR0IgY29udmVyc2lvbiAqLworICBpbnQgKkNyX3JfdGFiOyAgICAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gUiBjb252ZXJzaW9uICovCisgIGludCAqQ2JfYl90YWI7ICAgICAgICAgICAgICAgIC8qID0+IHRhYmxlIGZvciBDYiB0byBCIGNvbnZlcnNpb24gKi8KKyAgSkxPTkcgKkNyX2dfdGFiOyAgICAgICAgICAgICAgLyogPT4gdGFibGUgZm9yIENyIHRvIEcgY29udmVyc2lvbiAqLworICBKTE9ORyAqQ2JfZ190YWI7ICAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ2IgdG8gRyBjb252ZXJzaW9uICovCisKKyAgLyogRm9yIDI6MSB2ZXJ0aWNhbCBzYW1wbGluZywgd2UgcHJvZHVjZSB0d28gb3V0cHV0IHJvd3MgYXQgYSB0aW1lLgorICAgKiBXZSBuZWVkIGEgInNwYXJlIiByb3cgYnVmZmVyIHRvIGhvbGQgdGhlIHNlY29uZCBvdXRwdXQgcm93IGlmIHRoZQorICAgKiBhcHBsaWNhdGlvbiBwcm92aWRlcyBqdXN0IGEgb25lLXJvdyBidWZmZXI7IHdlIGFsc28gdXNlIHRoZSBzcGFyZQorICAgKiB0byBkaXNjYXJkIHRoZSBkdW1teSBsYXN0IHJvdyBpZiB0aGUgaW1hZ2UgaGVpZ2h0IGlzIG9kZC4KKyAgICovCisgIEpTQU1QUk9XIHNwYXJlX3JvdzsKKyAgYm9vbGVhbiBzcGFyZV9mdWxsOyAgICAgICAgICAgLyogVCBpZiBzcGFyZSBidWZmZXIgaXMgb2NjdXBpZWQgKi8KKworICBKRElNRU5TSU9OIG91dF9yb3dfd2lkdGg7ICAgICAvKiBzYW1wbGVzIHBlciBvdXRwdXQgcm93ICovCisgIEpESU1FTlNJT04gcm93c190b19nbzsgICAgICAgIC8qIGNvdW50cyByb3dzIHJlbWFpbmluZyBpbiBpbWFnZSAqLworfSBteV91cHNhbXBsZXI7CisKK3R5cGVkZWYgbXlfdXBzYW1wbGVyICpteV91cHNhbXBsZV9wdHI7CisKKyNkZWZpbmUgU0NBTEVCSVRTICAgICAgIDE2ICAgICAgLyogc3BlZWRpZXN0IHJpZ2h0LXNoaWZ0IG9uIHNvbWUgbWFjaGluZXMgKi8KKyNkZWZpbmUgT05FX0hBTEYgICAgICAgICgoSkxPTkcpMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisjZGVmaW5lIEZJWCh4KSAgICAgICAgICAoKEpMT05HKSgoeCkgKiAoMUwgPDwgU0NBTEVCSVRTKSArIDAuNSkpCisKKworLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAqLworCisjaW5jbHVkZSAiamRtcmdleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyNkZWZpbmUgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwgIGV4dHJnYl9oMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorI2RlZmluZSBoMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbCAgZXh0cmdiX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisjaW5jbHVkZSAiamRtcmdleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyN1bmRlZiBoMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCisjZGVmaW5lIFJHQl9BTFBIQSAgMworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyNkZWZpbmUgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwgIGV4dHJnYnhfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyNkZWZpbmUgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwgIGV4dHJnYnhfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyNpbmNsdWRlICJqZG1yZ2V4dC5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9BTFBIQQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBoMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorI3VuZGVmIGgydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyNkZWZpbmUgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwgIGV4dGJncl9oMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorI2RlZmluZSBoMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbCAgZXh0YmdyX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisjaW5jbHVkZSAiamRtcmdleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyN1bmRlZiBoMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JYX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JYX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSWF9CTFVFCisjZGVmaW5lIFJHQl9BTFBIQSAgMworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyNkZWZpbmUgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwgIGV4dGJncnhfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyNkZWZpbmUgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwgIGV4dGJncnhfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyNpbmNsdWRlICJqZG1yZ2V4dC5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9BTFBIQQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBoMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorI3VuZGVmIGgydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1hCR1JfUkVECisjZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hCR1JfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9YQkdSX0JMVUUKKyNkZWZpbmUgUkdCX0FMUEhBICAwCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorI2RlZmluZSBoMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbCAgZXh0eGJncl9oMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorI2RlZmluZSBoMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbCAgZXh0eGJncl9oMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorI2luY2x1ZGUgImpkbXJnZXh0LmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX0FMUEhBCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIGgydjFfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisjdW5kZWYgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKworI2RlZmluZSBSR0JfUkVEICBFWFRfWFJHQl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfWFJHQl9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX1hSR0JfQkxVRQorI2RlZmluZSBSR0JfQUxQSEEgIDAKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCisjZGVmaW5lIGgydjFfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsICBleHR4cmdiX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisjZGVmaW5lIGgydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsICBleHR4cmdiX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsCisjaW5jbHVkZSAiamRtcmdleHQuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfQUxQSEEKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwKKyN1bmRlZiBoMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbAorCisKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlcyBmb3IgWUNDLT5SR0IgY29sb3JzcGFjZSBjb252ZXJzaW9uLgorICogVGhpcyBpcyB0YWtlbiBkaXJlY3RseSBmcm9tIGpkY29sb3IuYzsgc2VlIHRoYXQgZmlsZSBmb3IgbW9yZSBpbmZvLgorICovCisKK0xPQ0FMKHZvaWQpCitidWlsZF95Y2NfcmdiX3RhYmxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICBpbnQgaTsKKyAgSkxPTkcgeDsKKyAgU0hJRlRfVEVNUFMKKworICB1cHNhbXBsZS0+Q3Jfcl90YWIgPSAoaW50ICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSArIDEpICogc2l6ZW9mKGludCkpOworICB1cHNhbXBsZS0+Q2JfYl90YWIgPSAoaW50ICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSArIDEpICogc2l6ZW9mKGludCkpOworICB1cHNhbXBsZS0+Q3JfZ190YWIgPSAoSkxPTkcgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNQVhKU0FNUExFICsgMSkgKiBzaXplb2YoSkxPTkcpKTsKKyAgdXBzYW1wbGUtPkNiX2dfdGFiID0gKEpMT05HICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSArIDEpICogc2l6ZW9mKEpMT05HKSk7CisKKyAgZm9yIChpID0gMCwgeCA9IC1DRU5URVJKU0FNUExFOyBpIDw9IE1BWEpTQU1QTEU7IGkrKywgeCsrKSB7CisgICAgLyogaSBpcyB0aGUgYWN0dWFsIGlucHV0IHBpeGVsIHZhbHVlLCBpbiB0aGUgcmFuZ2UgMC4uTUFYSlNBTVBMRSAqLworICAgIC8qIFRoZSBDYiBvciBDciB2YWx1ZSB3ZSBhcmUgdGhpbmtpbmcgb2YgaXMgeCA9IGkgLSBDRU5URVJKU0FNUExFICovCisgICAgLyogQ3I9PlIgdmFsdWUgaXMgbmVhcmVzdCBpbnQgdG8gMS40MDIwMCAqIHggKi8KKyAgICB1cHNhbXBsZS0+Q3Jfcl90YWJbaV0gPSAoaW50KQorICAgICAgICAgICAgICAgICAgICBSSUdIVF9TSElGVChGSVgoMS40MDIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CisgICAgLyogQ2I9PkIgdmFsdWUgaXMgbmVhcmVzdCBpbnQgdG8gMS43NzIwMCAqIHggKi8KKyAgICB1cHNhbXBsZS0+Q2JfYl90YWJbaV0gPSAoaW50KQorICAgICAgICAgICAgICAgICAgICBSSUdIVF9TSElGVChGSVgoMS43NzIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CisgICAgLyogQ3I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjcxNDE0ICogeCAqLworICAgIHVwc2FtcGxlLT5Dcl9nX3RhYltpXSA9ICgtRklYKDAuNzE0MTQpKSAqIHg7CisgICAgLyogQ2I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjM0NDE0ICogeCAqLworICAgIC8qIFdlIGFsc28gYWRkIGluIE9ORV9IQUxGIHNvIHRoYXQgbmVlZCBub3QgZG8gaXQgaW4gaW5uZXIgbG9vcCAqLworICAgIHVwc2FtcGxlLT5DYl9nX3RhYltpXSA9ICgtRklYKDAuMzQ0MTQpKSAqIHggKyBPTkVfSEFMRjsKKyAgfQorfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiB1cHNhbXBsaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKWNpbmZvLT51cHNhbXBsZTsKKworICAvKiBNYXJrIHRoZSBzcGFyZSBidWZmZXIgZW1wdHkgKi8KKyAgdXBzYW1wbGUtPnNwYXJlX2Z1bGwgPSBGQUxTRTsKKyAgLyogSW5pdGlhbGl6ZSB0b3RhbC1oZWlnaHQgY291bnRlciBmb3IgZGV0ZWN0aW5nIGJvdHRvbSBvZiBpbWFnZSAqLworICB1cHNhbXBsZS0+cm93c190b19nbyA9IGNpbmZvLT5vdXRwdXRfaGVpZ2h0OworfQorCisKKy8qCisgKiBDb250cm9sIHJvdXRpbmUgdG8gZG8gdXBzYW1wbGluZyAoYW5kIGNvbG9yIGNvbnZlcnNpb24pLgorICoKKyAqIFRoZSBjb250cm9sIHJvdXRpbmUganVzdCBoYW5kbGVzIHRoZSByb3cgYnVmZmVyaW5nIGNvbnNpZGVyYXRpb25zLgorICovCisKK01FVEhPRERFRih2b2lkKQorbWVyZ2VkXzJ2X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCisvKiAyOjEgdmVydGljYWwgc2FtcGxpbmcgY2FzZTogbWF5IG5lZWQgYSBzcGFyZSByb3cuICovCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICBKU0FNUFJPVyB3b3JrX3B0cnNbMl07CisgIEpESU1FTlNJT04gbnVtX3Jvd3M7ICAgICAgICAgIC8qIG51bWJlciBvZiByb3dzIHJldHVybmVkIHRvIGNhbGxlciAqLworCisgIGlmICh1cHNhbXBsZS0+c3BhcmVfZnVsbCkgeworICAgIC8qIElmIHdlIGhhdmUgYSBzcGFyZSByb3cgc2F2ZWQgZnJvbSBhIHByZXZpb3VzIGN5Y2xlLCBqdXN0IHJldHVybiBpdC4gKi8KKyAgICBKRElNRU5TSU9OIHNpemUgPSB1cHNhbXBsZS0+b3V0X3Jvd193aWR0aDsKKyAgICBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCNTY1KQorICAgICAgc2l6ZSA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiAyOworICAgIGpjb3B5X3NhbXBsZV9yb3dzKCZ1cHNhbXBsZS0+c3BhcmVfcm93LCAwLCBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyLCAwLCAxLAorICAgICAgICAgICAgICAgICAgICAgIHNpemUpOworICAgIG51bV9yb3dzID0gMTsKKyAgICB1cHNhbXBsZS0+c3BhcmVfZnVsbCA9IEZBTFNFOworICB9IGVsc2UgeworICAgIC8qIEZpZ3VyZSBudW1iZXIgb2Ygcm93cyB0byByZXR1cm4gdG8gY2FsbGVyLiAqLworICAgIG51bV9yb3dzID0gMjsKKyAgICAvKiBOb3QgbW9yZSB0aGFuIHRoZSBkaXN0YW5jZSB0byB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gKi8KKyAgICBpZiAobnVtX3Jvd3MgPiB1cHNhbXBsZS0+cm93c190b19nbykKKyAgICAgIG51bV9yb3dzID0gdXBzYW1wbGUtPnJvd3NfdG9fZ287CisgICAgLyogQW5kIG5vdCBtb3JlIHRoYW4gd2hhdCB0aGUgY2xpZW50IGNhbiBhY2NlcHQ6ICovCisgICAgb3V0X3Jvd3NfYXZhaWwgLT0gKm91dF9yb3dfY3RyOworICAgIGlmIChudW1fcm93cyA+IG91dF9yb3dzX2F2YWlsKQorICAgICAgbnVtX3Jvd3MgPSBvdXRfcm93c19hdmFpbDsKKyAgICAvKiBDcmVhdGUgb3V0cHV0IHBvaW50ZXIgYXJyYXkgZm9yIHVwc2FtcGxlci4gKi8KKyAgICB3b3JrX3B0cnNbMF0gPSBvdXRwdXRfYnVmWypvdXRfcm93X2N0cl07CisgICAgaWYgKG51bV9yb3dzID4gMSkgeworICAgICAgd29ya19wdHJzWzFdID0gb3V0cHV0X2J1Zlsqb3V0X3Jvd19jdHIgKyAxXTsKKyAgICB9IGVsc2UgeworICAgICAgd29ya19wdHJzWzFdID0gdXBzYW1wbGUtPnNwYXJlX3JvdzsKKyAgICAgIHVwc2FtcGxlLT5zcGFyZV9mdWxsID0gVFJVRTsKKyAgICB9CisgICAgLyogTm93IGRvIHRoZSB1cHNhbXBsaW5nLiAqLworICAgICgqdXBzYW1wbGUtPnVwbWV0aG9kKSAoY2luZm8sIGlucHV0X2J1ZiwgKmluX3Jvd19ncm91cF9jdHIsIHdvcmtfcHRycyk7CisgIH0KKworICAvKiBBZGp1c3QgY291bnRzICovCisgICpvdXRfcm93X2N0ciArPSBudW1fcm93czsKKyAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gLT0gbnVtX3Jvd3M7CisgIC8qIFdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0aWVkLCBkZWNsYXJlIHRoaXMgaW5wdXQgcm93IGdyb3VwIGNvbnN1bWVkICovCisgIGlmICghdXBzYW1wbGUtPnNwYXJlX2Z1bGwpCisgICAgKCppbl9yb3dfZ3JvdXBfY3RyKSsrOworfQorCisKK01FVEhPRERFRih2b2lkKQorbWVyZ2VkXzF2X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCisvKiAxOjEgdmVydGljYWwgc2FtcGxpbmcgY2FzZTogbXVjaCBlYXNpZXIsIG5ldmVyIG5lZWQgYSBzcGFyZSByb3cuICovCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworCisgIC8qIEp1c3QgZG8gdGhlIHVwc2FtcGxpbmcuICovCisgICgqdXBzYW1wbGUtPnVwbWV0aG9kKSAoY2luZm8sIGlucHV0X2J1ZiwgKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0cik7CisgIC8qIEFkanVzdCBjb3VudHMgKi8KKyAgKCpvdXRfcm93X2N0cikrKzsKKyAgKCppbl9yb3dfZ3JvdXBfY3RyKSsrOworfQorCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHJvdXRpbmVzIGludm9rZWQgYnkgdGhlIGNvbnRyb2wgcm91dGluZXMgdG8gZG8KKyAqIHRoZSBhY3R1YWwgdXBzYW1wbGluZy9jb252ZXJzaW9uLiAgT25lIHJvdyBncm91cCBpcyBwcm9jZXNzZWQgcGVyIGNhbGwuCisgKgorICogTm90ZTogc2luY2Ugd2UgbWF5IGJlIHdyaXRpbmcgZGlyZWN0bHkgaW50byBhcHBsaWNhdGlvbi1zdXBwbGllZCBidWZmZXJzLAorICogd2UgaGF2ZSB0byBiZSBob25lc3QgYWJvdXQgdGhlIG91dHB1dCB3aWR0aDsgd2UgY2FuJ3QgYXNzdW1lIHRoZSBidWZmZXIKKyAqIGhhcyBiZWVuIHJvdW5kZWQgdXAgdG8gYW4gZXZlbiB3aWR0aC4KKyAqLworCisKKy8qCisgKiBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjFfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGV4dHJnYl9oMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGV4dHJnYnhfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGV4dGJncl9oMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGV4dGJncnhfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgZXh0eGJncl9oMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBleHR4cmdiX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBoMnYxX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoKKyAqIFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorICovCisKK01FVEhPRERFRih2b2lkKQoraDJ2Ml9tZXJnZWRfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgZXh0cmdiX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgZXh0cmdieF9oMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgZXh0YmdyX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgZXh0YmdyeF9oMnYyX21lcmdlZF91cHNhbXBsZV9pbnRlcm5hbChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBleHR4YmdyX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGV4dHhyZ2JfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwoY2luZm8sIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGgydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogUkdCNTY1IGNvbnZlcnNpb24KKyAqLworCisjZGVmaW5lIFBBQ0tfU0hPUlRfNTY1X0xFKHIsIGcsIGIpICAoKCgocikgPDwgOCkgJiAweEY4MDApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGcpIDw8IDMpICYgMHg3RTApIHwgKChiKSA+PiAzKSkKKyNkZWZpbmUgUEFDS19TSE9SVF81NjVfQkUociwgZywgYikgICgoKHIpICYgMHhGOCkgfCAoKGcpID4+IDUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGcpIDw8IDExKSAmIDB4RTAwMCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoYikgPDwgNSkgJiAweDFGMDApKQorCisjZGVmaW5lIFBBQ0tfVFdPX1BJWEVMU19MRShsLCByKSAgICAoKHIgPDwgMTYpIHwgbCkKKyNkZWZpbmUgUEFDS19UV09fUElYRUxTX0JFKGwsIHIpICAgICgobCA8PCAxNikgfCByKQorCisjZGVmaW5lIFBBQ0tfTkVFRF9BTElHTk1FTlQocHRyKSAgICAoKChzaXplX3QpKHB0cikpICYgMykKKworI2RlZmluZSBXUklURV9UV09fUElYRUxTX0xFKGFkZHIsIHBpeGVscykgeyBcCisgICgoSU5UMTYgKikoYWRkcikpWzBdID0gKElOVDE2KShwaXhlbHMpOyBcCisgICgoSU5UMTYgKikoYWRkcikpWzFdID0gKElOVDE2KSgocGl4ZWxzKSA+PiAxNik7IFwKK30KKyNkZWZpbmUgV1JJVEVfVFdPX1BJWEVMU19CRShhZGRyLCBwaXhlbHMpIHsgXAorICAoKElOVDE2ICopKGFkZHIpKVsxXSA9IChJTlQxNikocGl4ZWxzKTsgXAorICAoKElOVDE2ICopKGFkZHIpKVswXSA9IChJTlQxNikoKHBpeGVscykgPj4gMTYpOyBcCit9CisKKyNkZWZpbmUgRElUSEVSXzU2NV9SKHIsIGRpdGhlcikgICgocikgKyAoKGRpdGhlcikgJiAweEZGKSkKKyNkZWZpbmUgRElUSEVSXzU2NV9HKGcsIGRpdGhlcikgICgoZykgKyAoKChkaXRoZXIpICYgMHhGRikgPj4gMSkpCisjZGVmaW5lIERJVEhFUl81NjVfQihiLCBkaXRoZXIpICAoKGIpICsgKChkaXRoZXIpICYgMHhGRikpCisKKworLyogRGVjbGFyYXRpb25zIGZvciBvcmRlcmVkIGRpdGhlcmluZworICoKKyAqIFdlIHVzZSBhIDR4NCBvcmRlcmVkIGRpdGhlciBhcnJheSBwYWNrZWQgaW50byAzMiBiaXRzLiAgVGhpcyBhcnJheSBpcworICogc3VmZmljZW50IGZvciBkaXRoZXJpbmcgUkdCODg4IHRvIFJHQjU2NS4KKyAqLworCisjZGVmaW5lIERJVEhFUl9NQVNLICAgICAgIDB4MworI2RlZmluZSBESVRIRVJfUk9UQVRFKHgpICAoKCgoeCkgJiAweEZGKSA8PCAyNCkgfCAoKCh4KSA+PiA4KSAmIDB4MDBGRkZGRkYpKQorc3RhdGljIGNvbnN0IEpMT05HIGRpdGhlcl9tYXRyaXhbNF0gPSB7CisgIDB4MDAwODAyMEEsCisgIDB4MEMwNDBFMDYsCisgIDB4MDMwQjAxMDksCisgIDB4MEYwNzBEMDUKK307CisKKworLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIFJHQjU2NSBjb252ZXJzaW9uICovCisKKyNkZWZpbmUgUEFDS19TSE9SVF81NjUgIFBBQ0tfU0hPUlRfNTY1X0xFCisjZGVmaW5lIFBBQ0tfVFdPX1BJWEVMUyAgUEFDS19UV09fUElYRUxTX0xFCisjZGVmaW5lIFdSSVRFX1RXT19QSVhFTFMgIFdSSVRFX1RXT19QSVhFTFNfTEUKKyNkZWZpbmUgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1X2ludGVybmFsICBoMnYxX21lcmdlZF91cHNhbXBsZV81NjVfbGUKKyNkZWZpbmUgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1RF9pbnRlcm5hbCAgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1RF9sZQorI2RlZmluZSBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVfaW50ZXJuYWwgIGgydjJfbWVyZ2VkX3Vwc2FtcGxlXzU2NV9sZQorI2RlZmluZSBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVEX2ludGVybmFsICBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVEX2xlCisjaW5jbHVkZSAiamRtcmc1NjUuYyIKKyN1bmRlZiBQQUNLX1NIT1JUXzU2NQorI3VuZGVmIFBBQ0tfVFdPX1BJWEVMUworI3VuZGVmIFdSSVRFX1RXT19QSVhFTFMKKyN1bmRlZiBoMnYxX21lcmdlZF91cHNhbXBsZV81NjVfaW50ZXJuYWwKKyN1bmRlZiBoMnYxX21lcmdlZF91cHNhbXBsZV81NjVEX2ludGVybmFsCisjdW5kZWYgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1X2ludGVybmFsCisjdW5kZWYgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1RF9pbnRlcm5hbAorCisjZGVmaW5lIFBBQ0tfU0hPUlRfNTY1ICBQQUNLX1NIT1JUXzU2NV9CRQorI2RlZmluZSBQQUNLX1RXT19QSVhFTFMgIFBBQ0tfVFdPX1BJWEVMU19CRQorI2RlZmluZSBXUklURV9UV09fUElYRUxTICBXUklURV9UV09fUElYRUxTX0JFCisjZGVmaW5lIGgydjFfbWVyZ2VkX3Vwc2FtcGxlXzU2NV9pbnRlcm5hbCAgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1X2JlCisjZGVmaW5lIGgydjFfbWVyZ2VkX3Vwc2FtcGxlXzU2NURfaW50ZXJuYWwgIGgydjFfbWVyZ2VkX3Vwc2FtcGxlXzU2NURfYmUKKyNkZWZpbmUgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1X2ludGVybmFsICBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVfYmUKKyNkZWZpbmUgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1RF9pbnRlcm5hbCAgaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1RF9iZQorI2luY2x1ZGUgImpkbXJnNTY1LmMiCisjdW5kZWYgUEFDS19TSE9SVF81NjUKKyN1bmRlZiBQQUNLX1RXT19QSVhFTFMKKyN1bmRlZiBXUklURV9UV09fUElYRUxTCisjdW5kZWYgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1X2ludGVybmFsCisjdW5kZWYgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1RF9pbnRlcm5hbAorI3VuZGVmIGgydjJfbWVyZ2VkX3Vwc2FtcGxlXzU2NV9pbnRlcm5hbAorI3VuZGVmIGgydjJfbWVyZ2VkX3Vwc2FtcGxlXzU2NURfaW50ZXJuYWwKKworCitzdGF0aWMgSU5MSU5FIGJvb2xlYW4gaXNfYmlnX2VuZGlhbih2b2lkKQoreworICBpbnQgdGVzdF92YWx1ZSA9IDE7CisgIGlmICgqKGNoYXIgKikmdGVzdF92YWx1ZSAhPSAxKQorICAgIHJldHVybiBUUlVFOworICByZXR1cm4gRkFMU0U7Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitoMnYxX21lcmdlZF91cHNhbXBsZV81NjUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIGlmIChpc19iaWdfZW5kaWFuKCkpCisgICAgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1X2JlKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworICBlbHNlCisgICAgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1X2xlKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworfQorCisKK01FVEhPRERFRih2b2lkKQoraDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1RChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIGlmIChpc19iaWdfZW5kaWFuKCkpCisgICAgaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1RF9iZShjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7CisgIGVsc2UKKyAgICBoMnYxX21lcmdlZF91cHNhbXBsZV81NjVEX2xlKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKK30KKworCitNRVRIT0RERUYodm9pZCkKK2gydjJfbWVyZ2VkX3Vwc2FtcGxlXzU2NShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgaWYgKGlzX2JpZ19lbmRpYW4oKSkKKyAgICBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVfYmUoY2luZm8sIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7CisgIGVsc2UKKyAgICBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVfbGUoY2luZm8sIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Zik7Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitoMnYyX21lcmdlZF91cHNhbXBsZV81NjVEKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgaWYgKGlzX2JpZ19lbmRpYW4oKSkKKyAgICBoMnYyX21lcmdlZF91cHNhbXBsZV81NjVEX2JlKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKKyAgZWxzZQorICAgIGgydjJfbWVyZ2VkX3Vwc2FtcGxlXzU2NURfbGUoY2luZm8sIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbi4KKyAqCisgKiBOQjogdGhpcyBpcyBjYWxsZWQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZGV0ZXJtaW5lZCBieSB1c2VfbWVyZ2VkX3Vwc2FtcGxlKCkKKyAqIGluIGpkbWFzdGVyLmMuICBUaGF0IHJvdXRpbmUgTVVTVCBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgY2FwYWJpbGl0aWVzCisgKiBvZiB0aGlzIG1vZHVsZTsgbm8gc2FmZXR5IGNoZWNrcyBhcmUgbWFkZSBoZXJlLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfbWVyZ2VkX3Vwc2FtcGxlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGU7CisKKyAgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG15X3Vwc2FtcGxlcikpOworICBjaW5mby0+dXBzYW1wbGUgPSAoc3RydWN0IGpwZWdfdXBzYW1wbGVyICopdXBzYW1wbGU7CisgIHVwc2FtcGxlLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfbWVyZ2VkX3Vwc2FtcGxlOworICB1cHNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gRkFMU0U7CisKKyAgdXBzYW1wbGUtPm91dF9yb3dfd2lkdGggPSBjaW5mby0+b3V0cHV0X3dpZHRoICogY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOworCisgIGlmIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgPT0gMikgeworICAgIHVwc2FtcGxlLT5wdWIudXBzYW1wbGUgPSBtZXJnZWRfMnZfdXBzYW1wbGU7CisgICAgaWYgKGpzaW1kX2Nhbl9oMnYyX21lcmdlZF91cHNhbXBsZSgpKQorICAgICAgdXBzYW1wbGUtPnVwbWV0aG9kID0ganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGU7CisgICAgZWxzZQorICAgICAgdXBzYW1wbGUtPnVwbWV0aG9kID0gaDJ2Ml9tZXJnZWRfdXBzYW1wbGU7CisgICAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQjU2NSkgeworICAgICAgaWYgKGNpbmZvLT5kaXRoZXJfbW9kZSAhPSBKRElUSEVSX05PTkUpIHsKKyAgICAgICAgdXBzYW1wbGUtPnVwbWV0aG9kID0gaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1RDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGgydjJfbWVyZ2VkX3Vwc2FtcGxlXzU2NTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQWxsb2NhdGUgYSBzcGFyZSByb3cgYnVmZmVyICovCisgICAgdXBzYW1wbGUtPnNwYXJlX3JvdyA9IChKU0FNUFJPVykKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAoc2l6ZV90KSh1cHNhbXBsZS0+b3V0X3Jvd193aWR0aCAqIHNpemVvZihKU0FNUExFKSkpOworICB9IGVsc2UgeworICAgIHVwc2FtcGxlLT5wdWIudXBzYW1wbGUgPSBtZXJnZWRfMXZfdXBzYW1wbGU7CisgICAgaWYgKGpzaW1kX2Nhbl9oMnYxX21lcmdlZF91cHNhbXBsZSgpKQorICAgICAgdXBzYW1wbGUtPnVwbWV0aG9kID0ganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGU7CisgICAgZWxzZQorICAgICAgdXBzYW1wbGUtPnVwbWV0aG9kID0gaDJ2MV9tZXJnZWRfdXBzYW1wbGU7CisgICAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQjU2NSkgeworICAgICAgaWYgKGNpbmZvLT5kaXRoZXJfbW9kZSAhPSBKRElUSEVSX05PTkUpIHsKKyAgICAgICAgdXBzYW1wbGUtPnVwbWV0aG9kID0gaDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1RDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGgydjFfbWVyZ2VkX3Vwc2FtcGxlXzU2NTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogTm8gc3BhcmUgcm93IG5lZWRlZCAqLworICAgIHVwc2FtcGxlLT5zcGFyZV9yb3cgPSBOVUxMOworICB9CisKKyAgYnVpbGRfeWNjX3JnYl90YWJsZShjaW5mbyk7Cit9CisKKyNlbmRpZiAvKiBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRtcmc1NjUuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbXJnNTY1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4N2UzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbXJnNTY1LmMKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBqZG1yZzU2NS5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIExpbmFybyBMaW1pdGVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uLgorICovCisKKworSU5MSU5FCitMT0NBTCh2b2lkKQoraDJ2MV9tZXJnZWRfdXBzYW1wbGVfNTY1X2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICByZWdpc3RlciBpbnQgeSwgY3JlZCwgY2dyZWVuLCBjYmx1ZTsKKyAgaW50IGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICBKRElNRU5TSU9OIGNvbDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIGludCAqQ3JydGFiID0gdXBzYW1wbGUtPkNyX3JfdGFiOworICBpbnQgKkNiYnRhYiA9IHVwc2FtcGxlLT5DYl9iX3RhYjsKKyAgSkxPTkcgKkNyZ3RhYiA9IHVwc2FtcGxlLT5Dcl9nX3RhYjsKKyAgSkxPTkcgKkNiZ3RhYiA9IHVwc2FtcGxlLT5DYl9nX3RhYjsKKyAgdW5zaWduZWQgaW50IHIsIGcsIGI7CisgIEpMT05HIHJnYjsKKyAgU0hJRlRfVEVNUFMKKworICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cl07CisgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOworICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdOworCisgIC8qIExvb3AgZm9yIGVhY2ggcGFpciBvZiBvdXRwdXQgcGl4ZWxzICovCisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aCA+PiAxOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIC8qIERvIHRoZSBjaHJvbWEgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gKi8KKyAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOworICAgIGNibHVlID0gQ2JidGFiW2NiXTsKKworICAgIC8qIEZldGNoIDIgWSB2YWx1ZXMgYW5kIGVtaXQgMiBwaXhlbHMgKi8KKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKTsKKyAgICByID0gcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIGcgPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBiID0gcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgIHIgPSByYW5nZV9saW1pdFt5ICsgY3JlZF07CisgICAgZyA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIGIgPSByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIHJnYiA9IFBBQ0tfVFdPX1BJWEVMUyhyZ2IsIFBBQ0tfU0hPUlRfNTY1KHIsIGcsIGIpKTsKKworICAgIFdSSVRFX1RXT19QSVhFTFMob3V0cHRyLCByZ2IpOworICAgIG91dHB0ciArPSA0OworICB9CisKKyAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8KKyAgaWYgKGNpbmZvLT5vdXRwdXRfd2lkdGggJiAxKSB7CisgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjEpOworICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOworICAgIGNibHVlID0gQ2JidGFiW2NiXTsKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMCk7CisgICAgciA9IHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgYiA9IHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisgICAgKihJTlQxNiAqKW91dHB0ciA9IChJTlQxNilyZ2I7CisgIH0KK30KKworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCitoMnYxX21lcmdlZF91cHNhbXBsZV81NjVEX2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0ciljaW5mby0+dXBzYW1wbGU7CisgIHJlZ2lzdGVyIGludCB5LCBjcmVkLCBjZ3JlZW4sIGNibHVlOworICBpbnQgY2IsIGNyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIEpESU1FTlNJT04gY29sOworICAvKiBjb3B5IHRoZXNlIHBvaW50ZXJzIGludG8gcmVnaXN0ZXJzIGlmIHBvc3NpYmxlICovCisgIHJlZ2lzdGVyIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsKKyAgaW50ICpDcnJ0YWIgPSB1cHNhbXBsZS0+Q3Jfcl90YWI7CisgIGludCAqQ2JidGFiID0gdXBzYW1wbGUtPkNiX2JfdGFiOworICBKTE9ORyAqQ3JndGFiID0gdXBzYW1wbGUtPkNyX2dfdGFiOworICBKTE9ORyAqQ2JndGFiID0gdXBzYW1wbGUtPkNiX2dfdGFiOworICBKTE9ORyBkMCA9IGRpdGhlcl9tYXRyaXhbY2luZm8tPm91dHB1dF9zY2FubGluZSAmIERJVEhFUl9NQVNLXTsKKyAgdW5zaWduZWQgaW50IHIsIGcsIGI7CisgIEpMT05HIHJnYjsKKyAgU0hJRlRfVEVNUFMKKworICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cl07CisgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOworICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdOworCisgIC8qIExvb3AgZm9yIGVhY2ggcGFpciBvZiBvdXRwdXQgcGl4ZWxzICovCisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aCA+PiAxOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIC8qIERvIHRoZSBjaHJvbWEgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gKi8KKyAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOworICAgIGNibHVlID0gQ2JidGFiW2NiXTsKKworICAgIC8qIEZldGNoIDIgWSB2YWx1ZXMgYW5kIGVtaXQgMiBwaXhlbHMgKi8KKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKTsKKyAgICByID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9SKHkgKyBjcmVkLCBkMCldOworICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0coeSArIGNncmVlbiwgZDApXTsKKyAgICBiID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9CKHkgKyBjYmx1ZSwgZDApXTsKKyAgICBkMCA9IERJVEhFUl9ST1RBVEUoZDApOworICAgIHJnYiA9IFBBQ0tfU0hPUlRfNTY1KHIsIGcsIGIpOworCisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjArKyk7CisgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUih5ICsgY3JlZCwgZDApXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKHkgKyBjZ3JlZW4sIGQwKV07CisgICAgYiA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfQih5ICsgY2JsdWUsIGQwKV07CisgICAgZDAgPSBESVRIRVJfUk9UQVRFKGQwKTsKKyAgICByZ2IgPSBQQUNLX1RXT19QSVhFTFMocmdiLCBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKSk7CisKKyAgICBXUklURV9UV09fUElYRUxTKG91dHB0ciwgcmdiKTsKKyAgICBvdXRwdHIgKz0gNDsKKyAgfQorCisgIC8qIElmIGltYWdlIHdpZHRoIGlzIG9kZCwgZG8gdGhlIGxhc3Qgb3V0cHV0IGNvbHVtbiBzZXBhcmF0ZWx5ICovCisgIGlmIChjaW5mby0+b3V0cHV0X3dpZHRoICYgMSkgeworICAgIGNiID0gR0VUSlNBTVBMRSgqaW5wdHIxKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMik7CisgICAgY3JlZCA9IENycnRhYltjcl07CisgICAgY2dyZWVuID0gKGludClSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjApOworICAgIHIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoeSArIGNyZWQsIGQwKV07CisgICAgZyA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfRyh5ICsgY2dyZWVuLCBkMCldOworICAgIGIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0IoeSArIGNibHVlLCBkMCldOworICAgIHJnYiA9IFBBQ0tfU0hPUlRfNTY1KHIsIGcsIGIpOworICAgICooSU5UMTYgKilvdXRwdHIgPSAoSU5UMTYpcmdiOworICB9Cit9CisKKworSU5MSU5FCitMT0NBTCh2b2lkKQoraDJ2Ml9tZXJnZWRfdXBzYW1wbGVfNTY1X2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICByZWdpc3RlciBpbnQgeSwgY3JlZCwgY2dyZWVuLCBjYmx1ZTsKKyAgaW50IGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyMCwgb3V0cHRyMTsKKyAgSlNBTVBST1cgaW5wdHIwMCwgaW5wdHIwMSwgaW5wdHIxLCBpbnB0cjI7CisgIEpESU1FTlNJT04gY29sOworICAvKiBjb3B5IHRoZXNlIHBvaW50ZXJzIGludG8gcmVnaXN0ZXJzIGlmIHBvc3NpYmxlICovCisgIHJlZ2lzdGVyIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsKKyAgaW50ICpDcnJ0YWIgPSB1cHNhbXBsZS0+Q3Jfcl90YWI7CisgIGludCAqQ2JidGFiID0gdXBzYW1wbGUtPkNiX2JfdGFiOworICBKTE9ORyAqQ3JndGFiID0gdXBzYW1wbGUtPkNyX2dfdGFiOworICBKTE9ORyAqQ2JndGFiID0gdXBzYW1wbGUtPkNiX2dfdGFiOworICB1bnNpZ25lZCBpbnQgciwgZywgYjsKKyAgSkxPTkcgcmdiOworICBTSElGVF9URU1QUworCisgIGlucHRyMDAgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0ciAqIDJdOworICBpbnB0cjAxID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHIgKiAyICsgMV07CisgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOworICBvdXRwdHIwID0gb3V0cHV0X2J1ZlswXTsKKyAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV07CisKKyAgLyogTG9vcCBmb3IgZWFjaCBncm91cCBvZiBvdXRwdXQgcGl4ZWxzICovCisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aCA+PiAxOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIC8qIERvIHRoZSBjaHJvbWEgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gKi8KKyAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOworICAgIGNibHVlID0gQ2JidGFiW2NiXTsKKworICAgIC8qIEZldGNoIDQgWSB2YWx1ZXMgYW5kIGVtaXQgNCBwaXhlbHMgKi8KKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7CisgICAgciA9IHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgYiA9IHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7CisgICAgciA9IHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgYiA9IHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisgICAgcmdiID0gUEFDS19UV09fUElYRUxTKHJnYiwgUEFDS19TSE9SVF81NjUociwgZywgYikpOworCisgICAgV1JJVEVfVFdPX1BJWEVMUyhvdXRwdHIwLCByZ2IpOworICAgIG91dHB0cjAgKz0gNDsKKworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSsrKTsKKyAgICByID0gcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIGcgPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBiID0gcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSsrKTsKKyAgICByID0gcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIGcgPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBiID0gcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICByZ2IgPSBQQUNLX1RXT19QSVhFTFMocmdiLCBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKSk7CisKKyAgICBXUklURV9UV09fUElYRUxTKG91dHB0cjEsIHJnYik7CisgICAgb3V0cHRyMSArPSA0OworICB9CisKKyAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8KKyAgaWYgKGNpbmZvLT5vdXRwdXRfd2lkdGggJiAxKSB7CisgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjEpOworICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOworICAgIGNibHVlID0gQ2JidGFiW2NiXTsKKworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMCk7CisgICAgciA9IHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgYiA9IHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisgICAgKihJTlQxNiAqKW91dHB0cjAgPSAoSU5UMTYpcmdiOworCisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAxKTsKKyAgICByID0gcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIGcgPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBiID0gcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAqKElOVDE2ICopb3V0cHRyMSA9IChJTlQxNilyZ2I7CisgIH0KK30KKworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCitoMnYyX21lcmdlZF91cHNhbXBsZV81NjVEX2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0ciljaW5mby0+dXBzYW1wbGU7CisgIHJlZ2lzdGVyIGludCB5LCBjcmVkLCBjZ3JlZW4sIGNibHVlOworICBpbnQgY2IsIGNyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHIwLCBvdXRwdHIxOworICBKU0FNUFJPVyBpbnB0cjAwLCBpbnB0cjAxLCBpbnB0cjEsIGlucHRyMjsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIC8qIGNvcHkgdGhlc2UgcG9pbnRlcnMgaW50byByZWdpc3RlcnMgaWYgcG9zc2libGUgKi8KKyAgcmVnaXN0ZXIgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICBpbnQgKkNycnRhYiA9IHVwc2FtcGxlLT5Dcl9yX3RhYjsKKyAgaW50ICpDYmJ0YWIgPSB1cHNhbXBsZS0+Q2JfYl90YWI7CisgIEpMT05HICpDcmd0YWIgPSB1cHNhbXBsZS0+Q3JfZ190YWI7CisgIEpMT05HICpDYmd0YWIgPSB1cHNhbXBsZS0+Q2JfZ190YWI7CisgIEpMT05HIGQwID0gZGl0aGVyX21hdHJpeFtjaW5mby0+b3V0cHV0X3NjYW5saW5lICYgRElUSEVSX01BU0tdOworICBKTE9ORyBkMSA9IGRpdGhlcl9tYXRyaXhbKGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKyAxKSAmIERJVEhFUl9NQVNLXTsKKyAgdW5zaWduZWQgaW50IHIsIGcsIGI7CisgIEpMT05HIHJnYjsKKyAgU0hJRlRfVEVNUFMKKworICBpbnB0cjAwID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHIgKiAyXTsKKyAgaW5wdHIwMSA9IGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyICogMiArIDFdOworICBpbnB0cjEgPSBpbnB1dF9idWZbMV1baW5fcm93X2dyb3VwX2N0cl07CisgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF07CisgIG91dHB0cjEgPSBvdXRwdXRfYnVmWzFdOworCisgIC8qIExvb3AgZm9yIGVhY2ggZ3JvdXAgb2Ygb3V0cHV0IHBpeGVscyAqLworICBmb3IgKGNvbCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggPj4gMTsgY29sID4gMDsgY29sLS0pIHsKKyAgICAvKiBEbyB0aGUgY2hyb21hIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9uICovCisgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgY3IgPSBHRVRKU0FNUExFKCppbnB0cjIrKyk7CisgICAgY3JlZCA9IENycnRhYltjcl07CisgICAgY2dyZWVuID0gKGludClSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisKKyAgICAvKiBGZXRjaCA0IFkgdmFsdWVzIGFuZCBlbWl0IDQgcGl4ZWxzICovCisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKyspOworICAgIHIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoeSArIGNyZWQsIGQwKV07CisgICAgZyA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfRyh5ICsgY2dyZWVuLCBkMCldOworICAgIGIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0IoeSArIGNibHVlLCBkMCldOworICAgIGQwID0gRElUSEVSX1JPVEFURShkMCk7CisgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7CisgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUih5ICsgY3JlZCwgZDApXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKHkgKyBjZ3JlZW4sIGQwKV07CisgICAgYiA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfQih5ICsgY2JsdWUsIGQwKV07CisgICAgZDAgPSBESVRIRVJfUk9UQVRFKGQwKTsKKyAgICByZ2IgPSBQQUNLX1RXT19QSVhFTFMocmdiLCBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKSk7CisKKyAgICBXUklURV9UV09fUElYRUxTKG91dHB0cjAsIHJnYik7CisgICAgb3V0cHRyMCArPSA0OworCisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAxKyspOworICAgIHIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X1IoeSArIGNyZWQsIGQxKV07CisgICAgZyA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfRyh5ICsgY2dyZWVuLCBkMSldOworICAgIGIgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0IoeSArIGNibHVlLCBkMSldOworICAgIGQxID0gRElUSEVSX1JPVEFURShkMSk7CisgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDErKyk7CisgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUih5ICsgY3JlZCwgZDEpXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKHkgKyBjZ3JlZW4sIGQxKV07CisgICAgYiA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfQih5ICsgY2JsdWUsIGQxKV07CisgICAgZDEgPSBESVRIRVJfUk9UQVRFKGQxKTsKKyAgICByZ2IgPSBQQUNLX1RXT19QSVhFTFMocmdiLCBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKSk7CisKKyAgICBXUklURV9UV09fUElYRUxTKG91dHB0cjEsIHJnYik7CisgICAgb3V0cHRyMSArPSA0OworICB9CisKKyAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8KKyAgaWYgKGNpbmZvLT5vdXRwdXRfd2lkdGggJiAxKSB7CisgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjEpOworICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KVJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOworICAgIGNibHVlID0gQ2JidGFiW2NiXTsKKworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMCk7CisgICAgciA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfUih5ICsgY3JlZCwgZDApXTsKKyAgICBnID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9HKHkgKyBjZ3JlZW4sIGQwKV07CisgICAgYiA9IHJhbmdlX2xpbWl0W0RJVEhFUl81NjVfQih5ICsgY2JsdWUsIGQwKV07CisgICAgcmdiID0gUEFDS19TSE9SVF81NjUociwgZywgYik7CisgICAgKihJTlQxNiAqKW91dHB0cjAgPSAoSU5UMTYpcmdiOworCisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAxKTsKKyAgICByID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9SKHkgKyBjcmVkLCBkMSldOworICAgIGcgPSByYW5nZV9saW1pdFtESVRIRVJfNTY1X0coeSArIGNncmVlbiwgZDEpXTsKKyAgICBiID0gcmFuZ2VfbGltaXRbRElUSEVSXzU2NV9CKHkgKyBjYmx1ZSwgZDEpXTsKKyAgICByZ2IgPSBQQUNLX1NIT1JUXzU2NShyLCBnLCBiKTsKKyAgICAqKElOVDE2ICopb3V0cHRyMSA9IChJTlQxNilyZ2I7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkbXJnZXh0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1yZ2V4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYzI3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZG1yZ2V4dC5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogamRtcmdleHQuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbi4KKyAqLworCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBqZG1lcmdlLmMgKi8KKworCisvKgorICogVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCisgKi8KKworSU5MSU5FCitMT0NBTCh2b2lkKQoraDJ2MV9tZXJnZWRfdXBzYW1wbGVfaW50ZXJuYWwoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICByZWdpc3RlciBpbnQgeSwgY3JlZCwgY2dyZWVuLCBjYmx1ZTsKKyAgaW50IGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICBKRElNRU5TSU9OIGNvbDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIGludCAqQ3JydGFiID0gdXBzYW1wbGUtPkNyX3JfdGFiOworICBpbnQgKkNiYnRhYiA9IHVwc2FtcGxlLT5DYl9iX3RhYjsKKyAgSkxPTkcgKkNyZ3RhYiA9IHVwc2FtcGxlLT5Dcl9nX3RhYjsKKyAgSkxPTkcgKkNiZ3RhYiA9IHVwc2FtcGxlLT5DYl9nX3RhYjsKKyAgU0hJRlRfVEVNUFMKKworICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cl07CisgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOworICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdOworICAvKiBMb29wIGZvciBlYWNoIHBhaXIgb2Ygb3V0cHV0IHBpeGVscyAqLworICBmb3IgKGNvbCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggPj4gMTsgY29sID4gMDsgY29sLS0pIHsKKyAgICAvKiBEbyB0aGUgY2hyb21hIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9uICovCisgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgY3IgPSBHRVRKU0FNUExFKCppbnB0cjIrKyk7CisgICAgY3JlZCA9IENycnRhYltjcl07CisgICAgY2dyZWVuID0gKGludClSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisgICAgLyogRmV0Y2ggMiBZIHZhbHVlcyBhbmQgZW1pdCAyIHBpeGVscyAqLworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmZGVmIFJHQl9BTFBIQQorICAgIG91dHB0cltSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmZGVmIFJHQl9BTFBIQQorICAgIG91dHB0cltSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICB9CisgIC8qIElmIGltYWdlIHdpZHRoIGlzIG9kZCwgZG8gdGhlIGxhc3Qgb3V0cHV0IGNvbHVtbiBzZXBhcmF0ZWx5ICovCisgIGlmIChjaW5mby0+b3V0cHV0X3dpZHRoICYgMSkgeworICAgIGNiID0gR0VUSlNBTVBMRSgqaW5wdHIxKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMik7CisgICAgY3JlZCA9IENycnRhYltjcl07CisgICAgY2dyZWVuID0gKGludClSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjApOworICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworI2lmZGVmIFJHQl9BTFBIQQorICAgIG91dHB0cltSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICB9Cit9CisKKworLyoKKyAqIFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorICovCisKK0lOTElORQorTE9DQUwodm9pZCkKK2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2ludGVybmFsKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKWNpbmZvLT51cHNhbXBsZTsKKyAgcmVnaXN0ZXIgaW50IHksIGNyZWQsIGNncmVlbiwgY2JsdWU7CisgIGludCBjYiwgY3I7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjAsIG91dHB0cjE7CisgIEpTQU1QUk9XIGlucHRyMDAsIGlucHRyMDEsIGlucHRyMSwgaW5wdHIyOworICBKRElNRU5TSU9OIGNvbDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIGludCAqQ3JydGFiID0gdXBzYW1wbGUtPkNyX3JfdGFiOworICBpbnQgKkNiYnRhYiA9IHVwc2FtcGxlLT5DYl9iX3RhYjsKKyAgSkxPTkcgKkNyZ3RhYiA9IHVwc2FtcGxlLT5Dcl9nX3RhYjsKKyAgSkxPTkcgKkNiZ3RhYiA9IHVwc2FtcGxlLT5DYl9nX3RhYjsKKyAgU0hJRlRfVEVNUFMKKworICBpbnB0cjAwID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHIgKiAyXTsKKyAgaW5wdHIwMSA9IGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyICogMiArIDFdOworICBpbnB0cjEgPSBpbnB1dF9idWZbMV1baW5fcm93X2dyb3VwX2N0cl07CisgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF07CisgIG91dHB0cjEgPSBvdXRwdXRfYnVmWzFdOworICAvKiBMb29wIGZvciBlYWNoIGdyb3VwIG9mIG91dHB1dCBwaXhlbHMgKi8KKyAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoID4+IDE7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgLyogRG8gdGhlIGNocm9tYSBwYXJ0IG9mIHRoZSBjYWxjdWxhdGlvbiAqLworICAgIGNiID0gR0VUSlNBTVBMRSgqaW5wdHIxKyspOworICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKyspOworICAgIGNyZWQgPSBDcnJ0YWJbY3JdOworICAgIGNncmVlbiA9IChpbnQpUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sIFNDQUxFQklUUyk7CisgICAgY2JsdWUgPSBDYmJ0YWJbY2JdOworICAgIC8qIEZldGNoIDQgWSB2YWx1ZXMgYW5kIGVtaXQgNCBwaXhlbHMgKi8KKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7CisgICAgb3V0cHRyMFtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjBbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWZkZWYgUkdCX0FMUEhBCisgICAgb3V0cHRyMFtSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIG91dHB0cjAgKz0gUkdCX1BJWEVMU0laRTsKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7CisgICAgb3V0cHRyMFtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjBbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWZkZWYgUkdCX0FMUEhBCisgICAgb3V0cHRyMFtSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIG91dHB0cjAgKz0gUkdCX1BJWEVMU0laRTsKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDErKyk7CisgICAgb3V0cHRyMVtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjFbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjFbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWZkZWYgUkdCX0FMUEhBCisgICAgb3V0cHRyMVtSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIG91dHB0cjEgKz0gUkdCX1BJWEVMU0laRTsKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDErKyk7CisgICAgb3V0cHRyMVtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjFbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjFbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWZkZWYgUkdCX0FMUEhBCisgICAgb3V0cHRyMVtSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIG91dHB0cjEgKz0gUkdCX1BJWEVMU0laRTsKKyAgfQorICAvKiBJZiBpbWFnZSB3aWR0aCBpcyBvZGQsIGRvIHRoZSBsYXN0IG91dHB1dCBjb2x1bW4gc2VwYXJhdGVseSAqLworICBpZiAoY2luZm8tPm91dHB1dF93aWR0aCAmIDEpIHsKKyAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSk7CisgICAgY3IgPSBHRVRKU0FNUExFKCppbnB0cjIpOworICAgIGNyZWQgPSBDcnJ0YWJbY3JdOworICAgIGNncmVlbiA9IChpbnQpUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sIFNDQUxFQklUUyk7CisgICAgY2JsdWUgPSBDYmJ0YWJbY2JdOworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMCk7CisgICAgb3V0cHRyMFtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjBbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWZkZWYgUkdCX0FMUEhBCisgICAgb3V0cHRyMFtSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSk7CisgICAgb3V0cHRyMVtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjFbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjFbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisjaWZkZWYgUkdCX0FMUEhBCisgICAgb3V0cHRyMVtSR0JfQUxQSEFdID0gMHhGRjsKKyNlbmRpZgorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZHBodWZmLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZHBodWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmNzllZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkcGh1ZmYuYwpAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIGpkcGh1ZmYuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBIdWZmbWFuIGVudHJvcHkgZGVjb2Rpbmcgcm91dGluZXMgZm9yIHByb2dyZXNzaXZlIEpQRUcuCisgKgorICogTXVjaCBvZiB0aGUgY29tcGxleGl0eSBoZXJlIGhhcyB0byBkbyB3aXRoIHN1cHBvcnRpbmcgaW5wdXQgc3VzcGVuc2lvbi4KKyAqIElmIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUgZGVtYW5kcyBzdXNwZW5zaW9uLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gYmFjaworICogdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IE1DVS4gIFRvIGRvIHRoaXMsIHdlIGNvcHkgc3RhdGUgdmFyaWFibGVzCisgKiBpbnRvIGxvY2FsIHdvcmtpbmcgc3RvcmFnZSwgYW5kIHVwZGF0ZSB0aGVtIGJhY2sgdG8gdGhlIHBlcm1hbmVudAorICogc3RvcmFnZSBvbmx5IHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIE1DVS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRodWZmLmgiICAgICAgICAgICAgIC8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqZGh1ZmYuYyAqLworCisKKyNpZmRlZiBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorCisvKgorICogRXhwYW5kZWQgZW50cm9weSBkZWNvZGVyIG9iamVjdCBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBkZWNvZGluZy4KKyAqCisgKiBUaGUgc2F2YWJsZV9zdGF0ZSBzdWJyZWNvcmQgY29udGFpbnMgZmllbGRzIHRoYXQgY2hhbmdlIHdpdGhpbiBhbiBNQ1UsCisgKiBidXQgbXVzdCBub3QgYmUgdXBkYXRlZCBwZXJtYW5lbnRseSB1bnRpbCB3ZSBjb21wbGV0ZSB0aGUgTUNVLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IEVPQlJVTjsgICAgICAgICAgICAgICAgICAvKiByZW1haW5pbmcgRU9CcyBpbiBFT0JSVU4gKi8KKyAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgICAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCit9IHNhdmFibGVfc3RhdGU7CisKKy8qIFRoaXMgbWFjcm8gaXMgdG8gd29yayBhcm91bmQgY29tcGlsZXJzIHdpdGggbWlzc2luZyBvciBicm9rZW4KKyAqIHN0cnVjdHVyZSBhc3NpZ25tZW50LiAgWW91J2xsIG5lZWQgdG8gZml4IHRoaXMgY29kZSBpZiB5b3UgaGF2ZQorICogc3VjaCBhIGNvbXBpbGVyIGFuZCB5b3UgY2hhbmdlIE1BWF9DT01QU19JTl9TQ0FOLgorICovCisKKyNpZm5kZWYgTk9fU1RSVUNUX0FTU0lHTgorI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCwgc3JjKSAgKChkZXN0KSA9IChzcmMpKQorI2Vsc2UKKyNpZiBNQVhfQ09NUFNfSU5fU0NBTiA9PSA0CisjZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LCBzcmMpIFwKKyAgKChkZXN0KS5FT0JSVU4gPSAoc3JjKS5FT0JSVU4sIFwKKyAgIChkZXN0KS5sYXN0X2RjX3ZhbFswXSA9IChzcmMpLmxhc3RfZGNfdmFsWzBdLCBcCisgICAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAorICAgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwKKyAgIChkZXN0KS5sYXN0X2RjX3ZhbFszXSA9IChzcmMpLmxhc3RfZGNfdmFsWzNdKQorI2VuZGlmCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgYXJlIGxvYWRlZCBpbnRvIGxvY2FsIHZhcmlhYmxlcyBhdCBzdGFydCBvZiBlYWNoIE1DVS4KKyAgICogSW4gY2FzZSBvZiBzdXNwZW5zaW9uLCB3ZSBleGl0IFdJVEhPVVQgdXBkYXRpbmcgdGhlbS4KKyAgICovCisgIGJpdHJlYWRfcGVybV9zdGF0ZSBiaXRzdGF0ZTsgIC8qIEJpdCBidWZmZXIgYXQgc3RhcnQgb2YgTUNVICovCisgIHNhdmFibGVfc3RhdGUgc2F2ZWQ7ICAgICAgICAgIC8qIE90aGVyIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLworCisgIC8qIFRoZXNlIGZpZWxkcyBhcmUgTk9UIGxvYWRlZCBpbnRvIGxvY2FsIHdvcmtpbmcgc3RhdGUuICovCisgIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsgIC8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKworICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKSAqLworICBkX2Rlcml2ZWRfdGJsICpkZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107CisKKyAgZF9kZXJpdmVkX3RibCAqYWNfZGVyaXZlZF90Ymw7IC8qIGFjdGl2ZSB0YWJsZSBkdXJpbmcgYW4gQUMgc2NhbiAqLworfSBwaHVmZl9lbnRyb3B5X2RlY29kZXI7CisKK3R5cGVkZWYgcGh1ZmZfZW50cm9weV9kZWNvZGVyICpwaHVmZl9lbnRyb3B5X3B0cjsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0RDX2ZpcnN0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKTsKK01FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0FDX2ZpcnN0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKTsKK01FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0RDX3JlZmluZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpOworTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfQUNfcmVmaW5lKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSk7CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgSHVmZm1hbi1jb21wcmVzc2VkIHNjYW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3BodWZmX2RlY29kZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgYm9vbGVhbiBpc19EQ19iYW5kLCBiYWQ7CisgIGludCBjaSwgY29lZmksIHRibDsKKyAgZF9kZXJpdmVkX3RibCAqKnBkdGJsOworICBpbnQgKmNvZWZfYml0X3B0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBpc19EQ19iYW5kID0gKGNpbmZvLT5TcyA9PSAwKTsKKworICAvKiBWYWxpZGF0ZSBzY2FuIHBhcmFtZXRlcnMgKi8KKyAgYmFkID0gRkFMU0U7CisgIGlmIChpc19EQ19iYW5kKSB7CisgICAgaWYgKGNpbmZvLT5TZSAhPSAwKQorICAgICAgYmFkID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICAvKiBuZWVkIG5vdCBjaGVjayBTcy9TZSA8IDAgc2luY2UgdGhleSBjYW1lIGZyb20gdW5zaWduZWQgYnl0ZXMgKi8KKyAgICBpZiAoY2luZm8tPlNzID4gY2luZm8tPlNlIHx8IGNpbmZvLT5TZSA+PSBEQ1RTSVpFMikKKyAgICAgIGJhZCA9IFRSVUU7CisgICAgLyogQUMgc2NhbnMgbWF5IGhhdmUgb25seSBvbmUgY29tcG9uZW50ICovCisgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuICE9IDEpCisgICAgICBiYWQgPSBUUlVFOworICB9CisgIGlmIChjaW5mby0+QWggIT0gMCkgeworICAgIC8qIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW46IG11c3QgaGF2ZSBBbCA9IEFoLTEuICovCisgICAgaWYgKGNpbmZvLT5BbCAhPSBjaW5mby0+QWggLSAxKQorICAgICAgYmFkID0gVFJVRTsKKyAgfQorICBpZiAoY2luZm8tPkFsID4gMTMpICAgICAgICAgICAvKiBuZWVkIG5vdCBjaGVjayBmb3IgPCAwICovCisgICAgYmFkID0gVFJVRTsKKyAgLyogQXJndWFibHkgdGhlIG1heGltdW0gQWwgdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiAxMyBmb3IgOC1iaXQgcHJlY2lzaW9uLAorICAgKiBidXQgdGhlIHNwZWMgZG9lc24ndCBzYXkgc28sIGFuZCB3ZSB0cnkgdG8gYmUgbGliZXJhbCBhYm91dCB3aGF0IHdlCisgICAqIGFjY2VwdC4gIE5vdGU6IGxhcmdlIEFsIHZhbHVlcyBjb3VsZCByZXN1bHQgaW4gb3V0LW9mLXJhbmdlIERDCisgICAqIGNvZWZmaWNpZW50cyBkdXJpbmcgZWFybHkgc2NhbnMsIGxlYWRpbmcgdG8gYml6YXJyZSBkaXNwbGF5cyBkdWUgdG8KKyAgICogb3ZlcmZsb3dzIGluIHRoZSBJRENUIG1hdGguICBCdXQgd2Ugd29uJ3QgY3Jhc2guCisgICAqLworICBpZiAoYmFkKQorICAgIEVSUkVYSVQ0KGNpbmZvLCBKRVJSX0JBRF9QUk9HUkVTU0lPTiwKKyAgICAgICAgICAgICBjaW5mby0+U3MsIGNpbmZvLT5TZSwgY2luZm8tPkFoLCBjaW5mby0+QWwpOworICAvKiBVcGRhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzLCBhbmQgdmVyaWZ5IHRoYXQgc2NhbiBvcmRlciBpcyBsZWdhbC4KKyAgICogTm90ZSB0aGF0IGludGVyLXNjYW4gaW5jb25zaXN0ZW5jaWVzIGFyZSB0cmVhdGVkIGFzIHdhcm5pbmdzCisgICAqIG5vdCBmYXRhbCBlcnJvcnMgLi4uIG5vdCBjbGVhciBpZiB0aGlzIGlzIHJpZ2h0IHdheSB0byBiZWhhdmUuCisgICAqLworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGludCBjaW5kZXggPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0tPmNvbXBvbmVudF9pbmRleDsKKyAgICBjb2VmX2JpdF9wdHIgPSAmY2luZm8tPmNvZWZfYml0c1tjaW5kZXhdWzBdOworICAgIGlmICghaXNfRENfYmFuZCAmJiBjb2VmX2JpdF9wdHJbMF0gPCAwKSAvKiBBQyB3aXRob3V0IHByaW9yIERDIHNjYW4gKi8KKyAgICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgMCk7CisgICAgZm9yIChjb2VmaSA9IGNpbmZvLT5TczsgY29lZmkgPD0gY2luZm8tPlNlOyBjb2VmaSsrKSB7CisgICAgICBpbnQgZXhwZWN0ZWQgPSAoY29lZl9iaXRfcHRyW2NvZWZpXSA8IDApID8gMCA6IGNvZWZfYml0X3B0cltjb2VmaV07CisgICAgICBpZiAoY2luZm8tPkFoICE9IGV4cGVjdGVkKQorICAgICAgICBXQVJOTVMyKGNpbmZvLCBKV1JOX0JPR1VTX1BST0dSRVNTSU9OLCBjaW5kZXgsIGNvZWZpKTsKKyAgICAgIGNvZWZfYml0X3B0cltjb2VmaV0gPSBjaW5mby0+QWw7CisgICAgfQorICB9CisKKyAgLyogU2VsZWN0IE1DVSBkZWNvZGluZyByb3V0aW5lICovCisgIGlmIChjaW5mby0+QWggPT0gMCkgeworICAgIGlmIChpc19EQ19iYW5kKQorICAgICAgZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0RDX2ZpcnN0OworICAgIGVsc2UKKyAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19maXJzdDsKKyAgfSBlbHNlIHsKKyAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9EQ19yZWZpbmU7CisgICAgZWxzZQorICAgICAgZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0FDX3JlZmluZTsKKyAgfQorCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBNYWtlIHN1cmUgcmVxdWVzdGVkIHRhYmxlcyBhcmUgcHJlc2VudCwgYW5kIGNvbXB1dGUgZGVyaXZlZCB0YWJsZXMuCisgICAgICogV2UgbWF5IGJ1aWxkIHNhbWUgZGVyaXZlZCB0YWJsZSBtb3JlIHRoYW4gb25jZSwgYnV0IGl0J3Mgbm90IGV4cGVuc2l2ZS4KKyAgICAgKi8KKyAgICBpZiAoaXNfRENfYmFuZCkgeworICAgICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7ICAgICAvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisgICAgICAgIHRibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICAgICAgcGR0YmwgPSAoZF9kZXJpdmVkX3RibCAqKikoZW50cm9weS0+ZGVyaXZlZF90YmxzKSArIHRibDsKKyAgICAgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIHRibCwgcGR0YmwpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgICBwZHRibCA9IChkX2Rlcml2ZWRfdGJsICoqKShlbnRyb3B5LT5kZXJpdmVkX3RibHMpICsgdGJsOworICAgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCB0YmwsIHBkdGJsKTsKKyAgICAgIC8qIHJlbWVtYmVyIHRoZSBzaW5nbGUgYWN0aXZlIHRhYmxlICovCisgICAgICBlbnRyb3B5LT5hY19kZXJpdmVkX3RibCA9IGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdOworICAgIH0KKyAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBiaXRyZWFkIHN0YXRlIHZhcmlhYmxlcyAqLworICBlbnRyb3B5LT5iaXRzdGF0ZS5iaXRzX2xlZnQgPSAwOworICBlbnRyb3B5LT5iaXRzdGF0ZS5nZXRfYnVmZmVyID0gMDsgLyogdW5uZWNlc3NhcnksIGJ1dCBrZWVwcyBQdXJpZnkgcXVpZXQgKi8KKyAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7CisKKyAgLyogSW5pdGlhbGl6ZSBwcml2YXRlIHN0YXRlIHZhcmlhYmxlcyAqLworICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSAwOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Cit9CisKKworLyoKKyAqIEZpZ3VyZSBGLjEyOiBleHRlbmQgc2lnbiBiaXQuCisgKiBPbiBzb21lIG1hY2hpbmVzLCBhIHNoaWZ0IGFuZCBhZGQgd2lsbCBiZSBmYXN0ZXIgdGhhbiBhIHRhYmxlIGxvb2t1cC4KKyAqLworCisjZGVmaW5lIEFWT0lEX1RBQkxFUworI2lmZGVmIEFWT0lEX1RBQkxFUworCisjZGVmaW5lIE5FR18xICAoKHVuc2lnbmVkKS0xKQorI2RlZmluZSBIVUZGX0VYVEVORCh4LCBzKSBcCisgICgoeCkgPCAoMSA8PCAoKHMpIC0gMSkpID8gKHgpICsgKCgoTkVHXzEpIDw8IChzKSkgKyAxKSA6ICh4KSkKKworI2Vsc2UKKworI2RlZmluZSBIVUZGX0VYVEVORCh4LCBzKSBcCisgICgoeCkgPCBleHRlbmRfdGVzdFtzXSA/ICh4KSArIGV4dGVuZF9vZmZzZXRbc10gOiAoeCkpCisKK3N0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX3Rlc3RbMTZdID0geyAgIC8qIGVudHJ5IG4gaXMgMioqKG4tMSkgKi8KKyAgMCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsCisgIDB4MDEwMCwgMHgwMjAwLCAweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMAorfTsKKworc3RhdGljIGNvbnN0IGludCBleHRlbmRfb2Zmc2V0WzE2XSA9IHsgLyogZW50cnkgbiBpcyAoLTEgPDwgbikgKyAxICovCisgIDAsICgoLTEpIDw8IDEpICsgMSwgKCgtMSkgPDwgMikgKyAxLCAoKC0xKSA8PCAzKSArIDEsICgoLTEpIDw8IDQpICsgMSwKKyAgKCgtMSkgPDwgNSkgKyAxLCAoKC0xKSA8PCA2KSArIDEsICgoLTEpIDw8IDcpICsgMSwgKCgtMSkgPDwgOCkgKyAxLAorICAoKC0xKSA8PCA5KSArIDEsICgoLTEpIDw8IDEwKSArIDEsICgoLTEpIDw8IDExKSArIDEsICgoLTEpIDw8IDEyKSArIDEsCisgICgoLTEpIDw8IDEzKSArIDEsICgoLTEpIDw8IDE0KSArIDEsICgoLTEpIDw8IDE1KSArIDEKK307CisKKyNlbmRpZiAvKiBBVk9JRF9UQUJMRVMgKi8KKworCisvKgorICogQ2hlY2sgZm9yIGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIGRlY29kZXIuCisgKiBSZXR1cm5zIEZBTFNFIGlmIG11c3Qgc3VzcGVuZC4KKyAqLworCitMT0NBTChib29sZWFuKQorcHJvY2Vzc19yZXN0YXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCBjaTsKKworICAvKiBUaHJvdyBhd2F5IGFueSB1bnVzZWQgYml0cyByZW1haW5pbmcgaW4gYml0IGJ1ZmZlcjsgKi8KKyAgLyogaW5jbHVkZSBhbnkgZnVsbCBieXRlcyBpbiBuZXh0X21hcmtlcidzIGNvdW50IG9mIGRpc2NhcmRlZCBieXRlcyAqLworICBjaW5mby0+bWFya2VyLT5kaXNjYXJkZWRfYnl0ZXMgKz0gZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0IC8gODsKKyAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsKKworICAvKiBBZHZhbmNlIHBhc3QgdGhlIFJTVG4gbWFya2VyICovCisgIGlmICghKCpjaW5mby0+bWFya2VyLT5yZWFkX3Jlc3RhcnRfbWFya2VyKSAoY2luZm8pKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspCisgICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsKKyAgLyogUmUtaW5pdCBFT0IgcnVuIGNvdW50LCB0b28gKi8KKyAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gMDsKKworICAvKiBSZXNldCByZXN0YXJ0IGNvdW50ZXIgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKKworICAvKiBSZXNldCBvdXQtb2YtZGF0YSBmbGFnLCB1bmxlc3MgcmVhZF9yZXN0YXJ0X21hcmtlciBsZWZ0IHVzIHNtYWNrIHVwCisgICAqIGFnYWluc3QgYSBtYXJrZXIuICBJbiB0aGF0IGNhc2Ugd2Ugd2lsbCBlbmQgdXAgdHJlYXRpbmcgdGhlIG5leHQgZGF0YQorICAgKiBzZWdtZW50IGFzIGVtcHR5LCBhbmQgd2UgY2FuIGF2b2lkIHByb2R1Y2luZyBib2d1cyBvdXRwdXQgcGl4ZWxzIGJ5CisgICAqIGxlYXZpbmcgdGhlIGZsYWcgc2V0LgorICAgKi8KKyAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApCisgICAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEh1ZmZtYW4gTUNVIGRlY29kaW5nLgorICogRWFjaCBvZiB0aGVzZSByb3V0aW5lcyBkZWNvZGVzIGFuZCByZXR1cm5zIG9uZSBNQ1UncyB3b3J0aCBvZgorICogSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4KKyAqIFRoZSBjb2VmZmljaWVudHMgYXJlIHJlb3JkZXJlZCBmcm9tIHppZ3phZyBvcmRlciBpbnRvIG5hdHVyYWwgYXJyYXkgb3JkZXIsCisgKiBidXQgYXJlIG5vdCBkZXF1YW50aXplZC4KKyAqCisgKiBUaGUgaSd0aCBibG9jayBvZiB0aGUgTUNVIGlzIHN0b3JlZCBpbnRvIHRoZSBibG9jayBwb2ludGVkIHRvIGJ5CisgKiBNQ1VfZGF0YVtpXS4gIFdFIEFTU1VNRSBUSElTIEFSRUEgSVMgSU5JVElBTExZIFpFUk9FRCBCWSBUSEUgQ0FMTEVSLgorICoKKyAqIFdlIHJldHVybiBGQUxTRSBpZiBkYXRhIHNvdXJjZSByZXF1ZXN0ZWQgc3VzcGVuc2lvbi4gIEluIHRoYXQgY2FzZSBubworICogY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBwZXJtYW5lbnQgc3RhdGUuICAoRXhjZXB0aW9uOiBzb21lIG91dHB1dAorICogY29lZmZpY2llbnRzIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZC4gIFRoaXMgaXMgaGFybWxlc3MgZm9yCisgKiBzcGVjdHJhbCBzZWxlY3Rpb24sIHNpbmNlIHdlJ2xsIGp1c3QgcmUtYXNzaWduIHRoZW0gb24gdGhlIG5leHQgY2FsbC4KKyAqIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiBBQyByZWZpbmVtZW50IGhhcyB0byBiZSBtb3JlIGNhcmVmdWwsIGhvd2V2ZXIuKQorICovCisKKy8qCisgKiBNQ1UgZGVjb2RpbmcgZm9yIERDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwKKyAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2RlY29kZV9tY3VfRENfZmlyc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0ciljaW5mby0+ZW50cm9weTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICByZWdpc3RlciBpbnQgcywgcjsKKyAgaW50IGJsa24sIGNpOworICBKQkxPQ0tST1cgYmxvY2s7CisgIEJJVFJFQURfU1RBVEVfVkFSUzsKKyAgc2F2YWJsZV9zdGF0ZSBzdGF0ZTsKKyAgZF9kZXJpdmVkX3RibCAqdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkOyBtYXkgaGF2ZSB0byBzdXNwZW5kICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgaWYgKCFwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGp1c3QgbGVhdmUgdGhlIE1DVSBzZXQgdG8gemVyb2VzLgorICAgKiBUaGlzIHdheSwgd2UgcmV0dXJuIHVuaWZvcm0gZ3JheSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2VnbWVudC4KKyAgICovCisgIGlmICghZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7CisKKyAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sIGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsKKworICAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KKworICAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgdGJsID0gZW50cm9weS0+ZGVyaXZlZF90YmxzW2NvbXBwdHItPmRjX3RibF9ub107CisKKyAgICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLworCisgICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLworICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOworICAgICAgaWYgKHMpIHsKKyAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKyAgICAgICAgciA9IEdFVF9CSVRTKHMpOworICAgICAgICBzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgICB9CisKKyAgICAgIC8qIENvbnZlcnQgREMgZGlmZmVyZW5jZSB0byBhY3R1YWwgdmFsdWUsIHVwZGF0ZSBsYXN0X2RjX3ZhbCAqLworICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07CisgICAgICBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOworICAgICAgLyogU2NhbGUgYW5kIG91dHB1dCB0aGUgY29lZmZpY2llbnQgKGFzc3VtZXMganBlZ19uYXR1cmFsX29yZGVyWzBdPTApICovCisgICAgICAoKmJsb2NrKVswXSA9IChKQ09FRilMRUZUX1NISUZUKHMsIEFsKTsKKyAgICB9CisKKyAgICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8KKyAgICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sIGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsKKyAgfQorCisgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGRlY29kaW5nIGZvciBBQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1X0FDX2ZpcnN0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCBTZSA9IGNpbmZvLT5TZTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICByZWdpc3RlciBpbnQgcywgaywgcjsKKyAgdW5zaWduZWQgaW50IEVPQlJVTjsKKyAgSkJMT0NLUk9XIGJsb2NrOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisgIGRfZGVyaXZlZF90YmwgKnRibDsKKworICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGlmICghcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgLyogSWYgd2UndmUgcnVuIG91dCBvZiBkYXRhLCBqdXN0IGxlYXZlIHRoZSBNQ1Ugc2V0IHRvIHplcm9lcy4KKyAgICogVGhpcyB3YXksIHdlIHJldHVybiB1bmlmb3JtIGdyYXkgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlZ21lbnQuCisgICAqLworICBpZiAoIWVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSkgeworCisgICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlLgorICAgICAqIFdlIGNhbiBhdm9pZCBsb2FkaW5nL3NhdmluZyBiaXRyZWFkIHN0YXRlIGlmIGluIGFuIEVPQiBydW4uCisgICAgICovCisgICAgRU9CUlVOID0gZW50cm9weS0+c2F2ZWQuRU9CUlVOOyAgICAgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KKworICAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCisKKyAgICBpZiAoRU9CUlVOID4gMCkgICAgICAgICAgICAgLyogaWYgaXQncyBhIGJhbmQgb2YgemVyb2VzLi4uICovCisgICAgICBFT0JSVU4tLTsgICAgICAgICAgICAgICAgIC8qIC4uLnByb2Nlc3MgaXQgbm93ICh3ZSBkbyBub3RoaW5nKSAqLworICAgIGVsc2UgeworICAgICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLCBlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgICBibG9jayA9IE1DVV9kYXRhWzBdOworICAgICAgdGJsID0gZW50cm9weS0+YWNfZGVyaXZlZF90Ymw7CisKKyAgICAgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7CisgICAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCB0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwyKTsKKyAgICAgICAgciA9IHMgPj4gNDsKKyAgICAgICAgcyAmPSAxNTsKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBrICs9IHI7CisgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKyAgICAgICAgICByID0gR0VUX0JJVFMocyk7CisgICAgICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOworICAgICAgICAgIC8qIFNjYWxlIGFuZCBvdXRwdXQgY29lZmZpY2llbnQgaW4gbmF0dXJhbCAoZGV6aWd6YWdnZWQpIG9yZGVyICovCisgICAgICAgICAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRilMRUZUX1NISUZUKHMsIEFsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAociA9PSAxNSkgeyAgICAgICAgLyogWlJMICovCisgICAgICAgICAgICBrICs9IDE1OyAgICAgICAgICAgIC8qIHNraXAgMTUgemVyb2VzIGluIGJhbmQgKi8KKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgLyogRU9CciwgcnVuIGxlbmd0aCBpcyAyXnIgKyBhcHBlbmRlZCBiaXRzICovCisgICAgICAgICAgICBFT0JSVU4gPSAxIDw8IHI7CisgICAgICAgICAgICBpZiAocikgeyAgICAgICAgICAgIC8qIEVPQnIsIHIgPiAwICovCisgICAgICAgICAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHIsIHJldHVybiBGQUxTRSk7CisgICAgICAgICAgICAgIHIgPSBHRVRfQklUUyhyKTsKKyAgICAgICAgICAgICAgRU9CUlVOICs9IHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFT0JSVU4tLTsgICAgICAgICAgIC8qIHRoaXMgYmFuZCBpcyBwcm9jZXNzZWQgYXQgdGhpcyBtb21lbnQgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogZm9yY2UgZW5kLW9mLWJhbmQgKi8KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLCBlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgfQorCisgICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgICAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gRU9CUlVOOyAgICAgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KKyAgfQorCisgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGRlY29kaW5nIGZvciBEQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLgorICogTm90ZTogd2UgYXNzdW1lIHN1Y2ggc2NhbnMgY2FuIGJlIG11bHRpLWNvbXBvbmVudCwgYWx0aG91Z2ggdGhlIHNwZWMKKyAqIGlzIG5vdCB2ZXJ5IGNsZWFyIG9uIHRoZSBwb2ludC4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2RlY29kZV9tY3VfRENfcmVmaW5lKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCBwMSA9IDEgPDwgY2luZm8tPkFsOyAgICAgIC8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworICBpbnQgYmxrbjsKKyAgSkJMT0NLUk9XIGJsb2NrOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisKKyAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCisgICAgICBpZiAoIXByb2Nlc3NfcmVzdGFydChjaW5mbykpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIE5vdCB3b3J0aCB0aGUgY3ljbGVzIHRvIGNoZWNrIGluc3VmZmljaWVudF9kYXRhIGhlcmUsCisgICAqIHNpbmNlIHdlIHdpbGwgbm90IGNoYW5nZSB0aGUgZGF0YSBhbnl3YXkgaWYgd2UgcmVhZCB6ZXJvZXMuCisgICAqLworCisgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAqLworICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sIGVudHJvcHktPmJpdHN0YXRlKTsKKworICAvKiBPdXRlciBsb29wIGhhbmRsZXMgZWFjaCBibG9jayBpbiB0aGUgTUNVICovCisKKyAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKyAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworCisgICAgLyogRW5jb2RlZCBkYXRhIGlzIHNpbXBseSB0aGUgbmV4dCBiaXQgb2YgdGhlIHR3bydzLWNvbXBsZW1lbnQgREMgdmFsdWUgKi8KKyAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCByZXR1cm4gRkFMU0UpOworICAgIGlmIChHRVRfQklUUygxKSkKKyAgICAgICgqYmxvY2spWzBdIHw9IHAxOworICAgIC8qIE5vdGU6IHNpbmNlIHdlIHVzZSB8PSwgcmVwZWF0aW5nIHRoZSBhc3NpZ25tZW50IGxhdGVyIGlzIHNhZmUgKi8KKyAgfQorCisgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLworICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sIGVudHJvcHktPmJpdHN0YXRlKTsKKworICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBkZWNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2RlY29kZV9tY3VfQUNfcmVmaW5lKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpY2luZm8tPmVudHJvcHk7CisgIGludCBTZSA9IGNpbmZvLT5TZTsKKyAgaW50IHAxID0gMSA8PCBjaW5mby0+QWw7ICAgICAgICAvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KKyAgaW50IG0xID0gKE5FR18xKSA8PCBjaW5mby0+QWw7ICAvKiAtMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisgIHJlZ2lzdGVyIGludCBzLCBrLCByOworICB1bnNpZ25lZCBpbnQgRU9CUlVOOworICBKQkxPQ0tST1cgYmxvY2s7CisgIEpDT0VGUFRSIHRoaXNjb2VmOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisgIGRfZGVyaXZlZF90YmwgKnRibDsKKyAgaW50IG51bV9uZXduejsKKyAgaW50IG5ld256X3Bvc1tEQ1RTSVpFMl07CisKKyAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCisgICAgICBpZiAoIXByb2Nlc3NfcmVzdGFydChjaW5mbykpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwgZG9uJ3QgbW9kaWZ5IHRoZSBNQ1UuCisgICAqLworICBpZiAoIWVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSkgeworCisgICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCisgICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLCBlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgRU9CUlVOID0gZW50cm9weS0+c2F2ZWQuRU9CUlVOOyAvKiBvbmx5IHBhcnQgb2Ygc2F2ZWQgc3RhdGUgd2UgbmVlZCAqLworCisgICAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8KKyAgICBibG9jayA9IE1DVV9kYXRhWzBdOworICAgIHRibCA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsOworCisgICAgLyogSWYgd2UgYXJlIGZvcmNlZCB0byBzdXNwZW5kLCB3ZSBtdXN0IHVuZG8gdGhlIGFzc2lnbm1lbnRzIHRvIGFueSBuZXdseQorICAgICAqIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBibG9jaywgYmVjYXVzZSBvdGhlcndpc2Ugd2UnZCBnZXQgY29uZnVzZWQKKyAgICAgKiBuZXh0IHRpbWUgYWJvdXQgd2hpY2ggY29lZmZpY2llbnRzIHdlcmUgYWxyZWFkeSBub256ZXJvLgorICAgICAqIEJ1dCB3ZSBuZWVkIG5vdCB1bmRvIGFkZGl0aW9uIG9mIGJpdHMgdG8gYWxyZWFkeS1ub256ZXJvIGNvZWZmaWNpZW50czsKKyAgICAgKiBpbnN0ZWFkLCB3ZSBjYW4gdGVzdCB0aGUgY3VycmVudCBiaXQgdG8gc2VlIGlmIHdlIGFscmVhZHkgZGlkIGl0LgorICAgICAqLworICAgIG51bV9uZXdueiA9IDA7CisKKyAgICAvKiBpbml0aWFsaXplIGNvZWZmaWNpZW50IGxvb3AgY291bnRlciB0byBzdGFydCBvZiBiYW5kICovCisgICAgayA9IGNpbmZvLT5TczsKKworICAgIGlmIChFT0JSVU4gPT0gMCkgeworICAgICAgZm9yICg7IGsgPD0gU2U7IGsrKykgeworICAgICAgICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCBnb3RvIHVuZG9pdCwgbGFiZWwzKTsKKyAgICAgICAgciA9IHMgPj4gNDsKKyAgICAgICAgcyAmPSAxNTsKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBpZiAocyAhPSAxKSAgICAgICAgICAgLyogc2l6ZSBvZiBuZXcgY29lZiBzaG91bGQgYWx3YXlzIGJlIDEgKi8KKyAgICAgICAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9IVUZGX0JBRF9DT0RFKTsKKyAgICAgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CisgICAgICAgICAgaWYgKEdFVF9CSVRTKDEpKQorICAgICAgICAgICAgcyA9IHAxOyAgICAgICAgICAgICAvKiBuZXdseSBub256ZXJvIGNvZWYgaXMgcG9zaXRpdmUgKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzID0gbTE7ICAgICAgICAgICAgIC8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBuZWdhdGl2ZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChyICE9IDE1KSB7CisgICAgICAgICAgICBFT0JSVU4gPSAxIDw8IHI7ICAgIC8qIEVPQnIsIHJ1biBsZW5ndGggaXMgMl5yICsgYXBwZW5kZWQgYml0cyAqLworICAgICAgICAgICAgaWYgKHIpIHsKKyAgICAgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgZ290byB1bmRvaXQpOworICAgICAgICAgICAgICByID0gR0VUX0JJVFMocik7CisgICAgICAgICAgICAgIEVPQlJVTiArPSByOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiByZXN0IG9mIGJsb2NrIGlzIGhhbmRsZWQgYnkgRU9CIGxvZ2ljICovCisgICAgICAgICAgfQorICAgICAgICAgIC8qIG5vdGUgcyA9IDAgZm9yIHByb2Nlc3NpbmcgWlJMICovCisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5jZSBvdmVyIGFscmVhZHktbm9uemVybyBjb2VmcyBhbmQgciBzdGlsbC16ZXJvIGNvZWZzLAorICAgICAgICAgKiBhcHBlbmRpbmcgY29ycmVjdGlvbiBiaXRzIHRvIHRoZSBub256ZXJvZXMuICBBIGNvcnJlY3Rpb24gYml0IGlzIDEKKyAgICAgICAgICogaWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjb2VmZmljaWVudCBtdXN0IGJlIGluY3JlYXNlZC4KKyAgICAgICAgICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICB0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKyAgICAgICAgICBpZiAoKnRoaXNjb2VmICE9IDApIHsKKyAgICAgICAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsKKyAgICAgICAgICAgIGlmIChHRVRfQklUUygxKSkgeworICAgICAgICAgICAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnRoaXNjb2VmID49IDApCisgICAgICAgICAgICAgICAgICAqdGhpc2NvZWYgKz0gcDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgKnRoaXNjb2VmICs9IG0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgtLXIgPCAwKQorICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAvKiByZWFjaGVkIHRhcmdldCB6ZXJvIGNvZWZmaWNpZW50ICovCisgICAgICAgICAgfQorICAgICAgICAgIGsrKzsKKyAgICAgICAgfSB3aGlsZSAoayA8PSBTZSk7CisgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgaW50IHBvcyA9IGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKyAgICAgICAgICAvKiBPdXRwdXQgbmV3bHkgbm9uemVybyBjb2VmZmljaWVudCAqLworICAgICAgICAgICgqYmxvY2spW3Bvc10gPSAoSkNPRUYpczsKKyAgICAgICAgICAvKiBSZW1lbWJlciBpdHMgcG9zaXRpb24gaW4gY2FzZSB3ZSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgICAgICAgICBuZXduel9wb3NbbnVtX25ld256KytdID0gcG9zOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKEVPQlJVTiA+IDApIHsKKyAgICAgIC8qIFNjYW4gYW55IHJlbWFpbmluZyBjb2VmZmljaWVudCBwb3NpdGlvbnMgYWZ0ZXIgdGhlIGVuZC1vZi1iYW5kCisgICAgICAgKiAodGhlIGxhc3QgbmV3bHkgbm9uemVybyBjb2VmZmljaWVudCwgaWYgYW55KS4gIEFwcGVuZCBhIGNvcnJlY3Rpb24KKyAgICAgICAqIGJpdCB0byBlYWNoIGFscmVhZHktbm9uemVybyBjb2VmZmljaWVudC4gIEEgY29ycmVjdGlvbiBiaXQgaXMgMQorICAgICAgICogaWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjb2VmZmljaWVudCBtdXN0IGJlIGluY3JlYXNlZC4KKyAgICAgICAqLworICAgICAgZm9yICg7IGsgPD0gU2U7IGsrKykgeworICAgICAgICB0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKyAgICAgICAgaWYgKCp0aGlzY29lZiAhPSAwKSB7CisgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOworICAgICAgICAgIGlmIChHRVRfQklUUygxKSkgeworICAgICAgICAgICAgaWYgKCgqdGhpc2NvZWYgJiBwMSkgPT0gMCkgeyAvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgY2hhbmdlZCBpdCAqLworICAgICAgICAgICAgICBpZiAoKnRoaXNjb2VmID49IDApCisgICAgICAgICAgICAgICAgKnRoaXNjb2VmICs9IHAxOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnRoaXNjb2VmICs9IG0xOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogQ291bnQgb25lIGJsb2NrIGNvbXBsZXRlZCBpbiBFT0IgcnVuICovCisgICAgICBFT0JSVU4tLTsKKyAgICB9CisKKyAgICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8KKyAgICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sIGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSBFT0JSVU47IC8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCisgIH0KKworICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisKKyAgcmV0dXJuIFRSVUU7CisKK3VuZG9pdDoKKyAgLyogUmUtemVybyBhbnkgb3V0cHV0IGNvZWZmaWNpZW50cyB0aGF0IHdlIG1hZGUgbmV3bHkgbm9uemVybyAqLworICB3aGlsZSAobnVtX25ld256ID4gMCkKKyAgICAoKmJsb2NrKVtuZXduel9wb3NbLS1udW1fbmV3bnpdXSA9IDA7CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfcGh1ZmZfZGVjb2RlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5OworICBpbnQgKmNvZWZfYml0X3B0cjsKKyAgaW50IGNpLCBpOworCisgIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGh1ZmZfZW50cm9weV9kZWNvZGVyKSk7CisgIGNpbmZvLT5lbnRyb3B5ID0gKHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciAqKWVudHJvcHk7CisgIGVudHJvcHktPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19waHVmZl9kZWNvZGVyOworCisgIC8qIE1hcmsgZGVyaXZlZCB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgeworICAgIGVudHJvcHktPmRlcml2ZWRfdGJsc1tpXSA9IE5VTEw7CisgIH0KKworICAvKiBDcmVhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzIHRhYmxlICovCisgIGNpbmZvLT5jb2VmX2JpdHMgPSAoaW50ICgqKVtEQ1RTSVpFMl0pCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgKiBEQ1RTSVpFMiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnQpKTsKKyAgY29lZl9iaXRfcHRyID0gJmNpbmZvLT5jb2VmX2JpdHNbMF1bMF07CisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykKKyAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykKKyAgICAgICpjb2VmX2JpdF9wdHIrKyA9IC0xOworfQorCisjZW5kaWYgLyogRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkcG9zdGN0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZHBvc3RjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMmNmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZHBvc3RjdC5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogamRwb3N0Y3QuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgcmVsZXZhbnQKKyAqIHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlY29tcHJlc3Npb24gcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlci4KKyAqIFRoaXMgY29udHJvbGxlciBtYW5hZ2VzIHRoZSB1cHNhbXBsaW5nLCBjb2xvciBjb252ZXJzaW9uLCBhbmQgY29sb3IKKyAqIHF1YW50aXphdGlvbi9yZWR1Y3Rpb24gc3RlcHM7IHNwZWNpZmljYWxseSwgaXQgY29udHJvbHMgdGhlIGJ1ZmZlcmluZworICogYmV0d2VlbiB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIGFuZCBjb2xvciBxdWFudGl6YXRpb24vcmVkdWN0aW9uLgorICoKKyAqIElmIG5vIGNvbG9yIHF1YW50aXphdGlvbi9yZWR1Y3Rpb24gaXMgcmVxdWlyZWQsIHRoZW4gdGhpcyBtb2R1bGUgaGFzIG5vCisgKiB3b3JrIHRvIGRvLCBhbmQgaXQganVzdCBoYW5kcyBvZmYgdG8gdGhlIHVwc2FtcGxlL2NvbG9yIGNvbnZlcnNpb24gY29kZS4KKyAqIEFuIGludGVncmF0ZWQgdXBzYW1wbGUvY29udmVydC9xdWFudGl6ZSBwcm9jZXNzIHdvdWxkIHJlcGxhY2UgdGhpcyBtb2R1bGUKKyAqIGVudGlyZWx5LgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIENvbG9yIHF1YW50aXphdGlvbiBzb3VyY2UgYnVmZmVyOiB0aGlzIGhvbGRzIG91dHB1dCBkYXRhIGZyb20KKyAgICogdGhlIHVwc2FtcGxlL2NvbG9yIGNvbnZlcnNpb24gc3RlcCB0byBiZSBwYXNzZWQgdG8gdGhlIHF1YW50aXplci4KKyAgICogRm9yIHR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiwgd2UgbmVlZCBhIGZ1bGwtaW1hZ2UgYnVmZmVyOworICAgKiBmb3Igb25lLXBhc3Mgb3BlcmF0aW9uLCBhIHN0cmlwIGJ1ZmZlciBpcyBzdWZmaWNpZW50LgorICAgKi8KKyAganZpcnRfc2FycmF5X3B0ciB3aG9sZV9pbWFnZTsgLyogdmlydHVhbCBhcnJheSwgb3IgTlVMTCBpZiBvbmUtcGFzcyAqLworICBKU0FNUEFSUkFZIGJ1ZmZlcjsgICAgICAgICAgICAvKiBzdHJpcCBidWZmZXIsIG9yIGN1cnJlbnQgc3RyaXAgb2YgdmlydHVhbCAqLworICBKRElNRU5TSU9OIHN0cmlwX2hlaWdodDsgICAgICAvKiBidWZmZXIgc2l6ZSBpbiByb3dzICovCisgIC8qIGZvciB0d28tcGFzcyBtb2RlIG9ubHk6ICovCisgIEpESU1FTlNJT04gc3RhcnRpbmdfcm93OyAgICAgIC8qIHJvdyAjIG9mIGZpcnN0IHJvdyBpbiBjdXJyZW50IHN0cmlwICovCisgIEpESU1FTlNJT04gbmV4dF9yb3c7ICAgICAgICAgIC8qIGluZGV4IG9mIG5leHQgcm93IHRvIGZpbGwvZW1wdHkgaW4gc3RyaXAgKi8KK30gbXlfcG9zdF9jb250cm9sbGVyOworCit0eXBlZGVmIG15X3Bvc3RfY29udHJvbGxlciAqbXlfcG9zdF9wdHI7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRih2b2lkKSBwb3N0X3Byb2Nlc3NfMXBhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCk7CisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECitNRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzX3ByZXBhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCk7CitNRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzXzJwYXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpOworI2VuZGlmCisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgcHJvY2Vzc2luZyBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzc19kcG9zdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkKK3sKKyAgbXlfcG9zdF9wdHIgcG9zdCA9IChteV9wb3N0X3B0ciljaW5mby0+cG9zdDsKKworICBzd2l0Y2ggKHBhc3NfbW9kZSkgeworICBjYXNlIEpCVUZfUEFTU19USFJVOgorICAgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKSB7CisgICAgICAvKiBTaW5nbGUtcGFzcyBwcm9jZXNzaW5nIHdpdGggY29sb3IgcXVhbnRpemF0aW9uLiAqLworICAgICAgcG9zdC0+cHViLnBvc3RfcHJvY2Vzc19kYXRhID0gcG9zdF9wcm9jZXNzXzFwYXNzOworICAgICAgLyogV2UgY291bGQgYmUgZG9pbmcgYnVmZmVyZWQtaW1hZ2Ugb3V0cHV0IGJlZm9yZSBzdGFydGluZyBhIDItcGFzcworICAgICAgICogY29sb3IgcXVhbnRpemF0aW9uOyBpbiB0aGF0IGNhc2UsIGppbml0X2RfcG9zdF9jb250cm9sbGVyIGRpZCBub3QKKyAgICAgICAqIGFsbG9jYXRlIGEgc3RyaXAgYnVmZmVyLiAgVXNlIHRoZSB2aXJ0dWFsLWFycmF5IGJ1ZmZlciBhcyB3b3Jrc3BhY2UuCisgICAgICAgKi8KKyAgICAgIGlmIChwb3N0LT5idWZmZXIgPT0gTlVMTCkgeworICAgICAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgcG9zdC0+d2hvbGVfaW1hZ2UsCisgICAgICAgICAgIChKRElNRU5TSU9OKTAsIHBvc3QtPnN0cmlwX2hlaWdodCwgVFJVRSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIEZvciBzaW5nbGUtcGFzcyBwcm9jZXNzaW5nIHdpdGhvdXQgY29sb3IgcXVhbnRpemF0aW9uLAorICAgICAgICogSSBoYXZlIG5vIHdvcmsgdG8gZG87IGp1c3QgY2FsbCB0aGUgdXBzYW1wbGVyIGRpcmVjdGx5LgorICAgICAgICovCisgICAgICBwb3N0LT5wdWIucG9zdF9wcm9jZXNzX2RhdGEgPSBjaW5mby0+dXBzYW1wbGUtPnVwc2FtcGxlOworICAgIH0KKyAgICBicmVhazsKKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKyAgY2FzZSBKQlVGX1NBVkVfQU5EX1BBU1M6CisgICAgLyogRmlyc3QgcGFzcyBvZiAyLXBhc3MgcXVhbnRpemF0aW9uICovCisgICAgaWYgKHBvc3QtPndob2xlX2ltYWdlID09IE5VTEwpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgcG9zdC0+cHViLnBvc3RfcHJvY2Vzc19kYXRhID0gcG9zdF9wcm9jZXNzX3ByZXBhc3M7CisgICAgYnJlYWs7CisgIGNhc2UgSkJVRl9DUkFOS19ERVNUOgorICAgIC8qIFNlY29uZCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24gKi8KKyAgICBpZiAocG9zdC0+d2hvbGVfaW1hZ2UgPT0gTlVMTCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKKyAgICBwb3N0LT5wdWIucG9zdF9wcm9jZXNzX2RhdGEgPSBwb3N0X3Byb2Nlc3NfMnBhc3M7CisgICAgYnJlYWs7CisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIGJyZWFrOworICB9CisgIHBvc3QtPnN0YXJ0aW5nX3JvdyA9IHBvc3QtPm5leHRfcm93ID0gMDsKK30KKworCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIG9uZS1wYXNzIChzdHJpcCBidWZmZXIpIGNhc2UuCisgKiBUaGlzIGlzIHVzZWQgZm9yIGNvbG9yIHByZWNpc2lvbiByZWR1Y3Rpb24gYXMgd2VsbCBhcyBvbmUtcGFzcyBxdWFudGl6YXRpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwb3N0X3Byb2Nlc3NfMXBhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkKK3sKKyAgbXlfcG9zdF9wdHIgcG9zdCA9IChteV9wb3N0X3B0ciljaW5mby0+cG9zdDsKKyAgSkRJTUVOU0lPTiBudW1fcm93cywgbWF4X3Jvd3M7CisKKyAgLyogRmlsbCB0aGUgYnVmZmVyLCBidXQgbm90IG1vcmUgdGhhbiB3aGF0IHdlIGNhbiBkdW1wIG91dCBpbiBvbmUgZ28uICovCisgIC8qIE5vdGUgd2UgcmVseSBvbiB0aGUgdXBzYW1wbGVyIHRvIGRldGVjdCBib3R0b20gb2YgaW1hZ2UuICovCisgIG1heF9yb3dzID0gb3V0X3Jvd3NfYXZhaWwgLSAqb3V0X3Jvd19jdHI7CisgIGlmIChtYXhfcm93cyA+IHBvc3QtPnN0cmlwX2hlaWdodCkKKyAgICBtYXhfcm93cyA9IHBvc3QtPnN0cmlwX2hlaWdodDsKKyAgbnVtX3Jvd3MgPSAwOworICAoKmNpbmZvLT51cHNhbXBsZS0+dXBzYW1wbGUpIChjaW5mbywgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9yb3dfZ3JvdXBzX2F2YWlsLCBwb3N0LT5idWZmZXIsICZudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Jvd3MpOworICAvKiBRdWFudGl6ZSBhbmQgZW1pdCBkYXRhLiAqLworICAoKmNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplKSAoY2luZm8sIHBvc3QtPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW51bV9yb3dzKTsKKyAgKm91dF9yb3dfY3RyICs9IG51bV9yb3dzOworfQorCisKKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBmaXJzdCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwb3N0X3Byb2Nlc3NfcHJlcGFzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLCBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQoreworICBteV9wb3N0X3B0ciBwb3N0ID0gKG15X3Bvc3RfcHRyKWNpbmZvLT5wb3N0OworICBKRElNRU5TSU9OIG9sZF9uZXh0X3JvdywgbnVtX3Jvd3M7CisKKyAgLyogUmVwb3NpdGlvbiB2aXJ0dWFsIGJ1ZmZlciBpZiBhdCBzdGFydCBvZiBzdHJpcC4gKi8KKyAgaWYgKHBvc3QtPm5leHRfcm93ID09IDApIHsKKyAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAorICAgICAgICAgcG9zdC0+c3RhcnRpbmdfcm93LCBwb3N0LT5zdHJpcF9oZWlnaHQsIFRSVUUpOworICB9CisKKyAgLyogVXBzYW1wbGUgc29tZSBkYXRhICh1cCB0byBhIHN0cmlwIGhlaWdodCdzIHdvcnRoKS4gKi8KKyAgb2xkX25leHRfcm93ID0gcG9zdC0+bmV4dF9yb3c7CisgICgqY2luZm8tPnVwc2FtcGxlLT51cHNhbXBsZSkgKGNpbmZvLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Jvd19ncm91cHNfYXZhaWwsIHBvc3QtPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvc3QtPm5leHRfcm93LCBwb3N0LT5zdHJpcF9oZWlnaHQpOworCisgIC8qIEFsbG93IHF1YW50aXplciB0byBzY2FuIG5ldyBkYXRhLiAgTm8gZGF0YSBpcyBlbWl0dGVkLCAqLworICAvKiBidXQgd2UgYWR2YW5jZSBvdXRfcm93X2N0ciBzbyBvdXRlciBsb29wIGNhbiB0ZWxsIHdoZW4gd2UncmUgZG9uZS4gKi8KKyAgaWYgKHBvc3QtPm5leHRfcm93ID4gb2xkX25leHRfcm93KSB7CisgICAgbnVtX3Jvd3MgPSBwb3N0LT5uZXh0X3JvdyAtIG9sZF9uZXh0X3JvdzsKKyAgICAoKmNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplKSAoY2luZm8sIHBvc3QtPmJ1ZmZlciArIG9sZF9uZXh0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpTQU1QQVJSQVkpTlVMTCwgKGludCludW1fcm93cyk7CisgICAgKm91dF9yb3dfY3RyICs9IG51bV9yb3dzOworICB9CisKKyAgLyogQWR2YW5jZSBpZiB3ZSBmaWxsZWQgdGhlIHN0cmlwLiAqLworICBpZiAocG9zdC0+bmV4dF9yb3cgPj0gcG9zdC0+c3RyaXBfaGVpZ2h0KSB7CisgICAgcG9zdC0+c3RhcnRpbmdfcm93ICs9IHBvc3QtPnN0cmlwX2hlaWdodDsKKyAgICBwb3N0LT5uZXh0X3JvdyA9IDA7CisgIH0KK30KKworCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIHNlY29uZCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwb3N0X3Byb2Nlc3NfMnBhc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkKK3sKKyAgbXlfcG9zdF9wdHIgcG9zdCA9IChteV9wb3N0X3B0ciljaW5mby0+cG9zdDsKKyAgSkRJTUVOU0lPTiBudW1fcm93cywgbWF4X3Jvd3M7CisKKyAgLyogUmVwb3NpdGlvbiB2aXJ0dWFsIGJ1ZmZlciBpZiBhdCBzdGFydCBvZiBzdHJpcC4gKi8KKyAgaWYgKHBvc3QtPm5leHRfcm93ID09IDApIHsKKyAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAorICAgICAgICAgcG9zdC0+c3RhcnRpbmdfcm93LCBwb3N0LT5zdHJpcF9oZWlnaHQsIEZBTFNFKTsKKyAgfQorCisgIC8qIERldGVybWluZSBudW1iZXIgb2Ygcm93cyB0byBlbWl0LiAqLworICBudW1fcm93cyA9IHBvc3QtPnN0cmlwX2hlaWdodCAtIHBvc3QtPm5leHRfcm93OyAvKiBhdmFpbGFibGUgaW4gc3RyaXAgKi8KKyAgbWF4X3Jvd3MgPSBvdXRfcm93c19hdmFpbCAtICpvdXRfcm93X2N0cjsgLyogYXZhaWxhYmxlIGluIG91dHB1dCBhcmVhICovCisgIGlmIChudW1fcm93cyA+IG1heF9yb3dzKQorICAgIG51bV9yb3dzID0gbWF4X3Jvd3M7CisgIC8qIFdlIGhhdmUgdG8gY2hlY2sgYm90dG9tIG9mIGltYWdlIGhlcmUsIGNhbid0IGRlcGVuZCBvbiB1cHNhbXBsZXIuICovCisgIG1heF9yb3dzID0gY2luZm8tPm91dHB1dF9oZWlnaHQgLSBwb3N0LT5zdGFydGluZ19yb3c7CisgIGlmIChudW1fcm93cyA+IG1heF9yb3dzKQorICAgIG51bV9yb3dzID0gbWF4X3Jvd3M7CisKKyAgLyogUXVhbnRpemUgYW5kIGVtaXQgZGF0YS4gKi8KKyAgKCpjaW5mby0+Y3F1YW50aXplLT5jb2xvcl9xdWFudGl6ZSkgKGNpbmZvLCBwb3N0LT5idWZmZXIgKyBwb3N0LT5uZXh0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW51bV9yb3dzKTsKKyAgKm91dF9yb3dfY3RyICs9IG51bV9yb3dzOworCisgIC8qIEFkdmFuY2UgaWYgd2UgZmlsbGVkIHRoZSBzdHJpcC4gKi8KKyAgcG9zdC0+bmV4dF9yb3cgKz0gbnVtX3Jvd3M7CisgIGlmIChwb3N0LT5uZXh0X3JvdyA+PSBwb3N0LT5zdHJpcF9oZWlnaHQpIHsKKyAgICBwb3N0LT5zdGFydGluZ19yb3cgKz0gcG9zdC0+c3RyaXBfaGVpZ2h0OworICAgIHBvc3QtPm5leHRfcm93ID0gMDsKKyAgfQorfQorCisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlci4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2RfcG9zdF9jb250cm9sbGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikKK3sKKyAgbXlfcG9zdF9wdHIgcG9zdDsKKworICBwb3N0ID0gKG15X3Bvc3RfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG15X3Bvc3RfY29udHJvbGxlcikpOworICBjaW5mby0+cG9zdCA9IChzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciAqKXBvc3Q7CisgIHBvc3QtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19kcG9zdDsKKyAgcG9zdC0+d2hvbGVfaW1hZ2UgPSBOVUxMOyAgICAgLyogZmxhZyBmb3Igbm8gdmlydHVhbCBhcnJheXMgKi8KKyAgcG9zdC0+YnVmZmVyID0gTlVMTDsgICAgICAgICAgLyogZmxhZyBmb3Igbm8gc3RyaXAgYnVmZmVyICovCisKKyAgLyogQ3JlYXRlIHRoZSBxdWFudGl6YXRpb24gYnVmZmVyLCBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpIHsKKyAgICAvKiBUaGUgYnVmZmVyIHN0cmlwIGhlaWdodCBpcyBtYXhfdl9zYW1wX2ZhY3Rvciwgd2hpY2ggaXMgdHlwaWNhbGx5CisgICAgICogYW4gZWZmaWNpZW50IG51bWJlciBvZiByb3dzIGZvciB1cHNhbXBsaW5nIHRvIHJldHVybi4KKyAgICAgKiAoSW4gdGhlIHByZXNlbmNlIG9mIG91dHB1dCByZXNjYWxpbmcsIHdlIG1pZ2h0IHdhbnQgdG8gYmUgc21hcnRlcj8pCisgICAgICovCisgICAgcG9zdC0+c3RyaXBfaGVpZ2h0ID0gKEpESU1FTlNJT04pY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgIGlmIChuZWVkX2Z1bGxfYnVmZmVyKSB7CisgICAgICAvKiBUd28tcGFzcyBjb2xvciBxdWFudGl6YXRpb246IG5lZWQgZnVsbC1pbWFnZSBzdG9yYWdlLiAqLworICAgICAgLyogV2Ugcm91bmQgdXAgdGhlIG51bWJlciBvZiByb3dzIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHN0cmlwIGhlaWdodC4gKi8KKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKyAgICAgIHBvc3QtPndob2xlX2ltYWdlID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cywKKyAgICAgICAgIChKRElNRU5TSU9OKWpyb3VuZF91cCgobG9uZyljaW5mby0+b3V0cHV0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylwb3N0LT5zdHJpcF9oZWlnaHQpLAorICAgICAgICAgcG9zdC0+c3RyaXBfaGVpZ2h0KTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisgICAgfSBlbHNlIHsKKyAgICAgIC8qIE9uZS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbjoganVzdCBtYWtlIGEgc3RyaXAgYnVmZmVyLiAqLworICAgICAgcG9zdC0+YnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMsCisgICAgICAgICBwb3N0LT5zdHJpcF9oZWlnaHQpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRzYW1wbGUuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkc2FtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlZTlhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZHNhbXBsZS5jCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogamRzYW1wbGUuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1LTIwMTYsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEdvb2dsZSwgSW5jLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHVwc2FtcGxpbmcgcm91dGluZXMuCisgKgorICogVXBzYW1wbGluZyBpbnB1dCBkYXRhIGlzIGNvdW50ZWQgaW4gInJvdyBncm91cHMiLiAgQSByb3cgZ3JvdXAKKyAqIGlzIGRlZmluZWQgdG8gYmUgKHZfc2FtcF9mYWN0b3IgKiBEQ1Rfc2NhbGVkX3NpemUgLyBtaW5fRENUX3NjYWxlZF9zaXplKQorICogc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQuICBVcHNhbXBsaW5nIHdpbGwgbm9ybWFsbHkgcHJvZHVjZQorICogbWF4X3Zfc2FtcF9mYWN0b3IgcGl4ZWwgcm93cyBmcm9tIGVhY2ggcm93IGdyb3VwIChidXQgdGhpcyBjb3VsZCB2YXJ5CisgKiBpZiB0aGUgdXBzYW1wbGVyIGlzIGFwcGx5aW5nIGEgc2NhbGUgZmFjdG9yIG9mIGl0cyBvd24pLgorICoKKyAqIEFuIGV4Y2VsbGVudCByZWZlcmVuY2UgZm9yIGltYWdlIHJlc2FtcGxpbmcgaXMKKyAqICAgRGlnaXRhbCBJbWFnZSBXYXJwaW5nLCBHZW9yZ2UgV29sYmVyZywgMTk5MC4KKyAqICAgUHViLiBieSBJRUVFIENvbXB1dGVyIFNvY2lldHkgUHJlc3MsIExvcyBBbGFtaXRvcywgQ0EuIElTQk4gMC04MTg2LTg5NDQtNy4KKyAqLworCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqZHNhbXBsZS5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKKworCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiB1cHNhbXBsaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworCisgIC8qIE1hcmsgdGhlIGNvbnZlcnNpb24gYnVmZmVyIGVtcHR5ICovCisgIHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgIC8qIEluaXRpYWxpemUgdG90YWwtaGVpZ2h0IGNvdW50ZXIgZm9yIGRldGVjdGluZyBib3R0b20gb2YgaW1hZ2UgKi8KKyAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gPSBjaW5mby0+b3V0cHV0X2hlaWdodDsKK30KKworCisvKgorICogQ29udHJvbCByb3V0aW5lIHRvIGRvIHVwc2FtcGxpbmcgKGFuZCBjb2xvciBjb252ZXJzaW9uKS4KKyAqCisgKiBJbiB0aGlzIHZlcnNpb24gd2UgdXBzYW1wbGUgZWFjaCBjb21wb25lbnQgaW5kZXBlbmRlbnRseS4KKyAqIFdlIHVwc2FtcGxlIG9uZSByb3cgZ3JvdXAgaW50byB0aGUgY29udmVyc2lvbiBidWZmZXIsIHRoZW4gYXBwbHkKKyAqIGNvbG9yIGNvbnZlcnNpb24gYSByb3cgYXQgYSB0aW1lLgorICovCisKK01FVEhPRERFRih2b2lkKQorc2VwX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpESU1FTlNJT04gbnVtX3Jvd3M7CisKKyAgLyogRmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIsIGlmIGl0J3MgZW1wdHkgKi8KKyAgaWYgKHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgPj0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgLyogSW52b2tlIHBlci1jb21wb25lbnQgdXBzYW1wbGUgbWV0aG9kLiAgTm90aWNlIHdlIHBhc3MgYSBQT0lOVEVSCisgICAgICAgKiB0byBjb2xvcl9idWZbY2ldLCBzbyB0aGF0IGZ1bGxzaXplX3Vwc2FtcGxlIGNhbiBjaGFuZ2UgaXQuCisgICAgICAgKi8KKyAgICAgICgqdXBzYW1wbGUtPm1ldGhvZHNbY2ldKSAoY2luZm8sIGNvbXBwdHIsCisgICAgICAgIGlucHV0X2J1ZltjaV0gKyAoKmluX3Jvd19ncm91cF9jdHIgKiB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSksCisgICAgICAgIHVwc2FtcGxlLT5jb2xvcl9idWYgKyBjaSk7CisgICAgfQorICAgIHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgPSAwOworICB9CisKKyAgLyogQ29sb3ItY29udmVydCBhbmQgZW1pdCByb3dzICovCisKKyAgLyogSG93IG1hbnkgd2UgaGF2ZSBpbiB0aGUgYnVmZmVyOiAqLworICBudW1fcm93cyA9IChKRElNRU5TSU9OKShjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgLSB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0KTsKKyAgLyogTm90IG1vcmUgdGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGVuZCBvZiB0aGUgaW1hZ2UuICBOZWVkIHRoaXMgdGVzdAorICAgKiBpbiBjYXNlIHRoZSBpbWFnZSBoZWlnaHQgaXMgbm90IGEgbXVsdGlwbGUgb2YgbWF4X3Zfc2FtcF9mYWN0b3I6CisgICAqLworICBpZiAobnVtX3Jvd3MgPiB1cHNhbXBsZS0+cm93c190b19nbykKKyAgICBudW1fcm93cyA9IHVwc2FtcGxlLT5yb3dzX3RvX2dvOworICAvKiBBbmQgbm90IG1vcmUgdGhhbiB3aGF0IHRoZSBjbGllbnQgY2FuIGFjY2VwdDogKi8KKyAgb3V0X3Jvd3NfYXZhaWwgLT0gKm91dF9yb3dfY3RyOworICBpZiAobnVtX3Jvd3MgPiBvdXRfcm93c19hdmFpbCkKKyAgICBudW1fcm93cyA9IG91dF9yb3dzX2F2YWlsOworCisgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIHVwc2FtcGxlLT5jb2xvcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pdXBzYW1wbGUtPm5leHRfcm93X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyLCAoaW50KW51bV9yb3dzKTsKKworICAvKiBBZGp1c3QgY291bnRzICovCisgICpvdXRfcm93X2N0ciArPSBudW1fcm93czsKKyAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gLT0gbnVtX3Jvd3M7CisgIHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgKz0gbnVtX3Jvd3M7CisgIC8qIFdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0aWVkLCBkZWNsYXJlIHRoaXMgaW5wdXQgcm93IGdyb3VwIGNvbnN1bWVkICovCisgIGlmICh1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ID49IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikKKyAgICAoKmluX3Jvd19ncm91cF9jdHIpKys7Cit9CisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgcm91dGluZXMgaW52b2tlZCBieSBzZXBfdXBzYW1wbGUgdG8gdXBzYW1wbGUgcGl4ZWwgdmFsdWVzCisgKiBvZiBhIHNpbmdsZSBjb21wb25lbnQuICBPbmUgcm93IGdyb3VwIGlzIHByb2Nlc3NlZCBwZXIgY2FsbC4KKyAqLworCisKKy8qCisgKiBGb3IgZnVsbC1zaXplIGNvbXBvbmVudHMsIHdlIGp1c3QgbWFrZSBjb2xvcl9idWZbY2ldIHBvaW50IGF0IHRoZQorICogaW5wdXQgYnVmZmVyLCBhbmQgdGh1cyBhdm9pZCBjb3B5aW5nIGFueSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMKKyAqIHNhZmUgb25seSBiZWNhdXNlIHNlcF91cHNhbXBsZSBkb2Vzbid0IGRlY2xhcmUgdGhlIGlucHV0IHJvdyBncm91cAorICogImNvbnN1bWVkIiB1bnRpbCB3ZSBhcmUgZG9uZSBjb2xvciBjb252ZXJ0aW5nIGFuZCBlbWl0dGluZyBpdC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2Z1bGxzaXplX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAgKm91dHB1dF9kYXRhX3B0ciA9IGlucHV0X2RhdGE7Cit9CisKKworLyoKKyAqIFRoaXMgaXMgYSBuby1vcCB2ZXJzaW9uIHVzZWQgZm9yICJ1bmludGVyZXN0aW5nIiBjb21wb25lbnRzLgorICogVGhlc2UgY29tcG9uZW50cyB3aWxsIG5vdCBiZSByZWZlcmVuY2VkIGJ5IGNvbG9yIGNvbnZlcnNpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitub29wX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICAqb3V0cHV0X2RhdGFfcHRyID0gTlVMTDsgICAgICAvKiBzYWZldHkgY2hlY2sgKi8KK30KKworCisvKgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgYW55IGludGVncmFsIHNhbXBsaW5nIHJhdGlvcy4KKyAqIFRoaXMgaXMgbm90IHVzZWQgZm9yIHR5cGljYWwgSlBFRyBmaWxlcywgc28gaXQgbmVlZCBub3QgYmUgZmFzdC4KKyAqIE5vciwgZm9yIHRoYXQgbWF0dGVyLCBpcyBpdCBwYXJ0aWN1bGFybHkgYWNjdXJhdGU6IHRoZSBhbGdvcml0aG0gaXMKKyAqIHNpbXBsZSByZXBsaWNhdGlvbiBvZiB0aGUgaW5wdXQgcGl4ZWwgb250byB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQKKyAqIHBpeGVscy4gIFRoZSBoaS1mYWx1dGluIHNhbXBsaW5nIGxpdGVyYXR1cmUgcmVmZXJzIHRvIHRoaXMgYXMgYQorICogImJveCBmaWx0ZXIiLiAgQSBib3ggZmlsdGVyIHRlbmRzIHRvIGludHJvZHVjZSB2aXNpYmxlIGFydGlmYWN0cywKKyAqIHNvIGlmIHlvdSBhcmUgYWN0dWFsbHkgZ29pbmcgdG8gdXNlIDM6MSBvciA0OjEgc2FtcGxpbmcgcmF0aW9zCisgKiB5b3Ugd291bGQgYmUgd2VsbCBhZHZpc2VkIHRvIGltcHJvdmUgdGhpcyBjb2RlLgorICovCisKK01FVEhPRERFRih2b2lkKQoraW50X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpY2luZm8tPnVwc2FtcGxlOworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSBpbnZhbHVlOworICByZWdpc3RlciBpbnQgaDsKKyAgSlNBTVBST1cgb3V0ZW5kOworICBpbnQgaF9leHBhbmQsIHZfZXhwYW5kOworICBpbnQgaW5yb3csIG91dHJvdzsKKworICBoX2V4cGFuZCA9IHVwc2FtcGxlLT5oX2V4cGFuZFtjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdOworICB2X2V4cGFuZCA9IHVwc2FtcGxlLT52X2V4cGFuZFtjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdOworCisgIGlucm93ID0gb3V0cm93ID0gMDsKKyAgd2hpbGUgKG91dHJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgIC8qIEdlbmVyYXRlIG9uZSBvdXRwdXQgcm93IHdpdGggcHJvcGVyIGhvcml6b250YWwgZXhwYW5zaW9uICovCisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIG91dGVuZCA9IG91dHB0ciArIGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgICAgd2hpbGUgKG91dHB0ciA8IG91dGVuZCkgeworICAgICAgaW52YWx1ZSA9ICppbnB0cisrOyAgICAgICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICBmb3IgKGggPSBoX2V4cGFuZDsgaCA+IDA7IGgtLSkgeworICAgICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOworICAgICAgfQorICAgIH0KKyAgICAvKiBHZW5lcmF0ZSBhbnkgYWRkaXRpb25hbCBvdXRwdXQgcm93cyBieSBkdXBsaWNhdGluZyB0aGUgZmlyc3Qgb25lICovCisgICAgaWYgKHZfZXhwYW5kID4gMSkgeworICAgICAgamNvcHlfc2FtcGxlX3Jvd3Mob3V0cHV0X2RhdGEsIG91dHJvdywgb3V0cHV0X2RhdGEsIG91dHJvdyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICB2X2V4cGFuZCAtIDEsIGNpbmZvLT5vdXRwdXRfd2lkdGgpOworICAgIH0KKyAgICBpbnJvdysrOworICAgIG91dHJvdyArPSB2X2V4cGFuZDsKKyAgfQorfQorCisKKy8qCisgKiBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorICogSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitoMnYxX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSBpbnZhbHVlOworICBKU0FNUFJPVyBvdXRlbmQ7CisgIGludCBpbnJvdzsKKworICBmb3IgKGlucm93ID0gMDsgaW5yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7IGlucm93KyspIHsKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRlbmQgPSBvdXRwdHIgKyBjaW5mby0+b3V0cHV0X3dpZHRoOworICAgIHdoaWxlIChvdXRwdHIgPCBvdXRlbmQpIHsKKyAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsgICAgICAgLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsKKyAgICAgICpvdXRwdHIrKyA9IGludmFsdWU7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCisgKiBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBKU0FNUExFIGludmFsdWU7CisgIEpTQU1QUk9XIG91dGVuZDsKKyAgaW50IGlucm93LCBvdXRyb3c7CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIG91dGVuZCA9IG91dHB0ciArIGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgICAgd2hpbGUgKG91dHB0ciA8IG91dGVuZCkgeworICAgICAgaW52YWx1ZSA9ICppbnB0cisrOyAgICAgICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOworICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsKKyAgICB9CisgICAgamNvcHlfc2FtcGxlX3Jvd3Mob3V0cHV0X2RhdGEsIG91dHJvdywgb3V0cHV0X2RhdGEsIG91dHJvdyArIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgaW5yb3crKzsKKyAgICBvdXRyb3cgKz0gMjsKKyAgfQorfQorCisKKy8qCisgKiBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKyAqCisgKiBUaGUgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBwaXhlbCBjZW50ZXJzLAorICogYWxzbyBrbm93biBhcyBhICJ0cmlhbmdsZSBmaWx0ZXIiLiAgVGhpcyBpcyBhIGdvb2QgY29tcHJvbWlzZSBiZXR3ZWVuCisgKiBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKyAqIG9mIHRoZSB3YXkgYmV0d2VlbiBpbnB1dCBwaXhlbCBjZW50ZXJzLgorICoKKyAqIEEgbm90ZSBhYm91dCB0aGUgImJpYXMiIGNhbGN1bGF0aW9uczogd2hlbiByb3VuZGluZyBmcmFjdGlvbmFsIHZhbHVlcyB0bworICogaW50ZWdlciwgd2UgZG8gbm90IHdhbnQgdG8gYWx3YXlzIHJvdW5kIDAuNSB1cCB0byB0aGUgbmV4dCBpbnRlZ2VyLgorICogSWYgd2UgZGlkIHRoYXQsIHdlJ2QgaW50cm9kdWNlIGEgbm90aWNlYWJsZSBiaWFzIHRvd2FyZHMgbGFyZ2VyIHZhbHVlcy4KKyAqIEluc3RlYWQsIHRoaXMgY29kZSBpcyBhcnJhbmdlZCBzbyB0aGF0IDAuNSB3aWxsIGJlIHJvdW5kZWQgdXAgb3IgZG93biBhdAorICogYWx0ZXJuYXRlIHBpeGVsIGxvY2F0aW9ucyAoYSBzaW1wbGUgb3JkZXJlZCBkaXRoZXIgcGF0dGVybikuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitoMnYxX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgaW50IGludmFsdWU7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sY3RyOworICBpbnQgaW5yb3c7CisKKyAgZm9yIChpbnJvdyA9IDA7IGlucm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOyBpbnJvdysrKSB7CisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtpbnJvd107CisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW4gKi8KKyAgICBpbnZhbHVlID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgKm91dHB0cisrID0gKEpTQU1QTEUpaW52YWx1ZTsKKyAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkoKGludmFsdWUgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIpICsgMikgPj4gMik7CisKKyAgICBmb3IgKGNvbGN0ciA9IGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoIC0gMjsgY29sY3RyID4gMDsgY29sY3RyLS0pIHsKKyAgICAgIC8qIEdlbmVyYWwgY2FzZTogMy80ICogbmVhcmVyIHBpeGVsICsgMS80ICogZnVydGhlciBwaXhlbCAqLworICAgICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKyspICogMzsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSgoaW52YWx1ZSArIEdFVEpTQU1QTEUoaW5wdHJbLTJdKSArIDEpID4+IDIpOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKChpbnZhbHVlICsgR0VUSlNBTVBMRSgqaW5wdHIpICsgMikgPj4gMik7CisgICAgfQorCisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBsYXN0IGNvbHVtbiAqLworICAgIGludmFsdWUgPSBHRVRKU0FNUExFKCppbnB0cik7CisgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKChpbnZhbHVlICogMyArIEdFVEpTQU1QTEUoaW5wdHJbLTFdKSArIDEpID4+IDIpOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKWludmFsdWU7CisgIH0KK30KKworCisvKgorICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgMToxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCAoNDo0OjAgc3Vic2FtcGxpbmcpLgorICoKKyAqIFRoaXMgaXMgYSBsZXNzIGNvbW1vbiBjYXNlLCBidXQgaXQgY2FuIGJlIGVuY291bnRlcmVkIHdoZW4gbG9zc2xlc3NseQorICogcm90YXRpbmcvdHJhbnNwb3NpbmcgYSBKUEVHIGZpbGUgdGhhdCB1c2VzIDQ6MjoyIGNocm9tYSBzdWJzYW1wbGluZy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gxdjJfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisgIGludCB0aGlzY29sc3VtOworI2Vsc2UKKyAgSkxPTkcgdGhpc2NvbHN1bTsKKyNlbmRpZgorICBKRElNRU5TSU9OIGNvbGN0cjsKKyAgaW50IGlucm93LCBvdXRyb3csIHY7CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgZm9yICh2ID0gMDsgdiA8IDI7IHYrKykgeworICAgICAgLyogaW5wdHIwIHBvaW50cyB0byBuZWFyZXN0IGlucHV0IHJvdywgaW5wdHIxIHBvaW50cyB0byBuZXh0IG5lYXJlc3QgKi8KKyAgICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgICAgaWYgKHYgPT0gMCkgICAgICAgICAgICAgICAvKiBuZXh0IG5lYXJlc3QgaXMgcm93IGFib3ZlICovCisgICAgICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3cgLSAxXTsKKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBuZWFyZXN0IGlzIHJvdyBiZWxvdyAqLworICAgICAgICBpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93ICsgMV07CisgICAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3crK107CisKKyAgICAgIGZvciAoY29sY3RyID0gMDsgY29sY3RyIDwgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGg7IGNvbGN0cisrKSB7CisgICAgICAgIHRoaXNjb2xzdW0gPSBHRVRKU0FNUExFKCppbnB0cjArKykgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIxKyspOworICAgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkoKHRoaXNjb2xzdW0gKyAxKSA+PiAyKTsKKyAgICAgIH0KKyAgICB9CisgICAgaW5yb3crKzsKKyAgfQorfQorCisKKy8qCisgKiBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKyAqIEFnYWluIGEgdHJpYW5nbGUgZmlsdGVyOyBzZWUgY29tbWVudHMgZm9yIGgydjEgY2FzZSwgYWJvdmUuCisgKgorICogSXQgaXMgT0sgZm9yIHVzIHRvIHJlZmVyZW5jZSB0aGUgYWRqYWNlbnQgaW5wdXQgcm93cyBiZWNhdXNlIHdlIGRlbWFuZGVkCisgKiBjb250ZXh0IGZyb20gdGhlIG1haW4gYnVmZmVyIGNvbnRyb2xsZXIgKHNlZSBpbml0aWFsaXphdGlvbiBjb2RlKS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisgIHJlZ2lzdGVyIGludCB0aGlzY29sc3VtLCBsYXN0Y29sc3VtLCBuZXh0Y29sc3VtOworI2Vsc2UKKyAgcmVnaXN0ZXIgSkxPTkcgdGhpc2NvbHN1bSwgbGFzdGNvbHN1bSwgbmV4dGNvbHN1bTsKKyNlbmRpZgorICByZWdpc3RlciBKRElNRU5TSU9OIGNvbGN0cjsKKyAgaW50IGlucm93LCBvdXRyb3csIHY7CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgZm9yICh2ID0gMDsgdiA8IDI7IHYrKykgeworICAgICAgLyogaW5wdHIwIHBvaW50cyB0byBuZWFyZXN0IGlucHV0IHJvdywgaW5wdHIxIHBvaW50cyB0byBuZXh0IG5lYXJlc3QgKi8KKyAgICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgICAgaWYgKHYgPT0gMCkgICAgICAgICAgICAgICAvKiBuZXh0IG5lYXJlc3QgaXMgcm93IGFib3ZlICovCisgICAgICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3cgLSAxXTsKKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBuZWFyZXN0IGlzIHJvdyBiZWxvdyAqLworICAgICAgICBpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93ICsgMV07CisgICAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3crK107CisKKyAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uICovCisgICAgICB0aGlzY29sc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspICogMyArIEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICAgIG5leHRjb2xzdW0gPSBHRVRKU0FNUExFKCppbnB0cjArKykgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIxKyspOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKCh0aGlzY29sc3VtICogNCArIDgpID4+IDQpOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKCh0aGlzY29sc3VtICogMyArIG5leHRjb2xzdW0gKyA3KSA+PiA0KTsKKyAgICAgIGxhc3Rjb2xzdW0gPSB0aGlzY29sc3VtOyAgdGhpc2NvbHN1bSA9IG5leHRjb2xzdW07CisKKyAgICAgIGZvciAoY29sY3RyID0gY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworICAgICAgICAvKiBHZW5lcmFsIGNhc2U6IDMvNCAqIG5lYXJlciBwaXhlbCArIDEvNCAqIGZ1cnRoZXIgcGl4ZWwgaW4gZWFjaCAqLworICAgICAgICAvKiBkaW1lbnNpb24sIHRodXMgOS8xNiwgMy8xNiwgMy8xNiwgMS8xNiBvdmVyYWxsICovCisgICAgICAgIG5leHRjb2xzdW0gPSBHRVRKU0FNUExFKCppbnB0cjArKykgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIxKyspOworICAgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkoKHRoaXNjb2xzdW0gKiAzICsgbGFzdGNvbHN1bSArIDgpID4+IDQpOworICAgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkoKHRoaXNjb2xzdW0gKiAzICsgbmV4dGNvbHN1bSArIDcpID4+IDQpOworICAgICAgICBsYXN0Y29sc3VtID0gdGhpc2NvbHN1bTsgIHRoaXNjb2xzdW0gPSBuZXh0Y29sc3VtOworICAgICAgfQorCisgICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGxhc3QgY29sdW1uICovCisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkoKHRoaXNjb2xzdW0gKiAzICsgbGFzdGNvbHN1bSArIDgpID4+IDQpOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKCh0aGlzY29sc3VtICogNCArIDcpID4+IDQpOworICAgIH0KKyAgICBpbnJvdysrOworICB9Cit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB1cHNhbXBsaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfdXBzYW1wbGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZTsKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBib29sZWFuIG5lZWRfYnVmZmVyLCBkb19mYW5jeTsKKyAgaW50IGhfaW5fZ3JvdXAsIHZfaW5fZ3JvdXAsIGhfb3V0X2dyb3VwLCB2X291dF9ncm91cDsKKworICBpZiAoIWNpbmZvLT5tYXN0ZXItPmppbml0X3Vwc2FtcGxlcl9ub19hbGxvYykgeworICAgIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXlfdXBzYW1wbGVyKSk7CisgICAgY2luZm8tPnVwc2FtcGxlID0gKHN0cnVjdCBqcGVnX3Vwc2FtcGxlciAqKXVwc2FtcGxlOworICAgIHVwc2FtcGxlLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfdXBzYW1wbGU7CisgICAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IHNlcF91cHNhbXBsZTsKKyAgICB1cHNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gRkFMU0U7IC8qIHVudGlsIHdlIGZpbmQgb3V0IGRpZmZlcmVudGx5ICovCisgIH0gZWxzZQorICAgIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0ciljaW5mby0+dXBzYW1wbGU7CisKKyAgaWYgKGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nKSAgLyogdGhpcyBpc24ndCBzdXBwb3J0ZWQgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NDSVI2MDFfTk9USU1QTCk7CisKKyAgLyogamRtYWluY3QuYyBkb2Vzbid0IHN1cHBvcnQgY29udGV4dCByb3dzIHdoZW4gbWluX0RDVF9zY2FsZWRfc2l6ZSA9IDEsCisgICAqIHNvIGRvbid0IGFzayBmb3IgaXQuCisgICAqLworICBkb19mYW5jeSA9IGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nICYmIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSA+IDE7CisKKyAgLyogVmVyaWZ5IHdlIGNhbiBoYW5kbGUgdGhlIHNhbXBsaW5nIGZhY3RvcnMsIHNlbGVjdCBwZXItY29tcG9uZW50IG1ldGhvZHMsCisgICAqIGFuZCBjcmVhdGUgc3RvcmFnZSBhcyBuZWVkZWQuCisgICAqLworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIENvbXB1dGUgc2l6ZSBvZiBhbiAiaW5wdXQgZ3JvdXAiIGFmdGVyIElEQ1Qgc2NhbGluZy4gIFRoaXMgbWFueSBzYW1wbGVzCisgICAgICogYXJlIHRvIGJlIGNvbnZlcnRlZCB0byBtYXhfaF9zYW1wX2ZhY3RvciAqIG1heF92X3NhbXBfZmFjdG9yIHBpeGVscy4KKyAgICAgKi8KKyAgICBoX2luX2dyb3VwID0gKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCisgICAgICAgICAgICAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgICB2X2luX2dyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCisgICAgICAgICAgICAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgICBoX291dF9ncm91cCA9IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcjsKKyAgICB2X291dF9ncm91cCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgICB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSA9IHZfaW5fZ3JvdXA7IC8qIHNhdmUgZm9yIHVzZSBsYXRlciAqLworICAgIG5lZWRfYnVmZmVyID0gVFJVRTsKKyAgICBpZiAoIWNvbXBwdHItPmNvbXBvbmVudF9uZWVkZWQpIHsKKyAgICAgIC8qIERvbid0IGJvdGhlciB0byB1cHNhbXBsZSBhbiB1bmludGVyZXN0aW5nIGNvbXBvbmVudC4gKi8KKyAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IG5vb3BfdXBzYW1wbGU7CisgICAgICBuZWVkX2J1ZmZlciA9IEZBTFNFOworICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCA9PSBoX291dF9ncm91cCAmJiB2X2luX2dyb3VwID09IHZfb3V0X2dyb3VwKSB7CisgICAgICAvKiBGdWxsc2l6ZSBjb21wb25lbnRzIGNhbiBiZSBwcm9jZXNzZWQgd2l0aG91dCBhbnkgd29yay4gKi8KKyAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX3Vwc2FtcGxlOworICAgICAgbmVlZF9idWZmZXIgPSBGQUxTRTsKKyAgICB9IGVsc2UgaWYgKGhfaW5fZ3JvdXAgKiAyID09IGhfb3V0X2dyb3VwICYmIHZfaW5fZ3JvdXAgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICAgIC8qIFNwZWNpYWwgY2FzZXMgZm9yIDJoMXYgdXBzYW1wbGluZyAqLworICAgICAgaWYgKGRvX2ZhbmN5ICYmIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID4gMikgeworICAgICAgICBpZiAoanNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUoKSkKKyAgICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV9mYW5jeV91cHNhbXBsZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSgpKQorICAgICAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjFfdXBzYW1wbGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX3Vwc2FtcGxlOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCA9PSBoX291dF9ncm91cCAmJgorICAgICAgICAgICAgICAgdl9pbl9ncm91cCAqIDIgPT0gdl9vdXRfZ3JvdXAgJiYgZG9fZmFuY3kpIHsKKyAgICAgIC8qIE5vbi1mYW5jeSB1cHNhbXBsaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgbWV0aG9kICovCisgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMXYyX2ZhbmN5X3Vwc2FtcGxlOworICAgICAgdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7CisgICAgfSBlbHNlIGlmIChoX2luX2dyb3VwICogMiA9PSBoX291dF9ncm91cCAmJgorICAgICAgICAgICAgICAgdl9pbl9ncm91cCAqIDIgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICAgIC8qIFNwZWNpYWwgY2FzZXMgZm9yIDJoMnYgdXBzYW1wbGluZyAqLworICAgICAgaWYgKGRvX2ZhbmN5ICYmIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID4gMikgeworICAgICAgICBpZiAoanNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUoKSkKKyAgICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9mYW5jeV91cHNhbXBsZTsKKyAgICAgICAgdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoanNpbWRfY2FuX2gydjJfdXBzYW1wbGUoKSkKKyAgICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYyX3Vwc2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml91cHNhbXBsZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChoX291dF9ncm91cCAlIGhfaW5fZ3JvdXApID09IDAgJiYKKyAgICAgICAgICAgICAgICh2X291dF9ncm91cCAlIHZfaW5fZ3JvdXApID09IDApIHsKKyAgICAgIC8qIEdlbmVyaWMgaW50ZWdyYWwtZmFjdG9ycyB1cHNhbXBsaW5nIG1ldGhvZCAqLworI2lmIGRlZmluZWQoX19taXBzX18pCisgICAgICBpZiAoanNpbWRfY2FuX2ludF91cHNhbXBsZSgpKQorICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9pbnRfdXBzYW1wbGU7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaW50X3Vwc2FtcGxlOworICAgICAgdXBzYW1wbGUtPmhfZXhwYW5kW2NpXSA9IChVSU5UOCkoaF9vdXRfZ3JvdXAgLyBoX2luX2dyb3VwKTsKKyAgICAgIHVwc2FtcGxlLT52X2V4cGFuZFtjaV0gPSAoVUlOVDgpKHZfb3V0X2dyb3VwIC8gdl9pbl9ncm91cCk7CisgICAgfSBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZSQUNUX1NBTVBMRV9OT1RJTVBMKTsKKyAgICBpZiAobmVlZF9idWZmZXIgJiYgIWNpbmZvLT5tYXN0ZXItPmppbml0X3Vwc2FtcGxlcl9ub19hbGxvYykgeworICAgICAgdXBzYW1wbGUtPmNvbG9yX2J1ZltjaV0gPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgKEpESU1FTlNJT04panJvdW5kX3VwKChsb25nKWNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKSwKKyAgICAgICAgIChKRElNRU5TSU9OKWNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZHNhbXBsZS5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRzYW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmJmMDhhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamRzYW1wbGUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogamRzYW1wbGUuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gdXBzYW1wbGUgYSBzaW5nbGUgY29tcG9uZW50ICovCit0eXBlZGVmIHZvaWQgKCp1cHNhbXBsZTFfcHRyKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworCisvKiBQcml2YXRlIHN1Ym9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciBwdWI7ICAgIC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBDb2xvciBjb252ZXJzaW9uIGJ1ZmZlci4gIFdoZW4gdXNpbmcgc2VwYXJhdGUgdXBzYW1wbGluZyBhbmQgY29sb3IKKyAgICogY29udmVyc2lvbiBzdGVwcywgdGhpcyBidWZmZXIgaG9sZHMgb25lIHVwc2FtcGxlZCByb3cgZ3JvdXAgdW50aWwgaXQKKyAgICogaGFzIGJlZW4gY29sb3IgY29udmVydGVkIGFuZCBvdXRwdXQuCisgICAqIE5vdGU6IHdlIGRvIG5vdCBhbGxvY2F0ZSBhbnkgc3RvcmFnZSBmb3IgY29tcG9uZW50KHMpIHdoaWNoIGFyZSBmdWxsLXNpemUsCisgICAqIGllIGRvIG5vdCBuZWVkIHJlc2NhbGluZy4gIFRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IG9mIGNvbG9yX2J1ZltdIGlzCisgICAqIHNpbXBseSBzZXQgdG8gcG9pbnQgdG8gdGhlIGlucHV0IGRhdGEgYXJyYXksIHRoZXJlYnkgYXZvaWRpbmcgY29weWluZy4KKyAgICovCisgIEpTQU1QQVJSQVkgY29sb3JfYnVmW01BWF9DT01QT05FTlRTXTsKKworICAvKiBQZXItY29tcG9uZW50IHVwc2FtcGxpbmcgbWV0aG9kIHBvaW50ZXJzICovCisgIHVwc2FtcGxlMV9wdHIgbWV0aG9kc1tNQVhfQ09NUE9ORU5UU107CisKKyAgaW50IG5leHRfcm93X291dDsgICAgICAgICAgICAgLyogY291bnRzIHJvd3MgZW1pdHRlZCBmcm9tIGNvbG9yX2J1ZiAqLworICBKRElNRU5TSU9OIHJvd3NfdG9fZ287ICAgICAgICAvKiBjb3VudHMgcm93cyByZW1haW5pbmcgaW4gaW1hZ2UgKi8KKworICAvKiBIZWlnaHQgb2YgYW4gaW5wdXQgcm93IGdyb3VwIGZvciBlYWNoIGNvbXBvbmVudC4gKi8KKyAgaW50IHJvd2dyb3VwX2hlaWdodFtNQVhfQ09NUE9ORU5UU107CisKKyAgLyogVGhlc2UgYXJyYXlzIHNhdmUgcGl4ZWwgZXhwYW5zaW9uIGZhY3RvcnMgc28gdGhhdCBpbnRfZXhwYW5kIG5lZWQgbm90CisgICAqIHJlY29tcHV0ZSB0aGVtIGVhY2ggdGltZS4gIFRoZXkgYXJlIHVudXNlZCBmb3Igb3RoZXIgdXBzYW1wbGluZyBtZXRob2RzLgorICAgKi8KKyAgVUlOVDggaF9leHBhbmRbTUFYX0NPTVBPTkVOVFNdOworICBVSU5UOCB2X2V4cGFuZFtNQVhfQ09NUE9ORU5UU107Cit9IG15X3Vwc2FtcGxlcjsKKwordHlwZWRlZiBteV91cHNhbXBsZXIgKm15X3Vwc2FtcGxlX3B0cjsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkdHJhbnMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pkdHJhbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjcxM2VmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamR0cmFucy5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogamR0cmFucy5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBJdCB3YXMgbW9kaWZpZWQgYnkgVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCB0byBpbmNsdWRlIG9ubHkgY29kZSByZWxldmFudAorICogdG8gbGlianBlZy10dXJiby4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBsaWJyYXJ5IHJvdXRpbmVzIGZvciB0cmFuc2NvZGluZyBkZWNvbXByZXNzaW9uLAorICogdGhhdCBpcywgcmVhZGluZyByYXcgRENUIGNvZWZmaWNpZW50IGFycmF5cyBmcm9tIGFuIGlucHV0IEpQRUcgZmlsZS4KKyAqIFRoZSByb3V0aW5lcyBpbiBqZGFwaW1pbi5jIHdpbGwgYWxzbyBiZSBuZWVkZWQgYnkgYSB0cmFuc2NvZGVyLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTE9DQUwodm9pZCkgdHJhbnNkZWNvZGVfbWFzdGVyX3NlbGVjdGlvbihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworCisvKgorICogUmVhZCB0aGUgY29lZmZpY2llbnQgYXJyYXlzIGZyb20gYSBKUEVHIGZpbGUuCisgKiBqcGVnX3JlYWRfaGVhZGVyIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgKgorICogVGhlIGVudGlyZSBpbWFnZSBpcyByZWFkIGludG8gYSBzZXQgb2YgdmlydHVhbCBjb2VmZmljaWVudC1ibG9jayBhcnJheXMsCisgKiBvbmUgcGVyIGNvbXBvbmVudC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZgorICogdmlydHVhbC1hcnJheSBkZXNjcmlwdG9ycy4gIFRoZXNlIGNhbiBiZSBtYW5pcHVsYXRlZCBkaXJlY3RseSB2aWEgdGhlCisgKiBKUEVHIG1lbW9yeSBtYW5hZ2VyLCBvciBoYW5kZWQgb2ZmIHRvIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKCkuCisgKiBUbyByZWxlYXNlIHRoZSBtZW1vcnkgb2NjdXBpZWQgYnkgdGhlIHZpcnR1YWwgYXJyYXlzLCBjYWxsCisgKiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkgd2hlbiBkb25lIHdpdGggdGhlIGRhdGEuCisgKgorICogQW4gYWx0ZXJuYXRpdmUgdXNhZ2UgaXMgdG8gc2ltcGx5IG9idGFpbiBhY2Nlc3MgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5cworICogZHVyaW5nIGEgYnVmZmVyZWQtaW1hZ2UtbW9kZSBkZWNvbXByZXNzaW9uIG9wZXJhdGlvbi4gIFRoaXMgaXMgYWxsb3dlZAorICogYWZ0ZXIgYW55IGpwZWdfZmluaXNoX291dHB1dCgpIGNhbGwuICBUaGUgYXJyYXlzIGNhbiBiZSBhY2Nlc3NlZCB1bnRpbAorICoganBlZ19maW5pc2hfZGVjb21wcmVzcygpIGlzIGNhbGxlZC4gIChOb3RlIHRoYXQgYW55IGNhbGwgdG8gdGhlIGxpYnJhcnkKKyAqIG1heSByZXBvc2l0aW9uIHRoZSBhcnJheXMsIHNvIGRvbid0IHJlbHkgb24gYWNjZXNzX3ZpcnRfYmFycmF5KCkgcmVzdWx0cworICogdG8gc3RheSB2YWxpZCBhY3Jvc3MgbGlicmFyeSBjYWxscy4pCisgKgorICogUmV0dXJucyBOVUxMIGlmIHN1c3BlbmRlZC4gIFRoaXMgY2FzZSBuZWVkIGJlIGNoZWNrZWQgb25seSBpZgorICogYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlIGlzIHVzZWQuCisgKi8KKworR0xPQkFMKGp2aXJ0X2JhcnJheV9wdHIgKikKK2pwZWdfcmVhZF9jb2VmZmljaWVudHMoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JFQURZKSB7CisgICAgLyogRmlyc3QgY2FsbDogaW5pdGlhbGl6ZSBhY3RpdmUgbW9kdWxlcyAqLworICAgIHRyYW5zZGVjb2RlX21hc3Rlcl9zZWxlY3Rpb24oY2luZm8pOworICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfUkRDT0VGUzsKKyAgfQorICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfUkRDT0VGUykgeworICAgIC8qIEFic29yYiB3aG9sZSBmaWxlIGludG8gdGhlIGNvZWYgYnVmZmVyICovCisgICAgZm9yICg7OykgeworICAgICAgaW50IHJldGNvZGU7CisgICAgICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovCisgICAgICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpCisgICAgICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgICAgICAvKiBBYnNvcmIgc29tZSBtb3JlIGlucHV0ICovCisgICAgICByZXRjb2RlID0gKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbyk7CisgICAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1NVU1BFTkRFRCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfRU9JKQorICAgICAgICBicmVhazsKKyAgICAgIC8qIEFkdmFuY2UgcHJvZ3Jlc3MgY291bnRlciBpZiBhcHByb3ByaWF0ZSAqLworICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMICYmCisgICAgICAgICAgKHJldGNvZGUgPT0gSlBFR19ST1dfQ09NUExFVEVEIHx8IHJldGNvZGUgPT0gSlBFR19SRUFDSEVEX1NPUykpIHsKKyAgICAgICAgaWYgKCsrY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPj0gY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0KSB7CisgICAgICAgICAgLyogc3RhcnR1cCB1bmRlcmVzdGltYXRlZCBudW1iZXIgb2Ygc2NhbnM7IHJhdGNoZXQgdXAgb25lIHNjYW4gKi8KKyAgICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgKz0gKGxvbmcpY2luZm8tPnRvdGFsX2lNQ1Vfcm93czsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICAvKiBTZXQgc3RhdGUgc28gdGhhdCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nICovCisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9TVE9QUElORzsKKyAgfQorICAvKiBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBiZSBpbiBzdGF0ZSBEU1RBVEVfU1RPUFBJTkcgaWYgYmVpbmcgdXNlZAorICAgKiBzdGFuZGFsb25lLCBvciBpbiBzdGF0ZSBEU1RBVEVfQlVGSU1BR0UgaWYgYmVpbmcgaW52b2tlZCB0byBnZXQgYWNjZXNzCisgICAqIHRvIHRoZSBjb2VmZmljaWVudHMgZHVyaW5nIGEgZnVsbCBidWZmZXJlZC1pbWFnZS1tb2RlIGRlY29tcHJlc3Npb24uCisgICAqLworICBpZiAoKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1NUT1BQSU5HIHx8CisgICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfQlVGSU1BR0UpICYmIGNpbmZvLT5idWZmZXJlZF9pbWFnZSkgeworICAgIHJldHVybiBjaW5mby0+Y29lZi0+Y29lZl9hcnJheXM7CisgIH0KKyAgLyogT29wcywgaW1wcm9wZXIgdXNhZ2UgKi8KKyAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgLyoga2VlcCBjb21waWxlciBoYXBweSAqLworfQorCisKKy8qCisgKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGRlY29tcHJlc3Npb24gbW9kdWxlcyBmb3IgdHJhbnNjb2RpbmcuCisgKiBUaGlzIHN1YnN0aXR1dGVzIGZvciBqZG1hc3Rlci5jJ3MgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZ1bGwgZGVjb21wcmVzc29yLgorICovCisKK0xPQ0FMKHZvaWQpCit0cmFuc2RlY29kZV9tYXN0ZXJfc2VsZWN0aW9uKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBidWZmZXJlZC1pbWFnZSBvcGVyYXRpb24uICovCisgIGNpbmZvLT5idWZmZXJlZF9pbWFnZSA9IFRSVUU7CisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisgIC8qIENvbXB1dGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIHJlbGF0ZWQgdmFsdWVzLiAqLworICBqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOworI2VuZGlmCisKKyAgLyogRW50cm9weSBkZWNvZGluZzogZWl0aGVyIEh1ZmZtYW4gb3IgYXJpdGhtZXRpYyBjb2RpbmcuICovCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSkgeworI2lmZGVmIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorICAgIGppbml0X2FyaXRoX2RlY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisjaWZkZWYgRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICAgIGppbml0X3BodWZmX2RlY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgamluaXRfaHVmZl9kZWNvZGVyKGNpbmZvKTsKKyAgfQorCisgIC8qIEFsd2F5cyBnZXQgYSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGJ1ZmZlci4gKi8KKyAgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIoY2luZm8sIFRSVUUpOworCisgIC8qIFdlIGNhbiBub3cgdGVsbCB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWxsb2NhdGUgdmlydHVhbCBhcnJheXMuICovCisgICgqY2luZm8tPm1lbS0+cmVhbGl6ZV92aXJ0X2FycmF5cykgKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgIC8qIEluaXRpYWxpemUgaW5wdXQgc2lkZSBvZiBkZWNvbXByZXNzb3IgdG8gY29uc3VtZSBmaXJzdCBzY2FuLiAqLworICAoKmNpbmZvLT5pbnB1dGN0bC0+c3RhcnRfaW5wdXRfcGFzcykgKGNpbmZvKTsKKworICAvKiBJbml0aWFsaXplIHByb2dyZXNzIG1vbml0b3JpbmcuICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGludCBuc2NhbnM7CisgICAgLyogRXN0aW1hdGUgbnVtYmVyIG9mIHNjYW5zIHRvIHNldCBwYXNzX2xpbWl0LiAqLworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworICAgICAgLyogQXJiaXRyYXJpbHkgZXN0aW1hdGUgMiBpbnRlcmxlYXZlZCBEQyBzY2FucyArIDMgQUMgc2NhbnMvY29tcG9uZW50LiAqLworICAgICAgbnNjYW5zID0gMiArIDMgKiBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgfSBlbHNlIGlmIChjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2FucykgeworICAgICAgLyogRm9yIGEgbm9ucHJvZ3Jlc3NpdmUgbXVsdGlzY2FuIGZpbGUsIGVzdGltYXRlIDEgc2NhbiBwZXIgY29tcG9uZW50LiAqLworICAgICAgbnNjYW5zID0gY2luZm8tPm51bV9jb21wb25lbnRzOworICAgIH0gZWxzZSB7CisgICAgICBuc2NhbnMgPSAxOworICAgIH0KKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IDBMOworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKWNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgKiBuc2NhbnM7CisgICAgY2luZm8tPnByb2dyZXNzLT5jb21wbGV0ZWRfcGFzc2VzID0gMDsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyA9IDE7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2plcnJvci5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwYzZlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2plcnJvci5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogamVycm9yLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIEl0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBjb2RlIHJlbGV2YW50CisgKiB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHNpbXBsZSBlcnJvci1yZXBvcnRpbmcgYW5kIHRyYWNlLW1lc3NhZ2Ugcm91dGluZXMuCisgKiBUaGVzZSBhcmUgc3VpdGFibGUgZm9yIFVuaXgtbGlrZSBzeXN0ZW1zIGFuZCBvdGhlcnMgd2hlcmUgd3JpdGluZyB0bworICogc3RkZXJyIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgd2FudCB0byByZXBsYWNlCisgKiBzb21lIG9yIGFsbCBvZiB0aGVzZSByb3V0aW5lcy4KKyAqCisgKiBJZiB5b3UgZGVmaW5lIFVTRV9XSU5ET1dTX01FU1NBR0VCT1ggaW4gamNvbmZpZy5oIG9yIGluIHRoZSBtYWtlZmlsZSwKKyAqIHlvdSBnZXQgYSBXaW5kb3dzLXNwZWNpZmljIGhhY2sgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlcyBpbiBhIGRpYWxvZyBib3guCisgKiBJdCBhaW4ndCBtdWNoLCBidXQgaXQgYmVhdHMgZHJvcHBpbmcgZXJyb3IgbWVzc2FnZXMgaW50byB0aGUgYml0IGJ1Y2tldCwKKyAqIHdoaWNoIGlzIHdoYXQgaGFwcGVucyB0byBvdXRwdXQgdG8gc3RkZXJyIHVuZGVyIG1vc3QgV2luZG93cyBDIGNvbXBpbGVycy4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCBieSBib3RoIHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBjb2RlLgorICovCisKKy8qIHRoaXMgaXMgbm90IGEgY29yZSBsaWJyYXJ5IG1vZHVsZSwgc28gaXQgZG9lc24ndCBkZWZpbmUgSlBFR19JTlRFUk5BTFMgKi8KKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqdmVyc2lvbi5oIgorI2luY2x1ZGUgImplcnJvci5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZmRlZiBVU0VfV0lORE9XU19NRVNTQUdFQk9YCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFICAgICAgICAgICAgLyogZGVmaW5lIGV4aXQoKSBjb2RlcyBpZiBub3QgcHJvdmlkZWQgKi8KKyNkZWZpbmUgRVhJVF9GQUlMVVJFICAxCisjZW5kaWYKKworCisvKgorICogQ3JlYXRlIHRoZSBtZXNzYWdlIHN0cmluZyB0YWJsZS4KKyAqIFdlIGRvIHRoaXMgZnJvbSB0aGUgbWFzdGVyIG1lc3NhZ2UgbGlzdCBpbiBqZXJyb3IuaCBieSByZS1yZWFkaW5nCisgKiBqZXJyb3IuaCB3aXRoIGEgc3VpdGFibGUgZGVmaW5pdGlvbiBmb3IgbWFjcm8gSk1FU1NBR0UuCisgKiBUaGUgbWVzc2FnZSB0YWJsZSBpcyBtYWRlIGFuIGV4dGVybmFsIHN5bWJvbCBqdXN0IGluIGNhc2UgYW55IGFwcGxpY2F0aW9ucworICogd2FudCB0byByZWZlciB0byBpdCBkaXJlY3RseS4KKyAqLworCisjZGVmaW5lIEpNRVNTQUdFKGNvZGUsIHN0cmluZykgIHN0cmluZywKKworY29uc3QgY2hhciAqIGNvbnN0IGpwZWdfc3RkX21lc3NhZ2VfdGFibGVbXSA9IHsKKyNpbmNsdWRlICJqZXJyb3IuaCIKKyAgTlVMTAorfTsKKworCisvKgorICogRXJyb3IgZXhpdCBoYW5kbGVyOiBtdXN0IG5vdCByZXR1cm4gdG8gY2FsbGVyLgorICoKKyAqIEFwcGxpY2F0aW9ucyBtYXkgb3ZlcnJpZGUgdGhpcyBpZiB0aGV5IHdhbnQgdG8gZ2V0IGNvbnRyb2wgYmFjayBhZnRlcgorICogYW4gZXJyb3IuICBUeXBpY2FsbHkgb25lIHdvdWxkIGxvbmdqbXAgc29tZXdoZXJlIGluc3RlYWQgb2YgZXhpdGluZy4KKyAqIFRoZSBzZXRqbXAgYnVmZmVyIGNhbiBiZSBtYWRlIGEgcHJpdmF0ZSBmaWVsZCB3aXRoaW4gYW4gZXhwYW5kZWQgZXJyb3IKKyAqIGhhbmRsZXIgb2JqZWN0LiAgTm90ZSB0aGF0IHRoZSBpbmZvIG5lZWRlZCB0byBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlCisgKiBpcyBzdG9yZWQgaW4gdGhlIGVycm9yIG9iamVjdCwgc28geW91IGNhbiBnZW5lcmF0ZSB0aGUgbWVzc2FnZSBub3cgb3IKKyAqIGxhdGVyLCBhdCB5b3VyIGNvbnZlbmllbmNlLgorICogWW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgSlBFRyBvYmplY3QgaXMgY2xlYW5lZCB1cCAod2l0aCBqcGVnX2Fib3J0CisgKiBvciBqcGVnX2Rlc3Ryb3kpIGF0IHNvbWUgcG9pbnQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitlcnJvcl9leGl0KGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgLyogQWx3YXlzIGRpc3BsYXkgdGhlIG1lc3NhZ2UgKi8KKyAgKCpjaW5mby0+ZXJyLT5vdXRwdXRfbWVzc2FnZSkgKGNpbmZvKTsKKworICAvKiBMZXQgdGhlIG1lbW9yeSBtYW5hZ2VyIGRlbGV0ZSBhbnkgdGVtcCBmaWxlcyBiZWZvcmUgd2UgZGllICovCisgIGpwZWdfZGVzdHJveShjaW5mbyk7CisKKyAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisKKy8qCisgKiBBY3R1YWwgb3V0cHV0IG9mIGFuIGVycm9yIG9yIHRyYWNlIG1lc3NhZ2UuCisgKiBBcHBsaWNhdGlvbnMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHNlbmQgSlBFRyBtZXNzYWdlcyBzb21ld2hlcmUKKyAqIG90aGVyIHRoYW4gc3RkZXJyLgorICoKKyAqIE9uIFdpbmRvd3MsIHByaW50aW5nIHRvIHN0ZGVyciBpcyBnZW5lcmFsbHkgY29tcGxldGVseSB1c2VsZXNzLAorICogc28gd2UgcHJvdmlkZSBvcHRpb25hbCBjb2RlIHRvIHByb2R1Y2UgYW4gZXJyb3ItZGlhbG9nIHBvcHVwLgorICogTW9zdCBXaW5kb3dzIGFwcGxpY2F0aW9ucyB3aWxsIHN0aWxsIHByZWZlciB0byBvdmVycmlkZSB0aGlzIHJvdXRpbmUsCisgKiBidXQgaWYgdGhleSBkb24ndCwgaXQnbGwgZG8gc29tZXRoaW5nIGF0IGxlYXN0IG1hcmdpbmFsbHkgdXNlZnVsLgorICoKKyAqIE5PVEU6IHRvIHVzZSB0aGUgbGlicmFyeSBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKyAqIEMgc3RkaW8gbGlicmFyeSwgeW91IG1heSBoYXZlIHRvIGRlbGV0ZSB0aGUgY2FsbCB0byBmcHJpbnRmKCkgZW50aXJlbHksCisgKiBub3QganVzdCBub3QgdXNlIHRoaXMgcm91dGluZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK291dHB1dF9tZXNzYWdlKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgY2hhciBidWZmZXJbSk1TR19MRU5HVEhfTUFYXTsKKworICAvKiBDcmVhdGUgdGhlIG1lc3NhZ2UgKi8KKyAgKCpjaW5mby0+ZXJyLT5mb3JtYXRfbWVzc2FnZSkgKGNpbmZvLCBidWZmZXIpOworCisjaWZkZWYgVVNFX1dJTkRPV1NfTUVTU0FHRUJPWAorICAvKiBEaXNwbGF5IGl0IGluIGEgbWVzc2FnZSBkaWFsb2cgYm94ICovCisgIE1lc3NhZ2VCb3goR2V0QWN0aXZlV2luZG93KCksIGJ1ZmZlciwgIkpQRUcgTGlicmFyeSBFcnJvciIsCisgICAgICAgICAgICAgTUJfT0sgfCBNQl9JQ09ORVJST1IpOworI2Vsc2UKKyAgLyogU2VuZCBpdCB0byBzdGRlcnIsIGFkZGluZyBhIG5ld2xpbmUgKi8KKyAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmZmVyKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBEZWNpZGUgd2hldGhlciB0byBlbWl0IGEgdHJhY2Ugb3Igd2FybmluZyBtZXNzYWdlLgorICogbXNnX2xldmVsIGlzIG9uZSBvZjoKKyAqICAgLTE6IHJlY292ZXJhYmxlIGNvcnJ1cHQtZGF0YSB3YXJuaW5nLCBtYXkgd2FudCB0byBhYm9ydC4KKyAqICAgIDA6IGltcG9ydGFudCBhZHZpc29yeSBtZXNzYWdlcyAoYWx3YXlzIGRpc3BsYXkgdG8gdXNlcikuCisgKiAgICAxOiBmaXJzdCBsZXZlbCBvZiB0cmFjaW5nIGRldGFpbC4KKyAqICAgIDIsMywuLi46IHN1Y2Nlc3NpdmVseSBtb3JlIGRldGFpbGVkIHRyYWNpbmcgbWVzc2FnZXMuCisgKiBBbiBhcHBsaWNhdGlvbiBtaWdodCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiBpdCB3YW50ZWQgdG8gYWJvcnQgb24gd2FybmluZ3MKKyAqIG9yIGNoYW5nZSB0aGUgcG9saWN5IGFib3V0IHdoaWNoIG1lc3NhZ2VzIHRvIGRpc3BsYXkuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitlbWl0X21lc3NhZ2Uoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgbXNnX2xldmVsKQoreworICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKmVyciA9IGNpbmZvLT5lcnI7CisKKyAgaWYgKG1zZ19sZXZlbCA8IDApIHsKKyAgICAvKiBJdCdzIGEgd2FybmluZyBtZXNzYWdlLiAgU2luY2UgY29ycnVwdCBmaWxlcyBtYXkgZ2VuZXJhdGUgbWFueSB3YXJuaW5ncywKKyAgICAgKiB0aGUgcG9saWN5IGltcGxlbWVudGVkIGhlcmUgaXMgdG8gc2hvdyBvbmx5IHRoZSBmaXJzdCB3YXJuaW5nLAorICAgICAqIHVubGVzcyB0cmFjZV9sZXZlbCA+PSAzLgorICAgICAqLworICAgIGlmIChlcnItPm51bV93YXJuaW5ncyA9PSAwIHx8IGVyci0+dHJhY2VfbGV2ZWwgPj0gMykKKyAgICAgICgqZXJyLT5vdXRwdXRfbWVzc2FnZSkgKGNpbmZvKTsKKyAgICAvKiBBbHdheXMgY291bnQgd2FybmluZ3MgaW4gbnVtX3dhcm5pbmdzLiAqLworICAgIGVyci0+bnVtX3dhcm5pbmdzKys7CisgIH0gZWxzZSB7CisgICAgLyogSXQncyBhIHRyYWNlIG1lc3NhZ2UuICBTaG93IGl0IGlmIHRyYWNlX2xldmVsID49IG1zZ19sZXZlbC4gKi8KKyAgICBpZiAoZXJyLT50cmFjZV9sZXZlbCA+PSBtc2dfbGV2ZWwpCisgICAgICAoKmVyci0+b3V0cHV0X21lc3NhZ2UpIChjaW5mbyk7CisgIH0KK30KKworCisvKgorICogRm9ybWF0IGEgbWVzc2FnZSBzdHJpbmcgZm9yIHRoZSBtb3N0IHJlY2VudCBKUEVHIGVycm9yIG9yIG1lc3NhZ2UuCisgKiBUaGUgbWVzc2FnZSBpcyBzdG9yZWQgaW50byBidWZmZXIsIHdoaWNoIHNob3VsZCBiZSBhdCBsZWFzdCBKTVNHX0xFTkdUSF9NQVgKKyAqIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgbm8gJ1xuJyBjaGFyYWN0ZXIgaXMgYWRkZWQgdG8gdGhlIHN0cmluZy4KKyAqIEZldyBhcHBsaWNhdGlvbnMgc2hvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmb3JtYXRfbWVzc2FnZShqX2NvbW1vbl9wdHIgY2luZm8sIGNoYXIgKmJ1ZmZlcikKK3sKKyAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICplcnIgPSBjaW5mby0+ZXJyOworICBpbnQgbXNnX2NvZGUgPSBlcnItPm1zZ19jb2RlOworICBjb25zdCBjaGFyICptc2d0ZXh0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqbXNncHRyOworICBjaGFyIGNoOworICBib29sZWFuIGlzc3RyaW5nOworCisgIC8qIExvb2sgdXAgbWVzc2FnZSBzdHJpbmcgaW4gcHJvcGVyIHRhYmxlICovCisgIGlmIChtc2dfY29kZSA+IDAgJiYgbXNnX2NvZGUgPD0gZXJyLT5sYXN0X2pwZWdfbWVzc2FnZSkgeworICAgIG1zZ3RleHQgPSBlcnItPmpwZWdfbWVzc2FnZV90YWJsZVttc2dfY29kZV07CisgIH0gZWxzZSBpZiAoZXJyLT5hZGRvbl9tZXNzYWdlX3RhYmxlICE9IE5VTEwgJiYKKyAgICAgICAgICAgICBtc2dfY29kZSA+PSBlcnItPmZpcnN0X2FkZG9uX21lc3NhZ2UgJiYKKyAgICAgICAgICAgICBtc2dfY29kZSA8PSBlcnItPmxhc3RfYWRkb25fbWVzc2FnZSkgeworICAgIG1zZ3RleHQgPSBlcnItPmFkZG9uX21lc3NhZ2VfdGFibGVbbXNnX2NvZGUgLSBlcnItPmZpcnN0X2FkZG9uX21lc3NhZ2VdOworICB9CisKKyAgLyogRGVmZW5kIGFnYWluc3QgYm9ndXMgbWVzc2FnZSBudW1iZXIgKi8KKyAgaWYgKG1zZ3RleHQgPT0gTlVMTCkgeworICAgIGVyci0+bXNnX3Bhcm0uaVswXSA9IG1zZ19jb2RlOworICAgIG1zZ3RleHQgPSBlcnItPmpwZWdfbWVzc2FnZV90YWJsZVswXTsKKyAgfQorCisgIC8qIENoZWNrIGZvciBzdHJpbmcgcGFyYW1ldGVyLCBhcyBpbmRpY2F0ZWQgYnkgJXMgaW4gdGhlIG1lc3NhZ2UgdGV4dCAqLworICBpc3N0cmluZyA9IEZBTFNFOworICBtc2dwdHIgPSBtc2d0ZXh0OworICB3aGlsZSAoKGNoID0gKm1zZ3B0cisrKSAhPSAnXDAnKSB7CisgICAgaWYgKGNoID09ICclJykgeworICAgICAgaWYgKCptc2dwdHIgPT0gJ3MnKSBpc3N0cmluZyA9IFRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBGb3JtYXQgdGhlIG1lc3NhZ2UgaW50byB0aGUgcGFzc2VkIGJ1ZmZlciAqLworICBpZiAoaXNzdHJpbmcpCisgICAgc3ByaW50ZihidWZmZXIsIG1zZ3RleHQsIGVyci0+bXNnX3Bhcm0ucyk7CisgIGVsc2UKKyAgICBzcHJpbnRmKGJ1ZmZlciwgbXNndGV4dCwKKyAgICAgICAgICAgIGVyci0+bXNnX3Bhcm0uaVswXSwgZXJyLT5tc2dfcGFybS5pWzFdLAorICAgICAgICAgICAgZXJyLT5tc2dfcGFybS5pWzJdLCBlcnItPm1zZ19wYXJtLmlbM10sCisgICAgICAgICAgICBlcnItPm1zZ19wYXJtLmlbNF0sIGVyci0+bXNnX3Bhcm0uaVs1XSwKKyAgICAgICAgICAgIGVyci0+bXNnX3Bhcm0uaVs2XSwgZXJyLT5tc2dfcGFybS5pWzddKTsKK30KKworCisvKgorICogUmVzZXQgZXJyb3Igc3RhdGUgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGEgbmV3IGltYWdlLgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGNvbXByZXNzaW9uIHN0YXJ0dXAgdG8gcmVzZXQgdHJhY2UvZXJyb3IKKyAqIHByb2Nlc3NpbmcgdG8gZGVmYXVsdCBzdGF0ZSwgd2l0aG91dCBsb3NpbmcgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljCisgKiBtZXRob2QgcG9pbnRlcnMuICBBbiBhcHBsaWNhdGlvbiBtaWdodCBwb3NzaWJseSB3YW50IHRvIG92ZXJyaWRlCisgKiB0aGlzIG1ldGhvZCBpZiBpdCBoYXMgYWRkaXRpb25hbCBlcnJvciBwcm9jZXNzaW5nIHN0YXRlLgorICovCisKK01FVEhPRERFRih2b2lkKQorcmVzZXRfZXJyb3JfbWdyKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgY2luZm8tPmVyci0+bnVtX3dhcm5pbmdzID0gMDsKKyAgLyogdHJhY2VfbGV2ZWwgaXMgbm90IHJlc2V0IHNpbmNlIGl0IGlzIGFuIGFwcGxpY2F0aW9uLXN1cHBsaWVkIHBhcmFtZXRlciAqLworICBjaW5mby0+ZXJyLT5tc2dfY29kZSA9IDA7ICAgICAvKiBtYXkgYmUgdXNlZnVsIGFzIGEgZmxhZyBmb3IgIm5vIGVycm9yIiAqLworfQorCisKKy8qCisgKiBGaWxsIGluIHRoZSBzdGFuZGFyZCBlcnJvci1oYW5kbGluZyBtZXRob2RzIGluIGEganBlZ19lcnJvcl9tZ3Igb2JqZWN0LgorICogVHlwaWNhbCBjYWxsIGlzOgorICogICAgICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87CisgKiAgICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBlcnI7CisgKgorICogICAgICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmZXJyKTsKKyAqIGFmdGVyIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBtYXkgb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0aG9kcy4KKyAqLworCitHTE9CQUwoc3RydWN0IGpwZWdfZXJyb3JfbWdyICopCitqcGVnX3N0ZF9lcnJvcihzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKmVycikKK3sKKyAgZXJyLT5lcnJvcl9leGl0ID0gZXJyb3JfZXhpdDsKKyAgZXJyLT5lbWl0X21lc3NhZ2UgPSBlbWl0X21lc3NhZ2U7CisgIGVyci0+b3V0cHV0X21lc3NhZ2UgPSBvdXRwdXRfbWVzc2FnZTsKKyAgZXJyLT5mb3JtYXRfbWVzc2FnZSA9IGZvcm1hdF9tZXNzYWdlOworICBlcnItPnJlc2V0X2Vycm9yX21nciA9IHJlc2V0X2Vycm9yX21ncjsKKworICBlcnItPnRyYWNlX2xldmVsID0gMDsgICAgICAgICAvKiBkZWZhdWx0ID0gbm8gdHJhY2luZyAqLworICBlcnItPm51bV93YXJuaW5ncyA9IDA7ICAgICAgICAvKiBubyB3YXJuaW5ncyBlbWl0dGVkIHlldCAqLworICBlcnItPm1zZ19jb2RlID0gMDsgICAgICAgICAgICAvKiBtYXkgYmUgdXNlZnVsIGFzIGEgZmxhZyBmb3IgIm5vIGVycm9yIiAqLworCisgIC8qIEluaXRpYWxpemUgbWVzc2FnZSB0YWJsZSBwb2ludGVycyAqLworICBlcnItPmpwZWdfbWVzc2FnZV90YWJsZSA9IGpwZWdfc3RkX21lc3NhZ2VfdGFibGU7CisgIGVyci0+bGFzdF9qcGVnX21lc3NhZ2UgPSAoaW50KUpNU0dfTEFTVE1TR0NPREUgLSAxOworCisgIGVyci0+YWRkb25fbWVzc2FnZV90YWJsZSA9IE5VTEw7CisgIGVyci0+Zmlyc3RfYWRkb25fbWVzc2FnZSA9IDA7IC8qIGZvciBzYWZldHkgKi8KKyAgZXJyLT5sYXN0X2FkZG9uX21lc3NhZ2UgPSAwOworCisgIHJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZXJyb3IuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2plcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzM2EzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZXJyb3IuaApAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIGplcnJvci5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAxOTk3LTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGVycm9yIGFuZCBtZXNzYWdlIGNvZGVzIGZvciB0aGUgSlBFRyBsaWJyYXJ5LgorICogRWRpdCB0aGlzIGZpbGUgdG8gYWRkIG5ldyBjb2Rlcywgb3IgdG8gdHJhbnNsYXRlIHRoZSBtZXNzYWdlIHN0cmluZ3MgdG8KKyAqIHNvbWUgb3RoZXIgbGFuZ3VhZ2UuCisgKiBBIHNldCBvZiBlcnJvci1yZXBvcnRpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIHRvby4gIFNvbWUgYXBwbGljYXRpb25zIHVzaW5nCisgKiB0aGUgSlBFRyBsaWJyYXJ5IG1heSB3aXNoIHRvIGluY2x1ZGUgdGhpcyBmaWxlIHRvIGdldCB0aGUgZXJyb3IgY29kZXMKKyAqIGFuZC9vciB0aGUgbWFjcm9zLgorICovCisKKy8qCisgKiBUbyBkZWZpbmUgdGhlIGVudW0gbGlzdCBvZiBtZXNzYWdlIGNvZGVzLCBpbmNsdWRlIHRoaXMgZmlsZSB3aXRob3V0CisgKiBkZWZpbmluZyBtYWNybyBKTUVTU0FHRS4gIFRvIGNyZWF0ZSBhIG1lc3NhZ2Ugc3RyaW5nIHRhYmxlLCBpbmNsdWRlIGl0CisgKiBhZ2FpbiB3aXRoIGEgc3VpdGFibGUgSk1FU1NBR0UgZGVmaW5pdGlvbiAoc2VlIGplcnJvci5jIGZvciBhbiBleGFtcGxlKS4KKyAqLworI2lmbmRlZiBKTUVTU0FHRQorI2lmbmRlZiBKRVJST1JfSAorLyogRmlyc3QgdGltZSB0aHJvdWdoLCBkZWZpbmUgdGhlIGVudW0gbGlzdCAqLworI2RlZmluZSBKTUFLRV9FTlVNX0xJU1QKKyNlbHNlCisvKiBSZXBlYXRlZCBpbmNsdXNpb25zIG9mIHRoaXMgZmlsZSBhcmUgbm8tb3BzIHVubGVzcyBKTUVTU0FHRSBpcyBkZWZpbmVkICovCisjZGVmaW5lIEpNRVNTQUdFKGNvZGUsIHN0cmluZykKKyNlbmRpZiAvKiBKRVJST1JfSCAqLworI2VuZGlmIC8qIEpNRVNTQUdFICovCisKKyNpZmRlZiBKTUFLRV9FTlVNX0xJU1QKKwordHlwZWRlZiBlbnVtIHsKKworI2RlZmluZSBKTUVTU0FHRShjb2RlLCBzdHJpbmcpICBjb2RlLAorCisjZW5kaWYgLyogSk1BS0VfRU5VTV9MSVNUICovCisKK0pNRVNTQUdFKEpNU0dfTk9NRVNTQUdFLCAiQm9ndXMgbWVzc2FnZSBjb2RlICVkIikgLyogTXVzdCBiZSBmaXJzdCBlbnRyeSEgKi8KKworLyogRm9yIG1haW50ZW5hbmNlIGNvbnZlbmllbmNlLCBsaXN0IGlzIGFscGhhYmV0aWNhbCBieSBtZXNzYWdlIGNvZGUgbmFtZSAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPCA3MAorSk1FU1NBR0UoSkVSUl9BUklUSF9OT1RJTVBMLCAiU29ycnksIGFyaXRobWV0aWMgY29kaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCIpCisjZW5kaWYKK0pNRVNTQUdFKEpFUlJfQkFEX0FMSUdOX1RZUEUsICJBTElHTl9UWVBFIGlzIHdyb25nLCBwbGVhc2UgZml4IikKK0pNRVNTQUdFKEpFUlJfQkFEX0FMTE9DX0NIVU5LLCAiTUFYX0FMTE9DX0NIVU5LIGlzIHdyb25nLCBwbGVhc2UgZml4IikKK0pNRVNTQUdFKEpFUlJfQkFEX0JVRkZFUl9NT0RFLCAiQm9ndXMgYnVmZmVyIGNvbnRyb2wgbW9kZSIpCitKTUVTU0FHRShKRVJSX0JBRF9DT01QT05FTlRfSUQsICJJbnZhbGlkIGNvbXBvbmVudCBJRCAlZCBpbiBTT1MiKQorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKK0pNRVNTQUdFKEpFUlJfQkFEX0NST1BfU1BFQywgIkludmFsaWQgY3JvcCByZXF1ZXN0IikKKyNlbmRpZgorSk1FU1NBR0UoSkVSUl9CQURfRENUX0NPRUYsICJEQ1QgY29lZmZpY2llbnQgb3V0IG9mIHJhbmdlIikKK0pNRVNTQUdFKEpFUlJfQkFEX0RDVFNJWkUsICJJRENUIG91dHB1dCBibG9jayBzaXplICVkIG5vdCBzdXBwb3J0ZWQiKQorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKK0pNRVNTQUdFKEpFUlJfQkFEX0RST1BfU0FNUExJTkcsCisgICAgICAgICAiQ29tcG9uZW50IGluZGV4ICVkOiBtaXNtYXRjaGluZyBzYW1wbGluZyByYXRpbyAlZDolZCwgJWQ6JWQsICVjIikKKyNlbmRpZgorSk1FU1NBR0UoSkVSUl9CQURfSFVGRl9UQUJMRSwgIkJvZ3VzIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiIpCitKTUVTU0FHRShKRVJSX0JBRF9JTl9DT0xPUlNQQUNFLCAiQm9ndXMgaW5wdXQgY29sb3JzcGFjZSIpCitKTUVTU0FHRShKRVJSX0JBRF9KX0NPTE9SU1BBQ0UsICJCb2d1cyBKUEVHIGNvbG9yc3BhY2UiKQorSk1FU1NBR0UoSkVSUl9CQURfTEVOR1RILCAiQm9ndXMgbWFya2VyIGxlbmd0aCIpCitKTUVTU0FHRShKRVJSX0JBRF9MSUJfVkVSU0lPTiwKKyAgICAgICAgICJXcm9uZyBKUEVHIGxpYnJhcnkgdmVyc2lvbjogbGlicmFyeSBpcyAlZCwgY2FsbGVyIGV4cGVjdHMgJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfTUNVX1NJWkUsICJTYW1wbGluZyBmYWN0b3JzIHRvbyBsYXJnZSBmb3IgaW50ZXJsZWF2ZWQgc2NhbiIpCitKTUVTU0FHRShKRVJSX0JBRF9QT09MX0lELCAiSW52YWxpZCBtZW1vcnkgcG9vbCBjb2RlICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1BSRUNJU0lPTiwgIlVuc3VwcG9ydGVkIEpQRUcgZGF0YSBwcmVjaXNpb24gJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfUFJPR1JFU1NJT04sCisgICAgICAgICAiSW52YWxpZCBwcm9ncmVzc2l2ZSBwYXJhbWV0ZXJzIFNzPSVkIFNlPSVkIEFoPSVkIEFsPSVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1BST0dfU0NSSVBULAorICAgICAgICAgIkludmFsaWQgcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyBhdCBzY2FuIHNjcmlwdCBlbnRyeSAlZCIpCitKTUVTU0FHRShKRVJSX0JBRF9TQU1QTElORywgIkJvZ3VzIHNhbXBsaW5nIGZhY3RvcnMiKQorSk1FU1NBR0UoSkVSUl9CQURfU0NBTl9TQ1JJUFQsICJJbnZhbGlkIHNjYW4gc2NyaXB0IGF0IGVudHJ5ICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1NUQVRFLCAiSW1wcm9wZXIgY2FsbCB0byBKUEVHIGxpYnJhcnkgaW4gc3RhdGUgJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfU1RSVUNUX1NJWkUsCisgICAgICAgICAiSlBFRyBwYXJhbWV0ZXIgc3RydWN0IG1pc21hdGNoOiBsaWJyYXJ5IHRoaW5rcyBzaXplIGlzICV1LCBjYWxsZXIgZXhwZWN0cyAldSIpCitKTUVTU0FHRShKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUywgIkJvZ3VzIHZpcnR1YWwgYXJyYXkgYWNjZXNzIikKK0pNRVNTQUdFKEpFUlJfQlVGRkVSX1NJWkUsICJCdWZmZXIgcGFzc2VkIHRvIEpQRUcgbGlicmFyeSBpcyB0b28gc21hbGwiKQorSk1FU1NBR0UoSkVSUl9DQU5UX1NVU1BFTkQsICJTdXNwZW5zaW9uIG5vdCBhbGxvd2VkIGhlcmUiKQorSk1FU1NBR0UoSkVSUl9DQ0lSNjAxX05PVElNUEwsICJDQ0lSNjAxIHNhbXBsaW5nIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKQorSk1FU1NBR0UoSkVSUl9DT01QT05FTlRfQ09VTlQsICJUb28gbWFueSBjb2xvciBjb21wb25lbnRzOiAlZCwgbWF4ICVkIikKK0pNRVNTQUdFKEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMLCAiVW5zdXBwb3J0ZWQgY29sb3IgY29udmVyc2lvbiByZXF1ZXN0IikKK0pNRVNTQUdFKEpFUlJfREFDX0lOREVYLCAiQm9ndXMgREFDIGluZGV4ICVkIikKK0pNRVNTQUdFKEpFUlJfREFDX1ZBTFVFLCAiQm9ndXMgREFDIHZhbHVlIDB4JXgiKQorSk1FU1NBR0UoSkVSUl9ESFRfSU5ERVgsICJCb2d1cyBESFQgaW5kZXggJWQiKQorSk1FU1NBR0UoSkVSUl9EUVRfSU5ERVgsICJCb2d1cyBEUVQgaW5kZXggJWQiKQorSk1FU1NBR0UoSkVSUl9FTVBUWV9JTUFHRSwgIkVtcHR5IEpQRUcgaW1hZ2UgKEROTCBub3Qgc3VwcG9ydGVkKSIpCitKTUVTU0FHRShKRVJSX0VNU19SRUFELCAiUmVhZCBmcm9tIEVNUyBmYWlsZWQiKQorSk1FU1NBR0UoSkVSUl9FTVNfV1JJVEUsICJXcml0ZSB0byBFTVMgZmFpbGVkIikKK0pNRVNTQUdFKEpFUlJfRU9JX0VYUEVDVEVELCAiRGlkbid0IGV4cGVjdCBtb3JlIHRoYW4gb25lIHNjYW4iKQorSk1FU1NBR0UoSkVSUl9GSUxFX1JFQUQsICJJbnB1dCBmaWxlIHJlYWQgZXJyb3IiKQorSk1FU1NBR0UoSkVSUl9GSUxFX1dSSVRFLCAiT3V0cHV0IGZpbGUgd3JpdGUgZXJyb3IgLS0tIG91dCBvZiBkaXNrIHNwYWNlPyIpCitKTUVTU0FHRShKRVJSX0ZSQUNUX1NBTVBMRV9OT1RJTVBMLCAiRnJhY3Rpb25hbCBzYW1wbGluZyBub3QgaW1wbGVtZW50ZWQgeWV0IikKK0pNRVNTQUdFKEpFUlJfSFVGRl9DTEVOX09WRVJGTE9XLCAiSHVmZm1hbiBjb2RlIHNpemUgdGFibGUgb3ZlcmZsb3ciKQorSk1FU1NBR0UoSkVSUl9IVUZGX01JU1NJTkdfQ09ERSwgIk1pc3NpbmcgSHVmZm1hbiBjb2RlIHRhYmxlIGVudHJ5IikKK0pNRVNTQUdFKEpFUlJfSU1BR0VfVE9PX0JJRywgIk1heGltdW0gc3VwcG9ydGVkIGltYWdlIGRpbWVuc2lvbiBpcyAldSBwaXhlbHMiKQorSk1FU1NBR0UoSkVSUl9JTlBVVF9FTVBUWSwgIkVtcHR5IGlucHV0IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9JTlBVVF9FT0YsICJQcmVtYXR1cmUgZW5kIG9mIGlucHV0IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9NSVNNQVRDSEVEX1FVQU5UX1RBQkxFLAorICAgICAgICAgIkNhbm5vdCB0cmFuc2NvZGUgZHVlIHRvIG11bHRpcGxlIHVzZSBvZiBxdWFudGl6YXRpb24gdGFibGUgJWQiKQorSk1FU1NBR0UoSkVSUl9NSVNTSU5HX0RBVEEsICJTY2FuIHNjcmlwdCBkb2VzIG5vdCB0cmFuc21pdCBhbGwgZGF0YSIpCitKTUVTU0FHRShKRVJSX01PREVfQ0hBTkdFLCAiSW52YWxpZCBjb2xvciBxdWFudGl6YXRpb24gbW9kZSBjaGFuZ2UiKQorSk1FU1NBR0UoSkVSUl9OT1RJTVBMLCAiTm90IGltcGxlbWVudGVkIHlldCIpCitKTUVTU0FHRShKRVJSX05PVF9DT01QSUxFRCwgIlJlcXVlc3RlZCBmZWF0dXJlIHdhcyBvbWl0dGVkIGF0IGNvbXBpbGUgdGltZSIpCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorSk1FU1NBR0UoSkVSUl9OT19BUklUSF9UQUJMRSwgIkFyaXRobWV0aWMgdGFibGUgMHglMDJ4IHdhcyBub3QgZGVmaW5lZCIpCisjZW5kaWYKK0pNRVNTQUdFKEpFUlJfTk9fQkFDS0lOR19TVE9SRSwgIkJhY2tpbmcgc3RvcmUgbm90IHN1cHBvcnRlZCIpCitKTUVTU0FHRShKRVJSX05PX0hVRkZfVEFCTEUsICJIdWZmbWFuIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQiKQorSk1FU1NBR0UoSkVSUl9OT19JTUFHRSwgIkpQRUcgZGF0YXN0cmVhbSBjb250YWlucyBubyBpbWFnZSIpCitKTUVTU0FHRShKRVJSX05PX1FVQU5UX1RBQkxFLCAiUXVhbnRpemF0aW9uIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQiKQorSk1FU1NBR0UoSkVSUl9OT19TT0ksICJOb3QgYSBKUEVHIGZpbGU6IHN0YXJ0cyB3aXRoIDB4JTAyeCAweCUwMngiKQorSk1FU1NBR0UoSkVSUl9PVVRfT0ZfTUVNT1JZLCAiSW5zdWZmaWNpZW50IG1lbW9yeSAoY2FzZSAlZCkiKQorSk1FU1NBR0UoSkVSUl9RVUFOVF9DT01QT05FTlRTLAorICAgICAgICAgIkNhbm5vdCBxdWFudGl6ZSBtb3JlIHRoYW4gJWQgY29sb3IgY29tcG9uZW50cyIpCitKTUVTU0FHRShKRVJSX1FVQU5UX0ZFV19DT0xPUlMsICJDYW5ub3QgcXVhbnRpemUgdG8gZmV3ZXIgdGhhbiAlZCBjb2xvcnMiKQorSk1FU1NBR0UoSkVSUl9RVUFOVF9NQU5ZX0NPTE9SUywgIkNhbm5vdCBxdWFudGl6ZSB0byBtb3JlIHRoYW4gJWQgY29sb3JzIikKK0pNRVNTQUdFKEpFUlJfU09GX0RVUExJQ0FURSwgIkludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogdHdvIFNPRiBtYXJrZXJzIikKK0pNRVNTQUdFKEpFUlJfU09GX05PX1NPUywgIkludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogbWlzc2luZyBTT1MgbWFya2VyIikKK0pNRVNTQUdFKEpFUlJfU09GX1VOU1VQUE9SVEVELCAiVW5zdXBwb3J0ZWQgSlBFRyBwcm9jZXNzOiBTT0YgdHlwZSAweCUwMngiKQorSk1FU1NBR0UoSkVSUl9TT0lfRFVQTElDQVRFLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiB0d28gU09JIG1hcmtlcnMiKQorSk1FU1NBR0UoSkVSUl9TT1NfTk9fU09GLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiBTT1MgYmVmb3JlIFNPRiIpCitKTUVTU0FHRShKRVJSX1RGSUxFX0NSRUFURSwgIkZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMiKQorSk1FU1NBR0UoSkVSUl9URklMRV9SRUFELCAiUmVhZCBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9URklMRV9TRUVLLCAiU2VlayBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9URklMRV9XUklURSwKKyAgICAgICAgICJXcml0ZSBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUgLS0tIG91dCBvZiBkaXNrIHNwYWNlPyIpCitKTUVTU0FHRShKRVJSX1RPT19MSVRUTEVfREFUQSwgIkFwcGxpY2F0aW9uIHRyYW5zZmVycmVkIHRvbyBmZXcgc2NhbmxpbmVzIikKK0pNRVNTQUdFKEpFUlJfVU5LTk9XTl9NQVJLRVIsICJVbnN1cHBvcnRlZCBtYXJrZXIgdHlwZSAweCUwMngiKQorSk1FU1NBR0UoSkVSUl9WSVJUVUFMX0JVRywgIlZpcnR1YWwgYXJyYXkgY29udHJvbGxlciBtZXNzZWQgdXAiKQorSk1FU1NBR0UoSkVSUl9XSURUSF9PVkVSRkxPVywgIkltYWdlIHRvbyB3aWRlIGZvciB0aGlzIGltcGxlbWVudGF0aW9uIikKK0pNRVNTQUdFKEpFUlJfWE1TX1JFQUQsICJSZWFkIGZyb20gWE1TIGZhaWxlZCIpCitKTUVTU0FHRShKRVJSX1hNU19XUklURSwgIldyaXRlIHRvIFhNUyBmYWlsZWQiKQorSk1FU1NBR0UoSk1TR19DT1BZUklHSFQsIEpDT1BZUklHSFRfU0hPUlQpCitKTUVTU0FHRShKTVNHX1ZFUlNJT04sIEpWRVJTSU9OKQorSk1FU1NBR0UoSlRSQ18xNkJJVF9UQUJMRVMsCisgICAgICAgICAiQ2F1dGlvbjogcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgdG9vIGNvYXJzZSBmb3IgYmFzZWxpbmUgSlBFRyIpCitKTUVTU0FHRShKVFJDX0FET0JFLAorICAgICAgICAgIkFkb2JlIEFQUDE0IG1hcmtlcjogdmVyc2lvbiAlZCwgZmxhZ3MgMHglMDR4IDB4JTA0eCwgdHJhbnNmb3JtICVkIikKK0pNRVNTQUdFKEpUUkNfQVBQMCwgIlVua25vd24gQVBQMCBtYXJrZXIgKG5vdCBKRklGKSwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfQVBQMTQsICJVbmtub3duIEFQUDE0IG1hcmtlciAobm90IEFkb2JlKSwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfREFDLCAiRGVmaW5lIEFyaXRobWV0aWMgVGFibGUgMHglMDJ4OiAweCUwMngiKQorSk1FU1NBR0UoSlRSQ19ESFQsICJEZWZpbmUgSHVmZm1hbiBUYWJsZSAweCUwMngiKQorSk1FU1NBR0UoSlRSQ19EUVQsICJEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlICVkICBwcmVjaXNpb24gJWQiKQorSk1FU1NBR0UoSlRSQ19EUkksICJEZWZpbmUgUmVzdGFydCBJbnRlcnZhbCAldSIpCitKTUVTU0FHRShKVFJDX0VNU19DTE9TRSwgIkZyZWVkIEVNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSlRSQ19FTVNfT1BFTiwgIk9idGFpbmVkIEVNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSlRSQ19FT0ksICJFbmQgT2YgSW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19IVUZGQklUUywgIiAgICAgICAgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCIpCitKTUVTU0FHRShKVFJDX0pGSUYsICJKRklGIEFQUDAgbWFya2VyOiB2ZXJzaW9uICVkLiUwMmQsIGRlbnNpdHkgJWR4JWQgICVkIikKK0pNRVNTQUdFKEpUUkNfSkZJRl9CQURUSFVNQk5BSUxTSVpFLAorICAgICAgICAgIldhcm5pbmc6IHRodW1ibmFpbCBpbWFnZSBzaXplIGRvZXMgbm90IG1hdGNoIGRhdGEgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfSkZJRl9FWFRFTlNJT04sICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IHR5cGUgMHglMDJ4LCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19KRklGX1RIVU1CTkFJTCwgIiAgICB3aXRoICVkIHggJWQgdGh1bWJuYWlsIGltYWdlIikKK0pNRVNTQUdFKEpUUkNfTUlTQ19NQVJLRVIsICJNaXNjZWxsYW5lb3VzIG1hcmtlciAweCUwMngsIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX1BBUk1MRVNTX01BUktFUiwgIlVuZXhwZWN0ZWQgbWFya2VyIDB4JTAyeCIpCitKTUVTU0FHRShKVFJDX1FVQU5UVkFMUywgIiAgICAgICAgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSIpCitKTUVTU0FHRShKVFJDX1FVQU5UXzNfTkNPTE9SUywgIlF1YW50aXppbmcgdG8gJWQgPSAlZColZColZCBjb2xvcnMiKQorSk1FU1NBR0UoSlRSQ19RVUFOVF9OQ09MT1JTLCAiUXVhbnRpemluZyB0byAlZCBjb2xvcnMiKQorSk1FU1NBR0UoSlRSQ19RVUFOVF9TRUxFQ1RFRCwgIlNlbGVjdGVkICVkIGNvbG9ycyBmb3IgcXVhbnRpemF0aW9uIikKK0pNRVNTQUdFKEpUUkNfUkVDT1ZFUllfQUNUSU9OLCAiQXQgbWFya2VyIDB4JTAyeCwgcmVjb3ZlcnkgYWN0aW9uICVkIikKK0pNRVNTQUdFKEpUUkNfUlNULCAiUlNUJWQiKQorSk1FU1NBR0UoSlRSQ19TTU9PVEhfTk9USU1QTCwKKyAgICAgICAgICJTbW9vdGhpbmcgbm90IHN1cHBvcnRlZCB3aXRoIG5vbnN0YW5kYXJkIHNhbXBsaW5nIHJhdGlvcyIpCitKTUVTU0FHRShKVFJDX1NPRiwgIlN0YXJ0IE9mIEZyYW1lIDB4JTAyeDogd2lkdGg9JXUsIGhlaWdodD0ldSwgY29tcG9uZW50cz0lZCIpCitKTUVTU0FHRShKVFJDX1NPRl9DT01QT05FTlQsICIgICAgQ29tcG9uZW50ICVkOiAlZGh4JWR2IHE9JWQiKQorSk1FU1NBR0UoSlRSQ19TT0ksICJTdGFydCBvZiBJbWFnZSIpCitKTUVTU0FHRShKVFJDX1NPUywgIlN0YXJ0IE9mIFNjYW46ICVkIGNvbXBvbmVudHMiKQorSk1FU1NBR0UoSlRSQ19TT1NfQ09NUE9ORU5ULCAiICAgIENvbXBvbmVudCAlZDogZGM9JWQgYWM9JWQiKQorSk1FU1NBR0UoSlRSQ19TT1NfUEFSQU1TLCAiICBTcz0lZCwgU2U9JWQsIEFoPSVkLCBBbD0lZCIpCitKTUVTU0FHRShKVFJDX1RGSUxFX0NMT1NFLCAiQ2xvc2VkIHRlbXBvcmFyeSBmaWxlICVzIikKK0pNRVNTQUdFKEpUUkNfVEZJTEVfT1BFTiwgIk9wZW5lZCB0ZW1wb3JhcnkgZmlsZSAlcyIpCitKTUVTU0FHRShKVFJDX1RIVU1CX0pQRUcsCisgICAgICAgICAiSkZJRiBleHRlbnNpb24gbWFya2VyOiBKUEVHLWNvbXByZXNzZWQgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19USFVNQl9QQUxFVFRFLAorICAgICAgICAgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogcGFsZXR0ZSB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX1RIVU1CX1JHQiwKKyAgICAgICAgICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IFJHQiB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX1VOS05PV05fSURTLAorICAgICAgICAgIlVucmVjb2duaXplZCBjb21wb25lbnQgSURzICVkICVkICVkLCBhc3N1bWluZyBZQ2JDciIpCitKTUVTU0FHRShKVFJDX1hNU19DTE9TRSwgIkZyZWVkIFhNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSlRSQ19YTVNfT1BFTiwgIk9idGFpbmVkIFhNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSldSTl9BRE9CRV9YRk9STSwgIlVua25vd24gQWRvYmUgY29sb3IgdHJhbnNmb3JtIGNvZGUgJWQiKQorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKK0pNRVNTQUdFKEpXUk5fQVJJVEhfQkFEX0NPREUsICJDb3JydXB0IEpQRUcgZGF0YTogYmFkIGFyaXRobWV0aWMgY29kZSIpCisjZW5kaWYKK0pNRVNTQUdFKEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sCisgICAgICAgICAiSW5jb25zaXN0ZW50IHByb2dyZXNzaW9uIHNlcXVlbmNlIGZvciBjb21wb25lbnQgJWQgY29lZmZpY2llbnQgJWQiKQorSk1FU1NBR0UoSldSTl9FWFRSQU5FT1VTX0RBVEEsCisgICAgICAgICAiQ29ycnVwdCBKUEVHIGRhdGE6ICV1IGV4dHJhbmVvdXMgYnl0ZXMgYmVmb3JlIG1hcmtlciAweCUwMngiKQorSk1FU1NBR0UoSldSTl9ISVRfTUFSS0VSLCAiQ29ycnVwdCBKUEVHIGRhdGE6IHByZW1hdHVyZSBlbmQgb2YgZGF0YSBzZWdtZW50IikKK0pNRVNTQUdFKEpXUk5fSFVGRl9CQURfQ09ERSwgIkNvcnJ1cHQgSlBFRyBkYXRhOiBiYWQgSHVmZm1hbiBjb2RlIikKK0pNRVNTQUdFKEpXUk5fSkZJRl9NQUpPUiwgIldhcm5pbmc6IHVua25vd24gSkZJRiByZXZpc2lvbiBudW1iZXIgJWQuJTAyZCIpCitKTUVTU0FHRShKV1JOX0pQRUdfRU9GLCAiUHJlbWF0dXJlIGVuZCBvZiBKUEVHIGZpbGUiKQorSk1FU1NBR0UoSldSTl9NVVNUX1JFU1lOQywKKyAgICAgICAgICJDb3JydXB0IEpQRUcgZGF0YTogZm91bmQgbWFya2VyIDB4JTAyeCBpbnN0ZWFkIG9mIFJTVCVkIikKK0pNRVNTQUdFKEpXUk5fTk9UX1NFUVVFTlRJQUwsICJJbnZhbGlkIFNPUyBwYXJhbWV0ZXJzIGZvciBzZXF1ZW50aWFsIEpQRUciKQorSk1FU1NBR0UoSldSTl9UT09fTVVDSF9EQVRBLCAiQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIG1hbnkgc2NhbmxpbmVzIikKKyNpZiBKUEVHX0xJQl9WRVJTSU9OIDwgNzAKK0pNRVNTQUdFKEpFUlJfQkFEX0NST1BfU1BFQywgIkludmFsaWQgY3JvcCByZXF1ZXN0IikKKyNpZiBkZWZpbmVkKENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCkgfHwgZGVmaW5lZChEX0FSSVRIX0NPRElOR19TVVBQT1JURUQpCitKTUVTU0FHRShKRVJSX05PX0FSSVRIX1RBQkxFLCAiQXJpdGhtZXRpYyB0YWJsZSAweCUwMnggd2FzIG5vdCBkZWZpbmVkIikKK0pNRVNTQUdFKEpXUk5fQVJJVEhfQkFEX0NPREUsICJDb3JydXB0IEpQRUcgZGF0YTogYmFkIGFyaXRobWV0aWMgY29kZSIpCisjZW5kaWYKKyNlbmRpZgorSk1FU1NBR0UoSldSTl9CT0dVU19JQ0MsICJDb3JydXB0IEpQRUcgZGF0YTogYmFkIElDQyBtYXJrZXIiKQorCisjaWZkZWYgSk1BS0VfRU5VTV9MSVNUCisKKyAgSk1TR19MQVNUTVNHQ09ERQorfSBKX01FU1NBR0VfQ09ERTsKKworI3VuZGVmIEpNQUtFX0VOVU1fTElTVAorI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLworCisvKiBaYXAgSk1FU1NBR0UgbWFjcm8gc28gdGhhdCBmdXR1cmUgcmUtaW5jbHVzaW9ucyBkbyBub3RoaW5nIGJ5IGRlZmF1bHQgKi8KKyN1bmRlZiBKTUVTU0FHRQorCisKKyNpZm5kZWYgSkVSUk9SX0gKKyNkZWZpbmUgSkVSUk9SX0gKKworLyogTWFjcm9zIHRvIHNpbXBsaWZ5IHVzaW5nIHRoZSBlcnJvciBhbmQgdHJhY2UgbWVzc2FnZSBzdHVmZiAqLworLyogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBlaXRoZXIgdHlwZSBvZiBjaW5mbyBwb2ludGVyICovCisKKy8qIEZhdGFsIGVycm9ycyAocHJpbnQgbWVzc2FnZSBhbmQgZXhpdCkgKi8KKyNkZWZpbmUgRVJSRVhJVChjaW5mbywgY29kZSkgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKShjaW5mbykpKQorI2RlZmluZSBFUlJFWElUMShjaW5mbywgY29kZSwgcDEpIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikoY2luZm8pKSkKKyNkZWZpbmUgRVJSRVhJVDIoY2luZm8sIGNvZGUsIHAxLCBwMikgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKShjaW5mbykpKQorI2RlZmluZSBFUlJFWElUMyhjaW5mbywgY29kZSwgcDEsIHAyLCBwMykgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzJdID0gKHAzKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKShjaW5mbykpKQorI2RlZmluZSBFUlJFWElUNChjaW5mbywgY29kZSwgcDEsIHAyLCBwMywgcDQpIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsyXSA9IChwMyksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVszXSA9IChwNCksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikoY2luZm8pKSkKKyNkZWZpbmUgRVJSRVhJVFMoY2luZm8sIGNvZGUsIHN0cikgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgc3RybmNweSgoY2luZm8pLT5lcnItPm1zZ19wYXJtLnMsIChzdHIpLCBKTVNHX1NUUl9QQVJNX01BWCksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikoY2luZm8pKSkKKworI2RlZmluZSBNQUtFU1RNVChzdHVmZikgICAgICAgICBkbyB7IHN0dWZmIH0gd2hpbGUgKDApCisKKy8qIE5vbmZhdGFsIGVycm9ycyAod2UgY2FuIGtlZXAgZ29pbmcsIGJ1dCB0aGUgZGF0YSBpcyBwcm9iYWJseSBjb3JydXB0KSAqLworI2RlZmluZSBXQVJOTVMoY2luZm8sIGNvZGUpIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKShjaW5mbyksIC0xKSkKKyNkZWZpbmUgV0FSTk1TMShjaW5mbywgY29kZSwgcDEpIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKShjaW5mbyksIC0xKSkKKyNkZWZpbmUgV0FSTk1TMihjaW5mbywgY29kZSwgcDEsIHAyKSBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikoY2luZm8pLCAtMSkpCisKKy8qIEluZm9ybWF0aW9uYWwvZGVidWdnaW5nIG1lc3NhZ2VzICovCisjZGVmaW5lIFRSQUNFTVMoY2luZm8sIGx2bCwgY29kZSkgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpKGNpbmZvKSwgKGx2bCkpKQorI2RlZmluZSBUUkFDRU1TMShjaW5mbywgbHZsLCBjb2RlLCBwMSkgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpKGNpbmZvKSwgKGx2bCkpKQorI2RlZmluZSBUUkFDRU1TMihjaW5mbywgbHZsLCBjb2RlLCBwMSwgcDIpIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKShjaW5mbyksIChsdmwpKSkKKyNkZWZpbmUgVFJBQ0VNUzMoY2luZm8sIGx2bCwgY29kZSwgcDEsIHAyLCBwMykgXAorICBNQUtFU1RNVChpbnQgKl9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXAorICAgICAgICAgICBfbXBbMF0gPSAocDEpOyAgX21wWzFdID0gKHAyKTsgIF9tcFsyXSA9IChwMyk7IFwKKyAgICAgICAgICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAorICAgICAgICAgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikoY2luZm8pLCAobHZsKSk7ICkKKyNkZWZpbmUgVFJBQ0VNUzQoY2luZm8sIGx2bCwgY29kZSwgcDEsIHAyLCBwMywgcDQpIFwKKyAgTUFLRVNUTVQoaW50ICpfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKKyAgICAgICAgICAgX21wWzBdID0gKHAxKTsgIF9tcFsxXSA9IChwMik7ICBfbXBbMl0gPSAocDMpOyAgX21wWzNdID0gKHA0KTsgXAorICAgICAgICAgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcCisgICAgICAgICAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKShjaW5mbyksIChsdmwpKTsgKQorI2RlZmluZSBUUkFDRU1TNShjaW5mbywgbHZsLCBjb2RlLCBwMSwgcDIsIHAzLCBwNCwgcDUpIFwKKyAgTUFLRVNUTVQoaW50ICpfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKKyAgICAgICAgICAgX21wWzBdID0gKHAxKTsgIF9tcFsxXSA9IChwMik7ICBfbXBbMl0gPSAocDMpOyAgX21wWzNdID0gKHA0KTsgXAorICAgICAgICAgICBfbXBbNF0gPSAocDUpOyBcCisgICAgICAgICAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKKyAgICAgICAgICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpKGNpbmZvKSwgKGx2bCkpOyApCisjZGVmaW5lIFRSQUNFTVM4KGNpbmZvLCBsdmwsIGNvZGUsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBwOCkgXAorICBNQUtFU1RNVChpbnQgKl9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXAorICAgICAgICAgICBfbXBbMF0gPSAocDEpOyAgX21wWzFdID0gKHAyKTsgIF9tcFsyXSA9IChwMyk7ICBfbXBbM10gPSAocDQpOyBcCisgICAgICAgICAgIF9tcFs0XSA9IChwNSk7ICBfbXBbNV0gPSAocDYpOyAgX21wWzZdID0gKHA3KTsgIF9tcFs3XSA9IChwOCk7IFwKKyAgICAgICAgICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAorICAgICAgICAgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikoY2luZm8pLCAobHZsKSk7ICkKKyNkZWZpbmUgVFJBQ0VNU1MoY2luZm8sIGx2bCwgY29kZSwgc3RyKSBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICBzdHJuY3B5KChjaW5mbyktPmVyci0+bXNnX3Bhcm0ucywgKHN0ciksIEpNU0dfU1RSX1BBUk1fTUFYKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpKGNpbmZvKSwgKGx2bCkpKQorCisjZW5kaWYgLyogSkVSUk9SX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pmZGN0Zmx0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZmRjdGZsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmY2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZmRjdGZsdC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogamZkY3RmbHQuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAqIGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBtb3JlIGFjY3VyYXRlIHRoYW4gZWl0aGVyIG9mIHRoZSBpbnRlZ2VyCisgKiBEQ1QgaW1wbGVtZW50YXRpb25zLiAgSG93ZXZlciwgaXQgbWF5IG5vdCBnaXZlIHRoZSBzYW1lIHJlc3VsdHMgb24gYWxsCisgKiBtYWNoaW5lcyBiZWNhdXNlIG9mIGRpZmZlcmVuY2VzIGluIHJvdW5kb2ZmIGJlaGF2aW9yLiAgU3BlZWQgd2lsbCBkZXBlbmQKKyAqIG9uIHRoZSBoYXJkd2FyZSdzIGZsb2F0aW5nIHBvaW50IGNhcGFjaXR5LgorICoKKyAqIEEgMi1EIERDVCBjYW4gYmUgZG9uZSBieSAxLUQgRENUIG9uIGVhY2ggcm93IGZvbGxvd2VkIGJ5IDEtRCBEQ1QKKyAqIG9uIGVhY2ggY29sdW1uLiAgRGlyZWN0IGFsZ29yaXRobXMgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBjb21wbGV4IGFuZCBzZWVtIG5vdCB0byBiZSBhbnkgZmFzdGVyIHdoZW4gcmVkdWNlZCB0byBjb2RlLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gQXJhaSwgQWd1aSwgYW5kIE5ha2FqaW1hJ3MgYWxnb3JpdGhtIGZvcgorICogc2NhbGVkIERDVC4gIFRoZWlyIG9yaWdpbmFsIHBhcGVyIChUcmFucy4gSUVJQ0UgRS03MSgxMSk6MTA5NSkgaXMgaW4KKyAqIEphcGFuZXNlLCBidXQgdGhlIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gdGhlIFBlbm5lYmFrZXIgJiBNaXRjaGVsbAorICogSlBFRyB0ZXh0Ym9vayAoc2VlIFJFRkVSRU5DRVMgc2VjdGlvbiBpbiBmaWxlIFJFQURNRS5pamcpLiAgVGhlIGZvbGxvd2luZworICogY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiBmaWd1cmUgNC04IGluIFAmTS4KKyAqIFdoaWxlIGFuIDgtcG9pbnQgRENUIGNhbm5vdCBiZSBkb25lIGluIGxlc3MgdGhhbiAxMSBtdWx0aXBsaWVzLCBpdCBpcworICogcG9zc2libGUgdG8gYXJyYW5nZSB0aGUgY29tcHV0YXRpb24gc28gdGhhdCBtYW55IG9mIHRoZSBtdWx0aXBsaWVzIGFyZQorICogc2ltcGxlIHNjYWxpbmdzIG9mIHRoZSBmaW5hbCBvdXRwdXRzLiAgVGhlc2UgbXVsdGlwbGllcyBjYW4gdGhlbiBiZQorICogZm9sZGVkIGludG8gdGhlIG11bHRpcGxpY2F0aW9ucyBvciBkaXZpc2lvbnMgYnkgdGhlIEpQRUcgcXVhbnRpemF0aW9uCisgKiB0YWJsZSBlbnRyaWVzLiAgVGhlIEFBJk4gbWV0aG9kIGxlYXZlcyBvbmx5IDUgbXVsdGlwbGllcyBhbmQgMjkgYWRkcworICogdG8gYmUgZG9uZSBpbiB0aGUgRENUIGl0c2VsZi4KKyAqIFRoZSBwcmltYXJ5IGRpc2FkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHdpdGggYSBmaXhlZC1wb2ludAorICogaW1wbGVtZW50YXRpb24sIGFjY3VyYWN5IGlzIGxvc3QgZHVlIHRvIGltcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAqIHNjYWxlZCBxdWFudGl6YXRpb24gdmFsdWVzLiAgSG93ZXZlciwgdGhhdCBwcm9ibGVtIGRvZXMgbm90IGFyaXNlIGlmCisgKiB3ZSB1c2UgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisKKworLyoKKyAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorICovCisKKyNpZiBEQ1RTSVpFICE9IDgKKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworI2VuZGlmCisKKworLyoKKyAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19mZGN0X2Zsb2F0KEZBU1RfRkxPQVQgKmRhdGEpCit7CisgIEZBU1RfRkxPQVQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsKKyAgRkFTVF9GTE9BVCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKKyAgRkFTVF9GTE9BVCB6MSwgejIsIHozLCB6NCwgejUsIHoxMSwgejEzOworICBGQVNUX0ZMT0FUICpkYXRhcHRyOworICBpbnQgY3RyOworCisgIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLworCisgIGRhdGFwdHIgPSBkYXRhOworICBmb3IgKGN0ciA9IERDVFNJWkUgLSAxOyBjdHIgPj0gMDsgY3RyLS0pIHsKKyAgICB0bXAwID0gZGF0YXB0clswXSArIGRhdGFwdHJbN107CisgICAgdG1wNyA9IGRhdGFwdHJbMF0gLSBkYXRhcHRyWzddOworICAgIHRtcDEgPSBkYXRhcHRyWzFdICsgZGF0YXB0cls2XTsKKyAgICB0bXA2ID0gZGF0YXB0clsxXSAtIGRhdGFwdHJbNl07CisgICAgdG1wMiA9IGRhdGFwdHJbMl0gKyBkYXRhcHRyWzVdOworICAgIHRtcDUgPSBkYXRhcHRyWzJdIC0gZGF0YXB0cls1XTsKKyAgICB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07CisgICAgdG1wNCA9IGRhdGFwdHJbM10gLSBkYXRhcHRyWzRdOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOyAgICAgICAgLyogcGhhc2UgMiAqLworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOworCisgICAgZGF0YXB0clswXSA9IHRtcDEwICsgdG1wMTE7IC8qIHBoYXNlIDMgKi8KKyAgICBkYXRhcHRyWzRdID0gdG1wMTAgLSB0bXAxMTsKKworICAgIHoxID0gKHRtcDEyICsgdG1wMTMpICogKChGQVNUX0ZMT0FUKTAuNzA3MTA2NzgxKTsgLyogYzQgKi8KKyAgICBkYXRhcHRyWzJdID0gdG1wMTMgKyB6MTsgICAgLyogcGhhc2UgNSAqLworICAgIGRhdGFwdHJbNl0gPSB0bXAxMyAtIHoxOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHRtcDEwID0gdG1wNCArIHRtcDU7ICAgICAgICAvKiBwaGFzZSAyICovCisgICAgdG1wMTEgPSB0bXA1ICsgdG1wNjsKKyAgICB0bXAxMiA9IHRtcDYgKyB0bXA3OworCisgICAgLyogVGhlIHJvdGF0b3IgaXMgbW9kaWZpZWQgZnJvbSBmaWcgNC04IHRvIGF2b2lkIGV4dHJhIG5lZ2F0aW9ucy4gKi8KKyAgICB6NSA9ICh0bXAxMCAtIHRtcDEyKSAqICgoRkFTVF9GTE9BVCkwLjM4MjY4MzQzMyk7IC8qIGM2ICovCisgICAgejIgPSAoKEZBU1RfRkxPQVQpMC41NDExOTYxMDApICogdG1wMTAgKyB6NTsgLyogYzItYzYgKi8KKyAgICB6NCA9ICgoRkFTVF9GTE9BVCkxLjMwNjU2Mjk2NSkgKiB0bXAxMiArIHo1OyAvKiBjMitjNiAqLworICAgIHozID0gdG1wMTEgKiAoKEZBU1RfRkxPQVQpMC43MDcxMDY3ODEpOyAvKiBjNCAqLworCisgICAgejExID0gdG1wNyArIHozOyAgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KKyAgICB6MTMgPSB0bXA3IC0gejM7CisKKyAgICBkYXRhcHRyWzVdID0gejEzICsgejI7ICAgICAgLyogcGhhc2UgNiAqLworICAgIGRhdGFwdHJbM10gPSB6MTMgLSB6MjsKKyAgICBkYXRhcHRyWzFdID0gejExICsgejQ7CisgICAgZGF0YXB0cls3XSA9IHoxMSAtIHo0OworCisgICAgZGF0YXB0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuICovCisKKyAgZGF0YXB0ciA9IGRhdGE7CisgIGZvciAoY3RyID0gRENUU0laRSAtIDE7IGN0ciA+PSAwOyBjdHItLSkgeworICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUgKiAwXSArIGRhdGFwdHJbRENUU0laRSAqIDddOworICAgIHRtcDcgPSBkYXRhcHRyW0RDVFNJWkUgKiAwXSAtIGRhdGFwdHJbRENUU0laRSAqIDddOworICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUgKiAxXSArIGRhdGFwdHJbRENUU0laRSAqIDZdOworICAgIHRtcDYgPSBkYXRhcHRyW0RDVFNJWkUgKiAxXSAtIGRhdGFwdHJbRENUU0laRSAqIDZdOworICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUgKiAyXSArIGRhdGFwdHJbRENUU0laRSAqIDVdOworICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUgKiAyXSAtIGRhdGFwdHJbRENUU0laRSAqIDVdOworICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUgKiAzXSArIGRhdGFwdHJbRENUU0laRSAqIDRdOworICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUgKiAzXSAtIGRhdGFwdHJbRENUU0laRSAqIDRdOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOyAgICAgICAgLyogcGhhc2UgMiAqLworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOworCisgICAgZGF0YXB0cltEQ1RTSVpFICogMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCisgICAgZGF0YXB0cltEQ1RTSVpFICogNF0gPSB0bXAxMCAtIHRtcDExOworCisgICAgejEgPSAodG1wMTIgKyB0bXAxMykgKiAoKEZBU1RfRkxPQVQpMC43MDcxMDY3ODEpOyAvKiBjNCAqLworICAgIGRhdGFwdHJbRENUU0laRSAqIDJdID0gdG1wMTMgKyB6MTsgLyogcGhhc2UgNSAqLworICAgIGRhdGFwdHJbRENUU0laRSAqIDZdID0gdG1wMTMgLSB6MTsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXAxMCA9IHRtcDQgKyB0bXA1OyAgICAgICAgLyogcGhhc2UgMiAqLworICAgIHRtcDExID0gdG1wNSArIHRtcDY7CisgICAgdG1wMTIgPSB0bXA2ICsgdG1wNzsKKworICAgIC8qIFRoZSByb3RhdG9yIGlzIG1vZGlmaWVkIGZyb20gZmlnIDQtOCB0byBhdm9pZCBleHRyYSBuZWdhdGlvbnMuICovCisgICAgejUgPSAodG1wMTAgLSB0bXAxMikgKiAoKEZBU1RfRkxPQVQpMC4zODI2ODM0MzMpOyAvKiBjNiAqLworICAgIHoyID0gKChGQVNUX0ZMT0FUKTAuNTQxMTk2MTAwKSAqIHRtcDEwICsgejU7IC8qIGMyLWM2ICovCisgICAgejQgPSAoKEZBU1RfRkxPQVQpMS4zMDY1NjI5NjUpICogdG1wMTIgKyB6NTsgLyogYzIrYzYgKi8KKyAgICB6MyA9IHRtcDExICogKChGQVNUX0ZMT0FUKTAuNzA3MTA2NzgxKTsgLyogYzQgKi8KKworICAgIHoxMSA9IHRtcDcgKyB6MzsgICAgICAgICAgICAvKiBwaGFzZSA1ICovCisgICAgejEzID0gdG1wNyAtIHozOworCisgICAgZGF0YXB0cltEQ1RTSVpFICogNV0gPSB6MTMgKyB6MjsgLyogcGhhc2UgNiAqLworICAgIGRhdGFwdHJbRENUU0laRSAqIDNdID0gejEzIC0gejI7CisgICAgZGF0YXB0cltEQ1RTSVpFICogMV0gPSB6MTEgKyB6NDsKKyAgICBkYXRhcHRyW0RDVFNJWkUgKiA3XSA9IHoxMSAtIHo0OworCisgICAgZGF0YXB0cisrOyAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLworICB9Cit9CisKKyNlbmRpZiAvKiBEQ1RfRkxPQVRfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qZmRjdGZzdC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamZkY3Rmc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzljZTBkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamZkY3Rmc3QuYwpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIGpmZGN0ZnN0LmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuCisgKgorICogQSAyLUQgRENUIGNhbiBiZSBkb25lIGJ5IDEtRCBEQ1Qgb24gZWFjaCByb3cgZm9sbG93ZWQgYnkgMS1EIERDVAorICogb24gZWFjaCBjb2x1bW4uICBEaXJlY3QgYWxnb3JpdGhtcyBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZQorICogbXVjaCBtb3JlIGNvbXBsZXggYW5kIHNlZW0gbm90IHRvIGJlIGFueSBmYXN0ZXIgd2hlbiByZWR1Y2VkIHRvIGNvZGUuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBBcmFpLCBBZ3VpLCBhbmQgTmFrYWppbWEncyBhbGdvcml0aG0gZm9yCisgKiBzY2FsZWQgRENULiAgVGhlaXIgb3JpZ2luYWwgcGFwZXIgKFRyYW5zLiBJRUlDRSBFLTcxKDExKToxMDk1KSBpcyBpbgorICogSmFwYW5lc2UsIGJ1dCB0aGUgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiB0aGUgUGVubmViYWtlciAmIE1pdGNoZWxsCisgKiBKUEVHIHRleHRib29rIChzZWUgUkVGRVJFTkNFUyBzZWN0aW9uIGluIGZpbGUgUkVBRE1FLmlqZykuICBUaGUgZm9sbG93aW5nCisgKiBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uIGZpZ3VyZSA0LTggaW4gUCZNLgorICogV2hpbGUgYW4gOC1wb2ludCBEQ1QgY2Fubm90IGJlIGRvbmUgaW4gbGVzcyB0aGFuIDExIG11bHRpcGxpZXMsIGl0IGlzCisgKiBwb3NzaWJsZSB0byBhcnJhbmdlIHRoZSBjb21wdXRhdGlvbiBzbyB0aGF0IG1hbnkgb2YgdGhlIG11bHRpcGxpZXMgYXJlCisgKiBzaW1wbGUgc2NhbGluZ3Mgb2YgdGhlIGZpbmFsIG91dHB1dHMuICBUaGVzZSBtdWx0aXBsaWVzIGNhbiB0aGVuIGJlCisgKiBmb2xkZWQgaW50byB0aGUgbXVsdGlwbGljYXRpb25zIG9yIGRpdmlzaW9ucyBieSB0aGUgSlBFRyBxdWFudGl6YXRpb24KKyAqIHRhYmxlIGVudHJpZXMuICBUaGUgQUEmTiBtZXRob2QgbGVhdmVzIG9ubHkgNSBtdWx0aXBsaWVzIGFuZCAyOSBhZGRzCisgKiB0byBiZSBkb25lIGluIHRoZSBEQ1QgaXRzZWxmLgorICogVGhlIHByaW1hcnkgZGlzYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzIHRoYXQgd2l0aCBmaXhlZC1wb2ludCBtYXRoLAorICogYWNjdXJhY3kgaXMgbG9zdCBkdWUgdG8gaW1wcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2FsZWQKKyAqIHF1YW50aXphdGlvbiB2YWx1ZXMuICBUaGUgc21hbGxlciB0aGUgcXVhbnRpemF0aW9uIHRhYmxlIGVudHJ5LCB0aGUgbGVzcworICogcHJlY2lzZSB0aGUgc2NhbGVkIHZhbHVlLCBzbyB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgd29yc2Ugd2l0aCBoaWdoLQorICogcXVhbGl0eS1zZXR0aW5nIGZpbGVzIHRoYW4gd2l0aCBsb3ctcXVhbGl0eSBvbmVzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKworI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKworCisvKgorICogVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCisgKi8KKworI2lmIERDVFNJWkUgIT0gOAorICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisjZW5kaWYKKworCisvKiBTY2FsaW5nIGRlY2lzaW9ucyBhcmUgZ2VuZXJhbGx5IHRoZSBzYW1lIGFzIGluIHRoZSBMTCZNIGFsZ29yaXRobTsKKyAqIHNlZSBqZmRjdGludC5jIGZvciBtb3JlIGRldGFpbHMuICBIb3dldmVyLCB3ZSBjaG9vc2UgdG8gZGVzY2FsZQorICogKHJpZ2h0IHNoaWZ0KSBtdWx0aXBsaWNhdGlvbiBwcm9kdWN0cyBhcyBzb29uIGFzIHRoZXkgYXJlIGZvcm1lZCwKKyAqIHJhdGhlciB0aGFuIGNhcnJ5aW5nIGFkZGl0aW9uYWwgZnJhY3Rpb25hbCBiaXRzIGludG8gc3Vic2VxdWVudCBhZGRpdGlvbnMuCisgKiBUaGlzIGNvbXByb21pc2VzIGFjY3VyYWN5IHNsaWdodGx5LCBidXQgaXQgbGV0cyB1cyBzYXZlIGEgZmV3IHNoaWZ0cy4KKyAqIE1vcmUgaW1wb3J0YW50bHksIDE2LWJpdCBhcml0aG1ldGljIGlzIHRoZW4gYWRlcXVhdGUgKGZvciA4LWJpdCBzYW1wbGVzKQorICogZXZlcnl3aGVyZSBleGNlcHQgaW4gdGhlIG11bHRpcGxpY2F0aW9ucyBwcm9wZXI7IHRoaXMgc2F2ZXMgYSBnb29kIGRlYWwKKyAqIG9mIHdvcmsgb24gMTYtYml0LWludCBtYWNoaW5lcy4KKyAqCisgKiBBZ2FpbiB0byBzYXZlIGEgZmV3IHNoaWZ0cywgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIGJldHdlZW4gcGFzcyAxIGFuZAorICogcGFzcyAyIGFyZSBub3QgdXBzY2FsZWQsIGJ1dCBhcmUgcmVwcmVzZW50ZWQgb25seSB0byBpbnRlZ3JhbCBwcmVjaXNpb24uCisgKgorICogQSBmaW5hbCBjb21wcm9taXNlIGlzIHRvIHJlcHJlc2VudCB0aGUgbXVsdGlwbGljYXRpdmUgY29uc3RhbnRzIHRvIG9ubHkKKyAqIDggZnJhY3Rpb25hbCBiaXRzLCByYXRoZXIgdGhhbiAxMy4gIFRoaXMgc2F2ZXMgc29tZSBzaGlmdGluZyB3b3JrIG9uIHNvbWUKKyAqIG1hY2hpbmVzLCBhbmQgbWF5IGFsc28gcmVkdWNlIHRoZSBjb3N0IG9mIG11bHRpcGxpY2F0aW9uIChzaW5jZSB0aGVyZQorICogYXJlIGZld2VyIG9uZS1iaXRzIGluIHRoZSBjb25zdGFudHMpLgorICovCisKKyNkZWZpbmUgQ09OU1RfQklUUyAgOAorCisKKy8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cworICogY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCisgKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLgorICogSWYgeW91IGNoYW5nZSBDT05TVF9CSVRTIHlvdSBtYXkgd2FudCB0byBhZGQgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogKFdpdGggYSByZWFzb25hYmxlIEMgY29tcGlsZXIsIHlvdSBjYW4ganVzdCByZWx5IG9uIHRoZSBGSVgoKSBtYWNyby4uLikKKyAqLworCisjaWYgQ09OU1RfQklUUyA9PSA4CisjZGVmaW5lIEZJWF8wXzM4MjY4MzQzMyAgKChKTE9ORyk5OCkgICAgICAgICAgICAvKiBGSVgoMC4zODI2ODM0MzMpICovCisjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMCAgKChKTE9ORykxMzkpICAgICAgICAgICAvKiBGSVgoMC41NDExOTYxMDApICovCisjZGVmaW5lIEZJWF8wXzcwNzEwNjc4MSAgKChKTE9ORykxODEpICAgICAgICAgICAvKiBGSVgoMC43MDcxMDY3ODEpICovCisjZGVmaW5lIEZJWF8xXzMwNjU2Mjk2NSAgKChKTE9ORykzMzQpICAgICAgICAgICAvKiBGSVgoMS4zMDY1NjI5NjUpICovCisjZWxzZQorI2RlZmluZSBGSVhfMF8zODI2ODM0MzMgIEZJWCgwLjM4MjY4MzQzMykKKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICBGSVgoMC41NDExOTYxMDApCisjZGVmaW5lIEZJWF8wXzcwNzEwNjc4MSAgRklYKDAuNzA3MTA2NzgxKQorI2RlZmluZSBGSVhfMV8zMDY1NjI5NjUgIEZJWCgxLjMwNjU2Mjk2NSkKKyNlbmRpZgorCisKKy8qIFdlIGNhbiBnYWluIGEgbGl0dGxlIG1vcmUgc3BlZWQsIHdpdGggYSBmdXJ0aGVyIGNvbXByb21pc2UgaW4gYWNjdXJhY3ksCisgKiBieSBvbWl0dGluZyB0aGUgYWRkaXRpb24gaW4gYSBkZXNjYWxpbmcgc2hpZnQuICBUaGlzIHlpZWxkcyBhbiBpbmNvcnJlY3RseQorICogcm91bmRlZCByZXN1bHQgaGFsZiB0aGUgdGltZS4uLgorICovCisKKyNpZm5kZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HCisjdW5kZWYgREVTQ0FMRQorI2RlZmluZSBERVNDQUxFKHgsIG4pICBSSUdIVF9TSElGVCh4LCBuKQorI2VuZGlmCisKKworLyogTXVsdGlwbHkgYSBEQ1RFTEVNIHZhcmlhYmxlIGJ5IGFuIEpMT05HIGNvbnN0YW50LCBhbmQgaW1tZWRpYXRlbHkKKyAqIGRlc2NhbGUgdG8geWllbGQgYSBEQ1RFTEVNIHJlc3VsdC4KKyAqLworCisjZGVmaW5lIE1VTFRJUExZKHZhciwgY29uc3QpICAoKERDVEVMRU0pREVTQ0FMRSgodmFyKSAqIChjb25zdCksIENPTlNUX0JJVFMpKQorCisKKy8qCisgKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZmRjdF9pZmFzdChEQ1RFTEVNICpkYXRhKQoreworICBEQ1RFTEVNIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CisgIERDVEVMRU0gdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7CisgIERDVEVMRU0gejEsIHoyLCB6MywgejQsIHo1LCB6MTEsIHoxMzsKKyAgRENURUxFTSAqZGF0YXB0cjsKKyAgaW50IGN0cjsKKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KKworICBkYXRhcHRyID0gZGF0YTsKKyAgZm9yIChjdHIgPSBEQ1RTSVpFIC0gMTsgY3RyID49IDA7IGN0ci0tKSB7CisgICAgdG1wMCA9IGRhdGFwdHJbMF0gKyBkYXRhcHRyWzddOworICAgIHRtcDcgPSBkYXRhcHRyWzBdIC0gZGF0YXB0cls3XTsKKyAgICB0bXAxID0gZGF0YXB0clsxXSArIGRhdGFwdHJbNl07CisgICAgdG1wNiA9IGRhdGFwdHJbMV0gLSBkYXRhcHRyWzZdOworICAgIHRtcDIgPSBkYXRhcHRyWzJdICsgZGF0YXB0cls1XTsKKyAgICB0bXA1ID0gZGF0YXB0clsyXSAtIGRhdGFwdHJbNV07CisgICAgdG1wMyA9IGRhdGFwdHJbM10gKyBkYXRhcHRyWzRdOworICAgIHRtcDQgPSBkYXRhcHRyWzNdIC0gZGF0YXB0cls0XTsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsgICAgICAgIC8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOworICAgIHRtcDExID0gdG1wMSArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKKworICAgIGRhdGFwdHJbMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCisgICAgZGF0YXB0cls0XSA9IHRtcDEwIC0gdG1wMTE7CisKKyAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCisgICAgZGF0YXB0clsyXSA9IHRtcDEzICsgejE7ICAgIC8qIHBoYXNlIDUgKi8KKyAgICBkYXRhcHRyWzZdID0gdG1wMTMgLSB6MTsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXAxMCA9IHRtcDQgKyB0bXA1OyAgICAgICAgLyogcGhhc2UgMiAqLworICAgIHRtcDExID0gdG1wNSArIHRtcDY7CisgICAgdG1wMTIgPSB0bXA2ICsgdG1wNzsKKworICAgIC8qIFRoZSByb3RhdG9yIGlzIG1vZGlmaWVkIGZyb20gZmlnIDQtOCB0byBhdm9pZCBleHRyYSBuZWdhdGlvbnMuICovCisgICAgejUgPSBNVUxUSVBMWSh0bXAxMCAtIHRtcDEyLCBGSVhfMF8zODI2ODM0MzMpOyAvKiBjNiAqLworICAgIHoyID0gTVVMVElQTFkodG1wMTAsIEZJWF8wXzU0MTE5NjEwMCkgKyB6NTsgLyogYzItYzYgKi8KKyAgICB6NCA9IE1VTFRJUExZKHRtcDEyLCBGSVhfMV8zMDY1NjI5NjUpICsgejU7IC8qIGMyK2M2ICovCisgICAgejMgPSBNVUxUSVBMWSh0bXAxMSwgRklYXzBfNzA3MTA2NzgxKTsgLyogYzQgKi8KKworICAgIHoxMSA9IHRtcDcgKyB6MzsgICAgICAgICAgICAvKiBwaGFzZSA1ICovCisgICAgejEzID0gdG1wNyAtIHozOworCisgICAgZGF0YXB0cls1XSA9IHoxMyArIHoyOyAgICAgIC8qIHBoYXNlIDYgKi8KKyAgICBkYXRhcHRyWzNdID0gejEzIC0gejI7CisgICAgZGF0YXB0clsxXSA9IHoxMSArIHo0OworICAgIGRhdGFwdHJbN10gPSB6MTEgLSB6NDsKKworICAgIGRhdGFwdHIgKz0gRENUU0laRTsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLiAqLworCisgIGRhdGFwdHIgPSBkYXRhOworICBmb3IgKGN0ciA9IERDVFNJWkUgLSAxOyBjdHIgPj0gMDsgY3RyLS0pIHsKKyAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFICogMF0gKyBkYXRhcHRyW0RDVFNJWkUgKiA3XTsKKyAgICB0bXA3ID0gZGF0YXB0cltEQ1RTSVpFICogMF0gLSBkYXRhcHRyW0RDVFNJWkUgKiA3XTsKKyAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFICogMV0gKyBkYXRhcHRyW0RDVFNJWkUgKiA2XTsKKyAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFICogMV0gLSBkYXRhcHRyW0RDVFNJWkUgKiA2XTsKKyAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFICogMl0gKyBkYXRhcHRyW0RDVFNJWkUgKiA1XTsKKyAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFICogMl0gLSBkYXRhcHRyW0RDVFNJWkUgKiA1XTsKKyAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFICogM10gKyBkYXRhcHRyW0RDVFNJWkUgKiA0XTsKKyAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFICogM10gLSBkYXRhcHRyW0RDVFNJWkUgKiA0XTsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsgICAgICAgIC8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOworICAgIHRtcDExID0gdG1wMSArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKKworICAgIGRhdGFwdHJbRENUU0laRSAqIDBdID0gdG1wMTAgKyB0bXAxMTsgLyogcGhhc2UgMyAqLworICAgIGRhdGFwdHJbRENUU0laRSAqIDRdID0gdG1wMTAgLSB0bXAxMTsKKworICAgIHoxID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYXzBfNzA3MTA2NzgxKTsgLyogYzQgKi8KKyAgICBkYXRhcHRyW0RDVFNJWkUgKiAyXSA9IHRtcDEzICsgejE7IC8qIHBoYXNlIDUgKi8KKyAgICBkYXRhcHRyW0RDVFNJWkUgKiA2XSA9IHRtcDEzIC0gejE7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgdG1wMTAgPSB0bXA0ICsgdG1wNTsgICAgICAgIC8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMSA9IHRtcDUgKyB0bXA2OworICAgIHRtcDEyID0gdG1wNiArIHRtcDc7CisKKyAgICAvKiBUaGUgcm90YXRvciBpcyBtb2RpZmllZCBmcm9tIGZpZyA0LTggdG8gYXZvaWQgZXh0cmEgbmVnYXRpb25zLiAqLworICAgIHo1ID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYXzBfMzgyNjgzNDMzKTsgLyogYzYgKi8KKyAgICB6MiA9IE1VTFRJUExZKHRtcDEwLCBGSVhfMF81NDExOTYxMDApICsgejU7IC8qIGMyLWM2ICovCisgICAgejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KSArIHo1OyAvKiBjMitjNiAqLworICAgIHozID0gTVVMVElQTFkodG1wMTEsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCisKKyAgICB6MTEgPSB0bXA3ICsgejM7ICAgICAgICAgICAgLyogcGhhc2UgNSAqLworICAgIHoxMyA9IHRtcDcgLSB6MzsKKworICAgIGRhdGFwdHJbRENUU0laRSAqIDVdID0gejEzICsgejI7IC8qIHBoYXNlIDYgKi8KKyAgICBkYXRhcHRyW0RDVFNJWkUgKiAzXSA9IHoxMyAtIHoyOworICAgIGRhdGFwdHJbRENUU0laRSAqIDFdID0gejExICsgejQ7CisgICAgZGF0YXB0cltEQ1RTSVpFICogN10gPSB6MTEgLSB6NDsKKworICAgIGRhdGFwdHIrKzsgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0lGQVNUX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamZkY3RpbnQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pmZGN0aW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzOTFhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pmZGN0aW50LmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBqZmRjdGludC5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuCisgKgorICogQSAyLUQgRENUIGNhbiBiZSBkb25lIGJ5IDEtRCBEQ1Qgb24gZWFjaCByb3cgZm9sbG93ZWQgYnkgMS1EIERDVAorICogb24gZWFjaCBjb2x1bW4uICBEaXJlY3QgYWxnb3JpdGhtcyBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZQorICogbXVjaCBtb3JlIGNvbXBsZXggYW5kIHNlZW0gbm90IHRvIGJlIGFueSBmYXN0ZXIgd2hlbiByZWR1Y2VkIHRvIGNvZGUuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCisgKiAgIEMuIExvZWZmbGVyLCBBLiBMaWd0ZW5iZXJnIGFuZCBHLiBNb3NjaHl0eiwgIlByYWN0aWNhbCBGYXN0IDEtRCBEQ1QKKyAqICAgQWxnb3JpdGhtcyB3aXRoIDExIE11bHRpcGxpY2F0aW9ucyIsIFByb2MuIEludCdsLiBDb25mLiBvbiBBY291c3RpY3MsCisgKiAgIFNwZWVjaCwgYW5kIFNpZ25hbCBQcm9jZXNzaW5nIDE5ODkgKElDQVNTUCAnODkpLCBwcC4gOTg4LTk5MS4KKyAqIFRoZSBwcmltYXJ5IGFsZ29yaXRobSBkZXNjcmliZWQgdGhlcmUgdXNlcyAxMSBtdWx0aXBsaWVzIGFuZCAyOSBhZGRzLgorICogV2UgdXNlIHRoZWlyIGFsdGVybmF0ZSBtZXRob2Qgd2l0aCAxMiBtdWx0aXBsaWVzIGFuZCAzMiBhZGRzLgorICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIGRhdGEgcGF0aCBjb250YWlucyBtb3JlIHRoYW4gb25lCisgKiBtdWx0aXBsaWNhdGlvbjsgdGhpcyBhbGxvd3MgYSB2ZXJ5IHNpbXBsZSBhbmQgYWNjdXJhdGUgaW1wbGVtZW50YXRpb24gaW4KKyAqIHNjYWxlZCBmaXhlZC1wb2ludCBhcml0aG1ldGljLCB3aXRoIGEgbWluaW1hbCBudW1iZXIgb2Ygc2hpZnRzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKworCisvKgorICogVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCisgKi8KKworI2lmIERDVFNJWkUgIT0gOAorICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisjZW5kaWYKKworCisvKgorICogVGhlIHBvb3Agb24gdGhpcyBzY2FsaW5nIHN0dWZmIGlzIGFzIGZvbGxvd3M6CisgKgorICogRWFjaCAxLUQgRENUIHN0ZXAgcHJvZHVjZXMgb3V0cHV0cyB3aGljaCBhcmUgYSBmYWN0b3Igb2Ygc3FydChOKQorICogbGFyZ2VyIHRoYW4gdGhlIHRydWUgRENUIG91dHB1dHMuICBUaGUgZmluYWwgb3V0cHV0cyBhcmUgdGhlcmVmb3JlCisgKiBhIGZhY3RvciBvZiBOIGxhcmdlciB0aGFuIGRlc2lyZWQ7IHNpbmNlIE49OCB0aGlzIGNhbiBiZSBjdXJlZCBieQorICogYSBzaW1wbGUgcmlnaHQgc2hpZnQgYXQgdGhlIGVuZCBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGFkdmFudGFnZSBvZgorICogdGhpcyBhcnJhbmdlbWVudCBpcyB0aGF0IHdlIHNhdmUgdHdvIG11bHRpcGxpY2F0aW9ucyBwZXIgMS1EIERDVCwKKyAqIGJlY2F1c2UgdGhlIHkwIGFuZCB5NCBvdXRwdXRzIG5lZWQgbm90IGJlIGRpdmlkZWQgYnkgc3FydChOKS4KKyAqIEluIHRoZSBJSkcgY29kZSwgdGhpcyBmYWN0b3Igb2YgOCBpcyByZW1vdmVkIGJ5IHRoZSBxdWFudGl6YXRpb24gc3RlcAorICogKGluIGpjZGN0bWdyLmMpLCBOT1QgaW4gdGhpcyBtb2R1bGUuCisgKgorICogV2UgaGF2ZSB0byBkbyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gb2YgdGhlIGludGVnZXIgaW5wdXRzLCB3aGljaAorICogaXMgbm8gcHJvYmxlbSwgYW5kIG11bHRpcGxpY2F0aW9uIGJ5IGZyYWN0aW9uYWwgY29uc3RhbnRzLCB3aGljaCBpcworICogYSBwcm9ibGVtIHRvIGRvIGluIGludGVnZXIgYXJpdGhtZXRpYy4gIFdlIG11bHRpcGx5IGFsbCB0aGUgY29uc3RhbnRzCisgKiBieSBDT05TVF9TQ0FMRSBhbmQgY29udmVydCB0aGVtIHRvIGludGVnZXIgY29uc3RhbnRzICh0aHVzIHJldGFpbmluZworICogQ09OU1RfQklUUyBiaXRzIG9mIHByZWNpc2lvbiBpbiB0aGUgY29uc3RhbnRzKS4gIEFmdGVyIGRvaW5nIGEKKyAqIG11bHRpcGxpY2F0aW9uIHdlIGhhdmUgdG8gZGl2aWRlIHRoZSBwcm9kdWN0IGJ5IENPTlNUX1NDQUxFLCB3aXRoIHByb3BlcgorICogcm91bmRpbmcsIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb3V0cHV0LiAgVGhpcyBkaXZpc2lvbiBjYW4gYmUgZG9uZQorICogY2hlYXBseSBhcyBhIHJpZ2h0IHNoaWZ0IG9mIENPTlNUX0JJVFMgYml0cy4gIFdlIHBvc3Rwb25lIHNoaWZ0aW5nCisgKiBhcyBsb25nIGFzIHBvc3NpYmxlIHNvIHRoYXQgcGFydGlhbCBzdW1zIGNhbiBiZSBhZGRlZCB0b2dldGhlciB3aXRoCisgKiBmdWxsIGZyYWN0aW9uYWwgcHJlY2lzaW9uLgorICoKKyAqIFRoZSBvdXRwdXRzIG9mIHRoZSBmaXJzdCBwYXNzIGFyZSBzY2FsZWQgdXAgYnkgUEFTUzFfQklUUyBiaXRzIHNvIHRoYXQKKyAqIHRoZXkgYXJlIHJlcHJlc2VudGVkIHRvIGJldHRlci10aGFuLWludGVncmFsIHByZWNpc2lvbi4gIFRoZXNlIG91dHB1dHMKKyAqIHJlcXVpcmUgQklUU19JTl9KU0FNUExFICsgUEFTUzFfQklUUyArIDMgYml0czsgdGhpcyBmaXRzIGluIGEgMTYtYml0IHdvcmQKKyAqIHdpdGggdGhlIHJlY29tbWVuZGVkIHNjYWxpbmcuICAoRm9yIDEyLWJpdCBzYW1wbGUgZGF0YSwgdGhlIGludGVybWVkaWF0ZQorICogYXJyYXkgaXMgSkxPTkcgYW55d2F5LikKKyAqCisgKiBUbyBhdm9pZCBvdmVyZmxvdyBvZiB0aGUgMzItYml0IGludGVybWVkaWF0ZSByZXN1bHRzIGluIHBhc3MgMiwgd2UgbXVzdAorICogaGF2ZSBCSVRTX0lOX0pTQU1QTEUgKyBDT05TVF9CSVRTICsgUEFTUzFfQklUUyA8PSAyNi4gIEVycm9yIGFuYWx5c2lzCisgKiBzaG93cyB0aGF0IHRoZSB2YWx1ZXMgZ2l2ZW4gYmVsb3cgYXJlIHRoZSBtb3N0IGVmZmVjdGl2ZS4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMgorI2Vsc2UKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMSAgICAgICAgICAgLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyNlbmRpZgorCisvKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMKKyAqIGNhdXNpbmcgYSBsb3Qgb2YgdXNlbGVzcyBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGF0IHJ1biB0aW1lLgorICogVG8gZ2V0IGFyb3VuZCB0aGlzIHdlIHVzZSB0aGUgZm9sbG93aW5nIHByZS1jYWxjdWxhdGVkIGNvbnN0YW50cy4KKyAqIElmIHlvdSBjaGFuZ2UgQ09OU1RfQklUUyB5b3UgbWF5IHdhbnQgdG8gYWRkIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAqIChXaXRoIGEgcmVhc29uYWJsZSBDIGNvbXBpbGVyLCB5b3UgY2FuIGp1c3QgcmVseSBvbiB0aGUgRklYKCkgbWFjcm8uLi4pCisgKi8KKworI2lmIENPTlNUX0JJVFMgPT0gMTMKKyNkZWZpbmUgRklYXzBfMjk4NjMxMzM2ICAoKEpMT05HKTI0NDYpICAgICAgICAgIC8qIEZJWCgwLjI5ODYzMTMzNikgKi8KKyNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICAoKEpMT05HKTMxOTYpICAgICAgICAgIC8qIEZJWCgwLjM5MDE4MDY0NCkgKi8KKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICAoKEpMT05HKTQ0MzMpICAgICAgICAgIC8qIEZJWCgwLjU0MTE5NjEwMCkgKi8KKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICAoKEpMT05HKTYyNzApICAgICAgICAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzBfODk5OTc2MjIzICAoKEpMT05HKTczNzMpICAgICAgICAgIC8qIEZJWCgwLjg5OTk3NjIyMykgKi8KKyNkZWZpbmUgRklYXzFfMTc1ODc1NjAyICAoKEpMT05HKTk2MzMpICAgICAgICAgIC8qIEZJWCgxLjE3NTg3NTYwMikgKi8KKyNkZWZpbmUgRklYXzFfNTAxMzIxMTEwICAoKEpMT05HKTEyMjk5KSAgICAgICAgIC8qIEZJWCgxLjUwMTMyMTExMCkgKi8KKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKEpMT05HKTE1MTM3KSAgICAgICAgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzFfOTYxNTcwNTYwICAoKEpMT05HKTE2MDY5KSAgICAgICAgIC8qIEZJWCgxLjk2MTU3MDU2MCkgKi8KKyNkZWZpbmUgRklYXzJfMDUzMTE5ODY5ICAoKEpMT05HKTE2ODE5KSAgICAgICAgIC8qIEZJWCgyLjA1MzExOTg2OSkgKi8KKyNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKEpMT05HKTIwOTk1KSAgICAgICAgIC8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRklYXzNfMDcyNzExMDI2ICAoKEpMT05HKTI1MTcyKSAgICAgICAgIC8qIEZJWCgzLjA3MjcxMTAyNikgKi8KKyNlbHNlCisjZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgRklYKDAuMjk4NjMxMzM2KQorI2RlZmluZSBGSVhfMF8zOTAxODA2NDQgIEZJWCgwLjM5MDE4MDY0NCkKKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICBGSVgoMC41NDExOTYxMDApCisjZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgRklYKDAuNzY1MzY2ODY1KQorI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgIEZJWCgwLjg5OTk3NjIyMykKKyNkZWZpbmUgRklYXzFfMTc1ODc1NjAyICBGSVgoMS4xNzU4NzU2MDIpCisjZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgRklYKDEuNTAxMzIxMTEwKQorI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgIEZJWCgxLjg0Nzc1OTA2NSkKKyNkZWZpbmUgRklYXzFfOTYxNTcwNTYwICBGSVgoMS45NjE1NzA1NjApCisjZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgRklYKDIuMDUzMTE5ODY5KQorI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgIEZJWCgyLjU2MjkxNTQ0NykKKyNkZWZpbmUgRklYXzNfMDcyNzExMDI2ICBGSVgoMy4wNzI3MTEwMjYpCisjZW5kaWYKKworCisvKiBNdWx0aXBseSBhbiBKTE9ORyB2YXJpYWJsZSBieSBhbiBKTE9ORyBjb25zdGFudCB0byB5aWVsZCBhbiBKTE9ORyByZXN1bHQuCisgKiBGb3IgOC1iaXQgc2FtcGxlcyB3aXRoIHRoZSByZWNvbW1lbmRlZCBzY2FsaW5nLCBhbGwgdGhlIHZhcmlhYmxlCisgKiBhbmQgY29uc3RhbnQgdmFsdWVzIGludm9sdmVkIGFyZSBubyBtb3JlIHRoYW4gMTYgYml0cyB3aWRlLCBzbyBhCisgKiAxNngxNi0+MzIgYml0IG11bHRpcGx5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBmdWxsIDMyeDMyIG11bHRpcGx5LgorICogRm9yIDEyLWJpdCBzYW1wbGVzLCBhIGZ1bGwgMzItYml0IG11bHRpcGxpY2F0aW9uIHdpbGwgYmUgbmVlZGVkLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBNVUxUSVBMWSh2YXIsIGNvbnN0KSAgTVVMVElQTFkxNkMxNih2YXIsIGNvbnN0KQorI2Vsc2UKKyNkZWZpbmUgTVVMVElQTFkodmFyLCBjb25zdCkgICgodmFyKSAqIChjb25zdCkpCisjZW5kaWYKKworCisvKgorICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZkY3RfaXNsb3coRENURUxFTSAqZGF0YSkKK3sKKyAgSkxPTkcgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsKKyAgSkxPTkcgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7CisgIEpMT05HIHoxLCB6MiwgejMsIHo0LCB6NTsKKyAgRENURUxFTSAqZGF0YXB0cjsKKyAgaW50IGN0cjsKKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KKyAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLworICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KKworICBkYXRhcHRyID0gZGF0YTsKKyAgZm9yIChjdHIgPSBEQ1RTSVpFIC0gMTsgY3RyID49IDA7IGN0ci0tKSB7CisgICAgdG1wMCA9IGRhdGFwdHJbMF0gKyBkYXRhcHRyWzddOworICAgIHRtcDcgPSBkYXRhcHRyWzBdIC0gZGF0YXB0cls3XTsKKyAgICB0bXAxID0gZGF0YXB0clsxXSArIGRhdGFwdHJbNl07CisgICAgdG1wNiA9IGRhdGFwdHJbMV0gLSBkYXRhcHRyWzZdOworICAgIHRtcDIgPSBkYXRhcHRyWzJdICsgZGF0YXB0cls1XTsKKyAgICB0bXA1ID0gZGF0YXB0clsyXSAtIGRhdGFwdHJbNV07CisgICAgdG1wMyA9IGRhdGFwdHJbM10gKyBkYXRhcHRyWzRdOworICAgIHRtcDQgPSBkYXRhcHRyWzNdIC0gZGF0YXB0cls0XTsKKworICAgIC8qIEV2ZW4gcGFydCBwZXIgTEwmTSBmaWd1cmUgMSAtLS0gbm90ZSB0aGF0IHB1Ymxpc2hlZCBmaWd1cmUgaXMgZmF1bHR5OworICAgICAqIHJvdGF0b3IgInNxcnQoMikqYzEiIHNob3VsZCBiZSAic3FydCgyKSpjNiIuCisgICAgICovCisKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOworCisgICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKUxFRlRfU0hJRlQodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKUxFRlRfU0hJRlQodG1wMTAgLSB0bXAxMSwgUEFTUzFfQklUUyk7CisKKyAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzU0MTE5NjEwMCk7CisgICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKURFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMywgRklYXzBfNzY1MzY2ODY1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKURFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMiwgLUZJWF8xXzg0Nzc1OTA2NSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworCisgICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4IC0tLSBub3RlIHBhcGVyIG9taXRzIGZhY3RvciBvZiBzcXJ0KDIpLgorICAgICAqIGNLIHJlcHJlc2VudHMgY29zKEsqcGkvMTYpLgorICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDQuLnRtcDcgaGVyZS4KKyAgICAgKi8KKworICAgIHoxID0gdG1wNCArIHRtcDc7CisgICAgejIgPSB0bXA1ICsgdG1wNjsKKyAgICB6MyA9IHRtcDQgKyB0bXA2OworICAgIHo0ID0gdG1wNSArIHRtcDc7CisgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KKworICAgIHRtcDQgPSBNVUxUSVBMWSh0bXA0LCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8KKyAgICB0bXA1ID0gTVVMVElQTFkodG1wNSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovCisgICAgdG1wNiA9IE1VTFRJUExZKHRtcDYsIEZJWF8zXzA3MjcxMTAyNik7IC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1LWM3KSAqLworICAgIHRtcDcgPSBNVUxUSVBMWSh0bXA3LCBGSVhfMV81MDEzMjExMTApOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNS1jNykgKi8KKyAgICB6MSA9IE1VTFRJUExZKHoxLCAtRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqICggYzctYzMpICovCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLUZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLworICAgIHozID0gTVVMVElQTFkoejMsIC1GSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCAtRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqICggYzUtYzMpICovCisKKyAgICB6MyArPSB6NTsKKyAgICB6NCArPSB6NTsKKworICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSlERVNDQUxFKHRtcDQgKyB6MSArIHozLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKURFU0NBTEUodG1wNSArIHoyICsgejQsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA2ICsgejIgKyB6MywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSlERVNDQUxFKHRtcDcgKyB6MSArIHo0LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisKKyAgICBkYXRhcHRyICs9IERDVFNJWkU7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKyAgICogV2UgcmVtb3ZlIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcsIGJ1dCBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAKKyAgICogYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KKyAgICovCisKKyAgZGF0YXB0ciA9IGRhdGE7CisgIGZvciAoY3RyID0gRENUU0laRSAtIDE7IGN0ciA+PSAwOyBjdHItLSkgeworICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUgKiAwXSArIGRhdGFwdHJbRENUU0laRSAqIDddOworICAgIHRtcDcgPSBkYXRhcHRyW0RDVFNJWkUgKiAwXSAtIGRhdGFwdHJbRENUU0laRSAqIDddOworICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUgKiAxXSArIGRhdGFwdHJbRENUU0laRSAqIDZdOworICAgIHRtcDYgPSBkYXRhcHRyW0RDVFNJWkUgKiAxXSAtIGRhdGFwdHJbRENUU0laRSAqIDZdOworICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUgKiAyXSArIGRhdGFwdHJbRENUU0laRSAqIDVdOworICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUgKiAyXSAtIGRhdGFwdHJbRENUU0laRSAqIDVdOworICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUgKiAzXSArIGRhdGFwdHJbRENUU0laRSAqIDRdOworICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUgKiAzXSAtIGRhdGFwdHJbRENUU0laRSAqIDRdOworCisgICAgLyogRXZlbiBwYXJ0IHBlciBMTCZNIGZpZ3VyZSAxIC0tLSBub3RlIHRoYXQgcHVibGlzaGVkIGZpZ3VyZSBpcyBmYXVsdHk7CisgICAgICogcm90YXRvciAic3FydCgyKSpjMSIgc2hvdWxkIGJlICJzcXJ0KDIpKmM2Ii4KKyAgICAgKi8KKworICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKKyAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOworICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7CisKKyAgICBkYXRhcHRyW0RDVFNJWkUgKiAwXSA9IChEQ1RFTEVNKURFU0NBTEUodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cltEQ1RTSVpFICogNF0gPSAoRENURUxFTSlERVNDQUxFKHRtcDEwIC0gdG1wMTEsIFBBU1MxX0JJVFMpOworCisgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOworICAgIGRhdGFwdHJbRENUU0laRSAqIDJdID0KKyAgICAgIChEQ1RFTEVNKURFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMywgRklYXzBfNzY1MzY2ODY1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbRENUU0laRSAqIDZdID0KKyAgICAgIChEQ1RFTEVNKURFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMiwgLUZJWF8xXzg0Nzc1OTA2NSksCisgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTKTsKKworICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4KKyAgICAgKiBjSyByZXByZXNlbnRzIGNvcyhLKnBpLzE2KS4KKyAgICAgKiBpMC4uaTMgaW4gdGhlIHBhcGVyIGFyZSB0bXA0Li50bXA3IGhlcmUuCisgICAgICovCisKKyAgICB6MSA9IHRtcDQgKyB0bXA3OworICAgIHoyID0gdG1wNSArIHRtcDY7CisgICAgejMgPSB0bXA0ICsgdG1wNjsKKyAgICB6NCA9IHRtcDUgKyB0bXA3OworICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCisKKyAgICB0bXA0ID0gTVVMVElQTFkodG1wNCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCisgICAgdG1wNSA9IE1VTFRJUExZKHRtcDUsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLworICAgIHRtcDYgPSBNVUxUSVBMWSh0bXA2LCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KKyAgICB0bXA3ID0gTVVMVElQTFkodG1wNywgRklYXzFfNTAxMzIxMTEwKTsgLyogc3FydCgyKSAqICggYzErYzMtYzUtYzcpICovCisgICAgejEgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoIGM3LWMzKSAqLworICAgIHoyID0gTVVMVElQTFkoejIsIC1GSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KKyAgICB6MyA9IE1VTFRJUExZKHozLCAtRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCisgICAgejQgPSBNVUxUSVBMWSh6NCwgLUZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoIGM1LWMzKSAqLworCisgICAgejMgKz0gejU7CisgICAgejQgKz0gejU7CisKKyAgICBkYXRhcHRyW0RDVFNJWkUgKiA3XSA9IChEQ1RFTEVNKURFU0NBTEUodG1wNCArIHoxICsgejMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUgKiA1XSA9IChEQ1RFTEVNKURFU0NBTEUodG1wNSArIHoyICsgejQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUgKiAzXSA9IChEQ1RFTEVNKURFU0NBTEUodG1wNiArIHoyICsgejMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUgKiAxXSA9IChEQ1RFTEVNKURFU0NBTEUodG1wNyArIHoxICsgejQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTKTsKKworICAgIGRhdGFwdHIrKzsgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0lTTE9XX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamlkY3RmbHQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppZGN0Zmx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlZTc0ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppZGN0Zmx0LmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBqaWRjdGZsdC5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmllZCAyMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZQorICogaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiAgSW4gdGhlIElKRyBjb2RlLCB0aGlzIHJvdXRpbmUKKyAqIG11c3QgYWxzbyBwZXJmb3JtIGRlcXVhbnRpemF0aW9uIG9mIHRoZSBpbnB1dCBjb2VmZmljaWVudHMuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgbW9yZSBhY2N1cmF0ZSB0aGFuIGVpdGhlciBvZiB0aGUgaW50ZWdlcgorICogSURDVCBpbXBsZW1lbnRhdGlvbnMuICBIb3dldmVyLCBpdCBtYXkgbm90IGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBvbiBhbGwKKyAqIG1hY2hpbmVzIGJlY2F1c2Ugb2YgZGlmZmVyZW5jZXMgaW4gcm91bmRvZmYgYmVoYXZpb3IuICBTcGVlZCB3aWxsIGRlcGVuZAorICogb24gdGhlIGhhcmR3YXJlJ3MgZmxvYXRpbmcgcG9pbnQgY2FwYWNpdHkuCisgKgorICogQSAyLUQgSURDVCBjYW4gYmUgZG9uZSBieSAxLUQgSURDVCBvbiBlYWNoIGNvbHVtbiBmb2xsb3dlZCBieSAxLUQgSURDVAorICogb24gZWFjaCByb3cgKG9yIHZpY2UgdmVyc2EsIGJ1dCBpdCdzIG1vcmUgY29udmVuaWVudCB0byBlbWl0IGEgcm93IGF0CisgKiBhIHRpbWUpLiAgRGlyZWN0IGFsZ29yaXRobXMgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhleSBhcmUgbXVjaCBtb3JlCisgKiBjb21wbGV4IGFuZCBzZWVtIG5vdCB0byBiZSBhbnkgZmFzdGVyIHdoZW4gcmVkdWNlZCB0byBjb2RlLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gQXJhaSwgQWd1aSwgYW5kIE5ha2FqaW1hJ3MgYWxnb3JpdGhtIGZvcgorICogc2NhbGVkIERDVC4gIFRoZWlyIG9yaWdpbmFsIHBhcGVyIChUcmFucy4gSUVJQ0UgRS03MSgxMSk6MTA5NSkgaXMgaW4KKyAqIEphcGFuZXNlLCBidXQgdGhlIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gdGhlIFBlbm5lYmFrZXIgJiBNaXRjaGVsbAorICogSlBFRyB0ZXh0Ym9vayAoc2VlIFJFRkVSRU5DRVMgc2VjdGlvbiBpbiBmaWxlIFJFQURNRS5pamcpLiAgVGhlIGZvbGxvd2luZworICogY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiBmaWd1cmUgNC04IGluIFAmTS4KKyAqIFdoaWxlIGFuIDgtcG9pbnQgRENUIGNhbm5vdCBiZSBkb25lIGluIGxlc3MgdGhhbiAxMSBtdWx0aXBsaWVzLCBpdCBpcworICogcG9zc2libGUgdG8gYXJyYW5nZSB0aGUgY29tcHV0YXRpb24gc28gdGhhdCBtYW55IG9mIHRoZSBtdWx0aXBsaWVzIGFyZQorICogc2ltcGxlIHNjYWxpbmdzIG9mIHRoZSBmaW5hbCBvdXRwdXRzLiAgVGhlc2UgbXVsdGlwbGllcyBjYW4gdGhlbiBiZQorICogZm9sZGVkIGludG8gdGhlIG11bHRpcGxpY2F0aW9ucyBvciBkaXZpc2lvbnMgYnkgdGhlIEpQRUcgcXVhbnRpemF0aW9uCisgKiB0YWJsZSBlbnRyaWVzLiAgVGhlIEFBJk4gbWV0aG9kIGxlYXZlcyBvbmx5IDUgbXVsdGlwbGllcyBhbmQgMjkgYWRkcworICogdG8gYmUgZG9uZSBpbiB0aGUgRENUIGl0c2VsZi4KKyAqIFRoZSBwcmltYXJ5IGRpc2FkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHdpdGggYSBmaXhlZC1wb2ludAorICogaW1wbGVtZW50YXRpb24sIGFjY3VyYWN5IGlzIGxvc3QgZHVlIHRvIGltcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAqIHNjYWxlZCBxdWFudGl6YXRpb24gdmFsdWVzLiAgSG93ZXZlciwgdGhhdCBwcm9ibGVtIGRvZXMgbm90IGFyaXNlIGlmCisgKiB3ZSB1c2UgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisKKworLyoKKyAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorICovCisKKyNpZiBEQ1RTSVpFICE9IDgKKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworI2VuZGlmCisKKworLyogRGVxdWFudGl6ZSBhIGNvZWZmaWNpZW50IGJ5IG11bHRpcGx5aW5nIGl0IGJ5IHRoZSBtdWx0aXBsaWVyLXRhYmxlCisgKiBlbnRyeTsgcHJvZHVjZSBhIGZsb2F0IHJlc3VsdC4KKyAqLworCisjZGVmaW5lIERFUVVBTlRJWkUoY29lZiwgcXVhbnR2YWwpICAoKChGQVNUX0ZMT0FUKShjb2VmKSkgKiAocXVhbnR2YWwpKQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgRkFTVF9GTE9BVCB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2LCB0bXA3OworICBGQVNUX0ZMT0FUIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOworICBGQVNUX0ZMT0FUIHo1LCB6MTAsIHoxMSwgejEyLCB6MTM7CisgIEpDT0VGUFRSIGlucHRyOworICBGTE9BVF9NVUxUX1RZUEUgKnF1YW50cHRyOworICBGQVNUX0ZMT0FUICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIGludCBjdHI7CisgIEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXTsgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisjZGVmaW5lIF8wXzEyNSAgKChGTE9BVF9NVUxUX1RZUEUpMC4xMjUpCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoRkxPQVRfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSBEQ1RTSVpFOyBjdHIgPiAwOyBjdHItLSkgeworICAgIC8qIER1ZSB0byBxdWFudGl6YXRpb24sIHdlIHdpbGwgdXN1YWxseSBmaW5kIHRoYXQgbWFueSBvZiB0aGUgaW5wdXQKKyAgICAgKiBjb2VmZmljaWVudHMgYXJlIHplcm8sIGVzcGVjaWFsbHkgdGhlIEFDIHRlcm1zLiAgV2UgY2FuIGV4cGxvaXQgdGhpcworICAgICAqIGJ5IHNob3J0LWNpcmN1aXRpbmcgdGhlIElEQ1QgY2FsY3VsYXRpb24gZm9yIGFueSBjb2x1bW4gaW4gd2hpY2ggYWxsCisgICAgICogdGhlIEFDIHRlcm1zIGFyZSB6ZXJvLiAgSW4gdGhhdCBjYXNlIGVhY2ggb3V0cHV0IGlzIGVxdWFsIHRvIHRoZQorICAgICAqIERDIGNvZWZmaWNpZW50ICh3aXRoIHNjYWxlIGZhY3RvciBhcyBuZWVkZWQpLgorICAgICAqIFdpdGggdHlwaWNhbCBpbWFnZXMgYW5kIHF1YW50aXphdGlvbiB0YWJsZXMsIGhhbGYgb3IgbW9yZSBvZiB0aGUKKyAgICAgKiBjb2x1bW4gRENUIGNhbGN1bGF0aW9ucyBjYW4gYmUgc2ltcGxpZmllZCB0aGlzIHdheS4KKyAgICAgKi8KKworICAgIGlmIChpbnB0cltEQ1RTSVpFICogMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogMl0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFICogM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogNF0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFICogNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogNl0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFICogN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KKyAgICAgIEZBU1RfRkxPQVQgZGN2YWwgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50cHRyW0RDVFNJWkUgKiAwXSAqIF8wXzEyNSk7CisKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAwXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDFdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogMl0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAzXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDRdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogNV0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiA2XSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDddID0gZGN2YWw7CisKKyAgICAgIGlucHRyKys7ICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworICAgICAgcXVhbnRwdHIrKzsKKyAgICAgIHdzcHRyKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwgcXVhbnRwdHJbRENUU0laRSAqIDBdICogXzBfMTI1KTsKKyAgICB0bXAxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMl0sIHF1YW50cHRyW0RDVFNJWkUgKiAyXSAqIF8wXzEyNSk7CisgICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDRdLCBxdWFudHB0cltEQ1RTSVpFICogNF0gKiBfMF8xMjUpOworICAgIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdICogXzBfMTI1KTsKKworICAgIHRtcDEwID0gdG1wMCArIHRtcDI7ICAgICAgICAvKiBwaGFzZSAzICovCisgICAgdG1wMTEgPSB0bXAwIC0gdG1wMjsKKworICAgIHRtcDEzID0gdG1wMSArIHRtcDM7ICAgICAgICAvKiBwaGFzZXMgNS0zICovCisgICAgdG1wMTIgPSAodG1wMSAtIHRtcDMpICogKChGQVNUX0ZMT0FUKTEuNDE0MjEzNTYyKSAtIHRtcDEzOyAvKiAyKmM0ICovCisKKyAgICB0bXAwID0gdG1wMTAgKyB0bXAxMzsgICAgICAgLyogcGhhc2UgMiAqLworICAgIHRtcDMgPSB0bXAxMCAtIHRtcDEzOworICAgIHRtcDEgPSB0bXAxMSArIHRtcDEyOworICAgIHRtcDIgPSB0bXAxMSAtIHRtcDEyOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHRtcDQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAxXSwgcXVhbnRwdHJbRENUU0laRSAqIDFdICogXzBfMTI1KTsKKyAgICB0bXA1ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogM10sIHF1YW50cHRyW0RDVFNJWkUgKiAzXSAqIF8wXzEyNSk7CisgICAgdG1wNiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDVdLCBxdWFudHB0cltEQ1RTSVpFICogNV0gKiBfMF8xMjUpOworICAgIHRtcDcgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA3XSwgcXVhbnRwdHJbRENUU0laRSAqIDddICogXzBfMTI1KTsKKworICAgIHoxMyA9IHRtcDYgKyB0bXA1OyAgICAgICAgICAvKiBwaGFzZSA2ICovCisgICAgejEwID0gdG1wNiAtIHRtcDU7CisgICAgejExID0gdG1wNCArIHRtcDc7CisgICAgejEyID0gdG1wNCAtIHRtcDc7CisKKyAgICB0bXA3ID0gejExICsgejEzOyAgICAgICAgICAgLyogcGhhc2UgNSAqLworICAgIHRtcDExID0gKHoxMSAtIHoxMykgKiAoKEZBU1RfRkxPQVQpMS40MTQyMTM1NjIpOyAvKiAyKmM0ICovCisKKyAgICB6NSA9ICh6MTAgKyB6MTIpICogKChGQVNUX0ZMT0FUKTEuODQ3NzU5MDY1KTsgLyogMipjMiAqLworICAgIHRtcDEwID0gejUgLSB6MTIgKiAoKEZBU1RfRkxPQVQpMS4wODIzOTIyMDApOyAvKiAyKihjMi1jNikgKi8KKyAgICB0bXAxMiA9IHo1IC0gejEwICogKChGQVNUX0ZMT0FUKTIuNjEzMTI1OTMwKTsgLyogMiooYzIrYzYpICovCisKKyAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OyAgICAgICAgLyogcGhhc2UgMiAqLworICAgIHRtcDUgPSB0bXAxMSAtIHRtcDY7CisgICAgdG1wNCA9IHRtcDEwIC0gdG1wNTsKKworICAgIHdzcHRyW0RDVFNJWkUgKiAwXSA9IHRtcDAgKyB0bXA3OworICAgIHdzcHRyW0RDVFNJWkUgKiA3XSA9IHRtcDAgLSB0bXA3OworICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9IHRtcDEgKyB0bXA2OworICAgIHdzcHRyW0RDVFNJWkUgKiA2XSA9IHRtcDEgLSB0bXA2OworICAgIHdzcHRyW0RDVFNJWkUgKiAyXSA9IHRtcDIgKyB0bXA1OworICAgIHdzcHRyW0RDVFNJWkUgKiA1XSA9IHRtcDIgLSB0bXA1OworICAgIHdzcHRyW0RDVFNJWkUgKiAzXSA9IHRtcDMgKyB0bXA0OworICAgIHdzcHRyW0RDVFNJWkUgKiA0XSA9IHRtcDMgLSB0bXA0OworCisgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICBxdWFudHB0cisrOworICAgIHdzcHRyKys7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IERDVFNJWkU7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKyAgICAvKiBSb3dzIG9mIHplcm9lcyBjYW4gYmUgZXhwbG9pdGVkIGluIHRoZSBzYW1lIHdheSBhcyB3ZSBkaWQgd2l0aCBjb2x1bW5zLgorICAgICAqIEhvd2V2ZXIsIHRoZSBjb2x1bW4gY2FsY3VsYXRpb24gaGFzIGNyZWF0ZWQgbWFueSBub256ZXJvIEFDIHRlcm1zLCBzbworICAgICAqIHRoZSBzaW1wbGlmaWNhdGlvbiBhcHBsaWVzIGxlc3Mgb2Z0ZW4gKHR5cGljYWxseSA1JSB0byAxMCUgb2YgdGhlIHRpbWUpLgorICAgICAqIEFuZCB0ZXN0aW5nIGZsb2F0cyBmb3IgemVybyBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSwgc28gd2UgZG9uJ3QgYm90aGVyLgorICAgICAqLworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBcHBseSBzaWduZWQtPnVuc2lnbmVkIGFuZCBwcmVwYXJlIGZsb2F0LT5pbnQgY29udmVyc2lvbiAqLworICAgIHo1ID0gd3NwdHJbMF0gKyAoKEZBU1RfRkxPQVQpQ0VOVEVSSlNBTVBMRSArIChGQVNUX0ZMT0FUKTAuNSk7CisgICAgdG1wMTAgPSB6NSArIHdzcHRyWzRdOworICAgIHRtcDExID0gejUgLSB3c3B0cls0XTsKKworICAgIHRtcDEzID0gd3NwdHJbMl0gKyB3c3B0cls2XTsKKyAgICB0bXAxMiA9ICh3c3B0clsyXSAtIHdzcHRyWzZdKSAqICgoRkFTVF9GTE9BVCkxLjQxNDIxMzU2MikgLSB0bXAxMzsKKworICAgIHRtcDAgPSB0bXAxMCArIHRtcDEzOworICAgIHRtcDMgPSB0bXAxMCAtIHRtcDEzOworICAgIHRtcDEgPSB0bXAxMSArIHRtcDEyOworICAgIHRtcDIgPSB0bXAxMSAtIHRtcDEyOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxMyA9IHdzcHRyWzVdICsgd3NwdHJbM107CisgICAgejEwID0gd3NwdHJbNV0gLSB3c3B0clszXTsKKyAgICB6MTEgPSB3c3B0clsxXSArIHdzcHRyWzddOworICAgIHoxMiA9IHdzcHRyWzFdIC0gd3NwdHJbN107CisKKyAgICB0bXA3ID0gejExICsgejEzOworICAgIHRtcDExID0gKHoxMSAtIHoxMykgKiAoKEZBU1RfRkxPQVQpMS40MTQyMTM1NjIpOworCisgICAgejUgPSAoejEwICsgejEyKSAqICgoRkFTVF9GTE9BVCkxLjg0Nzc1OTA2NSk7IC8qIDIqYzIgKi8KKyAgICB0bXAxMCA9IHo1IC0gejEyICogKChGQVNUX0ZMT0FUKTEuMDgyMzkyMjAwKTsgLyogMiooYzItYzYpICovCisgICAgdG1wMTIgPSB6NSAtIHoxMCAqICgoRkFTVF9GTE9BVCkyLjYxMzEyNTkzMCk7IC8qIDIqKGMyK2M2KSAqLworCisgICAgdG1wNiA9IHRtcDEyIC0gdG1wNzsKKyAgICB0bXA1ID0gdG1wMTEgLSB0bXA2OworICAgIHRtcDQgPSB0bXAxMCAtIHRtcDU7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGZsb2F0LT5pbnQgY29udmVyc2lvbiBhbmQgcmFuZ2UtbGltaXQgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WygoaW50KSh0bXAwICsgdG1wNykpICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddID0gcmFuZ2VfbGltaXRbKChpbnQpKHRtcDAgLSB0bXA3KSkgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoKGludCkodG1wMSArIHRtcDYpKSAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WygoaW50KSh0bXAxIC0gdG1wNikpICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKChpbnQpKHRtcDIgKyB0bXA1KSkgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gPSByYW5nZV9saW1pdFsoKGludCkodG1wMiAtIHRtcDUpKSAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WygoaW50KSh0bXAzICsgdG1wNCkpICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbKChpbnQpKHRtcDMgLSB0bXA0KSkgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IERDVFNJWkU7ICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0ZMT0FUX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamlkY3Rmc3QuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppZGN0ZnN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhMjBjOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppZGN0ZnN0LmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBqaWRjdGZzdC5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorICogaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiAgSW4gdGhlIElKRyBjb2RlLCB0aGlzIHJvdXRpbmUKKyAqIG11c3QgYWxzbyBwZXJmb3JtIGRlcXVhbnRpemF0aW9uIG9mIHRoZSBpbnB1dCBjb2VmZmljaWVudHMuCisgKgorICogQSAyLUQgSURDVCBjYW4gYmUgZG9uZSBieSAxLUQgSURDVCBvbiBlYWNoIGNvbHVtbiBmb2xsb3dlZCBieSAxLUQgSURDVAorICogb24gZWFjaCByb3cgKG9yIHZpY2UgdmVyc2EsIGJ1dCBpdCdzIG1vcmUgY29udmVuaWVudCB0byBlbWl0IGEgcm93IGF0CisgKiBhIHRpbWUpLiAgRGlyZWN0IGFsZ29yaXRobXMgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhleSBhcmUgbXVjaCBtb3JlCisgKiBjb21wbGV4IGFuZCBzZWVtIG5vdCB0byBiZSBhbnkgZmFzdGVyIHdoZW4gcmVkdWNlZCB0byBjb2RlLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gQXJhaSwgQWd1aSwgYW5kIE5ha2FqaW1hJ3MgYWxnb3JpdGhtIGZvcgorICogc2NhbGVkIERDVC4gIFRoZWlyIG9yaWdpbmFsIHBhcGVyIChUcmFucy4gSUVJQ0UgRS03MSgxMSk6MTA5NSkgaXMgaW4KKyAqIEphcGFuZXNlLCBidXQgdGhlIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gdGhlIFBlbm5lYmFrZXIgJiBNaXRjaGVsbAorICogSlBFRyB0ZXh0Ym9vayAoc2VlIFJFRkVSRU5DRVMgc2VjdGlvbiBpbiBmaWxlIFJFQURNRS5pamcpLiAgVGhlIGZvbGxvd2luZworICogY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiBmaWd1cmUgNC04IGluIFAmTS4KKyAqIFdoaWxlIGFuIDgtcG9pbnQgRENUIGNhbm5vdCBiZSBkb25lIGluIGxlc3MgdGhhbiAxMSBtdWx0aXBsaWVzLCBpdCBpcworICogcG9zc2libGUgdG8gYXJyYW5nZSB0aGUgY29tcHV0YXRpb24gc28gdGhhdCBtYW55IG9mIHRoZSBtdWx0aXBsaWVzIGFyZQorICogc2ltcGxlIHNjYWxpbmdzIG9mIHRoZSBmaW5hbCBvdXRwdXRzLiAgVGhlc2UgbXVsdGlwbGllcyBjYW4gdGhlbiBiZQorICogZm9sZGVkIGludG8gdGhlIG11bHRpcGxpY2F0aW9ucyBvciBkaXZpc2lvbnMgYnkgdGhlIEpQRUcgcXVhbnRpemF0aW9uCisgKiB0YWJsZSBlbnRyaWVzLiAgVGhlIEFBJk4gbWV0aG9kIGxlYXZlcyBvbmx5IDUgbXVsdGlwbGllcyBhbmQgMjkgYWRkcworICogdG8gYmUgZG9uZSBpbiB0aGUgRENUIGl0c2VsZi4KKyAqIFRoZSBwcmltYXJ5IGRpc2FkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHdpdGggZml4ZWQtcG9pbnQgbWF0aCwKKyAqIGFjY3VyYWN5IGlzIGxvc3QgZHVlIHRvIGltcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NhbGVkCisgKiBxdWFudGl6YXRpb24gdmFsdWVzLiAgVGhlIHNtYWxsZXIgdGhlIHF1YW50aXphdGlvbiB0YWJsZSBlbnRyeSwgdGhlIGxlc3MKKyAqIHByZWNpc2UgdGhlIHNjYWxlZCB2YWx1ZSwgc28gdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIHdvcnNlIHdpdGggaGlnaC0KKyAqIHF1YWxpdHktc2V0dGluZyBmaWxlcyB0aGFuIHdpdGggbG93LXF1YWxpdHkgb25lcy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisKKworLyoKKyAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorICovCisKKyNpZiBEQ1RTSVpFICE9IDgKKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworI2VuZGlmCisKKworLyogU2NhbGluZyBkZWNpc2lvbnMgYXJlIGdlbmVyYWxseSB0aGUgc2FtZSBhcyBpbiB0aGUgTEwmTSBhbGdvcml0aG07CisgKiBzZWUgamlkY3RpbnQuYyBmb3IgbW9yZSBkZXRhaWxzLiAgSG93ZXZlciwgd2UgY2hvb3NlIHRvIGRlc2NhbGUKKyAqIChyaWdodCBzaGlmdCkgbXVsdGlwbGljYXRpb24gcHJvZHVjdHMgYXMgc29vbiBhcyB0aGV5IGFyZSBmb3JtZWQsCisgKiByYXRoZXIgdGhhbiBjYXJyeWluZyBhZGRpdGlvbmFsIGZyYWN0aW9uYWwgYml0cyBpbnRvIHN1YnNlcXVlbnQgYWRkaXRpb25zLgorICogVGhpcyBjb21wcm9taXNlcyBhY2N1cmFjeSBzbGlnaHRseSwgYnV0IGl0IGxldHMgdXMgc2F2ZSBhIGZldyBzaGlmdHMuCisgKiBNb3JlIGltcG9ydGFudGx5LCAxNi1iaXQgYXJpdGhtZXRpYyBpcyB0aGVuIGFkZXF1YXRlIChmb3IgOC1iaXQgc2FtcGxlcykKKyAqIGV2ZXJ5d2hlcmUgZXhjZXB0IGluIHRoZSBtdWx0aXBsaWNhdGlvbnMgcHJvcGVyOyB0aGlzIHNhdmVzIGEgZ29vZCBkZWFsCisgKiBvZiB3b3JrIG9uIDE2LWJpdC1pbnQgbWFjaGluZXMuCisgKgorICogVGhlIGRlcXVhbnRpemVkIGNvZWZmaWNpZW50cyBhcmUgbm90IGludGVnZXJzIGJlY2F1c2UgdGhlIEFBJk4gc2NhbGluZworICogZmFjdG9ycyBoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkLiAgV2UgcmVwcmVzZW50IHRoZW0gc2NhbGVkIHVwIGJ5IFBBU1MxX0JJVFMsCisgKiBzbyB0aGF0IHRoZSBmaXJzdCBhbmQgc2Vjb25kIElEQ1Qgcm91bmRzIGhhdmUgdGhlIHNhbWUgaW5wdXQgc2NhbGluZy4KKyAqIEZvciA4LWJpdCBKU0FNUExFcywgd2UgY2hvb3NlIElGQVNUX1NDQUxFX0JJVFMgPSBQQVNTMV9CSVRTIHNvIGFzIHRvCisgKiBhdm9pZCBhIGRlc2NhbGluZyBzaGlmdDsgdGhpcyBjb21wcm9taXNlcyBhY2N1cmFjeSByYXRoZXIgZHJhc3RpY2FsbHkKKyAqIGZvciBzbWFsbCBxdWFudGl6YXRpb24gdGFibGUgZW50cmllcywgYnV0IGl0IHNhdmVzIGEgbG90IG9mIHNoaWZ0cy4KKyAqIEZvciAxMi1iaXQgSlNBTVBMRXMsIHRoZXJlJ3Mgbm8gaG9wZSBvZiB1c2luZyAxNngxNiBtdWx0aXBsaWVzIGFueXdheSwKKyAqIHNvIHdlIHVzZSBhIG11Y2ggbGFyZ2VyIHNjYWxpbmcgZmFjdG9yIHRvIHByZXNlcnZlIGFjY3VyYWN5LgorICoKKyAqIEEgZmluYWwgY29tcHJvbWlzZSBpcyB0byByZXByZXNlbnQgdGhlIG11bHRpcGxpY2F0aXZlIGNvbnN0YW50cyB0byBvbmx5CisgKiA4IGZyYWN0aW9uYWwgYml0cywgcmF0aGVyIHRoYW4gMTMuICBUaGlzIHNhdmVzIHNvbWUgc2hpZnRpbmcgd29yayBvbiBzb21lCisgKiBtYWNoaW5lcywgYW5kIG1heSBhbHNvIHJlZHVjZSB0aGUgY29zdCBvZiBtdWx0aXBsaWNhdGlvbiAoc2luY2UgdGhlcmUKKyAqIGFyZSBmZXdlciBvbmUtYml0cyBpbiB0aGUgY29uc3RhbnRzKS4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgQ09OU1RfQklUUyAgOAorI2RlZmluZSBQQVNTMV9CSVRTICAyCisjZWxzZQorI2RlZmluZSBDT05TVF9CSVRTICA4CisjZGVmaW5lIFBBU1MxX0JJVFMgIDEgICAgICAgICAgIC8qIGxvc2UgYSBsaXR0bGUgcHJlY2lzaW9uIHRvIGF2b2lkIG92ZXJmbG93ICovCisjZW5kaWYKKworLyogU29tZSBDIGNvbXBpbGVycyBmYWlsIHRvIHJlZHVjZSAiRklYKGNvbnN0YW50KSIgYXQgY29tcGlsZSB0aW1lLCB0aHVzCisgKiBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4KKyAqIFRvIGdldCBhcm91bmQgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyBwcmUtY2FsY3VsYXRlZCBjb25zdGFudHMuCisgKiBJZiB5b3UgY2hhbmdlIENPTlNUX0JJVFMgeW91IG1heSB3YW50IHRvIGFkZCBhcHByb3ByaWF0ZSB2YWx1ZXMuCisgKiAoV2l0aCBhIHJlYXNvbmFibGUgQyBjb21waWxlciwgeW91IGNhbiBqdXN0IHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvLi4uKQorICovCisKKyNpZiBDT05TVF9CSVRTID09IDgKKyNkZWZpbmUgRklYXzFfMDgyMzkyMjAwICAoKEpMT05HKTI3NykgICAgICAgICAgIC8qIEZJWCgxLjA4MjM5MjIwMCkgKi8KKyNkZWZpbmUgRklYXzFfNDE0MjEzNTYyICAoKEpMT05HKTM2MikgICAgICAgICAgIC8qIEZJWCgxLjQxNDIxMzU2MikgKi8KKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKEpMT05HKTQ3MykgICAgICAgICAgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzJfNjEzMTI1OTMwICAoKEpMT05HKTY2OSkgICAgICAgICAgIC8qIEZJWCgyLjYxMzEyNTkzMCkgKi8KKyNlbHNlCisjZGVmaW5lIEZJWF8xXzA4MjM5MjIwMCAgRklYKDEuMDgyMzkyMjAwKQorI2RlZmluZSBGSVhfMV80MTQyMTM1NjIgIEZJWCgxLjQxNDIxMzU2MikKKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpCisjZGVmaW5lIEZJWF8yXzYxMzEyNTkzMCAgRklYKDIuNjEzMTI1OTMwKQorI2VuZGlmCisKKworLyogV2UgY2FuIGdhaW4gYSBsaXR0bGUgbW9yZSBzcGVlZCwgd2l0aCBhIGZ1cnRoZXIgY29tcHJvbWlzZSBpbiBhY2N1cmFjeSwKKyAqIGJ5IG9taXR0aW5nIHRoZSBhZGRpdGlvbiBpbiBhIGRlc2NhbGluZyBzaGlmdC4gIFRoaXMgeWllbGRzIGFuIGluY29ycmVjdGx5CisgKiByb3VuZGVkIHJlc3VsdCBoYWxmIHRoZSB0aW1lLi4uCisgKi8KKworI2lmbmRlZiBVU0VfQUNDVVJBVEVfUk9VTkRJTkcKKyN1bmRlZiBERVNDQUxFCisjZGVmaW5lIERFU0NBTEUoeCwgbikgIFJJR0hUX1NISUZUKHgsIG4pCisjZW5kaWYKKworCisvKiBNdWx0aXBseSBhIERDVEVMRU0gdmFyaWFibGUgYnkgYW4gSkxPTkcgY29uc3RhbnQsIGFuZCBpbW1lZGlhdGVseQorICogZGVzY2FsZSB0byB5aWVsZCBhIERDVEVMRU0gcmVzdWx0LgorICovCisKKyNkZWZpbmUgTVVMVElQTFkodmFyLCBjb25zdCkgICgoRENURUxFTSlERVNDQUxFKCh2YXIpICogKGNvbnN0KSwgQ09OU1RfQklUUykpCisKKworLyogRGVxdWFudGl6ZSBhIGNvZWZmaWNpZW50IGJ5IG11bHRpcGx5aW5nIGl0IGJ5IHRoZSBtdWx0aXBsaWVyLXRhYmxlCisgKiBlbnRyeTsgcHJvZHVjZSBhIERDVEVMRU0gcmVzdWx0LiAgRm9yIDgtYml0IGRhdGEgYSAxNngxNi0+MTYKKyAqIG11bHRpcGxpY2F0aW9uIHdpbGwgZG8uICBGb3IgMTItYml0IGRhdGEsIHRoZSBtdWx0aXBsaWVyIHRhYmxlIGlzCisgKiBkZWNsYXJlZCBKTE9ORywgc28gYSAzMi1iaXQgbXVsdGlwbHkgd2lsbCBiZSB1c2VkLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBERVFVQU5USVpFKGNvZWYsIHF1YW50dmFsKSAgKCgoSUZBU1RfTVVMVF9UWVBFKShjb2VmKSkgKiAocXVhbnR2YWwpKQorI2Vsc2UKKyNkZWZpbmUgREVRVUFOVElaRShjb2VmLCBxdWFudHZhbCkgXAorICBERVNDQUxFKChjb2VmKSAqIChxdWFudHZhbCksIElGQVNUX1NDQUxFX0JJVFMgLSBQQVNTMV9CSVRTKQorI2VuZGlmCisKKworLyogTGlrZSBERVNDQUxFLCBidXQgYXBwbGllcyB0byBhIERDVEVMRU0gYW5kIHByb2R1Y2VzIGFuIGludC4KKyAqIFdlIGFzc3VtZSB0aGF0IGludCByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCBpZiBKTE9ORyByaWdodCBzaGlmdCBpcy4KKyAqLworCisjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyNkZWZpbmUgSVNISUZUX1RFTVBTICAgIERDVEVMRU0gaXNoaWZ0X3RlbXA7CisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgRENURUxFTUJJVFMgIDE2ICAgICAgICAgLyogRENURUxFTSBtYXkgYmUgMTYgb3IgMzIgYml0cyAqLworI2Vsc2UKKyNkZWZpbmUgRENURUxFTUJJVFMgIDMyICAgICAgICAgLyogRENURUxFTSBtdXN0IGJlIDMyIGJpdHMgKi8KKyNlbmRpZgorI2RlZmluZSBJUklHSFRfU0hJRlQoeCwgc2hmdCkgXAorICAoKGlzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCisgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSB8ICgofigoRENURUxFTSkwKSkgPDwgKERDVEVMRU1CSVRTIC0gKHNoZnQpKSkgOiBcCisgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKKyNlbHNlCisjZGVmaW5lIElTSElGVF9URU1QUworI2RlZmluZSBJUklHSFRfU0hJRlQoeCwgc2hmdCkgICAoKHgpID4+IChzaGZ0KSkKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HCisjZGVmaW5lIElERVNDQUxFKHgsIG4pICAoKGludClJUklHSFRfU0hJRlQoKHgpICsgKDEgPDwgKChuKSAtIDEpKSwgbikpCisjZWxzZQorI2RlZmluZSBJREVTQ0FMRSh4LCBuKSAgKChpbnQpSVJJR0hUX1NISUZUKHgsIG4pKQorI2VuZGlmCisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBEQ1RFTEVNIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CisgIERDVEVMRU0gdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7CisgIERDVEVMRU0gejUsIHoxMCwgejExLCB6MTIsIHoxMzsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElGQVNUX01VTFRfVFlQRSAqcXVhbnRwdHI7CisgIGludCAqd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFMl07ICAgICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTICAgICAgICAgICAgICAgICAgIC8qIGZvciBERVNDQUxFICovCisgIElTSElGVF9URU1QUyAgICAgICAgICAgICAgICAgIC8qIGZvciBJREVTQ0FMRSAqLworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElGQVNUX01VTFRfVFlQRSAqKWNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gRENUU0laRTsgY3RyID4gMDsgY3RyLS0pIHsKKyAgICAvKiBEdWUgdG8gcXVhbnRpemF0aW9uLCB3ZSB3aWxsIHVzdWFsbHkgZmluZCB0aGF0IG1hbnkgb2YgdGhlIGlucHV0CisgICAgICogY29lZmZpY2llbnRzIGFyZSB6ZXJvLCBlc3BlY2lhbGx5IHRoZSBBQyB0ZXJtcy4gIFdlIGNhbiBleHBsb2l0IHRoaXMKKyAgICAgKiBieSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBJRENUIGNhbGN1bGF0aW9uIGZvciBhbnkgY29sdW1uIGluIHdoaWNoIGFsbAorICAgICAqIHRoZSBBQyB0ZXJtcyBhcmUgemVyby4gIEluIHRoYXQgY2FzZSBlYWNoIG91dHB1dCBpcyBlcXVhbCB0byB0aGUKKyAgICAgKiBEQyBjb2VmZmljaWVudCAod2l0aCBzY2FsZSBmYWN0b3IgYXMgbmVlZGVkKS4KKyAgICAgKiBXaXRoIHR5cGljYWwgaW1hZ2VzIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLCBoYWxmIG9yIG1vcmUgb2YgdGhlCisgICAgICogY29sdW1uIERDVCBjYWxjdWxhdGlvbnMgY2FuIGJlIHNpbXBsaWZpZWQgdGhpcyB3YXkuCisgICAgICovCisKKyAgICBpZiAoaW5wdHJbRENUU0laRSAqIDFdID09IDAgJiYgaW5wdHJbRENUU0laRSAqIDJdID09IDAgJiYKKyAgICAgICAgaW5wdHJbRENUU0laRSAqIDNdID09IDAgJiYgaW5wdHJbRENUU0laRSAqIDRdID09IDAgJiYKKyAgICAgICAgaW5wdHJbRENUU0laRSAqIDVdID09IDAgJiYgaW5wdHJbRENUU0laRSAqIDZdID09IDAgJiYKKyAgICAgICAgaW5wdHJbRENUU0laRSAqIDddID09IDApIHsKKyAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCisgICAgICBpbnQgZGN2YWwgPSAoaW50KURFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDBdLCBxdWFudHB0cltEQ1RTSVpFICogMF0pOworCisgICAgICB3c3B0cltEQ1RTSVpFICogMF0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDJdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogM10gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiA0XSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDVdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogNl0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiA3XSA9IGRjdmFsOworCisgICAgICBpbnB0cisrOyAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICAgIHF1YW50cHRyKys7CisgICAgICB3c3B0cisrOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgdG1wMSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA0XSwgcXVhbnRwdHJbRENUU0laRSAqIDRdKTsKKyAgICB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNl0sIHF1YW50cHRyW0RDVFNJWkUgKiA2XSk7CisKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAyOyAgICAgICAgLyogcGhhc2UgMyAqLworICAgIHRtcDExID0gdG1wMCAtIHRtcDI7CisKKyAgICB0bXAxMyA9IHRtcDEgKyB0bXAzOyAgICAgICAgLyogcGhhc2VzIDUtMyAqLworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMSAtIHRtcDMsIEZJWF8xXzQxNDIxMzU2MikgLSB0bXAxMzsgLyogMipjNCAqLworCisgICAgdG1wMCA9IHRtcDEwICsgdG1wMTM7ICAgICAgIC8qIHBoYXNlIDIgKi8KKyAgICB0bXAzID0gdG1wMTAgLSB0bXAxMzsKKyAgICB0bXAxID0gdG1wMTEgKyB0bXAxMjsKKyAgICB0bXAyID0gdG1wMTEgLSB0bXAxMjsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXA0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMV0sIHF1YW50cHRyW0RDVFNJWkUgKiAxXSk7CisgICAgdG1wNSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDNdLCBxdWFudHB0cltEQ1RTSVpFICogM10pOworICAgIHRtcDYgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB0bXA3ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogN10sIHF1YW50cHRyW0RDVFNJWkUgKiA3XSk7CisKKyAgICB6MTMgPSB0bXA2ICsgdG1wNTsgICAgICAgICAgLyogcGhhc2UgNiAqLworICAgIHoxMCA9IHRtcDYgLSB0bXA1OworICAgIHoxMSA9IHRtcDQgKyB0bXA3OworICAgIHoxMiA9IHRtcDQgLSB0bXA3OworCisgICAgdG1wNyA9IHoxMSArIHoxMzsgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxMSAtIHoxMywgRklYXzFfNDE0MjEzNTYyKTsgLyogMipjNCAqLworCisgICAgejUgPSBNVUxUSVBMWSh6MTAgKyB6MTIsIEZJWF8xXzg0Nzc1OTA2NSk7IC8qIDIqYzIgKi8KKyAgICB0bXAxMCA9IE1VTFRJUExZKHoxMiwgRklYXzFfMDgyMzkyMjAwKSAtIHo1OyAvKiAyKihjMi1jNikgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxMCwgLUZJWF8yXzYxMzEyNTkzMCkgKyB6NTsgLyogLTIqKGMyK2M2KSAqLworCisgICAgdG1wNiA9IHRtcDEyIC0gdG1wNzsgICAgICAgIC8qIHBoYXNlIDIgKi8KKyAgICB0bXA1ID0gdG1wMTEgLSB0bXA2OworICAgIHRtcDQgPSB0bXAxMCArIHRtcDU7CisKKyAgICB3c3B0cltEQ1RTSVpFICogMF0gPSAoaW50KSh0bXAwICsgdG1wNyk7CisgICAgd3NwdHJbRENUU0laRSAqIDddID0gKGludCkodG1wMCAtIHRtcDcpOworICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9IChpbnQpKHRtcDEgKyB0bXA2KTsKKyAgICB3c3B0cltEQ1RTSVpFICogNl0gPSAoaW50KSh0bXAxIC0gdG1wNik7CisgICAgd3NwdHJbRENUU0laRSAqIDJdID0gKGludCkodG1wMiArIHRtcDUpOworICAgIHdzcHRyW0RDVFNJWkUgKiA1XSA9IChpbnQpKHRtcDIgLSB0bXA1KTsKKyAgICB3c3B0cltEQ1RTSVpFICogNF0gPSAoaW50KSh0bXAzICsgdG1wNCk7CisgICAgd3NwdHJbRENUU0laRSAqIDNdID0gKGludCkodG1wMyAtIHRtcDQpOworCisgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICBxdWFudHB0cisrOworICAgIHdzcHRyKys7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworICAvKiBOb3RlIHRoYXQgd2UgbXVzdCBkZXNjYWxlIHRoZSByZXN1bHRzIGJ5IGEgZmFjdG9yIG9mIDggPT0gMioqMywgKi8KKyAgLyogYW5kIGFsc28gdW5kbyB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IERDVFNJWkU7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKyAgICAvKiBSb3dzIG9mIHplcm9lcyBjYW4gYmUgZXhwbG9pdGVkIGluIHRoZSBzYW1lIHdheSBhcyB3ZSBkaWQgd2l0aCBjb2x1bW5zLgorICAgICAqIEhvd2V2ZXIsIHRoZSBjb2x1bW4gY2FsY3VsYXRpb24gaGFzIGNyZWF0ZWQgbWFueSBub256ZXJvIEFDIHRlcm1zLCBzbworICAgICAqIHRoZSBzaW1wbGlmaWNhdGlvbiBhcHBsaWVzIGxlc3Mgb2Z0ZW4gKHR5cGljYWxseSA1JSB0byAxMCUgb2YgdGhlIHRpbWUpLgorICAgICAqIE9uIG1hY2hpbmVzIHdpdGggdmVyeSBmYXN0IG11bHRpcGxpY2F0aW9uLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCisgICAgICogdGVzdCB0YWtlcyBtb3JlIHRpbWUgdGhhbiBpdCdzIHdvcnRoLiAgSW4gdGhhdCBjYXNlIHRoaXMgc2VjdGlvbgorICAgICAqIG1heSBiZSBjb21tZW50ZWQgb3V0LgorICAgICAqLworCisjaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKKyAgICBpZiAod3NwdHJbMV0gPT0gMCAmJiB3c3B0clsyXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNF0gPT0gMCAmJgorICAgICAgICB3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KKyAgICAgIEpTQU1QTEUgZGN2YWwgPQorICAgICAgICByYW5nZV9saW1pdFtJREVTQ0FMRSh3c3B0clswXSwgUEFTUzFfQklUUyArIDMpICYgUkFOR0VfTUFTS107CisKKyAgICAgIG91dHB0clswXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzFdID0gZGN2YWw7CisgICAgICBvdXRwdHJbMl0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clszXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzRdID0gZGN2YWw7CisgICAgICBvdXRwdHJbNV0gPSBkY3ZhbDsKKyAgICAgIG91dHB0cls2XSA9IGRjdmFsOworICAgICAgb3V0cHRyWzddID0gZGN2YWw7CisKKyAgICAgIHdzcHRyICs9IERDVFNJWkU7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICBjb250aW51ZTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTAgPSAoKERDVEVMRU0pd3NwdHJbMF0gKyAoRENURUxFTSl3c3B0cls0XSk7CisgICAgdG1wMTEgPSAoKERDVEVMRU0pd3NwdHJbMF0gLSAoRENURUxFTSl3c3B0cls0XSk7CisKKyAgICB0bXAxMyA9ICgoRENURUxFTSl3c3B0clsyXSArIChEQ1RFTEVNKXdzcHRyWzZdKTsKKyAgICB0bXAxMiA9CisgICAgICBNVUxUSVBMWSgoRENURUxFTSl3c3B0clsyXSAtIChEQ1RFTEVNKXdzcHRyWzZdLCBGSVhfMV80MTQyMTM1NjIpIC0gdG1wMTM7CisKKyAgICB0bXAwID0gdG1wMTAgKyB0bXAxMzsKKyAgICB0bXAzID0gdG1wMTAgLSB0bXAxMzsKKyAgICB0bXAxID0gdG1wMTEgKyB0bXAxMjsKKyAgICB0bXAyID0gdG1wMTEgLSB0bXAxMjsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MTMgPSAoRENURUxFTSl3c3B0cls1XSArIChEQ1RFTEVNKXdzcHRyWzNdOworICAgIHoxMCA9IChEQ1RFTEVNKXdzcHRyWzVdIC0gKERDVEVMRU0pd3NwdHJbM107CisgICAgejExID0gKERDVEVMRU0pd3NwdHJbMV0gKyAoRENURUxFTSl3c3B0cls3XTsKKyAgICB6MTIgPSAoRENURUxFTSl3c3B0clsxXSAtIChEQ1RFTEVNKXdzcHRyWzddOworCisgICAgdG1wNyA9IHoxMSArIHoxMzsgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxMSAtIHoxMywgRklYXzFfNDE0MjEzNTYyKTsgLyogMipjNCAqLworCisgICAgejUgPSBNVUxUSVBMWSh6MTAgKyB6MTIsIEZJWF8xXzg0Nzc1OTA2NSk7IC8qIDIqYzIgKi8KKyAgICB0bXAxMCA9IE1VTFRJUExZKHoxMiwgRklYXzFfMDgyMzkyMjAwKSAtIHo1OyAvKiAyKihjMi1jNikgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxMCwgLUZJWF8yXzYxMzEyNTkzMCkgKyB6NTsgLyogLTIqKGMyK2M2KSAqLworCisgICAgdG1wNiA9IHRtcDEyIC0gdG1wNzsgICAgICAgIC8qIHBoYXNlIDIgKi8KKyAgICB0bXA1ID0gdG1wMTEgLSB0bXA2OworICAgIHRtcDQgPSB0bXAxMCArIHRtcDU7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IHNjYWxlIGRvd24gYnkgYSBmYWN0b3Igb2YgOCBhbmQgcmFuZ2UtbGltaXQgKi8KKworICAgIG91dHB0clswXSA9CisgICAgICByYW5nZV9saW1pdFtJREVTQ0FMRSh0bXAwICsgdG1wNywgUEFTUzFfQklUUyArIDMpICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddID0KKyAgICAgIHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDAgLSB0bXA3LCBQQVNTMV9CSVRTICsgMykgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPQorICAgICAgcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMSArIHRtcDYsIFBBU1MxX0JJVFMgKyAzKSAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9CisgICAgICByYW5nZV9saW1pdFtJREVTQ0FMRSh0bXAxIC0gdG1wNiwgUEFTUzFfQklUUyArIDMpICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0KKyAgICAgIHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDIgKyB0bXA1LCBQQVNTMV9CSVRTICsgMykgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gPQorICAgICAgcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMiAtIHRtcDUsIFBBU1MxX0JJVFMgKyAzKSAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9CisgICAgICByYW5nZV9saW1pdFtJREVTQ0FMRSh0bXAzICsgdG1wNCwgUEFTUzFfQklUUyArIDMpICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdID0KKyAgICAgIHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDMgLSB0bXA0LCBQQVNTMV9CSVRTICsgMykgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IERDVFNJWkU7ICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0lGQVNUX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamlkY3RpbnQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppZGN0aW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NzM0MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppZGN0aW50LmMKQEAgLTAsMCArMSwyNjI3IEBACisvKgorICogamlkY3RpbnQuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpY2F0aW9uIGRldmVsb3BlZCAyMDAyLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAqIGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gIEluIHRoZSBJSkcgY29kZSwgdGhpcyByb3V0aW5lCisgKiBtdXN0IGFsc28gcGVyZm9ybSBkZXF1YW50aXphdGlvbiBvZiB0aGUgaW5wdXQgY29lZmZpY2llbnRzLgorICoKKyAqIEEgMi1EIElEQ1QgY2FuIGJlIGRvbmUgYnkgMS1EIElEQ1Qgb24gZWFjaCBjb2x1bW4gZm9sbG93ZWQgYnkgMS1EIElEQ1QKKyAqIG9uIGVhY2ggcm93IChvciB2aWNlIHZlcnNhLCBidXQgaXQncyBtb3JlIGNvbnZlbmllbnQgdG8gZW1pdCBhIHJvdyBhdAorICogYSB0aW1lKS4gIERpcmVjdCBhbGdvcml0aG1zIGFyZSBhbHNvIGF2YWlsYWJsZSwgYnV0IHRoZXkgYXJlIG11Y2ggbW9yZQorICogY29tcGxleCBhbmQgc2VlbSBub3QgdG8gYmUgYW55IGZhc3RlciB3aGVuIHJlZHVjZWQgdG8gY29kZS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKyAqICAgQy4gTG9lZmZsZXIsIEEuIExpZ3RlbmJlcmcgYW5kIEcuIE1vc2NoeXR6LCAiUHJhY3RpY2FsIEZhc3QgMS1EIERDVAorICogICBBbGdvcml0aG1zIHdpdGggMTEgTXVsdGlwbGljYXRpb25zIiwgUHJvYy4gSW50J2wuIENvbmYuIG9uIEFjb3VzdGljcywKKyAqICAgU3BlZWNoLCBhbmQgU2lnbmFsIFByb2Nlc3NpbmcgMTk4OSAoSUNBU1NQICc4OSksIHBwLiA5ODgtOTkxLgorICogVGhlIHByaW1hcnkgYWxnb3JpdGhtIGRlc2NyaWJlZCB0aGVyZSB1c2VzIDExIG11bHRpcGxpZXMgYW5kIDI5IGFkZHMuCisgKiBXZSB1c2UgdGhlaXIgYWx0ZXJuYXRlIG1ldGhvZCB3aXRoIDEyIG11bHRpcGxpZXMgYW5kIDMyIGFkZHMuCisgKiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzIHRoYXQgbm8gZGF0YSBwYXRoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKKyAqIG11bHRpcGxpY2F0aW9uOyB0aGlzIGFsbG93cyBhIHZlcnkgc2ltcGxlIGFuZCBhY2N1cmF0ZSBpbXBsZW1lbnRhdGlvbiBpbgorICogc2NhbGVkIGZpeGVkLXBvaW50IGFyaXRobWV0aWMsIHdpdGggYSBtaW5pbWFsIG51bWJlciBvZiBzaGlmdHMuCisgKgorICogV2UgYWxzbyBwcm92aWRlIElEQ1Qgcm91dGluZXMgd2l0aCB2YXJpb3VzIG91dHB1dCBzYW1wbGUgYmxvY2sgc2l6ZXMgZm9yCisgKiBkaXJlY3QgcmVzb2x1dGlvbiByZWR1Y3Rpb24gb3IgZW5sYXJnZW1lbnQgd2l0aG91dCBhZGRpdGlvbmFsIHJlc2FtcGxpbmc6CisgKiBOeE4gKE49MS4uLjE2KSBwaXhlbHMgZm9yIG9uZSA4eDggaW5wdXQgRENUIGJsb2NrLgorICoKKyAqIEZvciBOPDggd2Ugc2ltcGx5IHRha2UgdGhlIGNvcnJlc3BvbmRpbmcgbG93LWZyZXF1ZW5jeSBjb2VmZmljaWVudHMgb2YKKyAqIHRoZSA4eDggaW5wdXQgRENUIGJsb2NrIGFuZCBhcHBseSBhbiBOeE4gcG9pbnQgSURDVCBvbiB0aGUgc3ViLWJsb2NrCisgKiB0byB5aWVsZCB0aGUgZG93bnNjYWxlZCBvdXRwdXRzLgorICogVGhpcyBjYW4gYmUgc2VlbiBhcyBkaXJlY3QgbG93LXBhc3MgZG93bnNhbXBsaW5nIGZyb20gdGhlIERDVCBkb21haW4KKyAqIHBvaW50IG9mIHZpZXcgcmF0aGVyIHRoYW4gdGhlIHVzdWFsIHNwYXRpYWwgZG9tYWluIHBvaW50IG9mIHZpZXcsCisgKiB5aWVsZGluZyBzaWduaWZpY2FudCBjb21wdXRhdGlvbmFsIHNhdmluZ3MgYW5kIHJlc3VsdHMgYXQgbGVhc3QKKyAqIGFzIGdvb2QgYXMgY29tbW9uIGJpbGluZWFyIChhdmVyYWdpbmcpIHNwYXRpYWwgZG93bnNhbXBsaW5nLgorICoKKyAqIEZvciBOPjggd2UgYXBwbHkgYSBwYXJ0aWFsIE54TiBJRENUIG9uIHRoZSA4IGlucHV0IGNvZWZmaWNpZW50cyBhcworICogbG93ZXIgZnJlcXVlbmNpZXMgYW5kIGhpZ2hlciBmcmVxdWVuY2llcyBhc3N1bWVkIHRvIGJlIHplcm8uCisgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgY29tcHV0YXRpb25hbCBlZmZvcnQgaXMgc2ltaWxhciB0byB0aGUgOHg4IElEQ1QKKyAqIHJlZ2FyZGluZyB0aGUgb3V0cHV0IHNpemUuCisgKiBGdXJ0aGVybW9yZSwgdGhlIHNjYWxpbmcgYW5kIGRlc2NhbGluZyBpcyB0aGUgc2FtZSBmb3IgYWxsIElEQ1Qgc2l6ZXMuCisgKgorICogQ0FVVElPTjogV2UgcmVseSBvbiB0aGUgRklYKCkgbWFjcm8gZXhjZXB0IGZvciB0aGUgTj0xLDIsNCw4IGNhc2VzCisgKiBzaW5jZSB0aGVyZSB3b3VsZCBiZSB0b28gbWFueSBhZGRpdGlvbmFsIGNvbnN0YW50cyB0byBwcmUtY2FsY3VsYXRlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKworCisvKgorICogVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCisgKi8KKworI2lmIERDVFNJWkUgIT0gOAorICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUIGJsb2Nrcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisjZW5kaWYKKworCisvKgorICogVGhlIHBvb3Agb24gdGhpcyBzY2FsaW5nIHN0dWZmIGlzIGFzIGZvbGxvd3M6CisgKgorICogRWFjaCAxLUQgSURDVCBzdGVwIHByb2R1Y2VzIG91dHB1dHMgd2hpY2ggYXJlIGEgZmFjdG9yIG9mIHNxcnQoTikKKyAqIGxhcmdlciB0aGFuIHRoZSB0cnVlIElEQ1Qgb3V0cHV0cy4gIFRoZSBmaW5hbCBvdXRwdXRzIGFyZSB0aGVyZWZvcmUKKyAqIGEgZmFjdG9yIG9mIE4gbGFyZ2VyIHRoYW4gZGVzaXJlZDsgc2luY2UgTj04IHRoaXMgY2FuIGJlIGN1cmVkIGJ5CisgKiBhIHNpbXBsZSByaWdodCBzaGlmdCBhdCB0aGUgZW5kIG9mIHRoZSBhbGdvcml0aG0uICBUaGUgYWR2YW50YWdlIG9mCisgKiB0aGlzIGFycmFuZ2VtZW50IGlzIHRoYXQgd2Ugc2F2ZSB0d28gbXVsdGlwbGljYXRpb25zIHBlciAxLUQgSURDVCwKKyAqIGJlY2F1c2UgdGhlIHkwIGFuZCB5NCBpbnB1dHMgbmVlZCBub3QgYmUgZGl2aWRlZCBieSBzcXJ0KE4pLgorICoKKyAqIFdlIGhhdmUgdG8gZG8gYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIG9mIHRoZSBpbnRlZ2VyIGlucHV0cywgd2hpY2gKKyAqIGlzIG5vIHByb2JsZW0sIGFuZCBtdWx0aXBsaWNhdGlvbiBieSBmcmFjdGlvbmFsIGNvbnN0YW50cywgd2hpY2ggaXMKKyAqIGEgcHJvYmxlbSB0byBkbyBpbiBpbnRlZ2VyIGFyaXRobWV0aWMuICBXZSBtdWx0aXBseSBhbGwgdGhlIGNvbnN0YW50cworICogYnkgQ09OU1RfU0NBTEUgYW5kIGNvbnZlcnQgdGhlbSB0byBpbnRlZ2VyIGNvbnN0YW50cyAodGh1cyByZXRhaW5pbmcKKyAqIENPTlNUX0JJVFMgYml0cyBvZiBwcmVjaXNpb24gaW4gdGhlIGNvbnN0YW50cykuICBBZnRlciBkb2luZyBhCisgKiBtdWx0aXBsaWNhdGlvbiB3ZSBoYXZlIHRvIGRpdmlkZSB0aGUgcHJvZHVjdCBieSBDT05TVF9TQ0FMRSwgd2l0aCBwcm9wZXIKKyAqIHJvdW5kaW5nLCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG91dHB1dC4gIFRoaXMgZGl2aXNpb24gY2FuIGJlIGRvbmUKKyAqIGNoZWFwbHkgYXMgYSByaWdodCBzaGlmdCBvZiBDT05TVF9CSVRTIGJpdHMuICBXZSBwb3N0cG9uZSBzaGlmdGluZworICogYXMgbG9uZyBhcyBwb3NzaWJsZSBzbyB0aGF0IHBhcnRpYWwgc3VtcyBjYW4gYmUgYWRkZWQgdG9nZXRoZXIgd2l0aAorICogZnVsbCBmcmFjdGlvbmFsIHByZWNpc2lvbi4KKyAqCisgKiBUaGUgb3V0cHV0cyBvZiB0aGUgZmlyc3QgcGFzcyBhcmUgc2NhbGVkIHVwIGJ5IFBBU1MxX0JJVFMgYml0cyBzbyB0aGF0CisgKiB0aGV5IGFyZSByZXByZXNlbnRlZCB0byBiZXR0ZXItdGhhbi1pbnRlZ3JhbCBwcmVjaXNpb24uICBUaGVzZSBvdXRwdXRzCisgKiByZXF1aXJlIEJJVFNfSU5fSlNBTVBMRSArIFBBU1MxX0JJVFMgKyAzIGJpdHM7IHRoaXMgZml0cyBpbiBhIDE2LWJpdCB3b3JkCisgKiB3aXRoIHRoZSByZWNvbW1lbmRlZCBzY2FsaW5nLiAgKFRvIHNjYWxlIHVwIDEyLWJpdCBzYW1wbGUgZGF0YSBmdXJ0aGVyLCBhbgorICogaW50ZXJtZWRpYXRlIEpMT05HIGFycmF5IHdvdWxkIGJlIG5lZWRlZC4pCisgKgorICogVG8gYXZvaWQgb3ZlcmZsb3cgb2YgdGhlIDMyLWJpdCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBpbiBwYXNzIDIsIHdlIG11c3QKKyAqIGhhdmUgQklUU19JTl9KU0FNUExFICsgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgPD0gMjYuICBFcnJvciBhbmFseXNpcworICogc2hvd3MgdGhhdCB0aGUgdmFsdWVzIGdpdmVuIGJlbG93IGFyZSB0aGUgbW9zdCBlZmZlY3RpdmUuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIENPTlNUX0JJVFMgIDEzCisjZGVmaW5lIFBBU1MxX0JJVFMgIDIKKyNlbHNlCisjZGVmaW5lIENPTlNUX0JJVFMgIDEzCisjZGVmaW5lIFBBU1MxX0JJVFMgIDEgICAgICAgICAgIC8qIGxvc2UgYSBsaXR0bGUgcHJlY2lzaW9uIHRvIGF2b2lkIG92ZXJmbG93ICovCisjZW5kaWYKKworLyogU29tZSBDIGNvbXBpbGVycyBmYWlsIHRvIHJlZHVjZSAiRklYKGNvbnN0YW50KSIgYXQgY29tcGlsZSB0aW1lLCB0aHVzCisgKiBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4KKyAqIFRvIGdldCBhcm91bmQgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyBwcmUtY2FsY3VsYXRlZCBjb25zdGFudHMuCisgKiBJZiB5b3UgY2hhbmdlIENPTlNUX0JJVFMgeW91IG1heSB3YW50IHRvIGFkZCBhcHByb3ByaWF0ZSB2YWx1ZXMuCisgKiAoV2l0aCBhIHJlYXNvbmFibGUgQyBjb21waWxlciwgeW91IGNhbiBqdXN0IHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvLi4uKQorICovCisKKyNpZiBDT05TVF9CSVRTID09IDEzCisjZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgKChKTE9ORykyNDQ2KSAgICAgICAgICAvKiBGSVgoMC4yOTg2MzEzMzYpICovCisjZGVmaW5lIEZJWF8wXzM5MDE4MDY0NCAgKChKTE9ORykzMTk2KSAgICAgICAgICAvKiBGSVgoMC4zOTAxODA2NDQpICovCisjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMCAgKChKTE9ORyk0NDMzKSAgICAgICAgICAvKiBGSVgoMC41NDExOTYxMDApICovCisjZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgKChKTE9ORyk2MjcwKSAgICAgICAgICAvKiBGSVgoMC43NjUzNjY4NjUpICovCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKChKTE9ORyk3MzczKSAgICAgICAgICAvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZJWF8xXzE3NTg3NTYwMiAgKChKTE9ORyk5NjMzKSAgICAgICAgICAvKiBGSVgoMS4xNzU4NzU2MDIpICovCisjZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgKChKTE9ORykxMjI5OSkgICAgICAgICAvKiBGSVgoMS41MDEzMjExMTApICovCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChKTE9ORykxNTEzNykgICAgICAgICAvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZJWF8xXzk2MTU3MDU2MCAgKChKTE9ORykxNjA2OSkgICAgICAgICAvKiBGSVgoMS45NjE1NzA1NjApICovCisjZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgKChKTE9ORykxNjgxOSkgICAgICAgICAvKiBGSVgoMi4wNTMxMTk4NjkpICovCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKChKTE9ORykyMDk5NSkgICAgICAgICAvKiBGSVgoMi41NjI5MTU0NDcpICovCisjZGVmaW5lIEZJWF8zXzA3MjcxMTAyNiAgKChKTE9ORykyNTE3MikgICAgICAgICAvKiBGSVgoMy4wNzI3MTEwMjYpICovCisjZWxzZQorI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgIEZJWCgwLjI5ODYzMTMzNikKKyNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICBGSVgoMC4zOTAxODA2NDQpCisjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMCAgRklYKDAuNTQxMTk2MTAwKQorI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgIEZJWCgwLjc2NTM2Njg2NSkKKyNkZWZpbmUgRklYXzBfODk5OTc2MjIzICBGSVgoMC44OTk5NzYyMjMpCisjZGVmaW5lIEZJWF8xXzE3NTg3NTYwMiAgRklYKDEuMTc1ODc1NjAyKQorI2RlZmluZSBGSVhfMV81MDEzMjExMTAgIEZJWCgxLjUwMTMyMTExMCkKKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpCisjZGVmaW5lIEZJWF8xXzk2MTU3MDU2MCAgRklYKDEuOTYxNTcwNTYwKQorI2RlZmluZSBGSVhfMl8wNTMxMTk4NjkgIEZJWCgyLjA1MzExOTg2OSkKKyNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICBGSVgoMi41NjI5MTU0NDcpCisjZGVmaW5lIEZJWF8zXzA3MjcxMTAyNiAgRklYKDMuMDcyNzExMDI2KQorI2VuZGlmCisKKworLyogTXVsdGlwbHkgYW4gSkxPTkcgdmFyaWFibGUgYnkgYW4gSkxPTkcgY29uc3RhbnQgdG8geWllbGQgYW4gSkxPTkcgcmVzdWx0LgorICogRm9yIDgtYml0IHNhbXBsZXMgd2l0aCB0aGUgcmVjb21tZW5kZWQgc2NhbGluZywgYWxsIHRoZSB2YXJpYWJsZQorICogYW5kIGNvbnN0YW50IHZhbHVlcyBpbnZvbHZlZCBhcmUgbm8gbW9yZSB0aGFuIDE2IGJpdHMgd2lkZSwgc28gYQorICogMTZ4MTYtPjMyIGJpdCBtdWx0aXBseSBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgZnVsbCAzMngzMiBtdWx0aXBseS4KKyAqIEZvciAxMi1iaXQgc2FtcGxlcywgYSBmdWxsIDMyLWJpdCBtdWx0aXBsaWNhdGlvbiB3aWxsIGJlIG5lZWRlZC4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgTVVMVElQTFkodmFyLCBjb25zdCkgIE1VTFRJUExZMTZDMTYodmFyLCBjb25zdCkKKyNlbHNlCisjZGVmaW5lIE1VTFRJUExZKHZhciwgY29uc3QpICAoKHZhcikgKiAoY29uc3QpKQorI2VuZGlmCisKKworLyogRGVxdWFudGl6ZSBhIGNvZWZmaWNpZW50IGJ5IG11bHRpcGx5aW5nIGl0IGJ5IHRoZSBtdWx0aXBsaWVyLXRhYmxlCisgKiBlbnRyeTsgcHJvZHVjZSBhbiBpbnQgcmVzdWx0LiAgSW4gdGhpcyBtb2R1bGUsIGJvdGggaW5wdXRzIGFuZCByZXN1bHQKKyAqIGFyZSAxNiBiaXRzIG9yIGxlc3MsIHNvIGVpdGhlciBpbnQgb3Igc2hvcnQgbXVsdGlwbHkgd2lsbCB3b3JrLgorICovCisKKyNkZWZpbmUgREVRVUFOVElaRShjb2VmLCBxdWFudHZhbCkgICgoKElTTE9XX01VTFRfVFlQRSkoY29lZikpICogKHF1YW50dmFsKSkKKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF9pc2xvdyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIEpMT05HIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CisgIEpMT05HIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOworICBKTE9ORyB6MSwgejIsIHozLCB6NCwgejU7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKnF1YW50cHRyOworICBpbnQgKndzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbRENUU0laRTJdOyAgICAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKyAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgSURDVDsgKi8KKyAgLyogZnVydGhlcm1vcmUsIHdlIHNjYWxlIHRoZSByZXN1bHRzIGJ5IDIqKlBBU1MxX0JJVFMuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGN0ci0tKSB7CisgICAgLyogRHVlIHRvIHF1YW50aXphdGlvbiwgd2Ugd2lsbCB1c3VhbGx5IGZpbmQgdGhhdCBtYW55IG9mIHRoZSBpbnB1dAorICAgICAqIGNvZWZmaWNpZW50cyBhcmUgemVybywgZXNwZWNpYWxseSB0aGUgQUMgdGVybXMuICBXZSBjYW4gZXhwbG9pdCB0aGlzCisgICAgICogYnkgc2hvcnQtY2lyY3VpdGluZyB0aGUgSURDVCBjYWxjdWxhdGlvbiBmb3IgYW55IGNvbHVtbiBpbiB3aGljaCBhbGwKKyAgICAgKiB0aGUgQUMgdGVybXMgYXJlIHplcm8uICBJbiB0aGF0IGNhc2UgZWFjaCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhlCisgICAgICogREMgY29lZmZpY2llbnQgKHdpdGggc2NhbGUgZmFjdG9yIGFzIG5lZWRlZCkuCisgICAgICogV2l0aCB0eXBpY2FsIGltYWdlcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcywgaGFsZiBvciBtb3JlIG9mIHRoZQorICAgICAqIGNvbHVtbiBEQ1QgY2FsY3VsYXRpb25zIGNhbiBiZSBzaW1wbGlmaWVkIHRoaXMgd2F5LgorICAgICAqLworCisgICAgaWYgKGlucHRyW0RDVFNJWkUgKiAxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUgKiAyXSA9PSAwICYmCisgICAgICAgIGlucHRyW0RDVFNJWkUgKiAzXSA9PSAwICYmIGlucHRyW0RDVFNJWkUgKiA0XSA9PSAwICYmCisgICAgICAgIGlucHRyW0RDVFNJWkUgKiA1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUgKiA2XSA9PSAwICYmCisgICAgICAgIGlucHRyW0RDVFNJWkUgKiA3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLworICAgICAgaW50IGRjdmFsID0gTEVGVF9TSElGVChERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRwdHJbRENUU0laRSAqIDBdKSwgUEFTUzFfQklUUyk7CisKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAwXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDFdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogMl0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAzXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDRdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogNV0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiA2XSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDddID0gZGN2YWw7CisKKyAgICAgIGlucHRyKys7ICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworICAgICAgcXVhbnRwdHIrKzsKKyAgICAgIHdzcHRyKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFdmVuIHBhcnQ6IHJldmVyc2UgdGhlIGV2ZW4gcGFydCBvZiB0aGUgZm9yd2FyZCBEQ1QuICovCisgICAgLyogVGhlIHJvdGF0b3IgaXMgc3FydCgyKSpjKC02KS4gKi8KKworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMl0sIHF1YW50cHRyW0RDVFNJWkUgKiAyXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKworICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKKyAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLUZJWF8xXzg0Nzc1OTA2NSk7CisgICAgdG1wMyA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7CisKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDBdLCBxdWFudHB0cltEQ1RTSVpFICogMF0pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNF0sIHF1YW50cHRyW0RDVFNJWkUgKiA0XSk7CisKKyAgICB0bXAwID0gTEVGVF9TSElGVCh6MiArIHozLCBDT05TVF9CSVRTKTsKKyAgICB0bXAxID0gTEVGVF9TSElGVCh6MiAtIHozLCBDT05TVF9CSVRTKTsKKworICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKKyAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOworICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7CisKKyAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCisgICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCisgICAgICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogN10sIHF1YW50cHRyW0RDVFNJWkUgKiA3XSk7CisgICAgdG1wMSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDVdLCBxdWFudHB0cltEQ1RTSVpFICogNV0pOworICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAzXSwgcXVhbnRwdHJbRENUU0laRSAqIDNdKTsKKyAgICB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMV0sIHF1YW50cHRyW0RDVFNJWkUgKiAxXSk7CisKKyAgICB6MSA9IHRtcDAgKyB0bXAzOworICAgIHoyID0gdG1wMSArIHRtcDI7CisgICAgejMgPSB0bXAwICsgdG1wMjsKKyAgICB6NCA9IHRtcDEgKyB0bXAzOworICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCisKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCisgICAgdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLworICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KKyAgICB0bXAzID0gTVVMVElQTFkodG1wMywgRklYXzFfNTAxMzIxMTEwKTsgLyogc3FydCgyKSAqICggYzErYzMtYzUtYzcpICovCisgICAgejEgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoIGM3LWMzKSAqLworICAgIHoyID0gTVVMVElQTFkoejIsIC1GSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KKyAgICB6MyA9IE1VTFRJUExZKHozLCAtRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCisgICAgejQgPSBNVUxUSVBMWSh6NCwgLUZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoIGM1LWMzKSAqLworCisgICAgejMgKz0gejU7CisgICAgejQgKz0gejU7CisKKyAgICB0bXAwICs9IHoxICsgejM7CisgICAgdG1wMSArPSB6MiArIHo0OworICAgIHRtcDIgKz0gejIgKyB6MzsKKyAgICB0bXAzICs9IHoxICsgejQ7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGlucHV0cyBhcmUgdG1wMTAuLnRtcDEzLCB0bXAwLi50bXAzICovCisKKyAgICB3c3B0cltEQ1RTSVpFICogMF0gPSAoaW50KURFU0NBTEUodG1wMTAgKyB0bXAzLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSAqIDddID0gKGludClERVNDQUxFKHRtcDEwIC0gdG1wMywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9IChpbnQpREVTQ0FMRSh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFICogNl0gPSAoaW50KURFU0NBTEUodG1wMTEgLSB0bXAyLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSAqIDJdID0gKGludClERVNDQUxFKHRtcDEyICsgdG1wMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyW0RDVFNJWkUgKiA1XSA9IChpbnQpREVTQ0FMRSh0bXAxMiAtIHRtcDEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFICogM10gPSAoaW50KURFU0NBTEUodG1wMTMgKyB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSAqIDRdID0gKGludClERVNDQUxFKHRtcDEzIC0gdG1wMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworCisgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICBxdWFudHB0cisrOworICAgIHdzcHRyKys7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworICAvKiBOb3RlIHRoYXQgd2UgbXVzdCBkZXNjYWxlIHRoZSByZXN1bHRzIGJ5IGEgZmFjdG9yIG9mIDggPT0gMioqMywgKi8KKyAgLyogYW5kIGFsc28gdW5kbyB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IERDVFNJWkU7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKyAgICAvKiBSb3dzIG9mIHplcm9lcyBjYW4gYmUgZXhwbG9pdGVkIGluIHRoZSBzYW1lIHdheSBhcyB3ZSBkaWQgd2l0aCBjb2x1bW5zLgorICAgICAqIEhvd2V2ZXIsIHRoZSBjb2x1bW4gY2FsY3VsYXRpb24gaGFzIGNyZWF0ZWQgbWFueSBub256ZXJvIEFDIHRlcm1zLCBzbworICAgICAqIHRoZSBzaW1wbGlmaWNhdGlvbiBhcHBsaWVzIGxlc3Mgb2Z0ZW4gKHR5cGljYWxseSA1JSB0byAxMCUgb2YgdGhlIHRpbWUpLgorICAgICAqIE9uIG1hY2hpbmVzIHdpdGggdmVyeSBmYXN0IG11bHRpcGxpY2F0aW9uLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCisgICAgICogdGVzdCB0YWtlcyBtb3JlIHRpbWUgdGhhbiBpdCdzIHdvcnRoLiAgSW4gdGhhdCBjYXNlIHRoaXMgc2VjdGlvbgorICAgICAqIG1heSBiZSBjb21tZW50ZWQgb3V0LgorICAgICAqLworCisjaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKKyAgICBpZiAod3NwdHJbMV0gPT0gMCAmJiB3c3B0clsyXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNF0gPT0gMCAmJgorICAgICAgICB3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KKyAgICAgIEpTQU1QTEUgZGN2YWwgPSByYW5nZV9saW1pdFsoaW50KURFU0NBTEUoKEpMT05HKXdzcHRyWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTMV9CSVRTICsgMykgJiBSQU5HRV9NQVNLXTsKKworICAgICAgb3V0cHRyWzBdID0gZGN2YWw7CisgICAgICBvdXRwdHJbMV0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsyXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzNdID0gZGN2YWw7CisgICAgICBvdXRwdHJbNF0gPSBkY3ZhbDsKKyAgICAgIG91dHB0cls1XSA9IGRjdmFsOworICAgICAgb3V0cHRyWzZdID0gZGN2YWw7CisgICAgICBvdXRwdHJbN10gPSBkY3ZhbDsKKworICAgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgorCisgICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLworICAgIC8qIFRoZSByb3RhdG9yIGlzIHNxcnQoMikqYygtNikuICovCisKKyAgICB6MiA9IChKTE9ORyl3c3B0clsyXTsKKyAgICB6MyA9IChKTE9ORyl3c3B0cls2XTsKKworICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKKyAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLUZJWF8xXzg0Nzc1OTA2NSk7CisgICAgdG1wMyA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7CisKKyAgICB0bXAwID0gTEVGVF9TSElGVCgoSkxPTkcpd3NwdHJbMF0gKyAoSkxPTkcpd3NwdHJbNF0sIENPTlNUX0JJVFMpOworICAgIHRtcDEgPSBMRUZUX1NISUZUKChKTE9ORyl3c3B0clswXSAtIChKTE9ORyl3c3B0cls0XSwgQ09OU1RfQklUUyk7CisKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOworCisgICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4OyB0aGUgbWF0cml4IGlzIHVuaXRhcnkgYW5kIGhlbmNlIGl0cworICAgICAqIHRyYW5zcG9zZSBpcyBpdHMgaW52ZXJzZS4gIGkwLi5pMyBhcmUgeTcseTUseTMseTEgcmVzcGVjdGl2ZWx5LgorICAgICAqLworCisgICAgdG1wMCA9IChKTE9ORyl3c3B0cls3XTsKKyAgICB0bXAxID0gKEpMT05HKXdzcHRyWzVdOworICAgIHRtcDIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgdG1wMyA9IChKTE9ORyl3c3B0clsxXTsKKworICAgIHoxID0gdG1wMCArIHRtcDM7CisgICAgejIgPSB0bXAxICsgdG1wMjsKKyAgICB6MyA9IHRtcDAgKyB0bXAyOworICAgIHo0ID0gdG1wMSArIHRtcDM7CisgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KKworICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8KKyAgICB0bXAxID0gTVVMVElQTFkodG1wMSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovCisgICAgdG1wMiA9IE1VTFRJUExZKHRtcDIsIEZJWF8zXzA3MjcxMTAyNik7IC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1LWM3KSAqLworICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNS1jNykgKi8KKyAgICB6MSA9IE1VTFRJUExZKHoxLCAtRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqICggYzctYzMpICovCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLUZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLworICAgIHozID0gTVVMVElQTFkoejMsIC1GSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCAtRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqICggYzUtYzMpICovCisKKyAgICB6MyArPSB6NTsKKyAgICB6NCArPSB6NTsKKworICAgIHRtcDAgKz0gejEgKyB6MzsKKyAgICB0bXAxICs9IHoyICsgejQ7CisgICAgdG1wMiArPSB6MiArIHozOworICAgIHRtcDMgKz0gejEgKyB6NDsKKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMCArIHRtcDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMCAtIHRtcDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMSArIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMSAtIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMiArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMiAtIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMyArIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMyAtIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKyNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSA3eDcgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAxMiBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNCkuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfN3g3KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBKTE9ORyB0bXAwLCB0bXAxLCB0bXAyLCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKKyAgSkxPTkcgejEsIHoyLCB6MzsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqcXVhbnRwdHI7CisgIGludCAqd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVs3ICogN107ICAgICAgICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA3OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwgcXVhbnRwdHJbRENUU0laRSAqIDBdKTsKKyAgICB0bXAxMyA9IExFRlRfU0hJRlQodG1wMTMsIENPTlNUX0JJVFMpOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMyArPSBPTkUgPDwgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTIC0gMSk7CisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNF0sIHF1YW50cHRyW0RDVFNJWkUgKiA0XSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejIgLSB6MywgRklYKDAuODgxNzQ3NzM0KSk7ICAgICAvKiBjNCAqLworICAgIHRtcDEyID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuMzE0NjkyMTIzKSk7ICAgICAvKiBjNiAqLworICAgIHRtcDExID0gdG1wMTAgKyB0bXAxMiArIHRtcDEzIC0gTVVMVElQTFkoejIsIEZJWCgxLjg0MTIxODAwMykpOyAvKiBjMitjNC1jNiAqLworICAgIHRtcDAgPSB6MSArIHozOworICAgIHoyIC09IHRtcDA7CisgICAgdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWCgxLjI3NDE2MjM5MikpICsgdG1wMTM7IC8qIGMyICovCisgICAgdG1wMTAgKz0gdG1wMCAtIE1VTFRJUExZKHozLCBGSVgoMC4wNzc3MjI1MzYpKTsgIC8qIGMyLWM0LWM2ICovCisgICAgdG1wMTIgKz0gdG1wMCAtIE1VTFRJUExZKHoxLCBGSVgoMi40NzA2MDIyNDkpKTsgIC8qIGMyK2M0K2M2ICovCisgICAgdG1wMTMgKz0gTVVMVElQTFkoejIsIEZJWCgxLjQxNDIxMzU2MikpOyAgICAgICAgIC8qIGMwICovCisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAxXSwgcXVhbnRwdHJbRENUU0laRSAqIDFdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDNdLCBxdWFudHB0cltEQ1RTSVpFICogM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNV0sIHF1YW50cHRyW0RDVFNJWkUgKiA1XSk7CisKKyAgICB0bXAxID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDAuOTM1NDE0MzQ3KSk7ICAgICAgLyogKGMzK2MxLWM1KS8yICovCisgICAgdG1wMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjE3MDI2MjMzOSkpOyAgICAgIC8qIChjMytjNS1jMSkvMiAqLworICAgIHRtcDAgPSB0bXAxIC0gdG1wMjsKKyAgICB0bXAxICs9IHRtcDI7CisgICAgdG1wMiA9IE1VTFRJUExZKHoyICsgejMsIC1GSVgoMS4zNzg3NTYyNzYpKTsgICAgIC8qIC1jMSAqLworICAgIHRtcDEgKz0gdG1wMjsKKyAgICB6MiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjYxMzYwNDI2OCkpOyAgICAgICAgLyogYzUgKi8KKyAgICB0bXAwICs9IHoyOworICAgIHRtcDIgKz0gejIgKyBNVUxUSVBMWSh6MywgRklYKDEuODcwODI4NjkzKSk7ICAgICAvKiBjMytjMS1jNSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICB3c3B0cls3ICogMF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzcgKiA2XSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNyAqIDFdID0gKGludClSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls3ICogNV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzcgKiAyXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNyAqIDRdID0gKGludClSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls3ICogM10gPSAoaW50KVJJR0hUX1NISUZUKHRtcDEzLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgNyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgNzsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMTMgPSAoSkxPTkcpd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTICsgMikpOworICAgIHRtcDEzID0gTEVGVF9TSElGVCh0bXAxMywgQ09OU1RfQklUUyk7CisKKyAgICB6MSA9IChKTE9ORyl3c3B0clsyXTsKKyAgICB6MiA9IChKTE9ORyl3c3B0cls0XTsKKyAgICB6MyA9IChKTE9ORyl3c3B0cls2XTsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejIgLSB6MywgRklYKDAuODgxNzQ3NzM0KSk7ICAgICAvKiBjNCAqLworICAgIHRtcDEyID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuMzE0NjkyMTIzKSk7ICAgICAvKiBjNiAqLworICAgIHRtcDExID0gdG1wMTAgKyB0bXAxMiArIHRtcDEzIC0gTVVMVElQTFkoejIsIEZJWCgxLjg0MTIxODAwMykpOyAvKiBjMitjNC1jNiAqLworICAgIHRtcDAgPSB6MSArIHozOworICAgIHoyIC09IHRtcDA7CisgICAgdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWCgxLjI3NDE2MjM5MikpICsgdG1wMTM7IC8qIGMyICovCisgICAgdG1wMTAgKz0gdG1wMCAtIE1VTFRJUExZKHozLCBGSVgoMC4wNzc3MjI1MzYpKTsgIC8qIGMyLWM0LWM2ICovCisgICAgdG1wMTIgKz0gdG1wMCAtIE1VTFRJUExZKHoxLCBGSVgoMi40NzA2MDIyNDkpKTsgIC8qIGMyK2M0K2M2ICovCisgICAgdG1wMTMgKz0gTVVMVElQTFkoejIsIEZJWCgxLjQxNDIxMzU2MikpOyAgICAgICAgIC8qIGMwICovCisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMV07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNV07CisKKyAgICB0bXAxID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDAuOTM1NDE0MzQ3KSk7ICAgICAgLyogKGMzK2MxLWM1KS8yICovCisgICAgdG1wMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjE3MDI2MjMzOSkpOyAgICAgIC8qIChjMytjNS1jMSkvMiAqLworICAgIHRtcDAgPSB0bXAxIC0gdG1wMjsKKyAgICB0bXAxICs9IHRtcDI7CisgICAgdG1wMiA9IE1VTFRJUExZKHoyICsgejMsIC1GSVgoMS4zNzg3NTYyNzYpKTsgICAgIC8qIC1jMSAqLworICAgIHRtcDEgKz0gdG1wMjsKKyAgICB6MiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjYxMzYwNDI2OCkpOyAgICAgICAgLyogYzUgKi8KKyAgICB0bXAwICs9IHoyOworICAgIHRtcDIgKz0gejIgKyBNVUxUSVBMWSh6MywgRklYKDEuODcwODI4NjkzKSk7ICAgICAvKiBjMytjMS1jNSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA3OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNng2IG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMyBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfNng2KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBKTE9ORyB0bXAwLCB0bXAxLCB0bXAyLCB0bXAxMCwgdG1wMTEsIHRtcDEyOworICBKTE9ORyB6MSwgejIsIHozOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgaW50ICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzYgKiA2XTsgICAgICAgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7CisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgdG1wMCA9IExFRlRfU0hJRlQodG1wMCwgQ09OU1RfQklUUyk7CisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyAtIDEpOworICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA0XSwgcXVhbnRwdHJbRENUU0laRSAqIDRdKTsKKyAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAgIC8qIGM0ICovCisgICAgdG1wMSA9IHRtcDAgKyB0bXAxMDsKKyAgICB0bXAxMSA9IFJJR0hUX1NISUZUKHRtcDAgLSB0bXAxMCAtIHRtcDEwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgdG1wMTAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAyXSwgcXVhbnRwdHJbRENUU0laRSAqIDJdKTsKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMTAsIEZJWCgxLjIyNDc0NDg3MSkpOyAgIC8qIGMyICovCisgICAgdG1wMTAgPSB0bXAxICsgdG1wMDsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAwOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMV0sIHF1YW50cHRyW0RDVFNJWkUgKiAxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAzXSwgcXVhbnRwdHJbRENUU0laRSAqIDNdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDVdLCBxdWFudHB0cltEQ1RTSVpFICogNV0pOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC4zNjYwMjU0MDQpKTsgLyogYzUgKi8KKyAgICB0bXAwID0gdG1wMSArIExFRlRfU0hJRlQoejEgKyB6MiwgQ09OU1RfQklUUyk7CisgICAgdG1wMiA9IHRtcDEgKyBMRUZUX1NISUZUKHozIC0gejIsIENPTlNUX0JJVFMpOworICAgIHRtcDEgPSBMRUZUX1NISUZUKHoxIC0gejIgLSB6MywgUEFTUzFfQklUUyk7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzYgKiAwXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNiAqIDVdID0gKGludClSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls2ICogMV0gPSAoaW50KSh0bXAxMSArIHRtcDEpOworICAgIHdzcHRyWzYgKiA0XSA9IChpbnQpKHRtcDExIC0gdG1wMSk7CisgICAgd3NwdHJbNiAqIDJdID0gKGludClSSUdIVF9TSElGVCh0bXAxMiArIHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls2ICogM10gPSAoaW50KVJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDYgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgPSAoSkxPTkcpd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTICsgMikpOworICAgIHRtcDAgPSBMRUZUX1NISUZUKHRtcDAsIENPTlNUX0JJVFMpOworICAgIHRtcDIgPSAoSkxPTkcpd3NwdHJbNF07CisgICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAyLCBGSVgoMC43MDcxMDY3ODEpKTsgICAvKiBjNCAqLworICAgIHRtcDEgPSB0bXAwICsgdG1wMTA7CisgICAgdG1wMTEgPSB0bXAwIC0gdG1wMTAgLSB0bXAxMDsKKyAgICB0bXAxMCA9IChKTE9ORyl3c3B0clsyXTsKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMTAsIEZJWCgxLjIyNDc0NDg3MSkpOyAgIC8qIGMyICovCisgICAgdG1wMTAgPSB0bXAxICsgdG1wMDsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAwOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gKEpMT05HKXdzcHRyWzFdOworICAgIHoyID0gKEpMT05HKXdzcHRyWzNdOworICAgIHozID0gKEpMT05HKXdzcHRyWzVdOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC4zNjYwMjU0MDQpKTsgLyogYzUgKi8KKyAgICB0bXAwID0gdG1wMSArIExFRlRfU0hJRlQoejEgKyB6MiwgQ09OU1RfQklUUyk7CisgICAgdG1wMiA9IHRtcDEgKyBMRUZUX1NISUZUKHozIC0gejIsIENPTlNUX0JJVFMpOworICAgIHRtcDEgPSBMRUZUX1NISUZUKHoxIC0gejIgLSB6MywgQ09OU1RfQklUUyk7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDExICsgdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTEgLSB0bXAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMiArIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gNjsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDV4NSBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDUgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTApLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzV4NShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSkxPTkcgdG1wMCwgdG1wMSwgdG1wMTAsIHRtcDExLCB0bXAxMjsKKyAgSkxPTkcgejEsIHoyLCB6MzsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqcXVhbnRwdHI7CisgIGludCAqd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVs1ICogNV07ICAgICAgICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA1OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwgcXVhbnRwdHJbRENUU0laRSAqIDBdKTsKKyAgICB0bXAxMiA9IExFRlRfU0hJRlQodG1wMTIsIENPTlNUX0JJVFMpOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMiArPSBPTkUgPDwgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTIC0gMSk7CisgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHRtcDEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA0XSwgcXVhbnRwdHJbRENUU0laRSAqIDRdKTsKKyAgICB6MSA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMC43OTA1Njk0MTUpKTsgLyogKGMyK2M0KS8yICovCisgICAgejIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMSwgRklYKDAuMzUzNTUzMzkxKSk7IC8qIChjMi1jNCkvMiAqLworICAgIHozID0gdG1wMTIgKyB6MjsKKyAgICB0bXAxMCA9IHozICsgejE7CisgICAgdG1wMTEgPSB6MyAtIHoxOworICAgIHRtcDEyIC09IExFRlRfU0hJRlQoejIsIDIpOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMV0sIHF1YW50cHRyW0RDVFNJWkUgKiAxXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAzXSwgcXVhbnRwdHJbRENUU0laRSAqIDNdKTsKKworICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuODMxMjUzODc2KSk7ICAgICAvKiBjMyAqLworICAgIHRtcDAgPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC41MTM3NDMxNDgpKTsgICAvKiBjMS1jMyAqLworICAgIHRtcDEgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgICAvKiBjMStjMyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICB3c3B0cls1ICogMF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzUgKiA0XSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNSAqIDFdID0gKGludClSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls1ICogM10gPSAoaW50KVJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzUgKiAyXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyA1IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA1OyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMiA9IChKTE9ORyl3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMgKyAyKSk7CisgICAgdG1wMTIgPSBMRUZUX1NISUZUKHRtcDEyLCBDT05TVF9CSVRTKTsKKyAgICB0bXAwID0gKEpMT05HKXdzcHRyWzJdOworICAgIHRtcDEgPSAoSkxPTkcpd3NwdHJbNF07CisgICAgejEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMSwgRklYKDAuNzkwNTY5NDE1KSk7IC8qIChjMitjNCkvMiAqLworICAgIHoyID0gTVVMVElQTFkodG1wMCAtIHRtcDEsIEZJWCgwLjM1MzU1MzM5MSkpOyAvKiAoYzItYzQpLzIgKi8KKyAgICB6MyA9IHRtcDEyICsgejI7CisgICAgdG1wMTAgPSB6MyArIHoxOworICAgIHRtcDExID0gejMgLSB6MTsKKyAgICB0bXAxMiAtPSBMRUZUX1NISUZUKHoyLCAyKTsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MiA9IChKTE9ORyl3c3B0clsxXTsKKyAgICB6MyA9IChKTE9ORyl3c3B0clszXTsKKworICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuODMxMjUzODc2KSk7ICAgICAvKiBjMyAqLworICAgIHRtcDAgPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC41MTM3NDMxNDgpKTsgICAvKiBjMS1jMyAqLworICAgIHRtcDEgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgICAvKiBjMStjMyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDU7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAzeDMgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzYpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzN4MyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSkxPTkcgdG1wMCwgdG1wMiwgdG1wMTAsIHRtcDEyOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgaW50ICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzMgKiAzXTsgICAgICAgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDM7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7CisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgdG1wMCA9IExFRlRfU0hJRlQodG1wMCwgQ09OU1RfQklUUyk7CisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyAtIDEpOworICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAyXSwgcXVhbnRwdHJbRENUU0laRSAqIDJdKTsKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAvKiBjMiAqLworICAgIHRtcDEwID0gdG1wMCArIHRtcDEyOworICAgIHRtcDIgPSB0bXAwIC0gdG1wMTIgLSB0bXAxMjsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXAxMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDFdLCBxdWFudHB0cltEQ1RTSVpFICogMV0pOworICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAxMiwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMxICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzMgKiAwXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbMyAqIDJdID0gKGludClSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0clszICogMV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyAzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAzOyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAwID0gKEpMT05HKXdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUyArIDIpKTsKKyAgICB0bXAwID0gTEVGVF9TSElGVCh0bXAwLCBDT05TVF9CSVRTKTsKKyAgICB0bXAyID0gKEpMT05HKXdzcHRyWzJdOworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGMyICovCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMTI7CisgICAgdG1wMiA9IHRtcDAgLSB0bXAxMiAtIHRtcDEyOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHRtcDEyID0gKEpMT05HKXdzcHRyWzFdOworICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAxMiwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMxICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDM7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIDl4OSBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDEwIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE4KS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF85eDkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIEpMT05HIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNDsKKyAgSkxPTkcgejEsIHoyLCB6MywgejQ7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKnF1YW50cHRyOworICBpbnQgKndzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbOCAqIDldOyAgICAgICAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKWNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwgcXVhbnRwdHJbRENUU0laRSAqIDBdKTsKKyAgICB0bXAwID0gTEVGVF9TSElGVCh0bXAwLCBDT05TVF9CSVRTKTsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMCArPSBPTkUgPDwgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTIC0gMSk7CisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNF0sIHF1YW50cHRyW0RDVFNJWkUgKiA0XSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKworICAgIHRtcDMgPSBNVUxUSVBMWSh6MywgRklYKDAuNzA3MTA2NzgxKSk7ICAgICAgLyogYzYgKi8KKyAgICB0bXAxID0gdG1wMCArIHRtcDM7CisgICAgdG1wMiA9IHRtcDAgLSB0bXAzIC0gdG1wMzsKKworICAgIHRtcDAgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC43MDcxMDY3ODEpKTsgLyogYzYgKi8KKyAgICB0bXAxMSA9IHRtcDIgKyB0bXAwOworICAgIHRtcDE0ID0gdG1wMiAtIHRtcDAgLSB0bXAwOworCisgICAgdG1wMCA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyODkyNjA0OSkpOyAvKiBjMiAqLworICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgRklYKDEuMDgzMzUwNDQxKSk7ICAgICAgLyogYzQgKi8KKyAgICB0bXAzID0gTVVMVElQTFkoejIsIEZJWCgwLjI0NTU3NTYwOCkpOyAgICAgIC8qIGM4ICovCisKKyAgICB0bXAxMCA9IHRtcDEgKyB0bXAwIC0gdG1wMzsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAwICsgdG1wMjsKKyAgICB0bXAxMyA9IHRtcDEgLSB0bXAyICsgdG1wMzsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDFdLCBxdWFudHB0cltEQ1RTSVpFICogMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogM10sIHF1YW50cHRyW0RDVFNJWkUgKiAzXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDddLCBxdWFudHB0cltEQ1RTSVpFICogN10pOworCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLUZJWCgxLjIyNDc0NDg3MSkpOyAgICAgICAgICAgIC8qIC1jMyAqLworCisgICAgdG1wMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjkwOTAzODk1NSkpOyAgICAgIC8qIGM1ICovCisgICAgdG1wMyA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjQ4MzY4OTUyNSkpOyAgICAgIC8qIGM3ICovCisgICAgdG1wMCA9IHRtcDIgKyB0bXAzIC0gejI7CisgICAgdG1wMSA9IE1VTFRJUExZKHozIC0gejQsIEZJWCgxLjM5MjcyODQ4MSkpOyAgICAgIC8qIGMxICovCisgICAgdG1wMiArPSB6MiAtIHRtcDE7CisgICAgdG1wMyArPSB6MiArIHRtcDE7CisgICAgdG1wMSA9IE1VTFRJUExZKHoxIC0gejMgLSB6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMzICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzggKiAwXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDhdID0gKGludClSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDExICsgdG1wMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA3XSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTEgLSB0bXAxLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDJdID0gKGludClSSUdIVF9TSElGVCh0bXAxMiArIHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNl0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAzXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMTMgKyB0bXAzLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDVdID0gKGludClSSUdIVF9TSElGVCh0bXAxMyAtIHRtcDMsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDE0LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgOSByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgOTsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMCA9IChKTE9ORyl3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMgKyAyKSk7CisgICAgdG1wMCA9IExFRlRfU0hJRlQodG1wMCwgQ09OU1RfQklUUyk7CisKKyAgICB6MSA9IChKTE9ORyl3c3B0clsyXTsKKyAgICB6MiA9IChKTE9ORyl3c3B0cls0XTsKKyAgICB6MyA9IChKTE9ORyl3c3B0cls2XTsKKworICAgIHRtcDMgPSBNVUxUSVBMWSh6MywgRklYKDAuNzA3MTA2NzgxKSk7ICAgICAgLyogYzYgKi8KKyAgICB0bXAxID0gdG1wMCArIHRtcDM7CisgICAgdG1wMiA9IHRtcDAgLSB0bXAzIC0gdG1wMzsKKworICAgIHRtcDAgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC43MDcxMDY3ODEpKTsgLyogYzYgKi8KKyAgICB0bXAxMSA9IHRtcDIgKyB0bXAwOworICAgIHRtcDE0ID0gdG1wMiAtIHRtcDAgLSB0bXAwOworCisgICAgdG1wMCA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyODkyNjA0OSkpOyAvKiBjMiAqLworICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgRklYKDEuMDgzMzUwNDQxKSk7ICAgICAgLyogYzQgKi8KKyAgICB0bXAzID0gTVVMVElQTFkoejIsIEZJWCgwLjI0NTU3NTYwOCkpOyAgICAgIC8qIGM4ICovCisKKyAgICB0bXAxMCA9IHRtcDEgKyB0bXAwIC0gdG1wMzsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAwICsgdG1wMjsKKyAgICB0bXAxMyA9IHRtcDEgLSB0bXAyICsgdG1wMzsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IChKTE9ORyl3c3B0clsxXTsKKyAgICB6MiA9IChKTE9ORyl3c3B0clszXTsKKyAgICB6MyA9IChKTE9ORyl3c3B0cls1XTsKKyAgICB6NCA9IChKTE9ORyl3c3B0cls3XTsKKworICAgIHoyID0gTVVMVElQTFkoejIsIC1GSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgICAvKiAtYzMgKi8KKworICAgIHRtcDIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC45MDkwMzg5NTUpKTsgICAgICAvKiBjNSAqLworICAgIHRtcDMgPSBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMC40ODM2ODk1MjUpKTsgICAgICAvKiBjNyAqLworICAgIHRtcDAgPSB0bXAyICsgdG1wMyAtIHoyOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MyAtIHo0LCBGSVgoMS4zOTI3Mjg0ODEpKTsgICAgICAvKiBjMSAqLworICAgIHRtcDIgKz0gejIgLSB0bXAxOworICAgIHRtcDMgKz0gejIgKyB0bXAxOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSAtIHozIC0gejQsIEZJWCgxLjIyNDc0NDg3MSkpOyAvKiBjMyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls4XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzZdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDEzICsgdG1wMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMTMgLSB0bXAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gODsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgMTB4MTAgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAxMiBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yMCkuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMTB4MTAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBKTE9ORyB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQ7CisgIEpMT05HIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNDsKKyAgSkxPTkcgejEsIHoyLCB6MywgejQsIHo1OworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgaW50ICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzggKiAxMF07ICAgICAgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7CisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDBdLCBxdWFudHB0cltEQ1RTSVpFICogMF0pOworICAgIHozID0gTEVGVF9TSElGVCh6MywgQ09OU1RfQklUUyk7CisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHozICs9IE9ORSA8PCAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMgLSAxKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDRdLCBxdWFudHB0cltEQ1RTSVpFICogNF0pOworICAgIHoxID0gTVVMVElQTFkoejQsIEZJWCgxLjE0NDEyMjgwNikpOyAgICAgICAgIC8qIGM0ICovCisgICAgejIgPSBNVUxUSVBMWSh6NCwgRklYKDAuNDM3MDE2MDI0KSk7ICAgICAgICAgLyogYzggKi8KKyAgICB0bXAxMCA9IHozICsgejE7CisgICAgdG1wMTEgPSB6MyAtIHoyOworCisgICAgdG1wMjIgPSBSSUdIVF9TSElGVCh6MyAtIExFRlRfU0hJRlQoejEgLSB6MiwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7IC8qIGMwID0gKGM0LWM4KSoyICovCisKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNl0sIHF1YW50cHRyW0RDVFNJWkUgKiA2XSk7CisKKyAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAvKiBjNiAqLworICAgIHRtcDEyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDAuNTEzNzQzMTQ4KSk7IC8qIGMyLWM2ICovCisgICAgdG1wMTMgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgLyogYzIrYzYgKi8KKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKKyAgICB0bXAyNCA9IHRtcDEwIC0gdG1wMTI7CisgICAgdG1wMjEgPSB0bXAxMSArIHRtcDEzOworICAgIHRtcDIzID0gdG1wMTEgLSB0bXAxMzsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDFdLCBxdWFudHB0cltEQ1RTSVpFICogMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogM10sIHF1YW50cHRyW0RDVFNJWkUgKiAzXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDddLCBxdWFudHB0cltEQ1RTSVpFICogN10pOworCisgICAgdG1wMTEgPSB6MiArIHo0OworICAgIHRtcDEzID0gejIgLSB6NDsKKworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTMsIEZJWCgwLjMwOTAxNjk5NCkpOyAgICAgICAgLyogKGMzLWM3KS8yICovCisgICAgejUgPSBMRUZUX1NISUZUKHozLCBDT05TVF9CSVRTKTsKKworICAgIHoyID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjk1MTA1NjUxNikpOyAgICAgICAgICAgLyogKGMzK2M3KS8yICovCisgICAgejQgPSB6NSArIHRtcDEyOworCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzk2ODAyMjQ3KSkgKyB6MiArIHo0OyAvKiBjMSAqLworICAgIHRtcDE0ID0gTVVMVElQTFkoejEsIEZJWCgwLjIyMTIzMTc0MikpIC0gejIgKyB6NDsgLyogYzkgKi8KKworICAgIHoyID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjU4Nzc4NTI1MikpOyAgICAgICAgICAgLyogKGMxLWM5KS8yICovCisgICAgejQgPSB6NSAtIHRtcDEyIC0gTEVGVF9TSElGVCh0bXAxMywgQ09OU1RfQklUUyAtIDEpOworCisgICAgdG1wMTIgPSBMRUZUX1NISUZUKHoxIC0gdG1wMTMgLSB6MywgUEFTUzFfQklUUyk7CisKKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxLCBGSVgoMS4yNjAwNzM1MTEpKSAtIHoyIC0gejQ7IC8qIGMzICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh6MSwgRklYKDAuNjQyMDM5NTIyKSkgLSB6MiArIHo0OyAvKiBjNyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICB3c3B0cls4ICogMF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogOV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogOF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMl0gPSAoaW50KSh0bXAyMiArIHRtcDEyKTsKKyAgICB3c3B0cls4ICogN10gPSAoaW50KSh0bXAyMiAtIHRtcDEyKTsKKyAgICB3c3B0cls4ICogM10gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNl0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyAxMCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgMTA7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHozID0gKEpMT05HKXdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUyArIDIpKTsKKyAgICB6MyA9IExFRlRfU0hJRlQoejMsIENPTlNUX0JJVFMpOworICAgIHo0ID0gKEpMT05HKXdzcHRyWzRdOworICAgIHoxID0gTVVMVElQTFkoejQsIEZJWCgxLjE0NDEyMjgwNikpOyAgICAgICAgIC8qIGM0ICovCisgICAgejIgPSBNVUxUSVBMWSh6NCwgRklYKDAuNDM3MDE2MDI0KSk7ICAgICAgICAgLyogYzggKi8KKyAgICB0bXAxMCA9IHozICsgejE7CisgICAgdG1wMTEgPSB6MyAtIHoyOworCisgICAgdG1wMjIgPSB6MyAtIExFRlRfU0hJRlQoejEgLSB6MiwgMSk7ICAgICAgICAgLyogYzAgPSAoYzQtYzgpKjIgKi8KKworICAgIHoyID0gKEpMT05HKXdzcHRyWzJdOworICAgIHozID0gKEpMT05HKXdzcHRyWzZdOworCisgICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgLyogYzYgKi8KKyAgICB0bXAxMiA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAvKiBjMi1jNiAqLworICAgIHRtcDEzID0gejEgLSBNVUxUSVBMWSh6MywgRklYKDIuMTc2MjUwODk5KSk7IC8qIGMyK2M2ICovCisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTI7CisgICAgdG1wMjQgPSB0bXAxMCAtIHRtcDEyOworICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxMzsKKyAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTM7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMV07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNV07CisgICAgejMgPSBMRUZUX1NISUZUKHozLCBDT05TVF9CSVRTKTsKKyAgICB6NCA9IChKTE9ORyl3c3B0cls3XTsKKworICAgIHRtcDExID0gejIgKyB6NDsKKyAgICB0bXAxMyA9IHoyIC0gejQ7CisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEzLCBGSVgoMC4zMDkwMTY5OTQpKTsgICAgICAgIC8qIChjMy1jNykvMiAqLworCisgICAgejIgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuOTUxMDU2NTE2KSk7ICAgICAgICAgICAvKiAoYzMrYzcpLzIgKi8KKyAgICB6NCA9IHozICsgdG1wMTI7CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHoxLCBGSVgoMS4zOTY4MDIyNDcpKSArIHoyICsgejQ7IC8qIGMxICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MSwgRklYKDAuMjIxMjMxNzQyKSkgLSB6MiArIHo0OyAvKiBjOSAqLworCisgICAgejIgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuNTg3Nzg1MjUyKSk7ICAgICAgICAgICAvKiAoYzEtYzkpLzIgKi8KKyAgICB6NCA9IHozIC0gdG1wMTIgLSBMRUZUX1NISUZUKHRtcDEzLCBDT05TVF9CSVRTIC0gMSk7CisKKyAgICB0bXAxMiA9IExFRlRfU0hJRlQoejEgLSB0bXAxMywgQ09OU1RfQklUUykgLSB6MzsKKworICAgIHRtcDExID0gTVVMVElQTFkoejEsIEZJWCgxLjI2MDA3MzUxMSkpIC0gejIgLSB6NDsgLyogYzMgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHoxLCBGSVgoMC42NDIwMzk1MjIpKSAtIHoyICsgejQ7IC8qIGM3ICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls5XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls4XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gODsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgMTF4MTEgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyNCBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yMikuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMTF4MTEoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBKTE9ORyB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQ7CisgIEpMT05HIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjU7CisgIEpMT05HIHoxLCB6MiwgejMsIHo0OworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgaW50ICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzggKiAxMV07ICAgICAgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7CisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAxMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDBdLCBxdWFudHB0cltEQ1RTSVpFICogMF0pOworICAgIHRtcDEwID0gTEVGVF9TSElGVCh0bXAxMCwgQ09OU1RfQklUUyk7CisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDEwICs9IE9ORSA8PCAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMgLSAxKTsKKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMl0sIHF1YW50cHRyW0RDVFNJWkUgKiAyXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA0XSwgcXVhbnRwdHJbRENUU0laRSAqIDRdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDZdLCBxdWFudHB0cltEQ1RTSVpFICogNl0pOworCisgICAgdG1wMjAgPSBNVUxUSVBMWSh6MiAtIHozLCBGSVgoMi41NDY2NDAxMzIpKTsgICAgIC8qIGMyK2M0ICovCisgICAgdG1wMjMgPSBNVUxUSVBMWSh6MiAtIHoxLCBGSVgoMC40MzA4MTUwNDUpKTsgICAgIC8qIGMyLWM2ICovCisgICAgejQgPSB6MSArIHozOworICAgIHRtcDI0ID0gTVVMVElQTFkoejQsIC1GSVgoMS4xNTU2NjQ0MDIpKTsgICAgICAgICAvKiAtKGMyLWMxMCkgKi8KKyAgICB6NCAtPSB6MjsKKyAgICB0bXAyNSA9IHRtcDEwICsgTVVMVElQTFkoejQsIEZJWCgxLjM1NjkyNzk3NikpOyAgLyogYzIgKi8KKyAgICB0bXAyMSA9IHRtcDIwICsgdG1wMjMgKyB0bXAyNSAtCisgICAgICAgICAgICBNVUxUSVBMWSh6MiwgRklYKDEuODIxNzkwNzc1KSk7ICAgICAgICAgIC8qIGMyK2M0K2MxMC1jNiAqLworICAgIHRtcDIwICs9IHRtcDI1ICsgTVVMVElQTFkoejMsIEZJWCgyLjExNTgyNTA4NykpOyAvKiBjNCtjNiAqLworICAgIHRtcDIzICs9IHRtcDI1IC0gTVVMVElQTFkoejEsIEZJWCgxLjUxMzU5ODQ3NykpOyAvKiBjNitjOCAqLworICAgIHRtcDI0ICs9IHRtcDI1OworICAgIHRtcDIyID0gdG1wMjQgLSBNVUxUSVBMWSh6MywgRklYKDAuNzg4NzQ5MTIwKSk7ICAvKiBjOCtjMTAgKi8KKyAgICB0bXAyNCArPSBNVUxUSVBMWSh6MiwgRklYKDEuOTQ0NDEzNTIyKSkgLSAgICAgICAgLyogYzIrYzggKi8KKyAgICAgICAgICAgICBNVUxUSVBMWSh6MSwgRklYKDEuMzkwOTc1NzMwKSk7ICAgICAgICAgLyogYzQrYzEwICovCisgICAgdG1wMjUgPSB0bXAxMCAtIE1VTFRJUExZKHo0LCBGSVgoMS40MTQyMTM1NjIpKTsgIC8qIGMwICovCisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAxXSwgcXVhbnRwdHJbRENUU0laRSAqIDFdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDNdLCBxdWFudHB0cltEQ1RTSVpFICogM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNV0sIHF1YW50cHRyW0RDVFNJWkUgKiA1XSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA3XSwgcXVhbnRwdHJbRENUU0laRSAqIDddKTsKKworICAgIHRtcDExID0gejEgKyB6MjsKKyAgICB0bXAxNCA9IE1VTFRJUExZKHRtcDExICsgejMgKyB6NCwgRklYKDAuMzk4NDMwMDAzKSk7IC8qIGM5ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuODg3OTgzOTAyKSk7ICAgICAgICAgICAvKiBjMy1jOSAqLworICAgIHRtcDEyID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuNjcwMzYxMjk1KSk7ICAgICAgICAgLyogYzUtYzkgKi8KKyAgICB0bXAxMyA9IHRtcDE0ICsgTVVMVElQTFkoejEgKyB6NCwgRklYKDAuMzY2MTUxNTc0KSk7IC8qIGM3LWM5ICovCisgICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgwLjkyMzEwNzg2NikpOyAgICAgICAgICAgICAgLyogYzcrYzUrYzMtYzEtMipjOSAqLworICAgIHoxICAgID0gdG1wMTQgLSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMS4xNjMwMTE1NzkpKTsgLyogYzcrYzkgKi8KKyAgICB0bXAxMSArPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMi4wNzMyNzY1ODgpKTsgICAgICAgIC8qIGMxK2M3KzMqYzktYzMgKi8KKyAgICB0bXAxMiArPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMS4xOTIxOTM2MjMpKTsgICAgICAgIC8qIGMzK2M1LWM3LWM5ICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MiArIHo0LCAtRklYKDEuNzk4MjQ4OTEwKSk7ICAgICAgICAvKiAtKGMxK2M5KSAqLworICAgIHRtcDExICs9IHoxOworICAgIHRtcDEzICs9IHoxICsgTVVMVElQTFkoejQsIEZJWCgyLjEwMjQ1ODYzMikpOyAgICAgICAgLyogYzErYzUrYzktYzcgKi8KKyAgICB0bXAxNCArPSBNVUxUSVBMWSh6MiwgLUZJWCgxLjQ2NzIyMTMwMSkpICsgICAgICAgICAgIC8qIC0oYzUrYzkpICovCisgICAgICAgICAgICAgTVVMVElQTFkoejMsIEZJWCgxLjAwMTM4ODkwNSkpIC0gICAgICAgICAgICAvKiBjMS1jOSAqLworICAgICAgICAgICAgIE1VTFRJUExZKHo0LCBGSVgoMS42ODQ4NDM5MDcpKTsgICAgICAgICAgICAgLyogYzMrYzkgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCAqIDBdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxMF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMV0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDldICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAyXSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogOF0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDNdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA3XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNF0gID0gKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDZdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA1XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI1LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgMTEgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDExOyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMCA9IChKTE9ORyl3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMgKyAyKSk7CisgICAgdG1wMTAgPSBMRUZUX1NISUZUKHRtcDEwLCBDT05TVF9CSVRTKTsKKworICAgIHoxID0gKEpMT05HKXdzcHRyWzJdOworICAgIHoyID0gKEpMT05HKXdzcHRyWzRdOworICAgIHozID0gKEpMT05HKXdzcHRyWzZdOworCisgICAgdG1wMjAgPSBNVUxUSVBMWSh6MiAtIHozLCBGSVgoMi41NDY2NDAxMzIpKTsgICAgIC8qIGMyK2M0ICovCisgICAgdG1wMjMgPSBNVUxUSVBMWSh6MiAtIHoxLCBGSVgoMC40MzA4MTUwNDUpKTsgICAgIC8qIGMyLWM2ICovCisgICAgejQgPSB6MSArIHozOworICAgIHRtcDI0ID0gTVVMVElQTFkoejQsIC1GSVgoMS4xNTU2NjQ0MDIpKTsgICAgICAgICAvKiAtKGMyLWMxMCkgKi8KKyAgICB6NCAtPSB6MjsKKyAgICB0bXAyNSA9IHRtcDEwICsgTVVMVElQTFkoejQsIEZJWCgxLjM1NjkyNzk3NikpOyAgLyogYzIgKi8KKyAgICB0bXAyMSA9IHRtcDIwICsgdG1wMjMgKyB0bXAyNSAtCisgICAgICAgICAgICBNVUxUSVBMWSh6MiwgRklYKDEuODIxNzkwNzc1KSk7ICAgICAgICAgIC8qIGMyK2M0K2MxMC1jNiAqLworICAgIHRtcDIwICs9IHRtcDI1ICsgTVVMVElQTFkoejMsIEZJWCgyLjExNTgyNTA4NykpOyAvKiBjNCtjNiAqLworICAgIHRtcDIzICs9IHRtcDI1IC0gTVVMVElQTFkoejEsIEZJWCgxLjUxMzU5ODQ3NykpOyAvKiBjNitjOCAqLworICAgIHRtcDI0ICs9IHRtcDI1OworICAgIHRtcDIyID0gdG1wMjQgLSBNVUxUSVBMWSh6MywgRklYKDAuNzg4NzQ5MTIwKSk7ICAvKiBjOCtjMTAgKi8KKyAgICB0bXAyNCArPSBNVUxUSVBMWSh6MiwgRklYKDEuOTQ0NDEzNTIyKSkgLSAgICAgICAgLyogYzIrYzggKi8KKyAgICAgICAgICAgICBNVUxUSVBMWSh6MSwgRklYKDEuMzkwOTc1NzMwKSk7ICAgICAgICAgLyogYzQrYzEwICovCisgICAgdG1wMjUgPSB0bXAxMCAtIE1VTFRJUExZKHo0LCBGSVgoMS40MTQyMTM1NjIpKTsgIC8qIGMwICovCisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMV07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNV07CisgICAgejQgPSAoSkxPTkcpd3NwdHJbN107CisKKyAgICB0bXAxMSA9IHoxICsgejI7CisgICAgdG1wMTQgPSBNVUxUSVBMWSh0bXAxMSArIHozICsgejQsIEZJWCgwLjM5ODQzMDAwMykpOyAvKiBjOSAqLworICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjg4Nzk4MzkwMikpOyAgICAgICAgICAgLyogYzMtYzkgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjY3MDM2MTI5NSkpOyAgICAgICAgIC8qIGM1LWM5ICovCisgICAgdG1wMTMgPSB0bXAxNCArIE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjM2NjE1MTU3NCkpOyAvKiBjNy1jOSAqLworICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0KKyAgICAgICAgICAgIE1VTFRJUExZKHoxLCBGSVgoMC45MjMxMDc4NjYpKTsgICAgICAgICAgICAgIC8qIGM3K2M1K2MzLWMxLTIqYzkgKi8KKyAgICB6MSAgICA9IHRtcDE0IC0gTVVMVElQTFkoejIgKyB6MywgRklYKDEuMTYzMDExNTc5KSk7IC8qIGM3K2M5ICovCisgICAgdG1wMTEgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDIuMDczMjc2NTg4KSk7ICAgICAgICAvKiBjMStjNyszKmM5LWMzICovCisgICAgdG1wMTIgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDEuMTkyMTkzNjIzKSk7ICAgICAgICAvKiBjMytjNS1jNy1jOSAqLworICAgIHoxICAgID0gTVVMVElQTFkoejIgKyB6NCwgLUZJWCgxLjc5ODI0ODkxMCkpOyAgICAgICAgLyogLShjMStjOSkgKi8KKyAgICB0bXAxMSArPSB6MTsKKyAgICB0bXAxMyArPSB6MSArIE1VTFRJUExZKHo0LCBGSVgoMi4xMDI0NTg2MzIpKTsgICAgICAgIC8qIGMxK2M1K2M5LWM3ICovCisgICAgdG1wMTQgKz0gTVVMVElQTFkoejIsIC1GSVgoMS40NjcyMjEzMDEpKSArICAgICAgICAgICAvKiAtKGM1K2M5KSAqLworICAgICAgICAgICAgIE1VTFRJUExZKHozLCBGSVgoMS4wMDEzODg5MDUpKSAtICAgICAgICAgICAgLyogYzEtYzkgKi8KKyAgICAgICAgICAgICBNVUxUSVBMWSh6NCwgRklYKDEuNjg0ODQzOTA3KSk7ICAgICAgICAgICAgIC8qIGMzK2M5ICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxMF0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDg7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIDEyeDEyIG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMTUgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjQpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzEyeDEyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSkxPTkcgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNTsKKyAgSkxPTkcgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNTsKKyAgSkxPTkcgejEsIHoyLCB6MywgejQ7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKnF1YW50cHRyOworICBpbnQgKndzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbOCAqIDEyXTsgICAgICAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKWNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgejMgPSBMRUZUX1NISUZUKHozLCBDT05TVF9CSVRTKTsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejMgKz0gT05FIDw8IChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyAtIDEpOworCisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA0XSwgcXVhbnRwdHJbRENUU0laRSAqIDRdKTsKKyAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzQgKi8KKworICAgIHRtcDEwID0gejMgKyB6NDsKKyAgICB0bXAxMSA9IHozIC0gejQ7CisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHo0ID0gTVVMVElQTFkoejEsIEZJWCgxLjM2NjAyNTQwNCkpOyAvKiBjMiAqLworICAgIHoxID0gTEVGVF9TSElGVCh6MSwgQ09OU1RfQklUUyk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKyAgICB6MiA9IExFRlRfU0hJRlQoejIsIENPTlNUX0JJVFMpOworCisgICAgdG1wMTIgPSB6MSAtIHoyOworCisgICAgdG1wMjEgPSB6MyArIHRtcDEyOworICAgIHRtcDI0ID0gejMgLSB0bXAxMjsKKworICAgIHRtcDEyID0gejQgKyB6MjsKKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKKyAgICB0bXAyNSA9IHRtcDEwIC0gdG1wMTI7CisKKyAgICB0bXAxMiA9IHo0IC0gejEgLSB6MjsKKworICAgIHRtcDIyID0gdG1wMTEgKyB0bXAxMjsKKyAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTI7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAxXSwgcXVhbnRwdHJbRENUU0laRSAqIDFdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDNdLCBxdWFudHB0cltEQ1RTSVpFICogM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNV0sIHF1YW50cHRyW0RDVFNJWkUgKiA1XSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA3XSwgcXVhbnRwdHJbRENUU0laRSAqIDddKTsKKworICAgIHRtcDExID0gTVVMVElQTFkoejIsIEZJWCgxLjMwNjU2Mjk2NSkpOyAgICAgICAgICAgICAgICAgIC8qIGMzICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MiwgLUZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAgLyogLWM5ICovCisKKyAgICB0bXAxMCA9IHoxICsgejM7CisgICAgdG1wMTUgPSBNVUxUSVBMWSh0bXAxMCArIHo0LCBGSVgoMC44NjA5MTg2NjkpKTsgICAgICAgICAgLyogYzcgKi8KKyAgICB0bXAxMiA9IHRtcDE1ICsgTVVMVElQTFkodG1wMTAsIEZJWCgwLjI2MTA1MjM4NCkpOyAgICAgICAvKiBjNS1jNyAqLworICAgIHRtcDEwID0gdG1wMTIgKyB0bXAxMSArIE1VTFRJUExZKHoxLCBGSVgoMC4yODAxNDM3MTYpKTsgIC8qIGMxLWM1ICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh6MyArIHo0LCAtRklYKDEuMDQ1NTEwNTgwKSk7ICAgICAgICAgICAgLyogLShjNytjMTEpICovCisgICAgdG1wMTIgKz0gdG1wMTMgKyB0bXAxNCAtIE1VTFRJUExZKHozLCBGSVgoMS40Nzg1NzUyNDIpKTsgLyogYzErYzUtYzctYzExICovCisgICAgdG1wMTMgKz0gdG1wMTUgLSB0bXAxMSArIE1VTFRJUExZKHo0LCBGSVgoMS41ODY3MDY2ODEpKTsgLyogYzErYzExICovCisgICAgdG1wMTUgKz0gdG1wMTQgLSBNVUxUSVBMWSh6MSwgRklYKDAuNjc2MzI2NzU4KSkgLSAgICAgICAgLyogYzctYzExICovCisgICAgICAgICAgICAgTVVMVElQTFkoejQsIEZJWCgxLjk4Mjg4OTcyMykpOyAgICAgICAgICAgICAgICAgLyogYzUrYzcgKi8KKworICAgIHoxIC09IHo0OworICAgIHoyIC09IHozOworICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgICAgICAgICAgIC8qIGM5ICovCisgICAgdG1wMTEgPSB6MyArIE1VTFRJUExZKHoxLCBGSVhfMF83NjUzNjY4NjUpOyAgICAgICAgICAgICAgLyogYzMtYzkgKi8KKyAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWF8xXzg0Nzc1OTA2NSk7ICAgICAgICAgICAgICAvKiBjMytjOSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICB3c3B0cls4ICogMF0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDExXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxXSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMTBdID0gKGludClSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDJdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA5XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogM10gID0gKGludClSSUdIVF9TSElGVCh0bXAyMyArIHRtcDEzLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDhdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA0XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogN10gID0gKGludClSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDVdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA2XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTUsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyAxMiByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgMTI7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHozID0gKEpMT05HKXdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUyArIDIpKTsKKyAgICB6MyA9IExFRlRfU0hJRlQoejMsIENPTlNUX0JJVFMpOworCisgICAgejQgPSAoSkxPTkcpd3NwdHJbNF07CisgICAgejQgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGM0ICovCisKKyAgICB0bXAxMCA9IHozICsgejQ7CisgICAgdG1wMTEgPSB6MyAtIHo0OworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMl07CisgICAgejQgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzY2MDI1NDA0KSk7IC8qIGMyICovCisgICAgejEgPSBMRUZUX1NISUZUKHoxLCBDT05TVF9CSVRTKTsKKyAgICB6MiA9IChKTE9ORyl3c3B0cls2XTsKKyAgICB6MiA9IExFRlRfU0hJRlQoejIsIENPTlNUX0JJVFMpOworCisgICAgdG1wMTIgPSB6MSAtIHoyOworCisgICAgdG1wMjEgPSB6MyArIHRtcDEyOworICAgIHRtcDI0ID0gejMgLSB0bXAxMjsKKworICAgIHRtcDEyID0gejQgKyB6MjsKKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKKyAgICB0bXAyNSA9IHRtcDEwIC0gdG1wMTI7CisKKyAgICB0bXAxMiA9IHo0IC0gejEgLSB6MjsKKworICAgIHRtcDIyID0gdG1wMTEgKyB0bXAxMjsKKyAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTI7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMV07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNV07CisgICAgejQgPSAoSkxPTkcpd3NwdHJbN107CisKKyAgICB0bXAxMSA9IE1VTFRJUExZKHoyLCBGSVgoMS4zMDY1NjI5NjUpKTsgICAgICAgICAgICAgICAgICAvKiBjMyAqLworICAgIHRtcDE0ID0gTVVMVElQTFkoejIsIC1GSVhfMF81NDExOTYxMDApOyAgICAgICAgICAgICAgICAgIC8qIC1jOSAqLworCisgICAgdG1wMTAgPSB6MSArIHozOworICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMTAgKyB6NCwgRklYKDAuODYwOTE4NjY5KSk7ICAgICAgICAgIC8qIGM3ICovCisgICAgdG1wMTIgPSB0bXAxNSArIE1VTFRJUExZKHRtcDEwLCBGSVgoMC4yNjEwNTIzODQpKTsgICAgICAgLyogYzUtYzcgKi8KKyAgICB0bXAxMCA9IHRtcDEyICsgdG1wMTEgKyBNVUxUSVBMWSh6MSwgRklYKDAuMjgwMTQzNzE2KSk7ICAvKiBjMS1jNSAqLworICAgIHRtcDEzID0gTVVMVElQTFkoejMgKyB6NCwgLUZJWCgxLjA0NTUxMDU4MCkpOyAgICAgICAgICAgIC8qIC0oYzcrYzExKSAqLworICAgIHRtcDEyICs9IHRtcDEzICsgdG1wMTQgLSBNVUxUSVBMWSh6MywgRklYKDEuNDc4NTc1MjQyKSk7IC8qIGMxK2M1LWM3LWMxMSAqLworICAgIHRtcDEzICs9IHRtcDE1IC0gdG1wMTEgKyBNVUxUSVBMWSh6NCwgRklYKDEuNTg2NzA2NjgxKSk7IC8qIGMxK2MxMSAqLworICAgIHRtcDE1ICs9IHRtcDE0IC0gTVVMVElQTFkoejEsIEZJWCgwLjY3NjMyNjc1OCkpIC0gICAgICAgIC8qIGM3LWMxMSAqLworICAgICAgICAgICAgIE1VTFRJUExZKHo0LCBGSVgoMS45ODI4ODk3MjMpKTsgICAgICAgICAgICAgICAgIC8qIGM1K2M3ICovCisKKyAgICB6MSAtPSB6NDsKKyAgICB6MiAtPSB6MzsKKyAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAvKiBjOSAqLworICAgIHRtcDExID0gejMgKyBNVUxUSVBMWSh6MSwgRklYXzBfNzY1MzY2ODY1KTsgICAgICAgICAgICAgIC8qIGMzLWM5ICovCisgICAgdG1wMTQgPSB6MyAtIE1VTFRJUExZKHoyLCBGSVhfMV84NDc3NTkwNjUpOyAgICAgICAgICAgICAgLyogYzMrYzkgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzExXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA4OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSAxM3gxMyBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDI5IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI2KS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8xM3gxMyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIEpMT05HIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTU7CisgIEpMT05HIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjUsIHRtcDI2OworICBKTE9ORyB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqcXVhbnRwdHI7CisgIGludCAqd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVs4ICogMTNdOyAgICAgICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA4OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAwXSwgcXVhbnRwdHJbRENUU0laRSAqIDBdKTsKKyAgICB6MSA9IExFRlRfU0hJRlQoejEsIENPTlNUX0JJVFMpOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB6MSArPSBPTkUgPDwgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTIC0gMSk7CisKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDJdLCBxdWFudHB0cltEQ1RTSVpFICogMl0pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNF0sIHF1YW50cHRyW0RDVFNJWkUgKiA0XSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKworICAgIHRtcDEwID0gejMgKyB6NDsKKyAgICB0bXAxMSA9IHozIC0gejQ7CisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4xNTUzODg5ODYpKTsgICAgICAgICAgICAgICAgLyogKGM0K2M2KS8yICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuMDk2ODM0OTM0KSkgKyB6MTsgICAgICAgICAgIC8qIChjNC1jNikvMiAqLworCisgICAgdG1wMjAgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzczMTE5MDg2KSkgKyB0bXAxMiArIHRtcDEzOyAgIC8qIGMyICovCisgICAgdG1wMjIgPSBNVUxUSVBMWSh6MiwgRklYKDAuNTAxNDg3MDQxKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGMxMCAqLworCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMzE2NDUwMTMxKSk7ICAgICAgICAgICAgICAgIC8qIChjOC1jMTIpLzIgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC40ODY5MTQ3MzkpKSArIHoxOyAgICAgICAgICAgLyogKGM4K2MxMikvMiAqLworCisgICAgdG1wMjEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMDU4NTU0MDUyKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGM2ICovCisgICAgdG1wMjUgPSBNVUxUSVBMWSh6MiwgLUZJWCgxLjI1MjIyMzkyMCkpICsgdG1wMTIgKyB0bXAxMzsgIC8qIGM0ICovCisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMC40MzU4MTYwMjMpKTsgICAgICAgICAgICAgICAgLyogKGMyLWMxMCkvMiAqLworICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkzNzMwMzA2NCkpIC0gejE7ICAgICAgICAgICAvKiAoYzIrYzEwKS8yICovCisKKyAgICB0bXAyMyA9IE1VTFRJUExZKHoyLCAtRklYKDAuMTcwNDY0NjA4KSkgLSB0bXAxMiAtIHRtcDEzOyAgLyogYzEyICovCisgICAgdG1wMjQgPSBNVUxUSVBMWSh6MiwgLUZJWCgwLjgwMzM2NDg2OSkpICsgdG1wMTIgLSB0bXAxMzsgIC8qIGM4ICovCisKKyAgICB0bXAyNiA9IE1VTFRJUExZKHRtcDExIC0gejIsIEZJWCgxLjQxNDIxMzU2MikpICsgejE7ICAgICAgLyogYzAgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDFdLCBxdWFudHB0cltEQ1RTSVpFICogMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogM10sIHF1YW50cHRyW0RDVFNJWkUgKiAzXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDddLCBxdWFudHB0cltEQ1RTSVpFICogN10pOworCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMjIzMTI2NTEpKTsgICAgIC8qIGMzICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMS4xNjM4NzQ5NDUpKTsgICAgIC8qIGM1ICovCisgICAgdG1wMTUgPSB6MSArIHo0OworICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTUsIEZJWCgwLjkzNzc5NzA1NykpOyAgICAgICAvKiBjNyAqLworICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0KKyAgICAgICAgICAgIE1VTFRJUExZKHoxLCBGSVgoMi4wMjAwODIzMDApKTsgICAgICAgICAgLyogYzcrYzUrYzMtYzEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoyICsgejMsIC1GSVgoMC4zMzg0NDM0NTgpKTsgICAgLyogLWMxMSAqLworICAgIHRtcDExICs9IHRtcDE0ICsgTVVMVElQTFkoejIsIEZJWCgwLjgzNzIyMzU2NCkpOyAvKiBjNStjOStjMTEtYzMgKi8KKyAgICB0bXAxMiArPSB0bXAxNCAtIE1VTFRJUExZKHozLCBGSVgoMS41NzIxMTYwMjcpKTsgLyogYzErYzUtYzktYzExICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MiArIHo0LCAtRklYKDEuMTYzODc0OTQ1KSk7ICAgIC8qIC1jNSAqLworICAgIHRtcDExICs9IHRtcDE0OworICAgIHRtcDEzICs9IHRtcDE0ICsgTVVMVElQTFkoejQsIEZJWCgyLjIwNTYwODM1MikpOyAvKiBjMytjNStjOS1jNyAqLworICAgIHRtcDE0ID0gTVVMVElQTFkoejMgKyB6NCwgLUZJWCgwLjY1NzIxNzgxMykpOyAgICAvKiAtYzkgKi8KKyAgICB0bXAxMiArPSB0bXAxNDsKKyAgICB0bXAxMyArPSB0bXAxNDsKKyAgICB0bXAxNSA9IE1VTFRJUExZKHRtcDE1LCBGSVgoMC4zMzg0NDM0NTgpKTsgICAgICAgLyogYzExICovCisgICAgdG1wMTQgPSB0bXAxNSArIE1VTFRJUExZKHoxLCBGSVgoMC4zMTg3NzQzNTUpKSAtIC8qIGM5LWMxMSAqLworICAgICAgICAgICAgTVVMVElQTFkoejIsIEZJWCgwLjQ2NjEwNTI5NikpOyAgICAgICAgICAvKiBjMS1jNyAqLworICAgIHoxICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAvKiBjNyAqLworICAgIHRtcDE0ICs9IHoxOworICAgIHRtcDE1ICs9IHoxICsgTVVMVElQTFkoejMsIEZJWCgwLjM4NDUxNTU5NSkpIC0gICAvKiBjMy1jNyAqLworICAgICAgICAgICAgIE1VTFRJUExZKHo0LCBGSVgoMS43NDIzNDU4MTEpKTsgICAgICAgICAvKiBjMStjMTEgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCAqIDBdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxMl0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMV0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDExXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAyXSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMTBdID0gKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDNdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA5XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNF0gID0gKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDhdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA1XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogN10gID0gKGludClSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDZdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjYsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyAxMyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgMTM7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHoxID0gKEpMT05HKXdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUyArIDIpKTsKKyAgICB6MSA9IExFRlRfU0hJRlQoejEsIENPTlNUX0JJVFMpOworCisgICAgejIgPSAoSkxPTkcpd3NwdHJbMl07CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNF07CisgICAgejQgPSAoSkxPTkcpd3NwdHJbNl07CisKKyAgICB0bXAxMCA9IHozICsgejQ7CisgICAgdG1wMTEgPSB6MyAtIHo0OworCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDEuMTU1Mzg4OTg2KSk7ICAgICAgICAgICAgICAgIC8qIChjNCtjNikvMiAqLworICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjA5NjgzNDkzNCkpICsgejE7ICAgICAgICAgICAvKiAoYzQtYzYpLzIgKi8KKworICAgIHRtcDIwID0gTVVMVElQTFkoejIsIEZJWCgxLjM3MzExOTA4NikpICsgdG1wMTIgKyB0bXAxMzsgICAvKiBjMiAqLworICAgIHRtcDIyID0gTVVMVElQTFkoejIsIEZJWCgwLjUwMTQ4NzA0MSkpIC0gdG1wMTIgKyB0bXAxMzsgICAvKiBjMTAgKi8KKworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTAsIEZJWCgwLjMxNjQ1MDEzMSkpOyAgICAgICAgICAgICAgICAvKiAoYzgtYzEyKS8yICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuNDg2OTE0NzM5KSkgKyB6MTsgICAgICAgICAgIC8qIChjOCtjMTIpLzIgKi8KKworICAgIHRtcDIxID0gTVVMVElQTFkoejIsIEZJWCgxLjA1ODU1NDA1MikpIC0gdG1wMTIgKyB0bXAxMzsgICAvKiBjNiAqLworICAgIHRtcDI1ID0gTVVMVElQTFkoejIsIC1GSVgoMS4yNTIyMjM5MjApKSArIHRtcDEyICsgdG1wMTM7ICAvKiBjNCAqLworCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuNDM1ODE2MDIzKSk7ICAgICAgICAgICAgICAgIC8qIChjMi1jMTApLzIgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45MzczMDMwNjQpKSAtIHoxOyAgICAgICAgICAgLyogKGMyK2MxMCkvMiAqLworCisgICAgdG1wMjMgPSBNVUxUSVBMWSh6MiwgLUZJWCgwLjE3MDQ2NDYwOCkpIC0gdG1wMTIgLSB0bXAxMzsgIC8qIGMxMiAqLworICAgIHRtcDI0ID0gTVVMVElQTFkoejIsIC1GSVgoMC44MDMzNjQ4NjkpKSArIHRtcDEyIC0gdG1wMTM7ICAvKiBjOCAqLworCisgICAgdG1wMjYgPSBNVUxUSVBMWSh0bXAxMSAtIHoyLCBGSVgoMS40MTQyMTM1NjIpKSArIHoxOyAgICAgIC8qIGMwICovCisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMV07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNV07CisgICAgejQgPSAoSkxPTkcpd3NwdHJbN107CisKKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyMjMxMjY1MSkpOyAgICAgLyogYzMgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgxLjE2Mzg3NDk0NSkpOyAgICAgLyogYzUgKi8KKyAgICB0bXAxNSA9IHoxICsgejQ7CisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAgIC8qIGM3ICovCisgICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgyLjAyMDA4MjMwMCkpOyAgICAgICAgICAvKiBjNytjNStjMy1jMSAqLworICAgIHRtcDE0ID0gTVVMVElQTFkoejIgKyB6MywgLUZJWCgwLjMzODQ0MzQ1OCkpOyAgICAvKiAtYzExICovCisgICAgdG1wMTEgKz0gdG1wMTQgKyBNVUxUSVBMWSh6MiwgRklYKDAuODM3MjIzNTY0KSk7IC8qIGM1K2M5K2MxMS1jMyAqLworICAgIHRtcDEyICs9IHRtcDE0IC0gTVVMVElQTFkoejMsIEZJWCgxLjU3MjExNjAyNykpOyAvKiBjMStjNS1jOS1jMTEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoyICsgejQsIC1GSVgoMS4xNjM4NzQ5NDUpKTsgICAgLyogLWM1ICovCisgICAgdG1wMTEgKz0gdG1wMTQ7CisgICAgdG1wMTMgKz0gdG1wMTQgKyBNVUxUSVBMWSh6NCwgRklYKDIuMjA1NjA4MzUyKSk7IC8qIGMzK2M1K2M5LWM3ICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MyArIHo0LCAtRklYKDAuNjU3MjE3ODEzKSk7ICAgIC8qIC1jOSAqLworICAgIHRtcDEyICs9IHRtcDE0OworICAgIHRtcDEzICs9IHRtcDE0OworICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMTUsIEZJWCgwLjMzODQ0MzQ1OCkpOyAgICAgICAvKiBjMTEgKi8KKyAgICB0bXAxNCA9IHRtcDE1ICsgTVVMVElQTFkoejEsIEZJWCgwLjMxODc3NDM1NSkpIC0gLyogYzktYzExICovCisgICAgICAgICAgICBNVUxUSVBMWSh6MiwgRklYKDAuNDY2MTA1Mjk2KSk7ICAgICAgICAgIC8qIGMxLWM3ICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMC45Mzc3OTcwNTcpKTsgICAgIC8qIGM3ICovCisgICAgdG1wMTQgKz0gejE7CisgICAgdG1wMTUgKz0gejEgKyBNVUxUSVBMWSh6MywgRklYKDAuMzg0NTE1NTk1KSkgLSAgIC8qIGMzLWM3ICovCisgICAgICAgICAgICAgTVVMVElQTFkoejQsIEZJWCgxLjc0MjM0NTgxMSkpOyAgICAgICAgIC8qIGMxK2MxMSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTJdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMyArIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA4OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSAxNHgxNCBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDIwIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI4KS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8xNHgxNChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIEpMT05HIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTUsIHRtcDE2OworICBKTE9ORyB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQsIHRtcDI1LCB0bXAyNjsKKyAgSkxPTkcgejEsIHoyLCB6MywgejQ7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKnF1YW50cHRyOworICBpbnQgKndzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbOCAqIDE0XTsgICAgICAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKWNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgejEgPSBMRUZUX1NISUZUKHoxLCBDT05TVF9CSVRTKTsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyAtIDEpOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNF0sIHF1YW50cHRyW0RDVFNJWkUgKiA0XSk7CisgICAgejIgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjc0MTYyMzkyKSk7ICAgICAgICAgLyogYzQgKi8KKyAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgICAgICAvKiBjMTIgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMC44ODE3NDc3MzQpKTsgICAgICAgICAvKiBjOCAqLworCisgICAgdG1wMTAgPSB6MSArIHoyOworICAgIHRtcDExID0gejEgKyB6MzsKKyAgICB0bXAxMiA9IHoxIC0gejQ7CisKKyAgICB0bXAyMyA9IFJJR0hUX1NISUZUKHoxIC0gTEVGVF9TSElGVCh6MiArIHozIC0gejQsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOyAvKiBjMCA9IChjNCtjMTItYzgpKjIgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMl0sIHF1YW50cHRyW0RDVFNJWkUgKiAyXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKworICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMTA1Njc2Njg2KSk7ICAgIC8qIGM2ICovCisKKyAgICB0bXAxMyA9IHozICsgTVVMVElQTFkoejEsIEZJWCgwLjI3MzA3OTU5MCkpOyAvKiBjMi1jNiAqLworICAgIHRtcDE0ID0gejMgLSBNVUxUSVBMWSh6MiwgRklYKDEuNzE5MjgwOTU0KSk7IC8qIGM2K2MxMCAqLworICAgIHRtcDE1ID0gTVVMVElQTFkoejEsIEZJWCgwLjYxMzYwNDI2OCkpIC0gICAgIC8qIGMxMCAqLworICAgICAgICAgICAgTVVMVElQTFkoejIsIEZJWCgxLjM3ODc1NjI3NikpOyAgICAgIC8qIGMyICovCisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTM7CisgICAgdG1wMjYgPSB0bXAxMCAtIHRtcDEzOworICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxNDsKKyAgICB0bXAyNSA9IHRtcDExIC0gdG1wMTQ7CisgICAgdG1wMjIgPSB0bXAxMiArIHRtcDE1OworICAgIHRtcDI0ID0gdG1wMTIgLSB0bXAxNTsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDFdLCBxdWFudHB0cltEQ1RTSVpFICogMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogM10sIHF1YW50cHRyW0RDVFNJWkUgKiAzXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDddLCBxdWFudHB0cltEQ1RTSVpFICogN10pOworICAgIHRtcDEzID0gTEVGVF9TSElGVCh6NCwgQ09OU1RfQklUUyk7CisKKyAgICB0bXAxNCA9IHoxICsgejM7CisgICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMzQ4NTI2MDcpKTsgICAgICAgICAgIC8qIGMzICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDEuMTk3NDQ4ODQ2KSk7ICAgICAgICAgICAgIC8qIGM1ICovCisgICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTI2OTgwMTY5KSk7IC8qIGMzK2M1LWMxICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuNzUyNDA2OTc4KSk7ICAgICAgICAgICAgIC8qIGM5ICovCisgICAgdG1wMTYgPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMS4wNjExNTA0MjYpKTsgICAgICAgIC8qIGM5K2MxMS1jMTMgKi8KKyAgICB6MSAgICAtPSB6MjsKKyAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC40NjcwODUxMjkpKSAtIHRtcDEzOyAgICAgICAgLyogYzExICovCisgICAgdG1wMTYgKz0gdG1wMTU7CisgICAgejEgICAgKz0gejQ7CisgICAgejQgICAgPSBNVUxUSVBMWSh6MiArIHozLCAtRklYKDAuMTU4MzQxNjgxKSkgLSB0bXAxMzsgIC8qIC1jMTMgKi8KKyAgICB0bXAxMSArPSB6NCAtIE1VTFRJUExZKHoyLCBGSVgoMC40MjQxMDM5NDgpKTsgICAgICAgICAgLyogYzMtYzktYzEzICovCisgICAgdG1wMTIgKz0gejQgLSBNVUxUSVBMWSh6MywgRklYKDIuMzczOTU5NzczKSk7ICAgICAgICAgIC8qIGMzK2M1LWMxMyAqLworICAgIHo0ICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDEuNDA1MzIxMjg0KSk7ICAgICAgICAgICAvKiBjMSAqLworICAgIHRtcDE0ICs9IHo0ICsgdG1wMTMgLSBNVUxUSVBMWSh6MywgRklYKDEuNjkwNjQzMTMzNCkpOyAvKiBjMStjOS1jMTEgKi8KKyAgICB0bXAxNSArPSB6NCArIE1VTFRJUExZKHoyLCBGSVgoMC42NzQ5NTc1NjcpKTsgICAgICAgICAgLyogYzErYzExLWM1ICovCisKKyAgICB0bXAxMyA9IExFRlRfU0hJRlQoejEgLSB6MywgUEFTUzFfQklUUyk7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzggKiAwXSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMTNdID0gKGludClSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDFdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxMl0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMl0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDExXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAzXSAgPSAoaW50KSh0bXAyMyArIHRtcDEzKTsKKyAgICB3c3B0cls4ICogMTBdID0gKGludCkodG1wMjMgLSB0bXAxMyk7CisgICAgd3NwdHJbOCAqIDRdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA5XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNV0gID0gKGludClSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDhdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA2XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTYsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogN10gID0gKGludClSSUdIVF9TSElGVCh0bXAyNiAtIHRtcDE2LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgMTQgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDE0OyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB6MSA9IChKTE9ORyl3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMgKyAyKSk7CisgICAgejEgPSBMRUZUX1NISUZUKHoxLCBDT05TVF9CSVRTKTsKKyAgICB6NCA9IChKTE9ORyl3c3B0cls0XTsKKyAgICB6MiA9IE1VTFRJUExZKHo0LCBGSVgoMS4yNzQxNjIzOTIpKTsgICAgICAgICAvKiBjNCAqLworICAgIHozID0gTVVMVElQTFkoejQsIEZJWCgwLjMxNDY5MjEyMykpOyAgICAgICAgIC8qIGMxMiAqLworICAgIHo0ID0gTVVMVElQTFkoejQsIEZJWCgwLjg4MTc0NzczNCkpOyAgICAgICAgIC8qIGM4ICovCisKKyAgICB0bXAxMCA9IHoxICsgejI7CisgICAgdG1wMTEgPSB6MSArIHozOworICAgIHRtcDEyID0gejEgLSB6NDsKKworICAgIHRtcDIzID0gejEgLSBMRUZUX1NISUZUKHoyICsgejMgLSB6NCwgMSk7ICAgIC8qIGMwID0gKGM0K2MxMi1jOCkqMiAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMl07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbNl07CisKKyAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjEwNTY3NjY4NikpOyAgICAvKiBjNiAqLworCisgICAgdG1wMTMgPSB6MyArIE1VTFRJUExZKHoxLCBGSVgoMC4yNzMwNzk1OTApKTsgLyogYzItYzYgKi8KKyAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWCgxLjcxOTI4MDk1NCkpOyAvKiBjNitjMTAgKi8KKyAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC42MTM2MDQyNjgpKSAtICAgICAvKiBjMTAgKi8KKyAgICAgICAgICAgIE1VTFRJUExZKHoyLCBGSVgoMS4zNzg3NTYyNzYpKTsgICAgICAvKiBjMiAqLworCisgICAgdG1wMjAgPSB0bXAxMCArIHRtcDEzOworICAgIHRtcDI2ID0gdG1wMTAgLSB0bXAxMzsKKyAgICB0bXAyMSA9IHRtcDExICsgdG1wMTQ7CisgICAgdG1wMjUgPSB0bXAxMSAtIHRtcDE0OworICAgIHRtcDIyID0gdG1wMTIgKyB0bXAxNTsKKyAgICB0bXAyNCA9IHRtcDEyIC0gdG1wMTU7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMV07CisgICAgejIgPSAoSkxPTkcpd3NwdHJbM107CisgICAgejMgPSAoSkxPTkcpd3NwdHJbNV07CisgICAgejQgPSAoSkxPTkcpd3NwdHJbN107CisgICAgejQgPSBMRUZUX1NISUZUKHo0LCBDT05TVF9CSVRTKTsKKworICAgIHRtcDE0ID0gejEgKyB6MzsKKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMzNDg1MjYwNykpOyAgICAgICAgICAgLyogYzMgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDE0LCBGSVgoMS4xOTc0NDg4NDYpKTsgICAgICAgICAgICAgLyogYzUgKi8KKyAgICB0bXAxMCA9IHRtcDExICsgdG1wMTIgKyB6NCAtIE1VTFRJUExZKHoxLCBGSVgoMS4xMjY5ODAxNjkpKTsgLyogYzMrYzUtYzEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHRtcDE0LCBGSVgoMC43NTI0MDY5NzgpKTsgICAgICAgICAgICAgLyogYzkgKi8KKyAgICB0bXAxNiA9IHRtcDE0IC0gTVVMVElQTFkoejEsIEZJWCgxLjA2MTE1MDQyNikpOyAgICAgICAgLyogYzkrYzExLWMxMyAqLworICAgIHoxICAgIC09IHoyOworICAgIHRtcDE1ID0gTVVMVElQTFkoejEsIEZJWCgwLjQ2NzA4NTEyOSkpIC0gejQ7ICAgICAgICAgICAvKiBjMTEgKi8KKyAgICB0bXAxNiArPSB0bXAxNTsKKyAgICB0bXAxMyA9IE1VTFRJUExZKHoyICsgejMsIC1GSVgoMC4xNTgzNDE2ODEpKSAtIHo0OyAgICAgLyogLWMxMyAqLworICAgIHRtcDExICs9IHRtcDEzIC0gTVVMVElQTFkoejIsIEZJWCgwLjQyNDEwMzk0OCkpOyAgICAgICAvKiBjMy1jOS1jMTMgKi8KKyAgICB0bXAxMiArPSB0bXAxMyAtIE1VTFRJUExZKHozLCBGSVgoMi4zNzM5NTk3NzMpKTsgICAgICAgLyogYzMrYzUtYzEzICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMS40MDUzMjEyODQpKTsgICAgICAgICAgIC8qIGMxICovCisgICAgdG1wMTQgKz0gdG1wMTMgKyB6NCAtIE1VTFRJUExZKHozLCBGSVgoMS42OTA2NDMxMzM0KSk7IC8qIGMxK2M5LWMxMSAqLworICAgIHRtcDE1ICs9IHRtcDEzICsgTVVMVElQTFkoejIsIEZJWCgwLjY3NDk1NzU2NykpOyAgICAgICAvKiBjMStjMTEtYzUgKi8KKworICAgIHRtcDEzID0gTEVGVF9TSElGVCh6MSAtIHozLCBDT05TVF9CSVRTKSArIHo0OworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTJdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMyArIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNiArIHRtcDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNiAtIHRtcDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDg7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIDE1eDE1IG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMjIgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMzApLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzE1eDE1KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSkxPTkcgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNSwgdG1wMTY7CisgIEpMT05HIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjUsIHRtcDI2LCB0bXAyNzsKKyAgSkxPTkcgejEsIHoyLCB6MywgejQ7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKnF1YW50cHRyOworICBpbnQgKndzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbOCAqIDE1XTsgICAgICAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKWNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgejEgPSBMRUZUX1NISUZUKHoxLCBDT05TVF9CSVRTKTsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyAtIDEpOworCisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAyXSwgcXVhbnRwdHJbRENUU0laRSAqIDJdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDRdLCBxdWFudHB0cltEQ1RTSVpFICogNF0pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogNl0sIHF1YW50cHRyW0RDVFNJWkUgKiA2XSk7CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHo0LCBGSVgoMC40MzcwMTYwMjQpKTsgLyogYzEyICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDEuMTQ0MTIyODA2KSk7IC8qIGM2ICovCisKKyAgICB0bXAxMiA9IHoxIC0gdG1wMTA7CisgICAgdG1wMTMgPSB6MSArIHRtcDExOworICAgIHoxIC09IExFRlRfU0hJRlQodG1wMTEgLSB0bXAxMCwgMSk7ICAgICAvKiBjMCA9IChjNi1jMTIpKjIgKi8KKworICAgIHo0ID0gejIgLSB6MzsKKyAgICB6MyArPSB6MjsKKyAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMS4zMzc2Mjg5OTApKTsgLyogKGMyK2M0KS8yICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDAuMDQ1NjgwNjEzKSk7IC8qIChjMi1jNCkvMiAqLworICAgIHoyID0gTVVMVElQTFkoejIsIEZJWCgxLjQzOTc3Mzk0NikpOyAgICAvKiBjNCtjMTQgKi8KKworICAgIHRtcDIwID0gdG1wMTMgKyB0bXAxMCArIHRtcDExOworICAgIHRtcDIzID0gdG1wMTIgLSB0bXAxMCArIHRtcDExICsgejI7CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMC41NDcwNTk1NzQpKTsgLyogKGM4K2MxNCkvMiAqLworICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgwLjM5OTIzNDAwNCkpOyAvKiAoYzgtYzE0KS8yICovCisKKyAgICB0bXAyNSA9IHRtcDEzIC0gdG1wMTAgLSB0bXAxMTsKKyAgICB0bXAyNiA9IHRtcDEyICsgdG1wMTAgLSB0bXAxMSAtIHoyOworCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MywgRklYKDAuNzkwNTY5NDE1KSk7IC8qIChjNitjMTIpLzIgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMC4zNTM1NTMzOTEpKTsgLyogKGM2LWMxMikvMiAqLworCisgICAgdG1wMjEgPSB0bXAxMiArIHRtcDEwICsgdG1wMTE7CisgICAgdG1wMjQgPSB0bXAxMyAtIHRtcDEwICsgdG1wMTE7CisgICAgdG1wMTEgKz0gdG1wMTE7CisgICAgdG1wMjIgPSB6MSArIHRtcDExOyAgICAgICAgICAgICAgICAgICAgIC8qIGMxMCA9IGM2LWMxMiAqLworICAgIHRtcDI3ID0gejEgLSB0bXAxMSAtIHRtcDExOyAgICAgICAgICAgICAvKiBjMCA9IChjNi1jMTIpKjIgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDFdLCBxdWFudHB0cltEQ1RTSVpFICogMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogM10sIHF1YW50cHRyW0RDVFNJWkUgKiAzXSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgICAgICAgICAgIC8qIGM1ICovCisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA3XSwgcXVhbnRwdHJbRENUU0laRSAqIDddKTsKKworICAgIHRtcDEzID0gejIgLSB6NDsKKyAgICB0bXAxNSA9IE1VTFRJUExZKHoxICsgdG1wMTMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAgICAgIC8qIGM5ICovCisgICAgdG1wMTEgPSB0bXAxNSArIE1VTFRJUExZKHoxLCBGSVgoMC41MTM3NDMxNDgpKTsgICAgICAgICAvKiBjMy1jOSAqLworICAgIHRtcDE0ID0gdG1wMTUgLSBNVUxUSVBMWSh0bXAxMywgRklYKDIuMTc2MjUwODk5KSk7ICAgICAgLyogYzMrYzkgKi8KKworICAgIHRtcDEzID0gTVVMVElQTFkoejIsIC1GSVgoMC44MzEyNTM4NzYpKTsgICAgICAgICAgICAgICAgLyogLWM5ICovCisgICAgdG1wMTUgPSBNVUxUSVBMWSh6MiwgLUZJWCgxLjM0NDk5NzAyNCkpOyAgICAgICAgICAgICAgICAvKiAtYzMgKi8KKyAgICB6MiA9IHoxIC0gejQ7CisgICAgdG1wMTIgPSB6MyArIE1VTFRJUExZKHoyLCBGSVgoMS40MDY0NjYzNTMpKTsgICAgICAgICAgICAvKiBjMSAqLworCisgICAgdG1wMTAgPSB0bXAxMiArIE1VTFRJUExZKHo0LCBGSVgoMi40NTc0MzE4NDQpKSAtIHRtcDE1OyAvKiBjMStjNyAqLworICAgIHRtcDE2ID0gdG1wMTIgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTEyNDM0ODIwKSkgKyB0bXAxMzsgLyogYzEtYzEzICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MiwgRklYKDEuMjI0NzQ0ODcxKSkgLSB6MzsgICAgICAgICAgICAvKiBjNSAqLworICAgIHoyID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDAuNTc1MjEyNDc3KSk7ICAgICAgICAgICAgICAgLyogYzExICovCisgICAgdG1wMTMgKz0gejIgKyBNVUxUSVBMWSh6MSwgRklYKDAuNDc1NzUzMDE0KSkgLSB6MzsgICAgICAvKiBjNy1jMTEgKi8KKyAgICB0bXAxNSArPSB6MiAtIE1VTFRJUExZKHo0LCBGSVgoMC44NjkyNDQwMTApKSArIHozOyAgICAgIC8qIGMxMStjMTMgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCAqIDBdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxNF0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMV0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDEzXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAyXSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMTJdID0gKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDNdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxMV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNF0gID0gKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDEwXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA1XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogOV0gID0gKGludClSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDZdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxNiwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA4XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTYsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogN10gID0gKGludClSSUdIVF9TSElGVCh0bXAyNywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDE1IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAxNTsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgPSAoSkxPTkcpd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTICsgMikpOworICAgIHoxID0gTEVGVF9TSElGVCh6MSwgQ09OU1RfQklUUyk7CisKKyAgICB6MiA9IChKTE9ORyl3c3B0clsyXTsKKyAgICB6MyA9IChKTE9ORyl3c3B0cls0XTsKKyAgICB6NCA9IChKTE9ORyl3c3B0cls2XTsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejQsIEZJWCgwLjQzNzAxNjAyNCkpOyAvKiBjMTIgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMS4xNDQxMjI4MDYpKTsgLyogYzYgKi8KKworICAgIHRtcDEyID0gejEgLSB0bXAxMDsKKyAgICB0bXAxMyA9IHoxICsgdG1wMTE7CisgICAgejEgLT0gTEVGVF9TSElGVCh0bXAxMSAtIHRtcDEwLCAxKTsgICAgIC8qIGMwID0gKGM2LWMxMikqMiAqLworCisgICAgejQgPSB6MiAtIHozOworICAgIHozICs9IHoyOworICAgIHRtcDEwID0gTVVMVElQTFkoejMsIEZJWCgxLjMzNzYyODk5MCkpOyAvKiAoYzIrYzQpLzIgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMC4wNDU2ODA2MTMpKTsgLyogKGMyLWM0KS8yICovCisgICAgejIgPSBNVUxUSVBMWSh6MiwgRklYKDEuNDM5NzczOTQ2KSk7ICAgIC8qIGM0K2MxNCAqLworCisgICAgdG1wMjAgPSB0bXAxMyArIHRtcDEwICsgdG1wMTE7CisgICAgdG1wMjMgPSB0bXAxMiAtIHRtcDEwICsgdG1wMTEgKyB6MjsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejMsIEZJWCgwLjU0NzA1OTU3NCkpOyAvKiAoYzgrYzE0KS8yICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDAuMzk5MjM0MDA0KSk7IC8qIChjOC1jMTQpLzIgKi8KKworICAgIHRtcDI1ID0gdG1wMTMgLSB0bXAxMCAtIHRtcDExOworICAgIHRtcDI2ID0gdG1wMTIgKyB0bXAxMCAtIHRtcDExIC0gejI7CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMC43OTA1Njk0MTUpKTsgLyogKGM2K2MxMikvMiAqLworICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgwLjM1MzU1MzM5MSkpOyAvKiAoYzYtYzEyKS8yICovCisKKyAgICB0bXAyMSA9IHRtcDEyICsgdG1wMTAgKyB0bXAxMTsKKyAgICB0bXAyNCA9IHRtcDEzIC0gdG1wMTAgKyB0bXAxMTsKKyAgICB0bXAxMSArPSB0bXAxMTsKKyAgICB0bXAyMiA9IHoxICsgdG1wMTE7ICAgICAgICAgICAgICAgICAgICAgLyogYzEwID0gYzYtYzEyICovCisgICAgdG1wMjcgPSB6MSAtIHRtcDExIC0gdG1wMTE7ICAgICAgICAgICAgIC8qIGMwID0gKGM2LWMxMikqMiAqLworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gKEpMT05HKXdzcHRyWzFdOworICAgIHoyID0gKEpMT05HKXdzcHRyWzNdOworICAgIHo0ID0gKEpMT05HKXdzcHRyWzVdOworICAgIHozID0gTVVMVElQTFkoejQsIEZJWCgxLjIyNDc0NDg3MSkpOyAgICAgICAgICAgICAgICAgICAgLyogYzUgKi8KKyAgICB6NCA9IChKTE9ORyl3c3B0cls3XTsKKworICAgIHRtcDEzID0gejIgLSB6NDsKKyAgICB0bXAxNSA9IE1VTFRJUExZKHoxICsgdG1wMTMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAgICAgIC8qIGM5ICovCisgICAgdG1wMTEgPSB0bXAxNSArIE1VTFRJUExZKHoxLCBGSVgoMC41MTM3NDMxNDgpKTsgICAgICAgICAvKiBjMy1jOSAqLworICAgIHRtcDE0ID0gdG1wMTUgLSBNVUxUSVBMWSh0bXAxMywgRklYKDIuMTc2MjUwODk5KSk7ICAgICAgLyogYzMrYzkgKi8KKworICAgIHRtcDEzID0gTVVMVElQTFkoejIsIC1GSVgoMC44MzEyNTM4NzYpKTsgICAgICAgICAgICAgICAgLyogLWM5ICovCisgICAgdG1wMTUgPSBNVUxUSVBMWSh6MiwgLUZJWCgxLjM0NDk5NzAyNCkpOyAgICAgICAgICAgICAgICAvKiAtYzMgKi8KKyAgICB6MiA9IHoxIC0gejQ7CisgICAgdG1wMTIgPSB6MyArIE1VTFRJUExZKHoyLCBGSVgoMS40MDY0NjYzNTMpKTsgICAgICAgICAgICAvKiBjMSAqLworCisgICAgdG1wMTAgPSB0bXAxMiArIE1VTFRJUExZKHo0LCBGSVgoMi40NTc0MzE4NDQpKSAtIHRtcDE1OyAvKiBjMStjNyAqLworICAgIHRtcDE2ID0gdG1wMTIgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTEyNDM0ODIwKSkgKyB0bXAxMzsgLyogYzEtYzEzICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MiwgRklYKDEuMjI0NzQ0ODcxKSkgLSB6MzsgICAgICAgICAgICAvKiBjNSAqLworICAgIHoyID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDAuNTc1MjEyNDc3KSk7ICAgICAgICAgICAgICAgLyogYzExICovCisgICAgdG1wMTMgKz0gejIgKyBNVUxUSVBMWSh6MSwgRklYKDAuNDc1NzUzMDE0KSkgLSB6MzsgICAgICAvKiBjNy1jMTEgKi8KKyAgICB0bXAxNSArPSB6MiAtIE1VTFRJUExZKHo0LCBGSVgoMC44NjkyNDQwMTApKSArIHozOyAgICAgIC8qIGMxMStjMTMgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzE0XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEzXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzExXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gODsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgMTZ4MTYgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyOCBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8zMikuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMTZ4MTYoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBKTE9ORyB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKKyAgSkxPTkcgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjYsIHRtcDI3OworICBKTE9ORyB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqcXVhbnRwdHI7CisgIGludCAqd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVs4ICogMTZdOyAgICAgICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA4OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDBdLCBxdWFudHB0cltEQ1RTSVpFICogMF0pOworICAgIHRtcDAgPSBMRUZUX1NISUZUKHRtcDAsIENPTlNUX0JJVFMpOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAwICs9IDEgPDwgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTIC0gMSk7CisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDRdLCBxdWFudHB0cltEQ1RTSVpFICogNF0pOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgLyogYzRbMTZdID0gYzJbOF0gKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGMxMlsxNl0gPSBjNls4XSAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMTsKKyAgICB0bXAxMSA9IHRtcDAgLSB0bXAxOworICAgIHRtcDEyID0gdG1wMCArIHRtcDI7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMjsKKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMl0sIHF1YW50cHRyW0RDVFNJWkUgKiAyXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA2XSwgcXVhbnRwdHJbRENUU0laRSAqIDZdKTsKKyAgICB6MyA9IHoxIC0gejI7CisgICAgejQgPSBNVUxUSVBMWSh6MywgRklYKDAuMjc1ODk5Mzc5KSk7ICAgICAgICAvKiBjMTRbMTZdID0gYzdbOF0gKi8KKyAgICB6MyA9IE1VTFRJUExZKHozLCBGSVgoMS4zODcwMzk4NDUpKTsgICAgICAgIC8qIGMyWzE2XSA9IGMxWzhdICovCisKKyAgICB0bXAwID0gejMgKyBNVUxUSVBMWSh6MiwgRklYXzJfNTYyOTE1NDQ3KTsgIC8qIChjNitjMilbMTZdID0gKGMzK2MxKVs4XSAqLworICAgIHRtcDEgPSB6NCArIE1VTFRJUExZKHoxLCBGSVhfMF84OTk5NzYyMjMpOyAgLyogKGM2LWMxNClbMTZdID0gKGMzLWM3KVs4XSAqLworICAgIHRtcDIgPSB6MyAtIE1VTFRJUExZKHoxLCBGSVgoMC42MDEzNDQ4ODcpKTsgLyogKGMyLWMxMClbMTZdID0gKGMxLWM1KVs4XSAqLworICAgIHRtcDMgPSB6NCAtIE1VTFRJUExZKHoyLCBGSVgoMC41MDk3OTU1NzkpKTsgLyogKGMxMC1jMTQpWzE2XSA9IChjNS1jNylbOF0gKi8KKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAwOworICAgIHRtcDI3ID0gdG1wMTAgLSB0bXAwOworICAgIHRtcDIxID0gdG1wMTIgKyB0bXAxOworICAgIHRtcDI2ID0gdG1wMTIgLSB0bXAxOworICAgIHRtcDIyID0gdG1wMTMgKyB0bXAyOworICAgIHRtcDI1ID0gdG1wMTMgLSB0bXAyOworICAgIHRtcDIzID0gdG1wMTEgKyB0bXAzOworICAgIHRtcDI0ID0gdG1wMTEgLSB0bXAzOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMV0sIHF1YW50cHRyW0RDVFNJWkUgKiAxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAzXSwgcXVhbnRwdHJbRENUU0laRSAqIDNdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDVdLCBxdWFudHB0cltEQ1RTSVpFICogNV0pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogN10sIHF1YW50cHRyW0RDVFNJWkUgKiA3XSk7CisKKyAgICB0bXAxMSA9IHoxICsgejM7CisKKyAgICB0bXAxICA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjM1MzMxODAwMSkpOyAgIC8qIGMzICovCisgICAgdG1wMiAgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMS4yNDcyMjUwMTMpKTsgICAvKiBjNSAqLworICAgIHRtcDMgID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDEuMDkzMjAxODY3KSk7ICAgLyogYzcgKi8KKyAgICB0bXAxMCA9IE1VTFRJUExZKHoxIC0gejQsIEZJWCgwLjg5NzE2NzU4NikpOyAgIC8qIGM5ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMC42NjY2NTU2NTgpKTsgICAvKiBjMTEgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjQxMDUyNDUyOCkpOyAgIC8qIGMxMyAqLworICAgIHRtcDAgID0gdG1wMSArIHRtcDIgKyB0bXAzIC0KKyAgICAgICAgICAgIE1VTFRJUExZKHoxLCBGSVgoMi4yODYzNDExNDQpKTsgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCisgICAgdG1wMTMgPSB0bXAxMCArIHRtcDExICsgdG1wMTIgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgxLjgzNTczMDYwMykpOyAgICAgICAgLyogYzkrYzExK2MxMy1jMTUgKi8KKyAgICB6MSAgICA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjEzODYxNzE2OSkpOyAgIC8qIGMxNSAqLworICAgIHRtcDEgICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjA3MTg4ODA3NCkpOyAgLyogYzkrYzExLWMzLWMxNSAqLworICAgIHRtcDIgICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgxLjEyNTcyNjA0OCkpOyAgLyogYzUrYzcrYzE1LWMzICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMS40MDc0MDM3MzgpKTsgICAvKiBjMSAqLworICAgIHRtcDExICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgwLjc2NjM2NzI4MikpOyAgLyogYzErYzExLWM5LWMxMyAqLworICAgIHRtcDEyICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgxLjk3MTk1MTQxMSkpOyAgLyogYzErYzUrYzEzLWM3ICovCisgICAgejIgICAgKz0gejQ7CisgICAgejEgICAgPSBNVUxUSVBMWSh6MiwgLUZJWCgwLjY2NjY1NTY1OCkpOyAgICAgICAvKiAtYzExICovCisgICAgdG1wMSAgKz0gejE7CisgICAgdG1wMyAgKz0gejEgKyBNVUxUSVBMWSh6NCwgRklYKDEuMDY1Mzg4OTYyKSk7ICAvKiBjMytjMTErYzE1LWM3ICovCisgICAgejIgICAgPSBNVUxUSVBMWSh6MiwgLUZJWCgxLjI0NzIyNTAxMykpOyAgICAgICAvKiAtYzUgKi8KKyAgICB0bXAxMCArPSB6MiArIE1VTFRJUExZKHo0LCBGSVgoMy4xNDEyNzE4MDkpKTsgIC8qIGMxK2M1K2M5LWMxMyAqLworICAgIHRtcDEyICs9IHoyOworICAgIHoyICAgID0gTVVMVElQTFkoejMgKyB6NCwgLUZJWCgxLjM1MzMxODAwMSkpOyAgLyogLWMzICovCisgICAgdG1wMiAgKz0gejI7CisgICAgdG1wMyAgKz0gejI7CisgICAgejIgICAgPSBNVUxUSVBMWSh6NCAtIHozLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KKyAgICB0bXAxMCArPSB6MjsKKyAgICB0bXAxMSArPSB6MjsKKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCAqIDBdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjAgKyB0bXAwLCAgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxNV0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMCwgIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMV0gID0gKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDEsICBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDE0XSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxLCAgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAyXSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDIyICsgdG1wMiwgIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMTNdID0gKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDIsICBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDNdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjMgKyB0bXAzLCAgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiAxMl0gPSAoaW50KVJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMywgIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogNF0gID0gKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDEwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDExXSA9IChpbnQpUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxMCwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA1XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTEsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogMTBdID0gKGludClSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDExLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDZdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxMiwgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICAgIHdzcHRyWzggKiA5XSAgPSAoaW50KVJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4ICogN10gID0gKGludClSSUdIVF9TSElGVCh0bXAyNyArIHRtcDEzLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCAqIDhdICA9IChpbnQpUklHSFRfU0hJRlQodG1wMjcgLSB0bXAxMywgQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDE2IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAxNjsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMCA9IChKTE9ORyl3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMgKyAyKSk7CisgICAgdG1wMCA9IExFRlRfU0hJRlQodG1wMCwgQ09OU1RfQklUUyk7CisKKyAgICB6MSA9IChKTE9ORyl3c3B0cls0XTsKKyAgICB0bXAxID0gTVVMVElQTFkoejEsIEZJWCgxLjMwNjU2Mjk2NSkpOyAgICAgIC8qIGM0WzE2XSA9IGMyWzhdICovCisgICAgdG1wMiA9IE1VTFRJUExZKHoxLCBGSVhfMF81NDExOTYxMDApOyAgICAgICAvKiBjMTJbMTZdID0gYzZbOF0gKi8KKworICAgIHRtcDEwID0gdG1wMCArIHRtcDE7CisgICAgdG1wMTEgPSB0bXAwIC0gdG1wMTsKKyAgICB0bXAxMiA9IHRtcDAgKyB0bXAyOworICAgIHRtcDEzID0gdG1wMCAtIHRtcDI7CisKKyAgICB6MSA9IChKTE9ORyl3c3B0clsyXTsKKyAgICB6MiA9IChKTE9ORyl3c3B0cls2XTsKKyAgICB6MyA9IHoxIC0gejI7CisgICAgejQgPSBNVUxUSVBMWSh6MywgRklYKDAuMjc1ODk5Mzc5KSk7ICAgICAgICAvKiBjMTRbMTZdID0gYzdbOF0gKi8KKyAgICB6MyA9IE1VTFRJUExZKHozLCBGSVgoMS4zODcwMzk4NDUpKTsgICAgICAgIC8qIGMyWzE2XSA9IGMxWzhdICovCisKKyAgICB0bXAwID0gejMgKyBNVUxUSVBMWSh6MiwgRklYXzJfNTYyOTE1NDQ3KTsgIC8qIChjNitjMilbMTZdID0gKGMzK2MxKVs4XSAqLworICAgIHRtcDEgPSB6NCArIE1VTFRJUExZKHoxLCBGSVhfMF84OTk5NzYyMjMpOyAgLyogKGM2LWMxNClbMTZdID0gKGMzLWM3KVs4XSAqLworICAgIHRtcDIgPSB6MyAtIE1VTFRJUExZKHoxLCBGSVgoMC42MDEzNDQ4ODcpKTsgLyogKGMyLWMxMClbMTZdID0gKGMxLWM1KVs4XSAqLworICAgIHRtcDMgPSB6NCAtIE1VTFRJUExZKHoyLCBGSVgoMC41MDk3OTU1NzkpKTsgLyogKGMxMC1jMTQpWzE2XSA9IChjNS1jNylbOF0gKi8KKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAwOworICAgIHRtcDI3ID0gdG1wMTAgLSB0bXAwOworICAgIHRtcDIxID0gdG1wMTIgKyB0bXAxOworICAgIHRtcDI2ID0gdG1wMTIgLSB0bXAxOworICAgIHRtcDIyID0gdG1wMTMgKyB0bXAyOworICAgIHRtcDI1ID0gdG1wMTMgLSB0bXAyOworICAgIHRtcDIzID0gdG1wMTEgKyB0bXAzOworICAgIHRtcDI0ID0gdG1wMTEgLSB0bXAzOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gKEpMT05HKXdzcHRyWzFdOworICAgIHoyID0gKEpMT05HKXdzcHRyWzNdOworICAgIHozID0gKEpMT05HKXdzcHRyWzVdOworICAgIHo0ID0gKEpMT05HKXdzcHRyWzddOworCisgICAgdG1wMTEgPSB6MSArIHozOworCisgICAgdG1wMSAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zNTMzMTgwMDEpKTsgICAvKiBjMyAqLworICAgIHRtcDIgID0gTVVMVElQTFkodG1wMTEsICAgRklYKDEuMjQ3MjI1MDEzKSk7ICAgLyogYzUgKi8KKyAgICB0bXAzICA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgxLjA5MzIwMTg2NykpOyAgIC8qIGM3ICovCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MSAtIHo0LCBGSVgoMC44OTcxNjc1ODYpKTsgICAvKiBjOSAqLworICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsICAgRklYKDAuNjY2NjU1NjU4KSk7ICAgLyogYzExICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KKyAgICB0bXAwICA9IHRtcDEgKyB0bXAyICsgdG1wMyAtCisgICAgICAgICAgICBNVUxUSVBMWSh6MSwgRklYKDIuMjg2MzQxMTQ0KSk7ICAgICAgICAvKiBjNytjNStjMy1jMSAqLworICAgIHRtcDEzID0gdG1wMTAgKyB0bXAxMSArIHRtcDEyIC0KKyAgICAgICAgICAgIE1VTFRJUExZKHoxLCBGSVgoMS44MzU3MzA2MDMpKTsgICAgICAgIC8qIGM5K2MxMStjMTMtYzE1ICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC4xMzg2MTcxNjkpKTsgICAvKiBjMTUgKi8KKyAgICB0bXAxICArPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC4wNzE4ODgwNzQpKTsgIC8qIGM5K2MxMS1jMy1jMTUgKi8KKyAgICB0bXAyICArPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMS4xMjU3MjYwNDgpKTsgIC8qIGM1K2M3K2MxNS1jMyAqLworICAgIHoxICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDEuNDA3NDAzNzM4KSk7ICAgLyogYzEgKi8KKyAgICB0bXAxMSArPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMC43NjYzNjcyODIpKTsgIC8qIGMxK2MxMS1jOS1jMTMgKi8KKyAgICB0bXAxMiArPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMS45NzE5NTE0MTEpKTsgIC8qIGMxK2M1K2MxMy1jNyAqLworICAgIHoyICAgICs9IHo0OworICAgIHoxICAgID0gTVVMVElQTFkoejIsIC1GSVgoMC42NjY2NTU2NTgpKTsgICAgICAgLyogLWMxMSAqLworICAgIHRtcDEgICs9IHoxOworICAgIHRtcDMgICs9IHoxICsgTVVMVElQTFkoejQsIEZJWCgxLjA2NTM4ODk2MikpOyAgLyogYzMrYzExK2MxNS1jNyAqLworICAgIHoyICAgID0gTVVMVElQTFkoejIsIC1GSVgoMS4yNDcyMjUwMTMpKTsgICAgICAgLyogLWM1ICovCisgICAgdG1wMTAgKz0gejIgKyBNVUxUSVBMWSh6NCwgRklYKDMuMTQxMjcxODA5KSk7ICAvKiBjMStjNStjOS1jMTMgKi8KKyAgICB0bXAxMiArPSB6MjsKKyAgICB6MiAgICA9IE1VTFRJUExZKHozICsgejQsIC1GSVgoMS4zNTMzMTgwMDEpKTsgIC8qIC1jMyAqLworICAgIHRtcDIgICs9IHoyOworICAgIHRtcDMgICs9IHoyOworICAgIHoyICAgID0gTVVMVElQTFkoejQgLSB6MywgRklYKDAuNDEwNTI0NTI4KSk7ICAgLyogYzEzICovCisgICAgdG1wMTAgKz0gejI7CisgICAgdG1wMTEgKz0gejI7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzE1XSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjAgLSB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMSArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxNF0gPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjIgKyB0bXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSAgPSByYW5nZV9saW1pdFsoaW50KVJJR0hUX1NISUZUKHRtcDIzICsgdG1wMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpUklHSFRfU0hJRlQodG1wMjMgLSB0bXAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNCArIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNiArIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNyArIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludClSSUdIVF9TSElGVCh0bXAyNyAtIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDg7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworI2VuZGlmIC8qIElEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKyNlbmRpZiAvKiBEQ1RfSVNMT1dfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qaWRjdHJlZC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamlkY3RyZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmYzNTJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamlkY3RyZWQuYwpAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAqIGppZGN0cmVkLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUgb3V0cHV0OgorICogZWl0aGVyIDR4NCwgMngyLCBvciAxeDEgcGl4ZWxzIGZyb20gYW4gOHg4IERDVCBibG9jay4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIExvZWZmbGVyLCBMaWd0ZW5iZXJnIGFuZCBNb3NjaHl0eiAoTEwmTSkKKyAqIGFsZ29yaXRobSB1c2VkIGluIGppZGN0aW50LmMuICBXZSBzaW1wbHkgcmVwbGFjZSBlYWNoIDgtdG8tOCAxLUQgSURDVCBzdGVwCisgKiB3aXRoIGFuIDgtdG8tNCBzdGVwIHRoYXQgcHJvZHVjZXMgdGhlIGZvdXIgYXZlcmFnZXMgb2YgdHdvIGFkamFjZW50IG91dHB1dHMKKyAqIChvciBhbiA4LXRvLTIgc3RlcCBwcm9kdWNpbmcgdHdvIGF2ZXJhZ2VzIG9mIGZvdXIgb3V0cHV0cywgZm9yIDJ4MiBvdXRwdXQpLgorICogVGhlc2Ugc3RlcHMgd2VyZSBkZXJpdmVkIGJ5IGNvbXB1dGluZyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXQgdGhlIGVuZAorICogb2YgdGhlIG5vcm1hbCBMTCZNIGNvZGUsIHRoZW4gc2ltcGxpZnlpbmcgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAqCisgKiAxeDEgaXMgdHJpdmlhbDoganVzdCB0YWtlIHRoZSBEQyBjb2VmZmljaWVudCBkaXZpZGVkIGJ5IDguCisgKgorICogU2VlIGppZGN0aW50LmMgZm9yIGFkZGl0aW9uYWwgY29tbWVudHMuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpkY3QuaCIgICAgICAgICAgICAgICAvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworCisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKyAqLworCisjaWYgRENUU0laRSAhPSA4CisgIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KKyNlbmRpZgorCisKKy8qIFNjYWxpbmcgaXMgdGhlIHNhbWUgYXMgaW4gamlkY3RpbnQuYy4gKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIENPTlNUX0JJVFMgIDEzCisjZGVmaW5lIFBBU1MxX0JJVFMgIDIKKyNlbHNlCisjZGVmaW5lIENPTlNUX0JJVFMgIDEzCisjZGVmaW5lIFBBU1MxX0JJVFMgIDEgICAgICAgICAgIC8qIGxvc2UgYSBsaXR0bGUgcHJlY2lzaW9uIHRvIGF2b2lkIG92ZXJmbG93ICovCisjZW5kaWYKKworLyogU29tZSBDIGNvbXBpbGVycyBmYWlsIHRvIHJlZHVjZSAiRklYKGNvbnN0YW50KSIgYXQgY29tcGlsZSB0aW1lLCB0aHVzCisgKiBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4KKyAqIFRvIGdldCBhcm91bmQgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyBwcmUtY2FsY3VsYXRlZCBjb25zdGFudHMuCisgKiBJZiB5b3UgY2hhbmdlIENPTlNUX0JJVFMgeW91IG1heSB3YW50IHRvIGFkZCBhcHByb3ByaWF0ZSB2YWx1ZXMuCisgKiAoV2l0aCBhIHJlYXNvbmFibGUgQyBjb21waWxlciwgeW91IGNhbiBqdXN0IHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvLi4uKQorICovCisKKyNpZiBDT05TVF9CSVRTID09IDEzCisjZGVmaW5lIEZJWF8wXzIxMTE2NDI0MyAgKChKTE9ORykxNzMwKSAgICAgICAgICAvKiBGSVgoMC4yMTExNjQyNDMpICovCisjZGVmaW5lIEZJWF8wXzUwOTc5NTU3OSAgKChKTE9ORyk0MTc2KSAgICAgICAgICAvKiBGSVgoMC41MDk3OTU1NzkpICovCisjZGVmaW5lIEZJWF8wXzYwMTM0NDg4NyAgKChKTE9ORyk0OTI2KSAgICAgICAgICAvKiBGSVgoMC42MDEzNDQ4ODcpICovCisjZGVmaW5lIEZJWF8wXzcyMDk1OTgyMiAgKChKTE9ORyk1OTA2KSAgICAgICAgICAvKiBGSVgoMC43MjA5NTk4MjIpICovCisjZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgKChKTE9ORyk2MjcwKSAgICAgICAgICAvKiBGSVgoMC43NjUzNjY4NjUpICovCisjZGVmaW5lIEZJWF8wXzg1MDQzMDA5NSAgKChKTE9ORyk2OTY3KSAgICAgICAgICAvKiBGSVgoMC44NTA0MzAwOTUpICovCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKChKTE9ORyk3MzczKSAgICAgICAgICAvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZJWF8xXzA2MTU5NDMzNyAgKChKTE9ORyk4Njk3KSAgICAgICAgICAvKiBGSVgoMS4wNjE1OTQzMzcpICovCisjZGVmaW5lIEZJWF8xXzI3Mjc1ODU4MCAgKChKTE9ORykxMDQyNikgICAgICAgICAvKiBGSVgoMS4yNzI3NTg1ODApICovCisjZGVmaW5lIEZJWF8xXzQ1MTc3NDk4MSAgKChKTE9ORykxMTg5MykgICAgICAgICAvKiBGSVgoMS40NTE3NzQ5ODEpICovCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChKTE9ORykxNTEzNykgICAgICAgICAvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZJWF8yXzE3MjczNDgwMyAgKChKTE9ORykxNzc5OSkgICAgICAgICAvKiBGSVgoMi4xNzI3MzQ4MDMpICovCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKChKTE9ORykyMDk5NSkgICAgICAgICAvKiBGSVgoMi41NjI5MTU0NDcpICovCisjZGVmaW5lIEZJWF8zXzYyNDUwOTc4NSAgKChKTE9ORykyOTY5MikgICAgICAgICAvKiBGSVgoMy42MjQ1MDk3ODUpICovCisjZWxzZQorI2RlZmluZSBGSVhfMF8yMTExNjQyNDMgIEZJWCgwLjIxMTE2NDI0MykKKyNkZWZpbmUgRklYXzBfNTA5Nzk1NTc5ICBGSVgoMC41MDk3OTU1NzkpCisjZGVmaW5lIEZJWF8wXzYwMTM0NDg4NyAgRklYKDAuNjAxMzQ0ODg3KQorI2RlZmluZSBGSVhfMF83MjA5NTk4MjIgIEZJWCgwLjcyMDk1OTgyMikKKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICBGSVgoMC43NjUzNjY4NjUpCisjZGVmaW5lIEZJWF8wXzg1MDQzMDA5NSAgRklYKDAuODUwNDMwMDk1KQorI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgIEZJWCgwLjg5OTk3NjIyMykKKyNkZWZpbmUgRklYXzFfMDYxNTk0MzM3ICBGSVgoMS4wNjE1OTQzMzcpCisjZGVmaW5lIEZJWF8xXzI3Mjc1ODU4MCAgRklYKDEuMjcyNzU4NTgwKQorI2RlZmluZSBGSVhfMV80NTE3NzQ5ODEgIEZJWCgxLjQ1MTc3NDk4MSkKKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpCisjZGVmaW5lIEZJWF8yXzE3MjczNDgwMyAgRklYKDIuMTcyNzM0ODAzKQorI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgIEZJWCgyLjU2MjkxNTQ0NykKKyNkZWZpbmUgRklYXzNfNjI0NTA5Nzg1ICBGSVgoMy42MjQ1MDk3ODUpCisjZW5kaWYKKworCisvKiBNdWx0aXBseSBhIEpMT05HIHZhcmlhYmxlIGJ5IGEgSkxPTkcgY29uc3RhbnQgdG8geWllbGQgYSBKTE9ORyByZXN1bHQuCisgKiBGb3IgOC1iaXQgc2FtcGxlcyB3aXRoIHRoZSByZWNvbW1lbmRlZCBzY2FsaW5nLCBhbGwgdGhlIHZhcmlhYmxlCisgKiBhbmQgY29uc3RhbnQgdmFsdWVzIGludm9sdmVkIGFyZSBubyBtb3JlIHRoYW4gMTYgYml0cyB3aWRlLCBzbyBhCisgKiAxNngxNi0+MzIgYml0IG11bHRpcGx5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBmdWxsIDMyeDMyIG11bHRpcGx5LgorICogRm9yIDEyLWJpdCBzYW1wbGVzLCBhIGZ1bGwgMzItYml0IG11bHRpcGxpY2F0aW9uIHdpbGwgYmUgbmVlZGVkLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBNVUxUSVBMWSh2YXIsIGNvbnN0KSAgTVVMVElQTFkxNkMxNih2YXIsIGNvbnN0KQorI2Vsc2UKKyNkZWZpbmUgTVVMVElQTFkodmFyLCBjb25zdCkgICgodmFyKSAqIChjb25zdCkpCisjZW5kaWYKKworCisvKiBEZXF1YW50aXplIGEgY29lZmZpY2llbnQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIG11bHRpcGxpZXItdGFibGUKKyAqIGVudHJ5OyBwcm9kdWNlIGFuIGludCByZXN1bHQuICBJbiB0aGlzIG1vZHVsZSwgYm90aCBpbnB1dHMgYW5kIHJlc3VsdAorICogYXJlIDE2IGJpdHMgb3IgbGVzcywgc28gZWl0aGVyIGludCBvciBzaG9ydCBtdWx0aXBseSB3aWxsIHdvcmsuCisgKi8KKworI2RlZmluZSBERVFVQU5USVpFKGNvZWYsIHF1YW50dmFsKSAgKCgoSVNMT1dfTVVMVF9UWVBFKShjb2VmKSkgKiAocXVhbnR2YWwpKQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfNHg0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBKTE9ORyB0bXAwLCB0bXAyLCB0bXAxMCwgdG1wMTI7CisgIEpMT05HIHoxLCB6MiwgejMsIHo0OworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgaW50ICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUgKiA0XTsgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyssIGN0ci0tKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIHByb2Nlc3MgY29sdW1uIDQsIGJlY2F1c2Ugc2Vjb25kIHBhc3Mgd29uJ3QgdXNlIGl0ICovCisgICAgaWYgKGN0ciA9PSBEQ1RTSVpFIC0gNCkKKyAgICAgIGNvbnRpbnVlOworICAgIGlmIChpbnB0cltEQ1RTSVpFICogMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogMl0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFICogM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogNV0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFICogNl0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybSA0IGZvciA0eDQgb3V0cHV0ICovCisgICAgICBpbnQgZGN2YWwgPSBMRUZUX1NISUZUKERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50cHRyW0RDVFNJWkUgKiAwXSksIFBBU1MxX0JJVFMpOworCisgICAgICB3c3B0cltEQ1RTSVpFICogMF0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSAqIDJdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFICogM10gPSBkY3ZhbDsKKworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgdG1wMCA9IExFRlRfU0hJRlQodG1wMCwgQ09OU1RfQklUUyArIDEpOworCisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAyXSwgcXVhbnRwdHJbRENUU0laRSAqIDJdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDZdLCBxdWFudHB0cltEQ1RTSVpFICogNl0pOworCisgICAgdG1wMiA9IE1VTFRJUExZKHoyLCBGSVhfMV84NDc3NTkwNjUpICsgTVVMVElQTFkoejMsIC1GSVhfMF83NjUzNjY4NjUpOworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogN10sIHF1YW50cHRyW0RDVFNJWkUgKiA3XSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSAqIDNdLCBxdWFudHB0cltEQ1RTSVpFICogM10pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMV0sIHF1YW50cHRyW0RDVFNJWkUgKiAxXSk7CisKKyAgICB0bXAwID0gTVVMVElQTFkoejEsIC1GSVhfMF8yMTExNjQyNDMpICsgLyogc3FydCgyKSAqICggYzMtYzEpICovCisgICAgICAgICAgIE1VTFRJUExZKHoyLCAgRklYXzFfNDUxNzc0OTgxKSArIC8qIHNxcnQoMikgKiAoIGMzK2M3KSAqLworICAgICAgICAgICBNVUxUSVBMWSh6MywgLUZJWF8yXzE3MjczNDgwMykgKyAvKiBzcXJ0KDIpICogKC1jMS1jNSkgKi8KKyAgICAgICAgICAgTVVMVElQTFkoejQsICBGSVhfMV8wNjE1OTQzMzcpOyAgLyogc3FydCgyKSAqICggYzUrYzcpICovCisKKyAgICB0bXAyID0gTVVMVElQTFkoejEsIC1GSVhfMF81MDk3OTU1NzkpICsgLyogc3FydCgyKSAqIChjNy1jNSkgKi8KKyAgICAgICAgICAgTVVMVElQTFkoejIsIC1GSVhfMF82MDEzNDQ4ODcpICsgLyogc3FydCgyKSAqIChjNS1jMSkgKi8KKyAgICAgICAgICAgTVVMVElQTFkoejMsICBGSVhfMF84OTk5NzYyMjMpICsgLyogc3FydCgyKSAqIChjMy1jNykgKi8KKyAgICAgICAgICAgTVVMVElQTFkoejQsICBGSVhfMl81NjI5MTU0NDcpOyAgLyogc3FydCgyKSAqIChjMStjMykgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbRENUU0laRSAqIDBdID0KKyAgICAgIChpbnQpREVTQ0FMRSh0bXAxMCArIHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTICsgMSk7CisgICAgd3NwdHJbRENUU0laRSAqIDNdID0KKyAgICAgIChpbnQpREVTQ0FMRSh0bXAxMCAtIHRtcDIsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTICsgMSk7CisgICAgd3NwdHJbRENUU0laRSAqIDFdID0KKyAgICAgIChpbnQpREVTQ0FMRSh0bXAxMiArIHRtcDAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTICsgMSk7CisgICAgd3NwdHJbRENUU0laRSAqIDJdID0KKyAgICAgIChpbnQpREVTQ0FMRSh0bXAxMiAtIHRtcDAsIENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTICsgMSk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgNCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgNDsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworICAgIC8qIEl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgYSB6ZXJvIHJvdyB0ZXN0IGlzIHdvcnRod2hpbGUgaGVyZSAuLi4gKi8KKworI2lmbmRlZiBOT19aRVJPX1JPV19URVNUCisgICAgaWYgKHdzcHRyWzFdID09IDAgJiYgd3NwdHJbMl0gPT0gMCAmJiB3c3B0clszXSA9PSAwICYmCisgICAgICAgIHdzcHRyWzVdID09IDAgJiYgd3NwdHJbNl0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLworICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSgoSkxPTkcpd3NwdHJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1MxX0JJVFMgKyAzKSAmIFJBTkdFX01BU0tdOworCisgICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsxXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzJdID0gZGN2YWw7CisgICAgICBvdXRwdHJbM10gPSBkY3ZhbDsKKworICAgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgorCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gTEVGVF9TSElGVCgoSkxPTkcpd3NwdHJbMF0sIENPTlNUX0JJVFMgKyAxKTsKKworICAgIHRtcDIgPSBNVUxUSVBMWSgoSkxPTkcpd3NwdHJbMl0sICBGSVhfMV84NDc3NTkwNjUpICsKKyAgICAgICAgICAgTVVMVElQTFkoKEpMT05HKXdzcHRyWzZdLCAtRklYXzBfNzY1MzY2ODY1KTsKKworICAgIHRtcDEwID0gdG1wMCArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAwIC0gdG1wMjsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IChKTE9ORyl3c3B0cls3XTsKKyAgICB6MiA9IChKTE9ORyl3c3B0cls1XTsKKyAgICB6MyA9IChKTE9ORyl3c3B0clszXTsKKyAgICB6NCA9IChKTE9ORyl3c3B0clsxXTsKKworICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzIxMTE2NDI0MykgKyAvKiBzcXJ0KDIpICogKCBjMy1jMSkgKi8KKyAgICAgICAgICAgTVVMVElQTFkoejIsICBGSVhfMV80NTE3NzQ5ODEpICsgLyogc3FydCgyKSAqICggYzMrYzcpICovCisgICAgICAgICAgIE1VTFRJUExZKHozLCAtRklYXzJfMTcyNzM0ODAzKSArIC8qIHNxcnQoMikgKiAoLWMxLWM1KSAqLworICAgICAgICAgICBNVUxUSVBMWSh6NCwgIEZJWF8xXzA2MTU5NDMzNyk7ICAvKiBzcXJ0KDIpICogKCBjNStjNykgKi8KKworICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzUwOTc5NTU3OSkgKyAvKiBzcXJ0KDIpICogKGM3LWM1KSAqLworICAgICAgICAgICBNVUxUSVBMWSh6MiwgLUZJWF8wXzYwMTM0NDg4NykgKyAvKiBzcXJ0KDIpICogKGM1LWMxKSAqLworICAgICAgICAgICBNVUxUSVBMWSh6MywgRklYXzBfODk5OTc2MjIzKSArICAvKiBzcXJ0KDIpICogKGMzLWM3KSAqLworICAgICAgICAgICBNVUxUSVBMWSh6NCwgRklYXzJfNTYyOTE1NDQ3KTsgICAvKiBzcXJ0KDIpICogKGMxK2MzKSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KURFU0NBTEUodG1wMTAgKyB0bXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMgKyAxKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludClERVNDQUxFKHRtcDEwIC0gdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzICsgMSkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSh0bXAxMiArIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMyArIDEpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KURFU0NBTEUodG1wMTIgLSB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMgKyAxKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzJ4MihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSkxPTkcgdG1wMCwgdG1wMTAsIHoxOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgaW50ICp3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUgKiAyXTsgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyssIGN0ci0tKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIHByb2Nlc3MgY29sdW1ucyAyLDQsNiAqLworICAgIGlmIChjdHIgPT0gRENUU0laRSAtIDIgfHwgY3RyID09IERDVFNJWkUgLSA0IHx8IGN0ciA9PSBEQ1RTSVpFIC0gNikKKyAgICAgIGNvbnRpbnVlOworICAgIGlmIChpbnB0cltEQ1RTSVpFICogMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogM10gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFICogNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFICogN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybXMgMiw0LDYgZm9yIDJ4MiBvdXRwdXQgKi8KKyAgICAgIGludCBkY3ZhbCA9IExFRlRfU0hJRlQoREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50cHRyW0RDVFNJWkUgKiAwXSksIFBBU1MxX0JJVFMpOworCisgICAgICB3c3B0cltEQ1RTSVpFICogMF0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9IGRjdmFsOworCisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFICogMF0sIHF1YW50cHRyW0RDVFNJWkUgKiAwXSk7CisgICAgdG1wMTAgPSBMRUZUX1NISUZUKHoxLCBDT05TVF9CSVRTICsgMik7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA3XSwgcXVhbnRwdHJbRENUU0laRSAqIDddKTsKKyAgICB0bXAwID0gTVVMVElQTFkoejEsIC1GSVhfMF83MjA5NTk4MjIpOyAgLyogc3FydCgyKSAqICggYzctYzUrYzMtYzEpICovCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiA1XSwgcXVhbnRwdHJbRENUU0laRSAqIDVdKTsKKyAgICB0bXAwICs9IE1VTFRJUExZKHoxLCBGSVhfMF84NTA0MzAwOTUpOyAgLyogc3FydCgyKSAqICgtYzErYzMrYzUrYzcpICovCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAzXSwgcXVhbnRwdHJbRENUU0laRSAqIDNdKTsKKyAgICB0bXAwICs9IE1VTFRJUExZKHoxLCAtRklYXzFfMjcyNzU4NTgwKTsgLyogc3FydCgyKSAqICgtYzErYzMtYzUtYzcpICovCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUgKiAxXSwgcXVhbnRwdHJbRENUU0laRSAqIDFdKTsKKyAgICB0bXAwICs9IE1VTFRJUExZKHoxLCBGSVhfM182MjQ1MDk3ODUpOyAgLyogc3FydCgyKSAqICggYzErYzMrYzUrYzcpICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyW0RDVFNJWkUgKiAwXSA9CisgICAgICAoaW50KURFU0NBTEUodG1wMTAgKyB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyArIDIpOworICAgIHdzcHRyW0RDVFNJWkUgKiAxXSA9CisgICAgICAoaW50KURFU0NBTEUodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTIC0gUEFTUzFfQklUUyArIDIpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDIgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDI7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKyAgICAvKiBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIGEgemVybyByb3cgdGVzdCBpcyB3b3J0aHdoaWxlIGhlcmUgLi4uICovCisKKyNpZm5kZWYgTk9fWkVST19ST1dfVEVTVAorICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNV0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLworICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0WyhpbnQpREVTQ0FMRSgoSkxPTkcpd3NwdHJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1MxX0JJVFMgKyAzKSAmIFJBTkdFX01BU0tdOworCisgICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsxXSA9IGRjdmFsOworCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICAgICAgY29udGludWU7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDEwID0gTEVGVF9TSElGVCgoSkxPTkcpd3NwdHJbMF0sIENPTlNUX0JJVFMgKyAyKTsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXAwID0gTVVMVElQTFkoKEpMT05HKXdzcHRyWzddLCAtRklYXzBfNzIwOTU5ODIyKSArIC8qIHNxcnQoMikgKiAoIGM3LWM1K2MzLWMxKSAqLworICAgICAgICAgICBNVUxUSVBMWSgoSkxPTkcpd3NwdHJbNV0sICBGSVhfMF84NTA0MzAwOTUpICsgLyogc3FydCgyKSAqICgtYzErYzMrYzUrYzcpICovCisgICAgICAgICAgIE1VTFRJUExZKChKTE9ORyl3c3B0clszXSwgLUZJWF8xXzI3Mjc1ODU4MCkgKyAvKiBzcXJ0KDIpICogKC1jMStjMy1jNS1jNykgKi8KKyAgICAgICAgICAgTVVMVElQTFkoKEpMT05HKXdzcHRyWzFdLCAgRklYXzNfNjI0NTA5Nzg1KTsgIC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1K2M3KSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KURFU0NBTEUodG1wMTAgKyB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMgKyAyKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludClERVNDQUxFKHRtcDEwIC0gdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzICsgMikgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgMXgxIG91dHB1dCBibG9jay4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8xeDEoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGludCBkY3ZhbDsKKyAgSVNMT1dfTVVMVF9UWVBFICpxdWFudHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgU0hJRlRfVEVNUFMKKworICAvKiBXZSBoYXJkbHkgbmVlZCBhbiBpbnZlcnNlIERDVCByb3V0aW5lIGZvciB0aGlzOiBqdXN0IHRha2UgdGhlCisgICAqIGF2ZXJhZ2UgcGl4ZWwgdmFsdWUsIHdoaWNoIGlzIG9uZS1laWdodGggb2YgdGhlIERDIGNvZWZmaWNpZW50LgorICAgKi8KKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopY29tcHB0ci0+ZGN0X3RhYmxlOworICBkY3ZhbCA9IERFUVVBTlRJWkUoY29lZl9ibG9ja1swXSwgcXVhbnRwdHJbMF0pOworICBkY3ZhbCA9IChpbnQpREVTQ0FMRSgoSkxPTkcpZGN2YWwsIDMpOworCisgIG91dHB1dF9idWZbMF1bb3V0cHV0X2NvbF0gPSByYW5nZV9saW1pdFtkY3ZhbCAmIFJBTkdFX01BU0tdOworfQorCisjZW5kaWYgLyogSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vamluY2x1ZGUuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppbmNsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiY2Y3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ppbmNsdWRlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGppbmNsdWRlLmgKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk0LCBUaG9tYXMgRy4gTGFuZS4KKyAqIEl0IHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBjb2RlIHJlbGV2YW50CisgKiB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGV4aXN0cyB0byBwcm92aWRlIGEgc2luZ2xlIHBsYWNlIHRvIGZpeCBhbnkgcHJvYmxlbXMgd2l0aAorICogaW5jbHVkaW5nIHRoZSB3cm9uZyBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIChDb21tb24gcHJvYmxlbXMgYXJlIHRha2VuCisgKiBjYXJlIG9mIGJ5IHRoZSBzdGFuZGFyZCBqY29uZmlnIHN5bWJvbHMsIGJ1dCBvbiByZWFsbHkgd2VpcmQgc3lzdGVtcworICogeW91IG1heSBoYXZlIHRvIGVkaXQgdGhpcyBmaWxlLikKKyAqCisgKiBOT1RFOiB0aGlzIGZpbGUgaXMgTk9UIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9ucyB1c2luZyB0aGUKKyAqIEpQRUcgbGlicmFyeS4gIE1vc3QgYXBwbGljYXRpb25zIG5lZWQgb25seSBpbmNsdWRlIGpwZWdsaWIuaC4KKyAqLworCisKKy8qIEluY2x1ZGUgYXV0by1jb25maWcgZmlsZSB0byBmaW5kIG91dCB3aGljaCBzeXN0ZW0gaW5jbHVkZSBmaWxlcyB3ZSBuZWVkLiAqLworCisjaW5jbHVkZSAiamNvbmZpZy5oIiAgICAgICAgICAgIC8qIGF1dG8gY29uZmlndXJhdGlvbiBvcHRpb25zICovCisjZGVmaW5lIEpDT05GSUdfSU5DTFVERUQgICAgICAgIC8qIHNvIHRoYXQganBlZ2xpYi5oIGRvZXNuJ3QgZG8gaXQgYWdhaW4gKi8KKworLyoKKyAqIFdlIG5lZWQgdGhlIE5VTEwgbWFjcm8gYW5kIHNpemVfdCB0eXBlZGVmLgorICogT24gYW4gQU5TSS1jb25mb3JtaW5nIHN5c3RlbSBpdCBpcyBzdWZmaWNpZW50IHRvIGluY2x1ZGUgPHN0ZGRlZi5oPi4KKyAqIE90aGVyd2lzZSwgd2UgZ2V0IHRoZW0gZnJvbSA8c3RkbGliLmg+IG9yIDxzdGRpby5oPjsgd2UgbWF5IGhhdmUgdG8KKyAqIHB1bGwgaW4gPHN5cy90eXBlcy5oPiBhcyB3ZWxsLgorICogTm90ZSB0aGF0IHRoZSBjb3JlIEpQRUcgbGlicmFyeSBkb2VzIG5vdCByZXF1aXJlIDxzdGRpby5oPjsKKyAqIG9ubHkgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBhbmQgZGF0YSBzb3VyY2UvZGVzdGluYXRpb24gbW9kdWxlcyBkby4KKyAqIEJ1dCB3ZSBtdXN0IHB1bGwgaXQgaW4gYmVjYXVzZSBvZiB0aGUgcmVmZXJlbmNlcyB0byBGSUxFIGluIGpwZWdsaWIuaC4KKyAqIFlvdSBjYW4gcmVtb3ZlIHRob3NlIHJlZmVyZW5jZXMgaWYgeW91IHdhbnQgdG8gY29tcGlsZSB3aXRob3V0IDxzdGRpby5oPi4KKyAqLworCisjaWZkZWYgSEFWRV9TVERERUZfSAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmZGVmIE5FRURfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIFdlIG5lZWQgbWVtb3J5IGNvcHlpbmcgYW5kIHplcm9pbmcgZnVuY3Rpb25zLCBwbHVzIHN0cm5jcHkoKS4KKyAqIEFOU0kgYW5kIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucyBkZWNsYXJlIHRoZXNlIGluIDxzdHJpbmcuaD4uCisgKiBCU0QgZG9lc24ndCBoYXZlIHRoZSBtZW0oKSBmdW5jdGlvbnMsIGJ1dCBpdCBkb2VzIGhhdmUgYmNvcHkoKS9iemVybygpLgorICogU29tZSBzeXN0ZW1zIG1heSBkZWNsYXJlIG1lbXNldCBhbmQgbWVtY3B5IGluIDxtZW1vcnkuaD4uCisgKgorICogTk9URTogd2UgYXNzdW1lIHRoZSBzaXplIHBhcmFtZXRlcnMgdG8gdGhlc2UgZnVuY3Rpb25zIGFyZSBvZiB0eXBlIHNpemVfdC4KKyAqIENoYW5nZSB0aGUgY2FzdHMgaW4gdGhlc2UgbWFjcm9zIGlmIG5vdCEKKyAqLworCisjaWZkZWYgTkVFRF9CU0RfU1RSSU5HUworCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2RlZmluZSBNRU1aRVJPKHRhcmdldCwgc2l6ZSkgXAorICBiemVybygodm9pZCAqKSh0YXJnZXQpLCAoc2l6ZV90KShzaXplKSkKKyNkZWZpbmUgTUVNQ09QWShkZXN0LCBzcmMsIHNpemUpIFwKKyAgYmNvcHkoKGNvbnN0IHZvaWQgKikoc3JjKSwgKHZvaWQgKikoZGVzdCksIChzaXplX3QpKHNpemUpKQorCisjZWxzZSAvKiBub3QgQlNELCBhc3N1bWUgQU5TSS9TeXNWIHN0cmluZyBsaWIgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2RlZmluZSBNRU1aRVJPKHRhcmdldCwgc2l6ZSkgXAorICBtZW1zZXQoKHZvaWQgKikodGFyZ2V0KSwgMCwgKHNpemVfdCkoc2l6ZSkpCisjZGVmaW5lIE1FTUNPUFkoZGVzdCwgc3JjLCBzaXplKSBcCisgIG1lbWNweSgodm9pZCAqKShkZXN0KSwgKGNvbnN0IHZvaWQgKikoc3JjKSwgKHNpemVfdCkoc2l6ZSkpCisKKyNlbmRpZgorCisvKgorICogVGhlIG1vZHVsZXMgdGhhdCB1c2UgZnJlYWQoKSBhbmQgZndyaXRlKCkgYWx3YXlzIGludm9rZSB0aGVtIHRocm91Z2gKKyAqIHRoZXNlIG1hY3Jvcy4gIE9uIHNvbWUgc3lzdGVtcyB5b3UgbWF5IG5lZWQgdG8gdHdpZGRsZSB0aGUgYXJndW1lbnQgY2FzdHMuCisgKiBDQVVUSU9OOiBhcmd1bWVudCBvcmRlciBpcyBkaWZmZXJlbnQgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucyEKKyAqLworCisjZGVmaW5lIEpGUkVBRChmaWxlLCBidWYsIHNpemVvZmJ1ZikgXAorICAoKHNpemVfdClmcmVhZCgodm9pZCAqKShidWYpLCAoc2l6ZV90KTEsIChzaXplX3QpKHNpemVvZmJ1ZiksIChmaWxlKSkpCisjZGVmaW5lIEpGV1JJVEUoZmlsZSwgYnVmLCBzaXplb2ZidWYpIFwKKyAgKChzaXplX3QpZndyaXRlKChjb25zdCB2b2lkICopKGJ1ZiksIChzaXplX3QpMSwgKHNpemVfdCkoc2l6ZW9mYnVmKSwgKGZpbGUpKSkKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ptZW1tZ3IuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ptZW1tZ3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vam1lbW1nci5jCkBAIC0wLDAgKzEsMTE3OSBAQAorLyoKKyAqIGptZW1tZ3IuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEpQRUcgc3lzdGVtLWluZGVwZW5kZW50IG1lbW9yeSBtYW5hZ2VtZW50CisgKiByb3V0aW5lcy4gIFRoaXMgY29kZSBpcyB1c2FibGUgYWNyb3NzIGEgd2lkZSB2YXJpZXR5IG9mIG1hY2hpbmVzOyBtb3N0CisgKiBvZiB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gaXNvbGF0ZWQgaW4gYSBzZXBhcmF0ZSBmaWxlLgorICogVGhlIG1ham9yIGZ1bmN0aW9ucyBwcm92aWRlZCBoZXJlIGFyZToKKyAqICAgKiBwb29sLWJhc2VkIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgbWVtb3J5OworICogICAqIHBvbGljeSBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIGRpdmlkZSBhdmFpbGFibGUgbWVtb3J5IGFtb25nIHRoZQorICogICAgIHZpcnR1YWwgYXJyYXlzOworICogICAqIGNvbnRyb2wgbG9naWMgZm9yIHN3YXBwaW5nIHZpcnR1YWwgYXJyYXlzIGJldHdlZW4gbWFpbiBtZW1vcnkgYW5kCisgKiAgICAgYmFja2luZyBzdG9yYWdlLgorICogVGhlIHNlcGFyYXRlIHN5c3RlbS1kZXBlbmRlbnQgZmlsZSBwcm92aWRlcyB0aGUgYWN0dWFsIGJhY2tpbmctc3RvcmFnZQorICogYWNjZXNzIGNvZGUsIGFuZCBpdCBjb250YWlucyB0aGUgcG9saWN5IGRlY2lzaW9uIGFib3V0IGhvdyBtdWNoIHRvdGFsCisgKiBtYWluIG1lbW9yeSB0byB1c2UuCisgKiBUaGlzIGZpbGUgaXMgc3lzdGVtLWRlcGVuZGVudCBpbiB0aGUgc2Vuc2UgdGhhdCBzb21lIG9mIGl0cyBmdW5jdGlvbnMKKyAqIGFyZSB1bm5lY2Vzc2FyeSBpbiBzb21lIHN5c3RlbXMuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgZW5vdWdoIHZpcnR1YWwKKyAqIG1lbW9yeSBzbyB0aGF0IGJhY2tpbmcgc3RvcmFnZSB3aWxsIG5ldmVyIGJlIHVzZWQsIG11Y2ggb2YgdGhlIHZpcnR1YWwKKyAqIGFycmF5IGNvbnRyb2wgbG9naWMgY291bGQgYmUgcmVtb3ZlZC4gIChPZiBjb3Vyc2UsIGlmIHlvdSBoYXZlIHRoYXQgbXVjaAorICogbWVtb3J5IHRoZW4geW91IHNob3VsZG4ndCBjYXJlIGFib3V0IGEgbGl0dGxlIGJpdCBvZiB1bnVzZWQgY29kZS4uLikKKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjZGVmaW5lIEFNX01FTU9SWV9NQU5BR0VSICAgICAgIC8qIHdlIGRlZmluZSBqdmlydF9YYXJyYXlfY29udHJvbCBzdHJ1Y3RzICovCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiam1lbXN5cy5oIiAgICAgICAgICAgIC8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPiAxNjAwCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmbmRlZiBOT19HRVRFTlYKKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBnZXRlbnYoKSAqLworZXh0ZXJuIGNoYXIgKmdldGVudihjb25zdCBjaGFyICpuYW1lKTsKKyNlbmRpZgorI2VuZGlmCisKKworTE9DQUwoc2l6ZV90KQorcm91bmRfdXBfcG93MihzaXplX3QgYSwgc2l6ZV90IGIpCisvKiBhIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgYiwgaS5lLiBjZWlsKGEvYikqYiAqLworLyogQXNzdW1lcyBhID49IDAsIGIgPiAwLCBhbmQgYiBpcyBhIHBvd2VyIG9mIDIgKi8KK3sKKyAgcmV0dXJuICgoYSArIGIgLSAxKSAmICh+KGIgLSAxKSkpOworfQorCisKKy8qCisgKiBTb21lIGltcG9ydGFudCBub3RlczoKKyAqICAgVGhlIGFsbG9jYXRpb24gcm91dGluZXMgcHJvdmlkZWQgaGVyZSBtdXN0IG5ldmVyIHJldHVybiBOVUxMLgorICogICBUaGV5IHNob3VsZCBleGl0IHRvIGVycm9yX2V4aXQgaWYgdW5zdWNjZXNzZnVsLgorICoKKyAqICAgSXQncyBub3QgYSBnb29kIGlkZWEgdG8gdHJ5IHRvIG1lcmdlIHRoZSBzYXJyYXkgYW5kIGJhcnJheSByb3V0aW5lcywKKyAqICAgZXZlbiB0aG91Z2ggdGhleSBhcmUgdGV4dHVhbGx5IGFsbW9zdCB0aGUgc2FtZSwgYmVjYXVzZSBzYW1wbGVzIGFyZQorICogICB1c3VhbGx5IHN0b3JlZCBhcyBieXRlcyB3aGlsZSBjb2VmZmljaWVudHMgYXJlIHNob3J0cyBvciBpbnRzLiAgVGh1cywKKyAqICAgaW4gbWFjaGluZXMgd2hlcmUgYnl0ZSBwb2ludGVycyBoYXZlIGEgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9uIGZyb20KKyAqICAgd29yZCBwb2ludGVycywgdGhlIHJlc3VsdGluZyBtYWNoaW5lIGNvZGUgY291bGQgbm90IGJlIHRoZSBzYW1lLgorICovCisKKworLyoKKyAqIE1hbnkgbWFjaGluZXMgcmVxdWlyZSBzdG9yYWdlIGFsaWdubWVudDogbG9uZ3MgbXVzdCBzdGFydCBvbiA0LWJ5dGUKKyAqIGJvdW5kYXJpZXMsIGRvdWJsZXMgb24gOC1ieXRlIGJvdW5kYXJpZXMsIGV0Yy4gIE9uIHN1Y2ggbWFjaGluZXMsIG1hbGxvYygpCisgKiBhbHdheXMgcmV0dXJucyBwb2ludGVycyB0aGF0IGFyZSBtdWx0aXBsZXMgb2YgdGhlIHdvcnN0LWNhc2UgYWxpZ25tZW50CisgKiByZXF1aXJlbWVudCwgYW5kIHdlIGhhZCBiZXR0ZXIgZG8gc28gdG9vLgorICogVGhlcmUgaXNuJ3QgYW55IHJlYWxseSBwb3J0YWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSB3b3JzdC1jYXNlIGFsaWdubWVudAorICogcmVxdWlyZW1lbnQuICBUaGlzIG1vZHVsZSBhc3N1bWVzIHRoYXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcworICogbXVsdGlwbGVzIG9mIEFMSUdOX1NJWkUuCisgKiBCeSBkZWZhdWx0LCB3ZSBkZWZpbmUgQUxJR05fU0laRSBhcyBzaXplb2YoZG91YmxlKS4gIFRoaXMgaXMgbmVjZXNzYXJ5IG9uCisgKiBzb21lIHdvcmtzdGF0aW9ucyAod2hlcmUgZG91YmxlcyByZWFsbHkgZG8gbmVlZCA4LWJ5dGUgYWxpZ25tZW50KSBhbmQgd2lsbAorICogd29yayBmaW5lIG9uIG5lYXJseSBldmVyeXRoaW5nLiAgSWYgeW91ciBtYWNoaW5lIGhhcyBsZXNzZXIgYWxpZ25tZW50IG5lZWRzLAorICogeW91IGNhbiBzYXZlIGEgZmV3IGJ5dGVzIGJ5IG1ha2luZyBBTElHTl9TSVpFIHNtYWxsZXIuCisgKiBUaGUgb25seSBwbGFjZSBJIGtub3cgb2Ygd2hlcmUgdGhpcyB3aWxsIE5PVCB3b3JrIGlzIGNlcnRhaW4gTWFjaW50b3NoCisgKiA2ODB4MCBjb21waWxlcnMgdGhhdCBkZWZpbmUgZG91YmxlIGFzIGEgMTAtYnl0ZSBJRUVFIGV4dGVuZGVkIGZsb2F0LgorICogRG9pbmcgMTAtYnl0ZSBhbGlnbm1lbnQgaXMgY291bnRlcnByb2R1Y3RpdmUgYmVjYXVzZSBsb25nd29yZHMgd29uJ3QgYmUKKyAqIGFsaWduZWQgd2VsbC4gIFB1dCAiI2RlZmluZSBBTElHTl9TSVpFIDQiIGluIGpjb25maWcuaCBpZiB5b3UgaGF2ZQorICogc3VjaCBhIGNvbXBpbGVyLgorICovCisKKyNpZm5kZWYgQUxJR05fU0laRSAgICAgICAgICAgICAgLyogc28gY2FuIG92ZXJyaWRlIGZyb20gamNvbmZpZy5oICovCisjaWZuZGVmIFdJVEhfU0lNRAorI2RlZmluZSBBTElHTl9TSVpFICBzaXplb2YoZG91YmxlKQorI2Vsc2UKKyNkZWZpbmUgQUxJR05fU0laRSAgMzIgLyogTW9zdCBvZiB0aGUgU0lNRCBpbnN0cnVjdGlvbnMgd2Ugc3VwcG9ydCByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LWJ5dGUgKDEyOC1iaXQpIGFsaWdubWVudCwgYnV0IEFWWDIgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYnl0ZSBhbGlnbm1lbnQuICovCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogV2UgYWxsb2NhdGUgb2JqZWN0cyBmcm9tICJwb29scyIsIHdoZXJlIGVhY2ggcG9vbCBpcyBnb3R0ZW4gd2l0aCBhIHNpbmdsZQorICogcmVxdWVzdCB0byBqcGVnX2dldF9zbWFsbCgpIG9yIGpwZWdfZ2V0X2xhcmdlKCkuICBUaGVyZSBpcyBubyBwZXItb2JqZWN0CisgKiBvdmVyaGVhZCB3aXRoaW4gYSBwb29sLCBleGNlcHQgZm9yIGFsaWdubWVudCBwYWRkaW5nLiAgRWFjaCBwb29sIGhhcyBhCisgKiBoZWFkZXIgd2l0aCBhIGxpbmsgdG8gdGhlIG5leHQgcG9vbCBvZiB0aGUgc2FtZSBjbGFzcy4KKyAqIFNtYWxsIGFuZCBsYXJnZSBwb29sIGhlYWRlcnMgYXJlIGlkZW50aWNhbC4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBzbWFsbF9wb29sX3N0cnVjdCAqc21hbGxfcG9vbF9wdHI7CisKK3R5cGVkZWYgc3RydWN0IHNtYWxsX3Bvb2xfc3RydWN0IHsKKyAgc21hbGxfcG9vbF9wdHIgbmV4dDsgICAgICAgICAgLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCisgIHNpemVfdCBieXRlc191c2VkOyAgICAgICAgICAgIC8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLworICBzaXplX3QgYnl0ZXNfbGVmdDsgICAgICAgICAgICAvKiBieXRlcyBzdGlsbCBhdmFpbGFibGUgaW4gdGhpcyBwb29sICovCit9IHNtYWxsX3Bvb2xfaGRyOworCit0eXBlZGVmIHN0cnVjdCBsYXJnZV9wb29sX3N0cnVjdCAqbGFyZ2VfcG9vbF9wdHI7CisKK3R5cGVkZWYgc3RydWN0IGxhcmdlX3Bvb2xfc3RydWN0IHsKKyAgbGFyZ2VfcG9vbF9wdHIgbmV4dDsgICAgICAgICAgLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCisgIHNpemVfdCBieXRlc191c2VkOyAgICAgICAgICAgIC8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLworICBzaXplX3QgYnl0ZXNfbGVmdDsgICAgICAgICAgICAvKiBieXRlcyBzdGlsbCBhdmFpbGFibGUgaW4gdGhpcyBwb29sICovCit9IGxhcmdlX3Bvb2xfaGRyOworCisvKgorICogSGVyZSBpcyB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIGEgbWVtb3J5IG1hbmFnZXIgb2JqZWN0LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfbWVtb3J5X21nciBwdWI7ICAgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIEVhY2ggcG9vbCBpZGVudGlmaWVyIChsaWZldGltZSBjbGFzcykgbmFtZXMgYSBsaW5rZWQgbGlzdCBvZiBwb29scy4gKi8KKyAgc21hbGxfcG9vbF9wdHIgc21hbGxfbGlzdFtKUE9PTF9OVU1QT09MU107CisgIGxhcmdlX3Bvb2xfcHRyIGxhcmdlX2xpc3RbSlBPT0xfTlVNUE9PTFNdOworCisgIC8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgbGlmZXRpbWUgY2xhc3Mgb2YgdmlydHVhbCBhcnJheXMsIG9ubHkgb25lCisgICAqIGxpbmtlZCBsaXN0IGlzIG5lY2Vzc2FyeSAoZm9yIGVhY2ggZGF0YXR5cGUpLiAgTm90ZSB0aGF0IHRoZSB2aXJ0dWFsCisgICAqIGFycmF5IGNvbnRyb2wgYmxvY2tzIGJlaW5nIGxpbmtlZCB0b2dldGhlciBhcmUgYWN0dWFsbHkgc3RvcmVkIHNvbWV3aGVyZQorICAgKiBpbiB0aGUgc21hbGwtcG9vbCBsaXN0LgorICAgKi8KKyAganZpcnRfc2FycmF5X3B0ciB2aXJ0X3NhcnJheV9saXN0OworICBqdmlydF9iYXJyYXlfcHRyIHZpcnRfYmFycmF5X2xpc3Q7CisKKyAgLyogVGhpcyBjb3VudHMgdG90YWwgc3BhY2Ugb2J0YWluZWQgZnJvbSBqcGVnX2dldF9zbWFsbC9sYXJnZSAqLworICBzaXplX3QgdG90YWxfc3BhY2VfYWxsb2NhdGVkOworCisgIC8qIGFsbG9jX3NhcnJheSBhbmQgYWxsb2NfYmFycmF5IHNldCB0aGlzIHZhbHVlIGZvciB1c2UgYnkgdmlydHVhbAorICAgKiBhcnJheSByb3V0aW5lcy4KKyAgICovCisgIEpESU1FTlNJT04gbGFzdF9yb3dzcGVyY2h1bms7IC8qIGZyb20gbW9zdCByZWNlbnQgYWxsb2Nfc2FycmF5L2JhcnJheSAqLworfSBteV9tZW1vcnlfbWdyOworCit0eXBlZGVmIG15X21lbW9yeV9tZ3IgKm15X21lbV9wdHI7CisKKworLyoKKyAqIFRoZSBjb250cm9sIGJsb2NrcyBmb3IgdmlydHVhbCBhcnJheXMuCisgKiBOb3RlIHRoYXQgdGhlc2UgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlICJzbWFsbCIgcG9vbCBhcmVhLgorICogU3lzdGVtLWRlcGVuZGVudCBpbmZvIGZvciB0aGUgYXNzb2NpYXRlZCBiYWNraW5nIHN0b3JlIChpZiBhbnkpIGlzIGhpZGRlbgorICogaW5zaWRlIHRoZSBiYWNraW5nX3N0b3JlX2luZm8gc3RydWN0LgorICovCisKK3N0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCB7CisgIEpTQU1QQVJSQVkgbWVtX2J1ZmZlcjsgICAgICAgIC8qID0+IHRoZSBpbi1tZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c19pbl9hcnJheTsgICAgIC8qIHRvdGFsIHZpcnR1YWwgYXJyYXkgaGVpZ2h0ICovCisgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdzsgICAgIC8qIHdpZHRoIG9mIGFycmF5IChhbmQgb2YgbWVtb3J5IGJ1ZmZlcikgKi8KKyAgSkRJTUVOU0lPTiBtYXhhY2Nlc3M7ICAgICAgICAgLyogbWF4IHJvd3MgYWNjZXNzZWQgYnkgYWNjZXNzX3ZpcnRfc2FycmF5ICovCisgIEpESU1FTlNJT04gcm93c19pbl9tZW07ICAgICAgIC8qIGhlaWdodCBvZiBtZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c3BlcmNodW5rOyAgICAgIC8qIGFsbG9jYXRpb24gY2h1bmsgc2l6ZSBpbiBtZW1fYnVmZmVyICovCisgIEpESU1FTlNJT04gY3VyX3N0YXJ0X3JvdzsgICAgIC8qIGZpcnN0IGxvZ2ljYWwgcm93ICMgaW4gdGhlIGJ1ZmZlciAqLworICBKRElNRU5TSU9OIGZpcnN0X3VuZGVmX3JvdzsgICAvKiByb3cgIyBvZiBmaXJzdCB1bmluaXRpYWxpemVkIHJvdyAqLworICBib29sZWFuIHByZV96ZXJvOyAgICAgICAgICAgICAvKiBwcmUtemVybyBtb2RlIHJlcXVlc3RlZD8gKi8KKyAgYm9vbGVhbiBkaXJ0eTsgICAgICAgICAgICAgICAgLyogZG8gY3VycmVudCBidWZmZXIgY29udGVudHMgbmVlZCB3cml0dGVuPyAqLworICBib29sZWFuIGJfc19vcGVuOyAgICAgICAgICAgICAvKiBpcyBiYWNraW5nLXN0b3JlIGRhdGEgdmFsaWQ/ICovCisgIGp2aXJ0X3NhcnJheV9wdHIgbmV4dDsgICAgICAgIC8qIGxpbmsgdG8gbmV4dCB2aXJ0dWFsIHNhcnJheSBjb250cm9sIGJsb2NrICovCisgIGJhY2tpbmdfc3RvcmVfaW5mbyBiX3NfaW5mbzsgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY29udHJvbCBpbmZvICovCit9OworCitzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgeworICBKQkxPQ0tBUlJBWSBtZW1fYnVmZmVyOyAgICAgICAvKiA9PiB0aGUgaW4tbWVtb3J5IGJ1ZmZlciAqLworICBKRElNRU5TSU9OIHJvd3NfaW5fYXJyYXk7ICAgICAvKiB0b3RhbCB2aXJ0dWFsIGFycmF5IGhlaWdodCAqLworICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdzsgICAgICAvKiB3aWR0aCBvZiBhcnJheSAoYW5kIG9mIG1lbW9yeSBidWZmZXIpICovCisgIEpESU1FTlNJT04gbWF4YWNjZXNzOyAgICAgICAgIC8qIG1heCByb3dzIGFjY2Vzc2VkIGJ5IGFjY2Vzc192aXJ0X2JhcnJheSAqLworICBKRElNRU5TSU9OIHJvd3NfaW5fbWVtOyAgICAgICAvKiBoZWlnaHQgb2YgbWVtb3J5IGJ1ZmZlciAqLworICBKRElNRU5TSU9OIHJvd3NwZXJjaHVuazsgICAgICAvKiBhbGxvY2F0aW9uIGNodW5rIHNpemUgaW4gbWVtX2J1ZmZlciAqLworICBKRElNRU5TSU9OIGN1cl9zdGFydF9yb3c7ICAgICAvKiBmaXJzdCBsb2dpY2FsIHJvdyAjIGluIHRoZSBidWZmZXIgKi8KKyAgSkRJTUVOU0lPTiBmaXJzdF91bmRlZl9yb3c7ICAgLyogcm93ICMgb2YgZmlyc3QgdW5pbml0aWFsaXplZCByb3cgKi8KKyAgYm9vbGVhbiBwcmVfemVybzsgICAgICAgICAgICAgLyogcHJlLXplcm8gbW9kZSByZXF1ZXN0ZWQ/ICovCisgIGJvb2xlYW4gZGlydHk7ICAgICAgICAgICAgICAgIC8qIGRvIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIG5lZWQgd3JpdHRlbj8gKi8KKyAgYm9vbGVhbiBiX3Nfb3BlbjsgICAgICAgICAgICAgLyogaXMgYmFja2luZy1zdG9yZSBkYXRhIHZhbGlkPyAqLworICBqdmlydF9iYXJyYXlfcHRyIG5leHQ7ICAgICAgICAvKiBsaW5rIHRvIG5leHQgdmlydHVhbCBiYXJyYXkgY29udHJvbCBibG9jayAqLworICBiYWNraW5nX3N0b3JlX2luZm8gYl9zX2luZm87ICAvKiBTeXN0ZW0tZGVwZW5kZW50IGNvbnRyb2wgaW5mbyAqLworfTsKKworCisjaWZkZWYgTUVNX1NUQVRTICAgICAgICAgICAgICAgIC8qIG9wdGlvbmFsIGV4dHJhIHN0dWZmIGZvciBzdGF0aXN0aWNzICovCisKK0xPQ0FMKHZvaWQpCitwcmludF9tZW1fc3RhdHMoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCkKK3sKKyAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0ciljaW5mby0+bWVtOworICBzbWFsbF9wb29sX3B0ciBzaGRyX3B0cjsKKyAgbGFyZ2VfcG9vbF9wdHIgbGhkcl9wdHI7CisKKyAgLyogU2luY2UgdGhpcyBpcyBvbmx5IGEgZGVidWdnaW5nIHN0dWIsIHdlIGNhbiBjaGVhdCBhIGxpdHRsZSBieSB1c2luZworICAgKiBmcHJpbnRmIGRpcmVjdGx5IHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2ggdGhlIHRyYWNlIG1lc3NhZ2UgY29kZS4KKyAgICogVGhpcyBpcyBoZWxwZnVsIGJlY2F1c2UgbWVzc2FnZSBwYXJtIGFycmF5IGNhbid0IGhhbmRsZSBsb25ncy4KKyAgICovCisgIGZwcmludGYoc3RkZXJyLCAiRnJlZWluZyBwb29sICVkLCB0b3RhbCBzcGFjZSA9ICVsZFxuIiwKKyAgICAgICAgICBwb29sX2lkLCBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCk7CisKKyAgZm9yIChsaGRyX3B0ciA9IG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXTsgbGhkcl9wdHIgIT0gTlVMTDsKKyAgICAgICBsaGRyX3B0ciA9IGxoZHJfcHRyLT5uZXh0KSB7CisgICAgZnByaW50ZihzdGRlcnIsICIgIExhcmdlIGNodW5rIHVzZWQgJWxkXG4iLCAobG9uZylsaGRyX3B0ci0+Ynl0ZXNfdXNlZCk7CisgIH0KKworICBmb3IgKHNoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOyBzaGRyX3B0ciAhPSBOVUxMOworICAgICAgIHNoZHJfcHRyID0gc2hkcl9wdHItPm5leHQpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgU21hbGwgY2h1bmsgdXNlZCAlbGQgZnJlZSAlbGRcbiIsCisgICAgICAgICAgICAobG9uZylzaGRyX3B0ci0+Ynl0ZXNfdXNlZCwgKGxvbmcpc2hkcl9wdHItPmJ5dGVzX2xlZnQpOworICB9Cit9CisKKyNlbmRpZiAvKiBNRU1fU1RBVFMgKi8KKworCitMT0NBTCh2b2lkKQorb3V0X29mX21lbW9yeShqX2NvbW1vbl9wdHIgY2luZm8sIGludCB3aGljaCkKKy8qIFJlcG9ydCBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIGFuZCBzdG9wIGV4ZWN1dGlvbiAqLworLyogSWYgd2UgY29tcGlsZWQgTUVNX1NUQVRTIHN1cHBvcnQsIHJlcG9ydCBhbGxvYyByZXF1ZXN0cyBiZWZvcmUgZHlpbmcgKi8KK3sKKyNpZmRlZiBNRU1fU1RBVFMKKyAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPSAyOyAgLyogZm9yY2Ugc2VsZl9kZXN0cnVjdCB0byByZXBvcnQgc3RhdHMgKi8KKyNlbmRpZgorICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCB3aGljaCk7Cit9CisKKworLyoKKyAqIEFsbG9jYXRpb24gb2YgInNtYWxsIiBvYmplY3RzLgorICoKKyAqIEZvciB0aGVzZSwgd2UgdXNlIHBvb2xlZCBzdG9yYWdlLiAgV2hlbiBhIG5ldyBwb29sIG11c3QgYmUgY3JlYXRlZCwKKyAqIHdlIHRyeSB0byBnZXQgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IHBsdXMgYSAic2xvcCIgZmFjdG9yLAorICogd2hlcmUgdGhlIHNsb3Agd2lsbCBiZSB0aGUgYW1vdW50IG9mIGxlZnRvdmVyIHNwYWNlIGluIHRoZSBuZXcgcG9vbC4KKyAqIFRoZSBzcGVlZCB2cy4gc3BhY2UgdHJhZGVvZmYgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5IHRoZSBzbG9wIHZhbHVlcy4KKyAqIEEgZGlmZmVyZW50IHNsb3AgdmFsdWUgaXMgcHJvdmlkZWQgZm9yIGVhY2ggcG9vbCBjbGFzcyAobGlmZXRpbWUpLAorICogYW5kIHdlIGFsc28gZGlzdGluZ3Vpc2ggdGhlIGZpcnN0IHBvb2wgb2YgYSBjbGFzcyBmcm9tIGxhdGVyIG9uZXMuCisgKiBOT1RFOiB0aGUgdmFsdWVzIGdpdmVuIHdvcmsgZmFpcmx5IHdlbGwgb24gYm90aCAxNi0gYW5kIDMyLWJpdC1pbnQKKyAqIG1hY2hpbmVzLCBidXQgbWF5IGJlIHRvbyBzbWFsbCBpZiBsb25ncyBhcmUgNjQgYml0cyBvciBtb3JlLgorICoKKyAqIFNpbmNlIHdlIGRvIG5vdCBrbm93IHdoYXQgYWxpZ25tZW50IG1hbGxvYygpIGdpdmVzIHVzLCB3ZSBoYXZlIHRvCisgKiBhbGxvY2F0ZSBBTElHTl9TSVpFLTEgZXh0cmEgc3BhY2UgcGVyIHBvb2wgdG8gaGF2ZSByb29tIGZvciBhbGlnbm1lbnQKKyAqIGFkanVzdG1lbnQuCisgKi8KKworc3RhdGljIGNvbnN0IHNpemVfdCBmaXJzdF9wb29sX3Nsb3BbSlBPT0xfTlVNUE9PTFNdID0geworICAxNjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBQRVJNQU5FTlQgcG9vbCAqLworICAxNjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBJTUFHRSBwb29sICovCit9OworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGV4dHJhX3Bvb2xfc2xvcFtKUE9PTF9OVU1QT09MU10gPSB7CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgUEVSTUFORU5UIHBvb2xzICovCisgIDUwMDAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgSU1BR0UgcG9vbHMgKi8KK307CisKKyNkZWZpbmUgTUlOX1NMT1AgIDUwICAgICAgICAgICAgLyogZ3JlYXRlciB0aGFuIDAgdG8gYXZvaWQgZnV0aWxlIGxvb3BpbmcgKi8KKworCitNRVRIT0RERUYodm9pZCAqKQorYWxsb2Nfc21hbGwoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwgc2l6ZV90IHNpemVvZm9iamVjdCkKKy8qIEFsbG9jYXRlIGEgInNtYWxsIiBvYmplY3QgKi8KK3sKKyAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0ciljaW5mby0+bWVtOworICBzbWFsbF9wb29sX3B0ciBoZHJfcHRyLCBwcmV2X2hkcl9wdHI7CisgIGNoYXIgKmRhdGFfcHRyOworICBzaXplX3QgbWluX3JlcXVlc3QsIHNsb3A7CisKKyAgLyoKKyAgICogUm91bmQgdXAgdGhlIHJlcXVlc3RlZCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgQUxJR05fU0laRSBpbiBvcmRlcgorICAgKiB0byBhc3N1cmUgYWxpZ25tZW50IGZvciB0aGUgbmV4dCBvYmplY3QgYWxsb2NhdGVkIGluIHRoZSBzYW1lIHBvb2wKKyAgICogYW5kIHNvIHRoYXQgYWxnb3JpdGhtcyBjYW4gc3RyYWRkbGUgb3V0c2lkZSB0aGUgcHJvcGVyIGFyZWEgdXAKKyAgICogdG8gdGhlIG5leHQgYWxpZ25tZW50LgorICAgKi8KKyAgaWYgKHNpemVvZm9iamVjdCA+IE1BWF9BTExPQ19DSFVOSykgeworICAgIC8qIFRoaXMgcHJldmVudHMgb3ZlcmZsb3cvd3JhcC1hcm91bmQgaW4gcm91bmRfdXBfcG93MigpIGlmIHNpemVvZm9iamVjdAorICAgICAgIGlzIGNsb3NlIHRvIFNJWkVfTUFYLiAqLworICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDcpOworICB9CisgIHNpemVvZm9iamVjdCA9IHJvdW5kX3VwX3BvdzIoc2l6ZW9mb2JqZWN0LCBBTElHTl9TSVpFKTsKKworICAvKiBDaGVjayBmb3IgdW5zYXRpc2ZpYWJsZSByZXF1ZXN0IChkbyBub3cgdG8gZW5zdXJlIG5vIG92ZXJmbG93IGJlbG93KSAqLworICBpZiAoKHNpemVvZihzbWFsbF9wb29sX2hkcikgKyBzaXplb2ZvYmplY3QgKyBBTElHTl9TSVpFIC0gMSkgPgorICAgICAgTUFYX0FMTE9DX0NIVU5LKQorICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDEpOyAgICAvKiByZXF1ZXN0IGV4Y2VlZHMgbWFsbG9jJ3MgYWJpbGl0eSAqLworCisgIC8qIFNlZSBpZiBzcGFjZSBpcyBhdmFpbGFibGUgaW4gYW55IGV4aXN0aW5nIHBvb2wgKi8KKyAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOyAvKiBzYWZldHkgY2hlY2sgKi8KKyAgcHJldl9oZHJfcHRyID0gTlVMTDsKKyAgaGRyX3B0ciA9IG1lbS0+c21hbGxfbGlzdFtwb29sX2lkXTsKKyAgd2hpbGUgKGhkcl9wdHIgIT0gTlVMTCkgeworICAgIGlmIChoZHJfcHRyLT5ieXRlc19sZWZ0ID49IHNpemVvZm9iamVjdCkKKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgcG9vbCB3aXRoIGVub3VnaCBzcGFjZSAqLworICAgIHByZXZfaGRyX3B0ciA9IGhkcl9wdHI7CisgICAgaGRyX3B0ciA9IGhkcl9wdHItPm5leHQ7CisgIH0KKworICAvKiBUaW1lIHRvIG1ha2UgYSBuZXcgcG9vbD8gKi8KKyAgaWYgKGhkcl9wdHIgPT0gTlVMTCkgeworICAgIC8qIG1pbl9yZXF1ZXN0IGlzIHdoYXQgd2UgbmVlZCBub3csIHNsb3AgaXMgd2hhdCB3aWxsIGJlIGxlZnRvdmVyICovCisgICAgbWluX3JlcXVlc3QgPSBzaXplb2Yoc21hbGxfcG9vbF9oZHIpICsgc2l6ZW9mb2JqZWN0ICsgQUxJR05fU0laRSAtIDE7CisgICAgaWYgKHByZXZfaGRyX3B0ciA9PSBOVUxMKSAgIC8qIGZpcnN0IHBvb2wgaW4gY2xhc3M/ICovCisgICAgICBzbG9wID0gZmlyc3RfcG9vbF9zbG9wW3Bvb2xfaWRdOworICAgIGVsc2UKKyAgICAgIHNsb3AgPSBleHRyYV9wb29sX3Nsb3BbcG9vbF9pZF07CisgICAgLyogRG9uJ3QgYXNrIGZvciBtb3JlIHRoYW4gTUFYX0FMTE9DX0NIVU5LICovCisgICAgaWYgKHNsb3AgPiAoc2l6ZV90KShNQVhfQUxMT0NfQ0hVTksgLSBtaW5fcmVxdWVzdCkpCisgICAgICBzbG9wID0gKHNpemVfdCkoTUFYX0FMTE9DX0NIVU5LIC0gbWluX3JlcXVlc3QpOworICAgIC8qIFRyeSB0byBnZXQgc3BhY2UsIGlmIGZhaWwgcmVkdWNlIHNsb3AgYW5kIHRyeSBhZ2FpbiAqLworICAgIGZvciAoOzspIHsKKyAgICAgIGhkcl9wdHIgPSAoc21hbGxfcG9vbF9wdHIpanBlZ19nZXRfc21hbGwoY2luZm8sIG1pbl9yZXF1ZXN0ICsgc2xvcCk7CisgICAgICBpZiAoaGRyX3B0ciAhPSBOVUxMKQorICAgICAgICBicmVhazsKKyAgICAgIHNsb3AgLz0gMjsKKyAgICAgIGlmIChzbG9wIDwgTUlOX1NMT1ApICAgICAgLyogZ2l2ZSB1cCB3aGVuIGl0IGdldHMgcmVhbCBzbWFsbCAqLworICAgICAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCAyKTsgLyoganBlZ19nZXRfc21hbGwgZmFpbGVkICovCisgICAgfQorICAgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkICs9IG1pbl9yZXF1ZXN0ICsgc2xvcDsKKyAgICAvKiBTdWNjZXNzLCBpbml0aWFsaXplIHRoZSBuZXcgcG9vbCBoZWFkZXIgYW5kIGFkZCB0byBlbmQgb2YgbGlzdCAqLworICAgIGhkcl9wdHItPm5leHQgPSBOVUxMOworICAgIGhkcl9wdHItPmJ5dGVzX3VzZWQgPSAwOworICAgIGhkcl9wdHItPmJ5dGVzX2xlZnQgPSBzaXplb2ZvYmplY3QgKyBzbG9wOworICAgIGlmIChwcmV2X2hkcl9wdHIgPT0gTlVMTCkgICAvKiBmaXJzdCBwb29sIGluIGNsYXNzPyAqLworICAgICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdID0gaGRyX3B0cjsKKyAgICBlbHNlCisgICAgICBwcmV2X2hkcl9wdHItPm5leHQgPSBoZHJfcHRyOworICB9CisKKyAgLyogT0ssIGFsbG9jYXRlIHRoZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBwb29sICovCisgIGRhdGFfcHRyID0gKGNoYXIgKiloZHJfcHRyOyAvKiBwb2ludCB0byBmaXJzdCBkYXRhIGJ5dGUgaW4gcG9vbC4uLiAqLworICBkYXRhX3B0ciArPSBzaXplb2Yoc21hbGxfcG9vbF9oZHIpOyAvKiAuLi5ieSBza2lwcGluZyB0aGUgaGVhZGVyLi4uICovCisgIGlmICgoc2l6ZV90KWRhdGFfcHRyICUgQUxJR05fU0laRSkgLyogLi4uYW5kIGFkanVzdCBmb3IgYWxpZ25tZW50ICovCisgICAgZGF0YV9wdHIgKz0gQUxJR05fU0laRSAtIChzaXplX3QpZGF0YV9wdHIgJSBBTElHTl9TSVpFOworICBkYXRhX3B0ciArPSBoZHJfcHRyLT5ieXRlc191c2VkOyAvKiBwb2ludCB0byBwbGFjZSBmb3Igb2JqZWN0ICovCisgIGhkcl9wdHItPmJ5dGVzX3VzZWQgKz0gc2l6ZW9mb2JqZWN0OworICBoZHJfcHRyLT5ieXRlc19sZWZ0IC09IHNpemVvZm9iamVjdDsKKworICByZXR1cm4gKHZvaWQgKilkYXRhX3B0cjsKK30KKworCisvKgorICogQWxsb2NhdGlvbiBvZiAibGFyZ2UiIG9iamVjdHMuCisgKgorICogVGhlIGV4dGVybmFsIHNlbWFudGljcyBvZiB0aGVzZSBhcmUgdGhlIHNhbWUgYXMgInNtYWxsIiBvYmplY3RzLiAgSG93ZXZlciwKKyAqIHRoZSBwb29sIG1hbmFnZW1lbnQgaGV1cmlzdGljcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAgV2UgYXNzdW1lIHRoYXQgZWFjaAorICogcmVxdWVzdCBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBtYXkgYXMgd2VsbCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8KKyAqIGpwZWdfZ2V0X2xhcmdlOyB0aGUgcG9vbCBtYW5hZ2VtZW50IGp1c3QgbGlua3MgZXZlcnl0aGluZyB0b2dldGhlcgorICogc28gdGhhdCB3ZSBjYW4gZnJlZSBpdCBhbGwgb24gZGVtYW5kLgorICogTm90ZTogdGhlIG1ham9yIHVzZSBvZiAibGFyZ2UiIG9iamVjdHMgaXMgaW4gSlNBTVBBUlJBWSBhbmQgSkJMT0NLQVJSQVkKKyAqIHN0cnVjdHVyZXMuICBUaGUgcm91dGluZXMgdGhhdCBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyAoc2VlIGJlbG93KQorICogZGVsaWJlcmF0ZWx5IGJ1bmNoIHJvd3MgdG9nZXRoZXIgdG8gZW5zdXJlIGEgbGFyZ2UgcmVxdWVzdCBzaXplLgorICovCisKK01FVEhPRERFRih2b2lkICopCithbGxvY19sYXJnZShqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQorLyogQWxsb2NhdGUgYSAibGFyZ2UiIG9iamVjdCAqLworeworICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKWNpbmZvLT5tZW07CisgIGxhcmdlX3Bvb2xfcHRyIGhkcl9wdHI7CisgIGNoYXIgKmRhdGFfcHRyOworCisgIC8qCisgICAqIFJvdW5kIHVwIHRoZSByZXF1ZXN0ZWQgc2l6ZSB0byBhIG11bHRpcGxlIG9mIEFMSUdOX1NJWkUgc28gdGhhdAorICAgKiBhbGdvcml0aG1zIGNhbiBzdHJhZGRsZSBvdXRzaWRlIHRoZSBwcm9wZXIgYXJlYSB1cCB0byB0aGUgbmV4dAorICAgKiBhbGlnbm1lbnQuCisgICAqLworICBpZiAoc2l6ZW9mb2JqZWN0ID4gTUFYX0FMTE9DX0NIVU5LKSB7CisgICAgLyogVGhpcyBwcmV2ZW50cyBvdmVyZmxvdy93cmFwLWFyb3VuZCBpbiByb3VuZF91cF9wb3cyKCkgaWYgc2l6ZW9mb2JqZWN0CisgICAgICAgaXMgY2xvc2UgdG8gU0laRV9NQVguICovCisgICAgb3V0X29mX21lbW9yeShjaW5mbywgOCk7CisgIH0KKyAgc2l6ZW9mb2JqZWN0ID0gcm91bmRfdXBfcG93MihzaXplb2ZvYmplY3QsIEFMSUdOX1NJWkUpOworCisgIC8qIENoZWNrIGZvciB1bnNhdGlzZmlhYmxlIHJlcXVlc3QgKGRvIG5vdyB0byBlbnN1cmUgbm8gb3ZlcmZsb3cgYmVsb3cpICovCisgIGlmICgoc2l6ZW9mKGxhcmdlX3Bvb2xfaGRyKSArIHNpemVvZm9iamVjdCArIEFMSUdOX1NJWkUgLSAxKSA+CisgICAgICBNQVhfQUxMT0NfQ0hVTkspCisgICAgb3V0X29mX21lbW9yeShjaW5mbywgMyk7ICAgIC8qIHJlcXVlc3QgZXhjZWVkcyBtYWxsb2MncyBhYmlsaXR5ICovCisKKyAgLyogQWx3YXlzIG1ha2UgYSBuZXcgcG9vbCAqLworICBpZiAocG9vbF9pZCA8IDAgfHwgcG9vbF9pZCA+PSBKUE9PTF9OVU1QT09MUykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7IC8qIHNhZmV0eSBjaGVjayAqLworCisgIGhkcl9wdHIgPSAobGFyZ2VfcG9vbF9wdHIpanBlZ19nZXRfbGFyZ2UoY2luZm8sIHNpemVvZm9iamVjdCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxhcmdlX3Bvb2xfaGRyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxJR05fU0laRSAtIDEpOworICBpZiAoaGRyX3B0ciA9PSBOVUxMKQorICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDQpOyAgICAvKiBqcGVnX2dldF9sYXJnZSBmYWlsZWQgKi8KKyAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgKz0gc2l6ZW9mb2JqZWN0ICsgc2l6ZW9mKGxhcmdlX3Bvb2xfaGRyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMSUdOX1NJWkUgLSAxOworCisgIC8qIFN1Y2Nlc3MsIGluaXRpYWxpemUgdGhlIG5ldyBwb29sIGhlYWRlciBhbmQgYWRkIHRvIGxpc3QgKi8KKyAgaGRyX3B0ci0+bmV4dCA9IG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXTsKKyAgLyogV2UgbWFpbnRhaW4gc3BhY2UgY291bnRzIGluIGVhY2ggcG9vbCBoZWFkZXIgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzLAorICAgKiBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgbmVlZGVkIGZvciBhbGxvY2F0aW9uLgorICAgKi8KKyAgaGRyX3B0ci0+Ynl0ZXNfdXNlZCA9IHNpemVvZm9iamVjdDsKKyAgaGRyX3B0ci0+Ynl0ZXNfbGVmdCA9IDA7CisgIG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXSA9IGhkcl9wdHI7CisKKyAgZGF0YV9wdHIgPSAoY2hhciAqKWhkcl9wdHI7IC8qIHBvaW50IHRvIGZpcnN0IGRhdGEgYnl0ZSBpbiBwb29sLi4uICovCisgIGRhdGFfcHRyICs9IHNpemVvZihzbWFsbF9wb29sX2hkcik7IC8qIC4uLmJ5IHNraXBwaW5nIHRoZSBoZWFkZXIuLi4gKi8KKyAgaWYgKChzaXplX3QpZGF0YV9wdHIgJSBBTElHTl9TSVpFKSAvKiAuLi5hbmQgYWRqdXN0IGZvciBhbGlnbm1lbnQgKi8KKyAgICBkYXRhX3B0ciArPSBBTElHTl9TSVpFIC0gKHNpemVfdClkYXRhX3B0ciAlIEFMSUdOX1NJWkU7CisKKyAgcmV0dXJuICh2b2lkICopZGF0YV9wdHI7Cit9CisKKworLyoKKyAqIENyZWF0aW9uIG9mIDItRCBzYW1wbGUgYXJyYXlzLgorICoKKyAqIFRvIG1pbmltaXplIGFsbG9jYXRpb24gb3ZlcmhlYWQgYW5kIHRvIGFsbG93IEkvTyBvZiBsYXJnZSBjb250aWd1b3VzCisgKiBibG9ja3MsIHdlIGFsbG9jYXRlIHRoZSBzYW1wbGUgcm93cyBpbiBncm91cHMgb2YgYXMgbWFueSByb3dzIGFzIHBvc3NpYmxlCisgKiB3aXRob3V0IGV4Y2VlZGluZyBNQVhfQUxMT0NfQ0hVTksgdG90YWwgYnl0ZXMgcGVyIGFsbG9jYXRpb24gcmVxdWVzdC4KKyAqIE5COiB0aGUgdmlydHVhbCBhcnJheSBjb250cm9sIHJvdXRpbmVzLCBsYXRlciBpbiB0aGlzIGZpbGUsIGtub3cgYWJvdXQKKyAqIHRoaXMgY2h1bmtpbmcgb2Ygcm93cy4gIFRoZSByb3dzcGVyY2h1bmsgdmFsdWUgaXMgbGVmdCBpbiB0aGUgbWVtIG1hbmFnZXIKKyAqIG9iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBzYXZlZCBhd2F5IGlmIHRoaXMgc2FycmF5IGlzIHRoZSB3b3Jrc3BhY2UgZm9yCisgKiBhIHZpcnR1YWwgYXJyYXkuCisgKgorICogU2luY2Ugd2UgYXJlIG9mdGVuIHVwc2FtcGxpbmcgd2l0aCBhIGZhY3RvciAyLCB3ZSBhbGlnbiB0aGUgc2l6ZSAobm90CisgKiB0aGUgc3RhcnQpIHRvIDIgKiBBTElHTl9TSVpFIHNvIHRoYXQgdGhlIHVwc2FtcGxpbmcgcm91dGluZXMgZG9uJ3QgaGF2ZQorICogdG8gYmUgYXMgY2FyZWZ1bCBhYm91dCBzaXplLgorICovCisKK01FVEhPRERFRihKU0FNUEFSUkFZKQorYWxsb2Nfc2FycmF5KGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG51bXJvd3MpCisvKiBBbGxvY2F0ZSBhIDItRCBzYW1wbGUgYXJyYXkgKi8KK3sKKyAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0ciljaW5mby0+bWVtOworICBKU0FNUEFSUkFZIHJlc3VsdDsKKyAgSlNBTVBST1cgd29ya3NwYWNlOworICBKRElNRU5TSU9OIHJvd3NwZXJjaHVuaywgY3Vycm93LCBpOworICBsb25nIGx0ZW1wOworCisgIC8qIE1ha2Ugc3VyZSBlYWNoIHJvdyBpcyBwcm9wZXJseSBhbGlnbmVkICovCisgIGlmICgoQUxJR05fU0laRSAlIHNpemVvZihKU0FNUExFKSkgIT0gMCkKKyAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCA1KTsgICAgLyogc2FmZXR5IGNoZWNrICovCisKKyAgaWYgKHNhbXBsZXNwZXJyb3cgPiBNQVhfQUxMT0NfQ0hVTkspIHsKKyAgICAvKiBUaGlzIHByZXZlbnRzIG92ZXJmbG93L3dyYXAtYXJvdW5kIGluIHJvdW5kX3VwX3BvdzIoKSBpZiBzaXplb2ZvYmplY3QKKyAgICAgICBpcyBjbG9zZSB0byBTSVpFX01BWC4gKi8KKyAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCA5KTsKKyAgfQorICBzYW1wbGVzcGVycm93ID0gKEpESU1FTlNJT04pcm91bmRfdXBfcG93MihzYW1wbGVzcGVycm93LCAoMiAqIEFMSUdOX1NJWkUpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEpTQU1QTEUpKTsKKworICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCisgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSyAtIHNpemVvZihsYXJnZV9wb29sX2hkcikpIC8KKyAgICAgICAgICAoKGxvbmcpc2FtcGxlc3BlcnJvdyAqIHNpemVvZihKU0FNUExFKSk7CisgIGlmIChsdGVtcCA8PSAwKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOworICBpZiAobHRlbXAgPCAobG9uZyludW1yb3dzKQorICAgIHJvd3NwZXJjaHVuayA9IChKRElNRU5TSU9OKWx0ZW1wOworICBlbHNlCisgICAgcm93c3BlcmNodW5rID0gbnVtcm93czsKKyAgbWVtLT5sYXN0X3Jvd3NwZXJjaHVuayA9IHJvd3NwZXJjaHVuazsKKworICAvKiBHZXQgc3BhY2UgZm9yIHJvdyBwb2ludGVycyAoc21hbGwgb2JqZWN0KSAqLworICByZXN1bHQgPSAoSlNBTVBBUlJBWSlhbGxvY19zbWFsbChjaW5mbywgcG9vbF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkobnVtcm93cyAqIHNpemVvZihKU0FNUFJPVykpKTsKKworICAvKiBHZXQgdGhlIHJvd3MgdGhlbXNlbHZlcyAobGFyZ2Ugb2JqZWN0cykgKi8KKyAgY3Vycm93ID0gMDsKKyAgd2hpbGUgKGN1cnJvdyA8IG51bXJvd3MpIHsKKyAgICByb3dzcGVyY2h1bmsgPSBNSU4ocm93c3BlcmNodW5rLCBudW1yb3dzIC0gY3Vycm93KTsKKyAgICB3b3Jrc3BhY2UgPSAoSlNBTVBST1cpYWxsb2NfbGFyZ2UoY2luZm8sIHBvb2xfaWQsCisgICAgICAoc2l6ZV90KSgoc2l6ZV90KXJvd3NwZXJjaHVuayAqIChzaXplX3Qpc2FtcGxlc3BlcnJvdyAqCisgICAgICAgICAgICAgICBzaXplb2YoSlNBTVBMRSkpKTsKKyAgICBmb3IgKGkgPSByb3dzcGVyY2h1bms7IGkgPiAwOyBpLS0pIHsKKyAgICAgIHJlc3VsdFtjdXJyb3crK10gPSB3b3Jrc3BhY2U7CisgICAgICB3b3Jrc3BhY2UgKz0gc2FtcGxlc3BlcnJvdzsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qCisgKiBDcmVhdGlvbiBvZiAyLUQgY29lZmZpY2llbnQtYmxvY2sgYXJyYXlzLgorICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgY29kZSBmb3Igc2FtcGxlIGFycmF5cywgYWJvdmUuCisgKi8KKworTUVUSE9EREVGKEpCTE9DS0FSUkFZKQorYWxsb2NfYmFycmF5KGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIEpESU1FTlNJT04gYmxvY2tzcGVycm93LAorICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtcm93cykKKy8qIEFsbG9jYXRlIGEgMi1EIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5ICovCit7CisgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpY2luZm8tPm1lbTsKKyAgSkJMT0NLQVJSQVkgcmVzdWx0OworICBKQkxPQ0tST1cgd29ya3NwYWNlOworICBKRElNRU5TSU9OIHJvd3NwZXJjaHVuaywgY3Vycm93LCBpOworICBsb25nIGx0ZW1wOworCisgIC8qIE1ha2Ugc3VyZSBlYWNoIHJvdyBpcyBwcm9wZXJseSBhbGlnbmVkICovCisgIGlmICgoc2l6ZW9mKEpCTE9DSykgJSBBTElHTl9TSVpFKSAhPSAwKQorICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDYpOyAgICAvKiBzYWZldHkgY2hlY2sgKi8KKworICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCisgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSyAtIHNpemVvZihsYXJnZV9wb29sX2hkcikpIC8KKyAgICAgICAgICAoKGxvbmcpYmxvY2tzcGVycm93ICogc2l6ZW9mKEpCTE9DSykpOworICBpZiAobHRlbXAgPD0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1dJRFRIX09WRVJGTE9XKTsKKyAgaWYgKGx0ZW1wIDwgKGxvbmcpbnVtcm93cykKKyAgICByb3dzcGVyY2h1bmsgPSAoSkRJTUVOU0lPTilsdGVtcDsKKyAgZWxzZQorICAgIHJvd3NwZXJjaHVuayA9IG51bXJvd3M7CisgIG1lbS0+bGFzdF9yb3dzcGVyY2h1bmsgPSByb3dzcGVyY2h1bms7CisKKyAgLyogR2V0IHNwYWNlIGZvciByb3cgcG9pbnRlcnMgKHNtYWxsIG9iamVjdCkgKi8KKyAgcmVzdWx0ID0gKEpCTE9DS0FSUkFZKWFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkobnVtcm93cyAqIHNpemVvZihKQkxPQ0tST1cpKSk7CisKKyAgLyogR2V0IHRoZSByb3dzIHRoZW1zZWx2ZXMgKGxhcmdlIG9iamVjdHMpICovCisgIGN1cnJvdyA9IDA7CisgIHdoaWxlIChjdXJyb3cgPCBudW1yb3dzKSB7CisgICAgcm93c3BlcmNodW5rID0gTUlOKHJvd3NwZXJjaHVuaywgbnVtcm93cyAtIGN1cnJvdyk7CisgICAgd29ya3NwYWNlID0gKEpCTE9DS1JPVylhbGxvY19sYXJnZShjaW5mbywgcG9vbF9pZCwKKyAgICAgICAgKHNpemVfdCkoKHNpemVfdClyb3dzcGVyY2h1bmsgKiAoc2l6ZV90KWJsb2Nrc3BlcnJvdyAqCisgICAgICAgICAgICAgICAgICBzaXplb2YoSkJMT0NLKSkpOworICAgIGZvciAoaSA9IHJvd3NwZXJjaHVuazsgaSA+IDA7IGktLSkgeworICAgICAgcmVzdWx0W2N1cnJvdysrXSA9IHdvcmtzcGFjZTsKKyAgICAgIHdvcmtzcGFjZSArPSBibG9ja3NwZXJyb3c7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogQWJvdXQgdmlydHVhbCBhcnJheSBtYW5hZ2VtZW50OgorICoKKyAqIFRoZSBhYm92ZSAibm9ybWFsIiBhcnJheSByb3V0aW5lcyBhcmUgb25seSB1c2VkIHRvIGFsbG9jYXRlIHN0cmlwIGJ1ZmZlcnMKKyAqIChhcyB3aWRlIGFzIHRoZSBpbWFnZSwgYnV0IGp1c3QgYSBmZXcgcm93cyBoaWdoKS4gIEZ1bGwtaW1hZ2Utc2l6ZWQgYnVmZmVycworICogYXJlIGhhbmRsZWQgYXMgInZpcnR1YWwiIGFycmF5cy4gIFRoZSBhcnJheSBpcyBzdGlsbCBhY2Nlc3NlZCBhIHN0cmlwIGF0IGEKKyAqIHRpbWUsIGJ1dCB0aGUgbWVtb3J5IG1hbmFnZXIgbXVzdCBzYXZlIHRoZSB3aG9sZSBhcnJheSBmb3IgcmVwZWF0ZWQKKyAqIGFjY2Vzc2VzLiAgVGhlIGludGVuZGVkIGltcGxlbWVudGF0aW9uIGlzIHRoYXQgdGhlcmUgaXMgYSBzdHJpcCBidWZmZXIgaW4KKyAqIG1lbW9yeSAoYXMgaGlnaCBhcyBpcyBwb3NzaWJsZSBnaXZlbiB0aGUgZGVzaXJlZCBtZW1vcnkgbGltaXQpLCBwbHVzIGEKKyAqIGJhY2tpbmcgZmlsZSB0aGF0IGhvbGRzIHRoZSByZXN0IG9mIHRoZSBhcnJheS4KKyAqCisgKiBUaGUgcmVxdWVzdF92aXJ0X2FycmF5IHJvdXRpbmVzIGFyZSB0b2xkIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBpbWFnZSBhbmQKKyAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIHRoYXQgd2lsbCBiZSBhY2Nlc3NlZCBhdCBvbmNlLiAgVGhlIGluLW1lbW9yeQorICogYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIG1heGFjY2VzcyB2YWx1ZS4KKyAqCisgKiBUaGUgcmVxdWVzdCByb3V0aW5lcyBjcmVhdGUgY29udHJvbCBibG9ja3MgYnV0IG5vdCB0aGUgaW4tbWVtb3J5IGJ1ZmZlcnMuCisgKiBUaGF0IGlzIHBvc3Rwb25lZCB1bnRpbCByZWFsaXplX3ZpcnRfYXJyYXlzIGlzIGNhbGxlZC4gIEF0IHRoYXQgdGltZSB0aGUKKyAqIHRvdGFsIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgaXMga25vd24gKGFwcHJveGltYXRlbHksIGFueXdheSksIHNvIGZyZWUKKyAqIG1lbW9yeSBjYW4gYmUgZGl2aWRlZCB1cCBmYWlybHkuCisgKgorICogVGhlIGFjY2Vzc192aXJ0X2FycmF5IHJvdXRpbmVzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIGEgc3BlY2lmaWMgc3RyaXAKKyAqIGFyZWEgYWNjZXNzaWJsZSAoYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIHRoZSBiYWNraW5nIGZpbGUsIGlmIG5lY2Vzc2FyeSkuCisgKiBOb3RlIHRoYXQgdGhlIGFjY2VzcyByb3V0aW5lcyBhcmUgdG9sZCB3aGV0aGVyIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBtb2RpZnkKKyAqIHRoZSBhY2Nlc3NlZCBzdHJpcDsgZHVyaW5nIGEgcmVhZC1vbmx5IHBhc3MgdGhpcyBzYXZlcyBoYXZpbmcgdG8gcmV3cml0ZQorICogZGF0YSB0byBkaXNrLiAgVGhlIGFjY2VzcyByb3V0aW5lcyBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3IgcHJlLXplcm9pbmcKKyAqIGFueSBuZXdseSBhY2Nlc3NlZCByb3dzLCBpZiBwcmUtemVyb2luZyB3YXMgcmVxdWVzdGVkLgorICoKKyAqIEluIGN1cnJlbnQgdXNhZ2UsIHRoZSBhY2Nlc3MgcmVxdWVzdHMgYXJlIHVzdWFsbHkgZm9yIG5vbm92ZXJsYXBwaW5nCisgKiBzdHJpcHM7IHRoYXQgaXMsIHN1Y2Nlc3NpdmUgYWNjZXNzIHN0YXJ0X3JvdyBudW1iZXJzIGRpZmZlciBieSBleGFjdGx5CisgKiBudW1fcm93cyA9IG1heGFjY2Vzcy4gIFRoaXMgbWVhbnMgd2UgY2FuIGdldCBnb29kIHBlcmZvcm1hbmNlIHdpdGggc2ltcGxlCisgKiBidWZmZXIgZHVtcC9yZWxvYWQgbG9naWMsIGJ5IG1ha2luZyB0aGUgaW4tbWVtb3J5IGJ1ZmZlciBiZSBhIG11bHRpcGxlCisgKiBvZiB0aGUgYWNjZXNzIGhlaWdodDsgdGhlbiB0aGVyZSB3aWxsIG5ldmVyIGJlIGFjY2Vzc2VzIGFjcm9zcyBidWZmZXJsb2FkCisgKiBib3VuZGFyaWVzLiAgVGhlIGNvZGUgd2lsbCBzdGlsbCB3b3JrIHdpdGggb3ZlcmxhcHBpbmcgYWNjZXNzIHJlcXVlc3RzLAorICogYnV0IGl0IGRvZXNuJ3QgaGFuZGxlIGJ1ZmZlcmxvYWQgb3ZlcmxhcHMgdmVyeSBlZmZpY2llbnRseS4KKyAqLworCisKK01FVEhPRERFRihqdmlydF9zYXJyYXlfcHRyKQorcmVxdWVzdF92aXJ0X3NhcnJheShqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBib29sZWFuIHByZV96ZXJvLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cywKKyAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpCisvKiBSZXF1ZXN0IGEgdmlydHVhbCAyLUQgc2FtcGxlIGFycmF5ICovCit7CisgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpY2luZm8tPm1lbTsKKyAganZpcnRfc2FycmF5X3B0ciByZXN1bHQ7CisKKyAgLyogT25seSBJTUFHRS1saWZldGltZSB2aXJ0dWFsIGFycmF5cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCAqLworICBpZiAocG9vbF9pZCAhPSBKUE9PTF9JTUFHRSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7IC8qIHNhZmV0eSBjaGVjayAqLworCisgIC8qIGdldCBjb250cm9sIGJsb2NrICovCisgIHJlc3VsdCA9IChqdmlydF9zYXJyYXlfcHRyKWFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sKSk7CisKKyAgcmVzdWx0LT5tZW1fYnVmZmVyID0gTlVMTDsgICAgLyogbWFya3MgYXJyYXkgbm90IHlldCByZWFsaXplZCAqLworICByZXN1bHQtPnJvd3NfaW5fYXJyYXkgPSBudW1yb3dzOworICByZXN1bHQtPnNhbXBsZXNwZXJyb3cgPSBzYW1wbGVzcGVycm93OworICByZXN1bHQtPm1heGFjY2VzcyA9IG1heGFjY2VzczsKKyAgcmVzdWx0LT5wcmVfemVybyA9IHByZV96ZXJvOworICByZXN1bHQtPmJfc19vcGVuID0gRkFMU0U7ICAgICAvKiBubyBhc3NvY2lhdGVkIGJhY2tpbmctc3RvcmUgb2JqZWN0ICovCisgIHJlc3VsdC0+bmV4dCA9IG1lbS0+dmlydF9zYXJyYXlfbGlzdDsgLyogYWRkIHRvIGxpc3Qgb2YgdmlydHVhbCBhcnJheXMgKi8KKyAgbWVtLT52aXJ0X3NhcnJheV9saXN0ID0gcmVzdWx0OworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworTUVUSE9EREVGKGp2aXJ0X2JhcnJheV9wdHIpCityZXF1ZXN0X3ZpcnRfYmFycmF5KGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIGJvb2xlYW4gcHJlX3plcm8sCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gYmxvY2tzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MsCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbWF4YWNjZXNzKQorLyogUmVxdWVzdCBhIHZpcnR1YWwgMi1EIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5ICovCit7CisgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpY2luZm8tPm1lbTsKKyAganZpcnRfYmFycmF5X3B0ciByZXN1bHQ7CisKKyAgLyogT25seSBJTUFHRS1saWZldGltZSB2aXJ0dWFsIGFycmF5cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCAqLworICBpZiAocG9vbF9pZCAhPSBKUE9PTF9JTUFHRSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7IC8qIHNhZmV0eSBjaGVjayAqLworCisgIC8qIGdldCBjb250cm9sIGJsb2NrICovCisgIHJlc3VsdCA9IChqdmlydF9iYXJyYXlfcHRyKWFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sKSk7CisKKyAgcmVzdWx0LT5tZW1fYnVmZmVyID0gTlVMTDsgICAgLyogbWFya3MgYXJyYXkgbm90IHlldCByZWFsaXplZCAqLworICByZXN1bHQtPnJvd3NfaW5fYXJyYXkgPSBudW1yb3dzOworICByZXN1bHQtPmJsb2Nrc3BlcnJvdyA9IGJsb2Nrc3BlcnJvdzsKKyAgcmVzdWx0LT5tYXhhY2Nlc3MgPSBtYXhhY2Nlc3M7CisgIHJlc3VsdC0+cHJlX3plcm8gPSBwcmVfemVybzsKKyAgcmVzdWx0LT5iX3Nfb3BlbiA9IEZBTFNFOyAgICAgLyogbm8gYXNzb2NpYXRlZCBiYWNraW5nLXN0b3JlIG9iamVjdCAqLworICByZXN1bHQtPm5leHQgPSBtZW0tPnZpcnRfYmFycmF5X2xpc3Q7IC8qIGFkZCB0byBsaXN0IG9mIHZpcnR1YWwgYXJyYXlzICovCisgIG1lbS0+dmlydF9iYXJyYXlfbGlzdCA9IHJlc3VsdDsKKworICByZXR1cm4gcmVzdWx0OworfQorCisKK01FVEhPRERFRih2b2lkKQorcmVhbGl6ZV92aXJ0X2FycmF5cyhqX2NvbW1vbl9wdHIgY2luZm8pCisvKiBBbGxvY2F0ZSB0aGUgaW4tbWVtb3J5IGJ1ZmZlcnMgZm9yIGFueSB1bnJlYWxpemVkIHZpcnR1YWwgYXJyYXlzICovCit7CisgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpY2luZm8tPm1lbTsKKyAgc2l6ZV90IHNwYWNlX3Blcl9taW5oZWlnaHQsIG1heGltdW1fc3BhY2UsIGF2YWlsX21lbTsKKyAgc2l6ZV90IG1pbmhlaWdodHMsIG1heF9taW5oZWlnaHRzOworICBqdmlydF9zYXJyYXlfcHRyIHNwdHI7CisgIGp2aXJ0X2JhcnJheV9wdHIgYnB0cjsKKworICAvKiBDb21wdXRlIHRoZSBtaW5pbXVtIHNwYWNlIG5lZWRlZCAobWF4YWNjZXNzIHJvd3MgaW4gZWFjaCBidWZmZXIpCisgICAqIGFuZCB0aGUgbWF4aW11bSBzcGFjZSBuZWVkZWQgKGZ1bGwgaW1hZ2UgaGVpZ2h0IGluIGVhY2ggYnVmZmVyKS4KKyAgICogVGhlc2UgbWF5IGJlIG9mIHVzZSB0byB0aGUgc3lzdGVtLWRlcGVuZGVudCBqcGVnX21lbV9hdmFpbGFibGUgcm91dGluZS4KKyAgICovCisgIHNwYWNlX3Blcl9taW5oZWlnaHQgPSAwOworICBtYXhpbXVtX3NwYWNlID0gMDsKKyAgZm9yIChzcHRyID0gbWVtLT52aXJ0X3NhcnJheV9saXN0OyBzcHRyICE9IE5VTEw7IHNwdHIgPSBzcHRyLT5uZXh0KSB7CisgICAgaWYgKHNwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkgeyAvKiBpZiBub3QgcmVhbGl6ZWQgeWV0ICovCisgICAgICBzaXplX3QgbmV3X3NwYWNlID0gKGxvbmcpc3B0ci0+cm93c19pbl9hcnJheSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpc3B0ci0+c2FtcGxlc3BlcnJvdyAqIHNpemVvZihKU0FNUExFKTsKKworICAgICAgc3BhY2VfcGVyX21pbmhlaWdodCArPSAobG9uZylzcHRyLT5tYXhhY2Nlc3MgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylzcHRyLT5zYW1wbGVzcGVycm93ICogc2l6ZW9mKEpTQU1QTEUpOworICAgICAgaWYgKFNJWkVfTUFYIC0gbWF4aW11bV9zcGFjZSA8IG5ld19zcGFjZSkKKyAgICAgICAgb3V0X29mX21lbW9yeShjaW5mbywgMTApOworICAgICAgbWF4aW11bV9zcGFjZSArPSBuZXdfc3BhY2U7CisgICAgfQorICB9CisgIGZvciAoYnB0ciA9IG1lbS0+dmlydF9iYXJyYXlfbGlzdDsgYnB0ciAhPSBOVUxMOyBicHRyID0gYnB0ci0+bmV4dCkgeworICAgIGlmIChicHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLworICAgICAgc2l6ZV90IG5ld19zcGFjZSA9IChsb25nKWJwdHItPnJvd3NfaW5fYXJyYXkgKgorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWJwdHItPmJsb2Nrc3BlcnJvdyAqIHNpemVvZihKQkxPQ0spOworCisgICAgICBzcGFjZV9wZXJfbWluaGVpZ2h0ICs9IChsb25nKWJwdHItPm1heGFjY2VzcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWJwdHItPmJsb2Nrc3BlcnJvdyAqIHNpemVvZihKQkxPQ0spOworICAgICAgaWYgKFNJWkVfTUFYIC0gbWF4aW11bV9zcGFjZSA8IG5ld19zcGFjZSkKKyAgICAgICAgb3V0X29mX21lbW9yeShjaW5mbywgMTEpOworICAgICAgbWF4aW11bV9zcGFjZSArPSBuZXdfc3BhY2U7CisgICAgfQorICB9CisKKyAgaWYgKHNwYWNlX3Blcl9taW5oZWlnaHQgPD0gMCkKKyAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogbm8gdW5yZWFsaXplZCBhcnJheXMsIG5vIHdvcmsgKi8KKworICAvKiBEZXRlcm1pbmUgYW1vdW50IG9mIG1lbW9yeSB0byBhY3R1YWxseSB1c2U7IHRoaXMgaXMgc3lzdGVtLWRlcGVuZGVudC4gKi8KKyAgYXZhaWxfbWVtID0ganBlZ19tZW1fYXZhaWxhYmxlKGNpbmZvLCBzcGFjZV9wZXJfbWluaGVpZ2h0LCBtYXhpbXVtX3NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQpOworCisgIC8qIElmIHRoZSBtYXhpbXVtIHNwYWNlIG5lZWRlZCBpcyBhdmFpbGFibGUsIG1ha2UgYWxsIHRoZSBidWZmZXJzIGZ1bGwKKyAgICogaGVpZ2h0OyBvdGhlcndpc2UgcGFyY2VsIGl0IG91dCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBtaW5oZWlnaHRzCisgICAqIGluIGVhY2ggYnVmZmVyLgorICAgKi8KKyAgaWYgKGF2YWlsX21lbSA+PSBtYXhpbXVtX3NwYWNlKQorICAgIG1heF9taW5oZWlnaHRzID0gMTAwMDAwMDAwMEw7CisgIGVsc2UgeworICAgIG1heF9taW5oZWlnaHRzID0gYXZhaWxfbWVtIC8gc3BhY2VfcGVyX21pbmhlaWdodDsKKyAgICAvKiBJZiB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgZW5vdWdoIHNwYWNlLCB0cnkgdG8gZ2V0IHRoZSBtaW5pbXVtCisgICAgICogYW55d2F5LiAgVGhpcyBhbGxvd3MgYSAic3R1YiIgaW1wbGVtZW50YXRpb24gb2YganBlZ19tZW1fYXZhaWxhYmxlKCkuCisgICAgICovCisgICAgaWYgKG1heF9taW5oZWlnaHRzIDw9IDApCisgICAgICBtYXhfbWluaGVpZ2h0cyA9IDE7CisgIH0KKworICAvKiBBbGxvY2F0ZSB0aGUgaW4tbWVtb3J5IGJ1ZmZlcnMgYW5kIGluaXRpYWxpemUgYmFja2luZyBzdG9yZSBhcyBuZWVkZWQuICovCisKKyAgZm9yIChzcHRyID0gbWVtLT52aXJ0X3NhcnJheV9saXN0OyBzcHRyICE9IE5VTEw7IHNwdHIgPSBzcHRyLT5uZXh0KSB7CisgICAgaWYgKHNwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkgeyAvKiBpZiBub3QgcmVhbGl6ZWQgeWV0ICovCisgICAgICBtaW5oZWlnaHRzID0gKChsb25nKXNwdHItPnJvd3NfaW5fYXJyYXkgLSAxTCkgLyBzcHRyLT5tYXhhY2Nlc3MgKyAxTDsKKyAgICAgIGlmIChtaW5oZWlnaHRzIDw9IG1heF9taW5oZWlnaHRzKSB7CisgICAgICAgIC8qIFRoaXMgYnVmZmVyIGZpdHMgaW4gbWVtb3J5ICovCisgICAgICAgIHNwdHItPnJvd3NfaW5fbWVtID0gc3B0ci0+cm93c19pbl9hcnJheTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEl0IGRvZXNuJ3QgZml0IGluIG1lbW9yeSwgY3JlYXRlIGJhY2tpbmcgc3RvcmUuICovCisgICAgICAgIHNwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pKG1heF9taW5oZWlnaHRzICogc3B0ci0+bWF4YWNjZXNzKTsKKyAgICAgICAganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoY2luZm8sICZzcHRyLT5iX3NfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpc3B0ci0+cm93c19pbl9hcnJheSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXNwdHItPnNhbXBsZXNwZXJyb3cgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylzaXplb2YoSlNBTVBMRSkpOworICAgICAgICBzcHRyLT5iX3Nfb3BlbiA9IFRSVUU7CisgICAgICB9CisgICAgICBzcHRyLT5tZW1fYnVmZmVyID0gYWxsb2Nfc2FycmF5KGNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B0ci0+c2FtcGxlc3BlcnJvdywgc3B0ci0+cm93c19pbl9tZW0pOworICAgICAgc3B0ci0+cm93c3BlcmNodW5rID0gbWVtLT5sYXN0X3Jvd3NwZXJjaHVuazsKKyAgICAgIHNwdHItPmN1cl9zdGFydF9yb3cgPSAwOworICAgICAgc3B0ci0+Zmlyc3RfdW5kZWZfcm93ID0gMDsKKyAgICAgIHNwdHItPmRpcnR5ID0gRkFMU0U7CisgICAgfQorICB9CisKKyAgZm9yIChicHRyID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyBicHRyICE9IE5VTEw7IGJwdHIgPSBicHRyLT5uZXh0KSB7CisgICAgaWYgKGJwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkgeyAvKiBpZiBub3QgcmVhbGl6ZWQgeWV0ICovCisgICAgICBtaW5oZWlnaHRzID0gKChsb25nKWJwdHItPnJvd3NfaW5fYXJyYXkgLSAxTCkgLyBicHRyLT5tYXhhY2Nlc3MgKyAxTDsKKyAgICAgIGlmIChtaW5oZWlnaHRzIDw9IG1heF9taW5oZWlnaHRzKSB7CisgICAgICAgIC8qIFRoaXMgYnVmZmVyIGZpdHMgaW4gbWVtb3J5ICovCisgICAgICAgIGJwdHItPnJvd3NfaW5fbWVtID0gYnB0ci0+cm93c19pbl9hcnJheTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEl0IGRvZXNuJ3QgZml0IGluIG1lbW9yeSwgY3JlYXRlIGJhY2tpbmcgc3RvcmUuICovCisgICAgICAgIGJwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pKG1heF9taW5oZWlnaHRzICogYnB0ci0+bWF4YWNjZXNzKTsKKyAgICAgICAganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoY2luZm8sICZicHRyLT5iX3NfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpYnB0ci0+cm93c19pbl9hcnJheSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWJwdHItPmJsb2Nrc3BlcnJvdyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXNpemVvZihKQkxPQ0spKTsKKyAgICAgICAgYnB0ci0+Yl9zX29wZW4gPSBUUlVFOworICAgICAgfQorICAgICAgYnB0ci0+bWVtX2J1ZmZlciA9IGFsbG9jX2JhcnJheShjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwdHItPmJsb2Nrc3BlcnJvdywgYnB0ci0+cm93c19pbl9tZW0pOworICAgICAgYnB0ci0+cm93c3BlcmNodW5rID0gbWVtLT5sYXN0X3Jvd3NwZXJjaHVuazsKKyAgICAgIGJwdHItPmN1cl9zdGFydF9yb3cgPSAwOworICAgICAgYnB0ci0+Zmlyc3RfdW5kZWZfcm93ID0gMDsKKyAgICAgIGJwdHItPmRpcnR5ID0gRkFMU0U7CisgICAgfQorICB9Cit9CisKKworTE9DQUwodm9pZCkKK2RvX3NhcnJheV9pbyhqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLCBib29sZWFuIHdyaXRpbmcpCisvKiBEbyBiYWNraW5nIHN0b3JlIHJlYWQgb3Igd3JpdGUgb2YgYSB2aXJ0dWFsIHNhbXBsZSBhcnJheSAqLworeworICBsb25nIGJ5dGVzcGVycm93LCBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCwgcm93cywgdGhpc3JvdywgaTsKKworICBieXRlc3BlcnJvdyA9IChsb25nKXB0ci0+c2FtcGxlc3BlcnJvdyAqIHNpemVvZihKU0FNUExFKTsKKyAgZmlsZV9vZmZzZXQgPSBwdHItPmN1cl9zdGFydF9yb3cgKiBieXRlc3BlcnJvdzsKKyAgLyogTG9vcCB0byByZWFkIG9yIHdyaXRlIGVhY2ggYWxsb2NhdGlvbiBjaHVuayBpbiBtZW1fYnVmZmVyICovCisgIGZvciAoaSA9IDA7IGkgPCAobG9uZylwdHItPnJvd3NfaW5fbWVtOyBpICs9IHB0ci0+cm93c3BlcmNodW5rKSB7CisgICAgLyogT25lIGNodW5rLCBidXQgY2hlY2sgZm9yIHNob3J0IGNodW5rIGF0IGVuZCBvZiBidWZmZXIgKi8KKyAgICByb3dzID0gTUlOKChsb25nKXB0ci0+cm93c3BlcmNodW5rLCAobG9uZylwdHItPnJvd3NfaW5fbWVtIC0gaSk7CisgICAgLyogVHJhbnNmZXIgbm8gbW9yZSB0aGFuIGlzIGN1cnJlbnRseSBkZWZpbmVkICovCisgICAgdGhpc3JvdyA9IChsb25nKXB0ci0+Y3VyX3N0YXJ0X3JvdyArIGk7CisgICAgcm93cyA9IE1JTihyb3dzLCAobG9uZylwdHItPmZpcnN0X3VuZGVmX3JvdyAtIHRoaXNyb3cpOworICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBmaXRzIGluIGZpbGUgKi8KKyAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKXB0ci0+cm93c19pbl9hcnJheSAtIHRoaXNyb3cpOworICAgIGlmIChyb3dzIDw9IDApICAgICAgICAgICAgICAvKiB0aGlzIGNodW5rIG1pZ2h0IGJlIHBhc3QgZW5kIG9mIGZpbGUhICovCisgICAgICBicmVhazsKKyAgICBieXRlX2NvdW50ID0gcm93cyAqIGJ5dGVzcGVycm93OworICAgIGlmICh3cml0aW5nKQorICAgICAgKCpwdHItPmJfc19pbmZvLndyaXRlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJnB0ci0+Yl9zX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopcHRyLT5tZW1fYnVmZmVyW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CisgICAgZWxzZQorICAgICAgKCpwdHItPmJfc19pbmZvLnJlYWRfYmFja2luZ19zdG9yZSkgKGNpbmZvLCAmcHRyLT5iX3NfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXB0ci0+bWVtX2J1ZmZlcltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CisgICAgZmlsZV9vZmZzZXQgKz0gYnl0ZV9jb3VudDsKKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitkb19iYXJyYXlfaW8oal9jb21tb25fcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyIHB0ciwgYm9vbGVhbiB3cml0aW5nKQorLyogRG8gYmFja2luZyBzdG9yZSByZWFkIG9yIHdyaXRlIG9mIGEgdmlydHVhbCBjb2VmZmljaWVudC1ibG9jayBhcnJheSAqLworeworICBsb25nIGJ5dGVzcGVycm93LCBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCwgcm93cywgdGhpc3JvdywgaTsKKworICBieXRlc3BlcnJvdyA9IChsb25nKXB0ci0+YmxvY2tzcGVycm93ICogc2l6ZW9mKEpCTE9DSyk7CisgIGZpbGVfb2Zmc2V0ID0gcHRyLT5jdXJfc3RhcnRfcm93ICogYnl0ZXNwZXJyb3c7CisgIC8qIExvb3AgdG8gcmVhZCBvciB3cml0ZSBlYWNoIGFsbG9jYXRpb24gY2h1bmsgaW4gbWVtX2J1ZmZlciAqLworICBmb3IgKGkgPSAwOyBpIDwgKGxvbmcpcHRyLT5yb3dzX2luX21lbTsgaSArPSBwdHItPnJvd3NwZXJjaHVuaykgeworICAgIC8qIE9uZSBjaHVuaywgYnV0IGNoZWNrIGZvciBzaG9ydCBjaHVuayBhdCBlbmQgb2YgYnVmZmVyICovCisgICAgcm93cyA9IE1JTigobG9uZylwdHItPnJvd3NwZXJjaHVuaywgKGxvbmcpcHRyLT5yb3dzX2luX21lbSAtIGkpOworICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBpcyBjdXJyZW50bHkgZGVmaW5lZCAqLworICAgIHRoaXNyb3cgPSAobG9uZylwdHItPmN1cl9zdGFydF9yb3cgKyBpOworICAgIHJvd3MgPSBNSU4ocm93cywgKGxvbmcpcHRyLT5maXJzdF91bmRlZl9yb3cgLSB0aGlzcm93KTsKKyAgICAvKiBUcmFuc2ZlciBubyBtb3JlIHRoYW4gZml0cyBpbiBmaWxlICovCisgICAgcm93cyA9IE1JTihyb3dzLCAobG9uZylwdHItPnJvd3NfaW5fYXJyYXkgLSB0aGlzcm93KTsKKyAgICBpZiAocm93cyA8PSAwKSAgICAgICAgICAgICAgLyogdGhpcyBjaHVuayBtaWdodCBiZSBwYXN0IGVuZCBvZiBmaWxlISAqLworICAgICAgYnJlYWs7CisgICAgYnl0ZV9jb3VudCA9IHJvd3MgKiBieXRlc3BlcnJvdzsKKyAgICBpZiAod3JpdGluZykKKyAgICAgICgqcHRyLT5iX3NfaW5mby53cml0ZV9iYWNraW5nX3N0b3JlKSAoY2luZm8sICZwdHItPmJfc19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXB0ci0+bWVtX2J1ZmZlcltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOworICAgIGVsc2UKKyAgICAgICgqcHRyLT5iX3NfaW5mby5yZWFkX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJnB0ci0+Yl9zX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilwdHItPm1lbV9idWZmZXJbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOworICAgIGZpbGVfb2Zmc2V0ICs9IGJ5dGVfY291bnQ7CisgIH0KK30KKworCitNRVRIT0RERUYoSlNBTVBBUlJBWSkKK2FjY2Vzc192aXJ0X3NhcnJheShqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIG51bV9yb3dzLCBib29sZWFuIHdyaXRhYmxlKQorLyogQWNjZXNzIHRoZSBwYXJ0IG9mIGEgdmlydHVhbCBzYW1wbGUgYXJyYXkgc3RhcnRpbmcgYXQgc3RhcnRfcm93ICovCisvKiBhbmQgZXh0ZW5kaW5nIGZvciBudW1fcm93cyByb3dzLiAgd3JpdGFibGUgaXMgdHJ1ZSBpZiAgKi8KKy8qIGNhbGxlciBpbnRlbmRzIHRvIG1vZGlmeSB0aGUgYWNjZXNzZWQgYXJlYS4gKi8KK3sKKyAgSkRJTUVOU0lPTiBlbmRfcm93ID0gc3RhcnRfcm93ICsgbnVtX3Jvd3M7CisgIEpESU1FTlNJT04gdW5kZWZfcm93OworCisgIC8qIGRlYnVnZ2luZyBjaGVjayAqLworICBpZiAoZW5kX3JvdyA+IHB0ci0+cm93c19pbl9hcnJheSB8fCBudW1fcm93cyA+IHB0ci0+bWF4YWNjZXNzIHx8CisgICAgICBwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisKKyAgLyogTWFrZSB0aGUgZGVzaXJlZCBwYXJ0IG9mIHRoZSB2aXJ0dWFsIGFycmF5IGFjY2Vzc2libGUgKi8KKyAgaWYgKHN0YXJ0X3JvdyA8IHB0ci0+Y3VyX3N0YXJ0X3JvdyB8fAorICAgICAgZW5kX3JvdyA+IHB0ci0+Y3VyX3N0YXJ0X3JvdyArIHB0ci0+cm93c19pbl9tZW0pIHsKKyAgICBpZiAoIXB0ci0+Yl9zX29wZW4pCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1ZJUlRVQUxfQlVHKTsKKyAgICAvKiBGbHVzaCBvbGQgYnVmZmVyIGNvbnRlbnRzIGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChwdHItPmRpcnR5KSB7CisgICAgICBkb19zYXJyYXlfaW8oY2luZm8sIHB0ciwgVFJVRSk7CisgICAgICBwdHItPmRpcnR5ID0gRkFMU0U7CisgICAgfQorICAgIC8qIERlY2lkZSB3aGF0IHBhcnQgb2YgdmlydHVhbCBhcnJheSB0byBhY2Nlc3MuCisgICAgICogQWxnb3JpdGhtOiBpZiB0YXJnZXQgYWRkcmVzcyA+IGN1cnJlbnQgd2luZG93LCBhc3N1bWUgZm9yd2FyZCBzY2FuLAorICAgICAqIGxvYWQgc3RhcnRpbmcgYXQgdGFyZ2V0IGFkZHJlc3MuICBJZiB0YXJnZXQgYWRkcmVzcyA8IGN1cnJlbnQgd2luZG93LAorICAgICAqIGFzc3VtZSBiYWNrd2FyZCBzY2FuLCBsb2FkIHNvIHRoYXQgdGFyZ2V0IGFyZWEgaXMgdG9wIG9mIHdpbmRvdy4KKyAgICAgKiBOb3RlIHRoYXQgd2hlbiBzd2l0Y2hpbmcgZnJvbSBmb3J3YXJkIHdyaXRlIHRvIGZvcndhcmQgcmVhZCwgd2lsbCBoYXZlCisgICAgICogc3RhcnRfcm93ID0gMCwgc28gdGhlIGxpbWl0aW5nIGNhc2UgYXBwbGllcyBhbmQgd2UgbG9hZCBmcm9tIDAgYW55d2F5LgorICAgICAqLworICAgIGlmIChzdGFydF9yb3cgPiBwdHItPmN1cl9zdGFydF9yb3cpIHsKKyAgICAgIHB0ci0+Y3VyX3N0YXJ0X3JvdyA9IHN0YXJ0X3JvdzsKKyAgICB9IGVsc2UgeworICAgICAgLyogdXNlIGxvbmcgYXJpdGhtZXRpYyBoZXJlIHRvIGF2b2lkIG92ZXJmbG93ICYgdW5zaWduZWQgcHJvYmxlbXMgKi8KKyAgICAgIGxvbmcgbHRlbXA7CisKKyAgICAgIGx0ZW1wID0gKGxvbmcpZW5kX3JvdyAtIChsb25nKXB0ci0+cm93c19pbl9tZW07CisgICAgICBpZiAobHRlbXAgPCAwKQorICAgICAgICBsdGVtcCA9IDA7ICAgICAgICAgICAgICAvKiBkb24ndCBmYWxsIG9mZiBmcm9udCBlbmQgb2YgZmlsZSAqLworICAgICAgcHRyLT5jdXJfc3RhcnRfcm93ID0gKEpESU1FTlNJT04pbHRlbXA7CisgICAgfQorICAgIC8qIFJlYWQgaW4gdGhlIHNlbGVjdGVkIHBhcnQgb2YgdGhlIGFycmF5LgorICAgICAqIER1cmluZyB0aGUgaW5pdGlhbCB3cml0ZSBwYXNzLCB3ZSB3aWxsIGRvIG5vIGFjdHVhbCByZWFkCisgICAgICogYmVjYXVzZSB0aGUgc2VsZWN0ZWQgcGFydCBpcyBhbGwgdW5kZWZpbmVkLgorICAgICAqLworICAgIGRvX3NhcnJheV9pbyhjaW5mbywgcHRyLCBGQUxTRSk7CisgIH0KKyAgLyogRW5zdXJlIHRoZSBhY2Nlc3NlZCBwYXJ0IG9mIHRoZSBhcnJheSBpcyBkZWZpbmVkOyBwcmV6ZXJvIGlmIG5lZWRlZC4KKyAgICogVG8gaW1wcm92ZSBsb2NhbGl0eSBvZiBhY2Nlc3MsIHdlIG9ubHkgcHJlemVybyB0aGUgcGFydCBvZiB0aGUgYXJyYXkKKyAgICogdGhhdCB0aGUgY2FsbGVyIGlzIGFib3V0IHRvIGFjY2Vzcywgbm90IHRoZSBlbnRpcmUgaW4tbWVtb3J5IGFycmF5LgorICAgKi8KKyAgaWYgKHB0ci0+Zmlyc3RfdW5kZWZfcm93IDwgZW5kX3JvdykgeworICAgIGlmIChwdHItPmZpcnN0X3VuZGVmX3JvdyA8IHN0YXJ0X3JvdykgeworICAgICAgaWYgKHdyaXRhYmxlKSAgICAgICAgICAgICAvKiB3cml0ZXIgc2tpcHBlZCBvdmVyIGEgc2VjdGlvbiBvZiBhcnJheSAqLworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisgICAgICB1bmRlZl9yb3cgPSBzdGFydF9yb3c7ICAgIC8qIGJ1dCByZWFkZXIgaXMgYWxsb3dlZCB0byByZWFkIGFoZWFkICovCisgICAgfSBlbHNlIHsKKyAgICAgIHVuZGVmX3JvdyA9IHB0ci0+Zmlyc3RfdW5kZWZfcm93OworICAgIH0KKyAgICBpZiAod3JpdGFibGUpCisgICAgICBwdHItPmZpcnN0X3VuZGVmX3JvdyA9IGVuZF9yb3c7CisgICAgaWYgKHB0ci0+cHJlX3plcm8pIHsKKyAgICAgIHNpemVfdCBieXRlc3BlcnJvdyA9IChzaXplX3QpcHRyLT5zYW1wbGVzcGVycm93ICogc2l6ZW9mKEpTQU1QTEUpOworICAgICAgdW5kZWZfcm93IC09IHB0ci0+Y3VyX3N0YXJ0X3JvdzsgLyogbWFrZSBpbmRleGVzIHJlbGF0aXZlIHRvIGJ1ZmZlciAqLworICAgICAgZW5kX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7CisgICAgICB3aGlsZSAodW5kZWZfcm93IDwgZW5kX3JvdykgeworICAgICAgICBqemVyb19mYXIoKHZvaWQgKilwdHItPm1lbV9idWZmZXJbdW5kZWZfcm93XSwgYnl0ZXNwZXJyb3cpOworICAgICAgICB1bmRlZl9yb3crKzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKCF3cml0YWJsZSkgICAgICAgICAgICAvKiByZWFkZXIgbG9va2luZyBhdCB1bmRlZmluZWQgZGF0YSAqLworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisgICAgfQorICB9CisgIC8qIEZsYWcgdGhlIGJ1ZmZlciBkaXJ0eSBpZiBjYWxsZXIgd2lsbCB3cml0ZSBpbiBpdCAqLworICBpZiAod3JpdGFibGUpCisgICAgcHRyLT5kaXJ0eSA9IFRSVUU7CisgIC8qIFJldHVybiBhZGRyZXNzIG9mIHByb3BlciBwYXJ0IG9mIHRoZSBidWZmZXIgKi8KKyAgcmV0dXJuIHB0ci0+bWVtX2J1ZmZlciArIChzdGFydF9yb3cgLSBwdHItPmN1cl9zdGFydF9yb3cpOworfQorCisKK01FVEhPRERFRihKQkxPQ0tBUlJBWSkKK2FjY2Vzc192aXJ0X2JhcnJheShqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X2JhcnJheV9wdHIgcHRyLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIG51bV9yb3dzLCBib29sZWFuIHdyaXRhYmxlKQorLyogQWNjZXNzIHRoZSBwYXJ0IG9mIGEgdmlydHVhbCBibG9jayBhcnJheSBzdGFydGluZyBhdCBzdGFydF9yb3cgKi8KKy8qIGFuZCBleHRlbmRpbmcgZm9yIG51bV9yb3dzIHJvd3MuICB3cml0YWJsZSBpcyB0cnVlIGlmICAqLworLyogY2FsbGVyIGludGVuZHMgdG8gbW9kaWZ5IHRoZSBhY2Nlc3NlZCBhcmVhLiAqLworeworICBKRElNRU5TSU9OIGVuZF9yb3cgPSBzdGFydF9yb3cgKyBudW1fcm93czsKKyAgSkRJTUVOU0lPTiB1bmRlZl9yb3c7CisKKyAgLyogZGVidWdnaW5nIGNoZWNrICovCisgIGlmIChlbmRfcm93ID4gcHRyLT5yb3dzX2luX2FycmF5IHx8IG51bV9yb3dzID4gcHRyLT5tYXhhY2Nlc3MgfHwKKyAgICAgIHB0ci0+bWVtX2J1ZmZlciA9PSBOVUxMKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKKworICAvKiBNYWtlIHRoZSBkZXNpcmVkIHBhcnQgb2YgdGhlIHZpcnR1YWwgYXJyYXkgYWNjZXNzaWJsZSAqLworICBpZiAoc3RhcnRfcm93IDwgcHRyLT5jdXJfc3RhcnRfcm93IHx8CisgICAgICBlbmRfcm93ID4gcHRyLT5jdXJfc3RhcnRfcm93ICsgcHRyLT5yb3dzX2luX21lbSkgeworICAgIGlmICghcHRyLT5iX3Nfb3BlbikKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVklSVFVBTF9CVUcpOworICAgIC8qIEZsdXNoIG9sZCBidWZmZXIgY29udGVudHMgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKHB0ci0+ZGlydHkpIHsKKyAgICAgIGRvX2JhcnJheV9pbyhjaW5mbywgcHRyLCBUUlVFKTsKKyAgICAgIHB0ci0+ZGlydHkgPSBGQUxTRTsKKyAgICB9CisgICAgLyogRGVjaWRlIHdoYXQgcGFydCBvZiB2aXJ0dWFsIGFycmF5IHRvIGFjY2Vzcy4KKyAgICAgKiBBbGdvcml0aG06IGlmIHRhcmdldCBhZGRyZXNzID4gY3VycmVudCB3aW5kb3csIGFzc3VtZSBmb3J3YXJkIHNjYW4sCisgICAgICogbG9hZCBzdGFydGluZyBhdCB0YXJnZXQgYWRkcmVzcy4gIElmIHRhcmdldCBhZGRyZXNzIDwgY3VycmVudCB3aW5kb3csCisgICAgICogYXNzdW1lIGJhY2t3YXJkIHNjYW4sIGxvYWQgc28gdGhhdCB0YXJnZXQgYXJlYSBpcyB0b3Agb2Ygd2luZG93LgorICAgICAqIE5vdGUgdGhhdCB3aGVuIHN3aXRjaGluZyBmcm9tIGZvcndhcmQgd3JpdGUgdG8gZm9yd2FyZCByZWFkLCB3aWxsIGhhdmUKKyAgICAgKiBzdGFydF9yb3cgPSAwLCBzbyB0aGUgbGltaXRpbmcgY2FzZSBhcHBsaWVzIGFuZCB3ZSBsb2FkIGZyb20gMCBhbnl3YXkuCisgICAgICovCisgICAgaWYgKHN0YXJ0X3JvdyA+IHB0ci0+Y3VyX3N0YXJ0X3JvdykgeworICAgICAgcHRyLT5jdXJfc3RhcnRfcm93ID0gc3RhcnRfcm93OworICAgIH0gZWxzZSB7CisgICAgICAvKiB1c2UgbG9uZyBhcml0aG1ldGljIGhlcmUgdG8gYXZvaWQgb3ZlcmZsb3cgJiB1bnNpZ25lZCBwcm9ibGVtcyAqLworICAgICAgbG9uZyBsdGVtcDsKKworICAgICAgbHRlbXAgPSAobG9uZyllbmRfcm93IC0gKGxvbmcpcHRyLT5yb3dzX2luX21lbTsKKyAgICAgIGlmIChsdGVtcCA8IDApCisgICAgICAgIGx0ZW1wID0gMDsgICAgICAgICAgICAgIC8qIGRvbid0IGZhbGwgb2ZmIGZyb250IGVuZCBvZiBmaWxlICovCisgICAgICBwdHItPmN1cl9zdGFydF9yb3cgPSAoSkRJTUVOU0lPTilsdGVtcDsKKyAgICB9CisgICAgLyogUmVhZCBpbiB0aGUgc2VsZWN0ZWQgcGFydCBvZiB0aGUgYXJyYXkuCisgICAgICogRHVyaW5nIHRoZSBpbml0aWFsIHdyaXRlIHBhc3MsIHdlIHdpbGwgZG8gbm8gYWN0dWFsIHJlYWQKKyAgICAgKiBiZWNhdXNlIHRoZSBzZWxlY3RlZCBwYXJ0IGlzIGFsbCB1bmRlZmluZWQuCisgICAgICovCisgICAgZG9fYmFycmF5X2lvKGNpbmZvLCBwdHIsIEZBTFNFKTsKKyAgfQorICAvKiBFbnN1cmUgdGhlIGFjY2Vzc2VkIHBhcnQgb2YgdGhlIGFycmF5IGlzIGRlZmluZWQ7IHByZXplcm8gaWYgbmVlZGVkLgorICAgKiBUbyBpbXByb3ZlIGxvY2FsaXR5IG9mIGFjY2Vzcywgd2Ugb25seSBwcmV6ZXJvIHRoZSBwYXJ0IG9mIHRoZSBhcnJheQorICAgKiB0aGF0IHRoZSBjYWxsZXIgaXMgYWJvdXQgdG8gYWNjZXNzLCBub3QgdGhlIGVudGlyZSBpbi1tZW1vcnkgYXJyYXkuCisgICAqLworICBpZiAocHRyLT5maXJzdF91bmRlZl9yb3cgPCBlbmRfcm93KSB7CisgICAgaWYgKHB0ci0+Zmlyc3RfdW5kZWZfcm93IDwgc3RhcnRfcm93KSB7CisgICAgICBpZiAod3JpdGFibGUpICAgICAgICAgICAgIC8qIHdyaXRlciBza2lwcGVkIG92ZXIgYSBzZWN0aW9uIG9mIGFycmF5ICovCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKKyAgICAgIHVuZGVmX3JvdyA9IHN0YXJ0X3JvdzsgICAgLyogYnV0IHJlYWRlciBpcyBhbGxvd2VkIHRvIHJlYWQgYWhlYWQgKi8KKyAgICB9IGVsc2UgeworICAgICAgdW5kZWZfcm93ID0gcHRyLT5maXJzdF91bmRlZl9yb3c7CisgICAgfQorICAgIGlmICh3cml0YWJsZSkKKyAgICAgIHB0ci0+Zmlyc3RfdW5kZWZfcm93ID0gZW5kX3JvdzsKKyAgICBpZiAocHRyLT5wcmVfemVybykgeworICAgICAgc2l6ZV90IGJ5dGVzcGVycm93ID0gKHNpemVfdClwdHItPmJsb2Nrc3BlcnJvdyAqIHNpemVvZihKQkxPQ0spOworICAgICAgdW5kZWZfcm93IC09IHB0ci0+Y3VyX3N0YXJ0X3JvdzsgLyogbWFrZSBpbmRleGVzIHJlbGF0aXZlIHRvIGJ1ZmZlciAqLworICAgICAgZW5kX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7CisgICAgICB3aGlsZSAodW5kZWZfcm93IDwgZW5kX3JvdykgeworICAgICAgICBqemVyb19mYXIoKHZvaWQgKilwdHItPm1lbV9idWZmZXJbdW5kZWZfcm93XSwgYnl0ZXNwZXJyb3cpOworICAgICAgICB1bmRlZl9yb3crKzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKCF3cml0YWJsZSkgICAgICAgICAgICAvKiByZWFkZXIgbG9va2luZyBhdCB1bmRlZmluZWQgZGF0YSAqLworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisgICAgfQorICB9CisgIC8qIEZsYWcgdGhlIGJ1ZmZlciBkaXJ0eSBpZiBjYWxsZXIgd2lsbCB3cml0ZSBpbiBpdCAqLworICBpZiAod3JpdGFibGUpCisgICAgcHRyLT5kaXJ0eSA9IFRSVUU7CisgIC8qIFJldHVybiBhZGRyZXNzIG9mIHByb3BlciBwYXJ0IG9mIHRoZSBidWZmZXIgKi8KKyAgcmV0dXJuIHB0ci0+bWVtX2J1ZmZlciArIChzdGFydF9yb3cgLSBwdHItPmN1cl9zdGFydF9yb3cpOworfQorCisKKy8qCisgKiBSZWxlYXNlIGFsbCBvYmplY3RzIGJlbG9uZ2luZyB0byBhIHNwZWNpZmllZCBwb29sLgorICovCisKK01FVEhPRERFRih2b2lkKQorZnJlZV9wb29sKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQpCit7CisgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpY2luZm8tPm1lbTsKKyAgc21hbGxfcG9vbF9wdHIgc2hkcl9wdHI7CisgIGxhcmdlX3Bvb2xfcHRyIGxoZHJfcHRyOworICBzaXplX3Qgc3BhY2VfZnJlZWQ7CisKKyAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOyAvKiBzYWZldHkgY2hlY2sgKi8KKworI2lmZGVmIE1FTV9TVEFUUworICBpZiAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPiAxKQorICAgIHByaW50X21lbV9zdGF0cyhjaW5mbywgcG9vbF9pZCk7IC8qIHByaW50IHBvb2wncyBtZW1vcnkgdXNhZ2Ugc3RhdGlzdGljcyAqLworI2VuZGlmCisKKyAgLyogSWYgZnJlZWluZyBJTUFHRSBwb29sLCBjbG9zZSBhbnkgdmlydHVhbCBhcnJheXMgZmlyc3QgKi8KKyAgaWYgKHBvb2xfaWQgPT0gSlBPT0xfSU1BR0UpIHsKKyAgICBqdmlydF9zYXJyYXlfcHRyIHNwdHI7CisgICAganZpcnRfYmFycmF5X3B0ciBicHRyOworCisgICAgZm9yIChzcHRyID0gbWVtLT52aXJ0X3NhcnJheV9saXN0OyBzcHRyICE9IE5VTEw7IHNwdHIgPSBzcHRyLT5uZXh0KSB7CisgICAgICBpZiAoc3B0ci0+Yl9zX29wZW4pIHsgICAgIC8qIHRoZXJlIG1heSBiZSBubyBiYWNraW5nIHN0b3JlICovCisgICAgICAgIHNwdHItPmJfc19vcGVuID0gRkFMU0U7IC8qIHByZXZlbnQgcmVjdXJzaXZlIGNsb3NlIGlmIGVycm9yICovCisgICAgICAgICgqc3B0ci0+Yl9zX2luZm8uY2xvc2VfYmFja2luZ19zdG9yZSkgKGNpbmZvLCAmc3B0ci0+Yl9zX2luZm8pOworICAgICAgfQorICAgIH0KKyAgICBtZW0tPnZpcnRfc2FycmF5X2xpc3QgPSBOVUxMOworICAgIGZvciAoYnB0ciA9IG1lbS0+dmlydF9iYXJyYXlfbGlzdDsgYnB0ciAhPSBOVUxMOyBicHRyID0gYnB0ci0+bmV4dCkgeworICAgICAgaWYgKGJwdHItPmJfc19vcGVuKSB7ICAgICAvKiB0aGVyZSBtYXkgYmUgbm8gYmFja2luZyBzdG9yZSAqLworICAgICAgICBicHRyLT5iX3Nfb3BlbiA9IEZBTFNFOyAvKiBwcmV2ZW50IHJlY3Vyc2l2ZSBjbG9zZSBpZiBlcnJvciAqLworICAgICAgICAoKmJwdHItPmJfc19pbmZvLmNsb3NlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJmJwdHItPmJfc19pbmZvKTsKKyAgICAgIH0KKyAgICB9CisgICAgbWVtLT52aXJ0X2JhcnJheV9saXN0ID0gTlVMTDsKKyAgfQorCisgIC8qIFJlbGVhc2UgbGFyZ2Ugb2JqZWN0cyAqLworICBsaGRyX3B0ciA9IG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXTsKKyAgbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdID0gTlVMTDsKKworICB3aGlsZSAobGhkcl9wdHIgIT0gTlVMTCkgeworICAgIGxhcmdlX3Bvb2xfcHRyIG5leHRfbGhkcl9wdHIgPSBsaGRyX3B0ci0+bmV4dDsKKyAgICBzcGFjZV9mcmVlZCA9IGxoZHJfcHRyLT5ieXRlc191c2VkICsKKyAgICAgICAgICAgICAgICAgIGxoZHJfcHRyLT5ieXRlc19sZWZ0ICsKKyAgICAgICAgICAgICAgICAgIHNpemVvZihsYXJnZV9wb29sX2hkcik7CisgICAganBlZ19mcmVlX2xhcmdlKGNpbmZvLCAodm9pZCAqKWxoZHJfcHRyLCBzcGFjZV9mcmVlZCk7CisgICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgLT0gc3BhY2VfZnJlZWQ7CisgICAgbGhkcl9wdHIgPSBuZXh0X2xoZHJfcHRyOworICB9CisKKyAgLyogUmVsZWFzZSBzbWFsbCBvYmplY3RzICovCisgIHNoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOworICBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF0gPSBOVUxMOworCisgIHdoaWxlIChzaGRyX3B0ciAhPSBOVUxMKSB7CisgICAgc21hbGxfcG9vbF9wdHIgbmV4dF9zaGRyX3B0ciA9IHNoZHJfcHRyLT5uZXh0OworICAgIHNwYWNlX2ZyZWVkID0gc2hkcl9wdHItPmJ5dGVzX3VzZWQgKyBzaGRyX3B0ci0+Ynl0ZXNfbGVmdCArCisgICAgICAgICAgICAgICAgICBzaXplb2Yoc21hbGxfcG9vbF9oZHIpOworICAgIGpwZWdfZnJlZV9zbWFsbChjaW5mbywgKHZvaWQgKilzaGRyX3B0ciwgc3BhY2VfZnJlZWQpOworICAgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkIC09IHNwYWNlX2ZyZWVkOworICAgIHNoZHJfcHRyID0gbmV4dF9zaGRyX3B0cjsKKyAgfQorfQorCisKKy8qCisgKiBDbG9zZSB1cCBzaG9wIGVudGlyZWx5LgorICogTm90ZSB0aGF0IHRoaXMgY2Fubm90IGJlIGNhbGxlZCB1bmxlc3MgY2luZm8tPm1lbSBpcyBub24tTlVMTC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3NlbGZfZGVzdHJ1Y3Qoal9jb21tb25fcHRyIGNpbmZvKQoreworICBpbnQgcG9vbDsKKworICAvKiBDbG9zZSBhbGwgYmFja2luZyBzdG9yZSwgcmVsZWFzZSBhbGwgbWVtb3J5LgorICAgKiBSZWxlYXNpbmcgcG9vbHMgaW4gcmV2ZXJzZSBvcmRlciBtaWdodCBoZWxwIGF2b2lkIGZyYWdtZW50YXRpb24KKyAgICogd2l0aCBzb21lIChicmFpbi1kYW1hZ2VkKSBtYWxsb2MgbGlicmFyaWVzLgorICAgKi8KKyAgZm9yIChwb29sID0gSlBPT0xfTlVNUE9PTFMgLSAxOyBwb29sID49IEpQT09MX1BFUk1BTkVOVDsgcG9vbC0tKSB7CisgICAgZnJlZV9wb29sKGNpbmZvLCBwb29sKTsKKyAgfQorCisgIC8qIFJlbGVhc2UgdGhlIG1lbW9yeSBtYW5hZ2VyIGNvbnRyb2wgYmxvY2sgdG9vLiAqLworICBqcGVnX2ZyZWVfc21hbGwoY2luZm8sICh2b2lkICopY2luZm8tPm1lbSwgc2l6ZW9mKG15X21lbW9yeV9tZ3IpKTsKKyAgY2luZm8tPm1lbSA9IE5VTEw7ICAgICAgICAgICAgLyogZW5zdXJlcyBJIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSAqLworCisgIGpwZWdfbWVtX3Rlcm0oY2luZm8pOyAgICAgICAgIC8qIHN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCAqLworfQorCisKKy8qCisgKiBNZW1vcnkgbWFuYWdlciBpbml0aWFsaXphdGlvbi4KKyAqIFdoZW4gdGhpcyBpcyBjYWxsZWQsIG9ubHkgdGhlIGVycm9yIG1hbmFnZXIgcG9pbnRlciBpcyB2YWxpZCBpbiBjaW5mbyEKKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X21lbW9yeV9tZ3Ioal9jb21tb25fcHRyIGNpbmZvKQoreworICBteV9tZW1fcHRyIG1lbTsKKyAgbG9uZyBtYXhfdG9fdXNlOworICBpbnQgcG9vbDsKKyAgc2l6ZV90IHRlc3RfbWFjOworCisgIGNpbmZvLT5tZW0gPSBOVUxMOyAgICAgICAgICAgIC8qIGZvciBzYWZldHkgaWYgaW5pdCBmYWlscyAqLworCisgIC8qIENoZWNrIGZvciBjb25maWd1cmF0aW9uIGVycm9ycy4KKyAgICogc2l6ZW9mKEFMSUdOX1RZUEUpIHNob3VsZCBiZSBhIHBvd2VyIG9mIDI7IG90aGVyd2lzZSwgaXQgcHJvYmFibHkKKyAgICogZG9lc24ndCByZWZsZWN0IGFueSByZWFsIGhhcmR3YXJlIGFsaWdubWVudCByZXF1aXJlbWVudC4KKyAgICogVGhlIHRlc3QgaXMgYSBsaXR0bGUgdHJpY2t5OiBmb3IgWD4wLCBYIGFuZCBYLTEgaGF2ZSBubyBvbmUtYml0cworICAgKiBpbiBjb21tb24gaWYgYW5kIG9ubHkgaWYgWCBpcyBhIHBvd2VyIG9mIDIsIGllIGhhcyBvbmx5IG9uZSBvbmUtYml0LgorICAgKiBTb21lIGNvbXBpbGVycyBtYXkgZ2l2ZSBhbiAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBoZXJlOyBpZ25vcmUgaXQuCisgICAqLworICBpZiAoKEFMSUdOX1NJWkUgJiAoQUxJR05fU0laRSAtIDEpKSAhPSAwKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0FMSUdOX1RZUEUpOworICAvKiBNQVhfQUxMT0NfQ0hVTksgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIHR5cGUgc2l6ZV90LCBhbmQgbXVzdCBiZQorICAgKiBhIG11bHRpcGxlIG9mIEFMSUdOX1NJWkUuCisgICAqIEFnYWluLCBhbiAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBtYXkgYmUgaWdub3JlZCBoZXJlLgorICAgKiBCdXQgYSAiY29uc3RhbnQgdG9vIGxhcmdlIiB3YXJuaW5nIG1lYW5zIHlvdSBuZWVkIHRvIGZpeCBNQVhfQUxMT0NfQ0hVTksuCisgICAqLworICB0ZXN0X21hYyA9IChzaXplX3QpTUFYX0FMTE9DX0NIVU5LOworICBpZiAoKGxvbmcpdGVzdF9tYWMgIT0gTUFYX0FMTE9DX0NIVU5LIHx8CisgICAgICAoTUFYX0FMTE9DX0NIVU5LICUgQUxJR05fU0laRSkgIT0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9BTExPQ19DSFVOSyk7CisKKyAgbWF4X3RvX3VzZSA9IGpwZWdfbWVtX2luaXQoY2luZm8pOyAvKiBzeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uICovCisKKyAgLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBtZW1vcnkgbWFuYWdlcidzIGNvbnRyb2wgYmxvY2sgKi8KKyAgbWVtID0gKG15X21lbV9wdHIpanBlZ19nZXRfc21hbGwoY2luZm8sIHNpemVvZihteV9tZW1vcnlfbWdyKSk7CisKKyAgaWYgKG1lbSA9PSBOVUxMKSB7CisgICAganBlZ19tZW1fdGVybShjaW5mbyk7ICAgICAgIC8qIHN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIDApOworICB9CisKKyAgLyogT0ssIGZpbGwgaW4gdGhlIG1ldGhvZCBwb2ludGVycyAqLworICBtZW0tPnB1Yi5hbGxvY19zbWFsbCA9IGFsbG9jX3NtYWxsOworICBtZW0tPnB1Yi5hbGxvY19sYXJnZSA9IGFsbG9jX2xhcmdlOworICBtZW0tPnB1Yi5hbGxvY19zYXJyYXkgPSBhbGxvY19zYXJyYXk7CisgIG1lbS0+cHViLmFsbG9jX2JhcnJheSA9IGFsbG9jX2JhcnJheTsKKyAgbWVtLT5wdWIucmVxdWVzdF92aXJ0X3NhcnJheSA9IHJlcXVlc3RfdmlydF9zYXJyYXk7CisgIG1lbS0+cHViLnJlcXVlc3RfdmlydF9iYXJyYXkgPSByZXF1ZXN0X3ZpcnRfYmFycmF5OworICBtZW0tPnB1Yi5yZWFsaXplX3ZpcnRfYXJyYXlzID0gcmVhbGl6ZV92aXJ0X2FycmF5czsKKyAgbWVtLT5wdWIuYWNjZXNzX3ZpcnRfc2FycmF5ID0gYWNjZXNzX3ZpcnRfc2FycmF5OworICBtZW0tPnB1Yi5hY2Nlc3NfdmlydF9iYXJyYXkgPSBhY2Nlc3NfdmlydF9iYXJyYXk7CisgIG1lbS0+cHViLmZyZWVfcG9vbCA9IGZyZWVfcG9vbDsKKyAgbWVtLT5wdWIuc2VsZl9kZXN0cnVjdCA9IHNlbGZfZGVzdHJ1Y3Q7CisKKyAgLyogTWFrZSBNQVhfQUxMT0NfQ0hVTksgYWNjZXNzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCisgIG1lbS0+cHViLm1heF9hbGxvY19jaHVuayA9IE1BWF9BTExPQ19DSFVOSzsKKworICAvKiBJbml0aWFsaXplIHdvcmtpbmcgc3RhdGUgKi8KKyAgbWVtLT5wdWIubWF4X21lbW9yeV90b191c2UgPSBtYXhfdG9fdXNlOworCisgIGZvciAocG9vbCA9IEpQT09MX05VTVBPT0xTIC0gMTsgcG9vbCA+PSBKUE9PTF9QRVJNQU5FTlQ7IHBvb2wtLSkgeworICAgIG1lbS0+c21hbGxfbGlzdFtwb29sXSA9IE5VTEw7CisgICAgbWVtLT5sYXJnZV9saXN0W3Bvb2xdID0gTlVMTDsKKyAgfQorICBtZW0tPnZpcnRfc2FycmF5X2xpc3QgPSBOVUxMOworICBtZW0tPnZpcnRfYmFycmF5X2xpc3QgPSBOVUxMOworCisgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkID0gc2l6ZW9mKG15X21lbW9yeV9tZ3IpOworCisgIC8qIERlY2xhcmUgb3Vyc2VsdmVzIG9wZW4gZm9yIGJ1c2luZXNzICovCisgIGNpbmZvLT5tZW0gPSAmbWVtLT5wdWI7CisKKyAgLyogQ2hlY2sgZm9yIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIEpQRUdNRU07IGlmIGZvdW5kLCBvdmVycmlkZSB0aGUKKyAgICogZGVmYXVsdCBtYXhfbWVtb3J5IHNldHRpbmcgZnJvbSBqcGVnX21lbV9pbml0LiAgTm90ZSB0aGF0IHRoZQorICAgKiBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBtYXkgYWdhaW4gb3ZlcnJpZGUgdGhpcyB2YWx1ZS4KKyAgICogSWYgeW91ciBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGdldGVudigpLCBkZWZpbmUgTk9fR0VURU5WIHRvIGRpc2FibGUKKyAgICogdGhpcyBmZWF0dXJlLgorICAgKi8KKyNpZm5kZWYgTk9fR0VURU5WCisgIHsKKyAgICBjaGFyICptZW1lbnY7CisKKyAgICBpZiAoKG1lbWVudiA9IGdldGVudigiSlBFR01FTSIpKSAhPSBOVUxMKSB7CisgICAgICBjaGFyIGNoID0gJ3gnOworCisgICAgICBpZiAoc3NjYW5mKG1lbWVudiwgIiVsZCVjIiwgJm1heF90b191c2UsICZjaCkgPiAwKSB7CisgICAgICAgIGlmIChjaCA9PSAnbScgfHwgY2ggPT0gJ00nKQorICAgICAgICAgIG1heF90b191c2UgKj0gMTAwMEw7CisgICAgICAgIG1lbS0+cHViLm1heF9tZW1vcnlfdG9fdXNlID0gbWF4X3RvX3VzZSAqIDEwMDBMOworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ptZW1ub2JzLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qbWVtbm9icy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWJlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qbWVtbm9icy5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogam1lbW5vYnMuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIHJlYWxseSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN5c3RlbS0KKyAqIGRlcGVuZGVudCBwb3J0aW9uIG9mIHRoZSBKUEVHIG1lbW9yeSBtYW5hZ2VyLiAgVGhpcyBpbXBsZW1lbnRhdGlvbgorICogYXNzdW1lcyB0aGF0IG5vIGJhY2tpbmctc3RvcmUgZmlsZXMgYXJlIG5lZWRlZDogYWxsIHJlcXVpcmVkIHNwYWNlCisgKiBjYW4gYmUgb2J0YWluZWQgZnJvbSBtYWxsb2MoKS4KKyAqIFRoaXMgaXMgdmVyeSBwb3J0YWJsZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCdsbCBjb21waWxlIG9uIGFsbW9zdCBhbnl0aGluZywKKyAqIGJ1dCB5b3UnZCBiZXR0ZXIgaGF2ZSBsb3RzIG9mIG1haW4gbWVtb3J5IChvciB2aXJ0dWFsIG1lbW9yeSkgaWYgeW91IHdhbnQKKyAqIHRvIHByb2Nlc3MgYmlnIGltYWdlcy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiam1lbXN5cy5oIiAgICAgICAgICAgIC8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KKworI2lmbmRlZiBIQVZFX1NURExJQl9IICAgICAgICAgICAvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIG1hbGxvYygpLGZyZWUoKSAqLworZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBmcmVlKHZvaWQgKnB0cik7CisjZW5kaWYKKworCisvKgorICogTWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHJlZ3VsYXIgbGlicmFyeQorICogcm91dGluZXMgbWFsbG9jKCkgYW5kIGZyZWUoKS4KKyAqLworCitHTE9CQUwodm9pZCAqKQoranBlZ19nZXRfc21hbGwoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQoreworICByZXR1cm4gKHZvaWQgKiltYWxsb2Moc2l6ZW9mb2JqZWN0KTsKK30KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZyZWVfc21hbGwoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkICpvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpCit7CisgIGZyZWUob2JqZWN0KTsKK30KKworCisvKgorICogIkxhcmdlIiBvYmplY3RzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzICJzbWFsbCIgb25lcy4KKyAqLworCitHTE9CQUwodm9pZCAqKQoranBlZ19nZXRfbGFyZ2Uoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQoreworICByZXR1cm4gKHZvaWQgKiltYWxsb2Moc2l6ZW9mb2JqZWN0KTsKK30KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZyZWVfbGFyZ2Uoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkICpvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpCit7CisgIGZyZWUob2JqZWN0KTsKK30KKworCisvKgorICogVGhpcyByb3V0aW5lIGNvbXB1dGVzIHRoZSB0b3RhbCBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICovCisKK0dMT0JBTChzaXplX3QpCitqcGVnX21lbV9hdmFpbGFibGUoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3QgbWluX2J5dGVzX25lZWRlZCwKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2J5dGVzX25lZWRlZCwgc2l6ZV90IGFscmVhZHlfYWxsb2NhdGVkKQoreworICBpZiAoY2luZm8tPm1lbS0+bWF4X21lbW9yeV90b191c2UpIHsKKyAgICBpZiAoKHNpemVfdCljaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSA+IGFscmVhZHlfYWxsb2NhdGVkKQorICAgICAgcmV0dXJuIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlIC0gYWxyZWFkeV9hbGxvY2F0ZWQ7CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgLyogSGVyZSB3ZSBhbHdheXMgc2F5LCAid2UgZ290IGFsbCB5b3Ugd2FudCBidWQhIiAqLworICAgIHJldHVybiBtYXhfYnl0ZXNfbmVlZGVkOworICB9Cit9CisKKworLyoKKyAqIEJhY2tpbmcgc3RvcmUgKHRlbXBvcmFyeSBmaWxlKSBtYW5hZ2VtZW50LgorICogU2luY2UganBlZ19tZW1fYXZhaWxhYmxlIGFsd2F5cyBwcm9taXNlZCB0aGUgbW9vbiwKKyAqIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBhbmQgd2UgY2FuIGp1c3QgZXJyb3Igb3V0LgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpCit7CisgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9fQkFDS0lOR19TVE9SRSk7Cit9CisKKworLyoKKyAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiBhbnkgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBhbmQKKyAqIGNsZWFudXAgcmVxdWlyZWQuICBIZXJlLCB0aGVyZSBpc24ndCBhbnkuCisgKi8KKworR0xPQkFMKGxvbmcpCitqcGVnX21lbV9pbml0KGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgLyoganVzdCBzZXQgbWF4X21lbW9yeV90b191c2UgdG8gMCAqLworfQorCitHTE9CQUwodm9pZCkKK2pwZWdfbWVtX3Rlcm0oal9jb21tb25fcHRyIGNpbmZvKQoreworICAvKiBubyB3b3JrICovCit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qbWVtc3lzLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qbWVtc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyOTU1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ptZW1zeXMuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIGptZW1zeXMuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgYW5kCisgKiBpbmZvcm1hdGlvbiByZWxldmFudCB0byBsaWJqcGVnLXR1cmJvLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBpbmNsdWRlIGZpbGUgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHN5c3RlbS1pbmRlcGVuZGVudAorICogYW5kIHN5c3RlbS1kZXBlbmRlbnQgcG9ydGlvbnMgb2YgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIuICBObyBvdGhlcgorICogbW9kdWxlcyBuZWVkIGluY2x1ZGUgaXQuICAoVGhlIHN5c3RlbS1pbmRlcGVuZGVudCBwb3J0aW9uIGlzIGptZW1tZ3IuYzsKKyAqIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc3lzdGVtLWRlcGVuZGVudCBwb3J0aW9uLikKKyAqCisgKiBUaGlzIGZpbGUgd29ya3MgYXMtaXMgZm9yIHRoZSBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeSBtYW5hZ2VycyBzdXBwbGllZAorICogaW4gdGhlIElKRyBkaXN0cmlidXRpb24uICBZb3UgbWF5IG5lZWQgdG8gbW9kaWZ5IGl0IGlmIHlvdSB3cml0ZSBhCisgKiBjdXN0b20gbWVtb3J5IG1hbmFnZXIuICBJZiBzeXN0ZW0tZGVwZW5kZW50IGNoYW5nZXMgYXJlIG5lZWRlZCBpbgorICogdGhpcyBmaWxlLCB0aGUgYmVzdCBtZXRob2QgaXMgdG8gI2lmZGVmIHRoZW0gYmFzZWQgb24gYSBjb25maWd1cmF0aW9uCisgKiBzeW1ib2wgc3VwcGxpZWQgaW4gamNvbmZpZy5oLgorICovCisKKworLyoKKyAqIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYWxsb2NhdGUgYW5kIHJlbGVhc2Ugc21hbGwgY2h1bmtzIG9mCisgKiBtZW1vcnkuICAoVHlwaWNhbGx5IHRoZSB0b3RhbCBhbW91bnQgcmVxdWVzdGVkIHRocm91Z2gganBlZ19nZXRfc21hbGwgaXMKKyAqIG5vIG1vcmUgdGhhbiAyMEsgb3Igc287IHRoaXMgd2lsbCBiZSByZXF1ZXN0ZWQgaW4gY2h1bmtzIG9mIGEgZmV3IEsgZWFjaC4pCisgKiBCZWhhdmlvciBzaG91bGQgYmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBtYWxsb2MKKyAqIGFuZCBmcmVlOyBpbiBwYXJ0aWN1bGFyLCBqcGVnX2dldF9zbWFsbCBtdXN0IHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisgKiBPbiBtb3N0IHN5c3RlbXMsIHRoZXNlIEFSRSBtYWxsb2MgYW5kIGZyZWUuICBqcGVnX2ZyZWVfc21hbGwgaXMgcGFzc2VkIHRoZQorICogc2l6ZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGZyZWVkLCBqdXN0IGluIGNhc2UgaXQncyBuZWVkZWQuCisgKi8KKworRVhURVJOKHZvaWQgKikganBlZ19nZXRfc21hbGwoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KTsKK0VYVEVSTih2b2lkKSBqcGVnX2ZyZWVfc21hbGwoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpOworCisvKgorICogVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBsYXJnZSBjaHVua3Mgb2YKKyAqIG1lbW9yeSAodXAgdG8gdGhlIHRvdGFsIGZyZWUgc3BhY2UgZGVzaWduYXRlZCBieSBqcGVnX21lbV9hdmFpbGFibGUpLgorICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUganBlZ19nZXQvZnJlZV9zbWFsbCByb3V0aW5lczsgYnV0IHdlIGtlZXAgdGhlbQorICogc2VwYXJhdGUgYW55d2F5LCBpbiBjYXNlIGEgZGlmZmVyZW50IGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgZGVzaXJhYmxlIGZvcgorICogbGFyZ2UgY2h1bmtzLgorICovCisKK0VYVEVSTih2b2lkICopIGpwZWdfZ2V0X2xhcmdlKGpfY29tbW9uX3B0ciBjaW5mbywgc2l6ZV90IHNpemVvZm9iamVjdCk7CitFWFRFUk4odm9pZCkganBlZ19mcmVlX2xhcmdlKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZW9mb2JqZWN0KTsKKworLyoKKyAqIFRoZSBtYWNybyBNQVhfQUxMT0NfQ0hVTksgZGVzaWduYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkKKyAqIGJlIHJlcXVlc3RlZCBpbiBhIHNpbmdsZSBjYWxsIHRvIGpwZWdfZ2V0X2xhcmdlIChhbmQganBlZ19nZXRfc21hbGwgZm9yIHRoYXQKKyAqIG1hdHRlciwgYnV0IHRoYXQgY2FzZSBzaG91bGQgbmV2ZXIgY29tZSBpbnRvIHBsYXkpLiAgVGhpcyBtYWNybyB3YXMgbmVlZGVkCisgKiB0byBtb2RlbCB0aGUgNjRLYi1zZWdtZW50LXNpemUgbGltaXQgb2YgZmFyIGFkZHJlc3Npbmcgb24gODB4ODYgbWFjaGluZXMuCisgKiBPbiBtYWNoaW5lcyB3aXRoIGZsYXQgYWRkcmVzcyBzcGFjZXMsIGFueSBsYXJnZSBjb25zdGFudCBtYXkgYmUgdXNlZC4KKyAqCisgKiBOQjogam1lbW1nci5jIGV4cGVjdHMgdGhhdCBNQVhfQUxMT0NfQ0hVTksgd2lsbCBiZSByZXByZXNlbnRhYmxlIGFzIHR5cGUKKyAqIHNpemVfdCBhbmQgd2lsbCBiZSBhIG11bHRpcGxlIG9mIHNpemVvZihhbGlnbl90eXBlKS4KKyAqLworCisjaWZuZGVmIE1BWF9BTExPQ19DSFVOSyAgICAgICAgIC8qIG1heSBiZSBvdmVycmlkZGVuIGluIGpjb25maWcuaCAqLworI2RlZmluZSBNQVhfQUxMT0NfQ0hVTksgIDEwMDAwMDAwMDBMCisjZW5kaWYKKworLyoKKyAqIFRoaXMgcm91dGluZSBjb21wdXRlcyB0aGUgdG90YWwgc3BhY2Ugc3RpbGwgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uIGJ5CisgKiBqcGVnX2dldF9sYXJnZS4gIElmIG1vcmUgc3BhY2UgdGhhbiB0aGlzIGlzIG5lZWRlZCwgYmFja2luZyBzdG9yZSB3aWxsIGJlCisgKiB1c2VkLiAgTk9URTogYW55IG1lbW9yeSBhbHJlYWR5IGFsbG9jYXRlZCBtdXN0IG5vdCBiZSBjb3VudGVkLgorICoKKyAqIFRoZXJlIGlzIGEgbWluaW11bSBzcGFjZSByZXF1aXJlbWVudCwgY29ycmVzcG9uZGluZyB0byB0aGUgbWluaW11bQorICogZmVhc2libGUgYnVmZmVyIHNpemVzOyBqbWVtbWdyLmMgd2lsbCByZXF1ZXN0IHRoYXQgbXVjaCBzcGFjZSBldmVuIGlmCisgKiBqcGVnX21lbV9hdmFpbGFibGUgcmV0dXJucyB6ZXJvLiAgVGhlIG1heGltdW0gc3BhY2UgbmVlZGVkLCBlbm91Z2ggdG8gaG9sZAorICogYWxsIHdvcmtpbmcgc3RvcmFnZSBpbiBtZW1vcnksIGlzIGFsc28gcGFzc2VkIGluIGNhc2UgaXQgaXMgdXNlZnVsLgorICogRmluYWxseSwgdGhlIHRvdGFsIHNwYWNlIGFscmVhZHkgYWxsb2NhdGVkIGlzIHBhc3NlZC4gIElmIG5vIGJldHRlcgorICogbWV0aG9kIGlzIGF2YWlsYWJsZSwgY2luZm8tPm1lbS0+bWF4X21lbW9yeV90b191c2UgLSBhbHJlYWR5X2FsbG9jYXRlZAorICogaXMgb2Z0ZW4gYSBzdWl0YWJsZSBjYWxjdWxhdGlvbi4KKyAqCisgKiBJdCBpcyBPSyBmb3IganBlZ19tZW1fYXZhaWxhYmxlIHRvIHVuZGVyZXN0aW1hdGUgdGhlIHNwYWNlIGF2YWlsYWJsZQorICogKHRoYXQnbGwganVzdCBsZWFkIHRvIG1vcmUgYmFja2luZy1zdG9yZSBhY2Nlc3MgdGhhbiBpcyByZWFsbHkgbmVjZXNzYXJ5KS4KKyAqIEhvd2V2ZXIsIGFuIG92ZXJlc3RpbWF0ZSB3aWxsIGxlYWQgdG8gZmFpbHVyZS4gIEhlbmNlIGl0J3Mgd2lzZSB0byBzdWJ0cmFjdAorICogYSBzbG9wIGZhY3RvciBmcm9tIHRoZSB0cnVlIGF2YWlsYWJsZSBzcGFjZS4gIDUlIHNob3VsZCBiZSBlbm91Z2guCisgKgorICogT24gbWFjaGluZXMgd2l0aCBsb3RzIG9mIHZpcnR1YWwgbWVtb3J5LCBhbnkgbGFyZ2UgY29uc3RhbnQgbWF5IGJlIHJldHVybmVkLgorICogQ29udmVyc2VseSwgemVybyBtYXkgYmUgcmV0dXJuZWQgdG8gYWx3YXlzIHVzZSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5LgorICovCisKK0VYVEVSTihzaXplX3QpIGpwZWdfbWVtX2F2YWlsYWJsZShqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBtaW5fYnl0ZXNfbmVlZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfYnl0ZXNfbmVlZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbHJlYWR5X2FsbG9jYXRlZCk7CisKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHdoYXRldmVyIHN0YXRlIGlzIG5lZWRlZCB0byBhY2Nlc3MgYSBzaW5nbGUKKyAqIGJhY2tpbmctc3RvcmUgb2JqZWN0LiAgVGhlIHJlYWQvd3JpdGUvY2xvc2UgbWV0aG9kIHBvaW50ZXJzIGFyZSBjYWxsZWQKKyAqIGJ5IGptZW1tZ3IuYyB0byBtYW5pcHVsYXRlIHRoZSBiYWNraW5nLXN0b3JlIG9iamVjdDsgYWxsIG90aGVyIGZpZWxkcworICogYXJlIHByaXZhdGUgdG8gdGhlIHN5c3RlbS1kZXBlbmRlbnQgYmFja2luZyBzdG9yZSByb3V0aW5lcy4KKyAqLworCisjZGVmaW5lIFRFTVBfTkFNRV9MRU5HVEggICA2NCAgIC8qIG1heCBsZW5ndGggb2YgYSB0ZW1wb3JhcnkgZmlsZSdzIG5hbWUgKi8KKworCisjaWZkZWYgVVNFX01TRE9TX01FTU1HUiAgICAgICAgIC8qIERPUy1zcGVjaWZpYyBqdW5rICovCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgWE1TSDsgICAgLyogdHlwZSBvZiBleHRlbmRlZC1tZW1vcnkgaGFuZGxlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBFTVNIOyAgICAvKiB0eXBlIG9mIGV4cGFuZGVkLW1lbW9yeSBoYW5kbGVzICovCisKK3R5cGVkZWYgdW5pb24geworICBzaG9ydCBmaWxlX2hhbmRsZTsgICAgICAgICAgICAvKiBET1MgZmlsZSBoYW5kbGUgaWYgaXQncyBhIHRlbXAgZmlsZSAqLworICBYTVNIIHhtc19oYW5kbGU7ICAgICAgICAgICAgICAvKiBoYW5kbGUgaWYgaXQncyBhIGNodW5rIG9mIFhNUyAqLworICBFTVNIIGVtc19oYW5kbGU7ICAgICAgICAgICAgICAvKiBoYW5kbGUgaWYgaXQncyBhIGNodW5rIG9mIEVNUyAqLworfSBoYW5kbGVfdW5pb247CisKKyNlbmRpZiAvKiBVU0VfTVNET1NfTUVNTUdSICovCisKKyNpZmRlZiBVU0VfTUFDX01FTU1HUiAgICAgICAgICAgLyogTWFjLXNwZWNpZmljIGp1bmsgKi8KKyNpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmIC8qIFVTRV9NQUNfTUVNTUdSICovCisKKwordHlwZWRlZiBzdHJ1Y3QgYmFja2luZ19zdG9yZV9zdHJ1Y3QgKmJhY2tpbmdfc3RvcmVfcHRyOworCit0eXBlZGVmIHN0cnVjdCBiYWNraW5nX3N0b3JlX3N0cnVjdCB7CisgIC8qIE1ldGhvZHMgZm9yIHJlYWRpbmcvd3JpdGluZy9jbG9zaW5nIHRoaXMgYmFja2luZy1zdG9yZSBvYmplY3QgKi8KKyAgdm9pZCAoKnJlYWRfYmFja2luZ19zdG9yZSkgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcl9hZGRyZXNzLCBsb25nIGZpbGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBieXRlX2NvdW50KTsKKyAgdm9pZCAoKndyaXRlX2JhY2tpbmdfc3RvcmUpIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyX2FkZHJlc3MsIGxvbmcgZmlsZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBieXRlX2NvdW50KTsKKyAgdm9pZCAoKmNsb3NlX2JhY2tpbmdfc3RvcmUpIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8pOworCisgIC8qIFByaXZhdGUgZmllbGRzIGZvciBzeXN0ZW0tZGVwZW5kZW50IGJhY2tpbmctc3RvcmUgbWFuYWdlbWVudCAqLworI2lmZGVmIFVTRV9NU0RPU19NRU1NR1IKKyAgLyogRm9yIHRoZSBNUy1ET1MgbWFuYWdlciAoam1lbWRvcy5jKSwgd2UgbmVlZDogKi8KKyAgaGFuZGxlX3VuaW9uIGhhbmRsZTsgICAgICAgICAgLyogcmVmZXJlbmNlIHRvIGJhY2tpbmctc3RvcmUgc3RvcmFnZSBvYmplY3QgKi8KKyAgY2hhciB0ZW1wX25hbWVbVEVNUF9OQU1FX0xFTkdUSF07IC8qIG5hbWUgaWYgaXQncyBhIGZpbGUgKi8KKyNlbHNlCisjaWZkZWYgVVNFX01BQ19NRU1NR1IKKyAgLyogRm9yIHRoZSBNYWMgbWFuYWdlciAoam1lbW1hYy5jKSwgd2UgbmVlZDogKi8KKyAgc2hvcnQgdGVtcF9maWxlOyAgICAgICAgICAgICAgLyogZmlsZSByZWZlcmVuY2UgbnVtYmVyIHRvIHRlbXAgZmlsZSAqLworICBGU1NwZWMgdGVtcFNwZWM7ICAgICAgICAgICAgICAvKiB0aGUgRlNTcGVjIGZvciB0aGUgdGVtcCBmaWxlICovCisgIGNoYXIgdGVtcF9uYW1lW1RFTVBfTkFNRV9MRU5HVEhdOyAvKiBuYW1lIGlmIGl0J3MgYSBmaWxlICovCisjZWxzZQorICAvKiBGb3IgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHdpdGggdGVtcCBmaWxlcywgd2UgbmVlZDogKi8KKyAgRklMRSAqdGVtcF9maWxlOyAgICAgICAgICAgICAgLyogc3RkaW8gcmVmZXJlbmNlIHRvIHRlbXAgZmlsZSAqLworICBjaGFyIHRlbXBfbmFtZVtURU1QX05BTUVfTEVOR1RIXTsgLyogbmFtZSBvZiB0ZW1wIGZpbGUgKi8KKyNlbmRpZgorI2VuZGlmCit9IGJhY2tpbmdfc3RvcmVfaW5mbzsKKworCisvKgorICogSW5pdGlhbCBvcGVuaW5nIG9mIGEgYmFja2luZy1zdG9yZSBvYmplY3QuICBUaGlzIG11c3QgZmlsbCBpbiB0aGUKKyAqIHJlYWQvd3JpdGUvY2xvc2UgcG9pbnRlcnMgaW4gdGhlIG9iamVjdC4gIFRoZSByZWFkL3dyaXRlIHJvdXRpbmVzCisgKiBtYXkgdGFrZSBhbiBlcnJvciBleGl0IGlmIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBmaWxlIHNpemUgaXMgZXhjZWVkZWQuCisgKiAoSWYganBlZ19tZW1fYXZhaWxhYmxlIGFsd2F5cyByZXR1cm5zIGEgbGFyZ2UgdmFsdWUsIHRoaXMgcm91dGluZSBjYW4KKyAqIGp1c3QgdGFrZSBhbiBlcnJvciBleGl0LikKKyAqLworCitFWFRFUk4odm9pZCkganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoal9jb21tb25fcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpOworCisKKy8qCisgKiBUaGVzZSByb3V0aW5lcyB0YWtlIGNhcmUgb2YgYW55IHN5c3RlbS1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gYW5kCisgKiBjbGVhbnVwIHJlcXVpcmVkLiAganBlZ19tZW1faW5pdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgaXMKKyAqIGFsbG9jYXRlZCAoYW5kLCB0aGVyZWZvcmUsIG5vdGhpbmcgaW4gY2luZm8gaXMgb2YgdXNlIGV4Y2VwdCB0aGUgZXJyb3IKKyAqIG1hbmFnZXIgcG9pbnRlcikuICBJdCBzaG91bGQgcmV0dXJuIGEgc3VpdGFibGUgZGVmYXVsdCB2YWx1ZSBmb3IKKyAqIG1heF9tZW1vcnlfdG9fdXNlOyB0aGlzIG1heSBzdWJzZXF1ZW50bHkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3Vycm91bmRpbmcKKyAqIGFwcGxpY2F0aW9uLiAgKE5vdGUgdGhhdCBtYXhfbWVtb3J5X3RvX3VzZSBpcyBvbmx5IGltcG9ydGFudCBpZgorICoganBlZ19tZW1fYXZhaWxhYmxlIGNob29zZXMgdG8gY29uc3VsdCBpdCAuLi4gbm8gb25lIGVsc2Ugd2lsbC4pCisgKiBqcGVnX21lbV90ZXJtIG1heSBhc3N1bWUgdGhhdCBhbGwgcmVxdWVzdGVkIG1lbW9yeSBoYXMgYmVlbiBmcmVlZCBhbmQgdGhhdAorICogYWxsIG9wZW5lZCBiYWNraW5nLXN0b3JlIG9iamVjdHMgaGF2ZSBiZWVuIGNsb3NlZC4KKyAqLworCitFWFRFUk4obG9uZykganBlZ19tZW1faW5pdChqX2NvbW1vbl9wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGpwZWdfbWVtX3Rlcm0oal9jb21tb25fcHRyIGNpbmZvKTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2ptb3JlY2ZnLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qbW9yZWNmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDFkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qbW9yZWNmZy5oCkBAIC0wLDAgKzEsNDIxIEBACisvKgorICogam1vcmVjZmcuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMTk5Ny0yMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY3VzdG9taXplIHRoZQorICogSlBFRyBzb2Z0d2FyZSBmb3Igc3BlY2lhbCBhcHBsaWNhdGlvbnMgb3Igc3VwcG9ydCBtYWNoaW5lLWRlcGVuZGVudAorICogb3B0aW1pemF0aW9ucy4gIE1vc3QgdXNlcnMgd2lsbCBub3QgbmVlZCB0byB0b3VjaCB0aGlzIGZpbGUuCisgKi8KKworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgY29tcG9uZW50cyAoY29sb3IgY2hhbm5lbHMpIGFsbG93ZWQgaW4gSlBFRyBpbWFnZS4KKyAqIFRvIG1lZXQgdGhlIGxldHRlciBvZiB0aGUgSlBFRyBzcGVjLCBzZXQgdGhpcyB0byAyNTUuICBIb3dldmVyLCBkYXJuCisgKiBmZXcgYXBwbGljYXRpb25zIG5lZWQgbW9yZSB0aGFuIDQgY2hhbm5lbHMgKG1heWJlIDUgZm9yIENNWUsgKyBhbHBoYQorICogbWFzaykuICBXZSByZWNvbW1lbmQgMTAgYXMgYSByZWFzb25hYmxlIGNvbXByb21pc2U7IHVzZSA0IGlmIHlvdSBhcmUKKyAqIHJlYWxseSBzaG9ydCBvbiBtZW1vcnkuICAoRWFjaCBhbGxvd2VkIGNvbXBvbmVudCBjb3N0cyBhIGh1bmRyZWQgb3Igc28KKyAqIGJ5dGVzIG9mIHN0b3JhZ2UsIHdoZXRoZXIgYWN0dWFsbHkgdXNlZCBpbiBhbiBpbWFnZSBvciBub3QuKQorICovCisKKyNkZWZpbmUgTUFYX0NPTVBPTkVOVFMgIDEwICAgICAgLyogbWF4aW11bSBudW1iZXIgb2YgaW1hZ2UgY29tcG9uZW50cyAqLworCisKKy8qCisgKiBCYXNpYyBkYXRhIHR5cGVzLgorICogWW91IG1heSBuZWVkIHRvIGNoYW5nZSB0aGVzZSBpZiB5b3UgaGF2ZSBhIG1hY2hpbmUgd2l0aCB1bnVzdWFsIGRhdGEKKyAqIHR5cGUgc2l6ZXM7IGZvciBleGFtcGxlLCAiY2hhciIgbm90IDggYml0cywgInNob3J0IiBub3QgMTYgYml0cywKKyAqIG9yICJsb25nIiBub3QgMzIgYml0cy4gIFdlIGRvbid0IGNhcmUgd2hldGhlciAiaW50IiBpcyAxNiBvciAzMiBiaXRzLAorICogYnV0IGl0IGhhZCBiZXR0ZXIgYmUgYXQgbGVhc3QgMTYuCisgKi8KKworLyogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgc2FtcGxlIChwaXhlbCBlbGVtZW50IHZhbHVlKS4KKyAqIFdlIGZyZXF1ZW50bHkgYWxsb2NhdGUgbGFyZ2UgYXJyYXlzIG9mIHRoZXNlLCBzbyBpdCdzIGltcG9ydGFudCB0byBrZWVwCisgKiB0aGVtIHNtYWxsLiAgQnV0IGlmIHlvdSBoYXZlIG1lbW9yeSB0byBidXJuIGFuZCBhY2Nlc3MgdG8gY2hhciBvciBzaG9ydAorICogYXJyYXlzIGlzIHZlcnkgc2xvdyBvbiB5b3VyIGhhcmR3YXJlLCB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlc2UuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisvKiBKU0FNUExFIHNob3VsZCBiZSB0aGUgc21hbGxlc3QgdHlwZSB0aGF0IHdpbGwgaG9sZCB0aGUgdmFsdWVzIDAuLjI1NS4KKyAqIFlvdSBjYW4gdXNlIGEgc2lnbmVkIGNoYXIgYnkgaGF2aW5nIEdFVEpTQU1QTEUgbWFzayBpdCB3aXRoIDB4RkYuCisgKi8KKworI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgSlNBTVBMRTsKKyNkZWZpbmUgR0VUSlNBTVBMRSh2YWx1ZSkgICgoaW50KSh2YWx1ZSkpCisKKyNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKwordHlwZWRlZiBjaGFyIEpTQU1QTEU7CisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KKyNkZWZpbmUgR0VUSlNBTVBMRSh2YWx1ZSkgICgoaW50KSh2YWx1ZSkpCisjZWxzZQorI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpKHZhbHVlKSAmIDB4RkYpCisjZW5kaWYgLyogX19DSEFSX1VOU0lHTkVEX18gKi8KKworI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLworCisjZGVmaW5lIE1BWEpTQU1QTEUgICAgICAyNTUKKyNkZWZpbmUgQ0VOVEVSSlNBTVBMRSAgIDEyOAorCisjZW5kaWYgLyogQklUU19JTl9KU0FNUExFID09IDggKi8KKworCisjaWYgQklUU19JTl9KU0FNUExFID09IDEyCisvKiBKU0FNUExFIHNob3VsZCBiZSB0aGUgc21hbGxlc3QgdHlwZSB0aGF0IHdpbGwgaG9sZCB0aGUgdmFsdWVzIDAuLjQwOTUuCisgKiBPbiBuZWFybHkgYWxsIG1hY2hpbmVzICJzaG9ydCIgd2lsbCBkbyBuaWNlbHkuCisgKi8KKwordHlwZWRlZiBzaG9ydCBKU0FNUExFOworI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpKHZhbHVlKSkKKworI2RlZmluZSBNQVhKU0FNUExFICAgICAgNDA5NQorI2RlZmluZSBDRU5URVJKU0FNUExFICAgMjA0OAorCisjZW5kaWYgLyogQklUU19JTl9KU0FNUExFID09IDEyICovCisKKworLyogUmVwcmVzZW50YXRpb24gb2YgYSBEQ1QgZnJlcXVlbmN5IGNvZWZmaWNpZW50LgorICogVGhpcyBzaG91bGQgYmUgYSBzaWduZWQgdmFsdWUgb2YgYXQgbGVhc3QgMTYgYml0czsgInNob3J0IiBpcyB1c3VhbGx5IE9LLgorICogQWdhaW4sIHdlIGFsbG9jYXRlIGxhcmdlIGFycmF5cyBvZiB0aGVzZSwgYnV0IHlvdSBjYW4gY2hhbmdlIHRvIGludAorICogaWYgeW91IGhhdmUgbWVtb3J5IHRvIGJ1cm4gYW5kICJzaG9ydCIgaXMgcmVhbGx5IHNsb3cuCisgKi8KKwordHlwZWRlZiBzaG9ydCBKQ09FRjsKKworCisvKiBDb21wcmVzc2VkIGRhdGFzdHJlYW1zIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgSk9DVEVULgorICogVGhlc2UgbXVzdCBiZSBFWEFDVExZIDggYml0cyB3aWRlLCBhdCBsZWFzdCBvbmNlIHRoZXkgYXJlIHdyaXR0ZW4gdG8KKyAqIGV4dGVybmFsIHN0b3JhZ2UuICBOb3RlIHRoYXQgd2hlbiB1c2luZyB0aGUgc3RkaW8gZGF0YSBzb3VyY2UvZGVzdGluYXRpb24KKyAqIG1hbmFnZXJzLCB0aGlzIGlzIGFsc28gdGhlIGRhdGEgdHlwZSBwYXNzZWQgdG8gZnJlYWQvZndyaXRlLgorICovCisKKyNpZmRlZiBIQVZFX1VOU0lHTkVEX0NIQVIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEpPQ1RFVDsKKyNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKHZhbHVlKQorCisjZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9DSEFSICovCisKK3R5cGVkZWYgY2hhciBKT0NURVQ7CisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KKyNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKHZhbHVlKQorI2Vsc2UKKyNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKCh2YWx1ZSkgJiAweEZGKQorI2VuZGlmIC8qIF9fQ0hBUl9VTlNJR05FRF9fICovCisKKyNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKworCisvKiBUaGVzZSB0eXBlZGVmcyBhcmUgdXNlZCBmb3IgdmFyaW91cyB0YWJsZSBlbnRyaWVzIGFuZCBzbyBmb3J0aC4KKyAqIFRoZXkgbXVzdCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHNwZWNpZmllZDsgYnV0IG1ha2luZyB0aGVtIHRvbyBiaWcKKyAqIHdvbid0IGNvc3QgYSBodWdlIGFtb3VudCBvZiBtZW1vcnksIHNvIHdlIGRvbid0IHByb3ZpZGUgc3BlY2lhbAorICogZXh0cmFjdGlvbiBjb2RlIGxpa2Ugd2UgZGlkIGZvciBKU0FNUExFLiAgKEluIG90aGVyIHdvcmRzLCB0aGVzZQorICogdHlwZWRlZnMgbGl2ZSBhdCBhIGRpZmZlcmVudCBwb2ludCBvbiB0aGUgc3BlZWQvc3BhY2UgdHJhZGVvZmYgY3VydmUuKQorICovCisKKy8qIFVJTlQ4IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIDAuLjI1NS4gKi8KKworI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OworI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLworI2lmZGVmIF9fQ0hBUl9VTlNJR05FRF9fCit0eXBlZGVmIGNoYXIgVUlOVDg7CisjZWxzZSAvKiBub3QgX19DSEFSX1VOU0lHTkVEX18gKi8KK3R5cGVkZWYgc2hvcnQgVUlOVDg7CisjZW5kaWYgLyogX19DSEFSX1VOU0lHTkVEX18gKi8KKyNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKworLyogVUlOVDE2IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIDAuLjY1NTM1LiAqLworCisjaWZkZWYgSEFWRV9VTlNJR05FRF9TSE9SVAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7CisjZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9TSE9SVCAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDE2OworI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfU0hPUlQgKi8KKworLyogSU5UMTYgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSB2YWx1ZXMgLTMyNzY4Li4zMjc2Ny4gKi8KKworI2lmbmRlZiBYTURfSCAgICAgICAgICAgICAgICAgICAvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMTYgKi8KK3R5cGVkZWYgc2hvcnQgSU5UMTY7CisjZW5kaWYKKworLyogSU5UMzIgbXVzdCBob2xkIGF0IGxlYXN0IHNpZ25lZCAzMi1iaXQgdmFsdWVzLgorICoKKyAqIE5PVEU6IFRoZSBJTlQzMiB0eXBlZGVmIGRhdGVzIGJhY2sgdG8gbGlianBlZyB2NSAoMTk5NC4pICBJbnRlZ2VycyB3ZXJlCisgKiBzb21ldGltZXMgMTYtYml0IGJhY2sgdGhlbiAoTVMtRE9TKSwgd2hpY2ggaXMgd2h5IElOVDMyIGlzIHR5cGVkZWYnZCB0bworICogbG9uZy4gIEl0IGFsc28gd2Fzbid0IGNvbW1vbiAob3IgYXQgbGVhc3QgYXMgY29tbW9uKSBpbiAxOTk0IGZvciBJTlQzMiB0byBiZQorICogZGVmaW5lZCBieSBwbGF0Zm9ybSBoZWFkZXJzLiAgU2luY2UgdGhlbiwgaG93ZXZlciwgSU5UMzIgaXMgZGVmaW5lZCBpbgorICogc2V2ZXJhbCBvdGhlciBjb21tb24gcGxhY2VzOgorICoKKyAqIFhtZC5oIChYMTEgaGVhZGVyKSB0eXBlZGVmcyBJTlQzMiB0byBpbnQgb24gNjQtYml0IHBsYXRmb3JtcyBhbmQgbG9uZyBvbgorICogMzItYml0IHBsYXRmb3JtcyAoaS5lIGFsd2F5cyBhIDMyLWJpdCBzaWduZWQgdHlwZS4pCisgKgorICogYmFzZXRzZC5oIChXaW4zMiBoZWFkZXIpIHR5cGVkZWZzIElOVDMyIHRvIGludCAoYWx3YXlzIGEgMzItYml0IHNpZ25lZCB0eXBlCisgKiBvbiBtb2Rlcm4gcGxhdGZvcm1zLikKKyAqCisgKiBxZ2xvYmFsLmggKFF0IGhlYWRlcikgdHlwZWRlZnMgSU5UMzIgdG8gaW50IChhbHdheXMgYSAzMi1iaXQgc2lnbmVkIHR5cGUgb24KKyAqIG1vZGVybiBwbGF0Zm9ybXMuKQorICoKKyAqIFRoaXMgaXMgYSByZWNpcGUgZm9yIGNvbmZsaWN0LCBzaW5jZSAibG9uZyIgYW5kICJpbnQiIGFyZW4ndCBhbHdheXMKKyAqIGNvbXBhdGlibGUgdHlwZXMuICBTaW5jZSB0aGUgZGVmaW5pdGlvbiBvZiBJTlQzMiBoYXMgdGVjaG5pY2FsbHkgYmVlbiBwYXJ0CisgKiBvZiB0aGUgbGlianBlZyBBUEkgZm9yIG1vcmUgdGhhbiAyMCB5ZWFycywgd2UgY2FuJ3QgcmVtb3ZlIGl0LCBidXQgd2UgZG8gbm90CisgKiB1c2UgaXQgaW50ZXJuYWxseSBhbnkgbG9uZ2VyLiAgV2UgaW5zdGVhZCBkZWZpbmUgYSBzZXBhcmF0ZSB0eXBlIChKTE9ORykKKyAqIGZvciBpbnRlcm5hbCB1c2UsIHdoaWNoIGVuc3VyZXMgdGhhdCBpbnRlcm5hbCBiZWhhdmlvciB3aWxsIGFsd2F5cyBiZSB0aGUKKyAqIHNhbWUgcmVnYXJkbGVzcyBvZiBhbnkgZXh0ZXJuYWwgaGVhZGVycyB0aGF0IG1heSBiZSBpbmNsdWRlZC4KKyAqLworCisjaWZuZGVmIFhNRF9IICAgICAgICAgICAgICAgICAgIC8qIFgxMS94bWQuaCBjb3JyZWN0bHkgZGVmaW5lcyBJTlQzMiAqLworI2lmbmRlZiBfQkFTRVRTRF9IXyAgICAgICAgICAgICAvKiBNaWNyb3NvZnQgZGVmaW5lcyBpdCBpbiBiYXNldHNkLmggKi8KKyNpZm5kZWYgX0JBU0VUU0RfSCAgICAgICAgICAgICAgLyogTWluR1cgaXMgc2xpZ2h0bHkgZGlmZmVyZW50ICovCisjaWZuZGVmIFFHTE9CQUxfSCAgICAgICAgICAgICAgIC8qIFF0IGRlZmluZXMgaXQgaW4gcWdsb2JhbC5oICovCit0eXBlZGVmIGxvbmcgSU5UMzI7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogRGF0YXR5cGUgdXNlZCBmb3IgaW1hZ2UgZGltZW5zaW9ucy4gIFRoZSBKUEVHIHN0YW5kYXJkIG9ubHkgc3VwcG9ydHMKKyAqIGltYWdlcyB1cCB0byA2NEsqNjRLIGR1ZSB0byAxNi1iaXQgZmllbGRzIGluIFNPRiBtYXJrZXJzLiAgVGhlcmVmb3JlCisgKiAidW5zaWduZWQgaW50IiBpcyBzdWZmaWNpZW50IG9uIGFsbCBtYWNoaW5lcy4gIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRvCisgKiBoYW5kbGUgbGFyZ2VyIGltYWdlcyBhbmQgeW91IGRvbid0IG1pbmQgZGV2aWF0aW5nIGZyb20gdGhlIHNwZWMsIHlvdQorICogY2FuIGNoYW5nZSB0aGlzIGRhdGF0eXBlLiAgKE5vdGUgdGhhdCBjaGFuZ2luZyB0aGlzIGRhdGF0eXBlIHdpbGwKKyAqIHBvdGVudGlhbGx5IHJlcXVpcmUgbW9kaWZ5aW5nIHRoZSBTSU1EIGNvZGUuICBUaGUgeDg2LTY0IFNJTUQgZXh0ZW5zaW9ucywKKyAqIGluIHBhcnRpY3VsYXIsIGFzc3VtZSBhIDMyLWJpdCBKRElNRU5TSU9OLikKKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCBKRElNRU5TSU9OOworCisjZGVmaW5lIEpQRUdfTUFYX0RJTUVOU0lPTiAgNjU1MDBMICAvKiBhIHRhZCB1bmRlciA2NEsgdG8gcHJldmVudCBvdmVyZmxvd3MgKi8KKworCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gYWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCBleHRlcm4gZGVjbGFyYXRpb25zLgorICogWW91IGNvdWxkIG1vZGlmeSB0aGVtIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSBmdW5jdGlvbiBsaW5rYWdlIGNvbnZlbnRpb25zOworICogaW4gcGFydGljdWxhciwgeW91J2xsIG5lZWQgdG8gZG8gdGhhdCB0byBtYWtlIHRoZSBsaWJyYXJ5IGEgV2luZG93cyBETEwuCisgKiBBbm90aGVyIGFwcGxpY2F0aW9uIGlzIHRvIG1ha2UgYWxsIGZ1bmN0aW9ucyBnbG9iYWwgZm9yIHVzZSB3aXRoIGRlYnVnZ2VycworICogb3IgY29kZSBwcm9maWxlcnMgdGhhdCByZXF1aXJlIGl0LgorICovCisKKy8qIGEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggbWV0aG9kIHBvaW50ZXJzOiAqLworI2RlZmluZSBNRVRIT0RERUYodHlwZSkgICAgICAgICBzdGF0aWMgdHlwZQorLyogYSBmdW5jdGlvbiB1c2VkIG9ubHkgaW4gaXRzIG1vZHVsZTogKi8KKyNkZWZpbmUgTE9DQUwodHlwZSkgICAgICAgICAgICAgc3RhdGljIHR5cGUKKy8qIGEgZnVuY3Rpb24gcmVmZXJlbmNlZCB0aHJ1IEVYVEVSTnM6ICovCisjZGVmaW5lIEdMT0JBTCh0eXBlKSAgICAgICAgICAgIHR5cGUKKy8qIGEgcmVmZXJlbmNlIHRvIGEgR0xPQkFMIGZ1bmN0aW9uOiAqLworI2RlZmluZSBFWFRFUk4odHlwZSkgICAgICAgICAgICBleHRlcm4gdHlwZQorCisKKy8qIE9yaWdpbmFsbHksIHRoaXMgbWFjcm8gd2FzIHVzZWQgYXMgYSB3YXkgb2YgZGVmaW5pbmcgZnVuY3Rpb24gcHJvdG90eXBlcworICogZm9yIGJvdGggbW9kZXJuIGNvbXBpbGVycyBhcyB3ZWxsIGFzIG9sZGVyIGNvbXBpbGVycyB0aGF0IGRpZCBub3Qgc3VwcG9ydAorICogcHJvdG90eXBlIHBhcmFtZXRlcnMuICBsaWJqcGVnLXR1cmJvIGhhcyBuZXZlciBzdXBwb3J0ZWQgdGhlc2Ugb2xkZXIsCisgKiBub24tQU5TSSBjb21waWxlcnMsIGJ1dCB0aGUgbWFjcm8gaXMgc3RpbGwgaW5jbHVkZWQgYmVjYXVzZSB0aGVyZSBpcyBzb21lCisgKiBzb2Z0d2FyZSBvdXQgdGhlcmUgdGhhdCB1c2VzIGl0LgorICovCisKKyNkZWZpbmUgSk1FVEhPRCh0eXBlLCBtZXRob2RuYW1lLCBhcmdsaXN0KSAgdHlwZSAoKm1ldGhvZG5hbWUpIGFyZ2xpc3QKKworCisvKiBsaWJqcGVnLXR1cmJvIG5vIGxvbmdlciBzdXBwb3J0cyBwbGF0Zm9ybXMgdGhhdCBoYXZlIGZhciBzeW1ib2xzIChNUy1ET1MpLAorICogYnV0IGFnYWluLCBzb21lIHNvZnR3YXJlIHJlbGllcyBvbiB0aGlzIG1hY3JvLgorICovCisKKyN1bmRlZiBGQVIKKyNkZWZpbmUgRkFSCisKKworLyoKKyAqIE9uIGEgZmV3IHN5c3RlbXMsIHR5cGUgYm9vbGVhbiBhbmQvb3IgaXRzIHZhbHVlcyBGQUxTRSwgVFJVRSBtYXkgYXBwZWFyCisgKiBpbiBzdGFuZGFyZCBoZWFkZXIgZmlsZXMuICBPciB5b3UgbWF5IGhhdmUgY29uZmxpY3RzIHdpdGggYXBwbGljYXRpb24tCisgKiBzcGVjaWZpYyBoZWFkZXIgZmlsZXMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIHRvZ2V0aGVyIHdpdGggdGhlc2UgZmlsZXMuCisgKiBEZWZpbmluZyBIQVZFX0JPT0xFQU4gYmVmb3JlIGluY2x1ZGluZyBqcGVnbGliLmggc2hvdWxkIG1ha2UgaXQgd29yay4KKyAqLworCisjaWZuZGVmIEhBVkVfQk9PTEVBTgordHlwZWRlZiBpbnQgYm9vbGVhbjsKKyNlbmRpZgorI2lmbmRlZiBGQUxTRSAgICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHRoZXNlIG1hY3JvcyBhbHJlYWR5IGV4aXN0ICovCisjZGVmaW5lIEZBTFNFICAgMCAgICAgICAgICAgICAgIC8qIHZhbHVlcyBvZiBib29sZWFuICovCisjZW5kaWYKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFICAgIDEKKyNlbmRpZgorCisKKy8qCisgKiBUaGUgcmVtYWluaW5nIG9wdGlvbnMgYWZmZWN0IGNvZGUgc2VsZWN0aW9uIHdpdGhpbiB0aGUgSlBFRyBsaWJyYXJ5LAorICogYnV0IHRoZXkgZG9uJ3QgbmVlZCB0byBiZSB2aXNpYmxlIHRvIG1vc3QgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5LgorICogVG8gbWluaW1pemUgYXBwbGljYXRpb24gbmFtZXNwYWNlIHBvbGx1dGlvbiwgdGhlIHN5bWJvbHMgd29uJ3QgYmUKKyAqIGRlZmluZWQgdW5sZXNzIEpQRUdfSU5URVJOQUxTIG9yIEpQRUdfSU5URVJOQUxfT1BUSU9OUyBoYXMgYmVlbiBkZWZpbmVkLgorICovCisKKyNpZmRlZiBKUEVHX0lOVEVSTkFMUworI2RlZmluZSBKUEVHX0lOVEVSTkFMX09QVElPTlMKKyNlbmRpZgorCisjaWZkZWYgSlBFR19JTlRFUk5BTF9PUFRJT05TCisKKworLyoKKyAqIFRoZXNlIGRlZmluZXMgaW5kaWNhdGUgd2hldGhlciB0byBpbmNsdWRlIHZhcmlvdXMgb3B0aW9uYWwgZnVuY3Rpb25zLgorICogVW5kZWZpbmluZyBzb21lIG9mIHRoZXNlIHN5bWJvbHMgd2lsbCBwcm9kdWNlIGEgc21hbGxlciBidXQgbGVzcyBjYXBhYmxlCisgKiBsaWJyYXJ5LiAgTm90ZSB0aGF0IHlvdSBjYW4gbGVhdmUgY2VydGFpbiBzb3VyY2UgZmlsZXMgb3V0IG9mIHRoZQorICogY29tcGlsYXRpb24vbGlua2luZyBwcm9jZXNzIGlmIHlvdSd2ZSAjdW5kZWYnZCB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2xzLgorICogKFlvdSBtYXkgSEFWRSB0byBkbyB0aGF0IGlmIHlvdXIgY29tcGlsZXIgZG9lc24ndCBsaWtlIG51bGwgc291cmNlIGZpbGVzLikKKyAqLworCisvKiBDYXBhYmlsaXR5IG9wdGlvbnMgY29tbW9uIHRvIGVuY29kZXIgYW5kIGRlY29kZXI6ICovCisKKyNkZWZpbmUgRENUX0lTTE9XX1NVUFBPUlRFRCAgICAgLyogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0gKi8KKyNkZWZpbmUgRENUX0lGQVNUX1NVUFBPUlRFRCAgICAgLyogZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kICovCisjZGVmaW5lIERDVF9GTE9BVF9TVVBQT1JURUQgICAgIC8qIGZsb2F0aW5nLXBvaW50OiBhY2N1cmF0ZSwgZmFzdCBvbiBmYXN0IEhXICovCisKKy8qIEVuY29kZXIgY2FwYWJpbGl0eSBvcHRpb25zOiAqLworCisjZGVmaW5lIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAvKiBNdWx0aXBsZS1zY2FuIEpQRUcgZmlsZXM/ICovCisjZGVmaW5lIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICAgICAvKiBQcm9ncmVzc2l2ZSBKUEVHPyAoUmVxdWlyZXMgTVVMVElTQ0FOKSovCisjZGVmaW5lIEVOVFJPUFlfT1BUX1NVUFBPUlRFRCAgICAgICAvKiBPcHRpbWl6YXRpb24gb2YgZW50cm9weSBjb2RpbmcgcGFybXM/ICovCisvKiBOb3RlOiBpZiB5b3Ugc2VsZWN0ZWQgMTItYml0IGRhdGEgcHJlY2lzaW9uLCBpdCBpcyBkYW5nZXJvdXMgdG8gdHVybiBvZmYKKyAqIEVOVFJPUFlfT1BUX1NVUFBPUlRFRC4gIFRoZSBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyBhcmUgb25seSBnb29kIGZvciA4LWJpdAorICogcHJlY2lzaW9uLCBzbyBqY2h1ZmYuYyBub3JtYWxseSB1c2VzIGVudHJvcHkgb3B0aW1pemF0aW9uIHRvIGNvbXB1dGUKKyAqIHVzYWJsZSB0YWJsZXMgZm9yIGhpZ2hlciBwcmVjaXNpb24uICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBkbyBvcHRpbWl6YXRpb24sCisgKiB5b3UnbGwgaGF2ZSB0byBzdXBwbHkgZGlmZmVyZW50IGRlZmF1bHQgSHVmZm1hbiB0YWJsZXMuCisgKiBUaGUgZXhhY3Qgc2FtZSBzdGF0ZW1lbnRzIGFwcGx5IGZvciBwcm9ncmVzc2l2ZSBKUEVHOiB0aGUgZGVmYXVsdCB0YWJsZXMKKyAqIGRvbid0IHdvcmsgZm9yIHByb2dyZXNzaXZlIG1vZGUuICAoVGhpcyBtYXkgZ2V0IGZpeGVkLCBob3dldmVyLikKKyAqLworI2RlZmluZSBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogSW5wdXQgaW1hZ2Ugc21vb3RoaW5nIG9wdGlvbj8gKi8KKworLyogRGVjb2RlciBjYXBhYmlsaXR5IG9wdGlvbnM6ICovCisKKyNkZWZpbmUgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEIC8qIE11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcz8gKi8KKyNkZWZpbmUgRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQgICAgIC8qIFByb2dyZXNzaXZlIEpQRUc/IChSZXF1aXJlcyBNVUxUSVNDQU4pKi8KKyNkZWZpbmUgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRCAgICAgIC8qIGpwZWdfc2F2ZV9tYXJrZXJzKCkgbmVlZGVkPyAqLworI2RlZmluZSBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogQmxvY2sgc21vb3RoaW5nPyAoUHJvZ3Jlc3NpdmUgb25seSkgKi8KKyNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAgICAgIC8qIE91dHB1dCByZXNjYWxpbmcgdmlhIElEQ1Q/ICovCisjdW5kZWYgIFVQU0FNUExFX1NDQUxJTkdfU1VQUE9SVEVEICAvKiBPdXRwdXQgcmVzY2FsaW5nIGF0IHVwc2FtcGxlIHN0YWdlPyAqLworI2RlZmluZSBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRCAgLyogRmFzdCBwYXRoIGZvciBzbG9wcHkgdXBzYW1wbGluZz8gKi8KKyNkZWZpbmUgUVVBTlRfMVBBU1NfU1VQUE9SVEVEICAgICAgIC8qIDEtcGFzcyBjb2xvciBxdWFudGl6YXRpb24/ICovCisjZGVmaW5lIFFVQU5UXzJQQVNTX1NVUFBPUlRFRCAgICAgICAvKiAyLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uPyAqLworCisvKiBtb3JlIGNhcGFiaWxpdHkgb3B0aW9ucyBsYXRlciwgbm8gZG91YnQgKi8KKworCisvKgorICogVGhlIFJHQl9SRUQsIFJHQl9HUkVFTiwgUkdCX0JMVUUsIGFuZCBSR0JfUElYRUxTSVpFIG1hY3JvcyBhcmUgYSB2ZXN0aWdpYWwKKyAqIGZlYXR1cmUgb2YgbGlianBlZy4gIFRoZSBpZGVhIHdhcyB0aGF0LCBpZiBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgbmVlZGVkCisgKiB0byBjb21wcmVzcyBmcm9tL2RlY29tcHJlc3MgdG8gYSBCR1IvQkdSWC9SR0JYL1hCR1IvWFJHQiBidWZmZXIsIHRoZXkgY291bGQKKyAqIGNoYW5nZSB0aGVzZSBtYWNyb3MsIHJlYnVpbGQgbGlianBlZywgYW5kIGxpbmsgdGhlaXIgYXBwbGljYXRpb24gc3RhdGljYWxseQorICogd2l0aCBpdC4gIEluIHJlYWxpdHksIGZldyBwZW9wbGUgZXZlciBkaWQgdGhpcywgYmVjYXVzZSB0aGVyZSB3ZXJlIHNvbWUKKyAqIHNldmVyZSByZXN0cmljdGlvbnMgaW52b2x2ZWQgKGNqcGVnIGFuZCBkanBlZyBubyBsb25nZXIgd29ya2VkIHByb3Blcmx5LAorICogY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyBSR0IgSlBFR3Mgbm8gbG9uZ2VyIHdvcmtlZCBwcm9wZXJseSwgYW5kIHRoZSBjb2xvcgorICogcXVhbnRpemVyIHdvdWxkbid0IHdvcmsgd2l0aCBwaXhlbCBzaXplcyBvdGhlciB0aGFuIDMuKSAgRnVydGhlcm1vcmUsIHNpbmNlCisgKiBhbGwgb2YgdGhlIE8vUy1zdXBwbGllZCB2ZXJzaW9ucyBvZiBsaWJqcGVnIHdlcmUgYnVpbHQgd2l0aCB0aGUgZGVmYXVsdAorICogdmFsdWVzIG9mIFJHQl9SRUQsIFJHQl9HUkVFTiwgUkdCX0JMVUUsIGFuZCBSR0JfUElYRUxTSVpFLCBtYW55IGFwcGxpY2F0aW9ucworICogaGF2ZSBjb21lIHRvIHJlZ2FyZCB0aGVzZSB2YWx1ZXMgYXMgaW1tdXRhYmxlLgorICoKKyAqIFRoZSBsaWJqcGVnLXR1cmJvIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyBwcm92aWRlIGEgbXVjaCBjbGVhbmVyIHdheSBvZgorICogY29tcHJlc3NpbmcgZnJvbS9kZWNvbXByZXNzaW5nIHRvIGJ1ZmZlcnMgd2l0aCBhcmJpdHJhcnkgY29tcG9uZW50IG9yZGVycworICogYW5kIHBpeGVsIHNpemVzLiAgVGh1cywgd2UgZG8gbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhlIHZhbHVlcyBvZiBSR0JfUkVELAorICogUkdCX0dSRUVOLCBSR0JfQkxVRSwgb3IgUkdCX1BJWEVMU0laRS4gIEluIGFkZGl0aW9uIHRvIHRoZSByZXN0cmljdGlvbnMKKyAqIGxpc3RlZCBhYm92ZSwgY2hhbmdpbmcgdGhlc2UgdmFsdWVzIHdpbGwgYWxzbyBicmVhayB0aGUgU0lNRCBleHRlbnNpb25zIGFuZAorICogdGhlIHJlZ3Jlc3Npb24gdGVzdHMuCisgKi8KKworI2RlZmluZSBSR0JfUkVEICAgICAgICAgMCAgICAgICAvKiBPZmZzZXQgb2YgUmVkIGluIGFuIFJHQiBzY2FubGluZSBlbGVtZW50ICovCisjZGVmaW5lIFJHQl9HUkVFTiAgICAgICAxICAgICAgIC8qIE9mZnNldCBvZiBHcmVlbiAqLworI2RlZmluZSBSR0JfQkxVRSAgICAgICAgMiAgICAgICAvKiBPZmZzZXQgb2YgQmx1ZSAqLworI2RlZmluZSBSR0JfUElYRUxTSVpFICAgMyAgICAgICAvKiBKU0FNUExFcyBwZXIgUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8KKworI2RlZmluZSBKUEVHX05VTUNTICAxNworCisjZGVmaW5lIEVYVF9SR0JfUkVEICAgICAgICAgMAorI2RlZmluZSBFWFRfUkdCX0dSRUVOICAgICAgIDEKKyNkZWZpbmUgRVhUX1JHQl9CTFVFICAgICAgICAyCisjZGVmaW5lIEVYVF9SR0JfUElYRUxTSVpFICAgMworCisjZGVmaW5lIEVYVF9SR0JYX1JFRCAgICAgICAgMAorI2RlZmluZSBFWFRfUkdCWF9HUkVFTiAgICAgIDEKKyNkZWZpbmUgRVhUX1JHQlhfQkxVRSAgICAgICAyCisjZGVmaW5lIEVYVF9SR0JYX1BJWEVMU0laRSAgNAorCisjZGVmaW5lIEVYVF9CR1JfUkVEICAgICAgICAgMgorI2RlZmluZSBFWFRfQkdSX0dSRUVOICAgICAgIDEKKyNkZWZpbmUgRVhUX0JHUl9CTFVFICAgICAgICAwCisjZGVmaW5lIEVYVF9CR1JfUElYRUxTSVpFICAgMworCisjZGVmaW5lIEVYVF9CR1JYX1JFRCAgICAgICAgMgorI2RlZmluZSBFWFRfQkdSWF9HUkVFTiAgICAgIDEKKyNkZWZpbmUgRVhUX0JHUlhfQkxVRSAgICAgICAwCisjZGVmaW5lIEVYVF9CR1JYX1BJWEVMU0laRSAgNAorCisjZGVmaW5lIEVYVF9YQkdSX1JFRCAgICAgICAgMworI2RlZmluZSBFWFRfWEJHUl9HUkVFTiAgICAgIDIKKyNkZWZpbmUgRVhUX1hCR1JfQkxVRSAgICAgICAxCisjZGVmaW5lIEVYVF9YQkdSX1BJWEVMU0laRSAgNAorCisjZGVmaW5lIEVYVF9YUkdCX1JFRCAgICAgICAgMQorI2RlZmluZSBFWFRfWFJHQl9HUkVFTiAgICAgIDIKKyNkZWZpbmUgRVhUX1hSR0JfQkxVRSAgICAgICAzCisjZGVmaW5lIEVYVF9YUkdCX1BJWEVMU0laRSAgNAorCitzdGF0aWMgY29uc3QgaW50IHJnYl9yZWRbSlBFR19OVU1DU10gPSB7CisgIC0xLCAtMSwgUkdCX1JFRCwgLTEsIC0xLCAtMSwgRVhUX1JHQl9SRUQsIEVYVF9SR0JYX1JFRCwKKyAgRVhUX0JHUl9SRUQsIEVYVF9CR1JYX1JFRCwgRVhUX1hCR1JfUkVELCBFWFRfWFJHQl9SRUQsCisgIEVYVF9SR0JYX1JFRCwgRVhUX0JHUlhfUkVELCBFWFRfWEJHUl9SRUQsIEVYVF9YUkdCX1JFRCwKKyAgLTEKK307CisKK3N0YXRpYyBjb25zdCBpbnQgcmdiX2dyZWVuW0pQRUdfTlVNQ1NdID0geworICAtMSwgLTEsIFJHQl9HUkVFTiwgLTEsIC0xLCAtMSwgRVhUX1JHQl9HUkVFTiwgRVhUX1JHQlhfR1JFRU4sCisgIEVYVF9CR1JfR1JFRU4sIEVYVF9CR1JYX0dSRUVOLCBFWFRfWEJHUl9HUkVFTiwgRVhUX1hSR0JfR1JFRU4sCisgIEVYVF9SR0JYX0dSRUVOLCBFWFRfQkdSWF9HUkVFTiwgRVhUX1hCR1JfR1JFRU4sIEVYVF9YUkdCX0dSRUVOLAorICAtMQorfTsKKworc3RhdGljIGNvbnN0IGludCByZ2JfYmx1ZVtKUEVHX05VTUNTXSA9IHsKKyAgLTEsIC0xLCBSR0JfQkxVRSwgLTEsIC0xLCAtMSwgRVhUX1JHQl9CTFVFLCBFWFRfUkdCWF9CTFVFLAorICBFWFRfQkdSX0JMVUUsIEVYVF9CR1JYX0JMVUUsIEVYVF9YQkdSX0JMVUUsIEVYVF9YUkdCX0JMVUUsCisgIEVYVF9SR0JYX0JMVUUsIEVYVF9CR1JYX0JMVUUsIEVYVF9YQkdSX0JMVUUsIEVYVF9YUkdCX0JMVUUsCisgIC0xCit9OworCitzdGF0aWMgY29uc3QgaW50IHJnYl9waXhlbHNpemVbSlBFR19OVU1DU10gPSB7CisgIC0xLCAtMSwgUkdCX1BJWEVMU0laRSwgLTEsIC0xLCAtMSwgRVhUX1JHQl9QSVhFTFNJWkUsIEVYVF9SR0JYX1BJWEVMU0laRSwKKyAgRVhUX0JHUl9QSVhFTFNJWkUsIEVYVF9CR1JYX1BJWEVMU0laRSwgRVhUX1hCR1JfUElYRUxTSVpFLCBFWFRfWFJHQl9QSVhFTFNJWkUsCisgIEVYVF9SR0JYX1BJWEVMU0laRSwgRVhUX0JHUlhfUElYRUxTSVpFLCBFWFRfWEJHUl9QSVhFTFNJWkUsIEVYVF9YUkdCX1BJWEVMU0laRSwKKyAgLTEKK307CisKKy8qIERlZmluaXRpb25zIGZvciBzcGVlZC1yZWxhdGVkIG9wdGltaXphdGlvbnMuICovCisKKy8qIE9uIHNvbWUgbWFjaGluZXMgKG5vdGFibHkgNjgwMDAgc2VyaWVzKSAiaW50IiBpcyAzMiBiaXRzLCBidXQgbXVsdGlwbHlpbmcKKyAqIHR3byAxNi1iaXQgc2hvcnRzIGlzIGZhc3RlciB0aGFuIG11bHRpcGx5aW5nIHR3byBpbnRzLiAgRGVmaW5lIE1VTFRJUExJRVIKKyAqIGFzIHNob3J0IG9uIHN1Y2ggYSBtYWNoaW5lLiAgTVVMVElQTElFUiBtdXN0IGJlIGF0IGxlYXN0IDE2IGJpdHMgd2lkZS4KKyAqLworCisjaWZuZGVmIE1VTFRJUExJRVIKKyNpZm5kZWYgV0lUSF9TSU1ECisjZGVmaW5lIE1VTFRJUExJRVIgIGludCAgICAgICAgIC8qIHR5cGUgZm9yIGZhc3Rlc3QgaW50ZWdlciBtdWx0aXBseSAqLworI2Vsc2UKKyNkZWZpbmUgTVVMVElQTElFUiAgc2hvcnQgICAgICAgLyogcHJlZmVyIDE2LWJpdCB3aXRoIFNJTUQgZm9yIHBhcmVsbGVsaXNtICovCisjZW5kaWYKKyNlbmRpZgorCisKKy8qIEZBU1RfRkxPQVQgc2hvdWxkIGJlIGVpdGhlciBmbG9hdCBvciBkb3VibGUsIHdoaWNoZXZlciBpcyBkb25lIGZhc3RlcgorICogYnkgeW91ciBjb21waWxlci4gIChOb3RlIHRoYXQgdGhpcyB0eXBlIGlzIG9ubHkgdXNlZCBpbiB0aGUgZmxvYXRpbmcgcG9pbnQKKyAqIERDVCByb3V0aW5lcywgc28gaXQgb25seSBtYXR0ZXJzIGlmIHlvdSd2ZSBkZWZpbmVkIERDVF9GTE9BVF9TVVBQT1JURUQuKQorICovCisKKyNpZm5kZWYgRkFTVF9GTE9BVAorI2RlZmluZSBGQVNUX0ZMT0FUICBmbG9hdAorI2VuZGlmCisKKyNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMX09QVElPTlMgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdfbmJpdHNfdGFibGUuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdfbmJpdHNfdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y3Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanBlZ19uYml0c190YWJsZS5oCkBAIC0wLDAgKzEsNDA5OCBAQAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIganBlZ19uYml0c190YWJsZVs2NTUzNl0gPSB7CisgICAwLCAgMSwgIDIsICAyLCAgMywgIDMsICAzLCAgMywgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LAorICAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwKKyAgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsCisgICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LAorICAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywKKyAgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsCisgICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LAorICAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywKKyAgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwKKyAgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwKKyAgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwKKyAgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksCisgICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwKKyAgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksCisgICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwKKyAgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksCisgICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwKKyAgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksCisgICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwKKyAgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksCisgICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsCisgIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwKKyAgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsCisgIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsCisgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsCisgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2Cit9OwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanBlZ2NvbXAuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyZDU0NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdjb21wLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGpwZWdjb21wLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIEpQRUcgY29tcGF0aWJpbGl0eSBtYWNyb3MKKyAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgY29uc2lkZXJlZCBpbnRlcm5hbCB0byB0aGUgSlBFRyBsaWJyYXJ5OyBtb3N0CisgKiBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgc2hvdWxkbid0IG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUuCisgKi8KKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyNkZWZpbmUgX0RDVF9zY2FsZWRfc2l6ZSAgRENUX2hfc2NhbGVkX3NpemUKKyNkZWZpbmUgX0RDVF9oX3NjYWxlZF9zaXplICBEQ1RfaF9zY2FsZWRfc2l6ZQorI2RlZmluZSBfRENUX3Zfc2NhbGVkX3NpemUgIERDVF92X3NjYWxlZF9zaXplCisjZGVmaW5lIF9taW5fRENUX3NjYWxlZF9zaXplICBtaW5fRENUX2hfc2NhbGVkX3NpemUKKyNkZWZpbmUgX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSAgbWluX0RDVF9oX3NjYWxlZF9zaXplCisjZGVmaW5lIF9taW5fRENUX3Zfc2NhbGVkX3NpemUgIG1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZQorI2RlZmluZSBfanBlZ193aWR0aCAganBlZ193aWR0aAorI2RlZmluZSBfanBlZ19oZWlnaHQgIGpwZWdfaGVpZ2h0CisjZWxzZQorI2RlZmluZSBfRENUX3NjYWxlZF9zaXplICBEQ1Rfc2NhbGVkX3NpemUKKyNkZWZpbmUgX0RDVF9oX3NjYWxlZF9zaXplICBEQ1Rfc2NhbGVkX3NpemUKKyNkZWZpbmUgX0RDVF92X3NjYWxlZF9zaXplICBEQ1Rfc2NhbGVkX3NpemUKKyNkZWZpbmUgX21pbl9EQ1Rfc2NhbGVkX3NpemUgIG1pbl9EQ1Rfc2NhbGVkX3NpemUKKyNkZWZpbmUgX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSAgbWluX0RDVF9zY2FsZWRfc2l6ZQorI2RlZmluZSBfbWluX0RDVF92X3NjYWxlZF9zaXplICBtaW5fRENUX3NjYWxlZF9zaXplCisjZGVmaW5lIF9qcGVnX3dpZHRoICBpbWFnZV93aWR0aAorI2RlZmluZSBfanBlZ19oZWlnaHQgIGltYWdlX2hlaWdodAorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qcGVnaW50LmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qcGVnaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzNmNhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdpbnQuaApAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIGpwZWdpbnQuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMTk5Ny0yMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBHb29nbGUsIEluYy4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgdmFyaW91cyBKUEVHIG1vZHVsZXMuCisgKiBUaGVzZSBkZWNsYXJhdGlvbnMgYXJlIGNvbnNpZGVyZWQgaW50ZXJuYWwgdG8gdGhlIEpQRUcgbGlicmFyeTsgbW9zdAorICogYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5IHNob3VsZG4ndCBuZWVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlLgorICovCisKKworLyogRGVjbGFyYXRpb25zIGZvciBib3RoIGNvbXByZXNzaW9uICYgZGVjb21wcmVzc2lvbiAqLworCit0eXBlZGVmIGVudW0geyAgICAgICAgICAgIC8qIE9wZXJhdGluZyBtb2RlcyBmb3IgYnVmZmVyIGNvbnRyb2xsZXJzICovCisgIEpCVUZfUEFTU19USFJVLCAgICAgICAgIC8qIFBsYWluIHN0cmlwd2lzZSBvcGVyYXRpb24gKi8KKyAgLyogUmVtYWluaW5nIG1vZGVzIHJlcXVpcmUgYSBmdWxsLWltYWdlIGJ1ZmZlciB0byBoYXZlIGJlZW4gY3JlYXRlZCAqLworICBKQlVGX1NBVkVfU09VUkNFLCAgICAgICAvKiBSdW4gc291cmNlIHN1Ym9iamVjdCBvbmx5LCBzYXZlIG91dHB1dCAqLworICBKQlVGX0NSQU5LX0RFU1QsICAgICAgICAvKiBSdW4gZGVzdCBzdWJvYmplY3Qgb25seSwgdXNpbmcgc2F2ZWQgZGF0YSAqLworICBKQlVGX1NBVkVfQU5EX1BBU1MgICAgICAvKiBSdW4gYm90aCBzdWJvYmplY3RzLCBzYXZlIG91dHB1dCAqLworfSBKX0JVRl9NT0RFOworCisvKiBWYWx1ZXMgb2YgZ2xvYmFsX3N0YXRlIGZpZWxkIChqZGFwaS5jIGhhcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvcmRlcmluZyEpICovCisjZGVmaW5lIENTVEFURV9TVEFSVCAgICAgMTAwICAgIC8qIGFmdGVyIGNyZWF0ZV9jb21wcmVzcyAqLworI2RlZmluZSBDU1RBVEVfU0NBTk5JTkcgIDEwMSAgICAvKiBzdGFydF9jb21wcmVzcyBkb25lLCB3cml0ZV9zY2FubGluZXMgT0sgKi8KKyNkZWZpbmUgQ1NUQVRFX1JBV19PSyAgICAxMDIgICAgLyogc3RhcnRfY29tcHJlc3MgZG9uZSwgd3JpdGVfcmF3X2RhdGEgT0sgKi8KKyNkZWZpbmUgQ1NUQVRFX1dSQ09FRlMgICAxMDMgICAgLyoganBlZ193cml0ZV9jb2VmZmljaWVudHMgZG9uZSAqLworI2RlZmluZSBEU1RBVEVfU1RBUlQgICAgIDIwMCAgICAvKiBhZnRlciBjcmVhdGVfZGVjb21wcmVzcyAqLworI2RlZmluZSBEU1RBVEVfSU5IRUFERVIgIDIwMSAgICAvKiByZWFkaW5nIGhlYWRlciBtYXJrZXJzLCBubyBTT1MgeWV0ICovCisjZGVmaW5lIERTVEFURV9SRUFEWSAgICAgMjAyICAgIC8qIGZvdW5kIFNPUywgcmVhZHkgZm9yIHN0YXJ0X2RlY29tcHJlc3MgKi8KKyNkZWZpbmUgRFNUQVRFX1BSRUxPQUQgICAyMDMgICAgLyogcmVhZGluZyBtdWx0aXNjYW4gZmlsZSBpbiBzdGFydF9kZWNvbXByZXNzKi8KKyNkZWZpbmUgRFNUQVRFX1BSRVNDQU4gICAyMDQgICAgLyogcGVyZm9ybWluZyBkdW1teSBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8KKyNkZWZpbmUgRFNUQVRFX1NDQU5OSU5HICAyMDUgICAgLyogc3RhcnRfZGVjb21wcmVzcyBkb25lLCByZWFkX3NjYW5saW5lcyBPSyAqLworI2RlZmluZSBEU1RBVEVfUkFXX09LICAgIDIwNiAgICAvKiBzdGFydF9kZWNvbXByZXNzIGRvbmUsIHJlYWRfcmF3X2RhdGEgT0sgKi8KKyNkZWZpbmUgRFNUQVRFX0JVRklNQUdFICAyMDcgICAgLyogZXhwZWN0aW5nIGpwZWdfc3RhcnRfb3V0cHV0ICovCisjZGVmaW5lIERTVEFURV9CVUZQT1NUICAgMjA4ICAgIC8qIGxvb2tpbmcgZm9yIFNPUy9FT0kgaW4ganBlZ19maW5pc2hfb3V0cHV0ICovCisjZGVmaW5lIERTVEFURV9SRENPRUZTICAgMjA5ICAgIC8qIHJlYWRpbmcgZmlsZSBpbiBqcGVnX3JlYWRfY29lZmZpY2llbnRzICovCisjZGVmaW5lIERTVEFURV9TVE9QUElORyAgMjEwICAgIC8qIGxvb2tpbmcgZm9yIEVPSSBpbiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzICovCisKKworLyogSkxPTkcgbXVzdCBob2xkIGF0IGxlYXN0IHNpZ25lZCAzMi1iaXQgdmFsdWVzLiAqLwordHlwZWRlZiBsb25nIEpMT05HOworCisKKy8qCisgKiBMZWZ0IHNoaWZ0IG1hY3JvIHRoYXQgaGFuZGxlcyBhIG5lZ2F0aXZlIG9wZXJhbmQgd2l0aG91dCBjYXVzaW5nIGFueQorICogc2FuaXRpemVyIHdhcm5pbmdzCisgKi8KKworI2RlZmluZSBMRUZUX1NISUZUKGEsIGIpICAoKEpMT05HKSgodW5zaWduZWQgbG9uZykoYSkgPDwgKGIpKSkKKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGNvbXByZXNzaW9uIG1vZHVsZXMgKi8KKworLyogTWFzdGVyIGNvbnRyb2wgbW9kdWxlICovCitzdHJ1Y3QganBlZ19jb21wX21hc3RlciB7CisgIHZvaWQgKCpwcmVwYXJlX2Zvcl9wYXNzKSAoal9jb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqcGFzc19zdGFydHVwKSAoal9jb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqZmluaXNoX3Bhc3MpIChqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisKKyAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCisgIGJvb2xlYW4gY2FsbF9wYXNzX3N0YXJ0dXA7ICAgIC8qIFRydWUgaWYgcGFzc19zdGFydHVwIG11c3QgYmUgY2FsbGVkICovCisgIGJvb2xlYW4gaXNfbGFzdF9wYXNzOyAgICAgICAgIC8qIFRydWUgZHVyaW5nIGxhc3QgcGFzcyAqLworfTsKKworLyogTWFpbiBidWZmZXIgY29udHJvbCAoZG93bnNhbXBsZWQtZGF0YSBidWZmZXIpICovCitzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciB7CisgIHZvaWQgKCpzdGFydF9wYXNzKSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKTsKKyAgdm9pZCAoKnByb2Nlc3NfZGF0YSkgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCk7Cit9OworCisvKiBDb21wcmVzc2lvbiBwcmVwcm9jZXNzaW5nIChkb3duc2FtcGxpbmcgaW5wdXQgYnVmZmVyIGNvbnRyb2wpICovCitzdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciB7CisgIHZvaWQgKCpzdGFydF9wYXNzKSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKTsKKyAgdm9pZCAoKnByZV9wcm9jZXNzX2RhdGEpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKTsKK307CisKKy8qIENvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sICovCitzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciB7CisgIHZvaWQgKCpzdGFydF9wYXNzKSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKTsKKyAgYm9vbGVhbiAoKmNvbXByZXNzX2RhdGEpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpOworfTsKKworLyogQ29sb3JzcGFjZSBjb252ZXJzaW9uICovCitzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgeworICB2b2lkICgqc3RhcnRfcGFzcykgKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKmNvbG9yX2NvbnZlcnQpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKTsKK307CisKKy8qIERvd25zYW1wbGluZyAqLworc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgeworICB2b2lkICgqc3RhcnRfcGFzcykgKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKmRvd25zYW1wbGUpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfaW5kZXgsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBfaW5kZXgpOworCisgIGJvb2xlYW4gbmVlZF9jb250ZXh0X3Jvd3M7ICAgIC8qIFRSVUUgaWYgbmVlZCByb3dzIGFib3ZlICYgYmVsb3cgKi8KK307CisKKy8qIEZvcndhcmQgRENUIChhbHNvIGNvbnRyb2xzIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbikgKi8KK3N0cnVjdCBqcGVnX2ZvcndhcmRfZGN0IHsKKyAgdm9pZCAoKnN0YXJ0X3Bhc3MpIChqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisgIC8qIHBlcmhhcHMgdGhpcyBzaG91bGQgYmUgYW4gYXJyYXk/Pz8gKi8KKyAgdm9pZCAoKmZvcndhcmRfRENUKSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpCTE9DS1JPVyBjb2VmX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpOworfTsKKworLyogRW50cm9weSBlbmNvZGluZyAqLworc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyIHsKKyAgdm9pZCAoKnN0YXJ0X3Bhc3MpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcyk7CisgIGJvb2xlYW4gKCplbmNvZGVfbWN1KSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpOworICB2b2lkICgqZmluaXNoX3Bhc3MpIChqX2NvbXByZXNzX3B0ciBjaW5mbyk7Cit9OworCisvKiBNYXJrZXIgd3JpdGluZyAqLworc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciB7CisgIHZvaWQgKCp3cml0ZV9maWxlX2hlYWRlcikgKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKndyaXRlX2ZyYW1lX2hlYWRlcikgKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKndyaXRlX3NjYW5faGVhZGVyKSAoal9jb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqd3JpdGVfZmlsZV90cmFpbGVyKSAoal9jb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqd3JpdGVfdGFibGVzX29ubHkpIChqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisgIC8qIFRoZXNlIHJvdXRpbmVzIGFyZSBleHBvcnRlZCB0byBhbGxvdyBpbnNlcnRpb24gb2YgZXh0cmEgbWFya2VycyAqLworICAvKiBQcm9iYWJseSBvbmx5IENPTSBhbmQgQVBQbiBtYXJrZXJzIHNob3VsZCBiZSB3cml0dGVuIHRoaXMgd2F5ICovCisgIHZvaWQgKCp3cml0ZV9tYXJrZXJfaGVhZGVyKSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4pOworICB2b2lkICgqd3JpdGVfbWFya2VyX2J5dGUpIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCk7Cit9OworCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgZGVjb21wcmVzc2lvbiBtb2R1bGVzICovCisKKy8qIE1hc3RlciBjb250cm9sIG1vZHVsZSAqLworc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciB7CisgIHZvaWQgKCpwcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqZmluaXNoX291dHB1dF9wYXNzKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CisKKyAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCisgIGJvb2xlYW4gaXNfZHVtbXlfcGFzczsgICAgICAgIC8qIFRydWUgZHVyaW5nIDFzdCBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8KKworICAvKiBQYXJ0aWFsIGRlY29tcHJlc3Npb24gdmFyaWFibGVzICovCisgIEpESU1FTlNJT04gZmlyc3RfaU1DVV9jb2w7CisgIEpESU1FTlNJT04gbGFzdF9pTUNVX2NvbDsKKyAgSkRJTUVOU0lPTiBmaXJzdF9NQ1VfY29sW01BWF9DT01QT05FTlRTXTsKKyAgSkRJTUVOU0lPTiBsYXN0X01DVV9jb2xbTUFYX0NPTVBPTkVOVFNdOworICBib29sZWFuIGppbml0X3Vwc2FtcGxlcl9ub19hbGxvYzsKK307CisKKy8qIElucHV0IGNvbnRyb2wgbW9kdWxlICovCitzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHsKKyAgaW50ICgqY29uc3VtZV9pbnB1dCkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqcmVzZXRfaW5wdXRfY29udHJvbGxlcikgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqc3RhcnRfaW5wdXRfcGFzcykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqZmluaXNoX2lucHV0X3Bhc3MpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8KKyAgYm9vbGVhbiBoYXNfbXVsdGlwbGVfc2NhbnM7ICAgLyogVHJ1ZSBpZiBmaWxlIGhhcyBtdWx0aXBsZSBzY2FucyAqLworICBib29sZWFuIGVvaV9yZWFjaGVkOyAgICAgICAgICAvKiBUcnVlIHdoZW4gRU9JIGhhcyBiZWVuIGNvbnN1bWVkICovCit9OworCisvKiBNYWluIGJ1ZmZlciBjb250cm9sIChkb3duc2FtcGxlZC1kYXRhIGJ1ZmZlcikgKi8KK3N0cnVjdCBqcGVnX2RfbWFpbl9jb250cm9sbGVyIHsKKyAgdm9pZCAoKnN0YXJ0X3Bhc3MpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSk7CisgIHZvaWQgKCpwcm9jZXNzX2RhdGEpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCk7Cit9OworCisvKiBDb2VmZmljaWVudCBidWZmZXIgY29udHJvbCAqLworc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgeworICB2b2lkICgqc3RhcnRfaW5wdXRfcGFzcykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICBpbnQgKCpjb25zdW1lX2RhdGEpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKnN0YXJ0X291dHB1dF9wYXNzKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CisgIGludCAoKmRlY29tcHJlc3NfZGF0YSkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1Zik7CisgIC8qIFBvaW50ZXIgdG8gYXJyYXkgb2YgY29lZmZpY2llbnQgdmlydHVhbCBhcnJheXMsIG9yIE5VTEwgaWYgbm9uZSAqLworICBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5czsKK307CisKKy8qIERlY29tcHJlc3Npb24gcG9zdHByb2Nlc3NpbmcgKGNvbG9yIHF1YW50aXphdGlvbiBidWZmZXIgY29udHJvbCkgKi8KK3N0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyIHsKKyAgdm9pZCAoKnN0YXJ0X3Bhc3MpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSk7CisgIHZvaWQgKCpwb3N0X3Byb2Nlc3NfZGF0YSkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpOworfTsKKworLyogTWFya2VyIHJlYWRpbmcgJiBwYXJzaW5nICovCitzdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyIHsKKyAgdm9pZCAoKnJlc2V0X21hcmtlcl9yZWFkZXIpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgLyogUmVhZCBtYXJrZXJzIHVudGlsIFNPUyBvciBFT0kuCisgICAqIFJldHVybnMgc2FtZSBjb2RlcyBhcyBhcmUgZGVmaW5lZCBmb3IganBlZ19jb25zdW1lX2lucHV0OgorICAgKiBKUEVHX1NVU1BFTkRFRCwgSlBFR19SRUFDSEVEX1NPUywgb3IgSlBFR19SRUFDSEVEX0VPSS4KKyAgICovCisgIGludCAoKnJlYWRfbWFya2VycykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICAvKiBSZWFkIGEgcmVzdGFydCBtYXJrZXIgLS0tIGV4cG9ydGVkIGZvciB1c2UgYnkgZW50cm9weSBkZWNvZGVyIG9ubHkgKi8KKyAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByZWFkX3Jlc3RhcnRfbWFya2VyOworCisgIC8qIFN0YXRlIG9mIG1hcmtlciByZWFkZXIgLS0tIG5vbWluYWxseSBpbnRlcm5hbCwgYnV0IGFwcGxpY2F0aW9ucworICAgKiBzdXBwbHlpbmcgQ09NIG9yIEFQUG4gaGFuZGxlcnMgbWlnaHQgbGlrZSB0byBrbm93IHRoZSBzdGF0ZS4KKyAgICovCisgIGJvb2xlYW4gc2F3X1NPSTsgICAgICAgICAgICAgIC8qIGZvdW5kIFNPST8gKi8KKyAgYm9vbGVhbiBzYXdfU09GOyAgICAgICAgICAgICAgLyogZm91bmQgU09GPyAqLworICBpbnQgbmV4dF9yZXN0YXJ0X251bTsgICAgICAgICAvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIGV4cGVjdGVkICgwLTcpICovCisgIHVuc2lnbmVkIGludCBkaXNjYXJkZWRfYnl0ZXM7IC8qICMgb2YgYnl0ZXMgc2tpcHBlZCBsb29raW5nIGZvciBhIG1hcmtlciAqLworfTsKKworLyogRW50cm9weSBkZWNvZGluZyAqLworc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyIHsKKyAgdm9pZCAoKnN0YXJ0X3Bhc3MpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgYm9vbGVhbiAoKmRlY29kZV9tY3UpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKTsKKworICAvKiBUaGlzIGlzIGhlcmUgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIGJhc2VsaW5lIGFuZCBwcm9ncmVzc2l2ZSBkZWNvZGVyczsgKi8KKyAgLyogb3RoZXIgbW9kdWxlcyBwcm9iYWJseSBzaG91bGQgbm90IHVzZSBpdCAqLworICBib29sZWFuIGluc3VmZmljaWVudF9kYXRhOyAgICAvKiBzZXQgVFJVRSBhZnRlciBlbWl0dGluZyB3YXJuaW5nICovCit9OworCisvKiBJbnZlcnNlIERDVCAoYWxzbyBwZXJmb3JtcyBkZXF1YW50aXphdGlvbikgKi8KK3R5cGVkZWYgdm9pZCAoKmludmVyc2VfRENUX21ldGhvZF9wdHIpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgeworICB2b2lkICgqc3RhcnRfcGFzcykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICAvKiBJdCBpcyB1c2VmdWwgdG8gYWxsb3cgZWFjaCBjb21wb25lbnQgdG8gaGF2ZSBhIHNlcGFyYXRlIElEQ1QgbWV0aG9kLiAqLworICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUW01BWF9DT01QT05FTlRTXTsKK307CisKKy8qIFVwc2FtcGxpbmcgKG5vdGUgdGhhdCB1cHNhbXBsZXIgbXVzdCBhbHNvIGNhbGwgY29sb3IgY29udmVydGVyKSAqLworc3RydWN0IGpwZWdfdXBzYW1wbGVyIHsKKyAgdm9pZCAoKnN0YXJ0X3Bhc3MpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKnVwc2FtcGxlKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCk7CisKKyAgYm9vbGVhbiBuZWVkX2NvbnRleHRfcm93czsgICAgLyogVFJVRSBpZiBuZWVkIHJvd3MgYWJvdmUgJiBiZWxvdyAqLworfTsKKworLyogQ29sb3JzcGFjZSBjb252ZXJzaW9uICovCitzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciB7CisgIHZvaWQgKCpzdGFydF9wYXNzKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CisgIHZvaWQgKCpjb2xvcl9jb252ZXJ0KSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpOworfTsKKworLyogQ29sb3IgcXVhbnRpemF0aW9uIG9yIGNvbG9yIHByZWNpc2lvbiByZWR1Y3Rpb24gKi8KK3N0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciB7CisgIHZvaWQgKCpzdGFydF9wYXNzKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc19wcmVfc2Nhbik7CisgIHZvaWQgKCpjb2xvcl9xdWFudGl6ZSkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CisgIHZvaWQgKCpmaW5pc2hfcGFzcykgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICB2b2lkICgqbmV3X2NvbG9yX21hcCkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworfTsKKworCisvKiBNaXNjZWxsYW5lb3VzIHVzZWZ1bCBtYWNyb3MgKi8KKworI3VuZGVmIE1BWAorI2RlZmluZSBNQVgoYSwgYikgICAgICAgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyN1bmRlZiBNSU4KKyNkZWZpbmUgTUlOKGEsIGIpICAgICAgICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisKKworLyogV2UgYXNzdW1lIHRoYXQgcmlnaHQgc2hpZnQgY29ycmVzcG9uZHMgdG8gc2lnbmVkIGRpdmlzaW9uIGJ5IDIgd2l0aAorICogcm91bmRpbmcgdG93YXJkcyBtaW51cyBpbmZpbml0eS4gIFRoaXMgaXMgY29ycmVjdCBmb3IgdHlwaWNhbCAiYXJpdGhtZXRpYworICogc2hpZnQiIGluc3RydWN0aW9ucyB0aGF0IHNoaWZ0IGluIGNvcGllcyBvZiB0aGUgc2lnbiBiaXQuICBCdXQgc29tZQorICogQyBjb21waWxlcnMgaW1wbGVtZW50ID4+IHdpdGggYW4gdW5zaWduZWQgc2hpZnQuICBGb3IgdGhlc2UgbWFjaGluZXMgeW91CisgKiBtdXN0IGRlZmluZSBSSUdIVF9TSElGVF9JU19VTlNJR05FRC4KKyAqIFJJR0hUX1NISUZUIHByb3ZpZGVzIGEgcHJvcGVyIHNpZ25lZCByaWdodCBzaGlmdCBvZiBhIEpMT05HIHF1YW50aXR5LgorICogSXQgaXMgb25seSBhcHBsaWVkIHdpdGggY29uc3RhbnQgc2hpZnQgY291bnRzLiAgU0hJRlRfVEVNUFMgbXVzdCBiZQorICogaW5jbHVkZWQgaW4gdGhlIHZhcmlhYmxlcyBvZiBhbnkgcm91dGluZSB1c2luZyBSSUdIVF9TSElGVC4KKyAqLworCisjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyNkZWZpbmUgU0hJRlRfVEVNUFMgICAgIEpMT05HIHNoaWZ0X3RlbXA7CisjZGVmaW5lIFJJR0hUX1NISUZUKHgsIHNoZnQpIFwKKyAgKChzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCisgICAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+KChKTE9ORykwKSkgPDwgKDMyIC0gKHNoZnQpKSkgOiBcCisgICAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQorI2Vsc2UKKyNkZWZpbmUgU0hJRlRfVEVNUFMKKyNkZWZpbmUgUklHSFRfU0hJRlQoeCwgc2hmdCkgICAgKCh4KSA+PiAoc2hmdCkpCisjZW5kaWYKKworCisvKiBDb21wcmVzc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKi8KK0VYVEVSTih2b2lkKSBqaW5pdF9jb21wcmVzc19tYXN0ZXIoal9jb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGppbml0X2NfbWFzdGVyX2NvbnRyb2woal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHRyYW5zY29kZV9vbmx5KTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jX21haW5fY29udHJvbGxlcihqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpOworRVhURVJOKHZvaWQpIGppbml0X2NfcHJlcF9jb250cm9sbGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcik7CitFWFRFUk4odm9pZCkgamluaXRfY19jb2VmX2NvbnRyb2xsZXIoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIoal9jb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGppbml0X2Rvd25zYW1wbGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9mb3J3YXJkX2RjdChqX2NvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4odm9pZCkgamluaXRfaHVmZl9lbmNvZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9lbmNvZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9hcml0aF9lbmNvZGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9tYXJrZXJfd3JpdGVyKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKy8qIERlY29tcHJlc3Npb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzICovCitFWFRFUk4odm9pZCkgamluaXRfbWFzdGVyX2RlY29tcHJlc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4odm9pZCkgamluaXRfZF9tYWluX2NvbnRyb2xsZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpOworRVhURVJOKHZvaWQpIGppbml0X2RfY29lZl9jb250cm9sbGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9kX3Bvc3RfY29udHJvbGxlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcik7CitFWFRFUk4odm9pZCkgamluaXRfaW5wdXRfY29udHJvbGxlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9tYXJrZXJfcmVhZGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGppbml0X2h1ZmZfZGVjb2RlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9kZWNvZGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGppbml0X2FyaXRoX2RlY29kZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4odm9pZCkgamluaXRfaW52ZXJzZV9kY3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4odm9pZCkgamluaXRfdXBzYW1wbGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGppbml0X2NvbG9yX2RlY29udmVydGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGppbml0XzFwYXNzX3F1YW50aXplcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqaW5pdF8ycGFzc19xdWFudGl6ZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4odm9pZCkgamluaXRfbWVyZ2VkX3Vwc2FtcGxlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKy8qIE1lbW9yeSBtYW5hZ2VyIGluaXRpYWxpemF0aW9uICovCitFWFRFUk4odm9pZCkgamluaXRfbWVtb3J5X21ncihqX2NvbW1vbl9wdHIgY2luZm8pOworCisvKiBVdGlsaXR5IHJvdXRpbmVzIGluIGp1dGlscy5jICovCitFWFRFUk4obG9uZykgamRpdl9yb3VuZF91cChsb25nIGEsIGxvbmcgYik7CitFWFRFUk4obG9uZykganJvdW5kX3VwKGxvbmcgYSwgbG9uZyBiKTsKK0VYVEVSTih2b2lkKSBqY29weV9zYW1wbGVfcm93cyhKU0FNUEFSUkFZIGlucHV0X2FycmF5LCBpbnQgc291cmNlX3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9hcnJheSwgaW50IGRlc3Rfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cywgSkRJTUVOU0lPTiBudW1fY29scyk7CitFWFRFUk4odm9pZCkgamNvcHlfYmxvY2tfcm93KEpCTE9DS1JPVyBpbnB1dF9yb3csIEpCTE9DS1JPVyBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpOworRVhURVJOKHZvaWQpIGp6ZXJvX2Zhcih2b2lkICp0YXJnZXQsIHNpemVfdCBieXRlc3RvemVybyk7CisvKiBDb25zdGFudCB0YWJsZXMgaW4ganV0aWxzLmMgKi8KKyNpZiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyB0YWJsZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkIGluIHY2YSAqLworZXh0ZXJuIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcltdOyAvKiBuYXR1cmFsIGNvZWYgb3JkZXIgdG8gemlnemFnIG9yZGVyICovCisjZW5kaWYKK2V4dGVybiBjb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyW107IC8qIHppZ3phZyBjb2VmIG9yZGVyIHRvIG5hdHVyYWwgb3JkZXIgKi8KKworLyogQXJpdGhtZXRpYyBjb2RpbmcgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiB0YWJsZXMgaW4gamFyaWNvbS5jICovCitleHRlcm4gY29uc3QgSkxPTkcganBlZ19hcml0YWJbXTsKKworLyogU3VwcHJlc3MgdW5kZWZpbmVkLXN0cnVjdHVyZSBjb21wbGFpbnRzIGlmIG5lY2Vzc2FyeS4gKi8KKworI2lmZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisjaWZuZGVmIEFNX01FTU9SWV9NQU5BR0VSICAgICAgIC8qIG9ubHkgam1lbW1nci5jIGRlZmluZXMgdGhlc2UgKi8KK3N0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9OworI2VuZGlmCisjZW5kaWYgLyogSU5DT01QTEVURV9UWVBFU19CUk9LRU4gKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdsaWIuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWdsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y4YWQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanBlZ2xpYi5oCkBAIC0wLDAgKzEsMTEzMiBAQAorLyoKKyAqIGpwZWdsaWIuaAorICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwMi0yMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgMjAxMy0yMDE0LCAyMDE2LTIwMTcsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgR29vZ2xlLCBJbmMuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBsaWJyYXJ5LgorICogTW9zdCBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgbmVlZCBvbmx5IGluY2x1ZGUgdGhpcyBmaWxlLAorICogYW5kIHBlcmhhcHMgamVycm9yLmggaWYgdGhleSB3YW50IHRvIGtub3cgdGhlIGV4YWN0IGVycm9yIGNvZGVzLgorICovCisKKyNpZm5kZWYgSlBFR0xJQl9ICisjZGVmaW5lIEpQRUdMSUJfSAorCisvKgorICogRmlyc3Qgd2UgaW5jbHVkZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHJlY29yZCBob3cgdGhpcworICogaW5zdGFsbGF0aW9uIG9mIHRoZSBKUEVHIGxpYnJhcnkgaXMgc2V0IHVwLiAgamNvbmZpZy5oIGNhbiBiZQorICogZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIG1hbnkgc3lzdGVtcy4gIGptb3JlY2ZnLmggY29udGFpbnMKKyAqIG1hbnVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtb3N0IHBlb3BsZSBuZWVkIG5vdCB3b3JyeSBhYm91dC4KKyAqLworCisjaWZuZGVmIEpDT05GSUdfSU5DTFVERUQgICAgICAgIC8qIGluIGNhc2UgamluY2x1ZGUuaCBhbHJlYWR5IGRpZCAqLworI2luY2x1ZGUgImpjb25maWcuaCIgICAgICAgICAgICAvKiB3aWRlbHkgdXNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KKyNlbmRpZgorI2luY2x1ZGUgImptb3JlY2ZnLmgiICAgICAgICAgICAvKiBzZWxkb20gY2hhbmdlZCBvcHRpb25zICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjaWZuZGVmIERPTlRfVVNFX0VYVEVSTl9DCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2VuZGlmCisKKworLyogVmFyaW91cyBjb25zdGFudHMgZGV0ZXJtaW5pbmcgdGhlIHNpemVzIG9mIHRoaW5ncy4KKyAqIEFsbCBvZiB0aGVzZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBKUEVHIHN0YW5kYXJkLCBzbyBkb24ndCBjaGFuZ2UgdGhlbQorICogaWYgeW91IHdhbnQgdG8gYmUgY29tcGF0aWJsZS4KKyAqLworCisjZGVmaW5lIERDVFNJWkUgICAgICAgICAgICAgOCAgIC8qIFRoZSBiYXNpYyBEQ1QgYmxvY2sgaXMgOHg4IHNhbXBsZXMgKi8KKyNkZWZpbmUgRENUU0laRTIgICAgICAgICAgICA2NCAgLyogRENUU0laRSBzcXVhcmVkOyAjIG9mIGVsZW1lbnRzIGluIGEgYmxvY2sgKi8KKyNkZWZpbmUgTlVNX1FVQU5UX1RCTFMgICAgICA0ICAgLyogUXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMyAqLworI2RlZmluZSBOVU1fSFVGRl9UQkxTICAgICAgIDQgICAvKiBIdWZmbWFuIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMyAqLworI2RlZmluZSBOVU1fQVJJVEhfVEJMUyAgICAgIDE2ICAvKiBBcml0aC1jb2RpbmcgdGFibGVzIGFyZSBudW1iZXJlZCAwLi4xNSAqLworI2RlZmluZSBNQVhfQ09NUFNfSU5fU0NBTiAgIDQgICAvKiBKUEVHIGxpbWl0IG9uICMgb2YgY29tcG9uZW50cyBpbiBvbmUgc2NhbiAqLworI2RlZmluZSBNQVhfU0FNUF9GQUNUT1IgICAgIDQgICAvKiBKUEVHIGxpbWl0IG9uIHNhbXBsaW5nIGZhY3RvcnMgKi8KKy8qIFVuZm9ydHVuYXRlbHksIHNvbWUgYm96byBhdCBBZG9iZSBzYXcgbm8gcmVhc29uIHRvIGJlIGJvdW5kIGJ5IHRoZSBzdGFuZGFyZDsKKyAqIHRoZSBQb3N0U2NyaXB0IERDVCBmaWx0ZXIgY2FuIGVtaXQgZmlsZXMgd2l0aCBtYW55IG1vcmUgdGhhbiAxMCBibG9ja3MvTUNVLgorICogSWYgeW91IGhhcHBlbiB0byBydW4gYWNyb3NzIHN1Y2ggYSBmaWxlLCB5b3UgY2FuIHVwIERfTUFYX0JMT0NLU19JTl9NQ1UKKyAqIHRvIGhhbmRsZSBpdC4gIFdlIGV2ZW4gbGV0IHlvdSBkbyB0aGlzIGZyb20gdGhlIGpjb25maWcuaCBmaWxlLiAgSG93ZXZlciwKKyAqIHdlIHN0cm9uZ2x5IGRpc2NvdXJhZ2UgY2hhbmdpbmcgQ19NQVhfQkxPQ0tTX0lOX01DVTsganVzdCBiZWNhdXNlIEFkb2JlCisgKiBzb21ldGltZXMgZW1pdHMgbm9uY29tcGxpYW50IGZpbGVzIGRvZXNuJ3QgbWVhbiB5b3Ugc2hvdWxkIHRvby4KKyAqLworI2RlZmluZSBDX01BWF9CTE9DS1NfSU5fTUNVICAgMTAgLyogY29tcHJlc3NvcidzIGxpbWl0IG9uIGJsb2NrcyBwZXIgTUNVICovCisjaWZuZGVmIERfTUFYX0JMT0NLU19JTl9NQ1UKKyNkZWZpbmUgRF9NQVhfQkxPQ0tTX0lOX01DVSAgIDEwIC8qIGRlY29tcHJlc3NvcidzIGxpbWl0IG9uIGJsb2NrcyBwZXIgTUNVICovCisjZW5kaWYKKworCisvKiBEYXRhIHN0cnVjdHVyZXMgZm9yIGltYWdlcyAoYXJyYXlzIG9mIHNhbXBsZXMgYW5kIG9mIERDVCBjb2VmZmljaWVudHMpLgorICovCisKK3R5cGVkZWYgSlNBTVBMRSAqSlNBTVBST1c7ICAgICAgLyogcHRyIHRvIG9uZSBpbWFnZSByb3cgb2YgcGl4ZWwgc2FtcGxlcy4gKi8KK3R5cGVkZWYgSlNBTVBST1cgKkpTQU1QQVJSQVk7ICAgLyogcHRyIHRvIHNvbWUgcm93cyAoYSAyLUQgc2FtcGxlIGFycmF5KSAqLwordHlwZWRlZiBKU0FNUEFSUkFZICpKU0FNUElNQUdFOyAvKiBhIDMtRCBzYW1wbGUgYXJyYXk6IHRvcCBpbmRleCBpcyBjb2xvciAqLworCit0eXBlZGVmIEpDT0VGIEpCTE9DS1tEQ1RTSVpFMl07IC8qIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMgKi8KK3R5cGVkZWYgSkJMT0NLICpKQkxPQ0tST1c7ICAgICAgLyogcG9pbnRlciB0byBvbmUgcm93IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLwordHlwZWRlZiBKQkxPQ0tST1cgKkpCTE9DS0FSUkFZOyAgICAgICAgIC8qIGEgMi1EIGFycmF5IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLwordHlwZWRlZiBKQkxPQ0tBUlJBWSAqSkJMT0NLSU1BR0U7ICAgICAgIC8qIGEgMy1EIGFycmF5IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLworCit0eXBlZGVmIEpDT0VGICpKQ09FRlBUUjsgICAgICAgIC8qIHVzZWZ1bCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMgKi8KKworCisvKiBUeXBlcyBmb3IgSlBFRyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZCB3b3JraW5nIHRhYmxlcy4gKi8KKworCisvKiBEQ1QgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGlzIGFycmF5IGdpdmVzIHRoZSBjb2VmZmljaWVudCBxdWFudGl6ZXJzIGluIG5hdHVyYWwgYXJyYXkgb3JkZXIKKyAgICogKG5vdCB0aGUgemlnemFnIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHN0b3JlZCBpbiBhIEpQRUcgRFFUIG1hcmtlcikuCisgICAqIENBVVRJT046IElKRyB2ZXJzaW9ucyBwcmlvciB0byB2NmEga2VwdCB0aGlzIGFycmF5IGluIHppZ3phZyBvcmRlci4KKyAgICovCisgIFVJTlQxNiBxdWFudHZhbFtEQ1RTSVpFMl07ICAgIC8qIHF1YW50aXphdGlvbiBzdGVwIGZvciBlYWNoIGNvZWZmaWNpZW50ICovCisgIC8qIFRoaXMgZmllbGQgaXMgdXNlZCBvbmx5IGR1cmluZyBjb21wcmVzc2lvbi4gIEl0J3MgaW5pdGlhbGl6ZWQgRkFMU0Ugd2hlbgorICAgKiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgYW5kIHNldCBUUlVFIHdoZW4gaXQncyBiZWVuIG91dHB1dCB0byB0aGUgZmlsZS4KKyAgICogWW91IGNvdWxkIHN1cHByZXNzIG91dHB1dCBvZiBhIHRhYmxlIGJ5IHNldHRpbmcgdGhpcyB0byBUUlVFLgorICAgKiAoU2VlIGpwZWdfc3VwcHJlc3NfdGFibGVzIGZvciBhbiBleGFtcGxlLikKKyAgICovCisgIGJvb2xlYW4gc2VudF90YWJsZTsgICAgICAgICAgIC8qIFRSVUUgd2hlbiB0YWJsZSBoYXMgYmVlbiBvdXRwdXQgKi8KK30gSlFVQU5UX1RCTDsKKworCisvKiBIdWZmbWFuIGNvZGluZyB0YWJsZXMuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogVGhlc2UgdHdvIGZpZWxkcyBkaXJlY3RseSByZXByZXNlbnQgdGhlIGNvbnRlbnRzIG9mIGEgSlBFRyBESFQgbWFya2VyICovCisgIFVJTlQ4IGJpdHNbMTddOyAgICAgICAgICAgICAgIC8qIGJpdHNba10gPSAjIG9mIHN5bWJvbHMgd2l0aCBjb2RlcyBvZiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggayBiaXRzOyBiaXRzWzBdIGlzIHVudXNlZCAqLworICBVSU5UOCBodWZmdmFsWzI1Nl07ICAgICAgICAgICAvKiBUaGUgc3ltYm9scywgaW4gb3JkZXIgb2YgaW5jciBjb2RlIGxlbmd0aCAqLworICAvKiBUaGlzIGZpZWxkIGlzIHVzZWQgb25seSBkdXJpbmcgY29tcHJlc3Npb24uICBJdCdzIGluaXRpYWxpemVkIEZBTFNFIHdoZW4KKyAgICogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIGFuZCBzZXQgVFJVRSB3aGVuIGl0J3MgYmVlbiBvdXRwdXQgdG8gdGhlIGZpbGUuCisgICAqIFlvdSBjb3VsZCBzdXBwcmVzcyBvdXRwdXQgb2YgYSB0YWJsZSBieSBzZXR0aW5nIHRoaXMgdG8gVFJVRS4KKyAgICogKFNlZSBqcGVnX3N1cHByZXNzX3RhYmxlcyBmb3IgYW4gZXhhbXBsZS4pCisgICAqLworICBib29sZWFuIHNlbnRfdGFibGU7ICAgICAgICAgICAvKiBUUlVFIHdoZW4gdGFibGUgaGFzIGJlZW4gb3V0cHV0ICovCit9IEpIVUZGX1RCTDsKKworCisvKiBCYXNpYyBpbmZvIGFib3V0IG9uZSBjb21wb25lbnQgKGNvbG9yIGNoYW5uZWwpLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIFRoZXNlIHZhbHVlcyBhcmUgZml4ZWQgb3ZlciB0aGUgd2hvbGUgaW1hZ2UuICovCisgIC8qIEZvciBjb21wcmVzc2lvbiwgdGhleSBtdXN0IGJlIHN1cHBsaWVkIGJ5IHBhcmFtZXRlciBzZXR1cDsgKi8KKyAgLyogZm9yIGRlY29tcHJlc3Npb24sIHRoZXkgYXJlIHJlYWQgZnJvbSB0aGUgU09GIG1hcmtlci4gKi8KKyAgaW50IGNvbXBvbmVudF9pZDsgICAgICAgICAgICAgLyogaWRlbnRpZmllciBmb3IgdGhpcyBjb21wb25lbnQgKDAuLjI1NSkgKi8KKyAgaW50IGNvbXBvbmVudF9pbmRleDsgICAgICAgICAgLyogaXRzIGluZGV4IGluIFNPRiBvciBjaW5mby0+Y29tcF9pbmZvW10gKi8KKyAgaW50IGhfc2FtcF9mYWN0b3I7ICAgICAgICAgICAgLyogaG9yaXpvbnRhbCBzYW1wbGluZyBmYWN0b3IgKDEuLjQpICovCisgIGludCB2X3NhbXBfZmFjdG9yOyAgICAgICAgICAgIC8qIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3RvciAoMS4uNCkgKi8KKyAgaW50IHF1YW50X3RibF9ubzsgICAgICAgICAgICAgLyogcXVhbnRpemF0aW9uIHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLworICAvKiBUaGVzZSB2YWx1ZXMgbWF5IHZhcnkgYmV0d2VlbiBzY2Fucy4gKi8KKyAgLyogRm9yIGNvbXByZXNzaW9uLCB0aGV5IG11c3QgYmUgc3VwcGxpZWQgYnkgcGFyYW1ldGVyIHNldHVwOyAqLworICAvKiBmb3IgZGVjb21wcmVzc2lvbiwgdGhleSBhcmUgcmVhZCBmcm9tIHRoZSBTT1MgbWFya2VyLiAqLworICAvKiBUaGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG1heSBub3QgdXNlIHRoZXNlIHZhcmlhYmxlcy4gKi8KKyAgaW50IGRjX3RibF9ubzsgICAgICAgICAgICAgICAgLyogREMgZW50cm9weSB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8KKyAgaW50IGFjX3RibF9ubzsgICAgICAgICAgICAgICAgLyogQUMgZW50cm9weSB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8KKworICAvKiBSZW1haW5pbmcgZmllbGRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHByaXZhdGUgYnkgYXBwbGljYXRpb25zLiAqLworCisgIC8qIFRoZXNlIHZhbHVlcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gc3RhcnR1cDogKi8KKyAgLyogQ29tcG9uZW50J3Mgc2l6ZSBpbiBEQ1QgYmxvY2tzLgorICAgKiBBbnkgZHVtbXkgYmxvY2tzIGFkZGVkIHRvIGNvbXBsZXRlIGFuIE1DVSBhcmUgbm90IGNvdW50ZWQ7IHRoZXJlZm9yZQorICAgKiB0aGVzZSB2YWx1ZXMgZG8gbm90IGRlcGVuZCBvbiB3aGV0aGVyIGEgc2NhbiBpcyBpbnRlcmxlYXZlZCBvciBub3QuCisgICAqLworICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrczsKKyAgSkRJTUVOU0lPTiBoZWlnaHRfaW5fYmxvY2tzOworICAvKiBTaXplIG9mIGEgRENUIGJsb2NrIGluIHNhbXBsZXMuICBBbHdheXMgRENUU0laRSBmb3IgY29tcHJlc3Npb24uCisgICAqIEZvciBkZWNvbXByZXNzaW9uIHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBmcm9tIG9uZSBEQ1QgYmxvY2ssCisgICAqIHJlZmxlY3RpbmcgYW55IHNjYWxpbmcgd2UgY2hvb3NlIHRvIGFwcGx5IGR1cmluZyB0aGUgSURDVCBzdGVwLgorICAgKiBWYWx1ZXMgZnJvbSAxIHRvIDE2IGFyZSBzdXBwb3J0ZWQuCisgICAqIE5vdGUgdGhhdCBkaWZmZXJlbnQgY29tcG9uZW50cyBtYXkgcmVjZWl2ZSBkaWZmZXJlbnQgSURDVCBzY2FsaW5ncy4KKyAgICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICBpbnQgRENUX2hfc2NhbGVkX3NpemU7CisgIGludCBEQ1Rfdl9zY2FsZWRfc2l6ZTsKKyNlbHNlCisgIGludCBEQ1Rfc2NhbGVkX3NpemU7CisjZW5kaWYKKyAgLyogVGhlIGRvd25zYW1wbGVkIGRpbWVuc2lvbnMgYXJlIHRoZSBjb21wb25lbnQncyBhY3R1YWwsIHVucGFkZGVkIG51bWJlcgorICAgKiBvZiBzYW1wbGVzIGF0IHRoZSBtYWluIGJ1ZmZlciAocHJlcHJvY2Vzc2luZy9jb21wcmVzc2lvbiBpbnRlcmZhY2UpLCB0aHVzCisgICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXgpCisgICAqIGFuZCBzaW1pbGFybHkgZm9yIGhlaWdodC4gIEZvciBkZWNvbXByZXNzaW9uLCBJRENUIHNjYWxpbmcgaXMgaW5jbHVkZWQsIHNvCisgICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXggKiBEQ1RfW2hfXXNjYWxlZF9zaXplL0RDVFNJWkUpCisgICAqLworICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoOyAgLyogYWN0dWFsIHdpZHRoIGluIHNhbXBsZXMgKi8KKyAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF9oZWlnaHQ7IC8qIGFjdHVhbCBoZWlnaHQgaW4gc2FtcGxlcyAqLworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCBvbmx5IGZvciBkZWNvbXByZXNzaW9uLiAgSW4gY2FzZXMgd2hlcmUgc29tZSBvZiB0aGUKKyAgICogY29tcG9uZW50cyB3aWxsIGJlIGlnbm9yZWQgKGVnIGdyYXlzY2FsZSBvdXRwdXQgZnJvbSBZQ2JDciBpbWFnZSksCisgICAqIHdlIGNhbiBza2lwIG1vc3QgY29tcHV0YXRpb25zIGZvciB0aGUgdW51c2VkIGNvbXBvbmVudHMuCisgICAqLworICBib29sZWFuIGNvbXBvbmVudF9uZWVkZWQ7ICAgICAvKiBkbyB3ZSBuZWVkIHRoZSB2YWx1ZSBvZiB0aGlzIGNvbXBvbmVudD8gKi8KKworICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJlZm9yZSBzdGFydGluZyBhIHNjYW4gb2YgdGhlIGNvbXBvbmVudC4gKi8KKyAgLyogVGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtYXkgbm90IHVzZSB0aGVzZSB2YXJpYWJsZXMuICovCisgIGludCBNQ1Vfd2lkdGg7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgaG9yaXpvbnRhbGx5ICovCisgIGludCBNQ1VfaGVpZ2h0OyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgdmVydGljYWxseSAqLworICBpbnQgTUNVX2Jsb2NrczsgICAgICAgICAgICAgICAvKiBNQ1Vfd2lkdGggKiBNQ1VfaGVpZ2h0ICovCisgIGludCBNQ1Vfc2FtcGxlX3dpZHRoOyAgICAgICAgIC8qIE1DVSB3aWR0aCBpbiBzYW1wbGVzLCBNQ1Vfd2lkdGgqRENUX1toX11zY2FsZWRfc2l6ZSAqLworICBpbnQgbGFzdF9jb2xfd2lkdGg7ICAgICAgICAgICAvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgYWNyb3NzIGluIGxhc3QgTUNVICovCisgIGludCBsYXN0X3Jvd19oZWlnaHQ7ICAgICAgICAgIC8qICMgb2Ygbm9uLWR1bW15IGJsb2NrcyBkb3duIGluIGxhc3QgTUNVICovCisKKyAgLyogU2F2ZWQgcXVhbnRpemF0aW9uIHRhYmxlIGZvciBjb21wb25lbnQ7IE5VTEwgaWYgbm9uZSB5ZXQgc2F2ZWQuCisgICAqIFNlZSBqZGlucHV0LmMgY29tbWVudHMgYWJvdXQgdGhlIG5lZWQgZm9yIHRoaXMgaW5mb3JtYXRpb24uCisgICAqIFRoaXMgZmllbGQgaXMgY3VycmVudGx5IHVzZWQgb25seSBmb3IgZGVjb21wcmVzc2lvbi4KKyAgICovCisgIEpRVUFOVF9UQkwgKnF1YW50X3RhYmxlOworCisgIC8qIFByaXZhdGUgcGVyLWNvbXBvbmVudCBzdG9yYWdlIGZvciBEQ1Qgb3IgSURDVCBzdWJzeXN0ZW0uICovCisgIHZvaWQgKmRjdF90YWJsZTsKK30ganBlZ19jb21wb25lbnRfaW5mbzsKKworCisvKiBUaGUgc2NyaXB0IGZvciBlbmNvZGluZyBhIG11bHRpcGxlLXNjYW4gZmlsZSBpcyBhbiBhcnJheSBvZiB0aGVzZTogKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgY29tcHNfaW5fc2NhbjsgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29tcG9uZW50cyBlbmNvZGVkIGluIHRoaXMgc2NhbiAqLworICBpbnQgY29tcG9uZW50X2luZGV4W01BWF9DT01QU19JTl9TQ0FOXTsgLyogdGhlaXIgU09GL2NvbXBfaW5mb1tdIGluZGV4ZXMgKi8KKyAgaW50IFNzLCBTZTsgICAgICAgICAgICAgICAgICAgLyogcHJvZ3Jlc3NpdmUgSlBFRyBzcGVjdHJhbCBzZWxlY3Rpb24gcGFybXMgKi8KKyAgaW50IEFoLCBBbDsgICAgICAgICAgICAgICAgICAgLyogcHJvZ3Jlc3NpdmUgSlBFRyBzdWNjZXNzaXZlIGFwcHJveC4gcGFybXMgKi8KK30ganBlZ19zY2FuX2luZm87CisKKy8qIFRoZSBkZWNvbXByZXNzb3IgY2FuIHNhdmUgQVBQbiBhbmQgQ09NIG1hcmtlcnMgaW4gYSBsaXN0IG9mIHRoZXNlOiAqLworCit0eXBlZGVmIHN0cnVjdCBqcGVnX21hcmtlcl9zdHJ1Y3QgKmpwZWdfc2F2ZWRfbWFya2VyX3B0cjsKKworc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCB7CisgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBuZXh0OyAgIC8qIG5leHQgaW4gbGlzdCwgb3IgTlVMTCAqLworICBVSU5UOCBtYXJrZXI7ICAgICAgICAgICAgICAgICAvKiBtYXJrZXIgY29kZTogSlBFR19DT00sIG9yIEpQRUdfQVBQMCtuICovCisgIHVuc2lnbmVkIGludCBvcmlnaW5hbF9sZW5ndGg7IC8qICMgYnl0ZXMgb2YgZGF0YSBpbiB0aGUgZmlsZSAqLworICB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGg7ICAgICAvKiAjIGJ5dGVzIG9mIGRhdGEgc2F2ZWQgYXQgZGF0YVtdICovCisgIEpPQ1RFVCAqZGF0YTsgICAgICAgICAgICAgICAgIC8qIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgbWFya2VyICovCisgIC8qIHRoZSBtYXJrZXIgbGVuZ3RoIHdvcmQgaXMgbm90IGNvdW50ZWQgaW4gZGF0YV9sZW5ndGggb3Igb3JpZ2luYWxfbGVuZ3RoICovCit9OworCisvKiBLbm93biBjb2xvciBzcGFjZXMuICovCisKKyNkZWZpbmUgSkNTX0VYVEVOU0lPTlMgIDEKKyNkZWZpbmUgSkNTX0FMUEhBX0VYVEVOU0lPTlMgIDEKKwordHlwZWRlZiBlbnVtIHsKKyAgSkNTX1VOS05PV04sICAgICAgICAgICAgLyogZXJyb3IvdW5zcGVjaWZpZWQgKi8KKyAgSkNTX0dSQVlTQ0FMRSwgICAgICAgICAgLyogbW9ub2Nocm9tZSAqLworICBKQ1NfUkdCLCAgICAgICAgICAgICAgICAvKiByZWQvZ3JlZW4vYmx1ZSBhcyBzcGVjaWZpZWQgYnkgdGhlIFJHQl9SRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJHQl9HUkVFTiwgUkdCX0JMVUUsIGFuZCBSR0JfUElYRUxTSVpFIG1hY3JvcyAqLworICBKQ1NfWUNiQ3IsICAgICAgICAgICAgICAvKiBZL0NiL0NyIChhbHNvIGtub3duIGFzIFlVVikgKi8KKyAgSkNTX0NNWUssICAgICAgICAgICAgICAgLyogQy9NL1kvSyAqLworICBKQ1NfWUNDSywgICAgICAgICAgICAgICAvKiBZL0NiL0NyL0sgKi8KKyAgSkNTX0VYVF9SR0IsICAgICAgICAgICAgLyogcmVkL2dyZWVuL2JsdWUgKi8KKyAgSkNTX0VYVF9SR0JYLCAgICAgICAgICAgLyogcmVkL2dyZWVuL2JsdWUveCAqLworICBKQ1NfRVhUX0JHUiwgICAgICAgICAgICAvKiBibHVlL2dyZWVuL3JlZCAqLworICBKQ1NfRVhUX0JHUlgsICAgICAgICAgICAvKiBibHVlL2dyZWVuL3JlZC94ICovCisgIEpDU19FWFRfWEJHUiwgICAgICAgICAgIC8qIHgvYmx1ZS9ncmVlbi9yZWQgKi8KKyAgSkNTX0VYVF9YUkdCLCAgICAgICAgICAgLyogeC9yZWQvZ3JlZW4vYmx1ZSAqLworICAvKiBXaGVuIG91dF9jb2xvcl9zcGFjZSBpdCBzZXQgdG8gSkNTX0VYVF9SR0JYLCBKQ1NfRVhUX0JHUlgsIEpDU19FWFRfWEJHUiwKKyAgICAgb3IgSkNTX0VYVF9YUkdCIGR1cmluZyBkZWNvbXByZXNzaW9uLCB0aGUgWCBieXRlIGlzIHVuZGVmaW5lZCwgYW5kIGluCisgICAgIG9yZGVyIHRvIGVuc3VyZSB0aGUgYmVzdCBwZXJmb3JtYW5jZSwgbGlianBlZy10dXJibyBjYW4gc2V0IHRoYXQgYnl0ZSB0bworICAgICB3aGF0ZXZlciB2YWx1ZSBpdCB3aXNoZXMuICBVc2UgdGhlIGZvbGxvd2luZyBjb2xvcnNwYWNlIGNvbnN0YW50cyB0bworICAgICBlbnN1cmUgdGhhdCB0aGUgWCBieXRlIGlzIHNldCB0byAweEZGLCBzbyB0aGF0IGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbgorICAgICBvcGFxdWUgYWxwaGEgY2hhbm5lbC4gKi8KKyAgSkNTX0VYVF9SR0JBLCAgICAgICAgICAgLyogcmVkL2dyZWVuL2JsdWUvYWxwaGEgKi8KKyAgSkNTX0VYVF9CR1JBLCAgICAgICAgICAgLyogYmx1ZS9ncmVlbi9yZWQvYWxwaGEgKi8KKyAgSkNTX0VYVF9BQkdSLCAgICAgICAgICAgLyogYWxwaGEvYmx1ZS9ncmVlbi9yZWQgKi8KKyAgSkNTX0VYVF9BUkdCLCAgICAgICAgICAgLyogYWxwaGEvcmVkL2dyZWVuL2JsdWUgKi8KKyAgSkNTX1JHQjU2NSAgICAgICAgICAgICAgLyogNS1iaXQgcmVkLzYtYml0IGdyZWVuLzUtYml0IGJsdWUgKi8KK30gSl9DT0xPUl9TUEFDRTsKKworLyogRENUL0lEQ1QgYWxnb3JpdGhtIG9wdGlvbnMuICovCisKK3R5cGVkZWYgZW51bSB7CisgIEpEQ1RfSVNMT1csICAgICAgICAgICAgIC8qIHNsb3cgYnV0IGFjY3VyYXRlIGludGVnZXIgYWxnb3JpdGhtICovCisgIEpEQ1RfSUZBU1QsICAgICAgICAgICAgIC8qIGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZCAqLworICBKRENUX0ZMT0FUICAgICAgICAgICAgICAvKiBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIVyAqLworfSBKX0RDVF9NRVRIT0Q7CisKKyNpZm5kZWYgSkRDVF9ERUZBVUxUICAgICAgICAgICAgLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCisjZGVmaW5lIEpEQ1RfREVGQVVMVCAgSkRDVF9JU0xPVworI2VuZGlmCisjaWZuZGVmIEpEQ1RfRkFTVEVTVCAgICAgICAgICAgIC8qIG1heSBiZSBvdmVycmlkZGVuIGluIGpjb25maWcuaCAqLworI2RlZmluZSBKRENUX0ZBU1RFU1QgIEpEQ1RfSUZBU1QKKyNlbmRpZgorCisvKiBEaXRoZXJpbmcgb3B0aW9ucyBmb3IgZGVjb21wcmVzc2lvbi4gKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgSkRJVEhFUl9OT05FLCAgICAgICAgICAgLyogbm8gZGl0aGVyaW5nICovCisgIEpESVRIRVJfT1JERVJFRCwgICAgICAgIC8qIHNpbXBsZSBvcmRlcmVkIGRpdGhlciAqLworICBKRElUSEVSX0ZTICAgICAgICAgICAgICAvKiBGbG95ZC1TdGVpbmJlcmcgZXJyb3IgZGlmZnVzaW9uIGRpdGhlciAqLworfSBKX0RJVEhFUl9NT0RFOworCisKKy8qIENvbW1vbiBmaWVsZHMgYmV0d2VlbiBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG1hc3RlciBzdHJ1Y3RzLiAqLworCisjZGVmaW5lIGpwZWdfY29tbW9uX2ZpZWxkcyBcCisgIHN0cnVjdCBqcGVnX2Vycm9yX21nciAqZXJyOyAgIC8qIEVycm9yIGhhbmRsZXIgbW9kdWxlICovIFwKKyAgc3RydWN0IGpwZWdfbWVtb3J5X21nciAqbWVtOyAgLyogTWVtb3J5IG1hbmFnZXIgbW9kdWxlICovIFwKKyAgc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyICpwcm9ncmVzczsgLyogUHJvZ3Jlc3MgbW9uaXRvciwgb3IgTlVMTCBpZiBub25lICovIFwKKyAgdm9pZCAqY2xpZW50X2RhdGE7ICAgICAgICAgICAgLyogQXZhaWxhYmxlIGZvciB1c2UgYnkgYXBwbGljYXRpb24gKi8gXAorICBib29sZWFuIGlzX2RlY29tcHJlc3NvcjsgICAgICAvKiBTbyBjb21tb24gY29kZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCAqLyBcCisgIGludCBnbG9iYWxfc3RhdGUgICAgICAgICAgICAgIC8qIEZvciBjaGVja2luZyBjYWxsIHNlcXVlbmNlIHZhbGlkaXR5ICovCisKKy8qIFJvdXRpbmVzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgYm90aCBoYWx2ZXMgb2YgdGhlIGxpYnJhcnkgYXJlIGRlY2xhcmVkCisgKiB0byByZWNlaXZlIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gIFRoZXJlIGFyZSBubyBhY3R1YWwgaW5zdGFuY2VzIG9mCisgKiBqcGVnX2NvbW1vbl9zdHJ1Y3QsIG9ubHkgb2YganBlZ19jb21wcmVzc19zdHJ1Y3QgYW5kIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QuCisgKi8KK3N0cnVjdCBqcGVnX2NvbW1vbl9zdHJ1Y3QgeworICBqcGVnX2NvbW1vbl9maWVsZHM7ICAgICAgICAgICAvKiBGaWVsZHMgY29tbW9uIHRvIGJvdGggbWFzdGVyIHN0cnVjdCB0eXBlcyAqLworICAvKiBBZGRpdGlvbmFsIGZpZWxkcyBmb2xsb3cgaW4gYW4gYWN0dWFsIGpwZWdfY29tcHJlc3Nfc3RydWN0IG9yCisgICAqIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QuICBBbGwgdGhyZWUgc3RydWN0cyBtdXN0IGFncmVlIG9uIHRoZXNlCisgICAqIGluaXRpYWwgZmllbGRzISAgKFRoaXMgd291bGQgYmUgYSBsb3QgY2xlYW5lciBpbiBDKysuKQorICAgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGpwZWdfY29tbW9uX3N0cnVjdCAqal9jb21tb25fcHRyOwordHlwZWRlZiBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgKmpfY29tcHJlc3NfcHRyOwordHlwZWRlZiBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCAqal9kZWNvbXByZXNzX3B0cjsKKworCisvKiBNYXN0ZXIgcmVjb3JkIGZvciBhIGNvbXByZXNzaW9uIGluc3RhbmNlICovCisKK3N0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCB7CisgIGpwZWdfY29tbW9uX2ZpZWxkczsgICAgICAgICAgIC8qIEZpZWxkcyBzaGFyZWQgd2l0aCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0ICovCisKKyAgLyogRGVzdGluYXRpb24gZm9yIGNvbXByZXNzZWQgZGF0YSAqLworICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKmRlc3Q7CisKKyAgLyogRGVzY3JpcHRpb24gb2Ygc291cmNlIGltYWdlIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBmaWxsZWQgaW4gYnkKKyAgICogb3V0ZXIgYXBwbGljYXRpb24gYmVmb3JlIHN0YXJ0aW5nIGNvbXByZXNzaW9uLiAgaW5fY29sb3Jfc3BhY2UgbXVzdAorICAgKiBiZSBjb3JyZWN0IGJlZm9yZSB5b3UgY2FuIGV2ZW4gY2FsbCBqcGVnX3NldF9kZWZhdWx0cygpLgorICAgKi8KKworICBKRElNRU5TSU9OIGltYWdlX3dpZHRoOyAgICAgICAvKiBpbnB1dCBpbWFnZSB3aWR0aCAqLworICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsgICAgICAvKiBpbnB1dCBpbWFnZSBoZWlnaHQgKi8KKyAgaW50IGlucHV0X2NvbXBvbmVudHM7ICAgICAgICAgLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIGlucHV0IGltYWdlICovCisgIEpfQ09MT1JfU1BBQ0UgaW5fY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KKworICBkb3VibGUgaW5wdXRfZ2FtbWE7ICAgICAgICAgICAvKiBpbWFnZSBnYW1tYSBvZiBpbnB1dCBpbWFnZSAqLworCisgIC8qIENvbXByZXNzaW9uIHBhcmFtZXRlcnMgLS0tIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZworICAgKiBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuICBXZSByZWNvbW1lbmQgY2FsbGluZyBqcGVnX3NldF9kZWZhdWx0cygpIHRvCisgICAqIGluaXRpYWxpemUgZXZlcnl0aGluZyB0byByZWFzb25hYmxlIGRlZmF1bHRzLCB0aGVuIGNoYW5naW5nIGFueXRoaW5nCisgICAqIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpY2FsbHkgd2FudHMgdG8gY2hhbmdlLiAgVGhhdCB3YXkgeW91IHdvbid0IGdldAorICAgKiBidXJudCB3aGVuIG5ldyBwYXJhbWV0ZXJzIGFyZSBhZGRlZC4gIEFsc28gbm90ZSB0aGF0IHRoZXJlIGFyZSBzZXZlcmFsCisgICAqIGhlbHBlciByb3V0aW5lcyB0byBzaW1wbGlmeSBjaGFuZ2luZyBwYXJhbWV0ZXJzLgorICAgKi8KKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgdW5zaWduZWQgaW50IHNjYWxlX251bSwgc2NhbGVfZGVub207IC8qIGZyYWN0aW9uIGJ5IHdoaWNoIHRvIHNjYWxlIGltYWdlICovCisKKyAgSkRJTUVOU0lPTiBqcGVnX3dpZHRoOyAgICAgICAgLyogc2NhbGVkIEpQRUcgaW1hZ2Ugd2lkdGggKi8KKyAgSkRJTUVOU0lPTiBqcGVnX2hlaWdodDsgICAgICAgLyogc2NhbGVkIEpQRUcgaW1hZ2UgaGVpZ2h0ICovCisgIC8qIERpbWVuc2lvbnMgb2YgYWN0dWFsIEpQRUcgaW1hZ2UgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gZmlsZSwKKyAgICogZGVyaXZlZCBmcm9tIGlucHV0IGRpbWVuc2lvbnMgYnkgc2NhbGluZyBmYWN0b3JzIGFib3ZlLgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGJ5IGpwZWdfc3RhcnRfY29tcHJlc3MoKS4KKyAgICogWW91IGNhbiBhbHNvIHVzZSBqcGVnX2NhbGNfanBlZ19kaW1lbnNpb25zKCkgdG8gZGV0ZXJtaW5lIHRoZXNlIHZhbHVlcworICAgKiBpbiBhZHZhbmNlIG9mIGNhbGxpbmcganBlZ19zdGFydF9jb21wcmVzcygpLgorICAgKi8KKyNlbmRpZgorCisgIGludCBkYXRhX3ByZWNpc2lvbjsgICAgICAgICAgIC8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIGltYWdlIGRhdGEgKi8KKworICBpbnQgbnVtX2NvbXBvbmVudHM7ICAgICAgICAgICAvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gSlBFRyBpbWFnZSAqLworICBKX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2Ugb2YgSlBFRyBpbWFnZSAqLworCisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBfaW5mbzsKKyAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovCisKKyAgSlFVQU5UX1RCTCAqcXVhbnRfdGJsX3B0cnNbTlVNX1FVQU5UX1RCTFNdOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgaW50IHFfc2NhbGVfZmFjdG9yW05VTV9RVUFOVF9UQkxTXTsKKyNlbmRpZgorICAvKiBwdHJzIHRvIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQsCisgICAqIGFuZCBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvcnMgKHBlcmNlbnRhZ2UsIGluaXRpYWxpemVkIDEwMCkuCisgICAqLworCisgIEpIVUZGX1RCTCAqZGNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsKKyAgSkhVRkZfVEJMICphY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdOworICAvKiBwdHJzIHRvIEh1ZmZtYW4gY29kaW5nIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLworCisgIFVJTlQ4IGFyaXRoX2RjX0xbTlVNX0FSSVRIX1RCTFNdOyAvKiBMIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworICBVSU5UOCBhcml0aF9kY19VW05VTV9BUklUSF9UQkxTXTsgLyogVSB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKyAgVUlOVDggYXJpdGhfYWNfS1tOVU1fQVJJVEhfVEJMU107IC8qIEt4IHZhbHVlcyBmb3IgQUMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworCisgIGludCBudW1fc2NhbnM7ICAgICAgICAgICAgICAgIC8qICMgb2YgZW50cmllcyBpbiBzY2FuX2luZm8gYXJyYXkgKi8KKyAgY29uc3QganBlZ19zY2FuX2luZm8gKnNjYW5faW5mbzsgLyogc2NyaXB0IGZvciBtdWx0aS1zY2FuIGZpbGUsIG9yIE5VTEwgKi8KKyAgLyogVGhlIGRlZmF1bHQgdmFsdWUgb2Ygc2Nhbl9pbmZvIGlzIE5VTEwsIHdoaWNoIGNhdXNlcyBhIHNpbmdsZS1zY2FuCisgICAqIHNlcXVlbnRpYWwgSlBFRyBmaWxlIHRvIGJlIGVtaXR0ZWQuICBUbyBjcmVhdGUgYSBtdWx0aS1zY2FuIGZpbGUsCisgICAqIHNldCBudW1fc2NhbnMgYW5kIHNjYW5faW5mbyB0byBwb2ludCB0byBhbiBhcnJheSBvZiBzY2FuIGRlZmluaXRpb25zLgorICAgKi8KKworICBib29sZWFuIHJhd19kYXRhX2luOyAgICAgICAgICAvKiBUUlVFPWNhbGxlciBzdXBwbGllcyBkb3duc2FtcGxlZCBkYXRhICovCisgIGJvb2xlYW4gYXJpdGhfY29kZTsgICAgICAgICAgIC8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KKyAgYm9vbGVhbiBvcHRpbWl6ZV9jb2Rpbmc7ICAgICAgLyogVFJVRT1vcHRpbWl6ZSBlbnRyb3B5IGVuY29kaW5nIHBhcm1zICovCisgIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsgICAgIC8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgYm9vbGVhbiBkb19mYW5jeV9kb3duc2FtcGxpbmc7IC8qIFRSVUU9YXBwbHkgZmFuY3kgZG93bnNhbXBsaW5nICovCisjZW5kaWYKKyAgaW50IHNtb290aGluZ19mYWN0b3I7ICAgICAgICAgLyogMS4uMTAwLCBvciAwIGZvciBubyBpbnB1dCBzbW9vdGhpbmcgKi8KKyAgSl9EQ1RfTUVUSE9EIGRjdF9tZXRob2Q7ICAgICAgLyogRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLworCisgIC8qIFRoZSByZXN0YXJ0IGludGVydmFsIGNhbiBiZSBzcGVjaWZpZWQgaW4gYWJzb2x1dGUgTUNVcyBieSBzZXR0aW5nCisgICAqIHJlc3RhcnRfaW50ZXJ2YWwsIG9yIGluIE1DVSByb3dzIGJ5IHNldHRpbmcgcmVzdGFydF9pbl9yb3dzCisgICAqIChpbiB3aGljaCBjYXNlIHRoZSBjb3JyZWN0IHJlc3RhcnRfaW50ZXJ2YWwgd2lsbCBiZSBmaWd1cmVkCisgICAqIGZvciBlYWNoIHNjYW4pLgorICAgKi8KKyAgdW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWw7IC8qIE1DVXMgcGVyIHJlc3RhcnQsIG9yIDAgZm9yIG5vIHJlc3RhcnQgKi8KKyAgaW50IHJlc3RhcnRfaW5fcm93czsgICAgICAgICAgLyogaWYgPiAwLCBNQ1Ugcm93cyBwZXIgcmVzdGFydCBpbnRlcnZhbCAqLworCisgIC8qIFBhcmFtZXRlcnMgY29udHJvbGxpbmcgZW1pc3Npb24gb2Ygc3BlY2lhbCBtYXJrZXJzLiAqLworCisgIGJvb2xlYW4gd3JpdGVfSkZJRl9oZWFkZXI7ICAgIC8qIHNob3VsZCBhIEpGSUYgbWFya2VyIGJlIHdyaXR0ZW4/ICovCisgIFVJTlQ4IEpGSUZfbWFqb3JfdmVyc2lvbjsgICAgIC8qIFdoYXQgdG8gd3JpdGUgZm9yIHRoZSBKRklGIHZlcnNpb24gbnVtYmVyICovCisgIFVJTlQ4IEpGSUZfbWlub3JfdmVyc2lvbjsKKyAgLyogVGhlc2UgdGhyZWUgdmFsdWVzIGFyZSBub3QgdXNlZCBieSB0aGUgSlBFRyBjb2RlLCBtZXJlbHkgY29waWVkICovCisgIC8qIGludG8gdGhlIEpGSUYgQVBQMCBtYXJrZXIuICBkZW5zaXR5X3VuaXQgY2FuIGJlIDAgZm9yIHVua25vd24sICovCisgIC8qIDEgZm9yIGRvdHMvaW5jaCwgb3IgMiBmb3IgZG90cy9jbS4gIE5vdGUgdGhhdCB0aGUgcGl4ZWwgYXNwZWN0ICovCisgIC8qIHJhdGlvIGlzIGRlZmluZWQgYnkgWF9kZW5zaXR5L1lfZGVuc2l0eSBldmVuIHdoZW4gZGVuc2l0eV91bml0PTAuICovCisgIFVJTlQ4IGRlbnNpdHlfdW5pdDsgICAgICAgICAgIC8qIEpGSUYgY29kZSBmb3IgcGl4ZWwgc2l6ZSB1bml0cyAqLworICBVSU5UMTYgWF9kZW5zaXR5OyAgICAgICAgICAgICAvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8KKyAgVUlOVDE2IFlfZGVuc2l0eTsgICAgICAgICAgICAgLyogVmVydGljYWwgcGl4ZWwgZGVuc2l0eSAqLworICBib29sZWFuIHdyaXRlX0Fkb2JlX21hcmtlcjsgICAvKiBzaG91bGQgYW4gQWRvYmUgbWFya2VyIGJlIHdyaXR0ZW4/ICovCisKKyAgLyogU3RhdGUgdmFyaWFibGU6IGluZGV4IG9mIG5leHQgc2NhbmxpbmUgdG8gYmUgd3JpdHRlbiB0bworICAgKiBqcGVnX3dyaXRlX3NjYW5saW5lcygpLiAgQXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIHRvIGNvbnRyb2wgaXRzCisgICAqIHByb2Nlc3NpbmcgbG9vcCwgZS5nLiwgIndoaWxlIChuZXh0X3NjYW5saW5lIDwgaW1hZ2VfaGVpZ2h0KSIuCisgICAqLworCisgIEpESU1FTlNJT04gbmV4dF9zY2FubGluZTsgICAgIC8qIDAgLi4gaW1hZ2VfaGVpZ2h0LTEgICovCisKKyAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUga25vd24gdGhyb3VnaG91dCBjb21wcmVzc29yLCBidXQgZ2VuZXJhbGx5CisgICAqIHNob3VsZCBub3QgYmUgdG91Y2hlZCBieSBhIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLgorICAgKi8KKworICAvKgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGR1cmluZyBjb21wcmVzc2lvbiBzdGFydHVwCisgICAqLworICBib29sZWFuIHByb2dyZXNzaXZlX21vZGU7ICAgICAvKiBUUlVFIGlmIHNjYW4gc2NyaXB0IHVzZXMgcHJvZ3Jlc3NpdmUgbW9kZSAqLworICBpbnQgbWF4X2hfc2FtcF9mYWN0b3I7ICAgICAgICAvKiBsYXJnZXN0IGhfc2FtcF9mYWN0b3IgKi8KKyAgaW50IG1heF92X3NhbXBfZmFjdG9yOyAgICAgICAgLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovCisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgIGludCBtaW5fRENUX2hfc2NhbGVkX3NpemU7ICAgIC8qIHNtYWxsZXN0IERDVF9oX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKyAgaW50IG1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsgICAgLyogc21hbGxlc3QgRENUX3Zfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLworI2VuZGlmCisKKyAgSkRJTUVOU0lPTiB0b3RhbF9pTUNVX3Jvd3M7ICAgLyogIyBvZiBpTUNVIHJvd3MgdG8gYmUgaW5wdXQgdG8gY29lZiBjdGxyICovCisgIC8qIFRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyIHJlY2VpdmVzIGRhdGEgaW4gdW5pdHMgb2YgTUNVIHJvd3MgYXMgZGVmaW5lZAorICAgKiBmb3IgZnVsbHkgaW50ZXJsZWF2ZWQgc2NhbnMgKHdoZXRoZXIgdGhlIEpQRUcgZmlsZSBpcyBpbnRlcmxlYXZlZCBvciBub3QpLgorICAgKiBUaGVyZSBhcmUgdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUgc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQgaW4gYW4KKyAgICogImlNQ1UiIChpbnRlcmxlYXZlZCBNQ1UpIHJvdy4KKyAgICovCisKKyAgLyoKKyAgICogVGhlc2UgZmllbGRzIGFyZSB2YWxpZCBkdXJpbmcgYW55IG9uZSBzY2FuLgorICAgKiBUaGV5IGRlc2NyaWJlIHRoZSBjb21wb25lbnRzIGFuZCBNQ1VzIGFjdHVhbGx5IGFwcGVhcmluZyBpbiB0aGUgc2Nhbi4KKyAgICovCisgIGludCBjb21wc19pbl9zY2FuOyAgICAgICAgICAgIC8qICMgb2YgSlBFRyBjb21wb25lbnRzIGluIHRoaXMgc2NhbiAqLworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjdXJfY29tcF9pbmZvW01BWF9DT01QU19JTl9TQ0FOXTsKKyAgLyogKmN1cl9jb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT1MgKi8KKworICBKRElNRU5TSU9OIE1DVXNfcGVyX3JvdzsgICAgICAvKiAjIG9mIE1DVXMgYWNyb3NzIHRoZSBpbWFnZSAqLworICBKRElNRU5TSU9OIE1DVV9yb3dzX2luX3NjYW47ICAvKiAjIG9mIE1DVSByb3dzIGluIHRoZSBpbWFnZSAqLworCisgIGludCBibG9ja3NfaW5fTUNVOyAgICAgICAgICAgIC8qICMgb2YgRENUIGJsb2NrcyBwZXIgTUNVICovCisgIGludCBNQ1VfbWVtYmVyc2hpcFtDX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgLyogTUNVX21lbWJlcnNoaXBbaV0gaXMgaW5kZXggaW4gY3VyX2NvbXBfaW5mbyBvZiBjb21wb25lbnQgb3duaW5nICovCisgIC8qIGkndGggYmxvY2sgaW4gYW4gTUNVICovCisKKyAgaW50IFNzLCBTZSwgQWgsIEFsOyAgICAgICAgICAgLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovCisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisgIGludCBibG9ja19zaXplOyAgICAgICAgICAgICAgIC8qIHRoZSBiYXNpYyBEQ1QgYmxvY2sgc2l6ZTogMS4uMTYgKi8KKyAgY29uc3QgaW50ICpuYXR1cmFsX29yZGVyOyAgICAgLyogbmF0dXJhbC1vcmRlciBwb3NpdGlvbiBhcnJheSAqLworICBpbnQgbGltX1NlOyAgICAgICAgICAgICAgICAgICAvKiBtaW4oIFNlLCBEQ1RTSVpFMi0xICkgKi8KKyNlbmRpZgorCisgIC8qCisgICAqIExpbmtzIHRvIGNvbXByZXNzaW9uIHN1Ym9iamVjdHMgKG1ldGhvZHMgYW5kIHByaXZhdGUgdmFyaWFibGVzIG9mIG1vZHVsZXMpCisgICAqLworICBzdHJ1Y3QganBlZ19jb21wX21hc3RlciAqbWFzdGVyOworICBzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciAqbWFpbjsKKyAgc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgKnByZXA7CisgIHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyICpjb2VmOworICBzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyICptYXJrZXI7CisgIHN0cnVjdCBqcGVnX2NvbG9yX2NvbnZlcnRlciAqY2NvbnZlcnQ7CisgIHN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyICpkb3duc2FtcGxlOworICBzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCAqZmRjdDsKKyAgc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICplbnRyb3B5OworICBqcGVnX3NjYW5faW5mbyAqc2NyaXB0X3NwYWNlOyAvKiB3b3Jrc3BhY2UgZm9yIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uICovCisgIGludCBzY3JpcHRfc3BhY2Vfc2l6ZTsKK307CisKKworLyogTWFzdGVyIHJlY29yZCBmb3IgYSBkZWNvbXByZXNzaW9uIGluc3RhbmNlICovCisKK3N0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IHsKKyAganBlZ19jb21tb25fZmllbGRzOyAgICAgICAgICAgLyogRmllbGRzIHNoYXJlZCB3aXRoIGpwZWdfY29tcHJlc3Nfc3RydWN0ICovCisKKyAgLyogU291cmNlIG9mIGNvbXByZXNzZWQgZGF0YSAqLworICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICpzcmM7CisKKyAgLyogQmFzaWMgZGVzY3JpcHRpb24gb2YgaW1hZ2UgLS0tIGZpbGxlZCBpbiBieSBqcGVnX3JlYWRfaGVhZGVyKCkuICovCisgIC8qIEFwcGxpY2F0aW9uIG1heSBpbnNwZWN0IHRoZXNlIHZhbHVlcyB0byBkZWNpZGUgaG93IHRvIHByb2Nlc3MgaW1hZ2UuICovCisKKyAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aDsgICAgICAgLyogbm9taW5hbCBpbWFnZSB3aWR0aCAoZnJvbSBTT0YgbWFya2VyKSAqLworICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsgICAgICAvKiBub21pbmFsIGltYWdlIGhlaWdodCAqLworICBpbnQgbnVtX2NvbXBvbmVudHM7ICAgICAgICAgICAvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gSlBFRyBpbWFnZSAqLworICBKX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2Ugb2YgSlBFRyBpbWFnZSAqLworCisgIC8qIERlY29tcHJlc3Npb24gcHJvY2Vzc2luZyBwYXJhbWV0ZXJzIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlCisgICAqIGNhbGxpbmcganBlZ19zdGFydF9kZWNvbXByZXNzKCkuICBOb3RlIHRoYXQganBlZ19yZWFkX2hlYWRlcigpIGluaXRpYWxpemVzCisgICAqIHRoZW0gdG8gZGVmYXVsdCB2YWx1ZXMuCisgICAqLworCisgIEpfQ09MT1JfU1BBQ0Ugb3V0X2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIGZvciBvdXRwdXQgKi8KKworICB1bnNpZ25lZCBpbnQgc2NhbGVfbnVtLCBzY2FsZV9kZW5vbTsgLyogZnJhY3Rpb24gYnkgd2hpY2ggdG8gc2NhbGUgaW1hZ2UgKi8KKworICBkb3VibGUgb3V0cHV0X2dhbW1hOyAgICAgICAgICAvKiBpbWFnZSBnYW1tYSB3YW50ZWQgaW4gb3V0cHV0ICovCisKKyAgYm9vbGVhbiBidWZmZXJlZF9pbWFnZTsgICAgICAgLyogVFJVRT1tdWx0aXBsZSBvdXRwdXQgcGFzc2VzICovCisgIGJvb2xlYW4gcmF3X2RhdGFfb3V0OyAgICAgICAgIC8qIFRSVUU9ZG93bnNhbXBsZWQgZGF0YSB3YW50ZWQgKi8KKworICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsgICAgICAvKiBJRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLworICBib29sZWFuIGRvX2ZhbmN5X3Vwc2FtcGxpbmc7ICAvKiBUUlVFPWFwcGx5IGZhbmN5IHVwc2FtcGxpbmcgKi8KKyAgYm9vbGVhbiBkb19ibG9ja19zbW9vdGhpbmc7ICAgLyogVFJVRT1hcHBseSBpbnRlcmJsb2NrIHNtb290aGluZyAqLworCisgIGJvb2xlYW4gcXVhbnRpemVfY29sb3JzOyAgICAgIC8qIFRSVUU9Y29sb3JtYXBwZWQgb3V0cHV0IHdhbnRlZCAqLworICAvKiB0aGUgZm9sbG93aW5nIGFyZSBpZ25vcmVkIGlmIG5vdCBxdWFudGl6ZV9jb2xvcnM6ICovCisgIEpfRElUSEVSX01PREUgZGl0aGVyX21vZGU7ICAgIC8qIHR5cGUgb2YgY29sb3IgZGl0aGVyaW5nIHRvIHVzZSAqLworICBib29sZWFuIHR3b19wYXNzX3F1YW50aXplOyAgICAvKiBUUlVFPXVzZSB0d28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24gKi8KKyAgaW50IGRlc2lyZWRfbnVtYmVyX29mX2NvbG9yczsgLyogbWF4ICMgY29sb3JzIHRvIHVzZSBpbiBjcmVhdGVkIGNvbG9ybWFwICovCisgIC8qIHRoZXNlIGFyZSBzaWduaWZpY2FudCBvbmx5IGluIGJ1ZmZlcmVkLWltYWdlIG1vZGU6ICovCisgIGJvb2xlYW4gZW5hYmxlXzFwYXNzX3F1YW50OyAgIC8qIGVuYWJsZSBmdXR1cmUgdXNlIG9mIDEtcGFzcyBxdWFudGl6ZXIgKi8KKyAgYm9vbGVhbiBlbmFibGVfZXh0ZXJuYWxfcXVhbnQ7LyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgZXh0ZXJuYWwgY29sb3JtYXAgKi8KKyAgYm9vbGVhbiBlbmFibGVfMnBhc3NfcXVhbnQ7ICAgLyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgMi1wYXNzIHF1YW50aXplciAqLworCisgIC8qIERlc2NyaXB0aW9uIG9mIGFjdHVhbCBvdXRwdXQgaW1hZ2UgdGhhdCB3aWxsIGJlIHJldHVybmVkIHRvIGFwcGxpY2F0aW9uLgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGJ5IGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLgorICAgKiBZb3UgY2FuIGFsc28gdXNlIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucygpIHRvIGRldGVybWluZSB0aGVzZSB2YWx1ZXMKKyAgICogaW4gYWR2YW5jZSBvZiBjYWxsaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLgorICAgKi8KKworICBKRElNRU5TSU9OIG91dHB1dF93aWR0aDsgICAgICAvKiBzY2FsZWQgaW1hZ2Ugd2lkdGggKi8KKyAgSkRJTUVOU0lPTiBvdXRwdXRfaGVpZ2h0OyAgICAgLyogc2NhbGVkIGltYWdlIGhlaWdodCAqLworICBpbnQgb3V0X2NvbG9yX2NvbXBvbmVudHM7ICAgICAvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gb3V0X2NvbG9yX3NwYWNlICovCisgIGludCBvdXRwdXRfY29tcG9uZW50czsgICAgICAgIC8qICMgb2YgY29sb3IgY29tcG9uZW50cyByZXR1cm5lZCAqLworICAvKiBvdXRwdXRfY29tcG9uZW50cyBpcyAxIChhIGNvbG9ybWFwIGluZGV4KSB3aGVuIHF1YW50aXppbmcgY29sb3JzOworICAgKiBvdGhlcndpc2UgaXQgZXF1YWxzIG91dF9jb2xvcl9jb21wb25lbnRzLgorICAgKi8KKyAgaW50IHJlY19vdXRidWZfaGVpZ2h0OyAgICAgICAgLyogbWluIHJlY29tbWVuZGVkIGhlaWdodCBvZiBzY2FubGluZSBidWZmZXIgKi8KKyAgLyogSWYgdGhlIGJ1ZmZlciBwYXNzZWQgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIGlzIGxlc3MgdGhhbiB0aGlzIG1hbnkgcm93cworICAgKiBoaWdoLCBzcGFjZSBhbmQgdGltZSB3aWxsIGJlIHdhc3RlZCBkdWUgdG8gdW5uZWNlc3NhcnkgZGF0YSBjb3B5aW5nLgorICAgKiBVc3VhbGx5IHJlY19vdXRidWZfaGVpZ2h0IHdpbGwgYmUgMSBvciAyLCBhdCBtb3N0IDQuCisgICAqLworCisgIC8qIFdoZW4gcXVhbnRpemluZyBjb2xvcnMsIHRoZSBvdXRwdXQgY29sb3JtYXAgaXMgZGVzY3JpYmVkIGJ5IHRoZXNlIGZpZWxkcy4KKyAgICogVGhlIGFwcGxpY2F0aW9uIGNhbiBzdXBwbHkgYSBjb2xvcm1hcCBieSBzZXR0aW5nIGNvbG9ybWFwIG5vbi1OVUxMIGJlZm9yZQorICAgKiBjYWxsaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzczsgb3RoZXJ3aXNlIGEgY29sb3JtYXAgaXMgY3JlYXRlZCBkdXJpbmcKKyAgICoganBlZ19zdGFydF9kZWNvbXByZXNzIG9yIGpwZWdfc3RhcnRfb3V0cHV0LgorICAgKiBUaGUgbWFwIGhhcyBvdXRfY29sb3JfY29tcG9uZW50cyByb3dzIGFuZCBhY3R1YWxfbnVtYmVyX29mX2NvbG9ycyBjb2x1bW5zLgorICAgKi8KKyAgaW50IGFjdHVhbF9udW1iZXJfb2ZfY29sb3JzOyAgLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdXNlICovCisgIEpTQU1QQVJSQVkgY29sb3JtYXA7ICAgICAgICAgIC8qIFRoZSBjb2xvciBtYXAgYXMgYSAyLUQgcGl4ZWwgYXJyYXkgKi8KKworICAvKiBTdGF0ZSB2YXJpYWJsZXM6IHRoZXNlIHZhcmlhYmxlcyBpbmRpY2F0ZSB0aGUgcHJvZ3Jlc3Mgb2YgZGVjb21wcmVzc2lvbi4KKyAgICogVGhlIGFwcGxpY2F0aW9uIG1heSBleGFtaW5lIHRoZXNlIGJ1dCBtdXN0IG5vdCBtb2RpZnkgdGhlbS4KKyAgICovCisKKyAgLyogUm93IGluZGV4IG9mIG5leHQgc2NhbmxpbmUgdG8gYmUgcmVhZCBmcm9tIGpwZWdfcmVhZF9zY2FubGluZXMoKS4KKyAgICogQXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIHRvIGNvbnRyb2wgaXRzIHByb2Nlc3NpbmcgbG9vcCwgZS5nLiwKKyAgICogIndoaWxlIChvdXRwdXRfc2NhbmxpbmUgPCBvdXRwdXRfaGVpZ2h0KSIuCisgICAqLworICBKRElNRU5TSU9OIG91dHB1dF9zY2FubGluZTsgICAvKiAwIC4uIG91dHB1dF9oZWlnaHQtMSAgKi8KKworICAvKiBDdXJyZW50IGlucHV0IHNjYW4gbnVtYmVyIGFuZCBudW1iZXIgb2YgaU1DVSByb3dzIGNvbXBsZXRlZCBpbiBzY2FuLgorICAgKiBUaGVzZSBpbmRpY2F0ZSB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIGRlY29tcHJlc3NvciBpbnB1dCBzaWRlLgorICAgKi8KKyAgaW50IGlucHV0X3NjYW5fbnVtYmVyOyAgICAgICAgLyogTnVtYmVyIG9mIFNPUyBtYXJrZXJzIHNlZW4gc28gZmFyICovCisgIEpESU1FTlNJT04gaW5wdXRfaU1DVV9yb3c7ICAgIC8qIE51bWJlciBvZiBpTUNVIHJvd3MgY29tcGxldGVkICovCisKKyAgLyogVGhlICJvdXRwdXQgc2NhbiBudW1iZXIiIGlzIHRoZSBub3Rpb25hbCBzY2FuIGJlaW5nIGRpc3BsYXllZCBieSB0aGUKKyAgICogb3V0cHV0IHNpZGUuICBUaGUgZGVjb21wcmVzc29yIHdpbGwgbm90IGFsbG93IG91dHB1dCBzY2FuL3JvdyBudW1iZXIKKyAgICogdG8gZ2V0IGFoZWFkIG9mIGlucHV0IHNjYW4vcm93LCBidXQgaXQgY2FuIGZhbGwgYXJiaXRyYXJpbHkgZmFyIGJlaGluZC4KKyAgICovCisgIGludCBvdXRwdXRfc2Nhbl9udW1iZXI7ICAgICAgIC8qIE5vbWluYWwgc2NhbiBudW1iZXIgYmVpbmcgZGlzcGxheWVkICovCisgIEpESU1FTlNJT04gb3V0cHV0X2lNQ1Vfcm93OyAgIC8qIE51bWJlciBvZiBpTUNVIHJvd3MgcmVhZCAqLworCisgIC8qIEN1cnJlbnQgcHJvZ3Jlc3Npb24gc3RhdHVzLiAgY29lZl9iaXRzW2NdW2ldIGluZGljYXRlcyB0aGUgcHJlY2lzaW9uCisgICAqIHdpdGggd2hpY2ggY29tcG9uZW50IGMncyBEQ1QgY29lZmZpY2llbnQgaSAoaW4gemlnemFnIG9yZGVyKSBpcyBrbm93bi4KKyAgICogSXQgaXMgLTEgd2hlbiBubyBkYXRhIGhhcyB5ZXQgYmVlbiByZWNlaXZlZCwgb3RoZXJ3aXNlIGl0IGlzIHRoZSBwb2ludAorICAgKiB0cmFuc2Zvcm0gKHNoaWZ0KSB2YWx1ZSBmb3IgdGhlIG1vc3QgcmVjZW50IHNjYW4gb2YgdGhlIGNvZWZmaWNpZW50CisgICAqICh0aHVzLCAwIGF0IGNvbXBsZXRpb24gb2YgdGhlIHByb2dyZXNzaW9uKS4KKyAgICogVGhpcyBwb2ludGVyIGlzIE5VTEwgd2hlbiByZWFkaW5nIGEgbm9uLXByb2dyZXNzaXZlIGZpbGUuCisgICAqLworICBpbnQgKCpjb2VmX2JpdHMpW0RDVFNJWkUyXTsgICAvKiAtMSBvciBjdXJyZW50IEFsIHZhbHVlIGZvciBlYWNoIGNvZWYgKi8KKworICAvKiBJbnRlcm5hbCBKUEVHIHBhcmFtZXRlcnMgLS0tIHRoZSBhcHBsaWNhdGlvbiB1c3VhbGx5IG5lZWQgbm90IGxvb2sgYXQKKyAgICogdGhlc2UgZmllbGRzLiAgTm90ZSB0aGF0IHRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UKKyAgICogYW55IHBhcmFtZXRlcnMgdGhhdCBjYW4gY2hhbmdlIGJldHdlZW4gc2NhbnMuCisgICAqLworCisgIC8qIFF1YW50aXphdGlvbiBhbmQgSHVmZm1hbiB0YWJsZXMgYXJlIGNhcnJpZWQgZm9yd2FyZCBhY3Jvc3MgaW5wdXQKKyAgICogZGF0YXN0cmVhbXMgd2hlbiBwcm9jZXNzaW5nIGFiYnJldmlhdGVkIEpQRUcgZGF0YXN0cmVhbXMuCisgICAqLworCisgIEpRVUFOVF9UQkwgKnF1YW50X3RibF9wdHJzW05VTV9RVUFOVF9UQkxTXTsKKyAgLyogcHRycyB0byBjb2VmZmljaWVudCBxdWFudGl6YXRpb24gdGFibGVzLCBvciBOVUxMIGlmIG5vdCBkZWZpbmVkICovCisKKyAgSkhVRkZfVEJMICpkY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdOworICBKSFVGRl9UQkwgKmFjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107CisgIC8qIHB0cnMgdG8gSHVmZm1hbiBjb2RpbmcgdGFibGVzLCBvciBOVUxMIGlmIG5vdCBkZWZpbmVkICovCisKKyAgLyogVGhlc2UgcGFyYW1ldGVycyBhcmUgbmV2ZXIgY2FycmllZCBhY3Jvc3MgZGF0YXN0cmVhbXMsIHNpbmNlIHRoZXkKKyAgICogYXJlIGdpdmVuIGluIFNPRi9TT1MgbWFya2VycyBvciBkZWZpbmVkIHRvIGJlIHJlc2V0IGJ5IFNPSS4KKyAgICovCisKKyAgaW50IGRhdGFfcHJlY2lzaW9uOyAgICAgICAgICAgLyogYml0cyBvZiBwcmVjaXNpb24gaW4gaW1hZ2UgZGF0YSAqLworCisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBfaW5mbzsKKyAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovCisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisgIGJvb2xlYW4gaXNfYmFzZWxpbmU7ICAgICAgICAgIC8qIFRSVUUgaWYgQmFzZWxpbmUgU09GMCBlbmNvdW50ZXJlZCAqLworI2VuZGlmCisgIGJvb2xlYW4gcHJvZ3Jlc3NpdmVfbW9kZTsgICAgIC8qIFRSVUUgaWYgU09GbiBzcGVjaWZpZXMgcHJvZ3Jlc3NpdmUgbW9kZSAqLworICBib29sZWFuIGFyaXRoX2NvZGU7ICAgICAgICAgICAvKiBUUlVFPWFyaXRobWV0aWMgY29kaW5nLCBGQUxTRT1IdWZmbWFuICovCisKKyAgVUlOVDggYXJpdGhfZGNfTFtOVU1fQVJJVEhfVEJMU107IC8qIEwgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovCisgIFVJTlQ4IGFyaXRoX2RjX1VbTlVNX0FSSVRIX1RCTFNdOyAvKiBVIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworICBVSU5UOCBhcml0aF9hY19LW05VTV9BUklUSF9UQkxTXTsgLyogS3ggdmFsdWVzIGZvciBBQyBhcml0aC1jb2RpbmcgdGFibGVzICovCisKKyAgdW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWw7IC8qIE1DVXMgcGVyIHJlc3RhcnQgaW50ZXJ2YWwsIG9yIDAgZm9yIG5vIHJlc3RhcnQgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgcmVjb3JkIGRhdGEgb2J0YWluZWQgZnJvbSBvcHRpb25hbCBtYXJrZXJzIHJlY29nbml6ZWQgYnkKKyAgICogdGhlIEpQRUcgbGlicmFyeS4KKyAgICovCisgIGJvb2xlYW4gc2F3X0pGSUZfbWFya2VyOyAgICAgIC8qIFRSVUUgaWZmIGEgSkZJRiBBUFAwIG1hcmtlciB3YXMgZm91bmQgKi8KKyAgLyogRGF0YSBjb3BpZWQgZnJvbSBKRklGIG1hcmtlcjsgb25seSB2YWxpZCBpZiBzYXdfSkZJRl9tYXJrZXIgaXMgVFJVRTogKi8KKyAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uOyAgICAgLyogSkZJRiB2ZXJzaW9uIG51bWJlciAqLworICBVSU5UOCBKRklGX21pbm9yX3ZlcnNpb247CisgIFVJTlQ4IGRlbnNpdHlfdW5pdDsgICAgICAgICAgIC8qIEpGSUYgY29kZSBmb3IgcGl4ZWwgc2l6ZSB1bml0cyAqLworICBVSU5UMTYgWF9kZW5zaXR5OyAgICAgICAgICAgICAvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8KKyAgVUlOVDE2IFlfZGVuc2l0eTsgICAgICAgICAgICAgLyogVmVydGljYWwgcGl4ZWwgZGVuc2l0eSAqLworICBib29sZWFuIHNhd19BZG9iZV9tYXJrZXI7ICAgICAvKiBUUlVFIGlmZiBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgd2FzIGZvdW5kICovCisgIFVJTlQ4IEFkb2JlX3RyYW5zZm9ybTsgICAgICAgIC8qIENvbG9yIHRyYW5zZm9ybSBjb2RlIGZyb20gQWRvYmUgbWFya2VyICovCisKKyAgYm9vbGVhbiBDQ0lSNjAxX3NhbXBsaW5nOyAgICAgLyogVFJVRT1maXJzdCBzYW1wbGVzIGFyZSBjb3NpdGVkICovCisKKyAgLyogQXNpZGUgZnJvbSB0aGUgc3BlY2lmaWMgZGF0YSByZXRhaW5lZCBmcm9tIEFQUG4gbWFya2VycyBrbm93biB0byB0aGUKKyAgICogbGlicmFyeSwgdGhlIHVuaW50ZXJwcmV0ZWQgY29udGVudHMgb2YgYW55IG9yIGFsbCBBUFBuIGFuZCBDT00gbWFya2VycworICAgKiBjYW4gYmUgc2F2ZWQgaW4gYSBsaXN0IGZvciBleGFtaW5hdGlvbiBieSB0aGUgYXBwbGljYXRpb24uCisgICAqLworICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyX2xpc3Q7IC8qIEhlYWQgb2YgbGlzdCBvZiBzYXZlZCBtYXJrZXJzICovCisKKyAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUga25vd24gdGhyb3VnaG91dCBkZWNvbXByZXNzb3IsIGJ1dCBnZW5lcmFsbHkKKyAgICogc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5IGEgc3Vycm91bmRpbmcgYXBwbGljYXRpb24uCisgICAqLworCisgIC8qCisgICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24gc3RhcnR1cAorICAgKi8KKyAgaW50IG1heF9oX3NhbXBfZmFjdG9yOyAgICAgICAgLyogbGFyZ2VzdCBoX3NhbXBfZmFjdG9yICovCisgIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsgICAgICAgIC8qIGxhcmdlc3Qgdl9zYW1wX2ZhY3RvciAqLworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICBpbnQgbWluX0RDVF9oX3NjYWxlZF9zaXplOyAgICAvKiBzbWFsbGVzdCBEQ1RfaF9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCisgIGludCBtaW5fRENUX3Zfc2NhbGVkX3NpemU7ICAgIC8qIHNtYWxsZXN0IERDVF92X3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKyNlbHNlCisgIGludCBtaW5fRENUX3NjYWxlZF9zaXplOyAgICAgIC8qIHNtYWxsZXN0IERDVF9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCisjZW5kaWYKKworICBKRElNRU5TSU9OIHRvdGFsX2lNQ1Vfcm93czsgICAvKiAjIG9mIGlNQ1Ugcm93cyBpbiBpbWFnZSAqLworICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlcidzIGlucHV0IGFuZCBvdXRwdXQgcHJvZ3Jlc3MgaXMgbWVhc3VyZWQgaW4KKyAgICogdW5pdHMgb2YgImlNQ1UiIChpbnRlcmxlYXZlZCBNQ1UpIHJvd3MuICBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgTUNVIHJvd3MKKyAgICogaW4gZnVsbHkgaW50ZXJsZWF2ZWQgSlBFRyBzY2FucywgYnV0IGFyZSB1c2VkIHdoZXRoZXIgdGhlIHNjYW4gaXMKKyAgICogaW50ZXJsZWF2ZWQgb3Igbm90LiAgV2UgZGVmaW5lIGFuIGlNQ1Ugcm93IGFzIHZfc2FtcF9mYWN0b3IgRENUIGJsb2NrCisgICAqIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQuICBUaGVyZWZvcmUsIHRoZSBJRENUIG91dHB1dCBjb250YWlucworICAgKiB2X3NhbXBfZmFjdG9yKkRDVF9bdl9dc2NhbGVkX3NpemUgc2FtcGxlIHJvd3Mgb2YgYSBjb21wb25lbnQgcGVyIGlNQ1Ugcm93LgorICAgKi8KKworICBKU0FNUExFICpzYW1wbGVfcmFuZ2VfbGltaXQ7ICAvKiB0YWJsZSBmb3IgZmFzdCByYW5nZS1saW1pdGluZyAqLworCisgIC8qCisgICAqIFRoZXNlIGZpZWxkcyBhcmUgdmFsaWQgZHVyaW5nIGFueSBvbmUgc2Nhbi4KKyAgICogVGhleSBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBhbmQgTUNVcyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlIHNjYW4uCisgICAqIE5vdGUgdGhhdCB0aGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG11c3Qgbm90IHVzZSB0aGVzZSBmaWVsZHMuCisgICAqLworICBpbnQgY29tcHNfaW5fc2NhbjsgICAgICAgICAgICAvKiAjIG9mIEpQRUcgY29tcG9uZW50cyBpbiB0aGlzIHNjYW4gKi8KKyAganBlZ19jb21wb25lbnRfaW5mbyAqY3VyX2NvbXBfaW5mb1tNQVhfQ09NUFNfSU5fU0NBTl07CisgIC8qICpjdXJfY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09TICovCisKKyAgSkRJTUVOU0lPTiBNQ1VzX3Blcl9yb3c7ICAgICAgLyogIyBvZiBNQ1VzIGFjcm9zcyB0aGUgaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiBNQ1Vfcm93c19pbl9zY2FuOyAgLyogIyBvZiBNQ1Ugcm93cyBpbiB0aGUgaW1hZ2UgKi8KKworICBpbnQgYmxvY2tzX2luX01DVTsgICAgICAgICAgICAvKiAjIG9mIERDVCBibG9ja3MgcGVyIE1DVSAqLworICBpbnQgTUNVX21lbWJlcnNoaXBbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIC8qIE1DVV9tZW1iZXJzaGlwW2ldIGlzIGluZGV4IGluIGN1cl9jb21wX2luZm8gb2YgY29tcG9uZW50IG93bmluZyAqLworICAvKiBpJ3RoIGJsb2NrIGluIGFuIE1DVSAqLworCisgIGludCBTcywgU2UsIEFoLCBBbDsgICAgICAgICAgIC8qIHByb2dyZXNzaXZlIEpQRUcgcGFyYW1ldGVycyBmb3Igc2NhbiAqLworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorICAvKiBUaGVzZSBmaWVsZHMgYXJlIGRlcml2ZWQgZnJvbSBTZSBvZiBmaXJzdCBTT1MgbWFya2VyLgorICAgKi8KKyAgaW50IGJsb2NrX3NpemU7ICAgICAgICAgICAgICAgLyogdGhlIGJhc2ljIERDVCBibG9jayBzaXplOiAxLi4xNiAqLworICBjb25zdCBpbnQgKm5hdHVyYWxfb3JkZXI7IC8qIG5hdHVyYWwtb3JkZXIgcG9zaXRpb24gYXJyYXkgZm9yIGVudHJvcHkgZGVjb2RlICovCisgIGludCBsaW1fU2U7ICAgICAgICAgICAgICAgICAgIC8qIG1pbiggU2UsIERDVFNJWkUyLTEgKSBmb3IgZW50cm9weSBkZWNvZGUgKi8KKyNlbmRpZgorCisgIC8qIFRoaXMgZmllbGQgaXMgc2hhcmVkIGJldHdlZW4gZW50cm9weSBkZWNvZGVyIGFuZCBtYXJrZXIgcGFyc2VyLgorICAgKiBJdCBpcyBlaXRoZXIgemVybyBvciB0aGUgY29kZSBvZiBhIEpQRUcgbWFya2VyIHRoYXQgaGFzIGJlZW4KKyAgICogcmVhZCBmcm9tIHRoZSBkYXRhIHNvdXJjZSwgYnV0IGhhcyBub3QgeWV0IGJlZW4gcHJvY2Vzc2VkLgorICAgKi8KKyAgaW50IHVucmVhZF9tYXJrZXI7CisKKyAgLyoKKyAgICogTGlua3MgdG8gZGVjb21wcmVzc2lvbiBzdWJvYmplY3RzIChtZXRob2RzLCBwcml2YXRlIHZhcmlhYmxlcyBvZiBtb2R1bGVzKQorICAgKi8KKyAgc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciAqbWFzdGVyOworICBzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciAqbWFpbjsKKyAgc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgKmNvZWY7CisgIHN0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyICpwb3N0OworICBzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyICppbnB1dGN0bDsKKyAgc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciAqbWFya2VyOworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKmVudHJvcHk7CisgIHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0ICppZGN0OworICBzdHJ1Y3QganBlZ191cHNhbXBsZXIgKnVwc2FtcGxlOworICBzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciAqY2NvbnZlcnQ7CisgIHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciAqY3F1YW50aXplOworfTsKKworCisvKiAiT2JqZWN0IiBkZWNsYXJhdGlvbnMgZm9yIEpQRUcgbW9kdWxlcyB0aGF0IG1heSBiZSBzdXBwbGllZCBvciBjYWxsZWQKKyAqIGRpcmVjdGx5IGJ5IHRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbi4KKyAqIEFzIHdpdGggYWxsIG9iamVjdHMgaW4gdGhlIEpQRUcgbGlicmFyeSwgdGhlc2Ugc3RydWN0cyBvbmx5IGRlZmluZSB0aGUKKyAqIHB1YmxpY2x5IHZpc2libGUgbWV0aG9kcyBhbmQgc3RhdGUgdmFyaWFibGVzIG9mIGEgbW9kdWxlLiAgQWRkaXRpb25hbAorICogcHJpdmF0ZSBmaWVsZHMgbWF5IGV4aXN0IGFmdGVyIHRoZSBwdWJsaWMgb25lcy4KKyAqLworCisKKy8qIEVycm9yIGhhbmRsZXIgb2JqZWN0ICovCisKK3N0cnVjdCBqcGVnX2Vycm9yX21nciB7CisgIC8qIEVycm9yIGV4aXQgaGFuZGxlcjogZG9lcyBub3QgcmV0dXJuIHRvIGNhbGxlciAqLworICB2b2lkICgqZXJyb3JfZXhpdCkgKGpfY29tbW9uX3B0ciBjaW5mbyk7CisgIC8qIENvbmRpdGlvbmFsbHkgZW1pdCBhIHRyYWNlIG9yIHdhcm5pbmcgbWVzc2FnZSAqLworICB2b2lkICgqZW1pdF9tZXNzYWdlKSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgbXNnX2xldmVsKTsKKyAgLyogUm91dGluZSB0aGF0IGFjdHVhbGx5IG91dHB1dHMgYSB0cmFjZSBvciBlcnJvciBtZXNzYWdlICovCisgIHZvaWQgKCpvdXRwdXRfbWVzc2FnZSkgKGpfY29tbW9uX3B0ciBjaW5mbyk7CisgIC8qIEZvcm1hdCBhIG1lc3NhZ2Ugc3RyaW5nIGZvciB0aGUgbW9zdCByZWNlbnQgSlBFRyBlcnJvciBvciBtZXNzYWdlICovCisgIHZvaWQgKCpmb3JtYXRfbWVzc2FnZSkgKGpfY29tbW9uX3B0ciBjaW5mbywgY2hhciAqYnVmZmVyKTsKKyNkZWZpbmUgSk1TR19MRU5HVEhfTUFYICAyMDAgICAgLyogcmVjb21tZW5kZWQgc2l6ZSBvZiBmb3JtYXRfbWVzc2FnZSBidWZmZXIgKi8KKyAgLyogUmVzZXQgZXJyb3Igc3RhdGUgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGEgbmV3IGltYWdlICovCisgIHZvaWQgKCpyZXNldF9lcnJvcl9tZ3IpIChqX2NvbW1vbl9wdHIgY2luZm8pOworCisgIC8qIFRoZSBtZXNzYWdlIElEIGNvZGUgYW5kIGFueSBwYXJhbWV0ZXJzIGFyZSBzYXZlZCBoZXJlLgorICAgKiBBIG1lc3NhZ2UgY2FuIGhhdmUgb25lIHN0cmluZyBwYXJhbWV0ZXIgb3IgdXAgdG8gOCBpbnQgcGFyYW1ldGVycy4KKyAgICovCisgIGludCBtc2dfY29kZTsKKyNkZWZpbmUgSk1TR19TVFJfUEFSTV9NQVggIDgwCisgIHVuaW9uIHsKKyAgICBpbnQgaVs4XTsKKyAgICBjaGFyIHNbSk1TR19TVFJfUEFSTV9NQVhdOworICB9IG1zZ19wYXJtOworCisgIC8qIFN0YW5kYXJkIHN0YXRlIHZhcmlhYmxlcyBmb3IgZXJyb3IgZmFjaWxpdHkgKi8KKworICBpbnQgdHJhY2VfbGV2ZWw7ICAgICAgICAgICAgICAvKiBtYXggbXNnX2xldmVsIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgKi8KKworICAvKiBGb3IgcmVjb3ZlcmFibGUgY29ycnVwdC1kYXRhIGVycm9ycywgd2UgZW1pdCBhIHdhcm5pbmcgbWVzc2FnZSwKKyAgICogYnV0IGtlZXAgZ29pbmcgdW5sZXNzIGVtaXRfbWVzc2FnZSBjaG9vc2VzIHRvIGFib3J0LiAgZW1pdF9tZXNzYWdlCisgICAqIHNob3VsZCBjb3VudCB3YXJuaW5ncyBpbiBudW1fd2FybmluZ3MuICBUaGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24KKyAgICogY2FuIGNoZWNrIGZvciBiYWQgZGF0YSBieSBzZWVpbmcgaWYgbnVtX3dhcm5pbmdzIGlzIG5vbnplcm8gYXQgdGhlCisgICAqIGVuZCBvZiBwcm9jZXNzaW5nLgorICAgKi8KKyAgbG9uZyBudW1fd2FybmluZ3M7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvcnJ1cHQtZGF0YSB3YXJuaW5ncyAqLworCisgIC8qIFRoZXNlIGZpZWxkcyBwb2ludCB0byB0aGUgdGFibGUocykgb2YgZXJyb3IgbWVzc2FnZSBzdHJpbmdzLgorICAgKiBBbiBhcHBsaWNhdGlvbiBjYW4gY2hhbmdlIHRoZSB0YWJsZSBwb2ludGVyIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudAorICAgKiBtZXNzYWdlIGxpc3QgKHR5cGljYWxseSwgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiB3aGljaCBlcnJvcnMgYXJlCisgICAqIHJlcG9ydGVkKS4gIFNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIGFkZCBhZGRpdGlvbmFsIGVycm9yIGNvZGVzCisgICAqIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBKUEVHIGxpYnJhcnkgZXJyb3IgbWVjaGFuaXNtOyB0aGUgc2Vjb25kCisgICAqIHRhYmxlIHBvaW50ZXIgaXMgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLgorICAgKgorICAgKiBGaXJzdCB0YWJsZSBpbmNsdWRlcyBhbGwgZXJyb3JzIGdlbmVyYXRlZCBieSBKUEVHIGxpYnJhcnkgaXRzZWxmLgorICAgKiBFcnJvciBjb2RlIDAgaXMgcmVzZXJ2ZWQgZm9yIGEgIm5vIHN1Y2ggZXJyb3Igc3RyaW5nIiBtZXNzYWdlLgorICAgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0ICpqcGVnX21lc3NhZ2VfdGFibGU7IC8qIExpYnJhcnkgZXJyb3JzICovCisgIGludCBsYXN0X2pwZWdfbWVzc2FnZTsgICAgLyogVGFibGUgY29udGFpbnMgc3RyaW5ncyAwLi5sYXN0X2pwZWdfbWVzc2FnZSAqLworICAvKiBTZWNvbmQgdGFibGUgY2FuIGJlIGFkZGVkIGJ5IGFwcGxpY2F0aW9uIChzZWUgY2pwZWcvZGpwZWcgZm9yIGV4YW1wbGUpLgorICAgKiBJdCBjb250YWlucyBzdHJpbmdzIG51bWJlcmVkIGZpcnN0X2FkZG9uX21lc3NhZ2UuLmxhc3RfYWRkb25fbWVzc2FnZS4KKyAgICovCisgIGNvbnN0IGNoYXIgKiBjb25zdCAqYWRkb25fbWVzc2FnZV90YWJsZTsgLyogTm9uLWxpYnJhcnkgZXJyb3JzICovCisgIGludCBmaXJzdF9hZGRvbl9tZXNzYWdlOyAgICAgIC8qIGNvZGUgZm9yIGZpcnN0IHN0cmluZyBpbiBhZGRvbiB0YWJsZSAqLworICBpbnQgbGFzdF9hZGRvbl9tZXNzYWdlOyAgICAgICAvKiBjb2RlIGZvciBsYXN0IHN0cmluZyBpbiBhZGRvbiB0YWJsZSAqLworfTsKKworCisvKiBQcm9ncmVzcyBtb25pdG9yIG9iamVjdCAqLworCitzdHJ1Y3QganBlZ19wcm9ncmVzc19tZ3IgeworICB2b2lkICgqcHJvZ3Jlc3NfbW9uaXRvcikgKGpfY29tbW9uX3B0ciBjaW5mbyk7CisKKyAgbG9uZyBwYXNzX2NvdW50ZXI7ICAgICAgICAgICAgLyogd29yayB1bml0cyBjb21wbGV0ZWQgaW4gdGhpcyBwYXNzICovCisgIGxvbmcgcGFzc19saW1pdDsgICAgICAgICAgICAgIC8qIHRvdGFsIG51bWJlciBvZiB3b3JrIHVuaXRzIGluIHRoaXMgcGFzcyAqLworICBpbnQgY29tcGxldGVkX3Bhc3NlczsgICAgICAgICAvKiBwYXNzZXMgY29tcGxldGVkIHNvIGZhciAqLworICBpbnQgdG90YWxfcGFzc2VzOyAgICAgICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgcGFzc2VzIGV4cGVjdGVkICovCit9OworCisKKy8qIERhdGEgZGVzdGluYXRpb24gb2JqZWN0IGZvciBjb21wcmVzc2lvbiAqLworCitzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgeworICBKT0NURVQgKm5leHRfb3V0cHV0X2J5dGU7ICAgICAvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCisgIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsgICAgICAgIC8qICMgb2YgYnl0ZSBzcGFjZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLworCisgIHZvaWQgKCppbml0X2Rlc3RpbmF0aW9uKSAoal9jb21wcmVzc19wdHIgY2luZm8pOworICBib29sZWFuICgqZW1wdHlfb3V0cHV0X2J1ZmZlcikgKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKnRlcm1fZGVzdGluYXRpb24pIChqX2NvbXByZXNzX3B0ciBjaW5mbyk7Cit9OworCisKKy8qIERhdGEgc291cmNlIG9iamVjdCBmb3IgZGVjb21wcmVzc2lvbiAqLworCitzdHJ1Y3QganBlZ19zb3VyY2VfbWdyIHsKKyAgY29uc3QgSk9DVEVUICpuZXh0X2lucHV0X2J5dGU7IC8qID0+IG5leHQgYnl0ZSB0byByZWFkIGZyb20gYnVmZmVyICovCisgIHNpemVfdCBieXRlc19pbl9idWZmZXI7ICAgICAgIC8qICMgb2YgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLworCisgIHZvaWQgKCppbml0X3NvdXJjZSkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworICBib29sZWFuICgqZmlsbF9pbnB1dF9idWZmZXIpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKyAgdm9pZCAoKnNraXBfaW5wdXRfZGF0YSkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGxvbmcgbnVtX2J5dGVzKTsKKyAgYm9vbGVhbiAoKnJlc3luY190b19yZXN0YXJ0KSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRlc2lyZWQpOworICB2b2lkICgqdGVybV9zb3VyY2UpIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKK307CisKKworLyogTWVtb3J5IG1hbmFnZXIgb2JqZWN0LgorICogQWxsb2NhdGVzICJzbWFsbCIgb2JqZWN0cyAoYSBmZXcgSyB0b3RhbCksICJsYXJnZSIgb2JqZWN0cyAodGVucyBvZiBLKSwKKyAqIGFuZCAicmVhbGx5IGJpZyIgb2JqZWN0cyAodmlydHVhbCBhcnJheXMgd2l0aCBiYWNraW5nIHN0b3JlIGlmIG5lZWRlZCkuCisgKiBUaGUgbWVtb3J5IG1hbmFnZXIgZG9lcyBub3QgYWxsb3cgaW5kaXZpZHVhbCBvYmplY3RzIHRvIGJlIGZyZWVkOyByYXRoZXIsCisgKiBlYWNoIGNyZWF0ZWQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgcG9vbCwgYW5kIHdob2xlIHBvb2xzIGNhbiBiZSBmcmVlZAorICogYXQgb25jZS4gIFRoaXMgaXMgZmFzdGVyIGFuZCBtb3JlIGNvbnZlbmllbnQgdGhhbiByZW1lbWJlcmluZyBleGFjdGx5IHdoYXQKKyAqIHRvIGZyZWUsIGVzcGVjaWFsbHkgd2hlcmUgbWFsbG9jKCkvZnJlZSgpIGFyZSBub3QgdG9vIHNwZWVkeS4KKyAqIE5COiBhbGxvYyByb3V0aW5lcyBuZXZlciByZXR1cm4gTlVMTC4gIFRoZXkgZXhpdCB0byBlcnJvcl9leGl0IGlmIG5vdAorICogc3VjY2Vzc2Z1bC4KKyAqLworCisjZGVmaW5lIEpQT09MX1BFUk1BTkVOVCAgMCAgICAgIC8qIGxhc3RzIHVudGlsIG1hc3RlciByZWNvcmQgaXMgZGVzdHJveWVkICovCisjZGVmaW5lIEpQT09MX0lNQUdFICAgICAgMSAgICAgIC8qIGxhc3RzIHVudGlsIGRvbmUgd2l0aCBpbWFnZS9kYXRhc3RyZWFtICovCisjZGVmaW5lIEpQT09MX05VTVBPT0xTICAgMgorCit0eXBlZGVmIHN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCAqanZpcnRfc2FycmF5X3B0cjsKK3R5cGVkZWYgc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sICpqdmlydF9iYXJyYXlfcHRyOworCisKK3N0cnVjdCBqcGVnX21lbW9yeV9tZ3IgeworICAvKiBNZXRob2QgcG9pbnRlcnMgKi8KKyAgdm9pZCAqKCphbGxvY19zbWFsbCkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIHNpemVfdCBzaXplb2ZvYmplY3QpOworICB2b2lkICooKmFsbG9jX2xhcmdlKSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpOworICBKU0FNUEFSUkFZICgqYWxsb2Nfc2FycmF5KSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywgSkRJTUVOU0lPTiBudW1yb3dzKTsKKyAgSkJMT0NLQVJSQVkgKCphbGxvY19iYXJyYXkpIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gYmxvY2tzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MpOworICBqdmlydF9zYXJyYXlfcHRyICgqcmVxdWVzdF92aXJ0X3NhcnJheSkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBwcmVfemVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbWF4YWNjZXNzKTsKKyAganZpcnRfYmFycmF5X3B0ciAoKnJlcXVlc3RfdmlydF9iYXJyYXkpIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcHJlX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbWF4YWNjZXNzKTsKKyAgdm9pZCAoKnJlYWxpemVfdmlydF9hcnJheXMpIChqX2NvbW1vbl9wdHIgY2luZm8pOworICBKU0FNUEFSUkFZICgqYWNjZXNzX3ZpcnRfc2FycmF5KSAoal9jb21tb25fcHRyIGNpbmZvLCBqdmlydF9zYXJyYXlfcHRyIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIG51bV9yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cml0YWJsZSk7CisgIEpCTE9DS0FSUkFZICgqYWNjZXNzX3ZpcnRfYmFycmF5KSAoal9jb21tb25fcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyaXRhYmxlKTsKKyAgdm9pZCAoKmZyZWVfcG9vbCkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQpOworICB2b2lkICgqc2VsZl9kZXN0cnVjdCkgKGpfY29tbW9uX3B0ciBjaW5mbyk7CisKKyAgLyogTGltaXQgb24gbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoaXMgSlBFRyBvYmplY3QuICAoTm90ZSB0aGF0IHRoaXMgaXMKKyAgICogbWVyZWx5IGFkdmlzb3J5LCBub3QgYSBndWFyYW50ZWVkIG1heGltdW07IGl0IG9ubHkgYWZmZWN0cyB0aGUgc3BhY2UKKyAgICogdXNlZCBmb3IgdmlydHVhbC1hcnJheSBidWZmZXJzLikgIE1heSBiZSBjaGFuZ2VkIGJ5IG91dGVyIGFwcGxpY2F0aW9uCisgICAqIGFmdGVyIGNyZWF0aW5nIHRoZSBKUEVHIG9iamVjdC4KKyAgICovCisgIGxvbmcgbWF4X21lbW9yeV90b191c2U7CisKKyAgLyogTWF4aW11bSBhbGxvY2F0aW9uIHJlcXVlc3QgYWNjZXB0ZWQgYnkgYWxsb2NfbGFyZ2UuICovCisgIGxvbmcgbWF4X2FsbG9jX2NodW5rOworfTsKKworCisvKiBSb3V0aW5lIHNpZ25hdHVyZSBmb3IgYXBwbGljYXRpb24tc3VwcGxpZWQgbWFya2VyIHByb2Nlc3NpbmcgbWV0aG9kcy4KKyAqIE5lZWQgbm90IHBhc3MgbWFya2VyIGNvZGUgc2luY2UgaXQgaXMgc3RvcmVkIGluIGNpbmZvLT51bnJlYWRfbWFya2VyLgorICovCit0eXBlZGVmIGJvb2xlYW4gKCpqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CisKKworLyogT3JpZ2luYWxseSwgdGhpcyBtYWNybyB3YXMgdXNlZCBhcyBhIHdheSBvZiBkZWZpbmluZyBmdW5jdGlvbiBwcm90b3R5cGVzCisgKiBmb3IgYm90aCBtb2Rlcm4gY29tcGlsZXJzIGFzIHdlbGwgYXMgb2xkZXIgY29tcGlsZXJzIHRoYXQgZGlkIG5vdCBzdXBwb3J0CisgKiBwcm90b3R5cGUgcGFyYW1ldGVycy4gIGxpYmpwZWctdHVyYm8gaGFzIG5ldmVyIHN1cHBvcnRlZCB0aGVzZSBvbGRlciwKKyAqIG5vbi1BTlNJIGNvbXBpbGVycywgYnV0IHRoZSBtYWNybyBpcyBzdGlsbCBpbmNsdWRlZCBiZWNhdXNlIHRoZXJlIGlzIHNvbWUKKyAqIHNvZnR3YXJlIG91dCB0aGVyZSB0aGF0IHVzZXMgaXQuCisgKi8KKworI2RlZmluZSBKUFAoYXJnbGlzdCkgICAgYXJnbGlzdAorCisKKy8qIERlZmF1bHQgZXJyb3ItbWFuYWdlbWVudCBzZXR1cCAqLworRVhURVJOKHN0cnVjdCBqcGVnX2Vycm9yX21nciAqKSBqcGVnX3N0ZF9lcnJvcihzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKmVycik7CisKKy8qIEluaXRpYWxpemF0aW9uIG9mIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0cy4KKyAqIGpwZWdfY3JlYXRlX2NvbXByZXNzKCkgYW5kIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoKSBhcmUgdGhlIGV4cG9ydGVkCisgKiBuYW1lcyB0aGF0IGFwcGxpY2F0aW9ucyBzaG91bGQgY2FsbC4gIFRoZXNlIGV4cGFuZCB0byBjYWxscyBvbgorICoganBlZ19DcmVhdGVDb21wcmVzcyBhbmQganBlZ19DcmVhdGVEZWNvbXByZXNzIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcGFzc2VkIGZvciB2ZXJzaW9uIG1pc21hdGNoIGNoZWNraW5nLgorICogTkI6IHlvdSBtdXN0IHNldCB1cCB0aGUgZXJyb3ItbWFuYWdlciBCRUZPUkUgY2FsbGluZyBqcGVnX2NyZWF0ZV94eHguCisgKi8KKyNkZWZpbmUganBlZ19jcmVhdGVfY29tcHJlc3MoY2luZm8pIFwKKyAganBlZ19DcmVhdGVDb21wcmVzcygoY2luZm8pLCBKUEVHX0xJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClzaXplb2Yoc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0KSkKKyNkZWZpbmUganBlZ19jcmVhdGVfZGVjb21wcmVzcyhjaW5mbykgXAorICBqcGVnX0NyZWF0ZURlY29tcHJlc3MoKGNpbmZvKSwgSlBFR19MSUJfVkVSU0lPTiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClzaXplb2Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKQorRVhURVJOKHZvaWQpIGpwZWdfQ3JlYXRlQ29tcHJlc3Moal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cnVjdHNpemUpOworRVhURVJOKHZvaWQpIGpwZWdfQ3JlYXRlRGVjb21wcmVzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cnVjdHNpemUpOworLyogRGVzdHJ1Y3Rpb24gb2YgSlBFRyBjb21wcmVzc2lvbiBvYmplY3RzICovCitFWFRFUk4odm9pZCkganBlZ19kZXN0cm95X2NvbXByZXNzKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworLyogU3RhbmRhcmQgZGF0YSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzOiBzdGRpbyBzdHJlYW1zLiAqLworLyogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBvcGVuaW5nIHRoZSBmaWxlIGJlZm9yZSBhbmQgY2xvc2luZyBhZnRlci4gKi8KK0VYVEVSTih2b2lkKSBqcGVnX3N0ZGlvX2Rlc3Qoal9jb21wcmVzc19wdHIgY2luZm8sIEZJTEUgKm91dGZpbGUpOworRVhURVJOKHZvaWQpIGpwZWdfc3RkaW9fc3JjKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEZJTEUgKmluZmlsZSk7CisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisvKiBEYXRhIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbWFuYWdlcnM6IG1lbW9yeSBidWZmZXJzLiAqLworRVhURVJOKHZvaWQpIGpwZWdfbWVtX2Rlc3Qoal9jb21wcmVzc19wdHIgY2luZm8sIHVuc2lnbmVkIGNoYXIgKipvdXRidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRzaXplKTsKK0VYVEVSTih2b2lkKSBqcGVnX21lbV9zcmMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWZmZXIsIHVuc2lnbmVkIGxvbmcgaW5zaXplKTsKKyNlbmRpZgorCisvKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24gKi8KK0VYVEVSTih2b2lkKSBqcGVnX3NldF9kZWZhdWx0cyhqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXIgc2V0dXAgYWlkcyAqLworRVhURVJOKHZvaWQpIGpwZWdfc2V0X2NvbG9yc3BhY2Uoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKX0NPTE9SX1NQQUNFIGNvbG9yc3BhY2UpOworRVhURVJOKHZvaWQpIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqcGVnX3NldF9xdWFsaXR5KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgcXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpOworRVhURVJOKHZvaWQpIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgc2NhbGVfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKK0VYVEVSTih2b2lkKSBqcGVnX2RlZmF1bHRfcXRhYmxlcyhqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKTsKKyNlbmRpZgorRVhURVJOKHZvaWQpIGpwZWdfYWRkX3F1YW50X3RhYmxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgd2hpY2hfdGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqYmFzaWNfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjYWxlX2ZhY3RvciwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSk7CitFWFRFUk4oaW50KSBqcGVnX3F1YWxpdHlfc2NhbGluZyhpbnQgcXVhbGl0eSk7CitFWFRFUk4odm9pZCkganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24oal9jb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGpwZWdfc3VwcHJlc3NfdGFibGVzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHN1cHByZXNzKTsKK0VYVEVSTihKUVVBTlRfVEJMICopIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUoal9jb21tb25fcHRyIGNpbmZvKTsKK0VYVEVSTihKSFVGRl9UQkwgKikganBlZ19hbGxvY19odWZmX3RhYmxlKGpfY29tbW9uX3B0ciBjaW5mbyk7CisKKy8qIE1haW4gZW50cnkgcG9pbnRzIGZvciBjb21wcmVzc2lvbiAqLworRVhURVJOKHZvaWQpIGpwZWdfc3RhcnRfY29tcHJlc3Moal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyaXRlX2FsbF90YWJsZXMpOworRVhURVJOKEpESU1FTlNJT04pIGpwZWdfd3JpdGVfc2NhbmxpbmVzKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKTsKK0VYVEVSTih2b2lkKSBqcGVnX2ZpbmlzaF9jb21wcmVzcyhqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisvKiBQcmVjYWxjdWxhdGUgSlBFRyBkaW1lbnNpb25zIGZvciBjdXJyZW50IGNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICovCitFWFRFUk4odm9pZCkganBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucyhqX2NvbXByZXNzX3B0ciBjaW5mbyk7CisjZW5kaWYKKworLyogUmVwbGFjZXMganBlZ193cml0ZV9zY2FubGluZXMgd2hlbiB3cml0aW5nIHJhdyBkb3duc2FtcGxlZCBkYXRhLiAqLworRVhURVJOKEpESU1FTlNJT04pIGpwZWdfd3JpdGVfcmF3X2RhdGEoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKTsKKworLyogV3JpdGUgYSBzcGVjaWFsIG1hcmtlci4gIFNlZSBsaWJqcGVnLnR4dCBjb25jZXJuaW5nIHNhZmUgdXNhZ2UuICovCitFWFRFUk4odm9pZCkganBlZ193cml0ZV9tYXJrZXIoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSk9DVEVUICpkYXRhcHRyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbik7CisvKiBTYW1lLCBidXQgcGllY2VtZWFsLiAqLworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbV9oZWFkZXIoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbik7CitFWFRFUk4odm9pZCkganBlZ193cml0ZV9tX2J5dGUoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpOworCisvKiBBbHRlcm5hdGUgY29tcHJlc3Npb24gZnVuY3Rpb246IGp1c3Qgd3JpdGUgYW4gYWJicmV2aWF0ZWQgdGFibGUgZmlsZSAqLworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfdGFibGVzKGpfY29tcHJlc3NfcHRyIGNpbmZvKTsKKworLyogV3JpdGUgSUNDIHByb2ZpbGUuICBTZWUgbGlianBlZy50eHQgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiAqLworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfaWNjX3Byb2ZpbGUoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKT0NURVQgKmljY19kYXRhX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpY2NfZGF0YV9sZW4pOworCisKKy8qIERlY29tcHJlc3Npb24gc3RhcnR1cDogcmVhZCBzdGFydCBvZiBKUEVHIGRhdGFzdHJlYW0gdG8gc2VlIHdoYXQncyB0aGVyZSAqLworRVhURVJOKGludCkganBlZ19yZWFkX2hlYWRlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHJlcXVpcmVfaW1hZ2UpOworLyogUmV0dXJuIHZhbHVlIGlzIG9uZSBvZjogKi8KKyNkZWZpbmUgSlBFR19TVVNQRU5ERUQgICAgICAgICAgIDAgLyogU3VzcGVuZGVkIGR1ZSB0byBsYWNrIG9mIGlucHV0IGRhdGEgKi8KKyNkZWZpbmUgSlBFR19IRUFERVJfT0sgICAgICAgICAgIDEgLyogRm91bmQgdmFsaWQgaW1hZ2UgZGF0YXN0cmVhbSAqLworI2RlZmluZSBKUEVHX0hFQURFUl9UQUJMRVNfT05MWSAgMiAvKiBGb3VuZCB2YWxpZCB0YWJsZS1zcGVjcy1vbmx5IGRhdGFzdHJlYW0gKi8KKy8qIElmIHlvdSBwYXNzIHJlcXVpcmVfaW1hZ2UgPSBUUlVFIChub3JtYWwgY2FzZSksIHlvdSBuZWVkIG5vdCBjaGVjayBmb3IKKyAqIGEgVEFCTEVTX09OTFkgcmV0dXJuIGNvZGU7IGFuIGFiYnJldmlhdGVkIGZpbGUgd2lsbCBjYXVzZSBhbiBlcnJvciBleGl0LgorICogSlBFR19TVVNQRU5ERUQgaXMgb25seSBwb3NzaWJsZSBpZiB5b3UgdXNlIGEgZGF0YSBzb3VyY2UgbW9kdWxlIHRoYXQgY2FuCisgKiBnaXZlIGEgc3VzcGVuc2lvbiByZXR1cm4gKHRoZSBzdGRpbyBzb3VyY2UgbW9kdWxlIGRvZXNuJ3QpLgorICovCisKKy8qIE1haW4gZW50cnkgcG9pbnRzIGZvciBkZWNvbXByZXNzaW9uICovCitFWFRFUk4oYm9vbGVhbikganBlZ19zdGFydF9kZWNvbXByZXNzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKEpESU1FTlNJT04pIGpwZWdfcmVhZF9zY2FubGluZXMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpOworRVhURVJOKEpESU1FTlNJT04pIGpwZWdfc2tpcF9zY2FubGluZXMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKTsKK0VYVEVSTih2b2lkKSBqcGVnX2Nyb3Bfc2NhbmxpbmUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkRJTUVOU0lPTiAqeG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqd2lkdGgpOworRVhURVJOKGJvb2xlYW4pIGpwZWdfZmluaXNoX2RlY29tcHJlc3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CisKKy8qIFJlcGxhY2VzIGpwZWdfcmVhZF9zY2FubGluZXMgd2hlbiByZWFkaW5nIHJhdyBkb3duc2FtcGxlZCBkYXRhLiAqLworRVhURVJOKEpESU1FTlNJT04pIGpwZWdfcmVhZF9yYXdfZGF0YShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbWF4X2xpbmVzKTsKKworLyogQWRkaXRpb25hbCBlbnRyeSBwb2ludHMgZm9yIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovCitFWFRFUk4oYm9vbGVhbikganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4oYm9vbGVhbikganBlZ19zdGFydF9vdXRwdXQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IHNjYW5fbnVtYmVyKTsKK0VYVEVSTihib29sZWFuKSBqcGVnX2ZpbmlzaF9vdXRwdXQoal9kZWNvbXByZXNzX3B0ciBjaW5mbyk7CitFWFRFUk4oYm9vbGVhbikganBlZ19pbnB1dF9jb21wbGV0ZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqcGVnX25ld19jb2xvcm1hcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKK0VYVEVSTihpbnQpIGpwZWdfY29uc3VtZV9pbnB1dChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKy8qIFJldHVybiB2YWx1ZSBpcyBvbmUgb2Y6ICovCisvKiAjZGVmaW5lIEpQRUdfU1VTUEVOREVEICAgICAgIDAgICAgU3VzcGVuZGVkIGR1ZSB0byBsYWNrIG9mIGlucHV0IGRhdGEgKi8KKyNkZWZpbmUgSlBFR19SRUFDSEVEX1NPUyAgICAgICAgMSAvKiBSZWFjaGVkIHN0YXJ0IG9mIG5ldyBzY2FuICovCisjZGVmaW5lIEpQRUdfUkVBQ0hFRF9FT0kgICAgICAgIDIgLyogUmVhY2hlZCBlbmQgb2YgaW1hZ2UgKi8KKyNkZWZpbmUgSlBFR19ST1dfQ09NUExFVEVEICAgICAgMyAvKiBDb21wbGV0ZWQgb25lIGlNQ1Ugcm93ICovCisjZGVmaW5lIEpQRUdfU0NBTl9DT01QTEVURUQgICAgIDQgLyogQ29tcGxldGVkIGxhc3QgaU1DVSByb3cgb2YgYSBzY2FuICovCisKKy8qIFByZWNhbGN1bGF0ZSBvdXRwdXQgZGltZW5zaW9ucyBmb3IgY3VycmVudCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorRVhURVJOKHZvaWQpIGpwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKyNlbmRpZgorRVhURVJOKHZvaWQpIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworLyogQ29udHJvbCBzYXZpbmcgb2YgQ09NIGFuZCBBUFBuIG1hcmtlcnMgaW50byBtYXJrZXJfbGlzdC4gKi8KK0VYVEVSTih2b2lkKSBqcGVnX3NhdmVfbWFya2VycyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdCk7CisKKy8qIEluc3RhbGwgYSBzcGVjaWFsIHByb2Nlc3NpbmcgbWV0aG9kIGZvciBDT00gb3IgQVBQbiBtYXJrZXJzLiAqLworRVhURVJOKHZvaWQpIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3Ioal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXJrZXJfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2Qgcm91dGluZSk7CisKKy8qIFJlYWQgb3Igd3JpdGUgcmF3IERDVCBjb2VmZmljaWVudHMgLS0tIHVzZWZ1bCBmb3IgbG9zc2xlc3MgdHJhbnNjb2RpbmcuICovCitFWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqcGVnX3JlYWRfY29lZmZpY2llbnRzKGpfZGVjb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKmNvZWZfYXJyYXlzKTsKK0VYVEVSTih2b2lkKSBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyhqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal9jb21wcmVzc19wdHIgZHN0aW5mbyk7CisKKy8qIElmIHlvdSBjaG9vc2UgdG8gYWJvcnQgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBiZWZvcmUgY29tcGxldGluZworICoganBlZ19maW5pc2hfKGRlKWNvbXByZXNzLCB0aGVuIHlvdSBuZWVkIHRvIGNsZWFuIHVwIHRvIHJlbGVhc2UgbWVtb3J5LAorICogdGVtcG9yYXJ5IGZpbGVzLCBldGMuICBZb3UgY2FuIGp1c3QgY2FsbCBqcGVnX2Rlc3Ryb3lfKGRlKWNvbXByZXNzCisgKiBpZiB5b3UncmUgZG9uZSB3aXRoIHRoZSBKUEVHIG9iamVjdCwgYnV0IGlmIHlvdSB3YW50IHRvIGNsZWFuIGl0IHVwIGFuZAorICogcmV1c2UgaXQsIGNhbGwgdGhpczoKKyAqLworRVhURVJOKHZvaWQpIGpwZWdfYWJvcnRfY29tcHJlc3Moal9jb21wcmVzc19wdHIgY2luZm8pOworRVhURVJOKHZvaWQpIGpwZWdfYWJvcnRfZGVjb21wcmVzcyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvKTsKKworLyogR2VuZXJpYyB2ZXJzaW9ucyBvZiBqcGVnX2Fib3J0IGFuZCBqcGVnX2Rlc3Ryb3kgdGhhdCB3b3JrIG9uIGVpdGhlcgorICogZmxhdm9yIG9mIEpQRUcgb2JqZWN0LiAgVGhlc2UgbWF5IGJlIG1vcmUgY29udmVuaWVudCBpbiBzb21lIHBsYWNlcy4KKyAqLworRVhURVJOKHZvaWQpIGpwZWdfYWJvcnQoal9jb21tb25fcHRyIGNpbmZvKTsKK0VYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3koal9jb21tb25fcHRyIGNpbmZvKTsKKworLyogRGVmYXVsdCByZXN0YXJ0LW1hcmtlci1yZXN5bmMgcHJvY2VkdXJlIGZvciB1c2UgYnkgZGF0YSBzb3VyY2UgbW9kdWxlcyAqLworRVhURVJOKGJvb2xlYW4pIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRlc2lyZWQpOworCisvKiBSZWFkIElDQyBwcm9maWxlLiAgU2VlIGxpYmpwZWcudHh0IGZvciB1c2FnZSBpbmZvcm1hdGlvbi4gKi8KK0VYVEVSTihib29sZWFuKSBqcGVnX3JlYWRfaWNjX3Byb2ZpbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSk9DVEVUICoqaWNjX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmljY19kYXRhX2xlbik7CisKKworLyogVGhlc2UgbWFya2VyIGNvZGVzIGFyZSBleHBvcnRlZCBzaW5jZSBhcHBsaWNhdGlvbnMgYW5kIGRhdGEgc291cmNlIG1vZHVsZXMKKyAqIGFyZSBsaWtlbHkgdG8gd2FudCB0byB1c2UgdGhlbS4KKyAqLworCisjZGVmaW5lIEpQRUdfUlNUMCAgICAgICAweEQwICAgIC8qIFJTVDAgbWFya2VyIGNvZGUgKi8KKyNkZWZpbmUgSlBFR19FT0kgICAgICAgIDB4RDkgICAgLyogRU9JIG1hcmtlciBjb2RlICovCisjZGVmaW5lIEpQRUdfQVBQMCAgICAgICAweEUwICAgIC8qIEFQUDAgbWFya2VyIGNvZGUgKi8KKyNkZWZpbmUgSlBFR19DT00gICAgICAgIDB4RkUgICAgLyogQ09NIG1hcmtlciBjb2RlICovCisKKworLyogSWYgd2UgaGF2ZSBhIGJyYWluLWRhbWFnZWQgY29tcGlsZXIgdGhhdCBlbWl0cyB3YXJuaW5ncyAob3Igd29yc2UsIGVycm9ycykKKyAqIGZvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgbmV2ZXIgZmlsbGVkIGluLCBrZWVwIGl0IHF1aWV0IGJ5CisgKiBzdXBwbHlpbmcgZHVtbXkgZGVmaW5pdGlvbnMgZm9yIHRoZSB2YXJpb3VzIHN1YnN0cnVjdHVyZXMuCisgKi8KKworI2lmZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisjaWZuZGVmIEpQRUdfSU5URVJOQUxTICAgICAgICAgIC8qIHdpbGwgYmUgZGVmaW5lZCBpbiBqcGVnaW50LmggKi8KK3N0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY29tcF9tYXN0ZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZF9wb3N0X2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19pbnZlcnNlX2RjdCB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ191cHNhbXBsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyIHsgbG9uZyBkdW1teTsgfTsKKyNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLworI2VuZGlmIC8qIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOICovCisKKworLyoKKyAqIFRoZSBKUEVHIGxpYnJhcnkgbW9kdWxlcyBkZWZpbmUgSlBFR19JTlRFUk5BTFMgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUuCisgKiBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGRlY2xhcmF0aW9ucyBhcmUgcmVhZCBvbmx5IHdoZW4gdGhhdCBpcyB0cnVlLgorICogQXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5IHNob3VsZCBub3QgaW5jbHVkZSBqcGVnaW50LmgsIGJ1dCBtYXkgd2lzaAorICogdG8gaW5jbHVkZSBqZXJyb3IuaC4KKyAqLworCisjaWZkZWYgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqcGVnaW50LmgiICAgICAgICAgICAgLyogZmV0Y2ggcHJpdmF0ZSBkZWNsYXJhdGlvbnMgKi8KKyNpbmNsdWRlICJqZXJyb3IuaCIgICAgICAgICAgICAgLyogZmV0Y2ggZXJyb3IgY29kZXMgdG9vICovCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjaWZuZGVmIERPTlRfVVNFX0VYVEVSTl9DCit9CisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogSlBFR0xJQl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qcGVndHJhbi4xIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanBlZ3RyYW4uMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZiMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanBlZ3RyYW4uMQpAQCAtMCwwICsxLDI5NSBAQAorLlRIIEpQRUdUUkFOIDEgIjE4IE1hcmNoIDIwMTciCisuU0ggTkFNRQoranBlZ3RyYW4gXC0gbG9zc2xlc3MgdHJhbnNmb3JtYXRpb24gb2YgSlBFRyBmaWxlcworLlNIIFNZTk9QU0lTCisuQiBqcGVndHJhbgorWworLkkgb3B0aW9ucworXQorWworLkkgZmlsZW5hbWUKK10KKy5MUAorLlNIIERFU0NSSVBUSU9OCisuTFAKKy5CIGpwZWd0cmFuCitwZXJmb3JtcyB2YXJpb3VzIHVzZWZ1bCB0cmFuc2Zvcm1hdGlvbnMgb2YgSlBFRyBmaWxlcy4KK0l0IGNhbiB0cmFuc2xhdGUgdGhlIGNvZGVkIHJlcHJlc2VudGF0aW9uIGZyb20gb25lIHZhcmlhbnQgb2YgSlBFRyB0byBhbm90aGVyLAorZm9yIGV4YW1wbGUgZnJvbSBiYXNlbGluZSBKUEVHIHRvIHByb2dyZXNzaXZlIEpQRUcgb3IgdmljZSB2ZXJzYS4gIEl0IGNhbiBhbHNvCitwZXJmb3JtIHNvbWUgcmVhcnJhbmdlbWVudHMgb2YgdGhlIGltYWdlIGRhdGEsIGZvciBleGFtcGxlIHR1cm5pbmcgYW4gaW1hZ2UKK2Zyb20gbGFuZHNjYXBlIHRvIHBvcnRyYWl0IGZvcm1hdCBieSByb3RhdGlvbi4KKy5QUAorRm9yIEVYSUYgZmlsZXMgYW5kIEpQRUcgZmlsZXMgY29udGFpbmluZyBFeGlmIGRhdGEsIHlvdSBtYXkgcHJlZmVyIHRvIHVzZQorLkIgZXhpZnRyYW4KK2luc3RlYWQuCisuUFAKKy5CIGpwZWd0cmFuCit3b3JrcyBieSByZWFycmFuZ2luZyB0aGUgY29tcHJlc3NlZCBkYXRhIChEQ1QgY29lZmZpY2llbnRzKSwgd2l0aG91dAorZXZlciBmdWxseSBkZWNvZGluZyB0aGUgaW1hZ2UuICBUaGVyZWZvcmUsIGl0cyB0cmFuc2Zvcm1hdGlvbnMgYXJlIGxvc3NsZXNzOgordGhlcmUgaXMgbm8gaW1hZ2UgZGVncmFkYXRpb24gYXQgYWxsLCB3aGljaCB3b3VsZCBub3QgYmUgdHJ1ZSBpZiB5b3UgdXNlZAorLkIgZGpwZWcKK2ZvbGxvd2VkIGJ5CisuQiBjanBlZwordG8gYWNjb21wbGlzaCB0aGUgc2FtZSBjb252ZXJzaW9uLiAgQnV0IGJ5IHRoZSBzYW1lIHRva2VuLAorLkIganBlZ3RyYW4KK2Nhbm5vdCBwZXJmb3JtIGxvc3N5IG9wZXJhdGlvbnMgc3VjaCBhcyBjaGFuZ2luZyB0aGUgaW1hZ2UgcXVhbGl0eS4gIEhvd2V2ZXIsCit3aGlsZSB0aGUgaW1hZ2UgZGF0YSBpcyBsb3NzbGVzc2x5IHRyYW5zZm9ybWVkLCBtZXRhZGF0YSBjYW4gYmUgcmVtb3ZlZC4gIFNlZQordGhlCisuQiBcLWNvcHkKK29wdGlvbiBmb3Igc3BlY2lmaWNzLgorLlBQCisuQiBqcGVndHJhbgorcmVhZHMgdGhlIG5hbWVkIEpQRUcvSkZJRiBmaWxlLCBvciB0aGUgc3RhbmRhcmQgaW5wdXQgaWYgbm8gZmlsZSBpcworbmFtZWQsIGFuZCBwcm9kdWNlcyBhIEpQRUcvSkZJRiBmaWxlIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisuU0ggT1BUSU9OUworQWxsIHN3aXRjaCBuYW1lcyBtYXkgYmUgYWJicmV2aWF0ZWQ7IGZvciBleGFtcGxlLAorLkIgXC1vcHRpbWl6ZQorbWF5IGJlIHdyaXR0ZW4KKy5CIFwtb3B0CitvcgorLkJSIFwtbyAuCitVcHBlciBhbmQgbG93ZXIgY2FzZSBhcmUgZXF1aXZhbGVudC4KK0JyaXRpc2ggc3BlbGxpbmdzIGFyZSBhbHNvIGFjY2VwdGVkIChlLmcuLAorLkJSIFwtb3B0aW1pc2UgKSwKK3Rob3VnaCBmb3IgYnJldml0eSB0aGVzZSBhcmUgbm90IG1lbnRpb25lZCBiZWxvdy4KKy5QUAorVG8gc3BlY2lmeSB0aGUgY29kZWQgSlBFRyByZXByZXNlbnRhdGlvbiB1c2VkIGluIHRoZSBvdXRwdXQgZmlsZSwKKy5CIGpwZWd0cmFuCithY2NlcHRzIGEgc3Vic2V0IG9mIHRoZSBzd2l0Y2hlcyByZWNvZ25pemVkIGJ5CisuQlIgY2pwZWcgOgorLlRQCisuQiBcLW9wdGltaXplCitQZXJmb3JtIG9wdGltaXphdGlvbiBvZiBlbnRyb3B5IGVuY29kaW5nIHBhcmFtZXRlcnMuCisuVFAKKy5CIFwtcHJvZ3Jlc3NpdmUKK0NyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGUuCisuVFAKKy5CSSBcLXJlc3RhcnQgIiBOIgorRW1pdCBhIEpQRUcgcmVzdGFydCBtYXJrZXIgZXZlcnkgTiBNQ1Ugcm93cywgb3IgZXZlcnkgTiBNQ1UgYmxvY2tzIGlmICJCIiBpcworYXR0YWNoZWQgdG8gdGhlIG51bWJlci4KKy5UUAorLkIgXC1hcml0aG1ldGljCitVc2UgYXJpdGhtZXRpYyBjb2RpbmcuCisuVFAKKy5CSSBcLXNjYW5zICIgZmlsZSIKK1VzZSB0aGUgc2NhbiBzY3JpcHQgZ2l2ZW4gaW4gdGhlIHNwZWNpZmllZCB0ZXh0IGZpbGUuCisuUFAKK1NlZQorLkJSIGNqcGVnICgxKQorZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBzd2l0Y2hlcy4KK0lmIHlvdSBzcGVjaWZ5IG5vbmUgb2YgdGhlc2Ugc3dpdGNoZXMsIHlvdSBnZXQgYSBwbGFpbiBiYXNlbGluZS1KUEVHIG91dHB1dAorZmlsZS4gIFRoZSBxdWFsaXR5IHNldHRpbmcgYW5kIHNvIGZvcnRoIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBpbnB1dCBmaWxlLgorLlBQCitUaGUgaW1hZ2UgY2FuIGJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSBzd2l0Y2hlczoKKy5UUAorLkIgXC1mbGlwIGhvcml6b250YWwKK01pcnJvciBpbWFnZSBob3Jpem9udGFsbHkgKGxlZnQtcmlnaHQpLgorLlRQCisuQiBcLWZsaXAgdmVydGljYWwKK01pcnJvciBpbWFnZSB2ZXJ0aWNhbGx5ICh0b3AtYm90dG9tKS4KKy5UUAorLkIgXC1yb3RhdGUgOTAKK1JvdGF0ZSBpbWFnZSA5MCBkZWdyZWVzIGNsb2Nrd2lzZS4KKy5UUAorLkIgXC1yb3RhdGUgMTgwCitSb3RhdGUgaW1hZ2UgMTgwIGRlZ3JlZXMuCisuVFAKKy5CIFwtcm90YXRlIDI3MAorUm90YXRlIGltYWdlIDI3MCBkZWdyZWVzIGNsb2Nrd2lzZSAob3IgOTAgY2N3KS4KKy5UUAorLkIgXC10cmFuc3Bvc2UKK1RyYW5zcG9zZSBpbWFnZSAoYWNyb3NzIFVMLXRvLUxSIGF4aXMpLgorLlRQCisuQiBcLXRyYW5zdmVyc2UKK1RyYW5zdmVyc2UgdHJhbnNwb3NlIChhY3Jvc3MgVVItdG8tTEwgYXhpcykuCisuUFAKK1RoZSB0cmFuc3Bvc2UgdHJhbnNmb3JtYXRpb24gaGFzIG5vIHJlc3RyaWN0aW9ucyByZWdhcmRpbmcgaW1hZ2UgZGltZW5zaW9ucy4KK1RoZSBvdGhlciB0cmFuc2Zvcm1hdGlvbnMgb3BlcmF0ZSByYXRoZXIgb2RkbHkgaWYgdGhlIGltYWdlIGRpbWVuc2lvbnMgYXJlIG5vdAorYSBtdWx0aXBsZSBvZiB0aGUgaU1DVSBzaXplICh1c3VhbGx5IDggb3IgMTYgcGl4ZWxzKSwgYmVjYXVzZSB0aGV5IGNhbiBvbmx5Cit0cmFuc2Zvcm0gY29tcGxldGUgYmxvY2tzIG9mIERDVCBjb2VmZmljaWVudCBkYXRhIGluIHRoZSBkZXNpcmVkIHdheS4KKy5QUAorLkJSIGpwZWd0cmFuICdzCitkZWZhdWx0IGJlaGF2aW9yIHdoZW4gdHJhbnNmb3JtaW5nIGFuIG9kZC1zaXplIGltYWdlIGlzIGRlc2lnbmVkCit0byBwcmVzZXJ2ZSBleGFjdCByZXZlcnNpYmlsaXR5IGFuZCBtYXRoZW1hdGljYWwgY29uc2lzdGVuY3kgb2YgdGhlCit0cmFuc2Zvcm1hdGlvbiBzZXQuICBBcyBzdGF0ZWQsIHRyYW5zcG9zZSBpcyBhYmxlIHRvIGZsaXAgdGhlIGVudGlyZSBpbWFnZQorYXJlYS4gIEhvcml6b250YWwgbWlycm9yaW5nIGxlYXZlcyBhbnkgcGFydGlhbCBpTUNVIGNvbHVtbiBhdCB0aGUgcmlnaHQgZWRnZQordW50b3VjaGVkLCBidXQgaXMgYWJsZSB0byBmbGlwIGFsbCByb3dzIG9mIHRoZSBpbWFnZS4gIFNpbWlsYXJseSwgdmVydGljYWwKK21pcnJvcmluZyBsZWF2ZXMgYW55IHBhcnRpYWwgaU1DVSByb3cgYXQgdGhlIGJvdHRvbSBlZGdlIHVudG91Y2hlZCwgYnV0IGlzCithYmxlIHRvIGZsaXAgYWxsIGNvbHVtbnMuICBUaGUgb3RoZXIgdHJhbnNmb3JtcyBjYW4gYmUgYnVpbHQgdXAgYXMgc2VxdWVuY2VzCitvZiB0cmFuc3Bvc2UgYW5kIGZsaXAgb3BlcmF0aW9uczsgZm9yIGNvbnNpc3RlbmN5LCB0aGVpciBhY3Rpb25zIG9uIGVkZ2UKK3BpeGVscyBhcmUgZGVmaW5lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgZW5kIHJlc3VsdCBvZiB0aGUgY29ycmVzcG9uZGluZwordHJhbnNwb3NlLWFuZC1mbGlwIHNlcXVlbmNlLgorLlBQCitGb3IgcHJhY3RpY2FsIHVzZSwgeW91IG1heSBwcmVmZXIgdG8gZGlzY2FyZCBhbnkgdW50cmFuc2Zvcm1hYmxlIGVkZ2UgcGl4ZWxzCityYXRoZXIgdGhhbiBoYXZpbmcgYSBzdHJhbmdlLWxvb2tpbmcgc3RyaXAgYWxvbmcgdGhlIHJpZ2h0IGFuZC9vciBib3R0b20gZWRnZXMKK29mIGEgdHJhbnNmb3JtZWQgaW1hZ2UuICBUbyBkbyB0aGlzLCBhZGQgdGhlCisuQiBcLXRyaW0KK3N3aXRjaDoKKy5UUAorLkIgXC10cmltCitEcm9wIG5vbi10cmFuc2Zvcm1hYmxlIGVkZ2UgYmxvY2tzLgorLklQCitPYnZpb3VzbHksIGEgdHJhbnNmb3JtYXRpb24gd2l0aAorLkIgXC10cmltCitpcyBub3QgcmV2ZXJzaWJsZSwgc28gc3RyaWN0bHkgc3BlYWtpbmcKKy5CIGpwZWd0cmFuCit3aXRoIHRoaXMgc3dpdGNoIGlzIG5vdCBsb3NzbGVzcy4gIEFsc28sIHRoZSBleHBlY3RlZCBtYXRoZW1hdGljYWwKK2VxdWl2YWxlbmNlcyBiZXR3ZWVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgbm8gbG9uZ2VyIGhvbGQuICBGb3IgZXhhbXBsZSwKKy5CIFwtcm90IDI3MCAtdHJpbQordHJpbXMgb25seSB0aGUgYm90dG9tIGVkZ2UsIGJ1dAorLkIgXC1yb3QgOTAgLXRyaW0KK2ZvbGxvd2VkIGJ5CisuQiBcLXJvdCAxODAgLXRyaW0KK3RyaW1zIGJvdGggZWRnZXMuCisuVFAKKy5CIFwtcGVyZmVjdAorSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gcGVyZmVjdCB0cmFuc2Zvcm1hdGlvbnMsIGFkZCB0aGUKKy5CIFwtcGVyZmVjdAorc3dpdGNoLiAgVGhpcyBjYXVzZXMKKy5CIGpwZWd0cmFuCit0byBmYWlsIHdpdGggYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBwZXJmZWN0LgorLklQCitGb3IgZXhhbXBsZSwgeW91IG1heSB3YW50IHRvIGRvCisuSVAKKy5CIChqcGVndHJhbiBcLXJvdCA5MCAtcGVyZmVjdAorLkkgZm9vLmpwZworLkIgfHwgZGpwZWcKKy5JIGZvby5qcGcKKy5CIHwgcG5tZmxpcCBcLXI5MCB8IGNqcGVnKQorLklQCit0byBkbyBhIHBlcmZlY3Qgcm90YXRpb24sIGlmIGF2YWlsYWJsZSwgb3IgYW4gYXBwcm94aW1hdGVkIG9uZSBpZiBub3QuCisuUFAKK1RoaXMgdmVyc2lvbiBvZiBcZkJqcGVndHJhblxmUiBhbHNvIG9mZmVycyBhIGxvc3NsZXNzIGNyb3Agb3B0aW9uLCB3aGljaAorZGlzY2FyZHMgZGF0YSBvdXRzaWRlIG9mIGEgZ2l2ZW4gaW1hZ2UgcmVnaW9uIGJ1dCBsb3NzbGVzc2x5IHByZXNlcnZlcyB3aGF0IGlzCitpbnNpZGUuIExpa2UgdGhlIHJvdGF0ZSBhbmQgZmxpcCB0cmFuc2Zvcm1zLCBsb3NzbGVzcyBjcm9wIGlzIHJlc3RyaWN0ZWQgYnkgdGhlCitjdXJyZW50IEpQRUcgZm9ybWF0OyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNlbGVjdGVkIHJlZ2lvbiBtdXN0IGZhbGwgb24KK2FuIGlNQ1UgYm91bmRhcnkuICBJZiBpdCBkb2Vzbid0LCB0aGVuIGl0IGlzIHNpbGVudGx5IG1vdmVkIHVwIGFuZC9vciBsZWZ0IHRvCit0aGUgbmVhcmVzdCBpTUNVIGJvdW5kYXJ5ICh0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGlzIHVuY2hhbmdlZC4pICBUaHVzLCB0aGUKK291dHB1dCBpbWFnZSBjb3ZlcnMgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCByZWdpb24sIGJ1dCBpdCBtYXkgY292ZXIgbW9yZS4gIFRoZQorYWRqdXN0bWVudCBvZiB0aGUgcmVnaW9uIGRpbWVuc2lvbnMgbWF5IGJlIG9wdGlvbmFsbHkgZGlzYWJsZWQgYnkgYXR0YWNoaW5nCithbiAnZicgY2hhcmFjdGVyICgiZm9yY2UiKSB0byB0aGUgd2lkdGggb3IgaGVpZ2h0IG51bWJlci4KKworVGhlIGltYWdlIGNhbiBiZSBsb3NzbGVzc2x5IGNyb3BwZWQgYnkgZ2l2aW5nIHRoZSBzd2l0Y2g6CisuVFAKKy5CIFwtY3JvcCBXeEgrWCtZCitDcm9wIHRoZSBpbWFnZSB0byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB3aWR0aCBXIGFuZCBoZWlnaHQgSCwgc3RhcnRpbmcgYXQKK3BvaW50IFgsWS4gIFRoZSBsb3NzbGVzcyBjcm9wIGZlYXR1cmUgZGlzY2FyZHMgZGF0YSBvdXRzaWRlIG9mIGEgZ2l2ZW4gaW1hZ2UKK3JlZ2lvbiBidXQgbG9zc2xlc3NseSBwcmVzZXJ2ZXMgd2hhdCBpcyBpbnNpZGUuICBMaWtlIHRoZSByb3RhdGUgYW5kIGZsaXAKK3RyYW5zZm9ybXMsIGxvc3NsZXNzIGNyb3AgaXMgcmVzdHJpY3RlZCBieSB0aGUgY3VycmVudCBKUEVHIGZvcm1hdDsgdGhlIHVwcGVyCitsZWZ0IGNvcm5lciBvZiB0aGUgc2VsZWN0ZWQgcmVnaW9uIG11c3QgZmFsbCBvbiBhbiBpTUNVIGJvdW5kYXJ5LiAgSWYgaXQKK2RvZXNuJ3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgbW92ZWQgdXAgYW5kL29yIGxlZnQgdG8gdGhlIG5lYXJlc3QgaU1DVSBib3VuZGFyeQorKHRoZSBsb3dlciByaWdodCBjb3JuZXIgaXMgdW5jaGFuZ2VkLikKKy5QUAorT3RoZXIgbm90LXN0cmljdGx5LWxvc3NsZXNzIHRyYW5zZm9ybWF0aW9uIHN3aXRjaGVzIGFyZToKKy5UUAorLkIgXC1ncmF5c2NhbGUKK0ZvcmNlIGdyYXlzY2FsZSBvdXRwdXQuCisuSVAKK1RoaXMgb3B0aW9uIGRpc2NhcmRzIHRoZSBjaHJvbWluYW5jZSBjaGFubmVscyBpZiB0aGUgaW5wdXQgaW1hZ2UgaXMgWUNiQ3IKKyhpZSwgYSBzdGFuZGFyZCBjb2xvciBKUEVHKSwgcmVzdWx0aW5nIGluIGEgZ3JheXNjYWxlIEpQRUcgZmlsZS4gIFRoZQorbHVtaW5hbmNlIGNoYW5uZWwgaXMgcHJlc2VydmVkIGV4YWN0bHksIHNvIHRoaXMgaXMgYSBiZXR0ZXIgbWV0aG9kIG9mIHJlZHVjaW5nCit0byBncmF5c2NhbGUgdGhhbiBkZWNvbXByZXNzaW9uLCBjb252ZXJzaW9uLCBhbmQgcmVjb21wcmVzc2lvbi4gIFRoaXMgc3dpdGNoCitpcyBwYXJ0aWN1bGFybHkgaGFuZHkgZm9yIGZpeGluZyBhIG1vbm9jaHJvbWUgcGljdHVyZSB0aGF0IHdhcyBtaXN0YWtlbmx5CitlbmNvZGVkIGFzIGEgY29sb3IgSlBFRy4gIChJbiBzdWNoIGEgY2FzZSwgdGhlIHNwYWNlIHNhdmluZ3MgZnJvbSBnZXR0aW5nIHJpZAorb2YgdGhlIG5lYXItZW1wdHkgY2hyb21hIGNoYW5uZWxzIHdvbid0IGJlIGxhcmdlOyBidXQgdGhlIGRlY29kaW5nIHRpbWUgZm9yCithIGdyYXlzY2FsZSBKUEVHIGlzIHN1YnN0YW50aWFsbHkgbGVzcyB0aGFuIHRoYXQgZm9yIGEgY29sb3IgSlBFRy4pCisuUFAKKy5CIGpwZWd0cmFuCithbHNvIHJlY29nbml6ZXMgdGhlc2Ugc3dpdGNoZXMgdGhhdCBjb250cm9sIHdoYXQgdG8gZG8gd2l0aCAiZXh0cmEiIG1hcmtlcnMsCitzdWNoIGFzIGNvbW1lbnQgYmxvY2tzOgorLlRQCisuQiBcLWNvcHkgbm9uZQorQ29weSBubyBleHRyYSBtYXJrZXJzIGZyb20gc291cmNlIGZpbGUuICBUaGlzIHNldHRpbmcgc3VwcHJlc3NlcyBhbGwKK2NvbW1lbnRzIGFuZCBvdGhlciBtZXRhZGF0YSBpbiB0aGUgc291cmNlIGZpbGUuCisuVFAKKy5CIFwtY29weSBjb21tZW50cworQ29weSBvbmx5IGNvbW1lbnQgbWFya2Vycy4gIFRoaXMgc2V0dGluZyBjb3BpZXMgY29tbWVudHMgZnJvbSB0aGUgc291cmNlIGZpbGUKK2J1dCBkaXNjYXJkcyBhbnkgb3RoZXIgbWV0YWRhdGEuCisuVFAKKy5CIFwtY29weSBhbGwKK0NvcHkgYWxsIGV4dHJhIG1hcmtlcnMuICBUaGlzIHNldHRpbmcgcHJlc2VydmVzIG1pc2NlbGxhbmVvdXMgbWFya2VycworZm91bmQgaW4gdGhlIHNvdXJjZSBmaWxlLCBzdWNoIGFzIEpGSUYgdGh1bWJuYWlscywgRXhpZiBkYXRhLCBhbmQgUGhvdG9zaG9wCitzZXR0aW5ncy4gIEluIHNvbWUgZmlsZXMsIHRoZXNlIGV4dHJhIG1hcmtlcnMgY2FuIGJlIHNpemFibGUuICBOb3RlIHRoYXQgdGhpcworb3B0aW9uIHdpbGwgY29weSB0aHVtYm5haWxzIGFzLWlzOyB0aGV5IHdpbGwgbm90IGJlIHRyYW5zZm9ybWVkLgorLlBQCitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBcZkItY29weSBjb21tZW50c1xmUi4gIChOb3RlOiBpbiBJSkcgcmVsZWFzZXMgdjYgYW5kCit2NmEsIFxmQmpwZWd0cmFuXGZSIGFsd2F5cyBkaWQgdGhlIGVxdWl2YWxlbnQgb2YgXGZCLWNvcHkgbm9uZVxmUi4pCisuUFAKK0FkZGl0aW9uYWwgc3dpdGNoZXMgcmVjb2duaXplZCBieSBqcGVndHJhbiBhcmU6CisuVFAKKy5CSSBcLWljYyAiIGZpbGUiCitFbWJlZCBJQ0MgY29sb3IgbWFuYWdlbWVudCBwcm9maWxlIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGZpbGUuICBOb3RlIHRoYXQKK3RoaXMgd2lsbCBjYXVzZSBcZkJqcGVndHJhblxmUiB0byBpZ25vcmUgYW55IEFQUDIgbWFya2VycyBpbiB0aGUgaW5wdXQgZmlsZSwKK2V2ZW4gaWYgXGZCLWNvcHkgYWxsXGZSIGlzIHNwZWNpZmllZC4KKy5UUAorLkJJIFwtbWF4bWVtb3J5ICIgTiIKK1NldCBsaW1pdCBmb3IgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gcHJvY2Vzc2luZyBsYXJnZSBpbWFnZXMuICBWYWx1ZSBpcworaW4gdGhvdXNhbmRzIG9mIGJ5dGVzLCBvciBtaWxsaW9ucyBvZiBieXRlcyBpZiAiTSIgaXMgYXR0YWNoZWQgdG8gdGhlCitudW1iZXIuICBGb3IgZXhhbXBsZSwKKy5CIFwtbWF4IDRtCitzZWxlY3RzIDQwMDAwMDAgYnl0ZXMuICBJZiBtb3JlIHNwYWNlIGlzIG5lZWRlZCwgYW4gZXJyb3Igd2lsbCBvY2N1ci4KKy5UUAorLkJJIFwtb3V0ZmlsZSAiIG5hbWUiCitTZW5kIG91dHB1dCBpbWFnZSB0byB0aGUgbmFtZWQgZmlsZSwgbm90IHRvIHN0YW5kYXJkIG91dHB1dC4KKy5UUAorLkIgXC12ZXJib3NlCitFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlCisuQlIgXC12ICdzCitnaXZlIG1vcmUgb3V0cHV0LiAgQWxzbywgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGF0IHN0YXJ0dXAuCisuVFAKKy5CIFwtZGVidWcKK1NhbWUgYXMKKy5CUiBcLXZlcmJvc2UgLgorLlRQCisuQiBcLXZlcnNpb24KK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuCisuU0ggRVhBTVBMRVMKKy5MUAorVGhpcyBleGFtcGxlIGNvbnZlcnRzIGEgYmFzZWxpbmUgSlBFRyBmaWxlIHRvIHByb2dyZXNzaXZlIGZvcm06CisuSVAKKy5CIGpwZWd0cmFuIFwtcHJvZ3Jlc3NpdmUKKy5JIGZvby5qcGcKKy5CID4KKy5JIGZvb3Byb2cuanBnCisuUFAKK1RoaXMgZXhhbXBsZSByb3RhdGVzIGFuIGltYWdlIDkwIGRlZ3JlZXMgY2xvY2t3aXNlLCBkaXNjYXJkaW5nIGFueQordW5yb3RhdGFibGUgZWRnZSBwaXhlbHM6CisuSVAKKy5CIGpwZWd0cmFuIFwtcm90IDkwIC10cmltCisuSSBmb28uanBnCisuQiA+CisuSSBmb285MC5qcGcKKy5TSCBFTlZJUk9OTUVOVAorLlRQCisuQiBKUEVHTUVNCitJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXRzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IG1lbW9yeSBsaW1pdC4KK1RoZSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgZGVzY3JpYmVkIGZvciB0aGUKKy5CIFwtbWF4bWVtb3J5Citzd2l0Y2guCisuQiBKUEVHTUVNCitvdmVycmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgc3BlY2lmaWVkIHdoZW4gdGhlIHByb2dyYW0gd2FzIGNvbXBpbGVkLCBhbmQKK2l0c2VsZiBpcyBvdmVycmlkZGVuIGJ5IGFuIGV4cGxpY2l0CisuQlIgXC1tYXhtZW1vcnkgLgorLlNIIFNFRSBBTFNPCisuQlIgY2pwZWcgKDEpLAorLkJSIGRqcGVnICgxKSwKKy5CUiByZGpwZ2NvbSAoMSksCisuQlIgd3JqcGdjb20gKDEpCisuYnIKK1dhbGxhY2UsIEdyZWdvcnkgSy4gICJUaGUgSlBFRyBTdGlsbCBQaWN0dXJlIENvbXByZXNzaW9uIFN0YW5kYXJkIiwKK0NvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sIEFwcmlsIDE5OTEgKHZvbC4gMzQsIG5vLiA0KSwgcHAuIDMwLTQ0LgorLlNIIEFVVEhPUgorSW5kZXBlbmRlbnQgSlBFRyBHcm91cAorLlBQCitUaGlzIGZpbGUgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGluZm9ybWF0aW9uCityZWxldmFudCB0byBsaWJqcGVnLXR1cmJvIGFuZCB0byB3b3Jkc21pdGggY2VydGFpbiBzZWN0aW9ucy4KKy5TSCBCVUdTCitUaGUgdHJhbnNmb3JtIG9wdGlvbnMgY2FuJ3QgdHJhbnNmb3JtIG9kZC1zaXplIGltYWdlcyBwZXJmZWN0bHkuICBVc2UKKy5CIFwtdHJpbQorb3IKKy5CIFwtcGVyZmVjdAoraWYgeW91IGRvbid0IGxpa2UgdGhlIHJlc3VsdHMuCisuUFAKK1RoZSBlbnRpcmUgaW1hZ2UgaXMgcmVhZCBpbnRvIG1lbW9yeSBhbmQgdGhlbiB3cml0dGVuIG91dCBhZ2FpbiwgZXZlbiBpbgorY2FzZXMgd2hlcmUgdGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5LiAgRXhwZWN0IHN3YXBwaW5nIG9uIGxhcmdlIGltYWdlcywKK2VzcGVjaWFsbHkgd2hlbiB1c2luZyB0aGUgbW9yZSBjb21wbGV4IHRyYW5zZm9ybSBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanBlZ3RyYW4uYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWd0cmFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4ZTg0NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pwZWd0cmFuLmMKQEAgLTAsMCArMSw2MDEgQEAKKy8qCisgKiBqcGVndHJhbi5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTcsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvbW1hbmQtbGluZSB1c2VyIGludGVyZmFjZSBmb3IgSlBFRyB0cmFuc2NvZGluZy4KKyAqIEl0IGlzIHZlcnkgc2ltaWxhciB0byBjanBlZy5jLCBhbmQgcGFydGx5IHRvIGRqcGVnLmMsIGJ1dCBwcm92aWRlcworICogbG9zc2xlc3MgdHJhbnNjb2RpbmcgYmV0d2VlbiBkaWZmZXJlbnQgSlBFRyBmaWxlIGZvcm1hdHMuICBJdCBhbHNvCisgKiBwcm92aWRlcyBzb21lIGxvc3NsZXNzIGFuZCBzb3J0LW9mLWxvc3NsZXNzIHRyYW5zZm9ybWF0aW9ucyBvZiBKUEVHIGRhdGEuCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgInRyYW5zdXBwLmgiICAgICAgICAgICAvKiBTdXBwb3J0IHJvdXRpbmVzIGZvciBqcGVndHJhbiAqLworI2luY2x1ZGUgImp2ZXJzaW9uLmgiICAgICAgICAgICAvKiBmb3IgdmVyc2lvbiBtZXNzYWdlICovCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorCisjaWZkZWYgVVNFX0NDT01NQU5EICAgICAgICAgICAgIC8qIGNvbW1hbmQtbGluZSByZWFkZXIgZm9yIE1hY2ludG9zaCAqLworI2lmZGVmIF9fTVdFUktTX18KKyNpbmNsdWRlIDxTSU9VWC5oPiAgICAgICAgICAgICAgLyogTWV0cm93ZXJrcyBuZWVkcyB0aGlzICovCisjaW5jbHVkZSA8Y29uc29sZS5oPiAgICAgICAgICAgIC8qIC4uLiBhbmQgdGhpcyAqLworI2VuZGlmCisjaWZkZWYgVEhJTktfQworI2luY2x1ZGUgPGNvbnNvbGUuaD4gICAgICAgICAgICAvKiBUaGluayBkZWNsYXJlcyBpdCBoZXJlICovCisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBBcmd1bWVudC1wYXJzaW5nIGNvZGUuCisgKiBUaGUgc3dpdGNoIHBhcnNlciBpcyBkZXNpZ25lZCB0byBiZSB1c2VmdWwgd2l0aCBET1Mtc3R5bGUgY29tbWFuZCBsaW5lCisgKiBzeW50YXgsIGllLCBpbnRlcm1peGVkIHN3aXRjaGVzIGFuZCBmaWxlIG5hbWVzLCB3aGVyZSBvbmx5IHRoZSBzd2l0Y2hlcworICogdG8gdGhlIGxlZnQgb2YgYSBnaXZlbiBmaWxlIG5hbWUgYWZmZWN0IHByb2Nlc3Npbmcgb2YgdGhhdCBmaWxlLgorICogVGhlIG1haW4gcHJvZ3JhbSBpbiB0aGlzIGZpbGUgZG9lc24ndCBhY3R1YWxseSB1c2UgdGhpcyBjYXBhYmlsaXR5Li4uCisgKi8KKworCitzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7ICAgIC8qIHByb2dyYW0gbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KK3N0YXRpYyBjaGFyICppY2NfZmlsZW5hbWU7ICAgICAgLyogZm9yIC1pY2Mgc3dpdGNoICovCitzdGF0aWMgY2hhciAqb3V0ZmlsZW5hbWU7ICAgICAgIC8qIGZvciAtb3V0ZmlsZSBzd2l0Y2ggKi8KK3N0YXRpYyBKQ09QWV9PUFRJT04gY29weW9wdGlvbjsgLyogLWNvcHkgc3dpdGNoICovCitzdGF0aWMganBlZ190cmFuc2Zvcm1faW5mbyB0cmFuc2Zvcm1vcHRpb247IC8qIGltYWdlIHRyYW5zZm9ybWF0aW9uIG9wdGlvbnMgKi8KKworCitMT0NBTCh2b2lkKQordXNhZ2Uodm9pZCkKKy8qIGNvbXBsYWluIGFib3V0IGJhZCBjb21tYW5kIGxpbmUgKi8KK3sKKyAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgW3N3aXRjaGVzXSAiLCBwcm9nbmFtZSk7CisjaWZkZWYgVFdPX0ZJTEVfQ09NTUFORExJTkUKKyAgZnByaW50ZihzdGRlcnIsICJpbnB1dGZpbGUgb3V0cHV0ZmlsZVxuIik7CisjZWxzZQorICBmcHJpbnRmKHN0ZGVyciwgIltpbnB1dGZpbGVdXG4iKTsKKyNlbmRpZgorCisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgKG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZCk6XG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1jb3B5IG5vbmUgICAgIENvcHkgbm8gZXh0cmEgbWFya2VycyBmcm9tIHNvdXJjZSBmaWxlXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1jb3B5IGNvbW1lbnRzIENvcHkgb25seSBjb21tZW50IG1hcmtlcnMgKGRlZmF1bHQpXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1jb3B5IGFsbCAgICAgIENvcHkgYWxsIGV4dHJhIG1hcmtlcnNcbiIpOworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW9wdGltaXplICAgICAgT3B0aW1pemUgSHVmZm1hbiB0YWJsZSAoc21hbGxlciBmaWxlLCBidXQgc2xvdyBjb21wcmVzc2lvbilcbiIpOworI2VuZGlmCisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC1wcm9ncmVzc2l2ZSAgIENyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVcbiIpOworI2VuZGlmCisgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgZm9yIG1vZGlmeWluZyB0aGUgaW1hZ2U6XG4iKTsKKyNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWNyb3AgV3hIK1grWSAgQ3JvcCB0byBhIHJlY3Rhbmd1bGFyIHN1YmFyZWFcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWdyYXlzY2FsZSAgICAgUmVkdWNlIHRvIGdyYXlzY2FsZSAob21pdCBjb2xvciBkYXRhKVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtZmxpcCBbaG9yaXpvbnRhbHx2ZXJ0aWNhbF0gIE1pcnJvciBpbWFnZSAobGVmdC1yaWdodCBvciB0b3AtYm90dG9tKVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtcGVyZmVjdCAgICAgICBGYWlsIGlmIHRoZXJlIGlzIG5vbi10cmFuc2Zvcm1hYmxlIGVkZ2UgYmxvY2tzXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1yb3RhdGUgWzkwfDE4MHwyNzBdICAgICAgICAgUm90YXRlIGltYWdlIChkZWdyZWVzIGNsb2Nrd2lzZSlcbiIpOworI2VuZGlmCisjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKKyAgZnByaW50ZihzdGRlcnIsICIgIC10cmFuc3Bvc2UgICAgIFRyYW5zcG9zZSBpbWFnZVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtdHJhbnN2ZXJzZSAgICBUcmFuc3ZlcnNlIHRyYW5zcG9zZSBpbWFnZVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtdHJpbSAgICAgICAgICBEcm9wIG5vbi10cmFuc2Zvcm1hYmxlIGVkZ2UgYmxvY2tzXG4iKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIlN3aXRjaGVzIGZvciBhZHZhbmNlZCB1c2VyczpcbiIpOworI2lmZGVmIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWFyaXRobWV0aWMgICAgVXNlIGFyaXRobWV0aWMgY29kaW5nXG4iKTsKKyNlbmRpZgorICBmcHJpbnRmKHN0ZGVyciwgIiAgLWljYyBGSUxFICAgICAgRW1iZWQgSUNDIHByb2ZpbGUgY29udGFpbmVkIGluIEZJTEVcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXJlc3RhcnQgTiAgICAgU2V0IHJlc3RhcnQgaW50ZXJ2YWwgaW4gcm93cywgb3IgaW4gYmxvY2tzIHdpdGggQlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtbWF4bWVtb3J5IE4gICBNYXhpbXVtIG1lbW9yeSB0byB1c2UgKGluIGtieXRlcylcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLW91dGZpbGUgbmFtZSAgU3BlY2lmeSBuYW1lIGZvciBvdXRwdXQgZmlsZVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtdmVyYm9zZSAgb3IgIC1kZWJ1ZyAgIEVtaXQgZGVidWcgb3V0cHV0XG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC12ZXJzaW9uICAgICAgIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIlN3aXRjaGVzIGZvciB3aXphcmRzOlxuIik7CisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgIGZwcmludGYoc3RkZXJyLCAiICAtc2NhbnMgRklMRSAgICBDcmVhdGUgbXVsdGktc2NhbiBKUEVHIHBlciBzY3JpcHQgRklMRVxuIik7CisjZW5kaWYKKyAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisKK0xPQ0FMKHZvaWQpCitzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9DT0RFIHRyYW5zZm9ybSkKKy8qIFNpbGx5IGxpdHRsZSByb3V0aW5lIHRvIGRldGVjdCBtdWx0aXBsZSB0cmFuc2Zvcm0gb3B0aW9ucywKKyAqIHdoaWNoIHdlIGNhbid0IGhhbmRsZS4KKyAqLworeworI2lmIFRSQU5TRk9STVNfU1VQUE9SVEVECisgIGlmICh0cmFuc2Zvcm1vcHRpb24udHJhbnNmb3JtID09IEpYRk9STV9OT05FIHx8CisgICAgICB0cmFuc2Zvcm1vcHRpb24udHJhbnNmb3JtID09IHRyYW5zZm9ybSkgeworICAgIHRyYW5zZm9ybW9wdGlvbi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgIH0gZWxzZSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuIG9ubHkgZG8gb25lIGltYWdlIHRyYW5zZm9ybWF0aW9uIGF0IGEgdGltZVxuIiwKKyAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICB1c2FnZSgpOworICB9CisjZWxzZQorICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgaW1hZ2UgdHJhbnNmb3JtYXRpb24gd2FzIG5vdCBjb21waWxlZFxuIiwKKyAgICAgICAgICBwcm9nbmFtZSk7CisgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorfQorCisKK0xPQ0FMKGludCkKK3BhcnNlX3N3aXRjaGVzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisgICAgICAgICAgICAgICBpbnQgbGFzdF9maWxlX2FyZ19zZWVuLCBib29sZWFuIGZvcl9yZWFsKQorLyogUGFyc2Ugb3B0aW9uYWwgc3dpdGNoZXMuCisgKiBSZXR1cm5zIGFyZ3ZbXSBpbmRleCBvZiBmaXJzdCBmaWxlLW5hbWUgYXJndW1lbnQgKD09IGFyZ2MgaWYgbm9uZSkuCisgKiBBbnkgZmlsZSBuYW1lcyB3aXRoIGluZGV4ZXMgPD0gbGFzdF9maWxlX2FyZ19zZWVuIGFyZSBpZ25vcmVkOworICogdGhleSBoYXZlIHByZXN1bWFibHkgYmVlbiBwcm9jZXNzZWQgaW4gYSBwcmV2aW91cyBpdGVyYXRpb24uCisgKiAoUGFzcyAwIGZvciBsYXN0X2ZpbGVfYXJnX3NlZW4gb24gdGhlIGZpcnN0IG9yIG9ubHkgaXRlcmF0aW9uLikKKyAqIGZvcl9yZWFsIGlzIEZBTFNFIG9uIHRoZSBmaXJzdCAoZHVtbXkpIHBhc3M7IHdlIG1heSBza2lwIGFueSBleHBlbnNpdmUKKyAqIHByb2Nlc3NpbmcuCisgKi8KK3sKKyAgaW50IGFyZ247CisgIGNoYXIgKmFyZzsKKyAgYm9vbGVhbiBzaW1wbGVfcHJvZ3Jlc3NpdmU7CisgIGNoYXIgKnNjYW5zYXJnID0gTlVMTDsgICAgICAgIC8qIHNhdmVzIC1zY2FucyBwYXJtIGlmIGFueSAqLworCisgIC8qIFNldCB1cCBkZWZhdWx0IEpQRUcgcGFyYW1ldGVycy4gKi8KKyAgc2ltcGxlX3Byb2dyZXNzaXZlID0gRkFMU0U7CisgIGljY19maWxlbmFtZSA9IE5VTEw7CisgIG91dGZpbGVuYW1lID0gTlVMTDsKKyAgY29weW9wdGlvbiA9IEpDT1BZT1BUX0RFRkFVTFQ7CisgIHRyYW5zZm9ybW9wdGlvbi50cmFuc2Zvcm0gPSBKWEZPUk1fTk9ORTsKKyAgdHJhbnNmb3Jtb3B0aW9uLnBlcmZlY3QgPSBGQUxTRTsKKyAgdHJhbnNmb3Jtb3B0aW9uLnRyaW0gPSBGQUxTRTsKKyAgdHJhbnNmb3Jtb3B0aW9uLmZvcmNlX2dyYXlzY2FsZSA9IEZBTFNFOworICB0cmFuc2Zvcm1vcHRpb24uY3JvcCA9IEZBTFNFOworICB0cmFuc2Zvcm1vcHRpb24uc2xvd19oZmxpcCA9IEZBTFNFOworICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA9IDA7CisKKyAgLyogU2NhbiBjb21tYW5kIGxpbmUgb3B0aW9ucywgYWRqdXN0IHBhcmFtZXRlcnMgKi8KKworICBmb3IgKGFyZ24gPSAxOyBhcmduIDwgYXJnYzsgYXJnbisrKSB7CisgICAgYXJnID0gYXJndlthcmduXTsKKyAgICBpZiAoKmFyZyAhPSAnLScpIHsKKyAgICAgIC8qIE5vdCBhIHN3aXRjaCwgbXVzdCBiZSBhIGZpbGUgbmFtZSBhcmd1bWVudCAqLworICAgICAgaWYgKGFyZ24gPD0gbGFzdF9maWxlX2FyZ19zZWVuKSB7CisgICAgICAgIG91dGZpbGVuYW1lID0gTlVMTDsgICAgIC8qIC1vdXRmaWxlIGFwcGxpZXMgdG8ganVzdCBvbmUgaW5wdXQgZmlsZSAqLworICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAvKiBpZ25vcmUgdGhpcyBuYW1lIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovCisgICAgICB9CisgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIGVsc2UgZG9uZSBwYXJzaW5nIHN3aXRjaGVzICovCisgICAgfQorICAgIGFyZysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3Qgc3dpdGNoIG1hcmtlciBjaGFyYWN0ZXIgKi8KKworICAgIGlmIChrZXltYXRjaChhcmcsICJhcml0aG1ldGljIiwgMSkpIHsKKyAgICAgIC8qIFVzZSBhcml0aG1ldGljIGNvZGluZy4gKi8KKyNpZmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKyAgICAgIGNpbmZvLT5hcml0aF9jb2RlID0gVFJVRTsKKyNlbHNlCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgYXJpdGhtZXRpYyBjb2Rpbmcgbm90IHN1cHBvcnRlZFxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworI2VuZGlmCisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImNvcHkiLCAyKSkgeworICAgICAgLyogU2VsZWN0IHdoaWNoIGV4dHJhIG1hcmtlcnMgdG8gY29weS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgIm5vbmUiLCAxKSkgeworICAgICAgICBjb3B5b3B0aW9uID0gSkNPUFlPUFRfTk9ORTsKKyAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImNvbW1lbnRzIiwgMSkpIHsKKyAgICAgICAgY29weW9wdGlvbiA9IEpDT1BZT1BUX0NPTU1FTlRTOworICAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiYWxsIiwgMSkpIHsKKyAgICAgICAgY29weW9wdGlvbiA9IEpDT1BZT1BUX0FMTDsKKyAgICAgIH0gZWxzZQorICAgICAgICB1c2FnZSgpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjcm9wIiwgMikpIHsKKyAgICAgIC8qIFBlcmZvcm0gbG9zc2xlc3MgY3JvcHBpbmcuICovCisjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoIWp0cmFuc2Zvcm1fcGFyc2VfY3JvcF9zcGVjKCZ0cmFuc2Zvcm1vcHRpb24sIGFyZ3ZbYXJnbl0pKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGJvZ3VzIC1jcm9wIGFyZ3VtZW50ICclcydcbiIsCisgICAgICAgICAgICAgICAgcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisjZWxzZQorICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fTk9ORSk7ICAgIC8qIGZvcmNlIGFuIGVycm9yICovCisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZGVidWciLCAxKSB8fCBrZXltYXRjaChhcmcsICJ2ZXJib3NlIiwgMSkpIHsKKyAgICAgIC8qIEVuYWJsZSBkZWJ1ZyBwcmludG91dHMuICovCisgICAgICAvKiBPbiBmaXJzdCAtZCwgcHJpbnQgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiAqLworICAgICAgc3RhdGljIGJvb2xlYW4gcHJpbnRlZF92ZXJzaW9uID0gRkFMU0U7CisKKyAgICAgIGlmICghcHJpbnRlZF92ZXJzaW9uKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcyAoYnVpbGQgJXMpXG4iLAorICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG5cbiIsIEpDT1BZUklHSFQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLCB2ZXJzaW9uICVzXG5cbiIsCisgICAgICAgICAgICAgICAgSlZFUlNJT04pOworICAgICAgICBwcmludGVkX3ZlcnNpb24gPSBUUlVFOworICAgICAgfQorICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAidmVyc2lvbiIsIDQpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXMgKGJ1aWxkICVzKVxuIiwKKyAgICAgICAgICAgICAgUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7CisgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImZsaXAiLCAxKSkgeworICAgICAgLyogTWlycm9yIGxlZnQtcmlnaHQgb3IgdG9wLWJvdHRvbS4gKi8KKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImhvcml6b250YWwiLCAxKSkKKyAgICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fRkxJUF9IKTsKKyAgICAgIGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJ2ZXJ0aWNhbCIsIDEpKQorICAgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9GTElQX1YpOworICAgICAgZWxzZQorICAgICAgICB1c2FnZSgpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJncmF5c2NhbGUiLCAxKSB8fAorICAgICAgICAgICAgICAga2V5bWF0Y2goYXJnLCAiZ3JleXNjYWxlIiwgMSkpIHsKKyAgICAgIC8qIEZvcmNlIHRvIGdyYXlzY2FsZS4gKi8KKyNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAorICAgICAgdHJhbnNmb3Jtb3B0aW9uLmZvcmNlX2dyYXlzY2FsZSA9IFRSVUU7CisjZWxzZQorICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fTk9ORSk7ICAgIC8qIGZvcmNlIGFuIGVycm9yICovCisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiaWNjIiwgMSkpIHsKKyAgICAgIC8qIFNldCBJQ0MgZmlsZW5hbWUuICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgaWNjX2ZpbGVuYW1lID0gYXJndlthcmduXTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibWF4bWVtb3J5IiwgMykpIHsKKyAgICAgIC8qIE1heGltdW0gbWVtb3J5IGluIEtiIChvciBNYiB3aXRoICdtJykuICovCisgICAgICBsb25nIGx2YWw7CisgICAgICBjaGFyIGNoID0gJ3gnOworCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoY2ggPT0gJ20nIHx8IGNoID09ICdNJykKKyAgICAgICAgbHZhbCAqPSAxMDAwTDsKKyAgICAgIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gbHZhbCAqIDEwMDBMOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvcHRpbWl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgIm9wdGltaXNlIiwgMSkpIHsKKyAgICAgIC8qIEVuYWJsZSBlbnRyb3B5IHBhcm0gb3B0aW1pemF0aW9uLiAqLworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorICAgICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIGVudHJvcHkgb3B0aW1pemF0aW9uIHdhcyBub3QgY29tcGlsZWRcbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvdXRmaWxlIiwgNCkpIHsKKyAgICAgIC8qIFNldCBvdXRwdXQgZmlsZSBuYW1lLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIG91dGZpbGVuYW1lID0gYXJndlthcmduXTsgLyogc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicGVyZmVjdCIsIDIpKSB7CisgICAgICAvKiBGYWlsIGlmIHRoZXJlIGlzIGFueSBwYXJ0aWFsIGVkZ2UgTUNVcyB0aGF0IHRoZSB0cmFuc2Zvcm0gY2FuJ3QKKyAgICAgICAqIGhhbmRsZS4gKi8KKyAgICAgIHRyYW5zZm9ybW9wdGlvbi5wZXJmZWN0ID0gVFJVRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicHJvZ3Jlc3NpdmUiLCAyKSkgeworICAgICAgLyogU2VsZWN0IHNpbXBsZSBwcm9ncmVzc2l2ZSBtb2RlLiAqLworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBzaW1wbGVfcHJvZ3Jlc3NpdmUgPSBUUlVFOworICAgICAgLyogV2UgbXVzdCBwb3N0cG9uZSBleGVjdXRpb24gdW50aWwgbnVtX2NvbXBvbmVudHMgaXMga25vd24uICovCisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIHByb2dyZXNzaXZlIG91dHB1dCB3YXMgbm90IGNvbXBpbGVkXG4iLAorICAgICAgICAgICAgICBwcm9nbmFtZSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicmVzdGFydCIsIDEpKSB7CisgICAgICAvKiBSZXN0YXJ0IGludGVydmFsIGluIE1DVSByb3dzIChvciBpbiBNQ1VzIHdpdGggJ2InKS4gKi8KKyAgICAgIGxvbmcgbHZhbDsKKyAgICAgIGNoYXIgY2ggPSAneCc7CisKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlbGQlYyIsICZsdmFsLCAmY2gpIDwgMSkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChsdmFsIDwgMCB8fCBsdmFsID4gNjU1MzVMKQorICAgICAgICB1c2FnZSgpOworICAgICAgaWYgKGNoID09ICdiJyB8fCBjaCA9PSAnQicpIHsKKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSAodW5zaWduZWQgaW50KWx2YWw7CisgICAgICAgIGNpbmZvLT5yZXN0YXJ0X2luX3Jvd3MgPSAwOyAvKiBlbHNlIHByaW9yICctcmVzdGFydCBuJyBvdmVycmlkZXMgbWUgKi8KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNpbmZvLT5yZXN0YXJ0X2luX3Jvd3MgPSAoaW50KWx2YWw7CisgICAgICAgIC8qIHJlc3RhcnRfaW50ZXJ2YWwgd2lsbCBiZSBjb21wdXRlZCBkdXJpbmcgc3RhcnR1cCAqLworICAgICAgfQorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJyb3RhdGUiLCAyKSkgeworICAgICAgLyogUm90YXRlIDkwLCAxODAsIG9yIDI3MCBkZWdyZWVzIChtZWFzdXJlZCBjbG9ja3dpc2UpLiAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiOTAiLCAyKSkKKyAgICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fUk9UXzkwKTsKKyAgICAgIGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICIxODAiLCAzKSkKKyAgICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fUk9UXzE4MCk7CisgICAgICBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiMjcwIiwgMykpCisgICAgICAgIHNlbGVjdF90cmFuc2Zvcm0oSlhGT1JNX1JPVF8yNzApOworICAgICAgZWxzZQorICAgICAgICB1c2FnZSgpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJzY2FucyIsIDEpKSB7CisgICAgICAvKiBTZXQgc2NhbiBzY3JpcHQuICovCisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgc2NhbnNhcmcgPSBhcmd2W2FyZ25dOworICAgICAgLyogV2UgbXVzdCBwb3N0cG9uZSByZWFkaW5nIHRoZSBmaWxlIGluIGNhc2UgLXByb2dyZXNzaXZlIGFwcGVhcnMuICovCisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIG11bHRpLXNjYW4gb3V0cHV0IHdhcyBub3QgY29tcGlsZWRcbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJ0cmFuc3Bvc2UiLCAxKSkgeworICAgICAgLyogVHJhbnNwb3NlIChhY3Jvc3MgVUwtdG8tTFIgYXhpcykuICovCisgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9UUkFOU1BPU0UpOworCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJ0cmFuc3ZlcnNlIiwgNikpIHsKKyAgICAgIC8qIFRyYW5zdmVyc2UgdHJhbnNwb3NlIChhY3Jvc3MgVVItdG8tTEwgYXhpcykuICovCisgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9UUkFOU1ZFUlNFKTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAidHJpbSIsIDMpKSB7CisgICAgICAvKiBUcmltIG9mZiBhbnkgcGFydGlhbCBlZGdlIE1DVXMgdGhhdCB0aGUgdHJhbnNmb3JtIGNhbid0IGhhbmRsZS4gKi8KKyAgICAgIHRyYW5zZm9ybW9wdGlvbi50cmltID0gVFJVRTsKKworICAgIH0gZWxzZSB7CisgICAgICB1c2FnZSgpOyAgICAgICAgICAgICAgICAgIC8qIGJvZ3VzIHN3aXRjaCAqLworICAgIH0KKyAgfQorCisgIC8qIFBvc3Qtc3dpdGNoLXNjYW5uaW5nIGNsZWFudXAgKi8KKworICBpZiAoZm9yX3JlYWwpIHsKKworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgaWYgKHNpbXBsZV9wcm9ncmVzc2l2ZSkgICAgIC8qIHByb2Nlc3MgLXByb2dyZXNzaXZlOyAtc2NhbnMgY2FuIG92ZXJyaWRlICovCisgICAgICBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbihjaW5mbyk7CisjZW5kaWYKKworI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICAgIGlmIChzY2Fuc2FyZyAhPSBOVUxMKSAgICAgICAvKiBwcm9jZXNzIC1zY2FucyBpZiBpdCB3YXMgcHJlc2VudCAqLworICAgICAgaWYgKCFyZWFkX3NjYW5fc2NyaXB0KGNpbmZvLCBzY2Fuc2FyZykpCisgICAgICAgIHVzYWdlKCk7CisjZW5kaWYKKyAgfQorCisgIHJldHVybiBhcmduOyAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBpbmRleCBvZiBuZXh0IGFyZyAoZmlsZSBuYW1lKSAqLworfQorCisKKy8qCisgKiBUaGUgbWFpbiBwcm9ncmFtLgorICovCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IHNyY2luZm87CisgIHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCBkc3RpbmZvOworICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IganNyY2VyciwgamRzdGVycjsKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgc3RydWN0IGNkanBlZ19wcm9ncmVzc19tZ3IgcHJvZ3Jlc3M7CisjZW5kaWYKKyAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzOworICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXM7CisgIGludCBmaWxlX2luZGV4OworICAvKiBXZSBhc3N1bWUgYWxsLWluLW1lbW9yeSBwcm9jZXNzaW5nIGFuZCBjYW4gdGhlcmVmb3JlIHVzZSBvbmx5IGEKKyAgICogc2luZ2xlIGZpbGUgcG9pbnRlciBmb3Igc2VxdWVudGlhbCBpbnB1dCBhbmQgb3V0cHV0IG9wZXJhdGlvbi4KKyAgICovCisgIEZJTEUgKmZwOworICBGSUxFICppY2NfZmlsZTsKKyAgSk9DVEVUICppY2NfcHJvZmlsZSA9IE5VTEw7CisgIGxvbmcgaWNjX2xlbiA9IDA7CisKKyAgLyogT24gTWFjLCBmZXRjaCBhIGNvbW1hbmQgbGluZS4gKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQKKyAgYXJnYyA9IGNjb21tYW5kKCZhcmd2KTsKKyNlbmRpZgorCisgIHByb2duYW1lID0gYXJndlswXTsKKyAgaWYgKHByb2duYW1lID09IE5VTEwgfHwgcHJvZ25hbWVbMF0gPT0gMCkKKyAgICBwcm9nbmFtZSA9ICJqcGVndHJhbiI7ICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdCB3aXRoIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcuICovCisgIHNyY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmpzcmNlcnIpOworICBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCZzcmNpbmZvKTsKKyAgLyogSW5pdGlhbGl6ZSB0aGUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBkZWZhdWx0IGVycm9yIGhhbmRsaW5nLiAqLworICBkc3RpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZqZHN0ZXJyKTsKKyAganBlZ19jcmVhdGVfY29tcHJlc3MoJmRzdGluZm8pOworCisgIC8qIFNjYW4gY29tbWFuZCBsaW5lIHRvIGZpbmQgZmlsZSBuYW1lcy4KKyAgICogSXQgaXMgY29udmVuaWVudCB0byB1c2UganVzdCBvbmUgc3dpdGNoLXBhcnNpbmcgcm91dGluZSwgYnV0IHRoZSBzd2l0Y2gKKyAgICogdmFsdWVzIHJlYWQgaGVyZSBhcmUgbW9zdGx5IGlnbm9yZWQ7IHdlIHdpbGwgcmVzY2FuIHRoZSBzd2l0Y2hlcyBhZnRlcgorICAgKiBvcGVuaW5nIHRoZSBpbnB1dCBmaWxlLiAgQWxzbyBub3RlIHRoYXQgbW9zdCBvZiB0aGUgc3dpdGNoZXMgYWZmZWN0IHRoZQorICAgKiBkZXN0aW5hdGlvbiBKUEVHIG9iamVjdCwgc28gd2UgcGFyc2UgaW50byB0aGF0IGFuZCB0aGVuIGNvcHkgb3ZlciB3aGF0CisgICAqIG5lZWRzIHRvIGFmZmVjdHMgdGhlIHNvdXJjZSB0b28uCisgICAqLworCisgIGZpbGVfaW5kZXggPSBwYXJzZV9zd2l0Y2hlcygmZHN0aW5mbywgYXJnYywgYXJndiwgMCwgRkFMU0UpOworICBqc3JjZXJyLnRyYWNlX2xldmVsID0gamRzdGVyci50cmFjZV9sZXZlbDsKKyAgc3JjaW5mby5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gZHN0aW5mby5tZW0tPm1heF9tZW1vcnlfdG9fdXNlOworCisjaWZkZWYgVFdPX0ZJTEVfQ09NTUFORExJTkUKKyAgLyogTXVzdCBoYXZlIGVpdGhlciAtb3V0ZmlsZSBzd2l0Y2ggb3IgZXhwbGljaXQgb3V0cHV0IGZpbGUgbmFtZSAqLworICBpZiAob3V0ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MgLSAyKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIHVzYWdlKCk7CisgICAgfQorICAgIG91dGZpbGVuYW1lID0gYXJndltmaWxlX2luZGV4ICsgMV07CisgIH0gZWxzZSB7CisgICAgaWYgKGZpbGVfaW5kZXggIT0gYXJnYyAtIDEpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG11c3QgbmFtZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgZmlsZVxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOworICAgICAgdXNhZ2UoKTsKKyAgICB9CisgIH0KKyNlbHNlCisgIC8qIFVuaXggc3R5bGU6IGV4cGVjdCB6ZXJvIG9yIG9uZSBmaWxlIG5hbWUgKi8KKyAgaWYgKGZpbGVfaW5kZXggPCBhcmdjIC0gMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG9ubHkgb25lIGlucHV0IGZpbGVcbiIsIHByb2duYW1lKTsKKyAgICB1c2FnZSgpOworICB9CisjZW5kaWYgLyogVFdPX0ZJTEVfQ09NTUFORExJTkUgKi8KKworICAvKiBPcGVuIHRoZSBpbnB1dCBmaWxlLiAqLworICBpZiAoZmlsZV9pbmRleCA8IGFyZ2MpIHsKKyAgICBpZiAoKGZwID0gZm9wZW4oYXJndltmaWxlX2luZGV4XSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzIGZvciByZWFkaW5nXG4iLCBwcm9nbmFtZSwKKyAgICAgICAgICAgICAgYXJndltmaWxlX2luZGV4XSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGRlZmF1bHQgaW5wdXQgZmlsZSBpcyBzdGRpbiAqLworICAgIGZwID0gcmVhZF9zdGRpbigpOworICB9CisKKyAgaWYgKGljY19maWxlbmFtZSAhPSBOVUxMKSB7CisgICAgaWYgKChpY2NfZmlsZSA9IGZvcGVuKGljY19maWxlbmFtZSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgaWNjX2ZpbGVuYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgaWYgKGZzZWVrKGljY19maWxlLCAwLCBTRUVLX0VORCkgPCAwIHx8CisgICAgICAgIChpY2NfbGVuID0gZnRlbGwoaWNjX2ZpbGUpKSA8IDEgfHwKKyAgICAgICAgZnNlZWsoaWNjX2ZpbGUsIDAsIFNFRUtfU0VUKSA8IDApIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGRldGVybWluZSBzaXplIG9mICVzXG4iLCBwcm9nbmFtZSwKKyAgICAgICAgICAgICAgaWNjX2ZpbGVuYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgaWYgKChpY2NfcHJvZmlsZSA9IChKT0NURVQgKiltYWxsb2MoaWNjX2xlbikpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgSUNDIHByb2ZpbGVcbiIsIHByb2duYW1lKTsKKyAgICAgIGZjbG9zZShpY2NfZmlsZSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIGlmIChmcmVhZChpY2NfcHJvZmlsZSwgaWNjX2xlbiwgMSwgaWNjX2ZpbGUpIDwgMSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgcmVhZCBJQ0MgcHJvZmlsZSBmcm9tICVzXG4iLCBwcm9nbmFtZSwKKyAgICAgICAgICAgICAgaWNjX2ZpbGVuYW1lKTsKKyAgICAgIGZyZWUoaWNjX3Byb2ZpbGUpOworICAgICAgZmNsb3NlKGljY19maWxlKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgZmNsb3NlKGljY19maWxlKTsKKyAgICBpZiAoY29weW9wdGlvbiA9PSBKQ09QWU9QVF9BTEwpCisgICAgICBjb3B5b3B0aW9uID0gSkNPUFlPUFRfQUxMX0VYQ0VQVF9JQ0M7CisgIH0KKworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICBzdGFydF9wcm9ncmVzc19tb25pdG9yKChqX2NvbW1vbl9wdHIpJmRzdGluZm8sICZwcm9ncmVzcyk7CisjZW5kaWYKKworICAvKiBTcGVjaWZ5IGRhdGEgc291cmNlIGZvciBkZWNvbXByZXNzaW9uICovCisgIGpwZWdfc3RkaW9fc3JjKCZzcmNpbmZvLCBmcCk7CisKKyAgLyogRW5hYmxlIHNhdmluZyBvZiBleHRyYSBtYXJrZXJzIHRoYXQgd2Ugd2FudCB0byBjb3B5ICovCisgIGpjb3B5X21hcmtlcnNfc2V0dXAoJnNyY2luZm8sIGNvcHlvcHRpb24pOworCisgIC8qIFJlYWQgZmlsZSBoZWFkZXIgKi8KKyAgKHZvaWQpanBlZ19yZWFkX2hlYWRlcigmc3JjaW5mbywgVFJVRSk7CisKKyAgLyogQW55IHNwYWNlIG5lZWRlZCBieSBhIHRyYW5zZm9ybSBvcHRpb24gbXVzdCBiZSByZXF1ZXN0ZWQgYmVmb3JlCisgICAqIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgc28gdGhhdCBtZW1vcnkgYWxsb2NhdGlvbiB3aWxsIGJlIGRvbmUgcmlnaHQuCisgICAqLworI2lmIFRSQU5TRk9STVNfU1VQUE9SVEVECisgIC8qIEZhaWwgcmlnaHQgYXdheSBpZiAtcGVyZmVjdCBpcyBnaXZlbiBhbmQgdHJhbnNmb3JtYXRpb24gaXMgbm90IHBlcmZlY3QuCisgICAqLworICBpZiAoIWp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UoJnNyY2luZm8sICZ0cmFuc2Zvcm1vcHRpb24pKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogdHJhbnNmb3JtYXRpb24gaXMgbm90IHBlcmZlY3RcbiIsIHByb2duYW1lKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKyNlbmRpZgorCisgIC8qIFJlYWQgc291cmNlIGZpbGUgYXMgRENUIGNvZWZmaWNpZW50cyAqLworICBzcmNfY29lZl9hcnJheXMgPSBqcGVnX3JlYWRfY29lZmZpY2llbnRzKCZzcmNpbmZvKTsKKworICAvKiBJbml0aWFsaXplIGRlc3RpbmF0aW9uIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBzb3VyY2UgdmFsdWVzICovCisgIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzKCZzcmNpbmZvLCAmZHN0aW5mbyk7CisKKyAgLyogQWRqdXN0IGRlc3RpbmF0aW9uIHBhcmFtZXRlcnMgaWYgcmVxdWlyZWQgYnkgdHJhbnNmb3JtIG9wdGlvbnM7CisgICAqIGFsc28gZmluZCBvdXQgd2hpY2ggc2V0IG9mIGNvZWZmaWNpZW50IGFycmF5cyB3aWxsIGhvbGQgdGhlIG91dHB1dC4KKyAgICovCisjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKKyAgZHN0X2NvZWZfYXJyYXlzID0ganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycygmc3JjaW5mbywgJmRzdGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2Zvcm1vcHRpb24pOworI2Vsc2UKKyAgZHN0X2NvZWZfYXJyYXlzID0gc3JjX2NvZWZfYXJyYXlzOworI2VuZGlmCisKKyAgLyogQ2xvc2UgaW5wdXQgZmlsZSwgaWYgd2Ugb3BlbmVkIGl0LgorICAgKiBOb3RlOiB3ZSBhc3N1bWUgdGhhdCBqcGVnX3JlYWRfY29lZmZpY2llbnRzIGNvbnN1bWVkIGFsbCBpbnB1dAorICAgKiB1bnRpbCBKUEVHX1JFQUNIRURfRU9JLCBhbmQgdGhhdCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIHdpbGwKKyAgICogb25seSBjb25zdW1lIG1vcmUgd2hpbGUgKCFjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKS4KKyAgICogV2UgY2Fubm90IGNhbGwganBlZ19maW5pc2hfZGVjb21wcmVzcyBoZXJlIHNpbmNlIHdlIHN0aWxsIG5lZWQgdGhlCisgICAqIHZpcnR1YWwgYXJyYXlzIGFsbG9jYXRlZCBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0IGZvciBwcm9jZXNzaW5nLgorICAgKi8KKyAgaWYgKGZwICE9IHN0ZGluKQorICAgIGZjbG9zZShmcCk7CisKKyAgLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUuICovCisgIGlmIChvdXRmaWxlbmFtZSAhPSBOVUxMKSB7CisgICAgaWYgKChmcCA9IGZvcGVuKG91dGZpbGVuYW1lLCBXUklURV9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzIGZvciB3cml0aW5nXG4iLCBwcm9nbmFtZSwKKyAgICAgICAgICAgICAgb3V0ZmlsZW5hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBkZWZhdWx0IG91dHB1dCBmaWxlIGlzIHN0ZG91dCAqLworICAgIGZwID0gd3JpdGVfc3Rkb3V0KCk7CisgIH0KKworICAvKiBBZGp1c3QgZGVmYXVsdCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGJ5IHJlLXBhcnNpbmcgdGhlIG9wdGlvbnMgKi8KKyAgZmlsZV9pbmRleCA9IHBhcnNlX3N3aXRjaGVzKCZkc3RpbmZvLCBhcmdjLCBhcmd2LCAwLCBUUlVFKTsKKworICAvKiBTcGVjaWZ5IGRhdGEgZGVzdGluYXRpb24gZm9yIGNvbXByZXNzaW9uICovCisgIGpwZWdfc3RkaW9fZGVzdCgmZHN0aW5mbywgZnApOworCisgIC8qIFN0YXJ0IGNvbXByZXNzb3IgKG5vdGUgbm8gaW1hZ2UgZGF0YSBpcyBhY3R1YWxseSB3cml0dGVuIGhlcmUpICovCisgIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKCZkc3RpbmZvLCBkc3RfY29lZl9hcnJheXMpOworCisgIC8qIENvcHkgdG8gdGhlIG91dHB1dCBmaWxlIGFueSBleHRyYSBtYXJrZXJzIHRoYXQgd2Ugd2FudCB0byBwcmVzZXJ2ZSAqLworICBqY29weV9tYXJrZXJzX2V4ZWN1dGUoJnNyY2luZm8sICZkc3RpbmZvLCBjb3B5b3B0aW9uKTsKKworICBpZiAoaWNjX3Byb2ZpbGUgIT0gTlVMTCkKKyAgICBqcGVnX3dyaXRlX2ljY19wcm9maWxlKCZkc3RpbmZvLCBpY2NfcHJvZmlsZSwgKHVuc2lnbmVkIGludClpY2NfbGVuKTsKKworICAvKiBFeGVjdXRlIGltYWdlIHRyYW5zZm9ybWF0aW9uLCBpZiBhbnkgKi8KKyNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAorICBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtYXRpb24oJnNyY2luZm8sICZkc3RpbmZvLCBzcmNfY29lZl9hcnJheXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHJhbnNmb3Jtb3B0aW9uKTsKKyNlbmRpZgorCisgIC8qIEZpbmlzaCBjb21wcmVzc2lvbiBhbmQgcmVsZWFzZSBtZW1vcnkgKi8KKyAganBlZ19maW5pc2hfY29tcHJlc3MoJmRzdGluZm8pOworICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmRzdGluZm8pOworICAodm9pZClqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCZzcmNpbmZvKTsKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJnNyY2luZm8pOworCisgIC8qIENsb3NlIG91dHB1dCBmaWxlLCBpZiB3ZSBvcGVuZWQgaXQgKi8KKyAgaWYgKGZwICE9IHN0ZG91dCkKKyAgICBmY2xvc2UoZnApOworCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGVuZF9wcm9ncmVzc19tb25pdG9yKChqX2NvbW1vbl9wdHIpJmRzdGluZm8pOworI2VuZGlmCisKKyAgaWYgKGljY19wcm9maWxlICE9IE5VTEwpCisgICAgZnJlZShpY2NfcHJvZmlsZSk7CisKKyAgLyogQWxsIGRvbmUuICovCisgIGV4aXQoanNyY2Vyci5udW1fd2FybmluZ3MgKyBqZHN0ZXJyLm51bV93YXJuaW5ncyA/CisgICAgICAgRVhJVF9XQVJOSU5HIDogRVhJVF9TVUNDRVNTKTsKKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgLyogc3VwcHJlc3Mgbm8tcmV0dXJuLXZhbHVlIHdhcm5pbmdzICovCit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qcXVhbnQxLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qcXVhbnQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzNmFiZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pxdWFudDEuYwpAQCAtMCwwICsxLDg1OSBAQAorLyoKKyAqIGpxdWFudDEuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE1LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgMS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiAoY29sb3IgbWFwcGluZykgcm91dGluZXMuCisgKiBUaGVzZSByb3V0aW5lcyBwcm92aWRlIG1hcHBpbmcgdG8gYSBmaXhlZCBjb2xvciBtYXAgdXNpbmcgZXF1YWxseSBzcGFjZWQKKyAqIGNvbG9yIHZhbHVlcy4gIE9wdGlvbmFsIEZsb3lkLVN0ZWluYmVyZyBvciBvcmRlcmVkIGRpdGhlcmluZyBpcyBhdmFpbGFibGUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisjaWZkZWYgUVVBTlRfMVBBU1NfU1VQUE9SVEVECisKKworLyoKKyAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgMS1wYXNzIHF1YW50aXphdGlvbiBpcyB0byBwcm92aWRlIGEgZmFzdCwgaWYgbm90IHZlcnkKKyAqIGhpZ2ggcXVhbGl0eSwgY29sb3JtYXBwZWQgb3V0cHV0IGNhcGFiaWxpdHkuICBBIDItcGFzcyBxdWFudGl6ZXIgdXN1YWxseQorICogZ2l2ZXMgYmV0dGVyIHZpc3VhbCBxdWFsaXR5OyBob3dldmVyLCBmb3IgcXVhbnRpemVkIGdyYXlzY2FsZSBvdXRwdXQgdGhpcworICogcXVhbnRpemVyIGlzIHBlcmZlY3RseSBhZGVxdWF0ZS4gIERpdGhlcmluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgd2l0aCB0aGlzCisgKiBxdWFudGl6ZXIsIHRob3VnaCB5b3UgY2FuIHR1cm4gaXQgb2ZmIGlmIHlvdSByZWFsbHkgd2FudCB0by4KKyAqCisgKiBJbiAxLXBhc3MgcXVhbnRpemF0aW9uIHRoZSBjb2xvcm1hcCBtdXN0IGJlIGNob3NlbiBpbiBhZHZhbmNlIG9mIHNlZWluZyB0aGUKKyAqIGltYWdlLiAgV2UgdXNlIGEgbWFwIGNvbnNpc3Rpbmcgb2YgYWxsIGNvbWJpbmF0aW9ucyBvZiBOY29sb3JzW2ldIGNvbG9yCisgKiB2YWx1ZXMgZm9yIHRoZSBpJ3RoIGNvbXBvbmVudC4gIFRoZSBOY29sb3JzW10gdmFsdWVzIGFyZSBjaG9zZW4gc28gdGhhdAorICogdGhlaXIgcHJvZHVjdCwgdGhlIHRvdGFsIG51bWJlciBvZiBjb2xvcnMsIGlzIG5vIG1vcmUgdGhhbiB0aGF0IHJlcXVlc3RlZC4KKyAqIChJbiBtb3N0IGNhc2VzLCB0aGUgcHJvZHVjdCB3aWxsIGJlIHNvbWV3aGF0IGxlc3MuKQorICoKKyAqIFNpbmNlIHRoZSBjb2xvcm1hcCBpcyBvcnRob2dvbmFsLCB0aGUgcmVwcmVzZW50YXRpdmUgdmFsdWUgZm9yIGVhY2ggY29sb3IKKyAqIGNvbXBvbmVudCBjYW4gYmUgZGV0ZXJtaW5lZCB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBvdGhlciBjb21wb25lbnRzOworICogdGhlbiB0aGVzZSBpbmRleGVzIGNhbiBiZSBjb21iaW5lZCBpbnRvIGEgY29sb3JtYXAgaW5kZXggYnkgYSBzdGFuZGFyZAorICogTi1kaW1lbnNpb25hbC1hcnJheS1zdWJzY3JpcHQgY2FsY3VsYXRpb24uICBNb3N0IG9mIHRoZSBhcml0aG1ldGljIGludm9sdmVkCisgKiBjYW4gYmUgcHJlY2FsY3VsYXRlZCBhbmQgc3RvcmVkIGluIHRoZSBsb29rdXAgdGFibGUgY29sb3JpbmRleFtdLgorICogY29sb3JpbmRleFtpXVtqXSBtYXBzIHBpeGVsIHZhbHVlIGogaW4gY29tcG9uZW50IGkgdG8gdGhlIG5lYXJlc3QKKyAqIHJlcHJlc2VudGF0aXZlIHZhbHVlIChncmlkIHBsYW5lKSBmb3IgdGhhdCBjb21wb25lbnQ7IHRoaXMgaW5kZXggaXMKKyAqIG11bHRpcGxpZWQgYnkgdGhlIGFycmF5IHN0cmlkZSBmb3IgY29tcG9uZW50IGksIHNvIHRoYXQgdGhlCisgKiBpbmRleCBvZiB0aGUgY29sb3JtYXAgZW50cnkgY2xvc2VzdCB0byBhIGdpdmVuIHBpeGVsIHZhbHVlIGlzIGp1c3QKKyAqICAgIHN1bSggY29sb3JpbmRleFtjb21wb25lbnQtbnVtYmVyXVtwaXhlbC1jb21wb25lbnQtdmFsdWVdICkKKyAqIEFzaWRlIGZyb20gYmVpbmcgZmFzdCwgdGhpcyBzY2hlbWUgYWxsb3dzIGZvciB2YXJpYWJsZSBzcGFjaW5nIGJldHdlZW4KKyAqIHJlcHJlc2VudGF0aXZlIHZhbHVlcyB3aXRoIG5vIGFkZGl0aW9uYWwgbG9va3VwIGNvc3QuCisgKgorICogSWYgZ2FtbWEgY29ycmVjdGlvbiBoYXMgYmVlbiBhcHBsaWVkIGluIGNvbG9yIGNvbnZlcnNpb24sIGl0IG1pZ2h0IGJlIHdpc2UKKyAqIHRvIGFkanVzdCB0aGUgY29sb3IgZ3JpZCBzcGFjaW5nIHNvIHRoYXQgdGhlIHJlcHJlc2VudGF0aXZlIGNvbG9ycyBhcmUKKyAqIGVxdWlkaXN0YW50IGluIGxpbmVhciBzcGFjZS4gIEF0IHRoaXMgd3JpdGluZywgZ2FtbWEgY29ycmVjdGlvbiBpcyBub3QKKyAqIGltcGxlbWVudGVkIGJ5IGpkY29sb3IsIHNvIG5vdGhpbmcgaXMgZG9uZSBoZXJlLgorICovCisKKworLyogRGVjbGFyYXRpb25zIGZvciBvcmRlcmVkIGRpdGhlcmluZy4KKyAqCisgKiBXZSB1c2UgYSBzdGFuZGFyZCAxNngxNiBvcmRlcmVkIGRpdGhlciBhcnJheS4gIFRoZSBiYXNpYyBjb25jZXB0IG9mIG9yZGVyZWQKKyAqIGRpdGhlcmluZyBpcyBkZXNjcmliZWQgaW4gbWFueSByZWZlcmVuY2VzLCBmb3IgaW5zdGFuY2UgRGFsZSBTY2h1bWFjaGVyJ3MKKyAqIGNoYXB0ZXIgSUkuMiBvZiBHcmFwaGljcyBHZW1zIElJIChKYW1lcyBBcnZvLCBlZC4gQWNhZGVtaWMgUHJlc3MsIDE5OTEpLgorICogSW4gcGxhY2Ugb2YgU2NodW1hY2hlcidzIGNvbXBhcmlzb25zIGFnYWluc3QgYSAidGhyZXNob2xkIiB2YWx1ZSwgd2UgYWRkIGEKKyAqICJkaXRoZXIiIHZhbHVlIHRvIHRoZSBpbnB1dCBwaXhlbCBhbmQgdGhlbiByb3VuZCB0aGUgcmVzdWx0IHRvIHRoZSBuZWFyZXN0CisgKiBvdXRwdXQgdmFsdWUuICBUaGUgZGl0aGVyIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gKDAuNSAtIHRocmVzaG9sZCkgdGltZXMKKyAqIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIG91dHB1dCB2YWx1ZXMuICBGb3Igb3JkZXJlZCBkaXRoZXJpbmcsIHdlIGFzc3VtZSB0aGF0CisgKiB0aGUgb3V0cHV0IGNvbG9ycyBhcmUgZXF1YWxseSBzcGFjZWQ7IGlmIG5vdCwgcmVzdWx0cyB3aWxsIHByb2JhYmx5IGJlCisgKiB3b3JzZSwgc2luY2UgdGhlIGRpdGhlciBtYXkgYmUgdG9vIG11Y2ggb3IgdG9vIGxpdHRsZSBhdCBhIGdpdmVuIHBvaW50LgorICoKKyAqIFRoZSBub3JtYWwgY2FsY3VsYXRpb24gd291bGQgYmUgdG8gZm9ybSBwaXhlbCB2YWx1ZSArIGRpdGhlciwgcmFuZ2UtbGltaXQKKyAqIHRoaXMgdG8gMC4uTUFYSlNBTVBMRSwgYW5kIHRoZW4gaW5kZXggaW50byB0aGUgY29sb3JpbmRleCB0YWJsZSBhcyB1c3VhbC4KKyAqIFdlIGNhbiBza2lwIHRoZSBzZXBhcmF0ZSByYW5nZS1saW1pdGluZyBzdGVwIGJ5IGV4dGVuZGluZyB0aGUgY29sb3JpbmRleAorICogdGFibGUgaW4gYm90aCBkaXJlY3Rpb25zLgorICovCisKKyNkZWZpbmUgT0RJVEhFUl9TSVpFICAxNiAgICAgICAgLyogZGltZW5zaW9uIG9mIGRpdGhlciBtYXRyaXggKi8KKy8qIE5COiBpZiBPRElUSEVSX1NJWkUgaXMgbm90IGEgcG93ZXIgb2YgMiwgT0RJVEhFUl9NQVNLIHVzZXMgd2lsbCBicmVhayAqLworI2RlZmluZSBPRElUSEVSX0NFTExTICAoT0RJVEhFUl9TSVpFICogT0RJVEhFUl9TSVpFKSAvKiAjIGNlbGxzIGluIG1hdHJpeCAqLworI2RlZmluZSBPRElUSEVSX01BU0sgIChPRElUSEVSX1NJWkUgLSAxKSAvKiBtYXNrIGZvciB3cmFwcGluZyBhcm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcnMgKi8KKwordHlwZWRlZiBpbnQgT0RJVEhFUl9NQVRSSVhbT0RJVEhFUl9TSVpFXVtPRElUSEVSX1NJWkVdOwordHlwZWRlZiBpbnQgKCpPRElUSEVSX01BVFJJWF9QVFIpW09ESVRIRVJfU0laRV07CisKK3N0YXRpYyBjb25zdCBVSU5UOCBiYXNlX2RpdGhlcl9tYXRyaXhbT0RJVEhFUl9TSVpFXVtPRElUSEVSX1NJWkVdID0geworICAvKiBCYXllcidzIG9yZGVyLTQgZGl0aGVyIGFycmF5LiAgR2VuZXJhdGVkIGJ5IHRoZSBjb2RlIGdpdmVuIGluCisgICAqIFN0ZXBoZW4gSGF3bGV5J3MgYXJ0aWNsZSAiT3JkZXJlZCBEaXRoZXJpbmciIGluIEdyYXBoaWNzIEdlbXMgSS4KKyAgICogVGhlIHZhbHVlcyBpbiB0aGlzIGFycmF5IG11c3QgcmFuZ2UgZnJvbSAwIHRvIE9ESVRIRVJfQ0VMTFMtMS4KKyAgICovCisgIHsgICAwLDE5MiwgNDgsMjQwLCAxMiwyMDQsIDYwLDI1MiwgIDMsMTk1LCA1MSwyNDMsIDE1LDIwNywgNjMsMjU1IH0sCisgIHsgMTI4LCA2NCwxNzYsMTEyLDE0MCwgNzYsMTg4LDEyNCwxMzEsIDY3LDE3OSwxMTUsMTQzLCA3OSwxOTEsMTI3IH0sCisgIHsgIDMyLDIyNCwgMTYsMjA4LCA0NCwyMzYsIDI4LDIyMCwgMzUsMjI3LCAxOSwyMTEsIDQ3LDIzOSwgMzEsMjIzIH0sCisgIHsgMTYwLCA5NiwxNDQsIDgwLDE3MiwxMDgsMTU2LCA5MiwxNjMsIDk5LDE0NywgODMsMTc1LDExMSwxNTksIDk1IH0sCisgIHsgICA4LDIwMCwgNTYsMjQ4LCAgNCwxOTYsIDUyLDI0NCwgMTEsMjAzLCA1OSwyNTEsICA3LDE5OSwgNTUsMjQ3IH0sCisgIHsgMTM2LCA3MiwxODQsMTIwLDEzMiwgNjgsMTgwLDExNiwxMzksIDc1LDE4NywxMjMsMTM1LCA3MSwxODMsMTE5IH0sCisgIHsgIDQwLDIzMiwgMjQsMjE2LCAzNiwyMjgsIDIwLDIxMiwgNDMsMjM1LCAyNywyMTksIDM5LDIzMSwgMjMsMjE1IH0sCisgIHsgMTY4LDEwNCwxNTIsIDg4LDE2NCwxMDAsMTQ4LCA4NCwxNzEsMTA3LDE1NSwgOTEsMTY3LDEwMywxNTEsIDg3IH0sCisgIHsgICAyLDE5NCwgNTAsMjQyLCAxNCwyMDYsIDYyLDI1NCwgIDEsMTkzLCA0OSwyNDEsIDEzLDIwNSwgNjEsMjUzIH0sCisgIHsgMTMwLCA2NiwxNzgsMTE0LDE0MiwgNzgsMTkwLDEyNiwxMjksIDY1LDE3NywxMTMsMTQxLCA3NywxODksMTI1IH0sCisgIHsgIDM0LDIyNiwgMTgsMjEwLCA0NiwyMzgsIDMwLDIyMiwgMzMsMjI1LCAxNywyMDksIDQ1LDIzNywgMjksMjIxIH0sCisgIHsgMTYyLCA5OCwxNDYsIDgyLDE3NCwxMTAsMTU4LCA5NCwxNjEsIDk3LDE0NSwgODEsMTczLDEwOSwxNTcsIDkzIH0sCisgIHsgIDEwLDIwMiwgNTgsMjUwLCAgNiwxOTgsIDU0LDI0NiwgIDksMjAxLCA1NywyNDksICA1LDE5NywgNTMsMjQ1IH0sCisgIHsgMTM4LCA3NCwxODYsMTIyLDEzNCwgNzAsMTgyLDExOCwxMzcsIDczLDE4NSwxMjEsMTMzLCA2OSwxODEsMTE3IH0sCisgIHsgIDQyLDIzNCwgMjYsMjE4LCAzOCwyMzAsIDIyLDIxNCwgNDEsMjMzLCAyNSwyMTcsIDM3LDIyOSwgMjEsMjEzIH0sCisgIHsgMTcwLDEwNiwxNTQsIDkwLDE2NiwxMDIsMTUwLCA4NiwxNjksMTA1LDE1MywgODksMTY1LDEwMSwxNDksIDg1IH0KK307CisKKworLyogRGVjbGFyYXRpb25zIGZvciBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nLgorICoKKyAqIEVycm9ycyBhcmUgYWNjdW11bGF0ZWQgaW50byB0aGUgYXJyYXkgZnNlcnJvcnNbXSwgYXQgYSByZXNvbHV0aW9uIG9mCisgKiAxLzE2dGggb2YgYSBwaXhlbCBjb3VudC4gIFRoZSBlcnJvciBhdCBhIGdpdmVuIHBpeGVsIGlzIHByb3BhZ2F0ZWQKKyAqIHRvIGl0cyBub3QteWV0LXByb2Nlc3NlZCBuZWlnaGJvcnMgdXNpbmcgdGhlIHN0YW5kYXJkIEYtUyBmcmFjdGlvbnMsCisgKiAgICAgICAgICAgICAgLi4uICAgICAoaGVyZSkgIDcvMTYKKyAqICAgICAgICAgICAgICAzLzE2ICAgIDUvMTYgICAgMS8xNgorICogV2Ugd29yayBsZWZ0LXRvLXJpZ2h0IG9uIGV2ZW4gcm93cywgcmlnaHQtdG8tbGVmdCBvbiBvZGQgcm93cy4KKyAqCisgKiBXZSBjYW4gZ2V0IGF3YXkgd2l0aCBhIHNpbmdsZSBhcnJheSAoaG9sZGluZyBvbmUgcm93J3Mgd29ydGggb2YgZXJyb3JzKQorICogYnkgdXNpbmcgaXQgdG8gc3RvcmUgdGhlIGN1cnJlbnQgcm93J3MgZXJyb3JzIGF0IHBpeGVsIGNvbHVtbnMgbm90IHlldAorICogcHJvY2Vzc2VkLCBidXQgdGhlIG5leHQgcm93J3MgZXJyb3JzIGF0IGNvbHVtbnMgYWxyZWFkeSBwcm9jZXNzZWQuICBXZQorICogbmVlZCBvbmx5IGEgZmV3IGV4dHJhIHZhcmlhYmxlcyB0byBob2xkIHRoZSBlcnJvcnMgaW1tZWRpYXRlbHkgYXJvdW5kIHRoZQorICogY3VycmVudCBjb2x1bW4uICAoSWYgd2UgYXJlIGx1Y2t5LCB0aG9zZSB2YXJpYWJsZXMgYXJlIGluIHJlZ2lzdGVycywgYnV0CisgKiBldmVuIGlmIG5vdCwgdGhleSdyZSBwcm9iYWJseSBjaGVhcGVyIHRvIGFjY2VzcyB0aGFuIGFycmF5IGVsZW1lbnRzIGFyZS4pCisgKgorICogVGhlIGZzZXJyb3JzW10gYXJyYXkgaXMgaW5kZXhlZCBbY29tcG9uZW50I11bcG9zaXRpb25dLgorICogV2UgcHJvdmlkZSAoI2NvbHVtbnMgKyAyKSBlbnRyaWVzIHBlciBjb21wb25lbnQ7IHRoZSBleHRyYSBlbnRyeSBhdCBlYWNoCisgKiBlbmQgc2F2ZXMgdXMgZnJvbSBzcGVjaWFsLWNhc2luZyB0aGUgZmlyc3QgYW5kIGxhc3QgcGl4ZWxzLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAordHlwZWRlZiBJTlQxNiBGU0VSUk9SOyAgICAgICAgICAvKiAxNiBiaXRzIHNob3VsZCBiZSBlbm91Z2ggKi8KK3R5cGVkZWYgaW50IExPQ0ZTRVJST1I7ICAgICAgICAgLyogdXNlICdpbnQnIGZvciBjYWxjdWxhdGlvbiB0ZW1wcyAqLworI2Vsc2UKK3R5cGVkZWYgSkxPTkcgRlNFUlJPUjsgICAgICAgICAgLyogbWF5IG5lZWQgbW9yZSB0aGFuIDE2IGJpdHMgKi8KK3R5cGVkZWYgSkxPTkcgTE9DRlNFUlJPUjsgICAgICAgLyogYmUgc3VyZSBjYWxjdWxhdGlvbiB0ZW1wcyBhcmUgYmlnIGVub3VnaCAqLworI2VuZGlmCisKK3R5cGVkZWYgRlNFUlJPUiAqRlNFUlJQVFI7ICAgICAgLyogcG9pbnRlciB0byBlcnJvciBhcnJheSAqLworCisKKy8qIFByaXZhdGUgc3Vib2JqZWN0ICovCisKKyNkZWZpbmUgTUFYX1FfQ09NUFMgIDQgICAgICAgICAgLyogbWF4IGNvbXBvbmVudHMgSSBjYW4gaGFuZGxlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIEluaXRpYWxseSBhbGxvY2F0ZWQgY29sb3JtYXAgaXMgc2F2ZWQgaGVyZSAqLworICBKU0FNUEFSUkFZIHN2X2NvbG9ybWFwOyAgICAgICAvKiBUaGUgY29sb3IgbWFwIGFzIGEgMi1EIHBpeGVsIGFycmF5ICovCisgIGludCBzdl9hY3R1YWw7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbnRyaWVzIGluIHVzZSAqLworCisgIEpTQU1QQVJSQVkgY29sb3JpbmRleDsgICAgICAgIC8qIFByZWNvbXB1dGVkIG1hcHBpbmcgZm9yIHNwZWVkICovCisgIC8qIGNvbG9yaW5kZXhbaV1bal0gPSBpbmRleCBvZiBjb2xvciBjbG9zZXN0IHRvIHBpeGVsIHZhbHVlIGogaW4gY29tcG9uZW50IGksCisgICAqIHByZW11bHRpcGxpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiAgU2luY2UgY29sb3JtYXAgaW5kZXhlcyBtdXN0IGZpdCBpbnRvCisgICAqIEpTQU1QTEVzLCB0aGUgZW50cmllcyBvZiB0aGlzIGFycmF5IHdpbGwgdG9vLgorICAgKi8KKyAgYm9vbGVhbiBpc19wYWRkZWQ7ICAgICAgICAgICAgLyogaXMgdGhlIGNvbG9yaW5kZXggcGFkZGVkIGZvciBvZGl0aGVyPyAqLworCisgIGludCBOY29sb3JzW01BWF9RX0NPTVBTXTsgICAgIC8qICMgb2YgdmFsdWVzIGFsbG9jZWQgdG8gZWFjaCBjb21wb25lbnQgKi8KKworICAvKiBWYXJpYWJsZXMgZm9yIG9yZGVyZWQgZGl0aGVyaW5nICovCisgIGludCByb3dfaW5kZXg7ICAgICAgICAgICAgICAgIC8qIGN1ciByb3cncyB2ZXJ0aWNhbCBpbmRleCBpbiBkaXRoZXIgbWF0cml4ICovCisgIE9ESVRIRVJfTUFUUklYX1BUUiBvZGl0aGVyW01BWF9RX0NPTVBTXTsgLyogb25lIGRpdGhlciBhcnJheSBwZXIgY29tcG9uZW50ICovCisKKyAgLyogVmFyaWFibGVzIGZvciBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nICovCisgIEZTRVJSUFRSIGZzZXJyb3JzW01BWF9RX0NPTVBTXTsgLyogYWNjdW11bGF0ZWQgZXJyb3JzICovCisgIGJvb2xlYW4gb25fb2RkX3JvdzsgICAgICAgICAgIC8qIGZsYWcgdG8gcmVtZW1iZXIgd2hpY2ggcm93IHdlIGFyZSBvbiAqLworfSBteV9jcXVhbnRpemVyOworCit0eXBlZGVmIG15X2NxdWFudGl6ZXIgKm15X2NxdWFudGl6ZV9wdHI7CisKKworLyoKKyAqIFBvbGljeS1tYWtpbmcgc3Vicm91dGluZXMgZm9yIGNyZWF0ZV9jb2xvcm1hcCBhbmQgY3JlYXRlX2NvbG9yaW5kZXguCisgKiBUaGVzZSByb3V0aW5lcyBkZXRlcm1pbmUgdGhlIGNvbG9ybWFwIHRvIGJlIHVzZWQuICBUaGUgcmVzdCBvZiB0aGUgbW9kdWxlCisgKiBvbmx5IGFzc3VtZXMgdGhhdCB0aGUgY29sb3JtYXAgaXMgb3J0aG9nb25hbC4KKyAqCisgKiAgKiBzZWxlY3RfbmNvbG9ycyBkZWNpZGVzIGhvdyB0byBkaXZ2eSB1cCB0aGUgYXZhaWxhYmxlIGNvbG9ycworICogICAgYW1vbmcgdGhlIGNvbXBvbmVudHMuCisgKiAgKiBvdXRwdXRfdmFsdWUgZGVmaW5lcyB0aGUgc2V0IG9mIHJlcHJlc2VudGF0aXZlIHZhbHVlcyBmb3IgYSBjb21wb25lbnQuCisgKiAgKiBsYXJnZXN0X2lucHV0X3ZhbHVlIGRlZmluZXMgdGhlIG1hcHBpbmcgZnJvbSBpbnB1dCB2YWx1ZXMgdG8KKyAqICAgIHJlcHJlc2VudGF0aXZlIHZhbHVlcyBmb3IgYSBjb21wb25lbnQuCisgKiBOb3RlIHRoYXQgdGhlIGxhdHRlciB0d28gcm91dGluZXMgbWF5IGltcG9zZSBkaWZmZXJlbnQgcG9saWNpZXMgZm9yCisgKiBkaWZmZXJlbnQgY29tcG9uZW50cywgdGhvdWdoIHRoaXMgaXMgbm90IGN1cnJlbnRseSBkb25lLgorICovCisKKworTE9DQUwoaW50KQorc2VsZWN0X25jb2xvcnMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IE5jb2xvcnNbXSkKKy8qIERldGVybWluZSBhbGxvY2F0aW9uIG9mIGRlc2lyZWQgY29sb3JzIHRvIGNvbXBvbmVudHMsICovCisvKiBhbmQgZmlsbCBpbiBOY29sb3JzW10gYXJyYXkgdG8gaW5kaWNhdGUgY2hvaWNlLiAqLworLyogUmV0dXJuIHZhbHVlIGlzIHRvdGFsIG51bWJlciBvZiBjb2xvcnMgKHByb2R1Y3Qgb2YgTmNvbG9yc1tdIHZhbHVlcykuICovCit7CisgIGludCBuYyA9IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsgLyogbnVtYmVyIG9mIGNvbG9yIGNvbXBvbmVudHMgKi8KKyAgaW50IG1heF9jb2xvcnMgPSBjaW5mby0+ZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzOworICBpbnQgdG90YWxfY29sb3JzLCBpcm9vdCwgaSwgajsKKyAgYm9vbGVhbiBjaGFuZ2VkOworICBsb25nIHRlbXA7CisgIGludCBSR0Jfb3JkZXJbM10gPSB7IFJHQl9HUkVFTiwgUkdCX1JFRCwgUkdCX0JMVUUgfTsKKyAgUkdCX29yZGVyWzBdID0gcmdiX2dyZWVuW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICBSR0Jfb3JkZXJbMV0gPSByZ2JfcmVkW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICBSR0Jfb3JkZXJbMl0gPSByZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKworICAvKiBXZSBjYW4gYWxsb2NhdGUgYXQgbGVhc3QgdGhlIG5jJ3RoIHJvb3Qgb2YgbWF4X2NvbG9ycyBwZXIgY29tcG9uZW50LiAqLworICAvKiBDb21wdXRlIGZsb29yKG5jJ3RoIHJvb3Qgb2YgbWF4X2NvbG9ycykuICovCisgIGlyb290ID0gMTsKKyAgZG8geworICAgIGlyb290Kys7CisgICAgdGVtcCA9IGlyb290OyAgICAgICAgICAgICAgIC8qIHNldCB0ZW1wID0gaXJvb3QgKiogbmMgKi8KKyAgICBmb3IgKGkgPSAxOyBpIDwgbmM7IGkrKykKKyAgICAgIHRlbXAgKj0gaXJvb3Q7CisgIH0gd2hpbGUgKHRlbXAgPD0gKGxvbmcpbWF4X2NvbG9ycyk7IC8qIHJlcGVhdCB0aWxsIGlyb290IGV4Y2VlZHMgcm9vdCAqLworICBpcm9vdC0tOyAgICAgICAgICAgICAgICAgICAgICAvKiBub3cgaXJvb3QgPSBmbG9vcihyb290KSAqLworCisgIC8qIE11c3QgaGF2ZSBhdCBsZWFzdCAyIGNvbG9yIHZhbHVlcyBwZXIgY29tcG9uZW50ICovCisgIGlmIChpcm9vdCA8IDIpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfUVVBTlRfRkVXX0NPTE9SUywgKGludCl0ZW1wKTsKKworICAvKiBJbml0aWFsaXplIHRvIGlyb290IGNvbG9yIHZhbHVlcyBmb3IgZWFjaCBjb21wb25lbnQgKi8KKyAgdG90YWxfY29sb3JzID0gMTsKKyAgZm9yIChpID0gMDsgaSA8IG5jOyBpKyspIHsKKyAgICBOY29sb3JzW2ldID0gaXJvb3Q7CisgICAgdG90YWxfY29sb3JzICo9IGlyb290OworICB9CisgIC8qIFdlIG1heSBiZSBhYmxlIHRvIGluY3JlbWVudCB0aGUgY291bnQgZm9yIG9uZSBvciBtb3JlIGNvbXBvbmVudHMgd2l0aG91dAorICAgKiBleGNlZWRpbmcgbWF4X2NvbG9ycywgdGhvdWdoIHdlIGtub3cgbm90IGFsbCBjYW4gYmUgaW5jcmVtZW50ZWQuCisgICAqIFNvbWV0aW1lcywgdGhlIGZpcnN0IGNvbXBvbmVudCBjYW4gYmUgaW5jcmVtZW50ZWQgbW9yZSB0aGFuIG9uY2UhCisgICAqIChFeGFtcGxlOiBmb3IgMTYgY29sb3JzLCB3ZSBzdGFydCBhdCAyKjIqMiwgZ28gdG8gMyoyKjIsIHRoZW4gNCoyKjIuKQorICAgKiBJbiBSR0IgY29sb3JzcGFjZSwgdHJ5IHRvIGluY3JlbWVudCBHIGZpcnN0LCB0aGVuIFIsIHRoZW4gQi4KKyAgICovCisgIGRvIHsKKyAgICBjaGFuZ2VkID0gRkFMU0U7CisgICAgZm9yIChpID0gMDsgaSA8IG5jOyBpKyspIHsKKyAgICAgIGogPSAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCID8gUkdCX29yZGVyW2ldIDogaSk7CisgICAgICAvKiBjYWxjdWxhdGUgbmV3IHRvdGFsX2NvbG9ycyBpZiBOY29sb3JzW2pdIGlzIGluY3JlbWVudGVkICovCisgICAgICB0ZW1wID0gdG90YWxfY29sb3JzIC8gTmNvbG9yc1tqXTsKKyAgICAgIHRlbXAgKj0gTmNvbG9yc1tqXSArIDE7ICAgLyogZG9uZSBpbiBsb25nIGFyaXRoIHRvIGF2b2lkIG9mbG8gKi8KKyAgICAgIGlmICh0ZW1wID4gKGxvbmcpbWF4X2NvbG9ycykKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogd29uJ3QgZml0LCBkb25lIHdpdGggdGhpcyBwYXNzICovCisgICAgICBOY29sb3JzW2pdKys7ICAgICAgICAgICAgIC8qIE9LLCBhcHBseSB0aGUgaW5jcmVtZW50ICovCisgICAgICB0b3RhbF9jb2xvcnMgPSAoaW50KXRlbXA7CisgICAgICBjaGFuZ2VkID0gVFJVRTsKKyAgICB9CisgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgIHJldHVybiB0b3RhbF9jb2xvcnM7Cit9CisKKworTE9DQUwoaW50KQorb3V0cHV0X3ZhbHVlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBjaSwgaW50IGosIGludCBtYXhqKQorLyogUmV0dXJuIGondGggb3V0cHV0IHZhbHVlLCB3aGVyZSBqIHdpbGwgcmFuZ2UgZnJvbSAwIHRvIG1heGogKi8KKy8qIFRoZSBvdXRwdXQgdmFsdWVzIG11c3QgZmFsbCBpbiAwLi5NQVhKU0FNUExFIGluIGluY3JlYXNpbmcgb3JkZXIgKi8KK3sKKyAgLyogV2UgYWx3YXlzIHByb3ZpZGUgdmFsdWVzIDAgYW5kIE1BWEpTQU1QTEUgZm9yIGVhY2ggY29tcG9uZW50OworICAgKiBhbnkgYWRkaXRpb25hbCB2YWx1ZXMgYXJlIGVxdWFsbHkgc3BhY2VkIGJldHdlZW4gdGhlc2UgbGltaXRzLgorICAgKiAoRm9yY2luZyB0aGUgdXBwZXIgYW5kIGxvd2VyIHZhbHVlcyB0byB0aGUgbGltaXRzIGVuc3VyZXMgdGhhdAorICAgKiBkaXRoZXJpbmcgY2FuJ3QgcHJvZHVjZSBhIGNvbG9yIG91dHNpZGUgdGhlIHNlbGVjdGVkIGdhbXV0LikKKyAgICovCisgIHJldHVybiAoaW50KSgoKEpMT05HKWogKiBNQVhKU0FNUExFICsgbWF4aiAvIDIpIC8gbWF4aik7Cit9CisKKworTE9DQUwoaW50KQorbGFyZ2VzdF9pbnB1dF92YWx1ZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgY2ksIGludCBqLCBpbnQgbWF4aikKKy8qIFJldHVybiBsYXJnZXN0IGlucHV0IHZhbHVlIHRoYXQgc2hvdWxkIG1hcCB0byBqJ3RoIG91dHB1dCB2YWx1ZSAqLworLyogTXVzdCBoYXZlIGxhcmdlc3Qoaj0wKSA+PSAwLCBhbmQgbGFyZ2VzdChqPW1heGopID49IE1BWEpTQU1QTEUgKi8KK3sKKyAgLyogQnJlYWtwb2ludHMgYXJlIGhhbGZ3YXkgYmV0d2VlbiB2YWx1ZXMgcmV0dXJuZWQgYnkgb3V0cHV0X3ZhbHVlICovCisgIHJldHVybiAoaW50KSgoKEpMT05HKSgyICogaiArIDEpICogTUFYSlNBTVBMRSArIG1heGopIC8gKDIgKiBtYXhqKSk7Cit9CisKKworLyoKKyAqIENyZWF0ZSB0aGUgY29sb3JtYXAuCisgKi8KKworTE9DQUwodm9pZCkKK2NyZWF0ZV9jb2xvcm1hcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIEpTQU1QQVJSQVkgY29sb3JtYXA7ICAgICAgICAgIC8qIENyZWF0ZWQgY29sb3JtYXAgKi8KKyAgaW50IHRvdGFsX2NvbG9yczsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGRpc3RpbmN0IG91dHB1dCBjb2xvcnMgKi8KKyAgaW50IGksIGosIGssIG5jaSwgYmxrc2l6ZSwgYmxrZGlzdCwgcHRyLCB2YWw7CisKKyAgLyogU2VsZWN0IG51bWJlciBvZiBjb2xvcnMgZm9yIGVhY2ggY29tcG9uZW50ICovCisgIHRvdGFsX2NvbG9ycyA9IHNlbGVjdF9uY29sb3JzKGNpbmZvLCBjcXVhbnRpemUtPk5jb2xvcnMpOworCisgIC8qIFJlcG9ydCBzZWxlY3RlZCBjb2xvciBjb3VudHMgKi8KKyAgaWYgKGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9PSAzKQorICAgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1FVQU5UXzNfTkNPTE9SUywgdG90YWxfY29sb3JzLAorICAgICAgICAgICAgIGNxdWFudGl6ZS0+TmNvbG9yc1swXSwgY3F1YW50aXplLT5OY29sb3JzWzFdLAorICAgICAgICAgICAgIGNxdWFudGl6ZS0+TmNvbG9yc1syXSk7CisgIGVsc2UKKyAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19RVUFOVF9OQ09MT1JTLCB0b3RhbF9jb2xvcnMpOworCisgIC8qIEFsbG9jYXRlIGFuZCBmaWxsIGluIHRoZSBjb2xvcm1hcC4gKi8KKyAgLyogVGhlIGNvbG9ycyBhcmUgb3JkZXJlZCBpbiB0aGUgbWFwIGluIHN0YW5kYXJkIHJvdy1tYWpvciBvcmRlciwgKi8KKyAgLyogaS5lLiByaWdodG1vc3QgKGhpZ2hlc3QtaW5kZXhlZCkgY29sb3IgY2hhbmdlcyBtb3N0IHJhcGlkbHkuICovCisKKyAgY29sb3JtYXAgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgIChKRElNRU5TSU9OKXRvdGFsX2NvbG9ycywgKEpESU1FTlNJT04pY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzKTsKKworICAvKiBibGtzaXplIGlzIG51bWJlciBvZiBhZGphY2VudCByZXBlYXRlZCBlbnRyaWVzIGZvciBhIGNvbXBvbmVudCAqLworICAvKiBibGtkaXN0IGlzIGRpc3RhbmNlIGJldHdlZW4gZ3JvdXBzIG9mIGlkZW50aWNhbCBlbnRyaWVzIGZvciBhIGNvbXBvbmVudCAqLworICBibGtkaXN0ID0gdG90YWxfY29sb3JzOworCisgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7IGkrKykgeworICAgIC8qIGZpbGwgaW4gY29sb3JtYXAgZW50cmllcyBmb3IgaSd0aCBjb2xvciBjb21wb25lbnQgKi8KKyAgICBuY2kgPSBjcXVhbnRpemUtPk5jb2xvcnNbaV07IC8qICMgb2YgZGlzdGluY3QgdmFsdWVzIGZvciB0aGlzIGNvbG9yICovCisgICAgYmxrc2l6ZSA9IGJsa2Rpc3QgLyBuY2k7CisgICAgZm9yIChqID0gMDsgaiA8IG5jaTsgaisrKSB7CisgICAgICAvKiBDb21wdXRlIGondGggb3V0cHV0IHZhbHVlIChvdXQgb2YgbmNpKSBmb3IgY29tcG9uZW50ICovCisgICAgICB2YWwgPSBvdXRwdXRfdmFsdWUoY2luZm8sIGksIGosIG5jaSAtIDEpOworICAgICAgLyogRmlsbCBpbiBhbGwgY29sb3JtYXAgZW50cmllcyB0aGF0IGhhdmUgdGhpcyB2YWx1ZSBvZiB0aGlzIGNvbXBvbmVudCAqLworICAgICAgZm9yIChwdHIgPSBqICogYmxrc2l6ZTsgcHRyIDwgdG90YWxfY29sb3JzOyBwdHIgKz0gYmxrZGlzdCkgeworICAgICAgICAvKiBmaWxsIGluIGJsa3NpemUgZW50cmllcyBiZWdpbm5pbmcgYXQgcHRyICovCisgICAgICAgIGZvciAoayA9IDA7IGsgPCBibGtzaXplOyBrKyspCisgICAgICAgICAgY29sb3JtYXBbaV1bcHRyICsga10gPSAoSlNBTVBMRSl2YWw7CisgICAgICB9CisgICAgfQorICAgIGJsa2Rpc3QgPSBibGtzaXplOyAgICAgICAgICAvKiBibGtzaXplIG9mIHRoaXMgY29sb3IgaXMgYmxrZGlzdCBvZiBuZXh0ICovCisgIH0KKworICAvKiBTYXZlIHRoZSBjb2xvcm1hcCBpbiBwcml2YXRlIHN0b3JhZ2UsCisgICAqIHdoZXJlIGl0IHdpbGwgc3Vydml2ZSBjb2xvciBxdWFudGl6YXRpb24gbW9kZSBjaGFuZ2VzLgorICAgKi8KKyAgY3F1YW50aXplLT5zdl9jb2xvcm1hcCA9IGNvbG9ybWFwOworICBjcXVhbnRpemUtPnN2X2FjdHVhbCA9IHRvdGFsX2NvbG9yczsKK30KKworCisvKgorICogQ3JlYXRlIHRoZSBjb2xvciBpbmRleCB0YWJsZS4KKyAqLworCitMT0NBTCh2b2lkKQorY3JlYXRlX2NvbG9yaW5kZXgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICBKU0FNUFJPVyBpbmRleHB0cjsKKyAgaW50IGksIGosIGssIG5jaSwgYmxrc2l6ZSwgdmFsLCBwYWQ7CisKKyAgLyogRm9yIG9yZGVyZWQgZGl0aGVyLCB3ZSBwYWQgdGhlIGNvbG9yIGluZGV4IHRhYmxlcyBieSBNQVhKU0FNUExFIGluCisgICAqIGVhY2ggZGlyZWN0aW9uIChpbnB1dCBpbmRleCB2YWx1ZXMgY2FuIGJlIC1NQVhKU0FNUExFIC4uIDIqTUFYSlNBTVBMRSkuCisgICAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGUgb3RoZXIgZGl0aGVyaW5nIG1vZGVzLiAgSG93ZXZlciwgd2UKKyAgICogZmxhZyB3aGV0aGVyIGl0IHdhcyBkb25lIGluIGNhc2UgdXNlciBjaGFuZ2VzIGRpdGhlcmluZyBtb2RlLgorICAgKi8KKyAgaWYgKGNpbmZvLT5kaXRoZXJfbW9kZSA9PSBKRElUSEVSX09SREVSRUQpIHsKKyAgICBwYWQgPSBNQVhKU0FNUExFICogMjsKKyAgICBjcXVhbnRpemUtPmlzX3BhZGRlZCA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgcGFkID0gMDsKKyAgICBjcXVhbnRpemUtPmlzX3BhZGRlZCA9IEZBTFNFOworICB9CisKKyAgY3F1YW50aXplLT5jb2xvcmluZGV4ID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAoSkRJTUVOU0lPTikoTUFYSlNBTVBMRSArIDEgKyBwYWQpLAorICAgICAoSkRJTUVOU0lPTiljaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMpOworCisgIC8qIGJsa3NpemUgaXMgbnVtYmVyIG9mIGFkamFjZW50IHJlcGVhdGVkIGVudHJpZXMgZm9yIGEgY29tcG9uZW50ICovCisgIGJsa3NpemUgPSBjcXVhbnRpemUtPnN2X2FjdHVhbDsKKworICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOyBpKyspIHsKKyAgICAvKiBmaWxsIGluIGNvbG9yaW5kZXggZW50cmllcyBmb3IgaSd0aCBjb2xvciBjb21wb25lbnQgKi8KKyAgICBuY2kgPSBjcXVhbnRpemUtPk5jb2xvcnNbaV07IC8qICMgb2YgZGlzdGluY3QgdmFsdWVzIGZvciB0aGlzIGNvbG9yICovCisgICAgYmxrc2l6ZSA9IGJsa3NpemUgLyBuY2k7CisKKyAgICAvKiBhZGp1c3QgY29sb3JpbmRleCBwb2ludGVycyB0byBwcm92aWRlIHBhZGRpbmcgYXQgbmVnYXRpdmUgaW5kZXhlcy4gKi8KKyAgICBpZiAocGFkKQorICAgICAgY3F1YW50aXplLT5jb2xvcmluZGV4W2ldICs9IE1BWEpTQU1QTEU7CisKKyAgICAvKiBpbiBsb29wLCB2YWwgPSBpbmRleCBvZiBjdXJyZW50IG91dHB1dCB2YWx1ZSwgKi8KKyAgICAvKiBhbmQgayA9IGxhcmdlc3QgaiB0aGF0IG1hcHMgdG8gY3VycmVudCB2YWwgKi8KKyAgICBpbmRleHB0ciA9IGNxdWFudGl6ZS0+Y29sb3JpbmRleFtpXTsKKyAgICB2YWwgPSAwOworICAgIGsgPSBsYXJnZXN0X2lucHV0X3ZhbHVlKGNpbmZvLCBpLCAwLCBuY2kgLSAxKTsKKyAgICBmb3IgKGogPSAwOyBqIDw9IE1BWEpTQU1QTEU7IGorKykgeworICAgICAgd2hpbGUgKGogPiBrKSAgICAgICAgICAgICAvKiBhZHZhbmNlIHZhbCBpZiBwYXN0IGJvdW5kYXJ5ICovCisgICAgICAgIGsgPSBsYXJnZXN0X2lucHV0X3ZhbHVlKGNpbmZvLCBpLCArK3ZhbCwgbmNpIC0gMSk7CisgICAgICAvKiBwcmVtdWx0aXBseSBzbyB0aGF0IG5vIG11bHRpcGxpY2F0aW9uIG5lZWRlZCBpbiBtYWluIHByb2Nlc3NpbmcgKi8KKyAgICAgIGluZGV4cHRyW2pdID0gKEpTQU1QTEUpKHZhbCAqIGJsa3NpemUpOworICAgIH0KKyAgICAvKiBQYWQgYXQgYm90aCBlbmRzIGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChwYWQpCisgICAgICBmb3IgKGogPSAxOyBqIDw9IE1BWEpTQU1QTEU7IGorKykgeworICAgICAgICBpbmRleHB0clstal0gPSBpbmRleHB0clswXTsKKyAgICAgICAgaW5kZXhwdHJbTUFYSlNBTVBMRSArIGpdID0gaW5kZXhwdHJbTUFYSlNBTVBMRV07CisgICAgICB9CisgIH0KK30KKworCisvKgorICogQ3JlYXRlIGFuIG9yZGVyZWQtZGl0aGVyIGFycmF5IGZvciBhIGNvbXBvbmVudCBoYXZpbmcgbmNvbG9ycworICogZGlzdGluY3Qgb3V0cHV0IHZhbHVlcy4KKyAqLworCitMT0NBTChPRElUSEVSX01BVFJJWF9QVFIpCittYWtlX29kaXRoZXJfYXJyYXkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG5jb2xvcnMpCit7CisgIE9ESVRIRVJfTUFUUklYX1BUUiBvZGl0aGVyOworICBpbnQgaiwgazsKKyAgSkxPTkcgbnVtLCBkZW47CisKKyAgb2RpdGhlciA9IChPRElUSEVSX01BVFJJWF9QVFIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoT0RJVEhFUl9NQVRSSVgpKTsKKyAgLyogVGhlIGludGVyLXZhbHVlIGRpc3RhbmNlIGZvciB0aGlzIGNvbG9yIGlzIE1BWEpTQU1QTEUvKG5jb2xvcnMtMSkuCisgICAqIEhlbmNlIHRoZSBkaXRoZXIgdmFsdWUgZm9yIHRoZSBtYXRyaXggY2VsbCB3aXRoIGZpbGwgb3JkZXIgZgorICAgKiAoZj0wLi5OLTEpIHNob3VsZCBiZSAoTi0xLTIqZikvKDIqTikgKiBNQVhKU0FNUExFLyhuY29sb3JzLTEpLgorICAgKiBPbiAxNi1iaXQtaW50IG1hY2hpbmUsIGJlIGNhcmVmdWwgdG8gYXZvaWQgb3ZlcmZsb3cuCisgICAqLworICBkZW4gPSAyICogT0RJVEhFUl9DRUxMUyAqICgoSkxPTkcpKG5jb2xvcnMgLSAxKSk7CisgIGZvciAoaiA9IDA7IGogPCBPRElUSEVSX1NJWkU7IGorKykgeworICAgIGZvciAoayA9IDA7IGsgPCBPRElUSEVSX1NJWkU7IGsrKykgeworICAgICAgbnVtID0gKChKTE9ORykoT0RJVEhFUl9DRUxMUyAtIDEgLQorICAgICAgICAgICAgICAgICAgICAgMiAqICgoaW50KWJhc2VfZGl0aGVyX21hdHJpeFtqXVtrXSkpKSAqIE1BWEpTQU1QTEU7CisgICAgICAvKiBFbnN1cmUgcm91bmQgdG93YXJkcyB6ZXJvIGRlc3BpdGUgQydzIGxhY2sgb2YgY29uc2lzdGVuY3kKKyAgICAgICAqIGFib3V0IHJvdW5kaW5nIG5lZ2F0aXZlIHZhbHVlcyBpbiBpbnRlZ2VyIGRpdmlzaW9uLi4uCisgICAgICAgKi8KKyAgICAgIG9kaXRoZXJbal1ba10gPSAoaW50KShudW0gPCAwID8gLSgoLW51bSkgLyBkZW4pIDogbnVtIC8gZGVuKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG9kaXRoZXI7Cit9CisKKworLyoKKyAqIENyZWF0ZSB0aGUgb3JkZXJlZC1kaXRoZXIgdGFibGVzLgorICogQ29tcG9uZW50cyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIHJlcHJlc2VudGF0aXZlIGNvbG9ycyBtYXkKKyAqIHNoYXJlIGEgZGl0aGVyIHRhYmxlLgorICovCisKK0xPQ0FMKHZvaWQpCitjcmVhdGVfb2RpdGhlcl90YWJsZXMoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICBPRElUSEVSX01BVFJJWF9QVFIgb2RpdGhlcjsKKyAgaW50IGksIGosIG5jaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOyBpKyspIHsKKyAgICBuY2kgPSBjcXVhbnRpemUtPk5jb2xvcnNbaV07IC8qICMgb2YgZGlzdGluY3QgdmFsdWVzIGZvciB0aGlzIGNvbG9yICovCisgICAgb2RpdGhlciA9IE5VTEw7ICAgICAgICAgICAgIC8qIHNlYXJjaCBmb3IgbWF0Y2hpbmcgcHJpb3IgY29tcG9uZW50ICovCisgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgaWYgKG5jaSA9PSBjcXVhbnRpemUtPk5jb2xvcnNbal0pIHsKKyAgICAgICAgb2RpdGhlciA9IGNxdWFudGl6ZS0+b2RpdGhlcltqXTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmIChvZGl0aGVyID09IE5VTEwpICAgICAgICAvKiBuZWVkIGEgbmV3IHRhYmxlPyAqLworICAgICAgb2RpdGhlciA9IG1ha2Vfb2RpdGhlcl9hcnJheShjaW5mbywgbmNpKTsKKyAgICBjcXVhbnRpemUtPm9kaXRoZXJbaV0gPSBvZGl0aGVyOworICB9Cit9CisKKworLyoKKyAqIE1hcCBzb21lIHJvd3Mgb2YgcGl4ZWxzIHRvIHRoZSBvdXRwdXQgY29sb3JtYXBwZWQgcmVwcmVzZW50YXRpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitjb2xvcl9xdWFudGl6ZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorLyogR2VuZXJhbCBjYXNlLCBubyBkaXRoZXJpbmcgKi8KK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICBKU0FNUEFSUkFZIGNvbG9yaW5kZXggPSBjcXVhbnRpemUtPmNvbG9yaW5kZXg7CisgIHJlZ2lzdGVyIGludCBwaXhjb2RlLCBjaTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyaW4sIHB0cm91dDsKKyAgaW50IHJvdzsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gd2lkdGggPSBjaW5mby0+b3V0cHV0X3dpZHRoOworICByZWdpc3RlciBpbnQgbmMgPSBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7CisKKyAgZm9yIChyb3cgPSAwOyByb3cgPCBudW1fcm93czsgcm93KyspIHsKKyAgICBwdHJpbiA9IGlucHV0X2J1Zltyb3ddOworICAgIHB0cm91dCA9IG91dHB1dF9idWZbcm93XTsKKyAgICBmb3IgKGNvbCA9IHdpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgcGl4Y29kZSA9IDA7CisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBuYzsgY2krKykgeworICAgICAgICBwaXhjb2RlICs9IEdFVEpTQU1QTEUoY29sb3JpbmRleFtjaV1bR0VUSlNBTVBMRSgqcHRyaW4rKyldKTsKKyAgICAgIH0KKyAgICAgICpwdHJvdXQrKyA9IChKU0FNUExFKXBpeGNvZGU7CisgICAgfQorICB9Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitjb2xvcl9xdWFudGl6ZTMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCisvKiBGYXN0IHBhdGggZm9yIG91dF9jb2xvcl9jb21wb25lbnRzPT0zLCBubyBkaXRoZXJpbmcgKi8KK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICByZWdpc3RlciBpbnQgcGl4Y29kZTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyaW4sIHB0cm91dDsKKyAgSlNBTVBST1cgY29sb3JpbmRleDAgPSBjcXVhbnRpemUtPmNvbG9yaW5kZXhbMF07CisgIEpTQU1QUk9XIGNvbG9yaW5kZXgxID0gY3F1YW50aXplLT5jb2xvcmluZGV4WzFdOworICBKU0FNUFJPVyBjb2xvcmluZGV4MiA9IGNxdWFudGl6ZS0+Y29sb3JpbmRleFsyXTsKKyAgaW50IHJvdzsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gd2lkdGggPSBjaW5mby0+b3V0cHV0X3dpZHRoOworCisgIGZvciAocm93ID0gMDsgcm93IDwgbnVtX3Jvd3M7IHJvdysrKSB7CisgICAgcHRyaW4gPSBpbnB1dF9idWZbcm93XTsKKyAgICBwdHJvdXQgPSBvdXRwdXRfYnVmW3Jvd107CisgICAgZm9yIChjb2wgPSB3aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIHBpeGNvZGUgID0gR0VUSlNBTVBMRShjb2xvcmluZGV4MFtHRVRKU0FNUExFKCpwdHJpbisrKV0pOworICAgICAgcGl4Y29kZSArPSBHRVRKU0FNUExFKGNvbG9yaW5kZXgxW0dFVEpTQU1QTEUoKnB0cmluKyspXSk7CisgICAgICBwaXhjb2RlICs9IEdFVEpTQU1QTEUoY29sb3JpbmRleDJbR0VUSlNBTVBMRSgqcHRyaW4rKyldKTsKKyAgICAgICpwdHJvdXQrKyA9IChKU0FNUExFKXBpeGNvZGU7CisgICAgfQorICB9Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitxdWFudGl6ZV9vcmRfZGl0aGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKy8qIEdlbmVyYWwgY2FzZSwgd2l0aCBvcmRlcmVkIGRpdGhlcmluZyAqLworeworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHV0X3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHV0X3B0cjsKKyAgSlNBTVBST1cgY29sb3JpbmRleF9jaTsKKyAgaW50ICpkaXRoZXI7ICAgICAgICAgICAgICAgICAgLyogcG9pbnRzIHRvIGFjdGl2ZSByb3cgb2YgZGl0aGVyIG1hdHJpeCAqLworICBpbnQgcm93X2luZGV4LCBjb2xfaW5kZXg7ICAgICAvKiBjdXJyZW50IGluZGV4ZXMgaW50byBkaXRoZXIgbWF0cml4ICovCisgIGludCBuYyA9IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsKKyAgaW50IGNpOworICBpbnQgcm93OworICBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiB3aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisKKyAgZm9yIChyb3cgPSAwOyByb3cgPCBudW1fcm93czsgcm93KyspIHsKKyAgICAvKiBJbml0aWFsaXplIG91dHB1dCB2YWx1ZXMgdG8gMCBzbyBjYW4gcHJvY2VzcyBjb21wb25lbnRzIHNlcGFyYXRlbHkgKi8KKyAgICBqemVyb19mYXIoKHZvaWQgKilvdXRwdXRfYnVmW3Jvd10sIChzaXplX3QpKHdpZHRoICogc2l6ZW9mKEpTQU1QTEUpKSk7CisgICAgcm93X2luZGV4ID0gY3F1YW50aXplLT5yb3dfaW5kZXg7CisgICAgZm9yIChjaSA9IDA7IGNpIDwgbmM7IGNpKyspIHsKKyAgICAgIGlucHV0X3B0ciA9IGlucHV0X2J1Zltyb3ddICsgY2k7CisgICAgICBvdXRwdXRfcHRyID0gb3V0cHV0X2J1Zltyb3ddOworICAgICAgY29sb3JpbmRleF9jaSA9IGNxdWFudGl6ZS0+Y29sb3JpbmRleFtjaV07CisgICAgICBkaXRoZXIgPSBjcXVhbnRpemUtPm9kaXRoZXJbY2ldW3Jvd19pbmRleF07CisgICAgICBjb2xfaW5kZXggPSAwOworCisgICAgICBmb3IgKGNvbCA9IHdpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICAvKiBGb3JtIHBpeGVsIHZhbHVlICsgZGl0aGVyLCByYW5nZS1saW1pdCB0byAwLi5NQVhKU0FNUExFLAorICAgICAgICAgKiBzZWxlY3Qgb3V0cHV0IHZhbHVlLCBhY2N1bXVsYXRlIGludG8gb3V0cHV0IGNvZGUgZm9yIHRoaXMgcGl4ZWwuCisgICAgICAgICAqIFJhbmdlLWxpbWl0aW5nIG5lZWQgbm90IGJlIGRvbmUgZXhwbGljaXRseSwgYXMgd2UgaGF2ZSBleHRlbmRlZAorICAgICAgICAgKiB0aGUgY29sb3JpbmRleCB0YWJsZSB0byBwcm9kdWNlIHRoZSByaWdodCBhbnN3ZXJzIGZvciBvdXQtb2YtcmFuZ2UKKyAgICAgICAgICogaW5wdXRzLiAgVGhlIG1heGltdW0gZGl0aGVyIGlzICstIE1BWEpTQU1QTEU7IHRoaXMgc2V0cyB0aGUKKyAgICAgICAgICogcmVxdWlyZWQgYW1vdW50IG9mIHBhZGRpbmcuCisgICAgICAgICAqLworICAgICAgICAqb3V0cHV0X3B0ciArPQorICAgICAgICAgIGNvbG9yaW5kZXhfY2lbR0VUSlNBTVBMRSgqaW5wdXRfcHRyKSArIGRpdGhlcltjb2xfaW5kZXhdXTsKKyAgICAgICAgaW5wdXRfcHRyICs9IG5jOworICAgICAgICBvdXRwdXRfcHRyKys7CisgICAgICAgIGNvbF9pbmRleCA9IChjb2xfaW5kZXggKyAxKSAmIE9ESVRIRVJfTUFTSzsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQWR2YW5jZSByb3cgaW5kZXggZm9yIG5leHQgcm93ICovCisgICAgcm93X2luZGV4ID0gKHJvd19pbmRleCArIDEpICYgT0RJVEhFUl9NQVNLOworICAgIGNxdWFudGl6ZS0+cm93X2luZGV4ID0gcm93X2luZGV4OworICB9Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitxdWFudGl6ZTNfb3JkX2RpdGhlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorLyogRmFzdCBwYXRoIGZvciBvdXRfY29sb3JfY29tcG9uZW50cz09Mywgd2l0aCBvcmRlcmVkIGRpdGhlcmluZyAqLworeworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIHJlZ2lzdGVyIGludCBwaXhjb2RlOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB1dF9wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB1dF9wdHI7CisgIEpTQU1QUk9XIGNvbG9yaW5kZXgwID0gY3F1YW50aXplLT5jb2xvcmluZGV4WzBdOworICBKU0FNUFJPVyBjb2xvcmluZGV4MSA9IGNxdWFudGl6ZS0+Y29sb3JpbmRleFsxXTsKKyAgSlNBTVBST1cgY29sb3JpbmRleDIgPSBjcXVhbnRpemUtPmNvbG9yaW5kZXhbMl07CisgIGludCAqZGl0aGVyMDsgICAgICAgICAgICAgICAgIC8qIHBvaW50cyB0byBhY3RpdmUgcm93IG9mIGRpdGhlciBtYXRyaXggKi8KKyAgaW50ICpkaXRoZXIxOworICBpbnQgKmRpdGhlcjI7CisgIGludCByb3dfaW5kZXgsIGNvbF9pbmRleDsgICAgIC8qIGN1cnJlbnQgaW5kZXhlcyBpbnRvIGRpdGhlciBtYXRyaXggKi8KKyAgaW50IHJvdzsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gd2lkdGggPSBjaW5mby0+b3V0cHV0X3dpZHRoOworCisgIGZvciAocm93ID0gMDsgcm93IDwgbnVtX3Jvd3M7IHJvdysrKSB7CisgICAgcm93X2luZGV4ID0gY3F1YW50aXplLT5yb3dfaW5kZXg7CisgICAgaW5wdXRfcHRyID0gaW5wdXRfYnVmW3Jvd107CisgICAgb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbcm93XTsKKyAgICBkaXRoZXIwID0gY3F1YW50aXplLT5vZGl0aGVyWzBdW3Jvd19pbmRleF07CisgICAgZGl0aGVyMSA9IGNxdWFudGl6ZS0+b2RpdGhlclsxXVtyb3dfaW5kZXhdOworICAgIGRpdGhlcjIgPSBjcXVhbnRpemUtPm9kaXRoZXJbMl1bcm93X2luZGV4XTsKKyAgICBjb2xfaW5kZXggPSAwOworCisgICAgZm9yIChjb2wgPSB3aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIHBpeGNvZGUgID0KKyAgICAgICAgR0VUSlNBTVBMRShjb2xvcmluZGV4MFtHRVRKU0FNUExFKCppbnB1dF9wdHIrKykgKyBkaXRoZXIwW2NvbF9pbmRleF1dKTsKKyAgICAgIHBpeGNvZGUgKz0KKyAgICAgICAgR0VUSlNBTVBMRShjb2xvcmluZGV4MVtHRVRKU0FNUExFKCppbnB1dF9wdHIrKykgKyBkaXRoZXIxW2NvbF9pbmRleF1dKTsKKyAgICAgIHBpeGNvZGUgKz0KKyAgICAgICAgR0VUSlNBTVBMRShjb2xvcmluZGV4MltHRVRKU0FNUExFKCppbnB1dF9wdHIrKykgKyBkaXRoZXIyW2NvbF9pbmRleF1dKTsKKyAgICAgICpvdXRwdXRfcHRyKysgPSAoSlNBTVBMRSlwaXhjb2RlOworICAgICAgY29sX2luZGV4ID0gKGNvbF9pbmRleCArIDEpICYgT0RJVEhFUl9NQVNLOworICAgIH0KKyAgICByb3dfaW5kZXggPSAocm93X2luZGV4ICsgMSkgJiBPRElUSEVSX01BU0s7CisgICAgY3F1YW50aXplLT5yb3dfaW5kZXggPSByb3dfaW5kZXg7CisgIH0KK30KKworCitNRVRIT0RERUYodm9pZCkKK3F1YW50aXplX2ZzX2RpdGhlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKy8qIEdlbmVyYWwgY2FzZSwgd2l0aCBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nICovCit7CisgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpY2luZm8tPmNxdWFudGl6ZTsKKyAgcmVnaXN0ZXIgTE9DRlNFUlJPUiBjdXI7ICAgICAgLyogY3VycmVudCBlcnJvciBvciBwaXhlbCB2YWx1ZSAqLworICBMT0NGU0VSUk9SIGJlbG93ZXJyOyAgICAgICAgICAvKiBlcnJvciBmb3IgcGl4ZWwgYmVsb3cgY3VyICovCisgIExPQ0ZTRVJST1IgYnByZXZlcnI7ICAgICAgICAgIC8qIGVycm9yIGZvciBiZWxvdy9wcmV2IGNvbCAqLworICBMT0NGU0VSUk9SIGJuZXh0ZXJyOyAgICAgICAgICAvKiBlcnJvciBmb3IgYmVsb3cvbmV4dCBjb2wgKi8KKyAgTE9DRlNFUlJPUiBkZWx0YTsKKyAgcmVnaXN0ZXIgRlNFUlJQVFIgZXJyb3JwdHI7ICAgLyogPT4gZnNlcnJvcnNbXSBhdCBjb2x1bW4gYmVmb3JlIGN1cnJlbnQgKi8KKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdXRfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdXRfcHRyOworICBKU0FNUFJPVyBjb2xvcmluZGV4X2NpOworICBKU0FNUFJPVyBjb2xvcm1hcF9jaTsKKyAgaW50IHBpeGNvZGU7CisgIGludCBuYyA9IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsKKyAgaW50IGRpcjsgICAgICAgICAgICAgICAgICAgICAgLyogMSBmb3IgbGVmdC10by1yaWdodCwgLTEgZm9yIHJpZ2h0LXRvLWxlZnQgKi8KKyAgaW50IGRpcm5jOyAgICAgICAgICAgICAgICAgICAgLyogZGlyICogbmMgKi8KKyAgaW50IGNpOworICBpbnQgcm93OworICBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiB3aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsKKyAgU0hJRlRfVEVNUFMKKworICBmb3IgKHJvdyA9IDA7IHJvdyA8IG51bV9yb3dzOyByb3crKykgeworICAgIC8qIEluaXRpYWxpemUgb3V0cHV0IHZhbHVlcyB0byAwIHNvIGNhbiBwcm9jZXNzIGNvbXBvbmVudHMgc2VwYXJhdGVseSAqLworICAgIGp6ZXJvX2Zhcigodm9pZCAqKW91dHB1dF9idWZbcm93XSwgKHNpemVfdCkod2lkdGggKiBzaXplb2YoSlNBTVBMRSkpKTsKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBuYzsgY2krKykgeworICAgICAgaW5wdXRfcHRyID0gaW5wdXRfYnVmW3Jvd10gKyBjaTsKKyAgICAgIG91dHB1dF9wdHIgPSBvdXRwdXRfYnVmW3Jvd107CisgICAgICBpZiAoY3F1YW50aXplLT5vbl9vZGRfcm93KSB7CisgICAgICAgIC8qIHdvcmsgcmlnaHQgdG8gbGVmdCBpbiB0aGlzIHJvdyAqLworICAgICAgICBpbnB1dF9wdHIgKz0gKHdpZHRoIC0gMSkgKiBuYzsgLyogc28gcG9pbnQgdG8gcmlnaHRtb3N0IHBpeGVsICovCisgICAgICAgIG91dHB1dF9wdHIgKz0gd2lkdGggLSAxOworICAgICAgICBkaXIgPSAtMTsKKyAgICAgICAgZGlybmMgPSAtbmM7CisgICAgICAgIGVycm9ycHRyID0gY3F1YW50aXplLT5mc2Vycm9yc1tjaV0gKyAod2lkdGggKyAxKTsgLyogPT4gZW50cnkgYWZ0ZXIgbGFzdCBjb2x1bW4gKi8KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHdvcmsgbGVmdCB0byByaWdodCBpbiB0aGlzIHJvdyAqLworICAgICAgICBkaXIgPSAxOworICAgICAgICBkaXJuYyA9IG5jOworICAgICAgICBlcnJvcnB0ciA9IGNxdWFudGl6ZS0+ZnNlcnJvcnNbY2ldOyAvKiA9PiBlbnRyeSBiZWZvcmUgZmlyc3QgY29sdW1uICovCisgICAgICB9CisgICAgICBjb2xvcmluZGV4X2NpID0gY3F1YW50aXplLT5jb2xvcmluZGV4W2NpXTsKKyAgICAgIGNvbG9ybWFwX2NpID0gY3F1YW50aXplLT5zdl9jb2xvcm1hcFtjaV07CisgICAgICAvKiBQcmVzZXQgZXJyb3IgdmFsdWVzOiBubyBlcnJvciBwcm9wYWdhdGVkIHRvIGZpcnN0IHBpeGVsIGZyb20gbGVmdCAqLworICAgICAgY3VyID0gMDsKKyAgICAgIC8qIGFuZCBubyBlcnJvciBwcm9wYWdhdGVkIHRvIHJvdyBiZWxvdyB5ZXQgKi8KKyAgICAgIGJlbG93ZXJyID0gYnByZXZlcnIgPSAwOworCisgICAgICBmb3IgKGNvbCA9IHdpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICAvKiBjdXIgaG9sZHMgdGhlIGVycm9yIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcHJldmlvdXMgcGl4ZWwgb24gdGhlCisgICAgICAgICAqIGN1cnJlbnQgbGluZS4gIEFkZCB0aGUgZXJyb3IgcHJvcGFnYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lCisgICAgICAgICAqIHRvIGZvcm0gdGhlIGNvbXBsZXRlIGVycm9yIGNvcnJlY3Rpb24gdGVybSBmb3IgdGhpcyBwaXhlbCwgYW5kCisgICAgICAgICAqIHJvdW5kIHRoZSBlcnJvciB0ZXJtICh3aGljaCBpcyBleHByZXNzZWQgKiAxNikgdG8gYW4gaW50ZWdlci4KKyAgICAgICAgICogUklHSFRfU0hJRlQgcm91bmRzIHRvd2FyZHMgbWludXMgaW5maW5pdHksIHNvIGFkZGluZyA4IGlzIGNvcnJlY3QKKyAgICAgICAgICogZm9yIGVpdGhlciBzaWduIG9mIHRoZSBlcnJvciB2YWx1ZS4KKyAgICAgICAgICogTm90ZTogZXJyb3JwdHIgcG9pbnRzIHRvICpwcmV2aW91cyogY29sdW1uJ3MgYXJyYXkgZW50cnkuCisgICAgICAgICAqLworICAgICAgICBjdXIgPSBSSUdIVF9TSElGVChjdXIgKyBlcnJvcnB0cltkaXJdICsgOCwgNCk7CisgICAgICAgIC8qIEZvcm0gcGl4ZWwgdmFsdWUgKyBlcnJvciwgYW5kIHJhbmdlLWxpbWl0IHRvIDAuLk1BWEpTQU1QTEUuCisgICAgICAgICAqIFRoZSBtYXhpbXVtIGVycm9yIGlzICstIE1BWEpTQU1QTEU7IHRoaXMgc2V0cyB0aGUgcmVxdWlyZWQgc2l6ZQorICAgICAgICAgKiBvZiB0aGUgcmFuZ2VfbGltaXQgYXJyYXkuCisgICAgICAgICAqLworICAgICAgICBjdXIgKz0gR0VUSlNBTVBMRSgqaW5wdXRfcHRyKTsKKyAgICAgICAgY3VyID0gR0VUSlNBTVBMRShyYW5nZV9saW1pdFtjdXJdKTsKKyAgICAgICAgLyogU2VsZWN0IG91dHB1dCB2YWx1ZSwgYWNjdW11bGF0ZSBpbnRvIG91dHB1dCBjb2RlIGZvciB0aGlzIHBpeGVsICovCisgICAgICAgIHBpeGNvZGUgPSBHRVRKU0FNUExFKGNvbG9yaW5kZXhfY2lbY3VyXSk7CisgICAgICAgICpvdXRwdXRfcHRyICs9IChKU0FNUExFKXBpeGNvZGU7CisgICAgICAgIC8qIENvbXB1dGUgYWN0dWFsIHJlcHJlc2VudGF0aW9uIGVycm9yIGF0IHRoaXMgcGl4ZWwgKi8KKyAgICAgICAgLyogTm90ZTogd2UgY2FuIGRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgaGF2ZSB0aGUgZmluYWwgKi8KKyAgICAgICAgLyogcGl4ZWwgY29kZSwgYmVjYXVzZSB0aGUgY29sb3JtYXAgaXMgb3J0aG9nb25hbC4gKi8KKyAgICAgICAgY3VyIC09IEdFVEpTQU1QTEUoY29sb3JtYXBfY2lbcGl4Y29kZV0pOworICAgICAgICAvKiBDb21wdXRlIGVycm9yIGZyYWN0aW9ucyB0byBiZSBwcm9wYWdhdGVkIHRvIGFkamFjZW50IHBpeGVscy4KKyAgICAgICAgICogQWRkIHRoZXNlIGludG8gdGhlIHJ1bm5pbmcgc3VtcywgYW5kIHNpbXVsdGFuZW91c2x5IHNoaWZ0IHRoZQorICAgICAgICAgKiBuZXh0LWxpbmUgZXJyb3Igc3VtcyBsZWZ0IGJ5IDEgY29sdW1uLgorICAgICAgICAgKi8KKyAgICAgICAgYm5leHRlcnIgPSBjdXI7CisgICAgICAgIGRlbHRhID0gY3VyICogMjsKKyAgICAgICAgY3VyICs9IGRlbHRhOyAgICAgICAgICAgLyogZm9ybSBlcnJvciAqIDMgKi8KKyAgICAgICAgZXJyb3JwdHJbMF0gPSAoRlNFUlJPUikoYnByZXZlcnIgKyBjdXIpOworICAgICAgICBjdXIgKz0gZGVsdGE7ICAgICAgICAgICAvKiBmb3JtIGVycm9yICogNSAqLworICAgICAgICBicHJldmVyciA9IGJlbG93ZXJyICsgY3VyOworICAgICAgICBiZWxvd2VyciA9IGJuZXh0ZXJyOworICAgICAgICBjdXIgKz0gZGVsdGE7ICAgICAgICAgICAvKiBmb3JtIGVycm9yICogNyAqLworICAgICAgICAvKiBBdCB0aGlzIHBvaW50IGN1ciBjb250YWlucyB0aGUgNy8xNiBlcnJvciB2YWx1ZSB0byBiZSBwcm9wYWdhdGVkCisgICAgICAgICAqIHRvIHRoZSBuZXh0IHBpeGVsIG9uIHRoZSBjdXJyZW50IGxpbmUsIGFuZCBhbGwgdGhlIGVycm9ycyBmb3IgdGhlCisgICAgICAgICAqIG5leHQgbGluZSBoYXZlIGJlZW4gc2hpZnRlZCBvdmVyLiBXZSBhcmUgdGhlcmVmb3JlIHJlYWR5IHRvIG1vdmUgb24uCisgICAgICAgICAqLworICAgICAgICBpbnB1dF9wdHIgKz0gZGlybmM7ICAgICAvKiBhZHZhbmNlIGlucHV0IHB0ciB0byBuZXh0IGNvbHVtbiAqLworICAgICAgICBvdXRwdXRfcHRyICs9IGRpcjsgICAgICAvKiBhZHZhbmNlIG91dHB1dCBwdHIgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICAgICAgZXJyb3JwdHIgKz0gZGlyOyAgICAgICAgLyogYWR2YW5jZSBlcnJvcnB0ciB0byBjdXJyZW50IGNvbHVtbiAqLworICAgICAgfQorICAgICAgLyogUG9zdC1sb29wIGNsZWFudXA6IHdlIG11c3QgdW5sb2FkIHRoZSBmaW5hbCBlcnJvciB2YWx1ZSBpbnRvIHRoZQorICAgICAgICogZmluYWwgZnNlcnJvcnNbXSBlbnRyeS4gIE5vdGUgd2UgbmVlZCBub3QgdW5sb2FkIGJlbG93ZXJyIGJlY2F1c2UKKyAgICAgICAqIGl0IGlzIGZvciB0aGUgZHVtbXkgY29sdW1uIGJlZm9yZSBvciBhZnRlciB0aGUgYWN0dWFsIGFycmF5LgorICAgICAgICovCisgICAgICBlcnJvcnB0clswXSA9IChGU0VSUk9SKWJwcmV2ZXJyOyAvKiB1bmxvYWQgcHJldiBlcnIgaW50byBhcnJheSAqLworICAgIH0KKyAgICBjcXVhbnRpemUtPm9uX29kZF9yb3cgPSAoY3F1YW50aXplLT5vbl9vZGRfcm93ID8gRkFMU0UgOiBUUlVFKTsKKyAgfQorfQorCisKKy8qCisgKiBBbGxvY2F0ZSB3b3Jrc3BhY2UgZm9yIEZsb3lkLVN0ZWluYmVyZyBlcnJvcnMuCisgKi8KKworTE9DQUwodm9pZCkKK2FsbG9jX2ZzX3dvcmtzcGFjZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIHNpemVfdCBhcnJheXNpemU7CisgIGludCBpOworCisgIGFycmF5c2l6ZSA9IChzaXplX3QpKChjaW5mby0+b3V0cHV0X3dpZHRoICsgMikgKiBzaXplb2YoRlNFUlJPUikpOworICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOyBpKyspIHsKKyAgICBjcXVhbnRpemUtPmZzZXJyb3JzW2ldID0gKEZTRVJSUFRSKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBhcnJheXNpemUpOworICB9Cit9CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIG9uZS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfMV9xdWFudChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzX3ByZV9zY2FuKQoreworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIHNpemVfdCBhcnJheXNpemU7CisgIGludCBpOworCisgIC8qIEluc3RhbGwgbXkgY29sb3JtYXAuICovCisgIGNpbmZvLT5jb2xvcm1hcCA9IGNxdWFudGl6ZS0+c3ZfY29sb3JtYXA7CisgIGNpbmZvLT5hY3R1YWxfbnVtYmVyX29mX2NvbG9ycyA9IGNxdWFudGl6ZS0+c3ZfYWN0dWFsOworCisgIC8qIEluaXRpYWxpemUgZm9yIGRlc2lyZWQgZGl0aGVyaW5nIG1vZGUuICovCisgIHN3aXRjaCAoY2luZm8tPmRpdGhlcl9tb2RlKSB7CisgIGNhc2UgSkRJVEhFUl9OT05FOgorICAgIGlmIChjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPT0gMykKKyAgICAgIGNxdWFudGl6ZS0+cHViLmNvbG9yX3F1YW50aXplID0gY29sb3JfcXVhbnRpemUzOworICAgIGVsc2UKKyAgICAgIGNxdWFudGl6ZS0+cHViLmNvbG9yX3F1YW50aXplID0gY29sb3JfcXVhbnRpemU7CisgICAgYnJlYWs7CisgIGNhc2UgSkRJVEhFUl9PUkRFUkVEOgorICAgIGlmIChjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPT0gMykKKyAgICAgIGNxdWFudGl6ZS0+cHViLmNvbG9yX3F1YW50aXplID0gcXVhbnRpemUzX29yZF9kaXRoZXI7CisgICAgZWxzZQorICAgICAgY3F1YW50aXplLT5wdWIuY29sb3JfcXVhbnRpemUgPSBxdWFudGl6ZV9vcmRfZGl0aGVyOworICAgIGNxdWFudGl6ZS0+cm93X2luZGV4ID0gMDsgICAvKiBpbml0aWFsaXplIHN0YXRlIGZvciBvcmRlcmVkIGRpdGhlciAqLworICAgIC8qIElmIHVzZXIgY2hhbmdlZCB0byBvcmRlcmVkIGRpdGhlciBmcm9tIGFub3RoZXIgbW9kZSwKKyAgICAgKiB3ZSBtdXN0IHJlY3JlYXRlIHRoZSBjb2xvciBpbmRleCB0YWJsZSB3aXRoIHBhZGRpbmcuCisgICAgICogVGhpcyB3aWxsIGNvc3QgZXh0cmEgc3BhY2UsIGJ1dCBwcm9iYWJseSBpc24ndCB2ZXJ5IGxpa2VseS4KKyAgICAgKi8KKyAgICBpZiAoIWNxdWFudGl6ZS0+aXNfcGFkZGVkKQorICAgICAgY3JlYXRlX2NvbG9yaW5kZXgoY2luZm8pOworICAgIC8qIENyZWF0ZSBvcmRlcmVkLWRpdGhlciB0YWJsZXMgaWYgd2UgZGlkbid0IGFscmVhZHkuICovCisgICAgaWYgKGNxdWFudGl6ZS0+b2RpdGhlclswXSA9PSBOVUxMKQorICAgICAgY3JlYXRlX29kaXRoZXJfdGFibGVzKGNpbmZvKTsKKyAgICBicmVhazsKKyAgY2FzZSBKRElUSEVSX0ZTOgorICAgIGNxdWFudGl6ZS0+cHViLmNvbG9yX3F1YW50aXplID0gcXVhbnRpemVfZnNfZGl0aGVyOworICAgIGNxdWFudGl6ZS0+b25fb2RkX3JvdyA9IEZBTFNFOyAvKiBpbml0aWFsaXplIHN0YXRlIGZvciBGLVMgZGl0aGVyICovCisgICAgLyogQWxsb2NhdGUgRmxveWQtU3RlaW5iZXJnIHdvcmtzcGFjZSBpZiBkaWRuJ3QgYWxyZWFkeS4gKi8KKyAgICBpZiAoY3F1YW50aXplLT5mc2Vycm9yc1swXSA9PSBOVUxMKQorICAgICAgYWxsb2NfZnNfd29ya3NwYWNlKGNpbmZvKTsKKyAgICAvKiBJbml0aWFsaXplIHRoZSBwcm9wYWdhdGVkIGVycm9ycyB0byB6ZXJvLiAqLworICAgIGFycmF5c2l6ZSA9IChzaXplX3QpKChjaW5mby0+b3V0cHV0X3dpZHRoICsgMikgKiBzaXplb2YoRlNFUlJPUikpOworICAgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7IGkrKykKKyAgICAgIGp6ZXJvX2Zhcigodm9pZCAqKWNxdWFudGl6ZS0+ZnNlcnJvcnNbaV0sIGFycmF5c2l6ZSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworICAgIGJyZWFrOworICB9Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX3Bhc3NfMV9xdWFudChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBubyB3b3JrIGluIDEtcGFzcyBjYXNlICovCit9CisKKworLyoKKyAqIFN3aXRjaCB0byBhIG5ldyBleHRlcm5hbCBjb2xvcm1hcCBiZXR3ZWVuIG91dHB1dCBwYXNzZXMuCisgKiBTaG91bGRuJ3QgZ2V0IHRvIHRoaXMgbW9kdWxlIQorICovCisKK01FVEhPRERFRih2b2lkKQorbmV3X2NvbG9yX21hcF8xX3F1YW50KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIEVSUkVYSVQoY2luZm8sIEpFUlJfTU9ERV9DSEFOR0UpOworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgMS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbi4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0XzFwYXNzX3F1YW50aXplcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZTsKKworICBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9jcXVhbnRpemVyKSk7CisgIGNpbmZvLT5jcXVhbnRpemUgPSAoc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyICopY3F1YW50aXplOworICBjcXVhbnRpemUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc18xX3F1YW50OworICBjcXVhbnRpemUtPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzXzFfcXVhbnQ7CisgIGNxdWFudGl6ZS0+cHViLm5ld19jb2xvcl9tYXAgPSBuZXdfY29sb3JfbWFwXzFfcXVhbnQ7CisgIGNxdWFudGl6ZS0+ZnNlcnJvcnNbMF0gPSBOVUxMOyAvKiBGbGFnIEZTIHdvcmtzcGFjZSBub3QgYWxsb2NhdGVkICovCisgIGNxdWFudGl6ZS0+b2RpdGhlclswXSA9IE5VTEw7IC8qIEFsc28gZmxhZyBvZGl0aGVyIGFycmF5cyBub3QgYWxsb2NhdGVkICovCisKKyAgLyogTWFrZSBzdXJlIG15IGludGVybmFsIGFycmF5cyB3b24ndCBvdmVyZmxvdyAqLworICBpZiAoY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID4gTUFYX1FfQ09NUFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfUVVBTlRfQ09NUE9ORU5UUywgTUFYX1FfQ09NUFMpOworICAvKiBNYWtlIHN1cmUgY29sb3JtYXAgaW5kZXhlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgSlNBTVBMRXMgKi8KKyAgaWYgKGNpbmZvLT5kZXNpcmVkX251bWJlcl9vZl9jb2xvcnMgPiAoTUFYSlNBTVBMRSArIDEpKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1FVQU5UX01BTllfQ09MT1JTLCBNQVhKU0FNUExFICsgMSk7CisKKyAgLyogQ3JlYXRlIHRoZSBjb2xvcm1hcCBhbmQgY29sb3IgaW5kZXggdGFibGUuICovCisgIGNyZWF0ZV9jb2xvcm1hcChjaW5mbyk7CisgIGNyZWF0ZV9jb2xvcmluZGV4KGNpbmZvKTsKKworICAvKiBBbGxvY2F0ZSBGbG95ZC1TdGVpbmJlcmcgd29ya3NwYWNlIG5vdyBpZiByZXF1ZXN0ZWQuCisgICAqIFdlIGRvIHRoaXMgbm93IHNpbmNlIGl0IG1heSBhZmZlY3QgdGhlIG1lbW9yeSBtYW5hZ2VyJ3Mgc3BhY2UKKyAgICogY2FsY3VsYXRpb25zLiAgSWYgdGhlIHVzZXIgY2hhbmdlcyB0byBGUyBkaXRoZXIgbW9kZSBpbiBhIGxhdGVyIHBhc3MsIHdlCisgICAqIHdpbGwgYWxsb2NhdGUgdGhlIHNwYWNlIHRoZW4sIGFuZCB3aWxsIHBvc3NpYmx5IG92ZXJydW4gdGhlCisgICAqIG1heF9tZW1vcnlfdG9fdXNlIHNldHRpbmcuCisgICAqLworICBpZiAoY2luZm8tPmRpdGhlcl9tb2RlID09IEpESVRIRVJfRlMpCisgICAgYWxsb2NfZnNfd29ya3NwYWNlKGNpbmZvKTsKK30KKworI2VuZGlmIC8qIFFVQU5UXzFQQVNTX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanF1YW50Mi5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanF1YW50Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZTBjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qcXVhbnQyLmMKQEAgLTAsMCArMSwxMjg1IEBACisvKgorICoganF1YW50Mi5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIDItcGFzcyBjb2xvciBxdWFudGl6YXRpb24gKGNvbG9yIG1hcHBpbmcpIHJvdXRpbmVzLgorICogVGhlc2Ugcm91dGluZXMgcHJvdmlkZSBzZWxlY3Rpb24gb2YgYSBjdXN0b20gY29sb3IgbWFwIGZvciBhbiBpbWFnZSwKKyAqIGZvbGxvd2VkIGJ5IG1hcHBpbmcgb2YgdGhlIGltYWdlIHRvIHRoYXQgY29sb3IgbWFwLCB3aXRoIG9wdGlvbmFsCisgKiBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nLgorICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UganVzdCB0aGUgc2Vjb25kIHBhc3MgdG8gbWFwIHRvIGFuIGFyYml0cmFyeQorICogZXh0ZXJuYWxseS1naXZlbiBjb2xvciBtYXAuCisgKgorICogTm90ZTogb3JkZXJlZCBkaXRoZXJpbmcgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgdGhlcmUgaXNuJ3QgYW55IGZhc3QKKyAqIHdheSB0byBjb21wdXRlIGludGVyY29sb3IgZGlzdGFuY2VzOyBpdCdzIHVuY2xlYXIgdGhhdCBvcmRlcmVkIGRpdGhlcidzCisgKiBmdW5kYW1lbnRhbCBhc3N1bXB0aW9ucyBldmVuIGhvbGQgd2l0aCBhbiBpcnJlZ3VsYXJseSBzcGFjZWQgY29sb3IgbWFwLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSB3ZWxsLWtub3duIEhlY2tiZXJ0IHBhcmFkaWdtIGZvciBjb2xvcgorICogcXVhbnRpemF0aW9uLiAgTW9zdCBvZiB0aGUgaWRlYXMgdXNlZCBoZXJlIGNhbiBiZSB0cmFjZWQgYmFjayB0bworICogSGVja2JlcnQncyBzZW1pbmFsIHBhcGVyCisgKiAgIEhlY2tiZXJ0LCBQYXVsLiAgIkNvbG9yIEltYWdlIFF1YW50aXphdGlvbiBmb3IgRnJhbWUgQnVmZmVyIERpc3BsYXkiLAorICogICBQcm9jLiBTSUdHUkFQSCAnODIsIENvbXB1dGVyIEdyYXBoaWNzIHYuMTYgIzMgKEp1bHkgMTk4MiksIHBwIDI5Ny0zMDQuCisgKgorICogSW4gdGhlIGZpcnN0IHBhc3Mgb3ZlciB0aGUgaW1hZ2UsIHdlIGFjY3VtdWxhdGUgYSBoaXN0b2dyYW0gc2hvd2luZyB0aGUKKyAqIHVzYWdlIGNvdW50IG9mIGVhY2ggcG9zc2libGUgY29sb3IuICBUbyBrZWVwIHRoZSBoaXN0b2dyYW0gdG8gYSByZWFzb25hYmxlCisgKiBzaXplLCB3ZSByZWR1Y2UgdGhlIHByZWNpc2lvbiBvZiB0aGUgaW5wdXQ7IHR5cGljYWwgcHJhY3RpY2UgaXMgdG8gcmV0YWluCisgKiA1IG9yIDYgYml0cyBwZXIgY29sb3IsIHNvIHRoYXQgOCBvciA0IGRpZmZlcmVudCBpbnB1dCB2YWx1ZXMgYXJlIGNvdW50ZWQKKyAqIGluIHRoZSBzYW1lIGhpc3RvZ3JhbSBjZWxsLgorICoKKyAqIE5leHQsIHRoZSBjb2xvci1zZWxlY3Rpb24gc3RlcCBiZWdpbnMgd2l0aCBhIGJveCByZXByZXNlbnRpbmcgdGhlIHdob2xlCisgKiBjb2xvciBzcGFjZSwgYW5kIHJlcGVhdGVkbHkgc3BsaXRzIHRoZSAibGFyZ2VzdCIgcmVtYWluaW5nIGJveCB1bnRpbCB3ZQorICogaGF2ZSBhcyBtYW55IGJveGVzIGFzIGRlc2lyZWQgY29sb3JzLiAgVGhlbiB0aGUgbWVhbiBjb2xvciBpbiBlYWNoCisgKiByZW1haW5pbmcgYm94IGJlY29tZXMgb25lIG9mIHRoZSBwb3NzaWJsZSBvdXRwdXQgY29sb3JzLgorICoKKyAqIFRoZSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBpbWFnZSBtYXBzIGVhY2ggaW5wdXQgcGl4ZWwgdG8gdGhlIGNsb3Nlc3Qgb3V0cHV0CisgKiBjb2xvciAob3B0aW9uYWxseSBhZnRlciBhcHBseWluZyBhIEZsb3lkLVN0ZWluYmVyZyBkaXRoZXJpbmcgY29ycmVjdGlvbikuCisgKiBUaGlzIG1hcHBpbmcgaXMgbG9naWNhbGx5IHRyaXZpYWwsIGJ1dCBtYWtpbmcgaXQgZ28gZmFzdCBlbm91Z2ggcmVxdWlyZXMKKyAqIGNvbnNpZGVyYWJsZSBjYXJlLgorICoKKyAqIEhlY2tiZXJ0LXN0eWxlIHF1YW50aXplcnMgdmFyeSBhIGdvb2QgZGVhbCBpbiB0aGVpciBwb2xpY2llcyBmb3IgY2hvb3NpbmcKKyAqIHRoZSAibGFyZ2VzdCIgYm94IGFuZCBkZWNpZGluZyB3aGVyZSB0byBjdXQgaXQuICBUaGUgcGFydGljdWxhciBwb2xpY2llcworICogdXNlZCBoZXJlIGhhdmUgcHJvdmVkIG91dCB3ZWxsIGluIGV4cGVyaW1lbnRhbCBjb21wYXJpc29ucywgYnV0IGJldHRlciBvbmVzCisgKiBtYXkgeWV0IGJlIGZvdW5kLgorICoKKyAqIEluIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIElKRyBjb2RlLCB0aGlzIG1vZHVsZSBxdWFudGl6ZWQgaW4gWUNiQ3IgY29sb3IKKyAqIHNwYWNlLCBwcm9jZXNzaW5nIHRoZSByYXcgdXBzYW1wbGVkIGRhdGEgd2l0aG91dCBhIGNvbG9yIGNvbnZlcnNpb24gc3RlcC4KKyAqIFRoaXMgYWxsb3dlZCB0aGUgY29sb3IgY29udmVyc2lvbiBtYXRoIHRvIGJlIGRvbmUgb25seSBvbmNlIHBlciBjb2xvcm1hcAorICogZW50cnksIG5vdCBvbmNlIHBlciBwaXhlbC4gIEhvd2V2ZXIsIHRoYXQgb3B0aW1pemF0aW9uIHByZWNsdWRlZCBvdGhlcgorICogdXNlZnVsIG9wdGltaXphdGlvbnMgKHN1Y2ggYXMgbWVyZ2luZyBjb2xvciBjb252ZXJzaW9uIHdpdGggdXBzYW1wbGluZykKKyAqIGFuZCBpdCBhbHNvIGludGVyZmVyZWQgd2l0aCBkZXNpcmVkIGNhcGFiaWxpdGllcyBzdWNoIGFzIHF1YW50aXppbmcgdG8gYW4KKyAqIGV4dGVybmFsbHktc3VwcGxpZWQgY29sb3JtYXAuICBXZSBoYXZlIHRoZXJlZm9yZSBhYmFuZG9uZWQgdGhhdCBhcHByb2FjaC4KKyAqIFRoZSBwcmVzZW50IGNvZGUgd29ya3MgaW4gdGhlIHBvc3QtY29udmVyc2lvbiBjb2xvciBzcGFjZSwgdHlwaWNhbGx5IFJHQi4KKyAqCisgKiBUbyBpbXByb3ZlIHRoZSB2aXN1YWwgcXVhbGl0eSBvZiB0aGUgcmVzdWx0cywgd2UgYWN0dWFsbHkgd29yayBpbiBzY2FsZWQKKyAqIFJHQiBzcGFjZSwgZ2l2aW5nIEcgZGlzdGFuY2VzIG1vcmUgd2VpZ2h0IHRoYW4gUiwgYW5kIFIgaW4gdHVybiBtb3JlIHRoYW4KKyAqIEIuICBUbyBkbyBldmVyeXRoaW5nIGluIGludGVnZXIgbWF0aCwgd2UgbXVzdCB1c2UgaW50ZWdlciBzY2FsZSBmYWN0b3JzLgorICogVGhlIDIvMy8xIHNjYWxlIGZhY3RvcnMgdXNlZCBoZXJlIGNvcnJlc3BvbmQgbG9vc2VseSB0byB0aGUgcmVsYXRpdmUKKyAqIHdlaWdodHMgb2YgdGhlIGNvbG9ycyBpbiB0aGUgTlRTQyBncmF5c2NhbGUgZXF1YXRpb24uCisgKiBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb2RlIHRvIHF1YW50aXplIGEgbm9uLVJHQiBjb2xvciBzcGFjZSwgeW91J2xsCisgKiBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZSB0aGVzZSBzY2FsZSBmYWN0b3JzLgorICovCisKKyNkZWZpbmUgUl9TQ0FMRSAgMiAgICAgICAgICAgICAgLyogc2NhbGUgUiBkaXN0YW5jZXMgYnkgdGhpcyBtdWNoICovCisjZGVmaW5lIEdfU0NBTEUgIDMgICAgICAgICAgICAgIC8qIHNjYWxlIEcgZGlzdGFuY2VzIGJ5IHRoaXMgbXVjaCAqLworI2RlZmluZSBCX1NDQUxFICAxICAgICAgICAgICAgICAvKiBhbmQgQiBieSB0aGlzIG11Y2ggKi8KKworc3RhdGljIGNvbnN0IGludCBjX3NjYWxlc1szXSA9IHsgUl9TQ0FMRSwgR19TQ0FMRSwgQl9TQ0FMRSB9OworI2RlZmluZSBDMF9TQ0FMRSAgY19zY2FsZXNbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0KKyNkZWZpbmUgQzFfU0NBTEUgIGNfc2NhbGVzW3JnYl9ncmVlbltjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0KKyNkZWZpbmUgQzJfU0NBTEUgIGNfc2NhbGVzW3JnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXQorCisvKgorICogRmlyc3Qgd2UgaGF2ZSB0aGUgaGlzdG9ncmFtIGRhdGEgc3RydWN0dXJlIGFuZCByb3V0aW5lcyBmb3IgY3JlYXRpbmcgaXQuCisgKgorICogVGhlIG51bWJlciBvZiBiaXRzIG9mIHByZWNpc2lvbiBjYW4gYmUgYWRqdXN0ZWQgYnkgY2hhbmdpbmcgdGhlc2Ugc3ltYm9scy4KKyAqIFdlIHJlY29tbWVuZCBrZWVwaW5nIDYgYml0cyBmb3IgRyBhbmQgNSBlYWNoIGZvciBSIGFuZCBCLgorICogSWYgeW91IGhhdmUgcGxlbnR5IG9mIG1lbW9yeSBhbmQgY3ljbGVzLCA2IGJpdHMgYWxsIGFyb3VuZCBnaXZlcyBtYXJnaW5hbGx5CisgKiBiZXR0ZXIgcmVzdWx0czsgaWYgeW91IGFyZSBzaG9ydCBvZiBtZW1vcnksIDUgYml0cyBhbGwgYXJvdW5kIHdpbGwgc2F2ZQorICogc29tZSBzcGFjZSBidXQgZGVncmFkZSB0aGUgcmVzdWx0cy4KKyAqIFRvIG1haW50YWluIGEgZnVsbHkgYWNjdXJhdGUgaGlzdG9ncmFtLCB3ZSdkIG5lZWQgdG8gYWxsb2NhdGUgYSAibG9uZyIKKyAqIChwcmVmZXJhYmx5IHVuc2lnbmVkIGxvbmcpIGZvciBlYWNoIGNlbGwuICBJbiBwcmFjdGljZSB0aGlzIGlzIG92ZXJraWxsOworICogd2UgY2FuIGdldCBieSB3aXRoIDE2IGJpdHMgcGVyIGNlbGwuICBGZXcgb2YgdGhlIGNlbGwgY291bnRzIHdpbGwgb3ZlcmZsb3csCisgKiBhbmQgY2xhbXBpbmcgdGhvc2UgdGhhdCBkbyBvdmVyZmxvdyB0byB0aGUgbWF4aW11bSB2YWx1ZSB3aWxsIGdpdmUgY2xvc2UtCisgKiBlbm91Z2ggcmVzdWx0cy4gIFRoaXMgcmVkdWNlcyB0aGUgcmVjb21tZW5kZWQgaGlzdG9ncmFtIHNpemUgZnJvbSAyNTZLYgorICogdG8gMTI4S2IsIHdoaWNoIGlzIGEgdXNlZnVsIHNhdmluZ3Mgb24gUEMtY2xhc3MgbWFjaGluZXMuCisgKiAoSW4gdGhlIHNlY29uZCBwYXNzIHRoZSBoaXN0b2dyYW0gc3BhY2UgaXMgcmUtdXNlZCBmb3IgcGl4ZWwgbWFwcGluZyBkYXRhOworICogaW4gdGhhdCBjYXBhY2l0eSwgZWFjaCBjZWxsIG11c3QgYmUgYWJsZSB0byBzdG9yZSB6ZXJvIHRvIHRoZSBudW1iZXIgb2YKKyAqIGRlc2lyZWQgY29sb3JzLiAgMTYgYml0cy9jZWxsIGlzIHBsZW50eSBmb3IgdGhhdCB0b28uKQorICogU2luY2UgdGhlIEpQRUcgY29kZSBpcyBpbnRlbmRlZCB0byBydW4gaW4gc21hbGwgbWVtb3J5IG1vZGVsIG9uIDgweDg2CisgKiBtYWNoaW5lcywgd2UgY2FuJ3QganVzdCBhbGxvY2F0ZSB0aGUgaGlzdG9ncmFtIGluIG9uZSBjaHVuay4gIEluc3RlYWQKKyAqIG9mIGEgdHJ1ZSAzLUQgYXJyYXksIHdlIHVzZSBhIHJvdyBvZiBwb2ludGVycyB0byAyLUQgYXJyYXlzLiAgRWFjaAorICogcG9pbnRlciBjb3JyZXNwb25kcyB0byBhIEMwIHZhbHVlICh0eXBpY2FsbHkgMl41ID0gMzIgcG9pbnRlcnMpIGFuZAorICogZWFjaCAyLUQgYXJyYXkgaGFzIDJeNioyXjUgPSAyMDQ4IG9yIDJeNioyXjYgPSA0MDk2IGVudHJpZXMuCisgKi8KKworI2RlZmluZSBNQVhOVU1DT0xPUlMgIChNQVhKU0FNUExFICsgMSkgLyogbWF4aW11bSBzaXplIG9mIGNvbG9ybWFwICovCisKKy8qIFRoZXNlIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBlaXRoZXIgUixHLEIgb3IgQixHLFIgY29sb3Igb3JkZXIsCisgKiBidXQgeW91IG1heSBub3QgbGlrZSB0aGUgcmVzdWx0cyBmb3Igb3RoZXIgY29sb3Igb3JkZXJzLgorICovCisjZGVmaW5lIEhJU1RfQzBfQklUUyAgNSAgICAgICAgIC8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIFIvQiBoaXN0b2dyYW0gKi8KKyNkZWZpbmUgSElTVF9DMV9CSVRTICA2ICAgICAgICAgLyogYml0cyBvZiBwcmVjaXNpb24gaW4gRyBoaXN0b2dyYW0gKi8KKyNkZWZpbmUgSElTVF9DMl9CSVRTICA1ICAgICAgICAgLyogYml0cyBvZiBwcmVjaXNpb24gaW4gQi9SIGhpc3RvZ3JhbSAqLworCisvKiBOdW1iZXIgb2YgZWxlbWVudHMgYWxvbmcgaGlzdG9ncmFtIGF4ZXMuICovCisjZGVmaW5lIEhJU1RfQzBfRUxFTVMgICgxIDw8IEhJU1RfQzBfQklUUykKKyNkZWZpbmUgSElTVF9DMV9FTEVNUyAgKDEgPDwgSElTVF9DMV9CSVRTKQorI2RlZmluZSBISVNUX0MyX0VMRU1TICAoMSA8PCBISVNUX0MyX0JJVFMpCisKKy8qIFRoZXNlIGFyZSB0aGUgYW1vdW50cyB0byBzaGlmdCBhbiBpbnB1dCB2YWx1ZSB0byBnZXQgYSBoaXN0b2dyYW0gaW5kZXguICovCisjZGVmaW5lIEMwX1NISUZUICAoQklUU19JTl9KU0FNUExFIC0gSElTVF9DMF9CSVRTKQorI2RlZmluZSBDMV9TSElGVCAgKEJJVFNfSU5fSlNBTVBMRSAtIEhJU1RfQzFfQklUUykKKyNkZWZpbmUgQzJfU0hJRlQgIChCSVRTX0lOX0pTQU1QTEUgLSBISVNUX0MyX0JJVFMpCisKKwordHlwZWRlZiBVSU5UMTYgaGlzdGNlbGw7ICAgICAgICAvKiBoaXN0b2dyYW0gY2VsbDsgcHJlZmVyIGFuIHVuc2lnbmVkIHR5cGUgKi8KKwordHlwZWRlZiBoaXN0Y2VsbCAqaGlzdHB0cjsgICAgICAvKiBmb3IgcG9pbnRlcnMgdG8gaGlzdG9ncmFtIGNlbGxzICovCisKK3R5cGVkZWYgaGlzdGNlbGwgaGlzdDFkW0hJU1RfQzJfRUxFTVNdOyAvKiB0eXBlZGVmcyBmb3IgdGhlIGFycmF5ICovCit0eXBlZGVmIGhpc3QxZCAqaGlzdDJkOyAgICAgICAgIC8qIHR5cGUgZm9yIHRoZSAybmQtbGV2ZWwgcG9pbnRlcnMgKi8KK3R5cGVkZWYgaGlzdDJkICpoaXN0M2Q7ICAgICAgICAgLyogdHlwZSBmb3IgdG9wLWxldmVsIHBvaW50ZXIgKi8KKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIEZsb3lkLVN0ZWluYmVyZyBkaXRoZXJpbmcuCisgKgorICogRXJyb3JzIGFyZSBhY2N1bXVsYXRlZCBpbnRvIHRoZSBhcnJheSBmc2Vycm9yc1tdLCBhdCBhIHJlc29sdXRpb24gb2YKKyAqIDEvMTZ0aCBvZiBhIHBpeGVsIGNvdW50LiAgVGhlIGVycm9yIGF0IGEgZ2l2ZW4gcGl4ZWwgaXMgcHJvcGFnYXRlZAorICogdG8gaXRzIG5vdC15ZXQtcHJvY2Vzc2VkIG5laWdoYm9ycyB1c2luZyB0aGUgc3RhbmRhcmQgRi1TIGZyYWN0aW9ucywKKyAqICAgICAgICAgICAgICAuLi4gICAgIChoZXJlKSAgNy8xNgorICogICAgICAgICAgICAgIDMvMTYgICAgNS8xNiAgICAxLzE2CisgKiBXZSB3b3JrIGxlZnQtdG8tcmlnaHQgb24gZXZlbiByb3dzLCByaWdodC10by1sZWZ0IG9uIG9kZCByb3dzLgorICoKKyAqIFdlIGNhbiBnZXQgYXdheSB3aXRoIGEgc2luZ2xlIGFycmF5IChob2xkaW5nIG9uZSByb3cncyB3b3J0aCBvZiBlcnJvcnMpCisgKiBieSB1c2luZyBpdCB0byBzdG9yZSB0aGUgY3VycmVudCByb3cncyBlcnJvcnMgYXQgcGl4ZWwgY29sdW1ucyBub3QgeWV0CisgKiBwcm9jZXNzZWQsIGJ1dCB0aGUgbmV4dCByb3cncyBlcnJvcnMgYXQgY29sdW1ucyBhbHJlYWR5IHByb2Nlc3NlZC4gIFdlCisgKiBuZWVkIG9ubHkgYSBmZXcgZXh0cmEgdmFyaWFibGVzIHRvIGhvbGQgdGhlIGVycm9ycyBpbW1lZGlhdGVseSBhcm91bmQgdGhlCisgKiBjdXJyZW50IGNvbHVtbi4gIChJZiB3ZSBhcmUgbHVja3ksIHRob3NlIHZhcmlhYmxlcyBhcmUgaW4gcmVnaXN0ZXJzLCBidXQKKyAqIGV2ZW4gaWYgbm90LCB0aGV5J3JlIHByb2JhYmx5IGNoZWFwZXIgdG8gYWNjZXNzIHRoYW4gYXJyYXkgZWxlbWVudHMgYXJlLikKKyAqCisgKiBUaGUgZnNlcnJvcnNbXSBhcnJheSBoYXMgKCNjb2x1bW5zICsgMikgZW50cmllczsgdGhlIGV4dHJhIGVudHJ5IGF0CisgKiBlYWNoIGVuZCBzYXZlcyB1cyBmcm9tIHNwZWNpYWwtY2FzaW5nIHRoZSBmaXJzdCBhbmQgbGFzdCBwaXhlbHMuCisgKiBFYWNoIGVudHJ5IGlzIHRocmVlIHZhbHVlcyBsb25nLCBvbmUgdmFsdWUgZm9yIGVhY2ggY29sb3IgY29tcG9uZW50LgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAordHlwZWRlZiBJTlQxNiBGU0VSUk9SOyAgICAgICAgICAvKiAxNiBiaXRzIHNob3VsZCBiZSBlbm91Z2ggKi8KK3R5cGVkZWYgaW50IExPQ0ZTRVJST1I7ICAgICAgICAgLyogdXNlICdpbnQnIGZvciBjYWxjdWxhdGlvbiB0ZW1wcyAqLworI2Vsc2UKK3R5cGVkZWYgSkxPTkcgRlNFUlJPUjsgICAgICAgICAgLyogbWF5IG5lZWQgbW9yZSB0aGFuIDE2IGJpdHMgKi8KK3R5cGVkZWYgSkxPTkcgTE9DRlNFUlJPUjsgICAgICAgLyogYmUgc3VyZSBjYWxjdWxhdGlvbiB0ZW1wcyBhcmUgYmlnIGVub3VnaCAqLworI2VuZGlmCisKK3R5cGVkZWYgRlNFUlJPUiAqRlNFUlJQVFI7ICAgICAgLyogcG9pbnRlciB0byBlcnJvciBhcnJheSAqLworCisKKy8qIFByaXZhdGUgc3Vib2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIFNwYWNlIGZvciB0aGUgZXZlbnR1YWxseSBjcmVhdGVkIGNvbG9ybWFwIGlzIHN0YXNoZWQgaGVyZSAqLworICBKU0FNUEFSUkFZIHN2X2NvbG9ybWFwOyAgICAgICAvKiBjb2xvcm1hcCBhbGxvY2F0ZWQgYXQgaW5pdCB0aW1lICovCisgIGludCBkZXNpcmVkOyAgICAgICAgICAgICAgICAgIC8qIGRlc2lyZWQgIyBvZiBjb2xvcnMgPSBzaXplIG9mIGNvbG9ybWFwICovCisKKyAgLyogVmFyaWFibGVzIGZvciBhY2N1bXVsYXRpbmcgaW1hZ2Ugc3RhdGlzdGljcyAqLworICBoaXN0M2QgaGlzdG9ncmFtOyAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBoaXN0b2dyYW0gKi8KKworICBib29sZWFuIG5lZWRzX3plcm9lZDsgICAgICAgICAvKiBUUlVFIGlmIG5leHQgcGFzcyBtdXN0IHplcm8gaGlzdG9ncmFtICovCisKKyAgLyogVmFyaWFibGVzIGZvciBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nICovCisgIEZTRVJSUFRSIGZzZXJyb3JzOyAgICAgICAgICAgIC8qIGFjY3VtdWxhdGVkIGVycm9ycyAqLworICBib29sZWFuIG9uX29kZF9yb3c7ICAgICAgICAgICAvKiBmbGFnIHRvIHJlbWVtYmVyIHdoaWNoIHJvdyB3ZSBhcmUgb24gKi8KKyAgaW50ICplcnJvcl9saW1pdGVyOyAgICAgICAgICAgLyogdGFibGUgZm9yIGNsYW1waW5nIHRoZSBhcHBsaWVkIGVycm9yICovCit9IG15X2NxdWFudGl6ZXI7CisKK3R5cGVkZWYgbXlfY3F1YW50aXplciAqbXlfY3F1YW50aXplX3B0cjsKKworCisvKgorICogUHJlc2NhbiBzb21lIHJvd3Mgb2YgcGl4ZWxzLgorICogSW4gdGhpcyBtb2R1bGUgdGhlIHByZXNjYW4gc2ltcGx5IHVwZGF0ZXMgdGhlIGhpc3RvZ3JhbSwgd2hpY2ggaGFzIGJlZW4KKyAqIGluaXRpYWxpemVkIHRvIHplcm9lcyBieSBzdGFydF9wYXNzLgorICogQW4gb3V0cHV0X2J1ZiBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgYnkgdGhlIG1ldGhvZCBzaWduYXR1cmUsIGJ1dCBubyBkYXRhCisgKiBpcyBhY3R1YWxseSBvdXRwdXQgKGluIGZhY3QgdGhlIGJ1ZmZlciBjb250cm9sbGVyIGlzIHByb2JhYmx5IHBhc3NpbmcgYQorICogTlVMTCBwb2ludGVyKS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3ByZXNjYW5fcXVhbnRpemUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgaGlzdHB0ciBoaXN0cDsKKyAgcmVnaXN0ZXIgaGlzdDNkIGhpc3RvZ3JhbSA9IGNxdWFudGl6ZS0+aGlzdG9ncmFtOworICBpbnQgcm93OworICBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiB3aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisKKyAgZm9yIChyb3cgPSAwOyByb3cgPCBudW1fcm93czsgcm93KyspIHsKKyAgICBwdHIgPSBpbnB1dF9idWZbcm93XTsKKyAgICBmb3IgKGNvbCA9IHdpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgLyogZ2V0IHBpeGVsIHZhbHVlIGFuZCBpbmRleCBpbnRvIHRoZSBoaXN0b2dyYW0gKi8KKyAgICAgIGhpc3RwID0gJmhpc3RvZ3JhbVtHRVRKU0FNUExFKHB0clswXSkgPj4gQzBfU0hJRlRdCisgICAgICAgICAgICAgICAgICAgICAgICBbR0VUSlNBTVBMRShwdHJbMV0pID4+IEMxX1NISUZUXQorICAgICAgICAgICAgICAgICAgICAgICAgW0dFVEpTQU1QTEUocHRyWzJdKSA+PiBDMl9TSElGVF07CisgICAgICAvKiBpbmNyZW1lbnQsIGNoZWNrIGZvciBvdmVyZmxvdyBhbmQgdW5kbyBpbmNyZW1lbnQgaWYgc28uICovCisgICAgICBpZiAoKysoKmhpc3RwKSA8PSAwKQorICAgICAgICAoKmhpc3RwKS0tOworICAgICAgcHRyICs9IDM7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIE5leHQgd2UgaGF2ZSB0aGUgcmVhbGx5IGludGVyZXN0aW5nIHJvdXRpbmVzOiBzZWxlY3Rpb24gb2YgYSBjb2xvcm1hcAorICogZ2l2ZW4gdGhlIGNvbXBsZXRlZCBoaXN0b2dyYW0uCisgKiBUaGVzZSByb3V0aW5lcyB3b3JrIHdpdGggYSBsaXN0IG9mICJib3hlcyIsIGVhY2ggcmVwcmVzZW50aW5nIGEgcmVjdGFuZ3VsYXIKKyAqIHN1YnNldCBvZiB0aGUgaW5wdXQgY29sb3Igc3BhY2UgKHRvIGhpc3RvZ3JhbSBwcmVjaXNpb24pLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogVGhlIGJvdW5kcyBvZiB0aGUgYm94IChpbmNsdXNpdmUpOyBleHByZXNzZWQgYXMgaGlzdG9ncmFtIGluZGV4ZXMgKi8KKyAgaW50IGMwbWluLCBjMG1heDsKKyAgaW50IGMxbWluLCBjMW1heDsKKyAgaW50IGMybWluLCBjMm1heDsKKyAgLyogVGhlIHZvbHVtZSAoYWN0dWFsbHkgMi1ub3JtKSBvZiB0aGUgYm94ICovCisgIEpMT05HIHZvbHVtZTsKKyAgLyogVGhlIG51bWJlciBvZiBub256ZXJvIGhpc3RvZ3JhbSBjZWxscyB3aXRoaW4gdGhpcyBib3ggKi8KKyAgbG9uZyBjb2xvcmNvdW50OworfSBib3g7CisKK3R5cGVkZWYgYm94ICpib3hwdHI7CisKKworTE9DQUwoYm94cHRyKQorZmluZF9iaWdnZXN0X2NvbG9yX3BvcChib3hwdHIgYm94bGlzdCwgaW50IG51bWJveGVzKQorLyogRmluZCB0aGUgc3BsaXR0YWJsZSBib3ggd2l0aCB0aGUgbGFyZ2VzdCBjb2xvciBwb3B1bGF0aW9uICovCisvKiBSZXR1cm5zIE5VTEwgaWYgbm8gc3BsaXR0YWJsZSBib3hlcyByZW1haW4gKi8KK3sKKyAgcmVnaXN0ZXIgYm94cHRyIGJveHA7CisgIHJlZ2lzdGVyIGludCBpOworICByZWdpc3RlciBsb25nIG1heGMgPSAwOworICBib3hwdHIgd2hpY2ggPSBOVUxMOworCisgIGZvciAoaSA9IDAsIGJveHAgPSBib3hsaXN0OyBpIDwgbnVtYm94ZXM7IGkrKywgYm94cCsrKSB7CisgICAgaWYgKGJveHAtPmNvbG9yY291bnQgPiBtYXhjICYmIGJveHAtPnZvbHVtZSA+IDApIHsKKyAgICAgIHdoaWNoID0gYm94cDsKKyAgICAgIG1heGMgPSBib3hwLT5jb2xvcmNvdW50OworICAgIH0KKyAgfQorICByZXR1cm4gd2hpY2g7Cit9CisKKworTE9DQUwoYm94cHRyKQorZmluZF9iaWdnZXN0X3ZvbHVtZShib3hwdHIgYm94bGlzdCwgaW50IG51bWJveGVzKQorLyogRmluZCB0aGUgc3BsaXR0YWJsZSBib3ggd2l0aCB0aGUgbGFyZ2VzdCAoc2NhbGVkKSB2b2x1bWUgKi8KKy8qIFJldHVybnMgTlVMTCBpZiBubyBzcGxpdHRhYmxlIGJveGVzIHJlbWFpbiAqLworeworICByZWdpc3RlciBib3hwdHIgYm94cDsKKyAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIEpMT05HIG1heHYgPSAwOworICBib3hwdHIgd2hpY2ggPSBOVUxMOworCisgIGZvciAoaSA9IDAsIGJveHAgPSBib3hsaXN0OyBpIDwgbnVtYm94ZXM7IGkrKywgYm94cCsrKSB7CisgICAgaWYgKGJveHAtPnZvbHVtZSA+IG1heHYpIHsKKyAgICAgIHdoaWNoID0gYm94cDsKKyAgICAgIG1heHYgPSBib3hwLT52b2x1bWU7CisgICAgfQorICB9CisgIHJldHVybiB3aGljaDsKK30KKworCitMT0NBTCh2b2lkKQordXBkYXRlX2JveChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib3hwdHIgYm94cCkKKy8qIFNocmluayB0aGUgbWluL21heCBib3VuZHMgb2YgYSBib3ggdG8gZW5jbG9zZSBvbmx5IG5vbnplcm8gZWxlbWVudHMsICovCisvKiBhbmQgcmVjb21wdXRlIGl0cyB2b2x1bWUgYW5kIHBvcHVsYXRpb24gKi8KK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICBoaXN0M2QgaGlzdG9ncmFtID0gY3F1YW50aXplLT5oaXN0b2dyYW07CisgIGhpc3RwdHIgaGlzdHA7CisgIGludCBjMCwgYzEsIGMyOworICBpbnQgYzBtaW4sIGMwbWF4LCBjMW1pbiwgYzFtYXgsIGMybWluLCBjMm1heDsKKyAgSkxPTkcgZGlzdDAsIGRpc3QxLCBkaXN0MjsKKyAgbG9uZyBjY291bnQ7CisKKyAgYzBtaW4gPSBib3hwLT5jMG1pbjsgIGMwbWF4ID0gYm94cC0+YzBtYXg7CisgIGMxbWluID0gYm94cC0+YzFtaW47ICBjMW1heCA9IGJveHAtPmMxbWF4OworICBjMm1pbiA9IGJveHAtPmMybWluOyAgYzJtYXggPSBib3hwLT5jMm1heDsKKworICBpZiAoYzBtYXggPiBjMG1pbikKKyAgICBmb3IgKGMwID0gYzBtaW47IGMwIDw9IGMwbWF4OyBjMCsrKQorICAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKykgeworICAgICAgICBoaXN0cCA9ICZoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07CisgICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCisgICAgICAgICAgaWYgKCpoaXN0cCsrICE9IDApIHsKKyAgICAgICAgICAgIGJveHAtPmMwbWluID0gYzBtaW4gPSBjMDsKKyAgICAgICAgICAgIGdvdG8gaGF2ZV9jMG1pbjsKKyAgICAgICAgICB9CisgICAgICB9CitoYXZlX2MwbWluOgorICBpZiAoYzBtYXggPiBjMG1pbikKKyAgICBmb3IgKGMwID0gYzBtYXg7IGMwID49IGMwbWluOyBjMC0tKQorICAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKykgeworICAgICAgICBoaXN0cCA9ICZoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07CisgICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCisgICAgICAgICAgaWYgKCpoaXN0cCsrICE9IDApIHsKKyAgICAgICAgICAgIGJveHAtPmMwbWF4ID0gYzBtYXggPSBjMDsKKyAgICAgICAgICAgIGdvdG8gaGF2ZV9jMG1heDsKKyAgICAgICAgICB9CisgICAgICB9CitoYXZlX2MwbWF4OgorICBpZiAoYzFtYXggPiBjMW1pbikKKyAgICBmb3IgKGMxID0gYzFtaW47IGMxIDw9IGMxbWF4OyBjMSsrKQorICAgICAgZm9yIChjMCA9IGMwbWluOyBjMCA8PSBjMG1heDsgYzArKykgeworICAgICAgICBoaXN0cCA9ICZoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07CisgICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCisgICAgICAgICAgaWYgKCpoaXN0cCsrICE9IDApIHsKKyAgICAgICAgICAgIGJveHAtPmMxbWluID0gYzFtaW4gPSBjMTsKKyAgICAgICAgICAgIGdvdG8gaGF2ZV9jMW1pbjsKKyAgICAgICAgICB9CisgICAgICB9CitoYXZlX2MxbWluOgorICBpZiAoYzFtYXggPiBjMW1pbikKKyAgICBmb3IgKGMxID0gYzFtYXg7IGMxID49IGMxbWluOyBjMS0tKQorICAgICAgZm9yIChjMCA9IGMwbWluOyBjMCA8PSBjMG1heDsgYzArKykgeworICAgICAgICBoaXN0cCA9ICZoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07CisgICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCisgICAgICAgICAgaWYgKCpoaXN0cCsrICE9IDApIHsKKyAgICAgICAgICAgIGJveHAtPmMxbWF4ID0gYzFtYXggPSBjMTsKKyAgICAgICAgICAgIGdvdG8gaGF2ZV9jMW1heDsKKyAgICAgICAgICB9CisgICAgICB9CitoYXZlX2MxbWF4OgorICBpZiAoYzJtYXggPiBjMm1pbikKKyAgICBmb3IgKGMyID0gYzJtaW47IGMyIDw9IGMybWF4OyBjMisrKQorICAgICAgZm9yIChjMCA9IGMwbWluOyBjMCA8PSBjMG1heDsgYzArKykgeworICAgICAgICBoaXN0cCA9ICZoaXN0b2dyYW1bYzBdW2MxbWluXVtjMl07CisgICAgICAgIGZvciAoYzEgPSBjMW1pbjsgYzEgPD0gYzFtYXg7IGMxKyssIGhpc3RwICs9IEhJU1RfQzJfRUxFTVMpCisgICAgICAgICAgaWYgKCpoaXN0cCAhPSAwKSB7CisgICAgICAgICAgICBib3hwLT5jMm1pbiA9IGMybWluID0gYzI7CisgICAgICAgICAgICBnb3RvIGhhdmVfYzJtaW47CisgICAgICAgICAgfQorICAgICAgfQoraGF2ZV9jMm1pbjoKKyAgaWYgKGMybWF4ID4gYzJtaW4pCisgICAgZm9yIChjMiA9IGMybWF4OyBjMiA+PSBjMm1pbjsgYzItLSkKKyAgICAgIGZvciAoYzAgPSBjMG1pbjsgYzAgPD0gYzBtYXg7IGMwKyspIHsKKyAgICAgICAgaGlzdHAgPSAmaGlzdG9ncmFtW2MwXVtjMW1pbl1bYzJdOworICAgICAgICBmb3IgKGMxID0gYzFtaW47IGMxIDw9IGMxbWF4OyBjMSsrLCBoaXN0cCArPSBISVNUX0MyX0VMRU1TKQorICAgICAgICAgIGlmICgqaGlzdHAgIT0gMCkgeworICAgICAgICAgICAgYm94cC0+YzJtYXggPSBjMm1heCA9IGMyOworICAgICAgICAgICAgZ290byBoYXZlX2MybWF4OworICAgICAgICAgIH0KKyAgICAgIH0KK2hhdmVfYzJtYXg6CisKKyAgLyogVXBkYXRlIGJveCB2b2x1bWUuCisgICAqIFdlIHVzZSAyLW5vcm0gcmF0aGVyIHRoYW4gcmVhbCB2b2x1bWUgaGVyZTsgdGhpcyBiaWFzZXMgdGhlIG1ldGhvZAorICAgKiBhZ2FpbnN0IG1ha2luZyBsb25nIG5hcnJvdyBib3hlcywgYW5kIGl0IGhhcyB0aGUgc2lkZSBiZW5lZml0IHRoYXQKKyAgICogYSBib3ggaXMgc3BsaXR0YWJsZSBpZmYgbm9ybSA+IDAuCisgICAqIFNpbmNlIHRoZSBkaWZmZXJlbmNlcyBhcmUgZXhwcmVzc2VkIGluIGhpc3RvZ3JhbS1jZWxsIHVuaXRzLAorICAgKiB3ZSBoYXZlIHRvIHNoaWZ0IGJhY2sgdG8gSlNBTVBMRSB1bml0cyB0byBnZXQgY29uc2lzdGVudCBkaXN0YW5jZXM7CisgICAqIGFmdGVyIHdoaWNoLCB3ZSBzY2FsZSBhY2NvcmRpbmcgdG8gdGhlIHNlbGVjdGVkIGRpc3RhbmNlIHNjYWxlIGZhY3RvcnMuCisgICAqLworICBkaXN0MCA9ICgoYzBtYXggLSBjMG1pbikgPDwgQzBfU0hJRlQpICogQzBfU0NBTEU7CisgIGRpc3QxID0gKChjMW1heCAtIGMxbWluKSA8PCBDMV9TSElGVCkgKiBDMV9TQ0FMRTsKKyAgZGlzdDIgPSAoKGMybWF4IC0gYzJtaW4pIDw8IEMyX1NISUZUKSAqIEMyX1NDQUxFOworICBib3hwLT52b2x1bWUgPSBkaXN0MCAqIGRpc3QwICsgZGlzdDEgKiBkaXN0MSArIGRpc3QyICogZGlzdDI7CisKKyAgLyogTm93IHNjYW4gcmVtYWluaW5nIHZvbHVtZSBvZiBib3ggYW5kIGNvbXB1dGUgcG9wdWxhdGlvbiAqLworICBjY291bnQgPSAwOworICBmb3IgKGMwID0gYzBtaW47IGMwIDw9IGMwbWF4OyBjMCsrKQorICAgIGZvciAoYzEgPSBjMW1pbjsgYzEgPD0gYzFtYXg7IGMxKyspIHsKKyAgICAgIGhpc3RwID0gJmhpc3RvZ3JhbVtjMF1bYzFdW2MybWluXTsKKyAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyssIGhpc3RwKyspCisgICAgICAgIGlmICgqaGlzdHAgIT0gMCkgeworICAgICAgICAgIGNjb3VudCsrOworICAgICAgICB9CisgICAgfQorICBib3hwLT5jb2xvcmNvdW50ID0gY2NvdW50OworfQorCisKK0xPQ0FMKGludCkKK21lZGlhbl9jdXQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm94cHRyIGJveGxpc3QsIGludCBudW1ib3hlcywKKyAgICAgICAgICAgaW50IGRlc2lyZWRfY29sb3JzKQorLyogUmVwZWF0ZWRseSBzZWxlY3QgYW5kIHNwbGl0IHRoZSBsYXJnZXN0IGJveCB1bnRpbCB3ZSBoYXZlIGVub3VnaCBib3hlcyAqLworeworICBpbnQgbiwgbGI7CisgIGludCBjMCwgYzEsIGMyLCBjbWF4OworICByZWdpc3RlciBib3hwdHIgYjEsIGIyOworCisgIHdoaWxlIChudW1ib3hlcyA8IGRlc2lyZWRfY29sb3JzKSB7CisgICAgLyogU2VsZWN0IGJveCB0byBzcGxpdC4KKyAgICAgKiBDdXJyZW50IGFsZ29yaXRobTogYnkgcG9wdWxhdGlvbiBmb3IgZmlyc3QgaGFsZiwgdGhlbiBieSB2b2x1bWUuCisgICAgICovCisgICAgaWYgKG51bWJveGVzICogMiA8PSBkZXNpcmVkX2NvbG9ycykgeworICAgICAgYjEgPSBmaW5kX2JpZ2dlc3RfY29sb3JfcG9wKGJveGxpc3QsIG51bWJveGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgYjEgPSBmaW5kX2JpZ2dlc3Rfdm9sdW1lKGJveGxpc3QsIG51bWJveGVzKTsKKyAgICB9CisgICAgaWYgKGIxID09IE5VTEwpICAgICAgICAgICAgIC8qIG5vIHNwbGl0dGFibGUgYm94ZXMgbGVmdCEgKi8KKyAgICAgIGJyZWFrOworICAgIGIyID0gJmJveGxpc3RbbnVtYm94ZXNdOyAgICAvKiB3aGVyZSBuZXcgYm94IHdpbGwgZ28gKi8KKyAgICAvKiBDb3B5IHRoZSBjb2xvciBib3VuZHMgdG8gdGhlIG5ldyBib3guICovCisgICAgYjItPmMwbWF4ID0gYjEtPmMwbWF4OyAgYjItPmMxbWF4ID0gYjEtPmMxbWF4OyAgYjItPmMybWF4ID0gYjEtPmMybWF4OworICAgIGIyLT5jMG1pbiA9IGIxLT5jMG1pbjsgIGIyLT5jMW1pbiA9IGIxLT5jMW1pbjsgIGIyLT5jMm1pbiA9IGIxLT5jMm1pbjsKKyAgICAvKiBDaG9vc2Ugd2hpY2ggYXhpcyB0byBzcGxpdCB0aGUgYm94IG9uLgorICAgICAqIEN1cnJlbnQgYWxnb3JpdGhtOiBsb25nZXN0IHNjYWxlZCBheGlzLgorICAgICAqIFNlZSBub3RlcyBpbiB1cGRhdGVfYm94IGFib3V0IHNjYWxpbmcgZGlzdGFuY2VzLgorICAgICAqLworICAgIGMwID0gKChiMS0+YzBtYXggLSBiMS0+YzBtaW4pIDw8IEMwX1NISUZUKSAqIEMwX1NDQUxFOworICAgIGMxID0gKChiMS0+YzFtYXggLSBiMS0+YzFtaW4pIDw8IEMxX1NISUZUKSAqIEMxX1NDQUxFOworICAgIGMyID0gKChiMS0+YzJtYXggLSBiMS0+YzJtaW4pIDw8IEMyX1NISUZUKSAqIEMyX1NDQUxFOworICAgIC8qIFdlIHdhbnQgdG8gYnJlYWsgYW55IHRpZXMgaW4gZmF2b3Igb2YgZ3JlZW4sIHRoZW4gcmVkLCBibHVlIGxhc3QuCisgICAgICogVGhpcyBjb2RlIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBSLEcsQiBvciBCLEcsUiBjb2xvciBvcmRlcnMgb25seS4KKyAgICAgKi8KKyAgICBpZiAocmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXSA9PSAwKSB7CisgICAgICBjbWF4ID0gYzE7ICBuID0gMTsKKyAgICAgIGlmIChjMCA+IGNtYXgpIHsgY21heCA9IGMwOyAgbiA9IDA7IH0KKyAgICAgIGlmIChjMiA+IGNtYXgpIHsgbiA9IDI7IH0KKyAgICB9IGVsc2UgeworICAgICAgY21heCA9IGMxOyAgbiA9IDE7CisgICAgICBpZiAoYzIgPiBjbWF4KSB7IGNtYXggPSBjMjsgIG4gPSAyOyB9CisgICAgICBpZiAoYzAgPiBjbWF4KSB7IG4gPSAwOyB9CisgICAgfQorICAgIC8qIENob29zZSBzcGxpdCBwb2ludCBhbG9uZyBzZWxlY3RlZCBheGlzLCBhbmQgdXBkYXRlIGJveCBib3VuZHMuCisgICAgICogQ3VycmVudCBhbGdvcml0aG06IHNwbGl0IGF0IGhhbGZ3YXkgcG9pbnQuCisgICAgICogKFNpbmNlIHRoZSBib3ggaGFzIGJlZW4gc2hydW5rIHRvIG1pbmltdW0gdm9sdW1lLAorICAgICAqIGFueSBzcGxpdCB3aWxsIHByb2R1Y2UgdHdvIG5vbmVtcHR5IHN1YmJveGVzLikKKyAgICAgKiBOb3RlIHRoYXQgbGIgdmFsdWUgaXMgbWF4IGZvciBsb3dlciBib3gsIHNvIG11c3QgYmUgPCBvbGQgbWF4LgorICAgICAqLworICAgIHN3aXRjaCAobikgeworICAgIGNhc2UgMDoKKyAgICAgIGxiID0gKGIxLT5jMG1heCArIGIxLT5jMG1pbikgLyAyOworICAgICAgYjEtPmMwbWF4ID0gbGI7CisgICAgICBiMi0+YzBtaW4gPSBsYiArIDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICBsYiA9IChiMS0+YzFtYXggKyBiMS0+YzFtaW4pIC8gMjsKKyAgICAgIGIxLT5jMW1heCA9IGxiOworICAgICAgYjItPmMxbWluID0gbGIgKyAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgbGIgPSAoYjEtPmMybWF4ICsgYjEtPmMybWluKSAvIDI7CisgICAgICBiMS0+YzJtYXggPSBsYjsKKyAgICAgIGIyLT5jMm1pbiA9IGxiICsgMTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBVcGRhdGUgc3RhdHMgZm9yIGJveGVzICovCisgICAgdXBkYXRlX2JveChjaW5mbywgYjEpOworICAgIHVwZGF0ZV9ib3goY2luZm8sIGIyKTsKKyAgICBudW1ib3hlcysrOworICB9CisgIHJldHVybiBudW1ib3hlczsKK30KKworCitMT0NBTCh2b2lkKQorY29tcHV0ZV9jb2xvcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib3hwdHIgYm94cCwgaW50IGljb2xvcikKKy8qIENvbXB1dGUgcmVwcmVzZW50YXRpdmUgY29sb3IgZm9yIGEgYm94LCBwdXQgaXQgaW4gY29sb3JtYXBbaWNvbG9yXSAqLworeworICAvKiBDdXJyZW50IGFsZ29yaXRobTogbWVhbiB3ZWlnaHRlZCBieSBwaXhlbHMgKG5vdCBjb2xvcnMpICovCisgIC8qIE5vdGUgaXQgaXMgaW1wb3J0YW50IHRvIGdldCB0aGUgcm91bmRpbmcgY29ycmVjdCEgKi8KKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICBoaXN0M2QgaGlzdG9ncmFtID0gY3F1YW50aXplLT5oaXN0b2dyYW07CisgIGhpc3RwdHIgaGlzdHA7CisgIGludCBjMCwgYzEsIGMyOworICBpbnQgYzBtaW4sIGMwbWF4LCBjMW1pbiwgYzFtYXgsIGMybWluLCBjMm1heDsKKyAgbG9uZyBjb3VudDsKKyAgbG9uZyB0b3RhbCA9IDA7CisgIGxvbmcgYzB0b3RhbCA9IDA7CisgIGxvbmcgYzF0b3RhbCA9IDA7CisgIGxvbmcgYzJ0b3RhbCA9IDA7CisKKyAgYzBtaW4gPSBib3hwLT5jMG1pbjsgIGMwbWF4ID0gYm94cC0+YzBtYXg7CisgIGMxbWluID0gYm94cC0+YzFtaW47ICBjMW1heCA9IGJveHAtPmMxbWF4OworICBjMm1pbiA9IGJveHAtPmMybWluOyAgYzJtYXggPSBib3hwLT5jMm1heDsKKworICBmb3IgKGMwID0gYzBtaW47IGMwIDw9IGMwbWF4OyBjMCsrKQorICAgIGZvciAoYzEgPSBjMW1pbjsgYzEgPD0gYzFtYXg7IGMxKyspIHsKKyAgICAgIGhpc3RwID0gJmhpc3RvZ3JhbVtjMF1bYzFdW2MybWluXTsKKyAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspIHsKKyAgICAgICAgaWYgKChjb3VudCA9ICpoaXN0cCsrKSAhPSAwKSB7CisgICAgICAgICAgdG90YWwgKz0gY291bnQ7CisgICAgICAgICAgYzB0b3RhbCArPSAoKGMwIDw8IEMwX1NISUZUKSArICgoMSA8PCBDMF9TSElGVCkgPj4gMSkpICogY291bnQ7CisgICAgICAgICAgYzF0b3RhbCArPSAoKGMxIDw8IEMxX1NISUZUKSArICgoMSA8PCBDMV9TSElGVCkgPj4gMSkpICogY291bnQ7CisgICAgICAgICAgYzJ0b3RhbCArPSAoKGMyIDw8IEMyX1NISUZUKSArICgoMSA8PCBDMl9TSElGVCkgPj4gMSkpICogY291bnQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgY2luZm8tPmNvbG9ybWFwWzBdW2ljb2xvcl0gPSAoSlNBTVBMRSkoKGMwdG90YWwgKyAodG90YWwgPj4gMSkpIC8gdG90YWwpOworICBjaW5mby0+Y29sb3JtYXBbMV1baWNvbG9yXSA9IChKU0FNUExFKSgoYzF0b3RhbCArICh0b3RhbCA+PiAxKSkgLyB0b3RhbCk7CisgIGNpbmZvLT5jb2xvcm1hcFsyXVtpY29sb3JdID0gKEpTQU1QTEUpKChjMnRvdGFsICsgKHRvdGFsID4+IDEpKSAvIHRvdGFsKTsKK30KKworCitMT0NBTCh2b2lkKQorc2VsZWN0X2NvbG9ycyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgZGVzaXJlZF9jb2xvcnMpCisvKiBNYXN0ZXIgcm91dGluZSBmb3IgY29sb3Igc2VsZWN0aW9uICovCit7CisgIGJveHB0ciBib3hsaXN0OworICBpbnQgbnVtYm94ZXM7CisgIGludCBpOworCisgIC8qIEFsbG9jYXRlIHdvcmtzcGFjZSBmb3IgYm94IGxpc3QgKi8KKyAgYm94bGlzdCA9IChib3hwdHIpKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIGRlc2lyZWRfY29sb3JzICogc2l6ZW9mKGJveCkpOworICAvKiBJbml0aWFsaXplIG9uZSBib3ggY29udGFpbmluZyB3aG9sZSBzcGFjZSAqLworICBudW1ib3hlcyA9IDE7CisgIGJveGxpc3RbMF0uYzBtaW4gPSAwOworICBib3hsaXN0WzBdLmMwbWF4ID0gTUFYSlNBTVBMRSA+PiBDMF9TSElGVDsKKyAgYm94bGlzdFswXS5jMW1pbiA9IDA7CisgIGJveGxpc3RbMF0uYzFtYXggPSBNQVhKU0FNUExFID4+IEMxX1NISUZUOworICBib3hsaXN0WzBdLmMybWluID0gMDsKKyAgYm94bGlzdFswXS5jMm1heCA9IE1BWEpTQU1QTEUgPj4gQzJfU0hJRlQ7CisgIC8qIFNocmluayBpdCB0byBhY3R1YWxseS11c2VkIHZvbHVtZSBhbmQgc2V0IGl0cyBzdGF0aXN0aWNzICovCisgIHVwZGF0ZV9ib3goY2luZm8sICZib3hsaXN0WzBdKTsKKyAgLyogUGVyZm9ybSBtZWRpYW4tY3V0IHRvIHByb2R1Y2UgZmluYWwgYm94IGxpc3QgKi8KKyAgbnVtYm94ZXMgPSBtZWRpYW5fY3V0KGNpbmZvLCBib3hsaXN0LCBudW1ib3hlcywgZGVzaXJlZF9jb2xvcnMpOworICAvKiBDb21wdXRlIHRoZSByZXByZXNlbnRhdGl2ZSBjb2xvciBmb3IgZWFjaCBib3gsIGZpbGwgY29sb3JtYXAgKi8KKyAgZm9yIChpID0gMDsgaSA8IG51bWJveGVzOyBpKyspCisgICAgY29tcHV0ZV9jb2xvcihjaW5mbywgJmJveGxpc3RbaV0sIGkpOworICBjaW5mby0+YWN0dWFsX251bWJlcl9vZl9jb2xvcnMgPSBudW1ib3hlczsKKyAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfUVVBTlRfU0VMRUNURUQsIG51bWJveGVzKTsKK30KKworCisvKgorICogVGhlc2Ugcm91dGluZXMgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSB0aW1lLWNyaXRpY2FsIHRhc2sgb2YgbWFwcGluZyBpbnB1dAorICogY29sb3JzIHRvIHRoZSBuZWFyZXN0IGNvbG9yIGluIHRoZSBzZWxlY3RlZCBjb2xvcm1hcC4KKyAqCisgKiBXZSByZS11c2UgdGhlIGhpc3RvZ3JhbSBzcGFjZSBhcyBhbiAiaW52ZXJzZSBjb2xvciBtYXAiLCBlc3NlbnRpYWxseSBhCisgKiBjYWNoZSBmb3IgdGhlIHJlc3VsdHMgb2YgbmVhcmVzdC1jb2xvciBzZWFyY2hlcy4gIEFsbCBjb2xvcnMgd2l0aGluIGEKKyAqIGhpc3RvZ3JhbSBjZWxsIHdpbGwgYmUgbWFwcGVkIHRvIHRoZSBzYW1lIGNvbG9ybWFwIGVudHJ5LCBuYW1lbHkgdGhlIG9uZQorICogY2xvc2VzdCB0byB0aGUgY2VsbCdzIGNlbnRlci4gIFRoaXMgbWF5IG5vdCBiZSBxdWl0ZSB0aGUgY2xvc2VzdCBlbnRyeSB0bworICogdGhlIGFjdHVhbCBpbnB1dCBjb2xvciwgYnV0IGl0J3MgYWxtb3N0IGFzIGdvb2QuICBBIHplcm8gaW4gdGhlIGNhY2hlCisgKiBpbmRpY2F0ZXMgd2UgaGF2ZW4ndCBmb3VuZCB0aGUgbmVhcmVzdCBjb2xvciBmb3IgdGhhdCBjZWxsIHlldDsgdGhlIGFycmF5CisgKiBpcyBjbGVhcmVkIHRvIHplcm9lcyBiZWZvcmUgc3RhcnRpbmcgdGhlIG1hcHBpbmcgcGFzcy4gIFdoZW4gd2UgZmluZCB0aGUKKyAqIG5lYXJlc3QgY29sb3IgZm9yIGEgY2VsbCwgaXRzIGNvbG9ybWFwIGluZGV4IHBsdXMgb25lIGlzIHJlY29yZGVkIGluIHRoZQorICogY2FjaGUgZm9yIGZ1dHVyZSB1c2UuICBUaGUgcGFzczIgc2Nhbm5pbmcgcm91dGluZXMgY2FsbCBmaWxsX2ludmVyc2VfY21hcAorICogd2hlbiB0aGV5IG5lZWQgdG8gdXNlIGFuIHVuZmlsbGVkIGVudHJ5IGluIHRoZSBjYWNoZS4KKyAqCisgKiBPdXIgbWV0aG9kIG9mIGVmZmljaWVudGx5IGZpbmRpbmcgbmVhcmVzdCBjb2xvcnMgaXMgYmFzZWQgb24gdGhlICJsb2NhbGx5CisgKiBzb3J0ZWQgc2VhcmNoIiBpZGVhIGRlc2NyaWJlZCBieSBIZWNrYmVydCBhbmQgb24gdGhlIGluY3JlbWVudGFsIGRpc3RhbmNlCisgKiBjYWxjdWxhdGlvbiBkZXNjcmliZWQgYnkgU3BlbmNlciBXLiBUaG9tYXMgaW4gY2hhcHRlciBJSUkuMSBvZiBHcmFwaGljcworICogR2VtcyBJSSAoSmFtZXMgQXJ2bywgZWQuICBBY2FkZW1pYyBQcmVzcywgMTk5MSkuICBUaG9tYXMgcG9pbnRzIG91dCB0aGF0CisgKiB0aGUgZGlzdGFuY2VzIGZyb20gYSBnaXZlbiBjb2xvcm1hcCBlbnRyeSB0byBlYWNoIGNlbGwgb2YgdGhlIGhpc3RvZ3JhbSBjYW4KKyAqIGJlIGNvbXB1dGVkIHF1aWNrbHkgdXNpbmcgYW4gaW5jcmVtZW50YWwgbWV0aG9kOiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbgorICogZGlzdGFuY2VzIHRvIGFkamFjZW50IGNlbGxzIHRoZW1zZWx2ZXMgZGlmZmVyIGJ5IGEgY29uc3RhbnQuICBUaGlzIGFsbG93cyBhCisgKiBmYWlybHkgZmFzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImJydXRlIGZvcmNlIiBhcHByb2FjaCBvZiBjb21wdXRpbmcgdGhlCisgKiBkaXN0YW5jZSBmcm9tIGV2ZXJ5IGNvbG9ybWFwIGVudHJ5IHRvIGV2ZXJ5IGhpc3RvZ3JhbSBjZWxsLiAgVW5mb3J0dW5hdGVseSwKKyAqIGl0IG5lZWRzIGEgd29yayBhcnJheSB0byBob2xkIHRoZSBiZXN0LWRpc3RhbmNlLXNvLWZhciBmb3IgZWFjaCBoaXN0b2dyYW0KKyAqIGNlbGwgKGJlY2F1c2UgdGhlIGlubmVyIGxvb3AgaGFzIHRvIGJlIG92ZXIgY2VsbHMsIG5vdCBjb2xvcm1hcCBlbnRyaWVzKS4KKyAqIFRoZSB3b3JrIGFycmF5IGVsZW1lbnRzIGhhdmUgdG8gYmUgSkxPTkdzLCBzbyB0aGUgd29yayBhcnJheSB3b3VsZCBuZWVkCisgKiAyNTZLYiBhdCBvdXIgcmVjb21tZW5kZWQgcHJlY2lzaW9uLiAgVGhpcyBpcyBub3QgZmVhc2libGUgaW4gRE9TIG1hY2hpbmVzLgorICoKKyAqIFRvIGdldCBhcm91bmQgdGhlc2UgcHJvYmxlbXMsIHdlIGFwcGx5IFRob21hcycgbWV0aG9kIHRvIGNvbXB1dGUgdGhlCisgKiBuZWFyZXN0IGNvbG9ycyBmb3Igb25seSB0aGUgY2VsbHMgd2l0aGluIGEgc21hbGwgc3ViYm94IG9mIHRoZSBoaXN0b2dyYW0uCisgKiBUaGUgd29yayBhcnJheSBuZWVkIGJlIG9ubHkgYXMgYmlnIGFzIHRoZSBzdWJib3gsIHNvIHRoZSBtZW1vcnkgdXNhZ2UKKyAqIHByb2JsZW0gaXMgc29sdmVkLiAgRnVydGhlcm1vcmUsIHdlIG5lZWQgbm90IGZpbGwgc3ViYm94ZXMgdGhhdCBhcmUgbmV2ZXIKKyAqIHJlZmVyZW5jZWQgaW4gcGFzczI7IG1hbnkgaW1hZ2VzIHVzZSBvbmx5IHBhcnQgb2YgdGhlIGNvbG9yIGdhbXV0LCBzbyBhCisgKiBmYWlyIGFtb3VudCBvZiB3b3JrIGlzIHNhdmVkLiAgQW4gYWRkaXRpb25hbCBhZHZhbnRhZ2Ugb2YgdGhpcworICogYXBwcm9hY2ggaXMgdGhhdCB3ZSBjYW4gYXBwbHkgSGVja2JlcnQncyBsb2NhbGl0eSBjcml0ZXJpb24gdG8gcXVpY2tseQorICogZWxpbWluYXRlIGNvbG9ybWFwIGVudHJpZXMgdGhhdCBhcmUgZmFyIGF3YXkgZnJvbSB0aGUgc3ViYm94OyB0eXBpY2FsbHkKKyAqIHRocmVlLWZvdXJ0aHMgb2YgdGhlIGNvbG9ybWFwIGVudHJpZXMgYXJlIHJlamVjdGVkIGJ5IEhlY2tiZXJ0J3MgY3JpdGVyaW9uLAorICogYW5kIHdlIG5lZWQgbm90IGNvbXB1dGUgdGhlaXIgZGlzdGFuY2VzIHRvIGluZGl2aWR1YWwgY2VsbHMgaW4gdGhlIHN1YmJveC4KKyAqIFRoZSBzcGVlZCBvZiB0aGlzIGFwcHJvYWNoIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgc3ViYm94IHNpemU6IHRvbworICogc21hbGwgbWVhbnMgdG9vIG11Y2ggb3ZlcmhlYWQsIHRvbyBiaWcgbG9zZXMgYmVjYXVzZSBIZWNrYmVydCdzIGNyaXRlcmlvbgorICogY2FuJ3QgZWxpbWluYXRlIGFzIG1hbnkgY29sb3JtYXAgZW50cmllcy4gIEVtcGlyaWNhbGx5IHRoZSBiZXN0IHN1YmJveAorICogc2l6ZSBzZWVtcyB0byBiZSBhYm91dCAxLzUxMnRoIG9mIHRoZSBoaXN0b2dyYW0gKDEvOHRoIGluIGVhY2ggZGlyZWN0aW9uKS4KKyAqCisgKiBUaG9tYXMnIGFydGljbGUgYWxzbyBkZXNjcmliZXMgYSByZWZpbmVkIG1ldGhvZCB3aGljaCBpcyBhc3ltcHRvdGljYWxseQorICogZmFzdGVyIHRoYW4gdGhlIGJydXRlLWZvcmNlIG1ldGhvZCwgYnV0IGl0IGlzIGFsc28gZmFyIG1vcmUgY29tcGxleCBhbmQKKyAqIGNhbm5vdCBlZmZpY2llbnRseSBiZSBhcHBsaWVkIHRvIHNtYWxsIHN1YmJveGVzLiAgSXQgaXMgdGhlcmVmb3JlIG5vdAorICogdXNlZnVsIGZvciBwcm9ncmFtcyBpbnRlbmRlZCB0byBiZSBwb3J0YWJsZSB0byBET1MgbWFjaGluZXMuICBPbiBtYWNoaW5lcworICogd2l0aCBwbGVudHkgb2YgbWVtb3J5LCBmaWxsaW5nIHRoZSB3aG9sZSBoaXN0b2dyYW0gaW4gb25lIHNob3Qgd2l0aCBUaG9tYXMnCisgKiByZWZpbmVkIG1ldGhvZCBtaWdodCBiZSBmYXN0ZXIgdGhhbiB0aGUgcHJlc2VudCBjb2RlIC0tLSBidXQgdGhlbiBhZ2FpbiwKKyAqIGl0IG1pZ2h0IG5vdCBiZSBhbnkgZmFzdGVyLCBhbmQgaXQncyBjZXJ0YWlubHkgbW9yZSBjb21wbGljYXRlZC4KKyAqLworCisKKy8qIGxvZzIoaGlzdG9ncmFtIGNlbGxzIGluIHVwZGF0ZSBib3gpIGZvciBlYWNoIGF4aXM7IHRoaXMgY2FuIGJlIGFkanVzdGVkICovCisjZGVmaW5lIEJPWF9DMF9MT0cgIChISVNUX0MwX0JJVFMgLSAzKQorI2RlZmluZSBCT1hfQzFfTE9HICAoSElTVF9DMV9CSVRTIC0gMykKKyNkZWZpbmUgQk9YX0MyX0xPRyAgKEhJU1RfQzJfQklUUyAtIDMpCisKKyNkZWZpbmUgQk9YX0MwX0VMRU1TICAoMSA8PCBCT1hfQzBfTE9HKSAvKiAjIG9mIGhpc3QgY2VsbHMgaW4gdXBkYXRlIGJveCAqLworI2RlZmluZSBCT1hfQzFfRUxFTVMgICgxIDw8IEJPWF9DMV9MT0cpCisjZGVmaW5lIEJPWF9DMl9FTEVNUyAgKDEgPDwgQk9YX0MyX0xPRykKKworI2RlZmluZSBCT1hfQzBfU0hJRlQgIChDMF9TSElGVCArIEJPWF9DMF9MT0cpCisjZGVmaW5lIEJPWF9DMV9TSElGVCAgKEMxX1NISUZUICsgQk9YX0MxX0xPRykKKyNkZWZpbmUgQk9YX0MyX1NISUZUICAoQzJfU0hJRlQgKyBCT1hfQzJfTE9HKQorCisKKy8qCisgKiBUaGUgbmV4dCB0aHJlZSByb3V0aW5lcyBpbXBsZW1lbnQgaW52ZXJzZSBjb2xvcm1hcCBmaWxsaW5nLiAgVGhleSBjb3VsZAorICogYWxsIGJlIGZvbGRlZCBpbnRvIG9uZSBiaWcgcm91dGluZSwgYnV0IHNwbGl0dGluZyB0aGVtIHVwIHRoaXMgd2F5IHNhdmVzCisgKiBzb21lIHN0YWNrIHNwYWNlICh0aGUgbWluZGlzdFtdIGFuZCBiZXN0ZGlzdFtdIGFycmF5cyBuZWVkIG5vdCBjb2V4aXN0KQorICogYW5kIG1heSBhbGxvdyBzb21lIGNvbXBpbGVycyB0byBwcm9kdWNlIGJldHRlciBjb2RlIGJ5IHJlZ2lzdGVyaXppbmcgbW9yZQorICogaW5uZXItbG9vcCB2YXJpYWJsZXMuCisgKi8KKworTE9DQUwoaW50KQorZmluZF9uZWFyYnlfY29sb3JzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtaW5jMCwgaW50IG1pbmMxLCBpbnQgbWluYzIsCisgICAgICAgICAgICAgICAgICAgSlNBTVBMRSBjb2xvcmxpc3RbXSkKKy8qIExvY2F0ZSB0aGUgY29sb3JtYXAgZW50cmllcyBjbG9zZSBlbm91Z2ggdG8gYW4gdXBkYXRlIGJveCB0byBiZSBjYW5kaWRhdGVzCisgKiBmb3IgdGhlIG5lYXJlc3QgZW50cnkgdG8gc29tZSBjZWxsKHMpIGluIHRoZSB1cGRhdGUgYm94LiAgVGhlIHVwZGF0ZSBib3gKKyAqIGlzIHNwZWNpZmllZCBieSB0aGUgY2VudGVyIGNvb3JkaW5hdGVzIG9mIGl0cyBmaXJzdCBjZWxsLiAgVGhlIG51bWJlciBvZgorICogY2FuZGlkYXRlIGNvbG9ybWFwIGVudHJpZXMgaXMgcmV0dXJuZWQsIGFuZCB0aGVpciBjb2xvcm1hcCBpbmRleGVzIGFyZQorICogcGxhY2VkIGluIGNvbG9ybGlzdFtdLgorICogVGhpcyByb3V0aW5lIHVzZXMgSGVja2JlcnQncyAibG9jYWxseSBzb3J0ZWQgc2VhcmNoIiBjcml0ZXJpb24gdG8gc2VsZWN0CisgKiB0aGUgY29sb3JzIHRoYXQgbmVlZCBmdXJ0aGVyIGNvbnNpZGVyYXRpb24uCisgKi8KK3sKKyAgaW50IG51bWNvbG9ycyA9IGNpbmZvLT5hY3R1YWxfbnVtYmVyX29mX2NvbG9yczsKKyAgaW50IG1heGMwLCBtYXhjMSwgbWF4YzI7CisgIGludCBjZW50ZXJjMCwgY2VudGVyYzEsIGNlbnRlcmMyOworICBpbnQgaSwgeCwgbmNvbG9yczsKKyAgSkxPTkcgbWlubWF4ZGlzdCwgbWluX2Rpc3QsIG1heF9kaXN0LCB0ZGlzdDsKKyAgSkxPTkcgbWluZGlzdFtNQVhOVU1DT0xPUlNdOyAgLyogbWluIGRpc3RhbmNlIHRvIGNvbG9ybWFwIGVudHJ5IGkgKi8KKworICAvKiBDb21wdXRlIHRydWUgY29vcmRpbmF0ZXMgb2YgdXBkYXRlIGJveCdzIHVwcGVyIGNvcm5lciBhbmQgY2VudGVyLgorICAgKiBBY3R1YWxseSB3ZSBjb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSB1cHBlci1jb3JuZXIKKyAgICogaGlzdG9ncmFtIGNlbGwsIHdoaWNoIGFyZSB0aGUgdXBwZXIgYm91bmRzIG9mIHRoZSB2b2x1bWUgd2UgY2FyZSBhYm91dC4KKyAgICogTm90ZSB0aGF0IHNpbmNlICI+PiIgcm91bmRzIGRvd24sIHRoZSAiY2VudGVyIiB2YWx1ZXMgbWF5IGJlIGNsb3NlciB0bworICAgKiBtaW4gdGhhbiB0byBtYXg7IGhlbmNlIGNvbXBhcmlzb25zIHRvIHRoZW0gbXVzdCBiZSAiPD0iLCBub3QgIjwiLgorICAgKi8KKyAgbWF4YzAgPSBtaW5jMCArICgoMSA8PCBCT1hfQzBfU0hJRlQpIC0gKDEgPDwgQzBfU0hJRlQpKTsKKyAgY2VudGVyYzAgPSAobWluYzAgKyBtYXhjMCkgPj4gMTsKKyAgbWF4YzEgPSBtaW5jMSArICgoMSA8PCBCT1hfQzFfU0hJRlQpIC0gKDEgPDwgQzFfU0hJRlQpKTsKKyAgY2VudGVyYzEgPSAobWluYzEgKyBtYXhjMSkgPj4gMTsKKyAgbWF4YzIgPSBtaW5jMiArICgoMSA8PCBCT1hfQzJfU0hJRlQpIC0gKDEgPDwgQzJfU0hJRlQpKTsKKyAgY2VudGVyYzIgPSAobWluYzIgKyBtYXhjMikgPj4gMTsKKworICAvKiBGb3IgZWFjaCBjb2xvciBpbiBjb2xvcm1hcCwgZmluZDoKKyAgICogIDEuIGl0cyBtaW5pbXVtIHNxdWFyZWQtZGlzdGFuY2UgdG8gYW55IHBvaW50IGluIHRoZSB1cGRhdGUgYm94CisgICAqICAgICAoemVybyBpZiBjb2xvciBpcyB3aXRoaW4gdXBkYXRlIGJveCk7CisgICAqICAyLiBpdHMgbWF4aW11bSBzcXVhcmVkLWRpc3RhbmNlIHRvIGFueSBwb2ludCBpbiB0aGUgdXBkYXRlIGJveC4KKyAgICogQm90aCBvZiB0aGVzZSBjYW4gYmUgZm91bmQgYnkgY29uc2lkZXJpbmcgb25seSB0aGUgY29ybmVycyBvZiB0aGUgYm94LgorICAgKiBXZSBzYXZlIHRoZSBtaW5pbXVtIGRpc3RhbmNlIGZvciBlYWNoIGNvbG9yIGluIG1pbmRpc3RbXTsKKyAgICogb25seSB0aGUgc21hbGxlc3QgbWF4aW11bSBkaXN0YW5jZSBpcyBvZiBpbnRlcmVzdC4KKyAgICovCisgIG1pbm1heGRpc3QgPSAweDdGRkZGRkZGTDsKKworICBmb3IgKGkgPSAwOyBpIDwgbnVtY29sb3JzOyBpKyspIHsKKyAgICAvKiBXZSBjb21wdXRlIHRoZSBzcXVhcmVkLWMwLWRpc3RhbmNlIHRlcm0sIHRoZW4gYWRkIGluIHRoZSBvdGhlciB0d28uICovCisgICAgeCA9IEdFVEpTQU1QTEUoY2luZm8tPmNvbG9ybWFwWzBdW2ldKTsKKyAgICBpZiAoeCA8IG1pbmMwKSB7CisgICAgICB0ZGlzdCA9ICh4IC0gbWluYzApICogQzBfU0NBTEU7CisgICAgICBtaW5fZGlzdCA9IHRkaXN0ICogdGRpc3Q7CisgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzApICogQzBfU0NBTEU7CisgICAgICBtYXhfZGlzdCA9IHRkaXN0ICogdGRpc3Q7CisgICAgfSBlbHNlIGlmICh4ID4gbWF4YzApIHsKKyAgICAgIHRkaXN0ID0gKHggLSBtYXhjMCkgKiBDMF9TQ0FMRTsKKyAgICAgIG1pbl9kaXN0ID0gdGRpc3QgKiB0ZGlzdDsKKyAgICAgIHRkaXN0ID0gKHggLSBtaW5jMCkgKiBDMF9TQ0FMRTsKKyAgICAgIG1heF9kaXN0ID0gdGRpc3QgKiB0ZGlzdDsKKyAgICB9IGVsc2UgeworICAgICAgLyogd2l0aGluIGNlbGwgcmFuZ2Ugc28gbm8gY29udHJpYnV0aW9uIHRvIG1pbl9kaXN0ICovCisgICAgICBtaW5fZGlzdCA9IDA7CisgICAgICBpZiAoeCA8PSBjZW50ZXJjMCkgeworICAgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzApICogQzBfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ID0gdGRpc3QgKiB0ZGlzdDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRkaXN0ID0gKHggLSBtaW5jMCkgKiBDMF9TQ0FMRTsKKyAgICAgICAgbWF4X2Rpc3QgPSB0ZGlzdCAqIHRkaXN0OworICAgICAgfQorICAgIH0KKworICAgIHggPSBHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFsxXVtpXSk7CisgICAgaWYgKHggPCBtaW5jMSkgeworICAgICAgdGRpc3QgPSAoeCAtIG1pbmMxKSAqIEMxX1NDQUxFOworICAgICAgbWluX2Rpc3QgKz0gdGRpc3QgKiB0ZGlzdDsKKyAgICAgIHRkaXN0ID0gKHggLSBtYXhjMSkgKiBDMV9TQ0FMRTsKKyAgICAgIG1heF9kaXN0ICs9IHRkaXN0ICogdGRpc3Q7CisgICAgfSBlbHNlIGlmICh4ID4gbWF4YzEpIHsKKyAgICAgIHRkaXN0ID0gKHggLSBtYXhjMSkgKiBDMV9TQ0FMRTsKKyAgICAgIG1pbl9kaXN0ICs9IHRkaXN0ICogdGRpc3Q7CisgICAgICB0ZGlzdCA9ICh4IC0gbWluYzEpICogQzFfU0NBTEU7CisgICAgICBtYXhfZGlzdCArPSB0ZGlzdCAqIHRkaXN0OworICAgIH0gZWxzZSB7CisgICAgICAvKiB3aXRoaW4gY2VsbCByYW5nZSBzbyBubyBjb250cmlidXRpb24gdG8gbWluX2Rpc3QgKi8KKyAgICAgIGlmICh4IDw9IGNlbnRlcmMxKSB7CisgICAgICAgIHRkaXN0ID0gKHggLSBtYXhjMSkgKiBDMV9TQ0FMRTsKKyAgICAgICAgbWF4X2Rpc3QgKz0gdGRpc3QgKiB0ZGlzdDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRkaXN0ID0gKHggLSBtaW5jMSkgKiBDMV9TQ0FMRTsKKyAgICAgICAgbWF4X2Rpc3QgKz0gdGRpc3QgKiB0ZGlzdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB4ID0gR0VUSlNBTVBMRShjaW5mby0+Y29sb3JtYXBbMl1baV0pOworICAgIGlmICh4IDwgbWluYzIpIHsKKyAgICAgIHRkaXN0ID0gKHggLSBtaW5jMikgKiBDMl9TQ0FMRTsKKyAgICAgIG1pbl9kaXN0ICs9IHRkaXN0ICogdGRpc3Q7CisgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzIpICogQzJfU0NBTEU7CisgICAgICBtYXhfZGlzdCArPSB0ZGlzdCAqIHRkaXN0OworICAgIH0gZWxzZSBpZiAoeCA+IG1heGMyKSB7CisgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzIpICogQzJfU0NBTEU7CisgICAgICBtaW5fZGlzdCArPSB0ZGlzdCAqIHRkaXN0OworICAgICAgdGRpc3QgPSAoeCAtIG1pbmMyKSAqIEMyX1NDQUxFOworICAgICAgbWF4X2Rpc3QgKz0gdGRpc3QgKiB0ZGlzdDsKKyAgICB9IGVsc2UgeworICAgICAgLyogd2l0aGluIGNlbGwgcmFuZ2Ugc28gbm8gY29udHJpYnV0aW9uIHRvIG1pbl9kaXN0ICovCisgICAgICBpZiAoeCA8PSBjZW50ZXJjMikgeworICAgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzIpICogQzJfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ICs9IHRkaXN0ICogdGRpc3Q7CisgICAgICB9IGVsc2UgeworICAgICAgICB0ZGlzdCA9ICh4IC0gbWluYzIpICogQzJfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ICs9IHRkaXN0ICogdGRpc3Q7CisgICAgICB9CisgICAgfQorCisgICAgbWluZGlzdFtpXSA9IG1pbl9kaXN0OyAgICAgIC8qIHNhdmUgYXdheSB0aGUgcmVzdWx0cyAqLworICAgIGlmIChtYXhfZGlzdCA8IG1pbm1heGRpc3QpCisgICAgICBtaW5tYXhkaXN0ID0gbWF4X2Rpc3Q7CisgIH0KKworICAvKiBOb3cgd2Uga25vdyB0aGF0IG5vIGNlbGwgaW4gdGhlIHVwZGF0ZSBib3ggaXMgbW9yZSB0aGFuIG1pbm1heGRpc3QKKyAgICogYXdheSBmcm9tIHNvbWUgY29sb3JtYXAgZW50cnkuICBUaGVyZWZvcmUsIG9ubHkgY29sb3JzIHRoYXQgYXJlCisgICAqIHdpdGhpbiBtaW5tYXhkaXN0IG9mIHNvbWUgcGFydCBvZiB0aGUgYm94IG5lZWQgYmUgY29uc2lkZXJlZC4KKyAgICovCisgIG5jb2xvcnMgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgbnVtY29sb3JzOyBpKyspIHsKKyAgICBpZiAobWluZGlzdFtpXSA8PSBtaW5tYXhkaXN0KQorICAgICAgY29sb3JsaXN0W25jb2xvcnMrK10gPSAoSlNBTVBMRSlpOworICB9CisgIHJldHVybiBuY29sb3JzOworfQorCisKK0xPQ0FMKHZvaWQpCitmaW5kX2Jlc3RfY29sb3JzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtaW5jMCwgaW50IG1pbmMxLCBpbnQgbWluYzIsCisgICAgICAgICAgICAgICAgIGludCBudW1jb2xvcnMsIEpTQU1QTEUgY29sb3JsaXN0W10sIEpTQU1QTEUgYmVzdGNvbG9yW10pCisvKiBGaW5kIHRoZSBjbG9zZXN0IGNvbG9ybWFwIGVudHJ5IGZvciBlYWNoIGNlbGwgaW4gdGhlIHVwZGF0ZSBib3gsCisgKiBnaXZlbiB0aGUgbGlzdCBvZiBjYW5kaWRhdGUgY29sb3JzIHByZXBhcmVkIGJ5IGZpbmRfbmVhcmJ5X2NvbG9ycy4KKyAqIFJldHVybiB0aGUgaW5kZXhlcyBvZiB0aGUgY2xvc2VzdCBlbnRyaWVzIGluIHRoZSBiZXN0Y29sb3JbXSBhcnJheS4KKyAqIFRoaXMgcm91dGluZSB1c2VzIFRob21hcycgaW5jcmVtZW50YWwgZGlzdGFuY2UgY2FsY3VsYXRpb24gbWV0aG9kIHRvCisgKiBmaW5kIHRoZSBkaXN0YW5jZSBmcm9tIGEgY29sb3JtYXAgZW50cnkgdG8gc3VjY2Vzc2l2ZSBjZWxscyBpbiB0aGUgYm94LgorICovCit7CisgIGludCBpYzAsIGljMSwgaWMyOworICBpbnQgaSwgaWNvbG9yOworICByZWdpc3RlciBKTE9ORyAqYnB0cjsgICAgICAgICAvKiBwb2ludGVyIGludG8gYmVzdGRpc3RbXSBhcnJheSAqLworICBKU0FNUExFICpjcHRyOyAgICAgICAgICAgICAgICAvKiBwb2ludGVyIGludG8gYmVzdGNvbG9yW10gYXJyYXkgKi8KKyAgSkxPTkcgZGlzdDAsIGRpc3QxOyAgICAgICAgICAgLyogaW5pdGlhbCBkaXN0YW5jZSB2YWx1ZXMgKi8KKyAgcmVnaXN0ZXIgSkxPTkcgZGlzdDI7ICAgICAgICAgLyogY3VycmVudCBkaXN0YW5jZSBpbiBpbm5lciBsb29wICovCisgIEpMT05HIHh4MCwgeHgxOyAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGluY3JlbWVudHMgKi8KKyAgcmVnaXN0ZXIgSkxPTkcgeHgyOworICBKTE9ORyBpbmMwLCBpbmMxLCBpbmMyOyAgICAgICAvKiBpbml0aWFsIHZhbHVlcyBmb3IgaW5jcmVtZW50cyAqLworICAvKiBUaGlzIGFycmF5IGhvbGRzIHRoZSBkaXN0YW5jZSB0byB0aGUgbmVhcmVzdC1zby1mYXIgY29sb3IgZm9yIGVhY2ggY2VsbCAqLworICBKTE9ORyBiZXN0ZGlzdFtCT1hfQzBfRUxFTVMgKiBCT1hfQzFfRUxFTVMgKiBCT1hfQzJfRUxFTVNdOworCisgIC8qIEluaXRpYWxpemUgYmVzdC1kaXN0YW5jZSBmb3IgZWFjaCBjZWxsIG9mIHRoZSB1cGRhdGUgYm94ICovCisgIGJwdHIgPSBiZXN0ZGlzdDsKKyAgZm9yIChpID0gQk9YX0MwX0VMRU1TICogQk9YX0MxX0VMRU1TICogQk9YX0MyX0VMRU1TIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgKmJwdHIrKyA9IDB4N0ZGRkZGRkZMOworCisgIC8qIEZvciBlYWNoIGNvbG9yIHNlbGVjdGVkIGJ5IGZpbmRfbmVhcmJ5X2NvbG9ycywKKyAgICogY29tcHV0ZSBpdHMgZGlzdGFuY2UgdG8gdGhlIGNlbnRlciBvZiBlYWNoIGNlbGwgaW4gdGhlIGJveC4KKyAgICogSWYgdGhhdCdzIGxlc3MgdGhhbiBiZXN0LXNvLWZhciwgdXBkYXRlIGJlc3QgZGlzdGFuY2UgYW5kIGNvbG9yIG51bWJlci4KKyAgICovCisKKyAgLyogTm9taW5hbCBzdGVwcyBiZXR3ZWVuIGNlbGwgY2VudGVycyAoIngiIGluIFRob21hcyBhcnRpY2xlKSAqLworI2RlZmluZSBTVEVQX0MwICAoKDEgPDwgQzBfU0hJRlQpICogQzBfU0NBTEUpCisjZGVmaW5lIFNURVBfQzEgICgoMSA8PCBDMV9TSElGVCkgKiBDMV9TQ0FMRSkKKyNkZWZpbmUgU1RFUF9DMiAgKCgxIDw8IEMyX1NISUZUKSAqIEMyX1NDQUxFKQorCisgIGZvciAoaSA9IDA7IGkgPCBudW1jb2xvcnM7IGkrKykgeworICAgIGljb2xvciA9IEdFVEpTQU1QTEUoY29sb3JsaXN0W2ldKTsKKyAgICAvKiBDb21wdXRlIChzcXVhcmUgb2YpIGRpc3RhbmNlIGZyb20gbWluYzAvYzEvYzIgdG8gdGhpcyBjb2xvciAqLworICAgIGluYzAgPSAobWluYzAgLSBHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFswXVtpY29sb3JdKSkgKiBDMF9TQ0FMRTsKKyAgICBkaXN0MCA9IGluYzAgKiBpbmMwOworICAgIGluYzEgPSAobWluYzEgLSBHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFsxXVtpY29sb3JdKSkgKiBDMV9TQ0FMRTsKKyAgICBkaXN0MCArPSBpbmMxICogaW5jMTsKKyAgICBpbmMyID0gKG1pbmMyIC0gR0VUSlNBTVBMRShjaW5mby0+Y29sb3JtYXBbMl1baWNvbG9yXSkpICogQzJfU0NBTEU7CisgICAgZGlzdDAgKz0gaW5jMiAqIGluYzI7CisgICAgLyogRm9ybSB0aGUgaW5pdGlhbCBkaWZmZXJlbmNlIGluY3JlbWVudHMgKi8KKyAgICBpbmMwID0gaW5jMCAqICgyICogU1RFUF9DMCkgKyBTVEVQX0MwICogU1RFUF9DMDsKKyAgICBpbmMxID0gaW5jMSAqICgyICogU1RFUF9DMSkgKyBTVEVQX0MxICogU1RFUF9DMTsKKyAgICBpbmMyID0gaW5jMiAqICgyICogU1RFUF9DMikgKyBTVEVQX0MyICogU1RFUF9DMjsKKyAgICAvKiBOb3cgbG9vcCBvdmVyIGFsbCBjZWxscyBpbiBib3gsIHVwZGF0aW5nIGRpc3RhbmNlIHBlciBUaG9tYXMgbWV0aG9kICovCisgICAgYnB0ciA9IGJlc3RkaXN0OworICAgIGNwdHIgPSBiZXN0Y29sb3I7CisgICAgeHgwID0gaW5jMDsKKyAgICBmb3IgKGljMCA9IEJPWF9DMF9FTEVNUyAtIDE7IGljMCA+PSAwOyBpYzAtLSkgeworICAgICAgZGlzdDEgPSBkaXN0MDsKKyAgICAgIHh4MSA9IGluYzE7CisgICAgICBmb3IgKGljMSA9IEJPWF9DMV9FTEVNUyAtIDE7IGljMSA+PSAwOyBpYzEtLSkgeworICAgICAgICBkaXN0MiA9IGRpc3QxOworICAgICAgICB4eDIgPSBpbmMyOworICAgICAgICBmb3IgKGljMiA9IEJPWF9DMl9FTEVNUyAtIDE7IGljMiA+PSAwOyBpYzItLSkgeworICAgICAgICAgIGlmIChkaXN0MiA8ICpicHRyKSB7CisgICAgICAgICAgICAqYnB0ciA9IGRpc3QyOworICAgICAgICAgICAgKmNwdHIgPSAoSlNBTVBMRSlpY29sb3I7CisgICAgICAgICAgfQorICAgICAgICAgIGRpc3QyICs9IHh4MjsKKyAgICAgICAgICB4eDIgKz0gMiAqIFNURVBfQzIgKiBTVEVQX0MyOworICAgICAgICAgIGJwdHIrKzsKKyAgICAgICAgICBjcHRyKys7CisgICAgICAgIH0KKyAgICAgICAgZGlzdDEgKz0geHgxOworICAgICAgICB4eDEgKz0gMiAqIFNURVBfQzEgKiBTVEVQX0MxOworICAgICAgfQorICAgICAgZGlzdDAgKz0geHgwOworICAgICAgeHgwICs9IDIgKiBTVEVQX0MwICogU1RFUF9DMDsKKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZmlsbF9pbnZlcnNlX2NtYXAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGMwLCBpbnQgYzEsIGludCBjMikKKy8qIEZpbGwgdGhlIGludmVyc2UtY29sb3JtYXAgZW50cmllcyBpbiB0aGUgdXBkYXRlIGJveCB0aGF0IGNvbnRhaW5zICovCisvKiBoaXN0b2dyYW0gY2VsbCBjMC9jMS9jMi4gIChPbmx5IHRoYXQgb25lIGNlbGwgTVVTVCBiZSBmaWxsZWQsIGJ1dCAqLworLyogd2UgY2FuIGZpbGwgYXMgbWFueSBvdGhlcnMgYXMgd2Ugd2lzaC4pICovCit7CisgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpY2luZm8tPmNxdWFudGl6ZTsKKyAgaGlzdDNkIGhpc3RvZ3JhbSA9IGNxdWFudGl6ZS0+aGlzdG9ncmFtOworICBpbnQgbWluYzAsIG1pbmMxLCBtaW5jMjsgICAgICAvKiBsb3dlciBsZWZ0IGNvcm5lciBvZiB1cGRhdGUgYm94ICovCisgIGludCBpYzAsIGljMSwgaWMyOworICByZWdpc3RlciBKU0FNUExFICpjcHRyOyAgICAgICAvKiBwb2ludGVyIGludG8gYmVzdGNvbG9yW10gYXJyYXkgKi8KKyAgcmVnaXN0ZXIgaGlzdHB0ciBjYWNoZXA7ICAgICAgLyogcG9pbnRlciBpbnRvIG1haW4gY2FjaGUgYXJyYXkgKi8KKyAgLyogVGhpcyBhcnJheSBsaXN0cyB0aGUgY2FuZGlkYXRlIGNvbG9ybWFwIGluZGV4ZXMuICovCisgIEpTQU1QTEUgY29sb3JsaXN0W01BWE5VTUNPTE9SU107CisgIGludCBudW1jb2xvcnM7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYW5kaWRhdGUgY29sb3JzICovCisgIC8qIFRoaXMgYXJyYXkgaG9sZHMgdGhlIGFjdHVhbGx5IGNsb3Nlc3QgY29sb3JtYXAgaW5kZXggZm9yIGVhY2ggY2VsbC4gKi8KKyAgSlNBTVBMRSBiZXN0Y29sb3JbQk9YX0MwX0VMRU1TICogQk9YX0MxX0VMRU1TICogQk9YX0MyX0VMRU1TXTsKKworICAvKiBDb252ZXJ0IGNlbGwgY29vcmRpbmF0ZXMgdG8gdXBkYXRlIGJveCBJRCAqLworICBjMCA+Pj0gQk9YX0MwX0xPRzsKKyAgYzEgPj49IEJPWF9DMV9MT0c7CisgIGMyID4+PSBCT1hfQzJfTE9HOworCisgIC8qIENvbXB1dGUgdHJ1ZSBjb29yZGluYXRlcyBvZiB1cGRhdGUgYm94J3Mgb3JpZ2luIGNvcm5lci4KKyAgICogQWN0dWFsbHkgd2UgY29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNlbnRlciBvZiB0aGUgY29ybmVyCisgICAqIGhpc3RvZ3JhbSBjZWxsLCB3aGljaCBhcmUgdGhlIGxvd2VyIGJvdW5kcyBvZiB0aGUgdm9sdW1lIHdlIGNhcmUgYWJvdXQuCisgICAqLworICBtaW5jMCA9IChjMCA8PCBCT1hfQzBfU0hJRlQpICsgKCgxIDw8IEMwX1NISUZUKSA+PiAxKTsKKyAgbWluYzEgPSAoYzEgPDwgQk9YX0MxX1NISUZUKSArICgoMSA8PCBDMV9TSElGVCkgPj4gMSk7CisgIG1pbmMyID0gKGMyIDw8IEJPWF9DMl9TSElGVCkgKyAoKDEgPDwgQzJfU0hJRlQpID4+IDEpOworCisgIC8qIERldGVybWluZSB3aGljaCBjb2xvcm1hcCBlbnRyaWVzIGFyZSBjbG9zZSBlbm91Z2ggdG8gYmUgY2FuZGlkYXRlcworICAgKiBmb3IgdGhlIG5lYXJlc3QgZW50cnkgdG8gc29tZSBjZWxsIGluIHRoZSB1cGRhdGUgYm94LgorICAgKi8KKyAgbnVtY29sb3JzID0gZmluZF9uZWFyYnlfY29sb3JzKGNpbmZvLCBtaW5jMCwgbWluYzEsIG1pbmMyLCBjb2xvcmxpc3QpOworCisgIC8qIERldGVybWluZSB0aGUgYWN0dWFsbHkgbmVhcmVzdCBjb2xvcnMuICovCisgIGZpbmRfYmVzdF9jb2xvcnMoY2luZm8sIG1pbmMwLCBtaW5jMSwgbWluYzIsIG51bWNvbG9ycywgY29sb3JsaXN0LAorICAgICAgICAgICAgICAgICAgIGJlc3Rjb2xvcik7CisKKyAgLyogU2F2ZSB0aGUgYmVzdCBjb2xvciBudW1iZXJzIChwbHVzIDEpIGluIHRoZSBtYWluIGNhY2hlIGFycmF5ICovCisgIGMwIDw8PSBCT1hfQzBfTE9HOyAgICAgICAgICAgIC8qIGNvbnZlcnQgSUQgYmFjayB0byBiYXNlIGNlbGwgaW5kZXhlcyAqLworICBjMSA8PD0gQk9YX0MxX0xPRzsKKyAgYzIgPDw9IEJPWF9DMl9MT0c7CisgIGNwdHIgPSBiZXN0Y29sb3I7CisgIGZvciAoaWMwID0gMDsgaWMwIDwgQk9YX0MwX0VMRU1TOyBpYzArKykgeworICAgIGZvciAoaWMxID0gMDsgaWMxIDwgQk9YX0MxX0VMRU1TOyBpYzErKykgeworICAgICAgY2FjaGVwID0gJmhpc3RvZ3JhbVtjMCArIGljMF1bYzEgKyBpYzFdW2MyXTsKKyAgICAgIGZvciAoaWMyID0gMDsgaWMyIDwgQk9YX0MyX0VMRU1TOyBpYzIrKykgeworICAgICAgICAqY2FjaGVwKysgPSAoaGlzdGNlbGwpKEdFVEpTQU1QTEUoKmNwdHIrKykgKyAxKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCisvKgorICogTWFwIHNvbWUgcm93cyBvZiBwaXhlbHMgdG8gdGhlIG91dHB1dCBjb2xvcm1hcHBlZCByZXByZXNlbnRhdGlvbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Bhc3MyX25vX2RpdGhlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKy8qIFRoaXMgdmVyc2lvbiBwZXJmb3JtcyBubyBkaXRoZXJpbmcgKi8KK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworICBoaXN0M2QgaGlzdG9ncmFtID0gY3F1YW50aXplLT5oaXN0b2dyYW07CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIGhpc3RwdHIgY2FjaGVwOworICByZWdpc3RlciBpbnQgYzAsIGMxLCBjMjsKKyAgaW50IHJvdzsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gd2lkdGggPSBjaW5mby0+b3V0cHV0X3dpZHRoOworCisgIGZvciAocm93ID0gMDsgcm93IDwgbnVtX3Jvd3M7IHJvdysrKSB7CisgICAgaW5wdHIgPSBpbnB1dF9idWZbcm93XTsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW3Jvd107CisgICAgZm9yIChjb2wgPSB3aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIC8qIGdldCBwaXhlbCB2YWx1ZSBhbmQgaW5kZXggaW50byB0aGUgY2FjaGUgKi8KKyAgICAgIGMwID0gR0VUSlNBTVBMRSgqaW5wdHIrKykgPj4gQzBfU0hJRlQ7CisgICAgICBjMSA9IEdFVEpTQU1QTEUoKmlucHRyKyspID4+IEMxX1NISUZUOworICAgICAgYzIgPSBHRVRKU0FNUExFKCppbnB0cisrKSA+PiBDMl9TSElGVDsKKyAgICAgIGNhY2hlcCA9ICZoaXN0b2dyYW1bYzBdW2MxXVtjMl07CisgICAgICAvKiBJZiB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgY29sb3IgYmVmb3JlLCBmaW5kIG5lYXJlc3QgY29sb3JtYXAgZW50cnkgKi8KKyAgICAgIC8qIGFuZCB1cGRhdGUgdGhlIGNhY2hlICovCisgICAgICBpZiAoKmNhY2hlcCA9PSAwKQorICAgICAgICBmaWxsX2ludmVyc2VfY21hcChjaW5mbywgYzAsIGMxLCBjMik7CisgICAgICAvKiBOb3cgZW1pdCB0aGUgY29sb3JtYXAgaW5kZXggZm9yIHRoaXMgY2VsbCAqLworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpKCpjYWNoZXAgLSAxKTsKKyAgICB9CisgIH0KK30KKworCitNRVRIT0RERUYodm9pZCkKK3Bhc3MyX2ZzX2RpdGhlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKy8qIFRoaXMgdmVyc2lvbiBwZXJmb3JtcyBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nICovCit7CisgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpY2luZm8tPmNxdWFudGl6ZTsKKyAgaGlzdDNkIGhpc3RvZ3JhbSA9IGNxdWFudGl6ZS0+aGlzdG9ncmFtOworICByZWdpc3RlciBMT0NGU0VSUk9SIGN1cjAsIGN1cjEsIGN1cjI7IC8qIGN1cnJlbnQgZXJyb3Igb3IgcGl4ZWwgdmFsdWUgKi8KKyAgTE9DRlNFUlJPUiBiZWxvd2VycjAsIGJlbG93ZXJyMSwgYmVsb3dlcnIyOyAvKiBlcnJvciBmb3IgcGl4ZWwgYmVsb3cgY3VyICovCisgIExPQ0ZTRVJST1IgYnByZXZlcnIwLCBicHJldmVycjEsIGJwcmV2ZXJyMjsgLyogZXJyb3IgZm9yIGJlbG93L3ByZXYgY29sICovCisgIHJlZ2lzdGVyIEZTRVJSUFRSIGVycm9ycHRyOyAgIC8qID0+IGZzZXJyb3JzW10gYXQgY29sdW1uIGJlZm9yZSBjdXJyZW50ICovCisgIEpTQU1QUk9XIGlucHRyOyAgICAgICAgICAgICAgIC8qID0+IGN1cnJlbnQgaW5wdXQgcGl4ZWwgKi8KKyAgSlNBTVBST1cgb3V0cHRyOyAgICAgICAgICAgICAgLyogPT4gY3VycmVudCBvdXRwdXQgcGl4ZWwgKi8KKyAgaGlzdHB0ciBjYWNoZXA7CisgIGludCBkaXI7ICAgICAgICAgICAgICAgICAgICAgIC8qICsxIG9yIC0xIGRlcGVuZGluZyBvbiBkaXJlY3Rpb24gKi8KKyAgaW50IGRpcjM7ICAgICAgICAgICAgICAgICAgICAgLyogMypkaXIsIGZvciBhZHZhbmNpbmcgaW5wdHIgJiBlcnJvcnB0ciAqLworICBpbnQgcm93OworICBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiB3aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsKKyAgaW50ICplcnJvcl9saW1pdCA9IGNxdWFudGl6ZS0+ZXJyb3JfbGltaXRlcjsKKyAgSlNBTVBST1cgY29sb3JtYXAwID0gY2luZm8tPmNvbG9ybWFwWzBdOworICBKU0FNUFJPVyBjb2xvcm1hcDEgPSBjaW5mby0+Y29sb3JtYXBbMV07CisgIEpTQU1QUk9XIGNvbG9ybWFwMiA9IGNpbmZvLT5jb2xvcm1hcFsyXTsKKyAgU0hJRlRfVEVNUFMKKworICBmb3IgKHJvdyA9IDA7IHJvdyA8IG51bV9yb3dzOyByb3crKykgeworICAgIGlucHRyID0gaW5wdXRfYnVmW3Jvd107CisgICAgb3V0cHRyID0gb3V0cHV0X2J1Zltyb3ddOworICAgIGlmIChjcXVhbnRpemUtPm9uX29kZF9yb3cpIHsKKyAgICAgIC8qIHdvcmsgcmlnaHQgdG8gbGVmdCBpbiB0aGlzIHJvdyAqLworICAgICAgaW5wdHIgKz0gKHdpZHRoIC0gMSkgKiAzOyAvKiBzbyBwb2ludCB0byByaWdodG1vc3QgcGl4ZWwgKi8KKyAgICAgIG91dHB0ciArPSB3aWR0aCAtIDE7CisgICAgICBkaXIgPSAtMTsKKyAgICAgIGRpcjMgPSAtMzsKKyAgICAgIGVycm9ycHRyID0gY3F1YW50aXplLT5mc2Vycm9ycyArICh3aWR0aCArIDEpICogMzsgLyogPT4gZW50cnkgYWZ0ZXIgbGFzdCBjb2x1bW4gKi8KKyAgICAgIGNxdWFudGl6ZS0+b25fb2RkX3JvdyA9IEZBTFNFOyAvKiBmbGlwIGZvciBuZXh0IHRpbWUgKi8KKyAgICB9IGVsc2UgeworICAgICAgLyogd29yayBsZWZ0IHRvIHJpZ2h0IGluIHRoaXMgcm93ICovCisgICAgICBkaXIgPSAxOworICAgICAgZGlyMyA9IDM7CisgICAgICBlcnJvcnB0ciA9IGNxdWFudGl6ZS0+ZnNlcnJvcnM7IC8qID0+IGVudHJ5IGJlZm9yZSBmaXJzdCByZWFsIGNvbHVtbiAqLworICAgICAgY3F1YW50aXplLT5vbl9vZGRfcm93ID0gVFJVRTsgLyogZmxpcCBmb3IgbmV4dCB0aW1lICovCisgICAgfQorICAgIC8qIFByZXNldCBlcnJvciB2YWx1ZXM6IG5vIGVycm9yIHByb3BhZ2F0ZWQgdG8gZmlyc3QgcGl4ZWwgZnJvbSBsZWZ0ICovCisgICAgY3VyMCA9IGN1cjEgPSBjdXIyID0gMDsKKyAgICAvKiBhbmQgbm8gZXJyb3IgcHJvcGFnYXRlZCB0byByb3cgYmVsb3cgeWV0ICovCisgICAgYmVsb3dlcnIwID0gYmVsb3dlcnIxID0gYmVsb3dlcnIyID0gMDsKKyAgICBicHJldmVycjAgPSBicHJldmVycjEgPSBicHJldmVycjIgPSAwOworCisgICAgZm9yIChjb2wgPSB3aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIC8qIGN1ck4gaG9sZHMgdGhlIGVycm9yIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcHJldmlvdXMgcGl4ZWwgb24gdGhlCisgICAgICAgKiBjdXJyZW50IGxpbmUuICBBZGQgdGhlIGVycm9yIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcHJldmlvdXMgbGluZQorICAgICAgICogdG8gZm9ybSB0aGUgY29tcGxldGUgZXJyb3IgY29ycmVjdGlvbiB0ZXJtIGZvciB0aGlzIHBpeGVsLCBhbmQKKyAgICAgICAqIHJvdW5kIHRoZSBlcnJvciB0ZXJtICh3aGljaCBpcyBleHByZXNzZWQgKiAxNikgdG8gYW4gaW50ZWdlci4KKyAgICAgICAqIFJJR0hUX1NISUZUIHJvdW5kcyB0b3dhcmRzIG1pbnVzIGluZmluaXR5LCBzbyBhZGRpbmcgOCBpcyBjb3JyZWN0CisgICAgICAgKiBmb3IgZWl0aGVyIHNpZ24gb2YgdGhlIGVycm9yIHZhbHVlLgorICAgICAgICogTm90ZTogZXJyb3JwdHIgcG9pbnRzIHRvICpwcmV2aW91cyogY29sdW1uJ3MgYXJyYXkgZW50cnkuCisgICAgICAgKi8KKyAgICAgIGN1cjAgPSBSSUdIVF9TSElGVChjdXIwICsgZXJyb3JwdHJbZGlyMyArIDBdICsgOCwgNCk7CisgICAgICBjdXIxID0gUklHSFRfU0hJRlQoY3VyMSArIGVycm9ycHRyW2RpcjMgKyAxXSArIDgsIDQpOworICAgICAgY3VyMiA9IFJJR0hUX1NISUZUKGN1cjIgKyBlcnJvcnB0cltkaXIzICsgMl0gKyA4LCA0KTsKKyAgICAgIC8qIExpbWl0IHRoZSBlcnJvciB1c2luZyB0cmFuc2ZlciBmdW5jdGlvbiBzZXQgYnkgaW5pdF9lcnJvcl9saW1pdC4KKyAgICAgICAqIFNlZSBjb21tZW50cyB3aXRoIGluaXRfZXJyb3JfbGltaXQgZm9yIHJhdGlvbmFsZS4KKyAgICAgICAqLworICAgICAgY3VyMCA9IGVycm9yX2xpbWl0W2N1cjBdOworICAgICAgY3VyMSA9IGVycm9yX2xpbWl0W2N1cjFdOworICAgICAgY3VyMiA9IGVycm9yX2xpbWl0W2N1cjJdOworICAgICAgLyogRm9ybSBwaXhlbCB2YWx1ZSArIGVycm9yLCBhbmQgcmFuZ2UtbGltaXQgdG8gMC4uTUFYSlNBTVBMRS4KKyAgICAgICAqIFRoZSBtYXhpbXVtIGVycm9yIGlzICstIE1BWEpTQU1QTEUgKG9yIGxlc3Mgd2l0aCBlcnJvciBsaW1pdGluZyk7CisgICAgICAgKiB0aGlzIHNldHMgdGhlIHJlcXVpcmVkIHNpemUgb2YgdGhlIHJhbmdlX2xpbWl0IGFycmF5LgorICAgICAgICovCisgICAgICBjdXIwICs9IEdFVEpTQU1QTEUoaW5wdHJbMF0pOworICAgICAgY3VyMSArPSBHRVRKU0FNUExFKGlucHRyWzFdKTsKKyAgICAgIGN1cjIgKz0gR0VUSlNBTVBMRShpbnB0clsyXSk7CisgICAgICBjdXIwID0gR0VUSlNBTVBMRShyYW5nZV9saW1pdFtjdXIwXSk7CisgICAgICBjdXIxID0gR0VUSlNBTVBMRShyYW5nZV9saW1pdFtjdXIxXSk7CisgICAgICBjdXIyID0gR0VUSlNBTVBMRShyYW5nZV9saW1pdFtjdXIyXSk7CisgICAgICAvKiBJbmRleCBpbnRvIHRoZSBjYWNoZSB3aXRoIGFkanVzdGVkIHBpeGVsIHZhbHVlICovCisgICAgICBjYWNoZXAgPQorICAgICAgICAmaGlzdG9ncmFtW2N1cjAgPj4gQzBfU0hJRlRdW2N1cjEgPj4gQzFfU0hJRlRdW2N1cjIgPj4gQzJfU0hJRlRdOworICAgICAgLyogSWYgd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIGNvbG9yIGJlZm9yZSwgZmluZCBuZWFyZXN0IGNvbG9ybWFwICovCisgICAgICAvKiBlbnRyeSBhbmQgdXBkYXRlIHRoZSBjYWNoZSAqLworICAgICAgaWYgKCpjYWNoZXAgPT0gMCkKKyAgICAgICAgZmlsbF9pbnZlcnNlX2NtYXAoY2luZm8sIGN1cjAgPj4gQzBfU0hJRlQsIGN1cjEgPj4gQzFfU0hJRlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cjIgPj4gQzJfU0hJRlQpOworICAgICAgLyogTm93IGVtaXQgdGhlIGNvbG9ybWFwIGluZGV4IGZvciB0aGlzIGNlbGwgKi8KKyAgICAgIHsKKyAgICAgICAgcmVnaXN0ZXIgaW50IHBpeGNvZGUgPSAqY2FjaGVwIC0gMTsKKyAgICAgICAgKm91dHB0ciA9IChKU0FNUExFKXBpeGNvZGU7CisgICAgICAgIC8qIENvbXB1dGUgcmVwcmVzZW50YXRpb24gZXJyb3IgZm9yIHRoaXMgcGl4ZWwgKi8KKyAgICAgICAgY3VyMCAtPSBHRVRKU0FNUExFKGNvbG9ybWFwMFtwaXhjb2RlXSk7CisgICAgICAgIGN1cjEgLT0gR0VUSlNBTVBMRShjb2xvcm1hcDFbcGl4Y29kZV0pOworICAgICAgICBjdXIyIC09IEdFVEpTQU1QTEUoY29sb3JtYXAyW3BpeGNvZGVdKTsKKyAgICAgIH0KKyAgICAgIC8qIENvbXB1dGUgZXJyb3IgZnJhY3Rpb25zIHRvIGJlIHByb3BhZ2F0ZWQgdG8gYWRqYWNlbnQgcGl4ZWxzLgorICAgICAgICogQWRkIHRoZXNlIGludG8gdGhlIHJ1bm5pbmcgc3VtcywgYW5kIHNpbXVsdGFuZW91c2x5IHNoaWZ0IHRoZQorICAgICAgICogbmV4dC1saW5lIGVycm9yIHN1bXMgbGVmdCBieSAxIGNvbHVtbi4KKyAgICAgICAqLworICAgICAgeworICAgICAgICByZWdpc3RlciBMT0NGU0VSUk9SIGJuZXh0ZXJyOworCisgICAgICAgIGJuZXh0ZXJyID0gY3VyMDsgICAgICAgIC8qIFByb2Nlc3MgY29tcG9uZW50IDAgKi8KKyAgICAgICAgZXJyb3JwdHJbMF0gPSAoRlNFUlJPUikoYnByZXZlcnIwICsgY3VyMCAqIDMpOworICAgICAgICBicHJldmVycjAgPSBiZWxvd2VycjAgKyBjdXIwICogNTsKKyAgICAgICAgYmVsb3dlcnIwID0gYm5leHRlcnI7CisgICAgICAgIGN1cjAgKj0gNzsKKyAgICAgICAgYm5leHRlcnIgPSBjdXIxOyAgICAgICAgLyogUHJvY2VzcyBjb21wb25lbnQgMSAqLworICAgICAgICBlcnJvcnB0clsxXSA9IChGU0VSUk9SKShicHJldmVycjEgKyBjdXIxICogMyk7CisgICAgICAgIGJwcmV2ZXJyMSA9IGJlbG93ZXJyMSArIGN1cjEgKiA1OworICAgICAgICBiZWxvd2VycjEgPSBibmV4dGVycjsKKyAgICAgICAgY3VyMSAqPSA3OworICAgICAgICBibmV4dGVyciA9IGN1cjI7ICAgICAgICAvKiBQcm9jZXNzIGNvbXBvbmVudCAyICovCisgICAgICAgIGVycm9ycHRyWzJdID0gKEZTRVJST1IpKGJwcmV2ZXJyMiArIGN1cjIgKiAzKTsKKyAgICAgICAgYnByZXZlcnIyID0gYmVsb3dlcnIyICsgY3VyMiAqIDU7CisgICAgICAgIGJlbG93ZXJyMiA9IGJuZXh0ZXJyOworICAgICAgICBjdXIyICo9IDc7CisgICAgICB9CisgICAgICAvKiBBdCB0aGlzIHBvaW50IGN1ck4gY29udGFpbnMgdGhlIDcvMTYgZXJyb3IgdmFsdWUgdG8gYmUgcHJvcGFnYXRlZAorICAgICAgICogdG8gdGhlIG5leHQgcGl4ZWwgb24gdGhlIGN1cnJlbnQgbGluZSwgYW5kIGFsbCB0aGUgZXJyb3JzIGZvciB0aGUKKyAgICAgICAqIG5leHQgbGluZSBoYXZlIGJlZW4gc2hpZnRlZCBvdmVyLiAgV2UgYXJlIHRoZXJlZm9yZSByZWFkeSB0byBtb3ZlIG9uLgorICAgICAgICovCisgICAgICBpbnB0ciArPSBkaXIzOyAgICAgICAgICAgIC8qIEFkdmFuY2UgcGl4ZWwgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICAgIG91dHB0ciArPSBkaXI7CisgICAgICBlcnJvcnB0ciArPSBkaXIzOyAgICAgICAgIC8qIGFkdmFuY2UgZXJyb3JwdHIgdG8gY3VycmVudCBjb2x1bW4gKi8KKyAgICB9CisgICAgLyogUG9zdC1sb29wIGNsZWFudXA6IHdlIG11c3QgdW5sb2FkIHRoZSBmaW5hbCBlcnJvciB2YWx1ZXMgaW50byB0aGUKKyAgICAgKiBmaW5hbCBmc2Vycm9yc1tdIGVudHJ5LiAgTm90ZSB3ZSBuZWVkIG5vdCB1bmxvYWQgYmVsb3dlcnJOIGJlY2F1c2UKKyAgICAgKiBpdCBpcyBmb3IgdGhlIGR1bW15IGNvbHVtbiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGFjdHVhbCBhcnJheS4KKyAgICAgKi8KKyAgICBlcnJvcnB0clswXSA9IChGU0VSUk9SKWJwcmV2ZXJyMDsgLyogdW5sb2FkIHByZXYgZXJycyBpbnRvIGFycmF5ICovCisgICAgZXJyb3JwdHJbMV0gPSAoRlNFUlJPUilicHJldmVycjE7CisgICAgZXJyb3JwdHJbMl0gPSAoRlNFUlJPUilicHJldmVycjI7CisgIH0KK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZXJyb3ItbGltaXRpbmcgdHJhbnNmZXIgZnVuY3Rpb24gKGxvb2t1cCB0YWJsZSkuCisgKiBUaGUgcmF3IEYtUyBlcnJvciBjb21wdXRhdGlvbiBjYW4gcG90ZW50aWFsbHkgY29tcHV0ZSBlcnJvciB2YWx1ZXMgb2YgdXAgdG8KKyAqICstIE1BWEpTQU1QTEUuICBCdXQgd2Ugd2FudCB0aGUgbWF4aW11bSBjb3JyZWN0aW9uIGFwcGxpZWQgdG8gYSBwaXhlbCB0byBiZQorICogbXVjaCBsZXNzLCBvdGhlcndpc2Ugb2J2aW91c2x5IHdyb25nIHBpeGVscyB3aWxsIGJlIGNyZWF0ZWQuICAoVHlwaWNhbAorICogZWZmZWN0cyBpbmNsdWRlIHdlaXJkIGZyaW5nZXMgYXQgY29sb3ItYXJlYSBib3VuZGFyaWVzLCBpc29sYXRlZCBicmlnaHQKKyAqIHBpeGVscyBpbiBhIGRhcmsgYXJlYSwgZXRjLikgIFRoZSBzdGFuZGFyZCBhZHZpY2UgZm9yIGF2b2lkaW5nIHRoaXMgcHJvYmxlbQorICogaXMgdG8gZW5zdXJlIHRoYXQgdGhlICJjb3JuZXJzIiBvZiB0aGUgY29sb3IgY3ViZSBhcmUgYWxsb2NhdGVkIGFzIG91dHB1dAorICogY29sb3JzOyB0aGVuIHJlcGVhdGVkIGVycm9ycyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24gY2Fubm90IGNhdXNlIGNhc2NhZGluZworICogZXJyb3IgYnVpbGR1cC4gIEhvd2V2ZXIsIHRoYXQgb25seSBwcmV2ZW50cyB0aGUgZXJyb3IgZnJvbSBnZXR0aW5nCisgKiBjb21wbGV0ZWx5IG91dCBvZiBoYW5kOyBBYXJvbiBHaWxlcyByZXBvcnRzIHRoYXQgZXJyb3IgbGltaXRpbmcgaW1wcm92ZXMKKyAqIHRoZSByZXN1bHRzIGV2ZW4gd2l0aCBjb3JuZXIgY29sb3JzIGFsbG9jYXRlZC4KKyAqIEEgc2ltcGxlIGNsYW1waW5nIG9mIHRoZSBlcnJvciB2YWx1ZXMgdG8gYWJvdXQgKy0gTUFYSlNBTVBMRS84IHdvcmtzIHByZXR0eQorICogd2VsbCwgYnV0IHRoZSBzbW9vdGhlciB0cmFuc2ZlciBmdW5jdGlvbiB1c2VkIGJlbG93IGlzIGV2ZW4gYmV0dGVyLiAgVGhhbmtzCisgKiB0byBBYXJvbiBHaWxlcyBmb3IgdGhpcyBpZGVhLgorICovCisKK0xPQ0FMKHZvaWQpCitpbml0X2Vycm9yX2xpbWl0KGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBBbGxvY2F0ZSBhbmQgZmlsbCBpbiB0aGUgZXJyb3JfbGltaXRlciB0YWJsZSAqLworeworICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKWNpbmZvLT5jcXVhbnRpemU7CisgIGludCAqdGFibGU7CisgIGludCBpbiwgb3V0OworCisgIHRhYmxlID0gKGludCAqKSgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCAoTUFYSlNBTVBMRSAqIDIgKyAxKSAqIHNpemVvZihpbnQpKTsKKyAgdGFibGUgKz0gTUFYSlNBTVBMRTsgICAgICAgICAgLyogc28gY2FuIGluZGV4IC1NQVhKU0FNUExFIC4uICtNQVhKU0FNUExFICovCisgIGNxdWFudGl6ZS0+ZXJyb3JfbGltaXRlciA9IHRhYmxlOworCisjZGVmaW5lIFNURVBTSVpFICAoKE1BWEpTQU1QTEUgKyAxKSAvIDE2KQorICAvKiBNYXAgZXJyb3JzIDE6MSB1cCB0byArLSBNQVhKU0FNUExFLzE2ICovCisgIG91dCA9IDA7CisgIGZvciAoaW4gPSAwOyBpbiA8IFNURVBTSVpFOyBpbisrLCBvdXQrKykgeworICAgIHRhYmxlW2luXSA9IG91dDsgIHRhYmxlWy1pbl0gPSAtb3V0OworICB9CisgIC8qIE1hcCBlcnJvcnMgMToyIHVwIHRvICstIDMqTUFYSlNBTVBMRS8xNiAqLworICBmb3IgKDsgaW4gPCBTVEVQU0laRSAqIDM7IGluKyssIG91dCArPSAoaW4gJiAxKSA/IDAgOiAxKSB7CisgICAgdGFibGVbaW5dID0gb3V0OyAgdGFibGVbLWluXSA9IC1vdXQ7CisgIH0KKyAgLyogQ2xhbXAgdGhlIHJlc3QgdG8gZmluYWwgb3V0IHZhbHVlICh3aGljaCBpcyAoTUFYSlNBTVBMRSsxKS84KSAqLworICBmb3IgKDsgaW4gPD0gTUFYSlNBTVBMRTsgaW4rKykgeworICAgIHRhYmxlW2luXSA9IG91dDsgIHRhYmxlWy1pbl0gPSAtb3V0OworICB9CisjdW5kZWYgU1RFUFNJWkUKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgZWFjaCBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX3Bhc3MxKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpY2luZm8tPmNxdWFudGl6ZTsKKworICAvKiBTZWxlY3QgdGhlIHJlcHJlc2VudGF0aXZlIGNvbG9ycyBhbmQgZmlsbCBpbiBjaW5mby0+Y29sb3JtYXAgKi8KKyAgY2luZm8tPmNvbG9ybWFwID0gY3F1YW50aXplLT5zdl9jb2xvcm1hcDsKKyAgc2VsZWN0X2NvbG9ycyhjaW5mbywgY3F1YW50aXplLT5kZXNpcmVkKTsKKyAgLyogRm9yY2UgbmV4dCBwYXNzIHRvIHplcm8gdGhlIGNvbG9yIGluZGV4IHRhYmxlICovCisgIGNxdWFudGl6ZS0+bmVlZHNfemVyb2VkID0gVFJVRTsKK30KKworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzMihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBubyB3b3JrICovCit9CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGVhY2ggcHJvY2Vzc2luZyBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzc18yX3F1YW50KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNfcHJlX3NjYW4pCit7CisgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpY2luZm8tPmNxdWFudGl6ZTsKKyAgaGlzdDNkIGhpc3RvZ3JhbSA9IGNxdWFudGl6ZS0+aGlzdG9ncmFtOworICBpbnQgaTsKKworICAvKiBPbmx5IEYtUyBkaXRoZXJpbmcgb3Igbm8gZGl0aGVyaW5nIGlzIHN1cHBvcnRlZC4gKi8KKyAgLyogSWYgdXNlciBhc2tzIGZvciBvcmRlcmVkIGRpdGhlciwgZ2l2ZSBoaW0gRi1TLiAqLworICBpZiAoY2luZm8tPmRpdGhlcl9tb2RlICE9IEpESVRIRVJfTk9ORSkKKyAgICBjaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX0ZTOworCisgIGlmIChpc19wcmVfc2NhbikgeworICAgIC8qIFNldCB1cCBtZXRob2QgcG9pbnRlcnMgKi8KKyAgICBjcXVhbnRpemUtPnB1Yi5jb2xvcl9xdWFudGl6ZSA9IHByZXNjYW5fcXVhbnRpemU7CisgICAgY3F1YW50aXplLT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzczE7CisgICAgY3F1YW50aXplLT5uZWVkc196ZXJvZWQgPSBUUlVFOyAvKiBBbHdheXMgemVybyBoaXN0b2dyYW0gKi8KKyAgfSBlbHNlIHsKKyAgICAvKiBTZXQgdXAgbWV0aG9kIHBvaW50ZXJzICovCisgICAgaWYgKGNpbmZvLT5kaXRoZXJfbW9kZSA9PSBKRElUSEVSX0ZTKQorICAgICAgY3F1YW50aXplLT5wdWIuY29sb3JfcXVhbnRpemUgPSBwYXNzMl9mc19kaXRoZXI7CisgICAgZWxzZQorICAgICAgY3F1YW50aXplLT5wdWIuY29sb3JfcXVhbnRpemUgPSBwYXNzMl9ub19kaXRoZXI7CisgICAgY3F1YW50aXplLT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzczI7CisKKyAgICAvKiBNYWtlIHN1cmUgY29sb3IgY291bnQgaXMgYWNjZXB0YWJsZSAqLworICAgIGkgPSBjaW5mby0+YWN0dWFsX251bWJlcl9vZl9jb2xvcnM7CisgICAgaWYgKGkgPCAxKQorICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfUVVBTlRfRkVXX0NPTE9SUywgMSk7CisgICAgaWYgKGkgPiBNQVhOVU1DT0xPUlMpCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9RVUFOVF9NQU5ZX0NPTE9SUywgTUFYTlVNQ09MT1JTKTsKKworICAgIGlmIChjaW5mby0+ZGl0aGVyX21vZGUgPT0gSkRJVEhFUl9GUykgeworICAgICAgc2l6ZV90IGFycmF5c2l6ZSA9CisgICAgICAgIChzaXplX3QpKChjaW5mby0+b3V0cHV0X3dpZHRoICsgMikgKiAoMyAqIHNpemVvZihGU0VSUk9SKSkpOworICAgICAgLyogQWxsb2NhdGUgRmxveWQtU3RlaW5iZXJnIHdvcmtzcGFjZSBpZiB3ZSBkaWRuJ3QgYWxyZWFkeS4gKi8KKyAgICAgIGlmIChjcXVhbnRpemUtPmZzZXJyb3JzID09IE5VTEwpCisgICAgICAgIGNxdWFudGl6ZS0+ZnNlcnJvcnMgPSAoRlNFUlJQVFIpKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIGFycmF5c2l6ZSk7CisgICAgICAvKiBJbml0aWFsaXplIHRoZSBwcm9wYWdhdGVkIGVycm9ycyB0byB6ZXJvLiAqLworICAgICAganplcm9fZmFyKCh2b2lkICopY3F1YW50aXplLT5mc2Vycm9ycywgYXJyYXlzaXplKTsKKyAgICAgIC8qIE1ha2UgdGhlIGVycm9yLWxpbWl0IHRhYmxlIGlmIHdlIGRpZG4ndCBhbHJlYWR5LiAqLworICAgICAgaWYgKGNxdWFudGl6ZS0+ZXJyb3JfbGltaXRlciA9PSBOVUxMKQorICAgICAgICBpbml0X2Vycm9yX2xpbWl0KGNpbmZvKTsKKyAgICAgIGNxdWFudGl6ZS0+b25fb2RkX3JvdyA9IEZBTFNFOworICAgIH0KKworICB9CisgIC8qIFplcm8gdGhlIGhpc3RvZ3JhbSBvciBpbnZlcnNlIGNvbG9yIG1hcCwgaWYgbmVjZXNzYXJ5ICovCisgIGlmIChjcXVhbnRpemUtPm5lZWRzX3plcm9lZCkgeworICAgIGZvciAoaSA9IDA7IGkgPCBISVNUX0MwX0VMRU1TOyBpKyspIHsKKyAgICAgIGp6ZXJvX2Zhcigodm9pZCAqKWhpc3RvZ3JhbVtpXSwKKyAgICAgICAgICAgICAgICBISVNUX0MxX0VMRU1TICogSElTVF9DMl9FTEVNUyAqIHNpemVvZihoaXN0Y2VsbCkpOworICAgIH0KKyAgICBjcXVhbnRpemUtPm5lZWRzX3plcm9lZCA9IEZBTFNFOworICB9Cit9CisKKworLyoKKyAqIFN3aXRjaCB0byBhIG5ldyBleHRlcm5hbCBjb2xvcm1hcCBiZXR3ZWVuIG91dHB1dCBwYXNzZXMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCituZXdfY29sb3JfbWFwXzJfcXVhbnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0ciljaW5mby0+Y3F1YW50aXplOworCisgIC8qIFJlc2V0IHRoZSBpbnZlcnNlIGNvbG9yIG1hcCAqLworICBjcXVhbnRpemUtPm5lZWRzX3plcm9lZCA9IFRSVUU7Cit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciAyLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfMnBhc3NfcXVhbnRpemVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplOworICBpbnQgaTsKKworICBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihteV9jcXVhbnRpemVyKSk7CisgIGNpbmZvLT5jcXVhbnRpemUgPSAoc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyICopY3F1YW50aXplOworICBjcXVhbnRpemUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc18yX3F1YW50OworICBjcXVhbnRpemUtPnB1Yi5uZXdfY29sb3JfbWFwID0gbmV3X2NvbG9yX21hcF8yX3F1YW50OworICBjcXVhbnRpemUtPmZzZXJyb3JzID0gTlVMTDsgICAvKiBmbGFnIG9wdGlvbmFsIGFycmF5cyBub3QgYWxsb2NhdGVkICovCisgIGNxdWFudGl6ZS0+ZXJyb3JfbGltaXRlciA9IE5VTEw7CisKKyAgLyogTWFrZSBzdXJlIGpkbWFzdGVyIGRpZG4ndCBnaXZlIG1lIGEgY2FzZSBJIGNhbid0IGhhbmRsZSAqLworICBpZiAoY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzICE9IDMpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RJTVBMKTsKKworICAvKiBBbGxvY2F0ZSB0aGUgaGlzdG9ncmFtL2ludmVyc2UgY29sb3JtYXAgc3RvcmFnZSAqLworICBjcXVhbnRpemUtPmhpc3RvZ3JhbSA9IChoaXN0M2QpKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIEhJU1RfQzBfRUxFTVMgKiBzaXplb2YoaGlzdDJkKSk7CisgIGZvciAoaSA9IDA7IGkgPCBISVNUX0MwX0VMRU1TOyBpKyspIHsKKyAgICBjcXVhbnRpemUtPmhpc3RvZ3JhbVtpXSA9IChoaXN0MmQpKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICBISVNUX0MxX0VMRU1TICogSElTVF9DMl9FTEVNUyAqIHNpemVvZihoaXN0Y2VsbCkpOworICB9CisgIGNxdWFudGl6ZS0+bmVlZHNfemVyb2VkID0gVFJVRTsgLyogaGlzdG9ncmFtIGlzIGdhcmJhZ2Ugbm93ICovCisKKyAgLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIGNvbXBsZXRlZCBjb2xvcm1hcCwgaWYgcmVxdWlyZWQuCisgICAqIFdlIGRvIHRoaXMgbm93IHNpbmNlIGl0IG1heSBhZmZlY3QgdGhlIG1lbW9yeSBtYW5hZ2VyJ3Mgc3BhY2UKKyAgICogY2FsY3VsYXRpb25zLgorICAgKi8KKyAgaWYgKGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQpIHsKKyAgICAvKiBNYWtlIHN1cmUgY29sb3IgY291bnQgaXMgYWNjZXB0YWJsZSAqLworICAgIGludCBkZXNpcmVkID0gY2luZm8tPmRlc2lyZWRfbnVtYmVyX29mX2NvbG9yczsKKyAgICAvKiBMb3dlciBib3VuZCBvbiAjIG9mIGNvbG9ycyAuLi4gc29tZXdoYXQgYXJiaXRyYXJ5IGFzIGxvbmcgYXMgPiAwICovCisgICAgaWYgKGRlc2lyZWQgPCA4KQorICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfUVVBTlRfRkVXX0NPTE9SUywgOCk7CisgICAgLyogTWFrZSBzdXJlIGNvbG9ybWFwIGluZGV4ZXMgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IEpTQU1QTEVzICovCisgICAgaWYgKGRlc2lyZWQgPiBNQVhOVU1DT0xPUlMpCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9RVUFOVF9NQU5ZX0NPTE9SUywgTUFYTlVNQ09MT1JTKTsKKyAgICBjcXVhbnRpemUtPnN2X2NvbG9ybWFwID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIChKRElNRU5TSU9OKWRlc2lyZWQsIChKRElNRU5TSU9OKTMpOworICAgIGNxdWFudGl6ZS0+ZGVzaXJlZCA9IGRlc2lyZWQ7CisgIH0gZWxzZQorICAgIGNxdWFudGl6ZS0+c3ZfY29sb3JtYXAgPSBOVUxMOworCisgIC8qIE9ubHkgRi1TIGRpdGhlcmluZyBvciBubyBkaXRoZXJpbmcgaXMgc3VwcG9ydGVkLiAqLworICAvKiBJZiB1c2VyIGFza3MgZm9yIG9yZGVyZWQgZGl0aGVyLCBnaXZlIGhpbSBGLVMuICovCisgIGlmIChjaW5mby0+ZGl0aGVyX21vZGUgIT0gSkRJVEhFUl9OT05FKQorICAgIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfRlM7CisKKyAgLyogQWxsb2NhdGUgRmxveWQtU3RlaW5iZXJnIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkuCisgICAqIFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCB1bnRpbCBwYXNzIDIsIGJ1dCBhZ2FpbiBpdCBtYXkgYWZmZWN0IHRoZSBtZW1vcnkKKyAgICogbWFuYWdlcidzIHNwYWNlIGNhbGN1bGF0aW9ucy4gIEFsdGhvdWdoIHdlIHdpbGwgY29wZSB3aXRoIGEgbGF0ZXIgY2hhbmdlCisgICAqIGluIGRpdGhlcl9tb2RlLCB3ZSBkbyBub3QgcHJvbWlzZSB0byBob25vciBtYXhfbWVtb3J5X3RvX3VzZSBpZgorICAgKiBkaXRoZXJfbW9kZSBjaGFuZ2VzLgorICAgKi8KKyAgaWYgKGNpbmZvLT5kaXRoZXJfbW9kZSA9PSBKRElUSEVSX0ZTKSB7CisgICAgY3F1YW50aXplLT5mc2Vycm9ycyA9IChGU0VSUlBUUikoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgIChzaXplX3QpKChjaW5mby0+b3V0cHV0X3dpZHRoICsgMikgKiAoMyAqIHNpemVvZihGU0VSUk9SKSkpKTsKKyAgICAvKiBNaWdodCBhcyB3ZWxsIGNyZWF0ZSB0aGUgZXJyb3ItbGltaXRpbmcgdGFibGUgdG9vLiAqLworICAgIGluaXRfZXJyb3JfbGltaXQoY2luZm8pOworICB9Cit9CisKKyNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pzaW1kLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc2ltZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTJiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc2ltZC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICoganNpbWQuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYsIDIwMTgsIE1hdHRoaWV1IERhcmJvaXMuCisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKgorICovCisKKyNpbmNsdWRlICJqY2h1ZmYuaCIgICAgICAgICAgICAgLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpjcGh1ZmYuYyAqLworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5fcmdiX3ljYyh2b2lkKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9yZ2JfZ3JheSh2b2lkKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl95Y2NfcmdiKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX3ljY19yZ2I1NjUodm9pZCk7CitFWFRFUk4oaW50KSBqc2ltZF9jX2Nhbl9udWxsX2NvbnZlcnQodm9pZCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfcmdiX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2NfbnVsbF9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2gydjFfZG93bnNhbXBsZSh2b2lkKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKworRVhURVJOKGludCkganNpbWRfY2FuX2gydjJfc21vb3RoX2Rvd25zYW1wbGUodm9pZCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX3Ntb290aF9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSh2b2lkKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2ludF91cHNhbXBsZSh2b2lkKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworRVhURVJOKHZvaWQpIGpzaW1kX2ludF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CisKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUodm9pZCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKworRVhURVJOKGludCkganNpbWRfY2FuX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKHZvaWQpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQpOworCitFWFRFUk4oSk9DVEVUICopIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkICpzdGF0ZSwgSk9DVEVUICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kZXJpdmVkX3RibCAqZGN0YmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICphY3RibCk7CisKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmUodm9pZCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmUKKyAgKGNvbnN0IEpDT0VGICpibG9jaywgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwgaW50IEFsLAorICAgSkNPRUYgKnZhbHVlcywgc2l6ZV90ICp6ZXJvYml0cyk7CisKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlKHZvaWQpOworCitFWFRFUk4oaW50KSBqc2ltZF9lbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlCisgIChjb25zdCBKQ09FRiAqYmxvY2ssIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LCBpbnQgU2wsIGludCBBbCwKKyAgIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cyk7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc2ltZF9ub25lLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc2ltZF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiNmM4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pzaW1kX25vbmUuYwpAQCAtMCwwICsxLDQxOCBAQAorLyoKKyAqIGpzaW1kX25vbmUuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExLCAyMDE0LCBELiBSLiBDb21tYW5kZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiwgMjAxOCwgTWF0dGhpZXUgRGFyYm9pcy4KKyAqCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc3R1YnMgZm9yIHdoZW4gdGhlcmUgaXMgbm8gU0lNRCBzdXBwb3J0IGF2YWlsYWJsZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianNpbWQuaCIKKyNpbmNsdWRlICJqZGN0LmgiCisjaW5jbHVkZSAianNpbWRkY3QuaCIKKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfeWNjKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3JnYl9ncmF5KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3ljY19yZ2Iodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYjU2NSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2NfY2FuX251bGxfY29udmVydCh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9yZ2JfeWNjX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NfbnVsbF9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZG93bnNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX2Rvd25zYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9zbW9vdGhfZG93bnNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfc21vb3RoX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pbnRfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaW50X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9tZXJnZWRfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wX2Zsb2F0KEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfaXNsb3codm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pZmFzdCh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfaXNsb3coRENURUxFTSAqZGF0YSkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0KERDVEVMRU0gKmRhdGEpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3F1YW50aXplKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3F1YW50aXplX2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLCBEQ1RFTEVNICp3b3Jrc3BhY2UpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemVfZmxvYXQoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8yeDIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF80eDQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF82eDYodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8xMngxMih2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfNHg0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF82eDYoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzEyeDEyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfaXNsb3codm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pZmFzdCh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaXNsb3coal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9pZmFzdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKEpPQ1RFVCAqKQoranNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwgSkNPRUZQVFIgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RfZGNfdmFsLCBjX2Rlcml2ZWRfdGJsICpkY3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsIHNpemVfdCAqemVyb2JpdHMpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmUoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cykKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc2ltZGRjdC5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanNpbWRkY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWVlOGNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanNpbWRkY3QuaApAQCAtMCwwICsxLDcwIEBACisvKgorICoganNpbWRkY3QuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKi8KKworRVhURVJOKGludCkganNpbWRfY2FuX2NvbnZzYW1wKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9jb252c2FtcF9mbG9hdChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5fZmRjdF9pc2xvdyh2b2lkKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9mZGN0X2lmYXN0KHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2ZkY3RfZmxvYXQodm9pZCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93KERDVEVMRU0gKmRhdGEpOworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfaWZhc3QoRENURUxFTSAqZGF0YSk7CitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKTsKKworRVhURVJOKGludCkganNpbWRfY2FuX3F1YW50aXplKHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX3F1YW50aXplX2Zsb2F0KHZvaWQpOworCitFWFRFUk4odm9pZCkganNpbWRfcXVhbnRpemUoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9mbG9hdChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF8yeDIodm9pZCk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF80eDQodm9pZCk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF82eDYodm9pZCk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF8xMngxMih2b2lkKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfMngyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF80eDQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0XzZ4NihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfMTJ4MTIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF9pc2xvdyh2b2lkKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9pZGN0X2lmYXN0KHZvaWQpOworRVhURVJOKGludCkganNpbWRfY2FuX2lkY3RfZmxvYXQodm9pZCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lzbG93KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lmYXN0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2pzdGRodWZmLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc3RkaHVmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmQ2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qc3RkaHVmZi5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICoganN0ZGh1ZmYuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDEzLCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gc2V0IHRoZSBkZWZhdWx0IEh1ZmZtYW4gdGFibGVzLCBpZiB0aGV5IGFyZQorICogbm90IGFscmVhZHkgc2V0LgorICovCisKKy8qCisgKiBIdWZmbWFuIHRhYmxlIHNldHVwIHJvdXRpbmVzCisgKi8KKworTE9DQUwodm9pZCkKK2FkZF9odWZmX3RhYmxlKGpfY29tbW9uX3B0ciBjaW5mbywgSkhVRkZfVEJMICoqaHRibHB0ciwgY29uc3QgVUlOVDggKmJpdHMsCisgICAgICAgICAgICAgICBjb25zdCBVSU5UOCAqdmFsKQorLyogRGVmaW5lIGEgSHVmZm1hbiB0YWJsZSAqLworeworICBpbnQgbnN5bWJvbHMsIGxlbjsKKworICBpZiAoKmh0YmxwdHIgPT0gTlVMTCkKKyAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZShjaW5mbyk7CisgIGVsc2UKKyAgICByZXR1cm47CisKKyAgLyogQ29weSB0aGUgbnVtYmVyLW9mLXN5bWJvbHMtb2YtZWFjaC1jb2RlLWxlbmd0aCBjb3VudHMgKi8KKyAgTUVNQ09QWSgoKmh0YmxwdHIpLT5iaXRzLCBiaXRzLCBzaXplb2YoKCpodGJscHRyKS0+Yml0cykpOworCisgIC8qIFZhbGlkYXRlIHRoZSBjb3VudHMuICBXZSBkbyB0aGlzIGhlcmUgbWFpbmx5IHNvIHdlIGNhbiBjb3B5IHRoZSByaWdodAorICAgKiBudW1iZXIgb2Ygc3ltYm9scyBmcm9tIHRoZSB2YWxbXSBhcnJheSwgd2l0aG91dCByaXNraW5nIG1hcmNoaW5nIG9mZgorICAgKiB0aGUgZW5kIG9mIG1lbW9yeS4gIGpjaHVmZi5jIHdpbGwgZG8gYSBtb3JlIHRob3JvdWdoIHRlc3QgbGF0ZXIuCisgICAqLworICBuc3ltYm9scyA9IDA7CisgIGZvciAobGVuID0gMTsgbGVuIDw9IDE2OyBsZW4rKykKKyAgICBuc3ltYm9scyArPSBiaXRzW2xlbl07CisgIGlmIChuc3ltYm9scyA8IDEgfHwgbnN5bWJvbHMgPiAyNTYpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisKKyAgTUVNQ09QWSgoKmh0YmxwdHIpLT5odWZmdmFsLCB2YWwsIG5zeW1ib2xzICogc2l6ZW9mKFVJTlQ4KSk7CisgIE1FTVpFUk8oJigoKmh0YmxwdHIpLT5odWZmdmFsW25zeW1ib2xzXSksICgyNTYgLSBuc3ltYm9scykgKiBzaXplb2YoVUlOVDgpKTsKKworICAvKiBJbml0aWFsaXplIHNlbnRfdGFibGUgRkFMU0Ugc28gdGFibGUgd2lsbCBiZSB3cml0dGVuIHRvIEpQRUcgZmlsZS4gKi8KKyAgKCpodGJscHRyKS0+c2VudF90YWJsZSA9IEZBTFNFOworfQorCisKK0xPQ0FMKHZvaWQpCitzdGRfaHVmZl90YWJsZXMoal9jb21tb25fcHRyIGNpbmZvKQorLyogU2V0IHVwIHRoZSBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyAoY2YuIEpQRUcgc3RhbmRhcmQgc2VjdGlvbiBLLjMpICovCisvKiBJTVBPUlRBTlQ6IHRoZXNlIGFyZSBvbmx5IHZhbGlkIGZvciA4LWJpdCBkYXRhIHByZWNpc2lvbiEgKi8KK3sKKyAgSkhVRkZfVEJMICoqZGNfaHVmZl90YmxfcHRycywgKiphY19odWZmX3RibF9wdHJzOworCisgIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2RjX2x1bWluYW5jZVsxN10gPSB7CisgICAgLyogMC1iYXNlICovIDAsIDAsIDEsIDUsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgfTsKKyAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9kY19sdW1pbmFuY2VbXSA9IHsKKyAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEKKyAgfTsKKworICBzdGF0aWMgY29uc3QgVUlOVDggYml0c19kY19jaHJvbWluYW5jZVsxN10gPSB7CisgICAgLyogMC1iYXNlICovIDAsIDAsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAKKyAgfTsKKyAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9kY19jaHJvbWluYW5jZVtdID0geworICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorICB9OworCisgIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2FjX2x1bWluYW5jZVsxN10gPSB7CisgICAgLyogMC1iYXNlICovIDAsIDAsIDIsIDEsIDMsIDMsIDIsIDQsIDMsIDUsIDUsIDQsIDQsIDAsIDAsIDEsIDB4N2QKKyAgfTsKKyAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9hY19sdW1pbmFuY2VbXSA9IHsKKyAgICAweDAxLCAweDAyLCAweDAzLCAweDAwLCAweDA0LCAweDExLCAweDA1LCAweDEyLAorICAgIDB4MjEsIDB4MzEsIDB4NDEsIDB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsIDB4MDcsCisgICAgMHgyMiwgMHg3MSwgMHgxNCwgMHgzMiwgMHg4MSwgMHg5MSwgMHhhMSwgMHgwOCwKKyAgICAweDIzLCAweDQyLCAweGIxLCAweGMxLCAweDE1LCAweDUyLCAweGQxLCAweGYwLAorICAgIDB4MjQsIDB4MzMsIDB4NjIsIDB4NzIsIDB4ODIsIDB4MDksIDB4MGEsIDB4MTYsCisgICAgMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNSwgMHgyNiwgMHgyNywgMHgyOCwKKyAgICAweDI5LCAweDJhLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LAorICAgIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksCisgICAgMHg0YSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwKKyAgICAweDVhLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LAorICAgIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksCisgICAgMHg3YSwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwKKyAgICAweDhhLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LCAweDk4LAorICAgIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisgICAgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwKKyAgICAweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLCAweGM0LCAweGM1LAorICAgIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsCisgICAgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwgMHhlMSwgMHhlMiwKKyAgICAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LCAweGU5LCAweGVhLAorICAgIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCisgICAgMHhmOSwgMHhmYQorICB9OworCisgIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2FjX2Nocm9taW5hbmNlWzE3XSA9IHsKKyAgICAvKiAwLWJhc2UgKi8gMCwgMCwgMiwgMSwgMiwgNCwgNCwgMywgNCwgNywgNSwgNCwgNCwgMCwgMSwgMiwgMHg3NworICB9OworICBzdGF0aWMgY29uc3QgVUlOVDggdmFsX2FjX2Nocm9taW5hbmNlW10gPSB7CisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMSwgMHgwNCwgMHgwNSwgMHgyMSwKKyAgICAweDMxLCAweDA2LCAweDEyLCAweDQxLCAweDUxLCAweDA3LCAweDYxLCAweDcxLAorICAgIDB4MTMsIDB4MjIsIDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsCisgICAgMHhhMSwgMHhiMSwgMHhjMSwgMHgwOSwgMHgyMywgMHgzMywgMHg1MiwgMHhmMCwKKyAgICAweDE1LCAweDYyLCAweDcyLCAweGQxLCAweDBhLCAweDE2LCAweDI0LCAweDM0LAorICAgIDB4ZTEsIDB4MjUsIDB4ZjEsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjYsCisgICAgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwKKyAgICAweDM5LCAweDNhLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorICAgIDB4NDksIDB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisgICAgMHg1OSwgMHg1YSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwKKyAgICAweDY5LCAweDZhLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorICAgIDB4NzksIDB4N2EsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisgICAgMHg4OCwgMHg4OSwgMHg4YSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKKyAgICAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LAorICAgIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsCisgICAgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywKKyAgICAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLAorICAgIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsCisgICAgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwKKyAgICAweGVhLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LAorICAgIDB4ZjksIDB4ZmEKKyAgfTsKKworICBpZiAoY2luZm8tPmlzX2RlY29tcHJlc3NvcikgeworICAgIGRjX2h1ZmZfdGJsX3B0cnMgPSAoKGpfZGVjb21wcmVzc19wdHIpY2luZm8pLT5kY19odWZmX3RibF9wdHJzOworICAgIGFjX2h1ZmZfdGJsX3B0cnMgPSAoKGpfZGVjb21wcmVzc19wdHIpY2luZm8pLT5hY19odWZmX3RibF9wdHJzOworICB9IGVsc2UgeworICAgIGRjX2h1ZmZfdGJsX3B0cnMgPSAoKGpfY29tcHJlc3NfcHRyKWNpbmZvKS0+ZGNfaHVmZl90YmxfcHRyczsKKyAgICBhY19odWZmX3RibF9wdHJzID0gKChqX2NvbXByZXNzX3B0ciljaW5mbyktPmFjX2h1ZmZfdGJsX3B0cnM7CisgIH0KKworICBhZGRfaHVmZl90YWJsZShjaW5mbywgJmRjX2h1ZmZfdGJsX3B0cnNbMF0sIGJpdHNfZGNfbHVtaW5hbmNlLAorICAgICAgICAgICAgICAgICB2YWxfZGNfbHVtaW5hbmNlKTsKKyAgYWRkX2h1ZmZfdGFibGUoY2luZm8sICZhY19odWZmX3RibF9wdHJzWzBdLCBiaXRzX2FjX2x1bWluYW5jZSwKKyAgICAgICAgICAgICAgICAgdmFsX2FjX2x1bWluYW5jZSk7CisgIGFkZF9odWZmX3RhYmxlKGNpbmZvLCAmZGNfaHVmZl90YmxfcHRyc1sxXSwgYml0c19kY19jaHJvbWluYW5jZSwKKyAgICAgICAgICAgICAgICAgdmFsX2RjX2Nocm9taW5hbmNlKTsKKyAgYWRkX2h1ZmZfdGFibGUoY2luZm8sICZhY19odWZmX3RibF9wdHJzWzFdLCBiaXRzX2FjX2Nocm9taW5hbmNlLAorICAgICAgICAgICAgICAgICB2YWxfYWNfY2hyb21pbmFuY2UpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanV0aWxzLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzViYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vanV0aWxzLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBqdXRpbHMuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUKKyAqIHJlbGV2YW50IHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGFibGVzIGFuZCBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgcm91dGluZXMgbmVlZGVkCisgKiBmb3IgYm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KKyAqIE5vdGUgd2UgcHJlZml4IGFsbCBnbG9iYWwgbmFtZXMgd2l0aCAiaiIgdG8gbWluaW1pemUgY29uZmxpY3RzIHdpdGgKKyAqIGEgc3Vycm91bmRpbmcgYXBwbGljYXRpb24uCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBqcGVnX3ppZ3phZ19vcmRlcltpXSBpcyB0aGUgemlnemFnLW9yZGVyIHBvc2l0aW9uIG9mIHRoZSBpJ3RoIGVsZW1lbnQKKyAqIG9mIGEgRENUIGJsb2NrIHJlYWQgaW4gbmF0dXJhbCBvcmRlciAobGVmdCB0byByaWdodCwgdG9wIHRvIGJvdHRvbSkuCisgKi8KKworI2lmIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHRhYmxlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQgaW4gdjZhICovCisKK2NvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcltEQ1RTSVpFMl0gPSB7CisgICAwLCAgMSwgIDUsICA2LCAxNCwgMTUsIDI3LCAyOCwKKyAgIDIsICA0LCAgNywgMTMsIDE2LCAyNiwgMjksIDQyLAorICAgMywgIDgsIDEyLCAxNywgMjUsIDMwLCA0MSwgNDMsCisgICA5LCAxMSwgMTgsIDI0LCAzMSwgNDAsIDQ0LCA1MywKKyAgMTAsIDE5LCAyMywgMzIsIDM5LCA0NSwgNTIsIDU0LAorICAyMCwgMjIsIDMzLCAzOCwgNDYsIDUxLCA1NSwgNjAsCisgIDIxLCAzNCwgMzcsIDQ3LCA1MCwgNTYsIDU5LCA2MSwKKyAgMzUsIDM2LCA0OCwgNDksIDU3LCA1OCwgNjIsIDYzCit9OworCisjZW5kaWYKKworLyoKKyAqIGpwZWdfbmF0dXJhbF9vcmRlcltpXSBpcyB0aGUgbmF0dXJhbC1vcmRlciBwb3NpdGlvbiBvZiB0aGUgaSd0aCBlbGVtZW50CisgKiBvZiB6aWd6YWcgb3JkZXIuCisgKgorICogV2hlbiByZWFkaW5nIGNvcnJ1cHRlZCBkYXRhLCB0aGUgSHVmZm1hbiBkZWNvZGVycyBjb3VsZCBhdHRlbXB0CisgKiB0byByZWZlcmVuY2UgYW4gZW50cnkgYmV5b25kIHRoZSBlbmQgb2YgdGhpcyBhcnJheSAoaWYgdGhlIGRlY29kZWQKKyAqIHplcm8gcnVuIGxlbmd0aCByZWFjaGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYmxvY2spLiAgVG8gcHJldmVudAorICogd2lsZCBzdG9yZXMgd2l0aG91dCBhZGRpbmcgYW4gaW5uZXItbG9vcCB0ZXN0LCB3ZSBwdXQgc29tZSBleHRyYQorICogIjYzInMgYWZ0ZXIgdGhlIHJlYWwgZW50cmllcy4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgZXh0cmEgY29lZmZpY2llbnQKKyAqIHRvIGJlIHN0b3JlZCBpbiBsb2NhdGlvbiA2MyBvZiB0aGUgYmxvY2ssIG5vdCBzb21ld2hlcmUgcmFuZG9tLgorICogVGhlIHdvcnN0IGNhc2Ugd291bGQgYmUgYSBydW4tbGVuZ3RoIG9mIDE1LCB3aGljaCBtZWFucyB3ZSBuZWVkIDE2CisgKiBmYWtlIGVudHJpZXMuCisgKi8KKworY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcltEQ1RTSVpFMiArIDE2XSA9IHsKKyAgMCwgIDEsICA4LCAxNiwgIDksICAyLCAgMywgMTAsCisgMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgIDQsICA1LAorIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwKKyAyNywgMjAsIDEzLCAgNiwgIDcsIDE0LCAyMSwgMjgsCisgMzUsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LAorIDI5LCAyMiwgMTUsIDIzLCAzMCwgMzcsIDQ0LCA1MSwKKyA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsCisgNTMsIDYwLCA2MSwgNTQsIDQ3LCA1NSwgNjIsIDYzLAorIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgLyogZXh0cmEgZW50cmllcyBmb3Igc2FmZXR5IGluIGRlY29kZXIgKi8KKyA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMKK307CisKKworLyoKKyAqIEFyaXRobWV0aWMgdXRpbGl0aWVzCisgKi8KKworR0xPQkFMKGxvbmcpCitqZGl2X3JvdW5kX3VwKGxvbmcgYSwgbG9uZyBiKQorLyogQ29tcHV0ZSBhL2Igcm91bmRlZCB1cCB0byBuZXh0IGludGVnZXIsIGllLCBjZWlsKGEvYikgKi8KKy8qIEFzc3VtZXMgYSA+PSAwLCBiID4gMCAqLworeworICByZXR1cm4gKGEgKyBiIC0gMUwpIC8gYjsKK30KKworCitHTE9CQUwobG9uZykKK2pyb3VuZF91cChsb25nIGEsIGxvbmcgYikKKy8qIENvbXB1dGUgYSByb3VuZGVkIHVwIHRvIG5leHQgbXVsdGlwbGUgb2YgYiwgaWUsIGNlaWwoYS9iKSpiICovCisvKiBBc3N1bWVzIGEgPj0gMCwgYiA+IDAgKi8KK3sKKyAgYSArPSBiIC0gMUw7CisgIHJldHVybiBhIC0gKGEgJSBiKTsKK30KKworCitHTE9CQUwodm9pZCkKK2pjb3B5X3NhbXBsZV9yb3dzKEpTQU1QQVJSQVkgaW5wdXRfYXJyYXksIGludCBzb3VyY2Vfcm93LAorICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYXJyYXksIGludCBkZXN0X3JvdywgaW50IG51bV9yb3dzLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1fY29scykKKy8qIENvcHkgc29tZSByb3dzIG9mIHNhbXBsZXMgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlci4KKyAqIG51bV9yb3dzIHJvd3MgYXJlIGNvcGllZCBmcm9tIGlucHV0X2FycmF5W3NvdXJjZV9yb3crK10KKyAqIHRvIG91dHB1dF9hcnJheVtkZXN0X3JvdysrXTsgdGhlc2UgYXJlYXMgbWF5IG92ZXJsYXAgZm9yIGR1cGxpY2F0aW9uLgorICogVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJyYXlzIG11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyBudW1fY29scy4KKyAqLworeworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBzaXplX3QgY291bnQgPSAoc2l6ZV90KShudW1fY29scyAqIHNpemVvZihKU0FNUExFKSk7CisgIHJlZ2lzdGVyIGludCByb3c7CisKKyAgaW5wdXRfYXJyYXkgKz0gc291cmNlX3JvdzsKKyAgb3V0cHV0X2FycmF5ICs9IGRlc3Rfcm93OworCisgIGZvciAocm93ID0gbnVtX3Jvd3M7IHJvdyA+IDA7IHJvdy0tKSB7CisgICAgaW5wdHIgPSAqaW5wdXRfYXJyYXkrKzsKKyAgICBvdXRwdHIgPSAqb3V0cHV0X2FycmF5Kys7CisgICAgTUVNQ09QWShvdXRwdHIsIGlucHRyLCBjb3VudCk7CisgIH0KK30KKworCitHTE9CQUwodm9pZCkKK2pjb3B5X2Jsb2NrX3JvdyhKQkxPQ0tST1cgaW5wdXRfcm93LCBKQkxPQ0tST1cgb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisvKiBDb3B5IGEgcm93IG9mIGNvZWZmaWNpZW50IGJsb2NrcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLiAqLworeworICBNRU1DT1BZKG91dHB1dF9yb3csIGlucHV0X3JvdywgbnVtX2Jsb2NrcyAqIChEQ1RTSVpFMiAqIHNpemVvZihKQ09FRikpKTsKK30KKworCitHTE9CQUwodm9pZCkKK2p6ZXJvX2Zhcih2b2lkICp0YXJnZXQsIHNpemVfdCBieXRlc3RvemVybykKKy8qIFplcm8gb3V0IGEgY2h1bmsgb2YgbWVtb3J5LiAqLworLyogVGhpcyBtaWdodCBiZSBzYW1wbGUtYXJyYXkgZGF0YSwgYmxvY2stYXJyYXkgZGF0YSwgb3IgYWxsb2NfbGFyZ2UgZGF0YS4gKi8KK3sKKyAgTUVNWkVSTyh0YXJnZXQsIGJ5dGVzdG96ZXJvKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2p2ZXJzaW9uLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMzlmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9qdmVyc2lvbi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBqdmVyc2lvbi5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMiwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTItMjAxOCwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHNvZnR3YXJlIHZlcnNpb24gaWRlbnRpZmljYXRpb24uCisgKi8KKworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorCisjZGVmaW5lIEpWRVJTSU9OICAgICAgICAiOGQgIDE1LUphbi0yMDEyIgorCisjZWxpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisKKyNkZWZpbmUgSlZFUlNJT04gICAgICAgICI3ICAyNy1KdW4tMjAwOSIKKworI2Vsc2UKKworI2RlZmluZSBKVkVSU0lPTiAgICAgICAgIjZiICAyNy1NYXItMTk5OCIKKworI2VuZGlmCisKKy8qCisgKiBOT1RFOiBJdCBpcyBvdXIgY29udmVudGlvbiB0byBwbGFjZSB0aGUgYXV0aG9ycyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICogLSBsaWJqcGVnLXR1cmJvIGF1dGhvcnMgKDIwMDktKSBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZSBkYXRlIG9mIHRoZWlyCisgKiAgIG1vc3QgcmVjZW50IGNvbnRyaWJ1dGlvbiB0byB0aGUgcHJvamVjdCwgdGhlbiBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGhlCisgKiAgIGRhdGUgb2YgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIHRvIHRoZSBwcm9qZWN0CisgKiAtIFVwc3RyZWFtIGF1dGhvcnMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgZGF0ZSBvZiB0aGUgZmlyc3QgaW5jbHVzaW9uIG9mCisgKiAgIHRoZWlyIGNvZGUKKyAqLworCisjZGVmaW5lIEpDT1BZUklHSFQgXAorICAiQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggRC4gUi4gQ29tbWFuZGVyXG4iIFwKKyAgIkNvcHlyaWdodCAoQykgMjAxMS0yMDE2IFNpYXJoZWkgU2lhbWFzaGthXG4iIFwKKyAgIkNvcHlyaWdodCAoQykgMjAxNS0yMDE2LCAyMDE4IE1hdHRoaWV1IERhcmJvaXNcbiIgXAorICAiQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uXG4iIFwKKyAgIkNvcHlyaWdodCAoQykgMjAxNSBHb29nbGUsIEluYy5cbiIgXAorICAiQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgTUlQUyBUZWNobm9sb2dpZXMsIEluYy5cbiIgXAorICAiQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkXG4iIFwKKyAgIkNvcHlyaWdodCAoQykgMjAwOS0yMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKVxuIiBcCisgICJDb3B5cmlnaHQgKEMpIDIwMDkgUGllcnJlIE9zc21hbiBmb3IgQ2VuZGlvIEFCXG4iIFwKKyAgIkNvcHlyaWdodCAoQykgMTk5OS0yMDA2IE1JWUFTQUtBIE1hc2FydVxuIiBcCisgICJDb3B5cmlnaHQgKEMpIDE5OTEtMjAxNiBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZyIKKworI2RlZmluZSBKQ09QWVJJR0hUX1NIT1JUIFwKKyAgIkNvcHlyaWdodCAoQykgMTk5MS0yMDE4IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgYW5kIG1hbnkgb3RoZXJzIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbGlianBlZy5neXAgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9saWJqcGVnLmd5cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM3ZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbGlianBlZy5neXAKQEAgLTAsMCArMSwxNjMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKK3sKKyAgJ3RhcmdldHMnOiBbCisgICAgeworICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYmpwZWcnLAorICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAorICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgJy4nLAorICAgICAgXSwKKyAgICAgICdkZWZpbmVzJzogWworICAgICAgICAnQk1QX1NVUFBPUlRFRCcsCisgICAgICAgICdQUE1fU1VQUE9SVEVEJworICAgICAgXSwKKyAgICAgICdzb3VyY2VzJzogWworICAgICAgICAnY2RqcGVnLmgnLAorICAgICAgICAnamFyaWNvbS5jJywKKyAgICAgICAgJ2pjYXBpbWluLmMnLAorICAgICAgICAnamNhcGlzdGQuYycsCisgICAgICAgICdqY2FyaXRoLmMnLAorICAgICAgICAnamNjb2VmY3QuYycsCisgICAgICAgICdqY2NvbG9yLmMnLAorICAgICAgICAnamNkY3RtZ3IuYycsCisgICAgICAgICdqY2h1ZmYuYycsCisgICAgICAgICdqY2h1ZmYuaCcsCisgICAgICAgICdqY2luaXQuYycsCisgICAgICAgICdqY21haW5jdC5jJywKKyAgICAgICAgJ2pjbWFya2VyLmMnLAorICAgICAgICAnamNtYXN0ZXIuYycsCisgICAgICAgICdqY29tYXBpLmMnLAorICAgICAgICAnamNvbmZpZy5oJywKKyAgICAgICAgJ2pjb25maWdpbnQuaCcsCisgICAgICAgICdqY3BhcmFtLmMnLAorICAgICAgICAnamNwaHVmZi5jJywKKyAgICAgICAgJ2pjcHJlcGN0LmMnLAorICAgICAgICAnamNzYW1wbGUuYycsCisgICAgICAgICdqY3RyYW5zLmMnLAorICAgICAgICAnamRhcGltaW4uYycsCisgICAgICAgICdqZGFwaXN0ZC5jJywKKyAgICAgICAgJ2pkYXJpdGguYycsCisgICAgICAgICdqZGF0YWRzdC5jJywKKyAgICAgICAgJ2pkYXRhZHN0LXRqLmMnLAorICAgICAgICAnamRhdGFzcmMuYycsCisgICAgICAgICdqZGF0YXNyYy10ai5jJywKKyAgICAgICAgJ2pkY29lZmN0LmMnLAorICAgICAgICAnamRjb2xvci5jJywKKyAgICAgICAgJ2pkY3QuaCcsCisgICAgICAgICdqZGRjdG1nci5jJywKKyAgICAgICAgJ2pkaHVmZi5jJywKKyAgICAgICAgJ2pkaHVmZi5oJywKKyAgICAgICAgJ2pkaW5wdXQuYycsCisgICAgICAgICdqZG1haW5jdC5jJywKKyAgICAgICAgJ2pkbWFya2VyLmMnLAorICAgICAgICAnamRtYXN0ZXIuYycsCisgICAgICAgICdqZG1lcmdlLmMnLAorICAgICAgICAnamRwaHVmZi5jJywKKyAgICAgICAgJ2pkcG9zdGN0LmMnLAorICAgICAgICAnamRzYW1wbGUuYycsCisgICAgICAgICdqZHRyYW5zLmMnLAorICAgICAgICAnamVycm9yLmMnLAorICAgICAgICAnamVycm9yLmgnLAorICAgICAgICAnamZkY3RmbHQuYycsCisgICAgICAgICdqZmRjdGZzdC5jJywKKyAgICAgICAgJ2pmZGN0aW50LmMnLAorICAgICAgICAnamlkY3RmbHQuYycsCisgICAgICAgICdqaWRjdGZzdC5jJywKKyAgICAgICAgJ2ppZGN0aW50LmMnLAorICAgICAgICAnamlkY3RyZWQuYycsCisgICAgICAgICdqaW5jbHVkZS5oJywKKyAgICAgICAgJ2ptZW1tZ3IuYycsCisgICAgICAgICdqbWVtbm9icy5jJywKKyAgICAgICAgJ2ptZW1zeXMuaCcsCisgICAgICAgICdqbW9yZWNmZy5oJywKKyAgICAgICAgJ2pwZWdpbnQuaCcsCisgICAgICAgICdqcGVnbGliLmgnLAorICAgICAgICAnanBlZ2xpYm1hbmdsZXIuaCcsCisgICAgICAgICdqcXVhbnQxLmMnLAorICAgICAgICAnanF1YW50Mi5jJywKKyAgICAgICAgJ2p1dGlscy5jJywKKyAgICAgICAgJ2p2ZXJzaW9uLmgnLAorICAgICAgICAncmRibXAuYycsCisgICAgICAgICdyZHBwbS5jJywKKyAgICAgICAgJ3RyYW5zdXBwLmgnLAorICAgICAgICAndHJhbnN1cHAuYycsCisgICAgICAgICd0dXJib2pwZWcuaCcsCisgICAgICAgICd0dXJib2pwZWcuYycsCisgICAgICAgICd3cmJtcC5jJywKKyAgICAgICAgJ3dycHBtLmMnLAorICAgICAgXSwKKyAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAjeDg2XzY0IHNwZWNpZmljIG9wdGltaXphdGlvbnMKKyAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAieDY0IicsIHsKKyAgICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qc2ltZGNwdS5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pmZGN0Zmx0LXNzZS5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pjY29sb3Itc3NlMi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pjZ3JheS1zc2UyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamNodWZmLXNzZTIuYXNtJywKKyAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qY3BodWZmLXNzZTIuYXNtJywKKyAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qY3NhbXBsZS1zc2UyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamRjb2xvci1zc2UyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamRtZXJnZS1zc2UyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamRzYW1wbGUtc3NlMi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pmZGN0ZnN0LXNzZTIuYXNtJywKKyAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZmRjdGludC1zc2UyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamlkY3RmbHQtc3NlMi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2ppZGN0ZnN0LXNzZTIuYXNtJywKKyAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qaWRjdGludC1zc2UyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamlkY3RyZWQtc3NlMi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pxdWFudGYtc3NlMi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pxdWFudGktc3NlMi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pjY29sb3ItYXZ4Mi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pjZ3JheS1hdngyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamNzYW1wbGUtYXZ4Mi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pkY29sb3ItYXZ4Mi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pkbWVyZ2UtYXZ4Mi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pkc2FtcGxlLWF2eDIuYXNtJywKKyAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZmRjdGludC1hdngyLmFzbScsCisgICAgICAgICAgICAnc2ltZC94ODZfNjQvamlkY3RpbnQtYXZ4Mi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pxdWFudGktYXZ4Mi5hc20nLAorICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pzaW1kLmMnLAorICAgICAgICAgICAgJ3NpbWQvanNpbWQuaCcsCisgICAgICAgICAgXSwKKyAgICAgICAgICAjcnVsZXMgZm9yIGFzc2VtYmxpbmcgLmFzbSBmaWxlcyB3aXRoIHlhcm4KKyAgICAgICAgICAncnVsZXMnOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICdydWxlX25hbWUnOiAnYXNzZW1ibGUnLAorICAgICAgICAgICAgICAnZXh0ZW5zaW9uJzogJ2FzbScsCisgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWyBdLAorICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICcuLi8uLi9vdXQvPChSVUxFX0lOUFVUX1JPT1QpLmFzbS5vJywKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWworICAgICAgICAgICAgICAgICAgICAneWFzbScsCisgICAgICAgICAgICAgICAgICAgICctREVMRicsCisgICAgICAgICAgICAgICAgICAgICctRF9feDg2XzY0X18nLAorICAgICAgICAgICAgICAgICAgICAnLURQSUMnLAorICAgICAgICAgICAgICAgICAgICAnLUlzaW1kL25hc20vJywKKyAgICAgICAgICAgICAgICAgICAgJy1Jc2ltZC94ODZfNjQvJywKKyAgICAgICAgICAgICAgICAgICAgJy1mJywKKyAgICAgICAgICAgICAgICAgICAgJ2VsZjY0JywKKyAgICAgICAgICAgICAgICAgICAgJy1vJywKKyAgICAgICAgICAgICAgICAgICAgIiRvdXQiLAorICAgICAgICAgICAgICAgICAgICAnPChSVUxFX0lOUFVUX1BBVEgpJywKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnOiAxLAorICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnQnVpbGRpbmcgPChSVUxFX0lOUFVUX1JPT1QpLmFzbS5vJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgXSwKKyAgICAgICAgICB9LAorICAgICAgICAgICNubyBvcHRpbWl6YXRpb25zCisgICAgICAgICAgeworICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICdqc2ltZC5oJywKKyAgICAgICAgICAgICAgJ2pzaW1kX25vbmUuYycKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9XQorICAgICAgXSwKKyAgICB9LAorICBdLAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2xpYmpwZWcubWFwLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbGlianBlZy5tYXAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0ODBkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2xpYmpwZWcubWFwLmluCkBAIC0wLDAgKzEsMTEgQEAKK0xJQkpQRUdUVVJCT19ASlBFR19MSUJfVkVSU0lPTl9ERUNJTUFMQCB7CisgIEBNRU1fU1JDRFNUX0ZVTkNUSU9OU0AKKyAgbG9jYWw6CisgICAganNpbWRfKjsKKyAgICBqY29uc3RfKjsKK307CisKK0xJQkpQRUdfQEpQRUdfTElCX1ZFUlNJT05fREVDSU1BTEAgeworICBnbG9iYWw6CisgICAgKjsKK307CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9saWJqcGVnLnR4dCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2xpYmpwZWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9saWJqcGVnLnR4dApAQCAtMCwwICsxLDMxNDMgQEAKK1VTSU5HIFRIRSBJSkcgSlBFRyBMSUJSQVJZCisKK1RoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMsIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLgorbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LTIwMTcsIEQuIFIuIENvbW1hbmRlci4KK0NvcHlyaWdodCAoQykgMjAxNSwgR29vZ2xlLCBJbmMuCitGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZyBmaWxlLgorCisKK1RoaXMgZmlsZSBkZXNjcmliZXMgaG93IHRvIHVzZSB0aGUgSUpHIEpQRUcgbGlicmFyeSB3aXRoaW4gYW4gYXBwbGljYXRpb24KK3Byb2dyYW0uICBSZWFkIGl0IGlmIHlvdSB3YW50IHRvIHdyaXRlIGEgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGxpYnJhcnkuCisKK1RoZSBmaWxlIGV4YW1wbGUudHh0IHByb3ZpZGVzIGhlYXZpbHkgY29tbWVudGVkIHNrZWxldG9uIGNvZGUgZm9yIGNhbGxpbmcgdGhlCitKUEVHIGxpYnJhcnkuICBBbHNvIHNlZSBqcGVnbGliLmggKHRoZSBpbmNsdWRlIGZpbGUgdG8gYmUgdXNlZCBieSBhcHBsaWNhdGlvbgorcHJvZ3JhbXMpIGZvciBmdWxsIGRldGFpbHMgYWJvdXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdHMuCitUaGUgbGlicmFyeSBzb3VyY2UgY29kZSwgb2YgY291cnNlLCBpcyB0aGUgdWx0aW1hdGUgcmVmZXJlbmNlLgorCitOb3RlIHRoYXQgdGhlcmUgaGF2ZSBiZWVuICptYWpvciogY2hhbmdlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBpbnRlcmZhY2UKK3ByZXNlbnRlZCBieSBJSkcgdmVyc2lvbiA0IGFuZCBlYXJsaWVyIHZlcnNpb25zLiAgVGhlIG9sZCBkZXNpZ24gaGFkIHNldmVyYWwKK2luaGVyZW50IGxpbWl0YXRpb25zLCBhbmQgaXQgaGFkIGFjY3VtdWxhdGVkIGEgbG90IG9mIGNydWZ0IGFzIHdlIGFkZGVkCitmZWF0dXJlcyB3aGlsZSB0cnlpbmcgdG8gbWluaW1pemUgYXBwbGljYXRpb24taW50ZXJmYWNlIGNoYW5nZXMuICBXZSBoYXZlCitzYWNyaWZpY2VkIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gdGhlIHZlcnNpb24gNSByZXdyaXRlLCBidXQgd2UgdGhpbmsgdGhlCitpbXByb3ZlbWVudHMganVzdGlmeSB0aGlzLgorCisKK1RBQkxFIE9GIENPTlRFTlRTCistLS0tLS0tLS0tLS0tLS0tLQorCitPdmVydmlldzoKKyAgICAgICAgRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5CisgICAgICAgIE91dGxpbmUgb2YgdHlwaWNhbCB1c2FnZQorQmFzaWMgbGlicmFyeSB1c2FnZToKKyAgICAgICAgRGF0YSBmb3JtYXRzCisgICAgICAgIENvbXByZXNzaW9uIGRldGFpbHMKKyAgICAgICAgRGVjb21wcmVzc2lvbiBkZXRhaWxzCisgICAgICAgIFBhcnRpYWwgaW1hZ2UgZGVjb21wcmVzc2lvbgorICAgICAgICBNZWNoYW5pY3Mgb2YgdXNhZ2U6IGluY2x1ZGUgZmlsZXMsIGxpbmtpbmcsIGV0YworQWR2YW5jZWQgZmVhdHVyZXM6CisgICAgICAgIENvbXByZXNzaW9uIHBhcmFtZXRlciBzZWxlY3Rpb24KKyAgICAgICAgRGVjb21wcmVzc2lvbiBwYXJhbWV0ZXIgc2VsZWN0aW9uCisgICAgICAgIFNwZWNpYWwgY29sb3Igc3BhY2VzCisgICAgICAgIEVycm9yIGhhbmRsaW5nCisgICAgICAgIENvbXByZXNzZWQgZGF0YSBoYW5kbGluZyAoc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtYW5hZ2VycykKKyAgICAgICAgSS9PIHN1c3BlbnNpb24KKyAgICAgICAgUHJvZ3Jlc3NpdmUgSlBFRyBzdXBwb3J0CisgICAgICAgIEJ1ZmZlcmVkLWltYWdlIG1vZGUKKyAgICAgICAgQWJicmV2aWF0ZWQgZGF0YXN0cmVhbXMgYW5kIG11bHRpcGxlIGltYWdlcworICAgICAgICBTcGVjaWFsIG1hcmtlcnMKKyAgICAgICAgSUNDIHByb2ZpbGVzCisgICAgICAgIFJhdyAoZG93bnNhbXBsZWQpIGltYWdlIGRhdGEKKyAgICAgICAgUmVhbGx5IHJhdyBkYXRhOiBEQ1QgY29lZmZpY2llbnRzCisgICAgICAgIFByb2dyZXNzIG1vbml0b3JpbmcKKyAgICAgICAgTWVtb3J5IG1hbmFnZW1lbnQKKyAgICAgICAgTWVtb3J5IHVzYWdlCisgICAgICAgIExpYnJhcnkgY29tcGlsZS10aW1lIG9wdGlvbnMKKyAgICAgICAgUG9ydGFiaWxpdHkgY29uc2lkZXJhdGlvbnMKKworWW91IHNob3VsZCByZWFkIGF0IGxlYXN0IHRoZSBvdmVydmlldyBhbmQgYmFzaWMgdXNhZ2Ugc2VjdGlvbnMgYmVmb3JlIHRyeWluZwordG8gcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LiAgVGhlIHNlY3Rpb25zIG9uIGFkdmFuY2VkIGZlYXR1cmVzIGNhbiBiZSByZWFkCitpZiBhbmQgd2hlbiB5b3UgbmVlZCB0aGVtLgorCisKK09WRVJWSUVXCis9PT09PT09PQorCitGdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgSUpHIEpQRUcgbGlicmFyeSBwcm92aWRlcyBDIGNvZGUgdG8gcmVhZCBhbmQgd3JpdGUgSlBFRy1jb21wcmVzc2VkIGltYWdlCitmaWxlcy4gIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBwcm9ncmFtIHJlY2VpdmVzIG9yIHN1cHBsaWVzIGltYWdlIGRhdGEgYQorc2NhbmxpbmUgYXQgYSB0aW1lLCB1c2luZyBhIHN0cmFpZ2h0Zm9yd2FyZCB1bmNvbXByZXNzZWQgaW1hZ2UgZm9ybWF0LiAgQWxsCitkZXRhaWxzIG9mIGNvbG9yIGNvbnZlcnNpb24gYW5kIG90aGVyIHByZXByb2Nlc3NpbmcvcG9zdHByb2Nlc3NpbmcgY2FuIGJlCitoYW5kbGVkIGJ5IHRoZSBsaWJyYXJ5LgorCitUaGUgbGlicmFyeSBpbmNsdWRlcyBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBjb2RlIHRoYXQgaXMgbm90IGNvdmVyZWQgYnkgdGhlCitKUEVHIHN0YW5kYXJkIGJ1dCBpcyBuZWNlc3NhcnkgZm9yIHR5cGljYWwgYXBwbGljYXRpb25zIG9mIEpQRUcuICBUaGVzZQorZnVuY3Rpb25zIHByZXByb2Nlc3MgdGhlIGltYWdlIGJlZm9yZSBKUEVHIGNvbXByZXNzaW9uIG9yIHBvc3Rwcm9jZXNzIGl0IGFmdGVyCitkZWNvbXByZXNzaW9uLiAgVGhleSBpbmNsdWRlIGNvbG9yc3BhY2UgY29udmVyc2lvbiwgZG93bnNhbXBsaW5nL3Vwc2FtcGxpbmcsCithbmQgY29sb3IgcXVhbnRpemF0aW9uLiAgVGhlIGFwcGxpY2F0aW9uIGluZGlyZWN0bHkgc2VsZWN0cyB1c2Ugb2YgdGhpcyBjb2RlCitieSBzcGVjaWZ5aW5nIHRoZSBmb3JtYXQgaW4gd2hpY2ggaXQgd2lzaGVzIHRvIHN1cHBseSBvciByZWNlaXZlIGltYWdlIGRhdGEuCitGb3IgZXhhbXBsZSwgaWYgY29sb3JtYXBwZWQgb3V0cHV0IGlzIHJlcXVlc3RlZCwgdGhlbiB0aGUgZGVjb21wcmVzc2lvbgorbGlicmFyeSBhdXRvbWF0aWNhbGx5IGludm9rZXMgY29sb3IgcXVhbnRpemF0aW9uLgorCitBIHdpZGUgcmFuZ2Ugb2YgcXVhbGl0eSB2cy4gc3BlZWQgdHJhZGVvZmZzIGFyZSBwb3NzaWJsZSBpbiBKUEVHIHByb2Nlc3NpbmcsCithbmQgZXZlbiBtb3JlIHNvIGluIGRlY29tcHJlc3Npb24gcG9zdHByb2Nlc3NpbmcuICBUaGUgZGVjb21wcmVzc2lvbiBsaWJyYXJ5Citwcm92aWRlcyBtdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb3ZlciBtb3N0IG9mIHRoZSB1c2VmdWwgdHJhZGVvZmZzLAorcmFuZ2luZyBmcm9tIHZlcnktaGlnaC1xdWFsaXR5IGRvd24gdG8gZmFzdC1wcmV2aWV3IG9wZXJhdGlvbi4gIE9uIHRoZQorY29tcHJlc3Npb24gc2lkZSB3ZSBoYXZlIGdlbmVyYWxseSBub3QgcHJvdmlkZWQgbG93LXF1YWxpdHkgY2hvaWNlcywgc2luY2UKK2NvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGxlc3MgdGltZS1jcml0aWNhbC4gIEl0IHNob3VsZCBiZSB1bmRlcnN0b29kIHRoYXQgdGhlCitsb3ctcXVhbGl0eSBtb2RlcyBtYXkgbm90IG1lZXQgdGhlIEpQRUcgc3RhbmRhcmQncyBhY2N1cmFjeSByZXF1aXJlbWVudHM7Citub25ldGhlbGVzcywgdGhleSBhcmUgdXNlZnVsIGZvciB2aWV3ZXJzLgorCitBIHdvcmQgYWJvdXQgZnVuY3Rpb25zICpub3QqIHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5LiAgV2UgaGFuZGxlIGEgc3Vic2V0IG9mCit0aGUgSVNPIEpQRUcgc3RhbmRhcmQ7IG1vc3QgYmFzZWxpbmUsIGV4dGVuZGVkLXNlcXVlbnRpYWwsIGFuZCBwcm9ncmVzc2l2ZQorSlBFRyBwcm9jZXNzZXMgYXJlIHN1cHBvcnRlZC4gIChPdXIgc3Vic2V0IGluY2x1ZGVzIGFsbCBmZWF0dXJlcyBub3cgaW4gY29tbW9uCit1c2UuKSAgVW5zdXBwb3J0ZWQgSVNPIG9wdGlvbnMgaW5jbHVkZToKKyAgICAgICAgKiBIaWVyYXJjaGljYWwgc3RvcmFnZQorICAgICAgICAqIExvc3NsZXNzIEpQRUcKKyAgICAgICAgKiBETkwgbWFya2VyCisgICAgICAgICogTm9uaW50ZWdyYWwgc3Vic2FtcGxpbmcgcmF0aW9zCitXZSBzdXBwb3J0IGJvdGggOC0gYW5kIDEyLWJpdCBkYXRhIHByZWNpc2lvbiwgYnV0IHRoaXMgaXMgYSBjb21waWxlLXRpbWUKK2Nob2ljZSByYXRoZXIgdGhhbiBhIHJ1bi10aW1lIGNob2ljZTsgaGVuY2UgaXQgaXMgZGlmZmljdWx0IHRvIHVzZSBib3RoCitwcmVjaXNpb25zIGluIGEgc2luZ2xlIGFwcGxpY2F0aW9uLgorCitCeSBpdHNlbGYsIHRoZSBsaWJyYXJ5IGhhbmRsZXMgb25seSBpbnRlcmNoYW5nZSBKUEVHIGRhdGFzdHJlYW1zIC0tLSBpbgorcGFydGljdWxhciB0aGUgd2lkZWx5IHVzZWQgSkZJRiBmaWxlIGZvcm1hdC4gIFRoZSBsaWJyYXJ5IGNhbiBiZSB1c2VkIGJ5CitzdXJyb3VuZGluZyBjb2RlIHRvIHByb2Nlc3MgaW50ZXJjaGFuZ2Ugb3IgYWJicmV2aWF0ZWQgSlBFRyBkYXRhc3RyZWFtcyB0aGF0CithcmUgZW1iZWRkZWQgaW4gbW9yZSBjb21wbGV4IGZpbGUgZm9ybWF0cy4gIChGb3IgZXhhbXBsZSwgdGhpcyBsaWJyYXJ5IGlzCit1c2VkIGJ5IHRoZSBmcmVlIExJQlRJRkYgbGlicmFyeSB0byBzdXBwb3J0IEpQRUcgY29tcHJlc3Npb24gaW4gVElGRi4pCisKKworT3V0bGluZSBvZiB0eXBpY2FsIHVzYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJvdWdoIG91dGxpbmUgb2YgYSBKUEVHIGNvbXByZXNzaW9uIG9wZXJhdGlvbiBpczoKKworICAgICAgICBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0CisgICAgICAgIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgY29tcHJlc3NlZCBkYXRhIChlZywgYSBmaWxlKQorICAgICAgICBTZXQgcGFyYW1ldGVycyBmb3IgY29tcHJlc3Npb24sIGluY2x1ZGluZyBpbWFnZSBzaXplICYgY29sb3JzcGFjZQorICAgICAgICBqcGVnX3N0YXJ0X2NvbXByZXNzKC4uLik7CisgICAgICAgIHdoaWxlIChzY2FuIGxpbmVzIHJlbWFpbiB0byBiZSB3cml0dGVuKQorICAgICAgICAgICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKC4uLik7CisgICAgICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKC4uLik7CisgICAgICAgIFJlbGVhc2UgdGhlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0CisKK0EgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QgaG9sZHMgcGFyYW1ldGVycyBhbmQgd29ya2luZyBzdGF0ZSBmb3IgdGhlIEpQRUcKK2xpYnJhcnkuICBXZSBtYWtlIGNyZWF0aW9uL2Rlc3RydWN0aW9uIG9mIHRoZSBvYmplY3Qgc2VwYXJhdGUgZnJvbSBzdGFydGluZworb3IgZmluaXNoaW5nIGNvbXByZXNzaW9uIG9mIGFuIGltYWdlOyB0aGUgc2FtZSBvYmplY3QgY2FuIGJlIHJlLXVzZWQgZm9yIGEKK3NlcmllcyBvZiBpbWFnZSBjb21wcmVzc2lvbiBvcGVyYXRpb25zLiAgVGhpcyBtYWtlcyBpdCBlYXN5IHRvIHJlLXVzZSB0aGUKK3NhbWUgcGFyYW1ldGVyIHNldHRpbmdzIGZvciBhIHNlcXVlbmNlIG9mIGltYWdlcy4gIFJlLXVzZSBvZiBhIEpQRUcgb2JqZWN0CithbHNvIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBwcm9jZXNzaW5nIGFiYnJldmlhdGVkIEpQRUcgZGF0YXN0cmVhbXMsCithcyBkaXNjdXNzZWQgbGF0ZXIuCisKK1RoZSBpbWFnZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc3VwcGxpZWQgdG8ganBlZ193cml0ZV9zY2FubGluZXMoKSBmcm9tCitpbi1tZW1vcnkgYnVmZmVycy4gIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBkb2luZyBmaWxlLXRvLWZpbGUgY29tcHJlc3Npb24sCityZWFkaW5nIGltYWdlIGRhdGEgZnJvbSB0aGUgc291cmNlIGZpbGUgaXMgdGhlIGFwcGxpY2F0aW9uJ3MgcmVzcG9uc2liaWxpdHkuCitUaGUgbGlicmFyeSBlbWl0cyBjb21wcmVzc2VkIGRhdGEgYnkgY2FsbGluZyBhICJkYXRhIGRlc3RpbmF0aW9uIG1hbmFnZXIiLAord2hpY2ggdHlwaWNhbGx5IHdpbGwgd3JpdGUgdGhlIGRhdGEgaW50byBhIGZpbGU7IGJ1dCB0aGUgYXBwbGljYXRpb24gY2FuCitwcm92aWRlIGl0cyBvd24gZGVzdGluYXRpb24gbWFuYWdlciB0byBkbyBzb21ldGhpbmcgZWxzZS4KKworU2ltaWxhcmx5LCB0aGUgcm91Z2ggb3V0bGluZSBvZiBhIEpQRUcgZGVjb21wcmVzc2lvbiBvcGVyYXRpb24gaXM6CisKKyAgICAgICAgQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0CisgICAgICAgIFNwZWNpZnkgdGhlIHNvdXJjZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIChlZywgYSBmaWxlKQorICAgICAgICBDYWxsIGpwZWdfcmVhZF9oZWFkZXIoKSB0byBvYnRhaW4gaW1hZ2UgaW5mbworICAgICAgICBTZXQgcGFyYW1ldGVycyBmb3IgZGVjb21wcmVzc2lvbgorICAgICAgICBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoLi4uKTsKKyAgICAgICAgd2hpbGUgKHNjYW4gbGluZXMgcmVtYWluIHRvIGJlIHJlYWQpCisgICAgICAgICAgICAgICAganBlZ19yZWFkX3NjYW5saW5lcyguLi4pOworICAgICAgICBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKC4uLik7CisgICAgICAgIFJlbGVhc2UgdGhlIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QKKworVGhpcyBpcyBjb21wYXJhYmxlIHRvIHRoZSBjb21wcmVzc2lvbiBvdXRsaW5lIGV4Y2VwdCB0aGF0IHJlYWRpbmcgdGhlCitkYXRhc3RyZWFtIGhlYWRlciBpcyBhIHNlcGFyYXRlIHN0ZXAuICBUaGlzIGlzIGhlbHBmdWwgYmVjYXVzZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGltYWdlJ3Mgc2l6ZSwgY29sb3JzcGFjZSwgZXRjIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBhcHBsaWNhdGlvbgorc2VsZWN0cyBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICBGb3IgZXhhbXBsZSwgdGhlIGFwcGxpY2F0aW9uIGNhbiBjaG9vc2UgYW4KK291dHB1dCBzY2FsaW5nIHJhdGlvIHRoYXQgd2lsbCBmaXQgdGhlIGltYWdlIGludG8gdGhlIGF2YWlsYWJsZSBzY3JlZW4gc2l6ZS4KKworVGhlIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYnRhaW5zIGNvbXByZXNzZWQgZGF0YSBieSBjYWxsaW5nIGEgZGF0YSBzb3VyY2UKK21hbmFnZXIsIHdoaWNoIHR5cGljYWxseSB3aWxsIHJlYWQgdGhlIGRhdGEgZnJvbSBhIGZpbGU7IGJ1dCBvdGhlciBiZWhhdmlvcnMKK2NhbiBiZSBvYnRhaW5lZCB3aXRoIGEgY3VzdG9tIHNvdXJjZSBtYW5hZ2VyLiAgRGVjb21wcmVzc2VkIGRhdGEgaXMgZGVsaXZlcmVkCitpbnRvIGluLW1lbW9yeSBidWZmZXJzIHBhc3NlZCB0byBqcGVnX3JlYWRfc2NhbmxpbmVzKCkuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGFib3J0IGFuIGluY29tcGxldGUgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBvcGVyYXRpb24KK2J5IGNhbGxpbmcganBlZ19hYm9ydCgpOyBvciwgaWYgeW91IGRvIG5vdCBuZWVkIHRvIHJldGFpbiB0aGUgSlBFRyBvYmplY3QsCitzaW1wbHkgcmVsZWFzZSBpdCBieSBjYWxsaW5nIGpwZWdfZGVzdHJveSgpLgorCitKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9iamVjdHMgYXJlIHR3byBzZXBhcmF0ZSBzdHJ1Y3QgdHlwZXMuCitIb3dldmVyLCB0aGV5IHNoYXJlIHNvbWUgY29tbW9uIGZpZWxkcywgYW5kIGNlcnRhaW4gcm91dGluZXMgc3VjaCBhcworanBlZ19kZXN0cm95KCkgY2FuIHdvcmsgb24gZWl0aGVyIHR5cGUgb2Ygb2JqZWN0LgorCitUaGUgSlBFRyBsaWJyYXJ5IGhhcyBubyBzdGF0aWMgdmFyaWFibGVzOiBhbGwgc3RhdGUgaXMgaW4gdGhlIGNvbXByZXNzaW9uCitvciBkZWNvbXByZXNzaW9uIG9iamVjdC4gIFRoZXJlZm9yZSBpdCBpcyBwb3NzaWJsZSB0byBwcm9jZXNzIG11bHRpcGxlCitjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvcGVyYXRpb25zIGNvbmN1cnJlbnRseSwgdXNpbmcgbXVsdGlwbGUgSlBFRworb2JqZWN0cy4KKworQm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhbiBpbmNyZW1lbnRhbCBtZW1vcnktdG8tCittZW1vcnkgZmFzaGlvbiwgaWYgc3VpdGFibGUgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXJzIGFyZSB1c2VkLiAgU2VlIHRoZQorc2VjdGlvbiBvbiAiSS9PIHN1c3BlbnNpb24iIGZvciBtb3JlIGRldGFpbHMuCisKKworQkFTSUMgTElCUkFSWSBVU0FHRQorPT09PT09PT09PT09PT09PT09PQorCitEYXRhIGZvcm1hdHMKKy0tLS0tLS0tLS0tLQorCitCZWZvcmUgZGl2aW5nIGludG8gcHJvY2VkdXJhbCBkZXRhaWxzLCBpdCBpcyBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgdGhlCitpbWFnZSBkYXRhIGZvcm1hdCB0aGF0IHRoZSBKUEVHIGxpYnJhcnkgZXhwZWN0cyBvciByZXR1cm5zLgorCitUaGUgc3RhbmRhcmQgaW5wdXQgaW1hZ2UgZm9ybWF0IGlzIGEgcmVjdGFuZ3VsYXIgYXJyYXkgb2YgcGl4ZWxzLCB3aXRoIGVhY2gKK3BpeGVsIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2YgImNvbXBvbmVudCIgb3IgInNhbXBsZSIgdmFsdWVzIChjb2xvcgorY2hhbm5lbHMpLiAgWW91IG11c3Qgc3BlY2lmeSBob3cgbWFueSBjb21wb25lbnRzIHRoZXJlIGFyZSBhbmQgdGhlIGNvbG9yc3BhY2UKK2ludGVycHJldGF0aW9uIG9mIHRoZSBjb21wb25lbnRzLiAgTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCB1c2UgUkdCIGRhdGEKKyh0aHJlZSBjb21wb25lbnRzIHBlciBwaXhlbCkgb3IgZ3JheXNjYWxlIGRhdGEgKG9uZSBjb21wb25lbnQgcGVyIHBpeGVsKS4KK1BMRUFTRSBOT1RFIFRIQVQgUkdCIERBVEEgSVMgVEhSRUUgU0FNUExFUyBQRVIgUElYRUwsIEdSQVlTQ0FMRSBPTkxZIE9ORS4KK0EgcmVtYXJrYWJsZSBudW1iZXIgb2YgcGVvcGxlIG1hbmFnZSB0byBtaXNzIHRoaXMsIG9ubHkgdG8gZmluZCB0aGF0IHRoZWlyCitwcm9ncmFtcyBkb24ndCB3b3JrIHdpdGggZ3JheXNjYWxlIEpQRUcgZmlsZXMuCisKK1RoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgY29sb3JtYXBwZWQgaW5wdXQuICBKUEVHIGZpbGVzIGFyZSBhbHdheXMgZnVsbC1jb2xvcgorb3IgZnVsbCBncmF5c2NhbGUgKG9yIHNvbWV0aW1lcyBhbm90aGVyIGNvbG9yc3BhY2Ugc3VjaCBhcyBDTVlLKS4gIFlvdSBjYW4KK2ZlZWQgaW4gYSBjb2xvcm1hcHBlZCBpbWFnZSBieSBleHBhbmRpbmcgaXQgdG8gZnVsbC1jb2xvciBmb3JtYXQuICBIb3dldmVyCitKUEVHIG9mdGVuIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCBzb3VyY2UgZGF0YSB0aGF0IGhhcyBiZWVuIGNvbG9ybWFwcGVkLAorYmVjYXVzZSBvZiBkaXRoZXJpbmcgbm9pc2UuICBUaGlzIGlzIGRpc2N1c3NlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgSlBFRyBGQVEKK2FuZCB0aGUgb3RoZXIgcmVmZXJlbmNlcyBtZW50aW9uZWQgaW4gdGhlIFJFQURNRS5pamcgZmlsZS4KKworUGl4ZWxzIGFyZSBzdG9yZWQgYnkgc2NhbmxpbmVzLCB3aXRoIGVhY2ggc2NhbmxpbmUgcnVubmluZyBmcm9tIGxlZnQgdG8KK3JpZ2h0LiAgVGhlIGNvbXBvbmVudCB2YWx1ZXMgZm9yIGVhY2ggcGl4ZWwgYXJlIGFkamFjZW50IGluIHRoZSByb3c7IGZvcgorZXhhbXBsZSwgUixHLEIsUixHLEIsUixHLEIsLi4uIGZvciAyNC1iaXQgUkdCIGNvbG9yLiAgRWFjaCBzY2FubGluZSBpcyBhbgorYXJyYXkgb2YgZGF0YSB0eXBlIEpTQU1QTEUgLS0tIHdoaWNoIGlzIHR5cGljYWxseSAidW5zaWduZWQgY2hhciIsIHVubGVzcworeW91J3ZlIGNoYW5nZWQgam1vcmVjZmcuaC4gIChZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBSR0IgcGl4ZWwgbGF5b3V0LCBzYXkKK3RvIEIsRyxSIG9yZGVyLCBieSBtb2RpZnlpbmcgam1vcmVjZmcuaC4gIEJ1dCBzZWUgdGhlIHJlc3RyaWN0aW9ucyBsaXN0ZWQgaW4KK3RoYXQgZmlsZSBiZWZvcmUgZG9pbmcgc28uKQorCitBIDItRCBhcnJheSBvZiBwaXhlbHMgaXMgZm9ybWVkIGJ5IG1ha2luZyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gdGhlIHN0YXJ0cyBvZgorc2NhbmxpbmVzOyBzbyB0aGUgc2NhbmxpbmVzIG5lZWQgbm90IGJlIHBoeXNpY2FsbHkgYWRqYWNlbnQgaW4gbWVtb3J5LiAgRXZlbgoraWYgeW91IHByb2Nlc3MganVzdCBvbmUgc2NhbmxpbmUgYXQgYSB0aW1lLCB5b3UgbXVzdCBtYWtlIGEgb25lLWVsZW1lbnQKK3BvaW50ZXIgYXJyYXkgdG8gY29uZm9ybSB0byB0aGlzIHN0cnVjdHVyZS4gIFBvaW50ZXJzIHRvIEpTQU1QTEUgcm93cyBhcmUgb2YKK3R5cGUgSlNBTVBST1csIGFuZCB0aGUgcG9pbnRlciB0byB0aGUgcG9pbnRlciBhcnJheSBpcyBvZiB0eXBlIEpTQU1QQVJSQVkuCisKK1RoZSBsaWJyYXJ5IGFjY2VwdHMgb3Igc3VwcGxpZXMgb25lIG9yIG1vcmUgY29tcGxldGUgc2NhbmxpbmVzIHBlciBjYWxsLgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIHByb2Nlc3MgcGFydCBvZiBhIHJvdyBhdCBhIHRpbWUuICBTY2FubGluZXMgYXJlIGFsd2F5cworcHJvY2Vzc2VkIHRvcC10by1ib3R0b20uICBZb3UgY2FuIHByb2Nlc3MgYW4gZW50aXJlIGltYWdlIGluIG9uZSBjYWxsIGlmIHlvdQoraGF2ZSBpdCBhbGwgaW4gbWVtb3J5LCBidXQgdXN1YWxseSBpdCdzIHNpbXBsZXN0IHRvIHByb2Nlc3Mgb25lIHNjYW5saW5lIGF0CithIHRpbWUuCisKK0ZvciBiZXN0IHJlc3VsdHMsIHNvdXJjZSBkYXRhIHZhbHVlcyBzaG91bGQgaGF2ZSB0aGUgcHJlY2lzaW9uIHNwZWNpZmllZCBieQorQklUU19JTl9KU0FNUExFIChub3JtYWxseSA4IGJpdHMpLiAgRm9yIGluc3RhbmNlLCBpZiB5b3UgY2hvb3NlIHRvIGNvbXByZXNzCitkYXRhIHRoYXQncyBvbmx5IDYgYml0cy9jaGFubmVsLCB5b3Ugc2hvdWxkIGxlZnQtanVzdGlmeSBlYWNoIHZhbHVlIGluIGEKK2J5dGUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGNvbXByZXNzb3IuICBJZiB5b3UgbmVlZCB0byBjb21wcmVzcyBkYXRhCit0aGF0IGhhcyBtb3JlIHRoYW4gOCBiaXRzL2NoYW5uZWwsIGNvbXBpbGUgd2l0aCBCSVRTX0lOX0pTQU1QTEUgPSAxMi4KKyhTZWUgIkxpYnJhcnkgY29tcGlsZS10aW1lIG9wdGlvbnMiLCBsYXRlci4pCisKKworVGhlIGRhdGEgZm9ybWF0IHJldHVybmVkIGJ5IHRoZSBkZWNvbXByZXNzb3IgaXMgdGhlIHNhbWUgaW4gYWxsIGRldGFpbHMsCitleGNlcHQgdGhhdCBjb2xvcm1hcHBlZCBvdXRwdXQgaXMgc3VwcG9ydGVkLiAgKEFnYWluLCBhIEpQRUcgZmlsZSBpcyBuZXZlcgorY29sb3JtYXBwZWQuICBCdXQgeW91IGNhbiBhc2sgdGhlIGRlY29tcHJlc3NvciB0byBwZXJmb3JtIG9uLXRoZS1mbHkgY29sb3IKK3F1YW50aXphdGlvbiB0byBkZWxpdmVyIGNvbG9ybWFwcGVkIG91dHB1dC4pICBJZiB5b3UgcmVxdWVzdCBjb2xvcm1hcHBlZAorb3V0cHV0IHRoZW4gdGhlIHJldHVybmVkIGRhdGEgYXJyYXkgY29udGFpbnMgYSBzaW5nbGUgSlNBTVBMRSBwZXIgcGl4ZWw7CitpdHMgdmFsdWUgaXMgYW4gaW5kZXggaW50byBhIGNvbG9yIG1hcC4gIFRoZSBjb2xvciBtYXAgaXMgcmVwcmVzZW50ZWQgYXMKK2EgMi1EIEpTQU1QQVJSQVkgaW4gd2hpY2ggZWFjaCByb3cgaG9sZHMgdGhlIHZhbHVlcyBvZiBvbmUgY29sb3IgY29tcG9uZW50LAordGhhdCBpcywgY29sb3JtYXBbaV1bal0gaXMgdGhlIHZhbHVlIG9mIHRoZSBpJ3RoIGNvbG9yIGNvbXBvbmVudCBmb3IgcGl4ZWwKK3ZhbHVlIChtYXAgaW5kZXgpIGouICBOb3RlIHRoYXQgc2luY2UgdGhlIGNvbG9ybWFwIGluZGV4ZXMgYXJlIHN0b3JlZCBpbgorSlNBTVBMRXMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgaXMgbGltaXRlZCBieSB0aGUgc2l6ZSBvZiBKU0FNUExFCisoaWUsIGF0IG1vc3QgMjU2IGNvbG9ycyBmb3IgYW4gOC1iaXQgSlBFRyBsaWJyYXJ5KS4KKworCitDb21wcmVzc2lvbiBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgd2UgcmV2aXNpdCB0aGUgSlBFRyBjb21wcmVzc2lvbiBvdXRsaW5lIGdpdmVuIGluIHRoZSBvdmVydmlldy4KKworMS4gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBKUEVHIGNvbXByZXNzaW9uIG9iamVjdC4KKworQSBKUEVHIGNvbXByZXNzaW9uIG9iamVjdCBpcyBhICJzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QiLiAgKEl0IGFsc28gaGFzCithIGJ1bmNoIG9mIHN1YnNpZGlhcnkgc3RydWN0dXJlcyB3aGljaCBhcmUgYWxsb2NhdGVkIHZpYSBtYWxsb2MoKSwgYnV0IHRoZQorYXBwbGljYXRpb24gZG9lc24ndCBjb250cm9sIHRob3NlIGRpcmVjdGx5LikgIFRoaXMgc3RydWN0IGNhbiBiZSBqdXN0IGEgbG9jYWwKK3ZhcmlhYmxlIGluIHRoZSBjYWxsaW5nIHJvdXRpbmUsIGlmIGEgc2luZ2xlIHJvdXRpbmUgaXMgZ29pbmcgdG8gZXhlY3V0ZSB0aGUKK3dob2xlIEpQRUcgY29tcHJlc3Npb24gc2VxdWVuY2UuICBPdGhlcndpc2UgaXQgY2FuIGJlIHN0YXRpYyBvciBhbGxvY2F0ZWQKK2Zyb20gbWFsbG9jKCkuCisKK1lvdSB3aWxsIGFsc28gbmVlZCBhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBKUEVHIGVycm9yIGhhbmRsZXIuICBUaGUgcGFydAorb2YgdGhpcyB0aGF0IHRoZSBsaWJyYXJ5IGNhcmVzIGFib3V0IGlzIGEgInN0cnVjdCBqcGVnX2Vycm9yX21nciIuICBJZiB5b3UKK2FyZSBwcm92aWRpbmcgeW91ciBvd24gZXJyb3IgaGFuZGxlciwgeW91J2xsIHR5cGljYWxseSB3YW50IHRvIGVtYmVkIHRoZQoranBlZ19lcnJvcl9tZ3Igc3RydWN0IGluIGEgbGFyZ2VyIHN0cnVjdHVyZTsgdGhpcyBpcyBkaXNjdXNzZWQgbGF0ZXIgdW5kZXIKKyJFcnJvciBoYW5kbGluZyIuICBGb3Igbm93IHdlJ2xsIGFzc3VtZSB5b3UgYXJlIGp1c3QgdXNpbmcgdGhlIGRlZmF1bHQgZXJyb3IKK2hhbmRsZXIuICBUaGUgZGVmYXVsdCBlcnJvciBoYW5kbGVyIHdpbGwgcHJpbnQgSlBFRyBlcnJvci93YXJuaW5nIG1lc3NhZ2VzCitvbiBzdGRlcnIsIGFuZCBpdCB3aWxsIGNhbGwgZXhpdCgpIGlmIGEgZmF0YWwgZXJyb3Igb2NjdXJzLgorCitZb3UgbXVzdCBpbml0aWFsaXplIHRoZSBlcnJvciBoYW5kbGVyIHN0cnVjdHVyZSwgc3RvcmUgYSBwb2ludGVyIHRvIGl0IGludG8KK3RoZSBKUEVHIG9iamVjdCdzICJlcnIiIGZpZWxkLCBhbmQgdGhlbiBjYWxsIGpwZWdfY3JlYXRlX2NvbXByZXNzKCkgdG8KK2luaXRpYWxpemUgdGhlIHJlc3Qgb2YgdGhlIEpQRUcgb2JqZWN0LgorCitUeXBpY2FsIGNvZGUgZm9yIHRoaXMgc3RlcCwgaWYgeW91IGFyZSB1c2luZyB0aGUgZGVmYXVsdCBlcnJvciBoYW5kbGVyLCBpcworCisgICAgICAgIHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgICAgICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CisgICAgICAgIC4uLgorICAgICAgICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7CisgICAgICAgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7CisKK2pwZWdfY3JlYXRlX2NvbXByZXNzIGFsbG9jYXRlcyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnksIHNvIGl0IGNvdWxkIGZhaWwKK2lmIHlvdSBhcmUgb3V0IG9mIG1lbW9yeS4gIEluIHRoYXQgY2FzZSBpdCB3aWxsIGV4aXQgdmlhIHRoZSBlcnJvciBoYW5kbGVyOwordGhhdCdzIHdoeSB0aGUgZXJyb3IgaGFuZGxlciBtdXN0IGJlIGluaXRpYWxpemVkIGZpcnN0LgorCisKKzIuIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgY29tcHJlc3NlZCBkYXRhIChlZywgYSBmaWxlKS4KKworQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIHRoZSBKUEVHIGxpYnJhcnkgZGVsaXZlcnMgY29tcHJlc3NlZCBkYXRhIHRvIGEKKyJkYXRhIGRlc3RpbmF0aW9uIiBtb2R1bGUuICBUaGUgbGlicmFyeSBpbmNsdWRlcyBvbmUgZGF0YSBkZXN0aW5hdGlvbgorbW9kdWxlIHdoaWNoIGtub3dzIGhvdyB0byB3cml0ZSB0byBhIHN0ZGlvIHN0cmVhbS4gIFlvdSBjYW4gdXNlIHlvdXIgb3duCitkZXN0aW5hdGlvbiBtb2R1bGUgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIGVsc2UsIGFzIGRpc2N1c3NlZCBsYXRlci4KKworSWYgeW91IHVzZSB0aGUgc3RhbmRhcmQgZGVzdGluYXRpb24gbW9kdWxlLCB5b3UgbXVzdCBvcGVuIHRoZSB0YXJnZXQgc3RkaW8KK3N0cmVhbSBiZWZvcmVoYW5kLiAgVHlwaWNhbCBjb2RlIGZvciB0aGlzIHN0ZXAgbG9va3MgbGlrZToKKworICAgICAgICBGSUxFICpvdXRmaWxlOworICAgICAgICAuLi4KKyAgICAgICAgaWYgKChvdXRmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3YiIpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAganBlZ19zdGRpb19kZXN0KCZjaW5mbywgb3V0ZmlsZSk7CisKK3doZXJlIHRoZSBsYXN0IGxpbmUgaW52b2tlcyB0aGUgc3RhbmRhcmQgZGVzdGluYXRpb24gbW9kdWxlLgorCitXQVJOSU5HOiBpdCBpcyBjcml0aWNhbCB0aGF0IHRoZSBiaW5hcnkgY29tcHJlc3NlZCBkYXRhIGJlIGRlbGl2ZXJlZCB0byB0aGUKK291dHB1dCBmaWxlIHVuY2hhbmdlZC4gIE9uIG5vbi1Vbml4IHN5c3RlbXMgdGhlIHN0ZGlvIGxpYnJhcnkgbWF5IHBlcmZvcm0KK25ld2xpbmUgdHJhbnNsYXRpb24gb3Igb3RoZXJ3aXNlIGNvcnJ1cHQgYmluYXJ5IGRhdGEuICBUbyBzdXBwcmVzcyB0aGlzCitiZWhhdmlvciwgeW91IG1heSBuZWVkIHRvIHVzZSBhICJiIiBvcHRpb24gdG8gZm9wZW4gKGFzIHNob3duIGFib3ZlKSwgb3IgdXNlCitzZXRtb2RlKCkgb3IgYW5vdGhlciByb3V0aW5lIHRvIHB1dCB0aGUgc3RkaW8gc3RyZWFtIGluIGJpbmFyeSBtb2RlLiAgU2VlCitjanBlZy5jIGFuZCBkanBlZy5jIGZvciBjb2RlIHRoYXQgaGFzIGJlZW4gZm91bmQgdG8gd29yayBvbiBtYW55IHN5c3RlbXMuCisKK1lvdSBjYW4gc2VsZWN0IHRoZSBkYXRhIGRlc3RpbmF0aW9uIGFmdGVyIHNldHRpbmcgb3RoZXIgcGFyYW1ldGVycyAoc3RlcCAzKSwKK2lmIHRoYXQncyBtb3JlIGNvbnZlbmllbnQuICBZb3UgbWF5IG5vdCBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIGJldHdlZW4KK2NhbGxpbmcganBlZ19zdGFydF9jb21wcmVzcygpIGFuZCBqcGVnX2ZpbmlzaF9jb21wcmVzcygpLgorCisKKzMuIFNldCBwYXJhbWV0ZXJzIGZvciBjb21wcmVzc2lvbiwgaW5jbHVkaW5nIGltYWdlIHNpemUgJiBjb2xvcnNwYWNlLgorCitZb3UgbXVzdCBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBpbWFnZSBieSBzZXR0aW5nIHRoZSBmb2xsb3dpbmcKK2ZpZWxkcyBpbiB0aGUgSlBFRyBvYmplY3QgKGNpbmZvIHN0cnVjdHVyZSk6CisKKyAgICAgICAgaW1hZ2Vfd2lkdGggICAgICAgICAgICAgV2lkdGggb2YgaW1hZ2UsIGluIHBpeGVscworICAgICAgICBpbWFnZV9oZWlnaHQgICAgICAgICAgICBIZWlnaHQgb2YgaW1hZ2UsIGluIHBpeGVscworICAgICAgICBpbnB1dF9jb21wb25lbnRzICAgICAgICBOdW1iZXIgb2YgY29sb3IgY2hhbm5lbHMgKHNhbXBsZXMgcGVyIHBpeGVsKQorICAgICAgICBpbl9jb2xvcl9zcGFjZSAgICAgICAgICBDb2xvciBzcGFjZSBvZiBzb3VyY2UgaW1hZ2UKKworVGhlIGltYWdlIGRpbWVuc2lvbnMgYXJlLCBob3BlZnVsbHksIG9idmlvdXMuICBKUEVHIHN1cHBvcnRzIGltYWdlIGRpbWVuc2lvbnMKK29mIDEgdG8gNjRLIHBpeGVscyBpbiBlaXRoZXIgZGlyZWN0aW9uLiAgVGhlIGlucHV0IGNvbG9yIHNwYWNlIGlzIHR5cGljYWxseQorUkdCIG9yIGdyYXlzY2FsZSwgYW5kIGlucHV0X2NvbXBvbmVudHMgaXMgMyBvciAxIGFjY29yZGluZ2x5LiAgKFNlZSAiU3BlY2lhbAorY29sb3Igc3BhY2VzIiwgbGF0ZXIsIGZvciBtb3JlIGluZm8uKSAgVGhlIGluX2NvbG9yX3NwYWNlIGZpZWxkIG11c3QgYmUKK2Fzc2lnbmVkIG9uZSBvZiB0aGUgSl9DT0xPUl9TUEFDRSBlbnVtIGNvbnN0YW50cywgdHlwaWNhbGx5IEpDU19SR0Igb3IKK0pDU19HUkFZU0NBTEUuCisKK0pQRUcgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgdGhhdCBkZXRlcm1pbmUgaG93IHRoZQoraW1hZ2UgaXMgZW5jb2RlZC4gIE1vc3QgYXBwbGljYXRpb25zIGRvbid0IG5lZWQgb3Igd2FudCB0byBrbm93IGFib3V0IGFsbAordGhlc2UgcGFyYW1ldGVycy4gIFlvdSBjYW4gc2V0IGFsbCB0aGUgcGFyYW1ldGVycyB0byByZWFzb25hYmxlIGRlZmF1bHRzIGJ5CitjYWxsaW5nIGpwZWdfc2V0X2RlZmF1bHRzKCk7IHRoZW4sIGlmIHRoZXJlIGFyZSBwYXJ0aWN1bGFyIHZhbHVlcyB5b3Ugd2FudAordG8gY2hhbmdlLCB5b3UgY2FuIGRvIHNvIGFmdGVyIHRoYXQuICBUaGUgIkNvbXByZXNzaW9uIHBhcmFtZXRlciBzZWxlY3Rpb24iCitzZWN0aW9uIHRlbGxzIGFib3V0IGFsbCB0aGUgcGFyYW1ldGVycy4KKworWW91IG11c3Qgc2V0IGluX2NvbG9yX3NwYWNlIGNvcnJlY3RseSBiZWZvcmUgY2FsbGluZyBqcGVnX3NldF9kZWZhdWx0cygpLAorYmVjYXVzZSB0aGUgZGVmYXVsdHMgZGVwZW5kIG9uIHRoZSBzb3VyY2UgaW1hZ2UgY29sb3JzcGFjZS4gIEhvd2V2ZXIgdGhlCitvdGhlciB0aHJlZSBzb3VyY2UgaW1hZ2UgcGFyYW1ldGVycyBuZWVkIG5vdCBiZSB2YWxpZCB1bnRpbCB5b3UgY2FsbAoranBlZ19zdGFydF9jb21wcmVzcygpLiAgVGhlcmUncyBubyBoYXJtIGluIGNhbGxpbmcganBlZ19zZXRfZGVmYXVsdHMoKSBtb3JlCit0aGFuIG9uY2UsIGlmIHRoYXQgaGFwcGVucyB0byBiZSBjb252ZW5pZW50LgorCitUeXBpY2FsIGNvZGUgZm9yIGEgMjQtYml0IFJHQiBzb3VyY2UgaW1hZ2UgaXMKKworICAgICAgICBjaW5mby5pbWFnZV93aWR0aCA9IFdpZHRoOyAgICAgIC8qIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQsIGluIHBpeGVscyAqLworICAgICAgICBjaW5mby5pbWFnZV9oZWlnaHQgPSBIZWlnaHQ7CisgICAgICAgIGNpbmZvLmlucHV0X2NvbXBvbmVudHMgPSAzOyAgICAgLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHBlciBwaXhlbCAqLworICAgICAgICBjaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7IC8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KKworICAgICAgICBqcGVnX3NldF9kZWZhdWx0cygmY2luZm8pOworICAgICAgICAvKiBNYWtlIG9wdGlvbmFsIHBhcmFtZXRlciBzZXR0aW5ncyBoZXJlICovCisKKworNC4ganBlZ19zdGFydF9jb21wcmVzcyguLi4pOworCitBZnRlciB5b3UgaGF2ZSBlc3RhYmxpc2hlZCB0aGUgZGF0YSBkZXN0aW5hdGlvbiBhbmQgc2V0IGFsbCB0aGUgbmVjZXNzYXJ5Citzb3VyY2UgaW1hZ2UgaW5mbyBhbmQgb3RoZXIgcGFyYW1ldGVycywgY2FsbCBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgdG8gYmVnaW4KK2EgY29tcHJlc3Npb24gY3ljbGUuICBUaGlzIHdpbGwgaW5pdGlhbGl6ZSBpbnRlcm5hbCBzdGF0ZSwgYWxsb2NhdGUgd29ya2luZworc3RvcmFnZSwgYW5kIGVtaXQgdGhlIGZpcnN0IGZldyBieXRlcyBvZiB0aGUgSlBFRyBkYXRhc3RyZWFtIGhlYWRlci4KKworVHlwaWNhbCBjb2RlOgorCisgICAgICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKKworVGhlICJUUlVFIiBwYXJhbWV0ZXIgZW5zdXJlcyB0aGF0IGEgY29tcGxldGUgSlBFRyBpbnRlcmNoYW5nZSBkYXRhc3RyZWFtCit3aWxsIGJlIHdyaXR0ZW4uICBUaGlzIGlzIGFwcHJvcHJpYXRlIGluIG1vc3QgY2FzZXMuICBJZiB5b3UgdGhpbmsgeW91IG1pZ2h0Cit3YW50IHRvIHVzZSBhbiBhYmJyZXZpYXRlZCBkYXRhc3RyZWFtLCByZWFkIHRoZSBzZWN0aW9uIG9uIGFiYnJldmlhdGVkCitkYXRhc3RyZWFtcywgYmVsb3cuCisKK09uY2UgeW91IGhhdmUgY2FsbGVkIGpwZWdfc3RhcnRfY29tcHJlc3MoKSwgeW91IG1heSBub3QgYWx0ZXIgYW55IEpQRUcKK3BhcmFtZXRlcnMgb3Igb3RoZXIgZmllbGRzIG9mIHRoZSBKUEVHIG9iamVjdCB1bnRpbCB5b3UgaGF2ZSBjb21wbGV0ZWQKK3RoZSBjb21wcmVzc2lvbiBjeWNsZS4KKworCis1LiB3aGlsZSAoc2NhbiBsaW5lcyByZW1haW4gdG8gYmUgd3JpdHRlbikKKyAgICAgICAganBlZ193cml0ZV9zY2FubGluZXMoLi4uKTsKKworTm93IHdyaXRlIGFsbCB0aGUgcmVxdWlyZWQgaW1hZ2UgZGF0YSBieSBjYWxsaW5nIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCkKK29uZSBvciBtb3JlIHRpbWVzLiAgWW91IGNhbiBwYXNzIG9uZSBvciBtb3JlIHNjYW5saW5lcyBpbiBlYWNoIGNhbGwsIHVwCit0byB0aGUgdG90YWwgaW1hZ2UgaGVpZ2h0LiAgSW4gbW9zdCBhcHBsaWNhdGlvbnMgaXQgaXMgY29udmVuaWVudCB0byBwYXNzCitqdXN0IG9uZSBvciBhIGZldyBzY2FubGluZXMgYXQgYSB0aW1lLiAgVGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdGhlIHBhc3NlZAorZGF0YSBpcyBkaXNjdXNzZWQgdW5kZXIgIkRhdGEgZm9ybWF0cyIsIGFib3ZlLgorCitJbWFnZSBkYXRhIHNob3VsZCBiZSB3cml0dGVuIGluIHRvcC10by1ib3R0b20gc2NhbmxpbmUgb3JkZXIuICBUaGUgSlBFRyBzcGVjCitjb250YWlucyBzb21lIHdlYXNlbCB3b3JkaW5nIGFib3V0IGhvdyB0b3AgYW5kIGJvdHRvbSBhcmUgYXBwbGljYXRpb24tZGVmaW5lZAordGVybXMgKGEgY3VyaW91cyBpbnRlcnByZXRhdGlvbiBvZiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4uLikgYnV0IGlmIHlvdSB3YW50Cit5b3VyIGZpbGVzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBldmVyeW9uZSBlbHNlJ3MsIHlvdSBXSUxMIHVzZSB0b3AtdG8tYm90dG9tCitvcmRlci4gIElmIHRoZSBzb3VyY2UgZGF0YSBtdXN0IGJlIHJlYWQgaW4gYm90dG9tLXRvLXRvcCBvcmRlciwgeW91IGNhbiB1c2UKK3RoZSBKUEVHIGxpYnJhcnkncyB2aXJ0dWFsIGFycmF5IG1lY2hhbmlzbSB0byBpbnZlcnQgdGhlIGRhdGEgZWZmaWNpZW50bHkuCitFeGFtcGxlcyBvZiB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uIGNqcGVnLgorCitUaGUgbGlicmFyeSBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyB3cml0dGVuIHNvIGZhcgoraW4gdGhlIG5leHRfc2NhbmxpbmUgZmllbGQgb2YgdGhlIEpQRUcgb2JqZWN0LiAgVXN1YWxseSB5b3UgY2FuIGp1c3QgdXNlCit0aGlzIHZhcmlhYmxlIGFzIHRoZSBsb29wIGNvdW50ZXIsIHNvIHRoYXQgdGhlIGxvb3AgdGVzdCBsb29rcyBsaWtlCisid2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIi4KKworQ29kZSBmb3IgdGhpcyBzdGVwIGRlcGVuZHMgaGVhdmlseSBvbiB0aGUgd2F5IHRoYXQgeW91IHN0b3JlIHRoZSBzb3VyY2UgZGF0YS4KK2V4YW1wbGUudHh0IHNob3dzIHRoZSBmb2xsb3dpbmcgY29kZSBmb3IgdGhlIGNhc2Ugb2YgYSBmdWxsLXNpemUgMi1EIHNvdXJjZQorYXJyYXkgY29udGFpbmluZyAzLWJ5dGUgUkdCIHBpeGVsczoKKworICAgICAgICBKU0FNUFJPVyByb3dfcG9pbnRlclsxXTsgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBzaW5nbGUgcm93ICovCisgICAgICAgIGludCByb3dfc3RyaWRlOyAgICAgICAgICAgICAgICAgLyogcGh5c2ljYWwgcm93IHdpZHRoIGluIGJ1ZmZlciAqLworCisgICAgICAgIHJvd19zdHJpZGUgPSBpbWFnZV93aWR0aCAqIDM7ICAgLyogSlNBTVBMRXMgcGVyIHJvdyBpbiBpbWFnZV9idWZmZXIgKi8KKworICAgICAgICB3aGlsZSAoY2luZm8ubmV4dF9zY2FubGluZSA8IGNpbmZvLmltYWdlX2hlaWdodCkgeworICAgICAgICAgICAgcm93X3BvaW50ZXJbMF0gPSAmaW1hZ2VfYnVmZmVyW2NpbmZvLm5leHRfc2NhbmxpbmUgKiByb3dfc3RyaWRlXTsKKyAgICAgICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCZjaW5mbywgcm93X3BvaW50ZXIsIDEpOworICAgICAgICB9CisKK2pwZWdfd3JpdGVfc2NhbmxpbmVzKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyBhY3R1YWxseSB3cml0dGVuLgorVGhpcyB3aWxsIG5vcm1hbGx5IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgcGFzc2VkIGluLCBzbyB5b3UgY2FuIHVzdWFsbHkKK2lnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLiAgSXQgaXMgZGlmZmVyZW50IGluIGp1c3QgdHdvIGNhc2VzOgorICAqIElmIHlvdSB0cnkgdG8gd3JpdGUgbW9yZSBzY2FubGluZXMgdGhhbiB0aGUgZGVjbGFyZWQgaW1hZ2UgaGVpZ2h0LAorICAgIHRoZSBhZGRpdGlvbmFsIHNjYW5saW5lcyBhcmUgaWdub3JlZC4KKyAgKiBJZiB5b3UgdXNlIGEgc3VzcGVuZGluZyBkYXRhIGRlc3RpbmF0aW9uIG1hbmFnZXIsIG91dHB1dCBidWZmZXIgb3ZlcnJ1bgorICAgIHdpbGwgY2F1c2UgdGhlIGNvbXByZXNzb3IgdG8gcmV0dXJuIGJlZm9yZSBhY2NlcHRpbmcgYWxsIHRoZSBwYXNzZWQgbGluZXMuCisgICAgVGhpcyBmZWF0dXJlIGlzIGRpc2N1c3NlZCB1bmRlciAiSS9PIHN1c3BlbnNpb24iLCBiZWxvdy4gIFRoZSBub3JtYWwKKyAgICBzdGRpbyBkZXN0aW5hdGlvbiBtYW5hZ2VyIHdpbGwgTk9UIGNhdXNlIHRoaXMgdG8gaGFwcGVuLgorSW4gYW55IGNhc2UsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIGNoYW5nZSBpbiB0aGUgdmFsdWUgb2YKK25leHRfc2NhbmxpbmUuCisKKworNi4ganBlZ19maW5pc2hfY29tcHJlc3MoLi4uKTsKKworQWZ0ZXIgYWxsIHRoZSBpbWFnZSBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4sIGNhbGwganBlZ19maW5pc2hfY29tcHJlc3MoKSB0bworY29tcGxldGUgdGhlIGNvbXByZXNzaW9uIGN5Y2xlLiAgVGhpcyBzdGVwIGlzIEVTU0VOVElBTCB0byBlbnN1cmUgdGhhdCB0aGUKK2xhc3QgYnVmZmVybG9hZCBvZiBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGRhdGEgZGVzdGluYXRpb24uCitqcGVnX2ZpbmlzaF9jb21wcmVzcygpIGFsc28gcmVsZWFzZXMgd29ya2luZyBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBKUEVHCitvYmplY3QuCisKK1R5cGljYWwgY29kZToKKworICAgICAgICBqcGVnX2ZpbmlzaF9jb21wcmVzcygmY2luZm8pOworCitJZiB1c2luZyB0aGUgc3RkaW8gZGVzdGluYXRpb24gbWFuYWdlciwgZG9uJ3QgZm9yZ2V0IHRvIGNsb3NlIHRoZSBvdXRwdXQKK3N0ZGlvIHN0cmVhbSAoaWYgbmVjZXNzYXJ5KSBhZnRlcndhcmRzLgorCitJZiB5b3UgaGF2ZSByZXF1ZXN0ZWQgYSBtdWx0aS1wYXNzIG9wZXJhdGluZyBtb2RlLCBzdWNoIGFzIEh1ZmZtYW4gY29kZQorb3B0aW1pemF0aW9uLCBqcGVnX2ZpbmlzaF9jb21wcmVzcygpIHdpbGwgcGVyZm9ybSB0aGUgYWRkaXRpb25hbCBwYXNzZXMgdXNpbmcKK2RhdGEgYnVmZmVyZWQgYnkgdGhlIGZpcnN0IHBhc3MuICBJbiB0aGlzIGNhc2UganBlZ19maW5pc2hfY29tcHJlc3MoKSBtYXkgdGFrZQorcXVpdGUgYSB3aGlsZSB0byBjb21wbGV0ZS4gIFdpdGggdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gcGFyYW1ldGVycywgdGhpcyB3aWxsCitub3QgaGFwcGVuLgorCitJdCBpcyBhbiBlcnJvciB0byBjYWxsIGpwZWdfZmluaXNoX2NvbXByZXNzKCkgYmVmb3JlIHdyaXRpbmcgdGhlIG5lY2Vzc2FyeQordG90YWwgbnVtYmVyIG9mIHNjYW5saW5lcy4gIElmIHlvdSB3aXNoIHRvIGFib3J0IGNvbXByZXNzaW9uLCBjYWxsCitqcGVnX2Fib3J0KCkgYXMgZGlzY3Vzc2VkIGJlbG93LgorCitBZnRlciBjb21wbGV0aW5nIGEgY29tcHJlc3Npb24gY3ljbGUsIHlvdSBtYXkgZGlzcG9zZSBvZiB0aGUgSlBFRyBvYmplY3QKK2FzIGRpc2N1c3NlZCBuZXh0LCBvciB5b3UgbWF5IHVzZSBpdCB0byBjb21wcmVzcyBhbm90aGVyIGltYWdlLiAgSW4gdGhhdCBjYXNlCityZXR1cm4gdG8gc3RlcCAyLCAzLCBvciA0IGFzIGFwcHJvcHJpYXRlLiAgSWYgeW91IGRvIG5vdCBjaGFuZ2UgdGhlCitkZXN0aW5hdGlvbiBtYW5hZ2VyLCB0aGUgbmV3IGRhdGFzdHJlYW0gd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzYW1lIHRhcmdldC4KK0lmIHlvdSBkbyBub3QgY2hhbmdlIGFueSBKUEVHIHBhcmFtZXRlcnMsIHRoZSBuZXcgZGF0YXN0cmVhbSB3aWxsIGJlIHdyaXR0ZW4KK3dpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBhcyBiZWZvcmUuICBOb3RlIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIGlucHV0IGltYWdlCitkaW1lbnNpb25zIGZyZWVseSBiZXR3ZWVuIGN5Y2xlcywgYnV0IGlmIHlvdSBjaGFuZ2UgdGhlIGlucHV0IGNvbG9yc3BhY2UsIHlvdQorc2hvdWxkIGNhbGwganBlZ19zZXRfZGVmYXVsdHMoKSB0byBhZGp1c3QgZm9yIHRoZSBuZXcgY29sb3JzcGFjZTsgYW5kIHRoZW4KK3lvdSdsbCBuZWVkIHRvIHJlcGVhdCBhbGwgb2Ygc3RlcCAzLgorCisKKzcuIFJlbGVhc2UgdGhlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0LgorCitXaGVuIHlvdSBhcmUgZG9uZSB3aXRoIGEgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QsIGRlc3Ryb3kgaXQgYnkgY2FsbGluZworanBlZ19kZXN0cm95X2NvbXByZXNzKCkuICBUaGlzIHdpbGwgZnJlZSBhbGwgc3Vic2lkaWFyeSBtZW1vcnkgKHJlZ2FyZGxlc3Mgb2YKK3RoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgb2JqZWN0KS4gIE9yIHlvdSBjYW4gY2FsbCBqcGVnX2Rlc3Ryb3koKSwgd2hpY2gKK3dvcmtzIGZvciBlaXRoZXIgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBvYmplY3RzIC0tLSB0aGlzIG1heSBiZSBtb3JlCitjb252ZW5pZW50IGlmIHlvdSBhcmUgc2hhcmluZyBjb2RlIGJldHdlZW4gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KK2Nhc2VzLiAgKEFjdHVhbGx5LCB0aGVzZSByb3V0aW5lcyBhcmUgZXF1aXZhbGVudCBleGNlcHQgZm9yIHRoZSBkZWNsYXJlZCB0eXBlCitvZiB0aGUgcGFzc2VkIHBvaW50ZXIuICBUbyBhdm9pZCBncmlwZXMgZnJvbSBBTlNJIEMgY29tcGlsZXJzLCBqcGVnX2Rlc3Ryb3koKQorc2hvdWxkIGJlIHBhc3NlZCBhIGpfY29tbW9uX3B0ci4pCisKK0lmIHlvdSBhbGxvY2F0ZWQgdGhlIGpwZWdfY29tcHJlc3Nfc3RydWN0IHN0cnVjdHVyZSBmcm9tIG1hbGxvYygpLCBmcmVlaW5nCitpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IC0tLSBqcGVnX2Rlc3Ryb3koKSB3b24ndC4gIERpdHRvIGZvciB0aGUgZXJyb3IKK2hhbmRsZXIgc3RydWN0dXJlLgorCitUeXBpY2FsIGNvZGU6CisKKyAgICAgICAganBlZ19kZXN0cm95X2NvbXByZXNzKCZjaW5mbyk7CisKKworOC4gQWJvcnRpbmcuCisKK0lmIHlvdSBkZWNpZGUgdG8gYWJvcnQgYSBjb21wcmVzc2lvbiBjeWNsZSBiZWZvcmUgZmluaXNoaW5nLCB5b3UgY2FuIGNsZWFuIHVwCitpbiBlaXRoZXIgb2YgdHdvIHdheXM6CisKKyogSWYgeW91IGRvbid0IG5lZWQgdGhlIEpQRUcgb2JqZWN0IGFueSBtb3JlLCBqdXN0IGNhbGwKKyAganBlZ19kZXN0cm95X2NvbXByZXNzKCkgb3IganBlZ19kZXN0cm95KCkgdG8gcmVsZWFzZSBtZW1vcnkuICBUaGlzIGlzCisgIGxlZ2l0aW1hdGUgYXQgYW55IHBvaW50IGFmdGVyIGNhbGxpbmcganBlZ19jcmVhdGVfY29tcHJlc3MoKSAtLS0gaW4gZmFjdCwKKyAgaXQncyBzYWZlIGV2ZW4gaWYganBlZ19jcmVhdGVfY29tcHJlc3MoKSBmYWlscy4KKworKiBJZiB5b3Ugd2FudCB0byByZS11c2UgdGhlIEpQRUcgb2JqZWN0LCBjYWxsIGpwZWdfYWJvcnRfY29tcHJlc3MoKSwgb3IgY2FsbAorICBqcGVnX2Fib3J0KCkgd2hpY2ggd29ya3Mgb24gYm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvYmplY3RzLgorICBUaGlzIHdpbGwgcmV0dXJuIHRoZSBvYmplY3QgdG8gYW4gaWRsZSBzdGF0ZSwgcmVsZWFzaW5nIGFueSB3b3JraW5nIG1lbW9yeS4KKyAganBlZ19hYm9ydCgpIGlzIGFsbG93ZWQgYXQgYW55IHRpbWUgYWZ0ZXIgc3VjY2Vzc2Z1bCBvYmplY3QgY3JlYXRpb24uCisKK05vdGUgdGhhdCBjbGVhbmluZyB1cCB0aGUgZGF0YSBkZXN0aW5hdGlvbiwgaWYgcmVxdWlyZWQsIGlzIHlvdXIKK3Jlc3BvbnNpYmlsaXR5OyBuZWl0aGVyIG9mIHRoZXNlIHJvdXRpbmVzIHdpbGwgY2FsbCB0ZXJtX2Rlc3RpbmF0aW9uKCkuCisoU2VlICJDb21wcmVzc2VkIGRhdGEgaGFuZGxpbmciLCBiZWxvdywgZm9yIG1vcmUgYWJvdXQgdGhhdC4pCisKK2pwZWdfZGVzdHJveSgpIGFuZCBqcGVnX2Fib3J0KCkgYXJlIHRoZSBvbmx5IHNhZmUgY2FsbHMgdG8gbWFrZSBvbiBhIEpQRUcKK29iamVjdCB0aGF0IGhhcyByZXBvcnRlZCBhbiBlcnJvciBieSBjYWxsaW5nIGVycm9yX2V4aXQgKHNlZSAiRXJyb3IgaGFuZGxpbmciCitmb3IgbW9yZSBpbmZvKS4gIFRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBzdWNoIGFuIG9iamVjdCBpcyBsaWtlbHkgdG8gYmUgb3V0IG9mCit3aGFjay4gIEVpdGhlciBvZiB0aGVzZSB0d28gcm91dGluZXMgd2lsbCByZXR1cm4gdGhlIG9iamVjdCB0byBhIGtub3duIHN0YXRlLgorCisKK0RlY29tcHJlc3Npb24gZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgd2UgcmV2aXNpdCB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIG91dGxpbmUgZ2l2ZW4gaW4gdGhlIG92ZXJ2aWV3LgorCisxLiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QuCisKK1RoaXMgaXMganVzdCBsaWtlIGluaXRpYWxpemF0aW9uIGZvciBjb21wcmVzc2lvbiwgYXMgZGlzY3Vzc2VkIGFib3ZlLAorZXhjZXB0IHRoYXQgdGhlIG9iamVjdCBpcyBhICJzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCIgYW5kIHlvdQorY2FsbCBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCkuICBFcnJvciBoYW5kbGluZyBpcyBleGFjdGx5IHRoZSBzYW1lLgorCitUeXBpY2FsIGNvZGU6CisKKyAgICAgICAgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgY2luZm87CisgICAgICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBqZXJyOworICAgICAgICAuLi4KKyAgICAgICAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmplcnIpOworICAgICAgICBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCZjaW5mbyk7CisKKyhCb3RoIGhlcmUgYW5kIGluIHRoZSBJSkcgY29kZSwgd2UgdXN1YWxseSB1c2UgdmFyaWFibGUgbmFtZSAiY2luZm8iIGZvcgorYm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvYmplY3RzLikKKworCisyLiBTcGVjaWZ5IHRoZSBzb3VyY2Ugb2YgdGhlIGNvbXByZXNzZWQgZGF0YSAoZWcsIGEgZmlsZSkuCisKK0FzIHByZXZpb3VzbHkgbWVudGlvbmVkLCB0aGUgSlBFRyBsaWJyYXJ5IHJlYWRzIGNvbXByZXNzZWQgZGF0YSBmcm9tIGEgImRhdGEKK3NvdXJjZSIgbW9kdWxlLiAgVGhlIGxpYnJhcnkgaW5jbHVkZXMgb25lIGRhdGEgc291cmNlIG1vZHVsZSB3aGljaCBrbm93cyBob3cKK3RvIHJlYWQgZnJvbSBhIHN0ZGlvIHN0cmVhbS4gIFlvdSBjYW4gdXNlIHlvdXIgb3duIHNvdXJjZSBtb2R1bGUgaWYgeW91IHdhbnQKK3RvIGRvIHNvbWV0aGluZyBlbHNlLCBhcyBkaXNjdXNzZWQgbGF0ZXIuCisKK0lmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIHNvdXJjZSBtb2R1bGUsIHlvdSBtdXN0IG9wZW4gdGhlIHNvdXJjZSBzdGRpbyBzdHJlYW0KK2JlZm9yZWhhbmQuICBUeXBpY2FsIGNvZGUgZm9yIHRoaXMgc3RlcCBsb29rcyBsaWtlOgorCisgICAgICAgIEZJTEUgKmluZmlsZTsKKyAgICAgICAgLi4uCisgICAgICAgIGlmICgoaW5maWxlID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAganBlZ19zdGRpb19zcmMoJmNpbmZvLCBpbmZpbGUpOworCit3aGVyZSB0aGUgbGFzdCBsaW5lIGludm9rZXMgdGhlIHN0YW5kYXJkIHNvdXJjZSBtb2R1bGUuCisKK1dBUk5JTkc6IGl0IGlzIGNyaXRpY2FsIHRoYXQgdGhlIGJpbmFyeSBjb21wcmVzc2VkIGRhdGEgYmUgcmVhZCB1bmNoYW5nZWQuCitPbiBub24tVW5peCBzeXN0ZW1zIHRoZSBzdGRpbyBsaWJyYXJ5IG1heSBwZXJmb3JtIG5ld2xpbmUgdHJhbnNsYXRpb24gb3IKK290aGVyd2lzZSBjb3JydXB0IGJpbmFyeSBkYXRhLiAgVG8gc3VwcHJlc3MgdGhpcyBiZWhhdmlvciwgeW91IG1heSBuZWVkIHRvIHVzZQorYSAiYiIgb3B0aW9uIHRvIGZvcGVuIChhcyBzaG93biBhYm92ZSksIG9yIHVzZSBzZXRtb2RlKCkgb3IgYW5vdGhlciByb3V0aW5lIHRvCitwdXQgdGhlIHN0ZGlvIHN0cmVhbSBpbiBiaW5hcnkgbW9kZS4gIFNlZSBjanBlZy5jIGFuZCBkanBlZy5jIGZvciBjb2RlIHRoYXQKK2hhcyBiZWVuIGZvdW5kIHRvIHdvcmsgb24gbWFueSBzeXN0ZW1zLgorCitZb3UgbWF5IG5vdCBjaGFuZ2UgdGhlIGRhdGEgc291cmNlIGJldHdlZW4gY2FsbGluZyBqcGVnX3JlYWRfaGVhZGVyKCkgYW5kCitqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkuICBJZiB5b3Ugd2lzaCB0byByZWFkIGEgc2VyaWVzIG9mIEpQRUcgaW1hZ2VzIGZyb20KK2Egc2luZ2xlIHNvdXJjZSBmaWxlLCB5b3Ugc2hvdWxkIHJlcGVhdCB0aGUganBlZ19yZWFkX2hlYWRlcigpIHRvCitqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkgc2VxdWVuY2Ugd2l0aG91dCByZWluaXRpYWxpemluZyBlaXRoZXIgdGhlIEpQRUcKK29iamVjdCBvciB0aGUgZGF0YSBzb3VyY2UgbW9kdWxlOyB0aGlzIHByZXZlbnRzIGJ1ZmZlcmVkIGlucHV0IGRhdGEgZnJvbQorYmVpbmcgZGlzY2FyZGVkLgorCisKKzMuIENhbGwganBlZ19yZWFkX2hlYWRlcigpIHRvIG9idGFpbiBpbWFnZSBpbmZvLgorCitUeXBpY2FsIGNvZGUgZm9yIHRoaXMgc3RlcCBpcyBqdXN0CisKKyAgICAgICAganBlZ19yZWFkX2hlYWRlcigmY2luZm8sIFRSVUUpOworCitUaGlzIHdpbGwgcmVhZCB0aGUgc291cmNlIGRhdGFzdHJlYW0gaGVhZGVyIG1hcmtlcnMsIHVwIHRvIHRoZSBiZWdpbm5pbmcKK29mIHRoZSBjb21wcmVzc2VkIGRhdGEgcHJvcGVyLiAgT24gcmV0dXJuLCB0aGUgaW1hZ2UgZGltZW5zaW9ucyBhbmQgb3RoZXIKK2luZm8gaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgSlBFRyBvYmplY3QuICBUaGUgYXBwbGljYXRpb24gbWF5IHdpc2ggdG8KK2NvbnN1bHQgdGhpcyBpbmZvcm1hdGlvbiBiZWZvcmUgc2VsZWN0aW5nIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4KKworTW9yZSBjb21wbGV4IGNvZGUgaXMgbmVjZXNzYXJ5IGlmCisgICogQSBzdXNwZW5kaW5nIGRhdGEgc291cmNlIGlzIHVzZWQgLS0tIGluIHRoYXQgY2FzZSBqcGVnX3JlYWRfaGVhZGVyKCkKKyAgICBtYXkgcmV0dXJuIGJlZm9yZSBpdCBoYXMgcmVhZCBhbGwgdGhlIGhlYWRlciBkYXRhLiAgU2VlICJJL08gc3VzcGVuc2lvbiIsCisgICAgYmVsb3cuICBUaGUgbm9ybWFsIHN0ZGlvIHNvdXJjZSBtYW5hZ2VyIHdpbGwgTk9UIGNhdXNlIHRoaXMgdG8gaGFwcGVuLgorICAqIEFiYnJldmlhdGVkIEpQRUcgZmlsZXMgYXJlIHRvIGJlIHByb2Nlc3NlZCAtLS0gc2VlIHRoZSBzZWN0aW9uIG9uCisgICAgYWJicmV2aWF0ZWQgZGF0YXN0cmVhbXMuICBTdGFuZGFyZCBhcHBsaWNhdGlvbnMgdGhhdCBkZWFsIG9ubHkgaW4KKyAgICBpbnRlcmNoYW5nZSBKUEVHIGZpbGVzIG5lZWQgbm90IGJlIGNvbmNlcm5lZCB3aXRoIHRoaXMgY2FzZSBlaXRoZXIuCisKK0l0IGlzIHBlcm1pc3NpYmxlIHRvIHN0b3AgYXQgdGhpcyBwb2ludCBpZiB5b3UganVzdCB3YW50ZWQgdG8gZmluZCBvdXQgdGhlCitpbWFnZSBkaW1lbnNpb25zIGFuZCBvdGhlciBoZWFkZXIgaW5mbyBmb3IgYSBKUEVHIGZpbGUuICBJbiB0aGF0IGNhc2UsCitjYWxsIGpwZWdfZGVzdHJveSgpIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhlIEpQRUcgb2JqZWN0LCBvciBjYWxsCitqcGVnX2Fib3J0KCkgdG8gcmV0dXJuIGl0IHRvIGFuIGlkbGUgc3RhdGUgYmVmb3JlIHNlbGVjdGluZyBhIG5ldyBkYXRhCitzb3VyY2UgYW5kIHJlYWRpbmcgYW5vdGhlciBoZWFkZXIuCisKKworNC4gU2V0IHBhcmFtZXRlcnMgZm9yIGRlY29tcHJlc3Npb24uCisKK2pwZWdfcmVhZF9oZWFkZXIoKSBzZXRzIGFwcHJvcHJpYXRlIGRlZmF1bHQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGJhc2VkIG9uCit0aGUgcHJvcGVydGllcyBvZiB0aGUgaW1hZ2UgKGluIHBhcnRpY3VsYXIsIGl0cyBjb2xvcnNwYWNlKS4gIEhvd2V2ZXIsIHlvdQorbWF5IHdlbGwgd2FudCB0byBhbHRlciB0aGVzZSBkZWZhdWx0cyBiZWZvcmUgYmVnaW5uaW5nIHRoZSBkZWNvbXByZXNzaW9uLgorRm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgZnVsbCBjb2xvciBvdXRwdXQgZnJvbSBhIGNvbG9yIGZpbGUuCitJZiB5b3Ugd2FudCBjb2xvcm1hcHBlZCBvdXRwdXQgeW91IG11c3QgYXNrIGZvciBpdC4gIE90aGVyIG9wdGlvbnMgYWxsb3cgdGhlCityZXR1cm5lZCBpbWFnZSB0byBiZSBzY2FsZWQgYW5kIGFsbG93IHZhcmlvdXMgc3BlZWQvcXVhbGl0eSB0cmFkZW9mZnMgdG8gYmUKK3NlbGVjdGVkLiAgIkRlY29tcHJlc3Npb24gcGFyYW1ldGVyIHNlbGVjdGlvbiIsIGJlbG93LCBnaXZlcyBkZXRhaWxzLgorCitJZiB0aGUgZGVmYXVsdHMgYXJlIGFwcHJvcHJpYXRlLCBub3RoaW5nIG5lZWQgYmUgZG9uZSBhdCB0aGlzIHN0ZXAuCisKK05vdGUgdGhhdCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXJlIHNldCBieSBlYWNoIGNhbGwgdG8ganBlZ19yZWFkX2hlYWRlcigpLgorSWYgeW91IHJldXNlIGEgZGVjb21wcmVzc2lvbiBvYmplY3QsIHlvdSBjYW5ub3QgZXhwZWN0IHlvdXIgcGFyYW1ldGVyCitzZXR0aW5ncyB0byBiZSBwcmVzZXJ2ZWQgYWNyb3NzIGN5Y2xlcywgYXMgeW91IGNhbiBmb3IgY29tcHJlc3Npb24uCitZb3UgbXVzdCBzZXQgZGVzaXJlZCBwYXJhbWV0ZXIgdmFsdWVzIGVhY2ggdGltZS4KKworCis1LiBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoLi4uKTsKKworT25jZSB0aGUgcGFyYW1ldGVyIHZhbHVlcyBhcmUgc2F0aXNmYWN0b3J5LCBjYWxsIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpIHRvCitiZWdpbiBkZWNvbXByZXNzaW9uLiAgVGhpcyB3aWxsIGluaXRpYWxpemUgaW50ZXJuYWwgc3RhdGUsIGFsbG9jYXRlIHdvcmtpbmcKK21lbW9yeSwgYW5kIHByZXBhcmUgZm9yIHJldHVybmluZyBkYXRhLgorCitUeXBpY2FsIGNvZGUgaXMganVzdAorCisgICAgICAgIGpwZWdfc3RhcnRfZGVjb21wcmVzcygmY2luZm8pOworCitJZiB5b3UgaGF2ZSByZXF1ZXN0ZWQgYSBtdWx0aS1wYXNzIG9wZXJhdGluZyBtb2RlLCBzdWNoIGFzIDItcGFzcyBjb2xvcgorcXVhbnRpemF0aW9uLCBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKSB3aWxsIGRvIGV2ZXJ5dGhpbmcgbmVlZGVkIGJlZm9yZSBkYXRhCitvdXRwdXQgY2FuIGJlZ2luLiAgSW4gdGhpcyBjYXNlIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpIG1heSB0YWtlIHF1aXRlIGEgd2hpbGUKK3RvIGNvbXBsZXRlLiAgV2l0aCBhIHNpbmdsZS1zY2FuIChub24gcHJvZ3Jlc3NpdmUpIEpQRUcgZmlsZSBhbmQgZGVmYXVsdAorZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLCB0aGlzIHdpbGwgbm90IGhhcHBlbjsganBlZ19zdGFydF9kZWNvbXByZXNzKCkgd2lsbAorcmV0dXJuIHF1aWNrbHkuCisKK0FmdGVyIHRoaXMgY2FsbCwgdGhlIGZpbmFsIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zLCBpbmNsdWRpbmcgYW55IHJlcXVlc3RlZAorc2NhbGluZywgYXJlIGF2YWlsYWJsZSBpbiB0aGUgSlBFRyBvYmplY3Q7IHNvIGlzIHRoZSBzZWxlY3RlZCBjb2xvcm1hcCwgaWYKK2NvbG9ybWFwcGVkIG91dHB1dCBoYXMgYmVlbiByZXF1ZXN0ZWQuICBVc2VmdWwgZmllbGRzIGluY2x1ZGUKKworICAgICAgICBvdXRwdXRfd2lkdGggICAgICAgICAgICBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0LCBhcyBzY2FsZWQKKyAgICAgICAgb3V0cHV0X2hlaWdodAorICAgICAgICBvdXRfY29sb3JfY29tcG9uZW50cyAgICAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gb3V0X2NvbG9yX3NwYWNlCisgICAgICAgIG91dHB1dF9jb21wb25lbnRzICAgICAgICMgb2YgY29sb3IgY29tcG9uZW50cyByZXR1cm5lZCBwZXIgcGl4ZWwKKyAgICAgICAgY29sb3JtYXAgICAgICAgICAgICAgICAgdGhlIHNlbGVjdGVkIGNvbG9ybWFwLCBpZiBhbnkKKyAgICAgICAgYWN0dWFsX251bWJlcl9vZl9jb2xvcnMgICAgICAgICBudW1iZXIgb2YgZW50cmllcyBpbiBjb2xvcm1hcAorCitvdXRwdXRfY29tcG9uZW50cyBpcyAxIChhIGNvbG9ybWFwIGluZGV4KSB3aGVuIHF1YW50aXppbmcgY29sb3JzOyBvdGhlcndpc2UgaXQKK2VxdWFscyBvdXRfY29sb3JfY29tcG9uZW50cy4gIEl0IGlzIHRoZSBudW1iZXIgb2YgSlNBTVBMRSB2YWx1ZXMgdGhhdCB3aWxsIGJlCitlbWl0dGVkIHBlciBwaXhlbCBpbiB0aGUgb3V0cHV0IGFycmF5cy4KKworVHlwaWNhbGx5IHlvdSB3aWxsIG5lZWQgdG8gYWxsb2NhdGUgZGF0YSBidWZmZXJzIHRvIGhvbGQgdGhlIGluY29taW5nIGltYWdlLgorWW91IHdpbGwgbmVlZCBvdXRwdXRfd2lkdGggKiBvdXRwdXRfY29tcG9uZW50cyBKU0FNUExFcyBwZXIgc2NhbmxpbmUgaW4geW91cgorb3V0cHV0IGJ1ZmZlciwgYW5kIGEgdG90YWwgb2Ygb3V0cHV0X2hlaWdodCBzY2FubGluZXMgd2lsbCBiZSByZXR1cm5lZC4KKworTm90ZTogaWYgeW91IGFyZSB1c2luZyB0aGUgSlBFRyBsaWJyYXJ5J3MgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZXIgdG8gYWxsb2NhdGUKK2RhdGEgYnVmZmVycyAoYXMgZGpwZWcgZG9lcyksIHRoZW4gdGhlIG1hbmFnZXIncyBwcm90b2NvbCByZXF1aXJlcyB0aGF0IHlvdQorcmVxdWVzdCBsYXJnZSBidWZmZXJzICpiZWZvcmUqIGNhbGxpbmcganBlZ19zdGFydF9kZWNvbXByZXNzKCkuICBUaGlzIGlzIGEKK2xpdHRsZSB0cmlja3kgc2luY2UgdGhlIG91dHB1dF9YWFggZmllbGRzIGFyZSBub3Qgbm9ybWFsbHkgdmFsaWQgdGhlbi4gIFlvdQorY2FuIG1ha2UgdGhlbSB2YWxpZCBieSBjYWxsaW5nIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucygpIGFmdGVyIHNldHRpbmcgdGhlCityZWxldmFudCBwYXJhbWV0ZXJzIChzY2FsaW5nLCBvdXRwdXQgY29sb3Igc3BhY2UsIGFuZCBxdWFudGl6YXRpb24gZmxhZykuCisKKworNi4gd2hpbGUgKHNjYW4gbGluZXMgcmVtYWluIHRvIGJlIHJlYWQpCisgICAgICAgIGpwZWdfcmVhZF9zY2FubGluZXMoLi4uKTsKKworTm93IHlvdSBjYW4gcmVhZCB0aGUgZGVjb21wcmVzc2VkIGltYWdlIGRhdGEgYnkgY2FsbGluZyBqcGVnX3JlYWRfc2NhbmxpbmVzKCkKK29uZSBvciBtb3JlIHRpbWVzLiAgQXQgZWFjaCBjYWxsLCB5b3UgcGFzcyBpbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhbmxpbmVzCit0byBiZSByZWFkIChpZSwgdGhlIGhlaWdodCBvZiB5b3VyIHdvcmtpbmcgYnVmZmVyKTsganBlZ19yZWFkX3NjYW5saW5lcygpCit3aWxsIHJldHVybiB1cCB0byB0aGF0IG1hbnkgbGluZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgbGluZXMKK2FjdHVhbGx5IHJlYWQuICBUaGUgZm9ybWF0IG9mIHRoZSByZXR1cm5lZCBkYXRhIGlzIGRpc2N1c3NlZCB1bmRlciAiRGF0YQorZm9ybWF0cyIsIGFib3ZlLiAgRG9uJ3QgZm9yZ2V0IHRoYXQgZ3JheXNjYWxlIGFuZCBjb2xvciBKUEVHcyB3aWxsIHJldHVybgorZGlmZmVyZW50IGRhdGEgZm9ybWF0cyEKKworSW1hZ2UgZGF0YSBpcyByZXR1cm5lZCBpbiB0b3AtdG8tYm90dG9tIHNjYW5saW5lIG9yZGVyLiAgSWYgeW91IG11c3Qgd3JpdGUKK291dCB0aGUgaW1hZ2UgaW4gYm90dG9tLXRvLXRvcCBvcmRlciwgeW91IGNhbiB1c2UgdGhlIEpQRUcgbGlicmFyeSdzIHZpcnR1YWwKK2FycmF5IG1lY2hhbmlzbSB0byBpbnZlcnQgdGhlIGRhdGEgZWZmaWNpZW50bHkuICBFeGFtcGxlcyBvZiB0aGlzIGNhbiBiZQorZm91bmQgaW4gdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiBkanBlZy4KKworVGhlIGxpYnJhcnkgbWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBzY2FubGluZXMgcmV0dXJuZWQgc28gZmFyCitpbiB0aGUgb3V0cHV0X3NjYW5saW5lIGZpZWxkIG9mIHRoZSBKUEVHIG9iamVjdC4gIFVzdWFsbHkgeW91IGNhbiBqdXN0IHVzZQordGhpcyB2YXJpYWJsZSBhcyB0aGUgbG9vcCBjb3VudGVyLCBzbyB0aGF0IHRoZSBsb29wIHRlc3QgbG9va3MgbGlrZQorIndoaWxlIChjaW5mby5vdXRwdXRfc2NhbmxpbmUgPCBjaW5mby5vdXRwdXRfaGVpZ2h0KSIuICAoTm90ZSB0aGF0IHRoZSB0ZXN0CitzaG91bGQgTk9UIGJlIGFnYWluc3QgaW1hZ2VfaGVpZ2h0LCB1bmxlc3MgeW91IG5ldmVyIHVzZSBzY2FsaW5nLiAgVGhlCitpbWFnZV9oZWlnaHQgZmllbGQgaXMgdGhlIGhlaWdodCBvZiB0aGUgb3JpZ2luYWwgdW5zY2FsZWQgaW1hZ2UuKQorVGhlIHJldHVybiB2YWx1ZSBhbHdheXMgZXF1YWxzIHRoZSBjaGFuZ2UgaW4gdGhlIHZhbHVlIG9mIG91dHB1dF9zY2FubGluZS4KKworSWYgeW91IGRvbid0IHVzZSBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UsIGl0IGlzIHNhZmUgdG8gYXNzdW1lIHRoYXQKK2pwZWdfcmVhZF9zY2FubGluZXMoKSByZWFkcyBhdCBsZWFzdCBvbmUgc2NhbmxpbmUgcGVyIGNhbGwsIHVudGlsIHRoZQorYm90dG9tIG9mIHRoZSBpbWFnZSBoYXMgYmVlbiByZWFjaGVkLgorCitJZiB5b3UgdXNlIGEgYnVmZmVyIGxhcmdlciB0aGFuIG9uZSBzY2FubGluZSwgaXQgaXMgTk9UIHNhZmUgdG8gYXNzdW1lIHRoYXQKK2pwZWdfcmVhZF9zY2FubGluZXMoKSBmaWxscyBpdC4gIChUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG9ubHkgYQorZmV3IHNjYW5saW5lcyBwZXIgY2FsbCwgbm8gbWF0dGVyIGhvdyBsYXJnZSBhIGJ1ZmZlciB5b3UgcGFzcy4pICBTbyB5b3UgbXVzdAorYWx3YXlzIHByb3ZpZGUgYSBsb29wIHRoYXQgY2FsbHMganBlZ19yZWFkX3NjYW5saW5lcygpIHJlcGVhdGVkbHkgdW50aWwgdGhlCit3aG9sZSBpbWFnZSBoYXMgYmVlbiByZWFkLgorCisKKzcuIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoLi4uKTsKKworQWZ0ZXIgYWxsIHRoZSBpbWFnZSBkYXRhIGhhcyBiZWVuIHJlYWQsIGNhbGwganBlZ19maW5pc2hfZGVjb21wcmVzcygpIHRvCitjb21wbGV0ZSB0aGUgZGVjb21wcmVzc2lvbiBjeWNsZS4gIFRoaXMgY2F1c2VzIHdvcmtpbmcgbWVtb3J5IGFzc29jaWF0ZWQKK3dpdGggdGhlIEpQRUcgb2JqZWN0IHRvIGJlIHJlbGVhc2VkLgorCitUeXBpY2FsIGNvZGU6CisKKyAgICAgICAganBlZ19maW5pc2hfZGVjb21wcmVzcygmY2luZm8pOworCitJZiB1c2luZyB0aGUgc3RkaW8gc291cmNlIG1hbmFnZXIsIGRvbid0IGZvcmdldCB0byBjbG9zZSB0aGUgc291cmNlIHN0ZGlvCitzdHJlYW0gaWYgbmVjZXNzYXJ5LgorCitJdCBpcyBhbiBlcnJvciB0byBjYWxsIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoKSBiZWZvcmUgcmVhZGluZyB0aGUgY29ycmVjdAordG90YWwgbnVtYmVyIG9mIHNjYW5saW5lcy4gIElmIHlvdSB3aXNoIHRvIGFib3J0IGRlY29tcHJlc3Npb24sIGNhbGwKK2pwZWdfYWJvcnQoKSBhcyBkaXNjdXNzZWQgYmVsb3cuCisKK0FmdGVyIGNvbXBsZXRpbmcgYSBkZWNvbXByZXNzaW9uIGN5Y2xlLCB5b3UgbWF5IGRpc3Bvc2Ugb2YgdGhlIEpQRUcgb2JqZWN0IGFzCitkaXNjdXNzZWQgbmV4dCwgb3IgeW91IG1heSB1c2UgaXQgdG8gZGVjb21wcmVzcyBhbm90aGVyIGltYWdlLiAgSW4gdGhhdCBjYXNlCityZXR1cm4gdG8gc3RlcCAyIG9yIDMgYXMgYXBwcm9wcmlhdGUuICBJZiB5b3UgZG8gbm90IGNoYW5nZSB0aGUgc291cmNlCittYW5hZ2VyLCB0aGUgbmV4dCBpbWFnZSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgc2FtZSBzb3VyY2UuCisKKworOC4gUmVsZWFzZSB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdC4KKworV2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBhIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QsIGRlc3Ryb3kgaXQgYnkgY2FsbGluZworanBlZ19kZXN0cm95X2RlY29tcHJlc3MoKSBvciBqcGVnX2Rlc3Ryb3koKS4gIFRoZSBwcmV2aW91cyBkaXNjdXNzaW9uIG9mCitkZXN0cm95aW5nIGNvbXByZXNzaW9uIG9iamVjdHMgYXBwbGllcyBoZXJlIHRvby4KKworVHlwaWNhbCBjb2RlOgorCisgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7CisKKworOS4gQWJvcnRpbmcuCisKK1lvdSBjYW4gYWJvcnQgYSBkZWNvbXByZXNzaW9uIGN5Y2xlIGJ5IGNhbGxpbmcganBlZ19kZXN0cm95X2RlY29tcHJlc3MoKSBvcgoranBlZ19kZXN0cm95KCkgaWYgeW91IGRvbid0IG5lZWQgdGhlIEpQRUcgb2JqZWN0IGFueSBtb3JlLCBvcgoranBlZ19hYm9ydF9kZWNvbXByZXNzKCkgb3IganBlZ19hYm9ydCgpIGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBvYmplY3QuCitUaGUgcHJldmlvdXMgZGlzY3Vzc2lvbiBvZiBhYm9ydGluZyBjb21wcmVzc2lvbiBjeWNsZXMgYXBwbGllcyBoZXJlIHRvby4KKworCitQYXJ0aWFsIGltYWdlIGRlY29tcHJlc3Npb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXJ0aWFsIGltYWdlIGRlY29tcHJlc3Npb24gaXMgY29udmVuaWVudCBmb3IgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXBwbGljYXRpb25zCit0aGF0IHdpc2ggdG8gdmlldyBvbmx5IGEgcG9ydGlvbiBvZiBhIGxhcmdlIEpQRUcgaW1hZ2Ugd2l0aG91dCBkZWNvbXByZXNzaW5nCit0aGUgd2hvbGUgdGhpbmcuICBJdCBpdCBhbHNvIHVzZWZ1bCBpbiBtZW1vcnktY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzCitvbiBtb2JpbGUgZGV2aWNlcy4pICBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gc3VwcG9ydAorcGFydGlhbCBpbWFnZSBkZWNvbXByZXNzaW9uOgorCisxLiBTa2lwcGluZyByb3dzIHdoZW4gZGVjb21wcmVzc2luZworCisgICAgICAgIGpwZWdfc2tpcF9zY2FubGluZXMoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkRJTUVOU0lPTiBudW1fbGluZXMpOworCitUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFwcGxpY2F0aW9uIHByb2dyYW1tZXJzIHdpdGggdGhlIGFiaWxpdHkgdG8gc2tpcCBvdmVyCittdWx0aXBsZSByb3dzIGluIHRoZSBKUEVHIGltYWdlLgorCitTdXNwZW5kaW5nIGRhdGEgc291cmNlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uLiAgQ2FsbGluZworanBlZ19za2lwX3NjYW5saW5lcygpIHdpdGggYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlIHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZAorYmVoYXZpb3IuCisKK2pwZWdfc2tpcF9zY2FubGluZXMoKSB3aWxsIG5vdCBhbGxvdyBza2lwcGluZyBwYXN0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLiAgSWYKK3RoZSB2YWx1ZSBvZiBudW1fbGluZXMgaXMgbGFyZ2UgZW5vdWdoIHRvIHNraXAgcGFzdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSwKK3RoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgc2tpcCB0byB0aGUgZW5kIG9mIHRoZSBpbWFnZSBpbnN0ZWFkLgorCitJZiB0aGUgdmFsdWUgb2YgbnVtX2xpbmVzIGlzIHZhbGlkLCB0aGVuIGpwZWdfc2tpcF9zY2FubGluZXMoKSB3aWxsIGFsd2F5cworc2tpcCBhbGwgb2YgdGhlIGlucHV0IHJvd3MgcmVxdWVzdGVkLiAgVGhlcmUgaXMgbm8gbmVlZCB0byBpbnNwZWN0IHRoZSByZXR1cm4KK3ZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpbiB0aGF0IGNhc2UuCisKK0Jlc3QgcmVzdWx0cyB3aWxsIGJlIGFjaGlldmVkIGJ5IGNhbGxpbmcganBlZ19za2lwX3NjYW5saW5lcygpIGZvciBsYXJnZSBjaHVua3MKK29mIHJvd3MuICBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIHZpZXdlZCBhcyBhIHdheSB0byBxdWlja2x5IGp1bXAgdG8gYQorcGFydGljdWxhciB2ZXJ0aWNhbCBvZmZzZXQgaW4gdGhlIEpQRUcgaW1hZ2UgaW4gb3JkZXIgdG8gZGVjb2RlIGEgc3Vic2V0IG9mIHRoZQoraW1hZ2UuICBVc2VkIGluIHRoaXMgbWFubmVyLCBpdCB3aWxsIHByb3ZpZGUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKK2ltcHJvdmVtZW50cy4KKworQ2FsbGluZyBqcGVnX3NraXBfc2NhbmxpbmVzKCkgZm9yIHNtYWxsIHZhbHVlcyBvZiBudW1fbGluZXMgaGFzIHNldmVyYWwKK3BvdGVudGlhbCBkcmF3YmFja3M6CisgICAgMSkgSlBFRyBkZWNvbXByZXNzaW9uIG9jY3VycyBpbiBibG9ja3MsIHNvIGlmIGpwZWdfc2tpcF9zY2FubGluZXMoKSBpcworICAgICAgIGNhbGxlZCBmcm9tIHRoZSBtaWRkbGUgb2YgYSBkZWNvbXByZXNzaW9uIGJsb2NrLCB0aGVuIGl0IGlzIGxpa2VseSB0aGF0CisgICAgICAgbXVjaCBvZiB0aGUgZGVjb21wcmVzc2lvbiB3b3JrIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBmb3IgdGhlIGZpcnN0CisgICAgICAgY291cGxlIG9mIHJvd3MgdGhhdCBuZWVkIHRvIGJlIHNraXBwZWQuCisgICAgMikgV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGl0IG11c3QgbGVhdmUgdGhlIGRlY29tcHJlc3NvciBpbiBhIHN0YXRlCisgICAgICAgc3VjaCB0aGF0IGl0IGlzIHJlYWR5IHRvIHJlYWQgdGhlIG5leHQgbGluZS4gIFRoaXMgbWF5IGludm9sdmUKKyAgICAgICBkZWNvbXByZXNzaW5nIGEgYmxvY2sgdGhhdCBtdXN0IGJlIHBhcnRpYWxseSBza2lwcGVkLgorVGhlc2UgaXNzdWVzIGFyZSBlc3BlY2lhbGx5IHRyaWNreSBmb3IgY2FzZXMgaW4gd2hpY2ggdXBzYW1wbGluZyByZXF1aXJlcworY29udGV4dCByb3dzLiAgSW4gdGhlIHdvcnN0IGNhc2UsIGpwZWdfc2tpcF9zY2FubGluZXMoKSB3aWxsIHBlcmZvcm0gc2ltaWxhcmx5Cit0byBqcGVnX3JlYWRfc2NhbmxpbmVzKCkgKHNpbmNlIGl0IHdpbGwgYWN0dWFsbHkgY2FsbCBqcGVnX3JlYWRfc2NhbmxpbmVzKCkuKQorCisyLiBEZWNvbXByZXNzaW5nIHBhcnRpYWwgc2NhbmxpbmVzCisKKyAgICAgICAganBlZ19jcm9wX3NjYW5saW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKRElNRU5TSU9OICp4b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKndpZHRoKQorCitUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFwcGxpY2F0aW9uIHByb2dyYW1tZXJzIHdpdGggdGhlIGFiaWxpdHkgdG8gZGVjb21wcmVzcworb25seSBhIHBvcnRpb24gb2YgZWFjaCByb3cgaW4gdGhlIEpQRUcgaW1hZ2UuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlcgoranBlZ19zdGFydF9kZWNvbXByZXNzKCkgYW5kIGJlZm9yZSBhbnkgY2FsbHMgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIG9yCitqcGVnX3NraXBfc2NhbmxpbmVzKCkuCisKK0lmIHhvZmZzZXQgYW5kIHdpZHRoIGRvIG5vdCBmb3JtIGEgdmFsaWQgc3Vic2V0IG9mIHRoZSBpbWFnZSByb3csIHRoZW4gdGhpcworZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBhbiBlcnJvci4gIE5vdGUgdGhhdCBpZiB0aGUgb3V0cHV0IGltYWdlIGlzIHNjYWxlZCwgdGhlbgoreG9mZnNldCBhbmQgd2lkdGggYXJlIHJlbGF0aXZlIHRvIHRoZSBzY2FsZWQgaW1hZ2UgZGltZW5zaW9ucy4KKworeG9mZnNldCBhbmQgd2lkdGggYXJlIHBhc3NlZCBieSByZWZlcmVuY2UgYmVjYXVzZSB4b2Zmc2V0IG11c3QgZmFsbCBvbiBhbiBpTUNVCitib3VuZGFyeS4gIElmIGl0IGRvZXNuJ3QsIHRoZW4gaXQgd2lsbCBiZSBtb3ZlZCBsZWZ0IHRvIHRoZSBuZWFyZXN0IGlNQ1UKK2JvdW5kYXJ5LCBhbmQgd2lkdGggd2lsbCBiZSBpbmNyZWFzZWQgYWNjb3JkaW5nbHkuICBJZiB0aGUgY2FsbGluZyBwcm9ncmFtIGRvZXMKK25vdCBsaWtlIHRoZSBhZGp1c3RlZCB2YWx1ZXMgb2YgeG9mZnNldCBhbmQgd2lkdGgsIHRoZW4gaXQgY2FuIGNhbGwKK2pwZWdfY3JvcF9zY2FubGluZSgpIGFnYWluIHdpdGggbmV3IHZhbHVlcyAoZm9yIGluc3RhbmNlLCBpZiBpdCB3YW50cyB0byBtb3ZlCit4b2Zmc2V0IHRvIHRoZSBuZWFyZXN0IGlNQ1UgYm91bmRhcnkgdG8gdGhlIHJpZ2h0IGluc3RlYWQgb2YgdG8gdGhlIGxlZnQuKQorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGNpbmZvLT5vdXRwdXRfd2lkdGggd2lsbCBiZSBzZXQgdG8gdGhlIGFkanVzdGVkCit3aWR0aC4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHVzZWQgd2hlbiBhbGxvY2F0aW5nIGFuIG91dHB1dCBidWZmZXIgdG8gcGFzcyB0bworanBlZ19yZWFkX3NjYW5saW5lcygpLgorCitUaGUgb3V0cHV0IGltYWdlIGZyb20gYSBwYXJ0aWFsLXdpZHRoIGRlY29tcHJlc3Npb24gd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlCitjb3JyZXNwb25kaW5nIGltYWdlIHJlZ2lvbiBmcm9tIGEgZnVsbCBkZWNvZGUsIHdpdGggb25lIGV4Y2VwdGlvbjogIFRoZSAiZmFuY3kiCisoc21vb3RoKSBoMnYyICg0OjI6MCkgYW5kIGgydjEgKDQ6MjoyKSB1cHNhbXBsaW5nIGFsZ29yaXRobXMgZmlsbCBpbiB0aGUKK21pc3NpbmcgY2hyb21hIGNvbXBvbmVudHMgYnkgYXZlcmFnaW5nIHRoZSBjaHJvbWEgY29tcG9uZW50cyBmcm9tIG5laWdoYm9yaW5nCitwaXhlbHMsIGV4Y2VwdCBvbiB0aGUgcmlnaHQgYW5kIGxlZnQgZWRnZXMgb2YgdGhlIGltYWdlICh3aGVyZSB0aGVyZSBhcmUgbm8KK25laWdoYm9yaW5nIHBpeGVscy4pICBXaGVuIHBlcmZvcm1pbmcgYSBwYXJ0aWFsLXdpZHRoIGRlY29tcHJlc3Npb24sIHRoZXNlCisiZmFuY3kiIHVwc2FtcGxpbmcgYWxnb3JpdGhtcyBtYXkgdHJlYXQgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzIG9mIHRoZSBwYXJ0aWFsCitpbWFnZSByZWdpb24gYXMgaWYgdGhleSBhcmUgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzIG9mIHRoZSBpbWFnZSwgbWVhbmluZyB0aGF0Cit0aGUgdXBzYW1wbGluZyBhbGdvcml0aG0gbWF5IGJlIHNpbXBsaWZpZWQuICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIHBpeGVscyBvbgordGhlIGxlZnQgb3IgcmlnaHQgZWRnZSBvZiB0aGUgcGFydGlhbCBpbWFnZSBtYXkgbm90IGJlIGV4YWN0bHkgaWRlbnRpY2FsIHRvIHRoZQorY29ycmVzcG9uZGluZyBwaXhlbHMgaW4gdGhlIG9yaWdpbmFsIGltYWdlLgorCisKK01lY2hhbmljcyBvZiB1c2FnZTogaW5jbHVkZSBmaWxlcywgbGlua2luZywgZXRjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcHBsaWNhdGlvbnMgdXNpbmcgdGhlIEpQRUcgbGlicmFyeSBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyIGZpbGUganBlZ2xpYi5oCit0byBvYnRhaW4gZGVjbGFyYXRpb25zIG9mIGRhdGEgdHlwZXMgYW5kIHJvdXRpbmVzLiAgQmVmb3JlIGluY2x1ZGluZworanBlZ2xpYi5oLCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHRoYXQgZGVmaW5lIGF0IGxlYXN0IHRoZSB0eXBlZGVmcyBGSUxFIGFuZAorc2l6ZV90LiAgT24gQU5TSS1jb25mb3JtaW5nIHN5c3RlbXMsIGluY2x1ZGluZyA8c3RkaW8uaD4gaXMgc3VmZmljaWVudDsgb24KK29sZGVyIFVuaXggc3lzdGVtcywgeW91IG1heSBuZWVkIDxzeXMvdHlwZXMuaD4gdG8gZGVmaW5lIHNpemVfdC4KKworSWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHJlZmVyIHRvIGluZGl2aWR1YWwgSlBFRyBsaWJyYXJ5IGVycm9yIGNvZGVzLCBhbHNvCitpbmNsdWRlIGplcnJvci5oIHRvIGRlZmluZSB0aG9zZSBzeW1ib2xzLgorCitqcGVnbGliLmggaW5kaXJlY3RseSBpbmNsdWRlcyB0aGUgZmlsZXMgamNvbmZpZy5oIGFuZCBqbW9yZWNmZy5oLiAgSWYgeW91IGFyZQoraW5zdGFsbGluZyB0aGUgSlBFRyBoZWFkZXIgZmlsZXMgaW4gYSBzeXN0ZW0gZGlyZWN0b3J5LCB5b3Ugd2lsbCB3YW50IHRvCitpbnN0YWxsIGFsbCBmb3VyIGZpbGVzOiBqcGVnbGliLmgsIGplcnJvci5oLCBqY29uZmlnLmgsIGptb3JlY2ZnLmguCisKK1RoZSBtb3N0IGNvbnZlbmllbnQgd2F5IHRvIGluY2x1ZGUgdGhlIEpQRUcgY29kZSBpbnRvIHlvdXIgZXhlY3V0YWJsZSBwcm9ncmFtCitpcyB0byBwcmVwYXJlIGEgbGlicmFyeSBmaWxlICgibGlianBlZy5hIiwgb3IgYSBjb3JyZXNwb25kaW5nIG5hbWUgb24gbm9uLVVuaXgKK21hY2hpbmVzKSBhbmQgcmVmZXJlbmNlIGl0IGF0IHlvdXIgbGluayBzdGVwLiAgSWYgeW91IHVzZSBvbmx5IGhhbGYgb2YgdGhlCitsaWJyYXJ5IChvbmx5IGNvbXByZXNzaW9uIG9yIG9ubHkgZGVjb21wcmVzc2lvbiksIG9ubHkgdGhhdCBtdWNoIGNvZGUgd2lsbCBiZQoraW5jbHVkZWQgZnJvbSB0aGUgbGlicmFyeSwgdW5sZXNzIHlvdXIgbGlua2VyIGlzIGhvcGVsZXNzbHkgYnJhaW4tZGFtYWdlZC4KK1RoZSBzdXBwbGllZCBtYWtlZmlsZXMgYnVpbGQgbGlianBlZy5hIGF1dG9tYXRpY2FsbHkgKHNlZSBpbnN0YWxsLnR4dCkuCisKK1doaWxlIHlvdSBjYW4gYnVpbGQgdGhlIEpQRUcgbGlicmFyeSBhcyBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSB3aGltIHN0cmlrZXMKK3lvdSwgd2UgZG9uJ3QgcmVhbGx5IHJlY29tbWVuZCBpdC4gIFRoZSB0cm91YmxlIHdpdGggc2hhcmVkIGxpYnJhcmllcyBpcyB0aGF0CithdCBzb21lIHBvaW50IHlvdSdsbCBwcm9iYWJseSB0cnkgdG8gc3Vic3RpdHV0ZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5Cit3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9ucy4gIFRoYXQgZ2VuZXJhbGx5IGRvZXNuJ3Qgd29yaworYmVjYXVzZSB0aGUgcGFyYW1ldGVyIHN0cnVjdCBkZWNsYXJhdGlvbnMgdXN1YWxseSBjaGFuZ2Ugd2l0aCBlYWNoIG5ldwordmVyc2lvbi4gIEluIG90aGVyIHdvcmRzLCB0aGUgbGlicmFyeSdzIEFQSSBpcyAqbm90KiBndWFyYW50ZWVkIGJpbmFyeQorY29tcGF0aWJsZSBhY3Jvc3MgdmVyc2lvbnM7IHdlIG9ubHkgdHJ5IHRvIGVuc3VyZSBzb3VyY2UtY29kZSBjb21wYXRpYmlsaXR5LgorKEluIGhpbmRzaWdodCwgaXQgbWlnaHQgaGF2ZSBiZWVuIHNtYXJ0ZXIgdG8gaGlkZSB0aGUgcGFyYW1ldGVyIHN0cnVjdHMgZnJvbQorYXBwbGljYXRpb25zIGFuZCBpbnRyb2R1Y2UgYSB0b24gb2YgYWNjZXNzIGZ1bmN0aW9ucyBpbnN0ZWFkLiAgVG9vIGxhdGUgbm93LAoraG93ZXZlci4pCisKK0l0IG1heSBiZSB3b3J0aCBwb2ludGluZyBvdXQgdGhhdCB0aGUgY29yZSBKUEVHIGxpYnJhcnkgZG9lcyBub3QgYWN0dWFsbHkKK3JlcXVpcmUgdGhlIHN0ZGlvIGxpYnJhcnk6IG9ubHkgdGhlIGRlZmF1bHQgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXJzIGFuZAorZXJyb3IgaGFuZGxlciBuZWVkIGl0LiAgWW91IGNhbiB1c2UgdGhlIGxpYnJhcnkgaW4gYSBzdGRpby1sZXNzIGVudmlyb25tZW50CitpZiB5b3UgcmVwbGFjZSB0aG9zZSBtb2R1bGVzIGFuZCB1c2Ugam1lbW5vYnMuYyAob3IgYW5vdGhlciBtZW1vcnkgbWFuYWdlciBvZgoreW91ciBvd24gZGV2aXNpbmcpLiAgTW9yZSBpbmZvIGFib3V0IHRoZSBtaW5pbXVtIHN5c3RlbSBsaWJyYXJ5IHJlcXVpcmVtZW50cworbWF5IGJlIGZvdW5kIGluIGppbmNsdWRlLmguCisKKworQURWQU5DRUQgRkVBVFVSRVMKKz09PT09PT09PT09PT09PT09CisKK0NvbXByZXNzaW9uIHBhcmFtZXRlciBzZWxlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBhbGwgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgeW91IGNhbiBzZXQgZm9yIEpQRUcKK2NvbXByZXNzaW9uLCBhcyB3ZWxsIGFzIHRoZSAiaGVscGVyIiByb3V0aW5lcyBwcm92aWRlZCB0byBhc3Npc3QgaW4gdGhpcwordGFzay4gIFByb3BlciBzZXR0aW5nIG9mIHNvbWUgcGFyYW1ldGVycyByZXF1aXJlcyBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nCitvZiB0aGUgSlBFRyBzdGFuZGFyZDsgaWYgeW91IGRvbid0IGtub3cgd2hhdCBhIHBhcmFtZXRlciBpcyBmb3IsIGl0J3MgYmVzdAorbm90IHRvIG1lc3Mgd2l0aCBpdCEgIFNlZSBSRUZFUkVOQ0VTIGluIHRoZSBSRUFETUUuaWpnIGZpbGUgZm9yIHBvaW50ZXJzIHRvCittb3JlIGluZm8gYWJvdXQgSlBFRy4KKworSXQncyBhIGdvb2QgaWRlYSB0byBjYWxsIGpwZWdfc2V0X2RlZmF1bHRzKCkgZmlyc3QsIGV2ZW4gaWYgeW91IHBsYW4gdG8gc2V0CithbGwgdGhlIHBhcmFtZXRlcnM7IHRoYXQgd2F5IHlvdXIgY29kZSBpcyBtb3JlIGxpa2VseSB0byB3b3JrIHdpdGggZnV0dXJlIEpQRUcKK2xpYnJhcmllcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLiAgRm9yIHRoZSBzYW1lIHJlYXNvbiwgd2UgcmVjb21tZW5kCit5b3UgdXNlIGEgaGVscGVyIHJvdXRpbmUgd2hlcmUgb25lIGlzIHByb3ZpZGVkLCBpbiBwcmVmZXJlbmNlIHRvIHR3aWRkbGluZworY2luZm8gZmllbGRzIGRpcmVjdGx5LgorCitUaGUgaGVscGVyIHJvdXRpbmVzIGFyZToKKworanBlZ19zZXRfZGVmYXVsdHMgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBhbGwgSlBFRyBwYXJhbWV0ZXJzIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMsIHVzaW5nCisgICAgICAgIG9ubHkgdGhlIGlucHV0IGltYWdlJ3MgY29sb3Igc3BhY2UgKGZpZWxkIGluX2NvbG9yX3NwYWNlLCB3aGljaCBtdXN0CisgICAgICAgIGFscmVhZHkgYmUgc2V0IGluIGNpbmZvKS4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgb25seSBuZWVkIHRvIHVzZQorICAgICAgICB0aGlzIHJvdXRpbmUgYW5kIHBlcmhhcHMganBlZ19zZXRfcXVhbGl0eSgpLgorCitqcGVnX3NldF9jb2xvcnNwYWNlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9DT0xPUl9TUEFDRSBjb2xvcnNwYWNlKQorICAgICAgICBTZXRzIHRoZSBKUEVHIGZpbGUncyBjb2xvcnNwYWNlIChmaWVsZCBqcGVnX2NvbG9yX3NwYWNlKSBhcyBzcGVjaWZpZWQsCisgICAgICAgIGFuZCBzZXRzIG90aGVyIGNvbG9yLXNwYWNlLWRlcGVuZGVudCBwYXJhbWV0ZXJzIGFwcHJvcHJpYXRlbHkuICBTZWUKKyAgICAgICAgIlNwZWNpYWwgY29sb3Igc3BhY2VzIiwgYmVsb3csIGJlZm9yZSB1c2luZyB0aGlzLiAgQSBsYXJnZSBudW1iZXIgb2YKKyAgICAgICAgcGFyYW1ldGVycywgaW5jbHVkaW5nIGFsbCBwZXItY29tcG9uZW50IHBhcmFtZXRlcnMsIGFyZSBzZXQgYnkgdGhpcworICAgICAgICByb3V0aW5lOyBpZiB5b3Ugd2FudCB0byB0d2lkZGxlIGluZGl2aWR1YWwgcGFyYW1ldGVycyB5b3Ugc2hvdWxkIGNhbGwKKyAgICAgICAganBlZ19zZXRfY29sb3JzcGFjZSgpIGJlZm9yZSByYXRoZXIgdGhhbiBhZnRlci4KKworanBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgICAgICBTZWxlY3RzIGFuIGFwcHJvcHJpYXRlIEpQRUcgY29sb3JzcGFjZSBiYXNlZCBvbiBjaW5mby0+aW5fY29sb3Jfc3BhY2UsCisgICAgICAgIGFuZCBjYWxscyBqcGVnX3NldF9jb2xvcnNwYWNlKCkuICBUaGlzIGlzIGFjdHVhbGx5IGEgc3Vicm91dGluZSBvZgorICAgICAgICBqcGVnX3NldF9kZWZhdWx0cygpLiAgSXQncyBicm9rZW4gb3V0IGluIGNhc2UgeW91IHdhbnQgdG8gY2hhbmdlCisgICAgICAgIGp1c3QgdGhlIGNvbG9yc3BhY2UtZGVwZW5kZW50IEpQRUcgcGFyYW1ldGVycy4KKworanBlZ19zZXRfcXVhbGl0eSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBxdWFsaXR5LCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorICAgICAgICBDb25zdHJ1Y3RzIEpQRUcgcXVhbnRpemF0aW9uIHRhYmxlcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGluZGljYXRlZAorICAgICAgICBxdWFsaXR5IHNldHRpbmcuICBUaGUgcXVhbGl0eSB2YWx1ZSBpcyBleHByZXNzZWQgb24gdGhlIDAuLjEwMCBzY2FsZQorICAgICAgICByZWNvbW1lbmRlZCBieSBJSkcgKGNqcGVnJ3MgIi1xdWFsaXR5IiBzd2l0Y2ggdXNlcyB0aGlzIHJvdXRpbmUpLgorICAgICAgICBOb3RlIHRoYXQgdGhlIGV4YWN0IG1hcHBpbmcgZnJvbSBxdWFsaXR5IHZhbHVlcyB0byB0YWJsZXMgbWF5IGNoYW5nZQorICAgICAgICBpbiBmdXR1cmUgSUpHIHJlbGVhc2VzIGFzIG1vcmUgaXMgbGVhcm5lZCBhYm91dCBEQ1QgcXVhbnRpemF0aW9uLgorICAgICAgICBJZiB0aGUgZm9yY2VfYmFzZWxpbmUgcGFyYW1ldGVyIGlzIFRSVUUsIHRoZW4gdGhlIHF1YW50aXphdGlvbiB0YWJsZQorICAgICAgICBlbnRyaWVzIGFyZSBjb25zdHJhaW5lZCB0byB0aGUgcmFuZ2UgMS4uMjU1IGZvciBmdWxsIEpQRUcgYmFzZWxpbmUKKyAgICAgICAgY29tcGF0aWJpbGl0eS4gIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGlzIG9ubHkgbWFrZXMgYQorICAgICAgICBkaWZmZXJlbmNlIGZvciBxdWFsaXR5IHNldHRpbmdzIGJlbG93IDI1LCBhbmQgaXQgZWZmZWN0aXZlbHkgcHJldmVudHMKKyAgICAgICAgdmVyeSBzbWFsbC9sb3cgcXVhbGl0eSBmaWxlcyBmcm9tIGJlaW5nIGdlbmVyYXRlZC4gIFRoZSBJSkcgZGVjb2RlcgorICAgICAgICBpcyBjYXBhYmxlIG9mIHJlYWRpbmcgdGhlIG5vbi1iYXNlbGluZSBmaWxlcyBnZW5lcmF0ZWQgYXQgbG93IHF1YWxpdHkKKyAgICAgICAgc2V0dGluZ3Mgd2hlbiBmb3JjZV9iYXNlbGluZSBpcyBGQUxTRSwgYnV0IG90aGVyIGRlY29kZXJzIG1heSBub3QgYmUuCisKK2pwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHNjYWxlX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorICAgICAgICBTYW1lIGFzIGpwZWdfc2V0X3F1YWxpdHkoKSBleGNlcHQgdGhhdCB0aGUgZ2VuZXJhdGVkIHRhYmxlcyBhcmUgdGhlCisgICAgICAgIHNhbXBsZSB0YWJsZXMgZ2l2ZW4gaW4gdGhlIEpQRUMgc3BlYyBzZWN0aW9uIEsuMSwgbXVsdGlwbGllZCBieSB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHNjYWxlIGZhY3RvciAod2hpY2ggaXMgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZTsgdGh1cworICAgICAgICBzY2FsZV9mYWN0b3IgPSAxMDAgcmVwcm9kdWNlcyB0aGUgc3BlYydzIHRhYmxlcykuICBOb3RlIHRoYXQgbGFyZ2VyCisgICAgICAgIHNjYWxlIGZhY3RvcnMgZ2l2ZSBsb3dlciBxdWFsaXR5LiAgVGhpcyBlbnRyeSBwb2ludCBpcyB1c2VmdWwgZm9yCisgICAgICAgIGNvbmZvcm1pbmcgdG8gdGhlIEFkb2JlIFBvc3RTY3JpcHQgRENUIGNvbnZlbnRpb25zLCBidXQgd2UgZG8gbm90CisgICAgICAgIHJlY29tbWVuZCBsaW5lYXIgc2NhbGluZyBhcyBhIHVzZXItdmlzaWJsZSBxdWFsaXR5IHNjYWxlIG90aGVyd2lzZS4KKyAgICAgICAgZm9yY2VfYmFzZWxpbmUgYWdhaW4gY29uc3RyYWlucyB0aGUgY29tcHV0ZWQgdGFibGUgZW50cmllcyB0byAxLi4yNTUuCisKK2ludCBqcGVnX3F1YWxpdHlfc2NhbGluZyAoaW50IHF1YWxpdHkpCisgICAgICAgIENvbnZlcnRzIGEgdmFsdWUgb24gdGhlIElKRy1yZWNvbW1lbmRlZCBxdWFsaXR5IHNjYWxlIHRvIGEgbGluZWFyCisgICAgICAgIHNjYWxpbmcgcGVyY2VudGFnZS4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgbWF5IGNoYW5nZSBvciBnbyBhd2F5CisgICAgICAgIGluIGZ1dHVyZSByZWxlYXNlcyAtLS0gSUpHIG1heSBjaG9vc2UgdG8gYWRvcHQgYSBzY2FsaW5nIG1ldGhvZCB0aGF0CisgICAgICAgIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBhIHNpbXBsZSBzY2FsYXIgbXVsdGlwbGllciwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAgICAgcHJlbWlzZSBvZiB0aGlzIHJvdXRpbmUgY29sbGFwc2VzLiAgQ2F2ZWF0IHVzZXIuCisKK2pwZWdfZGVmYXVsdF9xdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKKyAgICAgICAgW2xpYmpwZWcgdjcrIEFQSS9BQkkgZW11bGF0aW9uIG9ubHldCisgICAgICAgIFNldCBkZWZhdWx0IHF1YW50aXphdGlvbiB0YWJsZXMgd2l0aCBsaW5lYXIgcV9zY2FsZV9mYWN0b3JbXSB2YWx1ZXMKKyAgICAgICAgKHNlZSBiZWxvdykuCisKK2pwZWdfYWRkX3F1YW50X3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHdoaWNoX3RibCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzY2FsZV9mYWN0b3IsIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCisgICAgICAgIEFsbG93cyBhbiBhcmJpdHJhcnkgcXVhbnRpemF0aW9uIHRhYmxlIHRvIGJlIGNyZWF0ZWQuICB3aGljaF90YmwKKyAgICAgICAgaW5kaWNhdGVzIHdoaWNoIHRhYmxlIHNsb3QgdG8gZmlsbC4gIGJhc2ljX3RhYmxlIHBvaW50cyB0byBhbiBhcnJheQorICAgICAgICBvZiA2NCB1bnNpZ25lZCBpbnRzIGdpdmVuIGluIG5vcm1hbCBhcnJheSBvcmRlci4gIFRoZXNlIHZhbHVlcyBhcmUKKyAgICAgICAgbXVsdGlwbGllZCBieSBzY2FsZV9mYWN0b3IvMTAwIGFuZCB0aGVuIGNsYW1wZWQgdG8gdGhlIHJhbmdlIDEuLjY1NTM1CisgICAgICAgIChvciB0byAxLi4yNTUgaWYgZm9yY2VfYmFzZWxpbmUgaXMgVFJVRSkuCisgICAgICAgIENBVVRJT046IHByaW9yIHRvIGxpYnJhcnkgdmVyc2lvbiA2YSwganBlZ19hZGRfcXVhbnRfdGFibGUgZXhwZWN0ZWQKKyAgICAgICAgdGhlIGJhc2ljIHRhYmxlIHRvIGJlIGdpdmVuIGluIEpQRUcgemlnemFnIG9yZGVyLiAgSWYgeW91IG5lZWQgdG8KKyAgICAgICAgd3JpdGUgY29kZSB0aGF0IHdvcmtzIHdpdGggZWl0aGVyIG9sZGVyIG9yIG5ld2VyIHZlcnNpb25zIG9mIHRoaXMKKyAgICAgICAgcm91dGluZSwgeW91IG11c3QgY2hlY2sgdGhlIGxpYnJhcnkgdmVyc2lvbiBudW1iZXIuICBTb21ldGhpbmcgbGlrZQorICAgICAgICAiI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNjEiIGlzIHRoZSByaWdodCB0ZXN0LgorCitqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiAoal9jb21wcmVzc19wdHIgY2luZm8pCisgICAgICAgIEdlbmVyYXRlcyBhIGRlZmF1bHQgc2NhbiBzY3JpcHQgZm9yIHdyaXRpbmcgYSBwcm9ncmVzc2l2ZS1KUEVHIGZpbGUuCisgICAgICAgIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBvZiBjcmVhdGluZyBhIHByb2dyZXNzaXZlIGZpbGUsCisgICAgICAgIHVubGVzcyB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIHNjYW4gc2VxdWVuY2UuICBZb3UgbXVzdCBlbnN1cmUgdGhhdAorICAgICAgICB0aGUgSlBFRyBjb2xvciBzcGFjZSBpcyBzZXQgY29ycmVjdGx5IGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KKworCitDb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChjaW5mbyBmaWVsZHMpIGluY2x1ZGU6CisKK2Jvb2xlYW4gYXJpdGhfY29kZQorICAgICAgICBJZiBUUlVFLCB1c2UgYXJpdGhtZXRpYyBjb2RpbmcuCisgICAgICAgIElmIEZBTFNFLCB1c2UgSHVmZm1hbiBjb2RpbmcuCisKK0pfRENUX01FVEhPRCBkY3RfbWV0aG9kCisgICAgICAgIFNlbGVjdHMgdGhlIGFsZ29yaXRobSB1c2VkIGZvciB0aGUgRENUIHN0ZXAuICBDaG9pY2VzIGFyZToKKyAgICAgICAgICAgICAgICBKRENUX0lTTE9XOiBzbG93IGJ1dCBhY2N1cmF0ZSBpbnRlZ2VyIGFsZ29yaXRobQorICAgICAgICAgICAgICAgIEpEQ1RfSUZBU1Q6IGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZAorICAgICAgICAgICAgICAgIEpEQ1RfRkxPQVQ6IGZsb2F0aW5nLXBvaW50IG1ldGhvZAorICAgICAgICAgICAgICAgIEpEQ1RfREVGQVVMVDogZGVmYXVsdCBtZXRob2QgKG5vcm1hbGx5IEpEQ1RfSVNMT1cpCisgICAgICAgICAgICAgICAgSkRDVF9GQVNURVNUOiBmYXN0ZXN0IG1ldGhvZCAobm9ybWFsbHkgSkRDVF9JRkFTVCkKKyAgICAgICAgSW4gbGlianBlZy10dXJibywgSkRDVF9JRkFTVCBpcyBnZW5lcmFsbHkgYWJvdXQgNS0xNSUgZmFzdGVyIHRoYW4KKyAgICAgICAgSkRDVF9JU0xPVyB3aGVuIHVzaW5nIHRoZSB4ODYveDg2LTY0IFNJTUQgZXh0ZW5zaW9ucyAocmVzdWx0cyBtYXkgdmFyeQorICAgICAgICB3aXRoIG90aGVyIFNJTUQgaW1wbGVtZW50YXRpb25zLCBvciB3aGVuIHVzaW5nIGxpYmpwZWctdHVyYm8gd2l0aG91dAorICAgICAgICBTSU1EIGV4dGVuc2lvbnMuKSAgRm9yIHF1YWxpdHkgbGV2ZWxzIG9mIDkwIGFuZCBiZWxvdywgdGhlcmUgc2hvdWxkIGJlCisgICAgICAgIGxpdHRsZSBvciBubyBwZXJjZXB0aWJsZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhbGdvcml0aG1zLiAgRm9yCisgICAgICAgIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDkwLCBob3dldmVyLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEpEQ1RfSUZBU1QgYW5kCisgICAgICAgIEpEQ1RfSVNMT1cgYmVjb21lcyBtb3JlIHByb25vdW5jZWQuICBXaXRoIHF1YWxpdHk9OTcsIGZvciBpbnN0YW5jZSwKKyAgICAgICAgSkRDVF9JRkFTVCBpbmN1cnMgZ2VuZXJhbGx5IGFib3V0IGEgMS0zIGRCIGxvc3MgKGluIFBTTlIpIHJlbGF0aXZlIHRvCisgICAgICAgIEpEQ1RfSVNMT1csIGJ1dCB0aGlzIGNhbiBiZSBsYXJnZXIgZm9yIHNvbWUgaW1hZ2VzLiAgRG8gbm90IHVzZQorICAgICAgICBKRENUX0lGQVNUIHdpdGggcXVhbGl0eSBsZXZlbHMgYWJvdmUgOTcuICBUaGUgYWxnb3JpdGhtIG9mdGVuCisgICAgICAgIGRlZ2VuZXJhdGVzIGF0IHF1YWxpdHk9OTggYW5kIGFib3ZlIGFuZCBjYW4gYWN0dWFsbHkgcHJvZHVjZSBhIG1vcmUKKyAgICAgICAgbG9zc3kgaW1hZ2UgdGhhbiBpZiBsb3dlciBxdWFsaXR5IGxldmVscyBoYWQgYmVlbiB1c2VkLiAgQWxzbywgaW4KKyAgICAgICAgbGlianBlZy10dXJibywgSkRDVF9JRkFTVCBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQgZm9yIHF1YWxpdHkgbGV2ZWxzCisgICAgICAgIGFib3ZlIDk3LCBzbyBpdCB3aWxsIGJlIHNsb3dlciB0aGFuIEpEQ1RfSVNMT1cuICBKRENUX0ZMT0FUIGlzIG1haW5seSBhCisgICAgICAgIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcyBub3QgcHJvZHVjZSBzaWduaWZpY2FudGx5IG1vcmUgYWNjdXJhdGUKKyAgICAgICAgcmVzdWx0cyB0aGFuIHRoZSBJU0xPVyBtZXRob2QsIGFuZCBpdCBpcyBtdWNoIHNsb3dlci4gIFRoZSBGTE9BVCBtZXRob2QKKyAgICAgICAgbWF5IGFsc28gZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiBkaWZmZXJlbnQgbWFjaGluZXMgZHVlIHRvIHZhcnlpbmcKKyAgICAgICAgcm91bmRvZmYgYmVoYXZpb3IsIHdoZXJlYXMgdGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZQorICAgICAgICByZXN1bHRzIG9uIGFsbCBtYWNoaW5lcy4KKworSl9DT0xPUl9TUEFDRSBqcGVnX2NvbG9yX3NwYWNlCitpbnQgbnVtX2NvbXBvbmVudHMKKyAgICAgICAgVGhlIEpQRUcgY29sb3Igc3BhY2UgYW5kIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIGNvbXBvbmVudHM7IHNlZQorICAgICAgICAiU3BlY2lhbCBjb2xvciBzcGFjZXMiLCBiZWxvdywgZm9yIG1vcmUgaW5mby4gIFdlIHJlY29tbWVuZCB1c2luZworICAgICAgICBqcGVnX3NldF9jb2xvcl9zcGFjZSgpIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGVzZS4KKworYm9vbGVhbiBvcHRpbWl6ZV9jb2RpbmcKKyAgICAgICAgVFJVRSBjYXVzZXMgdGhlIGNvbXByZXNzb3IgdG8gY29tcHV0ZSBvcHRpbWFsIEh1ZmZtYW4gY29kaW5nIHRhYmxlcworICAgICAgICBmb3IgdGhlIGltYWdlLiAgVGhpcyByZXF1aXJlcyBhbiBleHRyYSBwYXNzIG92ZXIgdGhlIGRhdGEgYW5kCisgICAgICAgIHRoZXJlZm9yZSBjb3N0cyBhIGdvb2QgZGVhbCBvZiBzcGFjZSBhbmQgdGltZS4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgIEZBTFNFLCB3aGljaCB0ZWxscyB0aGUgY29tcHJlc3NvciB0byB1c2UgdGhlIHN1cHBsaWVkIG9yIGRlZmF1bHQKKyAgICAgICAgSHVmZm1hbiB0YWJsZXMuICBJbiBtb3N0IGNhc2VzIG9wdGltYWwgdGFibGVzIHNhdmUgb25seSBhIGZldyBwZXJjZW50CisgICAgICAgIG9mIGZpbGUgc2l6ZSBjb21wYXJlZCB0byB0aGUgZGVmYXVsdCB0YWJsZXMuICBOb3RlIHRoYXQgd2hlbiB0aGlzIGlzCisgICAgICAgIFRSVUUsIHlvdSBuZWVkIG5vdCBzdXBwbHkgSHVmZm1hbiB0YWJsZXMgYXQgYWxsLCBhbmQgYW55IHlvdSBkbworICAgICAgICBzdXBwbHkgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKwordW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWwKK2ludCByZXN0YXJ0X2luX3Jvd3MKKyAgICAgICAgVG8gZW1pdCByZXN0YXJ0IG1hcmtlcnMgaW4gdGhlIEpQRUcgZmlsZSwgc2V0IG9uZSBvZiB0aGVzZSBub256ZXJvLgorICAgICAgICBTZXQgcmVzdGFydF9pbnRlcnZhbCB0byBzcGVjaWZ5IHRoZSBleGFjdCBpbnRlcnZhbCBpbiBNQ1UgYmxvY2tzLgorICAgICAgICBTZXQgcmVzdGFydF9pbl9yb3dzIHRvIHNwZWNpZnkgdGhlIGludGVydmFsIGluIE1DVSByb3dzLiAgKElmCisgICAgICAgIHJlc3RhcnRfaW5fcm93cyBpcyBub3QgMCwgdGhlbiByZXN0YXJ0X2ludGVydmFsIGlzIHNldCBhZnRlciB0aGUKKyAgICAgICAgaW1hZ2Ugd2lkdGggaW4gTUNVcyBpcyBjb21wdXRlZC4pICBEZWZhdWx0cyBhcmUgemVybyAobm8gcmVzdGFydHMpLgorICAgICAgICBPbmUgcmVzdGFydCBtYXJrZXIgcGVyIE1DVSByb3cgaXMgb2Z0ZW4gYSBnb29kIGNob2ljZS4KKyAgICAgICAgTk9URTogdGhlIG92ZXJoZWFkIG9mIHJlc3RhcnQgbWFya2VycyBpcyBoaWdoZXIgaW4gZ3JheXNjYWxlIEpQRUcKKyAgICAgICAgZmlsZXMgdGhhbiBpbiBjb2xvciBmaWxlcywgYW5kIE1VQ0ggaGlnaGVyIGluIHByb2dyZXNzaXZlIEpQRUdzLgorICAgICAgICBJZiB5b3UgdXNlIHJlc3RhcnRzLCB5b3UgbWF5IHdhbnQgdG8gdXNlIGxhcmdlciBpbnRlcnZhbHMgaW4gdGhvc2UKKyAgICAgICAgY2FzZXMuCisKK2NvbnN0IGpwZWdfc2Nhbl9pbmZvICpzY2FuX2luZm8KK2ludCBudW1fc2NhbnMKKyAgICAgICAgQnkgZGVmYXVsdCwgc2Nhbl9pbmZvIGlzIE5VTEw7IHRoaXMgY2F1c2VzIHRoZSBjb21wcmVzc29yIHRvIHdyaXRlIGEKKyAgICAgICAgc2luZ2xlLXNjYW4gc2VxdWVudGlhbCBKUEVHIGZpbGUuICBJZiBub3QgTlVMTCwgc2Nhbl9pbmZvIHBvaW50cyB0bworICAgICAgICBhbiBhcnJheSBvZiBzY2FuIGRlZmluaXRpb24gcmVjb3JkcyBvZiBsZW5ndGggbnVtX3NjYW5zLiAgVGhlCisgICAgICAgIGNvbXByZXNzb3Igd2lsbCB0aGVuIHdyaXRlIGEgSlBFRyBmaWxlIGhhdmluZyBvbmUgc2NhbiBmb3IgZWFjaCBzY2FuCisgICAgICAgIGRlZmluaXRpb24gcmVjb3JkLiAgVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIG5vbmludGVybGVhdmVkIG9yCisgICAgICAgIHByb2dyZXNzaXZlIEpQRUcgZmlsZXMuICBUaGUgbGlicmFyeSBjaGVja3MgdGhhdCB0aGUgc2NhbiBhcnJheQorICAgICAgICBkZWZpbmVzIGEgdmFsaWQgSlBFRyBzY2FuIHNlcXVlbmNlLiAgKGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIGNyZWF0ZXMKKyAgICAgICAgYSBzdWl0YWJsZSBzY2FuIGRlZmluaXRpb24gYXJyYXkgZm9yIHByb2dyZXNzaXZlIEpQRUcuKSAgVGhpcyBpcworICAgICAgICBkaXNjdXNzZWQgZnVydGhlciB1bmRlciAiUHJvZ3Jlc3NpdmUgSlBFRyBzdXBwb3J0Ii4KKworaW50IHNtb290aGluZ19mYWN0b3IKKyAgICAgICAgSWYgbm9uLXplcm8sIHRoZSBpbnB1dCBpbWFnZSBpcyBzbW9vdGhlZDsgdGhlIHZhbHVlIHNob3VsZCBiZSAxIGZvcgorICAgICAgICBtaW5pbWFsIHNtb290aGluZyB0byAxMDAgZm9yIG1heGltdW0gc21vb3RoaW5nLiAgQ29uc3VsdCBqY3NhbXBsZS5jCisgICAgICAgIGZvciBkZXRhaWxzIG9mIHRoZSBzbW9vdGhpbmcgYWxnb3JpdGhtLiAgVGhlIGRlZmF1bHQgaXMgemVyby4KKworYm9vbGVhbiB3cml0ZV9KRklGX2hlYWRlcgorICAgICAgICBJZiBUUlVFLCBhIEpGSUYgQVBQMCBtYXJrZXIgaXMgZW1pdHRlZC4gIGpwZWdfc2V0X2RlZmF1bHRzKCkgYW5kCisgICAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoKSBzZXQgdGhpcyBUUlVFIGlmIGEgSkZJRi1sZWdhbCBKUEVHIGNvbG9yIHNwYWNlCisgICAgICAgIChpZSwgWUNiQ3Igb3IgZ3JheXNjYWxlKSBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIEZBTFNFLgorCitVSU5UOCBKRklGX21ham9yX3ZlcnNpb24KK1VJTlQ4IEpGSUZfbWlub3JfdmVyc2lvbgorICAgICAgICBUaGUgdmVyc2lvbiBudW1iZXIgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBKRklGIG1hcmtlci4KKyAgICAgICAganBlZ19zZXRfZGVmYXVsdHMoKSBpbml0aWFsaXplcyB0aGUgdmVyc2lvbiB0byAxLjAxIChtYWpvcj1taW5vcj0xKS4KKyAgICAgICAgWW91IHNob3VsZCBzZXQgaXQgdG8gMS4wMiAobWFqb3I9MSwgbWlub3I9MikgaWYgeW91IHBsYW4gdG8gd3JpdGUKKyAgICAgICAgYW55IEpGSUYgMS4wMiBleHRlbnNpb24gbWFya2Vycy4KKworVUlOVDggZGVuc2l0eV91bml0CitVSU5UMTYgWF9kZW5zaXR5CitVSU5UMTYgWV9kZW5zaXR5CisgICAgICAgIFRoZSByZXNvbHV0aW9uIGluZm9ybWF0aW9uIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgSkZJRiBtYXJrZXI7CisgICAgICAgIG5vdCB1c2VkIG90aGVyd2lzZS4gIGRlbnNpdHlfdW5pdCBtYXkgYmUgMCBmb3IgdW5rbm93biwKKyAgICAgICAgMSBmb3IgZG90cy9pbmNoLCBvciAyIGZvciBkb3RzL2NtLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSAwLDEsMQorICAgICAgICBpbmRpY2F0aW5nIHNxdWFyZSBwaXhlbHMgb2YgdW5rbm93biBzaXplLgorCitib29sZWFuIHdyaXRlX0Fkb2JlX21hcmtlcgorICAgICAgICBJZiBUUlVFLCBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgaXMgZW1pdHRlZC4gIGpwZWdfc2V0X2RlZmF1bHRzKCkgYW5kCisgICAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoKSBzZXQgdGhpcyBUUlVFIGlmIEpQRUcgY29sb3Igc3BhY2UgUkdCLCBDTVlLLAorICAgICAgICBvciBZQ0NLIGlzIHNlbGVjdGVkLCBvdGhlcndpc2UgRkFMU0UuICBJdCBpcyBnZW5lcmFsbHkgYSBiYWQgaWRlYQorICAgICAgICB0byBzZXQgYm90aCB3cml0ZV9KRklGX2hlYWRlciBhbmQgd3JpdGVfQWRvYmVfbWFya2VyLiAgSW4gZmFjdCwKKyAgICAgICAgeW91IHByb2JhYmx5IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXQgYWxsIC0tLSB0aGUKKyAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBlbnN1cmVzIHRoYXQgdGhlIEpQRUcgZmlsZSdzIGNvbG9yIHNwYWNlIGNhbiBiZQorICAgICAgICByZWNvZ25pemVkIGJ5IHRoZSBkZWNvZGVyLgorCitKUVVBTlRfVEJMICpxdWFudF90YmxfcHRyc1tOVU1fUVVBTlRfVEJMU10KKyAgICAgICAgUG9pbnRlcnMgdG8gY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcywgb25lIHBlciB0YWJsZSBzbG90LAorICAgICAgICBvciBOVUxMIGlmIG5vIHRhYmxlIGlzIGRlZmluZWQgZm9yIGEgc2xvdC4gIFVzdWFsbHkgdGhlc2Ugc2hvdWxkCisgICAgICAgIGJlIHNldCB2aWEgb25lIG9mIHRoZSBhYm92ZSBoZWxwZXIgcm91dGluZXM7IGpwZWdfYWRkX3F1YW50X3RhYmxlKCkKKyAgICAgICAgaXMgZ2VuZXJhbCBlbm91Z2ggdG8gZGVmaW5lIGFueSBxdWFudGl6YXRpb24gdGFibGUuICBUaGUgb3RoZXIKKyAgICAgICAgcm91dGluZXMgd2lsbCBzZXQgdXAgdGFibGUgc2xvdCAwIGZvciBsdW1pbmFuY2UgcXVhbGl0eSBhbmQgdGFibGUKKyAgICAgICAgc2xvdCAxIGZvciBjaHJvbWluYW5jZS4KKworaW50IHFfc2NhbGVfZmFjdG9yW05VTV9RVUFOVF9UQkxTXQorICAgICAgICBbbGlianBlZyB2NysgQVBJL0FCSSBlbXVsYXRpb24gb25seV0KKyAgICAgICAgTGluZWFyIHF1YW50aXphdGlvbiBzY2FsaW5nIGZhY3RvcnMgKDAtMTAwLCBkZWZhdWx0IDEwMCkKKyAgICAgICAgZm9yIHVzZSB3aXRoIGpwZWdfZGVmYXVsdF9xdGFibGVzKCkuCisgICAgICAgIFNlZSByZHN3aXRjaC5jIGFuZCBjanBlZy5jIGZvciBhbiBleGFtcGxlIG9mIHVzYWdlLgorICAgICAgICBOb3RlIHRoYXQgdGhlIHFfc2NhbGVfZmFjdG9yW10gdmFsdWVzIHVzZSAibGluZWFyIiBzY2FsZXMsIHNvIEpQRUcKKyAgICAgICAgcXVhbGl0eSBsZXZlbHMgY2hvc2VuIGJ5IHRoZSB1c2VyIG11c3QgYmUgY29udmVydGVkIHRvIHRoZXNlIHNjYWxlcworICAgICAgICB1c2luZyBqcGVnX3F1YWxpdHlfc2NhbGluZygpLiAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY29ycmVzcG9uZHMgdG8KKyAgICAgICAgY2pwZWcgLXF1YWxpdHkgOTAsNzA6CisKKyAgICAgICAgICAgICAgICBqcGVnX3NldF9kZWZhdWx0cyhjaW5mbyk7CisKKyAgICAgICAgICAgICAgICAvKiBTZXQgbHVtaW5hbmNlIHF1YWxpdHkgOTAuICovCisgICAgICAgICAgICAgICAgY2luZm8tPnFfc2NhbGVfZmFjdG9yWzBdID0ganBlZ19xdWFsaXR5X3NjYWxpbmcoOTApOworICAgICAgICAgICAgICAgIC8qIFNldCBjaHJvbWluYW5jZSBxdWFsaXR5IDcwLiAqLworICAgICAgICAgICAgICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3RvclsxXSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKDcwKTsKKworICAgICAgICAgICAgICAgIGpwZWdfZGVmYXVsdF9xdGFibGVzKGNpbmZvLCBmb3JjZV9iYXNlbGluZSk7CisKKyAgICAgICAgQ0FVVElPTjogU2V0dGluZyBzZXBhcmF0ZSBxdWFsaXR5IGxldmVscyBmb3IgY2hyb21pbmFuY2UgYW5kIGx1bWluYW5jZQorICAgICAgICBpcyBtYWlubHkgb25seSB1c2VmdWwgaWYgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgaXMgZGlzYWJsZWQuICAyeDIKKyAgICAgICAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgKEFLQSAiNDoyOjAiKSBpcyB0aGUgZGVmYXVsdCwgYnV0IHlvdSBjYW4KKyAgICAgICAgZXhwbGljaXRseSBkaXNhYmxlIHN1YnNhbXBsaW5nIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgICBjaW5mby0+Y29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgPSAxOworICAgICAgICAgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IDE7CisKK0pIVUZGX1RCTCAqZGNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXQorSkhVRkZfVEJMICphY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdCisgICAgICAgIFBvaW50ZXJzIHRvIEh1ZmZtYW4gY29kaW5nIHRhYmxlcywgb25lIHBlciB0YWJsZSBzbG90LCBvciBOVUxMIGlmCisgICAgICAgIG5vIHRhYmxlIGlzIGRlZmluZWQgZm9yIGEgc2xvdC4gIFNsb3RzIDAgYW5kIDEgYXJlIGZpbGxlZCB3aXRoIHRoZQorICAgICAgICBKUEVHIHNhbXBsZSB0YWJsZXMgYnkganBlZ19zZXRfZGVmYXVsdHMoKS4gIElmIHlvdSBuZWVkIHRvIGFsbG9jYXRlCisgICAgICAgIG1vcmUgdGFibGUgc3RydWN0dXJlcywganBlZ19hbGxvY19odWZmX3RhYmxlKCkgbWF5IGJlIHVzZWQuCisgICAgICAgIE5vdGUgdGhhdCBvcHRpbWFsIEh1ZmZtYW4gdGFibGVzIGNhbiBiZSBjb21wdXRlZCBmb3IgYW4gaW1hZ2UKKyAgICAgICAgYnkgc2V0dGluZyBvcHRpbWl6ZV9jb2RpbmcsIGFzIGRpc2N1c3NlZCBhYm92ZTsgdGhlcmUncyBzZWxkb20KKyAgICAgICAgYW55IG5lZWQgdG8gbWVzcyB3aXRoIHByb3ZpZGluZyB5b3VyIG93biBIdWZmbWFuIHRhYmxlcy4KKworCitbbGlianBlZyB2NysgQVBJL0FCSSBlbXVsYXRpb24gb25seV0KK1RoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgSlBFRyBpbWFnZSB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZmlsZSBhcmUKK2dpdmVuIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzLiAgVGhlc2UgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGlucHV0IGltYWdlCitkaW1lbnNpb25zIGFuZCB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyBieSBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuICBZb3UgY2FuCithbHNvIGNhbGwganBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucygpIHRvIG9idGFpbiB0aGUgdmFsdWVzIHRoYXQgd2lsbCByZXN1bHQKK2Zyb20gdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmdzLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBhcmUgdHJ5aW5nCit0byBwaWNrIGEgc2NhbGluZyByYXRpbyB0aGF0IHdpbGwgZ2V0IGNsb3NlIHRvIGEgZGVzaXJlZCB0YXJnZXQgc2l6ZS4KKworSkRJTUVOU0lPTiBqcGVnX3dpZHRoICAgICAgICAgICBBY3R1YWwgZGltZW5zaW9ucyBvZiBvdXRwdXQgaW1hZ2UuCitKRElNRU5TSU9OIGpwZWdfaGVpZ2h0CisKKworUGVyLWNvbXBvbmVudCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgaW4gdGhlIHN0cnVjdCBjaW5mby5jb21wX2luZm9baV0gZm9yCitjb21wb25lbnQgbnVtYmVyIGkuICBOb3RlIHRoYXQgY29tcG9uZW50cyBoZXJlIHJlZmVyIHRvIGNvbXBvbmVudHMgb2YgdGhlCitKUEVHIGNvbG9yIHNwYWNlLCAqbm90KiB0aGUgc291cmNlIGltYWdlIGNvbG9yIHNwYWNlLiAgQSBzdWl0YWJseSBsYXJnZQorY29tcF9pbmZvW10gYXJyYXkgaXMgYWxsb2NhdGVkIGJ5IGpwZWdfc2V0X2RlZmF1bHRzKCk7IGlmIHlvdSBjaG9vc2Ugbm90Cit0byB1c2UgdGhhdCByb3V0aW5lLCBpdCdzIHVwIHRvIHlvdSB0byBhbGxvY2F0ZSB0aGUgYXJyYXkuCisKK2ludCBjb21wb25lbnRfaWQKKyAgICAgICAgVGhlIG9uZS1ieXRlIGlkZW50aWZpZXIgY29kZSB0byBiZSByZWNvcmRlZCBpbiB0aGUgSlBFRyBmaWxlIGZvcgorICAgICAgICB0aGlzIGNvbXBvbmVudC4gIEZvciB0aGUgc3RhbmRhcmQgY29sb3Igc3BhY2VzLCB3ZSByZWNvbW1lbmQgeW91CisgICAgICAgIGxlYXZlIHRoZSBkZWZhdWx0IHZhbHVlcyBhbG9uZS4KKworaW50IGhfc2FtcF9mYWN0b3IKK2ludCB2X3NhbXBfZmFjdG9yCisgICAgICAgIEhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3RvcnMgZm9yIHRoZSBjb21wb25lbnQ7IG11c3QKKyAgICAgICAgYmUgMS4uNCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcgc3RhbmRhcmQuICBOb3RlIHRoYXQgbGFyZ2VyIHNhbXBsaW5nCisgICAgICAgIGZhY3RvcnMgaW5kaWNhdGUgYSBoaWdoZXItcmVzb2x1dGlvbiBjb21wb25lbnQ7IG1hbnkgcGVvcGxlIGZpbmQKKyAgICAgICAgdGhpcyBiZWhhdmlvciBxdWl0ZSB1bmludHVpdGl2ZS4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgMiwyIGZvcgorICAgICAgICBsdW1pbmFuY2UgY29tcG9uZW50cyBhbmQgMSwxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLCBleGNlcHQKKyAgICAgICAgZm9yIGdyYXlzY2FsZSB3aGVyZSAxLDEgaXMgdXNlZC4KKworaW50IHF1YW50X3RibF9ubworICAgICAgICBRdWFudGl6YXRpb24gdGFibGUgbnVtYmVyIGZvciBjb21wb25lbnQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgICAgICAwIGZvciBsdW1pbmFuY2UgY29tcG9uZW50cyBhbmQgMSBmb3IgY2hyb21pbmFuY2UgY29tcG9uZW50cy4KKworaW50IGRjX3RibF9ubworaW50IGFjX3RibF9ubworICAgICAgICBEQyBhbmQgQUMgZW50cm9weSBjb2RpbmcgdGFibGUgbnVtYmVycy4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUKKyAgICAgICAgMCBmb3IgbHVtaW5hbmNlIGNvbXBvbmVudHMgYW5kIDEgZm9yIGNocm9taW5hbmNlIGNvbXBvbmVudHMuCisKK2ludCBjb21wb25lbnRfaW5kZXgKKyAgICAgICAgTXVzdCBlcXVhbCB0aGUgY29tcG9uZW50J3MgaW5kZXggaW4gY29tcF9pbmZvW10uICAoQmVnaW5uaW5nIGluCisgICAgICAgIHJlbGVhc2UgdjYsIHRoZSBjb21wcmVzc29yIGxpYnJhcnkgd2lsbCBmaWxsIHRoaXMgaW4gYXV0b21hdGljYWxseTsKKyAgICAgICAgeW91IGRvbid0IGhhdmUgdG8uKQorCisKK0RlY29tcHJlc3Npb24gcGFyYW1ldGVyIHNlbGVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlY29tcHJlc3Npb24gcGFyYW1ldGVyIHNlbGVjdGlvbiBpcyBzb21ld2hhdCBzaW1wbGVyIHRoYW4gY29tcHJlc3Npb24KK3BhcmFtZXRlciBzZWxlY3Rpb24sIHNpbmNlIGFsbCBvZiB0aGUgSlBFRyBpbnRlcm5hbCBwYXJhbWV0ZXJzIGFyZQorcmVjb3JkZWQgaW4gdGhlIHNvdXJjZSBmaWxlIGFuZCBuZWVkIG5vdCBiZSBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb24uCisoVW5sZXNzIHlvdSBhcmUgd29ya2luZyB3aXRoIGFiYnJldmlhdGVkIGZpbGVzLCBpbiB3aGljaCBjYXNlIHNlZQorIkFiYnJldmlhdGVkIGRhdGFzdHJlYW1zIiwgYmVsb3cuKSAgRGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGNvbnRyb2wKK3RoZSBwb3N0cHJvY2Vzc2luZyBkb25lIG9uIHRoZSBpbWFnZSB0byBkZWxpdmVyIGl0IGluIGEgZm9ybWF0IHN1aXRhYmxlCitmb3IgdGhlIGFwcGxpY2F0aW9uJ3MgdXNlLiAgTWFueSBvZiB0aGUgcGFyYW1ldGVycyBjb250cm9sIHNwZWVkL3F1YWxpdHkKK3RyYWRlb2ZmcywgaW4gd2hpY2ggZmFzdGVyIGRlY29tcHJlc3Npb24gbWF5IGJlIG9idGFpbmVkIGF0IHRoZSBwcmljZSBvZgorYSBwb29yZXItcXVhbGl0eSBpbWFnZS4gIFRoZSBkZWZhdWx0cyBzZWxlY3QgdGhlIGhpZ2hlc3QgcXVhbGl0eSAoc2xvd2VzdCkKK3Byb2Nlc3NpbmcuCisKK1RoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBKUEVHIG9iamVjdCBhcmUgc2V0IGJ5IGpwZWdfcmVhZF9oZWFkZXIoKSBhbmQKK21heSBiZSB1c2VmdWwgdG8gdGhlIGFwcGxpY2F0aW9uIGluIGNob29zaW5nIGRlY29tcHJlc3Npb24gcGFyYW1ldGVyczoKKworSkRJTUVOU0lPTiBpbWFnZV93aWR0aCAgICAgICAgICAgICAgICAgIFdpZHRoIGFuZCBoZWlnaHQgb2YgaW1hZ2UKK0pESU1FTlNJT04gaW1hZ2VfaGVpZ2h0CitpbnQgbnVtX2NvbXBvbmVudHMgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNvbG9yIGNvbXBvbmVudHMKK0pfQ09MT1JfU1BBQ0UganBlZ19jb2xvcl9zcGFjZSAgICAgICAgICBDb2xvcnNwYWNlIG9mIGltYWdlCitib29sZWFuIHNhd19KRklGX21hcmtlciAgICAgICAgICAgICAgICAgVFJVRSBpZiBhIEpGSUYgQVBQMCBtYXJrZXIgd2FzIHNlZW4KKyAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uICAgICAgICAgICAgICBWZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gSkZJRiBtYXJrZXIKKyAgVUlOVDggSkZJRl9taW5vcl92ZXJzaW9uCisgIFVJTlQ4IGRlbnNpdHlfdW5pdCAgICAgICAgICAgICAgICAgICAgUmVzb2x1dGlvbiBkYXRhIGZyb20gSkZJRiBtYXJrZXIKKyAgVUlOVDE2IFhfZGVuc2l0eQorICBVSU5UMTYgWV9kZW5zaXR5Citib29sZWFuIHNhd19BZG9iZV9tYXJrZXIgICAgICAgICAgICAgICAgVFJVRSBpZiBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgd2FzIHNlZW4KKyAgVUlOVDggQWRvYmVfdHJhbnNmb3JtICAgICAgICAgICAgICAgICBDb2xvciB0cmFuc2Zvcm0gY29kZSBmcm9tIEFkb2JlIG1hcmtlcgorCitUaGUgSlBFRyBjb2xvciBzcGFjZSwgdW5mb3J0dW5hdGVseSwgaXMgc29tZXRoaW5nIG9mIGEgZ3Vlc3Mgc2luY2UgdGhlIEpQRUcKK3N0YW5kYXJkIHByb3BlciBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIHJlY29yZCBpdC4gIEluIHByYWN0aWNlIG1vc3QgZmlsZXMKK2FkaGVyZSB0byB0aGUgSkZJRiBvciBBZG9iZSBjb252ZW50aW9ucywgYW5kIHRoZSBkZWNvZGVyIHdpbGwgcmVjb2duaXplIHRoZXNlCitjb3JyZWN0bHkuICBTZWUgIlNwZWNpYWwgY29sb3Igc3BhY2VzIiwgYmVsb3csIGZvciBtb3JlIGluZm8uCisKKworVGhlIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyB0aGF0IGRldGVybWluZSB0aGUgYmFzaWMgcHJvcGVydGllcyBvZiB0aGUKK3JldHVybmVkIGltYWdlIGFyZToKKworSl9DT0xPUl9TUEFDRSBvdXRfY29sb3Jfc3BhY2UKKyAgICAgICAgT3V0cHV0IGNvbG9yIHNwYWNlLiAganBlZ19yZWFkX2hlYWRlcigpIHNldHMgYW4gYXBwcm9wcmlhdGUgZGVmYXVsdAorICAgICAgICBiYXNlZCBvbiBqcGVnX2NvbG9yX3NwYWNlOyB0eXBpY2FsbHkgaXQgd2lsbCBiZSBSR0Igb3IgZ3JheXNjYWxlLgorICAgICAgICBUaGUgYXBwbGljYXRpb24gY2FuIGNoYW5nZSB0aGlzIGZpZWxkIHRvIHJlcXVlc3Qgb3V0cHV0IGluIGEgZGlmZmVyZW50CisgICAgICAgIGNvbG9yc3BhY2UuICBGb3IgZXhhbXBsZSwgc2V0IGl0IHRvIEpDU19HUkFZU0NBTEUgdG8gZ2V0IGdyYXlzY2FsZQorICAgICAgICBvdXRwdXQgZnJvbSBhIGNvbG9yIGZpbGUuICAoVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZpZXdpbmc6IGdyYXlzY2FsZQorICAgICAgICBvdXRwdXQgaXMgZmFzdGVyIHRoYW4gZnVsbCBjb2xvciBzaW5jZSB0aGUgY29sb3IgY29tcG9uZW50cyBuZWVkIG5vdAorICAgICAgICBiZSBwcm9jZXNzZWQuKSAgTm90ZSB0aGF0IG5vdCBhbGwgcG9zc2libGUgY29sb3Igc3BhY2UgdHJhbnNmb3JtcyBhcmUKKyAgICAgICAgY3VycmVudGx5IGltcGxlbWVudGVkOyB5b3UgbWF5IG5lZWQgdG8gZXh0ZW5kIGpkY29sb3IuYyBpZiB5b3Ugd2FudCBhbgorICAgICAgICB1bnVzdWFsIGNvbnZlcnNpb24uCisKK3Vuc2lnbmVkIGludCBzY2FsZV9udW0sIHNjYWxlX2Rlbm9tCisgICAgICAgIFNjYWxlIHRoZSBpbWFnZSBieSB0aGUgZnJhY3Rpb24gc2NhbGVfbnVtL3NjYWxlX2Rlbm9tLiAgRGVmYXVsdCBpcworICAgICAgICAxLzEsIG9yIG5vIHNjYWxpbmcuICBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCBzY2FsaW5nIHJhdGlvcworICAgICAgICBhcmUgTS84IHdpdGggYWxsIE0gZnJvbSAxIHRvIDE2LCBvciBhbnkgcmVkdWNlZCBmcmFjdGlvbiB0aGVyZW9mIChzdWNoCisgICAgICAgIGFzIDEvMiwgMy80LCBldGMuKSAgKFRoZSBsaWJyYXJ5IGRlc2lnbiBhbGxvd3MgZm9yIGFyYml0cmFyeQorICAgICAgICBzY2FsaW5nIHJhdGlvcyBidXQgdGhpcyBpcyBub3QgbGlrZWx5IHRvIGJlIGltcGxlbWVudGVkIGFueSB0aW1lIHNvb24uKQorICAgICAgICBTbWFsbGVyIHNjYWxpbmcgcmF0aW9zIHBlcm1pdCBzaWduaWZpY2FudGx5IGZhc3RlciBkZWNvZGluZyBzaW5jZQorICAgICAgICBmZXdlciBwaXhlbHMgbmVlZCBiZSBwcm9jZXNzZWQgYW5kIGEgc2ltcGxlciBJRENUIG1ldGhvZCBjYW4gYmUgdXNlZC4KKworYm9vbGVhbiBxdWFudGl6ZV9jb2xvcnMKKyAgICAgICAgSWYgc2V0IFRSVUUsIGNvbG9ybWFwcGVkIG91dHB1dCB3aWxsIGJlIGRlbGl2ZXJlZC4gIERlZmF1bHQgaXMgRkFMU0UsCisgICAgICAgIG1lYW5pbmcgdGhhdCBmdWxsLWNvbG9yIG91dHB1dCB3aWxsIGJlIGRlbGl2ZXJlZC4KKworVGhlIG5leHQgdGhyZWUgcGFyYW1ldGVycyBhcmUgcmVsZXZhbnQgb25seSBpZiBxdWFudGl6ZV9jb2xvcnMgaXMgVFJVRS4KKworaW50IGRlc2lyZWRfbnVtYmVyX29mX2NvbG9ycworICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgdG8gdXNlIGluIGdlbmVyYXRpbmcgYSBsaWJyYXJ5LXN1cHBsaWVkIGNvbG9yCisgICAgICAgIG1hcCAodGhlIGFjdHVhbCBudW1iZXIgb2YgY29sb3JzIGlzIHJldHVybmVkIGluIGEgZGlmZmVyZW50IGZpZWxkKS4KKyAgICAgICAgRGVmYXVsdCAyNTYuICBJZ25vcmVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHN1cHBsaWVzIGl0cyBvd24gY29sb3IgbWFwLgorCitib29sZWFuIHR3b19wYXNzX3F1YW50aXplCisgICAgICAgIElmIFRSVUUsIGFuIGV4dHJhIHBhc3Mgb3ZlciB0aGUgaW1hZ2UgaXMgbWFkZSB0byBzZWxlY3QgYSBjdXN0b20gY29sb3IKKyAgICAgICAgbWFwIGZvciB0aGUgaW1hZ2UuICBUaGlzIHVzdWFsbHkgbG9va3MgYSBsb3QgYmV0dGVyIHRoYW4gdGhlIG9uZS1zaXplLQorICAgICAgICBmaXRzLWFsbCBjb2xvcm1hcCB0aGF0IGlzIHVzZWQgb3RoZXJ3aXNlLiAgRGVmYXVsdCBpcyBUUlVFLiAgSWdub3JlZAorICAgICAgICB3aGVuIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllcyBpdHMgb3duIGNvbG9yIG1hcC4KKworSl9ESVRIRVJfTU9ERSBkaXRoZXJfbW9kZQorICAgICAgICBTZWxlY3RzIGNvbG9yIGRpdGhlcmluZyBtZXRob2QuICBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKKyAgICAgICAgICAgICAgICBKRElUSEVSX05PTkUgICAgbm8gZGl0aGVyaW5nOiBmYXN0LCB2ZXJ5IGxvdyBxdWFsaXR5CisgICAgICAgICAgICAgICAgSkRJVEhFUl9PUkRFUkVEIG9yZGVyZWQgZGl0aGVyOiBtb2RlcmF0ZSBzcGVlZCBhbmQgcXVhbGl0eQorICAgICAgICAgICAgICAgIEpESVRIRVJfRlMgICAgICBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyOiBzbG93LCBoaWdoIHF1YWxpdHkKKyAgICAgICAgRGVmYXVsdCBpcyBKRElUSEVSX0ZTLiAgKEF0IHByZXNlbnQsIG9yZGVyZWQgZGl0aGVyIGlzIGltcGxlbWVudGVkCisgICAgICAgIG9ubHkgaW4gdGhlIHNpbmdsZS1wYXNzLCBzdGFuZGFyZC1jb2xvcm1hcCBjYXNlLiAgSWYgeW91IGFzayBmb3IKKyAgICAgICAgb3JkZXJlZCBkaXRoZXIgd2hlbiB0d29fcGFzc19xdWFudGl6ZSBpcyBUUlVFIG9yIHdoZW4geW91IHN1cHBseQorICAgICAgICBhbiBleHRlcm5hbCBjb2xvciBtYXAsIHlvdSdsbCBnZXQgRi1TIGRpdGhlcmluZy4pCisKK1doZW4gcXVhbnRpemVfY29sb3JzIGlzIFRSVUUsIHRoZSB0YXJnZXQgY29sb3IgbWFwIGlzIGRlc2NyaWJlZCBieSB0aGUgbmV4dAordHdvIGZpZWxkcy4gIGNvbG9ybWFwIGlzIHNldCB0byBOVUxMIGJ5IGpwZWdfcmVhZF9oZWFkZXIoKS4gIFRoZSBhcHBsaWNhdGlvbgorY2FuIHN1cHBseSBhIGNvbG9yIG1hcCBieSBzZXR0aW5nIGNvbG9ybWFwIG5vbi1OVUxMIGFuZCBzZXR0aW5nCithY3R1YWxfbnVtYmVyX29mX2NvbG9ycyB0byB0aGUgbWFwIHNpemUuICBPdGhlcndpc2UsIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpCitzZWxlY3RzIGEgc3VpdGFibGUgY29sb3IgbWFwIGFuZCBzZXRzIHRoZXNlIHR3byBmaWVsZHMgaXRzZWxmLgorW0ltcGxlbWVudGF0aW9uIHJlc3RyaWN0aW9uOiBhdCBwcmVzZW50LCBhbiBleHRlcm5hbGx5IHN1cHBsaWVkIGNvbG9ybWFwIGlzCitvbmx5IGFjY2VwdGVkIGZvciAzLWNvbXBvbmVudCBvdXRwdXQgY29sb3Igc3BhY2VzLl0KKworSlNBTVBBUlJBWSBjb2xvcm1hcAorICAgICAgICBUaGUgY29sb3IgbWFwLCByZXByZXNlbnRlZCBhcyBhIDItRCBwaXhlbCBhcnJheSBvZiBvdXRfY29sb3JfY29tcG9uZW50cworICAgICAgICByb3dzIGFuZCBhY3R1YWxfbnVtYmVyX29mX2NvbG9ycyBjb2x1bW5zLiAgSWdub3JlZCBpZiBub3QgcXVhbnRpemluZy4KKyAgICAgICAgQ0FVVElPTjogaWYgdGhlIEpQRUcgbGlicmFyeSBjcmVhdGVzIGl0cyBvd24gY29sb3JtYXAsIHRoZSBzdG9yYWdlCisgICAgICAgIHBvaW50ZWQgdG8gYnkgdGhpcyBmaWVsZCBpcyByZWxlYXNlZCBieSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkuCisgICAgICAgIENvcHkgdGhlIGNvbG9ybWFwIHNvbWV3aGVyZSBlbHNlIGZpcnN0LCBpZiB5b3Ugd2FudCB0byBzYXZlIGl0LgorCitpbnQgYWN0dWFsX251bWJlcl9vZl9jb2xvcnMKKyAgICAgICAgVGhlIG51bWJlciBvZiBjb2xvcnMgaW4gdGhlIGNvbG9yIG1hcC4KKworQWRkaXRpb25hbCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMgdGhhdCB0aGUgYXBwbGljYXRpb24gbWF5IHNldCBpbmNsdWRlOgorCitKX0RDVF9NRVRIT0QgZGN0X21ldGhvZAorICAgICAgICBTZWxlY3RzIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIERDVCBzdGVwLiAgQ2hvaWNlcyBhcmU6CisgICAgICAgICAgICAgICAgSkRDVF9JU0xPVzogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICBKRENUX0lGQVNUOiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QKKyAgICAgICAgICAgICAgICBKRENUX0ZMT0FUOiBmbG9hdGluZy1wb2ludCBtZXRob2QKKyAgICAgICAgICAgICAgICBKRENUX0RFRkFVTFQ6IGRlZmF1bHQgbWV0aG9kIChub3JtYWxseSBKRENUX0lTTE9XKQorICAgICAgICAgICAgICAgIEpEQ1RfRkFTVEVTVDogZmFzdGVzdCBtZXRob2QgKG5vcm1hbGx5IEpEQ1RfSUZBU1QpCisgICAgICAgIEluIGxpYmpwZWctdHVyYm8sIEpEQ1RfSUZBU1QgaXMgZ2VuZXJhbGx5IGFib3V0IDUtMTUlIGZhc3RlciB0aGFuCisgICAgICAgIEpEQ1RfSVNMT1cgd2hlbiB1c2luZyB0aGUgeDg2L3g4Ni02NCBTSU1EIGV4dGVuc2lvbnMgKHJlc3VsdHMgbWF5IHZhcnkKKyAgICAgICAgd2l0aCBvdGhlciBTSU1EIGltcGxlbWVudGF0aW9ucywgb3Igd2hlbiB1c2luZyBsaWJqcGVnLXR1cmJvIHdpdGhvdXQKKyAgICAgICAgU0lNRCBleHRlbnNpb25zLikgIElmIHRoZSBKUEVHIGltYWdlIHdhcyBjb21wcmVzc2VkIHVzaW5nIGEgcXVhbGl0eQorICAgICAgICBsZXZlbCBvZiA4NSBvciBiZWxvdywgdGhlbiB0aGVyZSBzaG91bGQgYmUgbGl0dGxlIG9yIG5vIHBlcmNlcHRpYmxlCisgICAgICAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMuICBXaGVuIGRlY29tcHJlc3NpbmcgaW1hZ2VzIHRoYXQKKyAgICAgICAgd2VyZSBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDg1LCBob3dldmVyLCB0aGUgZGlmZmVyZW5jZQorICAgICAgICBiZXR3ZWVuIEpEQ1RfSUZBU1QgYW5kIEpEQ1RfSVNMT1cgYmVjb21lcyBtb3JlIHByb25vdW5jZWQuICBXaXRoIGltYWdlcworICAgICAgICBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHk9OTcsIGZvciBpbnN0YW5jZSwgSkRDVF9JRkFTVCBpbmN1cnMgZ2VuZXJhbGx5CisgICAgICAgIGFib3V0IGEgNC02IGRCIGxvc3MgKGluIFBTTlIpIHJlbGF0aXZlIHRvIEpEQ1RfSVNMT1csIGJ1dCB0aGlzIGNhbiBiZQorICAgICAgICBsYXJnZXIgZm9yIHNvbWUgaW1hZ2VzLiAgSWYgeW91IGNhbiBhdm9pZCBpdCwgZG8gbm90IHVzZSBKRENUX0lGQVNUCisgICAgICAgIHdoZW4gZGVjb21wcmVzc2luZyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQgdXNpbmcgcXVhbGl0eSBsZXZlbHMKKyAgICAgICAgYWJvdmUgOTcuICBUaGUgYWxnb3JpdGhtIG9mdGVuIGRlZ2VuZXJhdGVzIGZvciBzdWNoIGltYWdlcyBhbmQgY2FuCisgICAgICAgIGFjdHVhbGx5IHByb2R1Y2UgYSBtb3JlIGxvc3N5IG91dHB1dCBpbWFnZSB0aGFuIGlmIHRoZSBKUEVHIGltYWdlIGhhZAorICAgICAgICBiZWVuIGNvbXByZXNzZWQgdXNpbmcgbG93ZXIgcXVhbGl0eSBsZXZlbHMuICBKRENUX0ZMT0FUIGlzIG1haW5seSBhCisgICAgICAgIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcyBub3QgcHJvZHVjZSBzaWduaWZpY2FudGx5IG1vcmUgYWNjdXJhdGUKKyAgICAgICAgcmVzdWx0cyB0aGFuIHRoZSBJU0xPVyBtZXRob2QsIGFuZCBpdCBpcyBtdWNoIHNsb3dlci4gIFRoZSBGTE9BVCBtZXRob2QKKyAgICAgICAgbWF5IGFsc28gZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiBkaWZmZXJlbnQgbWFjaGluZXMgZHVlIHRvIHZhcnlpbmcKKyAgICAgICAgcm91bmRvZmYgYmVoYXZpb3IsIHdoZXJlYXMgdGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZQorICAgICAgICByZXN1bHRzIG9uIGFsbCBtYWNoaW5lcy4KKworYm9vbGVhbiBkb19mYW5jeV91cHNhbXBsaW5nCisgICAgICAgIElmIFRSVUUsIGRvIGNhcmVmdWwgdXBzYW1wbGluZyBvZiBjaHJvbWEgY29tcG9uZW50cy4gIElmIEZBTFNFLAorICAgICAgICBhIGZhc3RlciBidXQgc2xvcHBpZXIgbWV0aG9kIGlzIHVzZWQuICBEZWZhdWx0IGlzIFRSVUUuICBUaGUgdmlzdWFsCisgICAgICAgIGltcGFjdCBvZiB0aGUgc2xvcHBpZXIgbWV0aG9kIGlzIG9mdGVuIHZlcnkgc21hbGwuCisKK2Jvb2xlYW4gZG9fYmxvY2tfc21vb3RoaW5nCisgICAgICAgIElmIFRSVUUsIGludGVyYmxvY2sgc21vb3RoaW5nIGlzIGFwcGxpZWQgaW4gZWFybHkgc3RhZ2VzIG9mIGRlY29kaW5nCisgICAgICAgIHByb2dyZXNzaXZlIEpQRUcgZmlsZXM7IGlmIEZBTFNFLCBub3QuICBEZWZhdWx0IGlzIFRSVUUuICBFYXJseQorICAgICAgICBwcm9ncmVzc2lvbiBzdGFnZXMgbG9vayAiZnV6enkiIHdpdGggc21vb3RoaW5nLCAiYmxvY2t5IiB3aXRob3V0LgorICAgICAgICBJbiBhbnkgY2FzZSwgYmxvY2sgc21vb3RoaW5nIGNlYXNlcyB0byBiZSBhcHBsaWVkIGFmdGVyIHRoZSBmaXJzdCBmZXcKKyAgICAgICAgQUMgY29lZmZpY2llbnRzIGFyZSBrbm93biB0byBmdWxsIGFjY3VyYWN5LCBzbyBpdCBpcyByZWxldmFudCBvbmx5CisgICAgICAgIHdoZW4gdXNpbmcgYnVmZmVyZWQtaW1hZ2UgbW9kZSBmb3IgcHJvZ3Jlc3NpdmUgaW1hZ2VzLgorCitib29sZWFuIGVuYWJsZV8xcGFzc19xdWFudAorYm9vbGVhbiBlbmFibGVfZXh0ZXJuYWxfcXVhbnQKK2Jvb2xlYW4gZW5hYmxlXzJwYXNzX3F1YW50CisgICAgICAgIFRoZXNlIGFyZSBzaWduaWZpY2FudCBvbmx5IGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUsIHdoaWNoIGlzCisgICAgICAgIGRlc2NyaWJlZCBpbiBpdHMgb3duIHNlY3Rpb24gYmVsb3cuCisKKworVGhlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFyZSBnaXZlbiBieSB0aGUgZm9sbG93aW5nIGZpZWxkcy4gIFRoZXNlIGFyZQorY29tcHV0ZWQgZnJvbSB0aGUgc291cmNlIGltYWdlIGRpbWVuc2lvbnMgYW5kIHRoZSBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMKK2J5IGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLiAgWW91IGNhbiBhbHNvIGNhbGwganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKCkKK3RvIG9idGFpbiB0aGUgdmFsdWVzIHRoYXQgd2lsbCByZXN1bHQgZnJvbSB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZ3MuCitUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGFyZSB0cnlpbmcgdG8gcGljayBhIHNjYWxpbmcgcmF0aW8gdGhhdCB3aWxsIGdldAorY2xvc2UgdG8gYSBkZXNpcmVkIHRhcmdldCBzaXplLiAgSXQncyBhbHNvIGltcG9ydGFudCBpZiB5b3UgYXJlIHVzaW5nIHRoZQorSlBFRyBsaWJyYXJ5J3MgbWVtb3J5IG1hbmFnZXIgdG8gYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciBzcGFjZSwgYmVjYXVzZSB5b3UKK2FyZSBzdXBwb3NlZCB0byByZXF1ZXN0IHN1Y2ggYnVmZmVycyAqYmVmb3JlKiBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KKworSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGggICAgICAgICBBY3R1YWwgZGltZW5zaW9ucyBvZiBvdXRwdXQgaW1hZ2UuCitKRElNRU5TSU9OIG91dHB1dF9oZWlnaHQKK2ludCBvdXRfY29sb3JfY29tcG9uZW50cyAgICAgICAgTnVtYmVyIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gb3V0X2NvbG9yX3NwYWNlLgoraW50IG91dHB1dF9jb21wb25lbnRzICAgICAgICAgICBOdW1iZXIgb2YgY29sb3IgY29tcG9uZW50cyByZXR1cm5lZC4KK2ludCByZWNfb3V0YnVmX2hlaWdodCAgICAgICAgICAgUmVjb21tZW5kZWQgaGVpZ2h0IG9mIHNjYW5saW5lIGJ1ZmZlci4KKworV2hlbiBxdWFudGl6aW5nIGNvbG9ycywgb3V0cHV0X2NvbXBvbmVudHMgaXMgMSwgaW5kaWNhdGluZyBhIHNpbmdsZSBjb2xvciBtYXAKK2luZGV4IHBlciBwaXhlbC4gIE90aGVyd2lzZSBpdCBlcXVhbHMgb3V0X2NvbG9yX2NvbXBvbmVudHMuICBUaGUgb3V0cHV0IGFycmF5cworYXJlIHJlcXVpcmVkIHRvIGJlIG91dHB1dF93aWR0aCAqIG91dHB1dF9jb21wb25lbnRzIEpTQU1QTEVzIHdpZGUuCisKK3JlY19vdXRidWZfaGVpZ2h0IGlzIHRoZSByZWNvbW1lbmRlZCBtaW5pbXVtIGhlaWdodCAoaW4gc2NhbmxpbmVzKSBvZiB0aGUKK2J1ZmZlciBwYXNzZWQgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpLiAgSWYgdGhlIGJ1ZmZlciBpcyBzbWFsbGVyLCB0aGUKK2xpYnJhcnkgd2lsbCBzdGlsbCB3b3JrLCBidXQgdGltZSB3aWxsIGJlIHdhc3RlZCBkdWUgdG8gdW5uZWNlc3NhcnkgZGF0YQorY29weWluZy4gIEluIGhpZ2gtcXVhbGl0eSBtb2RlcywgcmVjX291dGJ1Zl9oZWlnaHQgaXMgYWx3YXlzIDEsIGJ1dCBzb21lCitmYXN0ZXIsIGxvd2VyLXF1YWxpdHkgbW9kZXMgc2V0IGl0IHRvIGxhcmdlciB2YWx1ZXMgKHR5cGljYWxseSAyIHRvIDQpLgorSWYgeW91IGFyZSBnb2luZyB0byBhc2sgZm9yIGEgaGlnaC1zcGVlZCBwcm9jZXNzaW5nIG1vZGUsIHlvdSBtYXkgYXMgd2VsbAorZ28gdG8gdGhlIHRyb3VibGUgb2YgaG9ub3JpbmcgcmVjX291dGJ1Zl9oZWlnaHQgc28gYXMgdG8gYXZvaWQgZGF0YSBjb3B5aW5nLgorKEFuIG91dHB1dCBidWZmZXIgbGFyZ2VyIHRoYW4gcmVjX291dGJ1Zl9oZWlnaHQgbGluZXMgaXMgT0ssIGJ1dCB3b24ndAorcHJvdmlkZSBhbnkgbWF0ZXJpYWwgc3BlZWQgaW1wcm92ZW1lbnQgb3ZlciB0aGF0IGhlaWdodC4pCisKKworU3BlY2lhbCBjb2xvciBzcGFjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBKUEVHIHN0YW5kYXJkIGl0c2VsZiBpcyAiY29sb3IgYmxpbmQiIGFuZCBkb2Vzbid0IHNwZWNpZnkgYW55IHBhcnRpY3VsYXIKK2NvbG9yIHNwYWNlLiAgSXQgaXMgY3VzdG9tYXJ5IHRvIGNvbnZlcnQgY29sb3IgZGF0YSB0byBhIGx1bWluYW5jZS9jaHJvbWluYW5jZQorY29sb3Igc3BhY2UgYmVmb3JlIGNvbXByZXNzaW5nLCBzaW5jZSB0aGlzIHBlcm1pdHMgZ3JlYXRlciBjb21wcmVzc2lvbi4gIFRoZQorZXhpc3RpbmcgZGUtZmFjdG8gSlBFRyBmaWxlIGZvcm1hdCBzdGFuZGFyZHMgc3BlY2lmeSBZQ2JDciBvciBncmF5c2NhbGUgZGF0YQorKEpGSUYpLCBvciBncmF5c2NhbGUsIFJHQiwgWUNiQ3IsIENNWUssIG9yIFlDQ0sgKEFkb2JlKS4gIEZvciBzcGVjaWFsCithcHBsaWNhdGlvbnMgc3VjaCBhcyBtdWx0aXNwZWN0cmFsIGltYWdlcywgb3RoZXIgY29sb3Igc3BhY2VzIGNhbiBiZSB1c2VkLAorYnV0IGl0IG11c3QgYmUgdW5kZXJzdG9vZCB0aGF0IHN1Y2ggZmlsZXMgd2lsbCBiZSB1bnBvcnRhYmxlLgorCitUaGUgSlBFRyBsaWJyYXJ5IGNhbiBoYW5kbGUgdGhlIG1vc3QgY29tbW9uIGNvbG9yc3BhY2UgY29udmVyc2lvbnMgKG5hbWVseQorUkdCIDw9PiBZQ2JDciBhbmQgQ01ZSyA8PT4gWUNDSykuICBJdCBjYW4gYWxzbyBkZWFsIHdpdGggZGF0YSBvZiBhbiB1bmtub3duCitjb2xvciBzcGFjZSwgcGFzc2luZyBpdCB0aHJvdWdoIHdpdGhvdXQgY29udmVyc2lvbi4gIElmIHlvdSBkZWFsIGV4dGVuc2l2ZWx5Cit3aXRoIGFuIHVudXN1YWwgY29sb3Igc3BhY2UsIHlvdSBjYW4gZWFzaWx5IGV4dGVuZCB0aGUgbGlicmFyeSB0byB1bmRlcnN0YW5kCithZGRpdGlvbmFsIGNvbG9yIHNwYWNlcyBhbmQgcGVyZm9ybSBhcHByb3ByaWF0ZSBjb252ZXJzaW9ucy4KKworRm9yIGNvbXByZXNzaW9uLCB0aGUgc291cmNlIGRhdGEncyBjb2xvciBzcGFjZSBpcyBzcGVjaWZpZWQgYnkgZmllbGQKK2luX2NvbG9yX3NwYWNlLiAgVGhpcyBpcyB0cmFuc2Zvcm1lZCB0byB0aGUgSlBFRyBmaWxlJ3MgY29sb3Igc3BhY2UgZ2l2ZW4KK2J5IGpwZWdfY29sb3Jfc3BhY2UuICBqcGVnX3NldF9kZWZhdWx0cygpIGNob29zZXMgYSByZWFzb25hYmxlIEpQRUcgY29sb3IKK3NwYWNlIGRlcGVuZGluZyBvbiBpbl9jb2xvcl9zcGFjZSwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBjYWxsaW5nCitqcGVnX3NldF9jb2xvcnNwYWNlKCkuICBPZiBjb3Vyc2UgeW91IG11c3Qgc2VsZWN0IGEgc3VwcG9ydGVkIHRyYW5zZm9ybWF0aW9uLgoramNjb2xvci5jIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybWF0aW9uczoKKyAgICAgICAgUkdCID0+IFlDYkNyCisgICAgICAgIFJHQiA9PiBHUkFZU0NBTEUKKyAgICAgICAgWUNiQ3IgPT4gR1JBWVNDQUxFCisgICAgICAgIENNWUsgPT4gWUNDSworcGx1cyB0aGUgbnVsbCB0cmFuc2Zvcm1zOiBHUkFZU0NBTEUgPT4gR1JBWVNDQUxFLCBSR0IgPT4gUkdCLAorWUNiQ3IgPT4gWUNiQ3IsIENNWUsgPT4gQ01ZSywgWUNDSyA9PiBZQ0NLLCBhbmQgVU5LTk9XTiA9PiBVTktOT1dOLgorCitUaGUgZGUtZmFjdG8gZmlsZSBmb3JtYXQgc3RhbmRhcmRzIChKRklGIGFuZCBBZG9iZSkgc3BlY2lmeSBBUFBuIG1hcmtlcnMgdGhhdAoraW5kaWNhdGUgdGhlIGNvbG9yIHNwYWNlIG9mIHRoZSBKUEVHIGZpbGUuICBJdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQKK3RoZXNlIGFyZSB3cml0dGVuIGNvcnJlY3RseSwgb3Igb21pdHRlZCBpZiB0aGUgSlBFRyBmaWxlJ3MgY29sb3Igc3BhY2UgaXMgbm90CitvbmUgb2YgdGhlIG9uZXMgc3VwcG9ydGVkIGJ5IHRoZSBkZS1mYWN0byBzdGFuZGFyZHMuICBqcGVnX3NldF9jb2xvcnNwYWNlKCkKK3dpbGwgc2V0IHRoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgb3Igb21pdCB0aGUgQVBQbiBtYXJrZXJzCitwcm9wZXJseSwgc28gbG9uZyBhcyBpdCBpcyB0b2xkIHRoZSB0cnV0aCBhYm91dCB0aGUgSlBFRyBjb2xvciBzcGFjZS4KK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHdyaXRpbmcgc29tZSByYW5kb20gMy1jb21wb25lbnQgY29sb3Igc3BhY2Ugd2l0aG91dAorY29udmVyc2lvbiwgZG9uJ3QgdHJ5IHRvIGZha2Ugb3V0IHRoZSBsaWJyYXJ5IGJ5IHNldHRpbmcgaW5fY29sb3Jfc3BhY2UgYW5kCitqcGVnX2NvbG9yX3NwYWNlIHRvIEpDU19ZQ2JDcjsgdXNlIEpDU19VTktOT1dOLiAgWW91IG1heSB3YW50IHRvIHdyaXRlIGFuCitBUFBuIG1hcmtlciBvZiB5b3VyIG93biBkZXZpc2luZyB0byBpZGVudGlmeSB0aGUgY29sb3JzcGFjZSAtLS0gc2VlICJTcGVjaWFsCittYXJrZXJzIiwgYmVsb3cuCisKK1doZW4gdG9sZCB0aGF0IHRoZSBjb2xvciBzcGFjZSBpcyBVTktOT1dOLCB0aGUgbGlicmFyeSB3aWxsIGRlZmF1bHQgdG8gdXNpbmcKK2x1bWluYW5jZS1xdWFsaXR5IGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgZm9yIGFsbCBjb2xvciBjb21wb25lbnRzLiAgWW91IG1heQord2VsbCB3YW50IHRvIGNoYW5nZSB0aGVzZSBwYXJhbWV0ZXJzLiAgU2VlIHRoZSBzb3VyY2UgY29kZSBmb3IKK2pwZWdfc2V0X2NvbG9yc3BhY2UoKSwgaW4gamNwYXJhbS5jLCBmb3IgZGV0YWlscy4KKworRm9yIGRlY29tcHJlc3Npb24sIHRoZSBKUEVHIGZpbGUncyBjb2xvciBzcGFjZSBpcyBnaXZlbiBpbiBqcGVnX2NvbG9yX3NwYWNlLAorYW5kIHRoaXMgaXMgdHJhbnNmb3JtZWQgdG8gdGhlIG91dHB1dCBjb2xvciBzcGFjZSBvdXRfY29sb3Jfc3BhY2UuCitqcGVnX3JlYWRfaGVhZGVyJ3Mgc2V0dGluZyBvZiBqcGVnX2NvbG9yX3NwYWNlIGNhbiBiZSByZWxpZWQgb24gaWYgdGhlIGZpbGUKK2NvbmZvcm1zIHRvIEpGSUYgb3IgQWRvYmUgY29udmVudGlvbnMsIGJ1dCBvdGhlcndpc2UgaXQgaXMgbm8gYmV0dGVyIHRoYW4gYQorZ3Vlc3MuICBJZiB5b3Uga25vdyB0aGUgSlBFRyBmaWxlJ3MgY29sb3Igc3BhY2UgZm9yIGNlcnRhaW4sIHlvdSBjYW4gb3ZlcnJpZGUKK2pwZWdfcmVhZF9oZWFkZXIncyBndWVzcyBieSBzZXR0aW5nIGpwZWdfY29sb3Jfc3BhY2UuICBqcGVnX3JlYWRfaGVhZGVyIGFsc28KK3NlbGVjdHMgYSBkZWZhdWx0IG91dHB1dCBjb2xvciBzcGFjZSBiYXNlZCBvbiAoaXRzIGd1ZXNzIG9mKSBqcGVnX2NvbG9yX3NwYWNlOworc2V0IG91dF9jb2xvcl9zcGFjZSB0byBvdmVycmlkZSB0aGlzLiAgQWdhaW4sIHlvdSBtdXN0IHNlbGVjdCBhIHN1cHBvcnRlZAordHJhbnNmb3JtYXRpb24uICBqZGNvbG9yLmMgY3VycmVudGx5IHN1cHBvcnRzCisgICAgICAgIFlDYkNyID0+IFJHQgorICAgICAgICBZQ2JDciA9PiBHUkFZU0NBTEUKKyAgICAgICAgUkdCID0+IEdSQVlTQ0FMRQorICAgICAgICBHUkFZU0NBTEUgPT4gUkdCCisgICAgICAgIFlDQ0sgPT4gQ01ZSworYXMgd2VsbCBhcyB0aGUgbnVsbCB0cmFuc2Zvcm1zLiAgKFNpbmNlIEdSQVlTQ0FMRT0+UkdCIGlzIHByb3ZpZGVkLCBhbgorYXBwbGljYXRpb24gY2FuIGZvcmNlIGdyYXlzY2FsZSBKUEVHcyB0byBsb29rIGxpa2UgY29sb3IgSlBFR3MgaWYgaXQgb25seQord2FudHMgdG8gaGFuZGxlIG9uZSBjYXNlLikKKworVGhlIHR3by1wYXNzIGNvbG9yIHF1YW50aXplciwganF1YW50Mi5jLCBpcyBzcGVjaWFsaXplZCB0byBoYW5kbGUgUkdCIGRhdGEKKyhpdCB3ZWlnaHRzIGRpc3RhbmNlcyBhcHByb3ByaWF0ZWx5IGZvciBSR0IgY29sb3JzKS4gIFlvdSdsbCBuZWVkIHRvIG1vZGlmeQordGhlIGNvZGUgaWYgeW91IHdhbnQgdG8gdXNlIGl0IGZvciBub24tUkdCIG91dHB1dCBjb2xvciBzcGFjZXMuICBOb3RlIHRoYXQKK2pxdWFudDIuYyBpcyB1c2VkIHRvIG1hcCB0byBhbiBhcHBsaWNhdGlvbi1zdXBwbGllZCBjb2xvcm1hcCBhcyB3ZWxsIGFzIGZvcgordGhlIG5vcm1hbCB0d28tcGFzcyBjb2xvcm1hcCBzZWxlY3Rpb24gcHJvY2Vzcy4KKworQ0FVVElPTjogaXQgYXBwZWFycyB0aGF0IEFkb2JlIFBob3Rvc2hvcCB3cml0ZXMgaW52ZXJ0ZWQgZGF0YSBpbiBDTVlLIEpQRUcKK2ZpbGVzOiAwIHJlcHJlc2VudHMgMTAwJSBpbmsgY292ZXJhZ2UsIHJhdGhlciB0aGFuIDAlIGluayBhcyB5b3UnZCBleHBlY3QuCitUaGlzIGlzIGFyZ3VhYmx5IGEgYnVnIGluIFBob3Rvc2hvcCwgYnV0IGlmIHlvdSBuZWVkIHRvIHdvcmsgd2l0aCBQaG90b3Nob3AKK0NNWUsgZmlsZXMsIHlvdSB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIGl0IGluIHlvdXIgYXBwbGljYXRpb24uICBXZSBjYW5ub3QKKyJmaXgiIHRoaXMgaW4gdGhlIGxpYnJhcnkgYnkgaW52ZXJ0aW5nIHRoZSBkYXRhIGR1cmluZyB0aGUgQ01ZSzw9PllDQ0sKK3RyYW5zZm9ybSwgYmVjYXVzZSB0aGF0IHdvdWxkIGJyZWFrIG90aGVyIGFwcGxpY2F0aW9ucywgbm90YWJseSBHaG9zdHNjcmlwdC4KK1Bob3Rvc2hvcCB2ZXJzaW9ucyBwcmlvciB0byAzLjAgd3JpdGUgRVBTIGZpbGVzIGNvbnRhaW5pbmcgSlBFRy1lbmNvZGVkIENNWUsKK2RhdGEgaW4gdGhlIHNhbWUgaW52ZXJ0ZWQtWUNDSyByZXByZXNlbnRhdGlvbiB1c2VkIGluIGJhcmUgSlBFRyBmaWxlcywgYnV0Cit0aGUgc3Vycm91bmRpbmcgUG9zdFNjcmlwdCBjb2RlIHBlcmZvcm1zIGFuIGludmVyc2lvbiB1c2luZyB0aGUgUFMgaW1hZ2UKK29wZXJhdG9yLiAgSSBhbSB0b2xkIHRoYXQgUGhvdG9zaG9wIDMuMCB3aWxsIHdyaXRlIHVuaW52ZXJ0ZWQgWUNDSyBpbgorRVBTL0pQRUcgZmlsZXMsIGFuZCB3aWxsIG9taXQgdGhlIFBTLWxldmVsIGludmVyc2lvbi4gIChCdXQgdGhlIGRhdGEKK3BvbGFyaXR5IHVzZWQgaW4gYmFyZSBKUEVHIGZpbGVzIHdpbGwgbm90IGNoYW5nZSBpbiAzLjAuKSAgSW4gZWl0aGVyIGNhc2UsCit0aGUgSlBFRyBsaWJyYXJ5IG11c3Qgbm90IGludmVydCB0aGUgZGF0YSBpdHNlbGYsIG9yIGVsc2UgR2hvc3RzY3JpcHQgd291bGQKK3JlYWQgdGhlc2UgRVBTIGZpbGVzIGluY29ycmVjdGx5LgorCisKK0Vycm9yIGhhbmRsaW5nCistLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMgdXNlZCwgYW55IGVycm9yIGRldGVjdGVkIGluc2lkZSB0aGUgSlBFRworcm91dGluZXMgd2lsbCBjYXVzZSBhIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZCBvbiBzdGRlcnIsIGZvbGxvd2VkIGJ5IGV4aXQoKS4KK1lvdSBjYW4gc3VwcGx5IHlvdXIgb3duIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IKK2FuZCB0byBjb250cm9sIHRoZSB0cmVhdG1lbnQgb2Ygbm9uZmF0YWwgd2FybmluZ3MgYW5kIHRyYWNlL2RlYnVnIG1lc3NhZ2VzLgorVGhlIGZpbGUgZXhhbXBsZS50eHQgaWxsdXN0cmF0ZXMgdGhlIG1vc3QgY29tbW9uIGNhc2UsIHdoaWNoIGlzIHRvIGhhdmUgdGhlCithcHBsaWNhdGlvbiByZWdhaW4gY29udHJvbCBhZnRlciBhbiBlcnJvciByYXRoZXIgdGhhbiBleGl0aW5nLgorCitUaGUgSlBFRyBsaWJyYXJ5IG5ldmVyIHdyaXRlcyBhbnkgbWVzc2FnZSBkaXJlY3RseTsgaXQgYWx3YXlzIGdvZXMgdGhyb3VnaAordGhlIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzLiAgVGhyZWUgY2xhc3NlcyBvZiBtZXNzYWdlcyBhcmUgcmVjb2duaXplZDoKKyAgKiBGYXRhbCBlcnJvcnM6IHRoZSBsaWJyYXJ5IGNhbm5vdCBjb250aW51ZS4KKyAgKiBXYXJuaW5nczogdGhlIGxpYnJhcnkgY2FuIGNvbnRpbnVlLCBidXQgdGhlIGRhdGEgaXMgY29ycnVwdCwgYW5kIGEKKyAgICBkYW1hZ2VkIG91dHB1dCBpbWFnZSBpcyBsaWtlbHkgdG8gcmVzdWx0LgorICAqIFRyYWNlL2luZm9ybWF0aW9uYWwgbWVzc2FnZXMuICBUaGVzZSBjb21lIHdpdGggYSB0cmFjZSBsZXZlbCBpbmRpY2F0aW5nCisgICAgdGhlIGltcG9ydGFuY2Ugb2YgdGhlIG1lc3NhZ2U7IHlvdSBjYW4gY29udHJvbCB0aGUgdmVyYm9zaXR5IG9mIHRoZQorICAgIHByb2dyYW0gYnkgYWRqdXN0aW5nIHRoZSBtYXhpbXVtIHRyYWNlIGxldmVsIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuCisKK1lvdSBtYXksIGlmIHlvdSB3aXNoLCBzaW1wbHkgcmVwbGFjZSB0aGUgZW50aXJlIEpQRUcgZXJyb3IgaGFuZGxpbmcgbW9kdWxlCisoamVycm9yLmMpIHdpdGggeW91ciBvd24gY29kZS4gIEhvd2V2ZXIsIHlvdSBjYW4gYXZvaWQgY29kZSBkdXBsaWNhdGlvbiBieQorb25seSByZXBsYWNpbmcgc29tZSBvZiB0aGUgcm91dGluZXMgZGVwZW5kaW5nIG9uIHRoZSBiZWhhdmlvciB5b3UgbmVlZC4KK1RoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGNhbGxpbmcganBlZ19zdGRfZXJyb3IoKSBhcyB1c3VhbCwgYnV0IHRoZW4gb3ZlcnJpZGluZworc29tZSBvZiB0aGUgbWV0aG9kIHBvaW50ZXJzIGluIHRoZSBqcGVnX2Vycm9yX21nciBzdHJ1Y3QsIGFzIGlsbHVzdHJhdGVkIGJ5CitleGFtcGxlLnR4dC4KKworQWxsIG9mIHRoZSBlcnJvciBoYW5kbGluZyByb3V0aW5lcyB3aWxsIHJlY2VpdmUgYSBwb2ludGVyIHRvIHRoZSBKUEVHIG9iamVjdAorKGEgal9jb21tb25fcHRyIHdoaWNoIHBvaW50cyB0byBlaXRoZXIgYSBqcGVnX2NvbXByZXNzX3N0cnVjdCBvciBhCitqcGVnX2RlY29tcHJlc3Nfc3RydWN0OyBpZiB5b3UgbmVlZCB0byB0ZWxsIHdoaWNoLCB0ZXN0IHRoZSBpc19kZWNvbXByZXNzb3IKK2ZpZWxkKS4gIFRoaXMgc3RydWN0IGluY2x1ZGVzIGEgcG9pbnRlciB0byB0aGUgZXJyb3IgbWFuYWdlciBzdHJ1Y3QgaW4gaXRzCisiZXJyIiBmaWVsZC4gIEZyZXF1ZW50bHksIGN1c3RvbSBlcnJvciBoYW5kbGVyIHJvdXRpbmVzIHdpbGwgbmVlZCB0byBhY2Nlc3MKK2FkZGl0aW9uYWwgZGF0YSB3aGljaCBpcyBub3Qga25vd24gdG8gdGhlIEpQRUcgbGlicmFyeSBvciB0aGUgc3RhbmRhcmQgZXJyb3IKK2hhbmRsZXIuICBUaGUgbW9zdCBjb252ZW5pZW50IHdheSB0byBkbyB0aGlzIGlzIHRvIGVtYmVkIGVpdGhlciB0aGUgSlBFRworb2JqZWN0IG9yIHRoZSBqcGVnX2Vycm9yX21nciBzdHJ1Y3QgaW4gYSBsYXJnZXIgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKK2FkZGl0aW9uYWwgZmllbGRzOyB0aGVuIGNhc3RpbmcgdGhlIHBhc3NlZCBwb2ludGVyIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUKK2FkZGl0aW9uYWwgZmllbGRzLiAgQWdhaW4sIHNlZSBleGFtcGxlLnR4dCBmb3Igb25lIHdheSB0byBkbyBpdC4gIChCZWdpbm5pbmcKK3dpdGggSUpHIHZlcnNpb24gNmIsIHRoZXJlIGlzIGFsc28gYSB2b2lkIHBvaW50ZXIgImNsaWVudF9kYXRhIiBpbiBlYWNoCitKUEVHIG9iamVjdCwgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIGNhbiBhbHNvIHVzZSB0byBmaW5kIHJlbGF0ZWQgZGF0YS4KK1RoZSBsaWJyYXJ5IGRvZXMgbm90IHRvdWNoIGNsaWVudF9kYXRhIGF0IGFsbC4pCisKK1RoZSBpbmRpdmlkdWFsIG1ldGhvZHMgdGhhdCB5b3UgbWlnaHQgd2lzaCB0byBvdmVycmlkZSBhcmU6CisKK2Vycm9yX2V4aXQgKGpfY29tbW9uX3B0ciBjaW5mbykKKyAgICAgICAgUmVjZWl2ZXMgY29udHJvbCBmb3IgYSBmYXRhbCBlcnJvci4gIEluZm9ybWF0aW9uIHN1ZmZpY2llbnQgdG8KKyAgICAgICAgZ2VuZXJhdGUgdGhlIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gc3RvcmVkIGluIGNpbmZvLT5lcnI7IGNhbGwKKyAgICAgICAgb3V0cHV0X21lc3NhZ2UgdG8gZGlzcGxheSBpdC4gIENvbnRyb2wgbXVzdCBOT1QgcmV0dXJuIHRvIHRoZSBjYWxsZXI7CisgICAgICAgIGdlbmVyYWxseSB0aGlzIHJvdXRpbmUgd2lsbCBleGl0KCkgb3IgbG9uZ2ptcCgpIHNvbWV3aGVyZS4KKyAgICAgICAgVHlwaWNhbGx5IHlvdSB3b3VsZCBvdmVycmlkZSB0aGlzIHJvdXRpbmUgdG8gZ2V0IHJpZCBvZiB0aGUgZXhpdCgpCisgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IuICBOb3RlIHRoYXQgaWYgeW91IGNvbnRpbnVlIHByb2Nlc3NpbmcsIHlvdSBzaG91bGQKKyAgICAgICAgY2xlYW4gdXAgdGhlIEpQRUcgb2JqZWN0IHdpdGgganBlZ19hYm9ydCgpIG9yIGpwZWdfZGVzdHJveSgpLgorCitvdXRwdXRfbWVzc2FnZSAoal9jb21tb25fcHRyIGNpbmZvKQorICAgICAgICBBY3R1YWwgb3V0cHV0IG9mIGFueSBKUEVHIG1lc3NhZ2UuICBPdmVycmlkZSB0aGlzIHRvIHNlbmQgbWVzc2FnZXMKKyAgICAgICAgc29tZXdoZXJlIG90aGVyIHRoYW4gc3RkZXJyLiAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IGtub3cKKyAgICAgICAgaG93IHRvIGdlbmVyYXRlIGEgbWVzc2FnZSwgb25seSB3aGVyZSB0byBzZW5kIGl0LgorCitmb3JtYXRfbWVzc2FnZSAoal9jb21tb25fcHRyIGNpbmZvLCBjaGFyICpidWZmZXIpCisgICAgICAgIENvbnN0cnVjdHMgYSByZWFkYWJsZSBlcnJvciBtZXNzYWdlIHN0cmluZyBiYXNlZCBvbiB0aGUgZXJyb3IgaW5mbworICAgICAgICBzdG9yZWQgaW4gY2luZm8tPmVyci4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBvdXRwdXRfbWVzc2FnZS4gIEZldworICAgICAgICBhcHBsaWNhdGlvbnMgc2hvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QuICBPbmUgcG9zc2libGUKKyAgICAgICAgcmVhc29uIGZvciBkb2luZyBzbyBpcyB0byBpbXBsZW1lbnQgZHluYW1pYyBzd2l0Y2hpbmcgb2YgZXJyb3IgbWVzc2FnZQorICAgICAgICBsYW5ndWFnZS4KKworZW1pdF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBtc2dfbGV2ZWwpCisgICAgICAgIERlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBlbWl0IGEgd2FybmluZyBvciB0cmFjZSBtZXNzYWdlOyBpZiBzbywKKyAgICAgICAgY2FsbHMgb3V0cHV0X21lc3NhZ2UuICBUaGUgbWFpbiByZWFzb24gZm9yIG92ZXJyaWRpbmcgdGhpcyBtZXRob2QKKyAgICAgICAgd291bGQgYmUgdG8gYWJvcnQgb24gd2FybmluZ3MuICBtc2dfbGV2ZWwgaXMgLTEgZm9yIHdhcm5pbmdzLAorICAgICAgICAwIGFuZCB1cCBmb3IgdHJhY2UgbWVzc2FnZXMuCisKK09ubHkgZXJyb3JfZXhpdCgpIGFuZCBlbWl0X21lc3NhZ2UoKSBhcmUgY2FsbGVkIGZyb20gdGhlIHJlc3Qgb2YgdGhlIEpQRUcKK2xpYnJhcnk7IHRoZSBvdGhlciB0d28gYXJlIGludGVybmFsIHRvIHRoZSBlcnJvciBoYW5kbGVyLgorCitUaGUgYWN0dWFsIG1lc3NhZ2UgdGV4dHMgYXJlIHN0b3JlZCBpbiBhbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGlzIHBvaW50ZWQgdG8KK2J5IHRoZSBmaWVsZCBlcnItPmpwZWdfbWVzc2FnZV90YWJsZS4gIFRoZSBtZXNzYWdlcyBhcmUgbnVtYmVyZWQgZnJvbSAwIHRvCitlcnItPmxhc3RfanBlZ19tZXNzYWdlLCBhbmQgaXQgaXMgdGhlc2UgY29kZSBudW1iZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlCitKUEVHIGxpYnJhcnkgY29kZS4gIFlvdSBjb3VsZCByZXBsYWNlIHRoZSBtZXNzYWdlIHRleHRzIChmb3IgaW5zdGFuY2UsIHdpdGgKK21lc3NhZ2VzIGluIEZyZW5jaCBvciBHZXJtYW4pIGJ5IGNoYW5naW5nIHRoZSBtZXNzYWdlIHRhYmxlIHBvaW50ZXIuICBTZWUKK2plcnJvci5oIGZvciB0aGUgZGVmYXVsdCB0ZXh0cy4gIENBVVRJT046IHRoaXMgdGFibGUgd2lsbCBhbG1vc3QgY2VydGFpbmx5CitjaGFuZ2Ugb3IgZ3JvdyBmcm9tIG9uZSBsaWJyYXJ5IHZlcnNpb24gdG8gdGhlIG5leHQuCisKK0l0IG1heSBiZSB1c2VmdWwgZm9yIGFuIGFwcGxpY2F0aW9uIHRvIGFkZCBpdHMgb3duIG1lc3NhZ2UgdGV4dHMgdGhhdCBhcmUKK2hhbmRsZWQgYnkgdGhlIHNhbWUgbWVjaGFuaXNtLiAgVGhlIGVycm9yIGhhbmRsZXIgc3VwcG9ydHMgYSBzZWNvbmQgImFkZC1vbiIKK21lc3NhZ2UgdGFibGUgZm9yIHRoaXMgcHVycG9zZS4gIFRvIGRlZmluZSBhbiBhZGRvbiB0YWJsZSwgc2V0IHRoZSBwb2ludGVyCitlcnItPmFkZG9uX21lc3NhZ2VfdGFibGUgYW5kIHRoZSBtZXNzYWdlIG51bWJlcnMgZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlIGFuZAorZXJyLT5sYXN0X2FkZG9uX21lc3NhZ2UuICBJZiB5b3UgbnVtYmVyIHRoZSBhZGRvbiBtZXNzYWdlcyBiZWdpbm5pbmcgYXQgMTAwMAorb3Igc28sIHlvdSB3b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGNvbmZsaWN0cyB3aXRoIHRoZSBsaWJyYXJ5J3MgYnVpbHQtaW4KK21lc3NhZ2VzLiAgU2VlIHRoZSBzYW1wbGUgYXBwbGljYXRpb25zIGNqcGVnL2RqcGVnIGZvciBhbiBleGFtcGxlIG9mIHVzaW5nCithZGRvbiBtZXNzYWdlcyAodGhlIGFkZG9uIG1lc3NhZ2VzIGFyZSBkZWZpbmVkIGluIGNkZXJyb3IuaCkuCisKK0FjdHVhbCBpbnZvY2F0aW9uIG9mIHRoZSBlcnJvciBoYW5kbGVyIGlzIGRvbmUgdmlhIG1hY3JvcyBkZWZpbmVkIGluIGplcnJvci5oOgorICAgICAgICBFUlJFWElUbiguLi4pICAgZm9yIGZhdGFsIGVycm9ycworICAgICAgICBXQVJOTVNuKC4uLikgICAgZm9yIGNvcnJ1cHQtZGF0YSB3YXJuaW5ncworICAgICAgICBUUkFDRU1TbiguLi4pICAgZm9yIHRyYWNlIGFuZCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzLgorVGhlc2UgbWFjcm9zIHN0b3JlIHRoZSBtZXNzYWdlIGNvZGUgYW5kIGFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUKK2Vycm9yIGhhbmRsZXIgc3RydWN0LCB0aGVuIGludm9rZSB0aGUgZXJyb3JfZXhpdCgpIG9yIGVtaXRfbWVzc2FnZSgpIG1ldGhvZC4KK1RoZSB2YXJpYW50cyBvZiBlYWNoIG1hY3JvIGFyZSBmb3IgdmFyeWluZyBudW1iZXJzIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4KK1RoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGluc2VydGVkIGludG8gdGhlIGdlbmVyYXRlZCBtZXNzYWdlIHVzaW5nCitzdGFuZGFyZCBwcmludGYoKSBmb3JtYXQgY29kZXMuCisKK1NlZSBqZXJyb3IuaCBhbmQgamVycm9yLmMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworCitDb21wcmVzc2VkIGRhdGEgaGFuZGxpbmcgKHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbWFuYWdlcnMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBKUEVHIGNvbXByZXNzaW9uIGxpYnJhcnkgc2VuZHMgaXRzIGNvbXByZXNzZWQgZGF0YSB0byBhICJkZXN0aW5hdGlvbgorbWFuYWdlciIgbW9kdWxlLiAgVGhlIGRlZmF1bHQgZGVzdGluYXRpb24gbWFuYWdlciBqdXN0IHdyaXRlcyB0aGUgZGF0YSB0byBhCittZW1vcnkgYnVmZmVyIG9yIHRvIGEgc3RkaW8gc3RyZWFtLCBidXQgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duIG1hbmFnZXIgdG8KK2RvIHNvbWV0aGluZyBlbHNlLiAgU2ltaWxhcmx5LCB0aGUgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IGNhbGxzIGEgInNvdXJjZQorbWFuYWdlciIgdG8gb2J0YWluIHRoZSBjb21wcmVzc2VkIGRhdGE7IHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBzb3VyY2UKK21hbmFnZXIgaWYgeW91IHdhbnQgdGhlIGRhdGEgdG8gY29tZSBmcm9tIHNvbWV3aGVyZSBvdGhlciB0aGFuIGEgbWVtb3J5CitidWZmZXIgb3IgYSBzdGRpbyBzdHJlYW0uCisKK0luIGJvdGggY2FzZXMsIGNvbXByZXNzZWQgZGF0YSBpcyBwcm9jZXNzZWQgYSBidWZmZXJsb2FkIGF0IGEgdGltZTogdGhlCitkZXN0aW5hdGlvbiBvciBzb3VyY2UgbWFuYWdlciBwcm92aWRlcyBhIHdvcmsgYnVmZmVyLCBhbmQgdGhlIGxpYnJhcnkgaW52b2tlcwordGhlIG1hbmFnZXIgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZmlsbGVkIG9yIGVtcHRpZWQuICAoWW91IGNvdWxkIGRlZmluZSBhCitvbmUtY2hhcmFjdGVyIGJ1ZmZlciB0byBmb3JjZSB0aGUgbWFuYWdlciB0byBiZSBpbnZva2VkIGZvciBlYWNoIGJ5dGUsIGJ1dAordGhhdCB3b3VsZCBiZSByYXRoZXIgaW5lZmZpY2llbnQuKSAgVGhlIGJ1ZmZlcidzIHNpemUgYW5kIGxvY2F0aW9uIGFyZQorY29udHJvbGxlZCBieSB0aGUgbWFuYWdlciwgbm90IGJ5IHRoZSBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUsIHRoZSBtZW1vcnkKK3NvdXJjZSBtYW5hZ2VyIGp1c3QgbWFrZXMgdGhlIGJ1ZmZlciBwb2ludGVyIGFuZCBsZW5ndGggcG9pbnQgdG8gdGhlIG9yaWdpbmFsCitkYXRhIGluIG1lbW9yeS4gIEluIHRoaXMgY2FzZSB0aGUgYnVmZmVyLXJlbG9hZCBwcm9jZWR1cmUgd2lsbCBiZSBpbnZva2VkCitvbmx5IGlmIHRoZSBkZWNvbXByZXNzb3IgcmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBkYXRhc3RyZWFtLCB3aGljaCB3b3VsZAoraW5kaWNhdGUgYW4gZXJyb25lb3VzIGRhdGFzdHJlYW0uCisKK1RoZSB3b3JrIGJ1ZmZlciBpcyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIGRhdGF0eXBlIEpPQ1RFVCwgd2hpY2ggaXMgZ2VuZXJhbGx5CisiY2hhciIgb3IgInVuc2lnbmVkIGNoYXIiLiAgT24gYSBtYWNoaW5lIHdoZXJlIGNoYXIgaXMgbm90IGV4YWN0bHkgOCBiaXRzCit3aWRlLCB5b3UgbXVzdCBkZWZpbmUgSk9DVEVUIGFzIGEgd2lkZXIgZGF0YSB0eXBlIGFuZCB0aGVuIG1vZGlmeSB0aGUgZGF0YQorc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtb2R1bGVzIHRvIHRyYW5zY3JpYmUgdGhlIHdvcmsgYXJyYXlzIGludG8gOC1iaXQgdW5pdHMKK29uIGV4dGVybmFsIHN0b3JhZ2UuCisKK0EgZGF0YSBkZXN0aW5hdGlvbiBtYW5hZ2VyIHN0cnVjdCBjb250YWlucyBhIHBvaW50ZXIgYW5kIGNvdW50IGRlZmluaW5nIHRoZQorbmV4dCBieXRlIHRvIHdyaXRlIGluIHRoZSB3b3JrIGJ1ZmZlciBhbmQgdGhlIHJlbWFpbmluZyBmcmVlIHNwYWNlOgorCisgICAgICAgIEpPQ1RFVCAqbmV4dF9vdXRwdXRfYnl0ZTsgICAvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCisgICAgICAgIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsgICAgICAvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KKworVGhlIGxpYnJhcnkgaW5jcmVtZW50cyB0aGUgcG9pbnRlciBhbmQgZGVjcmVtZW50cyB0aGUgY291bnQgdW50aWwgdGhlIGJ1ZmZlcgoraXMgZmlsbGVkLiAgVGhlIG1hbmFnZXIncyBlbXB0eV9vdXRwdXRfYnVmZmVyIG1ldGhvZCBtdXN0IHJlc2V0IHRoZSBwb2ludGVyCithbmQgY291bnQuICBUaGUgbWFuYWdlciBpcyBleHBlY3RlZCB0byByZW1lbWJlciB0aGUgYnVmZmVyJ3Mgc3RhcnRpbmcgYWRkcmVzcworYW5kIHRvdGFsIHNpemUgaW4gcHJpdmF0ZSBmaWVsZHMgbm90IHZpc2libGUgdG8gdGhlIGxpYnJhcnkuCisKK0EgZGF0YSBkZXN0aW5hdGlvbiBtYW5hZ2VyIHByb3ZpZGVzIHRocmVlIG1ldGhvZHM6CisKK2luaXRfZGVzdGluYXRpb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgICAgICBJbml0aWFsaXplIGRlc3RpbmF0aW9uLiAgVGhpcyBpcyBjYWxsZWQgYnkganBlZ19zdGFydF9jb21wcmVzcygpCisgICAgICAgIGJlZm9yZSBhbnkgZGF0YSBpcyBhY3R1YWxseSB3cml0dGVuLiAgSXQgbXVzdCBpbml0aWFsaXplCisgICAgICAgIG5leHRfb3V0cHV0X2J5dGUgYW5kIGZyZWVfaW5fYnVmZmVyLiAgZnJlZV9pbl9idWZmZXIgbXVzdCBiZQorICAgICAgICBpbml0aWFsaXplZCB0byBhIHBvc2l0aXZlIHZhbHVlLgorCitlbXB0eV9vdXRwdXRfYnVmZmVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGJ1ZmZlciBoYXMgZmlsbGVkIChmcmVlX2luX2J1ZmZlcgorICAgICAgICByZWFjaGVzIHplcm8pLiAgSW4gdHlwaWNhbCBhcHBsaWNhdGlvbnMsIGl0IHNob3VsZCB3cml0ZSBvdXQgdGhlCisgICAgICAgICplbnRpcmUqIGJ1ZmZlciAodXNlIHRoZSBzYXZlZCBzdGFydCBhZGRyZXNzIGFuZCBidWZmZXIgbGVuZ3RoOworICAgICAgICBpZ25vcmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV4dF9vdXRwdXRfYnl0ZSBhbmQgZnJlZV9pbl9idWZmZXIpLgorICAgICAgICBUaGVuIHJlc2V0IHRoZSBwb2ludGVyICYgY291bnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIsIGFuZAorICAgICAgICByZXR1cm4gVFJVRSBpbmRpY2F0aW5nIHRoYXQgdGhlIGJ1ZmZlciBoYXMgYmVlbiBkdW1wZWQuCisgICAgICAgIGZyZWVfaW5fYnVmZmVyIG11c3QgYmUgc2V0IHRvIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiBUUlVFIGlzCisgICAgICAgIHJldHVybmVkLiAgQSBGQUxTRSByZXR1cm4gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIEkvTyBzdXNwZW5zaW9uIGlzCisgICAgICAgIGRlc2lyZWQgKHRoaXMgb3BlcmF0aW5nIG1vZGUgaXMgZGlzY3Vzc2VkIGluIHRoZSBuZXh0IHNlY3Rpb24pLgorCit0ZXJtX2Rlc3RpbmF0aW9uIChqX2NvbXByZXNzX3B0ciBjaW5mbykKKyAgICAgICAgVGVybWluYXRlIGRlc3RpbmF0aW9uIC0tLSBjYWxsZWQgYnkganBlZ19maW5pc2hfY29tcHJlc3MoKSBhZnRlciBhbGwKKyAgICAgICAgZGF0YSBoYXMgYmVlbiB3cml0dGVuLiAgSW4gbW9zdCBhcHBsaWNhdGlvbnMsIHRoaXMgbXVzdCBmbHVzaCBhbnkKKyAgICAgICAgZGF0YSByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlci4gIFVzZSBlaXRoZXIgbmV4dF9vdXRwdXRfYnl0ZSBvcgorICAgICAgICBmcmVlX2luX2J1ZmZlciB0byBkZXRlcm1pbmUgaG93IG11Y2ggZGF0YSBpcyBpbiB0aGUgYnVmZmVyLgorCit0ZXJtX2Rlc3RpbmF0aW9uKCkgaXMgTk9UIGNhbGxlZCBieSBqcGVnX2Fib3J0KCkgb3IganBlZ19kZXN0cm95KCkuICBJZiB5b3UKK3dhbnQgdGhlIGRlc3RpbmF0aW9uIG1hbmFnZXIgdG8gYmUgY2xlYW5lZCB1cCBkdXJpbmcgYW4gYWJvcnQsIHlvdSBtdXN0IGRvIGl0Cit5b3Vyc2VsZi4KKworWW91IHdpbGwgYWxzbyBuZWVkIGNvZGUgdG8gY3JlYXRlIGEganBlZ19kZXN0aW5hdGlvbl9tZ3Igc3RydWN0LCBmaWxsIGluIGl0cworbWV0aG9kIHBvaW50ZXJzLCBhbmQgaW5zZXJ0IGEgcG9pbnRlciB0byB0aGUgc3RydWN0IGludG8gdGhlICJkZXN0IiBmaWVsZCBvZgordGhlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0LiAgVGhpcyBjYW4gYmUgZG9uZSBpbi1saW5lIGluIHlvdXIgc2V0dXAgY29kZSBpZgoreW91IGxpa2UsIGJ1dCBpdCdzIHByb2JhYmx5IGNsZWFuZXIgdG8gcHJvdmlkZSBhIHNlcGFyYXRlIHJvdXRpbmUgc2ltaWxhciB0bwordGhlIGpwZWdfc3RkaW9fZGVzdCgpIG9yIGpwZWdfbWVtX2Rlc3QoKSByb3V0aW5lcyBvZiB0aGUgc3VwcGxpZWQgZGVzdGluYXRpb24KK21hbmFnZXJzLgorCitEZWNvbXByZXNzaW9uIHNvdXJjZSBtYW5hZ2VycyBmb2xsb3cgYSBwYXJhbGxlbCBkZXNpZ24sIGJ1dCB3aXRoIHNvbWUKK2FkZGl0aW9uYWwgZnJhbW1pc2hlcy4gIFRoZSBzb3VyY2UgbWFuYWdlciBzdHJ1Y3QgY29udGFpbnMgYSBwb2ludGVyIGFuZCBjb3VudAorZGVmaW5pbmcgdGhlIG5leHQgYnl0ZSB0byByZWFkIGZyb20gdGhlIHdvcmsgYnVmZmVyIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzCityZW1haW5pbmc6CisKKyAgICAgICAgY29uc3QgSk9DVEVUICpuZXh0X2lucHV0X2J5dGU7ICAvKiA9PiBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIGJ1ZmZlciAqLworICAgICAgICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyOyAgICAgICAgIC8qICMgb2YgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLworCitUaGUgbGlicmFyeSBpbmNyZW1lbnRzIHRoZSBwb2ludGVyIGFuZCBkZWNyZW1lbnRzIHRoZSBjb3VudCB1bnRpbCB0aGUgYnVmZmVyCitpcyBlbXB0aWVkLiAgVGhlIG1hbmFnZXIncyBmaWxsX2lucHV0X2J1ZmZlciBtZXRob2QgbXVzdCByZXNldCB0aGUgcG9pbnRlciBhbmQKK2NvdW50LiAgSW4gbW9zdCBhcHBsaWNhdGlvbnMsIHRoZSBtYW5hZ2VyIG11c3QgcmVtZW1iZXIgdGhlIGJ1ZmZlcidzIHN0YXJ0aW5nCithZGRyZXNzIGFuZCB0b3RhbCBzaXplIGluIHByaXZhdGUgZmllbGRzIG5vdCB2aXNpYmxlIHRvIHRoZSBsaWJyYXJ5LgorCitBIGRhdGEgc291cmNlIG1hbmFnZXIgcHJvdmlkZXMgZml2ZSBtZXRob2RzOgorCitpbml0X3NvdXJjZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKyAgICAgICAgSW5pdGlhbGl6ZSBzb3VyY2UuICBUaGlzIGlzIGNhbGxlZCBieSBqcGVnX3JlYWRfaGVhZGVyKCkgYmVmb3JlIGFueQorICAgICAgICBkYXRhIGlzIGFjdHVhbGx5IHJlYWQuICBVbmxpa2UgaW5pdF9kZXN0aW5hdGlvbigpLCBpdCBtYXkgbGVhdmUKKyAgICAgICAgYnl0ZXNfaW5fYnVmZmVyIHNldCB0byAwIChpbiB3aGljaCBjYXNlIGEgZmlsbF9pbnB1dF9idWZmZXIoKSBjYWxsCisgICAgICAgIHdpbGwgb2NjdXIgaW1tZWRpYXRlbHkpLgorCitmaWxsX2lucHV0X2J1ZmZlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYnl0ZXNfaW5fYnVmZmVyIGhhcyByZWFjaGVkIHplcm8gYW5kIG1vcmUKKyAgICAgICAgZGF0YSBpcyB3YW50ZWQuICBJbiB0eXBpY2FsIGFwcGxpY2F0aW9ucywgaXQgc2hvdWxkIHJlYWQgZnJlc2ggZGF0YQorICAgICAgICBpbnRvIHRoZSBidWZmZXIgKGlnbm9yaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5leHRfaW5wdXRfYnl0ZSBhbmQKKyAgICAgICAgYnl0ZXNfaW5fYnVmZmVyKSwgcmVzZXQgdGhlIHBvaW50ZXIgJiBjb3VudCB0byB0aGUgc3RhcnQgb2YgdGhlCisgICAgICAgIGJ1ZmZlciwgYW5kIHJldHVybiBUUlVFIGluZGljYXRpbmcgdGhhdCB0aGUgYnVmZmVyIGhhcyBiZWVuIHJlbG9hZGVkLgorICAgICAgICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciBlbnRpcmVseSwgb25seSB0byBvYnRhaW4gYXQKKyAgICAgICAgbGVhc3Qgb25lIG1vcmUgYnl0ZS4gIGJ5dGVzX2luX2J1ZmZlciBNVVNUIGJlIHNldCB0byBhIHBvc2l0aXZlIHZhbHVlCisgICAgICAgIGlmIFRSVUUgaXMgcmV0dXJuZWQuICBBIEZBTFNFIHJldHVybiBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gSS9PCisgICAgICAgIHN1c3BlbnNpb24gaXMgZGVzaXJlZCAodGhpcyBtb2RlIGlzIGRpc2N1c3NlZCBpbiB0aGUgbmV4dCBzZWN0aW9uKS4KKworc2tpcF9pbnB1dF9kYXRhIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBsb25nIG51bV9ieXRlcykKKyAgICAgICAgU2tpcCBudW1fYnl0ZXMgd29ydGggb2YgZGF0YS4gIFRoZSBidWZmZXIgcG9pbnRlciBhbmQgY291bnQgc2hvdWxkCisgICAgICAgIGJlIGFkdmFuY2VkIG92ZXIgbnVtX2J5dGVzIGlucHV0IGJ5dGVzLCByZWZpbGxpbmcgdGhlIGJ1ZmZlciBhcworICAgICAgICBuZWVkZWQuICBUaGlzIGlzIHVzZWQgdG8gc2tpcCBvdmVyIGEgcG90ZW50aWFsbHkgbGFyZ2UgYW1vdW50IG9mCisgICAgICAgIHVuaW50ZXJlc3RpbmcgZGF0YSAoc3VjaCBhcyBhbiBBUFBuIG1hcmtlcikuICBJbiBzb21lIGFwcGxpY2F0aW9ucworICAgICAgICBpdCBtYXkgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgYXdheSB0aGUgcmVhZGluZyBvZiB0aGUgc2tpcHBlZCBkYXRhLAorICAgICAgICBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBiZWluZyBzbWFydCBpcyB3b3J0aCBtdWNoIHRyb3VibGU7IGxhcmdlCisgICAgICAgIHNraXBzIGFyZSB1bmNvbW1vbi4gIGJ5dGVzX2luX2J1ZmZlciBtYXkgYmUgemVybyBvbiByZXR1cm4uCisgICAgICAgIEEgemVybyBvciBuZWdhdGl2ZSBza2lwIGNvdW50IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgbm8tb3AuCisKK3Jlc3luY190b19yZXN0YXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgZGVzaXJlZCkKKyAgICAgICAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGRlY29tcHJlc3NvciBoYXMgZmFpbGVkIHRvIGZpbmQKKyAgICAgICAgYSByZXN0YXJ0IChSU1RuKSBtYXJrZXIgd2hlcmUgb25lIGlzIGV4cGVjdGVkLiAgSXRzIG1pc3Npb24gaXMgdG8KKyAgICAgICAgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciByZXN1bWluZyBkZWNvbXByZXNzaW9uLiAgRm9yIG1vc3QKKyAgICAgICAgYXBwbGljYXRpb25zLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UganVzdCB1c2UgdGhlIGRlZmF1bHQgcmVzeW5jCisgICAgICAgIHByb2NlZHVyZSwganBlZ19yZXN5bmNfdG9fcmVzdGFydCgpLiAgSG93ZXZlciwgaWYgeW91IGFyZSBhYmxlIHRvIGJhY2sKKyAgICAgICAgdXAgaW4gdGhlIGlucHV0IGRhdGEgc3RyZWFtLCBvciBpZiB5b3UgaGF2ZSBhLXByaW9yaSBrbm93bGVkZ2UgYWJvdXQKKyAgICAgICAgdGhlIGxpa2VseSBsb2NhdGlvbiBvZiByZXN0YXJ0IG1hcmtlcnMsIHlvdSBtYXkgYmUgYWJsZSB0byBkbyBiZXR0ZXIuCisgICAgICAgIFJlYWQgdGhlIHJlYWRfcmVzdGFydF9tYXJrZXIoKSBhbmQganBlZ19yZXN5bmNfdG9fcmVzdGFydCgpIHJvdXRpbmVzCisgICAgICAgIGluIGpkbWFya2VyLmMgaWYgeW91IHRoaW5rIHlvdSdkIGxpa2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIHJlc3luYworICAgICAgICBwcm9jZWR1cmUuCisKK3Rlcm1fc291cmNlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorICAgICAgICBUZXJtaW5hdGUgc291cmNlIC0tLSBjYWxsZWQgYnkganBlZ19maW5pc2hfZGVjb21wcmVzcygpIGFmdGVyIGFsbAorICAgICAgICBkYXRhIGhhcyBiZWVuIHJlYWQuICBPZnRlbiBhIG5vLW9wLgorCitGb3IgYm90aCBmaWxsX2lucHV0X2J1ZmZlcigpIGFuZCBza2lwX2lucHV0X2RhdGEoKSwgdGhlcmUgaXMgbm8gc3VjaCB0aGluZworYXMgYW4gRU9GIHJldHVybi4gIElmIHRoZSBlbmQgb2YgdGhlIGZpbGUgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIHJvdXRpbmUgaGFzCithIGNob2ljZSBvZiBleGl0aW5nIHZpYSBFUlJFWElUKCkgb3IgaW5zZXJ0aW5nIGZha2UgZGF0YSBpbnRvIHRoZSBidWZmZXIuCitJbiBtb3N0IGNhc2VzLCBnZW5lcmF0aW5nIGEgd2FybmluZyBtZXNzYWdlIGFuZCBpbnNlcnRpbmcgYSBmYWtlIEVPSSBtYXJrZXIKK2lzIHRoZSBiZXN0IGNvdXJzZSBvZiBhY3Rpb24gLS0tIHRoaXMgd2lsbCBhbGxvdyB0aGUgZGVjb21wcmVzc29yIHRvIG91dHB1dAoraG93ZXZlciBtdWNoIG9mIHRoZSBpbWFnZSBpcyB0aGVyZS4gIEluIHBhdGhvbG9naWNhbCBjYXNlcywgdGhlIGRlY29tcHJlc3NvcgorbWF5IHN3YWxsb3cgdGhlIEVPSSBhbmQgYWdhaW4gZGVtYW5kIGRhdGEgLi4uIGp1c3Qga2VlcCBmZWVkaW5nIGl0IGZha2UgRU9Jcy4KK2pkYXRhc3JjLmMgaWxsdXN0cmF0ZXMgdGhlIHJlY29tbWVuZGVkIGVycm9yIHJlY292ZXJ5IGJlaGF2aW9yLgorCit0ZXJtX3NvdXJjZSgpIGlzIE5PVCBjYWxsZWQgYnkganBlZ19hYm9ydCgpIG9yIGpwZWdfZGVzdHJveSgpLiAgSWYgeW91IHdhbnQKK3RoZSBzb3VyY2UgbWFuYWdlciB0byBiZSBjbGVhbmVkIHVwIGR1cmluZyBhbiBhYm9ydCwgeW91IG11c3QgZG8gaXQgeW91cnNlbGYuCisKK1lvdSB3aWxsIGFsc28gbmVlZCBjb2RlIHRvIGNyZWF0ZSBhIGpwZWdfc291cmNlX21nciBzdHJ1Y3QsIGZpbGwgaW4gaXRzIG1ldGhvZAorcG9pbnRlcnMsIGFuZCBpbnNlcnQgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgaW50byB0aGUgInNyYyIgZmllbGQgb2YgdGhlIEpQRUcKK2RlY29tcHJlc3Npb24gb2JqZWN0LiAgVGhpcyBjYW4gYmUgZG9uZSBpbi1saW5lIGluIHlvdXIgc2V0dXAgY29kZSBpZiB5b3UKK2xpa2UsIGJ1dCBpdCdzIHByb2JhYmx5IGNsZWFuZXIgdG8gcHJvdmlkZSBhIHNlcGFyYXRlIHJvdXRpbmUgc2ltaWxhciB0byB0aGUKK2pwZWdfc3RkaW9fc3JjKCkgb3IganBlZ19tZW1fc3JjKCkgcm91dGluZXMgb2YgdGhlIHN1cHBsaWVkIHNvdXJjZSBtYW5hZ2Vycy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIG1lbW9yeSBhbmQgc3RkaW8gc291cmNlIGFuZCBkZXN0aW5hdGlvbgorbWFuYWdlcnMgaW4gamRhdGFzcmMuYyBhbmQgamRhdGFkc3QuYy4KKworCitJL08gc3VzcGVuc2lvbgorLS0tLS0tLS0tLS0tLS0KKworU29tZSBhcHBsaWNhdGlvbnMgbmVlZCB0byB1c2UgdGhlIEpQRUcgbGlicmFyeSBhcyBhbiBpbmNyZW1lbnRhbCBtZW1vcnktdG8tCittZW1vcnkgZmlsdGVyOiB3aGVuIHRoZSBjb21wcmVzc2VkIGRhdGEgYnVmZmVyIGlzIGZpbGxlZCBvciBlbXB0aWVkLCB0aGV5IHdhbnQKK2NvbnRyb2wgdG8gcmV0dXJuIHRvIHRoZSBvdXRlciBsb29wLCByYXRoZXIgdGhhbiBleHBlY3RpbmcgdGhhdCB0aGUgYnVmZmVyIGNhbgorYmUgZW1wdGllZCBvciByZWxvYWRlZCB3aXRoaW4gdGhlIGRhdGEgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXIgc3Vicm91dGluZS4KK1RoZSBsaWJyYXJ5IHN1cHBvcnRzIHRoaXMgbmVlZCBieSBwcm92aWRpbmcgYW4gIkkvTyBzdXNwZW5zaW9uIiBtb2RlLCB3aGljaCB3ZQorZGVzY3JpYmUgaW4gdGhpcyBzZWN0aW9uLgorCitUaGUgSS9PIHN1c3BlbnNpb24gbW9kZSBpcyBub3QgYSBwYW5hY2VhOiBub3RoaW5nIGlzIGd1YXJhbnRlZWQgYWJvdXQgdGhlCittYXhpbXVtIGFtb3VudCBvZiB0aW1lIHNwZW50IGluIGFueSBvbmUgY2FsbCB0byB0aGUgbGlicmFyeSwgc28gaXQgd2lsbCBub3QKK2VsaW1pbmF0ZSByZXNwb25zZS10aW1lIHByb2JsZW1zIGluIHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICBJZiB5b3UKK25lZWQgZ3VhcmFudGVlZCByZXNwb25zZSB0aW1lLCB3ZSBzdWdnZXN0IHlvdSAiYml0ZSB0aGUgYnVsbGV0IiBhbmQgaW1wbGVtZW50CithIHJlYWwgbXVsdGktdGFza2luZyBjYXBhYmlsaXR5LgorCitUbyB1c2UgSS9PIHN1c3BlbnNpb24sIGNvb3BlcmF0aW9uIGlzIG5lZWRlZCBiZXR3ZWVuIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uCithbmQgdGhlIGRhdGEgc291cmNlIG9yIGRlc3RpbmF0aW9uIG1hbmFnZXI7IHlvdSB3aWxsIGFsd2F5cyBuZWVkIGEgY3VzdG9tCitzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlci4gIChQbGVhc2UgcmVhZCB0aGUgcHJldmlvdXMgc2VjdGlvbiBpZiB5b3UgaGF2ZW4ndAorYWxyZWFkeS4pICBUaGUgYmFzaWMgaWRlYSBpcyB0aGF0IHRoZSBlbXB0eV9vdXRwdXRfYnVmZmVyKCkgb3IKK2ZpbGxfaW5wdXRfYnVmZmVyKCkgcm91dGluZSBpcyBhIG5vLW9wLCBtZXJlbHkgcmV0dXJuaW5nIEZBTFNFIHRvIGluZGljYXRlCit0aGF0IGl0IGhhcyBkb25lIG5vdGhpbmcuICBVcG9uIHNlZWluZyB0aGlzLCB0aGUgSlBFRyBsaWJyYXJ5IHN1c3BlbmRzCitvcGVyYXRpb24gYW5kIHJldHVybnMgdG8gaXRzIGNhbGxlci4gIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBpcworcmVzcG9uc2libGUgZm9yIGVtcHR5aW5nIG9yIHJlZmlsbGluZyB0aGUgd29yayBidWZmZXIgYmVmb3JlIGNhbGxpbmcgdGhlCitKUEVHIGxpYnJhcnkgYWdhaW4uCisKK0NvbXByZXNzaW9uIHN1c3BlbnNpb246CisKK0ZvciBjb21wcmVzc2lvbiBzdXNwZW5zaW9uLCB1c2UgYW4gZW1wdHlfb3V0cHV0X2J1ZmZlcigpIHJvdXRpbmUgdGhhdCByZXR1cm5zCitGQUxTRTsgdHlwaWNhbGx5IGl0IHdpbGwgbm90IGRvIGFueXRoaW5nIGVsc2UuICBUaGlzIHdpbGwgY2F1c2UgdGhlCitjb21wcmVzc29yIHRvIHJldHVybiB0byB0aGUgY2FsbGVyIG9mIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCksIHdpdGggdGhlIHJldHVybgordmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vdCBhbGwgdGhlIHN1cHBsaWVkIHNjYW5saW5lcyBoYXZlIGJlZW4gYWNjZXB0ZWQuCitUaGUgYXBwbGljYXRpb24gbXVzdCBtYWtlIG1vcmUgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwgYWRqdXN0IHRoZSBvdXRwdXQKK2J1ZmZlciBwb2ludGVyL2NvdW50IGFwcHJvcHJpYXRlbHksIGFuZCB0aGVuIGNhbGwganBlZ193cml0ZV9zY2FubGluZXMoKQorYWdhaW4sIHBvaW50aW5nIHRvIHRoZSBmaXJzdCB1bmNvbnN1bWVkIHNjYW5saW5lLgorCitXaGVuIGZvcmNlZCB0byBzdXNwZW5kLCB0aGUgY29tcHJlc3NvciB3aWxsIGJhY2t0cmFjayB0byBhIGNvbnZlbmllbnQgc3RvcHBpbmcKK3BvaW50ICh1c3VhbGx5IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBNQ1UpOyBpdCB3aWxsIHJlZ2VuZXJhdGUgc29tZSBvdXRwdXQKK2RhdGEgd2hlbiByZXN0YXJ0ZWQuICBUaGVyZWZvcmUsIGFsdGhvdWdoIGVtcHR5X291dHB1dF9idWZmZXIoKSBpcyBvbmx5CitjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIGlzIGZpbGxlZCwgeW91IHNob3VsZCBOT1Qgd3JpdGUgb3V0IHRoZSBlbnRpcmUgYnVmZmVyCithZnRlciBhIHN1c3BlbnNpb24uICBXcml0ZSBvbmx5IHRoZSBkYXRhIHVwIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mCituZXh0X291dHB1dF9ieXRlL2ZyZWVfaW5fYnVmZmVyLiAgVGhlIGRhdGEgYmV5b25kIHRoYXQgcG9pbnQgd2lsbCBiZQorcmVnZW5lcmF0ZWQgYWZ0ZXIgcmVzdW1wdGlvbi4KKworQmVjYXVzZSBvZiB0aGUgYmFja3RyYWNraW5nIGJlaGF2aW9yLCBhIGdvb2Qtc2l6ZSBvdXRwdXQgYnVmZmVyIGlzIGVzc2VudGlhbAorZm9yIGVmZmljaWVuY3k7IHlvdSBkb24ndCB3YW50IHRoZSBjb21wcmVzc29yIHRvIHN1c3BlbmQgb2Z0ZW4uICAoSW4gZmFjdCwgYW4KK292ZXJseSBzbWFsbCBidWZmZXIgY291bGQgbGVhZCB0byBpbmZpbml0ZSBsb29waW5nLCBpZiBhIHNpbmdsZSBNQ1UgcmVxdWlyZWQKK21vcmUgZGF0YSB0aGFuIHdvdWxkIGZpdCBpbiB0aGUgYnVmZmVyLikgIFdlIHJlY29tbWVuZCBhIGJ1ZmZlciBvZiBhdCBsZWFzdAorc2V2ZXJhbCBLYnl0ZXMuICBZb3UgbWF5IHdhbnQgdG8gaW5zZXJ0IGV4cGxpY2l0IGNvZGUgdG8gZW5zdXJlIHRoYXQgeW91IGRvbid0CitjYWxsIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCkgdW5sZXNzIHRoZXJlIGlzIGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3BhY2UgaW4KK3RoZSBvdXRwdXQgYnVmZmVyOyBpbiBvdGhlciB3b3JkcywgZmx1c2ggdGhlIGJ1ZmZlciBiZWZvcmUgdHJ5aW5nIHRvIGNvbXByZXNzCittb3JlIGRhdGEuCisKK1RoZSBjb21wcmVzc29yIGRvZXMgbm90IGFsbG93IHN1c3BlbnNpb24gd2hpbGUgaXQgaXMgdHJ5aW5nIHRvIHdyaXRlIEpQRUcKK21hcmtlcnMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBmaWxlLiAgVGhpcyBtZWFucyB0aGF0OgorICAqIEF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb21wcmVzc2lvbiBvcGVyYXRpb24sIHRoZXJlIG11c3QgYmUgZW5vdWdoIGZyZWUKKyAgICBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciB0byBob2xkIHRoZSBoZWFkZXIgbWFya2VycyAodHlwaWNhbGx5IDYwMCBvcgorICAgIHNvIGJ5dGVzKS4gIFRoZSByZWNvbW1lbmRlZCBidWZmZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGlzIGFueXdheSwgc28KKyAgICB0aGlzIGlzIG5vdCBhIHByb2JsZW0gYXMgbG9uZyBhcyB5b3Ugc3RhcnQgd2l0aCBhbiBlbXB0eSBidWZmZXIuICBIb3dldmVyLAorICAgIHRoaXMgcmVzdHJpY3Rpb24gbWlnaHQgY2F0Y2ggeW91IGlmIHlvdSBpbnNlcnQgbGFyZ2Ugc3BlY2lhbCBtYXJrZXJzLCBzdWNoCisgICAgYXMgYSBKRklGIHRodW1ibmFpbCBpbWFnZSwgd2l0aG91dCBmbHVzaGluZyB0aGUgYnVmZmVyIGFmdGVyd2FyZHMuCisgICogV2hlbiB5b3UgY2FsbCBqcGVnX2ZpbmlzaF9jb21wcmVzcygpLCB0aGVyZSBtdXN0IGJlIGVub3VnaCBzcGFjZSBpbiB0aGUKKyAgICBvdXRwdXQgYnVmZmVyIHRvIGVtaXQgYW55IGJ1ZmZlcmVkIGRhdGEgYW5kIHRoZSBmaW5hbCBFT0kgbWFya2VyLiAgSW4gdGhlCisgICAgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaGFsZiBhIGRvemVuIGJ5dGVzIHNob3VsZCBzdWZmaWNlIGZvciB0aGlzLCBidXQKKyAgICBmb3Igc2FmZXR5J3Mgc2FrZSB3ZSByZWNvbW1lbmQgZW5zdXJpbmcgdGhhdCBhdCBsZWFzdCAxMDAgYnl0ZXMgYXJlIGZyZWUKKyAgICBiZWZvcmUgY2FsbGluZyBqcGVnX2ZpbmlzaF9jb21wcmVzcygpLgorCitBIG1vcmUgc2lnbmlmaWNhbnQgcmVzdHJpY3Rpb24gaXMgdGhhdCBqcGVnX2ZpbmlzaF9jb21wcmVzcygpIGNhbm5vdCBzdXNwZW5kLgorVGhpcyBtZWFucyB5b3UgY2Fubm90IHVzZSBzdXNwZW5zaW9uIHdpdGggbXVsdGktcGFzcyBvcGVyYXRpbmcgbW9kZXMsIG5hbWVseQorSHVmZm1hbiBjb2RlIG9wdGltaXphdGlvbiBhbmQgbXVsdGlwbGUtc2NhbiBvdXRwdXQuICBUaG9zZSBtb2RlcyB3cml0ZSB0aGUKK3dob2xlIGZpbGUgZHVyaW5nIGpwZWdfZmluaXNoX2NvbXByZXNzKCksIHdoaWNoIHdpbGwgY2VydGFpbmx5IHJlc3VsdCBpbgorYnVmZmVyIG92ZXJydW4uICAoTm90ZSB0aGF0IHRoaXMgcmVzdHJpY3Rpb24gYXBwbGllcyBvbmx5IHRvIGNvbXByZXNzaW9uLAorbm90IGRlY29tcHJlc3Npb24uICBUaGUgZGVjb21wcmVzc29yIHN1cHBvcnRzIGlucHV0IHN1c3BlbnNpb24gaW4gYWxsIG9mIGl0cworb3BlcmF0aW5nIG1vZGVzLikKKworRGVjb21wcmVzc2lvbiBzdXNwZW5zaW9uOgorCitGb3IgZGVjb21wcmVzc2lvbiBzdXNwZW5zaW9uLCB1c2UgYSBmaWxsX2lucHV0X2J1ZmZlcigpIHJvdXRpbmUgdGhhdCBzaW1wbHkKK3JldHVybnMgRkFMU0UgKGV4Y2VwdCBwZXJoYXBzIGR1cmluZyBlcnJvciByZWNvdmVyeSwgYXMgZGlzY3Vzc2VkIGJlbG93KS4KK1RoaXMgd2lsbCBjYXVzZSB0aGUgZGVjb21wcmVzc29yIHRvIHJldHVybiB0byBpdHMgY2FsbGVyIHdpdGggYW4gaW5kaWNhdGlvbgordGhhdCBzdXNwZW5zaW9uIGhhcyBvY2N1cnJlZC4gIFRoaXMgY2FuIGhhcHBlbiBhdCBmb3VyIHBsYWNlczoKKyAgKiBqcGVnX3JlYWRfaGVhZGVyKCk6IHdpbGwgcmV0dXJuIEpQRUdfU1VTUEVOREVELgorICAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpOiB3aWxsIHJldHVybiBGQUxTRSwgcmF0aGVyIHRoYW4gaXRzIHVzdWFsIFRSVUUuCisgICoganBlZ19yZWFkX3NjYW5saW5lcygpOiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyBhbHJlYWR5CisgICAgICAgIGNvbXBsZXRlZCAocG9zc2libHkgMCkuCisgICoganBlZ19maW5pc2hfZGVjb21wcmVzcygpOiB3aWxsIHJldHVybiBGQUxTRSwgcmF0aGVyIHRoYW4gaXRzIHVzdWFsIFRSVUUuCitUaGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24gbXVzdCByZWNvZ25pemUgdGhlc2UgY2FzZXMsIGxvYWQgbW9yZSBkYXRhIGludG8KK3RoZSBpbnB1dCBidWZmZXIsIGFuZCByZXBlYXQgdGhlIGNhbGwuICBJbiB0aGUgY2FzZSBvZiBqcGVnX3JlYWRfc2NhbmxpbmVzKCksCitpbmNyZW1lbnQgdGhlIHBhc3NlZCBwb2ludGVycyBwYXN0IGFueSBzY2FubGluZXMgc3VjY2Vzc2Z1bGx5IHJlYWQuCisKK0p1c3QgYXMgd2l0aCBjb21wcmVzc2lvbiwgdGhlIGRlY29tcHJlc3NvciB3aWxsIHR5cGljYWxseSBiYWNrdHJhY2sgdG8gYQorY29udmVuaWVudCByZXN0YXJ0IHBvaW50IGJlZm9yZSBzdXNwZW5kaW5nLiAgV2hlbiBmaWxsX2lucHV0X2J1ZmZlcigpIGlzCitjYWxsZWQsIG5leHRfaW5wdXRfYnl0ZS9ieXRlc19pbl9idWZmZXIgcG9pbnQgdG8gdGhlIGN1cnJlbnQgcmVzdGFydCBwb2ludCwKK3doaWNoIGlzIHdoZXJlIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBiYWNrdHJhY2sgdG8gaWYgRkFMU0UgaXMgcmV0dXJuZWQuCitUaGUgZGF0YSBiZXlvbmQgdGhhdCBwb3NpdGlvbiBtdXN0IE5PVCBiZSBkaXNjYXJkZWQgaWYgeW91IHN1c3BlbmQ7IGl0IG5lZWRzCit0byBiZSByZS1yZWFkIHVwb24gcmVzdW1wdGlvbi4gIEluIG1vc3QgaW1wbGVtZW50YXRpb25zLCB5b3UnbGwgbmVlZCB0byBzaGlmdAordGhpcyBkYXRhIGRvd24gdG8gdGhlIHN0YXJ0IG9mIHlvdXIgd29yayBidWZmZXIgYW5kIHRoZW4gbG9hZCBtb3JlIGRhdGEgYWZ0ZXIKK2l0LiAgQWdhaW4sIHRoaXMgYmVoYXZpb3IgbWVhbnMgdGhhdCBhIHNldmVyYWwtS2J5dGUgd29yayBidWZmZXIgaXMgZXNzZW50aWFsCitmb3IgZGVjZW50IHBlcmZvcm1hbmNlOyBmdXJ0aGVybW9yZSwgeW91IHNob3VsZCBsb2FkIGEgcmVhc29uYWJsZSBhbW91bnQgb2YKK25ldyBkYXRhIGJlZm9yZSByZXN1bWluZyBkZWNvbXByZXNzaW9uLiAgKElmIHlvdSBsb2FkZWQsIHNheSwgb25seSBvbmUgbmV3CitieXRlIGVhY2ggdGltZSBhcm91bmQsIHlvdSBjb3VsZCB3YXN0ZSBhIExPVCBvZiBjeWNsZXMuKQorCitUaGUgc2tpcF9pbnB1dF9kYXRhKCkgc291cmNlIG1hbmFnZXIgcm91dGluZSByZXF1aXJlcyBzcGVjaWFsIGNhcmUgaW4gYQorc3VzcGVuc2lvbiBzY2VuYXJpby4gIFRoaXMgcm91dGluZSBpcyBOT1QgZ3JhbnRlZCB0aGUgYWJpbGl0eSB0byBzdXNwZW5kIHRoZQorZGVjb21wcmVzc29yOyBpdCBjYW4gZGVjcmVtZW50IGJ5dGVzX2luX2J1ZmZlciB0byB6ZXJvLCBidXQgbm8gbW9yZS4gIElmIHRoZQorcmVxdWVzdGVkIHNraXAgZGlzdGFuY2UgZXhjZWVkcyB0aGUgYW1vdW50IG9mIGRhdGEgY3VycmVudGx5IGluIHRoZSBpbnB1dAorYnVmZmVyLCB0aGVuIHNraXBfaW5wdXRfZGF0YSgpIG11c3Qgc2V0IGJ5dGVzX2luX2J1ZmZlciB0byB6ZXJvIGFuZCByZWNvcmQgdGhlCithZGRpdGlvbmFsIHNraXAgZGlzdGFuY2Ugc29tZXdoZXJlIGVsc2UuICBUaGUgZGVjb21wcmVzc29yIHdpbGwgaW1tZWRpYXRlbHkKK2NhbGwgZmlsbF9pbnB1dF9idWZmZXIoKSwgd2hpY2ggc2hvdWxkIHJldHVybiBGQUxTRSwgd2hpY2ggd2lsbCBjYXVzZSBhCitzdXNwZW5zaW9uIHJldHVybi4gIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBtdXN0IHRoZW4gYXJyYW5nZSB0byBkaXNjYXJkCit0aGUgcmVjb3JkZWQgbnVtYmVyIG9mIGJ5dGVzIGJlZm9yZSBpdCByZXN1bWVzIGxvYWRpbmcgdGhlIGlucHV0IGJ1ZmZlci4KKyhZZXMsIHRoaXMgZGVzaWduIGlzIHJhdGhlciBiYXJvcXVlLCBidXQgaXQgYXZvaWRzIGNvbXBsZXhpdHkgaW4gdGhlIGZhciBtb3JlCitjb21tb24gY2FzZSB3aGVyZSBhIG5vbi1zdXNwZW5kaW5nIHNvdXJjZSBtYW5hZ2VyIGlzIHVzZWQuKQorCitJZiB0aGUgaW5wdXQgZGF0YSBoYXMgYmVlbiBleGhhdXN0ZWQsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBlbWl0IGEgd2FybmluZworYW5kIGluc2VydCBkdW1teSBFT0kgbWFya2VycyBqdXN0IGFzIGEgbm9uLXN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgbWFuYWdlcgord291bGQgZG8uICBUaGlzIGNhbiBiZSBoYW5kbGVkIGVpdGhlciBpbiB0aGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24gbG9naWMgb3IKK3dpdGhpbiBmaWxsX2lucHV0X2J1ZmZlcigpOyB0aGUgbGF0dGVyIGlzIHByb2JhYmx5IG1vcmUgZWZmaWNpZW50LiAgSWYKK2ZpbGxfaW5wdXRfYnVmZmVyKCkga25vd3MgdGhhdCBubyBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLCBpdCBjYW4gc2V0IHRoZQorcG9pbnRlci9jb3VudCB0byBwb2ludCB0byBhIGR1bW15IEVPSSBtYXJrZXIgYW5kIHRoZW4gcmV0dXJuIFRSVUUganVzdCBhcwordGhvdWdoIGl0IGhhZCByZWFkIG1vcmUgZGF0YSBpbiBhIG5vbi1zdXNwZW5kaW5nIHNpdHVhdGlvbi4KKworVGhlIGRlY29tcHJlc3NvciBkb2VzIG5vdCBhdHRlbXB0IHRvIHN1c3BlbmQgd2l0aGluIHN0YW5kYXJkIEpQRUcgbWFya2VyczsKK2luc3RlYWQgaXQgd2lsbCBiYWNrdHJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXJrZXIgYW5kIHJlcHJvY2VzcyB0aGUgd2hvbGUKK21hcmtlciBuZXh0IHRpbWUuICBIZW5jZSB0aGUgaW5wdXQgYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlCitsb25nZXN0IHN0YW5kYXJkIG1hcmtlciBpbiB0aGUgZmlsZS4gIFN0YW5kYXJkIEpQRUcgbWFya2VycyBzaG91bGQgbm9ybWFsbHkKK25vdCBleGNlZWQgYSBmZXcgaHVuZHJlZCBieXRlcyBlYWNoIChESFQgdGFibGVzIGFyZSB0eXBpY2FsbHkgdGhlIGxvbmdlc3QpLgorV2UgcmVjb21tZW5kIGF0IGxlYXN0IGEgMksgYnVmZmVyIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3aGljaCBpcyBtdWNoCitsYXJnZXIgdGhhbiBhbnkgY29ycmVjdCBtYXJrZXIgaXMgbGlrZWx5IHRvIGJlLiAgRm9yIHJvYnVzdG5lc3MgYWdhaW5zdAorZGFtYWdlZCBtYXJrZXIgbGVuZ3RoIGNvdW50cywgeW91IG1heSB3aXNoIHRvIGluc2VydCBhIHRlc3QgaW4geW91cgorYXBwbGljYXRpb24gZm9yIHRoZSBjYXNlIHRoYXQgdGhlIGlucHV0IGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGZ1bGwgYW5kIHlldAordGhlIGRlY29kZXIgaGFzIHN1c3BlbmRlZCB3aXRob3V0IGNvbnN1bWluZyBhbnkgZGF0YSAtLS0gb3RoZXJ3aXNlLCBpZiB0aGlzCitzaXR1YXRpb24gZGlkIG9jY3VyLCBpdCB3b3VsZCBsZWFkIHRvIGFuIGVuZGxlc3MgbG9vcC4gIChUaGUgbGlicmFyeSBjYW4ndAorcHJvdmlkZSB0aGlzIHRlc3Qgc2luY2UgaXQgaGFzIG5vIGlkZWEgd2hldGhlciAidGhlIGJ1ZmZlciBpcyBmdWxsIiwgb3IKK2V2ZW4gd2hldGhlciB0aGVyZSBpcyBhIGZpeGVkLXNpemUgaW5wdXQgYnVmZmVyLikKKworVGhlIGlucHV0IGJ1ZmZlciB3b3VsZCBuZWVkIHRvIGJlIDY0SyB0byBhbGxvdyBmb3IgYXJiaXRyYXJ5IENPTSBvciBBUFBuCittYXJrZXJzLCBidXQgdGhlc2UgYXJlIGhhbmRsZWQgc3BlY2lhbGx5OiB0aGV5IGFyZSBlaXRoZXIgc2F2ZWQgaW50byBhbGxvY2F0ZWQKK21lbW9yeSwgb3Igc2tpcHBlZCBvdmVyIGJ5IGNhbGxpbmcgc2tpcF9pbnB1dF9kYXRhKCkuICBJbiB0aGUgZm9ybWVyIGNhc2UsCitzdXNwZW5zaW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5LCBhbmQgaW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgcHJvYmxlbSBvZgorYnVmZmVyIG92ZXJydW4gaXMgcGxhY2VkIG9uIHNraXBfaW5wdXRfZGF0YSdzIHNob3VsZGVycywgYXMgZXhwbGFpbmVkIGFib3ZlLgorTm90ZSB0aGF0IGlmIHlvdSBwcm92aWRlIHlvdXIgb3duIG1hcmtlciBoYW5kbGluZyByb3V0aW5lIGZvciBsYXJnZSBtYXJrZXJzLAoreW91IHNob3VsZCBjb25zaWRlciBob3cgdG8gZGVhbCB3aXRoIGJ1ZmZlciBvdmVyZmxvdy4KKworTXVsdGlwbGUtYnVmZmVyIG1hbmFnZW1lbnQ6CisKK0luIHNvbWUgYXBwbGljYXRpb25zIGl0IGlzIGRlc2lyYWJsZSB0byBzdG9yZSB0aGUgY29tcHJlc3NlZCBkYXRhIGluIGEgbGlua2VkCitsaXN0IG9mIGJ1ZmZlciBhcmVhcywgc28gYXMgdG8gYXZvaWQgZGF0YSBjb3B5aW5nLiAgVGhpcyBjYW4gYmUgaGFuZGxlZCBieQoraGF2aW5nIGVtcHR5X291dHB1dF9idWZmZXIoKSBvciBmaWxsX2lucHV0X2J1ZmZlcigpIHNldCB0aGUgcG9pbnRlciBhbmQgY291bnQKK3RvIHJlZmVyZW5jZSB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyOyBGQUxTRSBpcyByZXR1cm5lZCBvbmx5IGlmIG5vIG1vcmUKK2J1ZmZlcnMgYXJlIGF2YWlsYWJsZS4gIEFsdGhvdWdoIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQsIHRoZXJlIGlzIGEKK3BpdGZhbGwgaW4gdGhpcyBhcHByb2FjaDogdGhlIGJhY2t0cmFjayB0aGF0IG9jY3VycyB3aGVuIEZBTFNFIGlzIHJldHVybmVkCitjb3VsZCBiYWNrIHVwIGludG8gYW4gZWFybGllciBidWZmZXIuICBGb3IgZXhhbXBsZSwgd2hlbiBmaWxsX2lucHV0X2J1ZmZlcigpCitpcyBjYWxsZWQsIHRoZSBjdXJyZW50IHBvaW50ZXIgJiBjb3VudCBpbmRpY2F0ZSB0aGUgYmFja3RyYWNrIHJlc3RhcnQgcG9pbnQuCitTaW5jZSBmaWxsX2lucHV0X2J1ZmZlcigpIHdpbGwgc2V0IHRoZSBwb2ludGVyIGFuZCBjb3VudCB0byByZWZlciB0byBhIG5ldworYnVmZmVyLCB0aGUgcmVzdGFydCBwb3NpdGlvbiBtdXN0IGJlIHNhdmVkIHNvbWV3aGVyZSBlbHNlLiAgU3VwcG9zZSBhIHNlY29uZAorY2FsbCB0byBmaWxsX2lucHV0X2J1ZmZlcigpIG9jY3VycyBpbiB0aGUgc2FtZSBsaWJyYXJ5IGNhbGwsIGFuZCBubworYWRkaXRpb25hbCBpbnB1dCBkYXRhIGlzIGF2YWlsYWJsZSwgc28gZmlsbF9pbnB1dF9idWZmZXIgbXVzdCByZXR1cm4gRkFMU0UuCitJZiB0aGUgSlBFRyBsaWJyYXJ5IGhhcyBub3QgbW92ZWQgdGhlIHBvaW50ZXIvY291bnQgZm9yd2FyZCBpbiB0aGUgY3VycmVudAorYnVmZmVyLCB0aGVuICp0aGUgY29ycmVjdCByZXN0YXJ0IHBvaW50IGlzIHRoZSBzYXZlZCBwb3NpdGlvbiBpbiB0aGUgcHJpb3IKK2J1ZmZlciouICBQcmlvciBidWZmZXJzIG1heSBiZSBkaXNjYXJkZWQgb25seSBhZnRlciB0aGUgbGlicmFyeSBlc3RhYmxpc2hlcworYSByZXN0YXJ0IHBvaW50IHdpdGhpbiBhIGxhdGVyIGJ1ZmZlci4gIFNpbWlsYXIgcmVtYXJrcyBhcHBseSBmb3Igb3V0cHV0IGludG8KK2EgY2hhaW4gb2YgYnVmZmVycy4KKworVGhlIGxpYnJhcnkgd2lsbCBuZXZlciBhdHRlbXB0IHRvIGJhY2t0cmFjayBvdmVyIGEgc2tpcF9pbnB1dF9kYXRhKCkgY2FsbCwKK3NvIGFueSBza2lwcGVkIGRhdGEgY2FuIGJlIHBlcm1hbmVudGx5IGRpc2NhcmRlZC4gIFlvdSBzdGlsbCBoYXZlIHRvIGRlYWwKK3dpdGggdGhlIGNhc2Ugb2Ygc2tpcHBpbmcgbm90LXlldC1yZWNlaXZlZCBkYXRhLCBob3dldmVyLgorCitJdCdzIG11Y2ggc2ltcGxlciB0byB1c2Ugb25seSBhIHNpbmdsZSBidWZmZXI7IHdoZW4gZmlsbF9pbnB1dF9idWZmZXIoKSBpcworY2FsbGVkLCBtb3ZlIGFueSB1bmNvbnN1bWVkIGRhdGEgKGJleW9uZCB0aGUgY3VycmVudCBwb2ludGVyL2NvdW50KSBkb3duIHRvCit0aGUgYmVnaW5uaW5nIG9mIHRoaXMgYnVmZmVyIGFuZCB0aGVuIGxvYWQgbmV3IGRhdGEgaW50byB0aGUgcmVtYWluaW5nIGJ1ZmZlcgorc3BhY2UuICBUaGlzIGFwcHJvYWNoIHJlcXVpcmVzIGEgbGl0dGxlIG1vcmUgZGF0YSBjb3B5aW5nIGJ1dCBpcyBmYXIgZWFzaWVyCit0byBnZXQgcmlnaHQuCisKKworUHJvZ3Jlc3NpdmUgSlBFRyBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJvZ3Jlc3NpdmUgSlBFRyByZWFycmFuZ2VzIHRoZSBzdG9yZWQgZGF0YSBpbnRvIGEgc2VyaWVzIG9mIHNjYW5zIG9mCitpbmNyZWFzaW5nIHF1YWxpdHkuICBJbiBzaXR1YXRpb25zIHdoZXJlIGEgSlBFRyBmaWxlIGlzIHRyYW5zbWl0dGVkIGFjcm9zcyBhCitzbG93IGNvbW11bmljYXRpb25zIGxpbmssIGEgZGVjb2RlciBjYW4gZ2VuZXJhdGUgYSBsb3ctcXVhbGl0eSBpbWFnZSB2ZXJ5CitxdWlja2x5IGZyb20gdGhlIGZpcnN0IHNjYW4sIHRoZW4gZ3JhZHVhbGx5IGltcHJvdmUgdGhlIGRpc3BsYXllZCBxdWFsaXR5IGFzCittb3JlIHNjYW5zIGFyZSByZWNlaXZlZC4gIFRoZSBmaW5hbCBpbWFnZSBhZnRlciBhbGwgc2NhbnMgYXJlIGNvbXBsZXRlIGlzCitpZGVudGljYWwgdG8gdGhhdCBvZiBhIHJlZ3VsYXIgKHNlcXVlbnRpYWwpIEpQRUcgZmlsZSBvZiB0aGUgc2FtZSBxdWFsaXR5CitzZXR0aW5nLiAgUHJvZ3Jlc3NpdmUgSlBFRyBmaWxlcyBhcmUgb2Z0ZW4gc2xpZ2h0bHkgc21hbGxlciB0aGFuIGVxdWl2YWxlbnQKK3NlcXVlbnRpYWwgSlBFRyBmaWxlcywgYnV0IHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNyZW1lbnRhbCBkaXNwbGF5IGlzIHRoZSBtYWluCityZWFzb24gZm9yIHVzaW5nIHByb2dyZXNzaXZlIEpQRUcuCisKK1RoZSBJSkcgZW5jb2RlciBsaWJyYXJ5IGdlbmVyYXRlcyBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzIHdoZW4gZ2l2ZW4gYQorc3VpdGFibGUgInNjYW4gc2NyaXB0IiBkZWZpbmluZyBob3cgdG8gZGl2aWRlIHRoZSBkYXRhIGludG8gc2NhbnMuCitDcmVhdGlvbiBvZiBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzIGlzIG90aGVyd2lzZSB0cmFuc3BhcmVudCB0byB0aGUgZW5jb2Rlci4KK1Byb2dyZXNzaXZlIEpQRUcgZmlsZXMgY2FuIGFsc28gYmUgcmVhZCB0cmFuc3BhcmVudGx5IGJ5IHRoZSBkZWNvZGVyIGxpYnJhcnkuCitJZiB0aGUgZGVjb2RpbmcgYXBwbGljYXRpb24gc2ltcGx5IHVzZXMgdGhlIGxpYnJhcnkgYXMgZGVmaW5lZCBhYm92ZSwgaXQKK3dpbGwgcmVjZWl2ZSBhIGZpbmFsIGRlY29kZWQgaW1hZ2Ugd2l0aG91dCBhbnkgaW5kaWNhdGlvbiB0aGF0IHRoZSBmaWxlIHdhcworcHJvZ3Jlc3NpdmUuICBPZiBjb3Vyc2UsIHRoaXMgYXBwcm9hY2ggZG9lcyBub3QgYWxsb3cgaW5jcmVtZW50YWwgZGlzcGxheS4KK1RvIHBlcmZvcm0gaW5jcmVtZW50YWwgZGlzcGxheSwgYW4gYXBwbGljYXRpb24gbmVlZHMgdG8gdXNlIHRoZSBkZWNvZGVyCitsaWJyYXJ5J3MgImJ1ZmZlcmVkLWltYWdlIiBtb2RlLCBpbiB3aGljaCBpdCByZWNlaXZlcyBhIGRlY29kZWQgaW1hZ2UKK211bHRpcGxlIHRpbWVzLgorCitFYWNoIGRpc3BsYXllZCBzY2FuIHJlcXVpcmVzIGFib3V0IGFzIG11Y2ggd29yayB0byBkZWNvZGUgYXMgYSBmdWxsIEpQRUcKK2ltYWdlIG9mIHRoZSBzYW1lIHNpemUsIHNvIHRoZSBkZWNvZGVyIG11c3QgYmUgZmFpcmx5IGZhc3QgaW4gcmVsYXRpb24gdG8gdGhlCitkYXRhIHRyYW5zbWlzc2lvbiByYXRlIGluIG9yZGVyIHRvIG1ha2UgaW5jcmVtZW50YWwgZGlzcGxheSB1c2VmdWwuICBIb3dldmVyLAoraXQgaXMgcG9zc2libGUgdG8gc2tpcCBkaXNwbGF5aW5nIHRoZSBpbWFnZSBhbmQgc2ltcGx5IGFkZCB0aGUgaW5jb21pbmcgYml0cwordG8gdGhlIGRlY29kZXIncyBjb2VmZmljaWVudCBidWZmZXIuICBUaGlzIGlzIGZhc3QgYmVjYXVzZSBvbmx5IEh1ZmZtYW4KK2RlY29kaW5nIG5lZWQgYmUgZG9uZSwgbm90IElEQ1QsIHVwc2FtcGxpbmcsIGNvbG9yc3BhY2UgY29udmVyc2lvbiwgZXRjLgorVGhlIElKRyBkZWNvZGVyIGxpYnJhcnkgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBzd2l0Y2ggZHluYW1pY2FsbHkgYmV0d2VlbgorZGlzcGxheWluZyB0aGUgaW1hZ2UgYW5kIHNpbXBseSBhYnNvcmJpbmcgdGhlIGluY29taW5nIGJpdHMuICBBIHByb3Blcmx5Citjb2RlZCBhcHBsaWNhdGlvbiBjYW4gYXV0b21hdGljYWxseSBhZGFwdCB0aGUgbnVtYmVyIG9mIGRpc3BsYXkgcGFzc2VzIHRvCitzdWl0IHRoZSB0aW1lIGF2YWlsYWJsZSBhcyB0aGUgaW1hZ2UgaXMgcmVjZWl2ZWQuICBBbHNvLCBhIGZpbmFsCitoaWdoZXItcXVhbGl0eSBkaXNwbGF5IGN5Y2xlIGNhbiBiZSBwZXJmb3JtZWQgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YSBhZnRlcgordGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkLgorCitQcm9ncmVzc2l2ZSBjb21wcmVzc2lvbjoKKworVG8gY3JlYXRlIGEgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlIChvciBhIG11bHRpcGxlLXNjYW4gc2VxdWVudGlhbCBKUEVHIGZpbGUpLAorc2V0IHRoZSBzY2FuX2luZm8gY2luZm8gZmllbGQgdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2Ygc2NhbiBkZXNjcmlwdG9ycywgYW5kCitwZXJmb3JtIGNvbXByZXNzaW9uIGFzIHVzdWFsLiAgSW5zdGVhZCBvZiBjb25zdHJ1Y3RpbmcgeW91ciBvd24gc2NhbiBsaXN0LAoreW91IGNhbiBjYWxsIHRoZSBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbigpIGhlbHBlciByb3V0aW5lIHRvIGNyZWF0ZSBhCityZWNvbW1lbmRlZCBwcm9ncmVzc2lvbiBzZXF1ZW5jZTsgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYnkgYWxsCithcHBsaWNhdGlvbnMgdGhhdCBkb24ndCB3YW50IHRvIGdldCBpbnZvbHZlZCBpbiB0aGUgbml0dHktZ3JpdHR5IG9mCitwcm9ncmVzc2l2ZSBzY2FuIHNlcXVlbmNlIGRlc2lnbi4gIChJZiB5b3Ugd2FudCB0byBwcm92aWRlIHVzZXIgY29udHJvbCBvZgorc2NhbiBzZXF1ZW5jZXMsIHlvdSBtYXkgd2lzaCB0byBib3Jyb3cgdGhlIHNjYW4gc2NyaXB0IHJlYWRpbmcgY29kZSBmb3VuZAoraW4gcmRzd2l0Y2guYywgc28gdGhhdCB5b3UgY2FuIHJlYWQgc2NhbiBzY3JpcHQgZmlsZXMganVzdCBsaWtlIGNqcGVnJ3MuKQorV2hlbiBzY2FuX2luZm8gaXMgbm90IE5VTEwsIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IHdpbGwgc3RvcmUgRENUJ2QgZGF0YQoraW50byBhIGJ1ZmZlciBhcnJheSBhcyBqcGVnX3dyaXRlX3NjYW5saW5lcygpIGlzIGNhbGxlZCwgYW5kIHdpbGwgZW1pdCBhbGwKK3RoZSByZXF1ZXN0ZWQgc2NhbnMgZHVyaW5nIGpwZWdfZmluaXNoX2NvbXByZXNzKCkuICBUaGlzIGltcGxpZXMgdGhhdAorbXVsdGlwbGUtc2NhbiBvdXRwdXQgY2Fubm90IGJlIGNyZWF0ZWQgd2l0aCBhIHN1c3BlbmRpbmcgZGF0YSBkZXN0aW5hdGlvbgorbWFuYWdlciwgc2luY2UganBlZ19maW5pc2hfY29tcHJlc3MoKSBkb2VzIG5vdCBzdXBwb3J0IHN1c3BlbnNpb24uICBXZQorc2hvdWxkIGFsc28gbm90ZSB0aGF0IHRoZSBjb21wcmVzc29yIGN1cnJlbnRseSBmb3JjZXMgSHVmZm1hbiBvcHRpbWl6YXRpb24KK21vZGUgd2hlbiBjcmVhdGluZyBhIHByb2dyZXNzaXZlIEpQRUcgZmlsZSwgYmVjYXVzZSB0aGUgZGVmYXVsdCBIdWZmbWFuCit0YWJsZXMgYXJlIHVuc3VpdGFibGUgZm9yIHByb2dyZXNzaXZlIGZpbGVzLgorCitQcm9ncmVzc2l2ZSBkZWNvbXByZXNzaW9uOgorCitXaGVuIGJ1ZmZlcmVkLWltYWdlIG1vZGUgaXMgbm90IHVzZWQsIHRoZSBkZWNvZGVyIGxpYnJhcnkgd2lsbCByZWFkIGFsbCBvZgorYSBtdWx0aS1zY2FuIGZpbGUgZHVyaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLCBzbyB0aGF0IGl0IGNhbiBwcm92aWRlIGEKK2ZpbmFsIGRlY29kZWQgaW1hZ2UuICAoSGVyZSAibXVsdGktc2NhbiIgbWVhbnMgZWl0aGVyIHByb2dyZXNzaXZlIG9yCittdWx0aS1zY2FuIHNlcXVlbnRpYWwuKSAgVGhpcyBtYWtlcyBtdWx0aS1zY2FuIGZpbGVzIHRyYW5zcGFyZW50IHRvIHRoZQorZGVjb2RpbmcgYXBwbGljYXRpb24uICBIb3dldmVyLCBleGlzdGluZyBhcHBsaWNhdGlvbnMgdGhhdCB1c2VkIHN1c3BlbmRpbmcKK2lucHV0IHdpdGggdmVyc2lvbiA1IG9mIHRoZSBJSkcgbGlicmFyeSB3aWxsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gY2hlY2sKK2ZvciBhIHN1c3BlbnNpb24gcmV0dXJuIGZyb20ganBlZ19zdGFydF9kZWNvbXByZXNzKCkuCisKK1RvIHBlcmZvcm0gaW5jcmVtZW50YWwgZGlzcGxheSwgYW4gYXBwbGljYXRpb24gbXVzdCB1c2UgdGhlIGxpYnJhcnkncworYnVmZmVyZWQtaW1hZ2UgbW9kZS4gIFRoaXMgaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKworQnVmZmVyZWQtaW1hZ2UgbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBidWZmZXJlZC1pbWFnZSBtb2RlLCB0aGUgbGlicmFyeSBzdG9yZXMgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlIGluIGEKK2NvZWZmaWNpZW50IGJ1ZmZlciwgZnJvbSB3aGljaCBpdCBjYW4gYmUgcmVhZCBvdXQgYXMgbWFueSB0aW1lcyBhcyBkZXNpcmVkLgorVGhpcyBtb2RlIGlzIHR5cGljYWxseSB1c2VkIGZvciBpbmNyZW1lbnRhbCBkaXNwbGF5IG9mIHByb2dyZXNzaXZlIEpQRUcgZmlsZXMsCitidXQgaXQgY2FuIGJlIHVzZWQgd2l0aCBhbnkgSlBFRyBmaWxlLiAgRWFjaCBzY2FuIG9mIGEgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlCithZGRzIG1vcmUgZGF0YSAobW9yZSBkZXRhaWwpIHRvIHRoZSBidWZmZXJlZCBpbWFnZS4gIFRoZSBhcHBsaWNhdGlvbiBjYW4KK2Rpc3BsYXkgaW4gbG9ja3N0ZXAgd2l0aCB0aGUgc291cmNlIGZpbGUgKG9uZSBkaXNwbGF5IHBhc3MgcGVyIGlucHV0IHNjYW4pLAorb3IgaXQgY2FuIGFsbG93IGlucHV0IHByb2Nlc3NpbmcgdG8gb3V0cnVuIGRpc3BsYXkgcHJvY2Vzc2luZy4gIEJ5IG1ha2luZworaW5wdXQgYW5kIGRpc3BsYXkgcHJvY2Vzc2luZyBydW4gaW5kZXBlbmRlbnRseSwgaXQgaXMgcG9zc2libGUgZm9yIHRoZQorYXBwbGljYXRpb24gdG8gYWRhcHQgcHJvZ3Jlc3NpdmUgZGlzcGxheSB0byBhIHdpZGUgcmFuZ2Ugb2YgZGF0YSB0cmFuc21pc3Npb24KK3JhdGVzLgorCitUaGUgYmFzaWMgY29udHJvbCBmbG93IGZvciBidWZmZXJlZC1pbWFnZSBkZWNvZGluZyBpcworCisgICAgICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoKQorICAgICAgICBzZXQgZGF0YSBzb3VyY2UKKyAgICAgICAganBlZ19yZWFkX2hlYWRlcigpCisgICAgICAgIHNldCBvdmVyYWxsIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycworICAgICAgICBjaW5mby5idWZmZXJlZF9pbWFnZSA9IFRSVUU7ICAgIC8qIHNlbGVjdCBidWZmZXJlZC1pbWFnZSBtb2RlICovCisgICAgICAgIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpCisgICAgICAgIGZvciAoZWFjaCBvdXRwdXQgcGFzcykgeworICAgICAgICAgICAgYWRqdXN0IG91dHB1dCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMgaWYgcmVxdWlyZWQKKyAgICAgICAgICAgIGpwZWdfc3RhcnRfb3V0cHV0KCkgICAgICAgICAvKiBzdGFydCBhIG5ldyBvdXRwdXQgcGFzcyAqLworICAgICAgICAgICAgZm9yIChhbGwgc2NhbmxpbmVzIGluIGltYWdlKSB7CisgICAgICAgICAgICAgICAganBlZ19yZWFkX3NjYW5saW5lcygpCisgICAgICAgICAgICAgICAgZGlzcGxheSBzY2FubGluZXMKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpwZWdfZmluaXNoX291dHB1dCgpICAgICAgICAvKiB0ZXJtaW5hdGUgb3V0cHV0IHBhc3MgKi8KKyAgICAgICAgfQorICAgICAgICBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkKKyAgICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoKQorCitUaGlzIGRpZmZlcnMgZnJvbSBvcmRpbmFyeSB1bmJ1ZmZlcmVkIGRlY29kaW5nIGluIHRoYXQgdGhlcmUgaXMgYW4gYWRkaXRpb25hbAorbGV2ZWwgb2YgbG9vcGluZy4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gY2hvb3NlIGhvdyBtYW55IG91dHB1dCBwYXNzZXMgdG8gbWFrZQorYW5kIGhvdyB0byBkaXNwbGF5IGVhY2ggcGFzcy4KKworVGhlIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGRpc3BsYXlpbmcgcHJvZ3Jlc3NpdmUgaW1hZ2VzIGlzIHRvIGRvIG9uZSBkaXNwbGF5CitwYXNzIGZvciBlYWNoIHNjYW4gYXBwZWFyaW5nIGluIHRoZSBpbnB1dCBmaWxlLiAgSW4gdGhpcyBjYXNlIHRoZSBvdXRlciBsb29wCitjb25kaXRpb24gaXMgdHlwaWNhbGx5CisgICAgICAgIHdoaWxlICghanBlZ19pbnB1dF9jb21wbGV0ZSgmY2luZm8pKQorYW5kIHRoZSBzdGFydC1vdXRwdXQgY2FsbCBzaG91bGQgcmVhZAorICAgICAgICBqcGVnX3N0YXJ0X291dHB1dCgmY2luZm8sIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyKTsKK1RoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGpwZWdfc3RhcnRfb3V0cHV0KCkgaW5kaWNhdGVzIHdoaWNoIHNjYW4gb2YgdGhlIGlucHV0CitmaWxlIGlzIHRvIGJlIGRpc3BsYXllZDsgdGhlIHNjYW5zIGFyZSBudW1iZXJlZCBzdGFydGluZyBhdCAxIGZvciB0aGlzCitwdXJwb3NlLiAgKFlvdSBjYW4gdXNlIGEgbG9vcCBjb3VudGVyIHN0YXJ0aW5nIGF0IDEgaWYgeW91IGxpa2UsIGJ1dCB1c2luZwordGhlIGxpYnJhcnkncyBpbnB1dCBzY2FuIGNvdW50ZXIgaXMgZWFzaWVyLikgIFRoZSBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgcmVhZHMKK2RhdGEgYXMgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIGVhY2ggcmVxdWVzdGVkIHNjYW4sIGFuZCBqcGVnX2ZpbmlzaF9vdXRwdXQoKQorYWR2YW5jZXMgdG8gdGhlIG5leHQgc2NhbiBvciBlbmQtb2YtaW1hZ2UgbWFya2VyIChoZW5jZSBpbnB1dF9zY2FuX251bWJlcgord2lsbCBiZSBpbmNyZW1lbnRlZCBieSB0aGUgdGltZSBjb250cm9sIGFycml2ZXMgYmFjayBhdCBqcGVnX3N0YXJ0X291dHB1dCgpKS4KK1dpdGggdGhpcyB0ZWNobmlxdWUsIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9ubHkgYXMgbmVlZGVkLCBhbmQKK2lucHV0IGFuZCBvdXRwdXQgcHJvY2Vzc2luZyBydW4gaW4gbG9ja3N0ZXAuCisKK0FmdGVyIHJlYWRpbmcgdGhlIGZpbmFsIHNjYW4gYW5kIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUsIHRoZQorYnVmZmVyZWQgaW1hZ2UgcmVtYWlucyBhdmFpbGFibGU7IGl0IGNhbiBiZSByZWFkIGFkZGl0aW9uYWwgdGltZXMgYnkKK3JlcGVhdGluZyB0aGUganBlZ19zdGFydF9vdXRwdXQoKS9qcGVnX3JlYWRfc2NhbmxpbmVzKCkvanBlZ19maW5pc2hfb3V0cHV0KCkKK3NlcXVlbmNlLiAgRm9yIGV4YW1wbGUsIGEgdXNlZnVsIHRlY2huaXF1ZSBpcyB0byB1c2UgZmFzdCBvbmUtcGFzcyBjb2xvcgorcXVhbnRpemF0aW9uIGZvciBkaXNwbGF5IHBhc3NlcyBtYWRlIHdoaWxlIHRoZSBpbWFnZSBpcyBhcnJpdmluZywgZm9sbG93ZWQgYnkKK2EgZmluYWwgZGlzcGxheSBwYXNzIHVzaW5nIHR3by1wYXNzIHF1YW50aXphdGlvbiBmb3IgaGlnaGVzdCBxdWFsaXR5LiAgVGhpcworaXMgZG9uZSBieSBjaGFuZ2luZyB0aGUgbGlicmFyeSBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgZmluYWwgb3V0cHV0IHBhc3MuCitDaGFuZ2luZyBwYXJhbWV0ZXJzIGJldHdlZW4gcGFzc2VzIGlzIGRpc2N1c3NlZCBpbiBkZXRhaWwgYmVsb3cuCisKK0luIGdlbmVyYWwgdGhlIGxhc3Qgc2NhbiBvZiBhIHByb2dyZXNzaXZlIGZpbGUgY2Fubm90IGJlIHJlY29nbml6ZWQgYXMgc3VjaAordW50aWwgYWZ0ZXIgaXQgaXMgcmVhZCwgc28gYSBwb3N0LWlucHV0IGRpc3BsYXkgcGFzcyBpcyB0aGUgYmVzdCBhcHByb2FjaCBpZgoreW91IHdhbnQgc3BlY2lhbCBwcm9jZXNzaW5nIGluIHRoZSBmaW5hbCBwYXNzLgorCitXaGVuIGRvbmUgd2l0aCB0aGUgaW1hZ2UsIGJlIHN1cmUgdG8gY2FsbCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkgdG8gcmVsZWFzZQordGhlIGJ1ZmZlcmVkIGltYWdlIChvciBqdXN0IHVzZSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygpKS4KKworSWYgaW5wdXQgZGF0YSBhcnJpdmVzIGZhc3RlciB0aGFuIGl0IGNhbiBiZSBkaXNwbGF5ZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4KK2NhdXNlIHRoZSBsaWJyYXJ5IHRvIGRlY29kZSBpbnB1dCBkYXRhIGluIGFkdmFuY2Ugb2Ygd2hhdCdzIG5lZWRlZCB0byBwcm9kdWNlCitvdXRwdXQuICBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyB0aGUgcm91dGluZSBqcGVnX2NvbnN1bWVfaW5wdXQoKS4KK1RoZSByZXR1cm4gdmFsdWUgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIEpQRUdfUkVBQ0hFRF9TT1M6ICAgIHJlYWNoZWQgYW4gU09TIG1hcmtlciAodGhlIHN0YXJ0IG9mIGEgbmV3IHNjYW4pCisgICAgICAgIEpQRUdfUkVBQ0hFRF9FT0k6ICAgIHJlYWNoZWQgdGhlIEVPSSBtYXJrZXIgKGVuZCBvZiBpbWFnZSkKKyAgICAgICAgSlBFR19ST1dfQ09NUExFVEVEOiAgY29tcGxldGVkIHJlYWRpbmcgb25lIE1DVSByb3cgb2YgY29tcHJlc3NlZCBkYXRhCisgICAgICAgIEpQRUdfU0NBTl9DT01QTEVURUQ6IGNvbXBsZXRlZCByZWFkaW5nIGxhc3QgTUNVIHJvdyBvZiBjdXJyZW50IHNjYW4KKyAgICAgICAgSlBFR19TVVNQRU5ERUQ6ICAgICAgc3VzcGVuZGVkIGJlZm9yZSBjb21wbGV0aW5nIGFueSBvZiB0aGUgYWJvdmUKKyhKUEVHX1NVU1BFTkRFRCBjYW4gb2NjdXIgb25seSBpZiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4pICBUaGlzCityb3V0aW5lIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBKUEVHIG9iamVjdC4gIEl0CityZWFkcyBzb21lIGFkZGl0aW9uYWwgZGF0YSBhbmQgcmV0dXJucyB3aGVuIG9uZSBvZiB0aGUgaW5kaWNhdGVkIHNpZ25pZmljYW50CitldmVudHMgb2NjdXJzLiAgKElmIGNhbGxlZCBhZnRlciB0aGUgRU9JIG1hcmtlciBpcyByZWFjaGVkLCBpdCB3aWxsCitpbW1lZGlhdGVseSByZXR1cm4gSlBFR19SRUFDSEVEX0VPSSB3aXRob3V0IGF0dGVtcHRpbmcgdG8gcmVhZCBtb3JlIGRhdGEuKQorCitUaGUgbGlicmFyeSdzIG91dHB1dCBwcm9jZXNzaW5nIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIGpwZWdfY29uc3VtZV9pbnB1dCgpCit3aGVuZXZlciB0aGUgb3V0cHV0IHByb2Nlc3Npbmcgb3ZlcnRha2VzIHRoZSBpbnB1dDsgdGh1cywgc2ltcGxlIGxvY2tzdGVwCitkaXNwbGF5IHJlcXVpcmVzIG5vIGRpcmVjdCBjYWxscyB0byBqcGVnX2NvbnN1bWVfaW5wdXQoKS4gIEJ1dCBieSBhZGRpbmcKK2NhbGxzIHRvIGpwZWdfY29uc3VtZV9pbnB1dCgpLCB5b3UgY2FuIGFic29yYiBkYXRhIGluIGFkdmFuY2Ugb2Ygd2hhdCBpcworYmVpbmcgZGlzcGxheWVkLiAgVGhpcyBoYXMgdHdvIGJlbmVmaXRzOgorICAqIFlvdSBjYW4gbGltaXQgYnVpbGR1cCBvZiB1bnByb2Nlc3NlZCBkYXRhIGluIHlvdXIgaW5wdXQgYnVmZmVyLgorICAqIFlvdSBjYW4gZWxpbWluYXRlIGV4dHJhIGRpc3BsYXkgcGFzc2VzIGJ5IHBheWluZyBhdHRlbnRpb24gdG8gdGhlCisgICAgc3RhdGUgb2YgdGhlIGxpYnJhcnkncyBpbnB1dCBwcm9jZXNzaW5nLgorCitUaGUgZmlyc3Qgb2YgdGhlc2UgYmVuZWZpdHMgb25seSByZXF1aXJlcyBpbnRlcnNwZXJzaW5nIGNhbGxzIHRvCitqcGVnX2NvbnN1bWVfaW5wdXQoKSB3aXRoIHlvdXIgZGlzcGxheSBvcGVyYXRpb25zIGFuZCBhbnkgb3RoZXIgcHJvY2Vzc2luZworeW91IG1heSBiZSBkb2luZy4gIFRvIGF2b2lkIHdhc3RpbmcgY3ljbGVzIGR1ZSB0byBiYWNrdHJhY2tpbmcsIGl0J3MgYmVzdCB0bworY2FsbCBqcGVnX2NvbnN1bWVfaW5wdXQoKSBvbmx5IGFmdGVyIGEgaHVuZHJlZCBvciBzbyBuZXcgYnl0ZXMgaGF2ZSBhcnJpdmVkLgorVGhpcyBpcyBkaXNjdXNzZWQgZnVydGhlciB1bmRlciAiSS9PIHN1c3BlbnNpb24iLCBhYm92ZS4gIChOb3RlOiB0aGUgSlBFRworbGlicmFyeSBjdXJyZW50bHkgaXMgbm90IHRocmVhZC1zYWZlLiAgWW91IG11c3Qgbm90IGNhbGwganBlZ19jb25zdW1lX2lucHV0KCkKK2Zyb20gb25lIHRocmVhZCBvZiBjb250cm9sIGlmIGEgZGlmZmVyZW50IGxpYnJhcnkgcm91dGluZSBpcyB3b3JraW5nIG9uIHRoZQorc2FtZSBKUEVHIG9iamVjdCBpbiBhbm90aGVyIHRocmVhZC4pCisKK1doZW4gaW5wdXQgYXJyaXZlcyBmYXN0IGVub3VnaCB0aGF0IG1vcmUgdGhhbiBvbmUgbmV3IHNjYW4gaXMgYXZhaWxhYmxlCitiZWZvcmUgeW91IHN0YXJ0IGEgbmV3IG91dHB1dCBwYXNzLCB5b3UgbWF5IGFzIHdlbGwgc2tpcCB0aGUgb3V0cHV0IHBhc3MKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbXBsZXRlZCBzY2FuLiAgVGhpcyBvY2N1cnMgZm9yIGZyZWUgaWYgeW91IHBhc3MKK2NpbmZvLmlucHV0X3NjYW5fbnVtYmVyIGFzIHRoZSB0YXJnZXQgc2NhbiBudW1iZXIgdG8ganBlZ19zdGFydF9vdXRwdXQoKS4KK1RoZSBpbnB1dF9zY2FuX251bWJlciBmaWVsZCBpcyBzaW1wbHkgdGhlIGluZGV4IG9mIHRoZSBzY2FuIGN1cnJlbnRseSBiZWluZworY29uc3VtZWQgYnkgdGhlIGlucHV0IHByb2Nlc3Nvci4gIFlvdSBjYW4gZW5zdXJlIHRoYXQgdGhpcyBpcyB1cC10by1kYXRlIGJ5CitlbXB0eWluZyB0aGUgaW5wdXQgYnVmZmVyIGp1c3QgYmVmb3JlIGNhbGxpbmcganBlZ19zdGFydF9vdXRwdXQoKTogY2FsbAoranBlZ19jb25zdW1lX2lucHV0KCkgcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIEpQRUdfU1VTUEVOREVEIG9yCitKUEVHX1JFQUNIRURfRU9JLgorCitUaGUgdGFyZ2V0IHNjYW4gbnVtYmVyIHBhc3NlZCB0byBqcGVnX3N0YXJ0X291dHB1dCgpIGlzIHNhdmVkIGluIHRoZQorY2luZm8ub3V0cHV0X3NjYW5fbnVtYmVyIGZpZWxkLiAgVGhlIGxpYnJhcnkncyBvdXRwdXQgcHJvY2Vzc2luZyBjYWxscworanBlZ19jb25zdW1lX2lucHV0KCkgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgaW5wdXQgc2NhbiBudW1iZXIgYW5kIHJvdyB3aXRoaW4KK3RoYXQgc2NhbiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgb3V0cHV0IHNjYW4gbnVtYmVyIGFuZCByb3cuCitUaHVzLCBpbnB1dCBwcm9jZXNzaW5nIGNhbiAiZ2V0IGFoZWFkIiBvZiB0aGUgb3V0cHV0IHByb2Nlc3NpbmcgYnV0IGlzIG5vdAorYWxsb3dlZCB0byAiZmFsbCBiZWhpbmQiLiAgWW91IGNhbiBhY2hpZXZlIHNldmVyYWwgZGlmZmVyZW50IGVmZmVjdHMgYnkKK21hbmlwdWxhdGluZyB0aGlzIGludGVybG9jayBydWxlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBwYXNzIGEgdGFyZ2V0IHNjYW4KK251bWJlciBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW5wdXQgc2NhbiBudW1iZXIsIHRoZSBvdXRwdXQgcHJvY2Vzc29yIHdpbGwKK3dhaXQgdW50aWwgdGhhdCBzY2FuIHN0YXJ0cyB0byBhcnJpdmUgYmVmb3JlIHByb2R1Y2luZyBhbnkgb3V0cHV0LiAgKFRvIGF2b2lkCithbiBpbmZpbml0ZSBsb29wLCB0aGUgdGFyZ2V0IHNjYW4gbnVtYmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQgdG8gdGhlIGxhc3QKK3NjYW4gbnVtYmVyIHdoZW4gdGhlIGVuZCBvZiBpbWFnZSBpcyByZWFjaGVkLiAgVGh1cywgaWYgeW91IHNwZWNpZnkgYSBsYXJnZQordGFyZ2V0IHNjYW4gbnVtYmVyLCB0aGUgbGlicmFyeSB3aWxsIGp1c3QgYWJzb3JiIHRoZSBlbnRpcmUgaW5wdXQgZmlsZSBhbmQKK3RoZW4gcGVyZm9ybSBhbiBvdXRwdXQgcGFzcy4gIFRoaXMgaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgd2hhdAoranBlZ19zdGFydF9kZWNvbXByZXNzKCkgZG9lcyB3aGVuIHlvdSBkb24ndCBzZWxlY3QgYnVmZmVyZWQtaW1hZ2UgbW9kZS4pCitXaGVuIHlvdSBwYXNzIGEgdGFyZ2V0IHNjYW4gbnVtYmVyIGVxdWFsIHRvIHRoZSBjdXJyZW50IGlucHV0IHNjYW4gbnVtYmVyLAordGhlIGltYWdlIGlzIGRpc3BsYXllZCBubyBmYXN0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnB1dCBzY2FuIGFycml2ZXMuICBUaGUKK2ZpbmFsIHBvc3NpYmlsaXR5IGlzIHRvIHBhc3MgYSB0YXJnZXQgc2NhbiBudW1iZXIgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGlucHV0CitzY2FuIG51bWJlcjsgdGhpcyBkaXNhYmxlcyB0aGUgaW5wdXQvb3V0cHV0IGludGVybG9jayBhbmQgY2F1c2VzIHRoZSBvdXRwdXQKK3Byb2Nlc3NvciB0byBzaW1wbHkgZGlzcGxheSB3aGF0ZXZlciBpdCBmaW5kcyBpbiB0aGUgaW1hZ2UgYnVmZmVyLCB3aXRob3V0Cit3YWl0aW5nIGZvciBpbnB1dC4gIChIb3dldmVyLCB0aGUgbGlicmFyeSB3aWxsIG5vdCBhY2NlcHQgYSB0YXJnZXQgc2NhbgorbnVtYmVyIGxlc3MgdGhhbiBvbmUsIHNvIHlvdSBjYW4ndCBhdm9pZCB3YWl0aW5nIGZvciB0aGUgZmlyc3Qgc2Nhbi4pCisKK1doZW4gZGF0YSBpcyBhcnJpdmluZyBmYXN0ZXIgdGhhbiB0aGUgb3V0cHV0IGRpc3BsYXkgcHJvY2Vzc2luZyBjYW4gYWR2YW5jZQordGhyb3VnaCB0aGUgaW1hZ2UsIGpwZWdfY29uc3VtZV9pbnB1dCgpIHdpbGwgc3RvcmUgZGF0YSBpbnRvIHRoZSBidWZmZXJlZAoraW1hZ2UgYmV5b25kIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgb3V0cHV0IHByb2Nlc3NpbmcgaXMgcmVhZGluZyBkYXRhIG91dAorYWdhaW4uICBJZiB0aGUgaW5wdXQgYXJyaXZlcyBmYXN0IGVub3VnaCwgaXQgbWF5ICJ3cmFwIGFyb3VuZCIgdGhlIGJ1ZmZlciB0bwordGhlIHBvaW50IHdoZXJlIHRoZSBpbnB1dCBpcyBtb3JlIHRoYW4gb25lIHdob2xlIHNjYW4gYWhlYWQgb2YgdGhlIG91dHB1dC4KK0lmIHRoZSBvdXRwdXQgcHJvY2Vzc2luZyBzaW1wbHkgcHJvY2VlZHMgdGhyb3VnaCBpdHMgZGlzcGxheSBwYXNzIHdpdGhvdXQKK3BheWluZyBhdHRlbnRpb24gdG8gdGhlIGlucHV0LCB0aGUgZWZmZWN0IHNlZW4gb24tc2NyZWVuIGlzIHRoYXQgdGhlIGxvd2VyCitwYXJ0IG9mIHRoZSBpbWFnZSBpcyBvbmUgb3IgbW9yZSBzY2FucyBiZXR0ZXIgaW4gcXVhbGl0eSB0aGFuIHRoZSB1cHBlciBwYXJ0LgorVGhlbiwgd2hlbiB0aGUgbmV4dCBvdXRwdXQgc2NhbiBpcyBzdGFydGVkLCB5b3UgaGF2ZSBhIGNob2ljZSBvZiB3aGF0IHRhcmdldAorc2NhbiBudW1iZXIgdG8gdXNlLiAgVGhlIHJlY29tbWVuZGVkIGNob2ljZSBpcyB0byB1c2UgdGhlIGN1cnJlbnQgaW5wdXQgc2NhbgorbnVtYmVyIGF0IHRoYXQgdGltZSwgd2hpY2ggaW1wbGllcyB0aGF0IHlvdSd2ZSBza2lwcGVkIHRoZSBvdXRwdXQgc2NhbnMKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHNjYW5zIHRoYXQgd2VyZSBjb21wbGV0ZWQgd2hpbGUgeW91IHByb2Nlc3NlZCB0aGUKK3ByZXZpb3VzIG91dHB1dCBzY2FuLiAgSW4gdGhpcyB3YXksIHRoZSBkZWNvZGVyIGF1dG9tYXRpY2FsbHkgYWRhcHRzIGl0cworc3BlZWQgdG8gdGhlIGFycml2aW5nIGRhdGEsIGJ5IHNraXBwaW5nIG91dHB1dCBzY2FucyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB1cAord2l0aCB0aGUgYXJyaXZpbmcgZGF0YS4KKworV2hlbiB1c2luZyB0aGlzIHN0cmF0ZWd5LCB5b3UnbGwgd2FudCB0byBiZSBzdXJlIHRoYXQgeW91IHBlcmZvcm0gYSBmaW5hbAorb3V0cHV0IHBhc3MgYWZ0ZXIgcmVjZWl2aW5nIGFsbCB0aGUgZGF0YTsgb3RoZXJ3aXNlIHlvdXIgbGFzdCBkaXNwbGF5IG1heSBub3QKK2JlIGZ1bGwgcXVhbGl0eSBhY3Jvc3MgdGhlIHdob2xlIHNjcmVlbi4gIFNvIHRoZSByaWdodCBvdXRlciBsb29wIGxvZ2ljIGlzCitzb21ldGhpbmcgbGlrZSB0aGlzOgorICAgICAgICBkbyB7CisgICAgICAgICAgICBhYnNvcmIgYW55IHdhaXRpbmcgaW5wdXQgYnkgY2FsbGluZyBqcGVnX2NvbnN1bWVfaW5wdXQoKQorICAgICAgICAgICAgZmluYWxfcGFzcyA9IGpwZWdfaW5wdXRfY29tcGxldGUoJmNpbmZvKTsKKyAgICAgICAgICAgIGFkanVzdCBvdXRwdXQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGlmIHJlcXVpcmVkCisgICAgICAgICAgICBqcGVnX3N0YXJ0X291dHB1dCgmY2luZm8sIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyKTsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAganBlZ19maW5pc2hfb3V0cHV0KCkKKyAgICAgICAgfSB3aGlsZSAoIWZpbmFsX3Bhc3MpOworcmF0aGVyIHRoYW4gcXVpdHRpbmcgYXMgc29vbiBhcyBqcGVnX2lucHV0X2NvbXBsZXRlKCkgcmV0dXJucyBUUlVFLiAgVGhpcworYXJyYW5nZW1lbnQgbWFrZXMgaXQgc2ltcGxlIHRvIHVzZSBoaWdoZXItcXVhbGl0eSBkZWNvZGluZyBwYXJhbWV0ZXJzCitmb3IgdGhlIGZpbmFsIHBhc3MuICBCdXQgaWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHNwZWNpYWwgcGFyYW1ldGVycyBmb3IKK3RoZSBmaW5hbCBwYXNzLCB0aGUgcmlnaHQgbG9vcCBsb2dpYyBpcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGFic29yYiBhbnkgd2FpdGluZyBpbnB1dCBieSBjYWxsaW5nIGpwZWdfY29uc3VtZV9pbnB1dCgpCisgICAgICAgICAgICBqcGVnX3N0YXJ0X291dHB1dCgmY2luZm8sIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyKTsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAganBlZ19maW5pc2hfb3V0cHV0KCkKKyAgICAgICAgICAgIGlmIChqcGVnX2lucHV0X2NvbXBsZXRlKCZjaW5mbykgJiYKKyAgICAgICAgICAgICAgICBjaW5mby5pbnB1dF9zY2FuX251bWJlciA9PSBjaW5mby5vdXRwdXRfc2Nhbl9udW1iZXIpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CitJbiB0aGlzIGNhc2UgeW91IGRvbid0IG5lZWQgdG8ga25vdyBpbiBhZHZhbmNlIHdoZXRoZXIgYW4gb3V0cHV0IHBhc3MgaXMgdG8KK2JlIHRoZSBsYXN0IG9uZSwgc28gaXQncyBub3QgbmVjZXNzYXJ5IHRvIGhhdmUgcmVhY2hlZCBFT0YgYmVmb3JlIHN0YXJ0aW5nCit0aGUgZmluYWwgb3V0cHV0IHBhc3M7IHJhdGhlciwgd2hhdCB5b3Ugd2FudCB0byB0ZXN0IGlzIHdoZXRoZXIgdGhlIG91dHB1dAorcGFzcyB3YXMgcGVyZm9ybWVkIGluIHN5bmMgd2l0aCB0aGUgZmluYWwgaW5wdXQgc2Nhbi4gIFRoaXMgZm9ybSBvZiB0aGUgbG9vcAord2lsbCBhdm9pZCBhbiBleHRyYSBvdXRwdXQgcGFzcyB3aGVuZXZlciB0aGUgZGVjb2RlciBpcyBhYmxlIChvciBuZWFybHkgYWJsZSkKK3RvIGtlZXAgdXAgd2l0aCB0aGUgaW5jb21pbmcgZGF0YS4KKworV2hlbiB0aGUgZGF0YSB0cmFuc21pc3Npb24gc3BlZWQgaXMgaGlnaCwgeW91IG1pZ2h0IGJlZ2luIGEgZGlzcGxheSBwYXNzLAordGhlbiBmaW5kIHRoYXQgbXVjaCBvciBhbGwgb2YgdGhlIGZpbGUgaGFzIGFycml2ZWQgYmVmb3JlIHlvdSBjYW4gY29tcGxldGUKK3RoZSBwYXNzLiAgKFlvdSBjYW4gZGV0ZWN0IHRoaXMgYnkgbm90aW5nIHRoZSBKUEVHX1JFQUNIRURfRU9JIHJldHVybiBjb2RlCitmcm9tIGpwZWdfY29uc3VtZV9pbnB1dCgpLCBvciBlcXVpdmFsZW50bHkgYnkgdGVzdGluZyBqcGVnX2lucHV0X2NvbXBsZXRlKCkuKQorSW4gdGhpcyBzaXR1YXRpb24geW91IG1heSB3aXNoIHRvIGFib3J0IHRoZSBjdXJyZW50IGRpc3BsYXkgcGFzcyBhbmQgc3RhcnQgYQorbmV3IG9uZSB1c2luZyB0aGUgbmV3bHkgYXJyaXZlZCBpbmZvcm1hdGlvbi4gIFRvIGRvIHNvLCBqdXN0IGNhbGwKK2pwZWdfZmluaXNoX291dHB1dCgpIGFuZCB0aGVuIHN0YXJ0IGEgbmV3IHBhc3Mgd2l0aCBqcGVnX3N0YXJ0X291dHB1dCgpLgorCitBIHZhcmlhbnQgc3RyYXRlZ3kgaXMgdG8gYWJvcnQgYW5kIHJlc3RhcnQgZGlzcGxheSBpZiBtb3JlIHRoYW4gb25lIGNvbXBsZXRlCitzY2FuIGFycml2ZXMgZHVyaW5nIGFuIG91dHB1dCBwYXNzOyB0aGlzIGNhbiBiZSBkZXRlY3RlZCBieSBub3RpbmcKK0pQRUdfUkVBQ0hFRF9TT1MgcmV0dXJucyBhbmQvb3IgZXhhbWluaW5nIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyLiAgVGhpcworaWRlYSBzaG91bGQgYmUgZW1wbG95ZWQgd2l0aCBjYXV0aW9uLCBob3dldmVyLCBzaW5jZSB0aGUgZGlzcGxheSBwcm9jZXNzCittaWdodCBuZXZlciBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UgYmVmb3JlIGJlaW5nIGFib3J0ZWQsIHJlc3VsdGluZworaW4gdGhlIGxvd2VyIHBhcnQgb2YgdGhlIHNjcmVlbiBiZWluZyBzZXZlcmFsIHBhc3NlcyB3b3JzZSB0aGFuIHRoZSB1cHBlci4KK0luIG1vc3QgY2FzZXMgaXQncyBwcm9iYWJseSBiZXN0IHRvIGFib3J0IGFuIG91dHB1dCBwYXNzIG9ubHkgaWYgdGhlIHdob2xlCitmaWxlIGhhcyBhcnJpdmVkIGFuZCB5b3Ugd2FudCB0byBiZWdpbiB0aGUgZmluYWwgb3V0cHV0IHBhc3MgaW1tZWRpYXRlbHkuCisKK1doZW4gcmVjZWl2aW5nIGRhdGEgYWNyb3NzIGEgY29tbXVuaWNhdGlvbiBsaW5rLCB3ZSByZWNvbW1lbmQgYWx3YXlzIHVzaW5nCit0aGUgY3VycmVudCBpbnB1dCBzY2FuIG51bWJlciBmb3IgdGhlIG91dHB1dCB0YXJnZXQgc2NhbiBudW1iZXI7IGlmIGEKK2hpZ2hlci1xdWFsaXR5IGZpbmFsIHBhc3MgaXMgdG8gYmUgZG9uZSwgaXQgc2hvdWxkIGJlIHN0YXJ0ZWQgKGFib3J0aW5nIGFueQoraW5jb21wbGV0ZSBvdXRwdXQgcGFzcykgYXMgc29vbiBhcyB0aGUgZW5kIG9mIGZpbGUgaXMgcmVjZWl2ZWQuICBIb3dldmVyLAorbWFueSBvdGhlciBzdHJhdGVnaWVzIGFyZSBwb3NzaWJsZS4gIEZvciBleGFtcGxlLCB0aGUgYXBwbGljYXRpb24gY2FuIGV4YW1pbmUKK3RoZSBwYXJhbWV0ZXJzIG9mIHRoZSBjdXJyZW50IGlucHV0IHNjYW4gYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGRpc3BsYXkgaXQgb3IKK25vdC4gIElmIHRoZSBzY2FuIGNvbnRhaW5zIG9ubHkgY2hyb21hIGRhdGEsIG9uZSBtaWdodCBjaG9vc2Ugbm90IHRvIHVzZSBpdAorYXMgdGhlIHRhcmdldCBzY2FuLCBleHBlY3RpbmcgdGhhdCB0aGUgc2NhbiB3aWxsIGJlIHNtYWxsIGFuZCB3aWxsIGFycml2ZQorcXVpY2tseS4gIFRvIHNraXAgdG8gdGhlIG5leHQgc2NhbiwgY2FsbCBqcGVnX2NvbnN1bWVfaW5wdXQoKSB1bnRpbCBpdAorcmV0dXJucyBKUEVHX1JFQUNIRURfU09TIG9yIEpQRUdfUkVBQ0hFRF9FT0kuICBPciBqdXN0IHVzZSB0aGUgbmV4dCBoaWdoZXIKK251bWJlciBhcyB0aGUgdGFyZ2V0IHNjYW4gZm9yIGpwZWdfc3RhcnRfb3V0cHV0KCk7IGJ1dCB0aGF0IG1ldGhvZCBkb2Vzbid0CitsZXQgeW91IGluc3BlY3QgdGhlIG5leHQgc2NhbidzIHBhcmFtZXRlcnMgYmVmb3JlIGRlY2lkaW5nIHRvIGRpc3BsYXkgaXQuCisKKworSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwganBlZ19zdGFydF9kZWNvbXByZXNzKCkgbmV2ZXIgcGVyZm9ybXMgaW5wdXQgYW5kCit0aHVzIG5ldmVyIHN1c3BlbmRzLiAgQW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIGlucHV0IHN1c3BlbnNpb24gd2l0aAorYnVmZmVyZWQtaW1hZ2UgbW9kZSBtdXN0IGJlIHByZXBhcmVkIGZvciBzdXNwZW5zaW9uIHJldHVybnMgZnJvbSB0aGVzZQorcm91dGluZXM6CisqIGpwZWdfc3RhcnRfb3V0cHV0KCkgcGVyZm9ybXMgaW5wdXQgb25seSBpZiB5b3UgcmVxdWVzdCAyLXBhc3MgcXVhbnRpemF0aW9uCisgIGFuZCB0aGUgdGFyZ2V0IHNjYW4gaXNuJ3QgZnVsbHkgcmVhZCB5ZXQuICAoVGhpcyBpcyBkaXNjdXNzZWQgYmVsb3cuKQorKiBqcGVnX3JlYWRfc2NhbmxpbmVzKCksIGFzIGFsd2F5cywgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyB0aGF0IGl0CisgIHdhcyBhYmxlIHRvIHByb2R1Y2UgYmVmb3JlIHN1c3BlbmRpbmcuCisqIGpwZWdfZmluaXNoX291dHB1dCgpIHdpbGwgcmVhZCBhbnkgbWFya2VycyBmb2xsb3dpbmcgdGhlIHRhcmdldCBzY2FuLAorICB1cCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIG9yIHRoZSBTT1MgbWFya2VyIHRoYXQgYmVnaW5zIGFub3RoZXIgc2Nhbi4KKyAgKEJ1dCBpdCByZWFkcyBubyBpbnB1dCBpZiBqcGVnX2NvbnN1bWVfaW5wdXQoKSBoYXMgYWxyZWFkeSByZWFjaGVkIHRoZQorICBlbmQgb2YgdGhlIGZpbGUgb3IgYSBTT1MgbWFya2VyIGJleW9uZCB0aGUgdGFyZ2V0IG91dHB1dCBzY2FuLikKKyoganBlZ19maW5pc2hfZGVjb21wcmVzcygpIHdpbGwgcmVhZCB1bnRpbCB0aGUgZW5kIG9mIGZpbGUsIGFuZCB0aHVzIGNhbgorICBzdXNwZW5kIGlmIHRoZSBlbmQgaGFzbid0IGFscmVhZHkgYmVlbiByZWFjaGVkIChhcyBjYW4gYmUgdGVzdGVkIGJ5CisgIGNhbGxpbmcganBlZ19pbnB1dF9jb21wbGV0ZSgpKS4KK2pwZWdfc3RhcnRfb3V0cHV0KCksIGpwZWdfZmluaXNoX291dHB1dCgpLCBhbmQganBlZ19maW5pc2hfZGVjb21wcmVzcygpCithbGwgcmV0dXJuIFRSVUUgaWYgdGhleSBjb21wbGV0ZWQgdGhlaXIgdGFza3MsIEZBTFNFIGlmIHRoZXkgaGFkIHRvIHN1c3BlbmQuCitJbiB0aGUgZXZlbnQgb2YgYSBGQUxTRSByZXR1cm4sIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGxvYWQgbW9yZSBpbnB1dCBkYXRhCithbmQgcmVwZWF0IHRoZSBjYWxsLiAgQXBwbGljYXRpb25zIHRoYXQgdXNlIG5vbi1zdXNwZW5kaW5nIGRhdGEgc291cmNlcyBuZWVkCitub3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlc2UgdGhyZWUgcm91dGluZXMuCisKKworSXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIGRlY29kaW5nIHBhcmFtZXRlcnMgYmV0d2VlbiBvdXRwdXQgcGFzc2VzIGluIHRoZQorYnVmZmVyZWQtaW1hZ2UgbW9kZS4gIFRoZSBkZWNvZGVyIGxpYnJhcnkgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgdmVyeQorbGltaXRlZCBjaGFuZ2VzIG9mIHBhcmFtZXRlcnMuICBPTkxZIFRIRSBGT0xMT1dJTkcgcGFyYW1ldGVyIGNoYW5nZXMgYXJlCithbGxvd2VkIGFmdGVyIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpIGlzIGNhbGxlZDoKKyogZGN0X21ldGhvZCBjYW4gYmUgY2hhbmdlZCBiZWZvcmUgZWFjaCBjYWxsIHRvIGpwZWdfc3RhcnRfb3V0cHV0KCkuCisgIEZvciBleGFtcGxlLCBvbmUgY291bGQgdXNlIGEgZmFzdCBEQ1QgbWV0aG9kIGZvciBlYXJseSBzY2FucywgY2hhbmdpbmcKKyAgdG8gYSBoaWdoZXIgcXVhbGl0eSBtZXRob2QgZm9yIHRoZSBmaW5hbCBzY2FuLgorKiBkaXRoZXJfbW9kZSBjYW4gYmUgY2hhbmdlZCBiZWZvcmUgZWFjaCBjYWxsIHRvIGpwZWdfc3RhcnRfb3V0cHV0KCk7CisgIG9mIGNvdXJzZSB0aGlzIGhhcyBubyBpbXBhY3QgaWYgbm90IHVzaW5nIGNvbG9yIHF1YW50aXphdGlvbi4gIFR5cGljYWxseQorICBvbmUgd291bGQgdXNlIG9yZGVyZWQgZGl0aGVyIGZvciBpbml0aWFsIHBhc3NlcywgdGhlbiBzd2l0Y2ggdG8KKyAgRmxveWQtU3RlaW5iZXJnIGRpdGhlciBmb3IgdGhlIGZpbmFsIHBhc3MuICBDYXV0aW9uOiBjaGFuZ2luZyBkaXRoZXIgbW9kZQorICBjYW4gY2F1c2UgbW9yZSBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBsaWJyYXJ5LiAgQWx0aG91Z2ggdGhlIGFtb3VudAorICBvZiBtZW1vcnkgaW52b2x2ZWQgaXMgbm90IGxhcmdlIChhIHNjYW5saW5lIG9yIHNvKSwgaXQgbWF5IGNhdXNlIHRoZQorICBpbml0aWFsIG1heF9tZW1vcnlfdG9fdXNlIHNwZWNpZmljYXRpb24gdG8gYmUgZXhjZWVkZWQsIHdoaWNoIGluIHRoZSB3b3JzdAorICBjYXNlIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtb3J5IGZhaWx1cmUuCisqIGRvX2Jsb2NrX3Ntb290aGluZyBjYW4gYmUgY2hhbmdlZCBiZWZvcmUgZWFjaCBjYWxsIHRvIGpwZWdfc3RhcnRfb3V0cHV0KCkuCisgIFRoaXMgc2V0dGluZyBpcyByZWxldmFudCBvbmx5IHdoZW4gZGVjb2RpbmcgYSBwcm9ncmVzc2l2ZSBKUEVHIGltYWdlLgorICBEdXJpbmcgdGhlIGZpcnN0IERDLW9ubHkgc2NhbiwgYmxvY2sgc21vb3RoaW5nIHByb3ZpZGVzIGEgdmVyeSAiZnV6enkiIGxvb2sKKyAgaW5zdGVhZCBvZiB0aGUgdmVyeSAiYmxvY2t5IiBsb29rIHNlZW4gd2l0aG91dCBpdDsgd2hpY2ggaXMgYmV0dGVyIHNlZW1zIGEKKyAgbWF0dGVyIG9mIHBlcnNvbmFsIHRhc3RlLiAgQnV0IGJsb2NrIHNtb290aGluZyBpcyBuZWFybHkgYWx3YXlzIGEgd2luCisgIGR1cmluZyBsYXRlciBzdGFnZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWNvZGluZyBhIHN1Y2Nlc3NpdmUtYXBwcm94aW1hdGlvbgorICBpbWFnZTogc21vb3RoaW5nIGhlbHBzIHRvIGhpZGUgdGhlIHNsaWdodCBibG9ja2luZXNzIHRoYXQgb3RoZXJ3aXNlIHNob3dzCisgIHVwIG9uIHNtb290aCBncmFkaWVudHMgdW50aWwgdGhlIGxvd2VzdCBjb2VmZmljaWVudCBiaXRzIGFyZSBzZW50LgorKiBDb2xvciBxdWFudGl6YXRpb24gbW9kZSBjYW4gYmUgY2hhbmdlZCB1bmRlciB0aGUgcnVsZXMgZGVzY3JpYmVkIGJlbG93LgorICBZb3UgKmNhbm5vdCogY2hhbmdlIGJldHdlZW4gZnVsbC1jb2xvciBhbmQgcXVhbnRpemVkIG91dHB1dCAoYmVjYXVzZSB0aGF0CisgIHdvdWxkIGFsdGVyIHRoZSByZXF1aXJlZCBJL08gYnVmZmVyIHNpemVzKSwgYnV0IHlvdSBjYW4gY2hhbmdlIHdoaWNoCisgIHF1YW50aXphdGlvbiBtZXRob2QgaXMgdXNlZC4KKworV2hlbiBnZW5lcmF0aW5nIGNvbG9yLXF1YW50aXplZCBvdXRwdXQsIGNoYW5naW5nIHF1YW50aXphdGlvbiBtZXRob2QgaXMgYQordmVyeSB1c2VmdWwgd2F5IG9mIHN3aXRjaGluZyBiZXR3ZWVuIGhpZ2gtc3BlZWQgYW5kIGhpZ2gtcXVhbGl0eSBkaXNwbGF5LgorVGhlIGxpYnJhcnkgYWxsb3dzIHlvdSB0byBjaGFuZ2UgYW1vbmcgaXRzIHRocmVlIHF1YW50aXphdGlvbiBtZXRob2RzOgorMS4gU2luZ2xlLXBhc3MgcXVhbnRpemF0aW9uIHRvIGEgZml4ZWQgY29sb3IgY3ViZS4KKyAgIFNlbGVjdGVkIGJ5IGNpbmZvLnR3b19wYXNzX3F1YW50aXplID0gRkFMU0UgYW5kIGNpbmZvLmNvbG9ybWFwID0gTlVMTC4KKzIuIFNpbmdsZS1wYXNzIHF1YW50aXphdGlvbiB0byBhbiBhcHBsaWNhdGlvbi1zdXBwbGllZCBjb2xvcm1hcC4KKyAgIFNlbGVjdGVkIGJ5IHNldHRpbmcgY2luZm8uY29sb3JtYXAgdG8gcG9pbnQgdG8gdGhlIGNvbG9ybWFwICh0aGUgdmFsdWUgb2YKKyAgIHR3b19wYXNzX3F1YW50aXplIGlzIGlnbm9yZWQpOyBhbHNvIHNldCBjaW5mby5hY3R1YWxfbnVtYmVyX29mX2NvbG9ycy4KKzMuIFR3by1wYXNzIHF1YW50aXphdGlvbiB0byBhIGNvbG9ybWFwIGNob3NlbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBpbWFnZS4KKyAgIFNlbGVjdGVkIGJ5IGNpbmZvLnR3b19wYXNzX3F1YW50aXplID0gVFJVRSBhbmQgY2luZm8uY29sb3JtYXAgPSBOVUxMLgorICAgKFRoaXMgaXMgdGhlIGRlZmF1bHQgc2V0dGluZyBzZWxlY3RlZCBieSBqcGVnX3JlYWRfaGVhZGVyLCBidXQgaXQgaXMKKyAgIHByb2JhYmx5IE5PVCB3aGF0IHlvdSB3YW50IGZvciB0aGUgZmlyc3QgcGFzcyBvZiBwcm9ncmVzc2l2ZSBkaXNwbGF5ISkKK1RoZXNlIG1ldGhvZHMgb2ZmZXIgc3VjY2Vzc2l2ZWx5IGJldHRlciBxdWFsaXR5IGFuZCBsZXNzZXIgc3BlZWQuICBIb3dldmVyLAorb25seSB0aGUgZmlyc3QgbWV0aG9kIGlzIGF2YWlsYWJsZSBmb3IgcXVhbnRpemluZyBpbiBub24tUkdCIGNvbG9yIHNwYWNlcy4KKworSU1QT1JUQU5UOiBiZWNhdXNlIHRoZSBkaWZmZXJlbnQgcXVhbnRpemVyIG1ldGhvZHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudAord29ya2luZy1zdG9yYWdlIHJlcXVpcmVtZW50cywgdGhlIGxpYnJhcnkgcmVxdWlyZXMgeW91IHRvIGluZGljYXRlIHdoaWNoCitvbmUocykgeW91IGludGVuZCB0byB1c2UgYmVmb3JlIHlvdSBjYWxsIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLiAgKElmIHdlIGRpZAorbm90IHJlcXVpcmUgdGhpcywgdGhlIG1heF9tZW1vcnlfdG9fdXNlIHNldHRpbmcgd291bGQgYmUgYSBjb21wbGV0ZSBmaWN0aW9uLikKK1lvdSBkbyB0aGlzIGJ5IHNldHRpbmcgb25lIG9yIG1vcmUgb2YgdGhlc2UgdGhyZWUgY2luZm8gZmllbGRzIHRvIFRSVUU6CisgICAgICAgIGVuYWJsZV8xcGFzc19xdWFudCAgICAgICAgICAgICAgRml4ZWQgY29sb3IgY3ViZSBjb2xvcm1hcAorICAgICAgICBlbmFibGVfZXh0ZXJuYWxfcXVhbnQgICAgICAgICAgIEV4dGVybmFsbHktc3VwcGxpZWQgY29sb3JtYXAKKyAgICAgICAgZW5hYmxlXzJwYXNzX3F1YW50ICAgICAgICAgICAgICBUd28tcGFzcyBjdXN0b20gY29sb3JtYXAKK0FsbCB0aHJlZSBhcmUgaW5pdGlhbGl6ZWQgRkFMU0UgYnkganBlZ19yZWFkX2hlYWRlcigpLiAgQnV0CitqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKSBhdXRvbWF0aWNhbGx5IHNldHMgVFJVRSB0aGUgb25lIHNlbGVjdGVkIGJ5IHRoZQorY3VycmVudCB0d29fcGFzc19xdWFudGl6ZSBhbmQgY29sb3JtYXAgc2V0dGluZ3MsIHNvIHlvdSBvbmx5IG5lZWQgdG8gc2V0IHRoZQorZW5hYmxlIGZsYWdzIGZvciBhbnkgb3RoZXIgcXVhbnRpemF0aW9uIG1ldGhvZHMgeW91IHBsYW4gdG8gY2hhbmdlIHRvIGxhdGVyLgorCitBZnRlciBzZXR0aW5nIHRoZSBlbmFibGUgZmxhZ3MgY29ycmVjdGx5IGF0IGpwZWdfc3RhcnRfZGVjb21wcmVzcygpIHRpbWUsIHlvdQorY2FuIGNoYW5nZSB0byBhbnkgZW5hYmxlZCBxdWFudGl6YXRpb24gbWV0aG9kIGJ5IHNldHRpbmcgdHdvX3Bhc3NfcXVhbnRpemUKK2FuZCBjb2xvcm1hcCBwcm9wZXJseSBqdXN0IGJlZm9yZSBjYWxsaW5nIGpwZWdfc3RhcnRfb3V0cHV0KCkuICBUaGUgZm9sbG93aW5nCitzcGVjaWFsIHJ1bGVzIGFwcGx5OgorMS4gWW91IG11c3QgZXhwbGljaXRseSBzZXQgY2luZm8uY29sb3JtYXAgdG8gTlVMTCB3aGVuIHN3aXRjaGluZyB0byAxLXBhc3MKKyAgIG9yIDItcGFzcyBtb2RlIGZyb20gYSBkaWZmZXJlbnQgbW9kZSwgb3Igd2hlbiB5b3Ugd2FudCB0aGUgMi1wYXNzCisgICBxdWFudGl6ZXIgdG8gYmUgcmUtcnVuIHRvIGdlbmVyYXRlIGEgbmV3IGNvbG9ybWFwLgorMi4gVG8gc3dpdGNoIHRvIGFuIGV4dGVybmFsIGNvbG9ybWFwLCBvciB0byBjaGFuZ2UgdG8gYSBkaWZmZXJlbnQgZXh0ZXJuYWwKKyAgIGNvbG9ybWFwIHRoYW4gd2FzIHVzZWQgb24gdGhlIHByaW9yIHBhc3MsIHlvdSBtdXN0IGNhbGwKKyAgIGpwZWdfbmV3X2NvbG9ybWFwKCkgYWZ0ZXIgc2V0dGluZyBjaW5mby5jb2xvcm1hcC4KK05PVEU6IGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgc2FtZSBjb2xvcm1hcCBhcyB3YXMgdXNlZCBpbiB0aGUgcHJpb3IgcGFzcywKK3lvdSBzaG91bGQgbm90IGRvIGVpdGhlciBvZiB0aGVzZSB0aGluZ3MuICBUaGlzIHdpbGwgc2F2ZSBzb21lIG5vbnRyaXZpYWwKK3N3aXRjaG92ZXIgY29zdHMuCisoVGhlc2UgcmVxdWlyZW1lbnRzIGV4aXN0IGJlY2F1c2UgY2luZm8uY29sb3JtYXAgd2lsbCBhbHdheXMgYmUgbm9uLU5VTEwKK2FmdGVyIGNvbXBsZXRpbmcgYSBwcmlvciBvdXRwdXQgcGFzcywgc2luY2UgYm90aCB0aGUgMS1wYXNzIGFuZCAyLXBhc3MKK3F1YW50aXplcnMgc2V0IGl0IHRvIHBvaW50IHRvIHRoZWlyIG91dHB1dCBjb2xvcm1hcHMuICBUaHVzIHlvdSBoYXZlIHRvCitkbyBvbmUgb2YgdGhlc2UgdHdvIHRoaW5ncyB0byBub3RpZnkgdGhlIGxpYnJhcnkgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQuCitZdXAsIGl0J3MgYSBiaXQga2x1Z3ksIGJ1dCBpdCdzIG5lY2Vzc2FyeSB0byBkbyBpdCB0aGlzIHdheSBmb3IgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5LikKKworTm90ZSB0aGF0IGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUsIHRoZSBsaWJyYXJ5IGdlbmVyYXRlcyBhbnkgcmVxdWVzdGVkIGNvbG9ybWFwCitkdXJpbmcganBlZ19zdGFydF9vdXRwdXQoKSwgbm90IGR1cmluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KKworV2hlbiB1c2luZyB0d28tcGFzcyBxdWFudGl6YXRpb24sIGpwZWdfc3RhcnRfb3V0cHV0KCkgbWFrZXMgYSBwYXNzIG92ZXIgdGhlCitidWZmZXJlZCBpbWFnZSB0byBkZXRlcm1pbmUgdGhlIG9wdGltdW0gY29sb3IgbWFwOyBpdCB0aGVyZWZvcmUgbWF5IHRha2UgYQorc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUsIHdoZXJlYXMgb3JkaW5hcmlseSBpdCBkb2VzIGxpdHRsZSB3b3JrLiAgVGhlCitwcm9ncmVzcyBtb25pdG9yIGhvb2sgaXMgY2FsbGVkIGR1cmluZyB0aGlzIHBhc3MsIGlmIGRlZmluZWQuICBJdCBpcyBhbHNvCitpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGlmIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHNjYW4gbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbgorb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgaW5wdXQgc2NhbiBudW1iZXIsIGpwZWdfc3RhcnRfb3V0cHV0KCkgd2lsbCBhdHRlbXB0Cit0byBjb25zdW1lIGlucHV0IGFzIGl0IG1ha2VzIHRoaXMgcGFzcy4gIElmIHlvdSB1c2UgYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlLAoreW91IG5lZWQgdG8gY2hlY2sgZm9yIGEgRkFMU0UgcmV0dXJuIGZyb20ganBlZ19zdGFydF9vdXRwdXQoKSB1bmRlciB0aGVzZQorY29uZGl0aW9ucy4gIFRoZSBjb21iaW5hdGlvbiBvZiAyLXBhc3MgcXVhbnRpemF0aW9uIGFuZCBhIG5vdC15ZXQtZnVsbHktcmVhZAordGFyZ2V0IHNjYW4gaXMgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCBqcGVnX3N0YXJ0X291dHB1dCgpIHdpbGwgY29uc3VtZSBpbnB1dC4KKworCitBcHBsaWNhdGlvbiBhdXRob3JzIHdobyBzdXBwb3J0IGJ1ZmZlcmVkLWltYWdlIG1vZGUgbWF5IGJlIHRlbXB0ZWQgdG8gdXNlIGl0Citmb3IgYWxsIEpQRUcgaW1hZ2VzLCBldmVuIHNpbmdsZS1zY2FuIG9uZXMuICBUaGlzIHdpbGwgd29yaywgYnV0IGl0IGlzCitpbmVmZmljaWVudDogdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYW4gaW1hZ2Utc2l6ZWQgY29lZmZpY2llbnQgYnVmZmVyIGZvcgorc2luZ2xlLXNjYW4gaW1hZ2VzLiAgUmVxdWVzdGluZyBidWZmZXJlZC1pbWFnZSBtb2RlIGZvciBzdWNoIGFuIGltYWdlIHdhc3RlcworbWVtb3J5LiAgV29yc2UsIGl0IGNhbiBjb3N0IHRpbWUgb24gbGFyZ2UgaW1hZ2VzLCBzaW5jZSB0aGUgYnVmZmVyZWQgZGF0YSBoYXMKK3RvIGJlIHN3YXBwZWQgb3V0IG9yIHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZmlsZS4gIElmIHlvdSBhcmUgY29uY2VybmVkIGFib3V0CittYXhpbXVtIHBlcmZvcm1hbmNlIG9uIGJhc2VsaW5lIEpQRUcgZmlsZXMsIHlvdSBzaG91bGQgdXNlIGJ1ZmZlcmVkLWltYWdlCittb2RlIG9ubHkgd2hlbiB0aGUgaW5jb21pbmcgZmlsZSBhY3R1YWxseSBoYXMgbXVsdGlwbGUgc2NhbnMuICBUaGlzIGNhbiBiZQordGVzdGVkIGJ5IGNhbGxpbmcganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMoKSwgd2hpY2ggd2lsbCByZXR1cm4gYSBjb3JyZWN0CityZXN1bHQgYXQgYW55IHRpbWUgYWZ0ZXIganBlZ19yZWFkX2hlYWRlcigpIGNvbXBsZXRlcy4KKworSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB3aGVuIHlvdSB1c2UganBlZ19jb25zdW1lX2lucHV0KCkgdG8gbGV0IGlucHV0Citwcm9jZXNzaW5nIGdldCBhaGVhZCBvZiBvdXRwdXQgcHJvY2Vzc2luZywgdGhlIHJlc3VsdGluZyBwYXR0ZXJuIG9mIGFjY2VzcyB0bwordGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBpcyBxdWl0ZSBub25zZXF1ZW50aWFsLiAgSXQncyBiZXN0IHRvIHVzZSB0aGUgbWVtb3J5CittYW5hZ2VyIGptZW1ub2JzLmMgaWYgeW91IGNhbiAoaWUsIGlmIHlvdSBoYXZlIGVub3VnaCByZWFsIG9yIHZpcnR1YWwgbWFpbgorbWVtb3J5KS4gIElmIG5vdCwgYXQgbGVhc3QgbWFrZSBzdXJlIHRoYXQgbWF4X21lbW9yeV90b191c2UgaXMgc2V0IGFzIGhpZ2ggYXMKK3Bvc3NpYmxlLiAgSWYgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIgaGFzIHRvIHVzZSBhIHRlbXBvcmFyeSBmaWxlLCB5b3Ugd2lsbAorcHJvYmFibHkgc2VlIGEgbG90IG9mIGRpc2sgdHJhZmZpYyBhbmQgcG9vciBwZXJmb3JtYW5jZS4gIChUaGlzIGNvdWxkIGJlCitpbXByb3ZlZCB3aXRoIGFkZGl0aW9uYWwgd29yayBvbiB0aGUgbWVtb3J5IG1hbmFnZXIsIGJ1dCB3ZSBoYXZlbid0IGdvdHRlbgorYXJvdW5kIHRvIGl0IHlldC4pCisKK0luIHNvbWUgYXBwbGljYXRpb25zIGl0IG1heSBiZSBjb252ZW5pZW50IHRvIHVzZSBqcGVnX2NvbnN1bWVfaW5wdXQoKSBmb3IgYWxsCitpbnB1dCBwcm9jZXNzaW5nLCBpbmNsdWRpbmcgcmVhZGluZyB0aGUgaW5pdGlhbCBtYXJrZXJzOyB0aGF0IGlzLCB5b3UgbWF5Cit3aXNoIHRvIGNhbGwganBlZ19jb25zdW1lX2lucHV0KCkgaW5zdGVhZCBvZiBqcGVnX3JlYWRfaGVhZGVyKCkgZHVyaW5nCitzdGFydHVwLiAgVGhpcyB3b3JrcywgYnV0IG5vdGUgdGhhdCB5b3UgbXVzdCBjaGVjayBmb3IgSlBFR19SRUFDSEVEX1NPUyBhbmQKK0pQRUdfUkVBQ0hFRF9FT0kgcmV0dXJuIGNvZGVzIGFzIHRoZSBlcXVpdmFsZW50IG9mIGpwZWdfcmVhZF9oZWFkZXIncyBjb2Rlcy4KK09uY2UgdGhlIGZpcnN0IFNPUyBtYXJrZXIgaGFzIGJlZW4gcmVhY2hlZCwgeW91IG11c3QgY2FsbAoranBlZ19zdGFydF9kZWNvbXByZXNzKCkgYmVmb3JlIGpwZWdfY29uc3VtZV9pbnB1dCgpIHdpbGwgY29uc3VtZSBtb3JlIGlucHV0OworaXQnbGwganVzdCBrZWVwIHJldHVybmluZyBKUEVHX1JFQUNIRURfU09TIHVudGlsIHlvdSBkby4gIElmIHlvdSByZWFkIGEKK3RhYmxlcy1vbmx5IGZpbGUgdGhpcyB3YXksIGpwZWdfY29uc3VtZV9pbnB1dCgpIHdpbGwgcmV0dXJuIEpQRUdfUkVBQ0hFRF9FT0kKK3dpdGhvdXQgZXZlciByZXR1cm5pbmcgSlBFR19SRUFDSEVEX1NPUzsgYmUgc3VyZSB0byBjaGVjayBmb3IgdGhpcyBjYXNlLgorSWYgdGhpcyBoYXBwZW5zLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgbm90IHJlYWQgYW55IG1vcmUgaW5wdXQgdW50aWwgeW91IGNhbGwKK2pwZWdfYWJvcnQoKSB0byByZXNldCBpdC4gIEl0IGlzIE9LIHRvIGNhbGwganBlZ19jb25zdW1lX2lucHV0KCkgZXZlbiB3aGVuIG5vdAordXNpbmcgYnVmZmVyZWQtaW1hZ2UgbW9kZSwgYnV0IGluIHRoYXQgY2FzZSBpdCdzIGJhc2ljYWxseSBhIG5vLW9wIGFmdGVyIHRoZQoraW5pdGlhbCBtYXJrZXJzIGhhdmUgYmVlbiByZWFkOiBpdCB3aWxsIGp1c3QgcmV0dXJuIEpQRUdfU1VTUEVOREVELgorCisKK0FiYnJldmlhdGVkIGRhdGFzdHJlYW1zIGFuZCBtdWx0aXBsZSBpbWFnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBKUEVHIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gb2JqZWN0IGNhbiBiZSByZXVzZWQgdG8gcHJvY2VzcyBtdWx0aXBsZQoraW1hZ2VzLiAgVGhpcyBzYXZlcyBhIHNtYWxsIGFtb3VudCBvZiB0aW1lIHBlciBpbWFnZSBieSBlbGltaW5hdGluZyB0aGUKKyJjcmVhdGUiIGFuZCAiZGVzdHJveSIgb3BlcmF0aW9ucywgYnV0IHRoYXQgaXNuJ3QgdGhlIHJlYWwgcHVycG9zZSBvZiB0aGUKK2ZlYXR1cmUuICBSYXRoZXIsIHJldXNlIG9mIGFuIG9iamVjdCBwcm92aWRlcyBzdXBwb3J0IGZvciBhYmJyZXZpYXRlZCBKUEVHCitkYXRhc3RyZWFtcy4gIE9iamVjdCByZXVzZSBjYW4gYWxzbyBzaW1wbGlmeSBwcm9jZXNzaW5nIGEgc2VyaWVzIG9mIGltYWdlcyBpbgorYSBzaW5nbGUgaW5wdXQgb3Igb3V0cHV0IGZpbGUuICBUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlc2UgZmVhdHVyZXMuCisKK0EgSlBFRyBmaWxlIG5vcm1hbGx5IGNvbnRhaW5zIHNldmVyYWwgaHVuZHJlZCBieXRlcyB3b3J0aCBvZiBxdWFudGl6YXRpb24KK2FuZCBIdWZmbWFuIHRhYmxlcy4gIEluIGEgc2l0dWF0aW9uIHdoZXJlIG1hbnkgaW1hZ2VzIHdpbGwgYmUgc3RvcmVkIG9yCit0cmFuc21pdHRlZCB3aXRoIGlkZW50aWNhbCB0YWJsZXMsIHRoaXMgbWF5IHJlcHJlc2VudCBhbiBhbm5veWluZyBvdmVyaGVhZC4KK1RoZSBKUEVHIHN0YW5kYXJkIHRoZXJlZm9yZSBwZXJtaXRzIHRhYmxlcyB0byBiZSBvbWl0dGVkLiAgVGhlIHN0YW5kYXJkCitkZWZpbmVzIHRocmVlIGNsYXNzZXMgb2YgSlBFRyBkYXRhc3RyZWFtczoKKyAgKiAiSW50ZXJjaGFuZ2UiIGRhdGFzdHJlYW1zIGNvbnRhaW4gYW4gaW1hZ2UgYW5kIGFsbCB0YWJsZXMgbmVlZGVkIHRvIGRlY29kZQorICAgICB0aGUgaW1hZ2UuICBUaGVzZSBhcmUgdGhlIHVzdWFsIGtpbmQgb2YgSlBFRyBmaWxlLgorICAqICJBYmJyZXZpYXRlZCBpbWFnZSIgZGF0YXN0cmVhbXMgY29udGFpbiBhbiBpbWFnZSwgYnV0IGFyZSBtaXNzaW5nIHNvbWUgb3IKKyAgICBhbGwgb2YgdGhlIHRhYmxlcyBuZWVkZWQgdG8gZGVjb2RlIHRoYXQgaW1hZ2UuCisgICogIkFiYnJldmlhdGVkIHRhYmxlIHNwZWNpZmljYXRpb24iIChoZW5jZWZvcnRoICJ0YWJsZXMtb25seSIpIGRhdGFzdHJlYW1zCisgICAgY29udGFpbiBvbmx5IHRhYmxlIHNwZWNpZmljYXRpb25zLgorVG8gZGVjb2RlIGFuIGFiYnJldmlhdGVkIGltYWdlLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgbWlzc2luZyB0YWJsZShzKQoraW50byB0aGUgZGVjb2RlciBiZWZvcmVoYW5kLiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHJlYWRpbmcgYSBzZXBhcmF0ZQordGFibGVzLW9ubHkgZmlsZS4gIEEgdmFyaWFudCBzY2hlbWUgdXNlcyBhIHNlcmllcyBvZiBpbWFnZXMgaW4gd2hpY2ggdGhlIGZpcnN0CitpbWFnZSBpcyBhbiBpbnRlcmNoYW5nZSAoY29tcGxldGUpIGRhdGFzdHJlYW0sIHdoaWxlIHN1YnNlcXVlbnQgb25lcyBhcmUKK2FiYnJldmlhdGVkIGFuZCByZWx5IG9uIHRoZSB0YWJsZXMgbG9hZGVkIGJ5IHRoZSBmaXJzdCBpbWFnZS4gIEl0IGlzIGFzc3VtZWQKK3RoYXQgb25jZSB0aGUgZGVjb2RlciBoYXMgcmVhZCBhIHRhYmxlLCBpdCB3aWxsIHJlbWVtYmVyIHRoYXQgdGFibGUgdW50aWwgYQorbmV3IGRlZmluaXRpb24gZm9yIHRoZSBzYW1lIHRhYmxlIG51bWJlciBpcyBlbmNvdW50ZXJlZC4KKworSXQgaXMgdGhlIGFwcGxpY2F0aW9uIGRlc2lnbmVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZmlndXJlIG91dCBob3cgdG8gYXNzb2NpYXRlCit0aGUgY29ycmVjdCB0YWJsZXMgd2l0aCBhbiBhYmJyZXZpYXRlZCBpbWFnZS4gIFdoaWxlIGFiYnJldmlhdGVkIGRhdGFzdHJlYW1zCitjYW4gYmUgdXNlZnVsIGluIGEgY2xvc2VkIGVudmlyb25tZW50LCB0aGVpciB1c2UgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQgaW4KK2FueSBzaXR1YXRpb24gd2hlcmUgZGF0YSBleGNoYW5nZSB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucyBtaWdodCBiZSBuZWVkZWQuCitDYXZlYXQgZGVzaWduZXIuCisKK1RoZSBKUEVHIGxpYnJhcnkgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBhbnkgY29tYmluYXRpb24gb2YKK3RhYmxlcy1vbmx5IGRhdGFzdHJlYW1zIGFuZCBhYmJyZXZpYXRlZCBpbWFnZXMuICBJbiBib3RoIGNvbXByZXNzaW9uIGFuZAorZGVjb21wcmVzc2lvbiBvYmplY3RzLCBhIHF1YW50aXphdGlvbiBvciBIdWZmbWFuIHRhYmxlIHdpbGwgYmUgcmV0YWluZWQgZm9yCit0aGUgbGlmZXRpbWUgb2YgdGhlIG9iamVjdCwgdW5sZXNzIGl0IGlzIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IHRhYmxlIGRlZmluaXRpb24uCisKKworVG8gY3JlYXRlIGFiYnJldmlhdGVkIGltYWdlIGRhdGFzdHJlYW1zLCBpdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byB0ZWxsIHRoZQorY29tcHJlc3NvciBub3QgdG8gZW1pdCBzb21lIG9yIGFsbCBvZiB0aGUgdGFibGVzIGl0IGlzIHVzaW5nLiAgRWFjaAorcXVhbnRpemF0aW9uIGFuZCBIdWZmbWFuIHRhYmxlIHN0cnVjdCBjb250YWlucyBhIGJvb2xlYW4gZmllbGQgInNlbnRfdGFibGUiLAord2hpY2ggbm9ybWFsbHkgaXMgaW5pdGlhbGl6ZWQgdG8gRkFMU0UuICBGb3IgZWFjaCB0YWJsZSB1c2VkIGJ5IHRoZSBpbWFnZSwgdGhlCitoZWFkZXItd3JpdGluZyBwcm9jZXNzIGVtaXRzIHRoZSB0YWJsZSBhbmQgc2V0cyBzZW50X3RhYmxlID0gVFJVRSB1bmxlc3MgaXQgaXMKK2FscmVhZHkgVFJVRS4gIChJbiBub3JtYWwgdXNhZ2UsIHRoaXMgcHJldmVudHMgb3V0cHV0dGluZyB0aGUgc2FtZSB0YWJsZQorZGVmaW5pdGlvbiBtdWx0aXBsZSB0aW1lcywgYXMgd291bGQgb3RoZXJ3aXNlIG9jY3VyIGJlY2F1c2UgdGhlIGNocm9tYQorY29tcG9uZW50cyB0eXBpY2FsbHkgc2hhcmUgdGFibGVzLikgIFRodXMsIHNldHRpbmcgdGhpcyBmaWVsZCB0byBUUlVFIGJlZm9yZQorY2FsbGluZyBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgd2lsbCBwcmV2ZW50IHRoZSB0YWJsZSBmcm9tIGJlaW5nIHdyaXR0ZW4gYXQKK2FsbC4KKworSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgInB1cmUiIGFiYnJldmlhdGVkIGltYWdlIGZpbGUgY29udGFpbmluZyBubyB0YWJsZXMsCitqdXN0IGNhbGwgImpwZWdfc3VwcHJlc3NfdGFibGVzKCZjaW5mbywgVFJVRSkiIGFmdGVyIGNvbnN0cnVjdGluZyBhbGwgdGhlCit0YWJsZXMuICBJZiB5b3Ugd2FudCB0byBlbWl0IHNvbWUgYnV0IG5vdCBhbGwgdGFibGVzLCB5b3UnbGwgbmVlZCB0byBzZXQgdGhlCitpbmRpdmlkdWFsIHNlbnRfdGFibGUgZmllbGRzIGRpcmVjdGx5LgorCitUbyBjcmVhdGUgYW4gYWJicmV2aWF0ZWQgaW1hZ2UsIHlvdSBtdXN0IGFsc28gY2FsbCBqcGVnX3N0YXJ0X2NvbXByZXNzKCkKK3dpdGggYSBzZWNvbmQgcGFyYW1ldGVyIG9mIEZBTFNFLCBub3QgVFJVRS4gIE90aGVyd2lzZSBqcGVnX3N0YXJ0X2NvbXByZXNzKCkKK3dpbGwgZm9yY2UgYWxsIHRoZSBzZW50X3RhYmxlIGZpZWxkcyB0byBGQUxTRS4gIChUaGlzIGlzIGEgc2FmZXR5IGZlYXR1cmUgdG8KK3ByZXZlbnQgYWJicmV2aWF0ZWQgaW1hZ2VzIGZyb20gYmVpbmcgY3JlYXRlZCBhY2NpZGVudGFsbHkuKQorCitUbyBjcmVhdGUgYSB0YWJsZXMtb25seSBmaWxlLCBwZXJmb3JtIHRoZSBzYW1lIHBhcmFtZXRlciBzZXR1cCB0aGF0IHlvdQorbm9ybWFsbHkgd291bGQsIGJ1dCBpbnN0ZWFkIG9mIGNhbGxpbmcganBlZ19zdGFydF9jb21wcmVzcygpIGFuZCBzbyBvbiwgY2FsbAoranBlZ193cml0ZV90YWJsZXMoJmNpbmZvKS4gIFRoaXMgd2lsbCB3cml0ZSBhbiBhYmJyZXZpYXRlZCBkYXRhc3RyZWFtCitjb250YWluaW5nIG9ubHkgU09JLCBEUVQgYW5kL29yIERIVCBtYXJrZXJzLCBhbmQgRU9JLiAgQWxsIHRoZSBxdWFudGl6YXRpb24KK2FuZCBIdWZmbWFuIHRhYmxlcyB0aGF0IGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGUgY29tcHJlc3Npb24gb2JqZWN0IHdpbGwKK2JlIGVtaXR0ZWQgdW5sZXNzIHRoZWlyIHNlbnRfdGFibGVzIGZsYWcgaXMgYWxyZWFkeSBUUlVFLCBhbmQgdGhlbiBhbGwgdGhlCitzZW50X3RhYmxlcyBmbGFncyB3aWxsIGJlIHNldCBUUlVFLgorCitBIHN1cmUtZmlyZSB3YXkgdG8gY3JlYXRlIG1hdGNoaW5nIHRhYmxlcy1vbmx5IGFuZCBhYmJyZXZpYXRlZCBpbWFnZSBmaWxlcworaXMgdG8gcHJvY2VlZCBhcyBmb2xsb3dzOgorCisgICAgICAgIGNyZWF0ZSBKUEVHIGNvbXByZXNzaW9uIG9iamVjdAorICAgICAgICBzZXQgSlBFRyBwYXJhbWV0ZXJzCisgICAgICAgIHNldCBkZXN0aW5hdGlvbiB0byB0YWJsZXMtb25seSBmaWxlCisgICAgICAgIGpwZWdfd3JpdGVfdGFibGVzKCZjaW5mbyk7CisgICAgICAgIHNldCBkZXN0aW5hdGlvbiB0byBpbWFnZSBmaWxlCisgICAgICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBGQUxTRSk7CisgICAgICAgIHdyaXRlIGRhdGEuLi4KKyAgICAgICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsKKworU2luY2UgdGhlIEpQRUcgcGFyYW1ldGVycyBhcmUgbm90IGFsdGVyZWQgYmV0d2VlbiB3cml0aW5nIHRoZSB0YWJsZSBmaWxlIGFuZAordGhlIGFiYnJldmlhdGVkIGltYWdlIGZpbGUsIHRoZSBzYW1lIHRhYmxlcyBhcmUgc3VyZSB0byBiZSB1c2VkLiAgT2YgY291cnNlLAoreW91IGNhbiByZXBlYXQgdGhlIGpwZWdfc3RhcnRfY29tcHJlc3MoKSAuLi4ganBlZ19maW5pc2hfY29tcHJlc3MoKSBzZXF1ZW5jZQorbWFueSB0aW1lcyB0byBwcm9kdWNlIG1hbnkgYWJicmV2aWF0ZWQgaW1hZ2UgZmlsZXMgbWF0Y2hpbmcgdGhlIHRhYmxlIGZpbGUuCisKK1lvdSBjYW5ub3Qgc3VwcHJlc3Mgb3V0cHV0IG9mIHRoZSBjb21wdXRlZCBIdWZmbWFuIHRhYmxlcyB3aGVuIEh1ZmZtYW4KK29wdGltaXphdGlvbiBpcyBzZWxlY3RlZC4gIChJZiB5b3UgY291bGQsIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIGRlY29kZSB0aGUKK2ltYWdlLi4uKSAgR2VuZXJhbGx5LCB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgb3B0aW1pemVfY29kaW5nID0gVFJVRSB3aGVuCit5b3UgYXJlIHRyeWluZyB0byBwcm9kdWNlIGFiYnJldmlhdGVkIGZpbGVzLgorCitJbiBzb21lIGNhc2VzIHlvdSBtaWdodCB3YW50IHRvIGNvbXByZXNzIGFuIGltYWdlIHVzaW5nIHRhYmxlcyB3aGljaCBhcmUKK25vdCBzdG9yZWQgaW4gdGhlIGFwcGxpY2F0aW9uLCBidXQgYXJlIGRlZmluZWQgaW4gYW4gaW50ZXJjaGFuZ2Ugb3IKK3RhYmxlcy1vbmx5IGZpbGUgcmVhZGFibGUgYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nIHVwCithIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QgdG8gcmVhZCB0aGUgc3BlY2lmaWNhdGlvbiBmaWxlLCB0aGVuIGNvcHlpbmcgdGhlCit0YWJsZXMgaW50byB5b3VyIGNvbXByZXNzaW9uIG9iamVjdC4gIFNlZSBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycygpCitmb3IgYW4gZXhhbXBsZSBvZiBjb3B5aW5nIHF1YW50aXphdGlvbiB0YWJsZXMuCisKKworVG8gcmVhZCBhYmJyZXZpYXRlZCBpbWFnZSBmaWxlcywgeW91IHNpbXBseSBuZWVkIHRvIGxvYWQgdGhlIHByb3BlciB0YWJsZXMKK2ludG8gdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0IGJlZm9yZSB0cnlpbmcgdG8gcmVhZCB0aGUgYWJicmV2aWF0ZWQgaW1hZ2UuCitJZiB0aGUgcHJvcGVyIHRhYmxlcyBhcmUgc3RvcmVkIGluIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLCB5b3UgY2FuIGp1c3QKK2FsbG9jYXRlIHRoZSB0YWJsZSBzdHJ1Y3RzIGFuZCBmaWxsIGluIHRoZWlyIGNvbnRlbnRzIGRpcmVjdGx5LiAgRm9yIGV4YW1wbGUsCit0byBsb2FkIGEgZml4ZWQgcXVhbnRpemF0aW9uIHRhYmxlIGludG8gdGFibGUgc2xvdCAibiI6CisKKyAgICBpZiAoY2luZm8ucXVhbnRfdGJsX3B0cnNbbl0gPT0gTlVMTCkKKyAgICAgIGNpbmZvLnF1YW50X3RibF9wdHJzW25dID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSAmY2luZm8pOworICAgIHF1YW50X3B0ciA9IGNpbmZvLnF1YW50X3RibF9wdHJzW25dOyAgICAgICAgLyogcXVhbnRfcHRyIGlzIEpRVUFOVF9UQkwqICovCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKyAgICAgIC8qIFF0YWJsZVtdIGlzIGRlc2lyZWQgcXVhbnRpemF0aW9uIHRhYmxlLCBpbiBuYXR1cmFsIGFycmF5IG9yZGVyICovCisgICAgICBxdWFudF9wdHItPnF1YW50dmFsW2ldID0gUXRhYmxlW2ldOworICAgIH0KKworQ29kZSB0byBsb2FkIGEgZml4ZWQgSHVmZm1hbiB0YWJsZSBpcyB0eXBpY2FsbHkgKGZvciBBQyB0YWJsZSAibiIpOgorCisgICAgaWYgKGNpbmZvLmFjX2h1ZmZfdGJsX3B0cnNbbl0gPT0gTlVMTCkKKyAgICAgIGNpbmZvLmFjX2h1ZmZfdGJsX3B0cnNbbl0gPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgJmNpbmZvKTsKKyAgICBodWZmX3B0ciA9IGNpbmZvLmFjX2h1ZmZfdGJsX3B0cnNbbl07ICAgICAgIC8qIGh1ZmZfcHRyIGlzIEpIVUZGX1RCTCogKi8KKyAgICBmb3IgKGkgPSAxOyBpIDw9IDE2OyBpKyspIHsKKyAgICAgIC8qIGNvdW50c1tpXSBpcyBudW1iZXIgb2YgSHVmZm1hbiBjb2RlcyBvZiBsZW5ndGggaSBiaXRzLCBpPTEuLjE2ICovCisgICAgICBodWZmX3B0ci0+Yml0c1tpXSA9IGNvdW50c1tpXTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAvKiBzeW1ib2xzW10gaXMgdGhlIGxpc3Qgb2YgSHVmZm1hbiBzeW1ib2xzLCBpbiBjb2RlLWxlbmd0aCBvcmRlciAqLworICAgICAgaHVmZl9wdHItPmh1ZmZ2YWxbaV0gPSBzeW1ib2xzW2ldOworICAgIH0KKworKE5vdGUgdGhhdCB0cnlpbmcgdG8gc2V0IGNpbmZvLnF1YW50X3RibF9wdHJzW25dIHRvIHBvaW50IGRpcmVjdGx5IGF0IGEKK2NvbnN0YW50IEpRVUFOVF9UQkwgb2JqZWN0IGlzIG5vdCBzYWZlLiAgSWYgdGhlIGluY29taW5nIGZpbGUgaGFwcGVuZWQgdG8KK2NvbnRhaW4gYSBxdWFudGl6YXRpb24gdGFibGUgZGVmaW5pdGlvbiwgeW91ciBtYXN0ZXIgdGFibGUgd291bGQgZ2V0CitvdmVyd3JpdHRlbiEgIEluc3RlYWQgYWxsb2NhdGUgYSB3b3JraW5nIHRhYmxlIGNvcHkgYW5kIGNvcHkgdGhlIG1hc3RlciB0YWJsZQoraW50byBpdCwgYXMgaWxsdXN0cmF0ZWQgYWJvdmUuICBEaXR0byBmb3IgSHVmZm1hbiB0YWJsZXMsIG9mIGNvdXJzZS4pCisKK1lvdSBtaWdodCB3YW50IHRvIHJlYWQgdGhlIHRhYmxlcyBmcm9tIGEgdGFibGVzLW9ubHkgZmlsZSwgcmF0aGVyIHRoYW4KK2hhcmQtd2lyaW5nIHRoZW0gaW50byB5b3VyIGFwcGxpY2F0aW9uLiAgVGhlIGpwZWdfcmVhZF9oZWFkZXIoKSBjYWxsIGlzCitzdWZmaWNpZW50IHRvIHJlYWQgYSB0YWJsZXMtb25seSBmaWxlLiAgWW91IG11c3QgcGFzcyBhIHNlY29uZCBwYXJhbWV0ZXIgb2YKK0ZBTFNFIHRvIGluZGljYXRlIHRoYXQgeW91IGRvIG5vdCByZXF1aXJlIGFuIGltYWdlIHRvIGJlIHByZXNlbnQuICBUaHVzLCB0aGUKK3R5cGljYWwgc2NlbmFyaW8gaXMKKworICAgICAgICBjcmVhdGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdAorICAgICAgICBzZXQgc291cmNlIHRvIHRhYmxlcy1vbmx5IGZpbGUKKyAgICAgICAganBlZ19yZWFkX2hlYWRlcigmY2luZm8sIEZBTFNFKTsKKyAgICAgICAgc2V0IHNvdXJjZSB0byBhYmJyZXZpYXRlZCBpbWFnZSBmaWxlCisgICAgICAgIGpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsKKyAgICAgICAgc2V0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycworICAgICAgICBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAgcmVhZCBkYXRhLi4uCisgICAgICAgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoJmNpbmZvKTsKKworSW4gc29tZSBjYXNlcywgeW91IG1heSB3YW50IHRvIHJlYWQgYSBmaWxlIHdpdGhvdXQga25vd2luZyB3aGV0aGVyIGl0IGNvbnRhaW5zCithbiBpbWFnZSBvciBqdXN0IHRhYmxlcy4gIEluIHRoYXQgY2FzZSwgcGFzcyBGQUxTRSBhbmQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZQorZnJvbSBqcGVnX3JlYWRfaGVhZGVyKCk6IGl0IHdpbGwgYmUgSlBFR19IRUFERVJfT0sgaWYgYW4gaW1hZ2Ugd2FzIGZvdW5kLAorSlBFR19IRUFERVJfVEFCTEVTX09OTFkgaWYgb25seSB0YWJsZXMgd2VyZSBmb3VuZC4gIChBIHRoaXJkIHJldHVybiB2YWx1ZSwKK0pQRUdfU1VTUEVOREVELCBpcyBwb3NzaWJsZSB3aGVuIHVzaW5nIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBtYW5hZ2VyLikKK05vdGUgdGhhdCBqcGVnX3JlYWRfaGVhZGVyKCkgd2lsbCBub3QgY29tcGxhaW4gaWYgeW91IHJlYWQgYW4gYWJicmV2aWF0ZWQKK2ltYWdlIGZvciB3aGljaCB5b3UgaGF2ZW4ndCBsb2FkZWQgdGhlIG1pc3NpbmcgdGFibGVzOyB0aGUgbWlzc2luZy10YWJsZSBjaGVjaworb2NjdXJzIGxhdGVyLCBpbiBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KKworCitJdCBpcyBwb3NzaWJsZSB0byByZWFkIGEgc2VyaWVzIG9mIGltYWdlcyBmcm9tIGEgc2luZ2xlIHNvdXJjZSBmaWxlIGJ5CityZXBlYXRpbmcgdGhlIGpwZWdfcmVhZF9oZWFkZXIoKSAuLi4ganBlZ19maW5pc2hfZGVjb21wcmVzcygpIHNlcXVlbmNlLAord2l0aG91dCByZWxlYXNpbmcvcmVjcmVhdGluZyB0aGUgSlBFRyBvYmplY3Qgb3IgdGhlIGRhdGEgc291cmNlIG1vZHVsZS4KKyhJZiB5b3UgZGlkIHJlaW5pdGlhbGl6ZSwgYW55IHBhcnRpYWwgYnVmZmVybG9hZCBsZWZ0IGluIHRoZSBkYXRhIHNvdXJjZQorYnVmZmVyIGF0IHRoZSBlbmQgb2Ygb25lIGltYWdlIHdvdWxkIGJlIGRpc2NhcmRlZCwgY2F1c2luZyB5b3UgdG8gbG9zZSB0aGUKK3N0YXJ0IG9mIHRoZSBuZXh0IGltYWdlLikgIFdoZW4geW91IHVzZSB0aGlzIG1ldGhvZCwgc3RvcmVkIHRhYmxlcyBhcmUKK2F1dG9tYXRpY2FsbHkgY2FycmllZCBmb3J3YXJkLCBzbyBzb21lIG9mIHRoZSBpbWFnZXMgY2FuIGJlIGFiYnJldmlhdGVkIGltYWdlcwordGhhdCBkZXBlbmQgb24gdGFibGVzIGZyb20gZWFybGllciBpbWFnZXMuCisKK0lmIHlvdSBpbnRlbmQgdG8gd3JpdGUgYSBzZXJpZXMgb2YgaW1hZ2VzIGludG8gYSBzaW5nbGUgZGVzdGluYXRpb24gZmlsZSwKK3lvdSBtaWdodCB3YW50IHRvIG1ha2UgYSBzcGVjaWFsaXplZCBkYXRhIGRlc3RpbmF0aW9uIG1vZHVsZSB0aGF0IGRvZXNuJ3QKK2ZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyIGF0IHRlcm1fZGVzdGluYXRpb24oKSB0aW1lLiAgVGhpcyB3b3VsZCBzcGVlZCB0aGluZ3MKK3VwIGJ5IHNvbWUgdHJpZmxpbmcgYW1vdW50LiAgT2YgY291cnNlLCB5b3UnZCBuZWVkIHRvIHJlbWVtYmVyIHRvIGZsdXNoIHRoZQorYnVmZmVyIGFmdGVyIHRoZSBsYXN0IGltYWdlLiAgWW91IGNhbiBtYWtlIHRoZSBsYXRlciBpbWFnZXMgYmUgYWJicmV2aWF0ZWQKK29uZXMgYnkgcGFzc2luZyBGQUxTRSB0byBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuCisKKworU3BlY2lhbCBtYXJrZXJzCistLS0tLS0tLS0tLS0tLS0KKworU29tZSBhcHBsaWNhdGlvbnMgbWF5IG5lZWQgdG8gaW5zZXJ0IG9yIGV4dHJhY3Qgc3BlY2lhbCBkYXRhIGluIHRoZSBKUEVHCitkYXRhc3RyZWFtLiAgVGhlIEpQRUcgc3RhbmRhcmQgcHJvdmlkZXMgbWFya2VyIHR5cGVzICJDT00iIChjb21tZW50KSBhbmQKKyJBUFAwIiB0aHJvdWdoICJBUFAxNSIgKGFwcGxpY2F0aW9uKSB0byBob2xkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGRhdGEuCitVbmZvcnR1bmF0ZWx5LCB0aGUgdXNlIG9mIHRoZXNlIG1hcmtlcnMgaXMgbm90IHNwZWNpZmllZCBieSB0aGUgc3RhbmRhcmQuCitDT00gbWFya2VycyBhcmUgZmFpcmx5IHdpZGVseSB1c2VkIHRvIGhvbGQgdXNlci1zdXBwbGllZCB0ZXh0LiAgVGhlIEpGSUYgZmlsZQorZm9ybWF0IHNwZWMgdXNlcyBBUFAwIG1hcmtlcnMgd2l0aCBzcGVjaWZpZWQgaW5pdGlhbCBzdHJpbmdzIHRvIGhvbGQgY2VydGFpbgorZGF0YS4gIEFkb2JlIGFwcGxpY2F0aW9ucyB1c2UgQVBQMTQgbWFya2VycyBiZWdpbm5pbmcgd2l0aCB0aGUgc3RyaW5nICJBZG9iZSIKK2ZvciBtaXNjZWxsYW5lb3VzIGRhdGEuICBPdGhlciBBUFBuIG1hcmtlcnMgYXJlIHJhcmVseSBzZWVuLCBidXQgbWlnaHQKK2NvbnRhaW4gYWxtb3N0IGFueXRoaW5nLgorCitJZiB5b3Ugd2lzaCB0byBzdG9yZSB1c2VyLXN1cHBsaWVkIHRleHQsIHdlIHJlY29tbWVuZCB5b3UgdXNlIENPTSBtYXJrZXJzCithbmQgcGxhY2UgcmVhZGFibGUgNy1iaXQgQVNDSUkgdGV4dCBpbiB0aGVtLiAgTmV3bGluZSBjb252ZW50aW9ucyBhcmUgbm90CitzdGFuZGFyZGl6ZWQgLS0tIGV4cGVjdCB0byBmaW5kIExGIChVbml4IHN0eWxlKSwgQ1IvTEYgKERPUyBzdHlsZSksIG9yIENSCisoTWFjIHN0eWxlKS4gIEEgcm9idXN0IENPTSByZWFkZXIgc2hvdWxkIGJlIGFibGUgdG8gY29wZSB3aXRoIHJhbmRvbSBiaW5hcnkKK2dhcmJhZ2UsIGluY2x1ZGluZyBudWxscywgc2luY2Ugc29tZSBhcHBsaWNhdGlvbnMgZ2VuZXJhdGUgQ09NIG1hcmtlcnMKK2NvbnRhaW5pbmcgbm9uLUFTQ0lJIGp1bmsuICAoQnV0IHlvdXJzIHNob3VsZCBub3QgYmUgb25lIG9mIHRoZW0uKQorCitGb3IgcHJvZ3JhbS1zdXBwbGllZCBkYXRhLCB1c2UgYW4gQVBQbiBtYXJrZXIsIGFuZCBiZSBzdXJlIHRvIGJlZ2luIGl0IHdpdGggYW4KK2lkZW50aWZ5aW5nIHN0cmluZyBzbyB0aGF0IHlvdSBjYW4gdGVsbCB3aGV0aGVyIHRoZSBtYXJrZXIgaXMgYWN0dWFsbHkgeW91cnMuCitJdCdzIHByb2JhYmx5IGJlc3QgdG8gYXZvaWQgdXNpbmcgQVBQMCBvciBBUFAxNCBmb3IgYW55IHByaXZhdGUgbWFya2Vycy4KKyhOT1RFOiB0aGUgdXBjb21pbmcgU1BJRkYgc3RhbmRhcmQgd2lsbCB1c2UgQVBQOCBtYXJrZXJzOyB3ZSByZWNvbW1lbmQgeW91Citub3QgdXNlIEFQUDggbWFya2VycyBmb3IgYW55IHByaXZhdGUgcHVycG9zZXMsIGVpdGhlci4pCisKK0tlZXAgaW4gbWluZCB0aGF0IGF0IG1vc3QgNjU1MzMgYnl0ZXMgY2FuIGJlIHB1dCBpbnRvIG9uZSBtYXJrZXIsIGJ1dCB5b3UKK2NhbiBoYXZlIGFzIG1hbnkgbWFya2VycyBhcyB5b3UgbGlrZS4KKworQnkgZGVmYXVsdCwgdGhlIElKRyBjb21wcmVzc2lvbiBsaWJyYXJ5IHdpbGwgd3JpdGUgYSBKRklGIEFQUDAgbWFya2VyIGlmIHRoZQorc2VsZWN0ZWQgSlBFRyBjb2xvcnNwYWNlIGlzIGdyYXlzY2FsZSBvciBZQ2JDciwgb3IgYW4gQWRvYmUgQVBQMTQgbWFya2VyIGlmCit0aGUgc2VsZWN0ZWQgY29sb3JzcGFjZSBpcyBSR0IsIENNWUssIG9yIFlDQ0suICBZb3UgY2FuIGRpc2FibGUgdGhpcywgYnV0Cit3ZSBkb24ndCByZWNvbW1lbmQgaXQuICBUaGUgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IHdpbGwgcmVjb2duaXplIEpGSUYgYW5kCitBZG9iZSBtYXJrZXJzIGFuZCB3aWxsIHNldCB0aGUgSlBFRyBjb2xvcnNwYWNlIHByb3Blcmx5IHdoZW4gb25lIGlzIGZvdW5kLgorCisKK1lvdSBjYW4gd3JpdGUgc3BlY2lhbCBtYXJrZXJzIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgZGF0YXN0cmVhbSBoZWFkZXIgYnkKK2NhbGxpbmcganBlZ193cml0ZV9tYXJrZXIoKSBhZnRlciBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgYW5kIGJlZm9yZSB0aGUgZmlyc3QKK2NhbGwgdG8ganBlZ193cml0ZV9zY2FubGluZXMoKS4gIFdoZW4geW91IGRvIHRoaXMsIHRoZSBtYXJrZXJzIGFwcGVhciBhZnRlcgordGhlIFNPSSBhbmQgdGhlIEpGSUYgQVBQMCBhbmQgQWRvYmUgQVBQMTQgbWFya2VycyAoaWYgd3JpdHRlbiksIGJ1dCBiZWZvcmUKK2FsbCBlbHNlLiAgU3BlY2lmeSB0aGUgbWFya2VyIHR5cGUgcGFyYW1ldGVyIGFzICJKUEVHX0NPTSIgZm9yIENPTSBvcgorIkpQRUdfQVBQMCArIG4iIGZvciBBUFBuLiAgKEFjdHVhbGx5LCBqcGVnX3dyaXRlX21hcmtlciB3aWxsIGxldCB5b3Ugd3JpdGUKK2FueSBtYXJrZXIgdHlwZSwgYnV0IHdlIGRvbid0IHJlY29tbWVuZCB3cml0aW5nIGFueSBvdGhlciBraW5kcyBvZiBtYXJrZXIuKQorRm9yIGV4YW1wbGUsIHRvIHdyaXRlIGEgdXNlciBjb21tZW50IHN0cmluZyBwb2ludGVkIHRvIGJ5IGNvbW1lbnRfdGV4dDoKKyAgICAgICAganBlZ193cml0ZV9tYXJrZXIoY2luZm8sIEpQRUdfQ09NLCBjb21tZW50X3RleHQsIHN0cmxlbihjb21tZW50X3RleHQpKTsKKworSWYgaXQncyBub3QgY29udmVuaWVudCB0byBzdG9yZSBhbGwgdGhlIG1hcmtlciBkYXRhIGluIG1lbW9yeSBhdCBvbmNlLAoreW91IGNhbiBpbnN0ZWFkIGNhbGwganBlZ193cml0ZV9tX2hlYWRlcigpIGZvbGxvd2VkIGJ5IG11bHRpcGxlIGNhbGxzIHRvCitqcGVnX3dyaXRlX21fYnl0ZSgpLiAgSWYgeW91IGRvIGl0IHRoaXMgd2F5LCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8KK2NhbGwganBlZ193cml0ZV9tX2J5dGUoKSBleGFjdGx5IHRoZSBudW1iZXIgb2YgdGltZXMgZ2l2ZW4gaW4gdGhlIGxlbmd0aAorcGFyYW1ldGVyIHRvIGpwZWdfd3JpdGVfbV9oZWFkZXIoKS4gIChUaGlzIG1ldGhvZCBsZXRzIHlvdSBlbXB0eSB0aGUKK291dHB1dCBidWZmZXIgcGFydHdheSB0aHJvdWdoIGEgbWFya2VyLCB3aGljaCBtaWdodCBiZSBpbXBvcnRhbnQgd2hlbgordXNpbmcgYSBzdXNwZW5kaW5nIGRhdGEgZGVzdGluYXRpb24gbW9kdWxlLiAgSW4gYW55IGNhc2UsIGlmIHlvdSBhcmUgdXNpbmcKK2Egc3VzcGVuZGluZyBkZXN0aW5hdGlvbiwgeW91IHNob3VsZCBmbHVzaCBpdHMgYnVmZmVyIGFmdGVyIGluc2VydGluZworYW55IHNwZWNpYWwgbWFya2Vycy4gIFNlZSAiSS9PIHN1c3BlbnNpb24iLikKKworT3IsIGlmIHlvdSBwcmVmZXIgdG8gc3ludGhlc2l6ZSB0aGUgbWFya2VyIGJ5dGUgc2VxdWVuY2UgeW91cnNlbGYsCit5b3UgY2FuIGp1c3QgY3JhbSBpdCBzdHJhaWdodCBpbnRvIHRoZSBkYXRhIGRlc3RpbmF0aW9uIG1vZHVsZS4KKworSWYgeW91IGFyZSB3cml0aW5nIEpGSUYgMS4wMiBleHRlbnNpb24gbWFya2VycyAodGh1bWJuYWlsIGltYWdlcyksIGRvbid0Citmb3JnZXQgdG8gc2V0IGNpbmZvLkpGSUZfbWlub3JfdmVyc2lvbiA9IDIgc28gdGhhdCB0aGUgZW5jb2RlciB3aWxsIHdyaXRlIHRoZQorY29ycmVjdCBKRklGIHZlcnNpb24gbnVtYmVyIGluIHRoZSBKRklGIGhlYWRlciBtYXJrZXIuICBUaGUgbGlicmFyeSdzIGRlZmF1bHQKK2lzIHRvIHdyaXRlIHZlcnNpb24gMS4wMSwgYnV0IHRoYXQncyB3cm9uZyBpZiB5b3UgaW5zZXJ0IGFueSAxLjAyIGV4dGVuc2lvbgorbWFya2Vycy4gIChXZSBjb3VsZCBwcm9iYWJseSBnZXQgYXdheSB3aXRoIGp1c3QgZGVmYXVsdGluZyB0byAxLjAyLCBidXQgdGhlcmUKK3VzZWQgdG8gYmUgYnJva2VuIGRlY29kZXJzIHRoYXQgd291bGQgY29tcGxhaW4gYWJvdXQgdW5rbm93biBtaW5vciB2ZXJzaW9uCitudW1iZXJzLiAgVG8gcmVkdWNlIGNvbXBhdGliaWxpdHkgcmlza3MgaXQncyBzYWZlc3Qgbm90IHRvIHdyaXRlIDEuMDIgdW5sZXNzCit5b3UgYXJlIGFjdHVhbGx5IHVzaW5nIDEuMDIgZXh0ZW5zaW9ucy4pCisKKworV2hlbiByZWFkaW5nLCB0d28gbWV0aG9kcyBvZiBoYW5kbGluZyBzcGVjaWFsIG1hcmtlcnMgYXJlIGF2YWlsYWJsZToKKzEuIFlvdSBjYW4gYXNrIHRoZSBsaWJyYXJ5IHRvIHNhdmUgdGhlIGNvbnRlbnRzIG9mIENPTSBhbmQvb3IgQVBQbiBtYXJrZXJzCitpbnRvIG1lbW9yeSwgYW5kIHRoZW4gZXhhbWluZSB0aGVtIGF0IHlvdXIgbGVpc3VyZSBhZnRlcndhcmRzLgorMi4gWW91IGNhbiBzdXBwbHkgeW91ciBvd24gcm91dGluZSB0byBwcm9jZXNzIENPTSBhbmQvb3IgQVBQbiBtYXJrZXJzCitvbi10aGUtZmx5IGFzIHRoZXkgYXJlIHJlYWQuCitUaGUgZmlyc3QgbWV0aG9kIGlzIHNpbXBsZXIgdG8gdXNlLCBlc3BlY2lhbGx5IGlmIHlvdSBhcmUgdXNpbmcgYSBzdXNwZW5kaW5nCitkYXRhIHNvdXJjZTsgd3JpdGluZyBhIG1hcmtlciBwcm9jZXNzb3IgdGhhdCBjb3BlcyB3aXRoIGlucHV0IHN1c3BlbnNpb24gaXMKK25vdCBlYXN5IChjb25zaWRlciB3aGF0IGhhcHBlbnMgaWYgdGhlIG1hcmtlciBpcyBsb25nZXIgdGhhbiB5b3VyIGF2YWlsYWJsZQoraW5wdXQgYnVmZmVyKS4gIEhvd2V2ZXIsIHRoZSBzZWNvbmQgbWV0aG9kIGNvbnNlcnZlcyBtZW1vcnkgc2luY2UgdGhlIG1hcmtlcgorZGF0YSBuZWVkIG5vdCBiZSBrZXB0IGFyb3VuZCBhZnRlciBpdCdzIGJlZW4gcHJvY2Vzc2VkLgorCitGb3IgZWl0aGVyIG1ldGhvZCwgeW91J2Qgbm9ybWFsbHkgc2V0IHVwIG1hcmtlciBoYW5kbGluZyBhZnRlciBjcmVhdGluZyBhCitkZWNvbXByZXNzaW9uIG9iamVjdCBhbmQgYmVmb3JlIGNhbGxpbmcganBlZ19yZWFkX2hlYWRlcigpLCBiZWNhdXNlIHRoZQorbWFya2VycyBvZiBpbnRlcmVzdCB3aWxsIHR5cGljYWxseSBiZSBuZWFyIHRoZSBoZWFkIG9mIHRoZSBmaWxlIGFuZCBzbyB3aWxsCitiZSBzY2FubmVkIGJ5IGpwZWdfcmVhZF9oZWFkZXIuICBPbmNlIHlvdSd2ZSBlc3RhYmxpc2hlZCBhIG1hcmtlciBoYW5kbGluZworbWV0aG9kLCBpdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBsaWZlIG9mIHRoYXQgZGVjb21wcmVzc2lvbiBvYmplY3QKKyhwb3RlbnRpYWxseSBtYW55IGRhdGFzdHJlYW1zKSwgdW5sZXNzIHlvdSBjaGFuZ2UgaXQuICBNYXJrZXIgaGFuZGxpbmcgaXMKK2RldGVybWluZWQgc2VwYXJhdGVseSBmb3IgQ09NIG1hcmtlcnMgYW5kIGZvciBlYWNoIEFQUG4gbWFya2VyIGNvZGUuCisKKworVG8gc2F2ZSB0aGUgY29udGVudHMgb2Ygc3BlY2lhbCBtYXJrZXJzIGluIG1lbW9yeSwgY2FsbAorICAgICAgICBqcGVnX3NhdmVfbWFya2VycyhjaW5mbywgbWFya2VyX2NvZGUsIGxlbmd0aF9saW1pdCkKK3doZXJlIG1hcmtlcl9jb2RlIGlzIHRoZSBtYXJrZXIgdHlwZSB0byBzYXZlLCBKUEVHX0NPTSBvciBKUEVHX0FQUDArbi4KKyhUbyBhcnJhbmdlIHRvIHNhdmUgYWxsIHRoZSBzcGVjaWFsIG1hcmtlciB0eXBlcywgeW91IG5lZWQgdG8gY2FsbCB0aGlzCityb3V0aW5lIDE3IHRpbWVzLCBmb3IgQ09NIGFuZCBBUFAwLUFQUDE1LikgIElmIHRoZSBpbmNvbWluZyBtYXJrZXIgaXMgbG9uZ2VyCit0aGFuIGxlbmd0aF9saW1pdCBkYXRhIGJ5dGVzLCBvbmx5IGxlbmd0aF9saW1pdCBieXRlcyB3aWxsIGJlIHNhdmVkOyB0aGlzCitwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBhdm9pZCBjaGV3aW5nIHVwIG1lbW9yeSB3aGVuIHlvdSBvbmx5IG5lZWQgdG8gc2VlIHRoZQorZmlyc3QgZmV3IGJ5dGVzIG9mIGEgcG90ZW50aWFsbHkgbGFyZ2UgbWFya2VyLiAgSWYgeW91IHdhbnQgdG8gc2F2ZSBhbGwgdGhlCitkYXRhLCBzZXQgbGVuZ3RoX2xpbWl0IHRvIDB4RkZGRjsgdGhhdCBpcyBlbm91Z2ggc2luY2UgbWFya2VyIGxlbmd0aHMgYXJlIG9ubHkKKzE2IGJpdHMuICBBcyBhIHNwZWNpYWwgY2FzZSwgc2V0dGluZyBsZW5ndGhfbGltaXQgdG8gMCBwcmV2ZW50cyB0aGF0IG1hcmtlcgordHlwZSBmcm9tIGJlaW5nIHNhdmVkIGF0IGFsbC4gIChUaGF0IGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBpbiBmYWN0LikKKworQWZ0ZXIganBlZ19yZWFkX2hlYWRlcigpIGNvbXBsZXRlcywgeW91IGNhbiBleGFtaW5lIHRoZSBzcGVjaWFsIG1hcmtlcnMgYnkKK2ZvbGxvd2luZyB0aGUgY2luZm8tPm1hcmtlcl9saXN0IHBvaW50ZXIgY2hhaW4uICBBbGwgdGhlIHNwZWNpYWwgbWFya2VycyBpbgordGhlIGZpbGUgYXBwZWFyIGluIHRoaXMgbGlzdCwgaW4gb3JkZXIgb2YgdGhlaXIgb2NjdXJyZW5jZSBpbiB0aGUgZmlsZSAoYnV0CitvbWl0dGluZyBhbnkgbWFya2VycyBvZiB0eXBlcyB5b3UgZGlkbid0IGFzayBmb3IpLiAgQm90aCB0aGUgb3JpZ2luYWwgZGF0YQorbGVuZ3RoIGFuZCB0aGUgc2F2ZWQgZGF0YSBsZW5ndGggYXJlIHJlY29yZGVkIGZvciBlYWNoIGxpc3QgZW50cnk7IHRoZSBsYXR0ZXIKK3dpbGwgbm90IGV4Y2VlZCBsZW5ndGhfbGltaXQgZm9yIHRoZSBwYXJ0aWN1bGFyIG1hcmtlciB0eXBlLiAgTm90ZSB0aGF0IHRoZXNlCitsZW5ndGhzIGV4Y2x1ZGUgdGhlIG1hcmtlciBsZW5ndGggd29yZCwgd2hlcmVhcyB0aGUgc3RvcmVkIHJlcHJlc2VudGF0aW9uCit3aXRoaW4gdGhlIEpQRUcgZmlsZSBpbmNsdWRlcyBpdC4gIChIZW5jZSB0aGUgbWF4aW11bSBkYXRhIGxlbmd0aCBpcyByZWFsbHkKK29ubHkgNjU1MzMuKQorCitJdCBpcyBwb3NzaWJsZSB0aGF0IGFkZGl0aW9uYWwgc3BlY2lhbCBtYXJrZXJzIGFwcGVhciBpbiB0aGUgZmlsZSBiZXlvbmQgdGhlCitTT1MgbWFya2VyIGF0IHdoaWNoIGpwZWdfcmVhZF9oZWFkZXIgc3RvcHM7IGlmIHNvLCB0aGUgbWFya2VyIGxpc3Qgd2lsbCBiZQorZXh0ZW5kZWQgZHVyaW5nIHJlYWRpbmcgb2YgdGhlIHJlc3Qgb2YgdGhlIGZpbGUuICBUaGlzIGlzIG5vdCBleHBlY3RlZCB0byBiZQorY29tbW9uLCBob3dldmVyLiAgSWYgeW91IGFyZSBzaG9ydCBvbiBtZW1vcnkgeW91IG1heSB3YW50IHRvIHJlc2V0IHRoZSBsZW5ndGgKK2xpbWl0IHRvIHplcm8gZm9yIGFsbCBtYXJrZXIgdHlwZXMgYWZ0ZXIgZmluaXNoaW5nIGpwZWdfcmVhZF9oZWFkZXIsIHRvCitlbnN1cmUgdGhhdCB0aGUgbWF4X21lbW9yeV90b191c2Ugc2V0dGluZyBjYW5ub3QgYmUgZXhjZWVkZWQgZHVlIHRvIGFkZGl0aW9uCitvZiBsYXRlciBtYXJrZXJzLgorCitUaGUgbWFya2VyIGxpc3QgcmVtYWlucyBzdG9yZWQgdW50aWwgeW91IGNhbGwganBlZ19maW5pc2hfZGVjb21wcmVzcyBvcgoranBlZ19hYm9ydCwgYXQgd2hpY2ggcG9pbnQgdGhlIG1lbW9yeSBpcyBmcmVlZCBhbmQgdGhlIGxpc3QgaXMgc2V0IHRvIGVtcHR5LgorKGpwZWdfZGVzdHJveSBhbHNvIHJlbGVhc2VzIHRoZSBzdG9yYWdlLCBvZiBjb3Vyc2UuKQorCitOb3RlIHRoYXQgdGhlIGxpYnJhcnkgaXMgaW50ZXJuYWxseSBpbnRlcmVzdGVkIGluIEFQUDAgYW5kIEFQUDE0IG1hcmtlcnM7CitpZiB5b3UgdHJ5IHRvIHNldCBhIHNtYWxsIG5vbnplcm8gbGVuZ3RoIGxpbWl0IG9uIHRoZXNlIHR5cGVzLCB0aGUgbGlicmFyeQord2lsbCBzaWxlbnRseSBmb3JjZSB0aGUgbGVuZ3RoIHVwIHRvIHRoZSBtaW5pbXVtIGl0IHdhbnRzLiAgKEJ1dCB5b3UgY2FuIHNldAorYSB6ZXJvIGxlbmd0aCBsaW1pdCB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBzYXZlZCBhdCBhbGwuKSAgQWxzbywgaW4gYQorMTYtYml0IGVudmlyb25tZW50LCB0aGUgbWF4aW11bSBsZW5ndGggbGltaXQgbWF5IGJlIGNvbnN0cmFpbmVkIHRvIGxlc3MgdGhhbgorNjU1MzMgYnkgbWFsbG9jKCkgbGltaXRhdGlvbnMuICBJdCBpcyB0aGVyZWZvcmUgYmVzdCBub3QgdG8gYXNzdW1lIHRoYXQgdGhlCitlZmZlY3RpdmUgbGVuZ3RoIGxpbWl0IGlzIGV4YWN0bHkgd2hhdCB5b3Ugc2V0IGl0IHRvIGJlLgorCisKK0lmIHlvdSB3YW50IHRvIHN1cHBseSB5b3VyIG93biBtYXJrZXItcmVhZGluZyByb3V0aW5lLCB5b3UgZG8gaXQgYnkgY2FsbGluZworanBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcigpLiAgQSBtYXJrZXIgcHJvY2Vzc29yIHJvdXRpbmUgbXVzdCBoYXZlIHRoZQorc2lnbmF0dXJlCisgICAgICAgIGJvb2xlYW4ganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK0FsdGhvdWdoIHRoZSBtYXJrZXIgY29kZSBpcyBub3QgZXhwbGljaXRseSBwYXNzZWQsIHRoZSByb3V0aW5lIGNhbiBmaW5kIGl0CitpbiBjaW5mby0+dW5yZWFkX21hcmtlci4gIEF0IHRoZSB0aW1lIG9mIGNhbGwsIHRoZSBtYXJrZXIgcHJvcGVyIGhhcyBiZWVuCityZWFkIGZyb20gdGhlIGRhdGEgc291cmNlIG1vZHVsZS4gIFRoZSBwcm9jZXNzb3Igcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IKK3JlYWRpbmcgdGhlIG1hcmtlciBsZW5ndGggd29yZCBhbmQgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXIgYnl0ZXMsIGlmIGFueS4KK1JldHVybiBUUlVFIHRvIGluZGljYXRlIHN1Y2Nlc3MuICAoRkFMU0Ugc2hvdWxkIGJlIHJldHVybmVkIG9ubHkgaWYgeW91IGFyZQordXNpbmcgYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlIGFuZCBpdCB0ZWxscyB5b3UgdG8gc3VzcGVuZC4gIFNlZSB0aGUgc3RhbmRhcmQKK21hcmtlciBwcm9jZXNzb3JzIGluIGpkbWFya2VyLmMgZm9yIGFwcHJvcHJpYXRlIGNvZGluZyBtZXRob2RzIGlmIHlvdSBuZWVkIHRvCit1c2UgYSBzdXNwZW5kaW5nIGRhdGEgc291cmNlLikKKworSWYgeW91IG92ZXJyaWRlIHRoZSBkZWZhdWx0IEFQUDAgb3IgQVBQMTQgcHJvY2Vzc29ycywgaXQgaXMgdXAgdG8geW91IHRvCityZWNvZ25pemUgSkZJRiBhbmQgQWRvYmUgbWFya2VycyBpZiB5b3Ugd2FudCBjb2xvcnNwYWNlIHJlY29nbml0aW9uIHRvIG9jY3VyCitwcm9wZXJseS4gIFdlIHJlY29tbWVuZCBjb3B5aW5nIGFuZCBleHRlbmRpbmcgdGhlIGRlZmF1bHQgcHJvY2Vzc29ycyBpZiB5b3UKK3dhbnQgdG8gZG8gdGhhdC4gIChBIGJldHRlciBpZGVhIGlzIHRvIHNhdmUgdGhlc2UgbWFya2VyIHR5cGVzIGZvciBsYXRlcgorZXhhbWluYXRpb24gYnkgY2FsbGluZyBqcGVnX3NhdmVfbWFya2VycygpOyB0aGF0IG1ldGhvZCBkb2Vzbid0IGludGVyZmVyZQord2l0aCB0aGUgbGlicmFyeSdzIG93biBwcm9jZXNzaW5nIG9mIHRoZXNlIG1hcmtlcnMuKQorCitqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yKCkgYW5kIGpwZWdfc2F2ZV9tYXJrZXJzKCkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQorLS0tIGlmIHlvdSBjYWxsIG9uZSBpdCBvdmVycmlkZXMgYW55IHByZXZpb3VzIGNhbGwgdG8gdGhlIG90aGVyLCBmb3IgdGhlCitwYXJ0aWN1bGFyIG1hcmtlciB0eXBlIHNwZWNpZmllZC4KKworQSBzaW1wbGUgZXhhbXBsZSBvZiBhbiBleHRlcm5hbCBDT00gcHJvY2Vzc29yIGNhbiBiZSBmb3VuZCBpbiBkanBlZy5jLgorQWxzbywgc2VlIGpwZWd0cmFuLmMgZm9yIGFuIGV4YW1wbGUgb2YgdXNpbmcganBlZ19zYXZlX21hcmtlcnMuCisKKworSUNDIHByb2ZpbGVzCistLS0tLS0tLS0tLS0KKworVHdvIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgSW50ZXJuYXRpb25hbCBDb2xvcgorQ29uc29ydGl1bSAoSUNDKSBkZXZpY2UgcHJvZmlsZXMgZW1iZWRkZWQgaW4gSkZJRiBKUEVHIGltYWdlIGZpbGVzOgorCisgICAgICAgIHZvaWQganBlZ193cml0ZV9pY2NfcHJvZmlsZSAoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSk9DVEVUICppY2NfZGF0YV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGljY19kYXRhX2xlbik7CisgICAgICAgIGJvb2xlYW4ganBlZ19yZWFkX2ljY19wcm9maWxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSk9DVEVUICoqaWNjX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppY2NfZGF0YV9sZW4pOworCitUaGUgSUNDIGhhcyBkZWZpbmVkIGEgc3RhbmRhcmQgZm9yIGluY2x1ZGluZyBzdWNoIGRhdGEgaW4gSlBFRyAiQVBQMiIgbWFya2Vycy4KK1RoZSBhZm9yZW1lbnRpb25lZCBmdW5jdGlvbnMgZG8gbm90IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIGludGVybmFsIHN0cnVjdHVyZQorb2YgdGhlIElDQyBwcm9maWxlIGRhdGE7IHRoZXkganVzdCBrbm93IGhvdyB0byBlbWJlZCB0aGUgcHJvZmlsZSBkYXRhIGludG8gYQorSlBFRyBmaWxlIHdoaWxlIHdyaXRpbmcgaXQsIG9yIHRvIGV4dHJhY3QgdGhlIHByb2ZpbGUgZGF0YSBmcm9tIGEgSlBFRyBmaWxlCit3aGlsZSByZWFkaW5nIGl0LgorCitqcGVnX3dyaXRlX2ljY19wcm9maWxlKCkgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgYW5kCitiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8ganBlZ193cml0ZV9zY2FubGluZXMoKSBvciBqcGVnX3dyaXRlX3Jhd19kYXRhKCkuICBUaGlzCitvcmRlcmluZyBlbnN1cmVzIHRoYXQgdGhlIEFQUDIgbWFya2VyKHMpIHdpbGwgYXBwZWFyIGFmdGVyIHRoZSBTT0kgYW5kIEpGSUYgb3IKK0Fkb2JlIG1hcmtlcnMsIGJ1dCBiZWZvcmUgYWxsIG90aGVyIGRhdGEuCisKK2pwZWdfcmVhZF9pY2NfcHJvZmlsZSgpIHJldHVybnMgVFJVRSBpZiBhbiBJQ0MgcHJvZmlsZSB3YXMgZm91bmQgYW5kIEZBTFNFCitvdGhlcndpc2UuICBJZiBhbiBJQ0MgcHJvZmlsZSB3YXMgZm91bmQsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgYQorbWVtb3J5IHJlZ2lvbiBjb250YWluaW5nIHRoZSBwcm9maWxlIGFuZCB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnkKK3JlZ2lvbiBpbiAqaWNjX2RhdGFfcHRyLCBhcyB3ZWxsIGFzIHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiBpbiAqaWNjX2RhdGFfbGVuLgorVGhpcyBtZW1vcnkgcmVnaW9uIGlzIGFsbG9jYXRlZCBieSB0aGUgbGlicmFyeSB1c2luZyBtYWxsb2MoKSBhbmQgbXVzdCBiZSBmcmVlZAorYnkgdGhlIGNhbGxlciB1c2luZyBmcmVlKCkgd2hlbiB0aGUgbWVtb3J5IHJlZ2lvbiBpcyBubyBsb25nZXIgbmVlZGVkLiAgQ2FsbGVycword2lzaGluZyB0byB1c2UganBlZ19yZWFkX2ljY19wcm9maWxlKCkgbXVzdCBjYWxsCisKKyAgICAgICAganBlZ19zYXZlX21hcmtlcnMoY2luZm8sIEpQRUdfQVBQMCArIDIsIDB4RkZGRik7CisKK3ByaW9yIHRvIGNhbGxpbmcganBlZ19yZWFkX2hlYWRlcigpLiAganBlZ19yZWFkX2ljY19wcm9maWxlKCkgY2FuIGJlIGNhbGxlZCBhdAorYW55IHBvaW50IGJldHdlZW4ganBlZ19yZWFkX2hlYWRlcigpIGFuZCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkuCisKKworUmF3IChkb3duc2FtcGxlZCkgaW1hZ2UgZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIGFwcGxpY2F0aW9ucyBuZWVkIHRvIHN1cHBseSBhbHJlYWR5LWRvd25zYW1wbGVkIGltYWdlIGRhdGEgdG8gdGhlIEpQRUcKK2NvbXByZXNzb3IsIG9yIHRvIHJlY2VpdmUgcmF3IGRvd25zYW1wbGVkIGRhdGEgZnJvbSB0aGUgZGVjb21wcmVzc29yLiAgVGhlCitsaWJyYXJ5IHN1cHBvcnRzIHRoaXMgcmVxdWlyZW1lbnQgYnkgYWxsb3dpbmcgdGhlIGFwcGxpY2F0aW9uIHRvIHdyaXRlIG9yCityZWFkIHJhdyBkYXRhLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBwcmVwcm9jZXNzaW5nIG9yIHBvc3Rwcm9jZXNzaW5nIHN0ZXBzLgorVGhlIGludGVyZmFjZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhbmRhcmQgb25lIGFuZCBpcyBzb21ld2hhdCBoYXJkZXIgdG8KK3VzZS4gIElmIHlvdXIgaW50ZXJlc3QgaXMgbWVyZWx5IGluIGJ5cGFzc2luZyBjb2xvciBjb252ZXJzaW9uLCB3ZSByZWNvbW1lbmQKK3RoYXQgeW91IHVzZSB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIGFuZCBzaW1wbHkgc2V0IGpwZWdfY29sb3Jfc3BhY2UgPQoraW5fY29sb3Jfc3BhY2UgKG9yIGpwZWdfY29sb3Jfc3BhY2UgPSBvdXRfY29sb3Jfc3BhY2UgZm9yIGRlY29tcHJlc3Npb24pLgorVGhlIG1lY2hhbmlzbSBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uIGlzIG5lY2Vzc2FyeSBvbmx5IHRvIHN1cHBseSBvcgorcmVjZWl2ZSBkb3duc2FtcGxlZCBpbWFnZSBkYXRhLCBpbiB3aGljaCBub3QgYWxsIGNvbXBvbmVudHMgaGF2ZSB0aGUgc2FtZQorZGltZW5zaW9ucy4KKworCitUbyBjb21wcmVzcyByYXcgZGF0YSwgeW91IG11c3Qgc3VwcGx5IHRoZSBkYXRhIGluIHRoZSBjb2xvcnNwYWNlIHRvIGJlIHVzZWQKK2luIHRoZSBKUEVHIGZpbGUgKHBsZWFzZSByZWFkIHRoZSBlYXJsaWVyIHNlY3Rpb24gb24gU3BlY2lhbCBjb2xvciBzcGFjZXMpCithbmQgZG93bnNhbXBsZWQgdG8gdGhlIHNhbXBsaW5nIGZhY3RvcnMgc3BlY2lmaWVkIGluIHRoZSBKUEVHIHBhcmFtZXRlcnMuCitZb3UgbXVzdCBzdXBwbHkgdGhlIGRhdGEgaW4gdGhlIGZvcm1hdCB1c2VkIGludGVybmFsbHkgYnkgdGhlIEpQRUcgbGlicmFyeSwKK25hbWVseSBhIEpTQU1QSU1BR0UgYXJyYXkuICBUaGlzIGlzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHR3by1kaW1lbnNpb25hbAorYXJyYXlzLCBlYWNoIG9mIHR5cGUgSlNBTVBBUlJBWS4gIEVhY2ggMi1EIGFycmF5IGhvbGRzIHRoZSB2YWx1ZXMgZm9yIG9uZQorY29sb3IgY29tcG9uZW50LiAgVGhpcyBzdHJ1Y3R1cmUgaXMgbmVjZXNzYXJ5IHNpbmNlIHRoZSBjb21wb25lbnRzIGFyZSBvZgorZGlmZmVyZW50IHNpemVzLiAgSWYgdGhlIGltYWdlIGRpbWVuc2lvbnMgYXJlIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBNQ1Ugc2l6ZSwKK3lvdSBtdXN0IGFsc28gcGFkIHRoZSBkYXRhIGNvcnJlY3RseSAodXN1YWxseSwgdGhpcyBpcyBkb25lIGJ5IHJlcGxpY2F0aW5nCit0aGUgbGFzdCBjb2x1bW4gYW5kL29yIHJvdykuICBUaGUgZGF0YSBtdXN0IGJlIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIGEgRENUCitibG9jayBpbiBlYWNoIGNvbXBvbmVudDogdGhhdCBpcywgZWFjaCBkb3duc2FtcGxlZCByb3cgbXVzdCBjb250YWluIGEKK211bHRpcGxlIG9mIDggdmFsaWQgc2FtcGxlcywgYW5kIHRoZXJlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IHNhbXBsZSByb3dzCitmb3IgZWFjaCBjb21wb25lbnQuICAoRm9yIGFwcGxpY2F0aW9ucyBzdWNoIGFzIGNvbnZlcnNpb24gb2YgZGlnaXRhbCBUVgoraW1hZ2VzLCB0aGUgc3RhbmRhcmQgaW1hZ2Ugc2l6ZSBpcyB1c3VhbGx5IGEgbXVsdGlwbGUgb2YgdGhlIERDVCBibG9jayBzaXplLAorc28gdGhhdCBubyBwYWRkaW5nIG5lZWQgYWN0dWFsbHkgYmUgZG9uZS4pCisKK1RoZSBwcm9jZWR1cmUgZm9yIGNvbXByZXNzaW9uIG9mIHJhdyBkYXRhIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBub3JtYWwKK2NvbXByZXNzaW9uLCBleGNlcHQgdGhhdCB5b3UgY2FsbCBqcGVnX3dyaXRlX3Jhd19kYXRhKCkgaW4gcGxhY2Ugb2YKK2pwZWdfd3JpdGVfc2NhbmxpbmVzKCkuICBCZWZvcmUgY2FsbGluZyBqcGVnX3N0YXJ0X2NvbXByZXNzKCksIHlvdSBtdXN0IGRvCit0aGUgZm9sbG93aW5nOgorICAqIFNldCBjaW5mby0+cmF3X2RhdGFfaW4gdG8gVFJVRS4gIChJdCBpcyBzZXQgRkFMU0UgYnkganBlZ19zZXRfZGVmYXVsdHMoKS4pCisgICAgVGhpcyBub3RpZmllcyB0aGUgbGlicmFyeSB0aGF0IHlvdSB3aWxsIGJlIHN1cHBseWluZyByYXcgZGF0YS4KKyAgKiBFbnN1cmUganBlZ19jb2xvcl9zcGFjZSBpcyBjb3JyZWN0IC0tLSBhbiBleHBsaWNpdCBqcGVnX3NldF9jb2xvcnNwYWNlKCkKKyAgICBjYWxsIGlzIGEgZ29vZCBpZGVhLiAgTm90ZSB0aGF0IHNpbmNlIGNvbG9yIGNvbnZlcnNpb24gaXMgYnlwYXNzZWQsCisgICAgaW5fY29sb3Jfc3BhY2UgaXMgaWdub3JlZCwgZXhjZXB0IHRoYXQganBlZ19zZXRfZGVmYXVsdHMoKSB1c2VzIGl0IHRvCisgICAgY2hvb3NlIHRoZSBkZWZhdWx0IGpwZWdfY29sb3Jfc3BhY2Ugc2V0dGluZy4KKyAgKiBFbnN1cmUgdGhlIHNhbXBsaW5nIGZhY3RvcnMsIGNpbmZvLT5jb21wX2luZm9baV0uaF9zYW1wX2ZhY3RvciBhbmQKKyAgICBjaW5mby0+Y29tcF9pbmZvW2ldLnZfc2FtcF9mYWN0b3IsIGFyZSBjb3JyZWN0LiAgU2luY2UgdGhlc2UgaW5kaWNhdGUgdGhlCisgICAgZGltZW5zaW9ucyBvZiB0aGUgZGF0YSB5b3UgYXJlIHN1cHBseWluZywgaXQncyB3aXNlIHRvIHNldCB0aGVtCisgICAgZXhwbGljaXRseSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgdGhlIGxpYnJhcnkncyBkZWZhdWx0cyBhcmUgd2hhdCB5b3Ugd2FudC4KKworVG8gcGFzcyByYXcgZGF0YSB0byB0aGUgbGlicmFyeSwgY2FsbCBqcGVnX3dyaXRlX3Jhd19kYXRhKCkgaW4gcGxhY2Ugb2YKK2pwZWdfd3JpdGVfc2NhbmxpbmVzKCkuICBUaGUgdHdvIHJvdXRpbmVzIHdvcmsgc2ltaWxhcmx5IGV4Y2VwdCB0aGF0CitqcGVnX3dyaXRlX3Jhd19kYXRhIHRha2VzIGEgSlNBTVBJTUFHRSBkYXRhIGFycmF5IHJhdGhlciB0aGFuIEpTQU1QQVJSQVkuCitUaGUgc2NhbmxpbmVzIGNvdW50IHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBqcGVnX3dyaXRlX3Jhd19kYXRhIGlzCittZWFzdXJlZCBpbiB0ZXJtcyBvZiB0aGUgY29tcG9uZW50IHdpdGggdGhlIGxhcmdlc3Qgdl9zYW1wX2ZhY3Rvci4KKworanBlZ193cml0ZV9yYXdfZGF0YSgpIHByb2Nlc3NlcyBvbmUgTUNVIHJvdyBwZXIgY2FsbCwgd2hpY2ggaXMgdG8gc2F5Cit2X3NhbXBfZmFjdG9yKkRDVFNJWkUgc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQuICBUaGUgcGFzc2VkIG51bV9saW5lcwordmFsdWUgbXVzdCBiZSBhdCBsZWFzdCBtYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFLCBhbmQgdGhlIHJldHVybiB2YWx1ZSB3aWxsCitiZSBleGFjdGx5IHRoYXQgYW1vdW50IChvciBwb3NzaWJseSBzb21lIG11bHRpcGxlIG9mIHRoYXQgYW1vdW50LCBpbiBmdXR1cmUKK2xpYnJhcnkgdmVyc2lvbnMpLiAgVGhpcyBpcyB0cnVlIGV2ZW4gb24gdGhlIGxhc3QgY2FsbCBhdCB0aGUgYm90dG9tIG9mIHRoZQoraW1hZ2U7IGRvbid0IGZvcmdldCB0byBwYWQgeW91ciBkYXRhIGFzIG5lY2Vzc2FyeS4KKworVGhlIHJlcXVpcmVkIGRpbWVuc2lvbnMgb2YgdGhlIHN1cHBsaWVkIGRhdGEgY2FuIGJlIGNvbXB1dGVkIGZvciBlYWNoCitjb21wb25lbnQgYXMKKyAgICAgICAgY2luZm8tPmNvbXBfaW5mb1tpXS53aWR0aF9pbl9ibG9ja3MqRENUU0laRSAgc2FtcGxlcyBwZXIgcm93CisgICAgICAgIGNpbmZvLT5jb21wX2luZm9baV0uaGVpZ2h0X2luX2Jsb2NrcypEQ1RTSVpFIHJvd3MgaW4gaW1hZ2UKK2FmdGVyIGpwZWdfc3RhcnRfY29tcHJlc3MoKSBoYXMgaW5pdGlhbGl6ZWQgdGhvc2UgZmllbGRzLiAgSWYgdGhlIHZhbGlkIGRhdGEKK2lzIHNtYWxsZXIgdGhhbiB0aGlzLCBpdCBtdXN0IGJlIHBhZGRlZCBhcHByb3ByaWF0ZWx5LiAgRm9yIHNvbWUgc2FtcGxpbmcKK2ZhY3RvcnMgYW5kIGltYWdlIHNpemVzLCBhZGRpdGlvbmFsIGR1bW15IERDVCBibG9ja3MgYXJlIGluc2VydGVkIHRvIG1ha2UKK3RoZSBpbWFnZSBhIG11bHRpcGxlIG9mIHRoZSBNQ1UgZGltZW5zaW9ucy4gIFRoZSBsaWJyYXJ5IGNyZWF0ZXMgc3VjaCBkdW1teQorYmxvY2tzIGl0c2VsZjsgaXQgZG9lcyBub3QgcmVhZCB0aGVtIGZyb20geW91ciBzdXBwbGllZCBkYXRhLiAgVGhlcmVmb3JlIHlvdQorbmVlZCBuZXZlciBwYWQgYnkgbW9yZSB0aGFuIERDVFNJWkUgc2FtcGxlcy4gIEFuIGV4YW1wbGUgbWF5IGhlbHAgaGVyZS4KK0Fzc3VtZSAyaDJ2IGRvd25zYW1wbGluZyBvZiBZQ2JDciBkYXRhLCB0aGF0IGlzCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IDIgICAgICAgICAgIGZvciBZCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3RvciA9IDIKKyAgICAgICAgY2luZm8tPmNvbXBfaW5mb1sxXS5oX3NhbXBfZmFjdG9yID0gMSAgICAgICAgICAgZm9yIENiCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0udl9zYW1wX2ZhY3RvciA9IDEKKyAgICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5oX3NhbXBfZmFjdG9yID0gMSAgICAgICAgICAgZm9yIENyCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMl0udl9zYW1wX2ZhY3RvciA9IDEKK2FuZCBzdXBwb3NlIHRoYXQgdGhlIG5vbWluYWwgaW1hZ2UgZGltZW5zaW9ucyAoY2luZm8tPmltYWdlX3dpZHRoIGFuZAorY2luZm8tPmltYWdlX2hlaWdodCkgYXJlIDEwMXgxMDEgcGl4ZWxzLiAgVGhlbiBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgd2lsbAorY29tcHV0ZSBkb3duc2FtcGxlZF93aWR0aCA9IDEwMSBhbmQgd2lkdGhfaW5fYmxvY2tzID0gMTMgZm9yIFksCitkb3duc2FtcGxlZF93aWR0aCA9IDUxIGFuZCB3aWR0aF9pbl9ibG9ja3MgPSA3IGZvciBDYiBhbmQgQ3IgKGFuZCB0aGUgc2FtZQorZm9yIHRoZSBoZWlnaHQgZmllbGRzKS4gIFlvdSBtdXN0IHBhZCB0aGUgWSBkYXRhIHRvIGF0IGxlYXN0IDEzKjggPSAxMDQKK2NvbHVtbnMgYW5kIHJvd3MsIHRoZSBDYi9DciBkYXRhIHRvIGF0IGxlYXN0IDcqOCA9IDU2IGNvbHVtbnMgYW5kIHJvd3MuICBUaGUKK01DVSBoZWlnaHQgaXMgbWF4X3Zfc2FtcF9mYWN0b3IgPSAyIERDVCByb3dzIHNvIHlvdSBtdXN0IHBhc3MgYXQgbGVhc3QgMTYKK3NjYW5saW5lcyBvbiBlYWNoIGNhbGwgdG8ganBlZ193cml0ZV9yYXdfZGF0YSgpLCB3aGljaCBpcyB0byBzYXkgMTYgYWN0dWFsCitzYW1wbGUgcm93cyBvZiBZIGFuZCA4IGVhY2ggb2YgQ2IgYW5kIENyLiAgQSB0b3RhbCBvZiA3IE1DVSByb3dzIGFyZSBuZWVkZWQsCitzbyB5b3UgbXVzdCBwYXNzIGEgdG90YWwgb2YgNyoxNiA9IDExMiAic2NhbmxpbmVzIi4gIFRoZSBsYXN0IERDVCBibG9jayByb3cKK29mIFkgZGF0YSBpcyBkdW1teSwgc28gaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB5b3UgcGFzcyBmb3IgaXQgaW4gdGhlIGRhdGEKK2FycmF5cywgYnV0IHRoZSBzY2FubGluZXMgY291bnQgbXVzdCB0b3RhbCB1cCB0byAxMTIgc28gdGhhdCBhbGwgb2YgdGhlIENiCithbmQgQ3IgZGF0YSBnZXRzIHBhc3NlZC4KKworT3V0cHV0IHN1c3BlbnNpb24gaXMgc3VwcG9ydGVkIHdpdGggcmF3LWRhdGEgY29tcHJlc3Npb246IGlmIHRoZSBkYXRhCitkZXN0aW5hdGlvbiBtb2R1bGUgc3VzcGVuZHMsIGpwZWdfd3JpdGVfcmF3X2RhdGEoKSB3aWxsIHJldHVybiAwLgorSW4gdGhpcyBjYXNlIHRoZSBzYW1lIGRhdGEgcm93cyBtdXN0IGJlIHBhc3NlZCBhZ2FpbiBvbiB0aGUgbmV4dCBjYWxsLgorCisKK0RlY29tcHJlc3Npb24gd2l0aCByYXcgZGF0YSBvdXRwdXQgaW1wbGllcyBieXBhc3NpbmcgYWxsIHBvc3Rwcm9jZXNzaW5nOgoreW91IGNhbm5vdCBhc2sgZm9yIHJlc2NhbGluZyBvciBjb2xvciBxdWFudGl6YXRpb24sIGZvciBpbnN0YW5jZS4gIE1vcmUKK3NlcmlvdXNseSwgeW91IG11c3QgZGVhbCB3aXRoIHRoZSBjb2xvciBzcGFjZSBhbmQgc2FtcGxpbmcgZmFjdG9ycyBwcmVzZW50IGluCit0aGUgaW5jb21pbmcgZmlsZS4gIElmIHlvdXIgYXBwbGljYXRpb24gb25seSBoYW5kbGVzLCBzYXksIDJoMXYgWUNiQ3IgZGF0YSwKK3lvdSBtdXN0IGNoZWNrIGZvciBhbmQgZmFpbCBvbiBvdGhlciBjb2xvciBzcGFjZXMgb3Igb3RoZXIgc2FtcGxpbmcgZmFjdG9ycy4KK1RoZSBsaWJyYXJ5IHdpbGwgbm90IGNvbnZlcnQgdG8gYSBkaWZmZXJlbnQgY29sb3Igc3BhY2UgZm9yIHlvdS4KKworVG8gb2J0YWluIHJhdyBkYXRhIG91dHB1dCwgc2V0IGNpbmZvLT5yYXdfZGF0YV9vdXQgPSBUUlVFIGJlZm9yZQoranBlZ19zdGFydF9kZWNvbXByZXNzKCkgKGl0IGlzIHNldCBGQUxTRSBieSBqcGVnX3JlYWRfaGVhZGVyKCkpLiAgQmUgc3VyZSB0bwordmVyaWZ5IHRoYXQgdGhlIGNvbG9yIHNwYWNlIGFuZCBzYW1wbGluZyBmYWN0b3JzIGFyZSBvbmVzIHlvdSBjYW4gaGFuZGxlLgorVGhlbiBjYWxsIGpwZWdfcmVhZF9yYXdfZGF0YSgpIGluIHBsYWNlIG9mIGpwZWdfcmVhZF9zY2FubGluZXMoKS4gIFRoZQorZGVjb21wcmVzc2lvbiBwcm9jZXNzIGlzIG90aGVyd2lzZSB0aGUgc2FtZSBhcyB1c3VhbC4KKworanBlZ19yZWFkX3Jhd19kYXRhKCkgcmV0dXJucyBvbmUgTUNVIHJvdyBwZXIgY2FsbCwgYW5kIHRodXMgeW91IG11c3QgcGFzcyBhCitidWZmZXIgb2YgYXQgbGVhc3QgbWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSBzY2FubGluZXMgKHNjYW5saW5lIGNvdW50aW5nIGlzCit0aGUgc2FtZSBhcyBmb3IgcmF3LWRhdGEgY29tcHJlc3Npb24pLiAgVGhlIGJ1ZmZlciB5b3UgcGFzcyBtdXN0IGJlIGxhcmdlCitlbm91Z2ggdG8gaG9sZCB0aGUgYWN0dWFsIGRhdGEgcGx1cyBwYWRkaW5nIHRvIERDVC1ibG9jayBib3VuZGFyaWVzLiAgQXMgd2l0aAorY29tcHJlc3Npb24sIGFueSBlbnRpcmVseSBkdW1teSBEQ1QgYmxvY2tzIGFyZSBub3QgcHJvY2Vzc2VkIHNvIHlvdSBuZWVkIG5vdAorYWxsb2NhdGUgc3BhY2UgZm9yIHRoZW0sIGJ1dCB0aGUgdG90YWwgc2NhbmxpbmUgY291bnQgaW5jbHVkZXMgdGhlbS4gIFRoZQorYWJvdmUgZXhhbXBsZSBvZiBjb21wdXRpbmcgYnVmZmVyIGRpbWVuc2lvbnMgZm9yIHJhdy1kYXRhIGNvbXByZXNzaW9uIGlzCitlcXVhbGx5IHZhbGlkIGZvciBkZWNvbXByZXNzaW9uLgorCitJbnB1dCBzdXNwZW5zaW9uIGlzIHN1cHBvcnRlZCB3aXRoIHJhdy1kYXRhIGRlY29tcHJlc3Npb246IGlmIHRoZSBkYXRhIHNvdXJjZQorbW9kdWxlIHN1c3BlbmRzLCBqcGVnX3JlYWRfcmF3X2RhdGEoKSB3aWxsIHJldHVybiAwLiAgWW91IGNhbiBhbHNvIHVzZQorYnVmZmVyZWQtaW1hZ2UgbW9kZSB0byByZWFkIHJhdyBkYXRhIGluIG11bHRpcGxlIHBhc3Nlcy4KKworCitSZWFsbHkgcmF3IGRhdGE6IERDVCBjb2VmZmljaWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyBwb3NzaWJsZSB0byByZWFkIG9yIHdyaXRlIHRoZSBjb250ZW50cyBvZiBhIEpQRUcgZmlsZSBhcyByYXcgRENUCitjb2VmZmljaWVudHMuICBUaGlzIGZhY2lsaXR5IGlzIG1haW5seSBpbnRlbmRlZCBmb3IgdXNlIGluIGxvc3NsZXNzCit0cmFuc2NvZGluZyBiZXR3ZWVuIGRpZmZlcmVudCBKUEVHIGZpbGUgZm9ybWF0cy4gIE90aGVyIHBvc3NpYmxlIGFwcGxpY2F0aW9ucworaW5jbHVkZSBsb3NzbGVzcyBjcm9wcGluZyBvZiBhIEpQRUcgaW1hZ2UsIGxvc3NsZXNzIHJlYXNzZW1ibHkgb2YgYQorbXVsdGktc3RyaXAgb3IgbXVsdGktdGlsZSBUSUZGL0pQRUcgZmlsZSBpbnRvIGEgc2luZ2xlIEpQRUcgZGF0YXN0cmVhbSwgZXRjLgorCitUbyByZWFkIHRoZSBjb250ZW50cyBvZiBhIEpQRUcgZmlsZSBhcyBEQ1QgY29lZmZpY2llbnRzLCBvcGVuIHRoZSBmaWxlIGFuZCBkbworanBlZ19yZWFkX2hlYWRlcigpIGFzIHVzdWFsLiAgQnV0IGluc3RlYWQgb2YgY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKQorYW5kIGpwZWdfcmVhZF9zY2FubGluZXMoKSwgY2FsbCBqcGVnX3JlYWRfY29lZmZpY2llbnRzKCkuICBUaGlzIHdpbGwgcmVhZCB0aGUKK2VudGlyZSBpbWFnZSBpbnRvIGEgc2V0IG9mIHZpcnR1YWwgY29lZmZpY2llbnQtYmxvY2sgYXJyYXlzLCBvbmUgYXJyYXkgcGVyCitjb21wb25lbnQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB2aXJ0dWFsLWFycmF5CitkZXNjcmlwdG9ycy4gIEVhY2ggdmlydHVhbCBhcnJheSBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdXNpbmcgdGhlIEpQRUcKK21lbW9yeSBtYW5hZ2VyJ3MgYWNjZXNzX3ZpcnRfYmFycmF5IG1ldGhvZCAoc2VlIE1lbW9yeSBtYW5hZ2VtZW50LCBiZWxvdywKK2FuZCBhbHNvIHJlYWQgc3RydWN0dXJlLnR4dCdzIGRpc2N1c3Npb24gb2YgdmlydHVhbCBhcnJheSBoYW5kbGluZykuICBPciwKK2ZvciBzaW1wbGUgdHJhbnNjb2RpbmcgdG8gYSBkaWZmZXJlbnQgSlBFRyBmaWxlIGZvcm1hdCwgdGhlIGFycmF5IGxpc3QgY2FuCitqdXN0IGJlIGhhbmRlZCBkaXJlY3RseSB0byBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpLgorCitFYWNoIGJsb2NrIGluIHRoZSBibG9jayBhcnJheXMgY29udGFpbnMgcXVhbnRpemVkIGNvZWZmaWNpZW50IHZhbHVlcyBpbgorbm9ybWFsIGFycmF5IG9yZGVyIChub3QgSlBFRyB6aWd6YWcgb3JkZXIpLiAgVGhlIGJsb2NrIGFycmF5cyBjb250YWluIG9ubHkKK0RDVCBibG9ja3MgY29udGFpbmluZyByZWFsIGRhdGE7IGFueSBlbnRpcmVseS1kdW1teSBibG9ja3MgYWRkZWQgdG8gZmlsbCBvdXQKK2ludGVybGVhdmVkIE1DVXMgYXQgdGhlIHJpZ2h0IG9yIGJvdHRvbSBlZGdlcyBvZiB0aGUgaW1hZ2UgYXJlIGRpc2NhcmRlZAorZHVyaW5nIHJlYWRpbmcgYW5kIGFyZSBub3Qgc3RvcmVkIGluIHRoZSBibG9jayBhcnJheXMuICAoVGhlIHNpemUgb2YgZWFjaAorYmxvY2sgYXJyYXkgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgd2lkdGhfaW5fYmxvY2tzIGFuZCBoZWlnaHRfaW5fYmxvY2tzCitmaWVsZHMgb2YgdGhlIGNvbXBvbmVudCdzIGNvbXBfaW5mbyBlbnRyeS4pICBUaGlzIGlzIGFsc28gdGhlIGRhdGEgZm9ybWF0CitleHBlY3RlZCBieSBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpLgorCitXaGVuIHlvdSBhcmUgZG9uZSB1c2luZyB0aGUgdmlydHVhbCBhcnJheXMsIGNhbGwganBlZ19maW5pc2hfZGVjb21wcmVzcygpCit0byByZWxlYXNlIHRoZSBhcnJheSBzdG9yYWdlIGFuZCByZXR1cm4gdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0IHRvIGFuIGlkbGUKK3N0YXRlOyBvciBqdXN0IGNhbGwganBlZ19kZXN0cm95KCkgaWYgeW91IGRvbid0IG5lZWQgdG8gcmV1c2UgdGhlIG9iamVjdC4KKworSWYgeW91IHVzZSBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UsIGpwZWdfcmVhZF9jb2VmZmljaWVudHMoKSB3aWxsIHJldHVybgorTlVMTCBpZiBpdCBpcyBmb3JjZWQgdG8gc3VzcGVuZDsgYSBub24tTlVMTCByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24uICBZb3UgbmVlZCBub3QgdGVzdCBmb3IgYSBOVUxMIHJldHVybiB2YWx1ZSB3aGVuIHVzaW5nIGEKK25vbi1zdXNwZW5kaW5nIGRhdGEgc291cmNlLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwganBlZ19yZWFkX2NvZWZmaWNpZW50cygpIHRvIG9idGFpbiBhY2Nlc3MgdG8gdGhlCitkZWNvZGVyJ3MgY29lZmZpY2llbnQgYXJyYXlzIGR1cmluZyBhIG5vcm1hbCBkZWNvZGUgY3ljbGUgaW4gYnVmZmVyZWQtaW1hZ2UKK21vZGUuICBUaGlzIGZyYW1taXNoIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgcHJvZ3Jlc3NpdmVseSBkaXNwbGF5aW5nIGFuIGluY29taW5nCitpbWFnZSBhbmQgdGhlbiByZS1lbmNvZGluZyBpdCB3aXRob3V0IGxvc3MuICBUbyBkbyB0aGlzLCBkZWNvZGUgaW4gYnVmZmVyZWQtCitpbWFnZSBtb2RlIGFzIGRpc2N1c3NlZCBwcmV2aW91c2x5LCB0aGVuIGNhbGwganBlZ19yZWFkX2NvZWZmaWNpZW50cygpIGFmdGVyCit0aGUgbGFzdCBqcGVnX2ZpbmlzaF9vdXRwdXQoKSBjYWxsLiAgVGhlIGFycmF5cyB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgeW91ciB1c2UKK3VudGlsIHlvdSBjYWxsIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoKS4KKworCitUbyB3cml0ZSB0aGUgY29udGVudHMgb2YgYSBKUEVHIGZpbGUgYXMgRENUIGNvZWZmaWNpZW50cywgeW91IG11c3QgcHJvdmlkZQordGhlIERDVCBjb2VmZmljaWVudHMgc3RvcmVkIGluIHZpcnR1YWwgYmxvY2sgYXJyYXlzLiAgWW91IGNhbiBlaXRoZXIgcGFzcworYmxvY2sgYXJyYXlzIHJlYWQgZnJvbSBhbiBpbnB1dCBKUEVHIGZpbGUgYnkganBlZ19yZWFkX2NvZWZmaWNpZW50cygpLCBvcgorYWxsb2NhdGUgdmlydHVhbCBhcnJheXMgZnJvbSB0aGUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QgYW5kIGZpbGwgdGhlbQoreW91cnNlbGYuICBJbiBlaXRoZXIgY2FzZSwganBlZ193cml0ZV9jb2VmZmljaWVudHMoKSBpcyBzdWJzdGl0dXRlZCBmb3IKK2pwZWdfc3RhcnRfY29tcHJlc3MoKSBhbmQganBlZ193cml0ZV9zY2FubGluZXMoKS4gIFRodXMgdGhlIHNlcXVlbmNlIGlzCisgICogQ3JlYXRlIGNvbXByZXNzaW9uIG9iamVjdAorICAqIFNldCBhbGwgY29tcHJlc3Npb24gcGFyYW1ldGVycyBhcyBuZWNlc3NhcnkKKyAgKiBSZXF1ZXN0IHZpcnR1YWwgYXJyYXlzIGlmIG5lZWRlZAorICAqIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKCkKKyAgKiBqcGVnX2ZpbmlzaF9jb21wcmVzcygpCisgICogRGVzdHJveSBvciByZS11c2UgY29tcHJlc3Npb24gb2JqZWN0CitqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpIGlzIHBhc3NlZCBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdmlydHVhbCBibG9jaworYXJyYXkgZGVzY3JpcHRvcnM7IHRoZSBudW1iZXIgb2YgYXJyYXlzIGlzIGVxdWFsIHRvIGNpbmZvLm51bV9jb21wb25lbnRzLgorCitUaGUgdmlydHVhbCBhcnJheXMgbmVlZCBvbmx5IGhhdmUgYmVlbiByZXF1ZXN0ZWQsIG5vdCByZWFsaXplZCwgYmVmb3JlCitqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpIGlzIGNhbGxlZC4gIEEgc2lkZS1lZmZlY3Qgb2YKK2pwZWdfd3JpdGVfY29lZmZpY2llbnRzKCkgaXMgdG8gcmVhbGl6ZSBhbnkgdmlydHVhbCBhcnJheXMgdGhhdCBoYXZlIGJlZW4KK3JlcXVlc3RlZCBmcm9tIHRoZSBjb21wcmVzc2lvbiBvYmplY3QncyBtZW1vcnkgbWFuYWdlci4gIFRodXMsIHdoZW4gb2J0YWluaW5nCit0aGUgdmlydHVhbCBhcnJheXMgZnJvbSB0aGUgY29tcHJlc3Npb24gb2JqZWN0LCB5b3Ugc2hvdWxkIGZpbGwgdGhlIGFycmF5cworYWZ0ZXIgY2FsbGluZyBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpLiAgVGhlIGRhdGEgaXMgYWN0dWFsbHkgd3JpdHRlbiBvdXQKK3doZW4geW91IGNhbGwganBlZ19maW5pc2hfY29tcHJlc3MoKTsganBlZ193cml0ZV9jb2VmZmljaWVudHMoKSBvbmx5IHdyaXRlcwordGhlIGZpbGUgaGVhZGVyLgorCitXaGVuIHdyaXRpbmcgcmF3IERDVCBjb2VmZmljaWVudHMsIGl0IGlzIGNydWNpYWwgdGhhdCB0aGUgSlBFRyBxdWFudGl6YXRpb24KK3RhYmxlcyBhbmQgc2FtcGxpbmcgZmFjdG9ycyBtYXRjaCB0aGUgd2F5IHRoZSBkYXRhIHdhcyBlbmNvZGVkLCBvciB0aGUKK3Jlc3VsdGluZyBmaWxlIHdpbGwgYmUgaW52YWxpZC4gIEZvciB0cmFuc2NvZGluZyBmcm9tIGFuIGV4aXN0aW5nIEpQRUcgZmlsZSwKK3dlIHJlY29tbWVuZCB1c2luZyBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycygpLiAgVGhpcyByb3V0aW5lIGluaXRpYWxpemVzCithbGwgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgdG8gZGVmYXVsdCB2YWx1ZXMgKGxpa2UganBlZ19zZXRfZGVmYXVsdHMoKSksCit0aGVuIGNvcGllcyB0aGUgY3JpdGljYWwgaW5mb3JtYXRpb24gZnJvbSBhIHNvdXJjZSBkZWNvbXByZXNzaW9uIG9iamVjdC4KK1RoZSBkZWNvbXByZXNzaW9uIG9iamVjdCBzaG91bGQgaGF2ZSBqdXN0IGJlZW4gdXNlZCB0byByZWFkIHRoZSBlbnRpcmUKK0pQRUcgaW5wdXQgZmlsZSAtLS0gdGhhdCBpcywgaXQgc2hvdWxkIGJlIGF3YWl0aW5nIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoKS4KKworanBlZ193cml0ZV9jb2VmZmljaWVudHMoKSBtYXJrcyBhbGwgdGFibGVzIHN0b3JlZCBpbiB0aGUgY29tcHJlc3Npb24gb2JqZWN0CithcyBuZWVkaW5nIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBmaWxlICh0aHVzLCBpdCBhY3RzIGxpa2UKK2pwZWdfc3RhcnRfY29tcHJlc3MoY2luZm8sIFRSVUUpKS4gIFRoaXMgaXMgZm9yIHNhZmV0eSdzIHNha2UsIHRvIGF2b2lkCitlbWl0dGluZyBhYmJyZXZpYXRlZCBKUEVHIGZpbGVzIGJ5IGFjY2lkZW50LiAgSWYgeW91IHJlYWxseSB3YW50IHRvIGVtaXQgYW4KK2FiYnJldmlhdGVkIEpQRUcgZmlsZSwgY2FsbCBqcGVnX3N1cHByZXNzX3RhYmxlcygpLCBvciBzZXQgdGhlIHRhYmxlcycKK2luZGl2aWR1YWwgc2VudF90YWJsZSBmbGFncywgYmV0d2VlbiBjYWxsaW5nIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKCkgYW5kCitqcGVnX2ZpbmlzaF9jb21wcmVzcygpLgorCisKK1Byb2dyZXNzIG1vbml0b3JpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSBhcHBsaWNhdGlvbnMgbWF5IG5lZWQgdG8gcmVnYWluIGNvbnRyb2wgZnJvbSB0aGUgSlBFRyBsaWJyYXJ5IGV2ZXJ5IHNvCitvZnRlbi4gIFRoZSB0eXBpY2FsIHVzZSBvZiB0aGlzIGZlYXR1cmUgaXMgdG8gcHJvZHVjZSBhIHBlcmNlbnQtZG9uZSBiYXIgb3IKK290aGVyIHByb2dyZXNzIGRpc3BsYXkuICAoRm9yIGEgc2ltcGxlIGV4YW1wbGUsIHNlZSBjanBlZy5jIG9yIGRqcGVnLmMuKQorQWx0aG91Z2ggeW91IGRvIGdldCBjb250cm9sIGJhY2sgZnJlcXVlbnRseSBkdXJpbmcgdGhlIGRhdGEtdHJhbnNmZXJyaW5nIHBhc3MKKyh0aGUganBlZ19yZWFkX3NjYW5saW5lcyBvciBqcGVnX3dyaXRlX3NjYW5saW5lcyBsb29wKSwgYW55IGFkZGl0aW9uYWwgcGFzc2VzCit3aWxsIG9jY3VyIGluc2lkZSBqcGVnX2ZpbmlzaF9jb21wcmVzcyBvciBqcGVnX3N0YXJ0X2RlY29tcHJlc3M7IHRob3NlCityb3V0aW5lcyBtYXkgdGFrZSBhIGxvbmcgdGltZSB0byBleGVjdXRlLCBhbmQgeW91IGRvbid0IGdldCBjb250cm9sIGJhY2sKK3VudGlsIHRoZXkgYXJlIGRvbmUuCisKK1lvdSBjYW4gZGVmaW5lIGEgcHJvZ3Jlc3MtbW9uaXRvciByb3V0aW5lIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHBlcmlvZGljYWxseQorYnkgdGhlIGxpYnJhcnkuICBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IGhvdyBvZnRlbiB0aGlzIGNhbGwgd2lsbCBvY2N1ciwKK3NvIHdlIGRvbid0IHJlY29tbWVuZCB5b3UgdXNlIGl0IGZvciBtb3VzZSB0cmFja2luZyBvciBhbnl0aGluZyBsaWtlIHRoYXQuCitBdCBwcmVzZW50LCBhIGNhbGwgd2lsbCBvY2N1ciBvbmNlIHBlciBNQ1Ugcm93LCBzY2FubGluZSwgb3Igc2FtcGxlIHJvdworZ3JvdXAsIHdoaWNoZXZlciB1bml0IGlzIGNvbnZlbmllbnQgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3NpbmcgbW9kZTsgc28gdGhlCit3aWRlciB0aGUgaW1hZ2UsIHRoZSBsb25nZXIgdGhlIHRpbWUgYmV0d2VlbiBjYWxscy4gIER1cmluZyB0aGUgZGF0YQordHJhbnNmZXJyaW5nIHBhc3MsIG9ubHkgb25lIGNhbGwgb2NjdXJzIHBlciBjYWxsIG9mIGpwZWdfcmVhZF9zY2FubGluZXMgb3IKK2pwZWdfd3JpdGVfc2NhbmxpbmVzLCBzbyBkb24ndCBwYXNzIGEgbGFyZ2UgbnVtYmVyIG9mIHNjYW5saW5lcyBhdCBvbmNlIGlmCit5b3Ugd2FudCBmaW5lIHJlc29sdXRpb24gaW4gdGhlIHByb2dyZXNzIGNvdW50LiAgKElmIHlvdSByZWFsbHkgbmVlZCB0byB1c2UKK3RoZSBjYWxsYmFjayBtZWNoYW5pc20gZm9yIHRpbWUtY3JpdGljYWwgdGFza3MgbGlrZSBtb3VzZSB0cmFja2luZywgeW91IGNvdWxkCitpbnNlcnQgYWRkaXRpb25hbCBjYWxscyBpbnNpZGUgc29tZSBvZiB0aGUgbGlicmFyeSdzIGlubmVyIGxvb3BzLikKKworVG8gZXN0YWJsaXNoIGEgcHJvZ3Jlc3MtbW9uaXRvciBjYWxsYmFjaywgY3JlYXRlIGEgc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyLAorZmlsbCBpbiBpdHMgcHJvZ3Jlc3NfbW9uaXRvciBmaWVsZCB3aXRoIGEgcG9pbnRlciB0byB5b3VyIGNhbGxiYWNrIHJvdXRpbmUsCithbmQgc2V0IGNpbmZvLT5wcm9ncmVzcyB0byBwb2ludCB0byB0aGUgc3RydWN0LiAgVGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkCit3aGVuZXZlciBjaW5mby0+cHJvZ3Jlc3MgaXMgbm9uLU5VTEwuICAoVGhpcyBwb2ludGVyIGlzIHNldCB0byBOVUxMIGJ5CitqcGVnX2NyZWF0ZV9jb21wcmVzcyBvciBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzOyB0aGUgbGlicmFyeSB3aWxsIG5vdCBjaGFuZ2UKK2l0IHRoZXJlYWZ0ZXIuICBTbyBpZiB5b3UgYWxsb2NhdGUgZHluYW1pYyBzdG9yYWdlIGZvciB0aGUgcHJvZ3Jlc3Mgc3RydWN0LAorbWFrZSBzdXJlIGl0IHdpbGwgbGl2ZSBhcyBsb25nIGFzIHRoZSBKUEVHIG9iamVjdCBkb2VzLiAgQWxsb2NhdGluZyBmcm9tIHRoZQorSlBFRyBtZW1vcnkgbWFuYWdlciB3aXRoIGxpZmV0aW1lIEpQT09MX1BFUk1BTkVOVCB3aWxsIHdvcmsgbmljZWx5LikgIFlvdQorY2FuIHVzZSB0aGUgc2FtZSBjYWxsYmFjayByb3V0aW5lIGZvciBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgorCitUaGUganBlZ19wcm9ncmVzc19tZ3Igc3RydWN0IGNvbnRhaW5zIGZvdXIgZmllbGRzIHdoaWNoIGFyZSBzZXQgYnkgdGhlIGxpYnJhcnk6CisgICAgICAgIGxvbmcgcGFzc19jb3VudGVyOyAgICAgIC8qIHdvcmsgdW5pdHMgY29tcGxldGVkIGluIHRoaXMgcGFzcyAqLworICAgICAgICBsb25nIHBhc3NfbGltaXQ7ICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2Ygd29yayB1bml0cyBpbiB0aGlzIHBhc3MgKi8KKyAgICAgICAgaW50IGNvbXBsZXRlZF9wYXNzZXM7ICAgLyogcGFzc2VzIGNvbXBsZXRlZCBzbyBmYXIgKi8KKyAgICAgICAgaW50IHRvdGFsX3Bhc3NlczsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIHBhc3NlcyBleHBlY3RlZCAqLworRHVyaW5nIGFueSBvbmUgcGFzcywgcGFzc19jb3VudGVyIGluY3JlYXNlcyBmcm9tIDAgdXAgdG8gKG5vdCBpbmNsdWRpbmcpCitwYXNzX2xpbWl0OyB0aGUgc3RlcCBzaXplIGlzIHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSAxLiAgVGhlIHBhc3NfbGltaXQKK3ZhbHVlIG1heSBjaGFuZ2UgZnJvbSBvbmUgcGFzcyB0byBhbm90aGVyLiAgVGhlIGV4cGVjdGVkIHRvdGFsIG51bWJlciBvZgorcGFzc2VzIGlzIGluIHRvdGFsX3Bhc3NlcywgYW5kIHRoZSBudW1iZXIgb2YgcGFzc2VzIGFscmVhZHkgY29tcGxldGVkIGlzIGluCitjb21wbGV0ZWRfcGFzc2VzLiAgVGh1cyB0aGUgZnJhY3Rpb24gb2Ygd29yayBjb21wbGV0ZWQgbWF5IGJlIGVzdGltYXRlZCBhcworICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9wYXNzZXMgKyAocGFzc19jb3VudGVyL3Bhc3NfbGltaXQpCisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfcGFzc2VzCitpZ25vcmluZyB0aGUgZmFjdCB0aGF0IHRoZSBwYXNzZXMgbWF5IG5vdCBiZSBlcXVhbCBhbW91bnRzIG9mIHdvcmsuCisKK1doZW4gZGVjb21wcmVzc2luZywgcGFzc19saW1pdCBjYW4gZXZlbiBjaGFuZ2Ugd2l0aGluIGEgcGFzcywgYmVjYXVzZSBpdAorZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIHNjYW5zIGluIHRoZSBKUEVHIGZpbGUsIHdoaWNoIGlzbid0IGFsd2F5cyBrbm93biBpbgorYWR2YW5jZS4gIFRoZSBjb21wdXRlZCBmcmFjdGlvbi1vZi13b3JrLWRvbmUgbWF5IGp1bXAgc3VkZGVubHkgKGlmIHRoZSBsaWJyYXJ5CitkaXNjb3ZlcnMgaXQgaGFzIG92ZXJlc3RpbWF0ZWQgdGhlIG51bWJlciBvZiBzY2Fucykgb3IgZXZlbiBkZWNyZWFzZSAoaW4gdGhlCitvcHBvc2l0ZSBjYXNlKS4gIEl0IGlzIG5vdCB3aXNlIHRvIHB1dCBncmVhdCBmYWl0aCBpbiB0aGUgd29yayBlc3RpbWF0ZS4KKworV2hlbiB1c2luZyB0aGUgZGVjb21wcmVzc29yJ3MgYnVmZmVyZWQtaW1hZ2UgbW9kZSwgdGhlIHByb2dyZXNzIG1vbml0b3Igd29yaworZXN0aW1hdGUgaXMgbGlrZWx5IHRvIGJlIGNvbXBsZXRlbHkgdW5oZWxwZnVsLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IGhhcyBubyB3YXkKK3RvIGtub3cgaG93IG1hbnkgb3V0cHV0IHBhc3NlcyB3aWxsIGJlIGRlbWFuZGVkIG9mIGl0LiAgQ3VycmVudGx5LCB0aGUgbGlicmFyeQorc2V0cyB0b3RhbF9wYXNzZXMgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVyZSB3aWxsIGJlIG9uZSBtb3JlIG91dHB1dAorcGFzcyBpZiB0aGUgaW5wdXQgZmlsZSBlbmQgaGFzbid0IHlldCBiZWVuIHJlYWQgKGpwZWdfaW5wdXRfY29tcGxldGUoKSBpc24ndAorVFJVRSksIGJ1dCBubyBtb3JlIG91dHB1dCBwYXNzZXMgaWYgdGhlIGZpbGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQgd2hlbiB0aGUKK291dHB1dCBwYXNzIGlzIHN0YXJ0ZWQuICBUaGlzIG1lYW5zIHRoYXQgdG90YWxfcGFzc2VzIHdpbGwgcmlzZSBhcyBhZGRpdGlvbmFsCitvdXRwdXQgcGFzc2VzIGFyZSByZXF1ZXN0ZWQuICBJZiB5b3UgaGF2ZSBhIHdheSBvZiBkZXRlcm1pbmluZyB0aGUgaW5wdXQgZmlsZQorc2l6ZSwgZXN0aW1hdGluZyBwcm9ncmVzcyBiYXNlZCBvbiB0aGUgZnJhY3Rpb24gb2YgdGhlIGZpbGUgdGhhdCdzIGJlZW4gcmVhZAord2lsbCBwcm9iYWJseSBiZSBtb3JlIHVzZWZ1bCB0aGFuIHVzaW5nIHRoZSBsaWJyYXJ5J3MgdmFsdWUuCisKKworTWVtb3J5IG1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiBjb3ZlcnMgc29tZSBrZXkgZmFjdHMgYWJvdXQgdGhlIEpQRUcgbGlicmFyeSdzIGJ1aWx0LWluIG1lbW9yeQorbWFuYWdlci4gIEZvciBtb3JlIGluZm8sIHBsZWFzZSByZWFkIHN0cnVjdHVyZS50eHQncyBzZWN0aW9uIGFib3V0IHRoZSBtZW1vcnkKK21hbmFnZXIsIGFuZCBjb25zdWx0IHRoZSBzb3VyY2UgY29kZSBpZiBuZWNlc3NhcnkuCisKK0FsbCBtZW1vcnkgYW5kIHRlbXBvcmFyeSBmaWxlIGFsbG9jYXRpb24gd2l0aGluIHRoZSBsaWJyYXJ5IGlzIGRvbmUgdmlhIHRoZQorbWVtb3J5IG1hbmFnZXIuICBJZiBuZWNlc3NhcnksIHlvdSBjYW4gcmVwbGFjZSB0aGUgImJhY2sgZW5kIiBvZiB0aGUgbWVtb3J5CittYW5hZ2VyIHRvIGNvbnRyb2wgYWxsb2NhdGlvbiB5b3Vyc2VsZiAoZm9yIGV4YW1wbGUsIGlmIHlvdSBkb24ndCB3YW50IHRoZQorbGlicmFyeSB0byB1c2UgbWFsbG9jKCkgYW5kIGZyZWUoKSBmb3Igc29tZSByZWFzb24pLgorCitTb21lIGRhdGEgaXMgYWxsb2NhdGVkICJwZXJtYW5lbnRseSIgYW5kIHdpbGwgbm90IGJlIGZyZWVkIHVudGlsIHRoZSBKUEVHCitvYmplY3QgaXMgZGVzdHJveWVkLiAgTW9zdCBkYXRhIGlzIGFsbG9jYXRlZCAicGVyIGltYWdlIiBhbmQgaXMgZnJlZWQgYnkKK2pwZWdfZmluaXNoX2NvbXByZXNzLCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzLCBvciBqcGVnX2Fib3J0LiAgWW91IGNhbiBjYWxsIHRoZQorbWVtb3J5IG1hbmFnZXIgeW91cnNlbGYgdG8gYWxsb2NhdGUgc3RydWN0dXJlcyB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBiZQorZnJlZWQgYXQgdGhlc2UgdGltZXMuICBUeXBpY2FsIGNvZGUgZm9yIHRoaXMgaXMKKyAgcHRyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBzaXplKTsKK1VzZSBKUE9PTF9QRVJNQU5FTlQgdG8gZ2V0IHN0b3JhZ2UgdGhhdCBsYXN0cyBhcyBsb25nIGFzIHRoZSBKUEVHIG9iamVjdC4KK1VzZSBhbGxvY19sYXJnZSBpbnN0ZWFkIG9mIGFsbG9jX3NtYWxsIGZvciBhbnl0aGluZyBiaWdnZXIgdGhhbiBhIGZldyBLYnl0ZXMuCitUaGVyZSBhcmUgYWxzbyBhbGxvY19zYXJyYXkgYW5kIGFsbG9jX2JhcnJheSByb3V0aW5lcyB0aGF0IGF1dG9tYXRpY2FsbHkKK2J1aWxkIDItRCBzYW1wbGUgb3IgYmxvY2sgYXJyYXlzLgorCitUaGUgbGlicmFyeSdzIG1pbmltdW0gc3BhY2UgcmVxdWlyZW1lbnRzIHRvIHByb2Nlc3MgYW4gaW1hZ2UgZGVwZW5kIG9uIHRoZQoraW1hZ2UncyB3aWR0aCwgYnV0IG5vdCBvbiBpdHMgaGVpZ2h0LCBiZWNhdXNlIHRoZSBsaWJyYXJ5IG9yZGluYXJpbHkgd29ya3MKK3dpdGggInN0cmlwIiBidWZmZXJzIHRoYXQgYXJlIGFzIHdpZGUgYXMgdGhlIGltYWdlIGJ1dCBqdXN0IGEgZmV3IHJvd3MgaGlnaC4KK1NvbWUgb3BlcmF0aW5nIG1vZGVzIChlZywgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uKSByZXF1aXJlIGZ1bGwtaW1hZ2UKK2J1ZmZlcnMuICBTdWNoIGJ1ZmZlcnMgYXJlIHRyZWF0ZWQgYXMgInZpcnR1YWwgYXJyYXlzIjogb25seSB0aGUgY3VycmVudCBzdHJpcAorbmVlZCBiZSBpbiBtZW1vcnksIGFuZCB0aGUgcmVzdCBjYW4gYmUgc3dhcHBlZCBvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZS4KKworV2hlbiB1c2luZyB0ZW1wb3JhcnkgZmlsZXMsIHRoZSBsaWJyYXJ5IHdpbGwgbWFrZSB0aGUgaW4tbWVtb3J5IGJ1ZmZlcnMgZm9yCitpdHMgdmlydHVhbCBhcnJheXMganVzdCBiaWcgZW5vdWdoIHRvIHN0YXkgd2l0aGluIGEgIm1heGltdW0gbWVtb3J5IiBzZXR0aW5nLgorWW91ciBhcHBsaWNhdGlvbiBjYW4gc2V0IHRoaXMgbGltaXQgYnkgc2V0dGluZyBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZQorYWZ0ZXIgY3JlYXRpbmcgdGhlIEpQRUcgb2JqZWN0LiAgKE9mIGNvdXJzZSwgdGhlcmUgaXMgc3RpbGwgYSBtaW5pbXVtIHNpemUgZm9yCit0aGUgYnVmZmVycywgc28gdGhlIG1heC1tZW1vcnkgc2V0dGluZyBpcyBlZmZlY3RpdmUgb25seSBpZiBpdCBpcyBiaWdnZXIgdGhhbgordGhlIG1pbmltdW0gc3BhY2UgbmVlZGVkLikgIElmIHlvdSBhbGxvY2F0ZSBhbnkgbGFyZ2Ugc3RydWN0dXJlcyB5b3Vyc2VsZiwgeW91CittdXN0IGFsbG9jYXRlIHRoZW0gYmVmb3JlIGpwZWdfc3RhcnRfY29tcHJlc3MoKSBvciBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKSBpbgorb3JkZXIgdG8gaGF2ZSB0aGVtIGNvdW50ZWQgYWdhaW5zdCB0aGUgbWF4IG1lbW9yeSBsaW1pdC4gIEFsc28ga2VlcCBpbiBtaW5kCit0aGF0IHNwYWNlIGFsbG9jYXRlZCB3aXRoIGFsbG9jX3NtYWxsKCkgaXMgaWdub3JlZCwgb24gdGhlIGFzc3VtcHRpb24gdGhhdAoraXQncyB0b28gc21hbGwgdG8gYmUgd29ydGggd29ycnlpbmcgYWJvdXQ7IHNvIGEgcmVhc29uYWJsZSBzYWZldHkgbWFyZ2luCitzaG91bGQgYmUgbGVmdCB3aGVuIHNldHRpbmcgbWF4X21lbW9yeV90b191c2UuCisKK05PVEU6IFVubGVzcyB5b3UgZGV2ZWxvcCB5b3VyIG93biBtZW1vcnkgbWFuYWdlciBiYWNrIGVuZCwgdGhlbiB0ZW1wb3JhcnkgZmlsZXMKK3dpbGwgbmV2ZXIgYmUgdXNlZC4gIFRoZSBiYWNrIGVuZCBwcm92aWRlZCBpbiBsaWJqcGVnLXR1cmJvIChqbWVtbm9icy5jKSBzaW1wbHkKK21hbGxvYygpcyBhbmQgZnJlZSgpcyB2aXJ0dWFsIGFycmF5cywgYW5kIGFuIGVycm9yIG9jY3VycyBpZiB0aGUgcmVxdWlyZWQKK21lbW9yeSBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgaW4gY2luZm8tPm1lbS0+bWF4X21lbW9yeV90b191c2UuCisKKworTWVtb3J5IHVzYWdlCistLS0tLS0tLS0tLS0KKworV29ya2luZyBtZW1vcnkgcmVxdWlyZW1lbnRzIHdoaWxlIHBlcmZvcm1pbmcgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbgorZGVwZW5kIG9uIGltYWdlIGRpbWVuc2lvbnMsIGltYWdlIGNoYXJhY3RlcmlzdGljcyAoc3VjaCBhcyBjb2xvcnNwYWNlIGFuZAorSlBFRyBwcm9jZXNzKSwgYW5kIG9wZXJhdGluZyBtb2RlIChhcHBsaWNhdGlvbi1zZWxlY3RlZCBvcHRpb25zKS4KKworQXMgb2YgdjZiLCB0aGUgZGVjb21wcmVzc29yIHJlcXVpcmVzOgorIDEuIEFib3V0IDI0SyBpbiBtb3JlLW9yLWxlc3MtZml4ZWQtc2l6ZSBkYXRhLiAgVGhpcyB2YXJpZXMgYSBiaXQgZGVwZW5kaW5nCisgICAgb24gb3BlcmF0aW5nIG1vZGUgYW5kIGltYWdlIGNoYXJhY3RlcmlzdGljcyAocGFydGljdWxhcmx5IGNvbG9yIHZzLgorICAgIGdyYXlzY2FsZSksIGJ1dCBpdCBkb2Vzbid0IGRlcGVuZCBvbiBpbWFnZSBkaW1lbnNpb25zLgorIDIuIFN0cmlwIGJ1ZmZlcnMgKG9mIHNpemUgcHJvcG9ydGlvbmFsIHRvIHRoZSBpbWFnZSB3aWR0aCkgZm9yIElEQ1QgYW5kCisgICAgdXBzYW1wbGluZyByZXN1bHRzLiAgVGhlIHdvcnN0IGNhc2UgZm9yIGNvbW1vbmx5IHVzZWQgc2FtcGxpbmcgZmFjdG9ycworICAgIGlzIGFib3V0IDM0IGJ5dGVzICogd2lkdGggaW4gcGl4ZWxzIGZvciBhIGNvbG9yIGltYWdlLiAgQSBncmF5c2NhbGUgaW1hZ2UKKyAgICBvbmx5IG5lZWRzIGFib3V0IDggYnl0ZXMgcGVyIHBpeGVsIGNvbHVtbi4KKyAzLiBBIGZ1bGwtaW1hZ2UgRENUIGNvZWZmaWNpZW50IGJ1ZmZlciBpcyBuZWVkZWQgdG8gZGVjb2RlIGEgbXVsdGktc2NhbiBKUEVHCisgICAgZmlsZSAoaW5jbHVkaW5nIHByb2dyZXNzaXZlIEpQRUdzKSwgb3Igd2hlbmV2ZXIgeW91IHNlbGVjdCBidWZmZXJlZC1pbWFnZQorICAgIG1vZGUuICBUaGlzIHRha2VzIDIgYnl0ZXMvY29lZmZpY2llbnQuICBBdCB0eXBpY2FsIDJ4MiBzYW1wbGluZywgdGhhdCdzCisgICAgMyBieXRlcyBwZXIgcGl4ZWwgZm9yIGEgY29sb3IgaW1hZ2UuICBXb3JzdCBjYXNlICgxeDEgc2FtcGxpbmcpIHJlcXVpcmVzCisgICAgNiBieXRlcy9waXhlbC4gIEZvciBncmF5c2NhbGUsIGZpZ3VyZSAyIGJ5dGVzL3BpeGVsLgorIDQuIFRvIHBlcmZvcm0gMi1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiwgdGhlIGRlY29tcHJlc3NvciBhbHNvIG5lZWRzIGEKKyAgICAxMjhLIGNvbG9yIGxvb2t1cCB0YWJsZSBhbmQgYSBmdWxsLWltYWdlIHBpeGVsIGJ1ZmZlciAoMyBieXRlcy9waXhlbCkuCitUaGlzIGRvZXMgbm90IGNvdW50IGFueSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgc3VjaCBhcyBhCitidWZmZXIgdG8gaG9sZCB0aGUgZmluYWwgb3V0cHV0IGltYWdlLgorCitUaGUgYWJvdmUgZmlndXJlcyBhcmUgdmFsaWQgZm9yIDgtYml0IEpQRUcgZGF0YSBwcmVjaXNpb24gYW5kIGEgbWFjaGluZSB3aXRoCiszMi1iaXQgaW50cy4gIEZvciAxMi1iaXQgSlBFRyBkYXRhLCBkb3VibGUgdGhlIHNpemUgb2YgdGhlIHN0cmlwIGJ1ZmZlcnMgYW5kCitxdWFudGl6YXRpb24gcGl4ZWwgYnVmZmVyLiAgVGhlICJmaXhlZC1zaXplIiBkYXRhIHdpbGwgYmUgc29tZXdoYXQgc21hbGxlcgord2l0aCAxNi1iaXQgaW50cywgbGFyZ2VyIHdpdGggNjQtYml0IGludHMuICBBbHNvLCBDTVlLIG9yIG90aGVyIHVudXN1YWwKK2NvbG9yIHNwYWNlcyB3aWxsIHJlcXVpcmUgZGlmZmVyZW50IGFtb3VudHMgb2Ygc3BhY2UuCisKK1RoZSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGFuZCBwaXhlbCBidWZmZXJzLCBpZiBuZWVkZWQgYXQgYWxsLCBkbyBub3QKK2hhdmUgdG8gYmUgZnVsbHkgUkFNIHJlc2lkZW50OyB5b3UgY2FuIGhhdmUgdGhlIGxpYnJhcnkgdXNlIHRlbXBvcmFyeQorZmlsZXMgaW5zdGVhZCB3aGVuIHRoZSB0b3RhbCBtZW1vcnkgdXNhZ2Ugd291bGQgZXhjZWVkIGEgbGltaXQgeW91IHNldC4KKyhCdXQgaWYgeW91ciBPUyBzdXBwb3J0cyB2aXJ0dWFsIG1lbW9yeSwgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8ganVzdCB1c2UKK2ptZW1ub2JzIGFuZCBsZXQgdGhlIE9TIGRvIHRoZSBzd2FwcGluZy4pCisKK1RoZSBjb21wcmVzc29yJ3MgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgc2ltaWxhciwgZXhjZXB0IHRoYXQgaXQgaGFzIG5vIG5lZWQKK2ZvciBjb2xvciBxdWFudGl6YXRpb24uICBBbHNvLCBpdCBuZWVkcyBhIGZ1bGwtaW1hZ2UgRENUIGNvZWZmaWNpZW50IGJ1ZmZlcgoraWYgSHVmZm1hbi10YWJsZSBvcHRpbWl6YXRpb24gaXMgYXNrZWQgZm9yLCBldmVuIGlmIHByb2dyZXNzaXZlIG1vZGUgaXMgbm90CityZXF1ZXN0ZWQuCisKK0lmIHlvdSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IHVzYWdlIGluIGEgcGFydGljdWxhcgorc2l0dWF0aW9uLCB5b3UgY2FuIGVuYWJsZSB0aGUgTUVNX1NUQVRTIGNvZGUgaW4gam1lbW1nci5jLgorCisKK0xpYnJhcnkgY29tcGlsZS10aW1lIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBudW1iZXIgb2YgY29tcGlsZS10aW1lIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBieSBtb2RpZnlpbmcgam1vcmVjZmcuaC4KKworVGhlIEpQRUcgc3RhbmRhcmQgcHJvdmlkZXMgZm9yIGJvdGggdGhlIGJhc2VsaW5lIDgtYml0IERDVCBwcm9jZXNzIGFuZAorYSAxMi1iaXQgRENUIHByb2Nlc3MuICBUaGUgSUpHIGNvZGUgc3VwcG9ydHMgMTItYml0IGxvc3N5IEpQRUcgaWYgeW91IGRlZmluZQorQklUU19JTl9KU0FNUExFIGFzIDEyIHJhdGhlciB0aGFuIDguICBOb3RlIHRoYXQgdGhpcyBjYXVzZXMgSlNBTVBMRSB0byBiZQorbGFyZ2VyIHRoYW4gYSBjaGFyLCBzbyBpdCBhZmZlY3RzIHRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbidzIGltYWdlIGRhdGEuCitUaGUgc2FtcGxlIGFwcGxpY2F0aW9ucyBjanBlZyBhbmQgZGpwZWcgY2FuIHN1cHBvcnQgMTItYml0IG1vZGUgb25seSBmb3IgUFBNCithbmQgR0lGIGZpbGUgZm9ybWF0czsgeW91IG11c3QgZGlzYWJsZSB0aGUgb3RoZXIgZmlsZSBmb3JtYXRzIHRvIGNvbXBpbGUgYQorMTItYml0IGNqcGVnIG9yIGRqcGVnLiAgKGluc3RhbGwudHh0IGhhcyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoYXQuKQorQXQgcHJlc2VudCwgYSAxMi1iaXQgbGlicmFyeSBjYW4gaGFuZGxlICpvbmx5KiAxMi1iaXQgaW1hZ2VzLCBub3QgYm90aAorcHJlY2lzaW9ucy4KKworTm90ZSB0aGF0IGEgMTItYml0IGxpYnJhcnkgYWx3YXlzIGNvbXByZXNzZXMgaW4gSHVmZm1hbiBvcHRpbWl6YXRpb24gbW9kZSwKK2luIG9yZGVyIHRvIGdlbmVyYXRlIHZhbGlkIEh1ZmZtYW4gdGFibGVzLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdXIKK2RlZmF1bHQgSHVmZm1hbiB0YWJsZXMgb25seSBjb3ZlciA4LWJpdCBkYXRhLiAgSWYgeW91IG5lZWQgdG8gb3V0cHV0IDEyLWJpdAorZmlsZXMgaW4gb25lIHBhc3MsIHlvdSdsbCBoYXZlIHRvIHN1cHBseSBzdWl0YWJsZSBkZWZhdWx0IEh1ZmZtYW4gdGFibGVzLgorWW91IG1heSBhbHNvIHdhbnQgdG8gc3VwcGx5IHlvdXIgb3duIERDVCBxdWFudGl6YXRpb24gdGFibGVzOyB0aGUgZXhpc3RpbmcKK3F1YWxpdHktc2NhbGluZyBjb2RlIGhhcyBiZWVuIGRldmVsb3BlZCBmb3IgOC1iaXQgdXNlLCBhbmQgcHJvYmFibHkgZG9lc24ndAorZ2VuZXJhdGUgZXNwZWNpYWxseSBnb29kIHRhYmxlcyBmb3IgMTItYml0LgorCitUaGUgbWF4aW11bSBudW1iZXIgb2YgY29tcG9uZW50cyAoY29sb3IgY2hhbm5lbHMpIGluIHRoZSBpbWFnZSBpcyBkZXRlcm1pbmVkCitieSBNQVhfQ09NUE9ORU5UUy4gIFRoZSBKUEVHIHN0YW5kYXJkIGFsbG93cyB1cCB0byAyNTUgY29tcG9uZW50cywgYnV0IHdlCitleHBlY3QgdGhhdCBmZXcgYXBwbGljYXRpb25zIHdpbGwgbmVlZCBtb3JlIHRoYW4gZm91ciBvciBzby4KKworT24gbWFjaGluZXMgd2l0aCB1bnVzdWFsIGRhdGEgdHlwZSBzaXplcywgeW91IG1heSBiZSBhYmxlIHRvIGltcHJvdmUKK3BlcmZvcm1hbmNlIG9yIHJlZHVjZSBtZW1vcnkgc3BhY2UgYnkgdHdlYWtpbmcgdGhlIHZhcmlvdXMgdHlwZWRlZnMgaW4KK2ptb3JlY2ZnLmguICBJbiBwYXJ0aWN1bGFyLCBvbiBzb21lIFJJU0MgQ1BVcywgYWNjZXNzIHRvIGFycmF5cyBvZiAic2hvcnQicworaXMgcXVpdGUgc2xvdzsgY29uc2lkZXIgdHJhZGluZyBtZW1vcnkgZm9yIHNwZWVkIGJ5IG1ha2luZyBKQ09FRiwgSU5UMTYsIGFuZAorVUlOVDE2IGJlICJpbnQiIG9yICJ1bnNpZ25lZCBpbnQiLiAgVUlOVDggaXMgYWxzbyBhIGNhbmRpZGF0ZSB0byBiZWNvbWUgaW50LgorWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gbWFrZSBKU0FNUExFIGJlIGludCB1bmxlc3MgeW91IGhhdmUgbG90cyBvZiBtZW1vcnkKK3RvIGJ1cm4uCisKK1lvdSBjYW4gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBsaWJyYXJ5IGJ5IGNvbXBpbGluZyBvdXQgdmFyaW91cyBvcHRpb25hbAorZnVuY3Rpb25zLiAgVG8gZG8gdGhpcywgdW5kZWZpbmUgeHh4X1NVUFBPUlRFRCBzeW1ib2xzIGFzIG5lY2Vzc2FyeS4KKworWW91IGNhbiBhbHNvIHNhdmUgYSBmZXcgSyBieSBub3QgaGF2aW5nIHRleHQgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxpYnJhcnk7Cit0aGUgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSB0YWJsZSBvY2N1cGllcyBhYm91dCA1S2IuICBUaGlzIGlzIHBhcnRpY3VsYXJseQorcmVhc29uYWJsZSBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIHdoZXJlIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gZGlzcGxheQorYSBtZXNzYWdlIGFueXdheS4gIFRvIGRvIHRoaXMsIHJlbW92ZSB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UgdGFibGUKKyhqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlW10pIGZyb20gamVycm9yLmMsIGFuZCBhbHRlciBmb3JtYXRfbWVzc2FnZSB0byBkbworc29tZXRoaW5nIHJlYXNvbmFibGUgd2l0aG91dCBpdC4gIFlvdSBjb3VsZCBvdXRwdXQgdGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlCittZXNzYWdlIGNvZGUgbnVtYmVyLCBmb3IgZXhhbXBsZS4gIElmIHlvdSBkbyB0aGlzLCB5b3UgY2FuIGFsc28gc2F2ZSBhIGNvdXBsZQorbW9yZSBLIGJ5IG1vZGlmeWluZyB0aGUgVFJBQ0VNU24oKSBtYWNyb3MgaW4gamVycm9yLmggdG8gZXhwYW5kIHRvIG5vdGhpbmc7Cit5b3UgZG9uJ3QgbmVlZCB0cmFjZSBjYXBhYmlsaXR5IGFueXdheSwgcmlnaHQ/CisKKworUG9ydGFiaWxpdHkgY29uc2lkZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBKUEVHIGxpYnJhcnkgaGFzIGJlZW4gd3JpdHRlbiB0byBiZSBleHRyZW1lbHkgcG9ydGFibGU7IHRoZSBzYW1wbGUKK2FwcGxpY2F0aW9ucyBjanBlZyBhbmQgZGpwZWcgYXJlIHNsaWdodGx5IGxlc3Mgc28uICBUaGlzIHNlY3Rpb24gc3VtbWFyaXplcwordGhlIGRlc2lnbiBnb2FscyBpbiB0aGlzIGFyZWEuICAoSWYgeW91IGVuY291bnRlciBhbnkgYnVncyB0aGF0IGNhdXNlIHRoZQorbGlicmFyeSB0byBiZSBsZXNzIHBvcnRhYmxlIHRoYW4gaXMgY2xhaW1lZCBoZXJlLCB3ZSdkIGFwcHJlY2lhdGUgaGVhcmluZworYWJvdXQgdGhlbS4pCisKK1RoZSBjb2RlIHdvcmtzIGZpbmUgb24gQU5TSSBDIGFuZCBDKysgY29tcGlsZXJzLCB1c2luZyBhbnkgb2YgdGhlIHBvcHVsYXIKK3N5c3RlbSBpbmNsdWRlIGZpbGUgc2V0dXBzLCBhbmQgc29tZSBub3Qtc28tcG9wdWxhciBvbmVzIHRvby4KKworVGhlIGNvZGUgaXMgbm90IGRlcGVuZGVudCBvbiB0aGUgZXhhY3Qgc2l6ZXMgb2YgdGhlIEMgZGF0YSB0eXBlcy4gIEFzCitkaXN0cmlidXRlZCwgd2UgbWFrZSB0aGUgYXNzdW1wdGlvbnMgdGhhdAorICAgICAgICBjaGFyICAgIGlzIGF0IGxlYXN0IDggYml0cyB3aWRlCisgICAgICAgIHNob3J0ICAgaXMgYXQgbGVhc3QgMTYgYml0cyB3aWRlCisgICAgICAgIGludCAgICAgaXMgYXQgbGVhc3QgMTYgYml0cyB3aWRlCisgICAgICAgIGxvbmcgICAgaXMgYXQgbGVhc3QgMzIgYml0cyB3aWRlCisoVGhlc2UgYXJlIHRoZSBtaW5pbXVtIHJlcXVpcmVtZW50cyBvZiB0aGUgQU5TSSBDIHN0YW5kYXJkLikgIFdpZGVyIHR5cGVzIHdpbGwKK3dvcmsgZmluZSwgYWx0aG91Z2ggbWVtb3J5IG1heSBiZSB1c2VkIGluZWZmaWNpZW50bHkgaWYgY2hhciBpcyBtdWNoIGxhcmdlcgordGhhbiA4IGJpdHMgb3Igc2hvcnQgaXMgbXVjaCBiaWdnZXIgdGhhbiAxNiBiaXRzLiAgVGhlIGNvZGUgc2hvdWxkIHdvcmsKK2VxdWFsbHkgd2VsbCB3aXRoIDE2LSBvciAzMi1iaXQgaW50cy4KKworSW4gYSBzeXN0ZW0gd2hlcmUgdGhlc2UgYXNzdW1wdGlvbnMgYXJlIG5vdCBtZXQsIHlvdSBtYXkgYmUgYWJsZSB0byBtYWtlIHRoZQorY29kZSB3b3JrIGJ5IG1vZGlmeWluZyB0aGUgdHlwZWRlZnMgaW4gam1vcmVjZmcuaC4gIEhvd2V2ZXIsIHlvdSB3aWxsIHByb2JhYmx5CitoYXZlIGRpZmZpY3VsdHkgaWYgaW50IGlzIGxlc3MgdGhhbiAxNiBiaXRzIHdpZGUsIHNpbmNlIHJlZmVyZW5jZXMgdG8gcGxhaW4KK2ludCBhYm91bmQgaW4gdGhlIGNvZGUuCisKK2NoYXIgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQsIGFsdGhvdWdoIHRoZSBjb2RlIHJ1bnMgZmFzdGVyIGlmIGFuCit1bnNpZ25lZCBjaGFyIHR5cGUgaXMgYXZhaWxhYmxlLiAgSWYgY2hhciBpcyB3aWRlciB0aGFuIDggYml0cywgeW91IHdpbGwgbmVlZAordG8gcmVkZWZpbmUgSk9DVEVUIGFuZC9vciBwcm92aWRlIGN1c3RvbSBkYXRhIHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VycyBzbwordGhhdCBKT0NURVQgcmVwcmVzZW50cyBleGFjdGx5IDggYml0cyBvZiBkYXRhIG9uIGV4dGVybmFsIHN0b3JhZ2UuCisKK1RoZSBKUEVHIGxpYnJhcnkgcHJvcGVyIGRvZXMgbm90IGFzc3VtZSBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiBjaGFyYWN0ZXJzLgorQnV0IHNvbWUgb2YgdGhlIGltYWdlIGZpbGUgSS9PIG1vZHVsZXMgaW4gY2pwZWcvZGpwZWcgZG8gaGF2ZSBBU0NJSQorZGVwZW5kZW5jaWVzIGluIGZpbGUtaGVhZGVyIG1hbmlwdWxhdGlvbjsgc28gZG9lcyBjanBlZydzIHNlbGVjdF9maWxlX3R5cGUoKQorcm91dGluZS4KKworVGhlIEpQRUcgbGlicmFyeSBkb2VzIG5vdCByZWx5IGhlYXZpbHkgb24gdGhlIEMgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsIEMKK3N0ZGlvIGlzIHVzZWQgb25seSBieSB0aGUgZGF0YSBzb3VyY2UvZGVzdGluYXRpb24gbW9kdWxlcyBhbmQgdGhlIGVycm9yCitoYW5kbGVyLCBhbGwgb2Ygd2hpY2ggYXJlIGFwcGxpY2F0aW9uLXJlcGxhY2VhYmxlLiAgKGNqcGVnL2RqcGVnIGFyZSBtb3JlCitoZWF2aWx5IGRlcGVuZGVudCBvbiBzdGRpby4pICBtYWxsb2MgYW5kIGZyZWUgYXJlIGNhbGxlZCBvbmx5IGZyb20gdGhlIG1lbW9yeQorbWFuYWdlciAiYmFjayBlbmQiIG1vZHVsZSwgc28geW91IGNhbiB1c2UgYSBkaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRvciBieQorcmVwbGFjaW5nIHRoYXQgb25lIGZpbGUuCisKK01vcmUgaW5mbyBhYm91dCBwb3J0aW5nIHRoZSBjb2RlIG1heSBiZSBnbGVhbmVkIGJ5IHJlYWRpbmcgamNvbmZpZy50eHQsCitqbW9yZWNmZy5oLCBhbmQgamluY2x1ZGUuaC4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL21kNS9DTWFrZUxpc3RzLnR4dCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL21kNS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZlZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbWQ1L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEgQEAKK2FkZF9leGVjdXRhYmxlKG1kNWNtcCBtZDVjbXAuYyBtZDUuYyBtZDVobC5jKQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbWQ1L21kNS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbWQ1L21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjVkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9tZDUvbWQ1LmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgTUQ1IG1lc3NhZ2UtZGlnZXN0IGFsZ29yaXRobS4KKyAqIFRoZSBhbGdvcml0aG0gaXMgZHVlIHRvIFJvbiBSaXZlc3QuICBUaGlzIGNvZGUgd2FzCisgKiB3cml0dGVuIGJ5IENvbGluIFBsdW1iIGluIDE5OTMsIG5vIGNvcHlyaWdodCBpcyBjbGFpbWVkLgorICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluOyBkbyB3aXRoIGl0IHdoYXQgeW91IHdpc2guCisgKgorICogRXF1aXZhbGVudCBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIGFnYWluc3QgdGhhdCwgYW5kIGlzIGVxdWl2YWxlbnQsCisgKiBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHR3byBwYWdlcyBvZiBsZWdhbGVzZQorICogd2l0aCBldmVyeSBjb3B5LgorICoKKyAqIFRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgY2h1bmsgb2YgYnl0ZXMsIGRlY2xhcmUgYW4KKyAqIE1ENUNvbnRleHQgc3RydWN0dXJlLCBwYXNzIGl0IHRvIE1ENUluaXQsIGNhbGwgTUQ1VXBkYXRlIGFzCisgKiBuZWVkZWQgb24gYnVmZmVycyBmdWxsIG9mIGJ5dGVzLCBhbmQgdGhlbiBjYWxsIE1ENUZpbmFsLCB3aGljaAorICogd2lsbCBmaWxsIGEgc3VwcGxpZWQgMTYtYnl0ZSBhcnJheSB3aXRoIHRoZSBkaWdlc3QuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpMjAxOCwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgICAgLyogZm9yIG1lbWNweSgpICovCisjaW5jbHVkZSAibWQ1LmgiCisKKyNpZiAoQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOKQorI2RlZmluZSBieXRlUmV2ZXJzZShidWYsIGxlbikgICAvKiBOb3RoaW5nICovCisjZWxzZQorLyoKKyAqIE5vdGU6IHRoaXMgY29kZSBpcyBoYXJtbGVzcyBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLgorICovCitzdGF0aWMgdm9pZCBieXRlUmV2ZXJzZSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsb25ncykKK3sKKyAgdWludDMyIHQ7CisgIGRvIHsKKyAgICB0ID0gKHVpbnQzMikoKHVuc2lnbmVkIGludClidWZbM10gPDwgOCB8IGJ1ZlsyXSkgPDwgMTYgfAorICAgICAgICAoKHVuc2lnbmVkIGludClidWZbMV0gPDwgOCB8IGJ1ZlswXSk7CisgICAgKih1aW50MzIgKilidWYgPSB0OworICAgIGJ1ZiArPSA0OworICB9IHdoaWxlICgtLWxvbmdzKTsKK30KKyNlbmRpZgorCisvKgorICogU3RhcnQgTUQ1IGFjY3VtdWxhdGlvbi4gIFNldCBiaXQgY291bnQgdG8gMCBhbmQgYnVmZmVyIHRvIG15c3RlcmlvdXMKKyAqIGluaXRpYWxpemF0aW9uIGNvbnN0YW50cy4KKyAqLwordm9pZCBNRDVJbml0KHN0cnVjdCBNRDVDb250ZXh0ICpjdHgpCit7CisgIGN0eC0+YnVmWzBdID0gMHg2NzQ1MjMwMTsKKyAgY3R4LT5idWZbMV0gPSAweGVmY2RhYjg5OworICBjdHgtPmJ1ZlsyXSA9IDB4OThiYWRjZmU7CisgIGN0eC0+YnVmWzNdID0gMHgxMDMyNTQ3NjsKKworICBjdHgtPmJpdHNbMF0gPSAwOworICBjdHgtPmJpdHNbMV0gPSAwOworfQorCisvKgorICogVXBkYXRlIGNvbnRleHQgdG8gcmVmbGVjdCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbm90aGVyIGJ1ZmZlciBmdWxsCisgKiBvZiBieXRlcy4KKyAqLwordm9pZCBNRDVVcGRhdGUoc3RydWN0IE1ENUNvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworICB1aW50MzIgdDsKKworICAvKiBVcGRhdGUgYml0Y291bnQgKi8KKworICB0ID0gY3R4LT5iaXRzWzBdOworICBpZiAoKGN0eC0+Yml0c1swXSA9IHQgKyAoKHVpbnQzMilsZW4gPDwgMykpIDwgdCkKKyAgICBjdHgtPmJpdHNbMV0rKzsgICAgICAgICAgICAgLyogQ2FycnkgZnJvbSBsb3cgdG8gaGlnaCAqLworICBjdHgtPmJpdHNbMV0gKz0gbGVuID4+IDI5OworCisgIHQgPSAodCA+PiAzKSAmIDB4M2Y7ICAgICAgICAgIC8qIEJ5dGVzIGFscmVhZHkgaW4gc2hzSW5mby0+ZGF0YSAqLworCisgIC8qIEhhbmRsZSBhbnkgbGVhZGluZyBvZGQtc2l6ZWQgY2h1bmtzICovCisKKyAgaWYgKHQpIHsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKiljdHgtPmluICsgdDsKKworICAgIHQgPSA2NCAtIHQ7CisgICAgaWYgKGxlbiA8IHQpIHsKKyAgICAgIG1lbWNweShwLCBidWYsIGxlbik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIG1lbWNweShwLCBidWYsIHQpOworICAgIGJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKKyAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzIgKiljdHgtPmluKTsKKyAgICBidWYgKz0gdDsKKyAgICBsZW4gLT0gdDsKKyAgfQorICAvKiBQcm9jZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MgKi8KKworICB3aGlsZSAobGVuID49IDY0KSB7CisgICAgbWVtY3B5KGN0eC0+aW4sIGJ1ZiwgNjQpOworICAgIGJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKKyAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzIgKiljdHgtPmluKTsKKyAgICBidWYgKz0gNjQ7CisgICAgbGVuIC09IDY0OworICB9CisKKyAgLyogSGFuZGxlIGFueSByZW1haW5pbmcgYnl0ZXMgb2YgZGF0YS4gKi8KKworICBtZW1jcHkoY3R4LT5pbiwgYnVmLCBsZW4pOworfQorCisvKgorICogRmluYWwgd3JhcHVwIC0gcGFkIHRvIDY0LWJ5dGUgYm91bmRhcnkgd2l0aCB0aGUgYml0IHBhdHRlcm4KKyAqIDEgMCogKDY0LWJpdCBjb3VudCBvZiBiaXRzIHByb2Nlc3NlZCwgTVNCLWZpcnN0KQorICovCit2b2lkIE1ENUZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgc3RydWN0IE1ENUNvbnRleHQgKmN0eCkKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50OworICB1bnNpZ25lZCBjaGFyICpwOworICB1aW50MzIgKmluMzIgPSAodWludDMyICopY3R4LT5pbjsKKworICAvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQgKi8KKyAgY291bnQgPSAoY3R4LT5iaXRzWzBdID4+IDMpICYgMHgzRjsKKworICAvKiBTZXQgdGhlIGZpcnN0IGNoYXIgb2YgcGFkZGluZyB0byAweDgwLiAgVGhpcyBpcyBzYWZlIHNpbmNlIHRoZXJlIGlzCisgICAgIGFsd2F5cyBhdCBsZWFzdCBvbmUgYnl0ZSBmcmVlICovCisgIHAgPSBjdHgtPmluICsgY291bnQ7CisgICpwKysgPSAweDgwOworCisgIC8qIEJ5dGVzIG9mIHBhZGRpbmcgbmVlZGVkIHRvIG1ha2UgNjQgYnl0ZXMgKi8KKyAgY291bnQgPSA2NCAtIDEgLSBjb3VudDsKKworICAvKiBQYWQgb3V0IHRvIDU2IG1vZCA2NCAqLworICBpZiAoY291bnQgPCA4KSB7CisgICAgLyogVHdvIGxvdHMgb2YgcGFkZGluZzogIFBhZCB0aGUgZmlyc3QgYmxvY2sgdG8gNjQgYnl0ZXMgKi8KKyAgICBtZW1zZXQocCwgMCwgY291bnQpOworICAgIGJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKKyAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzIgKiljdHgtPmluKTsKKworICAgIC8qIE5vdyBmaWxsIHRoZSBuZXh0IGJsb2NrIHdpdGggNTYgYnl0ZXMgKi8KKyAgICBtZW1zZXQoY3R4LT5pbiwgMCwgNTYpOworICB9IGVsc2UgeworICAgIC8qIFBhZCBibG9jayB0byA1NiBieXRlcyAqLworICAgIG1lbXNldChwLCAwLCBjb3VudCAtIDgpOworICB9CisgIGJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE0KTsKKworICAvKiBBcHBlbmQgbGVuZ3RoIGluIGJpdHMgYW5kIHRyYW5zZm9ybSAqLworICBpbjMyWzE0XSA9IGN0eC0+Yml0c1swXTsKKyAgaW4zMlsxNV0gPSBjdHgtPmJpdHNbMV07CisKKyAgTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAodWludDMyICopY3R4LT5pbik7CisgIGJ5dGVSZXZlcnNlKCh1bnNpZ25lZCBjaGFyICopY3R4LT5idWYsIDQpOworICBtZW1jcHkoZGlnZXN0LCBjdHgtPmJ1ZiwgMTYpOworICBtZW1zZXQoY3R4LCAwLCBzaXplb2Yoc3RydWN0IE1ENUNvbnRleHQpKTsgICAgIC8qIEluIGNhc2UgaXQncyBzZW5zaXRpdmUgKi8KK30KKworCisvKiBUaGUgZm91ciBjb3JlIGZ1bmN0aW9ucyAtIEYxIGlzIG9wdGltaXplZCBzb21ld2hhdCAqLworCisvKiAjZGVmaW5lIEYxKHgsIHksIHopICh4ICYgeSB8IH54ICYgeikgKi8KKyNkZWZpbmUgRjEoeCwgeSwgeikgICh6IF4gKHggJiAoeSBeIHopKSkKKyNkZWZpbmUgRjIoeCwgeSwgeikgIEYxKHosIHgsIHkpCisjZGVmaW5lIEYzKHgsIHksIHopICAoeCBeIHkgXiB6KQorI2RlZmluZSBGNCh4LCB5LCB6KSAgKHkgXiAoeCB8IH56KSkKKworLyogVGhpcyBpcyB0aGUgY2VudHJhbCBzdGVwIGluIHRoZSBNRDUgYWxnb3JpdGhtLiAqLworI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGRhdGEsIHMpIFwKKyAgKCB3ICs9IGYoeCwgeSwgeikgKyBkYXRhLCAgdyA9IHcgPDwgcyB8IHcgPj4gKDMyIC0gcyksICB3ICs9IHggKQorCisvKgorICogVGhlIGNvcmUgb2YgdGhlIE1ENSBhbGdvcml0aG0sIHRoaXMgYWx0ZXJzIGFuIGV4aXN0aW5nIE1ENSBoYXNoIHRvCisgKiByZWZsZWN0IHRoZSBhZGRpdGlvbiBvZiAxNiBsb25nd29yZHMgb2YgbmV3IGRhdGEuICBNRDVVcGRhdGUgYmxvY2tzCisgKiB0aGUgZGF0YSBhbmQgY29udmVydHMgYnl0ZXMgaW50byBsb25nd29yZHMgZm9yIHRoaXMgcm91dGluZS4KKyAqLwordm9pZCBNRDVUcmFuc2Zvcm0odWludDMyIGJ1Zls0XSwgdWludDMyIGluWzE2XSkKK3sKKyAgcmVnaXN0ZXIgdWludDMyIGEsIGIsIGMsIGQ7CisKKyAgYSA9IGJ1ZlswXTsKKyAgYiA9IGJ1ZlsxXTsKKyAgYyA9IGJ1ZlsyXTsKKyAgZCA9IGJ1ZlszXTsKKworICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZDc2YWE0NzgsIDcpOworICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxXSArIDB4ZThjN2I3NTYsIDEyKTsKKyAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMl0gKyAweDI0MjA3MGRiLCAxNyk7CisgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzNdICsgMHhjMWJkY2VlZSwgMjIpOworICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls0XSArIDB4ZjU3YzBmYWYsIDcpOworICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls1XSArIDB4NDc4N2M2MmEsIDEyKTsKKyAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGE4MzA0NjEzLCAxNyk7CisgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzddICsgMHhmZDQ2OTUwMSwgMjIpOworICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls4XSArIDB4Njk4MDk4ZDgsIDcpOworICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls5XSArIDB4OGI0NGY3YWYsIDEyKTsKKyAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTBdICsgMHhmZmZmNWJiMSwgMTcpOworICBNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblsxMV0gKyAweDg5NWNkN2JlLCAyMik7CisgIE1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NmI5MDExMjIsIDcpOworICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10gKyAweGZkOTg3MTkzLCAxMik7CisgIE1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzE0XSArIDB4YTY3OTQzOGUsIDE3KTsKKyAgTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTVdICsgMHg0OWI0MDgyMSwgMjIpOworCisgIE1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhmNjFlMjU2MiwgNSk7CisgIE1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzZdICsgMHhjMDQwYjM0MCwgOSk7CisgIE1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4MjY1ZTVhNTEsIDE0KTsKKyAgTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMF0gKyAweGU5YjZjN2FhLCAyMCk7CisgIE1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzVdICsgMHhkNjJmMTA1ZCwgNSk7CisgIE1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzEwXSArIDB4MDI0NDE0NTMsIDkpOworICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweGQ4YTFlNjgxLCAxNCk7CisgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzRdICsgMHhlN2QzZmJjOCwgMjApOworICBNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4MjFlMWNkZTYsIDUpOworICBNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxNF0gKyAweGMzMzcwN2Q2LCA5KTsKKyAgTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bM10gKyAweGY0ZDUwZDg3LCAxNCk7CisgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzhdICsgMHg0NTVhMTRlZCwgMjApOworICBNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweGE5ZTNlOTA1LCA1KTsKKyAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bMl0gKyAweGZjZWZhM2Y4LCA5KTsKKyAgTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bN10gKyAweDY3NmYwMmQ5LCAxNCk7CisgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzEyXSArIDB4OGQyYTRjOGEsIDIwKTsKKworICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZmZmYTM5NDIsIDQpOworICBNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls4XSArIDB4ODc3MWY2ODEsIDExKTsKKyAgTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdICsgMHg2ZDlkNjEyMiwgMTYpOworICBNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsxNF0gKyAweGZkZTUzODBjLCAyMyk7CisgIE1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhhNGJlZWE0NCwgNCk7CisgIE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzRdICsgMHg0YmRlY2ZhOSwgMTEpOworICBNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpbls3XSArIDB4ZjZiYjRiNjAsIDE2KTsKKyAgTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTBdICsgMHhiZWJmYmM3MCwgMjMpOworICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweDI4OWI3ZWM2LCA0KTsKKyAgTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMF0gKyAweGVhYTEyN2ZhLCAxMSk7CisgIE1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhkNGVmMzA4NSwgMTYpOworICBNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpbls2XSArIDB4MDQ4ODFkMDUsIDIzKTsKKyAgTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bOV0gKyAweGQ5ZDRkMDM5LCA0KTsKKyAgTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMTJdICsgMHhlNmRiOTllNSwgMTEpOworICBNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweDFmYTI3Y2Y4LCAxNik7CisgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzJdICsgMHhjNGFjNTY2NSwgMjMpOworCisgIE1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhmNDI5MjI0NCwgNik7CisgIE1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzddICsgMHg0MzJhZmY5NywgMTApOworICBNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGFiOTQyM2E3LCAxNSk7CisgIE1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzVdICsgMHhmYzkzYTAzOSwgMjEpOworICBNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDY1NWI1OWMzLCA2KTsKKyAgTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bM10gKyAweDhmMGNjYzkyLCAxMCk7CisgIE1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZlZmY0N2QsIDE1KTsKKyAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMV0gKyAweDg1ODQ1ZGQxLCAyMSk7CisgIE1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzhdICsgMHg2ZmE4N2U0ZiwgNik7CisgIE1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzE1XSArIDB4ZmUyY2U2ZTAsIDEwKTsKKyAgTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGEzMDE0MzE0LCAxNSk7CisgIE1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzEzXSArIDB4NGUwODExYTEsIDIxKTsKKyAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bNF0gKyAweGY3NTM3ZTgyLCA2KTsKKyAgTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTFdICsgMHhiZDNhZjIzNSwgMTApOworICBNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MmFkN2QyYmIsIDE1KTsKKyAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bOV0gKyAweGViODZkMzkxLCAyMSk7CisKKyAgYnVmWzBdICs9IGE7CisgIGJ1ZlsxXSArPSBiOworICBidWZbMl0gKz0gYzsKKyAgYnVmWzNdICs9IGQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9tZDUvbWQ1LmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9tZDUvbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3NDVlOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL21kNS9tZDUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKTIwMTggRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTUQ1X0gKKyNkZWZpbmUgTUQ1X0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9fYW1pZ2FvczRfXworI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisjZW5kaWYKKworLyogIE9uIG1hY2hpbmVzIHdoZXJlICJsb25nIiBpcyA2NCBiaXRzLCB3ZSBuZWVkIHRvIGRlY2xhcmUKKyAgICB1aW50MzIgYXMgc29tZXRoaW5nIGd1YXJhbnRlZWQgdG8gYmUgMzIgYml0cy4gICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsKKwordHlwZWRlZiBzdHJ1Y3QgTUQ1Q29udGV4dCB7CisgIHVpbnQzMiBidWZbNF07CisgIHVpbnQzMiBiaXRzWzJdOworICB1bnNpZ25lZCBjaGFyIGluWzY0XTsKK30gTUQ1X0NUWDsKKworZXh0ZXJuIHZvaWQgTUQ1SW5pdChzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KTsKK2V4dGVybiB2b2lkIE1ENVVwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gdm9pZCBNRDVGaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjdHgpOworZXh0ZXJuIHZvaWQgTUQ1VHJhbnNmb3JtKHVpbnQzMiBidWZbNF0sIHVpbnQzMiBpblsxNl0pOworZXh0ZXJuIGNoYXIgKk1ENUZpbGUoY29uc3QgY2hhciAqLCBjaGFyICopOworZXh0ZXJuIGNoYXIgKk1ENUZpbGVDaHVuayhjb25zdCBjaGFyICosIGNoYXIgKiwgb2ZmX3QsIG9mZl90KTsKKworI2VuZGlmIC8qICFNRDVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbWQ1L21kNWNtcC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbWQ1L21kNWNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjk0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9tZDUvbWQ1Y21wLmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDEzLCAyMDE2IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICIuL21kNS5oIgorI2luY2x1ZGUgIi4uL3RqdXRpbC5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICptZDVzdW0gPSBOVUxMLCBidWZbNjVdOworCisgIGlmIChhcmdjIDwgMykgeworICAgIGZwcmludGYoc3RkZXJyLCAiVVNBR0U6ICVzIDxjb3JyZWN0IE1ENSBzdW0+IDxmaWxlPlxuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKHN0cmxlbihhcmd2WzFdKSAhPSAzMikKKyAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IE1ENSBoYXNoIHNpemUgaXMgd3JvbmcuXG4iKTsKKworICBtZDVzdW0gPSBNRDVGaWxlKGFyZ3ZbMl0sIGJ1Zik7CisgIGlmICghbWQ1c3VtKSB7CisgICAgcGVycm9yKCJDb3VsZCBub3Qgb2J0YWluIE1ENSBzdW0iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoIXN0cmNhc2VjbXAobWQ1c3VtLCBhcmd2WzFdKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IE9LXG4iLCBhcmd2WzJdKTsKKyAgICByZXR1cm4gMDsKKyAgfSBlbHNlIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBGQUlMRUQuICBDaGVja3N1bSBpcyAlc1xuIiwgYXJndlsyXSwgbWQ1c3VtKTsKKyAgICByZXR1cm4gLTE7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL21kNS9tZDVobC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbWQ1L21kNWhsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkMmUyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL21kNS9tZDVobC5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiBtZFhobC5jCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAiVEhFIEJFRVItV0FSRSBMSUNFTlNFIiAoUmV2aXNpb24gNDIpOgorICogPHBoa0BGcmVlQlNELm9yZz4gd3JvdGUgdGhpcyBmaWxlLiAgQXMgbG9uZyBhcyB5b3UgcmV0YWluIHRoaXMgbm90aWNlIHlvdQorICogY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBzdHVmZi4gSWYgd2UgbWVldCBzb21lIGRheSwgYW5kIHlvdSB0aGluaworICogdGhpcyBzdHVmZiBpcyB3b3J0aCBpdCwgeW91IGNhbiBidXkgbWUgYSBiZWVyIGluIHJldHVybi4gICBQb3VsLUhlbm5pbmcgS2FtcAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKTIwMTYsIDIwMTggRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8aW8uaD4KKyNkZWZpbmUgY2xvc2UgIF9jbG9zZQorI2RlZmluZSBmc3RhdCAgX2ZzdGF0CisjZGVmaW5lIGxzZWVrICBfbHNlZWsKKyNkZWZpbmUgcmVhZCAgX3JlYWQKKyNkZWZpbmUgc3RhdCAgX3N0YXQKKyNlbHNlCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBMRU5HVEggIDE2CisKKyNpbmNsdWRlICIuL21kNS5oIgorCitjaGFyICpNRDVFbmQoTUQ1X0NUWCAqY3R4LCBjaGFyICpidWYpCit7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtMRU5HVEhdOworICBzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKworICBpZiAoIWJ1ZikKKyAgICBidWYgPSBtYWxsb2MoMiAqIExFTkdUSCArIDEpOworICBpZiAoIWJ1ZikKKyAgICByZXR1cm4gMDsKKyAgTUQ1RmluYWwoZGlnZXN0LCBjdHgpOworICBmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspIHsKKyAgICBidWZbaSArIGldID0gaGV4W2RpZ2VzdFtpXSA+PiA0XTsKKyAgICBidWZbaSArIGkgKyAxXSA9IGhleFtkaWdlc3RbaV0gJiAweDBmXTsKKyAgfQorICBidWZbaSArIGldID0gJ1wwJzsKKyAgcmV0dXJuIGJ1ZjsKK30KKworY2hhciAqTUQ1RmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqYnVmKQoreworICByZXR1cm4gKE1ENUZpbGVDaHVuayhmaWxlbmFtZSwgYnVmLCAwLCAwKSk7Cit9CisKK2NoYXIgKk1ENUZpbGVDaHVuayhjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqYnVmLCBvZmZfdCBvZnMsIG9mZl90IGxlbikKK3sKKyAgdW5zaWduZWQgY2hhciBidWZmZXJbQlVGU0laXTsKKyAgTUQ1X0NUWCBjdHg7CisgIHN0cnVjdCBzdGF0IHN0YnVmOworICBpbnQgZiwgaSwgZTsKKyAgb2ZmX3QgbjsKKworICBNRDVJbml0KCZjdHgpOworI2lmIF9XSU4zMgorICBmID0gX29wZW4oZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlkpOworI2Vsc2UKKyAgZiA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKyNlbmRpZgorICBpZiAoZiA8IDApCisgICAgcmV0dXJuIDA7CisgIGlmIChmc3RhdChmLCAmc3RidWYpIDwgMCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKG9mcyA+IHN0YnVmLnN0X3NpemUpCisgICAgb2ZzID0gc3RidWYuc3Rfc2l6ZTsKKyAgaWYgKChsZW4gPT0gMCkgfHwgKGxlbiA+IHN0YnVmLnN0X3NpemUgLSBvZnMpKQorICAgIGxlbiA9IHN0YnVmLnN0X3NpemUgLSBvZnM7CisgIGlmIChsc2VlayhmLCBvZnMsIFNFRUtfU0VUKSA8IDApCisgICAgcmV0dXJuIDA7CisgIG4gPSBsZW47CisgIGkgPSAwOworICB3aGlsZSAobiA+IDApIHsKKyAgICBpZiAobiA+IHNpemVvZihidWZmZXIpKQorICAgICAgaSA9IHJlYWQoZiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgZWxzZQorICAgICAgaSA9IHJlYWQoZiwgYnVmZmVyLCBuKTsKKyAgICBpZiAoaSA8IDApCisgICAgICBicmVhazsKKyAgICBNRDVVcGRhdGUoJmN0eCwgYnVmZmVyLCBpKTsKKyAgICBuIC09IGk7CisgIH0KKyAgZSA9IGVycm5vOworICBjbG9zZShmKTsKKyAgZXJybm8gPSBlOworICBpZiAoaSA8IDApCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAoTUQ1RW5kKCZjdHgsIGJ1ZikpOworfQorCitjaGFyICpNRDVEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIGNoYXIgKmJ1ZikKK3sKKyAgTUQ1X0NUWCBjdHg7CisKKyAgTUQ1SW5pdCgmY3R4KTsKKyAgTUQ1VXBkYXRlKCZjdHgsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgbGVuKTsKKyAgcmV0dXJuIChNRDVFbmQoJmN0eCwgYnVmKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGJtcC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRibXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FiYmIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRibXAuYwpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIHJkYm1wLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDktMjAxMCBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogTW9kaWZpZWQgMjAxMSBieSBTaWFyaGVpIFNpYW1hc2hrYS4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRvIHJlYWQgaW5wdXQgaW1hZ2VzIGluIE1pY3Jvc29mdCAiQk1QIgorICogZm9ybWF0IChNUyBXaW5kb3dzIDMueCwgT1MvMiAxLngsIGFuZCBPUy8yIDIueCBmbGF2b3JzKS4KKyAqIEN1cnJlbnRseSwgb25seSA4LWJpdCBhbmQgMjQtYml0IGltYWdlcyBhcmUgc3VwcG9ydGVkLCBub3QgMS1iaXQgb3IKKyAqIDQtYml0IChmZWVkaW5nIHN1Y2ggbG93LWRlcHRoIGltYWdlcyBpbnRvIEpQRUcgd291bGQgYmUgc2lsbHkgYW55d2F5KS4KKyAqIEFsc28sIHdlIGRvbid0IHN1cHBvcnQgUkxFLWNvbXByZXNzZWQgZmlsZXMuCisgKgorICogVGhlc2Ugcm91dGluZXMgbWF5IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBub24tVW5peCBlbnZpcm9ubWVudHMgb3IKKyAqIHNwZWNpYWxpemVkIGFwcGxpY2F0aW9ucy4gIEFzIHRoZXkgc3RhbmQsIHRoZXkgYXNzdW1lIGlucHV0IGZyb20KKyAqIGFuIG9yZGluYXJ5IHN0ZGlvIHN0cmVhbS4gIFRoZXkgZnVydGhlciBhc3N1bWUgdGhhdCByZWFkaW5nIGJlZ2lucworICogYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlOyBzdGFydF9pbnB1dCBtYXkgbmVlZCB3b3JrIGlmIHRoZQorICogdXNlciBpbnRlcmZhY2UgaGFzIGFscmVhZHkgcmVhZCBzb21lIGRhdGEgKGUuZy4sIHRvIGRldGVybWluZSB0aGF0CisgKiB0aGUgZmlsZSBpcyBpbmRlZWQgQk1QIGZvcm1hdCkuCisgKgorICogVGhpcyBjb2RlIGNvbnRyaWJ1dGVkIGJ5IEphbWVzIEFydGh1ciBCb3VjaGVyLgorICovCisKKyNpbmNsdWRlICJjbXlrLmgiCisjaW5jbHVkZSAiY2RqcGVnLmgiICAgICAgICAgICAgIC8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCisKKyNpZmRlZiBCTVBfU1VQUE9SVEVECisKKworLyogTWFjcm9zIHRvIGRlYWwgd2l0aCB1bnNpZ25lZCBjaGFycyBhcyBlZmZpY2llbnRseSBhcyBjb21waWxlciBhbGxvd3MgKi8KKworI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVfQ0hBUjsKKyNkZWZpbmUgVUNIKHgpICAoKGludCkoeCkpCisjZWxzZSAvKiAhSEFWRV9VTlNJR05FRF9DSEFSICovCisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KK3R5cGVkZWYgY2hhciBVX0NIQVI7CisjZGVmaW5lIFVDSCh4KSAgKChpbnQpKHgpKQorI2Vsc2UKK3R5cGVkZWYgY2hhciBVX0NIQVI7CisjZGVmaW5lIFVDSCh4KSAgKChpbnQpKHgpICYgMHhGRikKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLworCisKKyNkZWZpbmUgUmVhZE9LKGZpbGUsIGJ1ZmZlciwgbGVuKSBcCisgIChKRlJFQUQoZmlsZSwgYnVmZmVyLCBsZW4pID09ICgoc2l6ZV90KShsZW4pKSkKKworc3RhdGljIGludCBhbHBoYV9pbmRleFtKUEVHX05VTUNTXSA9IHsKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMywgMywgMCwgMCwgLTEKK307CisKKworLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgc291cmNlIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCBfYm1wX3NvdXJjZV9zdHJ1Y3QgKmJtcF9zb3VyY2VfcHRyOworCit0eXBlZGVmIHN0cnVjdCBfYm1wX3NvdXJjZV9zdHJ1Y3QgeworICBzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBqX2NvbXByZXNzX3B0ciBjaW5mbzsgICAgICAgICAvKiBiYWNrIGxpbmsgc2F2ZXMgcGFzc2luZyBzZXBhcmF0ZSBwYXJtICovCisKKyAgSlNBTVBBUlJBWSBjb2xvcm1hcDsgICAgICAgICAgLyogQk1QIGNvbG9ybWFwIChjb252ZXJ0ZWQgdG8gbXkgZm9ybWF0KSAqLworCisgIGp2aXJ0X3NhcnJheV9wdHIgd2hvbGVfaW1hZ2U7IC8qIE5lZWRlZCB0byByZXZlcnNlIHJvdyBvcmRlciAqLworICBKRElNRU5TSU9OIHNvdXJjZV9yb3c7ICAgICAgICAvKiBDdXJyZW50IHNvdXJjZSByb3cgbnVtYmVyICovCisgIEpESU1FTlNJT04gcm93X3dpZHRoOyAgICAgICAgIC8qIFBoeXNpY2FsIHdpZHRoIG9mIHNjYW5saW5lcyBpbiBmaWxlICovCisKKyAgaW50IGJpdHNfcGVyX3BpeGVsOyAgICAgICAgICAgLyogcmVtZW1iZXJzIDgtIG9yIDI0LWJpdCBmb3JtYXQgKi8KKworICBib29sZWFuIHVzZV9pbnZlcnNpb25fYXJyYXk7ICAvKiBUUlVFID0gcHJlbG9hZCB0aGUgd2hvbGUgaW1hZ2UsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlZCBpbiBib3R0b20tdXAgb3JkZXIsIGFuZCBmZWVkIGl0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsaW5nIHByb2dyYW0gaW4gdG9wLWRvd24gb3JkZXIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSA9IHRoZSBjYWxsaW5nIHByb2dyYW0gd2lsbCBtYWludGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHMgb3duIGltYWdlIGJ1ZmZlciBhbmQgcmVhZCB0aGUgcm93cyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20tdXAgb3JkZXIgKi8KKworICBVX0NIQVIgKmlvYnVmZmVyOyAgICAgICAgICAgICAvKiBJL08gYnVmZmVyICh1c2VkIHRvIGJ1ZmZlciBhIHNpbmdsZSByb3cgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrIGlmIHVzZV9pbnZlcnNpb25fYXJyYXkgPT0gRkFMU0UpICovCit9IGJtcF9zb3VyY2Vfc3RydWN0OworCisKK0xPQ0FMKGludCkKK3JlYWRfYnl0ZShibXBfc291cmNlX3B0ciBzaW5mbykKKy8qIFJlYWQgbmV4dCBieXRlIGZyb20gQk1QIGZpbGUgKi8KK3sKKyAgcmVnaXN0ZXIgRklMRSAqaW5maWxlID0gc2luZm8tPnB1Yi5pbnB1dF9maWxlOworICByZWdpc3RlciBpbnQgYzsKKworICBpZiAoKGMgPSBnZXRjKGluZmlsZSkpID09IEVPRikKKyAgICBFUlJFWElUKHNpbmZvLT5jaW5mbywgSkVSUl9JTlBVVF9FT0YpOworICByZXR1cm4gYzsKK30KKworCitMT0NBTCh2b2lkKQorcmVhZF9jb2xvcm1hcChibXBfc291cmNlX3B0ciBzaW5mbywgaW50IGNtYXBsZW4sIGludCBtYXBlbnRyeXNpemUpCisvKiBSZWFkIHRoZSBjb2xvcm1hcCBmcm9tIGEgQk1QIGZpbGUgKi8KK3sKKyAgaW50IGksIGdyYXkgPSAxOworCisgIHN3aXRjaCAobWFwZW50cnlzaXplKSB7CisgIGNhc2UgMzoKKyAgICAvKiBCR1IgZm9ybWF0IChvY2N1cnMgaW4gT1MvMiBmaWxlcykgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY21hcGxlbjsgaSsrKSB7CisgICAgICBzaW5mby0+Y29sb3JtYXBbMl1baV0gPSAoSlNBTVBMRSlyZWFkX2J5dGUoc2luZm8pOworICAgICAgc2luZm8tPmNvbG9ybWFwWzFdW2ldID0gKEpTQU1QTEUpcmVhZF9ieXRlKHNpbmZvKTsKKyAgICAgIHNpbmZvLT5jb2xvcm1hcFswXVtpXSA9IChKU0FNUExFKXJlYWRfYnl0ZShzaW5mbyk7CisgICAgICBpZiAoc2luZm8tPmNvbG9ybWFwWzJdW2ldICE9IHNpbmZvLT5jb2xvcm1hcFsxXVtpXSB8fAorICAgICAgICAgIHNpbmZvLT5jb2xvcm1hcFsxXVtpXSAhPSBzaW5mby0+Y29sb3JtYXBbMF1baV0pCisgICAgICAgIGdyYXkgPSAwOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA0OgorICAgIC8qIEJHUjAgZm9ybWF0IChvY2N1cnMgaW4gTVMgV2luZG93cyBmaWxlcykgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY21hcGxlbjsgaSsrKSB7CisgICAgICBzaW5mby0+Y29sb3JtYXBbMl1baV0gPSAoSlNBTVBMRSlyZWFkX2J5dGUoc2luZm8pOworICAgICAgc2luZm8tPmNvbG9ybWFwWzFdW2ldID0gKEpTQU1QTEUpcmVhZF9ieXRlKHNpbmZvKTsKKyAgICAgIHNpbmZvLT5jb2xvcm1hcFswXVtpXSA9IChKU0FNUExFKXJlYWRfYnl0ZShzaW5mbyk7CisgICAgICAodm9pZClyZWFkX2J5dGUoc2luZm8pOworICAgICAgaWYgKHNpbmZvLT5jb2xvcm1hcFsyXVtpXSAhPSBzaW5mby0+Y29sb3JtYXBbMV1baV0gfHwKKyAgICAgICAgICBzaW5mby0+Y29sb3JtYXBbMV1baV0gIT0gc2luZm8tPmNvbG9ybWFwWzBdW2ldKQorICAgICAgICBncmF5ID0gMDsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChzaW5mby0+Y2luZm8sIEpFUlJfQk1QX0JBRENNQVApOworICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpbmZvLT5jaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1VOS05PV04gJiYgZ3JheSkKKyAgICBzaW5mby0+Y2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKworICBpZiAoc2luZm8tPmNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFICYmICFncmF5KQorICAgIEVSUkVYSVQoc2luZm8tPmNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsKK30KKworCisvKgorICogUmVhZCBvbmUgcm93IG9mIHBpeGVscy4KKyAqIFRoZSBpbWFnZSBoYXMgYmVlbiByZWFkIGludG8gdGhlIHdob2xlX2ltYWdlIGFycmF5LCBidXQgaXMgb3RoZXJ3aXNlCisgKiB1bnByb2Nlc3NlZC4gIFdlIG11c3QgcmVhZCBpdCBvdXQgaW4gdG9wLXRvLWJvdHRvbSByb3cgb3JkZXIsIGFuZCBpZgorICogaXQgaXMgYW4gOC1iaXQgaW1hZ2UsIHdlIG11c3QgZXhwYW5kIGNvbG9ybWFwcGVkIHBpeGVscyB0byAyNGJpdCBmb3JtYXQuCisgKi8KKworTUVUSE9EREVGKEpESU1FTlNJT04pCitnZXRfOGJpdF9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgOC1iaXQgY29sb3JtYXAgaW5kZXhlcyAqLworeworICBibXBfc291cmNlX3B0ciBzb3VyY2UgPSAoYm1wX3NvdXJjZV9wdHIpc2luZm87CisgIHJlZ2lzdGVyIEpTQU1QQVJSQVkgY29sb3JtYXAgPSBzb3VyY2UtPmNvbG9ybWFwOworICBKU0FNUEFSUkFZIGltYWdlX3B0cjsKKyAgcmVnaXN0ZXIgaW50IHQ7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworCisgIGlmIChzb3VyY2UtPnVzZV9pbnZlcnNpb25fYXJyYXkpIHsKKyAgICAvKiBGZXRjaCBuZXh0IHJvdyBmcm9tIHZpcnR1YWwgYXJyYXkgKi8KKyAgICBzb3VyY2UtPnNvdXJjZV9yb3ctLTsKKyAgICBpbWFnZV9wdHIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBzb3VyY2UtPndob2xlX2ltYWdlLAorICAgICAgIHNvdXJjZS0+c291cmNlX3JvdywgKEpESU1FTlNJT04pMSwgRkFMU0UpOworICAgIGlucHRyID0gaW1hZ2VfcHRyWzBdOworICB9IGVsc2UgeworICAgIGlmICghUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIHNvdXJjZS0+aW9idWZmZXIsIHNvdXJjZS0+cm93X3dpZHRoKSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgICBpbnB0ciA9IHNvdXJjZS0+aW9idWZmZXI7CisgIH0KKworICAvKiBFeHBhbmQgdGhlIGNvbG9ybWFwIGluZGV4ZXMgdG8gcmVhbCBkYXRhICovCisgIG91dHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKSB7CisgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICB0ID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICAqb3V0cHRyKysgPSBjb2xvcm1hcFswXVt0XTsKKyAgICB9CisgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSB7CisgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICB0ID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICByZ2JfdG9fY215ayhjb2xvcm1hcFswXVt0XSwgY29sb3JtYXBbMV1bdF0sIGNvbG9ybWFwWzJdW3RdLCBvdXRwdHIsCisgICAgICAgICAgICAgICAgICBvdXRwdHIgKyAxLCBvdXRwdHIgKyAyLCBvdXRwdHIgKyAzKTsKKyAgICAgIG91dHB0ciArPSA0OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZWdpc3RlciBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICAgIHJlZ2lzdGVyIGludCBnaW5kZXggPSByZ2JfZ3JlZW5bY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgYmluZGV4ID0gcmdiX2JsdWVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgYWluZGV4ID0gYWxwaGFfaW5kZXhbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgcHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisKKyAgICBpZiAoYWluZGV4ID49IDApIHsKKyAgICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICB0ID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICAgIG91dHB0cltyaW5kZXhdID0gY29sb3JtYXBbMF1bdF07CisgICAgICAgIG91dHB0cltnaW5kZXhdID0gY29sb3JtYXBbMV1bdF07CisgICAgICAgIG91dHB0cltiaW5kZXhdID0gY29sb3JtYXBbMl1bdF07CisgICAgICAgIG91dHB0clthaW5kZXhdID0gMHhGRjsKKyAgICAgICAgb3V0cHRyICs9IHBzOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKGNvbCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgICAgdCA9IEdFVEpTQU1QTEUoKmlucHRyKyspOworICAgICAgICBvdXRwdHJbcmluZGV4XSA9IGNvbG9ybWFwWzBdW3RdOworICAgICAgICBvdXRwdHJbZ2luZGV4XSA9IGNvbG9ybWFwWzFdW3RdOworICAgICAgICBvdXRwdHJbYmluZGV4XSA9IGNvbG9ybWFwWzJdW3RdOworICAgICAgICBvdXRwdHIgKz0gcHM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKworTUVUSE9EREVGKEpESU1FTlNJT04pCitnZXRfMjRiaXRfcm93KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQorLyogVGhpcyB2ZXJzaW9uIGlzIGZvciByZWFkaW5nIDI0LWJpdCBwaXhlbHMgKi8KK3sKKyAgYm1wX3NvdXJjZV9wdHIgc291cmNlID0gKGJtcF9zb3VyY2VfcHRyKXNpbmZvOworICBKU0FNUEFSUkFZIGltYWdlX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisKKyAgaWYgKHNvdXJjZS0+dXNlX2ludmVyc2lvbl9hcnJheSkgeworICAgIC8qIEZldGNoIG5leHQgcm93IGZyb20gdmlydHVhbCBhcnJheSAqLworICAgIHNvdXJjZS0+c291cmNlX3Jvdy0tOworICAgIGltYWdlX3B0ciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIHNvdXJjZS0+d2hvbGVfaW1hZ2UsCisgICAgICAgc291cmNlLT5zb3VyY2Vfcm93LCAoSkRJTUVOU0lPTikxLCBGQUxTRSk7CisgICAgaW5wdHIgPSBpbWFnZV9wdHJbMF07CisgIH0gZWxzZSB7CisgICAgaWYgKCFSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgc291cmNlLT5pb2J1ZmZlciwgc291cmNlLT5yb3dfd2lkdGgpKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9JTlBVVF9FT0YpOworICAgIGlucHRyID0gc291cmNlLT5pb2J1ZmZlcjsKKyAgfQorCisgIC8qIFRyYW5zZmVyIGRhdGEuICBOb3RlIHNvdXJjZSB2YWx1ZXMgYXJlIGluIEJHUiBvcmRlcgorICAgKiAoZXZlbiB0aG91Z2ggTWljcm9zb2Z0J3Mgb3duIGRvY3VtZW50cyBzYXkgdGhlIG9wcG9zaXRlKS4KKyAgICovCisgIG91dHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX0JHUikgeworICAgIE1FTUNPUFkob3V0cHRyLCBpbnB0ciwgc291cmNlLT5yb3dfd2lkdGgpOworICB9IGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLworICAgICAgSlNBTVBMRSBiID0gKmlucHRyKyssIGcgPSAqaW5wdHIrKywgciA9ICppbnB0cisrOworICAgICAgcmdiX3RvX2NteWsociwgZywgYiwgb3V0cHRyLCBvdXRwdHIgKyAxLCBvdXRwdHIgKyAyLCBvdXRwdHIgKyAzKTsKKyAgICAgIG91dHB0ciArPSA0OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZWdpc3RlciBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICAgIHJlZ2lzdGVyIGludCBnaW5kZXggPSByZ2JfZ3JlZW5bY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgYmluZGV4ID0gcmdiX2JsdWVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgYWluZGV4ID0gYWxwaGFfaW5kZXhbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgcHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisKKyAgICBpZiAoYWluZGV4ID49IDApIHsKKyAgICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICBvdXRwdHJbYmluZGV4XSA9ICppbnB0cisrOyAgICAgIC8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICAgICAgb3V0cHRyW2dpbmRleF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyW3JpbmRleF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyW2FpbmRleF0gPSAweEZGOworICAgICAgICBvdXRwdHIgKz0gcHM7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICBvdXRwdHJbYmluZGV4XSA9ICppbnB0cisrOyAgICAgIC8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICAgICAgb3V0cHRyW2dpbmRleF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyW3JpbmRleF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyICs9IHBzOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0XzMyYml0X3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyAzMi1iaXQgcGl4ZWxzICovCit7CisgIGJtcF9zb3VyY2VfcHRyIHNvdXJjZSA9IChibXBfc291cmNlX3B0cilzaW5mbzsKKyAgSlNBTVBBUlJBWSBpbWFnZV9wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworCisgIGlmIChzb3VyY2UtPnVzZV9pbnZlcnNpb25fYXJyYXkpIHsKKyAgICAvKiBGZXRjaCBuZXh0IHJvdyBmcm9tIHZpcnR1YWwgYXJyYXkgKi8KKyAgICBzb3VyY2UtPnNvdXJjZV9yb3ctLTsKKyAgICBpbWFnZV9wdHIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBzb3VyY2UtPndob2xlX2ltYWdlLAorICAgICAgIHNvdXJjZS0+c291cmNlX3JvdywgKEpESU1FTlNJT04pMSwgRkFMU0UpOworICAgIGlucHRyID0gaW1hZ2VfcHRyWzBdOworICB9IGVsc2UgeworICAgIGlmICghUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIHNvdXJjZS0+aW9idWZmZXIsIHNvdXJjZS0+cm93X3dpZHRoKSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgICBpbnB0ciA9IHNvdXJjZS0+aW9idWZmZXI7CisgIH0KKworICAvKiBUcmFuc2ZlciBkYXRhLiAgTm90ZSBzb3VyY2UgdmFsdWVzIGFyZSBpbiBCR1Igb3JkZXIKKyAgICogKGV2ZW4gdGhvdWdoIE1pY3Jvc29mdCdzIG93biBkb2N1bWVudHMgc2F5IHRoZSBvcHBvc2l0ZSkuCisgICAqLworICBvdXRwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9CR1JYIHx8CisgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9CR1JBKSB7CisgICAgTUVNQ09QWShvdXRwdHIsIGlucHRyLCBzb3VyY2UtPnJvd193aWR0aCk7CisgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSB7CisgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICAvKiBjYW4gb21pdCBHRVRKU0FNUExFKCkgc2FmZWx5ICovCisgICAgICBKU0FNUExFIGIgPSAqaW5wdHIrKywgZyA9ICppbnB0cisrLCByID0gKmlucHRyKys7CisgICAgICByZ2JfdG9fY215ayhyLCBnLCBiLCBvdXRwdHIsIG91dHB0ciArIDEsIG91dHB0ciArIDIsIG91dHB0ciArIDMpOworICAgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIDR0aCBieXRlIChBbHBoYSBjaGFubmVsKSAqLworICAgICAgb3V0cHRyICs9IDQ7CisgICAgfQorICB9IGVsc2UgeworICAgIHJlZ2lzdGVyIGludCByaW5kZXggPSByZ2JfcmVkW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgICAgcmVnaXN0ZXIgaW50IGdpbmRleCA9IHJnYl9ncmVlbltjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICAgIHJlZ2lzdGVyIGludCBiaW5kZXggPSByZ2JfYmx1ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICAgIHJlZ2lzdGVyIGludCBhaW5kZXggPSBhbHBoYV9pbmRleFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICAgIHJlZ2lzdGVyIGludCBwcyA9IHJnYl9waXhlbHNpemVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKworICAgIGlmIChhaW5kZXggPj0gMCkgeworICAgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICAgIG91dHB0cltiaW5kZXhdID0gKmlucHRyKys7ICAgICAgLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLworICAgICAgICBvdXRwdHJbZ2luZGV4XSA9ICppbnB0cisrOworICAgICAgICBvdXRwdHJbcmluZGV4XSA9ICppbnB0cisrOworICAgICAgICBvdXRwdHJbYWluZGV4XSA9ICppbnB0cisrOworICAgICAgICBvdXRwdHIgKz0gcHM7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICBvdXRwdHJbYmluZGV4XSA9ICppbnB0cisrOyAgICAgIC8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICAgICAgb3V0cHRyW2dpbmRleF0gPSAqaW5wdHIrKzsKKyAgICAgICAgb3V0cHRyW3JpbmRleF0gPSAqaW5wdHIrKzsKKyAgICAgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSA0dGggYnl0ZSAoQWxwaGEgY2hhbm5lbCkgKi8KKyAgICAgICAgb3V0cHRyICs9IHBzOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAxOworfQorCisKKy8qCisgKiBUaGlzIG1ldGhvZCBsb2FkcyB0aGUgaW1hZ2UgaW50byB3aG9sZV9pbWFnZSBkdXJpbmcgdGhlIGZpcnN0IGNhbGwgb24KKyAqIGdldF9waXhlbF9yb3dzLiAgVGhlIGdldF9waXhlbF9yb3dzIHBvaW50ZXIgaXMgdGhlbiBhZGp1c3RlZCB0byBjYWxsCisgKiBnZXRfOGJpdF9yb3csIGdldF8yNGJpdF9yb3csIG9yIGdldF8zMmJpdF9yb3cgb24gc3Vic2VxdWVudCBjYWxscy4KKyAqLworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK3ByZWxvYWRfaW1hZ2Uoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIGJtcF9zb3VyY2VfcHRyIHNvdXJjZSA9IChibXBfc291cmNlX3B0cilzaW5mbzsKKyAgcmVnaXN0ZXIgRklMRSAqaW5maWxlID0gc291cmNlLT5wdWIuaW5wdXRfZmlsZTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0X3B0cjsKKyAgSlNBTVBBUlJBWSBpbWFnZV9wdHI7CisgIEpESU1FTlNJT04gcm93OworICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MgPSAoY2RfcHJvZ3Jlc3NfcHRyKWNpbmZvLT5wcm9ncmVzczsKKworICAvKiBSZWFkIHRoZSBkYXRhIGludG8gYSB2aXJ0dWFsIGFycmF5IGluIGlucHV0LWZpbGUgcm93IG9yZGVyLiAqLworICBmb3IgKHJvdyA9IDA7IHJvdyA8IGNpbmZvLT5pbWFnZV9oZWlnaHQ7IHJvdysrKSB7CisgICAgaWYgKHByb2dyZXNzICE9IE5VTEwpIHsKKyAgICAgIHByb2dyZXNzLT5wdWIucGFzc19jb3VudGVyID0gKGxvbmcpcm93OworICAgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2xpbWl0ID0gKGxvbmcpY2luZm8tPmltYWdlX2hlaWdodDsKKyAgICAgICgqcHJvZ3Jlc3MtPnB1Yi5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgICAgfQorICAgIGltYWdlX3B0ciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIHNvdXJjZS0+d2hvbGVfaW1hZ2UsIHJvdywgKEpESU1FTlNJT04pMSwgVFJVRSk7CisgICAgb3V0X3B0ciA9IGltYWdlX3B0clswXTsKKyAgICBpZiAoZnJlYWQob3V0X3B0ciwgMSwgc291cmNlLT5yb3dfd2lkdGgsIGluZmlsZSkgIT0gc291cmNlLT5yb3dfd2lkdGgpIHsKKyAgICAgIGlmIChmZW9mKGluZmlsZSkpCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgICAgIGVsc2UKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1JFQUQpOworICAgIH0KKyAgfQorICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkKKyAgICBwcm9ncmVzcy0+Y29tcGxldGVkX2V4dHJhX3Bhc3NlcysrOworCisgIC8qIFNldCB1cCB0byByZWFkIGZyb20gdGhlIHZpcnR1YWwgYXJyYXkgaW4gdG9wLXRvLWJvdHRvbSBvcmRlciAqLworICBzd2l0Y2ggKHNvdXJjZS0+Yml0c19wZXJfcGl4ZWwpIHsKKyAgY2FzZSA4OgorICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0XzhiaXRfcm93OworICAgIGJyZWFrOworICBjYXNlIDI0OgorICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0XzI0Yml0X3JvdzsKKyAgICBicmVhazsKKyAgY2FzZSAzMjoKKyAgICBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyA9IGdldF8zMmJpdF9yb3c7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CTVBfQkFEREVQVEgpOworICB9CisgIHNvdXJjZS0+c291cmNlX3JvdyA9IGNpbmZvLT5pbWFnZV9oZWlnaHQ7CisKKyAgLyogQW5kIHJlYWQgdGhlIGZpcnN0IHJvdyAqLworICByZXR1cm4gKCpzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cykgKGNpbmZvLCBzaW5mbyk7Cit9CisKKworLyoKKyAqIFJlYWQgdGhlIGZpbGUgaGVhZGVyOyByZXR1cm4gaW1hZ2Ugc2l6ZSBhbmQgY29tcG9uZW50IGNvdW50LgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfaW5wdXRfYm1wKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICBibXBfc291cmNlX3B0ciBzb3VyY2UgPSAoYm1wX3NvdXJjZV9wdHIpc2luZm87CisgIFVfQ0hBUiBibXBmaWxlaGVhZGVyWzE0XTsKKyAgVV9DSEFSIGJtcGluZm9oZWFkZXJbNjRdOworCisjZGVmaW5lIEdFVF8yQihhcnJheSwgb2Zmc2V0KSBcCisgICgodW5zaWduZWQgc2hvcnQpVUNIKGFycmF5W29mZnNldF0pICsgXAorICAgKCgodW5zaWduZWQgc2hvcnQpVUNIKGFycmF5W29mZnNldCArIDFdKSkgPDwgOCkpCisjZGVmaW5lIEdFVF80QihhcnJheSwgb2Zmc2V0KSBcCisgICgodW5zaWduZWQgaW50KVVDSChhcnJheVtvZmZzZXRdKSArIFwKKyAgICgoKHVuc2lnbmVkIGludClVQ0goYXJyYXlbb2Zmc2V0ICsgMV0pKSA8PCA4KSArIFwKKyAgICgoKHVuc2lnbmVkIGludClVQ0goYXJyYXlbb2Zmc2V0ICsgMl0pKSA8PCAxNikgKyBcCisgICAoKCh1bnNpZ25lZCBpbnQpVUNIKGFycmF5W29mZnNldCArIDNdKSkgPDwgMjQpKQorCisgIHVuc2lnbmVkIGludCBiZk9mZkJpdHM7CisgIHVuc2lnbmVkIGludCBoZWFkZXJTaXplOworICBpbnQgYmlXaWR0aDsKKyAgaW50IGJpSGVpZ2h0OworICB1bnNpZ25lZCBzaG9ydCBiaVBsYW5lczsKKyAgdW5zaWduZWQgaW50IGJpQ29tcHJlc3Npb247CisgIGludCBiaVhQZWxzUGVyTWV0ZXIsIGJpWVBlbHNQZXJNZXRlcjsKKyAgdW5zaWduZWQgaW50IGJpQ2xyVXNlZCA9IDA7CisgIGludCBtYXBlbnRyeXNpemUgPSAwOyAgICAgICAgIC8qIDAgaW5kaWNhdGVzIG5vIGNvbG9ybWFwICovCisgIGludCBiUGFkOworICBKRElNRU5TSU9OIHJvd193aWR0aCA9IDA7CisKKyAgLyogUmVhZCBhbmQgdmVyaWZ5IHRoZSBiaXRtYXAgZmlsZSBoZWFkZXIgKi8KKyAgaWYgKCFSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgYm1wZmlsZWhlYWRlciwgMTQpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgaWYgKEdFVF8yQihibXBmaWxlaGVhZGVyLCAwKSAhPSAweDRENDIpIC8qICdCTScgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JNUF9OT1QpOworICBiZk9mZkJpdHMgPSBHRVRfNEIoYm1wZmlsZWhlYWRlciwgMTApOworICAvKiBXZSBpZ25vcmUgdGhlIHJlbWFpbmluZyBmaWxlaGVhZGVyIGZpZWxkcyAqLworCisgIC8qIFRoZSBpbmZvaGVhZGVyIG1pZ2h0IGJlIDEyIGJ5dGVzIChPUy8yIDEueCksIDQwIGJ5dGVzIChXaW5kb3dzKSwKKyAgICogb3IgNjQgYnl0ZXMgKE9TLzIgMi54KS4gIENoZWNrIHRoZSBmaXJzdCA0IGJ5dGVzIHRvIGZpbmQgb3V0IHdoaWNoLgorICAgKi8KKyAgaWYgKCFSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgYm1waW5mb2hlYWRlciwgNCkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9JTlBVVF9FT0YpOworICBoZWFkZXJTaXplID0gR0VUXzRCKGJtcGluZm9oZWFkZXIsIDApOworICBpZiAoaGVhZGVyU2l6ZSA8IDEyIHx8IGhlYWRlclNpemUgPiA2NCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JNUF9CQURIRUFERVIpOworICBpZiAoIVJlYWRPSyhzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCBibXBpbmZvaGVhZGVyICsgNCwgaGVhZGVyU2l6ZSAtIDQpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKworICBzd2l0Y2ggKGhlYWRlclNpemUpIHsKKyAgY2FzZSAxMjoKKyAgICAvKiBEZWNvZGUgT1MvMiAxLnggaGVhZGVyIChNaWNyb3NvZnQgY2FsbHMgdGhpcyBhIEJJVE1BUENPUkVIRUFERVIpICovCisgICAgYmlXaWR0aCA9IChpbnQpR0VUXzJCKGJtcGluZm9oZWFkZXIsIDQpOworICAgIGJpSGVpZ2h0ID0gKGludClHRVRfMkIoYm1waW5mb2hlYWRlciwgNik7CisgICAgYmlQbGFuZXMgPSBHRVRfMkIoYm1waW5mb2hlYWRlciwgOCk7CisgICAgc291cmNlLT5iaXRzX3Blcl9waXhlbCA9IChpbnQpR0VUXzJCKGJtcGluZm9oZWFkZXIsIDEwKTsKKworICAgIHN3aXRjaCAoc291cmNlLT5iaXRzX3Blcl9waXhlbCkgeworICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAvKiBjb2xvcm1hcHBlZCBpbWFnZSAqLworICAgICAgbWFwZW50cnlzaXplID0gMzsgICAgICAgICAvKiBPUy8yIHVzZXMgUkdCVFJJUExFIGNvbG9ybWFwICovCisgICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19CTVBfT1MyX01BUFBFRCwgYmlXaWR0aCwgYmlIZWlnaHQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyNDogICAgICAgICAgICAgICAgICAgIC8qIFJHQiBpbWFnZSAqLworICAgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfQk1QX09TMiwgYmlXaWR0aCwgYmlIZWlnaHQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0JBRERFUFRIKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA0MDoKKyAgY2FzZSA2NDoKKyAgICAvKiBEZWNvZGUgV2luZG93cyAzLnggaGVhZGVyIChNaWNyb3NvZnQgY2FsbHMgdGhpcyBhIEJJVE1BUElORk9IRUFERVIpICovCisgICAgLyogb3IgT1MvMiAyLnggaGVhZGVyLCB3aGljaCBoYXMgYWRkaXRpb25hbCBmaWVsZHMgdGhhdCB3ZSBpZ25vcmUgKi8KKyAgICBiaVdpZHRoID0gKGludClHRVRfNEIoYm1waW5mb2hlYWRlciwgNCk7CisgICAgYmlIZWlnaHQgPSAoaW50KUdFVF80QihibXBpbmZvaGVhZGVyLCA4KTsKKyAgICBiaVBsYW5lcyA9IEdFVF8yQihibXBpbmZvaGVhZGVyLCAxMik7CisgICAgc291cmNlLT5iaXRzX3Blcl9waXhlbCA9IChpbnQpR0VUXzJCKGJtcGluZm9oZWFkZXIsIDE0KTsKKyAgICBiaUNvbXByZXNzaW9uID0gR0VUXzRCKGJtcGluZm9oZWFkZXIsIDE2KTsKKyAgICBiaVhQZWxzUGVyTWV0ZXIgPSAoaW50KUdFVF80QihibXBpbmZvaGVhZGVyLCAyNCk7CisgICAgYmlZUGVsc1Blck1ldGVyID0gKGludClHRVRfNEIoYm1waW5mb2hlYWRlciwgMjgpOworICAgIGJpQ2xyVXNlZCA9IEdFVF80QihibXBpbmZvaGVhZGVyLCAzMik7CisgICAgLyogYmlTaXplSW1hZ2UsIGJpQ2xySW1wb3J0YW50IGZpZWxkcyBhcmUgaWdub3JlZCAqLworCisgICAgc3dpdGNoIChzb3VyY2UtPmJpdHNfcGVyX3BpeGVsKSB7CisgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgIC8qIGNvbG9ybWFwcGVkIGltYWdlICovCisgICAgICBtYXBlbnRyeXNpemUgPSA0OyAgICAgICAgIC8qIFdpbmRvd3MgdXNlcyBSR0JRVUFEIGNvbG9ybWFwICovCisgICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19CTVBfTUFQUEVELCBiaVdpZHRoLCBiaUhlaWdodCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI0OiAgICAgICAgICAgICAgICAgICAgLyogUkdCIGltYWdlICovCisgICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19CTVAsIGJpV2lkdGgsIGJpSGVpZ2h0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzI6ICAgICAgICAgICAgICAgICAgICAvKiBSR0IgaW1hZ2UgKyBBbHBoYSBjaGFubmVsICovCisgICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19CTVAsIGJpV2lkdGgsIGJpSGVpZ2h0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JNUF9CQURERVBUSCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGJpQ29tcHJlc3Npb24gIT0gMCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0NPTVBSRVNTRUQpOworCisgICAgaWYgKGJpWFBlbHNQZXJNZXRlciA+IDAgJiYgYmlZUGVsc1Blck1ldGVyID4gMCkgeworICAgICAgLyogU2V0IEpGSUYgZGVuc2l0eSBwYXJhbWV0ZXJzIGZyb20gdGhlIEJNUCBkYXRhICovCisgICAgICBjaW5mby0+WF9kZW5zaXR5ID0gKFVJTlQxNikoYmlYUGVsc1Blck1ldGVyIC8gMTAwKTsgLyogMTAwIGNtIHBlciBtZXRlciAqLworICAgICAgY2luZm8tPllfZGVuc2l0eSA9IChVSU5UMTYpKGJpWVBlbHNQZXJNZXRlciAvIDEwMCk7CisgICAgICBjaW5mby0+ZGVuc2l0eV91bml0ID0gMjsgIC8qIGRvdHMvY20gKi8KKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CTVBfQkFESEVBREVSKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoYmlXaWR0aCA8PSAwIHx8IGJpSGVpZ2h0IDw9IDApCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CTVBfRU1QVFkpOworICBpZiAoYmlQbGFuZXMgIT0gMSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JNUF9CQURQTEFORVMpOworCisgIC8qIENvbXB1dGUgZGlzdGFuY2UgdG8gYml0bWFwIGRhdGEgLS0tIHdpbGwgYWRqdXN0IGZvciBjb2xvcm1hcCBiZWxvdyAqLworICBiUGFkID0gYmZPZmZCaXRzIC0gKGhlYWRlclNpemUgKyAxNCk7CisKKyAgLyogUmVhZCB0aGUgY29sb3JtYXAsIGlmIGFueSAqLworICBpZiAobWFwZW50cnlzaXplID4gMCkgeworICAgIGlmIChiaUNsclVzZWQgPD0gMCkKKyAgICAgIGJpQ2xyVXNlZCA9IDI1NjsgICAgICAgICAgLyogYXNzdW1lIGl0J3MgMjU2ICovCisgICAgZWxzZSBpZiAoYmlDbHJVc2VkID4gMjU2KQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CTVBfQkFEQ01BUCk7CisgICAgLyogQWxsb2NhdGUgc3BhY2UgdG8gc3RvcmUgdGhlIGNvbG9ybWFwICovCisgICAgc291cmNlLT5jb2xvcm1hcCA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCAoSkRJTUVOU0lPTiliaUNsclVzZWQsIChKRElNRU5TSU9OKTMpOworICAgIC8qIGFuZCByZWFkIGl0IGZyb20gdGhlIGZpbGUgKi8KKyAgICByZWFkX2NvbG9ybWFwKHNvdXJjZSwgKGludCliaUNsclVzZWQsIG1hcGVudHJ5c2l6ZSk7CisgICAgLyogYWNjb3VudCBmb3Igc2l6ZSBvZiBjb2xvcm1hcCAqLworICAgIGJQYWQgLT0gYmlDbHJVc2VkICogbWFwZW50cnlzaXplOworICB9CisKKyAgLyogU2tpcCBhbnkgcmVtYWluaW5nIHBhZCBieXRlcyAqLworICBpZiAoYlBhZCA8IDApICAgICAgICAgICAgICAgICAvKiBpbmNvcnJlY3QgYmZPZmZCaXRzIHZhbHVlPyAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0JBREhFQURFUik7CisgIHdoaWxlICgtLWJQYWQgPj0gMCkgeworICAgICh2b2lkKXJlYWRfYnl0ZShzb3VyY2UpOworICB9CisKKyAgLyogQ29tcHV0ZSByb3cgd2lkdGggaW4gZmlsZSwgaW5jbHVkaW5nIHBhZGRpbmcgdG8gNC1ieXRlIGJvdW5kYXJ5ICovCisgIHN3aXRjaCAoc291cmNlLT5iaXRzX3Blcl9waXhlbCkgeworICBjYXNlIDg6CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfVU5LTk9XTikKKyAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19FWFRfUkdCOworICAgIGlmIChJc0V4dFJHQihjaW5mby0+aW5fY29sb3Jfc3BhY2UpKQorICAgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgICAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpCisgICAgICBjaW5mby0+aW5wdXRfY29tcG9uZW50cyA9IDE7CisgICAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKQorICAgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSA0OworICAgIGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIHJvd193aWR0aCA9IChKRElNRU5TSU9OKWJpV2lkdGg7CisgICAgYnJlYWs7CisgIGNhc2UgMjQ6CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfVU5LTk9XTikKKyAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19FWFRfQkdSOworICAgIGlmIChJc0V4dFJHQihjaW5mby0+aW5fY29sb3Jfc3BhY2UpKQorICAgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgICAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKQorICAgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSA0OworICAgIGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIHJvd193aWR0aCA9IChKRElNRU5TSU9OKShiaVdpZHRoICogMyk7CisgICAgYnJlYWs7CisgIGNhc2UgMzI6CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfVU5LTk9XTikKKyAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19FWFRfQkdSQTsKKyAgICBpZiAoSXNFeHRSR0IoY2luZm8tPmluX2NvbG9yX3NwYWNlKSkKKyAgICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gcmdiX3BpeGVsc2l6ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICAgIGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykKKyAgICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gNDsKKyAgICBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsKKyAgICByb3dfd2lkdGggPSAoSkRJTUVOU0lPTikoYmlXaWR0aCAqIDQpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0JBRERFUFRIKTsKKyAgfQorICB3aGlsZSAoKHJvd193aWR0aCAmIDMpICE9IDApIHJvd193aWR0aCsrOworICBzb3VyY2UtPnJvd193aWR0aCA9IHJvd193aWR0aDsKKworICBpZiAoc291cmNlLT51c2VfaW52ZXJzaW9uX2FycmF5KSB7CisgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGludmVyc2lvbiBhcnJheSwgcHJlcGFyZSBmb3IgcHJlbG9hZCBwYXNzICovCisgICAgc291cmNlLT53aG9sZV9pbWFnZSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X3NhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwgRkFMU0UsCisgICAgICAgcm93X3dpZHRoLCAoSkRJTUVOU0lPTiliaUhlaWdodCwgKEpESU1FTlNJT04pMSk7CisgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBwcmVsb2FkX2ltYWdlOworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzID0gKGNkX3Byb2dyZXNzX3B0ciljaW5mby0+cHJvZ3Jlc3M7CisgICAgICBwcm9ncmVzcy0+dG90YWxfZXh0cmFfcGFzc2VzKys7IC8qIGNvdW50IGZpbGUgaW5wdXQgYXMgc2VwYXJhdGUgcGFzcyAqLworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzb3VyY2UtPmlvYnVmZmVyID0gKFVfQ0hBUiAqKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCByb3dfd2lkdGgpOworICAgIHN3aXRjaCAoc291cmNlLT5iaXRzX3Blcl9waXhlbCkgeworICAgIGNhc2UgODoKKyAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0XzhiaXRfcm93OworICAgICAgYnJlYWs7CisgICAgY2FzZSAyNDoKKyAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0XzI0Yml0X3JvdzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzI6CisgICAgICBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyA9IGdldF8zMmJpdF9yb3c7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CTVBfQkFEREVQVEgpOworICAgIH0KKyAgfQorCisgIC8qIEFsbG9jYXRlIG9uZS1yb3cgYnVmZmVyIGZvciByZXR1cm5lZCBkYXRhICovCisgIHNvdXJjZS0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgKEpESU1FTlNJT04pKGJpV2lkdGggKiBjaW5mby0+aW5wdXRfY29tcG9uZW50cyksIChKRElNRU5TSU9OKTEpOworICBzb3VyY2UtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKKworICBjaW5mby0+ZGF0YV9wcmVjaXNpb24gPSA4OworICBjaW5mby0+aW1hZ2Vfd2lkdGggPSAoSkRJTUVOU0lPTiliaVdpZHRoOworICBjaW5mby0+aW1hZ2VfaGVpZ2h0ID0gKEpESU1FTlNJT04pYmlIZWlnaHQ7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX2lucHV0X2JtcChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKK3sKKyAgLyogbm8gd29yayAqLworfQorCisKKy8qCisgKiBUaGUgbW9kdWxlIHNlbGVjdGlvbiByb3V0aW5lIGZvciBCTVAgZm9ybWF0IGlucHV0LgorICovCisKK0dMT0JBTChjanBlZ19zb3VyY2VfcHRyKQoramluaXRfcmVhZF9ibXAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gdXNlX2ludmVyc2lvbl9hcnJheSkKK3sKKyAgYm1wX3NvdXJjZV9wdHIgc291cmNlOworCisgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCAqLworICBzb3VyY2UgPSAoYm1wX3NvdXJjZV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYm1wX3NvdXJjZV9zdHJ1Y3QpKTsKKyAgc291cmNlLT5jaW5mbyA9IGNpbmZvOyAgICAgICAgLyogbWFrZSBiYWNrIGxpbmsgZm9yIHN1YnJvdXRpbmVzICovCisgIC8qIEZpbGwgaW4gbWV0aG9kIHB0cnMsIGV4Y2VwdCBnZXRfcGl4ZWxfcm93cyB3aGljaCBzdGFydF9pbnB1dCBzZXRzICovCisgIHNvdXJjZS0+cHViLnN0YXJ0X2lucHV0ID0gc3RhcnRfaW5wdXRfYm1wOworICBzb3VyY2UtPnB1Yi5maW5pc2hfaW5wdXQgPSBmaW5pc2hfaW5wdXRfYm1wOworCisgIHNvdXJjZS0+dXNlX2ludmVyc2lvbl9hcnJheSA9IHVzZV9pbnZlcnNpb25fYXJyYXk7CisKKyAgcmV0dXJuIChjanBlZ19zb3VyY2VfcHRyKXNvdXJjZTsKK30KKworI2VuZGlmIC8qIEJNUF9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JkY29sbWFwLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGNvbG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmVmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGNvbG1hcC5jCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogcmRjb2xtYXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBkanBlZydzICItbWFwIGZpbGUiIHN3aXRjaC4gIEl0IHJlYWRzIGEgc291cmNlIGltYWdlCisgKiBhbmQgY29uc3RydWN0cyBhIGNvbG9ybWFwIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSBKUEVHIGRlY29tcHJlc3Nvci4KKyAqCisgKiBDdXJyZW50bHksIHRoZXNlIGZpbGUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIGZvciB0aGUgbWFwIGZpbGU6CisgKiAgIEdJRjogdGhlIGNvbnRlbnRzIG9mIHRoZSBHSUYncyBnbG9iYWwgY29sb3JtYXAgYXJlIHVzZWQuCisgKiAgIFBQTSAoZWl0aGVyIHRleHQgb3IgcmF3IGZsYXZvcik6IHRoZSBlbnRpcmUgZmlsZSBpcyByZWFkIGFuZAorICogICAgICBlYWNoIHVuaXF1ZSBwaXhlbCB2YWx1ZSBpcyBlbnRlcmVkIGluIHRoZSBtYXAuCisgKiBOb3RlIHRoYXQgcmVhZGluZyBhIGxhcmdlIFBQTSBmaWxlIHdpbGwgYmUgaG9ycmVuZG91c2x5IHNsb3cuCisgKiBUeXBpY2FsbHksIGEgUFBNLWZvcm1hdCBtYXAgZmlsZSBzaG91bGQgY29udGFpbiBqdXN0IG9uZSBwaXhlbAorICogb2YgZWFjaCBkZXNpcmVkIGNvbG9yLiAgU3VjaCBhIGZpbGUgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIGFuCisgKiBvcmRpbmFyeSBpbWFnZSBQUE0gZmlsZSB3aXRoIHBwbXRvbWFwKDEpLgorICoKKyAqIFJlc2NhbGluZyBhIFBQTSB0aGF0IGhhcyBhIG1heHZhbCB1bmVxdWFsIHRvIE1BWEpTQU1QTEUgaXMgbm90CisgKiBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworCisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVEICAgIC8qIG90aGVyd2lzZSBjYW4ndCBxdWFudGl6ZSB0byBzdXBwbGllZCBtYXAgKi8KKworLyogUG9ydGlvbnMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiB0aGUgUEJNUExVUyBsaWJyYXJ5LCB3aGljaCBpczoKKyoqCisqKiBDb3B5cmlnaHQgKEMpIDE5ODggYnkgSmVmIFBvc2thbnplci4KKyoqCisqKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyoqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKKyoqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisqKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisqKiBkb2N1bWVudGF0aW9uLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvcgorKiogaW1wbGllZCB3YXJyYW50eS4KKyovCisKKworLyoKKyAqIEFkZCBhIChwb3RlbnRpYWxseSkgbmV3IGNvbG9yIHRvIHRoZSBjb2xvciBtYXAuCisgKi8KKworTE9DQUwodm9pZCkKK2FkZF9tYXBfZW50cnkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IFIsIGludCBHLCBpbnQgQikKK3sKKyAgSlNBTVBST1cgY29sb3JtYXAwID0gY2luZm8tPmNvbG9ybWFwWzBdOworICBKU0FNUFJPVyBjb2xvcm1hcDEgPSBjaW5mby0+Y29sb3JtYXBbMV07CisgIEpTQU1QUk9XIGNvbG9ybWFwMiA9IGNpbmZvLT5jb2xvcm1hcFsyXTsKKyAgaW50IG5jb2xvcnMgPSBjaW5mby0+YWN0dWFsX251bWJlcl9vZl9jb2xvcnM7CisgIGludCBpbmRleDsKKworICAvKiBDaGVjayBmb3IgZHVwbGljYXRlIGNvbG9yLiAqLworICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBuY29sb3JzOyBpbmRleCsrKSB7CisgICAgaWYgKEdFVEpTQU1QTEUoY29sb3JtYXAwW2luZGV4XSkgPT0gUiAmJgorICAgICAgICBHRVRKU0FNUExFKGNvbG9ybWFwMVtpbmRleF0pID09IEcgJiYKKyAgICAgICAgR0VUSlNBTVBMRShjb2xvcm1hcDJbaW5kZXhdKSA9PSBCKQorICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiBjb2xvciBpcyBhbHJlYWR5IGluIG1hcCAqLworICB9CisKKyAgLyogQ2hlY2sgZm9yIG1hcCBvdmVyZmxvdy4gKi8KKyAgaWYgKG5jb2xvcnMgPj0gKE1BWEpTQU1QTEUgKyAxKSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9RVUFOVF9NQU5ZX0NPTE9SUywgKE1BWEpTQU1QTEUgKyAxKSk7CisKKyAgLyogT0ssIGFkZCBjb2xvciB0byBtYXAuICovCisgIGNvbG9ybWFwMFtuY29sb3JzXSA9IChKU0FNUExFKVI7CisgIGNvbG9ybWFwMVtuY29sb3JzXSA9IChKU0FNUExFKUc7CisgIGNvbG9ybWFwMltuY29sb3JzXSA9IChKU0FNUExFKUI7CisgIGNpbmZvLT5hY3R1YWxfbnVtYmVyX29mX2NvbG9ycysrOworfQorCisKKy8qCisgKiBFeHRyYWN0IGNvbG9yIG1hcCBmcm9tIGEgR0lGIGZpbGUuCisgKi8KKworTE9DQUwodm9pZCkKK3JlYWRfZ2lmX21hcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICppbmZpbGUpCit7CisgIGludCBoZWFkZXJbMTNdOworICBpbnQgaSwgY29sb3JtYXBsZW47CisgIGludCBSLCBHLCBCOworCisgIC8qIEluaXRpYWwgJ0cnIGhhcyBhbHJlYWR5IGJlZW4gcmVhZCBieSByZWFkX2NvbG9yX21hcCAqLworICAvKiBSZWFkIHRoZSByZXN0IG9mIHRoZSBHSUYgaGVhZGVyIGFuZCBsb2dpY2FsIHNjcmVlbiBkZXNjcmlwdG9yICovCisgIGZvciAoaSA9IDE7IGkgPCAxMzsgaSsrKSB7CisgICAgaWYgKChoZWFkZXJbaV0gPSBnZXRjKGluZmlsZSkpID09IEVPRikKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0NNQVBfRklMRSk7CisgIH0KKworICAvKiBWZXJpZnkgR0lGIEhlYWRlciAqLworICBpZiAoaGVhZGVyWzFdICE9ICdJJyB8fCBoZWFkZXJbMl0gIT0gJ0YnKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0NNQVBfRklMRSk7CisKKyAgLyogVGhlcmUgbXVzdCBiZSBhIGdsb2JhbCBjb2xvciBtYXAuICovCisgIGlmICgoaGVhZGVyWzEwXSAmIDB4ODApID09IDApCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKworICAvKiBPSywgZmV0Y2ggaXQuICovCisgIGNvbG9ybWFwbGVuID0gMiA8PCAoaGVhZGVyWzEwXSAmIDB4MDcpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb2xvcm1hcGxlbjsgaSsrKSB7CisgICAgUiA9IGdldGMoaW5maWxlKTsKKyAgICBHID0gZ2V0YyhpbmZpbGUpOworICAgIEIgPSBnZXRjKGluZmlsZSk7CisgICAgaWYgKFIgPT0gRU9GIHx8IEcgPT0gRU9GIHx8IEIgPT0gRU9GKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKyAgICBhZGRfbWFwX2VudHJ5KGNpbmZvLAorICAgICAgICAgICAgICAgICAgUiA8PCAoQklUU19JTl9KU0FNUExFIC0gOCksCisgICAgICAgICAgICAgICAgICBHIDw8IChCSVRTX0lOX0pTQU1QTEUgLSA4KSwKKyAgICAgICAgICAgICAgICAgIEIgPDwgKEJJVFNfSU5fSlNBTVBMRSAtIDgpKTsKKyAgfQorfQorCisKKy8qIFN1cHBvcnQgcm91dGluZXMgZm9yIHJlYWRpbmcgUFBNICovCisKKworTE9DQUwoaW50KQorcGJtX2dldGMoRklMRSAqaW5maWxlKQorLyogUmVhZCBuZXh0IGNoYXIsIHNraXBwaW5nIG92ZXIgYW55IGNvbW1lbnRzICovCisvKiBBIGNvbW1lbnQvbmV3bGluZSBzZXF1ZW5jZSBpcyByZXR1cm5lZCBhcyBhIG5ld2xpbmUgKi8KK3sKKyAgcmVnaXN0ZXIgaW50IGNoOworCisgIGNoID0gZ2V0YyhpbmZpbGUpOworICBpZiAoY2ggPT0gJyMnKSB7CisgICAgZG8geworICAgICAgY2ggPSBnZXRjKGluZmlsZSk7CisgICAgfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpOworICB9CisgIHJldHVybiBjaDsKK30KKworCitMT0NBTCh1bnNpZ25lZCBpbnQpCityZWFkX3BibV9pbnRlZ2VyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEZJTEUgKmluZmlsZSkKKy8qIFJlYWQgYW4gdW5zaWduZWQgZGVjaW1hbCBpbnRlZ2VyIGZyb20gdGhlIFBQTSBmaWxlICovCisvKiBTd2FsbG93cyBvbmUgdHJhaWxpbmcgY2hhcmFjdGVyIGFmdGVyIHRoZSBpbnRlZ2VyICovCisvKiBOb3RlIHRoYXQgb24gYSAxNi1iaXQtaW50IG1hY2hpbmUsIG9ubHkgdmFsdWVzIHVwIHRvIDY0ayBjYW4gYmUgcmVhZC4gKi8KKy8qIFRoaXMgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0gaW4gcHJhY3RpY2UuICovCit7CisgIHJlZ2lzdGVyIGludCBjaDsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHZhbDsKKworICAvKiBTa2lwIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKyAgZG8geworICAgIGNoID0gcGJtX2dldGMoaW5maWxlKTsKKyAgICBpZiAoY2ggPT0gRU9GKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKyAgfSB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInKTsKKworICBpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKworICB2YWwgPSBjaCAtICcwJzsKKyAgd2hpbGUgKChjaCA9IHBibV9nZXRjKGluZmlsZSkpID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICB2YWwgKj0gMTA7CisgICAgdmFsICs9IGNoIC0gJzAnOworICB9CisgIHJldHVybiB2YWw7Cit9CisKKworLyoKKyAqIEV4dHJhY3QgY29sb3IgbWFwIGZyb20gYSBQUE0gZmlsZS4KKyAqLworCitMT0NBTCh2b2lkKQorcmVhZF9wcG1fbWFwKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEZJTEUgKmluZmlsZSkKK3sKKyAgaW50IGM7CisgIHVuc2lnbmVkIGludCB3LCBoLCBtYXh2YWwsIHJvdywgY29sOworICBpbnQgUiwgRywgQjsKKworICAvKiBJbml0aWFsICdQJyBoYXMgYWxyZWFkeSBiZWVuIHJlYWQgYnkgcmVhZF9jb2xvcl9tYXAgKi8KKyAgYyA9IGdldGMoaW5maWxlKTsgICAgICAgICAgICAgLyogc2F2ZSBmb3JtYXQgZGlzY3JpbWluYXRvciBmb3IgYSBzZWMgKi8KKworICAvKiB3aGlsZSB3ZSBmZXRjaCB0aGUgcmVtYWluaW5nIGhlYWRlciBpbmZvICovCisgIHcgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUpOworICBoID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKKyAgbWF4dmFsID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKKworICBpZiAodyA8PSAwIHx8IGggPD0gMCB8fCBtYXh2YWwgPD0gMCkgLyogZXJyb3IgY2hlY2sgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9DTUFQX0ZJTEUpOworCisgIC8qIEZvciBub3csIHdlIGRvbid0IHN1cHBvcnQgcmVzY2FsaW5nIGZyb20gYW4gdW51c3VhbCBtYXh2YWwuICovCisgIGlmIChtYXh2YWwgIT0gKHVuc2lnbmVkIGludClNQVhKU0FNUExFKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0NNQVBfRklMRSk7CisKKyAgc3dpdGNoIChjKSB7CisgIGNhc2UgJzMnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQUE0gZmlsZSAqLworICAgIGZvciAocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKKyAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKKyAgICAgICAgUiA9IHJlYWRfcGJtX2ludGVnZXIoY2luZm8sIGluZmlsZSk7CisgICAgICAgIEcgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUpOworICAgICAgICBCID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKKyAgICAgICAgYWRkX21hcF9lbnRyeShjaW5mbywgUiwgRywgQik7CisgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgJzYnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSByYXctZm9ybWF0IFBQTSBmaWxlICovCisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICBSID0gZ2V0YyhpbmZpbGUpOworICAgICAgICBHID0gZ2V0YyhpbmZpbGUpOworICAgICAgICBCID0gZ2V0YyhpbmZpbGUpOworICAgICAgICBpZiAoUiA9PSBFT0YgfHwgRyA9PSBFT0YgfHwgQiA9PSBFT0YpCisgICAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKyAgICAgICAgYWRkX21hcF9lbnRyeShjaW5mbywgUiwgRywgQik7CisgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKyAgICBicmVhazsKKyAgfQorfQorCisKKy8qCisgKiBNYWluIGVudHJ5IHBvaW50IGZyb20gZGpwZWcuYy4KKyAqICBJbnB1dDogb3BlbmVkIGlucHV0IGZpbGUgKGZyb20gZmlsZSBuYW1lIGFyZ3VtZW50IG9uIGNvbW1hbmQgbGluZSkuCisgKiAgT3V0cHV0OiBjb2xvcm1hcCBhbmQgYWN0dWFsX251bWJlcl9vZl9jb2xvcnMgZmllbGRzIGFyZSBzZXQgaW4gY2luZm8uCisgKi8KKworR0xPQkFMKHZvaWQpCityZWFkX2NvbG9yX21hcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICppbmZpbGUpCit7CisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBhIGNvbG9yIG1hcCBvZiBtYXhpbXVtIHN1cHBvcnRlZCBzaXplLiAqLworICBjaW5mby0+Y29sb3JtYXAgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgIChKRElNRU5TSU9OKShNQVhKU0FNUExFICsgMSksIChKRElNRU5TSU9OKTMpOworICBjaW5mby0+YWN0dWFsX251bWJlcl9vZl9jb2xvcnMgPSAwOyAvKiBpbml0aWFsaXplIG1hcCB0byBlbXB0eSAqLworCisgIC8qIFJlYWQgZmlyc3QgYnl0ZSB0byBkZXRlcm1pbmUgZmlsZSBmb3JtYXQgKi8KKyAgc3dpdGNoIChnZXRjKGluZmlsZSkpIHsKKyAgY2FzZSAnRyc6CisgICAgcmVhZF9naWZfbWFwKGNpbmZvLCBpbmZpbGUpOworICAgIGJyZWFrOworICBjYXNlICdQJzoKKyAgICByZWFkX3BwbV9tYXAoY2luZm8sIGluZmlsZSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKKyAgICBicmVhazsKKyAgfQorfQorCisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGdpZi5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRnaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkyNThkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRnaWYuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogcmRnaWYuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gcmVhZCBpbnB1dCBpbWFnZXMgaW4gR0lGIGZvcm1hdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PVEU6IHRvIGF2b2lkIGVudGFuZ2xlbWVudHMgd2l0aCBVbmlzeXMnIHBhdGVudCBvbiBMWlcgY29tcHJlc3Npb24sICAgICAgKgorICogdGhlIGFiaWxpdHkgdG8gcmVhZCBHSUYgZmlsZXMgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBJSkcgZGlzdHJpYnV0aW9uLiAqCisgKiBTb3JyeSBhYm91dCB0aGF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdlIGFyZSByZXF1aXJlZCB0byBzdGF0ZSB0aGF0CisgKiAgICAiVGhlIEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdChjKSBpcyB0aGUgQ29weXJpZ2h0IHByb3BlcnR5IG9mCisgKiAgICBDb21wdVNlcnZlIEluY29ycG9yYXRlZC4gR0lGKHNtKSBpcyBhIFNlcnZpY2UgTWFyayBwcm9wZXJ0eSBvZgorICogICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuIgorICovCisKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKworI2lmZGVmIEdJRl9TVVBQT1JURUQKKworLyoKKyAqIFRoZSBtb2R1bGUgc2VsZWN0aW9uIHJvdXRpbmUgZm9yIEdJRiBmb3JtYXQgaW5wdXQuCisgKi8KKworR0xPQkFMKGNqcGVnX3NvdXJjZV9wdHIpCitqaW5pdF9yZWFkX2dpZihqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgZnByaW50ZihzdGRlcnIsICJHSUYgaW5wdXQgaXMgdW5zdXBwb3J0ZWQgZm9yIGxlZ2FsIHJlYXNvbnMuICBTb3JyeS5cbiIpOworICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIGtlZXAgY29tcGlsZXIgaGFwcHkgKi8KK30KKworI2VuZGlmIC8qIEdJRl9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JkanBnY29tLjEgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGpwZ2NvbS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjExZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGpwZ2NvbS4xCkBAIC0wLDAgKzEsNjMgQEAKKy5USCBSREpQR0NPTSAxICIwMiBBcHJpbCAyMDA5IgorLlNIIE5BTUUKK3JkanBnY29tIFwtIGRpc3BsYXkgdGV4dCBjb21tZW50cyBmcm9tIGEgSlBFRyBmaWxlCisuU0ggU1lOT1BTSVMKKy5CIHJkanBnY29tCitbCisuQiBcLXJhdworXQorWworLkIgXC12ZXJib3NlCitdCitbCisuSSBmaWxlbmFtZQorXQorLkxQCisuU0ggREVTQ1JJUFRJT04KKy5MUAorLkIgcmRqcGdjb20KK3JlYWRzIHRoZSBuYW1lZCBKUEVHL0pGSUYgZmlsZSwgb3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIG5vIGZpbGUgaXMgbmFtZWQsCithbmQgcHJpbnRzIGFueSB0ZXh0IGNvbW1lbnRzIGZvdW5kIGluIHRoZSBmaWxlIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisuUFAKK1RoZSBKUEVHIHN0YW5kYXJkIGFsbG93cyAiY29tbWVudCIgKENPTSkgYmxvY2tzIHRvIG9jY3VyIHdpdGhpbiBhIEpQRUcgZmlsZS4KK0FsdGhvdWdoIHRoZSBzdGFuZGFyZCBkb2Vzbid0IGFjdHVhbGx5IGRlZmluZSB3aGF0IENPTSBibG9ja3MgYXJlIGZvciwgdGhleQorYXJlIHdpZGVseSB1c2VkIHRvIGhvbGQgdXNlci1zdXBwbGllZCB0ZXh0IHN0cmluZ3MuICBUaGlzIGxldHMgeW91IGFkZAorYW5ub3RhdGlvbnMsIHRpdGxlcywgaW5kZXggdGVybXMsIGV0YyB0byB5b3VyIEpQRUcgZmlsZXMsIGFuZCBsYXRlciByZXRyaWV2ZQordGhlbSBhcyB0ZXh0LiAgQ09NIGJsb2NrcyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIGltYWdlIHN0b3JlZCBpbiB0aGUgSlBFRworZmlsZS4gIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBDT00gYmxvY2sgaXMgNjRLLCBidXQgeW91IGNhbiBoYXZlIGFzIG1hbnkgb2YKK3RoZW0gYXMgeW91IGxpa2UgaW4gb25lIEpQRUcgZmlsZS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtcmF3CitOb3JtYWxseQorLkIgcmRqcGdjb20KK2VzY2FwZXMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGluIGNvbW1lbnRzLCBmb3Igc2VjdXJpdHkgcmVhc29ucy4KK1RoaXMgb3B0aW9uIGF2b2lkcyB0aGF0LgorLlBQCisuQiBcLXZlcmJvc2UKK0NhdXNlcworLkIgcmRqcGdjb20KK3RvIGFsc28gZGlzcGxheSB0aGUgSlBFRyBpbWFnZSBkaW1lbnNpb25zLgorLlBQCitTd2l0Y2ggbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkLCBhbmQgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KKy5TSCBISU5UUworLkIgcmRqcGdjb20KK2RvZXMgbm90IGRlcGVuZCBvbiB0aGUgSUpHIEpQRUcgbGlicmFyeS4gIEl0cyBzb3VyY2UgY29kZSBpcyBpbnRlbmRlZCBhcyBhbgoraWxsdXN0cmF0aW9uIG9mIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb2RlIHJlcXVpcmVkIHRvIHBhcnNlIGEgSlBFRyBmaWxlCitoZWFkZXIgY29ycmVjdGx5LgorLlBQCitJbgorLkIgXC12ZXJib3NlCittb2RlLAorLkIgcmRqcGdjb20KK3dpbGwgYWxzbyBhdHRlbXB0IHRvIHByaW50IHRoZSBjb250ZW50cyBvZiBhbnkgIkFQUDEyIiBtYXJrZXJzIGFzIHRleHQuCitTb21lIGRpZ2l0YWwgY2FtZXJhcyBwcm9kdWNlIEFQUDEyIG1hcmtlcnMgY29udGFpbmluZyB1c2VmdWwgdGV4dHVhbAoraW5mb3JtYXRpb24uICBJZiB5b3UgbGlrZSwgeW91IGNhbiBtb2RpZnkgdGhlIHNvdXJjZSBjb2RlIHRvIHByaW50CitvdGhlciBBUFBuIG1hcmtlciB0eXBlcyBhcyB3ZWxsLgorLlNIIFNFRSBBTFNPCisuQlIgY2pwZWcgKDEpLAorLkJSIGRqcGVnICgxKSwKKy5CUiBqcGVndHJhbiAoMSksCisuQlIgd3JqcGdjb20gKDEpCisuU0ggQVVUSE9SCitJbmRlcGVuZGVudCBKUEVHIEdyb3VwCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZGpwZ2NvbS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRqcGdjb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWYzMWQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRqcGdjb20uYwpAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIHJkanBnY29tLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIE1vZGlmaWVkIDIwMDkgYnkgQmlsbCBBbGxvbWJlcnQsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBJdCB3YXMgbW9kaWZpZWQgYnkgVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCB0byBpbmNsdWRlIG9ubHkgY29kZSByZWxldmFudAorICogdG8gbGlianBlZy10dXJiby4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHZlcnkgc2ltcGxlIHN0YW5kLWFsb25lIGFwcGxpY2F0aW9uIHRoYXQgZGlzcGxheXMKKyAqIHRoZSB0ZXh0IGluIENPTSAoY29tbWVudCkgbWFya2VycyBpbiBhIEpGSUYgZmlsZS4KKyAqIFRoaXMgbWF5IGJlIHVzZWZ1bCBhcyBhbiBleGFtcGxlIG9mIHRoZSBtaW5pbXVtIGxvZ2ljIG5lZWRlZCB0byBwYXJzZQorICogSlBFRyBtYXJrZXJzLgorICovCisKKyNkZWZpbmUgSlBFR19DSlBFR19ESlBFRyAgICAgICAgLyogdG8gZ2V0IHRoZSBjb21tYW5kLWxpbmUgY29uZmlnIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJqaW5jbHVkZS5oIiAgICAgICAgICAgLyogZ2V0IGF1dG8tY29uZmlnIHN5bWJvbHMsIDxzdGRpby5oPiAqLworCisjaWZkZWYgSEFWRV9MT0NBTEVfSAorI2luY2x1ZGUgPGxvY2FsZS5oPiAgICAgICAgICAgICAvKiBCaWxsIEFsbG9tYmVydDogdXNlIGxvY2FsZSBmb3IgaXNwcmludCAqLworI2VuZGlmCisjaW5jbHVkZSA8Y3R5cGUuaD4gICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgaXN1cHBlcigpLCB0b2xvd2VyKCkgKi8KKyNpZmRlZiBVU0VfU0VUTU9ERQorI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIHNldG1vZGUoKSdzIHBhcmFtZXRlciBtYWNyb3MgKi8KKy8qIElmIHlvdSBoYXZlIHNldG1vZGUoKSBidXQgbm90IDxpby5oPiwganVzdCBkZWxldGUgdGhpcyBsaW5lOiAqLworI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIHNldG1vZGUoKSAqLworI2VuZGlmCisKKyNpZmRlZiBVU0VfQ0NPTU1BTkQgICAgICAgICAgICAgLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCisjaWZkZWYgX19NV0VSS1NfXworI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogLi4uIGFuZCB0aGlzICovCisjZW5kaWYKKyNpZmRlZiBUSElOS19DCisjaW5jbHVkZSA8Y29uc29sZS5oPiAgICAgICAgICAgIC8qIFRoaW5rIGRlY2xhcmVzIGl0IGhlcmUgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBET05UX1VTRV9CX01PREUgICAgICAgICAgLyogZGVmaW5lIG1vZGUgcGFyYW1ldGVycyBmb3IgZm9wZW4oKSAqLworI2RlZmluZSBSRUFEX0JJTkFSWSAgICAgInIiCisjZWxzZQorI2RlZmluZSBSRUFEX0JJTkFSWSAgICAgInJiIgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFICAgICAgICAgICAgLyogZGVmaW5lIGV4aXQoKSBjb2RlcyBpZiBub3QgcHJvdmlkZWQgKi8KKyNkZWZpbmUgRVhJVF9GQUlMVVJFICAxCisjZW5kaWYKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUyAgMAorI2VuZGlmCisKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0byByZWFkIHRoZSBpbnB1dCBmaWxlLgorICogVG8gcmV1c2UgdGhpcyBjb2RlIGluIGFub3RoZXIgYXBwbGljYXRpb24sIHlvdSBtaWdodCBuZWVkIHRvIGNoYW5nZSB0aGVzZS4KKyAqLworCitzdGF0aWMgRklMRSAqaW5maWxlOyAgICAgICAgICAgIC8qIGlucHV0IEpQRUcgZmlsZSAqLworCisvKiBSZXR1cm4gbmV4dCBpbnB1dCBieXRlLCBvciBFT0YgaWYgbm8gbW9yZSAqLworI2RlZmluZSBORVhUQllURSgpICBnZXRjKGluZmlsZSkKKworCisvKiBFcnJvciBleGl0IGhhbmRsZXIgKi8KKyNkZWZpbmUgRVJSRVhJVChtc2cpICAoZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKSwgZXhpdChFWElUX0ZBSUxVUkUpKQorCisKKy8qIFJlYWQgb25lIGJ5dGUsIHRlc3RpbmcgZm9yIEVPRiAqLworc3RhdGljIGludAorcmVhZF8xX2J5dGUodm9pZCkKK3sKKyAgaW50IGM7CisKKyAgYyA9IE5FWFRCWVRFKCk7CisgIGlmIChjID09IEVPRikKKyAgICBFUlJFWElUKCJQcmVtYXR1cmUgRU9GIGluIEpQRUcgZmlsZSIpOworICByZXR1cm4gYzsKK30KKworLyogUmVhZCAyIGJ5dGVzLCBjb252ZXJ0IHRvIHVuc2lnbmVkIGludCAqLworLyogQWxsIDItYnl0ZSBxdWFudGl0aWVzIGluIEpQRUcgbWFya2VycyBhcmUgTVNCIGZpcnN0ICovCitzdGF0aWMgdW5zaWduZWQgaW50CityZWFkXzJfYnl0ZXModm9pZCkKK3sKKyAgaW50IGMxLCBjMjsKKworICBjMSA9IE5FWFRCWVRFKCk7CisgIGlmIChjMSA9PSBFT0YpCisgICAgRVJSRVhJVCgiUHJlbWF0dXJlIEVPRiBpbiBKUEVHIGZpbGUiKTsKKyAgYzIgPSBORVhUQllURSgpOworICBpZiAoYzIgPT0gRU9GKQorICAgIEVSUkVYSVQoIlByZW1hdHVyZSBFT0YgaW4gSlBFRyBmaWxlIik7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpYzEpIDw8IDgpICsgKCh1bnNpZ25lZCBpbnQpYzIpOworfQorCisKKy8qCisgKiBKUEVHIG1hcmtlcnMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSAweEZGIGJ5dGVzLCBmb2xsb3dlZCBieSBhIG1hcmtlcgorICogY29kZSBieXRlICh3aGljaCBpcyBub3QgYW4gRkYpLiAgSGVyZSBhcmUgdGhlIG1hcmtlciBjb2RlcyBvZiBpbnRlcmVzdAorICogaW4gdGhpcyBwcm9ncmFtLiAgKFNlZSBqZG1hcmtlci5jIGZvciBhIG1vcmUgY29tcGxldGUgbGlzdC4pCisgKi8KKworI2RlZmluZSBNX1NPRjAgICAweEMwICAgICAgICAgICAvKiBTdGFydCBPZiBGcmFtZSBOICovCisjZGVmaW5lIE1fU09GMSAgIDB4QzEgICAgICAgICAgIC8qIE4gaW5kaWNhdGVzIHdoaWNoIGNvbXByZXNzaW9uIHByb2Nlc3MgKi8KKyNkZWZpbmUgTV9TT0YyICAgMHhDMiAgICAgICAgICAgLyogT25seSBTT0YwLVNPRjIgYXJlIG5vdyBpbiBjb21tb24gdXNlICovCisjZGVmaW5lIE1fU09GMyAgIDB4QzMKKyNkZWZpbmUgTV9TT0Y1ICAgMHhDNSAgICAgICAgICAgLyogTkI6IGNvZGVzIEM0IGFuZCBDQyBhcmUgTk9UIFNPRiBtYXJrZXJzICovCisjZGVmaW5lIE1fU09GNiAgIDB4QzYKKyNkZWZpbmUgTV9TT0Y3ICAgMHhDNworI2RlZmluZSBNX1NPRjkgICAweEM5CisjZGVmaW5lIE1fU09GMTAgIDB4Q0EKKyNkZWZpbmUgTV9TT0YxMSAgMHhDQgorI2RlZmluZSBNX1NPRjEzICAweENECisjZGVmaW5lIE1fU09GMTQgIDB4Q0UKKyNkZWZpbmUgTV9TT0YxNSAgMHhDRgorI2RlZmluZSBNX1NPSSAgICAweEQ4ICAgICAgICAgICAvKiBTdGFydCBPZiBJbWFnZSAoYmVnaW5uaW5nIG9mIGRhdGFzdHJlYW0pICovCisjZGVmaW5lIE1fRU9JICAgIDB4RDkgICAgICAgICAgIC8qIEVuZCBPZiBJbWFnZSAoZW5kIG9mIGRhdGFzdHJlYW0pICovCisjZGVmaW5lIE1fU09TICAgIDB4REEgICAgICAgICAgIC8qIFN0YXJ0IE9mIFNjYW4gKGJlZ2lucyBjb21wcmVzc2VkIGRhdGEpICovCisjZGVmaW5lIE1fQVBQMCAgIDB4RTAgICAgICAgICAgIC8qIEFwcGxpY2F0aW9uLXNwZWNpZmljIG1hcmtlciwgdHlwZSBOICovCisjZGVmaW5lIE1fQVBQMTIgIDB4RUMgICAgICAgICAgIC8qICh3ZSBkb24ndCBib3RoZXIgdG8gbGlzdCBhbGwgMTYgQVBQbidzKSAqLworI2RlZmluZSBNX0NPTSAgICAweEZFICAgICAgICAgICAvKiBDT01tZW50ICovCisKKworLyoKKyAqIEZpbmQgdGhlIG5leHQgSlBFRyBtYXJrZXIgYW5kIHJldHVybiBpdHMgbWFya2VyIGNvZGUuCisgKiBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIEZGIGJ5dGUsIHBvc3NpYmx5IG1vcmUgaWYgdGhlIGNvbXByZXNzb3IgdXNlZCBGRnMKKyAqIHRvIHBhZCB0aGUgZmlsZS4KKyAqIFRoZXJlIGNvdWxkIGFsc28gYmUgbm9uLUZGIGdhcmJhZ2UgYmV0d2VlbiBtYXJrZXJzLiAgVGhlIHRyZWF0bWVudCBvZiBzdWNoCisgKiBnYXJiYWdlIGlzIHVuc3BlY2lmaWVkOyB3ZSBjaG9vc2UgdG8gc2tpcCBvdmVyIGl0IGJ1dCBlbWl0IGEgd2FybmluZyBtc2cuCisgKiBOQjogdGhpcyByb3V0aW5lIG11c3Qgbm90IGJlIHVzZWQgYWZ0ZXIgc2VlaW5nIFNPUyBtYXJrZXIsIHNpbmNlIGl0IHdpbGwKKyAqIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIEZGLzAwIHNlcXVlbmNlcyBpbiB0aGUgY29tcHJlc3NlZCBpbWFnZSBkYXRhLi4uCisgKi8KKworc3RhdGljIGludAorbmV4dF9tYXJrZXIodm9pZCkKK3sKKyAgaW50IGM7CisgIGludCBkaXNjYXJkZWRfYnl0ZXMgPSAwOworCisgIC8qIEZpbmQgMHhGRiBieXRlOyBjb3VudCBhbmQgc2tpcCBhbnkgbm9uLUZGcy4gKi8KKyAgYyA9IHJlYWRfMV9ieXRlKCk7CisgIHdoaWxlIChjICE9IDB4RkYpIHsKKyAgICBkaXNjYXJkZWRfYnl0ZXMrKzsKKyAgICBjID0gcmVhZF8xX2J5dGUoKTsKKyAgfQorICAvKiBHZXQgbWFya2VyIGNvZGUgYnl0ZSwgc3dhbGxvd2luZyBhbnkgZHVwbGljYXRlIEZGIGJ5dGVzLiAgRXh0cmEgRkZzCisgICAqIGFyZSBsZWdhbCBhcyBwYWQgYnl0ZXMsIHNvIGRvbid0IGNvdW50IHRoZW0gaW4gZGlzY2FyZGVkX2J5dGVzLgorICAgKi8KKyAgZG8geworICAgIGMgPSByZWFkXzFfYnl0ZSgpOworICB9IHdoaWxlIChjID09IDB4RkYpOworCisgIGlmIChkaXNjYXJkZWRfYnl0ZXMgIT0gMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogZ2FyYmFnZSBkYXRhIGZvdW5kIGluIEpQRUcgZmlsZVxuIik7CisgIH0KKworICByZXR1cm4gYzsKK30KKworCisvKgorICogUmVhZCB0aGUgaW5pdGlhbCBtYXJrZXIsIHdoaWNoIHNob3VsZCBiZSBTT0kuCisgKiBGb3IgYSBKRklGIGZpbGUsIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgdGhlIGZpbGUgc2hvdWxkIGJlIGxpdGVyYWxseQorICogMHhGRiBNX1NPSS4gIFRvIGJlIG1vcmUgZ2VuZXJhbCwgd2UgY291bGQgdXNlIG5leHRfbWFya2VyLCBidXQgaWYgdGhlCisgKiBpbnB1dCBmaWxlIHdlcmVuJ3QgYWN0dWFsbHkgSlBFRyBhdCBhbGwsIG5leHRfbWFya2VyIG1pZ2h0IHJlYWQgdGhlIHdob2xlCisgKiBmaWxlIGFuZCB0aGVuIHJldHVybiBhIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZS4uLgorICovCisKK3N0YXRpYyBpbnQKK2ZpcnN0X21hcmtlcih2b2lkKQoreworICBpbnQgYzEsIGMyOworCisgIGMxID0gTkVYVEJZVEUoKTsKKyAgYzIgPSBORVhUQllURSgpOworICBpZiAoYzEgIT0gMHhGRiB8fCBjMiAhPSBNX1NPSSkKKyAgICBFUlJFWElUKCJOb3QgYSBKUEVHIGZpbGUiKTsKKyAgcmV0dXJuIGMyOworfQorCisKKy8qCisgKiBNb3N0IHR5cGVzIG9mIG1hcmtlciBhcmUgZm9sbG93ZWQgYnkgYSB2YXJpYWJsZS1sZW5ndGggcGFyYW1ldGVyIHNlZ21lbnQuCisgKiBUaGlzIHJvdXRpbmUgc2tpcHMgb3ZlciB0aGUgcGFyYW1ldGVycyBmb3IgYW55IG1hcmtlciB3ZSBkb24ndCBvdGhlcndpc2UKKyAqIHdhbnQgdG8gcHJvY2Vzcy4KKyAqIE5vdGUgdGhhdCB3ZSBNVVNUIHNraXAgdGhlIHBhcmFtZXRlciBzZWdtZW50IGV4cGxpY2l0bHkgaW4gb3JkZXIgbm90IHRvCisgKiBiZSBmb29sZWQgYnkgMHhGRiBieXRlcyB0aGF0IG1pZ2h0IGFwcGVhciB3aXRoaW4gdGhlIHBhcmFtZXRlciBzZWdtZW50OworICogc3VjaCBieXRlcyBkbyBOT1QgaW50cm9kdWNlIG5ldyBtYXJrZXJzLgorICovCisKK3N0YXRpYyB2b2lkCitza2lwX3ZhcmlhYmxlKHZvaWQpCisvKiBTa2lwIG92ZXIgYW4gdW5rbm93biBvciB1bmludGVyZXN0aW5nIHZhcmlhYmxlLWxlbmd0aCBtYXJrZXIgKi8KK3sKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKworICAvKiBHZXQgdGhlIG1hcmtlciBwYXJhbWV0ZXIgbGVuZ3RoIGNvdW50ICovCisgIGxlbmd0aCA9IHJlYWRfMl9ieXRlcygpOworICAvKiBMZW5ndGggaW5jbHVkZXMgaXRzZWxmLCBzbyBtdXN0IGJlIGF0IGxlYXN0IDIgKi8KKyAgaWYgKGxlbmd0aCA8IDIpCisgICAgRVJSRVhJVCgiRXJyb25lb3VzIEpQRUcgbWFya2VyIGxlbmd0aCIpOworICBsZW5ndGggLT0gMjsKKyAgLyogU2tpcCBvdmVyIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KKyAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICAodm9pZClyZWFkXzFfYnl0ZSgpOworICAgIGxlbmd0aC0tOworICB9Cit9CisKKworLyoKKyAqIFByb2Nlc3MgYSBDT00gbWFya2VyLgorICogV2Ugd2FudCB0byBwcmludCBvdXQgdGhlIG1hcmtlciBjb250ZW50cyBhcyBsZWdpYmxlIHRleHQ7CisgKiB3ZSBtdXN0IGd1YXJkIGFnYWluc3Qgbm9uLXRleHQganVuayBhbmQgdmFyeWluZyBuZXdsaW5lIHJlcHJlc2VudGF0aW9ucy4KKyAqLworCitzdGF0aWMgdm9pZAorcHJvY2Vzc19DT00oaW50IHJhdykKK3sKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgaW50IGNoOworICBpbnQgbGFzdGNoID0gMDsKKworICAvKiBCaWxsIEFsbG9tYmVydDogc2V0IGxvY2FsZSBwcm9wZXJseSBmb3IgaXNwcmludCAqLworI2lmZGVmIEhBVkVfTE9DQUxFX0gKKyAgc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisjZW5kaWYKKworICAvKiBHZXQgdGhlIG1hcmtlciBwYXJhbWV0ZXIgbGVuZ3RoIGNvdW50ICovCisgIGxlbmd0aCA9IHJlYWRfMl9ieXRlcygpOworICAvKiBMZW5ndGggaW5jbHVkZXMgaXRzZWxmLCBzbyBtdXN0IGJlIGF0IGxlYXN0IDIgKi8KKyAgaWYgKGxlbmd0aCA8IDIpCisgICAgRVJSRVhJVCgiRXJyb25lb3VzIEpQRUcgbWFya2VyIGxlbmd0aCIpOworICBsZW5ndGggLT0gMjsKKworICB3aGlsZSAobGVuZ3RoID4gMCkgeworICAgIGNoID0gcmVhZF8xX2J5dGUoKTsKKyAgICBpZiAocmF3KSB7CisgICAgICBwdXRjKGNoLCBzdGRvdXQpOworICAgIC8qIEVtaXQgdGhlIGNoYXJhY3RlciBpbiBhIHJlYWRhYmxlIGZvcm0uCisgICAgICogTm9ucHJpbnRhYmxlcyBhcmUgY29udmVydGVkIHRvIFxubm4gZm9ybSwKKyAgICAgKiB3aGlsZSBcIGlzIGNvbnZlcnRlZCB0byBcXC4KKyAgICAgKiBOZXdsaW5lcyBpbiBDUiwgQ1IvTEYsIG9yIExGIGZvcm0gd2lsbCBiZSBwcmludGVkIGFzIG9uZSBuZXdsaW5lLgorICAgICAqLworICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xyJykgeworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xuJykgeworICAgICAgaWYgKGxhc3RjaCAhPSAnXHInKQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CisgICAgICBwcmludGYoIlxcXFwiKTsKKyAgICB9IGVsc2UgaWYgKGlzcHJpbnQoY2gpKSB7CisgICAgICBwdXRjKGNoLCBzdGRvdXQpOworICAgIH0gZWxzZSB7CisgICAgICBwcmludGYoIlxcJTAzbyIsIGNoKTsKKyAgICB9CisgICAgbGFzdGNoID0gY2g7CisgICAgbGVuZ3RoLS07CisgIH0KKyAgcHJpbnRmKCJcbiIpOworCisgIC8qIEJpbGwgQWxsb21iZXJ0OiByZXZlcnQgdG8gQyBsb2NhbGUgKi8KKyNpZmRlZiBIQVZFX0xPQ0FMRV9ICisgIHNldGxvY2FsZShMQ19DVFlQRSwgIkMiKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBQcm9jZXNzIGEgU09GbiBtYXJrZXIuCisgKiBUaGlzIGNvZGUgaXMgb25seSBuZWVkZWQgaWYgeW91IHdhbnQgdG8ga25vdyB0aGUgaW1hZ2UgZGltZW5zaW9ucy4uLgorICovCisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX1NPRm4oaW50IG1hcmtlcikKK3sKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgdW5zaWduZWQgaW50IGltYWdlX2hlaWdodCwgaW1hZ2Vfd2lkdGg7CisgIGludCBkYXRhX3ByZWNpc2lvbiwgbnVtX2NvbXBvbmVudHM7CisgIGNvbnN0IGNoYXIgKnByb2Nlc3M7CisgIGludCBjaTsKKworICBsZW5ndGggPSByZWFkXzJfYnl0ZXMoKTsgICAgICAvKiB1c3VhbCBwYXJhbWV0ZXIgbGVuZ3RoIGNvdW50ICovCisKKyAgZGF0YV9wcmVjaXNpb24gPSByZWFkXzFfYnl0ZSgpOworICBpbWFnZV9oZWlnaHQgPSByZWFkXzJfYnl0ZXMoKTsKKyAgaW1hZ2Vfd2lkdGggPSByZWFkXzJfYnl0ZXMoKTsKKyAgbnVtX2NvbXBvbmVudHMgPSByZWFkXzFfYnl0ZSgpOworCisgIHN3aXRjaCAobWFya2VyKSB7CisgIGNhc2UgTV9TT0YwOiAgcHJvY2VzcyA9ICJCYXNlbGluZSI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjE6ICBwcm9jZXNzID0gIkV4dGVuZGVkIHNlcXVlbnRpYWwiOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YyOiAgcHJvY2VzcyA9ICJQcm9ncmVzc2l2ZSI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjM6ICBwcm9jZXNzID0gIkxvc3NsZXNzIjsgIGJyZWFrOworICBjYXNlIE1fU09GNTogIHByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwiOyAgYnJlYWs7CisgIGNhc2UgTV9TT0Y2OiAgcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUiOyAgYnJlYWs7CisgIGNhc2UgTV9TT0Y3OiAgcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgbG9zc2xlc3MiOyAgYnJlYWs7CisgIGNhc2UgTV9TT0Y5OiAgcHJvY2VzcyA9ICJFeHRlbmRlZCBzZXF1ZW50aWFsLCBhcml0aG1ldGljIGNvZGluZyI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjEwOiBwcm9jZXNzID0gIlByb2dyZXNzaXZlLCBhcml0aG1ldGljIGNvZGluZyI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjExOiBwcm9jZXNzID0gIkxvc3NsZXNzLCBhcml0aG1ldGljIGNvZGluZyI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjEzOiBwcm9jZXNzID0gIkRpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBhcml0aG1ldGljIGNvZGluZyI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjE0OgorICAgIHByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBhcml0aG1ldGljIGNvZGluZyI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjE1OiBwcm9jZXNzID0gIkRpZmZlcmVudGlhbCBsb3NzbGVzcywgYXJpdGhtZXRpYyBjb2RpbmciOyAgYnJlYWs7CisgIGRlZmF1bHQ6ICAgICAgcHJvY2VzcyA9ICJVbmtub3duIjsgIGJyZWFrOworICB9CisKKyAgcHJpbnRmKCJKUEVHIGltYWdlIGlzICV1dyAqICV1aCwgJWQgY29sb3IgY29tcG9uZW50cywgJWQgYml0cyBwZXIgc2FtcGxlXG4iLAorICAgICAgICAgaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCwgbnVtX2NvbXBvbmVudHMsIGRhdGFfcHJlY2lzaW9uKTsKKyAgcHJpbnRmKCJKUEVHIHByb2Nlc3M6ICVzXG4iLCBwcm9jZXNzKTsKKworICBpZiAobGVuZ3RoICE9ICh1bnNpZ25lZCBpbnQpKDggKyBudW1fY29tcG9uZW50cyAqIDMpKQorICAgIEVSUkVYSVQoIkJvZ3VzIFNPRiBtYXJrZXIgbGVuZ3RoIik7CisKKyAgZm9yIChjaSA9IDA7IGNpIDwgbnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAodm9pZClyZWFkXzFfYnl0ZSgpOyAgICAgICAgLyogQ29tcG9uZW50IElEIGNvZGUgKi8KKyAgICAodm9pZClyZWFkXzFfYnl0ZSgpOyAgICAgICAgLyogSCwgViBzYW1wbGluZyBmYWN0b3JzICovCisgICAgKHZvaWQpcmVhZF8xX2J5dGUoKTsgICAgICAgIC8qIFF1YW50aXphdGlvbiB0YWJsZSBudW1iZXIgKi8KKyAgfQorfQorCisKKy8qCisgKiBQYXJzZSB0aGUgbWFya2VyIHN0cmVhbSB1bnRpbCBTT1Mgb3IgRU9JIGlzIHNlZW47CisgKiBkaXNwbGF5IGFueSBDT00gbWFya2Vycy4KKyAqIFdoaWxlIHRoZSBjb21wYW5pb24gcHJvZ3JhbSB3cmpwZ2NvbSB3aWxsIGFsd2F5cyBpbnNlcnQgQ09NIG1hcmtlcnMgYmVmb3JlCisgKiBTT0ZuLCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgbWlnaHQgbm90LCBzbyB3ZSBzY2FuIHRvIFNPUyBiZWZvcmUgc3RvcHBpbmcuCisgKiBJZiB3ZSB3ZXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1hZ2UgZGltZW5zaW9ucywgd2Ugd291bGQgc3RvcCBhdCBTT0ZuLgorICogKENvbnZlcnNlbHksIGlmIHdlIG9ubHkgY2FyZWQgYWJvdXQgQ09NIG1hcmtlcnMsIHRoZXJlIHdvdWxkIGJlIG5vIG5lZWQKKyAqIGZvciBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIFNPRm47IHdlIGNvdWxkIHRyZWF0IGl0IGxpa2Ugb3RoZXIgbWFya2Vycy4pCisgKi8KKworc3RhdGljIGludAorc2Nhbl9KUEVHX2hlYWRlcihpbnQgdmVyYm9zZSwgaW50IHJhdykKK3sKKyAgaW50IG1hcmtlcjsKKworICAvKiBFeHBlY3QgU09JIGF0IHN0YXJ0IG9mIGZpbGUgKi8KKyAgaWYgKGZpcnN0X21hcmtlcigpICE9IE1fU09JKQorICAgIEVSUkVYSVQoIkV4cGVjdGVkIFNPSSBtYXJrZXIgZmlyc3QiKTsKKworICAvKiBTY2FuIG1pc2NlbGxhbmVvdXMgbWFya2VycyB1bnRpbCB3ZSByZWFjaCBTT1MuICovCisgIGZvciAoOzspIHsKKyAgICBtYXJrZXIgPSBuZXh0X21hcmtlcigpOworICAgIHN3aXRjaCAobWFya2VyKSB7CisgICAgICAvKiBOb3RlIHRoYXQgbWFya2VyIGNvZGVzIDB4QzQsIDB4QzgsIDB4Q0MgYXJlIG5vdCwgYW5kIG11c3Qgbm90IGJlLAorICAgICAgICogdHJlYXRlZCBhcyBTT0ZuLiAgQzQgaW4gcGFydGljdWxhciBpcyBhY3R1YWxseSBESFQuCisgICAgICAgKi8KKyAgICBjYXNlIE1fU09GMDogICAgICAgICAgICAgICAgLyogQmFzZWxpbmUgKi8KKyAgICBjYXNlIE1fU09GMTogICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgc2VxdWVudGlhbCwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0YyOiAgICAgICAgICAgICAgICAvKiBQcm9ncmVzc2l2ZSwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0YzOiAgICAgICAgICAgICAgICAvKiBMb3NzbGVzcywgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0Y1OiAgICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0Y2OiAgICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNzogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIGxvc3NsZXNzLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjk6ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTA6ICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTE6ICAgICAgICAgICAgICAgLyogTG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTM6ICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTQ6ICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjE1OiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgYXJpdGhtZXRpYyAqLworICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByb2Nlc3NfU09GbihtYXJrZXIpOworICAgICAgZWxzZQorICAgICAgICBza2lwX3ZhcmlhYmxlKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTV9TT1M6ICAgICAgICAgICAgICAgICAvKiBzdG9wIGJlZm9yZSBoaXR0aW5nIGNvbXByZXNzZWQgZGF0YSAqLworICAgICAgcmV0dXJuIG1hcmtlcjsKKworICAgIGNhc2UgTV9FT0k6ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIGl0J3MgYSB0YWJsZXMtb25seSBKUEVHIHN0cmVhbSAqLworICAgICAgcmV0dXJuIG1hcmtlcjsKKworICAgIGNhc2UgTV9DT006CisgICAgICBwcm9jZXNzX0NPTShyYXcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fQVBQMTI6CisgICAgICAvKiBTb21lIGRpZ2l0YWwgY2FtZXJhIG1ha2VycyBwdXQgdXNlZnVsIHRleHR1YWwgaW5mb3JtYXRpb24gaW50bworICAgICAgICogQVBQMTIgbWFya2Vycywgc28gd2UgcHJpbnQgdGhvc2Ugb3V0IHRvbyB3aGVuIGluIC12ZXJib3NlIG1vZGUuCisgICAgICAgKi8KKyAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIHByaW50ZigiQVBQMTIgY29udGFpbnM6XG4iKTsKKyAgICAgICAgcHJvY2Vzc19DT00ocmF3KTsKKyAgICAgIH0gZWxzZQorICAgICAgICBza2lwX3ZhcmlhYmxlKCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlIGp1c3QgZ2V0cyBza2lwcGVkICovCisgICAgICBza2lwX3ZhcmlhYmxlKCk7ICAgICAgICAgIC8qIHdlIGFzc3VtZSBpdCBoYXMgYSBwYXJhbWV0ZXIgY291bnQuLi4gKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSAvKiBlbmQgbG9vcCAqLworfQorCisKKy8qIENvbW1hbmQgbGluZSBwYXJzaW5nIGNvZGUgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOyAgICAvKiBwcm9ncmFtIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCisKKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCisvKiBjb21wbGFpbiBhYm91dCBiYWQgY29tbWFuZCBsaW5lICovCit7CisgIGZwcmludGYoc3RkZXJyLCAicmRqcGdjb20gZGlzcGxheXMgYW55IHRleHR1YWwgY29tbWVudHMgaW4gYSBKUEVHIGZpbGUuXG4iKTsKKworICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbc3dpdGNoZXNdIFtpbnB1dGZpbGVdXG4iLCBwcm9nbmFtZSk7CisKKyAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyAobmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkKTpcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXJhdyAgICAgICAgRGlzcGxheSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gY29tbWVudHMgKHVuc2FmZSlcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXZlcmJvc2UgICAgQWxzbyBkaXNwbGF5IGRpbWVuc2lvbnMgb2YgSlBFRyBpbWFnZVxuIik7CisKKyAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisKK3N0YXRpYyBpbnQKK2tleW1hdGNoKGNoYXIgKmFyZywgY29uc3QgY2hhciAqa2V5d29yZCwgaW50IG1pbmNoYXJzKQorLyogQ2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZyBvZiAocG9zc2libHkgYWJicmV2aWF0ZWQpIGtleXdvcmQgc3dpdGNoZXMuICovCisvKiBrZXl3b3JkIGlzIHRoZSBjb25zdGFudCBrZXl3b3JkIChtdXN0IGJlIGxvd2VyIGNhc2UgYWxyZWFkeSksICovCisvKiBtaW5jaGFycyBpcyBsZW5ndGggb2YgbWluaW11bSBsZWdhbCBhYmJyZXZpYXRpb24uICovCit7CisgIHJlZ2lzdGVyIGludCBjYSwgY2s7CisgIHJlZ2lzdGVyIGludCBubWF0Y2hlZCA9IDA7CisKKyAgd2hpbGUgKChjYSA9ICphcmcrKykgIT0gJ1wwJykgeworICAgIGlmICgoY2sgPSAqa2V5d29yZCsrKSA9PSAnXDAnKQorICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAvKiBhcmcgbG9uZ2VyIHRoYW4ga2V5d29yZCwgbm8gZ29vZCAqLworICAgIGlmIChpc3VwcGVyKGNhKSkgICAgICAgICAgICAvKiBmb3JjZSBhcmcgdG8gbGNhc2UgKGFzc3VtZSBjayBpcyBhbHJlYWR5KSAqLworICAgICAgY2EgPSB0b2xvd2VyKGNhKTsKKyAgICBpZiAoY2EgIT0gY2spCisgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgIC8qIG5vIGdvb2QgKi8KKyAgICBubWF0Y2hlZCsrOyAgICAgICAgICAgICAgICAgLyogY291bnQgbWF0Y2hlZCBjaGFyYWN0ZXJzICovCisgIH0KKyAgLyogcmVhY2hlZCBlbmQgb2YgYXJndW1lbnQ7IGZhaWwgaWYgaXQncyB0b28gc2hvcnQgZm9yIHVuaXF1ZSBhYmJyZXYgKi8KKyAgaWYgKG5tYXRjaGVkIDwgbWluY2hhcnMpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgIC8qIEEtT0sgKi8KK30KKworCisvKgorICogVGhlIG1haW4gcHJvZ3JhbS4KKyAqLworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgYXJnbjsKKyAgY2hhciAqYXJnOworICBpbnQgdmVyYm9zZSA9IDAsIHJhdyA9IDA7CisKKyAgLyogT24gTWFjLCBmZXRjaCBhIGNvbW1hbmQgbGluZS4gKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQKKyAgYXJnYyA9IGNjb21tYW5kKCZhcmd2KTsKKyNlbmRpZgorCisgIHByb2duYW1lID0gYXJndlswXTsKKyAgaWYgKHByb2duYW1lID09IE5VTEwgfHwgcHJvZ25hbWVbMF0gPT0gMCkKKyAgICBwcm9nbmFtZSA9ICJyZGpwZ2NvbSI7ICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCisKKyAgLyogUGFyc2Ugc3dpdGNoZXMsIGlmIGFueSAqLworICBmb3IgKGFyZ24gPSAxOyBhcmduIDwgYXJnYzsgYXJnbisrKSB7CisgICAgYXJnID0gYXJndlthcmduXTsKKyAgICBpZiAoYXJnWzBdICE9ICctJykKKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogbm90IHN3aXRjaCwgbXVzdCBiZSBmaWxlIG5hbWUgKi8KKyAgICBhcmcrKzsgICAgICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBvdmVyICctJyAqLworICAgIGlmIChrZXltYXRjaChhcmcsICJ2ZXJib3NlIiwgMSkpIHsKKyAgICAgIHZlcmJvc2UrKzsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInJhdyIsIDEpKSB7CisgICAgICByYXcgPSAxOworICAgIH0gZWxzZQorICAgICAgdXNhZ2UoKTsKKyAgfQorCisgIC8qIE9wZW4gdGhlIGlucHV0IGZpbGUuICovCisgIC8qIFVuaXggc3R5bGU6IGV4cGVjdCB6ZXJvIG9yIG9uZSBmaWxlIG5hbWUgKi8KKyAgaWYgKGFyZ24gPCBhcmdjIC0gMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG9ubHkgb25lIGlucHV0IGZpbGVcbiIsIHByb2duYW1lKTsKKyAgICB1c2FnZSgpOworICB9CisgIGlmIChhcmduIDwgYXJnYykgeworICAgIGlmICgoaW5maWxlID0gZm9wZW4oYXJndlthcmduXSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgYXJndlthcmduXSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGRlZmF1bHQgaW5wdXQgZmlsZSBpcyBzdGRpbiAqLworI2lmZGVmIFVTRV9TRVRNT0RFICAgICAgICAgICAgICAvKiBuZWVkIHRvIGhhY2sgZmlsZSBtb2RlPyAqLworICAgIHNldG1vZGUoZmlsZW5vKHN0ZGluKSwgT19CSU5BUlkpOworI2VuZGlmCisjaWZkZWYgVVNFX0ZET1BFTiAgICAgICAgICAgICAgIC8qIG5lZWQgdG8gcmUtb3BlbiBpbiBiaW5hcnkgbW9kZT8gKi8KKyAgICBpZiAoKGluZmlsZSA9IGZkb3BlbihmaWxlbm8oc3RkaW4pLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gc3RkaW5cbiIsIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisjZWxzZQorICAgIGluZmlsZSA9IHN0ZGluOworI2VuZGlmCisgIH0KKworICAvKiBTY2FuIHRoZSBKUEVHIGhlYWRlcnMuICovCisgICh2b2lkKXNjYW5fSlBFR19oZWFkZXIodmVyYm9zZSwgcmF3KTsKKworICAvKiBBbGwgZG9uZS4gKi8KKyAgZXhpdChFWElUX1NVQ0NFU1MpOworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JkcHBtLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZHBwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmI3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZHBwbS5jCkBAIC0wLDAgKzEsNzY2IEBACisvKgorICogcmRwcG0uYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwOSBieSBCaWxsIEFsbG9tYmVydCwgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gcmVhZCBpbnB1dCBpbWFnZXMgaW4gUFBNL1BHTSBmb3JtYXQuCisgKiBUaGUgZXh0ZW5kZWQgMi1ieXRlLXBlci1zYW1wbGUgcmF3IFBQTS9QR00gZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgorICogVGhlIFBCTVBMVVMgbGlicmFyeSBpcyBOT1QgcmVxdWlyZWQgdG8gY29tcGlsZSB0aGlzIHNvZnR3YXJlCisgKiAoYnV0IGl0IGlzIGhpZ2hseSB1c2VmdWwgYXMgYSBzZXQgb2YgUFBNIGltYWdlIG1hbmlwdWxhdGlvbiBwcm9ncmFtcykuCisgKgorICogVGhlc2Ugcm91dGluZXMgbWF5IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBub24tVW5peCBlbnZpcm9ubWVudHMgb3IKKyAqIHNwZWNpYWxpemVkIGFwcGxpY2F0aW9ucy4gIEFzIHRoZXkgc3RhbmQsIHRoZXkgYXNzdW1lIGlucHV0IGZyb20KKyAqIGFuIG9yZGluYXJ5IHN0ZGlvIHN0cmVhbS4gIFRoZXkgZnVydGhlciBhc3N1bWUgdGhhdCByZWFkaW5nIGJlZ2lucworICogYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlOyBzdGFydF9pbnB1dCBtYXkgbmVlZCB3b3JrIGlmIHRoZQorICogdXNlciBpbnRlcmZhY2UgaGFzIGFscmVhZHkgcmVhZCBzb21lIGRhdGEgKGUuZy4sIHRvIGRldGVybWluZSB0aGF0CisgKiB0aGUgZmlsZSBpcyBpbmRlZWQgUFBNIGZvcm1hdCkuCisgKi8KKworI2luY2x1ZGUgImNteWsuaCIKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKworI2lmZGVmIFBQTV9TVVBQT1JURUQKKworCisvKiBQb3J0aW9ucyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIHRoZSBQQk1QTFVTIGxpYnJhcnksIHdoaWNoIGlzOgorKioKKyoqIENvcHlyaWdodCAoQykgMTk4OCBieSBKZWYgUG9za2FuemVyLgorKioKKyoqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworKiogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorKiogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyoqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyoqIGRvY3VtZW50YXRpb24uICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yCisqKiBpbXBsaWVkIHdhcnJhbnR5LgorKi8KKworCisvKiBNYWNyb3MgdG8gZGVhbCB3aXRoIHVuc2lnbmVkIGNoYXJzIGFzIGVmZmljaWVudGx5IGFzIGNvbXBpbGVyIGFsbG93cyAqLworCisjaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVV9DSEFSOworI2RlZmluZSBVQ0goeCkgICgoaW50KSh4KSkKKyNlbHNlIC8qICFIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKyNpZmRlZiBfX0NIQVJfVU5TSUdORURfXwordHlwZWRlZiBjaGFyIFVfQ0hBUjsKKyNkZWZpbmUgVUNIKHgpICAoKGludCkoeCkpCisjZWxzZQordHlwZWRlZiBjaGFyIFVfQ0hBUjsKKyNkZWZpbmUgVUNIKHgpICAoKGludCkoeCkgJiAweEZGKQorI2VuZGlmCisjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCisKKworI2RlZmluZSBSZWFkT0soZmlsZSwgYnVmZmVyLCBsZW4pIFwKKyAgKEpGUkVBRChmaWxlLCBidWZmZXIsIGxlbikgPT0gKChzaXplX3QpKGxlbikpKQorCitzdGF0aWMgaW50IGFscGhhX2luZGV4W0pQRUdfTlVNQ1NdID0geworICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzLCAzLCAwLCAwLCAtMQorfTsKKworCisvKiBQcml2YXRlIHZlcnNpb24gb2YgZGF0YSBzb3VyY2Ugb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGNqcGVnX3NvdXJjZV9zdHJ1Y3QgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogVXN1YWxseSB0aGVzZSB0d28gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgcGxhY2U6ICovCisgIFVfQ0hBUiAqaW9idWZmZXI7ICAgICAgICAgICAgIC8qIGZyZWFkJ3MgSS9PIGJ1ZmZlciAqLworICBKU0FNUFJPVyBwaXhyb3c7ICAgICAgICAgICAgICAvKiBjb21wcmVzc29yIGlucHV0IGJ1ZmZlciAqLworICBzaXplX3QgYnVmZmVyX3dpZHRoOyAgICAgICAgICAvKiB3aWR0aCBvZiBJL08gYnVmZmVyICovCisgIEpTQU1QTEUgKnJlc2NhbGU7ICAgICAgICAgICAgIC8qID0+IG1heHZhbC1yZW1hcHBpbmcgYXJyYXksIG9yIE5VTEwgKi8KKyAgaW50IG1heHZhbDsKK30gcHBtX3NvdXJjZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgcHBtX3NvdXJjZV9zdHJ1Y3QgKnBwbV9zb3VyY2VfcHRyOworCisKK0xPQ0FMKGludCkKK3BibV9nZXRjKEZJTEUgKmluZmlsZSkKKy8qIFJlYWQgbmV4dCBjaGFyLCBza2lwcGluZyBvdmVyIGFueSBjb21tZW50cyAqLworLyogQSBjb21tZW50L25ld2xpbmUgc2VxdWVuY2UgaXMgcmV0dXJuZWQgYXMgYSBuZXdsaW5lICovCit7CisgIHJlZ2lzdGVyIGludCBjaDsKKworICBjaCA9IGdldGMoaW5maWxlKTsKKyAgaWYgKGNoID09ICcjJykgeworICAgIGRvIHsKKyAgICAgIGNoID0gZ2V0YyhpbmZpbGUpOworICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKTsKKyAgfQorICByZXR1cm4gY2g7Cit9CisKKworTE9DQUwodW5zaWduZWQgaW50KQorcmVhZF9wYm1faW50ZWdlcihqX2NvbXByZXNzX3B0ciBjaW5mbywgRklMRSAqaW5maWxlLCB1bnNpZ25lZCBpbnQgbWF4dmFsKQorLyogUmVhZCBhbiB1bnNpZ25lZCBkZWNpbWFsIGludGVnZXIgZnJvbSB0aGUgUFBNIGZpbGUgKi8KKy8qIFN3YWxsb3dzIG9uZSB0cmFpbGluZyBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGludGVnZXIgKi8KKy8qIE5vdGUgdGhhdCBvbiBhIDE2LWJpdC1pbnQgbWFjaGluZSwgb25seSB2YWx1ZXMgdXAgdG8gNjRrIGNhbiBiZSByZWFkLiAqLworLyogVGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSBpbiBwcmFjdGljZS4gKi8KK3sKKyAgcmVnaXN0ZXIgaW50IGNoOworICByZWdpc3RlciB1bnNpZ25lZCBpbnQgdmFsOworCisgIC8qIFNraXAgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICBkbyB7CisgICAgY2ggPSBwYm1fZ2V0YyhpbmZpbGUpOworICAgIGlmIChjaCA9PSBFT0YpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIH0gd2hpbGUgKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1xyJyk7CisKKyAgaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX05PTk5VTUVSSUMpOworCisgIHZhbCA9IGNoIC0gJzAnOworICB3aGlsZSAoKGNoID0gcGJtX2dldGMoaW5maWxlKSkgPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgIHZhbCAqPSAxMDsKKyAgICB2YWwgKz0gY2ggLSAnMCc7CisgIH0KKworICBpZiAodmFsID4gbWF4dmFsKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX1RPT0xBUkdFKTsKKworICByZXR1cm4gdmFsOworfQorCisKKy8qCisgKiBSZWFkIG9uZSByb3cgb2YgcGl4ZWxzLgorICoKKyAqIFdlIHByb3ZpZGUgc2V2ZXJhbCBkaWZmZXJlbnQgdmVyc2lvbnMgZGVwZW5kaW5nIG9uIGlucHV0IGZpbGUgZm9ybWF0LgorICogSW4gYWxsIGNhc2VzLCBpbnB1dCBpcyBzY2FsZWQgdG8gdGhlIHNpemUgb2YgSlNBTVBMRS4KKyAqCisgKiBBIHJlYWxseSBmYXN0IHBhdGggaXMgcHJvdmlkZWQgZm9yIHJlYWRpbmcgYnl0ZS9zYW1wbGUgcmF3IGZpbGVzIHdpdGgKKyAqIG1heHZhbCA9IE1BWEpTQU1QTEUsIHdoaWNoIGlzIHRoZSBub3JtYWwgY2FzZSBmb3IgOC1iaXQgZGF0YS4KKyAqLworCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X3RleHRfZ3JheV9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgdGV4dC1mb3JtYXQgUEdNIGZpbGVzIHdpdGggYW55IG1heHZhbCAqLworeworICBwcG1fc291cmNlX3B0ciBzb3VyY2UgPSAocHBtX3NvdXJjZV9wdHIpc2luZm87CisgIEZJTEUgKmluZmlsZSA9IHNvdXJjZS0+cHViLmlucHV0X2ZpbGU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSAqcmVzY2FsZSA9IHNvdXJjZS0+cmVzY2FsZTsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIHVuc2lnbmVkIGludCBtYXh2YWwgPSBzb3VyY2UtPm1heHZhbDsKKworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICpwdHIrKyA9IHJlc2NhbGVbcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlLCBtYXh2YWwpXTsKKyAgfQorICByZXR1cm4gMTsKK30KKworCisjZGVmaW5lIEdSQVlfUkdCX1JFQURfTE9PUChyZWFkX29wLCBhbHBoYV9zZXRfb3ApIHsgXAorICBmb3IgKGNvbCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgY29sID4gMDsgY29sLS0pIHsgXAorICAgIHB0cltyaW5kZXhdID0gcHRyW2dpbmRleF0gPSBwdHJbYmluZGV4XSA9IHJlYWRfb3A7IFwKKyAgICBhbHBoYV9zZXRfb3AgXAorICAgIHB0ciArPSBwczsgXAorICB9IFwKK30KKworTUVUSE9EREVGKEpESU1FTlNJT04pCitnZXRfdGV4dF9ncmF5X3JnYl9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgdGV4dC1mb3JtYXQgUEdNIGZpbGVzIHdpdGggYW55IG1heHZhbCBhbmQKKyAgIGNvbnZlcnRpbmcgdG8gZXh0ZW5kZWQgUkdCICovCit7CisgIHBwbV9zb3VyY2VfcHRyIHNvdXJjZSA9IChwcG1fc291cmNlX3B0cilzaW5mbzsKKyAgRklMRSAqaW5maWxlID0gc291cmNlLT5wdWIuaW5wdXRfZmlsZTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKyAgdW5zaWduZWQgaW50IG1heHZhbCA9IHNvdXJjZS0+bWF4dmFsOworICByZWdpc3RlciBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgZ2luZGV4ID0gcmdiX2dyZWVuW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgIHJlZ2lzdGVyIGludCBiaW5kZXggPSByZ2JfYmx1ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgYWluZGV4ID0gYWxwaGFfaW5kZXhbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IHBzID0gcmdiX3BpeGVsc2l6ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworCisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgaWYgKG1heHZhbCA9PSBNQVhKU0FNUExFKSB7CisgICAgaWYgKGFpbmRleCA+PSAwKQorICAgICAgR1JBWV9SR0JfUkVBRF9MT09QKHJlYWRfcGJtX2ludGVnZXIoY2luZm8sIGluZmlsZSwgbWF4dmFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwdHJbYWluZGV4XSA9IDB4RkY7KQorICAgIGVsc2UKKyAgICAgIEdSQVlfUkdCX1JFQURfTE9PUChyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCksKQorICB9IGVsc2UgeworICAgIGlmIChhaW5kZXggPj0gMCkKKyAgICAgIEdSQVlfUkdCX1JFQURfTE9PUChyZXNjYWxlW3JlYWRfcGJtX2ludGVnZXIoY2luZm8sIGluZmlsZSwgbWF4dmFsKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgcHRyW2FpbmRleF0gPSAweEZGOykKKyAgICBlbHNlCisgICAgICBHUkFZX1JHQl9SRUFEX0xPT1AocmVzY2FsZVtyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCldLCkKKyAgfQorICByZXR1cm4gMTsKK30KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF90ZXh0X2dyYXlfY215a19yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgdGV4dC1mb3JtYXQgUEdNIGZpbGVzIHdpdGggYW55IG1heHZhbCBhbmQKKyAgIGNvbnZlcnRpbmcgdG8gQ01ZSyAqLworeworICBwcG1fc291cmNlX3B0ciBzb3VyY2UgPSAocHBtX3NvdXJjZV9wdHIpc2luZm87CisgIEZJTEUgKmluZmlsZSA9IHNvdXJjZS0+cHViLmlucHV0X2ZpbGU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSAqcmVzY2FsZSA9IHNvdXJjZS0+cmVzY2FsZTsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIHVuc2lnbmVkIGludCBtYXh2YWwgPSBzb3VyY2UtPm1heHZhbDsKKworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGlmIChtYXh2YWwgPT0gTUFYSlNBTVBMRSkgeworICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgSlNBTVBMRSBncmF5ID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlLCBtYXh2YWwpOworICAgICAgcmdiX3RvX2NteWsoZ3JheSwgZ3JheSwgZ3JheSwgcHRyLCBwdHIgKyAxLCBwdHIgKyAyLCBwdHIgKyAzKTsKKyAgICAgIHB0ciArPSA0OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3IgKGNvbCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIEpTQU1QTEUgZ3JheSA9IHJlc2NhbGVbcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlLCBtYXh2YWwpXTsKKyAgICAgIHJnYl90b19jbXlrKGdyYXksIGdyYXksIGdyYXksIHB0ciwgcHRyICsgMSwgcHRyICsgMiwgcHRyICsgMyk7CisgICAgICBwdHIgKz0gNDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKworI2RlZmluZSBSR0JfUkVBRF9MT09QKHJlYWRfb3AsIGFscGhhX3NldF9vcCkgeyBcCisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeyBcCisgICAgcHRyW3JpbmRleF0gPSByZWFkX29wOyBcCisgICAgcHRyW2dpbmRleF0gPSByZWFkX29wOyBcCisgICAgcHRyW2JpbmRleF0gPSByZWFkX29wOyBcCisgICAgYWxwaGFfc2V0X29wIFwKKyAgICBwdHIgKz0gcHM7IFwKKyAgfSBcCit9CisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X3RleHRfcmdiX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyB0ZXh0LWZvcm1hdCBQUE0gZmlsZXMgd2l0aCBhbnkgbWF4dmFsICovCit7CisgIHBwbV9zb3VyY2VfcHRyIHNvdXJjZSA9IChwcG1fc291cmNlX3B0cilzaW5mbzsKKyAgRklMRSAqaW5maWxlID0gc291cmNlLT5wdWIuaW5wdXRfZmlsZTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKyAgdW5zaWduZWQgaW50IG1heHZhbCA9IHNvdXJjZS0+bWF4dmFsOworICByZWdpc3RlciBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgZ2luZGV4ID0gcmdiX2dyZWVuW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgIHJlZ2lzdGVyIGludCBiaW5kZXggPSByZ2JfYmx1ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgYWluZGV4ID0gYWxwaGFfaW5kZXhbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IHBzID0gcmdiX3BpeGVsc2l6ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworCisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgaWYgKG1heHZhbCA9PSBNQVhKU0FNUExFKSB7CisgICAgaWYgKGFpbmRleCA+PSAwKQorICAgICAgUkdCX1JFQURfTE9PUChyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCksCisgICAgICAgICAgICAgICAgICAgIHB0clthaW5kZXhdID0gMHhGRjspCisgICAgZWxzZQorICAgICAgUkdCX1JFQURfTE9PUChyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCksKQorICB9IGVsc2UgeworICAgIGlmIChhaW5kZXggPj0gMCkKKyAgICAgIFJHQl9SRUFEX0xPT1AocmVzY2FsZVtyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCldLAorICAgICAgICAgICAgICAgICAgICBwdHJbYWluZGV4XSA9IDB4RkY7KQorICAgIGVsc2UKKyAgICAgIFJHQl9SRUFEX0xPT1AocmVzY2FsZVtyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCldLCkKKyAgfQorICByZXR1cm4gMTsKK30KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF90ZXh0X3JnYl9jbXlrX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyB0ZXh0LWZvcm1hdCBQUE0gZmlsZXMgd2l0aCBhbnkgbWF4dmFsIGFuZAorICAgY29udmVydGluZyB0byBDTVlLICovCit7CisgIHBwbV9zb3VyY2VfcHRyIHNvdXJjZSA9IChwcG1fc291cmNlX3B0cilzaW5mbzsKKyAgRklMRSAqaW5maWxlID0gc291cmNlLT5wdWIuaW5wdXRfZmlsZTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKyAgdW5zaWduZWQgaW50IG1heHZhbCA9IHNvdXJjZS0+bWF4dmFsOworCisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgaWYgKG1heHZhbCA9PSBNQVhKU0FNUExFKSB7CisgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICBKU0FNUExFIHIgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCk7CisgICAgICBKU0FNUExFIGcgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCk7CisgICAgICBKU0FNUExFIGIgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCk7CisgICAgICByZ2JfdG9fY215ayhyLCBnLCBiLCBwdHIsIHB0ciArIDEsIHB0ciArIDIsIHB0ciArIDMpOworICAgICAgcHRyICs9IDQ7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgSlNBTVBMRSByID0gcmVzY2FsZVtyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCldOworICAgICAgSlNBTVBMRSBnID0gcmVzY2FsZVtyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCldOworICAgICAgSlNBTVBMRSBiID0gcmVzY2FsZVtyZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUsIG1heHZhbCldOworICAgICAgcmdiX3RvX2NteWsociwgZywgYiwgcHRyLCBwdHIgKyAxLCBwdHIgKyAyLCBwdHIgKyAzKTsKKyAgICAgIHB0ciArPSA0OworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF9zY2FsZWRfZ3JheV9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgcmF3LWJ5dGUtZm9ybWF0IFBHTSBmaWxlcyB3aXRoIGFueSBtYXh2YWwgKi8KK3sKKyAgcHBtX3NvdXJjZV9wdHIgc291cmNlID0gKHBwbV9zb3VyY2VfcHRyKXNpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIFVfQ0hBUiAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKworICBpZiAoIVJlYWRPSyhzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCBzb3VyY2UtPmlvYnVmZmVyLCBzb3VyY2UtPmJ1ZmZlcl93aWR0aCkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9JTlBVVF9FT0YpOworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGJ1ZmZlcnB0ciA9IHNvdXJjZS0+aW9idWZmZXI7CisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICpwdHIrKyA9IHJlc2NhbGVbVUNIKCpidWZmZXJwdHIrKyldOworICB9CisgIHJldHVybiAxOworfQorCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X2dyYXlfcmdiX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyByYXctYnl0ZS1mb3JtYXQgUEdNIGZpbGVzIHdpdGggYW55IG1heHZhbAorICAgYW5kIGNvbnZlcnRpbmcgdG8gZXh0ZW5kZWQgUkdCICovCit7CisgIHBwbV9zb3VyY2VfcHRyIHNvdXJjZSA9IChwcG1fc291cmNlX3B0cilzaW5mbzsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBVX0NIQVIgKmJ1ZmZlcnB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSAqcmVzY2FsZSA9IHNvdXJjZS0+cmVzY2FsZTsKKyAgSkRJTUVOU0lPTiBjb2w7CisgIHVuc2lnbmVkIGludCBtYXh2YWwgPSBzb3VyY2UtPm1heHZhbDsKKyAgcmVnaXN0ZXIgaW50IHJpbmRleCA9IHJnYl9yZWRbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IGdpbmRleCA9IHJnYl9ncmVlbltjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgYmluZGV4ID0gcmdiX2JsdWVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IGFpbmRleCA9IGFscGhhX2luZGV4W2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgIHJlZ2lzdGVyIGludCBwcyA9IHJnYl9waXhlbHNpemVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKworICBpZiAoIVJlYWRPSyhzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCBzb3VyY2UtPmlvYnVmZmVyLCBzb3VyY2UtPmJ1ZmZlcl93aWR0aCkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9JTlBVVF9FT0YpOworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGJ1ZmZlcnB0ciA9IHNvdXJjZS0+aW9idWZmZXI7CisgIGlmIChtYXh2YWwgPT0gTUFYSlNBTVBMRSkgeworICAgIGlmIChhaW5kZXggPj0gMCkKKyAgICAgIEdSQVlfUkdCX1JFQURfTE9PUCgqYnVmZmVycHRyKyssIHB0clthaW5kZXhdID0gMHhGRjspCisgICAgZWxzZQorICAgICAgR1JBWV9SR0JfUkVBRF9MT09QKCpidWZmZXJwdHIrKywpCisgIH0gZWxzZSB7CisgICAgaWYgKGFpbmRleCA+PSAwKQorICAgICAgR1JBWV9SR0JfUkVBRF9MT09QKHJlc2NhbGVbVUNIKCpidWZmZXJwdHIrKyldLCBwdHJbYWluZGV4XSA9IDB4RkY7KQorICAgIGVsc2UKKyAgICAgIEdSQVlfUkdCX1JFQURfTE9PUChyZXNjYWxlW1VDSCgqYnVmZmVycHRyKyspXSwpCisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKworTUVUSE9EREVGKEpESU1FTlNJT04pCitnZXRfZ3JheV9jbXlrX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyByYXctYnl0ZS1mb3JtYXQgUEdNIGZpbGVzIHdpdGggYW55IG1heHZhbAorICAgYW5kIGNvbnZlcnRpbmcgdG8gQ01ZSyAqLworeworICBwcG1fc291cmNlX3B0ciBzb3VyY2UgPSAocHBtX3NvdXJjZV9wdHIpc2luZm87CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgVV9DSEFSICpidWZmZXJwdHI7CisgIHJlZ2lzdGVyIEpTQU1QTEUgKnJlc2NhbGUgPSBzb3VyY2UtPnJlc2NhbGU7CisgIEpESU1FTlNJT04gY29sOworICB1bnNpZ25lZCBpbnQgbWF4dmFsID0gc291cmNlLT5tYXh2YWw7CisKKyAgaWYgKCFSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgc291cmNlLT5pb2J1ZmZlciwgc291cmNlLT5idWZmZXJfd2lkdGgpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgcHRyID0gc291cmNlLT5wdWIuYnVmZmVyWzBdOworICBidWZmZXJwdHIgPSBzb3VyY2UtPmlvYnVmZmVyOworICBpZiAobWF4dmFsID09IE1BWEpTQU1QTEUpIHsKKyAgICBmb3IgKGNvbCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIEpTQU1QTEUgZ3JheSA9ICpidWZmZXJwdHIrKzsKKyAgICAgIHJnYl90b19jbXlrKGdyYXksIGdyYXksIGdyYXksIHB0ciwgcHRyICsgMSwgcHRyICsgMiwgcHRyICsgMyk7CisgICAgICBwdHIgKz0gNDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICBKU0FNUExFIGdyYXkgPSByZXNjYWxlW1VDSCgqYnVmZmVycHRyKyspXTsKKyAgICAgIHJnYl90b19jbXlrKGdyYXksIGdyYXksIGdyYXksIHB0ciwgcHRyICsgMSwgcHRyICsgMiwgcHRyICsgMyk7CisgICAgICBwdHIgKz0gNDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKworTUVUSE9EREVGKEpESU1FTlNJT04pCitnZXRfcmdiX3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyByYXctYnl0ZS1mb3JtYXQgUFBNIGZpbGVzIHdpdGggYW55IG1heHZhbCAqLworeworICBwcG1fc291cmNlX3B0ciBzb3VyY2UgPSAocHBtX3NvdXJjZV9wdHIpc2luZm87CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgVV9DSEFSICpidWZmZXJwdHI7CisgIHJlZ2lzdGVyIEpTQU1QTEUgKnJlc2NhbGUgPSBzb3VyY2UtPnJlc2NhbGU7CisgIEpESU1FTlNJT04gY29sOworICB1bnNpZ25lZCBpbnQgbWF4dmFsID0gc291cmNlLT5tYXh2YWw7CisgIHJlZ2lzdGVyIGludCByaW5kZXggPSByZ2JfcmVkW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgIHJlZ2lzdGVyIGludCBnaW5kZXggPSByZ2JfZ3JlZW5bY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IGJpbmRleCA9IHJnYl9ibHVlW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgIHJlZ2lzdGVyIGludCBhaW5kZXggPSBhbHBoYV9pbmRleFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgcHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisKKyAgaWYgKCFSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgc291cmNlLT5pb2J1ZmZlciwgc291cmNlLT5idWZmZXJfd2lkdGgpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKyAgcHRyID0gc291cmNlLT5wdWIuYnVmZmVyWzBdOworICBidWZmZXJwdHIgPSBzb3VyY2UtPmlvYnVmZmVyOworICBpZiAobWF4dmFsID09IE1BWEpTQU1QTEUpIHsKKyAgICBpZiAoYWluZGV4ID49IDApCisgICAgICBSR0JfUkVBRF9MT09QKCpidWZmZXJwdHIrKywgcHRyW2FpbmRleF0gPSAweEZGOykKKyAgICBlbHNlCisgICAgICBSR0JfUkVBRF9MT09QKCpidWZmZXJwdHIrKywpCisgIH0gZWxzZSB7CisgICAgaWYgKGFpbmRleCA+PSAwKQorICAgICAgUkdCX1JFQURfTE9PUChyZXNjYWxlW1VDSCgqYnVmZmVycHRyKyspXSwgcHRyW2FpbmRleF0gPSAweEZGOykKKyAgICBlbHNlCisgICAgICBSR0JfUkVBRF9MT09QKHJlc2NhbGVbVUNIKCpidWZmZXJwdHIrKyldLCkKKyAgfQorICByZXR1cm4gMTsKK30KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF9yZ2JfY215a19yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgcmF3LWJ5dGUtZm9ybWF0IFBQTSBmaWxlcyB3aXRoIGFueSBtYXh2YWwgYW5kCisgICBjb252ZXJ0aW5nIHRvIENNWUsgKi8KK3sKKyAgcHBtX3NvdXJjZV9wdHIgc291cmNlID0gKHBwbV9zb3VyY2VfcHRyKXNpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIFVfQ0hBUiAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKyAgdW5zaWduZWQgaW50IG1heHZhbCA9IHNvdXJjZS0+bWF4dmFsOworCisgIGlmICghUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIHNvdXJjZS0+aW9idWZmZXIsIHNvdXJjZS0+YnVmZmVyX3dpZHRoKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgYnVmZmVycHRyID0gc291cmNlLT5pb2J1ZmZlcjsKKyAgaWYgKG1heHZhbCA9PSBNQVhKU0FNUExFKSB7CisgICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICBKU0FNUExFIHIgPSAqYnVmZmVycHRyKys7CisgICAgICBKU0FNUExFIGcgPSAqYnVmZmVycHRyKys7CisgICAgICBKU0FNUExFIGIgPSAqYnVmZmVycHRyKys7CisgICAgICByZ2JfdG9fY215ayhyLCBnLCBiLCBwdHIsIHB0ciArIDEsIHB0ciArIDIsIHB0ciArIDMpOworICAgICAgcHRyICs9IDQ7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgSlNBTVBMRSByID0gcmVzY2FsZVtVQ0goKmJ1ZmZlcnB0cisrKV07CisgICAgICBKU0FNUExFIGcgPSByZXNjYWxlW1VDSCgqYnVmZmVycHRyKyspXTsKKyAgICAgIEpTQU1QTEUgYiA9IHJlc2NhbGVbVUNIKCpidWZmZXJwdHIrKyldOworICAgICAgcmdiX3RvX2NteWsociwgZywgYiwgcHRyLCBwdHIgKyAxLCBwdHIgKyAyLCBwdHIgKyAzKTsKKyAgICAgIHB0ciArPSA0OworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF9yYXdfcm93KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQorLyogVGhpcyB2ZXJzaW9uIGlzIGZvciByZWFkaW5nIHJhdy1ieXRlLWZvcm1hdCBmaWxlcyB3aXRoIG1heHZhbCA9IE1BWEpTQU1QTEUuCisgKiBJbiB0aGlzIGNhc2Ugd2UganVzdCByZWFkIHJpZ2h0IGludG8gdGhlIEpTQU1QTEUgYnVmZmVyIQorICogTm90ZSB0aGF0IHNhbWUgY29kZSB3b3JrcyBmb3IgUFBNIGFuZCBQR00gZmlsZXMuCisgKi8KK3sKKyAgcHBtX3NvdXJjZV9wdHIgc291cmNlID0gKHBwbV9zb3VyY2VfcHRyKXNpbmZvOworCisgIGlmICghUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIHNvdXJjZS0+aW9idWZmZXIsIHNvdXJjZS0+YnVmZmVyX3dpZHRoKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIHJldHVybiAxOworfQorCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X3dvcmRfZ3JheV9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgcmF3LXdvcmQtZm9ybWF0IFBHTSBmaWxlcyB3aXRoIGFueSBtYXh2YWwgKi8KK3sKKyAgcHBtX3NvdXJjZV9wdHIgc291cmNlID0gKHBwbV9zb3VyY2VfcHRyKXNpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIFVfQ0hBUiAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKyAgdW5zaWduZWQgaW50IG1heHZhbCA9IHNvdXJjZS0+bWF4dmFsOworCisgIGlmICghUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIHNvdXJjZS0+aW9idWZmZXIsIHNvdXJjZS0+YnVmZmVyX3dpZHRoKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgYnVmZmVycHRyID0gc291cmNlLT5pb2J1ZmZlcjsKKyAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHRlbXA7CisgICAgdGVtcCAgPSBVQ0goKmJ1ZmZlcnB0cisrKSA8PCA4OworICAgIHRlbXAgfD0gVUNIKCpidWZmZXJwdHIrKyk7CisgICAgaWYgKHRlbXAgPiBtYXh2YWwpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1BQTV9UT09MQVJHRSk7CisgICAgKnB0cisrID0gcmVzY2FsZVt0ZW1wXTsKKyAgfQorICByZXR1cm4gMTsKK30KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF93b3JkX3JnYl9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHJlYWRpbmcgcmF3LXdvcmQtZm9ybWF0IFBQTSBmaWxlcyB3aXRoIGFueSBtYXh2YWwgKi8KK3sKKyAgcHBtX3NvdXJjZV9wdHIgc291cmNlID0gKHBwbV9zb3VyY2VfcHRyKXNpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIFVfQ0hBUiAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUExFICpyZXNjYWxlID0gc291cmNlLT5yZXNjYWxlOworICBKRElNRU5TSU9OIGNvbDsKKyAgdW5zaWduZWQgaW50IG1heHZhbCA9IHNvdXJjZS0+bWF4dmFsOworCisgIGlmICghUmVhZE9LKHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIHNvdXJjZS0+aW9idWZmZXIsIHNvdXJjZS0+YnVmZmVyX3dpZHRoKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgYnVmZmVycHRyID0gc291cmNlLT5pb2J1ZmZlcjsKKyAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHRlbXA7CisgICAgdGVtcCAgPSBVQ0goKmJ1ZmZlcnB0cisrKSA8PCA4OworICAgIHRlbXAgfD0gVUNIKCpidWZmZXJwdHIrKyk7CisgICAgaWYgKHRlbXAgPiBtYXh2YWwpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1BQTV9UT09MQVJHRSk7CisgICAgKnB0cisrID0gcmVzY2FsZVt0ZW1wXTsKKyAgICB0ZW1wICA9IFVDSCgqYnVmZmVycHRyKyspIDw8IDg7CisgICAgdGVtcCB8PSBVQ0goKmJ1ZmZlcnB0cisrKTsKKyAgICBpZiAodGVtcCA+IG1heHZhbCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX1RPT0xBUkdFKTsKKyAgICAqcHRyKysgPSByZXNjYWxlW3RlbXBdOworICAgIHRlbXAgID0gVUNIKCpidWZmZXJwdHIrKykgPDwgODsKKyAgICB0ZW1wIHw9IFVDSCgqYnVmZmVycHRyKyspOworICAgIGlmICh0ZW1wID4gbWF4dmFsKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9QUE1fVE9PTEFSR0UpOworICAgICpwdHIrKyA9IHJlc2NhbGVbdGVtcF07CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIFJlYWQgdGhlIGZpbGUgaGVhZGVyOyByZXR1cm4gaW1hZ2Ugc2l6ZSBhbmQgY29tcG9uZW50IGNvdW50LgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfaW5wdXRfcHBtKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICBwcG1fc291cmNlX3B0ciBzb3VyY2UgPSAocHBtX3NvdXJjZV9wdHIpc2luZm87CisgIGludCBjOworICB1bnNpZ25lZCBpbnQgdywgaCwgbWF4dmFsOworICBib29sZWFuIG5lZWRfaW9idWZmZXIsIHVzZV9yYXdfYnVmZmVyLCBuZWVkX3Jlc2NhbGU7CisKKyAgaWYgKGdldGMoc291cmNlLT5wdWIuaW5wdXRfZmlsZSkgIT0gJ1AnKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX05PVCk7CisKKyAgYyA9IGdldGMoc291cmNlLT5wdWIuaW5wdXRfZmlsZSk7IC8qIHN1YmZvcm1hdCBkaXNjcmltaW5hdG9yIGNoYXJhY3RlciAqLworCisgIC8qIGRldGVjdCB1bnN1cHBvcnRlZCB2YXJpYW50cyAoaWUsIFBCTSkgYmVmb3JlIHRyeWluZyB0byByZWFkIGhlYWRlciAqLworICBzd2l0Y2ggKGMpIHsKKyAgY2FzZSAnMic6ICAgICAgICAgICAgICAgICAgICAgLyogaXQncyBhIHRleHQtZm9ybWF0IFBHTSBmaWxlICovCisgIGNhc2UgJzMnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQUE0gZmlsZSAqLworICBjYXNlICc1JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQR00gZmlsZSAqLworICBjYXNlICc2JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQUE0gZmlsZSAqLworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX05PVCk7CisgICAgYnJlYWs7CisgIH0KKworICAvKiBmZXRjaCB0aGUgcmVtYWluaW5nIGhlYWRlciBpbmZvICovCisgIHcgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCA2NTUzNSk7CisgIGggPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCA2NTUzNSk7CisgIG1heHZhbCA9IHJlYWRfcGJtX2ludGVnZXIoY2luZm8sIHNvdXJjZS0+cHViLmlucHV0X2ZpbGUsIDY1NTM1KTsKKworICBpZiAodyA8PSAwIHx8IGggPD0gMCB8fCBtYXh2YWwgPD0gMCkgLyogZXJyb3IgY2hlY2sgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1BQTV9OT1QpOworCisgIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiA9IEJJVFNfSU5fSlNBTVBMRTsgLyogd2UgYWx3YXlzIHJlc2NhbGUgZGF0YSB0byB0aGlzICovCisgIGNpbmZvLT5pbWFnZV93aWR0aCA9IChKRElNRU5TSU9OKXc7CisgIGNpbmZvLT5pbWFnZV9oZWlnaHQgPSAoSkRJTUVOU0lPTiloOworICBzb3VyY2UtPm1heHZhbCA9IG1heHZhbDsKKworICAvKiBpbml0aWFsaXplIGZsYWdzIHRvIG1vc3QgY29tbW9uIHNldHRpbmdzICovCisgIG5lZWRfaW9idWZmZXIgPSBUUlVFOyAgICAgICAgIC8qIGRvIHdlIG5lZWQgYW4gSS9PIGJ1ZmZlcj8gKi8KKyAgdXNlX3Jhd19idWZmZXIgPSBGQUxTRTsgICAgICAgLyogZG8gd2UgbWFwIGlucHV0IGJ1ZmZlciBvbnRvIEkvTyBidWZmZXI/ICovCisgIG5lZWRfcmVzY2FsZSA9IFRSVUU7ICAgICAgICAgIC8qIGRvIHdlIG5lZWQgYSByZXNjYWxlIGFycmF5PyAqLworCisgIHN3aXRjaCAoYykgeworICBjYXNlICcyJzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGV4dC1mb3JtYXQgUEdNIGZpbGUgKi8KKyAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19VTktOT1dOKQorICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19QR01fVEVYVCwgdywgaCk7CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQorICAgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBnZXRfdGV4dF9ncmF5X3JvdzsKKyAgICBlbHNlIGlmIChJc0V4dFJHQihjaW5mby0+aW5fY29sb3Jfc3BhY2UpKQorICAgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBnZXRfdGV4dF9ncmF5X3JnYl9yb3c7CisgICAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKQorICAgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBnZXRfdGV4dF9ncmF5X2NteWtfcm93OworICAgIGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIG5lZWRfaW9idWZmZXIgPSBGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlICczJzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGV4dC1mb3JtYXQgUFBNIGZpbGUgKi8KKyAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19VTktOT1dOKQorICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX0VYVF9SR0I7CisgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfUFBNX1RFWFQsIHcsIGgpOworICAgIGlmIChJc0V4dFJHQihjaW5mby0+aW5fY29sb3Jfc3BhY2UpKQorICAgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBnZXRfdGV4dF9yZ2Jfcm93OworICAgIGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykKKyAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3RleHRfcmdiX2NteWtfcm93OworICAgIGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIG5lZWRfaW9idWZmZXIgPSBGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlICc1JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQR00gZmlsZSAqLworICAgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1VOS05PV04pCisgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPSBKQ1NfR1JBWVNDQUxFOworICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX1BHTSwgdywgaCk7CisgICAgaWYgKG1heHZhbCA+IDI1NSkgeworICAgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBnZXRfd29yZF9ncmF5X3JvdzsKKyAgICB9IGVsc2UgaWYgKG1heHZhbCA9PSBNQVhKU0FNUExFICYmIHNpemVvZihKU0FNUExFKSA9PSBzaXplb2YoVV9DSEFSKSAmJgorICAgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpIHsKKyAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3Jhd19yb3c7CisgICAgICB1c2VfcmF3X2J1ZmZlciA9IFRSVUU7CisgICAgICBuZWVkX3Jlc2NhbGUgPSBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQorICAgICAgICBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyA9IGdldF9zY2FsZWRfZ3JheV9yb3c7CisgICAgICBlbHNlIGlmIChJc0V4dFJHQihjaW5mby0+aW5fY29sb3Jfc3BhY2UpKQorICAgICAgICBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyA9IGdldF9ncmF5X3JnYl9yb3c7CisgICAgICBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspCisgICAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X2dyYXlfY215a19yb3c7CisgICAgICBlbHNlCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlICc2JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQUE0gZmlsZSAqLworICAgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1VOS05PV04pCisgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPSBKQ1NfRVhUX1JHQjsKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19QUE0sIHcsIGgpOworICAgIGlmIChtYXh2YWwgPiAyNTUpIHsKKyAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3dvcmRfcmdiX3JvdzsKKyAgICB9IGVsc2UgaWYgKG1heHZhbCA9PSBNQVhKU0FNUExFICYmIHNpemVvZihKU0FNUExFKSA9PSBzaXplb2YoVV9DSEFSKSAmJgorICAgICAgICAgICAgICAgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1JHQgorI2lmIFJHQl9SRUQgPT0gMCAmJiBSR0JfR1JFRU4gPT0gMSAmJiBSR0JfQkxVRSA9PSAyICYmIFJHQl9QSVhFTFNJWkUgPT0gMworICAgICAgICAgICAgICAgIHx8IGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCCisjZW5kaWYKKyAgICAgICAgICAgICAgICkpIHsKKyAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3Jhd19yb3c7CisgICAgICB1c2VfcmF3X2J1ZmZlciA9IFRSVUU7CisgICAgICBuZWVkX3Jlc2NhbGUgPSBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKElzRXh0UkdCKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkpCisgICAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3JnYl9yb3c7CisgICAgICBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspCisgICAgICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3JnYl9jbXlrX3JvdzsKKyAgICAgIGVsc2UKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CisgICAgfQorICAgIGJyZWFrOworICB9CisKKyAgaWYgKElzRXh0UkdCKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkpCisgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV07CisgIGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQorICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMTsKKyAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKQorICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gNDsKKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgSS9PIGJ1ZmZlcjogMSBvciAzIGJ5dGVzIG9yIHdvcmRzL3BpeGVsLiAqLworICBpZiAobmVlZF9pb2J1ZmZlcikgeworICAgIGlmIChjID09ICc2JykKKyAgICAgIHNvdXJjZS0+YnVmZmVyX3dpZHRoID0gKHNpemVfdCl3ICogMyAqCisgICAgICAgICgobWF4dmFsIDw9IDI1NSkgPyBzaXplb2YoVV9DSEFSKSA6ICgyICogc2l6ZW9mKFVfQ0hBUikpKTsKKyAgICBlbHNlCisgICAgICBzb3VyY2UtPmJ1ZmZlcl93aWR0aCA9IChzaXplX3QpdyAqCisgICAgICAgICgobWF4dmFsIDw9IDI1NSkgPyBzaXplb2YoVV9DSEFSKSA6ICgyICogc2l6ZW9mKFVfQ0hBUikpKTsKKyAgICBzb3VyY2UtPmlvYnVmZmVyID0gKFVfQ0hBUiAqKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+YnVmZmVyX3dpZHRoKTsKKyAgfQorCisgIC8qIENyZWF0ZSBjb21wcmVzc29yIGlucHV0IGJ1ZmZlci4gKi8KKyAgaWYgKHVzZV9yYXdfYnVmZmVyKSB7CisgICAgLyogRm9yIHVuc2NhbGVkIHJhdy1pbnB1dCBjYXNlLCB3ZSBjYW4ganVzdCBtYXAgaXQgb250byB0aGUgSS9PIGJ1ZmZlci4gKi8KKyAgICAvKiBTeW50aGVzaXplIGEgSlNBTVBBUlJBWSBwb2ludGVyIHN0cnVjdHVyZSAqLworICAgIHNvdXJjZS0+cGl4cm93ID0gKEpTQU1QUk9XKXNvdXJjZS0+aW9idWZmZXI7CisgICAgc291cmNlLT5wdWIuYnVmZmVyID0gJnNvdXJjZS0+cGl4cm93OworICAgIHNvdXJjZS0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOworICB9IGVsc2UgeworICAgIC8qIE5lZWQgdG8gdHJhbnNsYXRlIGFueXdheSwgc28gbWFrZSBhIHNlcGFyYXRlIHNhbXBsZSBidWZmZXIuICovCisgICAgc291cmNlLT5wdWIuYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgKEpESU1FTlNJT04pdyAqIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzLCAoSkRJTUVOU0lPTikxKTsKKyAgICBzb3VyY2UtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKKyAgfQorCisgIC8qIENvbXB1dGUgdGhlIHJlc2NhbGluZyBhcnJheSBpZiByZXF1aXJlZC4gKi8KKyAgaWYgKG5lZWRfcmVzY2FsZSkgeworICAgIGxvbmcgdmFsLCBoYWxmX21heHZhbDsKKworICAgIC8qIE9uIDE2LWJpdC1pbnQgbWFjaGluZXMgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIG1heHZhbCA9IDY1NTM1ICovCisgICAgc291cmNlLT5yZXNjYWxlID0gKEpTQU1QTEUgKikKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSgoKGxvbmcpbWF4dmFsICsgMUwpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSlNBTVBMRSkpKTsKKyAgICBoYWxmX21heHZhbCA9IG1heHZhbCAvIDI7CisgICAgZm9yICh2YWwgPSAwOyB2YWwgPD0gKGxvbmcpbWF4dmFsOyB2YWwrKykgeworICAgICAgLyogVGhlIG11bHRpcGxpY2F0aW9uIGhlcmUgbXVzdCBiZSBkb25lIGluIDMyIGJpdHMgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyAgICAgIHNvdXJjZS0+cmVzY2FsZVt2YWxdID0gKEpTQU1QTEUpKCh2YWwgKiBNQVhKU0FNUExFICsgaGFsZl9tYXh2YWwpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXh2YWwpOworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBGaW5pc2ggdXAgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9pbnB1dF9wcG0oal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIC8qIG5vIHdvcmsgKi8KK30KKworCisvKgorICogVGhlIG1vZHVsZSBzZWxlY3Rpb24gcm91dGluZSBmb3IgUFBNIGZvcm1hdCBpbnB1dC4KKyAqLworCitHTE9CQUwoY2pwZWdfc291cmNlX3B0cikKK2ppbml0X3JlYWRfcHBtKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwcG1fc291cmNlX3B0ciBzb3VyY2U7CisKKyAgLyogQ3JlYXRlIG1vZHVsZSBpbnRlcmZhY2Ugb2JqZWN0ICovCisgIHNvdXJjZSA9IChwcG1fc291cmNlX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwcG1fc291cmNlX3N0cnVjdCkpOworICAvKiBGaWxsIGluIG1ldGhvZCBwdHJzLCBleGNlcHQgZ2V0X3BpeGVsX3Jvd3Mgd2hpY2ggc3RhcnRfaW5wdXQgc2V0cyAqLworICBzb3VyY2UtPnB1Yi5zdGFydF9pbnB1dCA9IHN0YXJ0X2lucHV0X3BwbTsKKyAgc291cmNlLT5wdWIuZmluaXNoX2lucHV0ID0gZmluaXNoX2lucHV0X3BwbTsKKworICByZXR1cm4gKGNqcGVnX3NvdXJjZV9wdHIpc291cmNlOworfQorCisjZW5kaWYgLyogUFBNX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRybGUuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JkcmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5NDUxNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JkcmxlLmMKQEAgLTAsMCArMSwzODkgQEAKKy8qCisgKiByZHJsZS5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBJdCB3YXMgbW9kaWZpZWQgYnkgVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCB0byBpbmNsdWRlIG9ubHkgY29kZSBhbmQKKyAqIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gcmVhZCBpbnB1dCBpbWFnZXMgaW4gVXRhaCBSTEUgZm9ybWF0LgorICogVGhlIFV0YWggUmFzdGVyIFRvb2xraXQgbGlicmFyeSBpcyByZXF1aXJlZCAodmVyc2lvbiAzLjEgb3IgbGF0ZXIpLgorICoKKyAqIFRoZXNlIHJvdXRpbmVzIG1heSBuZWVkIG1vZGlmaWNhdGlvbiBmb3Igbm9uLVVuaXggZW52aXJvbm1lbnRzIG9yCisgKiBzcGVjaWFsaXplZCBhcHBsaWNhdGlvbnMuICBBcyB0aGV5IHN0YW5kLCB0aGV5IGFzc3VtZSBpbnB1dCBmcm9tCisgKiBhbiBvcmRpbmFyeSBzdGRpbyBzdHJlYW0uICBUaGV5IGZ1cnRoZXIgYXNzdW1lIHRoYXQgcmVhZGluZyBiZWdpbnMKKyAqIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZTsgc3RhcnRfaW5wdXQgbWF5IG5lZWQgd29yayBpZiB0aGUKKyAqIHVzZXIgaW50ZXJmYWNlIGhhcyBhbHJlYWR5IHJlYWQgc29tZSBkYXRhIChlLmcuLCB0byBkZXRlcm1pbmUgdGhhdAorICogdGhlIGZpbGUgaXMgaW5kZWVkIFJMRSBmb3JtYXQpLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgY29udHJpYnV0ZWQgYnkgTWlrZSBMaWpld3NraSwKKyAqIHdpdGggdXBkYXRlcyBmcm9tIFJvYmVydCBIdXRjaGluc29uLgorICovCisKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKworI2lmZGVmIFJMRV9TVVBQT1JURUQKKworLyogcmxlLmggaXMgcHJvdmlkZWQgYnkgdGhlIFV0YWggUmFzdGVyIFRvb2xraXQuICovCisKKyNpbmNsdWRlIDxybGUuaD4KKworLyoKKyAqIFdlIGFzc3VtZSB0aGF0IEpTQU1QTEUgaGFzIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGFzIHJsZV9waXhlbCwKKyAqIHRvIHdpdCwgInVuc2lnbmVkIGNoYXIiLiAgSGVuY2Ugd2UgY2FuJ3QgY29wZSB3aXRoIDEyLSBvciAxNi1iaXQgc2FtcGxlcy4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFICE9IDgKKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOC1iaXQgSlNBTVBMRXMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworI2VuZGlmCisKKy8qCisgKiBXZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgUkxFIGZpbGVzOgorICoKKyAqICAgR1JBWVNDQUxFICAgLSA4IGJpdHMsIG5vIGNvbG9ybWFwCisgKiAgIE1BUFBFREdSQVkgIC0gOCBiaXRzLCAxIGNoYW5uZWwgY29sb21hcAorICogICBQU0VVRE9DT0xPUiAtIDggYml0cywgMyBjaGFubmVsIGNvbG9ybWFwCisgKiAgIFRSVUVDT0xPUiAgIC0gMjQgYml0cywgMyBjaGFubmVsIGNvbG9ybWFwCisgKiAgIERJUkVDVENPTE9SIC0gMjQgYml0cywgbm8gY29sb3JtYXAKKyAqCisgKiBGb3Igbm93LCB3ZSBpZ25vcmUgYW55IGFscGhhIGNoYW5uZWwgaW4gdGhlIGltYWdlLgorICovCisKK3R5cGVkZWYgZW51bQorICB7IEdSQVlTQ0FMRSwgTUFQUEVER1JBWSwgUFNFVURPQ09MT1IsIFRSVUVDT0xPUiwgRElSRUNUQ09MT1IgfSBybGVfa2luZDsKKworCisvKgorICogU2luY2UgUkxFIHN0b3JlcyBzY2FubGluZXMgYm90dG9tLXRvLXRvcCwgd2UgaGF2ZSB0byBpbnZlcnQgdGhlIGltYWdlCisgKiB0byBjb25mb3JtIHRvIEpQRUcncyB0b3AtdG8tYm90dG9tIG9yZGVyLiAgVG8gZG8gdGhpcywgd2UgcmVhZCB0aGUKKyAqIGluY29taW5nIGltYWdlIGludG8gYSB2aXJ0dWFsIGFycmF5IG9uIHRoZSBmaXJzdCBnZXRfcGl4ZWxfcm93cyBjYWxsLAorICogdGhlbiBmZXRjaCB0aGUgcmVxdWlyZWQgcm93IGZyb20gdGhlIHZpcnR1YWwgYXJyYXkgb24gc3Vic2VxdWVudCBjYWxscy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBfcmxlX3NvdXJjZV9zdHJ1Y3QgKnJsZV9zb3VyY2VfcHRyOworCit0eXBlZGVmIHN0cnVjdCBfcmxlX3NvdXJjZV9zdHJ1Y3QgeworICBzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBybGVfa2luZCB2aXN1YWw7ICAgICAgICAgICAgICAvKiBhY3R1YWwgdHlwZSBvZiBpbnB1dCBmaWxlICovCisgIGp2aXJ0X3NhcnJheV9wdHIgaW1hZ2U7ICAgICAgIC8qIHZpcnR1YWwgYXJyYXkgdG8gaG9sZCB0aGUgaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiByb3c7ICAgICAgICAgICAgICAgLyogY3VycmVudCByb3cgIyBpbiB0aGUgdmlydHVhbCBhcnJheSAqLworICBybGVfaGRyIGhlYWRlcjsgICAgICAgICAgICAgICAvKiBJbnB1dCBmaWxlIGluZm9ybWF0aW9uICovCisgIHJsZV9waXhlbCAqKnJsZV9yb3c7ICAgICAgICAgIC8qIGhvbGRzIGEgcm93IHJldHVybmVkIGJ5IHJsZV9nZXRyb3coKSAqLworCit9IHJsZV9zb3VyY2Vfc3RydWN0OworCisKKy8qCisgKiBSZWFkIHRoZSBmaWxlIGhlYWRlcjsgcmV0dXJuIGltYWdlIHNpemUgYW5kIGNvbXBvbmVudCBjb3VudC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X2lucHV0X3JsZShqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKK3sKKyAgcmxlX3NvdXJjZV9wdHIgc291cmNlID0gKHJsZV9zb3VyY2VfcHRyKXNpbmZvOworICBKRElNRU5TSU9OIHdpZHRoLCBoZWlnaHQ7CisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGNkX3Byb2dyZXNzX3B0ciBwcm9ncmVzcyA9IChjZF9wcm9ncmVzc19wdHIpY2luZm8tPnByb2dyZXNzOworI2VuZGlmCisKKyAgLyogVXNlIFJMRSBsaWJyYXJ5IHJvdXRpbmUgdG8gZ2V0IHRoZSBoZWFkZXIgaW5mbyAqLworICBzb3VyY2UtPmhlYWRlciA9ICpybGVfaGRyX2luaXQoTlVMTCk7CisgIHNvdXJjZS0+aGVhZGVyLnJsZV9maWxlID0gc291cmNlLT5wdWIuaW5wdXRfZmlsZTsKKyAgc3dpdGNoIChybGVfZ2V0X3NldHVwKCYoc291cmNlLT5oZWFkZXIpKSkgeworICBjYXNlIFJMRV9TVUNDRVNTOgorICAgIC8qIEEtT0sgKi8KKyAgICBicmVhazsKKyAgY2FzZSBSTEVfTk9UX1JMRToKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1JMRV9OT1QpOworICAgIGJyZWFrOworICBjYXNlIFJMRV9OT19TUEFDRToKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1JMRV9NRU0pOworICAgIGJyZWFrOworICBjYXNlIFJMRV9FTVBUWToKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1JMRV9FTVBUWSk7CisgICAgYnJlYWs7CisgIGNhc2UgUkxFX0VPRjoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1JMRV9FT0YpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUkxFX0JBREVSUk9SKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIEZpZ3VyZSBvdXQgd2hhdCB3ZSBoYXZlLCBzZXQgcHJpdmF0ZSB2YXJzIGFuZCByZXR1cm4gdmFsdWVzIGFjY29yZGluZ2x5ICovCisKKyAgd2lkdGggID0gc291cmNlLT5oZWFkZXIueG1heCAtIHNvdXJjZS0+aGVhZGVyLnhtaW4gKyAxOworICBoZWlnaHQgPSBzb3VyY2UtPmhlYWRlci55bWF4IC0gc291cmNlLT5oZWFkZXIueW1pbiArIDE7CisgIHNvdXJjZS0+aGVhZGVyLnhtaW4gPSAwOyAgICAgICAgICAgICAgLyogcmVhbGlnbiBob3Jpem9udGFsbHkgKi8KKyAgc291cmNlLT5oZWFkZXIueG1heCA9IHdpZHRoIC0gMTsKKworICBjaW5mby0+aW1hZ2Vfd2lkdGggICAgICA9IHdpZHRoOworICBjaW5mby0+aW1hZ2VfaGVpZ2h0ICAgICA9IGhlaWdodDsKKyAgY2luZm8tPmRhdGFfcHJlY2lzaW9uICAgPSA4OyAgLyogd2UgY2FuIG9ubHkgaGFuZGxlIDggYml0IGRhdGEgKi8KKworICBpZiAoc291cmNlLT5oZWFkZXIubmNvbG9ycyA9PSAxICYmIHNvdXJjZS0+aGVhZGVyLm5jbWFwID09IDApIHsKKyAgICBzb3VyY2UtPnZpc3VhbCAgICAgPSBHUkFZU0NBTEU7CisgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfUkxFX0dSQVksIHdpZHRoLCBoZWlnaHQpOworICB9IGVsc2UgaWYgKHNvdXJjZS0+aGVhZGVyLm5jb2xvcnMgPT0gMSAmJiBzb3VyY2UtPmhlYWRlci5uY21hcCA9PSAxKSB7CisgICAgc291cmNlLT52aXN1YWwgICAgID0gTUFQUEVER1JBWTsKKyAgICBUUkFDRU1TMyhjaW5mbywgMSwgSlRSQ19STEVfTUFQR1JBWSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAxIDw8IHNvdXJjZS0+aGVhZGVyLmNtYXBsZW4pOworICB9IGVsc2UgaWYgKHNvdXJjZS0+aGVhZGVyLm5jb2xvcnMgPT0gMSAmJiBzb3VyY2UtPmhlYWRlci5uY21hcCA9PSAzKSB7CisgICAgc291cmNlLT52aXN1YWwgICAgID0gUFNFVURPQ09MT1I7CisgICAgVFJBQ0VNUzMoY2luZm8sIDEsIEpUUkNfUkxFX01BUFBFRCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAxIDw8IHNvdXJjZS0+aGVhZGVyLmNtYXBsZW4pOworICB9IGVsc2UgaWYgKHNvdXJjZS0+aGVhZGVyLm5jb2xvcnMgPT0gMyAmJiBzb3VyY2UtPmhlYWRlci5uY21hcCA9PSAzKSB7CisgICAgc291cmNlLT52aXN1YWwgICAgID0gVFJVRUNPTE9SOworICAgIFRSQUNFTVMzKGNpbmZvLCAxLCBKVFJDX1JMRV9GVUxMTUFQLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgIDEgPDwgc291cmNlLT5oZWFkZXIuY21hcGxlbik7CisgIH0gZWxzZSBpZiAoc291cmNlLT5oZWFkZXIubmNvbG9ycyA9PSAzICYmIHNvdXJjZS0+aGVhZGVyLm5jbWFwID09IDApIHsKKyAgICBzb3VyY2UtPnZpc3VhbCAgICAgPSBESVJFQ1RDT0xPUjsKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19STEUsIHdpZHRoLCBoZWlnaHQpOworICB9IGVsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1JMRV9VTlNVUFBPUlRFRCk7CisKKyAgaWYgKHNvdXJjZS0+dmlzdWFsID09IEdSQVlTQ0FMRSB8fCBzb3VyY2UtPnZpc3VhbCA9PSBNQVBQRURHUkFZKSB7CisgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlICAgPSBKQ1NfR1JBWVNDQUxFOworICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMTsKKyAgfSBlbHNlIHsKKyAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgICA9IEpDU19SR0I7CisgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSAzOworICB9CisKKyAgLyoKKyAgICogQSBwbGFjZSB0byBob2xkIGVhY2ggc2NhbmxpbmUgd2hpbGUgaXQncyBjb252ZXJ0ZWQuCisgICAqIChHUkFZU0NBTEUgc2NhbmxpbmVzIGRvbid0IG5lZWQgY29udmVydGluZykKKyAgICovCisgIGlmIChzb3VyY2UtPnZpc3VhbCAhPSBHUkFZU0NBTEUpIHsKKyAgICBzb3VyY2UtPnJsZV9yb3cgPSAocmxlX3BpeGVsICoqKSgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgIChKRElNRU5TSU9OKXdpZHRoLCAoSkRJTUVOU0lPTiljaW5mby0+aW5wdXRfY29tcG9uZW50cyk7CisgIH0KKworICAvKiByZXF1ZXN0IGEgdmlydHVhbCBhcnJheSB0byBob2xkIHRoZSBpbWFnZSAqLworICBzb3VyY2UtPmltYWdlID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwgRkFMU0UsCisgICAgIChKRElNRU5TSU9OKSh3aWR0aCAqIHNvdXJjZS0+aGVhZGVyLm5jb2xvcnMpLAorICAgICAoSkRJTUVOU0lPTiloZWlnaHQsIChKRElNRU5TSU9OKTEpOworCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGlmIChwcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgLyogY291bnQgZmlsZSBpbnB1dCBhcyBzZXBhcmF0ZSBwYXNzICovCisgICAgcHJvZ3Jlc3MtPnRvdGFsX2V4dHJhX3Bhc3NlcysrOworICB9CisjZW5kaWYKKworICBzb3VyY2UtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKK30KKworCisvKgorICogUmVhZCBvbmUgcm93IG9mIHBpeGVscy4KKyAqIENhbGxlZCBvbmx5IGFmdGVyIGxvYWRfaW1hZ2UgaGFzIHJlYWQgdGhlIGltYWdlIGludG8gdGhlIHZpcnR1YWwgYXJyYXkuCisgKiBVc2VkIGZvciBHUkFZU0NBTEUsIE1BUFBFREdSQVksIFRSVUVDT0xPUiwgYW5kIERJUkVDVENPTE9SIGltYWdlcy4KKyAqLworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF9ybGVfcm93KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICBybGVfc291cmNlX3B0ciBzb3VyY2UgPSAocmxlX3NvdXJjZV9wdHIpc2luZm87CisKKyAgc291cmNlLT5yb3ctLTsKKyAgc291cmNlLT5wdWIuYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIHNvdXJjZS0+aW1hZ2UsIHNvdXJjZS0+cm93LCAoSkRJTUVOU0lPTikxLCBGQUxTRSk7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZWFkIG9uZSByb3cgb2YgcGl4ZWxzLgorICogQ2FsbGVkIG9ubHkgYWZ0ZXIgbG9hZF9pbWFnZSBoYXMgcmVhZCB0aGUgaW1hZ2UgaW50byB0aGUgdmlydHVhbCBhcnJheS4KKyAqIFVzZWQgZm9yIFBTRVVET0NPTE9SIGltYWdlcy4KKyAqLworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF9wc2V1ZG9jb2xvcl9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIHJsZV9zb3VyY2VfcHRyIHNvdXJjZSA9IChybGVfc291cmNlX3B0cilzaW5mbzsKKyAgSlNBTVBST1cgc3JjX3JvdywgZGVzdF9yb3c7CisgIEpESU1FTlNJT04gY29sOworICBybGVfbWFwICpjb2xvcm1hcDsKKyAgaW50IHZhbDsKKworICBjb2xvcm1hcCA9IHNvdXJjZS0+aGVhZGVyLmNtYXA7CisgIGRlc3Rfcm93ID0gc291cmNlLT5wdWIuYnVmZmVyWzBdOworICBzb3VyY2UtPnJvdy0tOworICBzcmNfcm93ID0gKigqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBzb3VyY2UtPmltYWdlLCBzb3VyY2UtPnJvdywgKEpESU1FTlNJT04pMSwgRkFMU0UpOworCisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIHZhbCA9IEdFVEpTQU1QTEUoKnNyY19yb3crKyk7CisgICAgKmRlc3Rfcm93KysgPSAoSlNBTVBMRSkoY29sb3JtYXBbdmFsICAgICAgXSA+PiA4KTsKKyAgICAqZGVzdF9yb3crKyA9IChKU0FNUExFKShjb2xvcm1hcFt2YWwgKyAyNTZdID4+IDgpOworICAgICpkZXN0X3JvdysrID0gKEpTQU1QTEUpKGNvbG9ybWFwW3ZhbCArIDUxMl0gPj4gOCk7CisgIH0KKworICByZXR1cm4gMTsKK30KKworCisvKgorICogTG9hZCB0aGUgaW1hZ2UgaW50byBhIHZpcnR1YWwgYXJyYXkuICBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSBSTEUKKyAqIGZpbGVzIHN0YXJ0IGF0IHRoZSBsb3dlciBsZWZ0IHdoaWxlIHRoZSBKUEVHIHN0YW5kYXJkIGhhcyB0aGVtIHN0YXJ0aW5nCisgKiBpbiB0aGUgdXBwZXIgbGVmdC4gIFRoaXMgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIHdlIHdhbnQgdG8gZ2V0IGEgcm93CisgKiBvZiBpbnB1dC4gIFdoYXQgd2UgZG8gaXMgbG9hZCB0aGUgUkxFIGRhdGEgaW50byB0aGUgYXJyYXkgYW5kIHRoZW4gY2FsbAorICogdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmUgdG8gcmVhZCBvbmUgcm93IGZyb20gdGhlIGFycmF5LiAgQmVmb3JlIHJldHVybmluZywKKyAqIHdlIHNldCBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyBzbyB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgZ28gc3RyYWlnaHQgdG8KKyAqIHRoZSBhcHByb3ByaWF0ZSByb3ctcmVhZGluZyByb3V0aW5lLgorICovCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorbG9hZF9pbWFnZShqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKK3sKKyAgcmxlX3NvdXJjZV9wdHIgc291cmNlID0gKHJsZV9zb3VyY2VfcHRyKXNpbmZvOworICBKRElNRU5TSU9OIHJvdywgY29sOworICBKU0FNUFJPVyBzY2FubGluZSwgcmVkX3B0ciwgZ3JlZW5fcHRyLCBibHVlX3B0cjsKKyAgcmxlX3BpeGVsICoqcmxlX3JvdzsKKyAgcmxlX21hcCAqY29sb3JtYXA7CisgIGNoYXIgY2hhbm5lbDsKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzID0gKGNkX3Byb2dyZXNzX3B0ciljaW5mby0+cHJvZ3Jlc3M7CisjZW5kaWYKKworICBjb2xvcm1hcCA9IHNvdXJjZS0+aGVhZGVyLmNtYXA7CisgIHJsZV9yb3cgPSBzb3VyY2UtPnJsZV9yb3c7CisKKyAgLyogUmVhZCB0aGUgUkxFIGRhdGEgaW50byBvdXIgdmlydHVhbCBhcnJheS4KKyAgICogV2UgYXNzdW1lIGhlcmUgdGhhdCBybGVfcGl4ZWwgaXMgcmVwcmVzZW50ZWQgdGhlIHNhbWUgYXMgSlNBTVBMRS4KKyAgICovCisgIFJMRV9DTFJfQklUKHNvdXJjZS0+aGVhZGVyLCBSTEVfQUxQSEEpOyAvKiBkb24ndCByZWFkIHRoZSBhbHBoYSBjaGFubmVsICovCisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgaWYgKHByb2dyZXNzICE9IE5VTEwpIHsKKyAgICBwcm9ncmVzcy0+cHViLnBhc3NfbGltaXQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAgIHByb2dyZXNzLT5wdWIucGFzc19jb3VudGVyID0gMDsKKyAgICAoKnByb2dyZXNzLT5wdWIucHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICB9CisjZW5kaWYKKworICBzd2l0Y2ggKHNvdXJjZS0+dmlzdWFsKSB7CisKKyAgY2FzZSBHUkFZU0NBTEU6CisgIGNhc2UgUFNFVURPQ09MT1I6CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBjaW5mby0+aW1hZ2VfaGVpZ2h0OyByb3crKykgeworICAgICAgcmxlX3JvdyA9IChybGVfcGl4ZWwgKiopKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBzb3VyY2UtPmltYWdlLCByb3csIChKRElNRU5TSU9OKTEsIFRSVUUpOworICAgICAgcmxlX2dldHJvdygmc291cmNlLT5oZWFkZXIsIHJsZV9yb3cpOworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICAgICAgaWYgKHByb2dyZXNzICE9IE5VTEwpIHsKKyAgICAgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2NvdW50ZXIrKzsKKyAgICAgICAgKCpwcm9ncmVzcy0+cHViLnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIE1BUFBFREdSQVk6CisgIGNhc2UgVFJVRUNPTE9SOgorICAgIGZvciAocm93ID0gMDsgcm93IDwgY2luZm8tPmltYWdlX2hlaWdodDsgcm93KyspIHsKKyAgICAgIHNjYW5saW5lID0gKigqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgc291cmNlLT5pbWFnZSwgcm93LCAoSkRJTUVOU0lPTikxLCBUUlVFKTsKKyAgICAgIHJsZV9yb3cgPSBzb3VyY2UtPnJsZV9yb3c7CisgICAgICBybGVfZ2V0cm93KCZzb3VyY2UtPmhlYWRlciwgcmxlX3Jvdyk7CisKKyAgICAgIGZvciAoY29sID0gMDsgY29sIDwgY2luZm8tPmltYWdlX3dpZHRoOyBjb2wrKykgeworICAgICAgICBmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgc291cmNlLT5oZWFkZXIubmNvbG9yczsgY2hhbm5lbCsrKSB7CisgICAgICAgICAgKnNjYW5saW5lKysgPSAoSlNBTVBMRSkKKyAgICAgICAgICAgIChjb2xvcm1hcFtHRVRKU0FNUExFKHJsZV9yb3dbY2hhbm5lbF1bY29sXSkgKyAyNTYgKiBjaGFubmVsXSA+PiA4KTsKKyAgICAgICAgfQorICAgICAgfQorCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgICAgICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgICBwcm9ncmVzcy0+cHViLnBhc3NfY291bnRlcisrOworICAgICAgICAoKnByb2dyZXNzLT5wdWIucHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgRElSRUNUQ09MT1I6CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBjaW5mby0+aW1hZ2VfaGVpZ2h0OyByb3crKykgeworICAgICAgc2NhbmxpbmUgPSAqKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBzb3VyY2UtPmltYWdlLCByb3csIChKRElNRU5TSU9OKTEsIFRSVUUpOworICAgICAgcmxlX2dldHJvdygmc291cmNlLT5oZWFkZXIsIHJsZV9yb3cpOworCisgICAgICByZWRfcHRyICAgPSBybGVfcm93WzBdOworICAgICAgZ3JlZW5fcHRyID0gcmxlX3Jvd1sxXTsKKyAgICAgIGJsdWVfcHRyICA9IHJsZV9yb3dbMl07CisKKyAgICAgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICAqc2NhbmxpbmUrKyA9ICpyZWRfcHRyKys7CisgICAgICAgICpzY2FubGluZSsrID0gKmdyZWVuX3B0cisrOworICAgICAgICAqc2NhbmxpbmUrKyA9ICpibHVlX3B0cisrOworICAgICAgfQorCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgICAgICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgICBwcm9ncmVzcy0+cHViLnBhc3NfY291bnRlcisrOworICAgICAgICAoKnByb2dyZXNzLT5wdWIucHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAgfQorI2VuZGlmCisgICAgfQorICB9CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgaWYgKHByb2dyZXNzICE9IE5VTEwpCisgICAgcHJvZ3Jlc3MtPmNvbXBsZXRlZF9leHRyYV9wYXNzZXMrKzsKKyNlbmRpZgorCisgIC8qIFNldCB1cCB0byBjYWxsIHByb3BlciByb3ctZXh0cmFjdGlvbiByb3V0aW5lIGluIGZ1dHVyZSAqLworICBpZiAoc291cmNlLT52aXN1YWwgPT0gUFNFVURPQ09MT1IpIHsKKyAgICBzb3VyY2UtPnB1Yi5idWZmZXIgPSBzb3VyY2UtPnJsZV9yb3c7CisgICAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBnZXRfcHNldWRvY29sb3Jfcm93OworICB9IGVsc2UgeworICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gZ2V0X3JsZV9yb3c7CisgIH0KKyAgc291cmNlLT5yb3cgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworCisgIC8qIEFuZCBmZXRjaCB0aGUgdG9wbW9zdCAoYm90dG9tbW9zdCkgcm93ICovCisgIHJldHVybiAoKnNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzKSAoY2luZm8sIHNpbmZvKTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfaW5wdXRfcmxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICAvKiBubyB3b3JrICovCit9CisKKworLyoKKyAqIFRoZSBtb2R1bGUgc2VsZWN0aW9uIHJvdXRpbmUgZm9yIFJMRSBmb3JtYXQgaW5wdXQuCisgKi8KKworR0xPQkFMKGNqcGVnX3NvdXJjZV9wdHIpCitqaW5pdF9yZWFkX3JsZShqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcmxlX3NvdXJjZV9wdHIgc291cmNlOworCisgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCAqLworICBzb3VyY2UgPSAocmxlX3NvdXJjZV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocmxlX3NvdXJjZV9zdHJ1Y3QpKTsKKyAgLyogRmlsbCBpbiBtZXRob2QgcHRycyAqLworICBzb3VyY2UtPnB1Yi5zdGFydF9pbnB1dCA9IHN0YXJ0X2lucHV0X3JsZTsKKyAgc291cmNlLT5wdWIuZmluaXNoX2lucHV0ID0gZmluaXNoX2lucHV0X3JsZTsKKyAgc291cmNlLT5wdWIuZ2V0X3BpeGVsX3Jvd3MgPSBsb2FkX2ltYWdlOworCisgIHJldHVybiAoY2pwZWdfc291cmNlX3B0cilzb3VyY2U7Cit9CisKKyNlbmRpZiAvKiBSTEVfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZHN3aXRjaC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRzd2l0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTAzNDZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmRzd2l0Y2guYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIHJkc3dpdGNoLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRvIHByb2Nlc3Mgc29tZSBvZiBjanBlZydzIG1vcmUgY29tcGxpY2F0ZWQKKyAqIGNvbW1hbmQtbGluZSBzd2l0Y2hlcy4gIFN3aXRjaGVzIHByb2Nlc3NlZCBoZXJlIGFyZToKKyAqICAgICAgLXF0YWJsZXMgZmlsZSAgICAgICAgICAgUmVhZCBxdWFudGl6YXRpb24gdGFibGVzIGZyb20gdGV4dCBmaWxlCisgKiAgICAgIC1zY2FucyBmaWxlICAgICAgICAgICAgIFJlYWQgc2NhbiBzY3JpcHQgZnJvbSB0ZXh0IGZpbGUKKyAqICAgICAgLXF1YWxpdHkgTlssTiwuLi5dICAgICAgU2V0IHF1YWxpdHkgcmF0aW5ncworICogICAgICAtcXNsb3RzIE5bLE4sLi4uXSAgICAgICBTZXQgY29tcG9uZW50IHF1YW50aXphdGlvbiB0YWJsZSBzZWxlY3RvcnMKKyAqICAgICAgLXNhbXBsZSBIeFZbLEh4ViwuLi5dICAgU2V0IGNvbXBvbmVudCBzYW1wbGluZyBmYWN0b3JzCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgPGN0eXBlLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIGlzZGlnaXQoKSwgaXNzcGFjZSgpICovCisKKworTE9DQUwoaW50KQordGV4dF9nZXRjKEZJTEUgKmZpbGUpCisvKiBSZWFkIG5leHQgY2hhciwgc2tpcHBpbmcgb3ZlciBhbnkgY29tbWVudHMgKCMgdG8gZW5kIG9mIGxpbmUpICovCisvKiBBIGNvbW1lbnQvbmV3bGluZSBzZXF1ZW5jZSBpcyByZXR1cm5lZCBhcyBhIG5ld2xpbmUgKi8KK3sKKyAgcmVnaXN0ZXIgaW50IGNoOworCisgIGNoID0gZ2V0YyhmaWxlKTsKKyAgaWYgKGNoID09ICcjJykgeworICAgIGRvIHsKKyAgICAgIGNoID0gZ2V0YyhmaWxlKTsKKyAgICB9IHdoaWxlIChjaCAhPSAnXG4nICYmIGNoICE9IEVPRik7CisgIH0KKyAgcmV0dXJuIGNoOworfQorCisKK0xPQ0FMKGJvb2xlYW4pCityZWFkX3RleHRfaW50ZWdlcihGSUxFICpmaWxlLCBsb25nICpyZXN1bHQsIGludCAqdGVybWNoYXIpCisvKiBSZWFkIGFuIHVuc2lnbmVkIGRlY2ltYWwgaW50ZWdlciBmcm9tIGEgZmlsZSwgc3RvcmUgaXQgaW4gcmVzdWx0ICovCisvKiBSZWFkcyBvbmUgdHJhaWxpbmcgY2hhcmFjdGVyIGFmdGVyIHRoZSBpbnRlZ2VyOyByZXR1cm5zIGl0IGluIHRlcm1jaGFyICovCit7CisgIHJlZ2lzdGVyIGludCBjaDsKKyAgcmVnaXN0ZXIgbG9uZyB2YWw7CisKKyAgLyogU2tpcCBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLCBkZXRlY3QgRU9GICovCisgIGRvIHsKKyAgICBjaCA9IHRleHRfZ2V0YyhmaWxlKTsKKyAgICBpZiAoY2ggPT0gRU9GKSB7CisgICAgICAqdGVybWNoYXIgPSBjaDsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0gd2hpbGUgKGlzc3BhY2UoY2gpKTsKKworICBpZiAoIWlzZGlnaXQoY2gpKSB7CisgICAgKnRlcm1jaGFyID0gY2g7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgdmFsID0gY2ggLSAnMCc7CisgIHdoaWxlICgoY2ggPSB0ZXh0X2dldGMoZmlsZSkpICE9IEVPRikgeworICAgIGlmICghaXNkaWdpdChjaCkpCisgICAgICBicmVhazsKKyAgICB2YWwgKj0gMTA7CisgICAgdmFsICs9IGNoIC0gJzAnOworICB9CisgICpyZXN1bHQgPSB2YWw7CisgICp0ZXJtY2hhciA9IGNoOworICByZXR1cm4gVFJVRTsKK30KKworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA8IDcwCitzdGF0aWMgaW50IHFfc2NhbGVfZmFjdG9yW05VTV9RVUFOVF9UQkxTXSA9IHsgMTAwLCAxMDAsIDEwMCwgMTAwIH07CisjZW5kaWYKKworR0xPQkFMKGJvb2xlYW4pCityZWFkX3F1YW50X3RhYmxlcyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqZmlsZW5hbWUsIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCisvKiBSZWFkIGEgc2V0IG9mIHF1YW50aXphdGlvbiB0YWJsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuCisgKiBUaGUgZmlsZSBpcyBwbGFpbiBBU0NJSSB0ZXh0OiBkZWNpbWFsIG51bWJlcnMgd2l0aCB3aGl0ZXNwYWNlIGJldHdlZW4uCisgKiBDb21tZW50cyBwcmVjZWRlZCBieSAnIycgbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBmaWxlLgorICogVGhlcmUgbWF5IGJlIG9uZSB0byBOVU1fUVVBTlRfVEJMUyB0YWJsZXMgaW4gdGhlIGZpbGUsIGVhY2ggb2YgNjQgdmFsdWVzLgorICogVGhlIHRhYmxlcyBhcmUgaW1wbGljaXRseSBudW1iZXJlZCAwLDEsZXRjLgorICogTk9URTogZG9lcyBub3QgYWZmZWN0IHRoZSBxc2xvdHMgbWFwcGluZywgd2hpY2ggd2lsbCBkZWZhdWx0IHRvIHNlbGVjdGluZworICogdGFibGUgMCBmb3IgbHVtaW5hbmNlIChvciBwcmltYXJ5KSBjb21wb25lbnRzLCAxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLgorICogWW91IG11c3QgdXNlIC1xc2xvdHMgaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgY29tcG9uZW50LT50YWJsZSBtYXBwaW5nLgorICovCit7CisgIEZJTEUgKmZwOworICBpbnQgdGJsbm8sIGksIHRlcm1jaGFyOworICBsb25nIHZhbDsKKyAgdW5zaWduZWQgaW50IHRhYmxlW0RDVFNJWkUyXTsKKworICBpZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG9wZW4gdGFibGUgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICB0YmxubyA9IDA7CisKKyAgd2hpbGUgKHJlYWRfdGV4dF9pbnRlZ2VyKGZwLCAmdmFsLCAmdGVybWNoYXIpKSB7IC8qIHJlYWQgMXN0IGVsZW1lbnQgb2YgdGFibGUgKi8KKyAgICBpZiAodGJsbm8gPj0gTlVNX1FVQU5UX1RCTFMpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiVG9vIG1hbnkgdGFibGVzIGluIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgIGZjbG9zZShmcCk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHRhYmxlWzBdID0gKHVuc2lnbmVkIGludCl2YWw7CisgICAgZm9yIChpID0gMTsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICAgIGlmICghcmVhZF90ZXh0X2ludGVnZXIoZnAsICZ2YWwsICZ0ZXJtY2hhcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRhYmxlIGRhdGEgaW4gZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICB0YWJsZVtpXSA9ICh1bnNpZ25lZCBpbnQpdmFsOworICAgIH0KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgICAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIHRibG5vLCB0YWJsZSwgY2luZm8tPnFfc2NhbGVfZmFjdG9yW3RibG5vXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9iYXNlbGluZSk7CisjZWxzZQorICAgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCB0YmxubywgdGFibGUsIHFfc2NhbGVfZmFjdG9yW3RibG5vXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9iYXNlbGluZSk7CisjZW5kaWYKKyAgICB0YmxubysrOworICB9CisKKyAgaWYgKHRlcm1jaGFyICE9IEVPRikgeworICAgIGZwcmludGYoc3RkZXJyLCAiTm9uLW51bWVyaWMgZGF0YSBpbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisgICAgZmNsb3NlKGZwKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBmY2xvc2UoZnApOworICByZXR1cm4gVFJVRTsKK30KKworCisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisKK0xPQ0FMKGJvb2xlYW4pCityZWFkX3NjYW5faW50ZWdlcihGSUxFICpmaWxlLCBsb25nICpyZXN1bHQsIGludCAqdGVybWNoYXIpCisvKiBWYXJpYW50IG9mIHJlYWRfdGV4dF9pbnRlZ2VyIHRoYXQgYWx3YXlzIGxvb2tzIGZvciBhIG5vbi1zcGFjZSB0ZXJtY2hhcjsKKyAqIHRoaXMgc2ltcGxpZmllcyBwYXJzaW5nIG9mIHB1bmN0dWF0aW9uIGluIHNjYW4gc2NyaXB0cy4KKyAqLworeworICByZWdpc3RlciBpbnQgY2g7CisKKyAgaWYgKCFyZWFkX3RleHRfaW50ZWdlcihmaWxlLCByZXN1bHQsIHRlcm1jaGFyKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIGNoID0gKnRlcm1jaGFyOworICB3aGlsZSAoY2ggIT0gRU9GICYmIGlzc3BhY2UoY2gpKQorICAgIGNoID0gdGV4dF9nZXRjKGZpbGUpOworICBpZiAoaXNkaWdpdChjaCkpIHsgICAgICAgICAgICAvKiBvb3BzLCBwdXQgaXQgYmFjayAqLworICAgIGlmICh1bmdldGMoY2gsIGZpbGUpID09IEVPRikKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICBjaCA9ICcgJzsKKyAgfSBlbHNlIHsKKyAgICAvKiBBbnkgc2VwYXJhdG9ycyBvdGhlciB0aGFuICc7JyBhbmQgJzonIGFyZSBpZ25vcmVkOworICAgICAqIHRoaXMgYWxsb3dzIHVzZXIgdG8gaW5zZXJ0IGNvbW1hcywgZXRjLCBpZiBkZXNpcmVkLgorICAgICAqLworICAgIGlmIChjaCAhPSBFT0YgJiYgY2ggIT0gJzsnICYmIGNoICE9ICc6JykKKyAgICAgIGNoID0gJyAnOworICB9CisgICp0ZXJtY2hhciA9IGNoOworICByZXR1cm4gVFJVRTsKK30KKworCitHTE9CQUwoYm9vbGVhbikKK3JlYWRfc2Nhbl9zY3JpcHQoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKmZpbGVuYW1lKQorLyogUmVhZCBhIHNjYW4gc2NyaXB0IGZyb20gdGhlIHNwZWNpZmllZCB0ZXh0IGZpbGUuCisgKiBFYWNoIGVudHJ5IGluIHRoZSBmaWxlIGRlZmluZXMgb25lIHNjYW4gdG8gYmUgZW1pdHRlZC4KKyAqIEVudHJpZXMgYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zICc7Jy4KKyAqIEFuIGVudHJ5IGNvbnRhaW5zIG9uZSB0byBmb3VyIGNvbXBvbmVudCBpbmRleGVzLAorICogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGNvbG9uICc6JyBhbmQgZm91ciBwcm9ncmVzc2l2ZS1KUEVHIHBhcmFtZXRlcnMuCisgKiBUaGUgY29tcG9uZW50IGluZGV4ZXMgZGVub3RlIHdoaWNoIGNvbXBvbmVudChzKSBhcmUgdG8gYmUgdHJhbnNtaXR0ZWQKKyAqIGluIHRoZSBjdXJyZW50IHNjYW4uICBUaGUgZmlyc3QgY29tcG9uZW50IGhhcyBpbmRleCAwLgorICogU2VxdWVudGlhbCBKUEVHIGlzIHVzZWQgaWYgdGhlIHByb2dyZXNzaXZlLUpQRUcgcGFyYW1ldGVycyBhcmUgb21pdHRlZC4KKyAqIFRoZSBmaWxlIGlzIGZyZWUgZm9ybWF0IHRleHQ6IGFueSB3aGl0ZXNwYWNlIG1heSBhcHBlYXIgYmV0d2VlbiBudW1iZXJzCisgKiBhbmQgdGhlICc6JyBhbmQgJzsnIHB1bmN0dWF0aW9uIG1hcmtzLiAgQWxzbywgb3RoZXIgcHVuY3R1YXRpb24gKHN1Y2gKKyAqIGFzIGNvbW1hcyBvciBkYXNoZXMpIGNhbiBiZSBwbGFjZWQgYmV0d2VlbiBudW1iZXJzIGlmIGRlc2lyZWQuCisgKiBDb21tZW50cyBwcmVjZWRlZCBieSAnIycgbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBmaWxlLgorICogTm90ZTogd2UgZG8gdmVyeSBsaXR0bGUgdmFsaWRpdHkgY2hlY2tpbmcgaGVyZTsKKyAqIGpjbWFzdGVyLmMgd2lsbCB2YWxpZGF0ZSB0aGUgc2NyaXB0IHBhcmFtZXRlcnMuCisgKi8KK3sKKyAgRklMRSAqZnA7CisgIGludCBzY2Fubm8sIG5jb21wcywgdGVybWNoYXI7CisgIGxvbmcgdmFsOworICBqcGVnX3NjYW5faW5mbyAqc2NhbnB0cjsKKyNkZWZpbmUgTUFYX1NDQU5TICAxMDAgICAgICAgICAgLyogcXVpdGUgYXJiaXRyYXJ5IGxpbWl0ICovCisgIGpwZWdfc2Nhbl9pbmZvIHNjYW5zW01BWF9TQ0FOU107CisKKyAgaWYgKChmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBvcGVuIHNjYW4gZGVmaW5pdGlvbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHNjYW5wdHIgPSBzY2FuczsKKyAgc2Nhbm5vID0gMDsKKworICB3aGlsZSAocmVhZF9zY2FuX2ludGVnZXIoZnAsICZ2YWwsICZ0ZXJtY2hhcikpIHsKKyAgICBpZiAoc2Nhbm5vID49IE1BWF9TQ0FOUykgeworICAgICAgZnByaW50ZihzdGRlcnIsICJUb28gbWFueSBzY2FucyBkZWZpbmVkIGluIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgIGZjbG9zZShmcCk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFswXSA9IChpbnQpdmFsOworICAgIG5jb21wcyA9IDE7CisgICAgd2hpbGUgKHRlcm1jaGFyID09ICcgJykgeworICAgICAgaWYgKG5jb21wcyA+PSBNQVhfQ09NUFNfSU5fU0NBTikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IGNvbXBvbmVudHMgaW4gb25lIHNjYW4gaW4gZmlsZSAlc1xuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGlmICghcmVhZF9zY2FuX2ludGVnZXIoZnAsICZ2YWwsICZ0ZXJtY2hhcikpCisgICAgICAgIGdvdG8gYm9ndXM7CisgICAgICBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbbmNvbXBzXSA9IChpbnQpdmFsOworICAgICAgbmNvbXBzKys7CisgICAgfQorICAgIHNjYW5wdHItPmNvbXBzX2luX3NjYW4gPSBuY29tcHM7CisgICAgaWYgKHRlcm1jaGFyID09ICc6JykgeworICAgICAgaWYgKCFyZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSB8fCB0ZXJtY2hhciAhPSAnICcpCisgICAgICAgIGdvdG8gYm9ndXM7CisgICAgICBzY2FucHRyLT5TcyA9IChpbnQpdmFsOworICAgICAgaWYgKCFyZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSB8fCB0ZXJtY2hhciAhPSAnICcpCisgICAgICAgIGdvdG8gYm9ndXM7CisgICAgICBzY2FucHRyLT5TZSA9IChpbnQpdmFsOworICAgICAgaWYgKCFyZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSB8fCB0ZXJtY2hhciAhPSAnICcpCisgICAgICAgIGdvdG8gYm9ndXM7CisgICAgICBzY2FucHRyLT5BaCA9IChpbnQpdmFsOworICAgICAgaWYgKCFyZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSkKKyAgICAgICAgZ290byBib2d1czsKKyAgICAgIHNjYW5wdHItPkFsID0gKGludCl2YWw7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHNldCBub24tcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyAqLworICAgICAgc2NhbnB0ci0+U3MgPSAwOworICAgICAgc2NhbnB0ci0+U2UgPSBEQ1RTSVpFMiAtIDE7CisgICAgICBzY2FucHRyLT5BaCA9IDA7CisgICAgICBzY2FucHRyLT5BbCA9IDA7CisgICAgfQorICAgIGlmICh0ZXJtY2hhciAhPSAnOycgJiYgdGVybWNoYXIgIT0gRU9GKSB7Citib2d1czoKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzY2FuIGVudHJ5IGZvcm1hdCBpbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisgICAgICBmY2xvc2UoZnApOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBzY2FucHRyKyssIHNjYW5ubysrOworICB9CisKKyAgaWYgKHRlcm1jaGFyICE9IEVPRikgeworICAgIGZwcmludGYoc3RkZXJyLCAiTm9uLW51bWVyaWMgZGF0YSBpbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisgICAgZmNsb3NlKGZwKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBpZiAoc2Nhbm5vID4gMCkgeworICAgIC8qIFN0YXNoIGNvbXBsZXRlZCBzY2FuIGxpc3QgaW4gY2luZm8gc3RydWN0dXJlLgorICAgICAqIE5PVEU6IGZvciBjanBlZydzIHVzZSwgSlBPT0xfSU1BR0UgaXMgdGhlIHJpZ2h0IGxpZmV0aW1lIGZvciB0aGlzIGRhdGEsCisgICAgICogYnV0IGlmIHlvdSB3YW50IHRvIGNvbXByZXNzIG11bHRpcGxlIGltYWdlcyB5b3UnZCB3YW50IEpQT09MX1BFUk1BTkVOVC4KKyAgICAgKi8KKyAgICBzY2FucHRyID0gKGpwZWdfc2Nhbl9pbmZvICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbm5vICogc2l6ZW9mKGpwZWdfc2Nhbl9pbmZvKSk7CisgICAgTUVNQ09QWShzY2FucHRyLCBzY2Fucywgc2Nhbm5vICogc2l6ZW9mKGpwZWdfc2Nhbl9pbmZvKSk7CisgICAgY2luZm8tPnNjYW5faW5mbyA9IHNjYW5wdHI7CisgICAgY2luZm8tPm51bV9zY2FucyA9IHNjYW5ubzsKKyAgfQorCisgIGZjbG9zZShmcCk7CisgIHJldHVybiBUUlVFOworfQorCisjZW5kaWYgLyogQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEICovCisKKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPCA3MAorLyogVGhlc2UgYXJlIHRoZSBzYW1wbGUgcXVhbnRpemF0aW9uIHRhYmxlcyBnaXZlbiBpbiBKUEVHIHNwZWMgc2VjdGlvbiBLLjEuCisgKiBUaGUgc3BlYyBzYXlzIHRoYXQgdGhlIHZhbHVlcyBnaXZlbiBwcm9kdWNlICJnb29kIiBxdWFsaXR5LCBhbmQKKyAqIHdoZW4gZGl2aWRlZCBieSAyLCAidmVyeSBnb29kIiBxdWFsaXR5LgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0ZF9sdW1pbmFuY2VfcXVhbnRfdGJsW0RDVFNJWkUyXSA9IHsKKyAgMTYsICAxMSwgIDEwLCAgMTYsICAyNCwgIDQwLCAgNTEsICA2MSwKKyAgMTIsICAxMiwgIDE0LCAgMTksICAyNiwgIDU4LCAgNjAsICA1NSwKKyAgMTQsICAxMywgIDE2LCAgMjQsICA0MCwgIDU3LCAgNjksICA1NiwKKyAgMTQsICAxNywgIDIyLCAgMjksICA1MSwgIDg3LCAgODAsICA2MiwKKyAgMTgsICAyMiwgIDM3LCAgNTYsICA2OCwgMTA5LCAxMDMsICA3NywKKyAgMjQsICAzNSwgIDU1LCAgNjQsICA4MSwgMTA0LCAxMTMsICA5MiwKKyAgNDksICA2NCwgIDc4LCAgODcsIDEwMywgMTIxLCAxMjAsIDEwMSwKKyAgNzIsICA5MiwgIDk1LCAgOTgsIDExMiwgMTAwLCAxMDMsICA5OQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RkX2Nocm9taW5hbmNlX3F1YW50X3RibFtEQ1RTSVpFMl0gPSB7CisgIDE3LCAgMTgsICAyNCwgIDQ3LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDE4LCAgMjEsICAyNiwgIDY2LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDI0LCAgMjYsICA1NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDQ3LCAgNjYsICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTkKK307CisKKworTE9DQUwodm9pZCkKK2pwZWdfZGVmYXVsdF9xdGFibGVzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQoreworICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgMCwgc3RkX2x1bWluYW5jZV9xdWFudF90YmwsIHFfc2NhbGVfZmFjdG9yWzBdLAorICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9iYXNlbGluZSk7CisgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCAxLCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsLCBxX3NjYWxlX2ZhY3RvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfYmFzZWxpbmUpOworfQorI2VuZGlmCisKKworR0xPQkFMKGJvb2xlYW4pCitzZXRfcXVhbGl0eV9yYXRpbmdzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcsIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCisvKiBQcm9jZXNzIGEgcXVhbGl0eS1yYXRpbmdzIHBhcmFtZXRlciBzdHJpbmcsIG9mIHRoZSBmb3JtCisgKiAgICAgTlssTiwuLi5dCisgKiBJZiB0aGVyZSBhcmUgbW9yZSBxLXRhYmxlIHNsb3RzIHRoYW4gcGFyYW1ldGVycywgdGhlIGxhc3QgdmFsdWUgaXMgcmVwbGljYXRlZC4KKyAqLworeworICBpbnQgdmFsID0gNzU7ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IHZhbHVlICovCisgIGludCB0YmxubzsKKyAgY2hhciBjaDsKKworICBmb3IgKHRibG5vID0gMDsgdGJsbm8gPCBOVU1fUVVBTlRfVEJMUzsgdGJsbm8rKykgeworICAgIGlmICgqYXJnKSB7CisgICAgICBjaCA9ICcsJzsgICAgICAgICAgICAgICAgIC8qIGlmIG5vdCBzZXQgYnkgc3NjYW5mLCB3aWxsIGJlICcsJyAqLworICAgICAgaWYgKHNzY2FuZihhcmcsICIlZCVjIiwgJnZhbCwgJmNoKSA8IDEpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGlmIChjaCAhPSAnLCcpICAgICAgICAgICAgLyogc3ludGF4IGNoZWNrICovCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIC8qIENvbnZlcnQgdXNlciAwLTEwMCByYXRpbmcgdG8gcGVyY2VudGFnZSBzY2FsaW5nICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAgICAgY2luZm8tPnFfc2NhbGVfZmFjdG9yW3RibG5vXSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKHZhbCk7CisjZWxzZQorICAgICAgcV9zY2FsZV9mYWN0b3JbdGJsbm9dID0ganBlZ19xdWFsaXR5X3NjYWxpbmcodmFsKTsKKyNlbmRpZgorICAgICAgd2hpbGUgKCphcmcgJiYgKmFyZysrICE9ICcsJykgLyogYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgb2YgYXJnIHN0cmluZyAqLworICAgICAgICA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHJlYWNoZWQgZW5kIG9mIHBhcmFtZXRlciwgc2V0IHJlbWFpbmluZyBmYWN0b3JzIHRvIGxhc3QgdmFsdWUgKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgICAgICBjaW5mby0+cV9zY2FsZV9mYWN0b3JbdGJsbm9dID0ganBlZ19xdWFsaXR5X3NjYWxpbmcodmFsKTsKKyNlbHNlCisgICAgICBxX3NjYWxlX2ZhY3Rvclt0Ymxub10gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyh2YWwpOworI2VuZGlmCisgICAgfQorICB9CisgIGpwZWdfZGVmYXVsdF9xdGFibGVzKGNpbmZvLCBmb3JjZV9iYXNlbGluZSk7CisgIHJldHVybiBUUlVFOworfQorCisKK0dMT0JBTChib29sZWFuKQorc2V0X3F1YW50X3Nsb3RzKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcpCisvKiBQcm9jZXNzIGEgcXVhbnRpemF0aW9uLXRhYmxlLXNlbGVjdG9ycyBwYXJhbWV0ZXIgc3RyaW5nLCBvZiB0aGUgZm9ybQorICogICAgIE5bLE4sLi4uXQorICogSWYgdGhlcmUgYXJlIG1vcmUgY29tcG9uZW50cyB0aGFuIHBhcmFtZXRlcnMsIHRoZSBsYXN0IHZhbHVlIGlzIHJlcGxpY2F0ZWQuCisgKi8KK3sKKyAgaW50IHZhbCA9IDA7ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCB0YWJsZSAjICovCisgIGludCBjaTsKKyAgY2hhciBjaDsKKworICBmb3IgKGNpID0gMDsgY2kgPCBNQVhfQ09NUE9ORU5UUzsgY2krKykgeworICAgIGlmICgqYXJnKSB7CisgICAgICBjaCA9ICcsJzsgICAgICAgICAgICAgICAgIC8qIGlmIG5vdCBzZXQgYnkgc3NjYW5mLCB3aWxsIGJlICcsJyAqLworICAgICAgaWYgKHNzY2FuZihhcmcsICIlZCVjIiwgJnZhbCwgJmNoKSA8IDEpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGlmIChjaCAhPSAnLCcpICAgICAgICAgICAgLyogc3ludGF4IGNoZWNrICovCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+PSBOVU1fUVVBTlRfVEJMUykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkpQRUcgcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uJWRcbiIsCisgICAgICAgICAgICAgICAgTlVNX1FVQU5UX1RCTFMgLSAxKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgY2luZm8tPmNvbXBfaW5mb1tjaV0ucXVhbnRfdGJsX25vID0gdmFsOworICAgICAgd2hpbGUgKCphcmcgJiYgKmFyZysrICE9ICcsJykgLyogYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgb2YgYXJnIHN0cmluZyAqLworICAgICAgICA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHJlYWNoZWQgZW5kIG9mIHBhcmFtZXRlciwgc2V0IHJlbWFpbmluZyBjb21wb25lbnRzIHRvIGxhc3QgdGFibGUgKi8KKyAgICAgIGNpbmZvLT5jb21wX2luZm9bY2ldLnF1YW50X3RibF9ubyA9IHZhbDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKworR0xPQkFMKGJvb2xlYW4pCitzZXRfc2FtcGxlX2ZhY3RvcnMoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKmFyZykKKy8qIFByb2Nlc3MgYSBzYW1wbGUtZmFjdG9ycyBwYXJhbWV0ZXIgc3RyaW5nLCBvZiB0aGUgZm9ybQorICogICAgIEh4VlssSHhWLC4uLl0KKyAqIElmIHRoZXJlIGFyZSBtb3JlIGNvbXBvbmVudHMgdGhhbiBwYXJhbWV0ZXJzLCAiMXgxIiBpcyBhc3N1bWVkIGZvciB0aGUgcmVzdC4KKyAqLworeworICBpbnQgY2ksIHZhbDEsIHZhbDI7CisgIGNoYXIgY2gxLCBjaDI7CisKKyAgZm9yIChjaSA9IDA7IGNpIDwgTUFYX0NPTVBPTkVOVFM7IGNpKyspIHsKKyAgICBpZiAoKmFyZykgeworICAgICAgY2gyID0gJywnOyAgICAgICAgICAgICAgICAvKiBpZiBub3Qgc2V0IGJ5IHNzY2FuZiwgd2lsbCBiZSAnLCcgKi8KKyAgICAgIGlmIChzc2NhbmYoYXJnLCAiJWQlYyVkJWMiLCAmdmFsMSwgJmNoMSwgJnZhbDIsICZjaDIpIDwgMykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgaWYgKChjaDEgIT0gJ3gnICYmIGNoMSAhPSAnWCcpIHx8IGNoMiAhPSAnLCcpIC8qIHN5bnRheCBjaGVjayAqLworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICBpZiAodmFsMSA8PSAwIHx8IHZhbDEgPiA0IHx8IHZhbDIgPD0gMCB8fCB2YWwyID4gNCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkpQRUcgc2FtcGxpbmcgZmFjdG9ycyBtdXN0IGJlIDEuLjRcbiIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICBjaW5mby0+Y29tcF9pbmZvW2NpXS5oX3NhbXBfZmFjdG9yID0gdmFsMTsKKyAgICAgIGNpbmZvLT5jb21wX2luZm9bY2ldLnZfc2FtcF9mYWN0b3IgPSB2YWwyOworICAgICAgd2hpbGUgKCphcmcgJiYgKmFyZysrICE9ICcsJykgLyogYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgb2YgYXJnIHN0cmluZyAqLworICAgICAgICA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHJlYWNoZWQgZW5kIG9mIHBhcmFtZXRlciwgc2V0IHJlbWFpbmluZyBjb21wb25lbnRzIHRvIDF4MSBzYW1wbGluZyAqLworICAgICAgY2luZm8tPmNvbXBfaW5mb1tjaV0uaF9zYW1wX2ZhY3RvciA9IDE7CisgICAgICBjaW5mby0+Y29tcF9pbmZvW2NpXS52X3NhbXBfZmFjdG9yID0gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZHRhcmdhLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZHRhcmdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiNDIxOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JkdGFyZ2EuYwpAQCAtMCwwICsxLDUwNCBAQAorLyoKKyAqIHJkdGFyZ2EuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGNvZGUgcmVsZXZhbnQKKyAqIHRvIGxpYmpwZWctdHVyYm8uCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gcmVhZCBpbnB1dCBpbWFnZXMgaW4gVGFyZ2EgZm9ybWF0LgorICoKKyAqIFRoZXNlIHJvdXRpbmVzIG1heSBuZWVkIG1vZGlmaWNhdGlvbiBmb3Igbm9uLVVuaXggZW52aXJvbm1lbnRzIG9yCisgKiBzcGVjaWFsaXplZCBhcHBsaWNhdGlvbnMuICBBcyB0aGV5IHN0YW5kLCB0aGV5IGFzc3VtZSBpbnB1dCBmcm9tCisgKiBhbiBvcmRpbmFyeSBzdGRpbyBzdHJlYW0uICBUaGV5IGZ1cnRoZXIgYXNzdW1lIHRoYXQgcmVhZGluZyBiZWdpbnMKKyAqIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZTsgc3RhcnRfaW5wdXQgbWF5IG5lZWQgd29yayBpZiB0aGUKKyAqIHVzZXIgaW50ZXJmYWNlIGhhcyBhbHJlYWR5IHJlYWQgc29tZSBkYXRhIChlLmcuLCB0byBkZXRlcm1pbmUgdGhhdAorICogdGhlIGZpbGUgaXMgaW5kZWVkIFRhcmdhIGZvcm1hdCkuCisgKgorICogQmFzZWQgb24gY29kZSBjb250cmlidXRlZCBieSBMZWUgRGFuaWVsIENyb2NrZXIuCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworCisjaWZkZWYgVEFSR0FfU1VQUE9SVEVECisKKworLyogTWFjcm9zIHRvIGRlYWwgd2l0aCB1bnNpZ25lZCBjaGFycyBhcyBlZmZpY2llbnRseSBhcyBjb21waWxlciBhbGxvd3MgKi8KKworI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVfQ0hBUjsKKyNkZWZpbmUgVUNIKHgpICAoKGludCkoeCkpCisjZWxzZSAvKiAhSEFWRV9VTlNJR05FRF9DSEFSICovCisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KK3R5cGVkZWYgY2hhciBVX0NIQVI7CisjZGVmaW5lIFVDSCh4KSAgKChpbnQpKHgpKQorI2Vsc2UKK3R5cGVkZWYgY2hhciBVX0NIQVI7CisjZGVmaW5lIFVDSCh4KSAgKChpbnQpKHgpICYgMHhGRikKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLworCisKKyNkZWZpbmUgUmVhZE9LKGZpbGUsIGJ1ZmZlciwgbGVuKSBcCisgIChKRlJFQUQoZmlsZSwgYnVmZmVyLCBsZW4pID09ICgoc2l6ZV90KShsZW4pKSkKKworCisvKiBQcml2YXRlIHZlcnNpb24gb2YgZGF0YSBzb3VyY2Ugb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IF90Z2Ffc291cmNlX3N0cnVjdCAqdGdhX3NvdXJjZV9wdHI7CisKK3R5cGVkZWYgc3RydWN0IF90Z2Ffc291cmNlX3N0cnVjdCB7CisgIHN0cnVjdCBjanBlZ19zb3VyY2Vfc3RydWN0IHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvOyAgICAgICAgIC8qIGJhY2sgbGluayBzYXZlcyBwYXNzaW5nIHNlcGFyYXRlIHBhcm0gKi8KKworICBKU0FNUEFSUkFZIGNvbG9ybWFwOyAgICAgICAgICAvKiBUYXJnYSBjb2xvcm1hcCAoY29udmVydGVkIHRvIG15IGZvcm1hdCkgKi8KKworICBqdmlydF9zYXJyYXlfcHRyIHdob2xlX2ltYWdlOyAvKiBOZWVkZWQgaWYgZnVubnkgaW5wdXQgcm93IG9yZGVyICovCisgIEpESU1FTlNJT04gY3VycmVudF9yb3c7ICAgICAgIC8qIEN1cnJlbnQgbG9naWNhbCByb3cgbnVtYmVyIHRvIHJlYWQgKi8KKworICAvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gZXh0cmFjdCBuZXh0IFRhcmdhIHBpeGVsIGZyb20gaW5wdXQgZmlsZSAqLworICB2b2lkICgqcmVhZF9waXhlbCkgKHRnYV9zb3VyY2VfcHRyIHNpbmZvKTsKKworICAvKiBSZXN1bHQgb2YgcmVhZF9waXhlbCBpcyBkZWxpdmVyZWQgaGVyZTogKi8KKyAgVV9DSEFSIHRnYV9waXhlbFs0XTsKKworICBpbnQgcGl4ZWxfc2l6ZTsgICAgICAgICAgICAgICAvKiBCeXRlcyBwZXIgVGFyZ2EgcGl4ZWwgKDEgdG8gNCkgKi8KKworICAvKiBTdGF0ZSBpbmZvIGZvciByZWFkaW5nIFJMRS1jb2RlZCBwaXhlbHM7IGJvdGggY291bnRzIG11c3QgYmUgaW5pdCB0byAwICovCisgIGludCBibG9ja19jb3VudDsgICAgICAgICAgICAgIC8qICMgb2YgcGl4ZWxzIHJlbWFpbmluZyBpbiBSTEUgYmxvY2sgKi8KKyAgaW50IGR1cF9waXhlbF9jb3VudDsgICAgICAgICAgLyogIyBvZiB0aW1lcyB0byBkdXBsaWNhdGUgcHJldmlvdXMgcGl4ZWwgKi8KKworICAvKiBUaGlzIHNhdmVzIHRoZSBjb3JyZWN0IHBpeGVsLXJvdy1leHBhbnNpb24gbWV0aG9kIGZvciBwcmVsb2FkX2ltYWdlICovCisgIEpESU1FTlNJT04gKCpnZXRfcGl4ZWxfcm93cykgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKTsKK30gdGdhX3NvdXJjZV9zdHJ1Y3Q7CisKKworLyogRm9yIGV4cGFuZGluZyA1LWJpdCBwaXhlbCB2YWx1ZXMgdG8gOC1iaXQgd2l0aCBiZXN0IHJvdW5kaW5nICovCisKK3N0YXRpYyBjb25zdCBVSU5UOCBjNXRvOGJpdHNbMzJdID0geworICAgIDAsICAgOCwgIDE2LCAgMjUsICAzMywgIDQxLCAgNDksICA1OCwKKyAgIDY2LCAgNzQsICA4MiwgIDkwLCAgOTksIDEwNywgMTE1LCAxMjMsCisgIDEzMiwgMTQwLCAxNDgsIDE1NiwgMTY1LCAxNzMsIDE4MSwgMTg5LAorICAxOTcsIDIwNiwgMjE0LCAyMjIsIDIzMCwgMjM5LCAyNDcsIDI1NQorfTsKKworCisKK0xPQ0FMKGludCkKK3JlYWRfYnl0ZSh0Z2Ffc291cmNlX3B0ciBzaW5mbykKKy8qIFJlYWQgbmV4dCBieXRlIGZyb20gVGFyZ2EgZmlsZSAqLworeworICByZWdpc3RlciBGSUxFICppbmZpbGUgPSBzaW5mby0+cHViLmlucHV0X2ZpbGU7CisgIHJlZ2lzdGVyIGludCBjOworCisgIGlmICgoYyA9IGdldGMoaW5maWxlKSkgPT0gRU9GKQorICAgIEVSUkVYSVQoc2luZm8tPmNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CisgIHJldHVybiBjOworfQorCisKK0xPQ0FMKHZvaWQpCityZWFkX2NvbG9ybWFwKHRnYV9zb3VyY2VfcHRyIHNpbmZvLCBpbnQgY21hcGxlbiwgaW50IG1hcGVudHJ5c2l6ZSkKKy8qIFJlYWQgdGhlIGNvbG9ybWFwIGZyb20gYSBUYXJnYSBmaWxlICovCit7CisgIGludCBpOworCisgIC8qIFByZXNlbnRseSBvbmx5IGhhbmRsZXMgMjQtYml0IEJHUiBmb3JtYXQgKi8KKyAgaWYgKG1hcGVudHJ5c2l6ZSAhPSAyNCkKKyAgICBFUlJFWElUKHNpbmZvLT5jaW5mbywgSkVSUl9UR0FfQkFEQ01BUCk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNtYXBsZW47IGkrKykgeworICAgIHNpbmZvLT5jb2xvcm1hcFsyXVtpXSA9IChKU0FNUExFKXJlYWRfYnl0ZShzaW5mbyk7CisgICAgc2luZm8tPmNvbG9ybWFwWzFdW2ldID0gKEpTQU1QTEUpcmVhZF9ieXRlKHNpbmZvKTsKKyAgICBzaW5mby0+Y29sb3JtYXBbMF1baV0gPSAoSlNBTVBMRSlyZWFkX2J5dGUoc2luZm8pOworICB9Cit9CisKKworLyoKKyAqIHJlYWRfcGl4ZWwgbWV0aG9kczogZ2V0IGEgc2luZ2xlIHBpeGVsIGZyb20gVGFyZ2EgZmlsZSBpbnRvIHRnYV9waXhlbFtdCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZWFkX25vbl9ybGVfcGl4ZWwodGdhX3NvdXJjZV9wdHIgc2luZm8pCisvKiBSZWFkIG9uZSBUYXJnYSBwaXhlbCBmcm9tIHRoZSBpbnB1dCBmaWxlOyBubyBSTEUgZXhwYW5zaW9uICovCit7CisgIHJlZ2lzdGVyIEZJTEUgKmluZmlsZSA9IHNpbmZvLT5wdWIuaW5wdXRfZmlsZTsKKyAgcmVnaXN0ZXIgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IHNpbmZvLT5waXhlbF9zaXplOyBpKyspIHsKKyAgICBzaW5mby0+dGdhX3BpeGVsW2ldID0gKFVfQ0hBUilnZXRjKGluZmlsZSk7CisgIH0KK30KKworCitNRVRIT0RERUYodm9pZCkKK3JlYWRfcmxlX3BpeGVsKHRnYV9zb3VyY2VfcHRyIHNpbmZvKQorLyogUmVhZCBvbmUgVGFyZ2EgcGl4ZWwgZnJvbSB0aGUgaW5wdXQgZmlsZSwgZXhwYW5kaW5nIFJMRSBkYXRhIGFzIG5lZWRlZCAqLworeworICByZWdpc3RlciBGSUxFICppbmZpbGUgPSBzaW5mby0+cHViLmlucHV0X2ZpbGU7CisgIHJlZ2lzdGVyIGludCBpOworCisgIC8qIER1cGxpY2F0ZSBwcmV2aW91c2x5IHJlYWQgcGl4ZWw/ICovCisgIGlmIChzaW5mby0+ZHVwX3BpeGVsX2NvdW50ID4gMCkgeworICAgIHNpbmZvLT5kdXBfcGl4ZWxfY291bnQtLTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBUaW1lIHRvIHJlYWQgUkxFIGJsb2NrIGhlYWRlcj8gKi8KKyAgaWYgKC0tc2luZm8tPmJsb2NrX2NvdW50IDwgMCkgeyAvKiBkZWNyZW1lbnQgcGl4ZWxzIHJlbWFpbmluZyBpbiBibG9jayAqLworICAgIGkgPSByZWFkX2J5dGUoc2luZm8pOworICAgIGlmIChpICYgMHg4MCkgeyAgICAgICAgICAgICAvKiBTdGFydCBvZiBkdXBsaWNhdGUtcGl4ZWwgYmxvY2s/ICovCisgICAgICBzaW5mby0+ZHVwX3BpeGVsX2NvdW50ID0gaSAmIDB4N0Y7IC8qIG51bWJlciBvZiBkdXBzIGFmdGVyIHRoaXMgb25lICovCisgICAgICBzaW5mby0+YmxvY2tfY291bnQgPSAwOyAgIC8qIHRoZW4gcmVhZCBuZXcgYmxvY2sgaGVhZGVyICovCisgICAgfSBlbHNlIHsKKyAgICAgIHNpbmZvLT5ibG9ja19jb3VudCA9IGkgJiAweDdGOyAvKiBudW1iZXIgb2YgcGl4ZWxzIGFmdGVyIHRoaXMgb25lICovCisgICAgfQorICB9CisKKyAgLyogUmVhZCBuZXh0IHBpeGVsICovCisgIGZvciAoaSA9IDA7IGkgPCBzaW5mby0+cGl4ZWxfc2l6ZTsgaSsrKSB7CisgICAgc2luZm8tPnRnYV9waXhlbFtpXSA9IChVX0NIQVIpZ2V0YyhpbmZpbGUpOworICB9Cit9CisKKworLyoKKyAqIFJlYWQgb25lIHJvdyBvZiBwaXhlbHMuCisgKgorICogV2UgcHJvdmlkZSBzZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucyBkZXBlbmRpbmcgb24gaW5wdXQgZmlsZSBmb3JtYXQuCisgKi8KKworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF84Yml0X2dyYXlfcm93KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQorLyogVGhpcyB2ZXJzaW9uIGlzIGZvciByZWFkaW5nIDgtYml0IGdyYXlzY2FsZSBwaXhlbHMgKi8KK3sKKyAgdGdhX3NvdXJjZV9wdHIgc291cmNlID0gKHRnYV9zb3VyY2VfcHRyKXNpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworCisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgKCpzb3VyY2UtPnJlYWRfcGl4ZWwpIChzb3VyY2UpOyAvKiBMb2FkIG5leHQgcGl4ZWwgaW50byB0Z2FfcGl4ZWwgKi8KKyAgICAqcHRyKysgPSAoSlNBTVBMRSlVQ0goc291cmNlLT50Z2FfcGl4ZWxbMF0pOworICB9CisgIHJldHVybiAxOworfQorCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK2dldF84Yml0X3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyA4LWJpdCBjb2xvcm1hcCBpbmRleGVzICovCit7CisgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cilzaW5mbzsKKyAgcmVnaXN0ZXIgaW50IHQ7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIHJlZ2lzdGVyIEpTQU1QQVJSQVkgY29sb3JtYXAgPSBzb3VyY2UtPmNvbG9ybWFwOworCisgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKKyAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgKCpzb3VyY2UtPnJlYWRfcGl4ZWwpIChzb3VyY2UpOyAvKiBMb2FkIG5leHQgcGl4ZWwgaW50byB0Z2FfcGl4ZWwgKi8KKyAgICB0ID0gVUNIKHNvdXJjZS0+dGdhX3BpeGVsWzBdKTsKKyAgICAqcHRyKysgPSBjb2xvcm1hcFswXVt0XTsKKyAgICAqcHRyKysgPSBjb2xvcm1hcFsxXVt0XTsKKyAgICAqcHRyKysgPSBjb2xvcm1hcFsyXVt0XTsKKyAgfQorICByZXR1cm4gMTsKK30KKworTUVUSE9EREVGKEpESU1FTlNJT04pCitnZXRfMTZiaXRfcm93KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQorLyogVGhpcyB2ZXJzaW9uIGlzIGZvciByZWFkaW5nIDE2LWJpdCBwaXhlbHMgKi8KK3sKKyAgdGdhX3NvdXJjZV9wdHIgc291cmNlID0gKHRnYV9zb3VyY2VfcHRyKXNpbmZvOworICByZWdpc3RlciBpbnQgdDsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICgqc291cmNlLT5yZWFkX3BpeGVsKSAoc291cmNlKTsgLyogTG9hZCBuZXh0IHBpeGVsIGludG8gdGdhX3BpeGVsICovCisgICAgdCA9IFVDSChzb3VyY2UtPnRnYV9waXhlbFswXSk7CisgICAgdCArPSBVQ0goc291cmNlLT50Z2FfcGl4ZWxbMV0pIDw8IDg7CisgICAgLyogV2UgZXhwYW5kIDUgYml0IGRhdGEgdG8gOCBiaXQgc2FtcGxlIHdpZHRoLgorICAgICAqIFRoZSBmb3JtYXQgb2YgdGhlIDE2LWJpdCAoTFNCIGZpcnN0KSBpbnB1dCB3b3JkIGlzCisgICAgICogICAgIHhSUlJSUkdHR0dHQkJCQkIKKyAgICAgKi8KKyAgICBwdHJbMl0gPSAoSlNBTVBMRSljNXRvOGJpdHNbdCAmIDB4MUZdOworICAgIHQgPj49IDU7CisgICAgcHRyWzFdID0gKEpTQU1QTEUpYzV0bzhiaXRzW3QgJiAweDFGXTsKKyAgICB0ID4+PSA1OworICAgIHB0clswXSA9IChKU0FNUExFKWM1dG84Yml0c1t0ICYgMHgxRl07CisgICAgcHRyICs9IDM7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0XzI0Yml0X3JvdyhqX2NvbXByZXNzX3B0ciBjaW5mbywgY2pwZWdfc291cmNlX3B0ciBzaW5mbykKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmVhZGluZyAyNC1iaXQgcGl4ZWxzICovCit7CisgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cilzaW5mbzsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKworICBwdHIgPSBzb3VyY2UtPnB1Yi5idWZmZXJbMF07CisgIGZvciAoY29sID0gY2luZm8tPmltYWdlX3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICgqc291cmNlLT5yZWFkX3BpeGVsKSAoc291cmNlKTsgLyogTG9hZCBuZXh0IHBpeGVsIGludG8gdGdhX3BpeGVsICovCisgICAgKnB0cisrID0gKEpTQU1QTEUpVUNIKHNvdXJjZS0+dGdhX3BpeGVsWzJdKTsgLyogY2hhbmdlIEJHUiB0byBSR0Igb3JkZXIgKi8KKyAgICAqcHRyKysgPSAoSlNBTVBMRSlVQ0goc291cmNlLT50Z2FfcGl4ZWxbMV0pOworICAgICpwdHIrKyA9IChKU0FNUExFKVVDSChzb3VyY2UtPnRnYV9waXhlbFswXSk7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUYXJnYSBhbHNvIGRlZmluZXMgYSAzMi1iaXQgcGl4ZWwgZm9ybWF0IHdpdGggb3JkZXIgQixHLFIsQS4KKyAqIFdlIHByZXNlbnRseSBpZ25vcmUgdGhlIGF0dHJpYnV0ZSBieXRlLCBzbyB0aGUgY29kZSBmb3IgcmVhZGluZworICogdGhlc2UgcGl4ZWxzIGlzIGlkZW50aWNhbCB0byB0aGUgMjQtYml0IHJvdXRpbmUgYWJvdmUuCisgKiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFjdHVhbCBwaXhlbCBsZW5ndGggaXMgb25seSBrbm93biB0byByZWFkX3BpeGVsLgorICovCisKKyNkZWZpbmUgZ2V0XzMyYml0X3JvdyAgZ2V0XzI0Yml0X3JvdworCisKKy8qCisgKiBUaGlzIG1ldGhvZCBpcyBmb3IgcmUtcmVhZGluZyB0aGUgaW5wdXQgZGF0YSBpbiBzdGFuZGFyZCB0b3AtZG93bgorICogcm93IG9yZGVyLiAgVGhlIGVudGlyZSBpbWFnZSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQgaW50byB3aG9sZV9pbWFnZQorICogd2l0aCBwcm9wZXIgY29udmVyc2lvbiBvZiBwaXhlbCBmb3JtYXQsIGJ1dCBpdCdzIGluIGEgZnVubnkgcm93IG9yZGVyLgorICovCisKK01FVEhPRERFRihKRElNRU5TSU9OKQorZ2V0X21lbW9yeV9yb3coal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cilzaW5mbzsKKyAgSkRJTUVOU0lPTiBzb3VyY2Vfcm93OworCisgIC8qIENvbXB1dGUgcm93IG9mIHNvdXJjZSB0aGF0IG1hcHMgdG8gY3VycmVudF9yb3cgb2Ygbm9ybWFsIG9yZGVyICovCisgIC8qIEZvciBub3csIGFzc3VtZSBpbWFnZSBpcyBib3R0b20tdXAgYW5kIG5vdCBpbnRlcmxhY2VkLiAqLworICAvKiBORUVEUyBXT1JLIHRvIHN1cHBvcnQgaW50ZXJsYWNlZCBpbWFnZXMhICovCisgIHNvdXJjZV9yb3cgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0IC0gc291cmNlLT5jdXJyZW50X3JvdyAtIDE7CisKKyAgLyogRmV0Y2ggdGhhdCByb3cgZnJvbSB2aXJ0dWFsIGFycmF5ICovCisgIHNvdXJjZS0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBzb3VyY2UtPndob2xlX2ltYWdlLAorICAgICBzb3VyY2Vfcm93LCAoSkRJTUVOU0lPTikxLCBGQUxTRSk7CisKKyAgc291cmNlLT5jdXJyZW50X3JvdysrOworICByZXR1cm4gMTsKK30KKworCisvKgorICogVGhpcyBtZXRob2QgbG9hZHMgdGhlIGltYWdlIGludG8gd2hvbGVfaW1hZ2UgZHVyaW5nIHRoZSBmaXJzdCBjYWxsIG9uCisgKiBnZXRfcGl4ZWxfcm93cy4gIFRoZSBnZXRfcGl4ZWxfcm93cyBwb2ludGVyIGlzIHRoZW4gYWRqdXN0ZWQgdG8gY2FsbAorICogZ2V0X21lbW9yeV9yb3cgb24gc3Vic2VxdWVudCBjYWxscy4KKyAqLworCitNRVRIT0RERUYoSkRJTUVOU0lPTikKK3ByZWxvYWRfaW1hZ2Uoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cilzaW5mbzsKKyAgSkRJTUVOU0lPTiByb3c7CisgIGNkX3Byb2dyZXNzX3B0ciBwcm9ncmVzcyA9IChjZF9wcm9ncmVzc19wdHIpY2luZm8tPnByb2dyZXNzOworCisgIC8qIFJlYWQgdGhlIGRhdGEgaW50byBhIHZpcnR1YWwgYXJyYXkgaW4gaW5wdXQtZmlsZSByb3cgb3JkZXIuICovCisgIGZvciAocm93ID0gMDsgcm93IDwgY2luZm8tPmltYWdlX2hlaWdodDsgcm93KyspIHsKKyAgICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2NvdW50ZXIgPSAobG9uZylyb3c7CisgICAgICBwcm9ncmVzcy0+cHViLnBhc3NfbGltaXQgPSAobG9uZyljaW5mby0+aW1hZ2VfaGVpZ2h0OworICAgICAgKCpwcm9ncmVzcy0+cHViLnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgICB9CisgICAgc291cmNlLT5wdWIuYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgc291cmNlLT53aG9sZV9pbWFnZSwgcm93LCAoSkRJTUVOU0lPTikxLCBUUlVFKTsKKyAgICAoKnNvdXJjZS0+Z2V0X3BpeGVsX3Jvd3MpIChjaW5mbywgc2luZm8pOworICB9CisgIGlmIChwcm9ncmVzcyAhPSBOVUxMKQorICAgIHByb2dyZXNzLT5jb21wbGV0ZWRfZXh0cmFfcGFzc2VzKys7CisKKyAgLyogU2V0IHVwIHRvIHJlYWQgZnJvbSB0aGUgdmlydHVhbCBhcnJheSBpbiB1bnNjcmFtYmxlZCBvcmRlciAqLworICBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyA9IGdldF9tZW1vcnlfcm93OworICBzb3VyY2UtPmN1cnJlbnRfcm93ID0gMDsKKyAgLyogQW5kIHJlYWQgdGhlIGZpcnN0IHJvdyAqLworICByZXR1cm4gZ2V0X21lbW9yeV9yb3coY2luZm8sIHNpbmZvKTsKK30KKworCisvKgorICogUmVhZCB0aGUgZmlsZSBoZWFkZXI7IHJldHVybiBpbWFnZSBzaXplIGFuZCBjb21wb25lbnQgY291bnQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9pbnB1dF90Z2Eoal9jb21wcmVzc19wdHIgY2luZm8sIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pCit7CisgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cilzaW5mbzsKKyAgVV9DSEFSIHRhcmdhaGVhZGVyWzE4XTsKKyAgaW50IGlkbGVuLCBjbWFwdHlwZSwgc3VidHlwZSwgZmxhZ3MsIGludGVybGFjZV90eXBlLCBjb21wb25lbnRzOworICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgbWFwbGVuOworICBib29sZWFuIGlzX2JvdHRvbV91cDsKKworI2RlZmluZSBHRVRfMkIob2Zmc2V0KSAgKCh1bnNpZ25lZCBpbnQpVUNIKHRhcmdhaGVhZGVyW29mZnNldF0pICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGludClVQ0godGFyZ2FoZWFkZXJbb2Zmc2V0ICsgMV0pKSA8PCA4KSkKKworICBpZiAoIVJlYWRPSyhzb3VyY2UtPnB1Yi5pbnB1dF9maWxlLCB0YXJnYWhlYWRlciwgMTgpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU9GKTsKKworICAvKiBQcmV0ZW5kICIxNS1iaXQiIHBpeGVscyBhcmUgMTYtYml0IC0tLSB3ZSBpZ25vcmUgYXR0cmlidXRlIGJpdCBhbnl3YXkgKi8KKyAgaWYgKHRhcmdhaGVhZGVyWzE2XSA9PSAxNSkKKyAgICB0YXJnYWhlYWRlclsxNl0gPSAxNjsKKworICBpZGxlbiA9IFVDSCh0YXJnYWhlYWRlclswXSk7CisgIGNtYXB0eXBlID0gVUNIKHRhcmdhaGVhZGVyWzFdKTsKKyAgc3VidHlwZSA9IFVDSCh0YXJnYWhlYWRlclsyXSk7CisgIG1hcGxlbiA9IEdFVF8yQig1KTsKKyAgd2lkdGggPSBHRVRfMkIoMTIpOworICBoZWlnaHQgPSBHRVRfMkIoMTQpOworICBzb3VyY2UtPnBpeGVsX3NpemUgPSBVQ0godGFyZ2FoZWFkZXJbMTZdKSA+PiAzOworICBmbGFncyA9IFVDSCh0YXJnYWhlYWRlclsxN10pOyAvKiBJbWFnZSBEZXNjcmlwdG9yIGJ5dGUgKi8KKworICBpc19ib3R0b21fdXAgPSAoKGZsYWdzICYgMHgyMCkgPT0gMCk7IC8qIGJpdCA1IHNldCA9PiB0b3AtZG93biAqLworICBpbnRlcmxhY2VfdHlwZSA9IGZsYWdzID4+IDY7ICAvKiBiaXRzIDYvNyBhcmUgaW50ZXJsYWNlIGNvZGUgKi8KKworICBpZiAoY21hcHR5cGUgPiAxIHx8ICAgICAgICAgICAvKiBjbWFwdHlwZSBtdXN0IGJlIDAgb3IgMSAqLworICAgICAgc291cmNlLT5waXhlbF9zaXplIDwgMSB8fCBzb3VyY2UtPnBpeGVsX3NpemUgPiA0IHx8CisgICAgICAoVUNIKHRhcmdhaGVhZGVyWzE2XSkgJiA3KSAhPSAwIHx8IC8qIGJpdHMvcGl4ZWwgbXVzdCBiZSBtdWx0aXBsZSBvZiA4ICovCisgICAgICBpbnRlcmxhY2VfdHlwZSAhPSAwIHx8ICAgICAgLyogY3VycmVudGx5IGRvbid0IGFsbG93IGludGVybGFjZWQgaW1hZ2UgKi8KKyAgICAgIHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApICAvKiBpbWFnZSB3aWR0aC9oZWlnaHQgbXVzdCBiZSBub24temVybyAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEdBX0JBRFBBUk1TKTsKKworICBpZiAoc3VidHlwZSA+IDgpIHsKKyAgICAvKiBJdCdzIGFuIFJMRS1jb2RlZCBmaWxlICovCisgICAgc291cmNlLT5yZWFkX3BpeGVsID0gcmVhZF9ybGVfcGl4ZWw7CisgICAgc291cmNlLT5ibG9ja19jb3VudCA9IHNvdXJjZS0+ZHVwX3BpeGVsX2NvdW50ID0gMDsKKyAgICBzdWJ0eXBlIC09IDg7CisgIH0gZWxzZSB7CisgICAgLyogTm9uLVJMRSBmaWxlICovCisgICAgc291cmNlLT5yZWFkX3BpeGVsID0gcmVhZF9ub25fcmxlX3BpeGVsOworICB9CisKKyAgLyogTm93IHNob3VsZCBoYXZlIHN1YnR5cGUgMSwgMiwgb3IgMyAqLworICBjb21wb25lbnRzID0gMzsgICAgICAgICAgICAgICAvKiB1bnRpbCBwcm92ZW4gZGlmZmVyZW50ICovCisgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7CisKKyAgc3dpdGNoIChzdWJ0eXBlKSB7CisgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgIC8qIENvbG9ybWFwcGVkIGltYWdlICovCisgICAgaWYgKHNvdXJjZS0+cGl4ZWxfc2l6ZSA9PSAxICYmIGNtYXB0eXBlID09IDEpCisgICAgICBzb3VyY2UtPmdldF9waXhlbF9yb3dzID0gZ2V0XzhiaXRfcm93OworICAgIGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEdBX0JBRFBBUk1TKTsKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19UR0FfTUFQUEVELCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBicmVhazsKKyAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgLyogUkdCIGltYWdlICovCisgICAgc3dpdGNoIChzb3VyY2UtPnBpeGVsX3NpemUpIHsKKyAgICBjYXNlIDI6CisgICAgICBzb3VyY2UtPmdldF9waXhlbF9yb3dzID0gZ2V0XzE2Yml0X3JvdzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIHNvdXJjZS0+Z2V0X3BpeGVsX3Jvd3MgPSBnZXRfMjRiaXRfcm93OworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgc291cmNlLT5nZXRfcGl4ZWxfcm93cyA9IGdldF8zMmJpdF9yb3c7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9UR0FfQkFEUEFSTVMpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX1RHQSwgd2lkdGgsIGhlaWdodCk7CisgICAgYnJlYWs7CisgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgIC8qIEdyYXlzY2FsZSBpbWFnZSAqLworICAgIGNvbXBvbmVudHMgPSAxOworICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19HUkFZU0NBTEU7CisgICAgaWYgKHNvdXJjZS0+cGl4ZWxfc2l6ZSA9PSAxKQorICAgICAgc291cmNlLT5nZXRfcGl4ZWxfcm93cyA9IGdldF84Yml0X2dyYXlfcm93OworICAgIGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEdBX0JBRFBBUk1TKTsKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19UR0FfR1JBWSwgd2lkdGgsIGhlaWdodCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9UR0FfQkFEUEFSTVMpOworICAgIGJyZWFrOworICB9CisKKyAgaWYgKGlzX2JvdHRvbV91cCkgeworICAgIC8qIENyZWF0ZSBhIHZpcnR1YWwgYXJyYXkgdG8gYnVmZmVyIHRoZSB1cHNpZGUtZG93biBpbWFnZS4gKi8KKyAgICBzb3VyY2UtPndob2xlX2ltYWdlID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKKyAgICAgICAoSkRJTUVOU0lPTil3aWR0aCAqIGNvbXBvbmVudHMsIChKRElNRU5TSU9OKWhlaWdodCwgKEpESU1FTlNJT04pMSk7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MgPSAoY2RfcHJvZ3Jlc3NfcHRyKWNpbmZvLT5wcm9ncmVzczsKKyAgICAgIHByb2dyZXNzLT50b3RhbF9leHRyYV9wYXNzZXMrKzsgLyogY291bnQgZmlsZSBpbnB1dCBhcyBzZXBhcmF0ZSBwYXNzICovCisgICAgfQorICAgIC8qIHNvdXJjZS0+cHViLmJ1ZmZlciB3aWxsIHBvaW50IHRvIHRoZSB2aXJ0dWFsIGFycmF5LiAqLworICAgIHNvdXJjZS0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOyAvKiBpbiBjYXNlIGFueW9uZSBsb29rcyBhdCBpdCAqLworICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gcHJlbG9hZF9pbWFnZTsKKyAgfSBlbHNlIHsKKyAgICAvKiBEb24ndCBuZWVkIGEgdmlydHVhbCBhcnJheSwgYnV0IGRvIG5lZWQgYSBvbmUtcm93IGlucHV0IGJ1ZmZlci4gKi8KKyAgICBzb3VyY2UtPndob2xlX2ltYWdlID0gTlVMTDsKKyAgICBzb3VyY2UtPnB1Yi5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAoSkRJTUVOU0lPTil3aWR0aCAqIGNvbXBvbmVudHMsIChKRElNRU5TSU9OKTEpOworICAgIHNvdXJjZS0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOworICAgIHNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzID0gc291cmNlLT5nZXRfcGl4ZWxfcm93czsKKyAgfQorCisgIHdoaWxlIChpZGxlbi0tKSAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgSUQgZmllbGQgKi8KKyAgICAodm9pZClyZWFkX2J5dGUoc291cmNlKTsKKworICBpZiAobWFwbGVuID4gMCkgeworICAgIGlmIChtYXBsZW4gPiAyNTYgfHwgR0VUXzJCKDMpICE9IDApCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RHQV9CQURDTUFQKTsKKyAgICAvKiBBbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSB0aGUgY29sb3JtYXAgKi8KKyAgICBzb3VyY2UtPmNvbG9ybWFwID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIChKRElNRU5TSU9OKW1hcGxlbiwgKEpESU1FTlNJT04pMyk7CisgICAgLyogYW5kIHJlYWQgaXQgZnJvbSB0aGUgZmlsZSAqLworICAgIHJlYWRfY29sb3JtYXAoc291cmNlLCAoaW50KW1hcGxlbiwgVUNIKHRhcmdhaGVhZGVyWzddKSk7CisgIH0gZWxzZSB7CisgICAgaWYgKGNtYXB0eXBlKSAgICAgICAgICAgICAgIC8qIGJ1dCB5b3UgcHJvbWlzZWQgYSBjbWFwISAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9UR0FfQkFEUEFSTVMpOworICAgIHNvdXJjZS0+Y29sb3JtYXAgPSBOVUxMOworICB9CisKKyAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSBjb21wb25lbnRzOworICBjaW5mby0+ZGF0YV9wcmVjaXNpb24gPSA4OworICBjaW5mby0+aW1hZ2Vfd2lkdGggPSB3aWR0aDsKKyAgY2luZm8tPmltYWdlX2hlaWdodCA9IGhlaWdodDsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfaW5wdXRfdGdhKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKQoreworICAvKiBubyB3b3JrICovCit9CisKKworLyoKKyAqIFRoZSBtb2R1bGUgc2VsZWN0aW9uIHJvdXRpbmUgZm9yIFRhcmdhIGZvcm1hdCBpbnB1dC4KKyAqLworCitHTE9CQUwoY2pwZWdfc291cmNlX3B0cikKK2ppbml0X3JlYWRfdGFyZ2Eoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZTsKKworICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QgKi8KKyAgc291cmNlID0gKHRnYV9zb3VyY2VfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRnYV9zb3VyY2Vfc3RydWN0KSk7CisgIHNvdXJjZS0+Y2luZm8gPSBjaW5mbzsgICAgICAgIC8qIG1ha2UgYmFjayBsaW5rIGZvciBzdWJyb3V0aW5lcyAqLworICAvKiBGaWxsIGluIG1ldGhvZCBwdHJzLCBleGNlcHQgZ2V0X3BpeGVsX3Jvd3Mgd2hpY2ggc3RhcnRfaW5wdXQgc2V0cyAqLworICBzb3VyY2UtPnB1Yi5zdGFydF9pbnB1dCA9IHN0YXJ0X2lucHV0X3RnYTsKKyAgc291cmNlLT5wdWIuZmluaXNoX2lucHV0ID0gZmluaXNoX2lucHV0X3RnYTsKKworICByZXR1cm4gKGNqcGVnX3NvdXJjZV9wdHIpc291cmNlOworfQorCisjZW5kaWYgLyogVEFSR0FfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL0Rpc3RyaWJ1dGlvbi54bWwuaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL0Rpc3RyaWJ1dGlvbi54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmNzllZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvRGlzdHJpYnV0aW9uLnhtbC5pbgpAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPGluc3RhbGxlci1ndWktc2NyaXB0IG1pblNwZWNWZXJzaW9uPSIxIj4KKwk8dGl0bGU+QENNQUtFX1BST0pFQ1RfTkFNRUA8L3RpdGxlPgorCTx3ZWxjb21lIGZpbGU9IldlbGNvbWUucnRmIiAvPgorCTxyZWFkbWUgZmlsZT0iUmVhZE1lLnR4dCIgLz4KKwk8bGljZW5zZSBmaWxlPSJMaWNlbnNlLnJ0ZiIgLz4KKwk8ZG9tYWlucworCQllbmFibGVfYW55d2hlcmU9ImZhbHNlIgorCQllbmFibGVfY3VycmVudFVzZXJIb21lPSJmYWxzZSIKKwkJZW5hYmxlX2xvY2FsU3lzdGVtPSJ0cnVlIgorCS8+CisJPG9wdGlvbnMgY3VzdG9taXplPSJuZXZlciIgLz4KKwk8Y2hvaWNlcy1vdXRsaW5lPgorCQk8bGluZSBjaG9pY2U9ImRlZmF1bHQiPgorCQkJPGxpbmUgY2hvaWNlPSJAUEtHSURAIi8+CisJCTwvbGluZT4KKwk8L2Nob2ljZXMtb3V0bGluZT4KKwk8Y2hvaWNlIGlkPSJkZWZhdWx0Ii8+CisJPGNob2ljZSBpZD0iQFBLR0lEQCIgdmlzaWJsZT0iZmFsc2UiPgorCQk8cGtnLXJlZiBpZD0iQFBLR0lEQCIvPgorCTwvY2hvaWNlPgorCTxwa2ctcmVmIGF1dGg9InJvb3QiCisJCWlkPSJAUEtHSURAIj5AUEtHTkFNRUAucGtnPC9wa2ctcmVmPgorPC9pbnN0YWxsZXItZ3VpLXNjcmlwdD4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvTGljZW5zZS5ydGYgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL0xpY2Vuc2UucnRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwNzNhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL0xpY2Vuc2UucnRmCkBAIC0wLDAgKzEsMjAgQEAKK3tccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTAzOFxjb2NvYXN1YnJ0ZjM1MAore1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30KK3tcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KK3tcKlxsaXN0dGFibGV7XGxpc3RcbGlzdHRlbXBsYXRlaWQxXGxpc3RoeWJyaWR7XGxpc3RsZXZlbFxsZXZlbG5mYzIzXGxldmVsbmZjbjIzXGxldmVsamMwXGxldmVsamNuMFxsZXZlbGZvbGxvdzBcbGV2ZWxzdGFydGF0MVxsZXZlbHNwYWNlMzYwXGxldmVsaW5kZW50MHtcKlxsZXZlbG1hcmtlciBce2Rpc2NcfX17XGxldmVsdGV4dFxsZXZlbHRlbXBsYXRlaWQxXCcwMVx1YzBcdTgyMjYgO317XGxldmVsbnVtYmVyczt9XGZpLTM2MFxsaTcyMFxsaW43MjAgfXtcbGlzdG5hbWUgO31cbGlzdGlkMX19Cit7XCpcbGlzdG92ZXJyaWRldGFibGV7XGxpc3RvdmVycmlkZVxsaXN0aWQxXGxpc3RvdmVycmlkZWNvdW50MFxsczF9fQorXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3c5ODIwXHZpZXdoODQ4MFx2aWV3a2luZDAKK1xkZWZ0YWI3MjAKK1xwYXJkXHBhcmRlZnRhYjcyMAorCitcZjBcZnMyNCBcY2YwIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcCitcCitccGFyZFx0eDIyMFx0eDcyMFxwYXJkZWZ0YWI3MjBcbGk3MjBcZmktNzIwCitcbHMxXGlsdmwwXGNmMCB7XGxpc3R0ZXh0CVwnOTUJfVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cCit7XGxpc3R0ZXh0CVwnOTUJfVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cCit7XGxpc3R0ZXh0CVwnOTUJfU5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxYworXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjAKK1xjZjAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7ICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlwKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL1JlYWRNZS50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL1JlYWRNZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5MDEyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvUmVhZE1lLnR4dApAQCAtMCwwICsxLDUgQEAKK2xpYmpwZWctdHVyYm8gaXMgYSBKUEVHIGltYWdlIGNvZGVjIHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyAoTU1YLCBTU0UyLCBBVlgyLCBORU9OLCBBbHRpVmVjKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb24geDg2LCB4ODYtNjQsIEFSTSwgYW5kIFBvd2VyUEMgc3lzdGVtcywgYXMgd2VsbCBhcyBwcm9ncmVzc2l2ZSBKUEVHIGNvbXByZXNzaW9uIG9uIHg4NiBhbmQgeDg2LTY0IHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gaXMgZ2VuZXJhbGx5IDItNnggYXMgZmFzdCBhcyBsaWJqcGVnLCBhbGwgZWxzZSBiZWluZyBlcXVhbC4gIE9uIG90aGVyIHR5cGVzIG9mIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gY2FuIHN0aWxsIG91dHBlcmZvcm0gbGlianBlZyBieSBhIHNpZ25pZmljYW50IGFtb3VudCwgYnkgdmlydHVlIG9mIGl0cyBoaWdobHktb3B0aW1pemVkIEh1ZmZtYW4gY29kaW5nIHJvdXRpbmVzLiAgSW4gbWFueSBjYXNlcywgdGhlIHBlcmZvcm1hbmNlIG9mIGxpYmpwZWctdHVyYm8gcml2YWxzIHRoYXQgb2YgcHJvcHJpZXRhcnkgaGlnaC1zcGVlZCBKUEVHIGNvZGVjcy4KKworbGlianBlZy10dXJibyBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIGxpYmpwZWcgQVBJIGFzIHdlbGwgYXMgdGhlIGxlc3MgcG93ZXJmdWwgYnV0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIFR1cmJvSlBFRyBBUEkuICBsaWJqcGVnLXR1cmJvIGFsc28gZmVhdHVyZXMgY29sb3JzcGFjZSBleHRlbnNpb25zIHRoYXQgYWxsb3cgaXQgdG8gY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIDMyLWJpdCBhbmQgYmlnLWVuZGlhbiBwaXhlbCBidWZmZXJzIChSR0JYLCBYQkdSLCBldGMuKSwgYXMgd2VsbCBhcyBhIGZ1bGwtZmVhdHVyZWQgSmF2YSBpbnRlcmZhY2UuCisKK2xpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1ELCBhbiBNTVgtYWNjZWxlcmF0ZWQgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHY2YiBkZXZlbG9wZWQgYnkgTWl5YXNha2EgTWFzYXJ1LiAgVGhlIFRpZ2VyVk5DIGFuZCBWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjIGluIDIwMDksIGFuZCBpbiBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbCBvZiBtYWtpbmcgaGlnaC1zcGVlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVjaG5vbG9neSBhdmFpbGFibGUgdG8gYSBicm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9XZWxjb21lLnJ0ZiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvV2VsY29tZS5ydGYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTU3MGM1YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvV2VsY29tZS5ydGYKQEAgLTAsMCArMSwxNyBAQAore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMDM4XGNvY29hc3VicnRmMzYwCit7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7XGYxXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQU01UO30KK3tcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KK1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTAwMFx2aWV3aDg0MDBcdmlld2tpbmQwCitcZGVmdGFiNzIwCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwXGZzMjQgXGNmMCBUaGlzIGluc3RhbGxlciB3aWxsIGluc3RhbGwgdGhlIGxpYmpwZWctdHVyYm8gU0RLIGFuZCBydW4tdGltZSBsaWJyYXJpZXMgb250byB5b3VyIGNvbXB1dGVyIHNvIHRoYXQgeW91IGNhbiB1c2UgbGlianBlZy10dXJibyB0byBidWlsZCBuZXcgYXBwbGljYXRpb25zIG9yIGFjY2VsZXJhdGUgZXhpc3Rpbmcgb25lcy4gIFRvIHJlbW92ZSB0aGUgbGlianBlZy10dXJibyBwYWNrYWdlLCBydW5cCitcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgICAvb3B0L2xpYmpwZWctdHVyYm8vYmluL3VuaW5zdGFsbFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBcCitmcm9tIHRoZSBjb21tYW5kIGxpbmUuXAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvZGViLWNvbnRyb2wuaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL2RlYi1jb250cm9sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTMxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL2RlYi1jb250cm9sLmluCkBAIC0wLDAgKzEsMzIgQEAKK1BhY2thZ2U6IHtfX1BLR05BTUV9CitWZXJzaW9uOiBAVkVSU0lPTkAtQEJVSUxEQAorU2VjdGlvbjogbWlzYworUHJpb3JpdHk6IG9wdGlvbmFsCitBcmNoaXRlY3R1cmU6IHtfX0FSQ0h9CitFc3NlbnRpYWw6IG5vCitNYWludGFpbmVyOiBAUEtHVkVORE9SQCA8QFBLR0VNQUlMQD4KK0hvbWVwYWdlOiBAUEtHVVJMQAorSW5zdGFsbGVkLVNpemU6IHtfX1NJWkV9CitEZXNjcmlwdGlvbjogQSBTSU1ELWFjY2VsZXJhdGVkIEpQRUcgY29kZWMgdGhhdCBwcm92aWRlcyBib3RoIHRoZSBsaWJqcGVnIGFuZCBUdXJib0pQRUcgQVBJcworIGxpYmpwZWctdHVyYm8gaXMgYSBKUEVHIGltYWdlIGNvZGVjIHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyAoTU1YLCBTU0UyLAorIEFWWDIsIE5FT04sIEFsdGlWZWMpIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgorIG9uIHg4NiwgeDg2LTY0LCBBUk0sIGFuZCBQb3dlclBDIHN5c3RlbXMsIGFzIHdlbGwgYXMgcHJvZ3Jlc3NpdmUgSlBFRworIGNvbXByZXNzaW9uIG9uIHg4NiBhbmQgeDg2LTY0IHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gaXMKKyBnZW5lcmFsbHkgMi02eCBhcyBmYXN0IGFzIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLiAgT24gb3RoZXIgdHlwZXMgb2YKKyBzeXN0ZW1zLCBsaWJqcGVnLXR1cmJvIGNhbiBzdGlsbCBvdXRwZXJmb3JtIGxpYmpwZWcgYnkgYSBzaWduaWZpY2FudCBhbW91bnQsCisgYnkgdmlydHVlIG9mIGl0cyBoaWdobHktb3B0aW1pemVkIEh1ZmZtYW4gY29kaW5nIHJvdXRpbmVzLiAgSW4gbWFueSBjYXNlcywgdGhlCisgcGVyZm9ybWFuY2Ugb2YgbGlianBlZy10dXJibyByaXZhbHMgdGhhdCBvZiBwcm9wcmlldGFyeSBoaWdoLXNwZWVkIEpQRUcKKyBjb2RlY3MuCisgLgorIGxpYmpwZWctdHVyYm8gaW1wbGVtZW50cyBib3RoIHRoZSB0cmFkaXRpb25hbCBsaWJqcGVnIEFQSSBhcyB3ZWxsIGFzIHRoZSBsZXNzCisgcG93ZXJmdWwgYnV0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIFR1cmJvSlBFRyBBUEkuICBsaWJqcGVnLXR1cmJvIGFsc28gZmVhdHVyZXMKKyBjb2xvcnNwYWNlIGV4dGVuc2lvbnMgdGhhdCBhbGxvdyBpdCB0byBjb21wcmVzcyBmcm9tL2RlY29tcHJlc3MgdG8gMzItYml0IGFuZAorIGJpZy1lbmRpYW4gcGl4ZWwgYnVmZmVycyAoUkdCWCwgWEJHUiwgZXRjLiksIGFzIHdlbGwgYXMgYSBmdWxsLWZlYXR1cmVkIEphdmEKKyBpbnRlcmZhY2UuCisgLgorIGxpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1ELCBhbiBNTVgtYWNjZWxlcmF0ZWQKKyBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdjZiIGRldmVsb3BlZCBieSBNaXlhc2FrYSBNYXNhcnUuICBUaGUgVGlnZXJWTkMgYW5kCisgVmlydHVhbEdMIHByb2plY3RzIG1hZGUgbnVtZXJvdXMgZW5oYW5jZW1lbnRzIHRvIHRoZSBjb2RlYyBpbiAyMDA5LCBhbmQgaW4KKyBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbAorIG9mIG1ha2luZyBoaWdoLXNwZWVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiB0ZWNobm9sb2d5IGF2YWlsYWJsZSB0byBhCisgYnJvYWRlciByYW5nZSBvZiB1c2VycyBhbmQgZGV2ZWxvcGVycy4KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvaW5zdGFsbGVyLm5zaS5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvaW5zdGFsbGVyLm5zaS5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMGNkNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9pbnN0YWxsZXIubnNpLmluCkBAIC0wLDAgKzEsMTkzIEBACishaW5jbHVkZSB4NjQubnNoCitOYW1lICJAQ01BS0VfUFJPSkVDVF9OQU1FQCBTREsgZm9yIEBJTlNUX1BMQVRGT1JNQCIKK091dEZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9QElOU1RfTkFNRUAuZXhlIgorSW5zdGFsbERpciAiQElOU1RfRElSQCIKKworU2V0Q29tcHJlc3NvciBiemlwMgorCitQYWdlIGRpcmVjdG9yeQorUGFnZSBpbnN0ZmlsZXMKKworVW5pbnN0UGFnZSB1bmluc3RDb25maXJtCitVbmluc3RQYWdlIGluc3RmaWxlcworCitTZWN0aW9uICJAQ01BS0VfUFJPSkVDVF9OQU1FQCBTREsgZm9yIEBJTlNUX1BMQVRGT1JNQCAocmVxdWlyZWQpIgorIWlmZGVmIFdJTjY0CisJJHtJZn0gJHtSdW5uaW5nWDY0fQorCSR7RGlzYWJsZVg2NEZTUmVkaXJlY3Rpb259CisJJHtFbmRpZn0KKyFlbmRpZgorCVNlY3Rpb25JbiBSTworIWlmZGVmIEdDQworCUlmRmlsZUV4aXN0cyAkU1lTRElSL2xpYnR1cmJvanBlZy5kbGwgZXhpc3RzIDAKKyFlbHNlCisJSWZGaWxlRXhpc3RzICRTWVNESVIvdHVyYm9qcGVnLmRsbCBleGlzdHMgMAorIWVuZGlmCisJZ290byBub3RleGlzdHMKKwlleGlzdHM6CishaWZkZWYgR0NDCisJTWVzc2FnZUJveCBNQl9PSyAiQW4gZXhpc3RpbmcgdmVyc2lvbiBvZiB0aGUgQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIGZvciBASU5TVF9QTEFURk9STUAgaXMgYWxyZWFkeSBpbnN0YWxsZWQuICBQbGVhc2UgdW5pbnN0YWxsIGl0IGZpcnN0LiIKKyFlbHNlCisJTWVzc2FnZUJveCBNQl9PSyAiQW4gZXhpc3RpbmcgdmVyc2lvbiBvZiB0aGUgQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIGZvciBASU5TVF9QTEFURk9STUAgb3IgdGhlIFR1cmJvSlBFRyBTREsgaXMgYWxyZWFkeSBpbnN0YWxsZWQuICBQbGVhc2UgdW5pbnN0YWxsIGl0IGZpcnN0LiIKKyFlbmRpZgorCXF1aXQKKworCW5vdGV4aXN0czoKKwlTZXRPdXRQYXRoICRTWVNESVIKKyFpZmRlZiBHQ0MKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQFxsaWJ0dXJib2pwZWcuZGxsIgorIWVsc2UKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQFwke0JVSUxERElSfXR1cmJvanBlZy5kbGwiCishZW5kaWYKKwlTZXRPdXRQYXRoICRJTlNURElSXGJpbgorIWlmZGVmIEdDQworCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXGxpYnR1cmJvanBlZy5kbGwiCishZWxzZQorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9dHVyYm9qcGVnLmRsbCIKKyFlbmRpZgorIWlmZGVmIEdDQworCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXGxpYmpwZWctQFNPX01BSk9SX1ZFUlNJT05ALmRsbCIKKyFlbHNlCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBcJHtCVUlMRERJUn1qcGVnQFNPX01BSk9SX1ZFUlNJT05ALmRsbCIKKyFlbmRpZgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9Y2pwZWcuZXhlIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9ZGpwZWcuZXhlIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9anBlZ3RyYW4uZXhlIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9dGpiZW5jaC5leGUiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBcJHtCVUlMRERJUn1yZGpwZ2NvbS5leGUiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBcJHtCVUlMRERJUn13cmpwZ2NvbS5leGUiCisJU2V0T3V0UGF0aCAkSU5TVERJUlxsaWIKKyFpZmRlZiBHQ0MKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQFxsaWJ0dXJib2pwZWcuZGxsLmEiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBcbGlidHVyYm9qcGVnLmEiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBcbGlianBlZy5kbGwuYSIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQFxsaWJqcGVnLmEiCisJU2V0T3V0UGF0aCAkSU5TVERJUlxsaWJccGtnY29uZmlnCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBccGtnc2NyaXB0c1xsaWJqcGVnLnBjIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXHBrZ3NjcmlwdHNcbGlidHVyYm9qcGVnLnBjIgorIWVsc2UKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQFwke0JVSUxERElSfXR1cmJvanBlZy5saWIiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkBcJHtCVUlMRERJUn10dXJib2pwZWctc3RhdGljLmxpYiIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQFwke0JVSUxERElSfWpwZWcubGliIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9anBlZy1zdGF0aWMubGliIgorIWVuZGlmCishaWZkZWYgSkFWQQorCVNldE91dFBhdGggJElOU1RESVJcY2xhc3NlcworCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXGphdmFcdHVyYm9qcGVnLmphciIKKyFlbmRpZgorCVNldE91dFBhdGggJElOU1RESVJcaW5jbHVkZQorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAXGpjb25maWcuaCIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFxqZXJyb3IuaCIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFxqbW9yZWNmZy5oIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAXGpwZWdsaWIuaCIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFx0dXJib2pwZWcuaCIKKwlTZXRPdXRQYXRoICRJTlNURElSXGRvYworCUZpbGUgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAXFJFQURNRS5pamciCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkBcUkVBRE1FLm1kIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAXExJQ0VOU0UubWQiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkBcZXhhbXBsZS50eHQiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkBcbGlianBlZy50eHQiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkBcc3RydWN0dXJlLnR4dCIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFx1c2FnZS50eHQiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkBcd2l6YXJkLnR4dCIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFx0amV4YW1wbGUuYyIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFxqYXZhXFRKRXhhbXBsZS5qYXZhIgorIWlmZGVmIEdDQworCVNldE91dFBhdGggJElOU1RESVJcbWFuXG1hbjEKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFxjanBlZy4xIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAXGRqcGVnLjEiCisJRmlsZSAiQENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkBcanBlZ3RyYW4uMSIKKwlGaWxlICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQFxyZGpwZ2NvbS4xIgorCUZpbGUgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAXHdyanBnY29tLjEiCishZW5kaWYKKworCVdyaXRlUmVnU3RyIEhLTE0gIlNPRlRXQVJFXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJJbnN0YWxsX0RpciIgIiRJTlNURElSIgorCisJV3JpdGVSZWdTdHIgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJEaXNwbGF5TmFtZSIgIkBDTUFLRV9QUk9KRUNUX05BTUVAIFNESyB2QFZFUlNJT05AIGZvciBASU5TVF9QTEFURk9STUAiCisJV3JpdGVSZWdTdHIgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJVbmluc3RhbGxTdHJpbmciICciJElOU1RESVJcdW5pbnN0YWxsX0BWRVJTSU9OQC5leGUiJworCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJOb01vZGlmeSIgMQorCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJOb1JlcGFpciIgMQorCVdyaXRlVW5pbnN0YWxsZXIgInVuaW5zdGFsbF9AVkVSU0lPTkAuZXhlIgorU2VjdGlvbkVuZAorCitTZWN0aW9uICJVbmluc3RhbGwiCishaWZkZWYgV0lONjQKKwkke0lmfSAke1J1bm5pbmdYNjR9CisJJHtEaXNhYmxlWDY0RlNSZWRpcmVjdGlvbn0KKwkke0VuZGlmfQorIWVuZGlmCisKKwlTZXRTaGVsbFZhckNvbnRleHQgYWxsCisKKwlEZWxldGVSZWdLZXkgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiCisJRGVsZXRlUmVnS2V5IEhLTE0gIlNPRlRXQVJFXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiCisKKyFpZmRlZiBHQ0MKKwlEZWxldGUgJElOU1RESVJcYmluXGxpYmpwZWctQFNPX01BSk9SX1ZFUlNJT05ALmRsbAorCURlbGV0ZSAkSU5TVERJUlxiaW5cbGlidHVyYm9qcGVnLmRsbAorCURlbGV0ZSAkU1lTRElSXGxpYnR1cmJvanBlZy5kbGwKKwlEZWxldGUgJElOU1RESVJcbGliXGxpYnR1cmJvanBlZy5kbGwuYQorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlidHVyYm9qcGVnLmEKKwlEZWxldGUgJElOU1RESVJcbGliXGxpYmpwZWcuZGxsLmEKKwlEZWxldGUgJElOU1RESVJcbGliXGxpYmpwZWcuYQorCURlbGV0ZSAkSU5TVERJUlxsaWJccGtnY29uZmlnXGxpYmpwZWcucGMKKwlEZWxldGUgJElOU1RESVJcbGliXHBrZ2NvbmZpZ1xsaWJ0dXJib2pwZWcucGMKKyFlbHNlCisJRGVsZXRlICRJTlNURElSXGJpblxqcGVnQFNPX01BSk9SX1ZFUlNJT05ALmRsbAorCURlbGV0ZSAkSU5TVERJUlxiaW5cdHVyYm9qcGVnLmRsbAorCURlbGV0ZSAkU1lTRElSXHR1cmJvanBlZy5kbGwKKwlEZWxldGUgJElOU1RESVJcbGliXGpwZWcubGliCisJRGVsZXRlICRJTlNURElSXGxpYlxqcGVnLXN0YXRpYy5saWIKKwlEZWxldGUgJElOU1RESVJcbGliXHR1cmJvanBlZy5saWIKKwlEZWxldGUgJElOU1RESVJcbGliXHR1cmJvanBlZy1zdGF0aWMubGliCishZW5kaWYKKyFpZmRlZiBKQVZBCisJRGVsZXRlICRJTlNURElSXGNsYXNzZXNcdHVyYm9qcGVnLmphcgorIWVuZGlmCisJRGVsZXRlICRJTlNURElSXGJpblxjanBlZy5leGUKKwlEZWxldGUgJElOU1RESVJcYmluXGRqcGVnLmV4ZQorCURlbGV0ZSAkSU5TVERJUlxiaW5canBlZ3RyYW4uZXhlCisJRGVsZXRlICRJTlNURElSXGJpblx0amJlbmNoLmV4ZQorCURlbGV0ZSAkSU5TVERJUlxiaW5ccmRqcGdjb20uZXhlCisJRGVsZXRlICRJTlNURElSXGJpblx3cmpwZ2NvbS5leGUKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqY29uZmlnLmgKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqZXJyb3IuaAorCURlbGV0ZSAkSU5TVERJUlxpbmNsdWRlXGptb3JlY2ZnLmgKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqcGVnbGliLmgKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVx0dXJib2pwZWcuaAorCURlbGV0ZSAkSU5TVERJUlx1bmluc3RhbGxfQFZFUlNJT05ALmV4ZQorCURlbGV0ZSAkSU5TVERJUlxkb2NcUkVBRE1FLmlqZworCURlbGV0ZSAkSU5TVERJUlxkb2NcUkVBRE1FLm1kCisJRGVsZXRlICRJTlNURElSXGRvY1xMSUNFTlNFLm1kCisJRGVsZXRlICRJTlNURElSXGRvY1xleGFtcGxlLnR4dAorCURlbGV0ZSAkSU5TVERJUlxkb2NcbGlianBlZy50eHQKKwlEZWxldGUgJElOU1RESVJcZG9jXHN0cnVjdHVyZS50eHQKKwlEZWxldGUgJElOU1RESVJcZG9jXHVzYWdlLnR4dAorCURlbGV0ZSAkSU5TVERJUlxkb2Ncd2l6YXJkLnR4dAorCURlbGV0ZSAkSU5TVERJUlxkb2NcdGpleGFtcGxlLmMKKwlEZWxldGUgJElOU1RESVJcZG9jXFRKRXhhbXBsZS5qYXZhCishaWZkZWYgR0NDCisJRGVsZXRlICRJTlNURElSXG1hblxtYW4xXGNqcGVnLjEKKwlEZWxldGUgJElOU1RESVJcbWFuXG1hbjFcZGpwZWcuMQorCURlbGV0ZSAkSU5TVERJUlxtYW5cbWFuMVxqcGVndHJhbi4xCisJRGVsZXRlICRJTlNURElSXG1hblxtYW4xXHJkanBnY29tLjEKKwlEZWxldGUgJElOU1RESVJcbWFuXG1hbjFcd3JqcGdjb20uMQorIWVuZGlmCisKKwlSTURpciAiJElOU1RESVJcaW5jbHVkZSIKKyFpZmRlZiBHQ0MKKwlSTURpciAiJElOU1RESVJcbGliXHBrZ2NvbmZpZyIKKyFlbmRpZgorCVJNRGlyICIkSU5TVERJUlxsaWIiCisJUk1EaXIgIiRJTlNURElSXGRvYyIKKyFpZmRlZiBHQ0MKKwlSTURpciAiJElOU1RESVJcbWFuXG1hbjEiCisJUk1EaXIgIiRJTlNURElSXG1hbiIKKyFlbmRpZgorIWlmZGVmIEpBVkEKKwlSTURpciAiJElOU1RESVJcY2xhc3NlcyIKKyFlbmRpZgorCVJNRGlyICIkSU5TVERJUlxiaW4iCisJUk1EaXIgIiRJTlNURElSIgorCitTZWN0aW9uRW5kCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL2xpYmpwZWcucGMuaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL2xpYmpwZWcucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmYjdmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvbGlianBlZy5wYy5pbgpAQCAtMCwwICsxLDEwIEBACitwcmVmaXg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorZXhlY19wcmVmaXg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorbGliZGlyPUBDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSQAoraW5jbHVkZWRpcj1AQ01BS0VfSU5TVEFMTF9GVUxMX0lOQ0xVREVESVJACisKK05hbWU6IGxpYmpwZWcKK0Rlc2NyaXB0aW9uOiBBIFNJTUQtYWNjZWxlcmF0ZWQgSlBFRyBjb2RlYyB0aGF0IHByb3ZpZGVzIHRoZSBsaWJqcGVnIEFQSQorVmVyc2lvbjogQFZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGpwZWcKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL2xpYnR1cmJvanBlZy5wYy5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvbGlidHVyYm9qcGVnLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTAwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL2xpYnR1cmJvanBlZy5wYy5pbgpAQCAtMCwwICsxLDEwIEBACitwcmVmaXg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorZXhlY19wcmVmaXg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorbGliZGlyPUBDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSQAoraW5jbHVkZWRpcj1AQ01BS0VfSU5TVEFMTF9GVUxMX0lOQ0xVREVESVJACisKK05hbWU6IGxpYnR1cmJvanBlZworRGVzY3JpcHRpb246IEEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHRoYXQgcHJvdmlkZXMgdGhlIFR1cmJvSlBFRyBBUEkKK1ZlcnNpb246IEBWRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWx0dXJib2pwZWcKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VjeWd3aW5wa2cuaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VjeWd3aW5wa2cuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjdmMzUzZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvbWFrZWN5Z3dpbnBrZy5pbgpAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKworc2V0IC11CitzZXQgLWUKK3RyYXAgb25leGl0IElOVAordHJhcCBvbmV4aXQgVEVSTQordHJhcCBvbmV4aXQgRVhJVAorCitUTVBESVI9CisKK29uZXhpdCgpCit7CisJaWYgWyAhICIkVE1QRElSIiA9ICIiIF07IHRoZW4KKwkJcm0gLXJmICRUTVBESVIKKwlmaQorfQorCitzYWZlZGlybW92ZSAoKQoreworCWlmIFsgIiQxIiA9ICIkMiIgXTsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisJaWYgWyAiJDEiID0gIiIgLW8gISAtZCAiJDEiIF07IHRoZW4KKwkJZWNobyBzYWZlZGlybW92ZTogc291cmNlIGRpciAkMSBpcyBub3QgdmFsaWQKKwkJcmV0dXJuIDEKKwlmaQorCWlmIFsgIiQyIiA9ICIiIC1vIC1lICIkMiIgXTsgdGhlbgorCQllY2hvIHNhZmVkaXJtb3ZlOiBkZXN0IGRpciAkMiBpcyBub3QgdmFsaWQKKwkJcmV0dXJuIDEKKwlmaQorCWlmIFsgIiQzIiA9ICIiIC1vIC1lICIkMyIgXTsgdGhlbgorCQllY2hvIHNhZmVkaXJtb3ZlOiB0bXAgZGlyICQzIGlzIG5vdCB2YWxpZAorCQlyZXR1cm4gMQorCWZpCisJbWtkaXIgLXAgJDMKKwltdiAkMS8qICQzLworCXJtZGlyICQxCisJbWtkaXIgLXAgJDIKKwltdiAkMy8qICQyLworCXJtZGlyICQzCisJcmV0dXJuIDAKK30KKworUEtHTkFNRT1AUEtHTkFNRUAKK1ZFUlNJT049QFZFUlNJT05ACitCVUlMRD1AQlVJTERACisKK1BSRUZJWD1AQ01BS0VfSU5TVEFMTF9QUkVGSVhACitET0NESVI9QENNQUtFX0lOU1RBTExfRlVMTF9ET0NESVJACitMSUJESVI9QENNQUtFX0lOU1RBTExfRlVMTF9MSUJESVJACisKK3VtYXNrIDAyMgorcm0gLWYgJFBLR05BTUUtJFZFUlNJT04tJEJVSUxELnRhci5iejIKK1RNUERJUj1gbWt0ZW1wIC1kIC90bXAvbGp0YnVpbGQuWFhYWFhYYAorX19QV0Q9YHB3ZGAKK21ha2UgaW5zdGFsbCBERVNURElSPSRUTVBESVIvcGtnCitpZiBbICIkUFJFRklYIiA9ICJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAiIC1hICIkRE9DRElSIiA9ICJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAvZG9jIiBdOyB0aGVuCisJc2FmZWRpcm1vdmUgJFRNUERJUi9wa2ckRE9DRElSICRUTVBESVIvcGtnL3Vzci9zaGFyZS9kb2MvJFBLR05BTUUtJFZFUlNJT04gJFRNUERJUi9fX3RtcGRvYworCWxuIC1mcyAvdXNyL3NoYXJlL2RvYy8kUEtHTkFNRS0kVkVSU0lPTiAkVE1QRElSL3BrZyRET0NESVIKK2ZpCitjZCAkVE1QRElSL3BrZwordGFyIGNmaiAuLi8kUEtHTkFNRS0kVkVSU0lPTi0kQlVJTEQudGFyLmJ6MiAqCitjZCAkX19QV0QKK212ICRUTVBESVIvKi50YXIuYnoyIC4KKworZXhpdCAwCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VkcGtnLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9tYWtlZHBrZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgzNmRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9tYWtlZHBrZy5pbgpAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKK3NldCAtdQorc2V0IC1lCit0cmFwIG9uZXhpdCBJTlQKK3RyYXAgb25leGl0IFRFUk0KK3RyYXAgb25leGl0IEVYSVQKKworVE1QRElSPQorU1VETz0KKworb25leGl0KCkKK3sKKwlpZiBbICEgIiRUTVBESVIiID0gIiIgXTsgdGhlbgorCQkkU1VETyBybSAtcmYgJFRNUERJUgorCWZpCit9CisKK3VpZCgpCit7CisJaWQgfCBjdXQgLWYyIC1kID0gfCBjdXQgLWYxIC1kIFwoOworfQorCitzYWZlZGlybW92ZSAoKQoreworCWlmIFsgIiQxIiA9ICIkMiIgXTsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisJaWYgWyAiJDEiID0gIiIgLW8gISAtZCAiJDEiIF07IHRoZW4KKwkJZWNobyBzYWZlZGlybW92ZTogc291cmNlIGRpciAkMSBpcyBub3QgdmFsaWQKKwkJcmV0dXJuIDEKKwlmaQorCWlmIFsgIiQyIiA9ICIiIC1vIC1lICIkMiIgXTsgdGhlbgorCQllY2hvIHNhZmVkaXJtb3ZlOiBkZXN0IGRpciAkMiBpcyBub3QgdmFsaWQKKwkJcmV0dXJuIDEKKwlmaQorCWlmIFsgIiQzIiA9ICIiIC1vIC1lICIkMyIgXTsgdGhlbgorCQllY2hvIHNhZmVkaXJtb3ZlOiB0bXAgZGlyICQzIGlzIG5vdCB2YWxpZAorCQlyZXR1cm4gMQorCWZpCisJbWtkaXIgLXAgJDMKKwltdiAkMS8qICQzLworCXJtZGlyICQxCisJbWtkaXIgLXAgJDIKKwltdiAkMy8qICQyLworCXJtZGlyICQzCisJcmV0dXJuIDAKK30KKworbWFrZWRlYigpCit7CisJU1VQUExFTUVOVD0kMQorCURJUk5BTUU9JFBLR05BTUUKKworCWlmIFsgJFNVUFBMRU1FTlQgPSAxIF07IHRoZW4KKwkJUEtHTkFNRT0kUEtHTkFNRVwzMgorCQlERUJBUkNIPWFtZDY0CisJZmkKKworCXVtYXNrIDAyMgorCXJtIC1mICRQS0dOQU1FXF8kVkVSU0lPTlxfJERFQkFSQ0guZGViCisJVE1QRElSPWBta3RlbXAgLWQgL3RtcC8kUEtHTkFNRS1idWlsZC5YWFhYWFhgCisJbWtkaXIgJFRNUERJUi9ERUJJQU4KKworCWlmIFsgJFNVUFBMRU1FTlQgPSAxIF07IHRoZW4KKwkJbWFrZSBpbnN0YWxsIERFU1RESVI9JFRNUERJUgorCQlybSAtcmYgJFRNUERJUiRCSU5ESVIKKwkJaWYgWyAiJERBVEFST09URElSIiAhPSAiJFBSRUZJWCIgXTsgdGhlbgorCQkJcm0gLXJmICRUTVBESVIkREFUQVJPT1RESVIKKwkJZmkKKwkJaWYgWyAiJEpBVkFESVIiICE9ICIiIF07IHRoZW4KKwkJCXJtIC1yZiAkVE1QRElSJEpBVkFESVIKKwkJZmkKKwkJcm0gLXJmICRUTVBESVIkRE9DRElSCisJCXJtIC1yZiAkVE1QRElSJElOQ0xVREVESVIKKwkJcm0gLXJmICRUTVBESVIkTUFORElSCisJZWxzZQorCQltYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSCisJCWlmIFsgIiRQUkVGSVgiID0gIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQCIgLWEgIiRET0NESVIiID0gIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQC9kb2MiIF07IHRoZW4KKwkJCXNhZmVkaXJtb3ZlICRUTVBESVIvJERPQ0RJUiAkVE1QRElSL3Vzci9zaGFyZS9kb2MvJFBLR05BTUUtJFZFUlNJT04gJFRNUERJUi9fX3RtcGRvYworCQkJbG4gLWZzIC91c3Ivc2hhcmUvZG9jLyRESVJOQU1FLSRWRVJTSU9OICRUTVBESVIkRE9DRElSCisJCWZpCisJZmkKKworCVNJWkU9YGR1IC1zICRUTVBESVIgfCBjdXQgLWYxYAorCShjYXQgcGtnc2NyaXB0cy9kZWItY29udHJvbCB8IHNlZCBzL3tfX1BLR05BTUV9LyRQS0dOQU1FL2cgXAorCQl8IHNlZCBzL3tfX0FSQ0h9LyRERUJBUkNIL2cgfCBzZWQgcy97X19TSVpFfS8kU0laRS9nIFwKKwkJPiAkVE1QRElSL0RFQklBTi9jb250cm9sKQorCisJL3NiaW4vbGRjb25maWcgLW4gJFRNUERJUiRMSUJESVIKKworCSRTVURPIGNob3duIC1SaCByb290OnJvb3QgJFRNUERJUi8qCisJZHBrZyAtYiAkVE1QRElSICRQS0dOQU1FXF8kVkVSU0lPTlxfJERFQkFSQ0guZGViCit9CisKK1BLR05BTUU9QFBLR05BTUVACitWRVJTSU9OPUBWRVJTSU9OQAorREVCQVJDSD1AREVCQVJDSEAKK1BSRUZJWD1AQ01BS0VfSU5TVEFMTF9QUkVGSVhACitCSU5ESVI9QENNQUtFX0lOU1RBTExfRlVMTF9CSU5ESVJACitEQVRBUk9PVERJUj1AQ01BS0VfSU5TVEFMTF9GVUxMX0RBVEFST09URElSQAorRE9DRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfRE9DRElSQAorSU5DTFVERURJUj1AQ01BS0VfSU5TVEFMTF9GVUxMX0lOQ0xVREVESVJACitKQVZBRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfSkFWQURJUkAKK0xJQkRJUj1AQ01BS0VfSU5TVEFMTF9GVUxMX0xJQkRJUkAKK01BTkRJUj1AQ01BS0VfSU5TVEFMTF9GVUxMX01BTkRJUkAKKworaWYgWyAhIGB1aWRgIC1lcSAwIF07IHRoZW4KKwlTVURPPXN1ZG8KK2ZpCisKK21ha2VkZWIgMAoraWYgWyAiJERFQkFSQ0giID0gImkzODYiIF07IHRoZW4gbWFrZWRlYiAxOyBmaQorCitleGl0CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VtYWNwa2cuaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VtYWNwa2cuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhMmUyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvbWFrZW1hY3BrZy5pbgpAQCAtMCwwICsxLDI2OCBAQAorIyEvYmluL3NoCisKK3NldCAtdQorc2V0IC1lCit0cmFwIG9uZXhpdCBJTlQKK3RyYXAgb25leGl0IFRFUk0KK3RyYXAgb25leGl0IEVYSVQKKworVE1QRElSPQorCitvbmV4aXQoKQoreworCWlmIFsgISAiJFRNUERJUiIgPSAiIiBdOyB0aGVuCisJCXJtIC1yZiAkVE1QRElSCisJZmkKK30KKworc2FmZWRpcm1vdmUgKCkKK3sKKwlpZiBbICIkMSIgPSAiJDIiIF07IHRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCWlmIFsgIiQxIiA9ICIiIC1vICEgLWQgIiQxIiBdOyB0aGVuCisJCWVjaG8gc2FmZWRpcm1vdmU6IHNvdXJjZSBkaXIgJDEgaXMgbm90IHZhbGlkCisJCXJldHVybiAxCisJZmkKKwlpZiBbICIkMiIgPSAiIiAtbyAtZSAiJDIiIF07IHRoZW4KKwkJZWNobyBzYWZlZGlybW92ZTogZGVzdCBkaXIgJDIgaXMgbm90IHZhbGlkCisJCXJldHVybiAxCisJZmkKKwlpZiBbICIkMyIgPSAiIiAtbyAtZSAiJDMiIF07IHRoZW4KKwkJZWNobyBzYWZlZGlybW92ZTogdG1wIGRpciAkMyBpcyBub3QgdmFsaWQKKwkJcmV0dXJuIDEKKwlmaQorCW1rZGlyIC1wICQzCisJbXYgJDEvKiAkMy8KKwlybWRpciAkMQorCW1rZGlyIC1wICQyCisJbXYgJDMvKiAkMi8KKwlybWRpciAkMworCXJldHVybiAwCit9CisKK3VzYWdlKCkKK3sKKwllY2hvICIkMCBbdW5pdmVyc2FsXSBbLWxpcG8gW3BhdGggdG8gbGlwb11dIgorCWV4aXQgMQorfQorCitVTklWRVJTQUw9MAorCitQS0dOQU1FPUBQS0dOQU1FQAorVkVSU0lPTj1AVkVSU0lPTkAKK0JVSUxEPUBCVUlMREAKK1NSQ0RJUj1AQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQAorQlVJTERESVIzMj1AT1NYXzMyQklUX0JVSUxEQAorQlVJTERESVJBUk1WNz1ASU9TX0FSTVY3X0JVSUxEQAorQlVJTERESVJBUk1WN1M9QElPU19BUk1WN1NfQlVJTERACitCVUlMRERJUkFSTVY4PUBJT1NfQVJNVjhfQlVJTERACitXSVRIX0pBVkE9QFdJVEhfSkFWQUAKK0xJUE89bGlwbworCitQUkVGSVg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorQklORElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfQklORElSQAorRE9DRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfRE9DRElSQAorTElCRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSQAorCitMSUJKUEVHX0RTT19OQU1FPWxpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALkBTT19BR0VALkBTT19NSU5PUl9WRVJTSU9OQC5keWxpYgorVFVSQk9KUEVHX0RTT19OQU1FPWxpYnR1cmJvanBlZy5AVFVSQk9KUEVHX1NPX1ZFUlNJT05ALmR5bGliCisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwljYXNlICQxIGluCisJLWgqKQorCQl1c2FnZSAwCisJCTs7CisJLWxpcG8pCisJCWlmIFsgJCMgLWd0IDEgXTsgdGhlbgorCQkJaWYgW1sgISAiJDIiID1+IC0uKiBdXTsgdGhlbgorCQkJCUxJUE89JDI7ICBzaGlmdAorCQkJZmkKKwkJZmkKKwkJOzsKKwl1bml2ZXJzYWwpCisJCVVOSVZFUlNBTD0xCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2lmIFsgLWYgJFBLR05BTUUtJFZFUlNJT04uZG1nIF07IHRoZW4KKwlybSAtZiAkUEtHTkFNRS0kVkVSU0lPTi5kbWcKK2ZpCisKK3VtYXNrIDAyMgorVE1QRElSPWBta3RlbXAgLWQgL3RtcC8kUEtHTkFNRS1idWlsZC5YWFhYWFhgCitQS0dST09UPSRUTVBESVIvcGtnL1BhY2thZ2VfUm9vdAorbWtkaXIgLXAgJFBLR1JPT1QKKworbWFrZSBpbnN0YWxsIERFU1RESVI9JFBLR1JPT1QKKworaWYgWyAiJFBSRUZJWCIgPSAiQENNQUtFX0lOU1RBTExfREVGQVVMVF9QUkVGSVhAIiAtYSAiJERPQ0RJUiIgPSAiQENNQUtFX0lOU1RBTExfREVGQVVMVF9QUkVGSVhAL2RvYyIgXTsgdGhlbgorCW1rZGlyIC1wICRQS0dST09UL0xpYnJhcnkvRG9jdW1lbnRhdGlvbgorCXNhZmVkaXJtb3ZlICRQS0dST09UJERPQ0RJUiAkUEtHUk9PVC9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBLR05BTUUgJFRNUERJUi9fX3RtcGRvYworCWxuIC1mcyAvTGlicmFyeS9Eb2N1bWVudGF0aW9uLyRQS0dOQU1FICRQS0dST09UJERPQ0RJUgorZmkKKworaWYgWyAkVU5JVkVSU0FMID0gMSAtYSAiJEJVSUxERElSMzIiICE9ICIiIF07IHRoZW4KKwlpZiBbICEgLWQgJEJVSUxERElSMzIgXTsgdGhlbgorCQllY2hvIEVSUk9SOiAzMi1iaXQgYnVpbGQgZGlyZWN0b3J5ICRCVUlMRERJUjMyIGRvZXMgbm90IGV4aXN0CisJCWV4aXQgMQorCWZpCisJaWYgWyAhIC1mICRCVUlMRERJUjMyL01ha2VmaWxlIF07IHRoZW4KKwkJZWNobyBFUlJPUjogMzItYml0IGJ1aWxkIGRpcmVjdG9yeSAkQlVJTERESVIzMiBpcyBub3QgY29uZmlndXJlZAorCQlleGl0IDEKKwlmaQorCW1rZGlyIC1wICRUTVBESVIvZGlzdC54ODYKKwlwdXNoZCAkQlVJTERESVIzMgorCW1ha2UgaW5zdGFsbCBERVNURElSPSRUTVBESVIvZGlzdC54ODYKKwlwb3BkCisJJExJUE8gLWNyZWF0ZSBcCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kTElCRElSLyRMSUJKUEVHX0RTT19OQU1FIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRMSUJESVIvJExJQkpQRUdfRFNPX05BTUUgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvJExJQkpQRUdfRFNPX05BTUUKKwkkTElQTyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2LyRMSUJESVIvbGlianBlZy5hIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRMSUJESVIvbGlianBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYQorCSRMSVBPIC1jcmVhdGUgXAorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvJExJQkRJUi8kVFVSQk9KUEVHX0RTT19OQU1FIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRMSUJESVIvJFRVUkJPSlBFR19EU09fTkFNRSBcCisJCS1vdXRwdXQgJFBLR1JPT1QvJExJQkRJUi8kVFVSQk9KUEVHX0RTT19OQU1FCisJJExJUE8gLWNyZWF0ZSBcCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kTElCRElSL2xpYnR1cmJvanBlZy5hIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEKKwkkTElQTyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2LyRCSU5ESVIvY2pwZWcgXAorCQktYXJjaCB4ODZfNjQgJFBLR1JPT1QvJEJJTkRJUi9janBlZyBcCisJCS1vdXRwdXQgJFBLR1JPT1QvJEJJTkRJUi9janBlZworCSRMSVBPIC1jcmVhdGUgXAorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvJEJJTkRJUi9kanBlZyBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC8kQklORElSL2RqcGVnIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kQklORElSL2RqcGVnCisJJExJUE8gLWNyZWF0ZSBcCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL2pwZWd0cmFuIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvanBlZ3RyYW4gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvanBlZ3RyYW4KKwkkTElQTyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2LyRCSU5ESVIvdGpiZW5jaCBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC8kQklORElSL3RqYmVuY2ggXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvdGpiZW5jaAorCSRMSVBPIC1jcmVhdGUgXAorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvJEJJTkRJUi9yZGpwZ2NvbSBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC8kQklORElSL3JkanBnY29tIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kQklORElSL3JkanBnY29tCisJJExJUE8gLWNyZWF0ZSBcCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL3dyanBnY29tIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvd3JqcGdjb20gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvd3JqcGdjb20KK2ZpCisKK2luc3RhbGxfaW9zKCkKK3sKKwlCVUlMRERJUj0kMQorCUFSQ0hOQU1FPSQyCisJRElSTkFNRT0kMworCUxJUE9BUkNIPSQ0CisKKwlpZiBbICEgLWQgJEJVSUxERElSIF07IHRoZW4KKwkJZWNobyBFUlJPUjogJEFSQ0hOQU1FIGJ1aWxkIGRpcmVjdG9yeSAkQlVJTERESVIgZG9lcyBub3QgZXhpc3QKKwkJZXhpdCAxCisJZmkKKwlpZiBbICEgLWYgJEJVSUxERElSL01ha2VmaWxlIF07IHRoZW4KKwkJZWNobyBFUlJPUjogJEFSQ0hOQU1FIGJ1aWxkIGRpcmVjdG9yeSAkQlVJTERESVIgaXMgbm90IGNvbmZpZ3VyZWQKKwkJZXhpdCAxCisJZmkKKwlta2RpciAtcCAkVE1QRElSL2Rpc3QuJERJUk5BTUUKKwlwdXNoZCAkQlVJTERESVIKKwltYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSL2Rpc3QuJERJUk5BTUUKKwlwb3BkCisJJExJUE8gLWNyZWF0ZSBcCisJCSRQS0dST09ULyRMSUJESVIvJExJQkpQRUdfRFNPX05BTUUgXAorCQktYXJjaCAkTElQT0FSQ0ggJFRNUERJUi9kaXN0LiRESVJOQU1FLyRMSUJESVIvJExJQkpQRUdfRFNPX05BTUUgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvJExJQkpQRUdfRFNPX05BTUUKKwkkTElQTyAtY3JlYXRlIFwKKwkJJFBLR1JPT1QvJExJQkRJUi9saWJqcGVnLmEgXAorCQktYXJjaCAkTElQT0FSQ0ggJFRNUERJUi9kaXN0LiRESVJOQU1FLyRMSUJESVIvbGlianBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYQorCSRMSVBPIC1jcmVhdGUgXAorCQkkUEtHUk9PVC8kTElCRElSLyRUVVJCT0pQRUdfRFNPX05BTUUgXAorCQktYXJjaCAkTElQT0FSQ0ggJFRNUERJUi9kaXN0LiRESVJOQU1FLyRMSUJESVIvJFRVUkJPSlBFR19EU09fTkFNRSBcCisJCS1vdXRwdXQgJFBLR1JPT1QvJExJQkRJUi8kVFVSQk9KUEVHX0RTT19OQU1FCisJJExJUE8gLWNyZWF0ZSBcCisJCSRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktYXJjaCAkTElQT0FSQ0ggJFRNUERJUi9kaXN0LiRESVJOQU1FLyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEKKwkkTElQTyAtY3JlYXRlIFwKKwkJJFBLR1JPT1QvJEJJTkRJUi9janBlZyBcCisJCS1hcmNoICRMSVBPQVJDSCAkVE1QRElSL2Rpc3QuJERJUk5BTUUvJEJJTkRJUi9janBlZyBcCisJCS1vdXRwdXQgJFBLR1JPT1QvJEJJTkRJUi9janBlZworCSRMSVBPIC1jcmVhdGUgXAorCQkkUEtHUk9PVC8kQklORElSL2RqcGVnIFwKKwkJLWFyY2ggJExJUE9BUkNIICRUTVBESVIvZGlzdC4kRElSTkFNRS8kQklORElSL2RqcGVnIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kQklORElSL2RqcGVnCisJJExJUE8gLWNyZWF0ZSBcCisJCSRQS0dST09ULyRCSU5ESVIvanBlZ3RyYW4gXAorCQktYXJjaCAkTElQT0FSQ0ggJFRNUERJUi9kaXN0LiRESVJOQU1FLyRCSU5ESVIvanBlZ3RyYW4gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvanBlZ3RyYW4KKwkkTElQTyAtY3JlYXRlIFwKKwkJJFBLR1JPT1QvJEJJTkRJUi90amJlbmNoIFwKKwkJLWFyY2ggJExJUE9BUkNIICRUTVBESVIvZGlzdC4kRElSTkFNRS8kQklORElSL3RqYmVuY2ggXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvdGpiZW5jaAorCSRMSVBPIC1jcmVhdGUgXAorCQkkUEtHUk9PVC8kQklORElSL3JkanBnY29tIFwKKwkJLWFyY2ggJExJUE9BUkNIICRUTVBESVIvZGlzdC4kRElSTkFNRS8kQklORElSL3JkanBnY29tIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kQklORElSL3JkanBnY29tCisJJExJUE8gLWNyZWF0ZSBcCisJCSRQS0dST09ULyRCSU5ESVIvd3JqcGdjb20gXAorCQktYXJjaCAkTElQT0FSQ0ggJFRNUERJUi9kaXN0LiRESVJOQU1FLyRCSU5ESVIvd3JqcGdjb20gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvd3JqcGdjb20KK30KKworaWYgWyAkVU5JVkVSU0FMID0gMSAtYSAiJEJVSUxERElSQVJNVjciICE9ICIiIF07IHRoZW4KKwlpbnN0YWxsX2lvcyAkQlVJTERESVJBUk1WNyBBUk12NyBhcm12NyBhcm0KK2ZpCisKK2lmIFsgJFVOSVZFUlNBTCA9IDEgLWEgIiRCVUlMRERJUkFSTVY3UyIgIT0gIiIgXTsgdGhlbgorCWluc3RhbGxfaW9zICRCVUlMRERJUkFSTVY3UyBBUk12N3MgYXJtdjdzIGFybQorZmkKKworaWYgWyAkVU5JVkVSU0FMID0gMSAtYSAiQlVJTERESVJBUk1WOCIgIT0gIiIgXTsgdGhlbgorCWluc3RhbGxfaW9zICRCVUlMRERJUkFSTVY4IEFSTXY4IGFybXY4IGFybTY0CitmaQorCitpbnN0YWxsX25hbWVfdG9vbCAtaWQgJExJQkRJUi8kTElCSlBFR19EU09fTkFNRSAkUEtHUk9PVC8kTElCRElSLyRMSUJKUEVHX0RTT19OQU1FCitpbnN0YWxsX25hbWVfdG9vbCAtaWQgJExJQkRJUi8kVFVSQk9KUEVHX0RTT19OQU1FICRQS0dST09ULyRMSUJESVIvJFRVUkJPSlBFR19EU09fTkFNRQorCitpZiBbICRXSVRIX0pBVkEgPSAxIF07IHRoZW4KKwlsbiAtZnMgJFRVUkJPSlBFR19EU09fTkFNRSAkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy5qbmlsaWIKK2ZpCitpZiBbICIkUFJFRklYIiA9ICJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAiIC1hICIkTElCRElSIiA9ICJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAvbGliIiBdOyB0aGVuCisJaWYgWyAhIC1oICRQS0dST09ULyRQUkVGSVgvbGliMzIgXTsgdGhlbgorCQlsbiAtZnMgbGliICRQS0dST09ULyRQUkVGSVgvbGliMzIKKwlmaQorCWlmIFsgISAtaCAkUEtHUk9PVC8kUFJFRklYL2xpYjY0IF07IHRoZW4KKwkJbG4gLWZzIGxpYiAkUEtHUk9PVC8kUFJFRklYL2xpYjY0CisJZmkKK2ZpCisKK21rZGlyIC1wICRUTVBESVIvcGtnCisKK2luc3RhbGwgLW0gNzU1IHBrZ3NjcmlwdHMvdW5pbnN0YWxsICRQS0dST09ULyRCSU5ESVIvCisKK2ZpbmQgJFBLR1JPT1QgLXR5cGUgZiB8IHdoaWxlIHJlYWQgZmlsZTsgZG8geGF0dHIgLWMgJGZpbGU7IGRvbmUKKworY3AgJFNSQ0RJUi9yZWxlYXNlL0xpY2Vuc2UucnRmICRTUkNESVIvcmVsZWFzZS9XZWxjb21lLnJ0ZiAkU1JDRElSL3JlbGVhc2UvUmVhZE1lLnR4dCAkVE1QRElSL3BrZy8KKworbWtkaXIgJFRNUERJUi9kbWcKK3BrZ2J1aWxkIC0tcm9vdCAkUEtHUk9PVCAtLXZlcnNpb24gJFZFUlNJT04uJEJVSUxEIC0taWRlbnRpZmllciBAUEtHSURAIFwKKwkkVE1QRElSL3BrZy8kUEtHTkFNRS5wa2cKK3Byb2R1Y3RidWlsZCAtLWRpc3RyaWJ1dGlvbiBwa2dzY3JpcHRzL0Rpc3RyaWJ1dGlvbi54bWwgXAorCS0tcGFja2FnZS1wYXRoICRUTVBESVIvcGtnLyAtLXJlc291cmNlcyAkVE1QRElSL3BrZy8gXAorCSRUTVBESVIvZG1nLyRQS0dOQU1FLnBrZworaGRpdXRpbCBjcmVhdGUgLWZzIEhGUysgLXZvbG5hbWUgJFBLR05BTUUtJFZFUlNJT04gXAorCS1zcmNmb2xkZXIgIiRUTVBESVIvZG1nIiAkVE1QRElSLyRQS0dOQU1FLSRWRVJTSU9OLmRtZworY3AgJFRNUERJUi8kUEtHTkFNRS0kVkVSU0lPTi5kbWcgLgorCitleGl0CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VycG0uaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VycG0uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzYjFkNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvbWFrZXJwbS5pbgpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKworc2V0IC11CitzZXQgLWUKK3RyYXAgb25leGl0IElOVAordHJhcCBvbmV4aXQgVEVSTQordHJhcCBvbmV4aXQgRVhJVAorCitUTVBESVI9CisKK29uZXhpdCgpCit7CisJaWYgWyAhICIkVE1QRElSIiA9ICIiIF07IHRoZW4KKwkJcm0gLXJmICRUTVBESVIKKwlmaQorfQorCitpZiBbIC1mIEBQS0dOQU1FQC1AVkVSU0lPTkAuQFJQTUFSQ0hALnJwbSBdOyB0aGVuCisJcm0gLWYgQFBLR05BTUVALUBWRVJTSU9OQC5AUlBNQVJDSEAucnBtCitmaQorCit1bWFzayAwMjIKK1RNUERJUj1gbWt0ZW1wIC1kIC90bXAvQENNQUtFX1BST0pFQ1RfTkFNRUAtYnVpbGQuWFhYWFhYYAorCitta2RpciAtcCAkVE1QRElSL1JQTVMKK2xuIC1mcyBgcHdkYCAkVE1QRElSL0JVSUxECitycG1idWlsZCAtYmIgLS1kZWZpbmUgIl9ibGRkaXIgJFRNUERJUi9idWlsZHJvb3QiIC0tZGVmaW5lICJfdG9wZGlyICRUTVBESVIiIFwKKwktLXRhcmdldCBAUlBNQVJDSEAgcGtnc2NyaXB0cy9ycG0uc3BlYzsgXAorY3AgJFRNUERJUi9SUE1TL0BSUE1BUkNIQC9AUEtHTkFNRUAtQFZFUlNJT05ALUBCVUlMREAuQFJQTUFSQ0hALnJwbSBcCisJQFBLR05BTUVALUBWRVJTSU9OQC5AUlBNQVJDSEAucnBtCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2VzcnBtLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9tYWtlc3JwbS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGMzOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9tYWtlc3JwbS5pbgpAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKworc2V0IC11CitzZXQgLWUKK3RyYXAgb25leGl0IElOVAordHJhcCBvbmV4aXQgVEVSTQordHJhcCBvbmV4aXQgRVhJVAorCitUTVBESVI9CisKK29uZXhpdCgpCit7CisJaWYgWyAhICIkVE1QRElSIiA9ICIiIF07IHRoZW4KKwkJcm0gLXJmICRUTVBESVIKKwlmaQorfQorCitQS0dOQU1FPUBQS0dOQU1FQAorUFJPSkVDVD1AQ01BS0VfUFJPSkVDVF9OQU1FQAorVkVSU0lPTj1AVkVSU0lPTkAKK0JVSUxEPUBCVUlMREAKKworaWYgWyAtZiAkUEtHTkFNRS0kVkVSU0lPTi5zcmMucnBtIF07IHRoZW4KKwlybSAtZiAkUEtHTkFNRS0kVkVSU0lPTi5zcmMucnBtCitmaQorCit1bWFzayAwMjIKK1RNUERJUj1gbWt0ZW1wIC1kIC90bXAvJFBLR05BTUUtYnVpbGQuWFhYWFhYYAorCitta2RpciAtcCAkVE1QRElSL1JQTVMKK21rZGlyIC1wICRUTVBESVIvU1JQTVMKK21rZGlyIC1wICRUTVBESVIvQlVJTEQKK21rZGlyIC1wICRUTVBESVIvU09VUkNFUworbWtkaXIgLXAgJFRNUERJUi9TUEVDUworCitpZiBbICEgLWYgJFBST0pFQ1QtJFZFUlNJT04udGFyLmd6IF07IHRoZW4KKwllY2hvICJFUlJPUjogJFBST0pFQ1QtJFZFUlNJT04udGFyLmd6IGRvZXMgbm90IGV4aXN0LiIKK2ZpCisKK2NwICRQUk9KRUNULSRWRVJTSU9OLnRhci5neiAkVE1QRElSL1NPVVJDRVMvJFBST0pFQ1QtJFZFUlNJT04udGFyLmd6CisKK2NhdCBwa2dzY3JpcHRzL3JwbS5zcGVjIHwgc2VkIHMvJXtfYmxkZGlyfS8le190bXBwYXRofS9nIFwKKwl8IHNlZCBzLyMtLVw+Ly9nID4gJFRNUERJUi9TUEVDUy8kUEtHTkFNRS5zcGVjCisKK3JwbWJ1aWxkIC1icyAtLWRlZmluZSAiX3RvcGRpciAkVE1QRElSIiAkVE1QRElSL1NQRUNTLyRQS0dOQU1FLnNwZWMKK212ICRUTVBESVIvU1JQTVMvJFBLR05BTUUtJFZFUlNJT04tJEJVSUxELnNyYy5ycG0gJFBLR05BTUUtJFZFUlNJT04uc3JjLnJwbQorCitleGl0CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL21ha2V0YXJiYWxsLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9tYWtldGFyYmFsbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGE5YzdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9tYWtldGFyYmFsbC5pbgpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKworc2V0IC11CitzZXQgLWUKK3RyYXAgb25leGl0IElOVAordHJhcCBvbmV4aXQgVEVSTQordHJhcCBvbmV4aXQgRVhJVAorCitUTVBESVI9CitTVURPPQorCitvbmV4aXQoKQoreworCWlmIFsgISAiJFRNUERJUiIgPSAiIiBdOyB0aGVuCisJCXJtIC1yZiAkVE1QRElSCisJZmkKK30KKwordWlkKCkKK3sKKwlpZCB8IGN1dCAtZjIgLWQgPSB8IGN1dCAtZjEgLWQgXCg7Cit9CisKK1BLR05BTUU9QFBLR05BTUVACitWRVJTSU9OPUBWRVJTSU9OQAorQVJDSD1AQ1BVX1RZUEVACitPUz1AQ01BS0VfU1lTVEVNX05BTUVACitQUkVGSVg9QENNQUtFX0lOU1RBTExfUFJFRklYQAorCit1bWFzayAwMjIKK3JtIC1mICRQS0dOQU1FLSRWRVJTSU9OLSRPUy0kQVJDSC50YXIuYnoyCitUTVBESVI9YG1rdGVtcCAtZCAvdG1wLyRQS0dOQU1FLWJ1aWxkLlhYWFhYWGAKK21rZGlyIC1wICRUTVBESVIvaW5zdGFsbAorCittYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSL2luc3RhbGwKK2VjaG8gdGFydGVzdCA+JFRNUERJUi90YXJ0ZXN0CitHTlVUQVI9MAorQlNEVEFSPTAKK3RhciBjZiAkVE1QRElSL3RhcnRlc3QudGFyIC0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QgLUMgJFRNUERJUiB0YXJ0ZXN0ID4vZGV2L251bGwgMj4mMSAmJiBHTlVUQVI9MQoraWYgWyAiJEdOVVRBUiIgPSAiMSIgXTsgdGhlbgorCXRhciBjZiAtIC0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QgLUMgJFRNUERJUi9pbnN0YWxsIC4kUFJFRklYIHwgYnppcDIgLWMgPiRQS0dOQU1FLSRWRVJTSU9OLSRPUy0kQVJDSC50YXIuYnoyCitlbHNlCisJdGFyIGNmICRUTVBESVIvdGFydGVzdC50YXIgLS11aWQgMCAtLWdpZCAwIC1DICRUTVBESVIgdGFydGVzdCA+L2Rldi9udWxsIDI+JjEgJiYgQlNEVEFSPTEKKwlpZiBbICIkQlNEVEFSIiA9ICIxIiBdOyB0aGVuCisJCXRhciBjZiAtIC0tdWlkPTAgLS1naWQ9MCAtQyAkVE1QRElSL2luc3RhbGwgLiRQUkVGSVggfCBiemlwMiAtYyA+JFBLR05BTUUtJFZFUlNJT04tJE9TLSRBUkNILnRhci5iejIKKwllbHNlCisJCXRhciBjZiAtIC1DICRUTVBESVIvaW5zdGFsbCAuJFBSRUZJWCB8IGJ6aXAyIC1jID4kUEtHTkFNRS0kVkVSU0lPTi0kT1MtJEFSQ0gudGFyLmJ6MgorCWZpCitmaQorCitleGl0CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9yZWxlYXNlL3JwbS5zcGVjLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9ycG0uc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjJjNWUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS9ycG0uc3BlYy5pbgpAQCAtMCwwICsxLDIyMSBAQAorJWRlZmluZSBfcHJlZml4IEBDTUFLRV9JTlNUQUxMX1BSRUZJWEAKKyVkZWZpbmUgX2JpbmRpciBAQ01BS0VfSU5TVEFMTF9GVUxMX0JJTkRJUkAKKyVkZWZpbmUgX2RhdGFyb290ZGlyIEBDTUFLRV9JTlNUQUxMX0ZVTExfREFUQVJPT1RESVJACislZGVmaW5lIF9kb2NkaXIgJXtfZGVmYXVsdGRvY2Rpcn0vJXtuYW1lfS0le3ZlcnNpb259CislZGVmaW5lIF9pbmNsdWRlZGlyIEBDTUFLRV9JTlNUQUxMX0ZVTExfSU5DTFVERURJUkAKKyVkZWZpbmUgX2phdmFkaXIgQENNQUtFX0lOU1RBTExfRlVMTF9KQVZBRElSQAorJWRlZmluZSBfbWFuZGlyIEBDTUFLRV9JTlNUQUxMX0ZVTExfTUFORElSQAorJWRlZmluZSBfZW5hYmxlX3N0YXRpYyBARU5BQkxFX1NUQVRJQ0AKKyVkZWZpbmUgX2VuYWJsZV9zaGFyZWQgQEVOQUJMRV9TSEFSRURACislZGVmaW5lIF93aXRoX3R1cmJvanBlZyBAV0lUSF9UVVJCT0pQRUdACislZGVmaW5lIF93aXRoX2phdmEgQFdJVEhfSkFWQUAKKworJWlmICIlez9fX2lzYV9iaXRzOjF9IiA9PSAiMSIKKyVkZWZpbmUgX2JpdHMgJXtfX2lzYV9iaXRzfQorJWVsc2UKKyMgUlBNIDwgNC42CislaWYgIiV7X2xpYn0iID09ICJsaWI2NCIKKyVkZWZpbmUgX2JpdHMgNjQKKyVlbHNlCislZGVmaW5lIF9iaXRzIDMyCislZW5kaWYKKyVlbmRpZgorCisjLS0+JWlmIDEKKyVpZiAiJXtfYml0c30iID09ICI2NCIKKyVkZWZpbmUgX2xpYmRpciAle19leGVjX3ByZWZpeH0vbGliNjQKKyVlbHNlCislaWYgIiV7X3ByZWZpeH0iID09ICIvb3B0L2xpYmpwZWctdHVyYm8iCislZGVmaW5lIF9saWJkaXIgJXtfZXhlY19wcmVmaXh9L2xpYjMyCislZW5kaWYKKyVlbmRpZgorIy0tPiVlbHNlCislZGVmaW5lIF9saWJkaXIgQENNQUtFX0lOU1RBTExfRlVMTF9MSUJESVJACisjLS0+JWVuZGlmCisKK1N1bW1hcnk6IEEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHRoYXQgcHJvdmlkZXMgYm90aCB0aGUgbGlianBlZyBhbmQgVHVyYm9KUEVHIEFQSXMKK05hbWU6IEBQS0dOQU1FQAorVmVyc2lvbjogQFZFUlNJT05ACitWZW5kb3I6IEBQS0dWRU5ET1JACitVUkw6IEBQS0dVUkxACitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0xpYnJhcmllcworIy0tPlNvdXJjZTA6IGh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvQENNQUtFX1BST0pFQ1RfTkFNRUAvQENNQUtFX1BST0pFQ1RfTkFNRUAtJXt2ZXJzaW9ufS50YXIuZ3oKK1JlbGVhc2U6IEBCVUlMREAKK0xpY2Vuc2U6IEJTRC1zdHlsZQorQnVpbGRSb290OiAle19ibGRkaXJ9LyV7bmFtZX0tYnVpbGRyb290LSV7dmVyc2lvbn0tJXtyZWxlYXNlfQorUHJlcmVxOiAvc2Jpbi9sZGNvbmZpZworJWlmICIle19iaXRzfSIgPT0gIjY0IgorUHJvdmlkZXM6ICV7bmFtZX0gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIEBDTUFLRV9QUk9KRUNUX05BTUVAID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9LCBsaWJ0dXJib2pwZWcuc28oKSg2NGJpdCkKKyVlbHNlCitQcm92aWRlczogJXtuYW1lfSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgQENNQUtFX1BST0pFQ1RfTkFNRUAgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIGxpYnR1cmJvanBlZy5zbworJWVuZGlmCisKKyVkZXNjcmlwdGlvbgorbGlianBlZy10dXJibyBpcyBhIEpQRUcgaW1hZ2UgY29kZWMgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsIFNTRTIsCitBVlgyLCBORU9OLCBBbHRpVmVjKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KK29uIHg4NiwgeDg2LTY0LCBBUk0sIGFuZCBQb3dlclBDIHN5c3RlbXMsIGFzIHdlbGwgYXMgcHJvZ3Jlc3NpdmUgSlBFRworY29tcHJlc3Npb24gb24geDg2IGFuZCB4ODYtNjQgc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywgbGlianBlZy10dXJibyBpcworZ2VuZXJhbGx5IDItNnggYXMgZmFzdCBhcyBsaWJqcGVnLCBhbGwgZWxzZSBiZWluZyBlcXVhbC4gIE9uIG90aGVyIHR5cGVzIG9mCitzeXN0ZW1zLCBsaWJqcGVnLXR1cmJvIGNhbiBzdGlsbCBvdXRwZXJmb3JtIGxpYmpwZWcgYnkgYSBzaWduaWZpY2FudCBhbW91bnQsIGJ5Cit2aXJ0dWUgb2YgaXRzIGhpZ2hseS1vcHRpbWl6ZWQgSHVmZm1hbiBjb2Rpbmcgcm91dGluZXMuICBJbiBtYW55IGNhc2VzLCB0aGUKK3BlcmZvcm1hbmNlIG9mIGxpYmpwZWctdHVyYm8gcml2YWxzIHRoYXQgb2YgcHJvcHJpZXRhcnkgaGlnaC1zcGVlZCBKUEVHIGNvZGVjcy4KKworbGlianBlZy10dXJibyBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIGxpYmpwZWcgQVBJIGFzIHdlbGwgYXMgdGhlIGxlc3MKK3Bvd2VyZnVsIGJ1dCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBUdXJib0pQRUcgQVBJLiAgbGlianBlZy10dXJibyBhbHNvIGZlYXR1cmVzCitjb2xvcnNwYWNlIGV4dGVuc2lvbnMgdGhhdCBhbGxvdyBpdCB0byBjb21wcmVzcyBmcm9tL2RlY29tcHJlc3MgdG8gMzItYml0IGFuZAorYmlnLWVuZGlhbiBwaXhlbCBidWZmZXJzIChSR0JYLCBYQkdSLCBldGMuKSwgYXMgd2VsbCBhcyBhIGZ1bGwtZmVhdHVyZWQgSmF2YQoraW50ZXJmYWNlLgorCitsaWJqcGVnLXR1cmJvIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIGxpYmpwZWcvU0lNRCwgYW4gTU1YLWFjY2VsZXJhdGVkCitkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdjZiIGRldmVsb3BlZCBieSBNaXlhc2FrYSBNYXNhcnUuICBUaGUgVGlnZXJWTkMgYW5kCitWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjIGluIDIwMDksIGFuZCBpbgorZWFybHkgMjAxMCwgbGlianBlZy10dXJibyBzcHVuIG9mZiBpbnRvIGFuIGluZGVwZW5kZW50IHByb2plY3QsIHdpdGggdGhlIGdvYWwKK29mIG1ha2luZyBoaWdoLXNwZWVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiB0ZWNobm9sb2d5IGF2YWlsYWJsZSB0byBhCiticm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLgorCisjLS0+JXByZXAKKyMtLT4lc2V0dXAgLXEgLW4gQENNQUtFX1BST0pFQ1RfTkFNRUAtJXt2ZXJzaW9ufQorCisjLS0+JWJ1aWxkCisjLS0+Y21ha2UgLUciVW5peCBNYWtlZmlsZXMiIC1EQ01BS0VfQlVJTERfVFlQRT1AQ01BS0VfQlVJTERfVFlQRUAgXAorIy0tPiAgLURCVUlMRD0le3JlbGVhc2V9IFwKKyMtLT4gIC1EQ01BS0VfSU5TVEFMTF9CSU5ESVI9JXtfYmluZGlyfSBcCisjLS0+ICAtRENNQUtFX0lOU1RBTExfREFUQVJPT1RESVI9JXtfZGF0YXJvb3RkaXJ9IFwKKyMtLT4gIC1EQ01BS0VfSU5TVEFMTF9ET0NESVI9JXtfZG9jZGlyfSBcCisjLS0+ICAtRENNQUtFX0lOU1RBTExfSU5DTFVERURJUj0le19pbmNsdWRlZGlyfSBcCisjLS0+ICAtRENNQUtFX0lOU1RBTExfSkFWQURJUj0le19qYXZhZGlyfSBcCisjLS0+ICAtRENNQUtFX0lOU1RBTExfTElCRElSPSV7X2xpYmRpcn0gXAorIy0tPiAgLURDTUFLRV9JTlNUQUxMX01BTkRJUj0le19tYW5kaXJ9IFwKKyMtLT4gIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9JXtfcHJlZml4fSBcCisjLS0+ICAtRENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREU9QENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREVAIFwKKyMtLT4gIC1ERU5BQkxFX1NIQVJFRD1ARU5BQkxFX1NIQVJFREAgLURFTkFCTEVfU1RBVElDPUBFTkFCTEVfU1RBVElDQCBcCisjLS0+ICAtRFNPX01BSk9SX1ZFUlNJT049QFNPX01BSk9SX1ZFUlNJT05AIFwKKyMtLT4gIC1EU09fTUlOT1JfVkVSU0lPTj1AU09fTUlOT1JfVkVSU0lPTkAgXAorIy0tPiAgLURKUEVHX0xJQl9WRVJTSU9OPUBKUEVHX0xJQl9WRVJTSU9OQCBcCisjLS0+ICAtRFJFUVVJUkVfU0lNRD1AUkVRVUlSRV9TSU1EQCBcCisjLS0+ICAtRFdJVEhfMTJCSVQ9QFdJVEhfMTJCSVRAIC1EV0lUSF9BUklUSF9ERUM9QFdJVEhfQVJJVEhfREVDQCBcCisjLS0+ICAtRFdJVEhfQVJJVEhfRU5DPUBXSVRIX0FSSVRIX0VOQ0AgLURXSVRIX0pBVkE9QFdJVEhfSkFWQUAgXAorIy0tPiAgLURXSVRIX0pQRUc3PUBXSVRIX0pQRUc3QCAtRFdJVEhfSlBFRzg9QFdJVEhfSlBFRzhAIFwKKyMtLT4gIC1EV0lUSF9NRU1fU1JDRFNUPUBXSVRIX01FTV9TUkNEU1RAIC1EV0lUSF9TSU1EPUBXSVRIX1NJTURAIFwKKyMtLT4gIC1EV0lUSF9UVVJCT0pQRUc9QFdJVEhfVFVSQk9KUEVHQCAuCisjLS0+bWFrZSBERVNURElSPSRSUE1fQlVJTERfUk9PVAorCislaW5zdGFsbAorCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCittYWtlIGluc3RhbGwgREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKKy9zYmluL2xkY29uZmlnIC1uICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0KKworIy0tPiVpZiAwCisKKyMgVGhpcyBpcyBvbmx5IG5lZWRlZCB0byBzdXBwb3J0IGluLXRyZWUgUlBNIGdlbmVyYXRpb24gdmlhICdtYWtlIHJwbScuICBXaGVuCisjIGJ1aWxkaW5nIGZyb20gYSBTUlBNLCB3ZSBjb250cm9sIHdoZXJlIHRoaW5ncyBhcmUgaW5zdGFsbGVkIHZpYSBDTWFrZQorIyB2YXJpYWJsZXMuCisKK3NhZmVkaXJtb3ZlICgpCit7CisJaWYgWyAiJDEiID0gIiQyIiBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKwlpZiBbICIkMSIgPSAiIiAtbyAhIC1kICIkMSIgXTsgdGhlbgorCQllY2hvIHNhZmVkaXJtb3ZlOiBzb3VyY2UgZGlyICQxIGlzIG5vdCB2YWxpZAorCQlyZXR1cm4gMQorCWZpCisJaWYgWyAiJDIiID0gIiIgLW8gLWUgIiQyIiBdOyB0aGVuCisJCWVjaG8gc2FmZWRpcm1vdmU6IGRlc3QgZGlyICQyIGlzIG5vdCB2YWxpZAorCQlyZXR1cm4gMQorCWZpCisJaWYgWyAiJDMiID0gIiIgLW8gLWUgIiQzIiBdOyB0aGVuCisJCWVjaG8gc2FmZWRpcm1vdmU6IHRtcCBkaXIgJDMgaXMgbm90IHZhbGlkCisJCXJldHVybiAxCisJZmkKKwlta2RpciAtcCAkMworCW12ICQxLyogJDMvCisJcm1kaXIgJDEKKwlta2RpciAtcCAkMgorCW12ICQzLyogJDIvCisJcm1kaXIgJDMKKwlyZXR1cm4gMAorfQorCitMSlRfRE9DRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfRE9DRElSQAoraWYgWyAhICIkTEpUX0RPQ0RJUiIgPSAiJXtfZG9jZGlyfSIgXTsgdGhlbgorCXNhZmVkaXJtb3ZlICRSUE1fQlVJTERfUk9PVC8kTEpUX0RPQ0RJUiAkUlBNX0JVSUxEX1JPT1QvJXtfZG9jZGlyfSAkUlBNX0JVSUxEX1JPT1QvX190bXBkb2MKK2ZpCisKKyMtLT4lZW5kaWYKKworTEpUX0RPQ0RJUj1AQ01BS0VfSU5TVEFMTF9GVUxMX0RPQ0RJUkAKK2lmIFsgIiV7X3ByZWZpeH0iID0gIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQCIgLWEgIiRMSlRfRE9DRElSIiA9ICJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAvZG9jIiBdOyB0aGVuCisJbG4gLWZzICV7X2RvY2Rpcn0gJFJQTV9CVUlMRF9ST09ULyRMSlRfRE9DRElSCitmaQorCislcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZworCislcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislZmlsZXMKKyVkZWZhdHRyKC0scm9vdCxyb290KQorJWRpciAle19kb2NkaXJ9CislZG9jICV7X2RvY2Rpcn0vKgorJWRpciAle19wcmVmaXh9CislaWYgIiV7X3ByZWZpeH0iID09ICJAQ01BS0VfSU5TVEFMTF9ERUZBVUxUX1BSRUZJWEAiICYmICIle19kb2NkaXJ9IiAhPSAiJXtfcHJlZml4fS9kb2MiCisgJXtfcHJlZml4fS9kb2MKKyVlbmRpZgorJWRpciAle19iaW5kaXJ9Cisle19iaW5kaXJ9L2NqcGVnCisle19iaW5kaXJ9L2RqcGVnCisle19iaW5kaXJ9L2pwZWd0cmFuCislaWYgIiV7X3dpdGhfdHVyYm9qcGVnfSIgPT0gIjEiCisgJXtfYmluZGlyfS90amJlbmNoCislZW5kaWYKKyV7X2JpbmRpcn0vcmRqcGdjb20KKyV7X2JpbmRpcn0vd3JqcGdjb20KKyVkaXIgJXtfbGliZGlyfQorJWlmICIle19lbmFibGVfc2hhcmVkfSIgPT0gIjEiCisgJXtfbGliZGlyfS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC5AU09fQUdFQC5AU09fTUlOT1JfVkVSU0lPTkAKKyAle19saWJkaXJ9L2xpYmpwZWcuc28uQFNPX01BSk9SX1ZFUlNJT05ACisgJXtfbGliZGlyfS9saWJqcGVnLnNvCislZW5kaWYKKyVpZiAiJXtfZW5hYmxlX3N0YXRpY30iID09ICIxIgorICV7X2xpYmRpcn0vbGlianBlZy5hCislZW5kaWYKKyV7X2xpYmRpcn0vcGtnY29uZmlnCisle19saWJkaXJ9L3BrZ2NvbmZpZy9saWJqcGVnLnBjCislaWYgIiV7X3dpdGhfdHVyYm9qcGVnfSIgPT0gIjEiCisgJWlmICIle19lbmFibGVfc2hhcmVkfSIgPT0gIjEiIHx8ICIle193aXRoX2phdmF9IiA9PSAiMSIKKyAgJXtfbGliZGlyfS9saWJ0dXJib2pwZWcuc28uQFRVUkJPSlBFR19TT19WRVJTSU9OQAorICAle19saWJkaXJ9L2xpYnR1cmJvanBlZy5zby5AVFVSQk9KUEVHX1NPX01BSk9SX1ZFUlNJT05ACisgICV7X2xpYmRpcn0vbGlidHVyYm9qcGVnLnNvCisgJWVuZGlmCisgJWlmICIle19lbmFibGVfc3RhdGljfSIgPT0gIjEiCisgICV7X2xpYmRpcn0vbGlidHVyYm9qcGVnLmEKKyAlZW5kaWYKKyAle19saWJkaXJ9L3BrZ2NvbmZpZy9saWJ0dXJib2pwZWcucGMKKyVlbmRpZgorJWRpciAle19pbmNsdWRlZGlyfQorJXtfaW5jbHVkZWRpcn0vamNvbmZpZy5oCisle19pbmNsdWRlZGlyfS9qZXJyb3IuaAorJXtfaW5jbHVkZWRpcn0vam1vcmVjZmcuaAorJXtfaW5jbHVkZWRpcn0vanBlZ2xpYi5oCislaWYgIiV7X3dpdGhfdHVyYm9qcGVnfSIgPT0gIjEiCisgJXtfaW5jbHVkZWRpcn0vdHVyYm9qcGVnLmgKKyVlbmRpZgorJWRpciAle19tYW5kaXJ9CislZGlyICV7X21hbmRpcn0vbWFuMQorJXtfbWFuZGlyfS9tYW4xL2NqcGVnLjEqCisle19tYW5kaXJ9L21hbjEvZGpwZWcuMSoKKyV7X21hbmRpcn0vbWFuMS9qcGVndHJhbi4xKgorJXtfbWFuZGlyfS9tYW4xL3JkanBnY29tLjEqCisle19tYW5kaXJ9L21hbjEvd3JqcGdjb20uMSoKKyVpZiAiJXtfcHJlZml4fSIgIT0gIiV7X2RhdGFyb290ZGlyfSIKKyAlZGlyICV7X2RhdGFyb290ZGlyfQorJWVuZGlmCislaWYgIiV7X3dpdGhfamF2YX0iID09ICIxIgorICVkaXIgJXtfamF2YWRpcn0KKyAle19qYXZhZGlyfS90dXJib2pwZWcuamFyCislZW5kaWYKKyVjaGFuZ2Vsb2cKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvdW5pbnN0YWxsLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vcmVsZWFzZS91bmluc3RhbGwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxYmE3NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3JlbGVhc2UvdW5pbnN0YWxsLmluCkBAIC0wLDAgKzEsMTEzIEBACisjIENvcHlyaWdodCAoQykyMDA5LTIwMTEsIDIwMTMsIDIwMTYgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworIyAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIS9iaW4vc2gKKworaWYgWyAhICJgaWQgLXVgIiA9ICIwIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IFRoaXMgc2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgcm9vdCIKKwlleGl0IC0xCitmaQorCitQS0dOQU1FPUBQS0dOQU1FQAorUEtHSUQ9QFBLR0lEQAorUkVDRUlQVD0vTGlicmFyeS9SZWNlaXB0cy8kUEtHTkFNRS5wa2cKKworTFNCT009CitpZiBbIC1kICRSRUNFSVBUIF07IHRoZW4KKwlMU0JPTT0nbHNib20gLXMgLWYgLWwgJyRSRUNFSVBUJy9Db250ZW50cy9BcmNoaXZlLmJvbScKK2Vsc2UKKwlMU0JPTT0ncGtndXRpbCAtLWZpbGVzICckUEtHSUQKK2ZpCisKK215bHNib20oKQoreworCSRMU0JPTSB8fCAoZWNobyAiRVJST1I6IENvdWxkIG5vdCBsaXN0IHBhY2thZ2UgY29udGVudHMiOyBleGl0IC0xKQorfQorCitlY2hvIFJlbW92aW5nIHBhY2thZ2UgZmlsZXMgLi4uCitFWElUU1RBVFVTPTAKK3B1c2hkIC8KK215bHNib20gfCB3aGlsZSByZWFkIGZpbGU7IGRvCisJaWYgWyAhIC1kICIkZmlsZSIgXTsgdGhlbiBybSAiJGZpbGUiIDI+JjEgfHwgRVhJVFNUQVRVUz0tMTsgZmkKK2RvbmUKK3BvcGQKKworZWNobyBSZW1vdmluZyBwYWNrYWdlIGRpcmVjdG9yaWVzIC4uLgorUFJFRklYPUBDTUFLRV9JTlNUQUxMX1BSRUZJWEAKK0JJTkRJUj1AQ01BS0VfSU5TVEFMTF9GVUxMX0JJTkRJUkAKK0RBVEFST09URElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfREFUQVJPT1RESVJACitJTkNMVURFRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfSU5DTFVERURJUkAKK0pBVkFESVI9QENNQUtFX0lOU1RBTExfRlVMTF9KQVZBRElSQAorTElCRElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSQAorTUFORElSPUBDTUFLRV9JTlNUQUxMX0ZVTExfTUFORElSQAorCitpZiBbIC1kICRCSU5ESVIgXTsgdGhlbgorCXJtZGlyICRCSU5ESVIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCitmaQoraWYgWyAtZCAkTElCRElSL3BrZ2NvbmZpZyBdOyB0aGVuCisJcm1kaXIgJExJQkRJUi9wa2djb25maWcgMj4mMSB8fCBFWElUU1RBVFVTPS0xCitmaQoraWYgWyAtZCAkTElCRElSIF07IHRoZW4KKwlybWRpciAkTElCRElSIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZmkKK2lmIFsgLWQgJElOQ0xVREVESVIgXTsgdGhlbgorCXJtZGlyICRJTkNMVURFRElSIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZmkKK2lmIFsgIiRQUkVGSVgiID0gIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQCIgLWEgIiRMSUJESVIiID0gIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQC9saWIiIF07IHRoZW4KKwlpZiBbIC1oICRMSUJESVJcMzIgXTsgdGhlbgorCQlybSAkTElCRElSXDMyIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorCWZpCisJaWYgWyAtaCAkTElCRElSXDY0IF07IHRoZW4KKwkJcm0gJExJQkRJUlw2NCAyPiYxIHx8IEVYSVRTVEFUVVM9LTEKKwlmaQorZmkKK2lmIFsgLWQgJE1BTkRJUi9tYW4xIF07IHRoZW4KKwlybWRpciAkTUFORElSL21hbjEgMj4mMSB8fCBFWElUU1RBVFVTPS0xCitmaQoraWYgWyAtZCAkTUFORElSIF07IHRoZW4KKwlybWRpciAkTUFORElSIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZmkKK2lmIFsgLWQgJEpBVkFESVIgXTsgdGhlbgorCXJtZGlyICRKQVZBRElSIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZmkKK2lmIFsgLWQgJERBVEFST09URElSIC1hICIkREFUQVJPT1RESVIiICE9ICIkUFJFRklYIiBdOyB0aGVuCisJcm1kaXIgJERBVEFST09URElSIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZmkKK2lmIFsgIiRQUkVGSVgiID0gIkBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfUFJFRklYQCIgLWEgLWggIiRQUkVGSVgvZG9jIiBdOyB0aGVuCisJcm0gJFBSRUZJWC9kb2MgMj4mMSB8fCBFWElUU1RBVFVTPS0xCitmaQorcm1kaXIgJFBSRUZJWCAyPiYxIHx8IEVYSVRTVEFUVVM9LTEKK3JtZGlyIC9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBLR05BTUUgMj4mMSB8fCBFWElUU1RBVFVTPS0xCisKK2lmIFsgLWQgJFJFQ0VJUFQgXTsgdGhlbgorCWVjaG8gUmVtb3ZpbmcgcGFja2FnZSByZWNlaXB0IC4uLgorCXJtIC1yICRSRUNFSVBUIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZWxzZQorCWVjaG8gRm9yZ2V0dGluZyBwYWNrYWdlICRQS0dJRCAuLi4KKwlwa2d1dGlsIC0tZm9yZ2V0ICRQS0dJRAorZmkKKworZXhpdCAkRVhJVFNUQVRVUwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2hhcmVkbGliL0NNYWtlTGlzdHMudHh0IGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2hhcmVkbGliL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkNjAxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaGFyZWRsaWIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw5MiBAQAorIyBBbnl0aGluZyB0aGF0IG11c3QgYmUgbGlua2VkIGFnYWluc3QgdGhlIHNoYXJlZCBDIGxpYnJhcnkgb24gV2luZG93cyBtdXN0CisjIGJlIGJ1aWx0IGluIHRoaXMgc3ViZGlyZWN0b3J5LCBiZWNhdXNlIENNYWtlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gb3ZlcnJpZGUKKyMgdGhlIGNvbXBpbGVyIGZsYWdzIGZvciBlYWNoIGJ1aWxkIHR5cGUgZXhjZXB0IGF0IGRpcmVjdG9yeSBzY29wZS4gIE5vdGUKKyMgdG8gQ01ha2UgZGV2ZWxvcGVyczogIEFkZCBhIENPTVBJTEVfRkxBR1NfPENPTkZJRz4gdGFyZ2V0IHByb3BlcnR5LCBvcgorIyBiZXR0ZXIgeWV0LCBwcm92aWRlIGEgZnJpZW5kbHkgd2F5IG9mIGNvbmZpZ3VyaW5nIGEgV2luZG93cyB0YXJnZXQgdG8gdXNlIHRoZQorIyBzdGF0aWMgQyBsaWJyYXJ5LgorCitzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8uLikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9Ly4uKQorc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vLi4pCisKK2lmKE1TVkMpCisgICMgQnVpbGQgYWxsIGNvbmZpZ3VyYXRpb25zIGFnYWluc3Qgc2hhcmVkIEMgbGlicmFyeQorICBmb3JlYWNoKHZhciBDTUFLRV9DX0ZMQUdTIENNQUtFX0NfRkxBR1NfREVCVUcgQ01BS0VfQ19GTEFHU19SRUxFQVNFCisgICAgQ01BS0VfQ19GTEFHU19NSU5TSVpFUkVMIENNQUtFX0NfRkxBR1NfUkVMV0lUSERFQklORk8pCisgICAgaWYoJHt2YXJ9IE1BVENIRVMgIi9NVCIpCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL01UIiAiL01EIiAke3Zhcn0gIiR7JHt2YXJ9fSIpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGlmKCkKKworZm9yZWFjaChzcmMgJHtKUEVHX1NPVVJDRVN9KQorICBzZXQoSlBFR19TUkNTICR7SlBFR19TUkNTfSAuLi8ke3NyY30pCitlbmRmb3JlYWNoKCkKKworaWYoV0lUSF9TSU1EIEFORCBNU1ZDX0lERSkKKyAgIyBUaGlzIHRlbGxzIENNYWtlIHRoYXQgdGhlICJzb3VyY2UiIGZpbGVzIGhhdmVuJ3QgYmVlbiBnZW5lcmF0ZWQgeWV0CisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1NJTURfT0JKU30gUFJPUEVSVElFUyBHRU5FUkFURUQgMSkKK2VuZGlmKCkKKworaWYoV0lOMzIpCisgIGlmKFdJVEhfTUVNX1NSQ0RTVCkKKyAgICBzZXQoREVGRklMRSAuLi93aW4vanBlZyR7U09fTUFKT1JfVkVSU0lPTn0tbWVtc3JjZHN0LmRlZikKKyAgZWxzZSgpCisgICAgc2V0KERFRkZJTEUgLi4vd2luL2pwZWcke1NPX01BSk9SX1ZFUlNJT059LmRlZikKKyAgZW5kaWYoKQorZW5kaWYoKQorYWRkX2xpYnJhcnkoanBlZyBTSEFSRUQgJHtKUEVHX1NSQ1N9ICR7REVGRklMRX0gJDxUQVJHRVRfT0JKRUNUUzpzaW1kPgorICAke1NJTURfT0JKU30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhqcGVnIFBST1BFUlRJRVMgU09WRVJTSU9OICR7U09fTUFKT1JfVkVSU0lPTn0KKyAgVkVSU0lPTiAke1NPX01BSk9SX1ZFUlNJT059LiR7U09fQUdFfS4ke1NPX01JTk9SX1ZFUlNJT059KQoraWYoQVBQTEUpCisgIGlmKE5PVCBDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FX0NfRkxBRykKKyAgICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV9DX0ZMQUcgIi1XbCwtcnBhdGgsIikKKyAgZW5kaWYoKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoanBlZyBQUk9QRVJUSUVTIE1BQ09TWF9SUEFUSCAxKQorZW5kaWYoKQoraWYoTUFQRkxBRykKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGpwZWcgUFJPUEVSVElFUworICAgIExJTktfRkxBR1MgIiR7TUFQRkxBR30ke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vLi4vbGlianBlZy5tYXAiKQorZW5kaWYoKQoraWYoTVNWQykKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGpwZWcgUFJPUEVSVElFUyBTVUZGSVggJHtTT19NQUpPUl9WRVJTSU9OfS5kbGwpCisgICMgVGhlIGpzaW1kXyouYyBmaWxlIGlzIGJ1aWx0IHVzaW5nIC9NVCwgc28gdGhpcyBwcmV2ZW50cyBhIGxpbmtlciB3YXJuaW5nLgorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoanBlZyBQUk9QRVJUSUVTIExJTktfRkxBR1MgIi9OT0RFRkFVTFRMSUI6TElCQ01UIC9OT0RFRkFVTFRMSUI6TElCQ01URCIpCitlbHNlaWYoTUlOR1cpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhqcGVnIFBST1BFUlRJRVMgU1VGRklYIC0ke1NPX01BSk9SX1ZFUlNJT059LmRsbCkKK2VuZGlmKCkKKworaWYoV0lOMzIpCisgIHNldChVU0VfU0VUTU9ERSAiLURVU0VfU0VUTU9ERSIpCitlbmRpZigpCitpZihXSVRIXzEyQklUKQorICBzZXQoQ09NUElMRV9GTEFHUyAiLURHSUZfU1VQUE9SVEVEIC1EUFBNX1NVUFBPUlRFRCAke1VTRV9TRVRNT0RFfSIpCitlbHNlKCkKKyAgc2V0KENPTVBJTEVfRkxBR1MgIi1EQk1QX1NVUFBPUlRFRCAtREdJRl9TVVBQT1JURUQgLURQUE1fU1VQUE9SVEVEIC1EVEFSR0FfU1VQUE9SVEVEICR7VVNFX1NFVE1PREV9IikKKyAgc2V0KENKUEVHX0JNUF9TT1VSQ0VTIC4uL3JkYm1wLmMgLi4vcmR0YXJnYS5jKQorICBzZXQoREpQRUdfQk1QX1NPVVJDRVMgLi4vd3JibXAuYyAuLi93cnRhcmdhLmMpCitlbmRpZigpCisKK2FkZF9leGVjdXRhYmxlKGNqcGVnIC4uL2NqcGVnLmMgLi4vY2RqcGVnLmMgLi4vcmRnaWYuYyAuLi9yZHBwbS5jCisgIC4uL3Jkc3dpdGNoLmMgJHtDSlBFR19CTVBfU09VUkNFU30pCitzZXRfcHJvcGVydHkoVEFSR0VUIGNqcGVnIFBST1BFUlRZIENPTVBJTEVfRkxBR1MgJHtDT01QSUxFX0ZMQUdTfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhjanBlZyBqcGVnKQorCithZGRfZXhlY3V0YWJsZShkanBlZyAuLi9kanBlZy5jIC4uL2NkanBlZy5jIC4uL3JkY29sbWFwLmMgLi4vcmRzd2l0Y2guYworICAuLi93cmdpZi5jIC4uL3dycHBtLmMgJHtESlBFR19CTVBfU09VUkNFU30pCitzZXRfcHJvcGVydHkoVEFSR0VUIGRqcGVnIFBST1BFUlRZIENPTVBJTEVfRkxBR1MgJHtDT01QSUxFX0ZMQUdTfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhkanBlZyBqcGVnKQorCithZGRfZXhlY3V0YWJsZShqcGVndHJhbiAuLi9qcGVndHJhbi5jIC4uL2NkanBlZy5jIC4uL3Jkc3dpdGNoLmMgLi4vdHJhbnN1cHAuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhqcGVndHJhbiBqcGVnKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBqcGVndHJhbiBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke1VTRV9TRVRNT0RFfSIpCisKK2FkZF9leGVjdXRhYmxlKGpjc3Rlc3QgLi4vamNzdGVzdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpjc3Rlc3QganBlZykKKworaW5zdGFsbChUQVJHRVRTIGpwZWcgY2pwZWcgZGpwZWcganBlZ3RyYW4KKyAgQVJDSElWRSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfQorICBMSUJSQVJZIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisgIFJVTlRJTUUgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0JJTkRJUn0pCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL0NNYWtlTGlzdHMudHh0IGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNDY4YjFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDM1MSBAQAorbWFjcm8oc2ltZF9mYWlsIG1lc3NhZ2UpCisgIGlmKFJFUVVJUkVfU0lNRCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke21lc3NhZ2V9LiIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoV0FSTklORyAiJHttZXNzYWdlfS4gIFBlcmZvcm1hbmNlIHdpbGwgc3VmZmVyLiIpCisgICAgc2V0KFdJVEhfU0lNRCAwIFBBUkVOVF9TQ09QRSkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgeDg2Wy02NF0gKE5BU00pCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmKENQVV9UWVBFIFNUUkVRVUFMICJ4ODZfNjQiIE9SIENQVV9UWVBFIFNUUkVRVUFMICJpMzg2IikKKworc2V0KENNQUtFX0FTTV9OQVNNX0ZMQUdTX0RFQlVHX0lOSVQgIi1nIikKK3NldChDTUFLRV9BU01fTkFTTV9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUICItZyIpCisKKyMgQWxsb3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBOQVNNIGV4ZWN1dGFibGUgdG8gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBBU01fTkFTTQorIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFRoaXMgc2hvdWxkIGhhcHBlbiBhdXRvbWF0aWNhbGx5LCBidXQgdW5mb3J0dW5hdGVseQorIyBlbmFibGVfbGFuZ3VhZ2UoQVNNX05BU00pIGRvZXNuJ3QgcGFyc2UgdGhlIEFTTV9OQVNNIGVudmlyb25tZW50IHZhcmlhYmxlCisjIHVudGlsIGFmdGVyIENNQUtFX0FTTV9OQVNNX0NPTVBJTEVSIGhhcyBiZWVuIHBvcHVsYXRlZCB3aXRoIHRoZSByZXN1bHRzIG9mCisjIHNlYXJjaGluZyBmb3IgTkFTTSBvciBZQVNNIGluIHRoZSBQQVRILgoraWYoTk9UIERFRklORUQgQ01BS0VfQVNNX05BU01fQ09NUElMRVIgQU5EIERFRklORUQgRU5We0FTTV9OQVNNfSkKKyAgc2V0KENNQUtFX0FTTV9OQVNNX0NPTVBJTEVSICRFTlZ7QVNNX05BU019KQorZW5kaWYoKQorCitpZihDUFVfVFlQRSBTVFJFUVVBTCAieDg2XzY0IikKKyAgaWYoQ1lHV0lOKQorICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIHdpbjY0KQorICBlbmRpZigpCitlbHNlaWYoQ1BVX1RZUEUgU1RSRVFVQUwgImkzODYiKQorICBpZihCT1JMQU5EKQorICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIG9iaikKKyAgZWxzZWlmKENZR1dJTikKKyAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCB3aW4zMikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitlbmFibGVfbGFuZ3VhZ2UoQVNNX05BU00pCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfQVNNX05BU01fQ09NUElMRVIgPSAke0NNQUtFX0FTTV9OQVNNX0NPTVBJTEVSfSIpCisKK2lmKENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgTUFUQ0hFUyAibWFjaG8qIikKKyAgc2V0KENNQUtFX0FTTV9OQVNNX0ZMQUdTICIke0NNQUtFX0FTTV9OQVNNX0ZMQUdTfSAtRE1BQ0hPIikKK2Vsc2VpZihDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIE1BVENIRVMgImVsZioiKQorICBzZXQoQ01BS0VfQVNNX05BU01fRkxBR1MgIiR7Q01BS0VfQVNNX05BU01fRkxBR1N9IC1ERUxGIikKKyAgc2V0KENNQUtFX0FTTV9OQVNNX0RFQlVHX0ZPUk1BVCAiZHdhcmYyIikKK2VuZGlmKCkKK2lmKENQVV9UWVBFIFNUUkVRVUFMICJ4ODZfNjQiKQorICBpZihXSU4zMiBPUiBDWUdXSU4pCisgICAgc2V0KENNQUtFX0FTTV9OQVNNX0ZMQUdTICIke0NNQUtFX0FTTV9OQVNNX0ZMQUdTfSAtRFdJTjY0IikKKyAgZW5kaWYoKQorICBzZXQoQ01BS0VfQVNNX05BU01fRkxBR1MgIiR7Q01BS0VfQVNNX05BU01fRkxBR1N9IC1EX194ODZfNjRfXyIpCitlbHNlaWYoQ1BVX1RZUEUgU1RSRVFVQUwgImkzODYiKQorICBpZihCT1JMQU5EKQorICAgIHNldChDTUFLRV9BU01fTkFTTV9GTEFHUyAiJHtDTUFLRV9BU01fTkFTTV9GTEFHU30gLURPQkozMiIpCisgIGVsc2VpZihXSU4zMiBPUiBDWUdXSU4pCisgICAgc2V0KENNQUtFX0FTTV9OQVNNX0ZMQUdTICIke0NNQUtFX0FTTV9OQVNNX0ZMQUdTfSAtRFdJTjMyIikKKyAgZW5kaWYoKQorZW5kaWYoKQorCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCA9ICR7Q01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVH0iKQorCitpZihOT1QgQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCkKKyAgc2ltZF9mYWlsKCJTSU1EIGV4dGVuc2lvbnMgZGlzYWJsZWQ6IGNvdWxkIG5vdCBkZXRlcm1pbmUgTkFTTSBvYmplY3QgZm9ybWF0IikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9BU01fTkFTTV9DT01QSUxFUl9UWVBFCisgICIke0NNQUtFX0FTTV9OQVNNX0NPTVBJTEVSfSIgTkFNRV9XRSkKK2lmKENNQUtFX0FTTV9OQVNNX0NPTVBJTEVSX1RZUEUgTUFUQ0hFUyAieWFzbSIpCisgIGZvcmVhY2godmFyIENNQUtFX0FTTV9OQVNNX0ZMQUdTX0RFQlVHIENNQUtFX0FTTV9OQVNNX0ZMQUdTX1JFTFdJVEhERUJJTkZPKQorICAgIGlmKCR7dmFyfSBTVFJFUVVBTCAiLWciKQorICAgICAgaWYoQ01BS0VfQVNNX05BU01fREVCVUdfRk9STUFUKQorICAgICAgICBzZXRfcHJvcGVydHkoQ0FDSEUgJHt2YXJ9IFBST1BFUlRZIFZBTFVFICItZyAke0NNQUtFX0FTTV9OQVNNX0RFQlVHX0ZPUk1BVH0iKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldF9wcm9wZXJ0eShDQUNIRSAke3Zhcn0gUFJPUEVSVFkgVkFMVUUgIiIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGlmKCkKKworaWYoTk9UIFdJTjMyIEFORCAoQ01BS0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPUiBFTkFCTEVfU0hBUkVEKSkKKyAgc2V0KENNQUtFX0FTTV9OQVNNX0ZMQUdTICIke0NNQUtFX0FTTV9OQVNNX0ZMQUdTfSAtRFBJQyIpCitlbmRpZigpCisKK3N0cmluZyhUT1VQUEVSICR7Q01BS0VfQlVJTERfVFlQRX0gQ01BS0VfQlVJTERfVFlQRV9VQykKK3NldChFRkZFQ1RJVkVfQVNNX05BU01fRkxBR1MgIiR7Q01BS0VfQVNNX05BU01fRkxBR1N9ICR7Q01BS0VfQVNNX05BU01fRkxBR1NfJHtDTUFLRV9CVUlMRF9UWVBFX1VDfX0iKQorbWVzc2FnZShTVEFUVVMgIkNNQUtFX0FTTV9OQVNNX0ZMQUdTID0gJHtFRkZFQ1RJVkVfQVNNX05BU01fRkxBR1N9IikKKworc2V0KENNQUtFX0FTTV9OQVNNX0ZMQUdTICIke0NNQUtFX0FTTV9OQVNNX0ZMQUdTfSAtSVwiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L25hc20vXCIgLUlcIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0NQVV9UWVBFfS9cIiIpCisKK3NldChHUkVQIGdyZXApCitpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiU3VuT1MiKQorICBzZXQoR1JFUCBnZ3JlcCkKK2VuZGlmKCkKK2FkZF9jdXN0b21fdGFyZ2V0KGpzaW1kY2ZnIENPTU1BTkQKKyAgJHtDTUFLRV9DX0NPTVBJTEVSfSAtRSAtSSR7Q01BS0VfQklOQVJZX0RJUn0gLUkke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KKyAgICAtSSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfQorICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9uYXNtL2pzaW1kY2ZnLmluYy5oIHwKKyAgJHtHUkVQfSAtRSAnXltcOyVdfF5cICUnIHwgc2VkICdzJV9jcHBfcHJvdGVjdGlvbl8lJScgfAorICBzZWQgJ3NAJSBkZWZpbmVAJWRlZmluZUBnJyA+JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L25hc20vanNpbWRjZmcuaW5jKQorCitpZihDUFVfVFlQRSBTVFJFUVVBTCAieDg2XzY0IikKKyAgc2V0KFNJTURfU09VUkNFUyB4ODZfNjQvanNpbWRjcHUuYXNtIHg4Nl82NC9qZmRjdGZsdC1zc2UuYXNtCisgICAgeDg2XzY0L2pjY29sb3Itc3NlMi5hc20geDg2XzY0L2pjZ3JheS1zc2UyLmFzbSB4ODZfNjQvamNodWZmLXNzZTIuYXNtCisgICAgeDg2XzY0L2pjcGh1ZmYtc3NlMi5hc20geDg2XzY0L2pjc2FtcGxlLXNzZTIuYXNtIHg4Nl82NC9qZGNvbG9yLXNzZTIuYXNtCisgICAgeDg2XzY0L2pkbWVyZ2Utc3NlMi5hc20geDg2XzY0L2pkc2FtcGxlLXNzZTIuYXNtIHg4Nl82NC9qZmRjdGZzdC1zc2UyLmFzbQorICAgIHg4Nl82NC9qZmRjdGludC1zc2UyLmFzbSB4ODZfNjQvamlkY3RmbHQtc3NlMi5hc20geDg2XzY0L2ppZGN0ZnN0LXNzZTIuYXNtCisgICAgeDg2XzY0L2ppZGN0aW50LXNzZTIuYXNtIHg4Nl82NC9qaWRjdHJlZC1zc2UyLmFzbSB4ODZfNjQvanF1YW50Zi1zc2UyLmFzbQorICAgIHg4Nl82NC9qcXVhbnRpLXNzZTIuYXNtCisgICAgeDg2XzY0L2pjY29sb3ItYXZ4Mi5hc20geDg2XzY0L2pjZ3JheS1hdngyLmFzbSB4ODZfNjQvamNzYW1wbGUtYXZ4Mi5hc20KKyAgICB4ODZfNjQvamRjb2xvci1hdngyLmFzbSB4ODZfNjQvamRtZXJnZS1hdngyLmFzbSB4ODZfNjQvamRzYW1wbGUtYXZ4Mi5hc20KKyAgICB4ODZfNjQvamZkY3RpbnQtYXZ4Mi5hc20geDg2XzY0L2ppZGN0aW50LWF2eDIuYXNtIHg4Nl82NC9qcXVhbnRpLWF2eDIuYXNtKQorZWxzZSgpCisgIHNldChTSU1EX1NPVVJDRVMgaTM4Ni9qc2ltZGNwdS5hc20gaTM4Ni9qZmRjdGZsdC0zZG4uYXNtCisgICAgaTM4Ni9qaWRjdGZsdC0zZG4uYXNtIGkzODYvanF1YW50LTNkbi5hc20KKyAgICBpMzg2L2pjY29sb3ItbW14LmFzbSBpMzg2L2pjZ3JheS1tbXguYXNtIGkzODYvamNzYW1wbGUtbW14LmFzbQorICAgIGkzODYvamRjb2xvci1tbXguYXNtIGkzODYvamRtZXJnZS1tbXguYXNtIGkzODYvamRzYW1wbGUtbW14LmFzbQorICAgIGkzODYvamZkY3Rmc3QtbW14LmFzbSBpMzg2L2pmZGN0aW50LW1teC5hc20gaTM4Ni9qaWRjdGZzdC1tbXguYXNtCisgICAgaTM4Ni9qaWRjdGludC1tbXguYXNtIGkzODYvamlkY3RyZWQtbW14LmFzbSBpMzg2L2pxdWFudC1tbXguYXNtCisgICAgaTM4Ni9qZmRjdGZsdC1zc2UuYXNtIGkzODYvamlkY3RmbHQtc3NlLmFzbSBpMzg2L2pxdWFudC1zc2UuYXNtCisgICAgaTM4Ni9qY2NvbG9yLXNzZTIuYXNtIGkzODYvamNncmF5LXNzZTIuYXNtIGkzODYvamNodWZmLXNzZTIuYXNtCisgICAgaTM4Ni9qY3BodWZmLXNzZTIuYXNtIGkzODYvamNzYW1wbGUtc3NlMi5hc20gaTM4Ni9qZGNvbG9yLXNzZTIuYXNtCisgICAgaTM4Ni9qZG1lcmdlLXNzZTIuYXNtIGkzODYvamRzYW1wbGUtc3NlMi5hc20gaTM4Ni9qZmRjdGZzdC1zc2UyLmFzbQorICAgIGkzODYvamZkY3RpbnQtc3NlMi5hc20gaTM4Ni9qaWRjdGZsdC1zc2UyLmFzbSBpMzg2L2ppZGN0ZnN0LXNzZTIuYXNtCisgICAgaTM4Ni9qaWRjdGludC1zc2UyLmFzbSBpMzg2L2ppZGN0cmVkLXNzZTIuYXNtIGkzODYvanF1YW50Zi1zc2UyLmFzbQorICAgIGkzODYvanF1YW50aS1zc2UyLmFzbQorICAgIGkzODYvamNjb2xvci1hdngyLmFzbSBpMzg2L2pjZ3JheS1hdngyLmFzbSBpMzg2L2pjc2FtcGxlLWF2eDIuYXNtCisgICAgaTM4Ni9qZGNvbG9yLWF2eDIuYXNtIGkzODYvamRtZXJnZS1hdngyLmFzbSBpMzg2L2pkc2FtcGxlLWF2eDIuYXNtCisgICAgaTM4Ni9qZmRjdGludC1hdngyLmFzbSBpMzg2L2ppZGN0aW50LWF2eDIuYXNtIGkzODYvanF1YW50aS1hdngyLmFzbSkKK2VuZGlmKCkKKworaWYoTVNWQ19JREUpCisgIHNldChPQkpESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NNQUtFX0NGR19JTlRESVJ9IikKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiAiICI7IiBDTUFLRV9BU01fTkFTTV9GTEFHUyAiJHtDTUFLRV9BU01fTkFTTV9GTEFHU30iKQorZW5kaWYoKQorCitmaWxlKEdMT0IgSU5DX0ZJTEVTIG5hc20vKi5pbmMpCisKK2ZvcmVhY2goZmlsZSAke1NJTURfU09VUkNFU30pCisgIHNldChPQkpFQ1RfREVQRU5EUyAiIikKKyAgaWYoJHtmaWxlfSBNQVRDSEVTIGpjY29sb3IpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgImpjY29sb3IiICJqY2NvbGV4dCIgREVQRklMRSAke2ZpbGV9KQorICAgIHNldChPQkpFQ1RfREVQRU5EUyAke09CSkVDVF9ERVBFTkRTfQorICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7REVQRklMRX0pCisgIGVuZGlmKCkKKyAgaWYoJHtmaWxlfSBNQVRDSEVTIGpjZ3JheSkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiamNncmF5IiAiamNncnlleHQiIERFUEZJTEUgJHtmaWxlfSkKKyAgICBzZXQoT0JKRUNUX0RFUEVORFMgJHtPQkpFQ1RfREVQRU5EU30KKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0RFUEZJTEV9KQorICBlbmRpZigpCisgIGlmKCR7ZmlsZX0gTUFUQ0hFUyBqZGNvbG9yKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJqZGNvbG9yIiAiamRjb2xleHQiIERFUEZJTEUgJHtmaWxlfSkKKyAgICBzZXQoT0JKRUNUX0RFUEVORFMgJHtPQkpFQ1RfREVQRU5EU30KKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0RFUEZJTEV9KQorICBlbmRpZigpCisgIGlmKCR7ZmlsZX0gTUFUQ0hFUyBqZG1lcmdlKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJqZG1lcmdlIiAiamRtcmdleHQiIERFUEZJTEUgJHtmaWxlfSkKKyAgICBzZXQoT0JKRUNUX0RFUEVORFMgJHtPQkpFQ1RfREVQRU5EU30KKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0RFUEZJTEV9KQorICBlbmRpZigpCisgIHNldChPQkpFQ1RfREVQRU5EUyAke09CSkVDVF9ERVBFTkRTfSAke0lOQ19GSUxFU30pCisgIGlmKE1TVkNfSURFKQorICAgICMgVGhlIENNYWtlIFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9ycyBkbyBub3Qgd29yayBwcm9wZXJseSB3aXRoIHRoZSBBU01fTkFTTQorICAgICMgbGFuZ3VhZ2UsIHNvIHdlIGhhdmUgdG8gZ28gcm9ndWUgaGVyZSBhbmQgdXNlIGEgY3VzdG9tIGNvbW1hbmQgbGlrZSB3ZQorICAgICMgZGlkIGluIHByaW9yIHZlcnNpb25zIG9mIGxpYmpwZWctdHVyYm8uICAoVGhpcyBpcyB3aHkgd2UgY2FuJ3QgaGF2ZSBuaWNlCisgICAgIyB0aGluZ3MuKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIke0NQVV9UWVBFfS8iICIiIGZpbGVuYW1lICR7ZmlsZX0pCisgICAgc2V0KFNJTURfT0JKICR7T0JKRElSfS8ke2ZpbGVuYW1lfS5vYmopCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke1NJTURfT0JKfSBERVBFTkRTICR7ZmlsZX0gJHtPQkpFQ1RfREVQRU5EU30KKyAgICAgIENPTU1BTkQgJHtDTUFLRV9BU01fTkFTTV9DT01QSUxFUn0gLWYke0NNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVR9CisgICAgICAgICR7Q01BS0VfQVNNX05BU01fRkxBR1N9ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2ZpbGV9CisgICAgICAgIC1vJHtTSU1EX09CSn0pCisgICAgc2V0KFNJTURfT0JKUyAke1NJTURfT0JKU30gJHtTSU1EX09CSn0pCisgIGVsc2UoKQorICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke2ZpbGV9IFBST1BFUlRJRVMgT0JKRUNUX0RFUEVORFMKKyAgICAgICIke09CSkVDVF9ERVBFTkRTfSIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitpZihNU1ZDX0lERSkKKyAgc2V0KFNJTURfT0JKUyAke1NJTURfT0JKU30gUEFSRU5UX1NDT1BFKQorICBhZGRfbGlicmFyeShzaW1kIE9CSkVDVCAke0NQVV9UWVBFfS9qc2ltZC5jKQorICBhZGRfY3VzdG9tX3RhcmdldChzaW1kLW9ianMgREVQRU5EUyAke1NJTURfT0JKU30pCisgIGFkZF9kZXBlbmRlbmNpZXMoc2ltZCBzaW1kLW9ianMpCitlbHNlKCkKKyAgYWRkX2xpYnJhcnkoc2ltZCBPQkpFQ1QgJHtTSU1EX1NPVVJDRVN9ICR7Q1BVX1RZUEV9L2pzaW1kLmMpCitlbmRpZigpCitpZihOT1QgV0lOMzIgQU5EIChDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIE9SIEVOQUJMRV9TSEFSRUQpKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2ltZCBQUk9QRVJUSUVTIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgMSkKK2VuZGlmKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFSTSAoR0FTKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitlbHNlaWYoQ1BVX1RZUEUgU1RSRVFVQUwgImFybTY0IiBPUiBDUFVfVFlQRSBTVFJFUVVBTCAiYXJtIikKKworZW5hYmxlX2xhbmd1YWdlKEFTTSkKKworc2V0KENNQUtFX0FTTV9GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAke0NNQUtFX0FTTV9GTEFHU30iKQorCitzdHJpbmcoVE9VUFBFUiAke0NNQUtFX0JVSUxEX1RZUEV9IENNQUtFX0JVSUxEX1RZUEVfVUMpCitzZXQoRUZGRUNUSVZFX0FTTV9GTEFHUyAiJHtDTUFLRV9BU01fRkxBR1N9ICR7Q01BS0VfQVNNX0ZMQUdTXyR7Q01BS0VfQlVJTERfVFlQRV9VQ319IikKK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9BU01fRkxBR1MgPSAke0VGRkVDVElWRV9BU01fRkxBR1N9IikKKworIyBUZXN0IHdoZXRoZXIgd2UgbmVlZCBnYXMtcHJlcHJvY2Vzc29yLnBsCitpZihDUFVfVFlQRSBTVFJFUVVBTCAiYXJtIikKKyAgZmlsZShXUklURSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ2FzdGVzdC5TICIKKyAgICAudGV4dAorICAgIC5mcHUgbmVvbgorICAgIC5hcmNoIGFybXY3YQorICAgIC5vYmplY3RfYXJjaCBhcm12NAorICAgIC5hcm0KKyAgICBwbGQgW3IwXQorICAgIHZtb3ZuLnUxNiBkMCwgcTAiKQorZWxzZSgpCisgIGZpbGUoV1JJVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2dhc3Rlc3QuUyAiCisgICAgLnRleHQKKyAgICBNWVZBUiAucmVxIHgwCisgICAgbW92aSB2MC4xNmIsICMxMDAKKyAgICBtb3YgTVlWQVIsICMxMDAKKyAgICAudW5yZXEgTVlWQVIiKQorZW5kaWYoKQorCitzZXBhcmF0ZV9hcmd1bWVudHMoQ01BS0VfQVNNX0ZMQUdTX1NFUCBVTklYX0NPTU1BTkQgIiR7Q01BS0VfQVNNX0ZMQUdTfSIpCisKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQVNNX0NPTVBJTEVSfSAke0NNQUtFX0FTTV9GTEFHU19TRVB9CisgICAgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1jICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9nYXN0ZXN0LlMKKyAgUkVTVUxUX1ZBUklBQkxFIFJFU1VMVCBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUIEVSUk9SX1ZBUklBQkxFIEVSUk9SKQoraWYoTk9UIFJFU1VMVCBFUVVBTCAwKQorICBtZXNzYWdlKFNUQVRVUyAiR0FTIGFwcGVhcnMgdG8gYmUgYnJva2VuLiAgVHJ5aW5nIGdhcy1wcmVwcm9jZXNzb3IucGwgLi4uIikKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgZ2FzLXByZXByb2Nlc3Nvci5wbCAke0NNQUtFX0FTTV9DT01QSUxFUn0KKyAgICAgICR7Q01BS0VfQVNNX0ZMQUdTX1NFUH0gLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1jCisgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ2FzdGVzdC5TCisgICAgUkVTVUxUX1ZBUklBQkxFIFJFU1VMVCBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUIEVSUk9SX1ZBUklBQkxFIEVSUk9SKQorICBpZihOT1QgUkVTVUxUIEVRVUFMIDApCisgICAgc2ltZF9mYWlsKCJTSU1EIGV4dGVuc2lvbnMgZGlzYWJsZWQ6IEdBUyBpcyBub3Qgd29ya2luZyBwcm9wZXJseSIpCisgICAgcmV0dXJuKCkKKyAgZWxzZSgpCisgICAgbWVzc2FnZShTVEFUVVMgIlVzaW5nIGdhcy1wcmVwcm9jZXNzb3IucGwiKQorICAgIGNvbmZpZ3VyZV9maWxlKGdhcy1wcmVwcm9jZXNzb3IuaW4gZ2FzLXByZXByb2Nlc3NvciBAT05MWSkKKyAgICBzZXQoQ01BS0VfQVNNX0NPTVBJTEVSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9nYXMtcHJlcHJvY2Vzc29yKQorICBlbmRpZigpCitlbHNlKCkKKyAgbWVzc2FnZShTVEFUVVMgIkdBUyBpcyB3b3JraW5nIHByb3Blcmx5IikKK2VuZGlmKCkKKworZmlsZShSRU1PVkUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2dhc3Rlc3QuUykKKworYWRkX2xpYnJhcnkoc2ltZCBPQkpFQ1QgJHtDUFVfVFlQRX0vanNpbWRfbmVvbi5TICR7Q1BVX1RZUEV9L2pzaW1kLmMpCisKK2lmKENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT1IgRU5BQkxFX1NIQVJFRCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNpbWQgUFJPUEVSVElFUyBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIDEpCitlbmRpZigpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNSVBTIChHQVMpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Vsc2VpZihDUFVfVFlQRSBTVFJFUVVBTCAibWlwcyIpCisKK2VuYWJsZV9sYW5ndWFnZShBU00pCisKK3N0cmluZyhUT1VQUEVSICR7Q01BS0VfQlVJTERfVFlQRX0gQ01BS0VfQlVJTERfVFlQRV9VQykKK3NldChFRkZFQ1RJVkVfQVNNX0ZMQUdTICIke0NNQUtFX0FTTV9GTEFHU30gJHtDTUFLRV9BU01fRkxBR1NfJHtDTUFLRV9CVUlMRF9UWVBFX1VDfX0iKQorbWVzc2FnZShTVEFUVVMgIkNNQUtFX0FTTV9GTEFHUyA9ICR7RUZGRUNUSVZFX0FTTV9GTEFHU30iKQorCithZGRfbGlicmFyeShzaW1kIE9CSkVDVCAke0NQVV9UWVBFfS9qc2ltZF9kc3ByMi5TICR7Q1BVX1RZUEV9L2pzaW1kLmMpCisKK2lmKENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT1IgRU5BQkxFX1NIQVJFRCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNpbWQgUFJPUEVSVElFUyBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIDEpCitlbmRpZigpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTG9vbmdzb24gKEludHJpbnNpY3MpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Vsc2VpZihDUFVfVFlQRSBTVFJFUVVBTCAibG9vbmdzb24iKQorCitzZXQoU0lNRF9TT1VSQ0VTIGxvb25nc29uL2pjY29sb3ItbW1pLmMgbG9vbmdzb24vamNzYW1wbGUtbW1pLmMKKyAgbG9vbmdzb24vamRjb2xvci1tbWkuYyBsb29uZ3Nvbi9qZHNhbXBsZS1tbWkuYyBsb29uZ3Nvbi9qZmRjdGludC1tbWkuYworICBsb29uZ3Nvbi9qaWRjdGludC1tbWkuYyBsb29uZ3Nvbi9qcXVhbnRpLW1taS5jKQorCitpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKKyAgZm9yZWFjaChmaWxlICR7U0lNRF9TT1VSQ0VTfSkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFICR7ZmlsZX0gQVBQRU5EX1NUUklORyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTCisgICAgICAiIC1mbm8tc3RyaWN0LWFsaWFzaW5nIikKKyAgZW5kZm9yZWFjaCgpCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KHNpbWQgT0JKRUNUICR7U0lNRF9TT1VSQ0VTfSBsb29uZ3Nvbi9qc2ltZC5jKQorCitpZihDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIE9SIEVOQUJMRV9TSEFSRUQpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhzaW1kIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSAxKQorZW5kaWYoKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBvd2VyUEMgKEludHJpbnNpY3MpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Vsc2VpZihDUFVfVFlQRSBTVFJFUVVBTCAicG93ZXJwYyIpCisKK3NldChDTUFLRV9SRVFVSVJFRF9GTEFHUyAtbWFsdGl2ZWMpCisKK2NoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKKyAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKyAgaW50IG1haW4odm9pZCkgeworICAgIF9fdmVjdG9yIGludCB2aSA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBpWzRdOworICAgIHZlY19zdCh2aSwgMCwgaSk7CisgICAgcmV0dXJuIGlbMF07CisgIH0iIEhBVkVfQUxUSVZFQykKKwordW5zZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MpCisKK2lmKE5PVCBIQVZFX0FMVElWRUMpCisgIHNpbWRfZmFpbCgiU0lNRCBleHRlbnNpb25zIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgQ1BVIChQb3dlclBDIFNQRSkiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQoU0lNRF9TT1VSQ0VTIHBvd2VycGMvamNjb2xvci1hbHRpdmVjLmMgcG93ZXJwYy9qY2dyYXktYWx0aXZlYy5jCisgIHBvd2VycGMvamNzYW1wbGUtYWx0aXZlYy5jIHBvd2VycGMvamRjb2xvci1hbHRpdmVjLmMKKyAgcG93ZXJwYy9qZG1lcmdlLWFsdGl2ZWMuYyBwb3dlcnBjL2pkc2FtcGxlLWFsdGl2ZWMuYworICBwb3dlcnBjL2pmZGN0ZnN0LWFsdGl2ZWMuYyBwb3dlcnBjL2pmZGN0aW50LWFsdGl2ZWMuYworICBwb3dlcnBjL2ppZGN0ZnN0LWFsdGl2ZWMuYyBwb3dlcnBjL2ppZGN0aW50LWFsdGl2ZWMuYworICBwb3dlcnBjL2pxdWFudGktYWx0aXZlYy5jKQorCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtTSU1EX1NPVVJDRVN9IFBST1BFUlRJRVMKKyAgQ09NUElMRV9GTEFHUyAtbWFsdGl2ZWMpCisKK2FkZF9saWJyYXJ5KHNpbWQgT0JKRUNUICR7U0lNRF9TT1VSQ0VTfSBwb3dlcnBjL2pzaW1kLmMpCisKK2lmKENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT1IgRU5BQkxFX1NIQVJFRCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNpbWQgUFJPUEVSVElFUyBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIDEpCitlbmRpZigpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOb25lCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Vsc2UoKQorCitzaW1kX2ZhaWwoIlNJTUQgZXh0ZW5zaW9ucyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIENQVSAoJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSkiKQorCitlbmRpZigpICMgQ1BVX1RZUEUKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvYXJtL2pzaW1kLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybS9qc2ltZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjgxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybS9qc2ltZC5jCkBAIC0wLDAgKzEsNzIwIEBACisvKgorICoganNpbWRfYXJtLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExLCAyMDEzLTIwMTQsIDIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzLgorICoKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJub3JtYWwiIHBvcnRpb25zCisgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCisgKiAzMi1iaXQgQVJNIGFyY2hpdGVjdHVyZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiLi4vLi4vamluY2x1ZGUuaCIKKyNpbmNsdWRlICIuLi8uLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWQuaCIKKyNpbmNsdWRlICIuLi8uLi9qZGN0LmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWRkY3QuaCIKKyNpbmNsdWRlICIuLi9qc2ltZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNpbWRfc3VwcG9ydCA9IH4wOworc3RhdGljIHVuc2lnbmVkIGludCBzaW1kX2h1ZmZtYW4gPSAxOworCisjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgZGVmaW5lZChfX0FORFJPSURfXykKKworI2RlZmluZSBTT01FV0hBVF9TQU5FX1BST0NfQ1BVSU5GT19TSVpFX0xJTUlUICAoMTAyNCAqIDEwMjQpCisKK0xPQ0FMKGludCkKK2NoZWNrX2ZlYXR1cmUoY2hhciAqYnVmZmVyLCBjaGFyICpmZWF0dXJlKQoreworICBjaGFyICpwOworCisgIGlmICgqZmVhdHVyZSA9PSAwKQorICAgIHJldHVybiAwOworICBpZiAoc3RybmNtcChidWZmZXIsICJGZWF0dXJlcyIsIDgpICE9IDApCisgICAgcmV0dXJuIDA7CisgIGJ1ZmZlciArPSA4OworICB3aGlsZSAoaXNzcGFjZSgqYnVmZmVyKSkKKyAgICBidWZmZXIrKzsKKworICAvKiBDaGVjayBpZiAnZmVhdHVyZScgaXMgcHJlc2VudCBpbiB0aGUgYnVmZmVyIGFzIGEgc2VwYXJhdGUgd29yZCAqLworICB3aGlsZSAoKHAgPSBzdHJzdHIoYnVmZmVyLCBmZWF0dXJlKSkpIHsKKyAgICBpZiAocCA+IGJ1ZmZlciAmJiAhaXNzcGFjZSgqKHAgLSAxKSkpIHsKKyAgICAgIGJ1ZmZlcisrOworICAgICAgY29udGludWU7CisgICAgfQorICAgIHAgKz0gc3RybGVuKGZlYXR1cmUpOworICAgIGlmICgqcCAhPSAwICYmICFpc3NwYWNlKCpwKSkgeworICAgICAgYnVmZmVyKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK0xPQ0FMKGludCkKK3BhcnNlX3Byb2NfY3B1aW5mbyhpbnQgYnVmc2l6ZSkKK3sKKyAgY2hhciAqYnVmZmVyID0gKGNoYXIgKiltYWxsb2MoYnVmc2l6ZSk7CisgIEZJTEUgKmZkOworCisgIHNpbWRfc3VwcG9ydCA9IDA7CisKKyAgaWYgKCFidWZmZXIpCisgICAgcmV0dXJuIDA7CisKKyAgZmQgPSBmb3BlbigiL3Byb2MvY3B1aW5mbyIsICJyIik7CisgIGlmIChmZCkgeworICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIGJ1ZnNpemUsIGZkKSkgeworICAgICAgaWYgKCFzdHJjaHIoYnVmZmVyLCAnXG4nKSAmJiAhZmVvZihmZCkpIHsKKyAgICAgICAgLyogImltcG9zc2libGUiIGhhcHBlbmVkIC0gaW5zdWZmaWNpZW50IHNpemUgb2YgdGhlIGJ1ZmZlciEgKi8KKyAgICAgICAgZmNsb3NlKGZkKTsKKyAgICAgICAgZnJlZShidWZmZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGlmIChjaGVja19mZWF0dXJlKGJ1ZmZlciwgIm5lb24iKSkKKyAgICAgICAgc2ltZF9zdXBwb3J0IHw9IEpTSU1EX05FT047CisgICAgfQorICAgIGZjbG9zZShmZCk7CisgIH0KKyAgZnJlZShidWZmZXIpOworICByZXR1cm4gMTsKK30KKworI2VuZGlmCisKKy8qCisgKiBDaGVjayB3aGF0IFNJTUQgYWNjZWxlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorICoKKyAqIEZJWE1FOiBUaGlzIGNvZGUgaXMgcmFjeSB1bmRlciBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LgorICovCitMT0NBTCh2b2lkKQoraW5pdF9zaW1kKHZvaWQpCit7CisjaWZuZGVmIE5PX0dFVEVOVgorICBjaGFyICplbnYgPSBOVUxMOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19BUk1fTkVPTl9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKQorICBpbnQgYnVmc2l6ZSA9IDEwMjQ7IC8qIGFuIGluaXRpYWwgZ3Vlc3MgZm9yIHRoZSBsaW5lIGJ1ZmZlciBzaXplIGxpbWl0ICovCisjZW5kaWYKKworICBpZiAoc2ltZF9zdXBwb3J0ICE9IH4wVSkKKyAgICByZXR1cm47CisKKyAgc2ltZF9zdXBwb3J0ID0gMDsKKworI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKQorICBzaW1kX3N1cHBvcnQgfD0gSlNJTURfTkVPTjsKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IGRlZmluZWQoX19BTkRST0lEX18pCisgIC8qIFdlIHN0aWxsIGhhdmUgYSBjaGFuY2UgdG8gdXNlIE5FT04gcmVnYXJkbGVzcyBvZiBnbG9iYWxseSB1c2VkCisgICAqIC1tY3B1Ly1tZnB1IG9wdGlvbnMgcGFzc2VkIHRvIGdjYyBieSBwZXJmb3JtaW5nIHJ1bnRpbWUgZGV0ZWN0aW9uIHZpYQorICAgKiAvcHJvYy9jcHVpbmZvIHBhcnNpbmcgb24gbGludXgvYW5kcm9pZCAqLworICB3aGlsZSAoIXBhcnNlX3Byb2NfY3B1aW5mbyhidWZzaXplKSkgeworICAgIGJ1ZnNpemUgKj0gMjsKKyAgICBpZiAoYnVmc2l6ZSA+IFNPTUVXSEFUX1NBTkVfUFJPQ19DUFVJTkZPX1NJWkVfTElNSVQpCisgICAgICBicmVhazsKKyAgfQorI2VuZGlmCisKKyNpZm5kZWYgTk9fR0VURU5WCisgIC8qIEZvcmNlIGRpZmZlcmVudCBzZXR0aW5ncyB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworICBlbnYgPSBnZXRlbnYoIkpTSU1EX0ZPUkNFTkVPTiIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX3N1cHBvcnQgPSBKU0lNRF9ORU9OOworICBlbnYgPSBnZXRlbnYoIkpTSU1EX0ZPUkNFTk9ORSIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX3N1cHBvcnQgPSAwOworICBlbnYgPSBnZXRlbnYoIkpTSU1EX05PSFVGRkVOQyIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX2h1ZmZtYW4gPSAwOworI2VuZGlmCit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcmdiX3ljYyh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcmdiX2dyYXkodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYjU2NSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl95Y2NfY29udmVydChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqbmVvbmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBuZW9uZmN0ID0ganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBuZW9uZmN0ID0ganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIG5lb25mY3QgPSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbmVvbjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIG5lb25mY3QgPSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBuZW9uZmN0ID0ganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgbmVvbmZjdCA9IGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbmVvbjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBuZW9uZmN0ID0ganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIH0KKworICBuZW9uZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcmdiX2dyYXlfY29udmVydChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYl9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqbmVvbmZjdCkgKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVksIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfbmVvbjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfbmVvbjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIG5lb25mY3QgPSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICB9CisKKyAgbmVvbmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3ljY19yZ2I1NjVfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAganNpbWRfeWNjX3JnYjU2NV9jb252ZXJ0X25lb24oY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYsIG51bV9yb3dzKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX3Vwc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9uZW9uKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX21lcmdlZF91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX21lcmdlZF91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fY29udnNhbXAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworICBqc2ltZF9jb252c2FtcF9uZW9uKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXBfZmxvYXQoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pc2xvdyh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lmYXN0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pc2xvdyhEQ1RFTEVNICpkYXRhKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfaWZhc3QoRENURUxFTSAqZGF0YSkKK3sKKyAganNpbWRfZmRjdF9pZmFzdF9uZW9uKGRhdGEpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfZmxvYXQoRkFTVF9GTE9BVCAqZGF0YSkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZV9mbG9hdCh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9xdWFudGl6ZShKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywgRENURUxFTSAqd29ya3NwYWNlKQoreworICBqc2ltZF9xdWFudGl6ZV9uZW9uKGNvZWZfYmxvY2ssIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplX2Zsb2F0KEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKmRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfMngyKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfNHg0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfMngyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfMngyX25lb24oY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzR4NChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBqc2ltZF9pZGN0XzR4NF9uZW9uKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pc2xvdyh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lmYXN0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSUZBU1RfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoSUZBU1RfU0NBTEVfQklUUyAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9pc2xvdyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF9pc2xvd19uZW9uKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfaWZhc3RfbmVvbihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OICYmIHNpbWRfaHVmZm1hbikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKEpPQ1RFVCAqKQoranNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwgSkNPRUZQVFIgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RfZGNfdmFsLCBjX2Rlcml2ZWRfdGJsICpkY3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgcmV0dXJuIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uKHN0YXRlLCBidWZmZXIsIGJsb2NrLCBsYXN0X2RjX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdGJsLCBhY3RibCk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsIHNpemVfdCAqemVyb2JpdHMpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmUoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cykKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybS9qc2ltZF9uZW9uLlMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybS9qc2ltZF9uZW9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5MjlmZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvYXJtL2pzaW1kX25lb24uUwpAQCAtMCwwICsxLDI4NzggQEAKKy8qCisgKiBBUk12NyBORU9OIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3I6ICBTaWFyaGVpIFNpYW1hc2hrYSA8c2lhcmhlaS5zaWFtYXNoa2FAbm9raWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBTaWFyaGVpIFNpYW1hc2hrYS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIExpbmFybyBMaW1pdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX0VMRl9fKQorLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCAiIiwgJXByb2diaXRzICAvKiBtYXJrIHN0YWNrIGFzIG5vbi1leGVjdXRhYmxlICovCisjZW5kaWYKKworLnRleHQKKy5mcHUgbmVvbgorLmFyY2ggYXJtdjdhCisub2JqZWN0X2FyY2ggYXJtdjQKKy5hcm0KKy5zeW50YXggdW5pZmllZAorCisKKyNkZWZpbmUgUkVTUEVDVF9TVFJJQ1RfQUxJR05NRU5UICAxCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTdXBwbGVtZW50YXJ5IG1hY3JvIGZvciBzZXR0aW5nIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgKi8KKy5tYWNybyBhc21fZnVuY3Rpb24gZm5hbWUKKyNpZmRlZiBfX0FQUExFX18KKyAgICAucHJpdmF0ZV9leHRlcm4gX1xmbmFtZQorICAgIC5nbG9ibCBfXGZuYW1lCitfXGZuYW1lOgorI2Vsc2UKKyAgICAuZ2xvYmFsIFxmbmFtZQorI2lmZGVmIF9fRUxGX18KKyAgICAuaGlkZGVuIFxmbmFtZQorICAgIC50eXBlIFxmbmFtZSwgJWZ1bmN0aW9uCisjZW5kaWYKK1xmbmFtZToKKyNlbmRpZgorLmVuZG0KKworLyogVHJhbnNwb3NlIGEgYmxvY2sgb2YgNHg0IGNvZWZmaWNpZW50cyBpbiBmb3VyIDY0LWJpdCByZWdpc3RlcnMgKi8KKy5tYWNybyB0cmFuc3Bvc2VfNHg0IHgwLCB4MSwgeDIsIHgzCisgICAgdnRybi4xNiAgICAgICAgIFx4MCwgXHgxCisgICAgdnRybi4xNiAgICAgICAgIFx4MiwgXHgzCisgICAgdnRybi4zMiAgICAgICAgIFx4MCwgXHgyCisgICAgdnRybi4zMiAgICAgICAgIFx4MSwgXHgzCisuZW5kbQorCisKKyNkZWZpbmUgQ0VOVEVSSlNBTVBMRSAgMTI4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCisgKgorICogR0xPQkFMKHZvaWQpCisgKiBqc2ltZF9pZGN0X2lzbG93X25lb24odm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICogICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICovCisKKyNkZWZpbmUgRklYXzBfMjk4NjMxMzM2ICAoMjQ0NikKKyNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICAoMzE5NikKKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICAoNDQzMykKKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICAoNjI3MCkKKyNkZWZpbmUgRklYXzBfODk5OTc2MjIzICAoNzM3MykKKyNkZWZpbmUgRklYXzFfMTc1ODc1NjAyICAoOTYzMykKKyNkZWZpbmUgRklYXzFfNTAxMzIxMTEwICAoMTIyOTkpCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKDE1MTM3KQorI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgICgxNjA2OSkKKyNkZWZpbmUgRklYXzJfMDUzMTE5ODY5ICAoMTY4MTkpCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKDIwOTk1KQorI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgICgyNTE3MikKKworI2RlZmluZSBGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMV85NjE1NzA1NjAgIChGSVhfMV8xNzU4NzU2MDIgLSBGSVhfMV85NjE1NzA1NjApCisjZGVmaW5lIEZJWF8xXzE3NTg3NTYwMl9NSU5VU18wXzM5MDE4MDY0NCAgKEZJWF8xXzE3NTg3NTYwMiAtIEZJWF8wXzM5MDE4MDY0NCkKKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwX01JTlVTXzFfODQ3NzU5MDY1ICAoRklYXzBfNTQxMTk2MTAwIC0gRklYXzFfODQ3NzU5MDY1KQorI2RlZmluZSBGSVhfM18wNzI3MTEwMjZfTUlOVVNfMl81NjI5MTU0NDcgIChGSVhfM18wNzI3MTEwMjYgLSBGSVhfMl81NjI5MTU0NDcpCisjZGVmaW5lIEZJWF8wXzI5ODYzMTMzNl9NSU5VU18wXzg5OTk3NjIyMyAgKEZJWF8wXzI5ODYzMTMzNiAtIEZJWF8wXzg5OTk3NjIyMykKKyNkZWZpbmUgRklYXzFfNTAxMzIxMTEwX01JTlVTXzBfODk5OTc2MjIzICAoRklYXzFfNTAxMzIxMTEwIC0gRklYXzBfODk5OTc2MjIzKQorI2RlZmluZSBGSVhfMl8wNTMxMTk4NjlfTUlOVVNfMl81NjI5MTU0NDcgIChGSVhfMl8wNTMxMTk4NjkgLSBGSVhfMl81NjI5MTU0NDcpCisjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMF9QTFVTXzBfNzY1MzY2ODY1ICAgKEZJWF8wXzU0MTE5NjEwMCArIEZJWF8wXzc2NTM2Njg2NSkKKworLyoKKyAqIFJlZmVyZW5jZSBTSU1ELWZyaWVuZGx5IDEtRCBJU0xPVyBpRENUIEMgaW1wbGVtZW50YXRpb24uCisgKiBVc2VzIHNvbWUgaWRlYXMgZnJvbSB0aGUgY29tbWVudHMgaW4gJ3NpbWQvamlzczJpbnQtNjQuYXNtJworICovCisjZGVmaW5lIFJFRl8xRF9JRENUKHhyb3cwLCB4cm93MSwgeHJvdzIsIHhyb3czLCB4cm93NCwgeHJvdzUsIHhyb3c2LCB4cm93NykgeyBcCisgICAgRENURUxFTSByb3cwLCByb3cxLCByb3cyLCByb3czLCByb3c0LCByb3c1LCByb3c2LCByb3c3OyBcCisgICAgSkxPTkcgICBxMSwgcTIsIHEzLCBxNCwgcTUsIHE2LCBxNzsgXAorICAgIEpMT05HICAgdG1wMTFfcGx1c190bXAyLCB0bXAxMV9taW51c190bXAyOyBcCisgICAgXAorICAgIC8qIDEtRCBpRENUIGlucHV0IGRhdGEgKi8gXAorICAgIHJvdzAgPSB4cm93MDsgXAorICAgIHJvdzEgPSB4cm93MTsgXAorICAgIHJvdzIgPSB4cm93MjsgXAorICAgIHJvdzMgPSB4cm93MzsgXAorICAgIHJvdzQgPSB4cm93NDsgXAorICAgIHJvdzUgPSB4cm93NTsgXAorICAgIHJvdzYgPSB4cm93NjsgXAorICAgIHJvdzcgPSB4cm93NzsgXAorICAgIFwKKyAgICBxNSA9IHJvdzcgKyByb3czOyBcCisgICAgcTQgPSByb3c1ICsgcm93MTsgXAorICAgIHE2ID0gTVVMVElQTFkocTUsIEZJWF8xXzE3NTg3NTYwMl9NSU5VU18xXzk2MTU3MDU2MCkgKyBcCisgICAgICAgICBNVUxUSVBMWShxNCwgRklYXzFfMTc1ODc1NjAyKTsgXAorICAgIHE3ID0gTVVMVElQTFkocTUsIEZJWF8xXzE3NTg3NTYwMikgKyBcCisgICAgICAgICBNVUxUSVBMWShxNCwgRklYXzFfMTc1ODc1NjAyX01JTlVTXzBfMzkwMTgwNjQ0KTsgXAorICAgIHEyID0gTVVMVElQTFkocm93MiwgRklYXzBfNTQxMTk2MTAwKSArIFwKKyAgICAgICAgIE1VTFRJUExZKHJvdzYsIEZJWF8wXzU0MTE5NjEwMF9NSU5VU18xXzg0Nzc1OTA2NSk7IFwKKyAgICBxNCA9IHE2OyBcCisgICAgcTMgPSAoKEpMT05HKXJvdzAgLSAoSkxPTkcpcm93NCkgPDwgMTM7IFwKKyAgICBxNiArPSBNVUxUSVBMWShyb3c1LCAtRklYXzJfNTYyOTE1NDQ3KSArIFwKKyAgICAgICAgICBNVUxUSVBMWShyb3czLCBGSVhfM18wNzI3MTEwMjZfTUlOVVNfMl81NjI5MTU0NDcpOyBcCisgICAgLyogbm93IHdlIGNhbiB1c2UgcTEgKHJlbG9hZGFibGUgY29uc3RhbnRzIGhhdmUgYmVlbiB1c2VkIHVwKSAqLyBcCisgICAgcTEgPSBxMyArIHEyOyBcCisgICAgcTQgKz0gTVVMVElQTFkocm93NywgRklYXzBfMjk4NjMxMzM2X01JTlVTXzBfODk5OTc2MjIzKSArIFwKKyAgICAgICAgICBNVUxUSVBMWShyb3cxLCAtRklYXzBfODk5OTc2MjIzKTsgXAorICAgIHE1ID0gcTc7IFwKKyAgICBxMSA9IHExICsgcTY7IFwKKyAgICBxNyArPSBNVUxUSVBMWShyb3c3LCAtRklYXzBfODk5OTc2MjIzKSArIFwKKyAgICAgICAgICBNVUxUSVBMWShyb3cxLCBGSVhfMV81MDEzMjExMTBfTUlOVVNfMF84OTk5NzYyMjMpOyBcCisgICAgXAorICAgIC8qICh0bXAxMSArIHRtcDIpIGhhcyBiZWVuIGNhbGN1bGF0ZWQgKG91dF9yb3cxIGJlZm9yZSBkZXNjYWxlKSAqLyBcCisgICAgdG1wMTFfcGx1c190bXAyID0gcTE7IFwKKyAgICByb3cxID0gMDsgXAorICAgIFwKKyAgICBxMSA9IHExIC0gcTY7IFwKKyAgICBxNSArPSBNVUxUSVBMWShyb3c1LCBGSVhfMl8wNTMxMTk4NjlfTUlOVVNfMl81NjI5MTU0NDcpICsgXAorICAgICAgICAgIE1VTFRJUExZKHJvdzMsIC1GSVhfMl81NjI5MTU0NDcpOyBcCisgICAgcTEgPSBxMSAtIHE2OyBcCisgICAgcTYgPSBNVUxUSVBMWShyb3cyLCBGSVhfMF81NDExOTYxMDBfUExVU18wXzc2NTM2Njg2NSkgKyBcCisgICAgICAgICBNVUxUSVBMWShyb3c2LCBGSVhfMF81NDExOTYxMDApOyBcCisgICAgcTMgPSBxMyAtIHEyOyBcCisgICAgXAorICAgIC8qICh0bXAxMSAtIHRtcDIpIGhhcyBiZWVuIGNhbGN1bGF0ZWQgKG91dF9yb3c2IGJlZm9yZSBkZXNjYWxlKSAqLyBcCisgICAgdG1wMTFfbWludXNfdG1wMiA9IHExOyBcCisgICAgXAorICAgIHExID0gKChKTE9ORylyb3cwICsgKEpMT05HKXJvdzQpIDw8IDEzOyBcCisgICAgcTIgPSBxMSArIHE2OyBcCisgICAgcTEgPSBxMSAtIHE2OyBcCisgICAgXAorICAgIC8qIHBpY2sgdXAgdGhlIHJlc3VsdHMgKi8gXAorICAgIHRtcDAgID0gcTQ7IFwKKyAgICB0bXAxICA9IHE1OyBcCisgICAgdG1wMiAgPSAodG1wMTFfcGx1c190bXAyIC0gdG1wMTFfbWludXNfdG1wMikgLyAyOyBcCisgICAgdG1wMyAgPSBxNzsgXAorICAgIHRtcDEwID0gcTI7IFwKKyAgICB0bXAxMSA9ICh0bXAxMV9wbHVzX3RtcDIgKyB0bXAxMV9taW51c190bXAyKSAvIDI7IFwKKyAgICB0bXAxMiA9IHEzOyBcCisgICAgdG1wMTMgPSBxMTsgXAorfQorCisjZGVmaW5lIFhGSVhfMF84OTk5NzYyMjMgICAgICAgICAgICAgICAgICAgIGQwWzBdCisjZGVmaW5lIFhGSVhfMF81NDExOTYxMDAgICAgICAgICAgICAgICAgICAgIGQwWzFdCisjZGVmaW5lIFhGSVhfMl81NjI5MTU0NDcgICAgICAgICAgICAgICAgICAgIGQwWzJdCisjZGVmaW5lIFhGSVhfMF8yOTg2MzEzMzZfTUlOVVNfMF84OTk5NzYyMjMgIGQwWzNdCisjZGVmaW5lIFhGSVhfMV81MDEzMjExMTBfTUlOVVNfMF84OTk5NzYyMjMgIGQxWzBdCisjZGVmaW5lIFhGSVhfMl8wNTMxMTk4NjlfTUlOVVNfMl81NjI5MTU0NDcgIGQxWzFdCisjZGVmaW5lIFhGSVhfMF81NDExOTYxMDBfUExVU18wXzc2NTM2Njg2NSAgIGQxWzJdCisjZGVmaW5lIFhGSVhfMV8xNzU4NzU2MDIgICAgICAgICAgICAgICAgICAgIGQxWzNdCisjZGVmaW5lIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMF8zOTAxODA2NDQgIGQyWzBdCisjZGVmaW5lIFhGSVhfMF81NDExOTYxMDBfTUlOVVNfMV84NDc3NTkwNjUgIGQyWzFdCisjZGVmaW5lIFhGSVhfM18wNzI3MTEwMjZfTUlOVVNfMl81NjI5MTU0NDcgIGQyWzJdCisjZGVmaW5lIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMV85NjE1NzA1NjAgIGQyWzNdCisKKy5iYWxpZ24gMTYKK2pzaW1kX2lkY3RfaXNsb3dfbmVvbl9jb25zdHM6CisgIC5zaG9ydCBGSVhfMF84OTk5NzYyMjMgICAgICAgICAgICAgICAgICAgIC8qIGQwWzBdICovCisgIC5zaG9ydCBGSVhfMF81NDExOTYxMDAgICAgICAgICAgICAgICAgICAgIC8qIGQwWzFdICovCisgIC5zaG9ydCBGSVhfMl81NjI5MTU0NDcgICAgICAgICAgICAgICAgICAgIC8qIGQwWzJdICovCisgIC5zaG9ydCBGSVhfMF8yOTg2MzEzMzZfTUlOVVNfMF84OTk5NzYyMjMgIC8qIGQwWzNdICovCisgIC5zaG9ydCBGSVhfMV81MDEzMjExMTBfTUlOVVNfMF84OTk5NzYyMjMgIC8qIGQxWzBdICovCisgIC5zaG9ydCBGSVhfMl8wNTMxMTk4NjlfTUlOVVNfMl81NjI5MTU0NDcgIC8qIGQxWzFdICovCisgIC5zaG9ydCBGSVhfMF81NDExOTYxMDBfUExVU18wXzc2NTM2Njg2NSAgIC8qIGQxWzJdICovCisgIC5zaG9ydCBGSVhfMV8xNzU4NzU2MDIgICAgICAgICAgICAgICAgICAgIC8qIGQxWzNdICovCisgIC8qIHJlbG9hZGFibGUgY29uc3RhbnRzICovCisgIC5zaG9ydCBGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMF8zOTAxODA2NDQgIC8qIGQyWzBdICovCisgIC5zaG9ydCBGSVhfMF81NDExOTYxMDBfTUlOVVNfMV84NDc3NTkwNjUgIC8qIGQyWzFdICovCisgIC5zaG9ydCBGSVhfM18wNzI3MTEwMjZfTUlOVVNfMl81NjI5MTU0NDcgIC8qIGQyWzJdICovCisgIC5zaG9ydCBGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMV85NjE1NzA1NjAgIC8qIGQyWzNdICovCisKK2FzbV9mdW5jdGlvbiBqc2ltZF9pZGN0X2lzbG93X25lb24KKworICAgIERDVF9UQUJMRSAgICAgICAucmVxIHIwCisgICAgQ09FRl9CTE9DSyAgICAgIC5yZXEgcjEKKyAgICBPVVRQVVRfQlVGICAgICAgLnJlcSByMgorICAgIE9VVFBVVF9DT0wgICAgICAucmVxIHIzCisgICAgVE1QMSAgICAgICAgICAgIC5yZXEgcjAKKyAgICBUTVAyICAgICAgICAgICAgLnJlcSByMQorICAgIFRNUDMgICAgICAgICAgICAucmVxIHIyCisgICAgVE1QNCAgICAgICAgICAgIC5yZXEgaXAKKworICAgIFJPVzBMICAgICAgICAgICAucmVxIGQxNgorICAgIFJPVzBSICAgICAgICAgICAucmVxIGQxNworICAgIFJPVzFMICAgICAgICAgICAucmVxIGQxOAorICAgIFJPVzFSICAgICAgICAgICAucmVxIGQxOQorICAgIFJPVzJMICAgICAgICAgICAucmVxIGQyMAorICAgIFJPVzJSICAgICAgICAgICAucmVxIGQyMQorICAgIFJPVzNMICAgICAgICAgICAucmVxIGQyMgorICAgIFJPVzNSICAgICAgICAgICAucmVxIGQyMworICAgIFJPVzRMICAgICAgICAgICAucmVxIGQyNAorICAgIFJPVzRSICAgICAgICAgICAucmVxIGQyNQorICAgIFJPVzVMICAgICAgICAgICAucmVxIGQyNgorICAgIFJPVzVSICAgICAgICAgICAucmVxIGQyNworICAgIFJPVzZMICAgICAgICAgICAucmVxIGQyOAorICAgIFJPVzZSICAgICAgICAgICAucmVxIGQyOQorICAgIFJPVzdMICAgICAgICAgICAucmVxIGQzMAorICAgIFJPVzdSICAgICAgICAgICAucmVxIGQzMQorCisgICAgLyogTG9hZCBhbmQgZGVxdWFudGl6ZSBjb2VmZmljaWVudHMgaW50byBORU9OIHJlZ2lzdGVycworICAgICAqIHdpdGggdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uOgorICAgICAqICAgICAgIDAgMSAyIDMgfCA0IDUgNiA3CisgICAgICogICAgICAtLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgKiAgIDAgfCBkMTYgICAgIHwgZDE3ICAgICAoIHE4ICApCisgICAgICogICAxIHwgZDE4ICAgICB8IGQxOSAgICAgKCBxOSAgKQorICAgICAqICAgMiB8IGQyMCAgICAgfCBkMjEgICAgICggcTEwICkKKyAgICAgKiAgIDMgfCBkMjIgICAgIHwgZDIzICAgICAoIHExMSApCisgICAgICogICA0IHwgZDI0ICAgICB8IGQyNSAgICAgKCBxMTIgKQorICAgICAqICAgNSB8IGQyNiAgICAgfCBkMjcgICAgICggcTEzICkKKyAgICAgKiAgIDYgfCBkMjggICAgIHwgZDI5ICAgICAoIHExNCApCisgICAgICogICA3IHwgZDMwICAgICB8IGQzMSAgICAgKCBxMTUgKQorICAgICAqLworICAgIGFkciAgICAgICAgICAgICBpcCwganNpbWRfaWRjdF9pc2xvd19uZW9uX2NvbnN0cworICAgIHZsZDEuMTYgICAgICAgICB7ZDE2LCBkMTcsIGQxOCwgZDE5fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIHZsZDEuMTYgICAgICAgICB7ZDAsIGQxLCBkMiwgZDN9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bGQxLjE2ICAgICAgICAge2QyMCwgZDIxLCBkMjIsIGQyM30sIFtDT0VGX0JMT0NLLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTgsIHE4LCBxMAorICAgIHZsZDEuMTYgICAgICAgICB7ZDQsIGQ1LCBkNiwgZDd9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTksIHE5LCBxMQorICAgIHZsZDEuMTYgICAgICAgICB7ZDI0LCBkMjUsIGQyNiwgZDI3fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIHZtdWwuczE2ICAgICAgICBxMTAsIHExMCwgcTIKKyAgICB2bGQxLjE2ICAgICAgICAge2QwLCBkMSwgZDIsIGQzfSwgW0RDVF9UQUJMRSwgOjEyOF0hCisgICAgdm11bC5zMTYgICAgICAgIHExMSwgcTExLCBxMworICAgIHZsZDEuMTYgICAgICAgICB7ZDI4LCBkMjksIGQzMCwgZDMxfSwgW0NPRUZfQkxPQ0ssIDoxMjhdCisgICAgdm11bC5zMTYgICAgICAgIHExMiwgcTEyLCBxMAorICAgIHZsZDEuMTYgICAgICAgICB7ZDQsIGQ1LCBkNiwgZDd9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTE0LCBxMTQsIHEyCisgICAgdm11bC5zMTYgICAgICAgIHExMywgcTEzLCBxMQorICAgIHZsZDEuMTYgICAgICAgICB7ZDAsIGQxLCBkMiwgZDN9LCBbaXAsIDoxMjhdICAvKiBsb2FkIGNvbnN0YW50cyAqLworICAgIGFkZCAgICAgICAgICAgICBpcCwgaXAsICMxNgorICAgIHZtdWwuczE2ICAgICAgICBxMTUsIHExNSwgcTMKKyAgICB2cHVzaCAgICAgICAgICAge2Q4LWQxNX0gICAgICAgICAgICAgICAgICAgICAgLyogc2F2ZSBORU9OIHJlZ2lzdGVycyAqLworICAgIC8qIDEtRCBJRENULCBwYXNzIDEsIGxlZnQgNHg4IGhhbGYgKi8KKyAgICB2YWRkLnMxNiAgICAgICAgZDQsIFJPVzdMLCBST1czTAorICAgIHZhZGQuczE2ICAgICAgICBkNSwgUk9XNUwsIFJPVzFMCisgICAgdm11bGwuczE2ICAgICAgIHE2LCBkNCwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18xXzk2MTU3MDU2MAorICAgIHZtbGFsLnMxNiAgICAgICBxNiwgZDUsIFhGSVhfMV8xNzU4NzU2MDIKKyAgICB2bXVsbC5zMTYgICAgICAgcTcsIGQ0LCBYRklYXzFfMTc1ODc1NjAyCisgICAgICAvKiBDaGVjayBmb3IgdGhlIHplcm8gY29lZmZpY2llbnRzIGluIHRoZSByaWdodCA0eDggaGFsZiAqLworICAgICAgcHVzaCAgICAgICAgICAgIHtyNCwgcjV9CisgICAgdm1sYWwuczE2ICAgICAgIHE3LCBkNSwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18wXzM5MDE4MDY0NAorICAgIHZzdWJsLnMxNiAgICAgICBxMywgUk9XMEwsIFJPVzRMCisgICAgICBsZHJkICAgICAgICAgICAgcjQsIFtDT0VGX0JMT0NLLCAjKC05NiArIDIgKiAoNCArIDEgKiA4KSldCisgICAgdm11bGwuczE2ICAgICAgIHEyLCBST1cyTCwgWEZJWF8wXzU0MTE5NjEwMAorICAgIHZtbGFsLnMxNiAgICAgICBxMiwgUk9XNkwsIFhGSVhfMF81NDExOTYxMDBfTUlOVVNfMV84NDc3NTkwNjUKKyAgICAgIG9yciAgICAgICAgICAgICByMCwgcjQsIHI1CisgICAgdm1vdiAgICAgICAgICAgIHE0LCBxNgorICAgIHZtbHNsLnMxNiAgICAgICBxNiwgUk9XNUwsIFhGSVhfMl81NjI5MTU0NDcKKyAgICAgIGxkcmQgICAgICAgICAgICByNCwgW0NPRUZfQkxPQ0ssICMoLTk2ICsgMiAqICg0ICsgMiAqIDgpKV0KKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzNMLCBYRklYXzNfMDcyNzExMDI2X01JTlVTXzJfNTYyOTE1NDQ3CisgICAgdnNobC5zMzIgICAgICAgIHEzLCBxMywgIzEzCisgICAgICBvcnIgICAgICAgICAgICAgcjAsIHIwLCByNAorICAgIHZtbHNsLnMxNiAgICAgICBxNCwgUk9XMUwsIFhGSVhfMF84OTk5NzYyMjMKKyAgICAgIG9yciAgICAgICAgICAgICByMCwgcjAsIHI1CisgICAgdmFkZC5zMzIgICAgICAgIHExLCBxMywgcTIKKyAgICAgIGxkcmQgICAgICAgICAgICByNCwgW0NPRUZfQkxPQ0ssICMoLTk2ICsgMiAqICg0ICsgMyAqIDgpKV0KKyAgICB2bW92ICAgICAgICAgICAgcTUsIHE3CisgICAgdmFkZC5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICAgIG9yciAgICAgICAgICAgICByMCwgcjAsIHI0CisgICAgdm1sc2wuczE2ICAgICAgIHE3LCBST1c3TCwgWEZJWF8wXzg5OTk3NjIyMworICAgICAgb3JyICAgICAgICAgICAgIHIwLCByMCwgcjUKKyAgICB2bWxhbC5zMTYgICAgICAgcTcsIFJPVzFMLCBYRklYXzFfNTAxMzIxMTEwX01JTlVTXzBfODk5OTc2MjIzCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzFMLCBxMSwgIzExCisgICAgICBsZHJkICAgICAgICAgICAgcjQsIFtDT0VGX0JMT0NLLCAjKC05NiArIDIgKiAoNCArIDQgKiA4KSldCisgICAgdnN1Yi5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2bWxhbC5zMTYgICAgICAgcTUsIFJPVzVMLCBYRklYXzJfMDUzMTE5ODY5X01JTlVTXzJfNTYyOTE1NDQ3CisgICAgICBvcnIgICAgICAgICAgICAgcjAsIHIwLCByNAorICAgIHZtbHNsLnMxNiAgICAgICBxNSwgUk9XM0wsIFhGSVhfMl81NjI5MTU0NDcKKyAgICAgIG9yciAgICAgICAgICAgICByMCwgcjAsIHI1CisgICAgdnN1Yi5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2bXVsbC5zMTYgICAgICAgcTYsIFJPVzJMLCBYRklYXzBfNTQxMTk2MTAwX1BMVVNfMF83NjUzNjY4NjUKKyAgICAgIGxkcmQgICAgICAgICAgICByNCwgW0NPRUZfQkxPQ0ssICMoLTk2ICsgMiAqICg0ICsgNSAqIDgpKV0KKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzZMLCBYRklYXzBfNTQxMTk2MTAwCisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTIKKyAgICAgIG9yciAgICAgICAgICAgICByMCwgcjAsIHI0CisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzZMLCBxMSwgIzExCisgICAgICBvcnIgICAgICAgICAgICAgcjAsIHIwLCByNQorICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHE1CisgICAgICBsZHJkICAgICAgICAgICAgcjQsIFtDT0VGX0JMT0NLLCAjKC05NiArIDIgKiAoNCArIDYgKiA4KSldCisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTUKKyAgICB2YWRkbC5zMTYgICAgICAgcTUsIFJPVzBMLCBST1c0TAorICAgICAgb3JyICAgICAgICAgICAgIHIwLCByMCwgcjQKKyAgICB2cnNocm4uczMyICAgICAgUk9XMkwsIHExLCAjMTEKKyAgICAgIG9yciAgICAgICAgICAgICByMCwgcjAsIHI1CisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzVMLCBxMywgIzExCisgICAgICBsZHJkICAgICAgICAgICAgcjQsIFtDT0VGX0JMT0NLLCAjKC05NiArIDIgKiAoNCArIDcgKiA4KSldCisgICAgdnNobC5zMzIgICAgICAgIHE1LCBxNSwgIzEzCisgICAgdm1sYWwuczE2ICAgICAgIHE0LCBST1c3TCwgWEZJWF8wXzI5ODYzMTMzNl9NSU5VU18wXzg5OTk3NjIyMworICAgICAgb3JyICAgICAgICAgICAgIHIwLCByMCwgcjQKKyAgICB2YWRkLnMzMiAgICAgICAgcTIsIHE1LCBxNgorICAgICAgb3JycyAgICAgICAgICAgIHIwLCByMCwgcjUKKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHE1LCBxNgorICAgIHZhZGQuczMyICAgICAgICBxNiwgcTIsIHE3CisgICAgICBsZHJkICAgICAgICAgICAgcjQsIFtDT0VGX0JMT0NLLCAjKC05NiArIDIgKiAoNCArIDAgKiA4KSldCisgICAgdnN1Yi5zMzIgICAgICAgIHEyLCBxMiwgcTcKKyAgICB2YWRkLnMzMiAgICAgICAgcTUsIHExLCBxNAorICAgICAgb3JyICAgICAgICAgICAgIHIwLCByNCwgcjUKKyAgICB2c3ViLnMzMiAgICAgICAgcTMsIHExLCBxNAorICAgICAgcG9wICAgICAgICAgICAgIHtyNCwgcjV9CisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzdMLCBxMiwgIzExCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzNMLCBxNSwgIzExCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzBMLCBxNiwgIzExCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzRMLCBxMywgIzExCisKKyAgICAgIGJlcSAgICAgICAgICAgICAzZiAgLyogR28gdG8gZG8gc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgc3BhcnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IDR4OCBoYWxmICovCisKKyAgICAvKiAxLUQgSURDVCwgcGFzcyAxLCByaWdodCA0eDggaGFsZiAqLworICAgIHZsZDEuczE2ICAgICAgICB7ZDJ9LCBbaXAsIDo2NF0gIC8qIHJlbG9hZCBjb25zdGFudHMgKi8KKyAgICB2YWRkLnMxNiAgICAgICAgZDEwLCBST1c3UiwgUk9XM1IKKyAgICB2YWRkLnMxNiAgICAgICAgZDgsIFJPVzVSLCBST1cxUgorICAgICAgLyogVHJhbnNwb3NlIGxlZnQgNHg4IGhhbGYgKi8KKyAgICAgIHZ0cm4uMTYgICAgICAgICBST1c2TCwgUk9XN0wKKyAgICB2bXVsbC5zMTYgICAgICAgcTYsIGQxMCwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18xXzk2MTU3MDU2MAorICAgIHZtbGFsLnMxNiAgICAgICBxNiwgZDgsIFhGSVhfMV8xNzU4NzU2MDIKKyAgICAgIHZ0cm4uMTYgICAgICAgICBST1cyTCwgUk9XM0wKKyAgICB2bXVsbC5zMTYgICAgICAgcTcsIGQxMCwgWEZJWF8xXzE3NTg3NTYwMgorICAgIHZtbGFsLnMxNiAgICAgICBxNywgZDgsIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMF8zOTAxODA2NDQKKyAgICAgIHZ0cm4uMTYgICAgICAgICBST1cwTCwgUk9XMUwKKyAgICB2c3VibC5zMTYgICAgICAgcTMsIFJPVzBSLCBST1c0UgorICAgIHZtdWxsLnMxNiAgICAgICBxMiwgUk9XMlIsIFhGSVhfMF81NDExOTYxMDAKKyAgICB2bWxhbC5zMTYgICAgICAgcTIsIFJPVzZSLCBYRklYXzBfNTQxMTk2MTAwX01JTlVTXzFfODQ3NzU5MDY1CisgICAgICB2dHJuLjE2ICAgICAgICAgUk9XNEwsIFJPVzVMCisgICAgdm1vdiAgICAgICAgICAgIHE0LCBxNgorICAgIHZtbHNsLnMxNiAgICAgICBxNiwgUk9XNVIsIFhGSVhfMl81NjI5MTU0NDcKKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzNSLCBYRklYXzNfMDcyNzExMDI2X01JTlVTXzJfNTYyOTE1NDQ3CisgICAgICB2dHJuLjMyICAgICAgICAgUk9XMUwsIFJPVzNMCisgICAgdnNobC5zMzIgICAgICAgIHEzLCBxMywgIzEzCisgICAgdm1sc2wuczE2ICAgICAgIHE0LCBST1cxUiwgWEZJWF8wXzg5OTk3NjIyMworICAgICAgdnRybi4zMiAgICAgICAgIFJPVzRMLCBST1c2TAorICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHEyCisgICAgdm1vdiAgICAgICAgICAgIHE1LCBxNworICAgIHZhZGQuczMyICAgICAgICBxMSwgcTEsIHE2CisgICAgICB2dHJuLjMyICAgICAgICAgUk9XMEwsIFJPVzJMCisgICAgdm1sc2wuczE2ICAgICAgIHE3LCBST1c3UiwgWEZJWF8wXzg5OTk3NjIyMworICAgIHZtbGFsLnMxNiAgICAgICBxNywgUk9XMVIsIFhGSVhfMV81MDEzMjExMTBfTUlOVVNfMF84OTk5NzYyMjMKKyAgICB2cnNocm4uczMyICAgICAgUk9XMVIsIHExLCAjMTEKKyAgICAgIHZ0cm4uMzIgICAgICAgICBST1c1TCwgUk9XN0wKKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHExLCBxNgorICAgIHZtbGFsLnMxNiAgICAgICBxNSwgUk9XNVIsIFhGSVhfMl8wNTMxMTk4NjlfTUlOVVNfMl81NjI5MTU0NDcKKyAgICB2bWxzbC5zMTYgICAgICAgcTUsIFJPVzNSLCBYRklYXzJfNTYyOTE1NDQ3CisgICAgdnN1Yi5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2bXVsbC5zMTYgICAgICAgcTYsIFJPVzJSLCBYRklYXzBfNTQxMTk2MTAwX1BMVVNfMF83NjUzNjY4NjUKKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzZSLCBYRklYXzBfNTQxMTk2MTAwCisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTIKKyAgICB2cnNocm4uczMyICAgICAgUk9XNlIsIHExLCAjMTEKKyAgICB2YWRkLnMzMiAgICAgICAgcTEsIHEzLCBxNQorICAgIHZzdWIuczMyICAgICAgICBxMywgcTMsIHE1CisgICAgdmFkZGwuczE2ICAgICAgIHE1LCBST1cwUiwgUk9XNFIKKyAgICB2cnNocm4uczMyICAgICAgUk9XMlIsIHExLCAjMTEKKyAgICB2cnNocm4uczMyICAgICAgUk9XNVIsIHEzLCAjMTEKKyAgICB2c2hsLnMzMiAgICAgICAgcTUsIHE1LCAjMTMKKyAgICB2bWxhbC5zMTYgICAgICAgcTQsIFJPVzdSLCBYRklYXzBfMjk4NjMxMzM2X01JTlVTXzBfODk5OTc2MjIzCisgICAgdmFkZC5zMzIgICAgICAgIHEyLCBxNSwgcTYKKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHE1LCBxNgorICAgIHZhZGQuczMyICAgICAgICBxNiwgcTIsIHE3CisgICAgdnN1Yi5zMzIgICAgICAgIHEyLCBxMiwgcTcKKyAgICB2YWRkLnMzMiAgICAgICAgcTUsIHExLCBxNAorICAgIHZzdWIuczMyICAgICAgICBxMywgcTEsIHE0CisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzdSLCBxMiwgIzExCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzNSLCBxNSwgIzExCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzBSLCBxNiwgIzExCisgICAgdnJzaHJuLnMzMiAgICAgIFJPVzRSLCBxMywgIzExCisgICAgLyogVHJhbnNwb3NlIHJpZ2h0IDR4OCBoYWxmICovCisgICAgdnRybi4xNiAgICAgICAgIFJPVzZSLCBST1c3UgorICAgIHZ0cm4uMTYgICAgICAgICBST1cyUiwgUk9XM1IKKyAgICB2dHJuLjE2ICAgICAgICAgUk9XMFIsIFJPVzFSCisgICAgdnRybi4xNiAgICAgICAgIFJPVzRSLCBST1c1UgorICAgIHZ0cm4uMzIgICAgICAgICBST1cxUiwgUk9XM1IKKyAgICB2dHJuLjMyICAgICAgICAgUk9XNFIsIFJPVzZSCisgICAgdnRybi4zMiAgICAgICAgIFJPVzBSLCBST1cyUgorICAgIHZ0cm4uMzIgICAgICAgICBST1c1UiwgUk9XN1IKKworMTogIC8qIDEtRCBJRENULCBwYXNzIDIgKG5vcm1hbCB2YXJpYW50KSwgbGVmdCA0eDggaGFsZiAqLworICAgIHZsZDEuczE2ICAgICAgICB7ZDJ9LCBbaXAsIDo2NF0gICAgICAgICAgICAgICAvKiByZWxvYWQgY29uc3RhbnRzICovCisgICAgdm11bGwuczE2ICAgICAgIHE2LCBST1cxUiwgWEZJWF8xXzE3NTg3NTYwMiAgIC8qIFJPVzVMIDwtPiBST1cxUiAqLworICAgIHZtbGFsLnMxNiAgICAgICBxNiwgUk9XMUwsIFhGSVhfMV8xNzU4NzU2MDIKKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzNSLCBYRklYXzFfMTc1ODc1NjAyX01JTlVTXzFfOTYxNTcwNTYwICAvKiBST1c3TCA8LT4gUk9XM1IgKi8KKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzNMLCBYRklYXzFfMTc1ODc1NjAyX01JTlVTXzFfOTYxNTcwNTYwCisgICAgdm11bGwuczE2ICAgICAgIHE3LCBST1czUiwgWEZJWF8xXzE3NTg3NTYwMiAgIC8qIFJPVzdMIDwtPiBST1czUiAqLworICAgIHZtbGFsLnMxNiAgICAgICBxNywgUk9XM0wsIFhGSVhfMV8xNzU4NzU2MDIKKyAgICB2bWxhbC5zMTYgICAgICAgcTcsIFJPVzFSLCBYRklYXzFfMTc1ODc1NjAyX01JTlVTXzBfMzkwMTgwNjQ0ICAvKiBST1c1TCA8LT4gUk9XMVIgKi8KKyAgICB2bWxhbC5zMTYgICAgICAgcTcsIFJPVzFMLCBYRklYXzFfMTc1ODc1NjAyX01JTlVTXzBfMzkwMTgwNjQ0CisgICAgdnN1YmwuczE2ICAgICAgIHEzLCBST1cwTCwgUk9XMFIgICAgICAgICAgICAgIC8qIFJPVzRMIDwtPiBST1cwUiAqLworICAgIHZtdWxsLnMxNiAgICAgICBxMiwgUk9XMkwsIFhGSVhfMF81NDExOTYxMDAKKyAgICB2bWxhbC5zMTYgICAgICAgcTIsIFJPVzJSLCBYRklYXzBfNTQxMTk2MTAwX01JTlVTXzFfODQ3NzU5MDY1ICAvKiBST1c2TCA8LT4gUk9XMlIgKi8KKyAgICB2bW92ICAgICAgICAgICAgcTQsIHE2CisgICAgdm1sc2wuczE2ICAgICAgIHE2LCBST1cxUiwgWEZJWF8yXzU2MjkxNTQ0NyAgIC8qIFJPVzVMIDwtPiBST1cxUiAqLworICAgIHZtbGFsLnMxNiAgICAgICBxNiwgUk9XM0wsIFhGSVhfM18wNzI3MTEwMjZfTUlOVVNfMl81NjI5MTU0NDcKKyAgICB2c2hsLnMzMiAgICAgICAgcTMsIHEzLCAjMTMKKyAgICB2bWxzbC5zMTYgICAgICAgcTQsIFJPVzFMLCBYRklYXzBfODk5OTc2MjIzCisgICAgdmFkZC5zMzIgICAgICAgIHExLCBxMywgcTIKKyAgICB2bW92ICAgICAgICAgICAgcTUsIHE3CisgICAgdmFkZC5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2bWxzbC5zMTYgICAgICAgcTcsIFJPVzNSLCBYRklYXzBfODk5OTc2MjIzICAgLyogUk9XN0wgPC0+IFJPVzNSICovCisgICAgdm1sYWwuczE2ICAgICAgIHE3LCBST1cxTCwgWEZJWF8xXzUwMTMyMTExMF9NSU5VU18wXzg5OTk3NjIyMworICAgIHZzaHJuLnMzMiAgICAgICBST1cxTCwgcTEsICMxNgorICAgIHZzdWIuczMyICAgICAgICBxMSwgcTEsIHE2CisgICAgdm1sYWwuczE2ICAgICAgIHE1LCBST1cxUiwgWEZJWF8yXzA1MzExOTg2OV9NSU5VU18yXzU2MjkxNTQ0NyAgLyogUk9XNUwgPC0+IFJPVzFSICovCisgICAgdm1sc2wuczE2ICAgICAgIHE1LCBST1czTCwgWEZJWF8yXzU2MjkxNTQ0NworICAgIHZzdWIuczMyICAgICAgICBxMSwgcTEsIHE2CisgICAgdm11bGwuczE2ICAgICAgIHE2LCBST1cyTCwgWEZJWF8wXzU0MTE5NjEwMF9QTFVTXzBfNzY1MzY2ODY1CisgICAgdm1sYWwuczE2ICAgICAgIHE2LCBST1cyUiwgWEZJWF8wXzU0MTE5NjEwMCAgIC8qIFJPVzZMIDwtPiBST1cyUiAqLworICAgIHZzdWIuczMyICAgICAgICBxMywgcTMsIHEyCisgICAgdnNocm4uczMyICAgICAgIFJPVzJSLCBxMSwgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzZMIDwtPiBST1cyUiAqLworICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHE1CisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTUKKyAgICB2YWRkbC5zMTYgICAgICAgcTUsIFJPVzBMLCBST1cwUiAgICAgICAgICAgICAgLyogUk9XNEwgPC0+IFJPVzBSICovCisgICAgdnNocm4uczMyICAgICAgIFJPVzJMLCBxMSwgIzE2CisgICAgdnNocm4uczMyICAgICAgIFJPVzFSLCBxMywgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzVMIDwtPiBST1cxUiAqLworICAgIHZzaGwuczMyICAgICAgICBxNSwgcTUsICMxMworICAgIHZtbGFsLnMxNiAgICAgICBxNCwgUk9XM1IsIFhGSVhfMF8yOTg2MzEzMzZfTUlOVVNfMF84OTk5NzYyMjMgIC8qIFJPVzdMIDwtPiBST1czUiAqLworICAgIHZhZGQuczMyICAgICAgICBxMiwgcTUsIHE2CisgICAgdnN1Yi5zMzIgICAgICAgIHExLCBxNSwgcTYKKyAgICB2YWRkLnMzMiAgICAgICAgcTYsIHEyLCBxNworICAgIHZzdWIuczMyICAgICAgICBxMiwgcTIsIHE3CisgICAgdmFkZC5zMzIgICAgICAgIHE1LCBxMSwgcTQKKyAgICB2c3ViLnMzMiAgICAgICAgcTMsIHExLCBxNAorICAgIHZzaHJuLnMzMiAgICAgICBST1czUiwgcTIsICMxNiAgICAgICAgICAgICAgICAvKiBST1c3TCA8LT4gUk9XM1IgKi8KKyAgICB2c2hybi5zMzIgICAgICAgUk9XM0wsIHE1LCAjMTYKKyAgICB2c2hybi5zMzIgICAgICAgUk9XMEwsIHE2LCAjMTYKKyAgICB2c2hybi5zMzIgICAgICAgUk9XMFIsIHEzLCAjMTYgICAgICAgICAgICAgICAgLyogUk9XNEwgPC0+IFJPVzBSICovCisgICAgLyogMS1EIElEQ1QsIHBhc3MgMiwgcmlnaHQgNHg4IGhhbGYgKi8KKyAgICB2bGQxLnMxNiAgICAgICAge2QyfSwgW2lwLCA6NjRdICAgICAgICAgICAgICAgLyogcmVsb2FkIGNvbnN0YW50cyAqLworICAgIHZtdWxsLnMxNiAgICAgICBxNiwgUk9XNVIsIFhGSVhfMV8xNzU4NzU2MDIKKyAgICB2bWxhbC5zMTYgICAgICAgcTYsIFJPVzVMLCBYRklYXzFfMTc1ODc1NjAyICAgLyogUk9XNUwgPC0+IFJPVzFSICovCisgICAgdm1sYWwuczE2ICAgICAgIHE2LCBST1c3UiwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18xXzk2MTU3MDU2MAorICAgIHZtbGFsLnMxNiAgICAgICBxNiwgUk9XN0wsIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMV85NjE1NzA1NjAgIC8qIFJPVzdMIDwtPiBST1czUiAqLworICAgIHZtdWxsLnMxNiAgICAgICBxNywgUk9XN1IsIFhGSVhfMV8xNzU4NzU2MDIKKyAgICB2bWxhbC5zMTYgICAgICAgcTcsIFJPVzdMLCBYRklYXzFfMTc1ODc1NjAyICAgLyogUk9XN0wgPC0+IFJPVzNSICovCisgICAgdm1sYWwuczE2ICAgICAgIHE3LCBST1c1UiwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18wXzM5MDE4MDY0NAorICAgIHZtbGFsLnMxNiAgICAgICBxNywgUk9XNUwsIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMF8zOTAxODA2NDQgIC8qIFJPVzVMIDwtPiBST1cxUiAqLworICAgIHZzdWJsLnMxNiAgICAgICBxMywgUk9XNEwsIFJPVzRSICAgICAgICAgICAgICAvKiBST1c0TCA8LT4gUk9XMFIgKi8KKyAgICB2bXVsbC5zMTYgICAgICAgcTIsIFJPVzZMLCBYRklYXzBfNTQxMTk2MTAwICAgLyogUk9XNkwgPC0+IFJPVzJSICovCisgICAgdm1sYWwuczE2ICAgICAgIHEyLCBST1c2UiwgWEZJWF8wXzU0MTE5NjEwMF9NSU5VU18xXzg0Nzc1OTA2NQorICAgIHZtb3YgICAgICAgICAgICBxNCwgcTYKKyAgICB2bWxzbC5zMTYgICAgICAgcTYsIFJPVzVSLCBYRklYXzJfNTYyOTE1NDQ3CisgICAgdm1sYWwuczE2ICAgICAgIHE2LCBST1c3TCwgWEZJWF8zXzA3MjcxMTAyNl9NSU5VU18yXzU2MjkxNTQ0NyAgLyogUk9XN0wgPC0+IFJPVzNSICovCisgICAgdnNobC5zMzIgICAgICAgIHEzLCBxMywgIzEzCisgICAgdm1sc2wuczE2ICAgICAgIHE0LCBST1c1TCwgWEZJWF8wXzg5OTk3NjIyMyAgIC8qIFJPVzVMIDwtPiBST1cxUiAqLworICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHEyCisgICAgdm1vdiAgICAgICAgICAgIHE1LCBxNworICAgIHZhZGQuczMyICAgICAgICBxMSwgcTEsIHE2CisgICAgdm1sc2wuczE2ICAgICAgIHE3LCBST1c3UiwgWEZJWF8wXzg5OTk3NjIyMworICAgIHZtbGFsLnMxNiAgICAgICBxNywgUk9XNUwsIFhGSVhfMV81MDEzMjExMTBfTUlOVVNfMF84OTk5NzYyMjMgIC8qIFJPVzVMIDwtPiBST1cxUiAqLworICAgIHZzaHJuLnMzMiAgICAgICBST1c1TCwgcTEsICMxNiAgICAgICAgICAgICAgICAvKiBST1c1TCA8LT4gUk9XMVIgKi8KKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHExLCBxNgorICAgIHZtbGFsLnMxNiAgICAgICBxNSwgUk9XNVIsIFhGSVhfMl8wNTMxMTk4NjlfTUlOVVNfMl81NjI5MTU0NDcKKyAgICB2bWxzbC5zMTYgICAgICAgcTUsIFJPVzdMLCBYRklYXzJfNTYyOTE1NDQ3ICAgLyogUk9XN0wgPC0+IFJPVzNSICovCisgICAgdnN1Yi5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2bXVsbC5zMTYgICAgICAgcTYsIFJPVzZMLCBYRklYXzBfNTQxMTk2MTAwX1BMVVNfMF83NjUzNjY4NjUgIC8qIFJPVzZMIDwtPiBST1cyUiAqLworICAgIHZtbGFsLnMxNiAgICAgICBxNiwgUk9XNlIsIFhGSVhfMF81NDExOTYxMDAKKyAgICB2c3ViLnMzMiAgICAgICAgcTMsIHEzLCBxMgorICAgIHZzaHJuLnMzMiAgICAgICBST1c2UiwgcTEsICMxNgorICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHE1CisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTUKKyAgICB2YWRkbC5zMTYgICAgICAgcTUsIFJPVzRMLCBST1c0UiAgICAgICAgICAgICAgLyogUk9XNEwgPC0+IFJPVzBSICovCisgICAgdnNocm4uczMyICAgICAgIFJPVzZMLCBxMSwgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzZMIDwtPiBST1cyUiAqLworICAgIHZzaHJuLnMzMiAgICAgICBST1c1UiwgcTMsICMxNgorICAgIHZzaGwuczMyICAgICAgICBxNSwgcTUsICMxMworICAgIHZtbGFsLnMxNiAgICAgICBxNCwgUk9XN1IsIFhGSVhfMF8yOTg2MzEzMzZfTUlOVVNfMF84OTk5NzYyMjMKKyAgICB2YWRkLnMzMiAgICAgICAgcTIsIHE1LCBxNgorICAgIHZzdWIuczMyICAgICAgICBxMSwgcTUsIHE2CisgICAgdmFkZC5zMzIgICAgICAgIHE2LCBxMiwgcTcKKyAgICB2c3ViLnMzMiAgICAgICAgcTIsIHEyLCBxNworICAgIHZhZGQuczMyICAgICAgICBxNSwgcTEsIHE0CisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMSwgcTQKKyAgICB2c2hybi5zMzIgICAgICAgUk9XN1IsIHEyLCAjMTYKKyAgICB2c2hybi5zMzIgICAgICAgUk9XN0wsIHE1LCAjMTYgICAgICAgICAgICAgICAgLyogUk9XN0wgPC0+IFJPVzNSICovCisgICAgdnNocm4uczMyICAgICAgIFJPVzRMLCBxNiwgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzRMIDwtPiBST1cwUiAqLworICAgIHZzaHJuLnMzMiAgICAgICBST1c0UiwgcTMsICMxNgorCisyOiAgLyogRGVzY2FsZSB0byA4LWJpdCBhbmQgcmFuZ2UgbGltaXQgKi8KKyAgICB2cXJzaHJuLnMxNiAgICAgZDE2LCBxOCwgIzIKKyAgICB2cXJzaHJuLnMxNiAgICAgZDE3LCBxOSwgIzIKKyAgICB2cXJzaHJuLnMxNiAgICAgZDE4LCBxMTAsICMyCisgICAgdnFyc2hybi5zMTYgICAgIGQxOSwgcTExLCAjMgorICAgIHZwb3AgICAgICAgICAgICB7ZDgtZDE1fSAgICAgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIE5FT04gcmVnaXN0ZXJzICovCisgICAgdnFyc2hybi5zMTYgICAgIGQyMCwgcTEyLCAjMgorICAgICAgLyogVHJhbnNwb3NlIHRoZSBmaW5hbCA4LWJpdCBzYW1wbGVzIGFuZCBkbyBzaWduZWQtPnVuc2lnbmVkIGNvbnZlcnNpb24gKi8KKyAgICAgIHZ0cm4uMTYgICAgICAgICBxOCwgcTkKKyAgICB2cXJzaHJuLnMxNiAgICAgZDIxLCBxMTMsICMyCisgICAgdnFyc2hybi5zMTYgICAgIGQyMiwgcTE0LCAjMgorICAgICAgdm1vdi51OCAgICAgICAgIHEwLCAjKENFTlRFUkpTQU1QTEUpCisgICAgdnFyc2hybi5zMTYgICAgIGQyMywgcTE1LCAjMgorICAgICAgdnRybi44ICAgICAgICAgIGQxNiwgZDE3CisgICAgICB2dHJuLjggICAgICAgICAgZDE4LCBkMTkKKyAgICAgIHZhZGQudTggICAgICAgICBxOCwgcTgsIHEwCisgICAgICB2YWRkLnU4ICAgICAgICAgcTksIHE5LCBxMAorICAgICAgdnRybi4xNiAgICAgICAgIHExMCwgcTExCisgICAgICAgIC8qIFN0b3JlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgbGRtaWEgICAgICAgICAgIE9VVFBVVF9CVUYhLCB7VE1QMSwgVE1QMn0KKyAgICAgICAgYWRkICAgICAgICAgICAgIFRNUDEsIFRNUDEsIE9VVFBVVF9DT0wKKyAgICAgICAgYWRkICAgICAgICAgICAgIFRNUDIsIFRNUDIsIE9VVFBVVF9DT0wKKyAgICAgICAgdnN0MS44ICAgICAgICAgIHtkMTZ9LCBbVE1QMV0KKyAgICAgIHZ0cm4uOCAgICAgICAgICBkMjAsIGQyMQorICAgICAgICB2c3QxLjggICAgICAgICAge2QxN30sIFtUTVAyXQorICAgICAgICBsZG1pYSAgICAgICAgICAgT1VUUFVUX0JVRiEsIHtUTVAxLCBUTVAyfQorICAgICAgICBhZGQgICAgICAgICAgICAgVE1QMSwgVE1QMSwgT1VUUFVUX0NPTAorICAgICAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgT1VUUFVUX0NPTAorICAgICAgICB2c3QxLjggICAgICAgICAge2QxOH0sIFtUTVAxXQorICAgICAgdmFkZC51OCAgICAgICAgIHExMCwgcTEwLCBxMAorICAgICAgICB2c3QxLjggICAgICAgICAge2QxOX0sIFtUTVAyXQorICAgICAgICBsZG1pYSAgICAgICAgICAgT1VUUFVUX0JVRiwge1RNUDEsIFRNUDIsIFRNUDMsIFRNUDR9CisgICAgICAgIGFkZCAgICAgICAgICAgICBUTVAxLCBUTVAxLCBPVVRQVVRfQ09MCisgICAgICAgIGFkZCAgICAgICAgICAgICBUTVAyLCBUTVAyLCBPVVRQVVRfQ09MCisgICAgICAgIGFkZCAgICAgICAgICAgICBUTVAzLCBUTVAzLCBPVVRQVVRfQ09MCisgICAgICAgIGFkZCAgICAgICAgICAgICBUTVA0LCBUTVA0LCBPVVRQVVRfQ09MCisgICAgICB2dHJuLjggICAgICAgICAgZDIyLCBkMjMKKyAgICAgICAgdnN0MS44ICAgICAgICAgIHtkMjB9LCBbVE1QMV0KKyAgICAgIHZhZGQudTggICAgICAgICBxMTEsIHExMSwgcTAKKyAgICAgICAgdnN0MS44ICAgICAgICAgIHtkMjF9LCBbVE1QMl0KKyAgICAgICAgdnN0MS44ICAgICAgICAgIHtkMjJ9LCBbVE1QM10KKyAgICAgICAgdnN0MS44ICAgICAgICAgIHtkMjN9LCBbVE1QNF0KKyAgICBieCAgICAgICAgICAgICAgbHIKKworMzogIC8qIExlZnQgNHg4IGhhbGYgaXMgZG9uZSwgcmlnaHQgNHg4IGhhbGYgY29udGFpbnMgbW9zdGx5IHplcm9zICovCisKKyAgICAvKiBUcmFuc3Bvc2UgbGVmdCA0eDggaGFsZiAqLworICAgIHZ0cm4uMTYgICAgICAgICBST1c2TCwgUk9XN0wKKyAgICB2dHJuLjE2ICAgICAgICAgUk9XMkwsIFJPVzNMCisgICAgdnRybi4xNiAgICAgICAgIFJPVzBMLCBST1cxTAorICAgIHZ0cm4uMTYgICAgICAgICBST1c0TCwgUk9XNUwKKyAgICB2c2hsLnMxNiAgICAgICAgUk9XMFIsIFJPVzBSLCAjMiAgLyogUEFTUzFfQklUUyAqLworICAgIHZ0cm4uMzIgICAgICAgICBST1cxTCwgUk9XM0wKKyAgICB2dHJuLjMyICAgICAgICAgUk9XNEwsIFJPVzZMCisgICAgdnRybi4zMiAgICAgICAgIFJPVzBMLCBST1cyTAorICAgIHZ0cm4uMzIgICAgICAgICBST1c1TCwgUk9XN0wKKworICAgIGNtcCAgICAgICAgICAgICByMCwgIzAKKyAgICBiZXEgICAgICAgICAgICAgNGYgIC8qIFJpZ2h0IDR4OCBoYWxmIGhhcyBhbGwgemVyb3MsIGdvIHRvICdzcGFyc2UnIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAqLworCisgICAgLyogT25seSByb3cgMCBpcyBub24temVybyBmb3IgdGhlIHJpZ2h0IDR4OCBoYWxmICAqLworICAgIHZkdXAuczE2ICAgICAgICBST1cxUiwgUk9XMFJbMV0KKyAgICB2ZHVwLnMxNiAgICAgICAgUk9XMlIsIFJPVzBSWzJdCisgICAgdmR1cC5zMTYgICAgICAgIFJPVzNSLCBST1cwUlszXQorICAgIHZkdXAuczE2ICAgICAgICBST1c0UiwgUk9XMFJbMF0KKyAgICB2ZHVwLnMxNiAgICAgICAgUk9XNVIsIFJPVzBSWzFdCisgICAgdmR1cC5zMTYgICAgICAgIFJPVzZSLCBST1cwUlsyXQorICAgIHZkdXAuczE2ICAgICAgICBST1c3UiwgUk9XMFJbM10KKyAgICB2ZHVwLnMxNiAgICAgICAgUk9XMFIsIFJPVzBSWzBdCisgICAgYiAgICAgICAgICAgICAgIDFiICAvKiBHbyB0byAnbm9ybWFsJyBzZWNvbmQgcGFzcyAqLworCis0OiAgLyogMS1EIElEQ1QsIHBhc3MgMiAoc3BhcnNlIHZhcmlhbnQgd2l0aCB6ZXJvIHJvd3MgNC03KSwgbGVmdCA0eDggaGFsZiAqLworICAgIHZsZDEuczE2ICAgICAgICB7ZDJ9LCBbaXAsIDo2NF0gICAgICAgICAgICAgICAvKiByZWxvYWQgY29uc3RhbnRzICovCisgICAgdm11bGwuczE2ICAgICAgIHE2LCBST1cxTCwgWEZJWF8xXzE3NTg3NTYwMgorICAgIHZtbGFsLnMxNiAgICAgICBxNiwgUk9XM0wsIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMV85NjE1NzA1NjAKKyAgICB2bXVsbC5zMTYgICAgICAgcTcsIFJPVzNMLCBYRklYXzFfMTc1ODc1NjAyCisgICAgdm1sYWwuczE2ICAgICAgIHE3LCBST1cxTCwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18wXzM5MDE4MDY0NAorICAgIHZtdWxsLnMxNiAgICAgICBxMiwgUk9XMkwsIFhGSVhfMF81NDExOTYxMDAKKyAgICB2c2hsbC5zMTYgICAgICAgcTMsIFJPVzBMLCAjMTMKKyAgICB2bW92ICAgICAgICAgICAgcTQsIHE2CisgICAgdm1sYWwuczE2ICAgICAgIHE2LCBST1czTCwgWEZJWF8zXzA3MjcxMTAyNl9NSU5VU18yXzU2MjkxNTQ0NworICAgIHZtbHNsLnMxNiAgICAgICBxNCwgUk9XMUwsIFhGSVhfMF84OTk5NzYyMjMKKyAgICB2YWRkLnMzMiAgICAgICAgcTEsIHEzLCBxMgorICAgIHZtb3YgICAgICAgICAgICBxNSwgcTcKKyAgICB2bWxhbC5zMTYgICAgICAgcTcsIFJPVzFMLCBYRklYXzFfNTAxMzIxMTEwX01JTlVTXzBfODk5OTc2MjIzCisgICAgdmFkZC5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2YWRkLnMzMiAgICAgICAgcTYsIHE2LCBxNgorICAgIHZtbHNsLnMxNiAgICAgICBxNSwgUk9XM0wsIFhGSVhfMl81NjI5MTU0NDcKKyAgICB2c2hybi5zMzIgICAgICAgUk9XMUwsIHExLCAjMTYKKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHExLCBxNgorICAgIHZtdWxsLnMxNiAgICAgICBxNiwgUk9XMkwsIFhGSVhfMF81NDExOTYxMDBfUExVU18wXzc2NTM2Njg2NQorICAgIHZzdWIuczMyICAgICAgICBxMywgcTMsIHEyCisgICAgdnNocm4uczMyICAgICAgIFJPVzJSLCBxMSwgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzZMIDwtPiBST1cyUiAqLworICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHE1CisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTUKKyAgICB2c2hsbC5zMTYgICAgICAgcTUsIFJPVzBMLCAjMTMKKyAgICB2c2hybi5zMzIgICAgICAgUk9XMkwsIHExLCAjMTYKKyAgICB2c2hybi5zMzIgICAgICAgUk9XMVIsIHEzLCAjMTYgICAgICAgICAgICAgICAgLyogUk9XNUwgPC0+IFJPVzFSICovCisgICAgdmFkZC5zMzIgICAgICAgIHEyLCBxNSwgcTYKKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHE1LCBxNgorICAgIHZhZGQuczMyICAgICAgICBxNiwgcTIsIHE3CisgICAgdnN1Yi5zMzIgICAgICAgIHEyLCBxMiwgcTcKKyAgICB2YWRkLnMzMiAgICAgICAgcTUsIHExLCBxNAorICAgIHZzdWIuczMyICAgICAgICBxMywgcTEsIHE0CisgICAgdnNocm4uczMyICAgICAgIFJPVzNSLCBxMiwgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzdMIDwtPiBST1czUiAqLworICAgIHZzaHJuLnMzMiAgICAgICBST1czTCwgcTUsICMxNgorICAgIHZzaHJuLnMzMiAgICAgICBST1cwTCwgcTYsICMxNgorICAgIHZzaHJuLnMzMiAgICAgICBST1cwUiwgcTMsICMxNiAgICAgICAgICAgICAgICAvKiBST1c0TCA8LT4gUk9XMFIgKi8KKyAgICAvKiAxLUQgSURDVCwgcGFzcyAyIChzcGFyc2UgdmFyaWFudCB3aXRoIHplcm8gcm93cyA0LTcpLCByaWdodCA0eDggaGFsZiAqLworICAgIHZsZDEuczE2ICAgICAgICB7ZDJ9LCBbaXAsIDo2NF0gICAgICAgICAgICAgICAvKiByZWxvYWQgY29uc3RhbnRzICovCisgICAgdm11bGwuczE2ICAgICAgIHE2LCBST1c1TCwgWEZJWF8xXzE3NTg3NTYwMgorICAgIHZtbGFsLnMxNiAgICAgICBxNiwgUk9XN0wsIFhGSVhfMV8xNzU4NzU2MDJfTUlOVVNfMV85NjE1NzA1NjAKKyAgICB2bXVsbC5zMTYgICAgICAgcTcsIFJPVzdMLCBYRklYXzFfMTc1ODc1NjAyCisgICAgdm1sYWwuczE2ICAgICAgIHE3LCBST1c1TCwgWEZJWF8xXzE3NTg3NTYwMl9NSU5VU18wXzM5MDE4MDY0NAorICAgIHZtdWxsLnMxNiAgICAgICBxMiwgUk9XNkwsIFhGSVhfMF81NDExOTYxMDAKKyAgICB2c2hsbC5zMTYgICAgICAgcTMsIFJPVzRMLCAjMTMKKyAgICB2bW92ICAgICAgICAgICAgcTQsIHE2CisgICAgdm1sYWwuczE2ICAgICAgIHE2LCBST1c3TCwgWEZJWF8zXzA3MjcxMTAyNl9NSU5VU18yXzU2MjkxNTQ0NworICAgIHZtbHNsLnMxNiAgICAgICBxNCwgUk9XNUwsIFhGSVhfMF84OTk5NzYyMjMKKyAgICB2YWRkLnMzMiAgICAgICAgcTEsIHEzLCBxMgorICAgIHZtb3YgICAgICAgICAgICBxNSwgcTcKKyAgICB2bWxhbC5zMTYgICAgICAgcTcsIFJPVzVMLCBYRklYXzFfNTAxMzIxMTEwX01JTlVTXzBfODk5OTc2MjIzCisgICAgdmFkZC5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2YWRkLnMzMiAgICAgICAgcTYsIHE2LCBxNgorICAgIHZtbHNsLnMxNiAgICAgICBxNSwgUk9XN0wsIFhGSVhfMl81NjI5MTU0NDcKKyAgICB2c2hybi5zMzIgICAgICAgUk9XNUwsIHExLCAjMTYgICAgICAgICAgICAgICAgLyogUk9XNUwgPC0+IFJPVzFSICovCisgICAgdnN1Yi5zMzIgICAgICAgIHExLCBxMSwgcTYKKyAgICB2bXVsbC5zMTYgICAgICAgcTYsIFJPVzZMLCBYRklYXzBfNTQxMTk2MTAwX1BMVVNfMF83NjUzNjY4NjUKKyAgICB2c3ViLnMzMiAgICAgICAgcTMsIHEzLCBxMgorICAgIHZzaHJuLnMzMiAgICAgICBST1c2UiwgcTEsICMxNgorICAgIHZhZGQuczMyICAgICAgICBxMSwgcTMsIHE1CisgICAgdnN1Yi5zMzIgICAgICAgIHEzLCBxMywgcTUKKyAgICB2c2hsbC5zMTYgICAgICAgcTUsIFJPVzRMLCAjMTMKKyAgICB2c2hybi5zMzIgICAgICAgUk9XNkwsIHExLCAjMTYgICAgICAgICAgICAgICAgLyogUk9XNkwgPC0+IFJPVzJSICovCisgICAgdnNocm4uczMyICAgICAgIFJPVzVSLCBxMywgIzE2CisgICAgdmFkZC5zMzIgICAgICAgIHEyLCBxNSwgcTYKKyAgICB2c3ViLnMzMiAgICAgICAgcTEsIHE1LCBxNgorICAgIHZhZGQuczMyICAgICAgICBxNiwgcTIsIHE3CisgICAgdnN1Yi5zMzIgICAgICAgIHEyLCBxMiwgcTcKKyAgICB2YWRkLnMzMiAgICAgICAgcTUsIHExLCBxNAorICAgIHZzdWIuczMyICAgICAgICBxMywgcTEsIHE0CisgICAgdnNocm4uczMyICAgICAgIFJPVzdSLCBxMiwgIzE2CisgICAgdnNocm4uczMyICAgICAgIFJPVzdMLCBxNSwgIzE2ICAgICAgICAgICAgICAgIC8qIFJPVzdMIDwtPiBST1czUiAqLworICAgIHZzaHJuLnMzMiAgICAgICBST1c0TCwgcTYsICMxNiAgICAgICAgICAgICAgICAvKiBST1c0TCA8LT4gUk9XMFIgKi8KKyAgICB2c2hybi5zMzIgICAgICAgUk9XNFIsIHEzLCAjMTYKKyAgICBiICAgICAgICAgICAgICAgMmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gZXBpbG9ndWUgKi8KKworICAgIC51bnJlcSAgICAgICAgICBEQ1RfVEFCTEUKKyAgICAudW5yZXEgICAgICAgICAgQ09FRl9CTE9DSworICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQlVGCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9DT0wKKyAgICAudW5yZXEgICAgICAgICAgVE1QMQorICAgIC51bnJlcSAgICAgICAgICBUTVAyCisgICAgLnVucmVxICAgICAgICAgIFRNUDMKKyAgICAudW5yZXEgICAgICAgICAgVE1QNAorCisgICAgLnVucmVxICAgICAgICAgIFJPVzBMCisgICAgLnVucmVxICAgICAgICAgIFJPVzBSCisgICAgLnVucmVxICAgICAgICAgIFJPVzFMCisgICAgLnVucmVxICAgICAgICAgIFJPVzFSCisgICAgLnVucmVxICAgICAgICAgIFJPVzJMCisgICAgLnVucmVxICAgICAgICAgIFJPVzJSCisgICAgLnVucmVxICAgICAgICAgIFJPVzNMCisgICAgLnVucmVxICAgICAgICAgIFJPVzNSCisgICAgLnVucmVxICAgICAgICAgIFJPVzRMCisgICAgLnVucmVxICAgICAgICAgIFJPVzRSCisgICAgLnVucmVxICAgICAgICAgIFJPVzVMCisgICAgLnVucmVxICAgICAgICAgIFJPVzVSCisgICAgLnVucmVxICAgICAgICAgIFJPVzZMCisgICAgLnVucmVxICAgICAgICAgIFJPVzZSCisgICAgLnVucmVxICAgICAgICAgIFJPVzdMCisgICAgLnVucmVxICAgICAgICAgIFJPVzdSCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoganNpbWRfaWRjdF9pZmFzdF9uZW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCisgKiB0aGUgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBJdCB1c2VzIHRoZSBzYW1lIGNhbGN1bGF0aW9ucworICogYW5kIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGFzIElKRydzIG9yaWdpbmFsICdqcGVnX2lkY3RfaWZhc3QnCisgKiBmdW5jdGlvbiBmcm9tIGppZGN0ZnN0LmMKKyAqCisgKiBOb3JtYWxseSAxLUQgQUFOIERDVCBuZWVkcyA1IG11bHRpcGxpY2F0aW9ucyBhbmQgMjkgYWRkaXRpb25zLgorICogQnV0IGluIEFSTSBORU9OIGNhc2Ugc29tZSBleHRyYSBhZGRpdGlvbnMgYXJlIHJlcXVpcmVkIGJlY2F1c2UgVlFETVVMSAorICogaW5zdHJ1Y3Rpb24gY2FuJ3QgaGFuZGxlIHRoZSBjb25zdGFudHMgbGFyZ2VyIHRoYW4gMS4gU28gdGhlIGV4cHJlc3Npb25zCisgKiBsaWtlICJ4ICogMS4wODIzOTIyMDAiIGhhdmUgdG8gYmUgY29udmVydGVkIHRvICJ4ICogMC4wODIzOTIyMDAgKyB4IiwKKyAqIHdoaWNoIGludHJvZHVjZXMgYW4gZXh0cmEgYWRkaXRpb24uIE92ZXJhbGwsIHRoZXJlIGFyZSA2IGV4dHJhIGFkZGl0aW9ucworICogcGVyIDEtRCBJRENUIHBhc3MsIHRvdGFsbGluZyB0byA1IFZRRE1VTEggYW5kIDM1IFZBREQvVlNVQiBpbnN0cnVjdGlvbnMuCisgKi8KKworI2RlZmluZSBYRklYXzFfMDgyMzkyMjAwICBkMFswXQorI2RlZmluZSBYRklYXzFfNDE0MjEzNTYyICBkMFsxXQorI2RlZmluZSBYRklYXzFfODQ3NzU5MDY1ICBkMFsyXQorI2RlZmluZSBYRklYXzJfNjEzMTI1OTMwICBkMFszXQorCisuYmFsaWduIDE2Citqc2ltZF9pZGN0X2lmYXN0X25lb25fY29uc3RzOgorICAuc2hvcnQgKDI3NyAqIDEyOCAtIDI1NiAqIDEyOCkgIC8qIFhGSVhfMV8wODIzOTIyMDAgKi8KKyAgLnNob3J0ICgzNjIgKiAxMjggLSAyNTYgKiAxMjgpICAvKiBYRklYXzFfNDE0MjEzNTYyICovCisgIC5zaG9ydCAoNDczICogMTI4IC0gMjU2ICogMTI4KSAgLyogWEZJWF8xXzg0Nzc1OTA2NSAqLworICAuc2hvcnQgKDY2OSAqIDEyOCAtIDUxMiAqIDEyOCkgIC8qIFhGSVhfMl82MTMxMjU5MzAgKi8KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2lkY3RfaWZhc3RfbmVvbgorCisgICAgRENUX1RBQkxFICAgICAgIC5yZXEgcjAKKyAgICBDT0VGX0JMT0NLICAgICAgLnJlcSByMQorICAgIE9VVFBVVF9CVUYgICAgICAucmVxIHIyCisgICAgT1VUUFVUX0NPTCAgICAgIC5yZXEgcjMKKyAgICBUTVAxICAgICAgICAgICAgLnJlcSByMAorICAgIFRNUDIgICAgICAgICAgICAucmVxIHIxCisgICAgVE1QMyAgICAgICAgICAgIC5yZXEgcjIKKyAgICBUTVA0ICAgICAgICAgICAgLnJlcSBpcAorCisgICAgLyogTG9hZCBhbmQgZGVxdWFudGl6ZSBjb2VmZmljaWVudHMgaW50byBORU9OIHJlZ2lzdGVycworICAgICAqIHdpdGggdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uOgorICAgICAqICAgICAgIDAgMSAyIDMgfCA0IDUgNiA3CisgICAgICogICAgICAtLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgKiAgIDAgfCBkMTYgICAgIHwgZDE3ICAgICAoIHE4ICApCisgICAgICogICAxIHwgZDE4ICAgICB8IGQxOSAgICAgKCBxOSAgKQorICAgICAqICAgMiB8IGQyMCAgICAgfCBkMjEgICAgICggcTEwICkKKyAgICAgKiAgIDMgfCBkMjIgICAgIHwgZDIzICAgICAoIHExMSApCisgICAgICogICA0IHwgZDI0ICAgICB8IGQyNSAgICAgKCBxMTIgKQorICAgICAqICAgNSB8IGQyNiAgICAgfCBkMjcgICAgICggcTEzICkKKyAgICAgKiAgIDYgfCBkMjggICAgIHwgZDI5ICAgICAoIHExNCApCisgICAgICogICA3IHwgZDMwICAgICB8IGQzMSAgICAgKCBxMTUgKQorICAgICAqLworICAgIGFkciAgICAgICAgICAgICBpcCwganNpbWRfaWRjdF9pZmFzdF9uZW9uX2NvbnN0cworICAgIHZsZDEuMTYgICAgICAgICB7ZDE2LCBkMTcsIGQxOCwgZDE5fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIHZsZDEuMTYgICAgICAgICB7ZDAsIGQxLCBkMiwgZDN9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bGQxLjE2ICAgICAgICAge2QyMCwgZDIxLCBkMjIsIGQyM30sIFtDT0VGX0JMT0NLLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTgsIHE4LCBxMAorICAgIHZsZDEuMTYgICAgICAgICB7ZDQsIGQ1LCBkNiwgZDd9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTksIHE5LCBxMQorICAgIHZsZDEuMTYgICAgICAgICB7ZDI0LCBkMjUsIGQyNiwgZDI3fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIHZtdWwuczE2ICAgICAgICBxMTAsIHExMCwgcTIKKyAgICB2bGQxLjE2ICAgICAgICAge2QwLCBkMSwgZDIsIGQzfSwgW0RDVF9UQUJMRSwgOjEyOF0hCisgICAgdm11bC5zMTYgICAgICAgIHExMSwgcTExLCBxMworICAgIHZsZDEuMTYgICAgICAgICB7ZDI4LCBkMjksIGQzMCwgZDMxfSwgW0NPRUZfQkxPQ0ssIDoxMjhdCisgICAgdm11bC5zMTYgICAgICAgIHExMiwgcTEyLCBxMAorICAgIHZsZDEuMTYgICAgICAgICB7ZDQsIGQ1LCBkNiwgZDd9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTE0LCBxMTQsIHEyCisgICAgdm11bC5zMTYgICAgICAgIHExMywgcTEzLCBxMQorICAgIHZsZDEuMTYgICAgICAgICB7ZDB9LCBbaXAsIDo2NF0gIC8qIGxvYWQgY29uc3RhbnRzICovCisgICAgdm11bC5zMTYgICAgICAgIHExNSwgcTE1LCBxMworICAgIHZwdXNoICAgICAgICAgICB7ZDgtZDEzfSAgICAgICAgIC8qIHNhdmUgTkVPTiByZWdpc3RlcnMgKi8KKyAgICAvKiAxLUQgSURDVCwgcGFzcyAxICovCisgICAgdnN1Yi5zMTYgICAgICAgIHEyLCBxMTAsIHExNAorICAgIHZhZGQuczE2ICAgICAgICBxMTQsIHExMCwgcTE0CisgICAgdnN1Yi5zMTYgICAgICAgIHExLCBxMTEsIHExMworICAgIHZhZGQuczE2ICAgICAgICBxMTMsIHExMSwgcTEzCisgICAgdnN1Yi5zMTYgICAgICAgIHE1LCBxOSwgcTE1CisgICAgdmFkZC5zMTYgICAgICAgIHExNSwgcTksIHExNQorICAgIHZxZG11bGguczE2ICAgICBxNCwgcTIsIFhGSVhfMV80MTQyMTM1NjIKKyAgICB2cWRtdWxoLnMxNiAgICAgcTYsIHExLCBYRklYXzJfNjEzMTI1OTMwCisgICAgdmFkZC5zMTYgICAgICAgIHEzLCBxMSwgcTEKKyAgICB2c3ViLnMxNiAgICAgICAgcTEsIHE1LCBxMQorICAgIHZhZGQuczE2ICAgICAgICBxMTAsIHEyLCBxNAorICAgIHZxZG11bGguczE2ICAgICBxNCwgcTEsIFhGSVhfMV84NDc3NTkwNjUKKyAgICB2c3ViLnMxNiAgICAgICAgcTIsIHExNSwgcTEzCisgICAgdmFkZC5zMTYgICAgICAgIHEzLCBxMywgcTYKKyAgICB2cWRtdWxoLnMxNiAgICAgcTYsIHEyLCBYRklYXzFfNDE0MjEzNTYyCisgICAgdmFkZC5zMTYgICAgICAgIHExLCBxMSwgcTQKKyAgICB2cWRtdWxoLnMxNiAgICAgcTQsIHE1LCBYRklYXzFfMDgyMzkyMjAwCisgICAgdnN1Yi5zMTYgICAgICAgIHExMCwgcTEwLCBxMTQKKyAgICB2YWRkLnMxNiAgICAgICAgcTIsIHEyLCBxNgorICAgIHZzdWIuczE2ICAgICAgICBxNiwgcTgsIHExMgorICAgIHZhZGQuczE2ICAgICAgICBxMTIsIHE4LCBxMTIKKyAgICB2YWRkLnMxNiAgICAgICAgcTksIHE1LCBxNAorICAgIHZhZGQuczE2ICAgICAgICBxNSwgcTYsIHExMAorICAgIHZzdWIuczE2ICAgICAgICBxMTAsIHE2LCBxMTAKKyAgICB2YWRkLnMxNiAgICAgICAgcTYsIHExNSwgcTEzCisgICAgdmFkZC5zMTYgICAgICAgIHE4LCBxMTIsIHExNAorICAgIHZzdWIuczE2ICAgICAgICBxMywgcTYsIHEzCisgICAgdnN1Yi5zMTYgICAgICAgIHExMiwgcTEyLCBxMTQKKyAgICB2c3ViLnMxNiAgICAgICAgcTMsIHEzLCBxMQorICAgIHZzdWIuczE2ICAgICAgICBxMSwgcTksIHExCisgICAgdmFkZC5zMTYgICAgICAgIHEyLCBxMywgcTIKKyAgICB2c3ViLnMxNiAgICAgICAgcTE1LCBxOCwgcTYKKyAgICB2YWRkLnMxNiAgICAgICAgcTEsIHExLCBxMgorICAgIHZhZGQuczE2ICAgICAgICBxOCwgcTgsIHE2CisgICAgdmFkZC5zMTYgICAgICAgIHExNCwgcTUsIHEzCisgICAgdnN1Yi5zMTYgICAgICAgIHE5LCBxNSwgcTMKKyAgICB2c3ViLnMxNiAgICAgICAgcTEzLCBxMTAsIHEyCisgICAgdmFkZC5zMTYgICAgICAgIHExMCwgcTEwLCBxMgorICAgICAgLyogVHJhbnNwb3NlICovCisgICAgICB2dHJuLjE2ICAgICAgICAgcTgsIHE5CisgICAgdnN1Yi5zMTYgICAgICAgIHExMSwgcTEyLCBxMQorICAgICAgdnRybi4xNiAgICAgICAgIHExNCwgcTE1CisgICAgdmFkZC5zMTYgICAgICAgIHExMiwgcTEyLCBxMQorICAgICAgdnRybi4xNiAgICAgICAgIHExMCwgcTExCisgICAgICB2dHJuLjE2ICAgICAgICAgcTEyLCBxMTMKKyAgICAgIHZ0cm4uMzIgICAgICAgICBxOSwgcTExCisgICAgICB2dHJuLjMyICAgICAgICAgcTEyLCBxMTQKKyAgICAgIHZ0cm4uMzIgICAgICAgICBxOCwgcTEwCisgICAgICB2dHJuLjMyICAgICAgICAgcTEzLCBxMTUKKyAgICAgIHZzd3AgICAgICAgICAgICBkMjgsIGQyMQorICAgICAgdnN3cCAgICAgICAgICAgIGQyNiwgZDE5CisgICAgLyogMS1EIElEQ1QsIHBhc3MgMiAqLworICAgIHZzdWIuczE2ICAgICAgICBxMiwgcTEwLCBxMTQKKyAgICAgIHZzd3AgICAgICAgICAgICBkMzAsIGQyMworICAgIHZhZGQuczE2ICAgICAgICBxMTQsIHExMCwgcTE0CisgICAgICB2c3dwICAgICAgICAgICAgZDI0LCBkMTcKKyAgICB2c3ViLnMxNiAgICAgICAgcTEsIHExMSwgcTEzCisgICAgdmFkZC5zMTYgICAgICAgIHExMywgcTExLCBxMTMKKyAgICB2c3ViLnMxNiAgICAgICAgcTUsIHE5LCBxMTUKKyAgICB2YWRkLnMxNiAgICAgICAgcTE1LCBxOSwgcTE1CisgICAgdnFkbXVsaC5zMTYgICAgIHE0LCBxMiwgWEZJWF8xXzQxNDIxMzU2MgorICAgIHZxZG11bGguczE2ICAgICBxNiwgcTEsIFhGSVhfMl82MTMxMjU5MzAKKyAgICB2YWRkLnMxNiAgICAgICAgcTMsIHExLCBxMQorICAgIHZzdWIuczE2ICAgICAgICBxMSwgcTUsIHExCisgICAgdmFkZC5zMTYgICAgICAgIHExMCwgcTIsIHE0CisgICAgdnFkbXVsaC5zMTYgICAgIHE0LCBxMSwgWEZJWF8xXzg0Nzc1OTA2NQorICAgIHZzdWIuczE2ICAgICAgICBxMiwgcTE1LCBxMTMKKyAgICB2YWRkLnMxNiAgICAgICAgcTMsIHEzLCBxNgorICAgIHZxZG11bGguczE2ICAgICBxNiwgcTIsIFhGSVhfMV80MTQyMTM1NjIKKyAgICB2YWRkLnMxNiAgICAgICAgcTEsIHExLCBxNAorICAgIHZxZG11bGguczE2ICAgICBxNCwgcTUsIFhGSVhfMV8wODIzOTIyMDAKKyAgICB2c3ViLnMxNiAgICAgICAgcTEwLCBxMTAsIHExNAorICAgIHZhZGQuczE2ICAgICAgICBxMiwgcTIsIHE2CisgICAgdnN1Yi5zMTYgICAgICAgIHE2LCBxOCwgcTEyCisgICAgdmFkZC5zMTYgICAgICAgIHExMiwgcTgsIHExMgorICAgIHZhZGQuczE2ICAgICAgICBxOSwgcTUsIHE0CisgICAgdmFkZC5zMTYgICAgICAgIHE1LCBxNiwgcTEwCisgICAgdnN1Yi5zMTYgICAgICAgIHExMCwgcTYsIHExMAorICAgIHZhZGQuczE2ICAgICAgICBxNiwgcTE1LCBxMTMKKyAgICB2YWRkLnMxNiAgICAgICAgcTgsIHExMiwgcTE0CisgICAgdnN1Yi5zMTYgICAgICAgIHEzLCBxNiwgcTMKKyAgICB2c3ViLnMxNiAgICAgICAgcTEyLCBxMTIsIHExNAorICAgIHZzdWIuczE2ICAgICAgICBxMywgcTMsIHExCisgICAgdnN1Yi5zMTYgICAgICAgIHExLCBxOSwgcTEKKyAgICB2YWRkLnMxNiAgICAgICAgcTIsIHEzLCBxMgorICAgIHZzdWIuczE2ICAgICAgICBxMTUsIHE4LCBxNgorICAgIHZhZGQuczE2ICAgICAgICBxMSwgcTEsIHEyCisgICAgdmFkZC5zMTYgICAgICAgIHE4LCBxOCwgcTYKKyAgICB2YWRkLnMxNiAgICAgICAgcTE0LCBxNSwgcTMKKyAgICB2c3ViLnMxNiAgICAgICAgcTksIHE1LCBxMworICAgIHZzdWIuczE2ICAgICAgICBxMTMsIHExMCwgcTIKKyAgICB2cG9wICAgICAgICAgICAge2Q4LWQxM30gICAgICAvKiByZXN0b3JlIE5FT04gcmVnaXN0ZXJzICovCisgICAgdmFkZC5zMTYgICAgICAgIHExMCwgcTEwLCBxMgorICAgIHZzdWIuczE2ICAgICAgICBxMTEsIHExMiwgcTEKKyAgICB2YWRkLnMxNiAgICAgICAgcTEyLCBxMTIsIHExCisgICAgLyogRGVzY2FsZSB0byA4LWJpdCBhbmQgcmFuZ2UgbGltaXQgKi8KKyAgICB2bW92LnU4ICAgICAgICAgcTAsICMweDgwCisgICAgdnFzaHJuLnMxNiAgICAgIGQxNiwgcTgsICM1CisgICAgdnFzaHJuLnMxNiAgICAgIGQxNywgcTksICM1CisgICAgdnFzaHJuLnMxNiAgICAgIGQxOCwgcTEwLCAjNQorICAgIHZxc2hybi5zMTYgICAgICBkMTksIHExMSwgIzUKKyAgICB2cXNocm4uczE2ICAgICAgZDIwLCBxMTIsICM1CisgICAgdnFzaHJuLnMxNiAgICAgIGQyMSwgcTEzLCAjNQorICAgIHZxc2hybi5zMTYgICAgICBkMjIsIHExNCwgIzUKKyAgICB2cXNocm4uczE2ICAgICAgZDIzLCBxMTUsICM1CisgICAgdmFkZC51OCAgICAgICAgIHE4LCBxOCwgcTAKKyAgICB2YWRkLnU4ICAgICAgICAgcTksIHE5LCBxMAorICAgIHZhZGQudTggICAgICAgICBxMTAsIHExMCwgcTAKKyAgICB2YWRkLnU4ICAgICAgICAgcTExLCBxMTEsIHEwCisgICAgLyogVHJhbnNwb3NlIHRoZSBmaW5hbCA4LWJpdCBzYW1wbGVzICovCisgICAgdnRybi4xNiAgICAgICAgIHE4LCBxOQorICAgIHZ0cm4uMTYgICAgICAgICBxMTAsIHExMQorICAgIHZ0cm4uMzIgICAgICAgICBxOCwgcTEwCisgICAgdnRybi4zMiAgICAgICAgIHE5LCBxMTEKKyAgICB2dHJuLjggICAgICAgICAgZDE2LCBkMTcKKyAgICB2dHJuLjggICAgICAgICAgZDE4LCBkMTkKKyAgICAgIC8qIFN0b3JlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgIGxkbWlhICAgICAgICAgICBPVVRQVVRfQlVGISwge1RNUDEsIFRNUDJ9CisgICAgICBhZGQgICAgICAgICAgICAgVE1QMSwgVE1QMSwgT1VUUFVUX0NPTAorICAgICAgYWRkICAgICAgICAgICAgIFRNUDIsIFRNUDIsIE9VVFBVVF9DT0wKKyAgICAgIHZzdDEuOCAgICAgICAgICB7ZDE2fSwgW1RNUDFdCisgICAgICB2c3QxLjggICAgICAgICAge2QxN30sIFtUTVAyXQorICAgICAgbGRtaWEgICAgICAgICAgIE9VVFBVVF9CVUYhLCB7VE1QMSwgVE1QMn0KKyAgICAgIGFkZCAgICAgICAgICAgICBUTVAxLCBUTVAxLCBPVVRQVVRfQ09MCisgICAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgT1VUUFVUX0NPTAorICAgICAgdnN0MS44ICAgICAgICAgIHtkMTh9LCBbVE1QMV0KKyAgICB2dHJuLjggICAgICAgICAgZDIwLCBkMjEKKyAgICAgIHZzdDEuOCAgICAgICAgICB7ZDE5fSwgW1RNUDJdCisgICAgICBsZG1pYSAgICAgICAgICAgT1VUUFVUX0JVRiwge1RNUDEsIFRNUDIsIFRNUDMsIFRNUDR9CisgICAgICBhZGQgICAgICAgICAgICAgVE1QMSwgVE1QMSwgT1VUUFVUX0NPTAorICAgICAgYWRkICAgICAgICAgICAgIFRNUDIsIFRNUDIsIE9VVFBVVF9DT0wKKyAgICAgIGFkZCAgICAgICAgICAgICBUTVAzLCBUTVAzLCBPVVRQVVRfQ09MCisgICAgICBhZGQgICAgICAgICAgICAgVE1QNCwgVE1QNCwgT1VUUFVUX0NPTAorICAgICAgdnN0MS44ICAgICAgICAgIHtkMjB9LCBbVE1QMV0KKyAgICB2dHJuLjggICAgICAgICAgZDIyLCBkMjMKKyAgICAgIHZzdDEuOCAgICAgICAgICB7ZDIxfSwgW1RNUDJdCisgICAgICB2c3QxLjggICAgICAgICAge2QyMn0sIFtUTVAzXQorICAgICAgdnN0MS44ICAgICAgICAgIHtkMjN9LCBbVE1QNF0KKyAgICBieCAgICAgICAgICAgICAgbHIKKworICAgIC51bnJlcSAgICAgICAgICBEQ1RfVEFCTEUKKyAgICAudW5yZXEgICAgICAgICAgQ09FRl9CTE9DSworICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQlVGCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9DT0wKKyAgICAudW5yZXEgICAgICAgICAgVE1QMQorICAgIC51bnJlcSAgICAgICAgICBUTVAyCisgICAgLnVucmVxICAgICAgICAgIFRNUDMKKyAgICAudW5yZXEgICAgICAgICAgVE1QNAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2lkY3RfNHg0X25lb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGludmVyc2UtRENUIGNvZGUgZm9yIGdldHRpbmcgcmVkdWNlZC1zaXplCisgKiA0eDQgcGl4ZWxzIG91dHB1dCBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suIEl0IHVzZXMgdGhlIHNhbWUgIGNhbGN1bGF0aW9ucworICogYW5kIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGFzIElKRydzIG9yaWdpbmFsICdqcGVnX2lkY3RfNHg0JworICogZnVuY3Rpb24gZnJvbSBqcGVnLTZiIChqaWRjdHJlZC5jKS4KKyAqCisgKiBOT1RFOiBqcGVnLTggaGFzIGFuIGltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIDR4NCBpbnZlcnNlLURDVCwgd2hpY2gKKyAqICAgICAgIHJlcXVpcmVzIG11Y2ggbGVzcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgYW5kIGhlbmNlIHNob3VsZCBiZSBmYXN0ZXIuCisgKiAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBORU9OIG9wdGltaXplZCBmdW5jdGlvbiBpcworICogICAgICAgYml0IGV4YWN0IGNvbXBhdGliaWxpdHkgd2l0aCBqcGVnLTZiLgorICoKKyAqIFRPRE86IGEgYml0IGJldHRlciBpbnN0cnVjdGlvbnMgc2NoZWR1bGluZyBjYW4gYmUgYWNoaWV2ZWQgYnkgZXhwYW5kaW5nCisgKiAgICAgICBpZGN0X2hlbHBlci90cmFuc3Bvc2VfNHg0IG1hY3JvcyBhbmQgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMsCisgKiAgICAgICBidXQgcmVhZGFiaWxpdHkgd2lsbCBzdWZmZXIgc29tZXdoYXQuCisgKi8KKworI2RlZmluZSBDT05TVF9CSVRTICAxMworCisjZGVmaW5lIEZJWF8wXzIxMTE2NDI0MyAgKDE3MzApICAgLyogRklYKDAuMjExMTY0MjQzKSAqLworI2RlZmluZSBGSVhfMF81MDk3OTU1NzkgICg0MTc2KSAgIC8qIEZJWCgwLjUwOTc5NTU3OSkgKi8KKyNkZWZpbmUgRklYXzBfNjAxMzQ0ODg3ICAoNDkyNikgICAvKiBGSVgoMC42MDEzNDQ4ODcpICovCisjZGVmaW5lIEZJWF8wXzcyMDk1OTgyMiAgKDU5MDYpICAgLyogRklYKDAuNzIwOTU5ODIyKSAqLworI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICg2MjcwKSAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzBfODUwNDMwMDk1ICAoNjk2NykgICAvKiBGSVgoMC44NTA0MzAwOTUpICovCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKDczNzMpICAgLyogRklYKDAuODk5OTc2MjIzKSAqLworI2RlZmluZSBGSVhfMV8wNjE1OTQzMzcgICg4Njk3KSAgIC8qIEZJWCgxLjA2MTU5NDMzNykgKi8KKyNkZWZpbmUgRklYXzFfMjcyNzU4NTgwICAoMTA0MjYpICAvKiBGSVgoMS4yNzI3NTg1ODApICovCisjZGVmaW5lIEZJWF8xXzQ1MTc3NDk4MSAgKDExODkzKSAgLyogRklYKDEuNDUxNzc0OTgxKSAqLworI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgICgxNTEzNykgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzJfMTcyNzM0ODAzICAoMTc3OTkpICAvKiBGSVgoMi4xNzI3MzQ4MDMpICovCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKDIwOTk1KSAgLyogRklYKDIuNTYyOTE1NDQ3KSAqLworI2RlZmluZSBGSVhfM182MjQ1MDk3ODUgICgyOTY5MikgIC8qIEZJWCgzLjYyNDUwOTc4NSkgKi8KKworLmJhbGlnbiAxNgoranNpbWRfaWRjdF80eDRfbmVvbl9jb25zdHM6CisgIC5zaG9ydCBGSVhfMV84NDc3NTkwNjUgICAgICAgIC8qIGQwWzBdICovCisgIC5zaG9ydCAtRklYXzBfNzY1MzY2ODY1ICAgICAgIC8qIGQwWzFdICovCisgIC5zaG9ydCAtRklYXzBfMjExMTY0MjQzICAgICAgIC8qIGQwWzJdICovCisgIC5zaG9ydCBGSVhfMV80NTE3NzQ5ODEgICAgICAgIC8qIGQwWzNdICovCisgIC5zaG9ydCAtRklYXzJfMTcyNzM0ODAzICAgICAgIC8qIGQxWzBdICovCisgIC5zaG9ydCBGSVhfMV8wNjE1OTQzMzcgICAgICAgIC8qIGQxWzFdICovCisgIC5zaG9ydCAtRklYXzBfNTA5Nzk1NTc5ICAgICAgIC8qIGQxWzJdICovCisgIC5zaG9ydCAtRklYXzBfNjAxMzQ0ODg3ICAgICAgIC8qIGQxWzNdICovCisgIC5zaG9ydCBGSVhfMF84OTk5NzYyMjMgICAgICAgIC8qIGQyWzBdICovCisgIC5zaG9ydCBGSVhfMl81NjI5MTU0NDcgICAgICAgIC8qIGQyWzFdICovCisgIC5zaG9ydCAxIDw8IChDT05TVF9CSVRTICsgMSkgIC8qIGQyWzJdICovCisgIC5zaG9ydCAwICAgICAgICAgICAgICAgICAgICAgIC8qIGQyWzNdICovCisKKy5tYWNybyBpZGN0X2hlbHBlciB4NCwgeDYsIHg4LCB4MTAsIHgxMiwgeDE0LCB4MTYsIHNoaWZ0LCB5MjYsIHkyNywgeTI4LCB5MjkKKyAgICB2bXVsbC5zMTYgICAgICAgcTE0LCBceDQsIGQyWzJdCisgICAgdm1sYWwuczE2ICAgICAgIHExNCwgXHg4LCBkMFswXQorICAgIHZtbGFsLnMxNiAgICAgICBxMTQsIFx4MTQsIGQwWzFdCisKKyAgICB2bXVsbC5zMTYgICAgICAgcTEzLCBceDE2LCBkMVsyXQorICAgIHZtbGFsLnMxNiAgICAgICBxMTMsIFx4MTIsIGQxWzNdCisgICAgdm1sYWwuczE2ICAgICAgIHExMywgXHgxMCwgZDJbMF0KKyAgICB2bWxhbC5zMTYgICAgICAgcTEzLCBceDYsIGQyWzFdCisKKyAgICB2bXVsbC5zMTYgICAgICAgcTE1LCBceDQsIGQyWzJdCisgICAgdm1sc2wuczE2ICAgICAgIHExNSwgXHg4LCBkMFswXQorICAgIHZtbHNsLnMxNiAgICAgICBxMTUsIFx4MTQsIGQwWzFdCisKKyAgICB2bXVsbC5zMTYgICAgICAgcTEyLCBceDE2LCBkMFsyXQorICAgIHZtbGFsLnMxNiAgICAgICBxMTIsIFx4MTIsIGQwWzNdCisgICAgdm1sYWwuczE2ICAgICAgIHExMiwgXHgxMCwgZDFbMF0KKyAgICB2bWxhbC5zMTYgICAgICAgcTEyLCBceDYsIGQxWzFdCisKKyAgICB2YWRkLnMzMiAgICAgICAgcTEwLCBxMTQsIHExMworICAgIHZzdWIuczMyICAgICAgICBxMTQsIHExNCwgcTEzCisKKyAgLmlmIFxzaGlmdCA+IDE2CisgICAgdnJzaHIuczMyICAgICAgIHExMCwgcTEwLCAjXHNoaWZ0CisgICAgdnJzaHIuczMyICAgICAgIHExNCwgcTE0LCAjXHNoaWZ0CisgICAgdm1vdm4uczMyICAgICAgIFx5MjYsIHExMAorICAgIHZtb3ZuLnMzMiAgICAgICBceTI5LCBxMTQKKyAgLmVsc2UKKyAgICB2cnNocm4uczMyICAgICAgXHkyNiwgcTEwLCAjXHNoaWZ0CisgICAgdnJzaHJuLnMzMiAgICAgIFx5MjksIHExNCwgI1xzaGlmdAorICAuZW5kaWYKKworICAgIHZhZGQuczMyICAgICAgICBxMTAsIHExNSwgcTEyCisgICAgdnN1Yi5zMzIgICAgICAgIHExNSwgcTE1LCBxMTIKKworICAuaWYgXHNoaWZ0ID4gMTYKKyAgICB2cnNoci5zMzIgICAgICAgcTEwLCBxMTAsICNcc2hpZnQKKyAgICB2cnNoci5zMzIgICAgICAgcTE1LCBxMTUsICNcc2hpZnQKKyAgICB2bW92bi5zMzIgICAgICAgXHkyNywgcTEwCisgICAgdm1vdm4uczMyICAgICAgIFx5MjgsIHExNQorICAuZWxzZQorICAgIHZyc2hybi5zMzIgICAgICBceTI3LCBxMTAsICNcc2hpZnQKKyAgICB2cnNocm4uczMyICAgICAgXHkyOCwgcTE1LCAjXHNoaWZ0CisgIC5lbmRpZgorLmVuZG0KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2lkY3RfNHg0X25lb24KKworICAgIERDVF9UQUJMRSAgICAgICAucmVxIHIwCisgICAgQ09FRl9CTE9DSyAgICAgIC5yZXEgcjEKKyAgICBPVVRQVVRfQlVGICAgICAgLnJlcSByMgorICAgIE9VVFBVVF9DT0wgICAgICAucmVxIHIzCisgICAgVE1QMSAgICAgICAgICAgIC5yZXEgcjAKKyAgICBUTVAyICAgICAgICAgICAgLnJlcSByMQorICAgIFRNUDMgICAgICAgICAgICAucmVxIHIyCisgICAgVE1QNCAgICAgICAgICAgIC5yZXEgaXAKKworICAgIHZwdXNoICAgICAgICAgICB7ZDgtZDE1fQorCisgICAgLyogTG9hZCBjb25zdGFudHMgKGQzIGlzIGp1c3QgdXNlZCBmb3IgcGFkZGluZykgKi8KKyAgICBhZHIgICAgICAgICAgICAgVE1QNCwganNpbWRfaWRjdF80eDRfbmVvbl9jb25zdHMKKyAgICB2bGQxLjE2ICAgICAgICAge2QwLCBkMSwgZDIsIGQzfSwgW1RNUDQsIDoxMjhdCisKKyAgICAvKiBMb2FkIGFsbCBDT0VGX0JMT0NLIGludG8gTkVPTiByZWdpc3RlcnMgd2l0aCB0aGUgZm9sbG93aW5nIGFsbG9jYXRpb246CisgICAgICogICAgICAgMCAxIDIgMyB8IDQgNSA2IDcKKyAgICAgKiAgICAgIC0tLS0tLS0tLSstLS0tLS0tLQorICAgICAqICAgMCB8IGQ0ICAgICAgfCBkNQorICAgICAqICAgMSB8IGQ2ICAgICAgfCBkNworICAgICAqICAgMiB8IGQ4ICAgICAgfCBkOQorICAgICAqICAgMyB8IGQxMCAgICAgfCBkMTEKKyAgICAgKiAgIDQgfCAtICAgICAgIHwgLQorICAgICAqICAgNSB8IGQxMiAgICAgfCBkMTMKKyAgICAgKiAgIDYgfCBkMTQgICAgIHwgZDE1CisgICAgICogICA3IHwgZDE2ICAgICB8IGQxNworICAgICAqLworICAgIHZsZDEuMTYgICAgICAgICB7ZDQsIGQ1LCBkNiwgZDd9LCBbQ09FRl9CTE9DSywgOjEyOF0hCisgICAgdmxkMS4xNiAgICAgICAgIHtkOCwgZDksIGQxMCwgZDExfSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIGFkZCBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QxMiwgZDEzLCBkMTQsIGQxNX0sIFtDT0VGX0JMT0NLLCA6MTI4XSEKKyAgICB2bGQxLjE2ICAgICAgICAge2QxNiwgZDE3fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIC8qIGRlcXVhbnRpemUgKi8KKyAgICB2bGQxLjE2ICAgICAgICAge2QxOCwgZDE5LCBkMjAsIGQyMX0sIFtEQ1RfVEFCTEUsIDoxMjhdIQorICAgIHZtdWwuczE2ICAgICAgICBxMiwgcTIsIHE5CisgICAgdmxkMS4xNiAgICAgICAgIHtkMjIsIGQyMywgZDI0LCBkMjV9LCBbRENUX1RBQkxFLCA6MTI4XSEKKyAgICB2bXVsLnMxNiAgICAgICAgcTMsIHEzLCBxMTAKKyAgICB2bXVsLnMxNiAgICAgICAgcTQsIHE0LCBxMTEKKyAgICBhZGQgICAgICAgICAgICAgRENUX1RBQkxFLCBEQ1RfVEFCTEUsICMxNgorICAgIHZsZDEuMTYgICAgICAgICB7ZDI2LCBkMjcsIGQyOCwgZDI5fSwgW0RDVF9UQUJMRSwgOjEyOF0hCisgICAgdm11bC5zMTYgICAgICAgIHE1LCBxNSwgcTEyCisgICAgdm11bC5zMTYgICAgICAgIHE2LCBxNiwgcTEzCisgICAgdmxkMS4xNiAgICAgICAgIHtkMzAsIGQzMX0sIFtEQ1RfVEFCTEUsIDoxMjhdIQorICAgIHZtdWwuczE2ICAgICAgICBxNywgcTcsIHExNAorICAgIHZtdWwuczE2ICAgICAgICBxOCwgcTgsIHExNQorCisgICAgLyogUGFzcyAxICovCisgICAgaWRjdF9oZWxwZXIgICAgIGQ0LCBkNiwgZDgsIGQxMCwgZDEyLCBkMTQsIGQxNiwgMTIsIGQ0LCBkNiwgZDgsIGQxMAorICAgIHRyYW5zcG9zZV80eDQgICBkNCwgZDYsIGQ4LCBkMTAKKyAgICBpZGN0X2hlbHBlciAgICAgZDUsIGQ3LCBkOSwgZDExLCBkMTMsIGQxNSwgZDE3LCAxMiwgZDUsIGQ3LCBkOSwgZDExCisgICAgdHJhbnNwb3NlXzR4NCAgIGQ1LCBkNywgZDksIGQxMQorCisgICAgLyogUGFzcyAyICovCisgICAgaWRjdF9oZWxwZXIgICAgIGQ0LCBkNiwgZDgsIGQxMCwgZDcsIGQ5LCBkMTEsIDE5LCBkMjYsIGQyNywgZDI4LCBkMjkKKyAgICB0cmFuc3Bvc2VfNHg0ICAgZDI2LCBkMjcsIGQyOCwgZDI5CisKKyAgICAvKiBSYW5nZSBsaW1pdCAqLworICAgIHZtb3YudTE2ICAgICAgICBxMTUsICMweDgwCisgICAgdmFkZC5zMTYgICAgICAgIHExMywgcTEzLCBxMTUKKyAgICB2YWRkLnMxNiAgICAgICAgcTE0LCBxMTQsIHExNQorICAgIHZxbW92dW4uczE2ICAgICBkMjYsIHExMworICAgIHZxbW92dW4uczE2ICAgICBkMjcsIHExNAorCisgICAgLyogU3RvcmUgcmVzdWx0cyB0byB0aGUgb3V0cHV0IGJ1ZmZlciAqLworICAgIGxkbWlhICAgICAgICAgICBPVVRQVVRfQlVGLCB7VE1QMSwgVE1QMiwgVE1QMywgVE1QNH0KKyAgICBhZGQgICAgICAgICAgICAgVE1QMSwgVE1QMSwgT1VUUFVUX0NPTAorICAgIGFkZCAgICAgICAgICAgICBUTVAyLCBUTVAyLCBPVVRQVVRfQ09MCisgICAgYWRkICAgICAgICAgICAgIFRNUDMsIFRNUDMsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QNCwgVE1QNCwgT1VUUFVUX0NPTAorCisjaWYgZGVmaW5lZChfX0FSTUVMX18pICYmICFSRVNQRUNUX1NUUklDVF9BTElHTk1FTlQKKyAgICAvKiBXZSBjYW4gdXNlIG11Y2ggbGVzcyBpbnN0cnVjdGlvbnMgb24gbGl0dGxlIGVuZGlhbiBzeXN0ZW1zIGlmIHRoZQorICAgICAqIE9TIGtlcm5lbCBpcyBub3QgY29uZmlndXJlZCB0byB0cmFwIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMKKyAgICAgKi8KKyAgICB2c3QxLjMyICAgICAgICAge2QyNlswXX0sIFtUTVAxXSEKKyAgICB2c3QxLjMyICAgICAgICAge2QyN1swXX0sIFtUTVAzXSEKKyAgICB2c3QxLjMyICAgICAgICAge2QyNlsxXX0sIFtUTVAyXSEKKyAgICB2c3QxLjMyICAgICAgICAge2QyN1sxXX0sIFtUTVA0XSEKKyNlbHNlCisgICAgdnN0MS44ICAgICAgICAgIHtkMjZbMF19LCBbVE1QMV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjdbMF19LCBbVE1QM10hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjZbMV19LCBbVE1QMV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjdbMV19LCBbVE1QM10hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjZbMl19LCBbVE1QMV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjdbMl19LCBbVE1QM10hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjZbM119LCBbVE1QMV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjdbM119LCBbVE1QM10hCisKKyAgICB2c3QxLjggICAgICAgICAge2QyNls0XX0sIFtUTVAyXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyN1s0XX0sIFtUTVA0XSEKKyAgICB2c3QxLjggICAgICAgICAge2QyNls1XX0sIFtUTVAyXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyN1s1XX0sIFtUTVA0XSEKKyAgICB2c3QxLjggICAgICAgICAge2QyNls2XX0sIFtUTVAyXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyN1s2XX0sIFtUTVA0XSEKKyAgICB2c3QxLjggICAgICAgICAge2QyNls3XX0sIFtUTVAyXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyN1s3XX0sIFtUTVA0XSEKKyNlbmRpZgorCisgICAgdnBvcCAgICAgICAgICAgIHtkOC1kMTV9CisgICAgYnggICAgICAgICAgICAgIGxyCisKKyAgICAudW5yZXEgICAgICAgICAgRENUX1RBQkxFCisgICAgLnVucmVxICAgICAgICAgIENPRUZfQkxPQ0sKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQ09MCisgICAgLnVucmVxICAgICAgICAgIFRNUDEKKyAgICAudW5yZXEgICAgICAgICAgVE1QMgorICAgIC51bnJlcSAgICAgICAgICBUTVAzCisgICAgLnVucmVxICAgICAgICAgIFRNUDQKKworLnB1cmdlbSBpZGN0X2hlbHBlcgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2lkY3RfMngyX25lb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGludmVyc2UtRENUIGNvZGUgZm9yIGdldHRpbmcgcmVkdWNlZC1zaXplCisgKiAyeDIgcGl4ZWxzIG91dHB1dCBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suIEl0IHVzZXMgdGhlIHNhbWUgIGNhbGN1bGF0aW9ucworICogYW5kIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGFzIElKRydzIG9yaWdpbmFsICdqcGVnX2lkY3RfMngyJworICogZnVuY3Rpb24gZnJvbSBqcGVnLTZiIChqaWRjdHJlZC5jKS4KKyAqCisgKiBOT1RFOiBqcGVnLTggaGFzIGFuIGltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIDJ4MiBpbnZlcnNlLURDVCwgd2hpY2gKKyAqICAgICAgIHJlcXVpcmVzIG11Y2ggbGVzcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgYW5kIGhlbmNlIHNob3VsZCBiZSBmYXN0ZXIuCisgKiAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBORU9OIG9wdGltaXplZCBmdW5jdGlvbiBpcworICogICAgICAgYml0IGV4YWN0IGNvbXBhdGliaWxpdHkgd2l0aCBqcGVnLTZiLgorICovCisKKy5iYWxpZ24gOAoranNpbWRfaWRjdF8yeDJfbmVvbl9jb25zdHM6CisgIC5zaG9ydCAtRklYXzBfNzIwOTU5ODIyICAvKiBkMFswXSAqLworICAuc2hvcnQgRklYXzBfODUwNDMwMDk1ICAgLyogZDBbMV0gKi8KKyAgLnNob3J0IC1GSVhfMV8yNzI3NTg1ODAgIC8qIGQwWzJdICovCisgIC5zaG9ydCBGSVhfM182MjQ1MDk3ODUgICAvKiBkMFszXSAqLworCisubWFjcm8gaWRjdF9oZWxwZXIgeDQsIHg2LCB4MTAsIHgxMiwgeDE2LCBzaGlmdCwgeTI2LCB5MjcKKyAgICB2c2hsbC5zMTYgICAgICAgcTE0LCBceDQsICMxNQorICAgIHZtdWxsLnMxNiAgICAgICBxMTMsIFx4NiwgZDBbM10KKyAgICB2bWxhbC5zMTYgICAgICAgcTEzLCBceDEwLCBkMFsyXQorICAgIHZtbGFsLnMxNiAgICAgICBxMTMsIFx4MTIsIGQwWzFdCisgICAgdm1sYWwuczE2ICAgICAgIHExMywgXHgxNiwgZDBbMF0KKworICAgIHZhZGQuczMyICAgICAgICBxMTAsIHExNCwgcTEzCisgICAgdnN1Yi5zMzIgICAgICAgIHExNCwgcTE0LCBxMTMKKworICAuaWYgXHNoaWZ0ID4gMTYKKyAgICB2cnNoci5zMzIgICAgICAgcTEwLCBxMTAsICNcc2hpZnQKKyAgICB2cnNoci5zMzIgICAgICAgcTE0LCBxMTQsICNcc2hpZnQKKyAgICB2bW92bi5zMzIgICAgICAgXHkyNiwgcTEwCisgICAgdm1vdm4uczMyICAgICAgIFx5MjcsIHExNAorICAuZWxzZQorICAgIHZyc2hybi5zMzIgICAgICBceTI2LCBxMTAsICNcc2hpZnQKKyAgICB2cnNocm4uczMyICAgICAgXHkyNywgcTE0LCAjXHNoaWZ0CisgIC5lbmRpZgorLmVuZG0KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2lkY3RfMngyX25lb24KKworICAgIERDVF9UQUJMRSAgICAgICAucmVxIHIwCisgICAgQ09FRl9CTE9DSyAgICAgIC5yZXEgcjEKKyAgICBPVVRQVVRfQlVGICAgICAgLnJlcSByMgorICAgIE9VVFBVVF9DT0wgICAgICAucmVxIHIzCisgICAgVE1QMSAgICAgICAgICAgIC5yZXEgcjAKKyAgICBUTVAyICAgICAgICAgICAgLnJlcSBpcAorCisgICAgdnB1c2ggICAgICAgICAgIHtkOC1kMTV9CisKKyAgICAvKiBMb2FkIGNvbnN0YW50cyAqLworICAgIGFkciAgICAgICAgICAgICBUTVAyLCBqc2ltZF9pZGN0XzJ4Ml9uZW9uX2NvbnN0cworICAgIHZsZDEuMTYgICAgICAgICB7ZDB9LCBbVE1QMiwgOjY0XQorCisgICAgLyogTG9hZCBhbGwgQ09FRl9CTE9DSyBpbnRvIE5FT04gcmVnaXN0ZXJzIHdpdGggdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uOgorICAgICAqICAgICAgIDAgMSAyIDMgfCA0IDUgNiA3CisgICAgICogICAgICAtLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgKiAgIDAgfCBkNCAgICAgIHwgZDUKKyAgICAgKiAgIDEgfCBkNiAgICAgIHwgZDcKKyAgICAgKiAgIDIgfCAtICAgICAgIHwgLQorICAgICAqICAgMyB8IGQxMCAgICAgfCBkMTEKKyAgICAgKiAgIDQgfCAtICAgICAgIHwgLQorICAgICAqICAgNSB8IGQxMiAgICAgfCBkMTMKKyAgICAgKiAgIDYgfCAtICAgICAgIHwgLQorICAgICAqICAgNyB8IGQxNiAgICAgfCBkMTcKKyAgICAgKi8KKyAgICB2bGQxLjE2ICAgICAgICAge2Q0LCBkNSwgZDYsIGQ3fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIGFkZCAgICAgICAgICAgICBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QxMCwgZDExfSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIGFkZCAgICAgICAgICAgICBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QxMiwgZDEzfSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIGFkZCAgICAgICAgICAgICBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QxNiwgZDE3fSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorICAgIC8qIERlcXVhbnRpemUgKi8KKyAgICB2bGQxLjE2ICAgICAgICAge2QxOCwgZDE5LCBkMjAsIGQyMX0sIFtEQ1RfVEFCTEUsIDoxMjhdIQorICAgIHZtdWwuczE2ICAgICAgICBxMiwgcTIsIHE5CisgICAgdm11bC5zMTYgICAgICAgIHEzLCBxMywgcTEwCisgICAgYWRkICAgICAgICAgICAgIERDVF9UQUJMRSwgRENUX1RBQkxFLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QyNCwgZDI1fSwgW0RDVF9UQUJMRSwgOjEyOF0hCisgICAgdm11bC5zMTYgICAgICAgIHE1LCBxNSwgcTEyCisgICAgYWRkICAgICAgICAgICAgIERDVF9UQUJMRSwgRENUX1RBQkxFLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QyNiwgZDI3fSwgW0RDVF9UQUJMRSwgOjEyOF0hCisgICAgdm11bC5zMTYgICAgICAgIHE2LCBxNiwgcTEzCisgICAgYWRkICAgICAgICAgICAgIERDVF9UQUJMRSwgRENUX1RBQkxFLCAjMTYKKyAgICB2bGQxLjE2ICAgICAgICAge2QzMCwgZDMxfSwgW0RDVF9UQUJMRSwgOjEyOF0hCisgICAgdm11bC5zMTYgICAgICAgIHE4LCBxOCwgcTE1CisKKyAgICAvKiBQYXNzIDEgKi8KKyNpZiAwCisgICAgaWRjdF9oZWxwZXIgICAgIGQ0LCBkNiwgZDEwLCBkMTIsIGQxNiwgMTMsIGQ0LCBkNgorICAgIHRyYW5zcG9zZV80eDQgICBkNCwgZDYsIGQ4LCBkMTAKKyAgICBpZGN0X2hlbHBlciAgICAgZDUsIGQ3LCBkMTEsIGQxMywgZDE3LCAxMywgZDUsIGQ3CisgICAgdHJhbnNwb3NlXzR4NCAgIGQ1LCBkNywgZDksIGQxMQorI2Vsc2UKKyAgICB2bXVsbC5zMTYgICAgICAgcTEzLCBkNiwgZDBbM10KKyAgICB2bWxhbC5zMTYgICAgICAgcTEzLCBkMTAsIGQwWzJdCisgICAgdm1sYWwuczE2ICAgICAgIHExMywgZDEyLCBkMFsxXQorICAgIHZtbGFsLnMxNiAgICAgICBxMTMsIGQxNiwgZDBbMF0KKyAgICB2bXVsbC5zMTYgICAgICAgcTEyLCBkNywgZDBbM10KKyAgICB2bWxhbC5zMTYgICAgICAgcTEyLCBkMTEsIGQwWzJdCisgICAgdm1sYWwuczE2ICAgICAgIHExMiwgZDEzLCBkMFsxXQorICAgIHZtbGFsLnMxNiAgICAgICBxMTIsIGQxNywgZDBbMF0KKyAgICB2c2hsbC5zMTYgICAgICAgcTE0LCBkNCwgIzE1CisgICAgdnNobGwuczE2ICAgICAgIHExNSwgZDUsICMxNQorICAgIHZhZGQuczMyICAgICAgICBxMTAsIHExNCwgcTEzCisgICAgdnN1Yi5zMzIgICAgICAgIHExNCwgcTE0LCBxMTMKKyAgICB2cnNocm4uczMyICAgICAgZDQsIHExMCwgIzEzCisgICAgdnJzaHJuLnMzMiAgICAgIGQ2LCBxMTQsICMxMworICAgIHZhZGQuczMyICAgICAgICBxMTAsIHExNSwgcTEyCisgICAgdnN1Yi5zMzIgICAgICAgIHExNCwgcTE1LCBxMTIKKyAgICB2cnNocm4uczMyICAgICAgZDUsIHExMCwgIzEzCisgICAgdnJzaHJuLnMzMiAgICAgIGQ3LCBxMTQsICMxMworICAgIHZ0cm4uMTYgICAgICAgICBxMiwgcTMKKyAgICB2dHJuLjMyICAgICAgICAgcTMsIHE1CisjZW5kaWYKKworICAgIC8qIFBhc3MgMiAqLworICAgIGlkY3RfaGVscGVyICAgICBkNCwgZDYsIGQxMCwgZDcsIGQxMSwgMjAsIGQyNiwgZDI3CisKKyAgICAvKiBSYW5nZSBsaW1pdCAqLworICAgIHZtb3YudTE2ICAgICAgICBxMTUsICMweDgwCisgICAgdmFkZC5zMTYgICAgICAgIHExMywgcTEzLCBxMTUKKyAgICB2cW1vdnVuLnMxNiAgICAgZDI2LCBxMTMKKyAgICB2cW1vdnVuLnMxNiAgICAgZDI3LCBxMTMKKworICAgIC8qIFN0b3JlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICBsZG1pYSAgICAgICAgICAgT1VUUFVUX0JVRiwge1RNUDEsIFRNUDJ9CisgICAgYWRkICAgICAgICAgICAgIFRNUDEsIFRNUDEsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgT1VUUFVUX0NPTAorCisgICAgdnN0MS44ICAgICAgICAgIHtkMjZbMF19LCBbVE1QMV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjdbNF19LCBbVE1QMV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjZbMV19LCBbVE1QMl0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjdbNV19LCBbVE1QMl0hCisKKyAgICB2cG9wICAgICAgICAgICAge2Q4LWQxNX0KKyAgICBieCAgICAgICAgICAgICAgbHIKKworICAgIC51bnJlcSAgICAgICAgICBEQ1RfVEFCTEUKKyAgICAudW5yZXEgICAgICAgICAgQ09FRl9CTE9DSworICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQlVGCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9DT0wKKyAgICAudW5yZXEgICAgICAgICAgVE1QMQorICAgIC51bnJlcSAgICAgICAgICBUTVAyCisKKy5wdXJnZW0gaWRjdF9oZWxwZXIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfbmVvbgorICoganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X25lb24KKyAqIGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfbmVvbgorICoganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9uZW9uCisgKiBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X25lb24KKyAqIGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfbmVvbgorICoKKyAqIENvbG9yc3BhY2UgY29udmVyc2lvbiBZQ2JDciAtPiBSR0IKKyAqLworCisKKy5tYWNybyBkb19sb2FkIHNpemUKKyAgLmlmIFxzaXplID09IDgKKyAgICB2bGQxLjggICAgICAgICAge2Q0fSwgW1UsIDo2NF0hCisgICAgdmxkMS44ICAgICAgICAgIHtkNX0sIFtWLCA6NjRdIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDB9LCBbWSwgOjY0XSEKKyAgICBwbGQgICAgICAgICAgICAgW1UsICM2NF0KKyAgICBwbGQgICAgICAgICAgICAgW1YsICM2NF0KKyAgICBwbGQgICAgICAgICAgICAgW1ksICM2NF0KKyAgLmVsc2VpZiBcc2l6ZSA9PSA0CisgICAgdmxkMS44ICAgICAgICAgIHtkNFswXX0sIFtVXSEKKyAgICB2bGQxLjggICAgICAgICAge2Q0WzFdfSwgW1VdIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDRbMl19LCBbVV0hCisgICAgdmxkMS44ICAgICAgICAgIHtkNFszXX0sIFtVXSEKKyAgICB2bGQxLjggICAgICAgICAge2Q1WzBdfSwgW1ZdIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDVbMV19LCBbVl0hCisgICAgdmxkMS44ICAgICAgICAgIHtkNVsyXX0sIFtWXSEKKyAgICB2bGQxLjggICAgICAgICAge2Q1WzNdfSwgW1ZdIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDBbMF19LCBbWV0hCisgICAgdmxkMS44ICAgICAgICAgIHtkMFsxXX0sIFtZXSEKKyAgICB2bGQxLjggICAgICAgICAge2QwWzJdfSwgW1ldIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDBbM119LCBbWV0hCisgIC5lbHNlaWYgXHNpemUgPT0gMgorICAgIHZsZDEuOCAgICAgICAgICB7ZDRbNF19LCBbVV0hCisgICAgdmxkMS44ICAgICAgICAgIHtkNFs1XX0sIFtVXSEKKyAgICB2bGQxLjggICAgICAgICAge2Q1WzRdfSwgW1ZdIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDVbNV19LCBbVl0hCisgICAgdmxkMS44ICAgICAgICAgIHtkMFs0XX0sIFtZXSEKKyAgICB2bGQxLjggICAgICAgICAge2QwWzVdfSwgW1ldIQorICAuZWxzZWlmIFxzaXplID09IDEKKyAgICB2bGQxLjggICAgICAgICAge2Q0WzZdfSwgW1VdIQorICAgIHZsZDEuOCAgICAgICAgICB7ZDVbNl19LCBbVl0hCisgICAgdmxkMS44ICAgICAgICAgIHtkMFs2XX0sIFtZXSEKKyAgLmVsc2UKKyAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgbWFjcm9ibG9jayBzaXplCisgIC5lbmRpZgorLmVuZG0KKworLm1hY3JvIGRvX3N0b3JlIGJwcCwgc2l6ZQorICAuaWYgXGJwcCA9PSAyNAorICAgIC5pZiBcc2l6ZSA9PSA4CisgICAgICB2c3QzLjggICAgICAgIHtkMTAsIGQxMSwgZDEyfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSA0CisgICAgICB2c3QzLjggICAgICAgIHtkMTBbMF0sIGQxMVswXSwgZDEyWzBdfSwgW1JHQl0hCisgICAgICB2c3QzLjggICAgICAgIHtkMTBbMV0sIGQxMVsxXSwgZDEyWzFdfSwgW1JHQl0hCisgICAgICB2c3QzLjggICAgICAgIHtkMTBbMl0sIGQxMVsyXSwgZDEyWzJdfSwgW1JHQl0hCisgICAgICB2c3QzLjggICAgICAgIHtkMTBbM10sIGQxMVszXSwgZDEyWzNdfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAyCisgICAgICB2c3QzLjggICAgICAgIHtkMTBbNF0sIGQxMVs0XSwgZDEyWzRdfSwgW1JHQl0hCisgICAgICB2c3QzLjggICAgICAgIHtkMTBbNV0sIGQxMVs1XSwgZDEyWzVdfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAxCisgICAgICB2c3QzLjggICAgICAgIHtkMTBbNl0sIGQxMVs2XSwgZDEyWzZdfSwgW1JHQl0hCisgICAgLmVsc2UKKyAgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2VpZiBcYnBwID09IDMyCisgICAgLmlmIFxzaXplID09IDgKKyAgICAgIHZzdDQuOCAgICAgICAge2QxMCwgZDExLCBkMTIsIGQxM30sIFtSR0JdIQorICAgIC5lbHNlaWYgXHNpemUgPT0gNAorICAgICAgdnN0NC44ICAgICAgICB7ZDEwWzBdLCBkMTFbMF0sIGQxMlswXSwgZDEzWzBdfSwgW1JHQl0hCisgICAgICB2c3Q0LjggICAgICAgIHtkMTBbMV0sIGQxMVsxXSwgZDEyWzFdLCBkMTNbMV19LCBbUkdCXSEKKyAgICAgIHZzdDQuOCAgICAgICAge2QxMFsyXSwgZDExWzJdLCBkMTJbMl0sIGQxM1syXX0sIFtSR0JdIQorICAgICAgdnN0NC44ICAgICAgICB7ZDEwWzNdLCBkMTFbM10sIGQxMlszXSwgZDEzWzNdfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAyCisgICAgICB2c3Q0LjggICAgICAgIHtkMTBbNF0sIGQxMVs0XSwgZDEyWzRdLCBkMTNbNF19LCBbUkdCXSEKKyAgICAgIHZzdDQuOCAgICAgICAge2QxMFs1XSwgZDExWzVdLCBkMTJbNV0sIGQxM1s1XX0sIFtSR0JdIQorICAgIC5lbHNlaWYgXHNpemUgPT0gMQorICAgICAgdnN0NC44ICAgICAgICB7ZDEwWzZdLCBkMTFbNl0sIGQxMls2XSwgZDEzWzZdfSwgW1JHQl0hCisgICAgLmVsc2UKKyAgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2VpZiBcYnBwID09IDE2CisgICAgLmlmIFxzaXplID09IDgKKyAgICAgIHZzdDEuMTYgICAgICAge3ExNX0sIFtSR0JdIQorICAgIC5lbHNlaWYgXHNpemUgPT0gNAorICAgICAgdnN0MS4xNiAgICAgICB7ZDMwfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAyCisgICAgICB2c3QxLjE2ICAgICAgIHtkMzFbMF19LCBbUkdCXSEKKyAgICAgIHZzdDEuMTYgICAgICAge2QzMVsxXX0sIFtSR0JdIQorICAgIC5lbHNlaWYgXHNpemUgPT0gMQorICAgICAgdnN0MS4xNiAgICAgICB7ZDMxWzJdfSwgW1JHQl0hCisgICAgLmVsc2UKKyAgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2UKKyAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgYnBwCisgIC5lbmRpZgorLmVuZG0KKworLm1hY3JvIGdlbmVyYXRlX2pzaW1kX3ljY19yZ2JfY29udmVydF9uZW9uIGNvbG9yaWQsIGJwcCwgcl9vZmZzLCBnX29mZnMsIGJfb2ZmcworCisvKgorICogMi1zdGFnZSBwaXBlbGluZWQgWUNiQ3ItPlJHQiBjb252ZXJzaW9uCisgKi8KKworLm1hY3JvIGRvX3l1dl90b19yZ2Jfc3RhZ2UxCisgICAgdmFkZHcudTggICAgICAgIHEzLCBxMSwgZDQgICAgICAvKiBxMyA9IHUgLSAxMjggKi8KKyAgICB2YWRkdy51OCAgICAgICAgcTQsIHExLCBkNSAgICAgIC8qIHEyID0gdiAtIDEyOCAqLworICAgIHZtdWxsLnMxNiAgICAgICBxMTAsIGQ2LCBkMVsxXSAgLyogbXVsdGlwbHkgYnkgLTExMjc3ICovCisgICAgdm1sYWwuczE2ICAgICAgIHExMCwgZDgsIGQxWzJdICAvKiBtdWx0aXBseSBieSAtMjM0MDEgKi8KKyAgICB2bXVsbC5zMTYgICAgICAgcTExLCBkNywgZDFbMV0gIC8qIG11bHRpcGx5IGJ5IC0xMTI3NyAqLworICAgIHZtbGFsLnMxNiAgICAgICBxMTEsIGQ5LCBkMVsyXSAgLyogbXVsdGlwbHkgYnkgLTIzNDAxICovCisgICAgdm11bGwuczE2ICAgICAgIHExMiwgZDgsIGQxWzBdICAvKiBtdWx0aXBseSBieSAyMjk3MSAqLworICAgIHZtdWxsLnMxNiAgICAgICBxMTMsIGQ5LCBkMVswXSAgLyogbXVsdGlwbHkgYnkgMjI5NzEgKi8KKyAgICB2bXVsbC5zMTYgICAgICAgcTE0LCBkNiwgZDFbM10gIC8qIG11bHRpcGx5IGJ5IDI5MDMzICovCisgICAgdm11bGwuczE2ICAgICAgIHExNSwgZDcsIGQxWzNdICAvKiBtdWx0aXBseSBieSAyOTAzMyAqLworLmVuZG0KKworLm1hY3JvIGRvX3l1dl90b19yZ2Jfc3RhZ2UyCisgICAgdnJzaHJuLnMzMiAgICAgIGQyMCwgcTEwLCAjMTUKKyAgICB2cnNocm4uczMyICAgICAgZDIxLCBxMTEsICMxNQorICAgIHZyc2hybi5zMzIgICAgICBkMjQsIHExMiwgIzE0CisgICAgdnJzaHJuLnMzMiAgICAgIGQyNSwgcTEzLCAjMTQKKyAgICB2cnNocm4uczMyICAgICAgZDI4LCBxMTQsICMxNAorICAgIHZyc2hybi5zMzIgICAgICBkMjksIHExNSwgIzE0CisgICAgdmFkZHcudTggICAgICAgIHExMSwgcTEwLCBkMAorICAgIHZhZGR3LnU4ICAgICAgICBxMTIsIHExMiwgZDAKKyAgICB2YWRkdy51OCAgICAgICAgcTE0LCBxMTQsIGQwCisgIC5pZiBcYnBwICE9IDE2CisgICAgdnFtb3Z1bi5zMTYgICAgIGQxXGdfb2ZmcywgcTExCisgICAgdnFtb3Z1bi5zMTYgICAgIGQxXHJfb2ZmcywgcTEyCisgICAgdnFtb3Z1bi5zMTYgICAgIGQxXGJfb2ZmcywgcTE0CisgIC5lbHNlICAvKiByZ2I1NjUgKi8KKyAgICB2cXNobHUuczE2ICAgICAgcTEzLCBxMTEsICM4CisgICAgdnFzaGx1LnMxNiAgICAgIHExNSwgcTEyLCAjOAorICAgIHZxc2hsdS5zMTYgICAgICBxMTQsIHExNCwgIzgKKyAgICB2c3JpLnUxNiAgICAgICAgcTE1LCBxMTMsICM1CisgICAgdnNyaS51MTYgICAgICAgIHExNSwgcTE0LCAjMTEKKyAgLmVuZGlmCisuZW5kbQorCisubWFjcm8gZG9feXV2X3RvX3JnYl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJkb195dXZfdG9fcmdiX3N0YWdlMiIgYW5kICJzdG9yZSIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyc2hybi5zMzIgICAgICBkMjAsIHExMCwgIzE1CisgICAgLyogImxvYWQiIGFuZCAiZG9feXV2X3RvX3JnYl9zdGFnZTEiICovCisgICAgcGxkICAgICAgICAgICAgIFtVLCAjNjRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cnNocm4uczMyICAgICAgZDIxLCBxMTEsICMxNQorICAgIHBsZCAgICAgICAgICAgICBbViwgIzY0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJzaHJuLnMzMiAgICAgIGQyNCwgcTEyLCAjMTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyc2hybi5zMzIgICAgICBkMjUsIHExMywgIzE0CisgICAgdmxkMS44ICAgICAgICAgIHtkNH0sIFtVLCA6NjRdIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJzaHJuLnMzMiAgICAgIGQyOCwgcTE0LCAjMTQKKyAgICB2bGQxLjggICAgICAgICAge2Q1fSwgW1YsIDo2NF0hCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cnNocm4uczMyICAgICAgZDI5LCBxMTUsICMxNAorICAgIHZhZGR3LnU4ICAgICAgICBxMywgcTEsIGQ0ICAgICAgLyogcTMgPSB1IC0gMTI4ICovCisgICAgdmFkZHcudTggICAgICAgIHE0LCBxMSwgZDUgICAgICAvKiBxMiA9IHYgLSAxMjggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhZGR3LnU4ICAgICAgICBxMTEsIHExMCwgZDAKKyAgICB2bXVsbC5zMTYgICAgICAgcTEwLCBkNiwgZDFbMV0gIC8qIG11bHRpcGx5IGJ5IC0xMTI3NyAqLworICAgIHZtbGFsLnMxNiAgICAgICBxMTAsIGQ4LCBkMVsyXSAgLyogbXVsdGlwbHkgYnkgLTIzNDAxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWRkdy51OCAgICAgICAgcTEyLCBxMTIsIGQwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWRkdy51OCAgICAgICAgcTE0LCBxMTQsIGQwCisgIC5pZiBcYnBwICE9IDE2ICAvKioqKioqKioqKioqKioqKiByZ2IyNC9yZ2IzMiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cW1vdnVuLnMxNiAgICAgZDFcZ19vZmZzLCBxMTEKKyAgICBwbGQgICAgICAgICAgICAgW1ksICM2NF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZxbW92dW4uczE2ICAgICBkMVxyX29mZnMsIHExMgorICAgIHZsZDEuOCAgICAgICAgICB7ZDB9LCBbWSwgOjY0XSEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZxbW92dW4uczE2ICAgICBkMVxiX29mZnMsIHExNAorICAgIHZtdWxsLnMxNiAgICAgICBxMTEsIGQ3LCBkMVsxXSAgLyogbXVsdGlwbHkgYnkgLTExMjc3ICovCisgICAgdm1sYWwuczE2ICAgICAgIHExMSwgZDksIGQxWzJdICAvKiBtdWx0aXBseSBieSAtMjM0MDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3N0b3JlICAgICAgICBcYnBwLCA4CisgICAgdm11bGwuczE2ICAgICAgIHExMiwgZDgsIGQxWzBdICAvKiBtdWx0aXBseSBieSAyMjk3MSAqLworICAgIHZtdWxsLnMxNiAgICAgICBxMTMsIGQ5LCBkMVswXSAgLyogbXVsdGlwbHkgYnkgMjI5NzEgKi8KKyAgICB2bXVsbC5zMTYgICAgICAgcTE0LCBkNiwgZDFbM10gIC8qIG11bHRpcGx5IGJ5IDI5MDMzICovCisgICAgdm11bGwuczE2ICAgICAgIHExNSwgZDcsIGQxWzNdICAvKiBtdWx0aXBseSBieSAyOTAzMyAqLworICAuZWxzZSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogcmdiNTY1ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnFzaGx1LnMxNiAgICAgIHExMywgcTExLCAjOAorICAgIHBsZCAgICAgICAgICAgICBbWSwgIzY0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnFzaGx1LnMxNiAgICAgIHExNSwgcTEyLCAjOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnFzaGx1LnMxNiAgICAgIHExNCwgcTE0LCAjOAorICAgIHZsZDEuOCAgICAgICAgICB7ZDB9LCBbWSwgOjY0XSEKKyAgICB2bXVsbC5zMTYgICAgICAgcTExLCBkNywgZDFbMV0KKyAgICB2bWxhbC5zMTYgICAgICAgcTExLCBkOSwgZDFbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzcmkudTE2ICAgICAgICBxMTUsIHExMywgIzUKKyAgICB2bXVsbC5zMTYgICAgICAgcTEyLCBkOCwgZDFbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzcmkudTE2ICAgICAgICBxMTUsIHExNCwgIzExCisgICAgdm11bGwuczE2ICAgICAgIHExMywgZDksIGQxWzBdCisgICAgdm11bGwuczE2ICAgICAgIHExNCwgZDYsIGQxWzNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19zdG9yZSAgICAgICAgXGJwcCwgOAorICAgIHZtdWxsLnMxNiAgICAgICBxMTUsIGQ3LCBkMVszXQorICAuZW5kaWYKKy5lbmRtCisKKy5tYWNybyBkb195dXZfdG9fcmdiCisgICAgZG9feXV2X3RvX3JnYl9zdGFnZTEKKyAgICBkb195dXZfdG9fcmdiX3N0YWdlMgorLmVuZG0KKworLyogQXBwbGUgZ2FzIGNyYXNoZXMgb24gYWRybCwgd29yayBhcm91bmQgdGhhdCBieSB1c2luZyBhZHIuCisgKiBCdXQgdGhpcyByZXF1aXJlcyBhIGNvcHkgb2YgdGhlc2UgY29uc3RhbnRzIGZvciBlYWNoIGZ1bmN0aW9uLgorICovCisKKy5iYWxpZ24gMTYKK2pzaW1kX3ljY19cY29sb3JpZFwoKV9uZW9uX2NvbnN0czoKKyAgLnNob3J0IDAsICAgICAgMCwgICAgIDAsICAgICAgMAorICAuc2hvcnQgMjI5NzEsIC0xMTI3NywgLTIzNDAxLCAyOTAzMworICAuc2hvcnQgLTEyOCwgIC0xMjgsICAgLTEyOCwgICAtMTI4CisgIC5zaG9ydCAtMTI4LCAgLTEyOCwgICAtMTI4LCAgIC0xMjgKKworYXNtX2Z1bmN0aW9uIGpzaW1kX3ljY19cY29sb3JpZFwoKV9jb252ZXJ0X25lb24KKyAgICBPVVRQVVRfV0lEVEggICAgLnJlcSByMAorICAgIElOUFVUX0JVRiAgICAgICAucmVxIHIxCisgICAgSU5QVVRfUk9XICAgICAgIC5yZXEgcjIKKyAgICBPVVRQVVRfQlVGICAgICAgLnJlcSByMworICAgIE5VTV9ST1dTICAgICAgICAucmVxIHI0CisKKyAgICBJTlBVVF9CVUYwICAgICAgLnJlcSByNQorICAgIElOUFVUX0JVRjEgICAgICAucmVxIHI2CisgICAgSU5QVVRfQlVGMiAgICAgIC5yZXEgSU5QVVRfQlVGCisKKyAgICBSR0IgICAgICAgICAgICAgLnJlcSByNworICAgIFkgICAgICAgICAgICAgICAucmVxIHI4CisgICAgVSAgICAgICAgICAgICAgIC5yZXEgcjkKKyAgICBWICAgICAgICAgICAgICAgLnJlcSByMTAKKyAgICBOICAgICAgICAgICAgICAgLnJlcSBpcAorCisgICAgLyogTG9hZCBjb25zdGFudHMgdG8gZDEsIGQyLCBkMyAoZDAgaXMganVzdCB1c2VkIGZvciBwYWRkaW5nKSAqLworICAgIGFkciAgICAgICAgICAgICBpcCwganNpbWRfeWNjX1xjb2xvcmlkXCgpX25lb25fY29uc3RzCisgICAgdmxkMS4xNiAgICAgICAgIHtkMCwgZDEsIGQyLCBkM30sIFtpcCwgOjEyOF0KKworICAgIC8qIFNhdmUgQVJNIHJlZ2lzdGVycyBhbmQgaGFuZGxlIGlucHV0IGFyZ3VtZW50cyAqLworICAgIHB1c2ggICAgICAgICAgICB7cjQsIHI1LCByNiwgcjcsIHI4LCByOSwgcjEwLCBscn0KKyAgICBsZHIgICAgICAgICAgICAgTlVNX1JPV1MsIFtzcCwgIyg0ICogOCldCisgICAgbGRyICAgICAgICAgICAgIElOUFVUX0JVRjAsIFtJTlBVVF9CVUZdCisgICAgbGRyICAgICAgICAgICAgIElOUFVUX0JVRjEsIFtJTlBVVF9CVUYsICM0XQorICAgIGxkciAgICAgICAgICAgICBJTlBVVF9CVUYyLCBbSU5QVVRfQlVGLCAjOF0KKyAgICAudW5yZXEgICAgICAgICAgSU5QVVRfQlVGCisKKyAgICAvKiBTYXZlIE5FT04gcmVnaXN0ZXJzICovCisgICAgdnB1c2ggICAgICAgICAgIHtkOC1kMTV9CisKKyAgICAvKiBJbml0aWFsbHkgc2V0IGQxMCwgZDExLCBkMTIsIGQxMyB0byAweEZGICovCisgICAgdm1vdi51OCAgICAgICAgIHE1LCAjMjU1CisgICAgdm1vdi51OCAgICAgICAgIHE2LCAjMjU1CisKKyAgICAvKiBPdXRlciBsb29wIG92ZXIgc2NhbmxpbmVzICovCisgICAgY21wICAgICAgICAgICAgIE5VTV9ST1dTLCAjMQorICAgIGJsdCAgICAgICAgICAgICA5ZgorMDoKKyAgICBsZHIgICAgICAgICAgICAgWSwgW0lOUFVUX0JVRjAsIElOUFVUX1JPVywgbHNsICMyXQorICAgIGxkciAgICAgICAgICAgICBVLCBbSU5QVVRfQlVGMSwgSU5QVVRfUk9XLCBsc2wgIzJdCisgICAgbW92ICAgICAgICAgICAgIE4sIE9VVFBVVF9XSURUSAorICAgIGxkciAgICAgICAgICAgICBWLCBbSU5QVVRfQlVGMiwgSU5QVVRfUk9XLCBsc2wgIzJdCisgICAgYWRkICAgICAgICAgICAgIElOUFVUX1JPVywgSU5QVVRfUk9XLCAjMQorICAgIGxkciAgICAgICAgICAgICBSR0IsIFtPVVRQVVRfQlVGXSwgIzQKKworICAgIC8qIElubmVyIGxvb3Agb3ZlciBwaXhlbHMgKi8KKyAgICBzdWJzICAgICAgICAgICAgTiwgTiwgIzgKKyAgICBibHQgICAgICAgICAgICAgM2YKKyAgICBkb19sb2FkICAgICAgICAgOAorICAgIGRvX3l1dl90b19yZ2Jfc3RhZ2UxCisgICAgc3VicyAgICAgICAgICAgIE4sIE4sICM4CisgICAgYmx0ICAgICAgICAgICAgIDJmCisxOgorICAgIGRvX3l1dl90b19yZ2Jfc3RhZ2UyX3N0b3JlX2xvYWRfc3RhZ2UxCisgICAgc3VicyAgICAgICAgICAgIE4sIE4sICM4CisgICAgYmdlICAgICAgICAgICAgIDFiCisyOgorICAgIGRvX3l1dl90b19yZ2Jfc3RhZ2UyCisgICAgZG9fc3RvcmUgICAgICAgIFxicHAsIDgKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzcKKyAgICBiZXEgICAgICAgICAgICAgOGYKKzM6CisgICAgdHN0ICAgICAgICAgICAgIE4sICM0CisgICAgYmVxICAgICAgICAgICAgIDNmCisgICAgZG9fbG9hZCAgICAgICAgIDQKKzM6CisgICAgdHN0ICAgICAgICAgICAgIE4sICMyCisgICAgYmVxICAgICAgICAgICAgIDRmCisgICAgZG9fbG9hZCAgICAgICAgIDIKKzQ6CisgICAgdHN0ICAgICAgICAgICAgIE4sICMxCisgICAgYmVxICAgICAgICAgICAgIDVmCisgICAgZG9fbG9hZCAgICAgICAgIDEKKzU6CisgICAgZG9feXV2X3RvX3JnYgorICAgIHRzdCAgICAgICAgICAgICBOLCAjNAorICAgIGJlcSAgICAgICAgICAgICA2ZgorICAgIGRvX3N0b3JlICAgICAgICBcYnBwLCA0Cis2OgorICAgIHRzdCAgICAgICAgICAgICBOLCAjMgorICAgIGJlcSAgICAgICAgICAgICA3ZgorICAgIGRvX3N0b3JlICAgICAgICBcYnBwLCAyCis3OgorICAgIHRzdCAgICAgICAgICAgICBOLCAjMQorICAgIGJlcSAgICAgICAgICAgICA4ZgorICAgIGRvX3N0b3JlICAgICAgICBcYnBwLCAxCis4OgorICAgIHN1YnMgICAgICAgICAgICBOVU1fUk9XUywgTlVNX1JPV1MsICMxCisgICAgYmd0ICAgICAgICAgICAgIDBiCis5OgorICAgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgdnBvcCAgICAgICAgICAgIHtkOC1kMTV9CisgICAgcG9wICAgICAgICAgICAgIHtyNCwgcjUsIHI2LCByNywgcjgsIHI5LCByMTAsIHBjfQorCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9XSURUSAorICAgIC51bnJlcSAgICAgICAgICBJTlBVVF9ST1cKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBOVU1fUk9XUworICAgIC51bnJlcSAgICAgICAgICBJTlBVVF9CVUYwCisgICAgLnVucmVxICAgICAgICAgIElOUFVUX0JVRjEKKyAgICAudW5yZXEgICAgICAgICAgSU5QVVRfQlVGMgorICAgIC51bnJlcSAgICAgICAgICBSR0IKKyAgICAudW5yZXEgICAgICAgICAgWQorICAgIC51bnJlcSAgICAgICAgICBVCisgICAgLnVucmVxICAgICAgICAgIFYKKyAgICAudW5yZXEgICAgICAgICAgTgorCisucHVyZ2VtIGRvX3l1dl90b19yZ2IKKy5wdXJnZW0gZG9feXV2X3RvX3JnYl9zdGFnZTEKKy5wdXJnZW0gZG9feXV2X3RvX3JnYl9zdGFnZTIKKy5wdXJnZW0gZG9feXV2X3RvX3JnYl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEKKworLmVuZG0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaWQgLS0tLS0gYnBwIFIgIEcgIEIgKi8KK2dlbmVyYXRlX2pzaW1kX3ljY19yZ2JfY29udmVydF9uZW9uIGV4dHJnYiwgIDI0LCAwLCAxLCAyCitnZW5lcmF0ZV9qc2ltZF95Y2NfcmdiX2NvbnZlcnRfbmVvbiBleHRiZ3IsICAyNCwgMiwgMSwgMAorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0cmdieCwgMzIsIDAsIDEsIDIKK2dlbmVyYXRlX2pzaW1kX3ljY19yZ2JfY29udmVydF9uZW9uIGV4dGJncngsIDMyLCAyLCAxLCAwCitnZW5lcmF0ZV9qc2ltZF95Y2NfcmdiX2NvbnZlcnRfbmVvbiBleHR4YmdyLCAzMiwgMywgMiwgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0eHJnYiwgMzIsIDEsIDIsIDMKK2dlbmVyYXRlX2pzaW1kX3ljY19yZ2JfY29udmVydF9uZW9uIHJnYjU2NSwgIDE2LCAwLCAwLCAwCisKKy5wdXJnZW0gZG9fbG9hZAorLnB1cmdlbSBkb19zdG9yZQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9uZW9uCisgKiBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbmVvbgorICoganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9uZW9uCisgKiBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X25lb24KKyAqIGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfbmVvbgorICoganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9uZW9uCisgKgorICogQ29sb3JzcGFjZSBjb252ZXJzaW9uIFJHQiAtPiBZQ2JDcgorICovCisKKy5tYWNybyBkb19zdG9yZSBzaXplCisgIC5pZiBcc2l6ZSA9PSA4CisgICAgdnN0MS44ICAgICAgICAgIHtkMjB9LCBbWV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjF9LCBbVV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjJ9LCBbVl0hCisgIC5lbHNlaWYgXHNpemUgPT0gNAorICAgIHZzdDEuOCAgICAgICAgICB7ZDIwWzBdfSwgW1ldIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIwWzFdfSwgW1ldIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIwWzJdfSwgW1ldIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIwWzNdfSwgW1ldIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIxWzBdfSwgW1VdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIxWzFdfSwgW1VdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIxWzJdfSwgW1VdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIxWzNdfSwgW1VdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIyWzBdfSwgW1ZdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIyWzFdfSwgW1ZdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIyWzJdfSwgW1ZdIQorICAgIHZzdDEuOCAgICAgICAgICB7ZDIyWzNdfSwgW1ZdIQorICAuZWxzZWlmIFxzaXplID09IDIKKyAgICB2c3QxLjggICAgICAgICAge2QyMFs0XX0sIFtZXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyMFs1XX0sIFtZXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyMVs0XX0sIFtVXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyMVs1XX0sIFtVXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyMls0XX0sIFtWXSEKKyAgICB2c3QxLjggICAgICAgICAge2QyMls1XX0sIFtWXSEKKyAgLmVsc2VpZiBcc2l6ZSA9PSAxCisgICAgdnN0MS44ICAgICAgICAgIHtkMjBbNl19LCBbWV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjFbNl19LCBbVV0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMjJbNl19LCBbVl0hCisgIC5lbHNlCisgICAgLmVycm9yIHVuc3VwcG9ydGVkIG1hY3JvYmxvY2sgc2l6ZQorICAuZW5kaWYKKy5lbmRtCisKKy5tYWNybyBkb19sb2FkIGJwcCwgc2l6ZQorICAuaWYgXGJwcCA9PSAyNAorICAgIC5pZiBcc2l6ZSA9PSA4CisgICAgICB2bGQzLjggICAgICAgIHtkMTAsIGQxMSwgZDEyfSwgW1JHQl0hCisgICAgICBwbGQgICAgICAgICAgIFtSR0IsICMxMjhdCisgICAgLmVsc2VpZiBcc2l6ZSA9PSA0CisgICAgICB2bGQzLjggICAgICAgIHtkMTBbMF0sIGQxMVswXSwgZDEyWzBdfSwgW1JHQl0hCisgICAgICB2bGQzLjggICAgICAgIHtkMTBbMV0sIGQxMVsxXSwgZDEyWzFdfSwgW1JHQl0hCisgICAgICB2bGQzLjggICAgICAgIHtkMTBbMl0sIGQxMVsyXSwgZDEyWzJdfSwgW1JHQl0hCisgICAgICB2bGQzLjggICAgICAgIHtkMTBbM10sIGQxMVszXSwgZDEyWzNdfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAyCisgICAgICB2bGQzLjggICAgICAgIHtkMTBbNF0sIGQxMVs0XSwgZDEyWzRdfSwgW1JHQl0hCisgICAgICB2bGQzLjggICAgICAgIHtkMTBbNV0sIGQxMVs1XSwgZDEyWzVdfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAxCisgICAgICB2bGQzLjggICAgICAgIHtkMTBbNl0sIGQxMVs2XSwgZDEyWzZdfSwgW1JHQl0hCisgICAgLmVsc2UKKyAgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2VpZiBcYnBwID09IDMyCisgICAgLmlmIFxzaXplID09IDgKKyAgICAgIHZsZDQuOCAgICAgICAge2QxMCwgZDExLCBkMTIsIGQxM30sIFtSR0JdIQorICAgICAgcGxkICAgICAgICAgICBbUkdCLCAjMTI4XQorICAgIC5lbHNlaWYgXHNpemUgPT0gNAorICAgICAgdmxkNC44ICAgICAgICB7ZDEwWzBdLCBkMTFbMF0sIGQxMlswXSwgZDEzWzBdfSwgW1JHQl0hCisgICAgICB2bGQ0LjggICAgICAgIHtkMTBbMV0sIGQxMVsxXSwgZDEyWzFdLCBkMTNbMV19LCBbUkdCXSEKKyAgICAgIHZsZDQuOCAgICAgICAge2QxMFsyXSwgZDExWzJdLCBkMTJbMl0sIGQxM1syXX0sIFtSR0JdIQorICAgICAgdmxkNC44ICAgICAgICB7ZDEwWzNdLCBkMTFbM10sIGQxMlszXSwgZDEzWzNdfSwgW1JHQl0hCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAyCisgICAgICB2bGQ0LjggICAgICAgIHtkMTBbNF0sIGQxMVs0XSwgZDEyWzRdLCBkMTNbNF19LCBbUkdCXSEKKyAgICAgIHZsZDQuOCAgICAgICAge2QxMFs1XSwgZDExWzVdLCBkMTJbNV0sIGQxM1s1XX0sIFtSR0JdIQorICAgIC5lbHNlaWYgXHNpemUgPT0gMQorICAgICAgdmxkNC44ICAgICAgICB7ZDEwWzZdLCBkMTFbNl0sIGQxMls2XSwgZDEzWzZdfSwgW1JHQl0hCisgICAgLmVsc2UKKyAgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2UKKyAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgYnBwCisgIC5lbmRpZgorLmVuZG0KKworLm1hY3JvIGdlbmVyYXRlX2pzaW1kX3JnYl95Y2NfY29udmVydF9uZW9uIGNvbG9yaWQsIGJwcCwgcl9vZmZzLCBnX29mZnMsIGJfb2ZmcworCisvKgorICogMi1zdGFnZSBwaXBlbGluZWQgUkdCLT5ZQ2JDciBjb252ZXJzaW9uCisgKi8KKworLm1hY3JvIGRvX3JnYl90b195dXZfc3RhZ2UxCisgICAgdm1vdmwudTggICAgICAgIHEyLCBkMVxyX29mZnMgIC8qIHIgPSB7IGQ0LCBkNSB9ICovCisgICAgdm1vdmwudTggICAgICAgIHEzLCBkMVxnX29mZnMgIC8qIGcgPSB7IGQ2LCBkNyB9ICovCisgICAgdm1vdmwudTggICAgICAgIHE0LCBkMVxiX29mZnMgIC8qIGIgPSB7IGQ4LCBkOSB9ICovCisgICAgdm11bGwudTE2ICAgICAgIHE3LCBkNCwgZDBbMF0KKyAgICB2bWxhbC51MTYgICAgICAgcTcsIGQ2LCBkMFsxXQorICAgIHZtbGFsLnUxNiAgICAgICBxNywgZDgsIGQwWzJdCisgICAgdm11bGwudTE2ICAgICAgIHE4LCBkNSwgZDBbMF0KKyAgICB2bWxhbC51MTYgICAgICAgcTgsIGQ3LCBkMFsxXQorICAgIHZtbGFsLnUxNiAgICAgICBxOCwgZDksIGQwWzJdCisgICAgdnJldjY0LjMyICAgICAgIHE5LCBxMQorICAgIHZyZXY2NC4zMiAgICAgICBxMTMsIHExCisgICAgdm1sc2wudTE2ICAgICAgIHE5LCBkNCwgZDBbM10KKyAgICB2bWxzbC51MTYgICAgICAgcTksIGQ2LCBkMVswXQorICAgIHZtbGFsLnUxNiAgICAgICBxOSwgZDgsIGQxWzFdCisgICAgdm1sc2wudTE2ICAgICAgIHExMywgZDUsIGQwWzNdCisgICAgdm1sc2wudTE2ICAgICAgIHExMywgZDcsIGQxWzBdCisgICAgdm1sYWwudTE2ICAgICAgIHExMywgZDksIGQxWzFdCisgICAgdnJldjY0LjMyICAgICAgIHExNCwgcTEKKyAgICB2cmV2NjQuMzIgICAgICAgcTE1LCBxMQorICAgIHZtbGFsLnUxNiAgICAgICBxMTQsIGQ0LCBkMVsxXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTQsIGQ2LCBkMVsyXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTQsIGQ4LCBkMVszXQorICAgIHZtbGFsLnUxNiAgICAgICBxMTUsIGQ1LCBkMVsxXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTUsIGQ3LCBkMVsyXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTUsIGQ5LCBkMVszXQorLmVuZG0KKworLm1hY3JvIGRvX3JnYl90b195dXZfc3RhZ2UyCisgICAgdnJzaHJuLnUzMiAgICAgIGQyMCwgcTcsICMxNgorICAgIHZyc2hybi51MzIgICAgICBkMjEsIHE4LCAjMTYKKyAgICB2c2hybi51MzIgICAgICAgZDIyLCBxOSwgIzE2CisgICAgdnNocm4udTMyICAgICAgIGQyMywgcTEzLCAjMTYKKyAgICB2c2hybi51MzIgICAgICAgZDI0LCBxMTQsICMxNgorICAgIHZzaHJuLnUzMiAgICAgICBkMjUsIHExNSwgIzE2CisgICAgdm1vdm4udTE2ICAgICAgIGQyMCwgcTEwICAgICAgIC8qIGQyMCA9IHkgKi8KKyAgICB2bW92bi51MTYgICAgICAgZDIxLCBxMTEgICAgICAgLyogZDIxID0gdSAqLworICAgIHZtb3ZuLnUxNiAgICAgICBkMjIsIHExMiAgICAgICAvKiBkMjIgPSB2ICovCisuZW5kbQorCisubWFjcm8gZG9fcmdiX3RvX3l1dgorICAgIGRvX3JnYl90b195dXZfc3RhZ2UxCisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTIKKy5lbmRtCisKKy5tYWNybyBkb19yZ2JfdG9feXV2X3N0YWdlMl9zdG9yZV9sb2FkX3N0YWdlMQorICAgICAgdnJzaHJuLnUzMiAgICAgIGQyMCwgcTcsICMxNgorICAgICAgdnJzaHJuLnUzMiAgICAgIGQyMSwgcTgsICMxNgorICAgICAgdnNocm4udTMyICAgICAgIGQyMiwgcTksICMxNgorICAgIHZyZXY2NC4zMiAgICAgICBxOSwgcTEKKyAgICAgIHZzaHJuLnUzMiAgICAgICBkMjMsIHExMywgIzE2CisgICAgdnJldjY0LjMyICAgICAgIHExMywgcTEKKyAgICAgIHZzaHJuLnUzMiAgICAgICBkMjQsIHExNCwgIzE2CisgICAgICB2c2hybi51MzIgICAgICAgZDI1LCBxMTUsICMxNgorICAgIGRvX2xvYWQgICAgICAgICBcYnBwLCA4CisgICAgICB2bW92bi51MTYgICAgICAgZDIwLCBxMTAgICAgIC8qIGQyMCA9IHkgKi8KKyAgICB2bW92bC51OCAgICAgICAgcTIsIGQxXHJfb2ZmcyAgLyogciA9IHsgZDQsIGQ1IH0gKi8KKyAgICAgIHZtb3ZuLnUxNiAgICAgICBkMjEsIHExMSAgICAgLyogZDIxID0gdSAqLworICAgIHZtb3ZsLnU4ICAgICAgICBxMywgZDFcZ19vZmZzICAvKiBnID0geyBkNiwgZDcgfSAqLworICAgICAgdm1vdm4udTE2ICAgICAgIGQyMiwgcTEyICAgICAvKiBkMjIgPSB2ICovCisgICAgdm1vdmwudTggICAgICAgIHE0LCBkMVxiX29mZnMgIC8qIGIgPSB7IGQ4LCBkOSB9ICovCisgICAgdm11bGwudTE2ICAgICAgIHE3LCBkNCwgZDBbMF0KKyAgICB2bWxhbC51MTYgICAgICAgcTcsIGQ2LCBkMFsxXQorICAgIHZtbGFsLnUxNiAgICAgICBxNywgZDgsIGQwWzJdCisgICAgICB2c3QxLjggICAgICAgICAge2QyMH0sIFtZXSEKKyAgICB2bXVsbC51MTYgICAgICAgcTgsIGQ1LCBkMFswXQorICAgIHZtbGFsLnUxNiAgICAgICBxOCwgZDcsIGQwWzFdCisgICAgdm1sYWwudTE2ICAgICAgIHE4LCBkOSwgZDBbMl0KKyAgICB2bWxzbC51MTYgICAgICAgcTksIGQ0LCBkMFszXQorICAgIHZtbHNsLnUxNiAgICAgICBxOSwgZDYsIGQxWzBdCisgICAgdm1sYWwudTE2ICAgICAgIHE5LCBkOCwgZDFbMV0KKyAgICAgIHZzdDEuOCAgICAgICAgICB7ZDIxfSwgW1VdIQorICAgIHZtbHNsLnUxNiAgICAgICBxMTMsIGQ1LCBkMFszXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTMsIGQ3LCBkMVswXQorICAgIHZtbGFsLnUxNiAgICAgICBxMTMsIGQ5LCBkMVsxXQorICAgIHZyZXY2NC4zMiAgICAgICBxMTQsIHExCisgICAgdnJldjY0LjMyICAgICAgIHExNSwgcTEKKyAgICB2bWxhbC51MTYgICAgICAgcTE0LCBkNCwgZDFbMV0KKyAgICB2bWxzbC51MTYgICAgICAgcTE0LCBkNiwgZDFbMl0KKyAgICB2bWxzbC51MTYgICAgICAgcTE0LCBkOCwgZDFbM10KKyAgICAgIHZzdDEuOCAgICAgICAgICB7ZDIyfSwgW1ZdIQorICAgIHZtbGFsLnUxNiAgICAgICBxMTUsIGQ1LCBkMVsxXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTUsIGQ3LCBkMVsyXQorICAgIHZtbHNsLnUxNiAgICAgICBxMTUsIGQ5LCBkMVszXQorLmVuZG0KKworLmJhbGlnbiAxNgoranNpbWRfXGNvbG9yaWRcKClfeWNjX25lb25fY29uc3RzOgorICAuc2hvcnQgMTk1OTUsIDM4NDcwLCA3NDcxLCAgMTEwNTkKKyAgLnNob3J0IDIxNzA5LCAzMjc2OCwgMjc0MzksIDUzMjkKKyAgLnNob3J0IDMyNzY3LCAxMjgsICAgMzI3NjcsIDEyOAorICAuc2hvcnQgMzI3NjcsIDEyOCwgICAzMjc2NywgMTI4CisKK2FzbV9mdW5jdGlvbiBqc2ltZF9cY29sb3JpZFwoKV95Y2NfY29udmVydF9uZW9uCisgICAgT1VUUFVUX1dJRFRIICAgIC5yZXEgcjAKKyAgICBJTlBVVF9CVUYgICAgICAgLnJlcSByMQorICAgIE9VVFBVVF9CVUYgICAgICAucmVxIHIyCisgICAgT1VUUFVUX1JPVyAgICAgIC5yZXEgcjMKKyAgICBOVU1fUk9XUyAgICAgICAgLnJlcSByNAorCisgICAgT1VUUFVUX0JVRjAgICAgIC5yZXEgcjUKKyAgICBPVVRQVVRfQlVGMSAgICAgLnJlcSByNgorICAgIE9VVFBVVF9CVUYyICAgICAucmVxIE9VVFBVVF9CVUYKKworICAgIFJHQiAgICAgICAgICAgICAucmVxIHI3CisgICAgWSAgICAgICAgICAgICAgIC5yZXEgcjgKKyAgICBVICAgICAgICAgICAgICAgLnJlcSByOQorICAgIFYgICAgICAgICAgICAgICAucmVxIHIxMAorICAgIE4gICAgICAgICAgICAgICAucmVxIGlwCisKKyAgICAvKiBMb2FkIGNvbnN0YW50cyB0byBkMCwgZDEsIGQyLCBkMyAqLworICAgIGFkciAgICAgICAgICAgICBpcCwganNpbWRfXGNvbG9yaWRcKClfeWNjX25lb25fY29uc3RzCisgICAgdmxkMS4xNiAgICAgICAgIHtkMCwgZDEsIGQyLCBkM30sIFtpcCwgOjEyOF0KKworICAgIC8qIFNhdmUgQVJNIHJlZ2lzdGVycyBhbmQgaGFuZGxlIGlucHV0IGFyZ3VtZW50cyAqLworICAgIHB1c2ggICAgICAgICAgICB7cjQsIHI1LCByNiwgcjcsIHI4LCByOSwgcjEwLCBscn0KKyAgICBsZHIgICAgICAgICAgICAgTlVNX1JPV1MsIFtzcCwgIyg0ICogOCldCisgICAgbGRyICAgICAgICAgICAgIE9VVFBVVF9CVUYwLCBbT1VUUFVUX0JVRl0KKyAgICBsZHIgICAgICAgICAgICAgT1VUUFVUX0JVRjEsIFtPVVRQVVRfQlVGLCAjNF0KKyAgICBsZHIgICAgICAgICAgICAgT1VUUFVUX0JVRjIsIFtPVVRQVVRfQlVGLCAjOF0KKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorCisgICAgLyogU2F2ZSBORU9OIHJlZ2lzdGVycyAqLworICAgIHZwdXNoICAgICAgICAgICB7ZDgtZDE1fQorCisgICAgLyogT3V0ZXIgbG9vcCBvdmVyIHNjYW5saW5lcyAqLworICAgIGNtcCAgICAgICAgICAgICBOVU1fUk9XUywgIzEKKyAgICBibHQgICAgICAgICAgICAgOWYKKzA6CisgICAgbGRyICAgICAgICAgICAgIFksIFtPVVRQVVRfQlVGMCwgT1VUUFVUX1JPVywgbHNsICMyXQorICAgIGxkciAgICAgICAgICAgICBVLCBbT1VUUFVUX0JVRjEsIE9VVFBVVF9ST1csIGxzbCAjMl0KKyAgICBtb3YgICAgICAgICAgICAgTiwgT1VUUFVUX1dJRFRICisgICAgbGRyICAgICAgICAgICAgIFYsIFtPVVRQVVRfQlVGMiwgT1VUUFVUX1JPVywgbHNsICMyXQorICAgIGFkZCAgICAgICAgICAgICBPVVRQVVRfUk9XLCBPVVRQVVRfUk9XLCAjMQorICAgIGxkciAgICAgICAgICAgICBSR0IsIFtJTlBVVF9CVUZdLCAjNAorCisgICAgLyogSW5uZXIgbG9vcCBvdmVyIHBpeGVscyAqLworICAgIHN1YnMgICAgICAgICAgICBOLCBOLCAjOAorICAgIGJsdCAgICAgICAgICAgICAzZgorICAgIGRvX2xvYWQgICAgICAgICBcYnBwLCA4CisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTEKKyAgICBzdWJzICAgICAgICAgICAgTiwgTiwgIzgKKyAgICBibHQgICAgICAgICAgICAgMmYKKzE6CisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEKKyAgICBzdWJzICAgICAgICAgICAgTiwgTiwgIzgKKyAgICBiZ2UgICAgICAgICAgICAgMWIKKzI6CisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTIKKyAgICBkb19zdG9yZSAgICAgICAgOAorICAgIHRzdCAgICAgICAgICAgICBOLCAjNworICAgIGJlcSAgICAgICAgICAgICA4ZgorMzoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzQKKyAgICBiZXEgICAgICAgICAgICAgM2YKKyAgICBkb19sb2FkICAgICAgICAgXGJwcCwgNAorMzoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzIKKyAgICBiZXEgICAgICAgICAgICAgNGYKKyAgICBkb19sb2FkICAgICAgICAgXGJwcCwgMgorNDoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzEKKyAgICBiZXEgICAgICAgICAgICAgNWYKKyAgICBkb19sb2FkICAgICAgICAgXGJwcCwgMQorNToKKyAgICBkb19yZ2JfdG9feXV2CisgICAgdHN0ICAgICAgICAgICAgIE4sICM0CisgICAgYmVxICAgICAgICAgICAgIDZmCisgICAgZG9fc3RvcmUgICAgICAgIDQKKzY6CisgICAgdHN0ICAgICAgICAgICAgIE4sICMyCisgICAgYmVxICAgICAgICAgICAgIDdmCisgICAgZG9fc3RvcmUgICAgICAgIDIKKzc6CisgICAgdHN0ICAgICAgICAgICAgIE4sICMxCisgICAgYmVxICAgICAgICAgICAgIDhmCisgICAgZG9fc3RvcmUgICAgICAgIDEKKzg6CisgICAgc3VicyAgICAgICAgICAgIE5VTV9ST1dTLCBOVU1fUk9XUywgIzEKKyAgICBiZ3QgICAgICAgICAgICAgMGIKKzk6CisgICAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KKyAgICB2cG9wICAgICAgICAgICAge2Q4LWQxNX0KKyAgICBwb3AgICAgICAgICAgICAge3I0LCByNSwgcjYsIHI3LCByOCwgcjksIHIxMCwgcGN9CisKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX1dJRFRICisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9ST1cKKyAgICAudW5yZXEgICAgICAgICAgSU5QVVRfQlVGCisgICAgLnVucmVxICAgICAgICAgIE5VTV9ST1dTCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9CVUYwCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9CVUYxCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9CVUYyCisgICAgLnVucmVxICAgICAgICAgIFJHQgorICAgIC51bnJlcSAgICAgICAgICBZCisgICAgLnVucmVxICAgICAgICAgIFUKKyAgICAudW5yZXEgICAgICAgICAgVgorICAgIC51bnJlcSAgICAgICAgICBOCisKKy5wdXJnZW0gZG9fcmdiX3RvX3l1dgorLnB1cmdlbSBkb19yZ2JfdG9feXV2X3N0YWdlMQorLnB1cmdlbSBkb19yZ2JfdG9feXV2X3N0YWdlMgorLnB1cmdlbSBkb19yZ2JfdG9feXV2X3N0YWdlMl9zdG9yZV9sb2FkX3N0YWdlMQorCisuZW5kbQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpZCAtLS0tLSBicHAgUiAgRyAgQiAqLworZ2VuZXJhdGVfanNpbWRfcmdiX3ljY19jb252ZXJ0X25lb24gZXh0cmdiLCAgMjQsIDAsIDEsIDIKK2dlbmVyYXRlX2pzaW1kX3JnYl95Y2NfY29udmVydF9uZW9uIGV4dGJnciwgIDI0LCAyLCAxLCAwCitnZW5lcmF0ZV9qc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbiBleHRyZ2J4LCAzMiwgMCwgMSwgMgorZ2VuZXJhdGVfanNpbWRfcmdiX3ljY19jb252ZXJ0X25lb24gZXh0YmdyeCwgMzIsIDIsIDEsIDAKK2dlbmVyYXRlX2pzaW1kX3JnYl95Y2NfY29udmVydF9uZW9uIGV4dHhiZ3IsIDMyLCAzLCAyLCAxCitnZW5lcmF0ZV9qc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbiBleHR4cmdiLCAzMiwgMSwgMiwgMworCisucHVyZ2VtIGRvX2xvYWQKKy5wdXJnZW0gZG9fc3RvcmUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgorICoKKyAqIFRPRE86IGNhbiBiZSBjb21iaW5lZCB3aXRoICdqc2ltZF9mZGN0X2lmYXN0X25lb24nIHRvIGdldAorICogICAgICAgcmlkIG9mIFZTVDEuMTYgaW5zdHJ1Y3Rpb25zCisgKi8KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2NvbnZzYW1wX25lb24KKyAgICBTQU1QTEVfREFUQSAgICAgLnJlcSByMAorICAgIFNUQVJUX0NPTCAgICAgICAucmVxIHIxCisgICAgV09SS1NQQUNFICAgICAgIC5yZXEgcjIKKyAgICBUTVAxICAgICAgICAgICAgLnJlcSByMworICAgIFRNUDIgICAgICAgICAgICAucmVxIHI0CisgICAgVE1QMyAgICAgICAgICAgIC5yZXEgcjUKKyAgICBUTVA0ICAgICAgICAgICAgLnJlcSBpcAorCisgICAgcHVzaCAgICAgICAgICAgIHtyNCwgcjV9CisgICAgdm1vdi51OCAgICAgICAgIGQwLCAjMTI4CisKKyAgICBsZG1pYSAgICAgICAgICAgU0FNUExFX0RBVEEhLCB7VE1QMSwgVE1QMiwgVE1QMywgVE1QNH0KKyAgICBhZGQgICAgICAgICAgICAgVE1QMSwgVE1QMSwgU1RBUlRfQ09MCisgICAgYWRkICAgICAgICAgICAgIFRNUDIsIFRNUDIsIFNUQVJUX0NPTAorICAgIGFkZCAgICAgICAgICAgICBUTVAzLCBUTVAzLCBTVEFSVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QNCwgVE1QNCwgU1RBUlRfQ09MCisgICAgdmxkMS44ICAgICAgICAgIHtkMTZ9LCBbVE1QMV0KKyAgICB2c3VibC51OCAgICAgICAgcTgsIGQxNiwgZDAKKyAgICB2bGQxLjggICAgICAgICAge2QxOH0sIFtUTVAyXQorICAgIHZzdWJsLnU4ICAgICAgICBxOSwgZDE4LCBkMAorICAgIHZsZDEuOCAgICAgICAgICB7ZDIwfSwgW1RNUDNdCisgICAgdnN1YmwudTggICAgICAgIHExMCwgZDIwLCBkMAorICAgIHZsZDEuOCAgICAgICAgICB7ZDIyfSwgW1RNUDRdCisgICAgbGRtaWEgICAgICAgICAgIFNBTVBMRV9EQVRBISwge1RNUDEsIFRNUDIsIFRNUDMsIFRNUDR9CisgICAgdnN1YmwudTggICAgICAgIHExMSwgZDIyLCBkMAorICAgIHZzdDEuMTYgICAgICAgICB7ZDE2LCBkMTcsIGQxOCwgZDE5fSwgW1dPUktTUEFDRSwgOjEyOF0hCisgICAgYWRkICAgICAgICAgICAgIFRNUDEsIFRNUDEsIFNUQVJUX0NPTAorICAgIGFkZCAgICAgICAgICAgICBUTVAyLCBUTVAyLCBTVEFSVF9DT0wKKyAgICB2c3QxLjE2ICAgICAgICAge2QyMCwgZDIxLCBkMjIsIGQyM30sIFtXT1JLU1BBQ0UsIDoxMjhdIQorICAgIGFkZCAgICAgICAgICAgICBUTVAzLCBUTVAzLCBTVEFSVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QNCwgVE1QNCwgU1RBUlRfQ09MCisgICAgdmxkMS44ICAgICAgICAgIHtkMjR9LCBbVE1QMV0KKyAgICB2c3VibC51OCAgICAgICAgcTEyLCBkMjQsIGQwCisgICAgdmxkMS44ICAgICAgICAgIHtkMjZ9LCBbVE1QMl0KKyAgICB2c3VibC51OCAgICAgICAgcTEzLCBkMjYsIGQwCisgICAgdmxkMS44ICAgICAgICAgIHtkMjh9LCBbVE1QM10KKyAgICB2c3VibC51OCAgICAgICAgcTE0LCBkMjgsIGQwCisgICAgdmxkMS44ICAgICAgICAgIHtkMzB9LCBbVE1QNF0KKyAgICB2c3VibC51OCAgICAgICAgcTE1LCBkMzAsIGQwCisgICAgdnN0MS4xNiAgICAgICAgIHtkMjQsIGQyNSwgZDI2LCBkMjd9LCBbV09SS1NQQUNFLCA6MTI4XSEKKyAgICB2c3QxLjE2ICAgICAgICAge2QyOCwgZDI5LCBkMzAsIGQzMX0sIFtXT1JLU1BBQ0UsIDoxMjhdIQorICAgIHBvcCAgICAgICAgICAgICB7cjQsIHI1fQorICAgIGJ4ICAgICAgICAgICAgICBscgorCisgICAgLnVucmVxICAgICAgICAgIFNBTVBMRV9EQVRBCisgICAgLnVucmVxICAgICAgICAgIFNUQVJUX0NPTAorICAgIC51bnJlcSAgICAgICAgICBXT1JLU1BBQ0UKKyAgICAudW5yZXEgICAgICAgICAgVE1QMQorICAgIC51bnJlcSAgICAgICAgICBUTVAyCisgICAgLnVucmVxICAgICAgICAgIFRNUDMKKyAgICAudW5yZXEgICAgICAgICAgVE1QNAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2ZkY3RfaWZhc3RfbmVvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorICogdGhlIGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gSXQgdXNlcyB0aGUgc2FtZSBjYWxjdWxhdGlvbnMKKyAqIGFuZCBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIG91dHB1dCBhcyBJSkcncyBvcmlnaW5hbCAnanBlZ19mZGN0X2lmYXN0JworICogZnVuY3Rpb24gZnJvbSBqZmRjdGZzdC5jCisgKgorICogVE9ETzogY2FuIGJlIGNvbWJpbmVkIHdpdGggJ2pzaW1kX2NvbnZzYW1wX25lb24nIHRvIGdldAorICogICAgICAgcmlkIG9mIGEgYnVuY2ggb2YgVkxEMS4xNiBpbnN0cnVjdGlvbnMKKyAqLworCisjZGVmaW5lIFhGSVhfMF8zODI2ODM0MzMgIGQwWzBdCisjZGVmaW5lIFhGSVhfMF81NDExOTYxMDAgIGQwWzFdCisjZGVmaW5lIFhGSVhfMF83MDcxMDY3ODEgIGQwWzJdCisjZGVmaW5lIFhGSVhfMV8zMDY1NjI5NjUgIGQwWzNdCisKKy5iYWxpZ24gMTYKK2pzaW1kX2ZkY3RfaWZhc3RfbmVvbl9jb25zdHM6CisgIC5zaG9ydCAoOTggKiAxMjgpICAgICAgICAgICAgICAgLyogWEZJWF8wXzM4MjY4MzQzMyAqLworICAuc2hvcnQgKDEzOSAqIDEyOCkgICAgICAgICAgICAgIC8qIFhGSVhfMF81NDExOTYxMDAgKi8KKyAgLnNob3J0ICgxODEgKiAxMjgpICAgICAgICAgICAgICAvKiBYRklYXzBfNzA3MTA2NzgxICovCisgIC5zaG9ydCAoMzM0ICogMTI4IC0gMjU2ICogMTI4KSAgLyogWEZJWF8xXzMwNjU2Mjk2NSAqLworCithc21fZnVuY3Rpb24ganNpbWRfZmRjdF9pZmFzdF9uZW9uCisKKyAgICBEQVRBICAgICAgICAgICAgLnJlcSByMAorICAgIFRNUCAgICAgICAgICAgICAucmVxIGlwCisKKyAgICB2cHVzaCAgICAgICAgICAge2Q4LWQxNX0KKworICAgIC8qIExvYWQgY29uc3RhbnRzICovCisgICAgYWRyICAgICAgICAgICAgIFRNUCwganNpbWRfZmRjdF9pZmFzdF9uZW9uX2NvbnN0cworICAgIHZsZDEuMTYgICAgICAgICB7ZDB9LCBbVE1QLCA6NjRdCisKKyAgICAvKiBMb2FkIGFsbCBEQVRBIGludG8gTkVPTiByZWdpc3RlcnMgd2l0aCB0aGUgZm9sbG93aW5nIGFsbG9jYXRpb246CisgICAgICogICAgICAgMCAxIDIgMyB8IDQgNSA2IDcKKyAgICAgKiAgICAgIC0tLS0tLS0tLSstLS0tLS0tLQorICAgICAqICAgMCB8IGQxNiAgICAgfCBkMTcgICAgfCBxOAorICAgICAqICAgMSB8IGQxOCAgICAgfCBkMTkgICAgfCBxOQorICAgICAqICAgMiB8IGQyMCAgICAgfCBkMjEgICAgfCBxMTAKKyAgICAgKiAgIDMgfCBkMjIgICAgIHwgZDIzICAgIHwgcTExCisgICAgICogICA0IHwgZDI0ICAgICB8IGQyNSAgICB8IHExMgorICAgICAqICAgNSB8IGQyNiAgICAgfCBkMjcgICAgfCBxMTMKKyAgICAgKiAgIDYgfCBkMjggICAgIHwgZDI5ICAgIHwgcTE0CisgICAgICogICA3IHwgZDMwICAgICB8IGQzMSAgICB8IHExNQorICAgICAqLworCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTYsIGQxNywgZDE4LCBkMTl9LCBbREFUQSwgOjEyOF0hCisgICAgdmxkMS4xNiAgICAgICAgIHtkMjAsIGQyMSwgZDIyLCBkMjN9LCBbREFUQSwgOjEyOF0hCisgICAgdmxkMS4xNiAgICAgICAgIHtkMjQsIGQyNSwgZDI2LCBkMjd9LCBbREFUQSwgOjEyOF0hCisgICAgdmxkMS4xNiAgICAgICAgIHtkMjgsIGQyOSwgZDMwLCBkMzF9LCBbREFUQSwgOjEyOF0KKyAgICBzdWIgICAgICAgICAgICAgREFUQSwgREFUQSwgIygxMjggLSAzMikKKworICAgIG1vdiAgICAgICAgICAgICBUTVAsICMyCisxOgorICAgIC8qIFRyYW5zcG9zZSAqLworICAgIHZ0cm4uMTYgICAgICAgICBxMTIsIHExMworICAgIHZ0cm4uMTYgICAgICAgICBxMTAsIHExMQorICAgIHZ0cm4uMTYgICAgICAgICBxOCwgcTkKKyAgICB2dHJuLjE2ICAgICAgICAgcTE0LCBxMTUKKyAgICB2dHJuLjMyICAgICAgICAgcTksIHExMQorICAgIHZ0cm4uMzIgICAgICAgICBxMTMsIHExNQorICAgIHZ0cm4uMzIgICAgICAgICBxOCwgcTEwCisgICAgdnRybi4zMiAgICAgICAgIHExMiwgcTE0CisgICAgdnN3cCAgICAgICAgICAgIGQzMCwgZDIzCisgICAgdnN3cCAgICAgICAgICAgIGQyNCwgZDE3CisgICAgdnN3cCAgICAgICAgICAgIGQyNiwgZDE5CisgICAgICAvKiAxLUQgRkRDVCAqLworICAgICAgdmFkZC5zMTYgICAgICAgIHEyLCBxMTEsIHExMgorICAgIHZzd3AgICAgICAgICAgICBkMjgsIGQyMQorICAgICAgdnN1Yi5zMTYgICAgICAgIHExMiwgcTExLCBxMTIKKyAgICAgIHZzdWIuczE2ICAgICAgICBxNiwgcTEwLCBxMTMKKyAgICAgIHZhZGQuczE2ICAgICAgICBxMTAsIHExMCwgcTEzCisgICAgICB2c3ViLnMxNiAgICAgICAgcTcsIHE5LCBxMTQKKyAgICAgIHZhZGQuczE2ICAgICAgICBxOSwgcTksIHExNAorICAgICAgdnN1Yi5zMTYgICAgICAgIHExLCBxOCwgcTE1CisgICAgICB2YWRkLnMxNiAgICAgICAgcTgsIHE4LCBxMTUKKyAgICAgIHZzdWIuczE2ICAgICAgICBxNCwgcTksIHExMAorICAgICAgdnN1Yi5zMTYgICAgICAgIHE1LCBxOCwgcTIKKyAgICAgIHZhZGQuczE2ICAgICAgICBxMywgcTksIHExMAorICAgICAgdmFkZC5zMTYgICAgICAgIHE0LCBxNCwgcTUKKyAgICAgIHZhZGQuczE2ICAgICAgICBxMiwgcTgsIHEyCisgICAgICB2cWRtdWxoLnMxNiAgICAgcTQsIHE0LCBYRklYXzBfNzA3MTA2NzgxCisgICAgICB2YWRkLnMxNiAgICAgICAgcTExLCBxMTIsIHE2CisgICAgICB2YWRkLnMxNiAgICAgICAgcTgsIHEyLCBxMworICAgICAgdnN1Yi5zMTYgICAgICAgIHExMiwgcTIsIHEzCisgICAgICB2YWRkLnMxNiAgICAgICAgcTMsIHE2LCBxNworICAgICAgdmFkZC5zMTYgICAgICAgIHE3LCBxNywgcTEKKyAgICAgIHZxZG11bGguczE2ICAgICBxMywgcTMsIFhGSVhfMF83MDcxMDY3ODEKKyAgICAgIHZzdWIuczE2ICAgICAgICBxNiwgcTExLCBxNworICAgICAgdmFkZC5zMTYgICAgICAgIHExMCwgcTUsIHE0CisgICAgICB2cWRtdWxoLnMxNiAgICAgcTYsIHE2LCBYRklYXzBfMzgyNjgzNDMzCisgICAgICB2c3ViLnMxNiAgICAgICAgcTE0LCBxNSwgcTQKKyAgICAgIHZxZG11bGguczE2ICAgICBxMTEsIHExMSwgWEZJWF8wXzU0MTE5NjEwMAorICAgICAgdnFkbXVsaC5zMTYgICAgIHE1LCBxNywgWEZJWF8xXzMwNjU2Mjk2NQorICAgICAgdmFkZC5zMTYgICAgICAgIHE0LCBxMSwgcTMKKyAgICAgIHZzdWIuczE2ICAgICAgICBxMywgcTEsIHEzCisgICAgICB2YWRkLnMxNiAgICAgICAgcTcsIHE3LCBxNgorICAgICAgdmFkZC5zMTYgICAgICAgIHExMSwgcTExLCBxNgorICAgICAgdmFkZC5zMTYgICAgICAgIHE3LCBxNywgcTUKKyAgICAgIHZhZGQuczE2ICAgICAgICBxMTMsIHEzLCBxMTEKKyAgICAgIHZzdWIuczE2ICAgICAgICBxMTEsIHEzLCBxMTEKKyAgICAgIHZhZGQuczE2ICAgICAgICBxOSwgcTQsIHE3CisgICAgICB2c3ViLnMxNiAgICAgICAgcTE1LCBxNCwgcTcKKyAgICBzdWJzICAgICAgICAgICAgVE1QLCBUTVAsICMxCisgICAgYm5lICAgICAgICAgICAgIDFiCisKKyAgICAvKiBzdG9yZSByZXN1bHRzICovCisgICAgdnN0MS4xNiAgICAgICAgIHtkMTYsIGQxNywgZDE4LCBkMTl9LCBbREFUQSwgOjEyOF0hCisgICAgdnN0MS4xNiAgICAgICAgIHtkMjAsIGQyMSwgZDIyLCBkMjN9LCBbREFUQSwgOjEyOF0hCisgICAgdnN0MS4xNiAgICAgICAgIHtkMjQsIGQyNSwgZDI2LCBkMjd9LCBbREFUQSwgOjEyOF0hCisgICAgdnN0MS4xNiAgICAgICAgIHtkMjgsIGQyOSwgZDMwLCBkMzF9LCBbREFUQSwgOjEyOF0KKworICAgIHZwb3AgICAgICAgICAgICB7ZDgtZDE1fQorICAgIGJ4ICAgICAgICAgICAgICBscgorCisgICAgLnVucmVxICAgICAgICAgIERBVEEKKyAgICAudW5yZXEgICAgICAgICAgVE1QCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogR0xPQkFMKHZvaWQpCisgKiBqc2ltZF9xdWFudGl6ZV9uZW9uKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLAorICogICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpOworICoKKyAqIE5vdGU6IHRoZSBjb2RlIHVzZXMgMiBzdGFnZSBwaXBlbGluaW5nIGluIG9yZGVyIHRvIGltcHJvdmUgaW5zdHJ1Y3Rpb25zCisgKiAgICAgICBzY2hlZHVsaW5nIGFuZCBlbGltaW5hdGUgc3RhbGxzICh0aGlzIHByb3ZpZGVzIH4xNSUgYmV0dGVyCisgKiAgICAgICBwZXJmb3JtYW5jZSBmb3IgdGhpcyBmdW5jdGlvbiBvbiBib3RoIEFSTSBDb3J0ZXgtQTggYW5kCisgKiAgICAgICBBUk0gQ29ydGV4LUE5IHdoZW4gY29tcGFyZWQgdG8gdGhlIG5vbi1waXBlbGluZWQgdmFyaWFudCkuCisgKiAgICAgICBUaGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGJlbG9uZyB0byB0aGUgc2Vjb25kIHN0YWdlIHVzZSBkaWZmZXJlbnQKKyAqICAgICAgIGluZGVudGF0aW9uIGZvciBiZXR0ZXIgcmVhZGlhYmlsaXR5LgorICovCithc21fZnVuY3Rpb24ganNpbWRfcXVhbnRpemVfbmVvbgorCisgICAgQ09FRl9CTE9DSyAgICAgIC5yZXEgcjAKKyAgICBESVZJU09SUyAgICAgICAgLnJlcSByMQorICAgIFdPUktTUEFDRSAgICAgICAucmVxIHIyCisKKyAgICBSRUNJUFJPQ0FMICAgICAgLnJlcSBESVZJU09SUworICAgIENPUlJFQ1RJT04gICAgICAucmVxIHIzCisgICAgU0hJRlQgICAgICAgICAgIC5yZXEgaXAKKyAgICBMT09QX0NPVU5UICAgICAgLnJlcSByNAorCisgICAgdmxkMS4xNiAgICAgICAgIHtkMCwgZDEsIGQyLCBkM30sIFtXT1JLU1BBQ0UsIDoxMjhdIQorICAgIHZhYnMuczE2ICAgICAgICBxMTIsIHEwCisgICAgYWRkICAgICAgICAgICAgIENPUlJFQ1RJT04sIERJVklTT1JTLCAjKDY0ICogMikKKyAgICBhZGQgICAgICAgICAgICAgU0hJRlQsIERJVklTT1JTLCAjKDY0ICogNikKKyAgICB2bGQxLjE2ICAgICAgICAge2QyMCwgZDIxLCBkMjIsIGQyM30sIFtDT1JSRUNUSU9OLCA6MTI4XSEKKyAgICB2YWJzLnMxNiAgICAgICAgcTEzLCBxMQorICAgIHZsZDEuMTYgICAgICAgICB7ZDE2LCBkMTcsIGQxOCwgZDE5fSwgW1JFQ0lQUk9DQUwsIDoxMjhdIQorICAgIHZhZGQudTE2ICAgICAgICBxMTIsIHExMiwgcTEwICAvKiBhZGQgY29ycmVjdGlvbiAqLworICAgIHZhZGQudTE2ICAgICAgICBxMTMsIHExMywgcTExCisgICAgdm11bGwudTE2ICAgICAgIHExMCwgZDI0LCBkMTYgIC8qIG11bHRpcGx5IGJ5IHJlY2lwcm9jYWwgKi8KKyAgICB2bXVsbC51MTYgICAgICAgcTExLCBkMjUsIGQxNworICAgIHZtdWxsLnUxNiAgICAgICBxOCwgZDI2LCBkMTgKKyAgICB2bXVsbC51MTYgICAgICAgcTksIGQyNywgZDE5CisgICAgdmxkMS4xNiAgICAgICAgIHtkMjQsIGQyNSwgZDI2LCBkMjd9LCBbU0hJRlQsIDoxMjhdIQorICAgIHZzaHJuLnUzMiAgICAgICBkMjAsIHExMCwgIzE2CisgICAgdnNocm4udTMyICAgICAgIGQyMSwgcTExLCAjMTYKKyAgICB2c2hybi51MzIgICAgICAgZDIyLCBxOCwgIzE2CisgICAgdnNocm4udTMyICAgICAgIGQyMywgcTksICMxNgorICAgIHZuZWcuczE2ICAgICAgICBxMTIsIHExMgorICAgIHZuZWcuczE2ICAgICAgICBxMTMsIHExMworICAgIHZzaHIuczE2ICAgICAgICBxMiwgcTAsICMxNSAgICAvKiBleHRyYWN0IHNpZ24gKi8KKyAgICB2c2hyLnMxNiAgICAgICAgcTMsIHExLCAjMTUKKyAgICB2c2hsLnUxNiAgICAgICAgcTE0LCBxMTAsIHExMiAgLyogc2hpZnQgKi8KKyAgICB2c2hsLnUxNiAgICAgICAgcTE1LCBxMTEsIHExMworCisgICAgcHVzaCAgICAgICAgICAgIHtyNCwgcjV9CisgICAgbW92ICAgICAgICAgICAgIExPT1BfQ09VTlQsICMzCisxOgorICAgIHZsZDEuMTYgICAgICAgICB7ZDAsIGQxLCBkMiwgZDN9LCBbV09SS1NQQUNFLCA6MTI4XSEKKyAgICAgIHZlb3IudTE2ICAgICAgICBxMTQsIHExNCwgcTIgIC8qIHJlc3RvcmUgc2lnbiAqLworICAgIHZhYnMuczE2ICAgICAgICBxMTIsIHEwCisgICAgdmxkMS4xNiAgICAgICAgIHtkMjAsIGQyMSwgZDIyLCBkMjN9LCBbQ09SUkVDVElPTiwgOjEyOF0hCisgICAgdmFicy5zMTYgICAgICAgIHExMywgcTEKKyAgICAgIHZlb3IudTE2ICAgICAgICBxMTUsIHExNSwgcTMKKyAgICB2bGQxLjE2ICAgICAgICAge2QxNiwgZDE3LCBkMTgsIGQxOX0sIFtSRUNJUFJPQ0FMLCA6MTI4XSEKKyAgICB2YWRkLnUxNiAgICAgICAgcTEyLCBxMTIsIHExMCAgLyogYWRkIGNvcnJlY3Rpb24gKi8KKyAgICB2YWRkLnUxNiAgICAgICAgcTEzLCBxMTMsIHExMQorICAgIHZtdWxsLnUxNiAgICAgICBxMTAsIGQyNCwgZDE2ICAvKiBtdWx0aXBseSBieSByZWNpcHJvY2FsICovCisgICAgdm11bGwudTE2ICAgICAgIHExMSwgZDI1LCBkMTcKKyAgICB2bXVsbC51MTYgICAgICAgcTgsIGQyNiwgZDE4CisgICAgdm11bGwudTE2ICAgICAgIHE5LCBkMjcsIGQxOQorICAgICAgdnN1Yi51MTYgICAgICAgIHExNCwgcTE0LCBxMgorICAgIHZsZDEuMTYgICAgICAgICB7ZDI0LCBkMjUsIGQyNiwgZDI3fSwgW1NISUZULCA6MTI4XSEKKyAgICAgIHZzdWIudTE2ICAgICAgICBxMTUsIHExNSwgcTMKKyAgICB2c2hybi51MzIgICAgICAgZDIwLCBxMTAsICMxNgorICAgIHZzaHJuLnUzMiAgICAgICBkMjEsIHExMSwgIzE2CisgICAgICB2c3QxLjE2ICAgICAgICAge2QyOCwgZDI5LCBkMzAsIGQzMX0sIFtDT0VGX0JMT0NLLCA6MTI4XSEKKyAgICB2c2hybi51MzIgICAgICAgZDIyLCBxOCwgIzE2CisgICAgdnNocm4udTMyICAgICAgIGQyMywgcTksICMxNgorICAgIHZuZWcuczE2ICAgICAgICBxMTIsIHExMgorICAgIHZuZWcuczE2ICAgICAgICBxMTMsIHExMworICAgIHZzaHIuczE2ICAgICAgICBxMiwgcTAsICMxNSAgICAvKiBleHRyYWN0IHNpZ24gKi8KKyAgICB2c2hyLnMxNiAgICAgICAgcTMsIHExLCAjMTUKKyAgICB2c2hsLnUxNiAgICAgICAgcTE0LCBxMTAsIHExMiAgLyogc2hpZnQgKi8KKyAgICB2c2hsLnUxNiAgICAgICAgcTE1LCBxMTEsIHExMworICAgIHN1YnMgICAgICAgICAgICBMT09QX0NPVU5ULCBMT09QX0NPVU5ULCAjMQorICAgIGJuZSAgICAgICAgICAgICAxYgorICAgIHBvcCAgICAgICAgICAgICB7cjQsIHI1fQorCisgICAgICB2ZW9yLnUxNiAgICAgICAgcTE0LCBxMTQsIHEyICAvKiByZXN0b3JlIHNpZ24gKi8KKyAgICAgIHZlb3IudTE2ICAgICAgICBxMTUsIHExNSwgcTMKKyAgICAgIHZzdWIudTE2ICAgICAgICBxMTQsIHExNCwgcTIKKyAgICAgIHZzdWIudTE2ICAgICAgICBxMTUsIHExNSwgcTMKKyAgICAgIHZzdDEuMTYgICAgICAgICB7ZDI4LCBkMjksIGQzMCwgZDMxfSwgW0NPRUZfQkxPQ0ssIDoxMjhdIQorCisgICAgYnggICAgICAgICAgICAgIGxyICAvKiByZXR1cm4gKi8KKworICAgIC51bnJlcSAgICAgICAgICBDT0VGX0JMT0NLCisgICAgLnVucmVxICAgICAgICAgIERJVklTT1JTCisgICAgLnVucmVxICAgICAgICAgIFdPUktTUEFDRQorICAgIC51bnJlcSAgICAgICAgICBSRUNJUFJPQ0FMCisgICAgLnVucmVxICAgICAgICAgIENPUlJFQ1RJT04KKyAgICAudW5yZXEgICAgICAgICAgU0hJRlQKKyAgICAudW5yZXEgICAgICAgICAgTE9PUF9DT1VOVAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEdMT0JBTCh2b2lkKQorICoganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9uZW9uKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworICoKKyAqIE5vdGU6IHRoZSB1c2Ugb2YgdW5hbGlnbmVkIHdyaXRlcyBpcyB0aGUgbWFpbiByZW1haW5pbmcgYm90dGxlbmVjayBpbgorICogICAgICAgdGhpcyBjb2RlLCB3aGljaCBjYW4gYmUgcG90ZW50aWFsbHkgc29sdmVkIHRvIGdldCB1cCB0byB0ZW5zCisgKiAgICAgICBvZiBwZXJjZW50cyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiBDb3J0ZXgtQTgvQ29ydGV4LUE5LgorICovCisKKy8qCisgKiBVcHNhbXBsZSAxNiBzb3VyY2UgcGl4ZWxzIHRvIDMyIGRlc3RpbmF0aW9uIHBpeGVscy4gVGhlIG5ldyAxNiBzb3VyY2UKKyAqIHBpeGVscyBhcmUgbG9hZGVkIHRvIHEwLiBUaGUgcHJldmlvdXMgMTYgc291cmNlIHBpeGVscyBhcmUgaW4gcTEuIFRoZQorICogc2hpZnRlZC1ieS1vbmUgc291cmNlIHBpeGVscyBhcmUgY29uc3RydWN0ZWQgaW4gcTIgYnkgdXNpbmcgcTAgYW5kIHExLgorICogUmVnaXN0ZXIgZDI4IGlzIHVzZWQgZm9yIG11bHRpcGxpY2F0aW9uIGJ5IDMuIFJlZ2lzdGVyIHExNSBpcyB1c2VkCisgKiBmb3IgYWRkaW5nICsxIGJpYXMuCisgKi8KKy5tYWNybyB1cHNhbXBsZTE2IE9VVFBUUiwgSU5QVFIKKyAgICB2bGQxLjggICAgICAgICAge3EwfSwgW1xJTlBUUl0hCisgICAgdm1vdmwudTggICAgICAgIHE4LCBkMAorICAgIHZleHQuOCAgICAgICAgICBxMiwgcTEsIHEwLCAjMTUKKyAgICB2bW92bC51OCAgICAgICAgcTksIGQxCisgICAgdmFkZHcudTggICAgICAgIHExMCwgcTE1LCBkNAorICAgIHZhZGR3LnU4ICAgICAgICBxMTEsIHExNSwgZDUKKyAgICB2bWxhbC51OCAgICAgICAgcTgsIGQ0LCBkMjgKKyAgICB2bWxhbC51OCAgICAgICAgcTksIGQ1LCBkMjgKKyAgICB2bWxhbC51OCAgICAgICAgcTEwLCBkMCwgZDI4CisgICAgdm1sYWwudTggICAgICAgIHExMSwgZDEsIGQyOAorICAgIHZtb3YgICAgICAgICAgICBxMSwgcTAgICAgICAgIC8qIGJhY2t1cCBzb3VyY2UgcGl4ZWxzIHRvIHExICovCisgICAgdnJzaHJuLnUxNiAgICAgIGQ2LCBxOCwgIzIKKyAgICB2cnNocm4udTE2ICAgICAgZDcsIHE5LCAjMgorICAgIHZzaHJuLnUxNiAgICAgICBkOCwgcTEwLCAjMgorICAgIHZzaHJuLnUxNiAgICAgICBkOSwgcTExLCAjMgorICAgIHZzdDIuOCAgICAgICAgICB7ZDYsIGQ3LCBkOCwgZDl9LCBbXE9VVFBUUl0hCisuZW5kbQorCisvKgorICogVXBzYW1wbGUgMzIgc291cmNlIHBpeGVscyB0byA2NCBkZXN0aW5hdGlvbiBwaXhlbHMuIENvbXBhcmVkIHRvICd1c2FtcGxlMTYnCisgKiBtYWNybywgdGhlIHJvbGVzIG9mIHEwIGFuZCBxMSByZWdpc3RlcnMgYXJlIHJldmVyc2VkIGZvciBldmVuIGFuZCBvZGQKKyAqIGdyb3VwcyBvZiAxNiBwaXhlbHMsIHRoYXQncyB3aHkgInZtb3YgcTEsIHEwIiBpbnN0cnVjdGlvbnMgYXJlIG5vdCBuZWVkZWQuCisgKiBBbHNvIHRoaXMgdW5yb2xsaW5nIGFsbG93cyB0byByZW9yZGVyIGxvYWRzIGFuZCBzdG9yZXMgdG8gY29tcGVuc2F0ZQorICogbXVsdGlwbGljYXRpb24gbGF0ZW5jeSBhbmQgcmVkdWNlIHN0YWxscy4KKyAqLworLm1hY3JvIHVwc2FtcGxlMzIgT1VUUFRSLCBJTlBUUgorICAgIC8qIGV2ZW4gMTYgcGl4ZWxzIGdyb3VwICovCisgICAgdmxkMS44ICAgICAgICAgIHtxMH0sIFtcSU5QVFJdIQorICAgIHZtb3ZsLnU4ICAgICAgICBxOCwgZDAKKyAgICB2ZXh0LjggICAgICAgICAgcTIsIHExLCBxMCwgIzE1CisgICAgdm1vdmwudTggICAgICAgIHE5LCBkMQorICAgIHZhZGR3LnU4ICAgICAgICBxMTAsIHExNSwgZDQKKyAgICB2YWRkdy51OCAgICAgICAgcTExLCBxMTUsIGQ1CisgICAgdm1sYWwudTggICAgICAgIHE4LCBkNCwgZDI4CisgICAgdm1sYWwudTggICAgICAgIHE5LCBkNSwgZDI4CisgICAgdm1sYWwudTggICAgICAgIHExMCwgZDAsIGQyOAorICAgIHZtbGFsLnU4ICAgICAgICBxMTEsIGQxLCBkMjgKKyAgICAgIC8qIG9kZCAxNiBwaXhlbHMgZ3JvdXAgKi8KKyAgICAgIHZsZDEuOCAgICAgICAgICB7cTF9LCBbXElOUFRSXSEKKyAgICB2cnNocm4udTE2ICAgICAgZDYsIHE4LCAjMgorICAgIHZyc2hybi51MTYgICAgICBkNywgcTksICMyCisgICAgdnNocm4udTE2ICAgICAgIGQ4LCBxMTAsICMyCisgICAgdnNocm4udTE2ICAgICAgIGQ5LCBxMTEsICMyCisgICAgICB2bW92bC51OCAgICAgICAgcTgsIGQyCisgICAgICB2ZXh0LjggICAgICAgICAgcTIsIHEwLCBxMSwgIzE1CisgICAgICB2bW92bC51OCAgICAgICAgcTksIGQzCisgICAgICB2YWRkdy51OCAgICAgICAgcTEwLCBxMTUsIGQ0CisgICAgICB2YWRkdy51OCAgICAgICAgcTExLCBxMTUsIGQ1CisgICAgICB2bWxhbC51OCAgICAgICAgcTgsIGQ0LCBkMjgKKyAgICAgIHZtbGFsLnU4ICAgICAgICBxOSwgZDUsIGQyOAorICAgICAgdm1sYWwudTggICAgICAgIHExMCwgZDIsIGQyOAorICAgICAgdm1sYWwudTggICAgICAgIHExMSwgZDMsIGQyOAorICAgIHZzdDIuOCAgICAgICAgICB7ZDYsIGQ3LCBkOCwgZDl9LCBbXE9VVFBUUl0hCisgICAgICB2cnNocm4udTE2ICAgICAgZDYsIHE4LCAjMgorICAgICAgdnJzaHJuLnUxNiAgICAgIGQ3LCBxOSwgIzIKKyAgICAgIHZzaHJuLnUxNiAgICAgICBkOCwgcTEwLCAjMgorICAgICAgdnNocm4udTE2ICAgICAgIGQ5LCBxMTEsICMyCisgICAgICB2c3QyLjggICAgICAgICAge2Q2LCBkNywgZDgsIGQ5fSwgW1xPVVRQVFJdIQorLmVuZG0KKworLyoKKyAqIFVwc2FtcGxlIGEgcm93IG9mIFdJRFRIIHBpeGVscyBmcm9tIElOUFRSIHRvIE9VVFBUUi4KKyAqLworLm1hY3JvIHVwc2FtcGxlX3JvdyBPVVRQVFIsIElOUFRSLCBXSURUSCwgVE1QMQorICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGZpcnN0IGFuZCBsYXN0IHBpeGVscyAqLworICAgIHN1YiAgICAgICAgICAgICBcV0lEVEgsIFxXSURUSCwgIzEKKyAgICBhZGQgICAgICAgICAgICAgXE9VVFBUUiwgXE9VVFBUUiwgIzEKKyAgICBsZHJiICAgICAgICAgICAgXFRNUDEsIFtcSU5QVFIsIFxXSURUSF0KKyAgICBzdHJiICAgICAgICAgICAgXFRNUDEsIFtcT1VUUFRSLCBcV0lEVEgsIGFzbCAjMV0KKyAgICBsZHJiICAgICAgICAgICAgXFRNUDEsIFtcSU5QVFJdLCAjMQorICAgIHN0cmIgICAgICAgICAgICBcVE1QMSwgW1xPVVRQVFIsICMtMV0KKyAgICB2bW92LjggICAgICAgICAgZDNbN10sIFxUTVAxCisKKyAgICBzdWJzICAgICAgICAgICAgXFdJRFRILCBcV0lEVEgsICMzMgorICAgIGJsdCAgICAgICAgICAgICA1ZgorMDogIC8qIHByb2Nlc3MgMzIgcGl4ZWxzIHBlciBpdGVyYXRpb24gKi8KKyAgICB1cHNhbXBsZTMyICAgICAgXE9VVFBUUiwgXElOUFRSCisgICAgc3VicyAgICAgICAgICAgIFxXSURUSCwgXFdJRFRILCAjMzIKKyAgICBiZ2UgICAgICAgICAgICAgMGIKKzU6CisgICAgYWRkcyAgICAgICAgICAgIFxXSURUSCwgXFdJRFRILCAjMTYKKyAgICBibHQgICAgICAgICAgICAgMWYKKzA6ICAvKiBwcm9jZXNzIDE2IHBpeGVscyBpZiBuZWVkZWQgKi8KKyAgICB1cHNhbXBsZTE2ICAgICAgXE9VVFBUUiwgXElOUFRSCisgICAgc3VicyAgICAgICAgICAgIFxXSURUSCwgXFdJRFRILCAjMTYKKzE6CisgICAgYWRkcyAgICAgICAgICAgIFxXSURUSCwgXFdJRFRILCAjMTYKKyAgICBiZXEgICAgICAgICAgICAgOWYKKworICAgIC8qIGxvYWQgdGhlIHJlbWFpbmluZyAxLTE1IHBpeGVscyAqLworICAgIGFkZCAgICAgICAgICAgICBcSU5QVFIsIFxJTlBUUiwgXFdJRFRICisgICAgdHN0ICAgICAgICAgICAgIFxXSURUSCwgIzEKKyAgICBiZXEgICAgICAgICAgICAgMmYKKyAgICBzdWIgICAgICAgICAgICAgXElOUFRSLCBcSU5QVFIsICMxCisgICAgdmxkMS44ICAgICAgICAgIHtkMFswXX0sIFtcSU5QVFJdCisyOgorICAgIHRzdCAgICAgICAgICAgICBcV0lEVEgsICMyCisgICAgYmVxICAgICAgICAgICAgIDJmCisgICAgdmV4dC44ICAgICAgICAgIGQwLCBkMCwgZDAsICM2CisgICAgc3ViICAgICAgICAgICAgIFxJTlBUUiwgXElOUFRSLCAjMQorICAgIHZsZDEuOCAgICAgICAgICB7ZDBbMV19LCBbXElOUFRSXQorICAgIHN1YiAgICAgICAgICAgICBcSU5QVFIsIFxJTlBUUiwgIzEKKyAgICB2bGQxLjggICAgICAgICAge2QwWzBdfSwgW1xJTlBUUl0KKzI6CisgICAgdHN0ICAgICAgICAgICAgIFxXSURUSCwgIzQKKyAgICBiZXEgICAgICAgICAgICAgMmYKKyAgICB2cmV2NjQuMzIgICAgICAgZDAsIGQwCisgICAgc3ViICAgICAgICAgICAgIFxJTlBUUiwgXElOUFRSLCAjMQorICAgIHZsZDEuOCAgICAgICAgICB7ZDBbM119LCBbXElOUFRSXQorICAgIHN1YiAgICAgICAgICAgICBcSU5QVFIsIFxJTlBUUiwgIzEKKyAgICB2bGQxLjggICAgICAgICAge2QwWzJdfSwgW1xJTlBUUl0KKyAgICBzdWIgICAgICAgICAgICAgXElOUFRSLCBcSU5QVFIsICMxCisgICAgdmxkMS44ICAgICAgICAgIHtkMFsxXX0sIFtcSU5QVFJdCisgICAgc3ViICAgICAgICAgICAgIFxJTlBUUiwgXElOUFRSLCAjMQorICAgIHZsZDEuOCAgICAgICAgICB7ZDBbMF19LCBbXElOUFRSXQorMjoKKyAgICB0c3QgICAgICAgICAgICAgXFdJRFRILCAjOAorICAgIGJlcSAgICAgICAgICAgICAyZgorICAgIHZtb3YgICAgICAgICAgICBkMSwgZDAKKyAgICBzdWIgICAgICAgICAgICAgXElOUFRSLCBcSU5QVFIsICM4CisgICAgdmxkMS44ICAgICAgICAgIHtkMH0sIFtcSU5QVFJdCisyOiAgLyogdXBzYW1wbGUgdGhlIHJlbWFpbmluZyBwaXhlbHMgKi8KKyAgICB2bW92bC51OCAgICAgICAgcTgsIGQwCisgICAgdmV4dC44ICAgICAgICAgIHEyLCBxMSwgcTAsICMxNQorICAgIHZtb3ZsLnU4ICAgICAgICBxOSwgZDEKKyAgICB2YWRkdy51OCAgICAgICAgcTEwLCBxMTUsIGQ0CisgICAgdmFkZHcudTggICAgICAgIHExMSwgcTE1LCBkNQorICAgIHZtbGFsLnU4ICAgICAgICBxOCwgZDQsIGQyOAorICAgIHZtbGFsLnU4ICAgICAgICBxOSwgZDUsIGQyOAorICAgIHZtbGFsLnU4ICAgICAgICBxMTAsIGQwLCBkMjgKKyAgICB2bWxhbC51OCAgICAgICAgcTExLCBkMSwgZDI4CisgICAgdnJzaHJuLnUxNiAgICAgIGQxMCwgcTgsICMyCisgICAgdnJzaHJuLnUxNiAgICAgIGQxMiwgcTksICMyCisgICAgdnNocm4udTE2ICAgICAgIGQxMSwgcTEwLCAjMgorICAgIHZzaHJuLnUxNiAgICAgICBkMTMsIHExMSwgIzIKKyAgICB2emlwLjggICAgICAgICAgZDEwLCBkMTEKKyAgICB2emlwLjggICAgICAgICAgZDEyLCBkMTMKKyAgICAvKiBzdG9yZSB0aGUgcmVtYWluaW5nIHBpeGVscyAqLworICAgIHRzdCAgICAgICAgICAgICBcV0lEVEgsICM4CisgICAgYmVxICAgICAgICAgICAgIDJmCisgICAgdnN0MS44ICAgICAgICAgIHtkMTAsIGQxMX0sIFtcT1VUUFRSXSEKKyAgICB2bW92ICAgICAgICAgICAgcTUsIHE2CisyOgorICAgIHRzdCAgICAgICAgICAgICBcV0lEVEgsICM0CisgICAgYmVxICAgICAgICAgICAgIDJmCisgICAgdnN0MS44ICAgICAgICAgIHtkMTB9LCBbXE9VVFBUUl0hCisgICAgdm1vdiAgICAgICAgICAgIGQxMCwgZDExCisyOgorICAgIHRzdCAgICAgICAgICAgICBcV0lEVEgsICMyCisgICAgYmVxICAgICAgICAgICAgIDJmCisgICAgdnN0MS44ICAgICAgICAgIHtkMTBbMF19LCBbXE9VVFBUUl0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMTBbMV19LCBbXE9VVFBUUl0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMTBbMl19LCBbXE9VVFBUUl0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMTBbM119LCBbXE9VVFBUUl0hCisgICAgdmV4dC44ICAgICAgICAgIGQxMCwgZDEwLCBkMTAsICM0CisyOgorICAgIHRzdCAgICAgICAgICAgICBcV0lEVEgsICMxCisgICAgYmVxICAgICAgICAgICAgIDJmCisgICAgdnN0MS44ICAgICAgICAgIHtkMTBbMF19LCBbXE9VVFBUUl0hCisgICAgdnN0MS44ICAgICAgICAgIHtkMTBbMV19LCBbXE9VVFBUUl0hCisyOgorOToKKy5lbmRtCisKK2FzbV9mdW5jdGlvbiBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX25lb24KKworICAgIE1BWF9WX1NBTVBfRkFDVE9SIC5yZXEgcjAKKyAgICBET1dOU0FNUExFRF9XSURUSCAucmVxIHIxCisgICAgSU5QVVRfREFUQSAgICAgICAgLnJlcSByMgorICAgIE9VVFBVVF9EQVRBX1BUUiAgIC5yZXEgcjMKKyAgICBPVVRQVVRfREFUQSAgICAgICAucmVxIE9VVFBVVF9EQVRBX1BUUgorCisgICAgT1VUUFRSICAgICAgICAgICAgLnJlcSByNAorICAgIElOUFRSICAgICAgICAgICAgIC5yZXEgcjUKKyAgICBXSURUSCAgICAgICAgICAgICAucmVxIGlwCisgICAgVE1QICAgICAgICAgICAgICAgLnJlcSBscgorCisgICAgcHVzaCAgICAgICAgICAgIHtyNCwgcjUsIHI2LCBscn0KKyAgICB2cHVzaCAgICAgICAgICAge2Q4LWQxNX0KKworICAgIGxkciAgICAgICAgICAgICBPVVRQVVRfREFUQSwgW09VVFBVVF9EQVRBX1BUUl0KKyAgICBjbXAgICAgICAgICAgICAgTUFYX1ZfU0FNUF9GQUNUT1IsICMwCisgICAgYmxlICAgICAgICAgICAgIDk5ZgorCisgICAgLyogaW5pdGlhbGl6ZSBjb25zdGFudHMgKi8KKyAgICB2bW92LnU4ICAgICAgICAgZDI4LCAjMworICAgIHZtb3YudTE2ICAgICAgICBxMTUsICMxCisxMToKKyAgICBsZHIgICAgICAgICAgICAgSU5QVFIsIFtJTlBVVF9EQVRBXSwgIzQKKyAgICBsZHIgICAgICAgICAgICAgT1VUUFRSLCBbT1VUUFVUX0RBVEFdLCAjNAorICAgIG1vdiAgICAgICAgICAgICBXSURUSCwgRE9XTlNBTVBMRURfV0lEVEgKKyAgICB1cHNhbXBsZV9yb3cgICAgT1VUUFRSLCBJTlBUUiwgV0lEVEgsIFRNUAorICAgIHN1YnMgICAgICAgICAgICBNQVhfVl9TQU1QX0ZBQ1RPUiwgTUFYX1ZfU0FNUF9GQUNUT1IsICMxCisgICAgYmd0ICAgICAgICAgICAgIDExYgorCis5OToKKyAgICB2cG9wICAgICAgICAgICAge2Q4LWQxNX0KKyAgICBwb3AgICAgICAgICAgICAge3I0LCByNSwgcjYsIHBjfQorCisgICAgLnVucmVxICAgICAgICAgIE1BWF9WX1NBTVBfRkFDVE9SCisgICAgLnVucmVxICAgICAgICAgIERPV05TQU1QTEVEX1dJRFRICisgICAgLnVucmVxICAgICAgICAgIElOUFVUX0RBVEEKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0RBVEFfUFRSCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9EQVRBCisKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFRSCisgICAgLnVucmVxICAgICAgICAgIElOUFRSCisgICAgLnVucmVxICAgICAgICAgIFdJRFRICisgICAgLnVucmVxICAgICAgICAgIFRNUAorCisucHVyZ2VtIHVwc2FtcGxlMTYKKy5wdXJnZW0gdXBzYW1wbGUzMgorLnB1cmdlbSB1cHNhbXBsZV9yb3cKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBHTE9CQUwoSk9DVEVUICopCisgKiBqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2sod29ya2luZ19zdGF0ZSAqc3RhdGUsIEpPQ1RFVCAqYnVmZmVyLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGJsb2NrLCBpbnQgbGFzdF9kY192YWwsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kZXJpdmVkX3RibCAqZGN0YmwsIGNfZGVyaXZlZF90YmwgKmFjdGJsKQorICoKKyAqLworCisubWFjcm8gZW1pdF9ieXRlIEJVRkZFUiwgUFVUX0JVRkZFUiwgUFVUX0JJVFMsIFpFUk8sIFRNUAorICAgIHN1YiAgICAgICAgICAgICBcUFVUX0JJVFMsIFxQVVRfQklUUywgIzB4OAorICAgIGxzciAgICAgICAgICAgICBcVE1QLCBcUFVUX0JVRkZFUiwgXFBVVF9CSVRTCisgICAgdXh0YiAgICAgICAgICAgIFxUTVAsIFxUTVAKKyAgICBzdHJiICAgICAgICAgICAgXFRNUCwgW1xCVUZGRVIsICMxXSEKKyAgICBjbXAgICAgICAgICAgICAgXFRNUCwgIzB4ZmYKKyAgICAvKml0IGVxKi8KKyAgICBzdHJiZXEgICAgICAgICAgXFpFUk8sIFtcQlVGRkVSLCAjMV0hCisuZW5kbQorCisubWFjcm8gcHV0X2JpdHMgUFVUX0JVRkZFUiwgUFVUX0JJVFMsIENPREUsIFNJWkUKKyAgICAvKmxzbCAgICAgICAgICAgICBcUFVUX0JVRkZFUiwgXFBVVF9CVUZGRVIsIFxTSVpFKi8KKyAgICBhZGQgICAgICAgICAgICAgXFBVVF9CSVRTLCBcU0laRQorICAgIC8qb3JyICAgICAgICAgICAgIFxQVVRfQlVGRkVSLCBcUFVUX0JVRkZFUiwgXENPREUqLworICAgIG9yciAgICAgICAgICAgICBcUFVUX0JVRkZFUiwgXENPREUsIFxQVVRfQlVGRkVSLCBsc2wgXFNJWkUKKy5lbmRtCisKKy5tYWNybyBjaGVja2J1ZjE1IEJVRkZFUiwgUFVUX0JVRkZFUiwgUFVUX0JJVFMsIFpFUk8sIFRNUAorICBjbXAgICAgICAgICAgICAgICBcUFVUX0JJVFMsICMweDEwCisgIGJsdCAgICAgICAgICAgICAgIDE1ZgorICAgIGVvciAgICAgICAgICAgICAgIFxaRVJPLCBcWkVSTywgXFpFUk8KKyAgICBlbWl0X2J5dGUgICAgICAgICBcQlVGRkVSLCBcUFVUX0JVRkZFUiwgXFBVVF9CSVRTLCBcWkVSTywgXFRNUAorICAgIGVtaXRfYnl0ZSAgICAgICAgIFxCVUZGRVIsIFxQVVRfQlVGRkVSLCBcUFVUX0JJVFMsIFxaRVJPLCBcVE1QCisxNToKKy5lbmRtCisKKy5iYWxpZ24gMTYKK2pzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uX2NvbnN0czoKKyAgLmJ5dGUgMHgwMQorICAuYnl0ZSAweDAyCisgIC5ieXRlIDB4MDQKKyAgLmJ5dGUgMHgwOAorICAuYnl0ZSAweDEwCisgIC5ieXRlIDB4MjAKKyAgLmJ5dGUgMHg0MAorICAuYnl0ZSAweDgwCisKK2FzbV9mdW5jdGlvbiBqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2tfbmVvbgorICAgIHB1c2ggICAgICAgICAgICB7cjQsIHI1LCByNiwgcjcsIHI4LCByOSwgcjEwLCByMTEsIGxyfQorICAgIGFkZCAgICAgICAgICAgICByNywgc3AsICMweDFjCisgICAgc3ViICAgICAgICAgICAgIHI0LCBzcCwgIzB4NDAKKyAgICBiZmMgICAgICAgICAgICAgcjQsICMwLCAjNQorICAgIG1vdiAgICAgICAgICAgICBzcCwgcjQgICAgICAgICAgIC8qIGFsaWduIHNwIG9uIDMyIGJ5dGVzICovCisgICAgdnN0MS42NCAgICAgICAgIHtkOCwgZDksIGQxMCwgZDExfSwgW3I0LCA6MTI4XSEKKyAgICB2c3QxLjY0ICAgICAgICAge2QxMiwgZDEzLCBkMTQsIGQxNX0sIFtyNCwgOjEyOF0KKyAgICBzdWIgICAgICAgICAgICAgc3AsICMweDE0MCAgICAgICAvKiByZXNlcnZlIDMyMCBieXRlcyAqLworICAgIHN0ciAgICAgICAgICAgICByMCwgW3NwLCAjMHgxOF0gIC8qIHdvcmtpbmcgc3RhdGUgPiBzcCArIE94MTggKi8KKyAgICBhZGQgICAgICAgICAgICAgcjQsIHNwLCAjMHgyMCAgICAvKiByNCA9IHQxICovCisgICAgbGRyICAgICAgICAgICAgIGxyLCBbcjcsICMweDhdICAgLyogbHIgPSBkY3RibCAqLworICAgIHN1YiAgICAgICAgICAgICByMTAsIHIxLCAjMHgxICAgIC8qIHIxMD1idWZmZXItLSAqLworICAgIGxkcnNoICAgICAgICAgICByMSwgW3IyXQorICAgIG1vdiAgICAgICAgICAgICByOSwgIzB4MTAKKyAgICBtb3YgICAgICAgICAgICAgcjgsICMweDEKKyAgICBhZHIgICAgICAgICAgICAgcjUsIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uX2NvbnN0cworICAgIC8qIHByZXBhcmUgZGF0YSAqLworICAgIHZsZDEuOCAgICAgICAgICB7ZDI2fSwgW3I1LCA6NjRdCisgICAgdmVvciAgICAgICAgICAgIHE4LCBxOCwgcTgKKyAgICB2ZW9yICAgICAgICAgICAgcTksIHE5LCBxOQorICAgIHZkdXAuMTYgICAgICAgICBxMTQsIHI5CisgICAgdmR1cC4xNiAgICAgICAgIHExNSwgcjgKKyAgICB2ZW9yICAgICAgICAgICAgcTEwLCBxMTAsIHExMAorICAgIHZlb3IgICAgICAgICAgICBxMTEsIHExMSwgcTExCisgICAgc3ViICAgICAgICAgICAgIHIxLCByMSwgcjMKKyAgICBhZGQgICAgICAgICAgICAgcjksIHIyLCAjMHgyMgorICAgIGFkZCAgICAgICAgICAgICByOCwgcjIsICMweDE4CisgICAgYWRkICAgICAgICAgICAgIHIzLCByMiwgIzB4MzYKKyAgICB2bW92LjE2ICAgICAgICAgZDBbMF0sIHIxCisgICAgdmxkMS4xNiAgICAgICAgIHtkMlswXX0sIFtyOSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDRbMF19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2Q2WzBdfSwgW3IzLCA6MTZdCisgICAgYWRkICAgICAgICAgICAgIHIxLCByMiwgIzB4MgorICAgIGFkZCAgICAgICAgICAgICByOSwgcjIsICMweDMwCisgICAgYWRkICAgICAgICAgICAgIHI4LCByMiwgIzB4MjYKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHIyLCAjMHgyOAorICAgIHZsZDEuMTYgICAgICAgICB7ZDBbMV19LCBbcjEsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QyWzFdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkNFsxXX0sIFtyOCwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDZbMV19LCBbcjMsIDoxNl0KKyAgICBhZGQgICAgICAgICAgICAgcjEsIHIyLCAjMHgxMAorICAgIGFkZCAgICAgICAgICAgICByOSwgcjIsICMweDQwCisgICAgYWRkICAgICAgICAgICAgIHI4LCByMiwgIzB4MzQKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHIyLCAjMHgxYQorICAgIHZsZDEuMTYgICAgICAgICB7ZDBbMl19LCBbcjEsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QyWzJdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkNFsyXX0sIFtyOCwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDZbMl19LCBbcjMsIDoxNl0KKyAgICBhZGQgICAgICAgICAgICAgcjEsIHIyLCAjMHgyMAorICAgIGFkZCAgICAgICAgICAgICByOSwgcjIsICMweDMyCisgICAgYWRkICAgICAgICAgICAgIHI4LCByMiwgIzB4NDIKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHIyLCAjMHhjCisgICAgdmxkMS4xNiAgICAgICAgIHtkMFszXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDJbM119LCBbcjksIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2Q0WzNdfSwgW3I4LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkNlszXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDEyCisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4MjQKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg1MAorICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweGUKKyAgICB2bGQxLjE2ICAgICAgICAge2QxWzBdfSwgW3IxLCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkM1swXX0sIFtyOSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDVbMF19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2Q3WzBdfSwgW3IzLCA6MTZdCisgICAgYWRkICAgICAgICAgICAgIHIxLCByMiwgIzB4NAorICAgIGFkZCAgICAgICAgICAgICByOSwgcjIsICMweDE2CisgICAgYWRkICAgICAgICAgICAgIHI4LCByMiwgIzB4NjAKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHIyLCAjMHgxYworICAgIHZsZDEuMTYgICAgICAgICB7ZDFbMV19LCBbcjEsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QzWzFdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkNVsxXX0sIFtyOCwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDdbMV19LCBbcjMsIDoxNl0KKyAgICBhZGQgICAgICAgICAgICAgcjEsIHIyLCAjMHg2CisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4OAorICAgIGFkZCAgICAgICAgICAgICByOCwgcjIsICMweDUyCisgICAgYWRkICAgICAgICAgICAgIHIzLCByMiwgIzB4MmEKKyAgICB2bGQxLjE2ICAgICAgICAge2QxWzJdfSwgW3IxLCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkM1syXX0sIFtyOSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDVbMl19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2Q3WzJdfSwgW3IzLCA6MTZdCisgICAgYWRkICAgICAgICAgICAgIHIxLCByMiwgIzB4MTQKKyAgICBhZGQgICAgICAgICAgICAgcjksIHIyLCAjMHhhCisgICAgYWRkICAgICAgICAgICAgIHI4LCByMiwgIzB4NDQKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHIyLCAjMHgzOAorICAgIHZsZDEuMTYgICAgICAgICB7ZDFbM119LCBbcjEsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QzWzNdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkNVszXX0sIFtyOCwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDdbM119LCBbcjMsIDoxNl0KKyAgICB2Y2d0LnMxNiAgICAgICAgcTgsIHE4LCBxMAorICAgIHZjZ3QuczE2ICAgICAgICBxOSwgcTksIHExCisgICAgdmNndC5zMTYgICAgICAgIHExMCwgcTEwLCBxMgorICAgIHZjZ3QuczE2ICAgICAgICBxMTEsIHExMSwgcTMKKyAgICB2YWJzLnMxNiAgICAgICAgcTAsIHEwCisgICAgdmFicy5zMTYgICAgICAgIHExLCBxMQorICAgIHZhYnMuczE2ICAgICAgICBxMiwgcTIKKyAgICB2YWJzLnMxNiAgICAgICAgcTMsIHEzCisgICAgdmVvciAgICAgICAgICAgIHE4LCBxOCwgcTAKKyAgICB2ZW9yICAgICAgICAgICAgcTksIHE5LCBxMQorICAgIHZlb3IgICAgICAgICAgICBxMTAsIHExMCwgcTIKKyAgICB2ZW9yICAgICAgICAgICAgcTExLCBxMTEsIHEzCisgICAgYWRkICAgICAgICAgICAgIHI5LCByNCwgIzB4MjAKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHI0LCAjMHg4MAorICAgIGFkZCAgICAgICAgICAgICByMywgcjQsICMweGEwCisgICAgdmNsei5pMTYgICAgICAgIHEwLCBxMAorICAgIHZjbHouaTE2ICAgICAgICBxMSwgcTEKKyAgICB2Y2x6LmkxNiAgICAgICAgcTIsIHEyCisgICAgdmNsei5pMTYgICAgICAgIHEzLCBxMworICAgIHZzdWIuaTE2ICAgICAgICBxMCwgcTE0LCBxMAorICAgIHZzdWIuaTE2ICAgICAgICBxMSwgcTE0LCBxMQorICAgIHZzdWIuaTE2ICAgICAgICBxMiwgcTE0LCBxMgorICAgIHZzdWIuaTE2ICAgICAgICBxMywgcTE0LCBxMworICAgIHZzdDEuMTYgICAgICAgICB7ZDAsIGQxLCBkMiwgZDN9LCBbcjQsIDoyNTZdCisgICAgdnN0MS4xNiAgICAgICAgIHtkNCwgZDUsIGQ2LCBkN30sIFtyOSwgOjI1Nl0KKyAgICB2c2hsLnMxNiAgICAgICAgcTAsIHExNSwgcTAKKyAgICB2c2hsLnMxNiAgICAgICAgcTEsIHExNSwgcTEKKyAgICB2c2hsLnMxNiAgICAgICAgcTIsIHExNSwgcTIKKyAgICB2c2hsLnMxNiAgICAgICAgcTMsIHExNSwgcTMKKyAgICB2c3ViLmkxNiAgICAgICAgcTAsIHEwLCBxMTUKKyAgICB2c3ViLmkxNiAgICAgICAgcTEsIHExLCBxMTUKKyAgICB2c3ViLmkxNiAgICAgICAgcTIsIHEyLCBxMTUKKyAgICB2c3ViLmkxNiAgICAgICAgcTMsIHEzLCBxMTUKKyAgICB2YW5kICAgICAgICAgICAgcTgsIHE4LCBxMAorICAgIHZhbmQgICAgICAgICAgICBxOSwgcTksIHExCisgICAgdmFuZCAgICAgICAgICAgIHExMCwgcTEwLCBxMgorICAgIHZhbmQgICAgICAgICAgICBxMTEsIHExMSwgcTMKKyAgICB2c3QxLjE2ICAgICAgICAge2QxNiwgZDE3LCBkMTgsIGQxOX0sIFtyOCwgOjI1Nl0KKyAgICB2c3QxLjE2ICAgICAgICAge2QyMCwgZDIxLCBkMjIsIGQyM30sIFtyMywgOjI1Nl0KKyAgICBhZGQgICAgICAgICAgICAgcjEsIHIyLCAjMHg0NgorICAgIGFkZCAgICAgICAgICAgICByOSwgcjIsICMweDNhCisgICAgYWRkICAgICAgICAgICAgIHI4LCByMiwgIzB4NzQKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHIyLCAjMHg2YQorICAgIHZsZDEuMTYgICAgICAgICB7ZDhbMF19LCBbcjEsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxMFswXX0sIFtyOSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDEyWzBdfSwgW3I4LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTRbMF19LCBbcjMsIDoxNl0KKyAgICB2ZW9yICAgICAgICAgICAgcTgsIHE4LCBxOAorICAgIHZlb3IgICAgICAgICAgICBxOSwgcTksIHE5CisgICAgdmVvciAgICAgICAgICAgIHExMCwgcTEwLCBxMTAKKyAgICB2ZW9yICAgICAgICAgICAgcTExLCBxMTEsIHExMQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDU0CisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4MmMKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg3NgorICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDc4CisgICAgdmxkMS4xNiAgICAgICAgIHtkOFsxXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDEwWzFdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTJbMV19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNFsxXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDYyCisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4MWUKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg2OAorICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDdhCisgICAgdmxkMS4xNiAgICAgICAgIHtkOFsyXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDEwWzJdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTJbMl19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNFsyXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDcwCisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4MmUKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg1YQorICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDZjCisgICAgdmxkMS4xNiAgICAgICAgIHtkOFszXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDEwWzNdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTJbM119LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNFszXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDcyCisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4M2MKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg0YworICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDVlCisgICAgdmxkMS4xNiAgICAgICAgIHtkOVswXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDExWzBdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTNbMF19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNVswXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDY0CisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4NGEKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHgzZQorICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDZlCisgICAgdmxkMS4xNiAgICAgICAgIHtkOVsxXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDExWzFdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTNbMV19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNVsxXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDU2CisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4NTgKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg0ZQorICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDdjCisgICAgdmxkMS4xNiAgICAgICAgIHtkOVsyXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDExWzJdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTNbMl19LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNVsyXX0sIFtyMywgOjE2XQorICAgIGFkZCAgICAgICAgICAgICByMSwgcjIsICMweDQ4CisgICAgYWRkICAgICAgICAgICAgIHI5LCByMiwgIzB4NjYKKyAgICBhZGQgICAgICAgICAgICAgcjgsIHIyLCAjMHg1YworICAgIGFkZCAgICAgICAgICAgICByMywgcjIsICMweDdlCisgICAgdmxkMS4xNiAgICAgICAgIHtkOVszXX0sIFtyMSwgOjE2XQorICAgIHZsZDEuMTYgICAgICAgICB7ZDExWzNdfSwgW3I5LCA6MTZdCisgICAgdmxkMS4xNiAgICAgICAgIHtkMTNbM119LCBbcjgsIDoxNl0KKyAgICB2bGQxLjE2ICAgICAgICAge2QxNVszXX0sIFtyMywgOjE2XQorICAgIHZjZ3QuczE2ICAgICAgICBxOCwgcTgsIHE0CisgICAgdmNndC5zMTYgICAgICAgIHE5LCBxOSwgcTUKKyAgICB2Y2d0LnMxNiAgICAgICAgcTEwLCBxMTAsIHE2CisgICAgdmNndC5zMTYgICAgICAgIHExMSwgcTExLCBxNworICAgIHZhYnMuczE2ICAgICAgICBxNCwgcTQKKyAgICB2YWJzLnMxNiAgICAgICAgcTUsIHE1CisgICAgdmFicy5zMTYgICAgICAgIHE2LCBxNgorICAgIHZhYnMuczE2ICAgICAgICBxNywgcTcKKyAgICB2ZW9yICAgICAgICAgICAgcTgsIHE4LCBxNAorICAgIHZlb3IgICAgICAgICAgICBxOSwgcTksIHE1CisgICAgdmVvciAgICAgICAgICAgIHExMCwgcTEwLCBxNgorICAgIHZlb3IgICAgICAgICAgICBxMTEsIHExMSwgcTcKKyAgICBhZGQgICAgICAgICAgICAgcjEsIHI0LCAjMHg0MAorICAgIGFkZCAgICAgICAgICAgICByOSwgcjQsICMweDYwCisgICAgYWRkICAgICAgICAgICAgIHI4LCByNCwgIzB4YzAKKyAgICBhZGQgICAgICAgICAgICAgcjMsIHI0LCAjMHhlMAorICAgIHZjbHouaTE2ICAgICAgICBxNCwgcTQKKyAgICB2Y2x6LmkxNiAgICAgICAgcTUsIHE1CisgICAgdmNsei5pMTYgICAgICAgIHE2LCBxNgorICAgIHZjbHouaTE2ICAgICAgICBxNywgcTcKKyAgICB2c3ViLmkxNiAgICAgICAgcTQsIHExNCwgcTQKKyAgICB2c3ViLmkxNiAgICAgICAgcTUsIHExNCwgcTUKKyAgICB2c3ViLmkxNiAgICAgICAgcTYsIHExNCwgcTYKKyAgICB2c3ViLmkxNiAgICAgICAgcTcsIHExNCwgcTcKKyAgICB2c3QxLjE2ICAgICAgICAge2Q4LCBkOSwgZDEwLCBkMTF9LCBbcjEsIDoyNTZdCisgICAgdnN0MS4xNiAgICAgICAgIHtkMTIsIGQxMywgZDE0LCBkMTV9LCBbcjksIDoyNTZdCisgICAgdnNobC5zMTYgICAgICAgIHE0LCBxMTUsIHE0CisgICAgdnNobC5zMTYgICAgICAgIHE1LCBxMTUsIHE1CisgICAgdnNobC5zMTYgICAgICAgIHE2LCBxMTUsIHE2CisgICAgdnNobC5zMTYgICAgICAgIHE3LCBxMTUsIHE3CisgICAgdnN1Yi5pMTYgICAgICAgIHE0LCBxNCwgcTE1CisgICAgdnN1Yi5pMTYgICAgICAgIHE1LCBxNSwgcTE1CisgICAgdnN1Yi5pMTYgICAgICAgIHE2LCBxNiwgcTE1CisgICAgdnN1Yi5pMTYgICAgICAgIHE3LCBxNywgcTE1CisgICAgdmFuZCAgICAgICAgICAgIHE4LCBxOCwgcTQKKyAgICB2YW5kICAgICAgICAgICAgcTksIHE5LCBxNQorICAgIHZhbmQgICAgICAgICAgICBxMTAsIHExMCwgcTYKKyAgICB2YW5kICAgICAgICAgICAgcTExLCBxMTEsIHE3CisgICAgdnN0MS4xNiAgICAgICAgIHtkMTYsIGQxNywgZDE4LCBkMTl9LCBbcjgsIDoyNTZdCisgICAgdnN0MS4xNiAgICAgICAgIHtkMjAsIGQyMSwgZDIyLCBkMjN9LCBbcjMsIDoyNTZdCisgICAgbGRyICAgICAgICAgICAgIHIxMiwgW3I3LCAjMHhjXSAgICAgICAvKiByMTIgPSBhY3RibCAqLworICAgIGFkZCAgICAgICAgICAgICByMSwgbHIsICMweDQwMCAgICAgICAgLyogcjEgPSBkY3RibC0+ZWh1ZnNpICovCisgICAgbW92ICAgICAgICAgICAgIHI5LCByMTIgICAgICAgICAgICAgICAvKiByOSA9IGFjdGJsICovCisgICAgYWRkICAgICAgICAgICAgIHI2LCByNCwgIzB4ODAgICAgICAgICAvKiByNiA9IHQyICovCisgICAgbGRyICAgICAgICAgICAgIHIxMSwgW3IwLCAjMHg4XSAgICAgICAvKiByMTEgPSBwdXRfYnVmZmVyICovCisgICAgbGRyICAgICAgICAgICAgIHI0LCBbcjAsICMweGNdICAgICAgICAvKiByNCAgPSBwdXRfYml0cyAqLworICAgIGxkcmggICAgICAgICAgICByMiwgW3I2LCAjLTEyOF0gICAgICAgLyogcjIgID0gbmJpdHMgKi8KKyAgICBsZHJoICAgICAgICAgICAgcjMsIFtyNl0gICAgICAgICAgICAgIC8qIHIzICA9IHRlbXAyICYgKCgoSkxPTkcpMSk8PG5iaXRzKSAtIDE7ICovCisgICAgbGRyICAgICAgICAgICAgIHIwLCBbbHIsIHIyLCBsc2wgIzJdCisgICAgbGRyYiAgICAgICAgICAgIHI1LCBbcjEsIHIyXQorICAgIHB1dF9iaXRzICAgICAgICByMTEsIHI0LCByMCwgcjUKKyAgICBjaGVja2J1ZjE1ICAgICAgcjEwLCByMTEsIHI0LCByNSwgcjAKKyAgICBwdXRfYml0cyAgICAgICAgcjExLCByNCwgcjMsIHIyCisgICAgY2hlY2tidWYxNSAgICAgIHIxMCwgcjExLCByNCwgcjUsIHIwCisgICAgbW92ICAgICAgICAgICAgIGxyLCByNiAgICAgICAgICAgICAgICAvKiBsciA9IHQyICovCisgICAgYWRkICAgICAgICAgICAgIHI1LCByOSwgIzB4NDAwICAgICAgICAvKiByNSA9IGFjdGJsLT5laHVmc2kgKi8KKyAgICBsZHJzYiAgICAgICAgICAgcjYsIFtyNSwgIzB4ZjBdICAgICAgIC8qIHI2ID0gYWN0YmwtPmVodWZzaVsweGYwXSAqLworICAgIHZlb3IgICAgICAgICAgICBxOCwgcTgsIHE4CisgICAgdmNlcS5pMTYgICAgICAgIHEwLCBxMCwgcTgKKyAgICB2Y2VxLmkxNiAgICAgICAgcTEsIHExLCBxOAorICAgIHZjZXEuaTE2ICAgICAgICBxMiwgcTIsIHE4CisgICAgdmNlcS5pMTYgICAgICAgIHEzLCBxMywgcTgKKyAgICB2Y2VxLmkxNiAgICAgICAgcTQsIHE0LCBxOAorICAgIHZjZXEuaTE2ICAgICAgICBxNSwgcTUsIHE4CisgICAgdmNlcS5pMTYgICAgICAgIHE2LCBxNiwgcTgKKyAgICB2Y2VxLmkxNiAgICAgICAgcTcsIHE3LCBxOAorICAgIHZtb3ZuLmkxNiAgICAgICBkMCwgcTAKKyAgICB2bW92bi5pMTYgICAgICAgZDIsIHExCisgICAgdm1vdm4uaTE2ICAgICAgIGQ0LCBxMgorICAgIHZtb3ZuLmkxNiAgICAgICBkNiwgcTMKKyAgICB2bW92bi5pMTYgICAgICAgZDgsIHE0CisgICAgdm1vdm4uaTE2ICAgICAgIGQxMCwgcTUKKyAgICB2bW92bi5pMTYgICAgICAgZDEyLCBxNgorICAgIHZtb3ZuLmkxNiAgICAgICBkMTQsIHE3CisgICAgdmFuZCAgICAgICAgICAgIGQwLCBkMCwgZDI2CisgICAgdmFuZCAgICAgICAgICAgIGQyLCBkMiwgZDI2CisgICAgdmFuZCAgICAgICAgICAgIGQ0LCBkNCwgZDI2CisgICAgdmFuZCAgICAgICAgICAgIGQ2LCBkNiwgZDI2CisgICAgdmFuZCAgICAgICAgICAgIGQ4LCBkOCwgZDI2CisgICAgdmFuZCAgICAgICAgICAgIGQxMCwgZDEwLCBkMjYKKyAgICB2YW5kICAgICAgICAgICAgZDEyLCBkMTIsIGQyNgorICAgIHZhbmQgICAgICAgICAgICBkMTQsIGQxNCwgZDI2CisgICAgdnBhZGQuaTggICAgICAgIGQwLCBkMCwgZDIKKyAgICB2cGFkZC5pOCAgICAgICAgZDQsIGQ0LCBkNgorICAgIHZwYWRkLmk4ICAgICAgICBkOCwgZDgsIGQxMAorICAgIHZwYWRkLmk4ICAgICAgICBkMTIsIGQxMiwgZDE0CisgICAgdnBhZGQuaTggICAgICAgIGQwLCBkMCwgZDQKKyAgICB2cGFkZC5pOCAgICAgICAgZDgsIGQ4LCBkMTIKKyAgICB2cGFkZC5pOCAgICAgICAgZDAsIGQwLCBkOAorICAgIHZtb3YuMzIgICAgICAgICByMSwgZDBbMV0KKyAgICB2bW92LjMyICAgICAgICAgcjgsIGQwWzBdCisgICAgbXZuICAgICAgICAgICAgIHIxLCByMQorICAgIG12biAgICAgICAgICAgICByOCwgcjgKKyAgICBsc3JzICAgICAgICAgICAgcjEsIHIxLCAjMHgxCisgICAgcnJ4ICAgICAgICAgICAgIHI4LCByOCAgICAgICAgICAgIC8qIHNoaWZ0IGluIGxhc3QgcjEgYml0IHdoaWxlIHNoaWZ0aW5nIG91dCBEQyBiaXQgKi8KKyAgICByYml0ICAgICAgICAgICAgcjEsIHIxICAgICAgICAgICAgLyogcjEgPSBpbmRleDEgKi8KKyAgICByYml0ICAgICAgICAgICAgcjgsIHI4ICAgICAgICAgICAgLyogcjggPSBpbmRleDAgKi8KKyAgICBsZHIgICAgICAgICAgICAgcjAsIFtyOSwgIzB4M2MwXSAgLyogcjAgPSBhY3RibC0+ZWh1ZmNvWzB4ZjBdICovCisgICAgc3RyICAgICAgICAgICAgIHIxLCBbc3AsICMweDE0XSAgIC8qIGluZGV4MSA+IHNwICsgMHgxNCAqLworICAgIGNtcCAgICAgICAgICAgICByOCwgIzB4MAorICAgIGJlcSAgICAgICAgICAgICA2ZgorMToKKyAgICBjbHogICAgICAgICAgICAgcjIsIHI4CisgICAgYWRkICAgICAgICAgICAgIGxyLCBsciwgcjIsIGxzbCAjMQorICAgIGxzbCAgICAgICAgICAgICByOCwgcjgsIHIyCisgICAgbGRyaCAgICAgICAgICAgIHIxLCBbbHIsICMtMTI2XQorMjoKKyAgICBjbXAgICAgICAgICAgICAgcjIsICMweDEwCisgICAgYmx0ICAgICAgICAgICAgIDNmCisgICAgc3ViICAgICAgICAgICAgIHIyLCByMiwgIzB4MTAKKyAgICBwdXRfYml0cyAgICAgICAgcjExLCByNCwgcjAsIHI2CisgICAgY21wICAgICAgICAgICAgIHI0LCAjMHgxMAorICAgIGJsdCAgICAgICAgICAgICAyYgorICAgIGVvciAgICAgICAgICAgICByMywgcjMsIHIzCisgICAgZW1pdF9ieXRlICAgICAgIHIxMCwgcjExLCByNCwgcjMsIHIxMgorICAgIGVtaXRfYnl0ZSAgICAgICByMTAsIHIxMSwgcjQsIHIzLCByMTIKKyAgICBiICAgICAgICAgICAgICAgMmIKKzM6CisgICAgYWRkICAgICAgICAgICAgIHIyLCByMSwgcjIsIGxzbCAjNAorICAgIGxkcmggICAgICAgICAgICByMywgW2xyLCAjMl0hCisgICAgbGRyICAgICAgICAgICAgIHIxMiwgW3I5LCByMiwgbHNsICMyXQorICAgIGxkcmIgICAgICAgICAgICByMiwgW3I1LCByMl0KKyAgICBwdXRfYml0cyAgICAgICAgcjExLCByNCwgcjEyLCByMgorICAgIGNoZWNrYnVmMTUgICAgICByMTAsIHIxMSwgcjQsIHIyLCByMTIKKyAgICBwdXRfYml0cyAgICAgICAgcjExLCByNCwgcjMsIHIxCisgICAgY2hlY2tidWYxNSAgICAgIHIxMCwgcjExLCByNCwgcjIsIHIxMgorICAgIGxzbHMgICAgICAgICAgICByOCwgcjgsICMweDEKKyAgICBibmUgICAgICAgICAgICAgMWIKKzY6CisgICAgYWRkICAgICAgICAgICAgIHIxMiwgc3AsICMweDIwICAgLyogcjEyID0gdDEgKi8KKyAgICBsZHIgICAgICAgICAgICAgcjgsIFtzcCwgIzB4MTRdICAvKiByOCA9IGluZGV4MSAqLworICAgIGFkZHMgICAgICAgICAgICByMTIsICMweGMwICAgICAgIC8qIHIxMiA9IHQyICsgKERDVFNJWkUyLzIpICovCisgICAgY21wICAgICAgICAgICAgIHI4LCAjMHgwCisgICAgYmVxICAgICAgICAgICAgIDZmCisgICAgY2x6ICAgICAgICAgICAgIHIyLCByOAorICAgIHN1YiAgICAgICAgICAgICByMTIsIHIxMiwgbHIKKyAgICBsc2wgICAgICAgICAgICAgcjgsIHI4LCByMgorICAgIGFkZCAgICAgICAgICAgICByMiwgcjIsIHIxMiwgbHNyICMxCisgICAgYWRkICAgICAgICAgICAgIGxyLCBsciwgcjIsIGxzbCAjMQorICAgIGIgICAgICAgICAgICAgICA3ZgorMToKKyAgICBjbHogICAgICAgICAgICAgcjIsIHI4CisgICAgYWRkICAgICAgICAgICAgIGxyLCBsciwgcjIsIGxzbCAjMQorICAgIGxzbCAgICAgICAgICAgICByOCwgcjgsIHIyCis3OgorICAgIGxkcmggICAgICAgICAgICByMSwgW2xyLCAjLTEyNl0KKzI6CisgICAgY21wICAgICAgICAgICAgIHIyLCAjMHgxMAorICAgIGJsdCAgICAgICAgICAgICAzZgorICAgIHN1YiAgICAgICAgICAgICByMiwgcjIsICMweDEwCisgICAgcHV0X2JpdHMgICAgICAgIHIxMSwgcjQsIHIwLCByNgorICAgIGNtcCAgICAgICAgICAgICByNCwgIzB4MTAKKyAgICBibHQgICAgICAgICAgICAgMmIKKyAgICBlb3IgICAgICAgICAgICAgcjMsIHIzLCByMworICAgIGVtaXRfYnl0ZSAgICAgICByMTAsIHIxMSwgcjQsIHIzLCByMTIKKyAgICBlbWl0X2J5dGUgICAgICAgcjEwLCByMTEsIHI0LCByMywgcjEyCisgICAgYiAgICAgICAgICAgICAgIDJiCiszOgorICAgIGFkZCAgICAgICAgICAgICByMiwgcjEsIHIyLCBsc2wgIzQKKyAgICBsZHJoICAgICAgICAgICAgcjMsIFtsciwgIzJdIQorICAgIGxkciAgICAgICAgICAgICByMTIsIFtyOSwgcjIsIGxzbCAjMl0KKyAgICBsZHJiICAgICAgICAgICAgcjIsIFtyNSwgcjJdCisgICAgcHV0X2JpdHMgICAgICAgIHIxMSwgcjQsIHIxMiwgcjIKKyAgICBjaGVja2J1ZjE1ICAgICAgcjEwLCByMTEsIHI0LCByMiwgcjEyCisgICAgcHV0X2JpdHMgICAgICAgIHIxMSwgcjQsIHIzLCByMQorICAgIGNoZWNrYnVmMTUgICAgICByMTAsIHIxMSwgcjQsIHIyLCByMTIKKyAgICBsc2xzICAgICAgICAgICAgcjgsIHI4LCAjMHgxCisgICAgYm5lICAgICAgICAgICAgIDFiCis2OgorICAgIGFkZCAgICAgICAgICAgICByMCwgc3AsICMweDIwCisgICAgYWRkICAgICAgICAgICAgIHIwLCAjMHhmZQorICAgIGNtcCAgICAgICAgICAgICBsciwgcjAKKyAgICBiaHMgICAgICAgICAgICAgMWYKKyAgICBsZHIgICAgICAgICAgICAgcjEsIFtyOV0KKyAgICBsZHJiICAgICAgICAgICAgcjAsIFtyNV0KKyAgICBwdXRfYml0cyAgICAgICAgcjExLCByNCwgcjEsIHIwCisgICAgY2hlY2tidWYxNSAgICAgIHIxMCwgcjExLCByNCwgcjAsIHIxCisxOgorICAgIGxkciAgICAgICAgICAgICByMTIsIFtzcCwgIzB4MThdCisgICAgc3RyICAgICAgICAgICAgIHIxMSwgW3IxMiwgIzB4OF0KKyAgICBzdHIgICAgICAgICAgICAgcjQsIFtyMTIsICMweGNdCisgICAgYWRkICAgICAgICAgICAgIHIwLCByMTAsICMweDEKKyAgICBhZGQgICAgICAgICAgICAgcjQsIHNwLCAjMHgxNDAKKyAgICB2bGQxLjY0ICAgICAgICAge2Q4LCBkOSwgZDEwLCBkMTF9LCBbcjQsIDoxMjhdIQorICAgIHZsZDEuNjQgICAgICAgICB7ZDEyLCBkMTMsIGQxNCwgZDE1fSwgW3I0LCA6MTI4XQorICAgIHN1YiAgICAgICAgICAgICByNCwgcjcsICMweDFjCisgICAgbW92ICAgICAgICAgICAgIHNwLCByNAorICAgIHBvcCAgICAgICAgICAgICB7cjQsIHI1LCByNiwgcjcsIHI4LCByOSwgcjEwLCByMTEsIHBjfQorCisucHVyZ2VtIGVtaXRfYnl0ZQorLnB1cmdlbSBwdXRfYml0cworLnB1cmdlbSBjaGVja2J1ZjE1CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybTY0L2pzaW1kLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybTY0L2pzaW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2YzdiOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvYXJtNjQvanNpbWQuYwpAQCAtMCwwICsxLDc5OCBAQAorLyoKKyAqIGpzaW1kX2FybTY0LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExLCAyMDEzLTIwMTQsIDIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzLgorICoKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJub3JtYWwiIHBvcnRpb25zCisgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCisgKiA2NC1iaXQgQVJNIGFyY2hpdGVjdHVyZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiLi4vLi4vamluY2x1ZGUuaCIKKyNpbmNsdWRlICIuLi8uLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWQuaCIKKyNpbmNsdWRlICIuLi8uLi9qZGN0LmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWRkY3QuaCIKKyNpbmNsdWRlICIuLi9qc2ltZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjZGVmaW5lIEpTSU1EX0ZBU1RMRDMgIDEKKyNkZWZpbmUgSlNJTURfRkFTVFNUMyAgMgorI2RlZmluZSBKU0lNRF9GQVNUVEJMICA0CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2ltZF9zdXBwb3J0ID0gfjA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNpbWRfaHVmZm1hbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IHNpbWRfZmVhdHVyZXMgPSBKU0lNRF9GQVNUTEQzIHwgSlNJTURfRkFTVFNUMyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0lNRF9GQVNUVEJMOworCisjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgZGVmaW5lZChfX0FORFJPSURfXykKKworI2RlZmluZSBTT01FV0hBVF9TQU5FX1BST0NfQ1BVSU5GT19TSVpFX0xJTUlUICAoMTAyNCAqIDEwMjQpCisKK0xPQ0FMKGludCkKK2NoZWNrX2NwdWluZm8oY2hhciAqYnVmZmVyLCBjb25zdCBjaGFyICpmaWVsZCwgY2hhciAqdmFsdWUpCit7CisgIGNoYXIgKnA7CisKKyAgaWYgKCp2YWx1ZSA9PSAwKQorICAgIHJldHVybiAwOworICBpZiAoc3RybmNtcChidWZmZXIsIGZpZWxkLCBzdHJsZW4oZmllbGQpKSAhPSAwKQorICAgIHJldHVybiAwOworICBidWZmZXIgKz0gc3RybGVuKGZpZWxkKTsKKyAgd2hpbGUgKGlzc3BhY2UoKmJ1ZmZlcikpCisgICAgYnVmZmVyKys7CisKKyAgLyogQ2hlY2sgaWYgJ3ZhbHVlJyBpcyBwcmVzZW50IGluIHRoZSBidWZmZXIgYXMgYSBzZXBhcmF0ZSB3b3JkICovCisgIHdoaWxlICgocCA9IHN0cnN0cihidWZmZXIsIHZhbHVlKSkpIHsKKyAgICBpZiAocCA+IGJ1ZmZlciAmJiAhaXNzcGFjZSgqKHAgLSAxKSkpIHsKKyAgICAgIGJ1ZmZlcisrOworICAgICAgY29udGludWU7CisgICAgfQorICAgIHAgKz0gc3RybGVuKHZhbHVlKTsKKyAgICBpZiAoKnAgIT0gMCAmJiAhaXNzcGFjZSgqcCkpIHsKKyAgICAgIGJ1ZmZlcisrOworICAgICAgY29udGludWU7CisgICAgfQorICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitMT0NBTChpbnQpCitwYXJzZV9wcm9jX2NwdWluZm8oaW50IGJ1ZnNpemUpCit7CisgIGNoYXIgKmJ1ZmZlciA9IChjaGFyICopbWFsbG9jKGJ1ZnNpemUpOworICBGSUxFICpmZDsKKworICBpZiAoIWJ1ZmZlcikKKyAgICByZXR1cm4gMDsKKworICBmZCA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKyAgaWYgKGZkKSB7CisgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgYnVmc2l6ZSwgZmQpKSB7CisgICAgICBpZiAoIXN0cmNocihidWZmZXIsICdcbicpICYmICFmZW9mKGZkKSkgeworICAgICAgICAvKiAiaW1wb3NzaWJsZSIgaGFwcGVuZWQgLSBpbnN1ZmZpY2llbnQgc2l6ZSBvZiB0aGUgYnVmZmVyISAqLworICAgICAgICBmY2xvc2UoZmQpOworICAgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKGNoZWNrX2NwdWluZm8oYnVmZmVyLCAiQ1BVIHBhcnQiLCAiMHhkMDMiKSB8fAorICAgICAgICAgIGNoZWNrX2NwdWluZm8oYnVmZmVyLCAiQ1BVIHBhcnQiLCAiMHhkMDciKSkKKyAgICAgICAgLyogVGhlIENvcnRleC1BNTMgaGFzIGEgc2xvdyB0YmwgaW1wbGVtZW50YXRpb24uICBXZSBjYW4gZ2FpbiBhIGZldworICAgICAgICAgICBwZXJjZW50IHNwZWVkdXAgYnkgZGlzYWJsaW5nIHRoZSB1c2Ugb2YgdGhhdCBpbnN0cnVjdGlvbi4gIFRoZQorICAgICAgICAgICBzcGVlZHVwIG9uIENvcnRleC1BNTcgaXMgbW9yZSBzdWJ0bGUgYnV0IHN0aWxsIG1lYXN1cmFibGUuICovCisgICAgICAgIHNpbWRfZmVhdHVyZXMgJj0gfkpTSU1EX0ZBU1RUQkw7CisgICAgICBlbHNlIGlmIChjaGVja19jcHVpbmZvKGJ1ZmZlciwgIkNQVSBwYXJ0IiwgIjB4MGExIikpCisgICAgICAgIC8qIFRoZSBTSU1EIHZlcnNpb24gb2YgSHVmZm1hbiBlbmNvZGluZyBpcyBzbG93ZXIgdGhhbiB0aGUgQyB2ZXJzaW9uIG9uCisgICAgICAgICAgIENhdml1bSBUaHVuZGVyWC4gIEFsc28sIGxkMyBhbmQgc3QzIGFyZSBhYnlzc21hbGx5IHNsb3cgb24gdGhhdAorICAgICAgICAgICBDUFUuICovCisgICAgICAgIHNpbWRfaHVmZm1hbiA9IHNpbWRfZmVhdHVyZXMgPSAwOworICAgIH0KKyAgICBmY2xvc2UoZmQpOworICB9CisgIGZyZWUoYnVmZmVyKTsKKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCisvKgorICogQ2hlY2sgd2hhdCBTSU1EIGFjY2VsZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiBGSVhNRTogVGhpcyBjb2RlIGlzIHJhY3kgdW5kZXIgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4KKyAqLworCisvKgorICogQVJNdjggYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IE5FT04gZXh0ZW5zaW9ucyBieSBkZWZhdWx0LgorICogSXQgaXMgbm8gbG9uZ2VyIG9wdGlvbmFsIGFzIGl0IHdhcyB3aXRoIEFSTXY3LgorICovCisKKworTE9DQUwodm9pZCkKK2luaXRfc2ltZCh2b2lkKQoreworI2lmbmRlZiBOT19HRVRFTlYKKyAgY2hhciAqZW52ID0gTlVMTDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IGRlZmluZWQoX19BTkRST0lEX18pCisgIGludCBidWZzaXplID0gMTAyNDsgLyogYW4gaW5pdGlhbCBndWVzcyBmb3IgdGhlIGxpbmUgYnVmZmVyIHNpemUgbGltaXQgKi8KKyNlbmRpZgorCisgIGlmIChzaW1kX3N1cHBvcnQgIT0gfjBVKQorICAgIHJldHVybjsKKworICBzaW1kX3N1cHBvcnQgPSAwOworCisgIHNpbWRfc3VwcG9ydCB8PSBKU0lNRF9ORU9OOworI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IGRlZmluZWQoX19BTkRST0lEX18pCisgIHdoaWxlICghcGFyc2VfcHJvY19jcHVpbmZvKGJ1ZnNpemUpKSB7CisgICAgYnVmc2l6ZSAqPSAyOworICAgIGlmIChidWZzaXplID4gU09NRVdIQVRfU0FORV9QUk9DX0NQVUlORk9fU0laRV9MSU1JVCkKKyAgICAgIGJyZWFrOworICB9CisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRFTlYKKyAgLyogRm9yY2UgZGlmZmVyZW50IHNldHRpbmdzIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VORU9OIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCA9IEpTSU1EX05FT047CisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VOT05FIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCA9IDA7CisgIGVudiA9IGdldGVudigiSlNJTURfTk9IVUZGRU5DIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfaHVmZm1hbiA9IDA7CisgIGVudiA9IGdldGVudigiSlNJTURfRkFTVExEMyIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX2ZlYXR1cmVzIHw9IEpTSU1EX0ZBU1RMRDM7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMCIpID09IDApKQorICAgIHNpbWRfZmVhdHVyZXMgJj0gfkpTSU1EX0ZBU1RMRDM7CisgIGVudiA9IGdldGVudigiSlNJTURfRkFTVFNUMyIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX2ZlYXR1cmVzIHw9IEpTSU1EX0ZBU1RTVDM7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMCIpID09IDApKQorICAgIHNpbWRfZmVhdHVyZXMgJj0gfkpTSU1EX0ZBU1RTVDM7CisjZW5kaWYKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfeWNjKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfZ3JheSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl95Y2NfcmdiKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl95Y2NfcmdiNTY1KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcmdiX3ljY19jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCpuZW9uZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGlmIChzaW1kX2ZlYXR1cmVzICYgSlNJTURfRkFTVExEMykKKyAgICAgIG5lb25mY3QgPSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfbmVvbjsKKyAgICBlbHNlCisgICAgICBuZW9uZmN0ID0ganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X25lb25fc2xvd2xkMzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIG5lb25mY3QgPSBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgaWYgKHNpbWRfZmVhdHVyZXMgJiBKU0lNRF9GQVNUTEQzKQorICAgICAgbmVvbmZjdCA9IGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9uZW9uOworICAgIGVsc2UKKyAgICAgIG5lb25mY3QgPSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbmVvbl9zbG93bGQzOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgbmVvbmZjdCA9IGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfbmVvbjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIG5lb25mY3QgPSBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBuZW9uZmN0ID0ganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGlmIChzaW1kX2ZlYXR1cmVzICYgSlNJTURfRkFTVExEMykKKyAgICAgIG5lb25mY3QgPSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfbmVvbjsKKyAgICBlbHNlCisgICAgICBuZW9uZmN0ID0ganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X25lb25fc2xvd2xkMzsKKyAgICBicmVhazsKKyAgfQorCisgIG5lb25mY3QoY2luZm8tPmltYWdlX3dpZHRoLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCpuZW9uZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBpZiAoc2ltZF9mZWF0dXJlcyAmIEpTSU1EX0ZBU1RTVDMpCisgICAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X25lb247CisgICAgZWxzZQorICAgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9uZW9uX3Nsb3dzdDM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGlmIChzaW1kX2ZlYXR1cmVzICYgSlNJTURfRkFTVFNUMykKKyAgICAgIG5lb25mY3QgPSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfbmVvbjsKKyAgICBlbHNlCisgICAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X25lb25fc2xvd3N0MzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIG5lb25mY3QgPSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X25lb247CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9uZW9uOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfbmVvbjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBpZiAoc2ltZF9mZWF0dXJlcyAmIEpTSU1EX0ZBU1RTVDMpCisgICAgICBuZW9uZmN0ID0ganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X25lb247CisgICAgZWxzZQorICAgICAgbmVvbmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9uZW9uX3Nsb3dzdDM7CisgICAgYnJlYWs7CisgIH0KKworICBuZW9uZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBqc2ltZF95Y2NfcmdiNTY1X2NvbnZlcnRfbmVvbihjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZG93bnNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfZG93bnNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9uZW9uKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfbmVvbihjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9jb252c2FtcCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fY29udnNhbXBfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpCit7CisgIGpzaW1kX2NvbnZzYW1wX25lb24oc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcF9mbG9hdChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9ORU9OKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfaWZhc3Qodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9mbG9hdCh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lzbG93KERDVEVMRU0gKmRhdGEpCit7CisgIGpzaW1kX2ZkY3RfaXNsb3dfbmVvbihkYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0KERDVEVMRU0gKmRhdGEpCit7CisgIGpzaW1kX2ZkY3RfaWZhc3RfbmVvbihkYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2Zsb2F0KEZBU1RfRkxPQVQgKmRhdGEpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemUoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSkKK3sKKyAganNpbWRfcXVhbnRpemVfbmVvbihjb2VmX2Jsb2NrLCBkaXZpc29ycywgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9xdWFudGl6ZV9mbG9hdChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywKKyAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0XzJ4Mih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0XzR4NCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBqc2ltZF9pZGN0XzJ4Ml9uZW9uKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF80eDQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF80eDRfbmVvbihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfaXNsb3codm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX05FT04pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pZmFzdCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElGQVNUX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKElGQVNUX1NDQUxFX0JJVFMgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaXNsb3coal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfaXNsb3dfbmVvbihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2lmYXN0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBqc2ltZF9pZGN0X2lmYXN0X25lb24oY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9mbG9hdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9odWZmX2VuY29kZV9vbmVfYmxvY2sodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTkVPTiAmJiBzaW1kX2h1ZmZtYW4pCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChKT0NURVQgKikKK2pzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkICpzdGF0ZSwgSk9DVEVUICpidWZmZXIsIEpDT0VGUFRSIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXN0X2RjX3ZhbCwgY19kZXJpdmVkX3RibCAqZGN0YmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kZXJpdmVkX3RibCAqYWN0YmwpCit7CisgIGlmIChzaW1kX2ZlYXR1cmVzICYgSlNJTURfRkFTVFRCTCkKKyAgICByZXR1cm4ganNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX25lb24oc3RhdGUsIGJ1ZmZlciwgYmxvY2ssIGxhc3RfZGNfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3RibCwgYWN0YmwpOworICBlbHNlCisgICAgcmV0dXJuIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uX3Nsb3d0Ymwoc3RhdGUsIGJ1ZmZlciwgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9kY192YWwsIGRjdGJsLCBhY3RibCk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsIHNpemVfdCAqemVyb2JpdHMpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmUoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cykKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybTY0L2pzaW1kX25lb24uUyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvYXJtNjQvanNpbWRfbmVvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOGUxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2FybTY0L2pzaW1kX25lb24uUwpAQCAtMCwwICsxLDM0MjcgQEAKKy8qCisgKiBBUk12OCBORU9OIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3I6ICBTaWFyaGVpIFNpYW1hc2hrYSA8c2lhcmhlaS5zaWFtYXNoa2FAbm9raWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQsIExpbmFybyBMaW1pdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEF1dGhvcjogIFJhZ2VzaCBSYWRoYWtyaXNobmFuIDxyYWdlc2guckBsaW5hcm8ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiwgMjAxOCwgTWF0dGhpZXUgRGFyYm9pcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIFNpYXJoZWkgU2lhbWFzaGthLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX0VMRl9fKQorLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCAiIiwgJXByb2diaXRzICAvKiBtYXJrIHN0YWNrIGFzIG5vbi1leGVjdXRhYmxlICovCisjZW5kaWYKKworLnRleHQKKworCisjZGVmaW5lIFJFU1BFQ1RfU1RSSUNUX0FMSUdOTUVOVCAgMQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU3VwcGxlbWVudGFyeSBtYWNybyBmb3Igc2V0dGluZyBmdW5jdGlvbiBhdHRyaWJ1dGVzICovCisubWFjcm8gYXNtX2Z1bmN0aW9uIGZuYW1lCisjaWZkZWYgX19BUFBMRV9fCisgICAgLnByaXZhdGVfZXh0ZXJuIF9cZm5hbWUKKyAgICAuZ2xvYmwgX1xmbmFtZQorX1xmbmFtZToKKyNlbHNlCisgICAgLmdsb2JhbCBcZm5hbWUKKyNpZmRlZiBfX0VMRl9fCisgICAgLmhpZGRlbiBcZm5hbWUKKyAgICAudHlwZSBcZm5hbWUsICVmdW5jdGlvbgorI2VuZGlmCitcZm5hbWU6CisjZW5kaWYKKy5lbmRtCisKKy8qIFRyYW5zcG9zZSBlbGVtZW50cyBvZiBzaW5nbGUgMTI4IGJpdCByZWdpc3RlcnMgKi8KKy5tYWNybyB0cmFuc3Bvc2Vfc2luZ2xlIHgwLCB4MSwgeGksIHhpbGVuLCBsaXRlcmFsCisgICAgaW5zICAgICAgICAgICAgIFx4aVx4aWxlblswXSwgXHgwXHhpbGVuWzBdCisgICAgaW5zICAgICAgICAgICAgIFx4MVx4aWxlblswXSwgXHgwXHhpbGVuWzFdCisgICAgdHJuMSAgICAgICAgICAgIFx4MFxsaXRlcmFsLCBceDBcbGl0ZXJhbCwgXHgxXGxpdGVyYWwKKyAgICB0cm4yICAgICAgICAgICAgXHgxXGxpdGVyYWwsIFx4aVxsaXRlcmFsLCBceDFcbGl0ZXJhbAorLmVuZG0KKworLyogVHJhbnNwb3NlIGVsZW1lbnRzIG9mIDIgZGlmZmVybmV0IHJlZ2lzdGVycyAqLworLm1hY3JvIHRyYW5zcG9zZSB4MCwgeDEsIHhpLCB4aWxlbiwgbGl0ZXJhbAorICAgIG1vdiAgICAgICAgICAgICBceGlceGlsZW4sIFx4MFx4aWxlbgorICAgIHRybjEgICAgICAgICAgICBceDBcbGl0ZXJhbCwgXHgwXGxpdGVyYWwsIFx4MVxsaXRlcmFsCisgICAgdHJuMiAgICAgICAgICAgIFx4MVxsaXRlcmFsLCBceGlcbGl0ZXJhbCwgXHgxXGxpdGVyYWwKKy5lbmRtCisKKy8qIFRyYW5zcG9zZSBhIGJsb2NrIG9mIDR4NCBjb2VmZmljaWVudHMgaW4gZm91ciA2NC1iaXQgcmVnaXN0ZXJzICovCisubWFjcm8gdHJhbnNwb3NlXzR4NF8zMiB4MCwgeDBsZW4sIHgxLCB4MWxlbiwgeDIsIHgybGVuLCB4MywgeDNsZW4sIHhpLCB4aWxlbgorICAgIG1vdiAgICAgICAgICAgICBceGlceGlsZW4sIFx4MFx4aWxlbgorICAgIHRybjEgICAgICAgICAgICBceDBceDBsZW4sIFx4MFx4MGxlbiwgXHgyXHgybGVuCisgICAgdHJuMiAgICAgICAgICAgIFx4Mlx4MmxlbiwgXHhpXHgwbGVuLCBceDJceDJsZW4KKyAgICBtb3YgICAgICAgICAgICAgXHhpXHhpbGVuLCBceDFceGlsZW4KKyAgICB0cm4xICAgICAgICAgICAgXHgxXHgxbGVuLCBceDFceDFsZW4sIFx4M1x4M2xlbgorICAgIHRybjIgICAgICAgICAgICBceDNceDNsZW4sIFx4aVx4MWxlbiwgXHgzXHgzbGVuCisuZW5kbQorCisubWFjcm8gdHJhbnNwb3NlXzR4NF8xNiB4MCwgeDBsZW4sIHgxLCB4MWxlbiwgeDIsIHgybGVuLCB4MywgeDNsZW4sIHhpLCB4aWxlbgorICAgIG1vdiAgICAgICAgICAgICBceGlceGlsZW4sIFx4MFx4aWxlbgorICAgIHRybjEgICAgICAgICAgICBceDBceDBsZW4sIFx4MFx4MGxlbiwgXHgxXHgxbGVuCisgICAgdHJuMiAgICAgICAgICAgIFx4MVx4MmxlbiwgXHhpXHgwbGVuLCBceDFceDJsZW4KKyAgICBtb3YgICAgICAgICAgICAgXHhpXHhpbGVuLCBceDJceGlsZW4KKyAgICB0cm4xICAgICAgICAgICAgXHgyXHgybGVuLCBceDJceDJsZW4sIFx4M1x4M2xlbgorICAgIHRybjIgICAgICAgICAgICBceDNceDJsZW4sIFx4aVx4MWxlbiwgXHgzXHgzbGVuCisuZW5kbQorCisubWFjcm8gdHJhbnNwb3NlXzR4NCB4MCwgeDEsIHgyLCB4MywgeDUKKyAgICB0cmFuc3Bvc2VfNHg0XzE2IFx4MCwgLjRoLCBceDEsIC40aCwgXHgyLCAuNGgsIFx4MywgLjRoLCBceDUsIC4xNmIKKyAgICB0cmFuc3Bvc2VfNHg0XzMyIFx4MCwgLjJzLCBceDEsIC4ycywgXHgyLCAuMnMsIFx4MywgLjJzLCBceDUsIC4xNmIKKy5lbmRtCisKKy5tYWNybyB0cmFuc3Bvc2VfOHg4IGwwLCBsMSwgbDIsIGwzLCBsNCwgbDUsIGw2LCBsNywgdDAsIHQxLCB0MiwgdDMKKyAgICB0cm4xICAgICAgICAgICAgXHQwXCgpLjhoLCBcbDBcKCkuOGgsIFxsMVwoKS44aAorICAgIHRybjEgICAgICAgICAgICBcdDFcKCkuOGgsIFxsMlwoKS44aCwgXGwzXCgpLjhoCisgICAgdHJuMSAgICAgICAgICAgIFx0MlwoKS44aCwgXGw0XCgpLjhoLCBcbDVcKCkuOGgKKyAgICB0cm4xICAgICAgICAgICAgXHQzXCgpLjhoLCBcbDZcKCkuOGgsIFxsN1woKS44aAorICAgIHRybjIgICAgICAgICAgICBcbDFcKCkuOGgsIFxsMFwoKS44aCwgXGwxXCgpLjhoCisgICAgdHJuMiAgICAgICAgICAgIFxsM1woKS44aCwgXGwyXCgpLjhoLCBcbDNcKCkuOGgKKyAgICB0cm4yICAgICAgICAgICAgXGw1XCgpLjhoLCBcbDRcKCkuOGgsIFxsNVwoKS44aAorICAgIHRybjIgICAgICAgICAgICBcbDdcKCkuOGgsIFxsNlwoKS44aCwgXGw3XCgpLjhoCisKKyAgICB0cm4xICAgICAgICAgICAgXGw0XCgpLjRzLCBcdDJcKCkuNHMsIFx0M1woKS40cworICAgIHRybjIgICAgICAgICAgICBcdDNcKCkuNHMsIFx0MlwoKS40cywgXHQzXCgpLjRzCisgICAgdHJuMSAgICAgICAgICAgIFx0MlwoKS40cywgXHQwXCgpLjRzLCBcdDFcKCkuNHMKKyAgICB0cm4yICAgICAgICAgICAgXGwyXCgpLjRzLCBcdDBcKCkuNHMsIFx0MVwoKS40cworICAgIHRybjEgICAgICAgICAgICBcdDBcKCkuNHMsIFxsMVwoKS40cywgXGwzXCgpLjRzCisgICAgdHJuMiAgICAgICAgICAgIFxsM1woKS40cywgXGwxXCgpLjRzLCBcbDNcKCkuNHMKKyAgICB0cm4yICAgICAgICAgICAgXHQxXCgpLjRzLCBcbDVcKCkuNHMsIFxsN1woKS40cworICAgIHRybjEgICAgICAgICAgICBcbDVcKCkuNHMsIFxsNVwoKS40cywgXGw3XCgpLjRzCisKKyAgICB0cm4yICAgICAgICAgICAgXGw2XCgpLjJkLCBcbDJcKCkuMmQsIFx0M1woKS4yZAorICAgIHRybjEgICAgICAgICAgICBcbDBcKCkuMmQsIFx0MlwoKS4yZCwgXGw0XCgpLjJkCisgICAgdHJuMSAgICAgICAgICAgIFxsMVwoKS4yZCwgXHQwXCgpLjJkLCBcbDVcKCkuMmQKKyAgICB0cm4yICAgICAgICAgICAgXGw3XCgpLjJkLCBcbDNcKCkuMmQsIFx0MVwoKS4yZAorICAgIHRybjEgICAgICAgICAgICBcbDJcKCkuMmQsIFxsMlwoKS4yZCwgXHQzXCgpLjJkCisgICAgdHJuMiAgICAgICAgICAgIFxsNFwoKS4yZCwgXHQyXCgpLjJkLCBcbDRcKCkuMmQKKyAgICB0cm4xICAgICAgICAgICAgXGwzXCgpLjJkLCBcbDNcKCkuMmQsIFx0MVwoKS4yZAorICAgIHRybjIgICAgICAgICAgICBcbDVcKCkuMmQsIFx0MFwoKS4yZCwgXGw1XCgpLjJkCisuZW5kbQorCisKKyNkZWZpbmUgQ0VOVEVSSlNBTVBMRSAgMTI4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCisgKgorICogR0xPQkFMKHZvaWQpCisgKiBqc2ltZF9pZGN0X2lzbG93X25lb24odm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICogICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICovCisKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMgorCisjZGVmaW5lIEZfMF8yOTggICAyNDQ2ICAvKiBGSVgoMC4yOTg2MzEzMzYpICovCisjZGVmaW5lIEZfMF8zOTAgICAzMTk2ICAvKiBGSVgoMC4zOTAxODA2NDQpICovCisjZGVmaW5lIEZfMF81NDEgICA0NDMzICAvKiBGSVgoMC41NDExOTYxMDApICovCisjZGVmaW5lIEZfMF83NjUgICA2MjcwICAvKiBGSVgoMC43NjUzNjY4NjUpICovCisjZGVmaW5lIEZfMF84OTkgICA3MzczICAvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZfMV8xNzUgICA5NjMzICAvKiBGSVgoMS4xNzU4NzU2MDIpICovCisjZGVmaW5lIEZfMV81MDEgIDEyMjk5ICAvKiBGSVgoMS41MDEzMjExMTApICovCisjZGVmaW5lIEZfMV84NDcgIDE1MTM3ICAvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZfMV85NjEgIDE2MDY5ICAvKiBGSVgoMS45NjE1NzA1NjApICovCisjZGVmaW5lIEZfMl8wNTMgIDE2ODE5ICAvKiBGSVgoMi4wNTMxMTk4NjkpICovCisjZGVmaW5lIEZfMl81NjIgIDIwOTk1ICAvKiBGSVgoMi41NjI5MTU0NDcpICovCisjZGVmaW5lIEZfM18wNzIgIDI1MTcyICAvKiBGSVgoMy4wNzI3MTEwMjYpICovCisKKy5iYWxpZ24gMTYKK0xqc2ltZF9pZGN0X2lzbG93X25lb25fY29uc3RzOgorICAuc2hvcnQgRl8wXzI5OAorICAuc2hvcnQgLUZfMF8zOTAKKyAgLnNob3J0IEZfMF81NDEKKyAgLnNob3J0IEZfMF83NjUKKyAgLnNob3J0IC0gRl8wXzg5OQorICAuc2hvcnQgRl8xXzE3NQorICAuc2hvcnQgRl8xXzUwMQorICAuc2hvcnQgLSBGXzFfODQ3CisgIC5zaG9ydCAtIEZfMV85NjEKKyAgLnNob3J0IEZfMl8wNTMKKyAgLnNob3J0IC0gRl8yXzU2MgorICAuc2hvcnQgRl8zXzA3MgorICAuc2hvcnQgMCAgICAgICAgICAvKiBwYWRkaW5nICovCisgIC5zaG9ydCAwCisgIC5zaG9ydCAwCisgIC5zaG9ydCAwCisKKyN1bmRlZiBGXzBfMjk4CisjdW5kZWYgRl8wXzM5MAorI3VuZGVmIEZfMF81NDEKKyN1bmRlZiBGXzBfNzY1CisjdW5kZWYgRl8wXzg5OQorI3VuZGVmIEZfMV8xNzUKKyN1bmRlZiBGXzFfNTAxCisjdW5kZWYgRl8xXzg0NworI3VuZGVmIEZfMV85NjEKKyN1bmRlZiBGXzJfMDUzCisjdW5kZWYgRl8yXzU2MgorI3VuZGVmIEZfM18wNzIKKworI2RlZmluZSBYRklYX1BfMF8yOTggIHYwLmhbMF0KKyNkZWZpbmUgWEZJWF9OXzBfMzkwICB2MC5oWzFdCisjZGVmaW5lIFhGSVhfUF8wXzU0MSAgdjAuaFsyXQorI2RlZmluZSBYRklYX1BfMF83NjUgIHYwLmhbM10KKyNkZWZpbmUgWEZJWF9OXzBfODk5ICB2MC5oWzRdCisjZGVmaW5lIFhGSVhfUF8xXzE3NSAgdjAuaFs1XQorI2RlZmluZSBYRklYX1BfMV81MDEgIHYwLmhbNl0KKyNkZWZpbmUgWEZJWF9OXzFfODQ3ICB2MC5oWzddCisjZGVmaW5lIFhGSVhfTl8xXzk2MSAgdjEuaFswXQorI2RlZmluZSBYRklYX1BfMl8wNTMgIHYxLmhbMV0KKyNkZWZpbmUgWEZJWF9OXzJfNTYyICB2MS5oWzJdCisjZGVmaW5lIFhGSVhfUF8zXzA3MiAgdjEuaFszXQorCithc21fZnVuY3Rpb24ganNpbWRfaWRjdF9pc2xvd19uZW9uCisgICAgRENUX1RBQkxFICAgICAgIC5yZXEgeDAKKyAgICBDT0VGX0JMT0NLICAgICAgLnJlcSB4MQorICAgIE9VVFBVVF9CVUYgICAgICAucmVxIHgyCisgICAgT1VUUFVUX0NPTCAgICAgIC5yZXEgeDMKKyAgICBUTVAxICAgICAgICAgICAgLnJlcSB4MAorICAgIFRNUDIgICAgICAgICAgICAucmVxIHgxCisgICAgVE1QMyAgICAgICAgICAgIC5yZXEgeDkKKyAgICBUTVA0ICAgICAgICAgICAgLnJlcSB4MTAKKyAgICBUTVA1ICAgICAgICAgICAgLnJlcSB4MTEKKyAgICBUTVA2ICAgICAgICAgICAgLnJlcSB4MTIKKyAgICBUTVA3ICAgICAgICAgICAgLnJlcSB4MTMKKyAgICBUTVA4ICAgICAgICAgICAgLnJlcSB4MTQKKworICAgIC8qIE9VVFBVVF9DT0wgaXMgYSBKRElNRU5TSU9OICh1bnNpZ25lZCBpbnQpIGFyZ3VtZW50LCBzbyB0aGUgQUJJIGRvZXNuJ3QKKyAgICAgICBndWFyYW50ZWUgdGhhdCB0aGUgdXBwZXIgKHVudXNlZCkgMzIgYml0cyBvZiB4MyBhcmUgdmFsaWQuICBUaGlzCisgICAgICAgaW5zdHJ1Y3Rpb24gZW5zdXJlcyB0aGF0IHRob3NlIGJpdHMgYXJlIHNldCB0byB6ZXJvLiAqLworICAgIHV4dHcgeDMsIHczCisKKyAgICBzdWIgICAgICAgICAgICAgc3AsIHNwLCAjNjQKKyAgICBhZHIgICAgICAgICAgICAgeDE1LCBManNpbWRfaWRjdF9pc2xvd19uZW9uX2NvbnN0cworICAgIG1vdiAgICAgICAgICAgICB4MTAsIHNwCisgICAgc3QxICAgICAgICAgICAgIHt2OC44YiwgdjkuOGIsIHYxMC44YiwgdjExLjhifSwgW3gxMF0sICMzMgorICAgIHN0MSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3gxMF0sICMzMgorICAgIGxkMSAgICAgICAgICAgICB7djAuOGgsIHYxLjhofSwgW3gxNV0KKyAgICBsZDEgICAgICAgICAgICAge3YyLjhoLCB2My44aCwgdjQuOGgsIHY1LjhofSwgW0NPRUZfQkxPQ0tdLCAjNjQKKyAgICBsZDEgICAgICAgICAgICAge3YxOC44aCwgdjE5LjhoLCB2MjAuOGgsIHYyMS44aH0sIFtEQ1RfVEFCTEVdLCAjNjQKKyAgICBsZDEgICAgICAgICAgICAge3Y2LjhoLCB2Ny44aCwgdjguOGgsIHY5LjhofSwgW0NPRUZfQkxPQ0tdLCAjNjQKKyAgICBsZDEgICAgICAgICAgICAge3YyMi44aCwgdjIzLjhoLCB2MjQuOGgsIHYyNS44aH0sIFtEQ1RfVEFCTEVdLCAjNjQKKworICAgIGNtZXEgICAgICAgICAgICB2MTYuOGgsIHYzLjhoLCAjMAorICAgIGNtZXEgICAgICAgICAgICB2MjYuOGgsIHY0LjhoLCAjMAorICAgIGNtZXEgICAgICAgICAgICB2MjcuOGgsIHY1LjhoLCAjMAorICAgIGNtZXEgICAgICAgICAgICB2MjguOGgsIHY2LjhoLCAjMAorICAgIGNtZXEgICAgICAgICAgICB2MjkuOGgsIHY3LjhoLCAjMAorICAgIGNtZXEgICAgICAgICAgICB2MzAuOGgsIHY4LjhoLCAjMAorICAgIGNtZXEgICAgICAgICAgICB2MzEuOGgsIHY5LjhoLCAjMAorCisgICAgYW5kICAgICAgICAgICAgIHYxMC4xNmIsIHYxNi4xNmIsIHYyNi4xNmIKKyAgICBhbmQgICAgICAgICAgICAgdjExLjE2YiwgdjI3LjE2YiwgdjI4LjE2YgorICAgIGFuZCAgICAgICAgICAgICB2MTIuMTZiLCB2MjkuMTZiLCB2MzAuMTZiCisgICAgYW5kICAgICAgICAgICAgIHYxMy4xNmIsIHYzMS4xNmIsIHYxMC4xNmIKKyAgICBhbmQgICAgICAgICAgICAgdjE0LjE2YiwgdjExLjE2YiwgdjEyLjE2YgorICAgIG11bCAgICAgICAgICAgICB2Mi44aCwgdjIuOGgsIHYxOC44aAorICAgIGFuZCAgICAgICAgICAgICB2MTUuMTZiLCB2MTMuMTZiLCB2MTQuMTZiCisgICAgc2hsICAgICAgICAgICAgIHYxMC44aCwgdjIuOGgsICMoUEFTUzFfQklUUykKKyAgICBzcXh0biAgICAgICAgICAgdjE2LjhiLCB2MTUuOGgKKyAgICBtb3YgICAgICAgICAgICAgVE1QMSwgdjE2LmRbMF0KKyAgICBtdm4gICAgICAgICAgICAgVE1QMiwgVE1QMQorCisgICAgY2JueiAgICAgICAgICAgIFRNUDIsIDJmCisgICAgLyogY2FzZSBhbGwgQUMgY29lZmZzIGFyZSB6ZXJvcyAqLworICAgIGR1cCAgICAgICAgICAgICB2Mi4yZCwgdjEwLmRbMF0KKyAgICBkdXAgICAgICAgICAgICAgdjYuMmQsIHYxMC5kWzFdCisgICAgbW92ICAgICAgICAgICAgIHYzLjE2YiwgdjIuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY3LjE2YiwgdjYuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY0LjE2YiwgdjIuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY4LjE2YiwgdjYuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY1LjE2YiwgdjIuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY5LjE2YiwgdjYuMTZiCisxOgorICAgIC8qIGZvciB0aGlzIHRyYW5zcG9zZSwgd2Ugc2hvdWxkIG9yZ2FuaXNlIGRhdGEgbGlrZSB0aGlzOgorICAgICAqIDAwLCAwMSwgMDIsIDAzLCA0MCwgNDEsIDQyLCA0MworICAgICAqIDEwLCAxMSwgMTIsIDEzLCA1MCwgNTEsIDUyLCA1MworICAgICAqIDIwLCAyMSwgMjIsIDIzLCA2MCwgNjEsIDYyLCA2MworICAgICAqIDMwLCAzMSwgMzIsIDMzLCA3MCwgNzEsIDcyLCA3MworICAgICAqIDA0LCAwNSwgMDYsIDA3LCA0NCwgNDUsIDQ2LCA0NworICAgICAqIDE0LCAxNSwgMTYsIDE3LCA1NCwgNTUsIDU2LCA1NworICAgICAqIDI0LCAyNSwgMjYsIDI3LCA2NCwgNjUsIDY2LCA2NworICAgICAqIDM0LCAzNSwgMzYsIDM3LCA3NCwgNzUsIDc2LCA3NworICAgICAqLworICAgIHRybjEgICAgICAgICAgICB2MjguOGgsIHYyLjhoLCB2My44aAorICAgIHRybjEgICAgICAgICAgICB2MjkuOGgsIHY0LjhoLCB2NS44aAorICAgIHRybjEgICAgICAgICAgICB2MzAuOGgsIHY2LjhoLCB2Ny44aAorICAgIHRybjEgICAgICAgICAgICB2MzEuOGgsIHY4LjhoLCB2OS44aAorICAgIHRybjIgICAgICAgICAgICB2MTYuOGgsIHYyLjhoLCB2My44aAorICAgIHRybjIgICAgICAgICAgICB2MTcuOGgsIHY0LjhoLCB2NS44aAorICAgIHRybjIgICAgICAgICAgICB2MTguOGgsIHY2LjhoLCB2Ny44aAorICAgIHRybjIgICAgICAgICAgICB2MTkuOGgsIHY4LjhoLCB2OS44aAorICAgIHRybjEgICAgICAgICAgICB2Mi40cywgdjI4LjRzLCB2MjkuNHMKKyAgICB0cm4xICAgICAgICAgICAgdjYuNHMsIHYzMC40cywgdjMxLjRzCisgICAgdHJuMSAgICAgICAgICAgIHYzLjRzLCB2MTYuNHMsIHYxNy40cworICAgIHRybjEgICAgICAgICAgICB2Ny40cywgdjE4LjRzLCB2MTkuNHMKKyAgICB0cm4yICAgICAgICAgICAgdjQuNHMsIHYyOC40cywgdjI5LjRzCisgICAgdHJuMiAgICAgICAgICAgIHY4LjRzLCB2MzAuNHMsIHYzMS40cworICAgIHRybjIgICAgICAgICAgICB2NS40cywgdjE2LjRzLCB2MTcuNHMKKyAgICB0cm4yICAgICAgICAgICAgdjkuNHMsIHYxOC40cywgdjE5LjRzCisgICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLworICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHY0LjhoLCB2OC44aCAgICAgICAgICAgLyogejIgKyB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pICovCisgICAgYWRkICAgICAgICAgICAgIHYyMi44aCwgdjIuOGgsIHY2LjhoICAgICAgICAgICAvKiB6MiArIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjE5LjRzLCB2MTguOGgsIFhGSVhfUF8wXzU0MSAgIC8qIHoxaCB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7ICovCisgICAgc3ViICAgICAgICAgICAgIHYyNi44aCwgdjIuOGgsIHY2LjhoICAgICAgICAgICAvKiB6MiAtIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKSAtIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSkgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjE4LjRzLCB2MTguNGgsIFhGSVhfUF8wXzU0MSAgIC8qIHoxbCB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7ICovCisgICAgc3NobGwyICAgICAgICAgIHYyMy40cywgdjIyLjhoLCAjKENPTlNUX0JJVFMpICAvKiB0bXAwaCB0bXAwID0gTEVGVF9TSElGVCh6MiArIHozLCBDT05TVF9CSVRTKTsgKi8KKyAgICBtb3YgICAgICAgICAgICAgdjIxLjE2YiwgdjE5LjE2YiAgICAgICAgICAgICAgIC8qIHRtcDMgPSB6MSAqLworICAgIG1vdiAgICAgICAgICAgICB2MjAuMTZiLCB2MTguMTZiICAgICAgICAgICAgICAgLyogdG1wMyA9IHoxICovCisgICAgc21sYWwyICAgICAgICAgIHYxOS40cywgdjguOGgsIFhGSVhfTl8xXzg0NyAgICAvKiB0bXAyaCB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLUZJWF8xXzg0Nzc1OTA2NSk7ICovCisgICAgc21sYWwgICAgICAgICAgIHYxOC40cywgdjguNGgsIFhGSVhfTl8xXzg0NyAgICAvKiB0bXAybCB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLUZJWF8xXzg0Nzc1OTA2NSk7ICovCisgICAgc3NobGwyICAgICAgICAgIHYyNy40cywgdjI2LjhoLCAjKENPTlNUX0JJVFMpICAvKiB0bXAxaCB0bXAxID0gTEVGVF9TSElGVCh6MiAtIHozLCBDT05TVF9CSVRTKTsgKi8KKyAgICBzbWxhbDIgICAgICAgICAgdjIxLjRzLCB2NC44aCwgWEZJWF9QXzBfNzY1ICAgIC8qIHRtcDNoIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOyAqLworICAgIHNtbGFsICAgICAgICAgICB2MjAuNHMsIHY0LjRoLCBYRklYX1BfMF83NjUgICAgLyogdG1wM2wgdG1wMyA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7ICovCisgICAgc3NobGwgICAgICAgICAgIHYyMi40cywgdjIyLjRoLCAjKENPTlNUX0JJVFMpICAvKiB0bXAwbCB0bXAwID0gTEVGVF9TSElGVCh6MiArIHozLCBDT05TVF9CSVRTKTsgKi8KKyAgICBzc2hsbCAgICAgICAgICAgdjI2LjRzLCB2MjYuNGgsICMoQ09OU1RfQklUUykgIC8qIHRtcDFsIHRtcDEgPSBMRUZUX1NISUZUKHoyIC0gejMsIENPTlNUX0JJVFMpOyAqLworICAgIGFkZCAgICAgICAgICAgICB2Mi40cywgdjIyLjRzLCB2MjAuNHMgICAgICAgICAgLyogdG1wMTBsIHRtcDEwID0gdG1wMCArIHRtcDM7ICovCisgICAgc3ViICAgICAgICAgICAgIHY2LjRzLCB2MjIuNHMsIHYyMC40cyAgICAgICAgICAvKiB0bXAxM2wgdG1wMTMgPSB0bXAwIC0gdG1wMzsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjguNHMsIHYyNi40cywgdjE4LjRzICAgICAgICAgIC8qIHRtcDExbCB0bXAxMSA9IHRtcDEgKyB0bXAyOyAqLworICAgIHN1YiAgICAgICAgICAgICB2NC40cywgdjI2LjRzLCB2MTguNHMgICAgICAgICAgLyogdG1wMTJsIHRtcDEyID0gdG1wMSAtIHRtcDI7ICovCisgICAgYWRkICAgICAgICAgICAgIHYyOC40cywgdjIzLjRzLCB2MjEuNHMgICAgICAgICAvKiB0bXAxMGggdG1wMTAgPSB0bXAwICsgdG1wMzsgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjMxLjRzLCB2MjMuNHMsIHYyMS40cyAgICAgICAgIC8qIHRtcDEzaCB0bXAxMyA9IHRtcDAgLSB0bXAzOyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjkuNHMsIHYyNy40cywgdjE5LjRzICAgICAgICAgLyogdG1wMTFoIHRtcDExID0gdG1wMSArIHRtcDI7ICovCisgICAgc3ViICAgICAgICAgICAgIHYzMC40cywgdjI3LjRzLCB2MTkuNHMgICAgICAgICAvKiB0bXAxMmggdG1wMTIgPSB0bXAxIC0gdG1wMjsgKi8KKworICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgODsgdGhlIG1hdHJpeCBpcyB1bml0YXJ5IGFuZCBoZW5jZSBpdHMKKyAgICAgKiB0cmFuc3Bvc2UgaXMgaXRzIGludmVyc2UuICBpMC4uaTMgYXJlIHk3LHk1LHkzLHkxIHJlc3BlY3RpdmVseS4KKyAgICAgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MjIuOGgsIHY5LjhoLCB2NS44aCAgICAvKiB6MyA9IHRtcDAgKyB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI0LjhoLCB2Ny44aCwgdjMuOGggICAgLyogejQgPSB0bXAxICsgdG1wMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pICovCisgICAgYWRkICAgICAgICAgICAgIHYxOC44aCwgdjkuOGgsIHYzLjhoICAgIC8qIHoxID0gdG1wMCArIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pICsgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjAuOGgsIHY3LjhoLCB2NS44aCAgICAvKiB6MiA9IHRtcDEgKyB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjhoLCB2MjIuOGgsIHYyNC44aCAgLyogejUgPSB6MyArIHo0ICovCisKKyAgICBzbXVsbDIgICAgICAgICAgdjExLjRzLCB2OS44aCwgWEZJWF9QXzBfMjk4ICAgLyogdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWF8wXzI5ODYzMTMzNikgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjEzLjRzLCB2Ny44aCwgWEZJWF9QXzJfMDUzICAgLyogdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjE1LjRzLCB2NS44aCwgWEZJWF9QXzNfMDcyICAgLyogdG1wMiA9IE1VTFRJUExZKHRtcDIsIEZJWF8zXzA3MjcxMTAyNikgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjE3LjRzLCB2My44aCwgWEZJWF9QXzFfNTAxICAgLyogdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjI3LjRzLCB2MjYuOGgsIFhGSVhfUF8xXzE3NSAgLyogejVoIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKSAqLworICAgIHNtdWxsMiAgICAgICAgICB2MjMuNHMsIHYyMi44aCwgWEZJWF9OXzFfOTYxICAvKiB6MyA9IE1VTFRJUExZKHozLCAtRklYXzFfOTYxNTcwNTYwKSAqLworICAgIHNtdWxsMiAgICAgICAgICB2MjUuNHMsIHYyNC44aCwgWEZJWF9OXzBfMzkwICAvKiB6NCA9IE1VTFRJUExZKHo0LCAtRklYXzBfMzkwMTgwNjQ0KSAqLworICAgIHNtdWxsMiAgICAgICAgICB2MTkuNHMsIHYxOC44aCwgWEZJWF9OXzBfODk5ICAvKiB6MSA9IE1VTFRJUExZKHoxLCAtRklYXzBfODk5OTc2MjIzKSAqLworICAgIHNtdWxsMiAgICAgICAgICB2MjEuNHMsIHYyMC44aCwgWEZJWF9OXzJfNTYyICAvKiB6MiA9IE1VTFRJUExZKHoyLCAtRklYXzJfNTYyOTE1NDQ3KSAqLworCisgICAgc211bGwgICAgICAgICAgIHYxMC40cywgdjkuNGgsIFhGSVhfUF8wXzI5OCAgIC8qIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpICovCisgICAgc211bGwgICAgICAgICAgIHYxMi40cywgdjcuNGgsIFhGSVhfUF8yXzA1MyAgIC8qIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpICovCisgICAgc211bGwgICAgICAgICAgIHYxNC40cywgdjUuNGgsIFhGSVhfUF8zXzA3MiAgIC8qIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpICovCisgICAgc211bGwgICAgICAgICAgIHYxNi40cywgdjMuNGgsIFhGSVhfUF8xXzUwMSAgIC8qIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApICovCisgICAgc211bGwgICAgICAgICAgIHYyNi40cywgdjI2LjRoLCBYRklYX1BfMV8xNzUgIC8qIHo1bCB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMikgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjIyLjRzLCB2MjIuNGgsIFhGSVhfTl8xXzk2MSAgLyogejMgPSBNVUxUSVBMWSh6MywgLUZJWF8xXzk2MTU3MDU2MCkgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjI0LjRzLCB2MjQuNGgsIFhGSVhfTl8wXzM5MCAgLyogejQgPSBNVUxUSVBMWSh6NCwgLUZJWF8wXzM5MDE4MDY0NCkgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjE4LjRzLCB2MTguNGgsIFhGSVhfTl8wXzg5OSAgLyogejEgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzg5OTk3NjIyMykgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjIwLjRzLCB2MjAuNGgsIFhGSVhfTl8yXzU2MiAgLyogejIgPSBNVUxUSVBMWSh6MiwgLUZJWF8yXzU2MjkxNTQ0NykgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MjMuNHMsIHYyMy40cywgdjI3LjRzICAvKiB6MyArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjIuNHMsIHYyMi40cywgdjI2LjRzICAvKiB6MyArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjUuNHMsIHYyNS40cywgdjI3LjRzICAvKiB6NCArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjQuNHMsIHYyNC40cywgdjI2LjRzICAvKiB6NCArPSB6NSAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxMS40cywgdjExLjRzLCB2MTkuNHMgIC8qIHRtcDAgKz0gejEgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEwLjRzLCB2MTAuNHMsIHYxOC40cyAgLyogdG1wMCArPSB6MSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTMuNHMsIHYxMy40cywgdjIxLjRzICAvKiB0bXAxICs9IHoyICovCisgICAgYWRkICAgICAgICAgICAgIHYxMi40cywgdjEyLjRzLCB2MjAuNHMgIC8qIHRtcDEgKz0gejIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE1LjRzLCB2MTUuNHMsIHYyMS40cyAgLyogdG1wMiArPSB6MiAqLworICAgIGFkZCAgICAgICAgICAgICB2MTQuNHMsIHYxNC40cywgdjIwLjRzICAvKiB0bXAyICs9IHoyICovCisgICAgYWRkICAgICAgICAgICAgIHYxNy40cywgdjE3LjRzLCB2MTkuNHMgIC8qIHRtcDMgKz0gejEgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE2LjRzLCB2MTYuNHMsIHYxOC40cyAgLyogdG1wMyArPSB6MSAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxMS40cywgdjExLjRzLCB2MjMuNHMgIC8qIHRtcDAgKz0gejMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEwLjRzLCB2MTAuNHMsIHYyMi40cyAgLyogdG1wMCArPSB6MyAqLworICAgIGFkZCAgICAgICAgICAgICB2MTMuNHMsIHYxMy40cywgdjI1LjRzICAvKiB0bXAxICs9IHo0ICovCisgICAgYWRkICAgICAgICAgICAgIHYxMi40cywgdjEyLjRzLCB2MjQuNHMgIC8qIHRtcDEgKz0gejQgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE3LjRzLCB2MTcuNHMsIHYyNS40cyAgLyogdG1wMyArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MTYuNHMsIHYxNi40cywgdjI0LjRzICAvKiB0bXAzICs9IHo0ICovCisgICAgYWRkICAgICAgICAgICAgIHYxNS40cywgdjE1LjRzLCB2MjMuNHMgIC8qIHRtcDIgKz0gejMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE0LjRzLCB2MTQuNHMsIHYyMi40cyAgLyogdG1wMiArPSB6MyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBpbnB1dHMgYXJlIHRtcDEwLi50bXAxMywgdG1wMC4udG1wMyAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxOC40cywgdjIuNHMsIHYxNi40cyAgIC8qIHRtcDEwICsgdG1wMyAqLworICAgIGFkZCAgICAgICAgICAgICB2MTkuNHMsIHYyOC40cywgdjE3LjRzICAvKiB0bXAxMCArIHRtcDMgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjIwLjRzLCB2Mi40cywgdjE2LjRzICAgLyogdG1wMTAgLSB0bXAzICovCisgICAgc3ViICAgICAgICAgICAgIHYyMS40cywgdjI4LjRzLCB2MTcuNHMgIC8qIHRtcDEwIC0gdG1wMyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjIuNHMsIHY4LjRzLCB2MTQuNHMgICAvKiB0bXAxMSArIHRtcDIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIzLjRzLCB2MjkuNHMsIHYxNS40cyAgLyogdG1wMTEgKyB0bXAyICovCisgICAgc3ViICAgICAgICAgICAgIHYyNC40cywgdjguNHMsIHYxNC40cyAgIC8qIHRtcDExIC0gdG1wMiAqLworICAgIHN1YiAgICAgICAgICAgICB2MjUuNHMsIHYyOS40cywgdjE1LjRzICAvKiB0bXAxMSAtIHRtcDIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjRzLCB2NC40cywgdjEyLjRzICAgLyogdG1wMTIgKyB0bXAxICovCisgICAgYWRkICAgICAgICAgICAgIHYyNy40cywgdjMwLjRzLCB2MTMuNHMgIC8qIHRtcDEyICsgdG1wMSAqLworICAgIHN1YiAgICAgICAgICAgICB2MjguNHMsIHY0LjRzLCB2MTIuNHMgICAvKiB0bXAxMiAtIHRtcDEgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjI5LjRzLCB2MzAuNHMsIHYxMy40cyAgLyogdG1wMTIgLSB0bXAxICovCisgICAgYWRkICAgICAgICAgICAgIHYxNC40cywgdjYuNHMsIHYxMC40cyAgIC8qIHRtcDEzICsgdG1wMCAqLworICAgIGFkZCAgICAgICAgICAgICB2MTUuNHMsIHYzMS40cywgdjExLjRzICAvKiB0bXAxMyArIHRtcDAgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjE2LjRzLCB2Ni40cywgdjEwLjRzICAgLyogdG1wMTMgLSB0bXAwICovCisgICAgc3ViICAgICAgICAgICAgIHYxNy40cywgdjMxLjRzLCB2MTEuNHMgIC8qIHRtcDEzIC0gdG1wMCAqLworCisgICAgc2hybiAgICAgICAgICAgIHYyLjRoLCB2MTguNHMsICMxNiAgLyogd3NwdHJbRENUU0laRSowXSA9IChpbnQpREVTQ0FMRSh0bXAxMCArIHRtcDMsIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKSAqLworICAgIHNocm4gICAgICAgICAgICB2OS40aCwgdjIwLjRzLCAjMTYgIC8qIHdzcHRyW0RDVFNJWkUqN10gPSAoaW50KURFU0NBTEUodG1wMTAgLSB0bXAzLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykgKi8KKyAgICBzaHJuICAgICAgICAgICAgdjMuNGgsIHYyMi40cywgIzE2ICAvKiB3c3B0cltEQ1RTSVpFKjFdID0gKGludClERVNDQUxFKHRtcDExICsgdG1wMiwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpICovCisgICAgc2hybiAgICAgICAgICAgIHY4LjRoLCB2MjQuNHMsICMxNiAgLyogd3NwdHJbRENUU0laRSo2XSA9IChpbnQpREVTQ0FMRSh0bXAxMSAtIHRtcDIsIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKSAqLworICAgIHNocm4gICAgICAgICAgICB2NC40aCwgdjI2LjRzLCAjMTYgIC8qIHdzcHRyW0RDVFNJWkUqMl0gPSAoaW50KURFU0NBTEUodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykgKi8KKyAgICBzaHJuICAgICAgICAgICAgdjcuNGgsIHYyOC40cywgIzE2ICAvKiB3c3B0cltEQ1RTSVpFKjVdID0gKGludClERVNDQUxFKHRtcDEyIC0gdG1wMSwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpICovCisgICAgc2hybiAgICAgICAgICAgIHY1LjRoLCB2MTQuNHMsICMxNiAgLyogd3NwdHJbRENUU0laRSozXSA9IChpbnQpREVTQ0FMRSh0bXAxMyArIHRtcDAsIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKSAqLworICAgIHNocm4gICAgICAgICAgICB2Ni40aCwgdjE2LjRzLCAjMTYgIC8qIHdzcHRyW0RDVFNJWkUqNF0gPSAoaW50KURFU0NBTEUodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykgKi8KKyAgICBzaHJuMiAgICAgICAgICAgdjIuOGgsIHYxOS40cywgIzE2ICAvKiB3c3B0cltEQ1RTSVpFKjBdID0gKGludClERVNDQUxFKHRtcDEwICsgdG1wMywgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpICovCisgICAgc2hybjIgICAgICAgICAgIHY5LjhoLCB2MjEuNHMsICMxNiAgLyogd3NwdHJbRENUU0laRSo3XSA9IChpbnQpREVTQ0FMRSh0bXAxMCAtIHRtcDMsIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKSAqLworICAgIHNocm4yICAgICAgICAgICB2My44aCwgdjIzLjRzLCAjMTYgIC8qIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KURFU0NBTEUodG1wMTEgKyB0bXAyLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykgKi8KKyAgICBzaHJuMiAgICAgICAgICAgdjguOGgsIHYyNS40cywgIzE2ICAvKiB3c3B0cltEQ1RTSVpFKjZdID0gKGludClERVNDQUxFKHRtcDExIC0gdG1wMiwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpICovCisgICAgc2hybjIgICAgICAgICAgIHY0LjhoLCB2MjcuNHMsICMxNiAgLyogd3NwdHJbRENUU0laRSoyXSA9IChpbnQpREVTQ0FMRSh0bXAxMiArIHRtcDEsIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKSAqLworICAgIHNocm4yICAgICAgICAgICB2Ny44aCwgdjI5LjRzLCAjMTYgIC8qIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KURFU0NBTEUodG1wMTIgLSB0bXAxLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykgKi8KKyAgICBzaHJuMiAgICAgICAgICAgdjUuOGgsIHYxNS40cywgIzE2ICAvKiB3c3B0cltEQ1RTSVpFKjNdID0gKGludClERVNDQUxFKHRtcDEzICsgdG1wMCwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpICovCisgICAgc2hybjIgICAgICAgICAgIHY2LjhoLCB2MTcuNHMsICMxNiAgLyogd3NwdHJbRENUU0laRSo0XSA9IChpbnQpREVTQ0FMRSh0bXAxMyAtIHRtcDAsIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKSAqLworICAgIG1vdmkgICAgICAgICAgICB2MC4xNmIsICMoQ0VOVEVSSlNBTVBMRSkKKyAgICAvKiBQcmVwYXJlIHBvaW50ZXJzIChkdWFsLWlzc3VlIHdpdGggTkVPTiBpbnN0cnVjdGlvbnMpICovCisgICAgICBsZHAgICAgICAgICAgICAgVE1QMSwgVE1QMiwgW09VVFBVVF9CVUZdLCAxNgorICAgIHNxcnNocm4gICAgICAgICB2MjguOGIsIHYyLjhoLCAjKENPTlNUX0JJVFMrUEFTUzFfQklUUyszLTE2KQorICAgICAgbGRwICAgICAgICAgICAgIFRNUDMsIFRNUDQsIFtPVVRQVVRfQlVGXSwgMTYKKyAgICBzcXJzaHJuICAgICAgICAgdjI5LjhiLCB2My44aCwgIyhDT05TVF9CSVRTK1BBU1MxX0JJVFMrMy0xNikKKyAgICAgIGFkZCAgICAgICAgICAgICBUTVAxLCBUTVAxLCBPVVRQVVRfQ09MCisgICAgc3Fyc2hybiAgICAgICAgIHYzMC44YiwgdjQuOGgsICMoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMtMTYpCisgICAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgT1VUUFVUX0NPTAorICAgIHNxcnNocm4gICAgICAgICB2MzEuOGIsIHY1LjhoLCAjKENPTlNUX0JJVFMrUEFTUzFfQklUUyszLTE2KQorICAgICAgYWRkICAgICAgICAgICAgIFRNUDMsIFRNUDMsIE9VVFBVVF9DT0wKKyAgICBzcXJzaHJuMiAgICAgICAgdjI4LjE2YiwgdjYuOGgsICMoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMtMTYpCisgICAgICBhZGQgICAgICAgICAgICAgVE1QNCwgVE1QNCwgT1VUUFVUX0NPTAorICAgIHNxcnNocm4yICAgICAgICB2MjkuMTZiLCB2Ny44aCwgIyhDT05TVF9CSVRTK1BBU1MxX0JJVFMrMy0xNikKKyAgICAgIGxkcCAgICAgICAgICAgICBUTVA1LCBUTVA2LCBbT1VUUFVUX0JVRl0sIDE2CisgICAgc3Fyc2hybjIgICAgICAgIHYzMC4xNmIsIHY4LjhoLCAjKENPTlNUX0JJVFMrUEFTUzFfQklUUyszLTE2KQorICAgICAgbGRwICAgICAgICAgICAgIFRNUDcsIFRNUDgsIFtPVVRQVVRfQlVGXSwgMTYKKyAgICBzcXJzaHJuMiAgICAgICAgdjMxLjE2YiwgdjkuOGgsICMoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMtMTYpCisgICAgICBhZGQgICAgICAgICAgICAgVE1QNSwgVE1QNSwgT1VUUFVUX0NPTAorICAgIGFkZCAgICAgICAgICAgICB2MTYuMTZiLCB2MjguMTZiLCB2MC4xNmIKKyAgICAgIGFkZCAgICAgICAgICAgICBUTVA2LCBUTVA2LCBPVVRQVVRfQ09MCisgICAgYWRkICAgICAgICAgICAgIHYxOC4xNmIsIHYyOS4xNmIsIHYwLjE2YgorICAgICAgYWRkICAgICAgICAgICAgIFRNUDcsIFRNUDcsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgdjIwLjE2YiwgdjMwLjE2YiwgdjAuMTZiCisgICAgICBhZGQgICAgICAgICAgICAgVE1QOCwgVE1QOCwgT1VUUFVUX0NPTAorICAgIGFkZCAgICAgICAgICAgICB2MjIuMTZiLCB2MzEuMTZiLCB2MC4xNmIKKworICAgIC8qIFRyYW5zcG9zZSB0aGUgZmluYWwgOC1iaXQgc2FtcGxlcyAqLworICAgIHRybjEgICAgICAgICAgICB2MjguMTZiLCB2MTYuMTZiLCB2MTguMTZiCisgICAgdHJuMSAgICAgICAgICAgIHYzMC4xNmIsIHYyMC4xNmIsIHYyMi4xNmIKKyAgICB0cm4yICAgICAgICAgICAgdjI5LjE2YiwgdjE2LjE2YiwgdjE4LjE2YgorICAgIHRybjIgICAgICAgICAgICB2MzEuMTZiLCB2MjAuMTZiLCB2MjIuMTZiCisKKyAgICB0cm4xICAgICAgICAgICAgdjE2LjhoLCB2MjguOGgsIHYzMC44aAorICAgIHRybjIgICAgICAgICAgICB2MTguOGgsIHYyOC44aCwgdjMwLjhoCisgICAgdHJuMSAgICAgICAgICAgIHYyMC44aCwgdjI5LjhoLCB2MzEuOGgKKyAgICB0cm4yICAgICAgICAgICAgdjIyLjhoLCB2MjkuOGgsIHYzMS44aAorCisgICAgdXpwMSAgICAgICAgICAgIHYyOC40cywgdjE2LjRzLCB2MTguNHMKKyAgICB1enAyICAgICAgICAgICAgdjMwLjRzLCB2MTYuNHMsIHYxOC40cworICAgIHV6cDEgICAgICAgICAgICB2MjkuNHMsIHYyMC40cywgdjIyLjRzCisgICAgdXpwMiAgICAgICAgICAgIHYzMS40cywgdjIwLjRzLCB2MjIuNHMKKworICAgIC8qIFN0b3JlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICBzdDEgICAgICAgICAgICAge3YyOC5kfVswXSwgW1RNUDFdCisgICAgc3QxICAgICAgICAgICAgIHt2MjkuZH1bMF0sIFtUTVAyXQorICAgIHN0MSAgICAgICAgICAgICB7djI4LmR9WzFdLCBbVE1QM10KKyAgICBzdDEgICAgICAgICAgICAge3YyOS5kfVsxXSwgW1RNUDRdCisgICAgc3QxICAgICAgICAgICAgIHt2MzAuZH1bMF0sIFtUTVA1XQorICAgIHN0MSAgICAgICAgICAgICB7djMxLmR9WzBdLCBbVE1QNl0KKyAgICBzdDEgICAgICAgICAgICAge3YzMC5kfVsxXSwgW1RNUDddCisgICAgc3QxICAgICAgICAgICAgIHt2MzEuZH1bMV0sIFtUTVA4XQorICAgIGxkMSAgICAgICAgICAgICB7djguOGIsIHY5LjhiLCB2MTAuOGIsIHYxMS44Yn0sIFtzcF0sICMzMgorICAgIGxkMSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3NwXSwgIzMyCisgICAgYmxyICAgICAgICAgICAgIHgzMAorCisuYmFsaWduIDE2CisyOgorICAgIG11bCAgICAgICAgICAgICB2My44aCwgdjMuOGgsIHYxOS44aAorICAgIG11bCAgICAgICAgICAgICB2NC44aCwgdjQuOGgsIHYyMC44aAorICAgIG11bCAgICAgICAgICAgICB2NS44aCwgdjUuOGgsIHYyMS44aAorICAgIGFkZCAgICAgICAgICAgICBUTVA0LCB4enIsIFRNUDIsIExTTCAjMzIKKyAgICBtdWwgICAgICAgICAgICAgdjYuOGgsIHY2LjhoLCB2MjIuOGgKKyAgICBtdWwgICAgICAgICAgICAgdjcuOGgsIHY3LjhoLCB2MjMuOGgKKyAgICBhZGRzICAgICAgICAgICAgVE1QMywgeHpyLCBUTVAyLCBMU1IgIzMyCisgICAgbXVsICAgICAgICAgICAgIHY4LjhoLCB2OC44aCwgdjI0LjhoCisgICAgbXVsICAgICAgICAgICAgIHY5LjhoLCB2OS44aCwgdjI1LjhoCisgICAgYi5uZSAgICAgICAgICAgIDNmCisgICAgLyogUmlnaHQgQUMgY29lZiBpcyB6ZXJvICovCisgICAgZHVwICAgICAgICAgICAgIHYxNS4yZCwgdjEwLmRbMV0KKyAgICAvKiBFdmVuIHBhcnQ6IHJldmVyc2UgdGhlIGV2ZW4gcGFydCBvZiB0aGUgZm9yd2FyZCBEQ1QuICovCisgICAgYWRkICAgICAgICAgICAgIHYxOC40aCwgdjQuNGgsIHY4LjRoICAgICAgICAgICAvKiB6MiArIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIyLjRoLCB2Mi40aCwgdjYuNGggICAgICAgICAgIC8qIHoyICsgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pICsgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKSAqLworICAgIHN1YiAgICAgICAgICAgICB2MjYuNGgsIHYyLjRoLCB2Ni40aCAgICAgICAgICAgLyogejIgLSB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgLSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pICovCisgICAgc211bGwgICAgICAgICAgIHYxOC40cywgdjE4LjRoLCBYRklYX1BfMF81NDEgICAvKiB6MWwgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOyAqLworICAgIHNzaGxsICAgICAgICAgICB2MjIuNHMsIHYyMi40aCwgIyhDT05TVF9CSVRTKSAgLyogdG1wMGwgdG1wMCA9IExFRlRfU0hJRlQoejIgKyB6MywgQ09OU1RfQklUUyk7ICovCisgICAgbW92ICAgICAgICAgICAgIHYyMC4xNmIsIHYxOC4xNmIgICAgICAgICAgICAgICAvKiB0bXAzID0gejEgKi8KKyAgICBzc2hsbCAgICAgICAgICAgdjI2LjRzLCB2MjYuNGgsICMoQ09OU1RfQklUUykgIC8qIHRtcDFsIHRtcDEgPSBMRUZUX1NISUZUKHoyIC0gejMsIENPTlNUX0JJVFMpOyAqLworICAgIHNtbGFsICAgICAgICAgICB2MTguNHMsIHY4LjRoLCBYRklYX05fMV84NDcgICAgLyogdG1wMmwgdG1wMiA9IHoxICsgTVVMVElQTFkoejMsIC1GSVhfMV84NDc3NTkwNjUpOyAqLworICAgIHNtbGFsICAgICAgICAgICB2MjAuNHMsIHY0LjRoLCBYRklYX1BfMF83NjUgICAgLyogdG1wM2wgdG1wMyA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7ICovCisgICAgYWRkICAgICAgICAgICAgIHYyLjRzLCB2MjIuNHMsIHYyMC40cyAgICAgICAgICAvKiB0bXAxMGwgdG1wMTAgPSB0bXAwICsgdG1wMzsgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjYuNHMsIHYyMi40cywgdjIwLjRzICAgICAgICAgIC8qIHRtcDEzbCB0bXAxMyA9IHRtcDAgLSB0bXAzOyAqLworICAgIGFkZCAgICAgICAgICAgICB2OC40cywgdjI2LjRzLCB2MTguNHMgICAgICAgICAgLyogdG1wMTFsIHRtcDExID0gdG1wMSArIHRtcDI7ICovCisgICAgc3ViICAgICAgICAgICAgIHY0LjRzLCB2MjYuNHMsIHYxOC40cyAgICAgICAgICAvKiB0bXAxMmwgdG1wMTIgPSB0bXAxIC0gdG1wMjsgKi8KKworICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgODsgdGhlIG1hdHJpeCBpcyB1bml0YXJ5IGFuZCBoZW5jZSBpdHMKKyAgICAgKiB0cmFuc3Bvc2UgaXMgaXRzIGludmVyc2UuICBpMC4uaTMgYXJlIHk3LHk1LHkzLHkxIHJlc3BlY3RpdmVseS4KKyAgICAgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MjIuNGgsIHY5LjRoLCB2NS40aCAgICAvKiB6MyA9IHRtcDAgKyB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI0LjRoLCB2Ny40aCwgdjMuNGggICAgLyogejQgPSB0bXAxICsgdG1wMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pICovCisgICAgYWRkICAgICAgICAgICAgIHYxOC40aCwgdjkuNGgsIHYzLjRoICAgIC8qIHoxID0gdG1wMCArIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pICsgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjAuNGgsIHY3LjRoLCB2NS40aCAgICAvKiB6MiA9IHRtcDEgKyB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjRoLCB2MjIuNGgsIHYyNC40aCAgLyogejUgPSB6MyArIHo0ICovCisKKyAgICBzbXVsbCAgICAgICAgICAgdjEwLjRzLCB2OS40aCwgWEZJWF9QXzBfMjk4ICAgLyogdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWF8wXzI5ODYzMTMzNikgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjEyLjRzLCB2Ny40aCwgWEZJWF9QXzJfMDUzICAgLyogdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSkgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjE0LjRzLCB2NS40aCwgWEZJWF9QXzNfMDcyICAgLyogdG1wMiA9IE1VTFRJUExZKHRtcDIsIEZJWF8zXzA3MjcxMTAyNikgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjE2LjRzLCB2My40aCwgWEZJWF9QXzFfNTAxICAgLyogdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCkgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjI2LjRzLCB2MjYuNGgsIFhGSVhfUF8xXzE3NSAgLyogejVsIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKSAqLworICAgIHNtdWxsICAgICAgICAgICB2MjIuNHMsIHYyMi40aCwgWEZJWF9OXzFfOTYxICAvKiB6MyA9IE1VTFRJUExZKHozLCAtRklYXzFfOTYxNTcwNTYwKSAqLworICAgIHNtdWxsICAgICAgICAgICB2MjQuNHMsIHYyNC40aCwgWEZJWF9OXzBfMzkwICAvKiB6NCA9IE1VTFRJUExZKHo0LCAtRklYXzBfMzkwMTgwNjQ0KSAqLworICAgIHNtdWxsICAgICAgICAgICB2MTguNHMsIHYxOC40aCwgWEZJWF9OXzBfODk5ICAvKiB6MSA9IE1VTFRJUExZKHoxLCAtRklYXzBfODk5OTc2MjIzKSAqLworICAgIHNtdWxsICAgICAgICAgICB2MjAuNHMsIHYyMC40aCwgWEZJWF9OXzJfNTYyICAvKiB6MiA9IE1VTFRJUExZKHoyLCAtRklYXzJfNTYyOTE1NDQ3KSAqLworCisgICAgYWRkICAgICAgICAgICAgIHYyMi40cywgdjIyLjRzLCB2MjYuNHMgIC8qIHozICs9IHo1ICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC40cywgdjI0LjRzLCB2MjYuNHMgIC8qIHo0ICs9IHo1ICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjEwLjRzLCB2MTAuNHMsIHYxOC40cyAgLyogdG1wMCArPSB6MSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTIuNHMsIHYxMi40cywgdjIwLjRzICAvKiB0bXAxICs9IHoyICovCisgICAgYWRkICAgICAgICAgICAgIHYxNC40cywgdjE0LjRzLCB2MjAuNHMgIC8qIHRtcDIgKz0gejIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE2LjRzLCB2MTYuNHMsIHYxOC40cyAgLyogdG1wMyArPSB6MSAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxMC40cywgdjEwLjRzLCB2MjIuNHMgIC8qIHRtcDAgKz0gejMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEyLjRzLCB2MTIuNHMsIHYyNC40cyAgLyogdG1wMSArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MTYuNHMsIHYxNi40cywgdjI0LjRzICAvKiB0bXAzICs9IHo0ICovCisgICAgYWRkICAgICAgICAgICAgIHYxNC40cywgdjE0LjRzLCB2MjIuNHMgIC8qIHRtcDIgKz0gejMgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTguNHMsIHYyLjRzLCB2MTYuNHMgIC8qIHRtcDEwICsgdG1wMyAqLworICAgIHN1YiAgICAgICAgICAgICB2MjAuNHMsIHYyLjRzLCB2MTYuNHMgIC8qIHRtcDEwIC0gdG1wMyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjIuNHMsIHY4LjRzLCB2MTQuNHMgIC8qIHRtcDExICsgdG1wMiAqLworICAgIHN1YiAgICAgICAgICAgICB2MjQuNHMsIHY4LjRzLCB2MTQuNHMgIC8qIHRtcDExIC0gdG1wMiAqLworICAgIGFkZCAgICAgICAgICAgICB2MjYuNHMsIHY0LjRzLCB2MTIuNHMgIC8qIHRtcDEyICsgdG1wMSAqLworICAgIHN1YiAgICAgICAgICAgICB2MjguNHMsIHY0LjRzLCB2MTIuNHMgIC8qIHRtcDEyIC0gdG1wMSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTQuNHMsIHY2LjRzLCB2MTAuNHMgIC8qIHRtcDEzICsgdG1wMCAqLworICAgIHN1YiAgICAgICAgICAgICB2MTYuNHMsIHY2LjRzLCB2MTAuNHMgIC8qIHRtcDEzIC0gdG1wMCAqLworCisgICAgcnNocm4gICAgICAgICAgIHYyLjRoLCB2MTguNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSowXSA9IChpbnQpREVTQ0FMRSh0bXAxMCArIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybiAgICAgICAgICAgdjMuNGgsIHYyMi40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjFdID0gKGludClERVNDQUxFKHRtcDExICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuICAgICAgICAgICB2NC40aCwgdjI2LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqMl0gPSAoaW50KURFU0NBTEUodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4gICAgICAgICAgIHY1LjRoLCB2MTQuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSozXSA9IChpbnQpREVTQ0FMRSh0bXAxMyArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybjIgICAgICAgICAgdjIuOGgsIHYxNi40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjRdID0gKGludClERVNDQUxFKHRtcDEzIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuMiAgICAgICAgICB2My44aCwgdjI4LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KURFU0NBTEUodG1wMTIgLSB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4yICAgICAgICAgIHY0LjhoLCB2MjQuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSo2XSA9IChpbnQpREVTQ0FMRSh0bXAxMSAtIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybjIgICAgICAgICAgdjUuOGgsIHYyMC40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjddID0gKGludClERVNDQUxFKHRtcDEwIC0gdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIG1vdiAgICAgICAgICAgICB2Ni4xNmIsIHYxNS4xNmIKKyAgICBtb3YgICAgICAgICAgICAgdjcuMTZiLCB2MTUuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY4LjE2YiwgdjE1LjE2YgorICAgIG1vdiAgICAgICAgICAgICB2OS4xNmIsIHYxNS4xNmIKKyAgICBiICAgICAgICAgICAgICAgMWIKKworLmJhbGlnbiAxNgorMzoKKyAgICBjYm56ICAgICAgICAgICAgVE1QNCwgNGYKKyAgICAvKiBMZWZ0IEFDIGNvZWYgaXMgemVybyAqLworICAgIGR1cCAgICAgICAgICAgICB2MTQuMmQsIHYxMC5kWzBdCisgICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLworICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHY0LjhoLCB2OC44aCAgICAgICAgICAgLyogejIgKyB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pICovCisgICAgYWRkICAgICAgICAgICAgIHYyMi44aCwgdjIuOGgsIHY2LjhoICAgICAgICAgICAvKiB6MiArIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjE5LjRzLCB2MTguOGgsIFhGSVhfUF8wXzU0MSAgIC8qIHoxaCB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7ICovCisgICAgc3ViICAgICAgICAgICAgIHYyNi44aCwgdjIuOGgsIHY2LjhoICAgICAgICAgICAvKiB6MiAtIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKSAtIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSkgKi8KKyAgICBzc2hsbDIgICAgICAgICAgdjIzLjRzLCB2MjIuOGgsICMoQ09OU1RfQklUUykgIC8qIHRtcDBoIHRtcDAgPSBMRUZUX1NISUZUKHoyICsgejMsIENPTlNUX0JJVFMpOyAqLworICAgIG1vdiAgICAgICAgICAgICB2MjEuMTZiLCB2MTkuMTZiICAgICAgICAgICAgICAgLyogdG1wMyA9IHoxICovCisgICAgc21sYWwyICAgICAgICAgIHYxOS40cywgdjguOGgsIFhGSVhfTl8xXzg0NyAgICAvKiB0bXAyaCB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLUZJWF8xXzg0Nzc1OTA2NSk7ICovCisgICAgc3NobGwyICAgICAgICAgIHYyNy40cywgdjI2LjhoLCAjKENPTlNUX0JJVFMpICAvKiB0bXAxaCB0bXAxID0gTEVGVF9TSElGVCh6MiAtIHozLCBDT05TVF9CSVRTKTsgKi8KKyAgICBzbWxhbDIgICAgICAgICAgdjIxLjRzLCB2NC44aCwgWEZJWF9QXzBfNzY1ICAgIC8qIHRtcDNoIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjguNHMsIHYyMy40cywgdjIxLjRzICAgICAgICAgLyogdG1wMTBoIHRtcDEwID0gdG1wMCArIHRtcDM7ICovCisgICAgc3ViICAgICAgICAgICAgIHYzMS40cywgdjIzLjRzLCB2MjEuNHMgICAgICAgICAvKiB0bXAxM2ggdG1wMTMgPSB0bXAwIC0gdG1wMzsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI5LjRzLCB2MjcuNHMsIHYxOS40cyAgICAgICAgIC8qIHRtcDExaCB0bXAxMSA9IHRtcDEgKyB0bXAyOyAqLworICAgIHN1YiAgICAgICAgICAgICB2MzAuNHMsIHYyNy40cywgdjE5LjRzICAgICAgICAgLyogdG1wMTJoIHRtcDEyID0gdG1wMSAtIHRtcDI7ICovCisKKyAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCisgICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCisgICAgICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjIyLjhoLCB2OS44aCwgdjUuOGggICAgLyogejMgPSB0bXAwICsgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC44aCwgdjcuOGgsIHYzLjhoICAgIC8qIHo0ID0gdG1wMSArIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pICsgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHY5LjhoLCB2My44aCAgICAvKiB6MSA9IHRtcDAgKyB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIwLjhoLCB2Ny44aCwgdjUuOGggICAgLyogejIgPSB0bXAxICsgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pICovCisgICAgYWRkICAgICAgICAgICAgIHYyNi44aCwgdjIyLjhoLCB2MjQuOGggIC8qIHo1ID0gejMgKyB6NCAqLworCisgICAgc211bGwyICAgICAgICAgIHYxMS40cywgdjkuOGgsIFhGSVhfUF8wXzI5OCAgIC8qIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpICovCisgICAgc211bGwyICAgICAgICAgIHYxMy40cywgdjcuOGgsIFhGSVhfUF8yXzA1MyAgIC8qIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpICovCisgICAgc211bGwyICAgICAgICAgIHYxNS40cywgdjUuOGgsIFhGSVhfUF8zXzA3MiAgIC8qIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpICovCisgICAgc211bGwyICAgICAgICAgIHYxNy40cywgdjMuOGgsIFhGSVhfUF8xXzUwMSAgIC8qIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApICovCisgICAgc211bGwyICAgICAgICAgIHYyNy40cywgdjI2LjhoLCBYRklYX1BfMV8xNzUgIC8qIHo1aCB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMikgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjIzLjRzLCB2MjIuOGgsIFhGSVhfTl8xXzk2MSAgLyogejMgPSBNVUxUSVBMWSh6MywgLUZJWF8xXzk2MTU3MDU2MCkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjI1LjRzLCB2MjQuOGgsIFhGSVhfTl8wXzM5MCAgLyogejQgPSBNVUxUSVBMWSh6NCwgLUZJWF8wXzM5MDE4MDY0NCkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjE5LjRzLCB2MTguOGgsIFhGSVhfTl8wXzg5OSAgLyogejEgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzg5OTk3NjIyMykgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjIxLjRzLCB2MjAuOGgsIFhGSVhfTl8yXzU2MiAgLyogejIgPSBNVUxUSVBMWSh6MiwgLUZJWF8yXzU2MjkxNTQ0NykgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MjMuNHMsIHYyMy40cywgdjI3LjRzICAvKiB6MyArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjIuNHMsIHYyMi40cywgdjI2LjRzICAvKiB6MyArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjUuNHMsIHYyNS40cywgdjI3LjRzICAvKiB6NCArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjQuNHMsIHYyNC40cywgdjI2LjRzICAvKiB6NCArPSB6NSAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxMS40cywgdjExLjRzLCB2MTkuNHMgIC8qIHRtcDAgKz0gejEgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEzLjRzLCB2MTMuNHMsIHYyMS40cyAgLyogdG1wMSArPSB6MiAqLworICAgIGFkZCAgICAgICAgICAgICB2MTUuNHMsIHYxNS40cywgdjIxLjRzICAvKiB0bXAyICs9IHoyICovCisgICAgYWRkICAgICAgICAgICAgIHYxNy40cywgdjE3LjRzLCB2MTkuNHMgIC8qIHRtcDMgKz0gejEgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTEuNHMsIHYxMS40cywgdjIzLjRzICAvKiB0bXAwICs9IHozICovCisgICAgYWRkICAgICAgICAgICAgIHYxMy40cywgdjEzLjRzLCB2MjUuNHMgIC8qIHRtcDEgKz0gejQgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE3LjRzLCB2MTcuNHMsIHYyNS40cyAgLyogdG1wMyArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MTUuNHMsIHYxNS40cywgdjIzLjRzICAvKiB0bXAyICs9IHozICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGlucHV0cyBhcmUgdG1wMTAuLnRtcDEzLCB0bXAwLi50bXAzICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjE5LjRzLCB2MjguNHMsIHYxNy40cyAgLyogdG1wMTAgKyB0bXAzICovCisgICAgc3ViICAgICAgICAgICAgIHYyMS40cywgdjI4LjRzLCB2MTcuNHMgIC8qIHRtcDEwIC0gdG1wMyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjMuNHMsIHYyOS40cywgdjE1LjRzICAvKiB0bXAxMSArIHRtcDIgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjI1LjRzLCB2MjkuNHMsIHYxNS40cyAgLyogdG1wMTEgLSB0bXAyICovCisgICAgYWRkICAgICAgICAgICAgIHYyNy40cywgdjMwLjRzLCB2MTMuNHMgIC8qIHRtcDEyICsgdG1wMSAqLworICAgIHN1YiAgICAgICAgICAgICB2MjkuNHMsIHYzMC40cywgdjEzLjRzICAvKiB0bXAxMiAtIHRtcDEgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE1LjRzLCB2MzEuNHMsIHYxMS40cyAgLyogdG1wMTMgKyB0bXAwICovCisgICAgc3ViICAgICAgICAgICAgIHYxNy40cywgdjMxLjRzLCB2MTEuNHMgIC8qIHRtcDEzIC0gdG1wMCAqLworCisgICAgbW92ICAgICAgICAgICAgIHYyLjE2YiwgdjE0LjE2YgorICAgIG1vdiAgICAgICAgICAgICB2My4xNmIsIHYxNC4xNmIKKyAgICBtb3YgICAgICAgICAgICAgdjQuMTZiLCB2MTQuMTZiCisgICAgbW92ICAgICAgICAgICAgIHY1LjE2YiwgdjE0LjE2YgorICAgIHJzaHJuICAgICAgICAgICB2Ni40aCwgdjE5LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqMF0gPSAoaW50KURFU0NBTEUodG1wMTAgKyB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4gICAgICAgICAgIHY3LjRoLCB2MjMuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSoxXSA9IChpbnQpREVTQ0FMRSh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybiAgICAgICAgICAgdjguNGgsIHYyNy40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjJdID0gKGludClERVNDQUxFKHRtcDEyICsgdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuICAgICAgICAgICB2OS40aCwgdjE1LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqM10gPSAoaW50KURFU0NBTEUodG1wMTMgKyB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4yICAgICAgICAgIHY2LjhoLCB2MTcuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSo0XSA9IChpbnQpREVTQ0FMRSh0bXAxMyAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybjIgICAgICAgICAgdjcuOGgsIHYyOS40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjVdID0gKGludClERVNDQUxFKHRtcDEyIC0gdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuMiAgICAgICAgICB2OC44aCwgdjI1LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqNl0gPSAoaW50KURFU0NBTEUodG1wMTEgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4yICAgICAgICAgIHY5LjhoLCB2MjEuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSo3XSA9IChpbnQpREVTQ0FMRSh0bXAxMCAtIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICBiICAgICAgICAgICAgICAgMWIKKworLmJhbGlnbiAxNgorNDoKKyAgICAvKiAiTm8iIEFDIGNvZWYgaXMgemVybyAqLworICAgIC8qIEV2ZW4gcGFydDogcmV2ZXJzZSB0aGUgZXZlbiBwYXJ0IG9mIHRoZSBmb3J3YXJkIERDVC4gKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE4LjhoLCB2NC44aCwgdjguOGggICAgICAgICAgIC8qIHoyICsgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pICsgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjIuOGgsIHYyLjhoLCB2Ni44aCAgICAgICAgICAgLyogejIgKyB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pICovCisgICAgc211bGwyICAgICAgICAgIHYxOS40cywgdjE4LjhoLCBYRklYX1BfMF81NDEgICAvKiB6MWggejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOyAqLworICAgIHN1YiAgICAgICAgICAgICB2MjYuOGgsIHYyLjhoLCB2Ni44aCAgICAgICAgICAgLyogejIgLSB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgLSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pICovCisgICAgc211bGwgICAgICAgICAgIHYxOC40cywgdjE4LjRoLCBYRklYX1BfMF81NDEgICAvKiB6MWwgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOyAqLworICAgIHNzaGxsMiAgICAgICAgICB2MjMuNHMsIHYyMi44aCwgIyhDT05TVF9CSVRTKSAgLyogdG1wMGggdG1wMCA9IExFRlRfU0hJRlQoejIgKyB6MywgQ09OU1RfQklUUyk7ICovCisgICAgbW92ICAgICAgICAgICAgIHYyMS4xNmIsIHYxOS4xNmIgICAgICAgICAgICAgICAvKiB0bXAzID0gejEgKi8KKyAgICBtb3YgICAgICAgICAgICAgdjIwLjE2YiwgdjE4LjE2YiAgICAgICAgICAgICAgIC8qIHRtcDMgPSB6MSAqLworICAgIHNtbGFsMiAgICAgICAgICB2MTkuNHMsIHY4LjhoLCBYRklYX05fMV84NDcgICAgLyogdG1wMmggdG1wMiA9IHoxICsgTVVMVElQTFkoejMsIC1GSVhfMV84NDc3NTkwNjUpOyAqLworICAgIHNtbGFsICAgICAgICAgICB2MTguNHMsIHY4LjRoLCBYRklYX05fMV84NDcgICAgLyogdG1wMmwgdG1wMiA9IHoxICsgTVVMVElQTFkoejMsIC1GSVhfMV84NDc3NTkwNjUpOyAqLworICAgIHNzaGxsMiAgICAgICAgICB2MjcuNHMsIHYyNi44aCwgIyhDT05TVF9CSVRTKSAgLyogdG1wMWggdG1wMSA9IExFRlRfU0hJRlQoejIgLSB6MywgQ09OU1RfQklUUyk7ICovCisgICAgc21sYWwyICAgICAgICAgIHYyMS40cywgdjQuOGgsIFhGSVhfUF8wXzc2NSAgICAvKiB0bXAzaCB0bXAzID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsgKi8KKyAgICBzbWxhbCAgICAgICAgICAgdjIwLjRzLCB2NC40aCwgWEZJWF9QXzBfNzY1ICAgIC8qIHRtcDNsIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOyAqLworICAgIHNzaGxsICAgICAgICAgICB2MjIuNHMsIHYyMi40aCwgIyhDT05TVF9CSVRTKSAgLyogdG1wMGwgdG1wMCA9IExFRlRfU0hJRlQoejIgKyB6MywgQ09OU1RfQklUUyk7ICovCisgICAgc3NobGwgICAgICAgICAgIHYyNi40cywgdjI2LjRoLCAjKENPTlNUX0JJVFMpICAvKiB0bXAxbCB0bXAxID0gTEVGVF9TSElGVCh6MiAtIHozLCBDT05TVF9CSVRTKTsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIuNHMsIHYyMi40cywgdjIwLjRzICAgICAgICAgIC8qIHRtcDEwbCB0bXAxMCA9IHRtcDAgKyB0bXAzOyAqLworICAgIHN1YiAgICAgICAgICAgICB2Ni40cywgdjIyLjRzLCB2MjAuNHMgICAgICAgICAgLyogdG1wMTNsIHRtcDEzID0gdG1wMCAtIHRtcDM7ICovCisgICAgYWRkICAgICAgICAgICAgIHY4LjRzLCB2MjYuNHMsIHYxOC40cyAgICAgICAgICAvKiB0bXAxMWwgdG1wMTEgPSB0bXAxICsgdG1wMjsgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjQuNHMsIHYyNi40cywgdjE4LjRzICAgICAgICAgIC8qIHRtcDEybCB0bXAxMiA9IHRtcDEgLSB0bXAyOyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjguNHMsIHYyMy40cywgdjIxLjRzICAgICAgICAgLyogdG1wMTBoIHRtcDEwID0gdG1wMCArIHRtcDM7ICovCisgICAgc3ViICAgICAgICAgICAgIHYzMS40cywgdjIzLjRzLCB2MjEuNHMgICAgICAgICAvKiB0bXAxM2ggdG1wMTMgPSB0bXAwIC0gdG1wMzsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI5LjRzLCB2MjcuNHMsIHYxOS40cyAgICAgICAgIC8qIHRtcDExaCB0bXAxMSA9IHRtcDEgKyB0bXAyOyAqLworICAgIHN1YiAgICAgICAgICAgICB2MzAuNHMsIHYyNy40cywgdjE5LjRzICAgICAgICAgLyogdG1wMTJoIHRtcDEyID0gdG1wMSAtIHRtcDI7ICovCisKKyAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCisgICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCisgICAgICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjIyLjhoLCB2OS44aCwgdjUuOGggICAgLyogejMgPSB0bXAwICsgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC44aCwgdjcuOGgsIHYzLjhoICAgIC8qIHo0ID0gdG1wMSArIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pICsgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHY5LjhoLCB2My44aCAgICAvKiB6MSA9IHRtcDAgKyB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKSArIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSkgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIwLjhoLCB2Ny44aCwgdjUuOGggICAgLyogejIgPSB0bXAxICsgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSkgKyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pICovCisgICAgYWRkICAgICAgICAgICAgIHYyNi44aCwgdjIyLjhoLCB2MjQuOGggIC8qIHo1ID0gejMgKyB6NCAqLworCisgICAgc211bGwyICAgICAgICAgIHYxMS40cywgdjkuOGgsIFhGSVhfUF8wXzI5OCAgIC8qIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpICovCisgICAgc211bGwyICAgICAgICAgIHYxMy40cywgdjcuOGgsIFhGSVhfUF8yXzA1MyAgIC8qIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpICovCisgICAgc211bGwyICAgICAgICAgIHYxNS40cywgdjUuOGgsIFhGSVhfUF8zXzA3MiAgIC8qIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpICovCisgICAgc211bGwyICAgICAgICAgIHYxNy40cywgdjMuOGgsIFhGSVhfUF8xXzUwMSAgIC8qIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApICovCisgICAgc211bGwyICAgICAgICAgIHYyNy40cywgdjI2LjhoLCBYRklYX1BfMV8xNzUgIC8qIHo1aCB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMikgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjIzLjRzLCB2MjIuOGgsIFhGSVhfTl8xXzk2MSAgLyogejMgPSBNVUxUSVBMWSh6MywgLUZJWF8xXzk2MTU3MDU2MCkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjI1LjRzLCB2MjQuOGgsIFhGSVhfTl8wXzM5MCAgLyogejQgPSBNVUxUSVBMWSh6NCwgLUZJWF8wXzM5MDE4MDY0NCkgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjE5LjRzLCB2MTguOGgsIFhGSVhfTl8wXzg5OSAgLyogejEgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzg5OTk3NjIyMykgKi8KKyAgICBzbXVsbDIgICAgICAgICAgdjIxLjRzLCB2MjAuOGgsIFhGSVhfTl8yXzU2MiAgLyogejIgPSBNVUxUSVBMWSh6MiwgLUZJWF8yXzU2MjkxNTQ0NykgKi8KKworICAgIHNtdWxsICAgICAgICAgICB2MTAuNHMsIHY5LjRoLCBYRklYX1BfMF8yOTggICAvKiB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KSAqLworICAgIHNtdWxsICAgICAgICAgICB2MTIuNHMsIHY3LjRoLCBYRklYX1BfMl8wNTMgICAvKiB0bXAxID0gTVVMVElQTFkodG1wMSwgRklYXzJfMDUzMTE5ODY5KSAqLworICAgIHNtdWxsICAgICAgICAgICB2MTQuNHMsIHY1LjRoLCBYRklYX1BfM18wNzIgICAvKiB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KSAqLworICAgIHNtdWxsICAgICAgICAgICB2MTYuNHMsIHYzLjRoLCBYRklYX1BfMV81MDEgICAvKiB0bXAzID0gTVVMVElQTFkodG1wMywgRklYXzFfNTAxMzIxMTEwKSAqLworICAgIHNtdWxsICAgICAgICAgICB2MjYuNHMsIHYyNi40aCwgWEZJWF9QXzFfMTc1ICAvKiB6NWwgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpICovCisgICAgc211bGwgICAgICAgICAgIHYyMi40cywgdjIyLjRoLCBYRklYX05fMV85NjEgIC8qIHozID0gTVVMVElQTFkoejMsIC1GSVhfMV85NjE1NzA1NjApICovCisgICAgc211bGwgICAgICAgICAgIHYyNC40cywgdjI0LjRoLCBYRklYX05fMF8zOTAgIC8qIHo0ID0gTVVMVElQTFkoejQsIC1GSVhfMF8zOTAxODA2NDQpICovCisgICAgc211bGwgICAgICAgICAgIHYxOC40cywgdjE4LjRoLCBYRklYX05fMF84OTkgIC8qIHoxID0gTVVMVElQTFkoejEsIC1GSVhfMF84OTk5NzYyMjMpICovCisgICAgc211bGwgICAgICAgICAgIHYyMC40cywgdjIwLjRoLCBYRklYX05fMl81NjIgIC8qIHoyID0gTVVMVElQTFkoejIsIC1GSVhfMl81NjI5MTU0NDcpICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjIzLjRzLCB2MjMuNHMsIHYyNy40cyAgLyogejMgKz0gejUgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIyLjRzLCB2MjIuNHMsIHYyNi40cyAgLyogejMgKz0gejUgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI1LjRzLCB2MjUuNHMsIHYyNy40cyAgLyogejQgKz0gejUgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI0LjRzLCB2MjQuNHMsIHYyNi40cyAgLyogejQgKz0gejUgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTEuNHMsIHYxMS40cywgdjE5LjRzICAvKiB0bXAwICs9IHoxICovCisgICAgYWRkICAgICAgICAgICAgIHYxMC40cywgdjEwLjRzLCB2MTguNHMgIC8qIHRtcDAgKz0gejEgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEzLjRzLCB2MTMuNHMsIHYyMS40cyAgLyogdG1wMSArPSB6MiAqLworICAgIGFkZCAgICAgICAgICAgICB2MTIuNHMsIHYxMi40cywgdjIwLjRzICAvKiB0bXAxICs9IHoyICovCisgICAgYWRkICAgICAgICAgICAgIHYxNS40cywgdjE1LjRzLCB2MjEuNHMgIC8qIHRtcDIgKz0gejIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE0LjRzLCB2MTQuNHMsIHYyMC40cyAgLyogdG1wMiArPSB6MiAqLworICAgIGFkZCAgICAgICAgICAgICB2MTcuNHMsIHYxNy40cywgdjE5LjRzICAvKiB0bXAzICs9IHoxICovCisgICAgYWRkICAgICAgICAgICAgIHYxNi40cywgdjE2LjRzLCB2MTguNHMgIC8qIHRtcDMgKz0gejEgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTEuNHMsIHYxMS40cywgdjIzLjRzICAvKiB0bXAwICs9IHozICovCisgICAgYWRkICAgICAgICAgICAgIHYxMC40cywgdjEwLjRzLCB2MjIuNHMgIC8qIHRtcDAgKz0gejMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEzLjRzLCB2MTMuNHMsIHYyNS40cyAgLyogdG1wMSArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MTIuNHMsIHYxMi40cywgdjI0LjRzICAvKiB0bXAxICs9IHo0ICovCisgICAgYWRkICAgICAgICAgICAgIHYxNy40cywgdjE3LjRzLCB2MjUuNHMgIC8qIHRtcDMgKz0gejQgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE2LjRzLCB2MTYuNHMsIHYyNC40cyAgLyogdG1wMyArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MTUuNHMsIHYxNS40cywgdjIzLjRzICAvKiB0bXAyICs9IHozICovCisgICAgYWRkICAgICAgICAgICAgIHYxNC40cywgdjE0LjRzLCB2MjIuNHMgIC8qIHRtcDIgKz0gejMgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTguNHMsIHYyLjRzLCB2MTYuNHMgICAvKiB0bXAxMCArIHRtcDMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE5LjRzLCB2MjguNHMsIHYxNy40cyAgLyogdG1wMTAgKyB0bXAzICovCisgICAgc3ViICAgICAgICAgICAgIHYyMC40cywgdjIuNHMsIHYxNi40cyAgIC8qIHRtcDEwIC0gdG1wMyAqLworICAgIHN1YiAgICAgICAgICAgICB2MjEuNHMsIHYyOC40cywgdjE3LjRzICAvKiB0bXAxMCAtIHRtcDMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIyLjRzLCB2OC40cywgdjE0LjRzICAgLyogdG1wMTEgKyB0bXAyICovCisgICAgYWRkICAgICAgICAgICAgIHYyMy40cywgdjI5LjRzLCB2MTUuNHMgIC8qIHRtcDExICsgdG1wMiAqLworICAgIHN1YiAgICAgICAgICAgICB2MjQuNHMsIHY4LjRzLCB2MTQuNHMgICAvKiB0bXAxMSAtIHRtcDIgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjI1LjRzLCB2MjkuNHMsIHYxNS40cyAgLyogdG1wMTEgLSB0bXAyICovCisgICAgYWRkICAgICAgICAgICAgIHYyNi40cywgdjQuNHMsIHYxMi40cyAgIC8qIHRtcDEyICsgdG1wMSAqLworICAgIGFkZCAgICAgICAgICAgICB2MjcuNHMsIHYzMC40cywgdjEzLjRzICAvKiB0bXAxMiArIHRtcDEgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjI4LjRzLCB2NC40cywgdjEyLjRzICAgLyogdG1wMTIgLSB0bXAxICovCisgICAgc3ViICAgICAgICAgICAgIHYyOS40cywgdjMwLjRzLCB2MTMuNHMgIC8qIHRtcDEyIC0gdG1wMSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTQuNHMsIHY2LjRzLCB2MTAuNHMgICAvKiB0bXAxMyArIHRtcDAgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjE1LjRzLCB2MzEuNHMsIHYxMS40cyAgLyogdG1wMTMgKyB0bXAwICovCisgICAgc3ViICAgICAgICAgICAgIHYxNi40cywgdjYuNHMsIHYxMC40cyAgIC8qIHRtcDEzIC0gdG1wMCAqLworICAgIHN1YiAgICAgICAgICAgICB2MTcuNHMsIHYzMS40cywgdjExLjRzICAvKiB0bXAxMyAtIHRtcDAgKi8KKworICAgIHJzaHJuICAgICAgICAgICB2Mi40aCwgdjE4LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqMF0gPSAoaW50KURFU0NBTEUodG1wMTAgKyB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4gICAgICAgICAgIHYzLjRoLCB2MjIuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSoxXSA9IChpbnQpREVTQ0FMRSh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybiAgICAgICAgICAgdjQuNGgsIHYyNi40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjJdID0gKGludClERVNDQUxFKHRtcDEyICsgdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuICAgICAgICAgICB2NS40aCwgdjE0LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqM10gPSAoaW50KURFU0NBTEUodG1wMTMgKyB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4gICAgICAgICAgIHY2LjRoLCB2MTkuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSowXSA9IChpbnQpREVTQ0FMRSh0bXAxMCArIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybiAgICAgICAgICAgdjcuNGgsIHYyMy40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjFdID0gKGludClERVNDQUxFKHRtcDExICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuICAgICAgICAgICB2OC40aCwgdjI3LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqMl0gPSAoaW50KURFU0NBTEUodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4gICAgICAgICAgIHY5LjRoLCB2MTUuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSozXSA9IChpbnQpREVTQ0FMRSh0bXAxMyArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybjIgICAgICAgICAgdjIuOGgsIHYxNi40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjRdID0gKGludClERVNDQUxFKHRtcDEzIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuMiAgICAgICAgICB2My44aCwgdjI4LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KURFU0NBTEUodG1wMTIgLSB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4yICAgICAgICAgIHY0LjhoLCB2MjQuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSo2XSA9IChpbnQpREVTQ0FMRSh0bXAxMSAtIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybjIgICAgICAgICAgdjUuOGgsIHYyMC40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjddID0gKGludClERVNDQUxFKHRtcDEwIC0gdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuMiAgICAgICAgICB2Ni44aCwgdjE3LjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqNF0gPSAoaW50KURFU0NBTEUodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgcnNocm4yICAgICAgICAgIHY3LjhoLCB2MjkuNHMsICMoQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAgLyogd3NwdHJbRENUU0laRSo1XSA9IChpbnQpREVTQ0FMRSh0bXAxMiAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUykgKi8KKyAgICByc2hybjIgICAgICAgICAgdjguOGgsIHYyNS40cywgIyhDT05TVF9CSVRTLVBBU1MxX0JJVFMpICAvKiB3c3B0cltEQ1RTSVpFKjZdID0gKGludClERVNDQUxFKHRtcDExIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKSAqLworICAgIHJzaHJuMiAgICAgICAgICB2OS44aCwgdjIxLjRzLCAjKENPTlNUX0JJVFMtUEFTUzFfQklUUykgIC8qIHdzcHRyW0RDVFNJWkUqN10gPSAoaW50KURFU0NBTEUodG1wMTAgLSB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpICovCisgICAgYiAgICAgICAgICAgICAgIDFiCisKKyAgICAudW5yZXEgICAgICAgICAgRENUX1RBQkxFCisgICAgLnVucmVxICAgICAgICAgIENPRUZfQkxPQ0sKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQ09MCisgICAgLnVucmVxICAgICAgICAgIFRNUDEKKyAgICAudW5yZXEgICAgICAgICAgVE1QMgorICAgIC51bnJlcSAgICAgICAgICBUTVAzCisgICAgLnVucmVxICAgICAgICAgIFRNUDQKKyAgICAudW5yZXEgICAgICAgICAgVE1QNQorICAgIC51bnJlcSAgICAgICAgICBUTVA2CisgICAgLnVucmVxICAgICAgICAgIFRNUDcKKyAgICAudW5yZXEgICAgICAgICAgVE1QOAorCisjdW5kZWYgQ0VOVEVSSlNBTVBMRQorI3VuZGVmIENPTlNUX0JJVFMKKyN1bmRlZiBQQVNTMV9CSVRTCisjdW5kZWYgWEZJWF9QXzBfMjk4CisjdW5kZWYgWEZJWF9OXzBfMzkwCisjdW5kZWYgWEZJWF9QXzBfNTQxCisjdW5kZWYgWEZJWF9QXzBfNzY1CisjdW5kZWYgWEZJWF9OXzBfODk5CisjdW5kZWYgWEZJWF9QXzFfMTc1CisjdW5kZWYgWEZJWF9QXzFfNTAxCisjdW5kZWYgWEZJWF9OXzFfODQ3CisjdW5kZWYgWEZJWF9OXzFfOTYxCisjdW5kZWYgWEZJWF9QXzJfMDUzCisjdW5kZWYgWEZJWF9OXzJfNTYyCisjdW5kZWYgWEZJWF9QXzNfMDcyCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoganNpbWRfaWRjdF9pZmFzdF9uZW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCisgKiB0aGUgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBJdCB1c2VzIHRoZSBzYW1lIGNhbGN1bGF0aW9ucworICogYW5kIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGFzIElKRydzIG9yaWdpbmFsICdqcGVnX2lkY3RfaWZhc3QnCisgKiBmdW5jdGlvbiBmcm9tIGppZGN0ZnN0LmMKKyAqCisgKiBOb3JtYWxseSAxLUQgQUFOIERDVCBuZWVkcyA1IG11bHRpcGxpY2F0aW9ucyBhbmQgMjkgYWRkaXRpb25zLgorICogQnV0IGluIEFSTSBORU9OIGNhc2Ugc29tZSBleHRyYSBhZGRpdGlvbnMgYXJlIHJlcXVpcmVkIGJlY2F1c2UgVlFETVVMSAorICogaW5zdHJ1Y3Rpb24gY2FuJ3QgaGFuZGxlIHRoZSBjb25zdGFudHMgbGFyZ2VyIHRoYW4gMS4gU28gdGhlIGV4cHJlc3Npb25zCisgKiBsaWtlICJ4ICogMS4wODIzOTIyMDAiIGhhdmUgdG8gYmUgY29udmVydGVkIHRvICJ4ICogMC4wODIzOTIyMDAgKyB4IiwKKyAqIHdoaWNoIGludHJvZHVjZXMgYW4gZXh0cmEgYWRkaXRpb24uIE92ZXJhbGwsIHRoZXJlIGFyZSA2IGV4dHJhIGFkZGl0aW9ucworICogcGVyIDEtRCBJRENUIHBhc3MsIHRvdGFsbGluZyB0byA1IFZRRE1VTEggYW5kIDM1IFZBREQvVlNVQiBpbnN0cnVjdGlvbnMuCisgKi8KKworI2RlZmluZSBYRklYXzFfMDgyMzkyMjAwICB2MC5oWzBdCisjZGVmaW5lIFhGSVhfMV80MTQyMTM1NjIgIHYwLmhbMV0KKyNkZWZpbmUgWEZJWF8xXzg0Nzc1OTA2NSAgdjAuaFsyXQorI2RlZmluZSBYRklYXzJfNjEzMTI1OTMwICB2MC5oWzNdCisKKy5iYWxpZ24gMTYKK0xqc2ltZF9pZGN0X2lmYXN0X25lb25fY29uc3RzOgorICAuc2hvcnQgKDI3NyAqIDEyOCAtIDI1NiAqIDEyOCkgIC8qIFhGSVhfMV8wODIzOTIyMDAgKi8KKyAgLnNob3J0ICgzNjIgKiAxMjggLSAyNTYgKiAxMjgpICAvKiBYRklYXzFfNDE0MjEzNTYyICovCisgIC5zaG9ydCAoNDczICogMTI4IC0gMjU2ICogMTI4KSAgLyogWEZJWF8xXzg0Nzc1OTA2NSAqLworICAuc2hvcnQgKDY2OSAqIDEyOCAtIDUxMiAqIDEyOCkgIC8qIFhGSVhfMl82MTMxMjU5MzAgKi8KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2lkY3RfaWZhc3RfbmVvbgorCisgICAgRENUX1RBQkxFICAgICAgIC5yZXEgeDAKKyAgICBDT0VGX0JMT0NLICAgICAgLnJlcSB4MQorICAgIE9VVFBVVF9CVUYgICAgICAucmVxIHgyCisgICAgT1VUUFVUX0NPTCAgICAgIC5yZXEgeDMKKyAgICBUTVAxICAgICAgICAgICAgLnJlcSB4MAorICAgIFRNUDIgICAgICAgICAgICAucmVxIHgxCisgICAgVE1QMyAgICAgICAgICAgIC5yZXEgeDkKKyAgICBUTVA0ICAgICAgICAgICAgLnJlcSB4MTAKKyAgICBUTVA1ICAgICAgICAgICAgLnJlcSB4MTEKKyAgICBUTVA2ICAgICAgICAgICAgLnJlcSB4MTIKKyAgICBUTVA3ICAgICAgICAgICAgLnJlcSB4MTMKKyAgICBUTVA4ICAgICAgICAgICAgLnJlcSB4MTQKKworICAgIC8qIE9VVFBVVF9DT0wgaXMgYSBKRElNRU5TSU9OICh1bnNpZ25lZCBpbnQpIGFyZ3VtZW50LCBzbyB0aGUgQUJJIGRvZXNuJ3QKKyAgICAgICBndWFyYW50ZWUgdGhhdCB0aGUgdXBwZXIgKHVudXNlZCkgMzIgYml0cyBvZiB4MyBhcmUgdmFsaWQuICBUaGlzCisgICAgICAgaW5zdHJ1Y3Rpb24gZW5zdXJlcyB0aGF0IHRob3NlIGJpdHMgYXJlIHNldCB0byB6ZXJvLiAqLworICAgIHV4dHcgeDMsIHczCisKKyAgICAvKiBMb2FkIGFuZCBkZXF1YW50aXplIGNvZWZmaWNpZW50cyBpbnRvIE5FT04gcmVnaXN0ZXJzCisgICAgICogd2l0aCB0aGUgZm9sbG93aW5nIGFsbG9jYXRpb246CisgICAgICogICAgICAgMCAxIDIgMyB8IDQgNSA2IDcKKyAgICAgKiAgICAgIC0tLS0tLS0tLSstLS0tLS0tLQorICAgICAqICAgMCB8IGQxNiAgICAgfCBkMTcgICAgICggdjE2LjhoICkKKyAgICAgKiAgIDEgfCBkMTggICAgIHwgZDE5ICAgICAoIHYxNy44aCApCisgICAgICogICAyIHwgZDIwICAgICB8IGQyMSAgICAgKCB2MTguOGggKQorICAgICAqICAgMyB8IGQyMiAgICAgfCBkMjMgICAgICggdjE5LjhoICkKKyAgICAgKiAgIDQgfCBkMjQgICAgIHwgZDI1ICAgICAoIHYyMC44aCApCisgICAgICogICA1IHwgZDI2ICAgICB8IGQyNyAgICAgKCB2MjEuOGggKQorICAgICAqICAgNiB8IGQyOCAgICAgfCBkMjkgICAgICggdjIyLjhoICkKKyAgICAgKiAgIDcgfCBkMzAgICAgIHwgZDMxICAgICAoIHYyMy44aCApCisgICAgICovCisgICAgLyogU2F2ZSBORU9OIHJlZ2lzdGVycyB1c2VkIGluIGZhc3QgSURDVCAqLworICAgIGFkciAgICAgICAgICAgICBUTVA1LCBManNpbWRfaWRjdF9pZmFzdF9uZW9uX2NvbnN0cworICAgIGxkMSAgICAgICAgICAgICB7djE2LjhoLCB2MTcuOGh9LCBbQ09FRl9CTE9DS10sIDMyCisgICAgbGQxICAgICAgICAgICAgIHt2MC44aCwgdjEuOGh9LCBbRENUX1RBQkxFXSwgMzIKKyAgICBsZDEgICAgICAgICAgICAge3YxOC44aCwgdjE5LjhofSwgW0NPRUZfQkxPQ0tdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2MTYuOGgsIHYxNi44aCwgdjAuOGgKKyAgICBsZDEgICAgICAgICAgICAge3YyLjhoLCB2My44aH0sIFtEQ1RfVEFCTEVdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2MTcuOGgsIHYxNy44aCwgdjEuOGgKKyAgICBsZDEgICAgICAgICAgICAge3YyMC44aCwgdjIxLjhofSwgW0NPRUZfQkxPQ0tdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2MTguOGgsIHYxOC44aCwgdjIuOGgKKyAgICBsZDEgICAgICAgICAgICAge3YwLjhoLCB2MS44aH0sIFtEQ1RfVEFCTEVdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2MTkuOGgsIHYxOS44aCwgdjMuOGgKKyAgICBsZDEgICAgICAgICAgICAge3YyMi44aCwgdjIzLjhofSwgW0NPRUZfQkxPQ0tdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2MjAuOGgsIHYyMC44aCwgdjAuOGgKKyAgICBsZDEgICAgICAgICAgICAge3YyLjhoLCB2My44aH0sIFtEQ1RfVEFCTEVdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2MjIuOGgsIHYyMi44aCwgdjIuOGgKKyAgICBtdWwgICAgICAgICAgICAgdjIxLjhoLCB2MjEuOGgsIHYxLjhoCisgICAgbGQxICAgICAgICAgICAgIHt2MC40aH0sIFtUTVA1XSAgICAgICAgLyogbG9hZCBjb25zdGFudHMgKi8KKyAgICBtdWwgICAgICAgICAgICAgdjIzLjhoLCB2MjMuOGgsIHYzLjhoCisKKyAgICAvKiAxLUQgSURDVCwgcGFzcyAxICovCisgICAgc3ViICAgICAgICAgICAgIHYyLjhoLCB2MTguOGgsIHYyMi44aAorICAgIGFkZCAgICAgICAgICAgICB2MjIuOGgsIHYxOC44aCwgdjIyLjhoCisgICAgc3ViICAgICAgICAgICAgIHYxLjhoLCB2MTkuOGgsIHYyMS44aAorICAgIGFkZCAgICAgICAgICAgICB2MjEuOGgsIHYxOS44aCwgdjIxLjhoCisgICAgc3ViICAgICAgICAgICAgIHY1LjhoLCB2MTcuOGgsIHYyMy44aAorICAgIGFkZCAgICAgICAgICAgICB2MjMuOGgsIHYxNy44aCwgdjIzLjhoCisgICAgc3FkbXVsaCAgICAgICAgIHY0LjhoLCB2Mi44aCwgWEZJWF8xXzQxNDIxMzU2MgorICAgIHNxZG11bGggICAgICAgICB2Ni44aCwgdjEuOGgsIFhGSVhfMl82MTMxMjU5MzAKKyAgICBhZGQgICAgICAgICAgICAgdjMuOGgsIHYxLjhoLCB2MS44aAorICAgIHN1YiAgICAgICAgICAgICB2MS44aCwgdjUuOGgsIHYxLjhoCisgICAgYWRkICAgICAgICAgICAgIHYxOC44aCwgdjIuOGgsIHY0LjhoCisgICAgc3FkbXVsaCAgICAgICAgIHY0LjhoLCB2MS44aCwgWEZJWF8xXzg0Nzc1OTA2NQorICAgIHN1YiAgICAgICAgICAgICB2Mi44aCwgdjIzLjhoLCB2MjEuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjMuOGgsIHYzLjhoLCB2Ni44aAorICAgIHNxZG11bGggICAgICAgICB2Ni44aCwgdjIuOGgsIFhGSVhfMV80MTQyMTM1NjIKKyAgICBhZGQgICAgICAgICAgICAgdjEuOGgsIHYxLjhoLCB2NC44aAorICAgIHNxZG11bGggICAgICAgICB2NC44aCwgdjUuOGgsIFhGSVhfMV8wODIzOTIyMDAKKyAgICBzdWIgICAgICAgICAgICAgdjE4LjhoLCB2MTguOGgsIHYyMi44aAorICAgIGFkZCAgICAgICAgICAgICB2Mi44aCwgdjIuOGgsIHY2LjhoCisgICAgc3ViICAgICAgICAgICAgIHY2LjhoLCB2MTYuOGgsIHYyMC44aAorICAgIGFkZCAgICAgICAgICAgICB2MjAuOGgsIHYxNi44aCwgdjIwLjhoCisgICAgYWRkICAgICAgICAgICAgIHYxNy44aCwgdjUuOGgsIHY0LjhoCisgICAgYWRkICAgICAgICAgICAgIHY1LjhoLCB2Ni44aCwgdjE4LjhoCisgICAgc3ViICAgICAgICAgICAgIHYxOC44aCwgdjYuOGgsIHYxOC44aAorICAgIGFkZCAgICAgICAgICAgICB2Ni44aCwgdjIzLjhoLCB2MjEuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE2LjhoLCB2MjAuOGgsIHYyMi44aAorICAgIHN1YiAgICAgICAgICAgICB2My44aCwgdjYuOGgsIHYzLjhoCisgICAgc3ViICAgICAgICAgICAgIHYyMC44aCwgdjIwLjhoLCB2MjIuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjMuOGgsIHYzLjhoLCB2MS44aAorICAgIHN1YiAgICAgICAgICAgICB2MS44aCwgdjE3LjhoLCB2MS44aAorICAgIGFkZCAgICAgICAgICAgICB2Mi44aCwgdjMuOGgsIHYyLjhoCisgICAgc3ViICAgICAgICAgICAgIHYyMy44aCwgdjE2LjhoLCB2Ni44aAorICAgIGFkZCAgICAgICAgICAgICB2MS44aCwgdjEuOGgsIHYyLjhoCisgICAgYWRkICAgICAgICAgICAgIHYxNi44aCwgdjE2LjhoLCB2Ni44aAorICAgIGFkZCAgICAgICAgICAgICB2MjIuOGgsIHY1LjhoLCB2My44aAorICAgIHN1YiAgICAgICAgICAgICB2MTcuOGgsIHY1LjhoLCB2My44aAorICAgIHN1YiAgICAgICAgICAgICB2MjEuOGgsIHYxOC44aCwgdjIuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE4LjhoLCB2MTguOGgsIHYyLjhoCisgICAgc3ViICAgICAgICAgICAgIHYxOS44aCwgdjIwLjhoLCB2MS44aAorICAgIGFkZCAgICAgICAgICAgICB2MjAuOGgsIHYyMC44aCwgdjEuOGgKKyAgICB0cmFuc3Bvc2VfOHg4ICAgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyOCwgdjI5LCB2MzAsIHYzMQorICAgIC8qIDEtRCBJRENULCBwYXNzIDIgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjIuOGgsIHYxOC44aCwgdjIyLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMi44aCwgdjE4LjhoLCB2MjIuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjEuOGgsIHYxOS44aCwgdjIxLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMS44aCwgdjE5LjhoLCB2MjEuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjUuOGgsIHYxNy44aCwgdjIzLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMy44aCwgdjE3LjhoLCB2MjMuOGgKKyAgICBzcWRtdWxoICAgICAgICAgdjQuOGgsIHYyLjhoLCBYRklYXzFfNDE0MjEzNTYyCisgICAgc3FkbXVsaCAgICAgICAgIHY2LjhoLCB2MS44aCwgWEZJWF8yXzYxMzEyNTkzMAorICAgIGFkZCAgICAgICAgICAgICB2My44aCwgdjEuOGgsIHYxLjhoCisgICAgc3ViICAgICAgICAgICAgIHYxLjhoLCB2NS44aCwgdjEuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE4LjhoLCB2Mi44aCwgdjQuOGgKKyAgICBzcWRtdWxoICAgICAgICAgdjQuOGgsIHYxLjhoLCBYRklYXzFfODQ3NzU5MDY1CisgICAgc3ViICAgICAgICAgICAgIHYyLjhoLCB2MjMuOGgsIHYyMS44aAorICAgIGFkZCAgICAgICAgICAgICB2My44aCwgdjMuOGgsIHY2LjhoCisgICAgc3FkbXVsaCAgICAgICAgIHY2LjhoLCB2Mi44aCwgWEZJWF8xXzQxNDIxMzU2MgorICAgIGFkZCAgICAgICAgICAgICB2MS44aCwgdjEuOGgsIHY0LjhoCisgICAgc3FkbXVsaCAgICAgICAgIHY0LjhoLCB2NS44aCwgWEZJWF8xXzA4MjM5MjIwMAorICAgIHN1YiAgICAgICAgICAgICB2MTguOGgsIHYxOC44aCwgdjIyLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyLjhoLCB2Mi44aCwgdjYuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjYuOGgsIHYxNi44aCwgdjIwLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMC44aCwgdjE2LjhoLCB2MjAuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE3LjhoLCB2NS44aCwgdjQuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjUuOGgsIHY2LjhoLCB2MTguOGgKKyAgICBzdWIgICAgICAgICAgICAgdjE4LjhoLCB2Ni44aCwgdjE4LjhoCisgICAgYWRkICAgICAgICAgICAgIHY2LjhoLCB2MjMuOGgsIHYyMS44aAorICAgIGFkZCAgICAgICAgICAgICB2MTYuOGgsIHYyMC44aCwgdjIyLjhoCisgICAgc3ViICAgICAgICAgICAgIHYzLjhoLCB2Ni44aCwgdjMuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjIwLjhoLCB2MjAuOGgsIHYyMi44aAorICAgIHN1YiAgICAgICAgICAgICB2My44aCwgdjMuOGgsIHYxLjhoCisgICAgc3ViICAgICAgICAgICAgIHYxLjhoLCB2MTcuOGgsIHYxLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyLjhoLCB2My44aCwgdjIuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjIzLjhoLCB2MTYuOGgsIHY2LjhoCisgICAgYWRkICAgICAgICAgICAgIHYxLjhoLCB2MS44aCwgdjIuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE2LjhoLCB2MTYuOGgsIHY2LjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMi44aCwgdjUuOGgsIHYzLjhoCisgICAgc3ViICAgICAgICAgICAgIHYxNy44aCwgdjUuOGgsIHYzLjhoCisgICAgc3ViICAgICAgICAgICAgIHYyMS44aCwgdjE4LjhoLCB2Mi44aAorICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHYxOC44aCwgdjIuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjE5LjhoLCB2MjAuOGgsIHYxLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMC44aCwgdjIwLjhoLCB2MS44aAorICAgIC8qIERlc2NhbGUgdG8gOC1iaXQgYW5kIHJhbmdlIGxpbWl0ICovCisgICAgbW92aSAgICAgICAgICAgIHYwLjE2YiwgIzB4ODAKKyAgICAgIC8qIFByZXBhcmUgcG9pbnRlcnMgKGR1YWwtaXNzdWUgd2l0aCBORU9OIGluc3RydWN0aW9ucykgKi8KKyAgICAgIGxkcCAgICAgICAgICAgICBUTVAxLCBUTVAyLCBbT1VUUFVUX0JVRl0sIDE2CisgICAgc3FzaHJuICAgICAgICAgIHYyOC44YiwgdjE2LjhoLCAjNQorICAgICAgbGRwICAgICAgICAgICAgIFRNUDMsIFRNUDQsIFtPVVRQVVRfQlVGXSwgMTYKKyAgICBzcXNocm4gICAgICAgICAgdjI5LjhiLCB2MTcuOGgsICM1CisgICAgICBhZGQgICAgICAgICAgICAgVE1QMSwgVE1QMSwgT1VUUFVUX0NPTAorICAgIHNxc2hybiAgICAgICAgICB2MzAuOGIsIHYxOC44aCwgIzUKKyAgICAgIGFkZCAgICAgICAgICAgICBUTVAyLCBUTVAyLCBPVVRQVVRfQ09MCisgICAgc3FzaHJuICAgICAgICAgIHYzMS44YiwgdjE5LjhoLCAjNQorICAgICAgYWRkICAgICAgICAgICAgIFRNUDMsIFRNUDMsIE9VVFBVVF9DT0wKKyAgICBzcXNocm4yICAgICAgICAgdjI4LjE2YiwgdjIwLjhoLCAjNQorICAgICAgYWRkICAgICAgICAgICAgIFRNUDQsIFRNUDQsIE9VVFBVVF9DT0wKKyAgICBzcXNocm4yICAgICAgICAgdjI5LjE2YiwgdjIxLjhoLCAjNQorICAgICAgbGRwICAgICAgICAgICAgIFRNUDUsIFRNUDYsIFtPVVRQVVRfQlVGXSwgMTYKKyAgICBzcXNocm4yICAgICAgICAgdjMwLjE2YiwgdjIyLjhoLCAjNQorICAgICAgbGRwICAgICAgICAgICAgIFRNUDcsIFRNUDgsIFtPVVRQVVRfQlVGXSwgMTYKKyAgICBzcXNocm4yICAgICAgICAgdjMxLjE2YiwgdjIzLjhoLCAjNQorICAgICAgYWRkICAgICAgICAgICAgIFRNUDUsIFRNUDUsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgdjE2LjE2YiwgdjI4LjE2YiwgdjAuMTZiCisgICAgICBhZGQgICAgICAgICAgICAgVE1QNiwgVE1QNiwgT1VUUFVUX0NPTAorICAgIGFkZCAgICAgICAgICAgICB2MTguMTZiLCB2MjkuMTZiLCB2MC4xNmIKKyAgICAgIGFkZCAgICAgICAgICAgICBUTVA3LCBUTVA3LCBPVVRQVVRfQ09MCisgICAgYWRkICAgICAgICAgICAgIHYyMC4xNmIsIHYzMC4xNmIsIHYwLjE2YgorICAgICAgYWRkICAgICAgICAgICAgIFRNUDgsIFRNUDgsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgdjIyLjE2YiwgdjMxLjE2YiwgdjAuMTZiCisKKyAgICAvKiBUcmFuc3Bvc2UgdGhlIGZpbmFsIDgtYml0IHNhbXBsZXMgKi8KKyAgICB0cm4xICAgICAgICAgICAgdjI4LjE2YiwgdjE2LjE2YiwgdjE4LjE2YgorICAgIHRybjEgICAgICAgICAgICB2MzAuMTZiLCB2MjAuMTZiLCB2MjIuMTZiCisgICAgdHJuMiAgICAgICAgICAgIHYyOS4xNmIsIHYxNi4xNmIsIHYxOC4xNmIKKyAgICB0cm4yICAgICAgICAgICAgdjMxLjE2YiwgdjIwLjE2YiwgdjIyLjE2YgorCisgICAgdHJuMSAgICAgICAgICAgIHYxNi44aCwgdjI4LjhoLCB2MzAuOGgKKyAgICB0cm4yICAgICAgICAgICAgdjE4LjhoLCB2MjguOGgsIHYzMC44aAorICAgIHRybjEgICAgICAgICAgICB2MjAuOGgsIHYyOS44aCwgdjMxLjhoCisgICAgdHJuMiAgICAgICAgICAgIHYyMi44aCwgdjI5LjhoLCB2MzEuOGgKKworICAgIHV6cDEgICAgICAgICAgICB2MjguNHMsIHYxNi40cywgdjE4LjRzCisgICAgdXpwMiAgICAgICAgICAgIHYzMC40cywgdjE2LjRzLCB2MTguNHMKKyAgICB1enAxICAgICAgICAgICAgdjI5LjRzLCB2MjAuNHMsIHYyMi40cworICAgIHV6cDIgICAgICAgICAgICB2MzEuNHMsIHYyMC40cywgdjIyLjRzCisKKyAgICAvKiBTdG9yZSByZXN1bHRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgc3QxICAgICAgICAgICAgIHt2MjguZH1bMF0sIFtUTVAxXQorICAgIHN0MSAgICAgICAgICAgICB7djI5LmR9WzBdLCBbVE1QMl0KKyAgICBzdDEgICAgICAgICAgICAge3YyOC5kfVsxXSwgW1RNUDNdCisgICAgc3QxICAgICAgICAgICAgIHt2MjkuZH1bMV0sIFtUTVA0XQorICAgIHN0MSAgICAgICAgICAgICB7djMwLmR9WzBdLCBbVE1QNV0KKyAgICBzdDEgICAgICAgICAgICAge3YzMS5kfVswXSwgW1RNUDZdCisgICAgc3QxICAgICAgICAgICAgIHt2MzAuZH1bMV0sIFtUTVA3XQorICAgIHN0MSAgICAgICAgICAgICB7djMxLmR9WzFdLCBbVE1QOF0KKyAgICBibHIgICAgICAgICAgICAgeDMwCisKKyAgICAudW5yZXEgICAgICAgICAgRENUX1RBQkxFCisgICAgLnVucmVxICAgICAgICAgIENPRUZfQkxPQ0sKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQ09MCisgICAgLnVucmVxICAgICAgICAgIFRNUDEKKyAgICAudW5yZXEgICAgICAgICAgVE1QMgorICAgIC51bnJlcSAgICAgICAgICBUTVAzCisgICAgLnVucmVxICAgICAgICAgIFRNUDQKKyAgICAudW5yZXEgICAgICAgICAgVE1QNQorICAgIC51bnJlcSAgICAgICAgICBUTVA2CisgICAgLnVucmVxICAgICAgICAgIFRNUDcKKyAgICAudW5yZXEgICAgICAgICAgVE1QOAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2lkY3RfNHg0X25lb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGludmVyc2UtRENUIGNvZGUgZm9yIGdldHRpbmcgcmVkdWNlZC1zaXplCisgKiA0eDQgcGl4ZWxzIG91dHB1dCBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suIEl0IHVzZXMgdGhlIHNhbWUgIGNhbGN1bGF0aW9ucworICogYW5kIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGFzIElKRydzIG9yaWdpbmFsICdqcGVnX2lkY3RfNHg0JworICogZnVuY3Rpb24gZnJvbSBqcGVnLTZiIChqaWRjdHJlZC5jKS4KKyAqCisgKiBOT1RFOiBqcGVnLTggaGFzIGFuIGltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIDR4NCBpbnZlcnNlLURDVCwgd2hpY2gKKyAqICAgICAgIHJlcXVpcmVzIG11Y2ggbGVzcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgYW5kIGhlbmNlIHNob3VsZCBiZSBmYXN0ZXIuCisgKiAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBORU9OIG9wdGltaXplZCBmdW5jdGlvbiBpcworICogICAgICAgYml0IGV4YWN0IGNvbXBhdGliaWxpdHkgd2l0aCBqcGVnLTZiLgorICoKKyAqIFRPRE86IGEgYml0IGJldHRlciBpbnN0cnVjdGlvbnMgc2NoZWR1bGluZyBjYW4gYmUgYWNoaWV2ZWQgYnkgZXhwYW5kaW5nCisgKiAgICAgICBpZGN0X2hlbHBlci90cmFuc3Bvc2VfNHg0IG1hY3JvcyBhbmQgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMsCisgKiAgICAgICBidXQgcmVhZGFiaWxpdHkgd2lsbCBzdWZmZXIgc29tZXdoYXQuCisgKi8KKworI2RlZmluZSBDT05TVF9CSVRTICAxMworCisjZGVmaW5lIEZJWF8wXzIxMTE2NDI0MyAgKDE3MzApICAgLyogRklYKDAuMjExMTY0MjQzKSAqLworI2RlZmluZSBGSVhfMF81MDk3OTU1NzkgICg0MTc2KSAgIC8qIEZJWCgwLjUwOTc5NTU3OSkgKi8KKyNkZWZpbmUgRklYXzBfNjAxMzQ0ODg3ICAoNDkyNikgICAvKiBGSVgoMC42MDEzNDQ4ODcpICovCisjZGVmaW5lIEZJWF8wXzcyMDk1OTgyMiAgKDU5MDYpICAgLyogRklYKDAuNzIwOTU5ODIyKSAqLworI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICg2MjcwKSAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzBfODUwNDMwMDk1ICAoNjk2NykgICAvKiBGSVgoMC44NTA0MzAwOTUpICovCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKDczNzMpICAgLyogRklYKDAuODk5OTc2MjIzKSAqLworI2RlZmluZSBGSVhfMV8wNjE1OTQzMzcgICg4Njk3KSAgIC8qIEZJWCgxLjA2MTU5NDMzNykgKi8KKyNkZWZpbmUgRklYXzFfMjcyNzU4NTgwICAoMTA0MjYpICAvKiBGSVgoMS4yNzI3NTg1ODApICovCisjZGVmaW5lIEZJWF8xXzQ1MTc3NDk4MSAgKDExODkzKSAgLyogRklYKDEuNDUxNzc0OTgxKSAqLworI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgICgxNTEzNykgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzJfMTcyNzM0ODAzICAoMTc3OTkpICAvKiBGSVgoMi4xNzI3MzQ4MDMpICovCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKDIwOTk1KSAgLyogRklYKDIuNTYyOTE1NDQ3KSAqLworI2RlZmluZSBGSVhfM182MjQ1MDk3ODUgICgyOTY5MikgIC8qIEZJWCgzLjYyNDUwOTc4NSkgKi8KKworLmJhbGlnbiAxNgorTGpzaW1kX2lkY3RfNHg0X25lb25fY29uc3RzOgorICAuc2hvcnQgRklYXzFfODQ3NzU5MDY1ICAgICAgICAvKiB2MC5oWzBdICovCisgIC5zaG9ydCAtRklYXzBfNzY1MzY2ODY1ICAgICAgIC8qIHYwLmhbMV0gKi8KKyAgLnNob3J0IC1GSVhfMF8yMTExNjQyNDMgICAgICAgLyogdjAuaFsyXSAqLworICAuc2hvcnQgRklYXzFfNDUxNzc0OTgxICAgICAgICAvKiB2MC5oWzNdICovCisgIC5zaG9ydCAtRklYXzJfMTcyNzM0ODAzICAgICAgIC8qIGQxWzBdICovCisgIC5zaG9ydCBGSVhfMV8wNjE1OTQzMzcgICAgICAgIC8qIGQxWzFdICovCisgIC5zaG9ydCAtRklYXzBfNTA5Nzk1NTc5ICAgICAgIC8qIGQxWzJdICovCisgIC5zaG9ydCAtRklYXzBfNjAxMzQ0ODg3ICAgICAgIC8qIGQxWzNdICovCisgIC5zaG9ydCBGSVhfMF84OTk5NzYyMjMgICAgICAgIC8qIHYyLmhbMF0gKi8KKyAgLnNob3J0IEZJWF8yXzU2MjkxNTQ0NyAgICAgICAgLyogdjIuaFsxXSAqLworICAuc2hvcnQgMSA8PCAoQ09OU1RfQklUUyArIDEpICAvKiB2Mi5oWzJdICovCisgIC5zaG9ydCAwICAgICAgICAgICAgICAgICAgICAgIC8qIHYyLmhbM10gKi8KKworLm1hY3JvIGlkY3RfaGVscGVyIHg0LCB4NiwgeDgsIHgxMCwgeDEyLCB4MTQsIHgxNiwgc2hpZnQsIHkyNiwgeTI3LCB5MjgsIHkyOQorICAgIHNtdWxsICAgICAgICAgICB2MjguNHMsIFx4NCwgdjIuaFsyXQorICAgIHNtbGFsICAgICAgICAgICB2MjguNHMsIFx4OCwgdjAuaFswXQorICAgIHNtbGFsICAgICAgICAgICB2MjguNHMsIFx4MTQsIHYwLmhbMV0KKworICAgIHNtdWxsICAgICAgICAgICB2MjYuNHMsIFx4MTYsIHYxLmhbMl0KKyAgICBzbWxhbCAgICAgICAgICAgdjI2LjRzLCBceDEyLCB2MS5oWzNdCisgICAgc21sYWwgICAgICAgICAgIHYyNi40cywgXHgxMCwgdjIuaFswXQorICAgIHNtbGFsICAgICAgICAgICB2MjYuNHMsIFx4NiwgdjIuaFsxXQorCisgICAgc211bGwgICAgICAgICAgIHYzMC40cywgXHg0LCB2Mi5oWzJdCisgICAgc21sc2wgICAgICAgICAgIHYzMC40cywgXHg4LCB2MC5oWzBdCisgICAgc21sc2wgICAgICAgICAgIHYzMC40cywgXHgxNCwgdjAuaFsxXQorCisgICAgc211bGwgICAgICAgICAgIHYyNC40cywgXHgxNiwgdjAuaFsyXQorICAgIHNtbGFsICAgICAgICAgICB2MjQuNHMsIFx4MTIsIHYwLmhbM10KKyAgICBzbWxhbCAgICAgICAgICAgdjI0LjRzLCBceDEwLCB2MS5oWzBdCisgICAgc21sYWwgICAgICAgICAgIHYyNC40cywgXHg2LCB2MS5oWzFdCisKKyAgICBhZGQgICAgICAgICAgICAgdjIwLjRzLCB2MjguNHMsIHYyNi40cworICAgIHN1YiAgICAgICAgICAgICB2MjguNHMsIHYyOC40cywgdjI2LjRzCisKKyAgLmlmIFxzaGlmdCA+IDE2CisgICAgc3JzaHIgICAgICAgICAgIHYyMC40cywgdjIwLjRzLCAjXHNoaWZ0CisgICAgc3JzaHIgICAgICAgICAgIHYyOC40cywgdjI4LjRzLCAjXHNoaWZ0CisgICAgeHRuICAgICAgICAgICAgIFx5MjYsIHYyMC40cworICAgIHh0biAgICAgICAgICAgICBceTI5LCB2MjguNHMKKyAgLmVsc2UKKyAgICByc2hybiAgICAgICAgICAgXHkyNiwgdjIwLjRzLCAjXHNoaWZ0CisgICAgcnNocm4gICAgICAgICAgIFx5MjksIHYyOC40cywgI1xzaGlmdAorICAuZW5kaWYKKworICAgIGFkZCAgICAgICAgICAgICB2MjAuNHMsIHYzMC40cywgdjI0LjRzCisgICAgc3ViICAgICAgICAgICAgIHYzMC40cywgdjMwLjRzLCB2MjQuNHMKKworICAuaWYgXHNoaWZ0ID4gMTYKKyAgICBzcnNociAgICAgICAgICAgdjIwLjRzLCB2MjAuNHMsICNcc2hpZnQKKyAgICBzcnNociAgICAgICAgICAgdjMwLjRzLCB2MzAuNHMsICNcc2hpZnQKKyAgICB4dG4gICAgICAgICAgICAgXHkyNywgdjIwLjRzCisgICAgeHRuICAgICAgICAgICAgIFx5MjgsIHYzMC40cworICAuZWxzZQorICAgIHJzaHJuICAgICAgICAgICBceTI3LCB2MjAuNHMsICNcc2hpZnQKKyAgICByc2hybiAgICAgICAgICAgXHkyOCwgdjMwLjRzLCAjXHNoaWZ0CisgIC5lbmRpZgorLmVuZG0KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2lkY3RfNHg0X25lb24KKworICAgIERDVF9UQUJMRSAgICAgICAucmVxIHgwCisgICAgQ09FRl9CTE9DSyAgICAgIC5yZXEgeDEKKyAgICBPVVRQVVRfQlVGICAgICAgLnJlcSB4MgorICAgIE9VVFBVVF9DT0wgICAgICAucmVxIHgzCisgICAgVE1QMSAgICAgICAgICAgIC5yZXEgeDAKKyAgICBUTVAyICAgICAgICAgICAgLnJlcSB4MQorICAgIFRNUDMgICAgICAgICAgICAucmVxIHgyCisgICAgVE1QNCAgICAgICAgICAgIC5yZXEgeDE1CisKKyAgICAvKiBPVVRQVVRfQ09MIGlzIGEgSkRJTUVOU0lPTiAodW5zaWduZWQgaW50KSBhcmd1bWVudCwgc28gdGhlIEFCSSBkb2Vzbid0CisgICAgICAgZ3VhcmFudGVlIHRoYXQgdGhlIHVwcGVyICh1bnVzZWQpIDMyIGJpdHMgb2YgeDMgYXJlIHZhbGlkLiAgVGhpcworICAgICAgIGluc3RydWN0aW9uIGVuc3VyZXMgdGhhdCB0aG9zZSBiaXRzIGFyZSBzZXQgdG8gemVyby4gKi8KKyAgICB1eHR3IHgzLCB3MworCisgICAgLyogU2F2ZSBhbGwgdXNlZCBORU9OIHJlZ2lzdGVycyAqLworICAgIHN1YiAgICAgICAgICAgICBzcCwgc3AsIDY0CisgICAgbW92ICAgICAgICAgICAgIHg5LCBzcAorICAgIC8qIExvYWQgY29uc3RhbnRzICh2My40aCBpcyBqdXN0IHVzZWQgZm9yIHBhZGRpbmcpICovCisgICAgYWRyICAgICAgICAgICAgIFRNUDQsIExqc2ltZF9pZGN0XzR4NF9uZW9uX2NvbnN0cworICAgIHN0MSAgICAgICAgICAgICB7djguOGIsIHY5LjhiLCB2MTAuOGIsIHYxMS44Yn0sIFt4OV0sIDMyCisgICAgc3QxICAgICAgICAgICAgIHt2MTIuOGIsIHYxMy44YiwgdjE0LjhiLCB2MTUuOGJ9LCBbeDldLCAzMgorICAgIGxkMSAgICAgICAgICAgICB7djAuNGgsIHYxLjRoLCB2Mi40aCwgdjMuNGh9LCBbVE1QNF0KKworICAgIC8qIExvYWQgYWxsIENPRUZfQkxPQ0sgaW50byBORU9OIHJlZ2lzdGVycyB3aXRoIHRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbjoKKyAgICAgKiAgICAgICAwIDEgMiAzIHwgNCA1IDYgNworICAgICAqICAgICAgLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICogICAwIHwgdjQuNGggICB8IHY1LjRoCisgICAgICogICAxIHwgdjYuNGggICB8IHY3LjRoCisgICAgICogICAyIHwgdjguNGggICB8IHY5LjRoCisgICAgICogICAzIHwgdjEwLjRoICB8IHYxMS40aAorICAgICAqICAgNCB8IC0gICAgICAgfCAtCisgICAgICogICA1IHwgdjEyLjRoICB8IHYxMy40aAorICAgICAqICAgNiB8IHYxNC40aCAgfCB2MTUuNGgKKyAgICAgKiAgIDcgfCB2MTYuNGggIHwgdjE3LjRoCisgICAgICovCisgICAgbGQxICAgICAgICAgICAgIHt2NC40aCwgdjUuNGgsIHY2LjRoLCB2Ny40aH0sIFtDT0VGX0JMT0NLXSwgMzIKKyAgICBsZDEgICAgICAgICAgICAge3Y4LjRoLCB2OS40aCwgdjEwLjRoLCB2MTEuNGh9LCBbQ09FRl9CTE9DS10sIDMyCisgICAgYWRkICAgICAgICAgICAgIENPRUZfQkxPQ0ssIENPRUZfQkxPQ0ssICMxNgorICAgIGxkMSAgICAgICAgICAgICB7djEyLjRoLCB2MTMuNGgsIHYxNC40aCwgdjE1LjRofSwgW0NPRUZfQkxPQ0tdLCAzMgorICAgIGxkMSAgICAgICAgICAgICB7djE2LjRoLCB2MTcuNGh9LCBbQ09FRl9CTE9DS10sIDE2CisgICAgLyogZGVxdWFudGl6ZSAqLworICAgIGxkMSAgICAgICAgICAgICB7djE4LjRoLCB2MTkuNGgsIHYyMC40aCwgdjIxLjRofSwgW0RDVF9UQUJMRV0sIDMyCisgICAgbXVsICAgICAgICAgICAgIHY0LjRoLCB2NC40aCwgdjE4LjRoCisgICAgbXVsICAgICAgICAgICAgIHY1LjRoLCB2NS40aCwgdjE5LjRoCisgICAgaW5zICAgICAgICAgICAgIHY0LmRbMV0sIHY1LmRbMF0gICAgICAgICAgICAgIC8qIDEyOCBiaXQgcTQgKi8KKyAgICBsZDEgICAgICAgICAgICAge3YyMi40aCwgdjIzLjRoLCB2MjQuNGgsIHYyNS40aH0sIFtEQ1RfVEFCTEVdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2Ni40aCwgdjYuNGgsIHYyMC40aAorICAgIG11bCAgICAgICAgICAgICB2Ny40aCwgdjcuNGgsIHYyMS40aAorICAgIGlucyAgICAgICAgICAgICB2Ni5kWzFdLCB2Ny5kWzBdICAgICAgICAgICAgICAvKiAxMjggYml0IHE2ICovCisgICAgbXVsICAgICAgICAgICAgIHY4LjRoLCB2OC40aCwgdjIyLjRoCisgICAgbXVsICAgICAgICAgICAgIHY5LjRoLCB2OS40aCwgdjIzLjRoCisgICAgaW5zICAgICAgICAgICAgIHY4LmRbMV0sIHY5LmRbMF0gICAgICAgICAgICAgIC8qIDEyOCBiaXQgcTggKi8KKyAgICBhZGQgICAgICAgICAgICAgRENUX1RBQkxFLCBEQ1RfVEFCTEUsICMxNgorICAgIGxkMSAgICAgICAgICAgICB7djI2LjRoLCB2MjcuNGgsIHYyOC40aCwgdjI5LjRofSwgW0RDVF9UQUJMRV0sIDMyCisgICAgbXVsICAgICAgICAgICAgIHYxMC40aCwgdjEwLjRoLCB2MjQuNGgKKyAgICBtdWwgICAgICAgICAgICAgdjExLjRoLCB2MTEuNGgsIHYyNS40aAorICAgIGlucyAgICAgICAgICAgICB2MTAuZFsxXSwgdjExLmRbMF0gICAgICAgICAgICAvKiAxMjggYml0IHExMCAqLworICAgIG11bCAgICAgICAgICAgICB2MTIuNGgsIHYxMi40aCwgdjI2LjRoCisgICAgbXVsICAgICAgICAgICAgIHYxMy40aCwgdjEzLjRoLCB2MjcuNGgKKyAgICBpbnMgICAgICAgICAgICAgdjEyLmRbMV0sIHYxMy5kWzBdICAgICAgICAgICAgLyogMTI4IGJpdCBxMTIgKi8KKyAgICBsZDEgICAgICAgICAgICAge3YzMC40aCwgdjMxLjRofSwgW0RDVF9UQUJMRV0sIDE2CisgICAgbXVsICAgICAgICAgICAgIHYxNC40aCwgdjE0LjRoLCB2MjguNGgKKyAgICBtdWwgICAgICAgICAgICAgdjE1LjRoLCB2MTUuNGgsIHYyOS40aAorICAgIGlucyAgICAgICAgICAgICB2MTQuZFsxXSwgdjE1LmRbMF0gICAgICAgICAgICAvKiAxMjggYml0IHExNCAqLworICAgIG11bCAgICAgICAgICAgICB2MTYuNGgsIHYxNi40aCwgdjMwLjRoCisgICAgbXVsICAgICAgICAgICAgIHYxNy40aCwgdjE3LjRoLCB2MzEuNGgKKyAgICBpbnMgICAgICAgICAgICAgdjE2LmRbMV0sIHYxNy5kWzBdICAgICAgICAgICAgLyogMTI4IGJpdCBxMTYgKi8KKworICAgIC8qIFBhc3MgMSAqLworICAgIGlkY3RfaGVscGVyICAgICB2NC40aCwgdjYuNGgsIHY4LjRoLCB2MTAuNGgsIHYxMi40aCwgdjE0LjRoLCB2MTYuNGgsIDEyLCBcCisgICAgICAgICAgICAgICAgICAgIHY0LjRoLCB2Ni40aCwgdjguNGgsIHYxMC40aAorICAgIHRyYW5zcG9zZV80eDQgICB2NCwgdjYsIHY4LCB2MTAsIHYzCisgICAgaW5zICAgICAgICAgICAgIHYxMC5kWzFdLCB2MTEuZFswXQorICAgIGlkY3RfaGVscGVyICAgICB2NS40aCwgdjcuNGgsIHY5LjRoLCB2MTEuNGgsIHYxMy40aCwgdjE1LjRoLCB2MTcuNGgsIDEyLCBcCisgICAgICAgICAgICAgICAgICAgIHY1LjRoLCB2Ny40aCwgdjkuNGgsIHYxMS40aAorICAgIHRyYW5zcG9zZV80eDQgICB2NSwgdjcsIHY5LCB2MTEsIHYzCisgICAgaW5zICAgICAgICAgICAgIHYxMC5kWzFdLCB2MTEuZFswXQorCisgICAgLyogUGFzcyAyICovCisgICAgaWRjdF9oZWxwZXIgICAgIHY0LjRoLCB2Ni40aCwgdjguNGgsIHYxMC40aCwgdjcuNGgsIHY5LjRoLCB2MTEuNGgsIDE5LCBcCisgICAgICAgICAgICAgICAgICAgIHYyNi40aCwgdjI3LjRoLCB2MjguNGgsIHYyOS40aAorICAgIHRyYW5zcG9zZV80eDQgICB2MjYsIHYyNywgdjI4LCB2MjksIHYzCisKKyAgICAvKiBSYW5nZSBsaW1pdCAqLworICAgIG1vdmkgICAgICAgICAgICB2MzAuOGgsICMweDgwCisgICAgaW5zICAgICAgICAgICAgIHYyNi5kWzFdLCB2MjcuZFswXQorICAgIGlucyAgICAgICAgICAgICB2MjguZFsxXSwgdjI5LmRbMF0KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjhoLCB2MjYuOGgsIHYzMC44aAorICAgIGFkZCAgICAgICAgICAgICB2MjguOGgsIHYyOC44aCwgdjMwLjhoCisgICAgc3F4dHVuICAgICAgICAgIHYyNi44YiwgdjI2LjhoCisgICAgc3F4dHVuICAgICAgICAgIHYyNy44YiwgdjI4LjhoCisKKyAgICAvKiBTdG9yZSByZXN1bHRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgbGRwICAgICAgICAgICAgIFRNUDEsIFRNUDIsIFtPVVRQVVRfQlVGXSwgMTYKKyAgICBsZHAgICAgICAgICAgICAgVE1QMywgVE1QNCwgW09VVFBVVF9CVUZdCisgICAgYWRkICAgICAgICAgICAgIFRNUDEsIFRNUDEsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgT1VUUFVUX0NPTAorICAgIGFkZCAgICAgICAgICAgICBUTVAzLCBUTVAzLCBPVVRQVVRfQ09MCisgICAgYWRkICAgICAgICAgICAgIFRNUDQsIFRNUDQsIE9VVFBVVF9DT0wKKworI2lmIGRlZmluZWQoX19BUk1FTF9fKSAmJiAhUkVTUEVDVF9TVFJJQ1RfQUxJR05NRU5UCisgICAgLyogV2UgY2FuIHVzZSBtdWNoIGxlc3MgaW5zdHJ1Y3Rpb25zIG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcyBpZiB0aGUKKyAgICAgKiBPUyBrZXJuZWwgaXMgbm90IGNvbmZpZ3VyZWQgdG8gdHJhcCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzCisgICAgICovCisgICAgc3QxICAgICAgICAgICAgIHt2MjYuc31bMF0sIFtUTVAxXSwgNAorICAgIHN0MSAgICAgICAgICAgICB7djI3LnN9WzBdLCBbVE1QM10sIDQKKyAgICBzdDEgICAgICAgICAgICAge3YyNi5zfVsxXSwgW1RNUDJdLCA0CisgICAgc3QxICAgICAgICAgICAgIHt2Mjcuc31bMV0sIFtUTVA0XSwgNAorI2Vsc2UKKyAgICBzdDEgICAgICAgICAgICAge3YyNi5ifVswXSwgW1RNUDFdLCAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjcuYn1bMF0sIFtUTVAzXSwgMQorICAgIHN0MSAgICAgICAgICAgICB7djI2LmJ9WzFdLCBbVE1QMV0sIDEKKyAgICBzdDEgICAgICAgICAgICAge3YyNy5ifVsxXSwgW1RNUDNdLCAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjYuYn1bMl0sIFtUTVAxXSwgMQorICAgIHN0MSAgICAgICAgICAgICB7djI3LmJ9WzJdLCBbVE1QM10sIDEKKyAgICBzdDEgICAgICAgICAgICAge3YyNi5ifVszXSwgW1RNUDFdLCAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjcuYn1bM10sIFtUTVAzXSwgMQorCisgICAgc3QxICAgICAgICAgICAgIHt2MjYuYn1bNF0sIFtUTVAyXSwgMQorICAgIHN0MSAgICAgICAgICAgICB7djI3LmJ9WzRdLCBbVE1QNF0sIDEKKyAgICBzdDEgICAgICAgICAgICAge3YyNi5ifVs1XSwgW1RNUDJdLCAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjcuYn1bNV0sIFtUTVA0XSwgMQorICAgIHN0MSAgICAgICAgICAgICB7djI2LmJ9WzZdLCBbVE1QMl0sIDEKKyAgICBzdDEgICAgICAgICAgICAge3YyNy5ifVs2XSwgW1RNUDRdLCAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjYuYn1bN10sIFtUTVAyXSwgMQorICAgIHN0MSAgICAgICAgICAgICB7djI3LmJ9WzddLCBbVE1QNF0sIDEKKyNlbmRpZgorCisgICAgLyogdnBvcCAgICAgICAgICAgIHt2OC40aCAtIHYxNS40aH0gICAgO25vdCBhdmFpbGFibGUgKi8KKyAgICBsZDEgICAgICAgICAgICAge3Y4LjhiLCB2OS44YiwgdjEwLjhiLCB2MTEuOGJ9LCBbc3BdLCAzMgorICAgIGxkMSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3NwXSwgMzIKKyAgICBibHIgICAgICAgICAgICAgeDMwCisKKyAgICAudW5yZXEgICAgICAgICAgRENUX1RBQkxFCisgICAgLnVucmVxICAgICAgICAgIENPRUZfQkxPQ0sKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQ09MCisgICAgLnVucmVxICAgICAgICAgIFRNUDEKKyAgICAudW5yZXEgICAgICAgICAgVE1QMgorICAgIC51bnJlcSAgICAgICAgICBUTVAzCisgICAgLnVucmVxICAgICAgICAgIFRNUDQKKworLnB1cmdlbSBpZGN0X2hlbHBlcgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2lkY3RfMngyX25lb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGludmVyc2UtRENUIGNvZGUgZm9yIGdldHRpbmcgcmVkdWNlZC1zaXplCisgKiAyeDIgcGl4ZWxzIG91dHB1dCBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suIEl0IHVzZXMgdGhlIHNhbWUgIGNhbGN1bGF0aW9ucworICogYW5kIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGFzIElKRydzIG9yaWdpbmFsICdqcGVnX2lkY3RfMngyJworICogZnVuY3Rpb24gZnJvbSBqcGVnLTZiIChqaWRjdHJlZC5jKS4KKyAqCisgKiBOT1RFOiBqcGVnLTggaGFzIGFuIGltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIDJ4MiBpbnZlcnNlLURDVCwgd2hpY2gKKyAqICAgICAgIHJlcXVpcmVzIG11Y2ggbGVzcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgYW5kIGhlbmNlIHNob3VsZCBiZSBmYXN0ZXIuCisgKiAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBORU9OIG9wdGltaXplZCBmdW5jdGlvbiBpcworICogICAgICAgYml0IGV4YWN0IGNvbXBhdGliaWxpdHkgd2l0aCBqcGVnLTZiLgorICovCisKKy5iYWxpZ24gOAorTGpzaW1kX2lkY3RfMngyX25lb25fY29uc3RzOgorICAuc2hvcnQgLUZJWF8wXzcyMDk1OTgyMiAgLyogdjE0WzBdICovCisgIC5zaG9ydCBGSVhfMF84NTA0MzAwOTUgICAvKiB2MTRbMV0gKi8KKyAgLnNob3J0IC1GSVhfMV8yNzI3NTg1ODAgIC8qIHYxNFsyXSAqLworICAuc2hvcnQgRklYXzNfNjI0NTA5Nzg1ICAgLyogdjE0WzNdICovCisKKy5tYWNybyBpZGN0X2hlbHBlciB4NCwgeDYsIHgxMCwgeDEyLCB4MTYsIHNoaWZ0LCB5MjYsIHkyNworICAgIHNzaGxsICAgICAgICAgICB2MTUuNHMsIFx4NCwgIzE1CisgICAgc211bGwgICAgICAgICAgIHYyNi40cywgXHg2LCB2MTQuaFszXQorICAgIHNtbGFsICAgICAgICAgICB2MjYuNHMsIFx4MTAsIHYxNC5oWzJdCisgICAgc21sYWwgICAgICAgICAgIHYyNi40cywgXHgxMiwgdjE0LmhbMV0KKyAgICBzbWxhbCAgICAgICAgICAgdjI2LjRzLCBceDE2LCB2MTQuaFswXQorCisgICAgYWRkICAgICAgICAgICAgIHYyMC40cywgdjE1LjRzLCB2MjYuNHMKKyAgICBzdWIgICAgICAgICAgICAgdjE1LjRzLCB2MTUuNHMsIHYyNi40cworCisgIC5pZiBcc2hpZnQgPiAxNgorICAgIHNyc2hyICAgICAgICAgICB2MjAuNHMsIHYyMC40cywgI1xzaGlmdAorICAgIHNyc2hyICAgICAgICAgICB2MTUuNHMsIHYxNS40cywgI1xzaGlmdAorICAgIHh0biAgICAgICAgICAgICBceTI2LCB2MjAuNHMKKyAgICB4dG4gICAgICAgICAgICAgXHkyNywgdjE1LjRzCisgIC5lbHNlCisgICAgcnNocm4gICAgICAgICAgIFx5MjYsIHYyMC40cywgI1xzaGlmdAorICAgIHJzaHJuICAgICAgICAgICBceTI3LCB2MTUuNHMsICNcc2hpZnQKKyAgLmVuZGlmCisuZW5kbQorCithc21fZnVuY3Rpb24ganNpbWRfaWRjdF8yeDJfbmVvbgorCisgICAgRENUX1RBQkxFICAgICAgIC5yZXEgeDAKKyAgICBDT0VGX0JMT0NLICAgICAgLnJlcSB4MQorICAgIE9VVFBVVF9CVUYgICAgICAucmVxIHgyCisgICAgT1VUUFVUX0NPTCAgICAgIC5yZXEgeDMKKyAgICBUTVAxICAgICAgICAgICAgLnJlcSB4MAorICAgIFRNUDIgICAgICAgICAgICAucmVxIHgxNQorCisgICAgLyogT1VUUFVUX0NPTCBpcyBhIEpESU1FTlNJT04gKHVuc2lnbmVkIGludCkgYXJndW1lbnQsIHNvIHRoZSBBQkkgZG9lc24ndAorICAgICAgIGd1YXJhbnRlZSB0aGF0IHRoZSB1cHBlciAodW51c2VkKSAzMiBiaXRzIG9mIHgzIGFyZSB2YWxpZC4gIFRoaXMKKyAgICAgICBpbnN0cnVjdGlvbiBlbnN1cmVzIHRoYXQgdGhvc2UgYml0cyBhcmUgc2V0IHRvIHplcm8uICovCisgICAgdXh0dyB4MywgdzMKKworICAgIC8qIHZwdXNoICAgICAgICAgICB7djguNGggLSB2MTUuNGh9ICAgICAgICAgICAgOyBub3QgYXZhaWxhYmxlICovCisgICAgc3ViICAgICAgICAgICAgIHNwLCBzcCwgNjQKKyAgICBtb3YgICAgICAgICAgICAgeDksIHNwCisKKyAgICAvKiBMb2FkIGNvbnN0YW50cyAqLworICAgIGFkciAgICAgICAgICAgICBUTVAyLCBManNpbWRfaWRjdF8yeDJfbmVvbl9jb25zdHMKKyAgICBzdDEgICAgICAgICAgICAge3Y4LjhiLCB2OS44YiwgdjEwLjhiLCB2MTEuOGJ9LCBbeDldLCAzMgorICAgIHN0MSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3g5XSwgMzIKKyAgICBsZDEgICAgICAgICAgICAge3YxNC40aH0sIFtUTVAyXQorCisgICAgLyogTG9hZCBhbGwgQ09FRl9CTE9DSyBpbnRvIE5FT04gcmVnaXN0ZXJzIHdpdGggdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uOgorICAgICAqICAgICAgIDAgMSAyIDMgfCA0IDUgNiA3CisgICAgICogICAgICAtLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgKiAgIDAgfCB2NC40aCAgIHwgdjUuNGgKKyAgICAgKiAgIDEgfCB2Ni40aCAgIHwgdjcuNGgKKyAgICAgKiAgIDIgfCAtICAgICAgIHwgLQorICAgICAqICAgMyB8IHYxMC40aCAgfCB2MTEuNGgKKyAgICAgKiAgIDQgfCAtICAgICAgIHwgLQorICAgICAqICAgNSB8IHYxMi40aCAgfCB2MTMuNGgKKyAgICAgKiAgIDYgfCAtICAgICAgIHwgLQorICAgICAqICAgNyB8IHYxNi40aCAgfCB2MTcuNGgKKyAgICAgKi8KKyAgICBsZDEgICAgICAgICAgICAge3Y0LjRoLCB2NS40aCwgdjYuNGgsIHY3LjRofSwgW0NPRUZfQkxPQ0tdLCAzMgorICAgIGFkZCAgICAgICAgICAgICBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICBsZDEgICAgICAgICAgICAge3YxMC40aCwgdjExLjRofSwgW0NPRUZfQkxPQ0tdLCAxNgorICAgIGFkZCAgICAgICAgICAgICBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICBsZDEgICAgICAgICAgICAge3YxMi40aCwgdjEzLjRofSwgW0NPRUZfQkxPQ0tdLCAxNgorICAgIGFkZCAgICAgICAgICAgICBDT0VGX0JMT0NLLCBDT0VGX0JMT0NLLCAjMTYKKyAgICBsZDEgICAgICAgICAgICAge3YxNi40aCwgdjE3LjRofSwgW0NPRUZfQkxPQ0tdLCAxNgorICAgIC8qIERlcXVhbnRpemUgKi8KKyAgICBsZDEgICAgICAgICAgICAge3YxOC40aCwgdjE5LjRoLCB2MjAuNGgsIHYyMS40aH0sIFtEQ1RfVEFCTEVdLCAzMgorICAgIG11bCAgICAgICAgICAgICB2NC40aCwgdjQuNGgsIHYxOC40aAorICAgIG11bCAgICAgICAgICAgICB2NS40aCwgdjUuNGgsIHYxOS40aAorICAgIGlucyAgICAgICAgICAgICB2NC5kWzFdLCB2NS5kWzBdCisgICAgbXVsICAgICAgICAgICAgIHY2LjRoLCB2Ni40aCwgdjIwLjRoCisgICAgbXVsICAgICAgICAgICAgIHY3LjRoLCB2Ny40aCwgdjIxLjRoCisgICAgaW5zICAgICAgICAgICAgIHY2LmRbMV0sIHY3LmRbMF0KKyAgICBhZGQgICAgICAgICAgICAgRENUX1RBQkxFLCBEQ1RfVEFCTEUsICMxNgorICAgIGxkMSAgICAgICAgICAgICB7djI0LjRoLCB2MjUuNGh9LCBbRENUX1RBQkxFXSwgMTYKKyAgICBtdWwgICAgICAgICAgICAgdjEwLjRoLCB2MTAuNGgsIHYyNC40aAorICAgIG11bCAgICAgICAgICAgICB2MTEuNGgsIHYxMS40aCwgdjI1LjRoCisgICAgaW5zICAgICAgICAgICAgIHYxMC5kWzFdLCB2MTEuZFswXQorICAgIGFkZCAgICAgICAgICAgICBEQ1RfVEFCTEUsIERDVF9UQUJMRSwgIzE2CisgICAgbGQxICAgICAgICAgICAgIHt2MjYuNGgsIHYyNy40aH0sIFtEQ1RfVEFCTEVdLCAxNgorICAgIG11bCAgICAgICAgICAgICB2MTIuNGgsIHYxMi40aCwgdjI2LjRoCisgICAgbXVsICAgICAgICAgICAgIHYxMy40aCwgdjEzLjRoLCB2MjcuNGgKKyAgICBpbnMgICAgICAgICAgICAgdjEyLmRbMV0sIHYxMy5kWzBdCisgICAgYWRkICAgICAgICAgICAgIERDVF9UQUJMRSwgRENUX1RBQkxFLCAjMTYKKyAgICBsZDEgICAgICAgICAgICAge3YzMC40aCwgdjMxLjRofSwgW0RDVF9UQUJMRV0sIDE2CisgICAgbXVsICAgICAgICAgICAgIHYxNi40aCwgdjE2LjRoLCB2MzAuNGgKKyAgICBtdWwgICAgICAgICAgICAgdjE3LjRoLCB2MTcuNGgsIHYzMS40aAorICAgIGlucyAgICAgICAgICAgICB2MTYuZFsxXSwgdjE3LmRbMF0KKworICAgIC8qIFBhc3MgMSAqLworI2lmIDAKKyAgICBpZGN0X2hlbHBlciAgICAgdjQuNGgsIHY2LjRoLCB2MTAuNGgsIHYxMi40aCwgdjE2LjRoLCAxMywgdjQuNGgsIHY2LjRoCisgICAgdHJhbnNwb3NlXzR4NCAgIHY0LjRoLCB2Ni40aCwgdjguNGgsIHYxMC40aAorICAgIGlkY3RfaGVscGVyICAgICB2NS40aCwgdjcuNGgsIHYxMS40aCwgdjEzLjRoLCB2MTcuNGgsIDEzLCB2NS40aCwgdjcuNGgKKyAgICB0cmFuc3Bvc2VfNHg0ICAgdjUuNGgsIHY3LjRoLCB2OS40aCwgdjExLjRoCisjZWxzZQorICAgIHNtdWxsICAgICAgICAgICB2MjYuNHMsIHY2LjRoLCB2MTQuaFszXQorICAgIHNtbGFsICAgICAgICAgICB2MjYuNHMsIHYxMC40aCwgdjE0LmhbMl0KKyAgICBzbWxhbCAgICAgICAgICAgdjI2LjRzLCB2MTIuNGgsIHYxNC5oWzFdCisgICAgc21sYWwgICAgICAgICAgIHYyNi40cywgdjE2LjRoLCB2MTQuaFswXQorICAgIHNtdWxsICAgICAgICAgICB2MjQuNHMsIHY3LjRoLCB2MTQuaFszXQorICAgIHNtbGFsICAgICAgICAgICB2MjQuNHMsIHYxMS40aCwgdjE0LmhbMl0KKyAgICBzbWxhbCAgICAgICAgICAgdjI0LjRzLCB2MTMuNGgsIHYxNC5oWzFdCisgICAgc21sYWwgICAgICAgICAgIHYyNC40cywgdjE3LjRoLCB2MTQuaFswXQorICAgIHNzaGxsICAgICAgICAgICB2MTUuNHMsIHY0LjRoLCAjMTUKKyAgICBzc2hsbCAgICAgICAgICAgdjMwLjRzLCB2NS40aCwgIzE1CisgICAgYWRkICAgICAgICAgICAgIHYyMC40cywgdjE1LjRzLCB2MjYuNHMKKyAgICBzdWIgICAgICAgICAgICAgdjE1LjRzLCB2MTUuNHMsIHYyNi40cworICAgIHJzaHJuICAgICAgICAgICB2NC40aCwgdjIwLjRzLCAjMTMKKyAgICByc2hybiAgICAgICAgICAgdjYuNGgsIHYxNS40cywgIzEzCisgICAgYWRkICAgICAgICAgICAgIHYyMC40cywgdjMwLjRzLCB2MjQuNHMKKyAgICBzdWIgICAgICAgICAgICAgdjE1LjRzLCB2MzAuNHMsIHYyNC40cworICAgIHJzaHJuICAgICAgICAgICB2NS40aCwgdjIwLjRzLCAjMTMKKyAgICByc2hybiAgICAgICAgICAgdjcuNGgsIHYxNS40cywgIzEzCisgICAgaW5zICAgICAgICAgICAgIHY0LmRbMV0sIHY1LmRbMF0KKyAgICBpbnMgICAgICAgICAgICAgdjYuZFsxXSwgdjcuZFswXQorICAgIHRyYW5zcG9zZSAgICAgICB2NCwgdjYsIHYzLCAuMTZiLCAuOGgKKyAgICB0cmFuc3Bvc2UgICAgICAgdjYsIHYxMCwgdjMsIC4xNmIsIC40cworICAgIGlucyAgICAgICAgICAgICB2MTEuZFswXSwgdjEwLmRbMV0KKyAgICBpbnMgICAgICAgICAgICAgdjcuZFswXSwgdjYuZFsxXQorI2VuZGlmCisKKyAgICAvKiBQYXNzIDIgKi8KKyAgICBpZGN0X2hlbHBlciAgICAgdjQuNGgsIHY2LjRoLCB2MTAuNGgsIHY3LjRoLCB2MTEuNGgsIDIwLCB2MjYuNGgsIHYyNy40aAorCisgICAgLyogUmFuZ2UgbGltaXQgKi8KKyAgICBtb3ZpICAgICAgICAgICAgdjMwLjhoLCAjMHg4MAorICAgIGlucyAgICAgICAgICAgICB2MjYuZFsxXSwgdjI3LmRbMF0KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjhoLCB2MjYuOGgsIHYzMC44aAorICAgIHNxeHR1biAgICAgICAgICB2MzAuOGIsIHYyNi44aAorICAgIGlucyAgICAgICAgICAgICB2MjYuZFswXSwgdjMwLmRbMF0KKyAgICBzcXh0dW4gICAgICAgICAgdjI3LjhiLCB2MjYuOGgKKworICAgIC8qIFN0b3JlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICBsZHAgICAgICAgICAgICAgVE1QMSwgVE1QMiwgW09VVFBVVF9CVUZdCisgICAgYWRkICAgICAgICAgICAgIFRNUDEsIFRNUDEsIE9VVFBVVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgT1VUUFVUX0NPTAorCisgICAgc3QxICAgICAgICAgICAgIHt2MjYuYn1bMF0sIFtUTVAxXSwgMQorICAgIHN0MSAgICAgICAgICAgICB7djI3LmJ9WzRdLCBbVE1QMV0sIDEKKyAgICBzdDEgICAgICAgICAgICAge3YyNi5ifVsxXSwgW1RNUDJdLCAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjcuYn1bNV0sIFtUTVAyXSwgMQorCisgICAgbGQxICAgICAgICAgICAgIHt2OC44YiwgdjkuOGIsIHYxMC44YiwgdjExLjhifSwgW3NwXSwgMzIKKyAgICBsZDEgICAgICAgICAgICAge3YxMi44YiwgdjEzLjhiLCB2MTQuOGIsIHYxNS44Yn0sIFtzcF0sIDMyCisgICAgYmxyICAgICAgICAgICAgIHgzMAorCisgICAgLnVucmVxICAgICAgICAgIERDVF9UQUJMRQorICAgIC51bnJlcSAgICAgICAgICBDT0VGX0JMT0NLCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9CVUYKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0NPTAorICAgIC51bnJlcSAgICAgICAgICBUTVAxCisgICAgLnVucmVxICAgICAgICAgIFRNUDIKKworLnB1cmdlbSBpZGN0X2hlbHBlcgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9uZW9uCisgKiBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfbmVvbgorICoganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9uZW9uCisgKiBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X25lb24KKyAqIGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfbmVvbgorICoganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9uZW9uCisgKgorICogQ29sb3JzcGFjZSBjb252ZXJzaW9uIFlDYkNyIC0+IFJHQgorICovCisKKy5tYWNybyBkb19sb2FkIHNpemUKKyAgLmlmIFxzaXplID09IDgKKyAgICBsZDEgICAgICAgICAgICAge3Y0LjhifSwgW1VdLCA4CisgICAgbGQxICAgICAgICAgICAgIHt2NS44Yn0sIFtWXSwgOAorICAgIGxkMSAgICAgICAgICAgICB7djAuOGJ9LCBbWV0sIDgKKyAgICBwcmZtICAgICAgICAgICAgcGxkbDFrZWVwLCBbVSwgIzY0XQorICAgIHByZm0gICAgICAgICAgICBwbGRsMWtlZXAsIFtWLCAjNjRdCisgICAgcHJmbSAgICAgICAgICAgIHBsZGwxa2VlcCwgW1ksICM2NF0KKyAgLmVsc2VpZiBcc2l6ZSA9PSA0CisgICAgbGQxICAgICAgICAgICAgIHt2NC5ifVswXSwgW1VdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NC5ifVsxXSwgW1VdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NC5ifVsyXSwgW1VdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NC5ifVszXSwgW1VdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NS5ifVswXSwgW1ZdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NS5ifVsxXSwgW1ZdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NS5ifVsyXSwgW1ZdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2NS5ifVszXSwgW1ZdLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2MC5ifVswXSwgW1ldLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2MC5ifVsxXSwgW1ldLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2MC5ifVsyXSwgW1ldLCAxCisgICAgbGQxICAgICAgICAgICAgIHt2MC5ifVszXSwgW1ldLCAxCisgIC5lbHNlaWYgXHNpemUgPT0gMgorICAgIGxkMSAgICAgICAgICAgICB7djQuYn1bNF0sIFtVXSwgMQorICAgIGxkMSAgICAgICAgICAgICB7djQuYn1bNV0sIFtVXSwgMQorICAgIGxkMSAgICAgICAgICAgICB7djUuYn1bNF0sIFtWXSwgMQorICAgIGxkMSAgICAgICAgICAgICB7djUuYn1bNV0sIFtWXSwgMQorICAgIGxkMSAgICAgICAgICAgICB7djAuYn1bNF0sIFtZXSwgMQorICAgIGxkMSAgICAgICAgICAgICB7djAuYn1bNV0sIFtZXSwgMQorICAuZWxzZWlmIFxzaXplID09IDEKKyAgICBsZDEgICAgICAgICAgICAge3Y0LmJ9WzZdLCBbVV0sIDEKKyAgICBsZDEgICAgICAgICAgICAge3Y1LmJ9WzZdLCBbVl0sIDEKKyAgICBsZDEgICAgICAgICAgICAge3YwLmJ9WzZdLCBbWV0sIDEKKyAgLmVsc2UKKyAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgbWFjcm9ibG9jayBzaXplCisgIC5lbmRpZgorLmVuZG0KKworLm1hY3JvIGRvX3N0b3JlIGJwcCwgc2l6ZSwgZmFzdF9zdDMKKyAgLmlmIFxicHAgPT0gMjQKKyAgICAuaWYgXHNpemUgPT0gOAorICAgICAgLmlmIFxmYXN0X3N0MyA9PSAxCisgICAgICAgIHN0MyAgICAgICAgIHt2MTAuOGIsIHYxMS44YiwgdjEyLjhifSwgW1JHQl0sIDI0CisgICAgICAuZWxzZQorICAgICAgICBzdDEgICAgICAgICB7djEwLmJ9WzBdLCBbUkdCXSwgIzEKKyAgICAgICAgc3QxICAgICAgICAge3YxMS5ifVswXSwgW1JHQl0sICMxCisgICAgICAgIHN0MSAgICAgICAgIHt2MTIuYn1bMF0sIFtSR0JdLCAjMQorCisgICAgICAgIHN0MSAgICAgICAgIHt2MTAuYn1bMV0sIFtSR0JdLCAjMQorICAgICAgICBzdDEgICAgICAgICB7djExLmJ9WzFdLCBbUkdCXSwgIzEKKyAgICAgICAgc3QxICAgICAgICAge3YxMi5ifVsxXSwgW1JHQl0sICMxCisKKyAgICAgICAgc3QxICAgICAgICAge3YxMC5ifVsyXSwgW1JHQl0sICMxCisgICAgICAgIHN0MSAgICAgICAgIHt2MTEuYn1bMl0sIFtSR0JdLCAjMQorICAgICAgICBzdDEgICAgICAgICB7djEyLmJ9WzJdLCBbUkdCXSwgIzEKKworICAgICAgICBzdDEgICAgICAgICB7djEwLmJ9WzNdLCBbUkdCXSwgIzEKKyAgICAgICAgc3QxICAgICAgICAge3YxMS5ifVszXSwgW1JHQl0sICMxCisgICAgICAgIHN0MSAgICAgICAgIHt2MTIuYn1bM10sIFtSR0JdLCAjMQorCisgICAgICAgIHN0MSAgICAgICAgIHt2MTAuYn1bNF0sIFtSR0JdLCAjMQorICAgICAgICBzdDEgICAgICAgICB7djExLmJ9WzRdLCBbUkdCXSwgIzEKKyAgICAgICAgc3QxICAgICAgICAge3YxMi5ifVs0XSwgW1JHQl0sICMxCisKKyAgICAgICAgc3QxICAgICAgICAge3YxMC5ifVs1XSwgW1JHQl0sICMxCisgICAgICAgIHN0MSAgICAgICAgIHt2MTEuYn1bNV0sIFtSR0JdLCAjMQorICAgICAgICBzdDEgICAgICAgICB7djEyLmJ9WzVdLCBbUkdCXSwgIzEKKworICAgICAgICBzdDEgICAgICAgICB7djEwLmJ9WzZdLCBbUkdCXSwgIzEKKyAgICAgICAgc3QxICAgICAgICAge3YxMS5ifVs2XSwgW1JHQl0sICMxCisgICAgICAgIHN0MSAgICAgICAgIHt2MTIuYn1bNl0sIFtSR0JdLCAjMQorCisgICAgICAgIHN0MSAgICAgICAgIHt2MTAuYn1bN10sIFtSR0JdLCAjMQorICAgICAgICBzdDEgICAgICAgICB7djExLmJ9WzddLCBbUkdCXSwgIzEKKyAgICAgICAgc3QxICAgICAgICAge3YxMi5ifVs3XSwgW1JHQl0sICMxCisgICAgICAuZW5kaWYKKyAgICAuZWxzZWlmIFxzaXplID09IDQKKyAgICAgIHN0MyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzBdLCBbUkdCXSwgMworICAgICAgc3QzICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYn1bMV0sIFtSR0JdLCAzCisgICAgICBzdDMgICAgICAgICAgIHt2MTAuYiwgdjExLmIsIHYxMi5ifVsyXSwgW1JHQl0sIDMKKyAgICAgIHN0MyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzNdLCBbUkdCXSwgMworICAgIC5lbHNlaWYgXHNpemUgPT0gMgorICAgICAgc3QzICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYn1bNF0sIFtSR0JdLCAzCisgICAgICBzdDMgICAgICAgICAgIHt2MTAuYiwgdjExLmIsIHYxMi5ifVs1XSwgW1JHQl0sIDMKKyAgICAuZWxzZWlmIFxzaXplID09IDEKKyAgICAgIHN0MyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzZdLCBbUkdCXSwgMworICAgIC5lbHNlCisgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2VpZiBcYnBwID09IDMyCisgICAgLmlmIFxzaXplID09IDgKKyAgICAgIHN0NCAgICAgICAgICAge3YxMC44YiwgdjExLjhiLCB2MTIuOGIsIHYxMy44Yn0sIFtSR0JdLCAzMgorICAgIC5lbHNlaWYgXHNpemUgPT0gNAorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzBdLCBbUkdCXSwgNAorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzFdLCBbUkdCXSwgNAorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzJdLCBbUkdCXSwgNAorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzNdLCBbUkdCXSwgNAorICAgIC5lbHNlaWYgXHNpemUgPT0gMgorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzRdLCBbUkdCXSwgNAorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzVdLCBbUkdCXSwgNAorICAgIC5lbHNlaWYgXHNpemUgPT0gMQorICAgICAgc3Q0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzZdLCBbUkdCXSwgNAorICAgIC5lbHNlCisgICAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgbWFjcm9ibG9jayBzaXplCisgICAgLmVuZGlmCisgIC5lbHNlaWYgXGJwcCA9PSAxNgorICAgIC5pZiBcc2l6ZSA9PSA4CisgICAgICBzdDEgICAgICAgICAgIHt2MjUuOGh9LCBbUkdCXSwgMTYKKyAgICAuZWxzZWlmIFxzaXplID09IDQKKyAgICAgIHN0MSAgICAgICAgICAge3YyNS40aH0sIFtSR0JdLCA4CisgICAgLmVsc2VpZiBcc2l6ZSA9PSAyCisgICAgICBzdDEgICAgICAgICAgIHt2MjUuaH1bNF0sIFtSR0JdLCAyCisgICAgICBzdDEgICAgICAgICAgIHt2MjUuaH1bNV0sIFtSR0JdLCAyCisgICAgLmVsc2VpZiBcc2l6ZSA9PSAxCisgICAgICBzdDEgICAgICAgICAgIHt2MjUuaH1bNl0sIFtSR0JdLCAyCisgICAgLmVsc2UKKyAgICAgIC5lcnJvciB1bnN1cHBvcnRlZCBtYWNyb2Jsb2NrIHNpemUKKyAgICAuZW5kaWYKKyAgLmVsc2UKKyAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgYnBwCisgIC5lbmRpZgorLmVuZG0KKworLm1hY3JvIGdlbmVyYXRlX2pzaW1kX3ljY19yZ2JfY29udmVydF9uZW9uIGNvbG9yaWQsIGJwcCwgcl9vZmZzLCByc2l6ZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2ZmcywgZ3NpemUsIGJfb2ZmcywgYnNpemUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzaXplLCBmYXN0X3N0MworCisvKgorICogMi1zdGFnZSBwaXBlbGluZWQgWUNiQ3ItPlJHQiBjb252ZXJzaW9uCisgKi8KKworLm1hY3JvIGRvX3l1dl90b19yZ2Jfc3RhZ2UxCisgICAgdWFkZHcgICAgICAgICAgIHY2LjhoLCB2Mi44aCwgdjQuOGIgICAgIC8qIHEzID0gdSAtIDEyOCAqLworICAgIHVhZGR3ICAgICAgICAgICB2OC44aCwgdjIuOGgsIHY1LjhiICAgICAvKiBxMiA9IHYgLSAxMjggKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjIwLjRzLCB2Ni40aCwgdjEuaFsxXSAgLyogbXVsdGlwbHkgYnkgLTExMjc3ICovCisgICAgc21sYWwgICAgICAgICAgIHYyMC40cywgdjguNGgsIHYxLmhbMl0gIC8qIG11bHRpcGx5IGJ5IC0yMzQwMSAqLworICAgIHNtdWxsMiAgICAgICAgICB2MjIuNHMsIHY2LjhoLCB2MS5oWzFdICAvKiBtdWx0aXBseSBieSAtMTEyNzcgKi8KKyAgICBzbWxhbDIgICAgICAgICAgdjIyLjRzLCB2OC44aCwgdjEuaFsyXSAgLyogbXVsdGlwbHkgYnkgLTIzNDAxICovCisgICAgc211bGwgICAgICAgICAgIHYyNC40cywgdjguNGgsIHYxLmhbMF0gIC8qIG11bHRpcGx5IGJ5IDIyOTcxICovCisgICAgc211bGwyICAgICAgICAgIHYyNi40cywgdjguOGgsIHYxLmhbMF0gIC8qIG11bHRpcGx5IGJ5IDIyOTcxICovCisgICAgc211bGwgICAgICAgICAgIHYyOC40cywgdjYuNGgsIHYxLmhbM10gIC8qIG11bHRpcGx5IGJ5IDI5MDMzICovCisgICAgc211bGwyICAgICAgICAgIHYzMC40cywgdjYuOGgsIHYxLmhbM10gIC8qIG11bHRpcGx5IGJ5IDI5MDMzICovCisuZW5kbQorCisubWFjcm8gZG9feXV2X3RvX3JnYl9zdGFnZTIKKyAgICByc2hybiAgICAgICAgICAgdjIwLjRoLCB2MjAuNHMsICMxNQorICAgIHJzaHJuMiAgICAgICAgICB2MjAuOGgsIHYyMi40cywgIzE1CisgICAgcnNocm4gICAgICAgICAgIHYyNC40aCwgdjI0LjRzLCAjMTQKKyAgICByc2hybjIgICAgICAgICAgdjI0LjhoLCB2MjYuNHMsICMxNAorICAgIHJzaHJuICAgICAgICAgICB2MjguNGgsIHYyOC40cywgIzE0CisgICAgcnNocm4yICAgICAgICAgIHYyOC44aCwgdjMwLjRzLCAjMTQKKyAgICB1YWRkdyAgICAgICAgICAgdjIwLjhoLCB2MjAuOGgsIHYwLjhiCisgICAgdWFkZHcgICAgICAgICAgIHYyNC44aCwgdjI0LjhoLCB2MC44YgorICAgIHVhZGR3ICAgICAgICAgICB2MjguOGgsIHYyOC44aCwgdjAuOGIKKyAgLmlmIFxicHAgIT0gMTYKKyAgICBzcXh0dW4gICAgICAgICAgdjFcZ19vZmZzXGRlZnNpemUsIHYyMC44aAorICAgIHNxeHR1biAgICAgICAgICB2MVxyX29mZnNcZGVmc2l6ZSwgdjI0LjhoCisgICAgc3F4dHVuICAgICAgICAgIHYxXGJfb2Zmc1xkZWZzaXplLCB2MjguOGgKKyAgLmVsc2UKKyAgICBzcXNobHUgICAgICAgICAgdjIxLjhoLCB2MjAuOGgsICM4CisgICAgc3FzaGx1ICAgICAgICAgIHYyNS44aCwgdjI0LjhoLCAjOAorICAgIHNxc2hsdSAgICAgICAgICB2MjkuOGgsIHYyOC44aCwgIzgKKyAgICBzcmkgICAgICAgICAgICAgdjI1LjhoLCB2MjEuOGgsICM1CisgICAgc3JpICAgICAgICAgICAgIHYyNS44aCwgdjI5LjhoLCAjMTEKKyAgLmVuZGlmCisuZW5kbQorCisubWFjcm8gZG9feXV2X3RvX3JnYl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEgZmFzdF9zdDMKKyAgICByc2hybiAgICAgICAgICAgdjIwLjRoLCB2MjAuNHMsICMxNQorICAgIHJzaHJuICAgICAgICAgICB2MjQuNGgsIHYyNC40cywgIzE0CisgICAgcnNocm4gICAgICAgICAgIHYyOC40aCwgdjI4LjRzLCAjMTQKKyAgICBsZDEgICAgICAgICAgICAge3Y0LjhifSwgW1VdLCA4CisgICAgcnNocm4yICAgICAgICAgIHYyMC44aCwgdjIyLjRzLCAjMTUKKyAgICByc2hybjIgICAgICAgICAgdjI0LjhoLCB2MjYuNHMsICMxNAorICAgIHJzaHJuMiAgICAgICAgICB2MjguOGgsIHYzMC40cywgIzE0CisgICAgbGQxICAgICAgICAgICAgIHt2NS44Yn0sIFtWXSwgOAorICAgIHVhZGR3ICAgICAgICAgICB2MjAuOGgsIHYyMC44aCwgdjAuOGIKKyAgICB1YWRkdyAgICAgICAgICAgdjI0LjhoLCB2MjQuOGgsIHYwLjhiCisgICAgdWFkZHcgICAgICAgICAgIHYyOC44aCwgdjI4LjhoLCB2MC44YgorICAuaWYgXGJwcCAhPSAxNiAgLyoqKioqKioqKioqKioqKiogcmdiMjQvcmdiMzIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHNxeHR1biAgICAgICAgICB2MVxnX29mZnNcZGVmc2l6ZSwgdjIwLjhoCisgICAgbGQxICAgICAgICAgICAgIHt2MC44Yn0sIFtZXSwgOAorICAgIHNxeHR1biAgICAgICAgICB2MVxyX29mZnNcZGVmc2l6ZSwgdjI0LjhoCisgICAgcHJmbSAgICAgICAgICAgIHBsZGwxa2VlcCwgW1UsICM2NF0KKyAgICBwcmZtICAgICAgICAgICAgcGxkbDFrZWVwLCBbViwgIzY0XQorICAgIHByZm0gICAgICAgICAgICBwbGRsMWtlZXAsIFtZLCAjNjRdCisgICAgc3F4dHVuICAgICAgICAgIHYxXGJfb2Zmc1xkZWZzaXplLCB2MjguOGgKKyAgICB1YWRkdyAgICAgICAgICAgdjYuOGgsIHYyLjhoLCB2NC44YiAgICAgLyogdjYuMTZiID0gdSAtIDEyOCAqLworICAgIHVhZGR3ICAgICAgICAgICB2OC44aCwgdjIuOGgsIHY1LjhiICAgICAvKiBxMiA9IHYgLSAxMjggKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjIwLjRzLCB2Ni40aCwgdjEuaFsxXSAgLyogbXVsdGlwbHkgYnkgLTExMjc3ICovCisgICAgc21sYWwgICAgICAgICAgIHYyMC40cywgdjguNGgsIHYxLmhbMl0gIC8qIG11bHRpcGx5IGJ5IC0yMzQwMSAqLworICAgIHNtdWxsMiAgICAgICAgICB2MjIuNHMsIHY2LjhoLCB2MS5oWzFdICAvKiBtdWx0aXBseSBieSAtMTEyNzcgKi8KKyAgICBzbWxhbDIgICAgICAgICAgdjIyLjRzLCB2OC44aCwgdjEuaFsyXSAgLyogbXVsdGlwbHkgYnkgLTIzNDAxICovCisgICAgc211bGwgICAgICAgICAgIHYyNC40cywgdjguNGgsIHYxLmhbMF0gIC8qIG11bHRpcGx5IGJ5IDIyOTcxICovCisgICAgc211bGwyICAgICAgICAgIHYyNi40cywgdjguOGgsIHYxLmhbMF0gIC8qIG11bHRpcGx5IGJ5IDIyOTcxICovCisgIC5lbHNlICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiByZ2I1NjUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgc3FzaGx1ICAgICAgICAgIHYyMS44aCwgdjIwLjhoLCAjOAorICAgIHNxc2hsdSAgICAgICAgICB2MjUuOGgsIHYyNC44aCwgIzgKKyAgICBzcXNobHUgICAgICAgICAgdjI5LjhoLCB2MjguOGgsICM4CisgICAgdWFkZHcgICAgICAgICAgIHY2LjhoLCB2Mi44aCwgdjQuOGIgICAgIC8qIHY2LjE2YiA9IHUgLSAxMjggKi8KKyAgICB1YWRkdyAgICAgICAgICAgdjguOGgsIHYyLjhoLCB2NS44YiAgICAgLyogcTIgPSB2IC0gMTI4ICovCisgICAgbGQxICAgICAgICAgICAgIHt2MC44Yn0sIFtZXSwgOAorICAgIHNtdWxsICAgICAgICAgICB2MjAuNHMsIHY2LjRoLCB2MS5oWzFdICAvKiBtdWx0aXBseSBieSAtMTEyNzcgKi8KKyAgICBzbWxhbCAgICAgICAgICAgdjIwLjRzLCB2OC40aCwgdjEuaFsyXSAgLyogbXVsdGlwbHkgYnkgLTIzNDAxICovCisgICAgc211bGwyICAgICAgICAgIHYyMi40cywgdjYuOGgsIHYxLmhbMV0gIC8qIG11bHRpcGx5IGJ5IC0xMTI3NyAqLworICAgIHNtbGFsMiAgICAgICAgICB2MjIuNHMsIHY4LjhoLCB2MS5oWzJdICAvKiBtdWx0aXBseSBieSAtMjM0MDEgKi8KKyAgICBzcmkgICAgICAgICAgICAgdjI1LjhoLCB2MjEuOGgsICM1CisgICAgc211bGwgICAgICAgICAgIHYyNC40cywgdjguNGgsIHYxLmhbMF0gIC8qIG11bHRpcGx5IGJ5IDIyOTcxICovCisgICAgc211bGwyICAgICAgICAgIHYyNi40cywgdjguOGgsIHYxLmhbMF0gIC8qIG11bHRpcGx5IGJ5IDIyOTcxICovCisgICAgcHJmbSAgICAgICAgICAgIHBsZGwxa2VlcCwgW1UsICM2NF0KKyAgICBwcmZtICAgICAgICAgICAgcGxkbDFrZWVwLCBbViwgIzY0XQorICAgIHByZm0gICAgICAgICAgICBwbGRsMWtlZXAsIFtZLCAjNjRdCisgICAgc3JpICAgICAgICAgICAgIHYyNS44aCwgdjI5LjhoLCAjMTEKKyAgLmVuZGlmCisgICAgZG9fc3RvcmUgICAgICAgIFxicHAsIDgsIFxmYXN0X3N0MworICAgIHNtdWxsICAgICAgICAgICB2MjguNHMsIHY2LjRoLCB2MS5oWzNdICAvKiBtdWx0aXBseSBieSAyOTAzMyAqLworICAgIHNtdWxsMiAgICAgICAgICB2MzAuNHMsIHY2LjhoLCB2MS5oWzNdICAvKiBtdWx0aXBseSBieSAyOTAzMyAqLworLmVuZG0KKworLm1hY3JvIGRvX3l1dl90b19yZ2IKKyAgICBkb195dXZfdG9fcmdiX3N0YWdlMQorICAgIGRvX3l1dl90b19yZ2Jfc3RhZ2UyCisuZW5kbQorCisvKiBBcHBsZSBnYXMgY3Jhc2hlcyBvbiBhZHJsLCB3b3JrIGFyb3VuZCB0aGF0IGJ5IHVzaW5nIGFkci4KKyAqIEJ1dCB0aGlzIHJlcXVpcmVzIGEgY29weSBvZiB0aGVzZSBjb25zdGFudHMgZm9yIGVhY2ggZnVuY3Rpb24uCisgKi8KKworLmJhbGlnbiAxNgorLmlmIFxmYXN0X3N0MyA9PSAxCitManNpbWRfeWNjX1xjb2xvcmlkXCgpX25lb25fY29uc3RzOgorLmVsc2UKK0xqc2ltZF95Y2NfXGNvbG9yaWRcKClfbmVvbl9zbG93c3QzX2NvbnN0czoKKy5lbmRpZgorICAuc2hvcnQgMCwgICAgICAwLCAgICAgMCwgICAgICAwCisgIC5zaG9ydCAyMjk3MSwgLTExMjc3LCAtMjM0MDEsIDI5MDMzCisgIC5zaG9ydCAtMTI4LCAgLTEyOCwgICAtMTI4LCAgIC0xMjgKKyAgLnNob3J0IC0xMjgsICAtMTI4LCAgIC0xMjgsICAgLTEyOAorCisuaWYgXGZhc3Rfc3QzID09IDEKK2FzbV9mdW5jdGlvbiBqc2ltZF95Y2NfXGNvbG9yaWRcKClfY29udmVydF9uZW9uCisuZWxzZQorYXNtX2Z1bmN0aW9uIGpzaW1kX3ljY19cY29sb3JpZFwoKV9jb252ZXJ0X25lb25fc2xvd3N0MworLmVuZGlmCisgICAgT1VUUFVUX1dJRFRIICAgIC5yZXEgdzAKKyAgICBJTlBVVF9CVUYgICAgICAgLnJlcSB4MQorICAgIElOUFVUX1JPVyAgICAgICAucmVxIHcyCisgICAgT1VUUFVUX0JVRiAgICAgIC5yZXEgeDMKKyAgICBOVU1fUk9XUyAgICAgICAgLnJlcSB3NAorCisgICAgSU5QVVRfQlVGMCAgICAgIC5yZXEgeDUKKyAgICBJTlBVVF9CVUYxICAgICAgLnJlcSB4NgorICAgIElOUFVUX0JVRjIgICAgICAucmVxIHgxCisKKyAgICBSR0IgICAgICAgICAgICAgLnJlcSB4NworICAgIFkgICAgICAgICAgICAgICAucmVxIHg5CisgICAgVSAgICAgICAgICAgICAgIC5yZXEgeDEwCisgICAgViAgICAgICAgICAgICAgIC5yZXEgeDExCisgICAgTiAgICAgICAgICAgICAgIC5yZXEgdzE1CisKKyAgICBzdWIgICAgICAgICAgICAgc3AsIHNwLCA2NAorICAgIG1vdiAgICAgICAgICAgICB4OSwgc3AKKworICAgIC8qIExvYWQgY29uc3RhbnRzIHRvIGQxLCBkMiwgZDMgKHYwLjRoIGlzIGp1c3QgdXNlZCBmb3IgcGFkZGluZykgKi8KKyAgICAuaWYgXGZhc3Rfc3QzID09IDEKKyAgICAgIGFkciAgICAgICAgICAgeDE1LCBManNpbWRfeWNjX1xjb2xvcmlkXCgpX25lb25fY29uc3RzCisgICAgLmVsc2UKKyAgICAgIGFkciAgICAgICAgICAgeDE1LCBManNpbWRfeWNjX1xjb2xvcmlkXCgpX25lb25fc2xvd3N0M19jb25zdHMKKyAgICAuZW5kaWYKKworICAgIC8qIFNhdmUgTkVPTiByZWdpc3RlcnMgKi8KKyAgICBzdDEgICAgICAgICAgICAge3Y4LjhiLCB2OS44YiwgdjEwLjhiLCB2MTEuOGJ9LCBbeDldLCAzMgorICAgIHN0MSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3g5XSwgMzIKKyAgICBsZDEgICAgICAgICAgICAge3YwLjRoLCB2MS40aH0sIFt4MTVdLCAxNgorICAgIGxkMSAgICAgICAgICAgICB7djIuOGh9LCBbeDE1XQorCisgICAgbGRyICAgICAgICAgICAgIElOUFVUX0JVRjAsIFtJTlBVVF9CVUZdCisgICAgbGRyICAgICAgICAgICAgIElOUFVUX0JVRjEsIFtJTlBVVF9CVUYsICM4XQorICAgIGxkciAgICAgICAgICAgICBJTlBVVF9CVUYyLCBbSU5QVVRfQlVGLCAjMTZdCisgICAgLnVucmVxICAgICAgICAgIElOUFVUX0JVRgorCisgICAgLyogSW5pdGlhbGx5IHNldCB2MTAsIHYxMS40aCwgdjEyLjhiLCBkMTMgdG8gMHhGRiAqLworICAgIG1vdmkgICAgICAgICAgICB2MTAuMTZiLCAjMjU1CisgICAgbW92aSAgICAgICAgICAgIHYxMy4xNmIsICMyNTUKKworICAgIC8qIE91dGVyIGxvb3Agb3ZlciBzY2FubGluZXMgKi8KKyAgICBjbXAgICAgICAgICAgICAgTlVNX1JPV1MsICMxCisgICAgYi5sdCAgICAgICAgICAgIDlmCiswOgorICAgIGxkciAgICAgICAgICAgICBZLCBbSU5QVVRfQlVGMCwgSU5QVVRfUk9XLCB1eHR3ICMzXQorICAgIGxkciAgICAgICAgICAgICBVLCBbSU5QVVRfQlVGMSwgSU5QVVRfUk9XLCB1eHR3ICMzXQorICAgIG1vdiAgICAgICAgICAgICBOLCBPVVRQVVRfV0lEVEgKKyAgICBsZHIgICAgICAgICAgICAgViwgW0lOUFVUX0JVRjIsIElOUFVUX1JPVywgdXh0dyAjM10KKyAgICBhZGQgICAgICAgICAgICAgSU5QVVRfUk9XLCBJTlBVVF9ST1csICMxCisgICAgbGRyICAgICAgICAgICAgIFJHQiwgW09VVFBVVF9CVUZdLCAjOAorCisgICAgLyogSW5uZXIgbG9vcCBvdmVyIHBpeGVscyAqLworICAgIHN1YnMgICAgICAgICAgICBOLCBOLCAjOAorICAgIGIubHQgICAgICAgICAgICAzZgorICAgIGRvX2xvYWQgICAgICAgICA4CisgICAgZG9feXV2X3RvX3JnYl9zdGFnZTEKKyAgICBzdWJzICAgICAgICAgICAgTiwgTiwgIzgKKyAgICBiLmx0ICAgICAgICAgICAgMmYKKzE6CisgICAgZG9feXV2X3RvX3JnYl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEgXGZhc3Rfc3QzCisgICAgc3VicyAgICAgICAgICAgIE4sIE4sICM4CisgICAgYi5nZSAgICAgICAgICAgIDFiCisyOgorICAgIGRvX3l1dl90b19yZ2Jfc3RhZ2UyCisgICAgZG9fc3RvcmUgICAgICAgIFxicHAsIDgsIFxmYXN0X3N0MworICAgIHRzdCAgICAgICAgICAgICBOLCAjNworICAgIGIuZXEgICAgICAgICAgICA4ZgorMzoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzQKKyAgICBiLmVxICAgICAgICAgICAgM2YKKyAgICBkb19sb2FkICAgICAgICAgNAorMzoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzIKKyAgICBiLmVxICAgICAgICAgICAgNGYKKyAgICBkb19sb2FkICAgICAgICAgMgorNDoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzEKKyAgICBiLmVxICAgICAgICAgICAgNWYKKyAgICBkb19sb2FkICAgICAgICAgMQorNToKKyAgICBkb195dXZfdG9fcmdiCisgICAgdHN0ICAgICAgICAgICAgIE4sICM0CisgICAgYi5lcSAgICAgICAgICAgIDZmCisgICAgZG9fc3RvcmUgICAgICAgIFxicHAsIDQsIFxmYXN0X3N0MworNjoKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzIKKyAgICBiLmVxICAgICAgICAgICAgN2YKKyAgICBkb19zdG9yZSAgICAgICAgXGJwcCwgMiwgXGZhc3Rfc3QzCis3OgorICAgIHRzdCAgICAgICAgICAgICBOLCAjMQorICAgIGIuZXEgICAgICAgICAgICA4ZgorICAgIGRvX3N0b3JlICAgICAgICBcYnBwLCAxLCBcZmFzdF9zdDMKKzg6CisgICAgc3VicyAgICAgICAgICAgIE5VTV9ST1dTLCBOVU1fUk9XUywgIzEKKyAgICBiLmd0ICAgICAgICAgICAgMGIKKzk6CisgICAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KKyAgICBsZDEgICAgICAgICAgICAge3Y4LjhiLCB2OS44YiwgdjEwLjhiLCB2MTEuOGJ9LCBbc3BdLCAzMgorICAgIGxkMSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3NwXSwgMzIKKyAgICBiciAgICAgICAgICAgICAgeDMwCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9XSURUSAorICAgIC51bnJlcSAgICAgICAgICBJTlBVVF9ST1cKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBOVU1fUk9XUworICAgIC51bnJlcSAgICAgICAgICBJTlBVVF9CVUYwCisgICAgLnVucmVxICAgICAgICAgIElOUFVUX0JVRjEKKyAgICAudW5yZXEgICAgICAgICAgSU5QVVRfQlVGMgorICAgIC51bnJlcSAgICAgICAgICBSR0IKKyAgICAudW5yZXEgICAgICAgICAgWQorICAgIC51bnJlcSAgICAgICAgICBVCisgICAgLnVucmVxICAgICAgICAgIFYKKyAgICAudW5yZXEgICAgICAgICAgTgorCisucHVyZ2VtIGRvX3l1dl90b19yZ2IKKy5wdXJnZW0gZG9feXV2X3RvX3JnYl9zdGFnZTEKKy5wdXJnZW0gZG9feXV2X3RvX3JnYl9zdGFnZTIKKy5wdXJnZW0gZG9feXV2X3RvX3JnYl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEKKworLmVuZG0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaWQgLS0tLS0gYnBwIFIgIHJzaXplIEcgIGdzaXplIEIgIGJzaXplIGRlZnNpemUgZmFzdF9zdDMqLworZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0cmdiLCAgMjQsIDAsIC40aCwgIDEsIC40aCwgIDIsIC40aCwgIC44YiwgICAgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0YmdyLCAgMjQsIDIsIC40aCwgIDEsIC40aCwgIDAsIC40aCwgIC44YiwgICAgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0cmdieCwgMzIsIDAsIC40aCwgIDEsIC40aCwgIDIsIC40aCwgIC44YiwgICAgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0YmdyeCwgMzIsIDIsIC40aCwgIDEsIC40aCwgIDAsIC40aCwgIC44YiwgICAgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0eGJnciwgMzIsIDMsIC40aCwgIDIsIC40aCwgIDEsIC40aCwgIC44YiwgICAgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gZXh0eHJnYiwgMzIsIDEsIC40aCwgIDIsIC40aCwgIDMsIC40aCwgIC44YiwgICAgMQorZ2VuZXJhdGVfanNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24gcmdiNTY1LCAgMTYsIDAsIC40aCwgIDAsIC40aCwgIDAsIC40aCwgIC44YiwgICAgMQorCitnZW5lcmF0ZV9qc2ltZF95Y2NfcmdiX2NvbnZlcnRfbmVvbiBleHRyZ2IsICAyNCwgMCwgLjRoLCAgMSwgLjRoLCAgMiwgLjRoLCAgLjhiLCAgICAwCitnZW5lcmF0ZV9qc2ltZF95Y2NfcmdiX2NvbnZlcnRfbmVvbiBleHRiZ3IsICAyNCwgMiwgLjRoLCAgMSwgLjRoLCAgMCwgLjRoLCAgLjhiLCAgICAwCisKKy5wdXJnZW0gZG9fbG9hZAorLnB1cmdlbSBkb19zdG9yZQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9uZW9uCisgKiBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbmVvbgorICoganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9uZW9uCisgKiBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X25lb24KKyAqIGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfbmVvbgorICoganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9uZW9uCisgKgorICogQ29sb3JzcGFjZSBjb252ZXJzaW9uIFJHQiAtPiBZQ2JDcgorICovCisKKy5tYWNybyBkb19zdG9yZSBzaXplCisgIC5pZiBcc2l6ZSA9PSA4CisgICAgc3QxICAgICAgICAgICAgIHt2MjAuOGJ9LCBbWV0sICM4CisgICAgc3QxICAgICAgICAgICAgIHt2MjEuOGJ9LCBbVV0sICM4CisgICAgc3QxICAgICAgICAgICAgIHt2MjIuOGJ9LCBbVl0sICM4CisgIC5lbHNlaWYgXHNpemUgPT0gNAorICAgIHN0MSAgICAgICAgICAgICB7djIwLmJ9WzBdLCBbWV0sICMxCisgICAgc3QxICAgICAgICAgICAgIHt2MjAuYn1bMV0sIFtZXSwgIzEKKyAgICBzdDEgICAgICAgICAgICAge3YyMC5ifVsyXSwgW1ldLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djIwLmJ9WzNdLCBbWV0sICMxCisgICAgc3QxICAgICAgICAgICAgIHt2MjEuYn1bMF0sIFtVXSwgIzEKKyAgICBzdDEgICAgICAgICAgICAge3YyMS5ifVsxXSwgW1VdLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djIxLmJ9WzJdLCBbVV0sICMxCisgICAgc3QxICAgICAgICAgICAgIHt2MjEuYn1bM10sIFtVXSwgIzEKKyAgICBzdDEgICAgICAgICAgICAge3YyMi5ifVswXSwgW1ZdLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djIyLmJ9WzFdLCBbVl0sICMxCisgICAgc3QxICAgICAgICAgICAgIHt2MjIuYn1bMl0sIFtWXSwgIzEKKyAgICBzdDEgICAgICAgICAgICAge3YyMi5ifVszXSwgW1ZdLCAjMQorICAuZWxzZWlmIFxzaXplID09IDIKKyAgICBzdDEgICAgICAgICAgICAge3YyMC5ifVs0XSwgW1ldLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djIwLmJ9WzVdLCBbWV0sICMxCisgICAgc3QxICAgICAgICAgICAgIHt2MjEuYn1bNF0sIFtVXSwgIzEKKyAgICBzdDEgICAgICAgICAgICAge3YyMS5ifVs1XSwgW1VdLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djIyLmJ9WzRdLCBbVl0sICMxCisgICAgc3QxICAgICAgICAgICAgIHt2MjIuYn1bNV0sIFtWXSwgIzEKKyAgLmVsc2VpZiBcc2l6ZSA9PSAxCisgICAgc3QxICAgICAgICAgICAgIHt2MjAuYn1bNl0sIFtZXSwgIzEKKyAgICBzdDEgICAgICAgICAgICAge3YyMS5ifVs2XSwgW1VdLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djIyLmJ9WzZdLCBbVl0sICMxCisgIC5lbHNlCisgICAgLmVycm9yIHVuc3VwcG9ydGVkIG1hY3JvYmxvY2sgc2l6ZQorICAuZW5kaWYKKy5lbmRtCisKKy5tYWNybyBkb19sb2FkIGJwcCwgc2l6ZSwgZmFzdF9sZDMKKyAgLmlmIFxicHAgPT0gMjQKKyAgICAuaWYgXHNpemUgPT0gOAorICAgICAgLmlmIFxmYXN0X2xkMyA9PSAxCisgICAgICAgIGxkMyAgICAgICAgIHt2MTAuOGIsIHYxMS44YiwgdjEyLjhifSwgW1JHQl0sICMyNAorICAgICAgLmVsc2UKKyAgICAgICAgbGQxICAgICAgICAge3YxMC5ifVswXSwgW1JHQl0sICMxCisgICAgICAgIGxkMSAgICAgICAgIHt2MTEuYn1bMF0sIFtSR0JdLCAjMQorICAgICAgICBsZDEgICAgICAgICB7djEyLmJ9WzBdLCBbUkdCXSwgIzEKKworICAgICAgICBsZDEgICAgICAgICB7djEwLmJ9WzFdLCBbUkdCXSwgIzEKKyAgICAgICAgbGQxICAgICAgICAge3YxMS5ifVsxXSwgW1JHQl0sICMxCisgICAgICAgIGxkMSAgICAgICAgIHt2MTIuYn1bMV0sIFtSR0JdLCAjMQorCisgICAgICAgIGxkMSAgICAgICAgIHt2MTAuYn1bMl0sIFtSR0JdLCAjMQorICAgICAgICBsZDEgICAgICAgICB7djExLmJ9WzJdLCBbUkdCXSwgIzEKKyAgICAgICAgbGQxICAgICAgICAge3YxMi5ifVsyXSwgW1JHQl0sICMxCisKKyAgICAgICAgbGQxICAgICAgICAge3YxMC5ifVszXSwgW1JHQl0sICMxCisgICAgICAgIGxkMSAgICAgICAgIHt2MTEuYn1bM10sIFtSR0JdLCAjMQorICAgICAgICBsZDEgICAgICAgICB7djEyLmJ9WzNdLCBbUkdCXSwgIzEKKworICAgICAgICBsZDEgICAgICAgICB7djEwLmJ9WzRdLCBbUkdCXSwgIzEKKyAgICAgICAgbGQxICAgICAgICAge3YxMS5ifVs0XSwgW1JHQl0sICMxCisgICAgICAgIGxkMSAgICAgICAgIHt2MTIuYn1bNF0sIFtSR0JdLCAjMQorCisgICAgICAgIGxkMSAgICAgICAgIHt2MTAuYn1bNV0sIFtSR0JdLCAjMQorICAgICAgICBsZDEgICAgICAgICB7djExLmJ9WzVdLCBbUkdCXSwgIzEKKyAgICAgICAgbGQxICAgICAgICAge3YxMi5ifVs1XSwgW1JHQl0sICMxCisKKyAgICAgICAgbGQxICAgICAgICAge3YxMC5ifVs2XSwgW1JHQl0sICMxCisgICAgICAgIGxkMSAgICAgICAgIHt2MTEuYn1bNl0sIFtSR0JdLCAjMQorICAgICAgICBsZDEgICAgICAgICB7djEyLmJ9WzZdLCBbUkdCXSwgIzEKKworICAgICAgICBsZDEgICAgICAgICB7djEwLmJ9WzddLCBbUkdCXSwgIzEKKyAgICAgICAgbGQxICAgICAgICAge3YxMS5ifVs3XSwgW1JHQl0sICMxCisgICAgICAgIGxkMSAgICAgICAgIHt2MTIuYn1bN10sIFtSR0JdLCAjMQorICAgICAgLmVuZGlmCisgICAgICBwcmZtICAgICAgICAgIHBsZGwxa2VlcCwgW1JHQiwgIzEyOF0KKyAgICAuZWxzZWlmIFxzaXplID09IDQKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzBdLCBbUkdCXSwgIzMKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzFdLCBbUkdCXSwgIzMKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzJdLCBbUkdCXSwgIzMKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzNdLCBbUkdCXSwgIzMKKyAgICAuZWxzZWlmIFxzaXplID09IDIKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzRdLCBbUkdCXSwgIzMKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzVdLCBbUkdCXSwgIzMKKyAgICAuZWxzZWlmIFxzaXplID09IDEKKyAgICAgIGxkMyAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmJ9WzZdLCBbUkdCXSwgIzMKKyAgICAuZWxzZQorICAgICAgLmVycm9yIHVuc3VwcG9ydGVkIG1hY3JvYmxvY2sgc2l6ZQorICAgIC5lbmRpZgorICAuZWxzZWlmIFxicHAgPT0gMzIKKyAgICAuaWYgXHNpemUgPT0gOAorICAgICAgbGQ0ICAgICAgICAgICB7djEwLjhiLCB2MTEuOGIsIHYxMi44YiwgdjEzLjhifSwgW1JHQl0sICMzMgorICAgICAgcHJmbSAgICAgICAgICBwbGRsMWtlZXAsIFtSR0IsICMxMjhdCisgICAgLmVsc2VpZiBcc2l6ZSA9PSA0CisgICAgICBsZDQgICAgICAgICAgIHt2MTAuYiwgdjExLmIsIHYxMi5iLCB2MTMuYn1bMF0sIFtSR0JdLCAjNAorICAgICAgbGQ0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzFdLCBbUkdCXSwgIzQKKyAgICAgIGxkNCAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmIsIHYxMy5ifVsyXSwgW1JHQl0sICM0CisgICAgICBsZDQgICAgICAgICAgIHt2MTAuYiwgdjExLmIsIHYxMi5iLCB2MTMuYn1bM10sIFtSR0JdLCAjNAorICAgIC5lbHNlaWYgXHNpemUgPT0gMgorICAgICAgbGQ0ICAgICAgICAgICB7djEwLmIsIHYxMS5iLCB2MTIuYiwgdjEzLmJ9WzRdLCBbUkdCXSwgIzQKKyAgICAgIGxkNCAgICAgICAgICAge3YxMC5iLCB2MTEuYiwgdjEyLmIsIHYxMy5ifVs1XSwgW1JHQl0sICM0CisgICAgLmVsc2VpZiBcc2l6ZSA9PSAxCisgICAgICBsZDQgICAgICAgICAgIHt2MTAuYiwgdjExLmIsIHYxMi5iLCB2MTMuYn1bNl0sIFtSR0JdLCAjNAorICAgIC5lbHNlCisgICAgICAuZXJyb3IgdW5zdXBwb3J0ZWQgbWFjcm9ibG9jayBzaXplCisgICAgLmVuZGlmCisgIC5lbHNlCisgICAgLmVycm9yIHVuc3VwcG9ydGVkIGJwcAorICAuZW5kaWYKKy5lbmRtCisKKy5tYWNybyBnZW5lcmF0ZV9qc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbiBjb2xvcmlkLCBicHAsIHJfb2ZmcywgZ19vZmZzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYl9vZmZzLCBmYXN0X2xkMworCisvKgorICogMi1zdGFnZSBwaXBlbGluZWQgUkdCLT5ZQ2JDciBjb252ZXJzaW9uCisgKi8KKworLm1hY3JvIGRvX3JnYl90b195dXZfc3RhZ2UxCisgICAgdXNobGwgICAgICAgICAgIHY0LjhoLCB2MVxyX29mZnNcKCkuOGIsICMwICAvKiByID0gdjQgKi8KKyAgICB1c2hsbCAgICAgICAgICAgdjYuOGgsIHYxXGdfb2Zmc1woKS44YiwgIzAgIC8qIGcgPSB2NiAqLworICAgIHVzaGxsICAgICAgICAgICB2OC44aCwgdjFcYl9vZmZzXCgpLjhiLCAjMCAgLyogYiA9IHY4ICovCisgICAgcmV2NjQgICAgICAgICAgIHYxOC40cywgdjEuNHMKKyAgICByZXY2NCAgICAgICAgICAgdjI2LjRzLCB2MS40cworICAgIHJldjY0ICAgICAgICAgICB2MjguNHMsIHYxLjRzCisgICAgcmV2NjQgICAgICAgICAgIHYzMC40cywgdjEuNHMKKyAgICB1bXVsbCAgICAgICAgICAgdjE0LjRzLCB2NC40aCwgdjAuaFswXQorICAgIHVtdWxsMiAgICAgICAgICB2MTYuNHMsIHY0LjhoLCB2MC5oWzBdCisgICAgdW1sc2wgICAgICAgICAgIHYxOC40cywgdjQuNGgsIHYwLmhbM10KKyAgICB1bWxzbDIgICAgICAgICAgdjI2LjRzLCB2NC44aCwgdjAuaFszXQorICAgIHVtbGFsICAgICAgICAgICB2MjguNHMsIHY0LjRoLCB2MC5oWzVdCisgICAgdW1sYWwyICAgICAgICAgIHYzMC40cywgdjQuOGgsIHYwLmhbNV0KKyAgICB1bWxhbCAgICAgICAgICAgdjE0LjRzLCB2Ni40aCwgdjAuaFsxXQorICAgIHVtbGFsMiAgICAgICAgICB2MTYuNHMsIHY2LjhoLCB2MC5oWzFdCisgICAgdW1sc2wgICAgICAgICAgIHYxOC40cywgdjYuNGgsIHYwLmhbNF0KKyAgICB1bWxzbDIgICAgICAgICAgdjI2LjRzLCB2Ni44aCwgdjAuaFs0XQorICAgIHVtbHNsICAgICAgICAgICB2MjguNHMsIHY2LjRoLCB2MC5oWzZdCisgICAgdW1sc2wyICAgICAgICAgIHYzMC40cywgdjYuOGgsIHYwLmhbNl0KKyAgICB1bWxhbCAgICAgICAgICAgdjE0LjRzLCB2OC40aCwgdjAuaFsyXQorICAgIHVtbGFsMiAgICAgICAgICB2MTYuNHMsIHY4LjhoLCB2MC5oWzJdCisgICAgdW1sYWwgICAgICAgICAgIHYxOC40cywgdjguNGgsIHYwLmhbNV0KKyAgICB1bWxhbDIgICAgICAgICAgdjI2LjRzLCB2OC44aCwgdjAuaFs1XQorICAgIHVtbHNsICAgICAgICAgICB2MjguNHMsIHY4LjRoLCB2MC5oWzddCisgICAgdW1sc2wyICAgICAgICAgIHYzMC40cywgdjguOGgsIHYwLmhbN10KKy5lbmRtCisKKy5tYWNybyBkb19yZ2JfdG9feXV2X3N0YWdlMgorICAgIHJzaHJuICAgICAgICAgICB2MjAuNGgsIHYxNC40cywgIzE2CisgICAgc2hybiAgICAgICAgICAgIHYyMi40aCwgdjE4LjRzLCAjMTYKKyAgICBzaHJuICAgICAgICAgICAgdjI0LjRoLCB2MjguNHMsICMxNgorICAgIHJzaHJuMiAgICAgICAgICB2MjAuOGgsIHYxNi40cywgIzE2CisgICAgc2hybjIgICAgICAgICAgIHYyMi44aCwgdjI2LjRzLCAjMTYKKyAgICBzaHJuMiAgICAgICAgICAgdjI0LjhoLCB2MzAuNHMsICMxNgorICAgIHh0biAgICAgICAgICAgICB2MjAuOGIsIHYyMC44aCAgICAgICAvKiB2MjAgPSB5ICovCisgICAgeHRuICAgICAgICAgICAgIHYyMS44YiwgdjIyLjhoICAgICAgIC8qIHYyMSA9IHUgKi8KKyAgICB4dG4gICAgICAgICAgICAgdjIyLjhiLCB2MjQuOGggICAgICAgLyogdjIyID0gdiAqLworLmVuZG0KKworLm1hY3JvIGRvX3JnYl90b195dXYKKyAgICBkb19yZ2JfdG9feXV2X3N0YWdlMQorICAgIGRvX3JnYl90b195dXZfc3RhZ2UyCisuZW5kbQorCisvKiBUT0RPOiBleHBhbmQgbWFjcm9zIGFuZCBpbnRlcmxlYXZlIGluc3RydWN0aW9ucyBpZiBzb21lIGluLW9yZGVyCisgKiAgICAgICBBUk02NCBwcm9jZXNzb3IgYWN0dWFsbHkgY2FuIGR1YWwtaXNzdWUgTE9BRC9TVE9SRSB3aXRoIEFMVSAqLworLm1hY3JvIGRvX3JnYl90b195dXZfc3RhZ2UyX3N0b3JlX2xvYWRfc3RhZ2UxIGZhc3RfbGQzCisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTIKKyAgICBkb19sb2FkICAgICAgICAgXGJwcCwgOCwgXGZhc3RfbGQzCisgICAgc3QxICAgICAgICAgICAgIHt2MjAuOGJ9LCBbWV0sICM4CisgICAgc3QxICAgICAgICAgICAgIHt2MjEuOGJ9LCBbVV0sICM4CisgICAgc3QxICAgICAgICAgICAgIHt2MjIuOGJ9LCBbVl0sICM4CisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTEKKy5lbmRtCisKKy5iYWxpZ24gMTYKKy5pZiBcZmFzdF9sZDMgPT0gMQorTGpzaW1kX1xjb2xvcmlkXCgpX3ljY19uZW9uX2NvbnN0czoKKy5lbHNlCitManNpbWRfXGNvbG9yaWRcKClfeWNjX25lb25fc2xvd2xkM19jb25zdHM6CisuZW5kaWYKKyAgLnNob3J0IDE5NTk1LCAzODQ3MCwgNzQ3MSwgMTEwNTkKKyAgLnNob3J0IDIxNzA5LCAzMjc2OCwgMjc0MzksIDUzMjkKKyAgLnNob3J0IDMyNzY3LCAxMjgsIDMyNzY3LCAxMjgKKyAgLnNob3J0IDMyNzY3LCAxMjgsIDMyNzY3LCAxMjgKKworLmlmIFxmYXN0X2xkMyA9PSAxCithc21fZnVuY3Rpb24ganNpbWRfXGNvbG9yaWRcKClfeWNjX2NvbnZlcnRfbmVvbgorLmVsc2UKK2FzbV9mdW5jdGlvbiBqc2ltZF9cY29sb3JpZFwoKV95Y2NfY29udmVydF9uZW9uX3Nsb3dsZDMKKy5lbmRpZgorICAgIE9VVFBVVF9XSURUSCAgICAucmVxIHcwCisgICAgSU5QVVRfQlVGICAgICAgIC5yZXEgeDEKKyAgICBPVVRQVVRfQlVGICAgICAgLnJlcSB4MgorICAgIE9VVFBVVF9ST1cgICAgICAucmVxIHczCisgICAgTlVNX1JPV1MgICAgICAgIC5yZXEgdzQKKworICAgIE9VVFBVVF9CVUYwICAgICAucmVxIHg1CisgICAgT1VUUFVUX0JVRjEgICAgIC5yZXEgeDYKKyAgICBPVVRQVVRfQlVGMiAgICAgLnJlcSB4MiAgLyogT1VUUFVUX0JVRiAqLworCisgICAgUkdCICAgICAgICAgICAgIC5yZXEgeDcKKyAgICBZICAgICAgICAgICAgICAgLnJlcSB4OQorICAgIFUgICAgICAgICAgICAgICAucmVxIHgxMAorICAgIFYgICAgICAgICAgICAgICAucmVxIHgxMQorICAgIE4gICAgICAgICAgICAgICAucmVxIHcxMgorCisgICAgLyogTG9hZCBjb25zdGFudHMgdG8gZDAsIGQxLCBkMiwgZDMgKi8KKyAgICAuaWYgXGZhc3RfbGQzID09IDEKKyAgICAgIGFkciAgICAgICAgICAgeDEzLCBManNpbWRfXGNvbG9yaWRcKClfeWNjX25lb25fY29uc3RzCisgICAgLmVsc2UKKyAgICAgIGFkciAgICAgICAgICAgeDEzLCBManNpbWRfXGNvbG9yaWRcKClfeWNjX25lb25fc2xvd2xkM19jb25zdHMKKyAgICAuZW5kaWYKKyAgICBsZDEgICAgICAgICAgICAge3YwLjhoLCB2MS44aH0sIFt4MTNdCisKKyAgICBsZHIgICAgICAgICAgICAgT1VUUFVUX0JVRjAsIFtPVVRQVVRfQlVGXQorICAgIGxkciAgICAgICAgICAgICBPVVRQVVRfQlVGMSwgW09VVFBVVF9CVUYsICM4XQorICAgIGxkciAgICAgICAgICAgICBPVVRQVVRfQlVGMiwgW09VVFBVVF9CVUYsICMxNl0KKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0JVRgorCisgICAgLyogU2F2ZSBORU9OIHJlZ2lzdGVycyAqLworICAgIHN1YiAgICAgICAgICAgICBzcCwgc3AsICM2NAorICAgIG1vdiAgICAgICAgICAgICB4OSwgc3AKKyAgICBzdDEgICAgICAgICAgICAge3Y4LjhiLCB2OS44YiwgdjEwLjhiLCB2MTEuOGJ9LCBbeDldLCAzMgorICAgIHN0MSAgICAgICAgICAgICB7djEyLjhiLCB2MTMuOGIsIHYxNC44YiwgdjE1LjhifSwgW3g5XSwgMzIKKworICAgIC8qIE91dGVyIGxvb3Agb3ZlciBzY2FubGluZXMgKi8KKyAgICBjbXAgICAgICAgICAgICAgTlVNX1JPV1MsICMxCisgICAgYi5sdCAgICAgICAgICAgIDlmCiswOgorICAgIGxkciAgICAgICAgICAgICBZLCBbT1VUUFVUX0JVRjAsIE9VVFBVVF9ST1csIHV4dHcgIzNdCisgICAgbGRyICAgICAgICAgICAgIFUsIFtPVVRQVVRfQlVGMSwgT1VUUFVUX1JPVywgdXh0dyAjM10KKyAgICBtb3YgICAgICAgICAgICAgTiwgT1VUUFVUX1dJRFRICisgICAgbGRyICAgICAgICAgICAgIFYsIFtPVVRQVVRfQlVGMiwgT1VUUFVUX1JPVywgdXh0dyAjM10KKyAgICBhZGQgICAgICAgICAgICAgT1VUUFVUX1JPVywgT1VUUFVUX1JPVywgIzEKKyAgICBsZHIgICAgICAgICAgICAgUkdCLCBbSU5QVVRfQlVGXSwgIzgKKworICAgIC8qIElubmVyIGxvb3Agb3ZlciBwaXhlbHMgKi8KKyAgICBzdWJzICAgICAgICAgICAgTiwgTiwgIzgKKyAgICBiLmx0ICAgICAgICAgICAgM2YKKyAgICBkb19sb2FkICAgICAgICAgXGJwcCwgOCwgXGZhc3RfbGQzCisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTEKKyAgICBzdWJzICAgICAgICAgICAgTiwgTiwgIzgKKyAgICBiLmx0ICAgICAgICAgICAgMmYKKzE6CisgICAgZG9fcmdiX3RvX3l1dl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEgXGZhc3RfbGQzCisgICAgc3VicyAgICAgICAgICAgIE4sIE4sICM4CisgICAgYi5nZSAgICAgICAgICAgIDFiCisyOgorICAgIGRvX3JnYl90b195dXZfc3RhZ2UyCisgICAgZG9fc3RvcmUgICAgICAgIDgKKyAgICB0c3QgICAgICAgICAgICAgTiwgIzcKKyAgICBiLmVxICAgICAgICAgICAgOGYKKzM6CisgICAgdGJ6ICAgICAgICAgICAgIE4sICMyLCAzZgorICAgIGRvX2xvYWQgICAgICAgICBcYnBwLCA0LCBcZmFzdF9sZDMKKzM6CisgICAgdGJ6ICAgICAgICAgICAgIE4sICMxLCA0ZgorICAgIGRvX2xvYWQgICAgICAgICBcYnBwLCAyLCBcZmFzdF9sZDMKKzQ6CisgICAgdGJ6ICAgICAgICAgICAgIE4sICMwLCA1ZgorICAgIGRvX2xvYWQgICAgICAgICBcYnBwLCAxLCBcZmFzdF9sZDMKKzU6CisgICAgZG9fcmdiX3RvX3l1dgorICAgIHRieiAgICAgICAgICAgICBOLCAjMiwgNmYKKyAgICBkb19zdG9yZSAgICAgICAgNAorNjoKKyAgICB0YnogICAgICAgICAgICAgTiwgIzEsIDdmCisgICAgZG9fc3RvcmUgICAgICAgIDIKKzc6CisgICAgdGJ6ICAgICAgICAgICAgIE4sICMwLCA4ZgorICAgIGRvX3N0b3JlICAgICAgICAxCis4OgorICAgIHN1YnMgICAgICAgICAgICBOVU1fUk9XUywgTlVNX1JPV1MsICMxCisgICAgYi5ndCAgICAgICAgICAgIDBiCis5OgorICAgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgbGQxICAgICAgICAgICAgIHt2OC44YiwgdjkuOGIsIHYxMC44YiwgdjExLjhifSwgW3NwXSwgMzIKKyAgICBsZDEgICAgICAgICAgICAge3YxMi44YiwgdjEzLjhiLCB2MTQuOGIsIHYxNS44Yn0sIFtzcF0sIDMyCisgICAgYnIgICAgICAgICAgICAgIHgzMAorCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9XSURUSAorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfUk9XCisgICAgLnVucmVxICAgICAgICAgIElOUFVUX0JVRgorICAgIC51bnJlcSAgICAgICAgICBOVU1fUk9XUworICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQlVGMAorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQlVGMQorICAgIC51bnJlcSAgICAgICAgICBPVVRQVVRfQlVGMgorICAgIC51bnJlcSAgICAgICAgICBSR0IKKyAgICAudW5yZXEgICAgICAgICAgWQorICAgIC51bnJlcSAgICAgICAgICBVCisgICAgLnVucmVxICAgICAgICAgIFYKKyAgICAudW5yZXEgICAgICAgICAgTgorCisucHVyZ2VtIGRvX3JnYl90b195dXYKKy5wdXJnZW0gZG9fcmdiX3RvX3l1dl9zdGFnZTEKKy5wdXJnZW0gZG9fcmdiX3RvX3l1dl9zdGFnZTIKKy5wdXJnZW0gZG9fcmdiX3RvX3l1dl9zdGFnZTJfc3RvcmVfbG9hZF9zdGFnZTEKKworLmVuZG0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaWQgLS0tLS0gYnBwIFIgIEcgIEIgIEZhc3QgTEQzICovCitnZW5lcmF0ZV9qc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbiBleHRyZ2IsICAyNCwgMCwgMSwgMiwgMQorZ2VuZXJhdGVfanNpbWRfcmdiX3ljY19jb252ZXJ0X25lb24gZXh0YmdyLCAgMjQsIDIsIDEsIDAsIDEKK2dlbmVyYXRlX2pzaW1kX3JnYl95Y2NfY29udmVydF9uZW9uIGV4dHJnYngsIDMyLCAwLCAxLCAyLCAxCitnZW5lcmF0ZV9qc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbiBleHRiZ3J4LCAzMiwgMiwgMSwgMCwgMQorZ2VuZXJhdGVfanNpbWRfcmdiX3ljY19jb252ZXJ0X25lb24gZXh0eGJnciwgMzIsIDMsIDIsIDEsIDEKK2dlbmVyYXRlX2pzaW1kX3JnYl95Y2NfY29udmVydF9uZW9uIGV4dHhyZ2IsIDMyLCAxLCAyLCAzLCAxCisKK2dlbmVyYXRlX2pzaW1kX3JnYl95Y2NfY29udmVydF9uZW9uIGV4dHJnYiwgIDI0LCAwLCAxLCAyLCAwCitnZW5lcmF0ZV9qc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbiBleHRiZ3IsICAyNCwgMiwgMSwgMCwgMAorCisucHVyZ2VtIGRvX2xvYWQKKy5wdXJnZW0gZG9fc3RvcmUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgorICoKKyAqIFRPRE86IGNhbiBiZSBjb21iaW5lZCB3aXRoICdqc2ltZF9mZGN0X2lmYXN0X25lb24nIHRvIGdldAorICogICAgICAgcmlkIG9mIFZTVDEuMTYgaW5zdHJ1Y3Rpb25zCisgKi8KKworYXNtX2Z1bmN0aW9uIGpzaW1kX2NvbnZzYW1wX25lb24KKyAgICBTQU1QTEVfREFUQSAgICAgLnJlcSB4MAorICAgIFNUQVJUX0NPTCAgICAgICAucmVxIHgxCisgICAgV09SS1NQQUNFICAgICAgIC5yZXEgeDIKKyAgICBUTVAxICAgICAgICAgICAgLnJlcSB4OQorICAgIFRNUDIgICAgICAgICAgICAucmVxIHgxMAorICAgIFRNUDMgICAgICAgICAgICAucmVxIHgxMQorICAgIFRNUDQgICAgICAgICAgICAucmVxIHgxMgorICAgIFRNUDUgICAgICAgICAgICAucmVxIHgxMworICAgIFRNUDYgICAgICAgICAgICAucmVxIHgxNAorICAgIFRNUDcgICAgICAgICAgICAucmVxIHgxNQorICAgIFRNUDggICAgICAgICAgICAucmVxIHg0CisgICAgVE1QRFVQICAgICAgICAgIC5yZXEgdzMKKworICAgIC8qIFNUQVJUX0NPTCBpcyBhIEpESU1FTlNJT04gKHVuc2lnbmVkIGludCkgYXJndW1lbnQsIHNvIHRoZSBBQkkgZG9lc24ndAorICAgICAgIGd1YXJhbnRlZSB0aGF0IHRoZSB1cHBlciAodW51c2VkKSAzMiBiaXRzIG9mIHgxIGFyZSB2YWxpZC4gIFRoaXMKKyAgICAgICBpbnN0cnVjdGlvbiBlbnN1cmVzIHRoYXQgdGhvc2UgYml0cyBhcmUgc2V0IHRvIHplcm8uICovCisgICAgdXh0dyB4MSwgdzEKKworICAgIG1vdiAgICAgICAgICAgICBUTVBEVVAsICMxMjgKKyAgICBsZHAgICAgICAgICAgICAgVE1QMSwgVE1QMiwgW1NBTVBMRV9EQVRBXSwgMTYKKyAgICBsZHAgICAgICAgICAgICAgVE1QMywgVE1QNCwgW1NBTVBMRV9EQVRBXSwgMTYKKyAgICBkdXAgICAgICAgICAgICAgdjAuOGIsIFRNUERVUAorICAgIGFkZCAgICAgICAgICAgICBUTVAxLCBUTVAxLCBTVEFSVF9DT0wKKyAgICBhZGQgICAgICAgICAgICAgVE1QMiwgVE1QMiwgU1RBUlRfQ09MCisgICAgbGRwICAgICAgICAgICAgIFRNUDUsIFRNUDYsIFtTQU1QTEVfREFUQV0sIDE2CisgICAgYWRkICAgICAgICAgICAgIFRNUDMsIFRNUDMsIFNUQVJUX0NPTAorICAgIGFkZCAgICAgICAgICAgICBUTVA0LCBUTVA0LCBTVEFSVF9DT0wKKyAgICBsZHAgICAgICAgICAgICAgVE1QNywgVE1QOCwgW1NBTVBMRV9EQVRBXSwgMTYKKyAgICBhZGQgICAgICAgICAgICAgVE1QNSwgVE1QNSwgU1RBUlRfQ09MCisgICAgYWRkICAgICAgICAgICAgIFRNUDYsIFRNUDYsIFNUQVJUX0NPTAorICAgIGxkMSAgICAgICAgICAgICB7djE2LjhifSwgW1RNUDFdCisgICAgYWRkICAgICAgICAgICAgIFRNUDcsIFRNUDcsIFNUQVJUX0NPTAorICAgIGFkZCAgICAgICAgICAgICBUTVA4LCBUTVA4LCBTVEFSVF9DT0wKKyAgICBsZDEgICAgICAgICAgICAge3YxNy44Yn0sIFtUTVAyXQorICAgIHVzdWJsICAgICAgICAgICB2MTYuOGgsIHYxNi44YiwgdjAuOGIKKyAgICBsZDEgICAgICAgICAgICAge3YxOC44Yn0sIFtUTVAzXQorICAgIHVzdWJsICAgICAgICAgICB2MTcuOGgsIHYxNy44YiwgdjAuOGIKKyAgICBsZDEgICAgICAgICAgICAge3YxOS44Yn0sIFtUTVA0XQorICAgIHVzdWJsICAgICAgICAgICB2MTguOGgsIHYxOC44YiwgdjAuOGIKKyAgICBsZDEgICAgICAgICAgICAge3YyMC44Yn0sIFtUTVA1XQorICAgIHVzdWJsICAgICAgICAgICB2MTkuOGgsIHYxOS44YiwgdjAuOGIKKyAgICBsZDEgICAgICAgICAgICAge3YyMS44Yn0sIFtUTVA2XQorICAgIHN0MSAgICAgICAgICAgICB7djE2LjhoLCB2MTcuOGgsIHYxOC44aCwgdjE5LjhofSwgW1dPUktTUEFDRV0sIDY0CisgICAgdXN1YmwgICAgICAgICAgIHYyMC44aCwgdjIwLjhiLCB2MC44YgorICAgIGxkMSAgICAgICAgICAgICB7djIyLjhifSwgW1RNUDddCisgICAgdXN1YmwgICAgICAgICAgIHYyMS44aCwgdjIxLjhiLCB2MC44YgorICAgIGxkMSAgICAgICAgICAgICB7djIzLjhifSwgW1RNUDhdCisgICAgdXN1YmwgICAgICAgICAgIHYyMi44aCwgdjIyLjhiLCB2MC44YgorICAgIHVzdWJsICAgICAgICAgICB2MjMuOGgsIHYyMy44YiwgdjAuOGIKKyAgICBzdDEgICAgICAgICAgICAge3YyMC44aCwgdjIxLjhoLCB2MjIuOGgsIHYyMy44aH0sIFtXT1JLU1BBQ0VdLCA2NAorCisgICAgYnIgICAgICAgICAgICAgIHgzMAorCisgICAgLnVucmVxICAgICAgICAgIFNBTVBMRV9EQVRBCisgICAgLnVucmVxICAgICAgICAgIFNUQVJUX0NPTAorICAgIC51bnJlcSAgICAgICAgICBXT1JLU1BBQ0UKKyAgICAudW5yZXEgICAgICAgICAgVE1QMQorICAgIC51bnJlcSAgICAgICAgICBUTVAyCisgICAgLnVucmVxICAgICAgICAgIFRNUDMKKyAgICAudW5yZXEgICAgICAgICAgVE1QNAorICAgIC51bnJlcSAgICAgICAgICBUTVA1CisgICAgLnVucmVxICAgICAgICAgIFRNUDYKKyAgICAudW5yZXEgICAgICAgICAgVE1QNworICAgIC51bnJlcSAgICAgICAgICBUTVA4CisgICAgLnVucmVxICAgICAgICAgIFRNUERVUAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBqc2ltZF9mZGN0X2lzbG93X25lb24KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYSBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorICogZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKyAqIGRpcmVjdGx5IG9uIHRoZSBJSkcnJ3Mgb3JpZ2luYWwgamZkY3RpbnQuYzsgc2VlIHRoZSBqZmRjdGludC5jIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRPRE86IGNhbiBiZSBjb21iaW5lZCB3aXRoICdqc2ltZF9jb252c2FtcF9uZW9uJyB0byBnZXQKKyAqICAgICAgIHJpZCBvZiBhIGJ1bmNoIG9mIFZMRDEuMTYgaW5zdHJ1Y3Rpb25zCisgKi8KKworI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAyCisKKyNkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorI2RlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpCisKKyNkZWZpbmUgRl8wXzI5OCAgIDI0NDYgIC8qIEZJWCgwLjI5ODYzMTMzNikgKi8KKyNkZWZpbmUgRl8wXzM5MCAgIDMxOTYgIC8qIEZJWCgwLjM5MDE4MDY0NCkgKi8KKyNkZWZpbmUgRl8wXzU0MSAgIDQ0MzMgIC8qIEZJWCgwLjU0MTE5NjEwMCkgKi8KKyNkZWZpbmUgRl8wXzc2NSAgIDYyNzAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRl8wXzg5OSAgIDczNzMgIC8qIEZJWCgwLjg5OTk3NjIyMykgKi8KKyNkZWZpbmUgRl8xXzE3NSAgIDk2MzMgIC8qIEZJWCgxLjE3NTg3NTYwMikgKi8KKyNkZWZpbmUgRl8xXzUwMSAgMTIyOTkgIC8qIEZJWCgxLjUwMTMyMTExMCkgKi8KKyNkZWZpbmUgRl8xXzg0NyAgMTUxMzcgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRl8xXzk2MSAgMTYwNjkgIC8qIEZJWCgxLjk2MTU3MDU2MCkgKi8KKyNkZWZpbmUgRl8yXzA1MyAgMTY4MTkgIC8qIEZJWCgyLjA1MzExOTg2OSkgKi8KKyNkZWZpbmUgRl8yXzU2MiAgMjA5OTUgIC8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRl8zXzA3MiAgMjUxNzIgIC8qIEZJWCgzLjA3MjcxMTAyNikgKi8KKworLmJhbGlnbiAxNgorTGpzaW1kX2ZkY3RfaXNsb3dfbmVvbl9jb25zdHM6CisgIC5zaG9ydCBGXzBfMjk4CisgIC5zaG9ydCAtRl8wXzM5MAorICAuc2hvcnQgRl8wXzU0MQorICAuc2hvcnQgRl8wXzc2NQorICAuc2hvcnQgLSBGXzBfODk5CisgIC5zaG9ydCBGXzFfMTc1CisgIC5zaG9ydCBGXzFfNTAxCisgIC5zaG9ydCAtIEZfMV84NDcKKyAgLnNob3J0IC0gRl8xXzk2MQorICAuc2hvcnQgRl8yXzA1MworICAuc2hvcnQgLSBGXzJfNTYyCisgIC5zaG9ydCBGXzNfMDcyCisgIC5zaG9ydCAwICAgICAgICAgIC8qIHBhZGRpbmcgKi8KKyAgLnNob3J0IDAKKyAgLnNob3J0IDAKKyAgLnNob3J0IDAKKworI3VuZGVmIEZfMF8yOTgKKyN1bmRlZiBGXzBfMzkwCisjdW5kZWYgRl8wXzU0MQorI3VuZGVmIEZfMF83NjUKKyN1bmRlZiBGXzBfODk5CisjdW5kZWYgRl8xXzE3NQorI3VuZGVmIEZfMV81MDEKKyN1bmRlZiBGXzFfODQ3CisjdW5kZWYgRl8xXzk2MQorI3VuZGVmIEZfMl8wNTMKKyN1bmRlZiBGXzJfNTYyCisjdW5kZWYgRl8zXzA3MgorI2RlZmluZSBYRklYX1BfMF8yOTggIHYwLmhbMF0KKyNkZWZpbmUgWEZJWF9OXzBfMzkwICB2MC5oWzFdCisjZGVmaW5lIFhGSVhfUF8wXzU0MSAgdjAuaFsyXQorI2RlZmluZSBYRklYX1BfMF83NjUgIHYwLmhbM10KKyNkZWZpbmUgWEZJWF9OXzBfODk5ICB2MC5oWzRdCisjZGVmaW5lIFhGSVhfUF8xXzE3NSAgdjAuaFs1XQorI2RlZmluZSBYRklYX1BfMV81MDEgIHYwLmhbNl0KKyNkZWZpbmUgWEZJWF9OXzFfODQ3ICB2MC5oWzddCisjZGVmaW5lIFhGSVhfTl8xXzk2MSAgdjEuaFswXQorI2RlZmluZSBYRklYX1BfMl8wNTMgIHYxLmhbMV0KKyNkZWZpbmUgWEZJWF9OXzJfNTYyICB2MS5oWzJdCisjZGVmaW5lIFhGSVhfUF8zXzA3MiAgdjEuaFszXQorCithc21fZnVuY3Rpb24ganNpbWRfZmRjdF9pc2xvd19uZW9uCisKKyAgICBEQVRBICAgICAgICAgICAgLnJlcSB4MAorICAgIFRNUCAgICAgICAgICAgICAucmVxIHg5CisKKyAgICAvKiBMb2FkIGNvbnN0YW50cyAqLworICAgIGFkciAgICAgICAgICAgICBUTVAsIExqc2ltZF9mZGN0X2lzbG93X25lb25fY29uc3RzCisgICAgbGQxICAgICAgICAgICAgIHt2MC44aCwgdjEuOGh9LCBbVE1QXQorCisgICAgLyogU2F2ZSBORU9OIHJlZ2lzdGVycyAqLworICAgIHN1YiAgICAgICAgICAgICBzcCwgc3AsICM2NAorICAgIG1vdiAgICAgICAgICAgICB4MTAsIHNwCisgICAgc3QxICAgICAgICAgICAgIHt2OC44YiwgdjkuOGIsIHYxMC44YiwgdjExLjhifSwgW3gxMF0sIDMyCisgICAgc3QxICAgICAgICAgICAgIHt2MTIuOGIsIHYxMy44YiwgdjE0LjhiLCB2MTUuOGJ9LCBbeDEwXSwgMzIKKworICAgIC8qIExvYWQgYWxsIERBVEEgaW50byBORU9OIHJlZ2lzdGVycyB3aXRoIHRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbjoKKyAgICAgKiAgICAgICAwIDEgMiAzIHwgNCA1IDYgNworICAgICAqICAgICAgLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICogICAwIHwgZDE2ICAgICB8IGQxNyAgICB8IHYxNi44aAorICAgICAqICAgMSB8IGQxOCAgICAgfCBkMTkgICAgfCB2MTcuOGgKKyAgICAgKiAgIDIgfCBkMjAgICAgIHwgZDIxICAgIHwgdjE4LjhoCisgICAgICogICAzIHwgZDIyICAgICB8IGQyMyAgICB8IHYxOS44aAorICAgICAqICAgNCB8IGQyNCAgICAgfCBkMjUgICAgfCB2MjAuOGgKKyAgICAgKiAgIDUgfCBkMjYgICAgIHwgZDI3ICAgIHwgdjIxLjhoCisgICAgICogICA2IHwgZDI4ICAgICB8IGQyOSAgICB8IHYyMi44aAorICAgICAqICAgNyB8IGQzMCAgICAgfCBkMzEgICAgfCB2MjMuOGgKKyAgICAgKi8KKworICAgIGxkMSAgICAgICAgICAgICB7djE2LjhoLCB2MTcuOGgsIHYxOC44aCwgdjE5LjhofSwgW0RBVEFdLCA2NAorICAgIGxkMSAgICAgICAgICAgICB7djIwLjhoLCB2MjEuOGgsIHYyMi44aCwgdjIzLjhofSwgW0RBVEFdCisgICAgc3ViICAgICAgICAgICAgIERBVEEsIERBVEEsICM2NAorCisgICAgLyogVHJhbnNwb3NlICovCisgICAgdHJhbnNwb3NlXzh4OCAgIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MzEsIHYyLCB2MywgdjQKKyAgICAvKiAxLUQgRkRDVCAqLworICAgIGFkZCAgICAgICAgICAgICB2MjQuOGgsIHYxNi44aCwgdjIzLjhoICAvKiB0bXAwID0gZGF0YXB0clswXSArIGRhdGFwdHJbN107ICovCisgICAgc3ViICAgICAgICAgICAgIHYzMS44aCwgdjE2LjhoLCB2MjMuOGggIC8qIHRtcDcgPSBkYXRhcHRyWzBdIC0gZGF0YXB0cls3XTsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI1LjhoLCB2MTcuOGgsIHYyMi44aCAgLyogdG1wMSA9IGRhdGFwdHJbMV0gKyBkYXRhcHRyWzZdOyAqLworICAgIHN1YiAgICAgICAgICAgICB2MzAuOGgsIHYxNy44aCwgdjIyLjhoICAvKiB0bXA2ID0gZGF0YXB0clsxXSAtIGRhdGFwdHJbNl07ICovCisgICAgYWRkICAgICAgICAgICAgIHYyNi44aCwgdjE4LjhoLCB2MjEuOGggIC8qIHRtcDIgPSBkYXRhcHRyWzJdICsgZGF0YXB0cls1XTsgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjI5LjhoLCB2MTguOGgsIHYyMS44aCAgLyogdG1wNSA9IGRhdGFwdHJbMl0gLSBkYXRhcHRyWzVdOyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjcuOGgsIHYxOS44aCwgdjIwLjhoICAvKiB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07ICovCisgICAgc3ViICAgICAgICAgICAgIHYyOC44aCwgdjE5LjhoLCB2MjAuOGggIC8qIHRtcDQgPSBkYXRhcHRyWzNdIC0gZGF0YXB0cls0XTsgKi8KKworICAgIC8qIGV2ZW4gcGFydCAqLworCisgICAgYWRkICAgICAgICAgICAgIHY4LjhoLCB2MjQuOGgsIHYyNy44aCAgIC8qIHRtcDEwID0gdG1wMCArIHRtcDM7ICovCisgICAgc3ViICAgICAgICAgICAgIHY5LjhoLCB2MjQuOGgsIHYyNy44aCAgIC8qIHRtcDEzID0gdG1wMCAtIHRtcDM7ICovCisgICAgYWRkICAgICAgICAgICAgIHYxMC44aCwgdjI1LjhoLCB2MjYuOGggIC8qIHRtcDExID0gdG1wMSArIHRtcDI7ICovCisgICAgc3ViICAgICAgICAgICAgIHYxMS44aCwgdjI1LjhoLCB2MjYuOGggIC8qIHRtcDEyID0gdG1wMSAtIHRtcDI7ICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjE2LjhoLCB2OC44aCwgdjEwLjhoICAvKiB0bXAxMCArIHRtcDExICovCisgICAgc3ViICAgICAgICAgICAgIHYyMC44aCwgdjguOGgsIHYxMC44aCAgLyogdG1wMTAgLSB0bXAxMSAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxOC44aCwgdjExLjhoLCB2OS44aCAgLyogdG1wMTIgKyB0bXAxMyAqLworCisgICAgc2hsICAgICAgICAgICAgIHYxNi44aCwgdjE2LjhoLCAjUEFTUzFfQklUUyAgLyogZGF0YXB0clswXSA9IChEQ1RFTEVNKUxFRlRfU0hJRlQodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUyk7ICovCisgICAgc2hsICAgICAgICAgICAgIHYyMC44aCwgdjIwLjhoLCAjUEFTUzFfQklUUyAgLyogZGF0YXB0cls0XSA9IChEQ1RFTEVNKUxFRlRfU0hJRlQodG1wMTAgLSB0bXAxMSwgUEFTUzFfQklUUyk7ICovCisKKyAgICBzbXVsbDIgICAgICAgICAgdjI0LjRzLCB2MTguOGgsIFhGSVhfUF8wXzU0MSAgLyogejEgaGkgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBYRklYX1BfMF81NDEpOyAqLworICAgIHNtdWxsICAgICAgICAgICB2MTguNHMsIHYxOC40aCwgWEZJWF9QXzBfNTQxICAvKiB6MSBsbyA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIFhGSVhfUF8wXzU0MSk7ICovCisgICAgbW92ICAgICAgICAgICAgIHYyMi4xNmIsIHYxOC4xNmIKKyAgICBtb3YgICAgICAgICAgICAgdjI1LjE2YiwgdjI0LjE2YgorCisgICAgc21sYWwgICAgICAgICAgIHYxOC40cywgdjkuNGgsIFhGSVhfUF8wXzc2NSAgIC8qIGxvIHoxICsgTVVMVElQTFkodG1wMTMsIFhGSVhfUF8wXzc2NSkgKi8KKyAgICBzbWxhbDIgICAgICAgICAgdjI0LjRzLCB2OS44aCwgWEZJWF9QXzBfNzY1ICAgLyogaGkgejEgKyBNVUxUSVBMWSh0bXAxMywgWEZJWF9QXzBfNzY1KSAqLworICAgIHNtbGFsICAgICAgICAgICB2MjIuNHMsIHYxMS40aCwgWEZJWF9OXzFfODQ3ICAvKiBsbyB6MSArIE1VTFRJUExZKHRtcDEyLCBYRklYX05fMV84NDcpICovCisgICAgc21sYWwyICAgICAgICAgIHYyNS40cywgdjExLjhoLCBYRklYX05fMV84NDcgIC8qIGhpIHoxICsgTVVMVElQTFkodG1wMTIsIFhGSVhfTl8xXzg0NykgKi8KKworICAgIHJzaHJuICAgICAgICAgICB2MTguNGgsIHYxOC40cywgI0RFU0NBTEVfUDEKKyAgICByc2hybiAgICAgICAgICAgdjIyLjRoLCB2MjIuNHMsICNERVNDQUxFX1AxCisgICAgcnNocm4yICAgICAgICAgIHYxOC44aCwgdjI0LjRzLCAjREVTQ0FMRV9QMSAgLyogZGF0YXB0clsyXSA9IChEQ1RFTEVNKURFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMywgWEZJWF9QXzBfNzY1KSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjIyLjhoLCB2MjUuNHMsICNERVNDQUxFX1AxICAvKiBkYXRhcHRyWzZdID0gKERDVEVMRU0pREVTQ0FMRSh6MSArIE1VTFRJUExZKHRtcDEyLCBYRklYX05fMV84NDcpLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOyAqLworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2OC44aCwgdjI4LjhoLCB2MzEuOGggICAgICAgIC8qIHoxID0gdG1wNCArIHRtcDc7ICovCisgICAgYWRkICAgICAgICAgICAgIHY5LjhoLCB2MjkuOGgsIHYzMC44aCAgICAgICAgLyogejIgPSB0bXA1ICsgdG1wNjsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjEwLjhoLCB2MjguOGgsIHYzMC44aCAgICAgICAvKiB6MyA9IHRtcDQgKyB0bXA2OyAqLworICAgIGFkZCAgICAgICAgICAgICB2MTEuOGgsIHYyOS44aCwgdjMxLjhoICAgICAgIC8qIHo0ID0gdG1wNSArIHRtcDc7ICovCisgICAgc211bGwgICAgICAgICAgIHY0LjRzLCB2MTAuNGgsIFhGSVhfUF8xXzE3NSAgLyogejUgbG8gPSB6MyBsbyAqIFhGSVhfUF8xXzE3NSAqLworICAgIHNtdWxsMiAgICAgICAgICB2NS40cywgdjEwLjhoLCBYRklYX1BfMV8xNzUKKyAgICBzbWxhbCAgICAgICAgICAgdjQuNHMsIHYxMS40aCwgWEZJWF9QXzFfMTc1ICAvKiB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMik7ICovCisgICAgc21sYWwyICAgICAgICAgIHY1LjRzLCB2MTEuOGgsIFhGSVhfUF8xXzE3NQorCisgICAgc211bGwyICAgICAgICAgIHYyNC40cywgdjI4LjhoLCBYRklYX1BfMF8yOTgKKyAgICBzbXVsbDIgICAgICAgICAgdjI1LjRzLCB2MjkuOGgsIFhGSVhfUF8yXzA1MworICAgIHNtdWxsMiAgICAgICAgICB2MjYuNHMsIHYzMC44aCwgWEZJWF9QXzNfMDcyCisgICAgc211bGwyICAgICAgICAgIHYyNy40cywgdjMxLjhoLCBYRklYX1BfMV81MDEKKyAgICBzbXVsbCAgICAgICAgICAgdjI4LjRzLCB2MjguNGgsIFhGSVhfUF8wXzI5OCAgLyogdG1wNCA9IE1VTFRJUExZKHRtcDQsIEZJWF8wXzI5ODYzMTMzNik7ICovCisgICAgc211bGwgICAgICAgICAgIHYyOS40cywgdjI5LjRoLCBYRklYX1BfMl8wNTMgIC8qIHRtcDUgPSBNVUxUSVBMWSh0bXA1LCBGSVhfMl8wNTMxMTk4NjkpOyAqLworICAgIHNtdWxsICAgICAgICAgICB2MzAuNHMsIHYzMC40aCwgWEZJWF9QXzNfMDcyICAvKiB0bXA2ID0gTVVMVElQTFkodG1wNiwgRklYXzNfMDcyNzExMDI2KTsgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjMxLjRzLCB2MzEuNGgsIFhGSVhfUF8xXzUwMSAgLyogdG1wNyA9IE1VTFRJUExZKHRtcDcsIEZJWF8xXzUwMTMyMTExMCk7ICovCisKKyAgICBzbXVsbDIgICAgICAgICAgdjEyLjRzLCB2OC44aCwgWEZJWF9OXzBfODk5CisgICAgc211bGwyICAgICAgICAgIHYxMy40cywgdjkuOGgsIFhGSVhfTl8yXzU2MgorICAgIHNtdWxsMiAgICAgICAgICB2MTQuNHMsIHYxMC44aCwgWEZJWF9OXzFfOTYxCisgICAgc211bGwyICAgICAgICAgIHYxNS40cywgdjExLjhoLCBYRklYX05fMF8zOTAKKyAgICBzbXVsbCAgICAgICAgICAgdjguNHMsIHY4LjRoLCBYRklYX05fMF84OTkgICAgLyogejEgPSBNVUxUSVBMWSh6MSwgLUZJWF8wXzg5OTk3NjIyMyk7ICovCisgICAgc211bGwgICAgICAgICAgIHY5LjRzLCB2OS40aCwgWEZJWF9OXzJfNTYyICAgIC8qIHoyID0gTVVMVElQTFkoejIsIC1GSVhfMl81NjI5MTU0NDcpOyAqLworICAgIHNtdWxsICAgICAgICAgICB2MTAuNHMsIHYxMC40aCwgWEZJWF9OXzFfOTYxICAvKiB6MyA9IE1VTFRJUExZKHozLCAtRklYXzFfOTYxNTcwNTYwKTsgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjExLjRzLCB2MTEuNGgsIFhGSVhfTl8wXzM5MCAgLyogejQgPSBNVUxUSVBMWSh6NCwgLUZJWF8wXzM5MDE4MDY0NCk7ICovCisKKyAgICBhZGQgICAgICAgICAgICAgdjEwLjRzLCB2MTAuNHMsIHY0LjRzICAvKiB6MyArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTQuNHMsIHYxNC40cywgdjUuNHMKKyAgICBhZGQgICAgICAgICAgICAgdjExLjRzLCB2MTEuNHMsIHY0LjRzICAvKiB6NCArPSB6NSAqLworICAgIGFkZCAgICAgICAgICAgICB2MTUuNHMsIHYxNS40cywgdjUuNHMKKworICAgIGFkZCAgICAgICAgICAgICB2MjguNHMsIHYyOC40cywgdjguNHMgICAvKiB0bXA0ICs9IHoxICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC40cywgdjI0LjRzLCB2MTIuNHMKKyAgICBhZGQgICAgICAgICAgICAgdjI5LjRzLCB2MjkuNHMsIHY5LjRzICAgLyogdG1wNSArPSB6MiAqLworICAgIGFkZCAgICAgICAgICAgICB2MjUuNHMsIHYyNS40cywgdjEzLjRzCisgICAgYWRkICAgICAgICAgICAgIHYzMC40cywgdjMwLjRzLCB2MTAuNHMgIC8qIHRtcDYgKz0gejMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjRzLCB2MjYuNHMsIHYxNC40cworICAgIGFkZCAgICAgICAgICAgICB2MzEuNHMsIHYzMS40cywgdjExLjRzICAvKiB0bXA3ICs9IHo0ICovCisgICAgYWRkICAgICAgICAgICAgIHYyNy40cywgdjI3LjRzLCB2MTUuNHMKKworICAgIGFkZCAgICAgICAgICAgICB2MjguNHMsIHYyOC40cywgdjEwLjRzICAvKiB0bXA0ICs9IHozICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC40cywgdjI0LjRzLCB2MTQuNHMKKyAgICBhZGQgICAgICAgICAgICAgdjI5LjRzLCB2MjkuNHMsIHYxMS40cyAgLyogdG1wNSArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MjUuNHMsIHYyNS40cywgdjE1LjRzCisgICAgYWRkICAgICAgICAgICAgIHYzMC40cywgdjMwLjRzLCB2OS40cyAgIC8qIHRtcDYgKz0gejIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjRzLCB2MjYuNHMsIHYxMy40cworICAgIGFkZCAgICAgICAgICAgICB2MzEuNHMsIHYzMS40cywgdjguNHMgICAvKiB0bXA3ICs9IHoxICovCisgICAgYWRkICAgICAgICAgICAgIHYyNy40cywgdjI3LjRzLCB2MTIuNHMKKworICAgIHJzaHJuICAgICAgICAgICB2MjMuNGgsIHYyOC40cywgI0RFU0NBTEVfUDEKKyAgICByc2hybiAgICAgICAgICAgdjIxLjRoLCB2MjkuNHMsICNERVNDQUxFX1AxCisgICAgcnNocm4gICAgICAgICAgIHYxOS40aCwgdjMwLjRzLCAjREVTQ0FMRV9QMQorICAgIHJzaHJuICAgICAgICAgICB2MTcuNGgsIHYzMS40cywgI0RFU0NBTEVfUDEKKyAgICByc2hybjIgICAgICAgICAgdjIzLjhoLCB2MjQuNHMsICNERVNDQUxFX1AxICAvKiBkYXRhcHRyWzddID0gKERDVEVMRU0pREVTQ0FMRSh0bXA0ICsgejEgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjIxLjhoLCB2MjUuNHMsICNERVNDQUxFX1AxICAvKiBkYXRhcHRyWzVdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA1ICsgejIgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjE5LjhoLCB2MjYuNHMsICNERVNDQUxFX1AxICAvKiBkYXRhcHRyWzNdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA2ICsgejIgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjE3LjhoLCB2MjcuNHMsICNERVNDQUxFX1AxICAvKiBkYXRhcHRyWzFdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA3ICsgejEgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKworICAgIC8qIFRyYW5zcG9zZSAqLworICAgIHRyYW5zcG9zZV84eDggICB2MTYsIHYxNywgdjE4LCB2MTksIHYyMCwgdjIxLCB2MjIsIHYyMywgdjMxLCB2MiwgdjMsIHY0CisKKyAgICAvKiAxLUQgRkRDVCAqLworICAgIGFkZCAgICAgICAgICAgICB2MjQuOGgsIHYxNi44aCwgdjIzLjhoICAvKiB0bXAwID0gZGF0YXB0clswXSArIGRhdGFwdHJbN107ICovCisgICAgc3ViICAgICAgICAgICAgIHYzMS44aCwgdjE2LjhoLCB2MjMuOGggIC8qIHRtcDcgPSBkYXRhcHRyWzBdIC0gZGF0YXB0cls3XTsgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI1LjhoLCB2MTcuOGgsIHYyMi44aCAgLyogdG1wMSA9IGRhdGFwdHJbMV0gKyBkYXRhcHRyWzZdOyAqLworICAgIHN1YiAgICAgICAgICAgICB2MzAuOGgsIHYxNy44aCwgdjIyLjhoICAvKiB0bXA2ID0gZGF0YXB0clsxXSAtIGRhdGFwdHJbNl07ICovCisgICAgYWRkICAgICAgICAgICAgIHYyNi44aCwgdjE4LjhoLCB2MjEuOGggIC8qIHRtcDIgPSBkYXRhcHRyWzJdICsgZGF0YXB0cls1XTsgKi8KKyAgICBzdWIgICAgICAgICAgICAgdjI5LjhoLCB2MTguOGgsIHYyMS44aCAgLyogdG1wNSA9IGRhdGFwdHJbMl0gLSBkYXRhcHRyWzVdOyAqLworICAgIGFkZCAgICAgICAgICAgICB2MjcuOGgsIHYxOS44aCwgdjIwLjhoICAvKiB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07ICovCisgICAgc3ViICAgICAgICAgICAgIHYyOC44aCwgdjE5LjhoLCB2MjAuOGggIC8qIHRtcDQgPSBkYXRhcHRyWzNdIC0gZGF0YXB0cls0XTsgKi8KKworICAgIC8qIGV2ZW4gcGFydCAqLworICAgIGFkZCAgICAgICAgICAgICB2OC44aCwgdjI0LjhoLCB2MjcuOGggICAvKiB0bXAxMCA9IHRtcDAgKyB0bXAzOyAqLworICAgIHN1YiAgICAgICAgICAgICB2OS44aCwgdjI0LjhoLCB2MjcuOGggICAvKiB0bXAxMyA9IHRtcDAgLSB0bXAzOyAqLworICAgIGFkZCAgICAgICAgICAgICB2MTAuOGgsIHYyNS44aCwgdjI2LjhoICAvKiB0bXAxMSA9IHRtcDEgKyB0bXAyOyAqLworICAgIHN1YiAgICAgICAgICAgICB2MTEuOGgsIHYyNS44aCwgdjI2LjhoICAvKiB0bXAxMiA9IHRtcDEgLSB0bXAyOyAqLworCisgICAgYWRkICAgICAgICAgICAgIHYxNi44aCwgdjguOGgsIHYxMC44aCAgLyogdG1wMTAgKyB0bXAxMSAqLworICAgIHN1YiAgICAgICAgICAgICB2MjAuOGgsIHY4LjhoLCB2MTAuOGggIC8qIHRtcDEwIC0gdG1wMTEgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHYxMS44aCwgdjkuOGggIC8qIHRtcDEyICsgdG1wMTMgKi8KKworICAgIHNyc2hyICAgICAgICAgICB2MTYuOGgsIHYxNi44aCwgI1BBU1MxX0JJVFMgIC8qIGRhdGFwdHJbMF0gPSAoRENURUxFTSlERVNDQUxFKHRtcDEwICsgdG1wMTEsIFBBU1MxX0JJVFMpOyAqLworICAgIHNyc2hyICAgICAgICAgICB2MjAuOGgsIHYyMC44aCwgI1BBU1MxX0JJVFMgIC8qIGRhdGFwdHJbNF0gPSAoRENURUxFTSlERVNDQUxFKHRtcDEwIC0gdG1wMTEsIFBBU1MxX0JJVFMpOyAqLworCisgICAgc211bGwyICAgICAgICAgIHYyNC40cywgdjE4LjhoLCBYRklYX1BfMF81NDEgIC8qIHoxIGhpID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgWEZJWF9QXzBfNTQxKTsgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjE4LjRzLCB2MTguNGgsIFhGSVhfUF8wXzU0MSAgLyogejEgbG8gPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBYRklYX1BfMF81NDEpOyAqLworICAgIG1vdiAgICAgICAgICAgICB2MjIuMTZiLCB2MTguMTZiCisgICAgbW92ICAgICAgICAgICAgIHYyNS4xNmIsIHYyNC4xNmIKKworICAgIHNtbGFsICAgICAgICAgICB2MTguNHMsIHY5LjRoLCBYRklYX1BfMF83NjUgICAvKiBsbyB6MSArIE1VTFRJUExZKHRtcDEzLCBYRklYX1BfMF83NjUpICovCisgICAgc21sYWwyICAgICAgICAgIHYyNC40cywgdjkuOGgsIFhGSVhfUF8wXzc2NSAgIC8qIGhpIHoxICsgTVVMVElQTFkodG1wMTMsIFhGSVhfUF8wXzc2NSkgKi8KKyAgICBzbWxhbCAgICAgICAgICAgdjIyLjRzLCB2MTEuNGgsIFhGSVhfTl8xXzg0NyAgLyogbG8gejEgKyBNVUxUSVBMWSh0bXAxMiwgWEZJWF9OXzFfODQ3KSAqLworICAgIHNtbGFsMiAgICAgICAgICB2MjUuNHMsIHYxMS44aCwgWEZJWF9OXzFfODQ3ICAvKiBoaSB6MSArIE1VTFRJUExZKHRtcDEyLCBYRklYX05fMV84NDcpICovCisKKyAgICByc2hybiAgICAgICAgICAgdjE4LjRoLCB2MTguNHMsICNERVNDQUxFX1AyCisgICAgcnNocm4gICAgICAgICAgIHYyMi40aCwgdjIyLjRzLCAjREVTQ0FMRV9QMgorICAgIHJzaHJuMiAgICAgICAgICB2MTguOGgsIHYyNC40cywgI0RFU0NBTEVfUDIgIC8qIGRhdGFwdHJbMl0gPSAoRENURUxFTSlERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTMsIFhGSVhfUF8wXzc2NSksIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7ICovCisgICAgcnNocm4yICAgICAgICAgIHYyMi44aCwgdjI1LjRzLCAjREVTQ0FMRV9QMiAgLyogZGF0YXB0cls2XSA9IChEQ1RFTEVNKURFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMiwgWEZJWF9OXzFfODQ3KSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisgICAgYWRkICAgICAgICAgICAgIHY4LjhoLCB2MjguOGgsIHYzMS44aCAgIC8qIHoxID0gdG1wNCArIHRtcDc7ICovCisgICAgYWRkICAgICAgICAgICAgIHY5LjhoLCB2MjkuOGgsIHYzMC44aCAgIC8qIHoyID0gdG1wNSArIHRtcDY7ICovCisgICAgYWRkICAgICAgICAgICAgIHYxMC44aCwgdjI4LjhoLCB2MzAuOGggIC8qIHozID0gdG1wNCArIHRtcDY7ICovCisgICAgYWRkICAgICAgICAgICAgIHYxMS44aCwgdjI5LjhoLCB2MzEuOGggIC8qIHo0ID0gdG1wNSArIHRtcDc7ICovCisKKyAgICBzbXVsbCAgICAgICAgICAgdjQuNHMsIHYxMC40aCwgWEZJWF9QXzFfMTc1ICAvKiB6NSBsbyA9IHozIGxvICogWEZJWF9QXzFfMTc1ICovCisgICAgc211bGwyICAgICAgICAgIHY1LjRzLCB2MTAuOGgsIFhGSVhfUF8xXzE3NQorICAgIHNtbGFsICAgICAgICAgICB2NC40cywgdjExLjRoLCBYRklYX1BfMV8xNzUgIC8qIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgKi8KKyAgICBzbWxhbDIgICAgICAgICAgdjUuNHMsIHYxMS44aCwgWEZJWF9QXzFfMTc1CisKKyAgICBzbXVsbDIgICAgICAgICAgdjI0LjRzLCB2MjguOGgsIFhGSVhfUF8wXzI5OAorICAgIHNtdWxsMiAgICAgICAgICB2MjUuNHMsIHYyOS44aCwgWEZJWF9QXzJfMDUzCisgICAgc211bGwyICAgICAgICAgIHYyNi40cywgdjMwLjhoLCBYRklYX1BfM18wNzIKKyAgICBzbXVsbDIgICAgICAgICAgdjI3LjRzLCB2MzEuOGgsIFhGSVhfUF8xXzUwMQorICAgIHNtdWxsICAgICAgICAgICB2MjguNHMsIHYyOC40aCwgWEZJWF9QXzBfMjk4ICAvKiB0bXA0ID0gTVVMVElQTFkodG1wNCwgRklYXzBfMjk4NjMxMzM2KTsgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjI5LjRzLCB2MjkuNGgsIFhGSVhfUF8yXzA1MyAgLyogdG1wNSA9IE1VTFRJUExZKHRtcDUsIEZJWF8yXzA1MzExOTg2OSk7ICovCisgICAgc211bGwgICAgICAgICAgIHYzMC40cywgdjMwLjRoLCBYRklYX1BfM18wNzIgIC8qIHRtcDYgPSBNVUxUSVBMWSh0bXA2LCBGSVhfM18wNzI3MTEwMjYpOyAqLworICAgIHNtdWxsICAgICAgICAgICB2MzEuNHMsIHYzMS40aCwgWEZJWF9QXzFfNTAxICAvKiB0bXA3ID0gTVVMVElQTFkodG1wNywgRklYXzFfNTAxMzIxMTEwKTsgKi8KKworICAgIHNtdWxsMiAgICAgICAgICB2MTIuNHMsIHY4LjhoLCBYRklYX05fMF84OTkKKyAgICBzbXVsbDIgICAgICAgICAgdjEzLjRzLCB2OS44aCwgWEZJWF9OXzJfNTYyCisgICAgc211bGwyICAgICAgICAgIHYxNC40cywgdjEwLjhoLCBYRklYX05fMV85NjEKKyAgICBzbXVsbDIgICAgICAgICAgdjE1LjRzLCB2MTEuOGgsIFhGSVhfTl8wXzM5MAorICAgIHNtdWxsICAgICAgICAgICB2OC40cywgdjguNGgsIFhGSVhfTl8wXzg5OSAgICAvKiB6MSA9IE1VTFRJUExZKHoxLCAtRklYXzBfODk5OTc2MjIzKTsgKi8KKyAgICBzbXVsbCAgICAgICAgICAgdjkuNHMsIHY5LjRoLCBYRklYX05fMl81NjIgICAgLyogejIgPSBNVUxUSVBMWSh6MiwgLUZJWF8yXzU2MjkxNTQ0Nyk7ICovCisgICAgc211bGwgICAgICAgICAgIHYxMC40cywgdjEwLjRoLCBYRklYX05fMV85NjEgIC8qIHozID0gTVVMVElQTFkoejMsIC1GSVhfMV85NjE1NzA1NjApOyAqLworICAgIHNtdWxsICAgICAgICAgICB2MTEuNHMsIHYxMS40aCwgWEZJWF9OXzBfMzkwICAvKiB6NCA9IE1VTFRJUExZKHo0LCAtRklYXzBfMzkwMTgwNjQ0KTsgKi8KKworICAgIGFkZCAgICAgICAgICAgICB2MTAuNHMsIHYxMC40cywgdjQuNHMKKyAgICBhZGQgICAgICAgICAgICAgdjE0LjRzLCB2MTQuNHMsIHY1LjRzCisgICAgYWRkICAgICAgICAgICAgIHYxMS40cywgdjExLjRzLCB2NC40cworICAgIGFkZCAgICAgICAgICAgICB2MTUuNHMsIHYxNS40cywgdjUuNHMKKworICAgIGFkZCAgICAgICAgICAgICB2MjguNHMsIHYyOC40cywgdjguNHMgICAvKiB0bXA0ICs9IHoxICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC40cywgdjI0LjRzLCB2MTIuNHMKKyAgICBhZGQgICAgICAgICAgICAgdjI5LjRzLCB2MjkuNHMsIHY5LjRzICAgLyogdG1wNSArPSB6MiAqLworICAgIGFkZCAgICAgICAgICAgICB2MjUuNHMsIHYyNS40cywgdjEzLjRzCisgICAgYWRkICAgICAgICAgICAgIHYzMC40cywgdjMwLjRzLCB2MTAuNHMgIC8qIHRtcDYgKz0gejMgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjRzLCB2MjYuNHMsIHYxNC40cworICAgIGFkZCAgICAgICAgICAgICB2MzEuNHMsIHYzMS40cywgdjExLjRzICAvKiB0bXA3ICs9IHo0ICovCisgICAgYWRkICAgICAgICAgICAgIHYyNy40cywgdjI3LjRzLCB2MTUuNHMKKworICAgIGFkZCAgICAgICAgICAgICB2MjguNHMsIHYyOC40cywgdjEwLjRzICAvKiB0bXA0ICs9IHozICovCisgICAgYWRkICAgICAgICAgICAgIHYyNC40cywgdjI0LjRzLCB2MTQuNHMKKyAgICBhZGQgICAgICAgICAgICAgdjI5LjRzLCB2MjkuNHMsIHYxMS40cyAgLyogdG1wNSArPSB6NCAqLworICAgIGFkZCAgICAgICAgICAgICB2MjUuNHMsIHYyNS40cywgdjE1LjRzCisgICAgYWRkICAgICAgICAgICAgIHYzMC40cywgdjMwLjRzLCB2OS40cyAgIC8qIHRtcDYgKz0gejIgKi8KKyAgICBhZGQgICAgICAgICAgICAgdjI2LjRzLCB2MjYuNHMsIHYxMy40cworICAgIGFkZCAgICAgICAgICAgICB2MzEuNHMsIHYzMS40cywgdjguNHMgICAvKiB0bXA3ICs9IHoxICovCisgICAgYWRkICAgICAgICAgICAgIHYyNy40cywgdjI3LjRzLCB2MTIuNHMKKworICAgIHJzaHJuICAgICAgICAgICB2MjMuNGgsIHYyOC40cywgI0RFU0NBTEVfUDIKKyAgICByc2hybiAgICAgICAgICAgdjIxLjRoLCB2MjkuNHMsICNERVNDQUxFX1AyCisgICAgcnNocm4gICAgICAgICAgIHYxOS40aCwgdjMwLjRzLCAjREVTQ0FMRV9QMgorICAgIHJzaHJuICAgICAgICAgICB2MTcuNGgsIHYzMS40cywgI0RFU0NBTEVfUDIKKyAgICByc2hybjIgICAgICAgICAgdjIzLjhoLCB2MjQuNHMsICNERVNDQUxFX1AyICAvKiBkYXRhcHRyWzddID0gKERDVEVMRU0pREVTQ0FMRSh0bXA0ICsgejEgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjIxLjhoLCB2MjUuNHMsICNERVNDQUxFX1AyICAvKiBkYXRhcHRyWzVdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA1ICsgejIgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjE5LjhoLCB2MjYuNHMsICNERVNDQUxFX1AyICAvKiBkYXRhcHRyWzNdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA2ICsgejIgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKyAgICByc2hybjIgICAgICAgICAgdjE3LjhoLCB2MjcuNHMsICNERVNDQUxFX1AyICAvKiBkYXRhcHRyWzFdID0gKERDVEVMRU0pREVTQ0FMRSh0bXA3ICsgejEgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsgKi8KKworICAgIC8qIHN0b3JlIHJlc3VsdHMgKi8KKyAgICBzdDEgICAgICAgICAgICAge3YxNi44aCwgdjE3LjhoLCB2MTguOGgsIHYxOS44aH0sIFtEQVRBXSwgNjQKKyAgICBzdDEgICAgICAgICAgICAge3YyMC44aCwgdjIxLjhoLCB2MjIuOGgsIHYyMy44aH0sIFtEQVRBXQorCisgICAgLyogUmVzdG9yZSBORU9OIHJlZ2lzdGVycyAqLworICAgIGxkMSAgICAgICAgICAgICB7djguOGIsIHY5LjhiLCB2MTAuOGIsIHYxMS44Yn0sIFtzcF0sIDMyCisgICAgbGQxICAgICAgICAgICAgIHt2MTIuOGIsIHYxMy44YiwgdjE0LjhiLCB2MTUuOGJ9LCBbc3BdLCAzMgorCisgICAgYnIgICAgICAgICAgICAgIHgzMAorCisgICAgLnVucmVxICAgICAgICAgIERBVEEKKyAgICAudW5yZXEgICAgICAgICAgVE1QCisKKyN1bmRlZiBYRklYX1BfMF8yOTgKKyN1bmRlZiBYRklYX05fMF8zOTAKKyN1bmRlZiBYRklYX1BfMF81NDEKKyN1bmRlZiBYRklYX1BfMF83NjUKKyN1bmRlZiBYRklYX05fMF84OTkKKyN1bmRlZiBYRklYX1BfMV8xNzUKKyN1bmRlZiBYRklYX1BfMV81MDEKKyN1bmRlZiBYRklYX05fMV84NDcKKyN1bmRlZiBYRklYX05fMV85NjEKKyN1bmRlZiBYRklYX1BfMl8wNTMKKyN1bmRlZiBYRklYX05fMl81NjIKKyN1bmRlZiBYRklYX1BfM18wNzIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBqc2ltZF9mZGN0X2lmYXN0X25lb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YKKyAqIHRoZSBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIEl0IHVzZXMgdGhlIHNhbWUgY2FsY3VsYXRpb25zCisgKiBhbmQgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSBvdXRwdXQgYXMgSUpHJ3Mgb3JpZ2luYWwgJ2pwZWdfZmRjdF9pZmFzdCcKKyAqIGZ1bmN0aW9uIGZyb20gamZkY3Rmc3QuYworICoKKyAqIFRPRE86IGNhbiBiZSBjb21iaW5lZCB3aXRoICdqc2ltZF9jb252c2FtcF9uZW9uJyB0byBnZXQKKyAqICAgICAgIHJpZCBvZiBhIGJ1bmNoIG9mIFZMRDEuMTYgaW5zdHJ1Y3Rpb25zCisgKi8KKworI3VuZGVmIFhGSVhfMF81NDExOTYxMDAKKyNkZWZpbmUgWEZJWF8wXzM4MjY4MzQzMyAgdjAuaFswXQorI2RlZmluZSBYRklYXzBfNTQxMTk2MTAwICB2MC5oWzFdCisjZGVmaW5lIFhGSVhfMF83MDcxMDY3ODEgIHYwLmhbMl0KKyNkZWZpbmUgWEZJWF8xXzMwNjU2Mjk2NSAgdjAuaFszXQorCisuYmFsaWduIDE2CitManNpbWRfZmRjdF9pZmFzdF9uZW9uX2NvbnN0czoKKyAgLnNob3J0ICg5OCAqIDEyOCkgICAgICAgICAgICAgICAvKiBYRklYXzBfMzgyNjgzNDMzICovCisgIC5zaG9ydCAoMTM5ICogMTI4KSAgICAgICAgICAgICAgLyogWEZJWF8wXzU0MTE5NjEwMCAqLworICAuc2hvcnQgKDE4MSAqIDEyOCkgICAgICAgICAgICAgIC8qIFhGSVhfMF83MDcxMDY3ODEgKi8KKyAgLnNob3J0ICgzMzQgKiAxMjggLSAyNTYgKiAxMjgpICAvKiBYRklYXzFfMzA2NTYyOTY1ICovCisKK2FzbV9mdW5jdGlvbiBqc2ltZF9mZGN0X2lmYXN0X25lb24KKworICAgIERBVEEgICAgICAgICAgICAucmVxIHgwCisgICAgVE1QICAgICAgICAgICAgIC5yZXEgeDkKKworICAgIC8qIExvYWQgY29uc3RhbnRzICovCisgICAgYWRyICAgICAgICAgICAgIFRNUCwgTGpzaW1kX2ZkY3RfaWZhc3RfbmVvbl9jb25zdHMKKyAgICBsZDEgICAgICAgICAgICAge3YwLjRofSwgW1RNUF0KKworICAgIC8qIExvYWQgYWxsIERBVEEgaW50byBORU9OIHJlZ2lzdGVycyB3aXRoIHRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbjoKKyAgICAgKiAgICAgICAwIDEgMiAzIHwgNCA1IDYgNworICAgICAqICAgICAgLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICogICAwIHwgZDE2ICAgICB8IGQxNyAgICB8IHYwLjhoCisgICAgICogICAxIHwgZDE4ICAgICB8IGQxOSAgICB8IHE5CisgICAgICogICAyIHwgZDIwICAgICB8IGQyMSAgICB8IHExMAorICAgICAqICAgMyB8IGQyMiAgICAgfCBkMjMgICAgfCBxMTEKKyAgICAgKiAgIDQgfCBkMjQgICAgIHwgZDI1ICAgIHwgcTEyCisgICAgICogICA1IHwgZDI2ICAgICB8IGQyNyAgICB8IHExMworICAgICAqICAgNiB8IGQyOCAgICAgfCBkMjkgICAgfCBxMTQKKyAgICAgKiAgIDcgfCBkMzAgICAgIHwgZDMxICAgIHwgcTE1CisgICAgICovCisKKyAgICBsZDEgICAgICAgICAgICAge3YxNi44aCwgdjE3LjhoLCB2MTguOGgsIHYxOS44aH0sIFtEQVRBXSwgNjQKKyAgICBsZDEgICAgICAgICAgICAge3YyMC44aCwgdjIxLjhoLCB2MjIuOGgsIHYyMy44aH0sIFtEQVRBXQorICAgIG1vdiAgICAgICAgICAgICBUTVAsICMyCisgICAgc3ViICAgICAgICAgICAgIERBVEEsIERBVEEsICM2NAorMToKKyAgICAvKiBUcmFuc3Bvc2UgKi8KKyAgICB0cmFuc3Bvc2VfOHg4ICAgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYxLCB2MiwgdjMsIHY0CisgICAgc3VicyAgICAgICAgICAgIFRNUCwgVE1QLCAjMQorICAgIC8qIDEtRCBGRENUICovCisgICAgYWRkICAgICAgICAgICAgIHY0LjhoLCB2MTkuOGgsIHYyMC44aAorICAgIHN1YiAgICAgICAgICAgICB2MjAuOGgsIHYxOS44aCwgdjIwLjhoCisgICAgc3ViICAgICAgICAgICAgIHYyOC44aCwgdjE4LjhoLCB2MjEuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE4LjhoLCB2MTguOGgsIHYyMS44aAorICAgIHN1YiAgICAgICAgICAgICB2MjkuOGgsIHYxNy44aCwgdjIyLjhoCisgICAgYWRkICAgICAgICAgICAgIHYxNy44aCwgdjE3LjhoLCB2MjIuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjIxLjhoLCB2MTYuOGgsIHYyMy44aAorICAgIGFkZCAgICAgICAgICAgICB2MTYuOGgsIHYxNi44aCwgdjIzLjhoCisgICAgc3ViICAgICAgICAgICAgIHY2LjhoLCB2MTcuOGgsIHYxOC44aAorICAgIHN1YiAgICAgICAgICAgICB2Ny44aCwgdjE2LjhoLCB2NC44aAorICAgIGFkZCAgICAgICAgICAgICB2NS44aCwgdjE3LjhoLCB2MTguOGgKKyAgICBhZGQgICAgICAgICAgICAgdjYuOGgsIHY2LjhoLCB2Ny44aAorICAgIGFkZCAgICAgICAgICAgICB2NC44aCwgdjE2LjhoLCB2NC44aAorICAgIHNxZG11bGggICAgICAgICB2Ni44aCwgdjYuOGgsIFhGSVhfMF83MDcxMDY3ODEKKyAgICBhZGQgICAgICAgICAgICAgdjE5LjhoLCB2MjAuOGgsIHYyOC44aAorICAgIGFkZCAgICAgICAgICAgICB2MTYuOGgsIHY0LjhoLCB2NS44aAorICAgIHN1YiAgICAgICAgICAgICB2MjAuOGgsIHY0LjhoLCB2NS44aAorICAgIGFkZCAgICAgICAgICAgICB2NS44aCwgdjI4LjhoLCB2MjkuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjI5LjhoLCB2MjkuOGgsIHYyMS44aAorICAgIHNxZG11bGggICAgICAgICB2NS44aCwgdjUuOGgsIFhGSVhfMF83MDcxMDY3ODEKKyAgICBzdWIgICAgICAgICAgICAgdjI4LjhoLCB2MTkuOGgsIHYyOS44aAorICAgIGFkZCAgICAgICAgICAgICB2MTguOGgsIHY3LjhoLCB2Ni44aAorICAgIHNxZG11bGggICAgICAgICB2MjguOGgsIHYyOC44aCwgWEZJWF8wXzM4MjY4MzQzMworICAgIHN1YiAgICAgICAgICAgICB2MjIuOGgsIHY3LjhoLCB2Ni44aAorICAgIHNxZG11bGggICAgICAgICB2MTkuOGgsIHYxOS44aCwgWEZJWF8wXzU0MTE5NjEwMAorICAgIHNxZG11bGggICAgICAgICB2Ny44aCwgdjI5LjhoLCBYRklYXzFfMzA2NTYyOTY1CisgICAgYWRkICAgICAgICAgICAgIHY2LjhoLCB2MjEuOGgsIHY1LjhoCisgICAgc3ViICAgICAgICAgICAgIHY1LjhoLCB2MjEuOGgsIHY1LjhoCisgICAgYWRkICAgICAgICAgICAgIHYyOS44aCwgdjI5LjhoLCB2MjguOGgKKyAgICBhZGQgICAgICAgICAgICAgdjE5LjhoLCB2MTkuOGgsIHYyOC44aAorICAgIGFkZCAgICAgICAgICAgICB2MjkuOGgsIHYyOS44aCwgdjcuOGgKKyAgICBhZGQgICAgICAgICAgICAgdjIxLjhoLCB2NS44aCwgdjE5LjhoCisgICAgc3ViICAgICAgICAgICAgIHYxOS44aCwgdjUuOGgsIHYxOS44aAorICAgIGFkZCAgICAgICAgICAgICB2MTcuOGgsIHY2LjhoLCB2MjkuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjIzLjhoLCB2Ni44aCwgdjI5LjhoCisKKyAgICBiLm5lICAgICAgICAgICAgMWIKKworICAgIC8qIHN0b3JlIHJlc3VsdHMgKi8KKyAgICBzdDEgICAgICAgICAgICAge3YxNi44aCwgdjE3LjhoLCB2MTguOGgsIHYxOS44aH0sIFtEQVRBXSwgNjQKKyAgICBzdDEgICAgICAgICAgICAge3YyMC44aCwgdjIxLjhoLCB2MjIuOGgsIHYyMy44aH0sIFtEQVRBXQorCisgICAgYnIgICAgICAgICAgICAgIHgzMAorCisgICAgLnVucmVxICAgICAgICAgIERBVEEKKyAgICAudW5yZXEgICAgICAgICAgVE1QCisjdW5kZWYgWEZJWF8wXzM4MjY4MzQzMworI3VuZGVmIFhGSVhfMF81NDExOTYxMDAKKyN1bmRlZiBYRklYXzBfNzA3MTA2NzgxCisjdW5kZWYgWEZJWF8xXzMwNjU2Mjk2NQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEdMT0JBTCh2b2lkKQorICoganNpbWRfcXVhbnRpemVfbmVvbihKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywKKyAqICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKTsKKyAqCisgKi8KK2FzbV9mdW5jdGlvbiBqc2ltZF9xdWFudGl6ZV9uZW9uCisKKyAgICBDT0VGX0JMT0NLICAgICAgLnJlcSB4MAorICAgIERJVklTT1JTICAgICAgICAucmVxIHgxCisgICAgV09SS1NQQUNFICAgICAgIC5yZXEgeDIKKworICAgIFJFQ0lQUk9DQUwgICAgICAucmVxIERJVklTT1JTCisgICAgQ09SUkVDVElPTiAgICAgIC5yZXEgeDkKKyAgICBTSElGVCAgICAgICAgICAgLnJlcSB4MTAKKyAgICBMT09QX0NPVU5UICAgICAgLnJlcSB4MTEKKworICAgIG1vdiAgICAgICAgICAgICBMT09QX0NPVU5ULCAjMgorICAgIGFkZCAgICAgICAgICAgICBDT1JSRUNUSU9OLCBESVZJU09SUywgIyg2NCAqIDIpCisgICAgYWRkICAgICAgICAgICAgIFNISUZULCBESVZJU09SUywgIyg2NCAqIDYpCisxOgorICAgIHN1YnMgICAgICAgICAgICBMT09QX0NPVU5ULCBMT09QX0NPVU5ULCAjMQorICAgIGxkMSAgICAgICAgICAgICB7djAuOGgsIHYxLjhoLCB2Mi44aCwgdjMuOGh9LCBbV09SS1NQQUNFXSwgNjQKKyAgICBsZDEgICAgICAgICAgICAge3Y0LjhoLCB2NS44aCwgdjYuOGgsIHY3LjhofSwgW0NPUlJFQ1RJT05dLCA2NAorICAgIGFicyAgICAgICAgICAgICB2MjAuOGgsIHYwLjhoCisgICAgYWJzICAgICAgICAgICAgIHYyMS44aCwgdjEuOGgKKyAgICBhYnMgICAgICAgICAgICAgdjIyLjhoLCB2Mi44aAorICAgIGFicyAgICAgICAgICAgICB2MjMuOGgsIHYzLjhoCisgICAgbGQxICAgICAgICAgICAgIHt2MjguOGgsIHYyOS44aCwgdjMwLjhoLCB2MzEuOGh9LCBbUkVDSVBST0NBTF0sIDY0CisgICAgYWRkICAgICAgICAgICAgIHYyMC44aCwgdjIwLjhoLCB2NC44aCAgLyogYWRkIGNvcnJlY3Rpb24gKi8KKyAgICBhZGQgICAgICAgICAgICAgdjIxLjhoLCB2MjEuOGgsIHY1LjhoCisgICAgYWRkICAgICAgICAgICAgIHYyMi44aCwgdjIyLjhoLCB2Ni44aAorICAgIGFkZCAgICAgICAgICAgICB2MjMuOGgsIHYyMy44aCwgdjcuOGgKKyAgICB1bXVsbCAgICAgICAgICAgdjQuNHMsIHYyMC40aCwgdjI4LjRoICAvKiBtdWx0aXBseSBieSByZWNpcHJvY2FsICovCisgICAgdW11bGwyICAgICAgICAgIHYxNi40cywgdjIwLjhoLCB2MjguOGgKKyAgICB1bXVsbCAgICAgICAgICAgdjUuNHMsIHYyMS40aCwgdjI5LjRoCisgICAgdW11bGwyICAgICAgICAgIHYxNy40cywgdjIxLjhoLCB2MjkuOGgKKyAgICB1bXVsbCAgICAgICAgICAgdjYuNHMsIHYyMi40aCwgdjMwLjRoICAvKiBtdWx0aXBseSBieSByZWNpcHJvY2FsICovCisgICAgdW11bGwyICAgICAgICAgIHYxOC40cywgdjIyLjhoLCB2MzAuOGgKKyAgICB1bXVsbCAgICAgICAgICAgdjcuNHMsIHYyMy40aCwgdjMxLjRoCisgICAgdW11bGwyICAgICAgICAgIHYxOS40cywgdjIzLjhoLCB2MzEuOGgKKyAgICBsZDEgICAgICAgICAgICAge3YyNC44aCwgdjI1LjhoLCB2MjYuOGgsIHYyNy44aH0sIFtTSElGVF0sIDY0CisgICAgc2hybiAgICAgICAgICAgIHY0LjRoLCB2NC40cywgIzE2CisgICAgc2hybiAgICAgICAgICAgIHY1LjRoLCB2NS40cywgIzE2CisgICAgc2hybiAgICAgICAgICAgIHY2LjRoLCB2Ni40cywgIzE2CisgICAgc2hybiAgICAgICAgICAgIHY3LjRoLCB2Ny40cywgIzE2CisgICAgc2hybjIgICAgICAgICAgIHY0LjhoLCB2MTYuNHMsICMxNgorICAgIHNocm4yICAgICAgICAgICB2NS44aCwgdjE3LjRzLCAjMTYKKyAgICBzaHJuMiAgICAgICAgICAgdjYuOGgsIHYxOC40cywgIzE2CisgICAgc2hybjIgICAgICAgICAgIHY3LjhoLCB2MTkuNHMsICMxNgorICAgIG5lZyAgICAgICAgICAgICB2MjQuOGgsIHYyNC44aAorICAgIG5lZyAgICAgICAgICAgICB2MjUuOGgsIHYyNS44aAorICAgIG5lZyAgICAgICAgICAgICB2MjYuOGgsIHYyNi44aAorICAgIG5lZyAgICAgICAgICAgICB2MjcuOGgsIHYyNy44aAorICAgIHNzaHIgICAgICAgICAgICB2MC44aCwgdjAuOGgsICMxNSAgLyogZXh0cmFjdCBzaWduICovCisgICAgc3NociAgICAgICAgICAgIHYxLjhoLCB2MS44aCwgIzE1CisgICAgc3NociAgICAgICAgICAgIHYyLjhoLCB2Mi44aCwgIzE1CisgICAgc3NociAgICAgICAgICAgIHYzLjhoLCB2My44aCwgIzE1CisgICAgdXNobCAgICAgICAgICAgIHY0LjhoLCB2NC44aCwgdjI0LjhoICAvKiBzaGlmdCAqLworICAgIHVzaGwgICAgICAgICAgICB2NS44aCwgdjUuOGgsIHYyNS44aAorICAgIHVzaGwgICAgICAgICAgICB2Ni44aCwgdjYuOGgsIHYyNi44aAorICAgIHVzaGwgICAgICAgICAgICB2Ny44aCwgdjcuOGgsIHYyNy44aAorCisgICAgZW9yICAgICAgICAgICAgIHY0LjE2YiwgdjQuMTZiLCB2MC4xNmIgIC8qIHJlc3RvcmUgc2lnbiAqLworICAgIGVvciAgICAgICAgICAgICB2NS4xNmIsIHY1LjE2YiwgdjEuMTZiCisgICAgZW9yICAgICAgICAgICAgIHY2LjE2YiwgdjYuMTZiLCB2Mi4xNmIKKyAgICBlb3IgICAgICAgICAgICAgdjcuMTZiLCB2Ny4xNmIsIHYzLjE2YgorICAgIHN1YiAgICAgICAgICAgICB2NC44aCwgdjQuOGgsIHYwLjhoCisgICAgc3ViICAgICAgICAgICAgIHY1LjhoLCB2NS44aCwgdjEuOGgKKyAgICBzdWIgICAgICAgICAgICAgdjYuOGgsIHY2LjhoLCB2Mi44aAorICAgIHN1YiAgICAgICAgICAgICB2Ny44aCwgdjcuOGgsIHYzLjhoCisgICAgc3QxICAgICAgICAgICAgIHt2NC44aCwgdjUuOGgsIHY2LjhoLCB2Ny44aH0sIFtDT0VGX0JMT0NLXSwgNjQKKworICAgIGIubmUgICAgICAgICAgICAxYgorCisgICAgYnIgICAgICAgICAgICAgIHgzMCAgLyogcmV0dXJuICovCisKKyAgICAudW5yZXEgICAgICAgICAgQ09FRl9CTE9DSworICAgIC51bnJlcSAgICAgICAgICBESVZJU09SUworICAgIC51bnJlcSAgICAgICAgICBXT1JLU1BBQ0UKKyAgICAudW5yZXEgICAgICAgICAgUkVDSVBST0NBTAorICAgIC51bnJlcSAgICAgICAgICBDT1JSRUNUSU9OCisgICAgLnVucmVxICAgICAgICAgIFNISUZUCisgICAgLnVucmVxICAgICAgICAgIExPT1BfQ09VTlQKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCisgKiBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwKKyAqIHdpdGhvdXQgc21vb3RoaW5nLgorICoKKyAqIEdMT0JBTCh2b2lkKQorICoganNpbWRfaDJ2MV9kb3duc2FtcGxlX25lb24oSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworICovCisKKy5iYWxpZ24gMTYKK0xqc2ltZF9oMl9kb3duc2FtcGxlX25lb25fY29uc3RzOgorICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYgIC8qIGRpZmYgMCAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEUgIC8qIGRpZmYgMSAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEQsIDB4MEQgIC8qIGRpZmYgMiAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMgIC8qIGRpZmYgMyAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIgIC8qIGRpZmYgNCAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEgIC8qIGRpZmYgNSAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDksIDB4MDksIDB4MDksIDB4MDksIDB4MDksIDB4MDksIDB4MDkgIC8qIGRpZmYgNiAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDggIC8qIGRpZmYgNyAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCBcCisgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcgIC8qIGRpZmYgOCAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA2LCBcCisgICAgICAgIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDYgIC8qIGRpZmYgOSAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA1LCAweDA1LCBcCisgICAgICAgIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUgIC8qIGRpZmYgMTAgKi8KKyAgLmJ5dGUgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgXAorICAgICAgICAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0ICAvKiBkaWZmIDExICovCisgIC5ieXRlIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIFwKKyAgICAgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMyAgLyogZGlmZiAxMiAqLworICAuYnl0ZSAweDAwLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCBcCisgICAgICAgIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIgIC8qIGRpZmYgMTMgKi8KKyAgLmJ5dGUgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgXAorICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxICAvKiBkaWZmIDE0ICovCisgIC5ieXRlIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIFwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAgLyogZGlmZiAxNSAqLworCithc21fZnVuY3Rpb24ganNpbWRfaDJ2MV9kb3duc2FtcGxlX25lb24KKyAgICBJTUFHRV9XSURUSCAgICAgLnJlcSB4MAorICAgIE1BWF9WX1NBTVAgICAgICAucmVxIHgxCisgICAgVl9TQU1QICAgICAgICAgIC5yZXEgeDIKKyAgICBCTE9DS19XSURUSCAgICAgLnJlcSB4MworICAgIElOUFVUX0RBVEEgICAgICAucmVxIHg0CisgICAgT1VUUFVUX0RBVEEgICAgIC5yZXEgeDUKKyAgICBPVVRQVFIgICAgICAgICAgLnJlcSB4OQorICAgIElOUFRSICAgICAgICAgICAucmVxIHgxMAorICAgIFRNUDEgICAgICAgICAgICAucmVxIHgxMQorICAgIFRNUDIgICAgICAgICAgICAucmVxIHgxMgorICAgIFRNUDMgICAgICAgICAgICAucmVxIHgxMworICAgIFRNUERVUCAgICAgICAgICAucmVxIHcxNQorCisgICAgbW92ICAgICAgICAgICAgIFRNUERVUCwgIzB4MTAwMDAKKyAgICBsc2wgICAgICAgICAgICAgVE1QMiwgQkxPQ0tfV0lEVEgsICM0CisgICAgc3ViICAgICAgICAgICAgIFRNUDIsIFRNUDIsIElNQUdFX1dJRFRICisgICAgYWRyICAgICAgICAgICAgIFRNUDMsIExqc2ltZF9oMl9kb3duc2FtcGxlX25lb25fY29uc3RzCisgICAgYWRkICAgICAgICAgICAgIFRNUDMsIFRNUDMsIFRNUDIsIGxzbCAjNAorICAgIGR1cCAgICAgICAgICAgICB2MTYuNHMsIFRNUERVUAorICAgIGxkMSAgICAgICAgICAgICB7djE4LjE2Yn0sIFtUTVAzXQorCisxOiAgLyogcm93IGxvb3AgKi8KKyAgICBsZHIgICAgICAgICAgICAgSU5QVFIsIFtJTlBVVF9EQVRBXSwgIzgKKyAgICBsZHIgICAgICAgICAgICAgT1VUUFRSLCBbT1VUUFVUX0RBVEFdLCAjOAorICAgIHN1YnMgICAgICAgICAgICBUTVAxLCBCTE9DS19XSURUSCwgIzEKKyAgICBiLmVxICAgICAgICAgICAgM2YKKzI6ICAvKiBjb2x1bW5zICovCisgICAgbGQxICAgICAgICAgICAgIHt2MC4xNmJ9LCBbSU5QVFJdLCAjMTYKKyAgICBtb3YgICAgICAgICAgICAgdjQuMTZiLCB2MTYuMTZiCisgICAgc3VicyAgICAgICAgICAgIFRNUDEsIFRNUDEsICMxCisgICAgdWFkYWxwICAgICAgICAgIHY0LjhoLCB2MC4xNmIKKyAgICBzaHJuICAgICAgICAgICAgdjYuOGIsIHY0LjhoLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djYuOGJ9LCBbT1VUUFRSXSwgIzgKKyAgICBiLm5lICAgICAgICAgICAgMmIKKzM6ICAvKiBsYXN0IGNvbHVtbnMgKi8KKyAgICBsZDEgICAgICAgICAgICAge3YwLjE2Yn0sIFtJTlBUUl0KKyAgICBtb3YgICAgICAgICAgICAgdjQuMTZiLCB2MTYuMTZiCisgICAgc3VicyAgICAgICAgICAgIFZfU0FNUCwgVl9TQU1QLCAjMQorICAgIC8qIGV4cGFuZCByaWdodCAqLworICAgIHRibCAgICAgICAgICAgICB2Mi4xNmIsIHt2MC4xNmJ9LCB2MTguMTZiCisgICAgdWFkYWxwICAgICAgICAgIHY0LjhoLCB2Mi4xNmIKKyAgICBzaHJuICAgICAgICAgICAgdjYuOGIsIHY0LjhoLCAjMQorICAgIHN0MSAgICAgICAgICAgICB7djYuOGJ9LCBbT1VUUFRSXSwgIzgKKyAgICBiLm5lICAgICAgICAgICAgMWIKKworICAgIGJyICAgICAgICAgICAgICB4MzAKKworICAgIC51bnJlcSAgICAgICAgICBJTUFHRV9XSURUSAorICAgIC51bnJlcSAgICAgICAgICBNQVhfVl9TQU1QCisgICAgLnVucmVxICAgICAgICAgIFZfU0FNUAorICAgIC51bnJlcSAgICAgICAgICBCTE9DS19XSURUSAorICAgIC51bnJlcSAgICAgICAgICBJTlBVVF9EQVRBCisgICAgLnVucmVxICAgICAgICAgIE9VVFBVVF9EQVRBCisgICAgLnVucmVxICAgICAgICAgIE9VVFBUUgorICAgIC51bnJlcSAgICAgICAgICBJTlBUUgorICAgIC51bnJlcSAgICAgICAgICBUTVAxCisgICAgLnVucmVxICAgICAgICAgIFRNUDIKKyAgICAudW5yZXEgICAgICAgICAgVE1QMworICAgIC51bnJlcSAgICAgICAgICBUTVBEVVAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCisgKiBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwKKyAqIHdpdGhvdXQgc21vb3RoaW5nLgorICoKKyAqIEdMT0JBTCh2b2lkKQorICoganNpbWRfaDJ2Ml9kb3duc2FtcGxlX25lb24oSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworICovCisKKy5iYWxpZ24gMTYKK2FzbV9mdW5jdGlvbiBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbmVvbgorICAgIElNQUdFX1dJRFRIICAgICAucmVxIHgwCisgICAgTUFYX1ZfU0FNUCAgICAgIC5yZXEgeDEKKyAgICBWX1NBTVAgICAgICAgICAgLnJlcSB4MgorICAgIEJMT0NLX1dJRFRIICAgICAucmVxIHgzCisgICAgSU5QVVRfREFUQSAgICAgIC5yZXEgeDQKKyAgICBPVVRQVVRfREFUQSAgICAgLnJlcSB4NQorICAgIE9VVFBUUiAgICAgICAgICAucmVxIHg5CisgICAgSU5QVFIwICAgICAgICAgIC5yZXEgeDEwCisgICAgSU5QVFIxICAgICAgICAgIC5yZXEgeDE0CisgICAgVE1QMSAgICAgICAgICAgIC5yZXEgeDExCisgICAgVE1QMiAgICAgICAgICAgIC5yZXEgeDEyCisgICAgVE1QMyAgICAgICAgICAgIC5yZXEgeDEzCisgICAgVE1QRFVQICAgICAgICAgIC5yZXEgdzE1CisKKyAgICBtb3YgICAgICAgICAgICAgVE1QRFVQLCAjMQorICAgIGxzbCAgICAgICAgICAgICBUTVAyLCBCTE9DS19XSURUSCwgIzQKKyAgICBsc2wgICAgICAgICAgICAgVE1QRFVQLCBUTVBEVVAsICMxNworICAgIHN1YiAgICAgICAgICAgICBUTVAyLCBUTVAyLCBJTUFHRV9XSURUSAorICAgIGFkciAgICAgICAgICAgICBUTVAzLCBManNpbWRfaDJfZG93bnNhbXBsZV9uZW9uX2NvbnN0cworICAgIG9yciAgICAgICAgICAgICBUTVBEVVAsIFRNUERVUCwgIzEKKyAgICBhZGQgICAgICAgICAgICAgVE1QMywgVE1QMywgVE1QMiwgbHNsICM0CisgICAgZHVwICAgICAgICAgICAgIHYxNi40cywgVE1QRFVQCisgICAgbGQxICAgICAgICAgICAgIHt2MTguMTZifSwgW1RNUDNdCisKKzE6ICAvKiByb3cgbG9vcCAqLworICAgIGxkciAgICAgICAgICAgICBJTlBUUjAsIFtJTlBVVF9EQVRBXSwgIzgKKyAgICBsZHIgICAgICAgICAgICAgT1VUUFRSLCBbT1VUUFVUX0RBVEFdLCAjOAorICAgIGxkciAgICAgICAgICAgICBJTlBUUjEsIFtJTlBVVF9EQVRBXSwgIzgKKyAgICBzdWJzICAgICAgICAgICAgVE1QMSwgQkxPQ0tfV0lEVEgsICMxCisgICAgYi5lcSAgICAgICAgICAgIDNmCisyOiAgLyogY29sdW1ucyAqLworICAgIGxkMSAgICAgICAgICAgICB7djAuMTZifSwgW0lOUFRSMF0sICMxNgorICAgIGxkMSAgICAgICAgICAgICB7djEuMTZifSwgW0lOUFRSMV0sICMxNgorICAgIG1vdiAgICAgICAgICAgICB2NC4xNmIsIHYxNi4xNmIKKyAgICBzdWJzICAgICAgICAgICAgVE1QMSwgVE1QMSwgIzEKKyAgICB1YWRhbHAgICAgICAgICAgdjQuOGgsIHYwLjE2YgorICAgIHVhZGFscCAgICAgICAgICB2NC44aCwgdjEuMTZiCisgICAgc2hybiAgICAgICAgICAgIHY2LjhiLCB2NC44aCwgIzIKKyAgICBzdDEgICAgICAgICAgICAge3Y2LjhifSwgW09VVFBUUl0sICM4CisgICAgYi5uZSAgICAgICAgICAgIDJiCiszOiAgLyogbGFzdCBjb2x1bW5zICovCisgICAgbGQxICAgICAgICAgICAgIHt2MC4xNmJ9LCBbSU5QVFIwXSwgIzE2CisgICAgbGQxICAgICAgICAgICAgIHt2MS4xNmJ9LCBbSU5QVFIxXSwgIzE2CisgICAgbW92ICAgICAgICAgICAgIHY0LjE2YiwgdjE2LjE2YgorICAgIHN1YnMgICAgICAgICAgICBWX1NBTVAsIFZfU0FNUCwgIzEKKyAgICAvKiBleHBhbmQgcmlnaHQgKi8KKyAgICB0YmwgICAgICAgICAgICAgdjIuMTZiLCB7djAuMTZifSwgdjE4LjE2YgorICAgIHRibCAgICAgICAgICAgICB2My4xNmIsIHt2MS4xNmJ9LCB2MTguMTZiCisgICAgdWFkYWxwICAgICAgICAgIHY0LjhoLCB2Mi4xNmIKKyAgICB1YWRhbHAgICAgICAgICAgdjQuOGgsIHYzLjE2YgorICAgIHNocm4gICAgICAgICAgICB2Ni44YiwgdjQuOGgsICMyCisgICAgc3QxICAgICAgICAgICAgIHt2Ni44Yn0sIFtPVVRQVFJdLCAjOAorICAgIGIubmUgICAgICAgICAgICAxYgorCisgICAgYnIgICAgICAgICAgICAgIHgzMAorCisgICAgLnVucmVxICAgICAgICAgIElNQUdFX1dJRFRICisgICAgLnVucmVxICAgICAgICAgIE1BWF9WX1NBTVAKKyAgICAudW5yZXEgICAgICAgICAgVl9TQU1QCisgICAgLnVucmVxICAgICAgICAgIEJMT0NLX1dJRFRICisgICAgLnVucmVxICAgICAgICAgIElOUFVUX0RBVEEKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFVUX0RBVEEKKyAgICAudW5yZXEgICAgICAgICAgT1VUUFRSCisgICAgLnVucmVxICAgICAgICAgIElOUFRSMAorICAgIC51bnJlcSAgICAgICAgICBJTlBUUjEKKyAgICAudW5yZXEgICAgICAgICAgVE1QMQorICAgIC51bnJlcSAgICAgICAgICBUTVAyCisgICAgLnVucmVxICAgICAgICAgIFRNUDMKKyAgICAudW5yZXEgICAgICAgICAgVE1QRFVQCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogR0xPQkFMKEpPQ1RFVCAqKQorICoganNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKHdvcmtpbmdfc3RhdGUgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCkKKyAqCisgKi8KKworICAgIEJVRkZFUiAgICAgICAgICAucmVxIHgxCisgICAgUFVUX0JVRkZFUiAgICAgIC5yZXEgeDYKKyAgICBQVVRfQklUUyAgICAgICAgLnJlcSB4NworICAgIFBVVF9CSVRTdyAgICAgICAucmVxIHc3CisKKy5tYWNybyBlbWl0X2J5dGUKKyAgICBzdWIgICAgICAgICAgICAgUFVUX0JJVFMsIFBVVF9CSVRTLCAjMHg4CisgICAgbHNyICAgICAgICAgICAgIHgxOSwgUFVUX0JVRkZFUiwgUFVUX0JJVFMKKyAgICB1eHRiICAgICAgICAgICAgdzE5LCB3MTkKKyAgICBzdHJiICAgICAgICAgICAgdzE5LCBbQlVGRkVSLCAjMV0hCisgICAgY21wICAgICAgICAgICAgIHcxOSwgIzB4ZmYKKyAgICBiLm5lICAgICAgICAgICAgMTRmCisgICAgc3RyYiAgICAgICAgICAgIHd6ciwgW0JVRkZFUiwgIzFdIQorMTQ6CisuZW5kbQorLm1hY3JvIHB1dF9iaXRzIENPREUsIFNJWkUKKyAgICBsc2wgICAgICAgICAgICAgUFVUX0JVRkZFUiwgUFVUX0JVRkZFUiwgXFNJWkUKKyAgICBhZGQgICAgICAgICAgICAgUFVUX0JJVFMsIFBVVF9CSVRTLCBcU0laRQorICAgIG9yciAgICAgICAgICAgICBQVVRfQlVGRkVSLCBQVVRfQlVGRkVSLCBcQ09ERQorLmVuZG0KKy5tYWNybyBjaGVja2J1ZjMxCisgICAgY21wICAgICAgICAgICAgIFBVVF9CSVRTLCAjMHgyMAorICAgIGIubHQgICAgICAgICAgICAzMWYKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKzMxOgorLmVuZG0KKy5tYWNybyBjaGVja2J1ZjQ3CisgICAgY21wICAgICAgICAgICAgIFBVVF9CSVRTLCAjMHgzMAorICAgIGIubHQgICAgICAgICAgICA0N2YKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKyAgICBlbWl0X2J5dGUKKzQ3OgorLmVuZG0KKworLm1hY3JvIGdlbmVyYXRlX2pzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9jayBmYXN0X3RibAorCisuYmFsaWduIDE2CisuaWYgXGZhc3RfdGJsID09IDEKK0xqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2tfbmVvbl9jb25zdHM6CisuZWxzZQorTGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uX3Nsb3d0YmxfY29uc3RzOgorLmVuZGlmCisgICAgLmJ5dGUgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgXAorICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAKKy5pZiBcZmFzdF90YmwgPT0gMQorICAgIC5ieXRlICAgIDAsICAgMSwgICAyLCAgIDMsICAxNiwgIDE3LCAgMzIsICAzMywgXAorICAgICAgICAgICAgMTgsICAxOSwgICA0LCAgIDUsICAgNiwgICA3LCAgMjAsICAyMSAgLyogTDAgPT4gTDMgOiA0IGxpbmVzIE9LICovCisgICAgLmJ5dGUgICAzNCwgIDM1LCAgNDgsICA0OSwgMjU1LCAyNTUsICA1MCwgIDUxLCBcCisgICAgICAgICAgICAzNiwgIDM3LCAgMjIsICAyMywgICA4LCAgIDksICAxMCwgIDExICAvKiBMMCA9PiBMMyA6IDQgbGluZXMgT0sgKi8KKyAgICAuYnl0ZSAgICA4LCAgIDksICAyMiwgIDIzLCAgMzYsICAzNywgIDUwLCAgNTEsIFwKKyAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgIDUyLCAgNTMgIC8qIEwxID0+IEw0IDogNCBsaW5lcyBPSyAqLworICAgIC5ieXRlICAgNTQsICA1NSwgIDQwLCAgNDEsICAyNiwgIDI3LCAgMTIsICAxMywgXAorICAgICAgICAgICAgMTQsICAxNSwgIDI4LCAgMjksICA0MiwgIDQzLCAgNTYsICA1NyAgLyogTDAgPT4gTDMgOiA0IGxpbmVzIE9LICovCisgICAgLmJ5dGUgICAgNiwgICA3LCAgMjAsICAyMSwgIDM0LCAgMzUsICA0OCwgIDQ5LCBcCisgICAgICAgICAgICA1MCwgIDUxLCAgMzYsICAzNywgIDIyLCAgMjMsICAgOCwgICA5ICAvKiBMNCA9PiBMNyA6IDQgbGluZXMgT0sgKi8KKyAgICAuYnl0ZSAgIDQyLCAgNDMsICAyOCwgIDI5LCAgMTQsICAxNSwgIDMwLCAgMzEsIFwKKyAgICAgICAgICAgIDQ0LCAgNDUsICA1OCwgIDU5LCAyNTUsIDI1NSwgMjU1LCAyNTUgIC8qIEwxID0+IEw0IDogNCBsaW5lcyBPSyAqLworICAgIC5ieXRlICAyNTUsIDI1NSwgMjU1LCAyNTUsICA1NiwgIDU3LCAgNDIsICA0MywgXAorICAgICAgICAgICAgMjgsICAyOSwgIDE0LCAgMTUsICAzMCwgIDMxLCAgNDQsICA0NSAgLyogTDMgPT4gTDYgOiA0IGxpbmVzIE9LICovCisgICAgLmJ5dGUgICAyNiwgIDI3LCAgNDAsICA0MSwgIDQyLCAgNDMsICAyOCwgIDI5LCBcCisgICAgICAgICAgICAxNCwgIDE1LCAgMzAsICAzMSwgIDQ0LCAgNDUsICA0NiwgIDQ3ICAvKiBMNSA9PiBMNyA6IDMgbGluZXMgT0sgKi8KKyAgICAuYnl0ZSAgMjU1LCAyNTUsIDI1NSwgMjU1LCAgIDAsICAgMSwgMjU1LCAyNTUsIFwKKyAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUgIC8qIEw0IDogMSBsaW5lcyBPSyAqLworICAgIC5ieXRlICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgXAorICAgICAgICAgICAgIDAsICAgMSwgIDE2LCAgMTcsICAgMiwgICAzLCAyNTUsIDI1NSAgLyogTDUgPT4gTDYgOiAyIGxpbmVzIE9LICovCisgICAgLmJ5dGUgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCBcCisgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgICA4LCAgIDksICAyMiwgIDIzICAvKiBMNSA9PiBMNiA6IDIgbGluZXMgT0sgKi8KKyAgICAuYnl0ZSAgICA0LCAgIDUsICAgNiwgICA3LCAyNTUsIDI1NSwgMjU1LCAyNTUsIFwKKyAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUgIC8qIEw3IDogMSBsaW5lIE9LICovCisuZW5kaWYKKworLmlmIFxmYXN0X3RibCA9PSAxCithc21fZnVuY3Rpb24ganNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX25lb24KKy5lbHNlCithc21fZnVuY3Rpb24ganNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX25lb25fc2xvd3RibAorLmVuZGlmCisgICAgc3ViICAgICAgICAgICAgIHNwLCBzcCwgMjcyCisgICAgc3ViICAgICAgICAgICAgIEJVRkZFUiwgQlVGRkVSLCAjMHgxICAgIC8qIEJVRkZFUj1idWZmZXItLSAqLworICAgIC8qIFNhdmUgQVJNIHJlZ2lzdGVycyAqLworICAgIHN0cCAgICAgICAgICAgICB4MTksIHgyMCwgW3NwXQorLmlmIFxmYXN0X3RibCA9PSAxCisgICAgYWRyICAgICAgICAgICAgIHgxNSwgTGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uX2NvbnN0cworLmVsc2UKKyAgICBhZHIgICAgICAgICAgICAgeDE1LCBManNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX25lb25fc2xvd3RibF9jb25zdHMKKy5lbmRpZgorICAgIGxkciAgICAgICAgICAgICBQVVRfQlVGRkVSLCBbeDAsICMweDEwXQorICAgIGxkciAgICAgICAgICAgICBQVVRfQklUU3csIFt4MCwgIzB4MThdCisgICAgbGRyc2ggICAgICAgICAgIHcxMiwgW3gyXSAgICAgICAgICAgICAgIC8qIGxvYWQgREMgY29lZmYgaW4gdzEyICovCisgICAgLyogcHJlcGFyZSBkYXRhICovCisuaWYgXGZhc3RfdGJsID09IDEKKyAgICBsZDEgICAgICAgICAgICAge3YyMy4xNmJ9LCBbeDE1XSwgIzE2CisgICAgbGQxICAgICAgICAgICAgIHt2MC4xNmIsIHYxLjE2YiwgdjIuMTZiLCB2My4xNmJ9LCBbeDE1XSwgIzY0CisgICAgbGQxICAgICAgICAgICAgIHt2NC4xNmIsIHY1LjE2YiwgdjYuMTZiLCB2Ny4xNmJ9LCBbeDE1XSwgIzY0CisgICAgbGQxICAgICAgICAgICAgIHt2MTYuMTZiLCB2MTcuMTZiLCB2MTguMTZiLCB2MTkuMTZifSwgW3gxNV0sICM2NAorICAgIGxkMSAgICAgICAgICAgICB7djI0LjE2YiwgdjI1LjE2YiwgdjI2LjE2YiwgdjI3LjE2Yn0sIFt4Ml0sICM2NAorICAgIGxkMSAgICAgICAgICAgICB7djI4LjE2YiwgdjI5LjE2YiwgdjMwLjE2YiwgdjMxLjE2Yn0sIFt4Ml0sICM2NAorICAgIHN1YiAgICAgICAgICAgICB3MTIsIHcxMiwgdzMgICAgICAvKiBsYXN0X2RjX3ZhbCwgbm90IHVzZWQgYWZ0ZXJ3YXJkcyAqLworICAgIC8qIFppZ1phZyA4eDggKi8KKyAgICB0YmwgICAgICAgICAgICAgdjAuMTZiLCB7djI0LjE2YiwgdjI1LjE2YiwgdjI2LjE2YiwgdjI3LjE2Yn0sIHYwLjE2YgorICAgIHRibCAgICAgICAgICAgICB2MS4xNmIsIHt2MjQuMTZiLCB2MjUuMTZiLCB2MjYuMTZiLCB2MjcuMTZifSwgdjEuMTZiCisgICAgdGJsICAgICAgICAgICAgIHYyLjE2Yiwge3YyNS4xNmIsIHYyNi4xNmIsIHYyNy4xNmIsIHYyOC4xNmJ9LCB2Mi4xNmIKKyAgICB0YmwgICAgICAgICAgICAgdjMuMTZiLCB7djI0LjE2YiwgdjI1LjE2YiwgdjI2LjE2YiwgdjI3LjE2Yn0sIHYzLjE2YgorICAgIHRibCAgICAgICAgICAgICB2NC4xNmIsIHt2MjguMTZiLCB2MjkuMTZiLCB2MzAuMTZiLCB2MzEuMTZifSwgdjQuMTZiCisgICAgdGJsICAgICAgICAgICAgIHY1LjE2Yiwge3YyNS4xNmIsIHYyNi4xNmIsIHYyNy4xNmIsIHYyOC4xNmJ9LCB2NS4xNmIKKyAgICB0YmwgICAgICAgICAgICAgdjYuMTZiLCB7djI3LjE2YiwgdjI4LjE2YiwgdjI5LjE2YiwgdjMwLjE2Yn0sIHY2LjE2YgorICAgIHRibCAgICAgICAgICAgICB2Ny4xNmIsIHt2MjkuMTZiLCB2MzAuMTZiLCB2MzEuMTZifSwgdjcuMTZiCisgICAgaW5zICAgICAgICAgICAgIHYwLmhbMF0sIHcxMgorICAgIHRieCAgICAgICAgICAgICB2MS4xNmIsIHt2MjguMTZifSwgdjE2LjE2YgorICAgIHRieCAgICAgICAgICAgICB2Mi4xNmIsIHt2MjkuMTZiLCB2MzAuMTZifSwgdjE3LjE2YgorICAgIHRieCAgICAgICAgICAgICB2NS4xNmIsIHt2MjkuMTZiLCB2MzAuMTZifSwgdjE4LjE2YgorICAgIHRieCAgICAgICAgICAgICB2Ni4xNmIsIHt2MzEuMTZifSwgdjE5LjE2YgorLmVsc2UKKyAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgyLCAjMHgyMgorICAgICAgc3ViICAgICAgICAgICAgIHcxMiwgdzEyLCB3MyAgICAvKiBsYXN0X2RjX3ZhbCwgbm90IHVzZWQgYWZ0ZXJ3YXJkcyAqLworICAgIGxkMSAgICAgICAgICAgICB7djIzLjE2Yn0sIFt4MTVdCisgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MiwgIzB4MTgKKyAgICAgIGFkZCAgICAgICAgICAgICB4MywgeDIsICMweDM2CisgICAgaW5zICAgICAgICAgICAgIHYwLmhbMF0sIHcxMgorICAgICAgYWRkICAgICAgICAgICAgIHg5LCB4MiwgIzB4MgorICAgIGxkMSAgICAgICAgICAgICB7djEuaH1bMF0sIFt4MTNdCisgICAgICBhZGQgICAgICAgICAgICAgeDE1LCB4MiwgIzB4MzAKKyAgICBsZDEgICAgICAgICAgICAge3YyLmh9WzBdLCBbeDE0XQorICAgICAgYWRkICAgICAgICAgICAgIHgxOSwgeDIsICMweDI2CisgICAgbGQxICAgICAgICAgICAgIHt2My5ofVswXSwgW3gzXQorICAgICAgYWRkICAgICAgICAgICAgIHgyMCwgeDIsICMweDI4CisgICAgbGQxICAgICAgICAgICAgIHt2MC5ofVsxXSwgW3g5XQorICAgICAgYWRkICAgICAgICAgICAgIHgxMiwgeDIsICMweDEwCisgICAgbGQxICAgICAgICAgICAgIHt2MS5ofVsxXSwgW3gxNV0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgyLCAjMHg0MAorICAgIGxkMSAgICAgICAgICAgICB7djIuaH1bMV0sIFt4MTldCisgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MiwgIzB4MzQKKyAgICBsZDEgICAgICAgICAgICAge3YzLmh9WzFdLCBbeDIwXQorICAgICAgYWRkICAgICAgICAgICAgIHgzLCB4MiwgIzB4MWEKKyAgICBsZDEgICAgICAgICAgICAge3YwLmh9WzJdLCBbeDEyXQorICAgICAgYWRkICAgICAgICAgICAgIHg5LCB4MiwgIzB4MjAKKyAgICBsZDEgICAgICAgICAgICAge3YxLmh9WzJdLCBbeDEzXQorICAgICAgYWRkICAgICAgICAgICAgIHgxNSwgeDIsICMweDMyCisgICAgbGQxICAgICAgICAgICAgIHt2Mi5ofVsyXSwgW3gxNF0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTksIHgyLCAjMHg0MgorICAgIGxkMSAgICAgICAgICAgICB7djMuaH1bMl0sIFt4M10KKyAgICAgIGFkZCAgICAgICAgICAgICB4MjAsIHgyLCAjMHhjCisgICAgbGQxICAgICAgICAgICAgIHt2MC5ofVszXSwgW3g5XQorICAgICAgYWRkICAgICAgICAgICAgIHgxMiwgeDIsICMweDEyCisgICAgbGQxICAgICAgICAgICAgIHt2MS5ofVszXSwgW3gxNV0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgyLCAjMHgyNAorICAgIGxkMSAgICAgICAgICAgICB7djIuaH1bM10sIFt4MTldCisgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MiwgIzB4NTAKKyAgICBsZDEgICAgICAgICAgICAge3YzLmh9WzNdLCBbeDIwXQorICAgICAgYWRkICAgICAgICAgICAgIHgzLCB4MiwgIzB4ZQorICAgIGxkMSAgICAgICAgICAgICB7djAuaH1bNF0sIFt4MTJdCisgICAgICBhZGQgICAgICAgICAgICAgeDksIHgyLCAjMHg0CisgICAgbGQxICAgICAgICAgICAgIHt2MS5ofVs0XSwgW3gxM10KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTUsIHgyLCAjMHgxNgorICAgIGxkMSAgICAgICAgICAgICB7djIuaH1bNF0sIFt4MTRdCisgICAgICBhZGQgICAgICAgICAgICAgeDE5LCB4MiwgIzB4NjAKKyAgICBsZDEgICAgICAgICAgICAge3YzLmh9WzRdLCBbeDNdCisgICAgICBhZGQgICAgICAgICAgICAgeDIwLCB4MiwgIzB4MWMKKyAgICBsZDEgICAgICAgICAgICAge3YwLmh9WzVdLCBbeDldCisgICAgICBhZGQgICAgICAgICAgICAgeDEyLCB4MiwgIzB4NgorICAgIGxkMSAgICAgICAgICAgICB7djEuaH1bNV0sIFt4MTVdCisgICAgICBhZGQgICAgICAgICAgICAgeDEzLCB4MiwgIzB4OAorICAgIGxkMSAgICAgICAgICAgICB7djIuaH1bNV0sIFt4MTldCisgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MiwgIzB4NTIKKyAgICBsZDEgICAgICAgICAgICAge3YzLmh9WzVdLCBbeDIwXQorICAgICAgYWRkICAgICAgICAgICAgIHgzLCB4MiwgIzB4MmEKKyAgICBsZDEgICAgICAgICAgICAge3YwLmh9WzZdLCBbeDEyXQorICAgICAgYWRkICAgICAgICAgICAgIHg5LCB4MiwgIzB4MTQKKyAgICBsZDEgICAgICAgICAgICAge3YxLmh9WzZdLCBbeDEzXQorICAgICAgYWRkICAgICAgICAgICAgIHgxNSwgeDIsICMweGEKKyAgICBsZDEgICAgICAgICAgICAge3YyLmh9WzZdLCBbeDE0XQorICAgICAgYWRkICAgICAgICAgICAgIHgxOSwgeDIsICMweDQ0CisgICAgbGQxICAgICAgICAgICAgIHt2My5ofVs2XSwgW3gzXQorICAgICAgYWRkICAgICAgICAgICAgIHgyMCwgeDIsICMweDM4CisgICAgbGQxICAgICAgICAgICAgIHt2MC5ofVs3XSwgW3g5XQorICAgICAgYWRkICAgICAgICAgICAgIHgxMiwgeDIsICMweDQ2CisgICAgbGQxICAgICAgICAgICAgIHt2MS5ofVs3XSwgW3gxNV0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgyLCAjMHgzYQorICAgIGxkMSAgICAgICAgICAgICB7djIuaH1bN10sIFt4MTldCisgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MiwgIzB4NzQKKyAgICBsZDEgICAgICAgICAgICAge3YzLmh9WzddLCBbeDIwXQorICAgICAgYWRkICAgICAgICAgICAgIHgzLCB4MiwgIzB4NmEKKyAgICBsZDEgICAgICAgICAgICAge3Y0Lmh9WzBdLCBbeDEyXQorICAgICAgYWRkICAgICAgICAgICAgIHg5LCB4MiwgIzB4NTQKKyAgICBsZDEgICAgICAgICAgICAge3Y1Lmh9WzBdLCBbeDEzXQorICAgICAgYWRkICAgICAgICAgICAgIHgxNSwgeDIsICMweDJjCisgICAgbGQxICAgICAgICAgICAgIHt2Ni5ofVswXSwgW3gxNF0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTksIHgyLCAjMHg3NgorICAgIGxkMSAgICAgICAgICAgICB7djcuaH1bMF0sIFt4M10KKyAgICAgIGFkZCAgICAgICAgICAgICB4MjAsIHgyLCAjMHg3OAorICAgIGxkMSAgICAgICAgICAgICB7djQuaH1bMV0sIFt4OV0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTIsIHgyLCAjMHg2MgorICAgIGxkMSAgICAgICAgICAgICB7djUuaH1bMV0sIFt4MTVdCisgICAgICBhZGQgICAgICAgICAgICAgeDEzLCB4MiwgIzB4MWUKKyAgICBsZDEgICAgICAgICAgICAge3Y2Lmh9WzFdLCBbeDE5XQorICAgICAgYWRkICAgICAgICAgICAgIHgxNCwgeDIsICMweDY4CisgICAgbGQxICAgICAgICAgICAgIHt2Ny5ofVsxXSwgW3gyMF0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MywgeDIsICMweDdhCisgICAgbGQxICAgICAgICAgICAgIHt2NC5ofVsyXSwgW3gxMl0KKyAgICAgIGFkZCAgICAgICAgICAgICB4OSwgeDIsICMweDcwCisgICAgbGQxICAgICAgICAgICAgIHt2NS5ofVsyXSwgW3gxM10KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTUsIHgyLCAjMHgyZQorICAgIGxkMSAgICAgICAgICAgICB7djYuaH1bMl0sIFt4MTRdCisgICAgICBhZGQgICAgICAgICAgICAgeDE5LCB4MiwgIzB4NWEKKyAgICBsZDEgICAgICAgICAgICAge3Y3Lmh9WzJdLCBbeDNdCisgICAgICBhZGQgICAgICAgICAgICAgeDIwLCB4MiwgIzB4NmMKKyAgICBsZDEgICAgICAgICAgICAge3Y0Lmh9WzNdLCBbeDldCisgICAgICBhZGQgICAgICAgICAgICAgeDEyLCB4MiwgIzB4NzIKKyAgICBsZDEgICAgICAgICAgICAge3Y1Lmh9WzNdLCBbeDE1XQorICAgICAgYWRkICAgICAgICAgICAgIHgxMywgeDIsICMweDNjCisgICAgbGQxICAgICAgICAgICAgIHt2Ni5ofVszXSwgW3gxOV0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTQsIHgyLCAjMHg0YworICAgIGxkMSAgICAgICAgICAgICB7djcuaH1bM10sIFt4MjBdCisgICAgICBhZGQgICAgICAgICAgICAgeDMsIHgyLCAjMHg1ZQorICAgIGxkMSAgICAgICAgICAgICB7djQuaH1bNF0sIFt4MTJdCisgICAgICBhZGQgICAgICAgICAgICAgeDksIHgyLCAjMHg2NAorICAgIGxkMSAgICAgICAgICAgICB7djUuaH1bNF0sIFt4MTNdCisgICAgICBhZGQgICAgICAgICAgICAgeDE1LCB4MiwgIzB4NGEKKyAgICBsZDEgICAgICAgICAgICAge3Y2Lmh9WzRdLCBbeDE0XQorICAgICAgYWRkICAgICAgICAgICAgIHgxOSwgeDIsICMweDNlCisgICAgbGQxICAgICAgICAgICAgIHt2Ny5ofVs0XSwgW3gzXQorICAgICAgYWRkICAgICAgICAgICAgIHgyMCwgeDIsICMweDZlCisgICAgbGQxICAgICAgICAgICAgIHt2NC5ofVs1XSwgW3g5XQorICAgICAgYWRkICAgICAgICAgICAgIHgxMiwgeDIsICMweDU2CisgICAgbGQxICAgICAgICAgICAgIHt2NS5ofVs1XSwgW3gxNV0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTMsIHgyLCAjMHg1OAorICAgIGxkMSAgICAgICAgICAgICB7djYuaH1bNV0sIFt4MTldCisgICAgICBhZGQgICAgICAgICAgICAgeDE0LCB4MiwgIzB4NGUKKyAgICBsZDEgICAgICAgICAgICAge3Y3Lmh9WzVdLCBbeDIwXQorICAgICAgYWRkICAgICAgICAgICAgIHgzLCB4MiwgIzB4N2MKKyAgICBsZDEgICAgICAgICAgICAge3Y0Lmh9WzZdLCBbeDEyXQorICAgICAgYWRkICAgICAgICAgICAgIHg5LCB4MiwgIzB4NDgKKyAgICBsZDEgICAgICAgICAgICAge3Y1Lmh9WzZdLCBbeDEzXQorICAgICAgYWRkICAgICAgICAgICAgIHgxNSwgeDIsICMweDY2CisgICAgbGQxICAgICAgICAgICAgIHt2Ni5ofVs2XSwgW3gxNF0KKyAgICAgIGFkZCAgICAgICAgICAgICB4MTksIHgyLCAjMHg1YworICAgIGxkMSAgICAgICAgICAgICB7djcuaH1bNl0sIFt4M10KKyAgICAgIGFkZCAgICAgICAgICAgICB4MjAsIHgyLCAjMHg3ZQorICAgIGxkMSAgICAgICAgICAgICB7djQuaH1bN10sIFt4OV0KKyAgICBsZDEgICAgICAgICAgICAge3Y1Lmh9WzddLCBbeDE1XQorICAgIGxkMSAgICAgICAgICAgICB7djYuaH1bN10sIFt4MTldCisgICAgbGQxICAgICAgICAgICAgIHt2Ny5ofVs3XSwgW3gyMF0KKy5lbmRpZgorICAgIGNtbHQgICAgICAgICAgICB2MjQuOGgsIHYwLjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MjUuOGgsIHYxLjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MjYuOGgsIHYyLjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MjcuOGgsIHYzLjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MjguOGgsIHY0LjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MjkuOGgsIHY1LjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MzAuOGgsIHY2LjhoLCAjMAorICAgIGNtbHQgICAgICAgICAgICB2MzEuOGgsIHY3LjhoLCAjMAorICAgIGFicyAgICAgICAgICAgICB2MC44aCwgdjAuOGgKKyAgICBhYnMgICAgICAgICAgICAgdjEuOGgsIHYxLjhoCisgICAgYWJzICAgICAgICAgICAgIHYyLjhoLCB2Mi44aAorICAgIGFicyAgICAgICAgICAgICB2My44aCwgdjMuOGgKKyAgICBhYnMgICAgICAgICAgICAgdjQuOGgsIHY0LjhoCisgICAgYWJzICAgICAgICAgICAgIHY1LjhoLCB2NS44aAorICAgIGFicyAgICAgICAgICAgICB2Ni44aCwgdjYuOGgKKyAgICBhYnMgICAgICAgICAgICAgdjcuOGgsIHY3LjhoCisgICAgZW9yICAgICAgICAgICAgIHYyNC4xNmIsIHYyNC4xNmIsIHYwLjE2YgorICAgIGVvciAgICAgICAgICAgICB2MjUuMTZiLCB2MjUuMTZiLCB2MS4xNmIKKyAgICBlb3IgICAgICAgICAgICAgdjI2LjE2YiwgdjI2LjE2YiwgdjIuMTZiCisgICAgZW9yICAgICAgICAgICAgIHYyNy4xNmIsIHYyNy4xNmIsIHYzLjE2YgorICAgIGVvciAgICAgICAgICAgICB2MjguMTZiLCB2MjguMTZiLCB2NC4xNmIKKyAgICBlb3IgICAgICAgICAgICAgdjI5LjE2YiwgdjI5LjE2YiwgdjUuMTZiCisgICAgZW9yICAgICAgICAgICAgIHYzMC4xNmIsIHYzMC4xNmIsIHY2LjE2YgorICAgIGVvciAgICAgICAgICAgICB2MzEuMTZiLCB2MzEuMTZiLCB2Ny4xNmIKKyAgICBjbWVxICAgICAgICAgICAgdjE2LjhoLCB2MC44aCwgIzAKKyAgICBjbWVxICAgICAgICAgICAgdjE3LjhoLCB2MS44aCwgIzAKKyAgICBjbWVxICAgICAgICAgICAgdjE4LjhoLCB2Mi44aCwgIzAKKyAgICBjbWVxICAgICAgICAgICAgdjE5LjhoLCB2My44aCwgIzAKKyAgICBjbWVxICAgICAgICAgICAgdjIwLjhoLCB2NC44aCwgIzAKKyAgICBjbWVxICAgICAgICAgICAgdjIxLjhoLCB2NS44aCwgIzAKKyAgICBjbWVxICAgICAgICAgICAgdjIyLjhoLCB2Ni44aCwgIzAKKyAgICB4dG4gICAgICAgICAgICAgdjE2LjhiLCB2MTYuOGgKKyAgICB4dG4gICAgICAgICAgICAgdjE4LjhiLCB2MTguOGgKKyAgICB4dG4gICAgICAgICAgICAgdjIwLjhiLCB2MjAuOGgKKyAgICB4dG4gICAgICAgICAgICAgdjIyLjhiLCB2MjIuOGgKKyAgICAgIHVtb3YgICAgICAgICAgICB3MTQsIHYwLmhbMF0KKyAgICB4dG4yICAgICAgICAgICAgdjE2LjE2YiwgdjE3LjhoCisgICAgICB1bW92ICAgICAgICAgICAgdzEzLCB2MjQuaFswXQorICAgIHh0bjIgICAgICAgICAgICB2MTguMTZiLCB2MTkuOGgKKyAgICAgIGNseiAgICAgICAgICAgICB3MTQsIHcxNAorICAgIHh0bjIgICAgICAgICAgICB2MjAuMTZiLCB2MjEuOGgKKyAgICAgIGxzbCAgICAgICAgICAgICB3MTMsIHcxMywgdzE0CisgICAgY21lcSAgICAgICAgICAgIHYxNy44aCwgdjcuOGgsICMwCisgICAgICBzdWIgICAgICAgICAgICAgdzEyLCB3MTQsICMzMgorICAgIHh0bjIgICAgICAgICAgICB2MjIuMTZiLCB2MTcuOGgKKyAgICAgIGxzciAgICAgICAgICAgICB3MTMsIHcxMywgdzE0CisgICAgYW5kICAgICAgICAgICAgIHYxNi4xNmIsIHYxNi4xNmIsIHYyMy4xNmIKKyAgICAgIG5lZyAgICAgICAgICAgICB3MTIsIHcxMgorICAgIGFuZCAgICAgICAgICAgICB2MTguMTZiLCB2MTguMTZiLCB2MjMuMTZiCisgICAgICBhZGQgICAgICAgICAgICAgeDMsIHg0LCAjMHg0MDAgICAgICAgICAgIC8qIHIxID0gZGN0YmwtPmVodWZzaSAqLworICAgIGFuZCAgICAgICAgICAgICB2MjAuMTZiLCB2MjAuMTZiLCB2MjMuMTZiCisgICAgICBhZGQgICAgICAgICAgICAgeDE1LCBzcCwgIzB4OTAgICAgICAgICAgIC8qIHgxNSA9IHQyICovCisgICAgYW5kICAgICAgICAgICAgIHYyMi4xNmIsIHYyMi4xNmIsIHYyMy4xNmIKKyAgICAgIGxkciAgICAgICAgICAgICB3MTAsIFt4NCwgeDEyLCBsc2wgIzJdCisgICAgYWRkcCAgICAgICAgICAgIHYxNi4xNmIsIHYxNi4xNmIsIHYxOC4xNmIKKyAgICAgIGxkcmIgICAgICAgICAgICB3MTEsIFt4MywgeDEyXQorICAgIGFkZHAgICAgICAgICAgICB2MjAuMTZiLCB2MjAuMTZiLCB2MjIuMTZiCisgICAgICBjaGVja2J1ZjQ3CisgICAgYWRkcCAgICAgICAgICAgIHYxNi4xNmIsIHYxNi4xNmIsIHYyMC4xNmIKKyAgICAgIHB1dF9iaXRzICAgICAgICB4MTAsIHgxMQorICAgIGFkZHAgICAgICAgICAgICB2MTYuMTZiLCB2MTYuMTZiLCB2MTguMTZiCisgICAgICBjaGVja2J1ZjQ3CisgICAgdW1vdiAgICAgICAgICAgIHg5LCB2MTYuRFswXQorICAgICAgcHV0X2JpdHMgICAgICAgIHgxMywgeDEyCisgICAgY250ICAgICAgICAgICAgIHYxNy44YiwgdjE2LjhiCisgICAgICBtdm4gICAgICAgICAgICAgeDksIHg5CisgICAgYWRkdiAgICAgICAgICAgIEIxOCwgdjE3LjhiCisgICAgICBhZGQgICAgICAgICAgICAgeDQsIHg1LCAjMHg0MDAgICAvKiB4NCA9IGFjdGJsLT5laHVmc2kgKi8KKyAgICB1bW92ICAgICAgICAgICAgdzEyLCB2MTguYlswXQorICAgICAgbHNyICAgICAgICAgICAgIHg5LCB4OSwgIzB4MSAgICAgLyogY2xlYXIgQUMgY29lZmYgKi8KKyAgICBsZHIgICAgICAgICAgICAgdzEzLCBbeDUsICMweDNjMF0gIC8qIHgxMyA9IGFjdGJsLT5laHVmY29bMHhmMF0gKi8KKyAgICByYml0ICAgICAgICAgICAgeDksIHg5ICAgICAgICAgICAgIC8qIHg5ID0gaW5kZXgwICovCisgICAgbGRyYiAgICAgICAgICAgIHcxNCwgW3g0LCAjMHhmMF0gICAvKiB4MTQgPSBhY3RibC0+ZWh1ZnNpWzB4ZjBdICovCisgICAgY21wICAgICAgICAgICAgIHcxMiwgIyg2NC04KQorICAgIGFkZCAgICAgICAgICAgICB4MTEsIHNwLCAjMTYKKyAgICBiLmx0ICAgICAgICAgICAgNGYKKyAgICBjYnogICAgICAgICAgICAgeDksIDZmCisgICAgc3QxICAgICAgICAgICAgIHt2MC44aCwgdjEuOGgsIHYyLjhoLCB2My44aH0sIFt4MTFdLCAjNjQKKyAgICBzdDEgICAgICAgICAgICAge3Y0LjhoLCB2NS44aCwgdjYuOGgsIHY3LjhofSwgW3gxMV0sICM2NAorICAgIHN0MSAgICAgICAgICAgICB7djI0LjhoLCB2MjUuOGgsIHYyNi44aCwgdjI3LjhofSwgW3gxMV0sICM2NAorICAgIHN0MSAgICAgICAgICAgICB7djI4LjhoLCB2MjkuOGgsIHYzMC44aCwgdjMxLjhofSwgW3gxMV0sICM2NAorMToKKyAgICBjbHogICAgICAgICAgICAgeDIsIHg5CisgICAgYWRkICAgICAgICAgICAgIHgxNSwgeDE1LCB4MiwgbHNsICMxCisgICAgbHNsICAgICAgICAgICAgIHg5LCB4OSwgeDIKKyAgICBsZHJoICAgICAgICAgICAgdzIwLCBbeDE1LCAjLTEyNl0KKzI6CisgICAgY21wICAgICAgICAgICAgIHgyLCAjMHgxMAorICAgIGIubHQgICAgICAgICAgICAzZgorICAgIHN1YiAgICAgICAgICAgICB4MiwgeDIsICMweDEwCisgICAgY2hlY2tidWY0NworICAgIHB1dF9iaXRzICAgICAgICB4MTMsIHgxNAorICAgIGIgICAgICAgICAgICAgICAyYgorMzoKKyAgICBjbHogICAgICAgICAgICAgdzIwLCB3MjAKKyAgICBsZHJoICAgICAgICAgICAgdzMsIFt4MTUsICMyXSEKKyAgICBzdWIgICAgICAgICAgICAgdzExLCB3MjAsICMzMgorICAgIGxzbCAgICAgICAgICAgICB3MywgdzMsIHcyMAorICAgIG5lZyAgICAgICAgICAgICB3MTEsIHcxMQorICAgIGxzciAgICAgICAgICAgICB3MywgdzMsIHcyMAorICAgIGFkZCAgICAgICAgICAgICB4MiwgeDExLCB4MiwgbHNsICM0CisgICAgbHNsICAgICAgICAgICAgIHg5LCB4OSwgIzB4MQorICAgIGxkciAgICAgICAgICAgICB3MTIsIFt4NSwgeDIsIGxzbCAjMl0KKyAgICBsZHJiICAgICAgICAgICAgdzEwLCBbeDQsIHgyXQorICAgIGNoZWNrYnVmMzEKKyAgICBwdXRfYml0cyAgICAgICAgeDEyLCB4MTAKKyAgICBwdXRfYml0cyAgICAgICAgeDMsIHgxMQorICAgIGNibnogICAgICAgICAgICB4OSwgMWIKKyAgICBiICAgICAgICAgICAgICAgNmYKKzQ6CisgICAgbW92aSAgICAgICAgICAgIHYyMS44aCwgIzB4MDAxMAorICAgIGNseiAgICAgICAgICAgICB2MC44aCwgdjAuOGgKKyAgICBjbHogICAgICAgICAgICAgdjEuOGgsIHYxLjhoCisgICAgY2x6ICAgICAgICAgICAgIHYyLjhoLCB2Mi44aAorICAgIGNseiAgICAgICAgICAgICB2My44aCwgdjMuOGgKKyAgICBjbHogICAgICAgICAgICAgdjQuOGgsIHY0LjhoCisgICAgY2x6ICAgICAgICAgICAgIHY1LjhoLCB2NS44aAorICAgIGNseiAgICAgICAgICAgICB2Ni44aCwgdjYuOGgKKyAgICBjbHogICAgICAgICAgICAgdjcuOGgsIHY3LjhoCisgICAgdXNobCAgICAgICAgICAgIHYyNC44aCwgdjI0LjhoLCB2MC44aAorICAgIHVzaGwgICAgICAgICAgICB2MjUuOGgsIHYyNS44aCwgdjEuOGgKKyAgICB1c2hsICAgICAgICAgICAgdjI2LjhoLCB2MjYuOGgsIHYyLjhoCisgICAgdXNobCAgICAgICAgICAgIHYyNy44aCwgdjI3LjhoLCB2My44aAorICAgIHVzaGwgICAgICAgICAgICB2MjguOGgsIHYyOC44aCwgdjQuOGgKKyAgICB1c2hsICAgICAgICAgICAgdjI5LjhoLCB2MjkuOGgsIHY1LjhoCisgICAgdXNobCAgICAgICAgICAgIHYzMC44aCwgdjMwLjhoLCB2Ni44aAorICAgIHVzaGwgICAgICAgICAgICB2MzEuOGgsIHYzMS44aCwgdjcuOGgKKyAgICBuZWcgICAgICAgICAgICAgdjAuOGgsIHYwLjhoCisgICAgbmVnICAgICAgICAgICAgIHYxLjhoLCB2MS44aAorICAgIG5lZyAgICAgICAgICAgICB2Mi44aCwgdjIuOGgKKyAgICBuZWcgICAgICAgICAgICAgdjMuOGgsIHYzLjhoCisgICAgbmVnICAgICAgICAgICAgIHY0LjhoLCB2NC44aAorICAgIG5lZyAgICAgICAgICAgICB2NS44aCwgdjUuOGgKKyAgICBuZWcgICAgICAgICAgICAgdjYuOGgsIHY2LjhoCisgICAgbmVnICAgICAgICAgICAgIHY3LjhoLCB2Ny44aAorICAgIHVzaGwgICAgICAgICAgICB2MjQuOGgsIHYyNC44aCwgdjAuOGgKKyAgICB1c2hsICAgICAgICAgICAgdjI1LjhoLCB2MjUuOGgsIHYxLjhoCisgICAgdXNobCAgICAgICAgICAgIHYyNi44aCwgdjI2LjhoLCB2Mi44aAorICAgIHVzaGwgICAgICAgICAgICB2MjcuOGgsIHYyNy44aCwgdjMuOGgKKyAgICB1c2hsICAgICAgICAgICAgdjI4LjhoLCB2MjguOGgsIHY0LjhoCisgICAgdXNobCAgICAgICAgICAgIHYyOS44aCwgdjI5LjhoLCB2NS44aAorICAgIHVzaGwgICAgICAgICAgICB2MzAuOGgsIHYzMC44aCwgdjYuOGgKKyAgICB1c2hsICAgICAgICAgICAgdjMxLjhoLCB2MzEuOGgsIHY3LjhoCisgICAgYWRkICAgICAgICAgICAgIHYwLjhoLCB2MjEuOGgsIHYwLjhoCisgICAgYWRkICAgICAgICAgICAgIHYxLjhoLCB2MjEuOGgsIHYxLjhoCisgICAgYWRkICAgICAgICAgICAgIHYyLjhoLCB2MjEuOGgsIHYyLjhoCisgICAgYWRkICAgICAgICAgICAgIHYzLjhoLCB2MjEuOGgsIHYzLjhoCisgICAgYWRkICAgICAgICAgICAgIHY0LjhoLCB2MjEuOGgsIHY0LjhoCisgICAgYWRkICAgICAgICAgICAgIHY1LjhoLCB2MjEuOGgsIHY1LjhoCisgICAgYWRkICAgICAgICAgICAgIHY2LjhoLCB2MjEuOGgsIHY2LjhoCisgICAgYWRkICAgICAgICAgICAgIHY3LjhoLCB2MjEuOGgsIHY3LjhoCisgICAgc3QxICAgICAgICAgICAgIHt2MC44aCwgdjEuOGgsIHYyLjhoLCB2My44aH0sIFt4MTFdLCAjNjQKKyAgICBzdDEgICAgICAgICAgICAge3Y0LjhoLCB2NS44aCwgdjYuOGgsIHY3LjhofSwgW3gxMV0sICM2NAorICAgIHN0MSAgICAgICAgICAgICB7djI0LjhoLCB2MjUuOGgsIHYyNi44aCwgdjI3LjhofSwgW3gxMV0sICM2NAorICAgIHN0MSAgICAgICAgICAgICB7djI4LjhoLCB2MjkuOGgsIHYzMC44aCwgdjMxLjhofSwgW3gxMV0sICM2NAorMToKKyAgICBjbHogICAgICAgICAgICAgeDIsIHg5CisgICAgYWRkICAgICAgICAgICAgIHgxNSwgeDE1LCB4MiwgbHNsICMxCisgICAgbHNsICAgICAgICAgICAgIHg5LCB4OSwgeDIKKyAgICBsZHJoICAgICAgICAgICAgdzExLCBbeDE1LCAjLTEyNl0KKzI6CisgICAgY21wICAgICAgICAgICAgIHgyLCAjMHgxMAorICAgIGIubHQgICAgICAgICAgICAzZgorICAgIHN1YiAgICAgICAgICAgICB4MiwgeDIsICMweDEwCisgICAgY2hlY2tidWY0NworICAgIHB1dF9iaXRzICAgICAgICB4MTMsIHgxNAorICAgIGIgICAgICAgICAgICAgICAyYgorMzoKKyAgICBsZHJoICAgICAgICAgICAgdzMsIFt4MTUsICMyXSEKKyAgICBhZGQgICAgICAgICAgICAgeDIsIHgxMSwgeDIsIGxzbCAjNAorICAgIGxzbCAgICAgICAgICAgICB4OSwgeDksICMweDEKKyAgICBsZHIgICAgICAgICAgICAgdzEyLCBbeDUsIHgyLCBsc2wgIzJdCisgICAgbGRyYiAgICAgICAgICAgIHcxMCwgW3g0LCB4Ml0KKyAgICBjaGVja2J1ZjMxCisgICAgcHV0X2JpdHMgICAgICAgIHgxMiwgeDEwCisgICAgcHV0X2JpdHMgICAgICAgIHgzLCB4MTEKKyAgICBjYm56ICAgICAgICAgICAgeDksIDFiCis2OgorICAgIGFkZCAgICAgICAgICAgICB4MTMsIHNwLCAjMHgxMGUKKyAgICBjbXAgICAgICAgICAgICAgeDE1LCB4MTMKKyAgICBiLmhzICAgICAgICAgICAgMWYKKyAgICBsZHIgICAgICAgICAgICAgdzEyLCBbeDVdCisgICAgbGRyYiAgICAgICAgICAgIHcxNCwgW3g0XQorICAgIGNoZWNrYnVmNDcKKyAgICBwdXRfYml0cyAgICAgICAgeDEyLCB4MTQKKzE6CisgICAgc3RyICAgICAgICAgICAgIFBVVF9CVUZGRVIsIFt4MCwgIzB4MTBdCisgICAgc3RyICAgICAgICAgICAgIFBVVF9CSVRTdywgW3gwLCAjMHgxOF0KKyAgICBsZHAgICAgICAgICAgICAgeDE5LCB4MjAsIFtzcF0sIDE2CisgICAgYWRkICAgICAgICAgICAgIHgwLCBCVUZGRVIsICMweDEKKyAgICBhZGQgICAgICAgICAgICAgc3AsIHNwLCAyNTYKKyAgICBiciAgICAgICAgICAgICAgeDMwCisKKy5lbmRtCisKK2dlbmVyYXRlX2pzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9jayAxCitnZW5lcmF0ZV9qc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2sgMAorCisgICAgLnVucmVxICAgICAgICAgIEJVRkZFUgorICAgIC51bnJlcSAgICAgICAgICBQVVRfQlVGRkVSCisgICAgLnVucmVxICAgICAgICAgIFBVVF9CSVRTCisgICAgLnVucmVxICAgICAgICAgIFBVVF9CSVRTdworCisucHVyZ2VtIGVtaXRfYnl0ZQorLnB1cmdlbSBwdXRfYml0cworLnB1cmdlbSBjaGVja2J1ZjMxCisucHVyZ2VtIGNoZWNrYnVmNDcKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvZ2FzLXByZXByb2Nlc3Nvci5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvZ2FzLXByZXByb2Nlc3Nvci5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjBmNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9nYXMtcHJlcHJvY2Vzc29yLmluCkBAIC0wLDAgKzEgQEAKK2dhcy1wcmVwcm9jZXNzb3IucGwgQENNQUtFX0FTTV9DT01QSUxFUkAgJHsxKyIkQCJ9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNjb2xleHQtYXZ4Mi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNjb2xleHQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ZDc4NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbGV4dC1hdngyLmFzbQpAQCAtMCwwICsxLDU4MCBAQAorOworOyBqY2NvbGV4dC5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKEFWWDIpCis7Cis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cyk7Cis7CisKKyVkZWZpbmUgaW1nX3dpZHRoKGIpICAgKGIpICsgOCAgICAgICAgICA7IEpESU1FTlNJT04gaW1nX3dpZHRoCislZGVmaW5lIGlucHV0X2J1ZihiKSAgIChiKSArIDEyICAgICAgICAgOyBKU0FNUEFSUkFZIGlucHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfYnVmKGIpICAoYikgKyAxNiAgICAgICAgIDsgSlNBTVBJTUFHRSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9yb3coYikgIChiKSArIDIwICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9yb3cKKyVkZWZpbmUgbnVtX3Jvd3MoYikgICAgKGIpICsgMjQgICAgICAgICA7IGludCBudW1fcm93cworCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWU1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeW1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDgKKyVkZWZpbmUgZ290cHRyICAgICAgICAgd2soMCkgLSBTSVpFT0ZfUE9JTlRFUiAgOyB2b2lkICogZ290cHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYXZ4MikKKworRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1lNTVdPUkQpICA7IGFsaWduIHRvIDI1NiBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVheCldCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfcm93KGVheCldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtlc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VzaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZXNpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbGVhICAgICAgICAgZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbGVhICAgICAgICAgZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbGVhICAgICAgICAgZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaHBpYyAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWR4CisgICAgcHVzaCAgICAgICAgZWJ4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlYnhdICAgICA7IG91dHB0cjEKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZHhdICAgICA7IG91dHB0cjIKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIG1vdnp4ICAgICAgIGVheCwgQllURSBbZXNpK2VjeF0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgbW92enggICAgICAgZWR4LCBXT1JEIFtlc2krZWN4XQorICAgIHNobCAgICAgICAgIGVheCwgV09SRF9CSVQKKyAgICBvciAgICAgICAgICBlYXgsIGVkeAorLmNvbHVtbl9sZDQ6CisgICAgdm1vdmQgICAgICAgeG1tQSwgZWF4CisgICAgcG9wICAgICAgICAgZWR4CisgICAgcG9wICAgICAgICAgZWF4CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9EV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIHZtb3ZkICAgICAgIHhtbUYsIFhNTV9EV09SRCBbZXNpK2VjeF0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICB2cG9yICAgICAgICB4bW1BLCB4bW1BLCB4bW1GCisuY29sdW1uX2xkODoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgdm1vdnEgICAgICAgeG1tQiwgWE1NX01NV09SRCBbZXNpK2VjeF0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgdnBvciAgICAgICAgeG1tQSwgeG1tQSwgeG1tQgorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIHZtb3ZkcXUgICAgIHhtbUIsIFhNTV9NTVdPUkQgW2VzaStlY3hdCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQSwgeW1tQSwgMQorICAgIHZwb3IgICAgICAgIHltbUEsIHltbUIKKy5jb2x1bW5fbGQzMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNjQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICB2bW92ZHFhICAgICB5bW1GLCB5bW1BCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisuY29sdW1uX2xkNjQ6CisgICAgdGVzdCAgICAgICAgY2wsIDIqU0laRU9GX1lNTVdPUkQKKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgdm1vdmRxYSAgICAgeW1tQiwgeW1tQQorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUYsIFlNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUYsIFlNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUIsIFlNTVdPUkQgW2VzaSsyKlNJWkVPRl9ZTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisgICAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgIDsgICAgICAgMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgOyB5bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgOyB5bW1CPSgxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUQorICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisKKyAgICB2bW92ZHF1ICAgICB5bW1DLCB5bW1BCisgICAgdmluc2VydGkxMjggeW1tQSwgeW1tRiwgeG1tQSwgMCAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgdmluc2VydGkxMjggeW1tQywgeW1tQywgeG1tQiwgMCAgOyB5bW1DPSgxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgdmluc2VydGkxMjggeW1tQiwgeW1tQiwgeG1tRiwgMCAgOyB5bW1CPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisgICAgdnBlcm0yaTEyOCAgeW1tRiwgeW1tQywgeW1tQywgMSAgOyB5bW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1BCisgICAgdnBzbGxkcSAgICAgeW1tQSwgeW1tQSwgOCAgICAgOyB5bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgMEcgMUcgMkcgMEggMUggMkggMEkgMUkpCisgICAgdnBzcmxkcSAgICAgeW1tRywgeW1tRywgOCAgICAgOyB5bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMUogMkogMEsgMUsgMksgMEwgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICB2cHVucGNraGJ3ICB5bW1BLCB5bW1BLCB5bW1GICA7IHltbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwTyAxRyAxTyAyRyAyTyAwSCAwUCAxSCAxUCAySCAyUCAwSSAwUSAxSSAxUSkKKyAgICB2cHNsbGRxICAgICB5bW1GLCB5bW1GLCA4ICAgICA7IHltbUY9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTikKKworICAgIHZwdW5wY2tsYncgIHltbUcsIHltbUcsIHltbUIgIDsgeW1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDJRIDBKIDBSIDFKIDFSIDJKIDJSIDBLIDBTIDFLIDFTIDJLIDJTIDBMIDBUKQorICAgIHZwdW5wY2toYncgIHltbUYsIHltbUYsIHltbUIgIDsgeW1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFMIDFUIDJMIDJUIDBNIDBVIDFNIDFVIDJNIDJVIDBOIDBWIDFOIDFWIDJOIDJWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRCwgeW1tQQorICAgIHZwc2xsZHEgICAgIHltbUEsIHltbUEsIDggICAgIDsgeW1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDggMTAgMTggMjAgMjggMDEgMDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIDBHIDBPIDFHIDFPIDJHIDJPIDBIIDBQKQorICAgIHZwc3JsZHEgICAgIHltbUQsIHltbUQsIDggICAgIDsgeW1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgMEcgME8gMUcgMU8gMkcgMk8gMEggMFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFIIDFQIDJIIDJQIDBJIDBRIDFJIDFRIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgdnB1bnBja2hidyAgeW1tQSwgeW1tQSwgeW1tRyAgOyB5bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEsgME8gMFMgMUcgMUsgMU8gMVMgMkcgMksgMk8gMlMgMEggMEwgMFAgMFQpCisgICAgdnBzbGxkcSAgICAgeW1tRywgeW1tRywgOCAgICAgOyB5bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQgMkkgMlEgMEogMFIgMUogMVIgMkogMlIpCisKKyAgICB2cHVucGNrbGJ3ICB5bW1ELCB5bW1ELCB5bW1GICA7IHltbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAxTCAxUCAxVCAySCAyTCAyUCAyVCAwSSAwTSAwUSAwVSAxSSAxTSAxUSAxVSkKKyAgICB2cHVucGNraGJ3ICB5bW1HLCB5bW1HLCB5bW1GICA7IHltbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAyTSAyUSAyVSAwSiAwTiAwUiAwViAxSiAxTiAxUiAxViAySiAyTiAyUiAyVikKKworICAgIHZtb3ZkcWEgICAgIHltbUUsIHltbUEKKyAgICB2cHNsbGRxICAgICB5bW1BLCB5bW1BLCA4ICAgICA7IHltbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAwRyAwSyAwTyAwUyAxRyAxSyAxTyAxUykKKyAgICB2cHNybGRxICAgICB5bW1FLCB5bW1FLCA4ICAgICA7IHltbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAySyAyTyAyUyAwSCAwTCAwUCAwVCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHZwdW5wY2toYncgIHltbUEsIHltbUEsIHltbUQgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBJIDBLIDBNIDBPIDBRIDBTIDBVIDFHIDFJIDFLIDFNIDFPIDFRIDFTIDFVKQorICAgIHZwc2xsZHEgICAgIHltbUQsIHltbUQsIDggICAgIDsgeW1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDFIIDFMIDFQIDFUIDJIIDJMIDJQIDJUKQorCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRyAgOyB5bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUgMEggMEogMEwgME4gMFAgMFIgMFQgMFYpCisgICAgdnB1bnBja2hidyAgeW1tRCwgeW1tRCwgeW1tRyAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYpCisKKyAgICB2cHhvciAgICAgICB5bW1ILCB5bW1ILCB5bW1ICisKKyAgICB2bW92ZHFhICAgICB5bW1DLCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tSCAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSkKKyAgICB2cHVucGNraGJ3ICB5bW1DLCB5bW1DLCB5bW1IICA7IHltbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFIDFHIDFJIDFLIDFNIDFPIDFRIDFTIDFVKQorCisgICAgdm1vdmRxYSAgICAgeW1tQiwgeW1tRQorICAgIHZwdW5wY2tsYncgIHltbUUsIHltbUUsIHltbUggIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUpCisgICAgdnB1bnBja2hidyAgeW1tQiwgeW1tQiwgeW1tSCAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAwSCAwSiAwTCAwTiAwUCAwUiAwVCAwVikKKworICAgIHZtb3ZkcWEgICAgIHltbUYsIHltbUQKKyAgICB2cHVucGNrbGJ3ICB5bW1ELCB5bW1ELCB5bW1IICA7IHltbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWKQorICAgIHZwdW5wY2toYncgIHltbUYsIHltbUYsIHltbUggIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYpCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8xNgorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQyCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisgICAgdm1vdmQgICAgICAgeG1tQSwgWE1NX0RXT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvOAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICB2bW92cSAgICAgICB4bW1GLCBYTU1fTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisgICAgdnBzbGxkcSAgICAgeG1tQSwgeG1tQSwgU0laRU9GX01NV09SRAorICAgIHZwb3IgICAgICAgIHhtbUEsIHhtbUEsIHhtbUYKKy5jb2x1bW5fbGQ0OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC80CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDgKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorICAgIHZtb3ZkcWEgICAgIHhtbUYsIHhtbUEKKyAgICB2cGVybTJpMTI4ICB5bW1GLCB5bW1GLCB5bW1GLCAxCisgICAgdm1vdmRxdSAgICAgeG1tQSwgWE1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorICAgIHZwb3IgICAgICAgIHltbUEsIHltbUEsIHltbUYKKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8yCisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDE2CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICB2bW92ZHFhICAgICB5bW1GLCB5bW1BCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICB2bW92ZHFhICAgICB5bW1FLCB5bW1BCisgICAgdm1vdmRxYSAgICAgeW1tSCwgeW1tRgorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUYsIFlNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUYsIFlNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUUsIFlNTVdPUkQgW2VzaSsyKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUgsIFlNTVdPUkQgW2VzaSszKlNJWkVPRl9ZTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisgICAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgOyB5bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgOyB5bW1FPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1BCisgICAgdmluc2VydGkxMjggeW1tQSwgeW1tQSwgeG1tRSwgMSAgICAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgM0cgMEggMUggMkggM0ggMEkgMUkgMkkgM0kgMEogMUogMkogM0opCisgICAgdnBlcm0yaTEyOCAgeW1tRSwgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1GCisgICAgdmluc2VydGkxMjggeW1tRiwgeW1tRiwgeG1tSCwgMSAgICAgOyB5bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMU8gMk8gM08gMFAgMVAgMlAgM1AgMFEgMVEgMlEgM1EgMFIgMVIgMlIgM1IpCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tQiwgeW1tSCwgMHgzMSAgOyB5bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRSAgICAgIDsgeW1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwSyAxRyAxSyAyRyAySyAzRyAzSyAwSCAwTCAxSCAxTCAySCAyTCAzSCAzTCkKKyAgICB2cHVucGNraGJ3ICB5bW1ELCB5bW1ELCB5bW1FICAgICAgOyB5bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBJIDBNIDFJIDFNIDJJIDJNIDNJIDNNIDBKIDBOIDFKIDFOIDJKIDJOIDNKIDNOKQorCisgICAgdm1vdmRxYSAgICAgeW1tQywgeW1tRgorICAgIHZwdW5wY2tsYncgIHltbUYsIHltbUYsIHltbUggICAgICA7IHltbUY9KDA4IDBDIDE4IDFDIDI4IDJDIDM4IDNDIDA5IDBEIDE5IDFEIDI5IDJEIDM5IDNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMFMgMU8gMVMgMk8gMlMgM08gM1MgMFAgMFQgMVAgMVQgMlAgMlQgM1AgM1QpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tSCAgICAgIDsgeW1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUSAwVSAxUSAxVSAyUSAyVSAzUSAzVSAwUiAwViAxUiAxViAyUiAyViAzUiAzVikKKworICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1GICAgICAgOyB5bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTIDJHIDJLIDJPIDJTIDNHIDNLIDNPIDNTKQorICAgIHZwdW5wY2tod2QgIHltbUIsIHltbUIsIHltbUYgICAgICA7IHltbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMEwgMFAgMFQgMUggMUwgMVAgMVQgMkggMkwgMlAgMlQgM0ggM0wgM1AgM1QpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1ECisgICAgdnB1bnBja2x3ZCAgeW1tRCwgeW1tRCwgeW1tQyAgICAgIDsgeW1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSSAwTSAwUSAwVSAxSSAxTSAxUSAxVSAySSAyTSAyUSAyVSAzSSAzTSAzUSAzVSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1HLCB5bW1DICAgICAgOyB5bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBKIDBOIDBSIDBWIDFKIDFOIDFSIDFWIDJKIDJOIDJSIDJWIDNKIDNOIDNSIDNWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRSwgeW1tQQorICAgIHZwdW5wY2tsYncgIHltbUEsIHltbUEsIHltbUQgICAgICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisgICAgdnB1bnBja2hidyAgeW1tRSwgeW1tRSwgeW1tRCAgICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSkKKworICAgIHZtb3ZkcWEgICAgIHltbUgsIHltbUIKKyAgICB2cHVucGNrbGJ3ICB5bW1CLCB5bW1CLCB5bW1HICAgICAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWKQorICAgIHZwdW5wY2toYncgIHltbUgsIHltbUgsIHltbUcgICAgICA7IHltbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgM0ggM0ogM0wgM04gM1AgM1IgM1QgM1YpCisKKyAgICB2cHhvciAgICAgICB5bW1GLCB5bW1GLCB5bW1GCisKKyAgICB2bW92ZHFhICAgICB5bW1DLCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRiAgICAgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tRiAgICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1CCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRiAgICAgIDsgeW1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMEggMEogMEwgME4gMFAgMFIgMFQgMFYpCisgICAgdnB1bnBja2hidyAgeW1tRCwgeW1tRCwgeW1tRiAgICAgIDsgeW1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1FCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRiAgICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUpCisgICAgdnB1bnBja2hidyAgeW1tRywgeW1tRywgeW1tRiAgICAgIDsgeW1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgM0cgM0kgM0sgM00gM08gM1EgM1MgM1UpCisKKyAgICB2cHVucGNrbGJ3ICB5bW1GLCB5bW1GLCB5bW1ICisgICAgdnB1bnBja2hidyAgeW1tSCwgeW1tSCwgeW1tSAorICAgIHZwc3JsdyAgICAgIHltbUYsIHltbUYsIEJZVEVfQklUICA7IHltbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDJIIDJKIDJMIDJOIDJQIDJSIDJUIDJWKQorICAgIHZwc3JsdyAgICAgIHltbUgsIHltbUgsIEJZVEVfQklUICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWKQorCislZW5kaWYgIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyB5bW0wPVIoMDI0NjhBQ0VHSUtNT1FTVSk9UkUsIHltbTI9RygwMjQ2OEFDRUdJS01PUVNVKT1HRSwgeW1tND1CKDAyNDY4QUNFR0lLTU9RU1UpPUJFCisgICAgOyB5bW0xPVIoMTM1NzlCREZISkxOUFJUVik9Uk8sIHltbTM9RygxMzU3OUJERkhKTE5QUlRWKT1HTywgeW1tNT1CKDEzNTc5QkRGSEpMTlBSVFYpPUJPCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICAgIDsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgIDsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKyAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICA7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDApXSwgeW1tMCAgIDsgd2soMCk9UkUKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTEgICA7IHdrKDEpPVJPCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMildLCB5bW00ICAgOyB3aygyKT1CRQorICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDMpXSwgeW1tNSAgIDsgd2soMyk9Qk8KKworICAgIHZtb3ZkcWEgICAgIHltbTYsIHltbTEKKyAgICB2cHVucGNrbHdkICB5bW0xLCB5bW0xLCB5bW0zCisgICAgdnB1bnBja2h3ZCAgeW1tNiwgeW1tNiwgeW1tMworICAgIHZtb3ZkcWEgICAgIHltbTcsIHltbTEKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW02CisgICAgdnBtYWRkd2QgICAgeW1tMSwgeW1tMSwgW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSAgOyB5bW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisgICAgdnBtYWRkd2QgICAgeW1tNiwgeW1tNiwgW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSAgOyB5bW02PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisgICAgdnBtYWRkd2QgICAgeW1tNywgeW1tNywgW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSAgOyB5bW03PVJPTCotRklYKDAuMTY4KStHT0wqLUZJWCgwLjMzMSkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldICA7IHltbTQ9Uk9IKi1GSVgoMC4xNjgpK0dPSCotRklYKDAuMzMxKQorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soNCldLCB5bW0xICAgOyB3ayg0KT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDUpXSwgeW1tNiAgIDsgd2soNSk9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKworICAgIHZweG9yICAgICAgIHltbTEsIHltbTEsIHltbTEKKyAgICB2cHhvciAgICAgICB5bW02LCB5bW02LCB5bW02CisgICAgdnB1bnBja2x3ZCAgeW1tMSwgeW1tMSwgeW1tNSAgICAgICAgOyB5bW0xPUJPTAorICAgIHZwdW5wY2tod2QgIHltbTYsIHltbTYsIHltbTUgICAgICAgIDsgeW1tNj1CT0gKKyAgICB2cHNybGQgICAgICB5bW0xLCB5bW0xLCAxICAgICAgICAgICA7IHltbTE9Qk9MKkZJWCgwLjUwMCkKKyAgICB2cHNybGQgICAgICB5bW02LCB5bW02LCAxICAgICAgICAgICA7IHltbTY9Qk9IKkZJWCgwLjUwMCkKKworICAgIHZtb3ZkcWEgICAgIHltbTUsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildICA7IHltbTU9W1BEX09ORUhBTEZNMV9DSl0KKworICAgIHZwYWRkZCAgICAgIHltbTcsIHltbTcsIHltbTEKKyAgICB2cGFkZGQgICAgICB5bW00LCB5bW00LCB5bW02CisgICAgdnBhZGRkICAgICAgeW1tNywgeW1tNywgeW1tNQorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTUKKyAgICB2cHNybGQgICAgICB5bW03LCB5bW03LCBTQ0FMRUJJVFMgICA7IHltbTc9Q2JPTAorICAgIHZwc3JsZCAgICAgIHltbTQsIHltbTQsIFNDQUxFQklUUyAgIDsgeW1tND1DYk9ICisgICAgdnBhY2tzc2R3ICAgeW1tNywgeW1tNywgeW1tNCAgICAgICAgOyB5bW03PUNiTworCisgICAgdm1vdmRxYSAgICAgeW1tMSwgWU1NV09SRCBbd2soMildICAgOyB5bW0xPUJFCisKKyAgICB2bW92ZHFhICAgICB5bW02LCB5bW0wCisgICAgdnB1bnBja2x3ZCAgeW1tMCwgeW1tMCwgeW1tMgorICAgIHZwdW5wY2tod2QgIHltbTYsIHltbTYsIHltbTIKKyAgICB2bW92ZHFhICAgICB5bW01LCB5bW0wCisgICAgdm1vdmRxYSAgICAgeW1tNCwgeW1tNgorICAgIHZwbWFkZHdkICAgIHltbTAsIHltbTAsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeW1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeW1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTUsIHltbTUsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgeW1tNT1SRUwqLUZJWCgwLjE2OCkrR0VMKi1GSVgoMC4zMzEpCisgICAgdnBtYWRkd2QgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSAgOyB5bW00PVJFSCotRklYKDAuMTY4KStHRUgqLUZJWCgwLjMzMSkKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDYpXSwgeW1tMCAgIDsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3ayg3KV0sIHltbTYgICA7IHdrKDcpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICB2cHhvciAgICAgICB5bW0wLCB5bW0wLCB5bW0wCisgICAgdnB4b3IgICAgICAgeW1tNiwgeW1tNiwgeW1tNgorICAgIHZwdW5wY2tsd2QgIHltbTAsIHltbTAsIHltbTEgICAgICAgIDsgeW1tMD1CRUwKKyAgICB2cHVucGNraHdkICB5bW02LCB5bW02LCB5bW0xICAgICAgICA7IHltbTY9QkVICisgICAgdnBzcmxkICAgICAgeW1tMCwgeW1tMCwgMSAgICAgICAgICAgOyB5bW0wPUJFTCpGSVgoMC41MDApCisgICAgdnBzcmxkICAgICAgeW1tNiwgeW1tNiwgMSAgICAgICAgICAgOyB5bW02PUJFSCpGSVgoMC41MDApCisKKyAgICB2bW92ZHFhICAgICB5bW0xLCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyB5bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICB2cGFkZGQgICAgICB5bW01LCB5bW01LCB5bW0wCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgeW1tNgorICAgIHZwYWRkZCAgICAgIHltbTUsIHltbTUsIHltbTEKKyAgICB2cGFkZGQgICAgICB5bW00LCB5bW00LCB5bW0xCisgICAgdnBzcmxkICAgICAgeW1tNSwgeW1tNSwgU0NBTEVCSVRTICAgOyB5bW01PUNiRUwKKyAgICB2cHNybGQgICAgICB5bW00LCB5bW00LCBTQ0FMRUJJVFMgICA7IHltbTQ9Q2JFSAorICAgIHZwYWNrc3NkdyAgIHltbTUsIHltbTUsIHltbTQgICAgICAgIDsgeW1tNT1DYkUKKworICAgIHZwc2xsdyAgICAgIHltbTcsIHltbTcsIEJZVEVfQklUCisgICAgdnBvciAgICAgICAgeW1tNSwgeW1tNSwgeW1tNyAgICAgICAgOyB5bW01PUNiCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWJ4XSwgeW1tNSAgICAgOyBTYXZlIENiCisKKyAgICB2bW92ZHFhICAgICB5bW0wLCBZTU1XT1JEIFt3aygzKV0gICA7IHltbTA9Qk8KKyAgICB2bW92ZHFhICAgICB5bW02LCBZTU1XT1JEIFt3aygyKV0gICA7IHltbTY9QkUKKyAgICB2bW92ZHFhICAgICB5bW0xLCBZTU1XT1JEIFt3aygxKV0gICA7IHltbTE9Uk8KKworICAgIHZtb3ZkcWEgICAgIHltbTQsIHltbTAKKyAgICB2cHVucGNrbHdkICB5bW0wLCB5bW0wLCB5bW0zCisgICAgdnB1bnBja2h3ZCAgeW1tNCwgeW1tNCwgeW1tMworICAgIHZtb3ZkcWEgICAgIHltbTcsIHltbTAKKyAgICB2bW92ZHFhICAgICB5bW01LCB5bW00CisgICAgdnBtYWRkd2QgICAgeW1tMCwgeW1tMCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyB5bW0wPUJPTCpGSVgoMC4xMTQpK0dPTCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyB5bW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tNywgeW1tNywgW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSAgOyB5bW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKKyAgICB2cG1hZGR3ZCAgICB5bW01LCB5bW01LCBbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldICA7IHltbTU9Qk9IKi1GSVgoMC4wODEpK0dPSCotRklYKDAuNDE4KQorCisgICAgdm1vdmRxYSAgICAgeW1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildICAgICAgICAgICAgOyB5bW0zPVtQRF9PTkVIQUxGXQorCisgICAgdnBhZGRkICAgICAgeW1tMCwgeW1tMCwgWU1NV09SRCBbd2soNCldCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgWU1NV09SRCBbd2soNSldCisgICAgdnBhZGRkICAgICAgeW1tMCwgeW1tMCwgeW1tMworICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTMKKyAgICB2cHNybGQgICAgICB5bW0wLCB5bW0wLCBTQ0FMRUJJVFMgICA7IHltbTA9WU9MCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTICAgOyB5bW00PVlPSAorICAgIHZwYWNrc3NkdyAgIHltbTAsIHltbTAsIHltbTQgICAgICAgIDsgeW1tMD1ZTworCisgICAgdnB4b3IgICAgICAgeW1tMywgeW1tMywgeW1tMworICAgIHZweG9yICAgICAgIHltbTQsIHltbTQsIHltbTQKKyAgICB2cHVucGNrbHdkICB5bW0zLCB5bW0zLCB5bW0xICAgICAgICA7IHltbTM9Uk9MCisgICAgdnB1bnBja2h3ZCAgeW1tNCwgeW1tNCwgeW1tMSAgICAgICAgOyB5bW00PVJPSAorICAgIHZwc3JsZCAgICAgIHltbTMsIHltbTMsIDEgICAgICAgICAgIDsgeW1tMz1ST0wqRklYKDAuNTAwKQorICAgIHZwc3JsZCAgICAgIHltbTQsIHltbTQsIDEgICAgICAgICAgIDsgeW1tND1ST0gqRklYKDAuNTAwKQorCisgICAgdm1vdmRxYSAgICAgeW1tMSwgW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gIDsgeW1tMT1bUERfT05FSEFMRk0xX0NKXQorCisgICAgdnBhZGRkICAgICAgeW1tNywgeW1tNywgeW1tMworICAgIHZwYWRkZCAgICAgIHltbTUsIHltbTUsIHltbTQKKyAgICB2cGFkZGQgICAgICB5bW03LCB5bW03LCB5bW0xCisgICAgdnBhZGRkICAgICAgeW1tNSwgeW1tNSwgeW1tMQorICAgIHZwc3JsZCAgICAgIHltbTcsIHltbTcsIFNDQUxFQklUUyAgIDsgeW1tNz1Dck9MCisgICAgdnBzcmxkICAgICAgeW1tNSwgeW1tNSwgU0NBTEVCSVRTICAgOyB5bW01PUNyT0gKKyAgICB2cGFja3NzZHcgICB5bW03LCB5bW03LCB5bW01ICAgICAgICA7IHltbTc9Q3JPCisKKyAgICB2bW92ZHFhICAgICB5bW0zLCBZTU1XT1JEIFt3aygwKV0gICA7IHltbTM9UkUKKworICAgIHZtb3ZkcWEgICAgIHltbTQsIHltbTYKKyAgICB2cHVucGNrbHdkICB5bW02LCB5bW02LCB5bW0yCisgICAgdnB1bnBja2h3ZCAgeW1tNCwgeW1tNCwgeW1tMgorICAgIHZtb3ZkcWEgICAgIHltbTEsIHltbTYKKyAgICB2bW92ZHFhICAgICB5bW01LCB5bW00CisgICAgdnBtYWRkd2QgICAgeW1tNiwgeW1tNiwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyB5bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyB5bW00PUJFSCpGSVgoMC4xMTQpK0dFSCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tMSwgeW1tMSwgW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSAgOyB5bW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKyAgICB2cG1hZGR3ZCAgICB5bW01LCB5bW01LCBbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldICA7IHltbTU9QkVIKi1GSVgoMC4wODEpK0dFSCotRklYKDAuNDE4KQorCisgICAgdm1vdmRxYSAgICAgeW1tMiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildICAgICAgICAgICAgOyB5bW0yPVtQRF9PTkVIQUxGXQorCisgICAgdnBhZGRkICAgICAgeW1tNiwgeW1tNiwgWU1NV09SRCBbd2soNildCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgWU1NV09SRCBbd2soNyldCisgICAgdnBhZGRkICAgICAgeW1tNiwgeW1tNiwgeW1tMgorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTIKKyAgICB2cHNybGQgICAgICB5bW02LCB5bW02LCBTQ0FMRUJJVFMgICA7IHltbTY9WUVMCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTICAgOyB5bW00PVlFSAorICAgIHZwYWNrc3NkdyAgIHltbTYsIHltbTYsIHltbTQgICAgICAgIDsgeW1tNj1ZRQorCisgICAgdnBzbGx3ICAgICAgeW1tMCwgeW1tMCwgQllURV9CSVQKKyAgICB2cG9yICAgICAgICB5bW02LCB5bW02LCB5bW0wICAgICAgICA7IHltbTY9WQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaV0sIHltbTYgICAgIDsgU2F2ZSBZCisKKyAgICB2cHhvciAgICAgICB5bW0yLCB5bW0yLCB5bW0yCisgICAgdnB4b3IgICAgICAgeW1tNCwgeW1tNCwgeW1tNAorICAgIHZwdW5wY2tsd2QgIHltbTIsIHltbTIsIHltbTMgICAgICAgIDsgeW1tMj1SRUwKKyAgICB2cHVucGNraHdkICB5bW00LCB5bW00LCB5bW0zICAgICAgICA7IHltbTQ9UkVICisgICAgdnBzcmxkICAgICAgeW1tMiwgeW1tMiwgMSAgICAgICAgICAgOyB5bW0yPVJFTCpGSVgoMC41MDApCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgMSAgICAgICAgICAgOyB5bW00PVJFSCpGSVgoMC41MDApCisKKyAgICB2bW92ZHFhICAgICB5bW0wLCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyB5bW0wPVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICB2cGFkZGQgICAgICB5bW0xLCB5bW0xLCB5bW0yCisgICAgdnBhZGRkICAgICAgeW1tNSwgeW1tNSwgeW1tNAorICAgIHZwYWRkZCAgICAgIHltbTEsIHltbTEsIHltbTAKKyAgICB2cGFkZGQgICAgICB5bW01LCB5bW01LCB5bW0wCisgICAgdnBzcmxkICAgICAgeW1tMSwgeW1tMSwgU0NBTEVCSVRTICAgOyB5bW0xPUNyRUwKKyAgICB2cHNybGQgICAgICB5bW01LCB5bW01LCBTQ0FMRUJJVFMgICA7IHltbTU9Q3JFSAorICAgIHZwYWNrc3NkdyAgIHltbTEsIHltbTEsIHltbTUgICAgICAgIDsgeW1tMT1DckUKKworICAgIHZwc2xsdyAgICAgIHltbTcsIHltbTcsIEJZVEVfQklUCisgICAgdnBvciAgICAgICAgeW1tMSwgeW1tMSwgeW1tNyAgICAgICAgOyB5bW0xPUNyCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWR4XSwgeW1tMSAgICAgOyBTYXZlIENyCisKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBhZGQgICAgICAgICBlc2ksIFJHQl9QSVhFTFNJWkUqU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgICAgICAgIDsgb3V0cHRyMAorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgICAgICAgICAgOyBvdXRwdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgICAgICAgICA7IG91dHB0cjIKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5fbGQxCisKKyAgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVieAorICAgIHBvcCAgICAgICAgIGVkeAorICAgIHBvcHBpYyAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9idWYKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBkZWMgICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisucmV0dXJuOgorICAgIHZ6ZXJvdXBwZXIKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sZXh0LW1teC5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNjb2xleHQtbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTJjMzBlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sZXh0LW1teC5hc20KQEAgLTAsMCArMSw0NzggQEAKKzsKKzsgamNjb2xleHQuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcmdiX3ljY19jb252ZXJ0X21teChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAoYikgKyA4ICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgKGIpICsgMTIgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3JvdworJWRlZmluZSBudW1fcm93cyhiKSAgICAoYikgKyAyNCAgICAgICAgIDsgaW50IG51bV9yb3dzCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDgKKyVkZWZpbmUgZ290cHRyICAgICAgICAgd2soMCkgLSBTSVpFT0ZfUE9JTlRFUiAgOyB2b2lkICogZ290cHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14KQorCitFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgIDsgYWxpZ24gdG8gNjQgYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVheCldICA7IG51bV9jb2xzCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfcm93KGVheCldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtlc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VzaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZXNpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbGVhICAgICAgICAgZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbGVhICAgICAgICAgZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbGVhICAgICAgICAgZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaHBpYyAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWR4CisgICAgcHVzaCAgICAgICAgZWJ4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlYnhdICAgICA7IG91dHB0cjEKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZHhdICAgICA7IG91dHB0cjIKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamFlICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIHhvciAgICAgICAgIGVheCwgZWF4CisgICAgbW92ICAgICAgICAgYWwsIEJZVEUgW2VzaStlY3hdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1dPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHhvciAgICAgICAgIGVkeCwgZWR4CisgICAgbW92ICAgICAgICAgZHgsIFdPUkQgW2VzaStlY3hdCisgICAgc2hsICAgICAgICAgZWF4LCBXT1JEX0JJVAorICAgIG9yICAgICAgICAgIGVheCwgZWR4CisuY29sdW1uX2xkNDoKKyAgICBtb3ZkICAgICAgICBtbUEsIGVheAorICAgIHBvcCAgICAgICAgIGVkeAorICAgIHBvcCAgICAgICAgIGVheAorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfRFdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBtb3ZkICAgICAgICBtbUcsIERXT1JEIFtlc2krZWN4XQorICAgIHBzbGxxICAgICAgIG1tQSwgRFdPUkRfQklUCisgICAgcG9yICAgICAgICAgbW1BLCBtbUcKKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDE2CisgICAgbW92cSAgICAgICAgbW1HLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9NTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKy5jb2x1bW5fbGQxNjoKKyAgICB0ZXN0ICAgICAgICBjbCwgMipTSVpFT0ZfTU1XT1JECisgICAgbW92ICAgICAgICAgZWN4LCBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgbW92cSAgICAgICAgbW1GLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcDoKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUYsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKworLnJnYl95Y2NfY252OgorICAgIDsgbW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKKyAgICA7IG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgOyBtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KQorCisgICAgbW92cSAgICAgICAgbW1ELCBtbUEKKyAgICBwc2xscSAgICAgICBtbUEsIDQqQllURV9CSVQgICAgICAgICA7IG1tQT0oLS0gLS0gLS0gLS0gMDAgMTAgMjAgMDEpCisgICAgcHNybHEgICAgICAgbW1ELCA0KkJZVEVfQklUICAgICAgICAgOyBtbUQ9KDExIDIxIDAyIDEyIC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNraGJ3ICAgbW1BLCBtbUcgICAgICAgICAgICAgICAgOyBtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDAxIDA1KQorICAgIHBzbGxxICAgICAgIG1tRywgNCpCWVRFX0JJVCAgICAgICAgIDsgbW1HPSgtLSAtLSAtLSAtLSAyMiAwMyAxMyAyMykKKworICAgIHB1bnBja2xidyAgIG1tRCwgbW1GICAgICAgICAgICAgICAgIDsgbW1EPSgxMSAxNSAyMSAyNSAwMiAwNiAxMiAxNikKKyAgICBwdW5wY2toYncgICBtbUcsIG1tRiAgICAgICAgICAgICAgICA7IG1tRz0oMjIgMjYgMDMgMDcgMTMgMTcgMjMgMjcpCisKKyAgICBtb3ZxICAgICAgICBtbUUsIG1tQQorICAgIHBzbGxxICAgICAgIG1tQSwgNCpCWVRFX0JJVCAgICAgICAgIDsgbW1BPSgtLSAtLSAtLSAtLSAwMCAwNCAxMCAxNCkKKyAgICBwc3JscSAgICAgICBtbUUsIDQqQllURV9CSVQgICAgICAgICA7IG1tRT0oMjAgMjQgMDEgMDUgLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2toYncgICBtbUEsIG1tRCAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCisgICAgcHNsbHEgICAgICAgbW1ELCA0KkJZVEVfQklUICAgICAgICAgOyBtbUQ9KC0tIC0tIC0tIC0tIDExIDE1IDIxIDI1KQorCisgICAgcHVucGNrbGJ3ICAgbW1FLCBtbUcgICAgICAgICAgICAgICAgOyBtbUU9KDIwIDIyIDI0IDI2IDAxIDAzIDA1IDA3KQorICAgIHB1bnBja2hidyAgIG1tRCwgbW1HICAgICAgICAgICAgICAgIDsgbW1EPSgxMSAxMyAxNSAxNyAyMSAyMyAyNSAyNykKKworICAgIHB4b3IgICAgICAgIG1tSCwgbW1ICisKKyAgICBtb3ZxICAgICAgICBtbUMsIG1tQQorICAgIHB1bnBja2xidyAgIG1tQSwgbW1IICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNikKKyAgICBwdW5wY2toYncgICBtbUMsIG1tSCAgICAgICAgICAgICAgICA7IG1tQz0oMTAgMTIgMTQgMTYpCisKKyAgICBtb3ZxICAgICAgICBtbUIsIG1tRQorICAgIHB1bnBja2xidyAgIG1tRSwgbW1IICAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNikKKyAgICBwdW5wY2toYncgICBtbUIsIG1tSCAgICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMDUgMDcpCisKKyAgICBtb3ZxICAgICAgICBtbUYsIG1tRAorICAgIHB1bnBja2xidyAgIG1tRCwgbW1IICAgICAgICAgICAgICAgIDsgbW1EPSgxMSAxMyAxNSAxNykKKyAgICBwdW5wY2toYncgICBtbUYsIG1tSCAgICAgICAgICAgICAgICA7IG1tRj0oMjEgMjMgMjUgMjcpCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfTU1XT1JELzgKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKKyAgICBtb3ZkICAgICAgICBtbUEsIERXT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRC80CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisgICAgbW92cSAgICAgICAgbW1GLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDQ6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9NTVdPUkQvMgorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIG1vdnEgICAgICAgIG1tRCwgbW1BCisgICAgbW92cSAgICAgICAgbW1DLCBtbUYKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcDoKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUQsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUMsIE1NV09SRCBbZXNpKzMqU0laRU9GX01NV09SRF0KKworLnJnYl95Y2NfY252OgorICAgIDsgbW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICA7IG1tRj0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgOyBtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIDsgbW1DPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIG1vdnEgICAgICAgIG1tQiwgbW1BCisgICAgcHVucGNrbGJ3ICAgbW1BLCBtbUYgICAgICAgICAgICAgICAgOyBtbUE9KDAwIDAyIDEwIDEyIDIwIDIyIDMwIDMyKQorICAgIHB1bnBja2hidyAgIG1tQiwgbW1GICAgICAgICAgICAgICAgIDsgbW1CPSgwMSAwMyAxMSAxMyAyMSAyMyAzMSAzMykKKworICAgIG1vdnEgICAgICAgIG1tRywgbW1ECisgICAgcHVucGNrbGJ3ICAgbW1ELCBtbUMgICAgICAgICAgICAgICAgOyBtbUQ9KDA0IDA2IDE0IDE2IDI0IDI2IDM0IDM2KQorICAgIHB1bnBja2hidyAgIG1tRywgbW1DICAgICAgICAgICAgICAgIDsgbW1HPSgwNSAwNyAxNSAxNyAyNSAyNyAzNSAzNykKKworICAgIG1vdnEgICAgICAgIG1tRSwgbW1BCisgICAgcHVucGNrbHdkICAgbW1BLCBtbUQgICAgICAgICAgICAgICAgOyBtbUE9KDAwIDAyIDA0IDA2IDEwIDEyIDE0IDE2KQorICAgIHB1bnBja2h3ZCAgIG1tRSwgbW1EICAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAzMCAzMiAzNCAzNikKKworICAgIG1vdnEgICAgICAgIG1tSCwgbW1CCisgICAgcHVucGNrbHdkICAgbW1CLCBtbUcgICAgICAgICAgICAgICAgOyBtbUI9KDAxIDAzIDA1IDA3IDExIDEzIDE1IDE3KQorICAgIHB1bnBja2h3ZCAgIG1tSCwgbW1HICAgICAgICAgICAgICAgIDsgbW1IPSgyMSAyMyAyNSAyNyAzMSAzMyAzNSAzNykKKworICAgIHB4b3IgICAgICAgIG1tRiwgbW1GCisKKyAgICBtb3ZxICAgICAgICBtbUMsIG1tQQorICAgIHB1bnBja2xidyAgIG1tQSwgbW1GICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNikKKyAgICBwdW5wY2toYncgICBtbUMsIG1tRiAgICAgICAgICAgICAgICA7IG1tQz0oMTAgMTIgMTQgMTYpCisKKyAgICBtb3ZxICAgICAgICBtbUQsIG1tQgorICAgIHB1bnBja2xidyAgIG1tQiwgbW1GICAgICAgICAgICAgICAgIDsgbW1CPSgwMSAwMyAwNSAwNykKKyAgICBwdW5wY2toYncgICBtbUQsIG1tRiAgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcpCisKKyAgICBtb3ZxICAgICAgICBtbUcsIG1tRQorICAgIHB1bnBja2xidyAgIG1tRSwgbW1GICAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNikKKyAgICBwdW5wY2toYncgICBtbUcsIG1tRiAgICAgICAgICAgICAgICA7IG1tRz0oMzAgMzIgMzQgMzYpCisKKyAgICBwdW5wY2tsYncgICBtbUYsIG1tSAorICAgIHB1bnBja2hidyAgIG1tSCwgbW1ICisgICAgcHNybHcgICAgICAgbW1GLCBCWVRFX0JJVCAgICAgICAgICAgOyBtbUY9KDIxIDIzIDI1IDI3KQorICAgIHBzcmx3ICAgICAgIG1tSCwgQllURV9CSVQgICAgICAgICAgIDsgbW1IPSgzMSAzMyAzNSAzNykKKworJWVuZGlmICA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworICAgIDsgbW0wPShSMCBSMiBSNCBSNik9UkUsIG1tMj0oRzAgRzIgRzQgRzYpPUdFLCBtbTQ9KEIwIEIyIEI0IEI2KT1CRQorICAgIDsgbW0xPShSMSBSMyBSNSBSNyk9Uk8sIG1tMz0oRzEgRzMgRzUgRzcpPUdPLCBtbTU9KEIxIEIzIEI1IEI3KT1CTworCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuNTg3MDAgKiBHICsgMC4xMTQwMCAqIEIKKyAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICA7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC4zMzcwMCAqIEcgKyAwLjExNDAwICogQiArIDAuMjUwMDAgKiBHCisgICAgOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgICA7IHdrKDApPVJFCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMSAgICAgOyB3aygxKT1STworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMildLCBtbTQgICAgIDsgd2soMik9QkUKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDMpXSwgbW01ICAgICA7IHdrKDMpPUJPCisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMQorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW0zCisgICAgcHVucGNraHdkICAgbW02LCBtbTMKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMQorICAgIG1vdnEgICAgICAgIG1tNCwgbW02CisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIG1tNiwgW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSAgOyBtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKyAgICBwbWFkZHdkICAgICBtbTcsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgbW03PVJPTCotRklYKDAuMTY4KStHT0wqLUZJWCgwLjMzMSkKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgbW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soNCldLCBtbTEgICAgIDsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDUpXSwgbW02ICAgICA7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKyAgICBweG9yICAgICAgICBtbTEsIG1tMQorICAgIHB4b3IgICAgICAgIG1tNiwgbW02CisgICAgcHVucGNrbHdkICAgbW0xLCBtbTUgICAgICAgICAgICAgICAgOyBtbTE9Qk9MCisgICAgcHVucGNraHdkICAgbW02LCBtbTUgICAgICAgICAgICAgICAgOyBtbTY9Qk9ICisgICAgcHNybGQgICAgICAgbW0xLCAxICAgICAgICAgICAgICAgICAgOyBtbTE9Qk9MKkZJWCgwLjUwMCkKKyAgICBwc3JsZCAgICAgICBtbTYsIDEgICAgICAgICAgICAgICAgICA7IG1tNj1CT0gqRklYKDAuNTAwKQorCisgICAgbW92cSAgICAgICAgbW01LCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyBtbTU9W1BEX09ORUhBTEZNMV9DSl0KKworICAgIHBhZGRkICAgICAgIG1tNywgbW0xCisgICAgcGFkZGQgICAgICAgbW00LCBtbTYKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tNQorICAgIHBhZGRkICAgICAgIG1tNCwgbW01CisgICAgcHNybGQgICAgICAgbW03LCBTQ0FMRUJJVFMgICAgICAgICAgOyBtbTc9Q2JPTAorICAgIHBzcmxkICAgICAgIG1tNCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW00PUNiT0gKKyAgICBwYWNrc3NkdyAgICBtbTcsIG1tNCAgICAgICAgICAgICAgICA7IG1tNz1DYk8KKworICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFt3aygyKV0gICAgIDsgbW0xPUJFCisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0yCisgICAgcHVucGNraHdkICAgbW02LCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMAorICAgIG1vdnEgICAgICAgIG1tNCwgbW02CisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIG1tNiwgW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSAgOyBtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgbW01PVJFTCotRklYKDAuMTY4KStHRUwqLUZJWCgwLjMzMSkKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgbW00PVJFSCotRklYKDAuMTY4KStHRUgqLUZJWCgwLjMzMSkKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soNildLCBtbTAgICAgIDsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDcpXSwgbW02ICAgICA7IHdrKDcpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICBweG9yICAgICAgICBtbTAsIG1tMAorICAgIHB4b3IgICAgICAgIG1tNiwgbW02CisgICAgcHVucGNrbHdkICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9QkVMCisgICAgcHVucGNraHdkICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyBtbTY9QkVICisgICAgcHNybGQgICAgICAgbW0wLCAxICAgICAgICAgICAgICAgICAgOyBtbTA9QkVMKkZJWCgwLjUwMCkKKyAgICBwc3JsZCAgICAgICBtbTYsIDEgICAgICAgICAgICAgICAgICA7IG1tNj1CRUgqRklYKDAuNTAwKQorCisgICAgbW92cSAgICAgICAgbW0xLCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyBtbTE9W1BEX09ORUhBTEZNMV9DSl0KKworICAgIHBhZGRkICAgICAgIG1tNSwgbW0wCisgICAgcGFkZGQgICAgICAgbW00LCBtbTYKKyAgICBwYWRkZCAgICAgICBtbTUsIG1tMQorICAgIHBhZGRkICAgICAgIG1tNCwgbW0xCisgICAgcHNybGQgICAgICAgbW01LCBTQ0FMRUJJVFMgICAgICAgICAgOyBtbTU9Q2JFTAorICAgIHBzcmxkICAgICAgIG1tNCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW00PUNiRUgKKyAgICBwYWNrc3NkdyAgICBtbTUsIG1tNCAgICAgICAgICAgICAgICA7IG1tNT1DYkUKKworICAgIHBzbGx3ICAgICAgIG1tNywgQllURV9CSVQKKyAgICBwb3IgICAgICAgICBtbTUsIG1tNyAgICAgICAgICAgICAgICA7IG1tNT1DYgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWJ4XSwgbW01ICAgICAgIDsgU2F2ZSBDYgorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW3drKDMpXSAgICAgOyBtbTA9Qk8KKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbd2soMildICAgICA7IG1tNj1CRQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0xPVJPCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMAorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0zCisgICAgcHVucGNraHdkICAgbW00LCBtbTMKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMAorICAgIG1vdnEgICAgICAgIG1tNSwgbW00CisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIG1tNCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyBtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICBtbTcsIFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gIDsgbW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gIDsgbW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKworICAgIG1vdnEgICAgICAgIG1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildICA7IG1tMz1bUERfT05FSEFMRl0KKworICAgIHBhZGRkICAgICAgIG1tMCwgTU1XT1JEIFt3ayg0KV0KKyAgICBwYWRkZCAgICAgICBtbTQsIE1NV09SRCBbd2soNSldCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTMKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tMworICAgIHBzcmxkICAgICAgIG1tMCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW0wPVlPTAorICAgIHBzcmxkICAgICAgIG1tNCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW00PVlPSAorICAgIHBhY2tzc2R3ICAgIG1tMCwgbW00ICAgICAgICAgICAgICAgIDsgbW0wPVlPCisKKyAgICBweG9yICAgICAgICBtbTMsIG1tMworICAgIHB4b3IgICAgICAgIG1tNCwgbW00CisgICAgcHVucGNrbHdkICAgbW0zLCBtbTEgICAgICAgICAgICAgICAgOyBtbTM9Uk9MCisgICAgcHVucGNraHdkICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyBtbTQ9Uk9ICisgICAgcHNybGQgICAgICAgbW0zLCAxICAgICAgICAgICAgICAgICAgOyBtbTM9Uk9MKkZJWCgwLjUwMCkKKyAgICBwc3JsZCAgICAgICBtbTQsIDEgICAgICAgICAgICAgICAgICA7IG1tND1ST0gqRklYKDAuNTAwKQorCisgICAgbW92cSAgICAgICAgbW0xLCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyBtbTE9W1BEX09ORUhBTEZNMV9DSl0KKworICAgIHBhZGRkICAgICAgIG1tNywgbW0zCisgICAgcGFkZGQgICAgICAgbW01LCBtbTQKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tMQorICAgIHBhZGRkICAgICAgIG1tNSwgbW0xCisgICAgcHNybGQgICAgICAgbW03LCBTQ0FMRUJJVFMgICAgICAgICAgOyBtbTc9Q3JPTAorICAgIHBzcmxkICAgICAgIG1tNSwgU0NBTEVCSVRTICAgICAgICAgIDsgbW01PUNyT0gKKyAgICBwYWNrc3NkdyAgICBtbTcsIG1tNSAgICAgICAgICAgICAgICA7IG1tNz1Dck8KKworICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0zPVJFCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tNgorICAgIHB1bnBja2x3ZCAgIG1tNiwgbW0yCisgICAgcHVucGNraHdkICAgbW00LCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNgorICAgIG1vdnEgICAgICAgIG1tNSwgbW00CisgICAgcG1hZGR3ZCAgICAgbW02LCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIG1tNCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyBtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICBtbTEsIFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gIDsgbW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gIDsgbW01PUJFSCotRklYKDAuMDgxKStHRUgqLUZJWCgwLjQxOCkKKworICAgIG1vdnEgICAgICAgIG1tMiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildICAgICAgOyBtbTI9W1BEX09ORUhBTEZdCisKKyAgICBwYWRkZCAgICAgICBtbTYsIE1NV09SRCBbd2soNildCisgICAgcGFkZGQgICAgICAgbW00LCBNTVdPUkQgW3drKDcpXQorICAgIHBhZGRkICAgICAgIG1tNiwgbW0yCisgICAgcGFkZGQgICAgICAgbW00LCBtbTIKKyAgICBwc3JsZCAgICAgICBtbTYsIFNDQUxFQklUUyAgICAgICAgICA7IG1tNj1ZRUwKKyAgICBwc3JsZCAgICAgICBtbTQsIFNDQUxFQklUUyAgICAgICAgICA7IG1tND1ZRUgKKyAgICBwYWNrc3NkdyAgICBtbTYsIG1tNCAgICAgICAgICAgICAgICA7IG1tNj1ZRQorCisgICAgcHNsbHcgICAgICAgbW0wLCBCWVRFX0JJVAorICAgIHBvciAgICAgICAgIG1tNiwgbW0wICAgICAgICAgICAgICAgIDsgbW02PVkKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaV0sIG1tNiAgICAgICA7IFNhdmUgWQorCisgICAgcHhvciAgICAgICAgbW0yLCBtbTIKKyAgICBweG9yICAgICAgICBtbTQsIG1tNAorICAgIHB1bnBja2x3ZCAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPVJFTAorICAgIHB1bnBja2h3ZCAgIG1tNCwgbW0zICAgICAgICAgICAgICAgIDsgbW00PVJFSAorICAgIHBzcmxkICAgICAgIG1tMiwgMSAgICAgICAgICAgICAgICAgIDsgbW0yPVJFTCpGSVgoMC41MDApCisgICAgcHNybGQgICAgICAgbW00LCAxICAgICAgICAgICAgICAgICAgOyBtbTQ9UkVIKkZJWCgwLjUwMCkKKworICAgIG1vdnEgICAgICAgIG1tMCwgW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gIDsgbW0wPVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICBwYWRkZCAgICAgICBtbTEsIG1tMgorICAgIHBhZGRkICAgICAgIG1tNSwgbW00CisgICAgcGFkZGQgICAgICAgbW0xLCBtbTAKKyAgICBwYWRkZCAgICAgICBtbTUsIG1tMAorICAgIHBzcmxkICAgICAgIG1tMSwgU0NBTEVCSVRTICAgICAgICAgIDsgbW0xPUNyRUwKKyAgICBwc3JsZCAgICAgICBtbTUsIFNDQUxFQklUUyAgICAgICAgICA7IG1tNT1DckVICisgICAgcGFja3NzZHcgICAgbW0xLCBtbTUgICAgICAgICAgICAgICAgOyBtbTE9Q3JFCisKKyAgICBwc2xsdyAgICAgICBtbTcsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9Q3IKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeF0sIG1tMSAgICAgICA7IFNhdmUgQ3IKKworICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMAorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uX2xkMQorCisgICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlZHgKKyAgICBwb3BwaWMgICAgICBlYXgKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfYnVmCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgOyBudW1fcm93cworICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbGV4dC1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbGV4dC1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODMwNTYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sZXh0LXNzZTIuYXNtCkBAIC0wLDAgKzEsNTA1IEBACis7Cis7IGpjY29sZXh0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAoYikgKyA4ICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgKGIpICsgMTIgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3JvdworJWRlZmluZSBudW1fcm93cyhiKSAgICAoYikgKyAyNCAgICAgICAgIDsgaW50IG51bV9yb3dzCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgOAorJWRlZmluZSBnb3RwdHIgICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKiBnb3RwdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKQorCitFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd2soMCldCisgICAgcHVzaHBpYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworICAgIG1vdnBpYyAgICAgIFBPSU5URVIgW2dvdHB0cl0sIGVieCAgIDsgc2F2ZSBHT1QgYWRkcmVzcworCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWF4KV0KKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QSU1BR0UgW291dHB1dF9idWYoZWF4KV0KKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW291dHB1dF9yb3coZWF4KV0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBBUlJBWSBbZXNpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUEFSUkFZIFtlc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBsZWEgICAgICAgICBlZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICBlYngsIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICBlZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHBvcCAgICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9idWYoZWF4KV0KKyAgICBtb3YgICAgICAgICBlYXgsIElOVCBbbnVtX3Jvd3MoZWF4KV0KKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKyAgICBwdXNocGljICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBwdXNoICAgICAgICBlYngKKyAgICBwdXNoICAgICAgICBlZGkKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyMAorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VieF0gICAgIDsgb3V0cHRyMQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkeF0gICAgIDsgb3V0cHRyMgorICAgIG1vdnBpYyAgICAgIGVheCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorICAgIHB1c2ggICAgICAgIGVheAorICAgIHB1c2ggICAgICAgIGVkeAorICAgIGxlYSAgICAgICAgIGVjeCwgW2VjeCtlY3gqMl0gICAgICAgIDsgaW11bCBlY3gsUkdCX1BJWEVMU0laRQorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfQllURQorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQyCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9CWVRFCisgICAgbW92enggICAgICAgZWF4LCBCWVRFIFtlc2krZWN4XQorLmNvbHVtbl9sZDI6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBtb3Z6eCAgICAgICBlZHgsIFdPUkQgW2VzaStlY3hdCisgICAgc2hsICAgICAgICAgZWF4LCBXT1JEX0JJVAorICAgIG9yICAgICAgICAgIGVheCwgZWR4CisuY29sdW1uX2xkNDoKKyAgICBtb3ZkICAgICAgICB4bW1BLCBlYXgKKyAgICBwb3AgICAgICAgICBlZHgKKyAgICBwb3AgICAgICAgICBlYXgKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0RXT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDgKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgbW92ZCAgICAgICAgeG1tRiwgWE1NX0RXT1JEIFtlc2krZWN4XQorICAgIHBzbGxkcSAgICAgIHhtbUEsIFNJWkVPRl9EV09SRAorICAgIHBvciAgICAgICAgIHhtbUEsIHhtbUYKKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDE2CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBtb3ZxICAgICAgICB4bW1CLCBYTU1fTU1XT1JEIFtlc2krZWN4XQorICAgIHBzbGxkcSAgICAgIHhtbUEsIFNJWkVPRl9NTVdPUkQKKyAgICBwb3IgICAgICAgICB4bW1BLCB4bW1CCisuY29sdW1uX2xkMTY6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDMyCisgICAgbW92ZHFhICAgICAgeG1tRiwgeG1tQQorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKy5jb2x1bW5fbGQzMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgMipTSVpFT0ZfWE1NV09SRAorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1BCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tQiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCisKKy5yZ2JfeWNjX2NudjoKKyAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIDsgeG1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgOyB4bW1CPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUEKKyAgICBwc2xsZHEgICAgICB4bW1BLCA4ICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgIHBzcmxkcSAgICAgIHhtbUcsIDggICAgIDsgeG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2toYncgICB4bW1BLCB4bW1GICA7IHhtbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBKQorICAgIHBzbGxkcSAgICAgIHhtbUYsIDggICAgIDsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKyAgICBwdW5wY2tsYncgICB4bW1HLCB4bW1CICA7IHhtbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEKQorICAgIHB1bnBja2hidyAgIHhtbUYsIHhtbUIgIDsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1BCisgICAgcHNsbGRxICAgICAgeG1tQSwgOCAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKyAgICBwc3JsZHEgICAgICB4bW1ELCA4ICAgICA7IHhtbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNraGJ3ICAgeG1tQSwgeG1tRyAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKKyAgICBwc2xsZHEgICAgICB4bW1HLCA4ICAgICA7IHhtbUc9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCKQorCisgICAgcHVucGNrbGJ3ICAgeG1tRCwgeG1tRiAgOyB4bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSkKKyAgICBwdW5wY2toYncgICB4bW1HLCB4bW1GICA7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQorCisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIHBzbGxkcSAgICAgIHhtbUEsIDggICAgIDsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDQgMDggMEMgMTAgMTQgMTggMUMpCisgICAgcHNybGRxICAgICAgeG1tRSwgOCAgICAgOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHB1bnBja2hidyAgIHhtbUEsIHhtbUQgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgcHNsbGRxICAgICAgeG1tRCwgOCAgICAgOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKworICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUcgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgcHVucGNraGJ3ICAgeG1tRCwgeG1tRyAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKworICAgIHB4b3IgICAgICAgIHhtbUgsIHhtbUgKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1IICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgIHB1bnBja2hidyAgIHhtbUMsIHhtbUggIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1FCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tSCAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICBwdW5wY2toYncgICB4bW1CLCB4bW1IICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorCisgICAgbW92ZHFhICAgICAgeG1tRiwgeG1tRAorICAgIHB1bnBja2xidyAgIHhtbUQsIHhtbUggIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgcHVucGNraGJ3ICAgeG1tRiwgeG1tSCAgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKworJWVsc2UgIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzE2CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKyAgICBtb3ZkICAgICAgICB4bW1BLCBYTU1fRFdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC84CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgIG1vdnEgICAgICAgIHhtbUUsIFhNTV9NTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgcG9yICAgICAgICAgeG1tQSwgeG1tRQorLmNvbHVtbl9sZDQ6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8yCisgICAgbW92ICAgICAgICAgZWN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIG1vdmRxYSAgICAgIHhtbUYsIHhtbUEKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1FCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tSCwgWE1NV09SRCBbZXNpKzMqU0laRU9GX1hNTVdPUkRdCisKKy5yZ2JfeWNjX2NudjoKKyAgICA7IHhtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgIDsgeG1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgOyB4bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICA7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tQQorICAgIHB1bnBja2xidyAgIHhtbUEsIHhtbUUgICAgICA7IHhtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDMwIDM0IDAxIDA1IDExIDE1IDIxIDI1IDMxIDM1KQorICAgIHB1bnBja2hidyAgIHhtbUQsIHhtbUUgICAgICA7IHhtbUQ9KDAyIDA2IDEyIDE2IDIyIDI2IDMyIDM2IDAzIDA3IDEzIDE3IDIzIDI3IDMzIDM3KQorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tRgorICAgIHB1bnBja2xidyAgIHhtbUYsIHhtbUggICAgICA7IHhtbUY9KDA4IDBDIDE4IDFDIDI4IDJDIDM4IDNDIDA5IDBEIDE5IDFEIDI5IDJEIDM5IDNEKQorICAgIHB1bnBja2hidyAgIHhtbUMsIHhtbUggICAgICA7IHhtbUM9KDBBIDBFIDFBIDFFIDJBIDJFIDNBIDNFIDBCIDBGIDFCIDFGIDJCIDJGIDNCIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tQiwgeG1tQQorICAgIHB1bnBja2x3ZCAgIHhtbUEsIHhtbUYgICAgICA7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDKQorICAgIHB1bnBja2h3ZCAgIHhtbUIsIHhtbUYgICAgICA7IHhtbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNEKQorCisgICAgbW92ZHFhICAgICAgeG1tRywgeG1tRAorICAgIHB1bnBja2x3ZCAgIHhtbUQsIHhtbUMgICAgICA7IHhtbUQ9KDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDIyIDI2IDJBIDJFIDMyIDM2IDNBIDNFKQorICAgIHB1bnBja2h3ZCAgIHhtbUcsIHhtbUMgICAgICA7IHhtbUc9KDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGIDMzIDM3IDNCIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIHB1bnBja2xidyAgIHhtbUEsIHhtbUQgICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorICAgIHB1bnBja2hidyAgIHhtbUUsIHhtbUQgICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorCisgICAgbW92ZHFhICAgICAgeG1tSCwgeG1tQgorICAgIHB1bnBja2xidyAgIHhtbUIsIHhtbUcgICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorICAgIHB1bnBja2hidyAgIHhtbUgsIHhtbUcgICAgICA7IHhtbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQorCisgICAgcHhvciAgICAgICAgeG1tRiwgeG1tRgorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tQQorICAgIHB1bnBja2xidyAgIHhtbUEsIHhtbUYgICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgIHB1bnBja2hidyAgIHhtbUMsIHhtbUYgICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tQgorICAgIHB1bnBja2xidyAgIHhtbUIsIHhtbUYgICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorICAgIHB1bnBja2hidyAgIHhtbUQsIHhtbUYgICAgICA7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorCisgICAgbW92ZHFhICAgICAgeG1tRywgeG1tRQorICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUYgICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorICAgIHB1bnBja2hidyAgIHhtbUcsIHhtbUYgICAgICA7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorCisgICAgcHVucGNrbGJ3ICAgeG1tRiwgeG1tSAorICAgIHB1bnBja2hidyAgIHhtbUgsIHhtbUgKKyAgICBwc3JsdyAgICAgICB4bW1GLCBCWVRFX0JJVCAgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKyAgICBwc3JsdyAgICAgICB4bW1ILCBCWVRFX0JJVCAgOyB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKworJWVuZGlmICA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworICAgIDsgeG1tMD1SKDAyNDY4QUNFKT1SRSwgeG1tMj1HKDAyNDY4QUNFKT1HRSwgeG1tND1CKDAyNDY4QUNFKT1CRQorICAgIDsgeG1tMT1SKDEzNTc5QkRGKT1STywgeG1tMz1HKDEzNTc5QkRGKT1HTywgeG1tNT1CKDEzNTc5QkRGKT1CTworCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuNTg3MDAgKiBHICsgMC4xMTQwMCAqIEIKKyAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICA7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC4zMzcwMCAqIEcgKyAwLjExNDAwICogQiArIDAuMjUwMDAgKiBHCisgICAgOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPVJFCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0xICAgOyB3aygxKT1STworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tNCAgIDsgd2soMik9QkUKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTUgICA7IHdrKDMpPUJPCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tMworICAgIHB1bnBja2h3ZCAgIHhtbTYsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNgorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTcsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgeG1tNz1ST0wqLUZJWCgwLjE2OCkrR09MKi1GSVgoMC4zMzEpCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSAgOyB4bW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDQpXSwgeG1tMSAgIDsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTYgICA7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKyAgICBweG9yICAgICAgICB4bW0xLCB4bW0xCisgICAgcHhvciAgICAgICAgeG1tNiwgeG1tNgorICAgIHB1bnBja2x3ZCAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT1CT0wKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9Qk9ICisgICAgcHNybGQgICAgICAgeG1tMSwgMSAgICAgICAgICAgICAgICAgOyB4bW0xPUJPTCpGSVgoMC41MDApCisgICAgcHNybGQgICAgICAgeG1tNiwgMSAgICAgICAgICAgICAgICAgOyB4bW02PUJPSCpGSVgoMC41MDApCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyB4bW01PVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tNgorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTUKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW01CisgICAgcHNybGQgICAgICAgeG1tNywgU0NBTEVCSVRTICAgICAgICAgOyB4bW03PUNiT0wKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9Q2JPSAorICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz1DYk8KKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMT1CRQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMAorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTIKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IHhtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICBwbWFkZHdkICAgICB4bW02LCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IHhtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICBwbWFkZHdkICAgICB4bW01LCBbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldICA7IHhtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gIDsgeG1tND1SRUgqLUZJWCgwLjE2OCkrR0VIKi1GSVgoMC4zMzEpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTAgICA7IHdrKDYpPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNyldLCB4bW02ICAgOyB3ayg3KT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorCisgICAgcHhvciAgICAgICAgeG1tMCwgeG1tMAorICAgIHB4b3IgICAgICAgIHhtbTYsIHhtbTYKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9QkVMCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PUJFSAorICAgIHBzcmxkICAgICAgIHhtbTAsIDEgICAgICAgICAgICAgICAgIDsgeG1tMD1CRUwqRklYKDAuNTAwKQorICAgIHBzcmxkICAgICAgIHhtbTYsIDEgICAgICAgICAgICAgICAgIDsgeG1tNj1CRUgqRklYKDAuNTAwKQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTYKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMQorICAgIHBzcmxkICAgICAgIHhtbTUsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tNT1DYkVMCisgICAgcHNybGQgICAgICAgeG1tNCwgU0NBTEVCSVRTICAgICAgICAgOyB4bW00PUNiRUgKKyAgICBwYWNrc3NkdyAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9Q2JFCisKKyAgICBwc2xsdyAgICAgICB4bW03LCBCWVRFX0JJVAorICAgIHBvciAgICAgICAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT1DYgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VieF0sIHhtbTUgICAgIDsgU2F2ZSBDYgorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbd2soMyldICAgOyB4bW0wPUJPCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soMildICAgOyB4bW02PUJFCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMSldICAgOyB4bW0xPVJPCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0wCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tMworICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNAorICAgIHBtYWRkd2QgICAgIHhtbTAsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgeG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIHhtbTcsIFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gIDsgeG1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSAgOyB4bW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSAgOyB4bW0zPVtQRF9PTkVIQUxGXQorCisgICAgcGFkZGQgICAgICAgeG1tMCwgWE1NV09SRCBbd2soNCldCisgICAgcGFkZGQgICAgICAgeG1tNCwgWE1NV09SRCBbd2soNSldCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMworICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTMKKyAgICBwc3JsZCAgICAgICB4bW0wLCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTA9WU9MCisgICAgcHNybGQgICAgICAgeG1tNCwgU0NBTEVCSVRTICAgICAgICAgOyB4bW00PVlPSAorICAgIHBhY2tzc2R3ICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD1ZTworCisgICAgcHhvciAgICAgICAgeG1tMywgeG1tMworICAgIHB4b3IgICAgICAgIHhtbTQsIHhtbTQKKyAgICBwdW5wY2tsd2QgICB4bW0zLCB4bW0xICAgICAgICAgICAgICA7IHhtbTM9Uk9MCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PVJPSAorICAgIHBzcmxkICAgICAgIHhtbTMsIDEgICAgICAgICAgICAgICAgIDsgeG1tMz1ST0wqRklYKDAuNTAwKQorICAgIHBzcmxkICAgICAgIHhtbTQsIDEgICAgICAgICAgICAgICAgIDsgeG1tND1ST0gqRklYKDAuNTAwKQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMworICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMQorICAgIHBzcmxkICAgICAgIHhtbTcsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tNz1Dck9MCisgICAgcHNybGQgICAgICAgeG1tNSwgU0NBTEVCSVRTICAgICAgICAgOyB4bW01PUNyT0gKKyAgICBwYWNrc3NkdyAgICB4bW03LCB4bW01ICAgICAgICAgICAgICA7IHhtbTc9Q3JPCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9UkUKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0yCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00CisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyB4bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyB4bW00PUJFSCpGSVgoMC4xMTQpK0dFSCpGSVgoMC4yNTApCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSAgOyB4bW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKyAgICBwbWFkZHdkICAgICB4bW01LCBbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldICA7IHhtbTU9QkVIKi1GSVgoMC4wODEpK0dFSCotRklYKDAuNDE4KQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildICAgICAgOyB4bW0yPVtQRF9PTkVIQUxGXQorCisgICAgcGFkZGQgICAgICAgeG1tNiwgWE1NV09SRCBbd2soNildCisgICAgcGFkZGQgICAgICAgeG1tNCwgWE1NV09SRCBbd2soNyldCisgICAgcGFkZGQgICAgICAgeG1tNiwgeG1tMgorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTIKKyAgICBwc3JsZCAgICAgICB4bW02LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTY9WUVMCisgICAgcHNybGQgICAgICAgeG1tNCwgU0NBTEVCSVRTICAgICAgICAgOyB4bW00PVlFSAorICAgIHBhY2tzc2R3ICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj1ZRQorCisgICAgcHNsbHcgICAgICAgeG1tMCwgQllURV9CSVQKKyAgICBwb3IgICAgICAgICB4bW02LCB4bW0wICAgICAgICAgICAgICA7IHhtbTY9WQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaV0sIHhtbTYgICAgIDsgU2F2ZSBZCisKKyAgICBweG9yICAgICAgICB4bW0yLCB4bW0yCisgICAgcHhvciAgICAgICAgeG1tNCwgeG1tNAorICAgIHB1bnBja2x3ZCAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj1SRUwKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTQ9UkVICisgICAgcHNybGQgICAgICAgeG1tMiwgMSAgICAgICAgICAgICAgICAgOyB4bW0yPVJFTCpGSVgoMC41MDApCisgICAgcHNybGQgICAgICAgeG1tNCwgMSAgICAgICAgICAgICAgICAgOyB4bW00PVJFSCpGSVgoMC41MDApCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSAgOyB4bW0wPVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tNAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTAKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0wCisgICAgcHNybGQgICAgICAgeG1tMSwgU0NBTEVCSVRTICAgICAgICAgOyB4bW0xPUNyRUwKKyAgICBwc3JsZCAgICAgICB4bW01LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTU9Q3JFSAorICAgIHBhY2tzc2R3ICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT1DckUKKworICAgIHBzbGx3ICAgICAgIHhtbTcsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB4bW0xPUNyCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWR4XSwgeG1tMSAgICAgOyBTYXZlIENyCisKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgICAgICAgICA7IG91dHB0cjAKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgICAgICAgOyBvdXRwdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbl9sZDEKKworICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWR4CisgICAgcG9wcGljICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2J1ZgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbG9yLWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sb3ItYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4NTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbG9yLWF2eDIuYXNtCkBAIC0wLDAgKzEsMTIzIEBACis7Cis7IGpjY29sb3IuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChBVlgyKQorOworOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8wODEgZXF1ICA1MzI5ICAgICAgICAgICAgICAgIDsgRklYKDAuMDgxMzEpCitGXzBfMTE0IGVxdSAgNzQ3MSAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzE2OCBlcXUgMTEwNTkgICAgICAgICAgICAgICAgOyBGSVgoMC4xNjg3NCkKK0ZfMF8yNTAgZXF1IDE2Mzg0ICAgICAgICAgICAgICAgIDsgRklYKDAuMjUwMDApCitGXzBfMjk5IGVxdSAxOTU5NSAgICAgICAgICAgICAgICA7IEZJWCgwLjI5OTAwKQorRl8wXzMzMSBlcXUgMjE3MDkgICAgICAgICAgICAgICAgOyBGSVgoMC4zMzEyNikKK0ZfMF80MTggZXF1IDI3NDM5ICAgICAgICAgICAgICAgIDsgRklYKDAuNDE4NjkpCitGXzBfNTg3IGVxdSAzODQ3MCAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgKEZfMF81ODcgLSBGXzBfMjUwKSAgOyBGSVgoMC41ODcwMCkgLSBGSVgoMC4yNTAwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfcmdiX3ljY19jb252ZXJ0X2F2eDIpCisKK0VYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9hdngyKToKKworUFdfRjAyOTlfRjAzMzcgIHRpbWVzIDggZHcgIEZfMF8yOTksICBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgOCBkdyAgRl8wXzExNCwgIEZfMF8yNTAKK1BXX01GMDE2X01GMDMzICB0aW1lcyA4IGR3IC1GXzBfMTY4LCAtRl8wXzMzMQorUFdfTUYwMDhfTUYwNDEgIHRpbWVzIDggZHcgLUZfMF8wODEsIC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0ogdGltZXMgOCBkZCAgKDEgPDwgKFNDQUxFQklUUyAtIDEpKSAtIDEgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRiAgICAgIHRpbWVzIDggZGQgICgxIDw8IChTQ0FMRUJJVFMgLSAxKSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCisKKyVpbmNsdWRlICJqY2NvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9hdngyCislaW5jbHVkZSAiamNjb2xleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYXZ4MiAganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9hdngyCislaW5jbHVkZSAiamNjb2xleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyICBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWFJHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWFJHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hSR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjY29sZXh0LWF2eDIuYXNtIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sb3ItbW14LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbG9yLW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiZTllMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2NvbG9yLW1teC5hc20KQEAgLTAsMCArMSwxMjMgQEAKKzsKKzsgamNjb2xvci5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8wODEgZXF1ICA1MzI5ICAgICAgICAgICAgICAgIDsgRklYKDAuMDgxMzEpCitGXzBfMTE0IGVxdSAgNzQ3MSAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzE2OCBlcXUgMTEwNTkgICAgICAgICAgICAgICAgOyBGSVgoMC4xNjg3NCkKK0ZfMF8yNTAgZXF1IDE2Mzg0ICAgICAgICAgICAgICAgIDsgRklYKDAuMjUwMDApCitGXzBfMjk5IGVxdSAxOTU5NSAgICAgICAgICAgICAgICA7IEZJWCgwLjI5OTAwKQorRl8wXzMzMSBlcXUgMjE3MDkgICAgICAgICAgICAgICAgOyBGSVgoMC4zMzEyNikKK0ZfMF80MTggZXF1IDI3NDM5ICAgICAgICAgICAgICAgIDsgRklYKDAuNDE4NjkpCitGXzBfNTg3IGVxdSAzODQ3MCAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgKEZfMF81ODcgLSBGXzBfMjUwKSAgOyBGSVgoMC41ODcwMCkgLSBGSVgoMC4yNTAwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfcmdiX3ljY19jb252ZXJ0X21teCkKKworRVhUTihqY29uc3RfcmdiX3ljY19jb252ZXJ0X21teCk6CisKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyAyIGR3ICBGXzBfMjk5LCAgRl8wXzMzNworUFdfRjAxMTRfRjAyNTAgIHRpbWVzIDIgZHcgIEZfMF8xMTQsICBGXzBfMjUwCitQV19NRjAxNl9NRjAzMyAgdGltZXMgMiBkdyAtRl8wXzE2OCwgLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxICB0aW1lcyAyIGR3IC1GXzBfMDgxLCAtRl8wXzQxOAorUERfT05FSEFMRk0xX0NKIHRpbWVzIDIgZGQgICgxIDw8IChTQ0FMRUJJVFMgLSAxKSkgLSAxICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKK1BEX09ORUhBTEYgICAgICB0aW1lcyAyIGRkICAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorCislaW5jbHVkZSAiamNjb2xleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21teCAganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X21teAorJWluY2x1ZGUgImpjY29sZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14ICBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X21teAorJWluY2x1ZGUgImpjY29sZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXggIGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2NvbGV4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21teCAganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2NvbGV4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21teCAganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2NvbGV4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWFJHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWFJHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hSR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21teCAganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2NvbGV4dC1tbXguYXNtIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sb3Itc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNjb2xvci1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQ1ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjY29sb3Itc3NlMi5hc20KQEAgLTAsMCArMSwxMjIgQEAKKzsKKzsgamNjb2xvci5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKFNTRTIpCis7Cis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUyAgMTYKKworRl8wXzA4MSBlcXUgIDUzMjkgICAgICAgICAgICAgICAgOyBGSVgoMC4wODEzMSkKK0ZfMF8xMTQgZXF1ICA3NDcxICAgICAgICAgICAgICAgIDsgRklYKDAuMTE0MDApCitGXzBfMTY4IGVxdSAxMTA1OSAgICAgICAgICAgICAgICA7IEZJWCgwLjE2ODc0KQorRl8wXzI1MCBlcXUgMTYzODQgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1IDE5NTk1ICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfMzMxIGVxdSAyMTcwOSAgICAgICAgICAgICAgICA7IEZJWCgwLjMzMTI2KQorRl8wXzQxOCBlcXUgMjc0MzkgICAgICAgICAgICAgICAgOyBGSVgoMC40MTg2OSkKK0ZfMF81ODcgZXF1IDM4NDcwICAgICAgICAgICAgICAgIDsgRklYKDAuNTg3MDApCitGXzBfMzM3IGVxdSAoRl8wXzU4NyAtIEZfMF8yNTApICA7IEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMikKKworRVhUTihqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpOgorCitQV19GMDI5OV9GMDMzNyAgdGltZXMgNCBkdyAgRl8wXzI5OSwgIEZfMF8zMzcKK1BXX0YwMTE0X0YwMjUwICB0aW1lcyA0IGR3ICBGXzBfMTE0LCAgRl8wXzI1MAorUFdfTUYwMTZfTUYwMzMgIHRpbWVzIDQgZHcgLUZfMF8xNjgsIC1GXzBfMzMxCitQV19NRjAwOF9NRjA0MSAgdGltZXMgNCBkdyAtRl8wXzA4MSwgLUZfMF80MTgKK1BEX09ORUhBTEZNMV9DSiB0aW1lcyA0IGRkICAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpIC0gMSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0VOVEVSSlNBTVBMRSA8PCBTQ0FMRUJJVFMpCitQRF9PTkVIQUxGICAgICAgdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUyAtIDEpKQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKworJWluY2x1ZGUgImpjY29sZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyICBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIgIGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjb2xleHQtc3NlMi5hc20iCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNncmF5LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3JheS1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY2MjQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3JheS1hdngyLmFzbQpAQCAtMCwwICsxLDExNSBAQAorOworOyBqY2dyYXkuYXNtIC0gZ3JheXNjYWxlIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoQVZYMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMTE0IGVxdSAgNzQ3MSAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzI1MCBlcXUgMTYzODQgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1IDE5NTk1ICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAzODQ3MCAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgKEZfMF81ODcgLSBGXzBfMjUwKSAgOyBGSVgoMC41ODcwMCkgLSBGSVgoMC4yNTAwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfcmdiX2dyYXlfY29udmVydF9hdngyKQorCitFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIpOgorCitQV19GMDI5OV9GMDMzNyB0aW1lcyA4IGR3IEZfMF8yOTksIEZfMF8zMzcKK1BXX0YwMTE0X0YwMjUwIHRpbWVzIDggZHcgRl8wXzExNCwgRl8wXzI1MAorUERfT05FSEFMRiAgICAgdGltZXMgOCBkZCAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorCislaW5jbHVkZSAiamNncnlleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYXZ4MiAganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9hdngyCislaW5jbHVkZSAiamNncnlleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2dyeWV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyICBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2dyeWV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYXZ4MiAganNpbWRfZXh0YmdyeF9ncmF5X2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjZ3J5ZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyICBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9hdngyCislaW5jbHVkZSAiamNncnlleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2dyeWV4dC1hdngyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2dyYXktbW14LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2dyYXktbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M3ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3JheS1tbXguYXNtCkBAIC0wLDAgKzEsMTE1IEBACis7Cis7IGpjZ3JheS5hc20gLSBncmF5c2NhbGUgY29sb3JzcGFjZSBjb252ZXJzaW9uIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMTE0IGVxdSAgNzQ3MSAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzI1MCBlcXUgMTYzODQgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1IDE5NTk1ICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAzODQ3MCAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgKEZfMF81ODcgLSBGXzBfMjUwKSAgOyBGSVgoMC41ODcwMCkgLSBGSVgoMC4yNTAwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfcmdiX2dyYXlfY29udmVydF9tbXgpCisKK0VYVE4oamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfbW14KToKKworUFdfRjAyOTlfRjAzMzcgdGltZXMgMiBkdyBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCB0aW1lcyAyIGR3IEZfMF8xMTQsIEZfMF8yNTAKK1BEX09ORUhBTEYgICAgIHRpbWVzIDIgZGQgKDEgPDwgKFNDQUxFQklUUyAtIDEpKQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKworJWluY2x1ZGUgImpjZ3J5ZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfbW14ICBqc2ltZF9leHRyZ2JfZ3JheV9jb252ZXJ0X21teAorJWluY2x1ZGUgImpjZ3J5ZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X21teCAganNpbWRfZXh0cmdieF9ncmF5X2NvbnZlcnRfbW14CislaW5jbHVkZSAiamNncnlleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9tbXggIGpzaW1kX2V4dGJncl9ncmF5X2NvbnZlcnRfbW14CislaW5jbHVkZSAiamNncnlleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfbW14ICBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2dyeWV4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9tbXggIGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X21teAorJWluY2x1ZGUgImpjZ3J5ZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X21teCAganNpbWRfZXh0eHJnYl9ncmF5X2NvbnZlcnRfbW14CislaW5jbHVkZSAiamNncnlleHQtbW14LmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2dyYXktc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNncmF5LXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGM3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNncmF5LXNzZTIuYXNtCkBAIC0wLDAgKzEsMTE0IEBACis7Cis7IGpjZ3JheS5hc20gLSBncmF5c2NhbGUgY29sb3JzcGFjZSBjb252ZXJzaW9uIChTU0UyKQorOworOyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8xMTQgZXF1ICA3NDcxICAgICAgICAgICAgICAgIDsgRklYKDAuMTE0MDApCitGXzBfMjUwIGVxdSAxNjM4NCAgICAgICAgICAgICAgICA7IEZJWCgwLjI1MDAwKQorRl8wXzI5OSBlcXUgMTk1OTUgICAgICAgICAgICAgICAgOyBGSVgoMC4yOTkwMCkKK0ZfMF81ODcgZXF1IDM4NDcwICAgICAgICAgICAgICAgIDsgRklYKDAuNTg3MDApCitGXzBfMzM3IGVxdSAoRl8wXzU4NyAtIEZfMF8yNTApICA7IEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCisKK0VYVE4oamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfc3NlMik6CisKK1BXX0YwMjk5X0YwMzM3IHRpbWVzIDQgZHcgRl8wXzI5OSwgRl8wXzMzNworUFdfRjAxMTRfRjAyNTAgdGltZXMgNCBkdyBGXzBfMTE0LCBGXzBfMjUwCitQRF9PTkVIQUxGICAgICB0aW1lcyA0IGRkICgxIDw8IChTQ0FMRUJJVFMgLSAxKSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCisKKyVpbmNsdWRlICJqY2dyeWV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyICBqc2ltZF9leHRyZ2JfZ3JheV9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2dyeWV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMiAganNpbWRfZXh0cmdieF9ncmF5X2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjZ3J5ZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIgIGpzaW1kX2V4dGJncl9ncmF5X2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjZ3J5ZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyICBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNncnlleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIgIGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2dyeWV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMiAganNpbWRfZXh0eHJnYl9ncmF5X2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjZ3J5ZXh0LXNzZTIuYXNtIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3J5ZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3J5ZXh0LWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTk5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNncnlleHQtYXZ4Mi5hc20KQEAgLTAsMCArMSw0NTkgQEAKKzsKKzsgamNncnlleHQuYXNtIC0gZ3JheXNjYWxlIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoQVZYMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAoYikgKyA4ICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgKGIpICsgMTIgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3JvdworJWRlZmluZSBudW1fcm93cyhiKSAgICAoYikgKyAyNCAgICAgICAgIDsgaW50IG51bV9yb3dzCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9ZTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB5bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKiBnb3RwdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYXZ4MikKKworRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9ZTU1XT1JEKSAgOyBhbGlnbiB0byAyNTYgYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgbW92cGljICAgICAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXQorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBwdXNoICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZXNpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbGVhICAgICAgICAgZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaHBpYyAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIG1vdnp4ICAgICAgIGVheCwgQllURSBbZXNpK2VjeF0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgbW92enggICAgICAgZWR4LCBXT1JEIFtlc2krZWN4XQorICAgIHNobCAgICAgICAgIGVheCwgV09SRF9CSVQKKyAgICBvciAgICAgICAgICBlYXgsIGVkeAorLmNvbHVtbl9sZDQ6CisgICAgdm1vdmQgICAgICAgeG1tQSwgZWF4CisgICAgcG9wICAgICAgICAgZWR4CisgICAgcG9wICAgICAgICAgZWF4CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9EV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIHZtb3ZkICAgICAgIHhtbUYsIFhNTV9EV09SRCBbZXNpK2VjeF0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICB2cG9yICAgICAgICB4bW1BLCB4bW1BLCB4bW1GCisuY29sdW1uX2xkODoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgdm1vdnEgICAgICAgeG1tQiwgWE1NX01NV09SRCBbZXNpK2VjeF0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgdnBvciAgICAgICAgeG1tQSwgeG1tQSwgeG1tQgorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIHZtb3ZkcXUgICAgIHhtbUIsIFhNTV9NTVdPUkQgW2VzaStlY3hdCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQSwgeW1tQSwgMQorICAgIHZwb3IgICAgICAgIHltbUEsIHltbUIKKy5jb2x1bW5fbGQzMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNjQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICB2bW92ZHFhICAgICB5bW1GLCB5bW1BCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisuY29sdW1uX2xkNjQ6CisgICAgdGVzdCAgICAgICAgY2wsIDIqU0laRU9GX1lNTVdPUkQKKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2bW92ZHF1ICAgICB5bW1BLCBZTU1XT1JEIFtlc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1GLCBZTU1XT1JEIFtlc2krMSpTSVpFT0ZfWU1NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3A6CisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tRiwgWU1NV09SRCBbZXNpKzEqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tQiwgWU1NV09SRCBbZXNpKzIqU0laRU9GX1lNTVdPUkRdCisKKy5yZ2JfZ3JheV9jbnY6CisgICAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgIDsgICAgICAgMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgOyB5bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgOyB5bW1CPSgxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUQorICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisKKyAgICB2bW92ZHF1ICAgICB5bW1DLCB5bW1BCisgICAgdmluc2VydGkxMjggeW1tQSwgeW1tRiwgeG1tQSwgMCAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgdmluc2VydGkxMjggeW1tQywgeW1tQywgeG1tQiwgMCAgOyB5bW1DPSgxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgdmluc2VydGkxMjggeW1tQiwgeW1tQiwgeG1tRiwgMCAgOyB5bW1CPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisgICAgdnBlcm0yaTEyOCAgeW1tRiwgeW1tQywgeW1tQywgMSAgOyB5bW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1BCisgICAgdnBzbGxkcSAgICAgeW1tQSwgeW1tQSwgOCAgICAgOyB5bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgMEcgMUcgMkcgMEggMUggMkggMEkgMUkpCisgICAgdnBzcmxkcSAgICAgeW1tRywgeW1tRywgOCAgICAgOyB5bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMUogMkogMEsgMUsgMksgMEwgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICB2cHVucGNraGJ3ICB5bW1BLCB5bW1BLCB5bW1GICA7IHltbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwTyAxRyAxTyAyRyAyTyAwSCAwUCAxSCAxUCAySCAyUCAwSSAwUSAxSSAxUSkKKyAgICB2cHNsbGRxICAgICB5bW1GLCB5bW1GLCA4ICAgICA7IHltbUY9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTikKKworICAgIHZwdW5wY2tsYncgIHltbUcsIHltbUcsIHltbUIgIDsgeW1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDJRIDBKIDBSIDFKIDFSIDJKIDJSIDBLIDBTIDFLIDFTIDJLIDJTIDBMIDBUKQorICAgIHZwdW5wY2toYncgIHltbUYsIHltbUYsIHltbUIgIDsgeW1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFMIDFUIDJMIDJUIDBNIDBVIDFNIDFVIDJNIDJVIDBOIDBWIDFOIDFWIDJOIDJWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRCwgeW1tQQorICAgIHZwc2xsZHEgICAgIHltbUEsIHltbUEsIDggICAgIDsgeW1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDggMTAgMTggMjAgMjggMDEgMDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIDBHIDBPIDFHIDFPIDJHIDJPIDBIIDBQKQorICAgIHZwc3JsZHEgICAgIHltbUQsIHltbUQsIDggICAgIDsgeW1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgMEcgME8gMUcgMU8gMkcgMk8gMEggMFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFIIDFQIDJIIDJQIDBJIDBRIDFJIDFRIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgdnB1bnBja2hidyAgeW1tQSwgeW1tQSwgeW1tRyAgOyB5bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEsgME8gMFMgMUcgMUsgMU8gMVMgMkcgMksgMk8gMlMgMEggMEwgMFAgMFQpCisgICAgdnBzbGxkcSAgICAgeW1tRywgeW1tRywgOCAgICAgOyB5bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQgMkkgMlEgMEogMFIgMUogMVIgMkogMlIpCisKKyAgICB2cHVucGNrbGJ3ICB5bW1ELCB5bW1ELCB5bW1GICA7IHltbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAxTCAxUCAxVCAySCAyTCAyUCAyVCAwSSAwTSAwUSAwVSAxSSAxTSAxUSAxVSkKKyAgICB2cHVucGNraGJ3ICB5bW1HLCB5bW1HLCB5bW1GICA7IHltbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAyTSAyUSAyVSAwSiAwTiAwUiAwViAxSiAxTiAxUiAxViAySiAyTiAyUiAyVikKKworICAgIHZtb3ZkcWEgICAgIHltbUUsIHltbUEKKyAgICB2cHNsbGRxICAgICB5bW1BLCB5bW1BLCA4ICAgICA7IHltbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAwRyAwSyAwTyAwUyAxRyAxSyAxTyAxUykKKyAgICB2cHNybGRxICAgICB5bW1FLCB5bW1FLCA4ICAgICA7IHltbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAySyAyTyAyUyAwSCAwTCAwUCAwVCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHZwdW5wY2toYncgIHltbUEsIHltbUEsIHltbUQgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBJIDBLIDBNIDBPIDBRIDBTIDBVIDFHIDFJIDFLIDFNIDFPIDFRIDFTIDFVKQorICAgIHZwc2xsZHEgICAgIHltbUQsIHltbUQsIDggICAgIDsgeW1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDFIIDFMIDFQIDFUIDJIIDJMIDJQIDJUKQorCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRyAgOyB5bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUgMEggMEogMEwgME4gMFAgMFIgMFQgMFYpCisgICAgdnB1bnBja2hidyAgeW1tRCwgeW1tRCwgeW1tRyAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYpCisKKyAgICB2cHhvciAgICAgICB5bW1ILCB5bW1ILCB5bW1ICisKKyAgICB2bW92ZHFhICAgICB5bW1DLCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tSCAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSkKKyAgICB2cHVucGNraGJ3ICB5bW1DLCB5bW1DLCB5bW1IICA7IHltbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFIDFHIDFJIDFLIDFNIDFPIDFRIDFTIDFVKQorCisgICAgdm1vdmRxYSAgICAgeW1tQiwgeW1tRQorICAgIHZwdW5wY2tsYncgIHltbUUsIHltbUUsIHltbUggIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUpCisgICAgdnB1bnBja2hidyAgeW1tQiwgeW1tQiwgeW1tSCAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAwSCAwSiAwTCAwTiAwUCAwUiAwVCAwVikKKworICAgIHZtb3ZkcWEgICAgIHltbUYsIHltbUQKKyAgICB2cHVucGNrbGJ3ICB5bW1ELCB5bW1ELCB5bW1IICA7IHltbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWKQorICAgIHZwdW5wY2toYncgIHltbUYsIHltbUYsIHltbUggIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYpCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8xNgorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQyCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisgICAgdm1vdmQgICAgICAgeG1tQSwgWE1NX0RXT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvOAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICB2bW92cSAgICAgICB4bW1GLCBYTU1fTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisgICAgdnBzbGxkcSAgICAgeG1tQSwgeG1tQSwgU0laRU9GX01NV09SRAorICAgIHZwb3IgICAgICAgIHhtbUEsIHhtbUEsIHhtbUYKKy5jb2x1bW5fbGQ0OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC80CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDgKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorICAgIHZtb3ZkcWEgICAgIHhtbUYsIHhtbUEKKyAgICB2cGVybTJpMTI4ICB5bW1GLCB5bW1GLCB5bW1GLCAxCisgICAgdm1vdmRxdSAgICAgeG1tQSwgWE1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorICAgIHZwb3IgICAgICAgIHltbUEsIHltbUEsIHltbUYKKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8yCisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDE2CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICB2bW92ZHFhICAgICB5bW1GLCB5bW1BCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgdm1vdmRxYSAgICAgeW1tRSwgeW1tQQorICAgIHZtb3ZkcWEgICAgIHltbUgsIHltbUYKKyAgICB2bW92ZHF1ICAgICB5bW1BLCBZTU1XT1JEIFtlc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1GLCBZTU1XT1JEIFtlc2krMSpTSVpFT0ZfWU1NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3A6CisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tRiwgWU1NV09SRCBbZXNpKzEqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tRSwgWU1NV09SRCBbZXNpKzIqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tSCwgWU1NV09SRCBbZXNpKzMqU0laRU9GX1lNTVdPUkRdCisKKy5yZ2JfZ3JheV9jbnY6CisgICAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgOyB5bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgOyB5bW1FPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1BCisgICAgdmluc2VydGkxMjggeW1tQSwgeW1tQSwgeG1tRSwgMSAgICAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgM0cgMEggMUggMkggM0ggMEkgMUkgMkkgM0kgMEogMUogMkogM0opCisgICAgdnBlcm0yaTEyOCAgeW1tRSwgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1GCisgICAgdmluc2VydGkxMjggeW1tRiwgeW1tRiwgeG1tSCwgMSAgICAgOyB5bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMU8gMk8gM08gMFAgMVAgMlAgM1AgMFEgMVEgMlEgM1EgMFIgMVIgMlIgM1IpCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tQiwgeW1tSCwgMHgzMSAgOyB5bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRSAgICAgIDsgeW1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwSyAxRyAxSyAyRyAySyAzRyAzSyAwSCAwTCAxSCAxTCAySCAyTCAzSCAzTCkKKyAgICB2cHVucGNraGJ3ICB5bW1ELCB5bW1ELCB5bW1FICAgICAgOyB5bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBJIDBNIDFJIDFNIDJJIDJNIDNJIDNNIDBKIDBOIDFKIDFOIDJKIDJOIDNKIDNOKQorCisgICAgdm1vdmRxYSAgICAgeW1tQywgeW1tRgorICAgIHZwdW5wY2tsYncgIHltbUYsIHltbUYsIHltbUggICAgICA7IHltbUY9KDA4IDBDIDE4IDFDIDI4IDJDIDM4IDNDIDA5IDBEIDE5IDFEIDI5IDJEIDM5IDNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMFMgMU8gMVMgMk8gMlMgM08gM1MgMFAgMFQgMVAgMVQgMlAgMlQgM1AgM1QpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tSCAgICAgIDsgeW1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUSAwVSAxUSAxVSAyUSAyVSAzUSAzVSAwUiAwViAxUiAxViAyUiAyViAzUiAzVikKKworICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1GICAgICAgOyB5bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTIDJHIDJLIDJPIDJTIDNHIDNLIDNPIDNTKQorICAgIHZwdW5wY2tod2QgIHltbUIsIHltbUIsIHltbUYgICAgICA7IHltbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMEwgMFAgMFQgMUggMUwgMVAgMVQgMkggMkwgMlAgMlQgM0ggM0wgM1AgM1QpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1ECisgICAgdnB1bnBja2x3ZCAgeW1tRCwgeW1tRCwgeW1tQyAgICAgIDsgeW1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSSAwTSAwUSAwVSAxSSAxTSAxUSAxVSAySSAyTSAyUSAyVSAzSSAzTSAzUSAzVSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1HLCB5bW1DICAgICAgOyB5bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBKIDBOIDBSIDBWIDFKIDFOIDFSIDFWIDJKIDJOIDJSIDJWIDNKIDNOIDNSIDNWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRSwgeW1tQQorICAgIHZwdW5wY2tsYncgIHltbUEsIHltbUEsIHltbUQgICAgICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisgICAgdnB1bnBja2hidyAgeW1tRSwgeW1tRSwgeW1tRCAgICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSkKKworICAgIHZtb3ZkcWEgICAgIHltbUgsIHltbUIKKyAgICB2cHVucGNrbGJ3ICB5bW1CLCB5bW1CLCB5bW1HICAgICAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWKQorICAgIHZwdW5wY2toYncgIHltbUgsIHltbUgsIHltbUcgICAgICA7IHltbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgM0ggM0ogM0wgM04gM1AgM1IgM1QgM1YpCisKKyAgICB2cHhvciAgICAgICB5bW1GLCB5bW1GLCB5bW1GCisKKyAgICB2bW92ZHFhICAgICB5bW1DLCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRiAgICAgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tRiAgICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1CCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRiAgICAgIDsgeW1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMEggMEogMEwgME4gMFAgMFIgMFQgMFYpCisgICAgdnB1bnBja2hidyAgeW1tRCwgeW1tRCwgeW1tRiAgICAgIDsgeW1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1FCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRiAgICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUpCisgICAgdnB1bnBja2hidyAgeW1tRywgeW1tRywgeW1tRiAgICAgIDsgeW1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgM0cgM0kgM0sgM00gM08gM1EgM1MgM1UpCisKKyAgICB2cHVucGNrbGJ3ICB5bW1GLCB5bW1GLCB5bW1ICisgICAgdnB1bnBja2hidyAgeW1tSCwgeW1tSCwgeW1tSAorICAgIHZwc3JsdyAgICAgIHltbUYsIHltbUYsIEJZVEVfQklUICA7IHltbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDJIIDJKIDJMIDJOIDJQIDJSIDJUIDJWKQorICAgIHZwc3JsdyAgICAgIHltbUgsIHltbUgsIEJZVEVfQklUICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWKQorCislZW5kaWYgIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyB5bW0wPVIoMDI0NjhBQ0VHSUtNT1FTVSk9UkUsIHltbTI9RygwMjQ2OEFDRUdJS01PUVNVKT1HRSwgeW1tND1CKDAyNDY4QUNFR0lLTU9RU1UpPUJFCisgICAgOyB5bW0xPVIoMTM1NzlCREZISkxOUFJUVik9Uk8sIHltbTM9RygxMzU3OUJERkhKTE5QUlRWKT1HTywgeW1tNT1CKDEzNTc5QkRGSEpMTlBSVFYpPUJPCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKworICAgIHZtb3ZkcWEgICAgIHltbTYsIHltbTEKKyAgICB2cHVucGNrbHdkICB5bW0xLCB5bW0xLCB5bW0zCisgICAgdnB1bnBja2h3ZCAgeW1tNiwgeW1tNiwgeW1tMworICAgIHZwbWFkZHdkICAgIHltbTEsIHltbTEsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeW1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeW1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCisgICAgdm1vdmRxYSAgICAgeW1tNywgeW1tNiAgICAgICAgICAgICAgOyB5bW03PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKyAgICB2bW92ZHFhICAgICB5bW02LCB5bW0wCisgICAgdnB1bnBja2x3ZCAgeW1tMCwgeW1tMCwgeW1tMgorICAgIHZwdW5wY2tod2QgIHltbTYsIHltbTYsIHltbTIKKyAgICB2cG1hZGR3ZCAgICB5bW0wLCB5bW0wLCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IHltbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICB2cG1hZGR3ZCAgICB5bW02LCB5bW02LCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IHltbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDApXSwgeW1tMCAgIDsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTYgICA7IHdrKDEpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICB2bW92ZHFhICAgICB5bW0wLCB5bW01ICAgICAgICAgICAgICA7IHltbTA9Qk8KKyAgICB2bW92ZHFhICAgICB5bW02LCB5bW00ICAgICAgICAgICAgICA7IHltbTY9QkUKKworICAgIHZtb3ZkcWEgICAgIHltbTQsIHltbTAKKyAgICB2cHVucGNrbHdkICB5bW0wLCB5bW0wLCB5bW0zCisgICAgdnB1bnBja2h3ZCAgeW1tNCwgeW1tNCwgeW1tMworICAgIHZwbWFkZHdkICAgIHltbTAsIHltbTAsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgeW1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgIHZwbWFkZHdkICAgIHltbTQsIHltbTQsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgeW1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorCisgICAgdm1vdmRxYSAgICAgeW1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildICAgICAgICAgICAgOyB5bW0zPVtQRF9PTkVIQUxGXQorCisgICAgdnBhZGRkICAgICAgeW1tMCwgeW1tMCwgeW1tMQorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTcKKyAgICB2cGFkZGQgICAgICB5bW0wLCB5bW0wLCB5bW0zCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgeW1tMworICAgIHZwc3JsZCAgICAgIHltbTAsIHltbTAsIFNDQUxFQklUUyAgIDsgeW1tMD1ZT0wKKyAgICB2cHNybGQgICAgICB5bW00LCB5bW00LCBTQ0FMRUJJVFMgICA7IHltbTQ9WU9ICisgICAgdnBhY2tzc2R3ICAgeW1tMCwgeW1tMCwgeW1tNCAgICAgICAgOyB5bW0wPVlPCisKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW02CisgICAgdnB1bnBja2x3ZCAgeW1tNiwgeW1tNiwgeW1tMgorICAgIHZwdW5wY2tod2QgIHltbTQsIHltbTQsIHltbTIKKyAgICB2cG1hZGR3ZCAgICB5bW02LCB5bW02LCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IHltbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IHltbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKworICAgIHZtb3ZkcWEgICAgIHltbTIsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSAgICAgICAgICAgIDsgeW1tMj1bUERfT05FSEFMRl0KKworICAgIHZwYWRkZCAgICAgIHltbTYsIHltbTYsIFlNTVdPUkQgW3drKDApXQorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIFlNTVdPUkQgW3drKDEpXQorICAgIHZwYWRkZCAgICAgIHltbTYsIHltbTYsIHltbTIKKyAgICB2cGFkZGQgICAgICB5bW00LCB5bW00LCB5bW0yCisgICAgdnBzcmxkICAgICAgeW1tNiwgeW1tNiwgU0NBTEVCSVRTICAgOyB5bW02PVlFTAorICAgIHZwc3JsZCAgICAgIHltbTQsIHltbTQsIFNDQUxFQklUUyAgIDsgeW1tND1ZRUgKKyAgICB2cGFja3NzZHcgICB5bW02LCB5bW02LCB5bW00ICAgICAgICA7IHltbTY9WUUKKworICAgIHZwc2xsdyAgICAgIHltbTAsIHltbTAsIEJZVEVfQklUCisgICAgdnBvciAgICAgICAgeW1tNiwgeW1tNiwgeW1tMCAgICAgICAgOyB5bW02PVkKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGldLCB5bW02ICAgICA7IFNhdmUgWQorCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgYWRkICAgICAgICAgZXNpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgICAgICAgICA7IG91dHB0cjAKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5fbGQxCisKKyAgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcHBpYyAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9idWYKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgOyBudW1fcm93cworICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICB2emVyb3VwcGVyCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2dyeWV4dC1tbXguYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3J5ZXh0LW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5YWIwZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2dyeWV4dC1tbXguYXNtCkBAIC0wLDAgKzEsMzU3IEBACis7Cis7IGpjZ3J5ZXh0LmFzbSAtIGdyYXlzY2FsZSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X21teChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpOworOworCislZGVmaW5lIGltZ193aWR0aChiKSAgIChiKSArIDggICAgICAgICAgOyBKRElNRU5TSU9OIGltZ193aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAoYikgKyAxMiAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgKGIpICsgMTYgICAgICAgICA7IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfcm93KGIpICAoYikgKyAyMCAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfcm93CislZGVmaW5lIG51bV9yb3dzKGIpICAgIChiKSArIDI0ICAgICAgICAgOyBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX01NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKiBnb3RwdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfbW14KQorCitFWFROKGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfbW14KToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgbW92cGljICAgICAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXSAgOyBudW1fY29scworICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBwdXNoICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZXNpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbGVhICAgICAgICAgZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaHBpYyAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamFlICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIHhvciAgICAgICAgIGVheCwgZWF4CisgICAgbW92ICAgICAgICAgYWwsIEJZVEUgW2VzaStlY3hdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1dPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHhvciAgICAgICAgIGVkeCwgZWR4CisgICAgbW92ICAgICAgICAgZHgsIFdPUkQgW2VzaStlY3hdCisgICAgc2hsICAgICAgICAgZWF4LCBXT1JEX0JJVAorICAgIG9yICAgICAgICAgIGVheCwgZWR4CisuY29sdW1uX2xkNDoKKyAgICBtb3ZkICAgICAgICBtbUEsIGVheAorICAgIHBvcCAgICAgICAgIGVkeAorICAgIHBvcCAgICAgICAgIGVheAorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfRFdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBtb3ZkICAgICAgICBtbUcsIERXT1JEIFtlc2krZWN4XQorICAgIHBzbGxxICAgICAgIG1tQSwgRFdPUkRfQklUCisgICAgcG9yICAgICAgICAgbW1BLCBtbUcKKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDE2CisgICAgbW92cSAgICAgICAgbW1HLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9NTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX2dyYXlfY252CisuY29sdW1uX2xkMTY6CisgICAgdGVzdCAgICAgICAgY2wsIDIqU0laRU9GX01NV09SRAorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICBtb3ZxICAgICAgICBtbUYsIG1tQQorICAgIG1vdnEgICAgICAgIG1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorICAgIG1vdnEgICAgICAgIG1tRywgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcDoKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUYsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKworLnJnYl9ncmF5X2NudjoKKyAgICA7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisgICAgOyBtbUc9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIDsgbW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKworICAgIG1vdnEgICAgICAgIG1tRCwgbW1BCisgICAgcHNsbHEgICAgICAgbW1BLCA0KkJZVEVfQklUICAgICAgICAgOyBtbUE9KC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxKQorICAgIHBzcmxxICAgICAgIG1tRCwgNCpCWVRFX0JJVCAgICAgICAgIDsgbW1EPSgxMSAyMSAwMiAxMiAtLSAtLSAtLSAtLSkKKworICAgIHB1bnBja2hidyAgIG1tQSwgbW1HICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAwMSAwNSkKKyAgICBwc2xscSAgICAgICBtbUcsIDQqQllURV9CSVQgICAgICAgICA7IG1tRz0oLS0gLS0gLS0gLS0gMjIgMDMgMTMgMjMpCisKKyAgICBwdW5wY2tsYncgICBtbUQsIG1tRiAgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTUgMjEgMjUgMDIgMDYgMTIgMTYpCisgICAgcHVucGNraGJ3ICAgbW1HLCBtbUYgICAgICAgICAgICAgICAgOyBtbUc9KDIyIDI2IDAzIDA3IDEzIDE3IDIzIDI3KQorCisgICAgbW92cSAgICAgICAgbW1FLCBtbUEKKyAgICBwc2xscSAgICAgICBtbUEsIDQqQllURV9CSVQgICAgICAgICA7IG1tQT0oLS0gLS0gLS0gLS0gMDAgMDQgMTAgMTQpCisgICAgcHNybHEgICAgICAgbW1FLCA0KkJZVEVfQklUICAgICAgICAgOyBtbUU9KDIwIDI0IDAxIDA1IC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNraGJ3ICAgbW1BLCBtbUQgICAgICAgICAgICAgICAgOyBtbUE9KDAwIDAyIDA0IDA2IDEwIDEyIDE0IDE2KQorICAgIHBzbGxxICAgICAgIG1tRCwgNCpCWVRFX0JJVCAgICAgICAgIDsgbW1EPSgtLSAtLSAtLSAtLSAxMSAxNSAyMSAyNSkKKworICAgIHB1bnBja2xidyAgIG1tRSwgbW1HICAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAwMSAwMyAwNSAwNykKKyAgICBwdW5wY2toYncgICBtbUQsIG1tRyAgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcgMjEgMjMgMjUgMjcpCisKKyAgICBweG9yICAgICAgICBtbUgsIG1tSAorCisgICAgbW92cSAgICAgICAgbW1DLCBtbUEKKyAgICBwdW5wY2tsYncgICBtbUEsIG1tSCAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYpCisgICAgcHVucGNraGJ3ICAgbW1DLCBtbUggICAgICAgICAgICAgICAgOyBtbUM9KDEwIDEyIDE0IDE2KQorCisgICAgbW92cSAgICAgICAgbW1CLCBtbUUKKyAgICBwdW5wY2tsYncgICBtbUUsIG1tSCAgICAgICAgICAgICAgICA7IG1tRT0oMjAgMjIgMjQgMjYpCisgICAgcHVucGNraGJ3ICAgbW1CLCBtbUggICAgICAgICAgICAgICAgOyBtbUI9KDAxIDAzIDA1IDA3KQorCisgICAgbW92cSAgICAgICAgbW1GLCBtbUQKKyAgICBwdW5wY2tsYncgICBtbUQsIG1tSCAgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcpCisgICAgcHVucGNraGJ3ICAgbW1GLCBtbUggICAgICAgICAgICAgICAgOyBtbUY9KDIxIDIzIDI1IDI3KQorCislZWxzZSAgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRC84CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisgICAgbW92ZCAgICAgICAgbW1BLCBEV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDI6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9NTVdPUkQvNAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorICAgIG1vdnEgICAgICAgIG1tRiwgbW1BCisgICAgbW92cSAgICAgICAgbW1BLCBNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ0OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfTU1XT1JELzIKKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9NTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgbW92cSAgICAgICAgbW1ELCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUMsIG1tRgorICAgIG1vdnEgICAgICAgIG1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorICAgIG1vdnEgICAgICAgIG1tRiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcDoKKyAgICBtb3ZxICAgICAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUQsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbUMsIE1NV09SRCBbZXNpKzMqU0laRU9GX01NV09SRF0KKworLnJnYl9ncmF5X2NudjoKKyAgICA7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgOyBtbUY9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgIDsgbW1EPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICA7IG1tQz0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZxICAgICAgICBtbUIsIG1tQQorICAgIHB1bnBja2xidyAgIG1tQSwgbW1GICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwMiAxMCAxMiAyMCAyMiAzMCAzMikKKyAgICBwdW5wY2toYncgICBtbUIsIG1tRiAgICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMTEgMTMgMjEgMjMgMzEgMzMpCisKKyAgICBtb3ZxICAgICAgICBtbUcsIG1tRAorICAgIHB1bnBja2xidyAgIG1tRCwgbW1DICAgICAgICAgICAgICAgIDsgbW1EPSgwNCAwNiAxNCAxNiAyNCAyNiAzNCAzNikKKyAgICBwdW5wY2toYncgICBtbUcsIG1tQyAgICAgICAgICAgICAgICA7IG1tRz0oMDUgMDcgMTUgMTcgMjUgMjcgMzUgMzcpCisKKyAgICBtb3ZxICAgICAgICBtbUUsIG1tQQorICAgIHB1bnBja2x3ZCAgIG1tQSwgbW1EICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNiAxMCAxMiAxNCAxNikKKyAgICBwdW5wY2tod2QgICBtbUUsIG1tRCAgICAgICAgICAgICAgICA7IG1tRT0oMjAgMjIgMjQgMjYgMzAgMzIgMzQgMzYpCisKKyAgICBtb3ZxICAgICAgICBtbUgsIG1tQgorICAgIHB1bnBja2x3ZCAgIG1tQiwgbW1HICAgICAgICAgICAgICAgIDsgbW1CPSgwMSAwMyAwNSAwNyAxMSAxMyAxNSAxNykKKyAgICBwdW5wY2tod2QgICBtbUgsIG1tRyAgICAgICAgICAgICAgICA7IG1tSD0oMjEgMjMgMjUgMjcgMzEgMzMgMzUgMzcpCisKKyAgICBweG9yICAgICAgICBtbUYsIG1tRgorCisgICAgbW92cSAgICAgICAgbW1DLCBtbUEKKyAgICBwdW5wY2tsYncgICBtbUEsIG1tRiAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYpCisgICAgcHVucGNraGJ3ICAgbW1DLCBtbUYgICAgICAgICAgICAgICAgOyBtbUM9KDEwIDEyIDE0IDE2KQorCisgICAgbW92cSAgICAgICAgbW1ELCBtbUIKKyAgICBwdW5wY2tsYncgICBtbUIsIG1tRiAgICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMDUgMDcpCisgICAgcHVucGNraGJ3ICAgbW1ELCBtbUYgICAgICAgICAgICAgICAgOyBtbUQ9KDExIDEzIDE1IDE3KQorCisgICAgbW92cSAgICAgICAgbW1HLCBtbUUKKyAgICBwdW5wY2tsYncgICBtbUUsIG1tRiAgICAgICAgICAgICAgICA7IG1tRT0oMjAgMjIgMjQgMjYpCisgICAgcHVucGNraGJ3ICAgbW1HLCBtbUYgICAgICAgICAgICAgICAgOyBtbUc9KDMwIDMyIDM0IDM2KQorCisgICAgcHVucGNrbGJ3ICAgbW1GLCBtbUgKKyAgICBwdW5wY2toYncgICBtbUgsIG1tSAorICAgIHBzcmx3ICAgICAgIG1tRiwgQllURV9CSVQgICAgICAgICAgIDsgbW1GPSgyMSAyMyAyNSAyNykKKyAgICBwc3JsdyAgICAgICBtbUgsIEJZVEVfQklUICAgICAgICAgICA7IG1tSD0oMzEgMzMgMzUgMzcpCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IG1tMD0oUjAgUjIgUjQgUjYpPVJFLCBtbTI9KEcwIEcyIEc0IEc2KT1HRSwgbW00PShCMCBCMiBCNCBCNik9QkUKKyAgICA7IG1tMT0oUjEgUjMgUjUgUjcpPVJPLCBtbTM9KEcxIEczIEc1IEc3KT1HTywgbW01PShCMSBCMyBCNSBCNyk9Qk8KKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworCisgICAgbW92cSAgICAgICAgbW02LCBtbTEKKyAgICBwdW5wY2tsd2QgICBtbTEsIG1tMworICAgIHB1bnBja2h3ZCAgIG1tNiwgbW0zCisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIG1tNiwgW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSAgOyBtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKworICAgIG1vdnEgICAgICAgIG1tNywgIG1tNiAgICAgICAgICAgICAgIDsgbW03PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0yCisgICAgcHVucGNraHdkICAgbW02LCBtbTIKKyAgICBwbWFkZHdkICAgICBtbTAsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgbW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgcG1hZGR3ZCAgICAgbW02LCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IG1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tMCAgICAgOyB3aygwKT1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTYgICAgIDsgd2soMSk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW01ICAgICAgICAgICAgICAgIDsgbW0wPUJPCisgICAgbW92cSAgICAgICAgbW02LCBtbTQgICAgICAgICAgICAgICAgOyBtbTY9QkUKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgcHVucGNrbHdkICAgbW0wLCBtbTMKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tMworICAgIHBtYWRkd2QgICAgIG1tMCwgW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSAgOyBtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgbW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisKKyAgICBtb3ZxICAgICAgICBtbTMsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSAgOyBtbTM9W1BEX09ORUhBTEZdCisKKyAgICBwYWRkZCAgICAgICBtbTAsIG1tMQorICAgIHBhZGRkICAgICAgIG1tNCwgbW03CisgICAgcGFkZGQgICAgICAgbW0wLCBtbTMKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tMworICAgIHBzcmxkICAgICAgIG1tMCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW0wPVlPTAorICAgIHBzcmxkICAgICAgIG1tNCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW00PVlPSAorICAgIHBhY2tzc2R3ICAgIG1tMCwgbW00ICAgICAgICAgICAgICAgIDsgbW0wPVlPCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tNgorICAgIHB1bnBja2x3ZCAgIG1tNiwgbW0yCisgICAgcHVucGNraHdkICAgbW00LCBtbTIKKyAgICBwbWFkZHdkICAgICBtbTYsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgbW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgcG1hZGR3ZCAgICAgbW00LCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQorCisgICAgbW92cSAgICAgICAgbW0yLCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0gICAgICA7IG1tMj1bUERfT05FSEFMRl0KKworICAgIHBhZGRkICAgICAgIG1tNiwgTU1XT1JEIFt3aygwKV0KKyAgICBwYWRkZCAgICAgICBtbTQsIE1NV09SRCBbd2soMSldCisgICAgcGFkZGQgICAgICAgbW02LCBtbTIKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tMgorICAgIHBzcmxkICAgICAgIG1tNiwgU0NBTEVCSVRTICAgICAgICAgIDsgbW02PVlFTAorICAgIHBzcmxkICAgICAgIG1tNCwgU0NBTEVCSVRTICAgICAgICAgIDsgbW00PVlFSAorICAgIHBhY2tzc2R3ICAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PVlFCisKKyAgICBwc2xsdyAgICAgICBtbTAsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgbW02LCBtbTAgICAgICAgICAgICAgICAgOyBtbTY9WQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWRpXSwgbW02ICAgICAgIDsgU2F2ZSBZCisKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICA7IG91dHB0cjAKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbl9sZDEKKworICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wcGljICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2J1ZgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBkZWMgICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgZW1tcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3J5ZXh0LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjZ3J5ZXh0LXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDg5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNncnlleHQtc3NlMi5hc20KQEAgLTAsMCArMSwzODQgQEAKKzsKKzsgamNncnlleHQuYXNtIC0gZ3JheXNjYWxlIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAoYikgKyA4ICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgKGIpICsgMTIgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3JvdworJWRlZmluZSBudW1fcm93cyhiKSAgICAoYikgKyAyNCAgICAgICAgIDsgaW50IG51bV9yb3dzCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKiBnb3RwdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMikKKworRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgbW92cGljICAgICAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXQorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBwdXNoICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZXNpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbGVhICAgICAgICAgZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaHBpYyAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIG1vdnp4ICAgICAgIGVheCwgQllURSBbZXNpK2VjeF0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgbW92enggICAgICAgZWR4LCBXT1JEIFtlc2krZWN4XQorICAgIHNobCAgICAgICAgIGVheCwgV09SRF9CSVQKKyAgICBvciAgICAgICAgICBlYXgsIGVkeAorLmNvbHVtbl9sZDQ6CisgICAgbW92ZCAgICAgICAgeG1tQSwgZWF4CisgICAgcG9wICAgICAgICAgZWR4CisgICAgcG9wICAgICAgICAgZWF4CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9EV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIG1vdmQgICAgICAgIHhtbUYsIFhNTV9EV09SRCBbZXNpK2VjeF0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICBwb3IgICAgICAgICB4bW1BLCB4bW1GCisuY29sdW1uX2xkODoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgbW92cSAgICAgICAgeG1tQiwgWE1NX01NV09SRCBbZXNpK2VjeF0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgcG9yICAgICAgICAgeG1tQSwgeG1tQgorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgIG1vdmRxYSAgICAgIHhtbUYsIHhtbUEKKyAgICBtb3ZkcXUgICAgICB4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9YTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorLmNvbHVtbl9sZDMyOgorICAgIHRlc3QgICAgICAgIGNsLCAyKlNJWkVPRl9YTU1XT1JECisgICAgbW92ICAgICAgICAgZWN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1BCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUIsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQorCisucmdiX2dyYXlfY252OgorICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgOyB4bW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICA7IHhtbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisgICAgbW92ZHFhICAgICAgeG1tRywgeG1tQQorICAgIHBzbGxkcSAgICAgIHhtbUEsIDggICAgIDsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisgICAgcHNybGRxICAgICAgeG1tRywgOCAgICAgOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHB1bnBja2hidyAgIHhtbUEsIHhtbUYgIDsgeG1tQT0oMDAgMDggMTAgMTggMjAgMjggMDEgMDkgMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEpCisgICAgcHNsbGRxICAgICAgeG1tRiwgOCAgICAgOyB4bW1GPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKworICAgIHB1bnBja2xidyAgIHhtbUcsIHhtbUIgIDsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCisgICAgcHVucGNraGJ3ICAgeG1tRiwgeG1tQiAgOyB4bW1GPSgxNSAxRCAyNSAyRCAwNiAwRSAxNiAxRSAyNiAyRSAwNyAwRiAxNyAxRiAyNyAyRikKKworICAgIG1vdmRxYSAgICAgIHhtbUQsIHhtbUEKKyAgICBwc2xsZHEgICAgICB4bW1BLCA4ICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5KQorICAgIHBzcmxkcSAgICAgIHhtbUQsIDggICAgIDsgeG1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2toYncgICB4bW1BLCB4bW1HICA7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEKQorICAgIHBzbGxkcSAgICAgIHhtbUcsIDggICAgIDsgeG1tRz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIpCisKKyAgICBwdW5wY2tsYncgICB4bW1ELCB4bW1GICA7IHhtbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFKQorICAgIHB1bnBja2hidyAgIHhtbUcsIHhtbUYgIDsgeG1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1FLCB4bW1BCisgICAgcHNsbGRxICAgICAgeG1tQSwgOCAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQykKKyAgICBwc3JsZHEgICAgICB4bW1FLCA4ICAgICA7IHhtbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNraGJ3ICAgeG1tQSwgeG1tRCAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICBwc2xsZHEgICAgICB4bW1ELCA4ICAgICA7IHhtbUQ9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEKQorCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tRyAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICBwdW5wY2toYncgICB4bW1ELCB4bW1HICA7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorCisgICAgcHhvciAgICAgICAgeG1tSCwgeG1tSAorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tQQorICAgIHB1bnBja2xidyAgIHhtbUEsIHhtbUggIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCisgICAgcHVucGNraGJ3ICAgeG1tQywgeG1tSCAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUUKKyAgICBwdW5wY2tsYncgICB4bW1FLCB4bW1IICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorICAgIHB1bnBja2hidyAgIHhtbUIsIHhtbUggIDsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1GLCB4bW1ECisgICAgcHVucGNrbGJ3ICAgeG1tRCwgeG1tSCAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICBwdW5wY2toYncgICB4bW1GLCB4bW1IICA7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorCislZWxzZSAgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvMTYKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgorICAgIG1vdmQgICAgICAgIHhtbUEsIFhNTV9EV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDI6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzgKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgbW92cSAgICAgICAgeG1tRSwgWE1NX01NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorICAgIHBzbGxkcSAgICAgIHhtbUEsIFNJWkVPRl9NTVdPUkQKKyAgICBwb3IgICAgICAgICB4bW1BLCB4bW1FCisuY29sdW1uX2xkNDoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvNAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICBtb3ZkcWEgICAgICB4bW1FLCB4bW1BCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDg6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzIKKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9YTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgIG1vdmRxYSAgICAgIHhtbUYsIHhtbUEKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1FCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUUsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUYsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUgsIFhNTVdPUkQgW2VzaSszKlNJWkVPRl9YTU1XT1JEXQorCisucmdiX2dyYXlfY252OgorICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgOyB4bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICA7IHhtbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQorICAgIDsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1BCisgICAgcHVucGNrbGJ3ICAgeG1tQSwgeG1tRSAgICAgIDsgeG1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUpCisgICAgcHVucGNraGJ3ICAgeG1tRCwgeG1tRSAgICAgIDsgeG1tRD0oMDIgMDYgMTIgMTYgMjIgMjYgMzIgMzYgMDMgMDcgMTMgMTcgMjMgMjcgMzMgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW1DLCB4bW1GCisgICAgcHVucGNrbGJ3ICAgeG1tRiwgeG1tSCAgICAgIDsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCisgICAgcHVucGNraGJ3ICAgeG1tQywgeG1tSCAgICAgIDsgeG1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YpCisKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1BCisgICAgcHVucGNrbHdkICAgeG1tQSwgeG1tRiAgICAgIDsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMzAgMzQgMzggM0MpCisgICAgcHVucGNraHdkICAgeG1tQiwgeG1tRiAgICAgIDsgeG1tQj0oMDEgMDUgMDkgMEQgMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMzEgMzUgMzkgM0QpCisKKyAgICBtb3ZkcWEgICAgICB4bW1HLCB4bW1ECisgICAgcHVucGNrbHdkICAgeG1tRCwgeG1tQyAgICAgIDsgeG1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UpCisgICAgcHVucGNraHdkICAgeG1tRywgeG1tQyAgICAgIDsgeG1tRz0oMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYgMzMgMzcgM0IgM0YpCisKKyAgICBtb3ZkcWEgICAgICB4bW1FLCB4bW1BCisgICAgcHVucGNrbGJ3ICAgeG1tQSwgeG1tRCAgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgcHVucGNraGJ3ICAgeG1tRSwgeG1tRCAgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1CCisgICAgcHVucGNrbGJ3ICAgeG1tQiwgeG1tRyAgICAgIDsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgcHVucGNraGJ3ICAgeG1tSCwgeG1tRyAgICAgIDsgeG1tSD0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisKKyAgICBweG9yICAgICAgICB4bW1GLCB4bW1GCisKKyAgICBtb3ZkcWEgICAgICB4bW1DLCB4bW1BCisgICAgcHVucGNrbGJ3ICAgeG1tQSwgeG1tRiAgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCisgICAgcHVucGNraGJ3ICAgeG1tQywgeG1tRiAgICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1CCisgICAgcHVucGNrbGJ3ICAgeG1tQiwgeG1tRiAgICAgIDsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgcHVucGNraGJ3ICAgeG1tRCwgeG1tRiAgICAgIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1HLCB4bW1FCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tRiAgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCisgICAgcHVucGNraGJ3ICAgeG1tRywgeG1tRiAgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisKKyAgICBwdW5wY2tsYncgICB4bW1GLCB4bW1ICisgICAgcHVucGNraGJ3ICAgeG1tSCwgeG1tSAorICAgIHBzcmx3ICAgICAgIHhtbUYsIEJZVEVfQklUICA7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorICAgIHBzcmx3ICAgICAgIHhtbUgsIEJZVEVfQklUICA7IHhtbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQorCislZW5kaWYgIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyB4bW0wPVIoMDI0NjhBQ0UpPVJFLCB4bW0yPUcoMDI0NjhBQ0UpPUdFLCB4bW00PUIoMDI0NjhBQ0UpPUJFCisgICAgOyB4bW0xPVIoMTM1NzlCREYpPVJPLCB4bW0zPUcoMTM1NzlCREYpPUdPLCB4bW01PUIoMTM1NzlCREYpPUJPCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTEKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMworICAgIHBtYWRkd2QgICAgIHhtbTEsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gIDsgeG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0wCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tMgorICAgIHB1bnBja2h3ZCAgIHhtbTYsIHhtbTIKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IHhtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICBwbWFkZHdkICAgICB4bW02LCBbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldICA7IHhtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9Qk8KKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9QkUKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMworICAgIHBtYWRkd2QgICAgIHhtbTAsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gIDsgeG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorCisgICAgbW92ZHFhICAgICAgeG1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildICAgICAgOyB4bW0zPVtQRF9PTkVIQUxGXQorCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMworICAgIHBzcmxkICAgICAgIHhtbTAsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tMD1ZT0wKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9WU9ICisgICAgcGFja3NzZHcgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPVlPCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02CisgICAgcHVucGNrbHdkICAgeG1tNiwgeG1tMgorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTIKKyAgICBwbWFkZHdkICAgICB4bW02LCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IHhtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICB4bW00LCBbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldICA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSAgICAgIDsgeG1tMj1bUERfT05FSEFMRl0KKworICAgIHBhZGRkICAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXQorICAgIHBhZGRkICAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDEpXQorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0yCisgICAgcHNybGQgICAgICAgeG1tNiwgU0NBTEVCSVRTICAgICAgICAgOyB4bW02PVlFTAorICAgIHBzcmxkICAgICAgIHhtbTQsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tND1ZRUgKKyAgICBwYWNrc3NkdyAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9WUUKKworICAgIHBzbGx3ICAgICAgIHhtbTAsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PVkKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlZGldLCB4bW02ICAgICA7IFNhdmUgWQorCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgICAgICAgOyBvdXRwdHIwCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uX2xkMQorCisgICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3BwaWMgICAgICBlYXgKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfYnVmCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY2h1ZmYtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNodWZmLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTY5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNodWZmLXNzZTIuYXNtCkBAIC0wLDAgKzEsNDI2IEBACis7Cis7IGpjaHVmZi1zc2UyLmFzbSAtIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIDIwMTQtMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWV1IERhcmJvaXMuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhbiBTU0UyIGltcGxlbWVudGF0aW9uIGZvciBIdWZmbWFuIGNvZGluZyBvZiBvbmUgYmxvY2suCis7IFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiBqY2h1ZmYuYzsgc2VlIGpjaHVmZi5jIGZvciBtb3JlCis7IGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9odWZmX2VuY29kZV9vbmVfYmxvY2spCisKK0VYVE4oamNvbnN0X2h1ZmZfZW5jb2RlX29uZV9ibG9jayk6CisKKyVpbmNsdWRlICJqcGVnX25iaXRzX3RhYmxlLmluYyIKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCisKKzsgVGhlc2UgbWFjcm9zIHBlcmZvcm0gdGhlIHNhbWUgdGFzayBhcyB0aGUgZW1pdF9iaXRzKCkgZnVuY3Rpb24gaW4gdGhlCis7IG9yaWdpbmFsIGxpYmpwZWcgY29kZS4gIEluIGFkZGl0aW9uIHRvIHJlZHVjaW5nIG92ZXJoZWFkIGJ5IGV4cGxpY2l0bHkKKzsgaW5saW5pbmcgdGhlIGNvZGUsIGFkZGl0aW9uYWwgcGVyZm9ybWFuY2UgaXMgYWNoaWV2ZWQgYnkgdGFraW5nIGludG8KKzsgYWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUgYml0IGJ1ZmZlciBhbmQgd2FpdGluZyB1bnRpbCBpdCBpcyBhbG1vc3QgZnVsbAorOyBiZWZvcmUgZW1wdHlpbmcgaXQuICBUaGlzIG1vc3RseSBiZW5lZml0cyA2NC1iaXQgcGxhdGZvcm1zLCBzaW5jZSA2Cis7IGJ5dGVzIGNhbiBiZSBzdG9yZWQgaW4gYSA2NC1iaXQgYml0IGJ1ZmZlciBiZWZvcmUgaXQgaGFzIHRvIGJlIGVtcHRpZWQuCisKKyVtYWNybyBFTUlUX0JZVEUgMAorICAgIHN1YiAgICAgICAgIHB1dF9iaXRzLCA4ICAgICAgICAgICAgIDsgcHV0X2JpdHMgLT0gODsKKyAgICBtb3YgICAgICAgICBlZHgsIHB1dF9idWZmZXIKKyAgICBtb3YgICAgICAgICBlY3gsIHB1dF9iaXRzCisgICAgc2hyICAgICAgICAgZWR4LCBjbCAgICAgICAgICAgICAgICAgOyBjID0gKEpPQ1RFVClHRVRKT0NURVQocHV0X2J1ZmZlciA+PiBwdXRfYml0cyk7CisgICAgbW92ICAgICAgICAgYnl0ZSBbZWF4XSwgZGwgICAgICAgICAgOyAqYnVmZmVyKysgPSBjOworICAgIGFkZCAgICAgICAgIGVheCwgMQorICAgIGNtcCAgICAgICAgIGRsLCAweEZGICAgICAgICAgICAgICAgIDsgbmVlZCB0byBzdHVmZiBhIHplcm8gYnl0ZT8KKyAgICBqbmUgICAgICAgICAlJS5FTUlUX0JZVEVfRU5ECisgICAgbW92ICAgICAgICAgYnl0ZSBbZWF4XSwgMCAgICAgICAgICAgOyAqYnVmZmVyKysgPSAwOworICAgIGFkZCAgICAgICAgIGVheCwgMQorJSUuRU1JVF9CWVRFX0VORDoKKyVlbmRtYWNybworCislbWFjcm8gUFVUX0JJVFMgMQorICAgIGFkZCAgICAgICAgIHB1dF9iaXRzLCBlY3ggICAgICAgICAgIDsgcHV0X2JpdHMgKz0gc2l6ZTsKKyAgICBzaGwgICAgICAgICBwdXRfYnVmZmVyLCBjbCAgICAgICAgICA7IHB1dF9idWZmZXIgPSAocHV0X2J1ZmZlciA8PCBzaXplKTsKKyAgICBvciAgICAgICAgICBwdXRfYnVmZmVyLCAlMQorJWVuZG1hY3JvCisKKyVtYWNybyBDSEVDS0JVRjE1IDAKKyAgICBjbXAgICAgICAgICBwdXRfYml0cywgMTYgICAgICAgICAgICA7IGlmIChwdXRfYml0cyA+IDMxKSB7CisgICAgamwgICAgICAgICAgJSUuQ0hFQ0tCVUYxNV9FTkQKKyAgICBtb3YgICAgICAgICBlYXgsIFBPSU5URVIgW2VzcCtidWZmZXJdCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgbW92ICAgICAgICAgUE9JTlRFUiBbZXNwK2J1ZmZlcl0sIGVheAorJSUuQ0hFQ0tCVUYxNV9FTkQ6CislZW5kbWFjcm8KKworJW1hY3JvIEVNSVRfQklUUyAxCisgICAgUFVUX0JJVFMgICAgJTEKKyAgICBDSEVDS0JVRjE1CislZW5kbWFjcm8KKworJW1hY3JvIGtsb29wX3ByZXBhcmUgMzcgICAgICAgICAgICAgICAgIDsoa28sIGpubzAsIC4uLiwgam5vMzEsIHhtbTAsIHhtbTEsIHhtbTIsIHhtbTMpCisgICAgcHhvciAgICAgICAgeG1tNCwgeG1tNCAgICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcHhvciAgICAgICAgeG1tNSwgeG1tNSAgICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcHhvciAgICAgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcHhvciAgICAgICAgeG1tNywgeG1tNyAgICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcGluc3J3ICAgICAgJTM0LCB3b3JkIFtlc2kgKyAlMiAgKiBTSVpFT0ZfV09SRF0sIDAgIDsgeG1tX3NoYWRvd1swXSA9IGJsb2NrW2pubzBdOworICAgIHBpbnNydyAgICAgICUzNSwgd29yZCBbZXNpICsgJTEwICogU0laRU9GX1dPUkRdLCAwICA7IHhtbV9zaGFkb3dbOF0gPSBibG9ja1tqbm84XTsKKyAgICBwaW5zcncgICAgICAlMzYsIHdvcmQgW2VzaSArICUxOCAqIFNJWkVPRl9XT1JEXSwgMCAgOyB4bW1fc2hhZG93WzE2XSA9IGJsb2NrW2pubzE2XTsKKyAgICBwaW5zcncgICAgICAlMzcsIHdvcmQgW2VzaSArICUyNiAqIFNJWkVPRl9XT1JEXSwgMCAgOyB4bW1fc2hhZG93WzI0XSA9IGJsb2NrW2pubzI0XTsKKyAgICBwaW5zcncgICAgICAlMzQsIHdvcmQgW2VzaSArICUzICAqIFNJWkVPRl9XT1JEXSwgMSAgOyB4bW1fc2hhZG93WzFdID0gYmxvY2tbam5vMV07CisgICAgcGluc3J3ICAgICAgJTM1LCB3b3JkIFtlc2kgKyAlMTEgKiBTSVpFT0ZfV09SRF0sIDEgIDsgeG1tX3NoYWRvd1s5XSA9IGJsb2NrW2pubzldOworICAgIHBpbnNydyAgICAgICUzNiwgd29yZCBbZXNpICsgJTE5ICogU0laRU9GX1dPUkRdLCAxICA7IHhtbV9zaGFkb3dbMTddID0gYmxvY2tbam5vMTddOworICAgIHBpbnNydyAgICAgICUzNywgd29yZCBbZXNpICsgJTI3ICogU0laRU9GX1dPUkRdLCAxICA7IHhtbV9zaGFkb3dbMjVdID0gYmxvY2tbam5vMjVdOworICAgIHBpbnNydyAgICAgICUzNCwgd29yZCBbZXNpICsgJTQgICogU0laRU9GX1dPUkRdLCAyICA7IHhtbV9zaGFkb3dbMl0gPSBibG9ja1tqbm8yXTsKKyAgICBwaW5zcncgICAgICAlMzUsIHdvcmQgW2VzaSArICUxMiAqIFNJWkVPRl9XT1JEXSwgMiAgOyB4bW1fc2hhZG93WzEwXSA9IGJsb2NrW2pubzEwXTsKKyAgICBwaW5zcncgICAgICAlMzYsIHdvcmQgW2VzaSArICUyMCAqIFNJWkVPRl9XT1JEXSwgMiAgOyB4bW1fc2hhZG93WzE4XSA9IGJsb2NrW2pubzE4XTsKKyAgICBwaW5zcncgICAgICAlMzcsIHdvcmQgW2VzaSArICUyOCAqIFNJWkVPRl9XT1JEXSwgMiAgOyB4bW1fc2hhZG93WzI2XSA9IGJsb2NrW2pubzI2XTsKKyAgICBwaW5zcncgICAgICAlMzQsIHdvcmQgW2VzaSArICU1ICAqIFNJWkVPRl9XT1JEXSwgMyAgOyB4bW1fc2hhZG93WzNdID0gYmxvY2tbam5vM107CisgICAgcGluc3J3ICAgICAgJTM1LCB3b3JkIFtlc2kgKyAlMTMgKiBTSVpFT0ZfV09SRF0sIDMgIDsgeG1tX3NoYWRvd1sxMV0gPSBibG9ja1tqbm8xMV07CisgICAgcGluc3J3ICAgICAgJTM2LCB3b3JkIFtlc2kgKyAlMjEgKiBTSVpFT0ZfV09SRF0sIDMgIDsgeG1tX3NoYWRvd1sxOV0gPSBibG9ja1tqbm8xOV07CisgICAgcGluc3J3ICAgICAgJTM3LCB3b3JkIFtlc2kgKyAlMjkgKiBTSVpFT0ZfV09SRF0sIDMgIDsgeG1tX3NoYWRvd1syN10gPSBibG9ja1tqbm8yN107CisgICAgcGluc3J3ICAgICAgJTM0LCB3b3JkIFtlc2kgKyAlNiAgKiBTSVpFT0ZfV09SRF0sIDQgIDsgeG1tX3NoYWRvd1s0XSA9IGJsb2NrW2pubzRdOworICAgIHBpbnNydyAgICAgICUzNSwgd29yZCBbZXNpICsgJTE0ICogU0laRU9GX1dPUkRdLCA0ICA7IHhtbV9zaGFkb3dbMTJdID0gYmxvY2tbam5vMTJdOworICAgIHBpbnNydyAgICAgICUzNiwgd29yZCBbZXNpICsgJTIyICogU0laRU9GX1dPUkRdLCA0ICA7IHhtbV9zaGFkb3dbMjBdID0gYmxvY2tbam5vMjBdOworICAgIHBpbnNydyAgICAgICUzNywgd29yZCBbZXNpICsgJTMwICogU0laRU9GX1dPUkRdLCA0ICA7IHhtbV9zaGFkb3dbMjhdID0gYmxvY2tbam5vMjhdOworICAgIHBpbnNydyAgICAgICUzNCwgd29yZCBbZXNpICsgJTcgICogU0laRU9GX1dPUkRdLCA1ICA7IHhtbV9zaGFkb3dbNV0gPSBibG9ja1tqbm81XTsKKyAgICBwaW5zcncgICAgICAlMzUsIHdvcmQgW2VzaSArICUxNSAqIFNJWkVPRl9XT1JEXSwgNSAgOyB4bW1fc2hhZG93WzEzXSA9IGJsb2NrW2pubzEzXTsKKyAgICBwaW5zcncgICAgICAlMzYsIHdvcmQgW2VzaSArICUyMyAqIFNJWkVPRl9XT1JEXSwgNSAgOyB4bW1fc2hhZG93WzIxXSA9IGJsb2NrW2pubzIxXTsKKyAgICBwaW5zcncgICAgICAlMzcsIHdvcmQgW2VzaSArICUzMSAqIFNJWkVPRl9XT1JEXSwgNSAgOyB4bW1fc2hhZG93WzI5XSA9IGJsb2NrW2pubzI5XTsKKyAgICBwaW5zcncgICAgICAlMzQsIHdvcmQgW2VzaSArICU4ICAqIFNJWkVPRl9XT1JEXSwgNiAgOyB4bW1fc2hhZG93WzZdID0gYmxvY2tbam5vNl07CisgICAgcGluc3J3ICAgICAgJTM1LCB3b3JkIFtlc2kgKyAlMTYgKiBTSVpFT0ZfV09SRF0sIDYgIDsgeG1tX3NoYWRvd1sxNF0gPSBibG9ja1tqbm8xNF07CisgICAgcGluc3J3ICAgICAgJTM2LCB3b3JkIFtlc2kgKyAlMjQgKiBTSVpFT0ZfV09SRF0sIDYgIDsgeG1tX3NoYWRvd1syMl0gPSBibG9ja1tqbm8yMl07CisgICAgcGluc3J3ICAgICAgJTM3LCB3b3JkIFtlc2kgKyAlMzIgKiBTSVpFT0ZfV09SRF0sIDYgIDsgeG1tX3NoYWRvd1szMF0gPSBibG9ja1tqbm8zMF07CisgICAgcGluc3J3ICAgICAgJTM0LCB3b3JkIFtlc2kgKyAlOSAgKiBTSVpFT0ZfV09SRF0sIDcgIDsgeG1tX3NoYWRvd1s3XSA9IGJsb2NrW2pubzddOworICAgIHBpbnNydyAgICAgICUzNSwgd29yZCBbZXNpICsgJTE3ICogU0laRU9GX1dPUkRdLCA3ICA7IHhtbV9zaGFkb3dbMTVdID0gYmxvY2tbam5vMTVdOworICAgIHBpbnNydyAgICAgICUzNiwgd29yZCBbZXNpICsgJTI1ICogU0laRU9GX1dPUkRdLCA3ICA7IHhtbV9zaGFkb3dbMjNdID0gYmxvY2tbam5vMjNdOworJWlmICUxICE9IDMyCisgICAgcGluc3J3ICAgICAgJTM3LCB3b3JkIFtlc2kgKyAlMzMgKiBTSVpFT0ZfV09SRF0sIDcgIDsgeG1tX3NoYWRvd1szMV0gPSBibG9ja1tqbm8zMV07CislZWxzZQorICAgIHBpbnNydyAgICAgICUzNywgZWN4LCA3ICAgICAgICAgICAgIDsgeG1tX3NoYWRvd1szMV0gPSBibG9ja1tqbm8zMV07CislZW5kaWYKKyAgICBwY21wZ3R3ICAgICB4bW00LCAlMzQgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwY21wZ3R3ICAgICB4bW01LCAlMzUgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwY21wZ3R3ICAgICB4bW02LCAlMzYgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwY21wZ3R3ICAgICB4bW03LCAlMzcgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwYWRkdyAgICAgICAlMzQsIHhtbTQgICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBwYWRkdyAgICAgICAlMzUsIHhtbTUgICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBwYWRkdyAgICAgICAlMzYsIHhtbTYgICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBwYWRkdyAgICAgICAlMzcsIHhtbTcgICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzQsIHhtbTQgICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzUsIHhtbTUgICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzYsIHhtbTYgICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzcsIHhtbTcgICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICB4bW00LCAlMzQgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV94b3Jfc2kxMjgobmVnLCB4MSk7CisgICAgcHhvciAgICAgICAgeG1tNSwgJTM1ICAgICAgICAgICAgICAgOyBuZWcgPSBfbW1feG9yX3NpMTI4KG5lZywgeDEpOworICAgIHB4b3IgICAgICAgIHhtbTYsICUzNiAgICAgICAgICAgICAgIDsgbmVnID0gX21tX3hvcl9zaTEyOChuZWcsIHgxKTsKKyAgICBweG9yICAgICAgICB4bW03LCAlMzcgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV94b3Jfc2kxMjgobmVnLCB4MSk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZXNwICsgdDEgKyAlMSAqIFNJWkVPRl9XT1JEXSwgJTM0ICAgICAgICAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MSArIGtvKSwgeDEpOworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VzcCArIHQxICsgKCUxICsgOCkgKiBTSVpFT0ZfV09SRF0sICUzNSAgICA7IF9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKikodDEgKyBrbyArIDgpLCB4MSk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZXNwICsgdDEgKyAoJTEgKyAxNikgKiBTSVpFT0ZfV09SRF0sICUzNiAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MSArIGtvICsgMTYpLCB4MSk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZXNwICsgdDEgKyAoJTEgKyAyNCkgKiBTSVpFT0ZfV09SRF0sICUzNyAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MSArIGtvICsgMjQpLCB4MSk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZXNwICsgdDIgKyAlMSAqIFNJWkVPRl9XT1JEXSwgeG1tNCAgICAgICAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MiArIGtvKSwgbmVnKTsKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlc3AgKyB0MiArICglMSArIDgpICogU0laRU9GX1dPUkRdLCB4bW01ICAgOyBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHQyICsga28gKyA4KSwgbmVnKTsKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlc3AgKyB0MiArICglMSArIDE2KSAqIFNJWkVPRl9XT1JEXSwgeG1tNiAgOyBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHQyICsga28gKyAxNiksIG5lZyk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZXNwICsgdDIgKyAoJTEgKyAyNCkgKiBTSVpFT0ZfV09SRF0sIHhtbTcgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MiArIGtvICsgMjQpLCBuZWcpOworJWVuZG1hY3JvCisKKzsKKzsgRW5jb2RlIGEgc2luZ2xlIGJsb2NrJ3Mgd29ydGggb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwoSk9DVEVUICopCis7IGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19zc2UyKHdvcmtpbmdfc3RhdGUgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgYmxvY2ssIGludCBsYXN0X2RjX3ZhbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kZXJpdmVkX3RibCAqZGN0YmwsIGNfZGVyaXZlZF90YmwgKmFjdGJsKQorOworCis7IGVheCArIDggPSB3b3JraW5nX3N0YXRlICpzdGF0ZQorOyBlYXggKyAxMiA9IEpPQ1RFVCAqYnVmZmVyCis7IGVheCArIDE2ID0gSkNPRUZQVFIgYmxvY2sKKzsgZWF4ICsgMjAgPSBpbnQgbGFzdF9kY192YWwKKzsgZWF4ICsgMjQgPSBjX2Rlcml2ZWRfdGJsICpkY3RibAorOyBlYXggKyAyOCA9IGNfZGVyaXZlZF90YmwgKmFjdGJsCisKKyVkZWZpbmUgcGFkICAgICAgICAgNiAqIFNJWkVPRl9EV09SRCAgICA7IEFsaWduIHRvIDE2IGJ5dGVzCislZGVmaW5lIHQxICAgICAgICAgIHBhZAorJWRlZmluZSB0MiAgICAgICAgICB0MSArIChEQ1RTSVpFMiAqIFNJWkVPRl9XT1JEKQorJWRlZmluZSBibG9jayAgICAgICB0MiArIChEQ1RTSVpFMiAqIFNJWkVPRl9XT1JEKQorJWRlZmluZSBhY3RibCAgICAgICBibG9jayArIFNJWkVPRl9EV09SRAorJWRlZmluZSBidWZmZXIgICAgICBhY3RibCArIFNJWkVPRl9EV09SRAorJWRlZmluZSB0ZW1wICAgICAgICBidWZmZXIgKyBTSVpFT0ZfRFdPUkQKKyVkZWZpbmUgdGVtcDIgICAgICAgdGVtcCArIFNJWkVPRl9EV09SRAorJWRlZmluZSB0ZW1wMyAgICAgICB0ZW1wMiArIFNJWkVPRl9EV09SRAorJWRlZmluZSB0ZW1wNCAgICAgICB0ZW1wMyArIFNJWkVPRl9EV09SRAorJWRlZmluZSB0ZW1wNSAgICAgICB0ZW1wNCArIFNJWkVPRl9EV09SRAorJWRlZmluZSBnb3RwdHIgICAgICB0ZW1wNSArIFNJWkVPRl9EV09SRCAgOyB2b2lkICpnb3RwdHIKKyVkZWZpbmUgcHV0X2J1ZmZlciAgZWJ4CislZGVmaW5lIHB1dF9iaXRzICAgIGVkaQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX3NzZTIpCisKK0VYVE4oanNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIHRlbXA1KzkqU0laRU9GX0RXT1JELXBhZAorICAgIHB1c2ggICAgICAgIGVieAorICAgIHB1c2ggICAgICAgIGVjeAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZWJwCisKKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW2VheCs4XSAgICAgICA7ICh3b3JraW5nX3N0YXRlICpzdGF0ZSkKKyAgICBtb3YgICAgICAgICBwdXRfYnVmZmVyLCBEV09SRCBbZXNpKzhdICA7IHB1dF9idWZmZXIgPSBzdGF0ZS0+Y3VyLnB1dF9idWZmZXI7CisgICAgbW92ICAgICAgICAgcHV0X2JpdHMsIERXT1JEIFtlc2krMTJdICAgOyBwdXRfYml0cyA9IHN0YXRlLT5jdXIucHV0X2JpdHM7CisgICAgcHVzaCAgICAgICAgZXNpICAgICAgICAgICAgICAgICAgICAgICAgOyBlc2kgaXMgbm93IHNjcmF0Y2gKKworICAgIGdldF9HT1QgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgbW92cGljICAgICAgUE9JTlRFUiBbZXNwK2dvdHB0cl0sIGVkeCAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlY3gsIFBPSU5URVIgW2VheCsyOF0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2VheCsxNl0KKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW2VheCsxMl0KKyAgICBtb3YgICAgICAgICBQT0lOVEVSIFtlc3ArYWN0YmxdLCBlY3gKKyAgICBtb3YgICAgICAgICBQT0lOVEVSIFtlc3ArYmxvY2tdLCBlZHgKKyAgICBtb3YgICAgICAgICBQT0lOVEVSIFtlc3ArYnVmZmVyXSwgZXNpCisKKyAgICA7IEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBGLjEuMi4xCisgICAgbW92ICAgICAgICAgZXNpLCBQT0lOVEVSIFtlc3ArYmxvY2tdICA7IGJsb2NrCisgICAgbW92c3ggICAgICAgZWN4LCB3b3JkIFtlc2ldICAgICAgICAgICA7IHRlbXAgPSB0ZW1wMiA9IGJsb2NrWzBdIC0gbGFzdF9kY192YWw7CisgICAgc3ViICAgICAgICAgZWN4LCBEV09SRCBbZWF4KzIwXQorICAgIG1vdiAgICAgICAgIGVzaSwgZWN4CisKKyAgICA7IFRoaXMgaXMgYSB3ZWxsLWtub3duIHRlY2huaXF1ZSBmb3Igb2J0YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZQorICAgIDsgd2l0aCBvdXQgYSBicmFuY2guICBJdCBpcyBkZXJpdmVkIGZyb20gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgdGVjaG5pcXVlCisgICAgOyBwcmVzZW50ZWQgaW4gIkhvdyB0byBPcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gUHJvY2Vzc29ycyIsCisgICAgOyBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgYnkgQWduZXIgRm9nLgorICAgIG1vdiAgICAgICAgIGVkeCwgZWN4CisgICAgc2FyICAgICAgICAgZWR4LCAzMSAgICAgICAgICAgICAgICAgOyB0ZW1wMyA9IHRlbXAgPj4gKENIQVJfQklUICogc2l6ZW9mKGludCkgLSAxKTsKKyAgICB4b3IgICAgICAgICBlY3gsIGVkeCAgICAgICAgICAgICAgICA7IHRlbXAgXj0gdGVtcDM7CisgICAgc3ViICAgICAgICAgZWN4LCBlZHggICAgICAgICAgICAgICAgOyB0ZW1wIC09IHRlbXAzOworCisgICAgOyBGb3IgYSBuZWdhdGl2ZSBpbnB1dCwgd2FudCB0ZW1wMiA9IGJpdHdpc2UgY29tcGxlbWVudCBvZiBhYnMoaW5wdXQpCisgICAgOyBUaGlzIGNvZGUgYXNzdW1lcyB3ZSBhcmUgb24gYSB0d28ncyBjb21wbGVtZW50IG1hY2hpbmUKKyAgICBhZGQgICAgICAgICBlc2ksIGVkeCAgICAgICAgICAgICAgICA7IHRlbXAyICs9IHRlbXAzOworICAgIG1vdiAgICAgICAgIERXT1JEIFtlc3ArdGVtcF0sIGVzaSAgIDsgYmFja3VwIHRlbXAyIGluIHRlbXAKKworICAgIDsgRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudAorICAgIG1vdnBpYyAgICAgIGVicCwgUE9JTlRFUiBbZXNwK2dvdHB0cl0gICAgICAgICAgICAgICAgICAgICAgICA7IGxvYWQgR09UIGFkZHJlc3MgKGVicCkKKyAgICBtb3Z6eCAgICAgICBlZHgsIGJ5dGUgW0dPVE9GRihlYnAsIGpwZWdfbmJpdHNfdGFibGUgKyBlY3gpXSAgOyBuYml0cyA9IEpQRUdfTkJJVFModGVtcCk7CisgICAgbW92ICAgICAgICAgRFdPUkQgW2VzcCt0ZW1wMl0sIGVkeCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgYmFja3VwIG5iaXRzIGluIHRlbXAyCisKKyAgICA7IEVtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMKKyAgICBtb3YgICAgICAgICBlYnAsIFBPSU5URVIgW2VheCsyNF0gICAgICAgICA7IEFmdGVyIHRoaXMgcG9pbnQsIGFyZ3VtZW50cyBhcmUgbm90IGFjY2Vzc2libGUgYW55bW9yZQorICAgIG1vdiAgICAgICAgIGVheCwgIElOVCBbZWJwICsgZWR4ICogNF0gICAgIDsgY29kZSA9IGRjdGJsLT5laHVmY29bbmJpdHNdOworICAgIG1vdnp4ICAgICAgIGVjeCwgYnl0ZSBbZWJwICsgZWR4ICsgMTAyNF0gIDsgc2l6ZSA9IGRjdGJsLT5laHVmc2lbbmJpdHNdOworICAgIEVNSVRfQklUUyAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRU1JVF9CSVRTKGNvZGUsIHNpemUpCisKKyAgICBtb3YgICAgICAgICBlY3gsIERXT1JEIFtlc3ArdGVtcDJdICAgICAgICA7IHJlc3RvcmUgbmJpdHMKKworICAgIDsgTWFzayBvZmYgYW55IGV4dHJhIGJpdHMgaW4gY29kZQorICAgIG1vdiAgICAgICAgIGVheCwgMQorICAgIHNobCAgICAgICAgIGVheCwgY2wKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBhbmQgICAgICAgICBlYXgsIERXT1JEIFtlc3ArdGVtcF0gICA7IHRlbXAyICY9ICgoKEpMT05HKTEpPDxuYml0cykgLSAxOworCisgICAgOyBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwKKyAgICA7IG9yIHRoZSBjb21wbGVtZW50IG9mIGl0cyBtYWduaXR1ZGUsIGlmIG5lZ2F0aXZlLgorICAgIEVNSVRfQklUUyAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgRU1JVF9CSVRTKHRlbXAyLCBuYml0cykKKworICAgIDsgUHJlcGFyZSBkYXRhCisgICAgeG9yICAgICAgICAgZWN4LCBlY3gKKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW2VzcCtibG9ja10KKyAgICBrbG9vcF9wcmVwYXJlICAwLCAgMSwgIDgsICAxNiwgOSwgIDIsICAzLCAgMTAsIDE3LCAyNCwgMzIsIDI1LCBcCisgICAgICAgICAgICAgICAgICAgMTgsIDExLCA0LCAgNSwgIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwgXAorICAgICAgICAgICAgICAgICAgIDI3LCAyMCwgMTMsIDYsICA3LCAgMTQsIDIxLCAyOCwgMzUsIFwKKyAgICAgICAgICAgICAgICAgICB4bW0wLCB4bW0xLCB4bW0yLCB4bW0zCisgICAga2xvb3BfcHJlcGFyZSAgMzIsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LCAyOSwgMjIsIDE1LCAyMywgXAorICAgICAgICAgICAgICAgICAgIDMwLCAzNywgNDQsIDUxLCA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsIFwKKyAgICAgICAgICAgICAgICAgICA1MywgNjAsIDYxLCA1NCwgNDcsIDU1LCA2MiwgNjMsIDYzLCBcCisgICAgICAgICAgICAgICAgICAgeG1tMCwgeG1tMSwgeG1tMiwgeG1tMworCisgICAgcHhvciAgICAgICAgeG1tNywgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW2VzcCArIHQxICsgMCAqIFNJWkVPRl9XT1JEXSAgIDsgX19tMTI4aSB0bXAwID0gX21tX2xvYWR1X3NpMTI4KChfX20xMjhpICopKHQxICsgMCkpOworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW2VzcCArIHQxICsgOCAqIFNJWkVPRl9XT1JEXSAgIDsgX19tMTI4aSB0bXAxID0gX21tX2xvYWR1X3NpMTI4KChfX20xMjhpICopKHQxICsgOCkpOworICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW2VzcCArIHQxICsgMTYgKiBTSVpFT0ZfV09SRF0gIDsgX19tMTI4aSB0bXAyID0gX21tX2xvYWR1X3NpMTI4KChfX20xMjhpICopKHQxICsgMTYpKTsKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtlc3AgKyB0MSArIDI0ICogU0laRU9GX1dPUkRdICA7IF9fbTEyOGkgdG1wMyA9IF9tbV9sb2FkdV9zaTEyOCgoX19tMTI4aSAqKSh0MSArIDI0KSk7CisgICAgcGNtcGVxdyAgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB0bXAwID0gX21tX2NtcGVxX2VwaTE2KHRtcDAsIHplcm8pOworICAgIHBjbXBlcXcgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgdG1wMSA9IF9tbV9jbXBlcV9lcGkxNih0bXAxLCB6ZXJvKTsKKyAgICBwY21wZXF3ICAgICB4bW0yLCB4bW03ICAgICAgICAgICAgICA7IHRtcDIgPSBfbW1fY21wZXFfZXBpMTYodG1wMiwgemVybyk7CisgICAgcGNtcGVxdyAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB0bXAzID0gX21tX2NtcGVxX2VwaTE2KHRtcDMsIHplcm8pOworICAgIHBhY2tzc3diICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgdG1wMCA9IF9tbV9wYWNrc19lcGkxNih0bXAwLCB0bXAxKTsKKyAgICBwYWNrc3N3YiAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHRtcDIgPSBfbW1fcGFja3NfZXBpMTYodG1wMiwgdG1wMyk7CisgICAgcG1vdm1za2IgICAgZWR4LCB4bW0wICAgICAgICAgICAgICAgOyBpbmRleCAgPSAoKHVpbnQ2NF90KV9tbV9tb3ZlbWFza19lcGk4KHRtcDApKSA8PCAwOworICAgIHBtb3Ztc2tiICAgIGVjeCwgeG1tMiAgICAgICAgICAgICAgIDsgaW5kZXggID0gKCh1aW50NjRfdClfbW1fbW92ZW1hc2tfZXBpOCh0bXAyKSkgPDwgMTY7CisgICAgc2hsICAgICAgICAgZWN4LCAxNgorICAgIG9yICAgICAgICAgIGVkeCwgZWN4CisgICAgbm90ICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBpbmRleCA9IH5pbmRleDsKKworICAgIGxlYSAgICAgICAgIGVzaSwgW2VzcCt0MV0KKyAgICBtb3YgICAgICAgICBlYnAsIFBPSU5URVIgW2VzcCthY3RibF0gIDsgZWJwID0gYWN0YmwKKworLkJMT09QOgorICAgIGJzZiAgICAgICAgIGVjeCwgZWR4ICAgICAgICAgICAgICAgIDsgciA9IF9fYnVpbHRpbl9jdHpsKGluZGV4KTsKKyAgICBqeiAgICAgICAgICBuZWFyIC5FTE9PUAorICAgIGxlYSAgICAgICAgIGVzaSwgW2VzaStlY3gqMl0gICAgICAgIDsgayArPSByOworICAgIHNociAgICAgICAgIGVkeCwgY2wgICAgICAgICAgICAgICAgIDsgaW5kZXggPj49IHI7CisgICAgbW92ICAgICAgICAgRFdPUkQgW2VzcCt0ZW1wM10sIGVkeAorLkJSTE9PUDoKKyAgICBjbXAgICAgICAgICBlY3gsIDE2ICAgICAgICAgICAgICAgICAgICAgICA7IHdoaWxlIChyID4gMTUpIHsKKyAgICBqbCAgICAgICAgICBuZWFyIC5FUkxPT1AKKyAgICBzdWIgICAgICAgICBlY3gsIDE2ICAgICAgICAgICAgICAgICAgICAgICA7IHIgLT0gMTY7CisgICAgbW92ICAgICAgICAgRFdPUkQgW2VzcCt0ZW1wXSwgZWN4CisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW2VicCArIDI0MCAqIDRdICAgICAgOyBjb2RlXzB4ZjAgPSBhY3RibC0+ZWh1ZmNvWzB4ZjBdOworICAgIG1vdnp4ICAgICAgIGVjeCwgYnl0ZSBbZWJwICsgMTAyNCArIDI0MF0gIDsgc2l6ZV8weGYwID0gYWN0YmwtPmVodWZzaVsweGYwXTsKKyAgICBFTUlUX0JJVFMgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgICA7IEVNSVRfQklUUyhjb2RlXzB4ZjAsIHNpemVfMHhmMCkKKyAgICBtb3YgICAgICAgICBlY3gsIERXT1JEIFtlc3ArdGVtcF0KKyAgICBqbXAgICAgICAgICAuQlJMT09QCisuRVJMT09QOgorICAgIG1vdnN4ICAgICAgIGVheCwgd29yZCBbZXNpXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHRlbXAgPSB0MVtrXTsKKyAgICBtb3ZwaWMgICAgICBlZHgsIFBPSU5URVIgW2VzcCtnb3RwdHJdICAgICAgICAgICAgICAgICAgICAgICAgOyBsb2FkIEdPVCBhZGRyZXNzIChlZHgpCisgICAgbW92enggICAgICAgZWF4LCBieXRlIFtHT1RPRkYoZWR4LCBqcGVnX25iaXRzX3RhYmxlICsgZWF4KV0gIDsgbmJpdHMgPSBKUEVHX05CSVRTKHRlbXApOworICAgIG1vdiAgICAgICAgIERXT1JEIFtlc3ArdGVtcDJdLCBlYXgKKyAgICA7IEVtaXQgSHVmZm1hbiBzeW1ib2wgZm9yIHJ1biBsZW5ndGggLyBudW1iZXIgb2YgYml0cworICAgIHNobCAgICAgICAgIGVjeCwgNCAgICAgICAgICAgICAgICAgICAgICAgIDsgdGVtcDMgPSAociA8PCA0KSArIG5iaXRzOworICAgIGFkZCAgICAgICAgIGVjeCwgZWF4CisgICAgbW92ICAgICAgICAgZWF4LCAgSU5UIFtlYnAgKyBlY3ggKiA0XSAgICAgOyBjb2RlID0gYWN0YmwtPmVodWZjb1t0ZW1wM107CisgICAgbW92enggICAgICAgZWN4LCBieXRlIFtlYnAgKyBlY3ggKyAxMDI0XSAgOyBzaXplID0gYWN0YmwtPmVodWZzaVt0ZW1wM107CisgICAgRU1JVF9CSVRTICAgZWF4CisKKyAgICBtb3ZzeCAgICAgICBlZHgsIHdvcmQgW2VzaStEQ1RTSVpFMioyXSAgICA7IHRlbXAyID0gdDJba107CisgICAgOyBNYXNrIG9mZiBhbnkgZXh0cmEgYml0cyBpbiBjb2RlCisgICAgbW92ICAgICAgICAgZWN4LCBEV09SRCBbZXNwK3RlbXAyXQorICAgIG1vdiAgICAgICAgIGVheCwgMQorICAgIHNobCAgICAgICAgIGVheCwgY2wKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBhbmQgICAgICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgICA7IHRlbXAyICY9ICgoKEpMT05HKTEpPDxuYml0cykgLSAxOworICAgIEVNSVRfQklUUyAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgUFVUX0JJVFModGVtcDIsIG5iaXRzKQorICAgIG1vdiAgICAgICAgIGVkeCwgRFdPUkQgW2VzcCt0ZW1wM10KKyAgICBhZGQgICAgICAgICBlc2ksIDIgICAgICAgICAgICAgICAgICA7ICsrazsKKyAgICBzaHIgICAgICAgICBlZHgsIDEgICAgICAgICAgICAgICAgICA7IGluZGV4ID4+PSAxOworCisgICAgam1wICAgICAgICAgLkJMT09QCisuRUxPT1A6CisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbZXNwICsgdDEgKyAzMiAqIFNJWkVPRl9XT1JEXSAgOyBfX20xMjhpIHRtcDAgPSBfbW1fbG9hZHVfc2kxMjgoKF9fbTEyOGkgKikodDEgKyAwKSk7CisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbZXNwICsgdDEgKyA0MCAqIFNJWkVPRl9XT1JEXSAgOyBfX20xMjhpIHRtcDEgPSBfbW1fbG9hZHVfc2kxMjgoKF9fbTEyOGkgKikodDEgKyA4KSk7CisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbZXNwICsgdDEgKyA0OCAqIFNJWkVPRl9XT1JEXSAgOyBfX20xMjhpIHRtcDIgPSBfbW1fbG9hZHVfc2kxMjgoKF9fbTEyOGkgKikodDEgKyAxNikpOworICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW2VzcCArIHQxICsgNTYgKiBTSVpFT0ZfV09SRF0gIDsgX19tMTI4aSB0bXAzID0gX21tX2xvYWR1X3NpMTI4KChfX20xMjhpICopKHQxICsgMjQpKTsKKyAgICBwY21wZXF3ICAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHRtcDAgPSBfbW1fY21wZXFfZXBpMTYodG1wMCwgemVybyk7CisgICAgcGNtcGVxdyAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB0bXAxID0gX21tX2NtcGVxX2VwaTE2KHRtcDEsIHplcm8pOworICAgIHBjbXBlcXcgICAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgdG1wMiA9IF9tbV9jbXBlcV9lcGkxNih0bXAyLCB6ZXJvKTsKKyAgICBwY21wZXF3ICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHRtcDMgPSBfbW1fY21wZXFfZXBpMTYodG1wMywgemVybyk7CisgICAgcGFja3Nzd2IgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB0bXAwID0gX21tX3BhY2tzX2VwaTE2KHRtcDAsIHRtcDEpOworICAgIHBhY2tzc3diICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgdG1wMiA9IF9tbV9wYWNrc19lcGkxNih0bXAyLCB0bXAzKTsKKyAgICBwbW92bXNrYiAgICBlZHgsIHhtbTAgICAgICAgICAgICAgICA7IGluZGV4ICA9ICgodWludDY0X3QpX21tX21vdmVtYXNrX2VwaTgodG1wMCkpIDw8IDA7CisgICAgcG1vdm1za2IgICAgZWN4LCB4bW0yICAgICAgICAgICAgICAgOyBpbmRleCAgPSAoKHVpbnQ2NF90KV9tbV9tb3ZlbWFza19lcGk4KHRtcDIpKSA8PCAxNjsKKyAgICBzaGwgICAgICAgICBlY3gsIDE2CisgICAgb3IgICAgICAgICAgZWR4LCBlY3gKKyAgICBub3QgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IGluZGV4ID0gfmluZGV4OworCisgICAgbGVhICAgICAgICAgZWF4LCBbZXNwICsgdDEgKyAoRENUU0laRTIvMikgKiAyXQorICAgIHN1YiAgICAgICAgIGVheCwgZXNpCisgICAgc2hyICAgICAgICAgZWF4LCAxCisgICAgYnNmICAgICAgICAgZWN4LCBlZHggICAgICAgICAgICAgICAgOyByID0gX19idWlsdGluX2N0emwoaW5kZXgpOworICAgIGp6ICAgICAgICAgIG5lYXIgLkVMT09QMgorICAgIHNociAgICAgICAgIGVkeCwgY2wgICAgICAgICAgICAgICAgIDsgaW5kZXggPj49IHI7CisgICAgYWRkICAgICAgICAgZWN4LCBlYXgKKyAgICBsZWEgICAgICAgICBlc2ksIFtlc2krZWN4KjJdICAgICAgICA7IGsgKz0gcjsKKyAgICBtb3YgICAgICAgICBEV09SRCBbZXNwK3RlbXAzXSwgZWR4CisgICAgam1wICAgICAgICAgLkJSTE9PUDIKKy5CTE9PUDI6CisgICAgYnNmICAgICAgICAgZWN4LCBlZHggICAgICAgICAgICAgICAgOyByID0gX19idWlsdGluX2N0emwoaW5kZXgpOworICAgIGp6ICAgICAgICAgIG5lYXIgLkVMT09QMgorICAgIGxlYSAgICAgICAgIGVzaSwgW2VzaStlY3gqMl0gICAgICAgIDsgayArPSByOworICAgIHNociAgICAgICAgIGVkeCwgY2wgICAgICAgICAgICAgICAgIDsgaW5kZXggPj49IHI7CisgICAgbW92ICAgICAgICAgRFdPUkQgW2VzcCt0ZW1wM10sIGVkeAorLkJSTE9PUDI6CisgICAgY21wICAgICAgICAgZWN4LCAxNiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGlsZSAociA+IDE1KSB7CisgICAgamwgICAgICAgICAgbmVhciAuRVJMT09QMgorICAgIHN1YiAgICAgICAgIGVjeCwgMTYgICAgICAgICAgICAgICAgICAgICAgIDsgciAtPSAxNjsKKyAgICBtb3YgICAgICAgICBEV09SRCBbZXNwK3RlbXBdLCBlY3gKKyAgICBtb3YgICAgICAgICBlYXgsIElOVCBbZWJwICsgMjQwICogNF0gICAgICA7IGNvZGVfMHhmMCA9IGFjdGJsLT5laHVmY29bMHhmMF07CisgICAgbW92enggICAgICAgZWN4LCBieXRlIFtlYnAgKyAxMDI0ICsgMjQwXSAgOyBzaXplXzB4ZjAgPSBhY3RibC0+ZWh1ZnNpWzB4ZjBdOworICAgIEVNSVRfQklUUyAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRU1JVF9CSVRTKGNvZGVfMHhmMCwgc2l6ZV8weGYwKQorICAgIG1vdiAgICAgICAgIGVjeCwgRFdPUkQgW2VzcCt0ZW1wXQorICAgIGptcCAgICAgICAgIC5CUkxPT1AyCisuRVJMT09QMjoKKyAgICBtb3ZzeCAgICAgICBlYXgsIHdvcmQgW2VzaV0gICAgICAgICA7IHRlbXAgPSB0MVtrXTsKKyAgICBic3IgICAgICAgICBlYXgsIGVheCAgICAgICAgICAgICAgICA7IG5iaXRzID0gMzIgLSBfX2J1aWx0aW5fY2x6KHRlbXApOworICAgIGluYyAgICAgICAgIGVheAorICAgIG1vdiAgICAgICAgIERXT1JEIFtlc3ArdGVtcDJdLCBlYXgKKyAgICA7IEVtaXQgSHVmZm1hbiBzeW1ib2wgZm9yIHJ1biBsZW5ndGggLyBudW1iZXIgb2YgYml0cworICAgIHNobCAgICAgICAgIGVjeCwgNCAgICAgICAgICAgICAgICAgICAgICAgIDsgdGVtcDMgPSAociA8PCA0KSArIG5iaXRzOworICAgIGFkZCAgICAgICAgIGVjeCwgZWF4CisgICAgbW92ICAgICAgICAgZWF4LCAgSU5UIFtlYnAgKyBlY3ggKiA0XSAgICAgOyBjb2RlID0gYWN0YmwtPmVodWZjb1t0ZW1wM107CisgICAgbW92enggICAgICAgZWN4LCBieXRlIFtlYnAgKyBlY3ggKyAxMDI0XSAgOyBzaXplID0gYWN0YmwtPmVodWZzaVt0ZW1wM107CisgICAgRU1JVF9CSVRTICAgZWF4CisKKyAgICBtb3ZzeCAgICAgICBlZHgsIHdvcmQgW2VzaStEQ1RTSVpFMioyXSAgICA7IHRlbXAyID0gdDJba107CisgICAgOyBNYXNrIG9mZiBhbnkgZXh0cmEgYml0cyBpbiBjb2RlCisgICAgbW92ICAgICAgICAgZWN4LCBEV09SRCBbZXNwK3RlbXAyXQorICAgIG1vdiAgICAgICAgIGVheCwgMQorICAgIHNobCAgICAgICAgIGVheCwgY2wKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBhbmQgICAgICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgICA7IHRlbXAyICY9ICgoKEpMT05HKTEpPDxuYml0cykgLSAxOworICAgIEVNSVRfQklUUyAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgUFVUX0JJVFModGVtcDIsIG5iaXRzKQorICAgIG1vdiAgICAgICAgIGVkeCwgRFdPUkQgW2VzcCt0ZW1wM10KKyAgICBhZGQgICAgICAgICBlc2ksIDIgICAgICAgICAgICAgICAgICA7ICsrazsKKyAgICBzaHIgICAgICAgICBlZHgsIDEgICAgICAgICAgICAgICAgICA7IGluZGV4ID4+PSAxOworCisgICAgam1wICAgICAgICAgLkJMT09QMgorLkVMT09QMjoKKyAgICA7IElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlCisgICAgbGVhICAgICAgICAgZWR4LCBbZXNwICsgdDEgKyAoRENUU0laRTItMSkgKiAyXSAgOyByID0gRENUU0laRTItMS1rOworICAgIGNtcCAgICAgICAgIGVkeCwgZXNpICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgaWYgKHIgPiAwKSB7CisgICAgamUgICAgICAgICAgLkVGTgorICAgIG1vdiAgICAgICAgIGVheCwgIElOVCBbZWJwXSAgICAgICAgICAgICAgICAgICAgIDsgY29kZSA9IGFjdGJsLT5laHVmY29bMF07CisgICAgbW92enggICAgICAgZWN4LCBieXRlIFtlYnAgKyAxMDI0XSAgICAgICAgICAgICAgOyBzaXplID0gYWN0YmwtPmVodWZzaVswXTsKKyAgICBFTUlUX0JJVFMgICBlYXgKKy5FRk46CisgICAgbW92ICAgICAgICAgZWF4LCBbZXNwK2J1ZmZlcl0KKyAgICBwb3AgICAgICAgICBlc2kKKyAgICA7IFNhdmUgcHV0X2J1ZmZlciAmIHB1dF9iaXRzCisgICAgbW92ICAgICAgICAgRFdPUkQgW2VzaSs4XSwgcHV0X2J1ZmZlciAgOyBzdGF0ZS0+Y3VyLnB1dF9idWZmZXIgPSBwdXRfYnVmZmVyOworICAgIG1vdiAgICAgICAgIERXT1JEIFtlc2krMTJdLCBwdXRfYml0cyAgIDsgc3RhdGUtPmN1ci5wdXRfYml0cyA9IHB1dF9iaXRzOworCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlY3gKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNwaHVmZi1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY3BodWZmLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzYzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNwaHVmZi1zc2UyLmFzbQpAQCAtMCwwICsxLDY2MCBAQAorOworOyBqY3BodWZmLXNzZTIuYXNtIC0gcHJlcGFyZSBkYXRhIGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGVuY29kaW5nIChTU0UyKQorOworOyBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMTgsIE1hdHRoaWV1IERhcmJvaXMKKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGFuIFNTRTIgaW1wbGVtZW50YXRpb24gb2YgZGF0YSBwcmVwYXJhdGlvbiBmb3IgcHJvZ3Jlc3NpdmUKKzsgSHVmZm1hbiBlbmNvZGluZy4gIFNlZSBqY3BodWZmLmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgTWFjcm9zIHRvIGxvYWQgZGF0YSBmb3IganNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlX3NzZTIoKSBhbmQKKzsganNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZV9zc2UyKCkKKworJW1hY3JvIExPQUQxNiAwCisgICAgcHhvciAgICAgICAgTjAsIE4wCisgICAgcHhvciAgICAgICAgTjEsIE4xCisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgMCpTSVpFT0ZfSU5UXQorICAgIG1vdiAgICAgICAgIFQxLCBJTlQgW0xVVCArICA4KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMAorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDAKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICAxKlNJWkVPRl9JTlRdCisgICAgbW92ICAgICAgICAgVDEsIElOVCBbTFVUICsgIDkqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCAxCisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgMQorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDIqU0laRU9GX0lOVF0KKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxMCpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDIKKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAyCisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgMypTSVpFT0ZfSU5UXQorICAgIG1vdiAgICAgICAgIFQxLCBJTlQgW0xVVCArIDExKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMworICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDMKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICA0KlNJWkVPRl9JTlRdCisgICAgbW92ICAgICAgICAgVDEsIElOVCBbTFVUICsgMTIqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCA0CisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgNAorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDUqU0laRU9GX0lOVF0KKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxMypTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDUKKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA1CisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgNipTSVpFT0ZfSU5UXQorICAgIG1vdiAgICAgICAgIFQxLCBJTlQgW0xVVCArIDE0KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNgorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDYKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICA3KlNJWkVPRl9JTlRdCisgICAgbW92ICAgICAgICAgVDEsIElOVCBbTFVUICsgMTUqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCA3CisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgNworJWVuZG1hY3JvCisKKyVtYWNybyBMT0FEMTUgMAorICAgIHB4b3IgICAgICAgIE4wLCBOMAorICAgIHB4b3IgICAgICAgIE4xLCBOMQorICAgIHB4b3IgICAgICAgIFgxLCBYMQorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDAqU0laRU9GX0lOVF0KKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAgOCpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDAKKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAwCisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgMSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDEKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICAyKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMgorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDMqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCAzCisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgNCpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDQKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICA1KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNQorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDYqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCA2CisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgNypTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDcKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgMgorICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAgOSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDEKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgMworICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxMCpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDIKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNAorICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxMSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDMKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNQorICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxMipTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDQKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNgorICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxMypTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDUKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNworICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAxNCpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDYKKyUlLkVMT0FEMTU6CislZW5kbWFjcm8KKworJW1hY3JvIExPQUQ4IDAKKyAgICBweG9yICAgICAgICBOMCwgTjAKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICAwKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMAorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDEqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCAxCisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgMipTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDIKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICAzKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMworCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDQqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCA0CisKKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtMVVQgKyAgNSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDUKKworICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW0xVVCArICA2KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNgorCisgICAgbW92ICAgICAgICAgVDAsIElOVCBbTFVUICsgIDcqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCA3CislZW5kbWFjcm8KKworJW1hY3JvIExPQUQ3IDAKKyAgICBweG9yICAgICAgICBOMCwgTjAKKyAgICBweG9yICAgICAgICBYMCwgWDAKKworICAgIG1vdiAgICAgICAgIFQxLCBJTlQgW0xVVCArICAwKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgMAorCisgICAgY21wICAgICAgICAgTEVORU5ELCAyCisgICAgamwgICAgICAgICAgJSUuRUxPQUQ3CisgICAgbW92ICAgICAgICAgVDEsIElOVCBbTFVUICsgIDEqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAxCisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDMKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAgMipTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDIKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNAorICAgIGpsICAgICAgICAgICUlLkVMT0FENworICAgIG1vdiAgICAgICAgIFQxLCBJTlQgW0xVVCArICAzKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgMworCisgICAgY21wICAgICAgICAgTEVORU5ELCA1CisgICAgamwgICAgICAgICAgJSUuRUxPQUQ3CisgICAgbW92ICAgICAgICAgVDEsIElOVCBbTFVUICsgIDQqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA0CisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDYKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMSwgSU5UIFtMVVQgKyAgNSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDUKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNworICAgIGpsICAgICAgICAgICUlLkVMT0FENworICAgIG1vdiAgICAgICAgIFQxLCBJTlQgW0xVVCArICA2KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgNgorJSUuRUxPQUQ3OgorJWVuZG1hY3JvCisKKyVtYWNybyBSRURVQ0UwIDAKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtWQUxVRVMgKyAoIDAqMildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbVkFMVUVTICsgKCA4KjIpXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW1ZBTFVFUyArICgxNioyKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtWQUxVRVMgKyAoMjQqMildCisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbVkFMVUVTICsgKDMyKjIpXQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW1ZBTFVFUyArICg0MCoyKV0KKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtWQUxVRVMgKyAoNDgqMildCisKKyAgICBwY21wZXF3ICAgICB4bW0wLCBaRVJPCisgICAgcGNtcGVxdyAgICAgeG1tMSwgWkVSTworICAgIHBjbXBlcXcgICAgIHhtbTIsIFpFUk8KKyAgICBwY21wZXF3ICAgICB4bW0zLCBaRVJPCisgICAgcGNtcGVxdyAgICAgeG1tNCwgWkVSTworICAgIHBjbXBlcXcgICAgIHhtbTUsIFpFUk8KKyAgICBwY21wZXF3ICAgICB4bW02LCBaRVJPCisgICAgcGNtcGVxdyAgICAgeG1tNywgWE1NV09SRCBbVkFMVUVTICsgKDU2KjIpXQorCisgICAgcGFja3Nzd2IgICAgeG1tMCwgeG1tMQorICAgIHBhY2tzc3diICAgIHhtbTIsIHhtbTMKKyAgICBwYWNrc3N3YiAgICB4bW00LCB4bW01CisgICAgcGFja3Nzd2IgICAgeG1tNiwgeG1tNworCisgICAgcG1vdm1za2IgICAgZWF4LCB4bW0wCisgICAgcG1vdm1za2IgICAgZWN4LCB4bW0yCisgICAgcG1vdm1za2IgICAgZWR4LCB4bW00CisgICAgcG1vdm1za2IgICAgZXNpLCB4bW02CisKKyAgICBzaGwgICAgICAgICBlY3gsIDE2CisgICAgc2hsICAgICAgICAgZXNpLCAxNgorCisgICAgb3IgICAgICAgICAgZWF4LCBlY3gKKyAgICBvciAgICAgICAgICBlZHgsIGVzaQorCisgICAgbm90ICAgICAgICAgZWF4CisgICAgbm90ICAgICAgICAgZWR4CisKKyAgICBtb3YgICAgICAgICBlZGksIFpFUk9CSVRTCisKKyAgICBtb3YgICAgICAgICBJTlQgW2VkaV0sIGVheAorICAgIG1vdiAgICAgICAgIElOVCBbZWRpK1NJWkVPRl9JTlRdLCBlZHgKKyVlbmRtYWNybworCis7Cis7IFByZXBhcmUgZGF0YSBmb3IganNpbWRfZW5jb2RlX21jdV9BQ19maXJzdCgpLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlX3NzZTIoY29uc3QgSkNPRUYgKmJsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IFNsLCBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqemVyb2JpdHMpCis7Cis7IGVheCArIDggPSBjb25zdCBKQ09FRiAqYmxvY2sKKzsgZWF4ICsgMTIgPSBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydAorOyBlYXggKyAxNiA9IGludCBTbAorOyBlYXggKyAyMCA9IGludCBBbAorOyBlYXggKyAyNCA9IEpDT0VGICp2YWx1ZXMKKzsgZWF4ICsgMjggPSBzaXplX3QgKnplcm9iaXRzCisKKyVkZWZpbmUgWkVSTyAgICB4bW03CislZGVmaW5lIFgwICAgICAgeG1tMAorJWRlZmluZSBYMSAgICAgIHhtbTEKKyVkZWZpbmUgTjAgICAgICB4bW0yCislZGVmaW5lIE4xICAgICAgeG1tMworJWRlZmluZSBBTCAgICAgIHhtbTQKKyVkZWZpbmUgSyAgICAgICBlYXgKKyVkZWZpbmUgTEVORU5EICBlYXgKKyVkZWZpbmUgTFVUICAgICBlYngKKyVkZWZpbmUgVDAgICAgICBlY3gKKyVkZWZpbmUgVDEgICAgICBlZHgKKyVkZWZpbmUgQkxPQ0sgICBlc2kKKyVkZWZpbmUgVkFMVUVTICBlZGkKKyVkZWZpbmUgTEVOICAgICBlYnAKKworJWRlZmluZSBaRVJPQklUUyAgSU5UIFtlc3AgKyA1ICogNF0KKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZV9zc2UyKQorCitFWFROKGpzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZV9zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCA0CisgICAgcHVzaCAgICAgICAgZWJ4CisgICAgcHVzaCAgICAgICAgZWN4Cis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKyAgICBwdXNoICAgICAgICBlYnAKKworICAgIG1vdiAgICAgICAgIEJMT0NLLCBJTlQgW2VheCArIDhdCisgICAgbW92ICAgICAgICAgTFVULCBJTlQgW2VheCArIDEyXQorICAgIG1vdiAgICAgICAgIFZBTFVFUywgSU5UIFtlYXggKyAyNF0KKyAgICBtb3ZkICAgICAgICBBTCwgSU5UIFtlYXggKyAyMF0KKyAgICBtb3YgICAgICAgICBUMCwgSU5UIFtlYXggKyAyOF0KKyAgICBtb3YgICAgICAgICBaRVJPQklUUywgVDAKKyAgICBtb3YgICAgICAgICBMRU4sIElOVCBbZWF4ICsgMTZdCisgICAgcHhvciAgICAgICAgWkVSTywgWkVSTworICAgIG1vdiAgICAgICAgIEssIExFTgorICAgIGFuZCAgICAgICAgIEssIC0xNgorICAgIHNociAgICAgICAgIEssIDQKKyAgICBqeiAgICAgICAgICAuRUxPT1AxNgorLkJMT09QMTY6CisgICAgTE9BRDE2CisgICAgcGNtcGd0dyAgICAgTjAsIFgwCisgICAgcGNtcGd0dyAgICAgTjEsIFgxCisgICAgcGFkZHcgICAgICAgWDAsIE4wCisgICAgcGFkZHcgICAgICAgWDEsIE4xCisgICAgcHhvciAgICAgICAgWDAsIE4wCisgICAgcHhvciAgICAgICAgWDEsIE4xCisgICAgcHNybHcgICAgICAgWDAsIEFMCisgICAgcHNybHcgICAgICAgWDEsIEFMCisgICAgcHhvciAgICAgICAgTjAsIFgwCisgICAgcHhvciAgICAgICAgTjEsIFgxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDApICogMl0sIFgwCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDgpICogMl0sIFgxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDAgKyBEQ1RTSVpFMikgKiAyXSwgTjAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoOCArIERDVFNJWkUyKSAqIDJdLCBOMQorICAgIGFkZCAgICAgICAgIFZBTFVFUywgMTYqMgorICAgIGFkZCAgICAgICAgIExVVCwgMTYqU0laRU9GX0lOVAorICAgIGRlYyAgICAgICAgIEsKKyAgICBqbnogICAgICAgICAuQkxPT1AxNgorLkVMT09QMTY6CisgICAgbW92ICAgICAgICAgTEVORU5ELCBMRU4KKyAgICBhbmQgICAgICAgICBMRU5FTkQsIDcKKworICAgIHRlc3QgICAgICAgIExFTiwgOAorICAgIGp6ICAgICAgICAgIC5UUlk3CisgICAgdGVzdCAgICAgICAgTEVOLCA3CisgICAganogICAgICAgICAgLlRSWTgKKworICAgIExPQUQxNQorICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBjbXBndHcgICAgIE4xLCBYMQorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHBhZGR3ICAgICAgIFgxLCBOMQorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgxLCBOMQorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIHBzcmx3ICAgICAgIFgxLCBBTAorICAgIHB4b3IgICAgICAgIE4wLCBYMAorICAgIHB4b3IgICAgICAgIE4xLCBYMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICg4KSAqIDJdLCBYMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwICsgRENUU0laRTIpICogMl0sIE4wCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDggKyBEQ1RTSVpFMikgKiAyXSwgTjEKKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDE2KjIKKyAgICBqbXAgICAgICAgICAuUEFERElORworLlRSWTg6CisgICAgTE9BRDgKKyAgICBwY21wZ3R3ICAgICBOMCwgWDAKKyAgICBwYWRkdyAgICAgICBYMCwgTjAKKyAgICBweG9yICAgICAgICBYMCwgTjAKKyAgICBwc3JsdyAgICAgICBYMCwgQUwKKyAgICBweG9yICAgICAgICBOMCwgWDAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoMCkgKiAyXSwgWDAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoMCArIERDVFNJWkUyKSAqIDJdLCBOMAorICAgIGFkZCAgICAgICAgIFZBTFVFUywgOCoyCisgICAgam1wICAgICAgICAgLlBBRERJTkcKKy5UUlk3OgorICAgIExPQUQ3CisgICAgcGNtcGd0dyAgICAgTjAsIFgwCisgICAgcGFkZHcgICAgICAgWDAsIE4wCisgICAgcHhvciAgICAgICAgWDAsIE4wCisgICAgcHNybHcgICAgICAgWDAsIEFMCisgICAgcHhvciAgICAgICAgTjAsIFgwCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDApICogMl0sIFgwCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDAgKyBEQ1RTSVpFMikgKiAyXSwgTjAKKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDgqMgorLlBBRERJTkc6CisgICAgbW92ICAgICAgICAgSywgTEVOCisgICAgYWRkICAgICAgICAgSywgNworICAgIGFuZCAgICAgICAgIEssIC04CisgICAgc2hyICAgICAgICAgSywgMworICAgIHN1YiAgICAgICAgIEssIERDVFNJWkUyLzgKKyAgICBqeiAgICAgICAgICAuRVBBRERJTkcKKyAgICBhbGlnbiAgICAgICAxNgorLlpFUk9MT09QOgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArIDBdLCBaRVJPCisgICAgYWRkICAgICAgICAgVkFMVUVTLCA4KjIKKyAgICBpbmMgICAgICAgICBLCisgICAgam56ICAgICAgICAgLlpFUk9MT09QCisuRVBBRERJTkc6CisgICAgc3ViICAgICAgICAgVkFMVUVTLCBEQ1RTSVpFMioyCisKKyAgICBSRURVQ0UwCisKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVjeAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKyV1bmRlZiBaRVJPCisldW5kZWYgWDAKKyV1bmRlZiBYMQorJXVuZGVmIE4wCisldW5kZWYgTjEKKyV1bmRlZiBBTAorJXVuZGVmIEsKKyV1bmRlZiBMVVQKKyV1bmRlZiBUMAorJXVuZGVmIFQxCisldW5kZWYgQkxPQ0sKKyV1bmRlZiBWQUxVRVMKKyV1bmRlZiBMRU4KKworOworOyBQcmVwYXJlIGRhdGEgZm9yIGpzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lKCkuCis7Cis7IEdMT0JBTChpbnQpCis7IGpzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmVfc3NlMihjb25zdCBKQ09FRiAqYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBTbCwgaW50IEFsLCBKQ09FRiAqYWJzdmFsdWVzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpiaXRzKQorOworOyBlYXggKyA4ID0gY29uc3QgSkNPRUYgKmJsb2NrCis7IGVheCArIDEyID0gY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQKKzsgZWF4ICsgMTYgPSBpbnQgU2wKKzsgZWF4ICsgMjAgPSBpbnQgQWwKKzsgZWF4ICsgMjQgPSBKQ09FRiAqdmFsdWVzCis7IGVheCArIDI4ID0gc2l6ZV90ICpiaXRzCisKKyVkZWZpbmUgWkVSTyAgICB4bW03CislZGVmaW5lIE9ORSAgICAgeG1tNQorJWRlZmluZSBYMCAgICAgIHhtbTAKKyVkZWZpbmUgWDEgICAgICB4bW0xCislZGVmaW5lIE4wICAgICAgeG1tMgorJWRlZmluZSBOMSAgICAgIHhtbTMKKyVkZWZpbmUgQUwgICAgICB4bW00CislZGVmaW5lIEsgICAgICAgZWF4CislZGVmaW5lIExFTkVORCAgZWF4CislZGVmaW5lIExVVCAgICAgZWJ4CislZGVmaW5lIFQwICAgICAgZWN4CislZGVmaW5lIFQwdyAgICAgIGN4CislZGVmaW5lIFQxICAgICAgZWR4CislZGVmaW5lIEJMT0NLICAgZXNpCislZGVmaW5lIFZBTFVFUyAgZWRpCislZGVmaW5lIEtLICAgICAgZWJwCisKKyVkZWZpbmUgWkVST0JJVFMgIElOVCBbZXNwICsgNSAqIDRdCislZGVmaW5lIEVPQiAgICAgICBJTlQgW2VzcCArIDUgKiA0ICsgNF0KKyVkZWZpbmUgTEVOICAgICAgIElOVCBbZXNwICsgNSAqIDQgKyA4XQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZV9zc2UyKQorCitFWFROKGpzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmVfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgMTYKKyAgICBwdXNoICAgICAgICBlYngKKyAgICBwdXNoICAgICAgICBlY3gKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVicAorCisgICAgcGNtcGVxdyAgICAgT05FLCBPTkUKKyAgICBwc3JsdyAgICAgICBPTkUsIDE1CisgICAgbW92ICAgICAgICAgQkxPQ0ssIElOVCBbZWF4ICsgOF0KKyAgICBtb3YgICAgICAgICBMVVQsIElOVCBbZWF4ICsgMTJdCisgICAgbW92ICAgICAgICAgVkFMVUVTLCBJTlQgW2VheCArIDI0XQorICAgIG1vdmQgICAgICAgIEFMLCBJTlQgW2VheCArIDIwXQorICAgIG1vdiAgICAgICAgIFQwLCBJTlQgW2VheCArIDI4XQorICAgIG1vdiAgICAgICAgIEssICBJTlQgW2VheCArIDE2XQorICAgIG1vdiAgICAgICAgIElOVCBbVDAgKyAyICogU0laRU9GX0lOVF0sIC0xCisgICAgbW92ICAgICAgICAgSU5UIFtUMCArIDMgKiBTSVpFT0ZfSU5UXSwgLTEKKyAgICBtb3YgICAgICAgICBaRVJPQklUUywgVDAKKyAgICBtb3YgICAgICAgICBMRU4sIEsKKyAgICBweG9yICAgICAgICBaRVJPLCBaRVJPCisgICAgYW5kICAgICAgICAgSywgLTE2CisgICAgbW92ICAgICAgICAgRU9CLCAwCisgICAgeG9yICAgICAgICAgS0ssIEtLCisgICAgc2hyICAgICAgICAgSywgNAorICAgIGp6ICAgICAgICAgIC5FTE9PUFIxNgorLkJMT09QUjE2OgorICAgIExPQUQxNgorICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBjbXBndHcgICAgIE4xLCBYMQorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHBhZGR3ICAgICAgIFgxLCBOMQorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgxLCBOMQorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIHBzcmx3ICAgICAgIFgxLCBBTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICg4KSAqIDJdLCBYMQorICAgIHBjbXBlcXcgICAgIFgwLCBPTkUKKyAgICBwY21wZXF3ICAgICBYMSwgT05FCisgICAgcGFja3Nzd2IgICAgTjAsIE4xCisgICAgcGFja3Nzd2IgICAgWDAsIFgxCisgICAgcG1vdm1za2IgICAgVDAsIE4wICAgICAgICAgICAgICAgICAgOyBsc2lnbmJpdHMudmFsMTZ1W2s+PjRdID0gX21tX21vdmVtYXNrX2VwaTgobmVnKTsKKyAgICBtb3YgICAgICAgICBUMSwgWkVST0JJVFMKKyAgICBub3QgICAgICAgICBUMAorICAgIG1vdiAgICAgICAgIHdvcmQgW1QxICsgMiAqIFNJWkVPRl9JTlQgKyBLS10sIFQwdworICAgIHBtb3Ztc2tiICAgIFQxLCBYMCAgICAgICAgICAgICAgICAgIDsgaWR4ID0gX21tX21vdmVtYXNrX2VwaTgoeDEpOworICAgIGJzciAgICAgICAgIFQxLCBUMSAgICAgICAgICAgICAgICAgIDsgIGlkeCA9IDE2IC0gKF9fYnVpbHRpbl9jbHooaWR4KT4+MSk7CisgICAganogICAgICAgICAgLkNPTlRJTlVFUjE2ICAgICAgICAgICAgOyBpZiAoaWR4KSB7CisgICAgbGVhICAgICAgICAgVDEsIFtUMStLSyo4XQorICAgIG1vdiAgICAgICAgIEVPQiwgVDEgICAgICAgICAgICAgICAgIDsgRU9CID0gayArIGlkeDsKKy5DT05USU5VRVIxNjoKKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDE2KjIKKyAgICBhZGQgICAgICAgICBMVVQsIDE2KlNJWkVPRl9JTlQKKyAgICBhZGQgICAgICAgICBLSywgMgorICAgIGRlYyAgICAgICAgIEsKKyAgICBqbnogICAgICAgICAuQkxPT1BSMTYKKy5FTE9PUFIxNjoKKyAgICBtb3YgICAgICAgICBMRU5FTkQsIExFTgorCisgICAgdGVzdCAgICAgICAgTEVORU5ELCA4CisgICAganogICAgICAgICAgLlRSWVI3CisgICAgdGVzdCAgICAgICAgTEVORU5ELCA3CisgICAganogICAgICAgICAgLlRSWVI4CisKKyAgICBhbmQgICAgICAgICBMRU5FTkQsIDcKKyAgICBMT0FEMTUKKyAgICBwY21wZ3R3ICAgICBOMCwgWDAKKyAgICBwY21wZ3R3ICAgICBOMSwgWDEKKyAgICBwYWRkdyAgICAgICBYMCwgTjAKKyAgICBwYWRkdyAgICAgICBYMSwgTjEKKyAgICBweG9yICAgICAgICBYMCwgTjAKKyAgICBweG9yICAgICAgICBYMSwgTjEKKyAgICBwc3JsdyAgICAgICBYMCwgQUwKKyAgICBwc3JsdyAgICAgICBYMSwgQUwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoMCkgKiAyXSwgWDAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoOCkgKiAyXSwgWDEKKyAgICBwY21wZXF3ICAgICBYMCwgT05FCisgICAgcGNtcGVxdyAgICAgWDEsIE9ORQorICAgIHBhY2tzc3diICAgIE4wLCBOMQorICAgIHBhY2tzc3diICAgIFgwLCBYMQorICAgIHBtb3Ztc2tiICAgIFQwLCBOMCAgICAgICAgICAgICAgICAgIDsgbHNpZ25iaXRzLnZhbDE2dVtrPj40XSA9IF9tbV9tb3ZlbWFza19lcGk4KG5lZyk7CisgICAgbW92ICAgICAgICAgVDEsIFpFUk9CSVRTCisgICAgbm90ICAgICAgICAgVDAKKyAgICBtb3YgICAgICAgICB3b3JkIFtUMSArIDIgKiBTSVpFT0ZfSU5UICsgS0tdLCBUMHcKKyAgICBwbW92bXNrYiAgICBUMSwgWDAgICAgICAgICAgICAgICAgICA7IGlkeCA9IF9tbV9tb3ZlbWFza19lcGk4KHgxKTsKKyAgICBic3IgICAgICAgICBUMSwgVDEgICAgICAgICAgICAgICAgICA7ICBpZHggPSAxNiAtIChfX2J1aWx0aW5fY2x6KGlkeCk+PjEpOworICAgIGp6ICAgICAgICAgIC5DT05USU5VRVIxNSAgICAgICAgICAgIDsgaWYgKGlkeCkgeworICAgIGxlYSAgICAgICAgIFQxLCBbVDErS0sqOF0KKyAgICBtb3YgICAgICAgICBFT0IsIFQxICAgICAgICAgICAgICAgICA7IEVPQiA9IGsgKyBpZHg7CisuQ09OVElOVUVSMTU6CisgICAgYWRkICAgICAgICAgVkFMVUVTLCAxNioyCisgICAgam1wICAgICAgICAgLlBBRERJTkdSCisuVFJZUjg6CisgICAgTE9BRDgKKworICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIHBjbXBlcXcgICAgIFgwLCBPTkUKKyAgICBwYWNrc3N3YiAgICBOMCwgWkVSTworICAgIHBhY2tzc3diICAgIFgwLCBaRVJPCisgICAgcG1vdm1za2IgICAgVDAsIE4wICAgICAgICAgICAgICAgICAgOyBsc2lnbmJpdHMudmFsMTZ1W2s+PjRdID0gX21tX21vdmVtYXNrX2VwaTgobmVnKTsKKyAgICBtb3YgICAgICAgICBUMSwgWkVST0JJVFMKKyAgICBub3QgICAgICAgICBUMAorICAgIG1vdiAgICAgICAgIHdvcmQgW1QxICsgMiAqIFNJWkVPRl9JTlQgKyBLS10sIFQwdworICAgIHBtb3Ztc2tiICAgIFQxLCBYMCAgICAgICAgICAgICAgICAgIDsgaWR4ID0gX21tX21vdmVtYXNrX2VwaTgoeDEpOworICAgIGJzciAgICAgICAgIFQxLCBUMSAgICAgICAgICAgICAgICAgIDsgIGlkeCA9IDE2IC0gKF9fYnVpbHRpbl9jbHooaWR4KT4+MSk7CisgICAganogICAgICAgICAgLkNPTlRJTlVFUjggICAgICAgICAgICAgOyBpZiAoaWR4KSB7CisgICAgbGVhICAgICAgICAgVDEsIFtUMStLSyo4XQorICAgIG1vdiAgICAgICAgIEVPQiwgVDEgICAgICAgICAgICAgICAgIDsgRU9CID0gayArIGlkeDsKKy5DT05USU5VRVI4OgorICAgIGFkZCAgICAgICAgIFZBTFVFUywgOCoyCisgICAgam1wICAgICAgICAgLlBBRERJTkdSCisuVFJZUjc6CisgICAgYW5kICAgICAgICAgTEVORU5ELCA3CisgICAgTE9BRDcKKworICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIHBjbXBlcXcgICAgIFgwLCBPTkUKKyAgICBwYWNrc3N3YiAgICBOMCwgWkVSTworICAgIHBhY2tzc3diICAgIFgwLCBaRVJPCisgICAgcG1vdm1za2IgICAgVDAsIE4wICAgICAgICAgICAgICAgICAgOyBsc2lnbmJpdHMudmFsMTZ1W2s+PjRdID0gX21tX21vdmVtYXNrX2VwaTgobmVnKTsKKyAgICBtb3YgICAgICAgICBUMSwgWkVST0JJVFMKKyAgICBub3QgICAgICAgICBUMAorICAgIG1vdiAgICAgICAgIHdvcmQgW1QxICsgMiAqIFNJWkVPRl9JTlQgKyBLS10sIFQwdworICAgIHBtb3Ztc2tiICAgIFQxLCBYMCAgICAgICAgICAgICAgICAgIDsgaWR4ID0gX21tX21vdmVtYXNrX2VwaTgoeDEpOworICAgIGJzciAgICAgICAgIFQxLCBUMSAgICAgICAgICAgICAgICAgIDsgIGlkeCA9IDE2IC0gKF9fYnVpbHRpbl9jbHooaWR4KT4+MSk7CisgICAganogICAgICAgICAgLkNPTlRJTlVFUjcgICAgICAgICAgICAgOyBpZiAoaWR4KSB7CisgICAgbGVhICAgICAgICAgVDEsIFtUMStLSyo4XQorICAgIG1vdiAgICAgICAgIEVPQiwgVDEgICAgICAgICAgICAgICAgIDsgRU9CID0gayArIGlkeDsKKy5DT05USU5VRVI3OgorICAgIGFkZCAgICAgICAgIFZBTFVFUywgOCoyCisuUEFERElOR1I6CisgICAgbW92ICAgICAgICAgSywgTEVOCisgICAgYWRkICAgICAgICAgSywgNworICAgIGFuZCAgICAgICAgIEssIC04CisgICAgc2hyICAgICAgICAgSywgMworICAgIHN1YiAgICAgICAgIEssIERDVFNJWkUyLzgKKyAgICBqeiAgICAgICAgICAuRVBBRERJTkdSCisgICAgYWxpZ24gICAgICAgMTYKKy5aRVJPTE9PUFI6CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgMF0sIFpFUk8KKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDgqMgorICAgIGluYyAgICAgICAgIEsKKyAgICBqbnogICAgICAgICAuWkVST0xPT1BSCisuRVBBRERJTkdSOgorICAgIHN1YiAgICAgICAgIFZBTFVFUywgRENUU0laRTIqMgorCisgICAgUkVEVUNFMAorCisgICAgbW92ICAgICAgICAgZWF4LCBFT0IKKworICAgIHBvcCAgICAgICAgIGVicAorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWN4CisgICAgcG9wICAgICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworJXVuZGVmIFpFUk8KKyV1bmRlZiBPTkUKKyV1bmRlZiBYMAorJXVuZGVmIFgxCisldW5kZWYgTjAKKyV1bmRlZiBOMQorJXVuZGVmIEFMCisldW5kZWYgSworJXVuZGVmIEtLCisldW5kZWYgRU9CCisldW5kZWYgU0lHTgorJXVuZGVmIExVVAorJXVuZGVmIFQwCisldW5kZWYgVDEKKyV1bmRlZiBCTE9DSworJXVuZGVmIFZBTFVFUworJXVuZGVmIExFTgorJXVuZGVmIExFTkVORAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNzYW1wbGUtYXZ4Mi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNzYW1wbGUtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjZGVmZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY3NhbXBsZS1hdngyLmFzbQpAQCAtMCwwICsxLDM5MCBAQAorOworOyBqY3NhbXBsZS5hc20gLSBkb3duc2FtcGxpbmcgKEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLAorOyB3aXRob3V0IHNtb290aGluZy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfZG93bnNhbXBsZV9hdngyKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpICsgOCAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgKGIpICsgMTIgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIHZfc2FtcChiKSAgICAgICAoYikgKyAxNiAgICAgICAgOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKyVkZWZpbmUgd2lkdGhfYmxrcyhiKSAgIChiKSArIDIwICAgICAgICA7IEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAoYikgKyAyNCAgICAgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikgIChiKSArIDI4ICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfZG93bnNhbXBsZV9hdngyKQorCitFWFROKGpzaW1kX2gydjFfZG93bnNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorOyAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCisgICAgc2hsICAgICAgICAgZWN4LCAzICAgICAgICAgICAgICAgICAgOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVicCldCisKKyAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKyAgICBwdXNoICAgICAgICBlY3gKKyAgICBzaGwgICAgICAgICBlY3gsIDEgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgIHN1YiAgICAgICAgIGVjeCwgZWR4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIG1vdiAgICAgICAgIGVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgY2xkCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICA7IGlucHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLmV4cGFuZGxvb3A6CisgICAgcHVzaCAgICAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlc2ldCisgICAgYWRkICAgICAgICAgZWRpLCBlZHgKKyAgICBtb3YgICAgICAgICBhbCwgSlNBTVBMRSBbZWRpLTFdCisKKyAgICByZXAgc3Rvc2IKKworICAgIHBvcCAgICAgICAgIGVjeAorICAgIHBvcCAgICAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVheAorICAgIGpnICAgICAgICAgIHNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKKworICAgIDsgLS0gaDJ2MV9kb3duc2FtcGxlCisKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCAweDAwMDEwMDAwICAgICAgICAgOyBiaWFzIHBhdHRlcm4KKyAgICB2bW92ZCAgICAgICB4bW03LCBlZHgKKyAgICB2cHNodWZkICAgICB4bW03LCB4bW03LCAweDAwICAgICAgICA7IHhtbTc9ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9CisgICAgdnBlcm0yaTEyOCAgeW1tNywgeW1tNywgeW1tNywgMCAgICAgOyB5bW03PXt4bW03LCB4bW03fQorICAgIHZwY21wZXF3ICAgIHltbTYsIHltbTYsIHltbTYKKyAgICB2cHNybHcgICAgICB5bW02LCB5bW02LCBCWVRFX0JJVCAgICA7IHltbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVjeAorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX3IyNDoKKyAgICA7IGVjeCBjYW4gcG9zc2libHkgYmUgOCwgMTYsIDI0CisgICAgY21wICAgICAgICAgZWN4LCAyNAorICAgIGpuZSAgICAgICAgIC5jb2x1bW5sb29wX3IxNgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHhtbTEsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcF9yMTY6CisgICAgY21wICAgICAgICAgZWN4LCAxNgorICAgIGpuZSAgICAgICAgIC5jb2x1bW5sb29wX3I4CisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdnB4b3IgICAgICAgeW1tMSwgeW1tMSwgeW1tMQorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcF9yODoKKyAgICB2bW92ZHF1ICAgICB4bW0wLCBYTU1XT1JEW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZweG9yICAgICAgIHltbTEsIHltbTEsIHltbTEKKyAgICBtb3YgICAgICAgICBlY3gsIFNJWkVPRl9ZTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmRvd25zYW1wbGUKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcDoKKyAgICB2bW92ZHF1ICAgICB5bW0wLCBZTU1XT1JEIFtlc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW0xLCBZTU1XT1JEIFtlc2krMSpTSVpFT0ZfWU1NV09SRF0KKworLmRvd25zYW1wbGU6CisgICAgdnBzcmx3ICAgICAgeW1tMiwgeW1tMCwgQllURV9CSVQKKyAgICB2cGFuZCAgICAgICB5bW0wLCB5bW0wLCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tMywgeW1tMSwgQllURV9CSVQKKyAgICB2cGFuZCAgICAgICB5bW0xLCB5bW0xLCB5bW02CisKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW0yCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tMworICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW03CisgICAgdnBzcmx3ICAgICAgeW1tMCwgeW1tMCwgMQorICAgIHZwc3JsdyAgICAgIHltbTEsIHltbTEsIDEKKworICAgIHZwYWNrdXN3YiAgIHltbTAsIHltbTAsIHltbTEKKyAgICB2cGVybXEgICAgICB5bW0wLCB5bW0wLCAweGQ4CisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKworICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgICA7IG91dGNvbAorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDEqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamFlICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfcjI0CisKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2RhdGEKKyAgICBkZWMgICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICB2emVyb3VwcGVyCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorOyBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgc3RhbmRhcmQgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLAorOyB3aXRob3V0IHNtb290aGluZy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfZG93bnNhbXBsZV9hdngyKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpICsgOCAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgKGIpICsgMTIgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIHZfc2FtcChiKSAgICAgICAoYikgKyAxNiAgICAgICAgOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKyVkZWZpbmUgd2lkdGhfYmxrcyhiKSAgIChiKSArIDIwICAgICAgICA7IEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAoYikgKyAyNCAgICAgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikgIChiKSArIDI4ICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjJfZG93bnNhbXBsZV9hdngyKQorCitFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorOyAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCisgICAgc2hsICAgICAgICAgZWN4LCAzICAgICAgICAgICAgICAgICAgOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVicCldCisKKyAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKyAgICBwdXNoICAgICAgICBlY3gKKyAgICBzaGwgICAgICAgICBlY3gsIDEgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgIHN1YiAgICAgICAgIGVjeCwgZWR4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIG1vdiAgICAgICAgIGVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgY2xkCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICA7IGlucHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLmV4cGFuZGxvb3A6CisgICAgcHVzaCAgICAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlc2ldCisgICAgYWRkICAgICAgICAgZWRpLCBlZHgKKyAgICBtb3YgICAgICAgICBhbCwgSlNBTVBMRSBbZWRpLTFdCisKKyAgICByZXAgc3Rvc2IKKworICAgIHBvcCAgICAgICAgIGVjeAorICAgIHBvcCAgICAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVheAorICAgIGpnICAgICAgICAgIHNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKKworICAgIDsgLS0gaDJ2Ml9kb3duc2FtcGxlCisKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCAweDAwMDIwMDAxICAgICAgICAgOyBiaWFzIHBhdHRlcm4KKyAgICB2bW92ZCAgICAgICB4bW03LCBlZHgKKyAgICB2cGNtcGVxdyAgICB5bW02LCB5bW02LCB5bW02CisgICAgdnBzaHVmZCAgICAgeG1tNywgeG1tNywgMHgwMCAgICAgICAgOyB5bW03PXsxLCAyLCAxLCAyLCAxLCAyLCAxLCAyfQorICAgIHZwZXJtMmkxMjggIHltbTcsIHltbTcsIHltbTcsIDAKKyAgICB2cHNybHcgICAgICB5bW02LCB5bW02LCBCWVRFX0JJVCAgICA7IHltbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVjeAorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjAKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgICAgICAgICAgICAgICAgIDsgb3V0cHRyCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX3IyNDoKKyAgICBjbXAgICAgICAgICBlY3gsIDI0CisgICAgam5lICAgICAgICAgLmNvbHVtbmxvb3BfcjE2CisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbZWR4KzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeG1tMiwgWE1NV09SRCBbZWR4KzEqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeG1tMywgWE1NV09SRCBbZXNpKzEqU0laRU9GX1lNTVdPUkRdCisgICAgbW92ICAgICAgICAgZWN4LCBTSVpFT0ZfWU1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5kb3duc2FtcGxlCisKKy5jb2x1bW5sb29wX3IxNjoKKyAgICBjbXAgICAgICAgICBlY3gsIDE2CisgICAgam5lICAgICAgICAgLmNvbHVtbmxvb3BfcjgKKyAgICB2bW92ZHF1ICAgICB5bW0wLCBZTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW0xLCBZTU1XT1JEIFtlc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2cHhvciAgICAgICB5bW0yLCB5bW0yLCB5bW0yCisgICAgdnB4b3IgICAgICAgeW1tMywgeW1tMywgeW1tMworICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcF9yODoKKyAgICB2bW92ZHF1ICAgICB4bW0wLCBYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB4bW0xLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICB2cHhvciAgICAgICB5bW0yLCB5bW0yLCB5bW0yCisgICAgdnB4b3IgICAgICAgeW1tMywgeW1tMywgeW1tMworICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW2VkeCswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbTEsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbTIsIFlNTVdPUkQgW2VkeCsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbTMsIFlNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorCisuZG93bnNhbXBsZToKKyAgICB2cGFuZCAgICAgICB5bW00LCB5bW0wLCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tMCwgeW1tMCwgQllURV9CSVQKKyAgICB2cGFuZCAgICAgICB5bW01LCB5bW0xLCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tMSwgeW1tMSwgQllURV9CSVQKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW00CisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tNQorCisgICAgdnBhbmQgICAgICAgeW1tNCwgeW1tMiwgeW1tNgorICAgIHZwc3JsdyAgICAgIHltbTIsIHltbTIsIEJZVEVfQklUCisgICAgdnBhbmQgICAgICAgeW1tNSwgeW1tMywgeW1tNgorICAgIHZwc3JsdyAgICAgIHltbTMsIHltbTMsIEJZVEVfQklUCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tNAorICAgIHZwYWRkdyAgICAgIHltbTMsIHltbTMsIHltbTUKKworICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTEKKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW0yLCB5bW0zCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tNworICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTcKKyAgICB2cHNybHcgICAgICB5bW0wLCB5bW0wLCAyCisgICAgdnBzcmx3ICAgICAgeW1tMiwgeW1tMiwgMgorCisgICAgdnBhY2t1c3diICAgeW1tMCwgeW1tMCwgeW1tMgorICAgIHZwZXJtcSAgICAgIHltbTAsIHltbTAsIDB4ZDgKKworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMAorCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgIDsgb3V0Y29sCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIwCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDEqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcF9yMjQKKworICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVjeAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2RhdGEKKyAgICBkZWMgICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisucmV0dXJuOgorICAgIHZ6ZXJvdXBwZXIKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjc2FtcGxlLW1teC5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNzYW1wbGUtbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWY0MjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pjc2FtcGxlLW1teC5hc20KQEAgLTAsMCArMSwzMjYgQEAKKzsKKzsgamNzYW1wbGUuYXNtIC0gZG93bnNhbXBsaW5nIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLAorOyB3aXRob3V0IHNtb290aGluZy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfZG93bnNhbXBsZV9tbXgoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworOworCislZGVmaW5lIGltZ193aWR0aChiKSAgICAoYikgKyA4ICAgICAgICAgOyBKRElNRU5TSU9OIGltYWdlX3dpZHRoCislZGVmaW5lIG1heF92X3NhbXAoYikgICAoYikgKyAxMiAgICAgICAgOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgdl9zYW1wKGIpICAgICAgIChiKSArIDE2ICAgICAgICA7IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB3aWR0aF9ibGtzKGIpICAgKGIpICsgMjAgICAgICAgIDsgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgIChiKSArIDI0ICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YShiKSAgKGIpICsgMjggICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2MV9kb3duc2FtcGxlX21teCkKKworRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfbW14KToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorOyAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCisgICAgc2hsICAgICAgICAgZWN4LCAzICAgICAgICAgICAgICAgICAgOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVicCldCisKKyAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKyAgICBwdXNoICAgICAgICBlY3gKKyAgICBzaGwgICAgICAgICBlY3gsIDEgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgIHN1YiAgICAgICAgIGVjeCwgZWR4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIG1vdiAgICAgICAgIGVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgY2xkCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICA7IGlucHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLmV4cGFuZGxvb3A6CisgICAgcHVzaCAgICAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlc2ldCisgICAgYWRkICAgICAgICAgZWRpLCBlZHgKKyAgICBtb3YgICAgICAgICBhbCwgSlNBTVBMRSBbZWRpLTFdCisKKyAgICByZXAgc3Rvc2IKKworICAgIHBvcCAgICAgICAgIGVjeAorICAgIHBvcCAgICAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVheAorICAgIGpnICAgICAgICAgIHNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKKworICAgIDsgLS0gaDJ2MV9kb3duc2FtcGxlCisKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCAweDAwMDEwMDAwICAgICAgICAgOyBiaWFzIHBhdHRlcm4KKyAgICBtb3ZkICAgICAgICBtbTcsIGVkeAorICAgIHBjbXBlcXcgICAgIG1tNiwgbW02CisgICAgcHVucGNrbGRxICAgbW03LCBtbTcgICAgICAgICAgICAgICAgOyBtbTc9ezAsIDEsIDAsIDF9CisgICAgcHNybHcgICAgICAgbW02LCBCWVRFX0JJVCAgICAgICAgICAgOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVjeAorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb2x1bW5sb29wOgorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisgICAgbW92cSAgICAgICAgbW0yLCBtbTAKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMQorCisgICAgcGFuZCAgICAgICAgbW0wLCBtbTYKKyAgICBwc3JsdyAgICAgICBtbTIsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgbW0xLCBtbTYKKyAgICBwc3JsdyAgICAgICBtbTMsIEJZVEVfQklUCisKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMgorICAgIHBhZGR3ICAgICAgIG1tMSwgbW0zCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTcKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNworICAgIHBzcmx3ICAgICAgIG1tMCwgMQorICAgIHBzcmx3ICAgICAgIG1tMSwgMQorCisgICAgcGFja3Vzd2IgICAgbW0wLCBtbTEKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDIqU0laRU9GX01NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQgIDsgb3V0cHRyCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgOyBvdXRjb2wKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWN4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBzaG9ydCAucm93bG9vcAorCisgICAgZW1tcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCis7IHdpdGhvdXQgc21vb3RoaW5nLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9kb3duc2FtcGxlX21teChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKyVkZWZpbmUgaW1nX3dpZHRoKGIpICAgIChiKSArIDggICAgICAgICA7IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgIChiKSArIDEyICAgICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB2X3NhbXAoYikgICAgICAgKGIpICsgMTYgICAgICAgIDsgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCislZGVmaW5lIHdpZHRoX2Jsa3MoYikgICAoYikgKyAyMCAgICAgICAgOyBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcworJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgKGIpICsgMjQgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpICAoYikgKyAyOCAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbW14KQorCitFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW3dpZHRoX2Jsa3MoZWJwKV0KKyAgICBzaGwgICAgICAgICBlY3gsIDMgICAgICAgICAgICAgICAgICA7IGltdWwgZWN4LERDVFNJWkUgKGVjeCA9IG91dHB1dF9jb2xzKQorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KKworICAgIDsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKworICAgIHB1c2ggICAgICAgIGVjeAorICAgIHNobCAgICAgICAgIGVjeCwgMSAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMgKiAyCisgICAgc3ViICAgICAgICAgZWN4LCBlZHgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW21heF92X3NhbXAoZWJwKV0KKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIHNob3J0IC5leHBhbmRfZW5kCisKKyAgICBjbGQKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gIDsgaW5wdXRfZGF0YQorICAgIGFsaWdueCAgICAgIDE2LCA3CisuZXhwYW5kbG9vcDoKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VzaV0KKyAgICBhZGQgICAgICAgICBlZGksIGVkeAorICAgIG1vdiAgICAgICAgIGFsLCBKU0FNUExFIFtlZGktMV0KKworICAgIHJlcCBzdG9zYgorCisgICAgcG9wICAgICAgICAgZWN4CisgICAgcG9wICAgICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgZWF4CisgICAgamcgICAgICAgICAgc2hvcnQgLmV4cGFuZGxvb3AKKworLmV4cGFuZF9lbmQ6CisgICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scworCisgICAgOyAtLSBoMnYyX2Rvd25zYW1wbGUKKworICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbdl9zYW1wKGVicCldICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgamxlICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlZHgsIDB4MDAwMjAwMDEgICAgICAgICA7IGJpYXMgcGF0dGVybgorICAgIG1vdmQgICAgICAgIG1tNywgZWR4CisgICAgcGNtcGVxdyAgICAgbW02LCBtbTYKKyAgICBwdW5wY2tsZHEgICBtbTcsIG1tNyAgICAgICAgICAgICAgICA7IG1tNz17MSwgMiwgMSwgMn0KKyAgICBwc3JsdyAgICAgICBtbTYsIEJZVEVfQklUICAgICAgICAgICA7IG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0gIDsgb3V0cHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWN4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIxCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgICAgICAgICAgICAgICAgOyBvdXRwdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbZWR4KzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbZWR4KzEqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgbW92cSAgICAgICAgbW01LCBtbTEKKyAgICBwYW5kICAgICAgICBtbTAsIG1tNgorICAgIHBzcmx3ICAgICAgIG1tNCwgQllURV9CSVQKKyAgICBwYW5kICAgICAgICBtbTEsIG1tNgorICAgIHBzcmx3ICAgICAgIG1tNSwgQllURV9CSVQKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNAorICAgIHBhZGR3ICAgICAgIG1tMSwgbW01CisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMgorICAgIG1vdnEgICAgICAgIG1tNSwgbW0zCisgICAgcGFuZCAgICAgICAgbW0yLCBtbTYKKyAgICBwc3JsdyAgICAgICBtbTQsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgbW0zLCBtbTYKKyAgICBwc3JsdyAgICAgICBtbTUsIEJZVEVfQklUCisgICAgcGFkZHcgICAgICAgbW0yLCBtbTQKKyAgICBwYWRkdyAgICAgICBtbTMsIG1tNQorCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTEKKyAgICBwYWRkdyAgICAgICBtbTIsIG1tMworICAgIHBhZGR3ICAgICAgIG1tMCwgbW03CisgICAgcGFkZHcgICAgICAgbW0yLCBtbTcKKyAgICBwc3JsdyAgICAgICBtbTAsIDIKKyAgICBwc3JsdyAgICAgICBtbTIsIDIKKworICAgIHBhY2t1c3diICAgIG1tMCwgbW0yCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQgIDsgaW5wdHIwCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDIqU0laRU9GX01NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgIDsgb3V0Y29sCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWN4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNzYW1wbGUtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamNzYW1wbGUtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwZmE4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qY3NhbXBsZS1zc2UyLmFzbQpAQCAtMCwwICsxLDM1MyBAQAorOworOyBqY3NhbXBsZS5hc20gLSBkb3duc2FtcGxpbmcgKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLAorOyB3aXRob3V0IHNtb290aGluZy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpICsgOCAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgKGIpICsgMTIgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIHZfc2FtcChiKSAgICAgICAoYikgKyAxNiAgICAgICAgOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKyVkZWZpbmUgd2lkdGhfYmxrcyhiKSAgIChiKSArIDIwICAgICAgICA7IEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAoYikgKyAyNCAgICAgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikgIChiKSArIDI4ICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorOyAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCisgICAgc2hsICAgICAgICAgZWN4LCAzICAgICAgICAgICAgICAgICAgOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVicCldCisKKyAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKyAgICBwdXNoICAgICAgICBlY3gKKyAgICBzaGwgICAgICAgICBlY3gsIDEgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgIHN1YiAgICAgICAgIGVjeCwgZWR4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIG1vdiAgICAgICAgIGVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgY2xkCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICA7IGlucHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLmV4cGFuZGxvb3A6CisgICAgcHVzaCAgICAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlc2ldCisgICAgYWRkICAgICAgICAgZWRpLCBlZHgKKyAgICBtb3YgICAgICAgICBhbCwgSlNBTVBMRSBbZWRpLTFdCisKKyAgICByZXAgc3Rvc2IKKworICAgIHBvcCAgICAgICAgIGVjeAorICAgIHBvcCAgICAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVheAorICAgIGpnICAgICAgICAgIHNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKKworICAgIDsgLS0gaDJ2MV9kb3duc2FtcGxlCisKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCAweDAwMDEwMDAwICAgICAgICAgOyBiaWFzIHBhdHRlcm4KKyAgICBtb3ZkICAgICAgICB4bW03LCBlZHgKKyAgICBwY21wZXF3ICAgICB4bW02LCB4bW02CisgICAgcHNodWZkICAgICAgeG1tNywgeG1tNywgMHgwMCAgICAgICAgOyB4bW03PXswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfQorICAgIHBzcmx3ICAgICAgIHhtbTYsIEJZVEVfQklUICAgICAgICAgIDsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0gIDsgb3V0cHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWN4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICA7IGlucHRyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgOyBvdXRwdHIKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3Bfcjg6CisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgcHhvciAgICAgICAgeG1tMSwgeG1tMQorICAgIG1vdiAgICAgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorCisuZG93bnNhbXBsZToKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMQorCisgICAgcGFuZCAgICAgICAgeG1tMCwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTIsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgeG1tMSwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTMsIEJZVEVfQklUCisKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW0yCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tMworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW03CisgICAgcHNybHcgICAgICAgeG1tMCwgMQorICAgIHBzcmx3ICAgICAgIHhtbTEsIDEKKworICAgIHBhY2t1c3diICAgIHhtbTAsIHhtbTEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgIDsgb3V0Y29sCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYWUgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3BfcjgKKworICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVjeAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHN0YW5kYXJkIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMihKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKyVkZWZpbmUgaW1nX3dpZHRoKGIpICAgIChiKSArIDggICAgICAgICA7IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgIChiKSArIDEyICAgICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB2X3NhbXAoYikgICAgICAgKGIpICsgMTYgICAgICAgIDsgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCislZGVmaW5lIHdpZHRoX2Jsa3MoYikgICAoYikgKyAyMCAgICAgICAgOyBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcworJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgKGIpICsgMjQgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpICAoYikgKyAyOCAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKzsgICBwdXNoICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbd2lkdGhfYmxrcyhlYnApXQorICAgIHNobCAgICAgICAgIGVjeCwgMyAgICAgICAgICAgICAgICAgIDsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYnApXQorCisgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorCisgICAgcHVzaCAgICAgICAgZWN4CisgICAgc2hsICAgICAgICAgZWN4LCAxICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICBzdWIgICAgICAgICBlY3gsIGVkeAorICAgIGpsZSAgICAgICAgIHNob3J0IC5leHBhbmRfZW5kCisKKyAgICBtb3YgICAgICAgICBlYXgsIElOVCBbbWF4X3Zfc2FtcChlYnApXQorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIGNsZAorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgOyBpbnB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5leHBhbmRsb29wOgorICAgIHB1c2ggICAgICAgIGVheAorICAgIHB1c2ggICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZXNpXQorICAgIGFkZCAgICAgICAgIGVkaSwgZWR4CisgICAgbW92ICAgICAgICAgYWwsIEpTQU1QTEUgW2VkaS0xXQorCisgICAgcmVwIHN0b3NiCisKKyAgICBwb3AgICAgICAgICBlY3gKKyAgICBwb3AgICAgICAgICBlYXgKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBqZyAgICAgICAgICBzaG9ydCAuZXhwYW5kbG9vcAorCisuZXhwYW5kX2VuZDoKKyAgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzCisKKyAgICA7IC0tIGgydjJfZG93bnNhbXBsZQorCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0gIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgMHgwMDAyMDAwMSAgICAgICAgIDsgYmlhcyBwYXR0ZXJuCisgICAgbW92ZCAgICAgICAgeG1tNywgZWR4CisgICAgcGNtcGVxdyAgICAgeG1tNiwgeG1tNgorICAgIHBzaHVmZCAgICAgIHhtbTcsIHhtbTcsIDB4MDAgICAgICAgIDsgeG1tNz17MSwgMiwgMSwgMiwgMSwgMiwgMSwgMn0KKyAgICBwc3JsdyAgICAgICB4bW02LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVjeAorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjAKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgICAgICAgICAgICAgICAgIDsgb3V0cHRyCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYWUgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX3I4OgorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIHB4b3IgICAgICAgIHhtbTIsIHhtbTIKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW0zCisgICAgbW92ICAgICAgICAgZWN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5kb3duc2FtcGxlCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xCisgICAgcGFuZCAgICAgICAgeG1tMCwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTQsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgeG1tMSwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTUsIEJZVEVfQklUCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNAorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTUKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0zCisgICAgcGFuZCAgICAgICAgeG1tMiwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTQsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgeG1tMywgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTUsIEJZVEVfQklUCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNAorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUKKworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTEKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTcKKyAgICBwc3JsdyAgICAgICB4bW0wLCAyCisgICAgcHNybHcgICAgICAgeG1tMiwgMgorCisgICAgcGFja3Vzd2IgICAgeG1tMCwgeG1tMgorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRjb2wKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYWUgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wX3I4CisKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkY29sZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkY29sZXh0LWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGU5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRjb2xleHQtYXZ4Mi5hc20KQEAgLTAsMCArMSw1MTcgQEAKKzsKKzsgamRjb2xleHQuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChBVlgyKQorOworOyBDb3B5cmlnaHQgMjAwOSwgMjAxMiBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQorOworCislZGVmaW5lIG91dF93aWR0aChiKSAgIChiKSArIDggICAgICAgICAgOyBKRElNRU5TSU9OIG91dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAoYikgKyAxMiAgICAgICAgIDsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5wdXRfcm93KGIpICAgKGIpICsgMTYgICAgICAgICA7IEpESU1FTlNJT04gaW5wdXRfcm93CislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDIwICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgbnVtX3Jvd3MoYikgICAgKGIpICsgMjQgICAgICAgICA7IGludCBudW1fcm93cworCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWU1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeW1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDIKKyVkZWZpbmUgZ290cHRyICAgICAgICAgd2soMCkgLSBTSVpFT0ZfUE9JTlRFUiAgOyB2b2lkICogZ290cHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYXZ4MikKKworRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1lNTVdPUkQpICA7IGFsaWduIHRvIDI1NiBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0X3dpZHRoKGVheCldICA7IG51bV9jb2xzCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW2lucHV0X3JvdyhlYXgpXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIGxlYSAgICAgICAgIGVzaSwgW2VzaStlY3gqU0laRU9GX0pTQU1QUk9XXQorICAgIGxlYSAgICAgICAgIGVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQorICAgIGxlYSAgICAgICAgIGVkeCwgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCisgICAgcG9wICAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKyAgICBtb3YgICAgICAgICBlYXgsIElOVCBbbnVtX3Jvd3MoZWF4KV0KKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICBlYXgKKyAgICBwdXNoICAgICAgICBlZGkKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBwdXNoICAgICAgICBlYngKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cjAKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlYnhdICAgICA7IGlucHRyMQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkeF0gICAgIDsgaW5wdHIyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgOyBvdXRwdHIKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICB2bW92ZHF1ICAgICB5bW01LCBZTU1XT1JEIFtlYnhdICAgICA7IHltbTU9Q2IoMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVYpCisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbZWR4XSAgICAgOyB5bW0xPUNyKDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWKQorCisgICAgdnBjbXBlcXcgICAgeW1tMCwgeW1tMCwgeW1tMAorICAgIHZwY21wZXF3ICAgIHltbTcsIHltbTcsIHltbTcKKyAgICB2cHNybHcgICAgICB5bW0wLCB5bW0wLCBCWVRFX0JJVCAgICA7IHltbTA9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgdnBzbGx3ICAgICAgeW1tNywgeW1tNywgNyAgICAgICAgICAgOyB5bW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKyAgICB2cGFuZCAgICAgICB5bW00LCB5bW0wLCB5bW01ICAgICAgICA7IHltbTQ9Q2IoMDI0NjhBQ0VHSUtNT1FTVSk9Q2JFCisgICAgdnBzcmx3ICAgICAgeW1tNSwgeW1tNSwgQllURV9CSVQgICAgOyB5bW01PUNiKDEzNTc5QkRGSEpMTlBSVFYpPUNiTworICAgIHZwYW5kICAgICAgIHltbTAsIHltbTAsIHltbTEgICAgICAgIDsgeW1tMD1DcigwMjQ2OEFDRUdJS01PUVNVKT1DckUKKyAgICB2cHNybHcgICAgICB5bW0xLCB5bW0xLCBCWVRFX0JJVCAgICA7IHltbTE9Q3IoMTM1NzlCREZISkxOUFJUVik9Q3JPCisKKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW00LCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tMywgeW1tNSwgeW1tNworICAgIHZwYWRkdyAgICAgIHltbTYsIHltbTAsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW03LCB5bW0xLCB5bW03CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgIDsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICA7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisgICAgdnBhZGR3ICAgICAgeW1tNCwgeW1tMiwgeW1tMiAgICAgICAgICAgICAgICAgICAgIDsgeW1tND0yKkNiRQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTMsIHltbTMgICAgICAgICAgICAgICAgICAgICA7IHltbTU9MipDYk8KKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW02LCB5bW02ICAgICAgICAgICAgICAgICAgICAgOyB5bW0wPTIqQ3JFCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tNywgeW1tNyAgICAgICAgICAgICAgICAgICAgIDsgeW1tMT0yKkNyTworCisgICAgdnBtdWxodyAgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gIDsgeW1tND0oMipDYkUgKiAtRklYKDAuMjI4MDApKQorICAgIHZwbXVsaHcgICAgIHltbTUsIHltbTUsIFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICA7IHltbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKKyAgICB2cG11bGh3ICAgICB5bW0wLCB5bW0wLCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyB5bW0wPSgyKkNyRSAqIEZJWCgwLjQwMjAwKSkKKyAgICB2cG11bGh3ICAgICB5bW0xLCB5bW0xLCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyB5bW0xPSgyKkNyTyAqIEZJWCgwLjQwMjAwKSkKKworICAgIHZwYWRkdyAgICAgIHltbTQsIHltbTQsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICB2cHNyYXcgICAgICB5bW00LCB5bW00LCAxICAgICAgICAgICAgICAgICAgICAgICAgOyB5bW00PShDYkUgKiAtRklYKDAuMjI4MDApKQorICAgIHZwc3JhdyAgICAgIHltbTUsIHltbTUsIDEgICAgICAgICAgICAgICAgICAgICAgICA7IHltbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCBbR09UT0ZGKGVheCxQV19PTkUpXQorICAgIHZwc3JhdyAgICAgIHltbTAsIHltbTAsIDEgICAgICAgICAgICAgICAgICAgICAgICA7IHltbTA9KENyRSAqIEZJWCgwLjQwMjAwKSkKKyAgICB2cHNyYXcgICAgICB5bW0xLCB5bW0xLCAxICAgICAgICAgICAgICAgICAgICAgICAgOyB5bW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCB5bW0yCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgeW1tMworICAgIHZwYWRkdyAgICAgIHltbTQsIHltbTQsIHltbTIgICAgICAgICAgICAgICAgICAgICA7IHltbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgeW1tMyAgICAgICAgICAgICAgICAgICAgIDsgeW1tNT0oQ2JPICogRklYKDEuNzcyMDApKT0oQi1ZKU8KKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW02ICAgICAgICAgICAgICAgICAgICAgOyB5bW0wPShDckUgKiBGSVgoMS40MDIwMCkpPShSLVkpRQorICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTEsIHltbTcgICAgICAgICAgICAgICAgICAgICA7IHltbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygwKV0sIHltbTQgICAgICAgICAgICAgICAgOyB3aygwKT0oQi1ZKUUKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTUgICAgICAgICAgICAgICAgOyB3aygxKT0oQi1ZKU8KKworICAgIHZwdW5wY2tod2QgIHltbTQsIHltbTIsIHltbTYKKyAgICB2cHVucGNrbHdkICB5bW0yLCB5bW0yLCB5bW02CisgICAgdnBtYWRkd2QgICAgeW1tMiwgeW1tMiwgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgIHZwdW5wY2tod2QgIHltbTUsIHltbTMsIHltbTcKKyAgICB2cHVucGNrbHdkICB5bW0zLCB5bW0zLCB5bW03CisgICAgdnBtYWRkd2QgICAgeW1tMywgeW1tMywgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICB2cG1hZGR3ZCAgICB5bW01LCB5bW01LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisgICAgdnBhZGRkICAgICAgeW1tMiwgeW1tMiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBzcmFkICAgICAgeW1tMiwgeW1tMiwgU0NBTEVCSVRTCisgICAgdnBzcmFkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTCisgICAgdnBhZGRkICAgICAgeW1tMywgeW1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBhZGRkICAgICAgeW1tNSwgeW1tNSwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBzcmFkICAgICAgeW1tMywgeW1tMywgU0NBTEVCSVRTCisgICAgdnBzcmFkICAgICAgeW1tNSwgeW1tNSwgU0NBTEVCSVRTCisKKyAgICB2cGFja3NzZHcgICB5bW0yLCB5bW0yLCB5bW00ICAgICAgICAgICAgIDsgeW1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKkZJWCgwLjI4NSkKKyAgICB2cGFja3NzZHcgICB5bW0zLCB5bW0zLCB5bW01ICAgICAgICAgICAgIDsgeW1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKkZJWCgwLjI4NSkKKyAgICB2cHN1YncgICAgICB5bW0yLCB5bW0yLCB5bW02ICAgICAgICAgICAgIDsgeW1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKi1GSVgoMC43MTQpPShHLVkpRQorICAgIHZwc3VidyAgICAgIHltbTMsIHltbTMsIHltbTcgICAgICAgICAgICAgOyB5bW0zPUNiTyotRklYKDAuMzQ0KStDck8qLUZJWCgwLjcxNCk9KEctWSlPCisKKyAgICB2bW92ZHF1ICAgICB5bW01LCBZTU1XT1JEIFtlc2ldICAgICAgICAgIDsgeW1tNT1ZKDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWKQorCisgICAgdnBjbXBlcXcgICAgeW1tNCwgeW1tNCwgeW1tNAorICAgIHZwc3JsdyAgICAgIHltbTQsIHltbTQsIEJZVEVfQklUICAgICAgICAgOyB5bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgIHZwYW5kICAgICAgIHltbTQsIHltbTQsIHltbTUgICAgICAgICAgICAgOyB5bW00PVkoMDI0NjhBQ0VHSUtNT1FTVSk9WUUKKyAgICB2cHNybHcgICAgICB5bW01LCB5bW01LCBCWVRFX0JJVCAgICAgICAgIDsgeW1tNT1ZKDEzNTc5QkRGSEpMTlBSVFYpPVlPCisKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW00ICAgICAgICAgICAgIDsgeW1tMD0oKFItWSlFK1lFKT1SRT1SKDAyNDY4QUNFR0lLTU9RU1UpCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tNSAgICAgICAgICAgICA7IHltbTE9KChSLVkpTytZTyk9Uk89UigxMzU3OUJERkhKTE5QUlRWKQorICAgIHZwYWNrdXN3YiAgIHltbTAsIHltbTAsIHltbTAgICAgICAgICAgICAgOyB5bW0wPVIoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBhY2t1c3diICAgeW1tMSwgeW1tMSwgeW1tMSAgICAgICAgICAgICA7IHltbTE9UigxMzU3OUJERioqKioqKioqSEpMTlBSVFYqKioqKioqKikKKworICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTQgICAgICAgICAgICAgOyB5bW0yPSgoRy1ZKUUrWUUpPUdFPUcoMDI0NjhBQ0VHSUtNT1FTVSkKKyAgICB2cGFkZHcgICAgICB5bW0zLCB5bW0zLCB5bW01ICAgICAgICAgICAgIDsgeW1tMz0oKEctWSlPK1lPKT1HTz1HKDEzNTc5QkRGSEpMTlBSVFYpCisgICAgdnBhY2t1c3diICAgeW1tMiwgeW1tMiwgeW1tMiAgICAgICAgICAgICA7IHltbTI9RygwMjQ2OEFDRSoqKioqKioqR0lLTU9RU1UqKioqKioqKikKKyAgICB2cGFja3Vzd2IgICB5bW0zLCB5bW0zLCB5bW0zICAgICAgICAgICAgIDsgeW1tMz1HKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorCisgICAgdnBhZGR3ICAgICAgeW1tNCwgeW1tNCwgWU1NV09SRCBbd2soMCldICA7IHltbTQ9KFlFKyhCLVkpRSk9QkU9QigwMjQ2OEFDRUdJS01PUVNVKQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIFlNTVdPUkQgW3drKDEpXSAgOyB5bW01PShZTysoQi1ZKU8pPUJPPUIoMTM1NzlCREZISkxOUFJUVikKKyAgICB2cGFja3Vzd2IgICB5bW00LCB5bW00LCB5bW00ICAgICAgICAgICAgIDsgeW1tND1CKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZwYWNrdXN3YiAgIHltbTUsIHltbTUsIHltbTUgICAgICAgICAgICAgOyB5bW01PUIoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqIDBHIDBJIDBLIDBNIDBPIDBRIDBTIDBVICoqKQorICAgIDsgeW1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiogMEggMEogMEwgME4gMFAgMFIgMFQgMFYgKiopCisgICAgOyB5bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiAxRyAxSSAxSyAxTSAxTyAxUSAxUyAxVSAqKikKKyAgICA7IHltbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWICoqKQorICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiogMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUgKiopCisgICAgOyB5bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKiAySCAySiAyTCAyTiAyUCAyUiAyVCAyViAqKikKKyAgICA7IHltbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqKQorICAgIDsgeW1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiopCisKKyAgICB2cHVucGNrbGJ3ICB5bW1BLCB5bW1BLCB5bW1DICAgICAgICA7IHltbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAwSSAxSSAwSyAxSyAwTSAxTSAwTyAxTyAwUSAxUSAwUyAxUyAwVSAxVSkKKyAgICB2cHVucGNrbGJ3ICB5bW1FLCB5bW1FLCB5bW1CICAgICAgICA7IHltbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAwSCAySSAwSiAySyAwTCAyTSAwTiAyTyAwUCAyUSAwUiAyUyAwVCAyVSAwVikKKyAgICB2cHVucGNrbGJ3ICB5bW1ELCB5bW1ELCB5bW1GICAgICAgICA7IHltbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAySCAxSiAySiAxTCAyTCAxTiAyTiAxUCAyUCAxUiAyUiAxVCAyVCAxViAyVikKKworICAgIHZwc3JsZHEgICAgIHltbUgsIHltbUEsIDIgICAgICAgICAgIDsgeW1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUgMEcgMUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBJIDFJIDBLIDFLIDBNIDFNIDBPIDFPIDBRIDFRIDBTIDFTIDBVIDFVIC0tIC0tKQorICAgIHZwdW5wY2tod2QgIHltbUcsIHltbUEsIHltbUUgICAgICAgIDsgeW1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDBQIDBRIDFRIDJRIDBSIDBTIDFTIDJTIDBUIDBVIDFVIDJVIDBWKQorICAgIHZwdW5wY2tsd2QgIHltbUEsIHltbUEsIHltbUUgICAgICAgIDsgeW1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDBJIDFJIDJJIDBKIDBLIDFLIDJLIDBMIDBNIDFNIDJNIDBOKQorCisgICAgdnBzcmxkcSAgICAgeW1tRSwgeW1tRSwgMiAgICAgICAgICAgOyB5bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAyRyAwSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMksgMEwgMk0gME4gMk8gMFAgMlEgMFIgMlMgMFQgMlUgMFYgLS0gLS0pCisKKyAgICB2cHNybGRxICAgICB5bW1CLCB5bW1ELCAyICAgICAgICAgICA7IHltbUI9KDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGIDFIIDJICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSiAySiAxTCAyTCAxTiAyTiAxUCAyUCAxUiAyUiAxVCAyVCAxViAyViAtLSAtLSkKKyAgICB2cHVucGNraHdkICB5bW1DLCB5bW1ELCB5bW1IICAgICAgICA7IHltbUM9KDE5IDI5IDBBIDFBIDFCIDJCIDBDIDFDIDFEIDJEIDBFIDFFIDFGIDJGIDBHIDFHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxUCAyUCAwUSAxUSAxUiAyUiAwUyAxUyAxVCAyVCAwVSAxVSAxViAyViAtLSAtLSkKKyAgICB2cHVucGNrbHdkICB5bW1ELCB5bW1ELCB5bW1IICAgICAgICA7IHltbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAySCAwSSAxSSAxSiAySiAwSyAxSyAxTCAyTCAwTSAxTSAxTiAyTiAwTyAxTykKKworICAgIHZwdW5wY2tod2QgIHltbUYsIHltbUUsIHltbUIgICAgICAgIDsgeW1tRj0oMkEgMEIgMUIgMkIgMkMgMEQgMUQgMkQgMkUgMEYgMUYgMkYgMkcgMEggMUggMkgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDJTIDBUIDFUIDJUIDJVIDBWIDFWIDJWIC0tIC0tIC0tIC0tKQorICAgIHZwdW5wY2tsd2QgIHltbUUsIHltbUUsIHltbUIgICAgICAgIDsgeW1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDBKIDFKIDJKIDJLIDBMIDFMIDJMIDJNIDBOIDFOIDJOIDJPIDBQIDFQIDJQKQorCisgICAgdnBzaHVmZCAgICAgeW1tSCwgeW1tQSwgMHg0RSAgICAgICAgOyB5bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgMEwgME0gMU0gMk0gME4gMEcgMUcgMkcgMEggMEkgMUkgMkkgMEopCisgICAgdnB1bnBja2xkcSAgeW1tQSwgeW1tQSwgeW1tRCAgICAgICAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMEkgMUkgMkkgMEogMUogMkogMEsgMUspCisgICAgdnB1bnBja2hkcSAgeW1tRCwgeW1tRCwgeW1tRSAgICAgICAgOyB5bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlApCisgICAgdnB1bnBja2xkcSAgeW1tRSwgeW1tRSwgeW1tSCAgICAgICAgOyB5bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMUogMkogMEsgMUsgMksgMEwgMksgMEwgMUwgMkwgME0gMU0gMk0gME4pCisKKyAgICB2cHNodWZkICAgICB5bW1ILCB5bW1HLCAweDRFICAgICAgICA7IHltbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUyAxUyAyUyAwVCAwVSAxVSAyVSAwViAwTyAxTyAyTyAwUCAwUSAxUSAyUSAwUikKKyAgICB2cHVucGNrbGRxICB5bW1HLCB5bW1HLCB5bW1DICAgICAgICA7IHltbUc9KDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDBBIDFBIDJBIDBCIDFCIDJCIDBDIDFDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUSAwUSAxUSAyUSAwUiAxUiAyUiAwUyAxUykKKyAgICB2cHVucGNraGRxICB5bW1DLCB5bW1DLCB5bW1GICAgICAgICA7IHltbUM9KDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGIDFGIDJGIDBHIDFHIDJHIDBIIDFIIDJICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxVCAyVCAwVSAxVSAyVSAwViAxViAyViAxViAyViAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICB2cHVucGNrbGRxICB5bW1GLCB5bW1GLCB5bW1IICAgICAgICA7IHltbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyUSAwUiAxUiAyUiAwUyAxUyAyUyAwVCAyUyAwVCAxVCAyVCAwVSAxVSAyVSAwVikKKworICAgIHZwdW5wY2tscWRxIHltbUgsIHltbUEsIHltbUUgICAgICAgIDsgeW1tSD0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMKQorICAgIHZwdW5wY2tscWRxIHltbUcsIHltbUQsIHltbUcgICAgICAgIDsgeW1tRz0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRKQorICAgIHZwdW5wY2tscWRxIHltbUMsIHltbUYsIHltbUMgICAgICAgIDsgeW1tQz0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDBTIDFTIDJTIDBUIDFUIDJUIDBVIDFVIDJVIDBWIDFWIDJWKQorCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tSCwgeW1tRywgMHgyMCAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgdnBlcm0yaTEyOCAgeW1tRCwgeW1tQywgeW1tSCwgMHgzMCAgOyB5bW1EPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgdnBlcm0yaTEyOCAgeW1tRiwgeW1tRywgeW1tQywgMHgzMSAgOyB5bW1GPSgxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NjQKKworICAgIHRlc3QgICAgICAgIGVkaSwgU0laRU9GX1lNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUYKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRgorLm91dDA6CisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgbmVhciAubmV4dHJvdworCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMAorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIyCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5fc3Q2NDoKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICAgICAgOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW1ECisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tRgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMxCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMxCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMQorLmNvbHVtbl9zdDMxOgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIHZtb3ZkcXUgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICA7IG91dHB0cgorICAgIHZwZXJtMmkxMjggIHltbUEsIHltbUEsIHltbUEsIDEKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA4IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICB2bW92cSAgICAgICBYTU1fTU1XT1JEIFtlZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIHZwc3JsZHEgICAgIHhtbUEsIHhtbUEsIFNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q3OgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDQgYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzCisgICAgdm1vdmQgICAgICAgWE1NX0RXT1JEIFtlZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9EV09SRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICB2cHNybGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QzOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDIgYnl0ZXMgb2YgZWF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICB2bW92ZCAgICAgICBlYXgsIHhtbUEKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MQorICAgIG1vdiAgICAgICAgIFdPUkQgW2VkaV0sIGF4CisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9XT1JECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgc2hyICAgICAgICAgZWF4LCAxNgorLmNvbHVtbl9zdDE6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgMSBieXRlIG9mIGVheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworICAgIG1vdiAgICAgICAgIEJZVEUgW2VkaV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgdnBjbXBlcWIgICAgeW1tNiwgeW1tNiwgeW1tNiAgICAgICAgOyB5bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBjbXBlcWIgICAgeW1tNywgeW1tNywgeW1tNyAgICAgICAgOyB5bW03PVhPPVgoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCislZWxzZQorICAgIHZweG9yICAgICAgIHltbTYsIHltbTYsIHltbTYgICAgICAgIDsgeW1tNj1YRT1YKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZweG9yICAgICAgIHltbTcsIHltbTcsIHltbTcgICAgICAgIDsgeW1tNz1YTz1YKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorJWVuZGlmCisgICAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAqKikKKyAgICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWICoqKQorICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiogMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUgKiopCisgICAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxViAqKikKKyAgICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVICoqKQorICAgIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiogMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgKiopCisgICAgOyB5bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSAqKiAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSAqKikKKyAgICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGICoqIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWICoqKQorCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tQyAgICAgICAgOyB5bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMEkgMUkgMEsgMUsgME0gMU0gME8gMU8gMFEgMVEgMFMgMVMgMFUgMVUpCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRyAgICAgICAgOyB5bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgM0cgMkkgM0kgMksgM0sgMk0gM00gMk8gM08gMlEgM1EgMlMgM1MgMlUgM1UpCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRCAgICAgICAgOyB5bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMUggMEogMUogMEwgMUwgME4gMU4gMFAgMVAgMFIgMVIgMFQgMVQgMFYgMVYpCisgICAgdnB1bnBja2xidyAgeW1tRiwgeW1tRiwgeW1tSCAgICAgICAgOyB5bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggM0ggMkogM0ogMkwgM0wgMk4gM04gMlAgM1AgMlIgM1IgMlQgM1QgMlYgM1YpCisKKyAgICB2cHVucGNraHdkICB5bW1DLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAzTyAwUSAxUSAyUSAzUSAwUyAxUyAyUyAzUyAwVSAxVSAyVSAzVSkKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAzRyAwSSAxSSAySSAzSSAwSyAxSyAySyAzSyAwTSAxTSAyTSAzTSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUCAxUCAyUCAzUCAwUiAxUiAyUiAzUiAwVCAxVCAyVCAzVCAwViAxViAyViAzVikKKyAgICB2cHVucGNrbHdkICB5bW1CLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSCAxSCAySCAzSCAwSiAxSiAySiAzSiAwTCAxTCAyTCAzTCAwTiAxTiAyTiAzTikKKworICAgIHZwdW5wY2toZHEgIHltbUUsIHltbUEsIHltbUIgICAgICAgIDsgeW1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBLIDFLIDJLIDNLIDBMIDFMIDJMIDNMIDBNIDFNIDJNIDNNIDBOIDFOIDJOIDNOKQorICAgIHZwdW5wY2tsZHEgIHltbUIsIHltbUEsIHltbUIgICAgICAgIDsgeW1tQj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDNHIDBIIDFIIDJIIDNIIDBJIDFJIDJJIDNJIDBKIDFKIDJKIDNKKQorICAgIHZwdW5wY2toZHEgIHltbUYsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRj0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBTIDFTIDJTIDNTIDBUIDFUIDJUIDNUIDBVIDFVIDJVIDNVIDBWIDFWIDJWIDNWKQorICAgIHZwdW5wY2tsZHEgIHltbUcsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDNPIDBQIDFQIDJQIDNQIDBRIDFRIDJRIDNRIDBSIDFSIDJSIDNSKQorCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQiwgeW1tRSwgMHgyMCAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgdnBlcm0yaTEyOCAgeW1tRCwgeW1tRywgeW1tRiwgMHgyMCAgOyB5bW1EPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgdnBlcm0yaTEyOCAgeW1tQywgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1DPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tRywgeW1tRiwgMHgzMSAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NjQKKworICAgIHRlc3QgICAgICAgIGVkaSwgU0laRU9GX1lNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUMKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMypTSVpFT0ZfWU1NV09SRF0sIHltbUgKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSszKlNJWkVPRl9ZTU1XT1JEXSwgeW1tSAorLm91dDA6CisgICAgYWRkICAgICAgICAgZWRpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0NjQ6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzIKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBvdXRwdHIKKyAgICB2bW92ZHFhICAgICB5bW1BLCB5bW1DCisgICAgdm1vdmRxYSAgICAgeW1tRCwgeW1tSAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8yCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgOyBvdXRwdHIKKyAgICB2bW92ZHFhICAgICB5bW1BLCB5bW1ECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzQKKy5jb2x1bW5fc3QxNjoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvOAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIHZtb3ZkcXUgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIHZwZXJtMmkxMjggIHltbUEsIHltbUEsIHltbUEsIDEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvOAorLmNvbHVtbl9zdDE1OgorICAgIDsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeW1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzE2CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICB2bW92cSAgICAgICBNTVdPUkQgW2VkaV0sIHhtbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1lNTVdPUkQvMTYqNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8xNgorICAgIHZwc3JsZHEgICAgIHhtbUEsIFNJWkVPRl9ZTU1XT1JELzE2KjQKKy5jb2x1bW5fc3Q3OgorICAgIDsgU3RvcmUgb25lIHBpeGVsICg0IGJ5dGVzKSBvZiB5bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisgICAgdm1vdmQgICAgICAgWE1NX0RXT1JEIFtlZGldLCB4bW1BCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICBhbGlnbnggICAgICAxNiwgNworCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICBlY3gKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlZHgKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlYXgKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2J1ZgorICAgIGRlYyAgICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICBzZmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKworLnJldHVybjoKKyAgICB2emVyb3VwcGVyCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbGV4dC1tbXguYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkY29sZXh0LW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyY2IzZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbGV4dC1tbXguYXNtCkBAIC0wLDAgKzEsNDA2IEBACis7Cis7IGpkY29sZXh0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXgoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQorOworCislZGVmaW5lIG91dF93aWR0aChiKSAgIChiKSArIDggICAgICAgICAgOyBKRElNRU5TSU9OIG91dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAoYikgKyAxMiAgICAgICAgIDsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5wdXRfcm93KGIpICAgKGIpICsgMTYgICAgICAgICA7IEpESU1FTlNJT04gaW5wdXRfcm93CislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDIwICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgbnVtX3Jvd3MoYikgICAgKGIpICsgMjQgICAgICAgICA7IGludCBudW1fcm93cworCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAyCislZGVmaW5lIGdvdHB0ciAgICAgICAgIHdrKDApIC0gU0laRU9GX1BPSU5URVIgIDsgdm9pZCAqIGdvdHB0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCkKKworRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14KToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgbW92cGljICAgICAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW291dF93aWR0aChlYXgpXSAgOyBudW1fY29scworICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBwdXNoICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtpbnB1dF9yb3coZWF4KV0KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBsZWEgICAgICAgICBlc2ksIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICBlYngsIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICBlZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHBvcCAgICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWF4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZWR4CisgICAgcHVzaCAgICAgICAgZWJ4CisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIwCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZWJ4XSAgICAgOyBpbnB0cjEKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZHhdICAgICA7IGlucHRyMgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCisgICAgbW92cGljICAgICAgZWF4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb2x1bW5sb29wOgorCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW2VieF0gICAgICAgOyBtbTU9Q2IoMDEyMzQ1NjcpCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW2VkeF0gICAgICAgOyBtbTE9Q3IoMDEyMzQ1NjcpCisKKyAgICBwY21wZXF3ICAgICBtbTQsIG1tNAorICAgIHBjbXBlcXcgICAgIG1tNywgbW03CisgICAgcHNybHcgICAgICAgbW00LCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIG1tNywgNyAgICAgICAgICAgICAgICAgIDsgbW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODB9CisgICAgbW92cSAgICAgICAgbW0wLCBtbTQgICAgICAgICAgICAgICAgOyBtbTA9bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisgICAgcGFuZCAgICAgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgOyBtbTQ9Q2IoMDI0Nik9Q2JFCisgICAgcHNybHcgICAgICAgbW01LCBCWVRFX0JJVCAgICAgICAgICAgOyBtbTU9Q2IoMTM1Nyk9Q2JPCisgICAgcGFuZCAgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9Q3IoMDI0Nik9Q3JFCisgICAgcHNybHcgICAgICAgbW0xLCBCWVRFX0JJVCAgICAgICAgICAgOyBtbTE9Q3IoMTM1Nyk9Q3JPCisKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tNworICAgIHBhZGR3ICAgICAgIG1tNSwgbW03CisgICAgcGFkZHcgICAgICAgbW0wLCBtbTcKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNworCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKyAgICA7IEIgPSBZICsgMS43NzIwMCAqIENiCisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisgICAgOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW00ICAgICAgICAgICAgICAgIDsgbW0yPUNiRQorICAgIG1vdnEgICAgICAgIG1tMywgbW01ICAgICAgICAgICAgICAgIDsgbW0zPUNiTworICAgIHBhZGR3ICAgICAgIG1tNCwgbW00ICAgICAgICAgICAgICAgIDsgbW00PTIqQ2JFCisgICAgcGFkZHcgICAgICAgbW01LCBtbTUgICAgICAgICAgICAgICAgOyBtbTU9MipDYk8KKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj1DckUKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz1Dck8KKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0yKkNyRQorICAgIHBhZGR3ICAgICAgIG1tMSwgbW0xICAgICAgICAgICAgICAgIDsgbW0xPTIqQ3JPCisKKyAgICBwbXVsaHcgICAgICBtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICA7IG1tND0oMipDYkUgKiAtRklYKDAuMjI4MDApKQorICAgIHBtdWxodyAgICAgIG1tNSwgW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gIDsgbW01PSgyKkNiTyAqIC1GSVgoMC4yMjgwMCkpCisgICAgcG11bGh3ICAgICAgbW0wLCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyBtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorICAgIHBtdWxodyAgICAgIG1tMSwgW0dPVE9GRihlYXgsUFdfRjA0MDIpXSAgIDsgbW0xPSgyKkNyTyAqIEZJWCgwLjQwMjAwKSkKKworICAgIHBhZGR3ICAgICAgIG1tNCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwYWRkdyAgICAgICBtbTUsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgcHNyYXcgICAgICAgbW00LCAxICAgICAgICAgICAgICAgICAgOyBtbTQ9KENiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgcHNyYXcgICAgICAgbW01LCAxICAgICAgICAgICAgICAgICAgOyBtbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpCisgICAgcGFkZHcgICAgICAgbW0wLCBbR09UT0ZGKGVheCxQV19PTkUpXQorICAgIHBhZGR3ICAgICAgIG1tMSwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwc3JhdyAgICAgICBtbTAsIDEgICAgICAgICAgICAgICAgICA7IG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorICAgIHBzcmF3ICAgICAgIG1tMSwgMSAgICAgICAgICAgICAgICAgIDsgbW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tMgorICAgIHBhZGR3ICAgICAgIG1tNSwgbW0zCisgICAgcGFkZHcgICAgICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisgICAgcGFkZHcgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9KENiTyAqIEZJWCgxLjc3MjAwKSk9KEItWSlPCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9KENyRSAqIEZJWCgxLjQwMjAwKSk9KFItWSlFCisgICAgcGFkZHcgICAgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW00ICAgICA7IHdrKDApPShCLVkpRQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTUgICAgIDsgd2soMSk9KEItWSlPCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMgorICAgIG1vdnEgICAgICAgIG1tNSwgbW0zCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTYKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tNgorICAgIHBtYWRkd2QgICAgIG1tMiwgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgcHVucGNrbHdkICAgbW0zLCBtbTcKKyAgICBwdW5wY2tod2QgICBtbTUsIG1tNworICAgIHBtYWRkd2QgICAgIG1tMywgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisKKyAgICBwYWRkZCAgICAgICBtbTIsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBhZGRkICAgICAgIG1tNCwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcHNyYWQgICAgICAgbW0yLCBTQ0FMRUJJVFMKKyAgICBwc3JhZCAgICAgICBtbTQsIFNDQUxFQklUUworICAgIHBhZGRkICAgICAgIG1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcGFkZGQgICAgICAgbW01LCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKyAgICBwc3JhZCAgICAgICBtbTMsIFNDQUxFQklUUworICAgIHBzcmFkICAgICAgIG1tNSwgU0NBTEVCSVRTCisKKyAgICBwYWNrc3NkdyAgICBtbTIsIG1tNCAgICAgICAgICAgICAgICA7IG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKkZJWCgwLjI4NSkKKyAgICBwYWNrc3NkdyAgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKkZJWCgwLjI4NSkKKyAgICBwc3VidyAgICAgICBtbTIsIG1tNiAgICAgICAgICAgICAgICA7IG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKi1GSVgoMC43MTQpPShHLVkpRQorICAgIHBzdWJ3ICAgICAgIG1tMywgbW03ICAgICAgICAgICAgICAgIDsgbW0zPUNiTyotRklYKDAuMzQ0KStDck8qLUZJWCgwLjcxNCk9KEctWSlPCisKKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbZXNpXSAgICAgICA7IG1tNT1ZKDAxMjM0NTY3KQorCisgICAgcGNtcGVxdyAgICAgbW00LCBtbTQKKyAgICBwc3JsdyAgICAgICBtbTQsIEJZVEVfQklUICAgICAgICAgICA7IG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICBwYW5kICAgICAgICBtbTQsIG1tNSAgICAgICAgICAgICAgICA7IG1tND1ZKDAyNDYpPVlFCisgICAgcHNybHcgICAgICAgbW01LCBCWVRFX0JJVCAgICAgICAgICAgOyBtbTU9WSgxMzU3KT1ZTworCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTQgICAgICAgICAgICAgICAgOyBtbTA9KChSLVkpRStZRSk9UkU9KFIwIFIyIFI0IFI2KQorICAgIHBhZGR3ICAgICAgIG1tMSwgbW01ICAgICAgICAgICAgICAgIDsgbW0xPSgoUi1ZKU8rWU8pPVJPPShSMSBSMyBSNSBSNykKKyAgICBwYWNrdXN3YiAgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oUjAgUjIgUjQgUjYgKiogKiogKiogKiopCisgICAgcGFja3Vzd2IgICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KFIxIFIzIFI1IFI3ICoqICoqICoqICoqKQorCisgICAgcGFkZHcgICAgICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9KChHLVkpRStZRSk9R0U9KEcwIEcyIEc0IEc2KQorICAgIHBhZGR3ICAgICAgIG1tMywgbW01ICAgICAgICAgICAgICAgIDsgbW0zPSgoRy1ZKU8rWU8pPUdPPShHMSBHMyBHNSBHNykKKyAgICBwYWNrdXN3YiAgICBtbTIsIG1tMiAgICAgICAgICAgICAgICA7IG1tMj0oRzAgRzIgRzQgRzYgKiogKiogKiogKiopCisgICAgcGFja3Vzd2IgICAgbW0zLCBtbTMgICAgICAgICAgICAgICAgOyBtbTM9KEcxIEczIEc1IEc3ICoqICoqICoqICoqKQorCisgICAgcGFkZHcgICAgICAgbW00LCAgTU1XT1JEIFt3aygwKV0gICAgOyBtbTQ9KFlFKyhCLVkpRSk9QkU9KEIwIEIyIEI0IEI2KQorICAgIHBhZGR3ICAgICAgIG1tNSwgIE1NV09SRCBbd2soMSldICAgIDsgbW01PShZTysoQi1ZKU8pPUJPPShCMSBCMyBCNSBCNykKKyAgICBwYWNrdXN3YiAgICBtbTQsIG1tNCAgICAgICAgICAgICAgICA7IG1tND0oQjAgQjIgQjQgQjYgKiogKiogKiogKiopCisgICAgcGFja3Vzd2IgICAgbW01LCBtbTUgICAgICAgICAgICAgICAgOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikKKyAgICA7IG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKQorICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCisgICAgOyBtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqKSwgbW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworICAgIHB1bnBja2xidyAgIG1tQSwgbW1DICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKyAgICBwdW5wY2tsYncgICBtbUUsIG1tQiAgICAgICAgICAgICAgICA7IG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcpCisgICAgcHVucGNrbGJ3ICAgbW1ELCBtbUYgICAgICAgICAgICAgICAgOyBtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3KQorCisgICAgbW92cSAgICAgICAgbW1HLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUgsIG1tQQorICAgIHB1bnBja2x3ZCAgIG1tQSwgbW1FICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKyAgICBwdW5wY2tod2QgICBtbUcsIG1tRSAgICAgICAgICAgICAgICA7IG1tRz0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisKKyAgICBwc3JscSAgICAgICBtbUgsIDIqQllURV9CSVQgICAgICAgICA7IG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgLS0gLS0pCisgICAgcHNybHEgICAgICAgbW1FLCAyKkJZVEVfQklUICAgICAgICAgOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQorCisgICAgbW92cSAgICAgICAgbW1DLCBtbUQKKyAgICBtb3ZxICAgICAgICBtbUIsIG1tRAorICAgIHB1bnBja2x3ZCAgIG1tRCwgbW1IICAgICAgICAgICAgICAgIDsgbW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCkKKyAgICBwdW5wY2tod2QgICBtbUMsIG1tSCAgICAgICAgICAgICAgICA7IG1tQz0oMTUgMjUgMDYgMTYgMTcgMjcgLS0gLS0pCisKKyAgICBwc3JscSAgICAgICBtbUIsIDIqQllURV9CSVQgICAgICAgICA7IG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pCisKKyAgICBtb3ZxICAgICAgICBtbUYsIG1tRQorICAgIHB1bnBja2x3ZCAgIG1tRSwgbW1CICAgICAgICAgICAgICAgIDsgbW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSkKKyAgICBwdW5wY2tod2QgICBtbUYsIG1tQiAgICAgICAgICAgICAgICA7IG1tRj0oMjYgMDcgMTcgMjcgLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2tsZHEgICBtbUEsIG1tRCAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisgICAgcHVucGNrbGRxICAgbW1FLCBtbUcgICAgICAgICAgICAgICAgOyBtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIHB1bnBja2xkcSAgIG1tQywgbW1GICAgICAgICAgICAgICAgIDsgbW1DPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUUKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKworICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgaW5wdHIwCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQgIDsgb3V0cHRyCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5fc3QxNjoKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisgICAgbW92cSAgICAgICAgbW1BLCBtbUMKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisuY29sdW1uX3N0ODoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgbW1BLCBtbUUKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKyAgICBtb3ZkICAgICAgICBlYXgsIG1tQQorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MgorICAgIG1vdiAgICAgICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBlYXgKKyAgICBwc3JscSAgICAgICBtbUEsIERXT1JEX0JJVAorICAgIG1vdmQgICAgICAgIGVheCwgbW1BCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QyOgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxCisgICAgbW92ICAgICAgICAgV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAorICAgIHNociAgICAgICAgIGVheCwgV09SRF9CSVQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1dPUkQKKy5jb2x1bW5fc3QxOgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIGpiICAgICAgICAgIHNob3J0IC5uZXh0cm93CisgICAgbW92ICAgICAgICAgQllURSBbZWRpKzAqU0laRU9GX0JZVEVdLCBhbAorCislZWxzZSAgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCislaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgorICAgIHBjbXBlcWIgICAgIG1tNiwgbW02ICAgICAgICAgICAgICAgIDsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKKyAgICBwY21wZXFiICAgICBtbTcsIG1tNyAgICAgICAgICAgICAgICA7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCislZWxzZQorICAgIHB4b3IgICAgICAgIG1tNiwgbW02ICAgICAgICAgICAgICAgIDsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKKyAgICBweG9yICAgICAgICBtbTcsIG1tNyAgICAgICAgICAgICAgICA7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCislZW5kaWYKKyAgICA7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorICAgIDsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisgICAgOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKyAgICA7IG1tRz0oMzAgMzIgMzQgMzYgKiogKiogKiogKiopLCBtbUg9KDMxIDMzIDM1IDM3ICoqICoqICoqICoqKQorCisgICAgcHVucGNrbGJ3ICAgbW1BLCBtbUMgICAgICAgICAgICAgICAgOyBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KQorICAgIHB1bnBja2xidyAgIG1tRSwgbW1HICAgICAgICAgICAgICAgIDsgbW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNikKKyAgICBwdW5wY2tsYncgICBtbUIsIG1tRCAgICAgICAgICAgICAgICA7IG1tQj0oMDEgMTEgMDMgMTMgMDUgMTUgMDcgMTcpCisgICAgcHVucGNrbGJ3ICAgbW1GLCBtbUggICAgICAgICAgICAgICAgOyBtbUY9KDIxIDMxIDIzIDMzIDI1IDM1IDI3IDM3KQorCisgICAgbW92cSAgICAgICAgbW1DLCBtbUEKKyAgICBwdW5wY2tsd2QgICBtbUEsIG1tRSAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisgICAgcHVucGNraHdkICAgbW1DLCBtbUUgICAgICAgICAgICAgICAgOyBtbUM9KDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorICAgIG1vdnEgICAgICAgIG1tRywgbW1CCisgICAgcHVucGNrbHdkICAgbW1CLCBtbUYgICAgICAgICAgICAgICAgOyBtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKQorICAgIHB1bnBja2h3ZCAgIG1tRywgbW1GICAgICAgICAgICAgICAgIDsgbW1HPSgwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKworICAgIG1vdnEgICAgICAgIG1tRCwgbW1BCisgICAgcHVucGNrbGRxICAgbW1BLCBtbUIgICAgICAgICAgICAgICAgOyBtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgIHB1bnBja2hkcSAgIG1tRCwgbW1CICAgICAgICAgICAgICAgIDsgbW1EPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICBtb3ZxICAgICAgICBtbUgsIG1tQworICAgIHB1bnBja2xkcSAgIG1tQywgbW1HICAgICAgICAgICAgICAgIDsgbW1DPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBwdW5wY2toZHEgICBtbUgsIG1tRyAgICAgICAgICAgICAgICA7IG1tSD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNgorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMypTSVpFT0ZfTU1XT1JEXSwgbW1ICisKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICA7IGlucHRyMAorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgOyBpbnB0cjIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JEICA7IG91dHB0cgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisgICAgbW92cSAgICAgICAgbW1BLCBtbUMKKyAgICBtb3ZxICAgICAgICBtbUQsIG1tSAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0ODoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUEsIG1tRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisgICAgamIgICAgICAgICAgc2hvcnQgLm5leHRyb3cKKyAgICBtb3ZkICAgICAgICBEV09SRCBbZWRpKzAqU0laRU9GX0RXT1JEXSwgbW1BCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICBhbGlnbnggICAgICAxNiwgNworCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICBlY3gKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlZHgKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlYXgKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2J1ZgorICAgIGRlYyAgICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRjb2xleHQtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRjb2xleHQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjYjAwNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbGV4dC1zc2UyLmFzbQpAQCAtMCwwICsxLDQ2MCBAQAorOworOyBqZGNvbGV4dC5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5LCAyMDEyIFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCis7CisKKyVkZWZpbmUgb3V0X3dpZHRoKGIpICAgKGIpICsgOCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0X3dpZHRoCislZGVmaW5lIGlucHV0X2J1ZihiKSAgIChiKSArIDEyICAgICAgICAgOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbnB1dF9yb3coYikgICAoYikgKyAxNiAgICAgICAgIDsgSkRJTUVOU0lPTiBpbnB1dF9yb3cKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgKGIpICsgMjAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBudW1fcm93cyhiKSAgICAoYikgKyAyNCAgICAgICAgIDsgaW50IG51bV9yb3dzCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKiBnb3RwdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKQorCitFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd2soMCldCisgICAgcHVzaHBpYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworICAgIG1vdnBpYyAgICAgIFBPSU5URVIgW2dvdHB0cl0sIGVieCAgIDsgc2F2ZSBHT1QgYWRkcmVzcworCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtvdXRfd2lkdGgoZWF4KV0gIDsgbnVtX2NvbHMKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW5wdXRfcm93KGVheCldCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbGVhICAgICAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbGVhICAgICAgICAgZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbGVhICAgICAgICAgZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwb3AgICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgamxlICAgICAgICAgbmVhciAucmV0dXJuCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVheAorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVkeAorICAgIHB1c2ggICAgICAgIGVieAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VieF0gICAgIDsgaW5wdHIxCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWR4XSAgICAgOyBpbnB0cjIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cgorICAgIG1vdnBpYyAgICAgIGVheCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW2VieF0gICAgIDsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW2VkeF0gICAgIDsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQorCisgICAgcGNtcGVxdyAgICAgeG1tNCwgeG1tNAorICAgIHBjbXBlcXcgICAgIHhtbTcsIHhtbTcKKyAgICBwc3JsdyAgICAgICB4bW00LCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIHhtbTcsIDcgICAgICAgICAgICAgICAgIDsgeG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD14bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisgICAgcGFuZCAgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PUNiKDAyNDY4QUNFKT1DYkUKKyAgICBwc3JsdyAgICAgICB4bW01LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTU9Q2IoMTM1NzlCREYpPUNiTworICAgIHBhbmQgICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCisgICAgcHNybHcgICAgICAgeG1tMSwgQllURV9CSVQgICAgICAgICAgOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KKworICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTcKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgIDsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9Q2JFCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPUNiTworICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTQgICAgICAgICAgICAgIDsgeG1tND0yKkNiRQorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT0yKkNiTworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj1DckUKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9Q3JPCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPTIqQ3JFCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPTIqQ3JPCisKKyAgICBwbXVsaHcgICAgICB4bW00LCBbR09UT0ZGKGVheCxQV19NRjAyMjgpXSAgOyB4bW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgcG11bGh3ICAgICAgeG1tNSwgW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gIDsgeG1tNT0oMipDYk8gKiAtRklYKDAuMjI4MDApKQorICAgIHBtdWxodyAgICAgIHhtbTAsIFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0gICA7IHhtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorICAgIHBtdWxodyAgICAgIHhtbTEsIFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0gICA7IHhtbTE9KDIqQ3JPICogRklYKDAuNDAyMDApKQorCisgICAgcGFkZHcgICAgICAgeG1tNCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwYWRkdyAgICAgICB4bW01LCBbR09UT0ZGKGVheCxQV19PTkUpXQorICAgIHBzcmF3ICAgICAgIHhtbTQsIDEgICAgICAgICAgICAgICAgIDsgeG1tND0oQ2JFICogLUZJWCgwLjIyODAwKSkKKyAgICBwc3JhdyAgICAgICB4bW01LCAxICAgICAgICAgICAgICAgICA7IHhtbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpCisgICAgcGFkZHcgICAgICAgeG1tMCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwYWRkdyAgICAgICB4bW0xLCBbR09UT0ZGKGVheCxQV19PTkUpXQorICAgIHBzcmF3ICAgICAgIHhtbTAsIDEgICAgICAgICAgICAgICAgIDsgeG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorICAgIHBzcmF3ICAgICAgIHhtbTEsIDEgICAgICAgICAgICAgICAgIDsgeG1tMT0oQ3JPICogRklYKDAuNDAyMDApKQorCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMgorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PShDYk8gKiBGSVgoMS43NzIwMCkpPShCLVkpTworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPShCLVkpRQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNSAgIDsgd2soMSk9KEItWSlPCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMworICAgIHB1bnBja2x3ZCAgIHhtbTIsIHhtbTYKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW02CisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICBwbWFkZHdkICAgICB4bW00LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgIHB1bnBja2x3ZCAgIHhtbTMsIHhtbTcKKyAgICBwdW5wY2tod2QgICB4bW01LCB4bW03CisgICAgcG1hZGR3ZCAgICAgeG1tMywgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICBwbWFkZHdkICAgICB4bW01LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisgICAgcGFkZGQgICAgICAgeG1tMiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcGFkZGQgICAgICAgeG1tNCwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcHNyYWQgICAgICAgeG1tMiwgU0NBTEVCSVRTCisgICAgcHNyYWQgICAgICAgeG1tNCwgU0NBTEVCSVRTCisgICAgcGFkZGQgICAgICAgeG1tMywgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcGFkZGQgICAgICAgeG1tNSwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcHNyYWQgICAgICAgeG1tMywgU0NBTEVCSVRTCisgICAgcHNyYWQgICAgICAgeG1tNSwgU0NBTEVCSVRTCisKKyAgICBwYWNrc3NkdyAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCisgICAgcGFja3NzZHcgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPUNiTyotRklYKDAuMzQ0KStDck8qRklYKDAuMjg1KQorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKi1GSVgoMC43MTQpPShHLVkpRQorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbZXNpXSAgICAgOyB4bW01PVkoMDEyMzQ1Njc4OUFCQ0RFRikKKworICAgIHBjbXBlcXcgICAgIHhtbTQsIHhtbTQKKyAgICBwc3JsdyAgICAgICB4bW00LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgcGFuZCAgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PVkoMDI0NjhBQ0UpPVlFCisgICAgcHNybHcgICAgICAgeG1tNSwgQllURV9CSVQgICAgICAgICAgOyB4bW01PVkoMTM1NzlCREYpPVlPCisKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHhtbTA9KChSLVkpRStZRSk9UkU9UigwMjQ2OEFDRSkKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9KChSLVkpTytZTyk9Uk89UigxMzU3OUJERikKKyAgICBwYWNrdXN3YiAgICB4bW0wLCB4bW0wICAgICAgICAgICAgICA7IHhtbTA9UigwMjQ2OEFDRSoqKioqKioqKQorICAgIHBhY2t1c3diICAgIHhtbTEsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMT1SKDEzNTc5QkRGKioqKioqKiopCisKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9KChHLVkpRStZRSk9R0U9RygwMjQ2OEFDRSkKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9KChHLVkpTytZTyk9R089RygxMzU3OUJERikKKyAgICBwYWNrdXN3YiAgICB4bW0yLCB4bW0yICAgICAgICAgICAgICA7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorICAgIHBhY2t1c3diICAgIHhtbTMsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCisKKyAgICBwYWRkdyAgICAgICB4bW00LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTQ9KFlFKyhCLVkpRSk9QkU9QigwMjQ2OEFDRSkKKyAgICBwYWRkdyAgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9KFlPKyhCLVkpTyk9Qk89QigxMzU3OUJERikKKyAgICBwYWNrdXN3YiAgICB4bW00LCB4bW00ICAgICAgICAgICAgICA7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorICAgIHBhY2t1c3diICAgIHhtbTUsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKyAgICA7IHhtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKSwgeG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiopCisKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1DICAgICAgICA7IHhtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFKQorICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUIgICAgICAgIDsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisgICAgcHVucGNrbGJ3ICAgeG1tRCwgeG1tRiAgICAgICAgOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUEKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1BCisgICAgcHVucGNrbHdkICAgeG1tQSwgeG1tRSAgICAgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMyAwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKKyAgICBwdW5wY2tod2QgICB4bW1HLCB4bW1FICAgICAgICA7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisgICAgcHNybGRxICAgICAgeG1tSCwgMiAgICAgICAgICAgOyB4bW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSAtLSAtLSkKKyAgICBwc3JsZHEgICAgICB4bW1FLCAyICAgICAgICAgICA7IHhtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIC0tIC0tKQorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tRAorICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUQKKyAgICBwdW5wY2tsd2QgICB4bW1ELCB4bW1IICAgICAgICA7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorICAgIHB1bnBja2h3ZCAgIHhtbUMsIHhtbUggICAgICAgIDsgeG1tQz0oMTkgMjkgMEEgMUEgMUIgMkIgMEMgMUMgMUQgMkQgMEUgMUUgMUYgMkYgLS0gLS0pCisKKyAgICBwc3JsZHEgICAgICB4bW1CLCAyICAgICAgICAgICA7IHhtbUI9KDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGIC0tIC0tKQorCisgICAgbW92ZHFhICAgICAgeG1tRiwgeG1tRQorICAgIHB1bnBja2x3ZCAgIHhtbUUsIHhtbUIgICAgICAgIDsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisgICAgcHVucGNraHdkICAgeG1tRiwgeG1tQiAgICAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAyQyAwRCAxRCAyRCAyRSAwRiAxRiAyRiAtLSAtLSAtLSAtLSkKKworICAgIHBzaHVmZCAgICAgIHhtbUgsIHhtbUEsIDB4NEUgIDsgeG1tSD0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcgMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisgICAgbW92ZHFhICAgICAgeG1tQiwgeG1tRQorICAgIHB1bnBja2xkcSAgIHhtbUEsIHhtbUQgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQpCisgICAgcHVucGNrbGRxICAgeG1tRSwgeG1tSCAgICAgICAgOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKyAgICBwdW5wY2toZHEgICB4bW1ELCB4bW1CICAgICAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5KQorCisgICAgcHNodWZkICAgICAgeG1tSCwgeG1tRywgMHg0RSAgOyB4bW1IPSgwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRiAwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQikKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1GCisgICAgcHVucGNrbGRxICAgeG1tRywgeG1tQyAgICAgICAgOyB4bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQykKKyAgICBwdW5wY2tsZHEgICB4bW1GLCB4bW1IICAgICAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorICAgIHB1bnBja2hkcSAgIHhtbUMsIHhtbUIgICAgICAgIDsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2tscWRxICB4bW1BLCB4bW1FICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIHB1bnBja2xxZHEgIHhtbUQsIHhtbUcgICAgICAgIDsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgcHVucGNrbHFkcSAgeG1tRiwgeG1tQyAgICAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgorCisgICAgdGVzdCAgICAgICAgZWRpLCBTSVpFT0ZfWE1NV09SRC0xCisgICAgam56ICAgICAgICAgc2hvcnQgLm91dDEKKyAgICA7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorICAgIGptcCAgICAgICAgIHNob3J0IC5vdXQwCisub3V0MTogIDsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisub3V0MDoKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBuZWFyIC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIwCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjIKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbl9zdDMyOgorICAgIGxlYSAgICAgICAgIGVjeCwgW2VjeCtlY3gqMl0gICAgICAgIDsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNgorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIG1vdmRxYSAgICAgIHhtbUEsIHhtbUYKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorLmNvbHVtbl9zdDE2OgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICA7IG91dHB0cgorICAgIG1vdmRxYSAgICAgIHhtbUEsIHhtbUQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA4IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIHBzcmxkcSAgICAgIHhtbUEsIFNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q3OgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDQgYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzCisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtlZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9EV09SRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBwc3JsZHEgICAgICB4bW1BLCBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QzOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDIgYnl0ZXMgb2YgZWF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICBtb3ZkICAgICAgICBlYXgsIHhtbUEKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MQorICAgIG1vdiAgICAgICAgIFdPUkQgW2VkaV0sIGF4CisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9XT1JECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgc2hyICAgICAgICAgZWF4LCAxNgorLmNvbHVtbl9zdDE6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgMSBieXRlIG9mIGVheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworICAgIG1vdiAgICAgICAgIEJZVEUgW2VkaV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgcGNtcGVxYiAgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKyAgICBwY21wZXFiICAgICB4bW03LCB4bW03ICAgICAgICAgICAgICA7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVsc2UKKyAgICBweG9yICAgICAgICB4bW02LCB4bW02ICAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgIHB4b3IgICAgICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZW5kaWYKKyAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKyAgICA7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1DICA7IHhtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFKQorICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUcgIDsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCisgICAgcHVucGNrbGJ3ICAgeG1tQiwgeG1tRCAgOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKyAgICBwdW5wY2tsYncgICB4bW1GLCB4bW1IICA7IHhtbUY9KDIxIDMxIDIzIDMzIDI1IDM1IDI3IDM3IDI5IDM5IDJCIDNCIDJEIDNEIDJGIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tQQorICAgIHB1bnBja2x3ZCAgIHhtbUEsIHhtbUUgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgcHVucGNraHdkICAgeG1tQywgeG1tRSAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwQSAxQSAyQSAzQSAwQyAxQyAyQyAzQyAwRSAxRSAyRSAzRSkKKyAgICBtb3ZkcWEgICAgICB4bW1HLCB4bW1CCisgICAgcHVucGNrbHdkICAgeG1tQiwgeG1tRiAgOyB4bW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICBwdW5wY2tod2QgICB4bW1HLCB4bW1GICA7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tQQorICAgIHB1bnBja2xkcSAgIHhtbUEsIHhtbUIgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgcHVucGNraGRxICAgeG1tRCwgeG1tQiAgOyB4bW1EPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1DCisgICAgcHVucGNrbGRxICAgeG1tQywgeG1tRyAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICBwdW5wY2toZHEgICB4bW1ILCB4bW1HICA7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisKKyAgICB0ZXN0ICAgICAgICBlZGksIFNJWkVPRl9YTU1XT1JELTEKKyAgICBqbnogICAgICAgICBzaG9ydCAub3V0MQorICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisgICAgam1wICAgICAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKKy5vdXQwOgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1DCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tSAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1ECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgcHNybGRxICAgICAgeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworICAgIG1vdmQgICAgICAgIFhNTV9EV09SRCBbZWRpXSwgeG1tQQorCislZW5kaWYgIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLm5leHRyb3c6CisgICAgcG9wICAgICAgICAgZWN4CisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWR4CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9idWYKKyAgICBkZWMgICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgc2ZlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbG9yLWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkY29sb3ItYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmODZlNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbG9yLWF2eDIuYXNtCkBAIC0wLDAgKzEsMTIwIEBACis7Cis7IGpkY29sb3IuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChBVlgyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUyAgMTYKKworRl8wXzM0NCBlcXUgIDIyNTU0ICAgICAgICAgICAgICA7IEZJWCgwLjM0NDE0KQorRl8wXzcxNCBlcXUgIDQ2ODAyICAgICAgICAgICAgICA7IEZJWCgwLjcxNDE0KQorRl8xXzQwMiBlcXUgIDkxODgxICAgICAgICAgICAgICA7IEZJWCgxLjQwMjAwKQorRl8xXzc3MiBlcXUgMTE2MTMwICAgICAgICAgICAgICA7IEZJWCgxLjc3MjAwKQorRl8wXzQwMiBlcXUgKEZfMV80MDIgLSA2NTUzNikgICA7IEZJWCgxLjQwMjAwKSAtIEZJWCgxKQorRl8wXzI4NSBlcXUgKCA2NTUzNiAtIEZfMF83MTQpICA7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOCBlcXUgKDEzMTA3MiAtIEZfMV83NzIpICA7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfYXZ4MikKKworRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X2F2eDIpOgorCitQV19GMDQwMiAgICAgICAgdGltZXMgMTYgZHcgIEZfMF80MDIKK1BXX01GMDIyOCAgICAgICB0aW1lcyAxNiBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDggIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUgICAgICAgICAgdGltZXMgMTYgZHcgIDEKK1BEX09ORUhBTEYgICAgICB0aW1lcyA4ICBkZCAgMSA8PCAoU0NBTEVCSVRTIC0gMSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCisKKyVpbmNsdWRlICJqZGNvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIgIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9hdngyCislaW5jbHVkZSAiamRjb2xleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYXZ4MiAganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9hdngyCislaW5jbHVkZSAiamRjb2xleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyICBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpkY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIgIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpkY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIgIGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpkY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWFJHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWFJHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hSR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIgIGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpkY29sZXh0LWF2eDIuYXNtIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkY29sb3ItbW14LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbG9yLW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1YTNiMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbG9yLW1teC5hc20KQEAgLTAsMCArMSwxMTkgQEAKKzsKKzsgamRjb2xvci5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8zNDQgZXF1ICAyMjU1NCAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICA0NjgwMiAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICA5MTg4MSAgICAgICAgICAgICAgOyBGSVgoMS40MDIwMCkKK0ZfMV83NzIgZXF1IDExNjEzMCAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1IChGXzFfNDAyIC0gNjU1MzYpICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICggNjU1MzYgLSBGXzBfNzE0KSAgOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjggZXF1ICgxMzEwNzIgLSBGXzFfNzcyKSAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfeWNjX3JnYl9jb252ZXJ0X21teCkKKworRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X21teCk6CisKK1BXX0YwNDAyICAgICAgICB0aW1lcyA0IGR3ICBGXzBfNDAyCitQV19NRjAyMjggICAgICAgdGltZXMgNCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDIgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORSAgICAgICAgICB0aW1lcyA0IGR3ICAxCitQRF9PTkVIQUxGICAgICAgdGltZXMgMiBkZCAgMSA8PCAoU0NBTEVCSVRTIC0gMSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCisKKyVpbmNsdWRlICJqZGNvbGV4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14ICBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfbW14CislaW5jbHVkZSAiamRjb2xleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXggIGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfbW14CislaW5jbHVkZSAiamRjb2xleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCAganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X21teAorJWluY2x1ZGUgImpkY29sZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14ICBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X21teAorJWluY2x1ZGUgImpkY29sZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14ICBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X21teAorJWluY2x1ZGUgImpkY29sZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14ICBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X21teAorJWluY2x1ZGUgImpkY29sZXh0LW1teC5hc20iCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRjb2xvci1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZGNvbG9yLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTUzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRjb2xvci1zc2UyLmFzbQpAQCAtMCwwICsxLDExOSBAQAorOworOyBqZGNvbG9yLmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8zNDQgZXF1ICAyMjU1NCAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICA0NjgwMiAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICA5MTg4MSAgICAgICAgICAgICAgOyBGSVgoMS40MDIwMCkKK0ZfMV83NzIgZXF1IDExNjEzMCAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1IChGXzFfNDAyIC0gNjU1MzYpICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICggNjU1MzYgLSBGXzBfNzE0KSAgOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjggZXF1ICgxMzEwNzIgLSBGXzFfNzcyKSAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisKK0VYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKToKKworUFdfRjA0MDIgICAgICAgIHRpbWVzIDggZHcgIEZfMF80MDIKK1BXX01GMDIyOCAgICAgICB0aW1lcyA4IGR3IC1GXzBfMjI4CitQV19NRjAzNDRfRjAyODUgdGltZXMgNCBkdyAtRl8wXzM0NCwgRl8wXzI4NQorUFdfT05FICAgICAgICAgIHRpbWVzIDggZHcgIDEKK1BEX09ORUhBTEYgICAgICB0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMgLSAxKQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKworJWluY2x1ZGUgImpkY29sZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyICBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIgIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRtZXJnZS1hdngyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1lcmdlLWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzE4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRtZXJnZS1hdngyLmFzbQpAQCAtMCwwICsxLDEzOCBAQAorOworOyBqZG1lcmdlLmFzbSAtIG1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMzQ0IGVxdSAgMjI1NTQgICAgICAgICAgICAgIDsgRklYKDAuMzQ0MTQpCitGXzBfNzE0IGVxdSAgNDY4MDIgICAgICAgICAgICAgIDsgRklYKDAuNzE0MTQpCitGXzFfNDAyIGVxdSAgOTE4ODEgICAgICAgICAgICAgIDsgRklYKDEuNDAyMDApCitGXzFfNzcyIGVxdSAxMTYxMzAgICAgICAgICAgICAgIDsgRklYKDEuNzcyMDApCitGXzBfNDAyIGVxdSAoRl8xXzQwMiAtIDY1NTM2KSAgIDsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1IGVxdSAoIDY1NTM2IC0gRl8wXzcxNCkgIDsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4IGVxdSAoMTMxMDcyIC0gRl8xXzc3MikgIDsgRklYKDIpIC0gRklYKDEuNzcyMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X21lcmdlZF91cHNhbXBsZV9hdngyKQorCitFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfYXZ4Mik6CisKK1BXX0YwNDAyICAgICAgICB0aW1lcyAxNiBkdyAgRl8wXzQwMgorUFdfTUYwMjI4ICAgICAgIHRpbWVzIDE2IGR3IC1GXzBfMjI4CitQV19NRjAzNDRfRjAyODUgdGltZXMgOCAgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORSAgICAgICAgICB0aW1lcyAxNiBkdyAgMQorUERfT05FSEFMRiAgICAgIHRpbWVzIDggIGRkICAxIDw8IChTQ0FMRUJJVFMgLSAxKQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKworJWluY2x1ZGUgImpkbXJnZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hdngyCislaW5jbHVkZSAiamRtcmdleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9hdngyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVpbmNsdWRlICJqZG1yZ2V4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9hdngyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWluY2x1ZGUgImpkbXJnZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9hdngyCislaW5jbHVkZSAiamRtcmdleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9hdngyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVpbmNsdWRlICJqZG1yZ2V4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWluY2x1ZGUgImpkbXJnZXh0LWF2eDIuYXNtIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkbWVyZ2UtbW14LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1lcmdlLW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3YmYzOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1lcmdlLW1teC5hc20KQEAgLTAsMCArMSwxMjUgQEAKKzsKKzsgamRtZXJnZS5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMzQ0IGVxdSAgMjI1NTQgICAgICAgICAgICAgIDsgRklYKDAuMzQ0MTQpCitGXzBfNzE0IGVxdSAgNDY4MDIgICAgICAgICAgICAgIDsgRklYKDAuNzE0MTQpCitGXzFfNDAyIGVxdSAgOTE4ODEgICAgICAgICAgICAgIDsgRklYKDEuNDAyMDApCitGXzFfNzcyIGVxdSAxMTYxMzAgICAgICAgICAgICAgIDsgRklYKDEuNzcyMDApCitGXzBfNDAyIGVxdSAoRl8xXzQwMiAtIDY1NTM2KSAgIDsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1IGVxdSAoIDY1NTM2IC0gRl8wXzcxNCkgIDsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4IGVxdSAoMTMxMDcyIC0gRl8xXzc3MikgIDsgRklYKDIpIC0gRklYKDEuNzcyMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X21lcmdlZF91cHNhbXBsZV9tbXgpCisKK0VYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9tbXgpOgorCitQV19GMDQwMiAgICAgICAgdGltZXMgNCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4ICAgICAgIHRpbWVzIDQgZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NSB0aW1lcyAyIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUgICAgICAgICAgdGltZXMgNCBkdyAgMQorUERfT05FSEFMRiAgICAgIHRpbWVzIDIgZGQgIDEgPDwgKFNDQUxFQklUUyAtIDEpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorCislaW5jbHVkZSAiamRtcmdleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14ICBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX21teAorJWluY2x1ZGUgImpkbXJnZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXggIGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfbW14CislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyVpbmNsdWRlICJqZG1yZ2V4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXggIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9tbXgKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14ICBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CislaW5jbHVkZSAiamRtcmdleHQtbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCAganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14ICBqc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX21teAorJWluY2x1ZGUgImpkbXJnZXh0LW1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXggIGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9tbXgKKyVpbmNsdWRlICJqZG1yZ2V4dC1tbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWFJHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWFJHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hSR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14ICBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX21teAorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9tbXggIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CislaW5jbHVkZSAiamRtcmdleHQtbW14LmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1lcmdlLXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkbWVyZ2Utc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1lcmdlLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTM3IEBACis7Cis7IGpkbWVyZ2UuYXNtIC0gbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8zNDQgZXF1ICAyMjU1NCAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICA0NjgwMiAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICA5MTg4MSAgICAgICAgICAgICAgOyBGSVgoMS40MDIwMCkKK0ZfMV83NzIgZXF1IDExNjEzMCAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1IChGXzFfNDAyIC0gNjU1MzYpICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICggNjU1MzYgLSBGXzBfNzE0KSAgOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjggZXF1ICgxMzEwNzIgLSBGXzFfNzcyKSAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKToKKworUFdfRjA0MDIgICAgICAgIHRpbWVzIDggZHcgIEZfMF80MDIKK1BXX01GMDIyOCAgICAgICB0aW1lcyA4IGR3IC1GXzBfMjI4CitQV19NRjAzNDRfRjAyODUgdGltZXMgNCBkdyAtRl8wXzM0NCwgRl8wXzI4NQorUFdfT05FICAgICAgICAgIHRpbWVzIDggZHcgIDEKK1BEX09ORUhBTEYgICAgICB0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMgLSAxKQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKworJWluY2x1ZGUgImpkbXJnZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ2V4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ2V4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnZXh0LXNzZTIuYXNtIgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkbXJnZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkbXJnZXh0LWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTQ4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRtcmdleHQtYXZ4Mi5hc20KQEAgLTAsMCArMSw1NzcgQEAKKzsKKzsgamRtcmdleHQuYXNtIC0gbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbiAoQVZYMikKKzsKKzsgQ29weXJpZ2h0IDIwMDksIDIwMTIgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgIChiKSArIDggICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgICAgICAoYikgKyAxMiAgIDsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5fcm93X2dyb3VwX2N0cihiKSAgKGIpICsgMTYgICA7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgICAgICAoYikgKyAyMCAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWU1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeW1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgMworJWRlZmluZSBnb3RwdHIgICAgICAgIHdrKDApIC0gU0laRU9GX1BPSU5URVIgIDsgdm9pZCAqIGdvdHB0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MikKKworRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWU1NV09SRCkgIDsgYWxpZ24gdG8gMjU2IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd2soMCldCisgICAgcHVzaHBpYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworICAgIG1vdnBpYyAgICAgIFBPSU5URVIgW2dvdHB0cl0sIGVieCAgIDsgc2F2ZSBHT1QgYWRkcmVzcworCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWF4KV0gIDsgY29sCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIGVjeAorCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW2luX3Jvd19ncm91cF9jdHIoZWF4KV0KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIwCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHRyCisKKyAgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb2x1bW5sb29wOgorICAgIG1vdnBpYyAgICAgIGVheCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisgICAgdm1vdmRxdSAgICAgeW1tNiwgWU1NV09SRCBbZWJ4XSAgICAgOyB5bW02PUNiKDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWKQorICAgIHZtb3ZkcXUgICAgIHltbTcsIFlNTVdPUkQgW2VkeF0gICAgIDsgeW1tNz1DcigwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVikKKworICAgIHZweG9yICAgICAgIHltbTEsIHltbTEsIHltbTEgICAgICAgIDsgeW1tMT0oYWxsIDAncykKKyAgICB2cGNtcGVxdyAgICB5bW0zLCB5bW0zLCB5bW0zCisgICAgdnBzbGx3ICAgICAgeW1tMywgeW1tMywgNyAgICAgICAgICAgOyB5bW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKyAgICB2cGVybXEgICAgICB5bW02LCB5bW02LCAweGQ4ICAgICAgICA7IHltbTY9Q2IoMDEyMzQ1NjdHSElKS0xNTjg5QUJDREVGT1BRUlNUVVYpCisgICAgdnBlcm1xICAgICAgeW1tNywgeW1tNywgMHhkOCAgICAgICAgOyB5bW03PUNyKDAxMjM0NTY3R0hJSktMTU44OUFCQ0RFRk9QUVJTVFVWKQorICAgIHZwdW5wY2tsYncgIHltbTQsIHltbTYsIHltbTEgICAgICAgIDsgeW1tND1DYigwMTIzNDU2Nzg5QUJDREVGKT1DYkwKKyAgICB2cHVucGNraGJ3ICB5bW02LCB5bW02LCB5bW0xICAgICAgICA7IHltbTY9Q2IoR0hJSktMTU5PUFFSU1RVVik9Q2JICisgICAgdnB1bnBja2xidyAgeW1tMCwgeW1tNywgeW1tMSAgICAgICAgOyB5bW0wPUNyKDAxMjM0NTY3ODlBQkNERUYpPUNyTAorICAgIHZwdW5wY2toYncgIHltbTcsIHltbTcsIHltbTEgICAgICAgIDsgeW1tNz1DcihHSElKS0xNTk9QUVJTVFVWKT1DckgKKworICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTYsIHltbTMKKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW00LCB5bW0zCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tNywgeW1tMworICAgIHZwYWRkdyAgICAgIHltbTMsIHltbTAsIHltbTMKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgIDsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW01LCB5bW01ICAgICAgICAgICAgIDsgeW1tNj0yKkNiSAorICAgIHZwYWRkdyAgICAgIHltbTQsIHltbTIsIHltbTIgICAgICAgICAgICAgOyB5bW00PTIqQ2JMCisgICAgdnBhZGR3ICAgICAgeW1tNywgeW1tMSwgeW1tMSAgICAgICAgICAgICA7IHltbTc9MipDckgKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0zLCB5bW0zICAgICAgICAgICAgIDsgeW1tMD0yKkNyTAorCisgICAgdnBtdWxodyAgICAgeW1tNiwgeW1tNiwgW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gIDsgeW1tNj0oMipDYkggKiAtRklYKDAuMjI4MDApKQorICAgIHZwbXVsaHcgICAgIHltbTQsIHltbTQsIFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICA7IHltbTQ9KDIqQ2JMICogLUZJWCgwLjIyODAwKSkKKyAgICB2cG11bGh3ICAgICB5bW03LCB5bW03LCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyB5bW03PSgyKkNySCAqIEZJWCgwLjQwMjAwKSkKKyAgICB2cG11bGh3ICAgICB5bW0wLCB5bW0wLCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyB5bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKworICAgIHZwYWRkdyAgICAgIHltbTYsIHltbTYsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgdnBhZGR3ICAgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICB2cHNyYXcgICAgICB5bW02LCB5bW02LCAxICAgICAgICAgICAgICAgICAgICAgOyB5bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorICAgIHZwc3JhdyAgICAgIHltbTQsIHltbTQsIDEgICAgICAgICAgICAgICAgICAgICA7IHltbTQ9KENiTCAqIC1GSVgoMC4yMjgwMCkpCisgICAgdnBhZGR3ICAgICAgeW1tNywgeW1tNywgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCBbR09UT0ZGKGVheCxQV19PTkUpXQorICAgIHZwc3JhdyAgICAgIHltbTcsIHltbTcsIDEgICAgICAgICAgICAgICAgICAgICA7IHltbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKyAgICB2cHNyYXcgICAgICB5bW0wLCB5bW0wLCAxICAgICAgICAgICAgICAgICAgICAgOyB5bW0wPShDckwgKiBGSVgoMC40MDIwMCkpCisKKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW02LCB5bW01CisgICAgdnBhZGR3ICAgICAgeW1tNCwgeW1tNCwgeW1tMgorICAgIHZwYWRkdyAgICAgIHltbTYsIHltbTYsIHltbTUgICAgICAgICAgICAgICAgICA7IHltbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICisgICAgdnBhZGR3ICAgICAgeW1tNCwgeW1tNCwgeW1tMiAgICAgICAgICAgICAgICAgIDsgeW1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKyAgICB2cGFkZHcgICAgICB5bW03LCB5bW03LCB5bW0xICAgICAgICAgICAgICAgICAgOyB5bW03PShDckggKiBGSVgoMS40MDIwMCkpPShSLVkpSAorICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTMgICAgICAgICAgICAgICAgICA7IHltbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygwKV0sIHltbTYgICAgICAgICAgICAgOyB3aygwKT0oQi1ZKUgKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTcgICAgICAgICAgICAgOyB3aygxKT0oUi1ZKUgKKworICAgIHZwdW5wY2tod2QgIHltbTYsIHltbTUsIHltbTEKKyAgICB2cHVucGNrbHdkICB5bW01LCB5bW01LCB5bW0xCisgICAgdnBtYWRkd2QgICAgeW1tNSwgeW1tNSwgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICB2cG1hZGR3ZCAgICB5bW02LCB5bW02LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgIHZwdW5wY2tod2QgIHltbTcsIHltbTIsIHltbTMKKyAgICB2cHVucGNrbHdkICB5bW0yLCB5bW0yLCB5bW0zCisgICAgdnBtYWRkd2QgICAgeW1tMiwgeW1tMiwgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICB2cG1hZGR3ZCAgICB5bW03LCB5bW03LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisgICAgdnBhZGRkICAgICAgeW1tNSwgeW1tNSwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBhZGRkICAgICAgeW1tNiwgeW1tNiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBzcmFkICAgICAgeW1tNSwgeW1tNSwgU0NBTEVCSVRTCisgICAgdnBzcmFkICAgICAgeW1tNiwgeW1tNiwgU0NBTEVCSVRTCisgICAgdnBhZGRkICAgICAgeW1tMiwgeW1tMiwgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBhZGRkICAgICAgeW1tNywgeW1tNywgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgdnBzcmFkICAgICAgeW1tMiwgeW1tMiwgU0NBTEVCSVRTCisgICAgdnBzcmFkICAgICAgeW1tNywgeW1tNywgU0NBTEVCSVRTCisKKyAgICB2cGFja3NzZHcgICB5bW01LCB5bW01LCB5bW02ICAgICAgICA7IHltbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisgICAgdnBhY2tzc2R3ICAgeW1tMiwgeW1tMiwgeW1tNyAgICAgICAgOyB5bW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQorICAgIHZwc3VidyAgICAgIHltbTUsIHltbTUsIHltbTEgICAgICAgIDsgeW1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKi1GSVgoMC43MTQpPShHLVkpSAorICAgIHZwc3VidyAgICAgIHltbTIsIHltbTIsIHltbTMgICAgICAgIDsgeW1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMildLCB5bW01ICAgOyB3aygyKT0oRy1ZKUgKKworICAgIG1vdiAgICAgICAgIGFsLCAyICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgIGptcCAgICAgICAgIHNob3J0IC5ZbG9vcF8xc3QKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuWWxvb3BfMm5kOgorICAgIHZtb3ZkcWEgICAgIHltbTAsIFlNTVdPUkQgW3drKDEpXSAgIDsgeW1tMD0oUi1ZKUgKKyAgICB2bW92ZHFhICAgICB5bW0yLCBZTU1XT1JEIFt3aygyKV0gICA7IHltbTI9KEctWSlICisgICAgdm1vdmRxYSAgICAgeW1tNCwgWU1NV09SRCBbd2soMCldICAgOyB5bW00PShCLVkpSAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5ZbG9vcF8xc3Q6CisgICAgdm1vdmRxdSAgICAgeW1tNywgWU1NV09SRCBbZXNpXSAgICAgOyB5bW03PVkoMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVYpCisKKyAgICB2cGNtcGVxdyAgICB5bW02LCB5bW02LCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tNiwgeW1tNiwgQllURV9CSVQgICAgOyB5bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgIHZwYW5kICAgICAgIHltbTYsIHltbTYsIHltbTcgICAgICAgIDsgeW1tNj1ZKDAyNDY4QUNFR0lLTU9RU1UpPVlFCisgICAgdnBzcmx3ICAgICAgeW1tNywgeW1tNywgQllURV9CSVQgICAgOyB5bW03PVkoMTM1NzlCREZISkxOUFJUVik9WU8KKworICAgIHZtb3ZkcWEgICAgIHltbTEsIHltbTAgICAgICAgICAgICAgIDsgeW1tMT15bW0wPShSLVkpKEwvSCkKKyAgICB2bW92ZHFhICAgICB5bW0zLCB5bW0yICAgICAgICAgICAgICA7IHltbTM9eW1tMj0oRy1ZKShML0gpCisgICAgdm1vdmRxYSAgICAgeW1tNSwgeW1tNCAgICAgICAgICAgICAgOyB5bW01PXltbTQ9KEItWSkoTC9IKQorCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tNiAgICAgICAgOyB5bW0wPSgoUi1ZKStZRSk9UkU9UigwMjQ2OEFDRUdJS01PUVNVKQorICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTEsIHltbTcgICAgICAgIDsgeW1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREZISkxOUFJUVikKKyAgICB2cGFja3Vzd2IgICB5bW0wLCB5bW0wLCB5bW0wICAgICAgICA7IHltbTA9UigwMjQ2OEFDRSoqKioqKioqR0lLTU9RU1UqKioqKioqKikKKyAgICB2cGFja3Vzd2IgICB5bW0xLCB5bW0xLCB5bW0xICAgICAgICA7IHltbTE9UigxMzU3OUJERioqKioqKioqSEpMTlBSVFYqKioqKioqKikKKworICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTYgICAgICAgIDsgeW1tMj0oKEctWSkrWUUpPUdFPUcoMDI0NjhBQ0VHSUtNT1FTVSkKKyAgICB2cGFkZHcgICAgICB5bW0zLCB5bW0zLCB5bW03ICAgICAgICA7IHltbTM9KChHLVkpK1lPKT1HTz1HKDEzNTc5QkRGSEpMTlBSVFYpCisgICAgdnBhY2t1c3diICAgeW1tMiwgeW1tMiwgeW1tMiAgICAgICAgOyB5bW0yPUcoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBhY2t1c3diICAgeW1tMywgeW1tMywgeW1tMyAgICAgICAgOyB5bW0zPUcoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCisKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCB5bW02ICAgICAgICA7IHltbTQ9KChCLVkpK1lFKT1CRT1CKDAyNDY4QUNFR0lLTU9RU1UpCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgeW1tNyAgICAgICAgOyB5bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERkhKTE5QUlRWKQorICAgIHZwYWNrdXN3YiAgIHltbTQsIHltbTQsIHltbTQgICAgICAgIDsgeW1tND1CKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZwYWNrdXN3YiAgIHltbTUsIHltbTUsIHltbTUgICAgICAgIDsgeW1tNT1CKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAqKikKKyAgICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWICoqKQorICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiogMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUgKiopCisgICAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxViAqKikKKyAgICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVICoqKQorICAgIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiogMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgKiopCisgICAgOyB5bW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKyAgICA7IHltbUg9KCoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqKQorCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tQyAgICAgICAgOyB5bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMEkgMUkgMEsgMUsgME0gMU0gME8gMU8gMFEgMVEgMFMgMVMgMFUgMVUpCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tQiAgICAgICAgOyB5bW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgMEggMkkgMEogMksgMEwgMk0gME4gMk8gMFAgMlEgMFIgMlMgMFQgMlUgMFYpCisgICAgdnB1bnBja2xidyAgeW1tRCwgeW1tRCwgeW1tRiAgICAgICAgOyB5bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUggMkggMUogMkogMUwgMkwgMU4gMk4gMVAgMlAgMVIgMlIgMVQgMlQgMVYgMlYpCisKKyAgICB2cHNybGRxICAgICB5bW1ILCB5bW1BLCAyICAgICAgICAgICA7IHltbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIDBHIDFHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSSAxSSAwSyAxSyAwTSAxTSAwTyAxTyAwUSAxUSAwUyAxUyAwVSAxVSAtLSAtLSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAwUCAwUSAxUSAyUSAwUiAwUyAxUyAyUyAwVCAwVSAxVSAyVSAwVikKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAwSCAwSSAxSSAySSAwSiAwSyAxSyAySyAwTCAwTSAxTSAyTSAwTikKKworICAgIHZwc3JsZHEgICAgIHltbUUsIHltbUUsIDIgICAgICAgICAgIDsgeW1tRT0oMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYgMkcgMEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDBKIDJLIDBMIDJNIDBOIDJPIDBQIDJRIDBSIDJTIDBUIDJVIDBWIC0tIC0tKQorCisgICAgdnBzcmxkcSAgICAgeW1tQiwgeW1tRCwgMiAgICAgICAgICAgOyB5bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAxSCAySAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUogMkogMUwgMkwgMU4gMk4gMVAgMlAgMVIgMlIgMVQgMlQgMVYgMlYgLS0gLS0pCisgICAgdnB1bnBja2h3ZCAgeW1tQywgeW1tRCwgeW1tSCAgICAgICAgOyB5bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAwRyAxRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMVAgMlAgMFEgMVEgMVIgMlIgMFMgMVMgMVQgMlQgMFUgMVUgMVYgMlYgLS0gLS0pCisgICAgdnB1bnBja2x3ZCAgeW1tRCwgeW1tRCwgeW1tSCAgICAgICAgOyB5bW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCAxNSAyNSAwNiAxNiAxNyAyNyAwOCAxOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUggMkggMEkgMUkgMUogMkogMEsgMUsgMUwgMkwgME0gMU0gMU4gMk4gME8gMU8pCisKKyAgICB2cHVucGNraHdkICB5bW1GLCB5bW1FLCB5bW1CICAgICAgICA7IHltbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIDJHIDBIIDFIIDJICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyUSAwUiAxUiAyUiAyUyAwVCAxVCAyVCAyVSAwViAxViAyViAtLSAtLSAtLSAtLSkKKyAgICB2cHVucGNrbHdkICB5bW1FLCB5bW1FLCB5bW1CICAgICAgICA7IHltbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAwSiAxSiAySiAySyAwTCAxTCAyTCAyTSAwTiAxTiAyTiAyTyAwUCAxUCAyUCkKKworICAgIHZwc2h1ZmQgICAgIHltbUgsIHltbUEsIDB4NEUgICAgICAgIDsgeW1tSD0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcgMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBLIDFLIDJLIDBMIDBNIDFNIDJNIDBOIDBHIDFHIDJHIDBIIDBJIDFJIDJJIDBKKQorICAgIHZwdW5wY2tsZHEgIHltbUEsIHltbUEsIHltbUQgICAgICAgIDsgeW1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJIDBJIDFJIDJJIDBKIDFKIDJKIDBLIDFLKQorICAgIHZwdW5wY2toZHEgIHltbUQsIHltbUQsIHltbUUgICAgICAgIDsgeW1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQKQorICAgIHZwdW5wY2tsZHEgIHltbUUsIHltbUUsIHltbUggICAgICAgIDsgeW1tRT0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgMjQgMDUgMTUgMjUgMDYgMTYgMjYgMDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMIDJLIDBMIDFMIDJMIDBNIDFNIDJNIDBOKQorCisgICAgdnBzaHVmZCAgICAgeW1tSCwgeW1tRywgMHg0RSAgICAgICAgOyB5bW1IPSgwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRiAwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgMFQgMFUgMVUgMlUgMFYgME8gMU8gMk8gMFAgMFEgMVEgMlEgMFIpCisgICAgdnB1bnBja2xkcSAgeW1tRywgeW1tRywgeW1tQyAgICAgICAgOyB5bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEgMFEgMVEgMlEgMFIgMVIgMlIgMFMgMVMpCisgICAgdnB1bnBja2hkcSAgeW1tQywgeW1tQywgeW1tRiAgICAgICAgOyB5bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAwRyAxRyAyRyAwSCAxSCAySAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYgMVYgMlYgLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgdnB1bnBja2xkcSAgeW1tRiwgeW1tRiwgeW1tSCAgICAgICAgOyB5bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYpCisKKyAgICB2cHVucGNrbHFkcSB5bW1ILCB5bW1BLCB5bW1FICAgICAgICA7IHltbUg9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSSAySSAwSiAxSiAySiAwSyAxSyAySyAwTCkKKyAgICB2cHVucGNrbHFkcSB5bW1HLCB5bW1ELCB5bW1HICAgICAgICA7IHltbUc9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUSkKKyAgICB2cHVucGNrbHFkcSB5bW1DLCB5bW1GLCB5bW1DICAgICAgICA7IHltbUM9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyUSAwUiAxUiAyUiAwUyAxUyAyUyAwVCAxVCAyVCAwVSAxVSAyVSAwViAxViAyVikKKworICAgIHZwZXJtMmkxMjggIHltbUEsIHltbUgsIHltbUcsIDB4MjAgIDsgeW1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgIHZwZXJtMmkxMjggIHltbUQsIHltbUMsIHltbUgsIDB4MzAgIDsgeW1tRD0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMKQorICAgIHZwZXJtMmkxMjggIHltbUYsIHltbUcsIHltbUMsIDB4MzEgIDsgeW1tRj0oMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDBTIDFTIDJTIDBUIDFUIDJUIDBVIDFVIDJVIDBWIDFWIDJWKQorCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDY0CisKKyAgICB0ZXN0ICAgICAgICBlZGksIFNJWkVPRl9ZTU1XT1JELTEKKyAgICBqbnogICAgICAgICBzaG9ydCAub3V0MQorICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm1vdm50ZHEgICAgWU1NV09SRCBbZWRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgdm1vdm50ZHEgICAgWU1NV09SRCBbZWRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW1ECisgICAgdm1vdm50ZHEgICAgWU1NV09SRCBbZWRpKzIqU0laRU9GX1lNTVdPUkRdLCB5bW1GCisgICAgam1wICAgICAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUYKKy5vdXQwOgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLmVuZGNvbHVtbgorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMAorICAgIGRlYyAgICAgICAgIGFsICAgICAgICAgICAgICAgICAgICAgICAgOyBZY3RyCisgICAgam56ICAgICAgICAgbmVhciAuWWxvb3BfMm5kCisKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0NjQ6CisgICAgbGVhICAgICAgICAgZWN4LCBbZWN4K2VjeCoyXSAgICAgICAgICAgIDsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHZtb3ZkcWEgICAgIHltbUEsIHltbUYKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMQorLmNvbHVtbl9zdDMyOgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgICA7IG91dHB0cgorICAgIHZtb3ZkcWEgICAgIHltbUEsIHltbUQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MzEKKy5jb2x1bW5fc3QzMToKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICB2cGVybTJpMTI4ICB5bW1BLCB5bW1BLCB5bW1BLCAxCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgdm1vdnEgICAgICAgWE1NX01NV09SRCBbZWRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICB2cHNybGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MworICAgIHZtb3ZkICAgICAgIFhNTV9EV09SRCBbZWRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgdnBzcmxkcSAgICAgeG1tQSwgeG1tQSwgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciAyIGJ5dGVzIG9mIGVheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdm1vdmQgICAgICAgZWF4LCB4bW1BCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDEKKyAgICBtb3YgICAgICAgICBXT1JEIFtlZGldLCBheAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHNociAgICAgICAgIGVheCwgMTYKKy5jb2x1bW5fc3QxOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDEgYnl0ZSBvZiBlYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgIG1vdiAgICAgICAgIEJZVEUgW2VkaV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgdnBjbXBlcWIgICAgeW1tNiwgeW1tNiwgeW1tNiAgICAgICAgOyB5bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBjbXBlcWIgICAgeW1tNywgeW1tNywgeW1tNyAgICAgICAgOyB5bW03PVhPPVgoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCislZWxzZQorICAgIHZweG9yICAgICAgIHltbTYsIHltbTYsIHltbTYgICAgICAgIDsgeW1tNj1YRT1YKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZweG9yICAgICAgIHltbTcsIHltbTcsIHltbTcgICAgICAgIDsgeW1tNz1YTz1YKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorJWVuZGlmCisgICAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAqKikKKyAgICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWICoqKQorICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiogMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUgKiopCisgICAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxViAqKikKKyAgICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVICoqKQorICAgIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiogMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgKiopCisgICAgOyB5bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSAqKiAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSAqKikKKyAgICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGICoqIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWICoqKQorCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tQyAgICAgICAgOyB5bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMEkgMUkgMEsgMUsgME0gMU0gME8gMU8gMFEgMVEgMFMgMVMgMFUgMVUpCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRyAgICAgICAgOyB5bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgM0cgMkkgM0kgMksgM0sgMk0gM00gMk8gM08gMlEgM1EgMlMgM1MgMlUgM1UpCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRCAgICAgICAgOyB5bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMUggMEogMUogMEwgMUwgME4gMU4gMFAgMVAgMFIgMVIgMFQgMVQgMFYgMVYpCisgICAgdnB1bnBja2xidyAgeW1tRiwgeW1tRiwgeW1tSCAgICAgICAgOyB5bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggM0ggMkogM0ogMkwgM0wgMk4gM04gMlAgM1AgMlIgM1IgMlQgM1QgMlYgM1YpCisKKyAgICB2cHVucGNraHdkICB5bW1DLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAzTyAwUSAxUSAyUSAzUSAwUyAxUyAyUyAzUyAwVSAxVSAyVSAzVSkKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAzRyAwSSAxSSAySSAzSSAwSyAxSyAySyAzSyAwTSAxTSAyTSAzTSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUCAxUCAyUCAzUCAwUiAxUiAyUiAzUiAwVCAxVCAyVCAzVCAwViAxViAyViAzVikKKyAgICB2cHVucGNrbHdkICB5bW1CLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSCAxSCAySCAzSCAwSiAxSiAySiAzSiAwTCAxTCAyTCAzTCAwTiAxTiAyTiAzTikKKworICAgIHZwdW5wY2toZHEgIHltbUUsIHltbUEsIHltbUIgICAgICAgIDsgeW1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBLIDFLIDJLIDNLIDBMIDFMIDJMIDNMIDBNIDFNIDJNIDNNIDBOIDFOIDJOIDNOKQorICAgIHZwdW5wY2tsZHEgIHltbUIsIHltbUEsIHltbUIgICAgICAgIDsgeW1tQj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDNHIDBIIDFIIDJIIDNIIDBJIDFJIDJJIDNJIDBKIDFKIDJKIDNKKQorICAgIHZwdW5wY2toZHEgIHltbUYsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRj0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBTIDFTIDJTIDNTIDBUIDFUIDJUIDNUIDBVIDFVIDJVIDNVIDBWIDFWIDJWIDNWKQorICAgIHZwdW5wY2tsZHEgIHltbUcsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDNPIDBQIDFQIDJQIDNQIDBRIDFRIDJRIDNRIDBSIDFSIDJSIDNSKQorCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQiwgeW1tRSwgMHgyMCAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgdnBlcm0yaTEyOCAgeW1tRCwgeW1tRywgeW1tRiwgMHgyMCAgOyB5bW1EPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgdnBlcm0yaTEyOCAgeW1tQywgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1DPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tRywgeW1tRiwgMHgzMSAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NjQKKworICAgIHRlc3QgICAgICAgIGVkaSwgU0laRU9GX1lNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUMKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtlZGkrMypTSVpFT0ZfWU1NV09SRF0sIHltbUgKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSszKlNJWkVPRl9ZTU1XT1JEXSwgeW1tSAorLm91dDA6CisgICAgYWRkICAgICAgICAgZWRpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLmVuZGNvbHVtbgorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMAorICAgIGRlYyAgICAgICAgIGFsCisgICAgam56ICAgICAgICAgbmVhciAuWWxvb3BfMm5kCisKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0NjQ6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzIKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBvdXRwdHIKKyAgICB2bW92ZHFhICAgICB5bW1BLCB5bW1DCisgICAgdm1vdmRxYSAgICAgeW1tRCwgeW1tSAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8yCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgOyBvdXRwdHIKKyAgICB2bW92ZHFhICAgICB5bW1BLCB5bW1ECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzQKKy5jb2x1bW5fc3QxNjoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvOAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIHZtb3ZkcXUgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICA7IG91dHB0cgorICAgIHZwZXJtMmkxMjggIHltbUEsIHltbUEsIHltbUEsIDEKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvOAorLmNvbHVtbl9zdDE1OgorICAgIDsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeW1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzE2CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICB2bW92cSAgICAgICBNTVdPUkQgW2VkaV0sIHhtbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1lNTVdPUkQvMTYqNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8xNgorICAgIHZwc3JsZHEgICAgIHhtbUEsIFNJWkVPRl9ZTU1XT1JELzE2KjQKKy5jb2x1bW5fc3Q3OgorICAgIDsgU3RvcmUgb25lIHBpeGVsICg0IGJ5dGVzKSBvZiB5bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIHNob3J0IC5lbmRjb2x1bW4KKyAgICB2bW92ZCAgICAgICBYTU1fRFdPUkQgW2VkaV0sIHhtbUEKKworJWVuZGlmICA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworLmVuZGNvbHVtbjoKKyAgICBzZmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKworLnJldHVybjoKKyAgICB2emVyb3VwcGVyCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgIChiKSArIDggICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgICAgICAoYikgKyAxMiAgIDsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5fcm93X2dyb3VwX2N0cihiKSAgKGIpICsgMTYgICA7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgICAgICAoYikgKyAyMCAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyKQorCitFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWF4LCBQT0lOVEVSIFtvdXRwdXRfd2lkdGgoZWJwKV0KKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVicCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCisgICAgbGVhICAgICAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgcHVzaCAgICAgICAgZXNpICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjAwCisgICAgbW92ICAgICAgICAgZWJ4LCBlc3AKKworICAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2J1ZiAob3V0cHRyMCkKKyAgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGluX3Jvd19ncm91cF9jdHIKKyAgICBwdXNoICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGlucHV0X2J1ZgorICAgIHB1c2ggICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X3dpZHRoCisKKyAgICBjYWxsICAgICAgICBuZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MikKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdHIwMQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHRyMQorICAgIG1vdiAgICAgICAgIFBPSU5URVIgW2VieCswKlNJWkVPRl9QT0lOVEVSXSwgZXNpCisgICAgbW92ICAgICAgICAgUE9JTlRFUiBbZWJ4LTEqU0laRU9GX1BPSU5URVJdLCBlZGkKKworICAgIGNhbGwgICAgICAgIG5lYXIgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyKQorCisgICAgYWRkICAgICAgICAgZXNwLCBieXRlIDcqU0laRU9GX0RXT1JECisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1yZ2V4dC1tbXguYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkbXJnZXh0LW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ZTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1yZ2V4dC1tbXguYXNtCkBAIC0wLDAgKzEsNDYyIEBACis7Cis7IGpkbXJnZXh0LmFzbSAtIG1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgICAgICAoYikgKyA4ICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgICAgICAgKGIpICsgMTIgICA7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikgIChiKSArIDE2ICAgOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgICAgICAgKGIpICsgMjAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgIDMKKyVkZWZpbmUgZ290cHRyICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKiBnb3RwdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKKworRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgIDsgYWxpZ24gdG8gNjQgYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVheCldICA7IGNvbAorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBwdXNoICAgICAgICBlY3gKKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVheCldCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjEKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgorCisgICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKyAgICBtb3ZwaWMgICAgICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKworICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFtlYnhdICAgICAgIDsgbW02PUNiKDAxMjM0NTY3KQorICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFtlZHhdICAgICAgIDsgbW03PUNyKDAxMjM0NTY3KQorCisgICAgcHhvciAgICAgICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KGFsbCAwJ3MpCisgICAgcGNtcGVxdyAgICAgbW0zLCBtbTMKKyAgICBwc2xsdyAgICAgICBtbTMsIDcgICAgICAgICAgICAgICAgICA7IG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTYKKyAgICBwdW5wY2toYncgICBtbTYsIG1tMSAgICAgICAgICAgICAgICA7IG1tNj1DYig0NTY3KT1DYkgKKyAgICBwdW5wY2tsYncgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND1DYigwMTIzKT1DYkwKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIHB1bnBja2hidyAgIG1tNywgbW0xICAgICAgICAgICAgICAgIDsgbW03PUNyKDQ1NjcpPUNySAorICAgIHB1bnBja2xidyAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPUNyKDAxMjMpPUNyTAorCisgICAgcGFkZHcgICAgICAgbW02LCBtbTMKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tMworICAgIHBhZGR3ICAgICAgIG1tNywgbW0zCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTMKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgIDsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tNiAgICAgICAgICAgICAgICA7IG1tNT1DYkgKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tNCAgICAgICAgICAgICAgICA7IG1tMj1DYkwKKyAgICBwYWRkdyAgICAgICBtbTYsIG1tNiAgICAgICAgICAgICAgICA7IG1tNj0yKkNiSAorICAgIHBhZGR3ICAgICAgIG1tNCwgbW00ICAgICAgICAgICAgICAgIDsgbW00PTIqQ2JMCisgICAgbW92cSAgICAgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9Q3JICisgICAgbW92cSAgICAgICAgbW0zLCBtbTAgICAgICAgICAgICAgICAgOyBtbTM9Q3JMCisgICAgcGFkZHcgICAgICAgbW03LCBtbTcgICAgICAgICAgICAgICAgOyBtbTc9MipDckgKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0yKkNyTAorCisgICAgcG11bGh3ICAgICAgbW02LCBbR09UT0ZGKGVheCxQV19NRjAyMjgpXSAgOyBtbTY9KDIqQ2JIICogLUZJWCgwLjIyODAwKSkKKyAgICBwbXVsaHcgICAgICBtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICA7IG1tND0oMipDYkwgKiAtRklYKDAuMjI4MDApKQorICAgIHBtdWxodyAgICAgIG1tNywgW0dPVE9GRihlYXgsUFdfRjA0MDIpXSAgIDsgbW03PSgyKkNySCAqIEZJWCgwLjQwMjAwKSkKKyAgICBwbXVsaHcgICAgICBtbTAsIFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0gICA7IG1tMD0oMipDckwgKiBGSVgoMC40MDIwMCkpCisKKyAgICBwYWRkdyAgICAgICBtbTYsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgcGFkZHcgICAgICAgbW00LCBbR09UT0ZGKGVheCxQV19PTkUpXQorICAgIHBzcmF3ICAgICAgIG1tNiwgMSAgICAgICAgICAgICAgICAgIDsgbW02PShDYkggKiAtRklYKDAuMjI4MDApKQorICAgIHBzcmF3ICAgICAgIG1tNCwgMSAgICAgICAgICAgICAgICAgIDsgbW00PShDYkwgKiAtRklYKDAuMjI4MDApKQorICAgIHBhZGR3ICAgICAgIG1tNywgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwYWRkdyAgICAgICBtbTAsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgcHNyYXcgICAgICAgbW03LCAxICAgICAgICAgICAgICAgICAgOyBtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKyAgICBwc3JhdyAgICAgICBtbTAsIDEgICAgICAgICAgICAgICAgICA7IG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorCisgICAgcGFkZHcgICAgICAgbW02LCBtbTUKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tMgorICAgIHBhZGR3ICAgICAgIG1tNiwgbW01ICAgICAgICAgICAgICAgIDsgbW02PShDYkggKiBGSVgoMS43NzIwMCkpPShCLVkpSAorICAgIHBhZGR3ICAgICAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PShDYkwgKiBGSVgoMS43NzIwMCkpPShCLVkpTAorICAgIHBhZGR3ICAgICAgIG1tNywgbW0xICAgICAgICAgICAgICAgIDsgbW03PShDckggKiBGSVgoMS40MDIwMCkpPShSLVkpSAorICAgIHBhZGR3ICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPShDckwgKiBGSVgoMS40MDIwMCkpPShSLVkpTAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNiAgICAgOyB3aygwKT0oQi1ZKUgKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW03ICAgICA7IHdrKDEpPShSLVkpSAorCisgICAgbW92cSAgICAgICAgbW02LCBtbTUKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMgorICAgIHB1bnBja2x3ZCAgIG1tNSwgbW0xCisgICAgcHVucGNraHdkICAgbW02LCBtbTEKKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgcG1hZGR3ZCAgICAgbW02LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgIHB1bnBja2x3ZCAgIG1tMiwgbW0zCisgICAgcHVucGNraHdkICAgbW03LCBtbTMKKyAgICBwbWFkZHdkICAgICBtbTIsIFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgcG1hZGR3ZCAgICAgbW03LCBbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisgICAgcGFkZGQgICAgICAgbW01LCBbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKyAgICBwYWRkZCAgICAgICBtbTYsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBzcmFkICAgICAgIG1tNSwgU0NBTEVCSVRTCisgICAgcHNyYWQgICAgICAgbW02LCBTQ0FMRUJJVFMKKyAgICBwYWRkZCAgICAgICBtbTIsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBhZGRkICAgICAgIG1tNywgW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgcHNyYWQgICAgICAgbW0yLCBTQ0FMRUJJVFMKKyAgICBwc3JhZCAgICAgICBtbTcsIFNDQUxFQklUUworCisgICAgcGFja3NzZHcgICAgbW01LCBtbTYgICAgICAgICAgICAgICAgOyBtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisgICAgcGFja3NzZHcgICAgbW0yLCBtbTcgICAgICAgICAgICAgICAgOyBtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisgICAgcHN1YncgICAgICAgbW01LCBtbTEgICAgICAgICAgICAgICAgOyBtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCotRklYKDAuNzE0KT0oRy1ZKUgKKyAgICBwc3VidyAgICAgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygyKV0sIG1tNSAgICAgOyB3aygyKT0oRy1ZKUgKKworICAgIG1vdiAgICAgICAgIGFsLCAyICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgIGptcCAgICAgICAgIHNob3J0IC5ZbG9vcF8xc3QKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuWWxvb3BfMm5kOgorICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0wPShSLVkpSAorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFt3aygyKV0gICAgIDsgbW0yPShHLVkpSAorICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW00PShCLVkpSAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5ZbG9vcF8xc3Q6CisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW2VzaV0gICAgICAgOyBtbTc9WSgwMTIzNDU2NykKKworICAgIHBjbXBlcXcgICAgIG1tNiwgbW02CisgICAgcHNybHcgICAgICAgbW02LCBCWVRFX0JJVCAgICAgICAgICAgOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgcGFuZCAgICAgICAgbW02LCBtbTcgICAgICAgICAgICAgICAgOyBtbTY9WSgwMjQ2KT1ZRQorICAgIHBzcmx3ICAgICAgIG1tNywgQllURV9CSVQgICAgICAgICAgIDsgbW03PVkoMTM1Nyk9WU8KKworICAgIG1vdnEgICAgICAgIG1tMSwgbW0wICAgICAgICAgICAgICAgIDsgbW0xPW1tMD0oUi1ZKShML0gpCisgICAgbW92cSAgICAgICAgbW0zLCBtbTIgICAgICAgICAgICAgICAgOyBtbTM9bW0yPShHLVkpKEwvSCkKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tNCAgICAgICAgICAgICAgICA7IG1tNT1tbTQ9KEItWSkoTC9IKQorCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9KChSLVkpK1lFKT1SRT0oUjAgUjIgUjQgUjYpCisgICAgcGFkZHcgICAgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KChSLVkpK1lPKT1STz0oUjEgUjMgUjUgUjcpCisgICAgcGFja3Vzd2IgICAgbW0wLCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9KFIwIFIyIFI0IFI2ICoqICoqICoqICoqKQorICAgIHBhY2t1c3diICAgIG1tMSwgbW0xICAgICAgICAgICAgICAgIDsgbW0xPShSMSBSMyBSNSBSNyAqKiAqKiAqKiAqKikKKworICAgIHBhZGR3ICAgICAgIG1tMiwgbW02ICAgICAgICAgICAgICAgIDsgbW0yPSgoRy1ZKStZRSk9R0U9KEcwIEcyIEc0IEc2KQorICAgIHBhZGR3ICAgICAgIG1tMywgbW03ICAgICAgICAgICAgICAgIDsgbW0zPSgoRy1ZKStZTyk9R089KEcxIEczIEc1IEc3KQorICAgIHBhY2t1c3diICAgIG1tMiwgbW0yICAgICAgICAgICAgICAgIDsgbW0yPShHMCBHMiBHNCBHNiAqKiAqKiAqKiAqKikKKyAgICBwYWNrdXN3YiAgICBtbTMsIG1tMyAgICAgICAgICAgICAgICA7IG1tMz0oRzEgRzMgRzUgRzcgKiogKiogKiogKiopCisKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IG1tND0oKEItWSkrWUUpPUJFPShCMCBCMiBCNCBCNikKKyAgICBwYWRkdyAgICAgICBtbTUsIG1tNyAgICAgICAgICAgICAgICA7IG1tNT0oKEItWSkrWU8pPUJPPShCMSBCMyBCNSBCNykKKyAgICBwYWNrdXN3YiAgICBtbTQsIG1tNCAgICAgICAgICAgICAgICA7IG1tND0oQjAgQjIgQjQgQjYgKiogKiogKiogKiopCisgICAgcGFja3Vzd2IgICAgbW01LCBtbTUgICAgICAgICAgICAgICAgOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikKKyAgICA7IG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKQorICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCisgICAgOyBtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqKSwgbW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworICAgIHB1bnBja2xidyAgIG1tQSwgbW1DICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKyAgICBwdW5wY2tsYncgICBtbUUsIG1tQiAgICAgICAgICAgICAgICA7IG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcpCisgICAgcHVucGNrbGJ3ICAgbW1ELCBtbUYgICAgICAgICAgICAgICAgOyBtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3KQorCisgICAgbW92cSAgICAgICAgbW1HLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUgsIG1tQQorICAgIHB1bnBja2x3ZCAgIG1tQSwgbW1FICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKyAgICBwdW5wY2tod2QgICBtbUcsIG1tRSAgICAgICAgICAgICAgICA7IG1tRz0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisKKyAgICBwc3JscSAgICAgICBtbUgsIDIqQllURV9CSVQgICAgICAgICA7IG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgLS0gLS0pCisgICAgcHNybHEgICAgICAgbW1FLCAyKkJZVEVfQklUICAgICAgICAgOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQorCisgICAgbW92cSAgICAgICAgbW1DLCBtbUQKKyAgICBtb3ZxICAgICAgICBtbUIsIG1tRAorICAgIHB1bnBja2x3ZCAgIG1tRCwgbW1IICAgICAgICAgICAgICAgIDsgbW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCkKKyAgICBwdW5wY2tod2QgICBtbUMsIG1tSCAgICAgICAgICAgICAgICA7IG1tQz0oMTUgMjUgMDYgMTYgMTcgMjcgLS0gLS0pCisKKyAgICBwc3JscSAgICAgICBtbUIsIDIqQllURV9CSVQgICAgICAgICA7IG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pCisKKyAgICBtb3ZxICAgICAgICBtbUYsIG1tRQorICAgIHB1bnBja2x3ZCAgIG1tRSwgbW1CICAgICAgICAgICAgICAgIDsgbW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSkKKyAgICBwdW5wY2tod2QgICBtbUYsIG1tQiAgICAgICAgICAgICAgICA7IG1tRj0oMjYgMDcgMTcgMjcgLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2tsZHEgICBtbUEsIG1tRCAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisgICAgcHVucGNrbGRxICAgbW1FLCBtbUcgICAgICAgICAgICAgICAgOyBtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIHB1bnBja2xkcSAgIG1tQywgbW1GICAgICAgICAgICAgICAgIDsgbW1DPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUUKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKworICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgbmVhciAuZW5kY29sdW1uCisKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JEICA7IG91dHB0cgorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgaW5wdHIwCisgICAgZGVjICAgICAgICAgYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBZY3RyCisgICAgam56ICAgICAgICAgbmVhciAuWWxvb3BfMm5kCisKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICA7IGlucHRyMQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgIDsgaW5wdHIyCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5fc3QxNjoKKyAgICBsZWEgICAgICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisgICAgbW92cSAgICAgICAgbW1BLCBtbUMKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisuY29sdW1uX3N0ODoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgbW1BLCBtbUUKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKyAgICBtb3ZkICAgICAgICBlYXgsIG1tQQorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MgorICAgIG1vdiAgICAgICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBlYXgKKyAgICBwc3JscSAgICAgICBtbUEsIERXT1JEX0JJVAorICAgIG1vdmQgICAgICAgIGVheCwgbW1BCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QyOgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxCisgICAgbW92ICAgICAgICAgV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAorICAgIHNociAgICAgICAgIGVheCwgV09SRF9CSVQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1dPUkQKKy5jb2x1bW5fc3QxOgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIGpiICAgICAgICAgIHNob3J0IC5lbmRjb2x1bW4KKyAgICBtb3YgICAgICAgICBCWVRFIFtlZGkrMCpTSVpFT0ZfQllURV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgcGNtcGVxYiAgICAgbW02LCBtbTYgICAgICAgICAgICAgICAgOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorICAgIHBjbXBlcWIgICAgIG1tNywgbW03ICAgICAgICAgICAgICAgIDsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKKyVlbHNlCisgICAgcHhvciAgICAgICAgbW02LCBtbTYgICAgICAgICAgICAgICAgOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorICAgIHB4b3IgICAgICAgIG1tNywgbW03ICAgICAgICAgICAgICAgIDsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKKyVlbmRpZgorICAgIDsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCisgICAgOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKKyAgICA7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQorICAgIDsgbW1HPSgzMCAzMiAzNCAzNiAqKiAqKiAqKiAqKiksIG1tSD0oMzEgMzMgMzUgMzcgKiogKiogKiogKiopCisKKyAgICBwdW5wY2tsYncgICBtbUEsIG1tQyAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYpCisgICAgcHVucGNrbGJ3ICAgbW1FLCBtbUcgICAgICAgICAgICAgICAgOyBtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2KQorICAgIHB1bnBja2xidyAgIG1tQiwgbW1EICAgICAgICAgICAgICAgIDsgbW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNykKKyAgICBwdW5wY2tsYncgICBtbUYsIG1tSCAgICAgICAgICAgICAgICA7IG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcpCisKKyAgICBtb3ZxICAgICAgICBtbUMsIG1tQQorICAgIHB1bnBja2x3ZCAgIG1tQSwgbW1FICAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKKyAgICBwdW5wY2tod2QgICBtbUMsIG1tRSAgICAgICAgICAgICAgICA7IG1tQz0oMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgbW92cSAgICAgICAgbW1HLCBtbUIKKyAgICBwdW5wY2tsd2QgICBtbUIsIG1tRiAgICAgICAgICAgICAgICA7IG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCisgICAgcHVucGNraHdkICAgbW1HLCBtbUYgICAgICAgICAgICAgICAgOyBtbUc9KDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCisgICAgbW92cSAgICAgICAgbW1ELCBtbUEKKyAgICBwdW5wY2tsZHEgICBtbUEsIG1tQiAgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgcHVucGNraGRxICAgbW1ELCBtbUIgICAgICAgICAgICAgICAgOyBtbUQ9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgIG1vdnEgICAgICAgIG1tSCwgbW1DCisgICAgcHVucGNrbGRxICAgbW1DLCBtbUcgICAgICAgICAgICAgICAgOyBtbUM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIHB1bnBja2hkcSAgIG1tSCwgbW1HICAgICAgICAgICAgICAgIDsgbW1IPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbUgKKworICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmVuZGNvbHVtbgorCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRCAgOyBvdXRwdHIKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICA7IGlucHRyMAorICAgIGRlYyAgICAgICAgIGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgIGpueiAgICAgICAgIG5lYXIgLllsb29wXzJuZAorCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisgICAgbW92cSAgICAgICAgbW1BLCBtbUMKKyAgICBtb3ZxICAgICAgICBtbUQsIG1tSAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0ODoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICBtb3ZxICAgICAgICBtbUEsIG1tRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisgICAgamIgICAgICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgIG1vdmQgICAgICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBtbUEKKworJWVuZGlmICA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworLmVuZGNvbHVtbjoKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14KEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7Cis7CisKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpICAgICAgKGIpICsgOCAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2J1ZihiKSAgICAgICAgIChiKSArIDEyICAgOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpICAoYikgKyAxNiAgIDsgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyCislZGVmaW5lIG91dHB1dF9idWYoYikgICAgICAgIChiKSArIDIwICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCkKKworRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVicCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCisgICAgbGVhICAgICAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgcHVzaCAgICAgICAgZXNpICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjAwCisgICAgbW92ICAgICAgICAgZWJ4LCBlc3AKKworICAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2J1ZiAob3V0cHRyMCkKKyAgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGluX3Jvd19ncm91cF9jdHIKKyAgICBwdXNoICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGlucHV0X2J1ZgorICAgIHB1c2ggICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X3dpZHRoCisKKyAgICBjYWxsICAgICAgICBuZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14KQorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB0cjAxCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdHIxCisgICAgbW92ICAgICAgICAgUE9JTlRFUiBbZWJ4KzAqU0laRU9GX1BPSU5URVJdLCBlc2kKKyAgICBtb3YgICAgICAgICBQT0lOVEVSIFtlYngtMSpTSVpFT0ZfUE9JTlRFUl0sIGVkaQorCisgICAgY2FsbCAgICAgICAgbmVhciBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKKworICAgIGFkZCAgICAgICAgIGVzcCwgYnl0ZSA3KlNJWkVPRl9EV09SRAorCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRtcmdleHQtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRtcmdleHQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0Njk3ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZG1yZ2V4dC1zc2UyLmFzbQpAQCAtMCwwICsxLDUxOSBAQAorOworOyBqZG1yZ2V4dC5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSwgMjAxMiBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7Cis7CisKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpICAgICAgKGIpICsgOCAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2J1ZihiKSAgICAgICAgIChiKSArIDEyICAgOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpICAoYikgKyAxNiAgIDsgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyCislZGVmaW5lIG91dHB1dF9idWYoYikgICAgICAgIChiKSArIDIwICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAzCislZGVmaW5lIGdvdHB0ciAgICAgICAgd2soMCkgLSBTSVpFT0ZfUE9JTlRFUiAgOyB2b2lkICogZ290cHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgbW92cGljICAgICAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYXgpXSAgOyBjb2wKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgcHVzaCAgICAgICAgZWN4CisKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW5fcm93X2dyb3VwX2N0cihlYXgpXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaStlY3gqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjAKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIxCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdHIKKworICAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCisKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisgICAgbW92cGljICAgICAgZWF4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtlYnhdICAgICA7IHhtbTY9Q2IoMDEyMzQ1Njc4OUFCQ0RFRikKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFtlZHhdICAgICA7IHhtbTc9Q3IoMDEyMzQ1Njc4OUFCQ0RFRikKKworICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMT0oYWxsIDAncykKKyAgICBwY21wZXF3ICAgICB4bW0zLCB4bW0zCisgICAgcHNsbHcgICAgICAgeG1tMywgNyAgICAgICAgICAgICAgICAgOyB4bW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02CisgICAgcHVucGNraGJ3ICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PUNiKDg5QUJDREVGKT1DYkgKKyAgICBwdW5wY2tsYncgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9Q2IoMDEyMzQ1NjcpPUNiTAorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTcKKyAgICBwdW5wY2toYncgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9Q3IoODlBQkNERUYpPUNySAorICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1DcigwMTIzNDU2Nyk9Q3JMCisKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMworICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW0zCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgIDsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICA7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PUNiSAorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj1DYkwKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW02ICAgICAgICAgICAgICA7IHhtbTY9MipDYkgKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW00ICAgICAgICAgICAgICA7IHhtbTQ9MipDYkwKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9Q3JICisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPUNyTAorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz0yKkNySAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0yKkNyTAorCisgICAgcG11bGh3ICAgICAgeG1tNiwgW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gIDsgeG1tNj0oMipDYkggKiAtRklYKDAuMjI4MDApKQorICAgIHBtdWxodyAgICAgIHhtbTQsIFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICA7IHhtbTQ9KDIqQ2JMICogLUZJWCgwLjIyODAwKSkKKyAgICBwbXVsaHcgICAgICB4bW03LCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyB4bW03PSgyKkNySCAqIEZJWCgwLjQwMjAwKSkKKyAgICBwbXVsaHcgICAgICB4bW0wLCBbR09UT0ZGKGVheCxQV19GMDQwMildICAgOyB4bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKworICAgIHBhZGR3ICAgICAgIHhtbTYsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgcGFkZHcgICAgICAgeG1tNCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwc3JhdyAgICAgICB4bW02LCAxICAgICAgICAgICAgICAgICA7IHhtbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCisgICAgcHNyYXcgICAgICAgeG1tNCwgMSAgICAgICAgICAgICAgICAgOyB4bW00PShDYkwgKiAtRklYKDAuMjI4MDApKQorICAgIHBhZGR3ICAgICAgIHhtbTcsIFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgcGFkZHcgICAgICAgeG1tMCwgW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICBwc3JhdyAgICAgICB4bW03LCAxICAgICAgICAgICAgICAgICA7IHhtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKyAgICBwc3JhdyAgICAgICB4bW0wLCAxICAgICAgICAgICAgICAgICA7IHhtbTA9KENyTCAqIEZJWCgwLjQwMjAwKSkKKworICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTUKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW0yCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PShDYkggKiBGSVgoMS43NzIwMCkpPShCLVkpSAorICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9KENySCAqIEZJWCgxLjQwMjAwKSk9KFItWSlICisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPShDckwgKiBGSVgoMS40MDIwMCkpPShSLVkpTAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW02ICAgOyB3aygwKT0oQi1ZKUgKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTcgICA7IHdrKDEpPShSLVkpSAorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0xCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tNywgeG1tMworICAgIHBtYWRkd2QgICAgIHhtbTIsIFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworICAgIHBhZGRkICAgICAgIHhtbTUsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBhZGRkICAgICAgIHhtbTYsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBzcmFkICAgICAgIHhtbTUsIFNDQUxFQklUUworICAgIHBzcmFkICAgICAgIHhtbTYsIFNDQUxFQklUUworICAgIHBhZGRkICAgICAgIHhtbTIsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBhZGRkICAgICAgIHhtbTcsIFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgIHBzcmFkICAgICAgIHhtbTIsIFNDQUxFQklUUworICAgIHBzcmFkICAgICAgIHhtbTcsIFNDQUxFQklUUworCisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQorICAgIHBhY2tzc2R3ICAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKkZJWCgwLjI4NSkKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCotRklYKDAuNzE0KT0oRy1ZKUgKKyAgICBwc3VidyAgICAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tNSAgIDsgd2soMik9KEctWSlICisKKyAgICBtb3YgICAgICAgICBhbCwgMiAgICAgICAgICAgICAgICAgICA7IFljdHIKKyAgICBqbXAgICAgICAgICBzaG9ydCAuWWxvb3BfMXN0CisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLllsb29wXzJuZDoKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9KFItWSlICisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soMildICAgOyB4bW0yPShHLVkpSAorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tND0oQi1ZKUgKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuWWxvb3BfMXN0OgorICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW2VzaV0gICAgIDsgeG1tNz1ZKDAxMjM0NTY3ODlBQkNERUYpCisKKyAgICBwY21wZXF3ICAgICB4bW02LCB4bW02CisgICAgcHNybHcgICAgICAgeG1tNiwgQllURV9CSVQgICAgICAgICAgOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgIHBhbmQgICAgICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorICAgIHBzcmx3ICAgICAgIHhtbTcsIEJZVEVfQklUICAgICAgICAgIDsgeG1tNz1ZKDEzNTc5QkRGKT1ZTworCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tMCAgICAgICAgICAgICAgOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMz14bW0yPShHLVkpKEwvSCkKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9eG1tND0oQi1ZKShML0gpCisKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCisgICAgcGFja3Vzd2IgICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKKyAgICBwYWNrdXN3YiAgICB4bW0xLCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNiAgICAgICAgICAgICAgOyB4bW0yPSgoRy1ZKStZRSk9R0U9RygwMjQ2OEFDRSkKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9KChHLVkpK1lPKT1HTz1HKDEzNTc5QkRGKQorICAgIHBhY2t1c3diICAgIHhtbTIsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisgICAgcGFja3Vzd2IgICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKyAgICBwYWNrdXN3YiAgICB4bW00LCB4bW00ICAgICAgICAgICAgICA7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorICAgIHBhY2t1c3diICAgIHhtbTUsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKyAgICA7IHhtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKSwgeG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiopCisKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1DICAgICAgICA7IHhtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFKQorICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUIgICAgICAgIDsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisgICAgcHVucGNrbGJ3ICAgeG1tRCwgeG1tRiAgICAgICAgOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUEKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1BCisgICAgcHVucGNrbHdkICAgeG1tQSwgeG1tRSAgICAgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMyAwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKKyAgICBwdW5wY2tod2QgICB4bW1HLCB4bW1FICAgICAgICA7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisgICAgcHNybGRxICAgICAgeG1tSCwgMiAgICAgICAgICAgOyB4bW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSAtLSAtLSkKKyAgICBwc3JsZHEgICAgICB4bW1FLCAyICAgICAgICAgICA7IHhtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIC0tIC0tKQorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tRAorICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUQKKyAgICBwdW5wY2tsd2QgICB4bW1ELCB4bW1IICAgICAgICA7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorICAgIHB1bnBja2h3ZCAgIHhtbUMsIHhtbUggICAgICAgIDsgeG1tQz0oMTkgMjkgMEEgMUEgMUIgMkIgMEMgMUMgMUQgMkQgMEUgMUUgMUYgMkYgLS0gLS0pCisKKyAgICBwc3JsZHEgICAgICB4bW1CLCAyICAgICAgICAgICA7IHhtbUI9KDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGIC0tIC0tKQorCisgICAgbW92ZHFhICAgICAgeG1tRiwgeG1tRQorICAgIHB1bnBja2x3ZCAgIHhtbUUsIHhtbUIgICAgICAgIDsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisgICAgcHVucGNraHdkICAgeG1tRiwgeG1tQiAgICAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAyQyAwRCAxRCAyRCAyRSAwRiAxRiAyRiAtLSAtLSAtLSAtLSkKKworICAgIHBzaHVmZCAgICAgIHhtbUgsIHhtbUEsIDB4NEUgIDsgeG1tSD0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcgMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisgICAgbW92ZHFhICAgICAgeG1tQiwgeG1tRQorICAgIHB1bnBja2xkcSAgIHhtbUEsIHhtbUQgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQpCisgICAgcHVucGNrbGRxICAgeG1tRSwgeG1tSCAgICAgICAgOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKyAgICBwdW5wY2toZHEgICB4bW1ELCB4bW1CICAgICAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5KQorCisgICAgcHNodWZkICAgICAgeG1tSCwgeG1tRywgMHg0RSAgOyB4bW1IPSgwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRiAwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQikKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1GCisgICAgcHVucGNrbGRxICAgeG1tRywgeG1tQyAgICAgICAgOyB4bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQykKKyAgICBwdW5wY2tsZHEgICB4bW1GLCB4bW1IICAgICAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorICAgIHB1bnBja2hkcSAgIHhtbUMsIHhtbUIgICAgICAgIDsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2tscWRxICB4bW1BLCB4bW1FICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIHB1bnBja2xxZHEgIHhtbUQsIHhtbUcgICAgICAgIDsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgcHVucGNrbHFkcSAgeG1tRiwgeG1tQyAgICAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKworICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgorCisgICAgdGVzdCAgICAgICAgZWRpLCBTSVpFT0ZfWE1NV09SRC0xCisgICAgam56ICAgICAgICAgc2hvcnQgLm91dDEKKyAgICA7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorICAgIGptcCAgICAgICAgIHNob3J0IC5vdXQwCisub3V0MTogIDsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisub3V0MDoKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBuZWFyIC5lbmRjb2x1bW4KKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjAKKyAgICBkZWMgICAgICAgICBhbCAgICAgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgIGpueiAgICAgICAgIG5lYXIgLllsb29wXzJuZAorCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjIKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbl9zdDMyOgorICAgIGxlYSAgICAgICAgIGVjeCwgW2VjeCtlY3gqMl0gICAgICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1GCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKy5jb2x1bW5fc3QxNjoKKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1ECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICBjbXAgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBwc3JsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MworICAgIG1vdmQgICAgICAgIFhNTV9EV09SRCBbZWRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgcHNybGRxICAgICAgeG1tQSwgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciAyIGJ5dGVzIG9mIGVheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW1BCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDEKKyAgICBtb3YgICAgICAgICBXT1JEIFtlZGldLCBheAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHNociAgICAgICAgIGVheCwgMTYKKy5jb2x1bW5fc3QxOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDEgYnl0ZSBvZiBlYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgIG1vdiAgICAgICAgIEJZVEUgW2VkaV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgcGNtcGVxYiAgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKyAgICBwY21wZXFiICAgICB4bW03LCB4bW03ICAgICAgICAgICAgICA7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVsc2UKKyAgICBweG9yICAgICAgICB4bW02LCB4bW02ICAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgIHB4b3IgICAgICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZW5kaWYKKyAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKyAgICA7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1DICA7IHhtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFKQorICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUcgIDsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCisgICAgcHVucGNrbGJ3ICAgeG1tQiwgeG1tRCAgOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKyAgICBwdW5wY2tsYncgICB4bW1GLCB4bW1IICA7IHhtbUY9KDIxIDMxIDIzIDMzIDI1IDM1IDI3IDM3IDI5IDM5IDJCIDNCIDJEIDNEIDJGIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tQywgeG1tQQorICAgIHB1bnBja2x3ZCAgIHhtbUEsIHhtbUUgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgcHVucGNraHdkICAgeG1tQywgeG1tRSAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwQSAxQSAyQSAzQSAwQyAxQyAyQyAzQyAwRSAxRSAyRSAzRSkKKyAgICBtb3ZkcWEgICAgICB4bW1HLCB4bW1CCisgICAgcHVucGNrbHdkICAgeG1tQiwgeG1tRiAgOyB4bW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICBwdW5wY2tod2QgICB4bW1HLCB4bW1GICA7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tQQorICAgIHB1bnBja2xkcSAgIHhtbUEsIHhtbUIgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgcHVucGNraGRxICAgeG1tRCwgeG1tQiAgOyB4bW1EPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1DCisgICAgcHVucGNrbGRxICAgeG1tQywgeG1tRyAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICBwdW5wY2toZHEgICB4bW1ILCB4bW1HICA7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisKKyAgICB0ZXN0ICAgICAgICBlZGksIFNJWkVPRl9YTU1XT1JELTEKKyAgICBqbnogICAgICAgICBzaG9ydCAub3V0MQorICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisgICAgam1wICAgICAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKKy5vdXQwOgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLmVuZGNvbHVtbgorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMAorICAgIGRlYyAgICAgICAgIGFsICAgICAgICAgICAgICAgICAgICAgICAgOyBZY3RyCisgICAgam56ICAgICAgICAgbmVhciAuWWxvb3BfMm5kCisKKyAgICBhZGQgICAgICAgICBlYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1DCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tSAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1ECisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgcHNybGRxICAgICAgeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAuZW5kY29sdW1uCisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtlZGldLCB4bW1BCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5lbmRjb2x1bW46CisgICAgc2ZlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgIChiKSArIDggICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgICAgICAoYikgKyAxMiAgIDsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5fcm93X2dyb3VwX2N0cihiKSAgKGIpICsgMTYgICA7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgICAgICAoYikgKyAyMCAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWF4LCBQT0lOVEVSIFtvdXRwdXRfd2lkdGgoZWJwKV0KKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVicCldCisgICAgbW92ICAgICAgICAgZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCisgICAgbGVhICAgICAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKyAgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgcHVzaCAgICAgICAgZXNpICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjAwCisgICAgbW92ICAgICAgICAgZWJ4LCBlc3AKKworICAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2J1ZiAob3V0cHRyMCkKKyAgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGluX3Jvd19ncm91cF9jdHIKKyAgICBwdXNoICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGlucHV0X2J1ZgorICAgIHB1c2ggICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X3dpZHRoCisKKyAgICBjYWxsICAgICAgICBuZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdHIwMQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHRyMQorICAgIG1vdiAgICAgICAgIFBPSU5URVIgW2VieCswKlNJWkVPRl9QT0lOVEVSXSwgZXNpCisgICAgbW92ICAgICAgICAgUE9JTlRFUiBbZWJ4LTEqU0laRU9GX1BPSU5URVJdLCBlZGkKKworICAgIGNhbGwgICAgICAgIG5lYXIgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCisgICAgYWRkICAgICAgICAgZXNwLCBieXRlIDcqU0laRU9GX0RXT1JECisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZHNhbXBsZS1hdngyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZHNhbXBsZS1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWNlNTExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkc2FtcGxlLWF2eDIuYXNtCkBAIC0wLDAgKzEsNzYyIEBACis7Cis7IGpkc2FtcGxlLmFzbSAtIHVwc2FtcGxpbmcgKEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9mYW5jeV91cHNhbXBsZV9hdngyKQorCitFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9hdngyKToKKworUFdfT05FICAgdGltZXMgMTYgZHcgMQorUFdfVFdPICAgdGltZXMgMTYgZHcgMgorUFdfVEhSRUUgdGltZXMgMTYgZHcgMworUFdfU0VWRU4gdGltZXMgMTYgZHcgNworUFdfRUlHSFQgdGltZXMgMTYgZHcgOAorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCis7IGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorOyBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKzsgb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2F2eDIoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAoYikgKyA4ICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKSAgIChiKSArIDEyICAgIDsgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aAorJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgICAgIChiKSArIDE2ICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgKGIpICsgMjAgICAgOyBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfYXZ4MikKKworRVhUTihqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2F2eDIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaHBpYyAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbZG93bnNhbXBfd2lkdGgoZWJwKV0gIDsgY29sY3RyCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCisKKyAgICB0ZXN0ICAgICAgICBlYXgsIFNJWkVPRl9ZTU1XT1JELTEKKyAgICBqeiAgICAgICAgICBzaG9ydCAuc2tpcAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKy5za2lwOgorICAgIHZweG9yICAgICAgIHltbTAsIHltbTAsIHltbTAgICAgICAgICAgICAgICAgOyB5bW0wPShhbGwgMCdzKQorICAgIHZwY21wZXFiICAgIHhtbTcsIHhtbTcsIHhtbTcKKyAgICB2cHNybGRxICAgICB4bW03LCB4bW03LCAoU0laRU9GX1hNTVdPUkQtMSkgIDsgKGZmIC0tIC0tIC0tIC4uLiAtLSAtLSkgTFNCIGlzIGZmCisgICAgdnBhbmQgICAgICAgeW1tNywgeW1tNywgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisKKyAgICBhZGQgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQtMQorICAgIGFuZCAgICAgICAgIGVheCwgYnl0ZSAtU0laRU9GX1lNTVdPUkQKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisgICAgdnBjbXBlcWIgICAgeG1tNiwgeG1tNiwgeG1tNgorICAgIHZwc2xsZHEgICAgIHhtbTYsIHhtbTYsIChTSVpFT0ZfWE1NV09SRC0xKQorICAgIHZwZXJtMmkxMjggIHltbTYsIHltbTYsIHltbTYsIDEgICAgICAgICAgICAgOyAoLS0tLSAtLS0tIC4uLiAtLS0tIC0tLS0gZmYpIE1TQiBpcyBmZgorICAgIHZwYW5kICAgICAgIHltbTYsIHltbTYsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC51cHNhbXBsZQorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIHZtb3ZkcXUgICAgIHltbTYsIFlNTVdPUkQgW2VzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZwZXJtMmkxMjggIHltbTYsIHltbTAsIHltbTYsIDB4MjAKKyAgICB2cHNsbGRxICAgICB5bW02LCB5bW02LCAxNQorCisudXBzYW1wbGU6CisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdICA7IHltbTE9KCAwICAxICAyIC4uLiAyOSAzMCAzMSkKKworICAgIHZwZXJtMmkxMjggIHltbTIsIHltbTAsIHltbTEsIDB4MjAKKyAgICB2cGFsaWduciAgICB5bW0yLCB5bW0xLCB5bW0yLCAxNSAgICAgICAgICAgIDsgeW1tMj0oLS0gIDAgIDEgLi4uIDI4IDI5IDMwKQorICAgIHZwZXJtMmkxMjggIHltbTQsIHltbTAsIHltbTEsIDB4MDMKKyAgICB2cGFsaWduciAgICB5bW0zLCB5bW00LCB5bW0xLCAxICAgICAgICAgICAgIDsgeW1tMz0oIDEgIDIgIDMgLi4uIDMwIDMxIC0tKQorCisgICAgdnBvciAgICAgICAgeW1tMiwgeW1tMiwgeW1tNyAgICAgICAgICAgICAgICA7IHltbTI9KC0xICAwICAxIC4uLiAyOCAyOSAzMCkKKyAgICB2cG9yICAgICAgICB5bW0zLCB5bW0zLCB5bW02ICAgICAgICAgICAgICAgIDsgeW1tMz0oIDEgIDIgIDMgLi4uIDMwIDMxIDMyKQorCisgICAgdnBzcmxkcSAgICAgeW1tNywgeW1tNCwgKFNJWkVPRl9YTU1XT1JELTEpICA7IHltbTc9KDMxIC0tIC0tIC4uLiAtLSAtLSAtLSkKKworICAgIHZwdW5wY2toYncgIHltbTQsIHltbTEsIHltbTAgICAgICAgICAgICAgICAgOyB5bW00PSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKyAgICB2cHVucGNrbGJ3ICB5bW01LCB5bW0xLCB5bW0wICAgICAgICAgICAgICAgIDsgeW1tNT0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMpCisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tNSwgeW1tNCwgMHgyMCAgICAgICAgICA7IHltbTE9KCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwZXJtMmkxMjggIHltbTQsIHltbTUsIHltbTQsIDB4MzEgICAgICAgICAgOyB5bW00PSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZwdW5wY2toYncgIHltbTUsIHltbTIsIHltbTAgICAgICAgICAgICAgICAgOyB5bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCkKKyAgICB2cHVucGNrbGJ3ICB5bW02LCB5bW0yLCB5bW0wICAgICAgICAgICAgICAgIDsgeW1tNj0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIpCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tNiwgeW1tNSwgMHgyMCAgICAgICAgICA7IHltbTI9KC0xICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorICAgIHZwZXJtMmkxMjggIHltbTUsIHltbTYsIHltbTUsIDB4MzEgICAgICAgICAgOyB5bW01PSgxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCkKKworICAgIHZwdW5wY2toYncgIHltbTYsIHltbTMsIHltbTAgICAgICAgICAgICAgICAgOyB5bW02PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCkKKyAgICB2cHVucGNrbGJ3ICB5bW0wLCB5bW0zLCB5bW0wICAgICAgICAgICAgICAgIDsgeW1tMD0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMjUgMjYgMjcgMjggMjkgMzAgMzEgMzIpCisgICAgdnBlcm0yaTEyOCAgeW1tMywgeW1tMCwgeW1tNiwgMHgyMCAgICAgICAgICA7IHltbTM9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorICAgIHZwZXJtMmkxMjggIHltbTYsIHltbTAsIHltbTYsIDB4MzEgICAgICAgICAgOyB5bW02PSgxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAzMikKKworICAgIHZweG9yICAgICAgIHltbTAsIHltbTAsIHltbTAgICAgICAgICAgICAgICAgOyB5bW0wPShhbGwgMCdzKQorCisgICAgdnBtdWxsdyAgICAgeW1tMSwgeW1tMSwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHZwbXVsbHcgICAgIHltbTQsIHltbTQsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW0yLCBbR09UT0ZGKGVieCxQV19PTkUpXQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIFtHT1RPRkYoZWJ4LFBXX09ORSldCisgICAgdnBhZGR3ICAgICAgeW1tMywgeW1tMywgW0dPVE9GRihlYngsUFdfVFdPKV0KKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW02LCBbR09UT0ZGKGVieCxQV19UV08pXQorCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tMQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIHltbTQKKyAgICB2cHNybHcgICAgICB5bW0yLCB5bW0yLCAyICAgICAgICAgICAgICAgICAgIDsgeW1tMj1PdXRMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQgMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgdnBzcmx3ICAgICAgeW1tNSwgeW1tNSwgMiAgICAgICAgICAgICAgICAgICA7IHltbTU9T3V0SEU9KDMyIDM0IDM2IDM4IDQwIDQyIDQ0IDQ2IDQ4IDUwIDUyIDU0IDU2IDU4IDYwIDYyKQorICAgIHZwYWRkdyAgICAgIHltbTMsIHltbTMsIHltbTEKKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW02LCB5bW00CisgICAgdnBzcmx3ICAgICAgeW1tMywgeW1tMywgMiAgICAgICAgICAgICAgICAgICA7IHltbTM9T3V0TE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1IDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorICAgIHZwc3JsdyAgICAgIHltbTYsIHltbTYsIDIgICAgICAgICAgICAgICAgICAgOyB5bW02PU91dEhPPSgzMyAzNSAzNyAzOSA0MSA0MyA0NSA0NyA0OSA1MSA1MyA1NSA1NyA1OSA2MSA2MykKKworICAgIHZwc2xsdyAgICAgIHltbTMsIHltbTMsIEJZVEVfQklUCisgICAgdnBzbGx3ICAgICAgeW1tNiwgeW1tNiwgQllURV9CSVQKKyAgICB2cG9yICAgICAgICB5bW0yLCB5bW0yLCB5bW0zICAgICAgICAgICAgICAgIDsgeW1tMj1PdXRMPSggMCAgMSAgMiAuLi4gMjkgMzAgMzEpCisgICAgdnBvciAgICAgICAgeW1tNSwgeW1tNSwgeW1tNiAgICAgICAgICAgICAgICA7IHltbTU9T3V0SD0oMzIgMzMgMzQgLi4uIDYxIDYyIDYzKQorCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW0yCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW01CisKKyAgICBzdWIgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIGNtcCAgICAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdnplcm91cHBlcgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfYXZ4MihpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgICAgIChiKSArIDggICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpICAgKGIpICsgMTIgICAgOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgKGIpICsgMTYgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpICAoYikgKyAyMCAgICA7IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1lNTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHltbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgIDQKKyVkZWZpbmUgZ290cHRyICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKmdvdHB0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9hdngyKQorCitFWFROKGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1lNTVdPUkQpICA7IGFsaWduIHRvIDI1NiBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVkeCwgZWF4ICAgICAgICAgICAgICAgIDsgZWR4ID0gb3JpZ2luYWwgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWR4KV0gIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXSAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlZHgpXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgcHVzaCAgICAgICAgZWN4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMShhYm92ZSkKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIxKGJlbG93KQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMAorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMQorCisgICAgdGVzdCAgICAgICAgZWF4LCBTSVpFT0ZfWU1NV09SRC0xCisgICAganogICAgICAgICAgc2hvcnQgLnNraXAKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBtb3YgICAgICAgICBkbCwgSlNBTVBMRSBbZWN4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgbW92ICAgICAgICAgSlNBTVBMRSBbZWN4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgbW92ICAgICAgICAgZGwsIEpTQU1QTEUgW2VieCsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgIG1vdiAgICAgICAgIEpTQU1QTEUgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKyAgICBwb3AgICAgICAgICBlZHgKKy5za2lwOgorICAgIDsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCisKKyAgICB2bW92ZHF1ICAgICB5bW0wLCBZTU1XT1JEIFtlYngrMCpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tMD1yb3dbIDBdWzBdCisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbZWN4KzAqU0laRU9GX1lNTVdPUkRdICA7IHltbTE9cm93Wy0xXVswXQorICAgIHZtb3ZkcXUgICAgIHltbTIsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW0yPXJvd1srMV1bMF0KKworICAgIHB1c2hwaWMgICAgIGVieAorICAgIG1vdnBpYyAgICAgIGVieCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcworCisgICAgdnB4b3IgICAgICAgeW1tMywgeW1tMywgeW1tMyAgICAgICAgOyB5bW0zPShhbGwgMCdzKQorCisgICAgdnB1bnBja2hidyAgeW1tNCwgeW1tMCwgeW1tMyAgICAgICAgOyB5bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnB1bnBja2xidyAgeW1tNSwgeW1tMCwgeW1tMyAgICAgICAgOyB5bW01PXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMpCisgICAgdnBlcm0yaTEyOCAgeW1tMCwgeW1tNSwgeW1tNCwgMHgyMCAgOyB5bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdnBlcm0yaTEyOCAgeW1tNCwgeW1tNSwgeW1tNCwgMHgzMSAgOyB5bW00PXJvd1sgMF0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cHVucGNraGJ3ICB5bW01LCB5bW0xLCB5bW0zICAgICAgICA7IHltbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKyAgICB2cHVucGNrbGJ3ICB5bW02LCB5bW0xLCB5bW0zICAgICAgICA7IHltbTY9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMykKKyAgICB2cGVybTJpMTI4ICB5bW0xLCB5bW02LCB5bW01LCAweDIwICA7IHltbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGVybTJpMTI4ICB5bW01LCB5bW02LCB5bW01LCAweDMxICA7IHltbTU9cm93Wy0xXSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZwdW5wY2toYncgIHltbTYsIHltbTIsIHltbTMgICAgICAgIDsgeW1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorICAgIHZwdW5wY2tsYncgIHltbTMsIHltbTIsIHltbTMgICAgICAgIDsgeW1tMz1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzKQorICAgIHZwZXJtMmkxMjggIHltbTIsIHltbTMsIHltbTYsIDB4MjAgIDsgeW1tMj1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwZXJtMmkxMjggIHltbTYsIHltbTMsIHltbTYsIDB4MzEgIDsgeW1tNj1yb3dbKzFdKDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdnBtdWxsdyAgICAgeW1tMCwgeW1tMCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHZwbXVsbHcgICAgIHltbTQsIHltbTQsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKworICAgIHZwY21wZXFiICAgIHhtbTcsIHhtbTcsIHhtbTcKKyAgICB2cHNybGRxICAgICB4bW03LCB4bW03LCAoU0laRU9GX1hNTVdPUkQtMikgIDsgKGZmZmYgLS0tLSAtLS0tIC4uLiAtLS0tIC0tLS0pIExTQiBpcyBmZmZmCisKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW0wICAgICAgICA7IHltbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIHltbTQgICAgICAgIDsgeW1tNT1JbnQwSD0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tMCAgICAgICAgOyB5bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW02LCB5bW00ICAgICAgICA7IHltbTY9SW50MUg9KDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWR4KzAqU0laRU9GX1lNTVdPUkRdLCB5bW0xICA7IHRlbXBvcmFyaWx5IHNhdmUKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTUgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW0yCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW02CisKKyAgICB2cGFuZCAgICAgICB5bW0xLCB5bW0xLCB5bW03ICAgICAgICA7IHltbTE9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHZwYW5kICAgICAgIHltbTIsIHltbTIsIHltbTcgICAgICAgIDsgeW1tMj0oIDAgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygwKV0sIHltbTEKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTIKKworICAgIHBvcHBpYyAgICAgIGVieAorCisgICAgYWRkICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9ZTU1XT1JELTEKKyAgICBhbmQgICAgICAgICBlYXgsIGJ5dGUgLVNJWkVPRl9ZTU1XT1JECisgICAgY21wICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamEgICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcF9sYXN0OgorICAgIDsgLS0gcHJvY2VzcyB0aGUgbGFzdCBjb2x1bW4gYmxvY2sKKworICAgIHB1c2hwaWMgICAgIGVieAorICAgIG1vdnBpYyAgICAgIGVieCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcworCisgICAgdnBjbXBlcWIgICAgeG1tMSwgeG1tMSwgeG1tMQorICAgIHZwc2xsZHEgICAgIHhtbTEsIHhtbTEsIChTSVpFT0ZfWE1NV09SRC0yKQorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTEsIHltbTEsIDEgICAgICAgICAgICAgOyAoLS0tLSAtLS0tIC4uLiAtLS0tIC0tLS0gZmZmZikgTVNCIGlzIGZmZmYKKworICAgIHZwYW5kICAgICAgIHltbTIsIHltbTEsIFlNTVdPUkQgW2VkaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZwYW5kICAgICAgIHltbTEsIHltbTEsIFlNTVdPUkQgW2VkeCsxKlNJWkVPRl9ZTU1XT1JEXQorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMildLCB5bW0xICAgICAgICAgIDsgeW1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMzEpCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMyldLCB5bW0yICAgICAgICAgIDsgeW1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMzEpCisKKyAgICBqbXAgICAgICAgICBuZWFyIC51cHNhbXBsZQorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIDsgLS0gcHJvY2VzcyB0aGUgbmV4dCBjb2x1bW4gYmxvY2sKKworICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW2VieCsxKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW0wPXJvd1sgMF1bMV0KKyAgICB2bW92ZHF1ICAgICB5bW0xLCBZTU1XT1JEIFtlY3grMSpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tMT1yb3dbLTFdWzFdCisgICAgdm1vdmRxdSAgICAgeW1tMiwgWU1NV09SRCBbZXNpKzEqU0laRU9GX1lNTVdPUkRdICA7IHltbTI9cm93WysxXVsxXQorCisgICAgcHVzaHBpYyAgICAgZWJ4CisgICAgbW92cGljICAgICAgZWJ4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzCisKKyAgICB2cHhvciAgICAgICB5bW0zLCB5bW0zLCB5bW0zICAgICAgICA7IHltbTM9KGFsbCAwJ3MpCisKKyAgICB2cHVucGNraGJ3ICB5bW00LCB5bW0wLCB5bW0zICAgICAgICA7IHltbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKyAgICB2cHVucGNrbGJ3ICB5bW01LCB5bW0wLCB5bW0zICAgICAgICA7IHltbTU9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMykKKyAgICB2cGVybTJpMTI4ICB5bW0wLCB5bW01LCB5bW00LCAweDIwICA7IHltbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW01LCB5bW00LCAweDMxICA7IHltbTQ9cm93WyAwXSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZwdW5wY2toYncgIHltbTUsIHltbTEsIHltbTMgICAgICAgIDsgeW1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorICAgIHZwdW5wY2tsYncgIHltbTYsIHltbTEsIHltbTMgICAgICAgIDsgeW1tNj1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzKQorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTYsIHltbTUsIDB4MjAgIDsgeW1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwZXJtMmkxMjggIHltbTUsIHltbTYsIHltbTUsIDB4MzEgIDsgeW1tNT1yb3dbLTFdKDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdnB1bnBja2hidyAgeW1tNiwgeW1tMiwgeW1tMyAgICAgICAgOyB5bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnB1bnBja2xidyAgeW1tNywgeW1tMiwgeW1tMyAgICAgICAgOyB5bW03PXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMpCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tNywgeW1tNiwgMHgyMCAgOyB5bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdnBlcm0yaTEyOCAgeW1tNiwgeW1tNywgeW1tNiwgMHgzMSAgOyB5bW02PXJvd1srMV0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cG11bGx3ICAgICB5bW0wLCB5bW0wLCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgdnBtdWxsdyAgICAgeW1tNCwgeW1tNCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tMCAgICAgICAgOyB5bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCB5bW00ICAgICAgICA7IHltbTU9SW50MEg9KDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTAgICAgICAgIDsgeW1tMj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNiwgeW1tNCAgICAgICAgOyB5bW02PUludDFIPSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkeCsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMSAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbZWR4KzMqU0laRU9GX1lNTVdPUkRdLCB5bW01ICA7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW2VkaSszKlNJWkVPRl9ZTU1XT1JEXSwgeW1tNgorCisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tMywgeW1tMSwgMHgyMAorICAgIHZwc2xsZHEgICAgIHltbTEsIHltbTEsIDE0ICAgICAgICAgIDsgeW1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tMywgeW1tMiwgMHgyMAorICAgIHZwc2xsZHEgICAgIHltbTIsIHltbTIsIDE0ICAgICAgICAgIDsgeW1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCisKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygyKV0sIHltbTEKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygzKV0sIHltbTIKKworLnVwc2FtcGxlOgorICAgIDsgLS0gcHJvY2VzcyB0aGUgdXBwZXIgcm93CisKKyAgICB2bW92ZHF1ICAgICB5bW03LCBZTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tNz1JbnQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdm1vdmRxdSAgICAgeW1tMywgWU1NV09SRCBbZWR4KzEqU0laRU9GX1lNTVdPUkRdICA7IHltbTM9SW50MEg9KDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdnB4b3IgICAgICAgeW1tMSwgeW1tMSwgeW1tMSAgICAgICAgOyB5bW0xPShhbGwgMCdzKQorCisgICAgdnBlcm0yaTEyOCAgeW1tMCwgeW1tMSwgeW1tNywgMHgwMworICAgIHZwYWxpZ25yICAgIHltbTAsIHltbTAsIHltbTcsIDIgICAgIDsgeW1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisgICAgdnBlcm0yaTEyOCAgeW1tNCwgeW1tMSwgeW1tMywgMHgyMAorICAgIHZwc2xsZHEgICAgIHltbTQsIHltbTQsIDE0ICAgICAgICAgIDsgeW1tND0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTYpCisKKyAgICB2cGVybTJpMTI4ICB5bW01LCB5bW0xLCB5bW03LCAweDAzCisgICAgdnBzcmxkcSAgICAgeW1tNSwgeW1tNSwgMTQgICAgICAgICAgOyB5bW01PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICB2cGVybTJpMTI4ICB5bW02LCB5bW0xLCB5bW0zLCAweDIwCisgICAgdnBhbGlnbnIgICAgeW1tNiwgeW1tMywgeW1tNiwgMTQgICAgOyB5bW02PSgtLSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCkKKworICAgIHZwb3IgICAgICAgIHltbTAsIHltbTAsIHltbTQgICAgICAgIDsgeW1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisgICAgdnBvciAgICAgICAgeW1tNSwgeW1tNSwgeW1tNiAgICAgICAgOyB5bW01PSgxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCkKKworICAgIHZwZXJtMmkxMjggIHltbTIsIHltbTEsIHltbTMsIDB4MDMKKyAgICB2cGFsaWduciAgICB5bW0yLCB5bW0yLCB5bW0zLCAyICAgICA7IHltbTI9KDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIC0tKQorICAgIHZwZXJtMmkxMjggIHltbTQsIHltbTEsIHltbTMsIDB4MDMKKyAgICB2cHNybGRxICAgICB5bW00LCB5bW00LCAxNCAgICAgICAgICA7IHltbTQ9KDMxIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTEsIHltbTcsIDB4MjAKKyAgICB2cGFsaWduciAgICB5bW0xLCB5bW03LCB5bW0xLCAxNCAgICA7IHltbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisgICAgdnBvciAgICAgICAgeW1tMSwgeW1tMSwgWU1NV09SRCBbd2soMCldICA7IHltbTE9KC0xICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorICAgIHZwb3IgICAgICAgIHltbTIsIHltbTIsIFlNTVdPUkQgW3drKDIpXSAgOyB5bW0yPSgxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAzMikKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDApXSwgeW1tNAorCisgICAgdnBtdWxsdyAgICAgeW1tNywgeW1tNywgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHZwbXVsbHcgICAgIHltbTMsIHltbTMsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCBbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgW0dPVE9GRihlYngsUFdfRUlHSFQpXQorICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKyAgICB2cGFkZHcgICAgICB5bW0yLCBbR09UT0ZGKGVieCxQV19TRVZFTildCisKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgeW1tMworICAgIHZwc3JsdyAgICAgIHltbTEsIHltbTEsIDQgICAgICAgICAgIDsgeW1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0IDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgIHZwc3JsdyAgICAgIHltbTUsIHltbTUsIDQgICAgICAgICAgIDsgeW1tNT1PdXQwSEU9KDMyIDM0IDM2IDM4IDQwIDQyIDQ0IDQ2IDQ4IDUwIDUyIDU0IDU2IDU4IDYwIDYyKQorICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW0yLCB5bW0zCisgICAgdnBzcmx3ICAgICAgeW1tMCwgeW1tMCwgNCAgICAgICAgICAgOyB5bW0wPU91dDBMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUgMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisgICAgdnBzcmx3ICAgICAgeW1tMiwgeW1tMiwgNCAgICAgICAgICAgOyB5bW0yPU91dDBITz0oMzMgMzUgMzcgMzkgNDEgNDMgNDUgNDcgNDkgNTEgNTMgNTUgNTcgNTkgNjEgNjMpCisKKyAgICB2cHNsbHcgICAgICB5bW0wLCB5bW0wLCBCWVRFX0JJVAorICAgIHZwc2xsdyAgICAgIHltbTIsIHltbTIsIEJZVEVfQklUCisgICAgdnBvciAgICAgICAgeW1tMSwgeW1tMSwgeW1tMCAgICAgICAgOyB5bW0xPU91dDBMPSggMCAgMSAgMiAuLi4gMjkgMzAgMzEpCisgICAgdnBvciAgICAgICAgeW1tNSwgeW1tNSwgeW1tMiAgICAgICAgOyB5bW01PU91dDBIPSgzMiAzMyAzNCAuLi4gNjEgNjIgNjMpCisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTUKKworICAgIDsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisKKyAgICB2bW92ZHF1ICAgICB5bW02LCBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tNj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdm1vdmRxdSAgICAgeW1tNCwgWU1NV09SRCBbZWRpKzEqU0laRU9GX1lNTVdPUkRdICA7IHltbTQ9SW50MUg9KDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdnB4b3IgICAgICAgeW1tMSwgeW1tMSwgeW1tMSAgICAgICAgOyB5bW0xPShhbGwgMCdzKQorCisgICAgdnBlcm0yaTEyOCAgeW1tNywgeW1tMSwgeW1tNiwgMHgwMworICAgIHZwYWxpZ25yICAgIHltbTcsIHltbTcsIHltbTYsIDIgICAgIDsgeW1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisgICAgdnBlcm0yaTEyOCAgeW1tMywgeW1tMSwgeW1tNCwgMHgyMAorICAgIHZwc2xsZHEgICAgIHltbTMsIHltbTMsIDE0ICAgICAgICAgIDsgeW1tMz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTYpCisKKyAgICB2cGVybTJpMTI4ICB5bW0wLCB5bW0xLCB5bW02LCAweDAzCisgICAgdnBzcmxkcSAgICAgeW1tMCwgeW1tMCwgMTQgICAgICAgICAgOyB5bW0wPSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICB2cGVybTJpMTI4ICB5bW0yLCB5bW0xLCB5bW00LCAweDIwCisgICAgdnBhbGlnbnIgICAgeW1tMiwgeW1tNCwgeW1tMiwgMTQgICAgOyB5bW0yPSgtLSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCkKKworICAgIHZwb3IgICAgICAgIHltbTcsIHltbTcsIHltbTMgICAgICAgIDsgeW1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisgICAgdnBvciAgICAgICAgeW1tMCwgeW1tMCwgeW1tMiAgICAgICAgOyB5bW0wPSgxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCkKKworICAgIHZwZXJtMmkxMjggIHltbTUsIHltbTEsIHltbTQsIDB4MDMKKyAgICB2cGFsaWduciAgICB5bW01LCB5bW01LCB5bW00LCAyICAgICA7IHltbTU9KDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIC0tKQorICAgIHZwZXJtMmkxMjggIHltbTMsIHltbTEsIHltbTQsIDB4MDMKKyAgICB2cHNybGRxICAgICB5bW0zLCB5bW0zLCAxNCAgICAgICAgICA7IHltbTM9KDMxIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTEsIHltbTYsIDB4MjAKKyAgICB2cGFsaWduciAgICB5bW0xLCB5bW02LCB5bW0xLCAxNCAgICA7IHltbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisgICAgdnBvciAgICAgICAgeW1tMSwgeW1tMSwgWU1NV09SRCBbd2soMSldICA7IHltbTE9KC0xICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorICAgIHZwb3IgICAgICAgIHltbTUsIHltbTUsIFlNTVdPUkQgW3drKDMpXSAgOyB5bW01PSgxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAzMikKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDEpXSwgeW1tMworCisgICAgdnBtdWxsdyAgICAgeW1tNiwgeW1tNiwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHZwbXVsbHcgICAgIHltbTQsIHltbTQsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCBbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgW0dPVE9GRihlYngsUFdfRUlHSFQpXQorICAgIHZwYWRkdyAgICAgIHltbTcsIHltbTcsIFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCBbR09UT0ZGKGVieCxQV19TRVZFTildCisKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW02CisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tNAorICAgIHZwc3JsdyAgICAgIHltbTEsIHltbTEsIDQgICAgICAgICAgIDsgeW1tMT1PdXQxTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0IDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgIHZwc3JsdyAgICAgIHltbTAsIHltbTAsIDQgICAgICAgICAgIDsgeW1tMD1PdXQxSEU9KDMyIDM0IDM2IDM4IDQwIDQyIDQ0IDQ2IDQ4IDUwIDUyIDU0IDU2IDU4IDYwIDYyKQorICAgIHZwYWRkdyAgICAgIHltbTcsIHltbTcsIHltbTYKKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCB5bW00CisgICAgdnBzcmx3ICAgICAgeW1tNywgeW1tNywgNCAgICAgICAgICAgOyB5bW03PU91dDFMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUgMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisgICAgdnBzcmx3ICAgICAgeW1tNSwgeW1tNSwgNCAgICAgICAgICAgOyB5bW01PU91dDFITz0oMzMgMzUgMzcgMzkgNDEgNDMgNDUgNDcgNDkgNTEgNTMgNTUgNTcgNTkgNjEgNjMpCisKKyAgICB2cHNsbHcgICAgICB5bW03LCB5bW03LCBCWVRFX0JJVAorICAgIHZwc2xsdyAgICAgIHltbTUsIHltbTUsIEJZVEVfQklUCisgICAgdnBvciAgICAgICAgeW1tMSwgeW1tMSwgeW1tNyAgICAgICAgOyB5bW0xPU91dDFMPSggMCAgMSAgMiAuLi4gMjkgMzAgMzEpCisgICAgdnBvciAgICAgICAgeW1tMCwgeW1tMCwgeW1tNSAgICAgICAgOyB5bW0wPU91dDFIPSgzMiAzMyAzNCAuLi4gNjEgNjIgNjMpCisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKworICAgIHBvcHBpYyAgICAgIGVieAorCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgYWRkICAgICAgICAgZWN4LCBieXRlIDEqU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxKGFib3ZlKQorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSAxKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMAorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMShiZWxvdykKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyMQorICAgIGNtcCAgICAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWN4CisgICAgcG9wICAgICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdnplcm91cHBlcgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV91cHNhbXBsZV9hdngyKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAoYikgKyA4ICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgICAgIChiKSArIDEyICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgICAgICAoYikgKyAxNiAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgIChiKSArIDIwICAgIDsgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYxX3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorOyAgIHB1c2ggICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgbW92ICAgICAgICAgZWR4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgKFNJWkVPRl9ZTU1XT1JELTEpCisgICAgYW5kICAgICAgICAgZWR4LCAtU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCisgICAgbW92ICAgICAgICAgZWF4LCBlZHggICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYSAgICAgICAgICBuZWFyIC5hYm92ZV8xNgorCisgICAgdm1vdmRxdSAgICAgeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdnB1bnBja2hidyAgeG1tMSwgeG1tMCwgeG1tMAorICAgIHZwdW5wY2tsYncgIHhtbTAsIHhtbTAsIHhtbTAKKworICAgIHZtb3ZkcXUgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorICAgIHZtb3ZkcXUgICAgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorCisgICAgam1wICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworLmFib3ZlXzE2OgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorCisgICAgdnBlcm1xICAgICAgeW1tMCwgeW1tMCwgMHhkOAorICAgIHZwdW5wY2toYncgIHltbTEsIHltbTAsIHltbTAKKyAgICB2cHVucGNrbGJ3ICB5bW0wLCB5bW0wLCB5bW0wCisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKworICAgIHN1YiAgICAgICAgIGVheCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgICA7IGlucHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgam1wICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2RhdGEKKyAgICBkZWMgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIHNob3J0IC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdnplcm91cHBlcgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml91cHNhbXBsZV9hdngyKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAoYikgKyA4ICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgICAgIChiKSArIDEyICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgICAgICAoYikgKyAxNiAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgIChiKSArIDIwICAgIDsgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIG1vdiAgICAgICAgIGVkeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVicCldCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIChTSVpFT0ZfWU1NV09SRC0xKQorICAgIGFuZCAgICAgICAgIGVkeCwgLVNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIGVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtlZGldICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICAgICAgICAgICAgICAgICA7IGlucHRyCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyBvdXRwdHIwCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXSAgOyBvdXRwdHIxCisgICAgbW92ICAgICAgICAgZWF4LCBlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuYWJvdmVfMTYKKworICAgIHZtb3ZkcXUgICAgIHhtbTAsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIHZwdW5wY2toYncgIHhtbTEsIHhtbTAsIHhtbTAKKyAgICB2cHVucGNrbGJ3ICB4bW0wLCB4bW0wLCB4bW0wCisKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtlYngrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtlYngrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworICAgIGptcCAgICAgICAgIG5lYXIgLm5leHRyb3cKKworLmFib3ZlXzE2OgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW2VzaSswKlNJWkVPRl9ZTU1XT1JEXQorCisgICAgdnBlcm1xICAgICAgeW1tMCwgeW1tMCwgMHhkOAorICAgIHZwdW5wY2toYncgIHltbTEsIHltbTAsIHltbTAKKyAgICB2cHVucGNrbGJ3ICB5bW0wLCB5bW0wLCB5bW0wCisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlYngrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlYngrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKworICAgIHN1YiAgICAgICAgIGVheCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVieCwgMipTSVpFT0ZfWU1NV09SRCAgICAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgZWRpLCAyKlNJWkVPRl9ZTU1XT1JEICAgICA7IG91dHB0cjEKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5uZXh0cm93OgorICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2RhdGEKKyAgICBzdWIgICAgICAgICBlY3gsIGJ5dGUgMiAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisucmV0dXJuOgorICAgIHZ6ZXJvdXBwZXIKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZHNhbXBsZS1tbXguYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkc2FtcGxlLW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MTBmYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZHNhbXBsZS1tbXguYXNtCkBAIC0wLDAgKzEsNzMzIEBACis7Cis7IGpkc2FtcGxlLmFzbSAtIHVwc2FtcGxpbmcgKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX21teCkKKworRVhUTihqY29uc3RfZmFuY3lfdXBzYW1wbGVfbW14KToKKworUFdfT05FICAgdGltZXMgNCBkdyAxCitQV19UV08gICB0aW1lcyA0IGR3IDIKK1BXX1RIUkVFIHRpbWVzIDQgZHcgMworUFdfU0VWRU4gdGltZXMgNCBkdyA3CitQV19FSUdIVCB0aW1lcyA0IGR3IDgKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOworOyBUaGUgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBwaXhlbCBjZW50ZXJzLAorOyBhbHNvIGtub3duIGFzIGEgInRyaWFuZ2xlIGZpbHRlciIuICBUaGlzIGlzIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4KKzsgc3BlZWQgYW5kIHZpc3VhbCBxdWFsaXR5LiAgVGhlIGNlbnRlcnMgb2YgdGhlIG91dHB1dCBwaXhlbHMgYXJlIDEvNCBhbmQgMy80Cis7IG9mIHRoZSB3YXkgYmV0d2VlbiBpbnB1dCBwaXhlbCBjZW50ZXJzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXgoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAoYikgKyA4ICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKSAgIChiKSArIDEyICAgIDsgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aAorJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgICAgIChiKSArIDE2ICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgKGIpICsgMjAgICAgOyBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KQorCitFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW2Rvd25zYW1wX3dpZHRoKGVicCldICA7IGNvbGN0cgorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIGVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtlZGldICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICBwdXNoICAgICAgICBlZGkKKyAgICBwdXNoICAgICAgICBlc2kKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cgorCisgICAgdGVzdCAgICAgICAgZWF4LCBTSVpFT0ZfTU1XT1JELTEKKyAgICBqeiAgICAgICAgICBzaG9ydCAuc2tpcAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKy5za2lwOgorICAgIHB4b3IgICAgICAgIG1tMCwgbW0wICAgICAgICAgICAgICAgIDsgbW0wPShhbGwgMCdzKQorICAgIHBjbXBlcWIgICAgIG1tNywgbW03CisgICAgcHNybHEgICAgICAgbW03LCAoU0laRU9GX01NV09SRC0xKSpCWVRFX0JJVAorICAgIHBhbmQgICAgICAgIG1tNywgIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKworICAgIGFkZCAgICAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JELTEKKyAgICBhbmQgICAgICAgICBlYXgsIGJ5dGUgLVNJWkVPRl9NTVdPUkQKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGphICAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3BfbGFzdDoKKyAgICBwY21wZXFiICAgICBtbTYsIG1tNgorICAgIHBzbGxxICAgICAgIG1tNiwgKFNJWkVPRl9NTVdPUkQtMSkqQllURV9CSVQKKyAgICBwYW5kICAgICAgICBtbTYsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAudXBzYW1wbGUKKyAgICBhbGlnbnggICAgICAxNiwgNworCisuY29sdW1ubG9vcDoKKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICBwc2xscSAgICAgICBtbTYsIChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCisKKy51cHNhbXBsZToKKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMQorICAgIG1vdnEgICAgICAgIG1tMywgbW0xICAgICAgICAgICAgICAgIDsgbW0xPSggMCAxIDIgMyA0IDUgNiA3KQorICAgIHBzbGxxICAgICAgIG1tMiwgQllURV9CSVQgICAgICAgICAgIDsgbW0yPSggLSAwIDEgMiAzIDQgNSA2KQorICAgIHBzcmxxICAgICAgIG1tMywgQllURV9CSVQgICAgICAgICAgIDsgbW0zPSggMSAyIDMgNCA1IDYgNyAtKQorCisgICAgcG9yICAgICAgICAgbW0yLCBtbTcgICAgICAgICAgICAgICAgOyBtbTI9KC0xIDAgMSAyIDMgNCA1IDYpCisgICAgcG9yICAgICAgICAgbW0zLCBtbTYgICAgICAgICAgICAgICAgOyBtbTM9KCAxIDIgMyA0IDUgNiA3IDgpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMQorICAgIHBzcmxxICAgICAgIG1tNywgKFNJWkVPRl9NTVdPUkQtMSkqQllURV9CSVQgIDsgbW03PSggNyAtIC0gLSAtIC0gLSAtKQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTEKKyAgICBwdW5wY2tsYncgICBtbTEsIG1tMCAgICAgICAgICAgICAgICA7IG1tMT0oIDAgMSAyIDMpCisgICAgcHVucGNraGJ3ICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyBtbTQ9KCA0IDUgNiA3KQorICAgIG1vdnEgICAgICAgIG1tNSwgbW0yCisgICAgcHVucGNrbGJ3ICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTI9KC0xIDAgMSAyKQorICAgIHB1bnBja2hidyAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW01PSggMyA0IDUgNikKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMworICAgIHB1bnBja2xidyAgIG1tMywgbW0wICAgICAgICAgICAgICAgIDsgbW0zPSggMSAyIDMgNCkKKyAgICBwdW5wY2toYncgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj0oIDUgNiA3IDgpCisKKyAgICBwbXVsbHcgICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICBwbXVsbHcgICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICBwYWRkdyAgICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX09ORSldCisgICAgcGFkZHcgICAgICAgbW01LCBbR09UT0ZGKGVieCxQV19PTkUpXQorICAgIHBhZGR3ICAgICAgIG1tMywgW0dPVE9GRihlYngsUFdfVFdPKV0KKyAgICBwYWRkdyAgICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBXX1RXTyldCisKKyAgICBwYWRkdyAgICAgICBtbTIsIG1tMQorICAgIHBhZGR3ICAgICAgIG1tNSwgbW00CisgICAgcHNybHcgICAgICAgbW0yLCAyICAgICAgICAgICAgICAgICAgOyBtbTI9T3V0TEU9KCAwICAyICA0ICA2KQorICAgIHBzcmx3ICAgICAgIG1tNSwgMiAgICAgICAgICAgICAgICAgIDsgbW01PU91dEhFPSggOCAxMCAxMiAxNCkKKyAgICBwYWRkdyAgICAgICBtbTMsIG1tMQorICAgIHBhZGR3ICAgICAgIG1tNiwgbW00CisgICAgcHNybHcgICAgICAgbW0zLCAyICAgICAgICAgICAgICAgICAgOyBtbTM9T3V0TE89KCAxICAzICA1ICA3KQorICAgIHBzcmx3ICAgICAgIG1tNiwgMiAgICAgICAgICAgICAgICAgIDsgbW02PU91dEhPPSggOSAxMSAxMyAxNSkKKworICAgIHBzbGx3ICAgICAgIG1tMywgQllURV9CSVQKKyAgICBwc2xsdyAgICAgICBtbTYsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9T3V0TD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcG9yICAgICAgICAgbW01LCBtbTYgICAgICAgICAgICAgICAgOyBtbTU9T3V0SD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKKworICAgIHN1YiAgICAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDEqU0laRU9GX01NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQgIDsgb3V0cHRyCisgICAgY21wICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBqYSAgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wX2xhc3QKKworICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgZW1tcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wcGljICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7IEFnYWluIGEgdHJpYW5nbGUgZmlsdGVyOyBzZWUgY29tbWVudHMgZm9yIGgydjEgY2FzZSwgYWJvdmUuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgICAgIChiKSArIDggICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpICAgKGIpICsgMTIgICAgOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgKGIpICsgMTYgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpICAoYikgKyAyMCAgICA7IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgIDQKKyVkZWZpbmUgZ290cHRyICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKmdvdHB0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbXgpCisKK0VYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgIDsgYWxpZ24gdG8gNjQgYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVkeCwgZWF4ICAgICAgICAgICAgICAgIDsgZWR4ID0gb3JpZ2luYWwgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWR4KV0gIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXSAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlZHgpXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgcHVzaCAgICAgICAgZWN4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMShhYm92ZSkKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIxKGJlbG93KQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMAorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMQorCisgICAgdGVzdCAgICAgICAgZWF4LCBTSVpFT0ZfTU1XT1JELTEKKyAgICBqeiAgICAgICAgICBzaG9ydCAuc2tpcAorICAgIHB1c2ggICAgICAgIGVkeAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtlY3grKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtlY3grZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKyAgICBtb3YgICAgICAgICBkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgbW92ICAgICAgICAgSlNBTVBMRSBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgbW92ICAgICAgICAgZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgIG1vdiAgICAgICAgIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQorICAgIHBvcCAgICAgICAgIGVkeAorLnNraXA6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtlYngrMCpTSVpFT0ZfTU1XT1JEXSAgOyBtbTA9cm93WyAwXVswXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtlY3grMCpTSVpFT0ZfTU1XT1JEXSAgOyBtbTE9cm93Wy0xXVswXQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXSAgOyBtbTI9cm93WysxXVswXQorCisgICAgcHVzaHBpYyAgICAgZWJ4CisgICAgbW92cGljICAgICAgZWJ4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzCisKKyAgICBweG9yICAgICAgICBtbTMsIG1tMyAgICAgICAgICAgICAgICA7IG1tMz0oYWxsIDAncykKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMAorICAgIHB1bnBja2xidyAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPXJvd1sgMF1bMF0oIDAgMSAyIDMpCisgICAgcHVucGNraGJ3ICAgbW00LCBtbTMgICAgICAgICAgICAgICAgOyBtbTQ9cm93WyAwXVswXSggNCA1IDYgNykKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMQorICAgIHB1bnBja2xidyAgIG1tMSwgbW0zICAgICAgICAgICAgICAgIDsgbW0xPXJvd1stMV1bMF0oIDAgMSAyIDMpCisgICAgcHVucGNraGJ3ICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9cm93Wy0xXVswXSggNCA1IDYgNykKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMgorICAgIHB1bnBja2xidyAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPXJvd1srMV1bMF0oIDAgMSAyIDMpCisgICAgcHVucGNraGJ3ICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9cm93WysxXVswXSggNCA1IDYgNykKKworICAgIHBtdWxsdyAgICAgIG1tMCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHBtdWxsdyAgICAgIG1tNCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisgICAgcGNtcGVxYiAgICAgbW03LCBtbTcKKyAgICBwc3JscSAgICAgICBtbTcsIChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCisKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tMCAgICAgICAgICAgICAgICA7IG1tMT1JbnQwTD0oIDAgMSAyIDMpCisgICAgcGFkZHcgICAgICAgbW01LCBtbTQgICAgICAgICAgICAgICAgOyBtbTU9SW50MEg9KCA0IDUgNiA3KQorICAgIHBhZGR3ICAgICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPUludDFMPSggMCAxIDIgMykKKyAgICBwYWRkdyAgICAgICBtbTYsIG1tNCAgICAgICAgICAgICAgICA7IG1tNj1JbnQxSD0oIDQgNSA2IDcpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdLCBtbTEgIDsgdGVtcG9yYXJpbHkgc2F2ZQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWR4KzEqU0laRU9GX01NV09SRF0sIG1tNSAgOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTYKKworICAgIHBhbmQgICAgICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgbW0xPSggMCAtIC0gLSkKKyAgICBwYW5kICAgICAgICBtbTIsIG1tNyAgICAgICAgICAgICAgICA7IG1tMj0oIDAgLSAtIC0pCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMgorCisgICAgcG9wcGljICAgICAgZWJ4CisKKyAgICBhZGQgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX01NV09SRC0xCisgICAgYW5kICAgICAgICAgZWF4LCBieXRlIC1TSVpFT0ZfTU1XT1JECisgICAgY21wICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jaworCisgICAgcHVzaHBpYyAgICAgZWJ4CisgICAgbW92cGljICAgICAgZWJ4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzCisKKyAgICBwY21wZXFiICAgICBtbTEsIG1tMQorICAgIHBzbGxxICAgICAgIG1tMSwgKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMQorCisgICAgcGFuZCAgICAgICAgbW0xLCBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdICA7IG1tMT0oIC0gLSAtIDcpCisgICAgcGFuZCAgICAgICAgbW0yLCBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdICA7IG1tMj0oIC0gLSAtIDcpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDIpXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygzKV0sIG1tMgorCisgICAgam1wICAgICAgICAgc2hvcnQgLnVwc2FtcGxlCisgICAgYWxpZ254ICAgICAgMTYsIDcKKworLmNvbHVtbmxvb3A6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW2VieCsxKlNJWkVPRl9NTVdPUkRdICA7IG1tMD1yb3dbIDBdWzFdCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW2VjeCsxKlNJWkVPRl9NTVdPUkRdICA7IG1tMT1yb3dbLTFdWzFdCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdICA7IG1tMj1yb3dbKzFdWzFdCisKKyAgICBwdXNocGljICAgICBlYngKKyAgICBtb3ZwaWMgICAgICBlYngsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MKKworICAgIHB4b3IgICAgICAgIG1tMywgbW0zICAgICAgICAgICAgICAgIDsgbW0zPShhbGwgMCdzKQorICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgcHVucGNrbGJ3ICAgbW0wLCBtbTMgICAgICAgICAgICAgICAgOyBtbTA9cm93WyAwXVsxXSggMCAxIDIgMykKKyAgICBwdW5wY2toYncgICBtbTQsIG1tMyAgICAgICAgICAgICAgICA7IG1tND1yb3dbIDBdWzFdKCA0IDUgNiA3KQorICAgIG1vdnEgICAgICAgIG1tNSwgbW0xCisgICAgcHVucGNrbGJ3ICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9cm93Wy0xXVsxXSggMCAxIDIgMykKKyAgICBwdW5wY2toYncgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT1yb3dbLTFdWzFdKCA0IDUgNiA3KQorICAgIG1vdnEgICAgICAgIG1tNiwgbW0yCisgICAgcHVucGNrbGJ3ICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9cm93WysxXVsxXSggMCAxIDIgMykKKyAgICBwdW5wY2toYncgICBtbTYsIG1tMyAgICAgICAgICAgICAgICA7IG1tNj1yb3dbKzFdWzFdKCA0IDUgNiA3KQorCisgICAgcG11bGx3ICAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgcG11bGx3ICAgICAgbW00LCBbR09UT0ZGKGVieCxQV19USFJFRSldCisKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tMCAgICAgICAgICAgICAgICA7IG1tMT1JbnQwTD0oIDAgMSAyIDMpCisgICAgcGFkZHcgICAgICAgbW01LCBtbTQgICAgICAgICAgICAgICAgOyBtbTU9SW50MEg9KCA0IDUgNiA3KQorICAgIHBhZGR3ICAgICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPUludDFMPSggMCAxIDIgMykKKyAgICBwYWRkdyAgICAgICBtbTYsIG1tNCAgICAgICAgICAgICAgICA7IG1tNj1JbnQxSD0oIDQgNSA2IDcpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeCsyKlNJWkVPRl9NTVdPUkRdLCBtbTEgIDsgdGVtcG9yYXJpbHkgc2F2ZQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWR4KzMqU0laRU9GX01NV09SRF0sIG1tNSAgOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbTYKKworICAgIHBzbGxxICAgICAgIG1tMSwgKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQgIDsgbW0xPSggLSAtIC0gMCkKKyAgICBwc2xscSAgICAgICBtbTIsIChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUICA7IG1tMj0oIC0gLSAtIDApCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDIpXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygzKV0sIG1tMgorCisudXBzYW1wbGU6CisgICAgOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKworICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXSAgOyBtbTc9SW50MEw9KCAwIDEgMiAzKQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXSAgOyBtbTM9SW50MEg9KCA0IDUgNiA3KQorCisgICAgbW92cSAgICAgICAgbW0wLCBtbTcKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMworICAgIHBzcmxxICAgICAgIG1tMCwgMipCWVRFX0JJVCAgICAgICAgICAgICAgICAgIDsgbW0wPSggMSAyIDMgLSkKKyAgICBwc2xscSAgICAgICBtbTQsIChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUICA7IG1tND0oIC0gLSAtIDQpCisgICAgbW92cSAgICAgICAgbW01LCBtbTcKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMworICAgIHBzcmxxICAgICAgIG1tNSwgKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQgIDsgbW01PSggMyAtIC0gLSkKKyAgICBwc2xscSAgICAgICBtbTYsIDIqQllURV9CSVQgICAgICAgICAgICAgICAgICA7IG1tNj0oIC0gNCA1IDYpCisKKyAgICBwb3IgICAgICAgICBtbTAsIG1tNCAgICAgICAgICAgICAgICAgICAgICAgICA7IG1tMD0oIDEgMiAzIDQpCisgICAgcG9yICAgICAgICAgbW01LCBtbTYgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbTU9KCAzIDQgNSA2KQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTcKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMworICAgIHBzbGxxICAgICAgIG1tMSwgMipCWVRFX0JJVCAgICAgICAgICAgICAgICAgIDsgbW0xPSggLSAwIDEgMikKKyAgICBwc3JscSAgICAgICBtbTIsIDIqQllURV9CSVQgICAgICAgICAgICAgICAgICA7IG1tMj0oIDUgNiA3IC0pCisgICAgbW92cSAgICAgICAgbW00LCBtbTMKKyAgICBwc3JscSAgICAgICBtbTQsIChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUICA7IG1tND0oIDcgLSAtIC0pCisKKyAgICBwb3IgICAgICAgICBtbTEsIE1NV09SRCBbd2soMCldICAgICAgICAgICAgICA7IG1tMT0oLTEgMCAxIDIpCisgICAgcG9yICAgICAgICAgbW0yLCBNTVdPUkQgW3drKDIpXSAgICAgICAgICAgICAgOyBtbTI9KCA1IDYgNyA4KQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNAorCisgICAgcG11bGx3ICAgICAgbW03LCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgcG11bGx3ICAgICAgbW0zLCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgcGFkZHcgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgcGFkZHcgICAgICAgbW01LCBbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgcGFkZHcgICAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19TRVZFTildCisgICAgcGFkZHcgICAgICAgbW0yLCBbR09UT0ZGKGVieCxQV19TRVZFTildCisKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNworICAgIHBhZGR3ICAgICAgIG1tNSwgbW0zCisgICAgcHNybHcgICAgICAgbW0xLCA0ICAgICAgICAgICAgICAgICAgOyBtbTE9T3V0MExFPSggMCAgMiAgNCAgNikKKyAgICBwc3JsdyAgICAgICBtbTUsIDQgICAgICAgICAgICAgICAgICA7IG1tNT1PdXQwSEU9KCA4IDEwIDEyIDE0KQorICAgIHBhZGR3ICAgICAgIG1tMCwgbW03CisgICAgcGFkZHcgICAgICAgbW0yLCBtbTMKKyAgICBwc3JsdyAgICAgICBtbTAsIDQgICAgICAgICAgICAgICAgICA7IG1tMD1PdXQwTE89KCAxICAzICA1ICA3KQorICAgIHBzcmx3ICAgICAgIG1tMiwgNCAgICAgICAgICAgICAgICAgIDsgbW0yPU91dDBITz0oIDkgMTEgMTMgMTUpCisKKyAgICBwc2xsdyAgICAgICBtbTAsIEJZVEVfQklUCisgICAgcHNsbHcgICAgICAgbW0yLCBCWVRFX0JJVAorICAgIHBvciAgICAgICAgIG1tMSwgbW0wICAgICAgICAgICAgICAgIDsgbW0xPU91dDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwb3IgICAgICAgICBtbTUsIG1tMiAgICAgICAgICAgICAgICA7IG1tNT1PdXQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKKworICAgIDsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisKKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0gIDsgbW02PUludDFMPSggMCAxIDIgMykKKyAgICBtb3ZxICAgICAgICBtbTQsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0gIDsgbW00PUludDFIPSggNCA1IDYgNykKKworICAgIG1vdnEgICAgICAgIG1tNywgbW02CisgICAgbW92cSAgICAgICAgbW0zLCBtbTQKKyAgICBwc3JscSAgICAgICBtbTcsIDIqQllURV9CSVQgICAgICAgICAgICAgICAgICA7IG1tNz0oIDEgMiAzIC0pCisgICAgcHNsbHEgICAgICAgbW0zLCAoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVCAgOyBtbTM9KCAtIC0gLSA0KQorICAgIG1vdnEgICAgICAgIG1tMCwgbW02CisgICAgbW92cSAgICAgICAgbW0yLCBtbTQKKyAgICBwc3JscSAgICAgICBtbTAsIChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUICA7IG1tMD0oIDMgLSAtIC0pCisgICAgcHNsbHEgICAgICAgbW0yLCAyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTI9KCAtIDQgNSA2KQorCisgICAgcG9yICAgICAgICAgbW03LCBtbTMgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbTc9KCAxIDIgMyA0KQorICAgIHBvciAgICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0wPSggMyA0IDUgNikKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW02CisgICAgbW92cSAgICAgICAgbW01LCBtbTQKKyAgICBwc2xscSAgICAgICBtbTEsIDIqQllURV9CSVQgICAgICAgICAgICAgICAgICA7IG1tMT0oIC0gMCAxIDIpCisgICAgcHNybHEgICAgICAgbW01LCAyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTU9KCA1IDYgNyAtKQorICAgIG1vdnEgICAgICAgIG1tMywgbW00CisgICAgcHNybHEgICAgICAgbW0zLCAoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVCAgOyBtbTM9KCA3IC0gLSAtKQorCisgICAgcG9yICAgICAgICAgbW0xLCBNTVdPUkQgW3drKDEpXSAgICAgICAgICAgICAgOyBtbTE9KC0xIDAgMSAyKQorICAgIHBvciAgICAgICAgIG1tNSwgTU1XT1JEIFt3aygzKV0gICAgICAgICAgICAgIDsgbW01PSggNSA2IDcgOCkKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTMKKworICAgIHBtdWxsdyAgICAgIG1tNiwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHBtdWxsdyAgICAgIG1tNCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHBhZGR3ICAgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfRUlHSFQpXQorICAgIHBhZGR3ICAgICAgIG1tMCwgW0dPVE9GRihlYngsUFdfRUlHSFQpXQorICAgIHBhZGR3ICAgICAgIG1tNywgW0dPVE9GRihlYngsUFdfU0VWRU4pXQorICAgIHBhZGR3ICAgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCisgICAgcGFkZHcgICAgICAgbW0xLCBtbTYKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNAorICAgIHBzcmx3ICAgICAgIG1tMSwgNCAgICAgICAgICAgICAgICAgIDsgbW0xPU91dDFMRT0oIDAgIDIgIDQgIDYpCisgICAgcHNybHcgICAgICAgbW0wLCA0ICAgICAgICAgICAgICAgICAgOyBtbTA9T3V0MUhFPSggOCAxMCAxMiAxNCkKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tNgorICAgIHBhZGR3ICAgICAgIG1tNSwgbW00CisgICAgcHNybHcgICAgICAgbW03LCA0ICAgICAgICAgICAgICAgICAgOyBtbTc9T3V0MUxPPSggMSAgMyAgNSAgNykKKyAgICBwc3JsdyAgICAgICBtbTUsIDQgICAgICAgICAgICAgICAgICA7IG1tNT1PdXQxSE89KCA5IDExIDEzIDE1KQorCisgICAgcHNsbHcgICAgICAgbW03LCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIG1tNSwgQllURV9CSVQKKyAgICBwb3IgICAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tMT1PdXQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcG9yICAgICAgICAgbW0wLCBtbTUgICAgICAgICAgICAgICAgOyBtbTA9T3V0MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW0wCisKKyAgICBwb3BwaWMgICAgICBlYngKKworICAgIHN1YiAgICAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgYWRkICAgICAgICAgZWN4LCBieXRlIDEqU0laRU9GX01NV09SRCAgOyBpbnB0cjEoYWJvdmUpCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIDEqU0laRU9GX01NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JEICA7IGlucHRyMShiZWxvdykKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICA7IG91dHB0cjAKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICA7IG91dHB0cjEKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWN4CisgICAgcG9wICAgICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV91cHNhbXBsZV9tbXgoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIG1heF92X3NhbXAoYikgICAgICAgKGIpICsgOCAgICAgOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpICAgICAoYikgKyAxMiAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgKGIpICsgMTYgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpICAoYikgKyAyMCAgICA7IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2MV91cHNhbXBsZV9tbXgpCisKK0VYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAoMipTSVpFT0ZfTU1XT1JEKS0xCisgICAgYW5kICAgICAgICAgZWR4LCBieXRlIC0oMipTSVpFT0ZfTU1XT1JEKQorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgc2hvcnQgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIGVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtlZGldICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICA7IGlucHRyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgOyBvdXRwdHIKKyAgICBtb3YgICAgICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsYncgICBtbTAsIG1tMAorICAgIHB1bnBja2hidyAgIG1tMSwgbW0xCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKworICAgIHN1YiAgICAgICAgIGVheCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMgorICAgIHB1bnBja2xidyAgIG1tMiwgbW0yCisgICAgcHVucGNraGJ3ICAgbW0zLCBtbTMKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tMworCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDQqU0laRU9GX01NV09SRCAgOyBvdXRwdHIKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5uZXh0cm93OgorICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgc2hvcnQgLnJvd2xvb3AKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX3Vwc2FtcGxlX21teChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAoYikgKyA4ICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgICAgIChiKSArIDEyICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgICAgICAoYikgKyAxNiAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgIChiKSArIDIwICAgIDsgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX3Vwc2FtcGxlX21teCkKKworRVhUTihqc2ltZF9oMnYyX3Vwc2FtcGxlX21teCk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAoMipTSVpFT0ZfTU1XT1JEKS0xCisgICAgYW5kICAgICAgICAgZWR4LCBieXRlIC0oMipTSVpFT0ZfTU1XT1JEKQorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0gIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICBlZGkKKyAgICBwdXNoICAgICAgICBlc2kKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgICAgICAgICAgICAgICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddICA7IG91dHB0cjEKKyAgICBtb3YgICAgICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsYncgICBtbTAsIG1tMAorICAgIHB1bnBja2hidyAgIG1tMSwgbW0xCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VieCswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VieCsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKworICAgIHN1YiAgICAgICAgIGVheCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMgorICAgIHB1bnBja2xidyAgIG1tMiwgbW0yCisgICAgcHVucGNraGJ3ICAgbW0zLCBtbTMKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWJ4KzIqU0laRU9GX01NV09SRF0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWJ4KzMqU0laRU9GX01NV09SRF0sIG1tMworICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tMworCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgZWJ4LCBieXRlIDQqU0laRU9GX01NV09SRCAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDQqU0laRU9GX01NV09SRCAgOyBvdXRwdHIxCisgICAgam1wICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIDIgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIHNob3J0IC5yb3dsb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkc2FtcGxlLXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pkc2FtcGxlLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZGE2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamRzYW1wbGUtc3NlMi5hc20KQEAgLTAsMCArMSw3MjYgQEAKKzsKKzsgamRzYW1wbGUuYXNtIC0gdXBzYW1wbGluZyAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgorCitQV19PTkUgICB0aW1lcyA4IGR3IDEKK1BXX1RXTyAgIHRpbWVzIDggZHcgMgorUFdfVEhSRUUgdGltZXMgOCBkdyAzCitQV19TRVZFTiB0aW1lcyA4IGR3IDcKK1BXX0VJR0hUIHRpbWVzIDggZHcgOAorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCis7IGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorOyBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKzsgb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAoYikgKyA4ICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKSAgIChiKSArIDEyICAgIDsgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aAorJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgICAgIChiKSArIDE2ICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgKGIpICsgMjAgICAgOyBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaHBpYyAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbZG93bnNhbXBfd2lkdGgoZWJwKV0gIDsgY29sY3RyCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIGVjeCwgZWN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIHB1c2ggICAgICAgIGVkaQorICAgIHB1c2ggICAgICAgIGVzaQorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCisKKyAgICB0ZXN0ICAgICAgICBlYXgsIFNJWkVPRl9YTU1XT1JELTEKKyAgICBqeiAgICAgICAgICBzaG9ydCAuc2tpcAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKy5za2lwOgorICAgIHB4b3IgICAgICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0oYWxsIDAncykKKyAgICBwY21wZXFiICAgICB4bW03LCB4bW03CisgICAgcHNybGRxICAgICAgeG1tNywgKFNJWkVPRl9YTU1XT1JELTEpCisgICAgcGFuZCAgICAgICAgeG1tNywgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisKKyAgICBhZGQgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorICAgIGFuZCAgICAgICAgIGVheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisgICAgcGNtcGVxYiAgICAgeG1tNiwgeG1tNgorICAgIHBzbGxkcSAgICAgIHhtbTYsIChTSVpFT0ZfWE1NV09SRC0xKQorICAgIHBhbmQgICAgICAgIHhtbTYsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC51cHNhbXBsZQorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgIHBzbGxkcSAgICAgIHhtbTYsIChTSVpFT0ZfWE1NV09SRC0xKQorCisudXBzYW1wbGU6CisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgICAgOyB4bW0xPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisgICAgcHNsbGRxICAgICAgeG1tMiwgMSAgICAgICAgICAgICAgICAgICA7IHhtbTI9KC0tICAwICAxIC4uLiAxMiAxMyAxNCkKKyAgICBwc3JsZHEgICAgICB4bW0zLCAxICAgICAgICAgICAgICAgICAgIDsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IC0tKQorCisgICAgcG9yICAgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgICA7IHhtbTI9KC0xICAwICAxIC4uLiAxMiAxMyAxNCkKKyAgICBwb3IgICAgICAgICB4bW0zLCB4bW02ICAgICAgICAgICAgICAgIDsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIHBzcmxkcSAgICAgIHhtbTcsIChTSVpFT0ZfWE1NV09SRC0xKSAgOyB4bW03PSgxNSAtLSAtLSAuLi4gLS0gLS0gLS0pCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0xCisgICAgcHVucGNrbGJ3ICAgeG1tMSwgeG1tMCAgICAgICAgICAgICAgICA7IHhtbTE9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHB1bnBja2hidyAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgICAgOyB4bW00PSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yCisgICAgcHVucGNrbGJ3ICAgeG1tMiwgeG1tMCAgICAgICAgICAgICAgICA7IHhtbTI9KC0xICAwICAxICAyICAzICA0ICA1ICA2KQorICAgIHB1bnBja2hidyAgIHhtbTUsIHhtbTAgICAgICAgICAgICAgICAgOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0zCisgICAgcHVucGNrbGJ3ICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgICA7IHhtbTM9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorICAgIHB1bnBja2hidyAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgICAgOyB4bW02PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKworICAgIHBtdWxsdyAgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICBwbXVsbHcgICAgICB4bW00LCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgcGFkZHcgICAgICAgeG1tMiwgW0dPVE9GRihlYngsUFdfT05FKV0KKyAgICBwYWRkdyAgICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19PTkUpXQorICAgIHBhZGR3ICAgICAgIHhtbTMsIFtHT1RPRkYoZWJ4LFBXX1RXTyldCisgICAgcGFkZHcgICAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfVFdPKV0KKworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTEKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW00CisgICAgcHNybHcgICAgICAgeG1tMiwgMiAgICAgICAgICAgICAgICAgOyB4bW0yPU91dExFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKKyAgICBwc3JsdyAgICAgICB4bW01LCAyICAgICAgICAgICAgICAgICA7IHhtbTU9T3V0SEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTEKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW00CisgICAgcHNybHcgICAgICAgeG1tMywgMiAgICAgICAgICAgICAgICAgOyB4bW0zPU91dExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKyAgICBwc3JsdyAgICAgICB4bW02LCAyICAgICAgICAgICAgICAgICA7IHhtbTY9T3V0SE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorCisgICAgcHNsbHcgICAgICAgeG1tMywgQllURV9CSVQKKyAgICBwc2xsdyAgICAgICB4bW02LCBCWVRFX0JJVAorICAgIHBvciAgICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj1PdXRMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisgICAgcG9yICAgICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PU91dEg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQorCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYSAgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wX2xhc3QKKworICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVheAorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisucmV0dXJuOgorICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMihpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgICAgIChiKSArIDggICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpICAgKGIpICsgMTIgICAgOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgKGIpICsgMTYgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpICAoYikgKyAyMCAgICA7IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1hNTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgIDQKKyVkZWZpbmUgZ290cHRyICAgICAgICB3aygwKSAtIFNJWkVPRl9QT0lOVEVSICA7IHZvaWQgKmdvdHB0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICBtb3ZwaWMgICAgICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVkeCwgZWF4ICAgICAgICAgICAgICAgIDsgZWR4ID0gb3JpZ2luYWwgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWR4KV0gIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXSAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlZHgpXQorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgcHVzaCAgICAgICAgZWN4CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMShhYm92ZSkKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIxKGJlbG93KQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMAorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMQorCisgICAgdGVzdCAgICAgICAgZWF4LCBTSVpFT0ZfWE1NV09SRC0xCisgICAganogICAgICAgICAgc2hvcnQgLnNraXAKKyAgICBwdXNoICAgICAgICBlZHgKKyAgICBtb3YgICAgICAgICBkbCwgSlNBTVBMRSBbZWN4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgbW92ICAgICAgICAgSlNBTVBMRSBbZWN4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgbW92ICAgICAgICAgZGwsIEpTQU1QTEUgW2VieCsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgIG1vdiAgICAgICAgIEpTQU1QTEUgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtlc2krKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKyAgICBwb3AgICAgICAgICBlZHgKKy5za2lwOgorICAgIDsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtlYngrMCpTSVpFT0ZfWE1NV09SRF0gIDsgeG1tMD1yb3dbIDBdWzBdCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbZWN4KzAqU0laRU9GX1hNTVdPUkRdICA7IHhtbTE9cm93Wy0xXVswXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXSAgOyB4bW0yPXJvd1srMV1bMF0KKworICAgIHB1c2hwaWMgICAgIGVieAorICAgIG1vdnBpYyAgICAgIGVieCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcworCisgICAgcHhvciAgICAgICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgOyB4bW0zPShhbGwgMCdzKQorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBwdW5wY2tsYncgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwdW5wY2toYncgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xCisgICAgcHVucGNrbGJ3ICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPXJvd1stMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcHVucGNraGJ3ICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXJvd1stMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMgorICAgIHB1bnBja2xidyAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHB1bnBja2hidyAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisgICAgcG11bGx3ICAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHBtdWxsdyAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKworICAgIHBjbXBlcWIgICAgIHhtbTcsIHhtbTcKKyAgICBwc3JsZHEgICAgICB4bW03LCAoU0laRU9GX1hNTVdPUkQtMikKKworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT1JbnQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PUludDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj1JbnQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEgIDsgdGVtcG9yYXJpbHkgc2F2ZQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNSAgOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTYKKworICAgIHBhbmQgICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT0oIDAgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgcGFuZCAgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMgorCisgICAgcG9wcGljICAgICAgZWJ4CisKKyAgICBhZGQgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorICAgIGFuZCAgICAgICAgIGVheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKKyAgICBjbXAgICAgICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jaworCisgICAgcHVzaHBpYyAgICAgZWJ4CisgICAgbW92cGljICAgICAgZWJ4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzCisKKyAgICBwY21wZXFiICAgICB4bW0xLCB4bW0xCisgICAgcHNsbGRxICAgICAgeG1tMSwgKFNJWkVPRl9YTU1XT1JELTIpCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMQorCisgICAgcGFuZCAgICAgICAgeG1tMSwgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgcGFuZCAgICAgICAgeG1tMiwgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTEgICA7IHhtbTE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDMpXSwgeG1tMiAgIDsgeG1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUpCisKKyAgICBqbXAgICAgICAgICBuZWFyIC51cHNhbXBsZQorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5jb2x1bW5sb29wOgorICAgIDsgLS0gcHJvY2VzcyB0aGUgbmV4dCBjb2x1bW4gYmxvY2sKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW2VieCsxKlNJWkVPRl9YTU1XT1JEXSAgOyB4bW0wPXJvd1sgMF1bMV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtlY3grMSpTSVpFT0ZfWE1NV09SRF0gIDsgeG1tMT1yb3dbLTFdWzFdCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdICA7IHhtbTI9cm93WysxXVsxXQorCisgICAgcHVzaHBpYyAgICAgZWJ4CisgICAgbW92cGljICAgICAgZWJ4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzCisKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW0zICAgICAgICAgICAgICA7IHhtbTM9KGFsbCAwJ3MpCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHB1bnBja2hidyAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgIDsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBwdW5wY2tsYncgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwdW5wY2toYncgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yCisgICAgcHVucGNrbGJ3ICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcHVucGNraGJ3ICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKyAgICBwbXVsbHcgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgcG11bGx3ICAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tMCAgICAgICAgICAgICAgOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9SW50MEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNCAgICAgICAgICAgICAgOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkeCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMSAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWR4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW01ICA7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tNgorCisgICAgcHNsbGRxICAgICAgeG1tMSwgKFNJWkVPRl9YTU1XT1JELTIpICA7IHhtbTE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICAwKQorICAgIHBzbGxkcSAgICAgIHhtbTIsIChTSVpFT0ZfWE1NV09SRC0yKSAgOyB4bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDMpXSwgeG1tMgorCisudXBzYW1wbGU6CisgICAgOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXQorCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgICA7IHhtbTc9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgICAgOyB4bW0zPUludDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBwc3JsZHEgICAgICB4bW0wLCAyICAgICAgICAgICAgICAgICAgIDsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCisgICAgcHNsbGRxICAgICAgeG1tNCwgKFNJWkVPRl9YTU1XT1JELTIpICA7IHhtbTQ9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0zCisgICAgcHNybGRxICAgICAgeG1tNSwgKFNJWkVPRl9YTU1XT1JELTIpICA7IHhtbTU9KCA3IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHBzbGxkcSAgICAgIHhtbTYsIDIgICAgICAgICAgICAgICAgICAgOyB4bW02PSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworICAgIHBvciAgICAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgICAgOyB4bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKyAgICBwb3IgICAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICAgIDsgeG1tNT0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMworICAgIHBzbGxkcSAgICAgIHhtbTEsIDIgICAgICAgICAgICAgICAgICAgOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICBwc3JsZHEgICAgICB4bW0yLCAyICAgICAgICAgICAgICAgICAgIDsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMworICAgIHBzcmxkcSAgICAgIHhtbTQsIChTSVpFT0ZfWE1NV09SRC0yKSAgOyB4bW00PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHBvciAgICAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDApXSAgICAgOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICBwb3IgICAgICAgICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICAgIDsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQKKworICAgIHBtdWxsdyAgICAgIHhtbTcsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICBwbXVsbHcgICAgICB4bW0zLCBbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgcGFkZHcgICAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfRUlHSFQpXQorICAgIHBhZGR3ICAgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKyAgICBwYWRkdyAgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19TRVZFTildCisgICAgcGFkZHcgICAgICAgeG1tMiwgW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTMKKyAgICBwc3JsdyAgICAgICB4bW0xLCA0ICAgICAgICAgICAgICAgICA7IHhtbTE9T3V0MExFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKKyAgICBwc3JsdyAgICAgICB4bW01LCA0ICAgICAgICAgICAgICAgICA7IHhtbTU9T3V0MEhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMworICAgIHBzcmx3ICAgICAgIHhtbTAsIDQgICAgICAgICAgICAgICAgIDsgeG1tMD1PdXQwTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorICAgIHBzcmx3ICAgICAgIHhtbTIsIDQgICAgICAgICAgICAgICAgIDsgeG1tMj1PdXQwSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorCisgICAgcHNsbHcgICAgICAgeG1tMCwgQllURV9CSVQKKyAgICBwc2xsdyAgICAgICB4bW0yLCBCWVRFX0JJVAorICAgIHBvciAgICAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT1PdXQwTD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorICAgIHBvciAgICAgICAgIHhtbTUsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNT1PdXQwSD0oMTYgMTcgMTggLi4uIDI5IDMwIDMxKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW01CisKKyAgICA7IC0tIHByb2Nlc3MgdGhlIGxvd2VyIHJvdworCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02ICAgICAgICAgICAgICAgIDsgeG1tNj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNCAgICAgICAgICAgICAgICA7IHhtbTQ9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHBzcmxkcSAgICAgIHhtbTcsIDIgICAgICAgICAgICAgICAgICAgOyB4bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAtLSkKKyAgICBwc2xsZHEgICAgICB4bW0zLCAoU0laRU9GX1hNTVdPUkQtMikgIDsgeG1tMz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDgpCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQKKyAgICBwc3JsZHEgICAgICB4bW0wLCAoU0laRU9GX1hNTVdPUkQtMikgIDsgeG1tMD0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgcHNsbGRxICAgICAgeG1tMiwgMiAgICAgICAgICAgICAgICAgICA7IHhtbTI9KC0tICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisgICAgcG9yICAgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgICA7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorICAgIHBvciAgICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgICAgOyB4bW0wPSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00CisgICAgcHNsbGRxICAgICAgeG1tMSwgMiAgICAgICAgICAgICAgICAgICA7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQorICAgIHBzcmxkcSAgICAgIHhtbTUsIDIgICAgICAgICAgICAgICAgICAgOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW00CisgICAgcHNybGRxICAgICAgeG1tMywgKFNJWkVPRl9YTU1XT1JELTIpICA7IHhtbTM9KDE1IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcG9yICAgICAgICAgeG1tMSwgWE1NV09SRCBbd2soMSldICAgICA7IHhtbTE9KC0xICAwICAxICAyICAzICA0ICA1ICA2KQorICAgIHBvciAgICAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDMpXSAgICAgOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMworCisgICAgcG11bGx3ICAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgIHBtdWxsdyAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICBwYWRkdyAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgcGFkZHcgICAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfRUlHSFQpXQorICAgIHBhZGR3ICAgICAgIHhtbTcsIFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKyAgICBwYWRkdyAgICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19TRVZFTildCisKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW02CisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNAorICAgIHBzcmx3ICAgICAgIHhtbTEsIDQgICAgICAgICAgICAgICAgIDsgeG1tMT1PdXQxTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgIHBzcmx3ICAgICAgIHhtbTAsIDQgICAgICAgICAgICAgICAgIDsgeG1tMD1PdXQxSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTYKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW00CisgICAgcHNybHcgICAgICAgeG1tNywgNCAgICAgICAgICAgICAgICAgOyB4bW03PU91dDFMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUpCisgICAgcHNybHcgICAgICAgeG1tNSwgNCAgICAgICAgICAgICAgICAgOyB4bW01PU91dDFITz0oMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisKKyAgICBwc2xsdyAgICAgICB4bW03LCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIHhtbTUsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB4bW0xPU91dDFMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPU91dDFIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKworICAgIHBvcHBpYyAgICAgIGVieAorCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgYWRkICAgICAgICAgZWN4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIxKGFib3ZlKQorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyMAorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyMShiZWxvdykKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyMQorICAgIGNtcCAgICAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgZXNpCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZWN4CisgICAgcG9wICAgICAgICAgZWF4CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIHN1YiAgICAgICAgIGVjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKzsgSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgICAgIChiKSArIDggICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgKGIpICsgMTIgICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgICAgIChiKSArIDE2ICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgKGIpICsgMjAgICAgOyBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorICAgIGFuZCAgICAgICAgIGVkeCwgYnl0ZSAtKDIqU0laRU9GX1hNTVdPUkQpCisgICAganogICAgICAgICAgc2hvcnQgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0gIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWN4LCBlY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICBlZGkKKyAgICBwdXNoICAgICAgICBlc2kKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cgorICAgIG1vdiAgICAgICAgIGVheCwgZWR4ICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb2x1bW5sb29wOgorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0wCisgICAgcHVucGNrbGJ3ICAgeG1tMCwgeG1tMAorICAgIHB1bnBja2hidyAgIHhtbTEsIHhtbTEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0yCisgICAgcHVucGNrbGJ3ICAgeG1tMiwgeG1tMgorICAgIHB1bnBja2hidyAgIHhtbTMsIHhtbTMKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMworCisgICAgc3ViICAgICAgICAgZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgIGFsaWdueCAgICAgIDE2LCA3CisKKy5uZXh0cm93OgorICAgIHBvcCAgICAgICAgIGVzaQorICAgIHBvcCAgICAgICAgIGVkaQorCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgc2hvcnQgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMihpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIG1heF92X3NhbXAoYikgICAgICAgKGIpICsgOCAgICAgOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpICAgICAoYikgKyAxMiAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgKGIpICsgMTYgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpICAoYikgKyAyMCAgICA7IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorICAgIGFuZCAgICAgICAgIGVkeCwgYnl0ZSAtKDIqU0laRU9GX1hNTVdPUkQpCisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICBlY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXSAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICBlY3gsIGVjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIGVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtlZGldICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgZWRpCisgICAgcHVzaCAgICAgICAgZXNpCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICAgICAgICAgICAgICAgICA7IGlucHRyCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyBvdXRwdHIwCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXSAgOyBvdXRwdHIxCisgICAgbW92ICAgICAgICAgZWF4LCBlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTAKKyAgICBwdW5wY2tsYncgICB4bW0wLCB4bW0wCisgICAgcHVucGNraGJ3ICAgeG1tMSwgeG1tMQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWJ4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWJ4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisKKyAgICBzdWIgICAgICAgICBlYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTIKKyAgICBwdW5wY2tsYncgICB4bW0yLCB4bW0yCisgICAgcHVucGNraGJ3ICAgeG1tMywgeG1tMworCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWJ4KzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWJ4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisKKyAgICBzdWIgICAgICAgICBlYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIGVieCwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cjAKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIxCisgICAgam1wICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICBhbGlnbnggICAgICAxNiwgNworCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICBlc2kKKyAgICBwb3AgICAgICAgICBlZGkKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgc3ViICAgICAgICAgZWN4LCBieXRlIDIgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIHNob3J0IC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3RmbHQtM2RuLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGZsdC0zZG4uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDU4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3RmbHQtM2RuLmFzbQpAQCAtMCwwICsxLDMyMCBAQAorOworOyBqZmRjdGZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBGRENUICgzRE5vdyEpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBmb3J3YXJkIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamZkY3RmbHQuYzsgc2VlIHRoZSBqZmRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9mZGN0X2Zsb2F0XzNkbm93KQorCitFWFROKGpjb25zdF9mZGN0X2Zsb2F0XzNkbm93KToKKworUERfMF8zODIgdGltZXMgMiBkZCAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcgdGltZXMgMiBkZCAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwMDg0NAorUERfMF81NDEgdGltZXMgMiBkZCAwLjU0MTE5NjEwMDE0NjE5Njk4NDM5OTcyMworUERfMV8zMDYgdGltZXMgMiBkZCAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9mZGN0X2Zsb2F0XzNkbm93KEZBU1RfRkxPQVQgKmRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKSAgICAgICAoYikgKyA4ICAgICAgICAgICA7IEZBU1RfRkxPQVQgKmRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9NTVdPUkQgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2Zsb2F0XzNkbm93KQorCitFWFROKGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3cpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgIDsgYWxpZ24gdG8gNjQgYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChGQVNUX0ZMT0FUICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzIKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygwLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygxLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIDsgbW0wPSgwMCAwMSksIG1tMT0oMTAgMTEpLCBtbTI9KDA2IDA3KSwgbW0zPSgxNiAxNykKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgIHB1bnBja2xkcSAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAxMCk9ZGF0YTAKKyAgICBwdW5wY2toZHEgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND0oMDEgMTEpPWRhdGExCisgICAgbW92cSAgICAgICAgbW01LCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgcHVucGNrbGRxICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9KDA2IDE2KT1kYXRhNgorICAgIHB1bnBja2hkcSAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSgwNyAxNyk9ZGF0YTcKKworICAgIG1vdnEgICAgICAgIG1tNiwgbW00CisgICAgbW92cSAgICAgICAgbW03LCBtbTAKKyAgICBwZnN1YiAgICAgICBtbTQsIG1tMiAgICAgICAgICAgICAgICA7IG1tND1kYXRhMS1kYXRhNj10bXA2CisgICAgcGZzdWIgICAgICAgbW0wLCBtbTUgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTAtZGF0YTc9dG1wNworICAgIHBmYWRkICAgICAgIG1tNiwgbW0yICAgICAgICAgICAgICAgIDsgbW02PWRhdGExK2RhdGE2PXRtcDEKKyAgICBwZmFkZCAgICAgICBtbTcsIG1tNSAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMCtkYXRhNz10bXAwCisKKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygwLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSygxLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIDsgbW0xPSgwMiAwMyksIG1tMz0oMTIgMTMpLCBtbTI9KDA0IDA1KSwgbW01PSgxNCAxNSkKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9dG1wNgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTAgICAgIDsgd2soMSk9dG1wNworCisgICAgbW92cSAgICAgICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgcHVucGNrbGRxICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9KDAyIDEyKT1kYXRhMgorICAgIHB1bnBja2hkcSAgIG1tNCwgbW0zICAgICAgICAgICAgICAgIDsgbW00PSgwMyAxMyk9ZGF0YTMKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICBwdW5wY2tsZHEgICBtbTIsIG1tNSAgICAgICAgICAgICAgICA7IG1tMj0oMDQgMTQpPWRhdGE0CisgICAgcHVucGNraGRxICAgbW0wLCBtbTUgICAgICAgICAgICAgICAgOyBtbTA9KDA1IDE1KT1kYXRhNQorCisgICAgbW92cSAgICAgICAgbW0zLCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMQorICAgIHBmYWRkICAgICAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PWRhdGEzK2RhdGE0PXRtcDMKKyAgICBwZmFkZCAgICAgICBtbTEsIG1tMCAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMitkYXRhNT10bXAyCisgICAgcGZzdWIgICAgICAgbW0zLCBtbTIgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHBmc3ViICAgICAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW01PWRhdGEyLWRhdGE1PXRtcDUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tNworICAgIG1vdnEgICAgICAgIG1tMCwgbW02CisgICAgcGZzdWIgICAgICAgbW03LCBtbTQgICAgICAgICAgICAgICAgOyBtbTc9dG1wMTMKKyAgICBwZnN1YiAgICAgICBtbTYsIG1tMSAgICAgICAgICAgICAgICA7IG1tNj10bXAxMgorICAgIHBmYWRkICAgICAgIG1tMiwgbW00ICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgcGZhZGQgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTEKKworICAgIHBmYWRkICAgICAgIG1tNiwgbW03CisgICAgcGZtdWwgICAgICAgbW02LCBbR09UT0ZGKGVieCxQRF8wXzcwNyldICA7IG1tNj16MQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNworICAgIHBmc3ViICAgICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE0CisgICAgcGZzdWIgICAgICAgbW03LCBtbTYgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTYKKyAgICBwZmFkZCAgICAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IG1tND1kYXRhMAorICAgIHBmYWRkICAgICAgIG1tMSwgbW02ICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEyCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0wPXRtcDYKKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbd2soMSldICAgICA7IG1tNj10bXA3CisKKyAgICBwZmFkZCAgICAgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz10bXAxMAorICAgIHBmYWRkICAgICAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW01PXRtcDExCisgICAgcGZhZGQgICAgICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTIsIG1tNj10bXA3CisKKyAgICBwZm11bCAgICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gIDsgbW01PXozCisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMyAgICAgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgcGZzdWIgICAgICAgbW0zLCBtbTAKKyAgICBwZm11bCAgICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBEXzBfMzgyKV0gIDsgbW0zPXo1CisgICAgcGZtdWwgICAgICAgbW0yLCBbR09UT0ZGKGVieCxQRF8wXzU0MSldICA7IG1tMj1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKKyAgICBwZm11bCAgICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gIDsgbW0wPU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2Mjk2KQorICAgIHBmYWRkICAgICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgICAgICAgOyBtbTI9ejIKKyAgICBwZmFkZCAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICAgICAgIDsgbW0wPXo0CisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNgorICAgIHBmc3ViICAgICAgIG1tNiwgbW01ICAgICAgICAgICAgICAgIDsgbW02PXoxMworICAgIHBmYWRkICAgICAgIG1tNywgbW01ICAgICAgICAgICAgICAgIDsgbW03PXoxMQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNworICAgIHBmc3ViICAgICAgIG1tNiwgbW0yICAgICAgICAgICAgICAgIDsgbW02PWRhdGEzCisgICAgcGZzdWIgICAgICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTcKKyAgICBwZmFkZCAgICAgICBtbTQsIG1tMiAgICAgICAgICAgICAgICA7IG1tND1kYXRhNQorICAgIHBmYWRkICAgICAgIG1tMSwgbW0wICAgICAgICAgICAgICAgIDsgbW0xPWRhdGExCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICBkZWMgICAgICAgICBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gIDsgKEZBU1RfRkxPQVQgKikKKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvMgorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgOyBtbTA9KDAwIDEwKSwgbW0xPSgwMSAxMSksIG1tMj0oNjAgNzApLCBtbTM9KDYxIDcxKQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgcHVucGNrbGRxICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9KDAwIDAxKT1kYXRhMAorICAgIHB1bnBja2hkcSAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW00PSgxMCAxMSk9ZGF0YTEKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICBwdW5wY2tsZHEgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj0oNjAgNjEpPWRhdGE2CisgICAgcHVucGNraGRxICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9KDcwIDcxKT1kYXRhNworCisgICAgbW92cSAgICAgICAgbW02LCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMAorICAgIHBmc3ViICAgICAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PWRhdGExLWRhdGE2PXRtcDYKKyAgICBwZnN1YiAgICAgICBtbTAsIG1tNSAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMC1kYXRhNz10bXA3CisgICAgcGZhZGQgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTErZGF0YTY9dG1wMQorICAgIHBmYWRkICAgICAgIG1tNywgbW01ICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwK2RhdGE3PXRtcDAKKworICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgOyBtbTE9KDIwIDMwKSwgbW0zPSgyMSAzMSksIG1tMj0oNDAgNTApLCBtbTU9KDQxIDUxKQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT10bXA2CisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMCAgICAgOyB3aygxKT10bXA3CisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICBwdW5wY2tsZHEgICBtbTEsIG1tMyAgICAgICAgICAgICAgICA7IG1tMT0oMjAgMjEpPWRhdGEyCisgICAgcHVucGNraGRxICAgbW00LCBtbTMgICAgICAgICAgICAgICAgOyBtbTQ9KDMwIDMxKT1kYXRhMworICAgIG1vdnEgICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgIHB1bnBja2xkcSAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPSg0MCA0MSk9ZGF0YTQKKyAgICBwdW5wY2toZHEgICBtbTAsIG1tNSAgICAgICAgICAgICAgICA7IG1tMD0oNTAgNTEpPWRhdGE1CisKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNAorICAgIG1vdnEgICAgICAgIG1tNSwgbW0xCisgICAgcGZhZGQgICAgICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTMrZGF0YTQ9dG1wMworICAgIHBmYWRkICAgICAgIG1tMSwgbW0wICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEyK2RhdGE1PXRtcDIKKyAgICBwZnN1YiAgICAgICBtbTMsIG1tMiAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMy1kYXRhND10bXA0CisgICAgcGZzdWIgICAgICAgbW01LCBtbTAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTItZGF0YTU9dG1wNQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW03CisgICAgbW92cSAgICAgICAgbW0wLCBtbTYKKyAgICBwZnN1YiAgICAgICBtbTcsIG1tNCAgICAgICAgICAgICAgICA7IG1tNz10bXAxMworICAgIHBmc3ViICAgICAgIG1tNiwgbW0xICAgICAgICAgICAgICAgIDsgbW02PXRtcDEyCisgICAgcGZhZGQgICAgICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTAKKyAgICBwZmFkZCAgICAgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQorCisgICAgcGZhZGQgICAgICAgbW02LCBtbTcKKyAgICBwZm11bCAgICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gIDsgbW02PXoxCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMgorICAgIG1vdnEgICAgICAgIG1tMSwgbW03CisgICAgcGZzdWIgICAgICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTQKKyAgICBwZnN1YiAgICAgICBtbTcsIG1tNiAgICAgICAgICAgICAgICA7IG1tNz1kYXRhNgorICAgIHBmYWRkICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgbW00PWRhdGEwCisgICAgcGZhZGQgICAgICAgbW0xLCBtbTYgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTIKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTA9dG1wNgorICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW02PXRtcDcKKworICAgIHBmYWRkICAgICAgIG1tMywgbW01ICAgICAgICAgICAgICAgIDsgbW0zPXRtcDEwCisgICAgcGZhZGQgICAgICAgbW01LCBtbTAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTEKKyAgICBwZmFkZCAgICAgICBtbTAsIG1tNiAgICAgICAgICAgICAgICA7IG1tMD10bXAxMiwgbW02PXRtcDcKKworICAgIHBmbXVsICAgICAgIG1tNSwgW0dPVE9GRihlYngsUERfMF83MDcpXSAgOyBtbTU9ejMKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTAKKyAgICBwZnN1YiAgICAgICBtbTMsIG1tMAorICAgIHBmbXVsICAgICAgIG1tMywgW0dPVE9GRihlYngsUERfMF8zODIpXSAgOyBtbTM9ejUKKyAgICBwZm11bCAgICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBEXzBfNTQxKV0gIDsgbW0yPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NjEwKQorICAgIHBmbXVsICAgICAgIG1tMCwgW0dPVE9GRihlYngsUERfMV8zMDYpXSAgOyBtbTA9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyOTYpCisgICAgcGZhZGQgICAgICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgICAgICA7IG1tMj16MgorICAgIHBmYWRkICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgICAgICAgOyBtbTA9ejQKKworICAgIG1vdnEgICAgICAgIG1tNywgbW02CisgICAgcGZzdWIgICAgICAgbW02LCBtbTUgICAgICAgICAgICAgICAgOyBtbTY9ejEzCisgICAgcGZhZGQgICAgICAgbW03LCBtbTUgICAgICAgICAgICAgICAgOyBtbTc9ejExCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tNgorICAgIG1vdnEgICAgICAgIG1tMSwgbW03CisgICAgcGZzdWIgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTMKKyAgICBwZnN1YiAgICAgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IG1tNz1kYXRhNworICAgIHBmYWRkICAgICAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PWRhdGE1CisgICAgcGZhZGQgICAgICAgbW0xLCBtbTAgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTEKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIDIqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICBkZWMgICAgICAgICBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKyAgICBmZW1tcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKworOyAgIHBvcCAgICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZXNpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wcGljICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pmZGN0Zmx0LXNzZS5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3RmbHQtc3NlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmFmODM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pmZGN0Zmx0LXNzZS5hc20KQEAgLTAsMCArMSwzNzEgQEAKKzsKKzsgamZkY3RmbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgRkRDVCAoU1NFKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9yd2FyZCBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0Zmx0LmM7IHNlZSB0aGUgamZkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislbWFjcm8gIHVucGNrbHBzMiAyICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMCAxIDQgNSkKKyAgICBzaHVmcHMgICAgICAlMSwgJTIsIDB4NDQKKyVlbmRtYWNybworCislbWFjcm8gIHVucGNraHBzMiAyICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMiAzIDYgNykKKyAgICBzaHVmcHMgICAgICAlMSwgJTIsIDB4RUUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqY29uc3RfZmRjdF9mbG9hdF9zc2UpOgorCitQRF8wXzM4MiB0aW1lcyA0IGRkIDAuMzgyNjgzNDMyMzY1MDg5NzcxNzI4NDYwCitQRF8wXzcwNyB0aW1lcyA0IGRkIDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0CitQRF8wXzU0MSB0aW1lcyA0IGRkIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNiB0aW1lcyA0IGRkIDEuMzA2NTYyOTY0ODc2Mzc2NTI3ODU2NjQzCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfZmxvYXRfc3NlKEZBU1RfRkxPQVQgKmRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKSAgICAgICAoYikgKyA4ICAgICAgICAgICA7IEZBU1RfRkxPQVQgKmRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqc2ltZF9mZGN0X2Zsb2F0X3NzZSk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChGQVNUX0ZMT0FUICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICBtb3ZhcHMgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIDsgeG1tMD0oMjAgMjEgMjIgMjMpLCB4bW0yPSgyNCAyNSAyNiAyNykKKyAgICA7IHhtbTE9KDMwIDMxIDMyIDMzKSwgeG1tMz0oMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDIwIDMwIDIxIDMxKQorICAgIHVucGNraHBzICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgyNCAzNCAyNSAzNSkKKyAgICB1bnBja2hwcyAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDI2IDM2IDI3IDM3KQorCisgICAgbW92YXBzICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICA7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCisgICAgOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0yICAgOyB3aygxKT0oMjQgMzQgMjUgMzUpCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDAxIDExKQorICAgIHVucGNraHBzICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND0oMDIgMTIgMDMgMTMpCisgICAgbW92YXBzICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSgwNCAxNCAwNSAxNSkKKyAgICB1bnBja2hwcyAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDA3IDE3KQorCisgICAgbW92YXBzICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCk9ZGF0YTAKKyAgICB1bnBja2hwczIgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2CisgICAgdW5wY2tocHMyICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKworICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTcKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW02CisgICAgc3VicHMgICAgICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKyAgICBzdWJwcyAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMj0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSgyNCAzNCAyNSAzNSkKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCisgICAgdW5wY2tocHMyICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSgwMyAxMyAyMyAzMyk9ZGF0YTMKKyAgICBtb3ZhcHMgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICB1bnBja2xwczIgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDA0IDE0IDI0IDM0KT1kYXRhNAorICAgIHVucGNraHBzMiAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CisKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW03CisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNAorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHN1YnBzICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tNQorICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTAKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW03ICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTAKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKKworICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTUKKyAgICBtdWxwcyAgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQRF8wXzcwNyldICA7IHhtbTA9ejEKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTEKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW01CisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0CisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGE2CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PWRhdGEyCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmFwcyAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNj10bXA2CisgICAgbW92YXBzICAgICAgeG1tMCwgWE1NV09SRCBbd2soMSldICAgOyB4bW0wPXRtcDcKKworICAgIGFkZHBzICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz10bXAxMQorICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj10bXAxMiwgeG1tMD10bXA3CisKKyAgICBtdWxwcyAgICAgICB4bW0zLCBbR09UT0ZGKGVieCxQRF8wXzcwNyldICA7IHhtbTM9ejMKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMAorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTYKKyAgICBtdWxwcyAgICAgICB4bW0yLCBbR09UT0ZGKGVieCxQRF8wXzM4MildICA7IHhtbTI9ejUKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF8wXzU0MSldICA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgIG11bHBzICAgICAgIHhtbTYsIFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gIDsgeG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgICAgICAgOyB4bW0xPXoyCisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgICAgICAgOyB4bW02PXo0CisKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0wCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXoxMworICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT16MTEKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW01CisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzCisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PWRhdGE3CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PWRhdGE1CisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGExCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworICAgIGFkZCAgICAgICAgIGVkeCwgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgZGVjICAgICAgICAgZWN4CisgICAgam56ICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChGQVNUX0ZMT0FUICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBtb3ZhcHMgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIDsgeG1tMD0oMDIgMTIgMjIgMzIpLCB4bW0yPSg0MiA1MiA2MiA3MikKKyAgICA7IHhtbTE9KDAzIDEzIDIzIDMzKSwgeG1tMz0oNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDAyIDAzIDEyIDEzKQorICAgIHVucGNraHBzICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND0oMjIgMjMgMzIgMzMpCisgICAgbW92YXBzICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSg0MiA0MyA1MiA1MykKKyAgICB1bnBja2hwcyAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDYyIDYzIDcyIDczKQorCisgICAgbW92YXBzICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICA7IHhtbTY9KDAwIDEwIDIwIDMwKSwgeG1tMT0oNDAgNTAgNjAgNzApCisgICAgOyB4bW03PSgwMSAxMSAyMSAzMSksIHhtbTM9KDQxIDUxIDYxIDcxKQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT0oMjIgMjMgMzIgMzMpCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0yICAgOyB3aygxKT0oNDIgNDMgNTIgNTMpCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDEwIDExKQorICAgIHVucGNraHBzICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMzAgMzEpCisgICAgbW92YXBzICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSg0MCA0MSA1MCA1MSkKKyAgICB1bnBja2hwcyAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDYwIDYxIDcwIDcxKQorCisgICAgbW92YXBzICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyk9ZGF0YTAKKyAgICB1bnBja2hwczIgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oNjAgNjEgNjIgNjMpPWRhdGE2CisgICAgdW5wY2tocHMyICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSg3MCA3MSA3MiA3Myk9ZGF0YTcKKworICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTcKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW02CisgICAgc3VicHMgICAgICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKyAgICBzdWJwcyAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMj0oMjIgMjMgMzIgMzMpCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSg0MiA0MyA1MiA1MykKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMjIgMjMpPWRhdGEyCisgICAgdW5wY2tocHMyICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSgzMCAzMSAzMiAzMyk9ZGF0YTMKKyAgICBtb3ZhcHMgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICB1bnBja2xwczIgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDQyIDQzKT1kYXRhNAorICAgIHVucGNraHBzMiAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj0oNTAgNTEgNTIgNTMpPWRhdGE1CisKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW03CisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNAorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHN1YnBzICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tNQorICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTAKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW03ICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTAKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKKworICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTUKKyAgICBtdWxwcyAgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQRF8wXzcwNyldICA7IHhtbTA9ejEKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTEKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW01CisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0CisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGE2CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PWRhdGEyCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmFwcyAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNj10bXA2CisgICAgbW92YXBzICAgICAgeG1tMCwgWE1NV09SRCBbd2soMSldICAgOyB4bW0wPXRtcDcKKworICAgIGFkZHBzICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz10bXAxMQorICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj10bXAxMiwgeG1tMD10bXA3CisKKyAgICBtdWxwcyAgICAgICB4bW0zLCBbR09UT0ZGKGVieCxQRF8wXzcwNyldICA7IHhtbTM9ejMKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMAorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTYKKyAgICBtdWxwcyAgICAgICB4bW0yLCBbR09UT0ZGKGVieCxQRF8wXzM4MildICA7IHhtbTI9ejUKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF8wXzU0MSldICA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgIG11bHBzICAgICAgIHhtbTYsIFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gIDsgeG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgICAgICAgOyB4bW0xPXoyCisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgICAgICAgOyB4bW02PXo0CisKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0wCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXoxMworICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT16MTEKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW01CisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzCisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PWRhdGE3CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PWRhdGE1CisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGExCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgZGVjICAgICAgICAgZWN4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCis7ICAgcG9wICAgICAgICAgZWRpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwb3AgICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3Rmc3QtbW14LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGZzdC1tbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzE5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3Rmc3QtbW14LmFzbQpAQCAtMCwwICsxLDM5NyBAQAorOworOyBqZmRjdGZzdC5hc20gLSBmYXN0IGludGVnZXIgRkRDVCAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0ZnN0LmM7IHNlZSB0aGUgamZkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDggIDsgMTQgaXMgYWxzbyBPSy4KKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8wXzM4MiBlcXUgIDk4ICA7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEgZXF1IDEzOSAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3IGVxdSAxODEgIDsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNiBlcXUgMzM0ICA7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMzgyIGVxdSBERVNDQUxFKCA0MTA5MDMyMDcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MSBlcXUgREVTQ0FMRSggNTgxMTA0ODg3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcgZXF1IERFU0NBTEUoIDc1OTI1MDEyNCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2IGVxdSBERVNDQUxFKDE0MDI5MTEzMDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMzA2NTYyOTY1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICAgICAgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaWZhc3RfbW14KQorCitFWFROKGpjb25zdF9mZGN0X2lmYXN0X21teCk6CisKK1BXX0YwNzA3IHRpbWVzIDQgZHcgRl8wXzcwNyA8PCBDT05TVF9TSElGVAorUFdfRjAzODIgdGltZXMgNCBkdyBGXzBfMzgyIDw8IENPTlNUX1NISUZUCitQV19GMDU0MSB0aW1lcyA0IGR3IEZfMF81NDEgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMzA2IHRpbWVzIDQgZHcgRl8xXzMwNiA8PCBDT05TVF9TSElGVAorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9mZGN0X2lmYXN0X21teChEQ1RFTEVNICpkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikgICAgICAgKGIpICsgOCAgICAgICAgICAgOyBEQ1RFTEVNICpkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfTU1XT1JEICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfZmRjdF9pZmFzdF9tbXgpCisKK0VYVE4oanNpbWRfZmRjdF9pZmFzdF9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgIDsgYWxpZ24gdG8gNjQgYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChEQ1RFTEVNICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgbW0wPSgyMCAyMSAyMiAyMyksIG1tMj0oMjQgMjUgMjYgMjcpCisgICAgOyBtbTE9KDMwIDMxIDMyIDMzKSwgbW0zPSgzNCAzNSAzNiAzNykKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPSgyMCAzMCAyMSAzMSkKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND0oMjIgMzIgMjMgMzMpCisgICAgbW92cSAgICAgICAgbW01LCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9KDI0IDM0IDI1IDM1KQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSgyNiAzNiAyNyAzNykKKworICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisgICAgOyBtbTY9KDAwIDAxIDAyIDAzKSwgbW0xPSgwNCAwNSAwNiAwNykKKyAgICA7IG1tNz0oMTAgMTEgMTIgMTMpLCBtbTM9KDE0IDE1IDE2IDE3KQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT0oMjIgMzIgMjMgMzMpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMiAgICAgOyB3aygxKT0oMjQgMzQgMjUgMzUpCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMDEgMTEpCisgICAgcHVucGNraHdkICAgbW00LCBtbTcgICAgICAgICAgICAgICAgOyBtbTQ9KDAyIDEyIDAzIDEzKQorICAgIG1vdnEgICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW0zICAgICAgICAgICAgICAgIDsgbW0xPSgwNCAxNCAwNSAxNSkKKyAgICBwdW5wY2tod2QgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj0oMDYgMTYgMDcgMTcpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisgICAgcHVucGNraGRxICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNiAyNiAzNik9ZGF0YTYKKyAgICBwdW5wY2toZHEgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CisKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIG1vdnEgICAgICAgIG1tNSwgbW02CisgICAgcHN1YncgICAgICAgbW03LCBtbTIgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHBzdWJ3ICAgICAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgcGFkZHcgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTI9KDIyIDMyIDIzIDMzKQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPSgyNCAzNCAyNSAzNSkKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW02ICAgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdnEgICAgICAgIG1tNywgbW00ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PSgwMiAxMiAyMiAzMik9ZGF0YTIKKyAgICBwdW5wY2toZHEgICBtbTcsIG1tMiAgICAgICAgICAgICAgICA7IG1tNz0oMDMgMTMgMjMgMzMpPWRhdGEzCisgICAgbW92cSAgICAgICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9KDA0IDE0IDI0IDM0KT1kYXRhNAorICAgIHB1bnBja2hkcSAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW03CisgICAgbW92cSAgICAgICAgbW0zLCBtbTQKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgcGFkZHcgICAgICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHBzdWJ3ICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICBwc3VidyAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTUKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHBzdWJ3ICAgICAgIG1tNSwgbW03ICAgICAgICAgICAgICAgIDsgbW01PXRtcDEzCisgICAgcHN1YncgICAgICAgbW0wLCBtbTQgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTIKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tMT10bXAxMAorICAgIHBhZGR3ICAgICAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PXRtcDExCisKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNQorICAgIHBzbGx3ICAgICAgIG1tMCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gIDsgbW0wPXoxCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMQorICAgIG1vdnEgICAgICAgIG1tNCwgbW01CisgICAgcHN1YncgICAgICAgbW0xLCBtbTYgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTQKKyAgICBwc3VidyAgICAgICBtbTUsIG1tMCAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNgorICAgIHBhZGR3ICAgICAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwCisgICAgcGFkZHcgICAgICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92cSAgICAgICAgbW02LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTY9dG1wNgorICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0wPXRtcDcKKworICAgIHBhZGR3ICAgICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgcGFkZHcgICAgICAgbW0zLCBtbTYgICAgICAgICAgICAgICAgOyBtbTM9dG1wMTEKKyAgICBwYWRkdyAgICAgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj10bXAxMiwgbW0wPXRtcDcKKworICAgIHBzbGx3ICAgICAgIG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICBtbTYsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKyAgICBwc2xsdyAgICAgICBtbTMsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgbW0zLCBbR09UT0ZGKGVieCxQV19GMDcwNyldICA7IG1tMz16MworCisgICAgbW92cSAgICAgICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgICAgICA7IG1tMT10bXAxMAorICAgIHBzdWJ3ICAgICAgIG1tMiwgbW02CisgICAgcG11bGh3ICAgICAgbW0yLCBbR09UT0ZGKGVieCxQV19GMDM4MildICA7IG1tMj16NQorICAgIHBtdWxodyAgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfRjA1NDEpXSAgOyBtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisgICAgcG11bGh3ICAgICAgbW02LCBbR09UT0ZGKGVieCxQV19GMTMwNildICA7IG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICAgICAgIDsgbW0xPXoyCisgICAgcGFkZHcgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgICAgICA7IG1tNj16NAorCisgICAgbW92cSAgICAgICAgbW01LCBtbTAKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD16MTMKKyAgICBwYWRkdyAgICAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT16MTEKKworICAgIG1vdnEgICAgICAgIG1tNywgbW0wCisgICAgbW92cSAgICAgICAgbW00LCBtbTUKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMworICAgIHBzdWJ3ICAgICAgIG1tNSwgbW02ICAgICAgICAgICAgICAgIDsgbW01PWRhdGE3CisgICAgcGFkZHcgICAgICAgbW03LCBtbTEgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTUKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IG1tND1kYXRhMQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0wCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisgICAgZGVjICAgICAgICAgZWN4CisgICAgam56ICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChEQ1RFTEVNICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgbW0wPSgwMiAxMiAyMiAzMiksIG1tMj0oNDIgNTIgNjIgNzIpCisgICAgOyBtbTE9KDAzIDEzIDIzIDMzKSwgbW0zPSg0MyA1MyA2MyA3MykKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPSgwMiAwMyAxMiAxMykKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND0oMjIgMjMgMzIgMzMpCisgICAgbW92cSAgICAgICAgbW01LCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9KDQyIDQzIDUyIDUzKQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSg2MiA2MyA3MiA3MykKKworICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisgICAgOyBtbTY9KDAwIDEwIDIwIDMwKSwgbW0xPSg0MCA1MCA2MCA3MCkKKyAgICA7IG1tNz0oMDEgMTEgMjEgMzEpLCBtbTM9KDQxIDUxIDYxIDcxKQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT0oMjIgMjMgMzIgMzMpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMiAgICAgOyB3aygxKT0oNDIgNDMgNTIgNTMpCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMDEgMTAgMTEpCisgICAgcHVucGNraHdkICAgbW00LCBtbTcgICAgICAgICAgICAgICAgOyBtbTQ9KDIwIDIxIDMwIDMxKQorICAgIG1vdnEgICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW0zICAgICAgICAgICAgICAgIDsgbW0xPSg0MCA0MSA1MCA1MSkKKyAgICBwdW5wY2tod2QgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj0oNjAgNjEgNzAgNzEpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisgICAgcHVucGNraGRxICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKKyAgICBwdW5wY2toZHEgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CisKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIG1vdnEgICAgICAgIG1tNSwgbW02CisgICAgcHN1YncgICAgICAgbW03LCBtbTIgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHBzdWJ3ICAgICAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgcGFkZHcgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTI9KDIyIDIzIDMyIDMzKQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPSg0MiA0MyA1MiA1MykKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW02ICAgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdnEgICAgICAgIG1tNywgbW00ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKyAgICBwdW5wY2toZHEgICBtbTcsIG1tMiAgICAgICAgICAgICAgICA7IG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCisgICAgbW92cSAgICAgICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9KDQwIDQxIDQyIDQzKT1kYXRhNAorICAgIHB1bnBja2hkcSAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW03CisgICAgbW92cSAgICAgICAgbW0zLCBtbTQKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgcGFkZHcgICAgICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHBzdWJ3ICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICBwc3VidyAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTUKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHBzdWJ3ICAgICAgIG1tNSwgbW03ICAgICAgICAgICAgICAgIDsgbW01PXRtcDEzCisgICAgcHN1YncgICAgICAgbW0wLCBtbTQgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTIKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tMT10bXAxMAorICAgIHBhZGR3ICAgICAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PXRtcDExCisKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNQorICAgIHBzbGx3ICAgICAgIG1tMCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gIDsgbW0wPXoxCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMQorICAgIG1vdnEgICAgICAgIG1tNCwgbW01CisgICAgcHN1YncgICAgICAgbW0xLCBtbTYgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTQKKyAgICBwc3VidyAgICAgICBtbTUsIG1tMCAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNgorICAgIHBhZGR3ICAgICAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwCisgICAgcGFkZHcgICAgICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92cSAgICAgICAgbW02LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTY9dG1wNgorICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0wPXRtcDcKKworICAgIHBhZGR3ICAgICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgcGFkZHcgICAgICAgbW0zLCBtbTYgICAgICAgICAgICAgICAgOyBtbTM9dG1wMTEKKyAgICBwYWRkdyAgICAgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj10bXAxMiwgbW0wPXRtcDcKKworICAgIHBzbGx3ICAgICAgIG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICBtbTYsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKyAgICBwc2xsdyAgICAgICBtbTMsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgbW0zLCBbR09UT0ZGKGVieCxQV19GMDcwNyldICA7IG1tMz16MworCisgICAgbW92cSAgICAgICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgICAgICA7IG1tMT10bXAxMAorICAgIHBzdWJ3ICAgICAgIG1tMiwgbW02CisgICAgcG11bGh3ICAgICAgbW0yLCBbR09UT0ZGKGVieCxQV19GMDM4MildICA7IG1tMj16NQorICAgIHBtdWxodyAgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfRjA1NDEpXSAgOyBtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisgICAgcG11bGh3ICAgICAgbW02LCBbR09UT0ZGKGVieCxQV19GMTMwNildICA7IG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICAgICAgIDsgbW0xPXoyCisgICAgcGFkZHcgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgICAgICA7IG1tNj16NAorCisgICAgbW92cSAgICAgICAgbW01LCBtbTAKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD16MTMKKyAgICBwYWRkdyAgICAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT16MTEKKworICAgIG1vdnEgICAgICAgIG1tNywgbW0wCisgICAgbW92cSAgICAgICAgbW00LCBtbTUKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMworICAgIHBzdWJ3ICAgICAgIG1tNSwgbW02ICAgICAgICAgICAgICAgIDsgbW01PWRhdGE3CisgICAgcGFkZHcgICAgICAgbW03LCBtbTEgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTUKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IG1tND1kYXRhMQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0wCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgNCpTSVpFT0ZfRENURUxFTQorICAgIGRlYyAgICAgICAgIGVjeAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKzsgICBwb3AgICAgICAgICBlZGkgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcHBpYyAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGZzdC1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGZzdC1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDlkYWRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pmZGN0ZnN0LXNzZTIuYXNtCkBAIC0wLDAgKzEsNDA1IEBACis7Cis7IGpmZGN0ZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBGRENUIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0ZnN0LmM7IHNlZSB0aGUgamZkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDggIDsgMTQgaXMgYWxzbyBPSy4KKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8wXzM4MiBlcXUgIDk4ICA7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEgZXF1IDEzOSAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3IGVxdSAxODEgIDsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNiBlcXUgMzM0ICA7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMzgyIGVxdSBERVNDQUxFKCA0MTA5MDMyMDcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MSBlcXUgREVTQ0FMRSggNTgxMTA0ODg3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcgZXF1IERFU0NBTEUoIDc1OTI1MDEyNCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2IGVxdSBERVNDQUxFKDE0MDI5MTEzMDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMzA2NTYyOTY1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICAgICAgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKToKKworUFdfRjA3MDcgdGltZXMgOCBkdyBGXzBfNzA3IDw8IENPTlNUX1NISUZUCitQV19GMDM4MiB0aW1lcyA4IGR3IEZfMF8zODIgPDwgQ09OU1RfU0hJRlQKK1BXX0YwNTQxIHRpbWVzIDggZHcgRl8wXzU0MSA8PCBDT05TVF9TSElGVAorUFdfRjEzMDYgdGltZXMgOCBkdyBGXzFfMzA2IDw8IENPTlNUX1NISUZUCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMihEQ1RFTEVNICpkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikgICAgICAgKGIpICsgOCAgICAgICAgICAgOyBEQ1RFTEVNICpkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfZmRjdF9pZmFzdF9zc2UyKQorCitFWFROKGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChEQ1RFTEVNICopCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICA7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBwdW5wY2tod2QgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKyAgICA7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisgICAgOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW01ICAgOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQorICAgIHB1bnBja2h3ZCAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBwdW5wY2tod2QgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKyAgICBwdW5wY2toZHEgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgcHVucGNraGRxICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgcHVucGNraGRxICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIHB1bnBja2hkcSAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKT1kYXRhMAorICAgIHB1bnBja2hxZHEgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3Nik9ZGF0YTYKKyAgICBwdW5wY2tocWRxICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMC1kYXRhNz10bXA3CisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soMCldICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMSAgIDsgd2soMCk9dG1wNgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9dG1wNworCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3Mik9ZGF0YTIKKyAgICBwdW5wY2tocWRxICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKT1kYXRhMworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpPWRhdGE0CisgICAgcHVucGNraHFkcSAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSk9ZGF0YTUKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNgorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz10bXAxMworICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj10bXAxMgorICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tMworICAgIHBzbGx3ICAgICAgIHhtbTYsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfRjA3MDcpXSAgOyB4bW02PXoxCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMworICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND1kYXRhNAorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhNgorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMAorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMgorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbd2soMCldICAgOyB4bW0wPXRtcDYKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTY9dG1wNworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9ZGF0YTQKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPWRhdGE2CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW01ICAgICAgICAgICAgICA7IHhtbTI9dG1wMTAKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9dG1wMTEKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIsIHhtbTY9dG1wNworCisgICAgcHNsbHcgICAgICAgeG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICB4bW0wLCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgcHNsbHcgICAgICAgeG1tNSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19GMDcwNyldICA7IHhtbTU9ejMKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTAKKyAgICBwbXVsaHcgICAgICB4bW0yLCBbR09UT0ZGKGVieCxQV19GMDM4MildICA7IHhtbTI9ejUKKyAgICBwbXVsaHcgICAgICB4bW00LCBbR09UT0ZGKGVieCxQV19GMDU0MSldICA7IHhtbTQ9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgIHBtdWxodyAgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBXX0YxMzA2KV0gIDsgeG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgICAgICAgOyB4bW00PXoyCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgICAgICAgOyB4bW0wPXo0CisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW02CisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXoxMworICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz16MTEKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0zCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNCAgICAgICAgICAgICAgOyB4bW02PWRhdGEzCisgICAgcHN1YncgICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWRhdGE3CisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNCAgICAgICAgICAgICAgOyB4bW0yPWRhdGE1CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGExCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKzsgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gIDsgKERDVEVMRU0gKikKKworICAgIDsgeG1tMT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICA7IHhtbTU9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSwgeG1tNj0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICBwdW5wY2tod2QgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soMCldICAgOyB4bW01PWNvbDQKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTY9Y29sNgorCisgICAgOyB4bW01PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCksIHhtbTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIDsgeG1tMj0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW0zPSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNyAgIDsgd2soMCk9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB4bW01PSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgcHVucGNraHdkICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTUsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNT0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgcHVucGNraGRxICAgeG1tMiwgeG1tNiAgICAgICAgICAgICAgOyB4bW0yPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgIHB1bnBja2hkcSAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTY9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW03ICAgOyB3aygxKT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0xLCB4bW02ICAgICAgICAgICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgIHB1bnBja2hkcSAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MykKKyAgICBwdW5wY2toZHEgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9KDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKKyAgICBwdW5wY2tocWRxICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTcsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2CisgICAgcHVucGNraHFkcSAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0xCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PWRhdGExLWRhdGE2PXRtcDYKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTAtZGF0YTc9dG1wNworICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMStkYXRhNj10bXAxCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbd2soMSldICAgOyB4bW0wPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTYgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTEgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCisgICAgcHVucGNraHFkcSAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW00ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAorICAgIHB1bnBja2hxZHEgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tMgorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMytkYXRhND10bXAzCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB4bW0yPWRhdGEyK2RhdGE1PXRtcDIKKyAgICBwc3VidyAgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTUKKyAgICBwc3VidyAgICAgICB4bW0zLCB4bW02ICAgICAgICAgICAgICA7IHhtbTM9dG1wMTMKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHhtbTU9dG1wMTIKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9dG1wMTEKKworICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTMKKyAgICBwc2xsdyAgICAgICB4bW01LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgIHBtdWxodyAgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gIDsgeG1tNT16MQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNAorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTMKKyAgICBwc3VidyAgICAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTQKKyAgICBwc3VidyAgICAgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTYKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW01ICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTIKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPXRtcDYKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9dG1wNworCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyLCB4bW01PXRtcDcKKworICAgIHBzbGx3ICAgICAgIHhtbTcsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcHNsbHcgICAgICAgeG1tMSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKworICAgIHBzbGx3ICAgICAgIHhtbTAsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfRjA3MDcpXSAgOyB4bW0wPXozCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW03ICAgICAgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICBwc3VidyAgICAgICB4bW03LCB4bW0xCisgICAgcG11bGh3ICAgICAgeG1tNywgW0dPVE9GRihlYngsUFdfRjAzODIpXSAgOyB4bW03PXo1CisgICAgcG11bGh3ICAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfRjA1NDEpXSAgOyB4bW00PU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKyAgICBwbXVsaHcgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQV19GMTMwNildICA7IHhtbTE9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgICAgICAgIDsgeG1tND16MgorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgICAgICAgIDsgeG1tMT16NAorCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNQorICAgIHBzdWJ3ICAgICAgIHhtbTUsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNT16MTMKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9ejExCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMworICAgIHBzdWJ3ICAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMworICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz1kYXRhNworICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj1kYXRhNQorICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW01CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW02CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisKKzsgICBwb3AgICAgICAgICBlZGkgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorICAgIHBvcHBpYyAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGludC1hdngyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGludC1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTI1OGVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pmZGN0aW50LWF2eDIuYXNtCkBAIC0wLDAgKzEsMzMzIEBACis7Cis7IGpmZGN0aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAoQVZYMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0aW50LmM7IHNlZSB0aGUgamZkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgIDIKKworJWRlZmluZSBERVNDQUxFX1AxICAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDIgIChDT05TVF9CSVRTICsgUEFTUzFfQklUUykKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yOTggZXF1ICAyNDQ2ICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAzMTk2ICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICA0NDMzICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1ICA2MjcwICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICA3MzczICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICA5NjMzICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1IDEyMjk5ICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IDE1MTM3ICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1IDE2MDY5ICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1IDE2ODE5ICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IDIwOTk1ICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1IDI1MTcyICA7IEZJWCgzLjA3MjcxMTAyNikKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMjk4IGVxdSBERVNDQUxFKCAzMjA2NTI5NTUsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgREVTQ0FMRSggNDE4OTUzMjc2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1IERFU0NBTEUoIDU4MTEwNDg4NywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSBERVNDQUxFKCA4MjE4MDY0MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgREVTQ0FMRSggOTY2MzQyMTExLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1IERFU0NBTEUoMTI2MjU4NjgxMywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSBERVNDQUxFKDE2MTIwMzEyNjcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgREVTQ0FMRSgxOTg0MDE2MTg4LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1IERFU0NBTEUoMjEwNjIyMDM1MCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSBERVNDQUxFKDIyMDQ1MjA2NzMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgREVTQ0FMRSgyNzUxOTA5NTA2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1IERFU0NBTEUoMzI5OTI5ODM0MSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMy4wNzI3MTEwMjYpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBJbi1wbGFjZSA4eDh4MTYtYml0IG1hdHJpeCB0cmFuc3Bvc2UgdXNpbmcgQVZYMiBpbnN0cnVjdGlvbnMKKzsgJTEtJTQ6IElucHV0L291dHB1dCByZWdpc3RlcnMKKzsgJTUtJTg6IFRlbXAgcmVnaXN0ZXJzCisKKyVtYWNybyBkb3RyYW5zcG9zZSA4CisgICAgOyAlMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgIDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgIDsgJTI9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3ICA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICA7ICUzPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisgICAgOyAlND0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgIDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgdnB1bnBja2x3ZCAgJTUsICUxLCAlMgorICAgIHZwdW5wY2tod2QgICU2LCAlMSwgJTIKKyAgICB2cHVucGNrbHdkICAlNywgJTMsICU0CisgICAgdnB1bnBja2h3ZCAgJTgsICUzLCAlNAorICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIDsgJTU9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzICA0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKyAgICA7ICU2PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNyAgNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisgICAgOyAlNz0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMgIDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIDsgJTg9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3ICA2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworICAgIHZwdW5wY2tsZHEgICUxLCAlNSwgJTcKKyAgICB2cHVucGNraGRxICAlMiwgJTUsICU3CisgICAgdnB1bnBja2xkcSAgJTMsICU2LCAlOAorICAgIHZwdW5wY2toZHEgICU0LCAlNiwgJTgKKyAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICA7ICUxPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAgNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgOyAlMj0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMgIDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIDsgJTM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1ICA0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICA7ICU0PSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNyAgNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKyAgICB2cGVybXEgICAgICAlMSwgJTEsIDB4OEQKKyAgICB2cGVybXEgICAgICAlMiwgJTIsIDB4OEQKKyAgICB2cGVybXEgICAgICAlMywgJTMsIDB4RDgKKyAgICB2cGVybXEgICAgICAlNCwgJTQsIDB4RDgKKyAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICA7ICUxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAgMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisgICAgOyAlMj0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMgIDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgIDsgJTM9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0ICAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICA7ICU0PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NiAgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBJbi1wbGFjZSA4eDh4MTYtYml0IHNsb3cgaW50ZWdlciBmb3J3YXJkIERDVCB1c2luZyBBVlgyIGluc3RydWN0aW9ucworOyAlMS0lNDogSW5wdXQvb3V0cHV0IHJlZ2lzdGVycworOyAlNS0lODogVGVtcCByZWdpc3RlcnMKKzsgJTk6ICAgIFBhc3MgKDEgb3IgMikKKworJW1hY3JvIGRvZGN0IDkKKyAgICB2cHN1YncgICAgICAlNSwgJTEsICU0ICAgICAgICAgICAgICA7ICU1PWRhdGExXzAtZGF0YTZfNz10bXA2XzcKKyAgICB2cGFkZHcgICAgICAlNiwgJTEsICU0ICAgICAgICAgICAgICA7ICU2PWRhdGExXzArZGF0YTZfNz10bXAxXzAKKyAgICB2cGFkZHcgICAgICAlNywgJTIsICUzICAgICAgICAgICAgICA7ICU3PWRhdGEzXzIrZGF0YTRfNT10bXAzXzIKKyAgICB2cHN1YncgICAgICAlOCwgJTIsICUzICAgICAgICAgICAgICA7ICU4PWRhdGEzXzItZGF0YTRfNT10bXA0XzUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICB2cGVybTJpMTI4ICAlNiwgJTYsICU2LCAweDAxICAgICAgICA7ICU2PXRtcDBfMQorICAgIHZwYWRkdyAgICAgICUxLCAlNiwgJTcgICAgICAgICAgICAgIDsgJTE9dG1wMF8xK3RtcDNfMj10bXAxMF8xMQorICAgIHZwc3VidyAgICAgICU2LCAlNiwgJTcgICAgICAgICAgICAgIDsgJTY9dG1wMF8xLXRtcDNfMj10bXAxM18xMgorCisgICAgdnBlcm0yaTEyOCAgJTcsICUxLCAlMSwgMHgwMSAgICAgICAgOyAlNz10bXAxMV8xMAorICAgIHZwc2lnbncgICAgICUxLCAlMSwgW0dPVE9GRihlYngsIFBXXzFfTkVHMSldICA7ICUxPXRtcDEwX25lZzExCisgICAgdnBhZGR3ICAgICAgJTcsICU3LCAlMSAgICAgICAgICAgICAgOyAlNz0odG1wMTArdG1wMTEpXyh0bXAxMC10bXAxMSkKKyVpZiAlOSA9PSAxCisgICAgdnBzbGx3ICAgICAgJTEsICU3LCBQQVNTMV9CSVRTICAgICAgOyAlMT1kYXRhMF80CislZWxzZQorICAgIHZwYWRkdyAgICAgICU3LCAlNywgW0dPVE9GRihlYngsIFBXX0RFU0NBTEVfUDJYKV0KKyAgICB2cHNyYXcgICAgICAlMSwgJTcsIFBBU1MxX0JJVFMgICAgICA7ICUxPWRhdGEwXzQKKyVlbmRpZgorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworICAgIDsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisgICAgOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKyAgICA7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisgICAgdnBlcm0yaTEyOCAgJTcsICU2LCAlNiwgMHgwMSAgICAgICAgOyAlNz10bXAxMl8xMworICAgIHZwdW5wY2tsd2QgICUyLCAlNiwgJTcKKyAgICB2cHVucGNraHdkICAlNiwgJTYsICU3CisgICAgdnBtYWRkd2QgICAgJTIsICUyLCBbR09UT0ZGKGVieCwgUFdfRjEzMF9GMDU0X01GMTMwX0YwNTQpXSAgOyAlMj1kYXRhMl82TAorICAgIHZwbWFkZHdkICAgICU2LCAlNiwgW0dPVE9GRihlYngsIFBXX0YxMzBfRjA1NF9NRjEzMF9GMDU0KV0gIDsgJTY9ZGF0YTJfNkgKKworICAgIHZwYWRkZCAgICAgICUyLCAlMiwgW0dPVE9GRihlYngsIFBEX0RFU0NBTEVfUCAlKyAlOSldCisgICAgdnBhZGRkICAgICAgJTYsICU2LCBbR09UT0ZGKGVieCwgUERfREVTQ0FMRV9QICUrICU5KV0KKyAgICB2cHNyYWQgICAgICAlMiwgJTIsIERFU0NBTEVfUCAlKyAlOQorICAgIHZwc3JhZCAgICAgICU2LCAlNiwgREVTQ0FMRV9QICUrICU5CisKKyAgICB2cGFja3NzZHcgICAlMywgJTIsICU2ICAgICAgICAgICAgICA7ICU2PWRhdGEyXzYKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIHZwYWRkdyAgICAgICU3LCAlOCwgJTUgICAgICAgICAgICAgIDsgJTc9dG1wNF81K3RtcDZfNz16M180CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgdnBlcm0yaTEyOCAgJTIsICU3LCAlNywgMHgwMSAgICAgICAgOyAlMj16NF8zCisgICAgdnB1bnBja2x3ZCAgJTYsICU3LCAlMgorICAgIHZwdW5wY2tod2QgICU3LCAlNywgJTIKKyAgICB2cG1hZGR3ZCAgICAlNiwgJTYsIFtHT1RPRkYoZWJ4LCBQV19NRjA3OF9GMTE3X0YwNzhfRjExNyldICA7ICU2PXozXzRMCisgICAgdnBtYWRkd2QgICAgJTcsICU3LCBbR09UT0ZGKGVieCwgUFdfTUYwNzhfRjExN19GMDc4X0YxMTcpXSAgOyAlNz16M180SAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsKKyAgICA7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OworICAgIDsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7CisgICAgOyB0bXA1ID0gdG1wNSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDYgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgOyBkYXRhNyA9IHRtcDQgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHo0OworICAgIDsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKKworICAgIHZwZXJtMmkxMjggICU0LCAlNSwgJTUsIDB4MDEgICAgICAgIDsgJTQ9dG1wN182CisgICAgdnB1bnBja2x3ZCAgJTIsICU4LCAlNAorICAgIHZwdW5wY2tod2QgICU0LCAlOCwgJTQKKyAgICB2cG1hZGR3ZCAgICAlMiwgJTIsIFtHT1RPRkYoZWJ4LCBQV19NRjA2MF9NRjA4OV9NRjA1MF9NRjI1NildICA7ICUyPXRtcDRfNUwKKyAgICB2cG1hZGR3ZCAgICAlNCwgJTQsIFtHT1RPRkYoZWJ4LCBQV19NRjA2MF9NRjA4OV9NRjA1MF9NRjI1NildICA7ICU0PXRtcDRfNUgKKworICAgIHZwYWRkZCAgICAgICUyLCAlMiwgJTYgICAgICAgICAgICAgIDsgJTI9ZGF0YTdfNUwKKyAgICB2cGFkZGQgICAgICAlNCwgJTQsICU3ICAgICAgICAgICAgICA7ICU0PWRhdGE3XzVICisKKyAgICB2cGFkZGQgICAgICAlMiwgJTIsIFtHT1RPRkYoZWJ4LCBQRF9ERVNDQUxFX1AgJSsgJTkpXQorICAgIHZwYWRkZCAgICAgICU0LCAlNCwgW0dPVE9GRihlYngsIFBEX0RFU0NBTEVfUCAlKyAlOSldCisgICAgdnBzcmFkICAgICAgJTIsICUyLCBERVNDQUxFX1AgJSsgJTkKKyAgICB2cHNyYWQgICAgICAlNCwgJTQsIERFU0NBTEVfUCAlKyAlOQorCisgICAgdnBhY2tzc2R3ICAgJTQsICUyLCAlNCAgICAgICAgICAgICAgOyAlND1kYXRhN181CisKKyAgICB2cGVybTJpMTI4ICAlMiwgJTgsICU4LCAweDAxICAgICAgICA7ICUyPXRtcDVfNAorICAgIHZwdW5wY2tsd2QgICU4LCAlNSwgJTIKKyAgICB2cHVucGNraHdkICAlNSwgJTUsICUyCisgICAgdnBtYWRkd2QgICAgJTgsICU4LCBbR09UT0ZGKGVieCwgUFdfRjA1MF9NRjI1Nl9GMDYwX01GMDg5KV0gIDsgJTg9dG1wNl83TAorICAgIHZwbWFkZHdkICAgICU1LCAlNSwgW0dPVE9GRihlYngsIFBXX0YwNTBfTUYyNTZfRjA2MF9NRjA4OSldICA7ICU1PXRtcDZfN0gKKworICAgIHZwYWRkZCAgICAgICU4LCAlOCwgJTYgICAgICAgICAgICAgIDsgJTg9ZGF0YTNfMUwKKyAgICB2cGFkZGQgICAgICAlNSwgJTUsICU3ICAgICAgICAgICAgICA7ICU1PWRhdGEzXzFICisKKyAgICB2cGFkZGQgICAgICAlOCwgJTgsIFtHT1RPRkYoZWJ4LCBQRF9ERVNDQUxFX1AgJSsgJTkpXQorICAgIHZwYWRkZCAgICAgICU1LCAlNSwgW0dPVE9GRihlYngsIFBEX0RFU0NBTEVfUCAlKyAlOSldCisgICAgdnBzcmFkICAgICAgJTgsICU4LCBERVNDQUxFX1AgJSsgJTkKKyAgICB2cHNyYWQgICAgICAlNSwgJTUsIERFU0NBTEVfUCAlKyAlOQorCisgICAgdnBhY2tzc2R3ICAgJTIsICU4LCAlNSAgICAgICAgICAgICAgOyAlMj1kYXRhM18xCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfZmRjdF9pc2xvd19hdngyKQorCitFWFROKGpjb25zdF9mZGN0X2lzbG93X2F2eDIpOgorCitQV19GMTMwX0YwNTRfTUYxMzBfRjA1NCAgICB0aW1lcyA0ICBkdyAgKEZfMF81NDEgKyBGXzBfNzY1KSwgIEZfMF81NDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIDQgIGR3ICAoRl8wXzU0MSAtIEZfMV84NDcpLCAgRl8wXzU0MQorUFdfTUYwNzhfRjExN19GMDc4X0YxMTcgICAgdGltZXMgNCAgZHcgIChGXzFfMTc1IC0gRl8xXzk2MSksICBGXzFfMTc1CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA0ICBkdyAgKEZfMV8xNzUgLSBGXzBfMzkwKSwgIEZfMV8xNzUKK1BXX01GMDYwX01GMDg5X01GMDUwX01GMjU2IHRpbWVzIDQgIGR3ICAoRl8wXzI5OCAtIEZfMF84OTkpLCAtRl8wXzg5OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgNCAgZHcgIChGXzJfMDUzIC0gRl8yXzU2MiksIC1GXzJfNTYyCitQV19GMDUwX01GMjU2X0YwNjBfTUYwODkgICB0aW1lcyA0ICBkdyAgKEZfM18wNzIgLSBGXzJfNTYyKSwgLUZfMl81NjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIDQgIGR3ICAoRl8xXzUwMSAtIEZfMF84OTkpLCAtRl8wXzg5OQorUERfREVTQ0FMRV9QMSAgICAgICAgICAgICAgdGltZXMgOCAgZGQgIDEgPDwgKERFU0NBTEVfUDEgLSAxKQorUERfREVTQ0FMRV9QMiAgICAgICAgICAgICAgdGltZXMgOCAgZGQgIDEgPDwgKERFU0NBTEVfUDIgLSAxKQorUFdfREVTQ0FMRV9QMlggICAgICAgICAgICAgdGltZXMgMTYgZHcgIDEgPDwgKFBBU1MxX0JJVFMgLSAxKQorUFdfMV9ORUcxICAgICAgICAgICAgICAgICAgdGltZXMgOCAgZHcgIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIDggIGR3IC0xCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfaXNsb3dfYXZ4MihEQ1RFTEVNICpkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikgICAgICAgKGIpICsgOCAgICAgICAgICAgOyBEQ1RFTEVNICpkYXRhCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2lzbG93X2F2eDIpCisKK0VYVE4oanNpbWRfZmRjdF9pc2xvd19hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVicCldICA7IChEQ1RFTEVNICopCisKKyAgICB2bW92ZHF1ICAgICB5bW00LCBZTU1XT1JEIFtZTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICB2bW92ZHF1ICAgICB5bW01LCBZTU1XT1JEIFtZTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICB2bW92ZHF1ICAgICB5bW02LCBZTU1XT1JEIFtZTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICB2bW92ZHF1ICAgICB5bW03LCBZTU1XT1JEIFtZTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICA7IHltbTQ9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3ICAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICA7IHltbTU9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3ICAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICA7IHltbTY9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3ICA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICA7IHltbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3ICA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworICAgIHZwZXJtMmkxMjggIHltbTAsIHltbTQsIHltbTYsIDB4MjAKKyAgICB2cGVybTJpMTI4ICB5bW0xLCB5bW00LCB5bW02LCAweDMxCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tNSwgeW1tNywgMHgyMAorICAgIHZwZXJtMmkxMjggIHltbTMsIHltbTUsIHltbTcsIDB4MzEKKyAgICA7IHltbTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3ICA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKyAgICA7IHltbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3ICA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICA7IHltbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3ICA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKyAgICA7IHltbTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3ICA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworICAgIGRvdHJhbnNwb3NlIHltbTAsIHltbTEsIHltbTIsIHltbTMsIHltbTQsIHltbTUsIHltbTYsIHltbTcKKworICAgIGRvZGN0ICAgICAgIHltbTAsIHltbTEsIHltbTIsIHltbTMsIHltbTQsIHltbTUsIHltbTYsIHltbTcsIDEKKyAgICA7IHltbTA9ZGF0YTBfNCwgeW1tMT1kYXRhM18xLCB5bW0yPWRhdGEyXzYsIHltbTM9ZGF0YTdfNQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisgICAgdnBlcm0yaTEyOCAgeW1tNCwgeW1tMSwgeW1tMywgMHgyMCAgOyB5bW00PWRhdGEzXzcKKyAgICB2cGVybTJpMTI4ICB5bW0xLCB5bW0xLCB5bW0zLCAweDMxICA7IHltbTE9ZGF0YTFfNQorCisgICAgZG90cmFuc3Bvc2UgeW1tMCwgeW1tMSwgeW1tMiwgeW1tNCwgeW1tMywgeW1tNSwgeW1tNiwgeW1tNworCisgICAgZG9kY3QgICAgICAgeW1tMCwgeW1tMSwgeW1tMiwgeW1tNCwgeW1tMywgeW1tNSwgeW1tNiwgeW1tNywgMgorICAgIDsgeW1tMD1kYXRhMF80LCB5bW0xPWRhdGEzXzEsIHltbTI9ZGF0YTJfNiwgeW1tND1kYXRhN181CisKKyAgICB2cGVybTJpMTI4IHltbTMsIHltbTAsIHltbTEsIDB4MzAgICA7IHltbTM9ZGF0YTBfMQorICAgIHZwZXJtMmkxMjggeW1tNSwgeW1tMiwgeW1tMSwgMHgyMCAgIDsgeW1tNT1kYXRhMl8zCisgICAgdnBlcm0yaTEyOCB5bW02LCB5bW0wLCB5bW00LCAweDMxICAgOyB5bW02PWRhdGE0XzUKKyAgICB2cGVybTJpMTI4IHltbTcsIHltbTIsIHltbTQsIDB4MjEgICA7IHltbTc9ZGF0YTZfNworCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB5bW0zCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB5bW01CisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB5bW02CisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB5bW03CisKKyAgICB2emVyb3VwcGVyCis7ICAgcG9wICAgICAgICAgZWRpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwb3AgICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pmZGN0aW50LW1teC5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3RpbnQtbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmJkOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pmZGN0aW50LW1teC5hc20KQEAgLTAsMCArMSw2MjIgQEAKKzsKKzsgamZkY3RpbnQuYXNtIC0gYWNjdXJhdGUgaW50ZWdlciBGRENUIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4IGVxdSAgMjQ0NiAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgMzE5NiAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgNDQzMyAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgNjI3MCAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgNzM3MyAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgOTYzMyAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAxMjI5OSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAxNTEzNyAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAxNjA2OSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAxNjgxOSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAyMDk5NSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAyNTE3MiAgOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8wXzI5OCBlcXUgREVTQ0FMRSggMzIwNjUyOTU1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1IERFU0NBTEUoIDQxODk1MzI3NiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSBERVNDQUxFKCA1ODExMDQ4ODcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgREVTQ0FMRSggODIxODA2NDEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1IERFU0NBTEUoIDk2NjM0MjExMSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSBERVNDQUxFKDEyNjI1ODY4MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgREVTQ0FMRSgxNjEyMDMxMjY3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IERFU0NBTEUoMTk4NDAxNjE4OCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSBERVNDQUxFKDIxMDYyMjAzNTAsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgREVTQ0FMRSgyMjA0NTIwNjczLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IERFU0NBTEUoMjc1MTkwOTUwNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSBERVNDQUxFKDMyOTkyOTgzNDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaXNsb3dfbW14KQorCitFWFROKGpjb25zdF9mZGN0X2lzbG93X21teCk6CisKK1BXX0YxMzBfRjA1NCAgIHRpbWVzIDIgZHcgIChGXzBfNTQxICsgRl8wXzc2NSksICBGXzBfNTQxCitQV19GMDU0X01GMTMwICB0aW1lcyAyIGR3ICBGXzBfNTQxLCAoRl8wXzU0MSAtIEZfMV84NDcpCitQV19NRjA3OF9GMTE3ICB0aW1lcyAyIGR3ICAoRl8xXzE3NSAtIEZfMV85NjEpLCAgRl8xXzE3NQorUFdfRjExN19GMDc4ICAgdGltZXMgMiBkdyAgRl8xXzE3NSwgKEZfMV8xNzUgLSBGXzBfMzkwKQorUFdfTUYwNjBfTUYwODkgdGltZXMgMiBkdyAgKEZfMF8yOTggLSBGXzBfODk5KSwgLUZfMF84OTkKK1BXX01GMDg5X0YwNjAgIHRpbWVzIDIgZHcgLUZfMF84OTksIChGXzFfNTAxIC0gRl8wXzg5OSkKK1BXX01GMDUwX01GMjU2IHRpbWVzIDIgZHcgIChGXzJfMDUzIC0gRl8yXzU2MiksIC1GXzJfNTYyCitQV19NRjI1Nl9GMDUwICB0aW1lcyAyIGR3IC1GXzJfNTYyLCAoRl8zXzA3MiAtIEZfMl81NjIpCitQRF9ERVNDQUxFX1AxICB0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxIC0gMSkKK1BEX0RFU0NBTEVfUDIgIHRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDIgLSAxKQorUFdfREVTQ0FMRV9QMlggdGltZXMgNCBkdyAgMSA8PCAoUEFTUzFfQklUUyAtIDEpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfaXNsb3dfbW14KERDVEVMRU0gKmRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKSAgICAgICAoYikgKyA4ICAgICAgICAgICA7IERDVEVMRU0gKmRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9NTVdPUkQgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2lzbG93X21teCkKKworRVhUTihqc2ltZF9mZGN0X2lzbG93X21teCk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd2soMCldCisgICAgcHVzaHBpYyAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWRpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gIDsgKERDVEVMRU0gKikKKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvNAorICAgIGFsaWdueCAgICAgIDE2LCA3Cisucm93bG9vcDoKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisgICAgOyBtbTA9KDIwIDIxIDIyIDIzKSwgbW0yPSgyNCAyNSAyNiAyNykKKyAgICA7IG1tMT0oMzAgMzEgMzIgMzMpLCBtbTM9KDM0IDM1IDM2IDM3KQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9KDIwIDMwIDIxIDMxKQorICAgIHB1bnBja2h3ZCAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW00PSgyMiAzMiAyMyAzMykKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj0oMjQgMzQgMjUgMzUpCisgICAgcHVucGNraHdkICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9KDI2IDM2IDI3IDM3KQorCisgICAgbW92cSAgICAgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKyAgICA7IG1tNj0oMDAgMDEgMDIgMDMpLCBtbTE9KDA0IDA1IDA2IDA3KQorICAgIDsgbW03PSgxMCAxMSAxMiAxMyksIG1tMz0oMTQgMTUgMTYgMTcpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW00ICAgICA7IHdrKDApPSgyMiAzMiAyMyAzMykKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW0yICAgICA7IHdrKDEpPSgyNCAzNCAyNSAzNSkKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW02ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tNiwgbW03ICAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCAwMSAxMSkKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tNyAgICAgICAgICAgICAgICA7IG1tND0oMDIgMTIgMDMgMTMpCisgICAgbW92cSAgICAgICAgbW0yLCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9KDA0IDE0IDA1IDE1KQorICAgIHB1bnBja2h3ZCAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNiAwNyAxNykKKworICAgIG1vdnEgICAgICAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNiwgbW0wICAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCAyMCAzMCk9ZGF0YTAKKyAgICBwdW5wY2toZHEgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IG1tNz0oMDEgMTEgMjEgMzEpPWRhdGExCisgICAgbW92cSAgICAgICAgbW0zLCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0yLCBtbTUgICAgICAgICAgICAgICAgOyBtbTI9KDA2IDE2IDI2IDM2KT1kYXRhNgorICAgIHB1bnBja2hkcSAgIG1tMywgbW01ICAgICAgICAgICAgICAgIDsgbW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW03CisgICAgbW92cSAgICAgICAgbW01LCBtbTYKKyAgICBwc3VidyAgICAgICBtbTcsIG1tMiAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMS1kYXRhNj10bXA2CisgICAgcHN1YncgICAgICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgIHBhZGR3ICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0wPWRhdGExK2RhdGE2PXRtcDEKKyAgICBwYWRkdyAgICAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT1kYXRhMCtkYXRhNz10bXAwCisKKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbd2soMCldICAgICA7IG1tMj0oMjIgMzIgMjMgMzMpCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTM9KDI0IDM0IDI1IDM1KQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMCldLCBtbTcgICAgIDsgd2soMCk9dG1wNgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTYgICAgIDsgd2soMSk9dG1wNworCisgICAgbW92cSAgICAgICAgbW03LCBtbTQgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9KDAyIDEyIDIyIDMyKT1kYXRhMgorICAgIHB1bnBja2hkcSAgIG1tNywgbW0yICAgICAgICAgICAgICAgIDsgbW03PSgwMyAxMyAyMyAzMyk9ZGF0YTMKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMSAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTEsIG1tMyAgICAgICAgICAgICAgICA7IG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisgICAgcHVucGNraGRxICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9KDA1IDE1IDI1IDM1KT1kYXRhNQorCisgICAgbW92cSAgICAgICAgbW0yLCBtbTcKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNAorICAgIHBhZGR3ICAgICAgIG1tNywgbW0xICAgICAgICAgICAgICAgIDsgbW03PWRhdGEzK2RhdGE0PXRtcDMKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IG1tND1kYXRhMitkYXRhNT10bXAyCisgICAgcHN1YncgICAgICAgbW0yLCBtbTEgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHBzdWJ3ICAgICAgIG1tMywgbW02ICAgICAgICAgICAgICAgIDsgbW0zPWRhdGEyLWRhdGE1PXRtcDUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNQorICAgIG1vdnEgICAgICAgIG1tNiwgbW0wCisgICAgcGFkZHcgICAgICAgbW01LCBtbTcgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTAKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNCAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQorICAgIHBzdWJ3ICAgICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEzCisgICAgcHN1YncgICAgICAgbW02LCBtbTQgICAgICAgICAgICAgICAgOyBtbTY9dG1wMTIKKworICAgIG1vdnEgICAgICAgIG1tNywgbW01CisgICAgcGFkZHcgICAgICAgbW01LCBtbTAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTArdG1wMTEKKyAgICBwc3VidyAgICAgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IG1tNz10bXAxMC10bXAxMQorCisgICAgcHNsbHcgICAgICAgbW01LCBQQVNTMV9CSVRTICAgICAgICAgOyBtbTU9ZGF0YTAKKyAgICBwc2xsdyAgICAgICBtbTcsIFBBU1MxX0JJVFMgICAgICAgICA7IG1tNz1kYXRhNAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7CisgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICA7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworICAgIDsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tMT10bXAxMworICAgIG1vdnEgICAgICAgIG1tMCwgbW0xCisgICAgcHVucGNrbHdkICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyBtbTY9dG1wMTIKKyAgICBwdW5wY2tod2QgICBtbTAsIG1tNgorICAgIG1vdnEgICAgICAgIG1tMSwgbW00CisgICAgbW92cSAgICAgICAgbW02LCBtbTAKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldICAgOyBtbTQ9ZGF0YTJMCisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgbW0wPWRhdGEySAorICAgIHBtYWRkd2QgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICA7IG1tMT1kYXRhNkwKKyAgICBwbWFkZHdkICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgOyBtbTY9ZGF0YTZICisKKyAgICBwYWRkZCAgICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBhZGRkICAgICAgIG1tMCwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgcHNyYWQgICAgICAgbW00LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgbW0wLCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwYWRkZCAgICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBzcmFkICAgICAgIG1tMSwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIG1tNiwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIKKyAgICBwYWNrc3NkdyAgICBtbTEsIG1tNiAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNgorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbd2soMCldICAgICA7IG1tNT10bXA2CisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTc9dG1wNworCisgICAgbW92cSAgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9dG1wNAorICAgIG1vdnEgICAgICAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW0zPXRtcDUKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNSAgICAgICAgICAgICAgICA7IG1tMD16MworICAgIHBhZGR3ICAgICAgIG1tNiwgbW03ICAgICAgICAgICAgICAgIDsgbW02PXo0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgbW92cSAgICAgICAgbW00LCBtbTAKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tMAorICAgIHB1bnBja2x3ZCAgIG1tNCwgbW02CisgICAgcHVucGNraHdkICAgbW0xLCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNAorICAgIG1vdnEgICAgICAgIG1tNiwgbW0xCisgICAgcG1hZGR3ZCAgICAgbW00LCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gIDsgbW00PXozTAorICAgIHBtYWRkd2QgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IG1tMT16M0gKKyAgICBwbWFkZHdkICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgOyBtbTA9ejRMCisgICAgcG1hZGR3ZCAgICAgbW02LCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgbW02PXo0SAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT16M0wKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW0xICAgICA7IHdrKDEpPXozSAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsKKyAgICA7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OworICAgIDsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7CisgICAgOyB0bXA1ID0gdG1wNSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDYgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgOyBkYXRhNyA9IHRtcDQgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHo0OworICAgIDsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0yCisgICAgbW92cSAgICAgICAgbW0xLCBtbTIKKyAgICBwdW5wY2tsd2QgICBtbTQsIG1tNworICAgIHB1bnBja2h3ZCAgIG1tMSwgbW03CisgICAgbW92cSAgICAgICAgbW0yLCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMQorICAgIHBtYWRkd2QgICAgIG1tNCwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgOyBtbTQ9dG1wNEwKKyAgICBwbWFkZHdkICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gIDsgbW0xPXRtcDRICisgICAgcG1hZGR3ZCAgICAgbW0yLCBbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICA7IG1tMj10bXA3TAorICAgIHBtYWRkd2QgICAgIG1tNywgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyBtbTc9dG1wN0gKKworICAgIHBhZGRkICAgICAgIG1tNCwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW00PWRhdGE3TAorICAgIHBhZGRkICAgICAgIG1tMSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0xPWRhdGE3SAorICAgIHBhZGRkICAgICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPWRhdGExTAorICAgIHBhZGRkICAgICAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgbW03PWRhdGExSAorCisgICAgcGFkZGQgICAgICAgbW00LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwYWRkZCAgICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBzcmFkICAgICAgIG1tNCwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIG1tMSwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIG1tMiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgcGFkZGQgICAgICAgbW03LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwc3JhZCAgICAgICBtbTIsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICBtbTcsIERFU0NBTEVfUDEKKworICAgIHBhY2tzc2R3ICAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW00PWRhdGE3CisgICAgcGFja3NzZHcgICAgbW0yLCBtbTcgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTEKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMgorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTMKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMworICAgIHB1bnBja2x3ZCAgIG1tMSwgbW01CisgICAgcHVucGNraHdkICAgbW03LCBtbTUKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMQorICAgIG1vdnEgICAgICAgIG1tNSwgbW03CisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICA7IG1tMT10bXA1TAorICAgIHBtYWRkd2QgICAgIG1tNywgW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgOyBtbTc9dG1wNUgKKyAgICBwbWFkZHdkICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgbW0zPXRtcDZMCisgICAgcG1hZGR3ZCAgICAgbW01LCBbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICA7IG1tNT10bXA2SAorCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTAgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTVMCisgICAgcGFkZGQgICAgICAgbW03LCBtbTYgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTVICisgICAgcGFkZGQgICAgICAgbW0zLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTM9ZGF0YTNMCisgICAgcGFkZGQgICAgICAgbW01LCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTU9ZGF0YTNICisKKyAgICBwYWRkZCAgICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBhZGRkICAgICAgIG1tNywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgcHNyYWQgICAgICAgbW0xLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgbW03LCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgbW0zLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwYWRkZCAgICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBzcmFkICAgICAgIG1tMywgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIG1tNSwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTUKKyAgICBwYWNrc3NkdyAgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMworCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0zCisKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisgICAgZGVjICAgICAgICAgZWN4CisgICAgam56ICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICA7IChEQ1RFTEVNICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgbW0wPSgwMiAxMiAyMiAzMiksIG1tMj0oNDIgNTIgNjIgNzIpCisgICAgOyBtbTE9KDAzIDEzIDIzIDMzKSwgbW0zPSg0MyA1MyA2MyA3MykKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPSgwMiAwMyAxMiAxMykKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND0oMjIgMjMgMzIgMzMpCisgICAgbW92cSAgICAgICAgbW01LCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9KDQyIDQzIDUyIDUzKQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSg2MiA2MyA3MiA3MykKKworICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisgICAgOyBtbTY9KDAwIDEwIDIwIDMwKSwgbW0xPSg0MCA1MCA2MCA3MCkKKyAgICA7IG1tNz0oMDEgMTEgMjEgMzEpLCBtbTM9KDQxIDUxIDYxIDcxKQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT0oMjIgMjMgMzIgMzMpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMiAgICAgOyB3aygxKT0oNDIgNDMgNTIgNTMpCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMDEgMTAgMTEpCisgICAgcHVucGNraHdkICAgbW00LCBtbTcgICAgICAgICAgICAgICAgOyBtbTQ9KDIwIDIxIDMwIDMxKQorICAgIG1vdnEgICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW0zICAgICAgICAgICAgICAgIDsgbW0xPSg0MCA0MSA1MCA1MSkKKyAgICBwdW5wY2tod2QgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj0oNjAgNjEgNzAgNzEpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTYsIG1tMCAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisgICAgcHVucGNraGRxICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKKyAgICBwdW5wY2toZHEgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CisKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIG1vdnEgICAgICAgIG1tNSwgbW02CisgICAgcHN1YncgICAgICAgbW03LCBtbTIgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHBzdWJ3ICAgICAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgcGFkZHcgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTI9KDIyIDIzIDMyIDMzKQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPSg0MiA0MyA1MiA1MykKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW02ICAgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdnEgICAgICAgIG1tNywgbW00ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKyAgICBwdW5wY2toZHEgICBtbTcsIG1tMiAgICAgICAgICAgICAgICA7IG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCisgICAgbW92cSAgICAgICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9KDQwIDQxIDQyIDQzKT1kYXRhNAorICAgIHB1bnBja2hkcSAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW03CisgICAgbW92cSAgICAgICAgbW0zLCBtbTQKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgcGFkZHcgICAgICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHBzdWJ3ICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICBwc3VidyAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTUKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHBhZGR3ICAgICAgIG1tNSwgbW03ICAgICAgICAgICAgICAgIDsgbW01PXRtcDEwCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTQgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTEKKyAgICBwc3VidyAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tMT10bXAxMworICAgIHBzdWJ3ICAgICAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PXRtcDEyCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNQorICAgIHBhZGR3ICAgICAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW01PXRtcDEwK3RtcDExCisgICAgcHN1YncgICAgICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMTAtdG1wMTEKKworICAgIHBhZGR3ICAgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfREVTQ0FMRV9QMlgpXQorICAgIHBhZGR3ICAgICAgIG1tNywgW0dPVE9GRihlYngsUFdfREVTQ0FMRV9QMlgpXQorICAgIHBzcmF3ICAgICAgIG1tNSwgUEFTUzFfQklUUyAgICAgICAgIDsgbW01PWRhdGEwCisgICAgcHNyYXcgICAgICAgbW03LCBQQVNTMV9CSVRTICAgICAgICAgOyBtbTc9ZGF0YTQKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworICAgIDsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisgICAgOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKyAgICA7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisgICAgbW92cSAgICAgICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTMKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tMQorICAgIHB1bnBja2x3ZCAgIG1tNCwgbW02ICAgICAgICAgICAgICAgIDsgbW02PXRtcDEyCisgICAgcHVucGNraHdkICAgbW0wLCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNAorICAgIG1vdnEgICAgICAgIG1tNiwgbW0wCisgICAgcG1hZGR3ZCAgICAgbW00LCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgbW00PWRhdGEyTAorICAgIHBtYWRkd2QgICAgIG1tMCwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IG1tMD1kYXRhMkgKKyAgICBwbWFkZHdkICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgOyBtbTE9ZGF0YTZMCisgICAgcG1hZGR3ZCAgICAgbW02LCBbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gIDsgbW02PWRhdGE2SAorCisgICAgcGFkZGQgICAgICAgbW00LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwYWRkZCAgICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBzcmFkICAgICAgIG1tNCwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIG1tMCwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIG1tMSwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgcGFkZGQgICAgICAgbW02LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwc3JhZCAgICAgICBtbTEsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICBtbTYsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgbW00PWRhdGEyCisgICAgcGFja3NzZHcgICAgbW0xLCBtbTYgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTYKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTU9dG1wNgorICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW03PXRtcDcKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0yPXRtcDQKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMyAgICAgICAgICAgICAgICA7IG1tMz10bXA1CisgICAgcGFkZHcgICAgICAgbW0wLCBtbTUgICAgICAgICAgICAgICAgOyBtbTA9ejMKKyAgICBwYWRkdyAgICAgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj16NAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsd2QgICBtbTQsIG1tNgorICAgIHB1bnBja2h3ZCAgIG1tMSwgbW02CisgICAgbW92cSAgICAgICAgbW0wLCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMQorICAgIHBtYWRkd2QgICAgIG1tNCwgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IG1tND16M0wKKyAgICBwbWFkZHdkICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgOyBtbTE9ejNICisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgbW0wPXo0TAorICAgIHBtYWRkd2QgICAgIG1tNiwgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IG1tNj16NEgKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9ejNMCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMSAgICAgOyB3aygxKT16M0gKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisgICAgOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKKyAgICA7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKKyAgICA7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworICAgIDsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworICAgIDsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworICAgIDsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgIDsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKyAgICA7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMgorICAgIG1vdnEgICAgICAgIG1tMSwgbW0yCisgICAgcHVucGNrbHdkICAgbW00LCBtbTcKKyAgICBwdW5wY2tod2QgICBtbTEsIG1tNworICAgIG1vdnEgICAgICAgIG1tMiwgbW00CisgICAgbW92cSAgICAgICAgbW03LCBtbTEKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gIDsgbW00PXRtcDRMCisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IG1tMT10bXA0SAorICAgIHBtYWRkd2QgICAgIG1tMiwgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyBtbTI9dG1wN0wKKyAgICBwbWFkZHdkICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgIDsgbW03PXRtcDdICisKKyAgICBwYWRkZCAgICAgICBtbTQsIE1NV09SRCBbd2soMCldICAgICA7IG1tND1kYXRhN0wKKyAgICBwYWRkZCAgICAgICBtbTEsIE1NV09SRCBbd2soMSldICAgICA7IG1tMT1kYXRhN0gKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tMCAgICAgICAgICAgICAgICA7IG1tMj1kYXRhMUwKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tNiAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMUgKKworICAgIHBhZGRkICAgICAgIG1tNCwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgcGFkZGQgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwc3JhZCAgICAgICBtbTQsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICBtbTEsIERFU0NBTEVfUDIKKyAgICBwYWRkZCAgICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBhZGRkICAgICAgIG1tNywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgcHNyYWQgICAgICAgbW0yLCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgbW03LCBERVNDQUxFX1AyCisKKyAgICBwYWNrc3NkdyAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND1kYXRhNworICAgIHBhY2tzc2R3ICAgIG1tMiwgbW03ICAgICAgICAgICAgICAgIDsgbW0yPWRhdGExCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTIKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW0zCisgICAgbW92cSAgICAgICAgbW03LCBtbTMKKyAgICBwdW5wY2tsd2QgICBtbTEsIG1tNQorICAgIHB1bnBja2h3ZCAgIG1tNywgbW01CisgICAgbW92cSAgICAgICAgbW0zLCBtbTEKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tNworICAgIHBtYWRkd2QgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgOyBtbTE9dG1wNUwKKyAgICBwbWFkZHdkICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgbW03PXRtcDVICisgICAgcG1hZGR3ZCAgICAgbW0zLCBbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICA7IG1tMz10bXA2TAorICAgIHBtYWRkd2QgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgOyBtbTU9dG1wNkgKKworICAgIHBhZGRkICAgICAgIG1tMSwgbW0wICAgICAgICAgICAgICAgIDsgbW0xPWRhdGE1TAorICAgIHBhZGRkICAgICAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgbW03PWRhdGE1SAorICAgIHBhZGRkICAgICAgIG1tMywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0zPWRhdGEzTAorICAgIHBhZGRkICAgICAgIG1tNSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW01PWRhdGEzSAorCisgICAgcGFkZGQgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwYWRkZCAgICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBzcmFkICAgICAgIG1tMSwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIG1tNywgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIG1tMywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgcGFkZGQgICAgICAgbW01LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwc3JhZCAgICAgICBtbTMsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICBtbTUsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgbW0xPWRhdGE1CisgICAgcGFja3NzZHcgICAgbW0zLCBtbTUgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTMKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMworCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIDQqU0laRU9GX0RDVEVMRU0KKyAgICBkZWMgICAgICAgICBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCis7ICAgcG9wICAgICAgICAgZWRpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwb3AgICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3RpbnQtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamZkY3RpbnQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3ZGNjMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qZmRjdGludC1zc2UyLmFzbQpAQCAtMCwwICsxLDYzNSBAQAorOworOyBqZmRjdGludC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIEZEQ1QgKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4IGVxdSAgMjQ0NiAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgMzE5NiAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgNDQzMyAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgNjI3MCAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgNzM3MyAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgOTYzMyAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAxMjI5OSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAxNTEzNyAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAxNjA2OSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAxNjgxOSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAyMDk5NSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAyNTE3MiAgOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8wXzI5OCBlcXUgREVTQ0FMRSggMzIwNjUyOTU1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1IERFU0NBTEUoIDQxODk1MzI3NiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSBERVNDQUxFKCA1ODExMDQ4ODcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgREVTQ0FMRSggODIxODA2NDEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1IERFU0NBTEUoIDk2NjM0MjExMSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSBERVNDQUxFKDEyNjI1ODY4MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgREVTQ0FMRSgxNjEyMDMxMjY3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IERFU0NBTEUoMTk4NDAxNjE4OCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSBERVNDQUxFKDIxMDYyMjAzNTAsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgREVTQ0FMRSgyMjA0NTIwNjczLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IERFU0NBTEUoMjc1MTkwOTUwNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSBERVNDQUxFKDMyOTkyOTgzNDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikKKworRVhUTihqY29uc3RfZmRjdF9pc2xvd19zc2UyKToKKworUFdfRjEzMF9GMDU0ICAgdGltZXMgNCBkdyAgKEZfMF81NDEgKyBGXzBfNzY1KSwgIEZfMF81NDEKK1BXX0YwNTRfTUYxMzAgIHRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxIC0gRl8xXzg0NykKK1BXX01GMDc4X0YxMTcgIHRpbWVzIDQgZHcgIChGXzFfMTc1IC0gRl8xXzk2MSksICBGXzFfMTc1CitQV19GMTE3X0YwNzggICB0aW1lcyA0IGR3ICBGXzFfMTc1LCAoRl8xXzE3NSAtIEZfMF8zOTApCitQV19NRjA2MF9NRjA4OSB0aW1lcyA0IGR3ICAoRl8wXzI5OCAtIEZfMF84OTkpLCAtRl8wXzg5OQorUFdfTUYwODlfRjA2MCAgdGltZXMgNCBkdyAtRl8wXzg5OSwgKEZfMV81MDEgLSBGXzBfODk5KQorUFdfTUYwNTBfTUYyNTYgdGltZXMgNCBkdyAgKEZfMl8wNTMgLSBGXzJfNTYyKSwgLUZfMl81NjIKK1BXX01GMjU2X0YwNTAgIHRpbWVzIDQgZHcgLUZfMl81NjIsIChGXzNfMDcyIC0gRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEgIHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDEgLSAxKQorUERfREVTQ0FMRV9QMiAgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMiAtIDEpCitQV19ERVNDQUxFX1AyWCB0aW1lcyA4IGR3ICAxIDw8IChQQVNTMV9CSVRTIC0gMSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pc2xvd19zc2UyKERDVEVMRU0gKmRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKSAgICAgICAoYikgKyA4ICAgICAgICAgICA7IERDVEVMRU0gKmRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICA2CisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oanNpbWRfZmRjdF9pc2xvd19zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd2soMCldCisgICAgcHVzaHBpYyAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWRpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gIDsgKERDVEVMRU0gKikKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisgICAgOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIDsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgeG1tNj0oIDQgMTIgMjAgMjggMzYgNDQgNTIgNjApLCB4bW0xPSggNiAxNCAyMiAzMCAzOCA0NiA1NCA2MikKKyAgICA7IHhtbTc9KCA1IDEzIDIxIDI5IDM3IDQ1IDUzIDYxKSwgeG1tMz0oIDcgMTUgMjMgMzEgMzkgNDcgNTUgNjMpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTUgICA7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgcHVucGNraHdkICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorICAgIHB1bnBja2hkcSAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tNyAgIDsgd2soMik9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDMpXSwgeG1tMiAgIDsgd2soMyk9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICBwdW5wY2toZHEgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgcHVucGNraGRxICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisgICAgcHVucGNraHFkcSAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorICAgIHB1bnBja2hxZHEgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMAorICAgIHBzdWJ3ICAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tNT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0xICAgOyB3aygwKT10bXA2CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT10bXA3CisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgorICAgIHB1bnBja2hxZHEgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKKyAgICBwdW5wY2tocWRxICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW00ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTMrZGF0YTQ9dG1wMworICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNCAgICAgICAgICAgICAgOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTItZGF0YTU9dG1wNQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW02CisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PXRtcDExCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PXRtcDEzCisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPXRtcDEwK3RtcDExCisgICAgcHN1YncgICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwLXRtcDExCisKKyAgICBwc2xsdyAgICAgICB4bW0zLCBQQVNTMV9CSVRTICAgICAgICA7IHhtbTM9ZGF0YTAKKyAgICBwc2xsdyAgICAgICB4bW0xLCBQQVNTMV9CSVRTICAgICAgICA7IHhtbTE9ZGF0YTQKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tMyAgIDsgd2soMik9ZGF0YTAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTEgICA7IHdrKDMpPWRhdGE0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7CisgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICA7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworICAgIDsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTMKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00CisgICAgcHVucGNrbHdkICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW02CisgICAgcG1hZGR3ZCAgICAgeG1tNywgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IHhtbTc9ZGF0YTJMCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IHhtbTY9ZGF0YTJICisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICA7IHhtbTQ9ZGF0YTZMCisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICA7IHhtbTA9ZGF0YTZICisKKyAgICBwYWRkZCAgICAgICB4bW03LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwYWRkZCAgICAgICB4bW02LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBhZGRkICAgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBzcmFkICAgICAgIHhtbTQsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AxCisKKyAgICBwYWNrc3NkdyAgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTIKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTYKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDQpXSwgeG1tNyAgIDsgd2soNCk9ZGF0YTIKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTQgICA7IHdrKDUpPWRhdGE2CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9dG1wNgorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT10bXA3CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTI9dG1wNAorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT10bXA1CisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PXozCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXo0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwdW5wY2tsd2QgICB4bW03LCB4bW0wCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW00CisgICAgcG1hZGR3ZCAgICAgeG1tNywgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IHhtbTc9ejNMCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IHhtbTQ9ejNICisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IHhtbTY9ejRMCisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IHhtbTA9ejRICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXozTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgd2soMSk9ejNICisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworICAgIDsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisgICAgOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKyAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgIDsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisgICAgOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisgICAgOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW03LCB4bW0xCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW00CisgICAgcG1hZGR3ZCAgICAgeG1tNywgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgOyB4bW03PXRtcDRMCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgOyB4bW00PXRtcDRICisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyB4bW0yPXRtcDdMCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyB4bW0xPXRtcDdICisKKyAgICBwYWRkZCAgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9ZGF0YTdMCisgICAgcGFkZGQgICAgICAgeG1tNCwgWE1NV09SRCBbd2soMSldICAgOyB4bW00PWRhdGE3SAorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMUwKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTFICisKKyAgICBwYWRkZCAgICAgICB4bW03LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwYWRkZCAgICAgICB4bW00LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBhZGRkICAgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgIHBzcmFkICAgICAgIHhtbTIsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AxCisKKyAgICBwYWNrc3NkdyAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTcKKyAgICBwYWNrc3NkdyAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTEKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW01CisgICAgcHVucGNrbHdkICAgeG1tNCwgeG1tMworICAgIHB1bnBja2h3ZCAgIHhtbTEsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgeG1tND10bXA1TAorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgeG1tMT10bXA1SAorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgeG1tNT10bXA2TAorICAgIHBtYWRkd2QgICAgIHhtbTMsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgeG1tMz10bXA2SAorCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGE1TAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNUgKKyAgICBwYWRkZCAgICAgICB4bW01LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTU9ZGF0YTNMCisgICAgcGFkZGQgICAgICAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPWRhdGEzSAorCisgICAgcGFkZGQgICAgICAgeG1tNCwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgcGFkZGQgICAgICAgeG1tMSwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDEKKyAgICBwYWRkZCAgICAgICB4bW01LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwYWRkZCAgICAgICB4bW0zLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tMywgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PWRhdGE1CisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PWRhdGEzCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKzsgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gIDsgKERDVEVMRU0gKikKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tNj1jb2wwCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbd2soNCldICAgOyB4bW0wPWNvbDIKKworICAgIDsgeG1tNj0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW0wPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICA7IHhtbTI9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSwgeG1tNT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgIHB1bnBja2h3ZCAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICBwdW5wY2tod2QgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soMyldICAgOyB4bW0yPWNvbDQKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3ayg1KV0gICA7IHhtbTU9Y29sNgorCisgICAgOyB4bW0yPSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCksIHhtbTU9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIDsgeG1tND0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW03PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tNCAgICAgICAgICAgICAgOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICBwdW5wY2tod2QgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHhtbTA9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgcHVucGNraHdkICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgcHVucGNraGRxICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgIHB1bnBja2hkcSAgIHhtbTcsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMildLCB4bW00ICAgOyB3aygyKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMyldLCB4bW0wICAgOyB3aygzKT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgIHB1bnBja2hkcSAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MykKKyAgICBwdW5wY2toZHEgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9KDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKKyAgICBwdW5wY2tocWRxICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2CisgICAgcHVucGNraHFkcSAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02CisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGExLWRhdGE2PXRtcDYKKyAgICBwc3VidyAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMStkYXRhNj10bXAxCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PWRhdGEwK2RhdGE3PXRtcDAKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbd2soMyldICAgOyB4bW0zPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTUgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCisgICAgcHVucGNraHFkcSAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAorICAgIHB1bnBja2hxZHEgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNAorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMytkYXRhND10bXAzCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTIKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW01ICAgICAgICAgICAgICA7IHhtbTc9dG1wMTAKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9dG1wMTEKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTMKKyAgICBwc3VidyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9dG1wMTArdG1wMTEKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHhtbTU9dG1wMTAtdG1wMTEKKworICAgIHBhZGR3ICAgICAgIHhtbTcsIFtHT1RPRkYoZWJ4LFBXX0RFU0NBTEVfUDJYKV0KKyAgICBwYWRkdyAgICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisgICAgcHNyYXcgICAgICAgeG1tNywgUEFTUzFfQklUUyAgICAgICAgOyB4bW03PWRhdGEwCisgICAgcHNyYXcgICAgICAgeG1tNSwgUEFTUzFfQklUUyAgICAgICAgOyB4bW01PWRhdGE0CisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTcKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKyAgICA7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworICAgIDsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisgICAgOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMT10bXAxMworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIKKyAgICBwdW5wY2tod2QgICB4bW0yLCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNAorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTIKKyAgICBwbWFkZHdkICAgICB4bW00LCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgeG1tND1kYXRhMkwKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgeG1tMj1kYXRhMkgKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gIDsgeG1tMT1kYXRhNkwKKyAgICBwbWFkZHdkICAgICB4bW02LCBbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gIDsgeG1tNj1kYXRhNkgKKworICAgIHBhZGRkICAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBhZGRkICAgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBzcmFkICAgICAgIHhtbTQsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgeG1tMSwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgcGFkZGQgICAgICAgeG1tNiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgcHNyYWQgICAgICAgeG1tMSwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTYsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND1kYXRhMgorICAgIHBhY2tzc2R3ICAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNgorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9dG1wNgorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT10bXA3CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTA9dG1wNAorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMz10bXA1CisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPXozCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXo0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW02CisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IHhtbTQ9ejNMCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IHhtbTE9ejNICisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IHhtbTI9ejRMCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IHhtbTY9ejRICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPXozTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMSAgIDsgd2soMSk9ejNICisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworICAgIDsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisgICAgOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKyAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgIDsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisgICAgOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisgICAgOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTAKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW01CisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgOyB4bW00PXRtcDRMCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgOyB4bW0xPXRtcDRICisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyB4bW0wPXRtcDdMCisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyB4bW01PXRtcDdICisKKyAgICBwYWRkZCAgICAgICB4bW00LCAgWE1NV09SRCBbd2soMCldICA7IHhtbTQ9ZGF0YTdMCisgICAgcGFkZGQgICAgICAgeG1tMSwgIFhNTVdPUkQgW3drKDEpXSAgOyB4bW0xPWRhdGE3SAorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMUwKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTFICisKKyAgICBwYWRkZCAgICAgICB4bW00LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwYWRkZCAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tMSwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBhZGRkICAgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBzcmFkICAgICAgIHhtbTAsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AyCisKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTcKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTMKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW03CisgICAgcHVucGNraHdkICAgeG1tNSwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW01CisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgOyB4bW0xPXRtcDVMCisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgOyB4bW01PXRtcDVICisgICAgcG1hZGR3ZCAgICAgeG1tMywgW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgOyB4bW0zPXRtcDZMCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgOyB4bW03PXRtcDZICisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTVMCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PWRhdGE1SAorICAgIHBhZGRkICAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMz1kYXRhM0wKKyAgICBwYWRkZCAgICAgICB4bW03LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTc9ZGF0YTNICisKKyAgICBwYWRkZCAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwYWRkZCAgICAgICB4bW01LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tNSwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIHhtbTMsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBhZGRkICAgICAgIHhtbTcsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AyCisKKyAgICBwYWNrc3NkdyAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTUKKyAgICBwYWNrc3NkdyAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTMKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCis7ICAgcG9wICAgICAgICAgZWRpICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwb3AgICAgICAgICBlc2kgICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RmbHQtM2RuLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qaWRjdGZsdC0zZG4uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYWExOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RmbHQtM2RuLmFzbQpAQCAtMCwwICsxLDQ1MyBAQAorOworOyBqaWRjdGZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBJRENUICgzRE5vdyEgJiBNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RmbHQuYzsgc2VlIHRoZSBqaWRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9pZGN0X2Zsb2F0XzNkbm93KQorCitFWFROKGpjb25zdF9pZGN0X2Zsb2F0XzNkbm93KToKKworUERfMV80MTQgICAgICAgIHRpbWVzIDIgZGQgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKK1BEXzFfODQ3ICAgICAgICB0aW1lcyAyIGRkIDEuODQ3NzU5MDY1MDIyNTczNTEyMjU2MzY2CitQRF8xXzA4MiAgICAgICAgdGltZXMgMiBkZCAxLjA4MjM5MjIwMDI5MjM5Mzk2ODc5OTQ0NgorUERfMl82MTMgICAgICAgIHRpbWVzIDIgZGQgMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQyB0aW1lcyAyIGRkIDEwMDY2MzI5Ni4wICA7IChmbG9hdCkoMHgwMEMwMDAwMCA8PCAzKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDggZGIgQ0VOVEVSSlNBTVBMRQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfZmxvYXRfM2Rub3codm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKSAgIChiKSArIDggICAgICAgICAgOyB2b2lkICpkY3RfdGFibGUKKyVkZWZpbmUgY29lZl9ibG9jayhiKSAgKGIpICsgMTIgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgKGIpICsgMTYgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpICAoYikgKyAyMCAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDIKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgd2soMCkgLSBEQ1RTSVpFMiAqIFNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oanNpbWRfaWRjdF9mbG9hdF8zZG5vdyk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd29ya3NwYWNlXQorICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7ICAgbW92ICAgICAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgIG1vdiAgICAgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldICAgIDsgcXVhbnRwdHIKKyAgICBtb3YgICAgICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldICA7IGlucHRyCisgICAgbGVhICAgICAgICAgZWRpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICp3c3B0cgorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS8yICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb2x1bW5sb29wOgorJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0ZMT0FUXzNETk9XCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbkRDVAorCisgICAgcHVzaHBpYyAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgbW92ICAgICAgICAgZWJ4LCBEV09SRCBbRFdCTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWJ4LCBEV09SRCBbRFdCTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWJ4LCBEV09SRCBbRFdCTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBlYngKKyAgICBwb3BwaWMgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgR09UIGFkZHJlc3MKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZkICAgICAgICBtbTAsIERXT1JEIFtEV0JMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0wCisgICAgcHNyYWQgICAgICAgbW0wLCAoRFdPUkRfQklULVdPUkRfQklUKQorICAgIHBpMmZkICAgICAgIG1tMCwgbW0wCisKKyAgICBwZm11bCAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsZHEgICBtbTAsIG1tMAorICAgIHB1bnBja2hkcSAgIG1tMSwgbW0xCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICBqbXAgICAgICAgICBuZWFyIC5uZXh0Y29sdW1uCisgICAgYWxpZ254ICAgICAgMTYsIDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkICAgICAgICBtbTAsIERXT1JEIFtEV0JMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkICAgICAgICBtbTEsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkICAgICAgICBtbTIsIERXT1JEIFtEV0JMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkICAgICAgICBtbTMsIERXT1JEIFtEV0JMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0wCisgICAgcHVucGNrbHdkICAgbW0xLCBtbTEKKyAgICBwc3JhZCAgICAgICBtbTAsIChEV09SRF9CSVQtV09SRF9CSVQpCisgICAgcHNyYWQgICAgICAgbW0xLCAoRFdPUkRfQklULVdPUkRfQklUKQorICAgIHBpMmZkICAgICAgIG1tMCwgbW0wCisgICAgcGkyZmQgICAgICAgbW0xLCBtbTEKKworICAgIHBmbXVsICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgcGZtdWwgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworICAgIHB1bnBja2x3ZCAgIG1tMiwgbW0yCisgICAgcHVucGNrbHdkICAgbW0zLCBtbTMKKyAgICBwc3JhZCAgICAgICBtbTIsIChEV09SRF9CSVQtV09SRF9CSVQpCisgICAgcHNyYWQgICAgICAgbW0zLCAoRFdPUkRfQklULVdPUkRfQklUKQorICAgIHBpMmZkICAgICAgIG1tMiwgbW0yCisgICAgcGkyZmQgICAgICAgbW0zLCBtbTMKKworICAgIHBmbXVsICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgcGZtdWwgICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgbW92cSAgICAgICAgbW01LCBtbTEKKyAgICBwZnN1YiAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQorICAgIHBmc3ViICAgICAgIG1tMSwgbW0zCisgICAgcGZhZGQgICAgICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTAKKyAgICBwZmFkZCAgICAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT10bXAxMworCisgICAgcGZtdWwgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQRF8xXzQxNCldCisgICAgcGZzdWIgICAgICAgbW0xLCBtbTUgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTIKKworICAgIG1vdnEgICAgICAgIG1tNiwgbW00CisgICAgbW92cSAgICAgICAgbW03LCBtbTAKKyAgICBwZnN1YiAgICAgICBtbTQsIG1tNSAgICAgICAgICAgICAgICA7IG1tND10bXAzCisgICAgcGZzdWIgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9dG1wMgorICAgIHBmYWRkICAgICAgIG1tNiwgbW01ICAgICAgICAgICAgICAgIDsgbW02PXRtcDAKKyAgICBwZmFkZCAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz10bXAxCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW00ICAgICA7IHRtcDMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgICA7IHRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmQgICAgICAgIG1tMiwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmQgICAgICAgIG1tMywgRFdPUkQgW0RXQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmQgICAgICAgIG1tNSwgRFdPUkQgW0RXQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmQgICAgICAgIG1tMSwgRFdPUkQgW0RXQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTIKKyAgICBwdW5wY2tsd2QgICBtbTMsIG1tMworICAgIHBzcmFkICAgICAgIG1tMiwgKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICBwc3JhZCAgICAgICBtbTMsIChEV09SRF9CSVQtV09SRF9CSVQpCisgICAgcGkyZmQgICAgICAgbW0yLCBtbTIKKyAgICBwaTJmZCAgICAgICBtbTMsIG1tMworCisgICAgcGZtdWwgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBwZm11bCAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgcHVucGNrbHdkICAgbW01LCBtbTUKKyAgICBwdW5wY2tsd2QgICBtbTEsIG1tMQorICAgIHBzcmFkICAgICAgIG1tNSwgKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICBwc3JhZCAgICAgICBtbTEsIChEV09SRF9CSVQtV09SRF9CSVQpCisgICAgcGkyZmQgICAgICAgbW01LCBtbTUKKyAgICBwaTJmZCAgICAgICBtbTEsIG1tMQorCisgICAgcGZtdWwgICAgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBwZm11bCAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNQorICAgIHBmYWRkICAgICAgIG1tMiwgbW0xICAgICAgICAgICAgICAgIDsgbW0yPXoxMQorICAgIHBmYWRkICAgICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PXoxMworICAgIHBmc3ViICAgICAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW00PXoxMgorICAgIHBmc3ViICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPXoxMAorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTIKKyAgICBwZnN1YiAgICAgICBtbTIsIG1tNQorICAgIHBmYWRkICAgICAgIG1tMSwgbW01ICAgICAgICAgICAgICAgIDsgbW0xPXRtcDcKKworICAgIHBmbXVsICAgICAgIG1tMiwgW0dPVE9GRihlYngsUERfMV80MTQpXSAgOyBtbTI9dG1wMTEKKworICAgIG1vdnEgICAgICAgIG1tMywgbW0wCisgICAgcGZhZGQgICAgICAgbW0wLCBtbTQKKyAgICBwZm11bCAgICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0gIDsgbW0wPXo1CisgICAgcGZtdWwgICAgICAgbW0zLCBbR09UT0ZGKGVieCxQRF8yXzYxMyldICA7IG1tMz0oejEwICogMi42MTMxMjU5MzApCisgICAgcGZtdWwgICAgICAgbW00LCBbR09UT0ZGKGVieCxQRF8xXzA4MildICA7IG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgcGZzdWJyICAgICAgbW0zLCBtbTAgICAgICAgICAgICAgICAgICAgICA7IG1tMz10bXAxMgorICAgIHBmc3ViICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTAKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBwZnN1YiAgICAgICBtbTMsIG1tMSAgICAgICAgICAgICAgICA7IG1tMz10bXA2CisgICAgbW92cSAgICAgICAgbW01LCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIHBmYWRkICAgICAgIG1tNiwgbW0xICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwPSgwMCAwMSkKKyAgICBwZmFkZCAgICAgICBtbTcsIG1tMyAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMT0oMTAgMTEpCisgICAgcGZzdWIgICAgICAgbW01LCBtbTEgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTc9KDcwIDcxKQorICAgIHBmc3ViICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE2PSg2MCA2MSkKKyAgICBwZnN1YiAgICAgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj10bXA1CisKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICBwdW5wY2tsZHEgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTApCisgICAgcHVucGNraGRxICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KDAxIDExKQorICAgIG1vdnEgICAgICAgIG1tMywgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgIHB1bnBja2xkcSAgIG1tMCwgbW01ICAgICAgICAgICAgICAgIDsgbW0wPSg2MCA3MCkKKyAgICBwdW5wY2toZHEgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz0oNjEgNzEpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTMKKworICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW03PXRtcDIKKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbd2soMSldICAgICA7IG1tNT10bXAzCisKKyAgICBwZmFkZCAgICAgICBtbTQsIG1tMiAgICAgICAgICAgICAgICA7IG1tND10bXA0CisgICAgbW92cSAgICAgICAgbW02LCBtbTcKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNQorICAgIHBmYWRkICAgICAgIG1tNywgbW0yICAgICAgICAgICAgICAgIDsgbW03PWRhdGEyPSgyMCAyMSkKKyAgICBwZmFkZCAgICAgICBtbTUsIG1tNCAgICAgICAgICAgICAgICA7IG1tNT1kYXRhND0oNDAgNDEpCisgICAgcGZzdWIgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTU9KDUwIDUxKQorICAgIHBmc3ViICAgICAgIG1tMSwgbW00ICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEzPSgzMCAzMSkKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW03ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgIHB1bnBja2xkcSAgIG1tNywgbW0xICAgICAgICAgICAgICAgIDsgbW03PSgyMCAzMCkKKyAgICBwdW5wY2toZHEgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD0oMjEgMzEpCisgICAgbW92cSAgICAgICAgbW0zLCBtbTUgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgcHVucGNrbGRxICAgbW01LCBtbTYgICAgICAgICAgICAgICAgOyBtbTU9KDQwIDUwKQorICAgIHB1bnBja2hkcSAgIG1tMywgbW02ICAgICAgICAgICAgICAgIDsgbW0zPSg0MSA1MSkKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMworCisubmV4dGNvbHVtbjoKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfSkNPRUYgICAgICAgICAgICAgICA7IGNvZWZfYmxvY2sKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgMipTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFICAgICA7IHF1YW50cHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVCAgOyB3c3B0cgorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgIHByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICBwcmVmZXRjaCBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbGVhICAgICAgICAgZXNpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKndzcHRyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS8yICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMAorICAgIG1vdnEgICAgICAgIG1tNSwgbW0xCisgICAgcGZzdWIgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTEKKyAgICBwZnN1YiAgICAgICBtbTEsIG1tMworICAgIHBmYWRkICAgICAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PXRtcDEwCisgICAgcGZhZGQgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTMKKworICAgIHBmbXVsICAgICAgIG1tMSwgW0dPVE9GRihlYngsUERfMV80MTQpXQorICAgIHBmc3ViICAgICAgIG1tMSwgbW01ICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEyCisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tNAorICAgIG1vdnEgICAgICAgIG1tNywgbW0wCisgICAgcGZzdWIgICAgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMworICAgIHBmc3ViICAgICAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPXRtcDIKKyAgICBwZmFkZCAgICAgICBtbTYsIG1tNSAgICAgICAgICAgICAgICA7IG1tNj10bXAwCisgICAgcGZhZGQgICAgICAgbW03LCBtbTEgICAgICAgICAgICAgICAgOyBtbTc9dG1wMQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tNCAgICAgOyB0bXAzCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tMCAgICAgOyB0bXAyCisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0yCisgICAgbW92cSAgICAgICAgbW0wLCBtbTUKKyAgICBwZmFkZCAgICAgICBtbTIsIG1tMSAgICAgICAgICAgICAgICA7IG1tMj16MTEKKyAgICBwZmFkZCAgICAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT16MTMKKyAgICBwZnN1YiAgICAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND16MTIKKyAgICBwZnN1YiAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD16MTAKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW0yCisgICAgcGZzdWIgICAgICAgbW0yLCBtbTUKKyAgICBwZmFkZCAgICAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IG1tMT10bXA3CisKKyAgICBwZm11bCAgICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0gIDsgbW0yPXRtcDExCisKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMAorICAgIHBmYWRkICAgICAgIG1tMCwgbW00CisgICAgcGZtdWwgICAgICAgbW0wLCBbR09UT0ZGKGVieCxQRF8xXzg0NyldICA7IG1tMD16NQorICAgIHBmbXVsICAgICAgIG1tMywgW0dPVE9GRihlYngsUERfMl82MTMpXSAgOyBtbTM9KHoxMCAqIDIuNjEzMTI1OTMwKQorICAgIHBmbXVsICAgICAgIG1tNCwgW0dPVE9GRihlYngsUERfMV8wODIpXSAgOyBtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorICAgIHBmc3ViciAgICAgIG1tMywgbW0wICAgICAgICAgICAgICAgICAgICAgOyBtbTM9dG1wMTIKKyAgICBwZnN1YiAgICAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICAgICAgIDsgbW00PXRtcDEwCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgcGZzdWIgICAgICAgbW0zLCBtbTEgICAgICAgICAgICAgICAgOyBtbTM9dG1wNgorICAgIG1vdnEgICAgICAgIG1tNSwgbW02CisgICAgbW92cSAgICAgICAgbW0wLCBtbTcKKyAgICBwZmFkZCAgICAgICBtbTYsIG1tMSAgICAgICAgICAgICAgICA7IG1tNj1kYXRhMD0oMDAgMTApCisgICAgcGZhZGQgICAgICAgbW03LCBtbTMgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTE9KDAxIDExKQorICAgIHBmc3ViICAgICAgIG1tNSwgbW0xICAgICAgICAgICAgICAgIDsgbW01PWRhdGE3PSgwNyAxNykKKyAgICBwZnN1YiAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD1kYXRhNj0oMDYgMTYpCisgICAgcGZzdWIgICAgICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9dG1wNQorCisgICAgbW92cSAgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQRF9STkRJTlRfTUFHSUMpXSAgOyBtbTE9W1BEX1JORElOVF9NQUdJQ10KKyAgICBwY21wZXFkICAgICBtbTMsIG1tMworICAgIHBzcmxkICAgICAgIG1tMywgV09SRF9CSVQgICAgICAgICAgIDsgbW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDB9CisKKyAgICBwZmFkZCAgICAgICBtbTYsIG1tMSAgICAgICAgICAgICAgICA7IG1tNj1yb3VuZGludChkYXRhMC84KT0oMDAgKiogMTAgKiopCisgICAgcGZhZGQgICAgICAgbW03LCBtbTEgICAgICAgICAgICAgICAgOyBtbTc9cm91bmRpbnQoZGF0YTEvOCk9KDAxICoqIDExICoqKQorICAgIHBmYWRkICAgICAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPXJvdW5kaW50KGRhdGE2LzgpPSgwNiAqKiAxNiAqKikKKyAgICBwZmFkZCAgICAgICBtbTUsIG1tMSAgICAgICAgICAgICAgICA7IG1tNT1yb3VuZGludChkYXRhNy84KT0oMDcgKiogMTcgKiopCisKKyAgICBwYW5kICAgICAgICBtbTYsIG1tMyAgICAgICAgICAgICAgICA7IG1tNj0oMDAgLS0gMTAgLS0pCisgICAgcHNsbGQgICAgICAgbW03LCBXT1JEX0JJVCAgICAgICAgICAgOyBtbTc9KC0tIDAxIC0tIDExKQorICAgIHBhbmQgICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPSgwNiAtLSAxNiAtLSkKKyAgICBwc2xsZCAgICAgICBtbTUsIFdPUkRfQklUICAgICAgICAgICA7IG1tNT0oLS0gMDcgLS0gMTcpCisgICAgcG9yICAgICAgICAgbW02LCBtbTcgICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDEwIDExKQorICAgIHBvciAgICAgICAgIG1tMCwgbW01ICAgICAgICAgICAgICAgIDsgbW0wPSgwNiAwNyAxNiAxNykKKworICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0xPXRtcDIKKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbd2soMSldICAgICA7IG1tMz10bXAzCisKKyAgICBwZmFkZCAgICAgICBtbTQsIG1tMiAgICAgICAgICAgICAgICA7IG1tND10bXA0CisgICAgbW92cSAgICAgICAgbW03LCBtbTEKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMworICAgIHBmYWRkICAgICAgIG1tMSwgbW0yICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEyPSgwMiAxMikKKyAgICBwZmFkZCAgICAgICBtbTMsIG1tNCAgICAgICAgICAgICAgICA7IG1tMz1kYXRhND0oMDQgMTQpCisgICAgcGZzdWIgICAgICAgbW03LCBtbTIgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTU9KDA1IDE1KQorICAgIHBmc3ViICAgICAgIG1tNSwgbW00ICAgICAgICAgICAgICAgIDsgbW01PWRhdGEzPSgwMyAxMykKKworICAgIG1vdnEgICAgICAgIG1tMiwgW0dPVE9GRihlYngsUERfUk5ESU5UX01BR0lDKV0gIDsgbW0yPVtQRF9STkRJTlRfTUFHSUNdCisgICAgcGNtcGVxZCAgICAgbW00LCBtbTQKKyAgICBwc3JsZCAgICAgICBtbTQsIFdPUkRfQklUICAgICAgICAgICA7IG1tND17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwfQorCisgICAgcGZhZGQgICAgICAgbW0zLCBtbTIgICAgICAgICAgICAgICAgOyBtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqKQorICAgIHBmYWRkICAgICAgIG1tNywgbW0yICAgICAgICAgICAgICAgIDsgbW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKikKKyAgICBwZmFkZCAgICAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICA7IG1tMT1yb3VuZGludChkYXRhMi84KT0oMDIgKiogMTIgKiopCisgICAgcGZhZGQgICAgICAgbW01LCBtbTIgICAgICAgICAgICAgICAgOyBtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqKQorCisgICAgcGFuZCAgICAgICAgbW0zLCBtbTQgICAgICAgICAgICAgICAgOyBtbTM9KDA0IC0tIDE0IC0tKQorICAgIHBzbGxkICAgICAgIG1tNywgV09SRF9CSVQgICAgICAgICAgIDsgbW03PSgtLSAwNSAtLSAxNSkKKyAgICBwYW5kICAgICAgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT0oMDIgLS0gMTIgLS0pCisgICAgcHNsbGQgICAgICAgbW01LCBXT1JEX0JJVCAgICAgICAgICAgOyBtbTU9KC0tIDAzIC0tIDEzKQorICAgIHBvciAgICAgICAgIG1tMywgbW03ICAgICAgICAgICAgICAgIDsgbW0zPSgwNCAwNSAxNCAxNSkKKyAgICBwb3IgICAgICAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IG1tMT0oMDIgMDMgMTIgMTMpCisKKyAgICBtb3ZxICAgICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0gIDsgbW0yPVtQQl9DRU5URVJKU0FNUF0KKworICAgIHBhY2tzc3diICAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PSgwMCAwMSAxMCAxMSAwNCAwNSAxNCAxNSkKKyAgICBwYWNrc3N3YiAgICBtbTEsIG1tMCAgICAgICAgICAgICAgICA7IG1tMT0oMDIgMDMgMTIgMTMgMDYgMDcgMTYgMTcpCisgICAgcGFkZGIgICAgICAgbW02LCBtbTIKKyAgICBwYWRkYiAgICAgICBtbTEsIG1tMgorCisgICAgbW92cSAgICAgICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbHdkICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgIHB1bnBja2h3ZCAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW00PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKworICAgIG1vdnEgICAgICAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xkcSAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwdW5wY2toZHEgICBtbTcsIG1tNCAgICAgICAgICAgICAgICA7IG1tNz0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisKKyAgICBwdXNocGljICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW02CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW03CisKKyAgICBwb3BwaWMgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgR09UIGFkZHJlc3MKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9GQVNUX0ZMT0FUICA7IHdzcHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgam56ICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgZmVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0Zmx0LXNzZS5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RmbHQtc3NlLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY2NTBmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0Zmx0LXNzZS5hc20KQEAgLTAsMCArMSw1NzMgQEAKKzsKKzsgamlkY3RmbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgSURDVCAoU1NFICYgTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW52ZXJzZSBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGppZGN0Zmx0LmM7IHNlZSB0aGUgamlkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislbWFjcm8gdW5wY2tscHMyIDIgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorICAgIHNodWZwcyAgICAgICUxLCAlMiwgMHg0NAorJWVuZG1hY3JvCisKKyVtYWNybyB1bnBja2hwczIgMiAgOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCisgICAgc2h1ZnBzICAgICAgJTEsICUyLCAweEVFCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfaWRjdF9mbG9hdF9zc2UpCisKK0VYVE4oamNvbnN0X2lkY3RfZmxvYXRfc3NlKToKKworUERfMV80MTQgICAgICAgdGltZXMgNCBkZCAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKK1BEXzFfODQ3ICAgICAgIHRpbWVzIDQgZGQgIDEuODQ3NzU5MDY1MDIyNTczNTEyMjU2MzY2CitQRF8xXzA4MiAgICAgICB0aW1lcyA0IGRkICAxLjA4MjM5MjIwMDI5MjM5Mzk2ODc5OTQ0NgorUERfTTJfNjEzICAgICAgdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEXzBfMTI1ICAgICAgIHRpbWVzIDQgZGQgIDAuMTI1ICAgICAgICA7IDEvOAorUEJfQ0VOVEVSSlNBTVAgdGltZXMgOCBkYiAgQ0VOVEVSSlNBTVBMRQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfZmxvYXRfc3NlKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgKGIpICsgOCAgICAgICAgICA7IHZvaWQgKmRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAoYikgKyAxMiAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAoYikgKyAxNiAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgIChiKSArIDIwICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1hNTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAyCislZGVmaW5lIHdvcmtzcGFjZSAgICAgIHdrKDApIC0gRENUU0laRTIgKiBTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9pZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZSk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3dvcmtzcGFjZV0KKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworOyAgIG1vdiAgICAgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXSAgICA7IHF1YW50cHRyCisgICAgbW92ICAgICAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXSAgOyBpbnB0cgorICAgIGxlYSAgICAgICAgIGVkaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgIDsgRkFTVF9GTE9BVCAqd3NwdHIKKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9GTE9BVF9TU0UKKyAgICBtb3YgICAgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBvciAgICAgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5EQ1QKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTEsIG1tMAorICAgIHBhY2tzc3diICAgIG1tMSwgbW0xCisgICAgbW92ZCAgICAgICAgZWF4LCBtbTEKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIHNob3J0IC5jb2x1bW5EQ1QKKworICAgIDsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2h3ZCAgIG1tMSwgbW0wICAgICAgICAgICAgICAgICAgIDsgbW0xPSgqKiAwMiAqKiAwMykKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMCAgICAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgcHNyYWQgICAgICAgbW0xLCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyBtbTE9aW4wSD0oMDIgMDMpCisgICAgcHNyYWQgICAgICAgbW0wLCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyBtbTA9aW4wTD0oMDAgMDEpCisgICAgY3Z0cGkycHMgICAgeG1tMywgbW0xICAgICAgICAgICAgICAgICAgOyB4bW0zPSgwMiAwMyAqKiAqKikKKyAgICBjdnRwaTJwcyAgICB4bW0wLCBtbTAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAwIDAxICoqICoqKQorICAgIG1vdmxocHMgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCisgICAgbXVscHMgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW0wCisgICAgbW92YXBzICAgICAgeG1tMywgeG1tMAorCisgICAgc2h1ZnBzICAgICAgeG1tMCwgeG1tMCwgMHgwMCAgICAgICAgOyB4bW0wPSgwMCAwMCAwMCAwMCkKKyAgICBzaHVmcHMgICAgICB4bW0xLCB4bW0xLCAweDU1ICAgICAgICA7IHhtbTE9KDAxIDAxIDAxIDAxKQorICAgIHNodWZwcyAgICAgIHhtbTIsIHhtbTIsIDB4QUEgICAgICAgIDsgeG1tMj0oMDIgMDIgMDIgMDIpCisgICAgc2h1ZnBzICAgICAgeG1tMywgeG1tMywgMHhGRiAgICAgICAgOyB4bW0zPSgwMyAwMyAwMyAwMykKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgIGptcCAgICAgICAgIG5lYXIgLm5leHRjb2x1bW4KKyAgICBhbGlnbnggICAgICAxNiwgNworJWVuZGlmCisuY29sdW1uRENUOgorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2h3ZCAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgbW00PSgqKiAwMiAqKiAwMykKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgcHVucGNraHdkICAgbW01LCBtbTEgICAgICAgICAgICAgICAgOyBtbTU9KCoqIDIyICoqIDIzKQorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW0xICAgICAgICAgICAgICAgIDsgbW0xPSgyMCAyMCAyMSAyMSkKKworICAgIHBzcmFkICAgICAgIG1tNCwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgbW00PWluMEg9KDAyIDAzKQorICAgIHBzcmFkICAgICAgIG1tMCwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgbW0wPWluMEw9KDAwIDAxKQorICAgIGN2dHBpMnBzICAgIHhtbTQsIG1tNCAgICAgICAgICAgICAgICAgIDsgeG1tND0oMDIgMDMgKiogKiopCisgICAgY3Z0cGkycHMgICAgeG1tMCwgbW0wICAgICAgICAgICAgICAgICAgOyB4bW0wPSgwMCAwMSAqKiAqKikKKyAgICBwc3JhZCAgICAgICBtbTUsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tNT1pbjJIPSgyMiAyMykKKyAgICBwc3JhZCAgICAgICBtbTEsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tMT1pbjJMPSgyMCAyMSkKKyAgICBjdnRwaTJwcyAgICB4bW01LCBtbTUgICAgICAgICAgICAgICAgICA7IHhtbTU9KDIyIDIzICoqICoqKQorICAgIGN2dHBpMnBzICAgIHhtbTEsIG1tMSAgICAgICAgICAgICAgICAgIDsgeG1tMT0oMjAgMjEgKiogKiopCisKKyAgICBwdW5wY2tod2QgICBtbTYsIG1tMiAgICAgICAgICAgICAgICA7IG1tNj0oKiogNDIgKiogNDMpCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDQwIDQwIDQxIDQxKQorICAgIHB1bnBja2h3ZCAgIG1tNywgbW0zICAgICAgICAgICAgICAgIDsgbW03PSgqKiA2MiAqKiA2MykKKyAgICBwdW5wY2tsd2QgICBtbTMsIG1tMyAgICAgICAgICAgICAgICA7IG1tMz0oNjAgNjAgNjEgNjEpCisKKyAgICBwc3JhZCAgICAgICBtbTYsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tNj1pbjRIPSg0MiA0MykKKyAgICBwc3JhZCAgICAgICBtbTIsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tMj1pbjRMPSg0MCA0MSkKKyAgICBjdnRwaTJwcyAgICB4bW02LCBtbTYgICAgICAgICAgICAgICAgICA7IHhtbTY9KDQyIDQzICoqICoqKQorICAgIGN2dHBpMnBzICAgIHhtbTIsIG1tMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oNDAgNDEgKiogKiopCisgICAgcHNyYWQgICAgICAgbW03LCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyBtbTc9aW42SD0oNjIgNjMpCisgICAgcHNyYWQgICAgICAgbW0zLCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyBtbTM9aW42TD0oNjAgNjEpCisgICAgY3Z0cGkycHMgICAgeG1tNywgbW03ICAgICAgICAgICAgICAgICAgOyB4bW03PSg2MiA2MyAqKiAqKikKKyAgICBjdnRwaTJwcyAgICB4bW0zLCBtbTMgICAgICAgICAgICAgICAgICA7IHhtbTM9KDYwIDYxICoqICoqKQorCisgICAgbW92bGhwcyAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgbW92bGhwcyAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCisgICAgbXVscHMgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBtdWxwcyAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92bGhwcyAgICAgeG1tMiwgeG1tNiAgICAgICAgICAgICAgOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCisgICAgbW92bGhwcyAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCisgICAgbXVscHMgICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBtdWxwcyAgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTEKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW0zCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCisKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF8xXzQxNCldCisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyCisKKyAgICBtb3ZhcHMgICAgICB4bW02LCB4bW00CisgICAgbW92YXBzICAgICAgeG1tNywgeG1tMAorICAgIHN1YnBzICAgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND10bXAzCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXRtcDIKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9dG1wMAorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz10bXAxCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHRtcDMKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2h3ZCAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PSgqKiAxMiAqKiAxMykKKyAgICBwdW5wY2tsd2QgICBtbTQsIG1tNCAgICAgICAgICAgICAgICA7IG1tND0oMTAgMTAgMTEgMTEpCisgICAgcHVucGNraHdkICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTI9KCoqIDMyICoqIDMzKQorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0wICAgICAgICAgICAgICAgIDsgbW0wPSgzMCAzMCAzMSAzMSkKKworICAgIHBzcmFkICAgICAgIG1tNiwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgbW02PWluMUg9KDEyIDEzKQorICAgIHBzcmFkICAgICAgIG1tNCwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgbW00PWluMUw9KDEwIDExKQorICAgIGN2dHBpMnBzICAgIHhtbTQsIG1tNiAgICAgICAgICAgICAgICAgIDsgeG1tND0oMTIgMTMgKiogKiopCisgICAgY3Z0cGkycHMgICAgeG1tMiwgbW00ICAgICAgICAgICAgICAgICAgOyB4bW0yPSgxMCAxMSAqKiAqKikKKyAgICBwc3JhZCAgICAgICBtbTIsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tMj1pbjNIPSgzMiAzMykKKyAgICBwc3JhZCAgICAgICBtbTAsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tMD1pbjNMPSgzMCAzMSkKKyAgICBjdnRwaTJwcyAgICB4bW0wLCBtbTIgICAgICAgICAgICAgICAgICA7IHhtbTA9KDMyIDMzICoqICoqKQorICAgIGN2dHBpMnBzICAgIHhtbTMsIG1tMCAgICAgICAgICAgICAgICAgIDsgeG1tMz0oMzAgMzEgKiogKiopCisKKyAgICBwdW5wY2tod2QgICBtbTcsIG1tNSAgICAgICAgICAgICAgICA7IG1tNz0oKiogNTIgKiogNTMpCisgICAgcHVucGNrbHdkICAgbW01LCBtbTUgICAgICAgICAgICAgICAgOyBtbTU9KDUwIDUwIDUxIDUxKQorICAgIHB1bnBja2h3ZCAgIG1tMywgbW0xICAgICAgICAgICAgICAgIDsgbW0zPSgqKiA3MiAqKiA3MykKKyAgICBwdW5wY2tsd2QgICBtbTEsIG1tMSAgICAgICAgICAgICAgICA7IG1tMT0oNzAgNzAgNzEgNzEpCisKKyAgICBtb3ZsaHBzICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKKyAgICBtb3ZsaHBzICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKKworICAgIHBzcmFkICAgICAgIG1tNywgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgbW03PWluNUg9KDUyIDUzKQorICAgIHBzcmFkICAgICAgIG1tNSwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgbW01PWluNUw9KDUwIDUxKQorICAgIGN2dHBpMnBzICAgIHhtbTQsIG1tNyAgICAgICAgICAgICAgICAgIDsgeG1tND0oNTIgNTMgKiogKiopCisgICAgY3Z0cGkycHMgICAgeG1tNSwgbW01ICAgICAgICAgICAgICAgICAgOyB4bW01PSg1MCA1MSAqKiAqKikKKyAgICBwc3JhZCAgICAgICBtbTMsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tMz1pbjdIPSg3MiA3MykKKyAgICBwc3JhZCAgICAgICBtbTEsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IG1tMT1pbjdMPSg3MCA3MSkKKyAgICBjdnRwaTJwcyAgICB4bW0wLCBtbTMgICAgICAgICAgICAgICAgICA7IHhtbTA9KDcyIDczICoqICoqKQorICAgIGN2dHBpMnBzICAgIHhtbTEsIG1tMSAgICAgICAgICAgICAgICAgIDsgeG1tMT0oNzAgNzEgKiogKiopCisKKyAgICBtdWxwcyAgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgIG11bHBzICAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKyAgICBtb3ZsaHBzICAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKKyAgICBtb3ZsaHBzICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKyAgICBtdWxwcyAgICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgIG11bHBzICAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW0yCisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNQorICAgIGFkZHBzICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj16MTEKKyAgICBhZGRwcyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ejEzCisgICAgc3VicHMgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PXoxMgorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD16MTAKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTIKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW01CisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDcKKworICAgIG11bHBzICAgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0gIDsgeG1tMj10bXAxMQorCisgICAgbW92YXBzICAgICAgeG1tMywgeG1tMAorICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTQKKyAgICBtdWxwcyAgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQRF8xXzg0NyldICAgOyB4bW0wPXo1CisgICAgbXVscHMgICAgICAgeG1tMywgW0dPVE9GRihlYngsUERfTTJfNjEzKV0gIDsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQorICAgIG11bHBzICAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0gICA7IHhtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTIKKyAgICBzdWJwcyAgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgc3VicHMgICAgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPXRtcDYKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW02CisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNworICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMpCisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oNjAgNjEgNjIgNjMpCisgICAgc3VicHMgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHVucGNrbHBzICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMTAgMDEgMTEpCisgICAgdW5wY2tocHMgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB4bW0xPSgwMiAxMiAwMyAxMykKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9KDYwIDcwIDYxIDcxKQorICAgIHVucGNraHBzICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz0oNjIgNzIgNjMgNzMpCisKKyAgICBtb3ZhcHMgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9dG1wMgorICAgIG1vdmFwcyAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT10bXAzCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPSg2MCA3MCA2MSA3MSkKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPSg2MiA3MiA2MyA3MykKKworICAgIGFkZHBzICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND10bXA0CisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNworICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTUKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzKQorICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1kYXRhND0oNDAgNDEgNDIgNDMpCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWRhdGE1PSg1MCA1MSA1MiA1MykKKyAgICBzdWJwcyAgICAgICB4bW0zLCB4bW00ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCisgICAgbW92YXBzICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PSgyMCAzMCAyMSAzMSkKKyAgICB1bnBja2hwcyAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDIyIDMyIDIzIDMzKQorICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHVucGNrbHBzICAgIHhtbTUsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNT0oNDAgNTAgNDEgNTEpCisgICAgdW5wY2tocHMgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PSg0MiA1MiA0MyA1MykKKworICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMTAgMjAgMzApCisgICAgdW5wY2tocHMyICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSgwMSAxMSAyMSAzMSkKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICB1bnBja2xwczIgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9KDAyIDEyIDIyIDMyKQorICAgIHVucGNraHBzMiAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD0oMDMgMTMgMjMgMzMpCisKKyAgICBtb3ZhcHMgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9KDYwIDcwIDYxIDcxKQorICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMj0oNjIgNzIgNjMgNzMpCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKworICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT0oNDAgNTAgNjAgNzApCisgICAgdW5wY2tocHMyICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSg0MSA1MSA2MSA3MSkKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW00ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICB1bnBja2xwczIgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9KDQyIDUyIDYyIDcyKQorICAgIHVucGNraHBzMiAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMz0oNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKworLm5leHRjb2x1bW46CisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGICAgICAgICAgICAgICAgOyBjb2VmX2Jsb2NrCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIDQqU0laRU9GX0ZMT0FUX01VTFRfVFlQRSAgICAgOyBxdWFudHB0cgorICAgIGFkZCAgICAgICAgIGVkaSwgICAgICA0KkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQgIDsgd3NwdHIKKyAgICBkZWMgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworICAgIHByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICBwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgIHByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMyozMl0KKworICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisgICAgbW92ICAgICAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgIGxlYSAgICAgICAgIGVzaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICp3c3B0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXSAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5yb3dsb29wOgorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdmFwcyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTEKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW0zCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCisKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF8xXzQxNCldCisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyCisKKyAgICBtb3ZhcHMgICAgICB4bW02LCB4bW00CisgICAgbW92YXBzICAgICAgeG1tNywgeG1tMAorICAgIHN1YnBzICAgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND10bXAzCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXRtcDIKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9dG1wMAorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz10bXAxCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHRtcDMKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tMgorICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTUKKyAgICBhZGRwcyAgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ejExCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXoxMworICAgIHN1YnBzICAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND16MTIKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9ejEwCisKKyAgICBtb3ZhcHMgICAgICB4bW0xLCB4bW0yCisgICAgc3VicHMgICAgICAgeG1tMiwgeG1tNQorICAgIGFkZHBzICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT10bXA3CisKKyAgICBtdWxwcyAgICAgICB4bW0yLCBbR09UT0ZGKGVieCxQRF8xXzQxNCldICA7IHhtbTI9dG1wMTEKKworICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTAKKyAgICBhZGRwcyAgICAgICB4bW0wLCB4bW00CisgICAgbXVscHMgICAgICAgeG1tMCwgW0dPVE9GRihlYngsUERfMV84NDcpXSAgIDsgeG1tMD16NQorICAgIG11bHBzICAgICAgIHhtbTMsIFtHT1RPRkYoZWJ4LFBEX00yXzYxMyldICA7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKyAgICBtdWxwcyAgICAgICB4bW00LCBbR09UT0ZGKGVieCxQRF8xXzA4MildICAgOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKyAgICBhZGRwcyAgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEyCisgICAgc3VicHMgICAgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIHN1YnBzICAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz10bXA2CisgICAgbW92YXBzICAgICAgeG1tNSwgeG1tNgorICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTcKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMT0oMDEgMTEgMjEgMzEpCisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB4bW01PWRhdGE3PSgwNyAxNyAyNyAzNykKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTY9KDA2IDE2IDI2IDM2KQorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj10bXA1CisKKyAgICBtb3ZhcHMgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF8wXzEyNSldICA7IHhtbTE9W1BEXzBfMTI1XQorCisgICAgbXVscHMgICAgICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyBkZXNjYWxlKDEvOCkKKyAgICBtdWxwcyAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IGRlc2NhbGUoMS84KQorICAgIG11bHBzICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgZGVzY2FsZSgxLzgpCisgICAgbXVscHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyBkZXNjYWxlKDEvOCkKKworICAgIG1vdmhscHMgICAgIHhtbTMsIHhtbTYKKyAgICBtb3ZobHBzICAgICB4bW0xLCB4bW03CisgICAgY3Z0cHMycGkgICAgbW0wLCB4bW02ICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0wPWRhdGEwTD0oMDAgMTApCisgICAgY3Z0cHMycGkgICAgbW0xLCB4bW03ICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0xPWRhdGExTD0oMDEgMTEpCisgICAgY3Z0cHMycGkgICAgbW0yLCB4bW0zICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0yPWRhdGEwSD0oMjAgMzApCisgICAgY3Z0cHMycGkgICAgbW0zLCB4bW0xICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0zPWRhdGExSD0oMjEgMzEpCisgICAgcGFja3NzZHcgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgIHBhY2tzc2R3ICAgIG1tMSwgbW0zICAgICAgICAgICAgICAgIDsgbW0xPWRhdGExPSgwMSAxMSAyMSAzMSkKKworICAgIG1vdmhscHMgICAgIHhtbTYsIHhtbTUKKyAgICBtb3ZobHBzICAgICB4bW03LCB4bW0wCisgICAgY3Z0cHMycGkgICAgbW00LCB4bW01ICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW00PWRhdGE3TD0oMDcgMTcpCisgICAgY3Z0cHMycGkgICAgbW01LCB4bW0wICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW01PWRhdGE2TD0oMDYgMTYpCisgICAgY3Z0cHMycGkgICAgbW02LCB4bW02ICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW02PWRhdGE3SD0oMjcgMzcpCisgICAgY3Z0cHMycGkgICAgbW03LCB4bW03ICAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW03PWRhdGE2SD0oMjYgMzYpCisgICAgcGFja3NzZHcgICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTc9KDA3IDE3IDI3IDM3KQorICAgIHBhY2tzc2R3ICAgIG1tNSwgbW03ICAgICAgICAgICAgICAgIDsgbW01PWRhdGE2PSgwNiAxNiAyNiAzNikKKworICAgIHBhY2tzc3diICAgIG1tMCwgbW01ICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKyAgICBwYWNrc3N3YiAgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9dG1wMgorICAgIG1vdmFwcyAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT10bXAzCisKKyAgICBtb3ZhcHMgICAgICB4bW02LCBbR09UT0ZGKGVieCxQRF8wXzEyNSldICA7IHhtbTY9W1BEXzBfMTI1XQorCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDQKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0zCisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tMQorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0PSgwNCAxNCAyNCAzNCkKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTU9KDA1IDE1IDI1IDM1KQorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMz0oMDMgMTMgMjMgMzMpCisKKyAgICBtdWxwcyAgICAgICB4bW0zLCB4bW02ICAgICAgICAgICAgICA7IGRlc2NhbGUoMS84KQorICAgIG11bHBzICAgICAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgZGVzY2FsZSgxLzgpCisgICAgbXVscHMgICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyBkZXNjYWxlKDEvOCkKKyAgICBtdWxwcyAgICAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IGRlc2NhbGUoMS84KQorCisgICAgbW92aGxwcyAgICAgeG1tNywgeG1tMworICAgIG1vdmhscHMgICAgIHhtbTIsIHhtbTEKKyAgICBjdnRwczJwaSAgICBtbTIsIHhtbTMgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTI9ZGF0YTJMPSgwMiAxMikKKyAgICBjdnRwczJwaSAgICBtbTMsIHhtbTEgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTM9ZGF0YTRMPSgwNCAxNCkKKyAgICBjdnRwczJwaSAgICBtbTYsIHhtbTcgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTY9ZGF0YTJIPSgyMiAzMikKKyAgICBjdnRwczJwaSAgICBtbTcsIHhtbTIgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTc9ZGF0YTRIPSgyNCAzNCkKKyAgICBwYWNrc3NkdyAgICBtbTIsIG1tNiAgICAgICAgICAgICAgICA7IG1tMj1kYXRhMj0oMDIgMTIgMjIgMzIpCisgICAgcGFja3NzZHcgICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTQ9KDA0IDE0IDI0IDM0KQorCisgICAgbW92aGxwcyAgICAgeG1tNCwgeG1tNQorICAgIG1vdmhscHMgICAgIHhtbTYsIHhtbTAKKyAgICBjdnRwczJwaSAgICBtbTUsIHhtbTUgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTU9ZGF0YTVMPSgwNSAxNSkKKyAgICBjdnRwczJwaSAgICBtbTQsIHhtbTAgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTQ9ZGF0YTNMPSgwMyAxMykKKyAgICBjdnRwczJwaSAgICBtbTYsIHhtbTQgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTY9ZGF0YTVIPSgyNSAzNSkKKyAgICBjdnRwczJwaSAgICBtbTcsIHhtbTYgICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTc9ZGF0YTNIPSgyMyAzMykKKyAgICBwYWNrc3NkdyAgICBtbTUsIG1tNiAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNT0oMDUgMTUgMjUgMzUpCisgICAgcGFja3NzZHcgICAgbW00LCBtbTcgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCisgICAgbW92cSAgICAgICAgbW02LCBbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldICA7IG1tNj1bUEJfQ0VOVEVSSlNBTVBdCisKKyAgICBwYWNrc3N3YiAgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCisgICAgcGFja3Nzd2IgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgOyBtbTQ9KDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1KQorCisgICAgcGFkZGIgICAgICAgbW0wLCBtbTYKKyAgICBwYWRkYiAgICAgICBtbTEsIG1tNgorICAgIHBhZGRiICAgICAgIG1tMiwgbW02CisgICAgcGFkZGIgICAgICAgbW00LCBtbTYKKworICAgIG1vdnEgICAgICAgIG1tNywgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2xidyAgIG1tMCwgbW0xICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICBwdW5wY2toYncgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgbW92cSAgICAgICAgbW0zLCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbGJ3ICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgIHB1bnBja2hidyAgIG1tMywgbW00ICAgICAgICAgICAgICAgIDsgbW0zPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKworICAgIG1vdnEgICAgICAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2x3ZCAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKyAgICBwdW5wY2tod2QgICBtbTUsIG1tMiAgICAgICAgICAgICAgICA7IG1tNT0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgbW92cSAgICAgICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbHdkICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTM9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorICAgIHB1bnBja2h3ZCAgIG1tNiwgbW03ICAgICAgICAgICAgICAgIDsgbW02PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW0wICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xkcSAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwdW5wY2toZHEgICBtbTEsIG1tMyAgICAgICAgICAgICAgICA7IG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgbW92cSAgICAgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbGRxICAgbW01LCBtbTYgICAgICAgICAgICAgICAgOyBtbTU9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIHB1bnBja2hkcSAgIG1tNCwgbW02ICAgICAgICAgICAgICAgIDsgbW00PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworICAgIHB1c2hwaWMgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgc2F2ZSBHT1QgYWRkcmVzcworCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTEKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNAorCisgICAgcG9wcGljICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEdPVCBhZGRyZXNzCisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVCAgOyB3c3B0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGpueiAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0Zmx0LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0Zmx0LXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTcxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RmbHQtc3NlMi5hc20KQEAgLTAsMCArMSw0OTkgQEAKKzsKKzsgamlkY3RmbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgSURDVCAoU1NFICYgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZsdC5jOyBzZWUgdGhlIGppZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJW1hY3JvIHVucGNrbHBzMiAyICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMCAxIDQgNSkKKyAgICBzaHVmcHMgICAgICAlMSwgJTIsIDB4NDQKKyVlbmRtYWNybworCislbWFjcm8gdW5wY2tocHMyIDIgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorICAgIHNodWZwcyAgICAgICUxLCAlMiwgMHhFRQorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2lkY3RfZmxvYXRfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UyKToKKworUERfMV80MTQgICAgICAgIHRpbWVzIDQgIGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcgICAgICAgIHRpbWVzIDQgIGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgorUERfMV8wODIgICAgICAgIHRpbWVzIDQgIGRkICAxLjA4MjM5MjIwMDI5MjM5Mzk2ODc5OTQ0NgorUERfTTJfNjEzICAgICAgIHRpbWVzIDQgIGRkIC0yLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NgorUERfUk5ESU5UX01BR0lDIHRpbWVzIDQgIGRkICAxMDA2NjMyOTYuMCAgOyAoZmxvYXQpKDB4MDBDMDAwMDAgPDwgMykKK1BCX0NFTlRFUkpTQU1QICB0aW1lcyAxNiBkYiAgQ0VOVEVSSlNBTVBMRQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfZmxvYXRfc3NlMih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBkY3RfdGFibGUoYikgICAoYikgKyA4ICAgICAgICAgIDsgdm9pZCAqZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikgIChiKSArIDEyICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDIKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgd2soMCkgLSBEQ1RTSVpFMiAqIFNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3b3Jrc3BhY2VdCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisKKzsgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgOyBxdWFudHB0cgorICAgIG1vdiAgICAgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gIDsgaW5wdHIKKyAgICBsZWEgICAgICAgICBlZGksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKndzcHRyCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzQgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfRkxPQVRfU1NFCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uRENUCisKKyAgICBtb3ZxICAgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW0zLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW00LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW02LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW03LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW0yCisgICAgcG9yICAgICAgICAgeG1tMywgeG1tNAorICAgIHBvciAgICAgICAgIHhtbTUsIHhtbTYKKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW0zCisgICAgcG9yICAgICAgICAgeG1tNSwgeG1tNworICAgIHBvciAgICAgICAgIHhtbTEsIHhtbTUKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0xCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0xCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZxICAgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgIHBzcmFkICAgICAgIHhtbTAsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICBjdnRkcTJwcyAgICB4bW0wLCB4bW0wICAgICAgICAgICAgICAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisKKyAgICBtdWxwcyAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTIsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW0wCisKKyAgICBzaHVmcHMgICAgICB4bW0wLCB4bW0wLCAweDAwICAgICAgICA7IHhtbTA9KDAwIDAwIDAwIDAwKQorICAgIHNodWZwcyAgICAgIHhtbTEsIHhtbTEsIDB4NTUgICAgICAgIDsgeG1tMT0oMDEgMDEgMDEgMDEpCisgICAgc2h1ZnBzICAgICAgeG1tMiwgeG1tMiwgMHhBQSAgICAgICAgOyB4bW0yPSgwMiAwMiAwMiAwMikKKyAgICBzaHVmcHMgICAgICB4bW0zLCB4bW0zLCAweEZGICAgICAgICA7IHhtbTM9KDAzIDAzIDAzIDAzKQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgam1wICAgICAgICAgbmVhciAubmV4dGNvbHVtbgorICAgIGFsaWdueCAgICAgIDE2LCA3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgeG1tMCwgWE1NX01NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgeG1tMywgWE1NX01NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0wICAgICAgICAgICAgICAgICAgOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW0xICAgICAgICAgICAgICAgICAgOyB4bW0xPSgyMCAyMCAyMSAyMSAyMiAyMiAyMyAyMykKKyAgICBwc3JhZCAgICAgICB4bW0wLCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgcHNyYWQgICAgICAgeG1tMSwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQorICAgIGN2dGRxMnBzICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICBjdnRkcTJwcyAgICB4bW0xLCB4bW0xICAgICAgICAgICAgICAgICAgOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCisKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0yICAgICAgICAgICAgICAgICAgOyB4bW0yPSg0MCA0MCA0MSA0MSA0MiA0MiA0MyA0MykKKyAgICBwdW5wY2tsd2QgICB4bW0zLCB4bW0zICAgICAgICAgICAgICAgICAgOyB4bW0zPSg2MCA2MCA2MSA2MSA2MiA2MiA2MyA2MykKKyAgICBwc3JhZCAgICAgICB4bW0yLCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCisgICAgcHNyYWQgICAgICAgeG1tMywgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorICAgIGN2dGRxMnBzICAgIHhtbTIsIHhtbTIgICAgICAgICAgICAgICAgICA7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKyAgICBjdnRkcTJwcyAgICB4bW0zLCB4bW0zICAgICAgICAgICAgICAgICAgOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCisKKyAgICBtdWxwcyAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgIG11bHBzICAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgbXVscHMgICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBtdWxwcyAgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTEKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW0zCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCisKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF8xXzQxNCldCisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyCisKKyAgICBtb3ZhcHMgICAgICB4bW02LCB4bW00CisgICAgbW92YXBzICAgICAgeG1tNywgeG1tMAorICAgIHN1YnBzICAgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND10bXAzCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXRtcDIKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9dG1wMAorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz10bXAxCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHRtcDMKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIHhtbTUsIFhNTV9NTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIHhtbTEsIFhNTV9NTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oMTAgMTAgMTEgMTEgMTIgMTIgMTMgMTMpCisgICAgcHVucGNrbHdkICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgICAgIDsgeG1tMz0oMzAgMzAgMzEgMzEgMzIgMzIgMzMgMzMpCisgICAgcHNyYWQgICAgICAgeG1tMiwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorICAgIHBzcmFkICAgICAgIHhtbTMsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKKyAgICBjdnRkcTJwcyAgICB4bW0yLCB4bW0yICAgICAgICAgICAgICAgICAgOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCisgICAgY3Z0ZHEycHMgICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgICAgIDsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQorCisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tNSAgICAgICAgICAgICAgICAgIDsgeG1tNT0oNTAgNTAgNTEgNTEgNTIgNTIgNTMgNTMpCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgICAgIDsgeG1tMT0oNzAgNzAgNzEgNzEgNzIgNzIgNzMgNzMpCisgICAgcHNyYWQgICAgICAgeG1tNSwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQorICAgIHBzcmFkICAgICAgIHhtbTEsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKyAgICBjdnRkcTJwcyAgICB4bW01LCB4bW01ICAgICAgICAgICAgICAgICAgOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisgICAgY3Z0ZHEycHMgICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgICAgIDsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQorCisgICAgbXVscHMgICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBtdWxwcyAgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgIG11bHBzICAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgbXVscHMgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTIKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW01CisgICAgYWRkcHMgICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT16MTMKKyAgICBzdWJwcyAgICAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9ejEyCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXoxMAorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tMgorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTUKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wNworCisgICAgbXVscHMgICAgICAgeG1tMiwgW0dPVE9GRihlYngsUERfMV80MTQpXSAgOyB4bW0yPXRtcDExCisKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW0wCisgICAgYWRkcHMgICAgICAgeG1tMCwgeG1tNAorICAgIG11bHBzICAgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0gICA7IHhtbTA9ejUKKyAgICBtdWxwcyAgICAgICB4bW0zLCBbR09UT0ZGKGVieCxQRF9NMl82MTMpXSAgOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisgICAgbXVscHMgICAgICAgeG1tNCwgW0dPVE9GRihlYngsUERfMV8wODIpXSAgIDsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgYWRkcHMgICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMz10bXAxMgorICAgIHN1YnBzICAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBzdWJwcyAgICAgICB4bW0zLCB4bW0xICAgICAgICAgICAgICA7IHhtbTM9dG1wNgorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTYKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW03CisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTE9KDEwIDExIDEyIDEzKQorICAgIHN1YnBzICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNz0oNzAgNzEgNzIgNzMpCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPWRhdGE2PSg2MCA2MSA2MiA2MykKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9dG1wNQorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAwMSAxMSkKKyAgICB1bnBja2hwcyAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KDAyIDEyIDAzIDEzKQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHVucGNrbHBzICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD0oNjAgNzAgNjEgNzEpCisgICAgdW5wY2tocHMgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSg2MiA3MiA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz10bXAyCisgICAgbW92YXBzICAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDMKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9KDYwIDcwIDYxIDcxKQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDYyIDcyIDYzIDczKQorCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDQKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW03CisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNQorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMpCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQorICAgIHN1YnBzICAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMz0oMzAgMzEgMzIgMzMpCisKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9KDIwIDMwIDIxIDMxKQorICAgIHVucGNraHBzICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PSg0MCA1MCA0MSA1MSkKKyAgICB1bnBja2hwcyAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9KDQyIDUyIDQzIDUzKQorCisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCkKKyAgICB1bnBja2hwczIgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9KDAxIDExIDIxIDMxKQorICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT0oMDIgMTIgMjIgMzIpCisgICAgdW5wY2tocHMyICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPSgwMyAxMyAyMyAzMykKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz0oNjAgNzAgNjEgNzEpCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbd2soMSldICAgOyB4bW0yPSg2MiA3MiA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCisgICAgbW92YXBzICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PSg0MCA1MCA2MCA3MCkKKyAgICB1bnBja2hwczIgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDQxIDUxIDYxIDcxKQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oNDIgNTIgNjIgNzIpCisgICAgdW5wY2tocHMyICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB4bW0zPSg0MyA1MyA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworCisubmV4dGNvbHVtbjoKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYgICAgICAgICAgICAgICA7IGNvZWZfYmxvY2sKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgNCpTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFICAgICA7IHF1YW50cHRyCisgICAgYWRkICAgICAgICAgZWRpLCAgICAgIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVCAgOyB3c3B0cgorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgIHByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICBwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbGVhICAgICAgICAgZXNpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKndzcHRyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92YXBzICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW0wCisgICAgbW92YXBzICAgICAgeG1tNSwgeG1tMQorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgIHN1YnBzICAgICAgIHhtbTEsIHhtbTMKKyAgICBhZGRwcyAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICBhZGRwcyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKworICAgIG11bHBzICAgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIKKworICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTQKKyAgICBtb3ZhcHMgICAgICB4bW03LCB4bW0wCisgICAgc3VicHMgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PXRtcDEKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgdG1wMworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgdG1wMgorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW0yCisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNQorICAgIGFkZHBzICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj16MTEKKyAgICBhZGRwcyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ejEzCisgICAgc3VicHMgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PXoxMgorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD16MTAKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTIKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW01CisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDcKKworICAgIG11bHBzICAgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0gIDsgeG1tMj10bXAxMQorCisgICAgbW92YXBzICAgICAgeG1tMywgeG1tMAorICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTQKKyAgICBtdWxwcyAgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQRF8xXzg0NyldICAgOyB4bW0wPXo1CisgICAgbXVscHMgICAgICAgeG1tMywgW0dPVE9GRihlYngsUERfTTJfNjEzKV0gIDsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQorICAgIG11bHBzICAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0gICA7IHhtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTIKKyAgICBzdWJwcyAgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgc3VicHMgICAgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPXRtcDYKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW02CisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNworICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDA3IDE3IDI3IDM3KQorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oMDYgMTYgMjYgMzYpCisgICAgc3VicHMgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldICA7IHhtbTE9W1BEX1JORElOVF9NQUdJQ10KKyAgICBwY21wZXFkICAgICB4bW0zLCB4bW0zCisgICAgcHNybGQgICAgICAgeG1tMywgV09SRF9CSVQgICAgICAgICAgOyB4bW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDAgLi59CisKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9cm91bmRpbnQoZGF0YTAvOCk9KDAwICoqIDEwICoqIDIwICoqIDMwICoqKQorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiogMjEgKiogMzEgKiopCisgICAgYWRkcHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXJvdW5kaW50KGRhdGE2LzgpPSgwNiAqKiAxNiAqKiAyNiAqKiAzNiAqKikKKyAgICBhZGRwcyAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9cm91bmRpbnQoZGF0YTcvOCk9KDA3ICoqIDE3ICoqIDI3ICoqIDM3ICoqKQorCisgICAgcGFuZCAgICAgICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PSgwMCAtLSAxMCAtLSAyMCAtLSAzMCAtLSkKKyAgICBwc2xsZCAgICAgICB4bW03LCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTc9KC0tIDAxIC0tIDExIC0tIDIxIC0tIDMxKQorICAgIHBhbmQgICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oMDYgLS0gMTYgLS0gMjYgLS0gMzYgLS0pCisgICAgcHNsbGQgICAgICAgeG1tNSwgV09SRF9CSVQgICAgICAgICAgOyB4bW01PSgtLSAwNyAtLSAxNyAtLSAyNyAtLSAzNykKKyAgICBwb3IgICAgICAgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgIHBvciAgICAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisKKyAgICBtb3ZhcHMgICAgICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9dG1wMgorICAgIG1vdmFwcyAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz10bXAzCisKKyAgICBhZGRwcyAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9dG1wNAorICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTEKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0zCisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPWRhdGEyPSgwMiAxMiAyMiAzMikKKyAgICBhZGRwcyAgICAgICB4bW0zLCB4bW00ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTQ9KDA0IDE0IDI0IDM0KQorICAgIHN1YnBzICAgICAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNT0oMDUgMTUgMjUgMzUpCisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKKworICAgIG1vdmFwcyAgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldICA7IHhtbTI9W1BEX1JORElOVF9NQUdJQ10KKyAgICBwY21wZXFkICAgICB4bW00LCB4bW00CisgICAgcHNybGQgICAgICAgeG1tNCwgV09SRF9CSVQgICAgICAgICAgOyB4bW00PXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDAgLi59CisKKyAgICBhZGRwcyAgICAgICB4bW0zLCB4bW0yICAgICAgICAgICAgICA7IHhtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqIDI0ICoqIDM0ICoqKQorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz1yb3VuZGludChkYXRhNS84KT0oMDUgKiogMTUgKiogMjUgKiogMzUgKiopCisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPXJvdW5kaW50KGRhdGEyLzgpPSgwMiAqKiAxMiAqKiAyMiAqKiAzMiAqKikKKyAgICBhZGRwcyAgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHhtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqIDIzICoqIDMzICoqKQorCisgICAgcGFuZCAgICAgICAgeG1tMywgeG1tNCAgICAgICAgICAgICAgOyB4bW0zPSgwNCAtLSAxNCAtLSAyNCAtLSAzNCAtLSkKKyAgICBwc2xsZCAgICAgICB4bW03LCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTc9KC0tIDA1IC0tIDE1IC0tIDI1IC0tIDM1KQorICAgIHBhbmQgICAgICAgIHhtbTEsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMT0oMDIgLS0gMTIgLS0gMjIgLS0gMzIgLS0pCisgICAgcHNsbGQgICAgICAgeG1tNSwgV09SRF9CSVQgICAgICAgICAgOyB4bW01PSgtLSAwMyAtLSAxMyAtLSAyMyAtLSAzMykKKyAgICBwb3IgICAgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorICAgIHBvciAgICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldICA7IHhtbTI9W1BCX0NFTlRFUkpTQU1QXQorCisgICAgcGFja3Nzd2IgICAgeG1tNiwgeG1tMyAgICAgICAgOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSAwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0wICAgICAgICA7IHhtbTE9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgIHBhZGRiICAgICAgIHhtbTYsIHhtbTIKKyAgICBwYWRkYiAgICAgICB4bW0xLCB4bW0yCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0xICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTEgICAgICAgIDsgeG1tND0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW00ICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIHB1bnBja2hkcSAgIHhtbTcsIHhtbTQgICAgICAgIDsgeG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKyAgICBwc2h1ZmQgICAgICB4bW01LCB4bW02LCAweDRFICA7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHBzaHVmZCAgICAgIHhtbTMsIHhtbTcsIDB4NEUgIDsgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisKKyAgICBwdXNocGljICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworCisgICAgcG9wcGljICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEdPVCBhZGRyZXNzCisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVCAgOyB3c3B0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGpueiAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3Rmc3QtbW14LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qaWRjdGZzdC1tbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZThhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3Rmc3QtbW14LmFzbQpAQCAtMCwwICsxLDUwMSBAQAorOworOyBqaWRjdGZzdC5hc20gLSBmYXN0IGludGVnZXIgSURDVCAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0ZnN0LmM7IHNlZSB0aGUgamlkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDggIDsgMTQgaXMgYWxzbyBPSy4KKyVkZWZpbmUgUEFTUzFfQklUUyAgMgorCislaWYgSUZBU1RfU0NBTEVfQklUUyAhPSBQQVNTMV9CSVRTCislZXJyb3IgIidJRkFTVF9TQ0FMRV9CSVRTJyBtdXN0IGJlIGVxdWFsIHRvICdQQVNTMV9CSVRTJy4iCislZW5kaWYKKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8xXzA4MiBlcXUgMjc3ICAgICAgICAgICAgICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1IDM2MiAgICAgICAgICAgICAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSA0NzMgICAgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgNjY5ICAgICAgICAgICAgICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1IChGXzJfNjEzIC0gMjU2KSAgOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8xXzA4MiBlcXUgREVTQ0FMRSgxMTYyMjA5Nzc1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1IERFU0NBTEUoMTUxODUwMDI0OSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSBERVNDQUxFKDE5ODQwMTYxODgsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgREVTQ0FMRSgyODA1ODIyNjAyLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1IChGXzJfNjEzIC0gKDEgPDwgQ09OU1RfQklUUykpICAgICAgIDsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICAgICAgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2lkY3RfaWZhc3RfbW14KQorCitFWFROKGpjb25zdF9pZGN0X2lmYXN0X21teCk6CisKK1BXX0YxNDE0ICAgICAgIHRpbWVzIDQgZHcgIEZfMV80MTQgPDwgQ09OU1RfU0hJRlQKK1BXX0YxODQ3ICAgICAgIHRpbWVzIDQgZHcgIEZfMV84NDcgPDwgQ09OU1RfU0hJRlQKK1BXX01GMTYxMyAgICAgIHRpbWVzIDQgZHcgLUZfMV82MTMgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMDgyICAgICAgIHRpbWVzIDQgZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKK1BCX0NFTlRFUkpTQU1QIHRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0X2lmYXN0X21teCh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKSAgIChiKSArIDggICAgICAgICAgOyBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikgIChiKSArIDEyICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAyCislZGVmaW5lIHdvcmtzcGFjZSAgICAgIHdrKDApIC0gRENUU0laRTIgKiBTSVpFT0ZfSkNPRUYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEpDT0VGIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfaWZhc3RfbW14KQorCitFWFROKGpzaW1kX2lkY3RfaWZhc3RfbW14KToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3b3Jrc3BhY2VdCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisKKzsgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgOyBxdWFudHB0cgorICAgIG1vdiAgICAgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gIDsgaW5wdHIKKyAgICBsZWEgICAgICAgICBlZGksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICA7IEpDT0VGICp3c3B0cgorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb2x1bW5sb29wOgorJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lGQVNUX01NWAorICAgIG1vdiAgICAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG9yICAgICAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIGpueiAgICAgICAgIHNob3J0IC5jb2x1bW5EQ1QKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTEsIG1tMAorICAgIHBhY2tzc3diICAgIG1tMSwgbW0xCisgICAgbW92ZCAgICAgICAgZWF4LCBtbTEKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIHNob3J0IC5jb2x1bW5EQ1QKKworICAgIDsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisgICAgbW92cSAgICAgICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgcHVucGNraHdkICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAzIDAzKQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsZHEgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDAgMDApCisgICAgcHVucGNraGRxICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KDAxIDAxIDAxIDAxKQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yCisgICAgcHVucGNrbGRxICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAyIDAyKQorICAgIHB1bnBja2hkcSAgIG1tMywgbW0zICAgICAgICAgICAgICAgIDsgbW0zPSgwMyAwMyAwMyAwMykKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisgICAgam1wICAgICAgICAgbmVhciAubmV4dGNvbHVtbgorICAgIGFsaWdueCAgICAgIDE2LCA3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMAorICAgIG1vdnEgICAgICAgIG1tNSwgbW0xCisgICAgcHN1YncgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTEKKyAgICBwc3VidyAgICAgICBtbTEsIG1tMworICAgIHBhZGR3ICAgICAgIG1tNCwgbW0yICAgICAgICAgICAgICAgIDsgbW00PXRtcDEwCisgICAgcGFkZHcgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTMKKworICAgIHBzbGx3ICAgICAgIG1tMSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICBtbTEsIFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KKyAgICBwc3VidyAgICAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IG1tMT10bXAxMgorCisgICAgbW92cSAgICAgICAgbW02LCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMAorICAgIHBzdWJ3ICAgICAgIG1tNCwgbW01ICAgICAgICAgICAgICAgIDsgbW00PXRtcDMKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD10bXAyCisgICAgcGFkZHcgICAgICAgbW02LCBtbTUgICAgICAgICAgICAgICAgOyBtbTY9dG1wMAorICAgIHBhZGR3ICAgICAgIG1tNywgbW0xICAgICAgICAgICAgICAgIDsgbW03PXRtcDEKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTQgICAgIDsgd2soMSk9dG1wMworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMCldLCBtbTAgICAgIDsgd2soMCk9dG1wMgorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMgorICAgIG1vdnEgICAgICAgIG1tMCwgbW01CisgICAgcHN1YncgICAgICAgbW0yLCBtbTEgICAgICAgICAgICAgICAgOyBtbTI9ejEyCisgICAgcHN1YncgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9ejEwCisgICAgcGFkZHcgICAgICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyBtbTQ9ejExCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTMgICAgICAgICAgICAgICAgOyBtbTA9ejEzCisKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IG1tMT16MTAodW5zY2FsZWQpCisgICAgcHNsbHcgICAgICAgbW0yLCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgIHBzbGx3ICAgICAgIG1tNSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKworICAgIG1vdnEgICAgICAgIG1tMywgbW00CisgICAgcHN1YncgICAgICAgbW00LCBtbTAKKyAgICBwYWRkdyAgICAgICBtbTMsIG1tMCAgICAgICAgICAgICAgICA7IG1tMz10bXA3CisKKyAgICBwc2xsdyAgICAgICBtbTQsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgbW00LCBbR09UT0ZGKGVieCxQV19GMTQxNCldICA7IG1tND10bXAxMQorCisgICAgOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorICAgIDsKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworICAgIDsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW01CisgICAgcGFkZHcgICAgICAgbW01LCBtbTIKKyAgICBwbXVsaHcgICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0gICA7IG1tNT16NQorICAgIHBtdWxodyAgICAgIG1tMCwgW0dPVE9GRihlYngsUFdfTUYxNjEzKV0KKyAgICBwbXVsaHcgICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX0YxMDgyKV0KKyAgICBwc3VidyAgICAgICBtbTAsIG1tMQorICAgIHBzdWJ3ICAgICAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTUgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTIKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD10bXA2CisgICAgbW92cSAgICAgICAgbW0xLCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tNworICAgIHBhZGR3ICAgICAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCisgICAgcHN1YncgICAgICAgbW0xLCBtbTMgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTc9KDcwIDcxIDcyIDczKQorICAgIHBzdWJ3ICAgICAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW01PWRhdGE2PSg2MCA2MSA2MiA2MykKKyAgICBwc3VidyAgICAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IG1tND10bXA1CisKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMDEgMTEpCisgICAgcHVucGNraHdkICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTM9KDAyIDEyIDAzIDEzKQorICAgIG1vdnEgICAgICAgIG1tMCwgbW01ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tNSwgbW0xICAgICAgICAgICAgICAgIDsgbW01PSg2MCA3MCA2MSA3MSkKKyAgICBwdW5wY2tod2QgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD0oNjIgNzIgNjMgNzMpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIE1NV09SRCBbd2soMCldICAgICA7IG1tNz10bXAyCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTE9dG1wMworCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNSAgICAgOyB3aygwKT0oNjAgNzAgNjEgNzEpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMCAgICAgOyB3aygxKT0oNjIgNzIgNjMgNzMpCisKKyAgICBwYWRkdyAgICAgICBtbTIsIG1tNCAgICAgICAgICAgICAgICA7IG1tMj10bXA0CisgICAgbW92cSAgICAgICAgbW01LCBtbTcKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tMQorICAgIHBhZGR3ICAgICAgIG1tNywgbW00ICAgICAgICAgICAgICAgIDsgbW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICA7IG1tMT1kYXRhND0oNDAgNDEgNDIgNDMpCisgICAgcHN1YncgICAgICAgbW01LCBtbTQgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzKQorICAgIHBzdWJ3ICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0wPWRhdGEzPSgzMCAzMSAzMiAzMykKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW03ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tNywgbW0wICAgICAgICAgICAgICAgIDsgbW03PSgyMCAzMCAyMSAzMSkKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IG1tND0oMjIgMzIgMjMgMzMpCisgICAgbW92cSAgICAgICAgbW0yLCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0xLCBtbTUgICAgICAgICAgICAgICAgOyBtbTE9KDQwIDUwIDQxIDUxKQorICAgIHB1bnBja2h3ZCAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPSg0MiA1MiA0MyA1MykKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW02ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNiwgbW03ICAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCAyMCAzMCkKKyAgICBwdW5wY2toZHEgICBtbTAsIG1tNyAgICAgICAgICAgICAgICA7IG1tMD0oMDEgMTEgMjEgMzEpCisgICAgbW92cSAgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0zLCBtbTQgICAgICAgICAgICAgICAgOyBtbTM9KDAyIDEyIDIyIDMyKQorICAgIHB1bnBja2hkcSAgIG1tNSwgbW00ICAgICAgICAgICAgICAgIDsgbW01PSgwMyAxMyAyMyAzMykKKworICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW03PSg2MCA3MCA2MSA3MSkKKyAgICBtb3ZxICAgICAgICBtbTQsIE1NV09SRCBbd2soMSldICAgICA7IG1tND0oNjIgNzIgNjMgNzMpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW01CisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMSAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tMT0oNDAgNTAgNjAgNzApCisgICAgcHVucGNraGRxICAgbW02LCBtbTcgICAgICAgICAgICAgICAgOyBtbTY9KDQxIDUxIDYxIDcxKQorICAgIG1vdnEgICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tMiwgbW00ICAgICAgICAgICAgICAgIDsgbW0yPSg0MiA1MiA2MiA3MikKKyAgICBwdW5wY2toZHEgICBtbTAsIG1tNCAgICAgICAgICAgICAgICA7IG1tMD0oNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisKKy5uZXh0Y29sdW1uOgorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRiAgICAgICAgICAgIDsgY29lZl9ibG9jaworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSA0KlNJWkVPRl9JRkFTVF9NVUxUX1RZUEUgIDsgcXVhbnRwdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9KQ09FRiAgICA7IHdzcHRyCisgICAgZGVjICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworICAgIG1vdiAgICAgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICBsZWEgICAgICAgICBlc2ksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgKndzcHRyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTAKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMQorICAgIHBzdWJ3ICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0wPXRtcDExCisgICAgcHN1YncgICAgICAgbW0xLCBtbTMKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tMiAgICAgICAgICAgICAgICA7IG1tND10bXAxMAorICAgIHBhZGR3ICAgICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PXRtcDEzCisKKyAgICBwc2xsdyAgICAgICBtbTEsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19GMTQxNCldCisgICAgcHN1YncgICAgICAgbW0xLCBtbTUgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTIKKworICAgIG1vdnEgICAgICAgIG1tNiwgbW00CisgICAgbW92cSAgICAgICAgbW03LCBtbTAKKyAgICBwc3VidyAgICAgICBtbTQsIG1tNSAgICAgICAgICAgICAgICA7IG1tND10bXAzCisgICAgcHN1YncgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9dG1wMgorICAgIHBhZGR3ICAgICAgIG1tNiwgbW01ICAgICAgICAgICAgICAgIDsgbW02PXRtcDAKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz10bXAxCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW00ICAgICA7IHdrKDEpPXRtcDMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgICA7IHdrKDApPXRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0yCisgICAgbW92cSAgICAgICAgbW0wLCBtbTUKKyAgICBwc3VidyAgICAgICBtbTIsIG1tMSAgICAgICAgICAgICAgICA7IG1tMj16MTIKKyAgICBwc3VidyAgICAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT16MTAKKyAgICBwYWRkdyAgICAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND16MTEKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD16MTMKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW01ICAgICAgICAgICAgICAgIDsgbW0xPXoxMCh1bnNjYWxlZCkKKyAgICBwc2xsdyAgICAgICBtbTIsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcHNsbHcgICAgICAgbW01LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgbW92cSAgICAgICAgbW0zLCBtbTQKKyAgICBwc3VidyAgICAgICBtbTQsIG1tMAorICAgIHBhZGR3ICAgICAgIG1tMywgbW0wICAgICAgICAgICAgICAgIDsgbW0zPXRtcDcKKworICAgIHBzbGx3ICAgICAgIG1tNCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0gIDsgbW00PXRtcDExCisKKyAgICA7IFRvIGF2b2lkIG92ZXJmbG93Li4uCisgICAgOworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7CisgICAgOyAgICAgICA9IC0xLjYxMzEyNTkzMCAqIHoxMCAtIHoxMCArIHo1OworCisgICAgbW92cSAgICAgICAgbW0wLCBtbTUKKyAgICBwYWRkdyAgICAgICBtbTUsIG1tMgorICAgIHBtdWxodyAgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfRjE4NDcpXSAgIDsgbW01PXo1CisgICAgcG11bGh3ICAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19NRjE2MTMpXQorICAgIHBtdWxodyAgICAgIG1tMiwgW0dPVE9GRihlYngsUFdfRjEwODIpXQorICAgIHBzdWJ3ICAgICAgIG1tMCwgbW0xCisgICAgcHN1YncgICAgICAgbW0yLCBtbTUgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTAKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tNSAgICAgICAgICAgICAgICA7IG1tMD10bXAxMgorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIHBzdWJ3ICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPXRtcDYKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNgorICAgIG1vdnEgICAgICAgIG1tNSwgbW03CisgICAgcGFkZHcgICAgICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgIHBhZGR3ICAgICAgIG1tNywgbW0wICAgICAgICAgICAgICAgIDsgbW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICBwc3JhdyAgICAgICBtbTYsIChQQVNTMV9CSVRTKzMpICAgICA7IGRlc2NhbGUKKyAgICBwc3JhdyAgICAgICBtbTcsIChQQVNTMV9CSVRTKzMpICAgICA7IGRlc2NhbGUKKyAgICBwc3VidyAgICAgICBtbTEsIG1tMyAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNz0oMDcgMTcgMjcgMzcpCisgICAgcHN1YncgICAgICAgbW01LCBtbTAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTY9KDA2IDE2IDI2IDM2KQorICAgIHBzcmF3ICAgICAgIG1tMSwgKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgIHBzcmF3ICAgICAgIG1tNSwgKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgIHBzdWJ3ICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgbW00PXRtcDUKKworICAgIHBhY2tzc3diICAgIG1tNiwgbW01ICAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKyAgICBwYWNrc3N3YiAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbd2soMCldICAgICA7IG1tMz10bXAyCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTA9dG1wMworCisgICAgcGFkZHcgICAgICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9dG1wNAorICAgIG1vdnEgICAgICAgIG1tNSwgbW0zCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwYWRkdyAgICAgICBtbTMsIG1tNCAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTQ9KDA0IDE0IDI0IDM0KQorICAgIHBzcmF3ICAgICAgIG1tMywgKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgIHBzcmF3ICAgICAgIG1tMCwgKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgIHBzdWJ3ICAgICAgIG1tNSwgbW00ICAgICAgICAgICAgICAgIDsgbW01PWRhdGE1PSgwNSAxNSAyNSAzNSkKKyAgICBwc3VidyAgICAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMz0oMDMgMTMgMjMgMzMpCisgICAgcHNyYXcgICAgICAgbW01LCAoUEFTUzFfQklUUyszKSAgICAgOyBkZXNjYWxlCisgICAgcHNyYXcgICAgICAgbW0xLCAoUEFTUzFfQklUUyszKSAgICAgOyBkZXNjYWxlCisKKyAgICBtb3ZxICAgICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0gIDsgbW00PVtQQl9DRU5URVJKU0FNUF0KKworICAgIHBhY2tzc3diICAgIG1tMywgbW0wICAgICAgICAgICAgICAgIDsgbW0zPSgwMiAxMiAyMiAzMiAwNCAxNCAyNCAzNCkKKyAgICBwYWNrc3N3YiAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IG1tMT0oMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUpCisKKyAgICBwYWRkYiAgICAgICBtbTYsIG1tNAorICAgIHBhZGRiICAgICAgIG1tNywgbW00CisgICAgcGFkZGIgICAgICAgbW0zLCBtbTQKKyAgICBwYWRkYiAgICAgICBtbTEsIG1tNAorCisgICAgbW92cSAgICAgICAgbW0yLCBtbTYgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbGJ3ICAgbW02LCBtbTcgICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgIHB1bnBja2hidyAgIG1tMiwgbW03ICAgICAgICAgICAgICAgIDsgbW0yPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsYncgICBtbTMsIG1tMSAgICAgICAgICAgICAgICA7IG1tMz0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgcHVucGNraGJ3ICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorCisgICAgbW92cSAgICAgICAgbW01LCBtbTYgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbHdkICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgcHVucGNraHdkICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCisgICAgbW92cSAgICAgICAgbW03LCBtbTYgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbGRxICAgbW02LCBtbTAgICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHB1bnBja2hkcSAgIG1tNywgbW0wICAgICAgICAgICAgICAgIDsgbW03PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tsZHEgICBtbTUsIG1tNCAgICAgICAgICAgICAgICA7IG1tNT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgcHVucGNraGRxICAgbW0xLCBtbTQgICAgICAgICAgICAgICAgOyBtbTE9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisgICAgcHVzaHBpYyAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIEdPVCBhZGRyZXNzCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW01CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisKKyAgICBwb3BwaWMgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgR09UIGFkZHJlc3MKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRiAgICAgOyB3c3B0cgorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBqbnogICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qaWRjdGZzdC1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qaWRjdGZzdC1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JjNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0ZnN0LXNzZTIuYXNtCkBAIC0wLDAgKzEsNTAzIEBACis7Cis7IGppZGN0ZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBJRENUIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0ZnN0LmM7IHNlZSB0aGUgamlkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDggIDsgMTQgaXMgYWxzbyBPSy4KKyVkZWZpbmUgUEFTUzFfQklUUyAgMgorCislaWYgSUZBU1RfU0NBTEVfQklUUyAhPSBQQVNTMV9CSVRTCislZXJyb3IgIidJRkFTVF9TQ0FMRV9CSVRTJyBtdXN0IGJlIGVxdWFsIHRvICdQQVNTMV9CSVRTJy4iCislZW5kaWYKKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8xXzA4MiBlcXUgMjc3ICAgICAgICAgICAgICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1IDM2MiAgICAgICAgICAgICAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSA0NzMgICAgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgNjY5ICAgICAgICAgICAgICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1IChGXzJfNjEzIC0gMjU2KSAgOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8xXzA4MiBlcXUgREVTQ0FMRSgxMTYyMjA5Nzc1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1IERFU0NBTEUoMTUxODUwMDI0OSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSBERVNDQUxFKDE5ODQwMTYxODgsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgREVTQ0FMRSgyODA1ODIyNjAyLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1IChGXzJfNjEzIC0gKDEgPDwgQ09OU1RfQklUUykpICAgICAgIDsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICAgICAgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKToKKworUFdfRjE0MTQgICAgICAgdGltZXMgOCAgZHcgIEZfMV80MTQgPDwgQ09OU1RfU0hJRlQKK1BXX0YxODQ3ICAgICAgIHRpbWVzIDggIGR3ICBGXzFfODQ3IDw8IENPTlNUX1NISUZUCitQV19NRjE2MTMgICAgICB0aW1lcyA4ICBkdyAtRl8xXzYxMyA8PCBDT05TVF9TSElGVAorUFdfRjEwODIgICAgICAgdGltZXMgOCAgZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKK1BCX0NFTlRFUkpTQU1QIHRpbWVzIDE2IGRiICBDRU5URVJKU0FNUExFCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF9pZmFzdF9zc2UyKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKSAgIChiKSArIDggICAgICAgICAgOyBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikgIChiKSArIDEyICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqc2ltZF9pZGN0X2lmYXN0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKzsgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgOyBxdWFudHB0cgorICAgIG1vdiAgICAgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gIDsgaW5wdHIKKworJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lGQVNUX1NTRTIKKyAgICBtb3YgICAgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBvciAgICAgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5EQ1QKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW0wCisgICAgcGFja3Nzd2IgICAgeG1tMSwgeG1tMQorICAgIHBhY2tzc3diICAgIHhtbTEsIHhtbTEKKyAgICBtb3ZkICAgICAgICBlYXgsIHhtbTEKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIHNob3J0IC5jb2x1bW5EQ1QKKworICAgIDsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW03ICAgICAgICAgICAgICA7IHhtbTc9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQorCisgICAgcHNodWZkICAgICAgeG1tNiwgeG1tMCwgMHgwMCAgICAgICAgOyB4bW02PWNvbDA9KDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwKQorICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTAsIDB4NTUgICAgICAgIDsgeG1tMj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKKyAgICBwc2h1ZmQgICAgICB4bW01LCB4bW0wLCAweEFBICAgICAgICA7IHhtbTU9Y29sMj0oMDIgMDIgMDIgMDIgMDIgMDIgMDIgMDIpCisgICAgcHNodWZkICAgICAgeG1tMCwgeG1tMCwgMHhGRiAgICAgICAgOyB4bW0wPWNvbDM9KDAzIDAzIDAzIDAzIDAzIDAzIDAzIDAzKQorICAgIHBzaHVmZCAgICAgIHhtbTEsIHhtbTcsIDB4MDAgICAgICAgIDsgeG1tMT1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKKyAgICBwc2h1ZmQgICAgICB4bW00LCB4bW03LCAweDU1ICAgICAgICA7IHhtbTQ9Y29sNT0oMDUgMDUgMDUgMDUgMDUgMDUgMDUgMDUpCisgICAgcHNodWZkICAgICAgeG1tMywgeG1tNywgMHhBQSAgICAgICAgOyB4bW0zPWNvbDY9KDA2IDA2IDA2IDA2IDA2IDA2IDA2IDA2KQorICAgIHBzaHVmZCAgICAgIHhtbTcsIHhtbTcsIDB4RkYgICAgICAgIDsgeG1tNz1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMiAgIDsgd2soMCk9Y29sMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9Y29sMworICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbl9lbmQKKyAgICBhbGlnbnggICAgICAxNiwgNworJWVuZGlmCisuY29sdW1uRENUOgorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCisKKyAgICBwc2xsdyAgICAgICB4bW0xLCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgIHBtdWxodyAgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0wCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PXRtcDEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgd2soMSk9dG1wMworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9dG1wMgorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNQorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj16MTIKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ejEwCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PXoxMQorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD16MTMKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT16MTAodW5zY2FsZWQpCisgICAgcHNsbHcgICAgICAgeG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICB4bW01LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNAorICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTAKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9dG1wNworCisgICAgcHNsbHcgICAgICAgeG1tNCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW00LCBbR09UT0ZGKGVieCxQV19GMTQxNCldICA7IHhtbTQ9dG1wMTEKKworICAgIDsgVG8gYXZvaWQgb3ZlcmZsb3cuLi4KKyAgICA7CisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB0bXAxMiA9IC0yLjYxMzEyNTkzMCAqIHoxMCArIHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMTIgPSAoLTEuNjEzMTI1OTMwIC0gMSkgKiB6MTAgKyB6NTsKKyAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMgorICAgIHBtdWxodyAgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0gICA7IHhtbTU9ejUKKyAgICBwbXVsaHcgICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19NRjE2MTMpXQorICAgIHBtdWxodyAgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBXX0YxMDgyKV0KKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0xCisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXRtcDYKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorICAgIHBzdWJ3ICAgICAgIHhtbTUsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PXRtcDUKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgcHVucGNraHdkICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9dG1wMgorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT10bXAzCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTUgICA7IHdrKDApPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTAgICA7IHdrKDEpPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj10bXA0CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTEKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1kYXRhND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgcHVucGNraHdkICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgcHVucGNraGRxICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgIHB1bnBja2hkcSAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTQ9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNz0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTMgICA7IHdrKDApPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTAgICA7IHdrKDEpPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTEsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMT0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgcHVucGNraGRxICAgeG1tMywgeG1tNCAgICAgICAgICAgICAgOyB4bW0zPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0yLCB4bW03ICAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgIHB1bnBja2hkcSAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisgICAgcHVucGNraHFkcSAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICBwdW5wY2tocWRxICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPWNvbDEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTcgICA7IHdrKDEpPWNvbDMKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICBwdW5wY2tocWRxICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIHB1bnBja2hxZHEgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKy5jb2x1bW5fZW5kOgorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworICAgIG1vdiAgICAgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICBtb3YgICAgICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0gIDsgKEpTQU1QUk9XICopCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgOyB4bW02PWNvbDAsIHhtbTU9Y29sMiwgeG1tMT1jb2w0LCB4bW0zPWNvbDYKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01CisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PXRtcDExCisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD10bXAxMworCisgICAgcHNsbHcgICAgICAgeG1tNSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19GMTQxNCldCisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PXRtcDEyCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNgorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj10bXAzCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXRtcDIKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9dG1wMAorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz10bXAxCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTA9Y29sMQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT1jb2wzCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPXRtcDMKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIDsgeG1tMD1jb2wxLCB4bW01PWNvbDMsIHhtbTQ9Y29sNSwgeG1tNz1jb2w3CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNAorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD16MTIKKyAgICBwc3VidyAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9ejEwCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj16MTMKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz16MTAodW5zY2FsZWQpCisgICAgcHNsbHcgICAgICAgeG1tMCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICB4bW00LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMgorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTYKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9dG1wNworCisgICAgcHNsbHcgICAgICAgeG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW0yLCBbR09UT0ZGKGVieCxQV19GMTQxNCldICA7IHhtbTI9dG1wMTEKKworICAgIDsgVG8gYXZvaWQgb3ZlcmZsb3cuLi4KKyAgICA7CisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB0bXAxMiA9IC0yLjYxMzEyNTkzMCAqIHoxMCArIHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMTIgPSAoLTEuNjEzMTI1OTMwIC0gMSkgKiB6MTAgKyB6NTsKKyAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00CisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMAorICAgIHBtdWxodyAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0gICA7IHhtbTQ9ejUKKyAgICBwbXVsaHcgICAgICB4bW02LCBbR09UT0ZGKGVieCxQV19NRjE2MTMpXQorICAgIHBtdWxodyAgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBXX0YxMDgyKV0KKyAgICBwc3VidyAgICAgICB4bW02LCB4bW03CisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNCAgICAgICAgICAgICAgOyB4bW02PXRtcDEyCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXRtcDYKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICBwc3JhdyAgICAgICB4bW0xLCAoUEFTUzFfQklUUyszKSAgICA7IGRlc2NhbGUKKyAgICBwc3JhdyAgICAgICB4bW0zLCAoUEFTUzFfQklUUyszKSAgICA7IGRlc2NhbGUKKyAgICBwc3VidyAgICAgICB4bW03LCB4bW01ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgeG1tND1kYXRhNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgcHNyYXcgICAgICAgeG1tNywgKFBBU1MxX0JJVFMrMykgICAgOyBkZXNjYWxlCisgICAgcHNyYXcgICAgICAgeG1tNCwgKFBBU1MxX0JJVFMrMykgICAgOyBkZXNjYWxlCisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNiAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKKworICAgIHBhY2tzc3diICAgIHhtbTEsIHhtbTQgICAgICAgIDsgeG1tMT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgcGFja3Nzd2IgICAgeG1tMywgeG1tNyAgICAgICAgOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT10bXAyCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PXRtcDMKKworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD10bXA0CisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTYKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgcHNyYXcgICAgICAgeG1tNSwgKFBBU1MxX0JJVFMrMykgICAgOyBkZXNjYWxlCisgICAgcHNyYXcgICAgICAgeG1tNiwgKFBBU1MxX0JJVFMrMykgICAgOyBkZXNjYWxlCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICBwc3VidyAgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgIHBzcmF3ICAgICAgIHhtbTQsIChQQVNTMV9CSVRTKzMpICAgIDsgZGVzY2FsZQorICAgIHBzcmF3ICAgICAgIHhtbTcsIChQQVNTMV9CSVRTKzMpICAgIDsgZGVzY2FsZQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXSAgOyB4bW0yPVtQQl9DRU5URVJKU0FNUF0KKworICAgIHBhY2tzc3diICAgIHhtbTUsIHhtbTYgICAgICAgIDsgeG1tNT0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgcGFja3Nzd2IgICAgeG1tNywgeG1tNCAgICAgICAgOyB4bW03PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworICAgIHBhZGRiICAgICAgIHhtbTEsIHhtbTIKKyAgICBwYWRkYiAgICAgICB4bW0zLCB4bW0yCisgICAgcGFkZGIgICAgICAgeG1tNSwgeG1tMgorICAgIHBhZGRiICAgICAgIHhtbTcsIHhtbTIKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTEgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2xidyAgIHhtbTEsIHhtbTMgICAgICAgIDsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgcHVucGNraGJ3ICAgeG1tMCwgeG1tMyAgICAgICAgOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW01ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsYncgICB4bW01LCB4bW03ICAgICAgICA7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgIHB1bnBja2hidyAgIHhtbTYsIHhtbTcgICAgICAgIDsgeG1tNj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0xICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW01ICAgICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTUgICAgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNiAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbHdkICAgeG1tNiwgeG1tMCAgICAgICAgOyB4bW02PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICBwdW5wY2tod2QgICB4bW0yLCB4bW0wICAgICAgICA7IHhtbTI9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3IDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMSAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbGRxICAgeG1tMSwgeG1tNiAgICAgICAgOyB4bW0xPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW02ICAgICAgICA7IHhtbTM9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xkcSAgIHhtbTQsIHhtbTIgICAgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgcHVucGNraGRxICAgeG1tNywgeG1tMiAgICAgICAgOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworICAgIHBzaHVmZCAgICAgIHhtbTUsIHhtbTEsIDB4NEUgIDsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgcHNodWZkICAgICAgeG1tMCwgeG1tMywgMHg0RSAgOyB4bW0wPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICBwc2h1ZmQgICAgICB4bW02LCB4bW00LCAweDRFICA7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTcsIDB4NEUgIDsgeG1tMj0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrNCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzYqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSs1KlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrNypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorICAgIHBvcHBpYyAgICAgIGVieAorICAgIG1vdiAgICAgICAgIGVzcCwgZWJwICAgICAgICAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgcG9wICAgICAgICAgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qaWRjdGludC1hdngyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qaWRjdGludC1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I3YjE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0aW50LWF2eDIuYXNtCkBAIC0wLDAgKzEsNDU1IEBACis7Cis7IGppZGN0aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgSURDVCAoQVZYMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0aW50LmM7IHNlZSB0aGUgamlkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgIDIKKworJWRlZmluZSBERVNDQUxFX1AxICAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDIgIChDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4IGVxdSAgMjQ0NiAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgMzE5NiAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgNDQzMyAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgNjI3MCAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgNzM3MyAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgOTYzMyAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAxMjI5OSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAxNTEzNyAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAxNjA2OSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAxNjgxOSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAyMDk5NSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAyNTE3MiAgOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8wXzI5OCBlcXUgREVTQ0FMRSggMzIwNjUyOTU1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1IERFU0NBTEUoIDQxODk1MzI3NiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSBERVNDQUxFKCA1ODExMDQ4ODcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgREVTQ0FMRSggODIxODA2NDEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1IERFU0NBTEUoIDk2NjM0MjExMSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSBERVNDQUxFKDEyNjI1ODY4MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgREVTQ0FMRSgxNjEyMDMxMjY3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IERFU0NBTEUoMTk4NDAxNjE4OCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSBERVNDQUxFKDIxMDYyMjAzNTAsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgREVTQ0FMRSgyMjA0NTIwNjczLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IERFU0NBTEUoMjc1MTkwOTUwNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSBERVNDQUxFKDMyOTkyOTgzNDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgSW4tcGxhY2UgOHg4eDE2LWJpdCBpbnZlcnNlIG1hdHJpeCB0cmFuc3Bvc2UgdXNpbmcgQVZYMiBpbnN0cnVjdGlvbnMKKzsgJTEtJTQ6IElucHV0L291dHB1dCByZWdpc3RlcnMKKzsgJTUtJTg6IFRlbXAgcmVnaXN0ZXJzCisKKyVtYWNybyBkb3RyYW5zcG9zZSA4CisgICAgOyAlNT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgIDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorICAgIDsgJTY9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczICAwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICA7ICU3PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCAgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgOyAlOD0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcgIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCisgICAgdnBlcm1xICAgICAgJTUsICUxLCAweEQ4CisgICAgdnBlcm1xICAgICAgJTYsICUyLCAweDcyCisgICAgdnBlcm1xICAgICAgJTcsICUzLCAweEQ4CisgICAgdnBlcm1xICAgICAgJTgsICU0LCAweDcyCisgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgOyAlNT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgIDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorICAgIDsgJTY9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzICA0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICA7ICU3PSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAgNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgOyAlOD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcgIDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisgICAgdnB1bnBja2x3ZCAgJTEsICU1LCAlNgorICAgIHZwdW5wY2tod2QgICUyLCAlNSwgJTYKKyAgICB2cHVucGNrbHdkICAlMywgJTcsICU4CisgICAgdnB1bnBja2h3ZCAgJTQsICU3LCAlOAorICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIDsgJTE9KDAwIDAyIDEwIDEyIDIwIDIyIDMwIDMyICA0MCA0MiA1MCA1MiA2MCA2MiA3MCA3MikKKyAgICA7ICUyPSgwMSAwMyAxMSAxMyAyMSAyMyAzMSAzMyAgNDEgNDMgNTEgNTMgNjEgNjMgNzEgNzMpCisgICAgOyAlMz0oMDQgMDYgMTQgMTYgMjQgMjYgMzQgMzYgIDQ0IDQ2IDU0IDU2IDY0IDY2IDc0IDc2KQorICAgIDsgJTQ9KDA1IDA3IDE1IDE3IDI1IDI3IDM1IDM3ICA0NSA0NyA1NSA1NyA2NSA2NyA3NSA3NykKKworICAgIHZwdW5wY2tsd2QgICU1LCAlMSwgJTIKKyAgICB2cHVucGNrbHdkICAlNiwgJTMsICU0CisgICAgdnB1bnBja2h3ZCAgJTcsICUxLCAlMgorICAgIHZwdW5wY2tod2QgICU4LCAlMywgJTQKKyAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICA7ICU1PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAgNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMpCisgICAgOyAlNj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgIDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgIDsgJTc9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzICA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKyAgICA7ICU4PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNyAgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKyAgICB2cHVucGNrbHFkcSAlMSwgJTUsICU2CisgICAgdnB1bnBja2hxZHEgJTIsICU1LCAlNgorICAgIHZwdW5wY2tscWRxICUzLCAlNywgJTgKKyAgICB2cHVucGNraHFkcSAlNCwgJTcsICU4CisgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDQpCisgICAgOyAlMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgIDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgIDsgJTI9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3ICA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICA7ICUzPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisgICAgOyAlND0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgIDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgSW4tcGxhY2UgOHg4eDE2LWJpdCBzbG93IGludGVnZXIgaW52ZXJzZSBEQ1QgdXNpbmcgQVZYMiBpbnN0cnVjdGlvbnMKKzsgJTEtJTQ6ICBJbnB1dC9vdXRwdXQgcmVnaXN0ZXJzCis7ICU1LSUxMjogVGVtcCByZWdpc3RlcnMKKzsgJTk6ICAgICBQYXNzICgxIG9yIDIpCisKKyVtYWNybyBkb2RjdCAxMworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisgICAgOyB0bXAyID0gejEgKyB6MyAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgIDsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKKworICAgIHZwZXJtMmkxMjggICU2LCAlMywgJTMsIDB4MDEgICAgICAgIDsgJTY9aW42XzIKKyAgICB2cHVucGNrbHdkICAlNSwgJTMsICU2ICAgICAgICAgICAgICA7ICU1PWluMjZfNjJMCisgICAgdnB1bnBja2h3ZCAgJTYsICUzLCAlNiAgICAgICAgICAgICAgOyAlNj1pbjI2XzYySAorICAgIHZwbWFkZHdkICAgICU1LCAlNSwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0X01GMTMwX0YwNTQpXSAgOyAlNT10bXAzXzJMCisgICAgdnBtYWRkd2QgICAgJTYsICU2LCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTRfTUYxMzBfRjA1NCldICA7ICU2PXRtcDNfMkgKKworICAgIHZwZXJtMmkxMjggICU3LCAlMSwgJTEsIDB4MDEgICAgICAgIDsgJTc9aW40XzAKKyAgICB2cHNpZ253ICAgICAlMSwgJTEsIFtHT1RPRkYoZWJ4LFBXXzFfTkVHMSldCisgICAgdnBhZGR3ICAgICAgJTcsICU3LCAlMSAgICAgICAgICAgICAgOyAlNz0oaW4wK2luNClfKGluMC1pbjQpCisKKyAgICB2cHhvciAgICAgICAlMSwgJTEsICUxCisgICAgdnB1bnBja2x3ZCAgJTgsICUxLCAlNyAgICAgICAgICAgICAgOyAlOD10bXAwXzFMCisgICAgdnB1bnBja2h3ZCAgJTEsICUxLCAlNyAgICAgICAgICAgICAgOyAlMT10bXAwXzFICisgICAgdnBzcmFkICAgICAgJTgsICU4LCAoMTYtQ09OU1RfQklUUykgIDsgdnBzcmFkICU4LDE2ICYgdnBzbGxkICU4LENPTlNUX0JJVFMKKyAgICB2cHNyYWQgICAgICAlMSwgJTEsICgxNi1DT05TVF9CSVRTKSAgOyB2cHNyYWQgJTEsMTYgJiB2cHNsbGQgJTEsQ09OU1RfQklUUworCisgICAgdnBzdWJkICAgICAgJTMsICU4LCAlNQorICAgIHZtb3ZkcXUgICAgICUxMSwgJTMgICAgICAgICAgICAgICAgIDsgJTExPXRtcDBfMUwtdG1wM18yTD10bXAxM18xMkwKKyAgICB2cGFkZGQgICAgICAlMywgJTgsICU1CisgICAgdm1vdmRxdSAgICAgJTksICUzICAgICAgICAgICAgICAgICAgOyAlOT10bXAwXzFMK3RtcDNfMkw9dG1wMTBfMTFMCisgICAgdnBzdWJkICAgICAgJTMsICUxLCAlNgorICAgIHZtb3ZkcXUgICAgICUxMiwgJTMgICAgICAgICAgICAgICAgIDsgJTEyPXRtcDBfMUgtdG1wM18ySD10bXAxM18xMkgKKyAgICB2cGFkZGQgICAgICAlMywgJTEsICU2CisgICAgdm1vdmRxdSAgICAgJTEwLCAlMyAgICAgICAgICAgICAgICAgOyAlMTA9dG1wMF8xSCt0bXAzXzJIPXRtcDEwXzExSAorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgdnBhZGR3ICAgICAgJTEsICU0LCAlMiAgICAgICAgICAgICAgOyAlMT1pbjdfNStpbjNfMT16M180CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgdnBlcm0yaTEyOCAgJTgsICUxLCAlMSwgMHgwMSAgICAgICAgOyAlOD16NF8zCisgICAgdnB1bnBja2x3ZCAgJTcsICUxLCAlOCAgICAgICAgICAgICAgOyAlNz16MzRfNDNMCisgICAgdnB1bnBja2h3ZCAgJTgsICUxLCAlOCAgICAgICAgICAgICAgOyAlOD16MzRfNDNICisgICAgdnBtYWRkd2QgICAgJTcsICU3LCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3X0YwNzhfRjExNyldICA7ICU3PXozXzRMCisgICAgdnBtYWRkd2QgICAgJTgsICU4LCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3X0YwNzhfRjExNyldICA7ICU4PXozXzRICisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworICAgIDsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisgICAgOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKyAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgIDsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworICAgIDsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworICAgIDsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworICAgIDsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworICAgIDsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgIDsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisgICAgOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKworICAgIHZwZXJtMmkxMjggICUyLCAlMiwgJTIsIDB4MDEgICAgICAgIDsgJTI9aW4xXzMKKyAgICB2cHVucGNrbHdkICAlMywgJTQsICUyICAgICAgICAgICAgICA7ICUzPWluNzFfNTNMCisgICAgdnB1bnBja2h3ZCAgJTQsICU0LCAlMiAgICAgICAgICAgICAgOyAlND1pbjcxXzUzSAorCisgICAgdnBtYWRkd2QgICAgJTUsICUzLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OV9NRjA1MF9NRjI1NildICA7ICU1PXRtcDBfMUwKKyAgICB2cG1hZGR3ZCAgICAlNiwgJTQsIFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5X01GMDUwX01GMjU2KV0gIDsgJTY9dG1wMF8xSAorICAgIHZwYWRkZCAgICAgICU1LCAlNSwgJTcgICAgICAgICAgICAgIDsgJTU9dG1wMF8xTCt6M180TD10bXAwXzFMCisgICAgdnBhZGRkICAgICAgJTYsICU2LCAlOCAgICAgICAgICAgICAgOyAlNj10bXAwXzFIK3ozXzRIPXRtcDBfMUgKKworICAgIHZwbWFkZHdkICAgICUzLCAlMywgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MF9NRjI1Nl9GMDUwKV0gIDsgJTM9dG1wM18yTAorICAgIHZwbWFkZHdkICAgICU0LCAlNCwgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MF9NRjI1Nl9GMDUwKV0gIDsgJTQ9dG1wM18ySAorICAgIHZwZXJtMmkxMjggICU3LCAlNywgJTcsIDB4MDEgICAgICAgIDsgJTc9ejRfM0wKKyAgICB2cGVybTJpMTI4ICAlOCwgJTgsICU4LCAweDAxICAgICAgICA7ICU4PXo0XzNICisgICAgdnBhZGRkICAgICAgJTcsICUzLCAlNyAgICAgICAgICAgICAgOyAlNz10bXAzXzJMK3o0XzNMPXRtcDNfMkwKKyAgICB2cGFkZGQgICAgICAlOCwgJTQsICU4ICAgICAgICAgICAgICA7ICU4PXRtcDNfMkgrejRfM0g9dG1wM18ySAorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIHZtb3ZkcXUgICAgICUzLCAlOQorICAgIHZtb3ZkcXUgICAgICU0LCAlMTAKKworICAgIHZwYWRkZCAgICAgICUxLCAlMywgJTcgICAgICAgICAgICAgIDsgJTE9dG1wMTBfMTFMK3RtcDNfMkw9ZGF0YTBfMUwKKyAgICB2cGFkZGQgICAgICAlMiwgJTQsICU4ICAgICAgICAgICAgICA7ICUyPXRtcDEwXzExSCt0bXAzXzJIPWRhdGEwXzFICisgICAgdnBhZGRkICAgICAgJTEsICUxLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AgJSsgJTEzKV0KKyAgICB2cGFkZGQgICAgICAlMiwgJTIsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUCAlKyAlMTMpXQorICAgIHZwc3JhZCAgICAgICUxLCAlMSwgREVTQ0FMRV9QICUrICUxMworICAgIHZwc3JhZCAgICAgICUyLCAlMiwgREVTQ0FMRV9QICUrICUxMworICAgIHZwYWNrc3NkdyAgICUxLCAlMSwgJTIgICAgICAgICAgICAgIDsgJTE9ZGF0YTBfMQorCisgICAgdnBzdWJkICAgICAgJTMsICUzLCAlNyAgICAgICAgICAgICAgOyAlMz10bXAxMF8xMUwtdG1wM18yTD1kYXRhN182TAorICAgIHZwc3ViZCAgICAgICU0LCAlNCwgJTggICAgICAgICAgICAgIDsgJTQ9dG1wMTBfMTFILXRtcDNfMkg9ZGF0YTdfNkgKKyAgICB2cGFkZGQgICAgICAlMywgJTMsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUCAlKyAlMTMpXQorICAgIHZwYWRkZCAgICAgICU0LCAlNCwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QICUrICUxMyldCisgICAgdnBzcmFkICAgICAgJTMsICUzLCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBzcmFkICAgICAgJTQsICU0LCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBhY2tzc2R3ICAgJTQsICUzLCAlNCAgICAgICAgICAgICAgOyAlND1kYXRhN182CisKKyAgICB2bW92ZHF1ICAgICAlNywgJTExCisgICAgdm1vdmRxdSAgICAgJTgsICUxMgorCisgICAgdnBhZGRkICAgICAgJTIsICU3LCAlNSAgICAgICAgICAgICAgOyAlNz10bXAxM18xMkwrdG1wMF8xTD1kYXRhM18yTAorICAgIHZwYWRkZCAgICAgICUzLCAlOCwgJTYgICAgICAgICAgICAgIDsgJTg9dG1wMTNfMTJIK3RtcDBfMUg9ZGF0YTNfMkgKKyAgICB2cGFkZGQgICAgICAlMiwgJTIsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUCAlKyAlMTMpXQorICAgIHZwYWRkZCAgICAgICUzLCAlMywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QICUrICUxMyldCisgICAgdnBzcmFkICAgICAgJTIsICUyLCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBzcmFkICAgICAgJTMsICUzLCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBhY2tzc2R3ICAgJTIsICUyLCAlMyAgICAgICAgICAgICAgOyAlMj1kYXRhM18yCisKKyAgICB2cHN1YmQgICAgICAlMywgJTcsICU1ICAgICAgICAgICAgICA7ICU3PXRtcDEzXzEyTC10bXAwXzFMPWRhdGE0XzVMCisgICAgdnBzdWJkICAgICAgJTYsICU4LCAlNiAgICAgICAgICAgICAgOyAlOD10bXAxM18xMkgtdG1wMF8xSD1kYXRhNF81SAorICAgIHZwYWRkZCAgICAgICUzLCAlMywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QICUrICUxMyldCisgICAgdnBhZGRkICAgICAgJTYsICU2LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AgJSsgJTEzKV0KKyAgICB2cHNyYWQgICAgICAlMywgJTMsIERFU0NBTEVfUCAlKyAlMTMKKyAgICB2cHNyYWQgICAgICAlNiwgJTYsIERFU0NBTEVfUCAlKyAlMTMKKyAgICB2cGFja3NzZHcgICAlMywgJTMsICU2ICAgICAgICAgICAgICA7ICUzPWRhdGE0XzUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9pZGN0X2lzbG93X2F2eDIpCisKK0VYVE4oamNvbnN0X2lkY3RfaXNsb3dfYXZ4Mik6CisKK1BXX0YxMzBfRjA1NF9NRjEzMF9GMDU0ICAgIHRpbWVzIDQgIGR3ICAoRl8wXzU0MSArIEZfMF83NjUpLCAgRl8wXzU0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgNCAgZHcgIChGXzBfNTQxIC0gRl8xXzg0NyksICBGXzBfNTQxCitQV19NRjA3OF9GMTE3X0YwNzhfRjExNyAgICB0aW1lcyA0ICBkdyAgKEZfMV8xNzUgLSBGXzFfOTYxKSwgIEZfMV8xNzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIDQgIGR3ICAoRl8xXzE3NSAtIEZfMF8zOTApLCAgRl8xXzE3NQorUFdfTUYwNjBfTUYwODlfTUYwNTBfTUYyNTYgdGltZXMgNCAgZHcgIChGXzBfMjk4IC0gRl8wXzg5OSksIC1GXzBfODk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA0ICBkdyAgKEZfMl8wNTMgLSBGXzJfNTYyKSwgLUZfMl81NjIKK1BXX01GMDg5X0YwNjBfTUYyNTZfRjA1MCAgIHRpbWVzIDQgIGR3IC1GXzBfODk5LCAoRl8xXzUwMSAtIEZfMF84OTkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA0ICBkdyAtRl8yXzU2MiwgKEZfM18wNzIgLSBGXzJfNTYyKQorUERfREVTQ0FMRV9QMSAgICAgICAgICAgICAgdGltZXMgOCAgZGQgIDEgPDwgKERFU0NBTEVfUDEgLSAxKQorUERfREVTQ0FMRV9QMiAgICAgICAgICAgICAgdGltZXMgOCAgZGQgIDEgPDwgKERFU0NBTEVfUDIgLSAxKQorUEJfQ0VOVEVSSlNBTVAgICAgICAgICAgICAgdGltZXMgMzIgZGIgIENFTlRFUkpTQU1QTEUKK1BXXzFfTkVHMSAgICAgICAgICAgICAgICAgIHRpbWVzIDggIGR3ICAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA4ICBkdyAtMQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaXNsb3dfYXZ4Mih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBkY3RfdGFibGUoYikgICAoYikgKyA4ICAgICAgICAgIDsganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAoYikgKyAxMiAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAoYikgKyAxNiAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgIChiKSArIDIwICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1lNTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHltbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICA0CisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9pZGN0X2lzbG93X2F2eDIpCisKK0VYVE4oanNpbWRfaWRjdF9pc2xvd19hdngyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYXgsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbZXNwXSwgZWF4CisgICAgbW92ICAgICAgICAgZWJwLCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd2soMCldCisgICAgcHVzaHBpYyAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgZ2V0X0dPVCAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucy4KKworOyAgIG1vdiAgICAgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXSAgICA7IHF1YW50cHRyCisgICAgbW92ICAgICAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXSAgOyBpbnB0cgorCislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSVNMT1dfQVZYMgorICAgIG1vdiAgICAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG9yICAgICAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbkRDVAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICB2cG9yICAgICAgICB4bW0wLCB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgdnBvciAgICAgICAgeG1tMSwgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHZwb3IgICAgICAgIHhtbTAsIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICB2cG9yICAgICAgICB4bW0xLCB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgdnBvciAgICAgICAgeG1tMCwgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHZwb3IgICAgICAgIHhtbTEsIHhtbTEsIHhtbTAKKyAgICB2cGFja3Nzd2IgICB4bW0xLCB4bW0xLCB4bW0xCisgICAgdnBhY2tzc3diICAgeG1tMSwgeG1tMSwgeG1tMQorICAgIG1vdmQgICAgICAgIGVheCwgeG1tMQorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbkRDVAorCisgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHZwbXVsbHcgICAgIHhtbTUsIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICB2cHNsbHcgICAgICB4bW01LCB4bW01LCBQQVNTMV9CSVRTCisKKyAgICB2cHVucGNrbHdkICB4bW00LCB4bW01LCB4bW01ICAgICAgICA7IHhtbTQ9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgIHZwdW5wY2tod2QgIHhtbTUsIHhtbTUsIHhtbTUgICAgICAgIDsgeG1tNT0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisgICAgdmluc2VydGkxMjggeW1tNCwgeW1tNCwgeG1tNSwgMQorCisgICAgdnBzaHVmZCAgICAgeW1tMCwgeW1tNCwgMHgwMCAgICAgICAgOyB5bW0wPWNvbDBfND0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQorICAgIHZwc2h1ZmQgICAgIHltbTEsIHltbTQsIDB4NTUgICAgICAgIDsgeW1tMT1jb2wxXzU9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICAwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKyAgICB2cHNodWZkICAgICB5bW0yLCB5bW00LCAweEFBICAgICAgICA7IHltbTI9Y29sMl82PSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMiAgMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisgICAgdnBzaHVmZCAgICAgeW1tMywgeW1tNCwgMHhGRiAgICAgICAgOyB5bW0zPWNvbDNfNz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMgIDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQorCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1uX2VuZAorICAgIGFsaWdueCAgICAgIDE2LCA3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICB2bW92ZHF1ICAgICB5bW00LCBZTU1XT1JEIFtZTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildICA7IHltbTQ9aW4wXzEKKyAgICB2bW92ZHF1ICAgICB5bW01LCBZTU1XT1JEIFtZTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildICA7IHltbTU9aW4yXzMKKyAgICB2bW92ZHF1ICAgICB5bW02LCBZTU1XT1JEIFtZTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildICA7IHltbTY9aW40XzUKKyAgICB2bW92ZHF1ICAgICB5bW03LCBZTU1XT1JEIFtZTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildICA7IHltbTc9aW42XzcKKyAgICB2cG11bGx3ICAgICB5bW00LCB5bW00LCBZTU1XT1JEIFtZTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHZwbXVsbHcgICAgIHltbTUsIHltbTUsIFlNTVdPUkQgW1lNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgdnBtdWxsdyAgICAgeW1tNiwgeW1tNiwgWU1NV09SRCBbWU1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICB2cG11bGx3ICAgICB5bW03LCB5bW03LCBZTU1XT1JEIFtZTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgdnBlcm0yaTEyOCAgeW1tMCwgeW1tNCwgeW1tNiwgMHgyMCAgOyB5bW0wPWluMF80CisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tNSwgeW1tNCwgMHgzMSAgOyB5bW0xPWluM18xCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tNSwgeW1tNywgMHgyMCAgOyB5bW0yPWluMl82CisgICAgdnBlcm0yaTEyOCAgeW1tMywgeW1tNywgeW1tNiwgMHgzMSAgOyB5bW0zPWluN181CisKKyAgICBkb2RjdCB5bW0wLCB5bW0xLCB5bW0yLCB5bW0zLCB5bW00LCB5bW01LCB5bW02LCB5bW03LCBYTU1XT1JEIFt3aygwKV0sIFhNTVdPUkQgW3drKDEpXSwgWE1NV09SRCBbd2soMildLCBYTU1XT1JEIFt3aygzKV0sIDEKKyAgICA7IHltbTA9ZGF0YTBfMSwgeW1tMT1kYXRhM18yLCB5bW0yPWRhdGE0XzUsIHltbTM9ZGF0YTdfNgorCisgICAgZG90cmFuc3Bvc2UgeW1tMCwgeW1tMSwgeW1tMiwgeW1tMywgeW1tNCwgeW1tNSwgeW1tNiwgeW1tNworICAgIDsgeW1tMD1kYXRhMF80LCB5bW0xPWRhdGExXzUsIHltbTI9ZGF0YTJfNiwgeW1tMz1kYXRhM183CisKKy5jb2x1bW5fZW5kOgorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MuCisKKyAgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisgICAgdnBlcm0yaTEyOCAgeW1tNCwgeW1tMywgeW1tMSwgMHgzMSAgOyB5bW0zPWluN181CisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tMywgeW1tMSwgMHgyMCAgOyB5bW0xPWluM18xCisKKyAgICBkb2RjdCB5bW0wLCB5bW0xLCB5bW0yLCB5bW00LCB5bW0zLCB5bW01LCB5bW02LCB5bW03LCBYTU1XT1JEIFt3aygwKV0sIFhNTVdPUkQgW3drKDEpXSwgWE1NV09SRCBbd2soMildLCBYTU1XT1JEIFt3aygzKV0sIDIKKyAgICA7IHltbTA9ZGF0YTBfMSwgeW1tMT1kYXRhM18yLCB5bW0yPWRhdGE0XzUsIHltbTQ9ZGF0YTdfNgorCisgICAgZG90cmFuc3Bvc2UgeW1tMCwgeW1tMSwgeW1tMiwgeW1tNCwgeW1tMywgeW1tNSwgeW1tNiwgeW1tNworICAgIDsgeW1tMD1kYXRhMF80LCB5bW0xPWRhdGExXzUsIHltbTI9ZGF0YTJfNiwgeW1tND1kYXRhM183CisKKyAgICB2cGFja3Nzd2IgICB5bW0wLCB5bW0wLCB5bW0xICAgICAgICA7IHltbTA9ZGF0YTAxXzQ1CisgICAgdnBhY2tzc3diICAgeW1tMSwgeW1tMiwgeW1tNCAgICAgICAgOyB5bW0xPWRhdGEyM182NworICAgIHZwYWRkYiAgICAgIHltbTAsIHltbTAsIFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0KKyAgICB2cGFkZGIgICAgICB5bW0xLCB5bW0xLCBbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCisKKyAgICB2ZXh0cmFjdGkxMjggeG1tNiwgeW1tMSwgMSAgICAgICAgICA7IHhtbTM9ZGF0YTY3CisgICAgdmV4dHJhY3RpMTI4IHhtbTQsIHltbTAsIDEgICAgICAgICAgOyB4bW0yPWRhdGE0NQorICAgIHZleHRyYWN0aTEyOCB4bW0yLCB5bW0xLCAwICAgICAgICAgIDsgeG1tMT1kYXRhMjMKKyAgICB2ZXh0cmFjdGkxMjggeG1tMCwgeW1tMCwgMCAgICAgICAgICA7IHhtbTA9ZGF0YTAxCisKKyAgICB2cHNodWZkICAgICB4bW0xLCB4bW0wLCAweDRFICA7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHZwc2h1ZmQgICAgIHhtbTMsIHhtbTIsIDB4NEUgIDsgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgdnBzaHVmZCAgICAgeG1tNSwgeG1tNCwgMHg0RSAgOyB4bW01PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKyAgICB2cHNodWZkICAgICB4bW03LCB4bW02LCAweDRFICA7IHhtbTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorCisgICAgdnplcm91cHBlcgorCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0yCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSs0KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrNSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQorCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzYqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VkaSs3KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03CisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcG9wcGljICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0aW50LW1teC5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RpbnQtbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2E2ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0aW50LW1teC5hc20KQEAgLTAsMCArMSw4NTMgQEAKKzsKKzsgamlkY3RpbnQuYXNtIC0gYWNjdXJhdGUgaW50ZWdlciBJRENUIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGludC5jOyBzZWUgdGhlIGppZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OCBlcXUgIDI0NDYgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgIDMxOTYgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgIDQ0MzMgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgIDYyNzAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgIDczNzMgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgIDk2MzMgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgMTIyOTkgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgMTUxMzcgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgMTYwNjkgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgMTY4MTkgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgMjA5OTUgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgMjUxNzIgIDsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsIG4pICAoKCh4KSArICgxIDw8ICgobikgLSAxKSkpID4+IChuKSkKK0ZfMF8yOTggZXF1IERFU0NBTEUoIDMyMDY1Mjk1NSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSBERVNDQUxFKCA0MTg5NTMyNzYsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgREVTQ0FMRSggNTgxMTA0ODg3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1IERFU0NBTEUoIDgyMTgwNjQxMywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSBERVNDQUxFKCA5NjYzNDIxMTEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgREVTQ0FMRSgxMjYyNTg2ODEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1IERFU0NBTEUoMTYxMjAzMTI2NywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSBERVNDQUxFKDE5ODQwMTYxODgsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgREVTQ0FMRSgyMTA2MjIwMzUwLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1IERFU0NBTEUoMjIwNDUyMDY3MywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSBERVNDQUxFKDI3NTE5MDk1MDYsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgREVTQ0FMRSgzMjk5Mjk4MzQxLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9pZGN0X2lzbG93X21teCkKKworRVhUTihqY29uc3RfaWRjdF9pc2xvd19tbXgpOgorCitQV19GMTMwX0YwNTQgICB0aW1lcyAyIGR3ICAoRl8wXzU0MSArIEZfMF83NjUpLCAgRl8wXzU0MQorUFdfRjA1NF9NRjEzMCAgdGltZXMgMiBkdyAgRl8wXzU0MSwgKEZfMF81NDEgLSBGXzFfODQ3KQorUFdfTUYwNzhfRjExNyAgdGltZXMgMiBkdyAgKEZfMV8xNzUgLSBGXzFfOTYxKSwgIEZfMV8xNzUKK1BXX0YxMTdfRjA3OCAgIHRpbWVzIDIgZHcgIEZfMV8xNzUsIChGXzFfMTc1IC0gRl8wXzM5MCkKK1BXX01GMDYwX01GMDg5IHRpbWVzIDIgZHcgIChGXzBfMjk4IC0gRl8wXzg5OSksIC1GXzBfODk5CitQV19NRjA4OV9GMDYwICB0aW1lcyAyIGR3IC1GXzBfODk5LCAoRl8xXzUwMSAtIEZfMF84OTkpCitQV19NRjA1MF9NRjI1NiB0aW1lcyAyIGR3ICAoRl8yXzA1MyAtIEZfMl81NjIpLCAtRl8yXzU2MgorUFdfTUYyNTZfRjA1MCAgdGltZXMgMiBkdyAtRl8yXzU2MiwgKEZfM18wNzIgLSBGXzJfNTYyKQorUERfREVTQ0FMRV9QMSAgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMSAtIDEpCitQRF9ERVNDQUxFX1AyICB0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyIC0gMSkKK1BCX0NFTlRFUkpTQU1QIHRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0X2lzbG93X21teCh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKSAgIChiKSArIDggICAgICAgICAgOyBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikgIChiKSArIDEyICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicCAgIGVicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgZWJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAxMgorJWRlZmluZSB3b3Jrc3BhY2UgICAgICB3aygwKSAtIERDVFNJWkUyICogU0laRU9GX0pDT0VGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBKQ09FRiB3b3Jrc3BhY2VbRENUU0laRTJdCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9pZGN0X2lzbG93X21teCkKKworRVhUTihqc2ltZF9pZGN0X2lzbG93X21teCk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd29ya3NwYWNlXQorICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7ICAgbW92ICAgICAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgIG1vdiAgICAgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldICAgIDsgcXVhbnRwdHIKKyAgICBtb3YgICAgICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldICA7IGlucHRyCisgICAgbGVhICAgICAgICAgZWRpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgOyBKQ09FRiAqd3NwdHIKKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JU0xPV19NTVgKKyAgICBtb3YgICAgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBvciAgICAgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0xLCBtbTAKKyAgICBwYWNrc3N3YiAgICBtbTEsIG1tMQorICAgIG1vdmQgICAgICAgIGVheCwgbW0xCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHBzbGx3ICAgICAgIG1tMCwgUEFTUzFfQklUUworCisgICAgbW92cSAgICAgICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgcHVucGNraHdkICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAzIDAzKQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsZHEgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDAgMDApCisgICAgcHVucGNraGRxICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KDAxIDAxIDAxIDAxKQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yCisgICAgcHVucGNrbGRxICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAyIDAyKQorICAgIHB1bnBja2hkcSAgIG1tMywgbW0zICAgICAgICAgICAgICAgIDsgbW0zPSgwMyAwMyAwMyAwMykKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisgICAgam1wICAgICAgICAgbmVhciAubmV4dGNvbHVtbgorICAgIGFsaWdueCAgICAgIDE2LCA3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisgICAgOyB0bXAyID0gejEgKyB6MyAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgIDsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW0xPWluMj16MgorICAgIG1vdnEgICAgICAgIG1tNSwgbW0xCisgICAgcHVucGNrbHdkICAgbW00LCBtbTMgICAgICAgICAgICAgICAgOyBtbTM9aW42PXozCisgICAgcHVucGNraHdkICAgbW01LCBtbTMKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNAorICAgIG1vdnEgICAgICAgIG1tMywgbW01CisgICAgcG1hZGR3ZCAgICAgbW00LCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgbW00PXRtcDNMCisgICAgcG1hZGR3ZCAgICAgbW01LCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgbW01PXRtcDNICisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gIDsgbW0xPXRtcDJMCisgICAgcG1hZGR3ZCAgICAgbW0zLCBbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gIDsgbW0zPXRtcDJICisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHBhZGR3ICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0wPWluMCtpbjQKKyAgICBwc3VidyAgICAgICBtbTYsIG1tMiAgICAgICAgICAgICAgICA7IG1tNj1pbjAtaW40CisKKyAgICBweG9yICAgICAgICBtbTcsIG1tNworICAgIHB4b3IgICAgICAgIG1tMiwgbW0yCisgICAgcHVucGNrbHdkICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMEwKKyAgICBwdW5wY2tod2QgICBtbTIsIG1tMCAgICAgICAgICAgICAgICA7IG1tMj10bXAwSAorICAgIHBzcmFkICAgICAgIG1tNywgKDE2LUNPTlNUX0JJVFMpICAgIDsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKKyAgICBwc3JhZCAgICAgICBtbTIsICgxNi1DT05TVF9CSVRTKSAgICA7IHBzcmFkIG1tMiwxNiAmIHBzbGxkIG1tMixDT05TVF9CSVRTCisKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIHBhZGRkICAgICAgIG1tNywgbW00ICAgICAgICAgICAgICAgIDsgbW03PXRtcDEwTAorICAgIHBzdWJkICAgICAgIG1tMCwgbW00ICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEzTAorICAgIG1vdnEgICAgICAgIG1tNCwgbW0yCisgICAgcGFkZGQgICAgICAgbW0yLCBtbTUgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTBICisgICAgcHN1YmQgICAgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTNICisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDEwTAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMSldLCBtbTIgICAgIDsgd2soMSk9dG1wMTBICisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygyKV0sIG1tMCAgICAgOyB3aygyKT10bXAxM0wKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDMpXSwgbW00ICAgICA7IHdrKDMpPXRtcDEzSAorCisgICAgcHhvciAgICAgICAgbW01LCBtbTUKKyAgICBweG9yICAgICAgICBtbTcsIG1tNworICAgIHB1bnBja2x3ZCAgIG1tNSwgbW02ICAgICAgICAgICAgICAgIDsgbW01PXRtcDFMCisgICAgcHVucGNraHdkICAgbW03LCBtbTYgICAgICAgICAgICAgICAgOyBtbTc9dG1wMUgKKyAgICBwc3JhZCAgICAgICBtbTUsICgxNi1DT05TVF9CSVRTKSAgICA7IHBzcmFkIG1tNSwxNiAmIHBzbGxkIG1tNSxDT05TVF9CSVRTCisgICAgcHNyYWQgICAgICAgbW03LCAoMTYtQ09OU1RfQklUUykgICAgOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUworCisgICAgbW92cSAgICAgICAgbW0yLCBtbTUKKyAgICBwYWRkZCAgICAgICBtbTUsIG1tMSAgICAgICAgICAgICAgICA7IG1tNT10bXAxMUwKKyAgICBwc3ViZCAgICAgICBtbTIsIG1tMSAgICAgICAgICAgICAgICA7IG1tMj10bXAxMkwKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIHBhZGRkICAgICAgIG1tNywgbW0zICAgICAgICAgICAgICAgIDsgbW03PXRtcDExSAorICAgIHBzdWJkICAgICAgIG1tMCwgbW0zICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEySAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3ayg0KV0sIG1tNSAgICAgOyB3ayg0KT10bXAxMUwKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDUpXSwgbW03ICAgICA7IHdrKDUpPXRtcDExSAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soNildLCBtbTIgICAgIDsgd2soNik9dG1wMTJMCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3ayg3KV0sIG1tMCAgICAgOyB3ayg3KT10bXAxMkgKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTYsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgbW92cSAgICAgICAgbW01LCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNAorICAgIHBhZGR3ICAgICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PXozCisgICAgcGFkZHcgICAgICAgbW03LCBtbTEgICAgICAgICAgICAgICAgOyBtbTc9ejQKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tNQorICAgIG1vdnEgICAgICAgIG1tMCwgbW01CisgICAgcHVucGNrbHdkICAgbW0yLCBtbTcKKyAgICBwdW5wY2tod2QgICBtbTAsIG1tNworICAgIG1vdnEgICAgICAgIG1tNSwgbW0yCisgICAgbW92cSAgICAgICAgbW03LCBtbTAKKyAgICBwbWFkZHdkICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgOyBtbTI9ejNMCisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gIDsgbW0wPXozSAorICAgIHBtYWRkd2QgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IG1tNT16NEwKKyAgICBwbWFkZHdkICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgOyBtbTc9ejRICisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEwKV0sIG1tMiAgICA7IHdrKDEwKT16M0wKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDExKV0sIG1tMCAgICA7IHdrKDExKT16M0gKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7CisgICAgOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKKyAgICA7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOworICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7CisgICAgOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7CisgICAgOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKKyAgICA7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OworCisgICAgbW92cSAgICAgICAgbW0yLCBtbTMKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tMworICAgIHB1bnBja2x3ZCAgIG1tMiwgbW00CisgICAgcHVucGNraHdkICAgbW0wLCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMgorICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgcG1hZGR3ZCAgICAgbW0yLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IG1tMj10bXAwTAorICAgIHBtYWRkd2QgICAgIG1tMCwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgOyBtbTA9dG1wMEgKKyAgICBwbWFkZHdkICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgIDsgbW0zPXRtcDNMCisgICAgcG1hZGR3ZCAgICAgbW00LCBbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICA7IG1tND10bXAzSAorCisgICAgcGFkZGQgICAgICAgbW0yLCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTI9dG1wMEwKKyAgICBwYWRkZCAgICAgICBtbTAsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tMD10bXAwSAorICAgIHBhZGRkICAgICAgIG1tMywgbW01ICAgICAgICAgICAgICAgIDsgbW0zPXRtcDNMCisgICAgcGFkZGQgICAgICAgbW00LCBtbTcgICAgICAgICAgICAgICAgOyBtbTQ9dG1wM0gKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soOCldLCBtbTIgICAgIDsgd2soOCk9dG1wMEwKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDkpXSwgbW0wICAgICA7IHdrKDkpPXRtcDBICisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMQorICAgIG1vdnEgICAgICAgIG1tMCwgbW0xCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTYKKyAgICBwdW5wY2tod2QgICBtbTAsIG1tNgorICAgIG1vdnEgICAgICAgIG1tMSwgbW0yCisgICAgbW92cSAgICAgICAgbW02LCBtbTAKKyAgICBwbWFkZHdkICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgbW0yPXRtcDFMCisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICA7IG1tMD10bXAxSAorICAgIHBtYWRkd2QgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgOyBtbTE9dG1wMkwKKyAgICBwbWFkZHdkICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgbW02PXRtcDJICisKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tNSAgICAgICAgICAgICAgICA7IG1tMj10bXAxTAorICAgIHBhZGRkICAgICAgIG1tMCwgbW03ICAgICAgICAgICAgICAgIDsgbW0wPXRtcDFICisgICAgcGFkZGQgICAgICAgbW0xLCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTE9dG1wMkwKKyAgICBwYWRkZCAgICAgICBtbTYsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tNj10bXAySAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxMCldLCBtbTIgICAgOyB3aygxMCk9dG1wMUwKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDExKV0sIG1tMCAgICA7IHdrKDExKT10bXAxSAorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIG1vdnEgICAgICAgIG1tNSwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW01PXRtcDEwTAorICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW03PXRtcDEwSAorCisgICAgbW92cSAgICAgICAgbW0yLCBtbTUKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNworICAgIHBhZGRkICAgICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PWRhdGEwTAorICAgIHBhZGRkICAgICAgIG1tNywgbW00ICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwSAorICAgIHBzdWJkICAgICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE3TAorICAgIHBzdWJkICAgICAgIG1tMCwgbW00ICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE3SAorCisgICAgbW92cSAgICAgICAgbW0zLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0gIDsgbW0zPVtQRF9ERVNDQUxFX1AxXQorCisgICAgcGFkZGQgICAgICAgbW01LCBtbTMKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tMworICAgIHBzcmFkICAgICAgIG1tNSwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIG1tNywgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIG1tMiwgbW0zCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTMKKyAgICBwc3JhZCAgICAgICBtbTIsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICBtbTAsIERFU0NBTEVfUDEKKworICAgIHBhY2tzc2R3ICAgIG1tNSwgbW03ICAgICAgICAgICAgICAgIDsgbW01PWRhdGEwPSgwMCAwMSAwMiAwMykKKyAgICBwYWNrc3NkdyAgICBtbTIsIG1tMCAgICAgICAgICAgICAgICA7IG1tMj1kYXRhNz0oNzAgNzEgNzIgNzMpCisKKyAgICBtb3ZxICAgICAgICBtbTQsIE1NV09SRCBbd2soNCldICAgICA7IG1tND10bXAxMUwKKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbd2soNSldICAgICA7IG1tMz10bXAxMUgKKworICAgIG1vdnEgICAgICAgIG1tNywgbW00CisgICAgbW92cSAgICAgICAgbW0wLCBtbTMKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND1kYXRhMUwKKyAgICBwYWRkZCAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMUgKKyAgICBwc3ViZCAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz1kYXRhNkwKKyAgICBwc3ViZCAgICAgICBtbTAsIG1tNiAgICAgICAgICAgICAgICA7IG1tMD1kYXRhNkgKKworICAgIG1vdnEgICAgICAgIG1tMSwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICA7IG1tMT1bUERfREVTQ0FMRV9QMV0KKworICAgIHBhZGRkICAgICAgIG1tNCwgbW0xCisgICAgcGFkZGQgICAgICAgbW0zLCBtbTEKKyAgICBwc3JhZCAgICAgICBtbTQsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICBtbTMsIERFU0NBTEVfUDEKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tMQorICAgIHBhZGRkICAgICAgIG1tMCwgbW0xCisgICAgcHNyYWQgICAgICAgbW03LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgbW0wLCBERVNDQUxFX1AxCisKKyAgICBwYWNrc3NkdyAgICBtbTQsIG1tMyAgICAgICAgICAgICAgICA7IG1tND1kYXRhMT0oMTAgMTEgMTIgMTMpCisgICAgcGFja3NzZHcgICAgbW03LCBtbTAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTY9KDYwIDYxIDYyIDYzKQorCisgICAgbW92cSAgICAgICAgbW02LCBtbTUgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW01LCBtbTQgICAgICAgICAgICAgICAgOyBtbTU9KDAwIDEwIDAxIDExKQorICAgIHB1bnBja2h3ZCAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PSgwMiAxMiAwMyAxMykKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTcsIG1tMiAgICAgICAgICAgICAgICA7IG1tNz0oNjAgNzAgNjEgNzEpCisgICAgcHVucGNraHdkICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgOyBtbTE9KDYyIDcyIDYzIDczKQorCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW3drKDYpXSAgICAgOyBtbTM9dG1wMTJMCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW3drKDcpXSAgICAgOyBtbTA9dG1wMTJICisgICAgbW92cSAgICAgICAgbW00LCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTQ9dG1wMUwKKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tMj10bXAxSAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNSAgICAgOyB3aygwKT0oMDAgMTAgMDEgMTEpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tNiAgICAgOyB3aygxKT0oMDIgMTIgMDMgMTMpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3ayg0KV0sIG1tNyAgICAgOyB3ayg0KT0oNjAgNzAgNjEgNzEpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3ayg1KV0sIG1tMSAgICAgOyB3ayg1KT0oNjIgNzIgNjMgNzMpCisKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMworICAgIG1vdnEgICAgICAgIG1tNiwgbW0wCisgICAgcGFkZGQgICAgICAgbW0zLCBtbTQgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTJMCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTJICisgICAgcHN1YmQgICAgICAgbW01LCBtbTQgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTVMCisgICAgcHN1YmQgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTVICisKKyAgICBtb3ZxICAgICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXSAgOyBtbTc9W1BEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICBtbTMsIG1tNworICAgIHBhZGRkICAgICAgIG1tMCwgbW03CisgICAgcHNyYWQgICAgICAgbW0zLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgbW0wLCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgbW01LCBtbTcKKyAgICBwYWRkZCAgICAgICBtbTYsIG1tNworICAgIHBzcmFkICAgICAgIG1tNSwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIG1tNiwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgbW0zLCBtbTAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzKQorICAgIHBhY2tzc2R3ICAgIG1tNSwgbW02ICAgICAgICAgICAgICAgIDsgbW01PWRhdGE1PSg1MCA1MSA1MiA1MykKKworICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFt3aygyKV0gICAgIDsgbW0xPXRtcDEzTAorICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFt3aygzKV0gICAgIDsgbW00PXRtcDEzSAorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFt3ayg4KV0gICAgIDsgbW0yPXRtcDBMCisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW3drKDkpXSAgICAgOyBtbTc9dG1wMEgKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW0xCisgICAgbW92cSAgICAgICAgbW02LCBtbTQKKyAgICBwYWRkZCAgICAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICA7IG1tMT1kYXRhM0wKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tNyAgICAgICAgICAgICAgICA7IG1tND1kYXRhM0gKKyAgICBwc3ViZCAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD1kYXRhNEwKKyAgICBwc3ViZCAgICAgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj1kYXRhNEgKKworICAgIG1vdnEgICAgICAgIG1tMiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICA7IG1tMj1bUERfREVTQ0FMRV9QMV0KKworICAgIHBhZGRkICAgICAgIG1tMSwgbW0yCisgICAgcGFkZGQgICAgICAgbW00LCBtbTIKKyAgICBwc3JhZCAgICAgICBtbTEsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICBtbTQsIERFU0NBTEVfUDEKKyAgICBwYWRkZCAgICAgICBtbTAsIG1tMgorICAgIHBhZGRkICAgICAgIG1tNiwgbW0yCisgICAgcHNyYWQgICAgICAgbW0wLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgbW02LCBERVNDQUxFX1AxCisKKyAgICBwYWNrc3NkdyAgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMz0oMzAgMzEgMzIgMzMpCisgICAgcGFja3NzZHcgICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzKQorCisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9KDAwIDEwIDAxIDExKQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0yPSgwMiAxMiAwMyAxMykKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0zICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIG1tMywgbW0xICAgICAgICAgICAgICAgIDsgbW0zPSgyMCAzMCAyMSAzMSkKKyAgICBwdW5wY2tod2QgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND0oMjIgMzIgMjMgMzMpCisgICAgbW92cSAgICAgICAgbW02LCBtbTAgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0wLCBtbTUgICAgICAgICAgICAgICAgOyBtbTA9KDQwIDUwIDQxIDUxKQorICAgIHB1bnBja2h3ZCAgIG1tNiwgbW01ICAgICAgICAgICAgICAgIDsgbW02PSg0MiA1MiA0MyA1MykKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNywgbW0zICAgICAgICAgICAgICAgIDsgbW03PSgwMCAxMCAyMCAzMCkKKyAgICBwdW5wY2toZHEgICBtbTEsIG1tMyAgICAgICAgICAgICAgICA7IG1tMT0oMDEgMTEgMjEgMzEpCisgICAgbW92cSAgICAgICAgbW01LCBtbTIgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDEyIDIyIDMyKQorICAgIHB1bnBja2hkcSAgIG1tNSwgbW00ICAgICAgICAgICAgICAgIDsgbW01PSgwMyAxMyAyMyAzMykKKworICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3ayg0KV0gICAgIDsgbW0zPSg2MCA3MCA2MSA3MSkKKyAgICBtb3ZxICAgICAgICBtbTQsIE1NV09SRCBbd2soNSldICAgICA7IG1tND0oNjIgNzIgNjMgNzMpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW03CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW01CisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD0oNDAgNTAgNjAgNzApCisgICAgcHVucGNraGRxICAgbW03LCBtbTMgICAgICAgICAgICAgICAgOyBtbTc9KDQxIDUxIDYxIDcxKQorICAgIG1vdnEgICAgICAgIG1tMSwgbW02ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PSg0MiA1MiA2MiA3MikKKyAgICBwdW5wY2toZHEgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT0oNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisKKy5uZXh0Y29sdW1uOgorICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRiAgICAgICAgICAgIDsgY29lZl9ibG9jaworICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSA0KlNJWkVPRl9JU0xPV19NVUxUX1RZUEUgIDsgcXVhbnRwdHIKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9KQ09FRiAgICA7IHdzcHRyCisgICAgZGVjICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworICAgIG1vdiAgICAgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICBsZWEgICAgICAgICBlc2ksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgKndzcHRyCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICBhbGlnbnggICAgICAxNiwgNworLnJvd2xvb3A6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworICAgIDsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisgICAgOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKyAgICA7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tMT1pbjI9ejIKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMQorICAgIHB1bnBja2x3ZCAgIG1tNCwgbW0zICAgICAgICAgICAgICAgIDsgbW0zPWluNj16MworICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0zCisgICAgbW92cSAgICAgICAgbW0xLCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNQorICAgIHBtYWRkd2QgICAgIG1tNCwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IG1tND10bXAzTAorICAgIHBtYWRkd2QgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IG1tNT10bXAzSAorICAgIHBtYWRkd2QgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICA7IG1tMT10bXAyTAorICAgIHBtYWRkd2QgICAgIG1tMywgW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICA7IG1tMz10bXAySAorCisgICAgbW92cSAgICAgICAgbW02LCBtbTAKKyAgICBwYWRkdyAgICAgICBtbTAsIG1tMiAgICAgICAgICAgICAgICA7IG1tMD1pbjAraW40CisgICAgcHN1YncgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgOyBtbTY9aW4wLWluNAorCisgICAgcHhvciAgICAgICAgbW03LCBtbTcKKyAgICBweG9yICAgICAgICBtbTIsIG1tMgorICAgIHB1bnBja2x3ZCAgIG1tNywgbW0wICAgICAgICAgICAgICAgIDsgbW03PXRtcDBMCisgICAgcHVucGNraHdkICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTI9dG1wMEgKKyAgICBwc3JhZCAgICAgICBtbTcsICgxNi1DT05TVF9CSVRTKSAgICA7IHBzcmFkIG1tNywxNiAmIHBzbGxkIG1tNyxDT05TVF9CSVRTCisgICAgcHNyYWQgICAgICAgbW0yLCAoMTYtQ09OU1RfQklUUykgICAgOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUworCisgICAgbW92cSAgICAgICAgbW0wLCBtbTcKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tNCAgICAgICAgICAgICAgICA7IG1tNz10bXAxMEwKKyAgICBwc3ViZCAgICAgICBtbTAsIG1tNCAgICAgICAgICAgICAgICA7IG1tMD10bXAxM0wKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMgorICAgIHBhZGRkICAgICAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwSAorICAgIHBzdWJkICAgICAgIG1tNCwgbW01ICAgICAgICAgICAgICAgIDsgbW00PXRtcDEzSAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNyAgICAgOyB3aygwKT10bXAxMEwKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW0yICAgICA7IHdrKDEpPXRtcDEwSAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMildLCBtbTAgICAgIDsgd2soMik9dG1wMTNMCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygzKV0sIG1tNCAgICAgOyB3aygzKT10bXAxM0gKKworICAgIHB4b3IgICAgICAgIG1tNSwgbW01CisgICAgcHhvciAgICAgICAgbW03LCBtbTcKKyAgICBwdW5wY2tsd2QgICBtbTUsIG1tNiAgICAgICAgICAgICAgICA7IG1tNT10bXAxTAorICAgIHB1bnBja2h3ZCAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgbW03PXRtcDFICisgICAgcHNyYWQgICAgICAgbW01LCAoMTYtQ09OU1RfQklUUykgICAgOyBwc3JhZCBtbTUsMTYgJiBwc2xsZCBtbTUsQ09OU1RfQklUUworICAgIHBzcmFkICAgICAgIG1tNywgKDE2LUNPTlNUX0JJVFMpICAgIDsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW01CisgICAgcGFkZGQgICAgICAgbW01LCBtbTEgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTFMCisgICAgcHN1YmQgICAgICAgbW0yLCBtbTEgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTJMCisgICAgbW92cSAgICAgICAgbW0wLCBtbTcKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tMyAgICAgICAgICAgICAgICA7IG1tNz10bXAxMUgKKyAgICBwc3ViZCAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD10bXAxMkgKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soNCldLCBtbTUgICAgIDsgd2soNCk9dG1wMTFMCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3ayg1KV0sIG1tNyAgICAgOyB3ayg1KT10bXAxMUgKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDYpXSwgbW0yICAgICA7IHdrKDYpPXRtcDEyTAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soNyldLCBtbTAgICAgIDsgd2soNyk9dG1wMTJICisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZxICAgICAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tNgorICAgIG1vdnEgICAgICAgIG1tNywgbW00CisgICAgcGFkZHcgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9ejMKKyAgICBwYWRkdyAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IG1tNz16NAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW01CisgICAgbW92cSAgICAgICAgbW0wLCBtbTUKKyAgICBwdW5wY2tsd2QgICBtbTIsIG1tNworICAgIHB1bnBja2h3ZCAgIG1tMCwgbW03CisgICAgbW92cSAgICAgICAgbW01LCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMAorICAgIHBtYWRkd2QgICAgIG1tMiwgW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICA7IG1tMj16M0wKKyAgICBwbWFkZHdkICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgOyBtbTA9ejNICisgICAgcG1hZGR3ZCAgICAgbW01LCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgbW01PXo0TAorICAgIHBtYWRkd2QgICAgIG1tNywgW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICA7IG1tNz16NEgKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMTApXSwgbW0yICAgIDsgd2soMTApPXozTAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMTEpXSwgbW0wICAgIDsgd2soMTEpPXozSAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICA7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKyAgICA7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgIDsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMworICAgIG1vdnEgICAgICAgIG1tMCwgbW0zCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTQKKyAgICBwdW5wY2tod2QgICBtbTAsIG1tNAorICAgIG1vdnEgICAgICAgIG1tMywgbW0yCisgICAgbW92cSAgICAgICAgbW00LCBtbTAKKyAgICBwbWFkZHdkICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gIDsgbW0yPXRtcDBMCisgICAgcG1hZGR3ZCAgICAgbW0wLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IG1tMD10bXAwSAorICAgIHBtYWRkd2QgICAgIG1tMywgW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgOyBtbTM9dG1wM0wKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgIDsgbW00PXRtcDNICisKKyAgICBwYWRkZCAgICAgICBtbTIsIE1NV09SRCBbd2soMTApXSAgICA7IG1tMj10bXAwTAorICAgIHBhZGRkICAgICAgIG1tMCwgTU1XT1JEIFt3aygxMSldICAgIDsgbW0wPXRtcDBICisgICAgcGFkZGQgICAgICAgbW0zLCBtbTUgICAgICAgICAgICAgICAgOyBtbTM9dG1wM0wKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tNyAgICAgICAgICAgICAgICA7IG1tND10bXAzSAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3ayg4KV0sIG1tMiAgICAgOyB3ayg4KT10bXAwTAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soOSldLCBtbTAgICAgIDsgd2soOSk9dG1wMEgKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW0xCisgICAgbW92cSAgICAgICAgbW0wLCBtbTEKKyAgICBwdW5wY2tsd2QgICBtbTIsIG1tNgorICAgIHB1bnBja2h3ZCAgIG1tMCwgbW02CisgICAgbW92cSAgICAgICAgbW0xLCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMAorICAgIHBtYWRkd2QgICAgIG1tMiwgW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgOyBtbTI9dG1wMUwKKyAgICBwbWFkZHdkICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgbW0wPXRtcDFICisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICA7IG1tMT10bXAyTAorICAgIHBtYWRkd2QgICAgIG1tNiwgW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgOyBtbTY9dG1wMkgKKworICAgIHBhZGRkICAgICAgIG1tMiwgbW01ICAgICAgICAgICAgICAgIDsgbW0yPXRtcDFMCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTcgICAgICAgICAgICAgICAgOyBtbTA9dG1wMUgKKyAgICBwYWRkZCAgICAgICBtbTEsIE1NV09SRCBbd2soMTApXSAgICA7IG1tMT10bXAyTAorICAgIHBhZGRkICAgICAgIG1tNiwgTU1XT1JEIFt3aygxMSldICAgIDsgbW02PXRtcDJICisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEwKV0sIG1tMiAgICA7IHdrKDEwKT10bXAxTAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMTEpXSwgbW0wICAgIDsgd2soMTEpPXRtcDFICisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTU9dG1wMTBMCisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTc9dG1wMTBICisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tNQorICAgIG1vdnEgICAgICAgIG1tMCwgbW03CisgICAgcGFkZGQgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTBMCisgICAgcGFkZGQgICAgICAgbW03LCBtbTQgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTBICisgICAgcHN1YmQgICAgICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTdMCisgICAgcHN1YmQgICAgICAgbW0wLCBtbTQgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTdICisKKyAgICBtb3ZxICAgICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXSAgOyBtbTM9W1BEX0RFU0NBTEVfUDJdCisKKyAgICBwYWRkZCAgICAgICBtbTUsIG1tMworICAgIHBhZGRkICAgICAgIG1tNywgbW0zCisgICAgcHNyYWQgICAgICAgbW01LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgbW03LCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgbW0yLCBtbTMKKyAgICBwYWRkZCAgICAgICBtbTAsIG1tMworICAgIHBzcmFkICAgICAgIG1tMiwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIG1tMCwgREVTQ0FMRV9QMgorCisgICAgcGFja3NzZHcgICAgbW01LCBtbTcgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgIHBhY2tzc2R3ICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE3PSgwNyAxNyAyNyAzNykKKworICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFt3ayg0KV0gICAgIDsgbW00PXRtcDExTAorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3ayg1KV0gICAgIDsgbW0zPXRtcDExSAorCisgICAgbW92cSAgICAgICAgbW03LCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tMworICAgIHBhZGRkICAgICAgIG1tNCwgbW0xICAgICAgICAgICAgICAgIDsgbW00PWRhdGExTAorICAgIHBhZGRkICAgICAgIG1tMywgbW02ICAgICAgICAgICAgICAgIDsgbW0zPWRhdGExSAorICAgIHBzdWJkICAgICAgIG1tNywgbW0xICAgICAgICAgICAgICAgIDsgbW03PWRhdGE2TAorICAgIHBzdWJkICAgICAgIG1tMCwgbW02ICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE2SAorCisgICAgbW92cSAgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gIDsgbW0xPVtQRF9ERVNDQUxFX1AyXQorCisgICAgcGFkZGQgICAgICAgbW00LCBtbTEKKyAgICBwYWRkZCAgICAgICBtbTMsIG1tMQorICAgIHBzcmFkICAgICAgIG1tNCwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIG1tMywgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIG1tNywgbW0xCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTEKKyAgICBwc3JhZCAgICAgICBtbTcsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICBtbTAsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIG1tNCwgbW0zICAgICAgICAgICAgICAgIDsgbW00PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICBwYWNrc3NkdyAgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IG1tNz1kYXRhNj0oMDYgMTYgMjYgMzYpCisKKyAgICBwYWNrc3N3YiAgICBtbTUsIG1tNyAgICAgICAgICAgICAgICA7IG1tNT0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisgICAgcGFja3Nzd2IgICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorCisgICAgbW92cSAgICAgICAgbW02LCBNTVdPUkQgW3drKDYpXSAgICAgOyBtbTY9dG1wMTJMCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW3drKDcpXSAgICAgOyBtbTE9dG1wMTJICisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTM9dG1wMUwKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tMD10bXAxSAorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygwKV0sIG1tNSAgICAgOyB3aygwKT0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tNCAgICAgOyB3aygxKT0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tNgorICAgIG1vdnEgICAgICAgIG1tMiwgbW0xCisgICAgcGFkZGQgICAgICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTJMCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTAgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTJICisgICAgcHN1YmQgICAgICAgbW03LCBtbTMgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTVMCisgICAgcHN1YmQgICAgICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTVICisKKyAgICBtb3ZxICAgICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXSAgOyBtbTU9W1BEX0RFU0NBTEVfUDJdCisKKyAgICBwYWRkZCAgICAgICBtbTYsIG1tNQorICAgIHBhZGRkICAgICAgIG1tMSwgbW01CisgICAgcHNyYWQgICAgICAgbW02LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgbW0xLCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgbW03LCBtbTUKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tNQorICAgIHBzcmFkICAgICAgIG1tNywgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIG1tMiwgREVTQ0FMRV9QMgorCisgICAgcGFja3NzZHcgICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTI9KDAyIDEyIDIyIDMyKQorICAgIHBhY2tzc2R3ICAgIG1tNywgbW0yICAgICAgICAgICAgICAgIDsgbW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKKworICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFt3aygyKV0gICAgIDsgbW00PXRtcDEzTAorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFt3aygzKV0gICAgIDsgbW0zPXRtcDEzSAorICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFt3ayg4KV0gICAgIDsgbW0wPXRtcDBMCisgICAgbW92cSAgICAgICAgbW01LCBNTVdPUkQgW3drKDkpXSAgICAgOyBtbTU9dG1wMEgKKworICAgIG1vdnEgICAgICAgIG1tMSwgbW00CisgICAgbW92cSAgICAgICAgbW0yLCBtbTMKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IG1tND1kYXRhM0wKKyAgICBwYWRkZCAgICAgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz1kYXRhM0gKKyAgICBwc3ViZCAgICAgICBtbTEsIG1tMCAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNEwKKyAgICBwc3ViZCAgICAgICBtbTIsIG1tNSAgICAgICAgICAgICAgICA7IG1tMj1kYXRhNEgKKworICAgIG1vdnEgICAgICAgIG1tMCwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildICA7IG1tMD1bUERfREVTQ0FMRV9QMl0KKworICAgIHBhZGRkICAgICAgIG1tNCwgbW0wCisgICAgcGFkZGQgICAgICAgbW0zLCBtbTAKKyAgICBwc3JhZCAgICAgICBtbTQsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICBtbTMsIERFU0NBTEVfUDIKKyAgICBwYWRkZCAgICAgICBtbTEsIG1tMAorICAgIHBhZGRkICAgICAgIG1tMiwgbW0wCisgICAgcHNyYWQgICAgICAgbW0xLCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgbW0yLCBERVNDQUxFX1AyCisKKyAgICBtb3ZxICAgICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0gIDsgbW01PVtQQl9DRU5URVJKU0FNUF0KKworICAgIHBhY2tzc2R3ICAgIG1tNCwgbW0zICAgICAgICAgICAgICAgIDsgbW00PWRhdGEzPSgwMyAxMyAyMyAzMykKKyAgICBwYWNrc3NkdyAgICBtbTEsIG1tMiAgICAgICAgICAgICAgICA7IG1tMT1kYXRhND0oMDQgMTQgMjQgMzQpCisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbd2soMCldICAgICA7IG1tMD0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTM9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorCisgICAgcGFja3Nzd2IgICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyBtbTY9KDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0KQorICAgIHBhY2tzc3diICAgIG1tNCwgbW03ICAgICAgICAgICAgICAgIDsgbW00PSgwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSkKKworICAgIHBhZGRiICAgICAgIG1tMCwgbW01CisgICAgcGFkZGIgICAgICAgbW0zLCBtbTUKKyAgICBwYWRkYiAgICAgICBtbTYsIG1tNQorICAgIHBhZGRiICAgICAgIG1tNCwgbW01CisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tMCAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsYncgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgcHVucGNraGJ3ICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgIG1vdnEgICAgICAgIG1tMSwgbW02ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2xidyAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICBwdW5wY2toYncgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMCAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tNiAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisgICAgcHVucGNraHdkICAgbW03LCBtbTYgICAgICAgICAgICAgICAgOyBtbTc9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgIG1vdnEgICAgICAgIG1tNSwgbW0xICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW0yICAgICAgICAgICAgICAgIDsgbW0xPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKyAgICBwdW5wY2tod2QgICBtbTUsIG1tMiAgICAgICAgICAgICAgICA7IG1tNT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMCAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tsZHEgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgcHVucGNraGRxICAgbW0zLCBtbTEgICAgICAgICAgICAgICAgOyBtbTM9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIG1vdnEgICAgICAgIG1tNCwgbW03ICAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xkcSAgIG1tNywgbW01ICAgICAgICAgICAgICAgIDsgbW03PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICBwdW5wY2toZHEgICBtbTQsIG1tNSAgICAgICAgICAgICAgICA7IG1tND0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKyAgICBwdXNocGljICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHNhdmUgR09UIGFkZHJlc3MKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0wCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0zCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTcKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTQKKworICAgIHBvcHBpYyAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBHT1QgYWRkcmVzcworCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGICAgICA7IHdzcHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGpueiAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0aW50LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0aW50LXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YmQwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RpbnQtc3NlMi5hc20KQEAgLTAsMCArMSw4NjAgQEAKKzsKKzsgamlkY3RpbnQuYXNtIC0gYWNjdXJhdGUgaW50ZWdlciBJRENUIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorOyBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZAorOyBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RpbnQuYzsgc2VlIHRoZSBqaWRjdGludC5jIGZvcgorOyBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyVkZWZpbmUgUEFTUzFfQklUUyAgMgorCislZGVmaW5lIERFU0NBTEVfUDEgIChDT05TVF9CSVRTIC0gUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMiAgKENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yOTggZXF1ICAyNDQ2ICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAzMTk2ICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICA0NDMzICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1ICA2MjcwICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICA3MzczICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICA5NjMzICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1IDEyMjk5ICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IDE1MTM3ICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1IDE2MDY5ICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1IDE2ODE5ICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IDIwOTk1ICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1IDI1MTcyICA7IEZJWCgzLjA3MjcxMTAyNikKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMjk4IGVxdSBERVNDQUxFKCAzMjA2NTI5NTUsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgREVTQ0FMRSggNDE4OTUzMjc2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1IERFU0NBTEUoIDU4MTEwNDg4NywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSBERVNDQUxFKCA4MjE4MDY0MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgREVTQ0FMRSggOTY2MzQyMTExLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1IERFU0NBTEUoMTI2MjU4NjgxMywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSBERVNDQUxFKDE2MTIwMzEyNjcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgREVTQ0FMRSgxOTg0MDE2MTg4LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1IERFU0NBTEUoMjEwNjIyMDM1MCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSBERVNDQUxFKDIyMDQ1MjA2NzMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgREVTQ0FMRSgyNzUxOTA5NTA2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1IERFU0NBTEUoMzI5OTI5ODM0MSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMy4wNzI3MTEwMjYpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfaWRjdF9pc2xvd19zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X2lzbG93X3NzZTIpOgorCitQV19GMTMwX0YwNTQgICB0aW1lcyA0ICBkdyAgKEZfMF81NDEgKyBGXzBfNzY1KSwgIEZfMF81NDEKK1BXX0YwNTRfTUYxMzAgIHRpbWVzIDQgIGR3ICBGXzBfNTQxLCAoRl8wXzU0MSAtIEZfMV84NDcpCitQV19NRjA3OF9GMTE3ICB0aW1lcyA0ICBkdyAgKEZfMV8xNzUgLSBGXzFfOTYxKSwgIEZfMV8xNzUKK1BXX0YxMTdfRjA3OCAgIHRpbWVzIDQgIGR3ICBGXzFfMTc1LCAoRl8xXzE3NSAtIEZfMF8zOTApCitQV19NRjA2MF9NRjA4OSB0aW1lcyA0ICBkdyAgKEZfMF8yOTggLSBGXzBfODk5KSwgLUZfMF84OTkKK1BXX01GMDg5X0YwNjAgIHRpbWVzIDQgIGR3IC1GXzBfODk5LCAoRl8xXzUwMSAtIEZfMF84OTkpCitQV19NRjA1MF9NRjI1NiB0aW1lcyA0ICBkdyAgKEZfMl8wNTMgLSBGXzJfNTYyKSwgLUZfMl81NjIKK1BXX01GMjU2X0YwNTAgIHRpbWVzIDQgIGR3IC1GXzJfNTYyLCAoRl8zXzA3MiAtIEZfMl81NjIpCitQRF9ERVNDQUxFX1AxICB0aW1lcyA0ICBkZCAgMSA8PCAoREVTQ0FMRV9QMSAtIDEpCitQRF9ERVNDQUxFX1AyICB0aW1lcyA0ICBkZCAgMSA8PCAoREVTQ0FMRV9QMiAtIDEpCitQQl9DRU5URVJKU0FNUCB0aW1lcyAxNiBkYiAgQ0VOVEVSSlNBTVBMRQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaXNsb3dfc3NlMih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBkY3RfdGFibGUoYikgICAoYikgKyA4ICAgICAgICAgIDsganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAoYikgKyAxMiAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAoYikgKyAxNiAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgIChiKSArIDIwICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1hNTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAxMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaWRjdF9pc2xvd19zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfaXNsb3dfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgIHN1YiAgICAgICAgIGVzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgIGxlYSAgICAgICAgIGVzcCwgW3drKDApXQorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworOyAgIG1vdiAgICAgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXSAgICA7IHF1YW50cHRyCisgICAgbW92ICAgICAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXSAgOyBpbnB0cgorCislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSVNMT1dfU1NFMgorICAgIG1vdiAgICAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG9yICAgICAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbkRDVAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTEsIHhtbTAKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0xCisgICAgcGFja3Nzd2IgICAgeG1tMSwgeG1tMQorICAgIG1vdmQgICAgICAgIGVheCwgeG1tMQorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbkRDVAorCisgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICBwc2xsdyAgICAgICB4bW01LCBQQVNTMV9CSVRTCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTU9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW01ICAgICAgICAgICAgICA7IHhtbTU9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTQgICAgICAgICAgICAgIDsgeG1tND0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisKKyAgICBwc2h1ZmQgICAgICB4bW03LCB4bW01LCAweDAwICAgICAgICA7IHhtbTc9Y29sMD0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDApCisgICAgcHNodWZkICAgICAgeG1tNiwgeG1tNSwgMHg1NSAgICAgICAgOyB4bW02PWNvbDE9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxKQorICAgIHBzaHVmZCAgICAgIHhtbTEsIHhtbTUsIDB4QUEgICAgICAgIDsgeG1tMT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKyAgICBwc2h1ZmQgICAgICB4bW01LCB4bW01LCAweEZGICAgICAgICA7IHhtbTU9Y29sMz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMpCisgICAgcHNodWZkICAgICAgeG1tMCwgeG1tNCwgMHgwMCAgICAgICAgOyB4bW0wPWNvbDQ9KDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQorICAgIHBzaHVmZCAgICAgIHhtbTMsIHhtbTQsIDB4NTUgICAgICAgIDsgeG1tMz1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKyAgICBwc2h1ZmQgICAgICB4bW0yLCB4bW00LCAweEFBICAgICAgICA7IHhtbTI9Y29sNj0oMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisgICAgcHNodWZkICAgICAgeG1tNCwgeG1tNCwgMHhGRiAgICAgICAgOyB4bW00PWNvbDc9KDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soOCldLCB4bW02ICAgOyB3ayg4KT1jb2wxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soOSldLCB4bW01ICAgOyB3ayg5KT1jb2wzCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMTApXSwgeG1tMyAgOyB3aygxMCk9Y29sNQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDExKV0sIHhtbTQgIDsgd2soMTEpPWNvbDcKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5fZW5kCisgICAgYWxpZ254ICAgICAgMTYsIDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKyAgICA7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworICAgIDsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisgICAgOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPWluMj16MgorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTM9aW42PXozCisgICAgcHVucGNraHdkICAgeG1tNSwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW01CisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IHhtbTQ9dG1wM0wKKyAgICBwbWFkZHdkICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgIDsgeG1tNT10bXAzSAorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgOyB4bW0xPXRtcDJMCisgICAgcG1hZGR3ZCAgICAgeG1tMywgW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICA7IHhtbTM9dG1wMkgKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9aW4wK2luNAorICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNj1pbjAtaW40CisKKyAgICBweG9yICAgICAgICB4bW03LCB4bW03CisgICAgcHhvciAgICAgICAgeG1tMiwgeG1tMgorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz10bXAwTAorICAgIHB1bnBja2h3ZCAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj10bXAwSAorICAgIHBzcmFkICAgICAgIHhtbTcsICgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUworICAgIHBzcmFkICAgICAgIHhtbTIsICgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgeG1tMiwxNiAmIHBzbGxkIHhtbTIsQ09OU1RfQklUUworCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz10bXAxMEwKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTNMCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMgorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj10bXAxMEgKKyAgICBwc3ViZCAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTNICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXRtcDEwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMiAgIDsgd2soMSk9dG1wMTBICisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMildLCB4bW0wICAgOyB3aygyKT10bXAxM0wKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTQgICA7IHdrKDMpPXRtcDEzSAorCisgICAgcHhvciAgICAgICAgeG1tNSwgeG1tNQorICAgIHB4b3IgICAgICAgIHhtbTcsIHhtbTcKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9dG1wMUwKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHhtbTc9dG1wMUgKKyAgICBwc3JhZCAgICAgICB4bW01LCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTUsMTYgJiBwc2xsZCB4bW01LENPTlNUX0JJVFMKKyAgICBwc3JhZCAgICAgICB4bW03LCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTcsMTYgJiBwc2xsZCB4bW03LENPTlNUX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTUKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9dG1wMTFMCisgICAgcHN1YmQgICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB4bW0yPXRtcDEyTAorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9dG1wMTFICisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXRtcDEySAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNCldLCB4bW01ICAgOyB3ayg0KT10bXAxMUwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTcgICA7IHdrKDUpPXRtcDExSAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDYpXSwgeG1tMiAgIDsgd2soNik9dG1wMTJMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNyldLCB4bW0wICAgOyB3ayg3KT10bXAxMkgKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ejMKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9ejQKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNQorICAgIHB1bnBja2x3ZCAgIHhtbTIsIHhtbTcKKyAgICBwdW5wY2tod2QgICB4bW0wLCB4bW03CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTAKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gIDsgeG1tMj16M0wKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gIDsgeG1tMD16M0gKKyAgICBwbWFkZHdkICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgeG1tNT16NEwKKyAgICBwbWFkZHdkICAgICB4bW03LCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgeG1tNz16NEgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTIgIDsgd2soMTApPXozTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDExKV0sIHhtbTAgIDsgd2soMTEpPXozSAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICA7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKyAgICA7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgIDsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tMworICAgIHB1bnBja2x3ZCAgIHhtbTIsIHhtbTQKKyAgICBwdW5wY2tod2QgICB4bW0wLCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IHhtbTI9dG1wMEwKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IHhtbTA9dG1wMEgKKyAgICBwbWFkZHdkICAgICB4bW0zLCBbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICA7IHhtbTM9dG1wM0wKKyAgICBwbWFkZHdkICAgICB4bW00LCBbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICA7IHhtbTQ9dG1wM0gKKworICAgIHBhZGRkICAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMj10bXAwTAorICAgIHBhZGRkICAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tMD10bXAwSAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz10bXAzTAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND10bXAzSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soOCldLCB4bW0yICAgOyB3ayg4KT10bXAwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDkpXSwgeG1tMCAgIDsgd2soOSk9dG1wMEgKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tNgorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgeG1tMj10bXAxTAorICAgIHBtYWRkd2QgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgeG1tMD10bXAxSAorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgeG1tMT10bXAyTAorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgeG1tNj10bXAySAorCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPXRtcDFMCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB4bW0wPXRtcDFICisgICAgcGFkZGQgICAgICAgeG1tMSwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0xPXRtcDJMCisgICAgcGFkZGQgICAgICAgeG1tNiwgWE1NV09SRCBbd2soMTEpXSAgOyB4bW02PXRtcDJICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxMCldLCB4bW0yICA7IHdrKDEwKT10bXAxTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDExKV0sIHhtbTAgIDsgd2soMTEpPXRtcDFICisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soMCldICAgOyB4bW01PXRtcDEwTAorICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNz10bXAxMEgKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW03CisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PWRhdGEwTAorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMEgKKyAgICBwc3ViZCAgICAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTdMCisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPWRhdGE3SAorCisgICAgbW92ZHFhICAgICAgeG1tMywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICA7IHhtbTM9W1BEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMworICAgIHBzcmFkICAgICAgIHhtbTUsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tMworICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTMKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwYWNrc3NkdyAgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbd2soNCldICAgOyB4bW00PXRtcDExTAorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tMz10bXAxMUgKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PWRhdGExTAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMUgKKyAgICBwc3ViZCAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTZMCisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tNiAgICAgICAgICAgICAgOyB4bW0wPWRhdGE2SAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICA7IHhtbTE9W1BEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tMywgeG1tMQorICAgIHBzcmFkICAgICAgIHhtbTQsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW0zLCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTEKKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tNCwgeG1tMyAgICAgICAgICAgICAgOyB4bW00PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICBwYWNrc3NkdyAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTY9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDYpXSAgIDsgeG1tMz10bXAxMkwKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3ayg3KV0gICA7IHhtbTA9dG1wMTJICisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbd2soMTApXSAgOyB4bW00PXRtcDFMCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soMTEpXSAgOyB4bW0yPXRtcDFICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTUgICA7IHdrKDApPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg0KV0sIHhtbTcgICA7IHdrKDQpPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTEgICA7IHdrKDUpPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0wCisgICAgcGFkZGQgICAgICAgeG1tMywgeG1tNCAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyTAorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMkgKKyAgICBwc3ViZCAgICAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTVMCisgICAgcHN1YmQgICAgICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgOyB4bW02PWRhdGE1SAorCisgICAgbW92ZHFhICAgICAgeG1tNywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICA7IHhtbTc9W1BEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW03CisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tNworICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTcKKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICBwYWNrc3NkdyAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMildICAgOyB4bW0xPXRtcDEzTAorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tND10bXAxM0gKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3ayg4KV0gICA7IHhtbTI9dG1wMEwKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3ayg5KV0gICA7IHhtbTc9dG1wMEgKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00CisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzTAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND1kYXRhM0gKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTRMCisgICAgcHN1YmQgICAgICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PWRhdGE0SAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICA7IHhtbTI9W1BEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMgorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMgorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTIKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTI9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTcsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNz0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgcHVucGNraGRxICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIHB1bnBja2hkcSAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tND0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTIgICA7IHdrKDYpPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg3KV0sIHhtbTUgICA7IHdrKDcpPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgcHVucGNraGRxICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgIHB1bnBja2hkcSAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisgICAgcHVucGNraHFkcSAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICBwdW5wY2tocWRxICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3ayg2KV0gICA7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg4KV0sIHhtbTMgICA7IHdrKDgpPWNvbDEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg5KV0sIHhtbTQgICA7IHdrKDkpPWNvbDMKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICBwdW5wY2tocWRxICB4bW0zLCB4bW02ICAgICAgICAgICAgICA7IHhtbTM9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIHB1bnBja2hxZHEgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTMgIDsgd2soMTApPWNvbDUKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxMSldLCB4bW00ICA7IHdrKDExKT1jb2w3CisuY29sdW1uX2VuZDoKKworICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIDsgeG1tNz1jb2wwLCB4bW0xPWNvbDIsIHhtbTA9Y29sNCwgeG1tMj1jb2w2CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisgICAgOyB0bXAyID0gejEgKyB6MyAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgIDsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMT1pbjI9ejIKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xCisgICAgcHVucGNrbHdkICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgOyB4bW0yPWluNj16MworICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTIKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNQorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldICAgOyB4bW02PXRtcDNMCisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICA7IHhtbTU9dG1wM0gKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gIDsgeG1tMT10bXAyTAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgOyB4bW0yPXRtcDJICisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PWluMCtpbjQKKyAgICBwc3VidyAgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9aW4wLWluNAorCisgICAgcHhvciAgICAgICAgeG1tNCwgeG1tNAorICAgIHB4b3IgICAgICAgIHhtbTAsIHhtbTAKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMEwKKyAgICBwdW5wY2tod2QgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHhtbTA9dG1wMEgKKyAgICBwc3JhZCAgICAgICB4bW00LCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKyAgICBwc3JhZCAgICAgICB4bW0wLCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTAsMTYgJiBwc2xsZCB4bW0wLENPTlNUX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTBMCisgICAgcHN1YmQgICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PXRtcDEzTAorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTBICisgICAgcHN1YmQgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXRtcDEzSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT10bXAxMEwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTAgICA7IHdrKDEpPXRtcDEwSAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tNyAgIDsgd2soMik9dG1wMTNMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMyldLCB4bW02ICAgOyB3aygzKT10bXAxM0gKKworICAgIHB4b3IgICAgICAgIHhtbTUsIHhtbTUKKyAgICBweG9yICAgICAgICB4bW00LCB4bW00CisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXRtcDFMCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMyAgICAgICAgICAgICAgOyB4bW00PXRtcDFICisgICAgcHNyYWQgICAgICAgeG1tNSwgKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCisgICAgcHNyYWQgICAgICAgeG1tNCwgKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01CisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB4bW01PXRtcDExTAorICAgIHBzdWJkICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD10bXAxMkwKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW00CisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDExSAorICAgIHBzdWJkICAgICAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz10bXAxMkgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDQpXSwgeG1tNSAgIDsgd2soNCk9dG1wMTFMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNSldLCB4bW00ICAgOyB3ayg1KT10bXAxMUgKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTAgICA7IHdrKDYpPXRtcDEyTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDcpXSwgeG1tNyAgIDsgd2soNyk9dG1wMTJICisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFt3ayg5KV0gICA7IHhtbTY9Y29sMworICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDgpXSAgIDsgeG1tMz1jb2wxCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMTEpXSAgOyB4bW0xPWNvbDcKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTI9Y29sNQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9ejMKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9ejQKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTQKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTcKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gIDsgeG1tMD16M0wKKyAgICBwbWFkZHdkICAgICB4bW03LCBbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gIDsgeG1tNz16M0gKKyAgICBwbWFkZHdkICAgICB4bW01LCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgeG1tNT16NEwKKyAgICBwbWFkZHdkICAgICB4bW00LCBbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgIDsgeG1tND16NEgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTAgIDsgd2soMTApPXozTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDExKV0sIHhtbTcgIDsgd2soMTEpPXozSAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICA7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKyAgICA7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgIDsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTMKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTcKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IHhtbTA9dG1wMEwKKyAgICBwbWFkZHdkICAgICB4bW03LCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICA7IHhtbTc9dG1wMEgKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICA7IHhtbTE9dG1wM0wKKyAgICBwbWFkZHdkICAgICB4bW0zLCBbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICA7IHhtbTM9dG1wM0gKKworICAgIHBhZGRkICAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMD10bXAwTAorICAgIHBhZGRkICAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tNz10bXAwSAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT10bXAzTAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz10bXAzSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soOCldLCB4bW0wICAgOyB3ayg4KT10bXAwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDkpXSwgeG1tNyAgIDsgd2soOSk9dG1wMEgKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTIKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0yCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tNgorICAgIHB1bnBja2h3ZCAgIHhtbTcsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNworICAgIHBtYWRkd2QgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgeG1tMD10bXAxTAorICAgIHBtYWRkd2QgICAgIHhtbTcsIFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gIDsgeG1tNz10bXAxSAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgeG1tMj10bXAyTAorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgIDsgeG1tNj10bXAySAorCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPXRtcDFMCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tNCAgICAgICAgICAgICAgOyB4bW03PXRtcDFICisgICAgcGFkZGQgICAgICAgeG1tMiwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0yPXRtcDJMCisgICAgcGFkZGQgICAgICAgeG1tNiwgWE1NV09SRCBbd2soMTEpXSAgOyB4bW02PXRtcDJICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxMCldLCB4bW0wICA7IHdrKDEwKT10bXAxTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDExKV0sIHhtbTcgIDsgd2soMTEpPXRtcDFICisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soMCldICAgOyB4bW01PXRtcDEwTAorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tND10bXAxMEgKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW00CisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB4bW01PWRhdGEwTAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgIDsgeG1tND1kYXRhMEgKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTdMCisgICAgcHN1YmQgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PWRhdGE3SAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildICA7IHhtbTE9W1BEX0RFU0NBTEVfUDJdCisKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMQorICAgIHBzcmFkICAgICAgIHhtbTUsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTEKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tNywgREVTQ0FMRV9QMgorCisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbd2soNCldICAgOyB4bW0zPXRtcDExTAorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tMT10bXAxMUgKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB4bW0zPWRhdGExTAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMUgKKyAgICBwc3ViZCAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTZMCisgICAgcHN1YmQgICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PWRhdGE2SAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildICA7IHhtbTI9W1BEX0RFU0NBTEVfUDJdCisKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tMgorICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMgorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTIKKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tNywgREVTQ0FMRV9QMgorCisgICAgcGFja3NzZHcgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCisgICAgcGFja3Nzd2IgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICBwYWNrc3N3YiAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soNildICAgOyB4bW02PXRtcDEyTAorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMj10bXAxMkgKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTE9dG1wMUwKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTc9dG1wMUgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNSAgIDsgd2soMCk9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTJMCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPWRhdGEySAorICAgIHBzdWJkICAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND1kYXRhNUwKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTVICisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gIDsgeG1tNT1bUERfREVTQ0FMRV9QMl0KKworICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTUKKyAgICBwYWRkZCAgICAgICB4bW0yLCB4bW01CisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTIsIERFU0NBTEVfUDIKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW01CisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tNQorICAgIHBzcmFkICAgICAgIHhtbTQsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AyCisKKyAgICBwYWNrc3NkdyAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND1kYXRhNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTM9dG1wMTNMCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMyldICAgOyB4bW0xPXRtcDEzSAorICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDgpXSAgIDsgeG1tNz10bXAwTAorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDkpXSAgIDsgeG1tNT10bXAwSAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTEKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTNMCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzSAorICAgIHBzdWJkICAgICAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj1kYXRhNEwKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTRICisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gIDsgeG1tNz1bUERfREVTQ0FMRV9QMl0KKworICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW03CisgICAgcHNyYWQgICAgICAgeG1tMywgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDIKKyAgICBwYWRkZCAgICAgICB4bW0yLCB4bW03CisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tNworICAgIHBzcmFkICAgICAgIHhtbTIsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AyCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldICA7IHhtbTU9W1BCX0NFTlRFUkpTQU1QXQorCisgICAgcGFja3NzZHcgICAgeG1tMywgeG1tMSAgICAgICAgICAgICA7IHhtbTM9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgIHBhY2tzc2R3ICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgOyB4bW0yPWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgOyB4bW03PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gIDsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKyAgICBwYWNrc3N3YiAgICB4bW02LCB4bW0yICAgICAgICAgICAgIDsgeG1tNj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgcGFja3Nzd2IgICAgeG1tMywgeG1tNCAgICAgICAgICAgICA7IHhtbTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCisgICAgcGFkZGIgICAgICAgeG1tNywgeG1tNQorICAgIHBhZGRiICAgICAgIHhtbTEsIHhtbTUKKyAgICBwYWRkYiAgICAgICB4bW02LCB4bW01CisgICAgcGFkZGIgICAgICAgeG1tMywgeG1tNQorCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNyAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbGJ3ICAgeG1tNywgeG1tMSAgICAgICAgOyB4bW03PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSA0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKyAgICBwdW5wY2toYncgICB4bW0wLCB4bW0xICAgICAgICA7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2xidyAgIHhtbTYsIHhtbTMgICAgICAgIDsgeG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgcHVucGNraGJ3ICAgeG1tMiwgeG1tMyAgICAgICAgOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTcgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTYgICAgICAgIDsgeG1tNz0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tNiAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0wICAgICAgICA7IHhtbTI9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTAgICAgICAgIDsgeG1tNT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tsZHEgICB4bW03LCB4bW0yICAgICAgICA7IHhtbTc9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIHB1bnBja2hkcSAgIHhtbTEsIHhtbTIgICAgICAgIDsgeG1tMT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNCAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbGRxICAgeG1tNCwgeG1tNSAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW01ICAgICAgICA7IHhtbTM9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgcHNodWZkICAgICAgeG1tNiwgeG1tNywgMHg0RSAgOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwc2h1ZmQgICAgICB4bW0wLCB4bW0xLCAweDRFICA7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTQsIDB4NEUgIDsgeG1tMj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisgICAgcHNodWZkICAgICAgeG1tNSwgeG1tMywgMHg0RSAgOyB4bW01PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSs0KlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrNipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0wCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzUqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VkaSs3KlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcG9wcGljICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0cmVkLW1teC5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RyZWQtbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzZlZTNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0cmVkLW1teC5hc20KQEAgLTAsMCArMSw3MDYgQEAKKzsKKzsgamlkY3RyZWQuYXNtIC0gcmVkdWNlZC1zaXplIElEQ1QgKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUKKzsgb3V0cHV0OiBlaXRoZXIgNHg0IG9yIDJ4MiBwaXhlbHMgZnJvbSBhbiA4eDggRENUIGJsb2NrLgorOyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0cmVkLmM7Cis7IHNlZSB0aGUgamlkY3RyZWQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgICAgMTMKKyVkZWZpbmUgUEFTUzFfQklUUyAgICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMV80ICAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMgKyAxKQorJWRlZmluZSBERVNDQUxFX1AyXzQgIChDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMgKyAxKQorJWRlZmluZSBERVNDQUxFX1AxXzIgIChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyArIDIpCislZGVmaW5lIERFU0NBTEVfUDJfMiAgKENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMyArIDIpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjExIGVxdSAgMTczMCAgOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5IGVxdSAgNDE3NiAgOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxIGVxdSAgNDkyNiAgOyBGSVgoMC42MDEzNDQ4ODcpCitGXzBfNzIwIGVxdSAgNTkwNiAgOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1IGVxdSAgNjI3MCAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwIGVxdSAgNjk2NyAgOyBGSVgoMC44NTA0MzAwOTUpCitGXzBfODk5IGVxdSAgNzM3MyAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxIGVxdSAgODY5NyAgOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyIGVxdSAxMDQyNiAgOyBGSVgoMS4yNzI3NTg1ODApCitGXzFfNDUxIGVxdSAxMTg5MyAgOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3IGVxdSAxNTEzNyAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyIGVxdSAxNzc5OSAgOyBGSVgoMi4xNzI3MzQ4MDMpCitGXzJfNTYyIGVxdSAyMDk5NSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0IGVxdSAyOTY5MiAgOyBGSVgoMy42MjQ1MDk3ODUpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8wXzIxMSBlcXUgREVTQ0FMRSggMjI2NzM1ODc5LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkgZXF1IERFU0NBTEUoIDU0NzM4ODgzNCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxIGVxdSBERVNDQUxFKCA2NDU2ODkxNTUsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMCBlcXUgREVTQ0FMRSggNzc0MTI0NzE0LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUgZXF1IERFU0NBTEUoIDgyMTgwNjQxMywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwIGVxdSBERVNDQUxFKCA5MTMxNDIzNjEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OSBlcXUgREVTQ0FMRSggOTY2MzQyMTExLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEgZXF1IERFU0NBTEUoMTEzOTg3ODIzOSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyIGVxdSBERVNDQUxFKDEzNjY2MTQxMTksIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MSBlcXUgREVTQ0FMRSgxNTU4ODMxNTE2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcgZXF1IERFU0NBTEUoMTk4NDAxNjE4OCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyIGVxdSBERVNDQUxFKDIzMzI5NTYyMzAsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MiBlcXUgREVTQ0FMRSgyNzUxOTA5NTA2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQgZXF1IERFU0NBTEUoMzg5MTc4Nzc0NywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMy42MjQ1MDk3ODUpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfaWRjdF9yZWRfbW14KQorCitFWFROKGpjb25zdF9pZGN0X3JlZF9tbXgpOgorCitQV19GMTg0X01GMDc2ICAgdGltZXMgMiBkdyAgRl8xXzg0NywgLUZfMF83NjUKK1BXX0YyNTZfRjA4OSAgICB0aW1lcyAyIGR3ICBGXzJfNTYyLCAgRl8wXzg5OQorUFdfRjEwNl9NRjIxNyAgIHRpbWVzIDIgZHcgIEZfMV8wNjEsIC1GXzJfMTcyCitQV19NRjA2MF9NRjA1MCAgdGltZXMgMiBkdyAtRl8wXzYwMSwgLUZfMF81MDkKK1BXX0YxNDVfTUYwMjEgICB0aW1lcyAyIGR3ICBGXzFfNDUxLCAtRl8wXzIxMQorUFdfRjM2Ml9NRjEyNyAgIHRpbWVzIDIgZHcgIEZfM182MjQsIC1GXzFfMjcyCitQV19GMDg1X01GMDcyICAgdGltZXMgMiBkdyAgRl8wXzg1MCwgLUZfMF83MjAKK1BEX0RFU0NBTEVfUDFfNCB0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxXzQgLSAxKQorUERfREVTQ0FMRV9QMl80IHRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDJfNCAtIDEpCitQRF9ERVNDQUxFX1AxXzIgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMV8yIC0gMSkKK1BEX0RFU0NBTEVfUDJfMiB0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyXzIgLSAxKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA0eDQgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF80eDRfbW14KHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKSAgIChiKSArIDggICAgICAgICAgOyB2b2lkICpkY3RfdGFibGUKKyVkZWZpbmUgY29lZl9ibG9jayhiKSAgKGIpICsgMTIgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgKGIpICsgMTYgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpICAoYikgKyAyMCAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgZWJwICsgMAorJWRlZmluZSB3ayhpKSAgICAgICAgICBlYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgIDIKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgd2soMCkgLSBEQ1RTSVpFMiAqIFNJWkVPRl9KQ09FRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaWRjdF80eDRfbW14KQorCitFWFROKGpzaW1kX2lkY3RfNHg0X21teCk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWF4LCBlc3AgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgc3ViICAgICAgICAgZXNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgbW92ICAgICAgICAgW2VzcF0sIGVheAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgbGVhICAgICAgICAgZXNwLCBbd29ya3NwYWNlXQorICAgIHB1c2hwaWMgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIGdldF9HT1QgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7ICAgbW92ICAgICAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgIG1vdiAgICAgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldICAgIDsgcXVhbnRwdHIKKyAgICBtb3YgICAgICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldICA7IGlucHRyCisgICAgbGVhICAgICAgICAgZWRpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgOyBKQ09FRiAqd3NwdHIKKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29sdW1ubG9vcDoKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF80WDRfTU1YCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbkRDVAorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgbW0wLCBtbTEKKyAgICBwYWNrc3N3YiAgICBtbTAsIG1tMAorICAgIG1vdmQgICAgICAgIGVheCwgbW0wCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHBzbGx3ICAgICAgIG1tMCwgUEFTUzFfQklUUworCisgICAgbW92cSAgICAgICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgcHVucGNraHdkICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAzIDAzKQorCisgICAgbW92cSAgICAgICAgbW0xLCBtbTAKKyAgICBwdW5wY2tsZHEgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDAgMDApCisgICAgcHVucGNraGRxICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KDAxIDAxIDAxIDAxKQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yCisgICAgcHVucGNrbGRxICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAyIDAyKQorICAgIHB1bnBja2hkcSAgIG1tMywgbW0zICAgICAgICAgICAgICAgIDsgbW0zPSgwMyAwMyAwMyAwMykKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKyAgICBqbXAgICAgICAgICBuZWFyIC5uZXh0Y29sdW1uCisgICAgYWxpZ254ICAgICAgMTYsIDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTAKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMAorICAgIHB1bnBja2x3ZCAgIG1tNCwgbW0xCisgICAgcHVucGNraHdkICAgbW01LCBtbTEKKyAgICBtb3ZxICAgICAgICBtbTAsIG1tNAorICAgIG1vdnEgICAgICAgIG1tMSwgbW01CisgICAgcG1hZGR3ZCAgICAgbW00LCBbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXSAgIDsgbW00PSh0bXAyTCkKKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldICAgOyBtbTU9KHRtcDJIKQorICAgIHBtYWRkd2QgICAgIG1tMCwgW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldICA7IG1tMD0odG1wMEwpCisgICAgcG1hZGR3ZCAgICAgbW0xLCBbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0gIDsgbW0xPSh0bXAwSCkKKworICAgIG1vdnEgICAgICAgIG1tNiwgbW0yCisgICAgbW92cSAgICAgICAgbW03LCBtbTIKKyAgICBwdW5wY2tsd2QgICBtbTYsIG1tMworICAgIHB1bnBja2h3ZCAgIG1tNywgbW0zCisgICAgbW92cSAgICAgICAgbW0yLCBtbTYKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNworICAgIHBtYWRkd2QgICAgIG1tNiwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXSAgOyBtbTY9KHRtcDJMKQorICAgIHBtYWRkd2QgICAgIG1tNywgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXSAgOyBtbTc9KHRtcDJIKQorICAgIHBtYWRkd2QgICAgIG1tMiwgW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldICAgOyBtbTI9KHRtcDBMKQorICAgIHBtYWRkd2QgICAgIG1tMywgW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldICAgOyBtbTM9KHRtcDBIKQorCisgICAgcGFkZGQgICAgICAgbW02LCBtbTQgICAgICAgICAgICAgICAgOyBtbTY9dG1wMkwKKyAgICBwYWRkZCAgICAgICBtbTcsIG1tNSAgICAgICAgICAgICAgICA7IG1tNz10bXAySAorICAgIHBhZGRkICAgICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPXRtcDBMCisgICAgcGFkZGQgICAgICAgbW0zLCBtbTEgICAgICAgICAgICAgICAgOyBtbTM9dG1wMEgKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbd2soMCldLCBtbTIgICAgIDsgd2soMCk9dG1wMEwKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDEpXSwgbW0zICAgICA7IHdrKDEpPXRtcDBICisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICBweG9yICAgICAgICBtbTEsIG1tMQorICAgIHB4b3IgICAgICAgIG1tMiwgbW0yCisgICAgcHVucGNrbHdkICAgbW0xLCBtbTQgICAgICAgICAgICAgICAgOyBtbTE9dG1wMEwKKyAgICBwdW5wY2tod2QgICBtbTIsIG1tNCAgICAgICAgICAgICAgICA7IG1tMj10bXAwSAorICAgIHBzcmFkICAgICAgIG1tMSwgKDE2LUNPTlNUX0JJVFMtMSkgIDsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorICAgIHBzcmFkICAgICAgIG1tMiwgKDE2LUNPTlNUX0JJVFMtMSkgIDsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMrMQorCisgICAgbW92cSAgICAgICAgbW0zLCBtbTUgICAgICAgICAgICAgICAgOyBtbTU9aW4yPXoyCisgICAgcHVucGNrbHdkICAgbW01LCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9aW42PXozCisgICAgcHVucGNraHdkICAgbW0zLCBtbTAKKyAgICBwbWFkZHdkICAgICBtbTUsIFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXSAgOyBtbTU9dG1wMkwKKyAgICBwbWFkZHdkICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXSAgOyBtbTM9dG1wMkgKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0xCisgICAgbW92cSAgICAgICAgbW0wLCBtbTIKKyAgICBwYWRkZCAgICAgICBtbTEsIG1tNSAgICAgICAgICAgICAgICA7IG1tMT10bXAxMEwKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tMyAgICAgICAgICAgICAgICA7IG1tMj10bXAxMEgKKyAgICBwc3ViZCAgICAgICBtbTQsIG1tNSAgICAgICAgICAgICAgICA7IG1tND10bXAxMkwKKyAgICBwc3ViZCAgICAgICBtbTAsIG1tMyAgICAgICAgICAgICAgICA7IG1tMD10bXAxMkgKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMQorICAgIG1vdnEgICAgICAgIG1tMywgbW0yCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTYgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTBMCisgICAgcGFkZGQgICAgICAgbW0yLCBtbTcgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTBICisgICAgcHN1YmQgICAgICAgbW01LCBtbTYgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTNMCisgICAgcHN1YmQgICAgICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTNICisKKyAgICBtb3ZxICAgICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldICA7IG1tNj1bUERfREVTQ0FMRV9QMV80XQorCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTYKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tNgorICAgIHBzcmFkICAgICAgIG1tMSwgREVTQ0FMRV9QMV80CisgICAgcHNyYWQgICAgICAgbW0yLCBERVNDQUxFX1AxXzQKKyAgICBwYWRkZCAgICAgICBtbTUsIG1tNgorICAgIHBhZGRkICAgICAgIG1tMywgbW02CisgICAgcHNyYWQgICAgICAgbW01LCBERVNDQUxFX1AxXzQKKyAgICBwc3JhZCAgICAgICBtbTMsIERFU0NBTEVfUDFfNAorCisgICAgcGFja3NzZHcgICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTA9KDAwIDAxIDAyIDAzKQorICAgIHBhY2tzc2R3ICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PWRhdGEzPSgzMCAzMSAzMiAzMykKKworICAgIG1vdnEgICAgICAgIG1tNywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW03PXRtcDBMCisgICAgbW92cSAgICAgICAgbW02LCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTY9dG1wMEgKKworICAgIG1vdnEgICAgICAgIG1tMiwgbW00CisgICAgbW92cSAgICAgICAgbW0zLCBtbTAKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tNyAgICAgICAgICAgICAgICA7IG1tND1kYXRhMUwKKyAgICBwYWRkZCAgICAgICBtbTAsIG1tNiAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMUgKKyAgICBwc3ViZCAgICAgICBtbTIsIG1tNyAgICAgICAgICAgICAgICA7IG1tMj1kYXRhMkwKKyAgICBwc3ViZCAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMkgKKworICAgIG1vdnEgICAgICAgIG1tNywgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV80KV0gIDsgbW03PVtQRF9ERVNDQUxFX1AxXzRdCisKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tNworICAgIHBhZGRkICAgICAgIG1tMCwgbW03CisgICAgcHNyYWQgICAgICAgbW00LCBERVNDQUxFX1AxXzQKKyAgICBwc3JhZCAgICAgICBtbTAsIERFU0NBTEVfUDFfNAorICAgIHBhZGRkICAgICAgIG1tMiwgbW03CisgICAgcGFkZGQgICAgICAgbW0zLCBtbTcKKyAgICBwc3JhZCAgICAgICBtbTIsIERFU0NBTEVfUDFfNAorICAgIHBzcmFkICAgICAgIG1tMywgREVTQ0FMRV9QMV80CisKKyAgICBwYWNrc3NkdyAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IG1tND1kYXRhMT0oMTAgMTEgMTIgMTMpCisgICAgcGFja3NzZHcgICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTI9KDIwIDIxIDIyIDIzKQorCisgICAgbW92cSAgICAgICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgbW0xLCBtbTQgICAgICAgICAgICAgICAgOyBtbTE9KDAwIDEwIDAxIDExKQorICAgIHB1bnBja2h3ZCAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PSgwMiAxMiAwMyAxMykKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICBtbTIsIG1tNSAgICAgICAgICAgICAgICA7IG1tMj0oMjAgMzAgMjEgMzEpCisgICAgcHVucGNraHdkICAgbW03LCBtbTUgICAgICAgICAgICAgICAgOyBtbTc9KDIyIDMyIDIzIDMzKQorCisgICAgbW92cSAgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgOyBtbTE9KDAwIDEwIDIwIDMwKQorICAgIHB1bnBja2hkcSAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgbW0wPSgwMSAxMSAyMSAzMSkKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICBtbTYsIG1tNyAgICAgICAgICAgICAgICA7IG1tNj0oMDIgMTIgMjIgMzIpCisgICAgcHVucGNraGRxICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTM9KDAzIDEzIDIzIDMzKQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworCisubmV4dGNvbHVtbjoKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYgICAgICAgICAgICA7IGNvZWZfYmxvY2sKKyAgICBhZGQgICAgICAgICBlZHgsIGJ5dGUgNCpTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFICA7IHF1YW50cHRyCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfSkNPRUYgICAgOyB3c3B0cgorICAgIGRlYyAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbGVhICAgICAgICAgZXNpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgICA7IEpDT0VGICp3c3B0cgorICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXSAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgbW92cSAgICAgICAgbW01LCBtbTAKKyAgICBwdW5wY2tsd2QgICBtbTQsIG1tMQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0xCisgICAgbW92cSAgICAgICAgbW0wLCBtbTQKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tNQorICAgIHBtYWRkd2QgICAgIG1tNCwgW0dPVE9GRihlYngsUFdfRjI1Nl9GMDg5KV0gICA7IG1tND0odG1wMkwpCisgICAgcG1hZGR3ZCAgICAgbW01LCBbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXSAgIDsgbW01PSh0bXAySCkKKyAgICBwbWFkZHdkICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXSAgOyBtbTA9KHRtcDBMKQorICAgIHBtYWRkd2QgICAgIG1tMSwgW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldICA7IG1tMT0odG1wMEgpCisKKyAgICBtb3ZxICAgICAgICBtbTYsIG1tMgorICAgIG1vdnEgICAgICAgIG1tNywgbW0yCisgICAgcHVucGNrbHdkICAgbW02LCBtbTMKKyAgICBwdW5wY2tod2QgICBtbTcsIG1tMworICAgIG1vdnEgICAgICAgIG1tMiwgbW02CisgICAgbW92cSAgICAgICAgbW0zLCBtbTcKKyAgICBwbWFkZHdkICAgICBtbTYsIFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0gIDsgbW02PSh0bXAyTCkKKyAgICBwbWFkZHdkICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0gIDsgbW03PSh0bXAySCkKKyAgICBwbWFkZHdkICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXSAgIDsgbW0yPSh0bXAwTCkKKyAgICBwbWFkZHdkICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXSAgIDsgbW0zPSh0bXAwSCkKKworICAgIHBhZGRkICAgICAgIG1tNiwgbW00ICAgICAgICAgICAgICAgIDsgbW02PXRtcDJMCisgICAgcGFkZGQgICAgICAgbW03LCBtbTUgICAgICAgICAgICAgICAgOyBtbTc9dG1wMkgKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tMCAgICAgICAgICAgICAgICA7IG1tMj10bXAwTAorICAgIHBhZGRkICAgICAgIG1tMywgbW0xICAgICAgICAgICAgICAgIDsgbW0zPXRtcDBICisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW3drKDApXSwgbW0yICAgICA7IHdrKDApPXRtcDBMCisgICAgbW92cSAgICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMyAgICAgOyB3aygxKT10bXAwSAorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdnEgICAgICAgIG1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisgICAgcHhvciAgICAgICAgbW0xLCBtbTEKKyAgICBweG9yICAgICAgICBtbTIsIG1tMgorICAgIHB1bnBja2x3ZCAgIG1tMSwgbW00ICAgICAgICAgICAgICAgIDsgbW0xPXRtcDBMCisgICAgcHVucGNraHdkICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9dG1wMEgKKyAgICBwc3JhZCAgICAgICBtbTEsICgxNi1DT05TVF9CSVRTLTEpICA7IHBzcmFkIG1tMSwxNiAmIHBzbGxkIG1tMSxDT05TVF9CSVRTKzEKKyAgICBwc3JhZCAgICAgICBtbTIsICgxNi1DT05TVF9CSVRTLTEpICA7IHBzcmFkIG1tMiwxNiAmIHBzbGxkIG1tMixDT05TVF9CSVRTKzEKKworICAgIG1vdnEgICAgICAgIG1tMywgbW01ICAgICAgICAgICAgICAgIDsgbW01PWluMj16MgorICAgIHB1bnBja2x3ZCAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW0wPWluNj16MworICAgIHB1bnBja2h3ZCAgIG1tMywgbW0wCisgICAgcG1hZGR3ZCAgICAgbW01LCBbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gIDsgbW01PXRtcDJMCisgICAgcG1hZGR3ZCAgICAgbW0zLCBbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gIDsgbW0zPXRtcDJICisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMQorICAgIG1vdnEgICAgICAgIG1tMCwgbW0yCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTUgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTBMCisgICAgcGFkZGQgICAgICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTBICisgICAgcHN1YmQgICAgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTJMCisgICAgcHN1YmQgICAgICAgbW0wLCBtbTMgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTJICisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92cSAgICAgICAgbW01LCBtbTEKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tMgorICAgIHBhZGRkICAgICAgIG1tMSwgbW02ICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEwTAorICAgIHBhZGRkICAgICAgIG1tMiwgbW03ICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEwSAorICAgIHBzdWJkICAgICAgIG1tNSwgbW02ICAgICAgICAgICAgICAgIDsgbW01PWRhdGEzTAorICAgIHBzdWJkICAgICAgIG1tMywgbW03ICAgICAgICAgICAgICAgIDsgbW0zPWRhdGEzSAorCisgICAgbW92cSAgICAgICAgbW02LCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXSAgOyBtbTY9W1BEX0RFU0NBTEVfUDJfNF0KKworICAgIHBhZGRkICAgICAgIG1tMSwgbW02CisgICAgcGFkZGQgICAgICAgbW0yLCBtbTYKKyAgICBwc3JhZCAgICAgICBtbTEsIERFU0NBTEVfUDJfNAorICAgIHBzcmFkICAgICAgIG1tMiwgREVTQ0FMRV9QMl80CisgICAgcGFkZGQgICAgICAgbW01LCBtbTYKKyAgICBwYWRkZCAgICAgICBtbTMsIG1tNgorICAgIHBzcmFkICAgICAgIG1tNSwgREVTQ0FMRV9QMl80CisgICAgcHNyYWQgICAgICAgbW0zLCBERVNDQUxFX1AyXzQKKworICAgIHBhY2tzc2R3ICAgIG1tMSwgbW0yICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEwPSgwMCAxMCAyMCAzMCkKKyAgICBwYWNrc3NkdyAgICBtbTUsIG1tMyAgICAgICAgICAgICAgICA7IG1tNT1kYXRhMz0oMDMgMTMgMjMgMzMpCisKKyAgICBtb3ZxICAgICAgICBtbTcsIE1NV09SRCBbd2soMCldICAgICA7IG1tNz10bXAwTAorICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW02PXRtcDBICisKKyAgICBtb3ZxICAgICAgICBtbTIsIG1tNAorICAgIG1vdnEgICAgICAgIG1tMywgbW0wCisgICAgcGFkZGQgICAgICAgbW00LCBtbTcgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTFMCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTFICisgICAgcHN1YmQgICAgICAgbW0yLCBtbTcgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTJMCisgICAgcHN1YmQgICAgICAgbW0zLCBtbTYgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTJICisKKyAgICBtb3ZxICAgICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfNCldICA7IG1tNz1bUERfREVTQ0FMRV9QMl80XQorCisgICAgcGFkZGQgICAgICAgbW00LCBtbTcKKyAgICBwYWRkZCAgICAgICBtbTAsIG1tNworICAgIHBzcmFkICAgICAgIG1tNCwgREVTQ0FMRV9QMl80CisgICAgcHNyYWQgICAgICAgbW0wLCBERVNDQUxFX1AyXzQKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tNworICAgIHBhZGRkICAgICAgIG1tMywgbW03CisgICAgcHNyYWQgICAgICAgbW0yLCBERVNDQUxFX1AyXzQKKyAgICBwc3JhZCAgICAgICBtbTMsIERFU0NBTEVfUDJfNAorCisgICAgcGFja3NzZHcgICAgbW00LCBtbTAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTE9KDAxIDExIDIxIDMxKQorICAgIHBhY2tzc2R3ICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEyPSgwMiAxMiAyMiAzMikKKworICAgIG1vdnEgICAgICAgIG1tNiwgW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXSAgOyBtbTY9W1BCX0NFTlRFUkpTQU1QXQorCisgICAgcGFja3Nzd2IgICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgOyBtbTE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorICAgIHBhY2tzc3diICAgIG1tNCwgbW01ICAgICAgICAgICAgICAgIDsgbW00PSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKyAgICBwYWRkYiAgICAgICBtbTEsIG1tNgorICAgIHBhZGRiICAgICAgIG1tNCwgbW02CisKKyAgICBtb3ZxICAgICAgICBtbTcsIG1tMSAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsYncgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgcHVucGNraGJ3ICAgbW03LCBtbTQgICAgICAgICAgICAgICAgOyBtbTc9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCisgICAgbW92cSAgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbHdkICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgIHB1bnBja2h3ZCAgIG1tMCwgbW03ICAgICAgICAgICAgICAgIDsgbW0wPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKworICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ZCAgICAgICAgRFdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTEKKyAgICBtb3ZkICAgICAgICBEV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMAorCisgICAgcHNybHEgICAgICAgbW0xLCA0KkJZVEVfQklUCisgICAgcHNybHEgICAgICAgbW0wLCA0KkJZVEVfQklUCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdmQgICAgICAgIERXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisgICAgbW92ZCAgICAgICAgRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wcGljICAgICAgZWJ4CisgICAgbW92ICAgICAgICAgZXNwLCBlYnAgICAgICAgICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICBwb3AgICAgICAgICBlc3AgICAgICAgICAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorOyBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgMngyIG91dHB1dCBibG9jay4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfMngyX21teCh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBkY3RfdGFibGUoYikgICAoYikgKyA4ICAgICAgICAgIDsgdm9pZCAqZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikgIChiKSArIDEyICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgIChiKSArIDE2ICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgKGIpICsgMjAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaWRjdF8yeDJfbW14KQorCitFWFROKGpzaW1kX2lkY3RfMngyX21teCk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYnApXSAgICA7IHF1YW50cHRyCisgICAgbW92ICAgICAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXSAgOyBpbnB0cgorCisgICAgOyB8IGlucHV0OiAgICAgICAgICAgICAgICAgIHwgcmVzdWx0OiAgICAgICAgfAorICAgIDsgfCAwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNyB8ICAgICAgICAgICAgICAgIHwKKyAgICA7IHwgMTAgMTEgKiogMTMgKiogMTUgKiogMTcgfCAgICAgICAgICAgICAgICB8CisgICAgOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorICAgIDsgfCAzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNyB8IEEwIEExIEEzIEE1IEE3IHwKKyAgICA7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCBCMCBCMSBCMyBCNSBCNyB8CisgICAgOyB8IDUwIDUxICoqIDUzICoqIDU1ICoqIDU3IHwgICAgICAgICAgICAgICAgfAorICAgIDsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKyAgICA7IHwgNzAgNzEgKiogNzMgKiogNzUgKiogNzcgfCAgICAgICAgICAgICAgICB8CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBtb3ZxICAgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIDsgbW0wPSgxMCAxMSAqKiAxMyksIG1tMT0oMzAgMzEgKiogMzMpCisgICAgOyBtbTI9KDUwIDUxICoqIDUzKSwgbW0zPSg3MCA3MSAqKiA3MykKKworICAgIHBjbXBlcWQgICAgIG1tNywgbW03CisgICAgcHNsbGQgICAgICAgbW03LCBXT1JEX0JJVCAgICAgICAgICAgOyBtbTc9ezB4MDAwMCAweEZGRkYgMHgwMDAwIDB4RkZGRn0KKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgbW00PSgxMCAxMSAqKiAxMykKKyAgICBtb3ZxICAgICAgICBtbTUsIG1tMiAgICAgICAgICAgICAgICA7IG1tNT0oNTAgNTEgKiogNTMpCisgICAgcHVucGNrbHdkICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyBtbTQ9KDEwIDMwIDExIDMxKQorICAgIHB1bnBja2x3ZCAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSg1MCA3MCA1MSA3MSkKKyAgICBwbWFkZHdkICAgICBtbTQsIFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgIHBtYWRkd2QgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKyAgICBwc3JsZCAgICAgICBtbTAsIFdPUkRfQklUICAgICAgICAgICA7IG1tMD0oMTEgLS0gMTMgLS0pCisgICAgcGFuZCAgICAgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KC0tIDMxIC0tIDMzKQorICAgIHBzcmxkICAgICAgIG1tMiwgV09SRF9CSVQgICAgICAgICAgIDsgbW0yPSg1MSAtLSA1MyAtLSkKKyAgICBwYW5kICAgICAgICBtbTMsIG1tNyAgICAgICAgICAgICAgICA7IG1tMz0oLS0gNzEgLS0gNzMpCisgICAgcG9yICAgICAgICAgbW0wLCBtbTEgICAgICAgICAgICAgICAgOyBtbTA9KDExIDMxIDEzIDMzKQorICAgIHBvciAgICAgICAgIG1tMiwgbW0zICAgICAgICAgICAgICAgIDsgbW0yPSg1MSA3MSA1MyA3MykKKyAgICBwbWFkZHdkICAgICBtbTAsIFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgIHBtYWRkd2QgICAgIG1tMiwgW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tNSAgICAgICAgICAgICAgICA7IG1tND10bXAwW2NvbDAgY29sMV0KKworICAgIG1vdnEgICAgICAgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDEsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMSxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg3LDEsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg3LDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgOyBtbTY9KCoqIDE1ICoqIDE3KSwgbW0xPSgqKiAzNSAqKiAzNykKKyAgICA7IG1tMz0oKiogNTUgKiogNTcpLCBtbTU9KCoqIDc1ICoqIDc3KQorCisgICAgcHNybGQgICAgICAgbW02LCBXT1JEX0JJVCAgICAgICAgICAgOyBtbTY9KDE1IC0tIDE3IC0tKQorICAgIHBhbmQgICAgICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgbW0xPSgtLSAzNSAtLSAzNykKKyAgICBwc3JsZCAgICAgICBtbTMsIFdPUkRfQklUICAgICAgICAgICA7IG1tMz0oNTUgLS0gNTcgLS0pCisgICAgcGFuZCAgICAgICAgbW01LCBtbTcgICAgICAgICAgICAgICAgOyBtbTU9KC0tIDc1IC0tIDc3KQorICAgIHBvciAgICAgICAgIG1tNiwgbW0xICAgICAgICAgICAgICAgIDsgbW02PSgxNSAzNSAxNyAzNykKKyAgICBwb3IgICAgICAgICBtbTMsIG1tNSAgICAgICAgICAgICAgICA7IG1tMz0oNTUgNzUgNTcgNzcpCisgICAgcG1hZGR3ZCAgICAgbW02LCBbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKyAgICBwbWFkZHdkICAgICBtbTMsIFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorCisgICAgcGFkZGQgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyBtbTA9dG1wMFtjb2wxIGNvbDNdCisgICAgcGFkZGQgICAgICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9dG1wMFtjb2w1IGNvbDddCisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICA7IG1tMT0oMDAgMDEgKiogMDMpLCBtbTU9KCoqIDA1ICoqIDA3KQorCisgICAgbW92cSAgICAgICAgbW0yLCBtbTEgICAgICAgICAgICAgICAgICAgICAgOyBtbTI9KDAwIDAxICoqIDAzKQorICAgIHBzbGxkICAgICAgIG1tMSwgV09SRF9CSVQgICAgICAgICAgICAgICAgIDsgbW0xPSgtLSAwMCAtLSAqKikKKyAgICBwc3JhZCAgICAgICBtbTEsIChXT1JEX0JJVC1DT05TVF9CSVRTLTIpICA7IG1tMT10bXAxMFtjb2wwICoqKipdCisKKyAgICBwYW5kICAgICAgICBtbTIsIG1tNyAgICAgICAgICAgICAgICAgICAgICA7IG1tMj0oLS0gMDEgLS0gMDMpCisgICAgcGFuZCAgICAgICAgbW01LCBtbTcgICAgICAgICAgICAgICAgICAgICAgOyBtbTU9KC0tIDA1IC0tIDA3KQorICAgIHBzcmFkICAgICAgIG1tMiwgKFdPUkRfQklULUNPTlNUX0JJVFMtMikgIDsgbW0yPXRtcDEwW2NvbDEgY29sM10KKyAgICBwc3JhZCAgICAgICBtbTUsIChXT1JEX0JJVC1DT05TVF9CSVRTLTIpICA7IG1tNT10bXAxMFtjb2w1IGNvbDddCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92cSAgICAgICAgbW0zLCBtbTEKKyAgICBwYWRkZCAgICAgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMFtjb2wwICoqKipdPShBMCAqKikKKyAgICBwc3ViZCAgICAgICBtbTMsIG1tNCAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMVtjb2wwICoqKipdPShCMCAqKikKKyAgICBwdW5wY2tsZHEgICBtbTEsIG1tMyAgICAgICAgICAgICAgICA7IG1tMT0oQTAgQjApCisKKyAgICBtb3ZxICAgICAgICBtbTcsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfMildICA7IG1tNz1bUERfREVTQ0FMRV9QMV8yXQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTMsIG1tNQorICAgIHBhZGRkICAgICAgIG1tMiwgbW0wICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEwW2NvbDEgY29sM109KEExIEEzKQorICAgIHBhZGRkICAgICAgIG1tNSwgbW02ICAgICAgICAgICAgICAgIDsgbW01PWRhdGEwW2NvbDUgY29sN109KEE1IEE3KQorICAgIHBzdWJkICAgICAgIG1tNCwgbW0wICAgICAgICAgICAgICAgIDsgbW00PWRhdGExW2NvbDEgY29sM109KEIxIEIzKQorICAgIHBzdWJkICAgICAgIG1tMywgbW02ICAgICAgICAgICAgICAgIDsgbW0zPWRhdGExW2NvbDUgY29sN109KEI1IEI3KQorCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTcKKyAgICBwc3JhZCAgICAgICBtbTEsIERFU0NBTEVfUDFfMgorCisgICAgcGFkZGQgICAgICAgbW0yLCBtbTcKKyAgICBwYWRkZCAgICAgICBtbTUsIG1tNworICAgIHBzcmFkICAgICAgIG1tMiwgREVTQ0FMRV9QMV8yCisgICAgcHNyYWQgICAgICAgbW01LCBERVNDQUxFX1AxXzIKKyAgICBwYWRkZCAgICAgICBtbTQsIG1tNworICAgIHBhZGRkICAgICAgIG1tMywgbW03CisgICAgcHNyYWQgICAgICAgbW00LCBERVNDQUxFX1AxXzIKKyAgICBwc3JhZCAgICAgICBtbTMsIERFU0NBTEVfUDFfMgorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzLCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworICAgIG1vdiAgICAgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXSAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWJwKV0KKworICAgIDsgfCBpbnB1dDp8IHJlc3VsdDp8CisgICAgOyB8IEEwIEIwIHwgICAgICAgIHwKKyAgICA7IHwgQTEgQjEgfCBDMCBDMSAgfAorICAgIDsgfCBBMyBCMyB8IEQwIEQxICB8CisgICAgOyB8IEE1IEI1IHwgICAgICAgIHwKKyAgICA7IHwgQTcgQjcgfCAgICAgICAgfAorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgcGFja3NzZHcgICAgbW0yLCBtbTQgICAgICAgICAgICAgICAgOyBtbTI9KEExIEEzIEIxIEIzKQorICAgIHBhY2tzc2R3ICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PShBNSBBNyBCNSBCNykKKyAgICBwbWFkZHdkICAgICBtbTIsIFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgIHBtYWRkd2QgICAgIG1tNSwgW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKyAgICBwYWRkZCAgICAgICBtbTIsIG1tNSAgICAgICAgICAgICAgICA7IG1tMj10bXAwW3JvdzAgcm93MV0KKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBwc2xsZCAgICAgICBtbTEsIChDT05TVF9CSVRTKzIpICAgICA7IG1tMT10bXAxMFtyb3cwIHJvdzFdCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92cSAgICAgICAgbW0wLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzIpXSAgOyBtbTA9W1BEX0RFU0NBTEVfUDJfMl0KKworICAgIG1vdnEgICAgICAgIG1tNiwgbW0xCisgICAgcGFkZGQgICAgICAgbW0xLCBtbTIgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTBbcm93MCByb3cxXT0oQzAgQzEpCisgICAgcHN1YmQgICAgICAgbW02LCBtbTIgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTFbcm93MCByb3cxXT0oRDAgRDEpCisKKyAgICBwYWRkZCAgICAgICBtbTEsIG1tMAorICAgIHBhZGRkICAgICAgIG1tNiwgbW0wCisgICAgcHNyYWQgICAgICAgbW0xLCBERVNDQUxFX1AyXzIKKyAgICBwc3JhZCAgICAgICBtbTYsIERFU0NBTEVfUDJfMgorCisgICAgbW92cSAgICAgICAgbW03LCBtbTEgICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgcHVucGNrbGRxICAgbW0xLCBtbTYgICAgICAgICAgICAgICAgOyBtbTE9KEMwIEQwKQorICAgIHB1bnBja2hkcSAgIG1tNywgbW02ICAgICAgICAgICAgICAgIDsgbW03PShDMSBEMSkKKworICAgIHBhY2tzc2R3ICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgbW0xPShDMCBEMCBDMSBEMSkKKyAgICBwYWNrc3N3YiAgICBtbTEsIG1tMSAgICAgICAgICAgICAgICA7IG1tMT0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEpCisgICAgcGFkZGIgICAgICAgbW0xLCBbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCisKKyAgICBtb3ZkICAgICAgICBlY3gsIG1tMQorICAgIG1vdmQgICAgICAgIGVieCwgbW0xICAgICAgICAgICAgICAgIDsgZWJ4PShDMCBEMCBDMSBEMSkKKyAgICBzaHIgICAgICAgICBlY3gsIDIqQllURV9CSVQgICAgICAgICA7IGVjeD0oQzEgRDEgLS0gLS0pCisKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIFdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBieAorICAgIG1vdiAgICAgICAgIFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBjeAorCisgICAgZW1tcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKKworICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0cmVkLXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2ppZGN0cmVkLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODM4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvamlkY3RyZWQtc3NlMi5hc20KQEAgLTAsMCArMSw1OTQgQEAKKzsKKzsgamlkY3RyZWQuYXNtIC0gcmVkdWNlZC1zaXplIElEQ1QgKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBpbnZlcnNlLURDVCByb3V0aW5lcyB0aGF0IHByb2R1Y2UgcmVkdWNlZC1zaXplCis7IG91dHB1dDogZWl0aGVyIDR4NCBvciAyeDIgcGl4ZWxzIGZyb20gYW4gOHg4IERDVCBibG9jay4KKzsgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdHJlZC5jOworOyBzZWUgdGhlIGppZGN0cmVkLmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgICAgMgorCislZGVmaW5lIERFU0NBTEVfUDFfNCAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTICsgMSkKKyVkZWZpbmUgREVTQ0FMRV9QMl80ICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzICsgMSkKKyVkZWZpbmUgREVTQ0FMRV9QMV8yICAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMgKyAyKQorJWRlZmluZSBERVNDQUxFX1AyXzIgIChDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMgKyAyKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzIxMSBlcXUgIDE3MzAgIDsgRklYKDAuMjExMTY0MjQzKQorRl8wXzUwOSBlcXUgIDQxNzYgIDsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMSBlcXUgIDQ5MjYgIDsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMCBlcXUgIDU5MDYgIDsgRklYKDAuNzIwOTU5ODIyKQorRl8wXzc2NSBlcXUgIDYyNzAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MCBlcXUgIDY5NjcgIDsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OSBlcXUgIDczNzMgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzA2MSBlcXUgIDg2OTcgIDsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MiBlcXUgMTA0MjYgIDsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MSBlcXUgMTE4OTMgIDsgRklYKDEuNDUxNzc0OTgxKQorRl8xXzg0NyBlcXUgMTUxMzcgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MiBlcXUgMTc3OTkgIDsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MiBlcXUgMjA5OTUgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzYyNCBlcXUgMjk2OTIgIDsgRklYKDMuNjI0NTA5Nzg1KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsIG4pICAoKCh4KSArICgxIDw8ICgobikgLSAxKSkpID4+IChuKSkKK0ZfMF8yMTEgZXF1IERFU0NBTEUoIDIyNjczNTg3OSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5IGVxdSBERVNDQUxFKCA1NDczODg4MzQsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMSBlcXUgREVTQ0FMRSggNjQ1Njg5MTU1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAgZXF1IERFU0NBTEUoIDc3NDEyNDcxNCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1IGVxdSBERVNDQUxFKCA4MjE4MDY0MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MCBlcXUgREVTQ0FMRSggOTEzMTQyMzYxLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkgZXF1IERFU0NBTEUoIDk2NjM0MjExMSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxIGVxdSBERVNDQUxFKDExMzk4NzgyMzksIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MiBlcXUgREVTQ0FMRSgxMzY2NjE0MTE5LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEgZXF1IERFU0NBTEUoMTU1ODgzMTUxNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3IGVxdSBERVNDQUxFKDE5ODQwMTYxODgsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MiBlcXUgREVTQ0FMRSgyMzMyOTU2MjMwLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIgZXF1IERFU0NBTEUoMjc1MTkwOTUwNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0IGVxdSBERVNDQUxFKDM4OTE3ODc3NDcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDMuNjI0NTA5Nzg1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2lkY3RfcmVkX3NzZTIpCisKK0VYVE4oamNvbnN0X2lkY3RfcmVkX3NzZTIpOgorCitQV19GMTg0X01GMDc2ICAgdGltZXMgNCAgZHcgIEZfMV84NDcsIC1GXzBfNzY1CitQV19GMjU2X0YwODkgICAgdGltZXMgNCAgZHcgIEZfMl81NjIsICBGXzBfODk5CitQV19GMTA2X01GMjE3ICAgdGltZXMgNCAgZHcgIEZfMV8wNjEsIC1GXzJfMTcyCitQV19NRjA2MF9NRjA1MCAgdGltZXMgNCAgZHcgLUZfMF82MDEsIC1GXzBfNTA5CitQV19GMTQ1X01GMDIxICAgdGltZXMgNCAgZHcgIEZfMV80NTEsIC1GXzBfMjExCitQV19GMzYyX01GMTI3ICAgdGltZXMgNCAgZHcgIEZfM182MjQsIC1GXzFfMjcyCitQV19GMDg1X01GMDcyICAgdGltZXMgNCAgZHcgIEZfMF84NTAsIC1GXzBfNzIwCitQRF9ERVNDQUxFX1AxXzQgdGltZXMgNCAgZGQgIDEgPDwgKERFU0NBTEVfUDFfNCAtIDEpCitQRF9ERVNDQUxFX1AyXzQgdGltZXMgNCAgZGQgIDEgPDwgKERFU0NBTEVfUDJfNCAtIDEpCitQRF9ERVNDQUxFX1AxXzIgdGltZXMgNCAgZGQgIDEgPDwgKERFU0NBTEVfUDFfMiAtIDEpCitQRF9ERVNDQUxFX1AyXzIgdGltZXMgNCAgZGQgIDEgPDwgKERFU0NBTEVfUDJfMiAtIDEpCitQQl9DRU5URVJKU0FNUCAgdGltZXMgMTYgZGIgIENFTlRFUkpTQU1QTEUKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA0eDQgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF80eDRfc3NlMih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgKGIpICsgOCAgICAgICAgICA7IHZvaWQgKmRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAoYikgKyAxMiAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAoYikgKyAxNiAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgIChiKSArIDIwICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAgICBlYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgIGVicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1hNTVdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9pZGN0XzR4NF9zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfNHg0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVheCwgZXNwICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICBzdWIgICAgICAgICBlc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtlc3BdLCBlYXgKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICBsZWEgICAgICAgICBlc3AsIFt3aygwKV0KKyAgICBwdXNocGljICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKzsgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgOyBxdWFudHB0cgorICAgIG1vdiAgICAgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gIDsgaW5wdHIKKworJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUXzRYNF9TU0UyCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbkRDVAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tMQorICAgIHBhY2tzc3diICAgIHhtbTAsIHhtbTAKKyAgICBwYWNrc3N3YiAgICB4bW0wLCB4bW0wCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0wCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHBzbGx3ICAgICAgIHhtbTAsIFBBU1MxX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgcHVucGNraHdkICAgeG1tMywgeG1tMyAgICAgICAgOyB4bW0zPSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKworICAgIHBzaHVmZCAgICAgIHhtbTEsIHhtbTAsIDB4NTAgIDsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMDAgMDAgMDAgMDEgMDEgMDEgMDEpCisgICAgcHNodWZkICAgICAgeG1tMCwgeG1tMCwgMHhGQSAgOyB4bW0wPVtjb2wyIGNvbDNdPSgwMiAwMiAwMiAwMiAwMyAwMyAwMyAwMykKKyAgICBwc2h1ZmQgICAgICB4bW02LCB4bW0zLCAweDUwICA7IHhtbTY9W2NvbDQgY29sNV09KDA0IDA0IDA0IDA0IDA1IDA1IDA1IDA1KQorICAgIHBzaHVmZCAgICAgIHhtbTMsIHhtbTMsIDB4RkEgIDsgeG1tMz1bY29sNiBjb2w3XT0oMDYgMDYgMDYgMDYgMDcgMDcgMDcgMDcpCisKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5fZW5kCisgICAgYWxpZ254ICAgICAgMTYsIDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTAKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW0xCisgICAgcHVucGNraHdkICAgeG1tNSwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW01CisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW0dPVE9GRihlYngsUFdfRjI1Nl9GMDg5KV0gICA7IHhtbTQ9KHRtcDJMKQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldICAgOyB4bW01PSh0bXAySCkKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0gIDsgeG1tMD0odG1wMEwpCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldICA7IHhtbTE9KHRtcDBIKQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tNywgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW03CisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXSAgOyB4bW02PSh0bXAyTCkKKyAgICBwbWFkZHdkICAgICB4bW03LCBbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldICA7IHhtbTc9KHRtcDJIKQorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXSAgIDsgeG1tMj0odG1wMEwpCisgICAgcG1hZGR3ZCAgICAgeG1tMywgW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldICAgOyB4bW0zPSh0bXAwSCkKKworICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj10bXAyTAorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNz10bXAySAorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj10bXAwTAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz10bXAwSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT10bXAwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9dG1wMEgKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTEKKyAgICBweG9yICAgICAgICB4bW0yLCB4bW0yCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgIDsgeG1tMT10bXAwTAorICAgIHB1bnBja2h3ZCAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9dG1wMEgKKyAgICBwc3JhZCAgICAgICB4bW0xLCAoMTYtQ09OU1RfQklUUy0xKSAgOyBwc3JhZCB4bW0xLDE2ICYgcHNsbGQgeG1tMSxDT05TVF9CSVRTKzEKKyAgICBwc3JhZCAgICAgICB4bW0yLCAoMTYtQ09OU1RfQklUUy0xKSAgOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTKzEKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT1pbjI9ejIKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTA9aW42PXozCisgICAgcHVucGNraHdkICAgeG1tMywgeG1tMAorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXSAgOyB4bW01PXRtcDJMCisgICAgcG1hZGR3ZCAgICAgeG1tMywgW0dPVE9GRihlYngsUFdfRjE4NF9NRjA3NildICA7IHhtbTM9dG1wMkgKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwTAorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj10bXAxMEgKKyAgICBwc3ViZCAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTJMCisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXRtcDEySAorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwTAorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMEgKKyAgICBwc3ViZCAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTNMCisgICAgcHN1YmQgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPWRhdGEzSAorCisgICAgbW92ZHFhICAgICAgeG1tNiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV80KV0gIDsgeG1tNj1bUERfREVTQ0FMRV9QMV80XQorCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tNgorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTYKKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AxXzQKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AxXzQKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW02CisgICAgcGFkZGQgICAgICAgeG1tMywgeG1tNgorICAgIHBzcmFkICAgICAgIHhtbTUsIERFU0NBTEVfUDFfNAorICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDFfNAorCisgICAgcGFja3NzZHcgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwYWNrc3NkdyAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PXRtcDBMCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soMSldICAgOyB4bW02PXRtcDBICisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND1kYXRhMUwKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTFICisgICAgcHN1YmQgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPWRhdGEyTAorICAgIHBzdWJkICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMkgKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldICA7IHhtbTc9W1BEX0RFU0NBTEVfUDFfNF0KKworICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW03CisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMV80CisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMV80CisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTcKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AxXzQKKyAgICBwc3JhZCAgICAgICB4bW0zLCBERVNDQUxFX1AxXzQKKworICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTAgICAgICAgIDsgeG1tND1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgcGFja3NzZHcgICAgeG1tMiwgeG1tMyAgICAgICAgOyB4bW0yPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTEgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTEsIHhtbTQgICAgICAgIDsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tNCAgICAgICAgOyB4bW02PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0yICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW01ICAgICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTcsIHhtbTUgICAgICAgIDsgeG1tNz0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0xLCB4bW0yICAgICAgICA7IHhtbTE9W2NvbDAgY29sMV09KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgIHB1bnBja2hkcSAgIHhtbTAsIHhtbTIgICAgICAgIDsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNiAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNiwgeG1tNyAgICAgICAgOyB4bW02PVtjb2w0IGNvbDVdPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW03ICAgICAgICA7IHhtbTM9W2NvbDYgY29sN109KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorLmNvbHVtbl9lbmQ6CisKKyAgICA7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKyAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKworICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIHB4b3IgICAgICAgIHhtbTQsIHhtbTQKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW0xICAgICAgICAgICAgICAgOyB4bW00PXRtcDAKKyAgICBwc3JhZCAgICAgICB4bW00LCAoMTYtQ09OU1RfQklUUy0xKSAgOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTKzEKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIHB1bnBja2h3ZCAgIHhtbTEsIHhtbTAKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXSAgICA7IHhtbTE9KHRtcDIpCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXSAgOyB4bW02PSh0bXAyKQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXSAgIDsgeG1tNT0odG1wMCkKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbR09UT0ZGKGVieCxQV19GMTQ1X01GMDIxKV0gICA7IHhtbTI9KHRtcDApCisKKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9dG1wMgorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj10bXAwCisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tMworICAgIHBtYWRkd2QgICAgIHhtbTAsIFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXSAgOyB4bW0wPXRtcDIKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICBwc3ViZCAgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9dG1wMTIKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXSAgOyB4bW0xPVtQRF9ERVNDQUxFX1AyXzRdCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgeG1tND1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICBwc3ViZCAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQorICAgIHBzdWJkICAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMQorICAgIHBzcmFkICAgICAgIHhtbTQsIERFU0NBTEVfUDJfNAorICAgIHBzcmFkICAgICAgIHhtbTcsIERFU0NBTEVfUDJfNAorICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTEKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW0xCisgICAgcHNyYWQgICAgICAgeG1tNSwgREVTQ0FMRV9QMl80CisgICAgcHNyYWQgICAgICAgeG1tMywgREVTQ0FMRV9QMl80CisKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTQ9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNz0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgIHB1bnBja2hkcSAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisKKyAgICBwYWNrc3N3YiAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIC4uKQorICAgIHBhZGRiICAgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0KKworICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTQsIDB4MzkgICAgICAgIDsgeG1tMj0oMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgLi4pCisgICAgcHNodWZkICAgICAgeG1tMSwgeG1tNCwgMHg0RSAgICAgICAgOyB4bW0xPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMyAwMCAuLikKKyAgICBwc2h1ZmQgICAgICB4bW0zLCB4bW00LCAweDkzICAgICAgICA7IHhtbTM9KDMwIDMxIDMyIDMzIDAwIDAxIDAyIDAzIDEwIC4uKQorCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZkICAgICAgICBYTU1fRFdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgIG1vdmQgICAgICAgIFhNTV9EV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3BwaWMgICAgICBlYngKKyAgICBtb3YgICAgICAgICBlc3AsIGVicCAgICAgICAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgIHBvcCAgICAgICAgIGVzcCAgICAgICAgICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF8yeDJfc3NlMih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgKGIpICsgOCAgICAgICAgICA7IHZvaWQgKmRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAoYikgKyAxMiAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAoYikgKyAxNiAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgIChiKSArIDIwICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfMngyX3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF8yeDJfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBnZXRfR09UICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworCisgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYnApXSAgICA7IHF1YW50cHRyCisgICAgbW92ICAgICAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXSAgOyBpbnB0cgorCisgICAgOyB8IGlucHV0OiAgICAgICAgICAgICAgICAgIHwgcmVzdWx0OiAgICAgICAgfAorICAgIDsgfCAwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNyB8ICAgICAgICAgICAgICAgIHwKKyAgICA7IHwgMTAgMTEgKiogMTMgKiogMTUgKiogMTcgfCAgICAgICAgICAgICAgICB8CisgICAgOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorICAgIDsgfCAzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNyB8IEEwIEExIEEzIEE1IEE3IHwKKyAgICA7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCBCMCBCMSBCMyBCNSBCNyB8CisgICAgOyB8IDUwIDUxICoqIDUzICoqIDU1ICoqIDU3IHwgICAgICAgICAgICAgICAgfAorICAgIDsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKyAgICA7IHwgNzAgNzEgKiogNzMgKiogNzUgKiogNzcgfCAgICAgICAgICAgICAgICB8CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIDsgeG1tMD0oMTAgMTEgKiogMTMgKiogMTUgKiogMTcpLCB4bW0xPSgzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNykKKyAgICA7IHhtbTI9KDUwIDUxICoqIDUzICoqIDU1ICoqIDU3KSwgeG1tMz0oNzAgNzEgKiogNzMgKiogNzUgKiogNzcpCisKKyAgICBwY21wZXFkICAgICB4bW03LCB4bW03CisgICAgcHNsbGQgICAgICAgeG1tNywgV09SRF9CSVQgICAgICAgICAgOyB4bW03PXsweDAwMDAgMHhGRkZGIDB4MDAwMCAweEZGRkYgLi59CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9KDEwIDExICoqIDEzICoqIDE1ICoqIDE3KQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNT0oNTAgNTEgKiogNTMgKiogNTUgKiogNTcpCisgICAgcHVucGNrbHdkICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PSgxMCAzMCAxMSAzMSAqKiAqKiAxMyAzMykKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDUwIDcwIDUxIDcxICoqICoqIDUzIDczKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorCisgICAgcHNybGQgICAgICAgeG1tMCwgV09SRF9CSVQgICAgICAgICAgOyB4bW0wPSgxMSAtLSAxMyAtLSAxNSAtLSAxNyAtLSkKKyAgICBwYW5kICAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KC0tIDMxIC0tIDMzIC0tIDM1IC0tIDM3KQorICAgIHBzcmxkICAgICAgIHhtbTIsIFdPUkRfQklUICAgICAgICAgIDsgeG1tMj0oNTEgLS0gNTMgLS0gNTUgLS0gNTcgLS0pCisgICAgcGFuZCAgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSgtLSA3MSAtLSA3MyAtLSA3NSAtLSA3NykKKyAgICBwb3IgICAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDExIDMxIDEzIDMzIDE1IDM1IDE3IDM3KQorICAgIHBvciAgICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj0oNTEgNzEgNTMgNzMgNTUgNzUgNTcgNzcpCisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMFtjb2wwIGNvbDEgKioqKiBjb2wzXQorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD10bXAwW2NvbDEgY29sMyBjb2w1IGNvbDddCisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICA7IHhtbTY9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKyAgICBwc2xsZCAgICAgICB4bW02LCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTY9KC0tIDAwIC0tICoqIC0tICoqIC0tICoqKQorICAgIHBhbmQgICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT0oLS0gMDEgLS0gMDMgLS0gMDUgLS0gMDcpCisgICAgcHNyYWQgICAgICAgeG1tNiwgKFdPUkRfQklULUNPTlNUX0JJVFMtMikgIDsgeG1tNj10bXAxMFtjb2wwICoqKiogKioqKiAqKioqXQorICAgIHBzcmFkICAgICAgIHhtbTEsIChXT1JEX0JJVC1DT05TVF9CSVRTLTIpICA7IHhtbTE9dG1wMTBbY29sMSBjb2wzIGNvbDUgY29sN10KKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTQgICAgICA7IHhtbTY9ZGF0YTBbY29sMCAqKioqICoqKiogKioqKl09KEEwICoqICoqICoqKQorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTAgICAgICA7IHhtbTE9ZGF0YTBbY29sMSBjb2wzIGNvbDUgY29sN109KEExIEEzIEE1IEE3KQorICAgIHBzdWJkICAgICAgIHhtbTMsIHhtbTQgICAgICA7IHhtbTM9ZGF0YTFbY29sMCAqKioqICoqKiogKioqKl09KEIwICoqICoqICoqKQorICAgIHBzdWJkICAgICAgIHhtbTUsIHhtbTAgICAgICA7IHhtbTU9ZGF0YTFbY29sMSBjb2wzIGNvbDUgY29sN109KEIxIEIzIEI1IEI3KQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV8yKV0gIDsgeG1tMj1bUERfREVTQ0FMRV9QMV8yXQorCisgICAgcHVucGNrbGRxICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PShBMCBCMCAqKiAqKikKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTEKKyAgICBwdW5wY2tscWRxICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9KEExIEEzIEIxIEIzKQorICAgIHB1bnBja2hxZHEgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNz0oQTUgQTcgQjUgQjcpCisKKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW0yCisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMV8yCisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMgorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDFfMgorICAgIHBzcmFkICAgICAgIHhtbTcsIERFU0NBTEVfUDFfMgorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisgICAgbW92ICAgICAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYnApXQorCisgICAgOyB8IGlucHV0OnwgcmVzdWx0OnwKKyAgICA7IHwgQTAgQjAgfCAgICAgICAgfAorICAgIDsgfCBBMSBCMSB8IEMwIEMxICB8CisgICAgOyB8IEEzIEIzIHwgRDAgRDEgIHwKKyAgICA7IHwgQTUgQjUgfCAgICAgICAgfAorICAgIDsgfCBBNyBCNyB8ICAgICAgICB8CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBwYWNrc3NkdyAgICB4bW0xLCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9KEExIEEzIEIxIEIzIEExIEEzIEIxIEIzKQorICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz0oQTUgQTcgQjUgQjcgQTUgQTcgQjUgQjcpCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9dG1wMFtyb3cwIHJvdzEgcm93MCByb3cxXQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIHBzbGxkICAgICAgIHhtbTYsIChDT05TVF9CSVRTKzIpICAgIDsgeG1tNj10bXAxMFtyb3cwIHJvdzEgKioqKiAqKioqXQorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW0xICAgICA7IHhtbTY9ZGF0YTBbcm93MCByb3cxICoqKiogKioqKl09KEMwIEMxICoqICoqKQorICAgIHBzdWJkICAgICAgIHhtbTQsIHhtbTEgICAgIDsgeG1tND1kYXRhMVtyb3cwIHJvdzEgKioqKiAqKioqXT0oRDAgRDEgKiogKiopCisKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW00ICAgICA7IHhtbTY9KEMwIEQwIEMxIEQxKQorCisgICAgcGFkZGQgICAgICAgeG1tNiwgW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMl8yKV0KKyAgICBwc3JhZCAgICAgICB4bW02LCBERVNDQUxFX1AyXzIKKworICAgIHBhY2tzc2R3ICAgIHhtbTYsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNj0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEpCisgICAgcGFja3Nzd2IgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSAuLikKKyAgICBwYWRkYiAgICAgICB4bW02LCBbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCisKKyAgICBwZXh0cncgICAgICBlYngsIHhtbTYsIDB4MDAgICAgICAgICA7IGVieD0oQzAgRDAgLS0gLS0pCisgICAgcGV4dHJ3ICAgICAgZWN4LCB4bW02LCAweDAxICAgICAgICAgOyBlY3g9KEMxIEQxIC0tIC0tKQorCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICBXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKKyAgICBtb3YgICAgICAgICBXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgY3gKKworICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudC0zZG4uYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudC0zZG4uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjdmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvanF1YW50LTNkbi5hc20KQEAgLTAsMCArMSwyMzIgQEAKKzsKKzsganF1YW50LmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoM0ROb3chICYgTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX2Zsb2F0XzNkbm93KEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworOworCislZGVmaW5lIHNhbXBsZV9kYXRhICBlYnAgKyA4ICAgICAgICAgICAgOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbCAgICBlYnAgKyAxMiAgICAgICAgICAgOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UgICAgZWJwICsgMTYgICAgICAgICAgIDsgRkFTVF9GTE9BVCAqd29ya3NwYWNlCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdykKKworRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdyk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBwY21wZXF3ICAgICBtbTcsIG1tNworICAgIHBzbGx3ICAgICAgIG1tNywgNworICAgIHBhY2tzc3diICAgIG1tNywgbW03ICAgICAgICAgICAgICAgIDsgbW03ID0gUEJfQ0VOVEVSSlNBTVBMRSAoMHg4MDgwODAuLikKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorICAgIG1vdiAgICAgICAgIGVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXSAgICAgICA7IChEQ1RFTEVNICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbnZsb29wOgorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisKKyAgICBtb3ZxICAgICAgICBtbTAsIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKworICAgIHBzdWJiICAgICAgIG1tMCwgbW03ICAgICAgICAgICAgICAgIDsgbW0wPSgwMTIzNDU2NykKKyAgICBwc3ViYiAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tMT0oODlBQkNERUYpCisKKyAgICBwdW5wY2tsYncgICBtbTIsIG1tMCAgICAgICAgICAgICAgICA7IG1tMj0oKjAqMSoyKjMpCisgICAgcHVucGNraGJ3ICAgbW0wLCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9KCo0KjUqNio3KQorICAgIHB1bnBja2xidyAgIG1tMywgbW0xICAgICAgICAgICAgICAgIDsgbW0zPSgqOCo5KkEqQikKKyAgICBwdW5wY2toYncgICBtbTEsIG1tMSAgICAgICAgICAgICAgICA7IG1tMT0oKkMqRCpFKkYpCisKKyAgICBwdW5wY2tsd2QgICBtbTQsIG1tMiAgICAgICAgICAgICAgICA7IG1tND0oKioqMCoqKjEpCisgICAgcHVucGNraHdkICAgbW0yLCBtbTIgICAgICAgICAgICAgICAgOyBtbTI9KCoqKjIqKiozKQorICAgIHB1bnBja2x3ZCAgIG1tNSwgbW0wICAgICAgICAgICAgICAgIDsgbW01PSgqKio0KioqNSkKKyAgICBwdW5wY2tod2QgICBtbTAsIG1tMCAgICAgICAgICAgICAgICA7IG1tMD0oKioqNioqKjcpCisKKyAgICBwc3JhZCAgICAgICBtbTQsIChEV09SRF9CSVQtQllURV9CSVQpICA7IG1tND0oMDEpCisgICAgcHNyYWQgICAgICAgbW0yLCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyBtbTI9KDIzKQorICAgIHBpMmZkICAgICAgIG1tNCwgbW00CisgICAgcGkyZmQgICAgICAgbW0yLCBtbTIKKyAgICBwc3JhZCAgICAgICBtbTUsIChEV09SRF9CSVQtQllURV9CSVQpICA7IG1tNT0oNDUpCisgICAgcHNyYWQgICAgICAgbW0wLCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyBtbTA9KDY3KQorICAgIHBpMmZkICAgICAgIG1tNSwgbW01CisgICAgcGkyZmQgICAgICAgbW0wLCBtbTAKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNQorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAorCisgICAgcHVucGNrbHdkICAgbW02LCBtbTMgICAgICAgICAgICAgICAgOyBtbTY9KCoqKjgqKio5KQorICAgIHB1bnBja2h3ZCAgIG1tMywgbW0zICAgICAgICAgICAgICAgIDsgbW0zPSgqKipBKioqQikKKyAgICBwdW5wY2tsd2QgICBtbTQsIG1tMSAgICAgICAgICAgICAgICA7IG1tND0oKioqQyoqKkQpCisgICAgcHVucGNraHdkICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KCoqKkUqKipGKQorCisgICAgcHNyYWQgICAgICAgbW02LCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyBtbTY9KDg5KQorICAgIHBzcmFkICAgICAgIG1tMywgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgbW0zPShBQikKKyAgICBwaTJmZCAgICAgICBtbTYsIG1tNgorICAgIHBpMmZkICAgICAgIG1tMywgbW0zCisgICAgcHNyYWQgICAgICAgbW00LCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyBtbTQ9KENEKQorICAgIHBzcmFkICAgICAgIG1tMSwgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgbW0xPShFRikKKyAgICBwaTJmZCAgICAgICBtbTQsIG1tNAorICAgIHBpMmZkICAgICAgIG1tMSwgbW0xCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICBkZWMgICAgICAgICBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb252bG9vcAorCisgICAgZmVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9xdWFudGl6ZV9mbG9hdF8zZG5vdyhKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBjb2VmX2Jsb2NrICBlYnAgKyA4ICAgICAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycyAgICBlYnAgKyAxMiAgICAgICAgICAgIDsgRkFTVF9GTE9BVCAqZGl2aXNvcnMKKyVkZWZpbmUgd29ya3NwYWNlICAgZWJwICsgMTYgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKndvcmtzcGFjZQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfcXVhbnRpemVfZmxvYXRfM2Rub3cpCisKK0VYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfM2Rub3cpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlYXgsIDB4NEI0MDAwMDAgICAgICAgICA7IChmbG9hdCkweDAwQzAwMDAwIChybmRpbnRfbWFnaWMpCisgICAgbW92ZCAgICAgICAgbW03LCBlYXgKKyAgICBwdW5wY2tsZHEgICBtbTcsIG1tNyAgICAgICAgICAgICAgICA7IG1tNz17MTI1ODI5MTIuMEYgMTI1ODI5MTIuMEZ9CisKKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorICAgIG1vdiAgICAgICAgIGVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisgICAgbW92ICAgICAgICAgZWF4LCBEQ1RTSVpFMi8xNgorICAgIGFsaWdueCAgICAgIDE2LCA3CisucXVhbnRsb29wOgorICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIHBmbXVsICAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIHBmbXVsICAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIHBmbXVsICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIHBmbXVsICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgcGZhZGQgICAgICAgbW0wLCBtbTcgICAgICAgICAgICAgICAgOyBtbTA9KDAwICoqIDAxICoqKQorICAgIHBmYWRkICAgICAgIG1tMSwgbW03ICAgICAgICAgICAgICAgIDsgbW0xPSgwMiAqKiAwMyAqKikKKyAgICBwZmFkZCAgICAgICBtbTIsIG1tNyAgICAgICAgICAgICAgICA7IG1tMD0oMDQgKiogMDUgKiopCisgICAgcGZhZGQgICAgICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KDA2ICoqIDA3ICoqKQorCisgICAgbW92cSAgICAgICAgbW00LCBtbTAKKyAgICBwdW5wY2tsd2QgICBtbTAsIG1tMSAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDIgKiogKiopCisgICAgcHVucGNraHdkICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyBtbTQ9KDAxIDAzICoqICoqKQorICAgIG1vdnEgICAgICAgIG1tNSwgbW0yCisgICAgcHVucGNrbHdkICAgbW0yLCBtbTMgICAgICAgICAgICAgICAgOyBtbTI9KDA0IDA2ICoqICoqKQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0zICAgICAgICAgICAgICAgIDsgbW01PSgwNSAwNyAqKiAqKikKKworICAgIHB1bnBja2x3ZCAgIG1tMCwgbW00ICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSAwMiAwMykKKyAgICBwdW5wY2tsd2QgICBtbTIsIG1tNSAgICAgICAgICAgICAgICA7IG1tMj0oMDQgMDUgMDYgMDcpCisKKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygxLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBwZm11bCAgICAgICBtbTYsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBwZm11bCAgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygxLDIsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZxICAgICAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDMsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBwZm11bCAgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygxLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBwZm11bCAgICAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIHBmYWRkICAgICAgIG1tNiwgbW03ICAgICAgICAgICAgICAgIDsgbW0wPSgxMCAqKiAxMSAqKikKKyAgICBwZmFkZCAgICAgICBtbTEsIG1tNyAgICAgICAgICAgICAgICA7IG1tND0oMTIgKiogMTMgKiopCisgICAgcGZhZGQgICAgICAgbW0zLCBtbTcgICAgICAgICAgICAgICAgOyBtbTA9KDE0ICoqIDE1ICoqKQorICAgIHBmYWRkICAgICAgIG1tNCwgbW03ICAgICAgICAgICAgICAgIDsgbW00PSgxNiAqKiAxNyAqKikKKworICAgIG1vdnEgICAgICAgIG1tNSwgbW02CisgICAgcHVucGNrbHdkICAgbW02LCBtbTEgICAgICAgICAgICAgICAgOyBtbTY9KDEwIDEyICoqICoqKQorICAgIHB1bnBja2h3ZCAgIG1tNSwgbW0xICAgICAgICAgICAgICAgIDsgbW01PSgxMSAxMyAqKiAqKikKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tMworICAgIHB1bnBja2x3ZCAgIG1tMywgbW00ICAgICAgICAgICAgICAgIDsgbW0zPSgxNCAxNiAqKiAqKikKKyAgICBwdW5wY2tod2QgICBtbTEsIG1tNCAgICAgICAgICAgICAgICA7IG1tMT0oMTUgMTcgKiogKiopCisKKyAgICBwdW5wY2tsd2QgICBtbTYsIG1tNSAgICAgICAgICAgICAgICA7IG1tNj0oMTAgMTEgMTIgMTMpCisgICAgcHVucGNrbHdkICAgbW0zLCBtbTEgICAgICAgICAgICAgICAgOyBtbTM9KDE0IDE1IDE2IDE3KQorCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDE2KlNJWkVPRl9KQ09FRgorICAgIGRlYyAgICAgICAgIGVheAorICAgIGpueiAgICAgICAgIG5lYXIgLnF1YW50bG9vcAorCisgICAgZmVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudC1tbXguYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudC1tbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OTMyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvanF1YW50LW1teC5hc20KQEAgLTAsMCArMSwyNzggQEAKKzsKKzsganF1YW50LmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX21teChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgc2FtcGxlX2RhdGEgIGVicCArIDggICAgICAgICAgICA7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sICAgIGVicCArIDEyICAgICAgICAgICA7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZSAgICBlYnAgKyAxNiAgICAgICAgICAgOyBEQ1RFTEVNICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2NvbnZzYW1wX21teCkKKworRVhUTihqc2ltZF9jb252c2FtcF9tbXgpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgcHhvciAgICAgICAgbW02LCBtbTYgICAgICAgICAgICAgICAgOyBtbTY9KGFsbCAwJ3MpCisgICAgcGNtcGVxdyAgICAgbW03LCBtbTcKKyAgICBwc2xsdyAgICAgICBtbTcsIDcgICAgICAgICAgICAgICAgICA7IG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorCisgICAgbW92ICAgICAgICAgZXNpLCBKU0FNUEFSUkFZIFtzYW1wbGVfZGF0YV0gIDsgKEpTQU1QUk9XICopCisgICAgbW92ICAgICAgICAgZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisgICAgbW92ICAgICAgICAgZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdICAgICAgIDsgKERDVEVMRU0gKikKKyAgICBtb3YgICAgICAgICBlY3gsIERDVFNJWkUvNAorICAgIGFsaWdueCAgICAgIDE2LCA3CisuY29udmxvb3A6CisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKworICAgIG1vdnEgICAgICAgIG1tMCwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSAgIDsgbW0wPSgwMTIzNDU2NykKKyAgICBtb3ZxICAgICAgICBtbTEsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0gICA7IG1tMT0oODlBQkNERUYpCisKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzMqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorCisgICAgbW92cSAgICAgICAgbW0yLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdICAgOyBtbTI9KEdISUpLTE1OKQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSAgIDsgbW0zPShPUFFSU1RVVikKKworICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgcHVucGNrbGJ3ICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9KDAxMjMpCisgICAgcHVucGNraGJ3ICAgbW00LCBtbTYgICAgICAgICAgICAgICAgOyBtbTQ9KDQ1NjcpCisgICAgbW92cSAgICAgICAgbW01LCBtbTEKKyAgICBwdW5wY2tsYncgICBtbTEsIG1tNiAgICAgICAgICAgICAgICA7IG1tMT0oODlBQikKKyAgICBwdW5wY2toYncgICBtbTUsIG1tNiAgICAgICAgICAgICAgICA7IG1tNT0oQ0RFRikKKworICAgIHBhZGR3ICAgICAgIG1tMCwgbW03CisgICAgcGFkZHcgICAgICAgbW00LCBtbTcKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNworICAgIHBhZGR3ICAgICAgIG1tNSwgbW03CisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTEKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTUKKworICAgIG1vdnEgICAgICAgIG1tMCwgbW0yCisgICAgcHVucGNrbGJ3ICAgbW0yLCBtbTYgICAgICAgICAgICAgICAgOyBtbTI9KEdISUopCisgICAgcHVucGNraGJ3ICAgbW0wLCBtbTYgICAgICAgICAgICAgICAgOyBtbTA9KEtMTU4pCisgICAgbW92cSAgICAgICAgbW00LCBtbTMKKyAgICBwdW5wY2tsYncgICBtbTMsIG1tNiAgICAgICAgICAgICAgICA7IG1tMz0oT1BRUikKKyAgICBwdW5wY2toYncgICBtbTQsIG1tNiAgICAgICAgICAgICAgICA7IG1tND0oU1RVVikKKworICAgIHBhZGR3ICAgICAgIG1tMiwgbW03CisgICAgcGFkZHcgICAgICAgbW0wLCBtbTcKKyAgICBwYWRkdyAgICAgICBtbTMsIG1tNworICAgIHBhZGR3ICAgICAgIG1tNCwgbW03CisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTIKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTMKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKyAgICBkZWMgICAgICAgICBlY3gKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29udmxvb3AKKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gYW4gYWxnb3JpdGhtIGRlc2NyaWJlZCBpbgorOyAgICJIb3cgdG8gb3B0aW1pemUgZm9yIHRoZSBQZW50aXVtIGZhbWlseSBvZiBtaWNyb3Byb2Nlc3NvcnMiCis7ICAgKGh0dHA6Ly93d3cuYWduZXIub3JnL2Fzc2VtLykuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9xdWFudGl6ZV9tbXgoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsCis7ICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpOworOworCislZGVmaW5lIFJFQ0lQUk9DQUwobSwgbiwgYikgXAorICBNTUJMT0NLKERDVFNJWkUgKiAwICsgKG0pLCAobiksIChiKSwgU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIENPUlJFQ1RJT04obSwgbiwgYikgXAorICBNTUJMT0NLKERDVFNJWkUgKiAxICsgKG0pLCAobiksIChiKSwgU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIFNDQUxFKG0sIG4sIGIpIFwKKyAgTU1CTE9DSyhEQ1RTSVpFICogMiArIChtKSwgKG4pLCAoYiksIFNJWkVPRl9EQ1RFTEVNKQorJWRlZmluZSBTSElGVChtLCBuLCBiKSBcCisgIE1NQkxPQ0soRENUU0laRSAqIDMgKyAobSksIChuKSwgKGIpLCBTSVpFT0ZfRENURUxFTSkKKworJWRlZmluZSBjb2VmX2Jsb2NrICBlYnAgKyA4ICAgICAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycyAgICBlYnAgKyAxMiAgICAgICAgICAgIDsgRENURUxFTSAqZGl2aXNvcnMKKyVkZWZpbmUgd29ya3NwYWNlICAgZWJwICsgMTYgICAgICAgICAgICA7IERDVEVMRU0gKndvcmtzcGFjZQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfcXVhbnRpemVfbW14KQorCitFWFROKGpzaW1kX3F1YW50aXplX21teCk6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKzsgICBwdXNoICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIG1vdiAgICAgICAgIGVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorICAgIG1vdiAgICAgICAgIGVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisgICAgbW92ICAgICAgICAgZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KKyAgICBtb3YgICAgICAgICBhaCwgMgorICAgIGFsaWdueCAgICAgIDE2LCA3CisucXVhbnRsb29wMToKKyAgICBtb3YgICAgICAgICBhbCwgRENUU0laRTIvOC8yCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5xdWFudGxvb3AyOgorICAgIG1vdnEgICAgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdnEgICAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0RDVEVMRU0pXQorCisgICAgbW92cSAgICAgICAgbW0wLCBtbTIKKyAgICBtb3ZxICAgICAgICBtbTEsIG1tMworCisgICAgcHNyYXcgICAgICAgbW0yLCAoV09SRF9CSVQtMSkgICAgICAgOyAtMSBpZiB2YWx1ZSA8IDAsIDAgb3RoZXJ3aXNlCisgICAgcHNyYXcgICAgICAgbW0zLCAoV09SRF9CSVQtMSkKKworICAgIHB4b3IgICAgICAgIG1tMCwgbW0yICAgICAgICAgICAgICAgIDsgdmFsID0gLXZhbAorICAgIHB4b3IgICAgICAgIG1tMSwgbW0zCisgICAgcHN1YncgICAgICAgbW0wLCBtbTIKKyAgICBwc3VidyAgICAgICBtbTEsIG1tMworCisgICAgOworICAgIDsgTU1YIGlzIGFuIGFubm95aW5nbHkgY3JhcHB5IGluc3RydWN0aW9uIHNldC4gSXQgaGFzIHR3bworICAgIDsgbWlzZmVhdHVyZXMgdGhhdCBhcmUgY2F1c2luZyBwcm9ibGVtcyBoZXJlOgorICAgIDsKKyAgICA7IC0gQWxsIG11bHRpcGxpY2F0aW9ucyBhcmUgc2lnbmVkLgorICAgIDsKKyAgICA7IC0gVGhlIHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc2hpZnRzIGlzIG5vdCB0cmVhdGVkIGFzIHBhY2tlZC4KKyAgICA7CisgICAgOworICAgIDsgV2Ugd29yayBhcm91bmQgdGhlIGZpcnN0IHByb2JsZW0gYnkgaW1wbGVtZW50aW5nIHRoaXMgYWxnb3JpdGhtOgorICAgIDsKKyAgICA7IHVuc2lnbmVkIGxvbmcgdW5zaWduZWRfbXVsdGlwbHkodW5zaWduZWQgc2hvcnQgeCwgdW5zaWduZWQgc2hvcnQgeSkKKyAgICA7IHsKKyAgICA7ICAgZW51bSB7IFNIT1JUX0JJVCA9IDE2IH07CisgICAgOyAgIHNpZ25lZCBzaG9ydCBzeCA9IChzaWduZWQgc2hvcnQpeDsKKyAgICA7ICAgc2lnbmVkIHNob3J0IHN5ID0gKHNpZ25lZCBzaG9ydCl5OworICAgIDsgICBzaWduZWQgbG9uZyBzejsKKyAgICA7CisgICAgOyAgIHN6ID0gKGxvbmcpc3ggKiAobG9uZylzeTsgICAgLyogc2lnbmVkIG11bHRpcGx5ICovCisgICAgOworICAgIDsgICBpZiAoc3ggPCAwKSBzeiArPSAobG9uZylzeSA8PCBTSE9SVF9CSVQ7CisgICAgOyAgIGlmIChzeSA8IDApIHN6ICs9IChsb25nKXN4IDw8IFNIT1JUX0JJVDsKKyAgICA7CisgICAgOyAgIHJldHVybiAodW5zaWduZWQgbG9uZylzejsKKyAgICA7IH0KKyAgICA7CisgICAgOyAobm90ZSB0aGF0IGEgbmVnYXRpdmUgc3ggYWRkcyBfc3lfIGFuZCB2aWNlIHZlcnNhKQorICAgIDsKKyAgICA7IEZvciB0aGUgc2Vjb25kIHByb2JsZW0sIHdlIHJlcGxhY2UgdGhlIHNoaWZ0IGJ5IGEgbXVsdGlwbGljYXRpb24uCisgICAgOyBVbmZvcnR1bmF0ZWx5IHRoYXQgbWVhbnMgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHNpZ25lZCBpc3N1ZSBhZ2Fpbi4KKyAgICA7CisKKyAgICBwYWRkdyAgICAgICBtbTAsIE1NV09SRCBbQ09SUkVDVElPTigwLDAsZWR4KV0gIDsgY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yCisgICAgcGFkZHcgICAgICAgbW0xLCBNTVdPUkQgW0NPUlJFQ1RJT04oMCwxLGVkeCldCisKKyAgICBtb3ZxICAgICAgICBtbTQsIG1tMCAgICAgICAgICAgICAgICA7IHN0b3JlIGN1cnJlbnQgdmFsdWUgZm9yIGxhdGVyCisgICAgbW92cSAgICAgICAgbW01LCBtbTEKKyAgICBwbXVsaHcgICAgICBtbTAsIE1NV09SRCBbUkVDSVBST0NBTCgwLDAsZWR4KV0gIDsgcmVjaXByb2NhbAorICAgIHBtdWxodyAgICAgIG1tMSwgTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMSxlZHgpXQorICAgIHBhZGR3ICAgICAgIG1tMCwgbW00ICA7IHJlY2lwcm9jYWwgaXMgYWx3YXlzIG5lZ2F0aXZlIChNU0I9MSksCisgICAgcGFkZHcgICAgICAgbW0xLCBtbTUgIDsgc28gd2UgYWx3YXlzIG5lZWQgdG8gYWRkIHRoZSBpbml0aWFsIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgIDsgKGlucHV0IHZhbHVlIGlzIG5ldmVyIG5lZ2F0aXZlIGFzIHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgIDsgaW52ZXJ0ZWQgaXQgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgcm91dGluZSkKKworICAgIDsgaGVyZSBpdCBnZXRzIGEgYml0IHRyaWNreSBhcyBib3RoIHNjYWxlCisgICAgOyBhbmQgbW0wL21tMSBjYW4gYmUgbmVnYXRpdmUKKyAgICBtb3ZxICAgICAgICBtbTYsIE1NV09SRCBbU0NBTEUoMCwwLGVkeCldICA7IHNjYWxlCisgICAgbW92cSAgICAgICAgbW03LCBNTVdPUkQgW1NDQUxFKDAsMSxlZHgpXQorICAgIG1vdnEgICAgICAgIG1tNCwgbW0wCisgICAgbW92cSAgICAgICAgbW01LCBtbTEKKyAgICBwbXVsaHcgICAgICBtbTAsIG1tNgorICAgIHBtdWxodyAgICAgIG1tMSwgbW03CisKKyAgICBwc3JhdyAgICAgICBtbTYsIChXT1JEX0JJVC0xKSAgICAgICA7IGRldGVybWluZSBpZiBzY2FsZSBpcyBuZWdhdGl2ZQorICAgIHBzcmF3ICAgICAgIG1tNywgKFdPUkRfQklULTEpCisKKyAgICBwYW5kICAgICAgICBtbTYsIG1tNCAgICAgICAgICAgICAgICA7IGFuZCBhZGQgaW5wdXQgaWYgaXQgaXMKKyAgICBwYW5kICAgICAgICBtbTcsIG1tNQorICAgIHBhZGR3ICAgICAgIG1tMCwgbW02CisgICAgcGFkZHcgICAgICAgbW0xLCBtbTcKKworICAgIHBzcmF3ICAgICAgIG1tNCwgKFdPUkRfQklULTEpICAgICAgIDsgdGhlbiBjaGVjayBpZiBuZWdhdGl2ZSBpbnB1dAorICAgIHBzcmF3ICAgICAgIG1tNSwgKFdPUkRfQklULTEpCisKKyAgICBwYW5kICAgICAgICBtbTQsIE1NV09SRCBbU0NBTEUoMCwwLGVkeCldICA7IGFuZCBhZGQgc2NhbGUgaWYgaXQgaXMKKyAgICBwYW5kICAgICAgICBtbTUsIE1NV09SRCBbU0NBTEUoMCwxLGVkeCldCisgICAgcGFkZHcgICAgICAgbW0wLCBtbTQKKyAgICBwYWRkdyAgICAgICBtbTEsIG1tNQorCisgICAgcHhvciAgICAgICAgbW0wLCBtbTIgICAgICAgICAgICAgICAgOyB2YWwgPSAtdmFsCisgICAgcHhvciAgICAgICAgbW0xLCBtbTMKKyAgICBwc3VidyAgICAgICBtbTAsIG1tMgorICAgIHBzdWJ3ICAgICAgIG1tMSwgbW0zCisKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTEKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCisgICAgYWRkICAgICAgICAgZWR4LCBieXRlIDgqU0laRU9GX0RDVEVMRU0KKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgOCpTSVpFT0ZfSkNPRUYKKyAgICBkZWMgICAgICAgICBhbAorICAgIGpueiAgICAgICAgIG5lYXIgLnF1YW50bG9vcDIKKyAgICBkZWMgICAgICAgICBhaAorICAgIGpueiAgICAgICAgIG5lYXIgLnF1YW50bG9vcDEgICAgICAgIDsgdG8gYXZvaWQgYnJhbmNoIG1pc3ByZWRpY3Rpb24KKworICAgIGVtbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudC1zc2UuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudC1zc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjQ0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvanF1YW50LXNzZS5hc20KQEAgLTAsMCArMSwyMTAgQEAKKzsKKzsganF1YW50LmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoU1NFICYgTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZShKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgc2FtcGxlX2RhdGEgIGVicCArIDggICAgICAgICAgICA7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sICAgIGVicCArIDEyICAgICAgICAgICA7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZSAgICBlYnAgKyAxNiAgICAgICAgICAgOyBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZSkKKworRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHB1c2ggICAgICAgIGVzaQorICAgIHB1c2ggICAgICAgIGVkaQorCisgICAgcGNtcGVxdyAgICAgbW03LCBtbTcKKyAgICBwc2xsdyAgICAgICBtbTcsIDcKKyAgICBwYWNrc3N3YiAgICBtbTcsIG1tNyAgICAgICAgICAgICAgICA7IG1tNyA9IFBCX0NFTlRFUkpTQU1QTEUgKDB4ODA4MDgwLi4pCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXSAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW3dvcmtzcGFjZV0gICAgICAgOyAoRENURUxFTSAqKQorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS8yCisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb252bG9vcDoKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorCisgICAgbW92cSAgICAgICAgbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisgICAgbW92cSAgICAgICAgbW0xLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisKKyAgICBwc3ViYiAgICAgICBtbTAsIG1tNyAgICAgICAgICAgICAgICA7IG1tMD0oMDEyMzQ1NjcpCisgICAgcHN1YmIgICAgICAgbW0xLCBtbTcgICAgICAgICAgICAgICAgOyBtbTE9KDg5QUJDREVGKQorCisgICAgcHVucGNrbGJ3ICAgbW0yLCBtbTAgICAgICAgICAgICAgICAgOyBtbTI9KCowKjEqMiozKQorICAgIHB1bnBja2hidyAgIG1tMCwgbW0wICAgICAgICAgICAgICAgIDsgbW0wPSgqNCo1KjYqNykKKyAgICBwdW5wY2tsYncgICBtbTMsIG1tMSAgICAgICAgICAgICAgICA7IG1tMz0oKjgqOSpBKkIpCisgICAgcHVucGNraGJ3ICAgbW0xLCBtbTEgICAgICAgICAgICAgICAgOyBtbTE9KCpDKkQqRSpGKQorCisgICAgcHVucGNrbHdkICAgbW00LCBtbTIgICAgICAgICAgICAgICAgOyBtbTQ9KCoqKjAqKioxKQorICAgIHB1bnBja2h3ZCAgIG1tMiwgbW0yICAgICAgICAgICAgICAgIDsgbW0yPSgqKioyKioqMykKKyAgICBwdW5wY2tsd2QgICBtbTUsIG1tMCAgICAgICAgICAgICAgICA7IG1tNT0oKioqNCoqKjUpCisgICAgcHVucGNraHdkICAgbW0wLCBtbTAgICAgICAgICAgICAgICAgOyBtbTA9KCoqKjYqKio3KQorCisgICAgcHNyYWQgICAgICAgbW00LCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyBtbTQ9KDAxKQorICAgIHBzcmFkICAgICAgIG1tMiwgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgbW0yPSgyMykKKyAgICBjdnRwaTJwcyAgICB4bW0wLCBtbTQgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAxKiopCisgICAgY3Z0cGkycHMgICAgeG1tMSwgbW0yICAgICAgICAgICAgICAgICAgOyB4bW0xPSgyMyoqKQorICAgIHBzcmFkICAgICAgIG1tNSwgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgbW01PSg0NSkKKyAgICBwc3JhZCAgICAgICBtbTAsIChEV09SRF9CSVQtQllURV9CSVQpICA7IG1tMD0oNjcpCisgICAgY3Z0cGkycHMgICAgeG1tMiwgbW01ICAgICAgICAgICAgICAgICAgOyB4bW0yPSg0NSoqKQorICAgIGN2dHBpMnBzICAgIHhtbTMsIG1tMCAgICAgICAgICAgICAgICAgIDsgeG1tMz0oNjcqKikKKworICAgIHB1bnBja2x3ZCAgIG1tNiwgbW0zICAgICAgICAgICAgICAgIDsgbW02PSgqKio4KioqOSkKKyAgICBwdW5wY2tod2QgICBtbTMsIG1tMyAgICAgICAgICAgICAgICA7IG1tMz0oKioqQSoqKkIpCisgICAgcHVucGNrbHdkICAgbW00LCBtbTEgICAgICAgICAgICAgICAgOyBtbTQ9KCoqKkMqKipEKQorICAgIHB1bnBja2h3ZCAgIG1tMSwgbW0xICAgICAgICAgICAgICAgIDsgbW0xPSgqKipFKioqRikKKworICAgIHBzcmFkICAgICAgIG1tNiwgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgbW02PSg4OSkKKyAgICBwc3JhZCAgICAgICBtbTMsIChEV09SRF9CSVQtQllURV9CSVQpICA7IG1tMz0oQUIpCisgICAgY3Z0cGkycHMgICAgeG1tNCwgbW02ICAgICAgICAgICAgICAgICAgOyB4bW00PSg4OSoqKQorICAgIGN2dHBpMnBzICAgIHhtbTUsIG1tMyAgICAgICAgICAgICAgICAgIDsgeG1tNT0oQUIqKikKKyAgICBwc3JhZCAgICAgICBtbTQsIChEV09SRF9CSVQtQllURV9CSVQpICA7IG1tND0oQ0QpCisgICAgcHNyYWQgICAgICAgbW0xLCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyBtbTE9KEVGKQorICAgIGN2dHBpMnBzICAgIHhtbTYsIG1tNCAgICAgICAgICAgICAgICAgIDsgeG1tNj0oQ0QqKikKKyAgICBjdnRwaTJwcyAgICB4bW03LCBtbTEgICAgICAgICAgICAgICAgICA7IHhtbTc9KEVGKiopCisKKyAgICBtb3ZsaHBzICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDAxMjMpCisgICAgbW92bGhwcyAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSg0NTY3KQorICAgIG1vdmxocHMgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oODlBQikKKyAgICBtb3ZsaHBzICAgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KENERUYpCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICBkZWMgICAgICAgICBlY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb252bG9vcAorCisgICAgZW1tcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKKworICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwb3AgICAgICAgICBlYngKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZShKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgY29lZl9ibG9jayAgZWJwICsgOCAgICAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMgICAgZWJwICsgMTIgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKmRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZSAgIGVicCArIDE2ICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZSkKKworRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorICAgIG1vdiAgICAgICAgIGVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisgICAgbW92ICAgICAgICAgZWF4LCBEQ1RTSVpFMi8xNgorICAgIGFsaWdueCAgICAgIDE2LCA3CisucXVhbnRsb29wOgorICAgIG1vdmFwcyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG11bHBzICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG11bHBzICAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG11bHBzICAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG11bHBzICAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgbW92aGxwcyAgICAgeG1tNCwgeG1tMAorICAgIG1vdmhscHMgICAgIHhtbTUsIHhtbTEKKworICAgIGN2dHBzMnBpICAgIG1tMCwgeG1tMAorICAgIGN2dHBzMnBpICAgIG1tMSwgeG1tMQorICAgIGN2dHBzMnBpICAgIG1tNCwgeG1tNAorICAgIGN2dHBzMnBpICAgIG1tNSwgeG1tNQorCisgICAgbW92aGxwcyAgICAgeG1tNiwgeG1tMgorICAgIG1vdmhscHMgICAgIHhtbTcsIHhtbTMKKworICAgIGN2dHBzMnBpICAgIG1tMiwgeG1tMgorICAgIGN2dHBzMnBpICAgIG1tMywgeG1tMworICAgIGN2dHBzMnBpICAgIG1tNiwgeG1tNgorICAgIGN2dHBzMnBpICAgIG1tNywgeG1tNworCisgICAgcGFja3NzZHcgICAgbW0wLCBtbTQKKyAgICBwYWNrc3NkdyAgICBtbTEsIG1tNQorICAgIHBhY2tzc2R3ICAgIG1tMiwgbW02CisgICAgcGFja3NzZHcgICAgbW0zLCBtbTcKKworICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICBtb3ZxICAgICAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisgICAgbW92cSAgICAgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorICAgIG1vdnEgICAgICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAucXVhbnRsb29wCisKKyAgICBlbW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQorCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qcXVhbnRmLXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudGYtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMjAxYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qcXVhbnRmLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTcwIEBACis7Cis7IGpxdWFudGYuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uIChTU0UgJiBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YSAgZWJwICsgOCAgICAgICAgICAgIDsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorJWRlZmluZSBzdGFydF9jb2wgICAgZWJwICsgMTIgICAgICAgICAgIDsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlICAgIGVicCArIDE2ICAgICAgICAgICA7IEZBU1RfRkxPQVQgKndvcmtzcGFjZQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIHBjbXBlcXcgICAgIHhtbTcsIHhtbTcKKyAgICBwc2xsdyAgICAgICB4bW03LCA3CisgICAgcGFja3Nzd2IgICAgeG1tNywgeG1tNyAgICAgICAgICAgICAgOyB4bW03ID0gUEJfQ0VOVEVSSlNBTVBMRSAoMHg4MDgwODAuLikKKworICAgIG1vdiAgICAgICAgIGVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorICAgIG1vdiAgICAgICAgIGVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXSAgICAgICA7IChEQ1RFTEVNICopCisgICAgbW92ICAgICAgICAgZWN4LCBEQ1RTSVpFLzIKKyAgICBhbGlnbnggICAgICAxNiwgNworLmNvbnZsb29wOgorICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisKKyAgICBtb3ZxICAgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQorICAgIG1vdnEgICAgICAgIHhtbTEsIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisKKyAgICBwc3ViYiAgICAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHhtbTA9KDAxMjM0NTY3KQorICAgIHBzdWJiICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT0oODlBQkNERUYpCisKKyAgICBwdW5wY2tsYncgICB4bW0wLCB4bW0wICAgICAgICAgICAgICA7IHhtbTA9KCowKjEqMiozKjQqNSo2KjcpCisgICAgcHVucGNrbGJ3ICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPSgqOCo5KkEqQipDKkQqRSpGKQorCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tMCAgICAgICAgICAgICAgOyB4bW0yPSgqKiowKioqMSoqKjIqKiozKQorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0oKioqNCoqKjUqKio2KioqNykKKyAgICBwdW5wY2tsd2QgICB4bW0zLCB4bW0xICAgICAgICAgICAgICA7IHhtbTM9KCoqKjgqKio5KioqQSoqKkIpCisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPSgqKipDKioqRCoqKkUqKipGKQorCisgICAgcHNyYWQgICAgICAgeG1tMiwgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgeG1tMj0oMDEyMykKKyAgICBwc3JhZCAgICAgICB4bW0wLCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyB4bW0wPSg0NTY3KQorICAgIGN2dGRxMnBzICAgIHhtbTIsIHhtbTIgICAgICAgICAgICAgICAgICA7IHhtbTI9KDAxMjMpCisgICAgY3Z0ZHEycHMgICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgICAgIDsgeG1tMD0oNDU2NykKKyAgICBwc3JhZCAgICAgICB4bW0zLCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyB4bW0zPSg4OUFCKQorICAgIHBzcmFkICAgICAgIHhtbTEsIChEV09SRF9CSVQtQllURV9CSVQpICA7IHhtbTE9KENERUYpCisgICAgY3Z0ZHEycHMgICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgICAgIDsgeG1tMz0oODlBQikKKyAgICBjdnRkcTJwcyAgICB4bW0xLCB4bW0xICAgICAgICAgICAgICAgICAgOyB4bW0xPShDREVGKQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisKKyAgICBhZGQgICAgICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICBlZGksIGJ5dGUgMipEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgZGVjICAgICAgICAgZWN4CisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbnZsb29wCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcG9wICAgICAgICAgZWJ4CisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKmRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgY29lZl9ibG9jayAgZWJwICsgOCAgICAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMgICAgZWJwICsgMTIgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKmRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZSAgIGVicCArIDE2ICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIpCisKK0VYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKzsgICBwdXNoICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIG1vdiAgICAgICAgIGVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorICAgIG1vdiAgICAgICAgIGVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisgICAgbW92ICAgICAgICAgZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KKyAgICBtb3YgICAgICAgICBlYXgsIERDVFNJWkUyLzE2CisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5xdWFudGxvb3A6CisgICAgbW92YXBzICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICBjdnRwczJkcSAgICB4bW0wLCB4bW0wCisgICAgY3Z0cHMyZHEgICAgeG1tMSwgeG1tMQorICAgIGN2dHBzMmRxICAgIHhtbTIsIHhtbTIKKyAgICBjdnRwczJkcSAgICB4bW0zLCB4bW0zCisKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW0xCisgICAgcGFja3NzZHcgICAgeG1tMiwgeG1tMworCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIHhtbTIKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAucXVhbnRsb29wCisKKyAgICBwb3AgICAgICAgICBlZGkKKyAgICBwb3AgICAgICAgICBlc2kKKzsgICBwb3AgICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHBvcCAgICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKyAgICBwb3AgICAgICAgICBlYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudGktYXZ4Mi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvanF1YW50aS1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYThlMWExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudGktYXZ4Mi5hc20KQEAgLTAsMCArMSwxOTAgQEAKKzsKKzsganF1YW50aS5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNiwgTWF0dGhpZXUgRGFyYm9pcy4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDMyCis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9jb252c2FtcF9hdngyKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgc2FtcGxlX2RhdGEgIGVicCArIDggICAgICAgICAgICA7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sICAgIGVicCArIDEyICAgICAgICAgICA7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZSAgICBlYnAgKyAxNiAgICAgICAgICAgOyBEQ1RFTEVNICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2NvbnZzYW1wX2F2eDIpCisKK0VYVE4oanNpbWRfY29udnNhbXBfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgZWJwCisgICAgbW92ICAgICAgICAgZWJwLCBlc3AKKyAgICBwdXNoICAgICAgICBlYngKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXSAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW3dvcmtzcGFjZV0gICAgICAgOyAoRENURUxFTSAqKQorCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQorICAgIG1vdnEgICAgICAgIHhtbTEsIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzMqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdnEgICAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisgICAgbW92cSAgICAgICAgeG1tMywgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKworICAgIG1vdiAgICAgICAgIGVieCwgSlNBTVBST1cgW2VzaSs0KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICBlZHgsIEpTQU1QUk9XIFtlc2krNSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92cSAgICAgICAgeG1tNCwgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3ZxICAgICAgICB4bW01LCBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQorCisgICAgbW92ICAgICAgICAgZWJ4LCBKU0FNUFJPVyBbZXNpKzYqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIGVkeCwgSlNBTVBST1cgW2VzaSs3KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICB4bW02LCBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQorICAgIG1vdnEgICAgICAgIHhtbTcsIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisKKyAgICB2aW5zZXJ0aTEyOCB5bW0wLCB5bW0wLCB4bW0xLCAxCisgICAgdmluc2VydGkxMjggeW1tMiwgeW1tMiwgeG1tMywgMQorICAgIHZpbnNlcnRpMTI4IHltbTQsIHltbTQsIHhtbTUsIDEKKyAgICB2aW5zZXJ0aTEyOCB5bW02LCB5bW02LCB4bW03LCAxCisKKyAgICB2cHhvciAgICAgICB5bW0xLCB5bW0xLCB5bW0xICAgICAgICA7IHltbTE9KGFsbCAwJ3MpCisgICAgdnB1bnBja2xidyAgeW1tMCwgeW1tMCwgeW1tMQorICAgIHZwdW5wY2tsYncgIHltbTIsIHltbTIsIHltbTEKKyAgICB2cHVucGNrbGJ3ICB5bW00LCB5bW00LCB5bW0xCisgICAgdnB1bnBja2xidyAgeW1tNiwgeW1tNiwgeW1tMQorCisgICAgdnBjbXBlcXcgICAgeW1tNywgeW1tNywgeW1tNworICAgIHZwc2xsdyAgICAgIHltbTcsIHltbTcsIDcgICAgICAgICAgIDsgeW1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tNworICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNiwgeW1tNworCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB5bW0wCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB5bW0yCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soNCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB5bW00CisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbWU1NQkxPQ0soNiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB5bW02CisKKyAgICB2emVyb3VwcGVyCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKzsgICAiSG93IHRvIG9wdGltaXplIGZvciB0aGUgUGVudGl1bSBmYW1pbHkgb2YgbWljcm9wcm9jZXNzb3JzIgorOyAgIChodHRwOi8vd3d3LmFnbmVyLm9yZy9hc3NlbS8pLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcXVhbnRpemVfYXZ4MihKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpOworOworCislZGVmaW5lIFJFQ0lQUk9DQUwobSwgbiwgYikgXAorICBZTU1CTE9DSyhEQ1RTSVpFICogMCArIChtKSwgKG4pLCAoYiksIFNJWkVPRl9EQ1RFTEVNKQorJWRlZmluZSBDT1JSRUNUSU9OKG0sIG4sIGIpIFwKKyAgWU1NQkxPQ0soRENUU0laRSAqIDEgKyAobSksIChuKSwgKGIpLCBTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgU0NBTEUobSwgbiwgYikgXAorICBZTU1CTE9DSyhEQ1RTSVpFICogMiArIChtKSwgKG4pLCAoYiksIFNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sgIGVicCArIDggICAgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIGRpdmlzb3JzICAgIGVicCArIDEyICAgICAgICAgICAgOyBEQ1RFTEVNICpkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UgICBlYnAgKyAxNiAgICAgICAgICAgIDsgRENURUxFTSAqd29ya3NwYWNlCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9xdWFudGl6ZV9hdngyKQorCitFWFROKGpzaW1kX3F1YW50aXplX2F2eDIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorICAgIG1vdiAgICAgICAgIGVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisKKyAgICB2bW92ZHF1ICAgICB5bW00LCBbWU1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgdm1vdmRxdSAgICAgeW1tNSwgW1lNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIHZtb3ZkcXUgICAgIHltbTYsIFtZTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9EQ1RFTEVNKV0KKyAgICB2bW92ZHF1ICAgICB5bW03LCBbWU1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgdnBhYnN3ICAgICAgeW1tMCwgeW1tNAorICAgIHZwYWJzdyAgICAgIHltbTEsIHltbTUKKyAgICB2cGFic3cgICAgICB5bW0yLCB5bW02CisgICAgdnBhYnN3ICAgICAgeW1tMywgeW1tNworCisgICAgdnBhZGR3ICAgICAgeW1tMCwgWU1NV09SRCBbQ09SUkVDVElPTigwLDAsZWR4KV0gIDsgY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yCisgICAgdnBhZGR3ICAgICAgeW1tMSwgWU1NV09SRCBbQ09SUkVDVElPTigyLDAsZWR4KV0KKyAgICB2cGFkZHcgICAgICB5bW0yLCBZTU1XT1JEIFtDT1JSRUNUSU9OKDQsMCxlZHgpXQorICAgIHZwYWRkdyAgICAgIHltbTMsIFlNTVdPUkQgW0NPUlJFQ1RJT04oNiwwLGVkeCldCisgICAgdnBtdWxodXcgICAgeW1tMCwgWU1NV09SRCBbUkVDSVBST0NBTCgwLDAsZWR4KV0gIDsgcmVjaXByb2NhbAorICAgIHZwbXVsaHV3ICAgIHltbTEsIFlNTVdPUkQgW1JFQ0lQUk9DQUwoMiwwLGVkeCldCisgICAgdnBtdWxodXcgICAgeW1tMiwgWU1NV09SRCBbUkVDSVBST0NBTCg0LDAsZWR4KV0KKyAgICB2cG11bGh1dyAgICB5bW0zLCBZTU1XT1JEIFtSRUNJUFJPQ0FMKDYsMCxlZHgpXQorICAgIHZwbXVsaHV3ICAgIHltbTAsIFlNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXSAgICAgICA7IHNjYWxlCisgICAgdnBtdWxodXcgICAgeW1tMSwgWU1NV09SRCBbU0NBTEUoMiwwLGVkeCldCisgICAgdnBtdWxodXcgICAgeW1tMiwgWU1NV09SRCBbU0NBTEUoNCwwLGVkeCldCisgICAgdnBtdWxodXcgICAgeW1tMywgWU1NV09SRCBbU0NBTEUoNiwwLGVkeCldCisKKyAgICB2cHNpZ253ICAgICB5bW0wLCB5bW0wLCB5bW00CisgICAgdnBzaWdudyAgICAgeW1tMSwgeW1tMSwgeW1tNQorICAgIHZwc2lnbncgICAgIHltbTIsIHltbTIsIHltbTYKKyAgICB2cHNpZ253ICAgICB5bW0zLCB5bW0zLCB5bW03CisKKyAgICB2bW92ZHF1ICAgICBbWU1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB5bW0wCisgICAgdm1vdmRxdSAgICAgW1lNTUJMT0NLKDIsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeW1tMQorICAgIHZtb3ZkcXUgICAgIFtZTU1CTE9DSyg0LDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTIKKyAgICB2bW92ZHF1ICAgICBbWU1NQkxPQ0soNiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB5bW0zCisKKyAgICB2emVyb3VwcGVyCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHBvcCAgICAgICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcG9wICAgICAgICAgZWJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qcXVhbnRpLXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pxdWFudGktc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2OTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qcXVhbnRpLXNzZTIuYXNtCkBAIC0wLDAgKzEsMjAzIEBACis7Cis7IGpxdWFudGkuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX3NzZTIoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCis7ICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YSAgZWJwICsgOCAgICAgICAgICAgIDsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorJWRlZmluZSBzdGFydF9jb2wgICAgZWJwICsgMTIgICAgICAgICAgIDsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlICAgIGVicCArIDE2ICAgICAgICAgICA7IERDVEVMRU0gKndvcmtzcGFjZQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfY29udnNhbXBfc3NlMikKKworRVhUTihqc2ltZF9jb252c2FtcF9zc2UyKToKKyAgICBwdXNoICAgICAgICBlYnAKKyAgICBtb3YgICAgICAgICBlYnAsIGVzcAorICAgIHB1c2ggICAgICAgIGVieAorOyAgIHB1c2ggICAgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcHVzaCAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICBwdXNoICAgICAgICBlc2kKKyAgICBwdXNoICAgICAgICBlZGkKKworICAgIHB4b3IgICAgICAgIHhtbTYsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNj0oYWxsIDAncykKKyAgICBwY21wZXF3ICAgICB4bW03LCB4bW03CisgICAgcHNsbHcgICAgICAgeG1tNywgNyAgICAgICAgICAgICAgICAgOyB4bW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKyAgICBtb3YgICAgICAgICBlc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXSAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKyAgICBtb3YgICAgICAgICBlZGksIFBPSU5URVIgW3dvcmtzcGFjZV0gICAgICAgOyAoRENURUxFTSAqKQorICAgIG1vdiAgICAgICAgIGVjeCwgRENUU0laRS80CisgICAgYWxpZ254ICAgICAgMTYsIDcKKy5jb252bG9vcDoKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorCisgICAgbW92cSAgICAgICAgeG1tMCwgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0gIDsgeG1tMD0oMDEyMzQ1NjcpCisgICAgbW92cSAgICAgICAgeG1tMSwgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0gIDsgeG1tMT0oODlBQkNERUYpCisKKyAgICBtb3YgICAgICAgICBlYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzMqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorCisgICAgbW92cSAgICAgICAgeG1tMiwgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0gIDsgeG1tMj0oR0hJSktMTU4pCisgICAgbW92cSAgICAgICAgeG1tMywgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0gIDsgeG1tMz0oT1BRUlNUVVYpCisKKyAgICBwdW5wY2tsYncgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9KDAxMjM0NTY3KQorICAgIHB1bnBja2xidyAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMT0oODlBQkNERUYpCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTcKKyAgICBwdW5wY2tsYncgICB4bW0yLCB4bW02ICAgICAgICAgICAgICA7IHhtbTI9KEdISUpLTE1OKQorICAgIHB1bnBja2xidyAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz0oT1BRUlNUVVYpCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTcKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCisgICAgYWRkICAgICAgICAgZXNpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQorICAgIGRlYyAgICAgICAgIGVjeAorICAgIGpueiAgICAgICAgIHNob3J0IC5jb252bG9vcAorCisgICAgcG9wICAgICAgICAgZWRpCisgICAgcG9wICAgICAgICAgZXNpCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKzsgICAiSG93IHRvIG9wdGltaXplIGZvciB0aGUgUGVudGl1bSBmYW1pbHkgb2YgbWljcm9wcm9jZXNzb3JzIgorOyAgIChodHRwOi8vd3d3LmFnbmVyLm9yZy9hc3NlbS8pLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcXVhbnRpemVfc3NlMihKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpOworOworCislZGVmaW5lIFJFQ0lQUk9DQUwobSwgbiwgYikgXAorICBYTU1CTE9DSyhEQ1RTSVpFICogMCArIChtKSwgKG4pLCAoYiksIFNJWkVPRl9EQ1RFTEVNKQorJWRlZmluZSBDT1JSRUNUSU9OKG0sIG4sIGIpIFwKKyAgWE1NQkxPQ0soRENUU0laRSAqIDEgKyAobSksIChuKSwgKGIpLCBTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgU0NBTEUobSwgbiwgYikgXAorICBYTU1CTE9DSyhEQ1RTSVpFICogMiArIChtKSwgKG4pLCAoYiksIFNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sgIGVicCArIDggICAgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIGRpdmlzb3JzICAgIGVicCArIDEyICAgICAgICAgICAgOyBEQ1RFTEVNICpkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UgICBlYnAgKyAxNiAgICAgICAgICAgIDsgRENURUxFTSAqd29ya3NwYWNlCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9xdWFudGl6ZV9zc2UyKQorCitFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpOgorICAgIHB1c2ggICAgICAgIGVicAorICAgIG1vdiAgICAgICAgIGVicCwgZXNwCis7ICAgcHVzaCAgICAgICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwdXNoICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorOyAgIHB1c2ggICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgcHVzaCAgICAgICAgZXNpCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICBtb3YgICAgICAgICBlc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKyAgICBtb3YgICAgICAgICBlZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorICAgIG1vdiAgICAgICAgIGVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisgICAgbW92ICAgICAgICAgZWF4LCBEQ1RTSVpFMi8zMgorICAgIGFsaWdueCAgICAgIDE2LCA3CisucXVhbnRsb29wOgorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTcKKyAgICBwc3JhdyAgICAgICB4bW00LCAoV09SRF9CSVQtMSkKKyAgICBwc3JhdyAgICAgICB4bW01LCAoV09SRF9CSVQtMSkKKyAgICBwc3JhdyAgICAgICB4bW02LCAoV09SRF9CSVQtMSkKKyAgICBwc3JhdyAgICAgICB4bW03LCAoV09SRF9CSVQtMSkKKyAgICBweG9yICAgICAgICB4bW0wLCB4bW00CisgICAgcHhvciAgICAgICAgeG1tMSwgeG1tNQorICAgIHB4b3IgICAgICAgIHhtbTIsIHhtbTYKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW03CisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyBpZiAoeG1tMCA8IDApIHhtbTAgPSAteG1tMDsKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOworICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgaWYgKHhtbTIgPCAwKSB4bW0yID0gLXhtbTI7CisgICAgcHN1YncgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyBpZiAoeG1tMyA8IDApIHhtbTMgPSAteG1tMzsKKworICAgIHBhZGR3ICAgICAgIHhtbTAsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLGVkeCldICA7IGNvcnJlY3Rpb24gKyByb3VuZGZhY3RvcgorICAgIHBhZGR3ICAgICAgIHhtbTEsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMSwwLGVkeCldCisgICAgcGFkZHcgICAgICAgeG1tMiwgWE1NV09SRCBbQ09SUkVDVElPTigyLDAsZWR4KV0KKyAgICBwYWRkdyAgICAgICB4bW0zLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDMsMCxlZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTAsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLGVkeCldICA7IHJlY2lwcm9jYWwKKyAgICBwbXVsaHV3ICAgICB4bW0xLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDEsMCxlZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTIsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMiwwLGVkeCldCisgICAgcG11bGh1dyAgICAgeG1tMywgWE1NV09SRCBbUkVDSVBST0NBTCgzLDAsZWR4KV0KKyAgICBwbXVsaHV3ICAgICB4bW0wLCBYTU1XT1JEIFtTQ0FMRSgwLDAsZWR4KV0gICAgICAgOyBzY2FsZQorICAgIHBtdWxodXcgICAgIHhtbTEsIFhNTVdPUkQgW1NDQUxFKDEsMCxlZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTIsIFhNTVdPUkQgW1NDQUxFKDIsMCxlZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTMsIFhNTVdPUkQgW1NDQUxFKDMsMCxlZHgpXQorCisgICAgcHhvciAgICAgICAgeG1tMCwgeG1tNAorICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTUKKyAgICBweG9yICAgICAgICB4bW0yLCB4bW02CisgICAgcHhvciAgICAgICAgeG1tMywgeG1tNworICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTQKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01CisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNgorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTcKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKworICAgIGFkZCAgICAgICAgIGVzaSwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQorICAgIGFkZCAgICAgICAgIGVkeCwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQorICAgIGFkZCAgICAgICAgIGVkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKKyAgICBkZWMgICAgICAgICBlYXgKKyAgICBqbnogICAgICAgICBuZWFyIC5xdWFudGxvb3AKKworICAgIHBvcCAgICAgICAgIGVkaQorICAgIHBvcCAgICAgICAgIGVzaQorOyAgIHBvcCAgICAgICAgIGVkeCAgICAgICAgICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgcG9wICAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICBwb3AgICAgICAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IHVudXNlZAorICAgIHBvcCAgICAgICAgIGVicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvanNpbWQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qc2ltZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Mzk0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2kzODYvanNpbWQuYwpAQCAtMCwwICsxLDEyNTMgQEAKKy8qCisgKiBqc2ltZF9pMzg2LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgMjAxMy0yMDE0LCAyMDE2LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiwgMjAxOCwgTWF0dGhpZXUgRGFyYm9pcy4KKyAqCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSAibm9ybWFsIiBwb3J0aW9ucworICogb2YgdGhlIGxpYnJhcnkgYW5kIHRoZSBTSU1EIGltcGxlbWVudGF0aW9ucyB3aGVuIHJ1bm5pbmcgb24gYQorICogMzItYml0IHg4NiBhcmNoaXRlY3R1cmUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgIi4uLy4uL2ppbmNsdWRlLmgiCisjaW5jbHVkZSAiLi4vLi4vanBlZ2xpYi5oIgorI2luY2x1ZGUgIi4uLy4uL2pzaW1kLmgiCisjaW5jbHVkZSAiLi4vLi4vamRjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2pzaW1kZGN0LmgiCisjaW5jbHVkZSAiLi4vanNpbWQuaCIKKyNpbmNsdWRlICJqY29uZmlnaW50LmgiCisKKy8qCisgKiBJbiB0aGUgUElDIGNhc2VzLCB3ZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IGNvbnN0YW50cyB3aWxsIGtlZXAKKyAqIHRoZWlyIGFsaWdubWVudC4gVGhpcyBtYWNybyBhbGxvd3MgdXMgdG8gdmVyaWZ5IGl0IGF0IHJ1bnRpbWUuCisgKi8KKyNkZWZpbmUgSVNfQUxJR05FRChwdHIsIG9yZGVyKSAgKCgodW5zaWduZWQpcHRyICYgKCgxIDw8IG9yZGVyKSAtIDEpKSA9PSAwKQorCisjZGVmaW5lIElTX0FMSUdORURfU1NFKHB0cikgIChJU19BTElHTkVEKHB0ciwgNCkpIC8qIDE2IGJ5dGUgYWxpZ25tZW50ICovCisjZGVmaW5lIElTX0FMSUdORURfQVZYKHB0cikgIChJU19BTElHTkVEKHB0ciwgNSkpIC8qIDMyIGJ5dGUgYWxpZ25tZW50ICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2ltZF9zdXBwb3J0ID0gKHVuc2lnbmVkIGludCkofjApOworc3RhdGljIHVuc2lnbmVkIGludCBzaW1kX2h1ZmZtYW4gPSAxOworCisvKgorICogQ2hlY2sgd2hhdCBTSU1EIGFjY2VsZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiBGSVhNRTogVGhpcyBjb2RlIGlzIHJhY3kgdW5kZXIgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4KKyAqLworTE9DQUwodm9pZCkKK2luaXRfc2ltZCh2b2lkKQoreworI2lmbmRlZiBOT19HRVRFTlYKKyAgY2hhciAqZW52ID0gTlVMTDsKKyNlbmRpZgorCisgIGlmIChzaW1kX3N1cHBvcnQgIT0gfjBVKQorICAgIHJldHVybjsKKworICBzaW1kX3N1cHBvcnQgPSBqcGVnX3NpbWRfY3B1X3N1cHBvcnQoKTsKKworI2lmbmRlZiBOT19HRVRFTlYKKyAgLyogRm9yY2UgZGlmZmVyZW50IHNldHRpbmdzIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VNTVgiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ICY9IEpTSU1EX01NWDsKKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRTNETk9XIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCAmPSBKU0lNRF8zRE5PVyB8IEpTSU1EX01NWDsKKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRVNTRSIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX3N1cHBvcnQgJj0gSlNJTURfU1NFIHwgSlNJTURfTU1YOworICBlbnYgPSBnZXRlbnYoIkpTSU1EX0ZPUkNFU1NFMiIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX3N1cHBvcnQgJj0gSlNJTURfU1NFMjsKKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRUFWWDIiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ICY9IEpTSU1EX0FWWDI7CisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VOT05FIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCA9IDA7CisgIGVudiA9IGdldGVudigiSlNJTURfTk9IVUZGRU5DIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfaHVmZm1hbiA9IDA7CisjZW5kaWYKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfeWNjKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpICYmCisgICAgICBJU19BTElHTkVEX0FWWChqY29uc3RfcmdiX3ljY19jb252ZXJ0X2F2eDIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3JnYl9ncmF5KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpICYmCisgICAgICBJU19BTElHTkVEX0FWWChqY29uc3RfcmdiX2dyYXlfY29udmVydF9hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKSAmJgorICAgICAgSVNfQUxJR05FRF9BVlgoamNvbnN0X3ljY19yZ2JfY29udmVydF9hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl95Y2NfcmdiNTY1KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl95Y2NfY29udmVydChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqYXZ4MmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKyAgdm9pZCAoKm1teGZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBhdngyZmN0ID0ganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBhdngyZmN0ID0ganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGF2eDJmY3QgPSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfcmdiX3ljY19jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgfQorCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGF2eDJmY3QoY2luZm8tPmltYWdlX3dpZHRoLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csIG51bV9yb3dzKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICBzc2UyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgIGVsc2UKKyAgICBtbXhmY3QoY2luZm8tPmltYWdlX3dpZHRoLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgdm9pZCAoKmF2eDJmY3QpIChKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOworICB2b2lkICgqc3NlMmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisgIHZvaWQgKCptbXhmY3QpIChKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOworCisgIHN3aXRjaCAoY2luZm8tPmluX2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfZXh0cmdieF9ncmF5X2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dGJncl9ncmF5X2NvbnZlcnRfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dGJncnhfZ3JheV9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHR4cmdiX2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHR4cmdiX2dyYXlfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBhdngyZmN0ID0ganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfcmdiX2dyYXlfY29udmVydF9tbXg7CisgICAgYnJlYWs7CisgIH0KKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBhdngyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgc3NlMmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOworICBlbHNlCisgICAgbW14ZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYl9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqYXZ4MmZjdCkgKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVksIGludCk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgaW50KTsKKyAgdm9pZCAoKm1teGZjdCkgKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVksIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGF2eDJmY3QgPSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X21teDsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBhdngyZmN0ID0ganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXg7CisgICAgYnJlYWs7CisgIH0KKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBhdngyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgc3NlMmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOworICBlbHNlCisgICAgbW14ZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZG93bnNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX2Rvd25zYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAganNpbWRfaDJ2Ml9kb3duc2FtcGxlX2F2eDIoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGEpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhKTsKKyAgZWxzZQorICAgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9tbXgoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAganNpbWRfaDJ2MV9kb3duc2FtcGxlX2F2eDIoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGEpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhKTsKKyAgZWxzZQorICAgIGpzaW1kX2gydjFfZG93bnNhbXBsZV9tbXgoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGpzaW1kX2gydjJfdXBzYW1wbGVfYXZ4MihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgZWxzZQorICAgIGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGpzaW1kX2gydjFfdXBzYW1wbGVfYXZ4MihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgZWxzZQorICAgIGpzaW1kX2gydjFfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpICYmCisgICAgICBJU19BTElHTkVEX0FWWChqY29uc3RfZmFuY3lfdXBzYW1wbGVfYXZ4MikpCisgICAgcmV0dXJuIDE7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX2ZhbmN5X3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKSAmJgorICAgICAgSVNfQUxJR05FRF9BVlgoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX2F2eDIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9hdngyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7CisgIGVsc2UKKyAgICBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2F2eDIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKKyAgZWxzZQorICAgIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKSAmJgorICAgICAgSVNfQUxJR05FRF9BVlgoamNvbnN0X21lcmdlZF91cHNhbXBsZV9hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX21lcmdlZF91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikgJiYKKyAgICAgIElTX0FMSUdORURfQVZYKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfYXZ4MikpCisgICAgcmV0dXJuIDE7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgdm9pZCAoKmF2eDJmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKKyAgdm9pZCAoKnNzZTJmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKKyAgdm9pZCAoKm1teGZjdCkgKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVkpOworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgYXZ4MmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKKyAgZWxzZQorICAgIG1teGZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIHZvaWQgKCphdngyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisgIHZvaWQgKCptbXhmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKKworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgbW14ZmN0ID0ganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICBtbXhmY3QgPSBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2MV9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIG1teGZjdCA9IGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICBicmVhazsKKyAgfQorCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGF2eDJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICBzc2UyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7CisgIGVsc2UKKyAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9jb252c2FtcCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRkFTVF9GTE9BVCkgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EXzNETk9XKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9jb252c2FtcF9hdngyKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfY29udnNhbXBfc3NlMihzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3b3Jrc3BhY2UpOworICBlbHNlCisgICAganNpbWRfY29udnNhbXBfbW14KHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXBfZmxvYXQoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFKQorICAgIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZShzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3b3Jrc3BhY2UpOworICBlbHNlCisgICAganNpbWRfY29udnNhbXBfZmxvYXRfM2Rub3coc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikgJiYgSVNfQUxJR05FRF9BVlgoamNvbnN0X2ZkY3RfaXNsb3dfYXZ4MikpCisgICAgcmV0dXJuIDE7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pZmFzdCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2lmYXN0X3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfZmxvYXQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF8zRE5PVykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lzbG93KERDVEVMRU0gKmRhdGEpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGpzaW1kX2ZkY3RfaXNsb3dfYXZ4MihkYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICBqc2ltZF9mZGN0X2lzbG93X3NzZTIoZGF0YSk7CisgIGVsc2UKKyAgICBqc2ltZF9mZGN0X2lzbG93X21teChkYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0KERDVEVMRU0gKmRhdGEpCit7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikpCisgICAganNpbWRfZmRjdF9pZmFzdF9zc2UyKGRhdGEpOworICBlbHNlCisgICAganNpbWRfZmRjdF9pZmFzdF9tbXgoZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKQoreworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfZmxvYXRfc3NlKSkKKyAgICBqc2ltZF9mZGN0X2Zsb2F0X3NzZShkYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfM0ROT1cpCisgICAganNpbWRfZmRjdF9mbG9hdF8zZG5vdyhkYXRhKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF8zRE5PVykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9xdWFudGl6ZShKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywgRENURUxFTSAqd29ya3NwYWNlKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9xdWFudGl6ZV9hdngyKGNvZWZfYmxvY2ssIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX3F1YW50aXplX3NzZTIoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7CisgIGVsc2UKKyAgICBqc2ltZF9xdWFudGl6ZV9tbXgoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemVfZmxvYXQoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkKKyAgICBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7CisgIGVsc2UKKyAgICBqc2ltZF9xdWFudGl6ZV9mbG9hdF8zZG5vdyhjb2VmX2Jsb2NrLCBkaXZpc29ycywgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0XzJ4Mih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0XzR4NCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKyAgICBqc2ltZF9pZGN0XzJ4Ml9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworICBlbHNlCisgICAganNpbWRfaWRjdF8yeDJfbW14KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF80eDQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9yZWRfc3NlMikpCisgICAganNpbWRfaWRjdF80eDRfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKKyAgZWxzZQorICAgIGpzaW1kX2lkY3RfNHg0X21teChjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfaXNsb3codm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKSAmJiBJU19BTElHTkVEX0FWWChqY29uc3RfaWRjdF9pc2xvd19hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9pc2xvd19zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lmYXN0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSUZBU1RfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoSUZBU1RfU0NBTEVfQklUUyAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9mbG9hdCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihGQVNUX0ZMT0FUKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZMT0FUX01VTFRfVFlQRSkgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfZmxvYXRfc3NlKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EXzNETk9XKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaXNsb3coal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGpzaW1kX2lkY3RfaXNsb3dfYXZ4Mihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2lkY3RfaXNsb3dfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworICBlbHNlCisgICAganNpbWRfaWRjdF9pc2xvd19tbXgoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikpCisgICAganNpbWRfaWRjdF9pZmFzdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7CisgIGVsc2UKKyAgICBqc2ltZF9pZGN0X2lmYXN0X21teChjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9mbG9hdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9mbG9hdF9zc2UyKSkKKyAgICBqc2ltZF9pZGN0X2Zsb2F0X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKKyAgZWxzZSBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfZmxvYXRfc3NlKSkKKyAgICBqc2ltZF9pZGN0X2Zsb2F0X3NzZShjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7CisgIGVsc2UKKyAgICBqc2ltZF9pZGN0X2Zsb2F0XzNkbm93KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgc2ltZF9odWZmbWFuICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKEpPQ1RFVCAqKQoranNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwgSkNPRUZQVFIgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RfZGNfdmFsLCBjX2Rlcml2ZWRfdGJsICpkY3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgcmV0dXJuIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19zc2UyKHN0YXRlLCBidWZmZXIsIGJsb2NrLCBsYXN0X2RjX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdGJsLCBhY3RibCk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChTSVpFT0ZfU0laRV9UICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsIHNpemVfdCAqemVyb2JpdHMpCit7CisgIGpzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZV9zc2UyKGJsb2NrLCBqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsLCBBbCwgdmFsdWVzLCB6ZXJvYml0cyk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoU0laRU9GX1NJWkVfVCAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmUoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cykKK3sKKyAgcmV0dXJuIGpzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmVfc3NlMihibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2wsIEFsLCBhYnN2YWx1ZXMsIGJpdHMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9pMzg2L2pzaW1kY3B1LmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qc2ltZGNwdS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhMGQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvaTM4Ni9qc2ltZGNwdS5hc20KQEAgLTAsMCArMSwxMzEgQEAKKzsKKzsganNpbWRjcHUuYXNtIC0gU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNoZWNrCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICAzMgorOworOyBDaGVjayBpZiB0aGUgQ1BVIHN1cHBvcnRzIFNJTUQgaW5zdHJ1Y3Rpb25zCis7Cis7IEdMT0JBTCh1bnNpZ25lZCBpbnQpCis7IGpwZWdfc2ltZF9jcHVfc3VwcG9ydCh2b2lkKQorOworCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanBlZ19zaW1kX2NwdV9zdXBwb3J0KQorCitFWFROKGpwZWdfc2ltZF9jcHVfc3VwcG9ydCk6CisgICAgcHVzaCAgICAgICAgZWJ4Cis7ICAgcHVzaCAgICAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwdXNoICAgICAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgIHB1c2ggICAgICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCisgICAgcHVzaCAgICAgICAgZWRpCisKKyAgICB4b3IgICAgICAgICBlZGksIGVkaSAgICAgICAgICAgICAgICA7IHNpbWQgc3VwcG9ydCBmbGFnCisKKyAgICBwdXNoZmQKKyAgICBwb3AgICAgICAgICBlYXgKKyAgICBtb3YgICAgICAgICBlZHgsIGVheAorICAgIHhvciAgICAgICAgIGVheCwgMTw8MjEgICAgICAgICAgICAgIDsgZmxpcCBJRCBiaXQgaW4gRUZMQUdTCisgICAgcHVzaCAgICAgICAgZWF4CisgICAgcG9wZmQKKyAgICBwdXNoZmQKKyAgICBwb3AgICAgICAgICBlYXgKKyAgICB4b3IgICAgICAgICBlYXgsIGVkeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybiAgICAgICAgICAgIDsgQ1BVSUQgaXMgbm90IHN1cHBvcnRlZAorCisgICAgOyBDaGVjayBmb3IgTU1YIGluc3RydWN0aW9uIHN1cHBvcnQKKyAgICB4b3IgICAgICAgICBlYXgsIGVheAorICAgIGNwdWlkCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHhvciAgICAgICAgIGVheCwgZWF4CisgICAgaW5jICAgICAgICAgZWF4CisgICAgY3B1aWQKKyAgICBtb3YgICAgICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgICA7IGVheCA9IFN0YW5kYXJkIGZlYXR1cmUgZmxhZ3MKKworICAgIHRlc3QgICAgICAgIGVheCwgMTw8MjMgICAgICAgICAgICAgIDsgYml0MjM6TU1YCisgICAganogICAgICAgICAgc2hvcnQgLm5vX21teAorICAgIG9yICAgICAgICAgIGVkaSwgYnl0ZSBKU0lNRF9NTVgKKy5ub19tbXg6CisgICAgdGVzdCAgICAgICAgZWF4LCAxPDwyNSAgICAgICAgICAgICAgOyBiaXQyNTpTU0UKKyAgICBqeiAgICAgICAgICBzaG9ydCAubm9fc3NlCisgICAgb3IgICAgICAgICAgZWRpLCBieXRlIEpTSU1EX1NTRQorLm5vX3NzZToKKyAgICB0ZXN0ICAgICAgICBlYXgsIDE8PDI2ICAgICAgICAgICAgICA7IGJpdDI2OlNTRTIKKyAgICBqeiAgICAgICAgICBzaG9ydCAubm9fc3NlMgorICAgIG9yICAgICAgICAgIGVkaSwgYnl0ZSBKU0lNRF9TU0UyCisubm9fc3NlMjoKKworICAgIDsgQ2hlY2sgZm9yIEFWWDIgaW5zdHJ1Y3Rpb24gc3VwcG9ydAorICAgIG1vdiAgICAgICAgIGVheCwgNworICAgIHhvciAgICAgICAgIGVjeCwgZWN4CisgICAgY3B1aWQKKyAgICBtb3YgICAgICAgICBlYXgsIGVieAorICAgIHRlc3QgICAgICAgIGVheCwgMTw8NSAgICAgICAgICAgICAgIDsgYml0NTpBVlgyCisgICAganogICAgICAgICAgc2hvcnQgLm5vX2F2eDIKKworICAgIDsgQ2hlY2sgZm9yIEFWWDIgTy9TIHN1cHBvcnQKKyAgICBtb3YgICAgICAgICBlYXgsIDEKKyAgICB4b3IgICAgICAgICBlY3gsIGVjeAorICAgIGNwdWlkCisgICAgdGVzdCAgICAgICAgZWN4LCAxPDwyNworICAgIGp6ICAgICAgICAgIHNob3J0IC5ub19hdngyICAgICAgICAgIDsgTy9TIGRvZXMgbm90IHN1cHBvcnQgWFNBVkUKKyAgICB0ZXN0ICAgICAgICBlY3gsIDE8PDI4CisgICAganogICAgICAgICAgc2hvcnQgLm5vX2F2eDIgICAgICAgICAgOyBDUFUgZG9lcyBub3Qgc3VwcG9ydCBBVlgyCisKKyAgICB4b3IgICAgICAgICBlY3gsIGVjeAorICAgIHhnZXRidgorICAgIHRlc3QgICAgICAgIGVheCwgNiAgICAgICAgICAgICAgICAgIDsgTy9TIGRvZXMgbm90IG1hbmFnZSBYTU0vWU1NIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB1c2luZyBYU0FWRQorICAgIGp6ICAgICAgICAgIHNob3J0IC5ub19hdngyCisKKyAgICBvciAgICAgICAgICBlZGksIEpTSU1EX0FWWDIKKy5ub19hdngyOgorCisgICAgOyBDaGVjayBmb3IgM0ROb3chIGluc3RydWN0aW9uIHN1cHBvcnQKKyAgICBtb3YgICAgICAgICBlYXgsIDB4ODAwMDAwMDAKKyAgICBjcHVpZAorICAgIGNtcCAgICAgICAgIGVheCwgMHg4MDAwMDAwMAorICAgIGpiZSAgICAgICAgIHNob3J0IC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVheCwgMHg4MDAwMDAwMQorICAgIGNwdWlkCisgICAgbW92ICAgICAgICAgZWF4LCBlZHggICAgICAgICAgICAgICAgOyBlYXggPSBFeHRlbmRlZCBmZWF0dXJlIGZsYWdzCisKKyAgICB0ZXN0ICAgICAgICBlYXgsIDE8PDMxICAgICAgICAgICAgICA7IGJpdDMxOjNETm93ISh2ZW5kb3IgaW5kZXBlbmRlbnQpCisgICAganogICAgICAgICAgc2hvcnQgLm5vXzNkbm93CisgICAgb3IgICAgICAgICAgZWRpLCBieXRlIEpTSU1EXzNETk9XCisubm9fM2Rub3c6CisKKy5yZXR1cm46CisgICAgbW92ICAgICAgICAgZWF4LCBlZGkKKworICAgIHBvcCAgICAgICAgIGVkaQorOyAgIHBvcCAgICAgICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgcG9wICAgICAgICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICBwb3AgICAgICAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgIHBvcCAgICAgICAgIGVieAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2pzaW1kLmggYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2pzaW1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmYzgxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvanNpbWQuaApAQCAtMCwwICsxLDEwODMgQEAKKy8qCisgKiBzaW1kL2pzaW1kLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNiwgMjAxOCwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQsIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBMaW5hcm8gTGltaXRlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCwgQmVpSmluZy4KKyAqCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKi8KKworLyogQml0bWFzayBmb3Igc3VwcG9ydGVkIGFjY2VsZXJhdGlvbiBtZXRob2RzICovCisKKyNkZWZpbmUgSlNJTURfTk9ORSAgICAgMHgwMAorI2RlZmluZSBKU0lNRF9NTVggICAgICAweDAxCisjZGVmaW5lIEpTSU1EXzNETk9XICAgIDB4MDIKKyNkZWZpbmUgSlNJTURfU1NFICAgICAgMHgwNAorI2RlZmluZSBKU0lNRF9TU0UyICAgICAweDA4CisjZGVmaW5lIEpTSU1EX05FT04gICAgIDB4MTAKKyNkZWZpbmUgSlNJTURfRFNQUjIgICAgMHgyMAorI2RlZmluZSBKU0lNRF9BTFRJVkVDICAweDQwCisjZGVmaW5lIEpTSU1EX0FWWDIgICAgIDB4ODAKKyNkZWZpbmUgSlNJTURfTU1JICAgICAgMHgxMDAKKworLyogU0lNRCBFeHQ6IHJldHJpZXZlIFNJTUQvQ1BVIGluZm9ybWF0aW9uICovCitFWFRFUk4odW5zaWduZWQgaW50KSBqcGVnX3NpbWRfY3B1X3N1cHBvcnQodm9pZCk7CisKKy8qIFJHQiAmIGV4dGVuZGVkIFJHQiAtLT4gWUNDIENvbG9yc3BhY2UgQ29udmVyc2lvbiAqLworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXgKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9tbXgKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9tbXgKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9zc2UyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfYXZ4MltdOworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfYXZ4MgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfYXZ4MgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X2F2eDIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfYXZ4MgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbmVvbgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X25lb24KKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfbmVvbgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X25lb24KKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfbmVvbgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9uZW9uCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X25lb24KKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworCitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X25lb25fc2xvd2xkMworICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X25lb25fc2xvd2xkMworICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfZHNwcjIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9kc3ByMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9kc3ByMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9tbWkKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X21taQorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9tbWkKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfYWx0aXZlYworICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CisKKy8qIFJHQiAmIGV4dGVuZGVkIFJHQiAtLT4gR3JheXNjYWxlIENvbG9yc3BhY2UgQ29udmVyc2lvbiAqLworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRyZ2JfZ3JheV9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdieF9ncmF5X2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyeF9ncmF5X2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9tbXgKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9zc2UyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRyZ2J4X2dyYXlfY29udmVydF9zc2UyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dGJncnhfZ3JheV9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfYXZ4MgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdieF9ncmF5X2NvbnZlcnRfYXZ4MgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyX2dyYXlfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHR4cmdiX2dyYXlfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfZHNwcjIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfZHNwcjIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9kc3ByMgorICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl9ncmF5X2NvbnZlcnRfZHNwcjIKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworICAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRyZ2J4X2dyYXlfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dGJncnhfZ3JheV9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworCisvKiBZQ0MgLS0+IFJHQiAmIGV4dGVuZGVkIFJHQiBDb2xvcnNwYWNlIENvbnZlcnNpb24gKi8KK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14CisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9tbXgKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9tbXgKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X21teAorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9zc2UyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfc3NlMgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X3NzZTIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X3ljY19yZ2JfY29udmVydF9hdngyW107CitFWFRFUk4odm9pZCkganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X2F2eDIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfYXZ4MgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X2F2eDIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9hdngyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworCitFWFRFUk4odm9pZCkganNpbWRfeWNjX3JnYl9jb252ZXJ0X25lb24KKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X25lb24KKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9uZW9uCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9uZW9uCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfbmVvbgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X25lb24KKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9uZW9uCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19yZ2I1NjVfY29udmVydF9uZW9uCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworCitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X25lb25fc2xvd3N0MworICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfbmVvbl9zbG93c3QzCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworCitFWFRFUk4odm9pZCkganNpbWRfeWNjX3JnYl9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbWkKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X21taQorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X21taQorICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfbW1pCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworCitFWFRFUk4odm9pZCkganNpbWRfeWNjX3JnYl9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfYWx0aXZlYworICAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cyk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9hbHRpdmVjCisgIChKRElNRU5TSU9OIG91dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpOworCisvKiBOVUxMIENvbG9yc3BhY2UgQ29udmVyc2lvbiAqLworRVhURVJOKHZvaWQpIGpzaW1kX2NfbnVsbF9jb252ZXJ0X2RzcHIyCisgIChKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzLCBpbnQgbnVtX2NvbXBvbmVudHMpOworCisvKiBoMnYxIERvd25zYW1wbGluZyAqLworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZG93bnNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMgorICAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCisgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZG93bnNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKyAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9kb3duc2FtcGxlX25lb24KKyAgKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfYWx0aXZlYworICAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCisgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKworLyogaDJ2MiBEb3duc2FtcGxpbmcgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbW14CisgIChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKyAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9kb3duc2FtcGxlX3NzZTIKKyAgKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfYXZ4MgorICAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCisgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZG93bnNhbXBsZV9uZW9uCisgIChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKyAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9kb3duc2FtcGxlX2RzcHIyCisgIChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKyAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9kb3duc2FtcGxlX21taQorICAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCisgICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZG93bnNhbXBsZV9hbHRpdmVjCisgIChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKyAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworCisvKiBoMnYyIFNtb290aCBEb3duc2FtcGxpbmcgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX3Ntb290aF9kb3duc2FtcGxlX2RzcHIyCisgIChKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEsIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKyAgIGludCBtYXhfdl9zYW1wX2ZhY3RvciwgaW50IHNtb290aGluZ19mYWN0b3IsIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLAorICAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aCk7CisKKworLyogVXBzYW1wbGluZyAqLworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfdXBzYW1wbGVfbW14CisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfdXBzYW1wbGVfbW14CisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyCisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMgorICAoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfdXBzYW1wbGVfYXZ4MgorICAoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX3Vwc2FtcGxlX2F2eDIKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX3Vwc2FtcGxlX2RzcHIyCisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfdXBzYW1wbGVfZHNwcjIKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pbnRfdXBzYW1wbGVfZHNwcjIKKyAgKFVJTlQ4IGhfZXhwYW5kLCBVSU5UOCB2X2V4cGFuZCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKyAgIGludCBtYXhfdl9zYW1wX2ZhY3Rvcik7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml91cHNhbXBsZV9hbHRpdmVjCisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworCisvKiBGYW5jeSBVcHNhbXBsaW5nICovCitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXgKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teAorICAoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyW107CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyCisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyCisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX2F2eDJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2F2eDIKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX2F2eDIKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbmVvbgorICAoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9kc3ByMgorICAoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfZHNwcjIKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfbW1pCisgIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKworLyogTWVyZ2VkIFVwc2FtcGxpbmcgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyW107CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9zc2UyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X21lcmdlZF91cHNhbXBsZV9hdngyW107CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9hdngyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpTQU1QTEUgKnJhbmdlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKU0FNUExFICpyYW5nZSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpTQU1QTEUgKnJhbmdlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKU0FNUExFICpyYW5nZSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpTQU1QTEUgKnJhbmdlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSlNBTVBMRSAqcmFuZ2UpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKU0FNUExFICpyYW5nZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpTQU1QTEUgKnJhbmdlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKU0FNUExFICpyYW5nZSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpTQU1QTEUgKnJhbmdlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKU0FNUExFICpyYW5nZSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9kc3ByMgorICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpTQU1QTEUgKnJhbmdlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSlNBTVBMRSAqcmFuZ2UpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKU0FNUExFICpyYW5nZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworICAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisgIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyAgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKworLyogU2FtcGxlIENvbnZlcnNpb24gKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9jb252c2FtcF9tbXgKKyAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBEQ1RFTEVNICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfc3NlMgorICAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIERDVEVMRU0gKndvcmtzcGFjZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9jb252c2FtcF9hdngyCisgIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgRENURUxFTSAqd29ya3NwYWNlKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2NvbnZzYW1wX25lb24KKyAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBEQ1RFTEVNICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfZHNwcjIKKyAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBEQ1RFTEVNICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfYWx0aXZlYworICAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIERDVEVMRU0gKndvcmtzcGFjZSk7CisKKy8qIEZsb2F0aW5nIFBvaW50IFNhbXBsZSBDb252ZXJzaW9uICovCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfZmxvYXRfM2Rub3cKKyAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfZmxvYXRfc3NlCisgIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIKKyAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfZmxvYXRfZHNwcjIKKyAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLCBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpOworCisvKiBTbG93IEludGVnZXIgRm9yd2FyZCBEQ1QgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X21teChEQ1RFTEVNICpkYXRhKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfZmRjdF9pc2xvd19zc2UyW107CitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9pc2xvd19zc2UyKERDVEVMRU0gKmRhdGEpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mZGN0X2lzbG93X2F2eDJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X2F2eDIoRENURUxFTSAqZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X25lb24oRENURUxFTSAqZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X2RzcHIyKERDVEVMRU0gKmRhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9pc2xvd19tbWkoRENURUxFTSAqZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X2FsdGl2ZWMoRENURUxFTSAqZGF0YSk7CisKKy8qIEZhc3QgSW50ZWdlciBGb3J3YXJkIERDVCAqLworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfaWZhc3RfbW14KERDVEVMRU0gKmRhdGEpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mZGN0X2lmYXN0X3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lmYXN0X3NzZTIoRENURUxFTSAqZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lmYXN0X25lb24oRENURUxFTSAqZGF0YSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lmYXN0X2RzcHIyKERDVEVMRU0gKmRhdGEpOworCitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9pZmFzdF9hbHRpdmVjKERDVEVMRU0gKmRhdGEpOworCisvKiBGbG9hdGluZyBQb2ludCBGb3J3YXJkIERDVCAqLworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3coRkFTVF9GTE9BVCAqZGF0YSk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZkY3RfZmxvYXRfc3NlW107CitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9mbG9hdF9zc2UoRkFTVF9GTE9BVCAqZGF0YSk7CisKKy8qIFF1YW50aXphdGlvbiAqLworRVhURVJOKHZvaWQpIGpzaW1kX3F1YW50aXplX21teAorICAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9zc2UyCisgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywgRENURUxFTSAqd29ya3NwYWNlKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3F1YW50aXplX2F2eDIKKyAgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLCBEQ1RFTEVNICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfcXVhbnRpemVfbmVvbgorICAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9kc3ByMgorICAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9tbWkKKyAgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLCBEQ1RFTEVNICp3b3Jrc3BhY2UpOworCitFWFRFUk4odm9pZCkganNpbWRfcXVhbnRpemVfYWx0aXZlYworICAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSk7CisKKy8qIEZsb2F0aW5nIFBvaW50IFF1YW50aXphdGlvbiAqLworRVhURVJOKHZvaWQpIGpzaW1kX3F1YW50aXplX2Zsb2F0XzNkbm93CisgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZQorICAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsIEZBU1RfRkxPQVQgKndvcmtzcGFjZSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyCisgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX3F1YW50aXplX2Zsb2F0X2RzcHIyCisgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICpkaXZpc29ycywgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKworLyogU2NhbGVkIEludmVyc2UgRENUICovCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF8yeDJfbW14CisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF80eDRfbW14CisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfcmVkX3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0XzJ4Ml9zc2UyCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF80eDRfc3NlMgorICAodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF8yeDJfbmVvbgorICAodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfNHg0X25lb24KKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfMngyX2RzcHIyCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF80eDRfZHNwcjIKKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sLCBpbnQgKndvcmtzcGFjZSk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF82eDZfZHNwcjIKKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0XzEyeDEyX3Bhc3MxX2RzcHIyCisgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCB2b2lkICpkY3RfdGFibGUsIGludCAqd29ya3NwYWNlKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0XzEyeDEyX3Bhc3MyX2RzcHIyCisgIChpbnQgKndvcmtzcGFjZSwgaW50ICpvdXRwdXQpOworCisvKiBTbG93IEludGVnZXIgSW52ZXJzZSBEQ1QgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lzbG93X21teAorICAodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9pZGN0X2lzbG93X3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lzbG93X3NzZTIKKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9pc2xvd19hdngyW107CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pc2xvd19hdngyCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lzbG93X25lb24KKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfaXNsb3dfZHNwcjIKKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgaW50ICpvdXRwdXRfYnVmLCBKU0FNUExFICpvdXRwdXRfY29sKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfaXNsb3dfbW1pCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lzbG93X2FsdGl2ZWMKKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworLyogRmFzdCBJbnRlZ2VyIEludmVyc2UgRENUICovCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pZmFzdF9tbXgKKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9pZmFzdF9zc2UyW107CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pZmFzdF9zc2UyCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2lmYXN0X25lb24KKyAgKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfaWZhc3RfY29sc19kc3ByMgorICAoSkNPRUYgKmlucHRyLCBJRkFTVF9NVUxUX1RZUEUgKnF1YW50cHRyLCBEQ1RFTEVNICp3c3B0ciwKKyAgIGNvbnN0IGludCAqaWRjdF9jb2Vmcyk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pZmFzdF9yb3dzX2RzcHIyCisgIChEQ1RFTEVNICp3c3B0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wsCisgICBjb25zdCBpbnQgKmlkY3RfY29lZnMpOworCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pZmFzdF9hbHRpdmVjCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKKy8qIEZsb2F0aW5nIFBvaW50IEludmVyc2UgRENUICovCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9mbG9hdF8zZG5vdworICAodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9pZGN0X2Zsb2F0X3NzZVtdOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfZmxvYXRfc3NlCisgICh2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfZmxvYXRfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfZmxvYXRfc3NlMgorICAodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpOworCisvKiBIdWZmbWFuIGNvZGluZyAqLworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaHVmZl9lbmNvZGVfb25lX2Jsb2NrW107CitFWFRFUk4oSk9DVEVUICopIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19zc2UyCisgICh2b2lkICpzdGF0ZSwgSk9DVEVUICpidWZmZXIsIEpDT0VGUFRSIGJsb2NrLCBpbnQgbGFzdF9kY192YWwsCisgICBjX2Rlcml2ZWRfdGJsICpkY3RibCwgY19kZXJpdmVkX3RibCAqYWN0YmwpOworCitFWFRFUk4oSk9DVEVUICopIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uCisgICh2b2lkICpzdGF0ZSwgSk9DVEVUICpidWZmZXIsIEpDT0VGUFRSIGJsb2NrLCBpbnQgbGFzdF9kY192YWwsCisgICBjX2Rlcml2ZWRfdGJsICpkY3RibCwgY19kZXJpdmVkX3RibCAqYWN0YmwpOworCitFWFRFUk4oSk9DVEVUICopIGpzaW1kX2h1ZmZfZW5jb2RlX29uZV9ibG9ja19uZW9uX3Nsb3d0YmwKKyAgKHZvaWQgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwgSkNPRUZQVFIgYmxvY2ssIGludCBsYXN0X2RjX3ZhbCwKKyAgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCk7CisKKy8qIFByb2dyZXNzaXZlIEh1ZmZtYW4gZW5jb2RpbmcgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmVfc3NlMgorICAoY29uc3QgSkNPRUYgKmJsb2NrLCBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLCBpbnQgQWwsCisgICBKQ09FRiAqdmFsdWVzLCBzaXplX3QgKnplcm9iaXRzKTsKKworRVhURVJOKGludCkganNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZV9zc2UyCisgIChjb25zdCBKQ09FRiAqYmxvY2ssIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LCBpbnQgU2wsIGludCBBbCwKKyAgIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cyk7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pjY29sZXh0LW1taS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qY2NvbGV4dC1tbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWM0ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qY2NvbGV4dC1tbWkuYwpAQCAtMCwwICsxLDQ2OSBAQAorLyoKKyAqIExvb25nc29uIE1NSSBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNywgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLCBCZWlKaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3JzOiAgWmh1Q2hlbiAgICAgPHpodWNoZW5AbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgU3VuWmhhbmd6aGkgPHN1bnpoYW5nemhpLWNxQGxvb25nc29uLmNuPgorICogICAgICAgICAgIENhaVdhbndlaSAgIDxjYWl3YW53ZWlAbG9vbmdzb24uY24+CisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBqY2NvbG9yLW1taS5jICovCisKKworI2lmIFJHQl9SRUQgPT0gMAorI2RlZmluZSBtbUEgIG1tMAorI2RlZmluZSBtbUIgIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDAKKyNkZWZpbmUgbW1BICBtbTIKKyNkZWZpbmUgbW1CICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDAKKyNkZWZpbmUgbW1BICBtbTQKKyNkZWZpbmUgbW1CICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tQSAgbW02CisjZGVmaW5lIG1tQiAgbW03CisjZW5kaWYKKworI2lmIFJHQl9SRUQgPT0gMQorI2RlZmluZSBtbUMgIG1tMAorI2RlZmluZSBtbUQgIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDEKKyNkZWZpbmUgbW1DICBtbTIKKyNkZWZpbmUgbW1EICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDEKKyNkZWZpbmUgbW1DICBtbTQKKyNkZWZpbmUgbW1EICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tQyAgbW02CisjZGVmaW5lIG1tRCAgbW03CisjZW5kaWYKKworI2lmIFJHQl9SRUQgPT0gMgorI2RlZmluZSBtbUUgIG1tMAorI2RlZmluZSBtbUYgIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDIKKyNkZWZpbmUgbW1FICBtbTIKKyNkZWZpbmUgbW1GICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDIKKyNkZWZpbmUgbW1FICBtbTQKKyNkZWZpbmUgbW1GICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tRSAgbW02CisjZGVmaW5lIG1tRiAgbW03CisjZW5kaWYKKworI2lmIFJHQl9SRUQgPT0gMworI2RlZmluZSBtbUcgIG1tMAorI2RlZmluZSBtbUggIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDMKKyNkZWZpbmUgbW1HICBtbTIKKyNkZWZpbmUgbW1IICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDMKKyNkZWZpbmUgbW1HICBtbTQKKyNkZWZpbmUgbW1IICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tRyAgbW02CisjZGVmaW5lIG1tSCAgbW03CisjZW5kaWYKKworCit2b2lkIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyMCwgb3V0cHRyMSwgb3V0cHRyMjsKKyAgaW50IG51bV9jb2xzLCBjb2w7CisgIF9fbTY0IG1tMCwgbW0xLCBtbTIsIG1tMywgbW00LCBtbTUsIG1tNiwgbW03OworICBfX202NCB3a1s3XTsKKyAgX19tNjQgWV9CRywgQ2JfUkcsIENyX0JHOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICBvdXRwdHIwID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIxID0gb3V0cHV0X2J1ZlsxXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdXRfcm93Kys7CisKKyAgICBmb3IgKG51bV9jb2xzID0gaW1hZ2Vfd2lkdGg7IG51bV9jb2xzID4gMDsgbnVtX2NvbHMgLT0gOCwKKyAgICAgICAgIG91dHB0cjAgKz0gOCwgb3V0cHRyMSArPSA4LCBvdXRwdHIyICs9IDgpIHsKKworI2lmIFJHQl9QSVhFTFNJWkUgPT0gMworCisgICAgICBpZiAobnVtX2NvbHMgPCA4KSB7CisgICAgICAgIGNvbCA9IG51bV9jb2xzICogMzsKKyAgICAgICAgYXNtKCIuc2V0IG5vcmVvcmRlclxyXG4iCisKKyAgICAgICAgICAgICJsaSAgICAgJDgsIDFcclxuIgorICAgICAgICAgICAgIm1vdmUgICAkOSwgJTNcclxuIgorICAgICAgICAgICAgImFuZCAgICAkMTAsICQ5LCAkOFxyXG4iCisgICAgICAgICAgICAiYmVxeiAgICQxMCwgMWZcclxuIgorICAgICAgICAgICAgIm5vcCAgICBcclxuIgorICAgICAgICAgICAgInN1YnUgICAkOSwgJDksIDFcclxuIgorICAgICAgICAgICAgInhvciAgICAkMTIsICQxMiwgJDEyXHJcbiIKKyAgICAgICAgICAgICJtb3ZlICAgJDEzLCAlNVxyXG4iCisgICAgICAgICAgICAiZGFkZCAgICQxMywgJDEzLCAkOVxyXG4iCisgICAgICAgICAgICAibGJ1ICAgICQxMiwgMCgkMTMpXHJcbiIKKworICAgICAgICAgICAgIjE6ICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAkOCwgMlxyXG4iCisgICAgICAgICAgICAiYW5kICAgICQxMCwgJDksICQ4XHJcbiIKKyAgICAgICAgICAgICJiZXF6ICAgJDEwLCAyZlxyXG4iCisgICAgICAgICAgICAibm9wICAgIFxyXG4iCisgICAgICAgICAgICAic3VidSAgICQ5LCAkOSwgMlxyXG4iCisgICAgICAgICAgICAieG9yICAgICQxMSwgJDExLCAkMTFcclxuIgorICAgICAgICAgICAgIm1vdmUgICAkMTMsICU1XHJcbiIKKyAgICAgICAgICAgICJkYWRkICAgJDEzLCAkMTMsICQ5XHJcbiIKKyAgICAgICAgICAgICJsaHUgICAgJDExLCAwKCQxMylcclxuIgorICAgICAgICAgICAgInNsbCAgICAkMTIsICQxMiwgMTZcclxuIgorICAgICAgICAgICAgIm9yICAgICAkMTIsICQxMiwgJDExXHJcbiIKKworICAgICAgICAgICAgIjI6ICAgICBcclxuIgorICAgICAgICAgICAgImRtdGMxICAkMTIsICUwXHJcbiIKKyAgICAgICAgICAgICJsaSAgICAgJDgsIDRcclxuIgorICAgICAgICAgICAgImFuZCAgICAkMTAsICQ5LCAkOFxyXG4iCisgICAgICAgICAgICAiYmVxeiAgICQxMCwgM2ZcclxuIgorICAgICAgICAgICAgIm5vcCAgICBcclxuIgorICAgICAgICAgICAgInN1YnUgICAkOSwgJDksIDRcclxuIgorICAgICAgICAgICAgIm1vdmUgICAkMTMsICU1XHJcbiIKKyAgICAgICAgICAgICJkYWRkICAgJDEzLCAkMTMsICQ5XHJcbiIKKyAgICAgICAgICAgICJsd3UgICAgJDE0LCAwKCQxMylcclxuIgorICAgICAgICAgICAgImRtdGMxICAkMTQsICUxXHJcbiIKKyAgICAgICAgICAgICJkc2xsMzIgJDEyLCAkMTIsIDBcclxuIgorICAgICAgICAgICAgIm9yICAgICAkMTIsICQxMiwgJDE0XHJcbiIKKyAgICAgICAgICAgICJkbXRjMSAgJDEyLCAlMFxyXG4iCisKKyAgICAgICAgICAgICIzOiAgICAgXHJcbiIKKyAgICAgICAgICAgICJsaSAgICAgJDgsIDhcclxuIgorICAgICAgICAgICAgImFuZCAgICAkMTAsICQ5LCAkOFxyXG4iCisgICAgICAgICAgICAiYmVxeiAgICQxMCwgNGZcclxuIgorICAgICAgICAgICAgIm5vcCAgICBcclxuIgorICAgICAgICAgICAgIm1vdi5zICAlMSwgJTBcclxuIgorICAgICAgICAgICAgImxkYzEgICAlMCwgMCglNSlcclxuIgorICAgICAgICAgICAgImxpICAgICAkOSwgOFxyXG4iCisgICAgICAgICAgICAiaiAgICAgIDVmXHJcbiIKKyAgICAgICAgICAgICJub3AgICAgXHJcbiIKKworICAgICAgICAgICAgIjQ6ICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAkOCwgMTZcclxuIgorICAgICAgICAgICAgImFuZCAgICAkMTAsICQ5LCAkOFxyXG4iCisgICAgICAgICAgICAiYmVxeiAgICQxMCwgNWZcclxuIgorICAgICAgICAgICAgIm5vcCAgICBcclxuIgorICAgICAgICAgICAgIm1vdi5zICAlMiwgJTBcclxuIgorICAgICAgICAgICAgImxkYzEgICAlMCwgMCglNSlcclxuIgorICAgICAgICAgICAgImxkYzEgICAlMSwgOCglNSlcclxuIgorCisgICAgICAgICAgICAiNTogICAgIFxyXG4iCisgICAgICAgICAgICAibm9wICAgIFxyXG4iCisgICAgICAgICAgICAiLnNldCByZW9yZGVyXHJcbiIKKworICAgICAgICAgICAgOiAiPWYiIChtbUEpLCAiPWYiIChtbUcpLCAiPWYiIChtbUYpCisgICAgICAgICAgICA6ICJyIiAoY29sKSwgInIiIChudW1fcm93cyksICJyIiAoaW5wdHIpCisgICAgICAgICAgICA6ICIkZjAiLCAiJGYyIiwgIiRmNCIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLAorICAgICAgICAgICAgICAiJDE0IiwgIm1lbW9yeSIKKyAgICAgICAgICAgKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1tQSA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmlucHRyWzBdKTsKKyAgICAgICAgbW1HID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmaW5wdHJbOF0pOworICAgICAgICBtbUYgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0clsxNl0pOworICAgICAgICBpbnB0ciArPSBSR0JfUElYRUxTSVpFICogODsKKyAgICAgIH0KKyAgICAgIG1tRCA9IG1tQTsKKyAgICAgIG1tQSA9IF9tbV9zbGxpX3NpNjQobW1BLCA0ICogQllURV9CSVQpOworICAgICAgbW1EID0gX21tX3NybGlfc2k2NChtbUQsIDQgKiBCWVRFX0JJVCk7CisKKyAgICAgIG1tQSA9IF9tbV91bnBhY2toaV9waTgobW1BLCBtbUcpOworICAgICAgbW1HID0gX21tX3NsbGlfc2k2NChtbUcsIDQgKiBCWVRFX0JJVCk7CisKKyAgICAgIG1tRCA9IF9tbV91bnBhY2tsb19waTgobW1ELCBtbUYpOworICAgICAgbW1HID0gX21tX3VucGFja2hpX3BpOChtbUcsIG1tRik7CisKKyAgICAgIG1tRSA9IG1tQTsKKyAgICAgIG1tQSA9IF9tbV9zbGxpX3NpNjQobW1BLCA0ICogQllURV9CSVQpOworICAgICAgbW1FID0gX21tX3NybGlfc2k2NChtbUUsIDQgKiBCWVRFX0JJVCk7CisKKyAgICAgIG1tQSA9IF9tbV91bnBhY2toaV9waTgobW1BLCBtbUQpOworICAgICAgbW1EID0gX21tX3NsbGlfc2k2NChtbUQsIDQgKiBCWVRFX0JJVCk7CisKKyAgICAgIG1tRSA9IF9tbV91bnBhY2tsb19waTgobW1FLCBtbUcpOworICAgICAgbW1EID0gX21tX3VucGFja2hpX3BpOChtbUQsIG1tRyk7CisgICAgICBtbUMgPSBtbUE7CisgICAgICBtbUEgPSBfbW1fbG9hZGxvX3BpOF9mKG1tQSk7CisgICAgICBtbUMgPSBfbW1fbG9hZGhpX3BpOF9mKG1tQyk7CisKKyAgICAgIG1tQiA9IG1tRTsKKyAgICAgIG1tRSA9IF9tbV9sb2FkbG9fcGk4X2YobW1FKTsKKyAgICAgIG1tQiA9IF9tbV9sb2FkaGlfcGk4X2YobW1CKTsKKworICAgICAgbW1GID0gbW1EOworICAgICAgbW1EID0gX21tX2xvYWRsb19waThfZihtbUQpOworICAgICAgbW1GID0gX21tX2xvYWRoaV9waThfZihtbUYpOworCisjZWxzZSAgLyogUkdCX1BJWEVMU0laRSA9PSA0ICovCisKKyAgICAgIGlmIChudW1fY29scyA8IDgpIHsKKyAgICAgICAgY29sID0gbnVtX2NvbHM7CisgICAgICAgIGFzbSgiLnNldCBub3Jlb3JkZXJcclxuIgorCisgICAgICAgICAgICAibGkgICAgICQ4LCAxXHJcbiIKKyAgICAgICAgICAgICJtb3ZlICAgJDksICU0XHJcbiIKKyAgICAgICAgICAgICJhbmQgICAgJDEwLCAkOSwgJDhcclxuIgorICAgICAgICAgICAgImJlcXogICAkMTAsIDFmXHJcbiIKKyAgICAgICAgICAgICJub3AgICAgXHJcbiIKKyAgICAgICAgICAgICJzdWJ1ICAgJDksICQ5LCAxXHJcbiIKKyAgICAgICAgICAgICJkc2xsICAgJDExLCAkOSwgMlxyXG4iCisgICAgICAgICAgICAibW92ZSAgICQxMywgJTVcclxuIgorICAgICAgICAgICAgImRhZGR1ICAkMTMsICQxMywgJDExXHJcbiIKKyAgICAgICAgICAgICJsd2MxICAgJTAsIDAoJDEzKVxyXG4iCisKKyAgICAgICAgICAgICIxOiAgICAgXHJcbiIKKyAgICAgICAgICAgICJsaSAgICAgJDgsIDJcclxuIgorICAgICAgICAgICAgImFuZCAgICAkMTAsICQ5LCAkOFxyXG4iCisgICAgICAgICAgICAiYmVxeiAgICQxMCwgMmZcclxuIgorICAgICAgICAgICAgIm5vcCAgICBcclxuIgorICAgICAgICAgICAgInN1YnUgICAkOSwgJDksIDJcclxuIgorICAgICAgICAgICAgImRzbGwgICAkMTEsICQ5LCAyXHJcbiIKKyAgICAgICAgICAgICJtb3ZlICAgJDEzLCAlNVxyXG4iCisgICAgICAgICAgICAiZGFkZHUgICQxMywgJDEzLCAkMTFcclxuIgorICAgICAgICAgICAgIm1vdi5zICAlMSwgJTBcclxuIgorICAgICAgICAgICAgImxkYzEgICAlMCwgMCgkMTMpXHJcbiIKKworICAgICAgICAgICAgIjI6ICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAkOCwgNFxyXG4iCisgICAgICAgICAgICAiYW5kICAgICQxMCwgJDksICQ4XHJcbiIKKyAgICAgICAgICAgICJiZXF6ICAgJDEwLCAzZlxyXG4iCisgICAgICAgICAgICAibm9wICAgIFxyXG4iCisgICAgICAgICAgICAibW92LnMgICUyLCAlMFxyXG4iCisgICAgICAgICAgICAibW92LnMgICUzLCAlMVxyXG4iCisgICAgICAgICAgICAibGRjMSAgICUwLCAwKCU1KVxyXG4iCisgICAgICAgICAgICAibGRjMSAgICUxLCA4KCU1KVxyXG4iCisKKyAgICAgICAgICAgICIzOiAgICAgXHJcbiIKKyAgICAgICAgICAgICJub3AgICAgXHJcbiIKKyAgICAgICAgICAgICIuc2V0IHJlb3JkZXJcclxuIgorCisgICAgICAgICAgICA6ICI9ZiIgKG1tQSksICI9ZiIgKG1tRiksICI9ZiIgKG1tRCksICI9ZiIgKG1tQykKKyAgICAgICAgICAgIDogInIiIChjb2wpLCAiciIgKGlucHRyKQorICAgICAgICAgICAgOiAiJGYwIiwgIiRmMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMyIsICJtZW1vcnkiCisgICAgICAgICAgICk7CisgICAgICB9IGVsc2UgeworICAgICAgICBtbUEgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0clswXSk7CisgICAgICAgIG1tRiA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmlucHRyWzhdKTsKKyAgICAgICAgbW1EID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmaW5wdHJbMTZdKTsKKyAgICAgICAgbW1DID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmaW5wdHJbMjRdKTsKKyAgICAgICAgaW5wdHIgKz0gUkdCX1BJWEVMU0laRSAqIDg7CisgICAgICB9CisgICAgICBtbUIgPSBtbUE7CisgICAgICBtbUEgPSBfbW1fdW5wYWNrbG9fcGk4KG1tQSwgbW1GKTsKKyAgICAgIG1tQiA9IF9tbV91bnBhY2toaV9waTgobW1CLCBtbUYpOworCisgICAgICBtbUcgPSBtbUQ7CisgICAgICBtbUQgPSBfbW1fdW5wYWNrbG9fcGk4KG1tRCwgbW1DKTsKKyAgICAgIG1tRyA9IF9tbV91bnBhY2toaV9waTgobW1HLCBtbUMpOworCisgICAgICBtbUUgPSBtbUE7CisgICAgICBtbUEgPSBfbW1fdW5wYWNrbG9fcGkxNihtbUEsIG1tRCk7CisgICAgICBtbUUgPSBfbW1fdW5wYWNraGlfcGkxNihtbUUsIG1tRCk7CisKKyAgICAgIG1tSCA9IG1tQjsKKyAgICAgIG1tQiA9IF9tbV91bnBhY2tsb19waTE2KG1tQiwgbW1HKTsKKyAgICAgIG1tSCA9IF9tbV91bnBhY2toaV9waTE2KG1tSCwgbW1HKTsKKworICAgICAgbW1DID0gbW1BOworICAgICAgbW1BID0gX21tX2xvYWRsb19waThfZihtbUEpOworICAgICAgbW1DID0gX21tX2xvYWRoaV9waThfZihtbUMpOworCisgICAgICBtbUQgPSBtbUI7CisgICAgICBtbUIgPSBfbW1fbG9hZGxvX3BpOF9mKG1tQik7CisgICAgICBtbUQgPSBfbW1fbG9hZGhpX3BpOF9mKG1tRCk7CisKKyAgICAgIG1tRyA9IG1tRTsKKyAgICAgIG1tRSA9IF9tbV9sb2FkbG9fcGk4X2YobW1FKTsKKyAgICAgIG1tRyA9IF9tbV9sb2FkaGlfcGk4X2YobW1HKTsKKworICAgICAgbW1GID0gbW1IOworICAgICAgbW1GID0gX21tX3VucGFja2xvX3BpOChtbUYsIG1tSCk7CisgICAgICBtbUggPSBfbW1fdW5wYWNraGlfcGk4KG1tSCwgbW1IKTsKKyAgICAgIG1tRiA9IF9tbV9zcmxpX3BpMTYobW1GLCBCWVRFX0JJVCk7CisgICAgICBtbUggPSBfbW1fc3JsaV9waTE2KG1tSCwgQllURV9CSVQpOworCisjZW5kaWYKKworICAgICAgd2tbMF0gPSBtbTA7CisgICAgICB3a1sxXSA9IG1tMTsKKyAgICAgIHdrWzJdID0gbW00OworICAgICAgd2tbM10gPSBtbTU7CisKKyAgICAgIG1tNiA9IG1tMTsKKyAgICAgIG1tMSA9IF9tbV91bnBhY2tsb19waTE2KG1tMSwgbW0zKTsKKyAgICAgIG1tNiA9IF9tbV91bnBhY2toaV9waTE2KG1tNiwgbW0zKTsKKyAgICAgIG1tNyA9IG1tMTsKKyAgICAgIG1tNCA9IG1tNjsKKyAgICAgIG1tMSA9IF9tbV9tYWRkX3BpMTYobW0xLCBQV19GMDI5OV9GMDMzNyk7CisgICAgICBtbTYgPSBfbW1fbWFkZF9waTE2KG1tNiwgUFdfRjAyOTlfRjAzMzcpOworICAgICAgbW03ID0gX21tX21hZGRfcGkxNihtbTcsIFBXX01GMDE2X01GMDMzKTsKKyAgICAgIG1tNCA9IF9tbV9tYWRkX3BpMTYobW00LCBQV19NRjAxNl9NRjAzMyk7CisKKyAgICAgIHdrWzRdID0gbW0xOworICAgICAgd2tbNV0gPSBtbTY7CisKKyAgICAgIG1tMSA9IF9tbV9sb2FkbG9fcGkxNl9mKG1tNSk7CisgICAgICBtbTYgPSBfbW1fbG9hZGhpX3BpMTZfZihtbTUpOworICAgICAgbW0xID0gX21tX3NybGlfcGkzMihtbTEsIDEpOworICAgICAgbW02ID0gX21tX3NybGlfcGkzMihtbTYsIDEpOworCisgICAgICBtbTUgPSBQRF9PTkVIQUxGTTFfQ0o7CisgICAgICBtbTcgPSBfbW1fYWRkX3BpMzIobW03LCBtbTEpOworICAgICAgbW00ID0gX21tX2FkZF9waTMyKG1tNCwgbW02KTsKKyAgICAgIG1tNyA9IF9tbV9hZGRfcGkzMihtbTcsIG1tNSk7CisgICAgICBtbTQgPSBfbW1fYWRkX3BpMzIobW00LCBtbTUpOworICAgICAgbW03ID0gX21tX3NybGlfcGkzMihtbTcsIFNDQUxFQklUUyk7CisgICAgICBtbTQgPSBfbW1fc3JsaV9waTMyKG1tNCwgU0NBTEVCSVRTKTsKKyAgICAgIG1tNyA9IF9tbV9wYWNrc19waTMyKG1tNywgbW00KTsKKworICAgICAgbW0xID0gd2tbMl07CisgICAgICBtbTYgPSBtbTA7CisgICAgICBtbTAgPSBfbW1fdW5wYWNrbG9fcGkxNihtbTAsIG1tMik7CisgICAgICBtbTYgPSBfbW1fdW5wYWNraGlfcGkxNihtbTYsIG1tMik7CisgICAgICBtbTUgPSBtbTA7CisgICAgICBtbTQgPSBtbTY7CisgICAgICBtbTAgPSBfbW1fbWFkZF9waTE2KG1tMCwgUFdfRjAyOTlfRjAzMzcpOworICAgICAgbW02ID0gX21tX21hZGRfcGkxNihtbTYsIFBXX0YwMjk5X0YwMzM3KTsKKyAgICAgIG1tNSA9IF9tbV9tYWRkX3BpMTYobW01LCBQV19NRjAxNl9NRjAzMyk7CisgICAgICBtbTQgPSBfbW1fbWFkZF9waTE2KG1tNCwgUFdfTUYwMTZfTUYwMzMpOworCisgICAgICB3a1s2XSA9IG1tMDsKKyAgICAgIHdrWzddID0gbW02OworICAgICAgbW0wID0gX21tX2xvYWRsb19waTE2X2YobW0xKTsKKyAgICAgIG1tNiA9IF9tbV9sb2FkaGlfcGkxNl9mKG1tMSk7CisgICAgICBtbTAgPSBfbW1fc3JsaV9waTMyKG1tMCwgMSk7CisgICAgICBtbTYgPSBfbW1fc3JsaV9waTMyKG1tNiwgMSk7CisKKyAgICAgIG1tMSA9IFBEX09ORUhBTEZNMV9DSjsKKyAgICAgIG1tNSA9IF9tbV9hZGRfcGkzMihtbTUsIG1tMCk7CisgICAgICBtbTQgPSBfbW1fYWRkX3BpMzIobW00LCBtbTYpOworICAgICAgbW01ID0gX21tX2FkZF9waTMyKG1tNSwgbW0xKTsKKyAgICAgIG1tNCA9IF9tbV9hZGRfcGkzMihtbTQsIG1tMSk7CisgICAgICBtbTUgPSBfbW1fc3JsaV9waTMyKG1tNSwgU0NBTEVCSVRTKTsKKyAgICAgIG1tNCA9IF9tbV9zcmxpX3BpMzIobW00LCBTQ0FMRUJJVFMpOworICAgICAgbW01ID0gX21tX3BhY2tzX3BpMzIobW01LCBtbTQpOworCisgICAgICBtbTcgPSBfbW1fc2xsaV9waTE2KG1tNywgQllURV9CSVQpOworICAgICAgbW01ICA9IF9tbV9vcl9zaTY0KG1tNSwgbW03KTsKKyAgICAgIENiX1JHID0gbW01OworCisgICAgICBtbTAgPSB3a1szXTsKKyAgICAgIG1tNiA9IHdrWzJdOworICAgICAgbW0xID0gd2tbMV07CisKKyAgICAgIG1tNCA9IG1tMDsKKyAgICAgIG1tMCA9IF9tbV91bnBhY2tsb19waTE2KG1tMCwgbW0zKTsKKyAgICAgIG1tNCA9IF9tbV91bnBhY2toaV9waTE2KG1tNCwgbW0zKTsKKyAgICAgIG1tNyA9IG1tMDsKKyAgICAgIG1tNSA9IG1tNDsKKyAgICAgIG1tMCA9IF9tbV9tYWRkX3BpMTYobW0wLCBQV19GMDExNF9GMDI1MCk7CisgICAgICBtbTQgPSBfbW1fbWFkZF9waTE2KG1tNCwgUFdfRjAxMTRfRjAyNTApOworICAgICAgbW03ID0gX21tX21hZGRfcGkxNihtbTcsIFBXX01GMDA4X01GMDQxKTsKKyAgICAgIG1tNSA9IF9tbV9tYWRkX3BpMTYobW01LCBQV19NRjAwOF9NRjA0MSk7CisKKyAgICAgIG1tMyA9IFBEX09ORUhBTEY7CisgICAgICBtbTAgPSBfbW1fYWRkX3BpMzIobW0wLCB3a1s0XSk7CisgICAgICBtbTQgPSBfbW1fYWRkX3BpMzIobW00LCB3a1s1XSk7CisgICAgICBtbTAgPSBfbW1fYWRkX3BpMzIobW0wLCBtbTMpOworICAgICAgbW00ID0gX21tX2FkZF9waTMyKG1tNCwgbW0zKTsKKyAgICAgIG1tMCA9IF9tbV9zcmxpX3BpMzIobW0wLCBTQ0FMRUJJVFMpOworICAgICAgbW00ID0gX21tX3NybGlfcGkzMihtbTQsIFNDQUxFQklUUyk7CisgICAgICBtbTAgPSBfbW1fcGFja3NfcGkzMihtbTAsIG1tNCk7CisKKyAgICAgIG1tMyA9IF9tbV9sb2FkbG9fcGkxNl9mKG1tMSk7CisgICAgICBtbTQgPSBfbW1fbG9hZGhpX3BpMTZfZihtbTEpOworICAgICAgbW0zID0gX21tX3NybGlfcGkzMihtbTMsIDEpOworICAgICAgbW00ID0gX21tX3NybGlfcGkzMihtbTQsIDEpOworCisgICAgICBtbTEgPSBQRF9PTkVIQUxGTTFfQ0o7CisgICAgICBtbTcgPSBfbW1fYWRkX3BpMzIobW03LCBtbTMpOworICAgICAgbW01ID0gX21tX2FkZF9waTMyKG1tNSwgbW00KTsKKyAgICAgIG1tNyA9IF9tbV9hZGRfcGkzMihtbTcsIG1tMSk7CisgICAgICBtbTUgPSBfbW1fYWRkX3BpMzIobW01LCBtbTEpOworICAgICAgbW03ID0gX21tX3NybGlfcGkzMihtbTcsIFNDQUxFQklUUyk7CisgICAgICBtbTUgPSBfbW1fc3JsaV9waTMyKG1tNSwgU0NBTEVCSVRTKTsKKyAgICAgIG1tNyA9IF9tbV9wYWNrc19waTMyKG1tNywgbW01KTsKKworICAgICAgbW0zID0gd2tbMF07CisgICAgICBtbTQgPSBtbTY7CisgICAgICBtbTYgPSBfbW1fdW5wYWNrbG9fcGkxNihtbTYsIG1tMik7CisgICAgICBtbTQgPSBfbW1fdW5wYWNraGlfcGkxNihtbTQsIG1tMik7CisgICAgICBtbTEgPSBtbTY7CisgICAgICBtbTUgPSBtbTQ7CisgICAgICBtbTYgPSBfbW1fbWFkZF9waTE2KG1tNiwgUFdfRjAxMTRfRjAyNTApOworICAgICAgbW00ID0gX21tX21hZGRfcGkxNihtbTQsIFBXX0YwMTE0X0YwMjUwKTsKKyAgICAgIG1tMSA9IF9tbV9tYWRkX3BpMTYobW0xLCBQV19NRjAwOF9NRjA0MSk7CisgICAgICBtbTUgPSBfbW1fbWFkZF9waTE2KG1tNSwgUFdfTUYwMDhfTUYwNDEpOworCisgICAgICBtbTIgPSBQRF9PTkVIQUxGOworICAgICAgbW02ID0gX21tX2FkZF9waTMyKG1tNiwgd2tbNl0pOworICAgICAgbW00ID0gX21tX2FkZF9waTMyKG1tNCwgd2tbN10pOworICAgICAgbW02ID0gX21tX2FkZF9waTMyKG1tNiwgbW0yKTsKKyAgICAgIG1tNCA9IF9tbV9hZGRfcGkzMihtbTQsIG1tMik7CisgICAgICBtbTYgPSBfbW1fc3JsaV9waTMyKG1tNiwgU0NBTEVCSVRTKTsKKyAgICAgIG1tNCA9IF9tbV9zcmxpX3BpMzIobW00LCBTQ0FMRUJJVFMpOworICAgICAgbW02ID0gX21tX3BhY2tzX3BpMzIobW02LCBtbTQpOworCisgICAgICBtbTAgPSBfbW1fc2xsaV9waTE2KG1tMCwgQllURV9CSVQpOworICAgICAgbW02ID0gX21tX29yX3NpNjQobW02LCBtbTApOworICAgICAgWV9CRyA9IG1tNjsKKworICAgICAgbW0yID0gX21tX2xvYWRsb19waTE2X2YobW0zKTsKKyAgICAgIG1tNCA9IF9tbV9sb2FkaGlfcGkxNl9mKG1tMyk7CisgICAgICBtbTIgPSBfbW1fc3JsaV9waTMyKG1tMiwgMSk7CisgICAgICBtbTQgPSBfbW1fc3JsaV9waTMyKG1tNCwgMSk7CisKKyAgICAgIG1tMCA9IFBEX09ORUhBTEZNMV9DSjsKKyAgICAgIG1tMSA9IF9tbV9hZGRfcGkzMihtbTEsIG1tMik7CisgICAgICBtbTUgPSBfbW1fYWRkX3BpMzIobW01LCBtbTQpOworICAgICAgbW0xID0gX21tX2FkZF9waTMyKG1tMSwgbW0wKTsKKyAgICAgIG1tNSA9IF9tbV9hZGRfcGkzMihtbTUsIG1tMCk7CisgICAgICBtbTEgPSBfbW1fc3JsaV9waTMyKG1tMSwgU0NBTEVCSVRTKTsKKyAgICAgIG1tNSA9IF9tbV9zcmxpX3BpMzIobW01LCBTQ0FMRUJJVFMpOworICAgICAgbW0xID0gX21tX3BhY2tzX3BpMzIobW0xLCBtbTUpOworCisgICAgICBtbTcgPSBfbW1fc2xsaV9waTE2KG1tNywgQllURV9CSVQpOworICAgICAgbW0xID0gX21tX29yX3NpNjQobW0xLCBtbTcpOworICAgICAgQ3JfQkcgPSBtbTE7CisKKyAgICAgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKSZvdXRwdHIwWzBdLCBZX0JHKTsKKyAgICAgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKSZvdXRwdHIxWzBdLCBDYl9SRyk7CisgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmb3V0cHRyMlswXSwgQ3JfQkcpOworICAgIH0KKyAgfQorfQorCisjdW5kZWYgbW1BCisjdW5kZWYgbW1CCisjdW5kZWYgbW1DCisjdW5kZWYgbW1ECisjdW5kZWYgbW1FCisjdW5kZWYgbW1GCisjdW5kZWYgbW1HCisjdW5kZWYgbW1ICmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pjY29sb3ItbW1pLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pjY29sb3ItbW1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlZjVjNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamNjb2xvci1tbWkuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIExvb25nc29uIE1NSSBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCwgQmVpSmluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXV0aG9yczogIFpodUNoZW4gICAgIDx6aHVjaGVuQGxvb25nc29uLmNuPgorICogICAgICAgICAgIENhaVdhbndlaSAgIDxjYWl3YW53ZWlAbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgU3VuWmhhbmd6aGkgPHN1bnpoYW5nemhpLWNxQGxvb25nc29uLmNuPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogUkdCIC0tPiBZQ0MgQ09OVkVSU0lPTiAqLworCisjaW5jbHVkZSAianNpbWRfbW1pLmgiCisKKworI2RlZmluZSBGXzBfMDgxICAoKHNob3J0KTUzMjkpICAgICAgICAgICAgICAgIC8qIEZJWCgwLjA4MTMxKSAqLworI2RlZmluZSBGXzBfMTE0ICAoKHNob3J0KTc0NzEpICAgICAgICAgICAgICAgIC8qIEZJWCgwLjExNDAwKSAqLworI2RlZmluZSBGXzBfMTY4ICAoKHNob3J0KTExMDU5KSAgICAgICAgICAgICAgIC8qIEZJWCgwLjE2ODc0KSAqLworI2RlZmluZSBGXzBfMjUwICAoKHNob3J0KTE2Mzg0KSAgICAgICAgICAgICAgIC8qIEZJWCgwLjI1MDAwKSAqLworI2RlZmluZSBGXzBfMjk5ICAoKHNob3J0KTE5NTk1KSAgICAgICAgICAgICAgIC8qIEZJWCgwLjI5OTAwKSAqLworI2RlZmluZSBGXzBfMzMxICAoKHNob3J0KTIxNzA5KSAgICAgICAgICAgICAgIC8qIEZJWCgwLjMzMTI2KSAqLworI2RlZmluZSBGXzBfNDE4ICAoKHNob3J0KTI3NDM5KSAgICAgICAgICAgICAgIC8qIEZJWCgwLjQxODY5KSAqLworI2RlZmluZSBGXzBfNTg3ICAoKHNob3J0KTM4NDcwKSAgICAgICAgICAgICAgIC8qIEZJWCgwLjU4NzAwKSAqLworI2RlZmluZSBGXzBfMzM3ICAoKHNob3J0KShGXzBfNTg3IC0gRl8wXzI1MCkpIC8qIEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKSAqLworCitlbnVtIGNvbnN0X2luZGV4IHsKKyAgaW5kZXhfUERfT05FSEFMRiwKKyAgaW5kZXhfUFdfRjAyOTlfRjAzMzcsCisgIGluZGV4X1BXX0YwMTE0X0YwMjUwLAorICBpbmRleF9QV19NRjAxNl9NRjAzMywKKyAgaW5kZXhfUFdfTUYwMDhfTUYwNDEsCisgIGluZGV4X1BEX09ORUhBTEZNMV9DSgorfTsKKworc3RhdGljIHVpbnQ2NF90IGNvbnN0X3ZhbHVlW10gPSB7CisgIF91aW50NjRfc2V0X3BpMzIoKGludCkoMSA8PCAoU0NBTEVCSVRTIC0gMSkpLCAoaW50KSgxIDw8IChTQ0FMRUJJVFMgLSAxKSkpLAorICBfdWludDY0X3NldF9waTE2KEZfMF8zMzcsIEZfMF8yOTksIEZfMF8zMzcsIEZfMF8yOTkpLAorICBfdWludDY0X3NldF9waTE2KEZfMF8yNTAsIEZfMF8xMTQsIEZfMF8yNTAsIEZfMF8xMTQpLAorICBfdWludDY0X3NldF9waTE2KC1GXzBfMzMxLCAtRl8wXzE2OCwgLUZfMF8zMzEsIC1GXzBfMTY4KSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigtRl8wXzQxOCwgLUZfMF8wODEsIC1GXzBfNDE4LCAtRl8wXzA4MSksCisgIF91aW50NjRfc2V0X3BpMzIoKCgxIDw8IChTQ0FMRUJJVFMgLSAxKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKSksCisgICAgICAgICAgICAgICAgICAgKCgxIDw8IChTQ0FMRUJJVFMgLSAxKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKSkpCit9OworCisjZGVmaW5lIGdldF9jb25zdF92YWx1ZShpbmRleCkgICgqKF9fbTY0ICopJmNvbnN0X3ZhbHVlW2luZGV4XSkKKworI2RlZmluZSBQRF9PTkVIQUxGICAgICAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QRF9PTkVIQUxGKQorI2RlZmluZSBQV19GMDI5OV9GMDMzNyAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19GMDI5OV9GMDMzNykKKyNkZWZpbmUgUFdfRjAxMTRfRjAyNTAgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfRjAxMTRfRjAyNTApCisjZGVmaW5lIFBXX01GMDE2X01GMDMzICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BXX01GMDE2X01GMDMzKQorI2RlZmluZSBQV19NRjAwOF9NRjA0MSAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19NRjAwOF9NRjA0MSkKKyNkZWZpbmUgUERfT05FSEFMRk0xX0NKICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUERfT05FSEFMRk0xX0NKKQorCisKKyNpbmNsdWRlICJqY2NvbGV4dC1tbWkuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyNkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21taSAganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X21taQorI2luY2x1ZGUgImpjY29sZXh0LW1taS5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW1pCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQlhfUkVECisjZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQlhfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JYX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkgIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfbW1pCisjaW5jbHVkZSAiamNjb2xleHQtbW1pLmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkKKworI2RlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorI2RlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW1pICBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW1pCisjaW5jbHVkZSAiamNjb2xleHQtbW1pLmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkKKworI2RlZmluZSBSR0JfUkVEICBFWFRfQkdSWF9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSWF9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX0JHUlhfQkxVRQorI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyNkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21taSAganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9tbWkKKyNpbmNsdWRlICJqY2NvbGV4dC1tbWkuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYganNpbWRfcmdiX3ljY19jb252ZXJ0X21taQorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorI2RlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW1pICBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X21taQorI2luY2x1ZGUgImpjY29sZXh0LW1taS5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW1pCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECisjZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkgIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW1pCisjaW5jbHVkZSAiamNjb2xleHQtbW1pLmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWkKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamNzYW1wbGUtbW1pLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pjc2FtcGxlLW1taS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmQ4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pjc2FtcGxlLW1taS5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogTG9vbmdzb24gTU1JIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNywgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLCBCZWlKaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3JzOiAgWmh1Q2hlbiAgICAgPHpodWNoZW5AbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgQ2FpV2Fud2VpICAgPGNhaXdhbndlaUBsb29uZ3Nvbi5jbj4KKyAqICAgICAgICAgICBTdW5aaGFuZ3poaSA8c3Vuemhhbmd6aGktY3FAbG9vbmdzb24uY24+CisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIENIUk9NQSBET1dOU0FNUExJTkcgKi8KKworI2luY2x1ZGUgImpzaW1kX21taS5oIgorI2luY2x1ZGUgImpjc2FtcGxlLmgiCisKKwordm9pZCBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbW1pKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBpbnQgaW5yb3csIG91dHJvdywgb3V0Y29sLCBiaWFzOworICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gd2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKKyAgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIG91dHB0cjsKKyAgX19tNjQgbW0wLCBtbTEsIG1tMiwgbW0zLCBtbTQsIG1tNSwgbW02ID0gMC4wLCBtbTc7CisKKyAgZXhwYW5kX3JpZ2h0X2VkZ2UoaW5wdXRfZGF0YSwgbWF4X3Zfc2FtcF9mYWN0b3IsIGltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29scyAqIDIpOworCisgIGJpYXMgPSAoMSA8PCAxNykgKyAxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDIwMDAxIChiaWFzIHBhdHRlcm4pICovCisgIG1tNyA9IF9tbV9zZXQxX3BpMzIoYmlhcyk7ICAgICAgICAgICAgICAgICAvKiBtbTc9ezEsIDIsIDEsIDJ9ICovCisgIG1tNiA9IF9tbV9jbXBlcV9waTE2KG1tNiwgbW02KTsKKyAgbW02ID0gX21tX3NybGlfcGkxNihtbTYsIEJZVEVfQklUKTsgICAgICAgIC8qIG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0gKi8KKworICBmb3IgKGlucm93ID0gMCwgb3V0cm93ID0gMDsgb3V0cm93IDwgdl9zYW1wX2ZhY3RvcjsKKyAgICAgICBpbnJvdyArPSAyLCBvdXRyb3crKykgeworCisgICAgaW5wdHIwID0gaW5wdXRfZGF0YVtpbnJvd107CisgICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdyArIDFdOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CisKKyAgICBmb3IgKG91dGNvbCA9IG91dHB1dF9jb2xzOyBvdXRjb2wgPiAwOworICAgICAgICAgb3V0Y29sIC09IDgsIGlucHRyMCArPSAxNiwgaW5wdHIxICs9IDE2LCBvdXRwdHIgKz0gOCkgeworCisgICAgICBtbTAgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cjBbMF0pOworICAgICAgbW0xID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmaW5wdHIxWzBdKTsKKyAgICAgIG1tMiA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmlucHRyMFs4XSk7CisgICAgICBtbTMgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cjFbOF0pOworCisgICAgICBtbTQgPSBtbTA7CisgICAgICBtbTUgPSBtbTE7CisgICAgICBtbTAgPSBfbW1fYW5kX3NpNjQobW0wLCBtbTYpOworICAgICAgbW00ID0gX21tX3NybGlfcGkxNihtbTQsIEJZVEVfQklUKTsKKyAgICAgIG1tMSA9IF9tbV9hbmRfc2k2NChtbTEsIG1tNik7CisgICAgICBtbTUgPSBfbW1fc3JsaV9waTE2KG1tNSwgQllURV9CSVQpOworICAgICAgbW0wID0gX21tX2FkZF9waTE2KG1tMCwgbW00KTsKKyAgICAgIG1tMSA9IF9tbV9hZGRfcGkxNihtbTEsIG1tNSk7CisKKyAgICAgIG1tNCA9IG1tMjsKKyAgICAgIG1tNSA9IG1tMzsKKyAgICAgIG1tMiA9IF9tbV9hbmRfc2k2NChtbTIsIG1tNik7CisgICAgICBtbTQgPSBfbW1fc3JsaV9waTE2KG1tNCwgQllURV9CSVQpOworICAgICAgbW0zID0gX21tX2FuZF9zaTY0KG1tMywgbW02KTsKKyAgICAgIG1tNSA9IF9tbV9zcmxpX3BpMTYobW01LCBCWVRFX0JJVCk7CisgICAgICBtbTIgPSBfbW1fYWRkX3BpMTYobW0yLCBtbTQpOworICAgICAgbW0zID0gX21tX2FkZF9waTE2KG1tMywgbW01KTsKKworICAgICAgbW0wID0gX21tX2FkZF9waTE2KG1tMCwgbW0xKTsKKyAgICAgIG1tMiA9IF9tbV9hZGRfcGkxNihtbTIsIG1tMyk7CisgICAgICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBtbTcpOworICAgICAgbW0yID0gX21tX2FkZF9waTE2KG1tMiwgbW03KTsKKyAgICAgIG1tMCA9IF9tbV9zcmxpX3BpMTYobW0wLCAyKTsKKyAgICAgIG1tMiA9IF9tbV9zcmxpX3BpMTYobW0yLCAyKTsKKworICAgICAgbW0wID0gX21tX3BhY2tzX3B1MTYobW0wLCBtbTIpOworCisgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmb3V0cHRyWzBdLCBtbTApOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qY3NhbXBsZS5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qY3NhbXBsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzQ4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pjc2FtcGxlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGpjc2FtcGxlLmgKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICovCisKK0xPQ0FMKHZvaWQpCitleHBhbmRfcmlnaHRfZWRnZShKU0FNUEFSUkFZIGltYWdlX2RhdGEsIGludCBudW1fcm93cywgSkRJTUVOU0lPTiBpbnB1dF9jb2xzLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29scykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKU0FNUExFIHBpeHZhbDsKKyAgcmVnaXN0ZXIgaW50IGNvdW50OworICBpbnQgcm93OworICBpbnQgbnVtY29scyA9IChpbnQpKG91dHB1dF9jb2xzIC0gaW5wdXRfY29scyk7CisKKyAgaWYgKG51bWNvbHMgPiAwKSB7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBudW1fcm93czsgcm93KyspIHsKKyAgICAgIHB0ciA9IGltYWdlX2RhdGFbcm93XSArIGlucHV0X2NvbHM7CisgICAgICBwaXh2YWwgPSBwdHJbLTFdOyAgICAgICAgIC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgIGZvciAoY291bnQgPSBudW1jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAgICpwdHIrKyA9IHBpeHZhbDsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamRjb2xleHQtbW1pLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pkY29sZXh0LW1taS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MGQ5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pkY29sZXh0LW1taS5jCkBAIC0wLDAgKzEsNDI0IEBACisvKgorICogTG9vbmdzb24gTU1JIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNywgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLCBCZWlKaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3JzOiAgWmh1Q2hlbiAgICAgPHpodWNoZW5AbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgU3VuWmhhbmd6aGkgPHN1bnpoYW5nemhpLWNxQGxvb25nc29uLmNuPgorICogICAgICAgICAgIENhaVdhbndlaSAgIDxjYWl3YW53ZWlAbG9vbmdzb24uY24+CisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBqZGNvbG9yLW1taS5jICovCisKKworI2lmIFJHQl9SRUQgPT0gMAorI2RlZmluZSBtbUEgIG1tMAorI2RlZmluZSBtbUIgIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDAKKyNkZWZpbmUgbW1BICBtbTIKKyNkZWZpbmUgbW1CICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDAKKyNkZWZpbmUgbW1BICBtbTQKKyNkZWZpbmUgbW1CICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tQSAgbW02CisjZGVmaW5lIG1tQiAgbW03CisjZW5kaWYKKworI2lmIFJHQl9SRUQgPT0gMQorI2RlZmluZSBtbUMgIG1tMAorI2RlZmluZSBtbUQgIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDEKKyNkZWZpbmUgbW1DICBtbTIKKyNkZWZpbmUgbW1EICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDEKKyNkZWZpbmUgbW1DICBtbTQKKyNkZWZpbmUgbW1EICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tQyAgbW02CisjZGVmaW5lIG1tRCAgbW03CisjZW5kaWYKKworI2lmIFJHQl9SRUQgPT0gMgorI2RlZmluZSBtbUUgIG1tMAorI2RlZmluZSBtbUYgIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDIKKyNkZWZpbmUgbW1FICBtbTIKKyNkZWZpbmUgbW1GICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDIKKyNkZWZpbmUgbW1FICBtbTQKKyNkZWZpbmUgbW1GICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tRSAgbW02CisjZGVmaW5lIG1tRiAgbW03CisjZW5kaWYKKworI2lmIFJHQl9SRUQgPT0gMworI2RlZmluZSBtbUcgIG1tMAorI2RlZmluZSBtbUggIG1tMQorI2VsaWYgUkdCX0dSRUVOID09IDMKKyNkZWZpbmUgbW1HICBtbTIKKyNkZWZpbmUgbW1IICBtbTMKKyNlbGlmIFJHQl9CTFVFID09IDMKKyNkZWZpbmUgbW1HICBtbTQKKyNkZWZpbmUgbW1IICBtbTUKKyNlbHNlCisjZGVmaW5lIG1tRyAgbW02CisjZGVmaW5lIG1tSCAgbW03CisjZW5kaWYKKworCit2b2lkIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbWkoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBKU0FNUFJPVyBvdXRwdHIsIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIGludCBudW1fY29scywgY29sOworICBfX202NCBtbTAsIG1tMSwgbW0yLCBtbTMsIG1tNCwgbW01LCBtbTYsIG1tNzsKKyAgX19tNjQgbW04LCB3a1syXTsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2lucHV0X3Jvd107CisgICAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2lucHV0X3Jvd107CisgICAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2lucHV0X3Jvd107CisgICAgaW5wdXRfcm93Kys7CisgICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsKKworICAgIGZvciAobnVtX2NvbHMgPSBvdXRfd2lkdGg7IG51bV9jb2xzID4gMDsgbnVtX2NvbHMgLT0gOCwKKyAgICAgICAgIGlucHRyMCArPSA4LCBpbnB0cjEgKz0gOCwgaW5wdHIyICs9IDgpIHsKKworICAgICAgbW01ID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKilpbnB0cjEpOworICAgICAgbW0xID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKilpbnB0cjIpOworICAgICAgbW04ID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKilpbnB0cjApOworICAgICAgbW00ID0gMDsKKyAgICAgIG1tNyA9IDA7CisgICAgICBtbTQgPSBfbW1fY21wZXFfcGkxNihtbTQsIG1tNCk7CisgICAgICBtbTcgPSBfbW1fY21wZXFfcGkxNihtbTcsIG1tNyk7CisgICAgICBtbTQgPSBfbW1fc3JsaV9waTE2KG1tNCwgQllURV9CSVQpOworICAgICAgbW03ID0gX21tX3NsbGlfcGkxNihtbTcsIDcpOyAgICAgIC8qIG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfSAqLworICAgICAgbW0wID0gbW00OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1tMD1tbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59ICovCisKKyAgICAgIG1tNCA9IF9tbV9hbmRfc2k2NChtbTQsIG1tNSk7ICAgICAgICAgICAvKiBtbTQ9Q2IoMDI0Nik9Q2JFICovCisgICAgICBtbTUgPSBfbW1fc3JsaV9waTE2KG1tNSwgQllURV9CSVQpOyAgICAgLyogbW01PUNiKDEzNTcpPUNiTyAqLworICAgICAgbW0wID0gX21tX2FuZF9zaTY0KG1tMCwgbW0xKTsgICAgICAgICAgIC8qIG1tMD1DcigwMjQ2KT1DckUgKi8KKyAgICAgIG1tMSA9IF9tbV9zcmxpX3BpMTYobW0xLCBCWVRFX0JJVCk7ICAgICAvKiBtbTE9Q3IoMTM1Nyk9Q3JPICovCisgICAgICBtbTQgPSBfbW1fYWRkX3BpMTYobW00LCBtbTcpOworICAgICAgbW01ID0gX21tX2FkZF9waTE2KG1tNSwgbW03KTsKKyAgICAgIG1tMCA9IF9tbV9hZGRfcGkxNihtbTAsIG1tNyk7CisgICAgICBtbTEgPSBfbW1fYWRkX3BpMTYobW0xLCBtbTcpOworCisgICAgICAvKiAoT3JpZ2luYWwpCisgICAgICAgKiBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorICAgICAgICogRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKyAgICAgICAqIEIgPSBZICsgMS43NzIwMCAqIENiCisgICAgICAgKgorICAgICAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgKiBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisgICAgICAgKiBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisgICAgICAgKiBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKyAgICAgICAqLworCisgICAgICBtbTIgPSBtbTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW0yID0gQ2JFICovCisgICAgICBtbTMgPSBtbTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW0zID0gQ2JPICovCisgICAgICBtbTQgPSBfbW1fYWRkX3BpMTYobW00LCBtbTQpOyAgICAgICAgICAgLyogbW00ID0gMipDYkUgKi8KKyAgICAgIG1tNSA9IF9tbV9hZGRfcGkxNihtbTUsIG1tNSk7ICAgICAgICAgICAvKiBtbTUgPSAyKkNiTyAqLworICAgICAgbW02ID0gbW0wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1tNiA9IENyRSAqLworICAgICAgbW03ID0gbW0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1tNyA9IENyTyAqLworICAgICAgbW0wID0gX21tX2FkZF9waTE2KG1tMCwgbW0wKTsgICAgICAgICAgIC8qIG1tMCA9IDIqQ3JFICovCisgICAgICBtbTEgPSBfbW1fYWRkX3BpMTYobW0xLCBtbTEpOyAgICAgICAgICAgLyogbW0xID0gMipDck8gKi8KKworICAgICAgbW00ID0gX21tX211bGhpX3BpMTYobW00LCBQV19NRjAyMjgpOyAgIC8qIG1tND0oMipDYkUgKiAtRklYKDAuMjI4MDApICovCisgICAgICBtbTUgPSBfbW1fbXVsaGlfcGkxNihtbTUsIFBXX01GMDIyOCk7ICAgLyogbW01PSgyKkNiTyAqIC1GSVgoMC4yMjgwMCkgKi8KKyAgICAgIG1tMCA9IF9tbV9tdWxoaV9waTE2KG1tMCwgUFdfRjA0MDIpOyAgICAvKiBtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKSAqLworICAgICAgbW0xID0gX21tX211bGhpX3BpMTYobW0xLCBQV19GMDQwMik7ICAgIC8qIG1tMT0oMipDck8gKiBGSVgoMC40MDIwMCkpICovCisKKyAgICAgIG1tNCA9IF9tbV9hZGRfcGkxNihtbTQsIFBXX09ORSk7CisgICAgICBtbTUgPSBfbW1fYWRkX3BpMTYobW01LCBQV19PTkUpOworICAgICAgbW00ID0gX21tX3NyYWlfcGkxNihtbTQsIDEpOyAgICAgICAgICAgIC8qIG1tND0oQ2JFICogLUZJWCgwLjIyODAwKSkgKi8KKyAgICAgIG1tNSA9IF9tbV9zcmFpX3BpMTYobW01LCAxKTsgICAgICAgICAgICAvKiBtbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpICovCisgICAgICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBQV19PTkUpOworICAgICAgbW0xID0gX21tX2FkZF9waTE2KG1tMSwgUFdfT05FKTsKKyAgICAgIG1tMCA9IF9tbV9zcmFpX3BpMTYobW0wLCAxKTsgICAgICAgICAgICAvKiBtbTA9KENyRSAqIEZJWCgwLjQwMjAwKSkgKi8KKyAgICAgIG1tMSA9IF9tbV9zcmFpX3BpMTYobW0xLCAxKTsgICAgICAgICAgICAvKiBtbTE9KENyTyAqIEZJWCgwLjQwMjAwKSkgKi8KKworICAgICAgbW00ID0gX21tX2FkZF9waTE2KG1tNCwgbW0yKTsKKyAgICAgIG1tNSA9IF9tbV9hZGRfcGkxNihtbTUsIG1tMyk7CisgICAgICBtbTQgPSBfbW1fYWRkX3BpMTYobW00LCBtbTIpOyAgICAgICAvKiBtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFICovCisgICAgICBtbTUgPSBfbW1fYWRkX3BpMTYobW01LCBtbTMpOyAgICAgICAvKiBtbTU9KENiTyAqIEZJWCgxLjc3MjAwKSk9KEItWSlPICovCisgICAgICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBtbTYpOyAgICAgICAvKiBtbTA9KENyRSAqIEZJWCgxLjQwMjAwKSk9KFItWSlFICovCisgICAgICBtbTEgPSBfbW1fYWRkX3BpMTYobW0xLCBtbTcpOyAgICAgICAvKiBtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPICovCisKKyAgICAgIHdrWzBdID0gbW00OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aygwKT0oQi1ZKUUgKi8KKyAgICAgIHdrWzFdID0gbW01OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aygxKT0oQi1ZKU8gKi8KKworICAgICAgbW00ID0gbW0yOworICAgICAgbW01ID0gbW0zOworICAgICAgbW0yID0gX21tX3VucGFja2xvX3BpMTYobW0yLCBtbTYpOworICAgICAgbW00ID0gX21tX3VucGFja2hpX3BpMTYobW00LCBtbTYpOworICAgICAgbW0yID0gX21tX21hZGRfcGkxNihtbTIsIFBXX01GMDM0NF9GMDI4NSk7CisgICAgICBtbTQgPSBfbW1fbWFkZF9waTE2KG1tNCwgUFdfTUYwMzQ0X0YwMjg1KTsKKyAgICAgIG1tMyA9IF9tbV91bnBhY2tsb19waTE2KG1tMywgbW03KTsKKyAgICAgIG1tNSA9IF9tbV91bnBhY2toaV9waTE2KG1tNSwgbW03KTsKKyAgICAgIG1tMyA9IF9tbV9tYWRkX3BpMTYobW0zLCBQV19NRjAzNDRfRjAyODUpOworICAgICAgbW01ID0gX21tX21hZGRfcGkxNihtbTUsIFBXX01GMDM0NF9GMDI4NSk7CisKKyAgICAgIG1tMiA9IF9tbV9hZGRfcGkzMihtbTIsIFBEX09ORUhBTEYpOworICAgICAgbW00ID0gX21tX2FkZF9waTMyKG1tNCwgUERfT05FSEFMRik7CisgICAgICBtbTIgPSBfbW1fc3JhaV9waTMyKG1tMiwgU0NBTEVCSVRTKTsKKyAgICAgIG1tNCA9IF9tbV9zcmFpX3BpMzIobW00LCBTQ0FMRUJJVFMpOworICAgICAgbW0zID0gX21tX2FkZF9waTMyKG1tMywgUERfT05FSEFMRik7CisgICAgICBtbTUgPSBfbW1fYWRkX3BpMzIobW01LCBQRF9PTkVIQUxGKTsKKyAgICAgIG1tMyA9IF9tbV9zcmFpX3BpMzIobW0zLCBTQ0FMRUJJVFMpOworICAgICAgbW01ID0gX21tX3NyYWlfcGkzMihtbTUsIFNDQUxFQklUUyk7CisKKyAgICAgIG1tMiA9IF9tbV9wYWNrc19waTMyKG1tMiwgbW00KTsgIC8qIG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKkZJWCgwLjI4NSkgKi8KKyAgICAgIG1tMyA9IF9tbV9wYWNrc19waTMyKG1tMywgbW01KTsgIC8qIG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKkZJWCgwLjI4NSkgKi8KKyAgICAgIG1tMiA9IF9tbV9zdWJfcGkxNihtbTIsIG1tNik7ICAvKiBtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUgKi8KKyAgICAgIG1tMyA9IF9tbV9zdWJfcGkxNihtbTMsIG1tNyk7ICAvKiBtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTyotRklYKDAuNzE0KT0oRy1ZKU8gKi8KKworICAgICAgbW01ID0gbW04OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1tNT1ZKDAxMjM0NTY3KSAqLworCisgICAgICBtbTQgPSBfbW1fY21wZXFfcGkxNihtbTQsIG1tNCk7CisgICAgICBtbTQgPSBfbW1fc3JsaV9waTE2KG1tNCwgQllURV9CSVQpOyAgICAvKiBtbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59ICovCisgICAgICBtbTQgPSBfbW1fYW5kX3NpNjQobW00LCBtbTUpOyAgICAgICAgICAvKiBtbTQ9WSgwMjQ2KT1ZRSAqLworICAgICAgbW01ID0gX21tX3NybGlfcGkxNihtbTUsIEJZVEVfQklUKTsgICAgLyogbW01PVkoMTM1Nyk9WU8gKi8KKworICAgICAgbW0wID0gX21tX2FkZF9waTE2KG1tMCwgbW00KTsgICAgICAvKiBtbTA9KChSLVkpRStZRSk9UkU9KFIwIFIyIFI0IFI2KSAqLworICAgICAgbW0xID0gX21tX2FkZF9waTE2KG1tMSwgbW01KTsgICAgICAvKiBtbTE9KChSLVkpTytZTyk9Uk89KFIxIFIzIFI1IFI3KSAqLworICAgICAgbW0wID0gX21tX3BhY2tzX3B1MTYobW0wLCBtbTApOyAgICAvKiBtbTA9KFIwIFIyIFI0IFI2ICoqICoqICoqICoqKSAqLworICAgICAgbW0xID0gX21tX3BhY2tzX3B1MTYobW0xLCBtbTEpOyAgICAvKiBtbTE9KFIxIFIzIFI1IFI3ICoqICoqICoqICoqKSAqLworCisgICAgICBtbTIgPSBfbW1fYWRkX3BpMTYobW0yLCBtbTQpOyAgICAgIC8qIG1tMj0oKEctWSlFK1lFKT1HRT0oRzAgRzIgRzQgRzYpICovCisgICAgICBtbTMgPSBfbW1fYWRkX3BpMTYobW0zLCBtbTUpOyAgICAgIC8qIG1tMz0oKEctWSlPK1lPKT1HTz0oRzEgRzMgRzUgRzcpICovCisgICAgICBtbTIgPSBfbW1fcGFja3NfcHUxNihtbTIsIG1tMik7ICAgIC8qIG1tMj0oRzAgRzIgRzQgRzYgKiogKiogKiogKiopICovCisgICAgICBtbTMgPSBfbW1fcGFja3NfcHUxNihtbTMsIG1tMyk7ICAgIC8qIG1tMz0oRzEgRzMgRzUgRzcgKiogKiogKiogKiopICovCisKKyAgICAgIG1tNCA9IF9tbV9hZGRfcGkxNihtbTQsIHdrWzBdKTsgICAgLyogbW00PShZRSsoQi1ZKUUpPUJFPShCMCBCMiBCNCBCNikgKi8KKyAgICAgIG1tNSA9IF9tbV9hZGRfcGkxNihtbTUsIHdrWzFdKTsgICAgLyogbW01PShZTysoQi1ZKU8pPUJPPShCMSBCMyBCNSBCNykgKi8KKyAgICAgIG1tNCA9IF9tbV9wYWNrc19wdTE2KG1tNCwgbW00KTsgICAgLyogbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikgKi8KKyAgICAgIG1tNSA9IF9tbV9wYWNrc19wdTE2KG1tNSwgbW01KTsgICAgLyogbW01PShCMSBCMyBCNSBCNyAqKiAqKiAqKiAqKikgKi8KKworI2lmIFJHQl9QSVhFTFNJWkUgPT0gMworCisgICAgICAvKiBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikgKi8KKyAgICAgIC8qIG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKSAqLworICAgICAgbW1BID0gX21tX3VucGFja2xvX3BpOChtbUEsIG1tQyk7ICAgICAvKiBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KSAqLworICAgICAgbW1FID0gX21tX3VucGFja2xvX3BpOChtbUUsIG1tQik7ICAgICAvKiBtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3KSAqLworICAgICAgbW1EID0gX21tX3VucGFja2xvX3BpOChtbUQsIG1tRik7ICAgICAvKiBtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3KSAqLworCisgICAgICBtbUcgPSBtbUE7CisgICAgICBtbUggPSBtbUE7CisgICAgICBtbUEgPSBfbW1fdW5wYWNrbG9fcGkxNihtbUEsIG1tRSk7ICAgIC8qIG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpICovCisgICAgICBtbUcgPSBfbW1fdW5wYWNraGlfcGkxNihtbUcsIG1tRSk7ICAgIC8qIG1tRz0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpICovCisKKyAgICAgIG1tSCA9IF9tbV9zcmxpX3NpNjQobW1ILCAyICogQllURV9CSVQpOworICAgICAgbW1FID0gX21tX3NybGlfc2k2NChtbUUsIDIgKiBCWVRFX0JJVCk7CisKKyAgICAgIG1tQyA9IG1tRDsKKyAgICAgIG1tQiA9IG1tRDsKKyAgICAgIG1tRCA9IF9tbV91bnBhY2tsb19waTE2KG1tRCwgbW1IKTsgICAgLyogbW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCkgKi8KKyAgICAgIG1tQyA9IF9tbV91bnBhY2toaV9waTE2KG1tQywgbW1IKTsgICAgLyogbW1DPSgxNSAyNSAwNiAxNiAxNyAyNyAtLSAtLSkgKi8KKworICAgICAgbW1CID0gX21tX3NybGlfc2k2NChtbUIsIDIgKiBCWVRFX0JJVCk7IC8qIG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pICovCisKKyAgICAgIG1tRiA9IG1tRTsKKyAgICAgIG1tRSA9IF9tbV91bnBhY2tsb19waTE2KG1tRSwgbW1CKTsgICAgLyogbW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSkgKi8KKyAgICAgIG1tRiA9IF9tbV91bnBhY2toaV9waTE2KG1tRiwgbW1CKTsgICAgLyogbW1GPSgyNiAwNyAxNyAyNyAtLSAtLSAtLSAtLSkgKi8KKworICAgICAgbW1BID0gX21tX3VucGFja2xvX3BpMzIobW1BLCBtbUQpOyAgICAvKiBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKSAqLworICAgICAgbW1FID0gX21tX3VucGFja2xvX3BpMzIobW1FLCBtbUcpOyAgICAvKiBtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KSAqLworICAgICAgbW1DID0gX21tX3VucGFja2xvX3BpMzIobW1DLCBtbUYpOyAgICAvKiBtbUM9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KSAqLworCisgICAgICBpZiAobnVtX2NvbHMgPj0gOCkgeworICAgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKilvdXRwdHIsIG1tQSk7CisgICAgICAgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKShvdXRwdHIgKyA4KSwgbW1FKTsKKyAgICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopKG91dHB0ciArIDE2KSwgbW1DKTsKKyAgICAgICAgb3V0cHRyICs9IFJHQl9QSVhFTFNJWkUgKiA4OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29sID0gbnVtX2NvbHMgKiAzOworICAgICAgICBhc20oIi5zZXQgbm9yZW9yZGVyXHJcbiIKKworICAgICAgICAgICAgImxpICAgICAgJDgsIDE2XHJcbiIKKyAgICAgICAgICAgICJtb3ZlICAgICQ5LCAlNFxyXG4iCisgICAgICAgICAgICAibW92LnMgICAkZjQsICUxXHJcbiIKKyAgICAgICAgICAgICJtb3YucyAgICRmNiwgJTNcclxuIgorICAgICAgICAgICAgIm1vdmUgICAgJDEwLCAlNVxyXG4iCisgICAgICAgICAgICAiYmx0dSAgICAkOSwgJDgsIDFmXHJcbiIKKyAgICAgICAgICAgICJub3AgICAgIFxyXG4iCisgICAgICAgICAgICAiZ3NzZGxjMSAkZjQsIDcoJDEwKVxyXG4iCisgICAgICAgICAgICAiZ3NzZHJjMSAkZjQsIDAoJDEwKVxyXG4iCisgICAgICAgICAgICAiZ3NzZGxjMSAkZjYsIDcrOCgkMTApXHJcbiIKKyAgICAgICAgICAgICJnc3NkcmMxICRmNiwgOCgkMTApXHJcbiIKKyAgICAgICAgICAgICJtb3YucyAgICRmNCwgJTJcclxuIgorICAgICAgICAgICAgInN1YnUgICAgJDksICQ5LCAxNlxyXG4iCisgICAgICAgICAgICAiZGFkZHUgICAkMTAsICQxMCwgMTZcclxuIgorICAgICAgICAgICAgImIgICAgICAgMmZcclxuIgorICAgICAgICAgICAgIm5vcCAgICAgXHJcbiIKKworICAgICAgICAgICAgIjE6ICAgICAgXHJcbiIKKyAgICAgICAgICAgICJsaSAgICAgICQ4LCA4XHJcbiIgICAgICAgICAgICAgICAvKiBzdDggKi8KKyAgICAgICAgICAgICJibHR1ICAgICQ5LCAkOCwgMmZcclxuIgorICAgICAgICAgICAgIm5vcCAgICAgXHJcbiIKKyAgICAgICAgICAgICJnc3NkbGMxICRmNCwgNygkMTApXHJcbiIKKyAgICAgICAgICAgICJnc3NkcmMxICRmNCwgKCQxMClcclxuIgorICAgICAgICAgICAgIm1vdi5zICAgJGY0LCAlM1xyXG4iCisgICAgICAgICAgICAic3VidSAgICAkOSwgJDksIDhcclxuIgorICAgICAgICAgICAgImRhZGR1ICAgJDEwLCAkMTAsIDhcclxuIgorCisgICAgICAgICAgICAiMjogICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAgJDgsIDRcclxuIiAgICAgICAgICAgICAgIC8qIHN0NCAqLworICAgICAgICAgICAgIm1mYzEgICAgJDExLCAkZjRcclxuIgorICAgICAgICAgICAgImJsdHUgICAgJDksICQ4LCAzZlxyXG4iCisgICAgICAgICAgICAibm9wICAgICBcclxuIgorICAgICAgICAgICAgInN3bCAgICAgJDExLCAzKCQxMClcclxuIgorICAgICAgICAgICAgInN3ciAgICAgJDExLCAwKCQxMClcclxuIgorICAgICAgICAgICAgImxpICAgICAgJDgsIDMyXHJcbiIKKyAgICAgICAgICAgICJtdGMxICAgICQ4LCAkZjZcclxuIgorICAgICAgICAgICAgImRzcmwgICAgJGY0LCAkZjQsICRmNlxyXG4iCisgICAgICAgICAgICAibWZjMSAgICAkMTEsICRmNFxyXG4iCisgICAgICAgICAgICAic3VidSAgICAkOSwgJDksIDRcclxuIgorICAgICAgICAgICAgImRhZGR1ICAgJDEwLCAkMTAsIDRcclxuIgorCisgICAgICAgICAgICAiMzogICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAgJDgsIDJcclxuIiAgICAgICAgICAgICAgIC8qIHN0MiAqLworICAgICAgICAgICAgImJsdHUgICAgJDksICQ4LCA0ZlxyXG4iCisgICAgICAgICAgICAibm9wICAgICBcclxuIgorICAgICAgICAgICAgInVzaCAgICAgJDExLCAwKCQxMClcclxuIgorICAgICAgICAgICAgInNybCAgICAgJDExLCAxNlxyXG4iCisgICAgICAgICAgICAic3VidSAgICAkOSwgJDksIDJcclxuIgorICAgICAgICAgICAgImRhZGR1ICAgJDEwLCAkMTAsIDJcclxuIgorCisgICAgICAgICAgICAiNDogICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAgJDgsIDFcclxuIiAgICAgICAgICAgICAgIC8qIHN0MSAqLworICAgICAgICAgICAgImJsdHUgICAgJDksICQ4LCA1ZlxyXG4iCisgICAgICAgICAgICAibm9wICAgICBcclxuIgorICAgICAgICAgICAgInNiICAgICAgJDExLCAwKCQxMClcclxuIgorCisgICAgICAgICAgICAiNTogICAgICBcclxuIgorICAgICAgICAgICAgIm5vcCAgICAgXHJcbiIgICAgICAgICAgICAgICAgICAgIC8qIGVuZCAqLworICAgICAgICAgICAgOiAiPW0iICgqb3V0cHRyKQorICAgICAgICAgICAgOiAiZiIgKG1tQSksICJmIiAobW1DKSwgImYiIChtbUUpLCAiciIgKGNvbCksICJyIiAob3V0cHRyKQorICAgICAgICAgICAgOiAiJGY0IiwgIiRmNiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIm1lbW9yeSIKKyAgICAgICAgICAgKTsKKyAgICAgIH0KKworI2Vsc2UgIC8qIFJHQl9QSVhFTFNJWkUgPT0gNCAqLworCisjaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgorICAgICAgbW02ID0gX21tX2NtcGVxX3BpOChtbTYsIG1tNik7CisgICAgICBtbTcgPSBfbW1fY21wZXFfcGk4KG1tNywgbW03KTsKKyNlbHNlCisgICAgICBtbTYgPSBfbW1feG9yX3NpNjQobW02LCBtbTYpOworICAgICAgbW03ID0gX21tX3hvcl9zaTY0KG1tNywgbW03KTsKKyNlbmRpZgorICAgICAgLyogbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopICovCisgICAgICAvKiBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikgKi8KKyAgICAgIC8qIG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKSAqLworICAgICAgLyogbW1HPSgzMCAzMiAzNCAzNiAqKiAqKiAqKiAqKiksIG1tSD0oMzEgMzMgMzUgMzcgKiogKiogKiogKiopICovCisKKyAgICAgIG1tQSA9IF9tbV91bnBhY2tsb19waTgobW1BLCBtbUMpOyAgICAgLyogbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikgKi8KKyAgICAgIG1tRSA9IF9tbV91bnBhY2tsb19waTgobW1FLCBtbUcpOyAgICAgLyogbW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNikgKi8KKyAgICAgIG1tQiA9IF9tbV91bnBhY2tsb19waTgobW1CLCBtbUQpOyAgICAgLyogbW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNykgKi8KKyAgICAgIG1tRiA9IF9tbV91bnBhY2tsb19waTgobW1GLCBtbUgpOyAgICAgLyogbW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNykgKi8KKworICAgICAgbW1DID0gbW1BOworICAgICAgbW1BID0gX21tX3VucGFja2xvX3BpMTYobW1BLCBtbUUpOyAgICAvKiBtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKSAqLworICAgICAgbW1DID0gX21tX3VucGFja2hpX3BpMTYobW1DLCBtbUUpOyAgICAvKiBtbUM9KDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KSAqLworICAgICAgbW1HID0gbW1COworICAgICAgbW1CID0gX21tX3VucGFja2xvX3BpMTYobW1CLCBtbUYpOyAgICAvKiBtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKSAqLworICAgICAgbW1HID0gX21tX3VucGFja2hpX3BpMTYobW1HLCBtbUYpOyAgICAvKiBtbUc9KDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KSAqLworCisgICAgICBtbUQgPSBtbUE7CisgICAgICBtbUEgPSBfbW1fdW5wYWNrbG9fcGkzMihtbUEsIG1tQik7ICAgIC8qIG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpICovCisgICAgICBtbUQgPSBfbW1fdW5wYWNraGlfcGkzMihtbUQsIG1tQik7ICAgIC8qIG1tRD0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpICovCisgICAgICBtbUggPSBtbUM7CisgICAgICBtbUMgPSBfbW1fdW5wYWNrbG9fcGkzMihtbUMsIG1tRyk7ICAgIC8qIG1tQz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpICovCisgICAgICBtbUggPSBfbW1fdW5wYWNraGlfcGkzMihtbUgsIG1tRyk7ICAgIC8qIG1tSD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpICovCisKKyAgICAgIGlmIChudW1fY29scyA+PSA4KSB7CisgICAgICAgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKW91dHB0ciwgbW1BKTsKKyAgICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopKG91dHB0ciArIDgpLCBtbUQpOworICAgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikob3V0cHRyICsgMTYpLCBtbUMpOworICAgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikob3V0cHRyICsgMjQpLCBtbUgpOworICAgICAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRSAqIDg7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb2wgPSBudW1fY29sczsKKyAgICAgICAgYXNtKCIuc2V0IG5vcmVvcmRlclxyXG4iICAgICAgICAgICAgICAvKiBzdDE2ICovCisKKyAgICAgICAgICAgICJsaSAgICAgICQ4LCA0XHJcbiIKKyAgICAgICAgICAgICJtb3ZlICAgICQ5LCAlNlxyXG4iCisgICAgICAgICAgICAibW92ZSAgICAkMTAsICU3XHJcbiIKKyAgICAgICAgICAgICJtb3YucyAgICRmNCwgJTJcclxuIgorICAgICAgICAgICAgIm1vdi5zICAgJGY2LCAlNFxyXG4iCisgICAgICAgICAgICAiYmx0dSAgICAkOSwgJDgsIDFmXHJcbiIKKyAgICAgICAgICAgICJub3AgICAgIFxyXG4iCisgICAgICAgICAgICAiZ3NzZGxjMSAkZjQsIDcoJDEwKVxyXG4iCisgICAgICAgICAgICAiZ3NzZHJjMSAkZjQsICgkMTApXHJcbiIKKyAgICAgICAgICAgICJnc3NkbGMxICRmNiwgNys4KCQxMClcclxuIgorICAgICAgICAgICAgImdzc2RyYzEgJGY2LCA4KCQxMClcclxuIgorICAgICAgICAgICAgIm1vdi5zICAgJGY0LCAlM1xyXG4iCisgICAgICAgICAgICAibW92LnMgICAkZjYsICU1XHJcbiIKKyAgICAgICAgICAgICJzdWJ1ICAgICQ5LCAkOSwgNFxyXG4iCisgICAgICAgICAgICAiZGFkZHUgICAkMTAsICQxMCwgMTZcclxuIgorCisgICAgICAgICAgICAiMTogICAgICBcclxuIgorICAgICAgICAgICAgImxpICAgICAgJDgsIDJcclxuIiAgICAgICAgICAgICAgIC8qIHN0OCAqLworICAgICAgICAgICAgImJsdHUgICAgJDksICQ4LCAyZlxyXG4iCisgICAgICAgICAgICAibm9wICAgICBcclxuIgorICAgICAgICAgICAgImdzc2RsYzEgJGY0LCA3KCQxMClcclxuIgorICAgICAgICAgICAgImdzc2RyYzEgJGY0LCAwKCQxMClcclxuIgorICAgICAgICAgICAgIm1vdi5zICAgJGY0LCAkZjZcclxuIgorICAgICAgICAgICAgInN1YnUgICAgJDksICQ5LCAyXHJcbiIKKyAgICAgICAgICAgICJkYWRkdSAgICQxMCwgJDEwLCA4XHJcbiIKKworICAgICAgICAgICAgIjI6ICAgICAgXHJcbiIKKyAgICAgICAgICAgICJsaSAgICAgICQ4LCAxXHJcbiIgICAgICAgICAgICAgICAvKiBzdDQgKi8KKyAgICAgICAgICAgICJibHR1ICAgICQ5LCAkOCwgM2ZcclxuIgorICAgICAgICAgICAgIm5vcCAgICAgXHJcbiIKKyAgICAgICAgICAgICJnc3N3bGMxICRmNCwgMygkMTApXHJcbiIKKyAgICAgICAgICAgICJnc3N3cmMxICRmNCwgMCgkMTApXHJcbiIKKworICAgICAgICAgICAgIjM6ICAgICAgXHJcbiIKKyAgICAgICAgICAgICJsaSAgICAgICUxLCAwXHJcbiIgICAgICAgICAgICAgICAvKiBlbmQgKi8KKyAgICAgICAgICAgIDogIj1tIiAoKm91dHB0ciksICI9ciIgKGNvbCkKKyAgICAgICAgICAgIDogImYiIChtbUEpLCAiZiIgKG1tQyksICJmIiAobW1EKSwgImYiIChtbUgpLCAiciIgKGNvbCksCisgICAgICAgICAgICAgICJyIiAob3V0cHRyKQorICAgICAgICAgICAgOiAiJGY0IiwgIiRmNiIsICIkOCIsICIkOSIsICIkMTAiLCAibWVtb3J5IgorICAgICAgICAgICApOworICAgICAgfQorCisjZW5kaWYKKworICAgIH0KKyAgfQorfQorCisjdW5kZWYgbW1BCisjdW5kZWYgbW1CCisjdW5kZWYgbW1DCisjdW5kZWYgbW1ECisjdW5kZWYgbW1FCisjdW5kZWYgbW1GCisjdW5kZWYgbW1HCisjdW5kZWYgbW1ICmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pkY29sb3ItbW1pLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pkY29sb3ItbW1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1ODI2MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamRjb2xvci1tbWkuYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIExvb25nc29uIE1NSSBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCwgQmVpSmluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXV0aG9yczogIFpodUNoZW4gICAgIDx6aHVjaGVuQGxvb25nc29uLmNuPgorICogICAgICAgICAgIENhaVdhbndlaSAgIDxjYWl3YW53ZWlAbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgU3VuWmhhbmd6aGkgPHN1bnpoYW5nemhpLWNxQGxvb25nc29uLmNuPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogWUNDIC0tPiBSR0IgQ09OVkVSU0lPTiAqLworCisjaW5jbHVkZSAianNpbWRfbW1pLmgiCisKKworI2RlZmluZSBGXzBfMzQ0ICAoKHNob3J0KTIyNTU0KSAgLyogRklYKDAuMzQ0MTQpICovCisjZGVmaW5lIEZfMF80MDIgICgoc2hvcnQpMjYzNDUpICAvKiBGSVgoMS40MDIwMCkgLSBGSVgoMSkgKi8KKyNkZWZpbmUgRl8wXzI4NSAgKChzaG9ydCkxODczNCkgIC8qIEZJWCgxKSAtIEZJWCgwLjcxNDE0KSAqLworI2RlZmluZSBGXzBfMjI4ICAoKHNob3J0KTE0OTQyKSAgLyogRklYKDIpIC0gRklYKDEuNzcyMDApICovCisKK2VudW0gY29uc3RfaW5kZXggeworICBpbmRleF9QV19PTkUsCisgIGluZGV4X1BXX0YwNDAyLAorICBpbmRleF9QV19NRjAyMjgsCisgIGluZGV4X1BXX01GMDM0NF9GMDI4NSwKKyAgaW5kZXhfUERfT05FSEFMRgorfTsKKworc3RhdGljIHVpbnQ2NF90IGNvbnN0X3ZhbHVlW10gPSB7CisgIF91aW50NjRfc2V0X3BpMTYoMSwgMSwgMSwgMSksCisgIF91aW50NjRfc2V0X3BpMTYoRl8wXzQwMiwgRl8wXzQwMiwgRl8wXzQwMiwgRl8wXzQwMiksCisgIF91aW50NjRfc2V0X3BpMTYoLUZfMF8yMjgsIC1GXzBfMjI4LCAtRl8wXzIyOCwgLUZfMF8yMjgpLAorICBfdWludDY0X3NldF9waTE2KEZfMF8yODUsIC1GXzBfMzQ0LCBGXzBfMjg1LCAtRl8wXzM0NCksCisgIF91aW50NjRfc2V0X3BpMzIoKGludCkoMSA8PCAoU0NBTEVCSVRTIC0gMSkpLCAoaW50KSgxIDw8IChTQ0FMRUJJVFMgLSAxKSkpCit9OworCisjZGVmaW5lIFBXX09ORSAgICAgICAgICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BXX09ORSkKKyNkZWZpbmUgUFdfRjA0MDIgICAgICAgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfRjA0MDIpCisjZGVmaW5lIFBXX01GMDIyOCAgICAgICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BXX01GMDIyOCkKKyNkZWZpbmUgUFdfTUYwMzQ0X0YwMjg1ICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwMzQ0X0YwMjg1KQorI2RlZmluZSBQRF9PTkVIQUxGICAgICAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QRF9PTkVIQUxGKQorCisjZGVmaW5lIFJHQlhfRklMTEVSXzBYRkYgIDEKKworCisjaW5jbHVkZSAiamRjb2xleHQtbW1pLmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECisjZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbWkgIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9tbWkKKyNpbmNsdWRlICJqZGNvbGV4dC1tbWkuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYganNpbWRfeWNjX3JnYl9jb252ZXJ0X21taQorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorI2RlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW1pICBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X21taQorI2luY2x1ZGUgImpkY29sZXh0LW1taS5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW1pCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyNkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X21taSAganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X21taQorI2luY2x1ZGUgImpkY29sZXh0LW1taS5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW1pCisKKyNkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECisjZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyNkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbWkgIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfbW1pCisjaW5jbHVkZSAiamRjb2xleHQtbW1pLmMiCisjdW5kZWYgUkdCX1JFRAorI3VuZGVmIFJHQl9HUkVFTgorI3VuZGVmIFJHQl9CTFVFCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbWkKKworI2RlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyNkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorI2RlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyNkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X21taSAganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9tbWkKKyNpbmNsdWRlICJqZGNvbGV4dC1tbWkuYyIKKyN1bmRlZiBSR0JfUkVECisjdW5kZWYgUkdCX0dSRUVOCisjdW5kZWYgUkdCX0JMVUUKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYganNpbWRfeWNjX3JnYl9jb252ZXJ0X21taQorCisjZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorI2RlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCisjZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorI2RlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW1pICBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X21taQorI2luY2x1ZGUgImpkY29sZXh0LW1taS5jIgorI3VuZGVmIFJHQl9SRUQKKyN1bmRlZiBSR0JfR1JFRU4KKyN1bmRlZiBSR0JfQkxVRQorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW1pCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pkc2FtcGxlLW1taS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qZHNhbXBsZS1tbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGE2MjY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qZHNhbXBsZS1tbWkuYwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIExvb25nc29uIE1NSSBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCwgQmVpSmluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXV0aG9yczogIFpodUNoZW4gICAgIDx6aHVjaGVuQGxvb25nc29uLmNuPgorICogICAgICAgICAgIENhaVdhbndlaSAgIDxjYWl3YW53ZWlAbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgU3VuWmhhbmd6aGkgPHN1bnpoYW5nemhpLWNxQGxvb25nc29uLmNuPgorICoKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisvKiBDSFJPTUEgVVBTQU1QTElORyAqLworCisjaW5jbHVkZSAianNpbWRfbW1pLmgiCisKKworZW51bSBjb25zdF9pbmRleCB7CisgIGluZGV4X1BXX1RIUkVFLAorICBpbmRleF9QV19TRVZFTiwKKyAgaW5kZXhfUFdfRUlHSFQsCit9OworCitzdGF0aWMgdWludDY0X3QgY29uc3RfdmFsdWVbXSA9IHsKKyAgX3VpbnQ2NF9zZXRfcGkxNigzLCAzLCAzLCAzKSwKKyAgX3VpbnQ2NF9zZXRfcGkxNig3LCA3LCA3LCA3KSwKKyAgX3VpbnQ2NF9zZXRfcGkxNig4LCA4LCA4LCA4KSwKK307CisKKyNkZWZpbmUgUFdfVEhSRUUgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19USFJFRSkKKyNkZWZpbmUgUFdfU0VWRU4gIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19TRVZFTikKKyNkZWZpbmUgUFdfRUlHSFQgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19FSUdIVCkKKworCisjZGVmaW5lIFBST0NFU1NfUk9XKHIpIHsgXAorICBtbTcgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKW91dHB0ciMjcik7ICAgICAgLyogbW03PUludHJMPSggMCAxIDIgMykgKi8gXAorICBtbTMgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKW91dHB0ciMjciArIDEpOyAgLyogbW0zPUludHJIPSggNCA1IDYgNykgKi8gXAorICBcCisgIG1tMCA9IG1tNzsgXAorICBtbTQgPSBtbTM7IFwKKyAgbW0wID0gX21tX3NybGlfc2k2NChtbTAsIDIgKiBCWVRFX0JJVCk7ICAgICAgICAgICAgICAgICAgIC8qIG1tMD0oIDEgMiAzIC0pICovIFwKKyAgbW00ID0gX21tX3NsbGlfc2k2NChtbTQsIChTSVpFT0ZfTU1XT1JEIC0gMikgKiBCWVRFX0JJVCk7IC8qIG1tND0oIC0gLSAtIDQpICovIFwKKyAgbW01ID0gbW03OyBcCisgIG1tNiA9IG1tMzsgXAorICBtbTUgPSBfbW1fc3JsaV9zaTY0KG1tNSwgKFNJWkVPRl9NTVdPUkQgLSAyKSAqIEJZVEVfQklUKTsgLyogbW01PSggMyAtIC0gLSkgKi8gXAorICBtbTYgPSBfbW1fc2xsaV9zaTY0KG1tNiwgMiAqIEJZVEVfQklUKTsgICAgICAgICAgICAgICAgICAgLyogbW02PSggLSA0IDUgNikgKi8gXAorICBcCisgIG1tMCA9IF9tbV9vcl9zaTY0KG1tMCwgbW00KTsgICAgICAgICAgICAgICAgLyogbW0wPSggMSAyIDMgNCkgKi8gXAorICBtbTUgPSBfbW1fb3Jfc2k2NChtbTUsIG1tNik7ICAgICAgICAgICAgICAgIC8qIG1tNT0oIDMgNCA1IDYpICovIFwKKyAgXAorICBtbTEgPSBtbTc7IFwKKyAgbW0yID0gbW0zOyBcCisgIG1tMSA9IF9tbV9zbGxpX3NpNjQobW0xLCAyICogQllURV9CSVQpOyAgICAgLyogbW0xPSggLSAwIDEgMikgKi8gXAorICBtbTIgPSBfbW1fc3JsaV9zaTY0KG1tMiwgMiAqIEJZVEVfQklUKTsgICAgIC8qIG1tMj0oIDUgNiA3IC0pICovIFwKKyAgbW00ID0gbW0zOyBcCisgIG1tNCA9IF9tbV9zcmxpX3NpNjQobW00LCAoU0laRU9GX01NV09SRCAtIDIpICogQllURV9CSVQpOyAvKiBtbTQ9KCA3IC0gLSAtKSAqLyBcCisgIFwKKyAgbW0xID0gX21tX29yX3NpNjQobW0xLCB3a1tyXSk7ICAgICAgICAgICAgICAvKiBtbTE9KC0xIDAgMSAyKSAqLyBcCisgIG1tMiA9IF9tbV9vcl9zaTY0KG1tMiwgd2tbciArIDJdKTsgICAgICAgICAgLyogbW0yPSggNSA2IDYgOCkgKi8gXAorICBcCisgIHdrW3JdID0gbW00OyBcCisgIFwKKyAgbW03ID0gX21tX211bGxvX3BpMTYobW03LCBQV19USFJFRSk7IFwKKyAgbW0zID0gX21tX211bGxvX3BpMTYobW0zLCBQV19USFJFRSk7IFwKKyAgbW0xID0gX21tX2FkZF9waTE2KG1tMSwgUFdfRUlHSFQpOyBcCisgIG1tNSA9IF9tbV9hZGRfcGkxNihtbTUsIFBXX0VJR0hUKTsgXAorICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBQV19TRVZFTik7IFwKKyAgbW0yID0gX21tX2FkZF9waTE2KG1tMiwgUFdfU0VWRU4pOyBcCisgIFwKKyAgbW0xID0gX21tX2FkZF9waTE2KG1tMSwgbW03KTsgXAorICBtbTUgPSBfbW1fYWRkX3BpMTYobW01LCBtbTMpOyBcCisgIG1tMSA9IF9tbV9zcmxpX3BpMTYobW0xLCA0KTsgICAgICAgICAgICAgICAgLyogbW0xPU91dHJMRT0oIDAgIDIgIDQgIDYpICovIFwKKyAgbW01ID0gX21tX3NybGlfcGkxNihtbTUsIDQpOyAgICAgICAgICAgICAgICAvKiBtbTU9T3V0ckhFPSggOCAxMCAxMiAxNCkgKi8gXAorICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBtbTcpOyBcCisgIG1tMiA9IF9tbV9hZGRfcGkxNihtbTIsIG1tMyk7IFwKKyAgbW0wID0gX21tX3NybGlfcGkxNihtbTAsIDQpOyAgICAgICAgICAgICAgICAvKiBtbTA9T3V0ckxPPSggMSAgMyAgNSAgNykgKi8gXAorICBtbTIgPSBfbW1fc3JsaV9waTE2KG1tMiwgNCk7ICAgICAgICAgICAgICAgIC8qIG1tMj1PdXRySE89KCA5IDExIDEzIDE1KSAqLyBcCisgIFwKKyAgbW0wID0gX21tX3NsbGlfcGkxNihtbTAsIEJZVEVfQklUKTsgXAorICBtbTIgPSBfbW1fc2xsaV9waTE2KG1tMiwgQllURV9CSVQpOyBcCisgIG1tMSA9IF9tbV9vcl9zaTY0KG1tMSwgbW0wKTsgICAgIC8qIG1tMT1PdXRyTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpICovIFwKKyAgbW01ID0gX21tX29yX3NpNjQobW01LCBtbTIpOyAgICAgLyogbW01PU91dHJIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkgKi8gXAorICBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKW91dHB0ciMjciwgbW0xKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKilvdXRwdHIjI3IgKyAxLCBtbTUpOyBcCit9CisKK3ZvaWQganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbWkoaW50IG1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7CisgIEpTQU1QUk9XIGlucHRyXzEsIGlucHRyMCwgaW5wdHIxLCBvdXRwdHIwLCBvdXRwdHIxOworICBpbnQgaW5yb3csIG91dHJvdywgaW5jb2wsIHRtcCwgdG1wMTsKKyAgX19tNjQgbW0wLCBtbTEsIG1tMiwgbW0zID0gMC4wLCBtbTQsIG1tNSwgbW02LCBtbTcgPSAwLjA7CisgIF9fbTY0IHdrWzRdLCBtbV90bXA7CisKKyAgZm9yIChpbnJvdyA9IDAsIG91dHJvdyA9IDA7IG91dHJvdyA8IG1heF92X3NhbXBfZmFjdG9yOyBpbnJvdysrKSB7CisKKyAgICBpbnB0cl8xID0gaW5wdXRfZGF0YVtpbnJvdyAtIDFdOworICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3cgKyAxXTsKKyAgICBvdXRwdHIwID0gb3V0cHV0X2RhdGFbb3V0cm93KytdOworICAgIG91dHB0cjEgPSBvdXRwdXRfZGF0YVtvdXRyb3crK107CisKKyAgICBpZiAoZG93bnNhbXBsZWRfd2lkdGggJiA3KSB7CisgICAgICB0bXAgPSAoZG93bnNhbXBsZWRfd2lkdGggLSAxKSAqIHNpemVvZihKU0FNUExFKTsKKyAgICAgIHRtcDEgPSAgZG93bnNhbXBsZWRfd2lkdGggKiBzaXplb2YoSlNBTVBMRSk7CisgICAgICBhc20oImRhZGR1ICAkOCwgJTMsICU2XHJcbiIKKyAgICAgICAgICAibGIgICAgICQ5LCAoJDgpXHJcbiIKKyAgICAgICAgICAiZGFkZHUgICQ4LCAlMywgJTdcclxuIgorICAgICAgICAgICJzYiAgICAgJDksICgkOClcclxuIgorICAgICAgICAgICJkYWRkdSAgJDgsICU0LCAlNlxyXG4iCisgICAgICAgICAgImxiICAgICAkOSwgKCQ4KVxyXG4iCisgICAgICAgICAgImRhZGR1ICAkOCwgJTQsICU3XHJcbiIKKyAgICAgICAgICAic2IgICAgICQ5LCAoJDgpXHJcbiIKKyAgICAgICAgICAiZGFkZHUgICQ4LCAlNSwgJTZcclxuIgorICAgICAgICAgICJsYiAgICAgJDksICgkOClcclxuIgorICAgICAgICAgICJkYWRkdSAgJDgsICU1LCAlN1xyXG4iCisgICAgICAgICAgInNiICAgICAkOSwgKCQ4KVxyXG4iCisgICAgICAgICAgOiAiPW0iICgqaW5wdHJfMSksICI9bSIgKCppbnB0cjApLCAiPW0iICgqaW5wdHIxKQorICAgICAgICAgIDogInIiIChpbnB0cl8xKSwgInIiIChpbnB0cjApLCAiciIgKGlucHRyMSksICJyIiAodG1wKSwgInIiICh0bXAxKQorICAgICAgICAgIDogIiQ4IiwgIiQ5IgorICAgICAgICAgKTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sgKi8KKyAgICBtbTAgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKWlucHRyMCk7ICAgICAvKiBtbTAgPSByb3dbIDBdWzBdICovCisgICAgbW0xID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKilpbnB0cl8xKTsgICAgLyogbW0xID0gcm93Wy0xXVswXSAqLworICAgIG1tMiA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopaW5wdHIxKTsgICAgIC8qIG1tMiA9IHJvd1sgMV1bMF0gKi8KKworICAgIG1tMyA9IF9tbV94b3Jfc2k2NChtbTMsIG1tMyk7ICAgICAgICAgICAgIC8qIG1tMyA9IChhbGwgMCdzKSAqLworICAgIG1tNCA9IG1tMDsKKyAgICBtbTAgPSBfbW1fdW5wYWNrbG9fcGk4KG1tMCwgbW0zKTsgICAgICAgICAvKiBtbTAgPSByb3dbIDBdWzBdKCAwIDEgMiAzKSAqLworICAgIG1tNCA9IF9tbV91bnBhY2toaV9waTgobW00LCBtbTMpOyAgICAgICAgIC8qIG1tNCA9IHJvd1sgMF1bMF0oIDQgNSA2IDcpICovCisgICAgbW01ID0gbW0xOworICAgIG1tMSA9IF9tbV91bnBhY2tsb19waTgobW0xLCBtbTMpOyAgICAgICAgIC8qIG1tMSA9IHJvd1stMV1bMF0oIDAgMSAyIDMpICovCisgICAgbW01ID0gX21tX3VucGFja2hpX3BpOChtbTUsIG1tMyk7ICAgICAgICAgLyogbW01ID0gcm93Wy0xXVswXSggNCA1IDYgNykgKi8KKyAgICBtbTYgPSBtbTI7CisgICAgbW0yID0gX21tX3VucGFja2xvX3BpOChtbTIsIG1tMyk7ICAgICAgICAgLyogbW0yID0gcm93WysxXVswXSggMCAxIDIgMykgKi8KKyAgICBtbTYgPSBfbW1fdW5wYWNraGlfcGk4KG1tNiwgbW0zKTsgICAgICAgICAvKiBtbTYgPSByb3dbKzFdWzBdKCA0IDUgNiA3KSAqLworCisgICAgbW0wID0gX21tX211bGxvX3BpMTYobW0wLCBQV19USFJFRSk7CisgICAgbW00ID0gX21tX211bGxvX3BpMTYobW00LCBQV19USFJFRSk7CisKKyAgICBtbTcgPSBfbW1fY21wZXFfcGk4KG1tNywgbW03KTsKKyAgICBtbTcgPSBfbW1fc3JsaV9zaTY0KG1tNywgKFNJWkVPRl9NTVdPUkQgLSAyKSAqIEJZVEVfQklUKTsKKworICAgIG1tMSA9IF9tbV9hZGRfcGkxNihtbTEsIG1tMCk7ICAgICAgICAgICAgIC8qIG1tMT1JbnQwTD0oIDAgMSAyIDMpICovCisgICAgbW01ID0gX21tX2FkZF9waTE2KG1tNSwgbW00KTsgICAgICAgICAgICAgLyogbW01PUludDBIPSggNCA1IDYgNykgKi8KKyAgICBtbTIgPSBfbW1fYWRkX3BpMTYobW0yLCBtbTApOyAgICAgICAgICAgICAvKiBtbTI9SW50MUw9KCAwIDEgMiAzKSAqLworICAgIG1tNiA9IF9tbV9hZGRfcGkxNihtbTYsIG1tNCk7ICAgICAgICAgICAgIC8qIG1tNj1JbnQxSD0oIDQgNSA2IDcpICovCisKKyAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKilvdXRwdHIwLCBtbTEpOyAgICAgIC8qIHRlbXBvcmFyaWx5IHNhdmUgKi8KKyAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKilvdXRwdHIwICsgMSwgbW01KTsgIC8qIHRoZSBpbnRlcm1lZGlhdGUgZGF0YSAqLworICAgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKW91dHB0cjEsIG1tMik7CisgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopb3V0cHRyMSArIDEsIG1tNik7CisKKyAgICBtbTEgPSBfbW1fYW5kX3NpNjQobW0xLCBtbTcpOyAgICAgICAgICAgICAvKiBtbTE9KCAwIC0gLSAtKSAqLworICAgIG1tMiA9IF9tbV9hbmRfc2k2NChtbTIsIG1tNyk7ICAgICAgICAgICAgIC8qIG1tMj0oIDAgLSAtIC0pICovCisKKyAgICB3a1swXSA9IG1tMTsKKyAgICB3a1sxXSA9IG1tMjsKKworICAgIGZvciAoaW5jb2wgPSBkb3duc2FtcGxlZF93aWR0aDsgaW5jb2wgPiAwOworICAgICAgICAgaW5jb2wgLT0gOCwgaW5wdHJfMSArPSA4LCBpbnB0cjAgKz0gOCwgaW5wdHIxICs9IDgsCisgICAgICAgICBvdXRwdHIwICs9IDE2LCBvdXRwdHIxICs9IDE2KSB7CisKKyAgICAgIGlmIChpbmNvbCA+IDgpIHsKKyAgICAgICAgLyogcHJvY2VzcyB0aGUgbmV4dCBjb2x1bW4gYmxvY2sgKi8KKyAgICAgICAgbW0wID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKilpbnB0cjAgKyAxKTsgICAvKiBtbTAgPSByb3dbIDBdWzFdICovCisgICAgICAgIG1tMSA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopaW5wdHJfMSArIDEpOyAgLyogbW0xID0gcm93Wy0xXVsxXSAqLworICAgICAgICBtbTIgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKWlucHRyMSArIDEpOyAgIC8qIG1tMiA9IHJvd1srMV1bMV0gKi8KKworICAgICAgICBtbTMgPSBfbW1fc2V0emVyb19zaTY0KCk7ICAgICAgICAgICAgIC8qIG1tMyA9IChhbGwgMCdzKSAqLworICAgICAgICBtbTQgPSBtbTA7CisgICAgICAgIG1tMCA9IF9tbV91bnBhY2tsb19waTgobW0wLCBtbTMpOyAgICAgLyogbW0wID0gcm93WyAwXVsxXSggMCAxIDIgMykgKi8KKyAgICAgICAgbW00ID0gX21tX3VucGFja2hpX3BpOChtbTQsIG1tMyk7ICAgICAvKiBtbTQgPSByb3dbIDBdWzFdKCA0IDUgNiA3KSAqLworICAgICAgICBtbTUgPSBtbTE7CisgICAgICAgIG1tMSA9IF9tbV91bnBhY2tsb19waTgobW0xLCBtbTMpOyAgICAgLyogbW0xID0gcm93Wy0xXVsxXSggMCAxIDIgMykgKi8KKyAgICAgICAgbW01ID0gX21tX3VucGFja2hpX3BpOChtbTUsIG1tMyk7ICAgICAvKiBtbTUgPSByb3dbLTFdWzFdKCA0IDUgNiA3KSAqLworICAgICAgICBtbTYgPSBtbTI7CisgICAgICAgIG1tMiA9IF9tbV91bnBhY2tsb19waTgobW0yLCBtbTMpOyAgICAgLyogbW0yID0gcm93WysxXVsxXSggMCAxIDIgMykgKi8KKyAgICAgICAgbW02ID0gX21tX3VucGFja2hpX3BpOChtbTYsIG1tMyk7ICAgICAvKiBtbTYgPSByb3dbKzFdWzFdKCA0IDUgNiA3KSAqLworCisgICAgICAgIG1tMCA9IF9tbV9tdWxsb19waTE2KG1tMCwgUFdfVEhSRUUpOworICAgICAgICBtbTQgPSBfbW1fbXVsbG9fcGkxNihtbTQsIFBXX1RIUkVFKTsKKworICAgICAgICBtbTEgPSBfbW1fYWRkX3BpMTYobW0xLCBtbTApOyAgICAgICAgIC8qIG1tMSA9IEludDBMID0gKCAwIDEgMiAzKSAqLworICAgICAgICBtbTUgPSBfbW1fYWRkX3BpMTYobW01LCBtbTQpOyAgICAgICAgIC8qIG1tNSA9IEludDBIID0gKCA0IDUgNiA3KSAqLworICAgICAgICBtbTIgPSBfbW1fYWRkX3BpMTYobW0yLCBtbTApOyAgICAgICAgIC8qIG1tMiA9IEludDFMID0gKCAwIDEgMiAzKSAqLworICAgICAgICBtbTYgPSBfbW1fYWRkX3BpMTYobW02LCBtbTQpOyAgICAgICAgIC8qIG1tNiA9IEludDFIID0gKCA0IDUgNiA3KSAqLworCisgICAgICAgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKW91dHB0cjAgKyAyLCBtbTEpOyAgLyogdGVtcG9yYXJpbHkgc2F2ZSAqLworICAgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKilvdXRwdHIwICsgMywgbW01KTsgIC8qIHRoZSBpbnRlcm1lZGlhdGUgZGF0YSAqLworICAgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKilvdXRwdHIxICsgMiwgbW0yKTsKKyAgICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopb3V0cHRyMSArIDMsIG1tNik7CisKKyAgICAgICAgbW0xID0gX21tX3NsbGlfc2k2NChtbTEsIChTSVpFT0ZfTU1XT1JEIC0gMikgKiBCWVRFX0JJVCk7IC8qIG1tMT0oIC0gLSAtIDApICovCisgICAgICAgIG1tMiA9IF9tbV9zbGxpX3NpNjQobW0yLCAoU0laRU9GX01NV09SRCAtIDIpICogQllURV9CSVQpOyAvKiBtbTI9KCAtIC0gLSAwKSAqLworCisgICAgICAgIHdrWzJdID0gbW0xOworICAgICAgICB3a1szXSA9IG1tMjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHByb2Nlc3MgdGhlIGxhc3QgY29sdW1uIGJsb2NrICovCisgICAgICAgIG1tMSA9IF9tbV9jbXBlcV9waTgobW0xLCBtbTEpOworICAgICAgICBtbTEgPSBfbW1fc2xsaV9zaTY0KG1tMSwgKFNJWkVPRl9NTVdPUkQgLSAyKSAqIEJZVEVfQklUKTsKKyAgICAgICAgbW0yID0gbW0xOworCisgICAgICAgIG1tX3RtcCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopb3V0cHRyMCArIDEpOworICAgICAgICBtbTEgPSBfbW1fYW5kX3NpNjQobW0xLCBtbV90bXApOyAgICAgIC8qIG1tMT0oIC0gLSAtIDcpICovCisgICAgICAgIG1tX3RtcCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopb3V0cHRyMSArIDEpOworICAgICAgICBtbTIgPSBfbW1fYW5kX3NpNjQobW0yLCBtbV90bXApOyAgICAgIC8qIG1tMj0oIC0gLSAtIDcpICovCisKKyAgICAgICAgd2tbMl0gPSBtbTE7CisgICAgICAgIHdrWzNdID0gbW0yOworICAgICAgfQorCisgICAgICAvKiBwcm9jZXNzIHRoZSB1cHBlciByb3cgKi8KKyAgICAgIFBST0NFU1NfUk9XKDApCisKKyAgICAgIC8qIHByb2Nlc3MgdGhlIGxvd2VyIHJvdyAqLworICAgICAgUFJPQ0VTU19ST1coMSkKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamZkY3RpbnQtbW1pLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pmZGN0aW50LW1taS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZWE2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pmZGN0aW50LW1taS5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogTG9vbmdzb24gTU1JIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNywgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLCBCZWlKaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3JzOiAgWmh1Q2hlbiAgICAgPHpodWNoZW5AbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgQ2FpV2Fud2VpICAgPGNhaXdhbndlaUBsb29uZ3Nvbi5jbj4KKyAqICAgICAgICAgICBTdW5aaGFuZ3poaSA8c3Vuemhhbmd6aGktY3FAbG9vbmdzb24uY24+CisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFNMT1cgSU5URUdFUiBGT1JXQVJEIERDVCAqLworCisjaW5jbHVkZSAianNpbWRfbW1pLmgiCisKKworI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAyCisjZGVmaW5lIERFU0NBTEVfUDEgIChDT05TVF9CSVRTIC0gUEFTUzFfQklUUykKKyNkZWZpbmUgREVTQ0FMRV9QMiAgKENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTKQorCisjZGVmaW5lIEZJWF8wXzI5OCAgKChzaG9ydCkyNDQ2KSAgIC8qIEZJWCgwLjI5ODYzMTMzNikgKi8KKyNkZWZpbmUgRklYXzBfMzkwICAoKHNob3J0KTMxOTYpICAgLyogRklYKDAuMzkwMTgwNjQ0KSAqLworI2RlZmluZSBGSVhfMF81NDEgICgoc2hvcnQpNDQzMykgICAvKiBGSVgoMC41NDExOTYxMDApICovCisjZGVmaW5lIEZJWF8wXzc2NSAgKChzaG9ydCk2MjcwKSAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzBfODk5ICAoKHNob3J0KTczNzMpICAgLyogRklYKDAuODk5OTc2MjIzKSAqLworI2RlZmluZSBGSVhfMV8xNzUgICgoc2hvcnQpOTYzMykgICAvKiBGSVgoMS4xNzU4NzU2MDIpICovCisjZGVmaW5lIEZJWF8xXzUwMSAgKChzaG9ydCkxMjI5OSkgIC8qIEZJWCgxLjUwMTMyMTExMCkgKi8KKyNkZWZpbmUgRklYXzFfODQ3ICAoKHNob3J0KTE1MTM3KSAgLyogRklYKDEuODQ3NzU5MDY1KSAqLworI2RlZmluZSBGSVhfMV85NjEgICgoc2hvcnQpMTYwNjkpICAvKiBGSVgoMS45NjE1NzA1NjApICovCisjZGVmaW5lIEZJWF8yXzA1MyAgKChzaG9ydCkxNjgxOSkgIC8qIEZJWCgyLjA1MzExOTg2OSkgKi8KKyNkZWZpbmUgRklYXzJfNTYyICAoKHNob3J0KTIwOTk1KSAgLyogRklYKDIuNTYyOTE1NDQ3KSAqLworI2RlZmluZSBGSVhfM18wNzIgICgoc2hvcnQpMjUxNzIpICAvKiBGSVgoMy4wNzI3MTEwMjYpICovCisKK2VudW0gY29uc3RfaW5kZXggeworICBpbmRleF9QV19GMTMwX0YwNTQsCisgIGluZGV4X1BXX0YwNTRfTUYxMzAsCisgIGluZGV4X1BXX01GMDc4X0YxMTcsCisgIGluZGV4X1BXX0YxMTdfRjA3OCwKKyAgaW5kZXhfUFdfTUYwNjBfTUYwODksCisgIGluZGV4X1BXX01GMDg5X0YwNjAsCisgIGluZGV4X1BXX01GMDUwX01GMjU2LAorICBpbmRleF9QV19NRjI1Nl9GMDUwLAorICBpbmRleF9QRF9ERVNDQUxFX1AxLAorICBpbmRleF9QRF9ERVNDQUxFX1AyLAorICBpbmRleF9QV19ERVNDQUxFX1AyWAorfTsKKworc3RhdGljIHVpbnQ2NF90IGNvbnN0X3ZhbHVlW10gPSB7CisgIF91aW50NjRfc2V0X3BpMTYoRklYXzBfNTQxLCAoRklYXzBfNTQxICsgRklYXzBfNzY1KSwKKyAgICAgICAgICAgICAgICAgICBGSVhfMF81NDEsIChGSVhfMF81NDEgKyBGSVhfMF83NjUpKSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigoRklYXzBfNTQxIC0gRklYXzFfODQ3KSwgRklYXzBfNTQxLAorICAgICAgICAgICAgICAgICAgIChGSVhfMF81NDEgLSBGSVhfMV84NDcpLCBGSVhfMF81NDEpLAorICBfdWludDY0X3NldF9waTE2KEZJWF8xXzE3NSwgKEZJWF8xXzE3NSAtIEZJWF8xXzk2MSksCisgICAgICAgICAgICAgICAgICAgRklYXzFfMTc1LCAoRklYXzFfMTc1IC0gRklYXzFfOTYxKSksCisgIF91aW50NjRfc2V0X3BpMTYoKEZJWF8xXzE3NSAtIEZJWF8wXzM5MCksIEZJWF8xXzE3NSwKKyAgICAgICAgICAgICAgICAgICAoRklYXzFfMTc1IC0gRklYXzBfMzkwKSwgRklYXzFfMTc1KSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigtRklYXzBfODk5LCAoRklYXzBfMjk4IC0gRklYXzBfODk5KSwKKyAgICAgICAgICAgICAgICAgICAtRklYXzBfODk5LCAoRklYXzBfMjk4IC0gRklYXzBfODk5KSksCisgIF91aW50NjRfc2V0X3BpMTYoKEZJWF8xXzUwMSAtIEZJWF8wXzg5OSksIC1GSVhfMF84OTksCisgICAgICAgICAgICAgICAgICAgKEZJWF8xXzUwMSAtIEZJWF8wXzg5OSksIC1GSVhfMF84OTkpLAorICBfdWludDY0X3NldF9waTE2KC1GSVhfMl81NjIsIChGSVhfMl8wNTMgLSBGSVhfMl81NjIpLAorICAgICAgICAgICAgICAgICAgIC1GSVhfMl81NjIsIChGSVhfMl8wNTMgLSBGSVhfMl81NjIpKSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigoRklYXzNfMDcyIC0gRklYXzJfNTYyKSwgLUZJWF8yXzU2MiwKKyAgICAgICAgICAgICAgICAgICAoRklYXzNfMDcyIC0gRklYXzJfNTYyKSwgLUZJWF8yXzU2MiksCisgIF91aW50NjRfc2V0X3BpMzIoKDEgPDwgKERFU0NBTEVfUDEgLSAxKSksICgxIDw8IChERVNDQUxFX1AxIC0gMSkpKSwKKyAgX3VpbnQ2NF9zZXRfcGkzMigoMSA8PCAoREVTQ0FMRV9QMiAtIDEpKSwgKDEgPDwgKERFU0NBTEVfUDIgLSAxKSkpLAorICBfdWludDY0X3NldF9waTE2KCgxIDw8IChQQVNTMV9CSVRTIC0gMSkpLCAoMSA8PCAoUEFTUzFfQklUUyAtIDEpKSwKKyAgICAgICAgICAgICAgICAgICAoMSA8PCAoUEFTUzFfQklUUyAtIDEpKSwgKDEgPDwgKFBBU1MxX0JJVFMgLSAxKSkpCit9OworCisjZGVmaW5lIFBXX0YxMzBfRjA1NCAgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfRjEzMF9GMDU0KQorI2RlZmluZSBQV19GMDU0X01GMTMwICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BXX0YwNTRfTUYxMzApCisjZGVmaW5lIFBXX01GMDc4X0YxMTcgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwNzhfRjExNykKKyNkZWZpbmUgUFdfRjExN19GMDc4ICAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19GMTE3X0YwNzgpCisjZGVmaW5lIFBXX01GMDYwX01GMDg5ICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwNjBfTUYwODkpCisjZGVmaW5lIFBXX01GMDg5X0YwNjAgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwODlfRjA2MCkKKyNkZWZpbmUgUFdfTUYwNTBfTUYyNTYgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19NRjA1MF9NRjI1NikKKyNkZWZpbmUgUFdfTUYyNTZfRjA1MCAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19NRjI1Nl9GMDUwKQorI2RlZmluZSBQRF9ERVNDQUxFX1AxICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BEX0RFU0NBTEVfUDEpCisjZGVmaW5lIFBEX0RFU0NBTEVfUDIgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUERfREVTQ0FMRV9QMikKKyNkZWZpbmUgUFdfREVTQ0FMRV9QMlggIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19ERVNDQUxFX1AyWCkKKworCisjZGVmaW5lIERPX0ZEQ1RfQ09NTU9OKFBBU1MpIHsgXAorICBfX202NCB0bXAxMzEybCwgdG1wMTMxMmgsIHRtcDQ3bCwgdG1wNDdoLCB0bXA0bCwgdG1wNGgsIHRtcDdsLCB0bXA3aDsgXAorICBfX202NCB0bXA1NmwsIHRtcDU2aCwgdG1wNWwsIHRtcDVoLCB0bXA2bCwgdG1wNmg7IFwKKyAgX19tNjQgb3V0MWwsIG91dDFoLCBvdXQybCwgb3V0MmgsIG91dDNsLCBvdXQzaDsgXAorICBfX202NCBvdXQ1bCwgb3V0NWgsIG91dDZsLCBvdXQ2aCwgb3V0N2wsIG91dDdoOyBcCisgIF9fbTY0IHozNGwsIHozNGgsIHozbCwgejNoLCB6NGwsIHo0aCwgejMsIHo0OyBcCisgIFwKKyAgLyogKE9yaWdpbmFsKSBcCisgICAqIHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7IFwKKyAgICogb3V0MiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsgXAorICAgKiBvdXQ2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsgXAorICAgKiBcCisgICAqIChUaGlzIGltcGxlbWVudGF0aW9uKSBcCisgICAqIG91dDIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7IFwKKyAgICogb3V0NiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsgXAorICAgKi8gXAorICBcCisgIHRtcDEzMTJsID0gX21tX3VucGFja2xvX3BpMTYodG1wMTMsIHRtcDEyKTsgXAorICB0bXAxMzEyaCA9IF9tbV91bnBhY2toaV9waTE2KHRtcDEzLCB0bXAxMik7IFwKKyAgXAorICBvdXQybCA9IF9tbV9tYWRkX3BpMTYodG1wMTMxMmwsIFBXX0YxMzBfRjA1NCk7IFwKKyAgb3V0MmggPSBfbW1fbWFkZF9waTE2KHRtcDEzMTJoLCBQV19GMTMwX0YwNTQpOyBcCisgIG91dDZsID0gX21tX21hZGRfcGkxNih0bXAxMzEybCwgUFdfRjA1NF9NRjEzMCk7IFwKKyAgb3V0NmggPSBfbW1fbWFkZF9waTE2KHRtcDEzMTJoLCBQV19GMDU0X01GMTMwKTsgXAorICBcCisgIG91dDJsID0gX21tX2FkZF9waTMyKG91dDJsLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDJoID0gX21tX2FkZF9waTMyKG91dDJoLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDJsID0gX21tX3NyYWlfcGkzMihvdXQybCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQyaCA9IF9tbV9zcmFpX3BpMzIob3V0MmgsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgXAorICBvdXQ2bCA9IF9tbV9hZGRfcGkzMihvdXQ2bCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ2aCA9IF9tbV9hZGRfcGkzMihvdXQ2aCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ2bCA9IF9tbV9zcmFpX3BpMzIob3V0NmwsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0NmggPSBfbW1fc3JhaV9waTMyKG91dDZoLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIFwKKyAgb3V0MiA9IF9tbV9wYWNrc19waTMyKG91dDJsLCBvdXQyaCk7IFwKKyAgb3V0NiA9IF9tbV9wYWNrc19waTMyKG91dDZsLCBvdXQ2aCk7IFwKKyAgXAorICAvKiBPZGQgcGFydCAqLyBcCisgIFwKKyAgejMgPSBfbW1fYWRkX3BpMTYodG1wNCwgdG1wNik7IFwKKyAgejQgPSBfbW1fYWRkX3BpMTYodG1wNSwgdG1wNyk7IFwKKyAgXAorICAvKiAoT3JpZ2luYWwpIFwKKyAgICogejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsgXAorICAgKiB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsgXAorICAgKiB6MyArPSB6NTsgIHo0ICs9IHo1OyBcCisgICAqIFwKKyAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pIFwKKyAgICogejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7IFwKKyAgICogejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7IFwKKyAgICovIFwKKyAgXAorICB6MzRsID0gX21tX3VucGFja2xvX3BpMTYoejMsIHo0KTsgXAorICB6MzRoID0gX21tX3VucGFja2hpX3BpMTYoejMsIHo0KTsgXAorICB6M2wgPSBfbW1fbWFkZF9waTE2KHozNGwsIFBXX01GMDc4X0YxMTcpOyBcCisgIHozaCA9IF9tbV9tYWRkX3BpMTYoejM0aCwgUFdfTUYwNzhfRjExNyk7IFwKKyAgejRsID0gX21tX21hZGRfcGkxNih6MzRsLCBQV19GMTE3X0YwNzgpOyBcCisgIHo0aCA9IF9tbV9tYWRkX3BpMTYoejM0aCwgUFdfRjExN19GMDc4KTsgXAorICBcCisgIC8qIChPcmlnaW5hbCkgXAorICAgKiB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsgXAorICAgKiB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsgXAorICAgKiB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsgXAorICAgKiB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsgXAorICAgKiBvdXQ3ID0gdG1wNCArIHoxICsgejM7ICBvdXQ1ID0gdG1wNSArIHoyICsgejQ7IFwKKyAgICogb3V0MyA9IHRtcDYgKyB6MiArIHozOyAgb3V0MSA9IHRtcDcgKyB6MSArIHo0OyBcCisgICAqIFwKKyAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pIFwKKyAgICogdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOyBcCisgICAqIHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsgXAorICAgKiB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7IFwKKyAgICogdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOyBcCisgICAqIG91dDcgPSB0bXA0ICsgejM7ICBvdXQ1ID0gdG1wNSArIHo0OyBcCisgICAqIG91dDMgPSB0bXA2ICsgejM7ICBvdXQxID0gdG1wNyArIHo0OyBcCisgICAqLyBcCisgIFwKKyAgdG1wNDdsID0gX21tX3VucGFja2xvX3BpMTYodG1wNCwgdG1wNyk7IFwKKyAgdG1wNDdoID0gX21tX3VucGFja2hpX3BpMTYodG1wNCwgdG1wNyk7IFwKKyAgXAorICB0bXA0bCA9IF9tbV9tYWRkX3BpMTYodG1wNDdsLCBQV19NRjA2MF9NRjA4OSk7IFwKKyAgdG1wNGggPSBfbW1fbWFkZF9waTE2KHRtcDQ3aCwgUFdfTUYwNjBfTUYwODkpOyBcCisgIHRtcDdsID0gX21tX21hZGRfcGkxNih0bXA0N2wsIFBXX01GMDg5X0YwNjApOyBcCisgIHRtcDdoID0gX21tX21hZGRfcGkxNih0bXA0N2gsIFBXX01GMDg5X0YwNjApOyBcCisgIFwKKyAgb3V0N2wgPSBfbW1fYWRkX3BpMzIodG1wNGwsIHozbCk7IFwKKyAgb3V0N2ggPSBfbW1fYWRkX3BpMzIodG1wNGgsIHozaCk7IFwKKyAgb3V0MWwgPSBfbW1fYWRkX3BpMzIodG1wN2wsIHo0bCk7IFwKKyAgb3V0MWggPSBfbW1fYWRkX3BpMzIodG1wN2gsIHo0aCk7IFwKKyAgXAorICBvdXQ3bCA9IF9tbV9hZGRfcGkzMihvdXQ3bCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ3aCA9IF9tbV9hZGRfcGkzMihvdXQ3aCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ3bCA9IF9tbV9zcmFpX3BpMzIob3V0N2wsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0N2ggPSBfbW1fc3JhaV9waTMyKG91dDdoLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIFwKKyAgb3V0MWwgPSBfbW1fYWRkX3BpMzIob3V0MWwsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MWggPSBfbW1fYWRkX3BpMzIob3V0MWgsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MWwgPSBfbW1fc3JhaV9waTMyKG91dDFsLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDFoID0gX21tX3NyYWlfcGkzMihvdXQxaCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBcCisgIG91dDcgPSBfbW1fcGFja3NfcGkzMihvdXQ3bCwgb3V0N2gpOyBcCisgIG91dDEgPSBfbW1fcGFja3NfcGkzMihvdXQxbCwgb3V0MWgpOyBcCisgIFwKKyAgdG1wNTZsID0gX21tX3VucGFja2xvX3BpMTYodG1wNSwgdG1wNik7IFwKKyAgdG1wNTZoID0gX21tX3VucGFja2hpX3BpMTYodG1wNSwgdG1wNik7IFwKKyAgXAorICB0bXA1bCA9IF9tbV9tYWRkX3BpMTYodG1wNTZsLCBQV19NRjA1MF9NRjI1Nik7IFwKKyAgdG1wNWggPSBfbW1fbWFkZF9waTE2KHRtcDU2aCwgUFdfTUYwNTBfTUYyNTYpOyBcCisgIHRtcDZsID0gX21tX21hZGRfcGkxNih0bXA1NmwsIFBXX01GMjU2X0YwNTApOyBcCisgIHRtcDZoID0gX21tX21hZGRfcGkxNih0bXA1NmgsIFBXX01GMjU2X0YwNTApOyBcCisgIFwKKyAgb3V0NWwgPSBfbW1fYWRkX3BpMzIodG1wNWwsIHo0bCk7IFwKKyAgb3V0NWggPSBfbW1fYWRkX3BpMzIodG1wNWgsIHo0aCk7IFwKKyAgb3V0M2wgPSBfbW1fYWRkX3BpMzIodG1wNmwsIHozbCk7IFwKKyAgb3V0M2ggPSBfbW1fYWRkX3BpMzIodG1wNmgsIHozaCk7IFwKKyAgXAorICBvdXQ1bCA9IF9tbV9hZGRfcGkzMihvdXQ1bCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ1aCA9IF9tbV9hZGRfcGkzMihvdXQ1aCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ1bCA9IF9tbV9zcmFpX3BpMzIob3V0NWwsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0NWggPSBfbW1fc3JhaV9waTMyKG91dDVoLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIFwKKyAgb3V0M2wgPSBfbW1fYWRkX3BpMzIob3V0M2wsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0M2ggPSBfbW1fYWRkX3BpMzIob3V0M2gsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0M2wgPSBfbW1fc3JhaV9waTMyKG91dDNsLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDNoID0gX21tX3NyYWlfcGkzMihvdXQzaCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBcCisgIG91dDUgPSBfbW1fcGFja3NfcGkzMihvdXQ1bCwgb3V0NWgpOyBcCisgIG91dDMgPSBfbW1fcGFja3NfcGkzMihvdXQzbCwgb3V0M2gpOyBcCit9CisKKyNkZWZpbmUgRE9fRkRDVF9QQVNTMSgpIHsgXAorICBfX202NCByb3cwbCwgcm93MGgsIHJvdzFsLCByb3cxaCwgcm93MmwsIHJvdzJoLCByb3czbCwgcm93M2g7IFwKKyAgX19tNjQgcm93MDFhLCByb3cwMWIsIHJvdzAxYywgcm93MDFkLCByb3cyM2EsIHJvdzIzYiwgcm93MjNjLCByb3cyM2Q7IFwKKyAgX19tNjQgY29sMCwgY29sMSwgY29sMiwgY29sMywgY29sNCwgY29sNSwgY29sNiwgY29sNzsgXAorICBfX202NCB0bXAxMCwgdG1wMTE7IFwKKyAgXAorICByb3cwbCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDBdKTsgICAgIC8qICgwMCAwMSAwMiAwMykgKi8gXAorICByb3cwaCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDAgKyA0XSk7IC8qICgwNCAwNSAwNiAwNykgKi8gXAorICByb3cxbCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDFdKTsgICAgIC8qICgxMCAxMSAxMiAxMykgKi8gXAorICByb3cxaCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDEgKyA0XSk7IC8qICgxNCAxNSAxNiAxNykgKi8gXAorICByb3cybCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDJdKTsgICAgIC8qICgyMCAyMSAyMiAyMykgKi8gXAorICByb3cyaCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDIgKyA0XSk7IC8qICgyNCAyNSAyNiAyNykgKi8gXAorICByb3czbCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDNdKTsgICAgIC8qICgzMCAzMSAzMiAzMykgKi8gXAorICByb3czaCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDMgKyA0XSk7IC8qICgzNCAzNSAzNiAzNykgKi8gXAorICBcCisgIC8qIFRyYW5zcG9zZSBjb2VmZmljaWVudHMgKi8gXAorICBcCisgIHJvdzIzYSA9IF9tbV91bnBhY2tsb19waTE2KHJvdzJsLCByb3czbCk7ICAgLyogcm93MjNhPSgyMCAzMCAyMSAzMSkgKi8gXAorICByb3cyM2IgPSBfbW1fdW5wYWNraGlfcGkxNihyb3cybCwgcm93M2wpOyAgIC8qIHJvdzIzYj0oMjIgMzIgMjMgMzMpICovIFwKKyAgcm93MjNjID0gX21tX3VucGFja2xvX3BpMTYocm93MmgsIHJvdzNoKTsgICAvKiByb3cyM2M9KDI0IDM0IDI1IDM1KSAqLyBcCisgIHJvdzIzZCA9IF9tbV91bnBhY2toaV9waTE2KHJvdzJoLCByb3czaCk7ICAgLyogcm93MjNkPSgyNiAzNiAyNyAzNykgKi8gXAorICBcCisgIHJvdzAxYSA9IF9tbV91bnBhY2tsb19waTE2KHJvdzBsLCByb3cxbCk7ICAgLyogcm93MDFhPSgwMCAxMCAwMSAxMSkgKi8gXAorICByb3cwMWIgPSBfbW1fdW5wYWNraGlfcGkxNihyb3cwbCwgcm93MWwpOyAgIC8qIHJvdzAxYj0oMDIgMTIgMDMgMTMpICovIFwKKyAgcm93MDFjID0gX21tX3VucGFja2xvX3BpMTYocm93MGgsIHJvdzFoKTsgICAvKiByb3cwMWM9KDA0IDE0IDA1IDE1KSAqLyBcCisgIHJvdzAxZCA9IF9tbV91bnBhY2toaV9waTE2KHJvdzBoLCByb3cxaCk7ICAgLyogcm93MDFkPSgwNiAxNiAwNyAxNykgKi8gXAorICBcCisgIGNvbDAgPSBfbW1fdW5wYWNrbG9fcGkzMihyb3cwMWEsIHJvdzIzYSk7ICAgLyogY29sMD0oMDAgMTAgMjAgMzApICovIFwKKyAgY29sMSA9IF9tbV91bnBhY2toaV9waTMyKHJvdzAxYSwgcm93MjNhKTsgICAvKiBjb2wxPSgwMSAxMSAyMSAzMSkgKi8gXAorICBjb2w2ID0gX21tX3VucGFja2xvX3BpMzIocm93MDFkLCByb3cyM2QpOyAgIC8qIGNvbDY9KDA2IDE2IDI2IDM2KSAqLyBcCisgIGNvbDcgPSBfbW1fdW5wYWNraGlfcGkzMihyb3cwMWQsIHJvdzIzZCk7ICAgLyogY29sNz0oMDcgMTcgMjcgMzcpICovIFwKKyAgXAorICB0bXA2ID0gX21tX3N1Yl9waTE2KGNvbDEsIGNvbDYpOyAgICAgICAgICAgIC8qIHRtcDY9Y29sMS1jb2w2ICovIFwKKyAgdG1wNyA9IF9tbV9zdWJfcGkxNihjb2wwLCBjb2w3KTsgICAgICAgICAgICAvKiB0bXA3PWNvbDAtY29sNyAqLyBcCisgIHRtcDEgPSBfbW1fYWRkX3BpMTYoY29sMSwgY29sNik7ICAgICAgICAgICAgLyogdG1wMT1jb2wxK2NvbDYgKi8gXAorICB0bXAwID0gX21tX2FkZF9waTE2KGNvbDAsIGNvbDcpOyAgICAgICAgICAgIC8qIHRtcDA9Y29sMCtjb2w3ICovIFwKKyAgXAorICBjb2wyID0gX21tX3VucGFja2xvX3BpMzIocm93MDFiLCByb3cyM2IpOyAgIC8qIGNvbDI9KDAyIDEyIDIyIDMyKSAqLyBcCisgIGNvbDMgPSBfbW1fdW5wYWNraGlfcGkzMihyb3cwMWIsIHJvdzIzYik7ICAgLyogY29sMz0oMDMgMTMgMjMgMzMpICovIFwKKyAgY29sNCA9IF9tbV91bnBhY2tsb19waTMyKHJvdzAxYywgcm93MjNjKTsgICAvKiBjb2w0PSgwNCAxNCAyNCAzNCkgKi8gXAorICBjb2w1ID0gX21tX3VucGFja2hpX3BpMzIocm93MDFjLCByb3cyM2MpOyAgIC8qIGNvbDU9KDA1IDE1IDI1IDM1KSAqLyBcCisgIFwKKyAgdG1wMyA9IF9tbV9hZGRfcGkxNihjb2wzLCBjb2w0KTsgICAgICAgICAgICAvKiB0bXAzPWNvbDMrY29sNCAqLyBcCisgIHRtcDIgPSBfbW1fYWRkX3BpMTYoY29sMiwgY29sNSk7ICAgICAgICAgICAgLyogdG1wMj1jb2wyK2NvbDUgKi8gXAorICB0bXA0ID0gX21tX3N1Yl9waTE2KGNvbDMsIGNvbDQpOyAgICAgICAgICAgIC8qIHRtcDQ9Y29sMy1jb2w0ICovIFwKKyAgdG1wNSA9IF9tbV9zdWJfcGkxNihjb2wyLCBjb2w1KTsgICAgICAgICAgICAvKiB0bXA1PWNvbDItY29sNSAqLyBcCisgIFwKKyAgLyogRXZlbiBwYXJ0ICovIFwKKyAgXAorICB0bXAxMCA9IF9tbV9hZGRfcGkxNih0bXAwLCB0bXAzKTsgICAgICAgICAgIC8qIHRtcDEwPXRtcDArdG1wMyAqLyBcCisgIHRtcDEzID0gX21tX3N1Yl9waTE2KHRtcDAsIHRtcDMpOyAgICAgICAgICAgLyogdG1wMTM9dG1wMC10bXAzICovIFwKKyAgdG1wMTEgPSBfbW1fYWRkX3BpMTYodG1wMSwgdG1wMik7ICAgICAgICAgICAvKiB0bXAxMT10bXAxK3RtcDIgKi8gXAorICB0bXAxMiA9IF9tbV9zdWJfcGkxNih0bXAxLCB0bXAyKTsgICAgICAgICAgIC8qIHRtcDEyPXRtcDEtdG1wMiAqLyBcCisgIFwKKyAgb3V0MCA9IF9tbV9hZGRfcGkxNih0bXAxMCwgdG1wMTEpOyAgICAgICAgICAvKiBvdXQwPXRtcDEwK3RtcDExICovIFwKKyAgb3V0NCA9IF9tbV9zdWJfcGkxNih0bXAxMCwgdG1wMTEpOyAgICAgICAgICAvKiBvdXQ0PXRtcDEwLXRtcDExICovIFwKKyAgb3V0MCA9IF9tbV9zbGxpX3BpMTYob3V0MCwgUEFTUzFfQklUUyk7IFwKKyAgb3V0NCA9IF9tbV9zbGxpX3BpMTYob3V0NCwgUEFTUzFfQklUUyk7IFwKKyAgXAorICBET19GRENUX0NPTU1PTigxKSBcCisgIFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDBdLCBvdXQwKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmZGF0YXB0cltEQ1RTSVpFICogMCArIDRdLCBvdXQ0KTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmZGF0YXB0cltEQ1RTSVpFICogMV0sIG91dDEpOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAxICsgNF0sIG91dDUpOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAyXSwgb3V0Mik7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDIgKyA0XSwgb3V0Nik7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDNdLCBvdXQzKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmZGF0YXB0cltEQ1RTSVpFICogMyArIDRdLCBvdXQ3KTsgXAorfQorCisjZGVmaW5lIERPX0ZEQ1RfUEFTUzIoKSB7IFwKKyAgX19tNjQgY29sMGwsIGNvbDBoLCBjb2wxbCwgY29sMWgsIGNvbDJsLCBjb2wyaCwgY29sM2wsIGNvbDNoOyBcCisgIF9fbTY0IGNvbDAxYSwgY29sMDFiLCBjb2wwMWMsIGNvbDAxZCwgY29sMjNhLCBjb2wyM2IsIGNvbDIzYywgY29sMjNkOyBcCisgIF9fbTY0IHJvdzAsIHJvdzEsIHJvdzIsIHJvdzMsIHJvdzQsIHJvdzUsIHJvdzYsIHJvdzc7IFwKKyAgX19tNjQgdG1wMTAsIHRtcDExOyBcCisgIFwKKyAgY29sMGwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAwXSk7ICAvKiAoMDAgMTAgMjAgMzApICovIFwKKyAgY29sMWwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAxXSk7ICAvKiAoMDEgMTEgMjEgMzEpICovIFwKKyAgY29sMmwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAyXSk7ICAvKiAoMDIgMTIgMjIgMzIpICovIFwKKyAgY29sM2wgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAzXSk7ICAvKiAoMDMgMTMgMjMgMzMpICovIFwKKyAgY29sMGggPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiA0XSk7ICAvKiAoNDAgNTAgNjAgNzApICovIFwKKyAgY29sMWggPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiA1XSk7ICAvKiAoNDEgNTEgNjEgNzEpICovIFwKKyAgY29sMmggPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiA2XSk7ICAvKiAoNDIgNTIgNjIgNzIpICovIFwKKyAgY29sM2ggPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiA3XSk7ICAvKiAoNDMgNTMgNjMgNzMpICovIFwKKyAgXAorICAvKiBUcmFuc3Bvc2UgY29lZmZpY2llbnRzICovIFwKKyAgXAorICBjb2wyM2EgPSBfbW1fdW5wYWNrbG9fcGkxNihjb2wybCwgY29sM2wpOyAgIC8qIGNvbDIzYT0oMDIgMDMgMTIgMTMpICovIFwKKyAgY29sMjNiID0gX21tX3VucGFja2hpX3BpMTYoY29sMmwsIGNvbDNsKTsgICAvKiBjb2wyM2I9KDIyIDIzIDMyIDMzKSAqLyBcCisgIGNvbDIzYyA9IF9tbV91bnBhY2tsb19waTE2KGNvbDJoLCBjb2wzaCk7ICAgLyogY29sMjNjPSg0MiA0MyA1MiA1MykgKi8gXAorICBjb2wyM2QgPSBfbW1fdW5wYWNraGlfcGkxNihjb2wyaCwgY29sM2gpOyAgIC8qIGNvbDIzZD0oNjIgNjMgNzIgNzMpICovIFwKKyAgXAorICBjb2wwMWEgPSBfbW1fdW5wYWNrbG9fcGkxNihjb2wwbCwgY29sMWwpOyAgIC8qIGNvbDAxYT0oMDAgMDEgMTAgMTEpICovIFwKKyAgY29sMDFiID0gX21tX3VucGFja2hpX3BpMTYoY29sMGwsIGNvbDFsKTsgICAvKiBjb2wwMWI9KDIwIDIxIDMwIDMxKSAqLyBcCisgIGNvbDAxYyA9IF9tbV91bnBhY2tsb19waTE2KGNvbDBoLCBjb2wxaCk7ICAgLyogY29sMDFjPSg0MCA0MSA1MCA1MSkgKi8gXAorICBjb2wwMWQgPSBfbW1fdW5wYWNraGlfcGkxNihjb2wwaCwgY29sMWgpOyAgIC8qIGNvbDAxZD0oNjAgNjEgNzAgNzEpICovIFwKKyAgXAorICByb3cwID0gX21tX3VucGFja2xvX3BpMzIoY29sMDFhLCBjb2wyM2EpOyAgIC8qIHJvdzA9KDAwIDAxIDAyIDAzKSAqLyBcCisgIHJvdzEgPSBfbW1fdW5wYWNraGlfcGkzMihjb2wwMWEsIGNvbDIzYSk7ICAgLyogcm93MT0oMTAgMTEgMTIgMTMpICovIFwKKyAgcm93NiA9IF9tbV91bnBhY2tsb19waTMyKGNvbDAxZCwgY29sMjNkKTsgICAvKiByb3c2PSg2MCA2MSA2MiA2MykgKi8gXAorICByb3c3ID0gX21tX3VucGFja2hpX3BpMzIoY29sMDFkLCBjb2wyM2QpOyAgIC8qIHJvdzc9KDcwIDcxIDcyIDczKSAqLyBcCisgIFwKKyAgdG1wNiA9IF9tbV9zdWJfcGkxNihyb3cxLCByb3c2KTsgICAgICAgICAgICAvKiB0bXA2PXJvdzEtcm93NiAqLyBcCisgIHRtcDcgPSBfbW1fc3ViX3BpMTYocm93MCwgcm93Nyk7ICAgICAgICAgICAgLyogdG1wNz1yb3cwLXJvdzcgKi8gXAorICB0bXAxID0gX21tX2FkZF9waTE2KHJvdzEsIHJvdzYpOyAgICAgICAgICAgIC8qIHRtcDE9cm93MStyb3c2ICovIFwKKyAgdG1wMCA9IF9tbV9hZGRfcGkxNihyb3cwLCByb3c3KTsgICAgICAgICAgICAvKiB0bXAwPXJvdzArcm93NyAqLyBcCisgIFwKKyAgcm93MiA9IF9tbV91bnBhY2tsb19waTMyKGNvbDAxYiwgY29sMjNiKTsgICAvKiByb3cyPSgyMCAyMSAyMiAyMykgKi8gXAorICByb3czID0gX21tX3VucGFja2hpX3BpMzIoY29sMDFiLCBjb2wyM2IpOyAgIC8qIHJvdzM9KDMwIDMxIDMyIDMzKSAqLyBcCisgIHJvdzQgPSBfbW1fdW5wYWNrbG9fcGkzMihjb2wwMWMsIGNvbDIzYyk7ICAgLyogcm93ND0oNDAgNDEgNDIgNDMpICovIFwKKyAgcm93NSA9IF9tbV91bnBhY2toaV9waTMyKGNvbDAxYywgY29sMjNjKTsgICAvKiByb3c1PSg1MCA1MSA1MiA1MykgKi8gXAorICBcCisgIHRtcDMgPSBfbW1fYWRkX3BpMTYocm93Mywgcm93NCk7ICAgICAgICAgICAgLyogdG1wMz1yb3czK3JvdzQgKi8gXAorICB0bXAyID0gX21tX2FkZF9waTE2KHJvdzIsIHJvdzUpOyAgICAgICAgICAgIC8qIHRtcDI9cm93Mityb3c1ICovIFwKKyAgdG1wNCA9IF9tbV9zdWJfcGkxNihyb3czLCByb3c0KTsgICAgICAgICAgICAvKiB0bXA0PXJvdzMtcm93NCAqLyBcCisgIHRtcDUgPSBfbW1fc3ViX3BpMTYocm93Miwgcm93NSk7ICAgICAgICAgICAgLyogdG1wNT1yb3cyLXJvdzUgKi8gXAorICBcCisgIC8qIEV2ZW4gcGFydCAqLyBcCisgIFwKKyAgdG1wMTAgPSBfbW1fYWRkX3BpMTYodG1wMCwgdG1wMyk7ICAgICAgICAgICAvKiB0bXAxMD10bXAwK3RtcDMgKi8gXAorICB0bXAxMyA9IF9tbV9zdWJfcGkxNih0bXAwLCB0bXAzKTsgICAgICAgICAgIC8qIHRtcDEzPXRtcDAtdG1wMyAqLyBcCisgIHRtcDExID0gX21tX2FkZF9waTE2KHRtcDEsIHRtcDIpOyAgICAgICAgICAgLyogdG1wMTE9dG1wMSt0bXAyICovIFwKKyAgdG1wMTIgPSBfbW1fc3ViX3BpMTYodG1wMSwgdG1wMik7ICAgICAgICAgICAvKiB0bXAxMj10bXAxLXRtcDIgKi8gXAorICBcCisgIG91dDAgPSBfbW1fYWRkX3BpMTYodG1wMTAsIHRtcDExKTsgICAgICAgICAgLyogb3V0MD10bXAxMCt0bXAxMSAqLyBcCisgIG91dDQgPSBfbW1fc3ViX3BpMTYodG1wMTAsIHRtcDExKTsgICAgICAgICAgLyogb3V0ND10bXAxMC10bXAxMSAqLyBcCisgIFwKKyAgb3V0MCA9IF9tbV9hZGRfcGkxNihvdXQwLCBQV19ERVNDQUxFX1AyWCk7IFwKKyAgb3V0NCA9IF9tbV9hZGRfcGkxNihvdXQ0LCBQV19ERVNDQUxFX1AyWCk7IFwKKyAgb3V0MCA9IF9tbV9zcmFpX3BpMTYob3V0MCwgUEFTUzFfQklUUyk7IFwKKyAgb3V0NCA9IF9tbV9zcmFpX3BpMTYob3V0NCwgUEFTUzFfQklUUyk7IFwKKyAgXAorICBET19GRENUX0NPTU1PTigyKSBcCisgIFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDBdLCBvdXQwKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmZGF0YXB0cltEQ1RTSVpFICogMV0sIG91dDEpOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiAyXSwgb3V0Mik7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDNdLCBvdXQzKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmZGF0YXB0cltEQ1RTSVpFICogNF0sIG91dDQpOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKSZkYXRhcHRyW0RDVFNJWkUgKiA1XSwgb3V0NSk7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJmRhdGFwdHJbRENUU0laRSAqIDZdLCBvdXQ2KTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmZGF0YXB0cltEQ1RTSVpFICogN10sIG91dDcpOyBcCit9CisKK3ZvaWQganNpbWRfZmRjdF9pc2xvd19tbWkoRENURUxFTSAqZGF0YSkKK3sKKyAgX19tNjQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsKKyAgX19tNjQgb3V0MCwgb3V0MSwgb3V0Miwgb3V0Mywgb3V0NCwgb3V0NSwgb3V0Niwgb3V0NzsKKyAgX19tNjQgdG1wMTIsIHRtcDEzOworICBEQ1RFTEVNICpkYXRhcHRyID0gZGF0YTsKKworICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KKworICBET19GRENUX1BBU1MxKCkKKyAgZGF0YXB0ciArPSBEQ1RTSVpFICogNDsKKyAgRE9fRkRDVF9QQVNTMSgpCisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuICovCisKKyAgZGF0YXB0ciA9IGRhdGE7CisgIERPX0ZEQ1RfUEFTUzIoKQorICBkYXRhcHRyICs9IDQ7CisgIERPX0ZEQ1RfUEFTUzIoKQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qaWRjdGludC1tbWkuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamlkY3RpbnQtbW1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5YzYzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vamlkY3RpbnQtbW1pLmMKQEAgLTAsMCArMSw1NzEgQEAKKy8qCisgKiBMb29uZ3NvbiBNTUkgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCwgQmVpSmluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXV0aG9yczogIFpodUNoZW4gICAgIDx6aHVjaGVuQGxvb25nc29uLmNuPgorICogICAgICAgICAgIENhaVdhbndlaSAgIDxjYWl3YW53ZWlAbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgU3VuWmhhbmd6aGkgPHN1bnpoYW5nemhpLWNxQGxvb25nc29uLmNuPgorICoKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisvKiBTTE9XIElOVEVHRVIgSU5WRVJTRSBEQ1QgKi8KKworI2luY2x1ZGUgImpzaW1kX21taS5oIgorCisKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMgorI2RlZmluZSBERVNDQUxFX1AxICAoQ09OU1RfQklUUyAtIFBBU1MxX0JJVFMpCisjZGVmaW5lIERFU0NBTEVfUDIgIChDT05TVF9CSVRTICsgUEFTUzFfQklUUyArIDMpCisjZGVmaW5lIENFTlRFUkpTQU1QTEUgIDEyOAorCisjZGVmaW5lIEZJWF8wXzI5OCAgKChzaG9ydCkyNDQ2KSAgLyogRklYKDAuMjk4NjMxMzM2KSAqLworI2RlZmluZSBGSVhfMF8zOTAgICgoc2hvcnQpMzE5NikgIC8qIEZJWCgwLjM5MDE4MDY0NCkgKi8KKyNkZWZpbmUgRklYXzBfODk5ICAoKHNob3J0KTczNzMpICAvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZJWF8wXzU0MSAgKChzaG9ydCk0NDMzKSAgLyogRklYKDAuNTQxMTk2MTAwKSAqLworI2RlZmluZSBGSVhfMF83NjUgICgoc2hvcnQpNjI3MCkgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzFfMTc1ICAoKHNob3J0KTk2MzMpICAvKiBGSVgoMS4xNzU4NzU2MDIpICovCisjZGVmaW5lIEZJWF8xXzUwMSAgKChzaG9ydCkxMjI5OSkgLyogRklYKDEuNTAxMzIxMTEwKSAqLworI2RlZmluZSBGSVhfMV84NDcgICgoc2hvcnQpMTUxMzcpIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzFfOTYxICAoKHNob3J0KTE2MDY5KSAvKiBGSVgoMS45NjE1NzA1NjApICovCisjZGVmaW5lIEZJWF8yXzA1MyAgKChzaG9ydCkxNjgxOSkgLyogRklYKDIuMDUzMTE5ODY5KSAqLworI2RlZmluZSBGSVhfMl81NjIgICgoc2hvcnQpMjA5OTUpIC8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRklYXzNfMDcyICAoKHNob3J0KTI1MTcyKSAvKiBGSVgoMy4wNzI3MTEwMjYpICovCisKK2VudW0gY29uc3RfaW5kZXggeworICBpbmRleF9QV19GMTMwX0YwNTQsCisgIGluZGV4X1BXX0YwNTRfTUYxMzAsCisgIGluZGV4X1BXX01GMDc4X0YxMTcsCisgIGluZGV4X1BXX0YxMTdfRjA3OCwKKyAgaW5kZXhfUFdfTUYwNjBfTUYwODksCisgIGluZGV4X1BXX01GMDg5X0YwNjAsCisgIGluZGV4X1BXX01GMDUwX01GMjU2LAorICBpbmRleF9QV19NRjI1Nl9GMDUwLAorICBpbmRleF9QRF9ERVNDQUxFX1AxLAorICBpbmRleF9QRF9ERVNDQUxFX1AyLAorICBpbmRleF9QQl9DRU5URVJKU0FNUAorfTsKKworc3RhdGljIHVpbnQ2NF90IGNvbnN0X3ZhbHVlW10gPSB7CisgIF91aW50NjRfc2V0X3BpMTYoRklYXzBfNTQxLCAoRklYXzBfNTQxICsgRklYXzBfNzY1KSwKKyAgICAgICAgICAgICAgICAgICBGSVhfMF81NDEsIChGSVhfMF81NDEgKyBGSVhfMF83NjUpKSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigoRklYXzBfNTQxIC0gRklYXzFfODQ3KSwgRklYXzBfNTQxLAorICAgICAgICAgICAgICAgICAgIChGSVhfMF81NDEgLSBGSVhfMV84NDcpLCBGSVhfMF81NDEpLAorICBfdWludDY0X3NldF9waTE2KEZJWF8xXzE3NSwgKEZJWF8xXzE3NSAtIEZJWF8xXzk2MSksCisgICAgICAgICAgICAgICAgICAgRklYXzFfMTc1LCAoRklYXzFfMTc1IC0gRklYXzFfOTYxKSksCisgIF91aW50NjRfc2V0X3BpMTYoKEZJWF8xXzE3NSAtIEZJWF8wXzM5MCksIEZJWF8xXzE3NSwKKyAgICAgICAgICAgICAgICAgICAoRklYXzFfMTc1IC0gRklYXzBfMzkwKSwgRklYXzFfMTc1KSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigtRklYXzBfODk5LCAoRklYXzBfMjk4IC0gRklYXzBfODk5KSwKKyAgICAgICAgICAgICAgICAgICAtRklYXzBfODk5LCAoRklYXzBfMjk4IC0gRklYXzBfODk5KSksCisgIF91aW50NjRfc2V0X3BpMTYoKEZJWF8xXzUwMSAtIEZJWF8wXzg5OSksIC1GSVhfMF84OTksCisgICAgICAgICAgICAgICAgICAgKEZJWF8xXzUwMSAtIEZJWF8wXzg5OSksIC1GSVhfMF84OTkpLAorICBfdWludDY0X3NldF9waTE2KC1GSVhfMl81NjIsIChGSVhfMl8wNTMgLSBGSVhfMl81NjIpLAorICAgICAgICAgICAgICAgICAgIC1GSVhfMl81NjIsIChGSVhfMl8wNTMgLSBGSVhfMl81NjIpKSwKKyAgX3VpbnQ2NF9zZXRfcGkxNigoRklYXzNfMDcyIC0gRklYXzJfNTYyKSwgLUZJWF8yXzU2MiwKKyAgICAgICAgICAgICAgICAgICAoRklYXzNfMDcyIC0gRklYXzJfNTYyKSwgLUZJWF8yXzU2MiksCisgIF91aW50NjRfc2V0X3BpMzIoKDEgPDwgKERFU0NBTEVfUDEgLSAxKSksICgxIDw8IChERVNDQUxFX1AxIC0gMSkpKSwKKyAgX3VpbnQ2NF9zZXRfcGkzMigoMSA8PCAoREVTQ0FMRV9QMiAtIDEpKSwgKDEgPDwgKERFU0NBTEVfUDIgLSAxKSkpLAorICBfdWludDY0X3NldF9waTgoQ0VOVEVSSlNBTVBMRSwgQ0VOVEVSSlNBTVBMRSwgQ0VOVEVSSlNBTVBMRSwgQ0VOVEVSSlNBTVBMRSwKKyAgICAgICAgICAgICAgICAgIENFTlRFUkpTQU1QTEUsIENFTlRFUkpTQU1QTEUsIENFTlRFUkpTQU1QTEUsIENFTlRFUkpTQU1QTEUpCit9OworCisjZGVmaW5lIFBXX0YxMzBfRjA1NCAgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfRjEzMF9GMDU0KQorI2RlZmluZSBQV19GMDU0X01GMTMwICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BXX0YwNTRfTUYxMzApCisjZGVmaW5lIFBXX01GMDc4X0YxMTcgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwNzhfRjExNykKKyNkZWZpbmUgUFdfRjExN19GMDc4ICAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19GMTE3X0YwNzgpCisjZGVmaW5lIFBXX01GMDYwX01GMDg5ICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwNjBfTUYwODkpCisjZGVmaW5lIFBXX01GMDg5X0YwNjAgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUFdfTUYwODlfRjA2MCkKKyNkZWZpbmUgUFdfTUYwNTBfTUYyNTYgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19NRjA1MF9NRjI1NikKKyNkZWZpbmUgUFdfTUYyNTZfRjA1MCAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QV19NRjI1Nl9GMDUwKQorI2RlZmluZSBQRF9ERVNDQUxFX1AxICAgZ2V0X2NvbnN0X3ZhbHVlKGluZGV4X1BEX0RFU0NBTEVfUDEpCisjZGVmaW5lIFBEX0RFU0NBTEVfUDIgICBnZXRfY29uc3RfdmFsdWUoaW5kZXhfUERfREVTQ0FMRV9QMikKKyNkZWZpbmUgUEJfQ0VOVEVSSlNBTVAgIGdldF9jb25zdF92YWx1ZShpbmRleF9QQl9DRU5URVJKU0FNUCkKKworCisjZGVmaW5lIHRlc3RfbTMyX3plcm8obW0zMikgICghKCoodWludDMyX3QgKikmbW0zMikpCisjZGVmaW5lIHRlc3RfbTY0X3plcm8obW02NCkgICghKCoodWludDY0X3QgKikmbW02NCkpCisKKworI2RlZmluZSBET19JRENUX0NPTU1PTihQQVNTKSB7IFwKKyAgX19tNjQgdG1wMF8zbCwgdG1wMF8zaCwgdG1wMV8ybCwgdG1wMV8yaDsgXAorICBfX202NCB0bXAwbCwgdG1wMGgsIHRtcDFsLCB0bXAxaCwgdG1wMmwsIHRtcDJoLCB0bXAzbCwgdG1wM2g7IFwKKyAgX19tNjQgejM0bCwgejM0aCwgejNsLCB6M2gsIHo0bCwgejRoLCB6MywgejQ7IFwKKyAgX19tNjQgb3V0MGwsIG91dDBoLCBvdXQxbCwgb3V0MWgsIG91dDJsLCBvdXQyaCwgb3V0M2wsIG91dDNoOyBcCisgIF9fbTY0IG91dDRsLCBvdXQ0aCwgb3V0NWwsIG91dDVoLCBvdXQ2bCwgb3V0NmgsIG91dDdsLCBvdXQ3aDsgXAorICBcCisgIHozID0gX21tX2FkZF9waTE2KHRtcDAsIHRtcDIpOyBcCisgIHo0ID0gX21tX2FkZF9waTE2KHRtcDEsIHRtcDMpOyBcCisgIFwKKyAgLyogKE9yaWdpbmFsKSBcCisgICAqIHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7IFwKKyAgICogejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7IFwKKyAgICogejMgKz0gejU7ICB6NCArPSB6NTsgXAorICAgKiBcCisgICAqIChUaGlzIGltcGxlbWVudGF0aW9uKSBcCisgICAqIHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOyBcCisgICAqIHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOyBcCisgICAqLyBcCisgIFwKKyAgejM0bCA9IF9tbV91bnBhY2tsb19waTE2KHozLCB6NCk7IFwKKyAgejM0aCA9IF9tbV91bnBhY2toaV9waTE2KHozLCB6NCk7IFwKKyAgejNsID0gX21tX21hZGRfcGkxNih6MzRsLCBQV19NRjA3OF9GMTE3KTsgXAorICB6M2ggPSBfbW1fbWFkZF9waTE2KHozNGgsIFBXX01GMDc4X0YxMTcpOyBcCisgIHo0bCA9IF9tbV9tYWRkX3BpMTYoejM0bCwgUFdfRjExN19GMDc4KTsgXAorICB6NGggPSBfbW1fbWFkZF9waTE2KHozNGgsIFBXX0YxMTdfRjA3OCk7IFwKKyAgXAorICAvKiAoT3JpZ2luYWwpIFwKKyAgICogejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7IFwKKyAgICogdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7IFwKKyAgICogdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7IFwKKyAgICogejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7IFwKKyAgICogdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OyBcCisgICAqIHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsgXAorICAgKiBcCisgICAqIChUaGlzIGltcGxlbWVudGF0aW9uKSBcCisgICAqIHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsgXAorICAgKiB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7IFwKKyAgICogdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOyBcCisgICAqIHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsgXAorICAgKiB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsgXAorICAgKiB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsgXAorICAgKi8gXAorICBcCisgIHRtcDBfM2wgPSBfbW1fdW5wYWNrbG9fcGkxNih0bXAwLCB0bXAzKTsgXAorICB0bXAwXzNoID0gX21tX3VucGFja2hpX3BpMTYodG1wMCwgdG1wMyk7IFwKKyAgXAorICB0bXAwbCA9IF9tbV9tYWRkX3BpMTYodG1wMF8zbCwgUFdfTUYwNjBfTUYwODkpOyBcCisgIHRtcDBoID0gX21tX21hZGRfcGkxNih0bXAwXzNoLCBQV19NRjA2MF9NRjA4OSk7IFwKKyAgdG1wM2wgPSBfbW1fbWFkZF9waTE2KHRtcDBfM2wsIFBXX01GMDg5X0YwNjApOyBcCisgIHRtcDNoID0gX21tX21hZGRfcGkxNih0bXAwXzNoLCBQV19NRjA4OV9GMDYwKTsgXAorICBcCisgIHRtcDBsID0gX21tX2FkZF9waTMyKHRtcDBsLCB6M2wpOyBcCisgIHRtcDBoID0gX21tX2FkZF9waTMyKHRtcDBoLCB6M2gpOyBcCisgIHRtcDNsID0gX21tX2FkZF9waTMyKHRtcDNsLCB6NGwpOyBcCisgIHRtcDNoID0gX21tX2FkZF9waTMyKHRtcDNoLCB6NGgpOyBcCisgIFwKKyAgdG1wMV8ybCA9IF9tbV91bnBhY2tsb19waTE2KHRtcDEsIHRtcDIpOyBcCisgIHRtcDFfMmggPSBfbW1fdW5wYWNraGlfcGkxNih0bXAxLCB0bXAyKTsgXAorICBcCisgIHRtcDFsID0gX21tX21hZGRfcGkxNih0bXAxXzJsLCBQV19NRjA1MF9NRjI1Nik7IFwKKyAgdG1wMWggPSBfbW1fbWFkZF9waTE2KHRtcDFfMmgsIFBXX01GMDUwX01GMjU2KTsgXAorICB0bXAybCA9IF9tbV9tYWRkX3BpMTYodG1wMV8ybCwgUFdfTUYyNTZfRjA1MCk7IFwKKyAgdG1wMmggPSBfbW1fbWFkZF9waTE2KHRtcDFfMmgsIFBXX01GMjU2X0YwNTApOyBcCisgIFwKKyAgdG1wMWwgPSBfbW1fYWRkX3BpMzIodG1wMWwsIHo0bCk7IFwKKyAgdG1wMWggPSBfbW1fYWRkX3BpMzIodG1wMWgsIHo0aCk7IFwKKyAgdG1wMmwgPSBfbW1fYWRkX3BpMzIodG1wMmwsIHozbCk7IFwKKyAgdG1wMmggPSBfbW1fYWRkX3BpMzIodG1wMmgsIHozaCk7IFwKKyAgXAorICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8gXAorICBcCisgIG91dDBsID0gX21tX2FkZF9waTMyKHRtcDEwbCwgdG1wM2wpOyBcCisgIG91dDBoID0gX21tX2FkZF9waTMyKHRtcDEwaCwgdG1wM2gpOyBcCisgIG91dDdsID0gX21tX3N1Yl9waTMyKHRtcDEwbCwgdG1wM2wpOyBcCisgIG91dDdoID0gX21tX3N1Yl9waTMyKHRtcDEwaCwgdG1wM2gpOyBcCisgIFwKKyAgb3V0MGwgPSBfbW1fYWRkX3BpMzIob3V0MGwsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MGggPSBfbW1fYWRkX3BpMzIob3V0MGgsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MGwgPSBfbW1fc3JhaV9waTMyKG91dDBsLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDBoID0gX21tX3NyYWlfcGkzMihvdXQwaCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBcCisgIG91dDdsID0gX21tX2FkZF9waTMyKG91dDdsLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDdoID0gX21tX2FkZF9waTMyKG91dDdoLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDdsID0gX21tX3NyYWlfcGkzMihvdXQ3bCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ3aCA9IF9tbV9zcmFpX3BpMzIob3V0N2gsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgXAorICBvdXQwID0gX21tX3BhY2tzX3BpMzIob3V0MGwsIG91dDBoKTsgXAorICBvdXQ3ID0gX21tX3BhY2tzX3BpMzIob3V0N2wsIG91dDdoKTsgXAorICBcCisgIG91dDFsID0gX21tX2FkZF9waTMyKHRtcDExbCwgdG1wMmwpOyBcCisgIG91dDFoID0gX21tX2FkZF9waTMyKHRtcDExaCwgdG1wMmgpOyBcCisgIG91dDZsID0gX21tX3N1Yl9waTMyKHRtcDExbCwgdG1wMmwpOyBcCisgIG91dDZoID0gX21tX3N1Yl9waTMyKHRtcDExaCwgdG1wMmgpOyBcCisgIFwKKyAgb3V0MWwgPSBfbW1fYWRkX3BpMzIob3V0MWwsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MWggPSBfbW1fYWRkX3BpMzIob3V0MWgsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MWwgPSBfbW1fc3JhaV9waTMyKG91dDFsLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDFoID0gX21tX3NyYWlfcGkzMihvdXQxaCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBcCisgIG91dDZsID0gX21tX2FkZF9waTMyKG91dDZsLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDZoID0gX21tX2FkZF9waTMyKG91dDZoLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDZsID0gX21tX3NyYWlfcGkzMihvdXQ2bCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ2aCA9IF9tbV9zcmFpX3BpMzIob3V0NmgsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgXAorICBvdXQxID0gX21tX3BhY2tzX3BpMzIob3V0MWwsIG91dDFoKTsgXAorICBvdXQ2ID0gX21tX3BhY2tzX3BpMzIob3V0NmwsIG91dDZoKTsgXAorICBcCisgIG91dDJsID0gX21tX2FkZF9waTMyKHRtcDEybCwgdG1wMWwpOyBcCisgIG91dDJoID0gX21tX2FkZF9waTMyKHRtcDEyaCwgdG1wMWgpOyBcCisgIG91dDVsID0gX21tX3N1Yl9waTMyKHRtcDEybCwgdG1wMWwpOyBcCisgIG91dDVoID0gX21tX3N1Yl9waTMyKHRtcDEyaCwgdG1wMWgpOyBcCisgIFwKKyAgb3V0MmwgPSBfbW1fYWRkX3BpMzIob3V0MmwsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MmggPSBfbW1fYWRkX3BpMzIob3V0MmgsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0MmwgPSBfbW1fc3JhaV9waTMyKG91dDJsLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDJoID0gX21tX3NyYWlfcGkzMihvdXQyaCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBcCisgIG91dDVsID0gX21tX2FkZF9waTMyKG91dDVsLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDVoID0gX21tX2FkZF9waTMyKG91dDVoLCBQRF9ERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDVsID0gX21tX3NyYWlfcGkzMihvdXQ1bCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQ1aCA9IF9tbV9zcmFpX3BpMzIob3V0NWgsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgXAorICBvdXQyID0gX21tX3BhY2tzX3BpMzIob3V0MmwsIG91dDJoKTsgXAorICBvdXQ1ID0gX21tX3BhY2tzX3BpMzIob3V0NWwsIG91dDVoKTsgXAorICBcCisgIG91dDNsID0gX21tX2FkZF9waTMyKHRtcDEzbCwgdG1wMGwpOyBcCisgIG91dDNoID0gX21tX2FkZF9waTMyKHRtcDEzaCwgdG1wMGgpOyBcCisgIFwKKyAgb3V0NGwgPSBfbW1fc3ViX3BpMzIodG1wMTNsLCB0bXAwbCk7IFwKKyAgb3V0NGggPSBfbW1fc3ViX3BpMzIodG1wMTNoLCB0bXAwaCk7IFwKKyAgXAorICBvdXQzbCA9IF9tbV9hZGRfcGkzMihvdXQzbCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQzaCA9IF9tbV9hZGRfcGkzMihvdXQzaCwgUERfREVTQ0FMRV9QIyNQQVNTKTsgXAorICBvdXQzbCA9IF9tbV9zcmFpX3BpMzIob3V0M2wsIERFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0M2ggPSBfbW1fc3JhaV9waTMyKG91dDNoLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIFwKKyAgb3V0NGwgPSBfbW1fYWRkX3BpMzIob3V0NGwsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0NGggPSBfbW1fYWRkX3BpMzIob3V0NGgsIFBEX0RFU0NBTEVfUCMjUEFTUyk7IFwKKyAgb3V0NGwgPSBfbW1fc3JhaV9waTMyKG91dDRsLCBERVNDQUxFX1AjI1BBU1MpOyBcCisgIG91dDRoID0gX21tX3NyYWlfcGkzMihvdXQ0aCwgREVTQ0FMRV9QIyNQQVNTKTsgXAorICBcCisgIG91dDMgPSBfbW1fcGFja3NfcGkzMihvdXQzbCwgb3V0M2gpOyBcCisgIG91dDQgPSBfbW1fcGFja3NfcGkzMihvdXQ0bCwgb3V0NGgpOyBcCit9CisKKyNkZWZpbmUgRE9fSURDVF9QQVNTMShpdGVyKSB7IFwKKyAgX19tNjQgY29sMGwsIGNvbDFsLCBjb2wybCwgY29sM2wsIGNvbDRsLCBjb2w1bCwgY29sNmwsIGNvbDdsOyBcCisgIF9fbTY0IHF1YW50MGwsIHF1YW50MWwsIHF1YW50MmwsIHF1YW50M2w7IFwKKyAgX19tNjQgcXVhbnQ0bCwgcXVhbnQ1bCwgcXVhbnQ2bCwgcXVhbnQ3bDsgXAorICBfX202NCB6MjMsIHoyLCB6MywgejIzbCwgejIzaDsgXAorICBfX202NCByb3cwMWEsIHJvdzAxYiwgcm93MDFjLCByb3cwMWQsIHJvdzIzYSwgcm93MjNiLCByb3cyM2MsIHJvdzIzZDsgXAorICBfX202NCByb3cwbCwgcm93MGgsIHJvdzFsLCByb3cxaCwgcm93MmwsIHJvdzJoLCByb3czbCwgcm93M2g7IFwKKyAgX19tNjQgdG1wMGwsIHRtcDBoLCB0bXAxbCwgdG1wMWgsIHRtcDJsLCB0bXAyaCwgdG1wM2wsIHRtcDNoOyBcCisgIF9fbTY0IHRtcDEwbCwgdG1wMTBoLCB0bXAxMWwsIHRtcDExaCwgdG1wMTJsLCB0bXAxMmgsIHRtcDEzbCwgdG1wMTNoOyBcCisgIF9fbTMyIGNvbDBhLCBjb2wxYSwgbW0wOyBcCisgIFwKKyAgY29sMGEgPSBfbW1fbG9hZF9zaTMyKChfX20zMiAqKSZpbnB0cltEQ1RTSVpFICogMV0pOyBcCisgIGNvbDFhID0gX21tX2xvYWRfc2kzMigoX19tMzIgKikmaW5wdHJbRENUU0laRSAqIDJdKTsgXAorICBtbTAgPSBfbW1fb3Jfc2kzMihjb2wwYSwgY29sMWEpOyBcCisgIFwKKyAgaWYgKHRlc3RfbTMyX3plcm8obW0wKSkgeyBcCisgICAgX19tNjQgbW0xLCBtbTI7IFwKKyAgICBcCisgICAgY29sMGwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogMF0pOyBcCisgICAgY29sMWwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogMV0pOyBcCisgICAgY29sMmwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogMl0pOyBcCisgICAgY29sM2wgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogM10pOyBcCisgICAgY29sNGwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogNF0pOyBcCisgICAgY29sNWwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogNV0pOyBcCisgICAgY29sNmwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogNl0pOyBcCisgICAgY29sN2wgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogN10pOyBcCisgICAgXAorICAgIG1tMSA9IF9tbV9vcl9zaTY0KGNvbDFsLCBjb2wzbCk7IFwKKyAgICBtbTIgPSBfbW1fb3Jfc2k2NChjb2wybCwgY29sNGwpOyBcCisgICAgbW0xID0gX21tX29yX3NpNjQobW0xLCBjb2w1bCk7IFwKKyAgICBtbTIgPSBfbW1fb3Jfc2k2NChtbTIsIGNvbDZsKTsgXAorICAgIG1tMSA9IF9tbV9vcl9zaTY0KG1tMSwgY29sN2wpOyBcCisgICAgbW0xID0gX21tX29yX3NpNjQobW0xLCBtbTIpOyBcCisgICAgXAorICAgIGlmICh0ZXN0X202NF96ZXJvKG1tMSkpIHsgXAorICAgICAgX19tNjQgZGN2YWwsIGRjdmFsbCwgZGN2YWxoLCByb3cwLCByb3cxLCByb3cyLCByb3czOyBcCisgICAgICBcCisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLyBcCisgICAgICBcCisgICAgICBxdWFudDBsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmcXVhbnRwdHJbRENUU0laRSAqIDBdKTsgXAorICAgICAgXAorICAgICAgZGN2YWwgPSBfbW1fbXVsbG9fcGkxNihjb2wwbCwgcXVhbnQwbCk7IFwKKyAgICAgIGRjdmFsID0gX21tX3NsbGlfcGkxNihkY3ZhbCwgUEFTUzFfQklUUyk7ICAvKiBkY3ZhbD0oMDAgMTAgMjAgMzApICovIFwKKyAgICAgIFwKKyAgICAgIGRjdmFsbCA9IF9tbV91bnBhY2tsb19waTE2KGRjdmFsLCBkY3ZhbCk7ICAvKiBkY3ZhbGw9KDAwIDAwIDEwIDEwKSAqLyBcCisgICAgICBkY3ZhbGggPSBfbW1fdW5wYWNraGlfcGkxNihkY3ZhbCwgZGN2YWwpOyAgLyogZGN2YWxoPSgyMCAyMCAzMCAzMCkgKi8gXAorICAgICAgXAorICAgICAgcm93MCA9IF9tbV91bnBhY2tsb19waTMyKGRjdmFsbCwgZGN2YWxsKTsgIC8qIHJvdzA9KDAwIDAwIDAwIDAwKSAqLyBcCisgICAgICByb3cxID0gX21tX3VucGFja2hpX3BpMzIoZGN2YWxsLCBkY3ZhbGwpOyAgLyogcm93MT0oMTAgMTAgMTAgMTApICovIFwKKyAgICAgIHJvdzIgPSBfbW1fdW5wYWNrbG9fcGkzMihkY3ZhbGgsIGRjdmFsaCk7ICAvKiByb3cyPSgyMCAyMCAyMCAyMCkgKi8gXAorICAgICAgcm93MyA9IF9tbV91bnBhY2toaV9waTMyKGRjdmFsaCwgZGN2YWxoKTsgIC8qIHJvdzM9KDMwIDMwIDMwIDMwKSAqLyBcCisgICAgICBcCisgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDBdLCByb3cwKTsgXAorICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAwICsgNF0sIHJvdzApOyBcCisgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDFdLCByb3cxKTsgXAorICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAxICsgNF0sIHJvdzEpOyBcCisgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDJdLCByb3cyKTsgXAorICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAyICsgNF0sIHJvdzIpOyBcCisgICAgICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDNdLCByb3czKTsgXAorICAgICAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAzICsgNF0sIHJvdzMpOyBcCisgICAgICBcCisgICAgICBnb3RvIG5leHRjb2x1bW4jI2l0ZXI7IFwKKyAgICB9IFwKKyAgfSBcCisgIFwKKyAgLyogRXZlbiBwYXJ0IFwKKyAgICogXAorICAgKiAoT3JpZ2luYWwpIFwKKyAgICogejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsgXAorICAgKiB0bXAyID0gejEgKyB6MyAqIC0xLjg0Nzc1OTA2NTsgXAorICAgKiB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OyBcCisgICAqIFwKKyAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pIFwKKyAgICogdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsgXAorICAgKiB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOyBcCisgICAqLyBcCisgIFwKKyAgY29sMGwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogMF0pOyAgLyogKDAwIDEwIDIwIDMwKSAqLyBcCisgIGNvbDJsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmaW5wdHJbRENUU0laRSAqIDJdKTsgIC8qICgwMiAxMiAyMiAzMikgKi8gXAorICBjb2w0bCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmlucHRyW0RDVFNJWkUgKiA0XSk7ICAvKiAoMDQgMTQgMjQgMzQpICovIFwKKyAgY29sNmwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogNl0pOyAgLyogKDA2IDE2IDI2IDM2KSAqLyBcCisgIFwKKyAgcXVhbnQwbCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJnF1YW50cHRyW0RDVFNJWkUgKiAwXSk7IFwKKyAgcXVhbnQybCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJnF1YW50cHRyW0RDVFNJWkUgKiAyXSk7IFwKKyAgcXVhbnQ0bCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJnF1YW50cHRyW0RDVFNJWkUgKiA0XSk7IFwKKyAgcXVhbnQ2bCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJnF1YW50cHRyW0RDVFNJWkUgKiA2XSk7IFwKKyAgXAorICB6MiA9IF9tbV9tdWxsb19waTE2KGNvbDJsLCBxdWFudDJsKTsgXAorICB6MyA9IF9tbV9tdWxsb19waTE2KGNvbDZsLCBxdWFudDZsKTsgXAorICBcCisgIHoyM2wgPSBfbW1fdW5wYWNrbG9fcGkxNih6MiwgejMpOyBcCisgIHoyM2ggPSBfbW1fdW5wYWNraGlfcGkxNih6MiwgejMpOyBcCisgIHRtcDNsID0gX21tX21hZGRfcGkxNih6MjNsLCBQV19GMTMwX0YwNTQpOyBcCisgIHRtcDNoID0gX21tX21hZGRfcGkxNih6MjNoLCBQV19GMTMwX0YwNTQpOyBcCisgIHRtcDJsID0gX21tX21hZGRfcGkxNih6MjNsLCBQV19GMDU0X01GMTMwKTsgXAorICB0bXAyaCA9IF9tbV9tYWRkX3BpMTYoejIzaCwgUFdfRjA1NF9NRjEzMCk7IFwKKyAgXAorICB6MiA9IF9tbV9tdWxsb19waTE2KGNvbDBsLCBxdWFudDBsKTsgXAorICB6MyA9IF9tbV9tdWxsb19waTE2KGNvbDRsLCBxdWFudDRsKTsgXAorICBcCisgIHoyMyA9IF9tbV9hZGRfcGkxNih6MiwgejMpOyBcCisgIHRtcDBsID0gX21tX2xvYWRsb19waTE2X2YoejIzKTsgXAorICB0bXAwaCA9IF9tbV9sb2FkaGlfcGkxNl9mKHoyMyk7IFwKKyAgdG1wMGwgPSBfbW1fc3JhaV9waTMyKHRtcDBsLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgdG1wMGggPSBfbW1fc3JhaV9waTMyKHRtcDBoLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgXAorICB0bXAxMGwgPSBfbW1fYWRkX3BpMzIodG1wMGwsIHRtcDNsKTsgXAorICB0bXAxMGggPSBfbW1fYWRkX3BpMzIodG1wMGgsIHRtcDNoKTsgXAorICB0bXAxM2wgPSBfbW1fc3ViX3BpMzIodG1wMGwsIHRtcDNsKTsgXAorICB0bXAxM2ggPSBfbW1fc3ViX3BpMzIodG1wMGgsIHRtcDNoKTsgXAorICBcCisgIHoyMyA9IF9tbV9zdWJfcGkxNih6MiwgejMpOyBcCisgIHRtcDFsID0gX21tX2xvYWRsb19waTE2X2YoejIzKTsgXAorICB0bXAxaCA9IF9tbV9sb2FkaGlfcGkxNl9mKHoyMyk7IFwKKyAgdG1wMWwgPSBfbW1fc3JhaV9waTMyKHRtcDFsLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgdG1wMWggPSBfbW1fc3JhaV9waTMyKHRtcDFoLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgXAorICB0bXAxMWwgPSBfbW1fYWRkX3BpMzIodG1wMWwsIHRtcDJsKTsgXAorICB0bXAxMWggPSBfbW1fYWRkX3BpMzIodG1wMWgsIHRtcDJoKTsgXAorICB0bXAxMmwgPSBfbW1fc3ViX3BpMzIodG1wMWwsIHRtcDJsKTsgXAorICB0bXAxMmggPSBfbW1fc3ViX3BpMzIodG1wMWgsIHRtcDJoKTsgXAorICBcCisgIC8qIE9kZCBwYXJ0ICovIFwKKyAgXAorICBjb2wxbCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmlucHRyW0RDVFNJWkUgKiAxXSk7ICAvKiAoMDEgMTEgMjEgMzEpICovIFwKKyAgY29sM2wgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZpbnB0cltEQ1RTSVpFICogM10pOyAgLyogKDAzIDEzIDIzIDMzKSAqLyBcCisgIGNvbDVsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmaW5wdHJbRENUU0laRSAqIDVdKTsgIC8qICgwNSAxNSAyNSAzNSkgKi8gXAorICBjb2w3bCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmlucHRyW0RDVFNJWkUgKiA3XSk7ICAvKiAoMDcgMTcgMjcgMzcpICovIFwKKyAgXAorICBxdWFudDFsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmcXVhbnRwdHJbRENUU0laRSAqIDFdKTsgXAorICBxdWFudDNsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmcXVhbnRwdHJbRENUU0laRSAqIDNdKTsgXAorICBxdWFudDVsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmcXVhbnRwdHJbRENUU0laRSAqIDVdKTsgXAorICBxdWFudDdsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmcXVhbnRwdHJbRENUU0laRSAqIDddKTsgXAorICBcCisgIHRtcDAgPSBfbW1fbXVsbG9fcGkxNihjb2w3bCwgcXVhbnQ3bCk7IFwKKyAgdG1wMSA9IF9tbV9tdWxsb19waTE2KGNvbDVsLCBxdWFudDVsKTsgXAorICB0bXAyID0gX21tX211bGxvX3BpMTYoY29sM2wsIHF1YW50M2wpOyBcCisgIHRtcDMgPSBfbW1fbXVsbG9fcGkxNihjb2wxbCwgcXVhbnQxbCk7IFwKKyAgXAorICBET19JRENUX0NPTU1PTigxKSBcCisgIFwKKyAgLyogb3V0MD0oMDAgMTAgMjAgMzApLCBvdXQxPSgwMSAxMSAyMSAzMSkgKi8gXAorICAvKiBvdXQyPSgwMiAxMiAyMiAzMiksIG91dDM9KDAzIDEzIDIzIDMzKSAqLyBcCisgIC8qIG91dDQ9KDA0IDE0IDI0IDM0KSwgb3V0NT0oMDUgMTUgMjUgMzUpICovIFwKKyAgLyogb3V0Nj0oMDYgMTYgMjYgMzYpLCBvdXQ3PSgwNyAxNyAyNyAzNykgKi8gXAorICBcCisgIC8qIFRyYW5zcG9zZSBjb2VmZmljaWVudHMgKi8gXAorICBcCisgIHJvdzAxYSA9IF9tbV91bnBhY2tsb19waTE2KG91dDAsIG91dDEpOyAgICAgLyogcm93MDFhPSgwMCAwMSAxMCAxMSkgKi8gXAorICByb3cyM2EgPSBfbW1fdW5wYWNraGlfcGkxNihvdXQwLCBvdXQxKTsgICAgIC8qIHJvdzIzYT0oMjAgMjEgMzAgMzEpICovIFwKKyAgcm93MDFkID0gX21tX3VucGFja2xvX3BpMTYob3V0Niwgb3V0Nyk7ICAgICAvKiByb3cwMWQ9KDA2IDA3IDE2IDE3KSAqLyBcCisgIHJvdzIzZCA9IF9tbV91bnBhY2toaV9waTE2KG91dDYsIG91dDcpOyAgICAgLyogcm93MjNkPSgyNiAyNyAzNiAzNykgKi8gXAorICBcCisgIHJvdzAxYiA9IF9tbV91bnBhY2tsb19waTE2KG91dDIsIG91dDMpOyAgICAgLyogcm93MDFiPSgwMiAwMyAxMiAxMykgKi8gXAorICByb3cyM2IgPSBfbW1fdW5wYWNraGlfcGkxNihvdXQyLCBvdXQzKTsgICAgIC8qIHJvdzIzYj0oMjIgMjMgMzIgMzMpICovIFwKKyAgcm93MDFjID0gX21tX3VucGFja2xvX3BpMTYob3V0NCwgb3V0NSk7ICAgICAvKiByb3cwMWM9KDA0IDA1IDE0IDE1KSAqLyBcCisgIHJvdzIzYyA9IF9tbV91bnBhY2toaV9waTE2KG91dDQsIG91dDUpOyAgICAgLyogcm93MjNjPSgyNCAyNSAzNCAzNSkgKi8gXAorICBcCisgIHJvdzBsID0gX21tX3VucGFja2xvX3BpMzIocm93MDFhLCByb3cwMWIpOyAgLyogcm93MGw9KDAwIDAxIDAyIDAzKSAqLyBcCisgIHJvdzFsID0gX21tX3VucGFja2hpX3BpMzIocm93MDFhLCByb3cwMWIpOyAgLyogcm93MWw9KDEwIDExIDEyIDEzKSAqLyBcCisgIHJvdzJsID0gX21tX3VucGFja2xvX3BpMzIocm93MjNhLCByb3cyM2IpOyAgLyogcm93Mmw9KDIwIDIxIDIyIDIzKSAqLyBcCisgIHJvdzNsID0gX21tX3VucGFja2hpX3BpMzIocm93MjNhLCByb3cyM2IpOyAgLyogcm93M2w9KDMwIDMxIDMyIDMzKSAqLyBcCisgIFwKKyAgcm93MGggPSBfbW1fdW5wYWNrbG9fcGkzMihyb3cwMWMsIHJvdzAxZCk7ICAvKiByb3cwaD0oMDQgMDUgMDYgMDcpICovIFwKKyAgcm93MWggPSBfbW1fdW5wYWNraGlfcGkzMihyb3cwMWMsIHJvdzAxZCk7ICAvKiByb3cxaD0oMTQgMTUgMTYgMTcpICovIFwKKyAgcm93MmggPSBfbW1fdW5wYWNrbG9fcGkzMihyb3cyM2MsIHJvdzIzZCk7ICAvKiByb3cyaD0oMjQgMjUgMjYgMjcpICovIFwKKyAgcm93M2ggPSBfbW1fdW5wYWNraGlfcGkzMihyb3cyM2MsIHJvdzIzZCk7ICAvKiByb3czaD0oMzQgMzUgMzYgMzcpICovIFwKKyAgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDBdLCByb3cwbCk7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAwICsgNF0sIHJvdzBoKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDFdLCByb3cxbCk7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAxICsgNF0sIHJvdzFoKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDJdLCByb3cybCk7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAyICsgNF0sIHJvdzJoKTsgXAorICBfbW1fc3RvcmVfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDNdLCByb3czbCk7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAzICsgNF0sIHJvdzNoKTsgXAorfQorCisjZGVmaW5lIERPX0lEQ1RfUEFTUzIoY3RyKSB7IFwKKyAgX19tNjQgcm93MGwsIHJvdzFsLCByb3cybCwgcm93M2wsIHJvdzRsLCByb3c1bCwgcm93NmwsIHJvdzdsOyBcCisgIF9fbTY0IHoyMywgejIzbCwgejIzaDsgXAorICBfX202NCBjb2wwMTIzYSwgY29sMDEyM2IsIGNvbDAxMjNjLCBjb2wwMTIzZDsgXAorICBfX202NCBjb2wwMWwsIGNvbDAxaCwgY29sMjNsLCBjb2wyM2gsIHJvdzA2LCByb3cxNywgcm93MjQsIHJvdzM1OyBcCisgIF9fbTY0IGNvbDAsIGNvbDEsIGNvbDIsIGNvbDM7IFwKKyAgX19tNjQgdG1wMGwsIHRtcDBoLCB0bXAxbCwgdG1wMWgsIHRtcDJsLCB0bXAyaCwgdG1wM2wsIHRtcDNoOyBcCisgIF9fbTY0IHRtcDEwbCwgdG1wMTBoLCB0bXAxMWwsIHRtcDExaCwgdG1wMTJsLCB0bXAxMmgsIHRtcDEzbCwgdG1wMTNoOyBcCisgIFwKKyAgcm93MGwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZ3c3B0cltEQ1RTSVpFICogMF0pOyAgLyogKDAwIDAxIDAyIDAzKSAqLyBcCisgIHJvdzFsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDFdKTsgIC8qICgxMCAxMSAxMiAxMykgKi8gXAorICByb3cybCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiAyXSk7ICAvKiAoMjAgMjEgMjIgMjMpICovIFwKKyAgcm93M2wgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZ3c3B0cltEQ1RTSVpFICogM10pOyAgLyogKDMwIDMxIDMyIDMzKSAqLyBcCisgIHJvdzRsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDRdKTsgIC8qICg0MCA0MSA0MiA0MykgKi8gXAorICByb3c1bCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJndzcHRyW0RDVFNJWkUgKiA1XSk7ICAvKiAoNTAgNTEgNTIgNTMpICovIFwKKyAgcm93NmwgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZ3c3B0cltEQ1RTSVpFICogNl0pOyAgLyogKDYwIDYxIDYyIDYzKSAqLyBcCisgIHJvdzdsID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmd3NwdHJbRENUU0laRSAqIDddKTsgIC8qICg3MCA3MSA3MiA3MykgKi8gXAorICBcCisgIC8qIEV2ZW4gcGFydCBcCisgICAqIFwKKyAgICogKE9yaWdpbmFsKSBcCisgICAqIHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7IFwKKyAgICogdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7IFwKKyAgICogdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsgXAorICAgKiBcCisgICAqIChUaGlzIGltcGxlbWVudGF0aW9uKSBcCisgICAqIHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7IFwKKyAgICogdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsgXAorICAgKi8gXAorICBcCisgIHoyM2wgPSBfbW1fdW5wYWNrbG9fcGkxNihyb3cybCwgcm93NmwpOyBcCisgIHoyM2ggPSBfbW1fdW5wYWNraGlfcGkxNihyb3cybCwgcm93NmwpOyBcCisgIFwKKyAgdG1wM2wgPSBfbW1fbWFkZF9waTE2KHoyM2wsIFBXX0YxMzBfRjA1NCk7IFwKKyAgdG1wM2ggPSBfbW1fbWFkZF9waTE2KHoyM2gsIFBXX0YxMzBfRjA1NCk7IFwKKyAgdG1wMmwgPSBfbW1fbWFkZF9waTE2KHoyM2wsIFBXX0YwNTRfTUYxMzApOyBcCisgIHRtcDJoID0gX21tX21hZGRfcGkxNih6MjNoLCBQV19GMDU0X01GMTMwKTsgXAorICBcCisgIHoyMyA9IF9tbV9hZGRfcGkxNihyb3cwbCwgcm93NGwpOyBcCisgIHRtcDBsID0gX21tX2xvYWRsb19waTE2X2YoejIzKTsgXAorICB0bXAwaCA9IF9tbV9sb2FkaGlfcGkxNl9mKHoyMyk7IFwKKyAgdG1wMGwgPSBfbW1fc3JhaV9waTMyKHRtcDBsLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgdG1wMGggPSBfbW1fc3JhaV9waTMyKHRtcDBoLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgXAorICB0bXAxMGwgPSBfbW1fYWRkX3BpMzIodG1wMGwsIHRtcDNsKTsgXAorICB0bXAxMGggPSBfbW1fYWRkX3BpMzIodG1wMGgsIHRtcDNoKTsgXAorICB0bXAxM2wgPSBfbW1fc3ViX3BpMzIodG1wMGwsIHRtcDNsKTsgXAorICB0bXAxM2ggPSBfbW1fc3ViX3BpMzIodG1wMGgsIHRtcDNoKTsgXAorICBcCisgIHoyMyA9IF9tbV9zdWJfcGkxNihyb3cwbCwgcm93NGwpOyBcCisgIHRtcDFsID0gX21tX2xvYWRsb19waTE2X2YoejIzKTsgXAorICB0bXAxaCA9IF9tbV9sb2FkaGlfcGkxNl9mKHoyMyk7IFwKKyAgdG1wMWwgPSBfbW1fc3JhaV9waTMyKHRtcDFsLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgdG1wMWggPSBfbW1fc3JhaV9waTMyKHRtcDFoLCAoMTYgLSBDT05TVF9CSVRTKSk7IFwKKyAgXAorICB0bXAxMWwgPSBfbW1fYWRkX3BpMzIodG1wMWwsIHRtcDJsKTsgXAorICB0bXAxMWggPSBfbW1fYWRkX3BpMzIodG1wMWgsIHRtcDJoKTsgXAorICB0bXAxMmwgPSBfbW1fc3ViX3BpMzIodG1wMWwsIHRtcDJsKTsgXAorICB0bXAxMmggPSBfbW1fc3ViX3BpMzIodG1wMWgsIHRtcDJoKTsgXAorICBcCisgIC8qIE9kZCBwYXJ0ICovIFwKKyAgXAorICB0bXAwID0gcm93N2w7IFwKKyAgdG1wMSA9IHJvdzVsOyBcCisgIHRtcDIgPSByb3czbDsgXAorICB0bXAzID0gcm93MWw7IFwKKyAgXAorICBET19JRENUX0NPTU1PTigyKSBcCisgIFwKKyAgLyogb3V0MD0oMDAgMDEgMDIgMDMpLCBvdXQxPSgxMCAxMSAxMiAxMykgKi8gXAorICAvKiBvdXQyPSgyMCAyMSAyMiAyMyksIG91dDM9KDMwIDMxIDMyIDMzKSAqLyBcCisgIC8qIG91dDQ9KDQwIDQxIDQyIDQzKSwgb3V0NT0oNTAgNTEgNTIgNTMpICovIFwKKyAgLyogb3V0Nj0oNjAgNjEgNjIgNjMpLCBvdXQ3PSg3MCA3MSA3MiA3MykgKi8gXAorICBcCisgIHJvdzA2ID0gX21tX3BhY2tzX3BpMTYob3V0MCwgb3V0Nik7ICAvKiByb3cwNj0oMDAgMDEgMDIgMDMgNjAgNjEgNjIgNjMpICovIFwKKyAgcm93MTcgPSBfbW1fcGFja3NfcGkxNihvdXQxLCBvdXQ3KTsgIC8qIHJvdzE3PSgxMCAxMSAxMiAxMyA3MCA3MSA3MiA3MykgKi8gXAorICByb3cyNCA9IF9tbV9wYWNrc19waTE2KG91dDIsIG91dDQpOyAgLyogcm93MjQ9KDIwIDIxIDIyIDIzIDQwIDQxIDQyIDQzKSAqLyBcCisgIHJvdzM1ID0gX21tX3BhY2tzX3BpMTYob3V0Mywgb3V0NSk7ICAvKiByb3czNT0oMzAgMzEgMzIgMzMgNTAgNTEgNTIgNTMpICovIFwKKyAgXAorICByb3cwNiA9IF9tbV9hZGRfcGk4KHJvdzA2LCBQQl9DRU5URVJKU0FNUCk7IFwKKyAgcm93MTcgPSBfbW1fYWRkX3BpOChyb3cxNywgUEJfQ0VOVEVSSlNBTVApOyBcCisgIHJvdzI0ID0gX21tX2FkZF9waTgocm93MjQsIFBCX0NFTlRFUkpTQU1QKTsgXAorICByb3czNSA9IF9tbV9hZGRfcGk4KHJvdzM1LCBQQl9DRU5URVJKU0FNUCk7IFwKKyAgXAorICAvKiBUcmFuc3Bvc2UgY29lZmZpY2llbnRzICovIFwKKyAgXAorICBjb2wwMTIzYSA9IF9tbV91bnBhY2tsb19waTgocm93MDYsIHJvdzE3KTsgIC8qIGNvbDAxMjNhPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykgKi8gXAorICBjb2wwMTIzZCA9IF9tbV91bnBhY2toaV9waTgocm93MDYsIHJvdzE3KTsgIC8qIGNvbDAxMjNkPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykgKi8gXAorICBjb2wwMTIzYiA9IF9tbV91bnBhY2tsb19waTgocm93MjQsIHJvdzM1KTsgIC8qIGNvbDAxMjNiPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykgKi8gXAorICBjb2wwMTIzYyA9IF9tbV91bnBhY2toaV9waTgocm93MjQsIHJvdzM1KTsgIC8qIGNvbDAxMjNjPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykgKi8gXAorICBcCisgIGNvbDAxbCA9IF9tbV91bnBhY2tsb19waTE2KGNvbDAxMjNhLCBjb2wwMTIzYik7ICAvKiBjb2wwMWw9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKSAqLyBcCisgIGNvbDIzbCA9IF9tbV91bnBhY2toaV9waTE2KGNvbDAxMjNhLCBjb2wwMTIzYik7ICAvKiBjb2wyM2w9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKSAqLyBcCisgIGNvbDAxaCA9IF9tbV91bnBhY2tsb19waTE2KGNvbDAxMjNjLCBjb2wwMTIzZCk7ICAvKiBjb2wwMWg9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKSAqLyBcCisgIGNvbDIzaCA9IF9tbV91bnBhY2toaV9waTE2KGNvbDAxMjNjLCBjb2wwMTIzZCk7ICAvKiBjb2wyM2g9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKSAqLyBcCisgIFwKKyAgY29sMCA9IF9tbV91bnBhY2tsb19waTMyKGNvbDAxbCwgY29sMDFoKTsgICAvKiBjb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkgKi8gXAorICBjb2wxID0gX21tX3VucGFja2hpX3BpMzIoY29sMDFsLCBjb2wwMWgpOyAgIC8qIGNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSAqLyBcCisgIGNvbDIgPSBfbW1fdW5wYWNrbG9fcGkzMihjb2wyM2wsIGNvbDIzaCk7ICAgLyogY29sMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpICovIFwKKyAgY29sMyA9IF9tbV91bnBhY2toaV9waTMyKGNvbDIzbCwgY29sMjNoKTsgICAvKiBjb2wzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykgKi8gXAorICBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKShvdXRwdXRfYnVmW2N0ciArIDBdICsgb3V0cHV0X2NvbCksIGNvbDApOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKShvdXRwdXRfYnVmW2N0ciArIDFdICsgb3V0cHV0X2NvbCksIGNvbDEpOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKShvdXRwdXRfYnVmW2N0ciArIDJdICsgb3V0cHV0X2NvbCksIGNvbDIpOyBcCisgIF9tbV9zdG9yZV9zaTY0KChfX202NCAqKShvdXRwdXRfYnVmW2N0ciArIDNdICsgb3V0cHV0X2NvbCksIGNvbDMpOyBcCit9CisKK3ZvaWQganNpbWRfaWRjdF9pc2xvd19tbWkodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgX19tNjQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKKyAgX19tNjQgb3V0MCwgb3V0MSwgb3V0Miwgb3V0Mywgb3V0NCwgb3V0NSwgb3V0Niwgb3V0NzsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqcXVhbnRwdHI7CisgIEpDT0VGICp3c3B0cjsKKyAgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXTsgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zLiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKworICBET19JRENUX1BBU1MxKDEpCituZXh0Y29sdW1uMToKKyAgaW5wdHIgKz0gNDsKKyAgcXVhbnRwdHIgKz0gNDsKKyAgd3NwdHIgKz0gRENUU0laRSAqIDQ7CisgIERPX0lEQ1RfUEFTUzEoMikKK25leHRjb2x1bW4yOgorCisgIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzLiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworCisgIERPX0lEQ1RfUEFTUzIoMCkKKyAgd3NwdHIgKz0gNDsKKyAgRE9fSURDVF9QQVNTMig0KQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qcXVhbnRpLW1taS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qcXVhbnRpLW1taS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YTNmODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pxdWFudGktbW1pLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBMb29uZ3NvbiBNTUkgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3LCBMb29uZ3NvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uIExpbWl0ZWQsIEJlaUppbmcuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEF1dGhvcnM6ICBaaHVDaGVuICAgICA8emh1Y2hlbkBsb29uZ3Nvbi5jbj4KKyAqICAgICAgICAgICBDYWlXYW53ZWkgICA8Y2Fpd2Fud2VpQGxvb25nc29uLmNuPgorICogICAgICAgICAgIFN1blpoYW5nemhpIDxzdW56aGFuZ3poaS1jcUBsb29uZ3Nvbi5jbj4KKyAqIENvcHlyaWdodCAoQykgMjAxOCwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogSU5URUdFUiBRVUFOVElaQVRJT04gQU5EIFNBTVBMRSBDT05WRVJTSU9OICovCisKKyNpbmNsdWRlICJqc2ltZF9tbWkuaCIKKworCisjZGVmaW5lIERPX1FVQU5UKCkgeyBcCisgIG1tMiA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJndvcmtzcGFjZVswXSk7IFwKKyAgbW0zID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmd29ya3NwYWNlWzRdKTsgXAorICBcCisgIG1tMCA9IG1tMjsgXAorICBtbTEgPSBtbTM7IFwKKyAgXAorICBtbTIgPSBfbW1fc3JhaV9waTE2KG1tMiwgKFdPUkRfQklUIC0gMSkpOyAgIC8qIC0xIGlmIHZhbHVlIDwgMCwgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgb3RoZXJ3aXNlICovIFwKKyAgbW0zID0gX21tX3NyYWlfcGkxNihtbTMsIChXT1JEX0JJVCAtIDEpKTsgXAorICBcCisgIG1tMCA9IF9tbV94b3Jfc2k2NChtbTAsIG1tMik7ICAgICAgICAgICAgICAgLyogdmFsID0gLXZhbCAqLyBcCisgIG1tMSA9IF9tbV94b3Jfc2k2NChtbTEsIG1tMyk7IFwKKyAgbW0wID0gX21tX3N1Yl9waTE2KG1tMCwgbW0yKTsgXAorICBtbTEgPSBfbW1fc3ViX3BpMTYobW0xLCBtbTMpOyBcCisgIFwKKyAgY29ycjAgPSBfbW1fbG9hZF9zaTY0KChfX202NCAqKSZkaXZpc29yc1tEQ1RTSVpFMiAqIDFdKTsgIC8qIGNvcnJlY3Rpb24gKi8gXAorICBjb3JyMSA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRpdmlzb3JzW0RDVFNJWkUyICogMSArIDRdKTsgXAorICBcCisgIG1tMCA9IF9tbV9hZGRfcGkxNihtbTAsIGNvcnIwKTsgICAgICAgICAgICAgLyogY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yICovIFwKKyAgbW0xID0gX21tX2FkZF9waTE2KG1tMSwgY29ycjEpOyBcCisgIFwKKyAgbW00ID0gbW0wOyBcCisgIG1tNSA9IG1tMTsgXAorICBcCisgIHJlY2lwMCA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRpdmlzb3JzW0RDVFNJWkUyICogMF0pOyAgLyogcmVjaXByb2NhbCAqLyBcCisgIHJlY2lwMSA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRpdmlzb3JzW0RDVFNJWkUyICogMCArIDRdKTsgXAorICBcCisgIG1tMCA9IF9tbV9tdWxoaV9waTE2KG1tMCwgcmVjaXAwKTsgXAorICBtbTEgPSBfbW1fbXVsaGlfcGkxNihtbTEsIHJlY2lwMSk7IFwKKyAgXAorICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBtbTQpOyAgLyogcmVjaXByb2NhbCBpcyBhbHdheXMgbmVnYXRpdmUgKi8gXAorICBtbTEgPSBfbW1fYWRkX3BpMTYobW0xLCBtbTUpOyAgLyogKE1TQj0xKSwgc28gd2UgYWx3YXlzIG5lZWQgdG8gYWRkIHRoZSAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsIHZhbHVlIChpbnB1dCB2YWx1ZSBpcyBuZXZlciAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZWdhdGl2ZSBhcyB3ZSBpbnZlcnRlZCBpdCBhdCB0aGUgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgb2YgdGhpcyByb3V0aW5lKSAqLyBcCisgIFwKKyAgc2NhbGUwID0gX21tX2xvYWRfc2k2NCgoX19tNjQgKikmZGl2aXNvcnNbRENUU0laRTIgKiAyXSk7ICAvKiBzY2FsZSAqLyBcCisgIHNjYWxlMSA9IF9tbV9sb2FkX3NpNjQoKF9fbTY0ICopJmRpdmlzb3JzW0RDVFNJWkUyICogMiArIDRdKTsgXAorICBcCisgIG1tNiA9IHNjYWxlMDsgXAorICBtbTcgPSBzY2FsZTE7IFwKKyAgbW00ID0gbW0wOyBcCisgIG1tNSA9IG1tMTsgXAorICBcCisgIG1tMCA9IF9tbV9tdWxoaV9waTE2KG1tMCwgbW02KTsgXAorICBtbTEgPSBfbW1fbXVsaGlfcGkxNihtbTEsIG1tNyk7IFwKKyAgXAorICBtbTYgPSBfbW1fc3JhaV9waTE2KG1tNiwgKFdPUkRfQklUIC0gMSkpOyAgIC8qIGRldGVybWluZSBpZiBzY2FsZS4uLiAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgbmVnYXRpdmUgKi8gXAorICBtbTcgPSBfbW1fc3JhaV9waTE2KG1tNywgKFdPUkRfQklUIC0gMSkpOyBcCisgIFwKKyAgbW02ID0gX21tX2FuZF9zaTY0KG1tNiwgbW00KTsgICAgICAgICAgICAgICAvKiBhbmQgYWRkIGlucHV0IGlmIGl0IGlzICovIFwKKyAgbW03ID0gX21tX2FuZF9zaTY0KG1tNywgbW01KTsgXAorICBtbTAgPSBfbW1fYWRkX3BpMTYobW0wLCBtbTYpOyBcCisgIG1tMSA9IF9tbV9hZGRfcGkxNihtbTEsIG1tNyk7IFwKKyAgXAorICBtbTQgPSBfbW1fc3JhaV9waTE2KG1tNCwgKFdPUkRfQklUIC0gMSkpOyAgIC8qIHRoZW4gY2hlY2sgaWYuLi4gKi8gXAorICBtbTUgPSBfbW1fc3JhaV9waTE2KG1tNSwgKFdPUkRfQklUIC0gMSkpOyAgIC8qIG5lZ2F0aXZlIGlucHV0ICovIFwKKyAgXAorICBtbTQgPSBfbW1fYW5kX3NpNjQobW00LCBzY2FsZTApOyAgICAgICAgICAgIC8qIGFuZCBhZGQgc2NhbGUgaWYgaXQgaXMgKi8gXAorICBtbTUgPSBfbW1fYW5kX3NpNjQobW01LCBzY2FsZTEpOyBcCisgIG1tMCA9IF9tbV9hZGRfcGkxNihtbTAsIG1tNCk7IFwKKyAgbW0xID0gX21tX2FkZF9waTE2KG1tMSwgbW01KTsgXAorICBcCisgIG1tMCA9IF9tbV94b3Jfc2k2NChtbTAsIG1tMik7ICAgICAgICAgICAgICAgLyogdmFsID0gLXZhbCAqLyBcCisgIG1tMSA9IF9tbV94b3Jfc2k2NChtbTEsIG1tMyk7IFwKKyAgbW0wID0gX21tX3N1Yl9waTE2KG1tMCwgbW0yKTsgXAorICBtbTEgPSBfbW1fc3ViX3BpMTYobW0xLCBtbTMpOyBcCisgIFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJm91dHB1dF9wdHJbMF0sIG1tMCk7IFwKKyAgX21tX3N0b3JlX3NpNjQoKF9fbTY0ICopJm91dHB1dF9wdHJbNF0sIG1tMSk7IFwKKyAgXAorICB3b3Jrc3BhY2UgKz0gRENUU0laRTsgXAorICBkaXZpc29ycyArPSBEQ1RTSVpFOyBcCisgIG91dHB1dF9wdHIgKz0gRENUU0laRTsgXAorfQorCisKK3ZvaWQganNpbWRfcXVhbnRpemVfbW1pKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworICBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9jazsKKyAgX19tNjQgbW0wLCBtbTEsIG1tMiwgbW0zLCBtbTQsIG1tNSwgbW02LCBtbTc7CisgIF9fbTY0IGNvcnIwLCBjb3JyMSwgcmVjaXAwLCByZWNpcDEsIHNjYWxlMCwgc2NhbGUxOworCisgIERPX1FVQU5UKCkKKyAgRE9fUVVBTlQoKQorICBET19RVUFOVCgpCisgIERPX1FVQU5UKCkKKyAgRE9fUVVBTlQoKQorICBET19RVUFOVCgpCisgIERPX1FVQU5UKCkKKyAgRE9fUVVBTlQoKQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qc2ltZC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qc2ltZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjE4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pzaW1kLmMKQEAgLTAsMCArMSw2MTAgQEAKKy8qCisgKiBqc2ltZF9sb29uZ3Nvbi5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIDIwMTQsIDIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgQ2FsaWZvcm5pYS4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxOCwgTWF0dGhpZXUgRGFyYm9pcy4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3LCBMb29uZ3NvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uIExpbWl0ZWQsIEJlaUppbmcuCisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgIm5vcm1hbCIgcG9ydGlvbnMKKyAqIG9mIHRoZSBsaWJyYXJ5IGFuZCB0aGUgU0lNRCBpbXBsZW1lbnRhdGlvbnMgd2hlbiBydW5uaW5nIG9uIGEKKyAqIExvb25nc29uIGFyY2hpdGVjdHVyZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiLi4vLi4vamluY2x1ZGUuaCIKKyNpbmNsdWRlICIuLi8uLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWQuaCIKKyNpbmNsdWRlICIuLi8uLi9qZGN0LmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWRkY3QuaCIKKyNpbmNsdWRlICIuLi9qc2ltZC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNpbWRfc3VwcG9ydCA9IH4wOworCisvKgorICogQ2hlY2sgd2hhdCBTSU1EIGFjY2VsZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiBGSVhNRTogVGhpcyBjb2RlIGlzIHJhY3kgdW5kZXIgYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4KKyAqLworTE9DQUwodm9pZCkKK2luaXRfc2ltZCh2b2lkKQoreworI2lmbmRlZiBOT19HRVRFTlYKKyAgY2hhciAqZW52ID0gTlVMTDsKKyNlbmRpZgorCisgIGlmIChzaW1kX3N1cHBvcnQgIT0gfjBVKQorICAgIHJldHVybjsKKworICBzaW1kX3N1cHBvcnQgfD0gSlNJTURfTU1JOworCisjaWZuZGVmIE5PX0dFVEVOVgorICAvKiBGb3JjZSBkaWZmZXJlbnQgc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRU5PTkUiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ID0gMDsKKyNlbmRpZgorfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3JnYl95Y2Modm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKChSR0JfUElYRUxTSVpFICE9IDMpICYmIChSR0JfUElYRUxTSVpFICE9IDQpKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTUkpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcmdiX2dyYXkodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NSSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl95Y2NfcmdiNTY1KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY19jYW5fbnVsbF9jb252ZXJ0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl95Y2NfY29udmVydChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqbW1pZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIG1taWZjdCA9IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9tbWk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBtbWlmY3QgPSBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X21taTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBtbWlmY3QgPSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW1pOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgbW1pZmN0ID0ganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9tbWk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBtbWlmY3QgPSBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X21taTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIG1taWZjdCA9IGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW1pOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIG1taWZjdCA9IGpzaW1kX3JnYl95Y2NfY29udmVydF9tbWk7CisgICAgYnJlYWs7CisgIH0KKworICBtbWlmY3QoY2luZm8tPmltYWdlX3dpZHRoLCBpbnB1dF9idWYsIG91dHB1dF9idWYsIG91dHB1dF9yb3csIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiX2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCptbWlmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIG1taWZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9tbWk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBtbWlmY3QgPSBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X21taTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBtbWlmY3QgPSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfbW1pOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgbW1pZmN0ID0ganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9tbWk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBtbWlmY3QgPSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X21taTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIG1taWZjdCA9IGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfbW1pOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIG1taWZjdCA9IGpzaW1kX3ljY19yZ2JfY29udmVydF9tbWk7CisgICAgYnJlYWs7CisgIH0KKworICBtbWlmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiNTY1X2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY19udWxsX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NSSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX3Ntb290aF9kb3duc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfZG93bnNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbW1pKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9zbW9vdGhfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ludF91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaW50X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9mYW5jeV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTUkpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21taShjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9tZXJnZWRfdXBzYW1wbGUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wX2Zsb2F0KEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfaXNsb3codm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NSSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lmYXN0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pc2xvdyhEQ1RFTEVNICpkYXRhKQoreworICBqc2ltZF9mZGN0X2lzbG93X21taShkYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0KERDVEVMRU0gKmRhdGEpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3F1YW50aXplKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTUkpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemUoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSkKK3sKKyAganNpbWRfcXVhbnRpemVfbW1pKGNvZWZfYmxvY2ssIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplX2Zsb2F0KEpDT0VGUFRSIGNvZWZfYmxvY2ssIEZBU1RfRkxPQVQgKmRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfMngyKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfNHg0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfNng2KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfMTJ4MTIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF8yeDIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzR4NChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfNng2KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF8xMngxMihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTUkpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pZmFzdCh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaXNsb3coal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfaXNsb3dfbW1pKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9pZmFzdChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKEpPQ1RFVCAqKQoranNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwgSkNPRUZQVFIgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RfZGNfdmFsLCBjX2Rlcml2ZWRfdGJsICpkY3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsIHNpemVfdCAqemVyb2JpdHMpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmUoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cykKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL2xvb25nc29uL2pzaW1kX21taS5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qc2ltZF9tbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA2YWE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9qc2ltZF9tbWkuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogTG9vbmdzb24gTU1JIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNywgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLCBCZWlKaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3JzOiAgWmh1Q2hlbiAgICAgPHpodWNoZW5AbG9vbmdzb24uY24+CisgKiAgICAgICAgICAgQ2FpV2Fud2VpICAgPGNhaXdhbndlaUBsb29uZ3Nvbi5jbj4KKyAqICAgICAgICAgICBTdW5aaGFuZ3poaSA8c3Vuemhhbmd6aGktY3FAbG9vbmdzb24uY24+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiLi4vLi4vamluY2x1ZGUuaCIKKyNpbmNsdWRlICIuLi8uLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vLi4vamRjdC5oIgorI2luY2x1ZGUgImxvb25nc29uLW1taW50cmluLmgiCisKKworLyogQ29tbW9uIGNvZGUgKi8KKworI2RlZmluZSBTSVpFT0ZfTU1XT1JEICA4CisjZGVmaW5lIEJZVEVfQklUICA4CisjZGVmaW5lIFdPUkRfQklUICAxNgorI2RlZmluZSBTQ0FMRUJJVFMgIDE2CisKKyNkZWZpbmUgX3VpbnQ2NF9zZXRfcGk4KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpIFwKKyAgKCgodWludDY0X3QpKHVpbnQ4X3QpYSA8PCA1NikgfCBcCisgICAoKHVpbnQ2NF90KSh1aW50OF90KWIgPDwgNDgpIHwgXAorICAgKCh1aW50NjRfdCkodWludDhfdCljIDw8IDQwKSB8IFwKKyAgICgodWludDY0X3QpKHVpbnQ4X3QpZCA8PCAzMikgfCBcCisgICAoKHVpbnQ2NF90KSh1aW50OF90KWUgPDwgMjQpIHwgXAorICAgKCh1aW50NjRfdCkodWludDhfdClmIDw8IDE2KSB8IFwKKyAgICgodWludDY0X3QpKHVpbnQ4X3QpZyA8PCA4KSAgfCBcCisgICAoKHVpbnQ2NF90KSh1aW50OF90KWgpKQorI2RlZmluZSBfdWludDY0X3NldF9waTE2KGEsIGIsIGMsIGQpICAoKCh1aW50NjRfdCkodWludDE2X3QpYSA8PCA0OCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KSh1aW50MTZfdCliIDw8IDMyKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDY0X3QpKHVpbnQxNl90KWMgPDwgMTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkodWludDE2X3QpZCkpCisjZGVmaW5lIF91aW50NjRfc2V0X3BpMzIoYSwgYikgICgoKHVpbnQ2NF90KSh1aW50MzJfdClhIDw8IDMyKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDY0X3QpKHVpbnQzMl90KWIpKQorCisjZGVmaW5lIGdldF9jb25zdF92YWx1ZShpbmRleCkgICgqKF9fbTY0ICopJmNvbnN0X3ZhbHVlW2luZGV4XSkKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vbG9vbmdzb24tbW1pbnRyaW4uaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbG9vbmdzb24vbG9vbmdzb24tbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWVhNzYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9sb29uZ3Nvbi9sb29uZ3Nvbi1tbWludHJpbi5oCkBAIC0wLDAgKzEsMTMwNyBAQAorLyoKKyAqIExvb25nc29uIE1NSSBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCwgQmVpSmluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworI2lmbmRlZiBfX0xPT05HU09OX01NSU5UUklOX0hfXworI2RlZmluZSBfX0xPT05HU09OX01NSU5UUklOX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKworI2RlZmluZSBGVU5DVElPTl9BVFRSSUJTIFwKKyAgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisKKworLyogVmVjdG9ycyBhcmUgc3RvcmVkIGluIDY0LWJpdCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICovCit0eXBlZGVmIGRvdWJsZSBfX202NDsKKworLyogSGF2aW5nIGEgMzItYml0IGRhdGF0eXBlIGFsbG93cyB1cyB0byB1c2UgMzItYml0IGxvYWRzIGluIHBsYWNlcyBsaWtlCisgICBsb2FkODg4OC4gKi8KK3R5cGVkZWYgZmxvYXQgX19tMzI7CisKKworLyoqKioqKioqKiogU2V0IE9wZXJhdGlvbnMgKioqKioqKioqKi8KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0CitfbW1fc2V0emVyb19zaTY0KHZvaWQpCit7CisgIHJldHVybiAwLjA7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc2V0X3BpOCh1aW50OF90IF9fYjcsIHVpbnQ4X3QgX19iNiwgdWludDhfdCBfX2I1LCB1aW50OF90IF9fYjQsCisgICAgICAgICAgICB1aW50OF90IF9fYjMsIHVpbnQ4X3QgX19iMiwgdWludDhfdCBfX2IxLCB1aW50OF90IF9fYjApCit7CisgIF9fbTY0IHJldDsKKyAgdWludDMyX3QgbG8gPSAoKHVpbnQzMl90KV9fYjYgPDwgMjQpIHwKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KV9fYjQgPDwgMTYpIHwKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KV9fYjIgPDwgOCkgfAorICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2IwOworICB1aW50MzJfdCBoaSA9ICgodWludDMyX3QpX19iNyA8PCAyNCkgfAorICAgICAgICAgICAgICAgICgodWludDMyX3QpX19iNSA8PCAxNikgfAorICAgICAgICAgICAgICAgICgodWludDMyX3QpX19iMyA8PCA4KSB8CisgICAgICAgICAgICAgICAgKHVpbnQzMl90KV9fYjE7CisKKyAgYXNtKCJtdGMxICAgICAgJTEsICUwXG5cdCIKKyAgICAgICJtdGMxICAgICAgJTIsICRmMFxuXHQiCisgICAgICAicHVucGNrbGJoICUwLCAlMCwgJGYwXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiciIgKGxvKSwgInIiIChoaSkKKyAgICAgIDogIiRmMCIKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NldF9waTE2KHVpbnQxNl90IF9faDMsIHVpbnQxNl90IF9faDIsIHVpbnQxNl90IF9faDEsIHVpbnQxNl90IF9faDApCit7CisgIF9fbTY0IHJldDsKKyAgdWludDMyX3QgbG8gPSAoKHVpbnQzMl90KV9faDIgPDwgMTYpIHwgKHVpbnQzMl90KV9faDA7CisgIHVpbnQzMl90IGhpID0gKCh1aW50MzJfdClfX2gzIDw8IDE2KSB8ICh1aW50MzJfdClfX2gxOworCisgIGFzbSgibXRjMSAgICAgICUxLCAlMFxuXHQiCisgICAgICAibXRjMSAgICAgICUyLCAkZjBcblx0IgorICAgICAgInB1bnBja2xodyAlMCwgJTAsICRmMFxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogInIiIChsbyksICJyIiAoaGkpCisgICAgICA6ICIkZjAiCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBfTU1fU0hVRkZMRShmcDMsIGZwMiwgZnAxLCBmcDApIFwKKyAgKCgoZnAzKSA8PCA2KSB8ICgoZnAyKSA8PCA0KSB8ICgoZnAxKSA8PCAyKSB8IChmcDApKQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NldF9waTMyKHVpbnQzMl90IF9faTEsIHVpbnQzMl90IF9faTApCit7CisgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChfX2kxKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcChfX2kwKSkgeworICAgIHVpbnQ2NF90IHZhbCA9ICgodWludDY0X3QpX19pMSA8PCAzMikgfAorICAgICAgICAgICAgICAgICAgICgodWludDY0X3QpX19pMCA8PCAgMCk7CisKKyAgICByZXR1cm4gKihfX202NCAqKSZ2YWw7CisgIH0gZWxzZSBpZiAoX19pMSA9PSBfX2kwKSB7CisgICAgdWludDY0X3QgaW1tID0gX01NX1NIVUZGTEUoMSwgMCwgMSwgMCk7CisgICAgX19tNjQgcmV0OworCisgICAgYXNtKCJwc2h1ZmggJTAsICUxLCAlMlxuXHQiCisgICAgICAgIDogIj1mIiAocmV0KQorICAgICAgICA6ICJmIiAoKihfX20zMiAqKSZfX2kxKSwgImYiICgqKF9fbTY0ICopJmltbSkKKyAgICAgICApOworCisgICAgcmV0dXJuIHJldDsKKyAgfSBlbHNlIHsKKyAgICB1aW50NjRfdCB2YWwgPSAoKHVpbnQ2NF90KV9faTEgPDwgMzIpIHwKKyAgICAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KV9faTAgPDwgIDApOworCisgICAgcmV0dXJuICooX19tNjQgKikmdmFsOworICB9Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc2V0MV9waTgodWludDhfdCBfX2IwKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJzbGwgICAgJDgsICUxLCA4XG5cdCIKKyAgICAgICJvciAgICAgJTEsICUxLCAkOFxuXHQiCisgICAgICAibXRjMSAgICUxLCAlMFxuXHQiCisgICAgICAibXRjMSAgICQwLCAkZjBcblx0IgorICAgICAgInBzaHVmaCAlMCwgJTAsICRmMFxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogInIiIChfX2IwKQorICAgICAgOiAiJDgiLCAiJGYwIgorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc2V0MV9waTE2KHVpbnQxNl90IF9faDApCit7CisgIF9fbTY0IHJldDsKKworICBhc20oIm10YzEgICAlMSwgJTBcblx0IgorICAgICAgIm10YzEgICAkMCwgJGYwXG5cdCIKKyAgICAgICJwc2h1ZmggJTAsICUwLCAkZjBcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJyIiAoX19oMCkKKyAgICAgIDogIiQ4IiwgIiRmMCIKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NldDFfcGkzMih1bnNpZ25lZCBfX2kwKQoreworICByZXR1cm4gX21tX3NldF9waTMyKF9faTAsIF9faTApOworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NldHJfcGk4KHVpbnQ4X3QgX19oMCwgdWludDhfdCBfX2gxLCB1aW50OF90IF9faDIsIHVpbnQ4X3QgX19oMywKKyAgICAgICAgICAgICB1aW50OF90IF9faDQsIHVpbnQ4X3QgX19oNSwgdWludDhfdCBfX2g2LCB1aW50OF90IF9faDcpCit7CisgIHJldHVybiBfbW1fc2V0X3BpOChfX2g3LCBfX2g2LCBfX2g1LCBfX2g0LAorICAgICAgICAgICAgICAgICAgICAgX19oMywgX19oMiwgX19oMSwgX19oMCk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc2V0cl9waTE2KHVpbnQxNl90IF9fdzAsIHVpbnQxNl90IF9fdzEsIHVpbnQxNl90IF9fdzIsIHVpbnQxNl90IF9fdzMpCit7CisgIHJldHVybiBfbW1fc2V0X3BpMTYoX193MywgX193MiwgX193MSwgX193MCk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc2V0cl9waTMyKHVpbnQzMl90IF9faTAsIHVpbnQzMl90IF9faTEpCit7CisgIHJldHVybiBfbW1fc2V0X3BpMzIoX19pMSwgX19pMCk7Cit9CisKKworLyoqKioqKioqKiogQXJpdGhtZXRpYyBPcGVyYXRpb25zICoqKioqKioqKiovCisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fYWRkX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWRkYiAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9hZGRfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWRkaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9hZGRfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWRkdyAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9hZGRfc2k2NChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWRkZCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9hZGRzX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWRkc2IgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fYWRkc19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBhZGRzaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2FkZHNfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBhZGR1c2IgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fYWRkc19wdTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBhZGR1c2ggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fYXZnX3B1OChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYXZnYiAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9hdmdfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYXZnaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9tYWRkX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicG1hZGRodyAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9tYXhfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwbWF4c2ggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbWF4X3B1OChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwbWF4dWIgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbWluX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicG1pbnNoICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX21pbl9wdTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicG1pbnViICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgaW50IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9tb3ZlbWFza19waTgoX19tNjQgX19tMSkKK3sKKyAgaW50IHJldDsKKworICBhc20oInBtb3Ztc2tiICUwLCAlMVxuXHQiCisgICAgICA6ICI9ciIgKHJldCkKKyAgICAgIDogInkiIChfX20xKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbXVsaGlfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwbXVsaGggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbXVsaGlfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwbXVsaHVoICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX211bGxvX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicG11bGxoICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX211bF9wdTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBtdWx1dyAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9zYWRfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBzYWRiaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2FzdWJfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBhc3VidWIgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fYmlhZGRfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oImJpYWRkICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3N1Yl9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHN1YmIgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc3ViX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHN1YmggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc3ViX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHN1YncgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc3ViX3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHN1YmQgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc3Vic19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHN1YnNiICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3N1YnNfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwc3Vic2ggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9zdWJzX3B1OChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwc3VidXNiICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3N1YnNfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwc3VidXNoICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCisKKy8qKioqKioqKioqIExvZ2ljYWwgT3BlcmF0aW9ucyAqKioqKioqKioqLworCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2FuZF9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oImFuZCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9hbmRub3Rfc2k2NChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJhbmRuICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fb3Jfc2kzMihfX20zMiBfX20xLCBfX20zMiBfX20yKQoreworICBfX20zMiByZXQ7CisKKyAgYXNtKCJvciAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9vcl9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oIm9yICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3hvcl9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInhvciAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworCisvKioqKioqKioqKiBTaGlmdCBPcGVyYXRpb25zICoqKioqKioqKiovCisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fc2xsaV9waTE2KF9fbTY0IF9fbSwgaW50NjRfdCBfX2NvdW50KQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwc2xsaCAgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NsbGlfcGkzMihfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHNsbHcgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NsbGlfc2k2NChfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgiZHNsbCAgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NybGlfcGkxNihfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHNybGggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NybGlfcGkzMihfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHNybHcgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NybGlfc2k2NChfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgiZHNybCAgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NyYWlfcGkxNihfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHNyYWggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NyYWlfcGkzMihfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHNyYXcgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19jb3VudCkKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NyYWlfc2k2NChfX202NCBfX20sIGludDY0X3QgX19jb3VudCkKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgiZHNyYSAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbSksICJmIiAoKihfX202NCAqKSZfX2NvdW50KQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKKworLyoqKioqKioqKiogQ29udmVyc2lvbiBJbnRyaW5zaWNzICoqKioqKioqKiovCisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCit0b19tNjQodWludDY0X3QgeCkKK3sKKyAgcmV0dXJuICooX19tNjQgKikmeDsKK30KKworZXh0ZXJuIF9faW5saW5lIHVpbnQ2NF90IEZVTkNUSU9OX0FUVFJJQlMKK3RvX3VpbnQ2NChfX202NCB4KQoreworICByZXR1cm4gKih1aW50NjRfdCAqKSZ4OworfQorCisKKy8qKioqKioqKioqIENvbXBhcmlzb24gSW50cmluc2ljcyAqKioqKioqKioqLworCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2NtcGVxX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwY21wZXFiICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2NtcGVxX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicGNtcGVxaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9jbXBlcV9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBjbXBlcXcgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fY21wZ3RfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBjbXBndGIgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fY21wZ3RfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwY21wZ3RoICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2NtcGd0X3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicGNtcGd0dyAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9jbXBsdF9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicGNtcGx0YiAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9jbXBsdF9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInBjbXBsdGggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fY21wbHRfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwY21wbHR3ICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCisKKy8qKioqKioqKioqIE1pc2NlbGxhbmVvdXMgT3BlcmF0aW9ucyAqKioqKioqKioqLworCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3BhY2tzX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicGFja3NzaGIgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fcGFja3NfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWNrc3N3aCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9wYWNrc19waTMyX2YoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicGFja3Nzd2ggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fcGFja3NfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwYWNrdXNoYiAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9leHRyYWN0X3BpMTYoX19tNjQgX19tLCBpbnQ2NF90IF9fcG9zKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwZXh0cmggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19wb3MpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9pbnNlcnRfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yLCBpbnQ2NF90IF9fcG9zKQoreworICBfX202NCByZXQ7CisKKyAgc3dpdGNoIChfX3BvcykgeworICBjYXNlIDA6CisKKyAgICBhc20oInBpbnNyaF8wICUwLCAlMSwgJTJcblx0IgorICAgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpLCAiaSIgKF9fcG9zKQorICAgICAgICk7CisKKyAgICBicmVhazsKKworICBjYXNlIDE6CisKKyAgICBhc20oInBpbnNyaF8xICUwLCAlMSwgJTJcblx0IgorICAgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpLCAiaSIgKF9fcG9zKQorICAgICAgICk7CisKKyAgICBicmVhazsKKyAgY2FzZSAyOgorCisgICAgYXNtKCJwaW5zcmhfMiAlMCwgJTEsICUyXG5cdCIKKyAgICAgICAgOiAiPWYiIChyZXQpCisgICAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKSwgImkiIChfX3BvcykKKyAgICAgICApOworCisgICAgYnJlYWs7CisKKyAgY2FzZSAzOgorCisgICAgYXNtKCJwaW5zcmhfMyAlMCwgJTEsICUyXG5cdCIKKyAgICAgICAgOiAiPWYiIChyZXQpCisgICAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKSwgImkiIChfX3BvcykKKyAgICAgICApOworCisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3NodWZmbGVfcGkxNihfX202NCBfX20sIGludDY0X3QgX19uKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwc2h1ZmggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20pLCAiZiIgKCooX19tNjQgKikmX19uKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fdW5wYWNraGlfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2hiaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV91bnBhY2toaV9waThfZihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwdW5wY2toYmggJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fdW5wYWNraGlfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICBfX202NCByZXQ7CisKKyAgYXNtKCJwdW5wY2toaHcgJTAsICUxLCAlMlxuXHQiCisgICAgICA6ICI9ZiIgKHJldCkKKyAgICAgIDogImYiIChfX20xKSwgImYiIChfX20yKQorICAgICApOworCisgIHJldHVybiByZXQ7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fdW5wYWNraGlfcGkxNl9mKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2hodyAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV91bnBhY2toaV9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2h3ZCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV91bnBhY2tsb19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHVucGNrbGJoICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCisvKiBTaW5jZSBwdW5wY2tsYmggY2FyZXMgYWJvdXQgdGhlIGhpZ2ggMzItYml0cywgd2UgdXNlIHRoZSBfX202NCBkYXRhdHlwZSwKKyAgIHdoaWNoIHByZXNlcnZlcyB0aGUgZGF0YS4gKi8KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV91bnBhY2tsb19waThfZjY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2xiaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogU2luY2UgcHVucGNrbGJoIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgaGlnaCAzMi1iaXRzLCB3ZSB1c2UgdGhlIF9fbTMyLAorICAgZGF0YXR5cGUsIHdoaWNoIGFsbG93cyBsb2FkODg4OCB0byB1c2UgMzItYml0IGxvYWRzLiAqLworCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3VucGFja2xvX3BpOF9mKF9fbTMyIF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2xiaCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV91bnBhY2tsb19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2xodyAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV91bnBhY2tsb19waTE2X2YoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHVucGNrbGh3ICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX3VucGFja2xvX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgicHVucGNrbHdkICUwLCAlMSwgJTJcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJmIiAoX19tMSksICJmIiAoX19tMikKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fdW5wYWNrbG9fcGkzMl9mKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgIF9fbTY0IHJldDsKKworICBhc20oInB1bnBja2x3ZCAlMCwgJTEsICUyXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAiZiIgKF9fbTEpLCAiZiIgKF9fbTIpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQgRlVOQ1RJT05fQVRUUklCUworX21tX3N0b3JlX3BpMzIoX19tMzIgKmRlc3QsIF9fbTY0IHNyYykKK3sKKyAgc3JjID0gX21tX3BhY2tzX3B1MTYoc3JjLCBfbW1fc2V0emVyb19zaTY0KCkpOworCisgIGFzbSgic3djMSAlMSwgJTBcblx0IgorICAgICAgOiAiPW0iICgqZGVzdCkKKyAgICAgIDogImYiIChzcmMpCisgICAgICA6ICJtZW1vcnkiCisgICAgICk7Cit9CisKK2V4dGVybiBfX2lubGluZSB2b2lkIEZVTkNUSU9OX0FUVFJJQlMKK19tbV9zdG9yZV9zaTY0KF9fbTY0ICpkZXN0LCBfX202NCBzcmMpCit7CisgIGFzbSgiZ3NzZGxjMSAlMSwgNyslMFxuXHQiCisgICAgICAiZ3NzZHJjMSAlMSwgJTBcblx0IgorICAgICAgOiAiPW0iICgqZGVzdCkKKyAgICAgIDogImYiIChzcmMpCisgICAgICA6ICJtZW1vcnkiCisgICAgICk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbG9hZF9zaTMyKGNvbnN0IF9fbTMyICpzcmMpCit7CisgIF9fbTMyIHJldDsKKworICBhc20oImx3YzEgJTAsICUxXG5cdCIKKyAgICAgIDogIj1mIiAocmV0KQorICAgICAgOiAibSIgKCpzcmMpCisgICAgICk7CisKKyAgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTY0IEZVTkNUSU9OX0FUVFJJQlMKK19tbV9sb2FkX3NpNjQoY29uc3QgX19tNjQgKnNyYykKK3sKKyAgX19tNjQgcmV0OworCisgIGFzbSgibGRjMSAlMCwgJTFcblx0IgorICAgICAgOiAiPWYiIChyZXQpCisgICAgICA6ICJtIiAoKnNyYykKKyAgICAgKTsKKworICByZXR1cm4gcmV0OworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2xvYWRsb19waTgoY29uc3QgdWludDMyX3QgKnNyYykKK3sKKyAgcmV0dXJuIF9tbV91bnBhY2tsb19waThfZigqKF9fbTMyICopc3JjLCBfbW1fc2V0emVyb19zaTY0KCkpOworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2xvYWRsb19waThfZihfX202NCBzcmMpCit7CisgIHJldHVybiBfbW1fdW5wYWNrbG9fcGk4X2Y2NChzcmMsIF9tbV9zZXR6ZXJvX3NpNjQoKSk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbG9hZGhpX3BpOF9mKF9fbTY0IHNyYykKK3sKKyAgcmV0dXJuIF9tbV91bnBhY2toaV9waThfZihzcmMsIF9tbV9zZXR6ZXJvX3NpNjQoKSk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbG9hZGxvX3BpMTYoX19tNjQgc3JjKQoreworICByZXR1cm4gX21tX3VucGFja2xvX3BpMTYoc3JjLCBfbW1fc2V0emVyb19zaTY0KCkpOworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2xvYWRsb19waTE2X2YoX19tNjQgc3JjKQoreworICByZXR1cm4gX21tX3VucGFja2xvX3BpMTZfZihfbW1fc2V0emVyb19zaTY0KCksIHNyYyk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fbG9hZGhpX3BpMTYoX19tNjQgc3JjKQoreworICByZXR1cm4gX21tX3VucGFja2hpX3BpMTYoc3JjLCBfbW1fc2V0emVyb19zaTY0KCkpOworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2xvYWRoaV9waTE2X2YoX19tNjQgc3JjKQoreworICByZXR1cm4gX21tX3VucGFja2hpX3BpMTZfZihfbW1fc2V0emVyb19zaTY0KCksIHNyYyk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX202NCBGVU5DVElPTl9BVFRSSUJTCitfbW1fZXhwYW5kX2FscGhhKF9fbTY0IHBpeGVsKQoreworICByZXR1cm4gX21tX3NodWZmbGVfcGkxNihwaXhlbCwgX01NX1NIVUZGTEUoMywgMywgMywgMykpOworfQorCitleHRlcm4gX19pbmxpbmUgX19tNjQgRlVOQ1RJT05fQVRUUklCUworX21tX2V4cGFuZF9hbHBoYV9yZXYoX19tNjQgcGl4ZWwpCit7CisgIHJldHVybiBfbW1fc2h1ZmZsZV9waTE2KHBpeGVsLCBfTU1fU0hVRkZMRSgwLCAwLCAwLCAwKSk7Cit9CisKKyNlbmRpZiAgLyogX19MT09OR1NPTl9NTUlOVFJJTl9IX18gKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbWlwcy9qc2ltZC5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9taXBzL2pzaW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4ODZmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbWlwcy9qc2ltZC5jCkBAIC0wLDAgKzEsMTExNSBAQAorLyoKKyAqIGpzaW1kX21pcHMuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExLCAyMDE0LCAyMDE2LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCwgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiwgMjAxOCwgTWF0dGhpZXUgRGFyYm9pcy4KKyAqCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSAibm9ybWFsIiBwb3J0aW9ucworICogb2YgdGhlIGxpYnJhcnkgYW5kIHRoZSBTSU1EIGltcGxlbWVudGF0aW9ucyB3aGVuIHJ1bm5pbmcgb24gYQorICogTUlQUyBhcmNoaXRlY3R1cmUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgIi4uLy4uL2ppbmNsdWRlLmgiCisjaW5jbHVkZSAiLi4vLi4vanBlZ2xpYi5oIgorI2luY2x1ZGUgIi4uLy4uL2pzaW1kLmgiCisjaW5jbHVkZSAiLi4vLi4vamRjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2pzaW1kZGN0LmgiCisjaW5jbHVkZSAiLi4vanNpbWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBzaW1kX3N1cHBvcnQgPSB+MDsKKworI2lmIGRlZmluZWQoX19saW51eF9fKQorCitMT0NBTChpbnQpCitwYXJzZV9wcm9jX2NwdWluZm8oY29uc3QgY2hhciAqc2VhcmNoX3N0cmluZykKK3sKKyAgY29uc3QgY2hhciAqZmlsZV9uYW1lID0gIi9wcm9jL2NwdWluZm8iOworICBjaGFyIGNwdWluZm9fbGluZVsyNTZdOworICBGSUxFICpmID0gTlVMTDsKKworICBzaW1kX3N1cHBvcnQgPSAwOworCisgIGlmICgoZiA9IGZvcGVuKGZpbGVfbmFtZSwgInIiKSkgIT0gTlVMTCkgeworICAgIHdoaWxlIChmZ2V0cyhjcHVpbmZvX2xpbmUsIHNpemVvZihjcHVpbmZvX2xpbmUpLCBmKSAhPSBOVUxMKSB7CisgICAgICBpZiAoc3Ryc3RyKGNwdWluZm9fbGluZSwgc2VhcmNoX3N0cmluZykgIT0gTlVMTCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHNpbWRfc3VwcG9ydCB8PSBKU0lNRF9EU1BSMjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICAgIGZjbG9zZShmKTsKKyAgfQorICAvKiBEaWQgbm90IGZpbmQgc3RyaW5nIGluIHRoZSBwcm9jIGZpbGUsIG9yIG5vdCBMaW51eCBFTEYuICovCisgIHJldHVybiAwOworfQorCisjZW5kaWYKKworLyoKKyAqIENoZWNrIHdoYXQgU0lNRCBhY2NlbGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCisgKgorICogRklYTUU6IFRoaXMgY29kZSBpcyByYWN5IHVuZGVyIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuCisgKi8KK0xPQ0FMKHZvaWQpCitpbml0X3NpbWQodm9pZCkKK3sKKyNpZm5kZWYgTk9fR0VURU5WCisgIGNoYXIgKmVudiA9IE5VTEw7CisjZW5kaWYKKworICBpZiAoc2ltZF9zdXBwb3J0ICE9IH4wVSkKKyAgICByZXR1cm47CisKKyAgc2ltZF9zdXBwb3J0ID0gMDsKKworI2lmIGRlZmluZWQoX19NSVBTRUxfXykgJiYgZGVmaW5lZChfX21pcHNfZHNwKSAmJiAoX19taXBzX2RzcF9yZXYgPj0gMikKKyAgc2ltZF9zdXBwb3J0IHw9IEpTSU1EX0RTUFIyOworI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisgIC8qIFdlIHN0aWxsIGhhdmUgYSBjaGFuY2UgdG8gdXNlIE1JUFMgRFNQUjIgcmVnYXJkbGVzcyBvZiBnbG9iYWxseSB1c2VkCisgICAqIC1tZHNwcjIgb3B0aW9ucyBwYXNzZWQgdG8gZ2NjIGJ5IHBlcmZvcm1pbmcgcnVudGltZSBkZXRlY3Rpb24gdmlhCisgICAqIC9wcm9jL2NwdWluZm8gcGFyc2luZyBvbiBsaW51eCAqLworICBpZiAoIXBhcnNlX3Byb2NfY3B1aW5mbygiTUlQUyA3NEsiKSkKKyAgICByZXR1cm47CisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRFTlYKKyAgLyogRm9yY2UgZGlmZmVyZW50IHNldHRpbmdzIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VEU1BSMiIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX3N1cHBvcnQgPSBKU0lNRF9EU1BSMjsKKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRU5PTkUiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ID0gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3QgaW50IG1pcHNfaWRjdF9pZmFzdF9jb2Vmc1s0XSA9IHsKKyAgMHg0NTQwNDU0MCwgICAgICAgICAgIC8qIEZJWCggMS4wODIzOTIyMDAgLyAyKSA9ICAxNzczNCA9IDB4NDU0NiAqLworICAweDVBODA1QTgwLCAgICAgICAgICAgLyogRklYKCAxLjQxNDIxMzU2MiAvIDIpID0gIDIzMTcwID0gMHg1QTgyICovCisgIDB4NzY0MDc2NDAsICAgICAgICAgICAvKiBGSVgoIDEuODQ3NzU5MDY1IC8gMikgPSAgMzAyNzQgPSAweDc2NDIgKi8KKyAgMHhBQzYwQUM2MCAgICAgICAgICAgIC8qIEZJWCgtMi42MTMxMjU5MzAgLyA0KSA9IC0yMTQwNyA9IDB4QUM2MSAqLworfTsKKworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3QgaXMgYm9ycm93ZWQgZnJvbSBqZHNhbXBsZS5jICovCit0eXBlZGVmIHZvaWQgKCp1cHNhbXBsZTFfcHRyKSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ191cHNhbXBsZXIgcHViOworICBKU0FNUEFSUkFZIGNvbG9yX2J1ZltNQVhfQ09NUE9ORU5UU107CisgIHVwc2FtcGxlMV9wdHIgbWV0aG9kc1tNQVhfQ09NUE9ORU5UU107CisgIGludCBuZXh0X3Jvd19vdXQ7CisgIEpESU1FTlNJT04gcm93c190b19nbzsKKyAgaW50IHJvd2dyb3VwX2hlaWdodFtNQVhfQ09NUE9ORU5UU107CisgIFVJTlQ4IGhfZXhwYW5kW01BWF9DT01QT05FTlRTXTsKKyAgVUlOVDggdl9leHBhbmRbTUFYX0NPTVBPTkVOVFNdOworfSBteV91cHNhbXBsZXI7CisKK3R5cGVkZWYgbXlfdXBzYW1wbGVyICpteV91cHNhbXBsZV9wdHI7CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcmdiX3ljYyh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3JnYl9ncmF5KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3ljY19yZ2I1NjUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jX2Nhbl9udWxsX2NvbnZlcnQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcmdiX3ljY19jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCpkc3ByMmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGRzcHIyZmN0ID0ganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGRzcHIyZmN0ID0ganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGRzcHIyZmN0ID0ganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGRzcHIyZmN0ID0ganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgfQorCisgIGRzcHIyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcmdiX2dyYXlfY29udmVydChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCpkc3ByMmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfZHNwcjI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGRzcHIyZmN0ID0ganNpbWRfZXh0YmdyX2dyYXlfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGRzcHIyZmN0ID0ganNpbWRfZXh0YmdyeF9ncmF5X2NvbnZlcnRfZHNwcjI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9leHR4cmdiX2dyYXlfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfZHNwcjI7CisgICAgYnJlYWs7CisgIH0KKworICBkc3ByMmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3ljY19yZ2JfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgdm9pZCAoKmRzcHIyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGRzcHIyZmN0ID0ganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGRzcHIyZmN0ID0ganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGRzcHIyZmN0ID0ganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGRzcHIyZmN0ID0ganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBkc3ByMmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9kc3ByMjsKKyAgICBicmVhazsKKyAgfQorCisgIGRzcHIyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYjU2NV9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NfbnVsbF9jb252ZXJ0KGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICBqc2ltZF9jX251bGxfY29udmVydF9kc3ByMihjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3JvdywgbnVtX3Jvd3MsIGNpbmZvLT5udW1fY29tcG9uZW50cyk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfc21vb3RoX2Rvd25zYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9kc3ByMihjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX3Ntb290aF9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGpzaW1kX2gydjJfc21vb3RoX2Rvd25zYW1wbGVfZHNwcjIoaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPnNtb290aGluZ19mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5pbWFnZV93aWR0aCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAganNpbWRfaDJ2MV9kb3duc2FtcGxlX2RzcHIyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGEpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pbnRfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAganNpbWRfaDJ2Ml91cHNhbXBsZV9kc3ByMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBqc2ltZF9oMnYxX3Vwc2FtcGxlX2RzcHIyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ludF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKWNpbmZvLT51cHNhbXBsZTsKKworICBqc2ltZF9pbnRfdXBzYW1wbGVfZHNwcjIodXBzYW1wbGUtPmhfZXhwYW5kW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHNhbXBsZS0+dl9leHBhbmRbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0ciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9mYW5jeV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX2ZhbmN5X3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfZHNwcjIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9kc3ByMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX21lcmdlZF91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX21lcmdlZF91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworICB2b2lkICgqZHNwcjJmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUExFICopOworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGRzcHIyZmN0ID0ganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGRzcHIyZmN0ID0ganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGRzcHIyZmN0ID0ganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICB9CisKKyAgZHNwcjJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmLAorICAgICAgICAgICBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0KTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworICB2b2lkICgqZHNwcjJmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUExFICopOworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGRzcHIyZmN0ID0ganNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGRzcHIyZmN0ID0ganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgZHNwcjJmY3QgPSBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGRzcHIyZmN0ID0ganNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyOworICAgIGJyZWFrOworICB9CisKKyAgZHNwcjJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmLAorICAgICAgICAgICBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0KTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9jb252c2FtcCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSkKK3sKKyAganNpbWRfY29udnNhbXBfZHNwcjIoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcF9mbG9hdChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSkKK3sKKyAganNpbWRfY29udnNhbXBfZmxvYXRfZHNwcjIoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lmYXN0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfaXNsb3coRENURUxFTSAqZGF0YSkKK3sKKyAganNpbWRfZmRjdF9pc2xvd19kc3ByMihkYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0KERDVEVMRU0gKmRhdGEpCit7CisgIGpzaW1kX2ZkY3RfaWZhc3RfZHNwcjIoZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3F1YW50aXplKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZV9mbG9hdCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemUoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSkKK3sKKyAganNpbWRfcXVhbnRpemVfZHNwcjIoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemVfZmxvYXQoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7CisgIGpzaW1kX3F1YW50aXplX2Zsb2F0X2RzcHIyKGNvZWZfYmxvY2ssIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfMngyKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0XzR4NCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfRFNQUjIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF82eDYodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0RTUFIyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfMTJ4MTIodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBqc2ltZF9pZGN0XzJ4Ml9kc3ByMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfNHg0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGludCB3b3Jrc3BhY2VbRENUU0laRSAqIDRdOyAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKworICBqc2ltZF9pZGN0XzR4NF9kc3ByMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF82eDYoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF82eDZfZHNwcjIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzEyeDEyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBpbnQgd29ya3NwYWNlWzk2XTsKKyAgaW50IG91dHB1dFsxMl0gPSB7CisgICAgKGludCkob3V0cHV0X2J1ZlswXSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbMV0gKyBvdXRwdXRfY29sKSwKKyAgICAoaW50KShvdXRwdXRfYnVmWzJdICsgb3V0cHV0X2NvbCksCisgICAgKGludCkob3V0cHV0X2J1ZlszXSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbNF0gKyBvdXRwdXRfY29sKSwKKyAgICAoaW50KShvdXRwdXRfYnVmWzVdICsgb3V0cHV0X2NvbCksCisgICAgKGludCkob3V0cHV0X2J1Zls2XSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbN10gKyBvdXRwdXRfY29sKSwKKyAgICAoaW50KShvdXRwdXRfYnVmWzhdICsgb3V0cHV0X2NvbCksCisgICAgKGludCkob3V0cHV0X2J1Zls5XSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbMTBdICsgb3V0cHV0X2NvbCksCisgICAgKGludCkob3V0cHV0X2J1ZlsxMV0gKyBvdXRwdXRfY29sKQorICB9OworCisgIGpzaW1kX2lkY3RfMTJ4MTJfcGFzczFfZHNwcjIoY29lZl9ibG9jaywgY29tcHB0ci0+ZGN0X3RhYmxlLCB3b3Jrc3BhY2UpOworICBqc2ltZF9pZGN0XzEyeDEyX3Bhc3MyX2RzcHIyKHdvcmtzcGFjZSwgb3V0cHV0KTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lmYXN0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSUZBU1RfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoSUZBU1RfU0NBTEVfQklUUyAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9EU1BSMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaXNsb3coal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGludCBvdXRwdXRbOF0gPSB7CisgICAgKGludCkob3V0cHV0X2J1ZlswXSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbMV0gKyBvdXRwdXRfY29sKSwKKyAgICAoaW50KShvdXRwdXRfYnVmWzJdICsgb3V0cHV0X2NvbCksCisgICAgKGludCkob3V0cHV0X2J1ZlszXSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbNF0gKyBvdXRwdXRfY29sKSwKKyAgICAoaW50KShvdXRwdXRfYnVmWzVdICsgb3V0cHV0X2NvbCksCisgICAgKGludCkob3V0cHV0X2J1Zls2XSArIG91dHB1dF9jb2wpLAorICAgIChpbnQpKG91dHB1dF9idWZbN10gKyBvdXRwdXRfY29sKQorICB9OworCisgIGpzaW1kX2lkY3RfaXNsb3dfZHNwcjIoY29lZl9ibG9jaywgY29tcHB0ci0+ZGN0X3RhYmxlLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgSURDVF9yYW5nZV9saW1pdChjaW5mbykpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIEpDT0VGUFRSIGlucHRyOworICBJRkFTVF9NVUxUX1RZUEUgKnF1YW50cHRyOworICBEQ1RFTEVNIHdvcmtzcGFjZVtEQ1RTSVpFMl07ICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJRkFTVF9NVUxUX1RZUEUgKiljb21wcHRyLT5kY3RfdGFibGU7CisKKyAganNpbWRfaWRjdF9pZmFzdF9jb2xzX2RzcHIyKGlucHRyLCBxdWFudHB0ciwgd29ya3NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwc19pZGN0X2lmYXN0X2NvZWZzKTsKKworICAvKiBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworICAvKiBOb3RlIHRoYXQgd2UgbXVzdCBkZXNjYWxlIHRoZSByZXN1bHRzIGJ5IGEgZmFjdG9yIG9mIDggPT0gMioqMywgKi8KKyAgLyogYW5kIGFsc28gdW5kbyB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLiAqLworCisgIGpzaW1kX2lkY3RfaWZhc3Rfcm93c19kc3ByMih3b3Jrc3BhY2UsIG91dHB1dF9idWYsIG91dHB1dF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBzX2lkY3RfaWZhc3RfY29lZnMpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfZmxvYXQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoSk9DVEVUICopCitqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2sodm9pZCAqc3RhdGUsIEpPQ1RFVCAqYnVmZmVyLCBKQ09FRlBUUiBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdF9kY192YWwsIGNfZGVyaXZlZF90YmwgKmRjdGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKmFjdGJsKQoreworICByZXR1cm4gTlVMTDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmUodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKGNvbnN0IEpDT0VGICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBBbCwgSkNPRUYgKnZhbHVlcywgc2l6ZV90ICp6ZXJvYml0cykKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LCBpbnQgU2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBBbCwgSkNPRUYgKmFic3ZhbHVlcywgc2l6ZV90ICpiaXRzKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbWlwcy9qc2ltZF9kc3ByMi5TIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9taXBzL2pzaW1kX2RzcHIyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjNTQzZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbWlwcy9qc2ltZF9kc3ByMi5TCkBAIC0wLDAgKzEsNDQ3MSBAQAorLyoKKyAqIE1JUFMgRFNQcjIgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0LCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgQ2FsaWZvcm5pYS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXV0aG9yczogIFRlb2RvcmEgTm92a292aWMgPHRlb2RvcmEubm92a292aWNAaW1ndGVjLmNvbT4KKyAqICAgICAgICAgICBEYXJrbyBMYXVzICAgICAgIDxkYXJrby5sYXVzQGltZ3RlYy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisjaW5jbHVkZSAianNpbWRfZHNwcjJfYXNtLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9jX251bGxfY29udmVydF9kc3ByMikKKy8qCisgKiBhMCAgICAgPSBjaW5mby0+aW1hZ2Vfd2lkdGgKKyAqIGExICAgICA9IGlucHV0X2J1ZgorICogYTIgICAgID0gb3V0cHV0X2J1ZgorICogYTMgICAgID0gb3V0cHV0X3JvdworICogMTYoc3ApID0gbnVtX3Jvd3MKKyAqIDIwKHNwKSA9IGNpbmZvLT5udW1fY29tcG9uZW50cworICoKKyAqIE51bGwgY29udmVyc2lvbiBmb3IgY29tcHJlc3Npb24KKyAqLworICAgIFNBVkVfUkVHU19PTl9TVEFDSyA4LCBzMCwgczEKKworICAgIGx3ICAgICAgICAgIHQ5LCAyNChzcCkgICAgICAvLyB0OSA9IG51bV9yb3dzCisgICAgbHcgICAgICAgICAgczAsIDI4KHNwKSAgICAgIC8vIHMwID0gY2luZm8tPm51bV9jb21wb25lbnRzCisgICAgYW5kaSAgICAgICAgdDAsIGEwLCAzICAgICAgIC8vIHQwID0gY2luZm8tPmltYWdlX3dpZHRoICYgMworICAgIGJlcXogICAgICAgIHQwLCA0ZiAgICAgICAgICAvLyBubyByZXNpZHVhbAorICAgICBub3AKKzA6CisgICAgYWRkaXUgICAgICAgdDksIHQ5LCAtMQorICAgIGJsdHogICAgICAgIHQ5LCA3ZgorICAgICBsaSAgICAgICAgIHQxLCAwCisxOgorICAgIHNsbCAgICAgICAgIHQzLCB0MSwgMgorICAgIGx3eCAgICAgICAgIHQ1LCB0MyhhMikgICAgICAvLyB0NSA9IG91dHB0ciA9IG91dHB1dF9idWZbY2ldCisgICAgbHcgICAgICAgICAgdDIsIDAoYTEpICAgICAgIC8vIHQyID0gaW5wdHIgPSAqaW5wdXRfYnVmCisgICAgc2xsICAgICAgICAgdDQsIGEzLCAyCisgICAgbHd4ICAgICAgICAgdDUsIHQ0KHQ1KSAgICAgIC8vIHQ1ID0gb3V0cHRyID0gb3V0cHV0X2J1ZltjaV1bb3V0cHV0X3Jvd10KKyAgICBhZGR1ICAgICAgICB0MiwgdDIsIHQxCisgICAgYWRkdSAgICAgICAgczEsIHQ1LCBhMAorICAgIGFkZHUgICAgICAgIHQ2LCB0NSwgdDAKKzI6CisgICAgbGJ1ICAgICAgICAgdDMsIDAodDIpCisgICAgYWRkaXUgICAgICAgdDUsIHQ1LCAxCisgICAgc2IgICAgICAgICAgdDMsIC0xKHQ1KQorICAgIGJuZSAgICAgICAgIHQ2LCB0NSwgMmIKKyAgICAgYWRkdSAgICAgICB0MiwgdDIsIHMwCiszOgorICAgIGxidSAgICAgICAgIHQzLCAwKHQyKQorICAgIGFkZHUgICAgICAgIHQ0LCB0MiwgczAKKyAgICBhZGR1ICAgICAgICB0NywgdDQsIHMwCisgICAgYWRkdSAgICAgICAgdDgsIHQ3LCBzMAorICAgIGFkZHUgICAgICAgIHQyLCB0OCwgczAKKyAgICBsYnUgICAgICAgICB0NCwgMCh0NCkKKyAgICBsYnUgICAgICAgICB0NywgMCh0NykKKyAgICBsYnUgICAgICAgICB0OCwgMCh0OCkKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIDQKKyAgICBzYiAgICAgICAgICB0MywgLTQodDUpCisgICAgc2IgICAgICAgICAgdDQsIC0zKHQ1KQorICAgIHNiICAgICAgICAgIHQ3LCAtMih0NSkKKyAgICBibmUgICAgICAgICBzMSwgdDUsIDNiCisgICAgIHNiICAgICAgICAgdDgsIC0xKHQ1KQorICAgIGFkZGl1ICAgICAgIHQxLCB0MSwgMQorICAgIGJuZSAgICAgICAgIHQxLCBzMCwgMWIKKyAgICAgbm9wCisgICAgYWRkaXUgICAgICAgYTEsIGExLCA0CisgICAgYmdleiAgICAgICAgdDksIDBiCisgICAgIGFkZGl1ICAgICAgYTMsIGEzLCAxCisgICAgYiAgICAgICAgICAgN2YKKyAgICAgbm9wCis0OgorICAgIGFkZGl1ICAgICAgIHQ5LCB0OSwgLTEKKyAgICBibHR6ICAgICAgICB0OSwgN2YKKyAgICAgbGkgICAgICAgICB0MSwgMAorNToKKyAgICBzbGwgICAgICAgICB0MywgdDEsIDIKKyAgICBsd3ggICAgICAgICB0NSwgdDMoYTIpICAgICAgLy8gdDUgPSBvdXRwdHIgPSBvdXRwdXRfYnVmW2NpXQorICAgIGx3ICAgICAgICAgIHQyLCAwKGExKSAgICAgICAvLyB0MiA9IGlucHRyID0gKmlucHV0X2J1ZgorICAgIHNsbCAgICAgICAgIHQ0LCBhMywgMgorICAgIGx3eCAgICAgICAgIHQ1LCB0NCh0NSkgICAgICAvLyB0NSA9IG91dHB0ciA9IG91dHB1dF9idWZbY2ldW291dHB1dF9yb3ddCisgICAgYWRkdSAgICAgICAgdDIsIHQyLCB0MQorICAgIGFkZHUgICAgICAgIHMxLCB0NSwgYTAKKyAgICBhZGR1ICAgICAgICB0NiwgdDUsIHQwCis2OgorICAgIGxidSAgICAgICAgIHQzLCAwKHQyKQorICAgIGFkZHUgICAgICAgIHQ0LCB0MiwgczAKKyAgICBhZGR1ICAgICAgICB0NywgdDQsIHMwCisgICAgYWRkdSAgICAgICAgdDgsIHQ3LCBzMAorICAgIGFkZHUgICAgICAgIHQyLCB0OCwgczAKKyAgICBsYnUgICAgICAgICB0NCwgMCh0NCkKKyAgICBsYnUgICAgICAgICB0NywgMCh0NykKKyAgICBsYnUgICAgICAgICB0OCwgMCh0OCkKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIDQKKyAgICBzYiAgICAgICAgICB0MywgLTQodDUpCisgICAgc2IgICAgICAgICAgdDQsIC0zKHQ1KQorICAgIHNiICAgICAgICAgIHQ3LCAtMih0NSkKKyAgICBibmUgICAgICAgICBzMSwgdDUsIDZiCisgICAgIHNiICAgICAgICAgdDgsIC0xKHQ1KQorICAgIGFkZGl1ICAgICAgIHQxLCB0MSwgMQorICAgIGJuZSAgICAgICAgIHQxLCBzMCwgNWIKKyAgICAgbm9wCisgICAgYWRkaXUgICAgICAgYTEsIGExLCA0CisgICAgYmdleiAgICAgICAgdDksIDRiCisgICAgIGFkZGl1ICAgICAgYTMsIGEzLCAxCis3OgorICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDgsIHMwLCBzMQorCisgICAgaiAgICAgICAgICAgcmEKKyAgICAgbm9wCisKK0VORChqc2ltZF9jX251bGxfY29udmVydF9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X2RzcHIyCisgKiBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfZHNwcjIKKyAqCisgKiBDb2xvcnNwYWNlIGNvbnZlcnNpb24gUkdCIC0+IFlDYkNyCisgKi8KKworLm1hY3JvIEdFTkVSQVRFX0pTSU1EX1JHQl9ZQ0NfQ09OVkVSVF9EU1BSMiAgY29sb3JpZCwgcGl4ZWxfc2l6ZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcl9vZmZzLCBnX29mZnMsIGJfb2ZmcworCisubWFjcm8gRE9fUkdCX1RPX1lDQyAgciwgZywgYiwgaW5wdHIKKyAgICBsYnUgICAgICAgICBcciwgXHJfb2ZmcyhcaW5wdHIpCisgICAgbGJ1ICAgICAgICAgXGcsIFxnX29mZnMoXGlucHRyKQorICAgIGxidSAgICAgICAgIFxiLCBcYl9vZmZzKFxpbnB0cikKKyAgICBhZGRpdSAgICAgICBcaW5wdHIsIFxwaXhlbF9zaXplCisuZW5kbQorCitMRUFGX0RTUFIyKGpzaW1kX1xjb2xvcmlkXCgpX3ljY19jb252ZXJ0X2RzcHIyKQorLyoKKyAqIGEwICAgICA9IGNpbmZvLT5pbWFnZV93aWR0aAorICogYTEgICAgID0gaW5wdXRfYnVmCisgKiBhMiAgICAgPSBvdXRwdXRfYnVmCisgKiBhMyAgICAgPSBvdXRwdXRfcm93CisgKiAxNihzcCkgPSBudW1fcm93cworICovCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGx3ICAgICAgICAgIHQ3LCA0OChzcCkgICAgICAvLyB0NyA9IG51bV9yb3dzCisgICAgbGkgICAgICAgICAgczAsIDB4NGM4YiAgICAgIC8vIEZJWCgwLjI5OTAwKQorICAgIGxpICAgICAgICAgIHMxLCAweDk2NDYgICAgICAvLyBGSVgoMC41ODcwMCkKKyAgICBsaSAgICAgICAgICBzMiwgMHgxZDJmICAgICAgLy8gRklYKDAuMTE0MDApCisgICAgbGkgICAgICAgICAgczMsIDB4ZmZmZmQ0Y2QgIC8vIC1GSVgoMC4xNjg3NCkKKyAgICBsaSAgICAgICAgICBzNCwgMHhmZmZmYWIzMyAgLy8gLUZJWCgwLjMzMTI2KQorICAgIGxpICAgICAgICAgIHM1LCAweDgwMDAgICAgICAvLyBGSVgoMC41MDAwMCkKKyAgICBsaSAgICAgICAgICBzNiwgMHhmZmZmOTRkMSAgLy8gLUZJWCgwLjQxODY5KQorICAgIGxpICAgICAgICAgIHM3LCAweGZmZmZlYjJmICAvLyAtRklYKDAuMDgxMzEpCisgICAgbGkgICAgICAgICAgdDgsIDB4ODA3ZmZmICAgIC8vIENCQ1JfT0ZGU0VUICsgT05FX0hBTEYtMQorCiswOgorICAgIGFkZGl1ICAgICAgIHQ3LCAtMSAgICAgICAgICAvLyAtLW51bV9yb3dzCisgICAgbHcgICAgICAgICAgdDYsIDAoYTEpICAgICAgIC8vIHQ2ID0gaW5wdXRfYnVmWzBdCisgICAgbHcgICAgICAgICAgdDAsIDAoYTIpCisgICAgbHcgICAgICAgICAgdDEsIDQoYTIpCisgICAgbHcgICAgICAgICAgdDIsIDgoYTIpCisgICAgc2xsICAgICAgICAgdDMsIGEzLCAyCisgICAgbHd4ICAgICAgICAgdDAsIHQzKHQwKSAgICAgIC8vIHQwID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XQorICAgIGx3eCAgICAgICAgIHQxLCB0Myh0MSkgICAgICAvLyB0MSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd10KKyAgICBsd3ggICAgICAgICB0MiwgdDModDIpICAgICAgLy8gdDIgPSBvdXRwdXRfYnVmWzJdW291dHB1dF9yb3ddCisKKyAgICBhZGR1ICAgICAgICB0OSwgdDIsIGEwICAgICAgLy8gdDkgPSBlbmQgYWRkcmVzcworICAgIGFkZGl1ICAgICAgIGEzLCAxCisKKzE6CisgICAgRE9fUkdCX1RPX1lDQyB0MywgdDQsIHQ1LCB0NgorCisgICAgbXRsbyAgICAgICAgczUsICRhYzAKKyAgICBtdGxvICAgICAgICB0OCwgJGFjMQorICAgIG10bG8gICAgICAgIHQ4LCAkYWMyCisgICAgbWFkZHUgICAgICAgJGFjMCwgczIsIHQ1CisgICAgbWFkZHUgICAgICAgJGFjMSwgczUsIHQ1CisgICAgbWFkZHUgICAgICAgJGFjMiwgczUsIHQzCisgICAgbWFkZHUgICAgICAgJGFjMCwgczAsIHQzCisgICAgbWFkZHUgICAgICAgJGFjMSwgczMsIHQzCisgICAgbWFkZHUgICAgICAgJGFjMiwgczYsIHQ0CisgICAgbWFkZHUgICAgICAgJGFjMCwgczEsIHQ0CisgICAgbWFkZHUgICAgICAgJGFjMSwgczQsIHQ0CisgICAgbWFkZHUgICAgICAgJGFjMiwgczcsIHQ1CisgICAgZXh0ci53ICAgICAgdDMsICRhYzAsIDE2CisgICAgZXh0ci53ICAgICAgdDQsICRhYzEsIDE2CisgICAgZXh0ci53ICAgICAgdDUsICRhYzIsIDE2CisgICAgc2IgICAgICAgICAgdDMsIDAodDApCisgICAgc2IgICAgICAgICAgdDQsIDAodDEpCisgICAgc2IgICAgICAgICAgdDUsIDAodDIpCisgICAgYWRkaXUgICAgICAgdDAsIDEKKyAgICBhZGRpdSAgICAgICB0MiwgMQorICAgIGJuZSAgICAgICAgIHQyLCB0OSwgMWIKKyAgICAgYWRkaXUgICAgICB0MSwgMQorICAgIGJndHogICAgICAgIHQ3LCAwYgorICAgICBhZGRpdSAgICAgIGExLCA0CisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAzMiwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3CisKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKK0VORChqc2ltZF9cY29sb3JpZFwoKV95Y2NfY29udmVydF9kc3ByMikKKworLnB1cmdlbSBET19SR0JfVE9fWUNDCisKKy5lbmRtCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWlkIC0tIHBpeCBSICBHICBCICovCitHRU5FUkFURV9KU0lNRF9SR0JfWUNDX0NPTlZFUlRfRFNQUjIgZXh0cmdiLCAgMywgMCwgMSwgMgorR0VORVJBVEVfSlNJTURfUkdCX1lDQ19DT05WRVJUX0RTUFIyIGV4dGJnciwgIDMsIDIsIDEsIDAKK0dFTkVSQVRFX0pTSU1EX1JHQl9ZQ0NfQ09OVkVSVF9EU1BSMiBleHRyZ2J4LCA0LCAwLCAxLCAyCitHRU5FUkFURV9KU0lNRF9SR0JfWUNDX0NPTlZFUlRfRFNQUjIgZXh0YmdyeCwgNCwgMiwgMSwgMAorR0VORVJBVEVfSlNJTURfUkdCX1lDQ19DT05WRVJUX0RTUFIyIGV4dHhiZ3IsIDQsIDMsIDIsIDEKK0dFTkVSQVRFX0pTSU1EX1JHQl9ZQ0NfQ09OVkVSVF9EU1BSMiBleHR4cmdiLCA0LCAxLCAyLCAzCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9kc3ByMgorICoganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X2RzcHIyCisgKiBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X2RzcHIyCisgKiBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X2RzcHIyCisgKiBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X2RzcHIyCisgKiBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X2RzcHIyCisgKgorICogQ29sb3JzcGFjZSBjb252ZXJzaW9uIFlDYkNyIC0+IFJHQgorICovCisKKy5tYWNybyBHRU5FUkFURV9KU0lNRF9ZQ0NfUkdCX0NPTlZFUlRfRFNQUjIgIGNvbG9yaWQsIHBpeGVsX3NpemUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfb2ZmcywgZ19vZmZzLCBiX29mZnMsIGFfb2ZmcworCisubWFjcm8gU1RPUkVfWUNDX1RPX1JHQiAgc2NyYXRjaDAgc2NyYXRjaDEgc2NyYXRjaDIgb3V0cHRyCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gwLCBccl9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gxLCBcZ19vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gyLCBcYl9vZmZzKFxvdXRwdHIpCisuaWYgKFxwaXhlbF9zaXplID09IDQpCisgICAgbGkgICAgICAgICAgdDAsIDB4RkYKKyAgICBzYiAgICAgICAgICB0MCwgXGFfb2Zmcyhcb3V0cHRyKQorLmVuZGlmCisgICAgYWRkaXUgICAgICAgXG91dHB0ciwgXHBpeGVsX3NpemUKKy5lbmRtCisKK0xFQUZfRFNQUjIoanNpbWRfeWNjX1xjb2xvcmlkXCgpX2NvbnZlcnRfZHNwcjIpCisvKgorICogYTAgICAgID0gY2luZm8tPmltYWdlX3dpZHRoCisgKiBhMSAgICAgPSBpbnB1dF9idWYKKyAqIGEyICAgICA9IGlucHV0X3JvdworICogYTMgICAgID0gb3V0cHV0X2J1ZgorICogMTYoc3ApID0gbnVtX3Jvd3MKKyAqLworICAgIFNBVkVfUkVHU19PTl9TVEFDSyAzMiwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3CisKKyAgICBsdyAgICAgICAgICBzMSwgNDgoc3ApCisgICAgbGkgICAgICAgICAgdDMsIDB4ODAwMAorICAgIGxpICAgICAgICAgIHQ0LCAweDE2NmU5ICAgICAvLyBGSVgoMS40MDIwMCkKKyAgICBsaSAgICAgICAgICB0NSwgMHgxYzVhMiAgICAgLy8gRklYKDEuNzcyMDApCisgICAgbGkgICAgICAgICAgdDYsIDB4ZmZmZjQ5MmUgIC8vIC1GSVgoMC43MTQxNCkKKyAgICBsaSAgICAgICAgICB0NywgMHhmZmZmYTdlNiAgLy8gLUZJWCgwLjM0NDE0KQorICAgIHJlcGwucGggICAgIHQ4LCAxMjgKKworMDoKKyAgICBsdyAgICAgICAgICBzMCwgMChhMykKKyAgICBsdyAgICAgICAgICB0MCwgMChhMSkKKyAgICBsdyAgICAgICAgICB0MSwgNChhMSkKKyAgICBsdyAgICAgICAgICB0MiwgOChhMSkKKyAgICBzbGwgICAgICAgICBzNSwgYTIsIDIKKyAgICBhZGRpdSAgICAgICBzMSwgLTEKKyAgICBsd3ggICAgICAgICBzMiwgczUodDApCisgICAgbHd4ICAgICAgICAgczMsIHM1KHQxKQorICAgIGx3eCAgICAgICAgIHM0LCBzNSh0MikKKyAgICBhZGR1ICAgICAgICB0OSwgczIsIGEwCisgICAgYWRkaXUgICAgICAgYTIsIDEKKworMToKKyAgICBsYnUgICAgICAgICBzNywgMChzNCkgICAgICAgLy8gY3IKKyAgICBsYnUgICAgICAgICBzNiwgMChzMykgICAgICAgLy8gY2IKKyAgICBsYnUgICAgICAgICBzNSwgMChzMikgICAgICAgLy8geQorICAgIGFkZGl1ICAgICAgIHMyLCAxCisgICAgYWRkaXUgICAgICAgczQsIDEKKyAgICBhZGRpdSAgICAgICBzNywgLTEyOAorICAgIGFkZGl1ICAgICAgIHM2LCAtMTI4CisgICAgbXVsICAgICAgICAgdDIsIHQ3LCBzNgorICAgIG11bCAgICAgICAgIHQwLCB0NiwgczcgICAgICAvLyBDcmd0YWJbY3JdCisgICAgc2xsICAgICAgICAgczcsIDE1CisgICAgbXVscV9ycy53ICAgdDEsIHQ0LCBzNyAgICAgIC8vIENycnRhYltjcl0KKyAgICBzbGwgICAgICAgICBzNiwgMTUKKyAgICBhZGR1ICAgICAgICB0MiwgdDMgICAgICAgICAgLy8gQ2JndGFiW2NiXQorICAgIGFkZHUgICAgICAgIHQyLCB0MAorCisgICAgbXVscV9ycy53ICAgdDAsIHQ1LCBzNiAgICAgIC8vIENiYnRhYltjYl0KKyAgICBzcmEgICAgICAgICB0MiwgMTYKKyAgICBhZGR1ICAgICAgICB0MSwgczUKKyAgICBhZGR1ICAgICAgICB0MiwgczUgICAgICAgICAgLy8gYWRkIHkKKyAgICBpbnMgICAgICAgICB0MiwgdDEsIDE2LCAxNgorICAgIHN1YnUucGggICAgIHQyLCB0MiwgdDgKKyAgICBhZGR1ICAgICAgICB0MCwgczUKKyAgICBzaGxsX3MucGggICB0MiwgdDIsIDgKKyAgICBzdWJ1ICAgICAgICB0MCwgMTI4CisgICAgc2hyYS5waCAgICAgdDIsIHQyLCA4CisgICAgc2hsbF9zLncgICAgdDAsIHQwLCAyNAorICAgIGFkZHUucGggICAgIHQyLCB0MiwgdDggICAgICAvLyBjbGlwICYgc3RvcmUKKyAgICBzcmEgICAgICAgICB0MCwgdDAsIDI0CisgICAgc3JhICAgICAgICAgdDEsIHQyLCAxNgorICAgIGFkZGl1ICAgICAgIHQwLCAxMjgKKworICAgIFNUT1JFX1lDQ19UT19SR0IgdDEsIHQyLCB0MCwgczAKKworICAgIGJuZSAgICAgICAgIHMyLCB0OSwgMWIKKyAgICAgYWRkaXUgICAgICBzMywgMQorICAgIGJndHogICAgICAgIHMxLCAwYgorICAgICBhZGRpdSAgICAgIGEzLCA0CisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAzMiwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3CisKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKK0VORChqc2ltZF95Y2NfXGNvbG9yaWRcKClfY29udmVydF9kc3ByMikKKworLnB1cmdlbSBTVE9SRV9ZQ0NfVE9fUkdCCisKKy5lbmRtCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWlkIC0tIHBpeCBSICBHICBCICBBICovCitHRU5FUkFURV9KU0lNRF9ZQ0NfUkdCX0NPTlZFUlRfRFNQUjIgZXh0cmdiLCAgMywgMCwgMSwgMiwgMworR0VORVJBVEVfSlNJTURfWUNDX1JHQl9DT05WRVJUX0RTUFIyIGV4dGJnciwgIDMsIDIsIDEsIDAsIDMKK0dFTkVSQVRFX0pTSU1EX1lDQ19SR0JfQ09OVkVSVF9EU1BSMiBleHRyZ2J4LCA0LCAwLCAxLCAyLCAzCitHRU5FUkFURV9KU0lNRF9ZQ0NfUkdCX0NPTlZFUlRfRFNQUjIgZXh0YmdyeCwgNCwgMiwgMSwgMCwgMworR0VORVJBVEVfSlNJTURfWUNDX1JHQl9DT05WRVJUX0RTUFIyIGV4dHhiZ3IsIDQsIDMsIDIsIDEsIDAKK0dFTkVSQVRFX0pTSU1EX1lDQ19SR0JfQ09OVkVSVF9EU1BSMiBleHR4cmdiLCA0LCAxLCAyLCAzLCAwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dGJncl9ncmF5X2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2RzcHIyCisgKiBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9kc3ByMgorICoganNpbWRfZXh0eGJncl9ncmF5X2NvbnZlcnRfZHNwcjIKKyAqIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X2RzcHIyCisgKgorICogQ29sb3JzcGFjZSBjb252ZXJzaW9uIFJHQiAtPiBHUkFZCisgKi8KKworLm1hY3JvIEdFTkVSQVRFX0pTSU1EX1JHQl9HUkFZX0NPTlZFUlRfRFNQUjIgIGNvbG9yaWQsIHBpeGVsX3NpemUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX29mZnMsIGdfb2ZmcywgYl9vZmZzCisKKy5tYWNybyBET19SR0JfVE9fR1JBWSAgciwgZywgYiwgaW5wdHIKKyAgICBsYnUgICAgICAgICBcciwgXHJfb2ZmcyhcaW5wdHIpCisgICAgbGJ1ICAgICAgICAgXGcsIFxnX29mZnMoXGlucHRyKQorICAgIGxidSAgICAgICAgIFxiLCBcYl9vZmZzKFxpbnB0cikKKyAgICBhZGRpdSAgICAgICBcaW5wdHIsIFxwaXhlbF9zaXplCisuZW5kbQorCitMRUFGX0RTUFIyKGpzaW1kX1xjb2xvcmlkXCgpX2dyYXlfY29udmVydF9kc3ByMikKKy8qCisgKiBhMCAgICAgPSBjaW5mby0+aW1hZ2Vfd2lkdGgKKyAqIGExICAgICA9IGlucHV0X2J1ZgorICogYTIgICAgID0gb3V0cHV0X2J1ZgorICogYTMgICAgID0gb3V0cHV0X3JvdworICogMTYoc3ApID0gbnVtX3Jvd3MKKyAqLworICAgIFNBVkVfUkVHU19PTl9TVEFDSyAzMiwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3CisKKyAgICBsaSAgICAgICAgICBzMCwgMHg0YzhiICAgICAgLy8gczAgPSBGSVgoMC4yOTkwMCkKKyAgICBsaSAgICAgICAgICBzMSwgMHg5NjQ2ICAgICAgLy8gczEgPSBGSVgoMC41ODcwMCkKKyAgICBsaSAgICAgICAgICBzMiwgMHgxZDJmICAgICAgLy8gczIgPSBGSVgoMC4xMTQwMCkKKyAgICBsaSAgICAgICAgICBzNywgMHg4MDAwICAgICAgLy8gczcgPSBGSVgoMC41MDAwMCkKKyAgICBsdyAgICAgICAgICBzNiwgNDgoc3ApCisgICAgYW5kaSAgICAgICAgdDcsIGEwLCAzCisKKzA6CisgICAgYWRkaXUgICAgICAgczYsIC0xICAgICAgICAgIC8vIHM2ID0gbnVtX3Jvd3MKKyAgICBsdyAgICAgICAgICB0MCwgMChhMSkKKyAgICBsdyAgICAgICAgICB0MSwgMChhMikKKyAgICBzbGwgICAgICAgICB0MywgYTMsIDIKKyAgICBsd3ggICAgICAgICB0MSwgdDModDEpCisgICAgYWRkaXUgICAgICAgYTMsIDEKKyAgICBhZGR1ICAgICAgICB0OSwgdDEsIGEwCisgICAgc3VidSAgICAgICAgdDgsIHQ5LCB0NworICAgIGJlcSAgICAgICAgIHQxLCB0OCwgMmYKKyAgICAgbm9wCisKKzE6CisgICAgRE9fUkdCX1RPX0dSQVkgdDMsIHQ0LCB0NSwgdDAKKyAgICBET19SR0JfVE9fR1JBWSBzMywgczQsIHM1LCB0MAorCisgICAgbXRsbyAgICAgICAgczcsICRhYzAKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMiwgdDUKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMSwgdDQKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMCwgdDMKKyAgICBtdGxvICAgICAgICBzNywgJGFjMQorICAgIG1hZGR1ICAgICAgICRhYzEsIHMyLCBzNQorICAgIG1hZGR1ICAgICAgICRhYzEsIHMxLCBzNAorICAgIG1hZGR1ICAgICAgICRhYzEsIHMwLCBzMworICAgIGV4dHIudyAgICAgIHQ2LCAkYWMwLCAxNgorCisgICAgRE9fUkdCX1RPX0dSQVkgdDMsIHQ0LCB0NSwgdDAKKyAgICBET19SR0JfVE9fR1JBWSBzMywgczQsIHM1LCB0MAorCisgICAgbXRsbyAgICAgICAgczcsICRhYzAKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMiwgdDUKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMSwgdDQKKyAgICBleHRyLncgICAgICB0MiwgJGFjMSwgMTYKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMCwgdDMKKyAgICBtdGxvICAgICAgICBzNywgJGFjMQorICAgIG1hZGR1ICAgICAgICRhYzEsIHMyLCBzNQorICAgIG1hZGR1ICAgICAgICRhYzEsIHMxLCBzNAorICAgIG1hZGR1ICAgICAgICRhYzEsIHMwLCBzMworICAgIGV4dHIudyAgICAgIHQ1LCAkYWMwLCAxNgorICAgIHNiICAgICAgICAgIHQ2LCAwKHQxKQorICAgIHNiICAgICAgICAgIHQyLCAxKHQxKQorICAgIGV4dHIudyAgICAgIHQzLCAkYWMxLCAxNgorICAgIGFkZGl1ICAgICAgIHQxLCA0CisgICAgc2IgICAgICAgICAgdDUsIC0yKHQxKQorICAgIHNiICAgICAgICAgIHQzLCAtMSh0MSkKKyAgICBibmUgICAgICAgICB0MSwgdDgsIDFiCisgICAgIG5vcAorCisyOgorICAgIGJlcXogICAgICAgIHQ3LCA0ZgorICAgICBub3AKKworMzoKKyAgICBET19SR0JfVE9fR1JBWSB0MywgdDQsIHQ1LCB0MAorCisgICAgbXRsbyAgICAgICAgczcsICRhYzAKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMiwgdDUKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMSwgdDQKKyAgICBtYWRkdSAgICAgICAkYWMwLCBzMCwgdDMKKyAgICBleHRyLncgICAgICB0NiwgJGFjMCwgMTYKKyAgICBzYiAgICAgICAgICB0NiwgMCh0MSkKKyAgICBhZGRpdSAgICAgICB0MSwgMQorICAgIGJuZSAgICAgICAgIHQxLCB0OSwgM2IKKyAgICAgbm9wCisKKzQ6CisgICAgYmd0eiAgICAgICAgczYsIDBiCisgICAgIGFkZGl1ICAgICAgYTEsIDQKKworICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorRU5EKGpzaW1kX1xjb2xvcmlkXCgpX2dyYXlfY29udmVydF9kc3ByMikKKworLnB1cmdlbSBET19SR0JfVE9fR1JBWQorCisuZW5kbQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1pZCAtLSAgcGl4IFIgIEcgIEIgKi8KK0dFTkVSQVRFX0pTSU1EX1JHQl9HUkFZX0NPTlZFUlRfRFNQUjIgZXh0cmdiLCAgMywgMCwgMSwgMgorR0VORVJBVEVfSlNJTURfUkdCX0dSQVlfQ09OVkVSVF9EU1BSMiBleHRiZ3IsICAzLCAyLCAxLCAwCitHRU5FUkFURV9KU0lNRF9SR0JfR1JBWV9DT05WRVJUX0RTUFIyIGV4dHJnYngsIDQsIDAsIDEsIDIKK0dFTkVSQVRFX0pTSU1EX1JHQl9HUkFZX0NPTlZFUlRfRFNQUjIgZXh0YmdyeCwgNCwgMiwgMSwgMAorR0VORVJBVEVfSlNJTURfUkdCX0dSQVlfQ09OVkVSVF9EU1BSMiBleHR4YmdyLCA0LCAzLCAyLCAxCitHRU5FUkFURV9KU0lNRF9SR0JfR1JBWV9DT05WRVJUX0RTUFIyIGV4dHhyZ2IsIDQsIDEsIDIsIDMKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAqIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9kc3ByMgorICoganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9kc3ByMgorICoganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgKiBqc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgKiBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgKiBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgKgorICogTWVyZ2VkIGgydjIgdXBzYW1wbGUgcm91dGluZXMKKyAqLworLm1hY3JvIEdFTkVSQVRFX0gyVjJfTUVSR0VEX1VQU0FNUExFX0RTUFIyICBjb2xvcmlkLCBwaXhlbF9zaXplLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIxX29mZnMsIGcxX29mZnMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjFfb2ZmcywgYTFfb2ZmcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMl9vZmZzLCBnMl9vZmZzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyX29mZnMsIGEyX29mZnMKKworLm1hY3JvIFNUT1JFX0gyVjJfMl9QSVhFTFMgIHNjcmF0Y2gwIHNjcmF0Y2gxIHNjcmF0Y2gyIHNjcmF0Y2gzIHNjcmF0Y2g0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoNSBvdXRwdHIKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDAsIFxyMV9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gxLCBcZzFfb2Zmcyhcb3V0cHRyKQorICAgIHNiICAgICAgICAgIFxzY3JhdGNoMiwgXGIxX29mZnMoXG91dHB0cikKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDMsIFxyMl9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2g0LCBcZzJfb2Zmcyhcb3V0cHRyKQorICAgIHNiICAgICAgICAgIFxzY3JhdGNoNSwgXGIyX29mZnMoXG91dHB0cikKKy5pZiAoXHBpeGVsX3NpemUgPT0gOCkKKyAgICBsaSAgICAgICAgICBcc2NyYXRjaDAsIDB4RkYKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDAsIFxhMV9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gwLCBcYTJfb2Zmcyhcb3V0cHRyKQorLmVuZGlmCisgICAgYWRkaXUgICAgICAgXG91dHB0ciwgXHBpeGVsX3NpemUKKy5lbmRtCisKKy5tYWNybyBTVE9SRV9IMlYyXzFfUElYRUwgIHNjcmF0Y2gwIHNjcmF0Y2gxIHNjcmF0Y2gyIG91dHB0cgorICAgIHNiICAgICAgICAgIFxzY3JhdGNoMCwgXHIxX29mZnMoXG91dHB0cikKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDEsIFxnMV9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gyLCBcYjFfb2Zmcyhcb3V0cHRyKQorCisuaWYgKFxwaXhlbF9zaXplID09IDgpCisgICAgbGkgICAgICAgICAgdDAsIDB4RkYKKyAgICBzYiAgICAgICAgICB0MCwgXGExX29mZnMoXG91dHB0cikKKy5lbmRpZgorLmVuZG0KKworTEVBRl9EU1BSMihqc2ltZF9oMnYyX1xjb2xvcmlkXCgpX21lcmdlZF91cHNhbXBsZV9kc3ByMikKKy8qCisgKiBhMCAgICAgPSBjaW5mby0+b3V0cHV0X3dpZHRoCisgKiBhMSAgICAgPSBpbnB1dF9idWYKKyAqIGEyICAgICA9IGluX3Jvd19ncm91cF9jdHIKKyAqIGEzICAgICA9IG91dHB1dF9idWYKKyAqIDE2KHNwKSA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQKKyAqLworICAgIFNBVkVfUkVHU19PTl9TVEFDSyA0MCwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCByYQorCisgICAgbHcgICAgICAgICAgdDksIDU2KHNwKSAgICAgIC8vIGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQKKyAgICBsdyAgICAgICAgICB2MCwgMChhMSkKKyAgICBsdyAgICAgICAgICB2MSwgNChhMSkKKyAgICBsdyAgICAgICAgICB0MCwgOChhMSkKKyAgICBzbGwgICAgICAgICB0MSwgYTIsIDMKKyAgICBhZGRpdSAgICAgICB0MiwgdDEsIDQKKyAgICBzbGwgICAgICAgICB0MywgYTIsIDIKKyAgICBsdyAgICAgICAgICB0NCwgMChhMykgICAgICAgLy8gdDQgPSBvdXRwdXRfYnVmWzBdCisgICAgbHd4ICAgICAgICAgdDEsIHQxKHYwKSAgICAgIC8vIHQxID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHIqMl0KKyAgICBsd3ggICAgICAgICB0MiwgdDIodjApICAgICAgLy8gdDIgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cioyICsgMV0KKyAgICBsd3ggICAgICAgICB0NSwgdDModjEpICAgICAgLy8gdDUgPSBpbnB1dF9idWZbMV1baW5fcm93X2dyb3VwX2N0cl0KKyAgICBsd3ggICAgICAgICB0NiwgdDModDApICAgICAgLy8gdDYgPSBpbnB1dF9idWZbMl1baW5fcm93X2dyb3VwX2N0cl0KKyAgICBsdyAgICAgICAgICB0NywgNChhMykgICAgICAgLy8gdDcgPSBvdXRwdXRfYnVmWzFdCisgICAgbGkgICAgICAgICAgczEsIDB4ZTZlYQorICAgIGFkZGl1ICAgICAgIHQ4LCBzMSwgMHg3ZmZmICAgIC8vIHQ4ID0gMHgxNjZlOSBbRklYKDEuNDAyMDApXQorICAgIGFkZGl1ICAgICAgIHMwLCB0OCwgMHg1ZWI5ICAgIC8vIHMwID0gMHgxYzVhMiBbRklYKDEuNzcyMDApXQorICAgIGFkZGl1ICAgICAgIHMxLCB6ZXJvLCAweGE3ZTYgIC8vIHM0ID0gMHhmZmZmYTdlNiBbLUZJWCgwLjM0NDE0KV0KKyAgICB4b3JpICAgICAgICBzMiwgczEsIDB4ZWVjOCAgICAvLyBzMyA9IDB4ZmZmZjQ5MmUgWy1GSVgoMC43MTQxNCldCisgICAgc3JsICAgICAgICAgdDMsIGEwLCAxCisgICAgYmxleiAgICAgICAgdDMsIDJmCisgICAgIGFkZHUgICAgICAgdDAsIHQ1LCB0MyAgICAgIC8vIHQwID0gZW5kIGFkZHJlc3MKKyAxOgorICAgIGxidSAgICAgICAgIHQzLCAwKHQ1KQorICAgIGxidSAgICAgICAgIHMzLCAwKHQ2KQorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgMQorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTEyOCAgICAvLyAoY2IgLSAxMjgpCisgICAgYWRkaXUgICAgICAgczMsIHMzLCAtMTI4ICAgIC8vIChjciAtIDEyOCkKKyAgICBtdWx0ICAgICAgICAkYWMxLCBzMSwgdDMKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMiwgczMKKyAgICBzbGwgICAgICAgICBzMywgczMsIDE1CisgICAgc2xsICAgICAgICAgdDMsIHQzLCAxNQorICAgIG11bHFfcnMudyAgIHM0LCB0OCwgczMgICAgICAvLyBzNCA9IChDMSAqIGNyICsgT05FX0hBTEYpPj4gU0NBTEVCSVRTCisgICAgZXh0cl9yLncgICAgczUsICRhYzEsIDE2CisgICAgbXVscV9ycy53ICAgczYsIHMwLCB0MyAgICAgIC8vIHM2ID0gKEMyICogY2IgKyBPTkVfSEFMRik+PiBTQ0FMRUJJVFMKKyAgICBsYnUgICAgICAgICB2MCwgMCh0MSkKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIDEKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIDIKKyAgICBhZGR1ICAgICAgICB0MywgdjAsIHM0ICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHYwLCBzNSAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHYwLCBzNiAgICAgIC8vIHkrY2JsdWUKKyAgICBhZGR1ICAgICAgICB0MywgdDksIHQzICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHQ5LCBzMyAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHQ5LCB2MSAgICAgIC8vIHkrY2JsdWUKKyAgICBsYnUgICAgICAgICBBVCwgMCh0MykKKyAgICBsYnUgICAgICAgICBzNywgMChzMykKKyAgICBsYnUgICAgICAgICByYSwgMCh2MSkKKyAgICBsYnUgICAgICAgICB2MCwgLTEodDEpCisgICAgYWRkdSAgICAgICAgdDMsIHYwLCBzNCAgICAgIC8vIHkrY3JlZAorICAgIGFkZHUgICAgICAgIHMzLCB2MCwgczUgICAgICAvLyB5K2NncmVlbgorICAgIGFkZHUgICAgICAgIHYxLCB2MCwgczYgICAgICAvLyB5K2NibHVlCisgICAgYWRkdSAgICAgICAgdDMsIHQ5LCB0MyAgICAgIC8vIHkrY3JlZAorICAgIGFkZHUgICAgICAgIHMzLCB0OSwgczMgICAgICAvLyB5K2NncmVlbgorICAgIGFkZHUgICAgICAgIHYxLCB0OSwgdjEgICAgICAvLyB5K2NibHVlCisgICAgbGJ1ICAgICAgICAgdDMsIDAodDMpCisgICAgbGJ1ICAgICAgICAgczMsIDAoczMpCisgICAgbGJ1ICAgICAgICAgdjEsIDAodjEpCisgICAgbGJ1ICAgICAgICAgdjAsIDAodDIpCisKKyAgICBTVE9SRV9IMlYyXzJfUElYRUxTIEFULCBzNywgcmEsIHQzLCBzMywgdjEsIHQ0CisKKyAgICBhZGR1ICAgICAgICB0MywgdjAsIHM0ICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHYwLCBzNSAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHYwLCBzNiAgICAgIC8vIHkrY2JsdWUKKyAgICBhZGR1ICAgICAgICB0MywgdDksIHQzICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHQ5LCBzMyAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHQ5LCB2MSAgICAgIC8vIHkrY2JsdWUKKyAgICBsYnUgICAgICAgICBBVCwgMCh0MykKKyAgICBsYnUgICAgICAgICBzNywgMChzMykKKyAgICBsYnUgICAgICAgICByYSwgMCh2MSkKKyAgICBsYnUgICAgICAgICB2MCwgMSh0MikKKyAgICBhZGRpdSAgICAgICB0MiwgdDIsIDIKKyAgICBhZGR1ICAgICAgICB0MywgdjAsIHM0ICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHYwLCBzNSAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHYwLCBzNiAgICAgIC8vIHkrY2JsdWUKKyAgICBhZGR1ICAgICAgICB0MywgdDksIHQzICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHQ5LCBzMyAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHQ5LCB2MSAgICAgIC8vIHkrY2JsdWUKKyAgICBsYnUgICAgICAgICB0MywgMCh0MykKKyAgICBsYnUgICAgICAgICBzMywgMChzMykKKyAgICBsYnUgICAgICAgICB2MSwgMCh2MSkKKworICAgIFNUT1JFX0gyVjJfMl9QSVhFTFMgQVQsIHM3LCByYSwgdDMsIHMzLCB2MSwgdDcKKworICAgIGJuZSAgICAgICAgIHQwLCB0NSwgMWIKKyAgICAgbm9wCisyOgorICAgIGFuZGkgICAgICAgIHQwLCBhMCwgMQorICAgIGJlcXogICAgICAgIHQwLCA0ZgorICAgICBsYnUgICAgICAgIHQzLCAwKHQ1KQorICAgIGxidSAgICAgICAgIHMzLCAwKHQ2KQorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTEyOCAgICAvLyAoY2IgLSAxMjgpCisgICAgYWRkaXUgICAgICAgczMsIHMzLCAtMTI4ICAgIC8vIChjciAtIDEyOCkKKyAgICBtdWx0ICAgICAgICAkYWMxLCBzMSwgdDMKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMiwgczMKKyAgICBzbGwgICAgICAgICBzMywgczMsIDE1CisgICAgc2xsICAgICAgICAgdDMsIHQzLCAxNQorICAgIGxidSAgICAgICAgIHYwLCAwKHQxKQorICAgIGV4dHJfci53ICAgIHM1LCAkYWMxLCAxNgorICAgIG11bHFfcnMudyAgIHM0LCB0OCwgczMgICAgICAvLyBzNCA9IChDMSAqIGNyICsgT05FX0hBTEYpPj4gU0NBTEVCSVRTCisgICAgbXVscV9ycy53ICAgczYsIHMwLCB0MyAgICAgIC8vIHM2ID0gKEMyICogY2IgKyBPTkVfSEFMRik+PiBTQ0FMRUJJVFMKKyAgICBhZGR1ICAgICAgICB0MywgdjAsIHM0ICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHYwLCBzNSAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHYwLCBzNiAgICAgIC8vIHkrY2JsdWUKKyAgICBhZGR1ICAgICAgICB0MywgdDksIHQzICAgICAgLy8geStjcmVkCisgICAgYWRkdSAgICAgICAgczMsIHQ5LCBzMyAgICAgIC8vIHkrY2dyZWVuCisgICAgYWRkdSAgICAgICAgdjEsIHQ5LCB2MSAgICAgIC8vIHkrY2JsdWUKKyAgICBsYnUgICAgICAgICB0MywgMCh0MykKKyAgICBsYnUgICAgICAgICBzMywgMChzMykKKyAgICBsYnUgICAgICAgICB2MSwgMCh2MSkKKyAgICBsYnUgICAgICAgICB2MCwgMCh0MikKKworICAgIFNUT1JFX0gyVjJfMV9QSVhFTCB0MywgczMsIHYxLCB0NAorCisgICAgYWRkdSAgICAgICAgdDMsIHYwLCBzNCAgICAgIC8vIHkrY3JlZAorICAgIGFkZHUgICAgICAgIHMzLCB2MCwgczUgICAgICAvLyB5K2NncmVlbgorICAgIGFkZHUgICAgICAgIHYxLCB2MCwgczYgICAgICAvLyB5K2NibHVlCisgICAgYWRkdSAgICAgICAgdDMsIHQ5LCB0MyAgICAgIC8vIHkrY3JlZAorICAgIGFkZHUgICAgICAgIHMzLCB0OSwgczMgICAgICAvLyB5K2NncmVlbgorICAgIGFkZHUgICAgICAgIHYxLCB0OSwgdjEgICAgICAvLyB5K2NibHVlCisgICAgbGJ1ICAgICAgICAgdDMsIDAodDMpCisgICAgbGJ1ICAgICAgICAgczMsIDAoczMpCisgICAgbGJ1ICAgICAgICAgdjEsIDAodjEpCisKKyAgICBTVE9SRV9IMlYyXzFfUElYRUwgdDMsIHMzLCB2MSwgdDcKKzQ6CisgICAgUkVTVE9SRV9SRUdTX0ZST01fU1RBQ0sgNDAsIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgcmEKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorCitFTkQoanNpbWRfaDJ2Ml9cY29sb3JpZFwoKV9tZXJnZWRfdXBzYW1wbGVfZHNwcjIpCisKKy5wdXJnZW0gU1RPUkVfSDJWMl8xX1BJWEVMCisucHVyZ2VtIFNUT1JFX0gyVjJfMl9QSVhFTFMKKy5lbmRtCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0taWQgLS0gcGl4IFIxIEcxIEIxIEExIFIyIEcyIEIyIEEyICovCitHRU5FUkFURV9IMlYyX01FUkdFRF9VUFNBTVBMRV9EU1BSMiBleHRyZ2IsICA2LCAwLCAxLCAyLCA2LCAzLCA0LCA1LCA2CitHRU5FUkFURV9IMlYyX01FUkdFRF9VUFNBTVBMRV9EU1BSMiBleHRiZ3IsICA2LCAyLCAxLCAwLCAzLCA1LCA0LCAzLCA2CitHRU5FUkFURV9IMlYyX01FUkdFRF9VUFNBTVBMRV9EU1BSMiBleHRyZ2J4LCA4LCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3CitHRU5FUkFURV9IMlYyX01FUkdFRF9VUFNBTVBMRV9EU1BSMiBleHRiZ3J4LCA4LCAyLCAxLCAwLCAzLCA2LCA1LCA0LCA3CitHRU5FUkFURV9IMlYyX01FUkdFRF9VUFNBTVBMRV9EU1BSMiBleHR4YmdyLCA4LCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0CitHRU5FUkFURV9IMlYyX01FUkdFRF9VUFNBTVBMRV9EU1BSMiBleHR4cmdiLCA4LCAxLCAyLCAzLCAwLCA1LCA2LCA3LCA0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyCisgKiBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAqIGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfZHNwcjIKKyAqIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9kc3ByMgorICoganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9kc3ByMgorICoganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9kc3ByMgorICoganNpbWRfaDJ2MV9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9kc3ByMgorICoKKyAqIE1lcmdlZCBoMnYxIHVwc2FtcGxlIHJvdXRpbmVzCisgKi8KKworLm1hY3JvIEdFTkVSQVRFX0gyVjFfTUVSR0VEX1VQU0FNUExFX0RTUFIyICBjb2xvcmlkLCBwaXhlbF9zaXplLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIxX29mZnMsIGcxX29mZnMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjFfb2ZmcywgYTFfb2ZmcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMl9vZmZzLCBnMl9vZmZzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyX29mZnMsIGEyX29mZnMKKworLm1hY3JvIFNUT1JFX0gyVjFfMl9QSVhFTFMgIHNjcmF0Y2gwIHNjcmF0Y2gxIHNjcmF0Y2gyIHNjcmF0Y2gzIHNjcmF0Y2g0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoNSBvdXRwdHIKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDAsIFxyMV9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gxLCBcZzFfb2Zmcyhcb3V0cHRyKQorICAgIHNiICAgICAgICAgIFxzY3JhdGNoMiwgXGIxX29mZnMoXG91dHB0cikKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDMsIFxyMl9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2g0LCBcZzJfb2Zmcyhcb3V0cHRyKQorICAgIHNiICAgICAgICAgIFxzY3JhdGNoNSwgXGIyX29mZnMoXG91dHB0cikKKy5pZiAoXHBpeGVsX3NpemUgPT0gOCkKKyAgICBsaSAgICAgICAgICB0MCwgMHhGRgorICAgIHNiICAgICAgICAgIHQwLCBcYTFfb2Zmcyhcb3V0cHRyKQorICAgIHNiICAgICAgICAgIHQwLCBcYTJfb2Zmcyhcb3V0cHRyKQorLmVuZGlmCisgICAgYWRkaXUgICAgICAgXG91dHB0ciwgXHBpeGVsX3NpemUKKy5lbmRtCisKKy5tYWNybyBTVE9SRV9IMlYxXzFfUElYRUwgIHNjcmF0Y2gwIHNjcmF0Y2gxIHNjcmF0Y2gyIG91dHB0cgorICAgIHNiICAgICAgICAgIFxzY3JhdGNoMCwgXHIxX29mZnMoXG91dHB0cikKKyAgICBzYiAgICAgICAgICBcc2NyYXRjaDEsIFxnMV9vZmZzKFxvdXRwdHIpCisgICAgc2IgICAgICAgICAgXHNjcmF0Y2gyLCBcYjFfb2Zmcyhcb3V0cHRyKQorLmlmIChccGl4ZWxfc2l6ZSA9PSA4KQorICAgIGxpICAgICAgICAgIHQwLCAweEZGCisgICAgc2IgICAgICAgICAgdDAsIFxhMV9vZmZzKFxvdXRwdHIpCisuZW5kaWYKKy5lbmRtCisKK0xFQUZfRFNQUjIoanNpbWRfaDJ2MV9cY29sb3JpZFwoKV9tZXJnZWRfdXBzYW1wbGVfZHNwcjIpCisvKgorICogYTAgICAgID0gY2luZm8tPm91dHB1dF93aWR0aAorICogYTEgICAgID0gaW5wdXRfYnVmCisgKiBhMiAgICAgPSBpbl9yb3dfZ3JvdXBfY3RyCisgKiBhMyAgICAgPSBvdXRwdXRfYnVmCisgKiAxNihzcCkgPSByYW5nZV9saW1pdAorICovCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDQwLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHJhCisKKyAgICBsaSAgICAgICAgICB0MCwgMHhlNmVhCisgICAgbHcgICAgICAgICAgdDEsIDAoYTEpICAgICAgICAgLy8gdDEgPSBpbnB1dF9idWZbMF0KKyAgICBsdyAgICAgICAgICB0MiwgNChhMSkgICAgICAgICAvLyB0MiA9IGlucHV0X2J1ZlsxXQorICAgIGx3ICAgICAgICAgIHQzLCA4KGExKSAgICAgICAgIC8vIHQzID0gaW5wdXRfYnVmWzJdCisgICAgbHcgICAgICAgICAgdDgsIDU2KHNwKSAgICAgICAgLy8gdDggPSByYW5nZV9saW1pdAorICAgIGFkZGl1ICAgICAgIHMxLCB0MCwgMHg3ZmZmICAgIC8vIHMxID0gMHgxNjZlOSBbRklYKDEuNDAyMDApXQorICAgIGFkZGl1ICAgICAgIHMyLCBzMSwgMHg1ZWI5ICAgIC8vIHMyID0gMHgxYzVhMiBbRklYKDEuNzcyMDApXQorICAgIGFkZGl1ICAgICAgIHMwLCB0MCwgMHg5OTE2ICAgIC8vIHMwID0gMHg4MDAwCisgICAgYWRkaXUgICAgICAgczQsIHplcm8sIDB4YTdlNiAgLy8gczQgPSAweGZmZmZhN2U2IFstRklYKDAuMzQ0MTQpXQorICAgIHhvcmkgICAgICAgIHMzLCBzNCwgMHhlZWM4ICAgIC8vIHMzID0gMHhmZmZmNDkyZSBbLUZJWCgwLjcxNDE0KV0KKyAgICBzcmwgICAgICAgICB0MCwgYTAsIDEKKyAgICBzbGwgICAgICAgICB0NCwgYTIsIDIKKyAgICBsd3ggICAgICAgICBzNSwgdDQodDEpICAgICAgLy8gczUgPSBpbnB0cjAKKyAgICBsd3ggICAgICAgICBzNiwgdDQodDIpICAgICAgLy8gczYgPSBpbnB0cjEKKyAgICBsd3ggICAgICAgICBzNywgdDQodDMpICAgICAgLy8gczcgPSBpbnB0cjIKKyAgICBsdyAgICAgICAgICB0NywgMChhMykgICAgICAgLy8gdDcgPSBvdXRwdHIKKyAgICBibGV6ICAgICAgICB0MCwgMmYKKyAgICAgYWRkdSAgICAgICB0OSwgczYsIHQwICAgICAgLy8gdDkgPSBlbmQgYWRkcmVzcworMToKKyAgICBsYnUgICAgICAgICB0MiwgMChzNikgICAgICAgLy8gdDIgPSBjYgorICAgIGxidSAgICAgICAgIHQwLCAwKHM3KSAgICAgICAvLyB0MCA9IGNyCisgICAgbGJ1ICAgICAgICAgdDEsIDAoczUpICAgICAgIC8vIHQxID0geQorICAgIGFkZGl1ICAgICAgIHQyLCB0MiwgLTEyOCAgICAvLyB0MiA9IGNiIC0gMTI4CisgICAgYWRkaXUgICAgICAgdDAsIHQwLCAtMTI4ICAgIC8vIHQwID0gY3IgLSAxMjgKKyAgICBtdWx0ICAgICAgICAkYWMxLCBzNCwgdDIKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDAKKyAgICBzbGwgICAgICAgICB0MCwgdDAsIDE1CisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxNQorICAgIG11bHFfcnMudyAgIHQwLCBzMSwgdDAgICAgICAvLyB0MCA9IChDMSpjciArIE9ORV9IQUxGKT4+IFNDQUxFQklUUworICAgIGV4dHJfci53ICAgIHQ1LCAkYWMxLCAxNgorICAgIG11bHFfcnMudyAgIHQ2LCBzMiwgdDIgICAgICAvLyB0NiA9IChDMipjYiArIE9ORV9IQUxGKT4+IFNDQUxFQklUUworICAgIGFkZGl1ICAgICAgIHM3LCBzNywgMQorICAgIGFkZGl1ICAgICAgIHM2LCBzNiwgMQorICAgIGFkZHUgICAgICAgIHQyLCB0MSwgdDAgICAgICAvLyB0MiA9IHkgKyBjcmVkCisgICAgYWRkdSAgICAgICAgdDMsIHQxLCB0NSAgICAgIC8vIHQzID0geSArIGNncmVlbgorICAgIGFkZHUgICAgICAgIHQ0LCB0MSwgdDYgICAgICAvLyB0NCA9IHkgKyBjYmx1ZQorICAgIGFkZHUgICAgICAgIHQyLCB0OCwgdDIKKyAgICBhZGR1ICAgICAgICB0MywgdDgsIHQzCisgICAgYWRkdSAgICAgICAgdDQsIHQ4LCB0NAorICAgIGxidSAgICAgICAgIHQxLCAxKHM1KQorICAgIGxidSAgICAgICAgIHYwLCAwKHQyKQorICAgIGxidSAgICAgICAgIHYxLCAwKHQzKQorICAgIGxidSAgICAgICAgIHJhLCAwKHQ0KQorICAgIGFkZHUgICAgICAgIHQyLCB0MSwgdDAKKyAgICBhZGR1ICAgICAgICB0MywgdDEsIHQ1CisgICAgYWRkdSAgICAgICAgdDQsIHQxLCB0NgorICAgIGFkZHUgICAgICAgIHQyLCB0OCwgdDIKKyAgICBhZGR1ICAgICAgICB0MywgdDgsIHQzCisgICAgYWRkdSAgICAgICAgdDQsIHQ4LCB0NAorICAgIGxidSAgICAgICAgIHQyLCAwKHQyKQorICAgIGxidSAgICAgICAgIHQzLCAwKHQzKQorICAgIGxidSAgICAgICAgIHQ0LCAwKHQ0KQorCisgICAgU1RPUkVfSDJWMV8yX1BJWEVMUyB2MCwgdjEsIHJhLCB0MiwgdDMsIHQ0LCB0NworCisgICAgYm5lICAgICAgICAgdDksIHM2LCAxYgorICAgICBhZGRpdSAgICAgIHM1LCBzNSwgMgorMjoKKyAgICBhbmRpICAgICAgICB0MCwgYTAsIDEKKyAgICBiZXF6ICAgICAgICB0MCwgNGYKKyAgICAgbm9wCiszOgorICAgIGxidSAgICAgICAgIHQyLCAwKHM2KQorICAgIGxidSAgICAgICAgIHQwLCAwKHM3KQorICAgIGxidSAgICAgICAgIHQxLCAwKHM1KQorICAgIGFkZGl1ICAgICAgIHQyLCB0MiwgLTEyOCAgICAvLyAoY2IgLSAxMjgpCisgICAgYWRkaXUgICAgICAgdDAsIHQwLCAtMTI4ICAgIC8vIChjciAtIDEyOCkKKyAgICBtdWwgICAgICAgICB0MywgczQsIHQyCisgICAgbXVsICAgICAgICAgdDQsIHMzLCB0MAorICAgIHNsbCAgICAgICAgIHQwLCB0MCwgMTUKKyAgICBzbGwgICAgICAgICB0MiwgdDIsIDE1CisgICAgbXVscV9ycy53ICAgdDAsIHMxLCB0MCAgICAgIC8vIChDMSpjciArIE9ORV9IQUxGKT4+IFNDQUxFQklUUworICAgIG11bHFfcnMudyAgIHQ2LCBzMiwgdDIgICAgICAvLyAoQzIqY2IgKyBPTkVfSEFMRik+PiBTQ0FMRUJJVFMKKyAgICBhZGR1ICAgICAgICB0MywgdDMsIHMwCisgICAgYWRkdSAgICAgICAgdDMsIHQ0LCB0MworICAgIHNyYSAgICAgICAgIHQ1LCB0MywgMTYgICAgICAvLyAoQzQqY2IgKyBPTkVfSEFMRiArIEMzKmNyKT4+IFNDQUxFQklUUworICAgIGFkZHUgICAgICAgIHQyLCB0MSwgdDAgICAgICAvLyB5ICsgY3JlZAorICAgIGFkZHUgICAgICAgIHQzLCB0MSwgdDUgICAgICAvLyB5ICsgY2dyZWVuCisgICAgYWRkdSAgICAgICAgdDQsIHQxLCB0NiAgICAgIC8vIHkgKyBjYmx1ZQorICAgIGFkZHUgICAgICAgIHQyLCB0OCwgdDIKKyAgICBhZGR1ICAgICAgICB0MywgdDgsIHQzCisgICAgYWRkdSAgICAgICAgdDQsIHQ4LCB0NAorICAgIGxidSAgICAgICAgIHQyLCAwKHQyKQorICAgIGxidSAgICAgICAgIHQzLCAwKHQzKQorICAgIGxidSAgICAgICAgIHQ0LCAwKHQ0KQorCisgICAgU1RPUkVfSDJWMV8xX1BJWEVMIHQyLCB0MywgdDQsIHQ3Cis0OgorICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDQwLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHJhCisKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKKworRU5EKGpzaW1kX2gydjFfXGNvbG9yaWRcKClfbWVyZ2VkX3Vwc2FtcGxlX2RzcHIyKQorCisucHVyZ2VtIFNUT1JFX0gyVjFfMV9QSVhFTAorLnB1cmdlbSBTVE9SRV9IMlYxXzJfUElYRUxTCisuZW5kbQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWlkIC0tIHBpeCBSMSBHMSBCMSBBMSBSMiBHMiBCMiBBMiAqLworR0VORVJBVEVfSDJWMV9NRVJHRURfVVBTQU1QTEVfRFNQUjIgZXh0cmdiLCAgNiwgMCwgMSwgMiwgNiwgMywgNCwgNSwgNgorR0VORVJBVEVfSDJWMV9NRVJHRURfVVBTQU1QTEVfRFNQUjIgZXh0YmdyLCAgNiwgMiwgMSwgMCwgMywgNSwgNCwgMywgNgorR0VORVJBVEVfSDJWMV9NRVJHRURfVVBTQU1QTEVfRFNQUjIgZXh0cmdieCwgOCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNworR0VORVJBVEVfSDJWMV9NRVJHRURfVVBTQU1QTEVfRFNQUjIgZXh0YmdyeCwgOCwgMiwgMSwgMCwgMywgNiwgNSwgNCwgNworR0VORVJBVEVfSDJWMV9NRVJHRURfVVBTQU1QTEVfRFNQUjIgZXh0eGJnciwgOCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNAorR0VORVJBVEVfSDJWMV9NRVJHRURfVVBTQU1QTEVfRFNQUjIgZXh0eHJnYiwgOCwgMSwgMiwgMywgMCwgNSwgNiwgNywgNAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX2RzcHIyCisgKgorICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCisgKi8KK0xFQUZfRFNQUjIoanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9kc3ByMikKKy8qCisgKiBhMCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcgorICogYTEgPSBkb3duc2FtcGxlZF93aWR0aAorICogYTIgPSBpbnB1dF9kYXRhCisgKiBhMyA9IG91dHB1dF9kYXRhX3B0cgorICovCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDI0LCBzMCwgczEsIHMyLCBzMywgczQsIHM1CisKKyAgICBsaSAgICAgICAgICAgIHM0LCAwCisgICAgbHcgICAgICAgICAgICBzMiwgMChhMykgICAgICAgLy8gczIgPSAqb3V0cHV0X2RhdGFfcHRyCiswOgorICAgIGxpICAgICAgICAgICAgdDksIDIKKyAgICBsdyAgICAgICAgICAgIHMxLCAtNChhMikgICAgICAvLyBzMSA9IGlucHRyMQorCisxOgorICAgIGx3ICAgICAgICAgICAgczAsIDAoYTIpICAgICAgIC8vIHMwID0gaW5wdHIwCisgICAgbHd4ICAgICAgICAgICBzMywgczQoczIpCisgICAgYWRkaXUgICAgICAgICBzNSwgYTEsIC0yICAgICAgLy8gczUgPSBkb3duc2FtcGxlZF93aWR0aCAtIDIKKyAgICBzcmwgICAgICAgICAgIHQ0LCBzNSwgMQorICAgIHNsbCAgICAgICAgICAgdDQsIHQ0LCAxCisgICAgbGJ1ICAgICAgICAgICB0MCwgMChzMCkKKyAgICBsYnUgICAgICAgICAgIHQxLCAxKHMwKQorICAgIGxidSAgICAgICAgICAgdDIsIDAoczEpCisgICAgbGJ1ICAgICAgICAgICB0MywgMShzMSkKKyAgICBhZGRpdSAgICAgICAgIHMwLCAyCisgICAgYWRkaXUgICAgICAgICBzMSwgMgorICAgIGFkZHUgICAgICAgICAgdDgsIHMwLCB0NCAgICAgIC8vIHQ4ID0gZW5kIGFkZHJlc3MKKyAgICBhbmRpICAgICAgICAgIHM1LCBzNSwgMSAgICAgICAvLyBzNSA9IHJlc2lkdWFsCisgICAgc2xsICAgICAgICAgICB0NCwgdDAsIDEKKyAgICBzbGwgICAgICAgICAgIHQ2LCB0MSwgMQorICAgIGFkZHUgICAgICAgICAgdDAsIHQwLCB0NCAgICAgIC8vIHQwID0gKCppbnB0cjArKykgKiAzCisgICAgYWRkdSAgICAgICAgICB0MSwgdDEsIHQ2ICAgICAgLy8gdDEgPSAoKmlucHRyMCsrKSAqIDMKKyAgICBhZGR1ICAgICAgICAgIHQ3LCB0MCwgdDIgICAgICAvLyB0NyA9IHRoaXNjb2xzdW0KKyAgICBhZGR1ICAgICAgICAgIHQ2LCB0MSwgdDMgICAgICAvLyB0NSA9IG5leHRjb2xzdW0KKyAgICBzbGwgICAgICAgICAgIHQwLCB0NywgMiAgICAgICAvLyB0MCA9IHRoaXNjb2xzdW0gKiA0CisgICAgc3VidSAgICAgICAgICB0MSwgdDAsIHQ3ICAgICAgLy8gdDEgPSB0aGlzY29sc3VtICogMworICAgIHNocmFfci53ICAgICAgdDAsIHQwLCA0CisgICAgYWRkaXUgICAgICAgICB0MSwgNworICAgIGFkZHUgICAgICAgICAgdDEsIHQxLCB0NgorICAgIHNybCAgICAgICAgICAgdDEsIHQxLCA0CisgICAgc2IgICAgICAgICAgICB0MCwgMChzMykKKyAgICBzYiAgICAgICAgICAgIHQxLCAxKHMzKQorICAgIGJlcSAgICAgICAgICAgdDgsIHMwLCAyMmYgICAgIC8vIHNraXAgdG8gZmluYWwgaXRlcmF0aW9uIGlmIHdpZHRoID09IDMKKyAgICAgYWRkaXUgICAgICAgIHMzLCAyCisyOgorICAgIGxoICAgICAgICAgICAgdDAsIDAoczApICAgICAgIC8vIHQwID0gQTN8QTIKKyAgICBsaCAgICAgICAgICAgIHQyLCAwKHMxKSAgICAgICAvLyB0MiA9IEIzfEIyCisgICAgYWRkaXUgICAgICAgICBzMCwgMgorICAgIGFkZGl1ICAgICAgICAgczEsIDIKKyAgICBwcmVjZXUucGgucWJyIHQwLCB0MCAgICAgICAgICAvLyB0MCA9IDB8QTN8MHxBMgorICAgIHByZWNldS5waC5xYnIgdDIsIHQyICAgICAgICAgIC8vIHQyID0gMHxCM3wwfEIyCisgICAgc2hsbC5waCAgICAgICB0MSwgdDAsIDEKKyAgICBzbGwgICAgICAgICAgIHQzLCB0NiwgMQorICAgIGFkZHUucGggICAgICAgdDAsIHQxLCB0MCAgICAgIC8vIHQwID0gQTMqM3xBMiozCisgICAgYWRkdSAgICAgICAgICB0MywgdDMsIHQ2ICAgICAgLy8gdDMgPSB0aGlzICogMworICAgIGFkZHUucGggICAgICAgdDAsIHQwLCB0MiAgICAgIC8vIHQwID0gbmV4dDJ8bmV4dDEKKyAgICBhZGR1ICAgICAgICAgIHQxLCB0MywgdDcKKyAgICBhbmRpICAgICAgICAgIHQ3LCB0MCwgMHhGRkZGICAvLyB0NyA9IG5leHQxCisgICAgc2xsICAgICAgICAgICB0MiwgdDcsIDEKKyAgICBhZGR1ICAgICAgICAgIHQyLCB0NywgdDIgICAgICAvLyB0MiA9IG5leHQxKjMKKyAgICBhZGR1ICAgICAgICAgIHQ0LCB0MiwgdDYKKyAgICBzcmwgICAgICAgICAgIHQ2LCB0MCwgMTYgICAgICAvLyB0NiA9IG5leHQyCisgICAgc2hyYV9yLncgICAgICB0MSwgdDEsIDQgICAgICAgLy8gdDEgPSAodGhpcyozICsgbGFzdCArIDgpID4+IDQKKyAgICBhZGR1ICAgICAgICAgIHQwLCB0MywgdDcKKyAgICBhZGRpdSAgICAgICAgIHQwLCA3CisgICAgc3JsICAgICAgICAgICB0MCwgdDAsIDQgICAgICAgLy8gdDAgPSAodGhpcyozICsgbmV4dDEgKyA3KSA+PiA0CisgICAgc2hyYV9yLncgICAgICB0NCwgdDQsIDQgICAgICAgLy8gdDMgPSAobmV4dDEqMyArIHRoaXMgKyA4KSA+PiA0CisgICAgYWRkdSAgICAgICAgICB0MiwgdDIsIHQ2CisgICAgYWRkaXUgICAgICAgICB0MiwgNworICAgIHNybCAgICAgICAgICAgdDIsIHQyLCA0ICAgICAgIC8vIHQyID0gKG5leHQxKjMgKyBuZXh0MiArIDcpID4+IDQKKyAgICBzYiAgICAgICAgICAgIHQxLCAwKHMzKQorICAgIHNiICAgICAgICAgICAgdDAsIDEoczMpCisgICAgc2IgICAgICAgICAgICB0NCwgMihzMykKKyAgICBzYiAgICAgICAgICAgIHQyLCAzKHMzKQorICAgIGJuZSAgICAgICAgICAgdDgsIHMwLCAyYgorICAgICBhZGRpdSAgICAgICAgczMsIDQKKzIyOgorICAgIGJlcXogICAgICAgICAgczUsIDRmCisgICAgIGFkZHUgICAgICAgICB0OCwgczAsIHM1CiszOgorICAgIGxidSAgICAgICAgICAgdDAsIDAoczApCisgICAgbGJ1ICAgICAgICAgICB0MiwgMChzMSkKKyAgICBhZGRpdSAgICAgICAgIHMwLCAxCisgICAgYWRkaXUgICAgICAgICBzMSwgMQorICAgIHNsbCAgICAgICAgICAgdDMsIHQ2LCAxCisgICAgc2xsICAgICAgICAgICB0MSwgdDAsIDEKKyAgICBhZGR1ICAgICAgICAgIHQxLCB0MCwgdDEgICAgICAvLyB0MSA9IGlucHRyMCAqIDMKKyAgICBhZGR1ICAgICAgICAgIHQzLCB0MywgdDYgICAgICAvLyB0MyA9IHRoaXNjb2xzdW0gKiAzCisgICAgYWRkdSAgICAgICAgICB0NSwgdDEsIHQyCisgICAgYWRkdSAgICAgICAgICB0MSwgdDMsIHQ3CisgICAgc2hyYV9yLncgICAgICB0MSwgdDEsIDQKKyAgICBhZGR1ICAgICAgICAgIHQwLCB0MywgdDUKKyAgICBhZGRpdSAgICAgICAgIHQwLCA3CisgICAgc3JsICAgICAgICAgICB0MCwgdDAsIDQKKyAgICBzYiAgICAgICAgICAgIHQxLCAwKHMzKQorICAgIHNiICAgICAgICAgICAgdDAsIDEoczMpCisgICAgYWRkaXUgICAgICAgICBzMywgMgorICAgIG1vdmUgICAgICAgICAgdDcsIHQ2CisgICAgYm5lICAgICAgICAgICB0OCwgczAsIDNiCisgICAgIG1vdmUgICAgICAgICB0NiwgdDUKKzQ6CisgICAgc2xsICAgICAgICAgICB0MCwgdDYsIDIgICAgICAgLy8gdDAgPSB0aGlzY29sc3VtICogNAorICAgIHN1YnUgICAgICAgICAgdDEsIHQwLCB0NiAgICAgIC8vIHQxID0gdGhpc2NvbHN1bSAqIDMKKyAgICBhZGR1ICAgICAgICAgIHQxLCB0MSwgdDcKKyAgICBhZGRpdSAgICAgICAgIHM0LCA0CisgICAgc2hyYV9yLncgICAgICB0MSwgdDEsIDQKKyAgICBhZGRpdSAgICAgICAgIHQwLCA3CisgICAgc3JsICAgICAgICAgICB0MCwgdDAsIDQKKyAgICBzYiAgICAgICAgICAgIHQxLCAwKHMzKQorICAgIHNiICAgICAgICAgICAgdDAsIDEoczMpCisgICAgYWRkaXUgICAgICAgICB0OSwgLTEKKyAgICBhZGRpdSAgICAgICAgIHMzLCAyCisgICAgYm5leiAgICAgICAgICB0OSwgMWIKKyAgICAgbHcgICAgICAgICAgIHMxLCA0KGEyKQorICAgIHNybCAgICAgICAgICAgdDAsIHM0LCAyCisgICAgc3VidSAgICAgICAgICB0MCwgYTAsIHQwCisgICAgYmd0eiAgICAgICAgICB0MCwgMGIKKyAgICAgYWRkaXUgICAgICAgIGEyLCA0CisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAyNCwgczAsIHMxLCBzMiwgczMsIHM0LCBzNQorCisgICAgaiAgICAgICAgICAgICByYQorICAgICBub3AKK0VORChqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX2RzcHIyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0xFQUZfRFNQUjIoanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9kc3ByMikKKy8qCisgKiBhMCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcgorICogYTEgPSBkb3duc2FtcGxlZF93aWR0aAorICogYTIgPSBpbnB1dF9kYXRhCisgKiBhMyA9IG91dHB1dF9kYXRhX3B0cgorICovCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDE2LCBzMCwgczEsIHMyLCBzMworCisgICAgLnNldCBhdAorCisgICAgYmVxeiAgICAgICAgICBhMCwgM2YKKyAgICAgc2xsICAgICAgICAgIHQwLCBhMCwgMgorICAgIGx3ICAgICAgICAgICAgczEsIDAoYTMpCisgICAgbGkgICAgICAgICAgICBzMywgMHgxMDAwMQorICAgIGFkZHUgICAgICAgICAgczAsIHMxLCB0MAorMDoKKyAgICBhZGRpdSAgICAgICAgIHQ4LCBhMSwgLTIKKyAgICBzcmwgICAgICAgICAgIHQ5LCB0OCwgMgorICAgIGx3ICAgICAgICAgICAgdDcsIDAoYTIpCisgICAgbHcgICAgICAgICAgICBzMiwgMChzMSkKKyAgICBsYnUgICAgICAgICAgIHQwLCAwKHQ3KQorICAgIGxidSAgICAgICAgICAgdDEsIDEodDcpICAgICAgIC8vIHQxID0gaW5wdHJbMV0KKyAgICBzbGwgICAgICAgICAgIHQyLCB0MCwgMQorICAgIGFkZHUgICAgICAgICAgdDIsIHQyLCB0MCAgICAgIC8vIHQyID0gaW52YWx1ZSozCisgICAgYWRkdSAgICAgICAgICB0MiwgdDIsIHQxCisgICAgc2hyYV9yLncgICAgICB0MiwgdDIsIDIKKyAgICBzYiAgICAgICAgICAgIHQwLCAwKHMyKQorICAgIHNiICAgICAgICAgICAgdDIsIDEoczIpCisgICAgYmVxeiAgICAgICAgICB0OSwgMTFmCisgICAgIGFkZGl1ICAgICAgICBzMiwgMgorMToKKyAgICB1bHcgICAgICAgICAgIHQwLCAwKHQ3KSAgICAgICAvLyB0MCA9IHxQM3xQMnxQMXxQMHwKKyAgICB1bHcgICAgICAgICAgIHQxLCAxKHQ3KQorICAgIHVsaCAgICAgICAgICAgdDIsIDQodDcpICAgICAgIC8vIHQyID0gfDB8MHxQNXxQNHwKKyAgICBwcmVjZXUucGgucWJsIHQzLCB0MCAgICAgICAgICAvLyB0MyA9IHwwfFAzfDB8UDJ8CisgICAgcHJlY2V1LnBoLnFiciB0MCwgdDAgICAgICAgICAgLy8gdDAgPSB8MHxQMXwwfFAwfAorICAgIHByZWNldS5waC5xYnIgdDIsIHQyICAgICAgICAgIC8vIHQyID0gfDB8UDV8MHxQNHwKKyAgICBwcmVjZXUucGgucWJsIHQ0LCB0MSAgICAgICAgICAvLyB0NCA9IHwwfFA0fDB8UDN8CisgICAgcHJlY2V1LnBoLnFiciB0MSwgdDEgICAgICAgICAgLy8gdDEgPSB8MHxQMnwwfFAxfAorICAgIHNobGwucGggICAgICAgdDUsIHQ0LCAxCisgICAgc2hsbC5waCAgICAgICB0NiwgdDEsIDEKKyAgICBhZGR1LnBoICAgICAgIHQ1LCB0NSwgdDQgICAgICAvLyB0NSA9IHxQNCozfFAzKjN8CisgICAgYWRkdS5waCAgICAgICB0NiwgdDYsIHQxICAgICAgLy8gdDYgPSB8UDIqM3xQMSozfAorICAgIGFkZHUucGggICAgICAgdDQsIHQzLCBzMworICAgIGFkZHUucGggICAgICAgdDAsIHQwLCBzMworICAgIGFkZHUucGggICAgICAgdDQsIHQ0LCB0NQorICAgIGFkZHUucGggICAgICAgdDAsIHQwLCB0NgorICAgIHNocmwucGggICAgICAgdDQsIHQ0LCAyICAgICAgIC8vIHQ0ID0gfDB8UDN8MHxQMnwKKyAgICBzaHJsLnBoICAgICAgIHQwLCB0MCwgMiAgICAgICAvLyB0MCA9IHwwfFAxfDB8UDB8CisgICAgYWRkdS5waCAgICAgICB0MiwgdDIsIHQ1CisgICAgYWRkdS5waCAgICAgICB0MywgdDMsIHQ2CisgICAgc2hyYV9yLnBoICAgICB0MiwgdDIsIDIgICAgICAgLy8gdDIgPSB8MHxQNXwwfFA0fAorICAgIHNocmFfci5waCAgICAgdDMsIHQzLCAyICAgICAgIC8vIHQzID0gfDB8UDN8MHxQMnwKKyAgICBzaGxsLnBoICAgICAgIHQyLCB0MiwgOAorICAgIHNobGwucGggICAgICAgdDMsIHQzLCA4CisgICAgb3IgICAgICAgICAgICB0MiwgdDQsIHQyCisgICAgb3IgICAgICAgICAgICB0MywgdDMsIHQwCisgICAgYWRkaXUgICAgICAgICB0OSwgLTEKKyAgICB1c3cgICAgICAgICAgIHQzLCAwKHMyKQorICAgIHVzdyAgICAgICAgICAgdDIsIDQoczIpCisgICAgYWRkaXUgICAgICAgICBzMiwgOAorICAgIGJndHogICAgICAgICAgdDksIDFiCisgICAgIGFkZGl1ICAgICAgICB0NywgNAorMTE6CisgICAgYW5kaSAgICAgICAgICB0OCwgMworICAgIGJlcXogICAgICAgICAgdDgsIDIyZgorICAgICBhZGRpdSAgICAgICAgdDcsIDEKKworMjoKKyAgICBsYnUgICAgICAgICAgIHQwLCAwKHQ3KQorICAgIGFkZGl1ICAgICAgICAgdDcsIDEKKyAgICBzbGwgICAgICAgICAgIHQxLCB0MCwgMQorICAgIGFkZHUgICAgICAgICAgdDIsIHQwLCB0MSAgICAgIC8vIHQyID0gaW52YWx1ZQorICAgIGxidSAgICAgICAgICAgdDMsIC0yKHQ3KQorICAgIGxidSAgICAgICAgICAgdDQsIDAodDcpCisgICAgYWRkaXUgICAgICAgICB0MywgMQorICAgIGFkZGl1ICAgICAgICAgdDQsIDIKKyAgICBhZGR1ICAgICAgICAgIHQzLCB0MywgdDIKKyAgICBhZGR1ICAgICAgICAgIHQ0LCB0NCwgdDIKKyAgICBzcmwgICAgICAgICAgIHQzLCAyCisgICAgc3JsICAgICAgICAgICB0NCwgMgorICAgIHNiICAgICAgICAgICAgdDMsIDAoczIpCisgICAgc2IgICAgICAgICAgICB0NCwgMShzMikKKyAgICBhZGRpdSAgICAgICAgIHQ4LCAtMQorICAgIGJndHogICAgICAgICAgdDgsIDJiCisgICAgIGFkZGl1ICAgICAgICBzMiwgMgorCisyMjoKKyAgICBsYnUgICAgICAgICAgIHQwLCAwKHQ3KQorICAgIGxidSAgICAgICAgICAgdDIsIC0xKHQ3KQorICAgIHNsbCAgICAgICAgICAgdDEsIHQwLCAxCisgICAgYWRkdSAgICAgICAgICB0MSwgdDEsIHQwICAgICAgLy8gdDEgPSBpbnZhbHVlICogMworICAgIGFkZHUgICAgICAgICAgdDEsIHQxLCB0MgorICAgIGFkZGl1ICAgICAgICAgdDEsIDEKKyAgICBzcmwgICAgICAgICAgIHQxLCB0MSwgMgorICAgIHNiICAgICAgICAgICAgdDEsIDAoczIpCisgICAgc2IgICAgICAgICAgICB0MCwgMShzMikKKyAgICBhZGRpdSAgICAgICAgIHMxLCA0CisgICAgYm5lICAgICAgICAgICBzMSwgczAsIDBiCisgICAgIGFkZGl1ICAgICAgICBhMiwgNAorMzoKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAxNiwgczAsIHMxLCBzMiwgczMKKworICAgIGogICAgICAgICAgICAgcmEKKyAgICAgbm9wCitFTkQoanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX2gydjFfZG93bnNhbXBsZV9kc3ByMikKKy8qCisgKiBhMCAgICAgPSBjaW5mby0+aW1hZ2Vfd2lkdGgKKyAqIGExICAgICA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcgorICogYTIgICAgID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcgorICogYTMgICAgID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzCisgKiAxNihzcCkgPSBpbnB1dF9kYXRhCisgKiAyMChzcCkgPSBvdXRwdXRfZGF0YQorICovCisgICAgLnNldCBhdAorCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDI0LCBzMCwgczEsIHMyLCBzMywgczQKKworICAgIGJlcXogICAgICAgIGEyLCA3ZgorICAgICBsdyAgICAgICAgIHMxLCA0NChzcCkgICAgICAvLyBzMSA9IG91dHB1dF9kYXRhCisgICAgbHcgICAgICAgICAgczAsIDQwKHNwKSAgICAgIC8vIHMwID0gaW5wdXRfZGF0YQorICAgIHNybCAgICAgICAgIHMyLCBhMCwgMgorICAgIGFuZGkgICAgICAgIHQ5LCBhMCwgMgorICAgIHNybCAgICAgICAgIHQ3LCB0OSwgMQorICAgIGFkZHUgICAgICAgIHMyLCB0NywgczIKKyAgICBzbGwgICAgICAgICB0MCwgYTMsIDMgICAgICAgLy8gdDAgPSB3aWR0aF9pbl9ibG9ja3MqRENUCisgICAgc3JsICAgICAgICAgdDcsIHQwLCAxCisgICAgc3VidSAgICAgICAgczIsIHQ3LCBzMgorMDoKKyAgICBhbmRpICAgICAgICB0NiwgYTAsIDEgICAgICAgLy8gdDYgPSB0ZW1wX2luZGV4CisgICAgYWRkaXUgICAgICAgdDYsIC0xCisgICAgbHcgICAgICAgICAgdDQsIDAoczEpICAgICAgIC8vIHQ0ID0gb3V0cHRyCisgICAgbHcgICAgICAgICAgdDUsIDAoczApICAgICAgIC8vIHQ1ID0gaW5wdHIwCisgICAgbGkgICAgICAgICAgczMsIDAgICAgICAgICAgIC8vIHMzID0gYmlhcworICAgIHNybCAgICAgICAgIHQ3LCBhMCwgMSAgICAgICAvLyB0NyA9IGltYWdlX3dpZHRoMQorICAgIHNybCAgICAgICAgIHM0LCB0NywgMgorICAgIGFuZGkgICAgICAgIHQ4LCB0NywgMworMToKKyAgICB1bGh1ICAgICAgICB0MCwgMCh0NSkKKyAgICB1bGh1ICAgICAgICB0MSwgMih0NSkKKyAgICB1bGh1ICAgICAgICB0MiwgNCh0NSkKKyAgICB1bGh1ICAgICAgICB0MywgNih0NSkKKyAgICByYWRkdS53LnFiICB0MCwgdDAKKyAgICByYWRkdS53LnFiICB0MSwgdDEKKyAgICByYWRkdS53LnFiICB0MiwgdDIKKyAgICByYWRkdS53LnFiICB0MywgdDMKKyAgICBzaHJhLnBoICAgICB0MCwgdDAsIDEKKyAgICBzaHJhX3IucGggICB0MSwgdDEsIDEKKyAgICBzaHJhLnBoICAgICB0MiwgdDIsIDEKKyAgICBzaHJhX3IucGggICB0MywgdDMsIDEKKyAgICBzYiAgICAgICAgICB0MCwgMCh0NCkKKyAgICBzYiAgICAgICAgICB0MSwgMSh0NCkKKyAgICBzYiAgICAgICAgICB0MiwgMih0NCkKKyAgICBzYiAgICAgICAgICB0MywgMyh0NCkKKyAgICBhZGRpdSAgICAgICBzNCwgLTEKKyAgICBhZGRpdSAgICAgICB0NCwgNAorICAgIGJndHogICAgICAgIHM0LCAxYgorICAgICBhZGRpdSAgICAgIHQ1LCA4CisgICAgYmVxeiAgICAgICAgdDgsIDNmCisgICAgIGFkZHUgICAgICAgczQsIHQ0LCB0OAorMjoKKyAgICB1bGh1ICAgICAgICB0MCwgMCh0NSkKKyAgICByYWRkdS53LnFiICB0MCwgdDAKKyAgICBhZGRxaC53ICAgICB0MCwgdDAsIHMzCisgICAgeG9yaSAgICAgICAgczMsIHMzLCAxCisgICAgc2IgICAgICAgICAgdDAsIDAodDQpCisgICAgYWRkaXUgICAgICAgdDQsIDEKKyAgICBibmUgICAgICAgICB0NCwgczQsIDJiCisgICAgIGFkZGl1ICAgICAgdDUsIDIKKzM6CisgICAgbGJ1eCAgICAgICAgdDEsIHQ2KHQ1KQorICAgIHNsbCAgICAgICAgIHQxLCAxCisgICAgYWRkcWgudyAgICAgdDIsIHQxLCBzMyAgICAgIC8vIHQyID0gcGl4dmFsMQorICAgIHhvcmkgICAgICAgIHMzLCBzMywgMQorICAgIGFkZHFoLncgICAgIHQzLCB0MSwgczMgICAgICAvLyB0MyA9IHBpeHZhbDIKKyAgICBibGV6ICAgICAgICBzMiwgNWYKKyAgICAgYXBwZW5kICAgICB0MywgdDIsICA4CisgICAgYWRkdSAgICAgICAgdDUsIHQ0LCBzMiAgICAgIC8vIHQ1ID0gbG9vcF9lbmQyCis0OgorICAgIHVzaCAgICAgICAgIHQzLCAwKHQ0KQorICAgIGFkZGl1ICAgICAgIHMyLCAtMQorICAgIGJndHogICAgICAgIHMyLCA0YgorICAgICBhZGRpdSAgICAgIHQ0LCAgMgorNToKKyAgICBiZXF6ICAgICAgICB0OSwgNmYKKyAgICAgbm9wCisgICAgc2IgICAgICAgICAgdDIsIDAodDQpCis2OgorICAgIGFkZGl1ICAgICAgIHMxLCA0CisgICAgYWRkaXUgICAgICAgYTIsIC0xCisgICAgYm5leiAgICAgICAgYTIsIDBiCisgICAgIGFkZGl1ICAgICAgczAsIDQKKzc6CisgICAgUkVTVE9SRV9SRUdTX0ZST01fU1RBQ0sgMjQsIHMwLCBzMSwgczIsIHMzLCBzNAorCisgICAgaiAgICAgICAgICAgcmEKKyAgICBub3AKK0VORChqc2ltZF9oMnYxX2Rvd25zYW1wbGVfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfZHNwcjIpCisvKgorICogYTAgICAgID0gY2luZm8tPmltYWdlX3dpZHRoCisgKiBhMSAgICAgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IKKyAqIGEyICAgICA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IKKyAqIGEzICAgICA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcworICogMTYoc3ApID0gaW5wdXRfZGF0YQorICogMjAoc3ApID0gb3V0cHV0X2RhdGEKKyAqLworICAgIC5zZXQgYXQKKworICAgIFNBVkVfUkVHU19PTl9TVEFDSyAzMiwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3CisKKyAgICBiZXF6ICAgICAgICBhMiwgOGYKKyAgICAgbHcgICAgICAgICBzMSwgNTIoc3ApICAgICAgLy8gczEgPSBvdXRwdXRfZGF0YQorICAgIGx3ICAgICAgICAgIHMwLCA0OChzcCkgICAgICAvLyBzMCA9IGlucHV0X2RhdGEKKworICAgIGFuZGkgICAgICAgIHQ2LCBhMCwgMSAgICAgICAvLyB0NiA9IHRlbXBfaW5kZXgKKyAgICBhZGRpdSAgICAgICB0NiwgLTEKKyAgICBzcmwgICAgICAgICB0NywgYTAsIDEgICAgICAgLy8gdDcgPSBpbWFnZV93aWR0aDEKKyAgICBzcmwgICAgICAgICBzNCwgdDcsIDIKKyAgICBhbmRpICAgICAgICB0OCwgdDcsIDMKKyAgICBhbmRpICAgICAgICB0OSwgYTAsIDIKKyAgICBzcmwgICAgICAgICBzMiwgYTAsIDIKKyAgICBzcmwgICAgICAgICB0NywgdDksIDEKKyAgICBhZGR1ICAgICAgICBzMiwgdDcsIHMyCisgICAgc2xsICAgICAgICAgdDAsIGEzLCAzICAgICAgIC8vIHMyID0gd2lkdGhfaW5fYmxvY2tzKkRDVAorICAgIHNybCAgICAgICAgIHQ3LCB0MCwgMQorICAgIHN1YnUgICAgICAgIHMyLCB0NywgczIKKzA6CisgICAgbHcgICAgICAgICAgdDQsIDAoczEpICAgICAgIC8vIHQ0ID0gb3V0cHRyCisgICAgbHcgICAgICAgICAgdDUsIDAoczApICAgICAgIC8vIHQ1ID0gaW5wdHIwCisgICAgbHcgICAgICAgICAgczcsIDQoczApICAgICAgIC8vIHM3ID0gaW5wdHIxCisgICAgbGkgICAgICAgICAgczYsIDEgICAgICAgICAgIC8vIHM2ID0gYmlhcworMjoKKyAgICB1bHcgICAgICAgICB0MCwgMCh0NSkgICAgICAgLy8gdDAgPSB8UDN8UDJ8UDF8UDB8CisgICAgdWx3ICAgICAgICAgdDEsIDAoczcpICAgICAgIC8vIHQxID0gfFEzfFEyfFExfFEwfAorICAgIHVsdyAgICAgICAgIHQyLCA0KHQ1KQorICAgIHVsdyAgICAgICAgIHQzLCA0KHM3KQorICAgIHByZWNycS5waC53IHQ3LCB0MCwgdDEgICAgICAvLyB0MiA9IHxQM3xQMnxRM3xRMnwKKyAgICBpbnMgICAgICAgICB0MCwgdDEsIDE2LCAxNiAgLy8gdDAgPSB8UTF8UTB8UDF8UDB8CisgICAgcmFkZHUudy5xYiAgdDEsIHQ3CisgICAgcmFkZHUudy5xYiAgdDAsIHQwCisgICAgc2hyYV9yLncgICAgdDEsIHQxLCAyCisgICAgYWRkaXUgICAgICAgdDAsIDEKKyAgICBzcmwgICAgICAgICB0MCwgMgorICAgIHByZWNycS5waC53IHQ3LCB0MiwgdDMKKyAgICBpbnMgICAgICAgICB0MiwgdDMsIDE2LCAxNgorICAgIHJhZGR1LncucWIgIHQ3LCB0NworICAgIHJhZGR1LncucWIgIHQyLCB0MgorICAgIHNocmFfci53ICAgIHQ3LCB0NywgMgorICAgIGFkZGl1ICAgICAgIHQyLCAxCisgICAgc3JsICAgICAgICAgdDIsIDIKKyAgICBzYiAgICAgICAgICB0MCwgMCh0NCkKKyAgICBzYiAgICAgICAgICB0MSwgMSh0NCkKKyAgICBzYiAgICAgICAgICB0MiwgMih0NCkKKyAgICBzYiAgICAgICAgICB0NywgMyh0NCkKKyAgICBhZGRpdSAgICAgICB0NCwgNAorICAgIGFkZGl1ICAgICAgIHQ1LCA4CisgICAgYWRkaXUgICAgICAgczQsIHM0LCAtMQorICAgIGJndHogICAgICAgIHM0LCAyYgorICAgICBhZGRpdSAgICAgIHM3LCA4CisgICAgYmVxeiAgICAgICAgdDgsIDRmCisgICAgIGFkZHUgICAgICAgdDgsIHQ0LCB0OAorMzoKKyAgICB1bGh1ICAgICAgICB0MCwgMCh0NSkKKyAgICB1bGh1ICAgICAgICB0MSwgMChzNykKKyAgICBpbnMgICAgICAgICB0MCwgdDEsIDE2LCAxNgorICAgIHJhZGR1LncucWIgIHQwLCB0MAorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgczYKKyAgICBzcmwgICAgICAgICB0MCwgMgorICAgIHhvcmkgICAgICAgIHM2LCBzNiwgMworICAgIHNiICAgICAgICAgIHQwLCAwKHQ0KQorICAgIGFkZGl1ICAgICAgIHQ1LCAyCisgICAgYWRkaXUgICAgICAgdDQsIDEKKyAgICBibmUgICAgICAgICB0OCwgdDQsIDNiCisgICAgIGFkZGl1ICAgICAgczcsIDIKKzQ6CisgICAgbGJ1eCAgICAgICAgdDEsIHQ2KHQ1KQorICAgIHNsbCAgICAgICAgIHQxLCAxCisgICAgbGJ1eCAgICAgICAgdDAsIHQ2KHM3KQorICAgIHNsbCAgICAgICAgIHQwLCAxCisgICAgYWRkdSAgICAgICAgdDEsIHQxLCB0MAorICAgIGFkZHUgICAgICAgIHQzLCB0MSwgczYKKyAgICBzcmwgICAgICAgICB0MCwgdDMsIDIgICAgICAgLy8gdDIgPSBwaXh2YWwxCisgICAgeG9yaSAgICAgICAgczYsIHM2LCAzCisgICAgYWRkdSAgICAgICAgdDIsIHQxLCBzNgorICAgIHNybCAgICAgICAgIHQxLCB0MiwgMiAgICAgICAvLyB0MyA9IHBpeHZhbDIKKyAgICBibGV6ICAgICAgICBzMiwgNmYKKyAgICAgYXBwZW5kICAgICB0MSwgdDAsIDgKKzU6CisgICAgdXNoICAgICAgICAgdDEsIDAodDQpCisgICAgYWRkaXUgICAgICAgczIsIC0xCisgICAgYmd0eiAgICAgICAgczIsIDViCisgICAgIGFkZGl1ICAgICAgdDQsIDIKKzY6CisgICAgYmVxeiAgICAgICAgdDksIDdmCisgICAgIG5vcAorICAgIHNiICAgICAgICAgIHQwLCAwKHQ0KQorNzoKKyAgICBhZGRpdSAgICAgICBzMSwgNAorICAgIGFkZGl1ICAgICAgIGEyLCAtMQorICAgIGJuZXogICAgICAgIGEyLCAwYgorICAgICBhZGRpdSAgICAgIHMwLCA4Cis4OgorICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorRU5EKGpzaW1kX2gydjJfZG93bnNhbXBsZV9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX2gydjJfc21vb3RoX2Rvd25zYW1wbGVfZHNwcjIpCisvKgorICogYTAgICAgID0gaW5wdXRfZGF0YQorICogYTEgICAgID0gb3V0cHV0X2RhdGEKKyAqIGEyICAgICA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IKKyAqIGEzICAgICA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcgorICogMTYoc3ApID0gY2luZm8tPnNtb290aGluZ19mYWN0b3IKKyAqIDIwKHNwKSA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcworICogMjQoc3ApID0gY2luZm8tPmltYWdlX3dpZHRoCisgKi8KKyAgICAuc2V0IGF0CisKKyAgICBTQVZFX1JFR1NfT05fU1RBQ0sgMzIsIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNworCisgICAgbHcgICAgICAgICAgczcsIDUyKHNwKSAgICAgIC8vIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcworICAgIGx3ICAgICAgICAgIHMwLCA1NihzcCkgICAgICAvLyBjaW5mby0+aW1hZ2Vfd2lkdGgKKyAgICBsdyAgICAgICAgICBzNiwgNDgoc3ApICAgICAgLy8gY2luZm8tPnNtb290aGluZ19mYWN0b3IKKyAgICBzbGwgICAgICAgICBzNywgMyAgICAgICAgICAgLy8gb3V0cHV0X2NvbHMgPSB3aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFCisgICAgc2xsICAgICAgICAgdjAsIHM3LCAxCisgICAgc3VidSAgICAgICAgdjAsIHYwLCBzMAorICAgIGJsZXogICAgICAgIHYwLCAyZgorICAgIG1vdmUgICAgICAgIHYxLCB6ZXJvCisgICAgYWRkaXUgICAgICAgdDAsIGEzLCAyICAgICAgIC8vIHQwID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICsgMgorMDoKKyAgICBhZGRpdSAgICAgICB0MSwgYTAsIC00CisgICAgc2xsICAgICAgICAgdDIsIHYxLCAyCisgICAgbHd4ICAgICAgICAgdDEsIHQyKHQxKQorICAgIG1vdmUgICAgICAgIHQzLCB2MAorICAgIGFkZHUgICAgICAgIHQxLCB0MSwgczAKKyAgICBsYnUgICAgICAgICB0MiwgLTEodDEpCisxOgorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTEKKyAgICBzYiAgICAgICAgICB0MiwgMCh0MSkKKyAgICBiZ3R6ICAgICAgICB0MywgMWIKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIDEKKyAgICBhZGRpdSAgICAgICB2MSwgdjEsIDEKKyAgICBibmUgICAgICAgICB2MSwgdDAsIDBiCisgICAgbm9wCisyOgorICAgIGxpICAgICAgICAgIHYwLCA4MAorICAgIG11bCAgICAgICAgIHYwLCBzNiwgdjAKKyAgICBsaSAgICAgICAgICB2MSwgMTYzODQKKyAgICBtb3ZlICAgICAgICB0NCwgemVybworICAgIG1vdmUgICAgICAgIHQ1LCB6ZXJvCisgICAgc3VidSAgICAgICAgdDYsIHYxLCB2MCAgICAgIC8vIHQ2ID0gMTYzODQgLSB0bXBfc21vb3RfZiAqIDgwCisgICAgc2xsICAgICAgICAgdDcsIHM2LCA0ICAgICAgIC8vIHQ3ID0gdG1wX3Ntb290X2YgKiAxNgorMzoKKy8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uOiBwcmV0ZW5kIGNvbHVtbiAtMSBpcyBzYW1lIGFzIGNvbHVtbiAwICovCisgICAgc2xsICAgICAgICAgdjAsIHQ0LCAyCisgICAgbHd4ICAgICAgICAgdDgsIHYwKGExKSAgICAgIC8vICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddCisgICAgc2xsICAgICAgICAgdjEsIHQ1LCAyCisgICAgYWRkaXUgICAgICAgdDksIHYxLCA0CisgICAgYWRkaXUgICAgICAgczAsIHYxLCAtNAorICAgIGFkZGl1ICAgICAgIHMxLCB2MSwgOAorICAgIGx3eCAgICAgICAgIHMyLCB2MShhMCkgICAgICAvLyBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XQorICAgIGx3eCAgICAgICAgIHQ5LCB0OShhMCkgICAgICAvLyBpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93KzFdCisgICAgbHd4ICAgICAgICAgczAsIHMwKGEwKSAgICAgIC8vIGFib3ZlX3B0ciA9IGlucHV0X2RhdGFbaW5yb3ctMV0KKyAgICBsd3ggICAgICAgICBzMSwgczEoYTApICAgICAgLy8gYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtpbnJvdysyXQorICAgIGxoICAgICAgICAgIHYwLCAwKHMyKQorICAgIGxoICAgICAgICAgIHYxLCAwKHQ5KQorICAgIGxoICAgICAgICAgIHQwLCAwKHMwKQorICAgIGxoICAgICAgICAgIHQxLCAwKHMxKQorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgaW5zICAgICAgICAgdDAsIHQxLCAxNiwgMTYKKyAgICByYWRkdS53LnFiICB0MiwgdjAKKyAgICByYWRkdS53LnFiICBzMywgdDAKKyAgICBsYnUgICAgICAgICB2MCwgMChzMikKKyAgICBsYnUgICAgICAgICB2MSwgMihzMikKKyAgICBsYnUgICAgICAgICB0MCwgMCh0OSkKKyAgICBsYnUgICAgICAgICB0MSwgMih0OSkKKyAgICBhZGR1ICAgICAgICB2MCwgdjAsIHYxCisgICAgbXVsdCAgICAgICAgJGFjMSwgdDIsIHQ2CisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB0MQorICAgIGxidSAgICAgICAgIHQyLCAyKHMwKQorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgdjAKKyAgICBsYnUgICAgICAgICB0MywgMihzMSkKKyAgICBhZGR1ICAgICAgICBzMywgdDAsIHMzCisgICAgbGJ1ICAgICAgICAgdjAsIDAoczApCisgICAgbGJ1ICAgICAgICAgdDAsIDAoczEpCisgICAgc2xsICAgICAgICAgczMsIHMzLCAxCisgICAgYWRkdSAgICAgICAgdjAsIHYwLCB0MgorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgdDMKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHYwCisgICAgYWRkdSAgICAgICAgczMsIHQwLCBzMworICAgIG1hZGQgICAgICAgICRhYzEsIHMzLCB0NworICAgIGV4dHJfci53ICAgIHYwLCAkYWMxLCAxNgorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgMQorICAgIGFkZGl1ICAgICAgIHMyLCBzMiwgMgorICAgIGFkZGl1ICAgICAgIHQ5LCB0OSwgMgorICAgIGFkZGl1ICAgICAgIHMwLCBzMCwgMgorICAgIGFkZGl1ICAgICAgIHMxLCBzMSwgMgorICAgIHNiICAgICAgICAgIHYwLCAtMSh0OCkKKyAgICBhZGRpdSAgICAgICBzNCwgczcsIC0yCisgICAgYW5kICAgICAgICAgczQsIHM0LCAzCisgICAgYWRkdSAgICAgICAgczUsIHM0LCB0OCAgICAgIC8vIGVuZCBhZGRyZXNzCis0OgorICAgIGxoICAgICAgICAgIHYwLCAwKHMyKQorICAgIGxoICAgICAgICAgIHYxLCAwKHQ5KQorICAgIGxoICAgICAgICAgIHQwLCAwKHMwKQorICAgIGxoICAgICAgICAgIHQxLCAwKHMxKQorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgaW5zICAgICAgICAgdDAsIHQxLCAxNiwgMTYKKyAgICByYWRkdS53LnFiICB0MiwgdjAKKyAgICByYWRkdS53LnFiICBzMywgdDAKKyAgICBsYnUgICAgICAgICB2MCwgLTEoczIpCisgICAgbGJ1ICAgICAgICAgdjEsIDIoczIpCisgICAgbGJ1ICAgICAgICAgdDAsIC0xKHQ5KQorICAgIGxidSAgICAgICAgIHQxLCAyKHQ5KQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdjEKKyAgICBtdWx0ICAgICAgICAkYWMxLCB0MiwgdDYKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQxCisgICAgbGJ1ICAgICAgICAgdDIsIDIoczApCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGxidSAgICAgICAgIHQzLCAyKHMxKQorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBsYnUgICAgICAgICB2MCwgLTEoczApCisgICAgbGJ1ICAgICAgICAgdDAsIC0xKHMxKQorICAgIHNsbCAgICAgICAgIHMzLCBzMywgMQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdDIKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQzCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDcKKyAgICBleHRyX3IudyAgICB0MiwgJGFjMSwgMTYKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIDEKKyAgICBhZGRpdSAgICAgICBzMiwgczIsIDIKKyAgICBhZGRpdSAgICAgICB0OSwgdDksIDIKKyAgICBhZGRpdSAgICAgICBzMCwgczAsIDIKKyAgICBzYiAgICAgICAgICB0MiwgLTEodDgpCisgICAgYm5lICAgICAgICAgczUsIHQ4LCA0YgorICAgIGFkZGl1ICAgICAgIHMxLCBzMSwgMgorICAgIGFkZGl1ICAgICAgIHM1LCBzNywgLTIKKyAgICBzdWJ1ICAgICAgICBzNSwgczUsIHM0CisgICAgYWRkdSAgICAgICAgczUsIHM1LCB0OCAgICAgIC8vIGVuZCBhZGRyZXNzCis1OgorICAgIGxoICAgICAgICAgIHYwLCAwKHMyKQorICAgIGxoICAgICAgICAgIHYxLCAwKHQ5KQorICAgIGxoICAgICAgICAgIHQwLCAwKHMwKQorICAgIGxoICAgICAgICAgIHQxLCAwKHMxKQorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgaW5zICAgICAgICAgdDAsIHQxLCAxNiwgMTYKKyAgICByYWRkdS53LnFiICB0MiwgdjAKKyAgICByYWRkdS53LnFiICBzMywgdDAKKyAgICBsYnUgICAgICAgICB2MCwgLTEoczIpCisgICAgbGJ1ICAgICAgICAgdjEsIDIoczIpCisgICAgbGJ1ICAgICAgICAgdDAsIC0xKHQ5KQorICAgIGxidSAgICAgICAgIHQxLCAyKHQ5KQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdjEKKyAgICBtdWx0ICAgICAgICAkYWMxLCB0MiwgdDYKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQxCisgICAgbGJ1ICAgICAgICAgdDIsIDIoczApCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGxidSAgICAgICAgIHQzLCAyKHMxKQorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBsYnUgICAgICAgICB2MCwgLTEoczApCisgICAgbGJ1ICAgICAgICAgdDAsIC0xKHMxKQorICAgIHNsbCAgICAgICAgIHMzLCBzMywgMQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdDIKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQzCisgICAgbGggICAgICAgICAgdjEsIDIodDkpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGxoICAgICAgICAgIHYwLCAyKHMyKQorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBsaCAgICAgICAgICB0MCwgMihzMCkKKyAgICBsaCAgICAgICAgICB0MSwgMihzMSkKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDcKKyAgICBleHRyX3IudyAgICB0MiwgJGFjMSwgMTYKKyAgICBpbnMgICAgICAgICB0MCwgdDEsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgcmFkZHUudy5xYiAgczMsIHQwCisgICAgbGJ1ICAgICAgICAgdjEsIDQoczIpCisgICAgbGJ1ICAgICAgICAgdDAsIDEodDkpCisgICAgbGJ1ICAgICAgICAgdDEsIDQodDkpCisgICAgc2IgICAgICAgICAgdDIsIDAodDgpCisgICAgcmFkZHUudy5xYiAgdDMsIHYwCisgICAgbGJ1ICAgICAgICAgdjAsIDEoczIpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB0MQorICAgIG11bHQgICAgICAgICRhYzEsIHQzLCB0NgorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdjEKKyAgICBsYnUgICAgICAgICB0MiwgNChzMCkKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHYwCisgICAgbGJ1ICAgICAgICAgdjAsIDEoczApCisgICAgYWRkdSAgICAgICAgczMsIHQwLCBzMworICAgIGxidSAgICAgICAgIHQwLCAxKHMxKQorICAgIGxidSAgICAgICAgIHQzLCA0KHMxKQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdDIKKyAgICBzbGwgICAgICAgICBzMywgczMsIDEKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQzCisgICAgbGggICAgICAgICAgdjEsIDQodDkpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGxoICAgICAgICAgIHYwLCA0KHMyKQorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBsaCAgICAgICAgICB0MCwgNChzMCkKKyAgICBsaCAgICAgICAgICB0MSwgNChzMSkKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDcKKyAgICBleHRyX3IudyAgICB0MiwgJGFjMSwgMTYKKyAgICBpbnMgICAgICAgICB0MCwgdDEsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgcmFkZHUudy5xYiAgczMsIHQwCisgICAgbGJ1ICAgICAgICAgdjEsIDYoczIpCisgICAgbGJ1ICAgICAgICAgdDAsIDModDkpCisgICAgbGJ1ICAgICAgICAgdDEsIDYodDkpCisgICAgc2IgICAgICAgICAgdDIsIDEodDgpCisgICAgcmFkZHUudy5xYiAgdDMsIHYwCisgICAgbGJ1ICAgICAgICAgdjAsIDMoczIpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB0MQorICAgIG11bHQgICAgICAgICRhYzEsIHQzLCB0NgorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdjEKKyAgICBsYnUgICAgICAgICB0MiwgNihzMCkKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHYwCisgICAgbGJ1ICAgICAgICAgdjAsIDMoczApCisgICAgYWRkdSAgICAgICAgczMsIHQwLCBzMworICAgIGxidSAgICAgICAgIHQwLCAzKHMxKQorICAgIGxidSAgICAgICAgIHQzLCA2KHMxKQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdDIKKyAgICBzbGwgICAgICAgICBzMywgczMsIDEKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQzCisgICAgbGggICAgICAgICAgdjEsIDYodDkpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGxoICAgICAgICAgIHYwLCA2KHMyKQorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBsaCAgICAgICAgICB0MCwgNihzMCkKKyAgICBsaCAgICAgICAgICB0MSwgNihzMSkKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDcKKyAgICBleHRyX3IudyAgICB0MywgJGFjMSwgMTYKKyAgICBpbnMgICAgICAgICB0MCwgdDEsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgcmFkZHUudy5xYiAgczMsIHQwCisgICAgbGJ1ICAgICAgICAgdjEsIDgoczIpCisgICAgbGJ1ICAgICAgICAgdDAsIDUodDkpCisgICAgbGJ1ICAgICAgICAgdDEsIDgodDkpCisgICAgc2IgICAgICAgICAgdDMsIDIodDgpCisgICAgcmFkZHUudy5xYiAgdDIsIHYwCisgICAgbGJ1ICAgICAgICAgdjAsIDUoczIpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB0MQorICAgIG11bHQgICAgICAgICRhYzEsIHQyLCB0NgorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdjEKKyAgICBsYnUgICAgICAgICB0MiwgOChzMCkKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHYwCisgICAgbGJ1ICAgICAgICAgdjAsIDUoczApCisgICAgYWRkdSAgICAgICAgczMsIHQwLCBzMworICAgIGxidSAgICAgICAgIHQwLCA1KHMxKQorICAgIGxidSAgICAgICAgIHQzLCA4KHMxKQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdDIKKyAgICBzbGwgICAgICAgICBzMywgczMsIDEKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQzCisgICAgYWRkaXUgICAgICAgdDgsIHQ4LCA0CisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGFkZGl1ICAgICAgIHMyLCBzMiwgOAorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBhZGRpdSAgICAgICB0OSwgdDksIDgKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDcKKyAgICBleHRyX3IudyAgICB0MSwgJGFjMSwgMTYKKyAgICBhZGRpdSAgICAgICBzMCwgczAsIDgKKyAgICBhZGRpdSAgICAgICBzMSwgczEsIDgKKyAgICBibmUgICAgICAgICBzNSwgdDgsIDViCisgICAgc2IgICAgICAgICAgdDEsIC0xKHQ4KQorLyogU3BlY2lhbCBjYXNlIGZvciBsYXN0IGNvbHVtbiAqLworICAgIGxoICAgICAgICAgIHYwLCAwKHMyKQorICAgIGxoICAgICAgICAgIHYxLCAwKHQ5KQorICAgIGxoICAgICAgICAgIHQwLCAwKHMwKQorICAgIGxoICAgICAgICAgIHQxLCAwKHMxKQorICAgIGlucyAgICAgICAgIHYwLCB2MSwgMTYsIDE2CisgICAgaW5zICAgICAgICAgdDAsIHQxLCAxNiwgMTYKKyAgICByYWRkdS53LnFiICB0MiwgdjAKKyAgICByYWRkdS53LnFiICBzMywgdDAKKyAgICBsYnUgICAgICAgICB2MCwgLTEoczIpCisgICAgbGJ1ICAgICAgICAgdjEsIDEoczIpCisgICAgbGJ1ICAgICAgICAgdDAsIC0xKHQ5KQorICAgIGxidSAgICAgICAgIHQxLCAxKHQ5KQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdjEKKyAgICBtdWx0ICAgICAgICAkYWMxLCB0MiwgdDYKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQxCisgICAgbGJ1ICAgICAgICAgdDIsIDEoczApCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGxidSAgICAgICAgIHQzLCAxKHMxKQorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBsYnUgICAgICAgICB2MCwgLTEoczApCisgICAgbGJ1ICAgICAgICAgdDAsIC0xKHMxKQorICAgIHNsbCAgICAgICAgIHMzLCBzMywgMQorICAgIGFkZHUgICAgICAgIHYwLCB2MCwgdDIKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQzCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCB2MAorICAgIGFkZHUgICAgICAgIHMzLCB0MCwgczMKKyAgICBtYWRkICAgICAgICAkYWMxLCBzMywgdDcKKyAgICBleHRyX3IudyAgICB0MCwgJGFjMSwgMTYKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIDIKKyAgICBzYiAgICAgICAgICB0MCwgMCh0OCkKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIDEKKyAgICBibmUgICAgICAgICB0NCwgYTIsIDNiCisgICAgYWRkaXUgICAgICAgdDUsIHQ1LCAyCisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAzMiwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3CisKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKKworRU5EKGpzaW1kX2gydjJfc21vb3RoX2Rvd25zYW1wbGVfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9pbnRfdXBzYW1wbGVfZHNwcjIpCisvKgorICogYTAgICAgID0gdXBzYW1wbGUtPmhfZXhwYW5kW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0KKyAqIGExICAgICA9IHVwc2FtcGxlLT52X2V4cGFuZFtjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdCisgKiBhMiAgICAgPSBpbnB1dF9kYXRhCisgKiBhMyAgICAgPSBvdXRwdXRfZGF0YV9wdHIKKyAqIDE2KHNwKSA9IGNpbmZvLT5vdXRwdXRfd2lkdGgKKyAqIDIwKHNwKSA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcgorICovCisgICAgLnNldCBhdAorCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDE2LCBzMCwgczEsIHMyLCBzMworCisgICAgbHcgICAgICAgICAgczAsIDAoYTMpICAgICAgIC8vIHMwID0gb3V0cHV0X2RhdGEKKyAgICBsdyAgICAgICAgICBzMSwgMzIoc3ApICAgICAgLy8gczEgPSBjaW5mby0+b3V0cHV0X3dpZHRoCisgICAgbHcgICAgICAgICAgczIsIDM2KHNwKSAgICAgIC8vIHMyID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yCisgICAgbGkgICAgICAgICAgdDYsIDAgICAgICAgICAgIC8vIHQ2ID0gaW5yb3cKKyAgICBiZXF6ICAgICAgICBzMiwgMTBmCisgICAgIGxpICAgICAgICAgczMsIDAgICAgICAgICAgIC8vIHMzID0gb3V0cm93CiswOgorICAgIGFkZHUgICAgICAgIHQwLCBhMiwgdDYKKyAgICBhZGR1ICAgICAgICB0NywgczAsIHMzCisgICAgbHcgICAgICAgICAgdDMsIDAodDApICAgICAgIC8vIHQzID0gaW5wdHIKKyAgICBsdyAgICAgICAgICB0OCwgMCh0NykgICAgICAgLy8gdDggPSBvdXRwdHIKKyAgICBiZXF6ICAgICAgICBzMSwgNGYKKyAgICAgYWRkdSAgICAgICB0NSwgdDgsIHMxICAgICAgLy8gdDUgPSBvdXRlbmQKKzE6CisgICAgbGIgICAgICAgICAgdDIsIDAodDMpICAgICAgIC8vIHQyID0gaW52YWx1ZSA9ICppbnB0cisrCisgICAgYWRkaXUgICAgICAgdDMsIDEKKyAgICBiZXF6ICAgICAgICBhMCwgM2YKKyAgICAgbW92ZSAgICAgICB0MCwgYTAgICAgICAgICAgLy8gdDAgPSBoX2V4cGFuZAorMjoKKyAgICBzYiAgICAgICAgICB0MiwgMCh0OCkKKyAgICBhZGRpdSAgICAgICB0MCwgLTEKKyAgICBiZ3R6ICAgICAgICB0MCwgMmIKKyAgICAgYWRkaXUgICAgICB0OCwgMQorMzoKKyAgICBiZ3QgICAgICAgICB0NSwgdDgsIDFiCisgICAgIG5vcAorNDoKKyAgICBhZGRpdSAgICAgICB0OSwgYTEsIC0xICAgICAgLy8gdDkgPSB2X2V4cGFuZCAtIDEKKyAgICBibGV6ICAgICAgICB0OSwgOWYKKyAgICAgbm9wCis1OgorICAgIGx3ICAgICAgICAgIHQzLCAwKHMwKQorICAgIGx3ICAgICAgICAgIHQ0LCA0KHMwKQorICAgIHN1YnUgICAgICAgIHQwLCBzMSwgMHhGCisgICAgYmxleiAgICAgICAgdDAsIDdmCisgICAgIGFkZHUgICAgICAgdDUsIHQzLCBzMSAgICAgIC8vIHQ1ID0gZW5kIGFkZHJlc3MKKyAgICBhbmRpICAgICAgICB0NywgczEsIDB4RiAgICAgLy8gdDcgPSByZXNpZHVhbAorICAgIHN1YnUgICAgICAgIHQ4LCB0NSwgdDcKKzY6CisgICAgdWx3ICAgICAgICAgdDAsIDAodDMpCisgICAgdWx3ICAgICAgICAgdDEsIDQodDMpCisgICAgdWx3ICAgICAgICAgdDIsIDgodDMpCisgICAgdXN3ICAgICAgICAgdDAsIDAodDQpCisgICAgdWx3ICAgICAgICAgdDAsIDEyKHQzKQorICAgIHVzdyAgICAgICAgIHQxLCA0KHQ0KQorICAgIHVzdyAgICAgICAgIHQyLCA4KHQ0KQorICAgIHVzdyAgICAgICAgIHQwLCAxMih0NCkKKyAgICBhZGRpdSAgICAgICB0MywgMTYKKyAgICBibmUgICAgICAgICB0MywgdDgsIDZiCisgICAgIGFkZGl1ICAgICAgdDQsIDE2CisgICAgYmVxeiAgICAgICAgdDcsIDhmCisgICAgIG5vcAorNzoKKyAgICBsYnUgICAgICAgICB0MCwgMCh0MykKKyAgICBzYiAgICAgICAgICB0MCwgMCh0NCkKKyAgICBhZGRpdSAgICAgICB0MywgMQorICAgIGJuZSAgICAgICAgIHQzLCB0NSwgN2IKKyAgICAgYWRkaXUgICAgICB0NCwgMQorODoKKyAgICBhZGRpdSAgICAgICB0OSwgLTEKKyAgICBiZ3R6ICAgICAgICB0OSwgNWIKKyAgICAgYWRkaXUgICAgICBzMCwgOAorOToKKyAgICBhZGR1ICAgICAgICBzMywgczMsIGExCisgICAgYm5lICAgICAgICAgczMsIHMyLCAwYgorICAgICBhZGRpdSAgICAgIHQ2LCAxCisxMDoKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAxNiwgczAsIHMxLCBzMiwgczMKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorRU5EKGpzaW1kX2ludF91cHNhbXBsZV9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX2gydjFfdXBzYW1wbGVfZHNwcjIpCisvKgorICogYTAgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IKKyAqIGExID0gY2luZm8tPm91dHB1dF93aWR0aAorICogYTIgPSBpbnB1dF9kYXRhCisgKiBhMyA9IG91dHB1dF9kYXRhX3B0cgorICovCisgICAgbHcgICAgICAgICAgdDcsIDAoYTMpICAgICAgIC8vIHQ3ID0gb3V0cHV0X2RhdGEKKyAgICBhbmRpICAgICAgICB0OCwgYTEsIDB4ZiAgICAgLy8gdDggPSByZXNpZHVhbAorICAgIHNsbCAgICAgICAgIHQwLCBhMCwgMgorICAgIGJsZXogICAgICAgIGEwLCA0ZgorICAgICBhZGR1ICAgICAgIHQ5LCB0NywgdDAgICAgICAvLyB0OSA9IG91dHB1dF9kYXRhIGVuZCBhZGRyZXNzCiswOgorICAgIGx3ICAgICAgICAgIHQ1LCAwKHQ3KSAgICAgICAvLyB0NSA9IG91dHB0cgorICAgIGx3ICAgICAgICAgIHQ2LCAwKGEyKSAgICAgICAvLyB0NiA9IGlucHRyCisgICAgYWRkdSAgICAgICAgdDMsIHQ1LCBhMSAgICAgIC8vIHQzID0gb3V0cHRyICsgb3V0cHV0X3dpZHRoIChlbmQgYWRkcmVzcykKKyAgICBzdWJ1ICAgICAgICB0MywgdDggICAgICAgICAgLy8gdDMgPSBlbmQgYWRkcmVzcyAtIHJlc2lkdWFsCisgICAgYmVxICAgICAgICAgdDUsIHQzLCAyZgorICAgICBtb3ZlICAgICAgIHQ0LCB0OAorMToKKyAgICB1bHcgICAgICAgICB0MCwgMCh0NikgICAgICAgLy8gdDAgPSB8UDN8UDJ8UDF8UDB8CisgICAgdWx3ICAgICAgICAgdDIsIDQodDYpICAgICAgIC8vIHQyID0gfFA3fFA2fFA1fFA0fAorICAgIHNybCAgICAgICAgIHQxLCB0MCwgMTYgICAgICAvLyB0MSA9IHxYfFh8UDN8UDJ8CisgICAgaW5zICAgICAgICAgdDAsIHQwLCAxNiwgMTYgIC8vIHQwID0gfFAxfFAwfFAxfFAwfAorICAgIGlucyAgICAgICAgIHQxLCB0MSwgMTYsIDE2ICAvLyB0MSA9IHxQM3xQMnxQM3xQMnwKKyAgICBpbnMgICAgICAgICB0MCwgdDAsIDgsIDE2ICAgLy8gdDAgPSB8UDF8UDF8UDB8UDB8CisgICAgaW5zICAgICAgICAgdDEsIHQxLCA4LCAxNiAgIC8vIHQxID0gfFAzfFAzfFAyfFAyfAorICAgIHVzdyAgICAgICAgIHQwLCAwKHQ1KQorICAgIHVzdyAgICAgICAgIHQxLCA0KHQ1KQorICAgIHNybCAgICAgICAgIHQwLCB0MiwgMTYgICAgICAvLyB0MCA9IHxYfFh8UDd8UDZ8CisgICAgaW5zICAgICAgICAgdDIsIHQyLCAxNiwgMTYgIC8vIHQyID0gfFA1fFA0fFA1fFA0fAorICAgIGlucyAgICAgICAgIHQwLCB0MCwgMTYsIDE2ICAvLyB0MCA9IHxQN3xQNnxQN3xQNnwKKyAgICBpbnMgICAgICAgICB0MiwgdDIsIDgsIDE2ICAgLy8gdDIgPSB8UDV8UDV8UDR8UDR8CisgICAgaW5zICAgICAgICAgdDAsIHQwLCA4LCAxNiAgIC8vIHQwID0gfFA3fFA3fFA2fFA2fAorICAgIHVzdyAgICAgICAgIHQyLCA4KHQ1KQorICAgIHVzdyAgICAgICAgIHQwLCAxMih0NSkKKyAgICBhZGRpdSAgICAgICB0NSwgMTYKKyAgICBibmUgICAgICAgICB0NSwgdDMsIDFiCisgICAgIGFkZGl1ICAgICAgdDYsIDgKKyAgICBiZXF6ICAgICAgICB0OCwgM2YKKyAgICAgbW92ZSAgICAgICB0NCwgdDgKKzI6CisgICAgbGJ1ICAgICAgICAgdDEsIDAodDYpCisgICAgc2IgICAgICAgICAgdDEsIDAodDUpCisgICAgc2IgICAgICAgICAgdDEsIDEodDUpCisgICAgYWRkaXUgICAgICAgdDQsIC0yCisgICAgYWRkaXUgICAgICAgdDYsIDEKKyAgICBiZ3R6ICAgICAgICB0NCwgMmIKKyAgICAgYWRkaXUgICAgICB0NSwgMgorMzoKKyAgICBhZGRpdSAgICAgICB0NywgNAorICAgIGJuZSAgICAgICAgIHQ5LCB0NywgMGIKKyAgICAgYWRkaXUgICAgICBhMiwgNAorNDoKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKK0VORChqc2ltZF9oMnYxX3Vwc2FtcGxlX2RzcHIyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0xFQUZfRFNQUjIoanNpbWRfaDJ2Ml91cHNhbXBsZV9kc3ByMikKKy8qCisgKiBhMCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcgorICogYTEgPSBjaW5mby0+b3V0cHV0X3dpZHRoCisgKiBhMiA9IGlucHV0X2RhdGEKKyAqIGEzID0gb3V0cHV0X2RhdGFfcHRyCisgKi8KKyAgICBsdyAgICAgICAgICB0NywgMChhMykKKyAgICBibGV6ICAgICAgICBhMCwgN2YKKyAgICAgYW5kaSAgICAgICB0OSwgYTEsIDB4ZiAgICAgLy8gdDkgPSByZXNpZHVhbAorMDoKKyAgICBsdyAgICAgICAgICB0NiwgMChhMikgICAgICAgLy8gdDYgPSBpbnB0cgorICAgIGx3ICAgICAgICAgIHQ1LCAwKHQ3KSAgICAgICAvLyB0NSA9IG91dHB0cgorICAgIGFkZHUgICAgICAgIHQ4LCB0NSwgYTEgICAgICAvLyB0OCA9IG91dHB0ciBlbmQgYWRkcmVzcworICAgIHN1YnUgICAgICAgIHQ4LCB0OSAgICAgICAgICAvLyB0OCA9IGVuZCBhZGRyZXNzIC0gcmVzaWR1YWwKKyAgICBiZXEgICAgICAgICB0NSwgdDgsIDJmCisgICAgIG1vdmUgICAgICAgdDQsIHQ5CisxOgorICAgIHVsdyAgICAgICAgIHQwLCAwKHQ2KQorICAgIHNybCAgICAgICAgIHQxLCB0MCwgMTYKKyAgICBpbnMgICAgICAgICB0MCwgdDAsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHQwLCB0MCwgOCwgMTYKKyAgICBpbnMgICAgICAgICB0MSwgdDEsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHQxLCB0MSwgOCwgMTYKKyAgICB1bHcgICAgICAgICB0MiwgNCh0NikKKyAgICB1c3cgICAgICAgICB0MCwgMCh0NSkKKyAgICB1c3cgICAgICAgICB0MSwgNCh0NSkKKyAgICBzcmwgICAgICAgICB0MywgdDIsIDE2CisgICAgaW5zICAgICAgICAgdDIsIHQyLCAxNiwgMTYKKyAgICBpbnMgICAgICAgICB0MiwgdDIsIDgsIDE2CisgICAgaW5zICAgICAgICAgdDMsIHQzLCAxNiwgMTYKKyAgICBpbnMgICAgICAgICB0MywgdDMsIDgsIDE2CisgICAgdXN3ICAgICAgICAgdDIsIDgodDUpCisgICAgdXN3ICAgICAgICAgdDMsIDEyKHQ1KQorICAgIGFkZGl1ICAgICAgIHQ1LCAxNgorICAgIGJuZSAgICAgICAgIHQ1LCB0OCwgMWIKKyAgICAgYWRkaXUgICAgICB0NiwgOAorICAgIGJlcXogICAgICAgIHQ5LCAzZgorICAgICBtb3ZlICAgICAgIHQ0LCB0OQorMjoKKyAgICBsYnUgICAgICAgICB0MCwgMCh0NikKKyAgICBzYiAgICAgICAgICB0MCwgMCh0NSkKKyAgICBzYiAgICAgICAgICB0MCwgMSh0NSkKKyAgICBhZGRpdSAgICAgICB0NCwgLTIKKyAgICBhZGRpdSAgICAgICB0NiwgMQorICAgIGJndHogICAgICAgIHQ0LCAyYgorICAgICBhZGRpdSAgICAgIHQ1LCAyCiszOgorICAgIGx3ICAgICAgICAgIHQ2LCAwKHQ3KSAgICAgICAvLyB0NiA9IG91dHB0clswXQorICAgIGx3ICAgICAgICAgIHQ1LCA0KHQ3KSAgICAgICAvLyB0NSA9IG91dHB0clsxXQorICAgIGFkZHUgICAgICAgIHQ0LCB0NiwgYTEgICAgICAvLyB0NCA9IG5ldyBlbmQgYWRkcmVzcworICAgIGJlcSAgICAgICAgIGExLCB0OSwgNWYKKyAgICAgc3VidSAgICAgICB0OCwgdDQsIHQ5Cis0OgorICAgIHVsdyAgICAgICAgIHQwLCAwKHQ2KQorICAgIHVsdyAgICAgICAgIHQxLCA0KHQ2KQorICAgIHVsdyAgICAgICAgIHQyLCA4KHQ2KQorICAgIHVzdyAgICAgICAgIHQwLCAwKHQ1KQorICAgIHVsdyAgICAgICAgIHQwLCAxMih0NikKKyAgICB1c3cgICAgICAgICB0MSwgNCh0NSkKKyAgICB1c3cgICAgICAgICB0MiwgOCh0NSkKKyAgICB1c3cgICAgICAgICB0MCwgMTIodDUpCisgICAgYWRkaXUgICAgICAgdDYsIDE2CisgICAgYm5lICAgICAgICAgdDYsIHQ4LCA0YgorICAgICBhZGRpdSAgICAgIHQ1LCAxNgorICAgIGJlcXogICAgICAgIHQ5LCA2ZgorICAgICBub3AKKzU6CisgICAgbGJ1ICAgICAgICAgdDAsIDAodDYpCisgICAgc2IgICAgICAgICAgdDAsIDAodDUpCisgICAgYWRkaXUgICAgICAgdDYsIDEKKyAgICBibmUgICAgICAgICB0NiwgdDQsIDViCisgICAgIGFkZGl1ICAgICAgdDUsIDEKKzY6CisgICAgYWRkaXUgICAgICAgdDcsIDgKKyAgICBhZGRpdSAgICAgICBhMCwgLTIKKyAgICBiZ3R6ICAgICAgICBhMCwgMGIKKyAgICAgYWRkaXUgICAgICBhMiwgNAorNzoKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKK0VORChqc2ltZF9oMnYyX3Vwc2FtcGxlX2RzcHIyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0xFQUZfRFNQUjIoanNpbWRfaWRjdF9pc2xvd19kc3ByMikKKy8qCisgKiBhMCA9IGNvZWZfYmxvY2sKKyAqIGExID0gY29tcHB0ci0+ZGN0dGFibGUKKyAqIGEyID0gb3V0cHV0CisgKiBhMyA9IHJhbmdlX2xpbWl0CisgKi8KKyAgICBTQVZFX1JFR1NfT05fU1RBQ0sgMzIsIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNworCisgICAgYWRkaXUgICAgICAgc3AsIHNwLCAtMjU2CisgICAgbW92ZSAgICAgICAgdjAsIHNwCisgICAgYWRkaXUgICAgICAgdjEsIHplcm8sIDggICAgIC8vIHYxID0gRENUU0laRSA9IDgKKzE6CisgICAgbGggICAgICAgICAgczQsIDMyKGEwKSAgICAgIC8vIHM0ID0gaW5wdHJbMTZdCisgICAgbGggICAgICAgICAgczUsIDY0KGEwKSAgICAgIC8vIHM1ID0gaW5wdHJbMzJdCisgICAgbGggICAgICAgICAgczYsIDk2KGEwKSAgICAgIC8vIHM2ID0gaW5wdHJbNDhdCisgICAgbGggICAgICAgICAgdDEsIDExMihhMCkgICAgIC8vIHQxID0gaW5wdHJbNTZdCisgICAgbGggICAgICAgICAgdDcsIDE2KGEwKSAgICAgIC8vIHQ3ID0gaW5wdHJbOF0KKyAgICBsaCAgICAgICAgICB0NSwgODAoYTApICAgICAgLy8gdDUgPSBpbnB0cls0MF0KKyAgICBsaCAgICAgICAgICB0MywgNDgoYTApICAgICAgLy8gdDMgPSBpbnB0clsyNF0KKyAgICBvciAgICAgICAgICBzNCwgczQsIHQxCisgICAgb3IgICAgICAgICAgczQsIHM0LCB0MworICAgIG9yICAgICAgICAgIHM0LCBzNCwgdDUKKyAgICBvciAgICAgICAgICBzNCwgczQsIHQ3CisgICAgb3IgICAgICAgICAgczQsIHM0LCBzNQorICAgIG9yICAgICAgICAgIHM0LCBzNCwgczYKKyAgICBibmV6ICAgICAgICBzNCwgMmYKKyAgICAgYWRkaXUgICAgICB2MSwgdjEsIC0xCisgICAgbGggICAgICAgICAgczUsIDAoYTEpICAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqMF0KKyAgICBsaCAgICAgICAgICBzNiwgMChhMCkgICAgICAgLy8gaW5wdHJbRENUU0laRSowXQorICAgIG11bCAgICAgICAgIHM1LCBzNSwgczYgICAgICAvLyBERVFVQU5USVpFKGlucHRyWzBdLCBxdWFudHB0clswXSkKKyAgICBzbGwgICAgICAgICBzNSwgczUsIDIKKyAgICBzdyAgICAgICAgICBzNSwgMCh2MCkKKyAgICBzdyAgICAgICAgICBzNSwgMzIodjApCisgICAgc3cgICAgICAgICAgczUsIDY0KHYwKQorICAgIHN3ICAgICAgICAgIHM1LCA5Nih2MCkKKyAgICBzdyAgICAgICAgICBzNSwgMTI4KHYwKQorICAgIHN3ICAgICAgICAgIHM1LCAxNjAodjApCisgICAgc3cgICAgICAgICAgczUsIDE5Mih2MCkKKyAgICBiICAgICAgICAgICAzZgorICAgICBzdyAgICAgICAgIHM1LCAyMjQodjApCisyOgorICAgIGxoICAgICAgICAgIHQwLCAxMTIoYTEpCisgICAgbGggICAgICAgICAgdDIsIDQ4KGExKQorICAgIGxoICAgICAgICAgIHQ0LCA4MChhMSkKKyAgICBsaCAgICAgICAgICB0NiwgMTYoYTEpCisgICAgbXVsICAgICAgICAgdDAsIHQwLCB0MSAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSkKKyAgICBtdWwgICAgICAgICB0MSwgdDIsIHQzICAgICAgLy8gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKQorICAgIG11bCAgICAgICAgIHQyLCB0NCwgdDUgICAgICAvLyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pCisgICAgbXVsICAgICAgICAgdDMsIHQ2LCB0NyAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSkKKyAgICBsaCAgICAgICAgICB0NCwgMzIoYTEpCisgICAgbGggICAgICAgICAgdDUsIDMyKGEwKQorICAgIGxoICAgICAgICAgIHQ2LCA5NihhMSkKKyAgICBsaCAgICAgICAgICB0NywgOTYoYTApCisgICAgYWRkdSAgICAgICAgczAsIHQwLCB0MSAgICAgICAvLyB6MyA9IHRtcDAgKyB0bXAyCisgICAgYWRkdSAgICAgICAgczEsIHQxLCB0MiAgICAgICAvLyB6MiA9IHRtcDEgKyB0bXAyCisgICAgYWRkdSAgICAgICAgczIsIHQyLCB0MyAgICAgICAvLyB6NCA9IHRtcDEgKyB0bXAzCisgICAgYWRkdSAgICAgICAgczMsIHMwLCBzMiAgICAgICAvLyB6MyArIHo0CisgICAgYWRkaXUgICAgICAgdDksIHplcm8sIDk2MzMgICAvLyBGSVhfMV8xNzU4NzU2MDIKKyAgICBtdWwgICAgICAgICBzMywgczMsIHQ5ICAgICAgIC8vIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKQorICAgIGFkZHUgICAgICAgIHQ4LCB0MCwgdDMgICAgICAgLy8gejEgPSB0bXAwICsgdG1wMworICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAyNDQ2ICAgLy8gRklYXzBfMjk4NjMxMzM2CisgICAgbXVsICAgICAgICAgdDAsIHQwLCB0OSAgICAgICAvLyB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAxNjgxOSAgLy8gRklYXzJfMDUzMTE5ODY5CisgICAgbXVsICAgICAgICAgdDIsIHQyLCB0OSAgICAgICAvLyB0bXAxID0gTVVMVElQTFkodG1wMSwgRklYXzJfMDUzMTE5ODY5KQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAyNTE3MiAgLy8gRklYXzNfMDcyNzExMDI2CisgICAgbXVsICAgICAgICAgdDEsIHQxLCB0OSAgICAgICAvLyB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAxMjI5OSAgLy8gRklYXzFfNTAxMzIxMTEwCisgICAgbXVsICAgICAgICAgdDMsIHQzLCB0OSAgICAgICAvLyB0bXAzID0gTVVMVElQTFkodG1wMywgRklYXzFfNTAxMzIxMTEwKQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAxNjA2OSAgLy8gRklYXzFfOTYxNTcwNTYwCisgICAgbXVsICAgICAgICAgczAsIHMwLCB0OSAgICAgICAvLyAtejMgPSBNVUxUSVBMWSh6MywgRklYXzFfOTYxNTcwNTYwKQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAzMTk2ICAgLy8gRklYXzBfMzkwMTgwNjQ0CisgICAgbXVsICAgICAgICAgczIsIHMyLCB0OSAgICAgICAvLyAtejQgPSBNVUxUSVBMWSh6NCwgRklYXzBfMzkwMTgwNjQ0KQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCA3MzczICAgLy8gRklYXzBfODk5OTc2MjIzCisgICAgbXVsICAgICAgICAgdDgsIHQ4LCB0OSAgICAgICAvLyAtejEgPSBNVUxUSVBMWSh6MSwgRklYXzBfODk5OTc2MjIzKQorICAgIGFkZGl1ICAgICAgIHQ5LCB6ZXJvLCAyMDk5NSAgLy8gRklYXzJfNTYyOTE1NDQ3CisgICAgbXVsICAgICAgICAgczEsIHMxLCB0OSAgICAgICAvLyAtejIgPSBNVUxUSVBMWSh6MiwgRklYXzJfNTYyOTE1NDQ3KQorICAgIHN1YnUgICAgICAgIHMwLCBzMywgczAgICAgICAgLy8gejMgKz0gejUKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHMwICAgICAgIC8vIHRtcDAgKz0gejMKKyAgICBhZGR1ICAgICAgICB0MSwgdDEsIHMwICAgICAgIC8vIHRtcDIgKz0gejMKKyAgICBzdWJ1ICAgICAgICBzMiwgczMsIHMyICAgICAgIC8vIHo0ICs9IHo1CisgICAgYWRkdSAgICAgICAgdDIsIHQyLCBzMiAgICAgICAvLyB0bXAxICs9IHo0CisgICAgYWRkdSAgICAgICAgdDMsIHQzLCBzMiAgICAgICAvLyB0bXAzICs9IHo0CisgICAgc3VidSAgICAgICAgdDAsIHQwLCB0OCAgICAgICAvLyB0bXAwICs9IHoxCisgICAgc3VidSAgICAgICAgdDEsIHQxLCBzMSAgICAgICAvLyB0bXAyICs9IHoyCisgICAgc3VidSAgICAgICAgdDIsIHQyLCBzMSAgICAgICAvLyB0bXAxICs9IHoyCisgICAgc3VidSAgICAgICAgdDMsIHQzLCB0OCAgICAgICAvLyB0bXAzICs9IHoxCisgICAgbXVsICAgICAgICAgczAsIHQ0LCB0NSAgICAgICAvLyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pCisgICAgYWRkaXUgICAgICAgdDksIHplcm8sIDYyNzAgICAvLyBGSVhfMF83NjUzNjY4NjUKKyAgICBtdWwgICAgICAgICBzMSwgdDYsIHQ3ICAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSkKKyAgICBsaCAgICAgICAgICB0NCwgMChhMSkKKyAgICBsaCAgICAgICAgICB0NSwgMChhMCkKKyAgICBsaCAgICAgICAgICB0NiwgNjQoYTEpCisgICAgbGggICAgICAgICAgdDcsIDY0KGEwKQorICAgIG11bCAgICAgICAgIHMyLCB0OSwgczAgICAgICAgLy8gTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSkKKyAgICBtdWwgICAgICAgICB0NSwgdDQsIHQ1ICAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkKKyAgICBtdWwgICAgICAgICB0NiwgdDYsIHQ3ICAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSkKKyAgICBhZGRpdSAgICAgICB0OSwgemVybywgNDQzMyAgIC8vIEZJWF8wXzU0MTE5NjEwMAorICAgIGFkZHUgICAgICAgIHMzLCBzMCwgczEgICAgICAgLy8gejIgKyB6MworICAgIG11bCAgICAgICAgIHMzLCBzMywgdDkgICAgICAgLy8gejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApCisgICAgYWRkaXUgICAgICAgdDksIHplcm8sIDE1MTM3ICAvLyBGSVhfMV84NDc3NTkwNjUKKyAgICBtdWwgICAgICAgICB0OCwgczEsIHQ5ICAgICAgIC8vIE1VTFRJUExZKHozLCBGSVhfMV84NDc3NTkwNjUpCisgICAgYWRkdSAgICAgICAgdDQsIHQ1LCB0NgorICAgIHN1YnUgICAgICAgIHQ1LCB0NSwgdDYKKyAgICBzbGwgICAgICAgICB0NCwgdDQsIDEzICAgICAgLy8gdG1wMCA9ICh6MiArIHozKSA8PCBDT05TVF9CSVRTCisgICAgc2xsICAgICAgICAgdDUsIHQ1LCAxMyAgICAgIC8vIHRtcDEgPSAoejIgLSB6MykgPDwgQ09OU1RfQklUUworICAgIGFkZHUgICAgICAgIHQ3LCBzMywgczIgICAgICAvLyB0bXAzID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KQorICAgIHN1YnUgICAgICAgIHQ2LCBzMywgdDggICAgICAvLyB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLUZJWF8xXzg0Nzc1OTA2NSkKKyAgICBhZGR1ICAgICAgICBzMCwgdDQsIHQ3CisgICAgc3VidSAgICAgICAgczEsIHQ0LCB0NworICAgIGFkZHUgICAgICAgIHMyLCB0NSwgdDYKKyAgICBzdWJ1ICAgICAgICBzMywgdDUsIHQ2CisgICAgYWRkdSAgICAgICAgdDQsIHMwLCB0MworICAgIHN1YnUgICAgICAgIHMwLCBzMCwgdDMKKyAgICBhZGR1ICAgICAgICB0MywgczIsIHQxCisgICAgc3VidSAgICAgICAgczIsIHMyLCB0MQorICAgIGFkZHUgICAgICAgIHQxLCBzMywgdDIKKyAgICBzdWJ1ICAgICAgICBzMywgczMsIHQyCisgICAgYWRkdSAgICAgICAgdDIsIHMxLCB0MAorICAgIHN1YnUgICAgICAgIHMxLCBzMSwgdDAKKyAgICBzaHJhX3IudyAgICB0NCwgdDQsIDExCisgICAgc2hyYV9yLncgICAgdDMsIHQzLCAxMQorICAgIHNocmFfci53ICAgIHQxLCB0MSwgMTEKKyAgICBzaHJhX3IudyAgICB0MiwgdDIsIDExCisgICAgc2hyYV9yLncgICAgczEsIHMxLCAxMQorICAgIHNocmFfci53ICAgIHMzLCBzMywgMTEKKyAgICBzaHJhX3IudyAgICBzMiwgczIsIDExCisgICAgc2hyYV9yLncgICAgczAsIHMwLCAxMQorICAgIHN3ICAgICAgICAgIHQ0LCAwKHYwKQorICAgIHN3ICAgICAgICAgIHQzLCAzMih2MCkKKyAgICBzdyAgICAgICAgICB0MSwgNjQodjApCisgICAgc3cgICAgICAgICAgdDIsIDk2KHYwKQorICAgIHN3ICAgICAgICAgIHMxLCAxMjgodjApCisgICAgc3cgICAgICAgICAgczMsIDE2MCh2MCkKKyAgICBzdyAgICAgICAgICBzMiwgMTkyKHYwKQorICAgIHN3ICAgICAgICAgIHMwLCAyMjQodjApCiszOgorICAgIGFkZGl1ICAgICAgIGExLCBhMSwgMgorICAgIGFkZGl1ICAgICAgIGEwLCBhMCwgMgorICAgIGJndHogICAgICAgIHYxLCAxYgorICAgICBhZGRpdSAgICAgIHYwLCB2MCwgNAorICAgIG1vdmUgICAgICAgIHYwLCBzcAorICAgIGFkZGl1ICAgICAgIHYxLCB6ZXJvLCA4Cis0OgorICAgIGx3ICAgICAgICAgIHQwLCA4KHYwKSAgICAgICAvLyB6MiA9IChKTE9ORyl3c3B0clsyXQorICAgIGx3ICAgICAgICAgIHQxLCAyNCh2MCkgICAgICAvLyB6MyA9IChKTE9ORyl3c3B0cls2XQorICAgIGx3ICAgICAgICAgIHQyLCAwKHYwKSAgICAgICAvLyAoSkxPTkcpd3NwdHJbMF0KKyAgICBsdyAgICAgICAgICB0MywgMTYodjApICAgICAgLy8gKEpMT05HKXdzcHRyWzRdCisgICAgbHcgICAgICAgICAgczQsIDQodjApICAgICAgIC8vIChKTE9ORyl3c3B0clsxXQorICAgIGx3ICAgICAgICAgIHM1LCAxMih2MCkgICAgICAvLyAoSkxPTkcpd3NwdHJbM10KKyAgICBsdyAgICAgICAgICBzNiwgMjAodjApICAgICAgLy8gKEpMT05HKXdzcHRyWzVdCisgICAgbHcgICAgICAgICAgczcsIDI4KHYwKSAgICAgIC8vIChKTE9ORyl3c3B0cls3XQorICAgIG9yICAgICAgICAgIHM0LCBzNCwgdDAKKyAgICBvciAgICAgICAgICBzNCwgczQsIHQxCisgICAgb3IgICAgICAgICAgczQsIHM0LCB0MworICAgIG9yICAgICAgICAgIHM0LCBzNCwgczcKKyAgICBvciAgICAgICAgICBzNCwgczQsIHM1CisgICAgb3IgICAgICAgICAgczQsIHM0LCBzNgorICAgIGJuZXogICAgICAgIHM0LCA1ZgorICAgICBhZGRpdSAgICAgIHYxLCB2MSwgLTEKKyAgICBzaHJhX3IudyAgICBzNSwgdDIsIDUKKyAgICBhbmRpICAgICAgICBzNSwgczUsIDB4M2ZmCisgICAgbGJ1eCAgICAgICAgczUsIHM1KGEzKQorICAgIGx3ICAgICAgICAgIHMxLCAwKGEyKQorICAgIHJlcGx2LnFiICAgIHM1LCBzNQorICAgIHVzdyAgICAgICAgIHM1LCAwKHMxKQorICAgIHVzdyAgICAgICAgIHM1LCA0KHMxKQorICAgIGIgICAgICAgICAgIDZmCisgICAgIG5vcAorNToKKyAgICBhZGR1ICAgICAgICB0NCwgdDAsIHQxICAgICAgIC8vIHoyICsgejMKKyAgICBhZGRpdSAgICAgICB0OCwgemVybywgNDQzMyAgIC8vIEZJWF8wXzU0MTE5NjEwMAorICAgIG11bCAgICAgICAgIHQ1LCB0NCwgdDggICAgICAgLy8gejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDE1MTM3ICAvLyBGSVhfMV84NDc3NTkwNjUKKyAgICBtdWwgICAgICAgICB0MSwgdDEsIHQ4ICAgICAgIC8vIE1VTFRJUExZKHozLCBGSVhfMV84NDc3NTkwNjUpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDYyNzAgICAvLyBGSVhfMF83NjUzNjY4NjUKKyAgICBtdWwgICAgICAgICB0MCwgdDAsIHQ4ICAgICAgIC8vIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpCisgICAgYWRkdSAgICAgICAgdDQsIHQyLCB0MyAgICAgICAvLyAoSkxPTkcpd3NwdHJbMF0gKyAoSkxPTkcpd3NwdHJbNF0KKyAgICBzdWJ1ICAgICAgICB0MiwgdDIsIHQzICAgICAgIC8vIChKTE9ORyl3c3B0clswXSAtIChKTE9ORyl3c3B0cls0XQorICAgIHNsbCAgICAgICAgIHQ0LCB0NCwgMTMgICAgICAgLy8gdG1wMCA9ICh3c3B0clswXSArIHdzcHRyWzRdKSA8PCBDT05TVF9CSVRTCisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxMyAgICAgICAvLyB0bXAxID0gKHdzcHRyWzBdIC0gd3NwdHJbNF0pIDw8IENPTlNUX0JJVFMKKyAgICBzdWJ1ICAgICAgICB0MSwgdDUsIHQxICAgICAgIC8vIHRtcDIgPSB6MSArIE1VTFRJUExZKHozLCAtRklYXzFfODQ3NzU5MDY1KQorICAgIHN1YnUgICAgICAgIHQzLCB0MiwgdDEgICAgICAgLy8gdG1wMTIgPSB0bXAxIC0gdG1wMgorICAgIGFkZHUgICAgICAgIHQyLCB0MiwgdDEgICAgICAgLy8gdG1wMTEgPSB0bXAxICsgdG1wMgorICAgIGFkZHUgICAgICAgIHQ1LCB0NSwgdDAgICAgICAgLy8gdG1wMyA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSkKKyAgICBzdWJ1ICAgICAgICB0MSwgdDQsIHQ1ICAgICAgIC8vIHRtcDEzID0gdG1wMCAtIHRtcDMKKyAgICBhZGR1ICAgICAgICB0MCwgdDQsIHQ1ICAgICAgIC8vIHRtcDEwID0gdG1wMCArIHRtcDMKKyAgICBsdyAgICAgICAgICB0NCwgMjgodjApICAgICAgIC8vIHRtcDAgPSAoSkxPTkcpd3NwdHJbN10KKyAgICBsdyAgICAgICAgICB0NiwgMTIodjApICAgICAgIC8vIHRtcDIgPSAoSkxPTkcpd3NwdHJbM10KKyAgICBsdyAgICAgICAgICB0NSwgMjAodjApICAgICAgIC8vIHRtcDEgPSAoSkxPTkcpd3NwdHJbNV0KKyAgICBsdyAgICAgICAgICB0NywgNCh2MCkgICAgICAgIC8vIHRtcDMgPSAoSkxPTkcpd3NwdHJbMV0KKyAgICBhZGR1ICAgICAgICBzMCwgdDQsIHQ2ICAgICAgIC8vIHozID0gdG1wMCArIHRtcDIKKyAgICBhZGRpdSAgICAgICB0OCwgemVybywgOTYzMyAgIC8vIEZJWF8xXzE3NTg3NTYwMgorICAgIGFkZHUgICAgICAgIHMxLCB0NSwgdDcgICAgICAgLy8gejQgPSB0bXAxICsgdG1wMworICAgIGFkZHUgICAgICAgIHMyLCBzMCwgczEgICAgICAgLy8gejMgKyB6NAorICAgIG11bCAgICAgICAgIHMyLCBzMiwgdDggICAgICAgLy8gejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpCisgICAgYWRkdSAgICAgICAgczMsIHQ0LCB0NyAgICAgICAvLyB6MSA9IHRtcDAgKyB0bXAzCisgICAgYWRkdSAgICAgICAgdDksIHQ1LCB0NiAgICAgICAvLyB6MiA9IHRtcDEgKyB0bXAyCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDE2MDY5ICAvLyBGSVhfMV85NjE1NzA1NjAKKyAgICBtdWwgICAgICAgICBzMCwgczAsIHQ4ICAgICAgIC8vIC16MyA9IE1VTFRJUExZKHozLCBGSVhfMV85NjE1NzA1NjApCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDMxOTYgICAvLyBGSVhfMF8zOTAxODA2NDQKKyAgICBtdWwgICAgICAgICBzMSwgczEsIHQ4ICAgICAgIC8vIC16NCA9IE1VTFRJUExZKHo0LCBGSVhfMF8zOTAxODA2NDQpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDI0NDYgICAvLyBGSVhfMF8yOTg2MzEzMzYKKyAgICBtdWwgICAgICAgICB0NCwgdDQsIHQ4ICAgICAgIC8vIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDczNzMgICAvLyBGSVhfMF84OTk5NzYyMjMKKyAgICBtdWwgICAgICAgICBzMywgczMsIHQ4ICAgICAgIC8vIC16MSA9IE1VTFRJUExZKHoxLCBGSVhfMF84OTk5NzYyMjMpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDE2ODE5ICAvLyBGSVhfMl8wNTMxMTk4NjkKKyAgICBtdWwgICAgICAgICB0NSwgdDUsIHQ4ICAgICAgIC8vIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDIwOTk1ICAvLyBGSVhfMl81NjI5MTU0NDcKKyAgICBtdWwgICAgICAgICB0OSwgdDksIHQ4ICAgICAgIC8vIC16MiA9IE1VTFRJUExZKHoyLCBGSVhfMl81NjI5MTU0NDcpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDI1MTcyICAvLyBGSVhfM18wNzI3MTEwMjYKKyAgICBtdWwgICAgICAgICB0NiwgdDYsIHQ4ICAgICAgIC8vIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpCisgICAgYWRkaXUgICAgICAgdDgsIHplcm8sIDEyMjk5ICAvLyBGSVhfMV81MDEzMjExMTAKKyAgICBtdWwgICAgICAgICB0NywgdDcsIHQ4ICAgICAgIC8vIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApCisgICAgc3VidSAgICAgICAgczAsIHMyLCBzMCAgICAgICAvLyB6MyArPSB6NQorICAgIHN1YnUgICAgICAgIHMxLCBzMiwgczEgICAgICAgLy8gejQgKz0gejUKKyAgICBhZGR1ICAgICAgICB0NCwgdDQsIHMwCisgICAgc3VidSAgICAgICAgdDQsIHQ0LCBzMyAgICAgIC8vIHRtcDAKKyAgICBhZGR1ICAgICAgICB0NSwgdDUsIHMxCisgICAgc3VidSAgICAgICAgdDUsIHQ1LCB0OSAgICAgIC8vIHRtcDEKKyAgICBhZGR1ICAgICAgICB0NiwgdDYsIHMwCisgICAgc3VidSAgICAgICAgdDYsIHQ2LCB0OSAgICAgIC8vIHRtcDIKKyAgICBhZGR1ICAgICAgICB0NywgdDcsIHMxCisgICAgc3VidSAgICAgICAgdDcsIHQ3LCBzMyAgICAgIC8vIHRtcDMKKyAgICBhZGR1ICAgICAgICBzMCwgdDAsIHQ3CisgICAgc3VidSAgICAgICAgdDAsIHQwLCB0NworICAgIGFkZHUgICAgICAgIHQ3LCB0MiwgdDYKKyAgICBzdWJ1ICAgICAgICB0MiwgdDIsIHQ2CisgICAgYWRkdSAgICAgICAgdDYsIHQzLCB0NQorICAgIHN1YnUgICAgICAgIHQzLCB0MywgdDUKKyAgICBhZGR1ICAgICAgICB0NSwgdDEsIHQ0CisgICAgc3VidSAgICAgICAgdDEsIHQxLCB0NAorICAgIHNocmFfci53ICAgIHMwLCBzMCwgMTgKKyAgICBzaHJhX3IudyAgICB0NywgdDcsIDE4CisgICAgc2hyYV9yLncgICAgdDYsIHQ2LCAxOAorICAgIHNocmFfci53ICAgIHQ1LCB0NSwgMTgKKyAgICBzaHJhX3IudyAgICB0MSwgdDEsIDE4CisgICAgc2hyYV9yLncgICAgdDMsIHQzLCAxOAorICAgIHNocmFfci53ICAgIHQyLCB0MiwgMTgKKyAgICBzaHJhX3IudyAgICB0MCwgdDAsIDE4CisgICAgYW5kaSAgICAgICAgczAsIHMwLCAweDNmZgorICAgIGFuZGkgICAgICAgIHQ3LCB0NywgMHgzZmYKKyAgICBhbmRpICAgICAgICB0NiwgdDYsIDB4M2ZmCisgICAgYW5kaSAgICAgICAgdDUsIHQ1LCAweDNmZgorICAgIGFuZGkgICAgICAgIHQxLCB0MSwgMHgzZmYKKyAgICBhbmRpICAgICAgICB0MywgdDMsIDB4M2ZmCisgICAgYW5kaSAgICAgICAgdDIsIHQyLCAweDNmZgorICAgIGFuZGkgICAgICAgIHQwLCB0MCwgMHgzZmYKKyAgICBsdyAgICAgICAgICBzMSwgMChhMikKKyAgICBsYnV4ICAgICAgICBzMCwgczAoYTMpCisgICAgbGJ1eCAgICAgICAgdDcsIHQ3KGEzKQorICAgIGxidXggICAgICAgIHQ2LCB0NihhMykKKyAgICBsYnV4ICAgICAgICB0NSwgdDUoYTMpCisgICAgbGJ1eCAgICAgICAgdDEsIHQxKGEzKQorICAgIGxidXggICAgICAgIHQzLCB0MyhhMykKKyAgICBsYnV4ICAgICAgICB0MiwgdDIoYTMpCisgICAgbGJ1eCAgICAgICAgdDAsIHQwKGEzKQorICAgIHNiICAgICAgICAgIHMwLCAwKHMxKQorICAgIHNiICAgICAgICAgIHQ3LCAxKHMxKQorICAgIHNiICAgICAgICAgIHQ2LCAyKHMxKQorICAgIHNiICAgICAgICAgIHQ1LCAzKHMxKQorICAgIHNiICAgICAgICAgIHQxLCA0KHMxKQorICAgIHNiICAgICAgICAgIHQzLCA1KHMxKQorICAgIHNiICAgICAgICAgIHQyLCA2KHMxKQorICAgIHNiICAgICAgICAgIHQwLCA3KHMxKQorNjoKKyAgICBhZGRpdSAgICAgICB2MCwgdjAsIDMyCisgICAgYmd0eiAgICAgICAgdjEsIDRiCisgICAgIGFkZGl1ICAgICAgYTIsIGEyLCA0CisgICAgYWRkaXUgICAgICAgc3AsIHNwLCAyNTYKKworICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorCitFTkQoanNpbWRfaWRjdF9pc2xvd19kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX2lkY3RfaWZhc3RfY29sc19kc3ByMikKKy8qCisgKiBhMCA9IGlucHRyCisgKiBhMSA9IHF1YW50cHRyCisgKiBhMiA9IHdzcHRyCisgKiBhMyA9IG1pcHNfaWRjdF9pZmFzdF9jb2VmcworICovCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGFkZGl1ICAgICAgICAgdDksIGEwLCAxNiAgICAgIC8vIGVuZCBhZGRyZXNzCisgICAgb3IgICAgICAgICAgICBBVCwgYTMsIHplcm8KKworMDoKKyAgICBsdyAgICAgICAgICAgIHMwLCAwKGExKSAgICAgICAvLyBxdWFudHB0cltEQ1RTSVpFKjBdCisgICAgbHcgICAgICAgICAgICB0MCwgMChhMCkgICAgICAgLy8gaW5wdHJbRENUU0laRSowXQorICAgIGx3ICAgICAgICAgICAgdDEsIDE2KGEwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqMV0KKyAgICBtdWxlcV9zLncucGhsIHYwLCB0MCwgczAgICAgICAvLyB0bXAwIC4uLgorICAgIGx3ICAgICAgICAgICAgdDIsIDMyKGEwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqMl0KKyAgICBsdyAgICAgICAgICAgIHQzLCA0OChhMCkgICAgICAvLyBpbnB0cltEQ1RTSVpFKjNdCisgICAgbHcgICAgICAgICAgICB0NCwgNjQoYTApICAgICAgLy8gaW5wdHJbRENUU0laRSo0XQorICAgIGx3ICAgICAgICAgICAgdDUsIDgwKGEwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqNV0KKyAgICBtdWxlcV9zLncucGhyIHQwLCB0MCwgczAgICAgICAvLyAuLi4gdG1wMCAuLi4KKyAgICBsdyAgICAgICAgICAgIHQ2LCA5NihhMCkgICAgICAvLyBpbnB0cltEQ1RTSVpFKjZdCisgICAgbHcgICAgICAgICAgICB0NywgMTEyKGEwKSAgICAgLy8gaW5wdHJbRENUU0laRSo3XQorICAgIG9yICAgICAgICAgICAgczQsIHQxLCB0MgorICAgIG9yICAgICAgICAgICAgczUsIHQzLCB0NAorICAgIGJuZXogICAgICAgICAgczQsIDFmCisgICAgIGlucyAgICAgICAgICB0MCwgdjAsIDE2LCAxNiAgLy8gLi4uIHRtcDAKKyAgICBibmV6ICAgICAgICAgIHM1LCAxZgorICAgICBvciAgICAgICAgICAgczYsIHQ1LCB0NgorICAgIG9yICAgICAgICAgICAgczYsIHM2LCB0NworICAgIGJuZXogICAgICAgICAgczYsIDFmCisgICAgIHN3ICAgICAgICAgICB0MCwgMChhMikgICAgICAgLy8gd3NwdHJbRENUU0laRSowXQorICAgIHN3ICAgICAgICAgICAgdDAsIDE2KGEyKSAgICAgIC8vIHdzcHRyW0RDVFNJWkUqMV0KKyAgICBzdyAgICAgICAgICAgIHQwLCAzMihhMikgICAgICAvLyB3c3B0cltEQ1RTSVpFKjJdCisgICAgc3cgICAgICAgICAgICB0MCwgNDgoYTIpICAgICAgLy8gd3NwdHJbRENUU0laRSozXQorICAgIHN3ICAgICAgICAgICAgdDAsIDY0KGEyKSAgICAgIC8vIHdzcHRyW0RDVFNJWkUqNF0KKyAgICBzdyAgICAgICAgICAgIHQwLCA4MChhMikgICAgICAvLyB3c3B0cltEQ1RTSVpFKjVdCisgICAgc3cgICAgICAgICAgICB0MCwgOTYoYTIpICAgICAgLy8gd3NwdHJbRENUU0laRSo2XQorICAgIHN3ICAgICAgICAgICAgdDAsIDExMihhMikgICAgIC8vIHdzcHRyW0RDVFNJWkUqN10KKyAgICBhZGRpdSAgICAgICAgIGEwLCBhMCwgNAorICAgIGIgICAgICAgICAgICAgMmYKKyAgICAgYWRkaXUgICAgICAgIGExLCBhMSwgNAorCisxOgorICAgIGx3ICAgICAgICAgICAgczEsIDMyKGExKSAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqMl0KKyAgICBsdyAgICAgICAgICAgIHMyLCA2NChhMSkgICAgICAvLyBxdWFudHB0cltEQ1RTSVpFKjRdCisgICAgbXVsZXFfcy53LnBobCB2MCwgdDIsIHMxICAgICAgLy8gdG1wMSAuLi4KKyAgICBtdWxlcV9zLncucGhyIHQyLCB0MiwgczEgICAgICAvLyAuLi4gdG1wMSAuLi4KKyAgICBsdyAgICAgICAgICAgIHMwLCAxNihhMSkgICAgICAvLyBxdWFudHB0cltEQ1RTSVpFKjFdCisgICAgbHcgICAgICAgICAgICBzMSwgNDgoYTEpICAgICAgLy8gcXVhbnRwdHJbRENUU0laRSozXQorICAgIGx3ICAgICAgICAgICAgczMsIDk2KGExKSAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqNl0KKyAgICBtdWxlcV9zLncucGhsIHYxLCB0NCwgczIgICAgICAvLyB0bXAyIC4uLgorICAgIG11bGVxX3Mudy5waHIgdDQsIHQ0LCBzMiAgICAgIC8vIC4uLiB0bXAyIC4uLgorICAgIGx3ICAgICAgICAgICAgczIsIDgwKGExKSAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqNV0KKyAgICBsdyAgICAgICAgICAgIHQ4LCA0KEFUKSAgICAgICAvLyBGSVgoMS40MTQyMTM1NjIpCisgICAgaW5zICAgICAgICAgICB0MiwgdjAsIDE2LCAxNiAgLy8gLi4uIHRtcDEKKyAgICBtdWxlcV9zLncucGhsIHYwLCB0NiwgczMgICAgICAvLyB0bXAzIC4uLgorICAgIG11bGVxX3Mudy5waHIgdDYsIHQ2LCBzMyAgICAgIC8vIC4uLiB0bXAzIC4uLgorICAgIGlucyAgICAgICAgICAgdDQsIHYxLCAxNiwgMTYgIC8vIC4uLiB0bXAyCisgICAgYWRkcS5waCAgICAgICBzNCwgdDAsIHQ0ICAgICAgLy8gdG1wMTAKKyAgICBzdWJxLnBoICAgICAgIHM1LCB0MCwgdDQgICAgICAvLyB0bXAxMQorICAgIGlucyAgICAgICAgICAgdDYsIHYwLCAxNiwgMTYgIC8vIC4uLiB0bXAzCisgICAgc3VicS5waCAgICAgICBzNiwgdDIsIHQ2ICAgICAgLy8gdG1wMTIgLi4uCisgICAgYWRkcS5waCAgICAgICBzNywgdDIsIHQ2ICAgICAgLy8gdG1wMTMKKyAgICBtdWxxX3MucGggICAgIHM2LCBzNiwgdDggICAgICAvLyAuLi4gdG1wMTIgLi4uCisgICAgYWRkcS5waCAgICAgICB0MCwgczQsIHM3ICAgICAgLy8gdG1wMAorICAgIHN1YnEucGggICAgICAgdDYsIHM0LCBzNyAgICAgIC8vIHRtcDMKKyAgICBtdWxlcV9zLncucGhsIHYwLCB0MSwgczAgICAgICAvLyB0bXA0IC4uLgorICAgIG11bGVxX3Mudy5waHIgdDEsIHQxLCBzMCAgICAgIC8vIC4uLiB0bXA0IC4uLgorICAgIHNobGxfcy5waCAgICAgczYsIHM2LCAxICAgICAgIC8vIHgyCisgICAgbHcgICAgICAgICAgICBzMywgMTEyKGExKSAgICAgLy8gcXVhbnRwdHJbRENUU0laRSo3XQorICAgIHN1YnEucGggICAgICAgczYsIHM2LCBzNyAgICAgIC8vIC4uLiB0bXAxMgorICAgIG11bGVxX3Mudy5waGwgdjEsIHQ3LCBzMyAgICAgIC8vIHRtcDcgLi4uCisgICAgbXVsZXFfcy53LnBociB0NywgdDcsIHMzICAgICAgLy8gLi4uIHRtcDcgLi4uCisgICAgaW5zICAgICAgICAgICB0MSwgdjAsIDE2LCAxNiAgLy8gLi4uIHRtcDQKKyAgICBhZGRxLnBoICAgICAgIHQyLCBzNSwgczYgICAgICAvLyB0bXAxCisgICAgc3VicS5waCAgICAgICB0NCwgczUsIHM2ICAgICAgLy8gdG1wMgorICAgIG11bGVxX3Mudy5waGwgdjAsIHQ1LCBzMiAgICAgIC8vIHRtcDYgLi4uCisgICAgbXVsZXFfcy53LnBociB0NSwgdDUsIHMyICAgICAgLy8gLi4uIHRtcDYgLi4uCisgICAgaW5zICAgICAgICAgICB0NywgdjEsIDE2LCAxNiAgLy8gLi4uIHRtcDcKKyAgICBhZGRxLnBoICAgICAgIHM1LCB0MSwgdDcgICAgICAvLyB6MTEKKyAgICBzdWJxLnBoICAgICAgIHM2LCB0MSwgdDcgICAgICAvLyB6MTIKKyAgICBtdWxlcV9zLncucGhsIHYxLCB0MywgczEgICAgICAvLyB0bXA1IC4uLgorICAgIG11bGVxX3Mudy5waHIgdDMsIHQzLCBzMSAgICAgIC8vIC4uLiB0bXA1IC4uLgorICAgIGlucyAgICAgICAgICAgdDUsIHYwLCAxNiwgMTYgIC8vIC4uLiB0bXA2CisgICAgaW5zICAgICAgICAgICB0MywgdjEsIDE2LCAxNiAgLy8gLi4uIHRtcDUKKyAgICBhZGRxLnBoICAgICAgIHM3LCB0NSwgdDMgICAgICAvLyB6MTMKKyAgICBzdWJxLnBoICAgICAgIHYwLCB0NSwgdDMgICAgICAvLyB6MTAKKyAgICBhZGRxLnBoICAgICAgIHQ3LCBzNSwgczcgICAgICAvLyB0bXA3CisgICAgc3VicS5waCAgICAgICBzNSwgczUsIHM3ICAgICAgLy8gdG1wMTEgLi4uCisgICAgYWRkcS5waCAgICAgICB2MSwgdjAsIHM2ICAgICAgLy8gejUgLi4uCisgICAgbXVscV9zLnBoICAgICBzNSwgczUsIHQ4ICAgICAgLy8gLi4uIHRtcDExCisgICAgbHcgICAgICAgICAgICB0OCwgOChBVCkgICAgICAgLy8gRklYKDEuODQ3NzU5MDY1KQorICAgIGx3ICAgICAgICAgICAgczQsIDAoQVQpICAgICAgIC8vIEZJWCgxLjA4MjM5MjIwMCkKKyAgICBhZGRxLnBoICAgICAgIHMwLCB0MCwgdDcKKyAgICBzdWJxLnBoICAgICAgIHMxLCB0MCwgdDcKKyAgICBtdWxxX3MucGggICAgIHYxLCB2MSwgdDggICAgICAvLyAuLi4gejUKKyAgICBzaGxsX3MucGggICAgIHM1LCBzNSwgMSAgICAgICAvLyB4MgorICAgIGx3ICAgICAgICAgICAgdDgsIDEyKEFUKSAgICAgIC8vIEZJWCgtMi42MTMxMjU5MzApCisgICAgc3cgICAgICAgICAgICBzMCwgMChhMikgICAgICAgLy8gd3NwdHJbRENUU0laRSowXQorICAgIHNobGxfcy5waCAgICAgdjAsIHYwLCAxICAgICAgIC8vIHg0CisgICAgbXVscV9zLnBoICAgICB2MCwgdjAsIHQ4ICAgICAgLy8gdG1wMTIgLi4uCisgICAgbXVscV9zLnBoICAgICBzNCwgczYsIHM0ICAgICAgLy8gdG1wMTAgLi4uCisgICAgc2hsbF9zLnBoICAgICB2MSwgdjEsIDEgICAgICAgLy8geDIKKyAgICBhZGRpdSAgICAgICAgIGEwLCBhMCwgNAorICAgIGFkZGl1ICAgICAgICAgYTEsIGExLCA0CisgICAgc3cgICAgICAgICAgICBzMSwgMTEyKGEyKSAgICAgLy8gd3NwdHJbRENUU0laRSo3XQorICAgIHNobGxfcy5waCAgICAgczYsIHYwLCAxICAgICAgIC8vIHg0CisgICAgc2hsbF9zLnBoICAgICBzNCwgczQsIDEgICAgICAgLy8geDIKKyAgICBhZGRxLnBoICAgICAgIHM2LCBzNiwgdjEgICAgICAvLyAuLi4gdG1wMTIKKyAgICBzdWJxLnBoICAgICAgIHQ1LCBzNiwgdDcgICAgICAvLyB0bXA2CisgICAgc3VicS5waCAgICAgICBzNCwgczQsIHYxICAgICAgLy8gLi4uIHRtcDEwCisgICAgc3VicS5waCAgICAgICB0MywgczUsIHQ1ICAgICAgLy8gdG1wNQorICAgIGFkZHEucGggICAgICAgczIsIHQyLCB0NQorICAgIGFkZHEucGggICAgICAgdDEsIHM0LCB0MyAgICAgIC8vIHRtcDQKKyAgICBzdWJxLnBoICAgICAgIHMzLCB0MiwgdDUKKyAgICBzdyAgICAgICAgICAgIHMyLCAxNihhMikgICAgICAvLyB3c3B0cltEQ1RTSVpFKjFdCisgICAgc3cgICAgICAgICAgICBzMywgOTYoYTIpICAgICAgLy8gd3NwdHJbRENUU0laRSo2XQorICAgIGFkZHEucGggICAgICAgdjAsIHQ0LCB0MworICAgIHN1YnEucGggICAgICAgdjEsIHQ0LCB0MworICAgIHN3ICAgICAgICAgICAgdjAsIDMyKGEyKSAgICAgIC8vIHdzcHRyW0RDVFNJWkUqMl0KKyAgICBzdyAgICAgICAgICAgIHYxLCA4MChhMikgICAgICAvLyB3c3B0cltEQ1RTSVpFKjVdCisgICAgYWRkcS5waCAgICAgICB2MCwgdDYsIHQxCisgICAgc3VicS5waCAgICAgICB2MSwgdDYsIHQxCisgICAgc3cgICAgICAgICAgICB2MCwgNjQoYTIpICAgICAgLy8gd3NwdHJbRENUU0laRSo0XQorICAgIHN3ICAgICAgICAgICAgdjEsIDQ4KGEyKSAgICAgIC8vIHdzcHRyW0RDVFNJWkUqM10KKworMjoKKyAgICBibmUgICAgICAgICAgIGEwLCB0OSwgMGIKKyAgICAgYWRkaXUgICAgICAgIGEyLCBhMiwgNAorCisgICAgUkVTVE9SRV9SRUdTX0ZST01fU1RBQ0sgMzIsIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNworCisgICAgaiAgICAgICAgICAgICByYQorICAgICBub3AKKworRU5EKGpzaW1kX2lkY3RfaWZhc3RfY29sc19kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX2lkY3RfaWZhc3Rfcm93c19kc3ByMikKKy8qCisgKiBhMCA9IHdzcHRyCisgKiBhMSA9IG91dHB1dF9idWYKKyAqIGEyID0gb3V0cHV0X2NvbAorICogYTMgPSBtaXBzX2lkY3RfaWZhc3RfY29lZnMKKyAqLworICAgIFNBVkVfUkVHU19PTl9TVEFDSyA0MCwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgYTMKKworICAgIGFkZGl1ICAgICAgICAgdDksIGEwLCAxMjggICAgIC8vIGVuZCBhZGRyZXNzCisgICAgbHVpICAgICAgICAgICBzOCwgMHg4MDgwCisgICAgb3JpICAgICAgICAgICBzOCwgczgsIDB4ODA4MAorCiswOgorICAgIGx3ICAgICAgICAgICAgQVQsIDM2KHNwKSAgICAgIC8vIHJlc3RvcmUgJGEzIChtaXBzX2lkY3RfaWZhc3RfY29lZnMpCisgICAgbHcgICAgICAgICAgICB0MCwgMChhMCkgICAgICAgLy8gd3NwdHJbRENUU0laRSowKzAvMV0gIGIgYQorICAgIGx3ICAgICAgICAgICAgczAsIDE2KGEwKSAgICAgIC8vIHdzcHRyW0RDVFNJWkUqMSswLzFdICBCIEEKKyAgICBsdyAgICAgICAgICAgIHQyLCA0KGEwKSAgICAgICAvLyB3c3B0cltEQ1RTSVpFKjArMi8zXSAgZCBjCisgICAgbHcgICAgICAgICAgICBzMiwgMjAoYTApICAgICAgLy8gd3NwdHJbRENUU0laRSoxKzIvM10gIEQgQworICAgIGx3ICAgICAgICAgICAgdDQsIDgoYTApICAgICAgIC8vIHdzcHRyW0RDVFNJWkUqMCs0LzVdICBmIGUKKyAgICBsdyAgICAgICAgICAgIHM0LCAyNChhMCkgICAgICAvLyB3c3B0cltEQ1RTSVpFKjErNC81XSAgRiBFCisgICAgbHcgICAgICAgICAgICB0NiwgMTIoYTApICAgICAgLy8gd3NwdHJbRENUU0laRSowKzYvN10gIGggZworICAgIGx3ICAgICAgICAgICAgczYsIDI4KGEwKSAgICAgIC8vIHdzcHRyW0RDVFNJWkUqMSs2LzddICBIIEcKKyAgICBwcmVjcnEucGgudyAgIHQxLCBzMCwgdDAgICAgICAvLyBCIGIKKyAgICBpbnMgICAgICAgICAgIHQwLCBzMCwgMTYsIDE2ICAvLyBBIGEKKyAgICBibmV6ICAgICAgICAgIHQxLCAxZgorICAgICBvciAgICAgICAgICAgczAsIHQyLCBzMgorICAgIGJuZXogICAgICAgICAgczAsIDFmCisgICAgIG9yICAgICAgICAgICBzMCwgdDQsIHM0CisgICAgYm5leiAgICAgICAgICBzMCwgMWYKKyAgICAgb3IgICAgICAgICAgIHMwLCB0NiwgczYKKyAgICBibmV6ICAgICAgICAgIHMwLCAxZgorICAgICBzaGxsX3MucGggICAgczAsIHQwLCAyICAgICAgIC8vIEEgYQorICAgIGx3ICAgICAgICAgICAgYTMsIDAoYTEpCisgICAgbHcgICAgICAgICAgICBBVCwgNChhMSkKKyAgICBwcmVjcnEucGgudyAgIHQwLCBzMCwgczAgICAgICAvLyBBIEEKKyAgICBpbnMgICAgICAgICAgIHMwLCBzMCwgMTYsIDE2ICAvLyBhIGEKKyAgICBhZGR1ICAgICAgICAgIGEzLCBhMywgYTIKKyAgICBhZGR1ICAgICAgICAgIEFULCBBVCwgYTIKKyAgICBwcmVjcnEucWIucGggIHQwLCB0MCwgdDAgICAgICAvLyBBIEEgQSBBCisgICAgcHJlY3JxLnFiLnBoICBzMCwgczAsIHMwICAgICAgLy8gYSBhIGEgYQorICAgIGFkZHUucWIgICAgICAgczAsIHMwLCBzOAorICAgIGFkZHUucWIgICAgICAgdDAsIHQwLCBzOAorICAgIHN3ICAgICAgICAgICAgczAsIDAoYTMpCisgICAgc3cgICAgICAgICAgICBzMCwgNChhMykKKyAgICBzdyAgICAgICAgICAgIHQwLCAwKEFUKQorICAgIHN3ICAgICAgICAgICAgdDAsIDQoQVQpCisgICAgYWRkaXUgICAgICAgICBhMCwgYTAsIDMyCisgICAgYm5lICAgICAgICAgICBhMCwgdDksIDBiCisgICAgIGFkZGl1ICAgICAgICBhMSwgYTEsIDgKKyAgICBiICAgICAgICAgICAgIDJmCisgICAgIG5vcAorCisxOgorICAgIHByZWNycS5waC53ICAgdDMsIHMyLCB0MgorICAgIGlucyAgICAgICAgICAgdDIsIHMyLCAxNiwgMTYKKyAgICBwcmVjcnEucGgudyAgIHQ1LCBzNCwgdDQKKyAgICBpbnMgICAgICAgICAgIHQ0LCBzNCwgMTYsIDE2CisgICAgcHJlY3JxLnBoLncgICB0NywgczYsIHQ2CisgICAgaW5zICAgICAgICAgICB0NiwgczYsIDE2LCAxNgorICAgIGx3ICAgICAgICAgICAgdDgsIDQoQVQpICAgICAgIC8vIEZJWCgxLjQxNDIxMzU2MikKKyAgICBhZGRxLnBoICAgICAgIHM0LCB0MCwgdDQgICAgICAvLyB0bXAxMAorICAgIHN1YnEucGggICAgICAgczUsIHQwLCB0NCAgICAgIC8vIHRtcDExCisgICAgc3VicS5waCAgICAgICBzNiwgdDIsIHQ2ICAgICAgLy8gdG1wMTIgLi4uCisgICAgYWRkcS5waCAgICAgICBzNywgdDIsIHQ2ICAgICAgLy8gdG1wMTMKKyAgICBtdWxxX3MucGggICAgIHM2LCBzNiwgdDggICAgICAvLyAuLi4gdG1wMTIgLi4uCisgICAgYWRkcS5waCAgICAgICB0MCwgczQsIHM3ICAgICAgLy8gdG1wMAorICAgIHN1YnEucGggICAgICAgdDYsIHM0LCBzNyAgICAgIC8vIHRtcDMKKyAgICBzaGxsX3MucGggICAgIHM2LCBzNiwgMSAgICAgICAvLyB4MgorICAgIHN1YnEucGggICAgICAgczYsIHM2LCBzNyAgICAgIC8vIC4uLiB0bXAxMgorICAgIGFkZHEucGggICAgICAgdDIsIHM1LCBzNiAgICAgIC8vIHRtcDEKKyAgICBzdWJxLnBoICAgICAgIHQ0LCBzNSwgczYgICAgICAvLyB0bXAyCisgICAgYWRkcS5waCAgICAgICBzNSwgdDEsIHQ3ICAgICAgLy8gejExCisgICAgc3VicS5waCAgICAgICBzNiwgdDEsIHQ3ICAgICAgLy8gejEyCisgICAgYWRkcS5waCAgICAgICBzNywgdDUsIHQzICAgICAgLy8gejEzCisgICAgc3VicS5waCAgICAgICB2MCwgdDUsIHQzICAgICAgLy8gejEwCisgICAgYWRkcS5waCAgICAgICB0NywgczUsIHM3ICAgICAgLy8gdG1wNworICAgIHN1YnEucGggICAgICAgczUsIHM1LCBzNyAgICAgIC8vIHRtcDExIC4uLgorICAgIGFkZHEucGggICAgICAgdjEsIHYwLCBzNiAgICAgIC8vIHo1IC4uLgorICAgIG11bHFfcy5waCAgICAgczUsIHM1LCB0OCAgICAgIC8vIC4uLiB0bXAxMQorICAgIGx3ICAgICAgICAgICAgdDgsIDgoQVQpICAgICAgIC8vIEZJWCgxLjg0Nzc1OTA2NSkKKyAgICBsdyAgICAgICAgICAgIHM0LCAwKEFUKSAgICAgICAvLyBGSVgoMS4wODIzOTIyMDApCisgICAgYWRkcS5waCAgICAgICBzMCwgdDAsIHQ3ICAgICAgLy8gdG1wMCArIHRtcDcKKyAgICBzdWJxLnBoICAgICAgIHM3LCB0MCwgdDcgICAgICAvLyB0bXAwIC0gdG1wNworICAgIG11bHFfcy5waCAgICAgdjEsIHYxLCB0OCAgICAgIC8vIC4uLiB6NQorICAgIGx3ICAgICAgICAgICAgYTMsIDAoYTEpCisgICAgbHcgICAgICAgICAgICB0OCwgMTIoQVQpICAgICAgLy8gRklYKC0yLjYxMzEyNTkzMCkKKyAgICBzaGxsX3MucGggICAgIHM1LCBzNSwgMSAgICAgICAvLyB4MgorICAgIGFkZHUgICAgICAgICAgYTMsIGEzLCBhMgorICAgIHNobGxfcy5waCAgICAgdjAsIHYwLCAxICAgICAgIC8vIHg0CisgICAgbXVscV9zLnBoICAgICB2MCwgdjAsIHQ4ICAgICAgLy8gdG1wMTIgLi4uCisgICAgbXVscV9zLnBoICAgICBzNCwgczYsIHM0ICAgICAgLy8gdG1wMTAgLi4uCisgICAgc2hsbF9zLnBoICAgICB2MSwgdjEsIDEgICAgICAgLy8geDIKKyAgICBhZGRpdSAgICAgICAgIGEwLCBhMCwgMzIKKyAgICBhZGRpdSAgICAgICAgIGExLCBhMSwgOAorICAgIHNobGxfcy5waCAgICAgczYsIHYwLCAxICAgICAgIC8vIHg0CisgICAgc2hsbF9zLnBoICAgICBzNCwgczQsIDEgICAgICAgLy8geDIKKyAgICBhZGRxLnBoICAgICAgIHM2LCBzNiwgdjEgICAgICAvLyAuLi4gdG1wMTIKKyAgICBzaGxsX3MucGggICAgIHMwLCBzMCwgMgorICAgIHN1YnEucGggICAgICAgdDUsIHM2LCB0NyAgICAgIC8vIHRtcDYKKyAgICBzdWJxLnBoICAgICAgIHM0LCBzNCwgdjEgICAgICAvLyAuLi4gdG1wMTAKKyAgICBzdWJxLnBoICAgICAgIHQzLCBzNSwgdDUgICAgICAvLyB0bXA1CisgICAgc2hsbF9zLnBoICAgICBzNywgczcsIDIKKyAgICBhZGRxLnBoICAgICAgIHQxLCBzNCwgdDMgICAgICAvLyB0bXA0CisgICAgYWRkcS5waCAgICAgICBzMSwgdDIsIHQ1ICAgICAgLy8gdG1wMSArIHRtcDYKKyAgICBzdWJxLnBoICAgICAgIHM2LCB0MiwgdDUgICAgICAvLyB0bXAxIC0gdG1wNgorICAgIGFkZHEucGggICAgICAgczIsIHQ0LCB0MyAgICAgIC8vIHRtcDIgKyB0bXA1CisgICAgc3VicS5waCAgICAgICBzNSwgdDQsIHQzICAgICAgLy8gdG1wMiAtIHRtcDUKKyAgICBhZGRxLnBoICAgICAgIHM0LCB0NiwgdDEgICAgICAvLyB0bXAzICsgdG1wNAorICAgIHN1YnEucGggICAgICAgczMsIHQ2LCB0MSAgICAgIC8vIHRtcDMgLSB0bXA0CisgICAgc2hsbF9zLnBoICAgICBzMSwgczEsIDIKKyAgICBzaGxsX3MucGggICAgIHMyLCBzMiwgMgorICAgIHNobGxfcy5waCAgICAgczMsIHMzLCAyCisgICAgc2hsbF9zLnBoICAgICBzNCwgczQsIDIKKyAgICBzaGxsX3MucGggICAgIHM1LCBzNSwgMgorICAgIHNobGxfcy5waCAgICAgczYsIHM2LCAyCisgICAgcHJlY3JxLnBoLncgICB0MCwgczEsIHMwICAgICAgLy8gQiBBCisgICAgaW5zICAgICAgICAgICBzMCwgczEsIDE2LCAxNiAgLy8gYiBhCisgICAgcHJlY3JxLnBoLncgICB0MiwgczMsIHMyICAgICAgLy8gRCBDCisgICAgaW5zICAgICAgICAgICBzMiwgczMsIDE2LCAxNiAgLy8gZCBjCisgICAgcHJlY3JxLnBoLncgICB0NCwgczUsIHM0ICAgICAgLy8gRiBFCisgICAgaW5zICAgICAgICAgICBzNCwgczUsIDE2LCAxNiAgLy8gZiBlCisgICAgcHJlY3JxLnBoLncgICB0NiwgczcsIHM2ICAgICAgLy8gSCBHCisgICAgaW5zICAgICAgICAgICBzNiwgczcsIDE2LCAxNiAgLy8gaCBnCisgICAgcHJlY3JxLnFiLnBoICB0MCwgdDIsIHQwICAgICAgLy8gRCBDIEIgQQorICAgIHByZWNycS5xYi5waCAgczAsIHMyLCBzMCAgICAgIC8vIGQgYyBiIGEKKyAgICBwcmVjcnEucWIucGggIHQ0LCB0NiwgdDQgICAgICAvLyBIIEcgRiBFCisgICAgcHJlY3JxLnFiLnBoICBzNCwgczYsIHM0ICAgICAgLy8gaCBnIGYgZQorICAgIGFkZHUucWIgICAgICAgczAsIHMwLCBzOAorICAgIGFkZHUucWIgICAgICAgczQsIHM0LCBzOAorICAgIHN3ICAgICAgICAgICAgczAsIDAoYTMpICAgICAgIC8vIG91dHB0clswLzEvMi8zXSAgICAgICBkIGMgYiBhCisgICAgc3cgICAgICAgICAgICBzNCwgNChhMykgICAgICAgLy8gb3V0cHRyWzQvNS82LzddICAgICAgIGggZyBmIGUKKyAgICBsdyAgICAgICAgICAgIGEzLCAtNChhMSkKKyAgICBhZGR1LnFiICAgICAgIHQwLCB0MCwgczgKKyAgICBhZGR1ICAgICAgICAgIGEzLCBhMywgYTIKKyAgICBhZGR1LnFiICAgICAgIHQ0LCB0NCwgczgKKyAgICBzdyAgICAgICAgICAgIHQwLCAwKGEzKSAgICAgICAvLyBvdXRwdHJbMC8xLzIvM10gICAgICAgRCBDIEIgQQorICAgIGJuZSAgICAgICAgICAgYTAsIHQ5LCAwYgorICAgICBzdyAgICAgICAgICAgdDQsIDQoYTMpICAgICAgIC8vIG91dHB0cls0LzUvNi83XSAgICAgICBIIEcgRiBFCisKKzI6CisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyA0MCwgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgYTMKKworICAgIGogICAgICAgICAgICAgcmEKKyAgICAgbm9wCisKK0VORChqc2ltZF9pZGN0X2lmYXN0X3Jvd3NfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9mZGN0X2lzbG93X2RzcHIyKQorLyoKKyAqIGEwID0gZGF0YQorICovCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDQwLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4CisKKyAgICBsdWkgICAgICAgICB0MCwgNjQzNworICAgIG9yaSAgICAgICAgIHQwLCAyMjYwCisgICAgbHVpICAgICAgICAgdDEsIDk2MzMKKyAgICBvcmkgICAgICAgICB0MSwgMTEzNjMKKyAgICBsdWkgICAgICAgICB0MiwgMHhkMzllCisgICAgb3JpICAgICAgICAgdDIsIDB4ZTZkYworICAgIGx1aSAgICAgICAgIHQzLCAweGY3MmQKKyAgICBvcmkgICAgICAgICB0MywgOTYzMworICAgIGx1aSAgICAgICAgIHQ0LCAyMjYxCisgICAgb3JpICAgICAgICAgdDQsIDk2MzMKKyAgICBsdWkgICAgICAgICB0NSwgMHhkMzllCisgICAgb3JpICAgICAgICAgdDUsIDY0MzcKKyAgICBsdWkgICAgICAgICB0NiwgOTYzMworICAgIG9yaSAgICAgICAgIHQ2LCAweGQzOWQKKyAgICBsdWkgICAgICAgICB0NywgMHhlNmRjCisgICAgb3JpICAgICAgICAgdDcsIDIyNjAKKyAgICBsdWkgICAgICAgICB0OCwgNDQzMworICAgIG9yaSAgICAgICAgIHQ4LCAxMDcwMworICAgIGx1aSAgICAgICAgIHQ5LCAweGQ2MzAKKyAgICBvcmkgICAgICAgICB0OSwgNDQzMworICAgIGxpICAgICAgICAgIHM4LCA4CisgICAgbW92ZSAgICAgICAgYTEsIGEwCisxOgorICAgIGx3ICAgICAgICAgIHMwLCAwKGExKSAgICAgICAvLyB0bXAwID0gMXwwCisgICAgbHcgICAgICAgICAgczEsIDQoYTEpICAgICAgIC8vIHRtcDEgPSAzfDIKKyAgICBsdyAgICAgICAgICBzMiwgOChhMSkgICAgICAgLy8gdG1wMiA9IDV8NAorICAgIGx3ICAgICAgICAgIHMzLCAxMihhMSkgICAgICAvLyB0bXAzID0gN3w2CisgICAgcGFja3JsLnBoICAgczEsIHMxLCBzMSAgICAgIC8vIHRtcDEgPSAyfDMKKyAgICBwYWNrcmwucGggICBzMywgczMsIHMzICAgICAgLy8gdG1wMyA9IDZ8NworICAgIHN1YnEucGggICAgIHM3LCBzMSwgczIgICAgICAvLyB0bXA3ID0gMi01fDMtNCA9IHQ1fHQ0CisgICAgc3VicS5waCAgICAgczUsIHMwLCBzMyAgICAgIC8vIHRtcDUgPSAxLTZ8MC03ID0gdDZ8dDcKKyAgICBtdWx0ICAgICAgICAkMCwgJDAgICAgICAgICAgLy8gYWMwICA9IDAKKyAgICBkcGEudy5waCAgICAkYWMwLCBzNywgdDAgICAgLy8gYWMwICs9IHQ1KiAgNjQzNyArIHQ0KiAgMjI2MAorICAgIGRwYS53LnBoICAgICRhYzAsIHM1LCB0MSAgICAvLyBhYzAgKz0gdDYqICA5NjMzICsgdDcqIDExMzYzCisgICAgbXVsdCAgICAgICAgJGFjMSwgJDAsICQwICAgIC8vIGFjMSAgPSAwCisgICAgZHBhLncucGggICAgJGFjMSwgczcsIHQyICAgIC8vIGFjMSArPSB0NSotMTEzNjIgKyB0NCogLTY0MzYKKyAgICBkcGEudy5waCAgICAkYWMxLCBzNSwgdDMgICAgLy8gYWMxICs9IHQ2KiAtMjI1OSArIHQ3KiAgOTYzMworICAgIG11bHQgICAgICAgICRhYzIsICQwLCAkMCAgICAvLyBhYzIgID0gMAorICAgIGRwYS53LnBoICAgICRhYzIsIHM3LCB0NCAgICAvLyBhYzIgKz0gdDUqICAyMjYxICsgdDQqICA5NjMzCisgICAgZHBhLncucGggICAgJGFjMiwgczUsIHQ1ICAgIC8vIGFjMiArPSB0NiotMTEzNjIgKyB0NyogIDY0MzcKKyAgICBtdWx0ICAgICAgICAkYWMzLCAkMCwgJDAgICAgLy8gYWMzICA9IDAKKyAgICBkcGEudy5waCAgICAkYWMzLCBzNywgdDYgICAgLy8gYWMzICs9IHQ1KiAgOTYzMyArIHQ0Ki0xMTM2MworICAgIGRwYS53LnBoICAgICRhYzMsIHM1LCB0NyAgICAvLyBhYzMgKz0gdDYqIC02NDM2ICsgdDcqICAyMjYwCisgICAgYWRkcS5waCAgICAgczYsIHMxLCBzMiAgICAgIC8vIHRtcDYgPSAyKzV8Mys0ID0gdDJ8dDMKKyAgICBhZGRxLnBoICAgICBzNCwgczAsIHMzICAgICAgLy8gdG1wNCA9IDErNnwwKzcgPSB0MXx0MAorICAgIGV4dHJfci53ICAgIHMwLCAkYWMwLCAxMSAgICAvLyB0bXAwID0gKGFjMCArIDEwMjQpID4+IDExCisgICAgZXh0cl9yLncgICAgczEsICRhYzEsIDExICAgIC8vIHRtcDEgPSAoYWMxICsgMTAyNCkgPj4gMTEKKyAgICBleHRyX3IudyAgICBzMiwgJGFjMiwgMTEgICAgLy8gdG1wMiA9IChhYzIgKyAxMDI0KSA+PiAxMQorICAgIGV4dHJfci53ICAgIHMzLCAkYWMzLCAxMSAgICAvLyB0bXAzID0gKGFjMyArIDEwMjQpID4+IDExCisgICAgYWRkcS5waCAgICAgczUsIHM0LCBzNiAgICAgIC8vIHRtcDUgPSB0MSt0Mnx0MCt0MyA9IHQxMXx0MTAKKyAgICBzdWJxLnBoICAgICBzNywgczQsIHM2ICAgICAgLy8gdG1wNyA9IHQxLXQyfHQwLXQzID0gdDEyfHQxMworICAgIHNoICAgICAgICAgIHMwLCAyKGExKQorICAgIHNoICAgICAgICAgIHMxLCA2KGExKQorICAgIHNoICAgICAgICAgIHMyLCAxMChhMSkKKyAgICBzaCAgICAgICAgICBzMywgMTQoYTEpCisgICAgbXVsdCAgICAgICAgJDAsICQwICAgICAgICAgIC8vIGFjMCAgPSAwCisgICAgZHBhLncucGggICAgJGFjMCwgczcsIHQ4ICAgIC8vIGFjMCArPSB0MTIqICA0NDMzICsgdDEzKiAxMDcwMworICAgIG11bHQgICAgICAgICRhYzEsICQwLCAkMCAgICAvLyBhYzEgID0gMAorICAgIGRwYS53LnBoICAgICRhYzEsIHM3LCB0OSAgICAvLyBhYzEgKz0gdDEyKi0xMDcwNCArIHQxMyogIDQ0MzMKKyAgICBzcmEgICAgICAgICBzNCwgczUsIDE2ICAgICAgLy8gdG1wNCA9IHQxMQorICAgIGFkZGl1ICAgICAgIGExLCBhMSwgMTYKKyAgICBhZGRpdSAgICAgICBzOCwgczgsIC0xCisgICAgZXh0cl9yLncgICAgczAsICRhYzAsIDExICAgIC8vIHRtcDAgPSAoYWMwICsgMTAyNCkgPj4gMTEKKyAgICBleHRyX3IudyAgICBzMSwgJGFjMSwgMTEgICAgLy8gdG1wMSA9IChhYzEgKyAxMDI0KSA+PiAxMQorICAgIGFkZHUgICAgICAgIHMyLCBzNSwgczQgICAgICAvLyB0bXAyID0gdDEwICsgdDExCisgICAgc3VidSAgICAgICAgczMsIHM1LCBzNCAgICAgIC8vIHRtcDMgPSB0MTAgLSB0MTEKKyAgICBzbGwgICAgICAgICBzMiwgczIsIDIgICAgICAgLy8gdG1wMiA9ICh0MTAgKyB0MTEpIDw8IDIKKyAgICBzbGwgICAgICAgICBzMywgczMsIDIgICAgICAgLy8gdG1wMyA9ICh0MTAgLSB0MTEpIDw8IDIKKyAgICBzaCAgICAgICAgICBzMiwgLTE2KGExKQorICAgIHNoICAgICAgICAgIHMzLCAtOChhMSkKKyAgICBzaCAgICAgICAgICBzMCwgLTEyKGExKQorICAgIGJndHogICAgICAgIHM4LCAxYgorICAgICBzaCAgICAgICAgIHMxLCAtNChhMSkKKyAgICBsaSAgICAgICAgICB0MCwgMjI2MAorICAgIGxpICAgICAgICAgIHQxLCAxMTM2MworICAgIGxpICAgICAgICAgIHQyLCA5NjMzCisgICAgbGkgICAgICAgICAgdDMsIDY0MzYKKyAgICBsaSAgICAgICAgICB0NCwgNjQzNworICAgIGxpICAgICAgICAgIHQ1LCAyMjYxCisgICAgbGkgICAgICAgICAgdDYsIDExMzYyCisgICAgbGkgICAgICAgICAgdDcsIDIyNTkKKyAgICBsaSAgICAgICAgICB0OCwgNDQzMworICAgIGxpICAgICAgICAgIHQ5LCAxMDcwMworICAgIGxpICAgICAgICAgIGExLCAxMDcwNAorICAgIGxpICAgICAgICAgIHM4LCA4CisKKzI6CisgICAgbGggICAgICAgICAgYTIsIDAoYTApICAgICAgIC8vIDAKKyAgICBsaCAgICAgICAgICBhMywgMTYoYTApICAgICAgLy8gOAorICAgIGxoICAgICAgICAgIHYwLCAzMihhMCkgICAgICAvLyAxNgorICAgIGxoICAgICAgICAgIHYxLCA0OChhMCkgICAgICAvLyAyNAorICAgIGxoICAgICAgICAgIHM0LCA2NChhMCkgICAgICAvLyAzMgorICAgIGxoICAgICAgICAgIHM1LCA4MChhMCkgICAgICAvLyA0MAorICAgIGxoICAgICAgICAgIHM2LCA5NihhMCkgICAgICAvLyA0OAorICAgIGxoICAgICAgICAgIHM3LCAxMTIoYTApICAgICAvLyA1NgorICAgIGFkZHUgICAgICAgIHMyLCB2MCwgczUgICAgICAvLyB0bXAyID0gMTYgKyA0MAorICAgIHN1YnUgICAgICAgIHM1LCB2MCwgczUgICAgICAvLyB0bXA1ID0gMTYgLSA0MAorICAgIGFkZHUgICAgICAgIHMzLCB2MSwgczQgICAgICAvLyB0bXAzID0gMjQgKyAzMgorICAgIHN1YnUgICAgICAgIHM0LCB2MSwgczQgICAgICAvLyB0bXA0ID0gMjQgLSAzMgorICAgIGFkZHUgICAgICAgIHMwLCBhMiwgczcgICAgICAvLyB0bXAwID0gIDAgKyA1NgorICAgIHN1YnUgICAgICAgIHM3LCBhMiwgczcgICAgICAvLyB0bXA3ID0gIDAgLSA1NgorICAgIGFkZHUgICAgICAgIHMxLCBhMywgczYgICAgICAvLyB0bXAxID0gIDggKyA0OAorICAgIHN1YnUgICAgICAgIHM2LCBhMywgczYgICAgICAvLyB0bXA2ID0gIDggLSA0OAorICAgIGFkZHUgICAgICAgIGEyLCBzMCwgczMgICAgICAvLyB0bXAxMCA9IHRtcDAgKyB0bXAzCisgICAgc3VidSAgICAgICAgdjEsIHMwLCBzMyAgICAgIC8vIHRtcDEzID0gdG1wMCAtIHRtcDMKKyAgICBhZGR1ICAgICAgICBhMywgczEsIHMyICAgICAgLy8gdG1wMTEgPSB0bXAxICsgdG1wMgorICAgIHN1YnUgICAgICAgIHYwLCBzMSwgczIgICAgICAvLyB0bXAxMiA9IHRtcDEgLSB0bXAyCisgICAgbXVsdCAgICAgICAgczcsIHQxICAgICAgICAgIC8vIGFjMCAgPSB0bXA3ICogYzEKKyAgICBtYWRkICAgICAgICBzNCwgdDAgICAgICAgICAgLy8gYWMwICs9IHRtcDQgKiBjMAorICAgIG1hZGQgICAgICAgIHM1LCB0NCAgICAgICAgICAvLyBhYzAgKz0gdG1wNSAqIGM0CisgICAgbWFkZCAgICAgICAgczYsIHQyICAgICAgICAgIC8vIGFjMCArPSB0bXA2ICogYzIKKyAgICBtdWx0ICAgICAgICAkYWMxLCBzNywgdDIgICAgLy8gYWMxICA9IHRtcDcgKiBjMgorICAgIG1zdWIgICAgICAgICRhYzEsIHM0LCB0MyAgICAvLyBhYzEgLT0gdG1wNCAqIGMzCisgICAgbXN1YiAgICAgICAgJGFjMSwgczUsIHQ2ICAgIC8vIGFjMSAtPSB0bXA1ICogYzYKKyAgICBtc3ViICAgICAgICAkYWMxLCBzNiwgdDcgICAgLy8gYWMxIC09IHRtcDYgKiBjNworICAgIG11bHQgICAgICAgICRhYzIsIHM3LCB0NCAgICAvLyBhYzIgID0gdG1wNyAqIGM0CisgICAgbWFkZCAgICAgICAgJGFjMiwgczQsIHQyICAgIC8vIGFjMiArPSB0bXA0ICogYzIKKyAgICBtYWRkICAgICAgICAkYWMyLCBzNSwgdDUgICAgLy8gYWMyICs9IHRtcDUgKiBjNQorICAgIG1zdWIgICAgICAgICRhYzIsIHM2LCB0NiAgICAvLyBhYzIgLT0gdG1wNiAqIGM2CisgICAgbXVsdCAgICAgICAgJGFjMywgczcsIHQwICAgIC8vIGFjMyAgPSB0bXA3ICogYzAKKyAgICBtc3ViICAgICAgICAkYWMzLCBzNCwgdDEgICAgLy8gYWMzIC09IHRtcDQgKiBjMQorICAgIG1hZGQgICAgICAgICRhYzMsIHM1LCB0MiAgICAvLyBhYzMgKz0gdG1wNSAqIGMyCisgICAgbXN1YiAgICAgICAgJGFjMywgczYsIHQzICAgIC8vIGFjMyAtPSB0bXA2ICogYzMKKyAgICBleHRyX3IudyAgICBzMCwgJGFjMCwgMTUgICAgLy8gdG1wMCA9IChhYzAgKyAxNjM4NCkgPj4gMTUKKyAgICBleHRyX3IudyAgICBzMSwgJGFjMSwgMTUgICAgLy8gdG1wMSA9IChhYzEgKyAxNjM4NCkgPj4gMTUKKyAgICBleHRyX3IudyAgICBzMiwgJGFjMiwgMTUgICAgLy8gdG1wMiA9IChhYzIgKyAxNjM4NCkgPj4gMTUKKyAgICBleHRyX3IudyAgICBzMywgJGFjMywgMTUgICAgLy8gdG1wMyA9IChhYzMgKyAxNjM4NCkgPj4gMTUKKyAgICBhZGRpdSAgICAgICBzOCwgczgsIC0xCisgICAgYWRkdSAgICAgICAgczQsIGEyLCBhMyAgICAgIC8vIHRtcDQgPSB0bXAxMCArIHRtcDExCisgICAgc3VidSAgICAgICAgczUsIGEyLCBhMyAgICAgIC8vIHRtcDUgPSB0bXAxMCAtIHRtcDExCisgICAgc2ggICAgICAgICAgczAsIDE2KGEwKQorICAgIHNoICAgICAgICAgIHMxLCA0OChhMCkKKyAgICBzaCAgICAgICAgICBzMiwgODAoYTApCisgICAgc2ggICAgICAgICAgczMsIDExMihhMCkKKyAgICBtdWx0ICAgICAgICB2MCwgdDggICAgICAgICAgLy8gYWMwICA9IHRtcDEyICogYzgKKyAgICBtYWRkICAgICAgICB2MSwgdDkgICAgICAgICAgLy8gYWMwICs9IHRtcDEzICogYzkKKyAgICBtdWx0ICAgICAgICAkYWMxLCB2MSwgdDggICAgLy8gYWMxICA9IHRtcDEzICogYzgKKyAgICBtc3ViICAgICAgICAkYWMxLCB2MCwgYTEgICAgLy8gYWMxIC09IHRtcDEyICogYzEwCisgICAgYWRkaXUgICAgICAgYTAsIGEwLCAyCisgICAgZXh0cl9yLncgICAgczYsICRhYzAsIDE1ICAgIC8vIHRtcDYgPSAoYWMwICsgMTYzODQpID4+IDE1CisgICAgZXh0cl9yLncgICAgczcsICRhYzEsIDE1ICAgIC8vIHRtcDcgPSAoYWMxICsgMTYzODQpID4+IDE1CisgICAgc2hyYV9yLncgICAgczQsIHM0LCAyICAgICAgIC8vIHRtcDQgPSAodG1wNCArIDIpID4+IDIKKyAgICBzaHJhX3IudyAgICBzNSwgczUsIDIgICAgICAgLy8gdG1wNSA9ICh0bXA1ICsgMikgPj4gMgorICAgIHNoICAgICAgICAgIHM0LCAtMihhMCkKKyAgICBzaCAgICAgICAgICBzNSwgNjIoYTApCisgICAgc2ggICAgICAgICAgczYsIDMwKGEwKQorICAgIGJndHogICAgICAgIHM4LCAyYgorICAgICBzaCAgICAgICAgIHM3LCA5NChhMCkKKworICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDQwLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4CisKKyAgICBqciAgICAgICAgICByYQorICAgICBub3AKKworRU5EKGpzaW1kX2ZkY3RfaXNsb3dfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9mZGN0X2lmYXN0X2RzcHIyKQorLyoKKyAqIGEwID0gZGF0YQorICovCisgICAgLnNldCBhdAorCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDgsIHMwLCBzMQorCisgICAgbGkgICAgICAgICAgYTEsIDB4MDE0ZTAxNGUgIC8vIEZJWF8xXzMwNjU2Mjk2NSAoMzM0IDw8IDE2KXwoMzM0ICYgMHhmZmZmKQorICAgIGxpICAgICAgICAgIGEyLCAweDAwOGIwMDhiICAvLyBGSVhfMF81NDExOTYxMDAgKDEzOSA8PCAxNil8KDEzOSAmIDB4ZmZmZikKKyAgICBsaSAgICAgICAgICBhMywgMHgwMDYyMDA2MiAgLy8gRklYXzBfMzgyNjgzNDMzICg5OCA8PCAxNikgfCg5OCAmIDB4ZmZmZikKKyAgICBsaSAgICAgICAgICBzMSwgMHgwMGI1MDBiNSAgLy8gRklYXzBfNzA3MTA2NzgxICgxODEgPDwgMTYpfCgxODEgJiAweGZmZmYpCisKKyAgICBtb3ZlICAgICAgICB2MCwgYTAKKyAgICBhZGRpdSAgICAgICB2MSwgdjAsIDEyOCAgICAgLy8gZW5kIGFkZHJlc3MKKworMDoKKyAgICBsdyAgICAgICAgICB0MCwgMCh2MCkgICAgICAgLy8gdG1wMCA9IDF8MAorICAgIGx3ICAgICAgICAgIHQxLCA0KHYwKSAgICAgICAvLyB0bXAxID0gM3wyCisgICAgbHcgICAgICAgICAgdDIsIDgodjApICAgICAgIC8vIHRtcDIgPSA1fDQKKyAgICBsdyAgICAgICAgICB0MywgMTIodjApICAgICAgLy8gdG1wMyA9IDd8NgorICAgIHBhY2tybC5waCAgIHQxLCB0MSwgdDEgICAgICAvLyB0bXAxID0gMnwzCisgICAgcGFja3JsLnBoICAgdDMsIHQzLCB0MyAgICAgIC8vIHRtcDMgPSA2fDcKKyAgICBzdWJxLnBoICAgICB0NywgdDEsIHQyICAgICAgLy8gdG1wNyA9IDItNXwzLTQgPSB0NXx0NAorICAgIHN1YnEucGggICAgIHQ1LCB0MCwgdDMgICAgICAvLyB0bXA1ID0gMS02fDAtNyA9IHQ2fHQ3CisgICAgYWRkcS5waCAgICAgdDYsIHQxLCB0MiAgICAgIC8vIHRtcDYgPSAyKzV8Mys0ID0gdDJ8dDMKKyAgICBhZGRxLnBoICAgICB0NCwgdDAsIHQzICAgICAgLy8gdG1wNCA9IDErNnwwKzcgPSB0MXx0MAorICAgIGFkZHEucGggICAgIHQ4LCB0NCwgdDYgICAgICAvLyB0bXA1ID0gdDErdDJ8dDArdDMgPSB0MTF8dDEwCisgICAgc3VicS5waCAgICAgdDksIHQ0LCB0NiAgICAgIC8vIHRtcDcgPSB0MS10Mnx0MC10MyA9IHQxMnx0MTMKKyAgICBzcmEgICAgICAgICB0NCwgdDgsIDE2ICAgICAgLy8gdG1wNCA9IHQxMQorICAgIG11bHQgICAgICAgICQwLCAkMCAgICAgICAgICAvLyBhYzAgID0gMAorICAgIGRwYS53LnBoICAgICRhYzAsIHQ5LCBzMQorICAgIG11bHQgICAgICAgICRhYzEsICQwLCAkMCAgICAvLyBhYzEgID0gMAorICAgIGRwYS53LnBoICAgICRhYzEsIHQ3LCBhMyAgICAvLyBhYzEgKz0gdDQqOTggKyB0NSo5OAorICAgIGRwc3gudy5waCAgICRhYzEsIHQ1LCBhMyAgICAvLyBhYzEgKz0gdDYqOTggKyB0Nyo5OAorICAgIG11bHQgICAgICAgICRhYzIsICQwLCAkMCAgICAvLyBhYzIgID0gMAorICAgIGRwYS53LnBoICAgICRhYzIsIHQ3LCBhMiAgICAvLyBhYzIgKz0gdDQqMTM5ICsgdDUqMTM5CisgICAgbXVsdCAgICAgICAgJGFjMywgJDAsICQwICAgIC8vIGFjMyAgPSAwCisgICAgZHBhLncucGggICAgJGFjMywgdDUsIGExICAgIC8vIGFjMyArPSB0NiozMzQgKyB0NyozMzQKKyAgICBwcmVjcnEucGgudyB0MCwgdDUsIHQ3ICAgICAgLy8gdDAgPSB0NXx0NgorICAgIGFkZHEucGggICAgIHQyLCB0OCwgdDQgICAgICAvLyB0bXAyID0gdDEwICsgdDExCisgICAgc3VicS5waCAgICAgdDMsIHQ4LCB0NCAgICAgIC8vIHRtcDMgPSB0MTAgLSB0MTEKKyAgICBleHRyLncgICAgICB0NCwgJGFjMCwgOAorICAgIG11bHQgICAgICAgICQwLCAkMCAgICAgICAgICAvLyBhYzAgID0gMAorICAgIGRwYS53LnBoICAgICRhYzAsIHQwLCBzMSAgICAvLyBhYzAgKz0gdDUqMTgxICsgdDYqMTgxCisgICAgZXh0ci53ICAgICAgdDAsICRhYzEsIDggICAgIC8vIHQwID0gejUKKyAgICBleHRyLncgICAgICB0MSwgJGFjMiwgOCAgICAgLy8gdDEgPSBNVUxUSVBMWSh0bXAxMCwgMTM5KQorICAgIGV4dHIudyAgICAgIHQ3LCAkYWMzLCA4ICAgICAvLyB0MiA9IE1VTFRJUExZKHRtcDEyLCAzMzQpCisgICAgZXh0ci53ICAgICAgdDgsICRhYzAsIDggICAgIC8vIHQ4ID0gejMgPSBNVUxUSVBMWSh0bXAxMSwgMTgxKQorICAgIGFkZCAgICAgICAgIHQ2LCB0MSwgdDAgICAgICAvLyB0NiA9IHoyCisgICAgYWRkICAgICAgICAgdDcsIHQ3LCB0MCAgICAgIC8vIHQ3ID0gejQKKyAgICBzdWJxLnBoICAgICB0MCwgdDUsIHQ4ICAgICAgLy8gdDAgPSB6MTMgPSB0bXA3IC0gejMKKyAgICBhZGRxLnBoICAgICB0OCwgdDUsIHQ4ICAgICAgLy8gdDkgPSB6MTEgPSB0bXA3ICsgejMKKyAgICBhZGRxLnBoICAgICB0MSwgdDAsIHQ2ICAgICAgLy8gdDEgPSB6MTMgKyB6MgorICAgIHN1YnEucGggICAgIHQ2LCB0MCwgdDYgICAgICAvLyB0NiA9IHoxMyAtIHoyCisgICAgYWRkcS5waCAgICAgdDAsIHQ4LCB0NyAgICAgIC8vIHQwID0gejExICsgejQKKyAgICBzdWJxLnBoICAgICB0NywgdDgsIHQ3ICAgICAgLy8gdDcgPSB6MTEgLSB6NAorICAgIGFkZHEucGggICAgIHQ1LCB0NCwgdDkKKyAgICBzdWJxLnBoICAgICB0NCwgdDksIHQ0CisgICAgc2ggICAgICAgICAgdDIsIDAodjApCisgICAgc2ggICAgICAgICAgdDUsIDQodjApCisgICAgc2ggICAgICAgICAgdDMsIDgodjApCisgICAgc2ggICAgICAgICAgdDQsIDEyKHYwKQorICAgIHNoICAgICAgICAgIHQxLCAxMCh2MCkKKyAgICBzaCAgICAgICAgICB0NiwgNih2MCkKKyAgICBzaCAgICAgICAgICB0MCwgMih2MCkKKyAgICBzaCAgICAgICAgICB0NywgMTQodjApCisgICAgYWRkaXUgICAgICAgdjAsIDE2CisgICAgYm5lICAgICAgICAgdjEsIHYwLCAwYgorICAgICBub3AKKyAgICBtb3ZlICAgICAgICB2MCwgYTAKKyAgICBhZGRpdSAgICAgICB2MSwgdjAsIDE2CisKKzE6CisgICAgbGggICAgICAgICAgdDAsIDAodjApICAgICAgIC8vIDAKKyAgICBsaCAgICAgICAgICB0MSwgMTYodjApICAgICAgLy8gOAorICAgIGxoICAgICAgICAgIHQyLCAzMih2MCkgICAgICAvLyAxNgorICAgIGxoICAgICAgICAgIHQzLCA0OCh2MCkgICAgICAvLyAyNAorICAgIGxoICAgICAgICAgIHQ0LCA2NCh2MCkgICAgICAvLyAzMgorICAgIGxoICAgICAgICAgIHQ1LCA4MCh2MCkgICAgICAvLyA0MAorICAgIGxoICAgICAgICAgIHQ2LCA5Nih2MCkgICAgICAvLyA0OAorICAgIGxoICAgICAgICAgIHQ3LCAxMTIodjApICAgICAvLyA1NgorICAgIGFkZCAgICAgICAgIHQ4LCB0MCwgdDcgICAgICAvLyB0OCA9IHRtcDAKKyAgICBzdWIgICAgICAgICB0NywgdDAsIHQ3ICAgICAgLy8gdDcgPSB0bXA3CisgICAgYWRkICAgICAgICAgdDAsIHQxLCB0NiAgICAgIC8vIHQwID0gdG1wMQorICAgIHN1YiAgICAgICAgIHQxLCB0MSwgdDYgICAgICAvLyB0MSA9IHRtcDYKKyAgICBhZGQgICAgICAgICB0NiwgdDIsIHQ1ICAgICAgLy8gdDYgPSB0bXAyCisgICAgc3ViICAgICAgICAgdDUsIHQyLCB0NSAgICAgIC8vIHQ1ID0gdG1wNQorICAgIGFkZCAgICAgICAgIHQyLCB0MywgdDQgICAgICAvLyB0MiA9IHRtcDMKKyAgICBzdWIgICAgICAgICB0MywgdDMsIHQ0ICAgICAgLy8gdDMgPSB0bXA0CisgICAgYWRkICAgICAgICAgdDQsIHQ4LCB0MiAgICAgIC8vIHQ0ID0gdG1wMTAgPSB0bXAwICsgdG1wMworICAgIHN1YiAgICAgICAgIHQ4LCB0OCwgdDIgICAgICAvLyB0OCA9IHRtcDEzID0gdG1wMCAtIHRtcDMKKyAgICBzdWIgICAgICAgICBzMCwgdDAsIHQ2ICAgICAgLy8gczAgPSB0bXAxMiA9IHRtcDEgLSB0bXAyCisgICAgaW5zICAgICAgICAgdDgsIHMwLCAxNiwgMTYgIC8vIHQ4ID0gdG1wMTJ8dG1wMTMKKyAgICBhZGQgICAgICAgICB0MiwgdDAsIHQ2ICAgICAgLy8gdDIgPSB0bXAxMSA9IHRtcDEgKyB0bXAyCisgICAgbXVsdCAgICAgICAgJDAsICQwICAgICAgICAgIC8vIGFjMCAgPSAwCisgICAgZHBhLncucGggICAgJGFjMCwgdDgsIHMxICAgIC8vIGFjMCArPSB0MTIqMTgxICsgdDEzKjE4MQorICAgIGFkZCAgICAgICAgIHMwLCB0NCwgdDIgICAgICAvLyB0OCA9IHRtcDEwK3RtcDExCisgICAgc3ViICAgICAgICAgdDQsIHQ0LCB0MiAgICAgIC8vIHQ0ID0gdG1wMTAtdG1wMTEKKyAgICBzaCAgICAgICAgICBzMCwgMCh2MCkKKyAgICBzaCAgICAgICAgICB0NCwgNjQodjApCisgICAgZXh0ci53ICAgICAgdDIsICRhYzAsIDggICAgIC8vIHoxID0gTVVMVElQTFkodG1wMTIrdG1wMTMsIEZJWF8wXzcwNzEwNjc4MSkKKyAgICBhZGRxLnBoICAgICB0NCwgdDgsIHQyICAgICAgLy8gdDkgPSB0bXAxMyArIHoxCisgICAgc3VicS5waCAgICAgdDgsIHQ4LCB0MiAgICAgIC8vIHQyID0gdG1wMTMgLSB6MQorICAgIHNoICAgICAgICAgIHQ0LCAzMih2MCkKKyAgICBzaCAgICAgICAgICB0OCwgOTYodjApCisgICAgYWRkICAgICAgICAgdDMsIHQzLCB0NSAgICAgIC8vIHQzID0gdG1wMTAgPSB0bXA0ICsgdG1wNQorICAgIGFkZCAgICAgICAgIHQwLCB0NSwgdDEgICAgICAvLyB0MCA9IHRtcDExID0gdG1wNSArIHRtcDYKKyAgICBhZGQgICAgICAgICB0MSwgdDEsIHQ3ICAgICAgLy8gdDEgPSB0bXAxMiA9IHRtcDYgKyB0bXA3CisgICAgYW5kaSAgICAgICAgdDQsIGExLCAweGZmZmYKKyAgICBtdWwgICAgICAgICBzMCwgdDEsIHQ0CisgICAgc3JhICAgICAgICAgczAsIHMwLCA4ICAgICAgIC8vIHMwID0gejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KQorICAgIGlucyAgICAgICAgIHQxLCB0MywgMTYsIDE2ICAvLyB0MSA9IHRtcDEwfHRtcDEyCisgICAgbXVsdCAgICAgICAgJDAsICQwICAgICAgICAgIC8vIGFjMCAgPSAwCisgICAgbXVsc2Eudy5waCAgJGFjMCwgdDEsIGEzICAgIC8vIGFjMCArPSB0MTAqOTggLSB0MTIqOTgKKyAgICBleHRyLncgICAgICB0OCwgJGFjMCwgOCAgICAgLy8gejUgPSBNVUxUSVBMWSh0bXAxMC10bXAxMiwgRklYXzBfMzgyNjgzNDMzKQorICAgIGFkZCAgICAgICAgIHQyLCB0NywgdDggICAgICAvLyB0MiA9IHRtcDcgKyB6NQorICAgIHN1YiAgICAgICAgIHQ3LCB0NywgdDggICAgICAvLyB0NyA9IHRtcDcgLSB6NQorICAgIGFuZGkgICAgICAgIHQ0LCBhMiwgMHhmZmZmCisgICAgbXVsICAgICAgICAgdDgsIHQzLCB0NAorICAgIHNyYSAgICAgICAgIHQ4LCB0OCwgOCAgICAgICAvLyB0OCA9IHoyID0gTVVMVElQTFkodG1wMTAsIEZJWF8wXzU0MTE5NjEwMCkKKyAgICBhbmRpICAgICAgICB0NCwgczEsIDB4ZmZmZgorICAgIG11bCAgICAgICAgIHQ2LCB0MCwgdDQKKyAgICBzcmEgICAgICAgICB0NiwgdDYsIDggICAgICAgLy8gdDYgPSB6MyA9IE1VTFRJUExZKHRtcDExLCBGSVhfMF83MDcxMDY3ODEpCisgICAgYWRkICAgICAgICAgdDAsIHQ2LCB0OCAgICAgIC8vIHQwID0gejMgKyB6MgorICAgIHN1YiAgICAgICAgIHQxLCB0NiwgdDggICAgICAvLyB0MSA9IHozIC0gejIKKyAgICBhZGQgICAgICAgICB0MywgdDYsIHMwICAgICAgLy8gdDMgPSB6MyArIHo0CisgICAgc3ViICAgICAgICAgdDQsIHQ2LCBzMCAgICAgIC8vIHQ0ID0gejMgLSB6NAorICAgIHN1YiAgICAgICAgIHQ1LCB0MiwgdDEgICAgICAvLyB0NSA9IGRhdGFwdHJbNV0KKyAgICBzdWIgICAgICAgICB0NiwgdDcsIHQwICAgICAgLy8gdDYgPSBkYXRhcHRyWzNdCisgICAgYWRkICAgICAgICAgdDMsIHQyLCB0MyAgICAgIC8vIHQzID0gZGF0YXB0clsxXQorICAgIGFkZCAgICAgICAgIHQ0LCB0NywgdDQgICAgICAvLyB0NCA9IGRhdGFwdHJbN10KKyAgICBzaCAgICAgICAgICB0NSwgODAodjApCisgICAgc2ggICAgICAgICAgdDYsIDQ4KHYwKQorICAgIHNoICAgICAgICAgIHQzLCAxNih2MCkKKyAgICBzaCAgICAgICAgICB0NCwgMTEyKHYwKQorICAgIGFkZGl1ICAgICAgIHYwLCAyCisgICAgYm5lICAgICAgICAgdjAsIHYxLCAxYgorICAgICBub3AKKworICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDgsIHMwLCBzMQorCisgICAgaiAgICAgICAgICAgcmEKKyAgICAgbm9wCitFTkQoanNpbWRfZmRjdF9pZmFzdF9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX3F1YW50aXplX2RzcHIyKQorLyoKKyAqIGEwID0gY29lZl9ibG9jaworICogYTEgPSBkaXZpc29ycworICogYTIgPSB3b3Jrc3BhY2UKKyAqLworICAgIC5zZXQgYXQKKworICAgIFNBVkVfUkVHU19PTl9TVEFDSyAxNiwgczAsIHMxLCBzMgorCisgICAgYWRkaXUgICAgICAgdjAsIGEyLCAxMjQgICAgIC8vIHYwID0gd29ya3NwYWNlX2VuZAorICAgIGxoICAgICAgICAgIHQwLCAwKGEyKQorICAgIGxoICAgICAgICAgIHQxLCAwKGExKQorICAgIGxoICAgICAgICAgIHQyLCAxMjgoYTEpCisgICAgc3JhICAgICAgICAgdDMsIHQwLCAxNQorICAgIHNsbCAgICAgICAgIHQzLCB0MywgMQorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgMQorICAgIG11bCAgICAgICAgIHQwLCB0MCwgdDMKKyAgICBsaCAgICAgICAgICB0NCwgMzg0KGExKQorICAgIGxoICAgICAgICAgIHQ1LCAxMzAoYTEpCisgICAgbGggICAgICAgICAgdDYsIDIoYTIpCisgICAgbGggICAgICAgICAgdDcsIDIoYTEpCisgICAgbGggICAgICAgICAgdDgsIDM4NihhMSkKKworMToKKyAgICBhbmRpICAgICAgICB0MSwgMHhmZmZmCisgICAgYWRkICAgICAgICAgdDksIHQwLCB0MgorICAgIGFuZGkgICAgICAgIHQ5LCAweGZmZmYKKyAgICBtdWwgICAgICAgICB2MSwgdDksIHQxCisgICAgc3JhICAgICAgICAgczAsIHQ2LCAxNQorICAgIHNsbCAgICAgICAgIHMwLCBzMCwgMQorICAgIGFkZGl1ICAgICAgIHMwLCBzMCwgMQorICAgIGFkZGl1ICAgICAgIHQ5LCB0NCwgMTYKKyAgICBzcmF2ICAgICAgICB2MSwgdjEsIHQ5CisgICAgbXVsICAgICAgICAgdjEsIHYxLCB0MworICAgIG11bCAgICAgICAgIHQ2LCB0NiwgczAKKyAgICBhbmRpICAgICAgICB0NywgMHhmZmZmCisgICAgYWRkaXUgICAgICAgYTIsIGEyLCA0CisgICAgYWRkaXUgICAgICAgYTEsIGExLCA0CisgICAgYWRkICAgICAgICAgczEsIHQ2LCB0NQorICAgIGFuZGkgICAgICAgIHMxLCAweGZmZmYKKyAgICBzaCAgICAgICAgICB2MSwgMChhMCkKKworICAgIG11bCAgICAgICAgIHMyLCBzMSwgdDcKKyAgICBhZGRpdSAgICAgICBzMSwgdDgsIDE2CisgICAgc3JhdiAgICAgICAgczIsIHMyLCBzMQorICAgIG11bCAgICAgICAgIHMyLCBzMiwgczAKKyAgICBsaCAgICAgICAgICB0MCwgMChhMikKKyAgICBsaCAgICAgICAgICB0MSwgMChhMSkKKyAgICBzcmEgICAgICAgICB0MywgdDAsIDE1CisgICAgc2xsICAgICAgICAgdDMsIHQzLCAxCisgICAgYWRkaXUgICAgICAgdDMsIHQzLCAxCisgICAgbXVsICAgICAgICAgdDAsIHQwLCB0MworICAgIGxoICAgICAgICAgIHQyLCAxMjgoYTEpCisgICAgbGggICAgICAgICAgdDQsIDM4NChhMSkKKyAgICBsaCAgICAgICAgICB0NSwgMTMwKGExKQorICAgIGxoICAgICAgICAgIHQ4LCAzODYoYTEpCisgICAgbGggICAgICAgICAgdDYsIDIoYTIpCisgICAgbGggICAgICAgICAgdDcsIDIoYTEpCisgICAgc2ggICAgICAgICAgczIsIDIoYTApCisgICAgbGggICAgICAgICAgdDAsIDAoYTIpCisgICAgc3JhICAgICAgICAgdDMsIHQwLCAxNQorICAgIHNsbCAgICAgICAgIHQzLCB0MywgMQorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgMQorICAgIG11bCAgICAgICAgIHQwLCB0MCwgdDMKKyAgICBibmUgICAgICAgICBhMiwgdjAsIDFiCisgICAgIGFkZGl1ICAgICAgYTAsIGEwLCA0CisKKyAgICBhbmRpICAgICAgICB0MSwgMHhmZmZmCisgICAgYWRkICAgICAgICAgdDksIHQwLCB0MgorICAgIGFuZGkgICAgICAgIHQ5LCAweGZmZmYKKyAgICBtdWwgICAgICAgICB2MSwgdDksIHQxCisgICAgc3JhICAgICAgICAgczAsIHQ2LCAxNQorICAgIHNsbCAgICAgICAgIHMwLCBzMCwgMQorICAgIGFkZGl1ICAgICAgIHMwLCBzMCwgMQorICAgIGFkZGl1ICAgICAgIHQ5LCB0NCwgMTYKKyAgICBzcmF2ICAgICAgICB2MSwgdjEsIHQ5CisgICAgbXVsICAgICAgICAgdjEsIHYxLCB0MworICAgIG11bCAgICAgICAgIHQ2LCB0NiwgczAKKyAgICBhbmRpICAgICAgICB0NywgMHhmZmZmCisgICAgc2ggICAgICAgICAgdjEsIDAoYTApCisgICAgYWRkICAgICAgICAgczEsIHQ2LCB0NQorICAgIGFuZGkgICAgICAgIHMxLCAweGZmZmYKKyAgICBtdWwgICAgICAgICBzMiwgczEsIHQ3CisgICAgYWRkaXUgICAgICAgczEsIHQ4LCAxNgorICAgIGFkZGl1ICAgICAgIGEyLCBhMiwgNAorICAgIGFkZGl1ICAgICAgIGExLCBhMSwgNAorICAgIHNyYXYgICAgICAgIHMyLCBzMiwgczEKKyAgICBtdWwgICAgICAgICBzMiwgczIsIHMwCisgICAgc2ggICAgICAgICAgczIsIDIoYTApCisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAxNiwgczAsIHMxLCBzMgorCisgICAgaiAgICAgICAgICAgcmEKKyAgICAgbm9wCisKK0VORChqc2ltZF9xdWFudGl6ZV9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX3F1YW50aXplX2Zsb2F0X2RzcHIyKQorLyoKKyAqIGEwID0gY29lZl9ibG9jaworICogYTEgPSBkaXZpc29ycworICogYTIgPSB3b3Jrc3BhY2UKKyAqLworICAgIC5zZXQgYXQKKworICAgIGxpICAgICAgICAgIHQxLCAweDQ2ODAwMTAwICAvLyBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIDE2Mzg0LjUKKyAgICBtdGMxICAgICAgICB0MSwgZjAKKyAgICBsaSAgICAgICAgICB0MCwgNjMKKzA6CisgICAgbHdjMSAgICAgICAgZjIsIDAoYTIpCisgICAgbHdjMSAgICAgICAgZjEwLCAwKGExKQorICAgIGx3YzEgICAgICAgIGY0LCA0KGEyKQorICAgIGx3YzEgICAgICAgIGYxMiwgNChhMSkKKyAgICBsd2MxICAgICAgICBmNiwgOChhMikKKyAgICBsd2MxICAgICAgICBmMTQsIDgoYTEpCisgICAgbHdjMSAgICAgICAgZjgsIDEyKGEyKQorICAgIGx3YzEgICAgICAgIGYxNiwgMTIoYTEpCisgICAgbWFkZC5zICAgICAgZjIsIGYwLCBmMiwgZjEwCisgICAgbWFkZC5zICAgICAgZjQsIGYwLCBmNCwgZjEyCisgICAgbWFkZC5zICAgICAgZjYsIGYwLCBmNiwgZjE0CisgICAgbWFkZC5zICAgICAgZjgsIGYwLCBmOCwgZjE2CisgICAgbHdjMSAgICAgICAgZjEwLCAxNihhMSkKKyAgICBsd2MxICAgICAgICBmMTIsIDIwKGExKQorICAgIHRydW5jLncucyAgIGYyLCBmMgorICAgIHRydW5jLncucyAgIGY0LCBmNAorICAgIHRydW5jLncucyAgIGY2LCBmNgorICAgIHRydW5jLncucyAgIGY4LCBmOAorICAgIGx3YzEgICAgICAgIGYxNCwgMjQoYTEpCisgICAgbHdjMSAgICAgICAgZjE2LCAyOChhMSkKKyAgICBtZmMxICAgICAgICB0MSwgZjIKKyAgICBtZmMxICAgICAgICB0MiwgZjQKKyAgICBtZmMxICAgICAgICB0MywgZjYKKyAgICBtZmMxICAgICAgICB0NCwgZjgKKyAgICBsd2MxICAgICAgICBmMiwgMTYoYTIpCisgICAgbHdjMSAgICAgICAgZjQsIDIwKGEyKQorICAgIGx3YzEgICAgICAgIGY2LCAyNChhMikKKyAgICBsd2MxICAgICAgICBmOCwgMjgoYTIpCisgICAgbWFkZC5zICAgICAgZjIsIGYwLCBmMiwgZjEwCisgICAgbWFkZC5zICAgICAgZjQsIGYwLCBmNCwgZjEyCisgICAgbWFkZC5zICAgICAgZjYsIGYwLCBmNiwgZjE0CisgICAgbWFkZC5zICAgICAgZjgsIGYwLCBmOCwgZjE2CisgICAgYWRkaXUgICAgICAgdDEsIHQxLCAtMTYzODQKKyAgICBhZGRpdSAgICAgICB0MiwgdDIsIC0xNjM4NAorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTE2Mzg0CisgICAgYWRkaXUgICAgICAgdDQsIHQ0LCAtMTYzODQKKyAgICB0cnVuYy53LnMgICBmMiwgZjIKKyAgICB0cnVuYy53LnMgICBmNCwgZjQKKyAgICB0cnVuYy53LnMgICBmNiwgZjYKKyAgICB0cnVuYy53LnMgICBmOCwgZjgKKyAgICBzaCAgICAgICAgICB0MSwgMChhMCkKKyAgICBzaCAgICAgICAgICB0MiwgMihhMCkKKyAgICBzaCAgICAgICAgICB0MywgNChhMCkKKyAgICBzaCAgICAgICAgICB0NCwgNihhMCkKKyAgICBtZmMxICAgICAgICB0MSwgZjIKKyAgICBtZmMxICAgICAgICB0MiwgZjQKKyAgICBtZmMxICAgICAgICB0MywgZjYKKyAgICBtZmMxICAgICAgICB0NCwgZjgKKyAgICBhZGRpdSAgICAgICB0MCwgdDAsIC04CisgICAgYWRkaXUgICAgICAgYTIsIGEyLCAzMgorICAgIGFkZGl1ICAgICAgIGExLCBhMSwgMzIKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIC0xNjM4NAorICAgIGFkZGl1ICAgICAgIHQyLCB0MiwgLTE2Mzg0CisgICAgYWRkaXUgICAgICAgdDMsIHQzLCAtMTYzODQKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIC0xNjM4NAorICAgIHNoICAgICAgICAgIHQxLCA4KGEwKQorICAgIHNoICAgICAgICAgIHQyLCAxMChhMCkKKyAgICBzaCAgICAgICAgICB0MywgMTIoYTApCisgICAgc2ggICAgICAgICAgdDQsIDE0KGEwKQorICAgIGJnZXogICAgICAgIHQwLCAwYgorICAgICBhZGRpdSAgICAgIGEwLCBhMCwgMTYKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorCitFTkQoanNpbWRfcXVhbnRpemVfZmxvYXRfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9pZGN0XzJ4Ml9kc3ByMikKKy8qCisgKiBhMCA9IGNvbXBwdHItPmRjdF90YWJsZQorICogYTEgPSBjb2VmX2Jsb2NrCisgKiBhMiA9IG91dHB1dF9idWYKKyAqIGEzID0gb3V0cHV0X2NvbAorICovCisgICAgLnNldCBhdAorCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDI0LCBzMCwgczEsIHMyLCBzMywgczQsIHM1CisKKyAgICBhZGRpdSAgICAgICBzcCwgc3AsIC00MAorICAgIG1vdmUgICAgICAgIHYwLCBzcAorICAgIGFkZGl1ICAgICAgIHMyLCB6ZXJvLCAyOTY5MgorICAgIGFkZGl1ICAgICAgIHMzLCB6ZXJvLCAtMTA0MjYKKyAgICBhZGRpdSAgICAgICBzNCwgemVybywgNjk2NworICAgIGFkZGl1ICAgICAgIHM1LCB6ZXJvLCAtNTkwNgorICAgIGxoICAgICAgICAgIHQwLCAwKGExKSAgICAgICAvLyB0MCA9IGlucHRyW0RDVFNJWkUqMF0KKyAgICBsaCAgICAgICAgICB0NSwgMChhMCkgICAgICAgLy8gdDUgPSBxdWFudHB0cltEQ1RTSVpFKjBdCisgICAgbGggICAgICAgICAgdDEsIDQ4KGExKSAgICAgIC8vIHQxID0gaW5wdHJbRENUU0laRSozXQorICAgIGxoICAgICAgICAgIHQ2LCA0OChhMCkgICAgICAvLyB0NiA9IHF1YW50cHRyW0RDVFNJWkUqM10KKyAgICBtdWwgICAgICAgICB0NCwgdDUsIHQwCisgICAgbGggICAgICAgICAgdDAsIDE2KGExKSAgICAgIC8vIHQwID0gaW5wdHJbRENUU0laRSoxXQorICAgIGxoICAgICAgICAgIHQ1LCAxNihhMCkgICAgICAvLyB0NSA9IHF1YW50cHRyW0RDVFNJWkUqMV0KKyAgICBtdWwgICAgICAgICB0NiwgdDYsIHQxCisgICAgbXVsICAgICAgICAgdDUsIHQ1LCB0MAorICAgIGxoICAgICAgICAgIHQyLCA4MChhMSkgICAgICAvLyB0MiA9IGlucHRyW0RDVFNJWkUqNV0KKyAgICBsaCAgICAgICAgICB0NywgODAoYTApICAgICAgLy8gdDcgPSBxdWFudHB0cltEQ1RTSVpFKjVdCisgICAgbGggICAgICAgICAgdDMsIDExMihhMSkgICAgIC8vIHQzID0gaW5wdHJbRENUU0laRSo3XQorICAgIGxoICAgICAgICAgIHQ4LCAxMTIoYTApICAgICAvLyB0OCA9IHF1YW50cHRyW0RDVFNJWkUqN10KKyAgICBtdWwgICAgICAgICB0NywgdDcsIHQyCisgICAgbXVsdCAgICAgICAgemVybywgemVybworICAgIG11bCAgICAgICAgIHQ4LCB0OCwgdDMKKyAgICBsaSAgICAgICAgICBzMCwgMHg3M0ZDRDc0NiAgLy8gczAgPSAoMjk2OTIgPDwgMTYpIHwgKC0xMDQyNiAmIDB4ZmZmZikKKyAgICBsaSAgICAgICAgICBzMSwgMHgxQjM3RThFRSAgLy8gczEgPSAoNjk2NyA8PCAxNikgfCAoLTU5MDYgJiAweGZmZmYpCisgICAgaW5zICAgICAgICAgdDYsIHQ1LCAxNiwgMTYgIC8vIHQ2ID0gdDV8dDYKKyAgICBzbGwgICAgICAgICB0NCwgdDQsIDE1CisgICAgZHBhLncucGggICAgJGFjMCwgdDYsIHMwCisgICAgbGggICAgICAgICAgdDEsIDIoYTEpCisgICAgbGggICAgICAgICAgdDYsIDIoYTApCisgICAgaW5zICAgICAgICAgdDgsIHQ3LCAxNiwgMTYgIC8vIHQ4ID0gdDd8dDgKKyAgICBkcGEudy5waCAgICAkYWMwLCB0OCwgczEKKyAgICBtZmxvICAgICAgICB0MCwgJGFjMAorICAgIG11bCAgICAgICAgIHQ1LCB0NiwgdDEKKyAgICBsaCAgICAgICAgICB0MSwgMTgoYTEpCisgICAgbGggICAgICAgICAgdDYsIDE4KGEwKQorICAgIGxoICAgICAgICAgIHQyLCA1MChhMSkKKyAgICBsaCAgICAgICAgICB0NywgNTAoYTApCisgICAgbXVsICAgICAgICAgdDYsIHQ2LCB0MQorICAgIHN1YnUgICAgICAgIHQ4LCB0NCwgdDAKKyAgICBtdWwgICAgICAgICB0NywgdDcsIHQyCisgICAgYWRkdSAgICAgICAgdDAsIHQ0LCB0MAorICAgIHNocmFfci53ICAgIHQwLCB0MCwgMTMKKyAgICBsaCAgICAgICAgICB0MSwgODIoYTEpCisgICAgbGggICAgICAgICAgdDIsIDgyKGEwKQorICAgIGxoICAgICAgICAgIHQzLCAxMTQoYTEpCisgICAgbGggICAgICAgICAgdDQsIDExNChhMCkKKyAgICBzaHJhX3IudyAgICB0OCwgdDgsIDEzCisgICAgbXVsICAgICAgICAgdDEsIHQxLCB0MgorICAgIG11bCAgICAgICAgIHQzLCB0MywgdDQKKyAgICBzdyAgICAgICAgICB0MCwgMCh2MCkKKyAgICBzdyAgICAgICAgICB0OCwgMjAodjApCisgICAgc2xsICAgICAgICAgdDQsIHQ1LCAxNQorICAgIGlucyAgICAgICAgIHQ3LCB0NiwgMTYsIDE2CisgICAgbXVsdCAgICAgICAgemVybywgemVybworICAgIGRwYS53LnBoICAgICRhYzAsIHQ3LCBzMAorICAgIGlucyAgICAgICAgIHQzLCB0MSwgMTYsIDE2CisgICAgbGggICAgICAgICAgdDEsIDYoYTEpCisgICAgbGggICAgICAgICAgdDYsIDYoYTApCisgICAgZHBhLncucGggICAgJGFjMCwgdDMsIHMxCisgICAgbWZsbyAgICAgICAgdDAsICRhYzAKKyAgICBtdWwgICAgICAgICB0NSwgdDYsIHQxCisgICAgbGggICAgICAgICAgdDEsIDIyKGExKQorICAgIGxoICAgICAgICAgIHQ2LCAyMihhMCkKKyAgICBsaCAgICAgICAgICB0MiwgNTQoYTEpCisgICAgbGggICAgICAgICAgdDcsIDU0KGEwKQorICAgIG11bCAgICAgICAgIHQ2LCB0NiwgdDEKKyAgICBzdWJ1ICAgICAgICB0OCwgdDQsIHQwCisgICAgbXVsICAgICAgICAgdDcsIHQ3LCB0MgorICAgIGFkZHUgICAgICAgIHQwLCB0NCwgdDAKKyAgICBzaHJhX3IudyAgICB0MCwgdDAsIDEzCisgICAgbGggICAgICAgICAgdDEsIDg2KGExKQorICAgIGxoICAgICAgICAgIHQyLCA4NihhMCkKKyAgICBsaCAgICAgICAgICB0MywgMTE4KGExKQorICAgIGxoICAgICAgICAgIHQ0LCAxMTgoYTApCisgICAgc2hyYV9yLncgICAgdDgsIHQ4LCAxMworICAgIG11bCAgICAgICAgIHQxLCB0MSwgdDIKKyAgICBtdWwgICAgICAgICB0MywgdDMsIHQ0CisgICAgc3cgICAgICAgICAgdDAsIDQodjApCisgICAgc3cgICAgICAgICAgdDgsIDI0KHYwKQorICAgIHNsbCAgICAgICAgIHQ0LCB0NSwgMTUKKyAgICBpbnMgICAgICAgICB0NywgdDYsIDE2LCAxNgorICAgIG11bHQgICAgICAgIHplcm8sIHplcm8KKyAgICBkcGEudy5waCAgICAkYWMwLCB0NywgczAKKyAgICBpbnMgICAgICAgICB0MywgdDEsIDE2LCAxNgorICAgIGxoICAgICAgICAgIHQxLCAxMChhMSkKKyAgICBsaCAgICAgICAgICB0NiwgMTAoYTApCisgICAgZHBhLncucGggICAgJGFjMCwgdDMsIHMxCisgICAgbWZsbyAgICAgICAgdDAsICRhYzAKKyAgICBtdWwgICAgICAgICB0NSwgdDYsIHQxCisgICAgbGggICAgICAgICAgdDEsIDI2KGExKQorICAgIGxoICAgICAgICAgIHQ2LCAyNihhMCkKKyAgICBsaCAgICAgICAgICB0MiwgNTgoYTEpCisgICAgbGggICAgICAgICAgdDcsIDU4KGEwKQorICAgIG11bCAgICAgICAgIHQ2LCB0NiwgdDEKKyAgICBzdWJ1ICAgICAgICB0OCwgdDQsIHQwCisgICAgbXVsICAgICAgICAgdDcsIHQ3LCB0MgorICAgIGFkZHUgICAgICAgIHQwLCB0NCwgdDAKKyAgICBzaHJhX3IudyAgICB0MCwgdDAsIDEzCisgICAgbGggICAgICAgICAgdDEsIDkwKGExKQorICAgIGxoICAgICAgICAgIHQyLCA5MChhMCkKKyAgICBsaCAgICAgICAgICB0MywgMTIyKGExKQorICAgIGxoICAgICAgICAgIHQ0LCAxMjIoYTApCisgICAgc2hyYV9yLncgICAgdDgsIHQ4LCAxMworICAgIG11bCAgICAgICAgIHQxLCB0MSwgdDIKKyAgICBtdWwgICAgICAgICB0MywgdDMsIHQ0CisgICAgc3cgICAgICAgICAgdDAsIDgodjApCisgICAgc3cgICAgICAgICAgdDgsIDI4KHYwKQorICAgIHNsbCAgICAgICAgIHQ0LCB0NSwgMTUKKyAgICBpbnMgICAgICAgICB0NywgdDYsIDE2LCAxNgorICAgIG11bHQgICAgICAgIHplcm8sIHplcm8KKyAgICBkcGEudy5waCAgICAkYWMwLCB0NywgczAKKyAgICBpbnMgICAgICAgICB0MywgdDEsIDE2LCAxNgorICAgIGxoICAgICAgICAgIHQxLCAxNChhMSkKKyAgICBsaCAgICAgICAgICB0NiwgMTQoYTApCisgICAgZHBhLncucGggICAgJGFjMCwgdDMsIHMxCisgICAgbWZsbyAgICAgICAgdDAsICRhYzAKKyAgICBtdWwgICAgICAgICB0NSwgdDYsIHQxCisgICAgbGggICAgICAgICAgdDEsIDMwKGExKQorICAgIGxoICAgICAgICAgIHQ2LCAzMChhMCkKKyAgICBsaCAgICAgICAgICB0MiwgNjIoYTEpCisgICAgbGggICAgICAgICAgdDcsIDYyKGEwKQorICAgIG11bCAgICAgICAgIHQ2LCB0NiwgdDEKKyAgICBzdWJ1ICAgICAgICB0OCwgdDQsIHQwCisgICAgbXVsICAgICAgICAgdDcsIHQ3LCB0MgorICAgIGFkZHUgICAgICAgIHQwLCB0NCwgdDAKKyAgICBzaHJhX3IudyAgICB0MCwgdDAsIDEzCisgICAgbGggICAgICAgICAgdDEsIDk0KGExKQorICAgIGxoICAgICAgICAgIHQyLCA5NChhMCkKKyAgICBsaCAgICAgICAgICB0MywgMTI2KGExKQorICAgIGxoICAgICAgICAgIHQ0LCAxMjYoYTApCisgICAgc2hyYV9yLncgICAgdDgsIHQ4LCAxMworICAgIG11bCAgICAgICAgIHQxLCB0MSwgdDIKKyAgICBtdWwgICAgICAgICB0MywgdDMsIHQ0CisgICAgc3cgICAgICAgICAgdDAsIDEyKHYwKQorICAgIHN3ICAgICAgICAgIHQ4LCAzMih2MCkKKyAgICBzbGwgICAgICAgICB0NCwgdDUsIDE1CisgICAgaW5zICAgICAgICAgdDcsIHQ2LCAxNiwgMTYKKyAgICBtdWx0ICAgICAgICB6ZXJvLCB6ZXJvCisgICAgZHBhLncucGggICAgJGFjMCwgdDcsIHMwCisgICAgaW5zICAgICAgICAgdDMsIHQxLCAxNiwgMTYKKyAgICBkcGEudy5waCAgICAkYWMwLCB0MywgczEKKyAgICBtZmxvICAgICAgICB0MCwgJGFjMAorICAgIGx3ICAgICAgICAgIHQ5LCAwKGEyKQorICAgIGx3ICAgICAgICAgIHQzLCAwKHYwKQorICAgIGx3ICAgICAgICAgIHQ3LCA0KHYwKQorICAgIGx3ICAgICAgICAgIHQxLCA4KHYwKQorICAgIGFkZHUgICAgICAgIHQ5LCB0OSwgYTMKKyAgICBzbGwgICAgICAgICB0MywgdDMsIDE1CisgICAgc3VidSAgICAgICAgdDgsIHQ0LCB0MAorICAgIGFkZHUgICAgICAgIHQwLCB0NCwgdDAKKyAgICBzaHJhX3IudyAgICB0MCwgdDAsIDEzCisgICAgc2hyYV9yLncgICAgdDgsIHQ4LCAxMworICAgIHN3ICAgICAgICAgIHQwLCAxNih2MCkKKyAgICBzdyAgICAgICAgICB0OCwgMzYodjApCisgICAgbHcgICAgICAgICAgdDUsIDEyKHYwKQorICAgIGx3ICAgICAgICAgIHQ2LCAxNih2MCkKKyAgICBtdWx0ICAgICAgICB0NywgczIKKyAgICBtYWRkICAgICAgICB0MSwgczMKKyAgICBtYWRkICAgICAgICB0NSwgczQKKyAgICBtYWRkICAgICAgICB0NiwgczUKKyAgICBsdyAgICAgICAgICB0NSwgMjQodjApCisgICAgbHcgICAgICAgICAgdDcsIDI4KHYwKQorICAgIG1mbG8gICAgICAgIHQwLCAkYWMwCisgICAgbHcgICAgICAgICAgdDgsIDMyKHYwKQorICAgIGx3ICAgICAgICAgIHQyLCAzNih2MCkKKyAgICBtdWx0ICAgICAgICAkYWMxLCB0NSwgczIKKyAgICBtYWRkICAgICAgICAkYWMxLCB0NywgczMKKyAgICBtYWRkICAgICAgICAkYWMxLCB0OCwgczQKKyAgICBtYWRkICAgICAgICAkYWMxLCB0MiwgczUKKyAgICBhZGR1ICAgICAgICB0MSwgdDMsIHQwCisgICAgc3VidSAgICAgICAgdDYsIHQzLCB0MAorICAgIHNocmFfci53ICAgIHQxLCB0MSwgMjAKKyAgICBzaHJhX3IudyAgICB0NiwgdDYsIDIwCisgICAgbWZsbyAgICAgICAgdDQsICRhYzEKKyAgICBzaGxsX3MudyAgICB0MSwgdDEsIDI0CisgICAgc2hsbF9zLncgICAgdDYsIHQ2LCAyNAorICAgIHNyYSAgICAgICAgIHQxLCB0MSwgMjQKKyAgICBzcmEgICAgICAgICB0NiwgdDYsIDI0CisgICAgYWRkaXUgICAgICAgdDEsIHQxLCAxMjgKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIDEyOAorICAgIGx3ICAgICAgICAgIHQwLCAyMCh2MCkKKyAgICBzYiAgICAgICAgICB0MSwgMCh0OSkKKyAgICBzYiAgICAgICAgICB0NiwgMSh0OSkKKyAgICBzbGwgICAgICAgICB0MCwgdDAsIDE1CisgICAgbHcgICAgICAgICAgdDksIDQoYTIpCisgICAgYWRkdSAgICAgICAgdDEsIHQwLCB0NAorICAgIHN1YnUgICAgICAgIHQ2LCB0MCwgdDQKKyAgICBhZGR1ICAgICAgICB0OSwgdDksIGEzCisgICAgc2hyYV9yLncgICAgdDEsIHQxLCAyMAorICAgIHNocmFfci53ICAgIHQ2LCB0NiwgMjAKKyAgICBzaGxsX3MudyAgICB0MSwgdDEsIDI0CisgICAgc2hsbF9zLncgICAgdDYsIHQ2LCAyNAorICAgIHNyYSAgICAgICAgIHQxLCB0MSwgMjQKKyAgICBzcmEgICAgICAgICB0NiwgdDYsIDI0CisgICAgYWRkaXUgICAgICAgdDEsIHQxLCAxMjgKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIDEyOAorICAgIHNiICAgICAgICAgIHQxLCAwKHQ5KQorICAgIHNiICAgICAgICAgIHQ2LCAxKHQ5KQorICAgIGFkZGl1ICAgICAgIHNwLCBzcCwgNDAKKworICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDI0LCBzMCwgczEsIHMyLCBzMywgczQsIHM1CisKKyAgICBqICAgICAgICAgICByYQorICAgICBub3AKKworRU5EKGpzaW1kX2lkY3RfMngyX2RzcHIyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0xFQUZfRFNQUjIoanNpbWRfaWRjdF80eDRfZHNwcjIpCisvKgorICogYTAgICAgID0gY29tcHB0ci0+ZGN0X3RhYmxlCisgKiBhMSAgICAgPSBjb2VmX2Jsb2NrCisgKiBhMiAgICAgPSBvdXRwdXRfYnVmCisgKiBhMyAgICAgPSBvdXRwdXRfY29sCisgKiAxNihzcCkgPSB3b3Jrc3BhY2VbRENUU0laRSo0XTsgIC8vIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcworICovCisgICAgLnNldCBhdAorCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGx3ICAgICAgICAgIHYxLCA0OChzcCkKKyAgICBtb3ZlICAgICAgICB0MCwgYTEKKyAgICBtb3ZlICAgICAgICB0MSwgdjEKKyAgICBsaSAgICAgICAgICB0OSwgNAorICAgIGxpICAgICAgICAgIHMwLCAweDJlNzVmOTNlCisgICAgbGkgICAgICAgICAgczEsIDB4MjFmOWJhNzkKKyAgICBsaSAgICAgICAgICBzMiwgMHhlY2MyZWZiMAorICAgIGxpICAgICAgICAgIHMzLCAweDUyMDMxY2NkCisKKzA6CisgICAgbGggICAgICAgICAgczYsIDMyKHQwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqMl0KKyAgICBsaCAgICAgICAgICB0NiwgMzIoYTApICAgICAgLy8gcXVhbnRwdHJbRENUU0laRSoyXQorICAgIGxoICAgICAgICAgIHM3LCA5Nih0MCkgICAgICAvLyBpbnB0cltEQ1RTSVpFKjZdCisgICAgbGggICAgICAgICAgdDcsIDk2KGEwKSAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqNl0KKyAgICBtdWwgICAgICAgICB0NiwgczYsIHQ2ICAgICAgLy8gejIgPSAoaW5wdHJbRENUU0laRSoyXSAqIHF1YW50cHRyW0RDVFNJWkUqMl0pCisgICAgbGggICAgICAgICAgczQsIDAodDApICAgICAgIC8vIGlucHRyW0RDVFNJWkUqMF0KKyAgICBtdWwgICAgICAgICB0NywgczcsIHQ3ICAgICAgLy8gejMgPSAoaW5wdHJbRENUU0laRSo2XSAqIHF1YW50cHRyW0RDVFNJWkUqNl0pCisgICAgbGggICAgICAgICAgczUsIDAoYTApICAgICAgIC8vIHF1YW50cHRyWzBdCisgICAgbGkgICAgICAgICAgczYsIDE1MTM3CisgICAgbGkgICAgICAgICAgczcsIDYyNzAKKyAgICBtdWwgICAgICAgICB0MiwgczQsIHM1ICAgICAgLy8gdG1wMCA9IChpbnB0clswXSAqIHF1YW50cHRyWzBdKQorICAgIG11bCAgICAgICAgIHQ2LCBzNiwgdDYgICAgICAvLyB6MiA9IChpbnB0cltEQ1RTSVpFKjJdICogcXVhbnRwdHJbRENUU0laRSoyXSkKKyAgICBsaCAgICAgICAgICB0NSwgMTEyKHQwKSAgICAgLy8gaW5wdHJbRENUU0laRSo3XQorICAgIG11bCAgICAgICAgIHQ3LCBzNywgdDcgICAgICAvLyB6MyA9IChpbnB0cltEQ1RTSVpFKjZdICogcXVhbnRwdHJbRENUU0laRSo2XSkKKyAgICBsaCAgICAgICAgICBzNCwgMTEyKGEwKSAgICAgLy8gcXVhbnRwdHJbRENUU0laRSo3XQorICAgIGxoICAgICAgICAgIHYwLCA4MCh0MCkgICAgICAvLyBpbnB0cltEQ1RTSVpFKjVdCisgICAgbGggICAgICAgICAgczUsIDgwKGEwKSAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqNV0KKyAgICBsaCAgICAgICAgICBzNiwgNDgoYTApICAgICAgLy8gcXVhbnRwdHJbRENUU0laRSozXQorICAgIHNsbCAgICAgICAgIHQyLCB0MiwgMTQgICAgICAvLyB0bXAwIDw8PSAoQ09OU1RfQklUUysxKQorICAgIGxoICAgICAgICAgIHM3LCAxNihhMCkgICAgICAvLyBxdWFudHB0cltEQ1RTSVpFKjFdCisgICAgbGggICAgICAgICAgdDgsIDE2KHQwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqMV0KKyAgICBzdWJ1ICAgICAgICB0NiwgdDYsIHQ3ICAgICAgLy8gdG1wMiA9IE1VTFRJUExZKHoyLCB0NSkgLSBNVUxUSVBMWSh6MywgdDYpCisgICAgbGggICAgICAgICAgdDcsIDQ4KHQwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqM10KKyAgICBtdWwgICAgICAgICB0NSwgczQsIHQ1ICAgICAgLy8gejEgPSAoaW5wdHJbRENUU0laRSo3XSAqIHF1YW50cHRyW0RDVFNJWkUqN10pCisgICAgbXVsICAgICAgICAgdjAsIHM1LCB2MCAgICAgIC8vIHoyID0gKGlucHRyW0RDVFNJWkUqNV0gKiBxdWFudHB0cltEQ1RTSVpFKjVdKQorICAgIG11bCAgICAgICAgIHQ3LCBzNiwgdDcgICAgICAvLyB6MyA9IChpbnB0cltEQ1RTSVpFKjNdICogcXVhbnRwdHJbRENUU0laRSozXSkKKyAgICBtdWwgICAgICAgICB0OCwgczcsIHQ4ICAgICAgLy8gejQgPSAoaW5wdHJbRENUU0laRSoxXSAqIHF1YW50cHRyW0RDVFNJWkUqMV0pCisgICAgYWRkdSAgICAgICAgdDMsIHQyLCB0NiAgICAgIC8vIHRtcDEwID0gdG1wMCArIHoyCisgICAgc3VidSAgICAgICAgdDQsIHQyLCB0NiAgICAgIC8vIHRtcDEwID0gdG1wMCAtIHoyCisgICAgbXVsdCAgICAgICAgJGFjMCwgemVybywgemVybworICAgIG11bHQgICAgICAgICRhYzEsIHplcm8sIHplcm8KKyAgICBpbnMgICAgICAgICB0NSwgdjAsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHQ3LCB0OCwgMTYsIDE2CisgICAgYWRkaXUgICAgICAgdDksIHQ5LCAtMQorICAgIGRwYS53LnBoICAgICRhYzAsIHQ1LCBzMAorICAgIGRwYS53LnBoICAgICRhYzAsIHQ3LCBzMQorICAgIGRwYS53LnBoICAgICRhYzEsIHQ1LCBzMgorICAgIGRwYS53LnBoICAgICRhYzEsIHQ3LCBzMworICAgIG1mbG8gICAgICAgIHM0LCAkYWMwCisgICAgbWZsbyAgICAgICAgczUsICRhYzEKKyAgICBhZGRpdSAgICAgICBhMCwgYTAsIDIKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIDQKKyAgICBhZGRpdSAgICAgICB0MCwgdDAsIDIKKyAgICBhZGR1ICAgICAgICB0NiwgdDQsIHM0CisgICAgc3VidSAgICAgICAgdDUsIHQ0LCBzNAorICAgIGFkZHUgICAgICAgIHM2LCB0MywgczUKKyAgICBzdWJ1ICAgICAgICBzNywgdDMsIHM1CisgICAgc2hyYV9yLncgICAgdDYsIHQ2LCAxMiAgICAgIC8vIERFU0NBTEUodG1wMTIgKyB0ZW1wMSwgMTIpCisgICAgc2hyYV9yLncgICAgdDUsIHQ1LCAxMiAgICAgIC8vIERFU0NBTEUodG1wMTIgLSB0ZW1wMSwgMTIpCisgICAgc2hyYV9yLncgICAgczYsIHM2LCAxMiAgICAgIC8vIERFU0NBTEUodG1wMTAgKyB0ZW1wMiwgMTIpCisgICAgc2hyYV9yLncgICAgczcsIHM3LCAxMiAgICAgIC8vIERFU0NBTEUodG1wMTAgLSB0ZW1wMiwgMTIpCisgICAgc3cgICAgICAgICAgdDYsIDI4KHQxKQorICAgIHN3ICAgICAgICAgIHQ1LCA2MCh0MSkKKyAgICBzdyAgICAgICAgICBzNiwgLTQodDEpCisgICAgYmd0eiAgICAgICAgdDksIDBiCisgICAgIHN3ICAgICAgICAgczcsIDkyKHQxKQorICAgIC8vIHNlY29uZCBsb29wIHRocmVlIHBhc3MKKyAgICBsaSAgICAgICAgICB0OSwgMworMToKKyAgICBsaCAgICAgICAgICBzNiwgMzQodDApICAgICAgLy8gaW5wdHJbRENUU0laRSoyXQorICAgIGxoICAgICAgICAgIHQ2LCAzNChhMCkgICAgICAvLyBxdWFudHB0cltEQ1RTSVpFKjJdCisgICAgbGggICAgICAgICAgczcsIDk4KHQwKSAgICAgIC8vIGlucHRyW0RDVFNJWkUqNl0KKyAgICBsaCAgICAgICAgICB0NywgOTgoYTApICAgICAgLy8gcXVhbnRwdHJbRENUU0laRSo2XQorICAgIG11bCAgICAgICAgIHQ2LCBzNiwgdDYgICAgICAvLyB6MiA9IChpbnB0cltEQ1RTSVpFKjJdICogcXVhbnRwdHJbRENUU0laRSoyXSkKKyAgICBsaCAgICAgICAgICBzNCwgMih0MCkgICAgICAgLy8gaW5wdHJbRENUU0laRSowXQorICAgIG11bCAgICAgICAgIHQ3LCBzNywgdDcgICAgICAvLyB6MyA9IChpbnB0cltEQ1RTSVpFKjZdICogcXVhbnRwdHJbRENUU0laRSo2XSkKKyAgICBsaCAgICAgICAgICBzNSwgMihhMCkgICAgICAgLy8gcXVhbnRwdHJbRENUU0laRSowXQorICAgIGxpICAgICAgICAgIHM2LCAxNTEzNworICAgIGxpICAgICAgICAgIHM3LCA2MjcwCisgICAgbXVsICAgICAgICAgdDIsIHM0LCBzNSAgICAgIC8vIHRtcDAgPSAoaW5wdHJbMF0gKiBxdWFudHB0clswXSkKKyAgICBtdWwgICAgICAgICB2MCwgczYsIHQ2ICAgICAgLy8gejIgPSAoaW5wdHJbRENUU0laRSoyXSAqIHF1YW50cHRyW0RDVFNJWkUqMl0pCisgICAgbGggICAgICAgICAgdDUsIDExNCh0MCkgICAgIC8vIGlucHRyW0RDVFNJWkUqN10KKyAgICBtdWwgICAgICAgICB0NywgczcsIHQ3ICAgICAgLy8gejMgPSAoaW5wdHJbRENUU0laRSo2XSAqIHF1YW50cHRyW0RDVFNJWkUqNl0pCisgICAgbGggICAgICAgICAgczQsIDExNChhMCkgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqN10KKyAgICBsaCAgICAgICAgICBzNSwgODIoYTApICAgICAgLy8gcXVhbnRwdHJbRENUU0laRSo1XQorICAgIGxoICAgICAgICAgIHQ2LCA4Mih0MCkgICAgICAvLyBpbnB0cltEQ1RTSVpFKjVdCisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxNCAgICAgIC8vIHRtcDAgPDw9IChDT05TVF9CSVRTKzEpCisgICAgbGggICAgICAgICAgczYsIDUwKGEwKSAgICAgIC8vIHF1YW50cHRyW0RDVFNJWkUqM10KKyAgICBsaCAgICAgICAgICB0OCwgMTgodDApICAgICAgLy8gaW5wdHJbRENUU0laRSoxXQorICAgIHN1YnUgICAgICAgIHYwLCB2MCwgdDcgICAgICAvLyB0bXAyID0gTVVMVElQTFkoejIsIHQ1KSAtIE1VTFRJUExZKHozLCB0NikKKyAgICBsaCAgICAgICAgICB0NywgNTAodDApICAgICAgLy8gaW5wdHJbRENUU0laRSozXQorICAgIGxoICAgICAgICAgIHM3LCAxOChhMCkgICAgICAvLyBxdWFudHB0cltEQ1RTSVpFKjFdCisgICAgbXVsICAgICAgICAgdDUsIHM0LCB0NSAgICAgIC8vIHoxID0gKGlucHRyW0RDVFNJWkUqN10gKiBxdWFudHB0cltEQ1RTSVpFKjddKQorICAgIG11bCAgICAgICAgIHQ2LCBzNSwgdDYgICAgICAvLyB6MiA9IChpbnB0cltEQ1RTSVpFKjVdICogcXVhbnRwdHJbRENUU0laRSo1XSkKKyAgICBtdWwgICAgICAgICB0NywgczYsIHQ3ICAgICAgLy8gejMgPSAoaW5wdHJbRENUU0laRSozXSAqIHF1YW50cHRyW0RDVFNJWkUqM10pCisgICAgbXVsICAgICAgICAgdDgsIHM3LCB0OCAgICAgIC8vIHo0ID0gKGlucHRyW0RDVFNJWkUqMV0gKiBxdWFudHB0cltEQ1RTSVpFKjFdKQorICAgIGFkZHUgICAgICAgIHQzLCB0MiwgdjAgICAgICAvLyB0bXAxMCA9IHRtcDAgKyB6MgorICAgIHN1YnUgICAgICAgIHQ0LCB0MiwgdjAgICAgICAvLyB0bXAxMCA9IHRtcDAgLSB6MgorICAgIG11bHQgICAgICAgICRhYzAsIHplcm8sIHplcm8KKyAgICBtdWx0ICAgICAgICAkYWMxLCB6ZXJvLCB6ZXJvCisgICAgaW5zICAgICAgICAgdDUsIHQ2LCAxNiwgMTYKKyAgICBpbnMgICAgICAgICB0NywgdDgsIDE2LCAxNgorICAgIGRwYS53LnBoICAgICRhYzAsIHQ1LCBzMAorICAgIGRwYS53LnBoICAgICRhYzAsIHQ3LCBzMQorICAgIGRwYS53LnBoICAgICRhYzEsIHQ1LCBzMgorICAgIGRwYS53LnBoICAgICRhYzEsIHQ3LCBzMworICAgIG1mbG8gICAgICAgIHQ1LCAkYWMwCisgICAgbWZsbyAgICAgICAgdDYsICRhYzEKKyAgICBhZGRpdSAgICAgICB0OSwgdDksIC0xCisgICAgYWRkaXUgICAgICAgdDAsIHQwLCAyCisgICAgYWRkaXUgICAgICAgYTAsIGEwLCAyCisgICAgYWRkaXUgICAgICAgdDEsIHQxLCA0CisgICAgYWRkdSAgICAgICAgczUsIHQ0LCB0NQorICAgIHN1YnUgICAgICAgIHM0LCB0NCwgdDUKKyAgICBhZGR1ICAgICAgICBzNiwgdDMsIHQ2CisgICAgc3VidSAgICAgICAgczcsIHQzLCB0NgorICAgIHNocmFfci53ICAgIHM1LCBzNSwgMTIgICAgICAvLyBERVNDQUxFKHRtcDEyICsgdGVtcDEsIDEyKQorICAgIHNocmFfci53ICAgIHM0LCBzNCwgMTIgICAgICAvLyBERVNDQUxFKHRtcDEyIC0gdGVtcDEsIDEyKQorICAgIHNocmFfci53ICAgIHM2LCBzNiwgMTIgICAgICAvLyBERVNDQUxFKHRtcDEwICsgdGVtcDIsIDEyKQorICAgIHNocmFfci53ICAgIHM3LCBzNywgMTIgICAgICAvLyBERVNDQUxFKHRtcDEwIC0gdGVtcDIsIDEyKQorICAgIHN3ICAgICAgICAgIHM1LCAzMih0MSkKKyAgICBzdyAgICAgICAgICBzNCwgNjQodDEpCisgICAgc3cgICAgICAgICAgczYsIDAodDEpCisgICAgYmd0eiAgICAgICAgdDksIDFiCisgICAgIHN3ICAgICAgICAgczcsIDk2KHQxKQorICAgIG1vdmUgICAgICAgIHQxLCB2MQorICAgIGxpICAgICAgICAgIHM0LCAxNTEzNworICAgIGx3ICAgICAgICAgIHM2LCA4KHQxKSAgICAgICAvLyB3c3B0clsyXQorICAgIGxpICAgICAgICAgIHM1LCA2MjcwCisgICAgbHcgICAgICAgICAgczcsIDI0KHQxKSAgICAgIC8vIHdzcHRyWzZdCisgICAgbXVsICAgICAgICAgczQsIHM0LCBzNiAgICAgIC8vIE1VTFRJUExZKChKTE9ORyl3c3B0clsyXSwgRklYXzFfODQ3NzU5MDY1KQorICAgIGx3ICAgICAgICAgIHQyLCAwKHQxKSAgICAgICAvLyB3c3B0clswXQorICAgIG11bCAgICAgICAgIHM1LCBzNSwgczcgICAgICAvLyBNVUxUSVBMWSgoSkxPTkcpd3NwdHJbNl0sIC1GSVhfMF83NjUzNjY4NjUpCisgICAgbGggICAgICAgICAgdDUsIDI4KHQxKSAgICAgIC8vIHdzcHRyWzddCisgICAgbGggICAgICAgICAgdDYsIDIwKHQxKSAgICAgIC8vIHdzcHRyWzVdCisgICAgbGggICAgICAgICAgdDcsIDEyKHQxKSAgICAgIC8vIHdzcHRyWzNdCisgICAgbGggICAgICAgICAgdDgsIDQodDEpICAgICAgIC8vIHdzcHRyWzFdCisgICAgaW5zICAgICAgICAgdDUsIHQ2LCAxNiwgMTYKKyAgICBpbnMgICAgICAgICB0NywgdDgsIDE2LCAxNgorICAgIG11bHQgICAgICAgICRhYzAsIHplcm8sIHplcm8KKyAgICBkcGEudy5waCAgICAkYWMwLCB0NSwgczAKKyAgICBkcGEudy5waCAgICAkYWMwLCB0NywgczEKKyAgICBtdWx0ICAgICAgICAkYWMxLCB6ZXJvLCB6ZXJvCisgICAgZHBhLncucGggICAgJGFjMSwgdDUsIHMyCisgICAgZHBhLncucGggICAgJGFjMSwgdDcsIHMzCisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxNCAgICAgIC8vIHRtcDAgPSAoKEpMT05HKXdzcHRyWzBdKSA8PCAoQ09OU1RfQklUUysxKQorICAgIG1mbG8gICAgICAgIHM2LCAkYWMwCisgICAgLy8gTVVMVElQTFkod3NwdHJbMl0sIEZJWF8xXzg0Nzc1OTA2NSArIE1VTFRJUExZKHdzcHRyWzZdLCAtRklYXzBfNzY1MzY2ODY1KQorICAgIHN1YnUgICAgICAgIHM0LCBzNCwgczUKKyAgICBhZGR1ICAgICAgICB0MywgdDIsIHM0ICAgICAgLy8gdG1wMTAgPSB0bXAwICsgejIKKyAgICBtZmxvICAgICAgICBzNywgJGFjMQorICAgIHN1YnUgICAgICAgIHQ0LCB0MiwgczQgICAgICAvLyB0bXAxMCA9IHRtcDAgLSB6MgorICAgIGFkZHUgICAgICAgIHQ3LCB0NCwgczYKKyAgICBzdWJ1ICAgICAgICB0OCwgdDQsIHM2CisgICAgYWRkdSAgICAgICAgdDUsIHQzLCBzNworICAgIHN1YnUgICAgICAgIHQ2LCB0MywgczcKKyAgICBzaHJhX3IudyAgICB0NSwgdDUsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMCArIHRlbXAyLCAxOSkKKyAgICBzaHJhX3IudyAgICB0NiwgdDYsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMCAtIHRlbXAyLCAxOSkKKyAgICBzaHJhX3IudyAgICB0NywgdDcsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMiArIHRlbXAxLCAxOSkKKyAgICBzaHJhX3IudyAgICB0OCwgdDgsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMiAtIHRlbXAxLCAxOSkKKyAgICBzbGwgICAgICAgICBzNCwgdDksIDIKKyAgICBsdyAgICAgICAgICB2MCwgMChhMikgICAgICAgLy8gb3V0cHV0X2J1ZltjdHJdCisgICAgc2hsbF9zLncgICAgdDUsIHQ1LCAyNAorICAgIHNobGxfcy53ICAgIHQ2LCB0NiwgMjQKKyAgICBzaGxsX3MudyAgICB0NywgdDcsIDI0CisgICAgc2hsbF9zLncgICAgdDgsIHQ4LCAyNAorICAgIHNyYSAgICAgICAgIHQ1LCB0NSwgMjQKKyAgICBzcmEgICAgICAgICB0NiwgdDYsIDI0CisgICAgc3JhICAgICAgICAgdDcsIHQ3LCAyNAorICAgIHNyYSAgICAgICAgIHQ4LCB0OCwgMjQKKyAgICBhZGR1ICAgICAgICB2MCwgdjAsIGEzICAgICAgLy8gb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbAorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgMTI4CisgICAgYWRkaXUgICAgICAgdDYsIHQ2LCAxMjgKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIDEyOAorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgMTI4CisgICAgc2IgICAgICAgICAgdDUsIDAodjApCisgICAgc2IgICAgICAgICAgdDcsIDEodjApCisgICAgc2IgICAgICAgICAgdDgsIDIodjApCisgICAgc2IgICAgICAgICAgdDYsIDModjApCisgICAgLy8gMgorICAgIGxpICAgICAgICAgIHM0LCAxNTEzNworICAgIGx3ICAgICAgICAgIHM2LCA0MCh0MSkgICAgICAvLyB3c3B0clsyXQorICAgIGxpICAgICAgICAgIHM1LCA2MjcwCisgICAgbHcgICAgICAgICAgczcsIDU2KHQxKSAgICAgIC8vIHdzcHRyWzZdCisgICAgbXVsICAgICAgICAgczQsIHM0LCBzNiAgICAgIC8vIE1VTFRJUExZKChKTE9ORyl3c3B0clsyXSwgRklYXzFfODQ3NzU5MDY1KQorICAgIGx3ICAgICAgICAgIHQyLCAzMih0MSkgICAgICAvLyB3c3B0clswXQorICAgIG11bCAgICAgICAgIHM1LCBzNSwgczcgICAgICAvLyBNVUxUSVBMWSgoSkxPTkcpd3NwdHJbNl0sIC1GSVhfMF83NjUzNjY4NjUpCisgICAgbGggICAgICAgICAgdDUsIDYwKHQxKSAgICAgIC8vIHdzcHRyWzddCisgICAgbGggICAgICAgICAgdDYsIDUyKHQxKSAgICAgIC8vIHdzcHRyWzVdCisgICAgbGggICAgICAgICAgdDcsIDQ0KHQxKSAgICAgIC8vIHdzcHRyWzNdCisgICAgbGggICAgICAgICAgdDgsIDM2KHQxKSAgICAgIC8vIHdzcHRyWzFdCisgICAgaW5zICAgICAgICAgdDUsIHQ2LCAxNiwgMTYKKyAgICBpbnMgICAgICAgICB0NywgdDgsIDE2LCAxNgorICAgIG11bHQgICAgICAgICRhYzAsIHplcm8sIHplcm8KKyAgICBkcGEudy5waCAgICAkYWMwLCB0NSwgczAKKyAgICBkcGEudy5waCAgICAkYWMwLCB0NywgczEKKyAgICBtdWx0ICAgICAgICAkYWMxLCB6ZXJvLCB6ZXJvCisgICAgZHBhLncucGggICAgJGFjMSwgdDUsIHMyCisgICAgZHBhLncucGggICAgJGFjMSwgdDcsIHMzCisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxNCAgICAgIC8vIHRtcDAgPSAoKEpMT05HKXdzcHRyWzBdKSA8PCAoQ09OU1RfQklUUysxKQorICAgIG1mbG8gICAgICAgIHM2LCAkYWMwCisgICAgLy8gTVVMVElQTFkod3NwdHJbMl0sIEZJWF8xXzg0Nzc1OTA2NSArIE1VTFRJUExZKHdzcHRyWzZdLCAtRklYXzBfNzY1MzY2ODY1KQorICAgIHN1YnUgICAgICAgIHM0LCBzNCwgczUKKyAgICBhZGR1ICAgICAgICB0MywgdDIsIHM0ICAgICAgLy8gdG1wMTAgPSB0bXAwICsgejIKKyAgICBtZmxvICAgICAgICBzNywgJGFjMQorICAgIHN1YnUgICAgICAgIHQ0LCB0MiwgczQgICAgICAvLyB0bXAxMCA9IHRtcDAgLSB6MgorICAgIGFkZHUgICAgICAgIHQ3LCB0NCwgczYKKyAgICBzdWJ1ICAgICAgICB0OCwgdDQsIHM2CisgICAgYWRkdSAgICAgICAgdDUsIHQzLCBzNworICAgIHN1YnUgICAgICAgIHQ2LCB0MywgczcKKyAgICBzaHJhX3IudyAgICB0NSwgdDUsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMCArIHRlbXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKyAgICBzaHJhX3IudyAgICB0NiwgdDYsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMCAtIHRlbXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKyAgICBzaHJhX3IudyAgICB0NywgdDcsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMiArIHRlbXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKyAgICBzaHJhX3IudyAgICB0OCwgdDgsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMiAtIHRlbXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKyAgICBzbGwgICAgICAgICBzNCwgdDksIDIKKyAgICBsdyAgICAgICAgICB2MCwgNChhMikgICAgICAgLy8gb3V0cHV0X2J1ZltjdHJdCisgICAgc2hsbF9zLncgICAgdDUsIHQ1LCAyNAorICAgIHNobGxfcy53ICAgIHQ2LCB0NiwgMjQKKyAgICBzaGxsX3MudyAgICB0NywgdDcsIDI0CisgICAgc2hsbF9zLncgICAgdDgsIHQ4LCAyNAorICAgIHNyYSAgICAgICAgIHQ1LCB0NSwgMjQKKyAgICBzcmEgICAgICAgICB0NiwgdDYsIDI0CisgICAgc3JhICAgICAgICAgdDcsIHQ3LCAyNAorICAgIHNyYSAgICAgICAgIHQ4LCB0OCwgMjQKKyAgICBhZGR1ICAgICAgICB2MCwgdjAsIGEzICAgICAgLy8gb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbAorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgMTI4CisgICAgYWRkaXUgICAgICAgdDYsIHQ2LCAxMjgKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIDEyOAorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgMTI4CisgICAgc2IgICAgICAgICAgdDUsIDAodjApCisgICAgc2IgICAgICAgICAgdDcsIDEodjApCisgICAgc2IgICAgICAgICAgdDgsIDIodjApCisgICAgc2IgICAgICAgICAgdDYsIDModjApCisgICAgLy8gMworICAgIGxpICAgICAgICAgIHM0LCAxNTEzNworICAgIGx3ICAgICAgICAgIHM2LCA3Mih0MSkgICAgICAvLyB3c3B0clsyXQorICAgIGxpICAgICAgICAgIHM1LCA2MjcwCisgICAgbHcgICAgICAgICAgczcsIDg4KHQxKSAgICAgIC8vIHdzcHRyWzZdCisgICAgbXVsICAgICAgICAgczQsIHM0LCBzNiAgICAgIC8vIE1VTFRJUExZKChKTE9ORyl3c3B0clsyXSwgRklYXzFfODQ3NzU5MDY1KQorICAgIGx3ICAgICAgICAgIHQyLCA2NCh0MSkgICAgICAvLyB3c3B0clswXQorICAgIG11bCAgICAgICAgIHM1LCBzNSwgczcgICAgICAvLyBNVUxUSVBMWSgoSkxPTkcpd3NwdHJbNl0sIC1GSVhfMF83NjUzNjY4NjUpCisgICAgbGggICAgICAgICAgdDUsIDkyKHQxKSAgICAgIC8vIHdzcHRyWzddCisgICAgbGggICAgICAgICAgdDYsIDg0KHQxKSAgICAgIC8vIHdzcHRyWzVdCisgICAgbGggICAgICAgICAgdDcsIDc2KHQxKSAgICAgIC8vIHdzcHRyWzNdCisgICAgbGggICAgICAgICAgdDgsIDY4KHQxKSAgICAgIC8vIHdzcHRyWzFdCisgICAgaW5zICAgICAgICAgdDUsIHQ2LCAxNiwgMTYKKyAgICBpbnMgICAgICAgICB0NywgdDgsIDE2LCAxNgorICAgIG11bHQgICAgICAgICRhYzAsIHplcm8sIHplcm8KKyAgICBkcGEudy5waCAgICAkYWMwLCB0NSwgczAKKyAgICBkcGEudy5waCAgICAkYWMwLCB0NywgczEKKyAgICBtdWx0ICAgICAgICAkYWMxLCB6ZXJvLCB6ZXJvCisgICAgZHBhLncucGggICAgJGFjMSwgdDUsIHMyCisgICAgZHBhLncucGggICAgJGFjMSwgdDcsIHMzCisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxNCAgICAgIC8vIHRtcDAgPSAoKEpMT05HKXdzcHRyWzBdKSA8PCAoQ09OU1RfQklUUysxKQorICAgIG1mbG8gICAgICAgIHM2LCAkYWMwCisgICAgLy8gTVVMVElQTFkod3NwdHJbMl0sIEZJWF8xXzg0Nzc1OTA2NSArIE1VTFRJUExZKHdzcHRyWzZdLCAtRklYXzBfNzY1MzY2ODY1KQorICAgIHN1YnUgICAgICAgIHM0LCBzNCwgczUKKyAgICBhZGR1ICAgICAgICB0MywgdDIsIHM0ICAgICAgLy8gdG1wMTAgPSB0bXAwICsgejIKKyAgICBtZmxvICAgICAgICBzNywgJGFjMQorICAgIHN1YnUgICAgICAgIHQ0LCB0MiwgczQgICAgICAvLyB0bXAxMCA9IHRtcDAgLSB6MgorICAgIGFkZHUgICAgICAgIHQ3LCB0NCwgczYKKyAgICBzdWJ1ICAgICAgICB0OCwgdDQsIHM2CisgICAgYWRkdSAgICAgICAgdDUsIHQzLCBzNworICAgIHN1YnUgICAgICAgIHQ2LCB0MywgczcKKyAgICBzaHJhX3IudyAgICB0NSwgdDUsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMCArIHRlbXAyLCAxOSkKKyAgICBzaHJhX3IudyAgICB0NiwgdDYsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMCAtIHRlbXAyLCAxOSkKKyAgICBzaHJhX3IudyAgICB0NywgdDcsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMiArIHRlbXAxLCAxOSkKKyAgICBzaHJhX3IudyAgICB0OCwgdDgsIDE5ICAgICAgLy8gREVTQ0FMRSh0bXAxMiAtIHRlbXAxLCAxOSkKKyAgICBzbGwgICAgICAgICBzNCwgdDksIDIKKyAgICBsdyAgICAgICAgICB2MCwgOChhMikgICAgICAgLy8gb3V0cHV0X2J1ZltjdHJdCisgICAgc2hsbF9zLncgICAgdDUsIHQ1LCAyNAorICAgIHNobGxfcy53ICAgIHQ2LCB0NiwgMjQKKyAgICBzaGxsX3MudyAgICB0NywgdDcsIDI0CisgICAgc2hsbF9zLncgICAgdDgsIHQ4LCAyNAorICAgIHNyYSAgICAgICAgIHQ1LCB0NSwgMjQKKyAgICBzcmEgICAgICAgICB0NiwgdDYsIDI0CisgICAgc3JhICAgICAgICAgdDcsIHQ3LCAyNAorICAgIHNyYSAgICAgICAgIHQ4LCB0OCwgMjQKKyAgICBhZGR1ICAgICAgICB2MCwgdjAsIGEzICAgICAgLy8gb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbAorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgMTI4CisgICAgYWRkaXUgICAgICAgdDYsIHQ2LCAxMjgKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIDEyOAorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgMTI4CisgICAgc2IgICAgICAgICAgdDUsIDAodjApCisgICAgc2IgICAgICAgICAgdDcsIDEodjApCisgICAgc2IgICAgICAgICAgdDgsIDIodjApCisgICAgc2IgICAgICAgICAgdDYsIDModjApCisgICAgbGkgICAgICAgICAgczQsIDE1MTM3CisgICAgbHcgICAgICAgICAgczYsIDEwNCh0MSkgICAgIC8vIHdzcHRyWzJdCisgICAgbGkgICAgICAgICAgczUsIDYyNzAKKyAgICBsdyAgICAgICAgICBzNywgMTIwKHQxKSAgICAgLy8gd3NwdHJbNl0KKyAgICBtdWwgICAgICAgICBzNCwgczQsIHM2ICAgICAgLy8gTVVMVElQTFkoKEpMT05HKXdzcHRyWzJdLCBGSVhfMV84NDc3NTkwNjUpCisgICAgbHcgICAgICAgICAgdDIsIDk2KHQxKSAgICAgIC8vIHdzcHRyWzBdCisgICAgbXVsICAgICAgICAgczUsIHM1LCBzNyAgICAgIC8vIE1VTFRJUExZKChKTE9ORyl3c3B0cls2XSwgLUZJWF8wXzc2NTM2Njg2NSkKKyAgICBsaCAgICAgICAgICB0NSwgMTI0KHQxKSAgICAgLy8gd3NwdHJbN10KKyAgICBsaCAgICAgICAgICB0NiwgMTE2KHQxKSAgICAgLy8gd3NwdHJbNV0KKyAgICBsaCAgICAgICAgICB0NywgMTA4KHQxKSAgICAgLy8gd3NwdHJbM10KKyAgICBsaCAgICAgICAgICB0OCwgMTAwKHQxKSAgICAgLy8gd3NwdHJbMV0KKyAgICBpbnMgICAgICAgICB0NSwgdDYsIDE2LCAxNgorICAgIGlucyAgICAgICAgIHQ3LCB0OCwgMTYsIDE2CisgICAgbXVsdCAgICAgICAgJGFjMCwgemVybywgemVybworICAgIGRwYS53LnBoICAgICRhYzAsIHQ1LCBzMAorICAgIGRwYS53LnBoICAgICRhYzAsIHQ3LCBzMQorICAgIG11bHQgICAgICAgICRhYzEsIHplcm8sIHplcm8KKyAgICBkcGEudy5waCAgICAkYWMxLCB0NSwgczIKKyAgICBkcGEudy5waCAgICAkYWMxLCB0NywgczMKKyAgICBzbGwgICAgICAgICB0MiwgdDIsIDE0ICAgICAgLy8gdG1wMCA9ICgoSkxPTkcpd3NwdHJbMF0pIDw8IChDT05TVF9CSVRTKzEpCisgICAgbWZsbyAgICAgICAgczYsICRhYzAKKyAgICAvLyBNVUxUSVBMWSh3c3B0clsyXSwgRklYXzFfODQ3NzU5MDY1ICsgTVVMVElQTFkod3NwdHJbNl0sIC1GSVhfMF83NjUzNjY4NjUpCisgICAgc3VidSAgICAgICAgczQsIHM0LCBzNQorICAgIGFkZHUgICAgICAgIHQzLCB0MiwgczQgICAgICAvLyB0bXAxMCA9IHRtcDAgKyB6MjsKKyAgICBtZmxvICAgICAgICBzNywgJGFjMQorICAgIHN1YnUgICAgICAgIHQ0LCB0MiwgczQgICAgICAvLyB0bXAxMCA9IHRtcDAgLSB6MjsKKyAgICBhZGR1ICAgICAgICB0NywgdDQsIHM2CisgICAgc3VidSAgICAgICAgdDgsIHQ0LCBzNgorICAgIGFkZHUgICAgICAgIHQ1LCB0MywgczcKKyAgICBzdWJ1ICAgICAgICB0NiwgdDMsIHM3CisgICAgc2hyYV9yLncgICAgdDUsIHQ1LCAxOSAgICAgIC8vIERFU0NBTEUodG1wMTAgKyB0ZW1wMiwgMTkpCisgICAgc2hyYV9yLncgICAgdDYsIHQ2LCAxOSAgICAgIC8vIERFU0NBTEUodG1wMTAgLSB0ZW1wMiwgMTkpCisgICAgc2hyYV9yLncgICAgdDcsIHQ3LCAxOSAgICAgIC8vIERFU0NBTEUodG1wMTIgKyB0ZW1wMSwgMTkpCisgICAgc2hyYV9yLncgICAgdDgsIHQ4LCAxOSAgICAgIC8vIERFU0NBTEUodG1wMTIgLSB0ZW1wMSwgMTkpCisgICAgc2xsICAgICAgICAgczQsIHQ5LCAyCisgICAgbHcgICAgICAgICAgdjAsIDEyKGEyKSAgICAgIC8vIG91dHB1dF9idWZbY3RyXQorICAgIHNobGxfcy53ICAgIHQ1LCB0NSwgMjQKKyAgICBzaGxsX3MudyAgICB0NiwgdDYsIDI0CisgICAgc2hsbF9zLncgICAgdDcsIHQ3LCAyNAorICAgIHNobGxfcy53ICAgIHQ4LCB0OCwgMjQKKyAgICBzcmEgICAgICAgICB0NSwgdDUsIDI0CisgICAgc3JhICAgICAgICAgdDYsIHQ2LCAyNAorICAgIHNyYSAgICAgICAgIHQ3LCB0NywgMjQKKyAgICBzcmEgICAgICAgICB0OCwgdDgsIDI0CisgICAgYWRkdSAgICAgICAgdjAsIHYwLCBhMyAgICAgIC8vIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2wKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIDEyOAorICAgIGFkZGl1ICAgICAgIHQ2LCB0NiwgMTI4CisgICAgYWRkaXUgICAgICAgdDcsIHQ3LCAxMjgKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIDEyOAorICAgIHNiICAgICAgICAgIHQ1LCAwKHYwKQorICAgIHNiICAgICAgICAgIHQ3LCAxKHYwKQorICAgIHNiICAgICAgICAgIHQ4LCAyKHYwKQorICAgIHNiICAgICAgICAgIHQ2LCAzKHYwKQorCisgICAgUkVTVE9SRV9SRUdTX0ZST01fU1RBQ0sgMzIsIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNworCisgICAgaiAgICAgICAgICAgcmEKKyAgICAgbm9wCitFTkQoanNpbWRfaWRjdF80eDRfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9pZGN0XzZ4Nl9kc3ByMikKKy8qCisgKiBhMCA9IGNvbXBwdHItPmRjdF90YWJsZQorICogYTEgPSBjb2VmX2Jsb2NrCisgKiBhMiA9IG91dHB1dF9idWYKKyAqIGEzID0gb3V0cHV0X2NvbAorICovCisgICAgLnNldCBhdAorCisgICAgU0FWRV9SRUdTX09OX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGFkZGl1ICAgICAgIHNwLCBzcCwgLTE0NAorICAgIG1vdmUgICAgICAgIHYwLCBzcAorICAgIGFkZGl1ICAgICAgIHYxLCB2MCwgMjQKKyAgICBhZGRpdSAgICAgICB0OSwgemVybywgNTc5MworICAgIGFkZGl1ICAgICAgIHMwLCB6ZXJvLCAxMDAzMworICAgIGFkZGl1ICAgICAgIHMxLCB6ZXJvLCAyOTk4CisKKzE6CisgICAgbGggICAgICAgICAgczIsIDAoYTApICAgICAgIC8vIHEwID0gcXVhbnRwdHJbIDBdCisgICAgbGggICAgICAgICAgczMsIDMyKGEwKSAgICAgIC8vIHExID0gcXVhbnRwdHJbMTZdCisgICAgbGggICAgICAgICAgczQsIDY0KGEwKSAgICAgIC8vIHEyID0gcXVhbnRwdHJbMzJdCisgICAgbGggICAgICAgICAgdDIsIDY0KGExKSAgICAgIC8vIHRtcDIgPSBpbnB0clszMl0KKyAgICBsaCAgICAgICAgICB0MSwgMzIoYTEpICAgICAgLy8gdG1wMSA9IGlucHRyWzE2XQorICAgIGxoICAgICAgICAgIHQwLCAwKGExKSAgICAgICAvLyB0bXAwID0gaW5wdHJbIDBdCisgICAgbXVsICAgICAgICAgdDIsIHQyLCBzNCAgICAgIC8vIHRtcDIgPSB0bXAyICogcTIKKyAgICBtdWwgICAgICAgICB0MSwgdDEsIHMzICAgICAgLy8gdG1wMSA9IHRtcDEgKiBxMQorICAgIG11bCAgICAgICAgIHQwLCB0MCwgczIgICAgICAvLyB0bXAwID0gdG1wMCAqIHEwCisgICAgbGggICAgICAgICAgdDYsIDE2KGExKSAgICAgIC8vIHoxID0gaW5wdHJbIDhdCisgICAgbGggICAgICAgICAgdDgsIDgwKGExKSAgICAgIC8vIHozID0gaW5wdHJbNDBdCisgICAgbGggICAgICAgICAgdDcsIDQ4KGExKSAgICAgIC8vIHoyID0gaW5wdHJbMjRdCisgICAgbGggICAgICAgICAgczIsIDE2KGEwKSAgICAgIC8vIHEwID0gcXVhbnRwdHJbIDhdCisgICAgbGggICAgICAgICAgczQsIDgwKGEwKSAgICAgIC8vIHEyID0gcXVhbnRwdHJbNDBdCisgICAgbGggICAgICAgICAgczMsIDQ4KGEwKSAgICAgIC8vIHExID0gcXVhbnRwdHJbMjRdCisgICAgbXVsICAgICAgICAgdDIsIHQyLCB0OSAgICAgIC8vIHRtcDIgPSB0bXAyICogNTc5MworICAgIG11bCAgICAgICAgIHQxLCB0MSwgczAgICAgICAvLyB0bXAxID0gdG1wMSAqIDEwMDMzCisgICAgc2xsICAgICAgICAgdDAsIHQwLCAxMyAgICAgIC8vIHRtcDAgPSB0bXAwIDw8IDEzCisgICAgbXVsICAgICAgICAgdDYsIHQ2LCBzMiAgICAgIC8vIHoxID0gejEgKiBxMAorICAgIG11bCAgICAgICAgIHQ4LCB0OCwgczQgICAgICAvLyB6MyA9IHozICogcTIKKyAgICBtdWwgICAgICAgICB0NywgdDcsIHMzICAgICAgLy8gejIgPSB6MiAqIHExCisgICAgYWRkdSAgICAgICAgdDMsIHQwLCB0MiAgICAgIC8vIHRtcDEwID0gdG1wMCArIHRtcDIKKyAgICBzbGwgICAgICAgICB0MiwgdDIsIDEgICAgICAgLy8gdG1wMiA9IHRtcDIgPDwgMgorICAgIHN1YnUgICAgICAgIHQ0LCB0MCwgdDIgICAgICAvLyB0bXAxMSA9IHRtcDAgLSB0bXAyOworICAgIHN1YnUgICAgICAgIHQ1LCB0MywgdDEgICAgICAvLyB0bXAxMiA9IHRtcDEwIC0gdG1wMQorICAgIGFkZHUgICAgICAgIHQzLCB0MywgdDEgICAgICAvLyB0bXAxMCA9IHRtcDEwICsgdG1wMQorICAgIGFkZHUgICAgICAgIHQxLCB0NiwgdDggICAgICAvLyB0bXAxID0gejEgKyB6MworICAgIG11bCAgICAgICAgIHQxLCB0MSwgczEgICAgICAvLyB0bXAxID0gdG1wMSAqIDI5OTgKKyAgICBzaHJhX3IudyAgICB0NCwgdDQsIDExICAgICAgLy8gdG1wMTEgPSAodG1wMTEgKyAxMDI0KSA+PiAxMQorICAgIHN1YnUgICAgICAgIHQyLCB0NiwgdDggICAgICAvLyB0bXAyID0gejEgLSB6MworICAgIHN1YnUgICAgICAgIHQyLCB0MiwgdDcgICAgICAvLyB0bXAyID0gdG1wMiAtIHoyCisgICAgc2xsICAgICAgICAgdDIsIHQyLCAyICAgICAgIC8vIHRtcDIgPSB0bXAyIDw8IDIKKyAgICBhZGR1ICAgICAgICB0MCwgdDYsIHQ3ICAgICAgLy8gdG1wMCA9IHoxICsgejIKKyAgICBzbGwgICAgICAgICB0MCwgdDAsIDEzICAgICAgLy8gdG1wMCA9IHRtcDAgPDwgMTMKKyAgICBzdWJ1ICAgICAgICBzMiwgdDgsIHQ3ICAgICAgLy8gcTAgPSB6MyAtIHoyCisgICAgc2xsICAgICAgICAgczIsIHMyLCAxMyAgICAgIC8vIHEwID0gcTAgPDwgMTMKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIHQxICAgICAgLy8gdG1wMCA9IHRtcDAgKyB0bXAxCisgICAgYWRkdSAgICAgICAgdDEsIHMyLCB0MSAgICAgIC8vIHRtcDEgPSBxMCArIHRtcDEKKyAgICBhZGR1ICAgICAgICBzMiwgdDQsIHQyICAgICAgLy8gcTAgPSB0bXAxMSArIHRtcDIKKyAgICBzdWJ1ICAgICAgICBzMywgdDQsIHQyICAgICAgLy8gcTEgPSB0bXAxMSAtIHRtcDIKKyAgICBhZGR1ICAgICAgICB0NiwgdDMsIHQwICAgICAgLy8gejEgPSB0bXAxMCArIHRtcDAKKyAgICBzdWJ1ICAgICAgICB0NywgdDMsIHQwICAgICAgLy8gejIgPSB0bXAxMCAtIHRtcDAKKyAgICBhZGR1ICAgICAgICB0NCwgdDUsIHQxICAgICAgLy8gdG1wMTEgPSB0bXAxMiArIHRtcDEKKyAgICBzdWJ1ICAgICAgICB0NSwgdDUsIHQxICAgICAgLy8gdG1wMTIgPSB0bXAxMiAtIHRtcDEKKyAgICBzaHJhX3IudyAgICB0NiwgdDYsIDExICAgICAgLy8gejEgPSAoejEgKyAxMDI0KSA+PiAxMQorICAgIHNocmFfci53ICAgIHQ3LCB0NywgMTEgICAgICAvLyB6MiA9ICh6MiArIDEwMjQpID4+IDExCisgICAgc2hyYV9yLncgICAgdDQsIHQ0LCAxMSAgICAgIC8vIHRtcDExID0gKHRtcDExICsgMTAyNCkgPj4gMTEKKyAgICBzaHJhX3IudyAgICB0NSwgdDUsIDExICAgICAgLy8gdG1wMTIgPSAodG1wMTIgKyAxMDI0KSA+PiAxMQorICAgIHN3ICAgICAgICAgIHMyLCAyNCh2MCkKKyAgICBzdyAgICAgICAgICBzMywgOTYodjApCisgICAgc3cgICAgICAgICAgdDYsIDAodjApCisgICAgc3cgICAgICAgICAgdDcsIDEyMCh2MCkKKyAgICBzdyAgICAgICAgICB0NCwgNDgodjApCisgICAgc3cgICAgICAgICAgdDUsIDcyKHYwKQorICAgIGFkZGl1ICAgICAgIHYwLCB2MCwgNAorICAgIGFkZGl1ICAgICAgIGExLCBhMSwgMgorICAgIGJuZSAgICAgICAgIHYwLCB2MSwgMWIKKyAgICAgYWRkaXUgICAgICBhMCwgYTAsIDIKKworICAgIC8qIFBhc3MgMjogcHJvY2VzcyA2IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKyAgICBtb3ZlICAgICAgICB2MCwgc3AKKyAgICBhZGRpdSAgICAgICB2MSwgdjAsIDE0NAorCisyOgorICAgIGx3ICAgICAgICAgIHQwLCAwKHYwKQorICAgIGx3ICAgICAgICAgIHQyLCAxNih2MCkKKyAgICBsdyAgICAgICAgICBzNSwgMChhMikKKyAgICBhZGRpdSAgICAgICB0MCwgdDAsIDE2CisgICAgc2xsICAgICAgICAgdDAsIHQwLCAxMworICAgIG11bCAgICAgICAgIHQzLCB0MiwgdDkKKyAgICBsdyAgICAgICAgICB0NiwgNCh2MCkKKyAgICBsdyAgICAgICAgICB0OCwgMjAodjApCisgICAgbHcgICAgICAgICAgdDcsIDEyKHYwKQorICAgIGFkZHUgICAgICAgIHM1LCBzNSwgYTMKKyAgICBhZGR1ICAgICAgICBzNiwgdDYsIHQ4CisgICAgbXVsICAgICAgICAgczYsIHM2LCBzMQorICAgIGFkZHUgICAgICAgIHQxLCB0MCwgdDMKKyAgICBzdWJ1ICAgICAgICB0NCwgdDAsIHQzCisgICAgc3VidSAgICAgICAgdDQsIHQ0LCB0MworICAgIGx3ICAgICAgICAgIHQzLCA4KHYwKQorICAgIG11bCAgICAgICAgIHQwLCB0MywgczAKKyAgICBhZGR1ICAgICAgICBzNywgdDYsIHQ3CisgICAgc2xsICAgICAgICAgczcsIHM3LCAxMworICAgIGFkZHUgICAgICAgIHM3LCBzNiwgczcKKyAgICBzdWJ1ICAgICAgICB0MiwgdDgsIHQ3CisgICAgc2xsICAgICAgICAgdDIsIHQyLCAxMworICAgIGFkZHUgICAgICAgIHQyLCBzNiwgdDIKKyAgICBzdWJ1ICAgICAgICBzNiwgdDYsIHQ3CisgICAgc3VidSAgICAgICAgczYsIHM2LCB0OAorICAgIHNsbCAgICAgICAgIHM2LCBzNiwgMTMKKyAgICBhZGR1ICAgICAgICB0MywgdDEsIHQwCisgICAgc3VidSAgICAgICAgdDUsIHQxLCB0MAorICAgIGFkZHUgICAgICAgIHQ2LCB0MywgczcKKyAgICBzdWJ1ICAgICAgICB0MywgdDMsIHM3CisgICAgYWRkdSAgICAgICAgdDcsIHQ0LCBzNgorICAgIHN1YnUgICAgICAgIHQ0LCB0NCwgczYKKyAgICBhZGR1ICAgICAgICB0OCwgdDUsIHQyCisgICAgc3VidSAgICAgICAgdDUsIHQ1LCB0MgorICAgIHNobGxfcy53ICAgIHQ2LCB0NiwgNgorICAgIHNobGxfcy53ICAgIHQzLCB0MywgNgorICAgIHNobGxfcy53ICAgIHQ3LCB0NywgNgorICAgIHNobGxfcy53ICAgIHQ0LCB0NCwgNgorICAgIHNobGxfcy53ICAgIHQ4LCB0OCwgNgorICAgIHNobGxfcy53ICAgIHQ1LCB0NSwgNgorICAgIHNyYSAgICAgICAgIHQ2LCB0NiwgMjQKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIDEyOAorICAgIHNyYSAgICAgICAgIHQzLCB0MywgMjQKKyAgICBhZGRpdSAgICAgICB0MywgdDMsIDEyOAorICAgIHNiICAgICAgICAgIHQ2LCAwKHM1KQorICAgIHNyYSAgICAgICAgIHQ3LCB0NywgMjQKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIDEyOAorICAgIHNiICAgICAgICAgIHQzLCA1KHM1KQorICAgIHNyYSAgICAgICAgIHQ0LCB0NCwgMjQKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIDEyOAorICAgIHNiICAgICAgICAgIHQ3LCAxKHM1KQorICAgIHNyYSAgICAgICAgIHQ4LCB0OCwgMjQKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIDEyOAorICAgIHNiICAgICAgICAgIHQ0LCA0KHM1KQorICAgIGFkZGl1ICAgICAgIHYwLCB2MCwgMjQKKyAgICBzcmEgICAgICAgICB0NSwgdDUsIDI0CisgICAgYWRkaXUgICAgICAgdDUsIHQ1LCAxMjgKKyAgICBzYiAgICAgICAgICB0OCwgMihzNSkKKyAgICBhZGRpdSAgICAgICBhMiwgYTIsICA0CisgICAgYm5lICAgICAgICAgdjAsIHYxLCAyYgorICAgICBzYiAgICAgICAgIHQ1LCAzKHM1KQorCisgICAgYWRkaXUgICAgICAgc3AsIHNwLCAxNDQKKworICAgIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDMyLCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorCitFTkQoanNpbWRfaWRjdF82eDZfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9pZGN0XzEyeDEyX3Bhc3MxX2RzcHIyKQorLyoKKyAqIGEwID0gY29tcHB0ci0+ZGN0X3RhYmxlCisgKiBhMSA9IGNvZWZfYmxvY2sKKyAqIGEyID0gd29ya3NwYWNlCisgKi8KKyAgICBTQVZFX1JFR1NfT05fU1RBQ0sgMTYsIHMwLCBzMSwgczIsIHMzCisKKyAgICBsaSAgICAgICAgICBhMywgOAorCisxOgorICAgIC8vIG9kZCBwYXJ0CisgICAgbGggICAgICAgICAgdDAsIDQ4KGExKQorICAgIGxoICAgICAgICAgIHQxLCA0OChhMCkKKyAgICBsaCAgICAgICAgICB0MiwgMTYoYTEpCisgICAgbGggICAgICAgICAgdDMsIDE2KGEwKQorICAgIGxoICAgICAgICAgIHQ0LCA4MChhMSkKKyAgICBsaCAgICAgICAgICB0NSwgODAoYTApCisgICAgbGggICAgICAgICAgdDYsIDExMihhMSkKKyAgICBsaCAgICAgICAgICB0NywgMTEyKGEwKQorICAgIG11bCAgICAgICAgIHQwLCB0MCwgdDEgICAgICAvLyB6MgorICAgIG11bCAgICAgICAgIHQxLCB0MiwgdDMgICAgICAvLyB6MQorICAgIG11bCAgICAgICAgIHQyLCB0NCwgdDUgICAgICAvLyB6MworICAgIG11bCAgICAgICAgIHQzLCB0NiwgdDcgICAgICAvLyB6NAorICAgIGxpICAgICAgICAgIHQ0LCAxMDcwMyAgICAgICAvLyBGSVgoMS4zMDY1NjI5NjUpCisgICAgbGkgICAgICAgICAgdDUsIDQ0MzMgICAgICAgIC8vIEZJWF8wXzU0MTE5NjEwMAorICAgIGxpICAgICAgICAgIHQ2LCA3MDUzICAgICAgICAvLyBGSVgoMC44NjA5MTg2NjkpCisgICAgbXVsICAgICAgICAgdDQsIHQwLCB0NCAgICAgIC8vIHRtcDExCisgICAgbXVsICAgICAgICAgdDUsIHQwLCB0NSAgICAgIC8vIC10bXAxNAorICAgIGFkZHUgICAgICAgIHQ3LCB0MSwgdDIgICAgICAvLyB0bXAxMAorICAgIGFkZHUgICAgICAgIHQ4LCB0NywgdDMgICAgICAvLyB0bXAxMCArIHo0CisgICAgbXVsICAgICAgICAgdDYsIHQ2LCB0OCAgICAgIC8vIHRtcDE1CisgICAgbGkgICAgICAgICAgdDgsIDIxMzkgICAgICAgIC8vIEZJWCgwLjI2MTA1MjM4NCkKKyAgICBtdWwgICAgICAgICB0OCwgdDcsIHQ4ICAgICAgLy8gTVVMVElQTFkodG1wMTAsIEZJWCgwLjI2MTA1MjM4NCkpCisgICAgbGkgICAgICAgICAgdDcsIDIyOTUgICAgICAgIC8vIEZJWCgwLjI4MDE0MzcxNikKKyAgICBtdWwgICAgICAgICB0NywgdDEsIHQ3ICAgICAgLy8gTVVMVElQTFkoejEsIEZJWCgwLjI4MDE0MzcxNikpCisgICAgYWRkdSAgICAgICAgdDksIHQyLCB0MyAgICAgIC8vIHozICsgejQKKyAgICBsaSAgICAgICAgICBzMCwgODU2NSAgICAgICAgLy8gRklYKDEuMDQ1NTEwNTgwKQorICAgIG11bCAgICAgICAgIHQ5LCB0OSwgczAgICAgICAvLyAtdG1wMTMKKyAgICBsaSAgICAgICAgICBzMCwgMTIxMTIgICAgICAgLy8gRklYKDEuNDc4NTc1MjQyKQorICAgIG11bCAgICAgICAgIHMwLCB0MiwgczAgICAgICAvLyBNVUxUSVBMWSh6MywgRklYKDEuNDc4NTc1MjQyKQorICAgIGxpICAgICAgICAgIHMxLCAxMjk5OCAgICAgICAvLyBGSVgoMS41ODY3MDY2ODEpCisgICAgbXVsICAgICAgICAgczEsIHQzLCBzMSAgICAgIC8vIE1VTFRJUExZKHo0LCBGSVgoMS41ODY3MDY2ODEpKQorICAgIGxpICAgICAgICAgIHMyLCA1NTQwICAgICAgICAvLyBGSVgoMC42NzYzMjY3NTgpCisgICAgbXVsICAgICAgICAgczIsIHQxLCBzMiAgICAgIC8vIE1VTFRJUExZKHoxLCBGSVgoMC42NzYzMjY3NTgpKQorICAgIGxpICAgICAgICAgIHMzLCAxNjI0NCAgICAgICAvLyBGSVgoMS45ODI4ODk3MjMpCisgICAgbXVsICAgICAgICAgczMsIHQzLCBzMyAgICAgIC8vIE1VTFRJUExZKHo0LCBGSVgoMS45ODI4ODk3MjMpKQorICAgIHN1YnUgICAgICAgIHQxLCB0MSwgdDMgICAgICAvLyB6MS09ejQKKyAgICBzdWJ1ICAgICAgICB0MCwgdDAsIHQyICAgICAgLy8gejItPXozCisgICAgYWRkdSAgICAgICAgdDIsIHQwLCB0MSAgICAgIC8vIHoxK3oyCisgICAgbGkgICAgICAgICAgdDMsIDQ0MzMgICAgICAgIC8vIEZJWF8wXzU0MTE5NjEwMAorICAgIG11bCAgICAgICAgIHQyLCB0MiwgdDMgICAgICAvLyB6MworICAgIGxpICAgICAgICAgIHQzLCA2MjcwICAgICAgICAvLyBGSVhfMF83NjUzNjY4NjUKKyAgICBtdWwgICAgICAgICB0MSwgdDEsIHQzICAgICAgLy8gTVVMVElQTFkoejEsIEZJWF8wXzc2NTM2Njg2NSkKKyAgICBsaSAgICAgICAgICB0MywgMTUxMzcgICAgICAgLy8gRklYXzBfNzY1MzY2ODY1CisgICAgbXVsICAgICAgICAgdDAsIHQwLCB0MyAgICAgIC8vIE1VTFRJUExZKHoyLCBGSVhfMV84NDc3NTkwNjUpCisgICAgYWRkdSAgICAgICAgdDgsIHQ2LCB0OCAgICAgIC8vIHRtcDEyCisgICAgYWRkdSAgICAgICAgdDMsIHQ4LCB0NCAgICAgIC8vIHRtcDEyICsgdG1wMTEKKyAgICBhZGR1ICAgICAgICB0MywgdDMsIHQ3ICAgICAgLy8gdG1wMTAKKyAgICBzdWJ1ICAgICAgICB0OCwgdDgsIHQ5ICAgICAgLy8gdG1wMTIgKyB0bXAxMworICAgIGFkZHUgICAgICAgIHMwLCB0NSwgczAKKyAgICBzdWJ1ICAgICAgICB0OCwgdDgsIHMwICAgICAgLy8gdG1wMTIKKyAgICBzdWJ1ICAgICAgICB0OSwgdDYsIHQ5CisgICAgc3VidSAgICAgICAgczEsIHMxLCB0NAorICAgIGFkZHUgICAgICAgIHQ5LCB0OSwgczEgICAgICAvLyB0bXAxMworICAgIHN1YnUgICAgICAgIHQ2LCB0NiwgdDUKKyAgICBzdWJ1ICAgICAgICB0NiwgdDYsIHMyCisgICAgc3VidSAgICAgICAgdDYsIHQ2LCBzMyAgICAgIC8vIHRtcDE1CisgICAgLy8gZXZlbiBwYXJ0IHN0YXJ0CisgICAgbGggICAgICAgICAgdDQsIDY0KGExKQorICAgIGxoICAgICAgICAgIHQ1LCA2NChhMCkKKyAgICBsaCAgICAgICAgICB0NywgMzIoYTEpCisgICAgbGggICAgICAgICAgczAsIDMyKGEwKQorICAgIGxoICAgICAgICAgIHMxLCAwKGExKQorICAgIGxoICAgICAgICAgIHMyLCAwKGEwKQorICAgIGxoICAgICAgICAgIHMzLCA5NihhMSkKKyAgICBsaCAgICAgICAgICB2MCwgOTYoYTApCisgICAgbXVsICAgICAgICAgdDQsIHQ0LCB0NSAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSkKKyAgICBtdWwgICAgICAgICB0NSwgdDcsIHMwICAgICAgLy8gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKQorICAgIG11bCAgICAgICAgIHQ3LCBzMSwgczIgICAgICAvLyBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pCisgICAgbXVsICAgICAgICAgczAsIHMzLCB2MCAgICAgIC8vIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSkKKyAgICAvLyBvZGQgcGFydCBlbmQKKyAgICBhZGR1ICAgICAgICB0MSwgdDIsIHQxICAgICAgLy8gdG1wMTEKKyAgICBzdWJ1ICAgICAgICB0MCwgdDIsIHQwICAgICAgLy8gdG1wMTQKKyAgICAvLyB1cGRhdGUgY291bnRlciBhbmQgcG9pbnRlcnMKKyAgICBhZGRpdSAgICAgICBhMywgYTMsIC0xCisgICAgYWRkaXUgICAgICAgYTAsIGEwLCAyCisgICAgYWRkaXUgICAgICAgYTEsIGExLCAyCisgICAgLy8gZXZlbiBwYXJ0IHJlc3QKKyAgICBsaSAgICAgICAgICBzMSwgMTAwMzMKKyAgICBsaSAgICAgICAgICBzMiwgMTExOTAKKyAgICBtdWwgICAgICAgICB0NCwgdDQsIHMxICAgICAgLy8gejQKKyAgICBtdWwgICAgICAgICBzMSwgdDUsIHMyICAgICAgLy8gejQKKyAgICBzbGwgICAgICAgICB0NSwgdDUsIDEzICAgICAgLy8gejEKKyAgICBzbGwgICAgICAgICB0NywgdDcsIDEzCisgICAgYWRkaXUgICAgICAgdDcsIHQ3LCAxMDI0ICAgIC8vIHozCisgICAgc2xsICAgICAgICAgczAsIHMwLCAxMyAgICAgIC8vIHoyCisgICAgYWRkdSAgICAgICAgczIsIHQ3LCB0NCAgICAgIC8vIHRtcDEwCisgICAgc3VidSAgICAgICAgdDQsIHQ3LCB0NCAgICAgIC8vIHRtcDExCisgICAgc3VidSAgICAgICAgczMsIHQ1LCBzMCAgICAgIC8vIHRtcDEyCisgICAgYWRkdSAgICAgICAgdDIsIHQ3LCBzMyAgICAgIC8vIHRtcDIxCisgICAgc3VidSAgICAgICAgczMsIHQ3LCBzMyAgICAgIC8vIHRtcDI0CisgICAgYWRkdSAgICAgICAgdDcsIHMxLCBzMCAgICAgIC8vIHRtcDEyCisgICAgYWRkdSAgICAgICAgdjAsIHMyLCB0NyAgICAgIC8vIHRtcDIwCisgICAgc3VidSAgICAgICAgczIsIHMyLCB0NyAgICAgIC8vIHRtcDI1CisgICAgc3VidSAgICAgICAgczEsIHMxLCB0NSAgICAgIC8vIHo0IC0gejEKKyAgICBzdWJ1ICAgICAgICBzMSwgczEsIHMwICAgICAgLy8gdG1wMTIKKyAgICBhZGR1ICAgICAgICBzMCwgdDQsIHMxICAgICAgLy8gdG1wMjIKKyAgICBzdWJ1ICAgICAgICB0NCwgdDQsIHMxICAgICAgLy8gdG1wMjMKKyAgICAvLyBmaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICBhZGR1ICAgICAgICB0NSwgdjAsIHQzCisgICAgc3VidSAgICAgICAgdjAsIHYwLCB0MworICAgIGFkZHUgICAgICAgIHQzLCB0MiwgdDEKKyAgICBzdWJ1ICAgICAgICB0MiwgdDIsIHQxCisgICAgYWRkdSAgICAgICAgdDEsIHMwLCB0OAorICAgIHN1YnUgICAgICAgIHMwLCBzMCwgdDgKKyAgICBhZGR1ICAgICAgICB0OCwgdDQsIHQ5CisgICAgc3VidSAgICAgICAgdDQsIHQ0LCB0OQorICAgIGFkZHUgICAgICAgIHQ5LCBzMywgdDAKKyAgICBzdWJ1ICAgICAgICBzMywgczMsIHQwCisgICAgYWRkdSAgICAgICAgdDAsIHMyLCB0NgorICAgIHN1YnUgICAgICAgIHMyLCBzMiwgdDYKKyAgICBzcmEgICAgICAgICB0NSwgdDUsIDExCisgICAgc3JhICAgICAgICAgdDMsIHQzLCAxMQorICAgIHNyYSAgICAgICAgIHQxLCB0MSwgMTEKKyAgICBzcmEgICAgICAgICB0OCwgdDgsIDExCisgICAgc3JhICAgICAgICAgdDksIHQ5LCAxMQorICAgIHNyYSAgICAgICAgIHQwLCB0MCwgMTEKKyAgICBzcmEgICAgICAgICBzMiwgczIsIDExCisgICAgc3JhICAgICAgICAgczMsIHMzLCAxMQorICAgIHNyYSAgICAgICAgIHQ0LCB0NCwgMTEKKyAgICBzcmEgICAgICAgICBzMCwgczAsIDExCisgICAgc3JhICAgICAgICAgdDIsIHQyLCAxMQorICAgIHNyYSAgICAgICAgIHYwLCB2MCwgMTEKKyAgICBzdyAgICAgICAgICB0NSwgMChhMikKKyAgICBzdyAgICAgICAgICB0MywgMzIoYTIpCisgICAgc3cgICAgICAgICAgdDEsIDY0KGEyKQorICAgIHN3ICAgICAgICAgIHQ4LCA5NihhMikKKyAgICBzdyAgICAgICAgICB0OSwgMTI4KGEyKQorICAgIHN3ICAgICAgICAgIHQwLCAxNjAoYTIpCisgICAgc3cgICAgICAgICAgczIsIDE5MihhMikKKyAgICBzdyAgICAgICAgICBzMywgMjI0KGEyKQorICAgIHN3ICAgICAgICAgIHQ0LCAyNTYoYTIpCisgICAgc3cgICAgICAgICAgczAsIDI4OChhMikKKyAgICBzdyAgICAgICAgICB0MiwgMzIwKGEyKQorICAgIHN3ICAgICAgICAgIHYwLCAzNTIoYTIpCisgICAgYmd0eiAgICAgICAgYTMsIDFiCisgICAgIGFkZGl1ICAgICAgYTIsIGEyLCA0CisKKyAgICBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAxNiwgczAsIHMxLCBzMiwgczMKKworICAgIGogICAgICAgICAgIHJhCisgICAgIG5vcAorCitFTkQoanNpbWRfaWRjdF8xMngxMl9wYXNzMV9kc3ByMikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitMRUFGX0RTUFIyKGpzaW1kX2lkY3RfMTJ4MTJfcGFzczJfZHNwcjIpCisvKgorICogYTAgPSB3b3Jrc3BhY2UKKyAqIGExID0gb3V0cHV0CisgKi8KKyAgICBTQVZFX1JFR1NfT05fU1RBQ0sgMTYsIHMwLCBzMSwgczIsIHMzCisKKyAgICBsaSAgICAgICAgICBhMywgMTIKKworMToKKyAgICAvLyBPZGQgcGFydAorICAgIGx3ICAgICAgICAgIHQwLCAxMihhMCkKKyAgICBsdyAgICAgICAgICB0MSwgNChhMCkKKyAgICBsdyAgICAgICAgICB0MiwgMjAoYTApCisgICAgbHcgICAgICAgICAgdDMsIDI4KGEwKQorICAgIGxpICAgICAgICAgIHQ0LCAxMDcwMyAgICAgICAvLyBGSVgoMS4zMDY1NjI5NjUpCisgICAgbGkgICAgICAgICAgdDUsIDQ0MzMgICAgICAgIC8vIEZJWF8wXzU0MTE5NjEwMAorICAgIG11bCAgICAgICAgIHQ0LCB0MCwgdDQgICAgICAvLyB0bXAxMQorICAgIG11bCAgICAgICAgIHQ1LCB0MCwgdDUgICAgICAvLyAtdG1wMTQKKyAgICBhZGR1ICAgICAgICB0NiwgdDEsIHQyICAgICAgLy8gdG1wMTAKKyAgICBsaSAgICAgICAgICB0NywgMjEzOSAgICAgICAgLy8gRklYKDAuMjYxMDUyMzg0KQorICAgIG11bCAgICAgICAgIHQ3LCB0NiwgdDcgICAgICAvLyBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMjYxMDUyMzg0KSkKKyAgICBhZGR1ICAgICAgICB0NiwgdDYsIHQzICAgICAgLy8gdG1wMTAgKyB6NAorICAgIGxpICAgICAgICAgIHQ4LCA3MDUzICAgICAgICAvLyBGSVgoMC44NjA5MTg2NjkpCisgICAgbXVsICAgICAgICAgdDYsIHQ2LCB0OCAgICAgIC8vIHRtcDE1CisgICAgbGkgICAgICAgICAgdDgsIDIyOTUgICAgICAgIC8vIEZJWCgwLjI4MDE0MzcxNikKKyAgICBtdWwgICAgICAgICB0OCwgdDEsIHQ4ICAgICAgLy8gTVVMVElQTFkoejEsIEZJWCgwLjI4MDE0MzcxNikpCisgICAgYWRkdSAgICAgICAgdDksIHQyLCB0MyAgICAgIC8vIHozICsgejQKKyAgICBsaSAgICAgICAgICBzMCwgODU2NSAgICAgICAgLy8gRklYKDEuMDQ1NTEwNTgwKQorICAgIG11bCAgICAgICAgIHQ5LCB0OSwgczAgICAgICAvLyAtdG1wMTMKKyAgICBsaSAgICAgICAgICBzMCwgMTIxMTIgICAgICAgLy8gRklYKDEuNDc4NTc1MjQyKQorICAgIG11bCAgICAgICAgIHMwLCB0MiwgczAgICAgICAvLyBNVUxUSVBMWSh6MywgRklYKDEuNDc4NTc1MjQyKSkKKyAgICBsaSAgICAgICAgICBzMSwgMTI5OTggICAgICAgLy8gRklYKDEuNTg2NzA2NjgxKQorICAgIG11bCAgICAgICAgIHMxLCB0MywgczEgICAgICAvLyBNVUxUSVBMWSh6NCwgRklYKDEuNTg2NzA2NjgxKSkKKyAgICBsaSAgICAgICAgICBzMiwgNTU0MCAgICAgICAgLy8gRklYKDAuNjc2MzI2NzU4KQorICAgIG11bCAgICAgICAgIHMyLCB0MSwgczIgICAgICAvLyBNVUxUSVBMWSh6MSwgRklYKDAuNjc2MzI2NzU4KSkKKyAgICBsaSAgICAgICAgICBzMywgMTYyNDQgICAgICAgLy8gRklYKDEuOTgyODg5NzIzKQorICAgIG11bCAgICAgICAgIHMzLCB0MywgczMgICAgICAvLyBNVUxUSVBMWSh6NCwgRklYKDEuOTgyODg5NzIzKSkKKyAgICBzdWJ1ICAgICAgICB0MSwgdDEsIHQzICAgICAgLy8gejEgLT0gejQKKyAgICBzdWJ1ICAgICAgICB0MCwgdDAsIHQyICAgICAgLy8gejIgLT0gejMKKyAgICBhZGR1ICAgICAgICB0MiwgdDEsIHQwICAgICAgLy8gejEgKyB6MgorICAgIGxpICAgICAgICAgIHQzLCA0NDMzICAgICAgICAvLyBGSVhfMF81NDExOTYxMDAKKyAgICBtdWwgICAgICAgICB0MiwgdDIsIHQzICAgICAgLy8gejMKKyAgICBsaSAgICAgICAgICB0MywgNjI3MCAgICAgICAgLy8gRklYXzBfNzY1MzY2ODY1CisgICAgbXVsICAgICAgICAgdDEsIHQxLCB0MyAgICAgIC8vIE1VTFRJUExZKHoxLCBGSVhfMF83NjUzNjY4NjUpCisgICAgbGkgICAgICAgICAgdDMsIDE1MTM3ICAgICAgIC8vIEZJWF8xXzg0Nzc1OTA2NQorICAgIG11bCAgICAgICAgIHQwLCB0MCwgdDMgICAgICAvLyBNVUxUSVBMWSh6MiwgRklYXzFfODQ3NzU5MDY1KQorICAgIGFkZHUgICAgICAgIHQzLCB0NiwgdDcgICAgICAvLyB0bXAxMgorICAgIGFkZHUgICAgICAgIHQ3LCB0MywgdDQKKyAgICBhZGR1ICAgICAgICB0NywgdDcsIHQ4ICAgICAgLy8gdG1wMTAKKyAgICBzdWJ1ICAgICAgICB0MywgdDMsIHQ5CisgICAgc3VidSAgICAgICAgdDMsIHQzLCB0NQorICAgIHN1YnUgICAgICAgIHQzLCB0MywgczAgICAgICAvLyB0bXAxMgorICAgIHN1YnUgICAgICAgIHQ5LCB0NiwgdDkKKyAgICBzdWJ1ICAgICAgICB0OSwgdDksIHQ0CisgICAgYWRkdSAgICAgICAgdDksIHQ5LCBzMSAgICAgIC8vIHRtcDEzCisgICAgc3VidSAgICAgICAgdDYsIHQ2LCB0NQorICAgIHN1YnUgICAgICAgIHQ2LCB0NiwgczIKKyAgICBzdWJ1ICAgICAgICB0NiwgdDYsIHMzICAgICAgLy8gdG1wMTUKKyAgICBhZGR1ICAgICAgICB0MSwgdDIsIHQxICAgICAgLy8gdG1wMTEKKyAgICBzdWJ1ICAgICAgICB0MCwgdDIsIHQwICAgICAgLy8gdG1wMTQKKyAgICAvLyBldmVuIHBhcnQKKyAgICBsdyAgICAgICAgICB0MiwgMTYoYTApICAgICAgLy8gejQKKyAgICBsdyAgICAgICAgICB0NCwgOChhMCkgICAgICAgLy8gejEKKyAgICBsdyAgICAgICAgICB0NSwgMChhMCkgICAgICAgLy8gejMKKyAgICBsdyAgICAgICAgICB0OCwgMjQoYTApICAgICAgLy8gejIKKyAgICBsaSAgICAgICAgICBzMCwgMTAwMzMgICAgICAgLy8gRklYKDEuMjI0NzQ0ODcxKQorICAgIGxpICAgICAgICAgIHMxLCAxMTE5MCAgICAgICAvLyBGSVgoMS4zNjYwMjU0MDQpCisgICAgbXVsICAgICAgICAgdDIsIHQyLCBzMCAgICAgIC8vIHo0CisgICAgbXVsICAgICAgICAgczAsIHQ0LCBzMSAgICAgIC8vIHo0CisgICAgYWRkaXUgICAgICAgdDUsIHQ1LCAweDEwCisgICAgc2xsICAgICAgICAgdDUsIHQ1LCAxMyAgICAgIC8vIHozCisgICAgc2xsICAgICAgICAgdDQsIHQ0LCAxMyAgICAgIC8vIHoxCisgICAgc2xsICAgICAgICAgdDgsIHQ4LCAxMyAgICAgIC8vIHoyCisgICAgc3VidSAgICAgICAgczEsIHQ0LCB0OCAgICAgIC8vIHRtcDEyCisgICAgYWRkdSAgICAgICAgczIsIHQ1LCB0MiAgICAgIC8vIHRtcDEwCisgICAgc3VidSAgICAgICAgdDIsIHQ1LCB0MiAgICAgIC8vIHRtcDExCisgICAgYWRkdSAgICAgICAgczMsIHQ1LCBzMSAgICAgIC8vIHRtcDIxCisgICAgc3VidSAgICAgICAgczEsIHQ1LCBzMSAgICAgIC8vIHRtcDI0CisgICAgYWRkdSAgICAgICAgdDUsIHMwLCB0OCAgICAgIC8vIHRtcDEyCisgICAgYWRkdSAgICAgICAgdjAsIHMyLCB0NSAgICAgIC8vIHRtcDIwCisgICAgc3VidSAgICAgICAgdDUsIHMyLCB0NSAgICAgIC8vIHRtcDI1CisgICAgc3VidSAgICAgICAgdDQsIHMwLCB0NAorICAgIHN1YnUgICAgICAgIHQ0LCB0NCwgdDggICAgICAvLyB0bXAxMgorICAgIGFkZHUgICAgICAgIHQ4LCB0MiwgdDQgICAgICAvLyB0bXAyMgorICAgIHN1YnUgICAgICAgIHQyLCB0MiwgdDQgICAgICAvLyB0bXAyMworICAgIC8vIGluY3JlbWVudCBjb3VudGVyIGFuZCBwb2ludGVycworICAgIGFkZGl1ICAgICAgIGEzLCBhMywgLTEKKyAgICBhZGRpdSAgICAgICBhMCwgYTAsIDMyCisgICAgLy8gRmluYWwgc3RhZ2UKKyAgICBhZGR1ICAgICAgICB0NCwgdjAsIHQ3CisgICAgc3VidSAgICAgICAgdjAsIHYwLCB0NworICAgIGFkZHUgICAgICAgIHQ3LCBzMywgdDEKKyAgICBzdWJ1ICAgICAgICBzMywgczMsIHQxCisgICAgYWRkdSAgICAgICAgdDEsIHQ4LCB0MworICAgIHN1YnUgICAgICAgIHQ4LCB0OCwgdDMKKyAgICBhZGR1ICAgICAgICB0MywgdDIsIHQ5CisgICAgc3VidSAgICAgICAgdDIsIHQyLCB0OQorICAgIGFkZHUgICAgICAgIHQ5LCBzMSwgdDAKKyAgICBzdWJ1ICAgICAgICBzMSwgczEsIHQwCisgICAgYWRkdSAgICAgICAgdDAsIHQ1LCB0NgorICAgIHN1YnUgICAgICAgIHQ1LCB0NSwgdDYKKyAgICBzbGwgICAgICAgICB0NCwgdDQsIDQKKyAgICBzbGwgICAgICAgICB0NywgdDcsIDQKKyAgICBzbGwgICAgICAgICB0MSwgdDEsIDQKKyAgICBzbGwgICAgICAgICB0MywgdDMsIDQKKyAgICBzbGwgICAgICAgICB0OSwgdDksIDQKKyAgICBzbGwgICAgICAgICB0MCwgdDAsIDQKKyAgICBzbGwgICAgICAgICB0NSwgdDUsIDQKKyAgICBzbGwgICAgICAgICBzMSwgczEsIDQKKyAgICBzbGwgICAgICAgICB0MiwgdDIsIDQKKyAgICBzbGwgICAgICAgICB0OCwgdDgsIDQKKyAgICBzbGwgICAgICAgICBzMywgczMsIDQKKyAgICBzbGwgICAgICAgICB2MCwgdjAsIDQKKyAgICBzaGxsX3MudyAgICB0NCwgdDQsIDIKKyAgICBzaGxsX3MudyAgICB0NywgdDcsIDIKKyAgICBzaGxsX3MudyAgICB0MSwgdDEsIDIKKyAgICBzaGxsX3MudyAgICB0MywgdDMsIDIKKyAgICBzaGxsX3MudyAgICB0OSwgdDksIDIKKyAgICBzaGxsX3MudyAgICB0MCwgdDAsIDIKKyAgICBzaGxsX3MudyAgICB0NSwgdDUsIDIKKyAgICBzaGxsX3MudyAgICBzMSwgczEsIDIKKyAgICBzaGxsX3MudyAgICB0MiwgdDIsIDIKKyAgICBzaGxsX3MudyAgICB0OCwgdDgsIDIKKyAgICBzaGxsX3MudyAgICBzMywgczMsIDIKKyAgICBzaGxsX3MudyAgICB2MCwgdjAsIDIKKyAgICBzcmwgICAgICAgICB0NCwgdDQsIDI0CisgICAgc3JsICAgICAgICAgdDcsIHQ3LCAyNAorICAgIHNybCAgICAgICAgIHQxLCB0MSwgMjQKKyAgICBzcmwgICAgICAgICB0MywgdDMsIDI0CisgICAgc3JsICAgICAgICAgdDksIHQ5LCAyNAorICAgIHNybCAgICAgICAgIHQwLCB0MCwgMjQKKyAgICBzcmwgICAgICAgICB0NSwgdDUsIDI0CisgICAgc3JsICAgICAgICAgczEsIHMxLCAyNAorICAgIHNybCAgICAgICAgIHQyLCB0MiwgMjQKKyAgICBzcmwgICAgICAgICB0OCwgdDgsIDI0CisgICAgc3JsICAgICAgICAgczMsIHMzLCAyNAorICAgIHNybCAgICAgICAgIHYwLCB2MCwgMjQKKyAgICBsdyAgICAgICAgICB0NiwgMChhMSkKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0MywgdDMsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0OSwgdDksIDB4ODAKKyAgICBhZGRpdSAgICAgICB0MCwgdDAsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIDB4ODAKKyAgICBhZGRpdSAgICAgICBzMSwgczEsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0MiwgdDIsIDB4ODAKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIDB4ODAKKyAgICBhZGRpdSAgICAgICBzMywgczMsIDB4ODAKKyAgICBhZGRpdSAgICAgICB2MCwgdjAsIDB4ODAKKyAgICBzYiAgICAgICAgICB0NCwgMCh0NikKKyAgICBzYiAgICAgICAgICB0NywgMSh0NikKKyAgICBzYiAgICAgICAgICB0MSwgMih0NikKKyAgICBzYiAgICAgICAgICB0MywgMyh0NikKKyAgICBzYiAgICAgICAgICB0OSwgNCh0NikKKyAgICBzYiAgICAgICAgICB0MCwgNSh0NikKKyAgICBzYiAgICAgICAgICB0NSwgNih0NikKKyAgICBzYiAgICAgICAgICBzMSwgNyh0NikKKyAgICBzYiAgICAgICAgICB0MiwgOCh0NikKKyAgICBzYiAgICAgICAgICB0OCwgOSh0NikKKyAgICBzYiAgICAgICAgICBzMywgMTAodDYpCisgICAgc2IgICAgICAgICAgdjAsIDExKHQ2KQorICAgIGJndHogICAgICAgIGEzLCAxYgorICAgICBhZGRpdSAgICAgIGExLCBhMSwgNAorCisgICAgUkVTVE9SRV9SRUdTX0ZST01fU1RBQ0sgMTYsIHMwLCBzMSwgczIsIHMzCisKKyAgICBqciAgICAgICAgICByYQorICAgICBub3AKKworRU5EKGpzaW1kX2lkY3RfMTJ4MTJfcGFzczJfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9jb252c2FtcF9kc3ByMikKKy8qCisgKiBhMCA9IHNhbXBsZV9kYXRhCisgKiBhMSA9IHN0YXJ0X2NvbAorICogYTIgPSB3b3Jrc3BhY2UKKyAqLworICAgIGx3ICAgICAgICAgICAgdDAsIDAoYTApCisgICAgbGkgICAgICAgICAgICB0NywgMHhmZjgwZmY4MAorICAgIGFkZHUgICAgICAgICAgdDAsIHQwLCBhMQorICAgIHVsdyAgICAgICAgICAgdDEsIDAodDApCisgICAgdWx3ICAgICAgICAgICB0MiwgNCh0MCkKKyAgICBwcmVjZXUucGgucWJyIHQzLCB0MQorICAgIHByZWNldS5waC5xYmwgdDQsIHQxCisgICAgbHcgICAgICAgICAgICB0MCwgNChhMCkKKyAgICBwcmVjZXUucGgucWJyIHQ1LCB0MgorICAgIHByZWNldS5waC5xYmwgdDYsIHQyCisgICAgYWRkdSAgICAgICAgICB0MCwgdDAsIGExCisgICAgYWRkdS5waCAgICAgICB0MywgdDMsIHQ3CisgICAgYWRkdS5waCAgICAgICB0NCwgdDQsIHQ3CisgICAgdWx3ICAgICAgICAgICB0MSwgMCh0MCkKKyAgICB1bHcgICAgICAgICAgIHQyLCA0KHQwKQorICAgIGFkZHUucGggICAgICAgdDUsIHQ1LCB0NworICAgIGFkZHUucGggICAgICAgdDYsIHQ2LCB0NworICAgIHVzdyAgICAgICAgICAgdDMsIDAoYTIpCisgICAgdXN3ICAgICAgICAgICB0NCwgNChhMikKKyAgICBwcmVjZXUucGgucWJyIHQzLCB0MQorICAgIHByZWNldS5waC5xYmwgdDQsIHQxCisgICAgdXN3ICAgICAgICAgICB0NSwgOChhMikKKyAgICB1c3cgICAgICAgICAgIHQ2LCAxMihhMikKKworICAgIGx3ICAgICAgICAgICAgdDAsIDgoYTApCisgICAgcHJlY2V1LnBoLnFiciB0NSwgdDIKKyAgICBwcmVjZXUucGgucWJsIHQ2LCB0MgorICAgIGFkZHUgICAgICAgICAgdDAsIHQwLCBhMQorICAgIGFkZHUucGggICAgICAgdDMsIHQzLCB0NworICAgIGFkZHUucGggICAgICAgdDQsIHQ0LCB0NworICAgIHVsdyAgICAgICAgICAgdDEsIDAodDApCisgICAgdWx3ICAgICAgICAgICB0MiwgNCh0MCkKKyAgICBhZGR1LnBoICAgICAgIHQ1LCB0NSwgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ2LCB0NiwgdDcKKyAgICB1c3cgICAgICAgICAgIHQzLCAxNihhMikKKyAgICB1c3cgICAgICAgICAgIHQ0LCAyMChhMikKKyAgICBwcmVjZXUucGgucWJyIHQzLCB0MQorICAgIHByZWNldS5waC5xYmwgdDQsIHQxCisgICAgdXN3ICAgICAgICAgICB0NSwgMjQoYTIpCisgICAgdXN3ICAgICAgICAgICB0NiwgMjgoYTIpCisKKyAgICBsdyAgICAgICAgICAgIHQwLCAxMihhMCkKKyAgICBwcmVjZXUucGgucWJyIHQ1LCB0MgorICAgIHByZWNldS5waC5xYmwgdDYsIHQyCisgICAgYWRkdSAgICAgICAgICB0MCwgdDAsIGExCisgICAgYWRkdS5waCAgICAgICB0MywgdDMsIHQ3CisgICAgYWRkdS5waCAgICAgICB0NCwgdDQsIHQ3CisgICAgdWx3ICAgICAgICAgICB0MSwgMCh0MCkKKyAgICB1bHcgICAgICAgICAgIHQyLCA0KHQwKQorICAgIGFkZHUucGggICAgICAgdDUsIHQ1LCB0NworICAgIGFkZHUucGggICAgICAgdDYsIHQ2LCB0NworICAgIHVzdyAgICAgICAgICAgdDMsIDMyKGEyKQorICAgIHVzdyAgICAgICAgICAgdDQsIDM2KGEyKQorICAgIHByZWNldS5waC5xYnIgdDMsIHQxCisgICAgcHJlY2V1LnBoLnFibCB0NCwgdDEKKyAgICB1c3cgICAgICAgICAgIHQ1LCA0MChhMikKKyAgICB1c3cgICAgICAgICAgIHQ2LCA0NChhMikKKworICAgIGx3ICAgICAgICAgICAgdDAsIDE2KGEwKQorICAgIHByZWNldS5waC5xYnIgdDUsIHQyCisgICAgcHJlY2V1LnBoLnFibCB0NiwgdDIKKyAgICBhZGR1ICAgICAgICAgIHQwLCB0MCwgYTEKKyAgICBhZGR1LnBoICAgICAgIHQzLCB0MywgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ0LCB0NCwgdDcKKyAgICB1bHcgICAgICAgICAgIHQxLCAwKHQwKQorICAgIHVsdyAgICAgICAgICAgdDIsIDQodDApCisgICAgYWRkdS5waCAgICAgICB0NSwgdDUsIHQ3CisgICAgYWRkdS5waCAgICAgICB0NiwgdDYsIHQ3CisgICAgdXN3ICAgICAgICAgICB0MywgNDgoYTIpCisgICAgdXN3ICAgICAgICAgICB0NCwgNTIoYTIpCisgICAgcHJlY2V1LnBoLnFiciB0MywgdDEKKyAgICBwcmVjZXUucGgucWJsIHQ0LCB0MQorICAgIHVzdyAgICAgICAgICAgdDUsIDU2KGEyKQorICAgIHVzdyAgICAgICAgICAgdDYsIDYwKGEyKQorCisgICAgbHcgICAgICAgICAgICB0MCwgMjAoYTApCisgICAgcHJlY2V1LnBoLnFiciB0NSwgdDIKKyAgICBwcmVjZXUucGgucWJsIHQ2LCB0MgorICAgIGFkZHUgICAgICAgICAgdDAsIHQwLCBhMQorICAgIGFkZHUucGggICAgICAgdDMsIHQzLCB0NworICAgIGFkZHUucGggICAgICAgdDQsIHQ0LCB0NworICAgIHVsdyAgICAgICAgICAgdDEsIDAodDApCisgICAgdWx3ICAgICAgICAgICB0MiwgNCh0MCkKKyAgICBhZGR1LnBoICAgICAgIHQ1LCB0NSwgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ2LCB0NiwgdDcKKyAgICB1c3cgICAgICAgICAgIHQzLCA2NChhMikKKyAgICB1c3cgICAgICAgICAgIHQ0LCA2OChhMikKKyAgICBwcmVjZXUucGgucWJyIHQzLCB0MQorICAgIHByZWNldS5waC5xYmwgdDQsIHQxCisgICAgdXN3ICAgICAgICAgICB0NSwgNzIoYTIpCisgICAgdXN3ICAgICAgICAgICB0NiwgNzYoYTIpCisKKyAgICBsdyAgICAgICAgICAgIHQwLCAyNChhMCkKKyAgICBwcmVjZXUucGgucWJyIHQ1LCB0MgorICAgIHByZWNldS5waC5xYmwgdDYsIHQyCisgICAgYWRkdSAgICAgICAgICB0MCwgdDAsIGExCisgICAgYWRkdS5waCAgICAgICB0MywgdDMsIHQ3CisgICAgYWRkdS5waCAgICAgICB0NCwgdDQsIHQ3CisgICAgdWx3ICAgICAgICAgICB0MSwgMCh0MCkKKyAgICB1bHcgICAgICAgICAgIHQyLCA0KHQwKQorICAgIGFkZHUucGggICAgICAgdDUsIHQ1LCB0NworICAgIGFkZHUucGggICAgICAgdDYsIHQ2LCB0NworICAgIHVzdyAgICAgICAgICAgdDMsIDgwKGEyKQorICAgIHVzdyAgICAgICAgICAgdDQsIDg0KGEyKQorICAgIHByZWNldS5waC5xYnIgdDMsIHQxCisgICAgcHJlY2V1LnBoLnFibCB0NCwgdDEKKyAgICB1c3cgICAgICAgICAgIHQ1LCA4OChhMikKKyAgICB1c3cgICAgICAgICAgIHQ2LCA5MihhMikKKworICAgIGx3ICAgICAgICAgICAgdDAsIDI4KGEwKQorICAgIHByZWNldS5waC5xYnIgdDUsIHQyCisgICAgcHJlY2V1LnBoLnFibCB0NiwgdDIKKyAgICBhZGR1ICAgICAgICAgIHQwLCB0MCwgYTEKKyAgICBhZGR1LnBoICAgICAgIHQzLCB0MywgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ0LCB0NCwgdDcKKyAgICB1bHcgICAgICAgICAgIHQxLCAwKHQwKQorICAgIHVsdyAgICAgICAgICAgdDIsIDQodDApCisgICAgYWRkdS5waCAgICAgICB0NSwgdDUsIHQ3CisgICAgYWRkdS5waCAgICAgICB0NiwgdDYsIHQ3CisgICAgdXN3ICAgICAgICAgICB0MywgOTYoYTIpCisgICAgdXN3ICAgICAgICAgICB0NCwgMTAwKGEyKQorICAgIHByZWNldS5waC5xYnIgdDMsIHQxCisgICAgcHJlY2V1LnBoLnFibCB0NCwgdDEKKyAgICB1c3cgICAgICAgICAgIHQ1LCAxMDQoYTIpCisgICAgdXN3ICAgICAgICAgICB0NiwgMTA4KGEyKQorICAgIHByZWNldS5waC5xYnIgdDUsIHQyCisgICAgcHJlY2V1LnBoLnFibCB0NiwgdDIKKyAgICBhZGR1LnBoICAgICAgIHQzLCB0MywgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ0LCB0NCwgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ1LCB0NSwgdDcKKyAgICBhZGR1LnBoICAgICAgIHQ2LCB0NiwgdDcKKyAgICB1c3cgICAgICAgICAgIHQzLCAxMTIoYTIpCisgICAgdXN3ICAgICAgICAgICB0NCwgMTE2KGEyKQorICAgIHVzdyAgICAgICAgICAgdDUsIDEyMChhMikKKyAgICB1c3cgICAgICAgICAgIHQ2LCAxMjQoYTIpCisKKyAgICBqICAgICAgICAgICAgIHJhCisgICAgIG5vcAorCitFTkQoanNpbWRfY29udnNhbXBfZHNwcjIpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTEVBRl9EU1BSMihqc2ltZF9jb252c2FtcF9mbG9hdF9kc3ByMikKKy8qCisgKiBhMCA9IHNhbXBsZV9kYXRhCisgKiBhMSA9IHN0YXJ0X2NvbAorICogYTIgPSB3b3Jrc3BhY2UKKyAqLworICAgIC5zZXQgYXQKKworICAgIGx3ICAgICAgICAgIHQwLCAwKGEwKQorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgYTEKKyAgICBsYnUgICAgICAgICB0MSwgMCh0MCkKKyAgICBsYnUgICAgICAgICB0MiwgMSh0MCkKKyAgICBsYnUgICAgICAgICB0MywgMih0MCkKKyAgICBsYnUgICAgICAgICB0NCwgMyh0MCkKKyAgICBsYnUgICAgICAgICB0NSwgNCh0MCkKKyAgICBsYnUgICAgICAgICB0NiwgNSh0MCkKKyAgICBsYnUgICAgICAgICB0NywgNih0MCkKKyAgICBsYnUgICAgICAgICB0OCwgNyh0MCkKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0MiwgdDIsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0MywgdDMsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIC0xMjgKKyAgICBtdGMxICAgICAgICB0MSwgZjIKKyAgICBtdGMxICAgICAgICB0MiwgZjQKKyAgICBtdGMxICAgICAgICB0MywgZjYKKyAgICBtdGMxICAgICAgICB0NCwgZjgKKyAgICBtdGMxICAgICAgICB0NSwgZjEwCisgICAgbXRjMSAgICAgICAgdDYsIGYxMgorICAgIG10YzEgICAgICAgIHQ3LCBmMTQKKyAgICBtdGMxICAgICAgICB0OCwgZjE2CisgICAgY3Z0LnMudyAgICAgZjIsIGYyCisgICAgY3Z0LnMudyAgICAgZjQsIGY0CisgICAgY3Z0LnMudyAgICAgZjYsIGY2CisgICAgY3Z0LnMudyAgICAgZjgsIGY4CisgICAgY3Z0LnMudyAgICAgZjEwLCBmMTAKKyAgICBjdnQucy53ICAgICBmMTIsIGYxMgorICAgIGN2dC5zLncgICAgIGYxNCwgZjE0CisgICAgY3Z0LnMudyAgICAgZjE2LCBmMTYKKyAgICBsdyAgICAgICAgICB0MCwgNChhMCkKKyAgICBzd2MxICAgICAgICBmMiwgMChhMikKKyAgICBzd2MxICAgICAgICBmNCwgNChhMikKKyAgICBzd2MxICAgICAgICBmNiwgOChhMikKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIGExCisgICAgc3djMSAgICAgICAgZjgsIDEyKGEyKQorICAgIHN3YzEgICAgICAgIGYxMCwgMTYoYTIpCisgICAgc3djMSAgICAgICAgZjEyLCAyMChhMikKKyAgICBzd2MxICAgICAgICBmMTQsIDI0KGEyKQorICAgIHN3YzEgICAgICAgIGYxNiwgMjgoYTIpCisgICAgLy8gZWxlbXIgMQorICAgIGxidSAgICAgICAgIHQxLCAwKHQwKQorICAgIGxidSAgICAgICAgIHQyLCAxKHQwKQorICAgIGxidSAgICAgICAgIHQzLCAyKHQwKQorICAgIGxidSAgICAgICAgIHQ0LCAzKHQwKQorICAgIGxidSAgICAgICAgIHQ1LCA0KHQwKQorICAgIGxidSAgICAgICAgIHQ2LCA1KHQwKQorICAgIGxidSAgICAgICAgIHQ3LCA2KHQwKQorICAgIGxidSAgICAgICAgIHQ4LCA3KHQwKQorICAgIGFkZGl1ICAgICAgIHQxLCB0MSwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQyLCB0MiwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ0LCB0NCwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ2LCB0NiwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ3LCB0NywgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgLTEyOAorICAgIG10YzEgICAgICAgIHQxLCBmMgorICAgIG10YzEgICAgICAgIHQyLCBmNAorICAgIG10YzEgICAgICAgIHQzLCBmNgorICAgIG10YzEgICAgICAgIHQ0LCBmOAorICAgIG10YzEgICAgICAgIHQ1LCBmMTAKKyAgICBtdGMxICAgICAgICB0NiwgZjEyCisgICAgbXRjMSAgICAgICAgdDcsIGYxNAorICAgIG10YzEgICAgICAgIHQ4LCBmMTYKKyAgICBjdnQucy53ICAgICBmMiwgZjIKKyAgICBjdnQucy53ICAgICBmNCwgZjQKKyAgICBjdnQucy53ICAgICBmNiwgZjYKKyAgICBjdnQucy53ICAgICBmOCwgZjgKKyAgICBjdnQucy53ICAgICBmMTAsIGYxMAorICAgIGN2dC5zLncgICAgIGYxMiwgZjEyCisgICAgY3Z0LnMudyAgICAgZjE0LCBmMTQKKyAgICBjdnQucy53ICAgICBmMTYsIGYxNgorICAgIGx3ICAgICAgICAgIHQwLCA4KGEwKQorICAgIHN3YzEgICAgICAgIGYyLCAzMihhMikKKyAgICBzd2MxICAgICAgICBmNCwgMzYoYTIpCisgICAgc3djMSAgICAgICAgZjYsIDQwKGEyKQorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgYTEKKyAgICBzd2MxICAgICAgICBmOCwgNDQoYTIpCisgICAgc3djMSAgICAgICAgZjEwLCA0OChhMikKKyAgICBzd2MxICAgICAgICBmMTIsIDUyKGEyKQorICAgIHN3YzEgICAgICAgIGYxNCwgNTYoYTIpCisgICAgc3djMSAgICAgICAgZjE2LCA2MChhMikKKyAgICAvLyBlbGVtciAyCisgICAgbGJ1ICAgICAgICAgdDEsIDAodDApCisgICAgbGJ1ICAgICAgICAgdDIsIDEodDApCisgICAgbGJ1ICAgICAgICAgdDMsIDIodDApCisgICAgbGJ1ICAgICAgICAgdDQsIDModDApCisgICAgbGJ1ICAgICAgICAgdDUsIDQodDApCisgICAgbGJ1ICAgICAgICAgdDYsIDUodDApCisgICAgbGJ1ICAgICAgICAgdDcsIDYodDApCisgICAgbGJ1ICAgICAgICAgdDgsIDcodDApCisgICAgYWRkaXUgICAgICAgdDEsIHQxLCAtMTI4CisgICAgYWRkaXUgICAgICAgdDIsIHQyLCAtMTI4CisgICAgYWRkaXUgICAgICAgdDMsIHQzLCAtMTI4CisgICAgYWRkaXUgICAgICAgdDQsIHQ0LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDUsIHQ1LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDYsIHQ2LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDcsIHQ3LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDgsIHQ4LCAtMTI4CisgICAgbXRjMSAgICAgICAgdDEsIGYyCisgICAgbXRjMSAgICAgICAgdDIsIGY0CisgICAgbXRjMSAgICAgICAgdDMsIGY2CisgICAgbXRjMSAgICAgICAgdDQsIGY4CisgICAgbXRjMSAgICAgICAgdDUsIGYxMAorICAgIG10YzEgICAgICAgIHQ2LCBmMTIKKyAgICBtdGMxICAgICAgICB0NywgZjE0CisgICAgbXRjMSAgICAgICAgdDgsIGYxNgorICAgIGN2dC5zLncgICAgIGYyLCBmMgorICAgIGN2dC5zLncgICAgIGY0LCBmNAorICAgIGN2dC5zLncgICAgIGY2LCBmNgorICAgIGN2dC5zLncgICAgIGY4LCBmOAorICAgIGN2dC5zLncgICAgIGYxMCwgZjEwCisgICAgY3Z0LnMudyAgICAgZjEyLCBmMTIKKyAgICBjdnQucy53ICAgICBmMTQsIGYxNAorICAgIGN2dC5zLncgICAgIGYxNiwgZjE2CisgICAgbHcgICAgICAgICAgdDAsIDEyKGEwKQorICAgIHN3YzEgICAgICAgIGYyLCA2NChhMikKKyAgICBzd2MxICAgICAgICBmNCwgNjgoYTIpCisgICAgc3djMSAgICAgICAgZjYsIDcyKGEyKQorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgYTEKKyAgICBzd2MxICAgICAgICBmOCwgNzYoYTIpCisgICAgc3djMSAgICAgICAgZjEwLCA4MChhMikKKyAgICBzd2MxICAgICAgICBmMTIsIDg0KGEyKQorICAgIHN3YzEgICAgICAgIGYxNCwgODgoYTIpCisgICAgc3djMSAgICAgICAgZjE2LCA5MihhMikKKyAgICAvLyAgZWxlbXIgMworICAgIGxidSAgICAgICAgIHQxLCAwKHQwKQorICAgIGxidSAgICAgICAgIHQyLCAxKHQwKQorICAgIGxidSAgICAgICAgIHQzLCAyKHQwKQorICAgIGxidSAgICAgICAgIHQ0LCAzKHQwKQorICAgIGxidSAgICAgICAgIHQ1LCA0KHQwKQorICAgIGxidSAgICAgICAgIHQ2LCA1KHQwKQorICAgIGxidSAgICAgICAgIHQ3LCA2KHQwKQorICAgIGxidSAgICAgICAgIHQ4LCA3KHQwKQorICAgIGFkZGl1ICAgICAgIHQxLCB0MSwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQyLCB0MiwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ0LCB0NCwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ2LCB0NiwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ3LCB0NywgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgLTEyOAorICAgIG10YzEgICAgICAgIHQxLCBmMgorICAgIG10YzEgICAgICAgIHQyLCBmNAorICAgIG10YzEgICAgICAgIHQzLCBmNgorICAgIG10YzEgICAgICAgIHQ0LCBmOAorICAgIG10YzEgICAgICAgIHQ1LCBmMTAKKyAgICBtdGMxICAgICAgICB0NiwgZjEyCisgICAgbXRjMSAgICAgICAgdDcsIGYxNAorICAgIG10YzEgICAgICAgIHQ4LCBmMTYKKyAgICBjdnQucy53ICAgICBmMiwgZjIKKyAgICBjdnQucy53ICAgICBmNCwgZjQKKyAgICBjdnQucy53ICAgICBmNiwgZjYKKyAgICBjdnQucy53ICAgICBmOCwgZjgKKyAgICBjdnQucy53ICAgICBmMTAsIGYxMAorICAgIGN2dC5zLncgICAgIGYxMiwgZjEyCisgICAgY3Z0LnMudyAgICAgZjE0LCBmMTQKKyAgICBjdnQucy53ICAgICBmMTYsIGYxNgorICAgIGx3ICAgICAgICAgIHQwLCAxNihhMCkKKyAgICBzd2MxICAgICAgICBmMiwgOTYoYTIpCisgICAgc3djMSAgICAgICAgZjQsIDEwMChhMikKKyAgICBzd2MxICAgICAgICBmNiwgMTA0KGEyKQorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgYTEKKyAgICBzd2MxICAgICAgICBmOCwgMTA4KGEyKQorICAgIHN3YzEgICAgICAgIGYxMCwgMTEyKGEyKQorICAgIHN3YzEgICAgICAgIGYxMiwgMTE2KGEyKQorICAgIHN3YzEgICAgICAgIGYxNCwgMTIwKGEyKQorICAgIHN3YzEgICAgICAgIGYxNiwgMTI0KGEyKQorICAgIC8vIGVsZW1yIDQKKyAgICBsYnUgICAgICAgICB0MSwgMCh0MCkKKyAgICBsYnUgICAgICAgICB0MiwgMSh0MCkKKyAgICBsYnUgICAgICAgICB0MywgMih0MCkKKyAgICBsYnUgICAgICAgICB0NCwgMyh0MCkKKyAgICBsYnUgICAgICAgICB0NSwgNCh0MCkKKyAgICBsYnUgICAgICAgICB0NiwgNSh0MCkKKyAgICBsYnUgICAgICAgICB0NywgNih0MCkKKyAgICBsYnUgICAgICAgICB0OCwgNyh0MCkKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0MiwgdDIsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0MywgdDMsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIC0xMjgKKyAgICBtdGMxICAgICAgICB0MSwgZjIKKyAgICBtdGMxICAgICAgICB0MiwgZjQKKyAgICBtdGMxICAgICAgICB0MywgZjYKKyAgICBtdGMxICAgICAgICB0NCwgZjgKKyAgICBtdGMxICAgICAgICB0NSwgZjEwCisgICAgbXRjMSAgICAgICAgdDYsIGYxMgorICAgIG10YzEgICAgICAgIHQ3LCBmMTQKKyAgICBtdGMxICAgICAgICB0OCwgZjE2CisgICAgY3Z0LnMudyAgICAgZjIsIGYyCisgICAgY3Z0LnMudyAgICAgZjQsIGY0CisgICAgY3Z0LnMudyAgICAgZjYsIGY2CisgICAgY3Z0LnMudyAgICAgZjgsIGY4CisgICAgY3Z0LnMudyAgICAgZjEwLCBmMTAKKyAgICBjdnQucy53ICAgICBmMTIsIGYxMgorICAgIGN2dC5zLncgICAgIGYxNCwgZjE0CisgICAgY3Z0LnMudyAgICAgZjE2LCBmMTYKKyAgICBsdyAgICAgICAgICB0MCwgMjAoYTApCisgICAgc3djMSAgICAgICAgZjIsIDEyOChhMikKKyAgICBzd2MxICAgICAgICBmNCwgMTMyKGEyKQorICAgIHN3YzEgICAgICAgIGY2LCAxMzYoYTIpCisgICAgYWRkdSAgICAgICAgdDAsIHQwLCBhMQorICAgIHN3YzEgICAgICAgIGY4LCAxNDAoYTIpCisgICAgc3djMSAgICAgICAgZjEwLCAxNDQoYTIpCisgICAgc3djMSAgICAgICAgZjEyLCAxNDgoYTIpCisgICAgc3djMSAgICAgICAgZjE0LCAxNTIoYTIpCisgICAgc3djMSAgICAgICAgZjE2LCAxNTYoYTIpCisgICAgLy8gZWxlbXIgNQorICAgIGxidSAgICAgICAgIHQxLCAwKHQwKQorICAgIGxidSAgICAgICAgIHQyLCAxKHQwKQorICAgIGxidSAgICAgICAgIHQzLCAyKHQwKQorICAgIGxidSAgICAgICAgIHQ0LCAzKHQwKQorICAgIGxidSAgICAgICAgIHQ1LCA0KHQwKQorICAgIGxidSAgICAgICAgIHQ2LCA1KHQwKQorICAgIGxidSAgICAgICAgIHQ3LCA2KHQwKQorICAgIGxidSAgICAgICAgIHQ4LCA3KHQwKQorICAgIGFkZGl1ICAgICAgIHQxLCB0MSwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQyLCB0MiwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQzLCB0MywgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ0LCB0NCwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ1LCB0NSwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ2LCB0NiwgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ3LCB0NywgLTEyOAorICAgIGFkZGl1ICAgICAgIHQ4LCB0OCwgLTEyOAorICAgIG10YzEgICAgICAgIHQxLCBmMgorICAgIG10YzEgICAgICAgIHQyLCBmNAorICAgIG10YzEgICAgICAgIHQzLCBmNgorICAgIG10YzEgICAgICAgIHQ0LCBmOAorICAgIG10YzEgICAgICAgIHQ1LCBmMTAKKyAgICBtdGMxICAgICAgICB0NiwgZjEyCisgICAgbXRjMSAgICAgICAgdDcsIGYxNAorICAgIG10YzEgICAgICAgIHQ4LCBmMTYKKyAgICBjdnQucy53ICAgICBmMiwgZjIKKyAgICBjdnQucy53ICAgICBmNCwgZjQKKyAgICBjdnQucy53ICAgICBmNiwgZjYKKyAgICBjdnQucy53ICAgICBmOCwgZjgKKyAgICBjdnQucy53ICAgICBmMTAsIGYxMAorICAgIGN2dC5zLncgICAgIGYxMiwgZjEyCisgICAgY3Z0LnMudyAgICAgZjE0LCBmMTQKKyAgICBjdnQucy53ICAgICBmMTYsIGYxNgorICAgIGx3ICAgICAgICAgIHQwLCAyNChhMCkKKyAgICBzd2MxICAgICAgICBmMiwgMTYwKGEyKQorICAgIHN3YzEgICAgICAgIGY0LCAxNjQoYTIpCisgICAgc3djMSAgICAgICAgZjYsIDE2OChhMikKKyAgICBhZGR1ICAgICAgICB0MCwgdDAsIGExCisgICAgc3djMSAgICAgICAgZjgsIDE3MihhMikKKyAgICBzd2MxICAgICAgICBmMTAsIDE3NihhMikKKyAgICBzd2MxICAgICAgICBmMTIsIDE4MChhMikKKyAgICBzd2MxICAgICAgICBmMTQsIDE4NChhMikKKyAgICBzd2MxICAgICAgICBmMTYsIDE4OChhMikKKyAgICAvLyBlbGVtciA2CisgICAgbGJ1ICAgICAgICAgdDEsIDAodDApCisgICAgbGJ1ICAgICAgICAgdDIsIDEodDApCisgICAgbGJ1ICAgICAgICAgdDMsIDIodDApCisgICAgbGJ1ICAgICAgICAgdDQsIDModDApCisgICAgbGJ1ICAgICAgICAgdDUsIDQodDApCisgICAgbGJ1ICAgICAgICAgdDYsIDUodDApCisgICAgbGJ1ICAgICAgICAgdDcsIDYodDApCisgICAgbGJ1ICAgICAgICAgdDgsIDcodDApCisgICAgYWRkaXUgICAgICAgdDEsIHQxLCAtMTI4CisgICAgYWRkaXUgICAgICAgdDIsIHQyLCAtMTI4CisgICAgYWRkaXUgICAgICAgdDMsIHQzLCAtMTI4CisgICAgYWRkaXUgICAgICAgdDQsIHQ0LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDUsIHQ1LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDYsIHQ2LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDcsIHQ3LCAtMTI4CisgICAgYWRkaXUgICAgICAgdDgsIHQ4LCAtMTI4CisgICAgbXRjMSAgICAgICAgdDEsIGYyCisgICAgbXRjMSAgICAgICAgdDIsIGY0CisgICAgbXRjMSAgICAgICAgdDMsIGY2CisgICAgbXRjMSAgICAgICAgdDQsIGY4CisgICAgbXRjMSAgICAgICAgdDUsIGYxMAorICAgIG10YzEgICAgICAgIHQ2LCBmMTIKKyAgICBtdGMxICAgICAgICB0NywgZjE0CisgICAgbXRjMSAgICAgICAgdDgsIGYxNgorICAgIGN2dC5zLncgICAgIGYyLCBmMgorICAgIGN2dC5zLncgICAgIGY0LCBmNAorICAgIGN2dC5zLncgICAgIGY2LCBmNgorICAgIGN2dC5zLncgICAgIGY4LCBmOAorICAgIGN2dC5zLncgICAgIGYxMCwgZjEwCisgICAgY3Z0LnMudyAgICAgZjEyLCBmMTIKKyAgICBjdnQucy53ICAgICBmMTQsIGYxNAorICAgIGN2dC5zLncgICAgIGYxNiwgZjE2CisgICAgbHcgICAgICAgICAgdDAsIDI4KGEwKQorICAgIHN3YzEgICAgICAgIGYyLCAxOTIoYTIpCisgICAgc3djMSAgICAgICAgZjQsIDE5NihhMikKKyAgICBzd2MxICAgICAgICBmNiwgMjAwKGEyKQorICAgIGFkZHUgICAgICAgIHQwLCB0MCwgYTEKKyAgICBzd2MxICAgICAgICBmOCwgMjA0KGEyKQorICAgIHN3YzEgICAgICAgIGYxMCwgMjA4KGEyKQorICAgIHN3YzEgICAgICAgIGYxMiwgMjEyKGEyKQorICAgIHN3YzEgICAgICAgIGYxNCwgMjE2KGEyKQorICAgIHN3YzEgICAgICAgIGYxNiwgMjIwKGEyKQorICAgIC8vIGVsZW1yIDcKKyAgICBsYnUgICAgICAgICB0MSwgMCh0MCkKKyAgICBsYnUgICAgICAgICB0MiwgMSh0MCkKKyAgICBsYnUgICAgICAgICB0MywgMih0MCkKKyAgICBsYnUgICAgICAgICB0NCwgMyh0MCkKKyAgICBsYnUgICAgICAgICB0NSwgNCh0MCkKKyAgICBsYnUgICAgICAgICB0NiwgNSh0MCkKKyAgICBsYnUgICAgICAgICB0NywgNih0MCkKKyAgICBsYnUgICAgICAgICB0OCwgNyh0MCkKKyAgICBhZGRpdSAgICAgICB0MSwgdDEsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0MiwgdDIsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0MywgdDMsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NCwgdDQsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NSwgdDUsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NiwgdDYsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0NywgdDcsIC0xMjgKKyAgICBhZGRpdSAgICAgICB0OCwgdDgsIC0xMjgKKyAgICBtdGMxICAgICAgICB0MSwgZjIKKyAgICBtdGMxICAgICAgICB0MiwgZjQKKyAgICBtdGMxICAgICAgICB0MywgZjYKKyAgICBtdGMxICAgICAgICB0NCwgZjgKKyAgICBtdGMxICAgICAgICB0NSwgZjEwCisgICAgbXRjMSAgICAgICAgdDYsIGYxMgorICAgIG10YzEgICAgICAgIHQ3LCBmMTQKKyAgICBtdGMxICAgICAgICB0OCwgZjE2CisgICAgY3Z0LnMudyAgICAgZjIsIGYyCisgICAgY3Z0LnMudyAgICAgZjQsIGY0CisgICAgY3Z0LnMudyAgICAgZjYsIGY2CisgICAgY3Z0LnMudyAgICAgZjgsIGY4CisgICAgY3Z0LnMudyAgICAgZjEwLCBmMTAKKyAgICBjdnQucy53ICAgICBmMTIsIGYxMgorICAgIGN2dC5zLncgICAgIGYxNCwgZjE0CisgICAgY3Z0LnMudyAgICAgZjE2LCBmMTYKKyAgICBzd2MxICAgICAgICBmMiwgMjI0KGEyKQorICAgIHN3YzEgICAgICAgIGY0LCAyMjgoYTIpCisgICAgc3djMSAgICAgICAgZjYsIDIzMihhMikKKyAgICBzd2MxICAgICAgICBmOCwgMjM2KGEyKQorICAgIHN3YzEgICAgICAgIGYxMCwgMjQwKGEyKQorICAgIHN3YzEgICAgICAgIGYxMiwgMjQ0KGEyKQorICAgIHN3YzEgICAgICAgIGYxNCwgMjQ4KGEyKQorICAgIHN3YzEgICAgICAgIGYxNiwgMjUyKGEyKQorCisgICAgaiAgICAgICAgICAgcmEKKyAgICAgbm9wCisKK0VORChqc2ltZF9jb252c2FtcF9mbG9hdF9kc3ByMikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9taXBzL2pzaW1kX2RzcHIyX2FzbS5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9taXBzL2pzaW1kX2RzcHIyX2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2ZkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL21pcHMvanNpbWRfZHNwcjJfYXNtLmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBNSVBTIERTUHIyIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IChDKSAyMDE4LCBNYXR0aGlldSBEYXJib2lzLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEF1dGhvcnM6ICBUZW9kb3JhIE5vdmtvdmljICh0ZW9kb3JhLm5vdmtvdmljQGltZ3RlYy5jb20pCisgKiAgICAgICAgICAgRGFya28gTGF1cyAgICAgICAoZGFya28ubGF1c0BpbWd0ZWMuY29tKQorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisjZGVmaW5lIHplcm8gICQwCisjZGVmaW5lIEFUICAgICQxCisjZGVmaW5lIHYwICAgICQyCisjZGVmaW5lIHYxICAgICQzCisjZGVmaW5lIGEwICAgICQ0CisjZGVmaW5lIGExICAgICQ1CisjZGVmaW5lIGEyICAgICQ2CisjZGVmaW5lIGEzICAgICQ3CisjZGVmaW5lIHQwICAgICQ4CisjZGVmaW5lIHQxICAgICQ5CisjZGVmaW5lIHQyICAgICQxMAorI2RlZmluZSB0MyAgICAkMTEKKyNkZWZpbmUgdDQgICAgJDEyCisjZGVmaW5lIHQ1ICAgICQxMworI2RlZmluZSB0NiAgICAkMTQKKyNkZWZpbmUgdDcgICAgJDE1CisjZGVmaW5lIHMwICAgICQxNgorI2RlZmluZSBzMSAgICAkMTcKKyNkZWZpbmUgczIgICAgJDE4CisjZGVmaW5lIHMzICAgICQxOQorI2RlZmluZSBzNCAgICAkMjAKKyNkZWZpbmUgczUgICAgJDIxCisjZGVmaW5lIHM2ICAgICQyMgorI2RlZmluZSBzNyAgICAkMjMKKyNkZWZpbmUgdDggICAgJDI0CisjZGVmaW5lIHQ5ICAgICQyNQorI2RlZmluZSBrMCAgICAkMjYKKyNkZWZpbmUgazEgICAgJDI3CisjZGVmaW5lIGdwICAgICQyOAorI2RlZmluZSBzcCAgICAkMjkKKyNkZWZpbmUgZnAgICAgJDMwCisjZGVmaW5lIHM4ICAgICQzMAorI2RlZmluZSByYSAgICAkMzEKKworI2RlZmluZSBmMCAgICAkZjAKKyNkZWZpbmUgZjEgICAgJGYxCisjZGVmaW5lIGYyICAgICRmMgorI2RlZmluZSBmMyAgICAkZjMKKyNkZWZpbmUgZjQgICAgJGY0CisjZGVmaW5lIGY1ICAgICRmNQorI2RlZmluZSBmNiAgICAkZjYKKyNkZWZpbmUgZjcgICAgJGY3CisjZGVmaW5lIGY4ICAgICRmOAorI2RlZmluZSBmOSAgICAkZjkKKyNkZWZpbmUgZjEwICAgJGYxMAorI2RlZmluZSBmMTEgICAkZjExCisjZGVmaW5lIGYxMiAgICRmMTIKKyNkZWZpbmUgZjEzICAgJGYxMworI2RlZmluZSBmMTQgICAkZjE0CisjZGVmaW5lIGYxNSAgICRmMTUKKyNkZWZpbmUgZjE2ICAgJGYxNgorI2RlZmluZSBmMTcgICAkZjE3CisjZGVmaW5lIGYxOCAgICRmMTgKKyNkZWZpbmUgZjE5ICAgJGYxOQorI2RlZmluZSBmMjAgICAkZjIwCisjZGVmaW5lIGYyMSAgICRmMjEKKyNkZWZpbmUgZjIyICAgJGYyMgorI2RlZmluZSBmMjMgICAkZjIzCisjZGVmaW5lIGYyNCAgICRmMjQKKyNkZWZpbmUgZjI1ICAgJGYyNQorI2RlZmluZSBmMjYgICAkZjI2CisjZGVmaW5lIGYyNyAgICRmMjcKKyNkZWZpbmUgZjI4ICAgJGYyOAorI2RlZmluZSBmMjkgICAkZjI5CisjZGVmaW5lIGYzMCAgICRmMzAKKyNkZWZpbmUgZjMxICAgJGYzMQorCisjaWZkZWYgX19FTEZfXworI2RlZmluZSBISURERU5fU1lNQk9MKHN5bWJvbCkgIC5oaWRkZW4gc3ltYm9sOworI2Vsc2UKKyNkZWZpbmUgSElEREVOX1NZTUJPTChzeW1ib2wpCisjZW5kaWYKKworLyoKKyAqIExFQUZfTUlQUzMyUjIgLSBkZWNsYXJlIGxlYWYgcm91dGluZSBmb3IgTUlQUzMycjIKKyAqLworI2RlZmluZSBMRUFGX01JUFMzMlIyKHN5bWJvbCkgXAorICAgIC5nbG9ibCAgICAgIHN5bWJvbDsgXAorICAgIEhJRERFTl9TWU1CT0woc3ltYm9sKSBcCisgICAgLmFsaWduICAgICAgMjsgXAorICAgIC50eXBlICAgICAgIHN5bWJvbCwgQGZ1bmN0aW9uOyBcCisgICAgLmVudCAgICAgICAgc3ltYm9sLCAwOyBcCitzeW1ib2w6IFwKKyAgICAuZnJhbWUgICAgICBzcCwgMCwgcmE7IFwKKyAgICAuc2V0ICAgICAgICBwdXNoOyBcCisgICAgLnNldCAgICAgICAgYXJjaCA9IG1pcHMzMnIyOyBcCisgICAgLnNldCAgICAgICAgbm9yZW9yZGVyOyBcCisgICAgLnNldCAgICAgICAgbm9hdDsKKworLyoKKyAqIExFQUZfRFNQUjIgLSBkZWNsYXJlIGxlYWYgcm91dGluZSBmb3IgTUlQUyBEU1ByMgorICovCisjZGVmaW5lIExFQUZfRFNQUjIoc3ltYm9sKSBcCitMRUFGX01JUFMzMlIyKHN5bWJvbCkgXAorICAgIC5zZXQgICAgICAgIGRzcHIyOworCisvKgorICogRU5EIC0gbWFyayBlbmQgb2YgZnVuY3Rpb24KKyAqLworI2RlZmluZSBFTkQoZnVuY3Rpb24pIFwKKyAgICAuc2V0ICAgICAgICBwb3A7IFwKKyAgICAuZW5kICAgICAgICBmdW5jdGlvbjsgXAorICAgIC5zaXplICAgICAgIGZ1bmN0aW9uLCAuLWZ1bmN0aW9uCisKKy8qCisgKiBDaGVja3MgaWYgc3RhY2sgb2Zmc2V0IGlzIGJpZyBlbm91Z2ggZm9yIHN0b3JpbmcvcmVzdG9yaW5nIHJlZ3NfbnVtCisgKiBudW1iZXIgb2YgcmVnaXN0ZXIgdG8vZnJvbSBzdGFjay4gU3RhY2sgb2Zmc2V0IG11c3QgYmUgZ3JlYXRlciB0aGFuCisgKiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCBmb3Igc3RvcmluZyByZWdpc3RlcnMgKHJlZ3NfbnVtKjQpLgorICogU2luY2UgTUlQUyBBQkkgYWxsb3dzIHVzYWdlIG9mIGZpcnN0IDE2IGJ5dGVzIG9mIHN0YWNrIGZyYW1lICh0aGlzIGlzCisgKiBwcmVzZXJ2ZWQgZm9yIGlucHV0IGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb25zLCBhbHJlYWR5IHN0b3JlZCBpbiBhMC1hMyksCisgKiBzdGFjayBzaXplIGNhbiBiZSBmdXJ0aGVyIG9wdGltaXplZCBieSB1dGlsaXppbmcgdGhpcyBzcGFjZS4KKyAqLworLm1hY3JvIENIRUNLX1NUQUNLX09GRlNFVCByZWdzX251bSwgc3RhY2tfb2Zmc2V0CisuaWYgXHN0YWNrX29mZnNldCA8IFxyZWdzX251bSAqIDQgLSAxNgorLmVycm9yICJTdGFjayBvZmZzZXQgdG9vIHNtYWxsLiIKKy5lbmRpZgorLmVuZG0KKworLyoKKyAqIFNhdmVzIHNldCBvZiByZWdpc3RlcnMgb24gc3RhY2suIE1heGltdW0gbnVtYmVyIG9mIHJlZ2lzdGVycyB0aGF0CisgKiBjYW4gYmUgc2F2ZWQgb24gc3RhY2sgaXMgbGltaXR0ZWQgdG8gMTQgKGEwLWEzLCB2MC12MSBhbmQgczAtczcpLgorICogU3RhY2sgb2Zmc2V0IGlzIG51bWJlciBvZiBieXRlcyB0aGF0IGFyZSBhZGRlZCB0byBzdGFjayBwb2ludGVyIChzcCkKKyAqIGJlZm9yZSByZWdpc3RlcnMgYXJlIHB1c2hlZCBpbiBvcmRlciB0byBwcm92aWRlIGVub3VnaCBzcGFjZSBvbiBzdGFjaworICogKG9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIDQsIGFuZCBtdXN0IGJlIGJpZyBlbm91Z2gsIGFzIGRlc2NyaWJlZCBieQorICogQ0hFQ0tfU1RBQ0tfT0ZGU0VUIG1hY3JvKS4gVGhpcyBtYWNybyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluCisgKiBjb21iaW5hdGlvbiB3aXRoIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIG1hY3JvLiBFeGFtcGxlOgorICogIFNBVkVfUkVHU19PTl9TVEFDSyAgICAgIDQsIHYwLCB2MSwgczAsIHMxCisgKiAgUkVTVE9SRV9SRUdTX0ZST01fU1RBQ0sgNCwgdjAsIHYxLCBzMCwgczEKKyAqLworLm1hY3JvIFNBVkVfUkVHU19PTl9TVEFDSyAgc3RhY2tfb2Zmc2V0ID0gMCwgcjEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHIyICA9IDAsIHIzICA9IDAsIHI0ICA9IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHI1ICA9IDAsIHI2ICA9IDAsIHI3ICA9IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHI4ICA9IDAsIHI5ICA9IDAsIHIxMCA9IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHIxMSA9IDAsIHIxMiA9IDAsIHIxMyA9IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHIxNCA9IDAKKy5pZiAoXHN0YWNrX29mZnNldCA8IDApIHx8IChcc3RhY2tfb2Zmc2V0IC0gKFxzdGFja19vZmZzZXQgLyA0KSAqIDQpCisgICAgLmVycm9yICJTdGFjayBvZmZzZXQgbXVzdCBiZSBwb3ppdGl2ZSBhbmQgbXVsdGlwbGUgb2YgNC4iCisuZW5kaWYKKy5pZiBcc3RhY2tfb2Zmc2V0ICE9IDAKKyAgICBhZGRpdSAgICAgICBzcCwgc3AsIC1cc3RhY2tfb2Zmc2V0CisuZW5kaWYKKyAgICBzdyAgICAgICAgICBccjEsIDAoc3ApCisuaWYgXHIyICE9IDAKKyAgICBzdyAgICAgICAgICBccjIsIDQoc3ApCisuZW5kaWYKKy5pZiBccjMgIT0gMAorICAgIHN3ICAgICAgICAgIFxyMywgOChzcCkKKy5lbmRpZgorLmlmIFxyNCAhPSAwCisgICAgc3cgICAgICAgICAgXHI0LCAxMihzcCkKKy5lbmRpZgorLmlmIFxyNSAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDUsIFxzdGFja19vZmZzZXQKKyAgICBzdyAgICAgICAgICBccjUsIDE2KHNwKQorLmVuZGlmCisuaWYgXHI2ICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgNiwgXHN0YWNrX29mZnNldAorICAgIHN3ICAgICAgICAgIFxyNiwgMjAoc3ApCisuZW5kaWYKKy5pZiBccjcgIT0gMAorICAgIENIRUNLX1NUQUNLX09GRlNFVCA3LCBcc3RhY2tfb2Zmc2V0CisgICAgc3cgICAgICAgICAgXHI3LCAyNChzcCkKKy5lbmRpZgorLmlmIFxyOCAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDgsIFxzdGFja19vZmZzZXQKKyAgICBzdyAgICAgICAgICBccjgsIDI4KHNwKQorLmVuZGlmCisuaWYgXHI5ICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgOSwgXHN0YWNrX29mZnNldAorICAgIHN3ICAgICAgICAgIFxyOSwgMzIoc3ApCisuZW5kaWYKKy5pZiBccjEwICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgMTAsIFxzdGFja19vZmZzZXQKKyAgICBzdyAgICAgICAgICBccjEwLCAzNihzcCkKKy5lbmRpZgorLmlmIFxyMTEgIT0gMAorICAgIENIRUNLX1NUQUNLX09GRlNFVCAxMSwgXHN0YWNrX29mZnNldAorICAgIHN3ICAgICAgICAgIFxyMTEsIDQwKHNwKQorLmVuZGlmCisuaWYgXHIxMiAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDEyLCBcc3RhY2tfb2Zmc2V0CisgICAgc3cgICAgICAgICAgXHIxMiwgNDQoc3ApCisuZW5kaWYKKy5pZiBccjEzICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgMTMsIFxzdGFja19vZmZzZXQKKyAgICBzdyAgICAgICAgICBccjEzLCA0OChzcCkKKy5lbmRpZgorLmlmIFxyMTQgIT0gMAorICAgIENIRUNLX1NUQUNLX09GRlNFVCAxNCwgXHN0YWNrX29mZnNldAorICAgIHN3ICAgICAgICAgIFxyMTQsIDUyKHNwKQorLmVuZGlmCisuZW5kbQorCisvKgorICogUmVzdG9yZXMgc2V0IG9mIHJlZ2lzdGVycyBmcm9tIHN0YWNrLiBNYXhpbXVtIG51bWJlciBvZiByZWdpc3RlcnMgdGhhdAorICogY2FuIGJlIHJlc3RvcmVkIGZyb20gc3RhY2sgaXMgbGltaXR0ZWQgdG8gMTQgKGEwLWEzLCB2MC12MSBhbmQgczAtczcpLgorICogU3RhY2sgb2Zmc2V0IGlzIG51bWJlciBvZiBieXRlcyB0aGF0IGFyZSBhZGRlZCB0byBzdGFjayBwb2ludGVyIChzcCkKKyAqIGFmdGVyIHJlZ2lzdGVycyBhcmUgcmVzdG9yZWQgKG9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIDQsIGFuZCBtdXN0CisgKiBiZSBiaWcgZW5vdWdoLCBhcyBkZXNjcmliZWQgYnkgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIG1hY3JvKS4gVGhpcyBtYWNybyBpcworICogaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIG1hY3JvLgorICogRXhhbXBsZToKKyAqICBTQVZFX1JFR1NfT05fU1RBQ0sgICAgICA0LCB2MCwgdjEsIHMwLCBzMQorICogIFJFU1RPUkVfUkVHU19GUk9NX1NUQUNLIDQsIHYwLCB2MSwgczAsIHMxCisgKi8KKy5tYWNybyBSRVNUT1JFX1JFR1NfRlJPTV9TVEFDSyAgc3RhY2tfb2Zmc2V0ID0gMCwgcjEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjIgID0gMCwgcjMgID0gMCwgcjQgID0gMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByNSAgPSAwLCByNiAgPSAwLCByNyAgPSAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI4ICA9IDAsIHI5ICA9IDAsIHIxMCA9IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjExID0gMCwgcjEyID0gMCwgcjEzID0gMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMTQgPSAwCisuaWYgKFxzdGFja19vZmZzZXQgPCAwKSB8fCAoXHN0YWNrX29mZnNldCAtIChcc3RhY2tfb2Zmc2V0IC8gNCkgKiA0KQorICAgIC5lcnJvciAiU3RhY2sgb2Zmc2V0IG11c3QgYmUgcG96aXRpdmUgYW5kIG11bHRpcGxlIG9mIDQuIgorLmVuZGlmCisgICAgbHcgICAgICAgICAgXHIxLCAwKHNwKQorLmlmIFxyMiAhPSAwCisgICAgbHcgICAgICAgICAgXHIyLCA0KHNwKQorLmVuZGlmCisuaWYgXHIzICE9IDAKKyAgICBsdyAgICAgICAgICBccjMsIDgoc3ApCisuZW5kaWYKKy5pZiBccjQgIT0gMAorICAgIGx3ICAgICAgICAgIFxyNCwgMTIoc3ApCisuZW5kaWYKKy5pZiBccjUgIT0gMAorICAgIENIRUNLX1NUQUNLX09GRlNFVCA1LCBcc3RhY2tfb2Zmc2V0CisgICAgbHcgICAgICAgICAgXHI1LCAxNihzcCkKKy5lbmRpZgorLmlmIFxyNiAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDYsIFxzdGFja19vZmZzZXQKKyAgICBsdyAgICAgICAgICBccjYsIDIwKHNwKQorLmVuZGlmCisuaWYgXHI3ICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgNywgXHN0YWNrX29mZnNldAorICAgIGx3ICAgICAgICAgIFxyNywgMjQoc3ApCisuZW5kaWYKKy5pZiBccjggIT0gMAorICAgIENIRUNLX1NUQUNLX09GRlNFVCA4LCBcc3RhY2tfb2Zmc2V0CisgICAgbHcgICAgICAgICAgXHI4LCAyOChzcCkKKy5lbmRpZgorLmlmIFxyOSAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDksIFxzdGFja19vZmZzZXQKKyAgICBsdyAgICAgICAgICBccjksIDMyKHNwKQorLmVuZGlmCisuaWYgXHIxMCAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDEwLCBcc3RhY2tfb2Zmc2V0CisgICAgbHcgICAgICAgICAgXHIxMCwgMzYoc3ApCisuZW5kaWYKKy5pZiBccjExICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgMTEsIFxzdGFja19vZmZzZXQKKyAgICBsdyAgICAgICAgICBccjExLCA0MChzcCkKKy5lbmRpZgorLmlmIFxyMTIgIT0gMAorICAgIENIRUNLX1NUQUNLX09GRlNFVCAxMiwgXHN0YWNrX29mZnNldAorICAgIGx3ICAgICAgICAgIFxyMTIsIDQ0KHNwKQorLmVuZGlmCisuaWYgXHIxMyAhPSAwCisgICAgQ0hFQ0tfU1RBQ0tfT0ZGU0VUIDEzLCBcc3RhY2tfb2Zmc2V0CisgICAgbHcgICAgICAgICAgXHIxMywgNDgoc3ApCisuZW5kaWYKKy5pZiBccjE0ICE9IDAKKyAgICBDSEVDS19TVEFDS19PRkZTRVQgMTQsIFxzdGFja19vZmZzZXQKKyAgICBsdyAgICAgICAgICBccjE0LCA1MihzcCkKKy5lbmRpZgorLmlmIFxzdGFja19vZmZzZXQgIT0gMAorICAgIGFkZGl1ICAgICAgIHNwLCBzcCwgXHN0YWNrX29mZnNldAorLmVuZGlmCisuZW5kbQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9uYXNtL2pjb2xzYW1wLmluYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qY29sc2FtcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkNWI0OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qY29sc2FtcC5pbmMKQEAgLTAsMCArMSwxMzcgQEAKKzsKKzsgamNvbHNhbXAuaW5jIC0gcHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIGNvbG9yIGNvbnZlcnNpb24gJiB1cC9kb3duc2FtcGxpbmcKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgW1RBQjhdCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyBwc2V1ZG8tcmVzaXN0ZXJzIHRvIG1ha2Ugb3JkZXJpbmcgb2YgUkdCIGNvbmZpZ3VyYWJsZQorOworJWlmIFJHQl9SRUQgPT0gMAorJWRlZmluZSBtbUEgIG1tMAorJWRlZmluZSBtbUIgIG1tMQorJWRlZmluZSB4bW1BICB4bW0wCislZGVmaW5lIHhtbUIgIHhtbTEKKyVkZWZpbmUgeW1tQSAgeW1tMAorJWRlZmluZSB5bW1CICB5bW0xCislZWxpZiBSR0JfR1JFRU4gPT0gMAorJWRlZmluZSBtbUEgIG1tMgorJWRlZmluZSBtbUIgIG1tMworJWRlZmluZSB4bW1BICB4bW0yCislZGVmaW5lIHhtbUIgIHhtbTMKKyVkZWZpbmUgeW1tQSAgeW1tMgorJWRlZmluZSB5bW1CICB5bW0zCislZWxpZiBSR0JfQkxVRSA9PSAwCislZGVmaW5lIG1tQSAgbW00CislZGVmaW5lIG1tQiAgbW01CislZGVmaW5lIHhtbUEgIHhtbTQKKyVkZWZpbmUgeG1tQiAgeG1tNQorJWRlZmluZSB5bW1BICB5bW00CislZGVmaW5lIHltbUIgIHltbTUKKyVlbHNlCislZGVmaW5lIG1tQSAgbW02CislZGVmaW5lIG1tQiAgbW03CislZGVmaW5lIHhtbUEgIHhtbTYKKyVkZWZpbmUgeG1tQiAgeG1tNworJWRlZmluZSB5bW1BICB5bW02CislZGVmaW5lIHltbUIgIHltbTcKKyVlbmRpZgorCislaWYgUkdCX1JFRCA9PSAxCislZGVmaW5lIG1tQyAgbW0wCislZGVmaW5lIG1tRCAgbW0xCislZGVmaW5lIHhtbUMgIHhtbTAKKyVkZWZpbmUgeG1tRCAgeG1tMQorJWRlZmluZSB5bW1DICB5bW0wCislZGVmaW5lIHltbUQgIHltbTEKKyVlbGlmIFJHQl9HUkVFTiA9PSAxCislZGVmaW5lIG1tQyAgbW0yCislZGVmaW5lIG1tRCAgbW0zCislZGVmaW5lIHhtbUMgIHhtbTIKKyVkZWZpbmUgeG1tRCAgeG1tMworJWRlZmluZSB5bW1DICB5bW0yCislZGVmaW5lIHltbUQgIHltbTMKKyVlbGlmIFJHQl9CTFVFID09IDEKKyVkZWZpbmUgbW1DICBtbTQKKyVkZWZpbmUgbW1EICBtbTUKKyVkZWZpbmUgeG1tQyAgeG1tNAorJWRlZmluZSB4bW1EICB4bW01CislZGVmaW5lIHltbUMgIHltbTQKKyVkZWZpbmUgeW1tRCAgeW1tNQorJWVsc2UKKyVkZWZpbmUgbW1DICBtbTYKKyVkZWZpbmUgbW1EICBtbTcKKyVkZWZpbmUgeG1tQyAgeG1tNgorJWRlZmluZSB4bW1EICB4bW03CislZGVmaW5lIHltbUMgIHltbTYKKyVkZWZpbmUgeW1tRCAgeW1tNworJWVuZGlmCisKKyVpZiBSR0JfUkVEID09IDIKKyVkZWZpbmUgbW1FICBtbTAKKyVkZWZpbmUgbW1GICBtbTEKKyVkZWZpbmUgeG1tRSAgeG1tMAorJWRlZmluZSB4bW1GICB4bW0xCislZGVmaW5lIHltbUUgIHltbTAKKyVkZWZpbmUgeW1tRiAgeW1tMQorJWVsaWYgUkdCX0dSRUVOID09IDIKKyVkZWZpbmUgbW1FICBtbTIKKyVkZWZpbmUgbW1GICBtbTMKKyVkZWZpbmUgeG1tRSAgeG1tMgorJWRlZmluZSB4bW1GICB4bW0zCislZGVmaW5lIHltbUUgIHltbTIKKyVkZWZpbmUgeW1tRiAgeW1tMworJWVsaWYgUkdCX0JMVUUgPT0gMgorJWRlZmluZSBtbUUgIG1tNAorJWRlZmluZSBtbUYgIG1tNQorJWRlZmluZSB4bW1FICB4bW00CislZGVmaW5lIHhtbUYgIHhtbTUKKyVkZWZpbmUgeW1tRSAgeW1tNAorJWRlZmluZSB5bW1GICB5bW01CislZWxzZQorJWRlZmluZSBtbUUgIG1tNgorJWRlZmluZSBtbUYgIG1tNworJWRlZmluZSB4bW1FICB4bW02CislZGVmaW5lIHhtbUYgIHhtbTcKKyVkZWZpbmUgeW1tRSAgeW1tNgorJWRlZmluZSB5bW1GICB5bW03CislZW5kaWYKKworJWlmIFJHQl9SRUQgPT0gMworJWRlZmluZSBtbUcgIG1tMAorJWRlZmluZSBtbUggIG1tMQorJWRlZmluZSB4bW1HICB4bW0wCislZGVmaW5lIHhtbUggIHhtbTEKKyVkZWZpbmUgeW1tRyAgeW1tMAorJWRlZmluZSB5bW1IICB5bW0xCislZWxpZiBSR0JfR1JFRU4gPT0gMworJWRlZmluZSBtbUcgIG1tMgorJWRlZmluZSBtbUggIG1tMworJWRlZmluZSB4bW1HICB4bW0yCislZGVmaW5lIHhtbUggIHhtbTMKKyVkZWZpbmUgeW1tRyAgeW1tMgorJWRlZmluZSB5bW1IICB5bW0zCislZWxpZiBSR0JfQkxVRSA9PSAzCislZGVmaW5lIG1tRyAgbW00CislZGVmaW5lIG1tSCAgbW01CislZGVmaW5lIHhtbUcgIHhtbTQKKyVkZWZpbmUgeG1tSCAgeG1tNQorJWRlZmluZSB5bW1HICB5bW00CislZGVmaW5lIHltbUggIHltbTUKKyVlbHNlCislZGVmaW5lIG1tRyAgbW02CislZGVmaW5lIG1tSCAgbW03CislZGVmaW5lIHhtbUcgIHhtbTYKKyVkZWZpbmUgeG1tSCAgeG1tNworJWRlZmluZSB5bW1HICB5bW02CislZGVmaW5lIHltbUggIHltbTcKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL25hc20vamRjdC5pbmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL25hc20vamRjdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkNTE0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qZGN0LmluYwpAQCAtMCwwICsxLDMzIEBACis7Cis7IGpkY3QuaW5jIC0gcHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIGZvcndhcmQgJiByZXZlcnNlIERDVCBzdWJzeXN0ZW1zCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDE4LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBbVEFCOF0KKworOyBFYWNoIElEQ1Qgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcmFuZ2UtbGltaXRpbmcgaXRzIHJlc3VsdHMgYW5kCis7IGNvbnZlcnRpbmcgdGhlbSB0byB1bnNpZ25lZCBmb3JtICgwLi5NQVhKU0FNUExFKS4gIFRoZSByYXcgb3V0cHV0cyBjb3VsZAorOyBiZSBxdWl0ZSBmYXIgb3V0IG9mIHJhbmdlIGlmIHRoZSBpbnB1dCBkYXRhIGlzIGNvcnJ1cHQsIHNvIGEgYnVsbGV0cHJvb2YKKzsgcmFuZ2UtbGltaXRpbmcgc3RlcCBpcyByZXF1aXJlZC4gIFdlIHVzZSBhIG1hc2stYW5kLXRhYmxlLWxvb2t1cCBtZXRob2QKKzsgdG8gZG8gdGhlIGNvbWJpbmVkIG9wZXJhdGlvbnMgcXVpY2tseS4KKzsKKyVkZWZpbmUgUkFOR0VfTUFTSyAgKE1BWEpTQU1QTEUgKiA0ICsgMykgIDsgMiBiaXRzIHdpZGVyIHRoYW4gbGVnYWwgc2FtcGxlcworCislZGVmaW5lIFJPVyhuLCBiLCBzKSAgKChiKSArIChuKSAqIChzKSkKKyVkZWZpbmUgQ09MKG4sIGIsIHMpICAoKGIpICsgKG4pICogKHMpICogRENUU0laRSkKKworJWRlZmluZSBEV0JMT0NLKG0sIG4sIGIsIHMpIFwKKyAgKChiKSArIChtKSAqIERDVFNJWkUgKiAocykgKyAobikgKiBTSVpFT0ZfRFdPUkQpCislZGVmaW5lIE1NQkxPQ0sobSwgbiwgYiwgcykgXAorICAoKGIpICsgKG0pICogRENUU0laRSAqIChzKSArIChuKSAqIFNJWkVPRl9NTVdPUkQpCislZGVmaW5lIFhNTUJMT0NLKG0sIG4sIGIsIHMpIFwKKyAgKChiKSArIChtKSAqIERDVFNJWkUgKiAocykgKyAobikgKiBTSVpFT0ZfWE1NV09SRCkKKyVkZWZpbmUgWU1NQkxPQ0sobSwgbiwgYiwgcykgXAorICAoKGIpICsgKG0pICogRENUU0laRSAqIChzKSArIChuKSAqIFNJWkVPRl9ZTU1XT1JEKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL25hc20vanBlZ19uYml0c190YWJsZS5pbmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL25hc20vanBlZ19uYml0c190YWJsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlNmMyOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qcGVnX25iaXRzX3RhYmxlLmluYwpAQCAtMCwwICsxLDQwOTcgQEAKK2pwZWdfbmJpdHNfdGFibGUgZGIgXAorICAgMCwgIDEsICAyLCAgMiwgIDMsICAzLCAgMywgIDMsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgXAorICAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgXAorICAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgXAorICAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgIDYsICA2LCAgNiwgXAorICAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgXAorICAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgXAorICAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgXAorICAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgIDcsICA3LCAgNywgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgXAorICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9uYXNtL2pzaW1kY2ZnLmluYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qc2ltZGNmZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3MDI0YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qc2ltZGNmZy5pbmMKQEAgLTAsMCArMSw5MyBAQAorOworOyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUgZnJvbSBqc2ltZGNmZy5pbmMuaAorOworOworOyAtLSBqcGVnbGliLmgKKzsKKyVkZWZpbmUgRENUU0laRSA4CislZGVmaW5lIERDVFNJWkUyIDY0Cis7Cis7IC0tIGptb3JlY2ZnLmgKKzsKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCislZGVmaW5lIEVYVF9SR0JfUkVEIDAKKyVkZWZpbmUgRVhUX1JHQl9HUkVFTiAxCislZGVmaW5lIEVYVF9SR0JfQkxVRSAyCislZGVmaW5lIEVYVF9SR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUgRVhUX1JHQlhfUkVEIDAKKyVkZWZpbmUgRVhUX1JHQlhfR1JFRU4gMQorJWRlZmluZSBFWFRfUkdCWF9CTFVFIDIKKyVkZWZpbmUgRVhUX1JHQlhfUElYRUxTSVpFIDQKKyVkZWZpbmUgRVhUX0JHUl9SRUQgMgorJWRlZmluZSBFWFRfQkdSX0dSRUVOIDEKKyVkZWZpbmUgRVhUX0JHUl9CTFVFIDAKKyVkZWZpbmUgRVhUX0JHUl9QSVhFTFNJWkUgMworJWRlZmluZSBFWFRfQkdSWF9SRUQgMgorJWRlZmluZSBFWFRfQkdSWF9HUkVFTiAxCislZGVmaW5lIEVYVF9CR1JYX0JMVUUgMAorJWRlZmluZSBFWFRfQkdSWF9QSVhFTFNJWkUgNAorJWRlZmluZSBFWFRfWEJHUl9SRUQgMworJWRlZmluZSBFWFRfWEJHUl9HUkVFTiAyCislZGVmaW5lIEVYVF9YQkdSX0JMVUUgMQorJWRlZmluZSBFWFRfWEJHUl9QSVhFTFNJWkUgNAorJWRlZmluZSBFWFRfWFJHQl9SRUQgMQorJWRlZmluZSBFWFRfWFJHQl9HUkVFTiAyCislZGVmaW5lIEVYVF9YUkdCX0JMVUUgMworJWRlZmluZSBFWFRfWFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBSR0JYX0ZJTExFUl8wWEZGIDEKKzsgUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgc2FtcGxlIChwaXhlbCBlbGVtZW50IHZhbHVlKS4KKzsgT24gdGhpcyBTSU1EIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgJ3Vuc2lnbmVkIGNoYXInLgorOworJWRlZmluZSBKU0FNUExFIGJ5dGUgOyB1bnNpZ25lZCBjaGFyCislZGVmaW5lIFNJWkVPRl9KU0FNUExFIFNJWkVPRl9CWVRFIDsgc2l6ZW9mKEpTQU1QTEUpCislZGVmaW5lIENFTlRFUkpTQU1QTEUgMTI4Cis7IFJlcHJlc2VudGF0aW9uIG9mIGEgRENUIGZyZXF1ZW5jeSBjb2VmZmljaWVudC4KKzsgT24gdGhpcyBTSU1EIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgJ3Nob3J0Jy4KKzsKKyVkZWZpbmUgSkNPRUYgd29yZCA7IHNob3J0CislZGVmaW5lIFNJWkVPRl9KQ09FRiBTSVpFT0ZfV09SRCA7IHNpemVvZihKQ09FRikKKzsgRGF0YXR5cGUgdXNlZCBmb3IgaW1hZ2UgZGltZW5zaW9ucy4KKzsgT24gdGhpcyBTSU1EIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgJ3Vuc2lnbmVkIGludCcuCis7CislZGVmaW5lIEpESU1FTlNJT04gZHdvcmQgOyB1bnNpZ25lZCBpbnQKKyVkZWZpbmUgU0laRU9GX0pESU1FTlNJT04gU0laRU9GX0RXT1JEIDsgc2l6ZW9mKEpESU1FTlNJT04pCislZGVmaW5lIEpTQU1QUk9XIFBPSU5URVIgOyBKU0FNUExFICogKGpwZWdsaWIuaCkKKyVkZWZpbmUgSlNBTVBBUlJBWSBQT0lOVEVSIDsgSlNBTVBST1cgKiAoanBlZ2xpYi5oKQorJWRlZmluZSBKU0FNUElNQUdFIFBPSU5URVIgOyBKU0FNUEFSUkFZICogKGpwZWdsaWIuaCkKKyVkZWZpbmUgSkNPRUZQVFIgUE9JTlRFUiA7IEpDT0VGICogKGpwZWdsaWIuaCkKKyVkZWZpbmUgU0laRU9GX0pTQU1QUk9XIFNJWkVPRl9QT0lOVEVSIDsgc2l6ZW9mKEpTQU1QUk9XKQorJWRlZmluZSBTSVpFT0ZfSlNBTVBBUlJBWSBTSVpFT0ZfUE9JTlRFUiA7IHNpemVvZihKU0FNUEFSUkFZKQorJWRlZmluZSBTSVpFT0ZfSlNBTVBJTUFHRSBTSVpFT0ZfUE9JTlRFUiA7IHNpemVvZihKU0FNUElNQUdFKQorJWRlZmluZSBTSVpFT0ZfSkNPRUZQVFIgU0laRU9GX1BPSU5URVIgOyBzaXplb2YoSkNPRUZQVFIpCis7Cis7IC0tIGpkY3QuaAorOworOyBBIGZvcndhcmQgRENUIHJvdXRpbmUgaXMgZ2l2ZW4gYSBwb2ludGVyIHRvIGEgd29yayBhcmVhIG9mIHR5cGUgRENURUxFTVtdOworOyB0aGUgRENUIGlzIHRvIGJlIHBlcmZvcm1lZCBpbi1wbGFjZSBpbiB0aGF0IGJ1ZmZlci4KKzsgVG8gbWF4aW1pemUgcGFyYWxsZWxpc20sIFR5cGUgRENURUxFTSBpcyBjaGFuZ2VkIHRvIHNob3J0IChvcmlnaW5hbGx5LCBpbnQpLgorOworJWRlZmluZSBEQ1RFTEVNIHdvcmQgOyBzaG9ydAorJWRlZmluZSBTSVpFT0ZfRENURUxFTSBTSVpFT0ZfV09SRCA7IHNpemVvZihEQ1RFTEVNKQorJWRlZmluZSBmbG9hdCBGUDMyIDsgZmxvYXQKKyVkZWZpbmUgU0laRU9GX0ZBU1RfRkxPQVQgU0laRU9GX0ZQMzIgOyBzaXplb2YoZmxvYXQpCis7IFRvIG1heGltaXplIHBhcmFsbGVsaXNtLCBUeXBlIHNob3J0IGlzIGNoYW5nZWQgdG8gc2hvcnQuCis7CislZGVmaW5lIElTTE9XX01VTFRfVFlQRSB3b3JkIDsgbXVzdCBiZSBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFIFNJWkVPRl9XT1JEIDsgc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkKKyVkZWZpbmUgSUZBU1RfTVVMVF9UWVBFIHdvcmQgOyBtdXN0IGJlIHNob3J0CislZGVmaW5lIFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUgU0laRU9GX1dPUkQgOyBzaXplb2YoSUZBU1RfTVVMVF9UWVBFKQorJWRlZmluZSBJRkFTVF9TQ0FMRV9CSVRTIDIgOyBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycworJWRlZmluZSBGTE9BVF9NVUxUX1RZUEUgRlAzMiA7IG11c3QgYmUgZmxvYXQKKyVkZWZpbmUgU0laRU9GX0ZMT0FUX01VTFRfVFlQRSBTSVpFT0ZfRlAzMiA7IHNpemVvZihGTE9BVF9NVUxUX1RZUEUpCis7Cis7IC0tIGpzaW1kLmgKKzsKKyVkZWZpbmUgSlNJTURfTk9ORSAweDAwCislZGVmaW5lIEpTSU1EX01NWCAweDAxCislZGVmaW5lIEpTSU1EXzNETk9XIDB4MDIKKyVkZWZpbmUgSlNJTURfU1NFIDB4MDQKKyVkZWZpbmUgSlNJTURfU1NFMiAweDA4CislZGVmaW5lIEpTSU1EX0FWWDIgMHg4MApkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9uYXNtL2pzaW1kY2ZnLmluYy5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9uYXNtL2pzaW1kY2ZnLmluYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjdlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL25hc20vanNpbWRjZmcuaW5jLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8vIFRoaXMgZmlsZSBnZW5lcmF0ZXMgdGhlIGluY2x1ZGUgZmlsZSBmb3IgdGhlIGFzc2VtYmx5CisvLyBpbXBsZW1lbnRhdGlvbnMgYnkgYWJ1c2luZyB0aGUgQyBwcmVwcm9jZXNzb3IuCisvLworLy8gTm90ZTogU29tZSB0aGluZ3MgYXJlIG1hbnVhbGx5IGRlZmluZWQgYXMgdGhleSBuZWVkIHRvCisvLyBiZSBtYXBwZWQgdG8gTkFTTSB0eXBlcy4KKworOworOyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUgZnJvbSBqc2ltZGNmZy5pbmMuaAorOworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisKKyNpbmNsdWRlICIuLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vamNvbmZpZy5oIgorI2luY2x1ZGUgIi4uL2ptb3JlY2ZnLmgiCisjaW5jbHVkZSAianNpbWQuaCIKKworOworOyAtLSBqcGVnbGliLmgKKzsKKworJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRENUU0laRSAgIERDVFNJWkUKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0RDVFNJWkUyICBEQ1RTSVpFMgorCis7Cis7IC0tIGptb3JlY2ZnLmgKKzsKKworJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fUkdCX1JFRCAgICAgICAgICAgICBSR0JfUkVECislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9SR0JfR1JFRU4gICAgICAgICAgIFJHQl9HUkVFTgorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fUkdCX0JMVUUgICAgICAgICAgICBSR0JfQkxVRQorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fUkdCX1BJWEVMU0laRSAgICAgICBSR0JfUElYRUxTSVpFCisKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0VYVF9SR0JfUkVEICAgICAgICAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0VYVF9SR0JfR1JFRU4gICAgICAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1JHQl9CTFVFICAgICAgICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0VYVF9SR0JfUElYRUxTSVpFICAgRVhUX1JHQl9QSVhFTFNJWkUKKworJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1JHQlhfUkVEICAgICAgICBFWFRfUkdCWF9SRUQKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0VYVF9SR0JYX0dSRUVOICAgICAgRVhUX1JHQlhfR1JFRU4KKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0VYVF9SR0JYX0JMVUUgICAgICAgRVhUX1JHQlhfQkxVRQorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1JHQlhfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKworJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX0JHUl9SRUQgICAgICAgICBFWFRfQkdSX1JFRAorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX0JHUl9HUkVFTiAgICAgICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfQkdSX0JMVUUgICAgICAgIEVYVF9CR1JfQkxVRQorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX0JHUl9QSVhFTFNJWkUgICBFWFRfQkdSX1BJWEVMU0laRQorCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfQkdSWF9SRUQgICAgICAgIEVYVF9CR1JYX1JFRAorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX0JHUlhfR1JFRU4gICAgICBFWFRfQkdSWF9HUkVFTgorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX0JHUlhfQkxVRSAgICAgICBFWFRfQkdSWF9CTFVFCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfQkdSWF9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfWEJHUl9SRUQgICAgICAgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1hCR1JfR1JFRU4gICAgICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1hCR1JfQkxVRSAgICAgICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfWEJHUl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfWFJHQl9SRUQgICAgICAgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1hSR0JfR1JFRU4gICAgICBFWFRfWFJHQl9HUkVFTgorJWRlZmluZSBfY3BwX3Byb3RlY3Rpb25fRVhUX1hSR0JfQkxVRSAgICAgICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9FWFRfWFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorCislZGVmaW5lIFJHQlhfRklMTEVSXzBYRkYgIDEKKworOyBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBzYW1wbGUgKHBpeGVsIGVsZW1lbnQgdmFsdWUpLgorOyBPbiB0aGlzIFNJTUQgaW1wbGVtZW50YXRpb24sIHRoaXMgbXVzdCBiZSAndW5zaWduZWQgY2hhcicuCis7CisKKyVkZWZpbmUgSlNBTVBMRSAgICAgICAgICAgIGJ5dGUgICAgICAgICAgICA7IHVuc2lnbmVkIGNoYXIKKyVkZWZpbmUgU0laRU9GX0pTQU1QTEUgICAgIFNJWkVPRl9CWVRFICAgICA7IHNpemVvZihKU0FNUExFKQorCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9DRU5URVJKU0FNUExFICBDRU5URVJKU0FNUExFCisKKzsgUmVwcmVzZW50YXRpb24gb2YgYSBEQ1QgZnJlcXVlbmN5IGNvZWZmaWNpZW50LgorOyBPbiB0aGlzIFNJTUQgaW1wbGVtZW50YXRpb24sIHRoaXMgbXVzdCBiZSAnc2hvcnQnLgorOworJWRlZmluZSBKQ09FRiAgICAgICAgICAgICAgd29yZCAgICAgICAgICAgIDsgc2hvcnQKKyVkZWZpbmUgU0laRU9GX0pDT0VGICAgICAgIFNJWkVPRl9XT1JEICAgICA7IHNpemVvZihKQ09FRikKKworOyBEYXRhdHlwZSB1c2VkIGZvciBpbWFnZSBkaW1lbnNpb25zLgorOyBPbiB0aGlzIFNJTUQgaW1wbGVtZW50YXRpb24sIHRoaXMgbXVzdCBiZSAndW5zaWduZWQgaW50Jy4KKzsKKyVkZWZpbmUgSkRJTUVOU0lPTiAgICAgICAgIGR3b3JkICAgICAgICAgICA7IHVuc2lnbmVkIGludAorJWRlZmluZSBTSVpFT0ZfSkRJTUVOU0lPTiAgU0laRU9GX0RXT1JEICAgIDsgc2l6ZW9mKEpESU1FTlNJT04pCisKKyVkZWZpbmUgSlNBTVBST1cgICAgICAgICAgIFBPSU5URVIgICAgICAgICA7IEpTQU1QTEUgKiAgICAgKGpwZWdsaWIuaCkKKyVkZWZpbmUgSlNBTVBBUlJBWSAgICAgICAgIFBPSU5URVIgICAgICAgICA7IEpTQU1QUk9XICogICAgKGpwZWdsaWIuaCkKKyVkZWZpbmUgSlNBTVBJTUFHRSAgICAgICAgIFBPSU5URVIgICAgICAgICA7IEpTQU1QQVJSQVkgKiAgKGpwZWdsaWIuaCkKKyVkZWZpbmUgSkNPRUZQVFIgICAgICAgICAgIFBPSU5URVIgICAgICAgICA7IEpDT0VGICogICAgICAgKGpwZWdsaWIuaCkKKyVkZWZpbmUgU0laRU9GX0pTQU1QUk9XICAgIFNJWkVPRl9QT0lOVEVSICA7IHNpemVvZihKU0FNUFJPVykKKyVkZWZpbmUgU0laRU9GX0pTQU1QQVJSQVkgIFNJWkVPRl9QT0lOVEVSICA7IHNpemVvZihKU0FNUEFSUkFZKQorJWRlZmluZSBTSVpFT0ZfSlNBTVBJTUFHRSAgU0laRU9GX1BPSU5URVIgIDsgc2l6ZW9mKEpTQU1QSU1BR0UpCislZGVmaW5lIFNJWkVPRl9KQ09FRlBUUiAgICBTSVpFT0ZfUE9JTlRFUiAgOyBzaXplb2YoSkNPRUZQVFIpCisKKzsKKzsgLS0gamRjdC5oCis7CisKKzsgQSBmb3J3YXJkIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byBhIHdvcmsgYXJlYSBvZiB0eXBlIERDVEVMRU1bXTsKKzsgdGhlIERDVCBpcyB0byBiZSBwZXJmb3JtZWQgaW4tcGxhY2UgaW4gdGhhdCBidWZmZXIuCis7IFRvIG1heGltaXplIHBhcmFsbGVsaXNtLCBUeXBlIERDVEVMRU0gaXMgY2hhbmdlZCB0byBzaG9ydCAob3JpZ2luYWxseSwgaW50KS4KKzsKKyVkZWZpbmUgRENURUxFTSAgICAgICAgICAgICAgICAgd29yZCAgICAgICAgIDsgc2hvcnQKKyVkZWZpbmUgU0laRU9GX0RDVEVMRU0gICAgICAgICAgU0laRU9GX1dPUkQgIDsgc2l6ZW9mKERDVEVMRU0pCisKKyVkZWZpbmUgRkFTVF9GTE9BVCAgICAgICAgICAgICAgRlAzMiAgICAgICAgIDsgZmxvYXQKKyVkZWZpbmUgU0laRU9GX0ZBU1RfRkxPQVQgICAgICAgU0laRU9GX0ZQMzIgIDsgc2l6ZW9mKEZBU1RfRkxPQVQpCisKKzsgVG8gbWF4aW1pemUgcGFyYWxsZWxpc20sIFR5cGUgTVVMVElQTElFUiBpcyBjaGFuZ2VkIHRvIHNob3J0LgorOworJWRlZmluZSBJU0xPV19NVUxUX1RZUEUgICAgICAgICB3b3JkICAgICAgICAgOyBtdXN0IGJlIHNob3J0CislZGVmaW5lIFNJWkVPRl9JU0xPV19NVUxUX1RZUEUgIFNJWkVPRl9XT1JEICA7IHNpemVvZihJU0xPV19NVUxUX1RZUEUpCisKKyVkZWZpbmUgSUZBU1RfTVVMVF9UWVBFICAgICAgICAgd29yZCAgICAgICAgIDsgbXVzdCBiZSBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFICBTSVpFT0ZfV09SRCAgOyBzaXplb2YoSUZBU1RfTVVMVF9UWVBFKQorJWRlZmluZSBJRkFTVF9TQ0FMRV9CSVRTICAgICAgICAyICAgICAgICAgICAgOyBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycworCislZGVmaW5lIEZMT0FUX01VTFRfVFlQRSAgICAgICAgIEZQMzIgICAgICAgICA7IG11c3QgYmUgZmxvYXQKKyVkZWZpbmUgU0laRU9GX0ZMT0FUX01VTFRfVFlQRSAgU0laRU9GX0ZQMzIgIDsgc2l6ZW9mKEZMT0FUX01VTFRfVFlQRSkKKworOworOyAtLSBqc2ltZC5oCis7CisKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0pTSU1EX05PTkUgICBKU0lNRF9OT05FCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9KU0lNRF9NTVggICAgSlNJTURfTU1YCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9KU0lNRF8zRE5PVyAgSlNJTURfM0ROT1cKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0pTSU1EX1NTRSAgICBKU0lNRF9TU0UKKyVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uX0pTSU1EX1NTRTIgICBKU0lNRF9TU0UyCislZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl9KU0lNRF9BVlgyICAgSlNJTURfQVZYMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9uYXNtL2pzaW1kZXh0LmluYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qc2ltZGV4dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwOTAxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvbmFzbS9qc2ltZGV4dC5pbmMKQEAgLTAsMCArMSw0NzYgQEAKKzsKKzsganNpbWRleHQuaW5jIC0gY29tbW9uIGRlY2xhcmF0aW9ucworOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTgsIE1hdHRoaWV1IERhcmJvaXMuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkgLSB2ZXJzaW9uIDEuMDIKKzsKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsKKzsgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKzsgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworOyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorOworOyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKzsgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorOyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Cis7Cis7IDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90Cis7ICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCis7ICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorOyAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorOyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorOyAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCis7IDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCis7Cis7IFtUQUI4XQorCis7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis7ICBTeXN0ZW0tZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zCisKKyVpZmRlZiBXSU4zMiAgICA7IC0tLS0obmFzbSAtZndpbjMyIC1EV0lOMzIgLi4uKS0tLS0tLS0tCis7ICogTWljcm9zb2Z0IFZpc3VhbCBDKysKKzsgKiBNaW5HVyAoTWluaW1hbGlzdCBHTlUgZm9yIFdpbmRvd3MpCis7ICogQ3lnV2luCis7ICogTENDLVdpbjMyCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislaWZkZWYgX19ZQVNNX1ZFUl9fCislZGVmaW5lIFNFR19URVhUICAgLnRleHQgIGFsaWduPTMyCislZGVmaW5lIFNFR19DT05TVCAgLnJkYXRhIGFsaWduPTMyCislZWxzZQorJWRlZmluZSBTRUdfVEVYVCAgIC50ZXh0ICBhbGlnbj0zMiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09ERQorJWRlZmluZSBTRUdfQ09OU1QgIC5yZGF0YSBhbGlnbj0zMiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09OU1QKKyVlbmRpZgorCislZWxpZmRlZiBXSU42NCAgOyAtLS0tKG5hc20gLWZ3aW42NCAtRFdJTjY0IC4uLiktLS0tLS0tLQorOyAqIE1pY3Jvc29mdCBWaXN1YWwgQysrCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislaWZkZWYgX19ZQVNNX1ZFUl9fCislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICBhbGlnbj0zMgorJWRlZmluZSBTRUdfQ09OU1QgICAucmRhdGEgYWxpZ249MzIKKyVlbHNlCislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICBhbGlnbj0zMiBwdWJsaWMgdXNlNjQgY2xhc3M9Q09ERQorJWRlZmluZSBTRUdfQ09OU1QgICAucmRhdGEgYWxpZ249MzIgcHVibGljIHVzZTY0IGNsYXNzPUNPTlNUCislZW5kaWYKKyVkZWZpbmUgRVhUTihuYW1lKSAgbmFtZSAgICAgICAgICAgICAgICA7IGZvbygpIC0+IGZvbworCislZWxpZmRlZiBPQkozMiAgOyAtLS0tKG5hc20gLWZvYmogLURPQkozMiAuLi4pLS0tLS0tLS0tLQorOyAqIEJvcmxhbmQgQysrIChXaW4zMikKKworOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KKzsKKyVkZWZpbmUgU0VHX1RFWFQgICBfdGV4dCBhbGlnbj0zMiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09ERQorJWRlZmluZSBTRUdfQ09OU1QgIF9kYXRhIGFsaWduPTMyIHB1YmxpYyB1c2UzMiBjbGFzcz1EQVRBCisKKyVlbGlmZGVmIEVMRiAgICA7IC0tLS0obmFzbSAtZmVsZls2NF0gLURFTEYgLi4uKS0tLS0tLS0tLS0tLQorOyAqIExpbnV4Cis7ICogKkJTRCBmYW1pbHkgVW5peCB1c2luZyBlbGYgZm9ybWF0Cis7ICogVW5peCBTeXN0ZW0gViwgaW5jbHVkaW5nIFNvbGFyaXMgeDg2LCBVbml4V2FyZSBhbmQgU0NPIFVuaXgKKworOyBtYXJrIHN0YWNrIGFzIG5vbi1leGVjdXRhYmxlCitzZWN0aW9uIC5ub3RlLkdOVS1zdGFjayBub2FsbG9jIG5vZXhlYyBub3dyaXRlIHByb2diaXRzCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislaWZkZWYgX194ODZfNjRfXworJWRlZmluZSBTRUdfVEVYVCAgIC50ZXh0ICAgcHJvZ2JpdHMgYWxpZ249MzIKKyVkZWZpbmUgU0VHX0NPTlNUICAucm9kYXRhIHByb2diaXRzIGFsaWduPTMyCislZWxzZQorJWRlZmluZSBTRUdfVEVYVCAgIC50ZXh0ICAgcHJvZ2JpdHMgYWxsb2MgZXhlYyAgIG5vd3JpdGUgYWxpZ249MzIKKyVkZWZpbmUgU0VHX0NPTlNUICAucm9kYXRhIHByb2diaXRzIGFsbG9jIG5vZXhlYyBub3dyaXRlIGFsaWduPTMyCislZW5kaWYKKworOyBUbyBtYWtlIHRoZSBjb2RlIHBvc2l0aW9uLWluZGVwZW5kZW50LCBhcHBlbmQgLURQSUMgdG8gdGhlIGNvbW1hbmRsaW5lCis7CislZGVmaW5lIEdPVF9TWU1CT0wgIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAgOyBFTEYgc3VwcG9ydHMgUElDCislZGVmaW5lIEVYVE4obmFtZSkgIG5hbWUgICAgICAgICAgICAgICAgICAgOyBmb28oKSAtPiBmb28KKworJWVsaWZkZWYgQU9VVCAgIDsgLS0tLShuYXNtIC1mYW91dGIvYW91dCAtREFPVVQgLi4uKS0tLS0KKzsgKiBPbGRlciBMaW51eCB1c2luZyBhLm91dCBmb3JtYXQgIChuYXNtIC1mIGFvdXQgLURBT1VUIC4uLikKKzsgKiAqQlNEIGZhbWlseSBVbml4IHVzaW5nIGEub3V0IGZvcm1hdCAgKG5hc20gLWYgYW91dGIgLURBT1VUIC4uLikKKworOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KKzsKKyVkZWZpbmUgU0VHX1RFWFQgICAudGV4dAorJWRlZmluZSBTRUdfQ09OU1QgIC5kYXRhCisKKzsgVG8gbWFrZSB0aGUgY29kZSBwb3NpdGlvbi1pbmRlcGVuZGVudCwgYXBwZW5kIC1EUElDIHRvIHRoZSBjb21tYW5kbGluZQorOworJWRlZmluZSBHT1RfU1lNQk9MICBfX0dMT0JBTF9PRkZTRVRfVEFCTEVfICA7IEJTRC1zdHlsZSBhLm91dCBzdXBwb3J0cyBQSUMKKworJWVsaWZkZWYgTUFDSE8gIDsgLS0tLShuYXNtIC1mbWFjaG8gLURNQUNITyAuLi4pLS0tLS0tLS0KKzsgKiBOZVhUc3RlcC9PcGVuU3RlcC9SaGFwc29keS9EYXJ3aW4vTWFjT1MgWCAoTWFjaC1PIGZvcm1hdCkKKworOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KKzsKKyVkZWZpbmUgU0VHX1RFWFQgICAudGV4dCAgO2FsaWduPTMyICAgICA7IG5hc20gZG9lc24ndCBhY2NlcHQgYWxpZ249MzIuIHdoeT8KKyVkZWZpbmUgU0VHX0NPTlNUICAucm9kYXRhIGFsaWduPTMyCisKKzsgVGhlIGdlbmVyYXRpb24gb2YgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKSBpcyB0aGUgZGVmYXVsdCBvbiBEYXJ3aW4uCis7CislZGVmaW5lIFBJQworJWRlZmluZSBHT1RfU1lNQk9MICBfTUFDSE9fUElDXyAgICAgICAgIDsgTWFjaC1PIHN0eWxlIGNvZGUtcmVsYXRpdmUgYWRkcmVzc2luZworCislZWxzZSAgICAgICAgICAgOyAtLS0tKE90aGVyIGNhc2UpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IC0tIHNlZ21lbnQgZGVmaW5pdGlvbiAtLQorOworJWRlZmluZSBTRUdfVEVYVCAgIC50ZXh0CislZGVmaW5lIFNFR19DT05TVCAgLmRhdGEKKworJWVuZGlmICAgICAgICAgIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgIENvbW1vbiB0eXBlcworOworJWlmZGVmIF9feDg2XzY0X18KKyVkZWZpbmUgUE9JTlRFUiAgICAgICAgIHF3b3JkICAgICAgICAgICA7IGdlbmVyYWwgcG9pbnRlciB0eXBlCislZGVmaW5lIFNJWkVPRl9QT0lOVEVSICBTSVpFT0ZfUVdPUkQgICAgOyBzaXplb2YoUE9JTlRFUikKKyVkZWZpbmUgUE9JTlRFUl9CSVQgICAgIFFXT1JEX0JJVCAgICAgICA7IHNpemVvZihQT0lOVEVSKSpCWVRFX0JJVAorJWVsc2UKKyVkZWZpbmUgUE9JTlRFUiAgICAgICAgIGR3b3JkICAgICAgICAgICA7IGdlbmVyYWwgcG9pbnRlciB0eXBlCislZGVmaW5lIFNJWkVPRl9QT0lOVEVSICBTSVpFT0ZfRFdPUkQgICAgOyBzaXplb2YoUE9JTlRFUikKKyVkZWZpbmUgUE9JTlRFUl9CSVQgICAgIERXT1JEX0JJVCAgICAgICA7IHNpemVvZihQT0lOVEVSKSpCWVRFX0JJVAorJWVuZGlmCisKKyVkZWZpbmUgSU5UICAgICAgICAgICAgIGR3b3JkICAgICAgICAgICA7IHNpZ25lZCBpbnRlZ2VyIHR5cGUKKyVkZWZpbmUgU0laRU9GX0lOVCAgICAgIFNJWkVPRl9EV09SRCAgICA7IHNpemVvZihJTlQpCislZGVmaW5lIElOVF9CSVQgICAgICAgICBEV09SRF9CSVQgICAgICAgOyBzaXplb2YoSU5UKSpCWVRFX0JJVAorCislZGVmaW5lIEZQMzIgICAgICAgICAgICBkd29yZCAgICAgICAgICAgOyBJRUVFNzU0IHNpbmdsZQorJWRlZmluZSBTSVpFT0ZfRlAzMiAgICAgU0laRU9GX0RXT1JEICAgIDsgc2l6ZW9mKEZQMzIpCislZGVmaW5lIEZQMzJfQklUICAgICAgICBEV09SRF9CSVQgICAgICAgOyBzaXplb2YoRlAzMikqQllURV9CSVQKKworJWRlZmluZSBNTVdPUkQgICAgICAgICAgcXdvcmQgICAgICAgICAgIDsgaW50NjQgIChNTVggcmVnaXN0ZXIpCislZGVmaW5lIFNJWkVPRl9NTVdPUkQgICBTSVpFT0ZfUVdPUkQgICAgOyBzaXplb2YoTU1XT1JEKQorJWRlZmluZSBNTVdPUkRfQklUICAgICAgUVdPUkRfQklUICAgICAgIDsgc2l6ZW9mKE1NV09SRCkqQllURV9CSVQKKworOyBOQVNNIGlzIGJ1Z2d5IGFuZCBkb2Vzbid0IHByb3Blcmx5IGhhbmRsZSBvcGVyYW5kIHNpemVzIGZvciBTU0UKKzsgaW5zdHJ1Y3Rpb25zLCBzbyBmb3Igbm93IHdlIGhhdmUgdG8gZGVmaW5lIFhNTVdPUkQgYXMgYmxhbmsuCislZGVmaW5lIFhNTVdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgOyBpbnQxMjggKFNTRSByZWdpc3RlcikKKyVkZWZpbmUgU0laRU9GX1hNTVdPUkQgIFNJWkVPRl9PV09SRCAgICA7IHNpemVvZihYTU1XT1JEKQorJWRlZmluZSBYTU1XT1JEX0JJVCAgICAgT1dPUkRfQklUICAgICAgIDsgc2l6ZW9mKFhNTVdPUkQpKkJZVEVfQklUCisKKyVkZWZpbmUgWU1NV09SRCAgICAgICAgICAgICAgICAgICAgICAgICA7IGludDI1NiAoQVZYIHJlZ2lzdGVyKQorJWRlZmluZSBTSVpFT0ZfWU1NV09SRCAgU0laRU9GX1lXT1JEICAgIDsgc2l6ZW9mKFlNTVdPUkQpCislZGVmaW5lIFlNTVdPUkRfQklUICAgICBZV09SRF9CSVQgICAgICAgOyBzaXplb2YoWU1NV09SRCkqQllURV9CSVQKKworOyBTaW1pbGFyIGhhY2tzIGZvciB3aGVuIHdlIGxvYWQgYSBkd29yZCBvciBNTVdPUkQgaW50byBhbiB4bW0jIHJlZ2lzdGVyCislZGVmaW5lIFhNTV9EV09SRAorJWRlZmluZSBYTU1fTU1XT1JECisKKyVkZWZpbmUgU0laRU9GX0JZVEUgICAxICAgICAgICAgICAgICAgICA7IHNpemVvZihCWVRFKQorJWRlZmluZSBTSVpFT0ZfV09SRCAgIDIgICAgICAgICAgICAgICAgIDsgc2l6ZW9mKFdPUkQpCislZGVmaW5lIFNJWkVPRl9EV09SRCAgNCAgICAgICAgICAgICAgICAgOyBzaXplb2YoRFdPUkQpCislZGVmaW5lIFNJWkVPRl9RV09SRCAgOCAgICAgICAgICAgICAgICAgOyBzaXplb2YoUVdPUkQpCislZGVmaW5lIFNJWkVPRl9PV09SRCAgMTYgICAgICAgICAgICAgICAgOyBzaXplb2YoT1dPUkQpCislZGVmaW5lIFNJWkVPRl9ZV09SRCAgMzIgICAgICAgICAgICAgICAgOyBzaXplb2YoWVdPUkQpCisKKyVkZWZpbmUgQllURV9CSVQgICAgICA4ICAgICAgICAgICAgICAgICA7IENIQVJfQklUIGluIEMKKyVkZWZpbmUgV09SRF9CSVQgICAgICAxNiAgICAgICAgICAgICAgICA7IHNpemVvZihXT1JEKSpCWVRFX0JJVAorJWRlZmluZSBEV09SRF9CSVQgICAgIDMyICAgICAgICAgICAgICAgIDsgc2l6ZW9mKERXT1JEKSpCWVRFX0JJVAorJWRlZmluZSBRV09SRF9CSVQgICAgIDY0ICAgICAgICAgICAgICAgIDsgc2l6ZW9mKFFXT1JEKSpCWVRFX0JJVAorJWRlZmluZSBPV09SRF9CSVQgICAgIDEyOCAgICAgICAgICAgICAgIDsgc2l6ZW9mKE9XT1JEKSpCWVRFX0JJVAorJWRlZmluZSBZV09SRF9CSVQgICAgIDI1NiAgICAgICAgICAgICAgIDsgc2l6ZW9mKFlXT1JEKSpCWVRFX0JJVAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBFeHRlcm5hbCBTeW1ib2wgTmFtZQorOworJWlmbmRlZiBFWFROCislZGVmaW5lIEVYVE4obmFtZSkgIF8gJSsgbmFtZSAgICAgICAgICAgOyBmb28oKSAtPiBfZm9vCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyAgSGlkZGVuIHN5bWJvbHMKKzsKKyVpZmRlZiBFTEYgICAgICA7IC0tLS0obmFzbSAtZmVsZls2NF0gLURFTEYgLi4uKS0tLS0tLS0tCislZGVmaW5lIEdMT0JBTF9GVU5DVElPTihuYW1lKSAgZ2xvYmFsIEVYVE4obmFtZSk6ZnVuY3Rpb24gaGlkZGVuCislZGVmaW5lIEdMT0JBTF9EQVRBKG5hbWUpICAgICAgZ2xvYmFsIEVYVE4obmFtZSk6ZGF0YSBoaWRkZW4KKyVlbGlmZGVmIE1BQ0hPICA7IC0tLS0obmFzbSAtZm1hY2hvIC1ETUFDSE8gLi4uKS0tLS0tLS0tCislaWZkZWYgX19ZQVNNX1ZFUl9fCislZGVmaW5lIEdMT0JBTF9GVU5DVElPTihuYW1lKSAgZ2xvYmFsIEVYVE4obmFtZSk6cHJpdmF0ZV9leHRlcm4KKyVkZWZpbmUgR0xPQkFMX0RBVEEobmFtZSkgICAgICBnbG9iYWwgRVhUTihuYW1lKTpwcml2YXRlX2V4dGVybgorJWVuZGlmCislZW5kaWYKKworJWlmbmRlZiBHTE9CQUxfRlVOQ1RJT04KKyVkZWZpbmUgR0xPQkFMX0ZVTkNUSU9OKG5hbWUpICBnbG9iYWwgRVhUTihuYW1lKQorJWVuZGlmCislaWZuZGVmIEdMT0JBTF9EQVRBCislZGVmaW5lIEdMT0JBTF9EQVRBKG5hbWUpICAgICAgZ2xvYmFsIEVYVE4obmFtZSkKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBNYWNyb3MgZm9yIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykgc3VwcG9ydAorOworJWlmbmRlZiBHT1RfU1lNQk9MCisldW5kZWYgUElDCislZW5kaWYKKworJWlmZGVmIFBJQyAgOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVpZmlkbiBHT1RfU1lNQk9MLCBfTUFDSE9fUElDXyAgOyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IEF0IHByZXNlbnQsIG5hc20gZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgUElDIGdlbmVyYXRpb24gZm9yIE1hY2gtTy4KKzsgVGhlIFBJQyBzdXBwb3J0IGNvZGUgYmVsb3cgaXMgYSBsaXR0bGUgdHJpY2t5LgorCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCitjb25zdF9iYXNlOgorCislZGVmaW5lIEdPVE9GRihnb3QsIHN5bSkgIChnb3QpICsgKHN5bSkgLSBjb25zdF9iYXNlCisKKyVpbWFjcm8gZ2V0X0dPVCAxCisgICAgOyBOT1RFOiB0aGlzIG1hY3JvIGRlc3Ryb3lzIGVjeCByZXNpc3Rlci4KKyAgICBjYWxsICAgICAgICAlJWdldGVpcAorICAgIGFkZCAgICAgICAgIGVjeCwgYnl0ZSAoJSVyZWYgLSAkKQorICAgIGptcCAgICAgICAgIHNob3J0ICUlYWRqdXN0CislJWdldGVpcDoKKyAgICBtb3YgICAgICAgICBlY3gsIFBPSU5URVIgW2VzcF0KKyAgICByZXQKKyUlYWRqdXN0OgorICAgIHB1c2ggICAgICAgIGVicAorICAgIHhvciAgICAgICAgIGVicCwgZWJwICAgICAgICAgICAgICAgIDsgZWJwID0gMAorJWlmaWRuaSAlMSwgZWJ4ICA7ICglMSA9PSBlYngpCisgICAgOyBkYiAweDhELDB4OUMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KKyAgICA7ICAgbGVhIGVieCwgW2VjeCtlYnAqOCsoY29uc3RfYmFzZS0lJXJlZildIDsgOEQsOUMsRTksKG9mZnNldDMyKQorICAgIGRiICAgICAgICAgIDB4OEQsIDB4OUMgICAgICAgICAgICAgIDsgOEQsOUMKKyAgICBqbXAgICAgICAgICBuZWFyIGNvbnN0X2Jhc2UgICAgICAgICA7IEU5LChjb25zdF9iYXNlLSUlcmVmKQorJSVyZWY6CislZWxzZSAgOyAoJTEgIT0gZWJ4KQorICAgIDsgZGIgMHg4RCwweDhDICsgam1wIG5lYXIgY29uc3RfYmFzZSA9CisgICAgOyAgIGxlYSBlY3gsIFtlY3grZWJwKjgrKGNvbnN0X2Jhc2UtJSVyZWYpXSA7IDhELDhDLEU5LChvZmZzZXQzMikKKyAgICBkYiAgICAgICAgICAweDhELCAweDhDICAgICAgICAgICAgICA7IDhELDhDCisgICAgam1wICAgICAgICAgbmVhciBjb25zdF9iYXNlICAgICAgICAgOyBFOSwoY29uc3RfYmFzZS0lJXJlZikKKyUlcmVmOgorICAgIG1vdiAgICAgICAgICUxLCBlY3gKKyVlbmRpZiAgOyAoJTEgPT0gZWJ4KQorICAgIHBvcCAgICAgICAgIGVicAorJWVuZG1hY3JvCisKKyVlbHNlICAgICA7IEdPVF9TWU1CT0wgIT0gX01BQ0hPX1BJQ18gLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIEdPVE9GRihnb3QsIHN5bSkgIChnb3QpICsgKHN5bSkgd3J0IC4uZ290b2ZmCisKKyVpbWFjcm8gZ2V0X0dPVCAxCisgICAgZXh0ZXJuICAgICAgR09UX1NZTUJPTAorICAgIGNhbGwgICAgICAgICUlZ2V0ZWlwCisgICAgYWRkICAgICAgICAgJTEsIEdPVF9TWU1CT0wgKyAkJCAtICQgd3J0IC4uZ290cGMKKyAgICBqbXAgICAgICAgICBzaG9ydCAlJWRvbmUKKyUlZ2V0ZWlwOgorICAgIG1vdiAgICAgICAgICUxLCBQT0lOVEVSIFtlc3BdCisgICAgcmV0CislJWRvbmU6CislZW5kbWFjcm8KKworJWVuZGlmICAgIDsgR09UX1NZTUJPTCA9PSBfTUFDSE9fUElDXyAtLS0tLS0tLS0tLS0tLS0tCisKKyVpbWFjcm8gcHVzaHBpYyAxLm5vbGlzdAorICAgIHB1c2ggICAgICAgICUxCislZW5kbWFjcm8KKyVpbWFjcm8gcG9wcGljICAxLm5vbGlzdAorICAgIHBvcCAgICAgICAgICUxCislZW5kbWFjcm8KKyVpbWFjcm8gbW92cGljICAyLm5vbGlzdAorICAgIG1vdiAgICAgICAgICUxLCAlMgorJWVuZG1hY3JvCisKKyVlbHNlICAgIDsgIVBJQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIEdPVE9GRihnb3QsIHN5bSkgIChzeW0pCisKKyVpbWFjcm8gZ2V0X0dPVCAxLm5vbGlzdAorJWVuZG1hY3JvCislaW1hY3JvIHB1c2hwaWMgMS5ub2xpc3QKKyVlbmRtYWNybworJWltYWNybyBwb3BwaWMgIDEubm9saXN0CislZW5kbWFjcm8KKyVpbWFjcm8gbW92cGljICAyLm5vbGlzdAorJWVuZG1hY3JvCisKKyVlbmRpZiAgIDsgIFBJQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBBbGlnbiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBvbiB7Miw0LDgsMTYsLi59LWJ5dGUgYm91bmRhcnkuCis7ICAiLmJhbGlnbiBuLCxtIiBpbiBHTlUgYXMKKzsKKyVkZWZpbmUgTVNLTEUoeCwgeSkgICh+KCgoeSkgJiAweEZGRkYpIC0gKCh4KSAmIDB4RkZGRikpID4+IDE2KQorJWRlZmluZSBGSUxMQihiLCBuKSAgKCgkJC0oYikpICYgKChuKS0xKSkKKworJWltYWNybyBhbGlnbnggMS0yLm5vbGlzdCAweEZGRkYKKyUlYnM6IFwKKyAgdGltZXMgTVNLTEUoRklMTEIoJSVicywgJTEpLCAlMikgJiBNU0tMRSgxNiwgRklMTEIoJCwgJTEpKSAmIEZJTExCKCQsICUxKSBcCisgICAgICAgIGRiIDB4OTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm9wCisgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsICUxKSwgJTIpICYgRklMTEIoJCwgJTEpIC8gOSBcCisgICAgICAgIGRiIDB4OEQsIDB4OUMsIDB4MjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgIDsgbGVhIGVieCxbZWJ4KzB4MDAwMDAwMDBdCisgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsICUxKSwgJTIpICYgRklMTEIoJCwgJTEpIC8gNyBcCisgICAgICAgIGRiIDB4OEQsIDB4QUMsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgIDsgbGVhIGVicCxbZWJwKzB4MDAwMDAwMDBdCisgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsICUxKSwgJTIpICYgRklMTEIoJCwgJTEpIC8gNiBcCisgICAgICAgIGRiIDB4OEQsIDB4QUQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgICAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDAwMDAwMDBdCisgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsICUxKSwgJTIpICYgRklMTEIoJCwgJTEpIC8gNCBcCisgICAgICAgIGRiIDB4OEQsIDB4NkMsIDB4MjUsIDB4MDAgICAgICAgICAgICAgICAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDBdCisgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsICUxKSwgJTIpICYgRklMTEIoJCwgJTEpIC8gMyBcCisgICAgICAgIGRiIDB4OEQsIDB4NkQsIDB4MDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDBdCisgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsICUxKSwgJTIpICYgRklMTEIoJCwgJTEpIC8gMiBcCisgICAgICAgIGRiIDB4OEIsIDB4RUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW92IGVicCxlYnAKKyAgdGltZXMgTVNLTEUoRklMTEIoJSVicywgJTEpLCAlMikgJiBGSUxMQigkLCAlMSkgLyAxIFwKKyAgICAgICAgZGIgMHg5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBub3AKKyVlbmRtYWNybworCis7IEFsaWduIHRoZSBuZXh0IGRhdGEgb24gezIsNCw4LDE2LC4ufS1ieXRlIGJvdW5kYXJ5LgorOworJWltYWNybyBhbGlnbnogMS5ub2xpc3QKKyAgICBhbGlnbiAgICAgICAlMSwgZGIgMCAgICAgICAgICAgICAgICA7IGZpbGxpbmcgemVyb3MKKyVlbmRtYWNybworCislaWZkZWYgX194ODZfNjRfXworCislaWZkZWYgV0lONjQKKworJWltYWNybyBjb2xsZWN0X2FyZ3MgMQorICAgIHN1YiAgICAgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtyc3BdLCB4bW02CisgICAgc3ViICAgICAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3JzcF0sIHhtbTcKKyAgICBtb3YgICAgICAgICByMTAsIHJjeAorJWlmICUxID4gMQorICAgIG1vdiAgICAgICAgIHIxMSwgcmR4CislZW5kaWYKKyVpZiAlMSA+IDIKKyAgICBwdXNoICAgICAgICByMTIKKyAgICBtb3YgICAgICAgICByMTIsIHI4CislZW5kaWYKKyVpZiAlMSA+IDMKKyAgICBwdXNoICAgICAgICByMTMKKyAgICBtb3YgICAgICAgICByMTMsIHI5CislZW5kaWYKKyVpZiAlMSA+IDQKKyAgICBwdXNoICAgICAgICByMTQKKyAgICBtb3YgICAgICAgICByMTQsIFtyYXgrNDhdCislZW5kaWYKKyVpZiAlMSA+IDUKKyAgICBwdXNoICAgICAgICByMTUKKyAgICBtb3YgICAgICAgICByMTUsIFtyYXgrNTZdCislZW5kaWYKKyAgICBwdXNoICAgICAgICByc2kKKyAgICBwdXNoICAgICAgICByZGkKKyVlbmRtYWNybworCislaW1hY3JvIHVuY29sbGVjdF9hcmdzIDEKKyAgICBwb3AgICAgICAgICByZGkKKyAgICBwb3AgICAgICAgICByc2kKKyVpZiAlMSA+IDUKKyAgICBwb3AgICAgICAgICByMTUKKyVlbmRpZgorJWlmICUxID4gNAorICAgIHBvcCAgICAgICAgIHIxNAorJWVuZGlmCislaWYgJTEgPiAzCisgICAgcG9wICAgICAgICAgcjEzCislZW5kaWYKKyVpZiAlMSA+IDIKKyAgICBwb3AgICAgICAgICByMTIKKyVlbmRpZgorICAgIG1vdmFwcyAgICAgIHhtbTcsIFhNTVdPUkQgW3JzcF0KKyAgICBhZGQgICAgICAgICByc3AsIFNJWkVPRl9YTU1XT1JECisgICAgbW92YXBzICAgICAgeG1tNiwgWE1NV09SRCBbcnNwXQorICAgIGFkZCAgICAgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKKyVlbmRtYWNybworCislaW1hY3JvIHB1c2hfeG1tIDEKKyAgICBzdWIgICAgICAgICByc3AsICUxICogU0laRU9GX1hNTVdPUkQKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtyc3ArMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTgKKyVpZiAlMSA+IDEKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtyc3ArMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTkKKyVlbmRpZgorJWlmICUxID4gMgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3JzcCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMTAKKyVlbmRpZgorJWlmICUxID4gMworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3JzcCszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMTEKKyVlbmRpZgorJWVuZG1hY3JvCisKKyVpbWFjcm8gcG9wX3htbSAxCisgICAgbW92YXBzICAgICAgeG1tOCwgWE1NV09SRCBbcnNwKzAqU0laRU9GX1hNTVdPUkRdCislaWYgJTEgPiAxCisgICAgbW92YXBzICAgICAgeG1tOSwgWE1NV09SRCBbcnNwKzEqU0laRU9GX1hNTVdPUkRdCislZW5kaWYKKyVpZiAlMSA+IDIKKyAgICBtb3ZhcHMgICAgICB4bW0xMCwgWE1NV09SRCBbcnNwKzIqU0laRU9GX1hNTVdPUkRdCislZW5kaWYKKyVpZiAlMSA+IDMKKyAgICBtb3ZhcHMgICAgICB4bW0xMSwgWE1NV09SRCBbcnNwKzMqU0laRU9GX1hNTVdPUkRdCislZW5kaWYKKyAgICBhZGQgICAgICAgICByc3AsICUxICogU0laRU9GX1hNTVdPUkQKKyVlbmRtYWNybworCislZWxzZQorCislaW1hY3JvIGNvbGxlY3RfYXJncyAxCisgICAgcHVzaCAgICAgICAgcjEwCisgICAgbW92ICAgICAgICAgcjEwLCByZGkKKyVpZiAlMSA+IDEKKyAgICBwdXNoICAgICAgICByMTEKKyAgICBtb3YgICAgICAgICByMTEsIHJzaQorJWVuZGlmCislaWYgJTEgPiAyCisgICAgcHVzaCAgICAgICAgcjEyCisgICAgbW92ICAgICAgICAgcjEyLCByZHgKKyVlbmRpZgorJWlmICUxID4gMworICAgIHB1c2ggICAgICAgIHIxMworICAgIG1vdiAgICAgICAgIHIxMywgcmN4CislZW5kaWYKKyVpZiAlMSA+IDQKKyAgICBwdXNoICAgICAgICByMTQKKyAgICBtb3YgICAgICAgICByMTQsIHI4CislZW5kaWYKKyVpZiAlMSA+IDUKKyAgICBwdXNoICAgICAgICByMTUKKyAgICBtb3YgICAgICAgICByMTUsIHI5CislZW5kaWYKKyVlbmRtYWNybworCislaW1hY3JvIHVuY29sbGVjdF9hcmdzIDEKKyVpZiAlMSA+IDUKKyAgICBwb3AgICAgICAgICByMTUKKyVlbmRpZgorJWlmICUxID4gNAorICAgIHBvcCAgICAgICAgIHIxNAorJWVuZGlmCislaWYgJTEgPiAzCisgICAgcG9wICAgICAgICAgcjEzCislZW5kaWYKKyVpZiAlMSA+IDIKKyAgICBwb3AgICAgICAgICByMTIKKyVlbmRpZgorJWlmICUxID4gMQorICAgIHBvcCAgICAgICAgIHIxMQorJWVuZGlmCisgICAgcG9wICAgICAgICAgcjEwCislZW5kbWFjcm8KKworJWltYWNybyBwdXNoX3htbSAxCislZW5kbWFjcm8KKworJWltYWNybyBwb3BfeG1tIDEKKyVlbmRtYWNybworCislZW5kaWYKKworJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgIERlZmluZXMgcGlja2VkIHVwIGZyb20gdGhlIEMgaGVhZGVycworOworJWluY2x1ZGUgImpzaW1kY2ZnLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjY29sZXh0LWFsdGl2ZWMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY2NvbGV4dC1hbHRpdmVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwZjkwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY2NvbGV4dC1hbHRpdmVjLmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgSmF5IEZvYWQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGpjY29sb3ItYWx0aXZlYy5jICovCisKKwordm9pZCBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYyhKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCit7CisgIEpTQU1QUk9XIGlucHRyLCBvdXRwdHIwLCBvdXRwdHIxLCBvdXRwdHIyOworICBpbnQgcGl0Y2ggPSBpbWdfd2lkdGggKiBSR0JfUElYRUxTSVpFLCBudW1fY29sczsKKyNpZiBfX0JJR19FTkRJQU5fXworICBpbnQgb2Zmc2V0OworI2VuZGlmCisgIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKSB0bXBidWZbUkdCX1BJWEVMU0laRSAqIDE2XTsKKworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJnYjAsIHJnYjEgPSB7IDAgfSwgcmdiMiA9IHsgMCB9LAorICAgIHJnYmcwLCByZ2JnMSwgcmdiZzIsIHJnYmczLCB5LCBjYiwgY3I7CisjaWYgX19CSUdfRU5ESUFOX18gfHwgUkdCX1BJWEVMU0laRSA9PSA0CisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmdiMyA9IHsgMCB9OworI2VuZGlmCisjaWYgX19CSUdfRU5ESUFOX18gJiYgUkdCX1BJWEVMU0laRSA9PSA0CisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmdiNCA9IHsgMCB9OworI2VuZGlmCisgIF9fdmVjdG9yIHNob3J0IHJnMCwgcmcxLCByZzIsIHJnMywgYmcwLCBiZzEsIGJnMiwgYmczOworICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB5bCwgeWgsIGNybCwgY3JoLCBjYmwsIGNiaDsKKyAgX192ZWN0b3IgaW50IHkwLCB5MSwgeTIsIHkzLCBjcjAsIGNyMSwgY3IyLCBjcjMsIGNiMCwgY2IxLCBjYjIsIGNiMzsKKworICAvKiBDb25zdGFudHMgKi8KKyAgX192ZWN0b3Igc2hvcnQgcHdfZjAyOTlfZjAzMzcgPSB7IF9fNFgyKEZfMF8yOTksIEZfMF8zMzcpIH0sCisgICAgcHdfZjAxMTRfZjAyNTAgPSB7IF9fNFgyKEZfMF8xMTQsIEZfMF8yNTApIH0sCisgICAgcHdfbWYwMTZfbWYwMzMgPSB7IF9fNFgyKC1GXzBfMTY4LCAtRl8wXzMzMSkgfSwKKyAgICBwd19tZjAwOF9tZjA0MSA9IHsgX180WDIoLUZfMF8wODEsIC1GXzBfNDE4KSB9OworICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBwd19mMDUwX2YwMDAgPSB7IF9fNFgyKEZfMF81MDAsIDApIH07CisgIF9fdmVjdG9yIGludCBwZF9vbmVoYWxmID0geyBfXzRYKE9ORV9IQUxGKSB9LAorICAgIHBkX29uZWhhbGZtMV9jaiA9IHsgX180WChPTkVfSEFMRiAtIDEgKyAoQ0VOVEVSSlNBTVBMRSA8PCBTQ0FMRUJJVFMpKSB9OworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBiX3plcm8gPSB7IF9fMTZYKDApIH0sCisjaWYgX19CSUdfRU5ESUFOX18KKyAgICBzaGlmdF9wYWNrX2luZGV4ID0KKyAgICAgIHsgIDAsICAxLCAgNCwgIDUsICA4LCAgOSwgMTIsIDEzLCAxNiwgMTcsIDIwLCAyMSwgMjQsIDI1LCAyOCwgMjkgfTsKKyNlbHNlCisgICAgc2hpZnRfcGFja19pbmRleCA9CisgICAgICB7ICAyLCAgMywgIDYsICA3LCAxMCwgMTEsIDE0LCAxNSwgMTgsIDE5LCAyMiwgMjMsIDI2LCAyNywgMzAsIDMxIH07CisjZW5kaWYKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIgPSAqaW5wdXRfYnVmKys7CisgICAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMiA9IG91dHB1dF9idWZbMl1bb3V0cHV0X3Jvd107CisgICAgb3V0cHV0X3JvdysrOworCisgICAgZm9yIChudW1fY29scyA9IHBpdGNoOyBudW1fY29scyA+IDA7CisgICAgICAgICBudW1fY29scyAtPSBSR0JfUElYRUxTSVpFICogMTYsIGlucHRyICs9IFJHQl9QSVhFTFNJWkUgKiAxNiwKKyAgICAgICAgIG91dHB0cjAgKz0gMTYsIG91dHB0cjEgKz0gMTYsIG91dHB0cjIgKz0gMTYpIHsKKworI2lmIF9fQklHX0VORElBTl9fCisgICAgICAvKiBMb2FkIDE2IHBpeGVscyA9PSA0OCBvciA2NCBieXRlcyAqLworICAgICAgb2Zmc2V0ID0gKHNpemVfdClpbnB0ciAmIDE1OworICAgICAgaWYgKG9mZnNldCkgeworICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHVuYWxpZ25lZF9zaGlmdF9pbmRleDsKKyAgICAgICAgaW50IGJ5dGVzID0gbnVtX2NvbHMgKyBvZmZzZXQ7CisKKyAgICAgICAgaWYgKGJ5dGVzIDwgKFJHQl9QSVhFTFNJWkUgKyAxKSAqIDE2ICYmIChieXRlcyAmIDE1KSkgeworICAgICAgICAgIC8qIFNsb3cgcGF0aCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVycmVhZC4gIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0bworICAgICAgICAgICAqIHJlYWQgYSBwYXJ0aWFsIEFsdGlWZWMgcmVnaXN0ZXIsIG92ZXJyZWFkIHdvdWxkIG9jY3VyIG9uIHRoZSBsYXN0CisgICAgICAgICAgICogY2h1bmsgb2YgdGhlIGxhc3QgaW1hZ2Ugcm93IGlmIHRoZSByaWdodCBlZGdlIGlzIG5vdCBvbiBhIDE2LWJ5dGUKKyAgICAgICAgICAgKiBib3VuZGFyeS4gIEl0IGNvdWxkIGFsc28gb2NjdXIgb24gb3RoZXIgcm93cyBpZiB0aGUgYnl0ZXMgcGVyIHJvdworICAgICAgICAgICAqIGlzIGxvdyBlbm91Z2guICBTaW5jZSB3ZSBjYW4ndCBkZXRlcm1pbmUgd2hldGhlciB3ZSdyZSBvbiB0aGUgbGFzdAorICAgICAgICAgICAqIGltYWdlIHJvdywgd2UgaGF2ZSB0byBhc3N1bWUgZXZlcnkgcm93IGlzIHRoZSBsYXN0LgorICAgICAgICAgICAqLworICAgICAgICAgIG1lbWNweSh0bXBidWYsIGlucHRyLCBtaW4obnVtX2NvbHMsIFJHQl9QSVhFTFNJWkUgKiAxNikpOworICAgICAgICAgIHJnYjAgPSB2ZWNfbGQoMCwgdG1wYnVmKTsKKyAgICAgICAgICByZ2IxID0gdmVjX2xkKDE2LCB0bXBidWYpOworICAgICAgICAgIHJnYjIgPSB2ZWNfbGQoMzIsIHRtcGJ1Zik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgcmdiMyA9IHZlY19sZCg0OCwgdG1wYnVmKTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgIHJnYjAgPSB2ZWNfbGQoMCwgaW5wdHIpOworICAgICAgICAgIGlmIChieXRlcyA+IDE2KQorICAgICAgICAgICAgcmdiMSA9IHZlY19sZCgxNiwgaW5wdHIpOworICAgICAgICAgIGlmIChieXRlcyA+IDMyKQorICAgICAgICAgICAgcmdiMiA9IHZlY19sZCgzMiwgaW5wdHIpOworICAgICAgICAgIGlmIChieXRlcyA+IDQ4KQorICAgICAgICAgICAgcmdiMyA9IHZlY19sZCg0OCwgaW5wdHIpOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgICAgIGlmIChieXRlcyA+IDY0KQorICAgICAgICAgICAgcmdiNCA9IHZlY19sZCg2NCwgaW5wdHIpOworI2VuZGlmCisgICAgICAgICAgdW5hbGlnbmVkX3NoaWZ0X2luZGV4ID0gdmVjX2x2c2woMCwgaW5wdHIpOworICAgICAgICAgIHJnYjAgPSB2ZWNfcGVybShyZ2IwLCByZ2IxLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworICAgICAgICAgIHJnYjEgPSB2ZWNfcGVybShyZ2IxLCByZ2IyLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworICAgICAgICAgIHJnYjIgPSB2ZWNfcGVybShyZ2IyLCByZ2IzLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgICAgIHJnYjMgPSB2ZWNfcGVybShyZ2IzLCByZ2I0LCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisjZW5kaWYgLyogX19CSUdfRU5ESUFOX18gKi8KKyAgICAgICAgaWYgKG51bV9jb2xzIDwgUkdCX1BJWEVMU0laRSAqIDE2ICYmIChudW1fY29scyAmIDE1KSkgeworICAgICAgICAgIC8qIFNsb3cgcGF0aCAqLworICAgICAgICAgIG1lbWNweSh0bXBidWYsIGlucHRyLCBtaW4obnVtX2NvbHMsIFJHQl9QSVhFTFNJWkUgKiAxNikpOworICAgICAgICAgIHJnYjAgPSBWRUNfTEQoMCwgdG1wYnVmKTsKKyAgICAgICAgICByZ2IxID0gVkVDX0xEKDE2LCB0bXBidWYpOworICAgICAgICAgIHJnYjIgPSBWRUNfTEQoMzIsIHRtcGJ1Zik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgcmdiMyA9IFZFQ19MRCg0OCwgdG1wYnVmKTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgIHJnYjAgPSBWRUNfTEQoMCwgaW5wdHIpOworICAgICAgICAgIGlmIChudW1fY29scyA+IDE2KQorICAgICAgICAgICAgcmdiMSA9IFZFQ19MRCgxNiwgaW5wdHIpOworICAgICAgICAgIGlmIChudW1fY29scyA+IDMyKQorICAgICAgICAgICAgcmdiMiA9IFZFQ19MRCgzMiwgaW5wdHIpOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgICAgIGlmIChudW1fY29scyA+IDQ4KQorICAgICAgICAgICAgcmdiMyA9IFZFQ19MRCg0OCwgaW5wdHIpOworI2VuZGlmCisgICAgICAgIH0KKyNpZiBfX0JJR19FTkRJQU5fXworICAgICAgfQorI2VuZGlmCisKKyNpZiBSR0JfUElYRUxTSVpFID09IDMKKyAgICAgIC8qIHJnYjAgPSBSMCBHMCBCMCBSMSBHMSBCMSBSMiBHMiBCMiBSMyBHMyBCMyBSNCBHNCBCNCBSNQorICAgICAgICogcmdiMSA9IEc1IEI1IFI2IEc2IEI2IFI3IEc3IEI3IFI4IEc4IEI4IFI5IEc5IEI5IFJhIEdhCisgICAgICAgKiByZ2IyID0gQmEgUmIgR2IgQmIgUmMgR2MgQmMgUmQgR2QgQmQgUmUgR2UgQmUgUmYgR2YgQmYKKyAgICAgICAqCisgICAgICAgKiByZ2JnMCA9IFIwIEcwIFIxIEcxIFIyIEcyIFIzIEczIEIwIEcwIEIxIEcxIEIyIEcyIEIzIEczCisgICAgICAgKiByZ2JnMSA9IFI0IEc0IFI1IEc1IFI2IEc2IFI3IEc3IEI0IEc0IEI1IEc1IEI2IEc2IEI3IEc3CisgICAgICAgKiByZ2JnMiA9IFI4IEc4IFI5IEc5IFJhIEdhIFJiIEdiIEI4IEc4IEI5IEc5IEJhIEdhIEJiIEdiCisgICAgICAgKiByZ2JnMyA9IFJjIEdjIFJkIEdkIFJlIEdlIFJmIEdmIEJjIEdjIEJkIEdkIEJlIEdlIEJmIEdmCisgICAgICAgKi8KKyAgICAgIHJnYmcwID0gdmVjX3Blcm0ocmdiMCwgcmdiMCwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCR19JTkRFWDApOworICAgICAgcmdiZzEgPSB2ZWNfcGVybShyZ2IwLCByZ2IxLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JHX0lOREVYMSk7CisgICAgICByZ2JnMiA9IHZlY19wZXJtKHJnYjEsIHJnYjIsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQkdfSU5ERVgyKTsKKyAgICAgIHJnYmczID0gdmVjX3Blcm0ocmdiMiwgcmdiMiwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCR19JTkRFWDMpOworI2Vsc2UKKyAgICAgIC8qIHJnYjAgPSBSMCBHMCBCMCBYMCBSMSBHMSBCMSBYMSBSMiBHMiBCMiBYMiBSMyBHMyBCMyBYMworICAgICAgICogcmdiMSA9IFI0IEc0IEI0IFg0IFI1IEc1IEI1IFg1IFI2IEc2IEI2IFg2IFI3IEc3IEI3IFg3CisgICAgICAgKiByZ2IyID0gUjggRzggQjggWDggUjkgRzkgQjkgWDkgUmEgR2EgQmEgWGEgUmIgR2IgQmIgWGIKKyAgICAgICAqIHJnYjMgPSBSYyBHYyBCYyBYYyBSZCBHZCBCZCBYZCBSZSBHZSBCZSBYZSBSZiBHZiBCZiBYZgorICAgICAgICoKKyAgICAgICAqIHJnYmcwID0gUjAgRzAgUjEgRzEgUjIgRzIgUjMgRzMgQjAgRzAgQjEgRzEgQjIgRzIgQjMgRzMKKyAgICAgICAqIHJnYmcxID0gUjQgRzQgUjUgRzUgUjYgRzYgUjcgRzcgQjQgRzQgQjUgRzUgQjYgRzYgQjcgRzcKKyAgICAgICAqIHJnYmcyID0gUjggRzggUjkgRzkgUmEgR2EgUmIgR2IgQjggRzggQjkgRzkgQmEgR2EgQmIgR2IKKyAgICAgICAqIHJnYmczID0gUmMgR2MgUmQgR2QgUmUgR2UgUmYgR2YgQmMgR2MgQmQgR2QgQmUgR2UgQmYgR2YKKyAgICAgICAqLworICAgICAgcmdiZzAgPSB2ZWNfcGVybShyZ2IwLCByZ2IwLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JHX0lOREVYKTsKKyAgICAgIHJnYmcxID0gdmVjX3Blcm0ocmdiMSwgcmdiMSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCR19JTkRFWCk7CisgICAgICByZ2JnMiA9IHZlY19wZXJtKHJnYjIsIHJnYjIsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQkdfSU5ERVgpOworICAgICAgcmdiZzMgPSB2ZWNfcGVybShyZ2IzLCByZ2IzLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JHX0lOREVYKTsKKyNlbmRpZgorCisgICAgICAvKiByZzAgPSBSMCBHMCBSMSBHMSBSMiBHMiBSMyBHMworICAgICAgICogYmcwID0gQjAgRzAgQjEgRzEgQjIgRzIgQjMgRzMKKyAgICAgICAqIC4uLgorICAgICAgICoKKyAgICAgICAqIE5PVEU6IFdlIGhhdmUgdG8gdXNlIHZlY19tZXJnZSooKSBoZXJlIGJlY2F1c2UgdmVjX3VucGFjayooKSBkb2Vzbid0CisgICAgICAgKiBzdXBwb3J0IHVuc2lnbmVkIHZlY3RvcnMuCisgICAgICAgKi8KKyAgICAgIHJnMCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmcwKTsKKyAgICAgIGJnMCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmcwKTsKKyAgICAgIHJnMSA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmcxKTsKKyAgICAgIGJnMSA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmcxKTsKKyAgICAgIHJnMiA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmcyKTsKKyAgICAgIGJnMiA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmcyKTsKKyAgICAgIHJnMyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmczKTsKKyAgICAgIGJnMyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmczKTsKKworICAgICAgLyogKE9yaWdpbmFsKQorICAgICAgICogWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgICAgKiBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgICAgKiBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgICAgKgorICAgICAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgKiBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworICAgICAgICogQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgICAgICogQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgICAgICovCisKKyAgICAgIC8qIENhbGN1bGF0ZSBZIHZhbHVlcyAqLworCisgICAgICB5MCA9IHZlY19tc3VtcyhyZzAsIHB3X2YwMjk5X2YwMzM3LCBwZF9vbmVoYWxmKTsKKyAgICAgIHkxID0gdmVjX21zdW1zKHJnMSwgcHdfZjAyOTlfZjAzMzcsIHBkX29uZWhhbGYpOworICAgICAgeTIgPSB2ZWNfbXN1bXMocmcyLCBwd19mMDI5OV9mMDMzNywgcGRfb25laGFsZik7CisgICAgICB5MyA9IHZlY19tc3VtcyhyZzMsIHB3X2YwMjk5X2YwMzM3LCBwZF9vbmVoYWxmKTsKKyAgICAgIHkwID0gdmVjX21zdW1zKGJnMCwgcHdfZjAxMTRfZjAyNTAsIHkwKTsKKyAgICAgIHkxID0gdmVjX21zdW1zKGJnMSwgcHdfZjAxMTRfZjAyNTAsIHkxKTsKKyAgICAgIHkyID0gdmVjX21zdW1zKGJnMiwgcHdfZjAxMTRfZjAyNTAsIHkyKTsKKyAgICAgIHkzID0gdmVjX21zdW1zKGJnMywgcHdfZjAxMTRfZjAyNTAsIHkzKTsKKyAgICAgIC8qIENsZXZlciB3YXkgdG8gYXZvaWQgNCBzaGlmdHMgKyAyIHBhY2tzLiAgVGhpcyBwYWNrcyB0aGUgaGlnaCB3b3JkIGZyb20KKyAgICAgICAqIGVhY2ggZHdvcmQgaW50byBhIG5ldyAxNi1iaXQgdmVjdG9yLCB3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZgorICAgICAgICogZGVzY2FsaW5nIHRoZSAzMi1iaXQgcmVzdWx0cyAocmlnaHQtc2hpZnRpbmcgYnkgMTYgYml0cykgYW5kIHRoZW4KKyAgICAgICAqIHBhY2tpbmcgdGhlbS4KKyAgICAgICAqLworICAgICAgeWwgPSB2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpeTAsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl5MSwKKyAgICAgICAgICAgICAgICAgICAgc2hpZnRfcGFja19pbmRleCk7CisgICAgICB5aCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl5MiwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXkzLAorICAgICAgICAgICAgICAgICAgICBzaGlmdF9wYWNrX2luZGV4KTsKKyAgICAgIHkgPSB2ZWNfcGFjayh5bCwgeWgpOworICAgICAgdmVjX3N0KHksIDAsIG91dHB0cjApOworCisgICAgICAvKiBDYWxjdWxhdGUgQ2IgdmFsdWVzICovCisgICAgICBjYjAgPSB2ZWNfbXN1bXMocmcwLCBwd19tZjAxNl9tZjAzMywgcGRfb25laGFsZm0xX2NqKTsKKyAgICAgIGNiMSA9IHZlY19tc3VtcyhyZzEsIHB3X21mMDE2X21mMDMzLCBwZF9vbmVoYWxmbTFfY2opOworICAgICAgY2IyID0gdmVjX21zdW1zKHJnMiwgcHdfbWYwMTZfbWYwMzMsIHBkX29uZWhhbGZtMV9jaik7CisgICAgICBjYjMgPSB2ZWNfbXN1bXMocmczLCBwd19tZjAxNl9tZjAzMywgcGRfb25laGFsZm0xX2NqKTsKKyAgICAgIGNiMCA9IChfX3ZlY3RvciBpbnQpdmVjX21zdW0oKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWJnMCwgcHdfZjA1MF9mMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgaW50KWNiMCk7CisgICAgICBjYjEgPSAoX192ZWN0b3IgaW50KXZlY19tc3VtKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCliZzEsIHB3X2YwNTBfZjAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGludCljYjEpOworICAgICAgY2IyID0gKF9fdmVjdG9yIGludCl2ZWNfbXN1bSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpYmcyLCBwd19mMDUwX2YwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpY2IyKTsKKyAgICAgIGNiMyA9IChfX3ZlY3RvciBpbnQpdmVjX21zdW0oKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWJnMywgcHdfZjA1MF9mMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgaW50KWNiMyk7CisgICAgICBjYmwgPSB2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpY2IwLAorICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWNiMSwgc2hpZnRfcGFja19pbmRleCk7CisgICAgICBjYmggPSB2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpY2IyLAorICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWNiMywgc2hpZnRfcGFja19pbmRleCk7CisgICAgICBjYiA9IHZlY19wYWNrKGNibCwgY2JoKTsKKyAgICAgIHZlY19zdChjYiwgMCwgb3V0cHRyMSk7CisKKyAgICAgIC8qIENhbGN1bGF0ZSBDciB2YWx1ZXMgKi8KKyAgICAgIGNyMCA9IHZlY19tc3VtcyhiZzAsIHB3X21mMDA4X21mMDQxLCBwZF9vbmVoYWxmbTFfY2opOworICAgICAgY3IxID0gdmVjX21zdW1zKGJnMSwgcHdfbWYwMDhfbWYwNDEsIHBkX29uZWhhbGZtMV9jaik7CisgICAgICBjcjIgPSB2ZWNfbXN1bXMoYmcyLCBwd19tZjAwOF9tZjA0MSwgcGRfb25laGFsZm0xX2NqKTsKKyAgICAgIGNyMyA9IHZlY19tc3VtcyhiZzMsIHB3X21mMDA4X21mMDQxLCBwZF9vbmVoYWxmbTFfY2opOworICAgICAgY3IwID0gKF9fdmVjdG9yIGludCl2ZWNfbXN1bSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpcmcwLCBwd19mMDUwX2YwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpY3IwKTsKKyAgICAgIGNyMSA9IChfX3ZlY3RvciBpbnQpdmVjX21zdW0oKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXJnMSwgcHdfZjA1MF9mMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgaW50KWNyMSk7CisgICAgICBjcjIgPSAoX192ZWN0b3IgaW50KXZlY19tc3VtKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClyZzIsIHB3X2YwNTBfZjAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGludCljcjIpOworICAgICAgY3IzID0gKF9fdmVjdG9yIGludCl2ZWNfbXN1bSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpcmczLCBwd19mMDUwX2YwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpY3IzKTsKKyAgICAgIGNybCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCljcjAsCisgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpY3IxLCBzaGlmdF9wYWNrX2luZGV4KTsKKyAgICAgIGNyaCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCljcjIsCisgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpY3IzLCBzaGlmdF9wYWNrX2luZGV4KTsKKyAgICAgIGNyID0gdmVjX3BhY2soY3JsLCBjcmgpOworICAgICAgdmVjX3N0KGNyLCAwLCBvdXRwdHIyKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY2NvbG9yLWFsdGl2ZWMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY2NvbG9yLWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjcwZGJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjY29sb3ItYWx0aXZlYy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQWx0aVZlYyBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogUkdCIC0tPiBZQ0MgQ09OVkVSU0lPTiAqLworCisjaW5jbHVkZSAianNpbWRfYWx0aXZlYy5oIgorCisKKyNkZWZpbmUgRl8wXzA4MSAgNTMyOSAgICAgICAgICAgICAgICAgLyogRklYKDAuMDgxMzEpICovCisjZGVmaW5lIEZfMF8xMTQgIDc0NzEgICAgICAgICAgICAgICAgIC8qIEZJWCgwLjExNDAwKSAqLworI2RlZmluZSBGXzBfMTY4ICAxMTA1OSAgICAgICAgICAgICAgICAvKiBGSVgoMC4xNjg3NCkgKi8KKyNkZWZpbmUgRl8wXzI1MCAgMTYzODQgICAgICAgICAgICAgICAgLyogRklYKDAuMjUwMDApICovCisjZGVmaW5lIEZfMF8yOTkgIDE5NTk1ICAgICAgICAgICAgICAgIC8qIEZJWCgwLjI5OTAwKSAqLworI2RlZmluZSBGXzBfMzMxICAyMTcwOSAgICAgICAgICAgICAgICAvKiBGSVgoMC4zMzEyNikgKi8KKyNkZWZpbmUgRl8wXzQxOCAgMjc0MzkgICAgICAgICAgICAgICAgLyogRklYKDAuNDE4NjkpICovCisjZGVmaW5lIEZfMF81MDAgIDMyNzY4ICAgICAgICAgICAgICAgIC8qIEZJWCgwLjUwMDAwKSAqLworI2RlZmluZSBGXzBfNTg3ICAzODQ3MCAgICAgICAgICAgICAgICAvKiBGSVgoMC41ODcwMCkgKi8KKyNkZWZpbmUgRl8wXzMzNyAgKEZfMF81ODcgLSBGXzBfMjUwKSAgLyogRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApICovCisKKyNkZWZpbmUgU0NBTEVCSVRTICAxNgorI2RlZmluZSBPTkVfSEFMRiAgKDEgPDwgKFNDQUxFQklUUyAtIDEpKQorCisKKyNkZWZpbmUgUkdCR19JTkRFWDAgXAorICB7ICAwLCAgMSwgIDMsICA0LCAgNiwgIDcsICA5LCAxMCwgIDIsICAxLCAgNSwgIDQsICA4LCAgNywgMTEsIDEwIH0KKyNkZWZpbmUgUkdCR19JTkRFWDEgXAorICB7IDEyLCAxMywgMTUsIDE2LCAxOCwgMTksIDIxLCAyMiwgMTQsIDEzLCAxNywgMTYsIDIwLCAxOSwgMjMsIDIyIH0KKyNkZWZpbmUgUkdCR19JTkRFWDIgXAorICB7ICA4LCAgOSwgMTEsIDEyLCAxNCwgMTUsIDE3LCAxOCwgMTAsICA5LCAxMywgMTIsIDE2LCAxNSwgMTksIDE4IH0KKyNkZWZpbmUgUkdCR19JTkRFWDMgXAorICB7ICA0LCAgNSwgIDcsICA4LCAxMCwgMTEsIDEzLCAxNCwgIDYsICA1LCAgOSwgIDgsIDEyLCAxMSwgMTUsIDE0IH0KKyNpbmNsdWRlICJqY2NvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjICBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpjY29sZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCR19JTkRFWDAKKyN1bmRlZiBSR0JHX0lOREVYMQorI3VuZGVmIFJHQkdfSU5ERVgyCisjdW5kZWYgUkdCR19JTkRFWDMKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMCwgIDEsICA0LCAgNSwgIDgsICA5LCAxMiwgMTMsICAyLCAgMSwgIDYsICA1LCAxMCwgIDksIDE0LCAxMyB9CisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjICBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X2FsdGl2ZWMKKyNpbmNsdWRlICJqY2NvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQkdfSU5ERVgKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCisjZGVmaW5lIFJHQkdfSU5ERVgwIFwKKyAgeyAgMiwgIDEsICA1LCAgNCwgIDgsICA3LCAxMSwgMTAsICAwLCAgMSwgIDMsICA0LCAgNiwgIDcsICA5LCAxMCB9CisjZGVmaW5lIFJHQkdfSU5ERVgxIFwKKyAgeyAxNCwgMTMsIDE3LCAxNiwgMjAsIDE5LCAyMywgMjIsIDEyLCAxMywgMTUsIDE2LCAxOCwgMTksIDIxLCAyMiB9CisjZGVmaW5lIFJHQkdfSU5ERVgyIFwKKyAgeyAxMCwgIDksIDEzLCAxMiwgMTYsIDE1LCAxOSwgMTgsICA4LCAgOSwgMTEsIDEyLCAxNCwgMTUsIDE3LCAxOCB9CisjZGVmaW5lIFJHQkdfSU5ERVgzIFwKKyAgeyAgNiwgIDUsICA5LCAgOCwgMTIsIDExLCAxNSwgMTQsICA0LCAgNSwgIDcsICA4LCAxMCwgMTEsIDEzLCAxNCB9CisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjICBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpjY29sZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCR19JTkRFWDAKKyN1bmRlZiBSR0JHX0lOREVYMQorI3VuZGVmIFJHQkdfSU5ERVgyCisjdW5kZWYgUkdCR19JTkRFWDMKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMiwgIDEsICA2LCAgNSwgMTAsICA5LCAxNCwgMTMsICAwLCAgMSwgIDQsICA1LCAgOCwgIDksIDEyLCAxMyB9CisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjICBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X2FsdGl2ZWMKKyNpbmNsdWRlICJqY2NvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQkdfSU5ERVgKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMywgIDIsICA3LCAgNiwgMTEsIDEwLCAxNSwgMTQsICAxLCAgMiwgIDUsICA2LCAgOSwgMTAsIDEzLCAxNCB9CisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjICBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X2FsdGl2ZWMKKyNpbmNsdWRlICJqY2NvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQkdfSU5ERVgKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMSwgIDIsICA1LCAgNiwgIDksIDEwLCAxMywgMTQsICAzLCAgMiwgIDcsICA2LCAxMSwgMTAsIDE1LCAxNCB9CisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjICBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X2FsdGl2ZWMKKyNpbmNsdWRlICJqY2NvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQkdfSU5ERVgKKyN1bmRlZiBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYWx0aXZlYwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjZ3JheS1hbHRpdmVjLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamNncmF5LWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFhN2U3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjZ3JheS1hbHRpdmVjLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisvKiBSR0IgLS0+IEdSQVlTQ0FMRSBDT05WRVJTSU9OICovCisKKyNpbmNsdWRlICJqc2ltZF9hbHRpdmVjLmgiCisKKworI2RlZmluZSBGXzBfMTE0ICA3NDcxICAgICAgICAgICAgICAgICAvKiBGSVgoMC4xMTQwMCkgKi8KKyNkZWZpbmUgRl8wXzI1MCAgMTYzODQgICAgICAgICAgICAgICAgLyogRklYKDAuMjUwMDApICovCisjZGVmaW5lIEZfMF8yOTkgIDE5NTk1ICAgICAgICAgICAgICAgIC8qIEZJWCgwLjI5OTAwKSAqLworI2RlZmluZSBGXzBfNTg3ICAzODQ3MCAgICAgICAgICAgICAgICAvKiBGSVgoMC41ODcwMCkgKi8KKyNkZWZpbmUgRl8wXzMzNyAgKEZfMF81ODcgLSBGXzBfMjUwKSAgLyogRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApICovCisKKyNkZWZpbmUgU0NBTEVCSVRTICAxNgorI2RlZmluZSBPTkVfSEFMRiAgKDEgPDwgKFNDQUxFQklUUyAtIDEpKQorCisKKyNkZWZpbmUgUkdCR19JTkRFWDAgXAorICB7ICAwLCAgMSwgIDMsICA0LCAgNiwgIDcsICA5LCAxMCwgIDIsICAxLCAgNSwgIDQsICA4LCAgNywgMTEsIDEwIH0KKyNkZWZpbmUgUkdCR19JTkRFWDEgXAorICB7IDEyLCAxMywgMTUsIDE2LCAxOCwgMTksIDIxLCAyMiwgMTQsIDEzLCAxNywgMTYsIDIwLCAxOSwgMjMsIDIyIH0KKyNkZWZpbmUgUkdCR19JTkRFWDIgXAorICB7ICA4LCAgOSwgMTEsIDEyLCAxNCwgMTUsIDE3LCAxOCwgMTAsICA5LCAxMywgMTIsIDE2LCAxNSwgMTksIDE4IH0KKyNkZWZpbmUgUkdCR19JTkRFWDMgXAorICB7ICA0LCAgNSwgIDcsICA4LCAxMCwgMTEsIDEzLCAxNCwgIDYsICA1LCAgOSwgIDgsIDEyLCAxMSwgMTUsIDE0IH0KKyNpbmNsdWRlICJqY2dyeWV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyAganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9hbHRpdmVjCisjaW5jbHVkZSAiamNncnlleHQtYWx0aXZlYy5jIgorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBSR0JHX0lOREVYMAorI3VuZGVmIFJHQkdfSU5ERVgxCisjdW5kZWYgUkdCR19JTkRFWDIKKyN1bmRlZiBSR0JHX0lOREVYMworI3VuZGVmIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMCwgIDEsICA0LCAgNSwgIDgsICA5LCAxMiwgMTMsICAyLCAgMSwgIDYsICA1LCAxMCwgIDksIDE0LCAxMyB9CisjZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyAganNpbWRfZXh0cmdieF9ncmF5X2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpjZ3J5ZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCR19JTkRFWAorI3VuZGVmIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCisjZGVmaW5lIFJHQkdfSU5ERVgwIFwKKyAgeyAgMiwgIDEsICA1LCAgNCwgIDgsICA3LCAxMSwgMTAsICAwLCAgMSwgIDMsICA0LCAgNiwgIDcsICA5LCAxMCB9CisjZGVmaW5lIFJHQkdfSU5ERVgxIFwKKyAgeyAxNCwgMTMsIDE3LCAxNiwgMjAsIDE5LCAyMywgMjIsIDEyLCAxMywgMTUsIDE2LCAxOCwgMTksIDIxLCAyMiB9CisjZGVmaW5lIFJHQkdfSU5ERVgyIFwKKyAgeyAxMCwgIDksIDEzLCAxMiwgMTYsIDE1LCAxOSwgMTgsICA4LCAgOSwgMTEsIDEyLCAxNCwgMTUsIDE3LCAxOCB9CisjZGVmaW5lIFJHQkdfSU5ERVgzIFwKKyAgeyAgNiwgIDUsICA5LCAgOCwgMTIsIDExLCAxNSwgMTQsICA0LCAgNSwgIDcsICA4LCAxMCwgMTEsIDEzLCAxNCB9CisjZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyAganNpbWRfZXh0YmdyX2dyYXlfY29udmVydF9hbHRpdmVjCisjaW5jbHVkZSAiamNncnlleHQtYWx0aXZlYy5jIgorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBSR0JHX0lOREVYMAorI3VuZGVmIFJHQkdfSU5ERVgxCisjdW5kZWYgUkdCR19JTkRFWDIKKyN1bmRlZiBSR0JHX0lOREVYMworI3VuZGVmIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMiwgIDEsICA2LCAgNSwgMTAsICA5LCAxNCwgMTMsICAwLCAgMSwgIDQsICA1LCAgOCwgIDksIDEyLCAxMyB9CisjZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyAganNpbWRfZXh0YmdyeF9ncmF5X2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpjZ3J5ZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCR19JTkRFWAorI3VuZGVmIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMywgIDIsICA3LCAgNiwgMTEsIDEwLCAxNSwgMTQsICAxLCAgMiwgIDUsICA2LCAgOSwgMTAsIDEzLCAxNCB9CisjZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyAganNpbWRfZXh0eGJncl9ncmF5X2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpjZ3J5ZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCR19JTkRFWAorI3VuZGVmIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorI2RlZmluZSBSR0JHX0lOREVYIFwKKyAgeyAgMSwgIDIsICA1LCAgNiwgIDksIDEwLCAxMywgMTQsICAzLCAgMiwgIDcsICA2LCAxMSwgMTAsIDE1LCAxNCB9CisjZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyAganNpbWRfZXh0eHJnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpjZ3J5ZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCR19JTkRFWAorI3VuZGVmIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjZ3J5ZXh0LWFsdGl2ZWMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY2dyeWV4dC1hbHRpdmVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4MGNiYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY2dyeWV4dC1hbHRpdmVjLmMKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgSmF5IEZvYWQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGpjZ3JheS1hbHRpdmVjLmMgKi8KKworCit2b2lkIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYyhKRElNRU5TSU9OIGltZ193aWR0aCwgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKK3sKKyAgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgaW50IHBpdGNoID0gaW1nX3dpZHRoICogUkdCX1BJWEVMU0laRSwgbnVtX2NvbHM7CisjaWYgX19CSUdfRU5ESUFOX18KKyAgaW50IG9mZnNldDsKKyAgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpIHRtcGJ1ZltSR0JfUElYRUxTSVpFICogMTZdOworI2VuZGlmCisKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2IwLCByZ2IxID0geyAwIH0sIHJnYjIgPSB7IDAgfSwKKyAgICByZ2JnMCwgcmdiZzEsIHJnYmcyLCByZ2JnMywgeTsKKyNpZiBfX0JJR19FTkRJQU5fXyB8fCBSR0JfUElYRUxTSVpFID09IDQKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2IzID0geyAwIH07CisjZW5kaWYKKyNpZiBfX0JJR19FTkRJQU5fXyAmJiBSR0JfUElYRUxTSVpFID09IDQKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2I0ID0geyAwIH07CisjZW5kaWYKKyAgX192ZWN0b3Igc2hvcnQgcmcwLCByZzEsIHJnMiwgcmczLCBiZzAsIGJnMSwgYmcyLCBiZzM7CisgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHlsLCB5aDsKKyAgX192ZWN0b3IgaW50IHkwLCB5MSwgeTIsIHkzOworCisgIC8qIENvbnN0YW50cyAqLworICBfX3ZlY3RvciBzaG9ydCBwd19mMDI5OV9mMDMzNyA9IHsgX180WDIoRl8wXzI5OSwgRl8wXzMzNykgfSwKKyAgICBwd19mMDExNF9mMDI1MCA9IHsgX180WDIoRl8wXzExNCwgRl8wXzI1MCkgfTsKKyAgX192ZWN0b3IgaW50IHBkX29uZWhhbGYgPSB7IF9fNFgoT05FX0hBTEYpIH07CisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGJfemVybyA9IHsgX18xNlgoMCkgfSwKKyNpZiBfX0JJR19FTkRJQU5fXworICAgIHNoaWZ0X3BhY2tfaW5kZXggPQorICAgICAgeyAwLCAxLCA0LCA1LCAgOCwgIDksIDEyLCAxMywgMTYsIDE3LCAyMCwgMjEsIDI0LCAyNSwgMjgsIDI5IH07CisjZWxzZQorICAgIHNoaWZ0X3BhY2tfaW5kZXggPQorICAgICAgeyAyLCAzLCA2LCA3LCAxMCwgMTEsIDE0LCAxNSwgMTgsIDE5LCAyMiwgMjMsIDI2LCAyNywgMzAsIDMxIH07CisjZW5kaWYKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIgPSAqaW5wdXRfYnVmKys7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBvdXRwdXRfcm93Kys7CisKKyAgICBmb3IgKG51bV9jb2xzID0gcGl0Y2g7IG51bV9jb2xzID4gMDsKKyAgICAgICAgIG51bV9jb2xzIC09IFJHQl9QSVhFTFNJWkUgKiAxNiwgaW5wdHIgKz0gUkdCX1BJWEVMU0laRSAqIDE2LAorICAgICAgICAgb3V0cHRyICs9IDE2KSB7CisKKyNpZiBfX0JJR19FTkRJQU5fXworICAgICAgLyogTG9hZCAxNiBwaXhlbHMgPT0gNDggb3IgNjQgYnl0ZXMgKi8KKyAgICAgIG9mZnNldCA9IChzaXplX3QpaW5wdHIgJiAxNTsKKyAgICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB1bmFsaWduZWRfc2hpZnRfaW5kZXg7CisgICAgICAgIGludCBieXRlcyA9IG51bV9jb2xzICsgb2Zmc2V0OworCisgICAgICAgIGlmIChieXRlcyA8IChSR0JfUElYRUxTSVpFICsgMSkgKiAxNiAmJiAoYnl0ZXMgJiAxNSkpIHsKKyAgICAgICAgICAvKiBTbG93IHBhdGggdG8gcHJldmVudCBidWZmZXIgb3ZlcnJlYWQuICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAgICAgICAgKiByZWFkIGEgcGFydGlhbCBBbHRpVmVjIHJlZ2lzdGVyLCBvdmVycmVhZCB3b3VsZCBvY2N1ciBvbiB0aGUgbGFzdAorICAgICAgICAgICAqIGNodW5rIG9mIHRoZSBsYXN0IGltYWdlIHJvdyBpZiB0aGUgcmlnaHQgZWRnZSBpcyBub3Qgb24gYSAxNi1ieXRlCisgICAgICAgICAgICogYm91bmRhcnkuICBJdCBjb3VsZCBhbHNvIG9jY3VyIG9uIG90aGVyIHJvd3MgaWYgdGhlIGJ5dGVzIHBlciByb3cKKyAgICAgICAgICAgKiBpcyBsb3cgZW5vdWdoLiAgU2luY2Ugd2UgY2FuJ3QgZGV0ZXJtaW5lIHdoZXRoZXIgd2UncmUgb24gdGhlIGxhc3QKKyAgICAgICAgICAgKiBpbWFnZSByb3csIHdlIGhhdmUgdG8gYXNzdW1lIGV2ZXJ5IHJvdyBpcyB0aGUgbGFzdC4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBtZW1jcHkodG1wYnVmLCBpbnB0ciwgbWluKG51bV9jb2xzLCBSR0JfUElYRUxTSVpFICogMTYpKTsKKyAgICAgICAgICByZ2IwID0gdmVjX2xkKDAsIHRtcGJ1Zik7CisgICAgICAgICAgcmdiMSA9IHZlY19sZCgxNiwgdG1wYnVmKTsKKyAgICAgICAgICByZ2IyID0gdmVjX2xkKDMyLCB0bXBidWYpOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgICAgIHJnYjMgPSB2ZWNfbGQoNDgsIHRtcGJ1Zik7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICByZ2IwID0gdmVjX2xkKDAsIGlucHRyKTsKKyAgICAgICAgICBpZiAoYnl0ZXMgPiAxNikKKyAgICAgICAgICAgIHJnYjEgPSB2ZWNfbGQoMTYsIGlucHRyKTsKKyAgICAgICAgICBpZiAoYnl0ZXMgPiAzMikKKyAgICAgICAgICAgIHJnYjIgPSB2ZWNfbGQoMzIsIGlucHRyKTsKKyAgICAgICAgICBpZiAoYnl0ZXMgPiA0OCkKKyAgICAgICAgICAgIHJnYjMgPSB2ZWNfbGQoNDgsIGlucHRyKTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICBpZiAoYnl0ZXMgPiA2NCkKKyAgICAgICAgICAgIHJnYjQgPSB2ZWNfbGQoNjQsIGlucHRyKTsKKyNlbmRpZgorICAgICAgICAgIHVuYWxpZ25lZF9zaGlmdF9pbmRleCA9IHZlY19sdnNsKDAsIGlucHRyKTsKKyAgICAgICAgICByZ2IwID0gdmVjX3Blcm0ocmdiMCwgcmdiMSwgdW5hbGlnbmVkX3NoaWZ0X2luZGV4KTsKKyAgICAgICAgICByZ2IxID0gdmVjX3Blcm0ocmdiMSwgcmdiMiwgdW5hbGlnbmVkX3NoaWZ0X2luZGV4KTsKKyAgICAgICAgICByZ2IyID0gdmVjX3Blcm0ocmdiMiwgcmdiMywgdW5hbGlnbmVkX3NoaWZ0X2luZGV4KTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICByZ2IzID0gdmVjX3Blcm0ocmdiMywgcmdiNCwgdW5hbGlnbmVkX3NoaWZ0X2luZGV4KTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobnVtX2NvbHMgPCBSR0JfUElYRUxTSVpFICogMTYgJiYgKG51bV9jb2xzICYgMTUpKSB7CisgICAgICAgICAgLyogU2xvdyBwYXRoICovCisgICAgICAgICAgbWVtY3B5KHRtcGJ1ZiwgaW5wdHIsIG1pbihudW1fY29scywgUkdCX1BJWEVMU0laRSAqIDE2KSk7CisgICAgICAgICAgcmdiMCA9IHZlY19sZCgwLCB0bXBidWYpOworICAgICAgICAgIHJnYjEgPSB2ZWNfbGQoMTYsIHRtcGJ1Zik7CisgICAgICAgICAgcmdiMiA9IHZlY19sZCgzMiwgdG1wYnVmKTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICByZ2IzID0gdmVjX2xkKDQ4LCB0bXBidWYpOworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgcmdiMCA9IHZlY19sZCgwLCBpbnB0cik7CisgICAgICAgICAgaWYgKG51bV9jb2xzID4gMTYpCisgICAgICAgICAgICByZ2IxID0gdmVjX2xkKDE2LCBpbnB0cik7CisgICAgICAgICAgaWYgKG51bV9jb2xzID4gMzIpCisgICAgICAgICAgICByZ2IyID0gdmVjX2xkKDMyLCBpbnB0cik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgaWYgKG51bV9jb2xzID4gNDgpCisgICAgICAgICAgICByZ2IzID0gdmVjX2xkKDQ4LCBpbnB0cik7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgfQorI2Vsc2UKKyAgICAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgICAgIHJnYjAgPSB2ZWNfdnN4X2xkKDAsIGlucHRyKTsKKyAgICAgIGlmIChudW1fY29scyA+IDE2KQorICAgICAgICByZ2IxID0gdmVjX3ZzeF9sZCgxNiwgaW5wdHIpOworICAgICAgaWYgKG51bV9jb2xzID4gMzIpCisgICAgICAgIHJnYjIgPSB2ZWNfdnN4X2xkKDMyLCBpbnB0cik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICBpZiAobnVtX2NvbHMgPiA0OCkKKyAgICAgICAgcmdiMyA9IHZlY192c3hfbGQoNDgsIGlucHRyKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBSR0JfUElYRUxTSVpFID09IDMKKyAgICAgIC8qIHJnYjAgPSBSMCBHMCBCMCBSMSBHMSBCMSBSMiBHMiBCMiBSMyBHMyBCMyBSNCBHNCBCNCBSNQorICAgICAgICogcmdiMSA9IEc1IEI1IFI2IEc2IEI2IFI3IEc3IEI3IFI4IEc4IEI4IFI5IEc5IEI5IFJhIEdhCisgICAgICAgKiByZ2IyID0gQmEgUmIgR2IgQmIgUmMgR2MgQmMgUmQgR2QgQmQgUmUgR2UgQmUgUmYgR2YgQmYKKyAgICAgICAqCisgICAgICAgKiByZ2JnMCA9IFIwIEcwIFIxIEcxIFIyIEcyIFIzIEczIEIwIEcwIEIxIEcxIEIyIEcyIEIzIEczCisgICAgICAgKiByZ2JnMSA9IFI0IEc0IFI1IEc1IFI2IEc2IFI3IEc3IEI0IEc0IEI1IEc1IEI2IEc2IEI3IEc3CisgICAgICAgKiByZ2JnMiA9IFI4IEc4IFI5IEc5IFJhIEdhIFJiIEdiIEI4IEc4IEI5IEc5IEJhIEdhIEJiIEdiCisgICAgICAgKiByZ2JnMyA9IFJjIEdjIFJkIEdkIFJlIEdlIFJmIEdmIEJjIEdjIEJkIEdkIEJlIEdlIEJmIEdmCisgICAgICAgKi8KKyAgICAgIHJnYmcwID0gdmVjX3Blcm0ocmdiMCwgcmdiMCwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCR19JTkRFWDApOworICAgICAgcmdiZzEgPSB2ZWNfcGVybShyZ2IwLCByZ2IxLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JHX0lOREVYMSk7CisgICAgICByZ2JnMiA9IHZlY19wZXJtKHJnYjEsIHJnYjIsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQkdfSU5ERVgyKTsKKyAgICAgIHJnYmczID0gdmVjX3Blcm0ocmdiMiwgcmdiMiwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCR19JTkRFWDMpOworI2Vsc2UKKyAgICAgIC8qIHJnYjAgPSBSMCBHMCBCMCBYMCBSMSBHMSBCMSBYMSBSMiBHMiBCMiBYMiBSMyBHMyBCMyBYMworICAgICAgICogcmdiMSA9IFI0IEc0IEI0IFg0IFI1IEc1IEI1IFg1IFI2IEc2IEI2IFg2IFI3IEc3IEI3IFg3CisgICAgICAgKiByZ2IyID0gUjggRzggQjggWDggUjkgRzkgQjkgWDkgUmEgR2EgQmEgWGEgUmIgR2IgQmIgWGIKKyAgICAgICAqIHJnYjMgPSBSYyBHYyBCYyBYYyBSZCBHZCBCZCBYZCBSZSBHZSBCZSBYZSBSZiBHZiBCZiBYZgorICAgICAgICoKKyAgICAgICAqIHJnYmcwID0gUjAgRzAgUjEgRzEgUjIgRzIgUjMgRzMgQjAgRzAgQjEgRzEgQjIgRzIgQjMgRzMKKyAgICAgICAqIHJnYmcxID0gUjQgRzQgUjUgRzUgUjYgRzYgUjcgRzcgQjQgRzQgQjUgRzUgQjYgRzYgQjcgRzcKKyAgICAgICAqIHJnYmcyID0gUjggRzggUjkgRzkgUmEgR2EgUmIgR2IgQjggRzggQjkgRzkgQmEgR2EgQmIgR2IKKyAgICAgICAqIHJnYmczID0gUmMgR2MgUmQgR2QgUmUgR2UgUmYgR2YgQmMgR2MgQmQgR2QgQmUgR2UgQmYgR2YKKyAgICAgICAqLworICAgICAgcmdiZzAgPSB2ZWNfcGVybShyZ2IwLCByZ2IwLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JHX0lOREVYKTsKKyAgICAgIHJnYmcxID0gdmVjX3Blcm0ocmdiMSwgcmdiMSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCR19JTkRFWCk7CisgICAgICByZ2JnMiA9IHZlY19wZXJtKHJnYjIsIHJnYjIsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQkdfSU5ERVgpOworICAgICAgcmdiZzMgPSB2ZWNfcGVybShyZ2IzLCByZ2IzLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JHX0lOREVYKTsKKyNlbmRpZgorCisgICAgICAvKiByZzAgPSBSMCBHMCBSMSBHMSBSMiBHMiBSMyBHMworICAgICAgICogYmcwID0gQjAgRzAgQjEgRzEgQjIgRzIgQjMgRzMKKyAgICAgICAqIC4uLgorICAgICAgICoKKyAgICAgICAqIE5PVEU6IFdlIGhhdmUgdG8gdXNlIHZlY19tZXJnZSooKSBoZXJlIGJlY2F1c2UgdmVjX3VucGFjayooKSBkb2Vzbid0CisgICAgICAgKiBzdXBwb3J0IHVuc2lnbmVkIHZlY3RvcnMuCisgICAgICAgKi8KKyAgICAgIHJnMCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmcwKTsKKyAgICAgIGJnMCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmcwKTsKKyAgICAgIHJnMSA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmcxKTsKKyAgICAgIGJnMSA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmcxKTsKKyAgICAgIHJnMiA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmcyKTsKKyAgICAgIGJnMiA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmcyKTsKKyAgICAgIHJnMyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHJnYmczKTsKKyAgICAgIGJnMyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHJnYmczKTsKKworICAgICAgLyogKE9yaWdpbmFsKQorICAgICAgICogWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgICAgKgorICAgICAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgKiBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworICAgICAgICovCisKKyAgICAgIC8qIENhbGN1bGF0ZSBZIHZhbHVlcyAqLworCisgICAgICB5MCA9IHZlY19tc3VtcyhyZzAsIHB3X2YwMjk5X2YwMzM3LCBwZF9vbmVoYWxmKTsKKyAgICAgIHkxID0gdmVjX21zdW1zKHJnMSwgcHdfZjAyOTlfZjAzMzcsIHBkX29uZWhhbGYpOworICAgICAgeTIgPSB2ZWNfbXN1bXMocmcyLCBwd19mMDI5OV9mMDMzNywgcGRfb25laGFsZik7CisgICAgICB5MyA9IHZlY19tc3VtcyhyZzMsIHB3X2YwMjk5X2YwMzM3LCBwZF9vbmVoYWxmKTsKKyAgICAgIHkwID0gdmVjX21zdW1zKGJnMCwgcHdfZjAxMTRfZjAyNTAsIHkwKTsKKyAgICAgIHkxID0gdmVjX21zdW1zKGJnMSwgcHdfZjAxMTRfZjAyNTAsIHkxKTsKKyAgICAgIHkyID0gdmVjX21zdW1zKGJnMiwgcHdfZjAxMTRfZjAyNTAsIHkyKTsKKyAgICAgIHkzID0gdmVjX21zdW1zKGJnMywgcHdfZjAxMTRfZjAyNTAsIHkzKTsKKyAgICAgIC8qIENsZXZlciB3YXkgdG8gYXZvaWQgNCBzaGlmdHMgKyAyIHBhY2tzLiAgVGhpcyBwYWNrcyB0aGUgaGlnaCB3b3JkIGZyb20KKyAgICAgICAqIGVhY2ggZHdvcmQgaW50byBhIG5ldyAxNi1iaXQgdmVjdG9yLCB3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZgorICAgICAgICogZGVzY2FsaW5nIHRoZSAzMi1iaXQgcmVzdWx0cyAocmlnaHQtc2hpZnRpbmcgYnkgMTYgYml0cykgYW5kIHRoZW4KKyAgICAgICAqIHBhY2tpbmcgdGhlbS4KKyAgICAgICAqLworICAgICAgeWwgPSB2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpeTAsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl5MSwKKyAgICAgICAgICAgICAgICAgICAgc2hpZnRfcGFja19pbmRleCk7CisgICAgICB5aCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl5MiwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXkzLAorICAgICAgICAgICAgICAgICAgICBzaGlmdF9wYWNrX2luZGV4KTsKKyAgICAgIHkgPSB2ZWNfcGFjayh5bCwgeWgpOworICAgICAgdmVjX3N0KHksIDAsIG91dHB0cik7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamNzYW1wbGUtYWx0aXZlYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjc2FtcGxlLWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI1YjhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjc2FtcGxlLWFsdGl2ZWMuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIEFsdGlWZWMgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIENIUk9NQSBET1dOU0FNUExJTkcgKi8KKworI2luY2x1ZGUgImpzaW1kX2FsdGl2ZWMuaCIKKyNpbmNsdWRlICJqY3NhbXBsZS5oIgorCisKK3ZvaWQganNpbWRfaDJ2MV9kb3duc2FtcGxlX2FsdGl2ZWMoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGludCBvdXRyb3csIG91dGNvbDsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IHdpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CisgIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB0aGlzMCwgbmV4dDAsIG91dDsKKyAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdGhpczBlLCB0aGlzMG8sIG5leHQwZSwgbmV4dDBvLCBvdXRsLCBvdXRoOworCisgIC8qIENvbnN0YW50cyAqLworICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBwd19iaWFzID0geyBfXzRYMigwLCAxKSB9LAorICAgIHB3X29uZSA9IHsgX184WCgxKSB9OworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGV2ZW5fb2RkX2luZGV4ID0KKyAgICB7ICAwLCAgMiwgIDQsICA2LCAgOCwgMTAsIDEyLCAxNCwgIDEsICAzLCAgNSwgIDcsICA5LCAxMSwgMTMsIDE1IH0sCisgICAgcGJfemVybyA9IHsgX18xNlgoMCkgfTsKKworICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhLCBtYXhfdl9zYW1wX2ZhY3RvciwgaW1hZ2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2xzICogMik7CisKKyAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCB2X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgeworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW291dHJvd107CisKKyAgICBmb3IgKG91dGNvbCA9IG91dHB1dF9jb2xzOyBvdXRjb2wgPiAwOworICAgICAgICAgb3V0Y29sIC09IDE2LCBpbnB0ciArPSAzMiwgb3V0cHRyICs9IDE2KSB7CisKKyAgICAgIHRoaXMwID0gdmVjX2xkKDAsIGlucHRyKTsKKyAgICAgIHRoaXMwID0gdmVjX3Blcm0odGhpczAsIHRoaXMwLCBldmVuX29kZF9pbmRleCk7CisgICAgICB0aGlzMGUgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKHRoaXMwKTsKKyAgICAgIHRoaXMwbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClWRUNfVU5QQUNLTFUodGhpczApOworICAgICAgb3V0bCA9IHZlY19hZGQodGhpczBlLCB0aGlzMG8pOworICAgICAgb3V0bCA9IHZlY19hZGQob3V0bCwgcHdfYmlhcyk7CisgICAgICBvdXRsID0gdmVjX3NyKG91dGwsIHB3X29uZSk7CisKKyAgICAgIGlmIChvdXRjb2wgPiA4KSB7CisgICAgICAgIG5leHQwID0gdmVjX2xkKDE2LCBpbnB0cik7CisgICAgICAgIG5leHQwID0gdmVjX3Blcm0obmV4dDAsIG5leHQwLCBldmVuX29kZF9pbmRleCk7CisgICAgICAgIG5leHQwZSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClWRUNfVU5QQUNLSFUobmV4dDApOworICAgICAgICBuZXh0MG8gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKG5leHQwKTsKKyAgICAgICAgb3V0aCA9IHZlY19hZGQobmV4dDBlLCBuZXh0MG8pOworICAgICAgICBvdXRoID0gdmVjX2FkZChvdXRoLCBwd19iaWFzKTsKKyAgICAgICAgb3V0aCA9IHZlY19zcihvdXRoLCBwd19vbmUpOworICAgICAgfSBlbHNlCisgICAgICAgIG91dGggPSB2ZWNfc3BsYXRfdTE2KDApOworCisgICAgICBvdXQgPSB2ZWNfcGFjayhvdXRsLCBvdXRoKTsKKyAgICAgIHZlY19zdChvdXQsIDAsIG91dHB0cik7CisgICAgfQorICB9Cit9CisKKwordm9pZAoranNpbWRfaDJ2Ml9kb3duc2FtcGxlX2FsdGl2ZWMoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGludCBpbnJvdywgb3V0cm93LCBvdXRjb2w7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSB3aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOworICBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOworCisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdGhpczAsIG5leHQwLCB0aGlzMSwgbmV4dDEsIG91dDsKKyAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdGhpczBlLCB0aGlzMG8sIG5leHQwZSwgbmV4dDBvLCB0aGlzMWUsIHRoaXMxbywKKyAgICBuZXh0MWUsIG5leHQxbywgb3V0MGwsIG91dDBoLCBvdXQxbCwgb3V0MWgsIG91dGwsIG91dGg7CisKKyAgLyogQ29uc3RhbnRzICovCisgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHB3X2JpYXMgPSB7IF9fNFgyKDEsIDIpIH0sCisgICAgcHdfdHdvID0geyBfXzhYKDIpIH07CisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZXZlbl9vZGRfaW5kZXggPQorICAgIHsgIDAsICAyLCAgNCwgIDYsICA4LCAxMCwgMTIsIDE0LCAgMSwgIDMsICA1LCAgNywgIDksIDExLCAxMywgMTUgfSwKKyAgICBwYl96ZXJvID0geyBfXzE2WCgwKSB9OworCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIG1heF92X3NhbXBfZmFjdG9yLCBpbWFnZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbHMgKiAyKTsKKworICBmb3IgKGlucm93ID0gMCwgb3V0cm93ID0gMDsgb3V0cm93IDwgdl9zYW1wX2ZhY3RvcjsKKyAgICAgICBpbnJvdyArPSAyLCBvdXRyb3crKykgeworCisgICAgaW5wdHIwID0gaW5wdXRfZGF0YVtpbnJvd107CisgICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdyArIDFdOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CisKKyAgICBmb3IgKG91dGNvbCA9IG91dHB1dF9jb2xzOyBvdXRjb2wgPiAwOworICAgICAgICAgb3V0Y29sIC09IDE2LCBpbnB0cjAgKz0gMzIsIGlucHRyMSArPSAzMiwgb3V0cHRyICs9IDE2KSB7CisKKyAgICAgIHRoaXMwID0gdmVjX2xkKDAsIGlucHRyMCk7CisgICAgICB0aGlzMCA9IHZlY19wZXJtKHRoaXMwLCB0aGlzMCwgZXZlbl9vZGRfaW5kZXgpOworICAgICAgdGhpczBlID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tIVSh0aGlzMCk7CisgICAgICB0aGlzMG8gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHRoaXMwKTsKKyAgICAgIG91dDBsID0gdmVjX2FkZCh0aGlzMGUsIHRoaXMwbyk7CisKKyAgICAgIHRoaXMxID0gdmVjX2xkKDAsIGlucHRyMSk7CisgICAgICB0aGlzMSA9IHZlY19wZXJtKHRoaXMxLCB0aGlzMSwgZXZlbl9vZGRfaW5kZXgpOworICAgICAgdGhpczFlID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tIVSh0aGlzMSk7CisgICAgICB0aGlzMW8gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKHRoaXMxKTsKKyAgICAgIG91dDFsID0gdmVjX2FkZCh0aGlzMWUsIHRoaXMxbyk7CisKKyAgICAgIG91dGwgPSB2ZWNfYWRkKG91dDBsLCBvdXQxbCk7CisgICAgICBvdXRsID0gdmVjX2FkZChvdXRsLCBwd19iaWFzKTsKKyAgICAgIG91dGwgPSB2ZWNfc3Iob3V0bCwgcHdfdHdvKTsKKworICAgICAgaWYgKG91dGNvbCA+IDgpIHsKKyAgICAgICAgbmV4dDAgPSB2ZWNfbGQoMTYsIGlucHRyMCk7CisgICAgICAgIG5leHQwID0gdmVjX3Blcm0obmV4dDAsIG5leHQwLCBldmVuX29kZF9pbmRleCk7CisgICAgICAgIG5leHQwZSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClWRUNfVU5QQUNLSFUobmV4dDApOworICAgICAgICBuZXh0MG8gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKG5leHQwKTsKKyAgICAgICAgb3V0MGggPSB2ZWNfYWRkKG5leHQwZSwgbmV4dDBvKTsKKworICAgICAgICBuZXh0MSA9IHZlY19sZCgxNiwgaW5wdHIxKTsKKyAgICAgICAgbmV4dDEgPSB2ZWNfcGVybShuZXh0MSwgbmV4dDEsIGV2ZW5fb2RkX2luZGV4KTsKKyAgICAgICAgbmV4dDFlID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tIVShuZXh0MSk7CisgICAgICAgIG5leHQxbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClWRUNfVU5QQUNLTFUobmV4dDEpOworICAgICAgICBvdXQxaCA9IHZlY19hZGQobmV4dDFlLCBuZXh0MW8pOworCisgICAgICAgIG91dGggPSB2ZWNfYWRkKG91dDBoLCBvdXQxaCk7CisgICAgICAgIG91dGggPSB2ZWNfYWRkKG91dGgsIHB3X2JpYXMpOworICAgICAgICBvdXRoID0gdmVjX3NyKG91dGgsIHB3X3R3byk7CisgICAgICB9IGVsc2UKKyAgICAgICAgb3V0aCA9IHZlY19zcGxhdF91MTYoMCk7CisKKyAgICAgIG91dCA9IHZlY19wYWNrKG91dGwsIG91dGgpOworICAgICAgdmVjX3N0KG91dCwgMCwgb3V0cHRyKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY3NhbXBsZS5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pjc2FtcGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjNDgxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qY3NhbXBsZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBqY3NhbXBsZS5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqLworCitMT0NBTCh2b2lkKQorZXhwYW5kX3JpZ2h0X2VkZ2UoSlNBTVBBUlJBWSBpbWFnZV9kYXRhLCBpbnQgbnVtX3Jvd3MsIEpESU1FTlNJT04gaW5wdXRfY29scywKKyAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMpCit7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSBwaXh2YWw7CisgIHJlZ2lzdGVyIGludCBjb3VudDsKKyAgaW50IHJvdzsKKyAgaW50IG51bWNvbHMgPSAoaW50KShvdXRwdXRfY29scyAtIGlucHV0X2NvbHMpOworCisgIGlmIChudW1jb2xzID4gMCkgeworICAgIGZvciAocm93ID0gMDsgcm93IDwgbnVtX3Jvd3M7IHJvdysrKSB7CisgICAgICBwdHIgPSBpbWFnZV9kYXRhW3Jvd10gKyBpbnB1dF9jb2xzOworICAgICAgcGl4dmFsID0gcHRyWy0xXTsgICAgICAgICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICBmb3IgKGNvdW50ID0gbnVtY29sczsgY291bnQgPiAwOyBjb3VudC0tKQorICAgICAgICAqcHRyKysgPSBwaXh2YWw7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamRjb2xleHQtYWx0aXZlYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pkY29sZXh0LWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGQ1MmJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pkY29sZXh0LWFsdGl2ZWMuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIEFsdGlWZWMgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBqZGNvbG9yLWFsdGl2ZWMuYyAqLworCisKK3ZvaWQganNpbWRfeWNjX3JnYl9jb252ZXJ0X2FsdGl2ZWMoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7CisgIEpTQU1QUk9XIG91dHB0ciwgaW5wdHIwLCBpbnB0cjEsIGlucHRyMjsKKyAgaW50IHBpdGNoID0gb3V0X3dpZHRoICogUkdCX1BJWEVMU0laRSwgbnVtX2NvbHM7CisjaWYgX19CSUdfRU5ESUFOX18KKyAgaW50IG9mZnNldDsKKyNlbmRpZgorICB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkgdG1wYnVmW1JHQl9QSVhFTFNJWkUgKiAxNl07CisKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2IwLCByZ2IxLCByZ2IyLCByZ2J4MCwgcmdieDEsIHJnYngyLCByZ2J4MywKKyAgICB5LCBjYiwgY3I7CisjaWYgX19CSUdfRU5ESUFOX18KKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBlZGdlbCwgZWRnZWgsIGVkZ2VzLCBvdXQwLCBvdXQxLCBvdXQyLCBvdXQzOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIG91dDQ7CisjZW5kaWYKKyNlbmRpZgorI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJnYjM7CisjZW5kaWYKKyAgX192ZWN0b3Igc2hvcnQgcmcwLCByZzEsIHJnMiwgcmczLCBieDAsIGJ4MSwgYngyLCBieDMsIHlsLCB5aCwgY2JsLCBjYmgsCisgICAgY3JsLCBjcmgsIHJsLCByaCwgZ2wsIGdoLCBibCwgYmgsIGcwdywgZzF3LCBnMncsIGczdzsKKyAgX192ZWN0b3IgaW50IGcwLCBnMSwgZzIsIGczOworCisgIC8qIENvbnN0YW50cworICAgKiBOT1RFOiBUaGUgPj4gMSBpcyB0byBjb21wZW5zYXRlIGZvciB0aGUgZmFjdCB0aGF0IHZlY19tYWRkcygpIHJldHVybnMgMTcKKyAgICogaGlnaC1vcmRlciBiaXRzLCBub3QgMTYuCisgICAqLworICBfX3ZlY3RvciBzaG9ydCBwd19mMDQwMiA9IHsgX184WChGXzBfNDAyID4+IDEpIH0sCisgICAgcHdfbWYwMjI4ID0geyBfXzhYKC1GXzBfMjI4ID4+IDEpIH0sCisgICAgcHdfbWYwMzQ0X2YwMjg1ID0geyBfXzRYMigtRl8wXzM0NCwgRl8wXzI4NSkgfSwKKyAgICBwd19vbmUgPSB7IF9fOFgoMSkgfSwgcHdfMjU1ID0geyBfXzhYKDI1NSkgfSwKKyAgICBwd19jaiA9IHsgX184WChDRU5URVJKU0FNUExFKSB9OworICBfX3ZlY3RvciBpbnQgcGRfb25laGFsZiA9IHsgX180WChPTkVfSEFMRikgfTsKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBwYl96ZXJvID0geyBfXzE2WCgwKSB9LAorI2lmIF9fQklHX0VORElBTl9fCisgICAgc2hpZnRfcGFja19pbmRleCA9CisgICAgICB7ICAwLCAgMSwgIDQsICA1LCAgOCwgIDksIDEyLCAxMywgMTYsIDE3LCAyMCwgMjEsIDI0LCAyNSwgMjgsIDI5IH07CisjZWxzZQorICAgIHNoaWZ0X3BhY2tfaW5kZXggPQorICAgICAgeyAgMiwgIDMsICA2LCAgNywgMTAsIDExLCAxNCwgMTUsIDE4LCAxOSwgMjIsIDIzLCAyNiwgMjcsIDMwLCAzMSB9OworI2VuZGlmCisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgIGlucHV0X3JvdysrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisKKyAgICBmb3IgKG51bV9jb2xzID0gcGl0Y2g7IG51bV9jb2xzID4gMDsKKyAgICAgICAgIG51bV9jb2xzIC09IFJHQl9QSVhFTFNJWkUgKiAxNiwgb3V0cHRyICs9IFJHQl9QSVhFTFNJWkUgKiAxNiwKKyAgICAgICAgIGlucHRyMCArPSAxNiwgaW5wdHIxICs9IDE2LCBpbnB0cjIgKz0gMTYpIHsKKworICAgICAgeSA9IHZlY19sZCgwLCBpbnB0cjApOworICAgICAgLyogTk9URTogV2UgaGF2ZSB0byB1c2UgdmVjX21lcmdlKigpIGhlcmUgYmVjYXVzZSB2ZWNfdW5wYWNrKigpIGRvZXNuJ3QKKyAgICAgICAqIHN1cHBvcnQgdW5zaWduZWQgdmVjdG9ycy4KKyAgICAgICAqLworICAgICAgeWwgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tIVSh5KTsKKyAgICAgIHloID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydClWRUNfVU5QQUNLTFUoeSk7CisKKyAgICAgIGNiID0gdmVjX2xkKDAsIGlucHRyMSk7CisgICAgICBjYmwgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tIVShjYik7CisgICAgICBjYmggPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tMVShjYik7CisgICAgICBjYmwgPSB2ZWNfc3ViKGNibCwgcHdfY2opOworICAgICAgY2JoID0gdmVjX3N1YihjYmgsIHB3X2NqKTsKKworICAgICAgY3IgPSB2ZWNfbGQoMCwgaW5wdHIyKTsKKyAgICAgIGNybCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0hVKGNyKTsKKyAgICAgIGNyaCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKGNyKTsKKyAgICAgIGNybCA9IHZlY19zdWIoY3JsLCBwd19jaik7CisgICAgICBjcmggPSB2ZWNfc3ViKGNyaCwgcHdfY2opOworCisgICAgICAvKiAoT3JpZ2luYWwpCisgICAgICAgKiBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorICAgICAgICogRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKyAgICAgICAqIEIgPSBZICsgMS43NzIwMCAqIENiCisgICAgICAgKgorICAgICAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgKiBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisgICAgICAgKiBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisgICAgICAgKiBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKyAgICAgICAqLworICAgICAgYmwgPSB2ZWNfYWRkKGNibCwgY2JsKTsKKyAgICAgIGJoID0gdmVjX2FkZChjYmgsIGNiaCk7CisgICAgICBibCA9IHZlY19tYWRkcyhibCwgcHdfbWYwMjI4LCBwd19vbmUpOworICAgICAgYmggPSB2ZWNfbWFkZHMoYmgsIHB3X21mMDIyOCwgcHdfb25lKTsKKyAgICAgIGJsID0gdmVjX3NyYShibCwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB3X29uZSk7CisgICAgICBiaCA9IHZlY19zcmEoYmgsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClwd19vbmUpOworICAgICAgYmwgPSB2ZWNfYWRkKGJsLCBjYmwpOworICAgICAgYmggPSB2ZWNfYWRkKGJoLCBjYmgpOworICAgICAgYmwgPSB2ZWNfYWRkKGJsLCBjYmwpOworICAgICAgYmggPSB2ZWNfYWRkKGJoLCBjYmgpOworICAgICAgYmwgPSB2ZWNfYWRkKGJsLCB5bCk7CisgICAgICBiaCA9IHZlY19hZGQoYmgsIHloKTsKKworICAgICAgcmwgPSB2ZWNfYWRkKGNybCwgY3JsKTsKKyAgICAgIHJoID0gdmVjX2FkZChjcmgsIGNyaCk7CisgICAgICBybCA9IHZlY19tYWRkcyhybCwgcHdfZjA0MDIsIHB3X29uZSk7CisgICAgICByaCA9IHZlY19tYWRkcyhyaCwgcHdfZjA0MDIsIHB3X29uZSk7CisgICAgICBybCA9IHZlY19zcmEocmwsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClwd19vbmUpOworICAgICAgcmggPSB2ZWNfc3JhKHJoLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpcHdfb25lKTsKKyAgICAgIHJsID0gdmVjX2FkZChybCwgY3JsKTsKKyAgICAgIHJoID0gdmVjX2FkZChyaCwgY3JoKTsKKyAgICAgIHJsID0gdmVjX2FkZChybCwgeWwpOworICAgICAgcmggPSB2ZWNfYWRkKHJoLCB5aCk7CisKKyAgICAgIGcwdyA9IHZlY19tZXJnZWgoY2JsLCBjcmwpOworICAgICAgZzF3ID0gdmVjX21lcmdlbChjYmwsIGNybCk7CisgICAgICBnMCA9IHZlY19tc3VtcyhnMHcsIHB3X21mMDM0NF9mMDI4NSwgcGRfb25laGFsZik7CisgICAgICBnMSA9IHZlY19tc3VtcyhnMXcsIHB3X21mMDM0NF9mMDI4NSwgcGRfb25laGFsZik7CisgICAgICBnMncgPSB2ZWNfbWVyZ2VoKGNiaCwgY3JoKTsKKyAgICAgIGczdyA9IHZlY19tZXJnZWwoY2JoLCBjcmgpOworICAgICAgZzIgPSB2ZWNfbXN1bXMoZzJ3LCBwd19tZjAzNDRfZjAyODUsIHBkX29uZWhhbGYpOworICAgICAgZzMgPSB2ZWNfbXN1bXMoZzN3LCBwd19tZjAzNDRfZjAyODUsIHBkX29uZWhhbGYpOworICAgICAgLyogQ2xldmVyIHdheSB0byBhdm9pZCA0IHNoaWZ0cyArIDIgcGFja3MuICBUaGlzIHBhY2tzIHRoZSBoaWdoIHdvcmQgZnJvbQorICAgICAgICogZWFjaCBkd29yZCBpbnRvIGEgbmV3IDE2LWJpdCB2ZWN0b3IsIHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mCisgICAgICAgKiBkZXNjYWxpbmcgdGhlIDMyLWJpdCByZXN1bHRzIChyaWdodC1zaGlmdGluZyBieSAxNiBiaXRzKSBhbmQgdGhlbgorICAgICAgICogcGFja2luZyB0aGVtLgorICAgICAgICovCisgICAgICBnbCA9IHZlY19wZXJtKChfX3ZlY3RvciBzaG9ydClnMCwgKF9fdmVjdG9yIHNob3J0KWcxLCBzaGlmdF9wYWNrX2luZGV4KTsKKyAgICAgIGdoID0gdmVjX3Blcm0oKF9fdmVjdG9yIHNob3J0KWcyLCAoX192ZWN0b3Igc2hvcnQpZzMsIHNoaWZ0X3BhY2tfaW5kZXgpOworICAgICAgZ2wgPSB2ZWNfc3ViKGdsLCBjcmwpOworICAgICAgZ2ggPSB2ZWNfc3ViKGdoLCBjcmgpOworICAgICAgZ2wgPSB2ZWNfYWRkKGdsLCB5bCk7CisgICAgICBnaCA9IHZlY19hZGQoZ2gsIHloKTsKKworICAgICAgcmcwID0gdmVjX21lcmdlaChybCwgZ2wpOworICAgICAgYngwID0gdmVjX21lcmdlaChibCwgcHdfMjU1KTsKKyAgICAgIHJnMSA9IHZlY19tZXJnZWwocmwsIGdsKTsKKyAgICAgIGJ4MSA9IHZlY19tZXJnZWwoYmwsIHB3XzI1NSk7CisgICAgICByZzIgPSB2ZWNfbWVyZ2VoKHJoLCBnaCk7CisgICAgICBieDIgPSB2ZWNfbWVyZ2VoKGJoLCBwd18yNTUpOworICAgICAgcmczID0gdmVjX21lcmdlbChyaCwgZ2gpOworICAgICAgYngzID0gdmVjX21lcmdlbChiaCwgcHdfMjU1KTsKKworICAgICAgcmdieDAgPSB2ZWNfcGFja3N1KHJnMCwgYngwKTsKKyAgICAgIHJnYngxID0gdmVjX3BhY2tzdShyZzEsIGJ4MSk7CisgICAgICByZ2J4MiA9IHZlY19wYWNrc3UocmcyLCBieDIpOworICAgICAgcmdieDMgPSB2ZWNfcGFja3N1KHJnMywgYngzKTsKKworI2lmIFJHQl9QSVhFTFNJWkUgPT0gMworICAgICAgLyogcmdieDAgPSBSMCBHMCBSMSBHMSBSMiBHMiBSMyBHMyBCMCBYMCBCMSBYMSBCMiBYMiBCMyBYMworICAgICAgICogcmdieDEgPSBSNCBHNCBSNSBHNSBSNiBHNiBSNyBHNyBCNCBYNCBCNSBYNSBCNiBYNiBCNyBYNworICAgICAgICogcmdieDIgPSBSOCBHOCBSOSBHOSBSYSBHYSBSYiBHYiBCOCBYOCBCOSBYOSBCYSBYYSBCYiBYYgorICAgICAgICogcmdieDMgPSBSYyBHYyBSZCBHZCBSZSBHZSBSZiBHZiBCYyBYYyBCZCBYZCBCZSBYZSBCZiBYZgorICAgICAgICoKKyAgICAgICAqIHJnYjAgPSBSMCBHMCBCMCBSMSBHMSBCMSBSMiBHMiBCMiBSMyBHMyBCMyBSNCBHNCBCNCBSNQorICAgICAgICogcmdiMSA9IEc1IEI1IFI2IEc2IEI2IFI3IEc3IEI3IFI4IEc4IEI4IFI5IEc5IEI5IFJhIEdhCisgICAgICAgKiByZ2IyID0gQmEgUmIgR2IgQmIgUmMgR2MgQmMgUmQgR2QgQmQgUmUgR2UgQmUgUmYgR2YgQmYKKyAgICAgICAqLworICAgICAgcmdiMCA9IHZlY19wZXJtKHJnYngwLCByZ2J4MSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCX0lOREVYMCk7CisgICAgICByZ2IxID0gdmVjX3Blcm0ocmdieDEsIHJnYngyLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JfSU5ERVgxKTsKKyAgICAgIHJnYjIgPSB2ZWNfcGVybShyZ2J4MiwgcmdieDMsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQl9JTkRFWDIpOworI2Vsc2UKKyAgICAgIC8qIHJnYngwID0gUjAgRzAgUjEgRzEgUjIgRzIgUjMgRzMgQjAgWDAgQjEgWDEgQjIgWDIgQjMgWDMKKyAgICAgICAqIHJnYngxID0gUjQgRzQgUjUgRzUgUjYgRzYgUjcgRzcgQjQgWDQgQjUgWDUgQjYgWDYgQjcgWDcKKyAgICAgICAqIHJnYngyID0gUjggRzggUjkgRzkgUmEgR2EgUmIgR2IgQjggWDggQjkgWDkgQmEgWGEgQmIgWGIKKyAgICAgICAqIHJnYngzID0gUmMgR2MgUmQgR2QgUmUgR2UgUmYgR2YgQmMgWGMgQmQgWGQgQmUgWGUgQmYgWGYKKyAgICAgICAqCisgICAgICAgKiByZ2IwID0gUjAgRzAgQjAgWDAgUjEgRzEgQjEgWDEgUjIgRzIgQjIgWDIgUjMgRzMgQjMgWDMKKyAgICAgICAqIHJnYjEgPSBSNCBHNCBCNCBYNCBSNSBHNSBCNSBYNSBSNiBHNiBCNiBYNiBSNyBHNyBCNyBYNworICAgICAgICogcmdiMiA9IFI4IEc4IEI4IFg4IFI5IEc5IEI5IFg5IFJhIEdhIEJhIFhhIFJiIEdiIEJiIFhiCisgICAgICAgKiByZ2IzID0gUmMgR2MgQmMgWGMgUmQgR2QgQmQgWGQgUmUgR2UgQmUgWGUgUmYgR2YgQmYgWGYKKyAgICAgICAqLworICAgICAgcmdiMCA9IHZlY19wZXJtKHJnYngwLCByZ2J4MCwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCX0lOREVYKTsKKyAgICAgIHJnYjEgPSB2ZWNfcGVybShyZ2J4MSwgcmdieDEsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQl9JTkRFWCk7CisgICAgICByZ2IyID0gdmVjX3Blcm0ocmdieDIsIHJnYngyLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JfSU5ERVgpOworICAgICAgcmdiMyA9IHZlY19wZXJtKHJnYngzLCByZ2J4MywgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCX0lOREVYKTsKKyNlbmRpZgorCisjaWYgX19CSUdfRU5ESUFOX18KKyAgICAgIG9mZnNldCA9IChzaXplX3Qpb3V0cHRyICYgMTU7CisgICAgICBpZiAob2Zmc2V0KSB7CisgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdW5hbGlnbmVkX3NoaWZ0X2luZGV4OworICAgICAgICBpbnQgYnl0ZXMgPSBudW1fY29scyArIG9mZnNldDsKKworICAgICAgICBpZiAoYnl0ZXMgPCAoUkdCX1BJWEVMU0laRSArIDEpICogMTYgJiYgKGJ5dGVzICYgMTUpKSB7CisgICAgICAgICAgLyogU2xvdyBwYXRoIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJ3cml0ZS4gIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0bworICAgICAgICAgICAqIHdyaXRlIGEgcGFydGlhbCBBbHRpVmVjIHJlZ2lzdGVyLCBvdmVyd3JpdGUgd291bGQgb2NjdXIgb24gdGhlCisgICAgICAgICAgICogbGFzdCBjaHVuayBvZiB0aGUgbGFzdCBpbWFnZSByb3cgaWYgdGhlIHJpZ2h0IGVkZ2UgaXMgbm90IG9uIGEKKyAgICAgICAgICAgKiAxNi1ieXRlIGJvdW5kYXJ5LiAgSXQgY291bGQgYWxzbyBvY2N1ciBvbiBvdGhlciByb3dzIGlmIHRoZSBieXRlcworICAgICAgICAgICAqIHBlciByb3cgaXMgbG93IGVub3VnaC4gIFNpbmNlIHdlIGNhbid0IGRldGVybWluZSB3aGV0aGVyIHdlJ3JlIG9uCisgICAgICAgICAgICogdGhlIGxhc3QgaW1hZ2Ugcm93LCB3ZSBoYXZlIHRvIGFzc3VtZSBldmVyeSByb3cgaXMgdGhlIGxhc3QuCisgICAgICAgICAgICovCisgICAgICAgICAgdmVjX3N0KHJnYjAsIDAsIHRtcGJ1Zik7CisgICAgICAgICAgdmVjX3N0KHJnYjEsIDE2LCB0bXBidWYpOworICAgICAgICAgIHZlY19zdChyZ2IyLCAzMiwgdG1wYnVmKTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICB2ZWNfc3QocmdiMywgNDgsIHRtcGJ1Zik7CisjZW5kaWYKKyAgICAgICAgICBtZW1jcHkob3V0cHRyLCB0bXBidWYsIG1pbihudW1fY29scywgUkdCX1BJWEVMU0laRSAqIDE2KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgdW5hbGlnbmVkX3NoaWZ0X2luZGV4ID0gdmVjX2x2c2woMCwgb3V0cHRyKTsKKyAgICAgICAgICBlZGdlbCA9IHZlY19sZCgwLCBvdXRwdHIpOworICAgICAgICAgIGVkZ2VoID0gdmVjX2xkKG1pbihudW1fY29scyAtIDEsIFJHQl9QSVhFTFNJWkUgKiAxNiksIG91dHB0cik7CisgICAgICAgICAgZWRnZXMgPSB2ZWNfcGVybShlZGdlaCwgZWRnZWwsIHVuYWxpZ25lZF9zaGlmdF9pbmRleCk7CisgICAgICAgICAgdW5hbGlnbmVkX3NoaWZ0X2luZGV4ID0gdmVjX2x2c3IoMCwgb3V0cHRyKTsKKyAgICAgICAgICBvdXQwID0gdmVjX3Blcm0oZWRnZXMsIHJnYjAsIHVuYWxpZ25lZF9zaGlmdF9pbmRleCk7CisgICAgICAgICAgb3V0MSA9IHZlY19wZXJtKHJnYjAsIHJnYjEsIHVuYWxpZ25lZF9zaGlmdF9pbmRleCk7CisgICAgICAgICAgb3V0MiA9IHZlY19wZXJtKHJnYjEsIHJnYjIsIHVuYWxpZ25lZF9zaGlmdF9pbmRleCk7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgb3V0MyA9IHZlY19wZXJtKHJnYjIsIHJnYjMsIHVuYWxpZ25lZF9zaGlmdF9pbmRleCk7CisgICAgICAgICAgb3V0NCA9IHZlY19wZXJtKHJnYjMsIGVkZ2VzLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworI2Vsc2UKKyAgICAgICAgICBvdXQzID0gdmVjX3Blcm0ocmdiMiwgZWRnZXMsIHVuYWxpZ25lZF9zaGlmdF9pbmRleCk7CisjZW5kaWYKKyAgICAgICAgICB2ZWNfc3Qob3V0MCwgMCwgb3V0cHRyKTsKKyAgICAgICAgICBpZiAoYnl0ZXMgPiAxNikKKyAgICAgICAgICAgIHZlY19zdChvdXQxLCAxNiwgb3V0cHRyKTsKKyAgICAgICAgICBpZiAoYnl0ZXMgPiAzMikKKyAgICAgICAgICAgIHZlY19zdChvdXQyLCAzMiwgb3V0cHRyKTsKKyAgICAgICAgICBpZiAoYnl0ZXMgPiA0OCkKKyAgICAgICAgICAgIHZlY19zdChvdXQzLCA0OCwgb3V0cHRyKTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICBpZiAoYnl0ZXMgPiA2NCkKKyAgICAgICAgICAgIHZlY19zdChvdXQ0LCA2NCwgb3V0cHRyKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICB9IGVsc2UgeworI2VuZGlmIC8qIF9fQklHX0VORElBTl9fICovCisgICAgICAgIGlmIChudW1fY29scyA8IFJHQl9QSVhFTFNJWkUgKiAxNiAmJiAobnVtX2NvbHMgJiAxNSkpIHsKKyAgICAgICAgICAvKiBTbG93IHBhdGggKi8KKyAgICAgICAgICBWRUNfU1QocmdiMCwgMCwgdG1wYnVmKTsKKyAgICAgICAgICBWRUNfU1QocmdiMSwgMTYsIHRtcGJ1Zik7CisgICAgICAgICAgVkVDX1NUKHJnYjIsIDMyLCB0bXBidWYpOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgICAgIFZFQ19TVChyZ2IzLCA0OCwgdG1wYnVmKTsKKyNlbmRpZgorICAgICAgICAgIG1lbWNweShvdXRwdHIsIHRtcGJ1ZiwgbWluKG51bV9jb2xzLCBSR0JfUElYRUxTSVpFICogMTYpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICBWRUNfU1QocmdiMCwgMCwgb3V0cHRyKTsKKyAgICAgICAgICBpZiAobnVtX2NvbHMgPiAxNikKKyAgICAgICAgICAgIFZFQ19TVChyZ2IxLCAxNiwgb3V0cHRyKTsKKyAgICAgICAgICBpZiAobnVtX2NvbHMgPiAzMikKKyAgICAgICAgICAgIFZFQ19TVChyZ2IyLCAzMiwgb3V0cHRyKTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICBpZiAobnVtX2NvbHMgPiA0OCkKKyAgICAgICAgICAgIFZFQ19TVChyZ2IzLCA0OCwgb3V0cHRyKTsKKyNlbmRpZgorICAgICAgICB9CisjaWYgX19CSUdfRU5ESUFOX18KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pkY29sb3ItYWx0aXZlYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pkY29sb3ItYWx0aXZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMzViNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamRjb2xvci1hbHRpdmVjLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisvKiBZQ0MgLS0+IFJHQiBDT05WRVJTSU9OICovCisKKyNpbmNsdWRlICJqc2ltZF9hbHRpdmVjLmgiCisKKworI2RlZmluZSBGXzBfMzQ0ICAyMjU1NCAgICAgICAgICAgICAgLyogRklYKDAuMzQ0MTQpICovCisjZGVmaW5lIEZfMF83MTQgIDQ2ODAyICAgICAgICAgICAgICAvKiBGSVgoMC43MTQxNCkgKi8KKyNkZWZpbmUgRl8xXzQwMiAgOTE4ODEgICAgICAgICAgICAgIC8qIEZJWCgxLjQwMjAwKSAqLworI2RlZmluZSBGXzFfNzcyICAxMTYxMzAgICAgICAgICAgICAgLyogRklYKDEuNzcyMDApICovCisjZGVmaW5lIEZfMF80MDIgIChGXzFfNDAyIC0gNjU1MzYpICAvKiBGSVgoMS40MDIwMCkgLSBGSVgoMSkgKi8KKyNkZWZpbmUgRl8wXzI4NSAgKDY1NTM2IC0gRl8wXzcxNCkgIC8qIEZJWCgxKSAtIEZJWCgwLjcxNDE0KSAqLworI2RlZmluZSBGXzBfMjI4ICAoMTMxMDcyIC0gRl8xXzc3MikgLyogRklYKDIpIC0gRklYKDEuNzcyMDApICovCisKKyNkZWZpbmUgU0NBTEVCSVRTICAxNgorI2RlZmluZSBPTkVfSEFMRiAgKDEgPDwgKFNDQUxFQklUUyAtIDEpKQorCisjZGVmaW5lIFJHQl9JTkRFWDAgXAorICB7ICAwLCAgMSwgIDgsICAyLCAgMywgMTAsICA0LCAgNSwgMTIsICA2LCAgNywgMTQsIDE2LCAxNywgMjQsIDE4IH0KKyNkZWZpbmUgUkdCX0lOREVYMSBcCisgIHsgIDMsIDEwLCAgNCwgIDUsIDEyLCAgNiwgIDcsIDE0LCAxNiwgMTcsIDI0LCAxOCwgMTksIDI2LCAyMCwgMjEgfQorI2RlZmluZSBSR0JfSU5ERVgyIFwKKyAgeyAxMiwgIDYsICA3LCAxNCwgMTYsIDE3LCAyNCwgMTgsIDE5LCAyNiwgMjAsIDIxLCAyOCwgMjIsIDIzLCAzMCB9CisjaW5jbHVkZSAiamRjb2xleHQtYWx0aXZlYy5jIgorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorI2RlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYWx0aXZlYyAganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X2FsdGl2ZWMKKyNpbmNsdWRlICJqZGNvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQl9JTkRFWDAKKyN1bmRlZiBSR0JfSU5ERVgxCisjdW5kZWYgUkdCX0lOREVYMgorI3VuZGVmIGpzaW1kX3ljY19yZ2JfY29udmVydF9hbHRpdmVjCisKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCisjZGVmaW5lIFJHQl9JTkRFWCBcCisgIHsgIDAsICAxLCAgOCwgIDksICAyLCAgMywgMTAsIDExLCAgNCwgIDUsIDEyLCAxMywgIDYsICA3LCAxNCwgMTUgfQorI2RlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYWx0aXZlYyAganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9hbHRpdmVjCisjaW5jbHVkZSAiamRjb2xleHQtYWx0aXZlYy5jIgorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBSR0JfSU5ERVgKKyN1bmRlZiBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCisjZGVmaW5lIFJHQl9JTkRFWDAgXAorICB7ICA4LCAgMSwgIDAsIDEwLCAgMywgIDIsIDEyLCAgNSwgIDQsIDE0LCAgNywgIDYsIDI0LCAxNywgMTYsIDI2IH0KKyNkZWZpbmUgUkdCX0lOREVYMSBcCisgIHsgIDMsICAyLCAxMiwgIDUsICA0LCAxNCwgIDcsICA2LCAyNCwgMTcsIDE2LCAyNiwgMTksIDE4LCAyOCwgMjEgfQorI2RlZmluZSBSR0JfSU5ERVgyIFwKKyAgeyAgNCwgMTQsICA3LCAgNiwgMjQsIDE3LCAxNiwgMjYsIDE5LCAxOCwgMjgsIDIxLCAyMCwgMzAsIDIzLCAyMiB9CisjZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hbHRpdmVjICBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpkY29sZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCX0lOREVYMAorI3VuZGVmIFJHQl9JTkRFWDEKKyN1bmRlZiBSR0JfSU5ERVgyCisjdW5kZWYganNpbWRfeWNjX3JnYl9jb252ZXJ0X2FsdGl2ZWMKKworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyNkZWZpbmUgUkdCX0lOREVYIFwKKyAgeyAgOCwgIDEsICAwLCAgOSwgMTAsICAzLCAgMiwgMTEsIDEyLCAgNSwgIDQsIDEzLCAxNCwgIDcsICA2LCAxNSB9CisjZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hbHRpdmVjICBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X2FsdGl2ZWMKKyNpbmNsdWRlICJqZGNvbGV4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQl9JTkRFWAorI3VuZGVmIGpzaW1kX3ljY19yZ2JfY29udmVydF9hbHRpdmVjCisKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hCR1JfUElYRUxTSVpFCisjZGVmaW5lIFJHQl9JTkRFWCBcCisgIHsgIDksICA4LCAgMSwgIDAsIDExLCAxMCwgIDMsICAyLCAxMywgMTIsICA1LCAgNCwgMTUsIDE0LCAgNywgIDYgfQorI2RlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYWx0aXZlYyAganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9hbHRpdmVjCisjaW5jbHVkZSAiamRjb2xleHQtYWx0aXZlYy5jIgorI3VuZGVmIFJHQl9QSVhFTFNJWkUKKyN1bmRlZiBSR0JfSU5ERVgKKyN1bmRlZiBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYWx0aXZlYworCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorI2RlZmluZSBSR0JfSU5ERVggXAorICB7ICA5LCAgMCwgIDEsICA4LCAxMSwgIDIsICAzLCAxMCwgMTMsICA0LCAgNSwgMTIsIDE1LCAgNiwgIDcsIDE0IH0KKyNkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X2FsdGl2ZWMgIGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfYWx0aXZlYworI2luY2x1ZGUgImpkY29sZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCX0lOREVYCisjdW5kZWYganNpbWRfeWNjX3JnYl9jb252ZXJ0X2FsdGl2ZWMKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qZG1lcmdlLWFsdGl2ZWMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qZG1lcmdlLWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWM1NzdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pkbWVyZ2UtYWx0aXZlYy5jCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQWx0aVZlYyBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogTUVSR0VEIFlDQyAtLT4gUkdCIENPTlZFUlNJT04gQU5EIFVQU0FNUExJTkcgKi8KKworI2luY2x1ZGUgImpzaW1kX2FsdGl2ZWMuaCIKKworCisjZGVmaW5lIEZfMF8zNDQgIDIyNTU0ICAgICAgICAgICAgICAvKiBGSVgoMC4zNDQxNCkgKi8KKyNkZWZpbmUgRl8wXzcxNCAgNDY4MDIgICAgICAgICAgICAgIC8qIEZJWCgwLjcxNDE0KSAqLworI2RlZmluZSBGXzFfNDAyICA5MTg4MSAgICAgICAgICAgICAgLyogRklYKDEuNDAyMDApICovCisjZGVmaW5lIEZfMV83NzIgIDExNjEzMCAgICAgICAgICAgICAvKiBGSVgoMS43NzIwMCkgKi8KKyNkZWZpbmUgRl8wXzQwMiAgKEZfMV80MDIgLSA2NTUzNikgIC8qIEZJWCgxLjQwMjAwKSAtIEZJWCgxKSAqLworI2RlZmluZSBGXzBfMjg1ICAoNjU1MzYgLSBGXzBfNzE0KSAgLyogRklYKDEpIC0gRklYKDAuNzE0MTQpICovCisjZGVmaW5lIEZfMF8yMjggICgxMzEwNzIgLSBGXzFfNzcyKSAvKiBGSVgoMikgLSBGSVgoMS43NzIwMCkgKi8KKworI2RlZmluZSBTQ0FMRUJJVFMgIDE2CisjZGVmaW5lIE9ORV9IQUxGICAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyNkZWZpbmUgUkdCX0lOREVYMCBcCisgIHsgIDAsICAxLCAgOCwgIDIsICAzLCAxMCwgIDQsICA1LCAxMiwgIDYsICA3LCAxNCwgMTYsIDE3LCAyNCwgMTggfQorI2RlZmluZSBSR0JfSU5ERVgxIFwKKyAgeyAgMywgMTAsICA0LCAgNSwgMTIsICA2LCAgNywgMTQsIDE2LCAxNywgMjQsIDE4LCAxOSwgMjYsIDIwLCAyMSB9CisjZGVmaW5lIFJHQl9JTkRFWDIgXAorICB7IDEyLCAgNiwgIDcsIDE0LCAxNiwgMTcsIDI0LCAxOCwgMTksIDI2LCAyMCwgMjEsIDI4LCAyMiwgMjMsIDMwIH0KKyNpbmNsdWRlICJqZG1yZ2V4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorCisjZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCisjZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMgXAorICBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI2RlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjIFwKKyAganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyNpbmNsdWRlICJqZG1yZ2V4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQl9JTkRFWDAKKyN1bmRlZiBSR0JfSU5ERVgxCisjdW5kZWYgUkdCX0lOREVYMgorI3VuZGVmIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyN1bmRlZiBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCisjZGVmaW5lIFJHQl9JTkRFWCBcCisgIHsgIDAsICAxLCAgOCwgIDksICAyLCAgMywgMTAsIDExLCAgNCwgIDUsIDEyLCAxMywgIDYsICA3LCAxNCwgMTUgfQorI2RlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjIFwKKyAganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisjZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMgXAorICBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyNpbmNsdWRlICJqZG1yZ2V4dC1hbHRpdmVjLmMiCisjdW5kZWYgUkdCX1BJWEVMU0laRQorI3VuZGVmIFJHQl9JTkRFWAorI3VuZGVmIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyN1bmRlZiBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisKKyNkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyNkZWZpbmUgUkdCX0lOREVYMCBcCisgIHsgIDgsICAxLCAgMCwgMTAsICAzLCAgMiwgMTIsICA1LCAgNCwgMTQsICA3LCAgNiwgMjQsIDE3LCAxNiwgMjYgfQorI2RlZmluZSBSR0JfSU5ERVgxIFwKKyAgeyAgMywgIDIsIDEyLCAgNSwgIDQsIDE0LCAgNywgIDYsIDI0LCAxNywgMTYsIDI2LCAxOSwgMTgsIDI4LCAyMSB9CisjZGVmaW5lIFJHQl9JTkRFWDIgXAorICB7ICA0LCAxNCwgIDcsICA2LCAyNCwgMTcsIDE2LCAyNiwgMTksIDE4LCAyOCwgMjEsIDIwLCAzMCwgMjMsIDIyIH0KKyNkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYyBcCisgIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjCisjZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMgXAorICBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI2luY2x1ZGUgImpkbXJnZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCX0lOREVYMAorI3VuZGVmIFJHQl9JTkRFWDEKKyN1bmRlZiBSR0JfSU5ERVgyCisjdW5kZWYganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI3VuZGVmIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSWF9QSVhFTFNJWkUKKyNkZWZpbmUgUkdCX0lOREVYIFwKKyAgeyAgOCwgIDEsICAwLCAgOSwgMTAsICAzLCAgMiwgMTEsIDEyLCAgNSwgIDQsIDEzLCAxNCwgIDcsICA2LCAxNSB9CisjZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMgXAorICBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyNkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYyBcCisgIGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI2luY2x1ZGUgImpkbXJnZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCX0lOREVYCisjdW5kZWYganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI3VuZGVmIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyNkZWZpbmUgUkdCX0lOREVYIFwKKyAgeyAgOSwgIDgsICAxLCAgMCwgMTEsIDEwLCAgMywgIDIsIDEzLCAxMiwgIDUsICA0LCAxNSwgMTQsICA3LCAgNiB9CisjZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMgXAorICBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyNkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYyBcCisgIGpzaW1kX2gydjJfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI2luY2x1ZGUgImpkbXJnZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCX0lOREVYCisjdW5kZWYganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI3VuZGVmIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKworI2RlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWFJHQl9QSVhFTFNJWkUKKyNkZWZpbmUgUkdCX0lOREVYIFwKKyAgeyAgOSwgIDAsICAxLCAgOCwgMTEsICAyLCAgMywgMTAsIDEzLCAgNCwgIDUsIDEyLCAxNSwgIDYsICA3LCAxNCB9CisjZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMgXAorICBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKKyNkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYyBcCisgIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI2luY2x1ZGUgImpkbXJnZXh0LWFsdGl2ZWMuYyIKKyN1bmRlZiBSR0JfUElYRUxTSVpFCisjdW5kZWYgUkdCX0lOREVYCisjdW5kZWYganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYworI3VuZGVmIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qZG1yZ2V4dC1hbHRpdmVjLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamRtcmdleHQtYWx0aXZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjAyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamRtcmdleHQtYWx0aXZlYy5jCkBAIC0wLDAgKzEsMzI5IEBACisvKgorICogQWx0aVZlYyBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGpkbWVyZ2UtYWx0aXZlYy5jICovCisKKwordm9pZCBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIEpTQU1QUk9XIG91dHB0ciwgaW5wdHIwLCBpbnB0cjEsIGlucHRyMjsKKyAgaW50IHBpdGNoID0gb3V0cHV0X3dpZHRoICogUkdCX1BJWEVMU0laRSwgbnVtX2NvbHMsIHlsb29wOworI2lmIF9fQklHX0VORElBTl9fCisgIGludCBvZmZzZXQ7CisjZW5kaWYKKyAgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpIHRtcGJ1ZltSR0JfUElYRUxTSVpFICogMTZdOworCisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmdiMCwgcmdiMSwgcmdiMiwgcmdieDAsIHJnYngxLCByZ2J4MiwgcmdieDMsCisgICAgeSwgY2IsIGNyOworI2lmIF9fQklHX0VORElBTl9fCisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZWRnZWwsIGVkZ2VoLCBlZGdlcywgb3V0MCwgb3V0MSwgb3V0Miwgb3V0MzsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBvdXQ0OworI2VuZGlmCisjZW5kaWYKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2IzOworI2VuZGlmCisgIF9fdmVjdG9yIHNob3J0IHJnMCwgcmcxLCByZzIsIHJnMywgYngwLCBieDEsIGJ4MiwgYngzLCB5ZSwgeW8sIGNibCwgY2JoLAorICAgIGNybCwgY3JoLCByX3lsLCByX3loLCBnX3lsLCBnX3loLCBiX3lsLCBiX3loLCBnX3kwdywgZ195MXcsIGdfeTJ3LCBnX3kzdywKKyAgICBybCwgcmgsIGdsLCBnaCwgYmwsIGJoLCByZSwgcm8sIGdlLCBnbywgYmUsIGJvOworICBfX3ZlY3RvciBpbnQgZ195MCwgZ195MSwgZ195MiwgZ195MzsKKworICAvKiBDb25zdGFudHMKKyAgICogTk9URTogVGhlID4+IDEgaXMgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgdGhhdCB2ZWNfbWFkZHMoKSByZXR1cm5zIDE3CisgICAqIGhpZ2gtb3JkZXIgYml0cywgbm90IDE2LgorICAgKi8KKyAgX192ZWN0b3Igc2hvcnQgcHdfZjA0MDIgPSB7IF9fOFgoRl8wXzQwMiA+PiAxKSB9LAorICAgIHB3X21mMDIyOCA9IHsgX184WCgtRl8wXzIyOCA+PiAxKSB9LAorICAgIHB3X21mMDM0NF9mMDI4NSA9IHsgX180WDIoLUZfMF8zNDQsIEZfMF8yODUpIH0sCisgICAgcHdfb25lID0geyBfXzhYKDEpIH0sIHB3XzI1NSA9IHsgX184WCgyNTUpIH0sCisgICAgcHdfY2ogPSB7IF9fOFgoQ0VOVEVSSlNBTVBMRSkgfTsKKyAgX192ZWN0b3IgaW50IHBkX29uZWhhbGYgPSB7IF9fNFgoT05FX0hBTEYpIH07CisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGJfemVybyA9IHsgX18xNlgoMCkgfSwKKyNpZiBfX0JJR19FTkRJQU5fXworICAgIHNoaWZ0X3BhY2tfaW5kZXggPQorICAgICAgeyAgMCwgIDEsICA0LCAgNSwgIDgsICA5LCAxMiwgMTMsIDE2LCAxNywgMjAsIDIxLCAyNCwgMjUsIDI4LCAyOSB9LAorICAgIGV2ZW5faW5kZXggPQorICAgICAgeyAgMCwgMTYsICAwLCAxOCwgIDAsIDIwLCAgMCwgMjIsICAwLCAyNCwgIDAsIDI2LCAgMCwgMjgsICAwLCAzMCB9LAorICAgIG9kZF9pbmRleCA9CisgICAgICB7ICAwLCAxNywgIDAsIDE5LCAgMCwgMjEsICAwLCAyMywgIDAsIDI1LCAgMCwgMjcsICAwLCAyOSwgIDAsIDMxIH07CisjZWxzZQorICAgIHNoaWZ0X3BhY2tfaW5kZXggPQorICAgICAgeyAgMiwgIDMsICA2LCAgNywgMTAsIDExLCAxNCwgMTUsIDE4LCAxOSwgMjIsIDIzLCAyNiwgMjcsIDMwLCAzMSB9LAorICAgIGV2ZW5faW5kZXggPQorICAgICAgeyAxNiwgIDAsIDE4LCAgMCwgMjAsICAwLCAyMiwgIDAsIDI0LCAgMCwgMjYsICAwLCAyOCwgIDAsIDMwLCAgMCB9LAorICAgIG9kZF9pbmRleCA9CisgICAgICB7IDE3LCAgMCwgMTksICAwLCAyMSwgIDAsIDIzLCAgMCwgMjUsICAwLCAyNywgIDAsIDI5LCAgMCwgMzEsICAwIH07CisjZW5kaWYKKworICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cl07CisgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOworICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdOworCisgIGZvciAobnVtX2NvbHMgPSBwaXRjaDsgbnVtX2NvbHMgPiAwOyBpbnB0cjEgKz0gMTYsIGlucHRyMiArPSAxNikgeworCisgICAgY2IgPSB2ZWNfbGQoMCwgaW5wdHIxKTsKKyAgICAvKiBOT1RFOiBXZSBoYXZlIHRvIHVzZSB2ZWNfbWVyZ2UqKCkgaGVyZSBiZWNhdXNlIHZlY191bnBhY2sqKCkgZG9lc24ndAorICAgICAqIHN1cHBvcnQgdW5zaWduZWQgdmVjdG9ycy4KKyAgICAgKi8KKyAgICBjYmwgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KVZFQ19VTlBBQ0tIVShjYik7CisgICAgY2JoID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydClWRUNfVU5QQUNLTFUoY2IpOworICAgIGNibCA9IHZlY19zdWIoY2JsLCBwd19jaik7CisgICAgY2JoID0gdmVjX3N1YihjYmgsIHB3X2NqKTsKKworICAgIGNyID0gdmVjX2xkKDAsIGlucHRyMik7CisgICAgY3JsID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydClWRUNfVU5QQUNLSFUoY3IpOworICAgIGNyaCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpVkVDX1VOUEFDS0xVKGNyKTsKKyAgICBjcmwgPSB2ZWNfc3ViKGNybCwgcHdfY2opOworICAgIGNyaCA9IHZlY19zdWIoY3JoLCBwd19jaik7CisKKyAgICAvKiAoT3JpZ2luYWwpCisgICAgICogUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICAgKiBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgICAqIEIgPSBZICsgMS43NzIwMCAqIENiCisgICAgICoKKyAgICAgKiAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgKiBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisgICAgICogRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgICAqIEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorICAgICAqLworICAgIGJfeWwgPSB2ZWNfYWRkKGNibCwgY2JsKTsKKyAgICBiX3loID0gdmVjX2FkZChjYmgsIGNiaCk7CisgICAgYl95bCA9IHZlY19tYWRkcyhiX3lsLCBwd19tZjAyMjgsIHB3X29uZSk7CisgICAgYl95aCA9IHZlY19tYWRkcyhiX3loLCBwd19tZjAyMjgsIHB3X29uZSk7CisgICAgYl95bCA9IHZlY19zcmEoYl95bCwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB3X29uZSk7CisgICAgYl95aCA9IHZlY19zcmEoYl95aCwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB3X29uZSk7CisgICAgYl95bCA9IHZlY19hZGQoYl95bCwgY2JsKTsKKyAgICBiX3loID0gdmVjX2FkZChiX3loLCBjYmgpOworICAgIGJfeWwgPSB2ZWNfYWRkKGJfeWwsIGNibCk7CisgICAgYl95aCA9IHZlY19hZGQoYl95aCwgY2JoKTsKKworICAgIHJfeWwgPSB2ZWNfYWRkKGNybCwgY3JsKTsKKyAgICByX3loID0gdmVjX2FkZChjcmgsIGNyaCk7CisgICAgcl95bCA9IHZlY19tYWRkcyhyX3lsLCBwd19mMDQwMiwgcHdfb25lKTsKKyAgICByX3loID0gdmVjX21hZGRzKHJfeWgsIHB3X2YwNDAyLCBwd19vbmUpOworICAgIHJfeWwgPSB2ZWNfc3JhKHJfeWwsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClwd19vbmUpOworICAgIHJfeWggPSB2ZWNfc3JhKHJfeWgsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClwd19vbmUpOworICAgIHJfeWwgPSB2ZWNfYWRkKHJfeWwsIGNybCk7CisgICAgcl95aCA9IHZlY19hZGQocl95aCwgY3JoKTsKKworICAgIGdfeTB3ID0gdmVjX21lcmdlaChjYmwsIGNybCk7CisgICAgZ195MXcgPSB2ZWNfbWVyZ2VsKGNibCwgY3JsKTsKKyAgICBnX3kwID0gdmVjX21zdW1zKGdfeTB3LCBwd19tZjAzNDRfZjAyODUsIHBkX29uZWhhbGYpOworICAgIGdfeTEgPSB2ZWNfbXN1bXMoZ195MXcsIHB3X21mMDM0NF9mMDI4NSwgcGRfb25laGFsZik7CisgICAgZ195MncgPSB2ZWNfbWVyZ2VoKGNiaCwgY3JoKTsKKyAgICBnX3kzdyA9IHZlY19tZXJnZWwoY2JoLCBjcmgpOworICAgIGdfeTIgPSB2ZWNfbXN1bXMoZ195MncsIHB3X21mMDM0NF9mMDI4NSwgcGRfb25laGFsZik7CisgICAgZ195MyA9IHZlY19tc3VtcyhnX3kzdywgcHdfbWYwMzQ0X2YwMjg1LCBwZF9vbmVoYWxmKTsKKyAgICAvKiBDbGV2ZXIgd2F5IHRvIGF2b2lkIDQgc2hpZnRzICsgMiBwYWNrcy4gIFRoaXMgcGFja3MgdGhlIGhpZ2ggd29yZCBmcm9tCisgICAgICogZWFjaCBkd29yZCBpbnRvIGEgbmV3IDE2LWJpdCB2ZWN0b3IsIHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mCisgICAgICogZGVzY2FsaW5nIHRoZSAzMi1iaXQgcmVzdWx0cyAocmlnaHQtc2hpZnRpbmcgYnkgMTYgYml0cykgYW5kIHRoZW4KKyAgICAgKiBwYWNraW5nIHRoZW0uCisgICAgICovCisgICAgZ195bCA9IHZlY19wZXJtKChfX3ZlY3RvciBzaG9ydClnX3kwLCAoX192ZWN0b3Igc2hvcnQpZ195MSwKKyAgICAgICAgICAgICAgICAgICAgc2hpZnRfcGFja19pbmRleCk7CisgICAgZ195aCA9IHZlY19wZXJtKChfX3ZlY3RvciBzaG9ydClnX3kyLCAoX192ZWN0b3Igc2hvcnQpZ195MywKKyAgICAgICAgICAgICAgICAgICAgc2hpZnRfcGFja19pbmRleCk7CisgICAgZ195bCA9IHZlY19zdWIoZ195bCwgY3JsKTsKKyAgICBnX3loID0gdmVjX3N1YihnX3loLCBjcmgpOworCisgICAgZm9yICh5bG9vcCA9IDA7IHlsb29wIDwgMiAmJiBudW1fY29scyA+IDA7IHlsb29wKyssCisgICAgICAgICBudW1fY29scyAtPSBSR0JfUElYRUxTSVpFICogMTYsCisgICAgICAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRSAqIDE2LCBpbnB0cjAgKz0gMTYpIHsKKworICAgICAgeSA9IHZlY19sZCgwLCBpbnB0cjApOworICAgICAgeWUgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19wZXJtKHBiX3plcm8sIHksIGV2ZW5faW5kZXgpOworICAgICAgeW8gPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19wZXJtKHBiX3plcm8sIHksIG9kZF9pbmRleCk7CisKKyAgICAgIGlmICh5bG9vcCA9PSAwKSB7CisgICAgICAgIGJlID0gdmVjX2FkZChiX3lsLCB5ZSk7CisgICAgICAgIGJvID0gdmVjX2FkZChiX3lsLCB5byk7CisgICAgICAgIHJlID0gdmVjX2FkZChyX3lsLCB5ZSk7CisgICAgICAgIHJvID0gdmVjX2FkZChyX3lsLCB5byk7CisgICAgICAgIGdlID0gdmVjX2FkZChnX3lsLCB5ZSk7CisgICAgICAgIGdvID0gdmVjX2FkZChnX3lsLCB5byk7CisgICAgICB9IGVsc2UgeworICAgICAgICBiZSA9IHZlY19hZGQoYl95aCwgeWUpOworICAgICAgICBibyA9IHZlY19hZGQoYl95aCwgeW8pOworICAgICAgICByZSA9IHZlY19hZGQocl95aCwgeWUpOworICAgICAgICBybyA9IHZlY19hZGQocl95aCwgeW8pOworICAgICAgICBnZSA9IHZlY19hZGQoZ195aCwgeWUpOworICAgICAgICBnbyA9IHZlY19hZGQoZ195aCwgeW8pOworICAgICAgfQorCisgICAgICBybCA9IHZlY19tZXJnZWgocmUsIHJvKTsKKyAgICAgIHJoID0gdmVjX21lcmdlbChyZSwgcm8pOworICAgICAgZ2wgPSB2ZWNfbWVyZ2VoKGdlLCBnbyk7CisgICAgICBnaCA9IHZlY19tZXJnZWwoZ2UsIGdvKTsKKyAgICAgIGJsID0gdmVjX21lcmdlaChiZSwgYm8pOworICAgICAgYmggPSB2ZWNfbWVyZ2VsKGJlLCBibyk7CisKKyAgICAgIHJnMCA9IHZlY19tZXJnZWgocmwsIGdsKTsKKyAgICAgIGJ4MCA9IHZlY19tZXJnZWgoYmwsIHB3XzI1NSk7CisgICAgICByZzEgPSB2ZWNfbWVyZ2VsKHJsLCBnbCk7CisgICAgICBieDEgPSB2ZWNfbWVyZ2VsKGJsLCBwd18yNTUpOworICAgICAgcmcyID0gdmVjX21lcmdlaChyaCwgZ2gpOworICAgICAgYngyID0gdmVjX21lcmdlaChiaCwgcHdfMjU1KTsKKyAgICAgIHJnMyA9IHZlY19tZXJnZWwocmgsIGdoKTsKKyAgICAgIGJ4MyA9IHZlY19tZXJnZWwoYmgsIHB3XzI1NSk7CisKKyAgICAgIHJnYngwID0gdmVjX3BhY2tzdShyZzAsIGJ4MCk7CisgICAgICByZ2J4MSA9IHZlY19wYWNrc3UocmcxLCBieDEpOworICAgICAgcmdieDIgPSB2ZWNfcGFja3N1KHJnMiwgYngyKTsKKyAgICAgIHJnYngzID0gdmVjX3BhY2tzdShyZzMsIGJ4Myk7CisKKyNpZiBSR0JfUElYRUxTSVpFID09IDMKKyAgICAgIC8qIHJnYngwID0gUjAgRzAgUjEgRzEgUjIgRzIgUjMgRzMgQjAgWDAgQjEgWDEgQjIgWDIgQjMgWDMKKyAgICAgICAqIHJnYngxID0gUjQgRzQgUjUgRzUgUjYgRzYgUjcgRzcgQjQgWDQgQjUgWDUgQjYgWDYgQjcgWDcKKyAgICAgICAqIHJnYngyID0gUjggRzggUjkgRzkgUmEgR2EgUmIgR2IgQjggWDggQjkgWDkgQmEgWGEgQmIgWGIKKyAgICAgICAqIHJnYngzID0gUmMgR2MgUmQgR2QgUmUgR2UgUmYgR2YgQmMgWGMgQmQgWGQgQmUgWGUgQmYgWGYKKyAgICAgICAqCisgICAgICAgKiByZ2IwID0gUjAgRzAgQjAgUjEgRzEgQjEgUjIgRzIgQjIgUjMgRzMgQjMgUjQgRzQgQjQgUjUKKyAgICAgICAqIHJnYjEgPSBHNSBCNSBSNiBHNiBCNiBSNyBHNyBCNyBSOCBHOCBCOCBSOSBHOSBCOSBSYSBHYQorICAgICAgICogcmdiMiA9IEJhIFJiIEdiIEJiIFJjIEdjIEJjIFJkIEdkIEJkIFJlIEdlIEJlIFJmIEdmIEJmCisgICAgICAgKi8KKyAgICAgIHJnYjAgPSB2ZWNfcGVybShyZ2J4MCwgcmdieDEsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQl9JTkRFWDApOworICAgICAgcmdiMSA9IHZlY19wZXJtKHJnYngxLCByZ2J4MiwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCX0lOREVYMSk7CisgICAgICByZ2IyID0gdmVjX3Blcm0ocmdieDIsIHJnYngzLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JfSU5ERVgyKTsKKyNlbHNlCisgICAgICAvKiByZ2J4MCA9IFIwIEcwIFIxIEcxIFIyIEcyIFIzIEczIEIwIFgwIEIxIFgxIEIyIFgyIEIzIFgzCisgICAgICAgKiByZ2J4MSA9IFI0IEc0IFI1IEc1IFI2IEc2IFI3IEc3IEI0IFg0IEI1IFg1IEI2IFg2IEI3IFg3CisgICAgICAgKiByZ2J4MiA9IFI4IEc4IFI5IEc5IFJhIEdhIFJiIEdiIEI4IFg4IEI5IFg5IEJhIFhhIEJiIFhiCisgICAgICAgKiByZ2J4MyA9IFJjIEdjIFJkIEdkIFJlIEdlIFJmIEdmIEJjIFhjIEJkIFhkIEJlIFhlIEJmIFhmCisgICAgICAgKgorICAgICAgICogcmdiMCA9IFIwIEcwIEIwIFgwIFIxIEcxIEIxIFgxIFIyIEcyIEIyIFgyIFIzIEczIEIzIFgzCisgICAgICAgKiByZ2IxID0gUjQgRzQgQjQgWDQgUjUgRzUgQjUgWDUgUjYgRzYgQjYgWDYgUjcgRzcgQjcgWDcKKyAgICAgICAqIHJnYjIgPSBSOCBHOCBCOCBYOCBSOSBHOSBCOSBYOSBSYSBHYSBCYSBYYSBSYiBHYiBCYiBYYgorICAgICAgICogcmdiMyA9IFJjIEdjIEJjIFhjIFJkIEdkIEJkIFhkIFJlIEdlIEJlIFhlIFJmIEdmIEJmIFhmCisgICAgICAgKi8KKyAgICAgIHJnYjAgPSB2ZWNfcGVybShyZ2J4MCwgcmdieDAsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQl9JTkRFWCk7CisgICAgICByZ2IxID0gdmVjX3Blcm0ocmdieDEsIHJnYngxLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSR0JfSU5ERVgpOworICAgICAgcmdiMiA9IHZlY19wZXJtKHJnYngyLCByZ2J4MiwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUkdCX0lOREVYKTsKKyAgICAgIHJnYjMgPSB2ZWNfcGVybShyZ2J4MywgcmdieDMsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJHQl9JTkRFWCk7CisjZW5kaWYKKworI2lmIF9fQklHX0VORElBTl9fCisgICAgICBvZmZzZXQgPSAoc2l6ZV90KW91dHB0ciAmIDE1OworICAgICAgaWYgKG9mZnNldCkgeworICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHVuYWxpZ25lZF9zaGlmdF9pbmRleDsKKyAgICAgICAgaW50IGJ5dGVzID0gbnVtX2NvbHMgKyBvZmZzZXQ7CisKKyAgICAgICAgaWYgKGJ5dGVzIDwgKFJHQl9QSVhFTFNJWkUgKyAxKSAqIDE2ICYmIChieXRlcyAmIDE1KSkgeworICAgICAgICAgIC8qIFNsb3cgcGF0aCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyd3JpdGUuICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAgICAgICAgKiB3cml0ZSBhIHBhcnRpYWwgQWx0aVZlYyByZWdpc3Rlciwgb3ZlcndyaXRlIHdvdWxkIG9jY3VyIG9uIHRoZQorICAgICAgICAgICAqIGxhc3QgY2h1bmsgb2YgdGhlIGxhc3QgaW1hZ2Ugcm93IGlmIHRoZSByaWdodCBlZGdlIGlzIG5vdCBvbiBhCisgICAgICAgICAgICogMTYtYnl0ZSBib3VuZGFyeS4gIEl0IGNvdWxkIGFsc28gb2NjdXIgb24gb3RoZXIgcm93cyBpZiB0aGUgYnl0ZXMKKyAgICAgICAgICAgKiBwZXIgcm93IGlzIGxvdyBlbm91Z2guICBTaW5jZSB3ZSBjYW4ndCBkZXRlcm1pbmUgd2hldGhlciB3ZSdyZSBvbgorICAgICAgICAgICAqIHRoZSBsYXN0IGltYWdlIHJvdywgd2UgaGF2ZSB0byBhc3N1bWUgZXZlcnkgcm93IGlzIHRoZSBsYXN0LgorICAgICAgICAgICAqLworICAgICAgICAgIHZlY19zdChyZ2IwLCAwLCB0bXBidWYpOworICAgICAgICAgIHZlY19zdChyZ2IxLCAxNiwgdG1wYnVmKTsKKyAgICAgICAgICB2ZWNfc3QocmdiMiwgMzIsIHRtcGJ1Zik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgdmVjX3N0KHJnYjMsIDQ4LCB0bXBidWYpOworI2VuZGlmCisgICAgICAgICAgbWVtY3B5KG91dHB0ciwgdG1wYnVmLCBtaW4obnVtX2NvbHMsIFJHQl9QSVhFTFNJWkUgKiAxNikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgIHVuYWxpZ25lZF9zaGlmdF9pbmRleCA9IHZlY19sdnNsKDAsIG91dHB0cik7CisgICAgICAgICAgZWRnZWwgPSB2ZWNfbGQoMCwgb3V0cHRyKTsKKyAgICAgICAgICBlZGdlaCA9IHZlY19sZChtaW4obnVtX2NvbHMgLSAxLCBSR0JfUElYRUxTSVpFICogMTYpLCBvdXRwdHIpOworICAgICAgICAgIGVkZ2VzID0gdmVjX3Blcm0oZWRnZWgsIGVkZ2VsLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworICAgICAgICAgIHVuYWxpZ25lZF9zaGlmdF9pbmRleCA9IHZlY19sdnNyKDAsIG91dHB0cik7CisgICAgICAgICAgb3V0MCA9IHZlY19wZXJtKGVkZ2VzLCByZ2IwLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworICAgICAgICAgIG91dDEgPSB2ZWNfcGVybShyZ2IwLCByZ2IxLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworICAgICAgICAgIG91dDIgPSB2ZWNfcGVybShyZ2IxLCByZ2IyLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworI2lmIFJHQl9QSVhFTFNJWkUgPT0gNAorICAgICAgICAgIG91dDMgPSB2ZWNfcGVybShyZ2IyLCByZ2IzLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworICAgICAgICAgIG91dDQgPSB2ZWNfcGVybShyZ2IzLCBlZGdlcywgdW5hbGlnbmVkX3NoaWZ0X2luZGV4KTsKKyNlbHNlCisgICAgICAgICAgb3V0MyA9IHZlY19wZXJtKHJnYjIsIGVkZ2VzLCB1bmFsaWduZWRfc2hpZnRfaW5kZXgpOworI2VuZGlmCisgICAgICAgICAgdmVjX3N0KG91dDAsIDAsIG91dHB0cik7CisgICAgICAgICAgaWYgKGJ5dGVzID4gMTYpCisgICAgICAgICAgICB2ZWNfc3Qob3V0MSwgMTYsIG91dHB0cik7CisgICAgICAgICAgaWYgKGJ5dGVzID4gMzIpCisgICAgICAgICAgICB2ZWNfc3Qob3V0MiwgMzIsIG91dHB0cik7CisgICAgICAgICAgaWYgKGJ5dGVzID4gNDgpCisgICAgICAgICAgICB2ZWNfc3Qob3V0MywgNDgsIG91dHB0cik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgaWYgKGJ5dGVzID4gNjQpCisgICAgICAgICAgICB2ZWNfc3Qob3V0NCwgNjQsIG91dHB0cik7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBfX0JJR19FTkRJQU5fXyAqLworICAgICAgICBpZiAobnVtX2NvbHMgPCBSR0JfUElYRUxTSVpFICogMTYgJiYgKG51bV9jb2xzICYgMTUpKSB7CisgICAgICAgICAgLyogU2xvdyBwYXRoICovCisgICAgICAgICAgVkVDX1NUKHJnYjAsIDAsIHRtcGJ1Zik7CisgICAgICAgICAgVkVDX1NUKHJnYjEsIDE2LCB0bXBidWYpOworICAgICAgICAgIFZFQ19TVChyZ2IyLCAzMiwgdG1wYnVmKTsKKyNpZiBSR0JfUElYRUxTSVpFID09IDQKKyAgICAgICAgICBWRUNfU1QocmdiMywgNDgsIHRtcGJ1Zik7CisjZW5kaWYKKyAgICAgICAgICBtZW1jcHkob3V0cHRyLCB0bXBidWYsIG1pbihudW1fY29scywgUkdCX1BJWEVMU0laRSAqIDE2KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgVkVDX1NUKHJnYjAsIDAsIG91dHB0cik7CisgICAgICAgICAgaWYgKG51bV9jb2xzID4gMTYpCisgICAgICAgICAgICBWRUNfU1QocmdiMSwgMTYsIG91dHB0cik7CisgICAgICAgICAgaWYgKG51bV9jb2xzID4gMzIpCisgICAgICAgICAgICBWRUNfU1QocmdiMiwgMzIsIG91dHB0cik7CisjaWYgUkdCX1BJWEVMU0laRSA9PSA0CisgICAgICAgICAgaWYgKG51bV9jb2xzID4gNDgpCisgICAgICAgICAgICBWRUNfU1QocmdiMywgNDgsIG91dHB0cik7CisjZW5kaWYKKyAgICAgICAgfQorI2lmIF9fQklHX0VORElBTl9fCisgICAgICB9CisjZW5kaWYKKyAgICB9CisgIH0KK30KKworCit2b2lkIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWMoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKworICBpbnB0ciA9IGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXTsKKworICBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cl0gPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0ciAqIDJdOworICBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjKG91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYpOworCisgIGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyXSA9IGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyICogMiArIDFdOworICBvdXRwdXRfYnVmWzBdID0gb3V0cHV0X2J1ZlsxXTsKKyAganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYyhvdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmKTsKKworICBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cl0gPSBpbnB0cjsKKyAgb3V0cHV0X2J1ZlswXSA9IG91dHB0cjsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qZHNhbXBsZS1hbHRpdmVjLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamRzYW1wbGUtYWx0aXZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZGYwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamRzYW1wbGUtYWx0aXZlYy5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogQWx0aVZlYyBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogQ0hST01BIFVQU0FNUExJTkcgKi8KKworI2luY2x1ZGUgImpzaW1kX2FsdGl2ZWMuaCIKKworCit2b2lkIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfYWx0aXZlYyhpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgaW50IGlucm93LCBpbmNvbDsKKworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHRoaXMwLCBsYXN0MCwgcF9sYXN0MCwgbmV4dDAgPSB7IDAgfSwgcF9uZXh0MCwKKyAgICBvdXQ7CisgIF9fdmVjdG9yIHNob3J0IHRoaXMwZSwgdGhpczBvLCB0aGlzMGwsIHRoaXMwaCwgbGFzdDBsLCBsYXN0MGgsCisgICAgbmV4dDBsLCBuZXh0MGgsIG91dGxlLCBvdXRoZSwgb3V0bG8sIG91dGhvOworCisgIC8qIENvbnN0YW50cyAqLworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBiX3plcm8gPSB7IF9fMTZYKDApIH0sIHBiX3RocmVlID0geyBfXzE2WCgzKSB9LAorICAgIGxhc3RfaW5kZXhfY29sMCA9CisgICAgICB7ICAwLCAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0IH0sCisgICAgbGFzdF9pbmRleCA9CisgICAgICB7IDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwIH0sCisgICAgbmV4dF9pbmRleCA9CisgICAgICB7ICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2IH0sCisgICAgbmV4dF9pbmRleF9sYXN0Y29sID0KKyAgICAgIHsgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTUgfSwKKyNpZiBfX0JJR19FTkRJQU5fXworICAgIG1lcmdlX3BhY2tfaW5kZXggPQorICAgICAgeyAgMSwgMTcsICAzLCAxOSwgIDUsIDIxLCAgNywgMjMsICA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSB9OworI2Vsc2UKKyAgICBtZXJnZV9wYWNrX2luZGV4ID0KKyAgICAgIHsgIDAsIDE2LCAgMiwgMTgsICA0LCAyMCwgIDYsIDIyLCAgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzAgfTsKKyNlbmRpZgorICBfX3ZlY3RvciBzaG9ydCBwd19vbmUgPSB7IF9fOFgoMSkgfSwgcHdfdHdvID0geyBfXzhYKDIpIH07CisKKyAgZm9yIChpbnJvdyA9IDA7IGlucm93IDwgbWF4X3Zfc2FtcF9mYWN0b3I7IGlucm93KyspIHsKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsKKworICAgIGlmIChkb3duc2FtcGxlZF93aWR0aCAmIDE1KQorICAgICAgaW5wdHJbZG93bnNhbXBsZWRfd2lkdGhdID0gaW5wdHJbZG93bnNhbXBsZWRfd2lkdGggLSAxXTsKKworICAgIHRoaXMwID0gdmVjX2xkKDAsIGlucHRyKTsKKyAgICBwX2xhc3QwID0gdmVjX3Blcm0odGhpczAsIHRoaXMwLCBsYXN0X2luZGV4X2NvbDApOworICAgIGxhc3QwID0gdGhpczA7CisKKyAgICBmb3IgKGluY29sID0gZG93bnNhbXBsZWRfd2lkdGg7IGluY29sID4gMDsKKyAgICAgICAgIGluY29sIC09IDE2LCBpbnB0ciArPSAxNiwgb3V0cHRyICs9IDMyKSB7CisKKyAgICAgIGlmIChkb3duc2FtcGxlZF93aWR0aCAtIGluY29sID4gMCkgeworICAgICAgICBwX2xhc3QwID0gdmVjX3Blcm0obGFzdDAsIHRoaXMwLCBsYXN0X2luZGV4KTsKKyAgICAgICAgbGFzdDAgPSB0aGlzMDsKKyAgICAgIH0KKworICAgICAgaWYgKGluY29sIDw9IDE2KQorICAgICAgICBwX25leHQwID0gdmVjX3Blcm0odGhpczAsIHRoaXMwLCBuZXh0X2luZGV4X2xhc3Rjb2wpOworICAgICAgZWxzZSB7CisgICAgICAgIG5leHQwID0gdmVjX2xkKDE2LCBpbnB0cik7CisgICAgICAgIHBfbmV4dDAgPSB2ZWNfcGVybSh0aGlzMCwgbmV4dDAsIG5leHRfaW5kZXgpOworICAgICAgfQorCisgICAgICB0aGlzMGUgPSAoX192ZWN0b3Igc2hvcnQpdmVjX211bGUodGhpczAsIHBiX3RocmVlKTsKKyAgICAgIHRoaXMwbyA9IChfX3ZlY3RvciBzaG9ydCl2ZWNfbXVsbyh0aGlzMCwgcGJfdGhyZWUpOworICAgICAgdGhpczBsID0gdmVjX21lcmdlaCh0aGlzMGUsIHRoaXMwbyk7CisgICAgICB0aGlzMGggPSB2ZWNfbWVyZ2VsKHRoaXMwZSwgdGhpczBvKTsKKworICAgICAgbGFzdDBsID0gKF9fdmVjdG9yIHNob3J0KVZFQ19VTlBBQ0tIVShwX2xhc3QwKTsKKyAgICAgIGxhc3QwaCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLTFUocF9sYXN0MCk7CisgICAgICBsYXN0MGwgPSB2ZWNfYWRkKGxhc3QwbCwgcHdfb25lKTsKKworICAgICAgbmV4dDBsID0gKF9fdmVjdG9yIHNob3J0KVZFQ19VTlBBQ0tIVShwX25leHQwKTsKKyAgICAgIG5leHQwaCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLTFUocF9uZXh0MCk7CisgICAgICBuZXh0MGwgPSB2ZWNfYWRkKG5leHQwbCwgcHdfdHdvKTsKKworICAgICAgb3V0bGUgPSB2ZWNfYWRkKHRoaXMwbCwgbGFzdDBsKTsKKyAgICAgIG91dGxvID0gdmVjX2FkZCh0aGlzMGwsIG5leHQwbCk7CisgICAgICBvdXRsZSA9IHZlY19zcihvdXRsZSwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB3X3R3byk7CisgICAgICBvdXRsbyA9IHZlY19zcihvdXRsbywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB3X3R3byk7CisKKyAgICAgIG91dCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW91dGxlLAorICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb3V0bG8sIG1lcmdlX3BhY2tfaW5kZXgpOworICAgICAgdmVjX3N0KG91dCwgMCwgb3V0cHRyKTsKKworICAgICAgaWYgKGluY29sID4gOCkgeworICAgICAgICBsYXN0MGggPSB2ZWNfYWRkKGxhc3QwaCwgcHdfb25lKTsKKyAgICAgICAgbmV4dDBoID0gdmVjX2FkZChuZXh0MGgsIHB3X3R3byk7CisKKyAgICAgICAgb3V0aGUgPSB2ZWNfYWRkKHRoaXMwaCwgbGFzdDBoKTsKKyAgICAgICAgb3V0aG8gPSB2ZWNfYWRkKHRoaXMwaCwgbmV4dDBoKTsKKyAgICAgICAgb3V0aGUgPSB2ZWNfc3Iob3V0aGUsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClwd190d28pOworICAgICAgICBvdXRobyA9IHZlY19zcihvdXRobywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB3X3R3byk7CisKKyAgICAgICAgb3V0ID0gdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb3V0aGUsCisgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW91dGhvLCBtZXJnZV9wYWNrX2luZGV4KTsKKyAgICAgICAgdmVjX3N0KG91dCwgMTYsIG91dHB0cik7CisgICAgICB9CisKKyAgICAgIHRoaXMwID0gbmV4dDA7CisgICAgfQorICB9Cit9CisKKwordm9pZCBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX2FsdGl2ZWMoaW50IG1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7CisgIEpTQU1QUk9XIGlucHRyXzEsIGlucHRyMCwgaW5wdHIxLCBvdXRwdHIwLCBvdXRwdHIxOworICBpbnQgaW5yb3csIG91dHJvdywgaW5jb2w7CisKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB0aGlzXzEsIHRoaXMwLCB0aGlzMSwgb3V0OworICBfX3ZlY3RvciBzaG9ydCB0aGlzXzFsLCB0aGlzXzFoLCB0aGlzMGwsIHRoaXMwaCwgdGhpczFsLCB0aGlzMWgsCisgICAgbGFzdGNvbHN1bV8xaCwgbGFzdGNvbHN1bTFoLAorICAgIHBfbGFzdGNvbHN1bV8xbCwgcF9sYXN0Y29sc3VtXzFoLCBwX2xhc3Rjb2xzdW0xbCwgcF9sYXN0Y29sc3VtMWgsCisgICAgdGhpc2NvbHN1bV8xbCwgdGhpc2NvbHN1bV8xaCwgdGhpc2NvbHN1bTFsLCB0aGlzY29sc3VtMWgsCisgICAgbmV4dGNvbHN1bV8xbCA9IHsgMCB9LCBuZXh0Y29sc3VtXzFoID0geyAwIH0sCisgICAgbmV4dGNvbHN1bTFsID0geyAwIH0sIG5leHRjb2xzdW0xaCA9IHsgMCB9LAorICAgIHBfbmV4dGNvbHN1bV8xbCwgcF9uZXh0Y29sc3VtXzFoLCBwX25leHRjb2xzdW0xbCwgcF9uZXh0Y29sc3VtMWgsCisgICAgdG1wbCwgdG1waCwgb3V0bGUsIG91dGhlLCBvdXRsbywgb3V0aG87CisKKyAgLyogQ29uc3RhbnRzICovCisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGJfemVybyA9IHsgX18xNlgoMCkgfSwKKyAgICBsYXN0X2luZGV4X2NvbDAgPQorICAgICAgeyAgMCwgIDEsICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMyB9LAorICAgIGxhc3RfaW5kZXggPQorICAgICAgeyAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSB9LAorICAgIG5leHRfaW5kZXggPQorICAgICAgeyAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNyB9LAorICAgIG5leHRfaW5kZXhfbGFzdGNvbCA9CisgICAgICB7ICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTQsIDE1IH0sCisjaWYgX19CSUdfRU5ESUFOX18KKyAgICBtZXJnZV9wYWNrX2luZGV4ID0KKyAgICAgIHsgIDEsIDE3LCAgMywgMTksICA1LCAyMSwgIDcsIDIzLCAgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEgfTsKKyNlbHNlCisgICAgbWVyZ2VfcGFja19pbmRleCA9CisgICAgICB7ICAwLCAxNiwgIDIsIDE4LCAgNCwgMjAsICA2LCAyMiwgIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwIH07CisjZW5kaWYKKyAgX192ZWN0b3Igc2hvcnQgcHdfemVybyA9IHsgX184WCgwKSB9LCBwd190aHJlZSA9IHsgX184WCgzKSB9LAorICAgIHB3X3NldmVuID0geyBfXzhYKDcpIH0sIHB3X2VpZ2h0ID0geyBfXzhYKDgpIH07CisgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHB3X2ZvdXIgPSB7IF9fOFgoNCkgfTsKKworICBmb3IgKGlucm93ID0gMCwgb3V0cm93ID0gMDsgb3V0cm93IDwgbWF4X3Zfc2FtcF9mYWN0b3I7IGlucm93KyspIHsKKworICAgIGlucHRyXzEgPSBpbnB1dF9kYXRhW2lucm93IC0gMV07CisgICAgaW5wdHIwID0gaW5wdXRfZGF0YVtpbnJvd107CisgICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdyArIDFdOworICAgIG91dHB0cjAgPSBvdXRwdXRfZGF0YVtvdXRyb3crK107CisgICAgb3V0cHRyMSA9IG91dHB1dF9kYXRhW291dHJvdysrXTsKKworICAgIGlmIChkb3duc2FtcGxlZF93aWR0aCAmIDE1KSB7CisgICAgICBpbnB0cl8xW2Rvd25zYW1wbGVkX3dpZHRoXSA9IGlucHRyXzFbZG93bnNhbXBsZWRfd2lkdGggLSAxXTsKKyAgICAgIGlucHRyMFtkb3duc2FtcGxlZF93aWR0aF0gPSBpbnB0cjBbZG93bnNhbXBsZWRfd2lkdGggLSAxXTsKKyAgICAgIGlucHRyMVtkb3duc2FtcGxlZF93aWR0aF0gPSBpbnB0cjFbZG93bnNhbXBsZWRfd2lkdGggLSAxXTsKKyAgICB9CisKKyAgICB0aGlzMCA9IHZlY19sZCgwLCBpbnB0cjApOworICAgIHRoaXMwbCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLSFUodGhpczApOworICAgIHRoaXMwaCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLTFUodGhpczApOworICAgIHRoaXMwbCA9IHZlY19tbGFkZCh0aGlzMGwsIHB3X3RocmVlLCBwd196ZXJvKTsKKyAgICB0aGlzMGggPSB2ZWNfbWxhZGQodGhpczBoLCBwd190aHJlZSwgcHdfemVybyk7CisKKyAgICB0aGlzXzEgPSB2ZWNfbGQoMCwgaW5wdHJfMSk7CisgICAgdGhpc18xbCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLSFUodGhpc18xKTsKKyAgICB0aGlzXzFoID0gKF9fdmVjdG9yIHNob3J0KVZFQ19VTlBBQ0tMVSh0aGlzXzEpOworICAgIHRoaXNjb2xzdW1fMWwgPSB2ZWNfYWRkKHRoaXMwbCwgdGhpc18xbCk7CisgICAgdGhpc2NvbHN1bV8xaCA9IHZlY19hZGQodGhpczBoLCB0aGlzXzFoKTsKKyAgICBsYXN0Y29sc3VtXzFoID0gdGhpc2NvbHN1bV8xaDsKKyAgICBwX2xhc3Rjb2xzdW1fMWwgPSB2ZWNfcGVybSh0aGlzY29sc3VtXzFsLCB0aGlzY29sc3VtXzFsLCBsYXN0X2luZGV4X2NvbDApOworICAgIHBfbGFzdGNvbHN1bV8xaCA9IHZlY19wZXJtKHRoaXNjb2xzdW1fMWwsIHRoaXNjb2xzdW1fMWgsIGxhc3RfaW5kZXgpOworCisgICAgdGhpczEgPSB2ZWNfbGQoMCwgaW5wdHIxKTsKKyAgICB0aGlzMWwgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKHRoaXMxKTsKKyAgICB0aGlzMWggPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0xVKHRoaXMxKTsKKyAgICB0aGlzY29sc3VtMWwgPSB2ZWNfYWRkKHRoaXMwbCwgdGhpczFsKTsKKyAgICB0aGlzY29sc3VtMWggPSB2ZWNfYWRkKHRoaXMwaCwgdGhpczFoKTsKKyAgICBsYXN0Y29sc3VtMWggPSB0aGlzY29sc3VtMWg7CisgICAgcF9sYXN0Y29sc3VtMWwgPSB2ZWNfcGVybSh0aGlzY29sc3VtMWwsIHRoaXNjb2xzdW0xbCwgbGFzdF9pbmRleF9jb2wwKTsKKyAgICBwX2xhc3Rjb2xzdW0xaCA9IHZlY19wZXJtKHRoaXNjb2xzdW0xbCwgdGhpc2NvbHN1bTFoLCBsYXN0X2luZGV4KTsKKworICAgIGZvciAoaW5jb2wgPSBkb3duc2FtcGxlZF93aWR0aDsgaW5jb2wgPiAwOworICAgICAgICAgaW5jb2wgLT0gMTYsIGlucHRyXzEgKz0gMTYsIGlucHRyMCArPSAxNiwgaW5wdHIxICs9IDE2LAorICAgICAgICAgb3V0cHRyMCArPSAzMiwgb3V0cHRyMSArPSAzMikgeworCisgICAgICBpZiAoZG93bnNhbXBsZWRfd2lkdGggLSBpbmNvbCA+IDApIHsKKyAgICAgICAgcF9sYXN0Y29sc3VtXzFsID0gdmVjX3Blcm0obGFzdGNvbHN1bV8xaCwgdGhpc2NvbHN1bV8xbCwgbGFzdF9pbmRleCk7CisgICAgICAgIHBfbGFzdGNvbHN1bV8xaCA9IHZlY19wZXJtKHRoaXNjb2xzdW1fMWwsIHRoaXNjb2xzdW1fMWgsIGxhc3RfaW5kZXgpOworICAgICAgICBwX2xhc3Rjb2xzdW0xbCA9IHZlY19wZXJtKGxhc3Rjb2xzdW0xaCwgdGhpc2NvbHN1bTFsLCBsYXN0X2luZGV4KTsKKyAgICAgICAgcF9sYXN0Y29sc3VtMWggPSB2ZWNfcGVybSh0aGlzY29sc3VtMWwsIHRoaXNjb2xzdW0xaCwgbGFzdF9pbmRleCk7CisgICAgICAgIGxhc3Rjb2xzdW1fMWggPSB0aGlzY29sc3VtXzFoOyAgbGFzdGNvbHN1bTFoID0gdGhpc2NvbHN1bTFoOworICAgICAgfQorCisgICAgICBpZiAoaW5jb2wgPD0gMTYpIHsKKyAgICAgICAgcF9uZXh0Y29sc3VtXzFsID0gdmVjX3Blcm0odGhpc2NvbHN1bV8xbCwgdGhpc2NvbHN1bV8xaCwgbmV4dF9pbmRleCk7CisgICAgICAgIHBfbmV4dGNvbHN1bV8xaCA9IHZlY19wZXJtKHRoaXNjb2xzdW1fMWgsIHRoaXNjb2xzdW1fMWgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfaW5kZXhfbGFzdGNvbCk7CisgICAgICAgIHBfbmV4dGNvbHN1bTFsID0gdmVjX3Blcm0odGhpc2NvbHN1bTFsLCB0aGlzY29sc3VtMWgsIG5leHRfaW5kZXgpOworICAgICAgICBwX25leHRjb2xzdW0xaCA9IHZlY19wZXJtKHRoaXNjb2xzdW0xaCwgdGhpc2NvbHN1bTFoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfaW5kZXhfbGFzdGNvbCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzMCA9IHZlY19sZCgxNiwgaW5wdHIwKTsKKyAgICAgICAgdGhpczBsID0gKF9fdmVjdG9yIHNob3J0KVZFQ19VTlBBQ0tIVSh0aGlzMCk7CisgICAgICAgIHRoaXMwaCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLTFUodGhpczApOworICAgICAgICB0aGlzMGwgPSB2ZWNfbWxhZGQodGhpczBsLCBwd190aHJlZSwgcHdfemVybyk7CisgICAgICAgIHRoaXMwaCA9IHZlY19tbGFkZCh0aGlzMGgsIHB3X3RocmVlLCBwd196ZXJvKTsKKworICAgICAgICB0aGlzXzEgPSB2ZWNfbGQoMTYsIGlucHRyXzEpOworICAgICAgICB0aGlzXzFsID0gKF9fdmVjdG9yIHNob3J0KVZFQ19VTlBBQ0tIVSh0aGlzXzEpOworICAgICAgICB0aGlzXzFoID0gKF9fdmVjdG9yIHNob3J0KVZFQ19VTlBBQ0tMVSh0aGlzXzEpOworICAgICAgICBuZXh0Y29sc3VtXzFsID0gdmVjX2FkZCh0aGlzMGwsIHRoaXNfMWwpOworICAgICAgICBuZXh0Y29sc3VtXzFoID0gdmVjX2FkZCh0aGlzMGgsIHRoaXNfMWgpOworICAgICAgICBwX25leHRjb2xzdW1fMWwgPSB2ZWNfcGVybSh0aGlzY29sc3VtXzFsLCB0aGlzY29sc3VtXzFoLCBuZXh0X2luZGV4KTsKKyAgICAgICAgcF9uZXh0Y29sc3VtXzFoID0gdmVjX3Blcm0odGhpc2NvbHN1bV8xaCwgbmV4dGNvbHN1bV8xbCwgbmV4dF9pbmRleCk7CisKKyAgICAgICAgdGhpczEgPSB2ZWNfbGQoMTYsIGlucHRyMSk7CisgICAgICAgIHRoaXMxbCA9IChfX3ZlY3RvciBzaG9ydClWRUNfVU5QQUNLSFUodGhpczEpOworICAgICAgICB0aGlzMWggPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0xVKHRoaXMxKTsKKyAgICAgICAgbmV4dGNvbHN1bTFsID0gdmVjX2FkZCh0aGlzMGwsIHRoaXMxbCk7CisgICAgICAgIG5leHRjb2xzdW0xaCA9IHZlY19hZGQodGhpczBoLCB0aGlzMWgpOworICAgICAgICBwX25leHRjb2xzdW0xbCA9IHZlY19wZXJtKHRoaXNjb2xzdW0xbCwgdGhpc2NvbHN1bTFoLCBuZXh0X2luZGV4KTsKKyAgICAgICAgcF9uZXh0Y29sc3VtMWggPSB2ZWNfcGVybSh0aGlzY29sc3VtMWgsIG5leHRjb2xzdW0xbCwgbmV4dF9pbmRleCk7CisgICAgICB9CisKKyAgICAgIC8qIFByb2Nlc3MgdGhlIHVwcGVyIHJvdyAqLworCisgICAgICB0bXBsID0gdmVjX21sYWRkKHRoaXNjb2xzdW1fMWwsIHB3X3RocmVlLCBwd196ZXJvKTsKKyAgICAgIG91dGxlID0gdmVjX2FkZCh0bXBsLCBwX2xhc3Rjb2xzdW1fMWwpOworICAgICAgb3V0bGUgPSB2ZWNfYWRkKG91dGxlLCBwd19laWdodCk7CisgICAgICBvdXRsZSA9IHZlY19zcihvdXRsZSwgcHdfZm91cik7CisKKyAgICAgIG91dGxvID0gdmVjX2FkZCh0bXBsLCBwX25leHRjb2xzdW1fMWwpOworICAgICAgb3V0bG8gPSB2ZWNfYWRkKG91dGxvLCBwd19zZXZlbik7CisgICAgICBvdXRsbyA9IHZlY19zcihvdXRsbywgcHdfZm91cik7CisKKyAgICAgIG91dCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW91dGxlLAorICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb3V0bG8sIG1lcmdlX3BhY2tfaW5kZXgpOworICAgICAgdmVjX3N0KG91dCwgMCwgb3V0cHRyMCk7CisKKyAgICAgIGlmIChpbmNvbCA+IDgpIHsKKyAgICAgICAgdG1waCA9IHZlY19tbGFkZCh0aGlzY29sc3VtXzFoLCBwd190aHJlZSwgcHdfemVybyk7CisgICAgICAgIG91dGhlID0gdmVjX2FkZCh0bXBoLCBwX2xhc3Rjb2xzdW1fMWgpOworICAgICAgICBvdXRoZSA9IHZlY19hZGQob3V0aGUsIHB3X2VpZ2h0KTsKKyAgICAgICAgb3V0aGUgPSB2ZWNfc3Iob3V0aGUsIHB3X2ZvdXIpOworCisgICAgICAgIG91dGhvID0gdmVjX2FkZCh0bXBoLCBwX25leHRjb2xzdW1fMWgpOworICAgICAgICBvdXRobyA9IHZlY19hZGQob3V0aG8sIHB3X3NldmVuKTsKKyAgICAgICAgb3V0aG8gPSB2ZWNfc3Iob3V0aG8sIHB3X2ZvdXIpOworCisgICAgICAgIG91dCA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW91dGhlLAorICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilvdXRobywgbWVyZ2VfcGFja19pbmRleCk7CisgICAgICAgIHZlY19zdChvdXQsIDE2LCBvdXRwdHIwKTsKKyAgICAgIH0KKworICAgICAgLyogUHJvY2VzcyB0aGUgbG93ZXIgcm93ICovCisKKyAgICAgIHRtcGwgPSB2ZWNfbWxhZGQodGhpc2NvbHN1bTFsLCBwd190aHJlZSwgcHdfemVybyk7CisgICAgICBvdXRsZSA9IHZlY19hZGQodG1wbCwgcF9sYXN0Y29sc3VtMWwpOworICAgICAgb3V0bGUgPSB2ZWNfYWRkKG91dGxlLCBwd19laWdodCk7CisgICAgICBvdXRsZSA9IHZlY19zcihvdXRsZSwgcHdfZm91cik7CisKKyAgICAgIG91dGxvID0gdmVjX2FkZCh0bXBsLCBwX25leHRjb2xzdW0xbCk7CisgICAgICBvdXRsbyA9IHZlY19hZGQob3V0bG8sIHB3X3NldmVuKTsKKyAgICAgIG91dGxvID0gdmVjX3NyKG91dGxvLCBwd19mb3VyKTsKKworICAgICAgb3V0ID0gdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb3V0bGUsCisgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilvdXRsbywgbWVyZ2VfcGFja19pbmRleCk7CisgICAgICB2ZWNfc3Qob3V0LCAwLCBvdXRwdHIxKTsKKworICAgICAgaWYgKGluY29sID4gOCkgeworICAgICAgICB0bXBoID0gdmVjX21sYWRkKHRoaXNjb2xzdW0xaCwgcHdfdGhyZWUsIHB3X3plcm8pOworICAgICAgICBvdXRoZSA9IHZlY19hZGQodG1waCwgcF9sYXN0Y29sc3VtMWgpOworICAgICAgICBvdXRoZSA9IHZlY19hZGQob3V0aGUsIHB3X2VpZ2h0KTsKKyAgICAgICAgb3V0aGUgPSB2ZWNfc3Iob3V0aGUsIHB3X2ZvdXIpOworCisgICAgICAgIG91dGhvID0gdmVjX2FkZCh0bXBoLCBwX25leHRjb2xzdW0xaCk7CisgICAgICAgIG91dGhvID0gdmVjX2FkZChvdXRobywgcHdfc2V2ZW4pOworICAgICAgICBvdXRobyA9IHZlY19zcihvdXRobywgcHdfZm91cik7CisKKyAgICAgICAgb3V0ID0gdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb3V0aGUsCisgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW91dGhvLCBtZXJnZV9wYWNrX2luZGV4KTsKKyAgICAgICAgdmVjX3N0KG91dCwgMTYsIG91dHB0cjEpOworICAgICAgfQorCisgICAgICB0aGlzY29sc3VtXzFsID0gbmV4dGNvbHN1bV8xbDsgIHRoaXNjb2xzdW1fMWggPSBuZXh0Y29sc3VtXzFoOworICAgICAgdGhpc2NvbHN1bTFsID0gbmV4dGNvbHN1bTFsOyAgdGhpc2NvbHN1bTFoID0gbmV4dGNvbHN1bTFoOworICAgIH0KKyAgfQorfQorCisKKy8qIFRoZXNlIGFyZSByYXJlbHkgdXNlZCAobWFpbmx5IGp1c3QgZm9yIGRlY29tcHJlc3NpbmcgWUNDSyBpbWFnZXMpICovCisKK3ZvaWQganNpbWRfaDJ2MV91cHNhbXBsZV9hbHRpdmVjKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgaW50IGlucm93LCBpbmNvbDsKKworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGluLCBpbmwsIGluaDsKKworICBmb3IgKGlucm93ID0gMDsgaW5yb3cgPCBtYXhfdl9zYW1wX2ZhY3RvcjsgaW5yb3crKykgeworICAgIGlucHRyID0gaW5wdXRfZGF0YVtpbnJvd107CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbaW5yb3ddOworCisgICAgZm9yIChpbmNvbCA9IChvdXRwdXRfd2lkdGggKyAzMSkgJiAofjMxKTsgaW5jb2wgPiAwOworICAgICAgICAgaW5jb2wgLT0gNjQsIGlucHRyICs9IDMyLCBvdXRwdHIgKz0gNjQpIHsKKworICAgICAgaW4gPSB2ZWNfbGQoMCwgaW5wdHIpOworICAgICAgaW5sID0gdmVjX21lcmdlaChpbiwgaW4pOworICAgICAgaW5oID0gdmVjX21lcmdlbChpbiwgaW4pOworCisgICAgICB2ZWNfc3QoaW5sLCAwLCBvdXRwdHIpOworICAgICAgdmVjX3N0KGluaCwgMTYsIG91dHB0cik7CisKKyAgICAgIGlmIChpbmNvbCA+IDMyKSB7CisgICAgICAgIGluID0gdmVjX2xkKDE2LCBpbnB0cik7CisgICAgICAgIGlubCA9IHZlY19tZXJnZWgoaW4sIGluKTsKKyAgICAgICAgaW5oID0gdmVjX21lcmdlbChpbiwgaW4pOworCisgICAgICAgIHZlY19zdChpbmwsIDMyLCBvdXRwdHIpOworICAgICAgICB2ZWNfc3QoaW5oLCA0OCwgb3V0cHRyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCit2b2lkIGpzaW1kX2gydjJfdXBzYW1wbGVfYWx0aXZlYyhpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7CisgIEpTQU1QUk9XIGlucHRyLCBvdXRwdHIwLCBvdXRwdHIxOworICBpbnQgaW5yb3csIG91dHJvdywgaW5jb2w7CisKKyAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBpbiwgaW5sLCBpbmg7CisKKyAgZm9yIChpbnJvdyA9IDAsIG91dHJvdyA9IDA7IG91dHJvdyA8IG1heF92X3NhbXBfZmFjdG9yOyBpbnJvdysrKSB7CisKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIG91dHB0cjAgPSBvdXRwdXRfZGF0YVtvdXRyb3crK107CisgICAgb3V0cHRyMSA9IG91dHB1dF9kYXRhW291dHJvdysrXTsKKworICAgIGZvciAoaW5jb2wgPSAob3V0cHV0X3dpZHRoICsgMzEpICYgKH4zMSk7IGluY29sID4gMDsKKyAgICAgICAgIGluY29sIC09IDY0LCBpbnB0ciArPSAzMiwgb3V0cHRyMCArPSA2NCwgb3V0cHRyMSArPSA2NCkgeworCisgICAgICBpbiA9IHZlY19sZCgwLCBpbnB0cik7CisgICAgICBpbmwgPSB2ZWNfbWVyZ2VoKGluLCBpbik7CisgICAgICBpbmggPSB2ZWNfbWVyZ2VsKGluLCBpbik7CisKKyAgICAgIHZlY19zdChpbmwsIDAsIG91dHB0cjApOworICAgICAgdmVjX3N0KGlubCwgMCwgb3V0cHRyMSk7CisKKyAgICAgIHZlY19zdChpbmgsIDE2LCBvdXRwdHIwKTsKKyAgICAgIHZlY19zdChpbmgsIDE2LCBvdXRwdHIxKTsKKworICAgICAgaWYgKGluY29sID4gMzIpIHsKKyAgICAgICAgaW4gPSB2ZWNfbGQoMTYsIGlucHRyKTsKKyAgICAgICAgaW5sID0gdmVjX21lcmdlaChpbiwgaW4pOworICAgICAgICBpbmggPSB2ZWNfbWVyZ2VsKGluLCBpbik7CisKKyAgICAgICAgdmVjX3N0KGlubCwgMzIsIG91dHB0cjApOworICAgICAgICB2ZWNfc3QoaW5sLCAzMiwgb3V0cHRyMSk7CisKKyAgICAgICAgdmVjX3N0KGluaCwgNDgsIG91dHB0cjApOworICAgICAgICB2ZWNfc3QoaW5oLCA0OCwgb3V0cHRyMSk7CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamZkY3Rmc3QtYWx0aXZlYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pmZGN0ZnN0LWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDlhZjgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pmZGN0ZnN0LWFsdGl2ZWMuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIEFsdGlWZWMgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIEZBU1QgSU5URUdFUiBGT1JXQVJEIERDVAorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgU1NFMiBpbXBsZW1lbnRhdGlvbiwgZXhjZXB0IHRoYXQgd2UgbGVmdC1zaGlmdCB0aGUKKyAqIGNvbnN0YW50cyBieSAxIGxlc3MgYml0ICh0aGUgLTEgaW4gQ09OU1RfU0hJRlQuKSAgVGhpcyBpcyBiZWNhdXNlCisgKiB2ZWNfbWFkZHMoYXJnMSwgYXJnMiwgYXJnMykgZ2VuZXJhdGVzIHRoZSAxNi1iaXQgc2F0dXJhdGVkIHN1bSBvZjoKKyAqICAgdGhlIGVsZW1lbnRzIGluIGFyZzMgKyB0aGUgbW9zdCBzaWduaWZpY2FudCAxNyBiaXRzIG9mCisgKiAgICAgKHRoZSBlbGVtZW50cyBpbiBhcmcxICogdGhlIGVsZW1lbnRzIGluIGFyZzIpLgorICovCisKKyNpbmNsdWRlICJqc2ltZF9hbHRpdmVjLmgiCisKKworI2RlZmluZSBGXzBfMzgyICA5OCAgIC8qIEZJWCgwLjM4MjY4MzQzMykgKi8KKyNkZWZpbmUgRl8wXzU0MSAgMTM5ICAvKiBGSVgoMC41NDExOTYxMDApICovCisjZGVmaW5lIEZfMF83MDcgIDE4MSAgLyogRklYKDAuNzA3MTA2NzgxKSAqLworI2RlZmluZSBGXzFfMzA2ICAzMzQgIC8qIEZJWCgxLjMwNjU2Mjk2NSkgKi8KKworI2RlZmluZSBDT05TVF9CSVRTICA4CisjZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAyCisjZGVmaW5lIENPTlNUX1NISUZUICAoMTYgLSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAtIENPTlNUX0JJVFMgLSAxKQorCisKKyNkZWZpbmUgRE9fRkRDVCgpIHsgXAorICAvKiBFdmVuIHBhcnQgKi8gXAorICBcCisgIHRtcDEwID0gdmVjX2FkZCh0bXAwLCB0bXAzKTsgXAorICB0bXAxMyA9IHZlY19zdWIodG1wMCwgdG1wMyk7IFwKKyAgdG1wMTEgPSB2ZWNfYWRkKHRtcDEsIHRtcDIpOyBcCisgIHRtcDEyID0gdmVjX3N1Yih0bXAxLCB0bXAyKTsgXAorICBcCisgIG91dDAgID0gdmVjX2FkZCh0bXAxMCwgdG1wMTEpOyBcCisgIG91dDQgID0gdmVjX3N1Yih0bXAxMCwgdG1wMTEpOyBcCisgIFwKKyAgejEgPSB2ZWNfYWRkKHRtcDEyLCB0bXAxMyk7IFwKKyAgejEgPSB2ZWNfc2woejEsIHByZV9tdWx0aXBseV9zY2FsZV9iaXRzKTsgXAorICB6MSA9IHZlY19tYWRkcyh6MSwgcHdfMDcwNywgcHdfemVybyk7IFwKKyAgXAorICBvdXQyID0gdmVjX2FkZCh0bXAxMywgejEpOyBcCisgIG91dDYgPSB2ZWNfc3ViKHRtcDEzLCB6MSk7IFwKKyAgXAorICAvKiBPZGQgcGFydCAqLyBcCisgIFwKKyAgdG1wMTAgPSB2ZWNfYWRkKHRtcDQsIHRtcDUpOyBcCisgIHRtcDExID0gdmVjX2FkZCh0bXA1LCB0bXA2KTsgXAorICB0bXAxMiA9IHZlY19hZGQodG1wNiwgdG1wNyk7IFwKKyAgXAorICB0bXAxMCA9IHZlY19zbCh0bXAxMCwgcHJlX211bHRpcGx5X3NjYWxlX2JpdHMpOyBcCisgIHRtcDEyID0gdmVjX3NsKHRtcDEyLCBwcmVfbXVsdGlwbHlfc2NhbGVfYml0cyk7IFwKKyAgejUgPSB2ZWNfc3ViKHRtcDEwLCB0bXAxMik7IFwKKyAgejUgPSB2ZWNfbWFkZHMoejUsIHB3XzAzODIsIHB3X3plcm8pOyBcCisgIFwKKyAgejIgPSB2ZWNfbWFkZHModG1wMTAsIHB3XzA1NDEsIHo1KTsgXAorICB6NCA9IHZlY19tYWRkcyh0bXAxMiwgcHdfMTMwNiwgejUpOyBcCisgIFwKKyAgdG1wMTEgPSB2ZWNfc2wodG1wMTEsIHByZV9tdWx0aXBseV9zY2FsZV9iaXRzKTsgXAorICB6MyA9IHZlY19tYWRkcyh0bXAxMSwgcHdfMDcwNywgcHdfemVybyk7IFwKKyAgXAorICB6MTEgPSB2ZWNfYWRkKHRtcDcsIHozKTsgXAorICB6MTMgPSB2ZWNfc3ViKHRtcDcsIHozKTsgXAorICBcCisgIG91dDUgPSB2ZWNfYWRkKHoxMywgejIpOyBcCisgIG91dDMgPSB2ZWNfc3ViKHoxMywgejIpOyBcCisgIG91dDEgPSB2ZWNfYWRkKHoxMSwgejQpOyBcCisgIG91dDcgPSB2ZWNfc3ViKHoxMSwgejQpOyBcCit9CisKKwordm9pZCBqc2ltZF9mZGN0X2lmYXN0X2FsdGl2ZWMoRENURUxFTSAqZGF0YSkKK3sKKyAgX192ZWN0b3Igc2hvcnQgcm93MCwgcm93MSwgcm93Miwgcm93Mywgcm93NCwgcm93NSwgcm93Niwgcm93NywKKyAgICBjb2wwLCBjb2wxLCBjb2wyLCBjb2wzLCBjb2w0LCBjb2w1LCBjb2w2LCBjb2w3LAorICAgIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDcsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLAorICAgIHoxLCB6MiwgejMsIHo0LCB6NSwgejExLCB6MTMsCisgICAgb3V0MCwgb3V0MSwgb3V0Miwgb3V0Mywgb3V0NCwgb3V0NSwgb3V0Niwgb3V0NzsKKworICAvKiBDb25zdGFudHMgKi8KKyAgX192ZWN0b3Igc2hvcnQgcHdfemVybyA9IHsgX184WCgwKSB9LAorICAgIHB3XzAzODIgPSB7IF9fOFgoRl8wXzM4MiA8PCBDT05TVF9TSElGVCkgfSwKKyAgICBwd18wNTQxID0geyBfXzhYKEZfMF81NDEgPDwgQ09OU1RfU0hJRlQpIH0sCisgICAgcHdfMDcwNyA9IHsgX184WChGXzBfNzA3IDw8IENPTlNUX1NISUZUKSB9LAorICAgIHB3XzEzMDYgPSB7IF9fOFgoRl8xXzMwNiA8PCBDT05TVF9TSElGVCkgfTsKKyAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQKKyAgICBwcmVfbXVsdGlwbHlfc2NhbGVfYml0cyA9IHsgX184WChQUkVfTVVMVElQTFlfU0NBTEVfQklUUykgfTsKKworICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cyAqLworCisgIHJvdzAgPSB2ZWNfbGQoMCwgZGF0YSk7CisgIHJvdzEgPSB2ZWNfbGQoMTYsIGRhdGEpOworICByb3cyID0gdmVjX2xkKDMyLCBkYXRhKTsKKyAgcm93MyA9IHZlY19sZCg0OCwgZGF0YSk7CisgIHJvdzQgPSB2ZWNfbGQoNjQsIGRhdGEpOworICByb3c1ID0gdmVjX2xkKDgwLCBkYXRhKTsKKyAgcm93NiA9IHZlY19sZCg5NiwgZGF0YSk7CisgIHJvdzcgPSB2ZWNfbGQoMTEyLCBkYXRhKTsKKworICBUUkFOU1BPU0Uocm93LCBjb2wpOworCisgIHRtcDAgPSB2ZWNfYWRkKGNvbDAsIGNvbDcpOworICB0bXA3ID0gdmVjX3N1Yihjb2wwLCBjb2w3KTsKKyAgdG1wMSA9IHZlY19hZGQoY29sMSwgY29sNik7CisgIHRtcDYgPSB2ZWNfc3ViKGNvbDEsIGNvbDYpOworICB0bXAyID0gdmVjX2FkZChjb2wyLCBjb2w1KTsKKyAgdG1wNSA9IHZlY19zdWIoY29sMiwgY29sNSk7CisgIHRtcDMgPSB2ZWNfYWRkKGNvbDMsIGNvbDQpOworICB0bXA0ID0gdmVjX3N1Yihjb2wzLCBjb2w0KTsKKworICBET19GRENUKCk7CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMgKi8KKworICBUUkFOU1BPU0Uob3V0LCByb3cpOworCisgIHRtcDAgPSB2ZWNfYWRkKHJvdzAsIHJvdzcpOworICB0bXA3ID0gdmVjX3N1Yihyb3cwLCByb3c3KTsKKyAgdG1wMSA9IHZlY19hZGQocm93MSwgcm93Nik7CisgIHRtcDYgPSB2ZWNfc3ViKHJvdzEsIHJvdzYpOworICB0bXAyID0gdmVjX2FkZChyb3cyLCByb3c1KTsKKyAgdG1wNSA9IHZlY19zdWIocm93Miwgcm93NSk7CisgIHRtcDMgPSB2ZWNfYWRkKHJvdzMsIHJvdzQpOworICB0bXA0ID0gdmVjX3N1Yihyb3czLCByb3c0KTsKKworICBET19GRENUKCk7CisKKyAgdmVjX3N0KG91dDAsIDAsIGRhdGEpOworICB2ZWNfc3Qob3V0MSwgMTYsIGRhdGEpOworICB2ZWNfc3Qob3V0MiwgMzIsIGRhdGEpOworICB2ZWNfc3Qob3V0MywgNDgsIGRhdGEpOworICB2ZWNfc3Qob3V0NCwgNjQsIGRhdGEpOworICB2ZWNfc3Qob3V0NSwgODAsIGRhdGEpOworICB2ZWNfc3Qob3V0NiwgOTYsIGRhdGEpOworICB2ZWNfc3Qob3V0NywgMTEyLCBkYXRhKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qZmRjdGludC1hbHRpdmVjLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamZkY3RpbnQtYWx0aXZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjNjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamZkY3RpbnQtYWx0aXZlYy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQWx0aVZlYyBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogU0xPVyBJTlRFR0VSIEZPUldBUkQgRENUICovCisKKyNpbmNsdWRlICJqc2ltZF9hbHRpdmVjLmgiCisKKworI2RlZmluZSBGXzBfMjk4ICAyNDQ2ICAgLyogRklYKDAuMjk4NjMxMzM2KSAqLworI2RlZmluZSBGXzBfMzkwICAzMTk2ICAgLyogRklYKDAuMzkwMTgwNjQ0KSAqLworI2RlZmluZSBGXzBfNTQxICA0NDMzICAgLyogRklYKDAuNTQxMTk2MTAwKSAqLworI2RlZmluZSBGXzBfNzY1ICA2MjcwICAgLyogRklYKDAuNzY1MzY2ODY1KSAqLworI2RlZmluZSBGXzBfODk5ICA3MzczICAgLyogRklYKDAuODk5OTc2MjIzKSAqLworI2RlZmluZSBGXzFfMTc1ICA5NjMzICAgLyogRklYKDEuMTc1ODc1NjAyKSAqLworI2RlZmluZSBGXzFfNTAxICAxMjI5OSAgLyogRklYKDEuNTAxMzIxMTEwKSAqLworI2RlZmluZSBGXzFfODQ3ICAxNTEzNyAgLyogRklYKDEuODQ3NzU5MDY1KSAqLworI2RlZmluZSBGXzFfOTYxICAxNjA2OSAgLyogRklYKDEuOTYxNTcwNTYwKSAqLworI2RlZmluZSBGXzJfMDUzICAxNjgxOSAgLyogRklYKDIuMDUzMTE5ODY5KSAqLworI2RlZmluZSBGXzJfNTYyICAyMDk5NSAgLyogRklYKDIuNTYyOTE1NDQ3KSAqLworI2RlZmluZSBGXzNfMDcyICAyNTE3MiAgLyogRklYKDMuMDcyNzExMDI2KSAqLworCisjZGVmaW5lIENPTlNUX0JJVFMgIDEzCisjZGVmaW5lIFBBU1MxX0JJVFMgIDIKKyNkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorI2RlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpCisKKworI2RlZmluZSBET19GRENUX0NPTU1PTihQQVNTKSB7IFwKKyAgLyogKE9yaWdpbmFsKSBcCisgICAqIHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7IFwKKyAgICogZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7IFwKKyAgICogZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OyBcCisgICAqIFwKKyAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pIFwKKyAgICogZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7IFwKKyAgICogZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7IFwKKyAgICovIFwKKyAgXAorICB0bXAxMzEybCA9IHZlY19tZXJnZWgodG1wMTMsIHRtcDEyKTsgXAorICB0bXAxMzEyaCA9IHZlY19tZXJnZWwodG1wMTMsIHRtcDEyKTsgXAorICBcCisgIG91dDJsID0gdmVjX21zdW1zKHRtcDEzMTJsLCBwd19mMTMwX2YwNTQsIHBkX2Rlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0MmggPSB2ZWNfbXN1bXModG1wMTMxMmgsIHB3X2YxMzBfZjA1NCwgcGRfZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQ2bCA9IHZlY19tc3Vtcyh0bXAxMzEybCwgcHdfZjA1NF9tZjEzMCwgcGRfZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQ2aCA9IHZlY19tc3Vtcyh0bXAxMzEyaCwgcHdfZjA1NF9tZjEzMCwgcGRfZGVzY2FsZV9wIyNQQVNTKTsgXAorICBcCisgIG91dDJsID0gdmVjX3NyYShvdXQybCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQyaCA9IHZlY19zcmEob3V0MmgsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0NmwgPSB2ZWNfc3JhKG91dDZsLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDZoID0gdmVjX3NyYShvdXQ2aCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBcCisgIG91dDIgPSB2ZWNfcGFjayhvdXQybCwgb3V0MmgpOyBcCisgIG91dDYgPSB2ZWNfcGFjayhvdXQ2bCwgb3V0NmgpOyBcCisgIFwKKyAgLyogT2RkIHBhcnQgKi8gXAorICBcCisgIHozID0gdmVjX2FkZCh0bXA0LCB0bXA2KTsgXAorICB6NCA9IHZlY19hZGQodG1wNSwgdG1wNyk7IFwKKyAgXAorICAvKiAoT3JpZ2luYWwpIFwKKyAgICogejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsgXAorICAgKiB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsgXAorICAgKiB6MyArPSB6NTsgIHo0ICs9IHo1OyBcCisgICAqIFwKKyAgICogKFRoaXMgaW1wbGVtZW50YXRpb24pIFwKKyAgICogejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7IFwKKyAgICogejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7IFwKKyAgICovIFwKKyAgXAorICB6MzRsID0gdmVjX21lcmdlaCh6MywgejQpOyBcCisgIHozNGggPSB2ZWNfbWVyZ2VsKHozLCB6NCk7IFwKKyAgXAorICB6M2wgPSB2ZWNfbXN1bXMoejM0bCwgcHdfbWYwNzhfZjExNywgcGRfZGVzY2FsZV9wIyNQQVNTKTsgXAorICB6M2ggPSB2ZWNfbXN1bXMoejM0aCwgcHdfbWYwNzhfZjExNywgcGRfZGVzY2FsZV9wIyNQQVNTKTsgXAorICB6NGwgPSB2ZWNfbXN1bXMoejM0bCwgcHdfZjExN19mMDc4LCBwZF9kZXNjYWxlX3AjI1BBU1MpOyBcCisgIHo0aCA9IHZlY19tc3Vtcyh6MzRoLCBwd19mMTE3X2YwNzgsIHBkX2Rlc2NhbGVfcCMjUEFTUyk7IFwKKyAgXAorICAvKiAoT3JpZ2luYWwpIFwKKyAgICogejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7IFwKKyAgICogdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7IFwKKyAgICogdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7IFwKKyAgICogejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7IFwKKyAgICogZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7IFwKKyAgICogZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7IFwKKyAgICogXAorICAgKiAoVGhpcyBpbXBsZW1lbnRhdGlvbikgXAorICAgKiB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7IFwKKyAgICogdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OyBcCisgICAqIHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsgXAorICAgKiB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7IFwKKyAgICogZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsgXAorICAgKiBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OyBcCisgICAqLyBcCisgIFwKKyAgdG1wNDdsID0gdmVjX21lcmdlaCh0bXA0LCB0bXA3KTsgXAorICB0bXA0N2ggPSB2ZWNfbWVyZ2VsKHRtcDQsIHRtcDcpOyBcCisgIFwKKyAgb3V0N2wgPSB2ZWNfbXN1bXModG1wNDdsLCBwd19tZjA2MF9tZjA4OSwgejNsKTsgXAorICBvdXQ3aCA9IHZlY19tc3Vtcyh0bXA0N2gsIHB3X21mMDYwX21mMDg5LCB6M2gpOyBcCisgIG91dDFsID0gdmVjX21zdW1zKHRtcDQ3bCwgcHdfbWYwODlfZjA2MCwgejRsKTsgXAorICBvdXQxaCA9IHZlY19tc3Vtcyh0bXA0N2gsIHB3X21mMDg5X2YwNjAsIHo0aCk7IFwKKyAgXAorICBvdXQ3bCA9IHZlY19zcmEob3V0N2wsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0N2ggPSB2ZWNfc3JhKG91dDdoLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDFsID0gdmVjX3NyYShvdXQxbCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQxaCA9IHZlY19zcmEob3V0MWgsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgXAorICBvdXQ3ID0gdmVjX3BhY2sob3V0N2wsIG91dDdoKTsgXAorICBvdXQxID0gdmVjX3BhY2sob3V0MWwsIG91dDFoKTsgXAorICBcCisgIHRtcDU2bCA9IHZlY19tZXJnZWgodG1wNSwgdG1wNik7IFwKKyAgdG1wNTZoID0gdmVjX21lcmdlbCh0bXA1LCB0bXA2KTsgXAorICBcCisgIG91dDVsID0gdmVjX21zdW1zKHRtcDU2bCwgcHdfbWYwNTBfbWYyNTYsIHo0bCk7IFwKKyAgb3V0NWggPSB2ZWNfbXN1bXModG1wNTZoLCBwd19tZjA1MF9tZjI1NiwgejRoKTsgXAorICBvdXQzbCA9IHZlY19tc3Vtcyh0bXA1NmwsIHB3X21mMjU2X2YwNTAsIHozbCk7IFwKKyAgb3V0M2ggPSB2ZWNfbXN1bXModG1wNTZoLCBwd19tZjI1Nl9mMDUwLCB6M2gpOyBcCisgIFwKKyAgb3V0NWwgPSB2ZWNfc3JhKG91dDVsLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDVoID0gdmVjX3NyYShvdXQ1aCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQzbCA9IHZlY19zcmEob3V0M2wsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0M2ggPSB2ZWNfc3JhKG91dDNoLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIFwKKyAgb3V0NSA9IHZlY19wYWNrKG91dDVsLCBvdXQ1aCk7IFwKKyAgb3V0MyA9IHZlY19wYWNrKG91dDNsLCBvdXQzaCk7IFwKK30KKworI2RlZmluZSBET19GRENUX1BBU1MxKCkgeyBcCisgIC8qIEV2ZW4gcGFydCAqLyBcCisgIFwKKyAgdG1wMTAgPSB2ZWNfYWRkKHRtcDAsIHRtcDMpOyBcCisgIHRtcDEzID0gdmVjX3N1Yih0bXAwLCB0bXAzKTsgXAorICB0bXAxMSA9IHZlY19hZGQodG1wMSwgdG1wMik7IFwKKyAgdG1wMTIgPSB2ZWNfc3ViKHRtcDEsIHRtcDIpOyBcCisgIFwKKyAgb3V0MCAgPSB2ZWNfYWRkKHRtcDEwLCB0bXAxMSk7IFwKKyAgb3V0MCAgPSB2ZWNfc2wob3V0MCwgcGFzczFfYml0cyk7IFwKKyAgb3V0NCAgPSB2ZWNfc3ViKHRtcDEwLCB0bXAxMSk7IFwKKyAgb3V0NCAgPSB2ZWNfc2wob3V0NCwgcGFzczFfYml0cyk7IFwKKyAgXAorICBET19GRENUX0NPTU1PTigxKTsgXAorfQorCisjZGVmaW5lIERPX0ZEQ1RfUEFTUzIoKSB7IFwKKyAgLyogRXZlbiBwYXJ0ICovIFwKKyAgXAorICB0bXAxMCA9IHZlY19hZGQodG1wMCwgdG1wMyk7IFwKKyAgdG1wMTMgPSB2ZWNfc3ViKHRtcDAsIHRtcDMpOyBcCisgIHRtcDExID0gdmVjX2FkZCh0bXAxLCB0bXAyKTsgXAorICB0bXAxMiA9IHZlY19zdWIodG1wMSwgdG1wMik7IFwKKyAgXAorICBvdXQwICA9IHZlY19hZGQodG1wMTAsIHRtcDExKTsgXAorICBvdXQwICA9IHZlY19hZGQob3V0MCwgcHdfZGVzY2FsZV9wMngpOyBcCisgIG91dDAgID0gdmVjX3NyYShvdXQwLCBwYXNzMV9iaXRzKTsgXAorICBvdXQ0ICA9IHZlY19zdWIodG1wMTAsIHRtcDExKTsgXAorICBvdXQ0ICA9IHZlY19hZGQob3V0NCwgcHdfZGVzY2FsZV9wMngpOyBcCisgIG91dDQgID0gdmVjX3NyYShvdXQ0LCBwYXNzMV9iaXRzKTsgXAorICBcCisgIERPX0ZEQ1RfQ09NTU9OKDIpOyBcCit9CisKKwordm9pZCBqc2ltZF9mZGN0X2lzbG93X2FsdGl2ZWMoRENURUxFTSAqZGF0YSkKK3sKKyAgX192ZWN0b3Igc2hvcnQgcm93MCwgcm93MSwgcm93Miwgcm93Mywgcm93NCwgcm93NSwgcm93Niwgcm93NywKKyAgICBjb2wwLCBjb2wxLCBjb2wyLCBjb2wzLCBjb2w0LCBjb2w1LCBjb2w2LCBjb2w3LAorICAgIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDcsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLAorICAgIHRtcDQ3bCwgdG1wNDdoLCB0bXA1NmwsIHRtcDU2aCwgdG1wMTMxMmwsIHRtcDEzMTJoLAorICAgIHozLCB6NCwgejM0bCwgejM0aCwKKyAgICBvdXQwLCBvdXQxLCBvdXQyLCBvdXQzLCBvdXQ0LCBvdXQ1LCBvdXQ2LCBvdXQ3OworICBfX3ZlY3RvciBpbnQgejNsLCB6M2gsIHo0bCwgejRoLAorICAgIG91dDFsLCBvdXQxaCwgb3V0MmwsIG91dDJoLCBvdXQzbCwgb3V0M2gsIG91dDVsLCBvdXQ1aCwgb3V0NmwsIG91dDZoLAorICAgIG91dDdsLCBvdXQ3aDsKKworICAvKiBDb25zdGFudHMgKi8KKyAgX192ZWN0b3Igc2hvcnQKKyAgICBwd19mMTMwX2YwNTQgPSB7IF9fNFgyKEZfMF81NDEgKyBGXzBfNzY1LCBGXzBfNTQxKSB9LAorICAgIHB3X2YwNTRfbWYxMzAgPSB7IF9fNFgyKEZfMF81NDEsIEZfMF81NDEgLSBGXzFfODQ3KSB9LAorICAgIHB3X21mMDc4X2YxMTcgPSB7IF9fNFgyKEZfMV8xNzUgLSBGXzFfOTYxLCBGXzFfMTc1KSB9LAorICAgIHB3X2YxMTdfZjA3OCA9IHsgX180WDIoRl8xXzE3NSwgRl8xXzE3NSAtIEZfMF8zOTApIH0sCisgICAgcHdfbWYwNjBfbWYwODkgPSB7IF9fNFgyKEZfMF8yOTggLSBGXzBfODk5LCAtRl8wXzg5OSkgfSwKKyAgICBwd19tZjA4OV9mMDYwID0geyBfXzRYMigtRl8wXzg5OSwgRl8xXzUwMSAtIEZfMF84OTkpIH0sCisgICAgcHdfbWYwNTBfbWYyNTYgPSB7IF9fNFgyKEZfMl8wNTMgLSBGXzJfNTYyLCAtRl8yXzU2MikgfSwKKyAgICBwd19tZjI1Nl9mMDUwID0geyBfXzRYMigtRl8yXzU2MiwgRl8zXzA3MiAtIEZfMl81NjIpIH0sCisgICAgcHdfZGVzY2FsZV9wMnggPSB7IF9fOFgoMSA8PCAoUEFTUzFfQklUUyAtIDEpKSB9OworICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBwYXNzMV9iaXRzID0geyBfXzhYKFBBU1MxX0JJVFMpIH07CisgIF9fdmVjdG9yIGludCBwZF9kZXNjYWxlX3AxID0geyBfXzRYKDEgPDwgKERFU0NBTEVfUDEgLSAxKSkgfSwKKyAgICBwZF9kZXNjYWxlX3AyID0geyBfXzRYKDEgPDwgKERFU0NBTEVfUDIgLSAxKSkgfTsKKyAgX192ZWN0b3IgdW5zaWduZWQgaW50IGRlc2NhbGVfcDEgPSB7IF9fNFgoREVTQ0FMRV9QMSkgfSwKKyAgICBkZXNjYWxlX3AyID0geyBfXzRYKERFU0NBTEVfUDIpIH07CisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIHJvd3MgKi8KKworICByb3cwID0gdmVjX2xkKDAsIGRhdGEpOworICByb3cxID0gdmVjX2xkKDE2LCBkYXRhKTsKKyAgcm93MiA9IHZlY19sZCgzMiwgZGF0YSk7CisgIHJvdzMgPSB2ZWNfbGQoNDgsIGRhdGEpOworICByb3c0ID0gdmVjX2xkKDY0LCBkYXRhKTsKKyAgcm93NSA9IHZlY19sZCg4MCwgZGF0YSk7CisgIHJvdzYgPSB2ZWNfbGQoOTYsIGRhdGEpOworICByb3c3ID0gdmVjX2xkKDExMiwgZGF0YSk7CisKKyAgVFJBTlNQT1NFKHJvdywgY29sKTsKKworICB0bXAwID0gdmVjX2FkZChjb2wwLCBjb2w3KTsKKyAgdG1wNyA9IHZlY19zdWIoY29sMCwgY29sNyk7CisgIHRtcDEgPSB2ZWNfYWRkKGNvbDEsIGNvbDYpOworICB0bXA2ID0gdmVjX3N1Yihjb2wxLCBjb2w2KTsKKyAgdG1wMiA9IHZlY19hZGQoY29sMiwgY29sNSk7CisgIHRtcDUgPSB2ZWNfc3ViKGNvbDIsIGNvbDUpOworICB0bXAzID0gdmVjX2FkZChjb2wzLCBjb2w0KTsKKyAgdG1wNCA9IHZlY19zdWIoY29sMywgY29sNCk7CisKKyAgRE9fRkRDVF9QQVNTMSgpOworCisgIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zICovCisKKyAgVFJBTlNQT1NFKG91dCwgcm93KTsKKworICB0bXAwID0gdmVjX2FkZChyb3cwLCByb3c3KTsKKyAgdG1wNyA9IHZlY19zdWIocm93MCwgcm93Nyk7CisgIHRtcDEgPSB2ZWNfYWRkKHJvdzEsIHJvdzYpOworICB0bXA2ID0gdmVjX3N1Yihyb3cxLCByb3c2KTsKKyAgdG1wMiA9IHZlY19hZGQocm93Miwgcm93NSk7CisgIHRtcDUgPSB2ZWNfc3ViKHJvdzIsIHJvdzUpOworICB0bXAzID0gdmVjX2FkZChyb3czLCByb3c0KTsKKyAgdG1wNCA9IHZlY19zdWIocm93Mywgcm93NCk7CisKKyAgRE9fRkRDVF9QQVNTMigpOworCisgIHZlY19zdChvdXQwLCAwLCBkYXRhKTsKKyAgdmVjX3N0KG91dDEsIDE2LCBkYXRhKTsKKyAgdmVjX3N0KG91dDIsIDMyLCBkYXRhKTsKKyAgdmVjX3N0KG91dDMsIDQ4LCBkYXRhKTsKKyAgdmVjX3N0KG91dDQsIDY0LCBkYXRhKTsKKyAgdmVjX3N0KG91dDUsIDgwLCBkYXRhKTsKKyAgdmVjX3N0KG91dDYsIDk2LCBkYXRhKTsKKyAgdmVjX3N0KG91dDcsIDExMiwgZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvamlkY3Rmc3QtYWx0aXZlYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2ppZGN0ZnN0LWFsdGl2ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZjNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2ppZGN0ZnN0LWFsdGl2ZWMuYwpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIEFsdGlWZWMgb3B0aW1pemF0aW9ucyBmb3IgbGlianBlZy10dXJibworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1LCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICoKKyAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgKi8KKworLyogRkFTVCBJTlRFR0VSIElOVkVSU0UgRENUCisgKgorICogVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBTU0UyIGltcGxlbWVudGF0aW9uLCBleGNlcHQgdGhhdCB3ZSBsZWZ0LXNoaWZ0IHRoZQorICogY29uc3RhbnRzIGJ5IDEgbGVzcyBiaXQgKHRoZSAtMSBpbiBDT05TVF9TSElGVC4pICBUaGlzIGlzIGJlY2F1c2UKKyAqIHZlY19tYWRkcyhhcmcxLCBhcmcyLCBhcmczKSBnZW5lcmF0ZXMgdGhlIDE2LWJpdCBzYXR1cmF0ZWQgc3VtIG9mOgorICogICB0aGUgZWxlbWVudHMgaW4gYXJnMyArIHRoZSBtb3N0IHNpZ25pZmljYW50IDE3IGJpdHMgb2YKKyAqICAgICAodGhlIGVsZW1lbnRzIGluIGFyZzEgKiB0aGUgZWxlbWVudHMgaW4gYXJnMikuCisgKi8KKworI2luY2x1ZGUgImpzaW1kX2FsdGl2ZWMuaCIKKworCisjZGVmaW5lIEZfMV8wODIgIDI3NyAgICAgICAgICAgICAgLyogRklYKDEuMDgyMzkyMjAwKSAqLworI2RlZmluZSBGXzFfNDE0ICAzNjIgICAgICAgICAgICAgIC8qIEZJWCgxLjQxNDIxMzU2MikgKi8KKyNkZWZpbmUgRl8xXzg0NyAgNDczICAgICAgICAgICAgICAvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZfMl82MTMgIDY2OSAgICAgICAgICAgICAgLyogRklYKDIuNjEzMTI1OTMwKSAqLworI2RlZmluZSBGXzFfNjEzICAoRl8yXzYxMyAtIDI1NikgIC8qIEZJWCgyLjYxMzEyNTkzMCkgLSBGSVgoMSkgKi8KKworI2RlZmluZSBDT05TVF9CSVRTICA4CisjZGVmaW5lIFBBU1MxX0JJVFMgIDIKKyNkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyNkZWZpbmUgQ09OU1RfU0hJRlQgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUyAtIDEpCisKKworI2RlZmluZSBET19JRENUKGluKSB7IFwKKyAgLyogRXZlbiBwYXJ0ICovIFwKKyAgXAorICB0bXAxMCA9IHZlY19hZGQoaW4jIzAsIGluIyM0KTsgXAorICB0bXAxMSA9IHZlY19zdWIoaW4jIzAsIGluIyM0KTsgXAorICB0bXAxMyA9IHZlY19hZGQoaW4jIzIsIGluIyM2KTsgXAorICBcCisgIHRtcDEyID0gdmVjX3N1YihpbiMjMiwgaW4jIzYpOyBcCisgIHRtcDEyID0gdmVjX3NsKHRtcDEyLCBwcmVfbXVsdGlwbHlfc2NhbGVfYml0cyk7IFwKKyAgdG1wMTIgPSB2ZWNfbWFkZHModG1wMTIsIHB3X0YxNDE0LCBwd196ZXJvKTsgXAorICB0bXAxMiA9IHZlY19zdWIodG1wMTIsIHRtcDEzKTsgXAorICBcCisgIHRtcDAgPSB2ZWNfYWRkKHRtcDEwLCB0bXAxMyk7IFwKKyAgdG1wMyA9IHZlY19zdWIodG1wMTAsIHRtcDEzKTsgXAorICB0bXAxID0gdmVjX2FkZCh0bXAxMSwgdG1wMTIpOyBcCisgIHRtcDIgPSB2ZWNfc3ViKHRtcDExLCB0bXAxMik7IFwKKyAgXAorICAvKiBPZGQgcGFydCAqLyBcCisgIFwKKyAgejEzID0gdmVjX2FkZChpbiMjNSwgaW4jIzMpOyBcCisgIHoxMCA9IHZlY19zdWIoaW4jIzUsIGluIyMzKTsgXAorICB6MTBzID0gdmVjX3NsKHoxMCwgcHJlX211bHRpcGx5X3NjYWxlX2JpdHMpOyBcCisgIHoxMSA9IHZlY19hZGQoaW4jIzEsIGluIyM3KTsgXAorICB6MTJzID0gdmVjX3N1YihpbiMjMSwgaW4jIzcpOyBcCisgIHoxMnMgPSB2ZWNfc2woejEycywgcHJlX211bHRpcGx5X3NjYWxlX2JpdHMpOyBcCisgIFwKKyAgdG1wMTEgPSB2ZWNfc3ViKHoxMSwgejEzKTsgXAorICB0bXAxMSA9IHZlY19zbCh0bXAxMSwgcHJlX211bHRpcGx5X3NjYWxlX2JpdHMpOyBcCisgIHRtcDExID0gdmVjX21hZGRzKHRtcDExLCBwd19GMTQxNCwgcHdfemVybyk7IFwKKyAgXAorICB0bXA3ID0gdmVjX2FkZCh6MTEsIHoxMyk7IFwKKyAgXAorICAvKiBUbyBhdm9pZCBvdmVyZmxvdy4uLiBcCisgICAqIFwKKyAgICogKE9yaWdpbmFsKSBcCisgICAqIHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7IFwKKyAgICogXAorICAgKiAoVGhpcyBpbXBsZW1lbnRhdGlvbikgXAorICAgKiB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OyBcCisgICAqICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7IFwKKyAgICovIFwKKyAgXAorICB6NSA9IHZlY19hZGQoejEwcywgejEycyk7IFwKKyAgejUgPSB2ZWNfbWFkZHMoejUsIHB3X0YxODQ3LCBwd196ZXJvKTsgXAorICBcCisgIHRtcDEwID0gdmVjX21hZGRzKHoxMnMsIHB3X0YxMDgyLCBwd196ZXJvKTsgXAorICB0bXAxMCA9IHZlY19zdWIodG1wMTAsIHo1KTsgXAorICB0bXAxMiA9IHZlY19tYWRkcyh6MTBzLCBwd19NRjE2MTMsIHo1KTsgXAorICB0bXAxMiA9IHZlY19zdWIodG1wMTIsIHoxMCk7IFwKKyAgXAorICB0bXA2ID0gdmVjX3N1Yih0bXAxMiwgdG1wNyk7IFwKKyAgdG1wNSA9IHZlY19zdWIodG1wMTEsIHRtcDYpOyBcCisgIHRtcDQgPSB2ZWNfYWRkKHRtcDEwLCB0bXA1KTsgXAorICBcCisgIG91dDAgPSB2ZWNfYWRkKHRtcDAsIHRtcDcpOyBcCisgIG91dDEgPSB2ZWNfYWRkKHRtcDEsIHRtcDYpOyBcCisgIG91dDIgPSB2ZWNfYWRkKHRtcDIsIHRtcDUpOyBcCisgIG91dDMgPSB2ZWNfc3ViKHRtcDMsIHRtcDQpOyBcCisgIG91dDQgPSB2ZWNfYWRkKHRtcDMsIHRtcDQpOyBcCisgIG91dDUgPSB2ZWNfc3ViKHRtcDIsIHRtcDUpOyBcCisgIG91dDYgPSB2ZWNfc3ViKHRtcDEsIHRtcDYpOyBcCisgIG91dDcgPSB2ZWNfc3ViKHRtcDAsIHRtcDcpOyBcCit9CisKKwordm9pZCBqc2ltZF9pZGN0X2lmYXN0X2FsdGl2ZWModm9pZCAqZGN0X3RhYmxlXywgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBzaG9ydCAqZGN0X3RhYmxlID0gKHNob3J0ICopZGN0X3RhYmxlXzsKKyAgaW50ICpvdXRwdHI7CisKKyAgX192ZWN0b3Igc2hvcnQgcm93MCwgcm93MSwgcm93Miwgcm93Mywgcm93NCwgcm93NSwgcm93Niwgcm93NywKKyAgICBjb2wwLCBjb2wxLCBjb2wyLCBjb2wzLCBjb2w0LCBjb2w1LCBjb2w2LCBjb2w3LAorICAgIHF1YW50MCwgcXVhbnQxLCBxdWFudDIsIHF1YW50MywgcXVhbnQ0LCBxdWFudDUsIHF1YW50NiwgcXVhbnQ3LAorICAgIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDcsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLAorICAgIHo1LCB6MTAsIHoxMHMsIHoxMSwgejEycywgejEzLAorICAgIG91dDAsIG91dDEsIG91dDIsIG91dDMsIG91dDQsIG91dDUsIG91dDYsIG91dDc7CisgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIG91dGI7CisKKyAgLyogQ29uc3RhbnRzICovCisgIF9fdmVjdG9yIHNob3J0IHB3X3plcm8gPSB7IF9fOFgoMCkgfSwKKyAgICBwd19GMTQxNCA9IHsgX184WChGXzFfNDE0IDw8IENPTlNUX1NISUZUKSB9LAorICAgIHB3X0YxODQ3ID0geyBfXzhYKEZfMV84NDcgPDwgQ09OU1RfU0hJRlQpIH0sCisgICAgcHdfTUYxNjEzID0geyBfXzhYKC1GXzFfNjEzIDw8IENPTlNUX1NISUZUKSB9LAorICAgIHB3X0YxMDgyID0geyBfXzhYKEZfMV8wODIgPDwgQ09OU1RfU0hJRlQpIH07CisgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0CisgICAgcHJlX211bHRpcGx5X3NjYWxlX2JpdHMgPSB7IF9fOFgoUFJFX01VTFRJUExZX1NDQUxFX0JJVFMpIH0sCisgICAgcGFzczFfYml0czMgPSB7IF9fOFgoUEFTUzFfQklUUyArIDMpIH07CisgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIHBiX2NlbnRlcmpzYW1wID0geyBfXzE2WChDRU5URVJKU0FNUExFKSB9OworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zICovCisKKyAgY29sMCA9IHZlY19sZCgwLCBjb2VmX2Jsb2NrKTsKKyAgY29sMSA9IHZlY19sZCgxNiwgY29lZl9ibG9jayk7CisgIGNvbDIgPSB2ZWNfbGQoMzIsIGNvZWZfYmxvY2spOworICBjb2wzID0gdmVjX2xkKDQ4LCBjb2VmX2Jsb2NrKTsKKyAgY29sNCA9IHZlY19sZCg2NCwgY29lZl9ibG9jayk7CisgIGNvbDUgPSB2ZWNfbGQoODAsIGNvZWZfYmxvY2spOworICBjb2w2ID0gdmVjX2xkKDk2LCBjb2VmX2Jsb2NrKTsKKyAgY29sNyA9IHZlY19sZCgxMTIsIGNvZWZfYmxvY2spOworCisgIHRtcDEgPSB2ZWNfb3IoY29sMSwgY29sMik7CisgIHRtcDIgPSB2ZWNfb3IoY29sMywgY29sNCk7CisgIHRtcDEgPSB2ZWNfb3IodG1wMSwgdG1wMik7CisgIHRtcDMgPSB2ZWNfb3IoY29sNSwgY29sNik7CisgIHRtcDMgPSB2ZWNfb3IodG1wMywgY29sNyk7CisgIHRtcDEgPSB2ZWNfb3IodG1wMSwgdG1wMyk7CisKKyAgcXVhbnQwID0gdmVjX2xkKDAsIGRjdF90YWJsZSk7CisgIGNvbDAgPSB2ZWNfbWxhZGQoY29sMCwgcXVhbnQwLCBwd196ZXJvKTsKKworICBpZiAodmVjX2FsbF9lcSh0bXAxLCBwd196ZXJvKSkgeworICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCisKKyAgICByb3cwID0gdmVjX3NwbGF0KGNvbDAsIDApOworICAgIHJvdzEgPSB2ZWNfc3BsYXQoY29sMCwgMSk7CisgICAgcm93MiA9IHZlY19zcGxhdChjb2wwLCAyKTsKKyAgICByb3czID0gdmVjX3NwbGF0KGNvbDAsIDMpOworICAgIHJvdzQgPSB2ZWNfc3BsYXQoY29sMCwgNCk7CisgICAgcm93NSA9IHZlY19zcGxhdChjb2wwLCA1KTsKKyAgICByb3c2ID0gdmVjX3NwbGF0KGNvbDAsIDYpOworICAgIHJvdzcgPSB2ZWNfc3BsYXQoY29sMCwgNyk7CisKKyAgfSBlbHNlIHsKKworICAgIHF1YW50MSA9IHZlY19sZCgxNiwgZGN0X3RhYmxlKTsKKyAgICBxdWFudDIgPSB2ZWNfbGQoMzIsIGRjdF90YWJsZSk7CisgICAgcXVhbnQzID0gdmVjX2xkKDQ4LCBkY3RfdGFibGUpOworICAgIHF1YW50NCA9IHZlY19sZCg2NCwgZGN0X3RhYmxlKTsKKyAgICBxdWFudDUgPSB2ZWNfbGQoODAsIGRjdF90YWJsZSk7CisgICAgcXVhbnQ2ID0gdmVjX2xkKDk2LCBkY3RfdGFibGUpOworICAgIHF1YW50NyA9IHZlY19sZCgxMTIsIGRjdF90YWJsZSk7CisKKyAgICBjb2wxID0gdmVjX21sYWRkKGNvbDEsIHF1YW50MSwgcHdfemVybyk7CisgICAgY29sMiA9IHZlY19tbGFkZChjb2wyLCBxdWFudDIsIHB3X3plcm8pOworICAgIGNvbDMgPSB2ZWNfbWxhZGQoY29sMywgcXVhbnQzLCBwd196ZXJvKTsKKyAgICBjb2w0ID0gdmVjX21sYWRkKGNvbDQsIHF1YW50NCwgcHdfemVybyk7CisgICAgY29sNSA9IHZlY19tbGFkZChjb2w1LCBxdWFudDUsIHB3X3plcm8pOworICAgIGNvbDYgPSB2ZWNfbWxhZGQoY29sNiwgcXVhbnQ2LCBwd196ZXJvKTsKKyAgICBjb2w3ID0gdmVjX21sYWRkKGNvbDcsIHF1YW50NywgcHdfemVybyk7CisKKyAgICBET19JRENUKGNvbCk7CisKKyAgICBUUkFOU1BPU0Uob3V0LCByb3cpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIHJvd3MgKi8KKworICBET19JRENUKHJvdyk7CisKKyAgb3V0MCA9IHZlY19zcmEob3V0MCwgcGFzczFfYml0czMpOworICBvdXQxID0gdmVjX3NyYShvdXQxLCBwYXNzMV9iaXRzMyk7CisgIG91dDIgPSB2ZWNfc3JhKG91dDIsIHBhc3MxX2JpdHMzKTsKKyAgb3V0MyA9IHZlY19zcmEob3V0MywgcGFzczFfYml0czMpOworICBvdXQ0ID0gdmVjX3NyYShvdXQ0LCBwYXNzMV9iaXRzMyk7CisgIG91dDUgPSB2ZWNfc3JhKG91dDUsIHBhc3MxX2JpdHMzKTsKKyAgb3V0NiA9IHZlY19zcmEob3V0NiwgcGFzczFfYml0czMpOworICBvdXQ3ID0gdmVjX3NyYShvdXQ3LCBwYXNzMV9iaXRzMyk7CisKKyAgVFJBTlNQT1NFKG91dCwgY29sKTsKKworICBvdXRiID0gdmVjX3BhY2tzKGNvbDAsIGNvbDApOworICBvdXRiID0gdmVjX2FkZChvdXRiLCBwYl9jZW50ZXJqc2FtcCk7CisgIG91dHB0ciA9IChpbnQgKikob3V0cHV0X2J1ZlswXSArIG91dHB1dF9jb2wpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgMCwgb3V0cHRyKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDQsIG91dHB0cik7CisKKyAgb3V0YiA9IHZlY19wYWNrcyhjb2wxLCBjb2wxKTsKKyAgb3V0YiA9IHZlY19hZGQob3V0YiwgcGJfY2VudGVyanNhbXApOworICBvdXRwdHIgPSAoaW50ICopKG91dHB1dF9idWZbMV0gKyBvdXRwdXRfY29sKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDAsIG91dHB0cik7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCA0LCBvdXRwdHIpOworCisgIG91dGIgPSB2ZWNfcGFja3MoY29sMiwgY29sMik7CisgIG91dGIgPSB2ZWNfYWRkKG91dGIsIHBiX2NlbnRlcmpzYW1wKTsKKyAgb3V0cHRyID0gKGludCAqKShvdXRwdXRfYnVmWzJdICsgb3V0cHV0X2NvbCk7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCAwLCBvdXRwdHIpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgNCwgb3V0cHRyKTsKKworICBvdXRiID0gdmVjX3BhY2tzKGNvbDMsIGNvbDMpOworICBvdXRiID0gdmVjX2FkZChvdXRiLCBwYl9jZW50ZXJqc2FtcCk7CisgIG91dHB0ciA9IChpbnQgKikob3V0cHV0X2J1ZlszXSArIG91dHB1dF9jb2wpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgMCwgb3V0cHRyKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDQsIG91dHB0cik7CisKKyAgb3V0YiA9IHZlY19wYWNrcyhjb2w0LCBjb2w0KTsKKyAgb3V0YiA9IHZlY19hZGQob3V0YiwgcGJfY2VudGVyanNhbXApOworICBvdXRwdHIgPSAoaW50ICopKG91dHB1dF9idWZbNF0gKyBvdXRwdXRfY29sKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDAsIG91dHB0cik7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCA0LCBvdXRwdHIpOworCisgIG91dGIgPSB2ZWNfcGFja3MoY29sNSwgY29sNSk7CisgIG91dGIgPSB2ZWNfYWRkKG91dGIsIHBiX2NlbnRlcmpzYW1wKTsKKyAgb3V0cHRyID0gKGludCAqKShvdXRwdXRfYnVmWzVdICsgb3V0cHV0X2NvbCk7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCAwLCBvdXRwdHIpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgNCwgb3V0cHRyKTsKKworICBvdXRiID0gdmVjX3BhY2tzKGNvbDYsIGNvbDYpOworICBvdXRiID0gdmVjX2FkZChvdXRiLCBwYl9jZW50ZXJqc2FtcCk7CisgIG91dHB0ciA9IChpbnQgKikob3V0cHV0X2J1Zls2XSArIG91dHB1dF9jb2wpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgMCwgb3V0cHRyKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDQsIG91dHB0cik7CisKKyAgb3V0YiA9IHZlY19wYWNrcyhjb2w3LCBjb2w3KTsKKyAgb3V0YiA9IHZlY19hZGQob3V0YiwgcGJfY2VudGVyanNhbXApOworICBvdXRwdHIgPSAoaW50ICopKG91dHB1dF9idWZbN10gKyBvdXRwdXRfY29sKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDAsIG91dHB0cik7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCA0LCBvdXRwdHIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2ppZGN0aW50LWFsdGl2ZWMuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qaWRjdGludC1hbHRpdmVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1ZGQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qaWRjdGludC1hbHRpdmVjLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisgKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFNMT1cgSU5URUdFUiBJTlZFUlNFIERDVCAqLworCisjaW5jbHVkZSAianNpbWRfYWx0aXZlYy5oIgorCisKKyNkZWZpbmUgRl8wXzI5OCAgMjQ0NiAgIC8qIEZJWCgwLjI5ODYzMTMzNikgKi8KKyNkZWZpbmUgRl8wXzM5MCAgMzE5NiAgIC8qIEZJWCgwLjM5MDE4MDY0NCkgKi8KKyNkZWZpbmUgRl8wXzU0MSAgNDQzMyAgIC8qIEZJWCgwLjU0MTE5NjEwMCkgKi8KKyNkZWZpbmUgRl8wXzc2NSAgNjI3MCAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRl8wXzg5OSAgNzM3MyAgIC8qIEZJWCgwLjg5OTk3NjIyMykgKi8KKyNkZWZpbmUgRl8xXzE3NSAgOTYzMyAgIC8qIEZJWCgxLjE3NTg3NTYwMikgKi8KKyNkZWZpbmUgRl8xXzUwMSAgMTIyOTkgIC8qIEZJWCgxLjUwMTMyMTExMCkgKi8KKyNkZWZpbmUgRl8xXzg0NyAgMTUxMzcgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRl8xXzk2MSAgMTYwNjkgIC8qIEZJWCgxLjk2MTU3MDU2MCkgKi8KKyNkZWZpbmUgRl8yXzA1MyAgMTY4MTkgIC8qIEZJWCgyLjA1MzExOTg2OSkgKi8KKyNkZWZpbmUgRl8yXzU2MiAgMjA5OTUgIC8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRl8zXzA3MiAgMjUxNzIgIC8qIEZJWCgzLjA3MjcxMTAyNikgKi8KKworI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAyCisjZGVmaW5lIERFU0NBTEVfUDEgIChDT05TVF9CSVRTIC0gUEFTUzFfQklUUykKKyNkZWZpbmUgREVTQ0FMRV9QMiAgKENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykKKworCisjZGVmaW5lIERPX0lEQ1QoaW4sIFBBU1MpIHsgXAorICAvKiBFdmVuIHBhcnQgXAorICAgKiBcCisgICAqIChPcmlnaW5hbCkgXAorICAgKiB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOyBcCisgICAqIHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OyBcCisgICAqIHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7IFwKKyAgICogXAorICAgKiAoVGhpcyBpbXBsZW1lbnRhdGlvbikgXAorICAgKiB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOyBcCisgICAqIHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7IFwKKyAgICovIFwKKyAgXAorICBpbiMjMjZsID0gdmVjX21lcmdlaChpbiMjMiwgaW4jIzYpOyBcCisgIGluIyMyNmggPSB2ZWNfbWVyZ2VsKGluIyMyLCBpbiMjNik7IFwKKyAgXAorICB0bXAzbCA9IHZlY19tc3VtcyhpbiMjMjZsLCBwd19mMTMwX2YwNTQsIHBkX3plcm8pOyBcCisgIHRtcDNoID0gdmVjX21zdW1zKGluIyMyNmgsIHB3X2YxMzBfZjA1NCwgcGRfemVybyk7IFwKKyAgdG1wMmwgPSB2ZWNfbXN1bXMoaW4jIzI2bCwgcHdfZjA1NF9tZjEzMCwgcGRfemVybyk7IFwKKyAgdG1wMmggPSB2ZWNfbXN1bXMoaW4jIzI2aCwgcHdfZjA1NF9tZjEzMCwgcGRfemVybyk7IFwKKyAgXAorICB0bXAwID0gdmVjX2FkZChpbiMjMCwgaW4jIzQpOyBcCisgIHRtcDEgPSB2ZWNfc3ViKGluIyMwLCBpbiMjNCk7IFwKKyAgXAorICB0bXAwbCA9IHZlY191bnBhY2toKHRtcDApOyBcCisgIHRtcDBoID0gdmVjX3VucGFja2wodG1wMCk7IFwKKyAgdG1wMGwgPSB2ZWNfc2wodG1wMGwsIGNvbnN0X2JpdHMpOyBcCisgIHRtcDBoID0gdmVjX3NsKHRtcDBoLCBjb25zdF9iaXRzKTsgXAorICB0bXAwbCA9IHZlY19hZGQodG1wMGwsIHBkX2Rlc2NhbGVfcCMjUEFTUyk7IFwKKyAgdG1wMGggPSB2ZWNfYWRkKHRtcDBoLCBwZF9kZXNjYWxlX3AjI1BBU1MpOyBcCisgIFwKKyAgdG1wMTBsID0gdmVjX2FkZCh0bXAwbCwgdG1wM2wpOyBcCisgIHRtcDEwaCA9IHZlY19hZGQodG1wMGgsIHRtcDNoKTsgXAorICB0bXAxM2wgPSB2ZWNfc3ViKHRtcDBsLCB0bXAzbCk7IFwKKyAgdG1wMTNoID0gdmVjX3N1Yih0bXAwaCwgdG1wM2gpOyBcCisgIFwKKyAgdG1wMWwgPSB2ZWNfdW5wYWNraCh0bXAxKTsgXAorICB0bXAxaCA9IHZlY191bnBhY2tsKHRtcDEpOyBcCisgIHRtcDFsID0gdmVjX3NsKHRtcDFsLCBjb25zdF9iaXRzKTsgXAorICB0bXAxaCA9IHZlY19zbCh0bXAxaCwgY29uc3RfYml0cyk7IFwKKyAgdG1wMWwgPSB2ZWNfYWRkKHRtcDFsLCBwZF9kZXNjYWxlX3AjI1BBU1MpOyBcCisgIHRtcDFoID0gdmVjX2FkZCh0bXAxaCwgcGRfZGVzY2FsZV9wIyNQQVNTKTsgXAorICBcCisgIHRtcDExbCA9IHZlY19hZGQodG1wMWwsIHRtcDJsKTsgXAorICB0bXAxMWggPSB2ZWNfYWRkKHRtcDFoLCB0bXAyaCk7IFwKKyAgdG1wMTJsID0gdmVjX3N1Yih0bXAxbCwgdG1wMmwpOyBcCisgIHRtcDEyaCA9IHZlY19zdWIodG1wMWgsIHRtcDJoKTsgXAorICBcCisgIC8qIE9kZCBwYXJ0ICovIFwKKyAgXAorICB6MyA9IHZlY19hZGQoaW4jIzMsIGluIyM3KTsgXAorICB6NCA9IHZlY19hZGQoaW4jIzEsIGluIyM1KTsgXAorICBcCisgIC8qIChPcmlnaW5hbCkgXAorICAgKiB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOyBcCisgICAqIHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OyBcCisgICAqIHozICs9IHo1OyAgejQgKz0gejU7IFwKKyAgICogXAorICAgKiAoVGhpcyBpbXBsZW1lbnRhdGlvbikgXAorICAgKiB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsgXAorICAgKiB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsgXAorICAgKi8gXAorICBcCisgIHozNGwgPSB2ZWNfbWVyZ2VoKHozLCB6NCk7IFwKKyAgejM0aCA9IHZlY19tZXJnZWwoejMsIHo0KTsgXAorICBcCisgIHozbCA9IHZlY19tc3Vtcyh6MzRsLCBwd19tZjA3OF9mMTE3LCBwZF96ZXJvKTsgXAorICB6M2ggPSB2ZWNfbXN1bXMoejM0aCwgcHdfbWYwNzhfZjExNywgcGRfemVybyk7IFwKKyAgejRsID0gdmVjX21zdW1zKHozNGwsIHB3X2YxMTdfZjA3OCwgcGRfemVybyk7IFwKKyAgejRoID0gdmVjX21zdW1zKHozNGgsIHB3X2YxMTdfZjA3OCwgcGRfemVybyk7IFwKKyAgXAorICAvKiAoT3JpZ2luYWwpIFwKKyAgICogejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7IFwKKyAgICogdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7IFwKKyAgICogdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7IFwKKyAgICogejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7IFwKKyAgICogdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OyBcCisgICAqIHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsgXAorICAgKiBcCisgICAqIChUaGlzIGltcGxlbWVudGF0aW9uKSBcCisgICAqIHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsgXAorICAgKiB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7IFwKKyAgICogdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOyBcCisgICAqIHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsgXAorICAgKiB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsgXAorICAgKiB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsgXAorICAgKi8gXAorICBcCisgIGluIyM3MWwgPSB2ZWNfbWVyZ2VoKGluIyM3LCBpbiMjMSk7IFwKKyAgaW4jIzcxaCA9IHZlY19tZXJnZWwoaW4jIzcsIGluIyMxKTsgXAorICBcCisgIHRtcDBsID0gdmVjX21zdW1zKGluIyM3MWwsIHB3X21mMDYwX21mMDg5LCB6M2wpOyBcCisgIHRtcDBoID0gdmVjX21zdW1zKGluIyM3MWgsIHB3X21mMDYwX21mMDg5LCB6M2gpOyBcCisgIHRtcDNsID0gdmVjX21zdW1zKGluIyM3MWwsIHB3X21mMDg5X2YwNjAsIHo0bCk7IFwKKyAgdG1wM2ggPSB2ZWNfbXN1bXMoaW4jIzcxaCwgcHdfbWYwODlfZjA2MCwgejRoKTsgXAorICBcCisgIGluIyM1M2wgPSB2ZWNfbWVyZ2VoKGluIyM1LCBpbiMjMyk7IFwKKyAgaW4jIzUzaCA9IHZlY19tZXJnZWwoaW4jIzUsIGluIyMzKTsgXAorICBcCisgIHRtcDFsID0gdmVjX21zdW1zKGluIyM1M2wsIHB3X21mMDUwX21mMjU2LCB6NGwpOyBcCisgIHRtcDFoID0gdmVjX21zdW1zKGluIyM1M2gsIHB3X21mMDUwX21mMjU2LCB6NGgpOyBcCisgIHRtcDJsID0gdmVjX21zdW1zKGluIyM1M2wsIHB3X21mMjU2X2YwNTAsIHozbCk7IFwKKyAgdG1wMmggPSB2ZWNfbXN1bXMoaW4jIzUzaCwgcHdfbWYyNTZfZjA1MCwgejNoKTsgXAorICBcCisgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLyBcCisgIFwKKyAgb3V0MGwgPSB2ZWNfYWRkKHRtcDEwbCwgdG1wM2wpOyBcCisgIG91dDBoID0gdmVjX2FkZCh0bXAxMGgsIHRtcDNoKTsgXAorICBvdXQ3bCA9IHZlY19zdWIodG1wMTBsLCB0bXAzbCk7IFwKKyAgb3V0N2ggPSB2ZWNfc3ViKHRtcDEwaCwgdG1wM2gpOyBcCisgIFwKKyAgb3V0MGwgPSB2ZWNfc3JhKG91dDBsLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDBoID0gdmVjX3NyYShvdXQwaCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQ3bCA9IHZlY19zcmEob3V0N2wsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0N2ggPSB2ZWNfc3JhKG91dDdoLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIFwKKyAgb3V0MCA9IHZlY19wYWNrKG91dDBsLCBvdXQwaCk7IFwKKyAgb3V0NyA9IHZlY19wYWNrKG91dDdsLCBvdXQ3aCk7IFwKKyAgXAorICBvdXQxbCA9IHZlY19hZGQodG1wMTFsLCB0bXAybCk7IFwKKyAgb3V0MWggPSB2ZWNfYWRkKHRtcDExaCwgdG1wMmgpOyBcCisgIG91dDZsID0gdmVjX3N1Yih0bXAxMWwsIHRtcDJsKTsgXAorICBvdXQ2aCA9IHZlY19zdWIodG1wMTFoLCB0bXAyaCk7IFwKKyAgXAorICBvdXQxbCA9IHZlY19zcmEob3V0MWwsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0MWggPSB2ZWNfc3JhKG91dDFoLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDZsID0gdmVjX3NyYShvdXQ2bCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQ2aCA9IHZlY19zcmEob3V0NmgsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgXAorICBvdXQxID0gdmVjX3BhY2sob3V0MWwsIG91dDFoKTsgXAorICBvdXQ2ID0gdmVjX3BhY2sob3V0NmwsIG91dDZoKTsgXAorICBcCisgIG91dDJsID0gdmVjX2FkZCh0bXAxMmwsIHRtcDFsKTsgXAorICBvdXQyaCA9IHZlY19hZGQodG1wMTJoLCB0bXAxaCk7IFwKKyAgb3V0NWwgPSB2ZWNfc3ViKHRtcDEybCwgdG1wMWwpOyBcCisgIG91dDVoID0gdmVjX3N1Yih0bXAxMmgsIHRtcDFoKTsgXAorICBcCisgIG91dDJsID0gdmVjX3NyYShvdXQybCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQyaCA9IHZlY19zcmEob3V0MmgsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0NWwgPSB2ZWNfc3JhKG91dDVsLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDVoID0gdmVjX3NyYShvdXQ1aCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBcCisgIG91dDIgPSB2ZWNfcGFjayhvdXQybCwgb3V0MmgpOyBcCisgIG91dDUgPSB2ZWNfcGFjayhvdXQ1bCwgb3V0NWgpOyBcCisgIFwKKyAgb3V0M2wgPSB2ZWNfYWRkKHRtcDEzbCwgdG1wMGwpOyBcCisgIG91dDNoID0gdmVjX2FkZCh0bXAxM2gsIHRtcDBoKTsgXAorICBvdXQ0bCA9IHZlY19zdWIodG1wMTNsLCB0bXAwbCk7IFwKKyAgb3V0NGggPSB2ZWNfc3ViKHRtcDEzaCwgdG1wMGgpOyBcCisgIFwKKyAgb3V0M2wgPSB2ZWNfc3JhKG91dDNsLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIG91dDNoID0gdmVjX3NyYShvdXQzaCwgZGVzY2FsZV9wIyNQQVNTKTsgXAorICBvdXQ0bCA9IHZlY19zcmEob3V0NGwsIGRlc2NhbGVfcCMjUEFTUyk7IFwKKyAgb3V0NGggPSB2ZWNfc3JhKG91dDRoLCBkZXNjYWxlX3AjI1BBU1MpOyBcCisgIFwKKyAgb3V0MyA9IHZlY19wYWNrKG91dDNsLCBvdXQzaCk7IFwKKyAgb3V0NCA9IHZlY19wYWNrKG91dDRsLCBvdXQ0aCk7IFwKK30KKworCit2b2lkIGpzaW1kX2lkY3RfaXNsb3dfYWx0aXZlYyh2b2lkICpkY3RfdGFibGVfLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIHNob3J0ICpkY3RfdGFibGUgPSAoc2hvcnQgKilkY3RfdGFibGVfOworICBpbnQgKm91dHB0cjsKKworICBfX3ZlY3RvciBzaG9ydCByb3cwLCByb3cxLCByb3cyLCByb3czLCByb3c0LCByb3c1LCByb3c2LCByb3c3LAorICAgIGNvbDAsIGNvbDEsIGNvbDIsIGNvbDMsIGNvbDQsIGNvbDUsIGNvbDYsIGNvbDcsCisgICAgcXVhbnQwLCBxdWFudDEsIHF1YW50MiwgcXVhbnQzLCBxdWFudDQsIHF1YW50NSwgcXVhbnQ2LCBxdWFudDcsCisgICAgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgejMsIHo0LAorICAgIHozNGwsIHozNGgsIGNvbDcxbCwgY29sNzFoLCBjb2wyNmwsIGNvbDI2aCwgY29sNTNsLCBjb2w1M2gsCisgICAgcm93NzFsLCByb3c3MWgsIHJvdzI2bCwgcm93MjZoLCByb3c1M2wsIHJvdzUzaCwKKyAgICBvdXQwLCBvdXQxLCBvdXQyLCBvdXQzLCBvdXQ0LCBvdXQ1LCBvdXQ2LCBvdXQ3OworICBfX3ZlY3RvciBpbnQgdG1wMGwsIHRtcDBoLCB0bXAxbCwgdG1wMWgsIHRtcDJsLCB0bXAyaCwgdG1wM2wsIHRtcDNoLAorICAgIHRtcDEwbCwgdG1wMTBoLCB0bXAxMWwsIHRtcDExaCwgdG1wMTJsLCB0bXAxMmgsIHRtcDEzbCwgdG1wMTNoLAorICAgIHozbCwgejNoLCB6NGwsIHo0aCwKKyAgICBvdXQwbCwgb3V0MGgsIG91dDFsLCBvdXQxaCwgb3V0MmwsIG91dDJoLCBvdXQzbCwgb3V0M2gsIG91dDRsLCBvdXQ0aCwKKyAgICBvdXQ1bCwgb3V0NWgsIG91dDZsLCBvdXQ2aCwgb3V0N2wsIG91dDdoOworICBfX3ZlY3RvciBzaWduZWQgY2hhciBvdXRiOworCisgIC8qIENvbnN0YW50cyAqLworICBfX3ZlY3RvciBzaG9ydCBwd196ZXJvID0geyBfXzhYKDApIH0sCisgICAgcHdfZjEzMF9mMDU0ID0geyBfXzRYMihGXzBfNTQxICsgRl8wXzc2NSwgRl8wXzU0MSkgfSwKKyAgICBwd19mMDU0X21mMTMwID0geyBfXzRYMihGXzBfNTQxLCBGXzBfNTQxIC0gRl8xXzg0NykgfSwKKyAgICBwd19tZjA3OF9mMTE3ID0geyBfXzRYMihGXzFfMTc1IC0gRl8xXzk2MSwgRl8xXzE3NSkgfSwKKyAgICBwd19mMTE3X2YwNzggPSB7IF9fNFgyKEZfMV8xNzUsIEZfMV8xNzUgLSBGXzBfMzkwKSB9LAorICAgIHB3X21mMDYwX21mMDg5ID0geyBfXzRYMihGXzBfMjk4IC0gRl8wXzg5OSwgLUZfMF84OTkpIH0sCisgICAgcHdfbWYwODlfZjA2MCA9IHsgX180WDIoLUZfMF84OTksIEZfMV81MDEgLSBGXzBfODk5KSB9LAorICAgIHB3X21mMDUwX21mMjU2ID0geyBfXzRYMihGXzJfMDUzIC0gRl8yXzU2MiwgLUZfMl81NjIpIH0sCisgICAgcHdfbWYyNTZfZjA1MCA9IHsgX180WDIoLUZfMl81NjIsIEZfM18wNzIgLSBGXzJfNTYyKSB9OworICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBwYXNzMV9iaXRzID0geyBfXzhYKFBBU1MxX0JJVFMpIH07CisgIF9fdmVjdG9yIGludCBwZF96ZXJvID0geyBfXzRYKDApIH0sCisgICAgcGRfZGVzY2FsZV9wMSA9IHsgX180WCgxIDw8IChERVNDQUxFX1AxIC0gMSkpIH0sCisgICAgcGRfZGVzY2FsZV9wMiA9IHsgX180WCgxIDw8IChERVNDQUxFX1AyIC0gMSkpIH07CisgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBkZXNjYWxlX3AxID0geyBfXzRYKERFU0NBTEVfUDEpIH0sCisgICAgZGVzY2FsZV9wMiA9IHsgX180WChERVNDQUxFX1AyKSB9LAorICAgIGNvbnN0X2JpdHMgPSB7IF9fNFgoQ09OU1RfQklUUykgfTsKKyAgX192ZWN0b3Igc2lnbmVkIGNoYXIgcGJfY2VudGVyanNhbXAgPSB7IF9fMTZYKENFTlRFUkpTQU1QTEUpIH07CisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgKi8KKworICBjb2wwID0gdmVjX2xkKDAsIGNvZWZfYmxvY2spOworICBjb2wxID0gdmVjX2xkKDE2LCBjb2VmX2Jsb2NrKTsKKyAgY29sMiA9IHZlY19sZCgzMiwgY29lZl9ibG9jayk7CisgIGNvbDMgPSB2ZWNfbGQoNDgsIGNvZWZfYmxvY2spOworICBjb2w0ID0gdmVjX2xkKDY0LCBjb2VmX2Jsb2NrKTsKKyAgY29sNSA9IHZlY19sZCg4MCwgY29lZl9ibG9jayk7CisgIGNvbDYgPSB2ZWNfbGQoOTYsIGNvZWZfYmxvY2spOworICBjb2w3ID0gdmVjX2xkKDExMiwgY29lZl9ibG9jayk7CisKKyAgdG1wMSA9IHZlY19vcihjb2wxLCBjb2wyKTsKKyAgdG1wMiA9IHZlY19vcihjb2wzLCBjb2w0KTsKKyAgdG1wMSA9IHZlY19vcih0bXAxLCB0bXAyKTsKKyAgdG1wMyA9IHZlY19vcihjb2w1LCBjb2w2KTsKKyAgdG1wMyA9IHZlY19vcih0bXAzLCBjb2w3KTsKKyAgdG1wMSA9IHZlY19vcih0bXAxLCB0bXAzKTsKKworICBxdWFudDAgPSB2ZWNfbGQoMCwgZGN0X3RhYmxlKTsKKyAgY29sMCA9IHZlY19tbGFkZChjb2wwLCBxdWFudDAsIHB3X3plcm8pOworCisgIGlmICh2ZWNfYWxsX2VxKHRtcDEsIHB3X3plcm8pKSB7CisgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KKworICAgIGNvbDAgPSB2ZWNfc2woY29sMCwgcGFzczFfYml0cyk7CisKKyAgICByb3cwID0gdmVjX3NwbGF0KGNvbDAsIDApOworICAgIHJvdzEgPSB2ZWNfc3BsYXQoY29sMCwgMSk7CisgICAgcm93MiA9IHZlY19zcGxhdChjb2wwLCAyKTsKKyAgICByb3czID0gdmVjX3NwbGF0KGNvbDAsIDMpOworICAgIHJvdzQgPSB2ZWNfc3BsYXQoY29sMCwgNCk7CisgICAgcm93NSA9IHZlY19zcGxhdChjb2wwLCA1KTsKKyAgICByb3c2ID0gdmVjX3NwbGF0KGNvbDAsIDYpOworICAgIHJvdzcgPSB2ZWNfc3BsYXQoY29sMCwgNyk7CisKKyAgfSBlbHNlIHsKKworICAgIHF1YW50MSA9IHZlY19sZCgxNiwgZGN0X3RhYmxlKTsKKyAgICBxdWFudDIgPSB2ZWNfbGQoMzIsIGRjdF90YWJsZSk7CisgICAgcXVhbnQzID0gdmVjX2xkKDQ4LCBkY3RfdGFibGUpOworICAgIHF1YW50NCA9IHZlY19sZCg2NCwgZGN0X3RhYmxlKTsKKyAgICBxdWFudDUgPSB2ZWNfbGQoODAsIGRjdF90YWJsZSk7CisgICAgcXVhbnQ2ID0gdmVjX2xkKDk2LCBkY3RfdGFibGUpOworICAgIHF1YW50NyA9IHZlY19sZCgxMTIsIGRjdF90YWJsZSk7CisKKyAgICBjb2wxID0gdmVjX21sYWRkKGNvbDEsIHF1YW50MSwgcHdfemVybyk7CisgICAgY29sMiA9IHZlY19tbGFkZChjb2wyLCBxdWFudDIsIHB3X3plcm8pOworICAgIGNvbDMgPSB2ZWNfbWxhZGQoY29sMywgcXVhbnQzLCBwd196ZXJvKTsKKyAgICBjb2w0ID0gdmVjX21sYWRkKGNvbDQsIHF1YW50NCwgcHdfemVybyk7CisgICAgY29sNSA9IHZlY19tbGFkZChjb2w1LCBxdWFudDUsIHB3X3plcm8pOworICAgIGNvbDYgPSB2ZWNfbWxhZGQoY29sNiwgcXVhbnQ2LCBwd196ZXJvKTsKKyAgICBjb2w3ID0gdmVjX21sYWRkKGNvbDcsIHF1YW50NywgcHdfemVybyk7CisKKyAgICBET19JRENUKGNvbCwgMSk7CisKKyAgICBUUkFOU1BPU0Uob3V0LCByb3cpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIHJvd3MgKi8KKworICBET19JRENUKHJvdywgMik7CisKKyAgVFJBTlNQT1NFKG91dCwgY29sKTsKKworICBvdXRiID0gdmVjX3BhY2tzKGNvbDAsIGNvbDApOworICBvdXRiID0gdmVjX2FkZChvdXRiLCBwYl9jZW50ZXJqc2FtcCk7CisgIG91dHB0ciA9IChpbnQgKikob3V0cHV0X2J1ZlswXSArIG91dHB1dF9jb2wpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgMCwgb3V0cHRyKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDQsIG91dHB0cik7CisKKyAgb3V0YiA9IHZlY19wYWNrcyhjb2wxLCBjb2wxKTsKKyAgb3V0YiA9IHZlY19hZGQob3V0YiwgcGJfY2VudGVyanNhbXApOworICBvdXRwdHIgPSAoaW50ICopKG91dHB1dF9idWZbMV0gKyBvdXRwdXRfY29sKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDAsIG91dHB0cik7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCA0LCBvdXRwdHIpOworCisgIG91dGIgPSB2ZWNfcGFja3MoY29sMiwgY29sMik7CisgIG91dGIgPSB2ZWNfYWRkKG91dGIsIHBiX2NlbnRlcmpzYW1wKTsKKyAgb3V0cHRyID0gKGludCAqKShvdXRwdXRfYnVmWzJdICsgb3V0cHV0X2NvbCk7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCAwLCBvdXRwdHIpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgNCwgb3V0cHRyKTsKKworICBvdXRiID0gdmVjX3BhY2tzKGNvbDMsIGNvbDMpOworICBvdXRiID0gdmVjX2FkZChvdXRiLCBwYl9jZW50ZXJqc2FtcCk7CisgIG91dHB0ciA9IChpbnQgKikob3V0cHV0X2J1ZlszXSArIG91dHB1dF9jb2wpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgMCwgb3V0cHRyKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDQsIG91dHB0cik7CisKKyAgb3V0YiA9IHZlY19wYWNrcyhjb2w0LCBjb2w0KTsKKyAgb3V0YiA9IHZlY19hZGQob3V0YiwgcGJfY2VudGVyanNhbXApOworICBvdXRwdHIgPSAoaW50ICopKG91dHB1dF9idWZbNF0gKyBvdXRwdXRfY29sKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDAsIG91dHB0cik7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCA0LCBvdXRwdHIpOworCisgIG91dGIgPSB2ZWNfcGFja3MoY29sNSwgY29sNSk7CisgIG91dGIgPSB2ZWNfYWRkKG91dGIsIHBiX2NlbnRlcmpzYW1wKTsKKyAgb3V0cHRyID0gKGludCAqKShvdXRwdXRfYnVmWzVdICsgb3V0cHV0X2NvbCk7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCAwLCBvdXRwdHIpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgNCwgb3V0cHRyKTsKKworICBvdXRiID0gdmVjX3BhY2tzKGNvbDYsIGNvbDYpOworICBvdXRiID0gdmVjX2FkZChvdXRiLCBwYl9jZW50ZXJqc2FtcCk7CisgIG91dHB0ciA9IChpbnQgKikob3V0cHV0X2J1Zls2XSArIG91dHB1dF9jb2wpOworICB2ZWNfc3RlKChfX3ZlY3RvciBpbnQpb3V0YiwgMCwgb3V0cHRyKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDQsIG91dHB0cik7CisKKyAgb3V0YiA9IHZlY19wYWNrcyhjb2w3LCBjb2w3KTsKKyAgb3V0YiA9IHZlY19hZGQob3V0YiwgcGJfY2VudGVyanNhbXApOworICBvdXRwdHIgPSAoaW50ICopKG91dHB1dF9idWZbN10gKyBvdXRwdXRfY29sKTsKKyAgdmVjX3N0ZSgoX192ZWN0b3IgaW50KW91dGIsIDAsIG91dHB0cik7CisgIHZlY19zdGUoKF9fdmVjdG9yIGludClvdXRiLCA0LCBvdXRwdHIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pxdWFudGktYWx0aXZlYy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pxdWFudGktYWx0aXZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmUzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvanF1YW50aS1hbHRpdmVjLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSwgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICovCisKKy8qIElOVEVHRVIgUVVBTlRJWkFUSU9OIEFORCBTQU1QTEUgQ09OVkVSU0lPTiAqLworCisjaW5jbHVkZSAianNpbWRfYWx0aXZlYy5oIgorCisKKy8qIE5PVEU6IFRoZSBhZGRyZXNzIHdpbGwgZWl0aGVyIGJlIGFsaWduZWQgb3Igb2Zmc2V0IGJ5IDggYnl0ZXMsIHNvIHdlIGNhbgorICogYWx3YXlzIGdldCB0aGUgZGF0YSB3ZSB3YW50IGJ5IHVzaW5nIGEgc2luZ2xlIHZlY3RvciBsb2FkIChhbHRob3VnaCB3ZSBtYXkKKyAqIGhhdmUgdG8gcGVybXV0ZSB0aGUgcmVzdWx0LikKKyAqLworI2lmIF9fQklHX0VORElBTl9fCisKKyNkZWZpbmUgTE9BRF9ST1cocm93KSB7IFwKKyAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW3Jvd10gKyBzdGFydF9jb2w7IFwKKyAgaW4jI3JvdyA9IHZlY19sZCgwLCBlbGVtcHRyKTsgXAorICBpZiAoKHNpemVfdCllbGVtcHRyICYgMTUpIFwKKyAgICBpbiMjcm93ID0gdmVjX3Blcm0oaW4jI3JvdywgaW4jI3JvdywgdmVjX2x2c2woMCwgZWxlbXB0cikpOyBcCit9CisKKyNlbHNlCisKKyNkZWZpbmUgTE9BRF9ST1cocm93KSB7IFwKKyAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW3Jvd10gKyBzdGFydF9jb2w7IFwKKyAgaW4jI3JvdyA9IHZlY192c3hfbGQoMCwgZWxlbXB0cik7IFwKK30KKworI2VuZGlmCisKKwordm9pZCBqc2ltZF9jb252c2FtcF9hbHRpdmVjKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSkKK3sKKyAgSlNBTVBST1cgZWxlbXB0cjsKKworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGluMCwgaW4xLCBpbjIsIGluMywgaW40LCBpbjUsIGluNiwgaW43OworICBfX3ZlY3RvciBzaG9ydCBvdXQwLCBvdXQxLCBvdXQyLCBvdXQzLCBvdXQ0LCBvdXQ1LCBvdXQ2LCBvdXQ3OworCisgIC8qIENvbnN0YW50cyAqLworICBfX3ZlY3RvciBzaG9ydCBwd19jZW50ZXJqc2FtcCA9IHsgX184WChDRU5URVJKU0FNUExFKSB9OworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBiX3plcm8gPSB7IF9fMTZYKDApIH07CisKKyAgTE9BRF9ST1coMCk7CisgIExPQURfUk9XKDEpOworICBMT0FEX1JPVygyKTsKKyAgTE9BRF9ST1coMyk7CisgIExPQURfUk9XKDQpOworICBMT0FEX1JPVyg1KTsKKyAgTE9BRF9ST1coNik7CisgIExPQURfUk9XKDcpOworCisgIG91dDAgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluMCk7CisgIG91dDEgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluMSk7CisgIG91dDIgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluMik7CisgIG91dDMgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluMyk7CisgIG91dDQgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluNCk7CisgIG91dDUgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluNSk7CisgIG91dDYgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluNik7CisgIG91dDcgPSAoX192ZWN0b3Igc2hvcnQpVkVDX1VOUEFDS0hVKGluNyk7CisKKyAgb3V0MCA9IHZlY19zdWIob3V0MCwgcHdfY2VudGVyanNhbXApOworICBvdXQxID0gdmVjX3N1YihvdXQxLCBwd19jZW50ZXJqc2FtcCk7CisgIG91dDIgPSB2ZWNfc3ViKG91dDIsIHB3X2NlbnRlcmpzYW1wKTsKKyAgb3V0MyA9IHZlY19zdWIob3V0MywgcHdfY2VudGVyanNhbXApOworICBvdXQ0ID0gdmVjX3N1YihvdXQ0LCBwd19jZW50ZXJqc2FtcCk7CisgIG91dDUgPSB2ZWNfc3ViKG91dDUsIHB3X2NlbnRlcmpzYW1wKTsKKyAgb3V0NiA9IHZlY19zdWIob3V0NiwgcHdfY2VudGVyanNhbXApOworICBvdXQ3ID0gdmVjX3N1YihvdXQ3LCBwd19jZW50ZXJqc2FtcCk7CisKKyAgdmVjX3N0KG91dDAsIDAsIHdvcmtzcGFjZSk7CisgIHZlY19zdChvdXQxLCAxNiwgd29ya3NwYWNlKTsKKyAgdmVjX3N0KG91dDIsIDMyLCB3b3Jrc3BhY2UpOworICB2ZWNfc3Qob3V0MywgNDgsIHdvcmtzcGFjZSk7CisgIHZlY19zdChvdXQ0LCA2NCwgd29ya3NwYWNlKTsKKyAgdmVjX3N0KG91dDUsIDgwLCB3b3Jrc3BhY2UpOworICB2ZWNfc3Qob3V0NiwgOTYsIHdvcmtzcGFjZSk7CisgIHZlY19zdChvdXQ3LCAxMTIsIHdvcmtzcGFjZSk7Cit9CisKKworI2RlZmluZSBXT1JEX0JJVCAgMTYKKworLyogVGhlcmUgaXMgbm8gQWx0aVZlYyAxNi1iaXQgdW5zaWduZWQgbXVsdGlwbHkgaW5zdHJ1Y3Rpb24sIGhlbmNlIHRoaXMuCisgICBXZSBiYXNpY2FsbHkgbmVlZCBhbiB1bnNpZ25lZCBlcXVpdmFsZW50IG9mIHZlY19tYWRkcygpLiAqLworCisjZGVmaW5lIE1VTFRJUExZKHZzMCwgdnMxLCBvdXQpIHsgXAorICB0bXBlID0gdmVjX211bGUoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZzMCwgXAorICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZzMSk7IFwKKyAgdG1wbyA9IHZlY19tdWxvKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2czAsIFwKKyAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2czEpOyBcCisgIG91dCA9IChfX3ZlY3RvciBzaG9ydCl2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdG1wZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXRtcG8sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0X3BhY2tfaW5kZXgpOyBcCit9CisKK3ZvaWQganNpbWRfcXVhbnRpemVfYWx0aXZlYyhKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICpkaXZpc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICp3b3Jrc3BhY2UpCit7CisgIF9fdmVjdG9yIHNob3J0IHJvdzAsIHJvdzEsIHJvdzIsIHJvdzMsIHJvdzQsIHJvdzUsIHJvdzYsIHJvdzcsCisgICAgcm93MHMsIHJvdzFzLCByb3cycywgcm93M3MsIHJvdzRzLCByb3c1cywgcm93NnMsIHJvdzdzLAorICAgIGNvcnIwLCBjb3JyMSwgY29ycjIsIGNvcnIzLCBjb3JyNCwgY29ycjUsIGNvcnI2LCBjb3JyNywKKyAgICByZWNpcDAsIHJlY2lwMSwgcmVjaXAyLCByZWNpcDMsIHJlY2lwNCwgcmVjaXA1LCByZWNpcDYsIHJlY2lwNywKKyAgICBzY2FsZTAsIHNjYWxlMSwgc2NhbGUyLCBzY2FsZTMsIHNjYWxlNCwgc2NhbGU1LCBzY2FsZTYsIHNjYWxlNzsKKyAgX192ZWN0b3IgdW5zaWduZWQgaW50IHRtcGUsIHRtcG87CisKKyAgLyogQ29uc3RhbnRzICovCisgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHB3X3dvcmRfYml0X20xID0geyBfXzhYKFdPUkRfQklUIC0gMSkgfTsKKyNpZiBfX0JJR19FTkRJQU5fXworICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNoaWZ0X3BhY2tfaW5kZXggPQorICAgIHsgIDAsICAxLCAxNiwgMTcsICA0LCAgNSwgMjAsIDIxLCAgOCwgIDksIDI0LCAyNSwgMTIsIDEzLCAyOCwgMjkgfTsKKyNlbHNlCisgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc2hpZnRfcGFja19pbmRleCA9CisgICAgeyAgMiwgIDMsIDE4LCAxOSwgIDYsICA3LCAyMiwgMjMsIDEwLCAxMSwgMjYsIDI3LCAxNCwgMTUsIDMwLCAzMSB9OworI2VuZGlmCisKKyAgcm93MCA9IHZlY19sZCgwLCB3b3Jrc3BhY2UpOworICByb3cxID0gdmVjX2xkKDE2LCB3b3Jrc3BhY2UpOworICByb3cyID0gdmVjX2xkKDMyLCB3b3Jrc3BhY2UpOworICByb3czID0gdmVjX2xkKDQ4LCB3b3Jrc3BhY2UpOworICByb3c0ID0gdmVjX2xkKDY0LCB3b3Jrc3BhY2UpOworICByb3c1ID0gdmVjX2xkKDgwLCB3b3Jrc3BhY2UpOworICByb3c2ID0gdmVjX2xkKDk2LCB3b3Jrc3BhY2UpOworICByb3c3ID0gdmVjX2xkKDExMiwgd29ya3NwYWNlKTsKKworICAvKiBCcmFuY2gtbGVzcyBhYnNvbHV0ZSB2YWx1ZSAqLworICByb3cwcyA9IHZlY19zcmEocm93MCwgcHdfd29yZF9iaXRfbTEpOworICByb3cxcyA9IHZlY19zcmEocm93MSwgcHdfd29yZF9iaXRfbTEpOworICByb3cycyA9IHZlY19zcmEocm93MiwgcHdfd29yZF9iaXRfbTEpOworICByb3czcyA9IHZlY19zcmEocm93MywgcHdfd29yZF9iaXRfbTEpOworICByb3c0cyA9IHZlY19zcmEocm93NCwgcHdfd29yZF9iaXRfbTEpOworICByb3c1cyA9IHZlY19zcmEocm93NSwgcHdfd29yZF9iaXRfbTEpOworICByb3c2cyA9IHZlY19zcmEocm93NiwgcHdfd29yZF9iaXRfbTEpOworICByb3c3cyA9IHZlY19zcmEocm93NywgcHdfd29yZF9iaXRfbTEpOworICByb3cwID0gdmVjX3hvcihyb3cwLCByb3cwcyk7CisgIHJvdzEgPSB2ZWNfeG9yKHJvdzEsIHJvdzFzKTsKKyAgcm93MiA9IHZlY194b3Iocm93Miwgcm93MnMpOworICByb3czID0gdmVjX3hvcihyb3czLCByb3czcyk7CisgIHJvdzQgPSB2ZWNfeG9yKHJvdzQsIHJvdzRzKTsKKyAgcm93NSA9IHZlY194b3Iocm93NSwgcm93NXMpOworICByb3c2ID0gdmVjX3hvcihyb3c2LCByb3c2cyk7CisgIHJvdzcgPSB2ZWNfeG9yKHJvdzcsIHJvdzdzKTsKKyAgcm93MCA9IHZlY19zdWIocm93MCwgcm93MHMpOworICByb3cxID0gdmVjX3N1Yihyb3cxLCByb3cxcyk7CisgIHJvdzIgPSB2ZWNfc3ViKHJvdzIsIHJvdzJzKTsKKyAgcm93MyA9IHZlY19zdWIocm93Mywgcm93M3MpOworICByb3c0ID0gdmVjX3N1Yihyb3c0LCByb3c0cyk7CisgIHJvdzUgPSB2ZWNfc3ViKHJvdzUsIHJvdzVzKTsKKyAgcm93NiA9IHZlY19zdWIocm93Niwgcm93NnMpOworICByb3c3ID0gdmVjX3N1Yihyb3c3LCByb3c3cyk7CisKKyAgY29ycjAgPSB2ZWNfbGQoRENUU0laRTIgKiAyLCBkaXZpc29ycyk7CisgIGNvcnIxID0gdmVjX2xkKERDVFNJWkUyICogMiArIDE2LCBkaXZpc29ycyk7CisgIGNvcnIyID0gdmVjX2xkKERDVFNJWkUyICogMiArIDMyLCBkaXZpc29ycyk7CisgIGNvcnIzID0gdmVjX2xkKERDVFNJWkUyICogMiArIDQ4LCBkaXZpc29ycyk7CisgIGNvcnI0ID0gdmVjX2xkKERDVFNJWkUyICogMiArIDY0LCBkaXZpc29ycyk7CisgIGNvcnI1ID0gdmVjX2xkKERDVFNJWkUyICogMiArIDgwLCBkaXZpc29ycyk7CisgIGNvcnI2ID0gdmVjX2xkKERDVFNJWkUyICogMiArIDk2LCBkaXZpc29ycyk7CisgIGNvcnI3ID0gdmVjX2xkKERDVFNJWkUyICogMiArIDExMiwgZGl2aXNvcnMpOworCisgIHJvdzAgPSB2ZWNfYWRkKHJvdzAsIGNvcnIwKTsKKyAgcm93MSA9IHZlY19hZGQocm93MSwgY29ycjEpOworICByb3cyID0gdmVjX2FkZChyb3cyLCBjb3JyMik7CisgIHJvdzMgPSB2ZWNfYWRkKHJvdzMsIGNvcnIzKTsKKyAgcm93NCA9IHZlY19hZGQocm93NCwgY29ycjQpOworICByb3c1ID0gdmVjX2FkZChyb3c1LCBjb3JyNSk7CisgIHJvdzYgPSB2ZWNfYWRkKHJvdzYsIGNvcnI2KTsKKyAgcm93NyA9IHZlY19hZGQocm93NywgY29ycjcpOworCisgIHJlY2lwMCA9IHZlY19sZCgwLCBkaXZpc29ycyk7CisgIHJlY2lwMSA9IHZlY19sZCgxNiwgZGl2aXNvcnMpOworICByZWNpcDIgPSB2ZWNfbGQoMzIsIGRpdmlzb3JzKTsKKyAgcmVjaXAzID0gdmVjX2xkKDQ4LCBkaXZpc29ycyk7CisgIHJlY2lwNCA9IHZlY19sZCg2NCwgZGl2aXNvcnMpOworICByZWNpcDUgPSB2ZWNfbGQoODAsIGRpdmlzb3JzKTsKKyAgcmVjaXA2ID0gdmVjX2xkKDk2LCBkaXZpc29ycyk7CisgIHJlY2lwNyA9IHZlY19sZCgxMTIsIGRpdmlzb3JzKTsKKworICBNVUxUSVBMWShyb3cwLCByZWNpcDAsIHJvdzApOworICBNVUxUSVBMWShyb3cxLCByZWNpcDEsIHJvdzEpOworICBNVUxUSVBMWShyb3cyLCByZWNpcDIsIHJvdzIpOworICBNVUxUSVBMWShyb3czLCByZWNpcDMsIHJvdzMpOworICBNVUxUSVBMWShyb3c0LCByZWNpcDQsIHJvdzQpOworICBNVUxUSVBMWShyb3c1LCByZWNpcDUsIHJvdzUpOworICBNVUxUSVBMWShyb3c2LCByZWNpcDYsIHJvdzYpOworICBNVUxUSVBMWShyb3c3LCByZWNpcDcsIHJvdzcpOworCisgIHNjYWxlMCA9IHZlY19sZChEQ1RTSVpFMiAqIDQsIGRpdmlzb3JzKTsKKyAgc2NhbGUxID0gdmVjX2xkKERDVFNJWkUyICogNCArIDE2LCBkaXZpc29ycyk7CisgIHNjYWxlMiA9IHZlY19sZChEQ1RTSVpFMiAqIDQgKyAzMiwgZGl2aXNvcnMpOworICBzY2FsZTMgPSB2ZWNfbGQoRENUU0laRTIgKiA0ICsgNDgsIGRpdmlzb3JzKTsKKyAgc2NhbGU0ID0gdmVjX2xkKERDVFNJWkUyICogNCArIDY0LCBkaXZpc29ycyk7CisgIHNjYWxlNSA9IHZlY19sZChEQ1RTSVpFMiAqIDQgKyA4MCwgZGl2aXNvcnMpOworICBzY2FsZTYgPSB2ZWNfbGQoRENUU0laRTIgKiA0ICsgOTYsIGRpdmlzb3JzKTsKKyAgc2NhbGU3ID0gdmVjX2xkKERDVFNJWkUyICogNCArIDExMiwgZGl2aXNvcnMpOworCisgIE1VTFRJUExZKHJvdzAsIHNjYWxlMCwgcm93MCk7CisgIE1VTFRJUExZKHJvdzEsIHNjYWxlMSwgcm93MSk7CisgIE1VTFRJUExZKHJvdzIsIHNjYWxlMiwgcm93Mik7CisgIE1VTFRJUExZKHJvdzMsIHNjYWxlMywgcm93Myk7CisgIE1VTFRJUExZKHJvdzQsIHNjYWxlNCwgcm93NCk7CisgIE1VTFRJUExZKHJvdzUsIHNjYWxlNSwgcm93NSk7CisgIE1VTFRJUExZKHJvdzYsIHNjYWxlNiwgcm93Nik7CisgIE1VTFRJUExZKHJvdzcsIHNjYWxlNywgcm93Nyk7CisKKyAgcm93MCA9IHZlY194b3Iocm93MCwgcm93MHMpOworICByb3cxID0gdmVjX3hvcihyb3cxLCByb3cxcyk7CisgIHJvdzIgPSB2ZWNfeG9yKHJvdzIsIHJvdzJzKTsKKyAgcm93MyA9IHZlY194b3Iocm93Mywgcm93M3MpOworICByb3c0ID0gdmVjX3hvcihyb3c0LCByb3c0cyk7CisgIHJvdzUgPSB2ZWNfeG9yKHJvdzUsIHJvdzVzKTsKKyAgcm93NiA9IHZlY194b3Iocm93Niwgcm93NnMpOworICByb3c3ID0gdmVjX3hvcihyb3c3LCByb3c3cyk7CisgIHJvdzAgPSB2ZWNfc3ViKHJvdzAsIHJvdzBzKTsKKyAgcm93MSA9IHZlY19zdWIocm93MSwgcm93MXMpOworICByb3cyID0gdmVjX3N1Yihyb3cyLCByb3cycyk7CisgIHJvdzMgPSB2ZWNfc3ViKHJvdzMsIHJvdzNzKTsKKyAgcm93NCA9IHZlY19zdWIocm93NCwgcm93NHMpOworICByb3c1ID0gdmVjX3N1Yihyb3c1LCByb3c1cyk7CisgIHJvdzYgPSB2ZWNfc3ViKHJvdzYsIHJvdzZzKTsKKyAgcm93NyA9IHZlY19zdWIocm93Nywgcm93N3MpOworCisgIHZlY19zdChyb3cwLCAwLCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzEsIDE2LCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzIsIDMyLCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzMsIDQ4LCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzQsIDY0LCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzUsIDgwLCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzYsIDk2LCBjb2VmX2Jsb2NrKTsKKyAgdmVjX3N0KHJvdzcsIDExMiwgY29lZl9ibG9jayk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvanNpbWQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQvcG93ZXJwYy9qc2ltZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDM5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvanNpbWQuYwpAQCAtMCwwICsxLDg3MiBAQAorLyoKKyAqIGpzaW1kX3Bvd2VycGMuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExLCAyMDE0LTIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzLgorICoKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJub3JtYWwiIHBvcnRpb25zCisgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCisgKiBQb3dlclBDIGFyY2hpdGVjdHVyZS4KKyAqLworCisjaWZkZWYgX19hbWlnYW9zNF9fCisvKiBUaGlzIG11c3QgYmUgZGVmaW5lZCBmaXJzdCBhcyBpdCByZS1kZWZpbmVzIEdMT0JBTCBvdGhlcndpc2UgKi8KKyNpbmNsdWRlIDxwcm90by9leGVjLmg+CisjZW5kaWYKKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgIi4uLy4uL2ppbmNsdWRlLmgiCisjaW5jbHVkZSAiLi4vLi4vanBlZ2xpYi5oIgorI2luY2x1ZGUgIi4uLy4uL2pzaW1kLmgiCisjaW5jbHVkZSAiLi4vLi4vamRjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2pzaW1kZGN0LmgiCisjaW5jbHVkZSAiLi4vanNpbWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmIGRlZmluZWQoX19PcGVuQlNEX18pCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBzaW1kX3N1cHBvcnQgPSB+MDsKKworI2lmICFkZWZpbmVkKF9fQUxUSVZFQ19fKSAmJiAoZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgZGVmaW5lZChfX0FORFJPSURfXykpCisKKyNkZWZpbmUgU09NRVdIQVRfU0FORV9QUk9DX0NQVUlORk9fU0laRV9MSU1JVCAgKDEwMjQgKiAxMDI0KQorCitMT0NBTChpbnQpCitjaGVja19mZWF0dXJlKGNoYXIgKmJ1ZmZlciwgY2hhciAqZmVhdHVyZSkKK3sKKyAgY2hhciAqcDsKKworICBpZiAoKmZlYXR1cmUgPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHN0cm5jbXAoYnVmZmVyLCAiY3B1IiwgMykgIT0gMCkKKyAgICByZXR1cm4gMDsKKyAgYnVmZmVyICs9IDM7CisgIHdoaWxlIChpc3NwYWNlKCpidWZmZXIpKQorICAgIGJ1ZmZlcisrOworCisgIC8qIENoZWNrIGlmICdmZWF0dXJlJyBpcyBwcmVzZW50IGluIHRoZSBidWZmZXIgYXMgYSBzZXBhcmF0ZSB3b3JkICovCisgIHdoaWxlICgocCA9IHN0cnN0cihidWZmZXIsIGZlYXR1cmUpKSkgeworICAgIGlmIChwID4gYnVmZmVyICYmICFpc3NwYWNlKCoocCAtIDEpKSkgeworICAgICAgYnVmZmVyKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgcCArPSBzdHJsZW4oZmVhdHVyZSk7CisgICAgaWYgKCpwICE9IDAgJiYgIWlzc3BhY2UoKnApKSB7CisgICAgICBidWZmZXIrKzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworTE9DQUwoaW50KQorcGFyc2VfcHJvY19jcHVpbmZvKGludCBidWZzaXplKQoreworICBjaGFyICpidWZmZXIgPSAoY2hhciAqKW1hbGxvYyhidWZzaXplKTsKKyAgRklMRSAqZmQ7CisKKyAgc2ltZF9zdXBwb3J0ID0gMDsKKworICBpZiAoIWJ1ZmZlcikKKyAgICByZXR1cm4gMDsKKworICBmZCA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKyAgaWYgKGZkKSB7CisgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgYnVmc2l6ZSwgZmQpKSB7CisgICAgICBpZiAoIXN0cmNocihidWZmZXIsICdcbicpICYmICFmZW9mKGZkKSkgeworICAgICAgICAvKiAiaW1wb3NzaWJsZSIgaGFwcGVuZWQgLSBpbnN1ZmZpY2llbnQgc2l6ZSBvZiB0aGUgYnVmZmVyISAqLworICAgICAgICBmY2xvc2UoZmQpOworICAgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKGNoZWNrX2ZlYXR1cmUoYnVmZmVyLCAiYWx0aXZlYyIpKQorICAgICAgICBzaW1kX3N1cHBvcnQgfD0gSlNJTURfQUxUSVZFQzsKKyAgICB9CisgICAgZmNsb3NlKGZkKTsKKyAgfQorICBmcmVlKGJ1ZmZlcik7CisgIHJldHVybiAxOworfQorCisjZW5kaWYKKworLyoKKyAqIENoZWNrIHdoYXQgU0lNRCBhY2NlbGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCisgKgorICogRklYTUU6IFRoaXMgY29kZSBpcyByYWN5IHVuZGVyIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuCisgKi8KK0xPQ0FMKHZvaWQpCitpbml0X3NpbWQodm9pZCkKK3sKKyNpZm5kZWYgTk9fR0VURU5WCisgIGNoYXIgKmVudiA9IE5VTEw7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0FMVElWRUNfXykgJiYgKGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IGRlZmluZWQoX19BTkRST0lEX18pKQorICBpbnQgYnVmc2l6ZSA9IDEwMjQ7IC8qIGFuIGluaXRpYWwgZ3Vlc3MgZm9yIHRoZSBsaW5lIGJ1ZmZlciBzaXplIGxpbWl0ICovCisjZWxpZiBkZWZpbmVkKF9fYW1pZ2FvczRfXykKKyAgdWludDMyIGFsdGl2ZWMgPSAwOworI2VsaWYgZGVmaW5lZChfX09wZW5CU0RfXykKKyAgaW50IG1pYlsyXSA9IHsgQ1RMX01BQ0hERVAsIENQVV9BTFRJVkVDIH07CisgIGludCBhbHRpdmVjOworICBzaXplX3QgbGVuID0gc2l6ZW9mKGFsdGl2ZWMpOworI2VuZGlmCisKKyAgaWYgKHNpbWRfc3VwcG9ydCAhPSB+MFUpCisgICAgcmV0dXJuOworCisgIHNpbWRfc3VwcG9ydCA9IDA7CisKKyNpZiBkZWZpbmVkKF9fQUxUSVZFQ19fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyAgc2ltZF9zdXBwb3J0IHw9IEpTSU1EX0FMVElWRUM7CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKQorICB3aGlsZSAoIXBhcnNlX3Byb2NfY3B1aW5mbyhidWZzaXplKSkgeworICAgIGJ1ZnNpemUgKj0gMjsKKyAgICBpZiAoYnVmc2l6ZSA+IFNPTUVXSEFUX1NBTkVfUFJPQ19DUFVJTkZPX1NJWkVfTElNSVQpCisgICAgICBicmVhazsKKyAgfQorI2VsaWYgZGVmaW5lZChfX2FtaWdhb3M0X18pCisgIElFeGVjLT5HZXRDUFVJbmZvVGFncyhHQ0lUX1ZlY3RvclVuaXQsICZhbHRpdmVjLCBUQUdfRE9ORSk7CisgIGlmIChhbHRpdmVjID09IFZFQ1RPUlRZUEVfQUxUSVZFQykKKyAgICBzaW1kX3N1cHBvcnQgfD0gSlNJTURfQUxUSVZFQzsKKyNlbGlmIGRlZmluZWQoX19PcGVuQlNEX18pCisgIGlmIChzeXNjdGwobWliLCAyLCAmYWx0aXZlYywgJmxlbiwgTlVMTCwgMCkgPT0gMCAmJiBhbHRpdmVjICE9IDApCisgICAgc2ltZF9zdXBwb3J0IHw9IEpTSU1EX0FMVElWRUM7CisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRFTlYKKyAgLyogRm9yY2UgZGlmZmVyZW50IHNldHRpbmdzIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VBTFRJVkVDIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCA9IEpTSU1EX0FMVElWRUM7CisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VOT05FIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCA9IDA7CisjZW5kaWYKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfeWNjKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQUxUSVZFQykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfZ3JheSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYjU2NSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9yZ2JfeWNjX2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfcm93LAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgdm9pZCAoKmFsdGl2ZWNmY3QpIChKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOworCisgIHN3aXRjaCAoY2luZm8tPmluX2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX3JnYl95Y2NfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICB9CisKKyAgYWx0aXZlY2ZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl9ncmF5X2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqYWx0aXZlY2ZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisKKyAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2V4dGJncl9ncmF5X2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfZXh0eHJnYl9ncmF5X2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfcmdiX2dyYXlfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICB9CisKKyAgYWx0aXZlY2ZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3ljY19yZ2JfY29udmVydChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cykKK3sKKyAgdm9pZCAoKmFsdGl2ZWNmY3QpIChKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9hbHRpdmVjOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgfQorCisgIGFsdGl2ZWNmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiNTY1X2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAganNpbWRfaDJ2Ml9kb3duc2FtcGxlX2FsdGl2ZWMoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGEpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfZG93bnNhbXBsZShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGpzaW1kX2gydjFfZG93bnNhbXBsZV9hbHRpdmVjKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BTFRJVkVDKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIGpzaW1kX2gydjJfdXBzYW1wbGVfYWx0aXZlYyhjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIGpzaW1kX2gydjFfdXBzYW1wbGVfYWx0aXZlYyhjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQUxUSVZFQykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX2ZhbmN5X3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9hbHRpdmVjKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2FsdGl2ZWMoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YV9wdHIpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FMVElWRUMpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9tZXJnZWRfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQUxUSVZFQykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworICB2b2lkICgqYWx0aXZlY2ZjdCkgKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVkpOworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjOworICAgIGJyZWFrOworICB9CisKKyAgYWx0aXZlY2ZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIHZvaWQgKCphbHRpdmVjZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisKKyAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICBhbHRpdmVjZmN0ID0ganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9hbHRpdmVjOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYWx0aXZlYzsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGFsdGl2ZWNmY3QgPSBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYWx0aXZlY2ZjdCA9IGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2FsdGl2ZWM7CisgICAgYnJlYWs7CisgIH0KKworICBhbHRpdmVjZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fY29udnNhbXAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BTFRJVkVDKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworICBqc2ltZF9jb252c2FtcF9hbHRpdmVjKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXBfZmxvYXQoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pc2xvdyh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQUxUSVZFQykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lmYXN0KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BTFRJVkVDKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pc2xvdyhEQ1RFTEVNICpkYXRhKQoreworICBqc2ltZF9mZGN0X2lzbG93X2FsdGl2ZWMoZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pZmFzdChEQ1RFTEVNICpkYXRhKQoreworICBqc2ltZF9mZGN0X2lmYXN0X2FsdGl2ZWMoZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3F1YW50aXplKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BTFRJVkVDKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3F1YW50aXplX2Zsb2F0KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLCBEQ1RFTEVNICp3b3Jrc3BhY2UpCit7CisgIGpzaW1kX3F1YW50aXplX2FsdGl2ZWMoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemVfZmxvYXQoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8yeDIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF80eDQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF8yeDIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzR4NChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfaXNsb3codm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BTFRJVkVDKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfaWZhc3Qodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BTFRJVkVDKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfZmxvYXQodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9pc2xvdyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF9pc2xvd19hbHRpdmVjKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfaWZhc3RfYWx0aXZlYyhjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2h1ZmZfZW5jb2RlX29uZV9ibG9jayh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKEpPQ1RFVCAqKQoranNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQgKnN0YXRlLCBKT0NURVQgKmJ1ZmZlciwgSkNPRUZQVFIgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RfZGNfdmFsLCBjX2Rlcml2ZWRfdGJsICpkY3RibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsIGludCBTbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICp2YWx1ZXMsIHNpemVfdCAqemVyb2JpdHMpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZSh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmUoY29uc3QgSkNPRUYgKmJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQWwsIEpDT0VGICphYnN2YWx1ZXMsIHNpemVfdCAqYml0cykKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3Bvd2VycGMvanNpbWRfYWx0aXZlYy5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pzaW1kX2FsdGl2ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGJkYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC9wb3dlcnBjL2pzaW1kX2FsdGl2ZWMuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQWx0aVZlYyBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUsIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiLi4vLi4vamluY2x1ZGUuaCIKKyNpbmNsdWRlICIuLi8uLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWQuaCIKKyNpbmNsdWRlICIuLi8uLi9qZGN0LmgiCisjaW5jbHVkZSAiLi4vLi4vanNpbWRkY3QuaCIKKyNpbmNsdWRlICIuLi9qc2ltZC5oIgorI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKworCisvKiBDb21tb24gY29kZSAqLworCisjZGVmaW5lIF9fNFgoYSkgICAgICBhLCBhLCBhLCBhCisjZGVmaW5lIF9fNFgyKGEsIGIpICBhLCBiLCBhLCBiLCBhLCBiLCBhLCBiCisjZGVmaW5lIF9fOFgoYSkgICAgICBfXzRYKGEpLCBfXzRYKGEpCisjZGVmaW5lIF9fMTZYKGEpICAgICBfXzhYKGEpLCBfXzhYKGEpCisKKyNkZWZpbmUgVFJBTlNQT1NFKHJvdywgY29sKSB7IFwKKyAgX192ZWN0b3Igc2hvcnQgcm93MDRsLCByb3cwNGgsIHJvdzE1bCwgcm93MTVoLCBcCisgICAgICAgICAgICAgICAgIHJvdzI2bCwgcm93MjZoLCByb3czN2wsIHJvdzM3aDsgXAorICBfX3ZlY3RvciBzaG9ydCBjb2wwMWUsIGNvbDAxbywgY29sMjNlLCBjb2wyM28sIFwKKyAgICAgICAgICAgICAgICAgY29sNDVlLCBjb2w0NW8sIGNvbDY3ZSwgY29sNjdvOyBcCisgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYW5zcG9zZSBjb2VmZmljaWVudHMgKHBoYXNlIDEpICovIFwKKyAgcm93MDRsID0gdmVjX21lcmdlaChyb3cjIzAsIHJvdyMjNCk7IC8qIHJvdzA0bD0oMDAgNDAgMDEgNDEgMDIgNDIgMDMgNDMpICovIFwKKyAgcm93MDRoID0gdmVjX21lcmdlbChyb3cjIzAsIHJvdyMjNCk7IC8qIHJvdzA0aD0oMDQgNDQgMDUgNDUgMDYgNDYgMDcgNDcpICovIFwKKyAgcm93MTVsID0gdmVjX21lcmdlaChyb3cjIzEsIHJvdyMjNSk7IC8qIHJvdzE1bD0oMTAgNTAgMTEgNTEgMTIgNTIgMTMgNTMpICovIFwKKyAgcm93MTVoID0gdmVjX21lcmdlbChyb3cjIzEsIHJvdyMjNSk7IC8qIHJvdzE1aD0oMTQgNTQgMTUgNTUgMTYgNTYgMTcgNTcpICovIFwKKyAgcm93MjZsID0gdmVjX21lcmdlaChyb3cjIzIsIHJvdyMjNik7IC8qIHJvdzI2bD0oMjAgNjAgMjEgNjEgMjIgNjIgMjMgNjMpICovIFwKKyAgcm93MjZoID0gdmVjX21lcmdlbChyb3cjIzIsIHJvdyMjNik7IC8qIHJvdzI2aD0oMjQgNjQgMjUgNjUgMjYgNjYgMjcgNjcpICovIFwKKyAgcm93MzdsID0gdmVjX21lcmdlaChyb3cjIzMsIHJvdyMjNyk7IC8qIHJvdzM3bD0oMzAgNzAgMzEgNzEgMzIgNzIgMzMgNzMpICovIFwKKyAgcm93MzdoID0gdmVjX21lcmdlbChyb3cjIzMsIHJvdyMjNyk7IC8qIHJvdzM3aD0oMzQgNzQgMzUgNzUgMzYgNzYgMzcgNzcpICovIFwKKyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNwb3NlIGNvZWZmaWNpZW50cyAocGhhc2UgMikgKi8gXAorICBjb2wwMWUgPSB2ZWNfbWVyZ2VoKHJvdzA0bCwgcm93MjZsKTsgLyogY29sMDFlPSgwMCAyMCA0MCA2MCAwMSAyMSA0MSA2MSkgKi8gXAorICBjb2wyM2UgPSB2ZWNfbWVyZ2VsKHJvdzA0bCwgcm93MjZsKTsgLyogY29sMjNlPSgwMiAyMiA0MiA2MiAwMyAyMyA0MyA2MykgKi8gXAorICBjb2w0NWUgPSB2ZWNfbWVyZ2VoKHJvdzA0aCwgcm93MjZoKTsgLyogY29sNDVlPSgwNCAyNCA0NCA2NCAwNSAyNSA0NSA2NSkgKi8gXAorICBjb2w2N2UgPSB2ZWNfbWVyZ2VsKHJvdzA0aCwgcm93MjZoKTsgLyogY29sNjdlPSgwNiAyNiA0NiA2NiAwNyAyNyA0NyA2NykgKi8gXAorICBjb2wwMW8gPSB2ZWNfbWVyZ2VoKHJvdzE1bCwgcm93MzdsKTsgLyogY29sMDFvPSgxMCAzMCA1MCA3MCAxMSAzMSA1MSA3MSkgKi8gXAorICBjb2wyM28gPSB2ZWNfbWVyZ2VsKHJvdzE1bCwgcm93MzdsKTsgLyogY29sMjNvPSgxMiAzMiA1MiA3MiAxMyAzMyA1MyA3MykgKi8gXAorICBjb2w0NW8gPSB2ZWNfbWVyZ2VoKHJvdzE1aCwgcm93MzdoKTsgLyogY29sNDVvPSgxNCAzNCA1NCA3NCAxNSAzNSA1NSA3NSkgKi8gXAorICBjb2w2N28gPSB2ZWNfbWVyZ2VsKHJvdzE1aCwgcm93MzdoKTsgLyogY29sNjdvPSgxNiAzNiA1NiA3NiAxNyAzNyA1NyA3NykgKi8gXAorICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmFuc3Bvc2UgY29lZmZpY2llbnRzIChwaGFzZSAzKSAqLyBcCisgIGNvbCMjMCA9IHZlY19tZXJnZWgoY29sMDFlLCBjb2wwMW8pOyAvKiBjb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkgKi8gXAorICBjb2wjIzEgPSB2ZWNfbWVyZ2VsKGNvbDAxZSwgY29sMDFvKTsgLyogY29sMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpICovIFwKKyAgY29sIyMyID0gdmVjX21lcmdlaChjb2wyM2UsIGNvbDIzbyk7IC8qIGNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKSAqLyBcCisgIGNvbCMjMyA9IHZlY19tZXJnZWwoY29sMjNlLCBjb2wyM28pOyAvKiBjb2wzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykgKi8gXAorICBjb2wjIzQgPSB2ZWNfbWVyZ2VoKGNvbDQ1ZSwgY29sNDVvKTsgLyogY29sND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpICovIFwKKyAgY29sIyM1ID0gdmVjX21lcmdlbChjb2w0NWUsIGNvbDQ1byk7IC8qIGNvbDU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KSAqLyBcCisgIGNvbCMjNiA9IHZlY19tZXJnZWgoY29sNjdlLCBjb2w2N28pOyAvKiBjb2w2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikgKi8gXAorICBjb2wjIzcgPSB2ZWNfbWVyZ2VsKGNvbDY3ZSwgY29sNjdvKTsgLyogY29sNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpICovIFwKK30KKworI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKGEsIGIpICAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKworLyogTWFjcm9zIHRvIGFic3RyYWN0IGJpZy9saXR0bGUgZW5kaWFuIGJpdCB0d2lkZGxpbmcgKi8KKworI2lmIF9fQklHX0VORElBTl9fCisKKyNkZWZpbmUgVkVDX0xEKGEsIGIpICAgICB2ZWNfbGQoYSwgYikKKyNkZWZpbmUgVkVDX1NUKGEsIGIsIGMpICB2ZWNfc3QoYSwgYiwgYykKKyNkZWZpbmUgVkVDX1VOUEFDS0hVKGEpICB2ZWNfbWVyZ2VoKHBiX3plcm8sIGEpCisjZGVmaW5lIFZFQ19VTlBBQ0tMVShhKSAgdmVjX21lcmdlbChwYl96ZXJvLCBhKQorCisjZWxzZQorCisjZGVmaW5lIFZFQ19MRChhLCBiKSAgICAgdmVjX3ZzeF9sZChhLCBiKQorI2RlZmluZSBWRUNfU1QoYSwgYiwgYykgIHZlY192c3hfc3QoYSwgYiwgYykKKyNkZWZpbmUgVkVDX1VOUEFDS0hVKGEpICB2ZWNfbWVyZ2VoKGEsIHBiX3plcm8pCisjZGVmaW5lIFZFQ19VTlBBQ0tMVShhKSAgdmVjX21lcmdlbChhLCBwYl96ZXJvKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjY29sZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNjb2xleHQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhMzg0OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjY29sZXh0LWF2eDIuYXNtCkBAIC0wLDAgKzEsNTYwIEBACis7Cis7IGpjY29sZXh0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoNjQtYml0IEFWWDIpCis7Cis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cyk7Cis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gaW1nX3dpZHRoCis7IHIxMSA9IEpTQU1QQVJSQVkgaW5wdXRfYnVmCis7IHIxMiA9IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgorOyByMTNkID0gSkRJTUVOU0lPTiBvdXRwdXRfcm93Cis7IHIxNGQgPSBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSB3ayhpKSAgIHJicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1lNTVdPUkQgIDsgeW1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgOAorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIpCisKK0VYVE4oanNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9ZTU1XT1JEKSAgOyBhbGlnbiB0byAyNTYgYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3aygwKV0KKyAgICBjb2xsZWN0X2FyZ3MgNQorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgZWN4LCByMTBkCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIKKyAgICBtb3YgICAgICAgICBlY3gsIHIxM2QKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBBUlJBWSBbcnNpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUEFSUkFZIFtyc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBsZWEgICAgICAgICByZGksIFtyZGkrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByYngsIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHBvcCAgICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcnNpLCByMTEKKyAgICBtb3YgICAgICAgICBlYXgsIHIxNGQKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmR4CisgICAgcHVzaCAgICAgICAgcmJ4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcnNpCisgICAgcHVzaCAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICByYngsIEpTQU1QUk9XIFtyYnhdICAgICA7IG91dHB0cjEKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZHhdICAgICA7IG91dHB0cjIKKworICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyAgOyAtLS0tLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisgICAgcHVzaCAgICAgICAgcmF4CisgICAgcHVzaCAgICAgICAgcmR4CisgICAgbGVhICAgICAgICAgcmN4LCBbcmN4K3JjeCoyXSAgICAgICAgOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9CWVRFCisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX0JZVEUKKyAgICBtb3Z6eCAgICAgICByYXgsIEJZVEUgW3JzaStyY3hdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1dPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIG1vdnp4ICAgICAgIHJkeCwgV09SRCBbcnNpK3JjeF0KKyAgICBzaGwgICAgICAgICByYXgsIFdPUkRfQklUCisgICAgb3IgICAgICAgICAgcmF4LCByZHgKKy5jb2x1bW5fbGQ0OgorICAgIHZtb3ZkICAgICAgIHhtbUEsIGVheAorICAgIHBvcCAgICAgICAgIHJkeAorICAgIHBvcCAgICAgICAgIHJheAorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfRFdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICB2bW92ZCAgICAgICB4bW1GLCBYTU1fRFdPUkQgW3JzaStyY3hdCisgICAgdnBzbGxkcSAgICAgeG1tQSwgeG1tQSwgU0laRU9GX0RXT1JECisgICAgdnBvciAgICAgICAgeG1tQSwgeG1tQSwgeG1tRgorLmNvbHVtbl9sZDg6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9NTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMTYKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIHZtb3ZxICAgICAgIHhtbUIsIFhNTV9NTVdPUkQgW3JzaStyY3hdCisgICAgdnBzbGxkcSAgICAgeG1tQSwgeG1tQSwgU0laRU9GX01NV09SRAorICAgIHZwb3IgICAgICAgIHhtbUEsIHhtbUEsIHhtbUIKKy5jb2x1bW5fbGQxNjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMzIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICB2bW92ZHF1ICAgICB4bW1CLCBYTU1fTU1XT1JEIFtyc2krcmN4XQorICAgIHZwZXJtMmkxMjggIHltbUEsIHltbUEsIHltbUEsIDEKKyAgICB2cG9yICAgICAgICB5bW1BLCB5bW1CCisuY29sdW1uX2xkMzI6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDY0CisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgdm1vdmRxYSAgICAgeW1tRiwgeW1tQQorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorLmNvbHVtbl9sZDY0OgorICAgIHRlc3QgICAgICAgIGNsLCAyKlNJWkVPRl9ZTU1XT1JECisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2bW92ZHF1ICAgICB5bW1BLCBZTU1XT1JEIFtyc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1GLCBZTU1XT1JEIFtyc2krMSpTSVpFT0ZfWU1NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKworLmNvbHVtbmxvb3A6CisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tRiwgWU1NV09SRCBbcnNpKzEqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tQiwgWU1NV09SRCBbcnNpKzIqU0laRU9GX1lNTVdPUkRdCisKKy5yZ2JfeWNjX2NudjoKKyAgICA7IHltbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1CisgICAgOyAgICAgICAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICA7IHltbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGCisgICAgOyAgICAgICAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSSAySSAwSiAxSiAySiAwSyAxSyAySyAwTCkKKyAgICA7IHltbUI9KDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRCisgICAgOyAgICAgICAyUSAwUiAxUiAyUiAwUyAxUyAyUyAwVCAxVCAyVCAwVSAxVSAyVSAwViAxViAyVikKKworICAgIHZtb3ZkcXUgICAgIHltbUMsIHltbUEKKyAgICB2aW5zZXJ0aTEyOCB5bW1BLCB5bW1GLCB4bW1BLCAwICA7IHltbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSSAySSAwSiAxSiAySiAwSyAxSyAySyAwTCkKKyAgICB2aW5zZXJ0aTEyOCB5bW1DLCB5bW1DLCB4bW1CLCAwICA7IHltbUM9KDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICB2aW5zZXJ0aTEyOCB5bW1CLCB5bW1CLCB4bW1GLCAwICA7IHltbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyUSAwUiAxUiAyUiAwUyAxUyAyUyAwVCAxVCAyVCAwVSAxVSAyVSAwViAxViAyVikKKyAgICB2cGVybTJpMTI4ICB5bW1GLCB5bW1DLCB5bW1DLCAxICA7IHltbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUSkKKworICAgIHZtb3ZkcWEgICAgIHltbUcsIHltbUEKKyAgICB2cHNsbGRxICAgICB5bW1BLCB5bW1BLCA4ICAgICA7IHltbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSSkKKyAgICB2cHNybGRxICAgICB5bW1HLCB5bW1HLCA4ICAgICA7IHltbUc9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAwSiAxSiAySiAwSyAxSyAySyAwTCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHZwdW5wY2toYncgIHltbUEsIHltbUEsIHltbUYgIDsgeW1tQT0oMDAgMDggMTAgMTggMjAgMjggMDEgMDkgMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBPIDFHIDFPIDJHIDJPIDBIIDBQIDFIIDFQIDJIIDJQIDBJIDBRIDFJIDFRKQorICAgIHZwc2xsZHEgICAgIHltbUYsIHltbUYsIDggICAgIDsgeW1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOKQorCisgICAgdnB1bnBja2xidyAgeW1tRywgeW1tRywgeW1tQiAgOyB5bW1HPSgyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQiAwNCAwQyAxNCAxQyAyNCAyQyAwNSAwRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMlEgMEogMFIgMUogMVIgMkogMlIgMEsgMFMgMUsgMVMgMksgMlMgMEwgMFQpCisgICAgdnB1bnBja2hidyAgeW1tRiwgeW1tRiwgeW1tQiAgOyB5bW1GPSgxNSAxRCAyNSAyRCAwNiAwRSAxNiAxRSAyNiAyRSAwNyAwRiAxNyAxRiAyNyAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUwgMVQgMkwgMlQgME0gMFUgMU0gMVUgMk0gMlUgME4gMFYgMU4gMVYgMk4gMlYpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1BCisgICAgdnBzbGxkcSAgICAgeW1tQSwgeW1tQSwgOCAgICAgOyB5bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgMEcgME8gMUcgMU8gMkcgMk8gMEggMFApCisgICAgdnBzcmxkcSAgICAgeW1tRCwgeW1tRCwgOCAgICAgOyB5bW1EPSgxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSAwRyAwTyAxRyAxTyAyRyAyTyAwSCAwUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUggMVAgMkggMlAgMEkgMFEgMUkgMVEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICB2cHVucGNraGJ3ICB5bW1BLCB5bW1BLCB5bW1HICA7IHltbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwSyAwTyAwUyAxRyAxSyAxTyAxUyAyRyAySyAyTyAyUyAwSCAwTCAwUCAwVCkKKyAgICB2cHNsbGRxICAgICB5bW1HLCB5bW1HLCA4ICAgICA7IHltbUc9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwNCAwQyAxNCAxQyAyNCAyQyAwNSAwRCAySSAyUSAwSiAwUiAxSiAxUiAySiAyUikKKworICAgIHZwdW5wY2tsYncgIHltbUQsIHltbUQsIHltbUYgIDsgeW1tRD0oMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFIIDFMIDFQIDFUIDJIIDJMIDJQIDJUIDBJIDBNIDBRIDBVIDFJIDFNIDFRIDFVKQorICAgIHZwdW5wY2toYncgIHltbUcsIHltbUcsIHltbUYgIDsgeW1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDJNIDJRIDJVIDBKIDBOIDBSIDBWIDFKIDFOIDFSIDFWIDJKIDJOIDJSIDJWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRSwgeW1tQQorICAgIHZwc2xsZHEgICAgIHltbUEsIHltbUEsIDggICAgIDsgeW1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDQgMDggMEMgMTAgMTQgMTggMUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTKQorICAgIHZwc3JsZHEgICAgIHltbUUsIHltbUUsIDggICAgIDsgeW1tRT0oMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQgMEcgMEsgME8gMFMgMUcgMUsgMU8gMVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJHIDJLIDJPIDJTIDBIIDBMIDBQIDBUIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgdnB1bnBja2hidyAgeW1tQSwgeW1tQSwgeW1tRCAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisgICAgdnBzbGxkcSAgICAgeW1tRCwgeW1tRCwgOCAgICAgOyB5bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMUggMUwgMVAgMVQgMkggMkwgMlAgMlQpCisKKyAgICB2cHVucGNrbGJ3ICB5bW1FLCB5bW1FLCB5bW1HICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSAwSCAwSiAwTCAwTiAwUCAwUiAwVCAwVikKKyAgICB2cHVucGNraGJ3ICB5bW1ELCB5bW1ELCB5bW1HICA7IHltbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxViAySCAySiAyTCAyTiAyUCAyUiAyVCAyVikKKworICAgIHZweG9yICAgICAgIHltbUgsIHltbUgsIHltbUgKKworICAgIHZtb3ZkcWEgICAgIHltbUMsIHltbUEKKyAgICB2cHVucGNrbGJ3ICB5bW1BLCB5bW1BLCB5bW1IICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDBHIDBJIDBLIDBNIDBPIDBRIDBTIDBVKQorICAgIHZwdW5wY2toYncgIHltbUMsIHltbUMsIHltbUggIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1FCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tSCAgOyB5bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSkKKyAgICB2cHVucGNraGJ3ICB5bW1CLCB5bW1CLCB5bW1IICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRiwgeW1tRAorICAgIHZwdW5wY2tsYncgIHltbUQsIHltbUQsIHltbUggIDsgeW1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYpCisgICAgdnB1bnBja2hidyAgeW1tRiwgeW1tRiwgeW1tSCAgOyB5bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAySCAySiAyTCAyTiAyUCAyUiAyVCAyVikKKworJWVsc2UgIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzE2CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKyAgICB2bW92ZCAgICAgICB4bW1BLCBYTU1fRFdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC84CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgIHZtb3ZxICAgICAgIHhtbUYsIFhNTV9NTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgdnBvciAgICAgICAgeG1tQSwgeG1tQSwgeG1tRgorLmNvbHVtbl9sZDQ6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgdm1vdmRxYSAgICAgeG1tRiwgeG1tQQorICAgIHZwZXJtMmkxMjggIHltbUYsIHltbUYsIHltbUYsIDEKKyAgICB2bW92ZHF1ICAgICB4bW1BLCBYTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisgICAgdnBvciAgICAgICAgeW1tQSwgeW1tQSwgeW1tRgorLmNvbHVtbl9sZDg6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzIKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMTYKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorICAgIHZtb3ZkcWEgICAgIHltbUYsIHltbUEKKyAgICB2bW92ZHF1ICAgICB5bW1BLCBZTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisuY29sdW1uX2xkMTY6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JECisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIHZtb3ZkcWEgICAgIHltbUUsIHltbUEKKyAgICB2bW92ZHFhICAgICB5bW1ILCB5bW1GCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tRiwgWU1NV09SRCBbcnNpKzEqU0laRU9GX1lNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisKKy5jb2x1bW5sb29wOgorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUYsIFlNTVdPUkQgW3JzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUUsIFlNTVdPUkQgW3JzaSsyKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUgsIFlNTVdPUkQgW3JzaSszKlNJWkVPRl9ZTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisgICAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgOyB5bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgOyB5bW1FPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1BCisgICAgdmluc2VydGkxMjggeW1tQSwgeW1tQSwgeG1tRSwgMSAgICAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgM0cgMEggMUggMkggM0ggMEkgMUkgMkkgM0kgMEogMUogMkogM0opCisgICAgdnBlcm0yaTEyOCAgeW1tRSwgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisKKyAgICB2bW92ZHFhICAgICB5bW1CLCB5bW1GCisgICAgdmluc2VydGkxMjggeW1tRiwgeW1tRiwgeG1tSCwgMSAgICAgOyB5bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMU8gMk8gM08gMFAgMVAgMlAgM1AgMFEgMVEgMlEgM1EgMFIgMVIgMlIgM1IpCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tQiwgeW1tSCwgMHgzMSAgOyB5bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRSAgICAgIDsgeW1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwSyAxRyAxSyAyRyAySyAzRyAzSyAwSCAwTCAxSCAxTCAySCAyTCAzSCAzTCkKKyAgICB2cHVucGNraGJ3ICB5bW1ELCB5bW1ELCB5bW1FICAgICAgOyB5bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBJIDBNIDFJIDFNIDJJIDJNIDNJIDNNIDBKIDBOIDFKIDFOIDJKIDJOIDNKIDNOKQorCisgICAgdm1vdmRxYSAgICAgeW1tQywgeW1tRgorICAgIHZwdW5wY2tsYncgIHltbUYsIHltbUYsIHltbUggICAgICA7IHltbUY9KDA4IDBDIDE4IDFDIDI4IDJDIDM4IDNDIDA5IDBEIDE5IDFEIDI5IDJEIDM5IDNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMFMgMU8gMVMgMk8gMlMgM08gM1MgMFAgMFQgMVAgMVQgMlAgMlQgM1AgM1QpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tSCAgICAgIDsgeW1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUSAwVSAxUSAxVSAyUSAyVSAzUSAzVSAwUiAwViAxUiAxViAyUiAyViAzUiAzVikKKworICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1GICAgICAgOyB5bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTIDJHIDJLIDJPIDJTIDNHIDNLIDNPIDNTKQorICAgIHZwdW5wY2tod2QgIHltbUIsIHltbUIsIHltbUYgICAgICA7IHltbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMEwgMFAgMFQgMUggMUwgMVAgMVQgMkggMkwgMlAgMlQgM0ggM0wgM1AgM1QpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1ECisgICAgdnB1bnBja2x3ZCAgeW1tRCwgeW1tRCwgeW1tQyAgICAgIDsgeW1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSSAwTSAwUSAwVSAxSSAxTSAxUSAxVSAySSAyTSAyUSAyVSAzSSAzTSAzUSAzVSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1HLCB5bW1DICAgICAgOyB5bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBKIDBOIDBSIDBWIDFKIDFOIDFSIDFWIDJKIDJOIDJSIDJWIDNKIDNOIDNSIDNWKQorCisgICAgdm1vdmRxYSAgICAgeW1tRSwgeW1tQQorICAgIHZwdW5wY2tsYncgIHltbUEsIHltbUEsIHltbUQgICAgICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisgICAgdnB1bnBja2hidyAgeW1tRSwgeW1tRSwgeW1tRCAgICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSkKKworICAgIHZtb3ZkcWEgICAgIHltbUgsIHltbUIKKyAgICB2cHVucGNrbGJ3ICB5bW1CLCB5bW1CLCB5bW1HICAgICAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWKQorICAgIHZwdW5wY2toYncgIHltbUgsIHltbUgsIHltbUcgICAgICA7IHltbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgM0ggM0ogM0wgM04gM1AgM1IgM1QgM1YpCisKKyAgICB2cHhvciAgICAgICB5bW1GLCB5bW1GLCB5bW1GCisKKyAgICB2bW92ZHFhICAgICB5bW1DLCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRiAgICAgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tRiAgICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUpCisKKyAgICB2bW92ZHFhICAgICB5bW1ELCB5bW1CCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRiAgICAgIDsgeW1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMEggMEogMEwgME4gMFAgMFIgMFQgMFYpCisgICAgdnB1bnBja2hidyAgeW1tRCwgeW1tRCwgeW1tRiAgICAgIDsgeW1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYpCisKKyAgICB2bW92ZHFhICAgICB5bW1HLCB5bW1FCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRiAgICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUpCisgICAgdnB1bnBja2hidyAgeW1tRywgeW1tRywgeW1tRiAgICAgIDsgeW1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgM0cgM0kgM0sgM00gM08gM1EgM1MgM1UpCisKKyAgICB2cHVucGNrbGJ3ICB5bW1GLCB5bW1GLCB5bW1ICisgICAgdnB1bnBja2hidyAgeW1tSCwgeW1tSCwgeW1tSAorICAgIHZwc3JsdyAgICAgIHltbUYsIHltbUYsIEJZVEVfQklUICA7IHltbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDJIIDJKIDJMIDJOIDJQIDJSIDJUIDJWKQorICAgIHZwc3JsdyAgICAgIHltbUgsIHltbUgsIEJZVEVfQklUICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWKQorCislZW5kaWYgIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyB5bW0wPVIoMDI0NjhBQ0VHSUtNT1FTVSk9UkUsIHltbTI9RygwMjQ2OEFDRUdJS01PUVNVKT1HRSwgeW1tND1CKDAyNDY4QUNFR0lLTU9RU1UpPUJFCisgICAgOyB5bW0xPVIoMTM1NzlCREZISkxOUFJUVik9Uk8sIHltbTM9RygxMzU3OUJERkhKTE5QUlRWKT1HTywgeW1tNT1CKDEzNTc5QkRGSEpMTlBSVFYpPUJPCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICAgIDsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgIDsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKyAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICA7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDApXSwgeW1tMCAgIDsgd2soMCk9UkUKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTEgICA7IHdrKDEpPVJPCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMildLCB5bW00ICAgOyB3aygyKT1CRQorICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDMpXSwgeW1tNSAgIDsgd2soMyk9Qk8KKworICAgIHZtb3ZkcWEgICAgIHltbTYsIHltbTEKKyAgICB2cHVucGNrbHdkICB5bW0xLCB5bW0xLCB5bW0zCisgICAgdnB1bnBja2h3ZCAgeW1tNiwgeW1tNiwgeW1tMworICAgIHZtb3ZkcWEgICAgIHltbTcsIHltbTEKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW02CisgICAgdnBtYWRkd2QgICAgeW1tMSwgeW1tMSwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeW1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtyZWwgUFdfRjAyOTlfRjAzMzddICA7IHltbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKyAgICB2cG1hZGR3ZCAgICB5bW03LCB5bW03LCBbcmVsIFBXX01GMDE2X01GMDMzXSAgOyB5bW03PVJPTCotRklYKDAuMTY4KStHT0wqLUZJWCgwLjMzMSkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbcmVsIFBXX01GMDE2X01GMDMzXSAgOyB5bW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDQpXSwgeW1tMSAgIDsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3ayg1KV0sIHltbTYgICA7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKyAgICB2cHhvciAgICAgICB5bW0xLCB5bW0xLCB5bW0xCisgICAgdnB4b3IgICAgICAgeW1tNiwgeW1tNiwgeW1tNgorICAgIHZwdW5wY2tsd2QgIHltbTEsIHltbTEsIHltbTUgICAgICAgIDsgeW1tMT1CT0wKKyAgICB2cHVucGNraHdkICB5bW02LCB5bW02LCB5bW01ICAgICAgICA7IHltbTY9Qk9ICisgICAgdnBzcmxkICAgICAgeW1tMSwgeW1tMSwgMSAgICAgICAgICAgOyB5bW0xPUJPTCpGSVgoMC41MDApCisgICAgdnBzcmxkICAgICAgeW1tNiwgeW1tNiwgMSAgICAgICAgICAgOyB5bW02PUJPSCpGSVgoMC41MDApCisKKyAgICB2bW92ZHFhICAgICB5bW01LCBbcmVsIFBEX09ORUhBTEZNMV9DSl0gIDsgeW1tNT1bUERfT05FSEFMRk0xX0NKXQorCisgICAgdnBhZGRkICAgICAgeW1tNywgeW1tNywgeW1tMQorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTYKKyAgICB2cGFkZGQgICAgICB5bW03LCB5bW03LCB5bW01CisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgeW1tNQorICAgIHZwc3JsZCAgICAgIHltbTcsIHltbTcsIFNDQUxFQklUUyAgIDsgeW1tNz1DYk9MCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTICAgOyB5bW00PUNiT0gKKyAgICB2cGFja3NzZHcgICB5bW03LCB5bW03LCB5bW00ICAgICAgICA7IHltbTc9Q2JPCisKKyAgICB2bW92ZHFhICAgICB5bW0xLCBZTU1XT1JEIFt3aygyKV0gICA7IHltbTE9QkUKKworICAgIHZtb3ZkcWEgICAgIHltbTYsIHltbTAKKyAgICB2cHVucGNrbHdkICB5bW0wLCB5bW0wLCB5bW0yCisgICAgdnB1bnBja2h3ZCAgeW1tNiwgeW1tNiwgeW1tMgorICAgIHZtb3ZkcWEgICAgIHltbTUsIHltbTAKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW02CisgICAgdnBtYWRkd2QgICAgeW1tMCwgeW1tMCwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeW1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtyZWwgUFdfRjAyOTlfRjAzMzddICA7IHltbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICB2cG1hZGR3ZCAgICB5bW01LCB5bW01LCBbcmVsIFBXX01GMDE2X01GMDMzXSAgOyB5bW01PVJFTCotRklYKDAuMTY4KStHRUwqLUZJWCgwLjMzMSkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbcmVsIFBXX01GMDE2X01GMDMzXSAgOyB5bW00PVJFSCotRklYKDAuMTY4KStHRUgqLUZJWCgwLjMzMSkKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDYpXSwgeW1tMCAgIDsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3ayg3KV0sIHltbTYgICA7IHdrKDcpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICB2cHhvciAgICAgICB5bW0wLCB5bW0wLCB5bW0wCisgICAgdnB4b3IgICAgICAgeW1tNiwgeW1tNiwgeW1tNgorICAgIHZwdW5wY2tsd2QgIHltbTAsIHltbTAsIHltbTEgICAgICAgIDsgeW1tMD1CRUwKKyAgICB2cHVucGNraHdkICB5bW02LCB5bW02LCB5bW0xICAgICAgICA7IHltbTY9QkVICisgICAgdnBzcmxkICAgICAgeW1tMCwgeW1tMCwgMSAgICAgICAgICAgOyB5bW0wPUJFTCpGSVgoMC41MDApCisgICAgdnBzcmxkICAgICAgeW1tNiwgeW1tNiwgMSAgICAgICAgICAgOyB5bW02PUJFSCpGSVgoMC41MDApCisKKyAgICB2bW92ZHFhICAgICB5bW0xLCBbcmVsIFBEX09ORUhBTEZNMV9DSl0gIDsgeW1tMT1bUERfT05FSEFMRk0xX0NKXQorCisgICAgdnBhZGRkICAgICAgeW1tNSwgeW1tNSwgeW1tMAorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTYKKyAgICB2cGFkZGQgICAgICB5bW01LCB5bW01LCB5bW0xCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgeW1tMQorICAgIHZwc3JsZCAgICAgIHltbTUsIHltbTUsIFNDQUxFQklUUyAgIDsgeW1tNT1DYkVMCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTICAgOyB5bW00PUNiRUgKKyAgICB2cGFja3NzZHcgICB5bW01LCB5bW01LCB5bW00ICAgICAgICA7IHltbTU9Q2JFCisKKyAgICB2cHNsbHcgICAgICB5bW03LCB5bW03LCBCWVRFX0JJVAorICAgIHZwb3IgICAgICAgIHltbTUsIHltbTUsIHltbTcgICAgICAgIDsgeW1tNT1DYgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JieF0sIHltbTUgICAgIDsgU2F2ZSBDYgorCisgICAgdm1vdmRxYSAgICAgeW1tMCwgWU1NV09SRCBbd2soMyldICAgOyB5bW0wPUJPCisgICAgdm1vdmRxYSAgICAgeW1tNiwgWU1NV09SRCBbd2soMildICAgOyB5bW02PUJFCisgICAgdm1vdmRxYSAgICAgeW1tMSwgWU1NV09SRCBbd2soMSldICAgOyB5bW0xPVJPCisKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW0wCisgICAgdnB1bnBja2x3ZCAgeW1tMCwgeW1tMCwgeW1tMworICAgIHZwdW5wY2tod2QgIHltbTQsIHltbTQsIHltbTMKKyAgICB2bW92ZHFhICAgICB5bW03LCB5bW0wCisgICAgdm1vdmRxYSAgICAgeW1tNSwgeW1tNAorICAgIHZwbWFkZHdkICAgIHltbTAsIHltbTAsIFtyZWwgUFdfRjAxMTRfRjAyNTBdICA7IHltbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbcmVsIFBXX0YwMTE0X0YwMjUwXSAgOyB5bW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tNywgeW1tNywgW3JlbCBQV19NRjAwOF9NRjA0MV0gIDsgeW1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCisgICAgdnBtYWRkd2QgICAgeW1tNSwgeW1tNSwgW3JlbCBQV19NRjAwOF9NRjA0MV0gIDsgeW1tNT1CT0gqLUZJWCgwLjA4MSkrR09IKi1GSVgoMC40MTgpCisKKyAgICB2bW92ZHFhICAgICB5bW0zLCBbcmVsIFBEX09ORUhBTEZdICAgICAgICAgICAgOyB5bW0zPVtQRF9PTkVIQUxGXQorCisgICAgdnBhZGRkICAgICAgeW1tMCwgeW1tMCwgWU1NV09SRCBbd2soNCldCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgWU1NV09SRCBbd2soNSldCisgICAgdnBhZGRkICAgICAgeW1tMCwgeW1tMCwgeW1tMworICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTMKKyAgICB2cHNybGQgICAgICB5bW0wLCB5bW0wLCBTQ0FMRUJJVFMgICA7IHltbTA9WU9MCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTICAgOyB5bW00PVlPSAorICAgIHZwYWNrc3NkdyAgIHltbTAsIHltbTAsIHltbTQgICAgICAgIDsgeW1tMD1ZTworCisgICAgdnB4b3IgICAgICAgeW1tMywgeW1tMywgeW1tMworICAgIHZweG9yICAgICAgIHltbTQsIHltbTQsIHltbTQKKyAgICB2cHVucGNrbHdkICB5bW0zLCB5bW0zLCB5bW0xICAgICAgICA7IHltbTM9Uk9MCisgICAgdnB1bnBja2h3ZCAgeW1tNCwgeW1tNCwgeW1tMSAgICAgICAgOyB5bW00PVJPSAorICAgIHZwc3JsZCAgICAgIHltbTMsIHltbTMsIDEgICAgICAgICAgIDsgeW1tMz1ST0wqRklYKDAuNTAwKQorICAgIHZwc3JsZCAgICAgIHltbTQsIHltbTQsIDEgICAgICAgICAgIDsgeW1tND1ST0gqRklYKDAuNTAwKQorCisgICAgdm1vdmRxYSAgICAgeW1tMSwgW3JlbCBQRF9PTkVIQUxGTTFfQ0pdICA7IHltbTE9W1BEX09ORUhBTEZNMV9DSl0KKworICAgIHZwYWRkZCAgICAgIHltbTcsIHltbTcsIHltbTMKKyAgICB2cGFkZGQgICAgICB5bW01LCB5bW01LCB5bW00CisgICAgdnBhZGRkICAgICAgeW1tNywgeW1tNywgeW1tMQorICAgIHZwYWRkZCAgICAgIHltbTUsIHltbTUsIHltbTEKKyAgICB2cHNybGQgICAgICB5bW03LCB5bW03LCBTQ0FMRUJJVFMgICA7IHltbTc9Q3JPTAorICAgIHZwc3JsZCAgICAgIHltbTUsIHltbTUsIFNDQUxFQklUUyAgIDsgeW1tNT1Dck9ICisgICAgdnBhY2tzc2R3ICAgeW1tNywgeW1tNywgeW1tNSAgICAgICAgOyB5bW03PUNyTworCisgICAgdm1vdmRxYSAgICAgeW1tMywgWU1NV09SRCBbd2soMCldICAgOyB5bW0zPVJFCisKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW02CisgICAgdnB1bnBja2x3ZCAgeW1tNiwgeW1tNiwgeW1tMgorICAgIHZwdW5wY2tod2QgIHltbTQsIHltbTQsIHltbTIKKyAgICB2bW92ZHFhICAgICB5bW0xLCB5bW02CisgICAgdm1vdmRxYSAgICAgeW1tNSwgeW1tNAorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtyZWwgUFdfRjAxMTRfRjAyNTBdICA7IHltbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbcmVsIFBXX0YwMTE0X0YwMjUwXSAgOyB5bW00PUJFSCpGSVgoMC4xMTQpK0dFSCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tMSwgeW1tMSwgW3JlbCBQV19NRjAwOF9NRjA0MV0gIDsgeW1tMT1CRUwqLUZJWCgwLjA4MSkrR0VMKi1GSVgoMC40MTgpCisgICAgdnBtYWRkd2QgICAgeW1tNSwgeW1tNSwgW3JlbCBQV19NRjAwOF9NRjA0MV0gIDsgeW1tNT1CRUgqLUZJWCgwLjA4MSkrR0VIKi1GSVgoMC40MTgpCisKKyAgICB2bW92ZHFhICAgICB5bW0yLCBbcmVsIFBEX09ORUhBTEZdICAgICAgICAgICAgOyB5bW0yPVtQRF9PTkVIQUxGXQorCisgICAgdnBhZGRkICAgICAgeW1tNiwgeW1tNiwgWU1NV09SRCBbd2soNildCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgWU1NV09SRCBbd2soNyldCisgICAgdnBhZGRkICAgICAgeW1tNiwgeW1tNiwgeW1tMgorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTIKKyAgICB2cHNybGQgICAgICB5bW02LCB5bW02LCBTQ0FMRUJJVFMgICA7IHltbTY9WUVMCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTICAgOyB5bW00PVlFSAorICAgIHZwYWNrc3NkdyAgIHltbTYsIHltbTYsIHltbTQgICAgICAgIDsgeW1tNj1ZRQorCisgICAgdnBzbGx3ICAgICAgeW1tMCwgeW1tMCwgQllURV9CSVQKKyAgICB2cG9yICAgICAgICB5bW02LCB5bW02LCB5bW0wICAgICAgICA7IHltbTY9WQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaV0sIHltbTYgICAgIDsgU2F2ZSBZCisKKyAgICB2cHhvciAgICAgICB5bW0yLCB5bW0yLCB5bW0yCisgICAgdnB4b3IgICAgICAgeW1tNCwgeW1tNCwgeW1tNAorICAgIHZwdW5wY2tsd2QgIHltbTIsIHltbTIsIHltbTMgICAgICAgIDsgeW1tMj1SRUwKKyAgICB2cHVucGNraHdkICB5bW00LCB5bW00LCB5bW0zICAgICAgICA7IHltbTQ9UkVICisgICAgdnBzcmxkICAgICAgeW1tMiwgeW1tMiwgMSAgICAgICAgICAgOyB5bW0yPVJFTCpGSVgoMC41MDApCisgICAgdnBzcmxkICAgICAgeW1tNCwgeW1tNCwgMSAgICAgICAgICAgOyB5bW00PVJFSCpGSVgoMC41MDApCisKKyAgICB2bW92ZHFhICAgICB5bW0wLCBbcmVsIFBEX09ORUhBTEZNMV9DSl0gIDsgeW1tMD1bUERfT05FSEFMRk0xX0NKXQorCisgICAgdnBhZGRkICAgICAgeW1tMSwgeW1tMSwgeW1tMgorICAgIHZwYWRkZCAgICAgIHltbTUsIHltbTUsIHltbTQKKyAgICB2cGFkZGQgICAgICB5bW0xLCB5bW0xLCB5bW0wCisgICAgdnBhZGRkICAgICAgeW1tNSwgeW1tNSwgeW1tMAorICAgIHZwc3JsZCAgICAgIHltbTEsIHltbTEsIFNDQUxFQklUUyAgIDsgeW1tMT1DckVMCisgICAgdnBzcmxkICAgICAgeW1tNSwgeW1tNSwgU0NBTEVCSVRTICAgOyB5bW01PUNyRUgKKyAgICB2cGFja3NzZHcgICB5bW0xLCB5bW0xLCB5bW01ICAgICAgICA7IHltbTE9Q3JFCisKKyAgICB2cHNsbHcgICAgICB5bW03LCB5bW03LCBCWVRFX0JJVAorICAgIHZwb3IgICAgICAgIHltbTEsIHltbTEsIHltbTcgICAgICAgIDsgeW1tMT1DcgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkeF0sIHltbTEgICAgIDsgU2F2ZSBDcgorCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgYWRkICAgICAgICAgcnNpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgICAgICAgICA7IG91dHB0cjAKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgICAgICAgIDsgb3V0cHRyMQorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgICAgICAgICAgOyBvdXRwdHIyCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uX2xkMQorCisgICAgcG9wICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKyAgICBwb3AgICAgICAgICByYngKKyAgICBwb3AgICAgICAgICByZHgKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfYnVmCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIHJieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgICAgOyBudW1fcm93cworICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICByYngKKyAgICB2emVyb3VwcGVyCisgICAgdW5jb2xsZWN0X2FyZ3MgNQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjY29sZXh0LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNjb2xleHQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0ODZjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjY29sZXh0LXNzZTIuYXNtCkBAIC0wLDAgKzEsNDg1IEBACis7Cis7IGpjY29sZXh0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKEpESU1FTlNJT04gaW1nX3dpZHRoLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcm93cyk7Cis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gaW1nX3dpZHRoCis7IHIxMSA9IEpTQU1QQVJSQVkgaW5wdXRfYnVmCis7IHIxMiA9IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgorOyByMTNkID0gSkRJTUVOU0lPTiBvdXRwdXRfcm93Cis7IHIxNGQgPSBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSB3ayhpKSAgIHJicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1hNTVdPUkQgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgOAorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIpCisKK0VYVE4oanNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3aygwKV0KKyAgICBjb2xsZWN0X2FyZ3MgNQorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgZWN4LCByMTBkCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIKKyAgICBtb3YgICAgICAgICBlY3gsIHIxM2QKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBBUlJBWSBbcnNpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUEFSUkFZIFtyc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBsZWEgICAgICAgICByZGksIFtyZGkrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByYngsIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHBvcCAgICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcnNpLCByMTEKKyAgICBtb3YgICAgICAgICBlYXgsIHIxNGQKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmR4CisgICAgcHVzaCAgICAgICAgcmJ4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcnNpCisgICAgcHVzaCAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICByYngsIEpTQU1QUk9XIFtyYnhdICAgICA7IG91dHB0cjEKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZHhdICAgICA7IG91dHB0cjIKKworICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyAgOyAtLS0tLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisgICAgcHVzaCAgICAgICAgcmF4CisgICAgcHVzaCAgICAgICAgcmR4CisgICAgbGVhICAgICAgICAgcmN4LCBbcmN4K3JjeCoyXSAgICAgICAgOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9CWVRFCisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX0JZVEUKKyAgICBtb3Z6eCAgICAgICByYXgsIEJZVEUgW3JzaStyY3hdCisuY29sdW1uX2xkMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1dPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIG1vdnp4ICAgICAgIHJkeCwgV09SRCBbcnNpK3JjeF0KKyAgICBzaGwgICAgICAgICByYXgsIFdPUkRfQklUCisgICAgb3IgICAgICAgICAgcmF4LCByZHgKKy5jb2x1bW5fbGQ0OgorICAgIG1vdmQgICAgICAgIHhtbUEsIGVheAorICAgIHBvcCAgICAgICAgIHJkeAorICAgIHBvcCAgICAgICAgIHJheAorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfRFdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBtb3ZkICAgICAgICB4bW1GLCBYTU1fRFdPUkQgW3JzaStyY3hdCisgICAgcHNsbGRxICAgICAgeG1tQSwgU0laRU9GX0RXT1JECisgICAgcG9yICAgICAgICAgeG1tQSwgeG1tRgorLmNvbHVtbl9sZDg6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9NTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMTYKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIG1vdnEgICAgICAgIHhtbUIsIFhNTV9NTVdPUkQgW3JzaStyY3hdCisgICAgcHNsbGRxICAgICAgeG1tQSwgU0laRU9GX01NV09SRAorICAgIHBvciAgICAgICAgIHhtbUEsIHhtbUIKKy5jb2x1bW5fbGQxNjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMzIKKyAgICBtb3ZkcWEgICAgICB4bW1GLCB4bW1BCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorLmNvbHVtbl9sZDMyOgorICAgIHRlc3QgICAgICAgIGNsLCAyKlNJWkVPRl9YTU1XT1JECisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUEKKyAgICBtb3ZkcXUgICAgICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3ZkcXUgICAgICB4bW1GLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX3ljY19jbnYKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tQiwgWE1NV09SRCBbcnNpKzIqU0laRU9GX1hNTVdPUkRdCisKKy5yZ2JfeWNjX2NudjoKKyAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIDsgeG1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgOyB4bW1CPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUEKKyAgICBwc2xsZHEgICAgICB4bW1BLCA4ICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgIHBzcmxkcSAgICAgIHhtbUcsIDggICAgIDsgeG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2toYncgICB4bW1BLCB4bW1GICA7IHhtbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBKQorICAgIHBzbGxkcSAgICAgIHhtbUYsIDggICAgIDsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKyAgICBwdW5wY2tsYncgICB4bW1HLCB4bW1CICA7IHhtbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEKQorICAgIHB1bnBja2hidyAgIHhtbUYsIHhtbUIgIDsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1BCisgICAgcHNsbGRxICAgICAgeG1tQSwgOCAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKyAgICBwc3JsZHEgICAgICB4bW1ELCA4ICAgICA7IHhtbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNraGJ3ICAgeG1tQSwgeG1tRyAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKKyAgICBwc2xsZHEgICAgICB4bW1HLCA4ICAgICA7IHhtbUc9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCKQorCisgICAgcHVucGNrbGJ3ICAgeG1tRCwgeG1tRiAgOyB4bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSkKKyAgICBwdW5wY2toYncgICB4bW1HLCB4bW1GICA7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQorCisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIHBzbGxkcSAgICAgIHhtbUEsIDggICAgIDsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDQgMDggMEMgMTAgMTQgMTggMUMpCisgICAgcHNybGRxICAgICAgeG1tRSwgOCAgICAgOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHB1bnBja2hidyAgIHhtbUEsIHhtbUQgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgcHNsbGRxICAgICAgeG1tRCwgOCAgICAgOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKworICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUcgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgcHVucGNraGJ3ICAgeG1tRCwgeG1tRyAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKworICAgIHB4b3IgICAgICAgIHhtbUgsIHhtbUgKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1IICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgIHB1bnBja2hidyAgIHhtbUMsIHhtbUggIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1FCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tSCAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICBwdW5wY2toYncgICB4bW1CLCB4bW1IICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorCisgICAgbW92ZHFhICAgICAgeG1tRiwgeG1tRAorICAgIHB1bnBja2xidyAgIHhtbUQsIHhtbUggIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgcHVucGNraGJ3ICAgeG1tRiwgeG1tSCAgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKworJWVsc2UgIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzE2CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKyAgICBtb3ZkICAgICAgICB4bW1BLCBYTU1fRFdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC84CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgIG1vdnEgICAgICAgIHhtbUUsIFhNTV9NTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgcG9yICAgICAgICAgeG1tQSwgeG1tRQorLmNvbHVtbl9sZDQ6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8yCisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgIG1vdmRxYSAgICAgIHhtbUYsIHhtbUEKKyAgICBtb3ZkcWEgICAgICB4bW1ILCB4bW1FCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRSwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisKKy5jb2x1bW5sb29wOgorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUUsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUYsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUgsIFhNTVdPUkQgW3JzaSszKlNJWkVPRl9YTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisgICAgOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICA7IHhtbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgIDsgeG1tRj0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUQsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1FICAgICAgOyB4bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNSkKKyAgICBwdW5wY2toYncgICB4bW1ELCB4bW1FICAgICAgOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUYKKyAgICBwdW5wY2tsYncgICB4bW1GLCB4bW1IICAgICAgOyB4bW1GPSgwOCAwQyAxOCAxQyAyOCAyQyAzOCAzQyAwOSAwRCAxOSAxRCAyOSAyRCAzOSAzRCkKKyAgICBwdW5wY2toYncgICB4bW1DLCB4bW1IICAgICAgOyB4bW1DPSgwQSAwRSAxQSAxRSAyQSAyRSAzQSAzRSAwQiAwRiAxQiAxRiAyQiAyRiAzQiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUEKKyAgICBwdW5wY2tsd2QgICB4bW1BLCB4bW1GICAgICAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQykKKyAgICBwdW5wY2tod2QgICB4bW1CLCB4bW1GICAgICAgOyB4bW1CPSgwMSAwNSAwOSAwRCAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAzMSAzNSAzOSAzRCkKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUQKKyAgICBwdW5wY2tsd2QgICB4bW1ELCB4bW1DICAgICAgOyB4bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRSkKKyAgICBwdW5wY2tod2QgICB4bW1HLCB4bW1DICAgICAgOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUUsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1EICAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICBwdW5wY2toYncgICB4bW1FLCB4bW1EICAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKworICAgIG1vdmRxYSAgICAgIHhtbUgsIHhtbUIKKyAgICBwdW5wY2tsYncgICB4bW1CLCB4bW1HICAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICBwdW5wY2toYncgICB4bW1ILCB4bW1HICAgICAgOyB4bW1IPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKworICAgIHB4b3IgICAgICAgIHhtbUYsIHhtbUYKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1GICAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSkKKyAgICBwdW5wY2toYncgICB4bW1DLCB4bW1GICAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworICAgIG1vdmRxYSAgICAgIHhtbUQsIHhtbUIKKyAgICBwdW5wY2tsYncgICB4bW1CLCB4bW1GICAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICBwdW5wY2toYncgICB4bW1ELCB4bW1GICAgICAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUUKKyAgICBwdW5wY2tsYncgICB4bW1FLCB4bW1GICAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICBwdW5wY2toYncgICB4bW1HLCB4bW1GICAgICAgOyB4bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKworICAgIHB1bnBja2xidyAgIHhtbUYsIHhtbUgKKyAgICBwdW5wY2toYncgICB4bW1ILCB4bW1ICisgICAgcHNybHcgICAgICAgeG1tRiwgQllURV9CSVQgIDsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgcHNybHcgICAgICAgeG1tSCwgQllURV9CSVQgIDsgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHhtbTA9UigwMjQ2OEFDRSk9UkUsIHhtbTI9RygwMjQ2OEFDRSk9R0UsIHhtbTQ9QigwMjQ2OEFDRSk9QkUKKyAgICA7IHhtbTE9UigxMzU3OUJERik9Uk8sIHhtbTM9RygxMzU3OUJERik9R08sIHhtbTU9QigxMzU3OUJERik9Qk8KKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworICAgIDsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgIDsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0wICAgOyB3aygwKT1SRQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMSAgIDsgd2soMSk9Uk8KKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTQgICA7IHdrKDIpPUJFCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMyldLCB4bW01ICAgOyB3aygzKT1CTworCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMQorICAgIHB1bnBja2x3ZCAgIHhtbTEsIHhtbTMKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbcmVsIFBXX0YwMjk5X0YwMzM3XSAgOyB4bW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTcsIFtyZWwgUFdfTUYwMTZfTUYwMzNdICA7IHhtbTc9Uk9MKi1GSVgoMC4xNjgpK0dPTCotRklYKDAuMzMxKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfTUYwMTZfTUYwMzNdICA7IHhtbTQ9Uk9IKi1GSVgoMC4xNjgpK0dPSCotRklYKDAuMzMxKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNCldLCB4bW0xICAgOyB3ayg0KT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDUpXSwgeG1tNiAgIDsgd2soNSk9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKworICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTEKKyAgICBweG9yICAgICAgICB4bW02LCB4bW02CisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPUJPTAorICAgIHB1bnBja2h3ZCAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj1CT0gKKyAgICBwc3JsZCAgICAgICB4bW0xLCAxICAgICAgICAgICAgICAgICA7IHhtbTE9Qk9MKkZJWCgwLjUwMCkKKyAgICBwc3JsZCAgICAgICB4bW02LCAxICAgICAgICAgICAgICAgICA7IHhtbTY9Qk9IKkZJWCgwLjUwMCkKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFtyZWwgUERfT05FSEFMRk0xX0NKXSAgOyB4bW01PVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tNgorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTUKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW01CisgICAgcHNybGQgICAgICAgeG1tNywgU0NBTEVCSVRTICAgICAgICAgOyB4bW03PUNiT0wKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9Q2JPSAorICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz1DYk8KKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMT1CRQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMAorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTIKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX0YwMjk5X0YwMzM3XSAgOyB4bW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeG1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfTUYwMTZfTUYwMzNdICA7IHhtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfTUYwMTZfTUYwMzNdICA7IHhtbTQ9UkVIKi1GSVgoMC4xNjgpK0dFSCotRklYKDAuMzMxKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNildLCB4bW0wICAgOyB3ayg2KT1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDcpXSwgeG1tNiAgIDsgd2soNyk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworICAgIHB4b3IgICAgICAgIHhtbTAsIHhtbTAKKyAgICBweG9yICAgICAgICB4bW02LCB4bW02CisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPUJFTAorICAgIHB1bnBja2h3ZCAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNj1CRUgKKyAgICBwc3JsZCAgICAgICB4bW0wLCAxICAgICAgICAgICAgICAgICA7IHhtbTA9QkVMKkZJWCgwLjUwMCkKKyAgICBwc3JsZCAgICAgICB4bW02LCAxICAgICAgICAgICAgICAgICA7IHhtbTY9QkVIKkZJWCgwLjUwMCkKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFtyZWwgUERfT05FSEFMRk0xX0NKXSAgOyB4bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0wCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tNgorICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTEKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0xCisgICAgcHNybGQgICAgICAgeG1tNSwgU0NBTEVCSVRTICAgICAgICAgOyB4bW01PUNiRUwKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9Q2JFSAorICAgIHBhY2tzc2R3ICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1DYkUKKworICAgIHBzbGx3ICAgICAgIHhtbTcsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PUNiCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmJ4XSwgeG1tNSAgICAgOyBTYXZlIENiCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTA9Qk8KKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTY9QkUKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTE9Uk8KKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTAKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00CisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW3JlbCBQV19GMDExNF9GMDI1MF0gIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfRjAxMTRfRjAyNTBdICA7IHhtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICB4bW03LCBbcmVsIFBXX01GMDA4X01GMDQxXSAgOyB4bW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKKyAgICBwbWFkZHdkICAgICB4bW01LCBbcmVsIFBXX01GMDA4X01GMDQxXSAgOyB4bW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFtyZWwgUERfT05FSEFMRl0gICAgICA7IHhtbTM9W1BEX09ORUhBTEZdCisKKyAgICBwYWRkZCAgICAgICB4bW0wLCBYTU1XT1JEIFt3ayg0KV0KKyAgICBwYWRkZCAgICAgICB4bW00LCBYTU1XT1JEIFt3ayg1KV0KKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMworICAgIHBzcmxkICAgICAgIHhtbTAsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tMD1ZT0wKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9WU9ICisgICAgcGFja3NzZHcgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPVlPCisKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW0zCisgICAgcHhvciAgICAgICAgeG1tNCwgeG1tNAorICAgIHB1bnBja2x3ZCAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz1ST0wKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9Uk9ICisgICAgcHNybGQgICAgICAgeG1tMywgMSAgICAgICAgICAgICAgICAgOyB4bW0zPVJPTCpGSVgoMC41MDApCisgICAgcHNybGQgICAgICAgeG1tNCwgMSAgICAgICAgICAgICAgICAgOyB4bW00PVJPSCpGSVgoMC41MDApCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBbcmVsIFBEX09ORUhBTEZNMV9DSl0gIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMworICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMQorICAgIHBzcmxkICAgICAgIHhtbTcsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tNz1Dck9MCisgICAgcHNybGQgICAgICAgeG1tNSwgU0NBTEVCSVRTICAgICAgICAgOyB4bW01PUNyT0gKKyAgICBwYWNrc3NkdyAgICB4bW03LCB4bW01ICAgICAgICAgICAgICA7IHhtbTc9Q3JPCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9UkUKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0yCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW00CisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW3JlbCBQV19GMDExNF9GMDI1MF0gIDsgeG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfRjAxMTRfRjAyNTBdICA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbcmVsIFBXX01GMDA4X01GMDQxXSAgOyB4bW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKyAgICBwbWFkZHdkICAgICB4bW01LCBbcmVsIFBXX01GMDA4X01GMDQxXSAgOyB4bW01PUJFSCotRklYKDAuMDgxKStHRUgqLUZJWCgwLjQxOCkKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIFtyZWwgUERfT05FSEFMRl0gICAgICA7IHhtbTI9W1BEX09ORUhBTEZdCisKKyAgICBwYWRkZCAgICAgICB4bW02LCBYTU1XT1JEIFt3ayg2KV0KKyAgICBwYWRkZCAgICAgICB4bW00LCBYTU1XT1JEIFt3ayg3KV0KKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMgorICAgIHBzcmxkICAgICAgIHhtbTYsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tNj1ZRUwKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9WUVICisgICAgcGFja3NzZHcgICAgeG1tNiwgeG1tNCAgICAgICAgICAgICAgOyB4bW02PVlFCisKKyAgICBwc2xsdyAgICAgICB4bW0wLCBCWVRFX0JJVAorICAgIHBvciAgICAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj1ZCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpXSwgeG1tNiAgICAgOyBTYXZlIFkKKworICAgIHB4b3IgICAgICAgIHhtbTIsIHhtbTIKKyAgICBweG9yICAgICAgICB4bW00LCB4bW00CisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPVJFTAorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgIDsgeG1tND1SRUgKKyAgICBwc3JsZCAgICAgICB4bW0yLCAxICAgICAgICAgICAgICAgICA7IHhtbTI9UkVMKkZJWCgwLjUwMCkKKyAgICBwc3JsZCAgICAgICB4bW00LCAxICAgICAgICAgICAgICAgICA7IHhtbTQ9UkVIKkZJWCgwLjUwMCkKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFtyZWwgUERfT05FSEFMRk0xX0NKXSAgOyB4bW0wPVtQRF9PTkVIQUxGTTFfQ0pdCisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tNAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTAKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0wCisgICAgcHNybGQgICAgICAgeG1tMSwgU0NBTEVCSVRTICAgICAgICAgOyB4bW0xPUNyRUwKKyAgICBwc3JsZCAgICAgICB4bW01LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTU9Q3JFSAorICAgIHBhY2tzc2R3ICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT1DckUKKworICAgIHBzbGx3ICAgICAgIHhtbTcsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB4bW0xPUNyCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmR4XSwgeG1tMSAgICAgOyBTYXZlIENyCisKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgICAgICAgICA7IG91dHB0cjAKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgICAgICAgOyBvdXRwdHIxCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICByY3gsIHJjeAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbl9sZDEKKworICAgIHBvcCAgICAgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmJ4CisgICAgcG9wICAgICAgICAgcmR4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2J1ZgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjY29sb3ItYXZ4Mi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY2NvbG9yLWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjRiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY2NvbG9yLWF2eDIuYXNtCkBAIC0wLDAgKzEsMTIzIEBACis7Cis7IGpjY29sb3IuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgQVZYMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMDgxIGVxdSAgNTMyOSAgICAgICAgICAgICAgICA7IEZJWCgwLjA4MTMxKQorRl8wXzExNCBlcXUgIDc0NzEgICAgICAgICAgICAgICAgOyBGSVgoMC4xMTQwMCkKK0ZfMF8xNjggZXF1IDExMDU5ICAgICAgICAgICAgICAgIDsgRklYKDAuMTY4NzQpCitGXzBfMjUwIGVxdSAxNjM4NCAgICAgICAgICAgICAgICA7IEZJWCgwLjI1MDAwKQorRl8wXzI5OSBlcXUgMTk1OTUgICAgICAgICAgICAgICAgOyBGSVgoMC4yOTkwMCkKK0ZfMF8zMzEgZXF1IDIxNzA5ICAgICAgICAgICAgICAgIDsgRklYKDAuMzMxMjYpCitGXzBfNDE4IGVxdSAyNzQzOSAgICAgICAgICAgICAgICA7IEZJWCgwLjQxODY5KQorRl8wXzU4NyBlcXUgMzg0NzAgICAgICAgICAgICAgICAgOyBGSVgoMC41ODcwMCkKK0ZfMF8zMzcgZXF1IChGXzBfNTg3IC0gRl8wXzI1MCkgIDsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X3JnYl95Y2NfY29udmVydF9hdngyKQorCitFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfYXZ4Mik6CisKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyA4IGR3ICBGXzBfMjk5LCAgRl8wXzMzNworUFdfRjAxMTRfRjAyNTAgIHRpbWVzIDggZHcgIEZfMF8xMTQsICBGXzBfMjUwCitQV19NRjAxNl9NRjAzMyAgdGltZXMgOCBkdyAtRl8wXzE2OCwgLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxICB0aW1lcyA4IGR3IC1GXzBfMDgxLCAtRl8wXzQxOAorUERfT05FSEFMRk0xX0NKIHRpbWVzIDggZGQgICgxIDw8IChTQ0FMRUJJVFMgLSAxKSkgLSAxICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKK1BEX09ORUhBTEYgICAgICB0aW1lcyA4IGRkICAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCislaW5jbHVkZSAiamNjb2xleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyICBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfYXZ4MiAganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2NvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyICBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2NvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hCR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hCR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hCR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyICBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2NvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9hdngyICBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2NvbGV4dC1hdngyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjY29sb3Itc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY2NvbG9yLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDY2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY2NvbG9yLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTIyIEBACis7Cis7IGpjY29sb3IuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMDgxIGVxdSAgNTMyOSAgICAgICAgICAgICAgICA7IEZJWCgwLjA4MTMxKQorRl8wXzExNCBlcXUgIDc0NzEgICAgICAgICAgICAgICAgOyBGSVgoMC4xMTQwMCkKK0ZfMF8xNjggZXF1IDExMDU5ICAgICAgICAgICAgICAgIDsgRklYKDAuMTY4NzQpCitGXzBfMjUwIGVxdSAxNjM4NCAgICAgICAgICAgICAgICA7IEZJWCgwLjI1MDAwKQorRl8wXzI5OSBlcXUgMTk1OTUgICAgICAgICAgICAgICAgOyBGSVgoMC4yOTkwMCkKK0ZfMF8zMzEgZXF1IDIxNzA5ICAgICAgICAgICAgICAgIDsgRklYKDAuMzMxMjYpCitGXzBfNDE4IGVxdSAyNzQzOSAgICAgICAgICAgICAgICA7IEZJWCgwLjQxODY5KQorRl8wXzU4NyBlcXUgMzg0NzAgICAgICAgICAgICAgICAgOyBGSVgoMC41ODcwMCkKK0ZfMF8zMzcgZXF1IChGXzBfNTg3IC0gRl8wXzI1MCkgIDsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKQorCitFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMik6CisKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyA0IGR3ICBGXzBfMjk5LCAgRl8wXzMzNworUFdfRjAxMTRfRjAyNTAgIHRpbWVzIDQgZHcgIEZfMF8xMTQsICBGXzBfMjUwCitQV19NRjAxNl9NRjAzMyAgdGltZXMgNCBkdyAtRl8wXzE2OCwgLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxICB0aW1lcyA0IGR3IC1GXzBfMDgxLCAtRl8wXzQxOAorUERfT05FSEFMRk0xX0NKIHRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMgLSAxKSkgLSAxICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKK1BEX09ORUhBTEYgICAgICB0aW1lcyA0IGRkICAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCislaW5jbHVkZSAiamNjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyICBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjY29sZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIgIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjY29sZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyICBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hCR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hCR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hCR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyICBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyICBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NvbGV4dC1zc2UyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3JheS1hdngyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3JheS1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWMyNDEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNncmF5LWF2eDIuYXNtCkBAIC0wLDAgKzEsMTE1IEBACis7Cis7IGpjZ3JheS5hc20gLSBncmF5c2NhbGUgY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgQVZYMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMTE0IGVxdSAgNzQ3MSAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzI1MCBlcXUgMTYzODQgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1IDE5NTk1ICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAzODQ3MCAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgKEZfMF81ODcgLSBGXzBfMjUwKSAgOyBGSVgoMC41ODcwMCkgLSBGSVgoMC4yNTAwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfcmdiX2dyYXlfY29udmVydF9hdngyKQorCitFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIpOgorCitQV19GMDI5OV9GMDMzNyB0aW1lcyA4IGR3IEZfMF8yOTksIEZfMF8zMzcKK1BXX0YwMTE0X0YwMjUwIHRpbWVzIDggZHcgRl8wXzExNCwgRl8wXzI1MAorUERfT05FSEFMRiAgICAgdGltZXMgOCBkZCAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCislaW5jbHVkZSAiamNncnlleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYXZ4MiAganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9hdngyCislaW5jbHVkZSAiamNncnlleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2dyeWV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyICBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2dyeWV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYXZ4MiAganNpbWRfZXh0YmdyeF9ncmF5X2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpjZ3J5ZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyICBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9hdngyCislaW5jbHVkZSAiamNncnlleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIgIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqY2dyeWV4dC1hdngyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3JheS1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3JheS1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGY5MjIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNncmF5LXNzZTIuYXNtCkBAIC0wLDAgKzEsMTE0IEBACis7Cis7IGpjZ3JheS5hc20gLSBncmF5c2NhbGUgY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMTE0IGVxdSAgNzQ3MSAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzI1MCBlcXUgMTYzODQgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1IDE5NTk1ICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAzODQ3MCAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgKEZfMF81ODcgLSBGXzBfMjUwKSAgOyBGSVgoMC41ODcwMCkgLSBGSVgoMC4yNTAwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfcmdiX2dyYXlfY29udmVydF9zc2UyKQorCitFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpOgorCitQV19GMDI5OV9GMDMzNyB0aW1lcyA0IGR3IEZfMF8yOTksIEZfMF8zMzcKK1BXX0YwMTE0X0YwMjUwIHRpbWVzIDQgZHcgRl8wXzExNCwgRl8wXzI1MAorUERfT05FSEFMRiAgICAgdGltZXMgNCBkZCAoMSA8PCAoU0NBTEVCSVRTIC0gMSkpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCislaW5jbHVkZSAiamNncnlleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMiAganNpbWRfZXh0cmdiX2dyYXlfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNncnlleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIgIGpzaW1kX2V4dHJnYnhfZ3JheV9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2dyeWV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyICBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2dyeWV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMiAganNpbWRfZXh0YmdyeF9ncmF5X2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjZ3J5ZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyICBqc2ltZF9leHR4YmdyX2dyYXlfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNncnlleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIgIGpzaW1kX2V4dHhyZ2JfZ3JheV9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2dyeWV4dC1zc2UyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3J5ZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNncnlleHQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMmFhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3J5ZXh0LWF2eDIuYXNtCkBAIC0wLDAgKzEsNDM5IEBACis7Cis7IGpjZ3J5ZXh0LmFzbSAtIGdyYXlzY2FsZSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKDY0LWJpdCBBVlgyKQorOworOyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpOworOworCis7IHIxMGQgPSBKRElNRU5TSU9OIGltZ193aWR0aAorOyByMTEgPSBKU0FNUEFSUkFZIGlucHV0X2J1ZgorOyByMTIgPSBKU0FNUElNQUdFIG91dHB1dF9idWYKKzsgcjEzZCA9IEpESU1FTlNJT04gb3V0cHV0X3JvdworOyByMTRkID0gaW50IG51bV9yb3dzCisKKyVkZWZpbmUgd2soaSkgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9ZTU1XT1JEICA7IHltbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gIDIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfYXZ4MikKKworRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X2F2eDIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9ZTU1XT1JEKSAgOyBhbGlnbiB0byAyNTYgYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3aygwKV0KKyAgICBjb2xsZWN0X2FyZ3MgNQorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgZWN4LCByMTBkCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIKKyAgICBtb3YgICAgICAgICBlY3gsIHIxM2QKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIGxlYSAgICAgICAgIHJkaSwgW3JkaStyY3gqU0laRU9GX0pTQU1QUk9XXQorCisgICAgcG9wICAgICAgICAgcmN4CisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMQorICAgIG1vdiAgICAgICAgIGVheCwgcjE0ZAorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAgamxlICAgICAgICAgbmVhciAucmV0dXJuCisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByc2kKKyAgICBwdXNoICAgICAgICByY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyMAorCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICByYXgKKyAgICBwdXNoICAgICAgICByZHgKKyAgICBsZWEgICAgICAgICByY3gsIFtyY3grcmN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIG1vdnp4ICAgICAgIHJheCwgQllURSBbcnNpK3JjeF0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgbW92enggICAgICAgcmR4LCBXT1JEIFtyc2krcmN4XQorICAgIHNobCAgICAgICAgIHJheCwgV09SRF9CSVQKKyAgICBvciAgICAgICAgICByYXgsIHJkeAorLmNvbHVtbl9sZDQ6CisgICAgdm1vdmQgICAgICAgeG1tQSwgZWF4CisgICAgcG9wICAgICAgICAgcmR4CisgICAgcG9wICAgICAgICAgcmF4CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9EV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIHZtb3ZkICAgICAgIHhtbUYsIFhNTV9EV09SRCBbcnNpK3JjeF0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICB2cG9yICAgICAgICB4bW1BLCB4bW1BLCB4bW1GCisuY29sdW1uX2xkODoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgdm1vdnEgICAgICAgeG1tQiwgWE1NX01NV09SRCBbcnNpK3JjeF0KKyAgICB2cHNsbGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgdnBvciAgICAgICAgeG1tQSwgeG1tQSwgeG1tQgorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIHZtb3ZkcXUgICAgIHhtbUIsIFhNTV9NTVdPUkQgW3JzaStyY3hdCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQSwgeW1tQSwgMQorICAgIHZwb3IgICAgICAgIHltbUEsIHltbUIKKy5jb2x1bW5fbGQzMjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNjQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICB2bW92ZHFhICAgICB5bW1GLCB5bW1BCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisuY29sdW1uX2xkNjQ6CisgICAgdGVzdCAgICAgICAgY2wsIDIqU0laRU9GX1lNTVdPUkQKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2bW92ZHF1ICAgICB5bW1BLCBZTU1XT1JEIFtyc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1GLCBZTU1XT1JEIFtyc2krMSpTSVpFT0ZfWU1NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAucmdiX2dyYXlfY252CisKKy5jb2x1bW5sb29wOgorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUYsIFlNTVdPUkQgW3JzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbUIsIFlNTVdPUkQgW3JzaSsyKlNJWkVPRl9ZTU1XT1JEXQorCisucmdiX2dyYXlfY252OgorICAgIDsgeW1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUKKyAgICA7ICAgICAgIDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgIDsgeW1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYKKyAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMKQorICAgIDsgeW1tQj0oMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEKKyAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDBTIDFTIDJTIDBUIDFUIDJUIDBVIDFVIDJVIDBWIDFWIDJWKQorCisgICAgdm1vdmRxdSAgICAgeW1tQywgeW1tQQorICAgIHZpbnNlcnRpMTI4IHltbUEsIHltbUYsIHhtbUEsIDAgIDsgeW1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMKQorICAgIHZpbnNlcnRpMTI4IHltbUMsIHltbUMsIHhtbUIsIDAgIDsgeW1tQz0oMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgIHZpbnNlcnRpMTI4IHltbUIsIHltbUIsIHhtbUYsIDAgIDsgeW1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDBTIDFTIDJTIDBUIDFUIDJUIDBVIDFVIDJVIDBWIDFWIDJWKQorICAgIHZwZXJtMmkxMjggIHltbUYsIHltbUMsIHltbUMsIDEgIDsgeW1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRKQorCisgICAgdm1vdmRxYSAgICAgeW1tRywgeW1tQQorICAgIHZwc2xsZHEgICAgIHltbUEsIHltbUEsIDggICAgIDsgeW1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJKQorICAgIHZwc3JsZHEgICAgIHltbUcsIHltbUcsIDggICAgIDsgeW1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgMEcgMUcgMkcgMEggMUggMkggMEkgMUkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgdnB1bnBja2hidyAgeW1tQSwgeW1tQSwgeW1tRiAgOyB5bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgME8gMUcgMU8gMkcgMk8gMEggMFAgMUggMVAgMkggMlAgMEkgMFEgMUkgMVEpCisgICAgdnBzbGxkcSAgICAgeW1tRiwgeW1tRiwgOCAgICAgOyB5bW1GPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMUwgMkwgME0gMU0gMk0gME4gMU4gMk4pCisKKyAgICB2cHVucGNrbGJ3ICB5bW1HLCB5bW1HLCB5bW1CICA7IHltbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAyUSAwSiAwUiAxSiAxUiAySiAyUiAwSyAwUyAxSyAxUyAySyAyUyAwTCAwVCkKKyAgICB2cHVucGNraGJ3ICB5bW1GLCB5bW1GLCB5bW1CICA7IHltbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxTCAxVCAyTCAyVCAwTSAwVSAxTSAxVSAyTSAyVSAwTiAwViAxTiAxViAyTiAyVikKKworICAgIHZtb3ZkcWEgICAgIHltbUQsIHltbUEKKyAgICB2cHNsbGRxICAgICB5bW1BLCB5bW1BLCA4ICAgICA7IHltbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSAwRyAwTyAxRyAxTyAyRyAyTyAwSCAwUCkKKyAgICB2cHNybGRxICAgICB5bW1ELCB5bW1ELCA4ICAgICA7IHltbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIDBHIDBPIDFHIDFPIDJHIDJPIDBIIDBQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAxUCAySCAyUCAwSSAwUSAxSSAxUSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHZwdW5wY2toYncgIHltbUEsIHltbUEsIHltbUcgIDsgeW1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBLIDBPIDBTIDFHIDFLIDFPIDFTIDJHIDJLIDJPIDJTIDBIIDBMIDBQIDBUKQorICAgIHZwc2xsZHEgICAgIHltbUcsIHltbUcsIDggICAgIDsgeW1tRz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEIDJJIDJRIDBKIDBSIDFKIDFSIDJKIDJSKQorCisgICAgdnB1bnBja2xidyAgeW1tRCwgeW1tRCwgeW1tRiAgOyB5bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUggMUwgMVAgMVQgMkggMkwgMlAgMlQgMEkgME0gMFEgMFUgMUkgMU0gMVEgMVUpCisgICAgdnB1bnBja2hidyAgeW1tRywgeW1tRywgeW1tRiAgOyB5bW1HPSgyMiAyNiAyQSAyRSAwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMk0gMlEgMlUgMEogME4gMFIgMFYgMUogMU4gMVIgMVYgMkogMk4gMlIgMlYpCisKKyAgICB2bW92ZHFhICAgICB5bW1FLCB5bW1BCisgICAgdnBzbGxkcSAgICAgeW1tQSwgeW1tQSwgOCAgICAgOyB5bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQgMEcgMEsgME8gMFMgMUcgMUsgMU8gMVMpCisgICAgdnBzcmxkcSAgICAgeW1tRSwgeW1tRSwgOCAgICAgOyB5bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAwRyAwSyAwTyAwUyAxRyAxSyAxTyAxUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgMksgMk8gMlMgMEggMEwgMFAgMFQgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICB2cHVucGNraGJ3ICB5bW1BLCB5bW1BLCB5bW1EICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAxRyAxSSAxSyAxTSAxTyAxUSAxUyAxVSkKKyAgICB2cHNsbGRxICAgICB5bW1ELCB5bW1ELCA4ICAgICA7IHltbUQ9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAxSCAxTCAxUCAxVCAySCAyTCAyUCAyVCkKKworICAgIHZwdW5wY2tsYncgIHltbUUsIHltbUUsIHltbUcgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWKQorICAgIHZwdW5wY2toYncgIHltbUQsIHltbUQsIHltbUcgIDsgeW1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWIDJIIDJKIDJMIDJOIDJQIDJSIDJUIDJWKQorCisgICAgdnB4b3IgICAgICAgeW1tSCwgeW1tSCwgeW1tSAorCisgICAgdm1vdmRxYSAgICAgeW1tQywgeW1tQQorICAgIHZwdW5wY2tsYncgIHltbUEsIHltbUEsIHltbUggIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMEcgMEkgMEsgME0gME8gMFEgMFMgMFUpCisgICAgdnB1bnBja2hidyAgeW1tQywgeW1tQywgeW1tSCAgOyB5bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAxRyAxSSAxSyAxTSAxTyAxUSAxUyAxVSkKKworICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUUKKyAgICB2cHVucGNrbGJ3ICB5bW1FLCB5bW1FLCB5bW1IICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVKQorICAgIHZwdW5wY2toYncgIHltbUIsIHltbUIsIHltbUggIDsgeW1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMEggMEogMEwgME4gMFAgMFIgMFQgMFYpCisKKyAgICB2bW92ZHFhICAgICB5bW1GLCB5bW1ECisgICAgdnB1bnBja2xidyAgeW1tRCwgeW1tRCwgeW1tSCAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxVikKKyAgICB2cHVucGNraGJ3ICB5bW1GLCB5bW1GLCB5bW1IICA7IHltbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDJIIDJKIDJMIDJOIDJQIDJSIDJUIDJWKQorCislZWxzZSAgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvMTYKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgorICAgIHZtb3ZkICAgICAgIHhtbUEsIFhNTV9EV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDI6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzgKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgdm1vdnEgICAgICAgeG1tRiwgWE1NX01NV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQorICAgIHZwc2xsZHEgICAgIHhtbUEsIHhtbUEsIFNJWkVPRl9NTVdPUkQKKyAgICB2cG9yICAgICAgICB4bW1BLCB4bW1BLCB4bW1GCisuY29sdW1uX2xkNDoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvNAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICB2bW92ZHFhICAgICB4bW1GLCB4bW1BCisgICAgdnBlcm0yaTEyOCAgeW1tRiwgeW1tRiwgeW1tRiwgMQorICAgIHZtb3ZkcXUgICAgIHhtbUEsIFhNTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKyAgICB2cG9yICAgICAgICB5bW1BLCB5bW1BLCB5bW1GCisuY29sdW1uX2xkODoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQvMgorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisgICAgdm1vdmRxYSAgICAgeW1tRiwgeW1tQQorICAgIHZtb3ZkcXUgICAgIHltbUEsIFlNTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQxNjoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX1hNTVdPUkQKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgIHZtb3ZkcWEgICAgIHltbUUsIHltbUEKKyAgICB2bW92ZHFhICAgICB5bW1ILCB5bW1GCisgICAgdm1vdmRxdSAgICAgeW1tQSwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tRiwgWU1NV09SRCBbcnNpKzEqU0laRU9GX1lNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorCisuY29sdW1ubG9vcDoKKyAgICB2bW92ZHF1ICAgICB5bW1BLCBZTU1XT1JEIFtyc2krMCpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1GLCBZTU1XT1JEIFtyc2krMSpTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1FLCBZTU1XT1JEIFtyc2krMipTSVpFT0ZfWU1NV09SRF0KKyAgICB2bW92ZHF1ICAgICB5bW1ILCBZTU1XT1JEIFtyc2krMypTSVpFT0ZfWU1NV09SRF0KKworLnJnYl9ncmF5X2NudjoKKyAgICA7IHltbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzCisgICAgOyAgICAgICAwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICA7IHltbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCCisgICAgOyAgICAgICAwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKKyAgICA7IHltbUU9KDBHIDFHIDJHIDNHIDBIIDFIIDJIIDNIIDBJIDFJIDJJIDNJIDBKIDFKIDJKIDNKCisgICAgOyAgICAgICAwSyAxSyAySyAzSyAwTCAxTCAyTCAzTCAwTSAxTSAyTSAzTSAwTiAxTiAyTiAzTikKKyAgICA7IHltbUg9KDBPIDFPIDJPIDNPIDBQIDFQIDJQIDNQIDBRIDFRIDJRIDNRIDBSIDFSIDJSIDNSCisgICAgOyAgICAgICAwUyAxUyAyUyAzUyAwVCAxVCAyVCAzVCAwVSAxVSAyVSAzVSAwViAxViAyViAzVikKKworICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUEKKyAgICB2aW5zZXJ0aTEyOCB5bW1BLCB5bW1BLCB4bW1FLCAxICAgICA7IHltbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSikKKyAgICB2cGVybTJpMTI4ICB5bW1FLCB5bW1CLCB5bW1FLCAweDMxICA7IHltbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSyAxSyAySyAzSyAwTCAxTCAyTCAzTCAwTSAxTSAyTSAzTSAwTiAxTiAyTiAzTikKKworICAgIHZtb3ZkcWEgICAgIHltbUIsIHltbUYKKyAgICB2aW5zZXJ0aTEyOCB5bW1GLCB5bW1GLCB4bW1ILCAxICAgICA7IHltbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUikKKyAgICB2cGVybTJpMTI4ICB5bW1ILCB5bW1CLCB5bW1ILCAweDMxICA7IHltbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUyAxUyAyUyAzUyAwVCAxVCAyVCAzVCAwVSAxVSAyVSAzVSAwViAxViAyViAzVikKKworICAgIHZtb3ZkcWEgICAgIHltbUQsIHltbUEKKyAgICB2cHVucGNrbGJ3ICB5bW1BLCB5bW1BLCB5bW1FICAgICAgOyB5bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDBLIDFHIDFLIDJHIDJLIDNHIDNLIDBIIDBMIDFIIDFMIDJIIDJMIDNIIDNMKQorICAgIHZwdW5wY2toYncgIHltbUQsIHltbUQsIHltbUUgICAgICA7IHltbUQ9KDAyIDA2IDEyIDE2IDIyIDI2IDMyIDM2IDAzIDA3IDEzIDE3IDIzIDI3IDMzIDM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEkgME0gMUkgMU0gMkkgMk0gM0kgM00gMEogME4gMUogMU4gMkogMk4gM0ogM04pCisKKyAgICB2bW92ZHFhICAgICB5bW1DLCB5bW1GCisgICAgdnB1bnBja2xidyAgeW1tRiwgeW1tRiwgeW1tSCAgICAgIDsgeW1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAwUyAxTyAxUyAyTyAyUyAzTyAzUyAwUCAwVCAxUCAxVCAyUCAyVCAzUCAzVCkKKyAgICB2cHVucGNraGJ3ICB5bW1DLCB5bW1DLCB5bW1IICAgICAgOyB5bW1DPSgwQSAwRSAxQSAxRSAyQSAyRSAzQSAzRSAwQiAwRiAxQiAxRiAyQiAyRiAzQiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBRIDBVIDFRIDFVIDJRIDJVIDNRIDNVIDBSIDBWIDFSIDFWIDJSIDJWIDNSIDNWKQorCisgICAgdm1vdmRxYSAgICAgeW1tQiwgeW1tQQorICAgIHZwdW5wY2tsd2QgIHltbUEsIHltbUEsIHltbUYgICAgICA7IHltbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMEsgME8gMFMgMUcgMUsgMU8gMVMgMkcgMksgMk8gMlMgM0cgM0sgM08gM1MpCisgICAgdnB1bnBja2h3ZCAgeW1tQiwgeW1tQiwgeW1tRiAgICAgIDsgeW1tQj0oMDEgMDUgMDkgMEQgMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMzEgMzUgMzkgM0QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSCAwTCAwUCAwVCAxSCAxTCAxUCAxVCAySCAyTCAyUCAyVCAzSCAzTCAzUCAzVCkKKworICAgIHZtb3ZkcWEgICAgIHltbUcsIHltbUQKKyAgICB2cHVucGNrbHdkICB5bW1ELCB5bW1ELCB5bW1DICAgICAgOyB5bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBJIDBNIDBRIDBVIDFJIDFNIDFRIDFVIDJJIDJNIDJRIDJVIDNJIDNNIDNRIDNVKQorICAgIHZwdW5wY2tod2QgIHltbUcsIHltbUcsIHltbUMgICAgICA7IHltbUc9KDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGIDMzIDM3IDNCIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEogME4gMFIgMFYgMUogMU4gMVIgMVYgMkogMk4gMlIgMlYgM0ogM04gM1IgM1YpCisKKyAgICB2bW92ZHFhICAgICB5bW1FLCB5bW1BCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tRCAgICAgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAxRyAxSSAxSyAxTSAxTyAxUSAxUyAxVSkKKyAgICB2cHVucGNraGJ3ICB5bW1FLCB5bW1FLCB5bW1EICAgICAgOyB5bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVIDNHIDNJIDNLIDNNIDNPIDNRIDNTIDNVKQorCisgICAgdm1vdmRxYSAgICAgeW1tSCwgeW1tQgorICAgIHZwdW5wY2tsYncgIHltbUIsIHltbUIsIHltbUcgICAgICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMEogMEwgME4gMFAgMFIgMFQgMFYgMUggMUogMUwgMU4gMVAgMVIgMVQgMVYpCisgICAgdnB1bnBja2hidyAgeW1tSCwgeW1tSCwgeW1tRyAgICAgIDsgeW1tSD0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySCAySiAyTCAyTiAyUCAyUiAyVCAyViAzSCAzSiAzTCAzTiAzUCAzUiAzVCAzVikKKworICAgIHZweG9yICAgICAgIHltbUYsIHltbUYsIHltbUYKKworICAgIHZtb3ZkcWEgICAgIHltbUMsIHltbUEKKyAgICB2cHVucGNrbGJ3ICB5bW1BLCB5bW1BLCB5bW1GICAgICAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSkKKyAgICB2cHVucGNraGJ3ICB5bW1DLCB5bW1DLCB5bW1GICAgICAgOyB5bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAxRyAxSSAxSyAxTSAxTyAxUSAxUyAxVSkKKworICAgIHZtb3ZkcWEgICAgIHltbUQsIHltbUIKKyAgICB2cHVucGNrbGJ3ICB5bW1CLCB5bW1CLCB5bW1GICAgICAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAwSCAwSiAwTCAwTiAwUCAwUiAwVCAwVikKKyAgICB2cHVucGNraGJ3ICB5bW1ELCB5bW1ELCB5bW1GICAgICAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxVikKKworICAgIHZtb3ZkcWEgICAgIHltbUcsIHltbUUKKyAgICB2cHVucGNrbGJ3ICB5bW1FLCB5bW1FLCB5bW1GICAgICAgOyB5bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSkKKyAgICB2cHVucGNraGJ3ICB5bW1HLCB5bW1HLCB5bW1GICAgICAgOyB5bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSkKKworICAgIHZwdW5wY2tsYncgIHltbUYsIHltbUYsIHltbUgKKyAgICB2cHVucGNraGJ3ICB5bW1ILCB5bW1ILCB5bW1ICisgICAgdnBzcmx3ICAgICAgeW1tRiwgeW1tRiwgQllURV9CSVQgIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMkggMkogMkwgMk4gMlAgMlIgMlQgMlYpCisgICAgdnBzcmx3ICAgICAgeW1tSCwgeW1tSCwgQllURV9CSVQgIDsgeW1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgM0ggM0ogM0wgM04gM1AgM1IgM1QgM1YpCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHltbTA9UigwMjQ2OEFDRUdJS01PUVNVKT1SRSwgeW1tMj1HKDAyNDY4QUNFR0lLTU9RU1UpPUdFLCB5bW00PUIoMDI0NjhBQ0VHSUtNT1FTVSk9QkUKKyAgICA7IHltbTE9UigxMzU3OUJERkhKTE5QUlRWKT1STywgeW1tMz1HKDEzNTc5QkRGSEpMTlBSVFYpPUdPLCB5bW01PUIoMTM1NzlCREZISkxOUFJUVik9Qk8KKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworCisgICAgdm1vdmRxYSAgICAgeW1tNiwgeW1tMQorICAgIHZwdW5wY2tsd2QgIHltbTEsIHltbTEsIHltbTMKKyAgICB2cHVucGNraHdkICB5bW02LCB5bW02LCB5bW0zCisgICAgdnBtYWRkd2QgICAgeW1tMSwgeW1tMSwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeW1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtyZWwgUFdfRjAyOTlfRjAzMzddICA7IHltbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKworICAgIHZtb3ZkcWEgICAgIHltbTcsIHltbTYgICAgICAgICAgICAgIDsgeW1tNz1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCisgICAgdm1vdmRxYSAgICAgeW1tNiwgeW1tMAorICAgIHZwdW5wY2tsd2QgIHltbTAsIHltbTAsIHltbTIKKyAgICB2cHVucGNraHdkICB5bW02LCB5bW02LCB5bW0yCisgICAgdnBtYWRkd2QgICAgeW1tMCwgeW1tMCwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeW1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtyZWwgUFdfRjAyOTlfRjAzMzddICA7IHltbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDApXSwgeW1tMCAgIDsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTYgICA7IHdrKDEpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICB2bW92ZHFhICAgICB5bW0wLCB5bW01ICAgICAgICAgICAgICA7IHltbTA9Qk8KKyAgICB2bW92ZHFhICAgICB5bW02LCB5bW00ICAgICAgICAgICAgICA7IHltbTY9QkUKKworICAgIHZtb3ZkcWEgICAgIHltbTQsIHltbTAKKyAgICB2cHVucGNrbHdkICB5bW0wLCB5bW0wLCB5bW0zCisgICAgdnB1bnBja2h3ZCAgeW1tNCwgeW1tNCwgeW1tMworICAgIHZwbWFkZHdkICAgIHltbTAsIHltbTAsIFtyZWwgUFdfRjAxMTRfRjAyNTBdICA7IHltbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICB2cG1hZGR3ZCAgICB5bW00LCB5bW00LCBbcmVsIFBXX0YwMTE0X0YwMjUwXSAgOyB5bW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisKKyAgICB2bW92ZHFhICAgICB5bW0zLCBbcmVsIFBEX09ORUhBTEZdICAgICAgICAgICAgOyB5bW0zPVtQRF9PTkVIQUxGXQorCisgICAgdnBhZGRkICAgICAgeW1tMCwgeW1tMCwgeW1tMQorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIHltbTcKKyAgICB2cGFkZGQgICAgICB5bW0wLCB5bW0wLCB5bW0zCisgICAgdnBhZGRkICAgICAgeW1tNCwgeW1tNCwgeW1tMworICAgIHZwc3JsZCAgICAgIHltbTAsIHltbTAsIFNDQUxFQklUUyAgIDsgeW1tMD1ZT0wKKyAgICB2cHNybGQgICAgICB5bW00LCB5bW00LCBTQ0FMRUJJVFMgICA7IHltbTQ9WU9ICisgICAgdnBhY2tzc2R3ICAgeW1tMCwgeW1tMCwgeW1tNCAgICAgICAgOyB5bW0wPVlPCisKKyAgICB2bW92ZHFhICAgICB5bW00LCB5bW02CisgICAgdnB1bnBja2x3ZCAgeW1tNiwgeW1tNiwgeW1tMgorICAgIHZwdW5wY2tod2QgIHltbTQsIHltbTQsIHltbTIKKyAgICB2cG1hZGR3ZCAgICB5bW02LCB5bW02LCBbcmVsIFBXX0YwMTE0X0YwMjUwXSAgOyB5bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgdnBtYWRkd2QgICAgeW1tNCwgeW1tNCwgW3JlbCBQV19GMDExNF9GMDI1MF0gIDsgeW1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQorCisgICAgdm1vdmRxYSAgICAgeW1tMiwgW3JlbCBQRF9PTkVIQUxGXSAgICAgICAgICAgIDsgeW1tMj1bUERfT05FSEFMRl0KKworICAgIHZwYWRkZCAgICAgIHltbTYsIHltbTYsIFlNTVdPUkQgW3drKDApXQorICAgIHZwYWRkZCAgICAgIHltbTQsIHltbTQsIFlNTVdPUkQgW3drKDEpXQorICAgIHZwYWRkZCAgICAgIHltbTYsIHltbTYsIHltbTIKKyAgICB2cGFkZGQgICAgICB5bW00LCB5bW00LCB5bW0yCisgICAgdnBzcmxkICAgICAgeW1tNiwgeW1tNiwgU0NBTEVCSVRTICAgOyB5bW02PVlFTAorICAgIHZwc3JsZCAgICAgIHltbTQsIHltbTQsIFNDQUxFQklUUyAgIDsgeW1tND1ZRUgKKyAgICB2cGFja3NzZHcgICB5bW02LCB5bW02LCB5bW00ICAgICAgICA7IHltbTY9WUUKKworICAgIHZwc2xsdyAgICAgIHltbTAsIHltbTAsIEJZVEVfQklUCisgICAgdnBvciAgICAgICAgeW1tNiwgeW1tNiwgeW1tMCAgICAgICAgOyB5bW02PVkKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyZGldLCB5bW02ICAgICA7IFNhdmUgWQorCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgYWRkICAgICAgICAgcnNpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgICAgICAgICA7IG91dHB0cjAKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5fbGQxCisKKyAgICBwb3AgICAgICAgICByY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorICAgIHBvcCAgICAgICAgIHJzaQorICAgIHBvcCAgICAgICAgIHJkaQorCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9idWYKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgICAgOyBudW1fcm93cworICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICByYngKKyAgICB2emVyb3VwcGVyCisgICAgdW5jb2xsZWN0X2FyZ3MgNQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3J5ZXh0LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNncnlleHQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzYWU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjZ3J5ZXh0LXNzZTIuYXNtCkBAIC0wLDAgKzEsMzY0IEBACis7Cis7IGpjZ3J5ZXh0LmFzbSAtIGdyYXlzY2FsZSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIoSkRJTUVOU0lPTiBpbWdfd2lkdGgsIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpOworOworCis7IHIxMGQgPSBKRElNRU5TSU9OIGltZ193aWR0aAorOyByMTEgPSBKU0FNUEFSUkFZIGlucHV0X2J1ZgorOyByMTIgPSBKU0FNUElNQUdFIG91dHB1dF9idWYKKzsgcjEzZCA9IEpESU1FTlNJT04gb3V0cHV0X3JvdworOyByMTRkID0gaW50IG51bV9yb3dzCisKKyVkZWZpbmUgd2soaSkgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JEICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gIDIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3JnYl9ncmF5X2NvbnZlcnRfc3NlMikKKworRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3aygwKV0KKyAgICBjb2xsZWN0X2FyZ3MgNQorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgZWN4LCByMTBkCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIKKyAgICBtb3YgICAgICAgICBlY3gsIHIxM2QKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIGxlYSAgICAgICAgIHJkaSwgW3JkaStyY3gqU0laRU9GX0pTQU1QUk9XXQorCisgICAgcG9wICAgICAgICAgcmN4CisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMQorICAgIG1vdiAgICAgICAgIGVheCwgcjE0ZAorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAgamxlICAgICAgICAgbmVhciAucmV0dXJuCisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByc2kKKyAgICBwdXNoICAgICAgICByY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyMAorCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKyAgICBwdXNoICAgICAgICByYXgKKyAgICBwdXNoICAgICAgICByZHgKKyAgICBsZWEgICAgICAgICByY3gsIFtyY3grcmN4KjJdICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX0JZVEUKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgIG1vdnp4ICAgICAgIHJheCwgQllURSBbcnNpK3JjeF0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgbW92enggICAgICAgcmR4LCBXT1JEIFtyc2krcmN4XQorICAgIHNobCAgICAgICAgIHJheCwgV09SRF9CSVQKKyAgICBvciAgICAgICAgICByYXgsIHJkeAorLmNvbHVtbl9sZDQ6CisgICAgbW92ZCAgICAgICAgeG1tQSwgZWF4CisgICAgcG9wICAgICAgICAgcmR4CisgICAgcG9wICAgICAgICAgcmF4CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9EV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIG1vdmQgICAgICAgIHhtbUYsIFhNTV9EV09SRCBbcnNpK3JjeF0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICBwb3IgICAgICAgICB4bW1BLCB4bW1GCisuY29sdW1uX2xkODoKKyAgICB0ZXN0ICAgICAgICBjbCwgU0laRU9GX01NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgbW92cSAgICAgICAgeG1tQiwgWE1NX01NV09SRCBbcnNpK3JjeF0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgcG9yICAgICAgICAgeG1tQSwgeG1tQgorLmNvbHVtbl9sZDE2OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgIG1vdmRxYSAgICAgIHhtbUYsIHhtbUEKKyAgICBtb3ZkcXUgICAgICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9YTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorLmNvbHVtbl9sZDMyOgorICAgIHRlc3QgICAgICAgIGNsLCAyKlNJWkVPRl9YTU1XT1JECisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1BCisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgam1wICAgICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorCisuY29sdW1ubG9vcDoKKyAgICBtb3ZkcXUgICAgICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3ZkcXUgICAgICB4bW1GLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3ZkcXUgICAgICB4bW1CLCBYTU1XT1JEIFtyc2krMipTSVpFT0ZfWE1NV09SRF0KKworLnJnYl9ncmF5X2NudjoKKyAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgIDsgeG1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgOyB4bW1CPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUEKKyAgICBwc2xsZHEgICAgICB4bW1BLCA4ICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgIHBzcmxkcSAgICAgIHhtbUcsIDggICAgIDsgeG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwdW5wY2toYncgICB4bW1BLCB4bW1GICA7IHhtbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBKQorICAgIHBzbGxkcSAgICAgIHhtbUYsIDggICAgIDsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKyAgICBwdW5wY2tsYncgICB4bW1HLCB4bW1CICA7IHhtbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEKQorICAgIHB1bnBja2hidyAgIHhtbUYsIHhtbUIgIDsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1BCisgICAgcHNsbGRxICAgICAgeG1tQSwgOCAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKyAgICBwc3JsZHEgICAgICB4bW1ELCA4ICAgICA7IHhtbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNraGJ3ICAgeG1tQSwgeG1tRyAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKKyAgICBwc2xsZHEgICAgICB4bW1HLCA4ICAgICA7IHhtbUc9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCKQorCisgICAgcHVucGNrbGJ3ICAgeG1tRCwgeG1tRiAgOyB4bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSkKKyAgICBwdW5wY2toYncgICB4bW1HLCB4bW1GICA7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQorCisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIHBzbGxkcSAgICAgIHhtbUEsIDggICAgIDsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDQgMDggMEMgMTAgMTQgMTggMUMpCisgICAgcHNybGRxICAgICAgeG1tRSwgOCAgICAgOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHB1bnBja2hidyAgIHhtbUEsIHhtbUQgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgcHNsbGRxICAgICAgeG1tRCwgOCAgICAgOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKworICAgIHB1bnBja2xidyAgIHhtbUUsIHhtbUcgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgcHVucGNraGJ3ICAgeG1tRCwgeG1tRyAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKworICAgIHB4b3IgICAgICAgIHhtbUgsIHhtbUgKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1IICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgIHB1bnBja2hidyAgIHhtbUMsIHhtbUggIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1FCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tSCAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICBwdW5wY2toYncgICB4bW1CLCB4bW1IICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorCisgICAgbW92ZHFhICAgICAgeG1tRiwgeG1tRAorICAgIHB1bnBja2xidyAgIHhtbUQsIHhtbUggIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgcHVucGNraGJ3ICAgeG1tRiwgeG1tSCAgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKworJWVsc2UgIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzE2CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKyAgICBtb3ZkICAgICAgICB4bW1BLCBYTU1fRFdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQyOgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC84CisgICAganogICAgICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgIG1vdnEgICAgICAgIHhtbUUsIFhNTV9NTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKyAgICBwc2xsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgcG9yICAgICAgICAgeG1tQSwgeG1tRQorLmNvbHVtbl9sZDQ6CisgICAgdGVzdCAgICAgICAgY2wsIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqeiAgICAgICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgbW92ZHFhICAgICAgeG1tRSwgeG1tQQorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ4OgorICAgIHRlc3QgICAgICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8yCisgICAgbW92ICAgICAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICBtb3ZkcWEgICAgICB4bW1GLCB4bW1BCisgICAgbW92ZHFhICAgICAgeG1tSCwgeG1tRQorICAgIG1vdmRxdSAgICAgIHhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIG1vdmRxdSAgICAgIHhtbUUsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHF1ICAgICAgeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRSwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tRiwgWE1NV09SRCBbcnNpKzIqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHF1ICAgICAgeG1tSCwgWE1NV09SRCBbcnNpKzMqU0laRU9GX1hNTVdPUkRdCisKKy5yZ2JfZ3JheV9jbnY6CisgICAgOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICA7IHhtbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgIDsgeG1tRj0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUQsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1FICAgICAgOyB4bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNSkKKyAgICBwdW5wY2toYncgICB4bW1ELCB4bW1FICAgICAgOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUYKKyAgICBwdW5wY2tsYncgICB4bW1GLCB4bW1IICAgICAgOyB4bW1GPSgwOCAwQyAxOCAxQyAyOCAyQyAzOCAzQyAwOSAwRCAxOSAxRCAyOSAyRCAzOSAzRCkKKyAgICBwdW5wY2toYncgICB4bW1DLCB4bW1IICAgICAgOyB4bW1DPSgwQSAwRSAxQSAxRSAyQSAyRSAzQSAzRSAwQiAwRiAxQiAxRiAyQiAyRiAzQiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUEKKyAgICBwdW5wY2tsd2QgICB4bW1BLCB4bW1GICAgICAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQykKKyAgICBwdW5wY2tod2QgICB4bW1CLCB4bW1GICAgICAgOyB4bW1CPSgwMSAwNSAwOSAwRCAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAzMSAzNSAzOSAzRCkKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUQKKyAgICBwdW5wY2tsd2QgICB4bW1ELCB4bW1DICAgICAgOyB4bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRSkKKyAgICBwdW5wY2tod2QgICB4bW1HLCB4bW1DICAgICAgOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUUsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1EICAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICBwdW5wY2toYncgICB4bW1FLCB4bW1EICAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKworICAgIG1vdmRxYSAgICAgIHhtbUgsIHhtbUIKKyAgICBwdW5wY2tsYncgICB4bW1CLCB4bW1HICAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICBwdW5wY2toYncgICB4bW1ILCB4bW1HICAgICAgOyB4bW1IPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKworICAgIHB4b3IgICAgICAgIHhtbUYsIHhtbUYKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUEKKyAgICBwdW5wY2tsYncgICB4bW1BLCB4bW1GICAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSkKKyAgICBwdW5wY2toYncgICB4bW1DLCB4bW1GICAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworICAgIG1vdmRxYSAgICAgIHhtbUQsIHhtbUIKKyAgICBwdW5wY2tsYncgICB4bW1CLCB4bW1GICAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICBwdW5wY2toYncgICB4bW1ELCB4bW1GICAgICAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKworICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUUKKyAgICBwdW5wY2tsYncgICB4bW1FLCB4bW1GICAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICBwdW5wY2toYncgICB4bW1HLCB4bW1GICAgICAgOyB4bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKworICAgIHB1bnBja2xidyAgIHhtbUYsIHhtbUgKKyAgICBwdW5wY2toYncgICB4bW1ILCB4bW1ICisgICAgcHNybHcgICAgICAgeG1tRiwgQllURV9CSVQgIDsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgcHNybHcgICAgICAgeG1tSCwgQllURV9CSVQgIDsgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHhtbTA9UigwMjQ2OEFDRSk9UkUsIHhtbTI9RygwMjQ2OEFDRSk9R0UsIHhtbTQ9QigwMjQ2OEFDRSk9QkUKKyAgICA7IHhtbTE9UigxMzU3OUJERik9Uk8sIHhtbTM9RygxMzU3OUJERik9R08sIHhtbTU9QigxMzU3OUJERik9Qk8KKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMQorICAgIHB1bnBja2x3ZCAgIHhtbTEsIHhtbTMKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW0zCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtyZWwgUFdfRjAyOTlfRjAzMzddICA7IHhtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNz1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMAorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTIKKyAgICBwdW5wY2tod2QgICB4bW02LCB4bW0yCisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW3JlbCBQV19GMDI5OV9GMDMzN10gIDsgeG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtyZWwgUFdfRjAyOTlfRjAzMzddICA7IHhtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9Qk8KKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9QkUKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMworICAgIHBtYWRkd2QgICAgIHhtbTAsIFtyZWwgUFdfRjAxMTRfRjAyNTBdICA7IHhtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICBwbWFkZHdkICAgICB4bW00LCBbcmVsIFBXX0YwMTE0X0YwMjUwXSAgOyB4bW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBbcmVsIFBEX09ORUhBTEZdICAgICAgOyB4bW0zPVtQRF9PTkVIQUxGXQorCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMworICAgIHBzcmxkICAgICAgIHhtbTAsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tMD1ZT0wKKyAgICBwc3JsZCAgICAgICB4bW00LCBTQ0FMRUJJVFMgICAgICAgICA7IHhtbTQ9WU9ICisgICAgcGFja3NzZHcgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPVlPCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02CisgICAgcHVucGNrbHdkICAgeG1tNiwgeG1tMgorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTIKKyAgICBwbWFkZHdkICAgICB4bW02LCBbcmVsIFBXX0YwMTE0X0YwMjUwXSAgOyB4bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19GMDExNF9GMDI1MF0gIDsgeG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW3JlbCBQRF9PTkVIQUxGXSAgICAgIDsgeG1tMj1bUERfT05FSEFMRl0KKworICAgIHBhZGRkICAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXQorICAgIHBhZGRkICAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDEpXQorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0yCisgICAgcHNybGQgICAgICAgeG1tNiwgU0NBTEVCSVRTICAgICAgICAgOyB4bW02PVlFTAorICAgIHBzcmxkICAgICAgIHhtbTQsIFNDQUxFQklUUyAgICAgICAgIDsgeG1tND1ZRUgKKyAgICBwYWNrc3NkdyAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9WUUKKworICAgIHBzbGx3ICAgICAgIHhtbTAsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PVkKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZGldLCB4bW02ICAgICA7IFNhdmUgWQorCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgICAgICAgOyBvdXRwdHIwCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamFlICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uX2xkMQorCisgICAgcG9wICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfYnVmCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjaHVmZi1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjaHVmZi1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjA5MWFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNodWZmLXNzZTIuYXNtCkBAIC0wLDAgKzEsMzQ4IEBACis7Cis7IGpjaHVmZi1zc2UyLmFzbSAtIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAoQykgMjAwOS0yMDExLCAyMDE0LTIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlldSBEYXJib2lzLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYW4gU1NFMiBpbXBsZW1lbnRhdGlvbiBmb3IgSHVmZm1hbiBjb2Rpbmcgb2Ygb25lIGJsb2NrLgorOyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24gamNodWZmLmM7IHNlZSBqY2h1ZmYuYyBmb3IgbW9yZQorOyBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfaHVmZl9lbmNvZGVfb25lX2Jsb2NrKQorCitFWFROKGpjb25zdF9odWZmX2VuY29kZV9vbmVfYmxvY2spOgorCislaW5jbHVkZSAianBlZ19uYml0c190YWJsZS5pbmMiCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCis7IFRoZXNlIG1hY3JvcyBwZXJmb3JtIHRoZSBzYW1lIHRhc2sgYXMgdGhlIGVtaXRfYml0cygpIGZ1bmN0aW9uIGluIHRoZQorOyBvcmlnaW5hbCBsaWJqcGVnIGNvZGUuICBJbiBhZGRpdGlvbiB0byByZWR1Y2luZyBvdmVyaGVhZCBieSBleHBsaWNpdGx5Cis7IGlubGluaW5nIHRoZSBjb2RlLCBhZGRpdGlvbmFsIHBlcmZvcm1hbmNlIGlzIGFjaGlldmVkIGJ5IHRha2luZyBpbnRvCis7IGFjY291bnQgdGhlIHNpemUgb2YgdGhlIGJpdCBidWZmZXIgYW5kIHdhaXRpbmcgdW50aWwgaXQgaXMgYWxtb3N0IGZ1bGwKKzsgYmVmb3JlIGVtcHR5aW5nIGl0LiAgVGhpcyBtb3N0bHkgYmVuZWZpdHMgNjQtYml0IHBsYXRmb3Jtcywgc2luY2UgNgorOyBieXRlcyBjYW4gYmUgc3RvcmVkIGluIGEgNjQtYml0IGJpdCBidWZmZXIgYmVmb3JlIGl0IGhhcyB0byBiZSBlbXB0aWVkLgorCislbWFjcm8gRU1JVF9CWVRFIDAKKyAgICBzdWIgICAgICAgICBwdXRfYml0cywgOCAgICAgICAgICAgICA7IHB1dF9iaXRzIC09IDg7CisgICAgbW92ICAgICAgICAgcmR4LCBwdXRfYnVmZmVyCisgICAgbW92ICAgICAgICAgZWN4LCBwdXRfYml0cworICAgIHNociAgICAgICAgIHJkeCwgY2wgICAgICAgICAgICAgICAgIDsgYyA9IChKT0NURVQpR0VUSk9DVEVUKHB1dF9idWZmZXIgPj4gcHV0X2JpdHMpOworICAgIG1vdiAgICAgICAgIGJ5dGUgW2J1ZmZlcl0sIGRsICAgICAgIDsgKmJ1ZmZlcisrID0gYzsKKyAgICBhZGQgICAgICAgICBidWZmZXIsIDEKKyAgICBjbXAgICAgICAgICBkbCwgMHhGRiAgICAgICAgICAgICAgICA7IG5lZWQgdG8gc3R1ZmYgYSB6ZXJvIGJ5dGU/CisgICAgam5lICAgICAgICAgJSUuRU1JVF9CWVRFX0VORAorICAgIG1vdiAgICAgICAgIGJ5dGUgW2J1ZmZlcl0sIDAgICAgICAgIDsgKmJ1ZmZlcisrID0gMDsKKyAgICBhZGQgICAgICAgICBidWZmZXIsIDEKKyUlLkVNSVRfQllURV9FTkQ6CislZW5kbWFjcm8KKworJW1hY3JvIFBVVF9CSVRTIDEKKyAgICBhZGQgICAgICAgICBwdXRfYml0cywgZWN4ICAgICAgICAgICA7IHB1dF9iaXRzICs9IHNpemU7CisgICAgc2hsICAgICAgICAgcHV0X2J1ZmZlciwgY2wgICAgICAgICAgOyBwdXRfYnVmZmVyID0gKHB1dF9idWZmZXIgPDwgc2l6ZSk7CisgICAgb3IgICAgICAgICAgcHV0X2J1ZmZlciwgJTEKKyVlbmRtYWNybworCislbWFjcm8gQ0hFQ0tCVUYzMSAwCisgICAgY21wICAgICAgICAgcHV0X2JpdHMsIDMyICAgICAgICAgICAgOyBpZiAocHV0X2JpdHMgPiAzMSkgeworICAgIGpsICAgICAgICAgICUlLkNIRUNLQlVGMzFfRU5ECisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCislJS5DSEVDS0JVRjMxX0VORDoKKyVlbmRtYWNybworCislbWFjcm8gQ0hFQ0tCVUY0NyAwCisgICAgY21wICAgICAgICAgcHV0X2JpdHMsIDQ4ICAgICAgICAgICAgOyBpZiAocHV0X2JpdHMgPiA0NykgeworICAgIGpsICAgICAgICAgICUlLkNIRUNLQlVGNDdfRU5ECisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCisgICAgRU1JVF9CWVRFCislJS5DSEVDS0JVRjQ3X0VORDoKKyVlbmRtYWNybworCislbWFjcm8gRU1JVF9CSVRTIDIKKyAgICBDSEVDS0JVRjQ3CisgICAgbW92ICAgICAgICAgZWN4LCAlMgorICAgIFBVVF9CSVRTICAgICUxCislZW5kbWFjcm8KKworJW1hY3JvIGtsb29wX3ByZXBhcmUgMzcgICAgICAgICAgICAgICAgIDsoa28sIGpubzAsIC4uLiwgam5vMzEsIHhtbTAsIHhtbTEsIHhtbTIsIHhtbTMpCisgICAgcHhvciAgICAgICAgeG1tOCwgeG1tOCAgICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcHhvciAgICAgICAgeG1tOSwgeG1tOSAgICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcHhvciAgICAgICAgeG1tMTAsIHhtbTEwICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcHhvciAgICAgICAgeG1tMTEsIHhtbTExICAgICAgICAgICAgOyBfX20xMjhpIG5lZyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgcGluc3J3ICAgICAgJTM0LCB3b3JkIFtyMTIgKyAlMiAgKiBTSVpFT0ZfV09SRF0sIDAgIDsgeG1tX3NoYWRvd1swXSA9IGJsb2NrW2pubzBdOworICAgIHBpbnNydyAgICAgICUzNSwgd29yZCBbcjEyICsgJTEwICogU0laRU9GX1dPUkRdLCAwICA7IHhtbV9zaGFkb3dbOF0gPSBibG9ja1tqbm84XTsKKyAgICBwaW5zcncgICAgICAlMzYsIHdvcmQgW3IxMiArICUxOCAqIFNJWkVPRl9XT1JEXSwgMCAgOyB4bW1fc2hhZG93WzE2XSA9IGJsb2NrW2pubzE2XTsKKyAgICBwaW5zcncgICAgICAlMzcsIHdvcmQgW3IxMiArICUyNiAqIFNJWkVPRl9XT1JEXSwgMCAgOyB4bW1fc2hhZG93WzI0XSA9IGJsb2NrW2pubzI0XTsKKyAgICBwaW5zcncgICAgICAlMzQsIHdvcmQgW3IxMiArICUzICAqIFNJWkVPRl9XT1JEXSwgMSAgOyB4bW1fc2hhZG93WzFdID0gYmxvY2tbam5vMV07CisgICAgcGluc3J3ICAgICAgJTM1LCB3b3JkIFtyMTIgKyAlMTEgKiBTSVpFT0ZfV09SRF0sIDEgIDsgeG1tX3NoYWRvd1s5XSA9IGJsb2NrW2pubzldOworICAgIHBpbnNydyAgICAgICUzNiwgd29yZCBbcjEyICsgJTE5ICogU0laRU9GX1dPUkRdLCAxICA7IHhtbV9zaGFkb3dbMTddID0gYmxvY2tbam5vMTddOworICAgIHBpbnNydyAgICAgICUzNywgd29yZCBbcjEyICsgJTI3ICogU0laRU9GX1dPUkRdLCAxICA7IHhtbV9zaGFkb3dbMjVdID0gYmxvY2tbam5vMjVdOworICAgIHBpbnNydyAgICAgICUzNCwgd29yZCBbcjEyICsgJTQgICogU0laRU9GX1dPUkRdLCAyICA7IHhtbV9zaGFkb3dbMl0gPSBibG9ja1tqbm8yXTsKKyAgICBwaW5zcncgICAgICAlMzUsIHdvcmQgW3IxMiArICUxMiAqIFNJWkVPRl9XT1JEXSwgMiAgOyB4bW1fc2hhZG93WzEwXSA9IGJsb2NrW2pubzEwXTsKKyAgICBwaW5zcncgICAgICAlMzYsIHdvcmQgW3IxMiArICUyMCAqIFNJWkVPRl9XT1JEXSwgMiAgOyB4bW1fc2hhZG93WzE4XSA9IGJsb2NrW2pubzE4XTsKKyAgICBwaW5zcncgICAgICAlMzcsIHdvcmQgW3IxMiArICUyOCAqIFNJWkVPRl9XT1JEXSwgMiAgOyB4bW1fc2hhZG93WzI2XSA9IGJsb2NrW2pubzI2XTsKKyAgICBwaW5zcncgICAgICAlMzQsIHdvcmQgW3IxMiArICU1ICAqIFNJWkVPRl9XT1JEXSwgMyAgOyB4bW1fc2hhZG93WzNdID0gYmxvY2tbam5vM107CisgICAgcGluc3J3ICAgICAgJTM1LCB3b3JkIFtyMTIgKyAlMTMgKiBTSVpFT0ZfV09SRF0sIDMgIDsgeG1tX3NoYWRvd1sxMV0gPSBibG9ja1tqbm8xMV07CisgICAgcGluc3J3ICAgICAgJTM2LCB3b3JkIFtyMTIgKyAlMjEgKiBTSVpFT0ZfV09SRF0sIDMgIDsgeG1tX3NoYWRvd1sxOV0gPSBibG9ja1tqbm8xOV07CisgICAgcGluc3J3ICAgICAgJTM3LCB3b3JkIFtyMTIgKyAlMjkgKiBTSVpFT0ZfV09SRF0sIDMgIDsgeG1tX3NoYWRvd1syN10gPSBibG9ja1tqbm8yN107CisgICAgcGluc3J3ICAgICAgJTM0LCB3b3JkIFtyMTIgKyAlNiAgKiBTSVpFT0ZfV09SRF0sIDQgIDsgeG1tX3NoYWRvd1s0XSA9IGJsb2NrW2pubzRdOworICAgIHBpbnNydyAgICAgICUzNSwgd29yZCBbcjEyICsgJTE0ICogU0laRU9GX1dPUkRdLCA0ICA7IHhtbV9zaGFkb3dbMTJdID0gYmxvY2tbam5vMTJdOworICAgIHBpbnNydyAgICAgICUzNiwgd29yZCBbcjEyICsgJTIyICogU0laRU9GX1dPUkRdLCA0ICA7IHhtbV9zaGFkb3dbMjBdID0gYmxvY2tbam5vMjBdOworICAgIHBpbnNydyAgICAgICUzNywgd29yZCBbcjEyICsgJTMwICogU0laRU9GX1dPUkRdLCA0ICA7IHhtbV9zaGFkb3dbMjhdID0gYmxvY2tbam5vMjhdOworICAgIHBpbnNydyAgICAgICUzNCwgd29yZCBbcjEyICsgJTcgICogU0laRU9GX1dPUkRdLCA1ICA7IHhtbV9zaGFkb3dbNV0gPSBibG9ja1tqbm81XTsKKyAgICBwaW5zcncgICAgICAlMzUsIHdvcmQgW3IxMiArICUxNSAqIFNJWkVPRl9XT1JEXSwgNSAgOyB4bW1fc2hhZG93WzEzXSA9IGJsb2NrW2pubzEzXTsKKyAgICBwaW5zcncgICAgICAlMzYsIHdvcmQgW3IxMiArICUyMyAqIFNJWkVPRl9XT1JEXSwgNSAgOyB4bW1fc2hhZG93WzIxXSA9IGJsb2NrW2pubzIxXTsKKyAgICBwaW5zcncgICAgICAlMzcsIHdvcmQgW3IxMiArICUzMSAqIFNJWkVPRl9XT1JEXSwgNSAgOyB4bW1fc2hhZG93WzI5XSA9IGJsb2NrW2pubzI5XTsKKyAgICBwaW5zcncgICAgICAlMzQsIHdvcmQgW3IxMiArICU4ICAqIFNJWkVPRl9XT1JEXSwgNiAgOyB4bW1fc2hhZG93WzZdID0gYmxvY2tbam5vNl07CisgICAgcGluc3J3ICAgICAgJTM1LCB3b3JkIFtyMTIgKyAlMTYgKiBTSVpFT0ZfV09SRF0sIDYgIDsgeG1tX3NoYWRvd1sxNF0gPSBibG9ja1tqbm8xNF07CisgICAgcGluc3J3ICAgICAgJTM2LCB3b3JkIFtyMTIgKyAlMjQgKiBTSVpFT0ZfV09SRF0sIDYgIDsgeG1tX3NoYWRvd1syMl0gPSBibG9ja1tqbm8yMl07CisgICAgcGluc3J3ICAgICAgJTM3LCB3b3JkIFtyMTIgKyAlMzIgKiBTSVpFT0ZfV09SRF0sIDYgIDsgeG1tX3NoYWRvd1szMF0gPSBibG9ja1tqbm8zMF07CisgICAgcGluc3J3ICAgICAgJTM0LCB3b3JkIFtyMTIgKyAlOSAgKiBTSVpFT0ZfV09SRF0sIDcgIDsgeG1tX3NoYWRvd1s3XSA9IGJsb2NrW2pubzddOworICAgIHBpbnNydyAgICAgICUzNSwgd29yZCBbcjEyICsgJTE3ICogU0laRU9GX1dPUkRdLCA3ICA7IHhtbV9zaGFkb3dbMTVdID0gYmxvY2tbam5vMTVdOworICAgIHBpbnNydyAgICAgICUzNiwgd29yZCBbcjEyICsgJTI1ICogU0laRU9GX1dPUkRdLCA3ICA7IHhtbV9zaGFkb3dbMjNdID0gYmxvY2tbam5vMjNdOworJWlmICUxICE9IDMyCisgICAgcGluc3J3ICAgICAgJTM3LCB3b3JkIFtyMTIgKyAlMzMgKiBTSVpFT0ZfV09SRF0sIDcgIDsgeG1tX3NoYWRvd1szMV0gPSBibG9ja1tqbm8zMV07CislZWxzZQorICAgIHBpbnNydyAgICAgICUzNywgZWJ4LCA3ICAgICAgICAgICAgIDsgeG1tX3NoYWRvd1szMV0gPSBibG9ja1tqbm8zMV07CislZW5kaWYKKyAgICBwY21wZ3R3ICAgICB4bW04LCAlMzQgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwY21wZ3R3ICAgICB4bW05LCAlMzUgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwY21wZ3R3ICAgICB4bW0xMCwgJTM2ICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwY21wZ3R3ICAgICB4bW0xMSwgJTM3ICAgICAgICAgICAgICA7IG5lZyA9IF9tbV9jbXBndF9lcGkxNihuZWcsIHgxKTsKKyAgICBwYWRkdyAgICAgICAlMzQsIHhtbTggICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBwYWRkdyAgICAgICAlMzUsIHhtbTkgICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBwYWRkdyAgICAgICAlMzYsIHhtbTEwICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBwYWRkdyAgICAgICAlMzcsIHhtbTExICAgICAgICAgICAgICA7IHgxID0gX21tX2FkZF9lcGkxNih4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzQsIHhtbTggICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzUsIHhtbTkgICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzYsIHhtbTEwICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICAlMzcsIHhtbTExICAgICAgICAgICAgICA7IHgxID0gX21tX3hvcl9zaTEyOCh4MSwgbmVnKTsKKyAgICBweG9yICAgICAgICB4bW04LCAlMzQgICAgICAgICAgICAgICA7IG5lZyA9IF9tbV94b3Jfc2kxMjgobmVnLCB4MSk7CisgICAgcHhvciAgICAgICAgeG1tOSwgJTM1ICAgICAgICAgICAgICAgOyBuZWcgPSBfbW1feG9yX3NpMTI4KG5lZywgeDEpOworICAgIHB4b3IgICAgICAgIHhtbTEwLCAlMzYgICAgICAgICAgICAgIDsgbmVnID0gX21tX3hvcl9zaTEyOChuZWcsIHgxKTsKKyAgICBweG9yICAgICAgICB4bW0xMSwgJTM3ICAgICAgICAgICAgICA7IG5lZyA9IF9tbV94b3Jfc2kxMjgobmVnLCB4MSk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbdDEgKyAlMSAqIFNJWkVPRl9XT1JEXSwgJTM0ICAgICAgICAgICA7IF9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKikodDEgKyBrbyksIHgxKTsKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt0MSArICglMSArIDgpICogU0laRU9GX1dPUkRdLCAlMzUgICAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MSArIGtvICsgOCksIHgxKTsKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt0MSArICglMSArIDE2KSAqIFNJWkVPRl9XT1JEXSwgJTM2ICAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MSArIGtvICsgMTYpLCB4MSk7CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbdDEgKyAoJTEgKyAyNCkgKiBTSVpFT0ZfV09SRF0sICUzNyAgICA7IF9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKikodDEgKyBrbyArIDI0KSwgeDEpOworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3QyICsgJTEgKiBTSVpFT0ZfV09SRF0sIHhtbTggICAgICAgICAgOyBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHQyICsga28pLCBuZWcpOworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3QyICsgKCUxICsgOCkgKiBTSVpFT0ZfV09SRF0sIHhtbTkgICAgOyBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHQyICsga28gKyA4KSwgbmVnKTsKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt0MiArICglMSArIDE2KSAqIFNJWkVPRl9XT1JEXSwgeG1tMTAgIDsgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKSh0MiArIGtvICsgMTYpLCBuZWcpOworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3QyICsgKCUxICsgMjQpICogU0laRU9GX1dPUkRdLCB4bW0xMSAgOyBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKHQyICsga28gKyAyNCksIG5lZyk7CislZW5kbWFjcm8KKworOworOyBFbmNvZGUgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTChKT0NURVQgKikKKzsganNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX3NzZTIod29ya2luZ19zdGF0ZSAqc3RhdGUsIEpPQ1RFVCAqYnVmZmVyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Rlcml2ZWRfdGJsICpkY3RibCwgY19kZXJpdmVkX3RibCAqYWN0YmwpCis7CisKKzsgcjEwID0gd29ya2luZ19zdGF0ZSAqc3RhdGUKKzsgcjExID0gSk9DVEVUICpidWZmZXIKKzsgcjEyID0gSkNPRUZQVFIgYmxvY2sKKzsgcjEzZCA9IGludCBsYXN0X2RjX3ZhbAorOyByMTQgPSBjX2Rlcml2ZWRfdGJsICpkY3RibAorOyByMTUgPSBjX2Rlcml2ZWRfdGJsICphY3RibAorCislZGVmaW5lIHQxICAgICAgICAgIHJicCAtIChEQ1RTSVpFMiAqIFNJWkVPRl9XT1JEKQorJWRlZmluZSB0MiAgICAgICAgICB0MSAtIChEQ1RTSVpFMiAqIFNJWkVPRl9XT1JEKQorJWRlZmluZSBwdXRfYnVmZmVyICByOAorJWRlZmluZSBwdXRfYml0cyAgICByOWQKKyVkZWZpbmUgYnVmZmVyICAgICAgcmF4CisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2tfc3NlMikKKworRVhUTihqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2tfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3QyXQorICAgIHB1c2hfeG1tICAgIDQKKyAgICBjb2xsZWN0X2FyZ3MgNgorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgYnVmZmVyLCByMTEgICAgICAgICAgICAgICAgICA7IHIxMSBpcyBub3cgc3JhdGNoCisKKyAgICBtb3YgICAgICAgICBwdXRfYnVmZmVyLCBNTVdPUkQgW3IxMCsxNl0gIDsgcHV0X2J1ZmZlciA9IHN0YXRlLT5jdXIucHV0X2J1ZmZlcjsKKyAgICBtb3YgICAgICAgICBwdXRfYml0cywgICAgRFdPUkQgW3IxMCsyNF0gIDsgcHV0X2JpdHMgPSBzdGF0ZS0+Y3VyLnB1dF9iaXRzOworICAgIHB1c2ggICAgICAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyByMTAgaXMgbm93IHNjcmF0Y2gKKworICAgIDsgRW5jb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlIHBlciBzZWN0aW9uIEYuMS4yLjEKKyAgICBtb3ZzeCAgICAgICBlZGksIHdvcmQgW3IxMl0gICAgICAgICA7IHRlbXAgPSB0ZW1wMiA9IGJsb2NrWzBdIC0gbGFzdF9kY192YWw7CisgICAgc3ViICAgICAgICAgZWRpLCByMTNkICAgICAgICAgICAgICAgOyByMTMgaXMgbm90IHVzZWQgYW55bW9yZQorICAgIG1vdiAgICAgICAgIGVieCwgZWRpCisKKyAgICA7IFRoaXMgaXMgYSB3ZWxsLWtub3duIHRlY2huaXF1ZSBmb3Igb2J0YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZQorICAgIDsgd2l0aG91dCBhIGJyYW5jaC4gIEl0IGlzIGRlcml2ZWQgZnJvbSBhbiBhc3NlbWJseSBsYW5ndWFnZSB0ZWNobmlxdWUKKyAgICA7IHByZXNlbnRlZCBpbiAiSG93IHRvIE9wdGltaXplIGZvciB0aGUgUGVudGl1bSBQcm9jZXNzb3JzIiwKKyAgICA7IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBieSBBZ25lciBGb2cuCisgICAgbW92ICAgICAgICAgZXNpLCBlZGkKKyAgICBzYXIgICAgICAgICBlc2ksIDMxICAgICAgICAgICAgICAgICA7IHRlbXAzID0gdGVtcCA+PiAoQ0hBUl9CSVQgKiBzaXplb2YoaW50KSAtIDEpOworICAgIHhvciAgICAgICAgIGVkaSwgZXNpICAgICAgICAgICAgICAgIDsgdGVtcCBePSB0ZW1wMzsKKyAgICBzdWIgICAgICAgICBlZGksIGVzaSAgICAgICAgICAgICAgICA7IHRlbXAgLT0gdGVtcDM7CisKKyAgICA7IEZvciBhIG5lZ2F0aXZlIGlucHV0LCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhpbnB1dCkKKyAgICA7IFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZQorICAgIGFkZCAgICAgICAgIGVieCwgZXNpICAgICAgICAgICAgICAgIDsgdGVtcDIgKz0gdGVtcDM7CisKKyAgICA7IEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQKKyAgICBsZWEgICAgICAgICByMTEsIFtyZWwganBlZ19uYml0c190YWJsZV0KKyAgICBtb3Z6eCAgICAgICByZGksIGJ5dGUgW3IxMSArIHJkaV0gICAgICAgICA7IG5iaXRzID0gSlBFR19OQklUUyh0ZW1wKTsKKyAgICA7IEVtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMKKyAgICBtb3YgICAgICAgICByMTFkLCAgSU5UIFtyMTQgKyByZGkgKiA0XSAgICA7IGNvZGUgPSBkY3RibC0+ZWh1ZmNvW25iaXRzXTsKKyAgICBtb3Z6eCAgICAgICBlc2ksIGJ5dGUgW3IxNCArIHJkaSArIDEwMjRdICA7IHNpemUgPSBkY3RibC0+ZWh1ZnNpW25iaXRzXTsKKyAgICBFTUlUX0JJVFMgICByMTEsIGVzaSAgICAgICAgICAgICAgICAgICAgICA7IEVNSVRfQklUUyhjb2RlLCBzaXplKQorCisgICAgOyBNYXNrIG9mZiBhbnkgZXh0cmEgYml0cyBpbiBjb2RlCisgICAgbW92ICAgICAgICAgZXNpLCAxCisgICAgbW92ICAgICAgICAgZWN4LCBlZGkKKyAgICBzaGwgICAgICAgICBlc2ksIGNsCisgICAgZGVjICAgICAgICAgZXNpCisgICAgYW5kICAgICAgICAgZWJ4LCBlc2kgICAgICAgICAgICAgICAgOyB0ZW1wMiAmPSAoKChKTE9ORykxKTw8bmJpdHMpIC0gMTsKKworICAgIDsgRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsCisgICAgOyBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4KKyAgICBFTUlUX0JJVFMgICByYngsIGVkaSAgICAgICAgICAgICAgICA7IEVNSVRfQklUUyh0ZW1wMiwgbmJpdHMpCisKKyAgICA7IFByZXBhcmUgZGF0YQorICAgIHhvciAgICAgICAgIGVieCwgZWJ4CisgICAga2xvb3BfcHJlcGFyZSAgMCwgIDEsICA4LCAgMTYsIDksICAyLCAgMywgIDEwLCAxNywgMjQsIDMyLCAyNSwgXAorICAgICAgICAgICAgICAgICAgIDE4LCAxMSwgNCwgIDUsICAxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsIFwKKyAgICAgICAgICAgICAgICAgICAyNywgMjAsIDEzLCA2LCAgNywgIDE0LCAyMSwgMjgsIDM1LCBcCisgICAgICAgICAgICAgICAgICAgeG1tMCwgeG1tMSwgeG1tMiwgeG1tMworICAgIGtsb29wX3ByZXBhcmUgIDMyLCA0MiwgNDksIDU2LCA1NywgNTAsIDQzLCAzNiwgMjksIDIyLCAxNSwgMjMsIFwKKyAgICAgICAgICAgICAgICAgICAzMCwgMzcsIDQ0LCA1MSwgNTgsIDU5LCA1MiwgNDUsIDM4LCAzMSwgMzksIDQ2LCBcCisgICAgICAgICAgICAgICAgICAgNTMsIDYwLCA2MSwgNTQsIDQ3LCA1NSwgNjIsIDYzLCA2MywgXAorICAgICAgICAgICAgICAgICAgIHhtbTQsIHhtbTUsIHhtbTYsIHhtbTcKKworICAgIHB4b3IgICAgICAgIHhtbTgsIHhtbTgKKyAgICBwY21wZXF3ICAgICB4bW0wLCB4bW04ICAgICAgICAgICAgICA7IHRtcDAgPSBfbW1fY21wZXFfZXBpMTYodG1wMCwgemVybyk7CisgICAgcGNtcGVxdyAgICAgeG1tMSwgeG1tOCAgICAgICAgICAgICAgOyB0bXAxID0gX21tX2NtcGVxX2VwaTE2KHRtcDEsIHplcm8pOworICAgIHBjbXBlcXcgICAgIHhtbTIsIHhtbTggICAgICAgICAgICAgIDsgdG1wMiA9IF9tbV9jbXBlcV9lcGkxNih0bXAyLCB6ZXJvKTsKKyAgICBwY21wZXF3ICAgICB4bW0zLCB4bW04ICAgICAgICAgICAgICA7IHRtcDMgPSBfbW1fY21wZXFfZXBpMTYodG1wMywgemVybyk7CisgICAgcGNtcGVxdyAgICAgeG1tNCwgeG1tOCAgICAgICAgICAgICAgOyB0bXA0ID0gX21tX2NtcGVxX2VwaTE2KHRtcDQsIHplcm8pOworICAgIHBjbXBlcXcgICAgIHhtbTUsIHhtbTggICAgICAgICAgICAgIDsgdG1wNSA9IF9tbV9jbXBlcV9lcGkxNih0bXA1LCB6ZXJvKTsKKyAgICBwY21wZXF3ICAgICB4bW02LCB4bW04ICAgICAgICAgICAgICA7IHRtcDYgPSBfbW1fY21wZXFfZXBpMTYodG1wNiwgemVybyk7CisgICAgcGNtcGVxdyAgICAgeG1tNywgeG1tOCAgICAgICAgICAgICAgOyB0bXA3ID0gX21tX2NtcGVxX2VwaTE2KHRtcDcsIHplcm8pOworICAgIHBhY2tzc3diICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgdG1wMCA9IF9tbV9wYWNrc19lcGkxNih0bXAwLCB0bXAxKTsKKyAgICBwYWNrc3N3YiAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHRtcDIgPSBfbW1fcGFja3NfZXBpMTYodG1wMiwgdG1wMyk7CisgICAgcGFja3Nzd2IgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB0bXA0ID0gX21tX3BhY2tzX2VwaTE2KHRtcDQsIHRtcDUpOworICAgIHBhY2tzc3diICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgdG1wNiA9IF9tbV9wYWNrc19lcGkxNih0bXA2LCB0bXA3KTsKKyAgICBwbW92bXNrYiAgICByMTFkLCB4bW0wICAgICAgICAgICAgICA7IGluZGV4ICA9ICgodWludDY0X3QpX21tX21vdmVtYXNrX2VwaTgodG1wMCkpIDw8IDA7CisgICAgcG1vdm1za2IgICAgcjEyZCwgeG1tMiAgICAgICAgICAgICAgOyBpbmRleCAgPSAoKHVpbnQ2NF90KV9tbV9tb3ZlbWFza19lcGk4KHRtcDIpKSA8PCAxNjsKKyAgICBwbW92bXNrYiAgICByMTNkLCB4bW00ICAgICAgICAgICAgICA7IGluZGV4ICA9ICgodWludDY0X3QpX21tX21vdmVtYXNrX2VwaTgodG1wNCkpIDw8IDMyOworICAgIHBtb3Ztc2tiICAgIHIxNGQsIHhtbTYgICAgICAgICAgICAgIDsgaW5kZXggID0gKCh1aW50NjRfdClfbW1fbW92ZW1hc2tfZXBpOCh0bXA2KSkgPDwgNDg7CisgICAgc2hsICAgICAgICAgcjEyLCAxNgorICAgIHNobCAgICAgICAgIHIxNCwgMTYKKyAgICBvciAgICAgICAgICByMTEsIHIxMgorICAgIG9yICAgICAgICAgIHIxMywgcjE0CisgICAgc2hsICAgICAgICAgcjEzLCAzMgorICAgIG9yICAgICAgICAgIHIxMSwgcjEzCisgICAgbm90ICAgICAgICAgcjExICAgICAgICAgICAgICAgICAgICAgOyBpbmRleCA9IH5pbmRleDsKKworICAgIDttb3YgTU1XT1JEIFsgdDEgKyBEQ1RTSVpFMiAqIFNJWkVPRl9XT1JEIF0sIHIxMQorICAgIDtqbXAgLkVGTgorCisgICAgbW92ICAgICAgICAgcjEzZCwgIElOVCBbcjE1ICsgMjQwICogNF0gICAgIDsgY29kZV8weGYwID0gYWN0YmwtPmVodWZjb1sweGYwXTsKKyAgICBtb3Z6eCAgICAgICByMTRkLCBieXRlIFtyMTUgKyAxMDI0ICsgMjQwXSAgOyBzaXplXzB4ZjAgPSBhY3RibC0+ZWh1ZnNpWzB4ZjBdOworICAgIGxlYSAgICAgICAgIHJzaSwgW3QxXQorLkJMT09QOgorICAgIGJzZiAgICAgICAgIHIxMiwgcjExICAgICAgICAgICAgICAgICAgICAgOyByID0gX19idWlsdGluX2N0emwoaW5kZXgpOworICAgIGp6ICAgICAgICAgIC5FTE9PUAorICAgIG1vdiAgICAgICAgIHJjeCwgcjEyCisgICAgbGVhICAgICAgICAgcnNpLCBbcnNpK3IxMioyXSAgICAgICAgICAgICA7IGsgKz0gcjsKKyAgICBzaHIgICAgICAgICByMTEsIGNsICAgICAgICAgICAgICAgICAgICAgIDsgaW5kZXggPj49IHI7CisgICAgbW92enggICAgICAgcmRpLCB3b3JkIFtyc2ldICAgICAgICAgICAgICA7IHRlbXAgPSB0MVtrXTsKKyAgICBsZWEgICAgICAgICByYngsIFtyZWwganBlZ19uYml0c190YWJsZV0KKyAgICBtb3Z6eCAgICAgICByZGksIGJ5dGUgW3JieCArIHJkaV0gICAgICAgIDsgbmJpdHMgPSBKUEVHX05CSVRTKHRlbXApOworLkJSTE9PUDoKKyAgICBjbXAgICAgICAgICByMTIsIDE2ICAgICAgICAgICAgICAgICA7IHdoaWxlIChyID4gMTUpIHsKKyAgICBqbCAgICAgICAgICAuRVJMT09QCisgICAgRU1JVF9CSVRTICAgcjEzLCByMTRkICAgICAgICAgICAgICAgOyBFTUlUX0JJVFMoY29kZV8weGYwLCBzaXplXzB4ZjApCisgICAgc3ViICAgICAgICAgcjEyLCAxNiAgICAgICAgICAgICAgICAgOyByIC09IDE2OworICAgIGptcCAgICAgICAgIC5CUkxPT1AKKy5FUkxPT1A6CisgICAgOyBFbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMKKyAgICBDSEVDS0JVRjMxICA7IHVzZXMgcmN4LCByZHgKKworICAgIHNobCAgICAgICAgIHIxMiwgNCAgICAgICAgICAgICAgICAgICAgICAgIDsgdGVtcDMgPSAociA8PCA0KSArIG5iaXRzOworICAgIGFkZCAgICAgICAgIHIxMiwgcmRpCisgICAgbW92ICAgICAgICAgZWJ4LCAgSU5UIFtyMTUgKyByMTIgKiA0XSAgICAgOyBjb2RlID0gYWN0YmwtPmVodWZjb1t0ZW1wM107CisgICAgbW92enggICAgICAgZWN4LCBieXRlIFtyMTUgKyByMTIgKyAxMDI0XSAgOyBzaXplID0gYWN0YmwtPmVodWZzaVt0ZW1wM107CisgICAgUFVUX0JJVFMgICAgcmJ4CisKKyAgICA7RU1JVF9DT0RFKGNvZGUsIHNpemUpCisKKyAgICBtb3ZzeCAgICAgICBlYngsIHdvcmQgW3JzaS1EQ1RTSVpFMioyXSAgICA7IHRlbXAyID0gdDJba107CisgICAgOyBNYXNrIG9mZiBhbnkgZXh0cmEgYml0cyBpbiBjb2RlCisgICAgbW92ICAgICAgICAgcmN4LCByZGkKKyAgICBtb3YgICAgICAgICByZHgsIDEKKyAgICBzaGwgICAgICAgICByZHgsIGNsCisgICAgZGVjICAgICAgICAgcmR4CisgICAgYW5kICAgICAgICAgcmJ4LCByZHggICAgICAgICAgICAgICAgOyB0ZW1wMiAmPSAoKChKTE9ORykxKTw8bmJpdHMpIC0gMTsKKyAgICBQVVRfQklUUyAgICByYnggICAgICAgICAgICAgICAgICAgICA7IFBVVF9CSVRTKHRlbXAyLCBuYml0cykKKworICAgIHNociAgICAgICAgIHIxMSwgMSAgICAgICAgICAgICAgICAgIDsgaW5kZXggPj49IDE7CisgICAgYWRkICAgICAgICAgcnNpLCAyICAgICAgICAgICAgICAgICAgOyArK2s7CisgICAgam1wICAgICAgICAgLkJMT09QCisuRUxPT1A6CisgICAgOyBJZiB0aGUgbGFzdCBjb2VmKHMpIHdlcmUgemVybywgZW1pdCBhbiBlbmQtb2YtYmxvY2sgY29kZQorICAgIGxlYSAgICAgICAgIHJkaSwgW3QxICsgKERDVFNJWkUyLTEpICogMl0gIDsgciA9IERDVFNJWkUyLTEtazsKKyAgICBjbXAgICAgICAgICByZGksIHJzaSAgICAgICAgICAgICAgICAgICAgICA7IGlmIChyID4gMCkgeworICAgIGplICAgICAgICAgIC5FRk4KKyAgICBtb3YgICAgICAgICBlYngsICBJTlQgW3IxNV0gICAgICAgICAgICAgICA7IGNvZGUgPSBhY3RibC0+ZWh1ZmNvWzBdOworICAgIG1vdnp4ICAgICAgIHIxMmQsIGJ5dGUgW3IxNSArIDEwMjRdICAgICAgIDsgc2l6ZSA9IGFjdGJsLT5laHVmc2lbMF07CisgICAgRU1JVF9CSVRTICAgcmJ4LCByMTJkCisuRUZOOgorICAgIHBvcCAgICAgICAgIHIxMAorICAgIDsgU2F2ZSBwdXRfYnVmZmVyICYgcHV0X2JpdHMKKyAgICBtb3YgICAgICAgICBNTVdPUkQgW3IxMCsxNl0sIHB1dF9idWZmZXIgIDsgc3RhdGUtPmN1ci5wdXRfYnVmZmVyID0gcHV0X2J1ZmZlcjsKKyAgICBtb3YgICAgICAgICBEV09SRCAgW3IxMCsyNF0sIHB1dF9iaXRzICAgIDsgc3RhdGUtPmN1ci5wdXRfYml0cyA9IHB1dF9iaXRzOworCisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNgorICAgIHBvcF94bW0gICAgIDQKKyAgICBtb3YgICAgICAgICByc3AsIHJicCAgICAgICAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgIHBvcCAgICAgICAgIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY3BodWZmLXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNwaHVmZi1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTc0ODhhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNwaHVmZi1zc2UyLmFzbQpAQCAtMCwwICsxLDYzNyBAQAorOworOyBqY3BodWZmLXNzZTIuYXNtIC0gcHJlcGFyZSBkYXRhIGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGVuY29kaW5nCis7ICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IChDKSAyMDE2LCAyMDE4LCBNYXR0aGlldSBEYXJib2lzCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhbiBTU0UyIGltcGxlbWVudGF0aW9uIG9mIGRhdGEgcHJlcGFyYXRpb24gZm9yIHByb2dyZXNzaXZlCis7IEh1ZmZtYW4gZW5jb2RpbmcuICBTZWUgamNwaHVmZi5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IE1hY3JvcyB0byBsb2FkIGRhdGEgZm9yIGpzaW1kX2VuY29kZV9tY3VfQUNfZmlyc3RfcHJlcGFyZV9zc2UyKCkgYW5kCis7IGpzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmVfc3NlMigpCisKKyVtYWNybyBMT0FEMTYgMAorICAgIHB4b3IgICAgICAgIE4wLCBOMAorICAgIHB4b3IgICAgICAgIE4xLCBOMQorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAwKlNJWkVPRl9JTlRdCisgICAgbW92ICAgICAgICAgVDFkLCBJTlQgW0xVVCArICA4KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMAorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDAKKworICAgIG1vdiAgICAgICAgIFQwZCwgSU5UIFtMVVQgKyAgMSpTSVpFT0ZfSU5UXQorICAgIG1vdiAgICAgICAgIFQxZCwgSU5UIFtMVVQgKyAgOSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDEKKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAxCisKKyAgICBtb3YgICAgICAgICBUMGQsIElOVCBbTFVUICsgIDIqU0laRU9GX0lOVF0KKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgMTAqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCAyCisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgMgorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAzKlNJWkVPRl9JTlRdCisgICAgbW92ICAgICAgICAgVDFkLCBJTlQgW0xVVCArIDExKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMworICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDMKKworICAgIG1vdiAgICAgICAgIFQwZCwgSU5UIFtMVVQgKyAgNCpTSVpFT0ZfSU5UXQorICAgIG1vdiAgICAgICAgIFQxZCwgSU5UIFtMVVQgKyAxMipTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDQKKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA0CisKKyAgICBtb3YgICAgICAgICBUMGQsIElOVCBbTFVUICsgIDUqU0laRU9GX0lOVF0KKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgMTMqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCA1CisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgNQorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA2KlNJWkVPRl9JTlRdCisgICAgbW92ICAgICAgICAgVDFkLCBJTlQgW0xVVCArIDE0KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNgorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDYKKworICAgIG1vdiAgICAgICAgIFQwZCwgSU5UIFtMVVQgKyAgNypTSVpFT0ZfSU5UXQorICAgIG1vdiAgICAgICAgIFQxZCwgSU5UIFtMVVQgKyAxNSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgwLCB3b3JkIFtCTE9DSyArIFQwICogMl0sIDcKKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA3CislZW5kbWFjcm8KKworJW1hY3JvIExPQUQxNSAwCisgICAgcHhvciAgICAgICAgTjAsIE4wCisgICAgcHhvciAgICAgICAgTjEsIE4xCisgICAgcHhvciAgICAgICAgWDEsIFgxCisKKyAgICBtb3YgICAgICAgICBUMGQsIElOVCBbTFVUICsgIDAqU0laRU9GX0lOVF0KKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDgqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMCAqIDJdLCAwCisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgMAorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAxKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMQorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAyKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMgorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAzKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMworCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA0KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNAorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA1KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNQorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA2KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNgorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA3KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNworCisgICAgY21wICAgICAgICAgTEVORU5ELCAyCisgICAgamwgICAgICAgICAgJSUuRUxPQUQxNQorICAgIG1vdiAgICAgICAgIFQxZCwgSU5UIFtMVVQgKyAgOSpTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDEKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgMworICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgMTAqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAyCisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDQKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDE1CisgICAgbW92ICAgICAgICAgVDFkLCBJTlQgW0xVVCArIDExKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgMworCisgICAgY21wICAgICAgICAgTEVORU5ELCA1CisgICAgamwgICAgICAgICAgJSUuRUxPQUQxNQorICAgIG1vdiAgICAgICAgIFQxZCwgSU5UIFtMVVQgKyAxMipTSVpFT0ZfSU5UXQorICAgIHBpbnNydyAgICAgIFgxLCB3b3JkIFtCTE9DSyArIFQxICogMl0sIDQKKworICAgIGNtcCAgICAgICAgIExFTkVORCwgNgorICAgIGpsICAgICAgICAgICUlLkVMT0FEMTUKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgMTMqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMSwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA1CisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDcKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDE1CisgICAgbW92ICAgICAgICAgVDFkLCBJTlQgW0xVVCArIDE0KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDEsIHdvcmQgW0JMT0NLICsgVDEgKiAyXSwgNgorJSUuRUxPQUQxNToKKyVlbmRtYWNybworCislbWFjcm8gTE9BRDggMAorICAgIHB4b3IgICAgICAgIE4wLCBOMAorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAwKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMAorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAxKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMQorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAyKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMgorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICAzKlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgMworCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA0KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNAorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA1KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNQorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA2KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNgorCisgICAgbW92ICAgICAgICAgVDBkLCBJTlQgW0xVVCArICA3KlNJWkVPRl9JTlRdCisgICAgcGluc3J3ICAgICAgWDAsIHdvcmQgW0JMT0NLICsgVDAgKiAyXSwgNworJWVuZG1hY3JvCisKKyVtYWNybyBMT0FENyAwCisgICAgcHhvciAgICAgICAgTjAsIE4wCisgICAgcHhvciAgICAgICAgWDAsIFgwCisKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDAqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAwCisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDIKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDEqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAxCisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDMKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDIqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAyCisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDQKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDMqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCAzCisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDUKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDQqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA0CisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDYKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDUqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA1CisKKyAgICBjbXAgICAgICAgICBMRU5FTkQsIDcKKyAgICBqbCAgICAgICAgICAlJS5FTE9BRDcKKyAgICBtb3YgICAgICAgICBUMWQsIElOVCBbTFVUICsgIDYqU0laRU9GX0lOVF0KKyAgICBwaW5zcncgICAgICBYMCwgd29yZCBbQkxPQ0sgKyBUMSAqIDJdLCA2CislJS5FTE9BRDc6CislZW5kbWFjcm8KKworJW1hY3JvIFJFRFVDRTAgMAorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1ZBTFVFUyArICggMCoyKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtWQUxVRVMgKyAoIDgqMildCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbVkFMVUVTICsgKDE2KjIpXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW1ZBTFVFUyArICgyNCoyKV0KKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFtWQUxVRVMgKyAoMzIqMildCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbVkFMVUVTICsgKDQwKjIpXQorICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW1ZBTFVFUyArICg0OCoyKV0KKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFtWQUxVRVMgKyAoNTYqMildCisKKyAgICBwY21wZXF3ICAgICB4bW0wLCBaRVJPCisgICAgcGNtcGVxdyAgICAgeG1tMSwgWkVSTworICAgIHBjbXBlcXcgICAgIHhtbTIsIFpFUk8KKyAgICBwY21wZXF3ICAgICB4bW0zLCBaRVJPCisgICAgcGNtcGVxdyAgICAgeG1tNCwgWkVSTworICAgIHBjbXBlcXcgICAgIHhtbTUsIFpFUk8KKyAgICBwY21wZXF3ICAgICB4bW02LCBaRVJPCisgICAgcGNtcGVxdyAgICAgeG1tNywgWkVSTworCisgICAgcGFja3Nzd2IgICAgeG1tMCwgeG1tMQorICAgIHBhY2tzc3diICAgIHhtbTIsIHhtbTMKKyAgICBwYWNrc3N3YiAgICB4bW00LCB4bW01CisgICAgcGFja3Nzd2IgICAgeG1tNiwgeG1tNworCisgICAgcG1vdm1za2IgICAgZWF4LCB4bW0wCisgICAgcG1vdm1za2IgICAgZWN4LCB4bW0yCisgICAgcG1vdm1za2IgICAgZWR4LCB4bW00CisgICAgcG1vdm1za2IgICAgZXNpLCB4bW02CisKKyAgICBzaGwgICAgICAgICByY3gsIDE2CisgICAgc2hsICAgICAgICAgcmR4LCAzMgorICAgIHNobCAgICAgICAgIHJzaSwgNDgKKworICAgIG9yICAgICAgICAgIHJheCwgcmN4CisgICAgb3IgICAgICAgICAgcmR4LCByc2kKKyAgICBvciAgICAgICAgICByYXgsIHJkeAorCisgICAgbm90ICAgICAgICAgcmF4CisKKyAgICBtb3YgICAgICAgICBNTVdPUkQgW3IxNV0sIHJheAorJWVuZG1hY3JvCisKKzsKKzsgUHJlcGFyZSBkYXRhIGZvciBqc2ltZF9lbmNvZGVfbWN1X0FDX2ZpcnN0KCkuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmVfc3NlMihjb25zdCBKQ09FRiAqYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgU2wsIGludCBBbCwgSkNPRUYgKnZhbHVlcywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICp6ZXJvYml0cykKKzsKKzsgcjEwID0gY29uc3QgSkNPRUYgKmJsb2NrCis7IHIxMSA9IGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0Cis7IHIxMiA9IGludCBTbAorOyByMTMgPSBpbnQgQWwKKzsgcjE0ID0gSkNPRUYgKnZhbHVlcworOyByMTUgPSBzaXplX3QgKnplcm9iaXRzCisKKyVkZWZpbmUgWkVSTyAgICB4bW05CislZGVmaW5lIFgwICAgICAgeG1tMAorJWRlZmluZSBYMSAgICAgIHhtbTEKKyVkZWZpbmUgTjAgICAgICB4bW0yCislZGVmaW5lIE4xICAgICAgeG1tMworJWRlZmluZSBBTCAgICAgIHhtbTQKKyVkZWZpbmUgSyAgICAgICBlYXgKKyVkZWZpbmUgTFVUICAgICByMTEKKyVkZWZpbmUgVDAgICAgICByY3gKKyVkZWZpbmUgVDBkICAgICBlY3gKKyVkZWZpbmUgVDEgICAgICByZHgKKyVkZWZpbmUgVDFkICAgICBlZHgKKyVkZWZpbmUgQkxPQ0sgICByMTAKKyVkZWZpbmUgVkFMVUVTICByMTQKKyVkZWZpbmUgTEVOICAgICByMTJkCislZGVmaW5lIExFTkVORCAgcjEzZAorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlX3NzZTIpCisKK0VYVE4oanNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFtyYnAgLSAxNl0KKyAgICBjb2xsZWN0X2FyZ3MgNgorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmJwIC0gMTZdLCBaRVJPCisKKyAgICBtb3ZkICAgICAgICBBTCwgcjEzZAorICAgIHB4b3IgICAgICAgIFpFUk8sIFpFUk8KKyAgICBtb3YgICAgICAgICBLLCBMRU4KKyAgICBtb3YgICAgICAgICBMRU5FTkQsIExFTgorICAgIGFuZCAgICAgICAgIEssIC0xNgorICAgIGFuZCAgICAgICAgIExFTkVORCwgNworICAgIHNociAgICAgICAgIEssIDQKKyAgICBqeiAgICAgICAgICAuRUxPT1AxNgorLkJMT09QMTY6CisgICAgTE9BRDE2CisgICAgcGNtcGd0dyAgICAgTjAsIFgwCisgICAgcGNtcGd0dyAgICAgTjEsIFgxCisgICAgcGFkZHcgICAgICAgWDAsIE4wCisgICAgcGFkZHcgICAgICAgWDEsIE4xCisgICAgcHhvciAgICAgICAgWDAsIE4wCisgICAgcHhvciAgICAgICAgWDEsIE4xCisgICAgcHNybHcgICAgICAgWDAsIEFMCisgICAgcHNybHcgICAgICAgWDEsIEFMCisgICAgcHhvciAgICAgICAgTjAsIFgwCisgICAgcHhvciAgICAgICAgTjEsIFgxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDApICogMl0sIFgwCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDgpICogMl0sIFgxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDAgKyBEQ1RTSVpFMikgKiAyXSwgTjAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoOCArIERDVFNJWkUyKSAqIDJdLCBOMQorICAgIGFkZCAgICAgICAgIFZBTFVFUywgMTYqMgorICAgIGFkZCAgICAgICAgIExVVCwgMTYqU0laRU9GX0lOVAorICAgIGRlYyAgICAgICAgIEsKKyAgICBqbnogICAgICAgICAuQkxPT1AxNgorLkVMT09QMTY6CisgICAgdGVzdCAgICAgICAgTEVOLCA4CisgICAganogICAgICAgICAgLlRSWTcKKyAgICB0ZXN0ICAgICAgICBMRU4sIDcKKyAgICBqeiAgICAgICAgICAuVFJZOAorCisgICAgTE9BRDE1CisgICAgcGNtcGd0dyAgICAgTjAsIFgwCisgICAgcGNtcGd0dyAgICAgTjEsIFgxCisgICAgcGFkZHcgICAgICAgWDAsIE4wCisgICAgcGFkZHcgICAgICAgWDEsIE4xCisgICAgcHhvciAgICAgICAgWDAsIE4wCisgICAgcHhvciAgICAgICAgWDEsIE4xCisgICAgcHNybHcgICAgICAgWDAsIEFMCisgICAgcHNybHcgICAgICAgWDEsIEFMCisgICAgcHhvciAgICAgICAgTjAsIFgwCisgICAgcHhvciAgICAgICAgTjEsIFgxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDApICogMl0sIFgwCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDgpICogMl0sIFgxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgKDAgKyBEQ1RTSVpFMikgKiAyXSwgTjAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoOCArIERDVFNJWkUyKSAqIDJdLCBOMQorICAgIGFkZCAgICAgICAgIFZBTFVFUywgMTYqMgorICAgIGptcCAgICAgICAgIC5QQURESU5HCisuVFJZODoKKyAgICBMT0FEOAorICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIHB4b3IgICAgICAgIE4wLCBYMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwICsgRENUU0laRTIpICogMl0sIE4wCisgICAgYWRkICAgICAgICAgVkFMVUVTLCA4KjIKKyAgICBqbXAgICAgICAgICAuUEFERElORworLlRSWTc6CisgICAgTE9BRDcKKyAgICBwY21wZ3R3ICAgICBOMCwgWDAKKyAgICBwYWRkdyAgICAgICBYMCwgTjAKKyAgICBweG9yICAgICAgICBYMCwgTjAKKyAgICBwc3JsdyAgICAgICBYMCwgQUwKKyAgICBweG9yICAgICAgICBOMCwgWDAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoMCkgKiAyXSwgWDAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoMCArIERDVFNJWkUyKSAqIDJdLCBOMAorICAgIGFkZCAgICAgICAgIFZBTFVFUywgOCoyCisuUEFERElORzoKKyAgICBtb3YgICAgICAgICBLLCBMRU4KKyAgICBhZGQgICAgICAgICBLLCA3CisgICAgYW5kICAgICAgICAgSywgLTgKKyAgICBzaHIgICAgICAgICBLLCAzCisgICAgc3ViICAgICAgICAgSywgRENUU0laRTIvOAorICAgIGp6ICAgICAgICAgIC5FUEFERElORworICAgIGFsaWduICAgICAgIDE2CisuWkVST0xPT1A6CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbVkFMVUVTICsgMF0sIFpFUk8KKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDgqMgorICAgIGluYyAgICAgICAgIEsKKyAgICBqbnogICAgICAgICAuWkVST0xPT1AKKy5FUEFERElORzoKKyAgICBzdWIgICAgICAgICBWQUxVRVMsIERDVFNJWkUyKjIKKworICAgIFJFRFVDRTAKKworICAgIG1vdmRxYSAgICAgIFpFUk8sIFhNTVdPUkQgW3JicCAtIDE2XQorICAgIHVuY29sbGVjdF9hcmdzIDYKKyAgICBtb3YgICAgICAgICByc3AsIHJicCAgICAgICAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgIHBvcCAgICAgICAgIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCisldW5kZWYgWkVSTworJXVuZGVmIFgwCisldW5kZWYgWDEKKyV1bmRlZiBOMAorJXVuZGVmIE4xCisldW5kZWYgQUwKKyV1bmRlZiBLCisldW5kZWYgTFVUCisldW5kZWYgVDAKKyV1bmRlZiBUMGQKKyV1bmRlZiBUMQorJXVuZGVmIFQxZAorJXVuZGVmIEJMT0NLCisldW5kZWYgVkFMVUVTCisldW5kZWYgTEVOCisldW5kZWYgTEVORU5ECisKKzsKKzsgUHJlcGFyZSBkYXRhIGZvciBqc2ltZF9lbmNvZGVfbWN1X0FDX3JlZmluZSgpLgorOworOyBHTE9CQUwoaW50KQorOyBqc2ltZF9lbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlX3NzZTIoY29uc3QgSkNPRUYgKmJsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpqcGVnX25hdHVyYWxfb3JkZXJfc3RhcnQsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgU2wsIGludCBBbCwgSkNPRUYgKmFic3ZhbHVlcywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYml0cykKKzsKKzsgcjEwID0gY29uc3QgSkNPRUYgKmJsb2NrCis7IHIxMSA9IGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0Cis7IHIxMiA9IGludCBTbAorOyByMTMgPSBpbnQgQWwKKzsgcjE0ID0gSkNPRUYgKnZhbHVlcworOyByMTUgPSBzaXplX3QgKmJpdHMKKworJWRlZmluZSBaRVJPICAgIHhtbTkKKyVkZWZpbmUgT05FICAgICB4bW01CislZGVmaW5lIFgwICAgICAgeG1tMAorJWRlZmluZSBYMSAgICAgIHhtbTEKKyVkZWZpbmUgTjAgICAgICB4bW0yCislZGVmaW5lIE4xICAgICAgeG1tMworJWRlZmluZSBBTCAgICAgIHhtbTQKKyVkZWZpbmUgSyAgICAgICBlYXgKKyVkZWZpbmUgS0sgICAgICByOWQKKyVkZWZpbmUgRU9CICAgICByOGQKKyVkZWZpbmUgU0lHTiAgICByZGkKKyVkZWZpbmUgTFVUICAgICByMTEKKyVkZWZpbmUgVDAgICAgICByY3gKKyVkZWZpbmUgVDBkICAgICBlY3gKKyVkZWZpbmUgVDEgICAgICByZHgKKyVkZWZpbmUgVDFkICAgICBlZHgKKyVkZWZpbmUgQkxPQ0sgICByMTAKKyVkZWZpbmUgVkFMVUVTICByMTQKKyVkZWZpbmUgTEVOICAgICByMTJkCislZGVmaW5lIExFTkVORCAgcjEzZAorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZV9zc2UyKQorCitFWFROKGpzaW1kX2VuY29kZV9tY3VfQUNfcmVmaW5lX3ByZXBhcmVfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3JicCAtIDE2XQorICAgIGNvbGxlY3RfYXJncyA2CisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyYnAgLSAxNl0sIFpFUk8KKworICAgIHhvciAgICAgICAgIFNJR04sIFNJR04KKyAgICB4b3IgICAgICAgICBFT0IsIEVPQgorICAgIHhvciAgICAgICAgIEtLLCBLSworICAgIG1vdmQgICAgICAgIEFMLCByMTNkCisgICAgcHhvciAgICAgICAgWkVSTywgWkVSTworICAgIHBjbXBlcXcgICAgIE9ORSwgT05FCisgICAgcHNybHcgICAgICAgT05FLCAxNQorICAgIG1vdiAgICAgICAgIEssIExFTgorICAgIG1vdiAgICAgICAgIExFTkVORCwgTEVOCisgICAgYW5kICAgICAgICAgSywgLTE2CisgICAgYW5kICAgICAgICAgTEVORU5ELCA3CisgICAgc2hyICAgICAgICAgSywgNAorICAgIGp6ICAgICAgICAgIC5FTE9PUFIxNgorLkJMT09QUjE2OgorICAgIExPQUQxNgorICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBjbXBndHcgICAgIE4xLCBYMQorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHBhZGR3ICAgICAgIFgxLCBOMQorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgxLCBOMQorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIHBzcmx3ICAgICAgIFgxLCBBTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICg4KSAqIDJdLCBYMQorICAgIHBjbXBlcXcgICAgIFgwLCBPTkUKKyAgICBwY21wZXF3ICAgICBYMSwgT05FCisgICAgcGFja3Nzd2IgICAgTjAsIE4xCisgICAgcGFja3Nzd2IgICAgWDAsIFgxCisgICAgcG1vdm1za2IgICAgVDBkLCBOMCAgICAgICAgICAgICAgICAgOyBsc2lnbmJpdHMudmFsMTZ1W2s+PjRdID0gX21tX21vdmVtYXNrX2VwaTgobmVnKTsKKyAgICBwbW92bXNrYiAgICBUMWQsIFgwICAgICAgICAgICAgICAgICA7IGlkeCA9IF9tbV9tb3ZlbWFza19lcGk4KHgxKTsKKyAgICBzaHIgICAgICAgICBTSUdOLCAxNiAgICAgICAgICAgICAgICA7IG1ha2Ugcm9vbSBmb3Igc2l6ZWJpdHMKKyAgICBzaGwgICAgICAgICBUMCwgNDgKKyAgICBvciAgICAgICAgICBTSUdOLCBUMAorICAgIGJzciAgICAgICAgIFQxZCwgVDFkICAgICAgICAgICAgICAgIDsgIGlkeCA9IDE2IC0gKF9fYnVpbHRpbl9jbHooaWR4KT4+MSk7CisgICAganogICAgICAgICAgLkNPTlRJTlVFUjE2ICAgICAgICAgICAgOyBpZiAoaWR4KSB7CisgICAgbW92ICAgICAgICAgRU9CLCBLSworICAgIGFkZCAgICAgICAgIEVPQiwgVDFkICAgICAgICAgICAgICAgIDsgRU9CID0gayArIGlkeDsKKy5DT05USU5VRVIxNjoKKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDE2KjIKKyAgICBhZGQgICAgICAgICBMVVQsIDE2KlNJWkVPRl9JTlQKKyAgICBhZGQgICAgICAgICBLSywgMTYKKyAgICBkZWMgICAgICAgICBLCisgICAgam56ICAgICAgICAgLkJMT09QUjE2CisuRUxPT1BSMTY6CisgICAgdGVzdCAgICAgICAgTEVOLCA4CisgICAganogICAgICAgICAgLlRSWVI3CisgICAgdGVzdCAgICAgICAgTEVOLCA3CisgICAganogICAgICAgICAgLlRSWVI4CisKKyAgICBMT0FEMTUKKyAgICBwY21wZ3R3ICAgICBOMCwgWDAKKyAgICBwY21wZ3R3ICAgICBOMSwgWDEKKyAgICBwYWRkdyAgICAgICBYMCwgTjAKKyAgICBwYWRkdyAgICAgICBYMSwgTjEKKyAgICBweG9yICAgICAgICBYMCwgTjAKKyAgICBweG9yICAgICAgICBYMSwgTjEKKyAgICBwc3JsdyAgICAgICBYMCwgQUwKKyAgICBwc3JsdyAgICAgICBYMSwgQUwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoMCkgKiAyXSwgWDAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAoOCkgKiAyXSwgWDEKKyAgICBwY21wZXF3ICAgICBYMCwgT05FCisgICAgcGNtcGVxdyAgICAgWDEsIE9ORQorICAgIHBhY2tzc3diICAgIE4wLCBOMQorICAgIHBhY2tzc3diICAgIFgwLCBYMQorICAgIHBtb3Ztc2tiICAgIFQwZCwgTjAgICAgICAgICAgICAgICAgIDsgbHNpZ25iaXRzLnZhbDE2dVtrPj40XSA9IF9tbV9tb3ZlbWFza19lcGk4KG5lZyk7CisgICAgcG1vdm1za2IgICAgVDFkLCBYMCAgICAgICAgICAgICAgICAgOyBpZHggPSBfbW1fbW92ZW1hc2tfZXBpOCh4MSk7CisgICAgc2hyICAgICAgICAgU0lHTiwgMTYgICAgICAgICAgICAgICAgOyBtYWtlIHJvb20gZm9yIHNpemViaXRzCisgICAgc2hsICAgICAgICAgVDAsIDQ4CisgICAgb3IgICAgICAgICAgU0lHTiwgVDAKKyAgICBic3IgICAgICAgICBUMWQsIFQxZCAgICAgICAgICAgICAgICA7ICBpZHggPSAxNiAtIChfX2J1aWx0aW5fY2x6KGlkeCk+PjEpOworICAgIGp6ICAgICAgICAgIC5DT05USU5VRVIxNSAgICAgICAgICAgIDsgaWYgKGlkeCkgeworICAgIG1vdiAgICAgICAgIEVPQiwgS0sKKyAgICBhZGQgICAgICAgICBFT0IsIFQxZCAgICAgICAgICAgICAgICA7IEVPQiA9IGsgKyBpZHg7CisuQ09OVElOVUVSMTU6CisgICAgYWRkICAgICAgICAgVkFMVUVTLCAxNioyCisgICAgam1wICAgICAgICAgLlBBRERJTkdSCisuVFJZUjg6CisgICAgTE9BRDgKKworICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIHBjbXBlcXcgICAgIFgwLCBPTkUKKyAgICBwYWNrc3N3YiAgICBOMCwgWkVSTworICAgIHBhY2tzc3diICAgIFgwLCBaRVJPCisgICAgcG1vdm1za2IgICAgVDBkLCBOMCAgICAgICAgICAgICAgICAgOyBsc2lnbmJpdHMudmFsMTZ1W2s+PjRdID0gX21tX21vdmVtYXNrX2VwaTgobmVnKTsKKyAgICBwbW92bXNrYiAgICBUMWQsIFgwICAgICAgICAgICAgICAgICA7IGlkeCA9IF9tbV9tb3ZlbWFza19lcGk4KHgxKTsKKyAgICBzaHIgICAgICAgICBTSUdOLCA4ICAgICAgICAgICAgICAgICA7IG1ha2Ugcm9vbSBmb3Igc2l6ZWJpdHMKKyAgICBzaGwgICAgICAgICBUMCwgNTYKKyAgICBvciAgICAgICAgICBTSUdOLCBUMAorICAgIGJzciAgICAgICAgIFQxZCwgVDFkICAgICAgICAgICAgICAgIDsgIGlkeCA9IDE2IC0gKF9fYnVpbHRpbl9jbHooaWR4KT4+MSk7CisgICAganogICAgICAgICAgLkNPTlRJTlVFUjggICAgICAgICAgICAgOyBpZiAoaWR4KSB7CisgICAgbW92ICAgICAgICAgRU9CLCBLSworICAgIGFkZCAgICAgICAgIEVPQiwgVDFkICAgICAgICAgICAgICAgIDsgRU9CID0gayArIGlkeDsKKy5DT05USU5VRVI4OgorICAgIGFkZCAgICAgICAgIFZBTFVFUywgOCoyCisgICAgam1wICAgICAgICAgLlBBRERJTkdSCisuVFJZUjc6CisgICAgTE9BRDcKKworICAgIHBjbXBndHcgICAgIE4wLCBYMAorICAgIHBhZGR3ICAgICAgIFgwLCBOMAorICAgIHB4b3IgICAgICAgIFgwLCBOMAorICAgIHBzcmx3ICAgICAgIFgwLCBBTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1ZBTFVFUyArICgwKSAqIDJdLCBYMAorICAgIHBjbXBlcXcgICAgIFgwLCBPTkUKKyAgICBwYWNrc3N3YiAgICBOMCwgWkVSTworICAgIHBhY2tzc3diICAgIFgwLCBaRVJPCisgICAgcG1vdm1za2IgICAgVDBkLCBOMCAgICAgICAgICAgICAgICAgOyBsc2lnbmJpdHMudmFsMTZ1W2s+PjRdID0gX21tX21vdmVtYXNrX2VwaTgobmVnKTsKKyAgICBwbW92bXNrYiAgICBUMWQsIFgwICAgICAgICAgICAgICAgICA7IGlkeCA9IF9tbV9tb3ZlbWFza19lcGk4KHgxKTsKKyAgICBzaHIgICAgICAgICBTSUdOLCA4ICAgICAgICAgICAgICAgICA7IG1ha2Ugcm9vbSBmb3Igc2l6ZWJpdHMKKyAgICBzaGwgICAgICAgICBUMCwgNTYKKyAgICBvciAgICAgICAgICBTSUdOLCBUMAorICAgIGJzciAgICAgICAgIFQxZCwgVDFkICAgICAgICAgICAgICAgIDsgaWR4ID0gMTYgLSAoX19idWlsdGluX2NseihpZHgpPj4xKTsKKyAgICBqeiAgICAgICAgICAuQ09OVElOVUVSNyAgICAgICAgICAgICA7IGlmIChpZHgpIHsKKyAgICBtb3YgICAgICAgICBFT0IsIEtLCisgICAgYWRkICAgICAgICAgRU9CLCBUMWQgICAgICAgICAgICAgICAgOyBFT0IgPSBrICsgaWR4OworLkNPTlRJTlVFUjc6CisgICAgYWRkICAgICAgICAgVkFMVUVTLCA4KjIKKy5QQURESU5HUjoKKyAgICBtb3YgICAgICAgICBLLCBMRU4KKyAgICBhZGQgICAgICAgICBLLCA3CisgICAgYW5kICAgICAgICAgSywgLTgKKyAgICBzaHIgICAgICAgICBLLCAzCisgICAgc3ViICAgICAgICAgSywgRENUU0laRTIvOAorICAgIGp6ICAgICAgICAgIC5FUEFERElOR1IKKyAgICBhbGlnbiAgICAgICAxNgorLlpFUk9MT09QUjoKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtWQUxVRVMgKyAwXSwgWkVSTworICAgIHNociAgICAgICAgIFNJR04sIDgKKyAgICBhZGQgICAgICAgICBWQUxVRVMsIDgqMgorICAgIGluYyAgICAgICAgIEsKKyAgICBqbnogICAgICAgICAuWkVST0xPT1BSCisuRVBBRERJTkdSOgorICAgIG5vdCAgICAgICAgIFNJR04KKyAgICBzdWIgICAgICAgICBWQUxVRVMsIERDVFNJWkUyKjIKKyAgICBtb3YgICAgICAgICBNTVdPUkQgW3IxNStTSVpFT0ZfTU1XT1JEXSwgU0lHTgorCisgICAgUkVEVUNFMAorCisgICAgbW92ICAgICAgICAgZWF4LCBFT0IKKyAgICBtb3ZkcWEgICAgICBaRVJPLCBYTU1XT1JEIFtyYnAgLSAxNl0KKyAgICB1bmNvbGxlY3RfYXJncyA2CisgICAgbW92ICAgICAgICAgcnNwLCByYnAgICAgICAgICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICBwb3AgICAgICAgICByc3AgICAgICAgICAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworJXVuZGVmIFpFUk8KKyV1bmRlZiBPTkUKKyV1bmRlZiBYMAorJXVuZGVmIFgxCisldW5kZWYgTjAKKyV1bmRlZiBOMQorJXVuZGVmIEFMCisldW5kZWYgSworJXVuZGVmIEtLCisldW5kZWYgRU9CCisldW5kZWYgU0lHTgorJXVuZGVmIExVVAorJXVuZGVmIFQwCisldW5kZWYgVDBkCisldW5kZWYgVDEKKyV1bmRlZiBUMWQKKyV1bmRlZiBCTE9DSworJXVuZGVmIFZBTFVFUworJXVuZGVmIExFTgorJXVuZGVmIExFTkVORAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY3NhbXBsZS1hdngyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pjc2FtcGxlLWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNWE4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY3NhbXBsZS1hdngyLmFzbQpAQCAtMCwwICsxLDM2OCBAQAorOworOyBqY3NhbXBsZS5hc20gLSBkb3duc2FtcGxpbmcgKDY0LWJpdCBBVlgyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgNjQKKzsKKzsgRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorOyBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfYXZ4MihKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKzsgcjExID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMmQgPSBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKzsgcjEzZCA9IEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzCis7IHIxNCA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorOyByMTUgPSBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfYXZ4MikKKworRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyA2CisKKyAgICBtb3YgICAgICAgICBlY3gsIHIxM2QKKyAgICBzaGwgICAgICAgICByY3gsIDMgICAgICAgICAgICAgICAgICA7IGltdWwgcmN4LERDVFNJWkUgKHJjeCA9IG91dHB1dF9jb2xzKQorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCByMTBkCisKKyAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKyAgICBwdXNoICAgICAgICByY3gKKyAgICBzaGwgICAgICAgICByY3gsIDEgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgIHN1YiAgICAgICAgIHJjeCwgcmR4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIG1vdiAgICAgICAgIHJheCwgcjExCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgY2xkCisgICAgbW92ICAgICAgICAgcnNpLCByMTQgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisuZXhwYW5kbG9vcDoKKyAgICBwdXNoICAgICAgICByYXgKKyAgICBwdXNoICAgICAgICByY3gKKworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JzaV0KKyAgICBhZGQgICAgICAgICByZGksIHJkeAorICAgIG1vdiAgICAgICAgIGFsLCBKU0FNUExFIFtyZGktMV0KKworICAgIHJlcCBzdG9zYgorCisgICAgcG9wICAgICAgICAgcmN4CisgICAgcG9wICAgICAgICAgcmF4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgcmF4CisgICAgamcgICAgICAgICAgc2hvcnQgLmV4cGFuZGxvb3AKKworLmV4cGFuZF9lbmQ6CisgICAgcG9wICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scworCisgICAgOyAtLSBoMnYxX2Rvd25zYW1wbGUKKworICAgIG1vdiAgICAgICAgIGVheCwgcjEyZCAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgZWF4LCBlYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIHJkeCwgMHgwMDAxMDAwMCAgICAgICAgIDsgYmlhcyBwYXR0ZXJuCisgICAgdm1vdmQgICAgICAgeG1tNywgZWR4CisgICAgdnBzaHVmZCAgICAgeG1tNywgeG1tNywgMHgwMCAgICAgICAgOyB4bW03PXswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfQorICAgIHZwZXJtMmkxMjggIHltbTcsIHltbTcsIHltbTcsIDAgICAgIDsgeW1tNz17eG1tNywgeG1tN30KKyAgICB2cGNtcGVxdyAgICB5bW02LCB5bW02LCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tNiwgeW1tNiwgQllURV9CSVQgICAgOyB5bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisgICAgbW92ICAgICAgICAgcnNpLCByMTQgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgcmRpLCByMTUgICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmN4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcnNpCisKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyc2ldICAgICA7IGlucHRyCisgICAgbW92ICAgICAgICAgcmRpLCBKU0FNUFJPVyBbcmRpXSAgICAgOyBvdXRwdHIKKworICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphZSAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisKKy5jb2x1bW5sb29wX3IyNDoKKyAgICA7IHJjeCBjYW4gcG9zc2libHkgYmUgOCwgMTYsIDI0CisgICAgY21wICAgICAgICAgcmN4LCAyNAorICAgIGpuZSAgICAgICAgIC5jb2x1bW5sb29wX3IxNgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHhtbTEsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIG1vdiAgICAgICAgIHJjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcF9yMTY6CisgICAgY21wICAgICAgICAgcmN4LCAxNgorICAgIGpuZSAgICAgICAgIC5jb2x1bW5sb29wX3I4CisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdnB4b3IgICAgICAgeW1tMSwgeW1tMSwgeW1tMQorICAgIG1vdiAgICAgICAgIHJjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcF9yODoKKyAgICB2bW92ZHF1ICAgICB4bW0wLCBYTU1XT1JEW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZweG9yICAgICAgIHltbTEsIHltbTEsIHltbTEKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9ZTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmRvd25zYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbcnNpKzEqU0laRU9GX1lNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorICAgIHZwc3JsdyAgICAgIHltbTIsIHltbTAsIEJZVEVfQklUCisgICAgdnBhbmQgICAgICAgeW1tMCwgeW1tMCwgeW1tNgorICAgIHZwc3JsdyAgICAgIHltbTMsIHltbTEsIEJZVEVfQklUCisgICAgdnBhbmQgICAgICAgeW1tMSwgeW1tMSwgeW1tNgorCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tMgorICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTEsIHltbTMKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tNworICAgIHZwc3JsdyAgICAgIHltbTAsIHltbTAsIDEKKyAgICB2cHNybHcgICAgICB5bW0xLCB5bW0xLCAxCisKKyAgICB2cGFja3Vzd2IgICB5bW0wLCB5bW0wLCB5bW0xCisgICAgdnBlcm1xICAgICAgeW1tMCwgeW1tMCwgMHhkOAorCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW0wCisKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgOyBvdXRjb2wKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAxKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphZSAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wX3IyNAorCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmN4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdnplcm91cHBlcgorICAgIHVuY29sbGVjdF9hcmdzIDYKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCis7IHdpdGhvdXQgc21vb3RoaW5nLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9kb3duc2FtcGxlX2F2eDIoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworOworCis7IHIxMGQgPSBKRElNRU5TSU9OIGltYWdlX3dpZHRoCis7IHIxMSA9IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorOyByMTJkID0gSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCis7IHIxM2QgPSBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcworOyByMTQgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjE1ID0gSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2Ml9kb3duc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2Ml9kb3duc2FtcGxlX2F2eDIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AKKyAgICBjb2xsZWN0X2FyZ3MgNgorCisgICAgbW92ICAgICAgICAgZWN4LCByMTNkCisgICAgc2hsICAgICAgICAgcmN4LCAzICAgICAgICAgICAgICAgICAgOyBpbXVsIHJjeCxEQ1RTSVpFIChyY3ggPSBvdXRwdXRfY29scykKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgcjEwZAorCisgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorCisgICAgcHVzaCAgICAgICAgcmN4CisgICAgc2hsICAgICAgICAgcmN4LCAxICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICBzdWIgICAgICAgICByY3gsIHJkeAorICAgIGpsZSAgICAgICAgIHNob3J0IC5leHBhbmRfZW5kCisKKyAgICBtb3YgICAgICAgICByYXgsIHIxMQorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIGNsZAorICAgIG1vdiAgICAgICAgIHJzaSwgcjE0ICAgICAgICAgICAgICAgIDsgaW5wdXRfZGF0YQorLmV4cGFuZGxvb3A6CisgICAgcHVzaCAgICAgICAgcmF4CisgICAgcHVzaCAgICAgICAgcmN4CisKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyc2ldCisgICAgYWRkICAgICAgICAgcmRpLCByZHgKKyAgICBtb3YgICAgICAgICBhbCwgSlNBTVBMRSBbcmRpLTFdCisKKyAgICByZXAgc3Rvc2IKKworICAgIHBvcCAgICAgICAgIHJjeAorICAgIHBvcCAgICAgICAgIHJheAorCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIHJheAorICAgIGpnICAgICAgICAgIHNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorICAgIHBvcCAgICAgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKKworICAgIDsgLS0gaDJ2Ml9kb3duc2FtcGxlCisKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMmQgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAgamxlICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByZHgsIDB4MDAwMjAwMDEgICAgICAgICA7IGJpYXMgcGF0dGVybgorICAgIHZtb3ZkICAgICAgIHhtbTcsIGVkeAorICAgIHZwY21wZXF3ICAgIHltbTYsIHltbTYsIHltbTYKKyAgICB2cHNodWZkICAgICB4bW03LCB4bW03LCAweDAwICAgICAgICA7IHltbTc9ezEsIDIsIDEsIDIsIDEsIDIsIDEsIDJ9CisgICAgdnBlcm0yaTEyOCAgeW1tNywgeW1tNywgeW1tNywgMAorICAgIHZwc3JsdyAgICAgIHltbTYsIHltbTYsIEJZVEVfQklUICAgIDsgeW1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworICAgIG1vdiAgICAgICAgIHJzaSwgcjE0ICAgICAgICAgICAgICAgIDsgaW5wdXRfZGF0YQorICAgIG1vdiAgICAgICAgIHJkaSwgcjE1ICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIHJjeAorICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJzaQorCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjAKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMQorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgICAgICAgICAgICAgICAgIDsgb3V0cHRyCisKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9yMjQ6CisgICAgY21wICAgICAgICAgcmN4LCAyNAorICAgIGpuZSAgICAgICAgIC5jb2x1bW5sb29wX3IxNgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW3JkeCswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHltbTEsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHhtbTIsIFhNTVdPUkQgW3JkeCsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZtb3ZkcXUgICAgIHhtbTMsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIG1vdiAgICAgICAgIHJjeCwgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcF9yMTY6CisgICAgY21wICAgICAgICAgcmN4LCAxNgorICAgIGpuZSAgICAgICAgIC5jb2x1bW5sb29wX3I4CisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbcmR4KzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdnB4b3IgICAgICAgeW1tMiwgeW1tMiwgeW1tMgorICAgIHZweG9yICAgICAgIHltbTMsIHltbTMsIHltbTMKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9ZTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmRvd25zYW1wbGUKKworLmNvbHVtbmxvb3Bfcjg6CisgICAgdm1vdmRxdSAgICAgeG1tMCwgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeG1tMSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgdnB4b3IgICAgICAgeW1tMiwgeW1tMiwgeW1tMgorICAgIHZweG9yICAgICAgIHltbTMsIHltbTMsIHltbTMKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9ZTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmRvd25zYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbcmR4KzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tMSwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tMiwgWU1NV09SRCBbcmR4KzEqU0laRU9GX1lNTVdPUkRdCisgICAgdm1vdmRxdSAgICAgeW1tMywgWU1NV09SRCBbcnNpKzEqU0laRU9GX1lNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorICAgIHZwYW5kICAgICAgIHltbTQsIHltbTAsIHltbTYKKyAgICB2cHNybHcgICAgICB5bW0wLCB5bW0wLCBCWVRFX0JJVAorICAgIHZwYW5kICAgICAgIHltbTUsIHltbTEsIHltbTYKKyAgICB2cHNybHcgICAgICB5bW0xLCB5bW0xLCBCWVRFX0JJVAorICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTQKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW01CisKKyAgICB2cGFuZCAgICAgICB5bW00LCB5bW0yLCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tMiwgeW1tMiwgQllURV9CSVQKKyAgICB2cGFuZCAgICAgICB5bW01LCB5bW0zLCB5bW02CisgICAgdnBzcmx3ICAgICAgeW1tMywgeW1tMywgQllURV9CSVQKKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW0yLCB5bW00CisgICAgdnBhZGR3ICAgICAgeW1tMywgeW1tMywgeW1tNQorCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tMQorICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTMKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tNworICAgIHZwc3JsdyAgICAgIHltbTAsIHltbTAsIDIKKyAgICB2cHNybHcgICAgICB5bW0yLCB5bW0yLCAyCisKKyAgICB2cGFja3Vzd2IgICB5bW0wLCB5bW0wLCB5bW0yCisgICAgdnBlcm1xICAgICAgeW1tMCwgeW1tMCwgMHhkOAorCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW0wCisKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgOyBvdXRjb2wKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgMSpTSVpFT0ZfWU1NV09SRCAgOyBvdXRwdHIKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYWUgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wX3IyNAorCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmN4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdnplcm91cHBlcgorICAgIHVuY29sbGVjdF9hcmdzIDYKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNzYW1wbGUtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qY3NhbXBsZS1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjMxNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamNzYW1wbGUtc3NlMi5hc20KQEAgLTAsMCArMSwzMzEgQEAKKzsKKzsgamNzYW1wbGUuYXNtIC0gZG93bnNhbXBsaW5nICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwsCis7IHdpdGhvdXQgc21vb3RoaW5nLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzLCBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworOworCis7IHIxMGQgPSBKRElNRU5TSU9OIGltYWdlX3dpZHRoCis7IHIxMSA9IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorOyByMTJkID0gSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCis7IHIxM2QgPSBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcworOyByMTQgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjE1ID0gSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AKKyAgICBjb2xsZWN0X2FyZ3MgNgorCisgICAgbW92ICAgICAgICAgZWN4LCByMTNkCisgICAgc2hsICAgICAgICAgcmN4LCAzICAgICAgICAgICAgICAgICAgOyBpbXVsIHJjeCxEQ1RTSVpFIChyY3ggPSBvdXRwdXRfY29scykKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIGVkeCwgcjEwZAorCisgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorCisgICAgcHVzaCAgICAgICAgcmN4CisgICAgc2hsICAgICAgICAgcmN4LCAxICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICBzdWIgICAgICAgICByY3gsIHJkeAorICAgIGpsZSAgICAgICAgIHNob3J0IC5leHBhbmRfZW5kCisKKyAgICBtb3YgICAgICAgICByYXgsIHIxMQorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIGNsZAorICAgIG1vdiAgICAgICAgIHJzaSwgcjE0ICAgICAgICAgICAgICAgIDsgaW5wdXRfZGF0YQorLmV4cGFuZGxvb3A6CisgICAgcHVzaCAgICAgICAgcmF4CisgICAgcHVzaCAgICAgICAgcmN4CisKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyc2ldCisgICAgYWRkICAgICAgICAgcmRpLCByZHgKKyAgICBtb3YgICAgICAgICBhbCwgSlNBTVBMRSBbcmRpLTFdCisKKyAgICByZXAgc3Rvc2IKKworICAgIHBvcCAgICAgICAgIHJjeAorICAgIHBvcCAgICAgICAgIHJheAorCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGRlYyAgICAgICAgIHJheAorICAgIGpnICAgICAgICAgIHNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorICAgIHBvcCAgICAgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKKworICAgIDsgLS0gaDJ2MV9kb3duc2FtcGxlCisKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMmQgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgamxlICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByZHgsIDB4MDAwMTAwMDAgICAgICAgICA7IGJpYXMgcGF0dGVybgorICAgIG1vdmQgICAgICAgIHhtbTcsIGVkeAorICAgIHBjbXBlcXcgICAgIHhtbTYsIHhtbTYKKyAgICBwc2h1ZmQgICAgICB4bW03LCB4bW03LCAweDAwICAgICAgICA7IHhtbTc9ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9CisgICAgcHNybHcgICAgICAgeG1tNiwgQllURV9CSVQgICAgICAgICAgOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisgICAgbW92ICAgICAgICAgcnNpLCByMTQgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgcmRpLCByMTUgICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmN4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcnNpCisKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyc2ldICAgICA7IGlucHRyCisgICAgbW92ICAgICAgICAgcmRpLCBKU0FNUFJPVyBbcmRpXSAgICAgOyBvdXRwdHIKKworICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisKKy5jb2x1bW5sb29wX3I4OgorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTEKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9YTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmRvd25zYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTAKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0xCisKKyAgICBwYW5kICAgICAgICB4bW0wLCB4bW02CisgICAgcHNybHcgICAgICAgeG1tMiwgQllURV9CSVQKKyAgICBwYW5kICAgICAgICB4bW0xLCB4bW02CisgICAgcHNybHcgICAgICAgeG1tMywgQllURV9CSVQKKworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTIKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTcKKyAgICBwc3JsdyAgICAgICB4bW0wLCAxCisgICAgcHNybHcgICAgICAgeG1tMSwgMQorCisgICAgcGFja3Vzd2IgICAgeG1tMCwgeG1tMQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRjb2wKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphZSAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1ubG9vcF9yOAorCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmN4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdW5jb2xsZWN0X2FyZ3MgNgorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHN0YW5kYXJkIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMihKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKzsgcjExID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMmQgPSBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKzsgcjEzZCA9IEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzCis7IHIxNCA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorOyByMTUgPSBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyA2CisKKyAgICBtb3YgICAgICAgICBlY3gsIHIxM2QKKyAgICBzaGwgICAgICAgICByY3gsIDMgICAgICAgICAgICAgICAgICA7IGltdWwgcmN4LERDVFNJWkUgKHJjeCA9IG91dHB1dF9jb2xzKQorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgZWR4LCByMTBkCisKKyAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKyAgICBwdXNoICAgICAgICByY3gKKyAgICBzaGwgICAgICAgICByY3gsIDEgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgIHN1YiAgICAgICAgIHJjeCwgcmR4CisgICAgamxlICAgICAgICAgc2hvcnQgLmV4cGFuZF9lbmQKKworICAgIG1vdiAgICAgICAgIHJheCwgcjExCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbGUgICAgICAgICBzaG9ydCAuZXhwYW5kX2VuZAorCisgICAgY2xkCisgICAgbW92ICAgICAgICAgcnNpLCByMTQgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisuZXhwYW5kbG9vcDoKKyAgICBwdXNoICAgICAgICByYXgKKyAgICBwdXNoICAgICAgICByY3gKKworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JzaV0KKyAgICBhZGQgICAgICAgICByZGksIHJkeAorICAgIG1vdiAgICAgICAgIGFsLCBKU0FNUExFIFtyZGktMV0KKworICAgIHJlcCBzdG9zYgorCisgICAgcG9wICAgICAgICAgcmN4CisgICAgcG9wICAgICAgICAgcmF4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgcmF4CisgICAgamcgICAgICAgICAgc2hvcnQgLmV4cGFuZGxvb3AKKworLmV4cGFuZF9lbmQ6CisgICAgcG9wICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scworCisgICAgOyAtLSBoMnYyX2Rvd25zYW1wbGUKKworICAgIG1vdiAgICAgICAgIGVheCwgcjEyZCAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbGUgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIHJkeCwgMHgwMDAyMDAwMSAgICAgICAgIDsgYmlhcyBwYXR0ZXJuCisgICAgbW92ZCAgICAgICAgeG1tNywgZWR4CisgICAgcGNtcGVxdyAgICAgeG1tNiwgeG1tNgorICAgIHBzaHVmZCAgICAgIHhtbTcsIHhtbTcsIDB4MDAgICAgICAgIDsgeG1tNz17MSwgMiwgMSwgMiwgMSwgMiwgMSwgMn0KKyAgICBwc3JsdyAgICAgICB4bW02LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKyAgICBtb3YgICAgICAgICByc2ksIHIxNCAgICAgICAgICAgICAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICByZGksIHIxNSAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICByY3gKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByc2kKKworICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIwCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpKzEqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjEKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgorCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamFlICAgICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKworLmNvbHVtbmxvb3Bfcjg6CisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgcHhvciAgICAgICAgeG1tMiwgeG1tMgorICAgIHB4b3IgICAgICAgIHhtbTMsIHhtbTMKKyAgICBtb3YgICAgICAgICByY3gsIFNJWkVPRl9YTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmRvd25zYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xCisgICAgcGFuZCAgICAgICAgeG1tMCwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTQsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgeG1tMSwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTUsIEJZVEVfQklUCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNAorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTUKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0zCisgICAgcGFuZCAgICAgICAgeG1tMiwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTQsIEJZVEVfQklUCisgICAgcGFuZCAgICAgICAgeG1tMywgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTUsIEJZVEVfQklUCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNAorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUKKworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTEKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTcKKyAgICBwc3JsdyAgICAgICB4bW0wLCAyCisgICAgcHNybHcgICAgICAgeG1tMiwgMgorCisgICAgcGFja3Vzd2IgICAgeG1tMCwgeG1tMgorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRjb2wKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYWUgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wX3I4CisKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKyAgICBwb3AgICAgICAgICByY3gKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICB1bmNvbGxlY3RfYXJncyA2CisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkY29sZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamRjb2xleHQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiOTZjNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkY29sZXh0LWF2eDIuYXNtCkBAIC0wLDAgKzEsNDk3IEBACis7Cis7IGpkY29sZXh0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoNjQtYml0IEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5LCAyMDEyIFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7IENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gb3V0X3dpZHRoCis7IHIxMSA9IEpTQU1QSU1BR0UgaW5wdXRfYnVmCis7IHIxMmQgPSBKRElNRU5TSU9OIGlucHV0X3JvdworOyByMTMgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKKzsgcjE0ZCA9IGludCBudW1fcm93cworCislZGVmaW5lIHdrKGkpICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWU1NV09SRCAgOyB5bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYXZ4MikKKworRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1lNTVdPUkQpICA7IGFsaWduIHRvIDI1NiBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3drKDApXQorICAgIGNvbGxlY3RfYXJncyA1CisgICAgcHVzaCAgICAgICAgcmJ4CisKKyAgICBtb3YgICAgICAgICBlY3gsIHIxMGQgICAgICAgICAgICAgICA7IG51bV9jb2xzCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcmRpLCByMTEKKyAgICBtb3YgICAgICAgICBlY3gsIHIxMmQKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QQVJSQVkgW3JkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBBUlJBWSBbcmRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBsZWEgICAgICAgICByc2ksIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByYngsIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHBvcCAgICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBtb3YgICAgICAgICBlYXgsIHIxNGQKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmF4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcmR4CisgICAgcHVzaCAgICAgICAgcmJ4CisgICAgcHVzaCAgICAgICAgcnNpCisgICAgcHVzaCAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIwCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcmJ4XSAgICAgOyBpbnB0cjEKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZHhdICAgICA7IGlucHRyMgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyCisuY29sdW1ubG9vcDoKKworICAgIHZtb3ZkcXUgICAgIHltbTUsIFlNTVdPUkQgW3JieF0gICAgIDsgeW1tNT1DYigwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVikKKyAgICB2bW92ZHF1ICAgICB5bW0xLCBZTU1XT1JEIFtyZHhdICAgICA7IHltbTE9Q3IoMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVYpCisKKyAgICB2cGNtcGVxdyAgICB5bW0wLCB5bW0wLCB5bW0wCisgICAgdnBjbXBlcXcgICAgeW1tNywgeW1tNywgeW1tNworICAgIHZwc3JsdyAgICAgIHltbTAsIHltbTAsIEJZVEVfQklUICAgIDsgeW1tMD17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICB2cHNsbHcgICAgICB5bW03LCB5bW03LCA3ICAgICAgICAgICA7IHltbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKworICAgIHZwYW5kICAgICAgIHltbTQsIHltbTAsIHltbTUgICAgICAgIDsgeW1tND1DYigwMjQ2OEFDRUdJS01PUVNVKT1DYkUKKyAgICB2cHNybHcgICAgICB5bW01LCB5bW01LCBCWVRFX0JJVCAgICA7IHltbTU9Q2IoMTM1NzlCREZISkxOUFJUVik9Q2JPCisgICAgdnBhbmQgICAgICAgeW1tMCwgeW1tMCwgeW1tMSAgICAgICAgOyB5bW0wPUNyKDAyNDY4QUNFR0lLTU9RU1UpPUNyRQorICAgIHZwc3JsdyAgICAgIHltbTEsIHltbTEsIEJZVEVfQklUICAgIDsgeW1tMT1DcigxMzU3OUJERkhKTE5QUlRWKT1Dck8KKworICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTQsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW0zLCB5bW01LCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tMCwgeW1tNworICAgIHZwYWRkdyAgICAgIHltbTcsIHltbTEsIHltbTcKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgIDsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW0yLCB5bW0yICAgICAgICAgICAgIDsgeW1tND0yKkNiRQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTMsIHltbTMgICAgICAgICAgICAgOyB5bW01PTIqQ2JPCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tNiwgeW1tNiAgICAgICAgICAgICA7IHltbTA9MipDckUKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW03LCB5bW03ICAgICAgICAgICAgIDsgeW1tMT0yKkNyTworCisgICAgdnBtdWxodyAgICAgeW1tNCwgeW1tNCwgW3JlbCBQV19NRjAyMjhdICA7IHltbTQ9KDIqQ2JFICogLUZJWCgwLjIyODAwKSkKKyAgICB2cG11bGh3ICAgICB5bW01LCB5bW01LCBbcmVsIFBXX01GMDIyOF0gIDsgeW1tNT0oMipDYk8gKiAtRklYKDAuMjI4MDApKQorICAgIHZwbXVsaHcgICAgIHltbTAsIHltbTAsIFtyZWwgUFdfRjA0MDJdICAgOyB5bW0wPSgyKkNyRSAqIEZJWCgwLjQwMjAwKSkKKyAgICB2cG11bGh3ICAgICB5bW0xLCB5bW0xLCBbcmVsIFBXX0YwNDAyXSAgIDsgeW1tMT0oMipDck8gKiBGSVgoMC40MDIwMCkpCisKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCBbcmVsIFBXX09ORV0KKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCBbcmVsIFBXX09ORV0KKyAgICB2cHNyYXcgICAgICB5bW00LCB5bW00LCAxICAgICAgICAgICAgICAgIDsgeW1tND0oQ2JFICogLUZJWCgwLjIyODAwKSkKKyAgICB2cHNyYXcgICAgICB5bW01LCB5bW01LCAxICAgICAgICAgICAgICAgIDsgeW1tNT0oQ2JPICogLUZJWCgwLjIyODAwKSkKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCBbcmVsIFBXX09ORV0KKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCBbcmVsIFBXX09ORV0KKyAgICB2cHNyYXcgICAgICB5bW0wLCB5bW0wLCAxICAgICAgICAgICAgICAgIDsgeW1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorICAgIHZwc3JhdyAgICAgIHltbTEsIHltbTEsIDEgICAgICAgICAgICAgICAgOyB5bW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCB5bW0yCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgeW1tMworICAgIHZwYWRkdyAgICAgIHltbTQsIHltbTQsIHltbTIgICAgICAgICAgICAgOyB5bW00PShDYkUgKiBGSVgoMS43NzIwMCkpPShCLVkpRQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIHltbTMgICAgICAgICAgICAgOyB5bW01PShDYk8gKiBGSVgoMS43NzIwMCkpPShCLVkpTworICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTYgICAgICAgICAgICAgOyB5bW0wPShDckUgKiBGSVgoMS40MDIwMCkpPShSLVkpRQorICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTEsIHltbTcgICAgICAgICAgICAgOyB5bW0xPShDck8gKiBGSVgoMS40MDIwMCkpPShSLVkpTworCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMCldLCB5bW00ICAgICAgICA7IHdrKDApPShCLVkpRQorICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDEpXSwgeW1tNSAgICAgICAgOyB3aygxKT0oQi1ZKU8KKworICAgIHZwdW5wY2tod2QgIHltbTQsIHltbTIsIHltbTYKKyAgICB2cHVucGNrbHdkICB5bW0yLCB5bW0yLCB5bW02CisgICAgdnBtYWRkd2QgICAgeW1tMiwgeW1tMiwgW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgdnBtYWRkd2QgICAgeW1tNCwgeW1tNCwgW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgdnB1bnBja2h3ZCAgeW1tNSwgeW1tMywgeW1tNworICAgIHZwdW5wY2tsd2QgIHltbTMsIHltbTMsIHltbTcKKyAgICB2cG1hZGR3ZCAgICB5bW0zLCB5bW0zLCBbcmVsIFBXX01GMDM0NF9GMDI4NV0KKyAgICB2cG1hZGR3ZCAgICB5bW01LCB5bW01LCBbcmVsIFBXX01GMDM0NF9GMDI4NV0KKworICAgIHZwYWRkZCAgICAgIHltbTIsIHltbTIsIFtyZWwgUERfT05FSEFMRl0KKyAgICB2cGFkZGQgICAgICB5bW00LCB5bW00LCBbcmVsIFBEX09ORUhBTEZdCisgICAgdnBzcmFkICAgICAgeW1tMiwgeW1tMiwgU0NBTEVCSVRTCisgICAgdnBzcmFkICAgICAgeW1tNCwgeW1tNCwgU0NBTEVCSVRTCisgICAgdnBhZGRkICAgICAgeW1tMywgeW1tMywgW3JlbCBQRF9PTkVIQUxGXQorICAgIHZwYWRkZCAgICAgIHltbTUsIHltbTUsIFtyZWwgUERfT05FSEFMRl0KKyAgICB2cHNyYWQgICAgICB5bW0zLCB5bW0zLCBTQ0FMRUJJVFMKKyAgICB2cHNyYWQgICAgICB5bW01LCB5bW01LCBTQ0FMRUJJVFMKKworICAgIHZwYWNrc3NkdyAgIHltbTIsIHltbTIsIHltbTQgICAgICAgICAgICAgOyB5bW0yPUNiRSotRklYKDAuMzQ0KStDckUqRklYKDAuMjg1KQorICAgIHZwYWNrc3NkdyAgIHltbTMsIHltbTMsIHltbTUgICAgICAgICAgICAgOyB5bW0zPUNiTyotRklYKDAuMzQ0KStDck8qRklYKDAuMjg1KQorICAgIHZwc3VidyAgICAgIHltbTIsIHltbTIsIHltbTYgICAgICAgICAgICAgOyB5bW0yPUNiRSotRklYKDAuMzQ0KStDckUqLUZJWCgwLjcxNCk9KEctWSlFCisgICAgdnBzdWJ3ICAgICAgeW1tMywgeW1tMywgeW1tNyAgICAgICAgICAgICA7IHltbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTyotRklYKDAuNzE0KT0oRy1ZKU8KKworICAgIHZtb3ZkcXUgICAgIHltbTUsIFlNTVdPUkQgW3JzaV0gICAgICAgICAgOyB5bW01PVkoMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVYpCisKKyAgICB2cGNtcGVxdyAgICB5bW00LCB5bW00LCB5bW00CisgICAgdnBzcmx3ICAgICAgeW1tNCwgeW1tNCwgQllURV9CSVQgICAgICAgICA7IHltbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgdnBhbmQgICAgICAgeW1tNCwgeW1tNCwgeW1tNSAgICAgICAgICAgICA7IHltbTQ9WSgwMjQ2OEFDRUdJS01PUVNVKT1ZRQorICAgIHZwc3JsdyAgICAgIHltbTUsIHltbTUsIEJZVEVfQklUICAgICAgICAgOyB5bW01PVkoMTM1NzlCREZISkxOUFJUVik9WU8KKworICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTQgICAgICAgICAgICAgOyB5bW0wPSgoUi1ZKUUrWUUpPVJFPVIoMDI0NjhBQ0VHSUtNT1FTVSkKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW01ICAgICAgICAgICAgIDsgeW1tMT0oKFItWSlPK1lPKT1STz1SKDEzNTc5QkRGSEpMTlBSVFYpCisgICAgdnBhY2t1c3diICAgeW1tMCwgeW1tMCwgeW1tMCAgICAgICAgICAgICA7IHltbTA9UigwMjQ2OEFDRSoqKioqKioqR0lLTU9RU1UqKioqKioqKikKKyAgICB2cGFja3Vzd2IgICB5bW0xLCB5bW0xLCB5bW0xICAgICAgICAgICAgIDsgeW1tMT1SKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tNCAgICAgICAgICAgICA7IHltbTI9KChHLVkpRStZRSk9R0U9RygwMjQ2OEFDRUdJS01PUVNVKQorICAgIHZwYWRkdyAgICAgIHltbTMsIHltbTMsIHltbTUgICAgICAgICAgICAgOyB5bW0zPSgoRy1ZKU8rWU8pPUdPPUcoMTM1NzlCREZISkxOUFJUVikKKyAgICB2cGFja3Vzd2IgICB5bW0yLCB5bW0yLCB5bW0yICAgICAgICAgICAgIDsgeW1tMj1HKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZwYWNrdXN3YiAgIHltbTMsIHltbTMsIHltbTMgICAgICAgICAgICAgOyB5bW0zPUcoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCisKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCBZTU1XT1JEIFt3aygwKV0gIDsgeW1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFR0lLTU9RU1UpCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgWU1NV09SRCBbd2soMSldICA7IHltbTU9KFlPKyhCLVkpTyk9Qk89QigxMzU3OUJERkhKTE5QUlRWKQorICAgIHZwYWNrdXN3YiAgIHltbTQsIHltbTQsIHltbTQgICAgICAgICAgICAgOyB5bW00PUIoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBhY2t1c3diICAgeW1tNSwgeW1tNSwgeW1tNSAgICAgICAgICAgICA7IHltbTU9QigxMzU3OUJERioqKioqKioqSEpMTlBSVFYqKioqKioqKikKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyAgOyAtLS0tLS0tLS0tLS0tLS0KKworICAgIDsgeW1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiogMEcgMEkgMEsgME0gME8gMFEgMFMgMFUgKiopCisgICAgOyB5bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKiAwSCAwSiAwTCAwTiAwUCAwUiAwVCAwViAqKikKKyAgICA7IHltbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqIDFHIDFJIDFLIDFNIDFPIDFRIDFTIDFVICoqKQorICAgIDsgeW1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiogMUggMUogMUwgMU4gMVAgMVIgMVQgMVYgKiopCisgICAgOyB5bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiAyRyAySSAySyAyTSAyTyAyUSAyUyAyVSAqKikKKyAgICA7IHltbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqIDJIIDJKIDJMIDJOIDJQIDJSIDJUIDJWICoqKQorICAgIDsgeW1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiopCisgICAgOyB5bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworICAgIHZwdW5wY2tsYncgIHltbUEsIHltbUEsIHltbUMgICAgICAgIDsgeW1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDBJIDFJIDBLIDFLIDBNIDFNIDBPIDFPIDBRIDFRIDBTIDFTIDBVIDFVKQorICAgIHZwdW5wY2tsYncgIHltbUUsIHltbUUsIHltbUIgICAgICAgIDsgeW1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJHIDBIIDJJIDBKIDJLIDBMIDJNIDBOIDJPIDBQIDJRIDBSIDJTIDBUIDJVIDBWKQorICAgIHZwdW5wY2tsYncgIHltbUQsIHltbUQsIHltbUYgICAgICAgIDsgeW1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFIIDJIIDFKIDJKIDFMIDJMIDFOIDJOIDFQIDJQIDFSIDJSIDFUIDJUIDFWIDJWKQorCisgICAgdnBzcmxkcSAgICAgeW1tSCwgeW1tQSwgMiAgICAgICAgICAgOyB5bW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSAwRyAxRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEkgMUkgMEsgMUsgME0gMU0gME8gMU8gMFEgMVEgMFMgMVMgMFUgMVUgLS0gLS0pCisgICAgdnB1bnBja2h3ZCAgeW1tRywgeW1tQSwgeW1tRSAgICAgICAgOyB5bW1HPSgwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQiAwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgME8gMU8gMk8gMFAgMFEgMVEgMlEgMFIgMFMgMVMgMlMgMFQgMFUgMVUgMlUgMFYpCisgICAgdnB1bnBja2x3ZCAgeW1tQSwgeW1tQSwgeW1tRSAgICAgICAgOyB5bW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMyAwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMEkgMUkgMkkgMEogMEsgMUsgMksgMEwgME0gMU0gMk0gME4pCisKKyAgICB2cHNybGRxICAgICB5bW1FLCB5bW1FLCAyICAgICAgICAgICA7IHltbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIDJHIDBICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAwSiAySyAwTCAyTSAwTiAyTyAwUCAyUSAwUiAyUyAwVCAyVSAwViAtLSAtLSkKKworICAgIHZwc3JsZHEgICAgIHltbUIsIHltbUQsIDIgICAgICAgICAgIDsgeW1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgMUggMkgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFKIDJKIDFMIDJMIDFOIDJOIDFQIDJQIDFSIDJSIDFUIDJUIDFWIDJWIC0tIC0tKQorICAgIHZwdW5wY2tod2QgIHltbUMsIHltbUQsIHltbUggICAgICAgIDsgeW1tQz0oMTkgMjkgMEEgMUEgMUIgMkIgMEMgMUMgMUQgMkQgMEUgMUUgMUYgMkYgMEcgMUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFQIDJQIDBRIDFRIDFSIDJSIDBTIDFTIDFUIDJUIDBVIDFVIDFWIDJWIC0tIC0tKQorICAgIHZwdW5wY2tsd2QgIHltbUQsIHltbUQsIHltbUggICAgICAgIDsgeW1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQgMTUgMjUgMDYgMTYgMTcgMjcgMDggMTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFIIDJIIDBJIDFJIDFKIDJKIDBLIDFLIDFMIDJMIDBNIDFNIDFOIDJOIDBPIDFPKQorCisgICAgdnB1bnBja2h3ZCAgeW1tRiwgeW1tRSwgeW1tQiAgICAgICAgOyB5bW1GPSgyQSAwQiAxQiAyQiAyQyAwRCAxRCAyRCAyRSAwRiAxRiAyRiAyRyAwSCAxSCAySAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMlMgMFQgMVQgMlQgMlUgMFYgMVYgMlYgLS0gLS0gLS0gLS0pCisgICAgdnB1bnBja2x3ZCAgeW1tRSwgeW1tRSwgeW1tQiAgICAgICAgOyB5bW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSAyNiAwNyAxNyAyNyAyOCAwOSAxOSAyOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMUogMkogMksgMEwgMUwgMkwgMk0gME4gMU4gMk4gMk8gMFAgMVAgMlApCisKKyAgICB2cHNodWZkICAgICB5bW1ILCB5bW1BLCAweDRFICAgICAgICA7IHltbUg9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3IDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSyAxSyAySyAwTCAwTSAxTSAyTSAwTiAwRyAxRyAyRyAwSCAwSSAxSSAySSAwSikKKyAgICB2cHVucGNrbGRxICB5bW1BLCB5bW1BLCB5bW1EICAgICAgICA7IHltbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSSAwSSAxSSAySSAwSiAxSiAySiAwSyAxSykKKyAgICB2cHVucGNraGRxICB5bW1ELCB5bW1ELCB5bW1FICAgICAgICA7IHltbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCkKKyAgICB2cHVucGNrbGRxICB5bW1FLCB5bW1FLCB5bW1IICAgICAgICA7IHltbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDI0IDA1IDE1IDI1IDA2IDE2IDI2IDA3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAySSAwSiAxSiAySiAwSyAxSyAySyAwTCAySyAwTCAxTCAyTCAwTSAxTSAyTSAwTikKKworICAgIHZwc2h1ZmQgICAgIHltbUgsIHltbUcsIDB4NEUgICAgICAgIDsgeW1tSD0oMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYgMDggMTggMjggMDkgMEEgMUEgMkEgMEIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBTIDFTIDJTIDBUIDBVIDFVIDJVIDBWIDBPIDFPIDJPIDBQIDBRIDFRIDJRIDBSKQorICAgIHZwdW5wY2tsZHEgIHltbUcsIHltbUcsIHltbUMgICAgICAgIDsgeW1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRIDBRIDFRIDJRIDBSIDFSIDJSIDBTIDFTKQorICAgIHZwdW5wY2toZHEgIHltbUMsIHltbUMsIHltbUYgICAgICAgIDsgeW1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgMEcgMUcgMkcgMEggMUggMkgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFUIDJUIDBVIDFVIDJVIDBWIDFWIDJWIDFWIDJWIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHZwdW5wY2tsZHEgIHltbUYsIHltbUYsIHltbUggICAgICAgIDsgeW1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDBTIDFTIDJTIDBUIDJTIDBUIDFUIDJUIDBVIDFVIDJVIDBWKQorCisgICAgdnB1bnBja2xxZHEgeW1tSCwgeW1tQSwgeW1tRSAgICAgICAgOyB5bW1IPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgdnB1bnBja2xxZHEgeW1tRywgeW1tRCwgeW1tRyAgICAgICAgOyB5bW1HPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlAgMFEgMVEpCisgICAgdnB1bnBja2xxZHEgeW1tQywgeW1tRiwgeW1tQyAgICAgICAgOyB5bW1DPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisKKyAgICB2cGVybTJpMTI4ICB5bW1BLCB5bW1ILCB5bW1HLCAweDIwICA7IHltbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICB2cGVybTJpMTI4ICB5bW1ELCB5bW1DLCB5bW1ILCAweDMwICA7IHltbUQ9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAwSCAxSCAySCAwSSAxSSAySSAwSiAxSiAySiAwSyAxSyAySyAwTCkKKyAgICB2cGVybTJpMTI4ICB5bW1GLCB5bW1HLCB5bW1DLCAweDMxICA7IHltbUY9KDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyUSAwUiAxUiAyUiAwUyAxUyAyUyAwVCAxVCAyVCAwVSAxVSAyVSAwViAxViAyVikKKworICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q2NAorCisgICAgdGVzdCAgICAgICAgcmRpLCBTSVpFT0ZfWU1NV09SRC0xCisgICAgam56ICAgICAgICAgc2hvcnQgLm91dDEKKyAgICA7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZudGRxICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZudGRxICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZudGRxICAgIFlNTVdPUkQgW3JkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRgorICAgIGptcCAgICAgICAgIHNob3J0IC5vdXQwCisub3V0MTogIDsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW1ECisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzIqU0laRU9GX1lNTVdPUkRdLCB5bW1GCisub3V0MDoKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWU1NV09SRCAgOyBvdXRwdHIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBuZWFyIC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIwCisgICAgYWRkICAgICAgICAgcmJ4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMQorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjIKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKy5jb2x1bW5fc3Q2NDoKKyAgICBsZWEgICAgICAgICByY3gsIFtyY3grcmN4KjJdICAgICAgICAgICAgOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW1ECisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tRgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAgam1wICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMxCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMxCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMQorLmNvbHVtbl9zdDMxOgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIHZtb3ZkcXUgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICA7IG91dHB0cgorICAgIHZwZXJtMmkxMjggIHltbUEsIHltbUEsIHltbUEsIDEKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA4IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICB2bW92cSAgICAgICBYTU1fTU1XT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIHZwc3JsZHEgICAgIHhtbUEsIHhtbUEsIFNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q3OgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDQgYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzCisgICAgdm1vdmQgICAgICAgWE1NX0RXT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9EV09SRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICB2cHNybGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QzOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDIgYnl0ZXMgb2YgcmF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICB2bW92ZCAgICAgICBlYXgsIHhtbUEKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MQorICAgIG1vdiAgICAgICAgIFdPUkQgW3JkaV0sIGF4CisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9XT1JECisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgc2hyICAgICAgICAgcmF4LCAxNgorLmNvbHVtbl9zdDE6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgMSBieXRlIG9mIHJheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworICAgIG1vdiAgICAgICAgIEJZVEUgW3JkaV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgdnBjbXBlcWIgICAgeW1tNiwgeW1tNiwgeW1tNiAgICAgICAgOyB5bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBjbXBlcWIgICAgeW1tNywgeW1tNywgeW1tNyAgICAgICAgOyB5bW03PVhPPVgoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCislZWxzZQorICAgIHZweG9yICAgICAgIHltbTYsIHltbTYsIHltbTYgICAgICAgIDsgeW1tNj1YRT1YKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZweG9yICAgICAgIHltbTcsIHltbTcsIHltbTcgICAgICAgIDsgeW1tNz1YTz1YKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorJWVuZGlmCisgICAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAqKikKKyAgICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWICoqKQorICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiogMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUgKiopCisgICAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxViAqKikKKyAgICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVICoqKQorICAgIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiogMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgKiopCisgICAgOyB5bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSAqKiAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSAqKikKKyAgICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGICoqIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWICoqKQorCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tQyAgICAgICAgOyB5bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMEkgMUkgMEsgMUsgME0gMU0gME8gMU8gMFEgMVEgMFMgMVMgMFUgMVUpCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRyAgICAgICAgOyB5bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgM0cgMkkgM0kgMksgM0sgMk0gM00gMk8gM08gMlEgM1EgMlMgM1MgMlUgM1UpCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRCAgICAgICAgOyB5bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMUggMEogMUogMEwgMUwgME4gMU4gMFAgMVAgMFIgMVIgMFQgMVQgMFYgMVYpCisgICAgdnB1bnBja2xidyAgeW1tRiwgeW1tRiwgeW1tSCAgICAgICAgOyB5bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggM0ggMkogM0ogMkwgM0wgMk4gM04gMlAgM1AgMlIgM1IgMlQgM1QgMlYgM1YpCisKKyAgICB2cHVucGNraHdkICB5bW1DLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAzTyAwUSAxUSAyUSAzUSAwUyAxUyAyUyAzUyAwVSAxVSAyVSAzVSkKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAzRyAwSSAxSSAySSAzSSAwSyAxSyAySyAzSyAwTSAxTSAyTSAzTSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUCAxUCAyUCAzUCAwUiAxUiAyUiAzUiAwVCAxVCAyVCAzVCAwViAxViAyViAzVikKKyAgICB2cHVucGNrbHdkICB5bW1CLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSCAxSCAySCAzSCAwSiAxSiAySiAzSiAwTCAxTCAyTCAzTCAwTiAxTiAyTiAzTikKKworICAgIHZwdW5wY2toZHEgIHltbUUsIHltbUEsIHltbUIgICAgICAgIDsgeW1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBLIDFLIDJLIDNLIDBMIDFMIDJMIDNMIDBNIDFNIDJNIDNNIDBOIDFOIDJOIDNOKQorICAgIHZwdW5wY2tsZHEgIHltbUIsIHltbUEsIHltbUIgICAgICAgIDsgeW1tQj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDNHIDBIIDFIIDJIIDNIIDBJIDFJIDJJIDNJIDBKIDFKIDJKIDNKKQorICAgIHZwdW5wY2toZHEgIHltbUYsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRj0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBTIDFTIDJTIDNTIDBUIDFUIDJUIDNUIDBVIDFVIDJVIDNVIDBWIDFWIDJWIDNWKQorICAgIHZwdW5wY2tsZHEgIHltbUcsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDNPIDBQIDFQIDJQIDNQIDBRIDFRIDJRIDNRIDBSIDFSIDJSIDNSKQorCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQiwgeW1tRSwgMHgyMCAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgdnBlcm0yaTEyOCAgeW1tRCwgeW1tRywgeW1tRiwgMHgyMCAgOyB5bW1EPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgdnBlcm0yaTEyOCAgeW1tQywgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1DPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tRywgeW1tRiwgMHgzMSAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NjQKKworICAgIHRlc3QgICAgICAgIHJkaSwgU0laRU9GX1lNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUMKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMypTSVpFT0ZfWU1NV09SRF0sIHltbUgKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSszKlNJWkVPRl9ZTU1XT1JEXSwgeW1tSAorLm91dDA6CisgICAgYWRkICAgICAgICAgcmRpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworLmNvbHVtbl9zdDY0OgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8yCisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW1ECisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tQworICAgIHZtb3ZkcWEgICAgIHltbUQsIHltbUgKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvMgorLmNvbHVtbl9zdDMyOgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC80CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC80CisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzgKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICB2cGVybTJpMTI4ICB5bW1BLCB5bW1BLCB5bW1BLCAxCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgIDsgb3V0cHRyCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzgKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHltbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8xNgorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgdm1vdnEgICAgICAgTU1XT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JELzE2KjQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvMTYKKyAgICB2cHNybGRxICAgICB4bW1BLCBTSVpFT0ZfWU1NV09SRC8xNio0CisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeW1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworICAgIHZtb3ZkICAgICAgIFhNTV9EV09SRCBbcmRpXSwgeG1tQQorCislZW5kaWYgIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICByY3gKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByYngKKyAgICBwb3AgICAgICAgICByZHgKKyAgICBwb3AgICAgICAgICByZGkKKyAgICBwb3AgICAgICAgICByYXgKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2J1ZgorICAgIGRlYyAgICAgICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKyAgICBzZmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICByYngKKyAgICB2emVyb3VwcGVyCisgICAgdW5jb2xsZWN0X2FyZ3MgNQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkY29sZXh0LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamRjb2xleHQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0OTU0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkY29sZXh0LXNzZTIuYXNtCkBAIC0wLDAgKzEsNDQwIEBACis7Cis7IGpkY29sZXh0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5LCAyMDEyIFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIoSkRJTUVOU0lPTiBvdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGlucHV0X3JvdywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gb3V0X3dpZHRoCis7IHIxMSA9IEpTQU1QSU1BR0UgaW5wdXRfYnVmCis7IHIxMmQgPSBKRElNRU5TSU9OIGlucHV0X3JvdworOyByMTMgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKKzsgcjE0ZCA9IGludCBudW1fcm93cworCislZGVmaW5lIHdrKGkpICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRCAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMikKKworRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3drKDApXQorICAgIGNvbGxlY3RfYXJncyA1CisgICAgcHVzaCAgICAgICAgcmJ4CisKKyAgICBtb3YgICAgICAgICBlY3gsIHIxMGQgICAgICAgICAgICAgICA7IG51bV9jb2xzCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIHB1c2ggICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcmRpLCByMTEKKyAgICBtb3YgICAgICAgICBlY3gsIHIxMmQKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QQVJSQVkgW3JkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBBUlJBWSBbcmRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBsZWEgICAgICAgICByc2ksIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByYngsIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICBsZWEgICAgICAgICByZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHBvcCAgICAgICAgIHJjeAorCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBtb3YgICAgICAgICBlYXgsIHIxNGQKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGpsZSAgICAgICAgIG5lYXIgLnJldHVybgorLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmF4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcmR4CisgICAgcHVzaCAgICAgICAgcmJ4CisgICAgcHVzaCAgICAgICAgcnNpCisgICAgcHVzaCAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIwCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcmJ4XSAgICAgOyBpbnB0cjEKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZHhdICAgICA7IGlucHRyMgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyCisuY29sdW1ubG9vcDoKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3JieF0gICAgIDsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3JkeF0gICAgIDsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQorCisgICAgcGNtcGVxdyAgICAgeG1tNCwgeG1tNAorICAgIHBjbXBlcXcgICAgIHhtbTcsIHhtbTcKKyAgICBwc3JsdyAgICAgICB4bW00LCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIHhtbTcsIDcgICAgICAgICAgICAgICAgIDsgeG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD14bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisgICAgcGFuZCAgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PUNiKDAyNDY4QUNFKT1DYkUKKyAgICBwc3JsdyAgICAgICB4bW01LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTU9Q2IoMTM1NzlCREYpPUNiTworICAgIHBhbmQgICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCisgICAgcHNybHcgICAgICAgeG1tMSwgQllURV9CSVQgICAgICAgICAgOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KKworICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTcKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgIDsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9Q2JFCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPUNiTworICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTQgICAgICAgICAgICAgIDsgeG1tND0yKkNiRQorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT0yKkNiTworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj1DckUKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9Q3JPCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPTIqQ3JFCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPTIqQ3JPCisKKyAgICBwbXVsaHcgICAgICB4bW00LCBbcmVsIFBXX01GMDIyOF0gICA7IHhtbTQ9KDIqQ2JFICogLUZJWCgwLjIyODAwKSkKKyAgICBwbXVsaHcgICAgICB4bW01LCBbcmVsIFBXX01GMDIyOF0gICA7IHhtbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKKyAgICBwbXVsaHcgICAgICB4bW0wLCBbcmVsIFBXX0YwNDAyXSAgICA7IHhtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorICAgIHBtdWxodyAgICAgIHhtbTEsIFtyZWwgUFdfRjA0MDJdICAgIDsgeG1tMT0oMipDck8gKiBGSVgoMC40MDIwMCkpCisKKyAgICBwYWRkdyAgICAgICB4bW00LCBbcmVsIFBXX09ORV0KKyAgICBwYWRkdyAgICAgICB4bW01LCBbcmVsIFBXX09ORV0KKyAgICBwc3JhdyAgICAgICB4bW00LCAxICAgICAgICAgICAgICAgICA7IHhtbTQ9KENiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgcHNyYXcgICAgICAgeG1tNSwgMSAgICAgICAgICAgICAgICAgOyB4bW01PShDYk8gKiAtRklYKDAuMjI4MDApKQorICAgIHBhZGR3ICAgICAgIHhtbTAsIFtyZWwgUFdfT05FXQorICAgIHBhZGR3ICAgICAgIHhtbTEsIFtyZWwgUFdfT05FXQorICAgIHBzcmF3ICAgICAgIHhtbTAsIDEgICAgICAgICAgICAgICAgIDsgeG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorICAgIHBzcmF3ICAgICAgIHhtbTEsIDEgICAgICAgICAgICAgICAgIDsgeG1tMT0oQ3JPICogRklYKDAuNDAyMDApKQorCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMgorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PShDYk8gKiBGSVgoMS43NzIwMCkpPShCLVkpTworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPShCLVkpRQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNSAgIDsgd2soMSk9KEItWSlPCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMworICAgIHB1bnBja2x3ZCAgIHhtbTIsIHhtbTYKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW02CisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgcHVucGNrbHdkICAgeG1tMywgeG1tNworICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTcKKyAgICBwbWFkZHdkICAgICB4bW0zLCBbcmVsIFBXX01GMDM0NF9GMDI4NV0KKyAgICBwbWFkZHdkICAgICB4bW01LCBbcmVsIFBXX01GMDM0NF9GMDI4NV0KKworICAgIHBhZGRkICAgICAgIHhtbTIsIFtyZWwgUERfT05FSEFMRl0KKyAgICBwYWRkZCAgICAgICB4bW00LCBbcmVsIFBEX09ORUhBTEZdCisgICAgcHNyYWQgICAgICAgeG1tMiwgU0NBTEVCSVRTCisgICAgcHNyYWQgICAgICAgeG1tNCwgU0NBTEVCSVRTCisgICAgcGFkZGQgICAgICAgeG1tMywgW3JlbCBQRF9PTkVIQUxGXQorICAgIHBhZGRkICAgICAgIHhtbTUsIFtyZWwgUERfT05FSEFMRl0KKyAgICBwc3JhZCAgICAgICB4bW0zLCBTQ0FMRUJJVFMKKyAgICBwc3JhZCAgICAgICB4bW01LCBTQ0FMRUJJVFMKKworICAgIHBhY2tzc2R3ICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKkZJWCgwLjI4NSkKKyAgICBwYWNrc3NkdyAgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNiAgICAgICAgICAgICAgOyB4bW0yPUNiRSotRklYKDAuMzQ0KStDckUqLUZJWCgwLjcxNCk9KEctWSlFCisgICAgcHN1YncgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPUNiTyotRklYKDAuMzQ0KStDck8qLUZJWCgwLjcxNCk9KEctWSlPCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFtyc2ldICAgICA7IHhtbTU9WSgwMTIzNDU2Nzg5QUJDREVGKQorCisgICAgcGNtcGVxdyAgICAgeG1tNCwgeG1tNAorICAgIHBzcmx3ICAgICAgIHhtbTQsIEJZVEVfQklUICAgICAgICAgIDsgeG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICBwYW5kICAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9WSgwMjQ2OEFDRSk9WUUKKyAgICBwc3JsdyAgICAgICB4bW01LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTU9WSgxMzU3OUJERik9WU8KKworICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD0oKFItWSlFK1lFKT1SRT1SKDAyNDY4QUNFKQorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT0oKFItWSlPK1lPKT1STz1SKDEzNTc5QkRGKQorICAgIHBhY2t1c3diICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD1SKDAyNDY4QUNFKioqKioqKiopCisgICAgcGFja3Vzd2IgICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPVIoMTM1NzlCREYqKioqKioqKikKKworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj0oKEctWSlFK1lFKT1HRT1HKDAyNDY4QUNFKQorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz0oKEctWSlPK1lPKT1HTz1HKDEzNTc5QkRGKQorICAgIHBhY2t1c3diICAgIHhtbTIsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisgICAgcGFja3Vzd2IgICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworICAgIHBhZGR3ICAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFKQorICAgIHBhZGR3ICAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT0oWU8rKEItWSlPKT1CTz1CKDEzNTc5QkRGKQorICAgIHBhY2t1c3diICAgIHhtbTQsIHhtbTQgICAgICAgICAgICAgIDsgeG1tND1CKDAyNDY4QUNFKioqKioqKiopCisgICAgcGFja3Vzd2IgICAgeG1tNSwgeG1tNSAgICAgICAgICAgICAgOyB4bW01PUIoMTM1NzlCREYqKioqKioqKikKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyAgOyAtLS0tLS0tLS0tLS0tLS0KKworICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKyAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorICAgIDsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworICAgIHB1bnBja2xidyAgIHhtbUEsIHhtbUMgICAgICAgIDsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tQiAgICAgICAgOyB4bW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRikKKyAgICBwdW5wY2tsYncgICB4bW1ELCB4bW1GICAgICAgICA7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisgICAgbW92ZHFhICAgICAgeG1tRywgeG1tQQorICAgIG1vdmRxYSAgICAgIHhtbUgsIHhtbUEKKyAgICBwdW5wY2tsd2QgICB4bW1BLCB4bW1FICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorICAgIHB1bnBja2h3ZCAgIHhtbUcsIHhtbUUgICAgICAgIDsgeG1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYpCisKKyAgICBwc3JsZHEgICAgICB4bW1ILCAyICAgICAgICAgICA7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorICAgIHBzcmxkcSAgICAgIHhtbUUsIDIgICAgICAgICAgIDsgeG1tRT0oMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYgLS0gLS0pCisKKyAgICBtb3ZkcWEgICAgICB4bW1DLCB4bW1ECisgICAgbW92ZHFhICAgICAgeG1tQiwgeG1tRAorICAgIHB1bnBja2x3ZCAgIHhtbUQsIHhtbUggICAgICAgIDsgeG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQgMTUgMjUgMDYgMTYgMTcgMjcgMDggMTgpCisgICAgcHVucGNraHdkICAgeG1tQywgeG1tSCAgICAgICAgOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworICAgIHBzcmxkcSAgICAgIHhtbUIsIDIgICAgICAgICAgIDsgeG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgLS0gLS0pCisKKyAgICBtb3ZkcWEgICAgICB4bW1GLCB4bW1FCisgICAgcHVucGNrbHdkICAgeG1tRSwgeG1tQiAgICAgICAgOyB4bW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSAyNiAwNyAxNyAyNyAyOCAwOSAxOSAyOSkKKyAgICBwdW5wY2tod2QgICB4bW1GLCB4bW1CICAgICAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisgICAgcHNodWZkICAgICAgeG1tSCwgeG1tQSwgMHg0RSAgOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1FCisgICAgcHVucGNrbGRxICAgeG1tQSwgeG1tRCAgICAgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCkKKyAgICBwdW5wY2tsZHEgICB4bW1FLCB4bW1IICAgICAgICA7IHhtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDI0IDA1IDE1IDI1IDA2IDE2IDI2IDA3KQorICAgIHB1bnBja2hkcSAgIHhtbUQsIHhtbUIgICAgICAgIDsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKyAgICBwc2h1ZmQgICAgICB4bW1ILCB4bW1HLCAweDRFICA7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUYKKyAgICBwdW5wY2tsZHEgICB4bW1HLCB4bW1DICAgICAgICA7IHhtbUc9KDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDBBIDFBIDJBIDBCIDFCIDJCIDBDIDFDKQorICAgIHB1bnBja2xkcSAgIHhtbUYsIHhtbUggICAgICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYpCisgICAgcHVucGNraGRxICAgeG1tQywgeG1tQiAgICAgICAgOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworICAgIHB1bnBja2xxZHEgIHhtbUEsIHhtbUUgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgcHVucGNrbHFkcSAgeG1tRCwgeG1tRyAgICAgICAgOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICBwdW5wY2tscWRxICB4bW1GLCB4bW1DICAgICAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisKKyAgICB0ZXN0ICAgICAgICByZGksIFNJWkVPRl9YTU1XT1JELTEKKyAgICBqbnogICAgICAgICBzaG9ydCAub3V0MQorICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgbW92bnRkcSAgICAgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisgICAgam1wICAgICAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKKy5vdXQwOgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjAKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworLmNvbHVtbl9zdDMyOgorICAgIGxlYSAgICAgICAgIHJjeCwgW3JjeCtyY3gqMl0gICAgICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1GCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKy5jb2x1bW5fc3QxNjoKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1ECisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBwc3JsZHEgICAgICB4bW1BLCBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MworICAgIG1vdmQgICAgICAgIFhNTV9EV09SRCBbcmRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgcHNybGRxICAgICAgeG1tQSwgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciAyIGJ5dGVzIG9mIHJheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW1BCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDEKKyAgICBtb3YgICAgICAgICBXT1JEIFtyZGldLCBheAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHNociAgICAgICAgIHJheCwgMTYKKy5jb2x1bW5fc3QxOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDEgYnl0ZSBvZiByYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKyAgICBtb3YgICAgICAgICBCWVRFIFtyZGldLCBhbAorCislZWxzZSAgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCislaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgorICAgIHBjbXBlcWIgICAgIHhtbTYsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCisgICAgcGNtcGVxYiAgICAgeG1tNywgeG1tNyAgICAgICAgICAgICAgOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyVlbHNlCisgICAgcHhvciAgICAgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKyAgICBweG9yICAgICAgICB4bW03LCB4bW03ICAgICAgICAgICAgICA7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVuZGlmCisgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiksIHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqKQorICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiopLCB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKikKKyAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCisgICAgOyB4bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSAqKiksIHhtbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGICoqKQorCisgICAgcHVucGNrbGJ3ICAgeG1tQSwgeG1tQyAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICBwdW5wY2tsYncgICB4bW1FLCB4bW1HICA7IHhtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2IDI4IDM4IDJBIDNBIDJDIDNDIDJFIDNFKQorICAgIHB1bnBja2xidyAgIHhtbUIsIHhtbUQgIDsgeG1tQj0oMDEgMTEgMDMgMTMgMDUgMTUgMDcgMTcgMDkgMTkgMEIgMUIgMEQgMUQgMEYgMUYpCisgICAgcHVucGNrbGJ3ICAgeG1tRiwgeG1tSCAgOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUEKKyAgICBwdW5wY2tsd2QgICB4bW1BLCB4bW1FICA7IHhtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorICAgIHB1bnBja2h3ZCAgIHhtbUMsIHhtbUUgIDsgeG1tQz0oMDggMTggMjggMzggMEEgMUEgMkEgM0EgMEMgMUMgMkMgM0MgMEUgMUUgMkUgM0UpCisgICAgbW92ZHFhICAgICAgeG1tRywgeG1tQgorICAgIHB1bnBja2x3ZCAgIHhtbUIsIHhtbUYgIDsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCisgICAgcHVucGNraHdkICAgeG1tRywgeG1tRiAgOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKKworICAgIG1vdmRxYSAgICAgIHhtbUQsIHhtbUEKKyAgICBwdW5wY2tsZHEgICB4bW1BLCB4bW1CICA7IHhtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgIHB1bnBja2hkcSAgIHhtbUQsIHhtbUIgIDsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgbW92ZHFhICAgICAgeG1tSCwgeG1tQworICAgIHB1bnBja2xkcSAgIHhtbUMsIHhtbUcgIDsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisgICAgcHVucGNraGRxICAgeG1tSCwgeG1tRyAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKKworICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgorCisgICAgdGVzdCAgICAgICAgcmRpLCBTSVpFT0ZfWE1NV09SRC0xCisgICAgam56ICAgICAgICAgc2hvcnQgLm91dDEKKyAgICA7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tQworICAgIG1vdm50ZHEgICAgIFhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorICAgIGptcCAgICAgICAgIHNob3J0IC5vdXQwCisub3V0MTogIDsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgbW92ZHF1ICAgICAgWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisub3V0MDoKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBuZWFyIC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIwCisgICAgYWRkICAgICAgICAgcmJ4LCBieXRlIFNJWkVPRl9YTU1XT1JEICA7IGlucHRyMQorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjIKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKy5jb2x1bW5fc3QzMjoKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNgorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIG1vdmRxYSAgICAgIHhtbUEsIHhtbUMKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1ICisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKy5jb2x1bW5fc3QxNjoKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICA7IG91dHB0cgorICAgIG1vdmRxYSAgICAgIHhtbUEsIHhtbUQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorLmNvbHVtbl9zdDE1OgorICAgIDsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NworICAgIG1vdnEgICAgICAgIE1NV09SRCBbcmRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84KjQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgIHBzcmxkcSAgICAgIHhtbUEsIFNJWkVPRl9YTU1XT1JELzgqNAorLmNvbHVtbl9zdDc6CisgICAgOyBTdG9yZSBvbmUgcGl4ZWwgKDQgYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKyAgICBtb3ZkICAgICAgICBYTU1fRFdPUkQgW3JkaV0sIHhtbUEKKworJWVuZGlmICA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworLm5leHRyb3c6CisgICAgcG9wICAgICAgICAgcmN4CisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmJ4CisgICAgcG9wICAgICAgICAgcmR4CisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmF4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgYWRkICAgICAgICAgcmJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9idWYKKyAgICBkZWMgICAgICAgICByYXggICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgamcgICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgc2ZlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkY29sb3ItYXZ4Mi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZGNvbG9yLWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWQxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZGNvbG9yLWF2eDIuYXNtCkBAIC0wLDAgKzEsMTIwIEBACis7Cis7IGpkY29sb3IuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgQVZYMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsgQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8zNDQgZXF1ICAyMjU1NCAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICA0NjgwMiAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICA5MTg4MSAgICAgICAgICAgICAgOyBGSVgoMS40MDIwMCkKK0ZfMV83NzIgZXF1IDExNjEzMCAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1IChGXzFfNDAyIC0gNjU1MzYpICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICggNjU1MzYgLSBGXzBfNzE0KSAgOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjggZXF1ICgxMzEwNzIgLSBGXzFfNzcyKSAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfeWNjX3JnYl9jb252ZXJ0X2F2eDIpCisKK0VYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9hdngyKToKKworUFdfRjA0MDIgICAgICAgIHRpbWVzIDE2IGR3ICBGXzBfNDAyCitQV19NRjAyMjggICAgICAgdGltZXMgMTYgZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NSB0aW1lcyA4ICBkdyAtRl8wXzM0NCwgRl8wXzI4NQorUFdfT05FICAgICAgICAgIHRpbWVzIDE2IGR3ICAxCitQRF9PTkVIQUxGICAgICAgdGltZXMgOCAgZGQgIDEgPDwgKFNDQUxFQklUUyAtIDEpCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorCislaW5jbHVkZSAiamRjb2xleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9SR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9SR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyICBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpkY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X2F2eDIgIGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfYXZ4MgorJWluY2x1ZGUgImpkY29sZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfYXZ4MiAganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqZGNvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyICBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqZGNvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hCR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hCR1JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hCR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyICBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqZGNvbGV4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1hSR0JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1hSR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9YUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1hSR0JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyICBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X2F2eDIKKyVpbmNsdWRlICJqZGNvbGV4dC1hdngyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkY29sb3Itc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZGNvbG9yLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDc5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZGNvbG9yLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTE5IEBACis7Cis7IGpkY29sb3IuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMgIDE2CisKK0ZfMF8zNDQgZXF1ICAyMjU1NCAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICA0NjgwMiAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICA5MTg4MSAgICAgICAgICAgICAgOyBGSVgoMS40MDIwMCkKK0ZfMV83NzIgZXF1IDExNjEzMCAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1IChGXzFfNDAyIC0gNjU1MzYpICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICggNjU1MzYgLSBGXzBfNzE0KSAgOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjggZXF1ICgxMzEwNzIgLSBGXzFfNzcyKSAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisKK0VYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKToKKworUFdfRjA0MDIgICAgICAgIHRpbWVzIDggZHcgIEZfMF80MDIKK1BXX01GMDIyOCAgICAgICB0aW1lcyA4IGR3IC1GXzBfMjI4CitQV19NRjAzNDRfRjAyODUgdGltZXMgNCBkdyAtRl8wXzM0NCwgRl8wXzI4NQorUFdfT05FICAgICAgICAgIHRpbWVzIDggZHcgIDEKK1BEX09ORUhBTEYgICAgICB0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMgLSAxKQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgNjQKKworJWluY2x1ZGUgImpkY29sZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9SR0JfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX1JHQlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9SR0JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyICBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNvbGV4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIgIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JYX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9CR1JYX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfQkdSWF9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JYX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YQkdSX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YQkdSX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWEJHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YQkdSX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjb2xleHQtc3NlMi5hc20iCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZG1lcmdlLWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamRtZXJnZS1hdngyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNmMDYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamRtZXJnZS1hdngyLmFzbQpAQCAtMCwwICsxLDEzOCBAQAorOworOyBqZG1lcmdlLmFzbSAtIG1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKDY0LWJpdCBBVlgyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUyAgMTYKKworRl8wXzM0NCBlcXUgIDIyNTU0ICAgICAgICAgICAgICA7IEZJWCgwLjM0NDE0KQorRl8wXzcxNCBlcXUgIDQ2ODAyICAgICAgICAgICAgICA7IEZJWCgwLjcxNDE0KQorRl8xXzQwMiBlcXUgIDkxODgxICAgICAgICAgICAgICA7IEZJWCgxLjQwMjAwKQorRl8xXzc3MiBlcXUgMTE2MTMwICAgICAgICAgICAgICA7IEZJWCgxLjc3MjAwKQorRl8wXzQwMiBlcXUgKEZfMV80MDIgLSA2NTUzNikgICA7IEZJWCgxLjQwMjAwKSAtIEZJWCgxKQorRl8wXzI4NSBlcXUgKCA2NTUzNiAtIEZfMF83MTQpICA7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOCBlcXUgKDEzMTA3MiAtIEZfMV83NzIpICA7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfYXZ4MikKKworRVhUTihqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIpOgorCitQV19GMDQwMiAgICAgICAgdGltZXMgMTYgZHcgIEZfMF80MDIKK1BXX01GMDIyOCAgICAgICB0aW1lcyAxNiBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDggIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUgICAgICAgICAgdGltZXMgMTYgZHcgIDEKK1BEX09ORUhBTEYgICAgICB0aW1lcyA4ICBkZCAgMSA8PCAoU0NBTEVCSVRTIC0gMSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0CisKKyVpbmNsdWRlICJqZG1yZ2V4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hdngyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWluY2x1ZGUgImpkbXJnZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9hdngyCislaW5jbHVkZSAiamRtcmdleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVpbmNsdWRlICJqZG1yZ2V4dC1hdngyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWluY2x1ZGUgImpkbXJnZXh0LWF2eDIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MiBcCisgIGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYXZ4MgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9hdngyCislaW5jbHVkZSAiamRtcmdleHQtYXZ4Mi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyIFwKKyAganNpbWRfaDJ2MV9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9hdngyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIgXAorICBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIKKyVpbmNsdWRlICJqZG1yZ2V4dC1hdngyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkbWVyZ2Utc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZG1lcmdlLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTA5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZG1lcmdlLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTM3IEBACis7Cis7IGpkbWVyZ2UuYXNtIC0gbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbiAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTICAxNgorCitGXzBfMzQ0IGVxdSAgMjI1NTQgICAgICAgICAgICAgIDsgRklYKDAuMzQ0MTQpCitGXzBfNzE0IGVxdSAgNDY4MDIgICAgICAgICAgICAgIDsgRklYKDAuNzE0MTQpCitGXzFfNDAyIGVxdSAgOTE4ODEgICAgICAgICAgICAgIDsgRklYKDEuNDAyMDApCitGXzFfNzcyIGVxdSAxMTYxMzAgICAgICAgICAgICAgIDsgRklYKDEuNzcyMDApCitGXzBfNDAyIGVxdSAoRl8xXzQwMiAtIDY1NTM2KSAgIDsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1IGVxdSAoIDY1NTM2IC0gRl8wXzcxNCkgIDsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4IGVxdSAoMTMxMDcyIC0gRl8xXzc3MikgIDsgRklYKDIpIC0gRklYKDEuNzcyMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMik6CisKK1BXX0YwNDAyICAgICAgICB0aW1lcyA4IGR3ICBGXzBfNDAyCitQV19NRjAyMjggICAgICAgdGltZXMgOCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORSAgICAgICAgICB0aW1lcyA4IGR3ICAxCitQRF9PTkVIQUxGICAgICAgdGltZXMgNCBkZCAgMSA8PCAoU0NBTEVCSVRTIC0gMSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0CisKKyVpbmNsdWRlICJqZG1yZ2V4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX1JHQl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfUkdCX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX1JHQl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfUkdCWF9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfUkdCWF9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1JHQlhfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfUkdCWF9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9CR1JfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX0JHUl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9CR1JfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ2V4dC1zc2UyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAgRVhUX0JHUlhfUkVECislZGVmaW5lIFJHQl9HUkVFTiAgRVhUX0JHUlhfR1JFRU4KKyVkZWZpbmUgUkdCX0JMVUUgIEVYVF9CR1JYX0JMVUUKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAgRVhUX0JHUlhfUElYRUxTSVpFCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnZXh0LXNzZTIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEICBFWFRfWEJHUl9SRUQKKyVkZWZpbmUgUkdCX0dSRUVOICBFWFRfWEJHUl9HUkVFTgorJWRlZmluZSBSR0JfQkxVRSAgRVhUX1hCR1JfQkxVRQorJWRlZmluZSBSR0JfUElYRUxTSVpFICBFWFRfWEJHUl9QSVhFTFNJWkUKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBcCisgIGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdleHQtc3NlMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgIEVYVF9YUkdCX1JFRAorJWRlZmluZSBSR0JfR1JFRU4gIEVYVF9YUkdCX0dSRUVOCislZGVmaW5lIFJHQl9CTFVFICBFWFRfWFJHQl9CTFVFCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgIEVYVF9YUkdCX1BJWEVMU0laRQorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIFwKKyAganNpbWRfaDJ2MV9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgXAorICBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ2V4dC1zc2UyLmFzbSIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkbXJnZXh0LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamRtcmdleHQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlOGE5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkbXJnZXh0LWF2eDIuYXNtCkBAIC0wLDAgKzEsNTk1IEBACis7Cis7IGpkbXJnZXh0LmFzbSAtIG1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKDY0LWJpdCBBVlgyKQorOworOyBDb3B5cmlnaHQgMjAwOSwgMjAxMiBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7Cis7CisKKzsgcjEwZCA9IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCis7IHIxMSA9IEpTQU1QSU1BR0UgaW5wdXRfYnVmCis7IHIxMmQgPSBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKzsgcjEzID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgd2soaSkgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9ZTU1XT1JEICA7IHltbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gIDMKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1lNTVdPUkQpICA7IGFsaWduIHRvIDI1NiBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3drKDApXQorICAgIGNvbGxlY3RfYXJncyA0CisgICAgcHVzaCAgICAgICAgcmJ4CisKKyAgICBtb3YgICAgICAgICBlY3gsIHIxMGQgICAgICAgICAgICAgICA7IGNvbAorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBwdXNoICAgICAgICByY3gKKworICAgIG1vdiAgICAgICAgIHJkaSwgcjExCisgICAgbW92ICAgICAgICAgZWN4LCByMTJkCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUEFSUkFZIFtyZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICByYngsIEpTQU1QQVJSQVkgW3JkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBBUlJBWSBbcmRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIwCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcmJ4K3JjeCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMQorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkeCtyY3gqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjIKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHRyCisKKyAgICBwb3AgICAgICAgICByY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorCisuY29sdW1ubG9vcDoKKworICAgIHZtb3ZkcXUgICAgIHltbTYsIFlNTVdPUkQgW3JieF0gICAgIDsgeW1tNj1DYigwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVikKKyAgICB2bW92ZHF1ICAgICB5bW03LCBZTU1XT1JEIFtyZHhdICAgICA7IHltbTc9Q3IoMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVYpCisKKyAgICB2cHhvciAgICAgICB5bW0xLCB5bW0xLCB5bW0xICAgICAgICA7IHltbTE9KGFsbCAwJ3MpCisgICAgdnBjbXBlcXcgICAgeW1tMywgeW1tMywgeW1tMworICAgIHZwc2xsdyAgICAgIHltbTMsIHltbTMsIDcgICAgICAgICAgIDsgeW1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisgICAgdnBlcm1xICAgICAgeW1tNiwgeW1tNiwgMHhkOCAgICAgICAgOyB5bW02PUNiKDAxMjM0NTY3R0hJSktMTU44OUFCQ0RFRk9QUVJTVFVWKQorICAgIHZwZXJtcSAgICAgIHltbTcsIHltbTcsIDB4ZDggICAgICAgIDsgeW1tNz1DcigwMTIzNDU2N0dISUpLTE1OODlBQkNERUZPUFFSU1RVVikKKyAgICB2cHVucGNrbGJ3ICB5bW00LCB5bW02LCB5bW0xICAgICAgICA7IHltbTQ9Q2IoMDEyMzQ1Njc4OUFCQ0RFRik9Q2JMCisgICAgdnB1bnBja2hidyAgeW1tNiwgeW1tNiwgeW1tMSAgICAgICAgOyB5bW02PUNiKEdISUpLTE1OT1BRUlNUVVYpPUNiSAorICAgIHZwdW5wY2tsYncgIHltbTAsIHltbTcsIHltbTEgICAgICAgIDsgeW1tMD1DcigwMTIzNDU2Nzg5QUJDREVGKT1DckwKKyAgICB2cHVucGNraGJ3ICB5bW03LCB5bW03LCB5bW0xICAgICAgICA7IHltbTc9Q3IoR0hJSktMTU5PUFFSU1RVVik9Q3JICisKKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW02LCB5bW0zCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tNCwgeW1tMworICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTcsIHltbTMKKyAgICB2cGFkZHcgICAgICB5bW0zLCB5bW0wLCB5bW0zCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgIDsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICA7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNSwgeW1tNSAgICAgICAgICAgICA7IHltbTY9MipDYkgKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW0yLCB5bW0yICAgICAgICAgICAgIDsgeW1tND0yKkNiTAorICAgIHZwYWRkdyAgICAgIHltbTcsIHltbTEsIHltbTEgICAgICAgICAgICAgOyB5bW03PTIqQ3JICisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMywgeW1tMyAgICAgICAgICAgICA7IHltbTA9MipDckwKKworICAgIHZwbXVsaHcgICAgIHltbTYsIHltbTYsIFtyZWwgUFdfTUYwMjI4XSAgOyB5bW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisgICAgdnBtdWxodyAgICAgeW1tNCwgeW1tNCwgW3JlbCBQV19NRjAyMjhdICA7IHltbTQ9KDIqQ2JMICogLUZJWCgwLjIyODAwKSkKKyAgICB2cG11bGh3ICAgICB5bW03LCB5bW03LCBbcmVsIFBXX0YwNDAyXSAgIDsgeW1tNz0oMipDckggKiBGSVgoMC40MDIwMCkpCisgICAgdnBtdWxodyAgICAgeW1tMCwgeW1tMCwgW3JlbCBQV19GMDQwMl0gICA7IHltbTA9KDIqQ3JMICogRklYKDAuNDAyMDApKQorCisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNiwgW3JlbCBQV19PTkVdCisgICAgdnBhZGR3ICAgICAgeW1tNCwgeW1tNCwgW3JlbCBQV19PTkVdCisgICAgdnBzcmF3ICAgICAgeW1tNiwgeW1tNiwgMSAgICAgICAgICAgICAgICA7IHltbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCisgICAgdnBzcmF3ICAgICAgeW1tNCwgeW1tNCwgMSAgICAgICAgICAgICAgICA7IHltbTQ9KENiTCAqIC1GSVgoMC4yMjgwMCkpCisgICAgdnBhZGR3ICAgICAgeW1tNywgeW1tNywgW3JlbCBQV19PTkVdCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgW3JlbCBQV19PTkVdCisgICAgdnBzcmF3ICAgICAgeW1tNywgeW1tNywgMSAgICAgICAgICAgICAgICA7IHltbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKyAgICB2cHNyYXcgICAgICB5bW0wLCB5bW0wLCAxICAgICAgICAgICAgICAgIDsgeW1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorCisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNiwgeW1tNQorICAgIHZwYWRkdyAgICAgIHltbTQsIHltbTQsIHltbTIKKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW02LCB5bW01ICAgICAgICAgICAgIDsgeW1tNj0oQ2JIICogRklYKDEuNzcyMDApKT0oQi1ZKUgKKyAgICB2cGFkZHcgICAgICB5bW00LCB5bW00LCB5bW0yICAgICAgICAgICAgIDsgeW1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKyAgICB2cGFkZHcgICAgICB5bW03LCB5bW03LCB5bW0xICAgICAgICAgICAgIDsgeW1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW0zICAgICAgICAgICAgIDsgeW1tMD0oQ3JMICogRklYKDEuNDAyMDApKT0oUi1ZKUwKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDApXSwgeW1tNiAgICAgICAgOyB3aygwKT0oQi1ZKUgKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygxKV0sIHltbTcgICAgICAgIDsgd2soMSk9KFItWSlICisKKyAgICB2cHVucGNraHdkICB5bW02LCB5bW01LCB5bW0xCisgICAgdnB1bnBja2x3ZCAgeW1tNSwgeW1tNSwgeW1tMQorICAgIHZwbWFkZHdkICAgIHltbTUsIHltbTUsIFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgIHZwbWFkZHdkICAgIHltbTYsIHltbTYsIFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgIHZwdW5wY2tod2QgIHltbTcsIHltbTIsIHltbTMKKyAgICB2cHVucGNrbHdkICB5bW0yLCB5bW0yLCB5bW0zCisgICAgdnBtYWRkd2QgICAgeW1tMiwgeW1tMiwgW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgdnBtYWRkd2QgICAgeW1tNywgeW1tNywgW3JlbCBQV19NRjAzNDRfRjAyODVdCisKKyAgICB2cGFkZGQgICAgICB5bW01LCB5bW01LCBbcmVsIFBEX09ORUhBTEZdCisgICAgdnBhZGRkICAgICAgeW1tNiwgeW1tNiwgW3JlbCBQRF9PTkVIQUxGXQorICAgIHZwc3JhZCAgICAgIHltbTUsIHltbTUsIFNDQUxFQklUUworICAgIHZwc3JhZCAgICAgIHltbTYsIHltbTYsIFNDQUxFQklUUworICAgIHZwYWRkZCAgICAgIHltbTIsIHltbTIsIFtyZWwgUERfT05FSEFMRl0KKyAgICB2cGFkZGQgICAgICB5bW03LCB5bW03LCBbcmVsIFBEX09ORUhBTEZdCisgICAgdnBzcmFkICAgICAgeW1tMiwgeW1tMiwgU0NBTEVCSVRTCisgICAgdnBzcmFkICAgICAgeW1tNywgeW1tNywgU0NBTEVCSVRTCisKKyAgICB2cGFja3NzZHcgICB5bW01LCB5bW01LCB5bW02ICAgICAgICA7IHltbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisgICAgdnBhY2tzc2R3ICAgeW1tMiwgeW1tMiwgeW1tNyAgICAgICAgOyB5bW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQorICAgIHZwc3VidyAgICAgIHltbTUsIHltbTUsIHltbTEgICAgICAgIDsgeW1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKi1GSVgoMC43MTQpPShHLVkpSAorICAgIHZwc3VidyAgICAgIHltbTIsIHltbTIsIHltbTMgICAgICAgIDsgeW1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMildLCB5bW01ICAgOyB3aygyKT0oRy1ZKUgKKworICAgIG1vdiAgICAgICAgIGFsLCAyICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgIGptcCAgICAgICAgIHNob3J0IC5ZbG9vcF8xc3QKKworLllsb29wXzJuZDoKKyAgICB2bW92ZHFhICAgICB5bW0wLCBZTU1XT1JEIFt3aygxKV0gICA7IHltbTA9KFItWSlICisgICAgdm1vdmRxYSAgICAgeW1tMiwgWU1NV09SRCBbd2soMildICAgOyB5bW0yPShHLVkpSAorICAgIHZtb3ZkcWEgICAgIHltbTQsIFlNTVdPUkQgW3drKDApXSAgIDsgeW1tND0oQi1ZKUgKKworLllsb29wXzFzdDoKKyAgICB2bW92ZHF1ICAgICB5bW03LCBZTU1XT1JEIFtyc2ldICAgICA7IHltbTc9WSgwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVikKKworICAgIHZwY21wZXF3ICAgIHltbTYsIHltbTYsIHltbTYKKyAgICB2cHNybHcgICAgICB5bW02LCB5bW02LCBCWVRFX0JJVCAgICA7IHltbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgdnBhbmQgICAgICAgeW1tNiwgeW1tNiwgeW1tNyAgICAgICAgOyB5bW02PVkoMDI0NjhBQ0VHSUtNT1FTVSk9WUUKKyAgICB2cHNybHcgICAgICB5bW03LCB5bW03LCBCWVRFX0JJVCAgICA7IHltbTc9WSgxMzU3OUJERkhKTE5QUlRWKT1ZTworCisgICAgdm1vdmRxYSAgICAgeW1tMSwgeW1tMCAgICAgICAgICAgICAgOyB5bW0xPXltbTA9KFItWSkoTC9IKQorICAgIHZtb3ZkcWEgICAgIHltbTMsIHltbTIgICAgICAgICAgICAgIDsgeW1tMz15bW0yPShHLVkpKEwvSCkKKyAgICB2bW92ZHFhICAgICB5bW01LCB5bW00ICAgICAgICAgICAgICA7IHltbTU9eW1tND0oQi1ZKShML0gpCisKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW02ICAgICAgICA7IHltbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFR0lLTU9RU1UpCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tNyAgICAgICAgOyB5bW0xPSgoUi1ZKStZTyk9Uk89UigxMzU3OUJERkhKTE5QUlRWKQorICAgIHZwYWNrdXN3YiAgIHltbTAsIHltbTAsIHltbTAgICAgICAgIDsgeW1tMD1SKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZwYWNrdXN3YiAgIHltbTEsIHltbTEsIHltbTEgICAgICAgIDsgeW1tMT1SKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tNiAgICAgICAgOyB5bW0yPSgoRy1ZKStZRSk9R0U9RygwMjQ2OEFDRUdJS01PUVNVKQorICAgIHZwYWRkdyAgICAgIHltbTMsIHltbTMsIHltbTcgICAgICAgIDsgeW1tMz0oKEctWSkrWU8pPUdPPUcoMTM1NzlCREZISkxOUFJUVikKKyAgICB2cGFja3Vzd2IgICB5bW0yLCB5bW0yLCB5bW0yICAgICAgICA7IHltbTI9RygwMjQ2OEFDRSoqKioqKioqR0lLTU9RU1UqKioqKioqKikKKyAgICB2cGFja3Vzd2IgICB5bW0zLCB5bW0zLCB5bW0zICAgICAgICA7IHltbTM9RygxMzU3OUJERioqKioqKioqSEpMTlBSVFYqKioqKioqKikKKworICAgIHZwYWRkdyAgICAgIHltbTQsIHltbTQsIHltbTYgICAgICAgIDsgeW1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0VHSUtNT1FTVSkKKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCB5bW03ICAgICAgICA7IHltbTU9KChCLVkpK1lPKT1CTz1CKDEzNTc5QkRGSEpMTlBSVFYpCisgICAgdnBhY2t1c3diICAgeW1tNCwgeW1tNCwgeW1tNCAgICAgICAgOyB5bW00PUIoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBhY2t1c3diICAgeW1tNSwgeW1tNSwgeW1tNSAgICAgICAgOyB5bW01PUIoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgIDsgLS0tLS0tLS0tLS0tLS0tCisKKyAgICA7IHltbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqIDBHIDBJIDBLIDBNIDBPIDBRIDBTIDBVICoqKQorICAgIDsgeW1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiogMEggMEogMEwgME4gMFAgMFIgMFQgMFYgKiopCisgICAgOyB5bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiAxRyAxSSAxSyAxTSAxTyAxUSAxUyAxVSAqKikKKyAgICA7IHltbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqIDFIIDFKIDFMIDFOIDFQIDFSIDFUIDFWICoqKQorICAgIDsgeW1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiogMkcgMkkgMksgMk0gMk8gMlEgMlMgMlUgKiopCisgICAgOyB5bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKiAySCAySiAyTCAyTiAyUCAyUiAyVCAyViAqKikKKyAgICA7IHltbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqICoqKQorICAgIDsgeW1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiogKiopCisKKyAgICB2cHVucGNrbGJ3ICB5bW1BLCB5bW1BLCB5bW1DICAgICAgICA7IHltbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAwSSAxSSAwSyAxSyAwTSAxTSAwTyAxTyAwUSAxUSAwUyAxUyAwVSAxVSkKKyAgICB2cHVucGNrbGJ3ICB5bW1FLCB5bW1FLCB5bW1CICAgICAgICA7IHltbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyRyAwSCAySSAwSiAySyAwTCAyTSAwTiAyTyAwUCAyUSAwUiAyUyAwVCAyVSAwVikKKyAgICB2cHVucGNrbGJ3ICB5bW1ELCB5bW1ELCB5bW1GICAgICAgICA7IHltbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAySCAxSiAySiAxTCAyTCAxTiAyTiAxUCAyUCAxUiAyUiAxVCAyVCAxViAyVikKKworICAgIHZwc3JsZHEgICAgIHltbUgsIHltbUEsIDIgICAgICAgICAgIDsgeW1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUgMEcgMUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBJIDFJIDBLIDFLIDBNIDFNIDBPIDFPIDBRIDFRIDBTIDFTIDBVIDFVIC0tIC0tKQorICAgIHZwdW5wY2tod2QgIHltbUcsIHltbUEsIHltbUUgICAgICAgIDsgeW1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDBQIDBRIDFRIDJRIDBSIDBTIDFTIDJTIDBUIDBVIDFVIDJVIDBWKQorICAgIHZwdW5wY2tsd2QgIHltbUEsIHltbUEsIHltbUUgICAgICAgIDsgeW1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDBJIDFJIDJJIDBKIDBLIDFLIDJLIDBMIDBNIDFNIDJNIDBOKQorCisgICAgdnBzcmxkcSAgICAgeW1tRSwgeW1tRSwgMiAgICAgICAgICAgOyB5bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAyRyAwSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMksgMEwgMk0gME4gMk8gMFAgMlEgMFIgMlMgMFQgMlUgMFYgLS0gLS0pCisKKyAgICB2cHNybGRxICAgICB5bW1CLCB5bW1ELCAyICAgICAgICAgICA7IHltbUI9KDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGIDFIIDJICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSiAySiAxTCAyTCAxTiAyTiAxUCAyUCAxUiAyUiAxVCAyVCAxViAyViAtLSAtLSkKKyAgICB2cHVucGNraHdkICB5bW1DLCB5bW1ELCB5bW1IICAgICAgICA7IHltbUM9KDE5IDI5IDBBIDFBIDFCIDJCIDBDIDFDIDFEIDJEIDBFIDFFIDFGIDJGIDBHIDFHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxUCAyUCAwUSAxUSAxUiAyUiAwUyAxUyAxVCAyVCAwVSAxVSAxViAyViAtLSAtLSkKKyAgICB2cHVucGNrbHdkICB5bW1ELCB5bW1ELCB5bW1IICAgICAgICA7IHltbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxSCAySCAwSSAxSSAxSiAySiAwSyAxSyAxTCAyTCAwTSAxTSAxTiAyTiAwTyAxTykKKworICAgIHZwdW5wY2tod2QgIHltbUYsIHltbUUsIHltbUIgICAgICAgIDsgeW1tRj0oMkEgMEIgMUIgMkIgMkMgMEQgMUQgMkQgMkUgMEYgMUYgMkYgMkcgMEggMUggMkgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDJTIDBUIDFUIDJUIDJVIDBWIDFWIDJWIC0tIC0tIC0tIC0tKQorICAgIHZwdW5wY2tsd2QgIHltbUUsIHltbUUsIHltbUIgICAgICAgIDsgeW1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJJIDBKIDFKIDJKIDJLIDBMIDFMIDJMIDJNIDBOIDFOIDJOIDJPIDBQIDFQIDJQKQorCisgICAgdnBzaHVmZCAgICAgeW1tSCwgeW1tQSwgMHg0RSAgICAgICAgOyB5bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgMEwgME0gMU0gMk0gME4gMEcgMUcgMkcgMEggMEkgMUkgMkkgMEopCisgICAgdnB1bnBja2xkcSAgeW1tQSwgeW1tQSwgeW1tRCAgICAgICAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMEkgMUkgMkkgMEogMUogMkogMEsgMUspCisgICAgdnB1bnBja2hkcSAgeW1tRCwgeW1tRCwgeW1tRSAgICAgICAgOyB5bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMUwgMkwgME0gMU0gMk0gME4gMU4gMk4gMU4gMk4gME8gMU8gMk8gMFAgMVAgMlApCisgICAgdnB1bnBja2xkcSAgeW1tRSwgeW1tRSwgeW1tSCAgICAgICAgOyB5bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkkgMEogMUogMkogMEsgMUsgMksgMEwgMksgMEwgMUwgMkwgME0gMU0gMk0gME4pCisKKyAgICB2cHNodWZkICAgICB5bW1ILCB5bW1HLCAweDRFICAgICAgICA7IHltbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUyAxUyAyUyAwVCAwVSAxVSAyVSAwViAwTyAxTyAyTyAwUCAwUSAxUSAyUSAwUikKKyAgICB2cHVucGNrbGRxICB5bW1HLCB5bW1HLCB5bW1DICAgICAgICA7IHltbUc9KDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDBBIDFBIDJBIDBCIDFCIDJCIDBDIDFDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUSAwUSAxUSAyUSAwUiAxUiAyUiAwUyAxUykKKyAgICB2cHVucGNraGRxICB5bW1DLCB5bW1DLCB5bW1GICAgICAgICA7IHltbUM9KDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGIDFGIDJGIDBHIDFHIDJHIDBIIDFIIDJICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAxVCAyVCAwVSAxVSAyVSAwViAxViAyViAxViAyViAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICB2cHVucGNrbGRxICB5bW1GLCB5bW1GLCB5bW1IICAgICAgICA7IHltbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAyUSAwUiAxUiAyUiAwUyAxUyAyUyAwVCAyUyAwVCAxVCAyVCAwVSAxVSAyVSAwVikKKworICAgIHZwdW5wY2tscWRxIHltbUgsIHltbUEsIHltbUUgICAgICAgIDsgeW1tSD0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDBIIDFIIDJIIDBJIDFJIDJJIDBKIDFKIDJKIDBLIDFLIDJLIDBMKQorICAgIHZwdW5wY2tscWRxIHltbUcsIHltbUQsIHltbUcgICAgICAgIDsgeW1tRz0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDFMIDJMIDBNIDFNIDJNIDBOIDFOIDJOIDBPIDFPIDJPIDBQIDFQIDJQIDBRIDFRKQorICAgIHZwdW5wY2tscWRxIHltbUMsIHltbUYsIHltbUMgICAgICAgIDsgeW1tQz0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDJRIDBSIDFSIDJSIDBTIDFTIDJTIDBUIDFUIDJUIDBVIDFVIDJVIDBWIDFWIDJWKQorCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tSCwgeW1tRywgMHgyMCAgOyB5bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgdnBlcm0yaTEyOCAgeW1tRCwgeW1tQywgeW1tSCwgMHgzMCAgOyB5bW1EPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMkcgMEggMUggMkggMEkgMUkgMkkgMEogMUogMkogMEsgMUsgMksgMEwpCisgICAgdnBlcm0yaTEyOCAgeW1tRiwgeW1tRywgeW1tQywgMHgzMSAgOyB5bW1GPSgxTCAyTCAwTSAxTSAyTSAwTiAxTiAyTiAwTyAxTyAyTyAwUCAxUCAyUCAwUSAxUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMlEgMFIgMVIgMlIgMFMgMVMgMlMgMFQgMVQgMlQgMFUgMVUgMlUgMFYgMVYgMlYpCisKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NjQKKworICAgIHRlc3QgICAgICAgIHJkaSwgU0laRU9GX1lNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUYKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRgorLm91dDA6CisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgbmVhciAuZW5kY29sdW1uCisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIwCisgICAgZGVjICAgICAgICAgYWwgICAgICAgICAgICAgICAgICAgICAgICA7IFljdHIKKyAgICBqbnogICAgICAgICBuZWFyIC5ZbG9vcF8ybmQKKworICAgIGFkZCAgICAgICAgIHJieCwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIyCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisuY29sdW1uX3N0NjQ6CisgICAgbGVhICAgICAgICAgcmN4LCBbcmN4K3JjeCoyXSAgICAgICAgICAgIDsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHZtb3ZkcWEgICAgIHltbUEsIHltbUYKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMQorLmNvbHVtbl9zdDMyOgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzMQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgICA7IG91dHB0cgorICAgIHZtb3ZkcWEgICAgIHltbUEsIHltbUQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MzEKKy5jb2x1bW5fc3QzMToKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICB2cGVybTJpMTI4ICB5bW1BLCB5bW1BLCB5bW1BLCAxCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgdm1vdnEgICAgICAgWE1NX01NV09SRCBbcmRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICB2cHNybGRxICAgICB4bW1BLCB4bW1BLCBTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MworICAgIHZtb3ZkICAgICAgIFhNTV9EV09SRCBbcmRpXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgdnBzcmxkcSAgICAgeG1tQSwgeG1tQSwgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MzoKKyAgICA7IFN0b3JlIHRoZSBsb3dlciAyIGJ5dGVzIG9mIHJheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdm1vdmQgICAgICAgZWF4LCB4bW1BCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDEKKyAgICBtb3YgICAgICAgICBXT1JEIFtyZGldLCBheAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgIHNociAgICAgICAgIHJheCwgMTYKKy5jb2x1bW5fc3QxOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDEgYnl0ZSBvZiByYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgIG1vdiAgICAgICAgIEJZVEUgW3JkaV0sIGFsCisKKyVlbHNlICA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisgICAgdnBjbXBlcWIgICAgeW1tNiwgeW1tNiwgeW1tNiAgICAgICAgOyB5bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKkdJS01PUVNVKioqKioqKiopCisgICAgdnBjbXBlcWIgICAgeW1tNywgeW1tNywgeW1tNyAgICAgICAgOyB5bW03PVhPPVgoMTM1NzlCREYqKioqKioqKkhKTE5QUlRWKioqKioqKiopCislZWxzZQorICAgIHZweG9yICAgICAgIHltbTYsIHltbTYsIHltbTYgICAgICAgIDsgeW1tNj1YRT1YKDAyNDY4QUNFKioqKioqKipHSUtNT1FTVSoqKioqKioqKQorICAgIHZweG9yICAgICAgIHltbTcsIHltbTcsIHltbTcgICAgICAgIDsgeW1tNz1YTz1YKDEzNTc5QkRGKioqKioqKipISkxOUFJUVioqKioqKioqKQorJWVuZGlmCisgICAgOyB5bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiAwRyAwSSAwSyAwTSAwTyAwUSAwUyAwVSAqKikKKyAgICA7IHltbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqIDBIIDBKIDBMIDBOIDBQIDBSIDBUIDBWICoqKQorICAgIDsgeW1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiogMUcgMUkgMUsgMU0gMU8gMVEgMVMgMVUgKiopCisgICAgOyB5bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKiAxSCAxSiAxTCAxTiAxUCAxUiAxVCAxViAqKikKKyAgICA7IHltbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqIDJHIDJJIDJLIDJNIDJPIDJRIDJTIDJVICoqKQorICAgIDsgeW1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiogMkggMkogMkwgMk4gMlAgMlIgMlQgMlYgKiopCisgICAgOyB5bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSAqKiAzRyAzSSAzSyAzTSAzTyAzUSAzUyAzVSAqKikKKyAgICA7IHltbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGICoqIDNIIDNKIDNMIDNOIDNQIDNSIDNUIDNWICoqKQorCisgICAgdnB1bnBja2xidyAgeW1tQSwgeW1tQSwgeW1tQyAgICAgICAgOyB5bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEcgMUcgMEkgMUkgMEsgMUsgME0gMU0gME8gMU8gMFEgMVEgMFMgMVMgMFUgMVUpCisgICAgdnB1bnBja2xidyAgeW1tRSwgeW1tRSwgeW1tRyAgICAgICAgOyB5bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkcgM0cgMkkgM0kgMksgM0sgMk0gM00gMk8gM08gMlEgM1EgMlMgM1MgMlUgM1UpCisgICAgdnB1bnBja2xidyAgeW1tQiwgeW1tQiwgeW1tRCAgICAgICAgOyB5bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEggMUggMEogMUogMEwgMUwgME4gMU4gMFAgMVAgMFIgMVIgMFQgMVQgMFYgMVYpCisgICAgdnB1bnBja2xidyAgeW1tRiwgeW1tRiwgeW1tSCAgICAgICAgOyB5bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMkggM0ggMkogM0ogMkwgM0wgMk4gM04gMlAgM1AgMlIgM1IgMlQgM1QgMlYgM1YpCisKKyAgICB2cHVucGNraHdkICB5bW1DLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwTyAxTyAyTyAzTyAwUSAxUSAyUSAzUSAwUyAxUyAyUyAzUyAwVSAxVSAyVSAzVSkKKyAgICB2cHVucGNrbHdkICB5bW1BLCB5bW1BLCB5bW1FICAgICAgICA7IHltbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwRyAxRyAyRyAzRyAwSSAxSSAySSAzSSAwSyAxSyAySyAzSyAwTSAxTSAyTSAzTSkKKyAgICB2cHVucGNraHdkICB5bW1HLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwUCAxUCAyUCAzUCAwUiAxUiAyUiAzUiAwVCAxVCAyVCAzVCAwViAxViAyViAzVikKKyAgICB2cHVucGNrbHdkICB5bW1CLCB5bW1CLCB5bW1GICAgICAgICA7IHltbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAwSCAxSCAySCAzSCAwSiAxSiAySiAzSiAwTCAxTCAyTCAzTCAwTiAxTiAyTiAzTikKKworICAgIHZwdW5wY2toZHEgIHltbUUsIHltbUEsIHltbUIgICAgICAgIDsgeW1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBLIDFLIDJLIDNLIDBMIDFMIDJMIDNMIDBNIDFNIDJNIDNNIDBOIDFOIDJOIDNOKQorICAgIHZwdW5wY2tsZHEgIHltbUIsIHltbUEsIHltbUIgICAgICAgIDsgeW1tQj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBHIDFHIDJHIDNHIDBIIDFIIDJIIDNIIDBJIDFJIDJJIDNJIDBKIDFKIDJKIDNKKQorICAgIHZwdW5wY2toZHEgIHltbUYsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRj0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBTIDFTIDJTIDNTIDBUIDFUIDJUIDNUIDBVIDFVIDJVIDNVIDBWIDFWIDJWIDNWKQorICAgIHZwdW5wY2tsZHEgIHltbUcsIHltbUMsIHltbUcgICAgICAgIDsgeW1tRz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIDBPIDFPIDJPIDNPIDBQIDFQIDJQIDNQIDBRIDFRIDJRIDNRIDBSIDFSIDJSIDNSKQorCisgICAgdnBlcm0yaTEyOCAgeW1tQSwgeW1tQiwgeW1tRSwgMHgyMCAgOyB5bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgdnBlcm0yaTEyOCAgeW1tRCwgeW1tRywgeW1tRiwgMHgyMCAgOyB5bW1EPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgdnBlcm0yaTEyOCAgeW1tQywgeW1tQiwgeW1tRSwgMHgzMSAgOyB5bW1DPSgwRyAxRyAyRyAzRyAwSCAxSCAySCAzSCAwSSAxSSAySSAzSSAwSiAxSiAySiAzSgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMEsgMUsgMksgM0sgMEwgMUwgMkwgM0wgME0gMU0gMk0gM00gME4gMU4gMk4gM04pCisgICAgdnBlcm0yaTEyOCAgeW1tSCwgeW1tRywgeW1tRiwgMHgzMSAgOyB5bW1IPSgwTyAxTyAyTyAzTyAwUCAxUCAyUCAzUCAwUSAxUSAyUSAzUSAwUiAxUiAyUiAzUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgMFMgMVMgMlMgM1MgMFQgMVQgMlQgM1QgMFUgMVUgMlUgM1UgMFYgMVYgMlYgM1YpCisKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0NjQKKworICAgIHRlc3QgICAgICAgIHJkaSwgU0laRU9GX1lNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbUEKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbUQKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMipTSVpFT0ZfWU1NV09SRF0sIHltbUMKKyAgICB2bW92bnRkcSAgICBZTU1XT1JEIFtyZGkrMypTSVpFT0ZfWU1NV09SRF0sIHltbUgKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tRAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsyKlNJWkVPRl9ZTU1XT1JEXSwgeW1tQworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSszKlNJWkVPRl9ZTU1XT1JEXSwgeW1tSAorLm91dDA6CisgICAgYWRkICAgICAgICAgcmRpLCBSR0JfUElYRUxTSVpFKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLmVuZGNvbHVtbgorCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMAorICAgIGRlYyAgICAgICAgIGFsCisgICAgam56ICAgICAgICAgbmVhciAuWWxvb3BfMm5kCisKKyAgICBhZGQgICAgICAgICByYngsIGJ5dGUgU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIFNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMgorICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKworLmNvbHVtbl9zdDY0OgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8yCisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDMyCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW1ECisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tQworICAgIHZtb3ZkcWEgICAgIHltbUQsIHltbUgKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvMgorLmNvbHVtbl9zdDMyOgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC80CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JEICAgIDsgb3V0cHRyCisgICAgdm1vdmRxYSAgICAgeW1tQSwgeW1tRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC80CisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzgKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICB2cGVybTJpMTI4ICB5bW1BLCB5bW1BLCB5bW1BLCAxCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9ZTU1XT1JELzgKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHltbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWU1NV09SRC8xNgorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgdm1vdnEgICAgICAgTU1XT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9ZTU1XT1JELzE2KjQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1lNTVdPUkQvMTYKKyAgICB2cHNybGRxICAgICB4bW1BLCBTSVpFT0ZfWU1NV09SRC8xNio0CisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeW1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAuZW5kY29sdW1uCisgICAgdm1vdmQgICAgICAgWE1NX0RXT1JEIFtyZGldLCB4bW1BCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5lbmRjb2x1bW46CisgICAgc2ZlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdnplcm91cHBlcgorICAgIHVuY29sbGVjdF9hcmdzIDQKKyAgICBtb3YgICAgICAgICByc3AsIHJicCAgICAgICAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgIHBvcCAgICAgICAgIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYXZ4MihKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworOyByMTBkID0gSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKzsgcjExID0gSlNBTVBJTUFHRSBpbnB1dF9idWYKKzsgcjEyZCA9IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorOyByMTMgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyA0CisgICAgcHVzaCAgICAgICAgcmJ4CisKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMGQKKworICAgIG1vdiAgICAgICAgIHJkaSwgcjExCisgICAgbW92ICAgICAgICAgZWN4LCByMTJkCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUEFSUkFZIFtyZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICByYngsIEpTQU1QQVJSQVkgW3JkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBBUlJBWSBbcmRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBsZWEgICAgICAgICByc2ksIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10KKworICAgIHB1c2ggICAgICAgIHJkeCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIyCisgICAgcHVzaCAgICAgICAgcmJ4ICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjEKKyAgICBwdXNoICAgICAgICByc2kgICAgICAgICAgICAgICAgICAgICA7IGlucHRyMDAKKyAgICBtb3YgICAgICAgICByYngsIHJzcAorCisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcmN4CisgICAgcHVzaCAgICAgICAgcmF4CisKKyAgICAlaWZkZWYgV0lONjQKKyAgICBtb3YgICAgICAgICByOCwgcmN4CisgICAgbW92ICAgICAgICAgcjksIHJkaQorICAgIG1vdiAgICAgICAgIHJjeCwgcmF4CisgICAgbW92ICAgICAgICAgcmR4LCByYngKKyAgICAlZWxzZQorICAgIG1vdiAgICAgICAgIHJkeCwgcmN4CisgICAgbW92ICAgICAgICAgcmN4LCByZGkKKyAgICBtb3YgICAgICAgICByZGksIHJheAorICAgIG1vdiAgICAgICAgIHJzaSwgcmJ4CisgICAgJWVuZGlmCisKKyAgICBjYWxsICAgICAgICBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIpCisKKyAgICBwb3AgICAgICAgICByYXgKKyAgICBwb3AgICAgICAgICByY3gKKyAgICBwb3AgICAgICAgICByZGkKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByYngKKyAgICBwb3AgICAgICAgICByZHgKKworICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHRyMQorICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdHIwMQorCisgICAgcHVzaCAgICAgICAgcmR4ICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjIKKyAgICBwdXNoICAgICAgICByYnggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMQorICAgIHB1c2ggICAgICAgIHJzaSAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIwMAorICAgIG1vdiAgICAgICAgIHJieCwgcnNwCisKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByY3gKKyAgICBwdXNoICAgICAgICByYXgKKworICAgICVpZmRlZiBXSU42NAorICAgIG1vdiAgICAgICAgIHI4LCByY3gKKyAgICBtb3YgICAgICAgICByOSwgcmRpCisgICAgbW92ICAgICAgICAgcmN4LCByYXgKKyAgICBtb3YgICAgICAgICByZHgsIHJieAorICAgICVlbHNlCisgICAgbW92ICAgICAgICAgcmR4LCByY3gKKyAgICBtb3YgICAgICAgICByY3gsIHJkaQorICAgIG1vdiAgICAgICAgIHJkaSwgcmF4CisgICAgbW92ICAgICAgICAgcnNpLCByYngKKyAgICAlZW5kaWYKKworICAgIGNhbGwgICAgICAgIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfYXZ4MikKKworICAgIHBvcCAgICAgICAgIHJheAorICAgIHBvcCAgICAgICAgIHJjeAorICAgIHBvcCAgICAgICAgIHJkaQorICAgIHBvcCAgICAgICAgIHJzaQorICAgIHBvcCAgICAgICAgIHJieAorICAgIHBvcCAgICAgICAgIHJkeAorCisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZG1yZ2V4dC1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkbXJnZXh0LXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzMzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZG1yZ2V4dC1zc2UyLmFzbQpAQCAtMCwwICsxLDUzNyBAQAorOworOyBqZG1yZ2V4dC5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDksIDIwMTIgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIsIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCis7IHIxMGQgPSBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorOyByMTEgPSBKU0FNUElNQUdFIGlucHV0X2J1ZgorOyByMTJkID0gSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyCis7IHIxMyA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCislZGVmaW5lIHdrKGkpICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRCAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAzCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3aygwKV0KKyAgICBjb2xsZWN0X2FyZ3MgNAorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgZWN4LCByMTBkICAgICAgICAgICAgICAgOyBjb2wKKyAgICB0ZXN0ICAgICAgICByY3gsIHJjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgcHVzaCAgICAgICAgcmN4CisKKyAgICBtb3YgICAgICAgICByZGksIHIxMQorICAgIG1vdiAgICAgICAgIGVjeCwgcjEyZAorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBBUlJBWSBbcmRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUEFSUkFZIFtyZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QQVJSQVkgW3JkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJkaSwgcjEzCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpK3JjeCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBST1cgW3JieCtyY3gqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjEKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIyCisgICAgbW92ICAgICAgICAgcmRpLCBKU0FNUFJPVyBbcmRpXSAgICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgorCisgICAgcG9wICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKworLmNvbHVtbmxvb3A6CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtyYnhdICAgICA7IHhtbTY9Q2IoMDEyMzQ1Njc4OUFCQ0RFRikKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFtyZHhdICAgICA7IHhtbTc9Q3IoMDEyMzQ1Njc4OUFCQ0RFRikKKworICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMT0oYWxsIDAncykKKyAgICBwY21wZXF3ICAgICB4bW0zLCB4bW0zCisgICAgcHNsbHcgICAgICAgeG1tMywgNyAgICAgICAgICAgICAgICAgOyB4bW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02CisgICAgcHVucGNraGJ3ICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PUNiKDg5QUJDREVGKT1DYkgKKyAgICBwdW5wY2tsYncgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9Q2IoMDEyMzQ1NjcpPUNiTAorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTcKKyAgICBwdW5wY2toYncgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9Q3IoODlBQkNERUYpPUNySAorICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1DcigwMTIzNDU2Nyk9Q3JMCisKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMworICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW0zCisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgIDsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKyAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICA7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PUNiSAorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj1DYkwKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW02ICAgICAgICAgICAgICA7IHhtbTY9MipDYkgKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW00ICAgICAgICAgICAgICA7IHhtbTQ9MipDYkwKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9Q3JICisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPUNyTAorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz0yKkNySAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0yKkNyTAorCisgICAgcG11bGh3ICAgICAgeG1tNiwgW3JlbCBQV19NRjAyMjhdICAgOyB4bW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisgICAgcG11bGh3ICAgICAgeG1tNCwgW3JlbCBQV19NRjAyMjhdICAgOyB4bW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCisgICAgcG11bGh3ICAgICAgeG1tNywgW3JlbCBQV19GMDQwMl0gICAgOyB4bW03PSgyKkNySCAqIEZJWCgwLjQwMjAwKSkKKyAgICBwbXVsaHcgICAgICB4bW0wLCBbcmVsIFBXX0YwNDAyXSAgICA7IHhtbTA9KDIqQ3JMICogRklYKDAuNDAyMDApKQorCisgICAgcGFkZHcgICAgICAgeG1tNiwgW3JlbCBQV19PTkVdCisgICAgcGFkZHcgICAgICAgeG1tNCwgW3JlbCBQV19PTkVdCisgICAgcHNyYXcgICAgICAgeG1tNiwgMSAgICAgICAgICAgICAgICAgOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorICAgIHBzcmF3ICAgICAgIHhtbTQsIDEgICAgICAgICAgICAgICAgIDsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKyAgICBwYWRkdyAgICAgICB4bW03LCBbcmVsIFBXX09ORV0KKyAgICBwYWRkdyAgICAgICB4bW0wLCBbcmVsIFBXX09ORV0KKyAgICBwc3JhdyAgICAgICB4bW03LCAxICAgICAgICAgICAgICAgICA7IHhtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKyAgICBwc3JhdyAgICAgICB4bW0wLCAxICAgICAgICAgICAgICAgICA7IHhtbTA9KENyTCAqIEZJWCgwLjQwMjAwKSkKKworICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTUKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW0yCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PShDYkggKiBGSVgoMS43NzIwMCkpPShCLVkpSAorICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9KENySCAqIEZJWCgxLjQwMjAwKSk9KFItWSlICisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPShDckwgKiBGSVgoMS40MDIwMCkpPShSLVkpTAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW02ICAgOyB3aygwKT0oQi1ZKUgKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTcgICA7IHdrKDEpPShSLVkpSAorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0xCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgIHB1bnBja2x3ZCAgIHhtbTIsIHhtbTMKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW0zCisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19NRjAzNDRfRjAyODVdCisKKyAgICBwYWRkZCAgICAgICB4bW01LCBbcmVsIFBEX09ORUhBTEZdCisgICAgcGFkZGQgICAgICAgeG1tNiwgW3JlbCBQRF9PTkVIQUxGXQorICAgIHBzcmFkICAgICAgIHhtbTUsIFNDQUxFQklUUworICAgIHBzcmFkICAgICAgIHhtbTYsIFNDQUxFQklUUworICAgIHBhZGRkICAgICAgIHhtbTIsIFtyZWwgUERfT05FSEFMRl0KKyAgICBwYWRkZCAgICAgICB4bW03LCBbcmVsIFBEX09ORUhBTEZdCisgICAgcHNyYWQgICAgICAgeG1tMiwgU0NBTEVCSVRTCisgICAgcHNyYWQgICAgICAgeG1tNywgU0NBTEVCSVRTCisKKyAgICBwYWNrc3NkdyAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisgICAgcGFja3NzZHcgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQorICAgIHBzdWJ3ICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKi1GSVgoMC43MTQpPShHLVkpSAorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMildLCB4bW01ICAgOyB3aygyKT0oRy1ZKUgKKworICAgIG1vdiAgICAgICAgIGFsLCAyICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgIGptcCAgICAgICAgIHNob3J0IC5ZbG9vcF8xc3QKKworLllsb29wXzJuZDoKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9KFItWSlICisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soMildICAgOyB4bW0yPShHLVkpSAorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tND0oQi1ZKUgKKworLllsb29wXzFzdDoKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFtyc2ldICAgICA7IHhtbTc9WSgwMTIzNDU2Nzg5QUJDREVGKQorCisgICAgcGNtcGVxdyAgICAgeG1tNiwgeG1tNgorICAgIHBzcmx3ICAgICAgIHhtbTYsIEJZVEVfQklUICAgICAgICAgIDsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICBwYW5kICAgICAgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9WSgwMjQ2OEFDRSk9WUUKKyAgICBwc3JsdyAgICAgICB4bW03LCBCWVRFX0JJVCAgICAgICAgICA7IHhtbTc9WSgxMzU3OUJERik9WU8KKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT14bW0wPShSLVkpKEwvSCkKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0yICAgICAgICAgICAgICA7IHhtbTM9eG1tMj0oRy1ZKShML0gpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PXhtbTQ9KEItWSkoTC9IKQorCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tNiAgICAgICAgICAgICAgOyB4bW0wPSgoUi1ZKStZRSk9UkU9UigwMjQ2OEFDRSkKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KChSLVkpK1lPKT1STz1SKDEzNTc5QkRGKQorICAgIHBhY2t1c3diICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD1SKDAyNDY4QUNFKioqKioqKiopCisgICAgcGFja3Vzd2IgICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPVIoMTM1NzlCREYqKioqKioqKikKKworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj0oKEctWSkrWUUpPUdFPUcoMDI0NjhBQ0UpCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSgoRy1ZKStZTyk9R089RygxMzU3OUJERikKKyAgICBwYWNrdXN3YiAgICB4bW0yLCB4bW0yICAgICAgICAgICAgICA7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorICAgIHBhY2t1c3diICAgIHhtbTMsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCisKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9KChCLVkpK1lFKT1CRT1CKDAyNDY4QUNFKQorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT0oKEItWSkrWU8pPUJPPUIoMTM1NzlCREYpCisgICAgcGFja3Vzd2IgICAgeG1tNCwgeG1tNCAgICAgICAgICAgICAgOyB4bW00PUIoMDI0NjhBQ0UqKioqKioqKikKKyAgICBwYWNrdXN3YiAgICB4bW01LCB4bW01ICAgICAgICAgICAgICA7IHhtbTU9QigxMzU3OUJERioqKioqKioqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzICA7IC0tLS0tLS0tLS0tLS0tLQorCisgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiksIHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqKQorICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiopLCB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKikKKyAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCisgICAgOyB4bW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIHhtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKQorCisgICAgcHVucGNrbGJ3ICAgeG1tQSwgeG1tQyAgICAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICBwdW5wY2tsYncgICB4bW1FLCB4bW1CICAgICAgICA7IHhtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGKQorICAgIHB1bnBja2xidyAgIHhtbUQsIHhtbUYgICAgICAgIDsgeG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYpCisKKyAgICBtb3ZkcWEgICAgICB4bW1HLCB4bW1BCisgICAgbW92ZHFhICAgICAgeG1tSCwgeG1tQQorICAgIHB1bnBja2x3ZCAgIHhtbUEsIHhtbUUgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisgICAgcHVucGNraHdkICAgeG1tRywgeG1tRSAgICAgICAgOyB4bW1HPSgwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQiAwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRikKKworICAgIHBzcmxkcSAgICAgIHhtbUgsIDIgICAgICAgICAgIDsgeG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUgLS0gLS0pCisgICAgcHNybGRxICAgICAgeG1tRSwgMiAgICAgICAgICAgOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworICAgIG1vdmRxYSAgICAgIHhtbUMsIHhtbUQKKyAgICBtb3ZkcWEgICAgICB4bW1CLCB4bW1ECisgICAgcHVucGNrbHdkICAgeG1tRCwgeG1tSCAgICAgICAgOyB4bW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCAxNSAyNSAwNiAxNiAxNyAyNyAwOCAxOCkKKyAgICBwdW5wY2tod2QgICB4bW1DLCB4bW1IICAgICAgICA7IHhtbUM9KDE5IDI5IDBBIDFBIDFCIDJCIDBDIDFDIDFEIDJEIDBFIDFFIDFGIDJGIC0tIC0tKQorCisgICAgcHNybGRxICAgICAgeG1tQiwgMiAgICAgICAgICAgOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworICAgIG1vdmRxYSAgICAgIHhtbUYsIHhtbUUKKyAgICBwdW5wY2tsd2QgICB4bW1FLCB4bW1CICAgICAgICA7IHhtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5KQorICAgIHB1bnBja2h3ZCAgIHhtbUYsIHhtbUIgICAgICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMkMgMEQgMUQgMkQgMkUgMEYgMUYgMkYgLS0gLS0gLS0gLS0pCisKKyAgICBwc2h1ZmQgICAgICB4bW1ILCB4bW1BLCAweDRFICA7IHhtbUg9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3IDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzKQorICAgIG1vdmRxYSAgICAgIHhtbUIsIHhtbUUKKyAgICBwdW5wY2tsZHEgICB4bW1BLCB4bW1EICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorICAgIHB1bnBja2xkcSAgIHhtbUUsIHhtbUggICAgICAgIDsgeG1tRT0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgMjQgMDUgMTUgMjUgMDYgMTYgMjYgMDcpCisgICAgcHVucGNraGRxICAgeG1tRCwgeG1tQiAgICAgICAgOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSkKKworICAgIHBzaHVmZCAgICAgIHhtbUgsIHhtbUcsIDB4NEUgIDsgeG1tSD0oMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYgMDggMTggMjggMDkgMEEgMUEgMkEgMEIpCisgICAgbW92ZHFhICAgICAgeG1tQiwgeG1tRgorICAgIHB1bnBja2xkcSAgIHhtbUcsIHhtbUMgICAgICAgIDsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisgICAgcHVucGNrbGRxICAgeG1tRiwgeG1tSCAgICAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRikKKyAgICBwdW5wY2toZHEgICB4bW1DLCB4bW1CICAgICAgICA7IHhtbUM9KDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGIDFGIDJGIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcHVucGNrbHFkcSAgeG1tQSwgeG1tRSAgICAgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKyAgICBwdW5wY2tscWRxICB4bW1ELCB4bW1HICAgICAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgIHB1bnBja2xxZHEgIHhtbUYsIHhtbUMgICAgICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCisKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKKworICAgIHRlc3QgICAgICAgIHJkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorLm91dDA6CisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAganogICAgICAgICAgbmVhciAuZW5kY29sdW1uCisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIwCisgICAgZGVjICAgICAgICAgYWwgICAgICAgICAgICAgICAgICAgICAgICA7IFljdHIKKyAgICBqbnogICAgICAgICBuZWFyIC5ZbG9vcF8ybmQKKworICAgIGFkZCAgICAgICAgIHJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIyCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisuY29sdW1uX3N0MzI6CisgICAgbGVhICAgICAgICAgcmN4LCBbcmN4K3JjeCoyXSAgICAgICAgICAgIDsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNgorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIG1vdmRxYSAgICAgIHhtbUEsIHhtbUYKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorLmNvbHVtbl9zdDE2OgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICA7IG91dHB0cgorICAgIG1vdmRxYSAgICAgIHhtbUEsIHhtbUQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHRoZSBsb3dlciA4IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICBzdWIgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgIHBzcmxkcSAgICAgIHhtbUEsIFNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q3OgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDQgYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgIGpiICAgICAgICAgIHNob3J0IC5jb2x1bW5fc3QzCisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9EV09SRAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICBwc3JsZHEgICAgICB4bW1BLCBTSVpFT0ZfRFdPUkQKKy5jb2x1bW5fc3QzOgorICAgIDsgU3RvcmUgdGhlIGxvd2VyIDIgYnl0ZXMgb2YgcmF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgOyBzcGFjZS4KKyAgICBtb3ZkICAgICAgICBlYXgsIHhtbUEKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MQorICAgIG1vdiAgICAgICAgIFdPUkQgW3JkaV0sIGF4CisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9XT1JECisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgc2hyICAgICAgICAgcmF4LCAxNgorLmNvbHVtbl9zdDE6CisgICAgOyBTdG9yZSB0aGUgbG93ZXIgMSBieXRlIG9mIHJheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAuZW5kY29sdW1uCisgICAgbW92ICAgICAgICAgQllURSBbcmRpXSwgYWwKKworJWVsc2UgIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKKyAgICBwY21wZXFiICAgICB4bW02LCB4bW02ICAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgIHBjbXBlcWIgICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZWxzZQorICAgIHB4b3IgICAgICAgIHhtbTYsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCisgICAgcHhvciAgICAgICAgeG1tNywgeG1tNyAgICAgICAgICAgICAgOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyVlbmRpZgorICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKyAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKKworICAgIHB1bnBja2xidyAgIHhtbUEsIHhtbUMgIDsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisgICAgcHVucGNrbGJ3ICAgeG1tRSwgeG1tRyAgOyB4bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRSkKKyAgICBwdW5wY2tsYncgICB4bW1CLCB4bW1EICA7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQorICAgIHB1bnBja2xidyAgIHhtbUYsIHhtbUggIDsgeG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcgMjkgMzkgMkIgM0IgMkQgM0QgMkYgM0YpCisKKyAgICBtb3ZkcWEgICAgICB4bW1DLCB4bW1BCisgICAgcHVucGNrbHdkICAgeG1tQSwgeG1tRSAgOyB4bW1BPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMiAwNCAxNCAyNCAzNCAwNiAxNiAyNiAzNikKKyAgICBwdW5wY2tod2QgICB4bW1DLCB4bW1FICA7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQorICAgIG1vdmRxYSAgICAgIHhtbUcsIHhtbUIKKyAgICBwdW5wY2tsd2QgICB4bW1CLCB4bW1GICA7IHhtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorICAgIHB1bnBja2h3ZCAgIHhtbUcsIHhtbUYgIDsgeG1tRz0oMDkgMTkgMjkgMzkgMEIgMUIgMkIgM0IgMEQgMUQgMkQgM0QgMEYgMUYgMkYgM0YpCisKKyAgICBtb3ZkcWEgICAgICB4bW1ELCB4bW1BCisgICAgcHVucGNrbGRxICAgeG1tQSwgeG1tQiAgOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICBwdW5wY2toZHEgICB4bW1ELCB4bW1CICA7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbUgsIHhtbUMKKyAgICBwdW5wY2tsZHEgICB4bW1DLCB4bW1HICA7IHhtbUM9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQorICAgIHB1bnBja2hkcSAgIHhtbUgsIHhtbUcgIDsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKyAgICBjbXAgICAgICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKKworICAgIHRlc3QgICAgICAgIHJkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgIGpueiAgICAgICAgIHNob3J0IC5vdXQxCisgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICBtb3ZudGRxICAgICBYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKKyAgICBqbXAgICAgICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tQworICAgIG1vdmRxdSAgICAgIFhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorLm91dDA6CisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAganogICAgICAgICAgbmVhciAuZW5kY29sdW1uCisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIwCisgICAgZGVjICAgICAgICAgYWwgICAgICAgICAgICAgICAgICAgICAgICA7IFljdHIKKyAgICBqbnogICAgICAgICBuZWFyIC5ZbG9vcF8ybmQKKworICAgIGFkZCAgICAgICAgIHJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cjEKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIyCisgICAgam1wICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisuY29sdW1uX3N0MzI6CisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1DCisgICAgbW92ZHFhICAgICAgeG1tRCwgeG1tSAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisuY29sdW1uX3N0MTY6CisgICAgY21wICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICBqYiAgICAgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICBtb3ZkcXUgICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgOyBvdXRwdHIKKyAgICBtb3ZkcWEgICAgICB4bW1BLCB4bW1ECisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKyAgICA7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICA7IHNwYWNlLgorICAgIGNtcCAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgamIgICAgICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyZGldLCB4bW1BCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgcHNybGRxICAgICAgeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CisuY29sdW1uX3N0NzoKKyAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgIDsgc3BhY2UuCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAuZW5kY29sdW1uCisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtyZGldLCB4bW1BCisKKyVlbmRpZiAgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5lbmRjb2x1bW46CisgICAgc2ZlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCis7IHIxMGQgPSBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorOyByMTEgPSBKU0FNUElNQUdFIGlucHV0X2J1ZgorOyByMTJkID0gSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyCis7IHIxMyA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgY29sbGVjdF9hcmdzIDQKKyAgICBwdXNoICAgICAgICByYngKKworICAgIG1vdiAgICAgICAgIGVheCwgcjEwZAorCisgICAgbW92ICAgICAgICAgcmRpLCByMTEKKyAgICBtb3YgICAgICAgICBlY3gsIHIxMmQKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QQVJSQVkgW3JkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBBUlJBWSBbcmRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICBtb3YgICAgICAgICByZGksIHIxMworICAgIGxlYSAgICAgICAgIHJzaSwgW3JzaStyY3gqU0laRU9GX0pTQU1QUk9XXQorCisgICAgcHVzaCAgICAgICAgcmR4ICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjIKKyAgICBwdXNoICAgICAgICByYnggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMQorICAgIHB1c2ggICAgICAgIHJzaSAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIwMAorICAgIG1vdiAgICAgICAgIHJieCwgcnNwCisKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByY3gKKyAgICBwdXNoICAgICAgICByYXgKKworICAgICVpZmRlZiBXSU42NAorICAgIG1vdiAgICAgICAgIHI4LCByY3gKKyAgICBtb3YgICAgICAgICByOSwgcmRpCisgICAgbW92ICAgICAgICAgcmN4LCByYXgKKyAgICBtb3YgICAgICAgICByZHgsIHJieAorICAgICVlbHNlCisgICAgbW92ICAgICAgICAgcmR4LCByY3gKKyAgICBtb3YgICAgICAgICByY3gsIHJkaQorICAgIG1vdiAgICAgICAgIHJkaSwgcmF4CisgICAgbW92ICAgICAgICAgcnNpLCByYngKKyAgICAlZW5kaWYKKworICAgIGNhbGwgICAgICAgIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworICAgIHBvcCAgICAgICAgIHJheAorICAgIHBvcCAgICAgICAgIHJjeAorICAgIHBvcCAgICAgICAgIHJkaQorICAgIHBvcCAgICAgICAgIHJzaQorICAgIHBvcCAgICAgICAgIHJieAorICAgIHBvcCAgICAgICAgIHJkeAorCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdHIxCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB0cjAxCisKKyAgICBwdXNoICAgICAgICByZHggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgIHB1c2ggICAgICAgIHJieCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgcHVzaCAgICAgICAgcnNpICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjAwCisgICAgbW92ICAgICAgICAgcmJ4LCByc3AKKworICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJjeAorICAgIHB1c2ggICAgICAgIHJheAorCisgICAgJWlmZGVmIFdJTjY0CisgICAgbW92ICAgICAgICAgcjgsIHJjeAorICAgIG1vdiAgICAgICAgIHI5LCByZGkKKyAgICBtb3YgICAgICAgICByY3gsIHJheAorICAgIG1vdiAgICAgICAgIHJkeCwgcmJ4CisgICAgJWVsc2UKKyAgICBtb3YgICAgICAgICByZHgsIHJjeAorICAgIG1vdiAgICAgICAgIHJjeCwgcmRpCisgICAgbW92ICAgICAgICAgcmRpLCByYXgKKyAgICBtb3YgICAgICAgICByc2ksIHJieAorICAgICVlbmRpZgorCisgICAgY2FsbCAgICAgICAgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCisgICAgcG9wICAgICAgICAgcmF4CisgICAgcG9wICAgICAgICAgcmN4CisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmJ4CisgICAgcG9wICAgICAgICAgcmR4CisKKyAgICBwb3AgICAgICAgICByYngKKyAgICB1bmNvbGxlY3RfYXJncyA0CisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkc2FtcGxlLWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamRzYW1wbGUtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmYTVjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkc2FtcGxlLWF2eDIuYXNtCkBAIC0wLDAgKzEsNjk3IEBACis7Cis7IGpkc2FtcGxlLmFzbSAtIHVwc2FtcGxpbmcgKDY0LWJpdCBBVlgyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfZmFuY3lfdXBzYW1wbGVfYXZ4MikKKworRVhUTihqY29uc3RfZmFuY3lfdXBzYW1wbGVfYXZ4Mik6CisKK1BXX09ORSAgIHRpbWVzIDE2IGR3IDEKK1BXX1RXTyAgIHRpbWVzIDE2IGR3IDIKK1BXX1RIUkVFIHRpbWVzIDE2IGR3IDMKK1BXX1NFVkVOIHRpbWVzIDE2IGR3IDcKK1BXX0VJR0hUIHRpbWVzIDE2IGR3IDgKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOworOyBUaGUgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBwaXhlbCBjZW50ZXJzLAorOyBhbHNvIGtub3duIGFzIGEgInRyaWFuZ2xlIGZpbHRlciIuICBUaGlzIGlzIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4KKzsgc3BlZWQgYW5kIHZpc3VhbCBxdWFsaXR5LiAgVGhlIGNlbnRlcnMgb2YgdGhlIG91dHB1dCBwaXhlbHMgYXJlIDEvNCBhbmQgMy80Cis7IG9mIHRoZSB3YXkgYmV0d2VlbiBpbnB1dCBwaXhlbCBjZW50ZXJzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9hdngyKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworOworCis7IHIxMCA9IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorOyByMTFkID0gSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aAorOyByMTIgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjEzID0gSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgcHVzaF94bW0gICAgMworICAgIGNvbGxlY3RfYXJncyA0CisKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMWQgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByY3gsIHIxMCAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMiAgICAgICAgICAgICAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICByZGksIHIxMworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBBUlJBWSBbcmRpXSAgIDsgb3V0cHV0X2RhdGEKKworICAgIHZweG9yICAgICAgIHltbTAsIHltbTAsIHltbTAgICAgICAgICAgICAgICAgIDsgeW1tMD0oYWxsIDAncykKKyAgICB2cGNtcGVxYiAgICB4bW05LCB4bW05LCB4bW05CisgICAgdnBzcmxkcSAgICAgeG1tMTAsIHhtbTksIChTSVpFT0ZfWE1NV09SRC0xKSAgOyAoZmYgLS0gLS0gLS0gLi4uIC0tIC0tKSBMU0IgaXMgZmYKKworICAgIHZwc2xsZHEgICAgIHhtbTksIHhtbTksIChTSVpFT0ZfWE1NV09SRC0xKQorICAgIHZwZXJtMmkxMjggIHltbTksIHltbTksIHltbTksIDEgICAgICAgICAgICAgIDsgKC0tLS0gLS0tLSAuLi4gLS0tLSAtLS0tIGZmKSBNU0IgaXMgZmYKKworLnJvd2xvb3A6CisgICAgcHVzaCAgICAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByc2kKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICA7IG91dHB0cgorCisgICAgdGVzdCAgICAgICAgcmF4LCBTSVpFT0ZfWU1NV09SRC0xCisgICAganogICAgICAgICAgc2hvcnQgLnNraXAKKyAgICBtb3YgICAgICAgICBkbCwgSlNBTVBMRSBbcnNpKyhyYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgbW92ICAgICAgICAgSlNBTVBMRSBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsICAgIDsgaW5zZXJ0IGEgZHVtbXkgc2FtcGxlCisuc2tpcDoKKyAgICB2cGFuZCAgICAgICB5bW03LCB5bW0xMCwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdCisKKyAgICBhZGQgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQtMQorICAgIGFuZCAgICAgICAgIHJheCwgYnl0ZSAtU0laRU9GX1lNTVdPUkQKKyAgICBjbXAgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9sYXN0OgorICAgIHZwYW5kICAgICAgIHltbTYsIHltbTksIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIGptcCAgICAgICAgIHNob3J0IC51cHNhbXBsZQorCisuY29sdW1ubG9vcDoKKyAgICB2bW92ZHF1ICAgICB5bW02LCBZTU1XT1JEIFtyc2krMSpTSVpFT0ZfWU1NV09SRF0KKyAgICB2cGVybTJpMTI4ICB5bW02LCB5bW0wLCB5bW02LCAweDIwCisgICAgdnBzbGxkcSAgICAgeW1tNiwgeW1tNiwgMTUKKworLnVwc2FtcGxlOgorICAgIHZtb3ZkcXUgICAgIHltbTEsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW0xPSggMCAgMSAgMiAuLi4gMjkgMzAgMzEpCisKKyAgICB2cGVybTJpMTI4ICB5bW0yLCB5bW0wLCB5bW0xLCAweDIwCisgICAgdnBhbGlnbnIgICAgeW1tMiwgeW1tMSwgeW1tMiwgMTUgICAgICAgICAgICA7IHltbTI9KC0tICAwICAxIC4uLiAyOCAyOSAzMCkKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW0wLCB5bW0xLCAweDAzCisgICAgdnBhbGlnbnIgICAgeW1tMywgeW1tNCwgeW1tMSwgMSAgICAgICAgICAgICA7IHltbTM9KCAxICAyICAzIC4uLiAzMCAzMSAtLSkKKworICAgIHZwb3IgICAgICAgIHltbTIsIHltbTIsIHltbTcgICAgICAgICAgICAgICAgOyB5bW0yPSgtMSAgMCAgMSAuLi4gMjggMjkgMzApCisgICAgdnBvciAgICAgICAgeW1tMywgeW1tMywgeW1tNiAgICAgICAgICAgICAgICA7IHltbTM9KCAxICAyICAzIC4uLiAzMCAzMSAzMikKKworICAgIHZwc3JsZHEgICAgIHltbTcsIHltbTQsIChTSVpFT0ZfWE1NV09SRC0xKSAgOyB5bW03PSgzMSAtLSAtLSAuLi4gLS0gLS0gLS0pCisKKyAgICB2cHVucGNraGJ3ICB5bW00LCB5bW0xLCB5bW0wICAgICAgICAgICAgICAgIDsgeW1tND0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnB1bnBja2xidyAgeW1tNSwgeW1tMSwgeW1tMCAgICAgICAgICAgICAgICA7IHltbTU9KCAwICAxICAyICAzICA0ICA1ICA2ICA3IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzKQorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTUsIHltbTQsIDB4MjAgICAgICAgICAgOyB5bW0xPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW01LCB5bW00LCAweDMxICAgICAgICAgIDsgeW1tND0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cHVucGNraGJ3ICB5bW01LCB5bW0yLCB5bW0wICAgICAgICAgICAgICAgIDsgeW1tNT0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzApCisgICAgdnB1bnBja2xidyAgeW1tNiwgeW1tMiwgeW1tMCAgICAgICAgICAgICAgICA7IHltbTY9KC0xICAwICAxICAyICAzICA0ICA1ICA2IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyKQorICAgIHZwZXJtMmkxMjggIHltbTIsIHltbTYsIHltbTUsIDB4MjAgICAgICAgICAgOyB5bW0yPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKyAgICB2cGVybTJpMTI4ICB5bW01LCB5bW02LCB5bW01LCAweDMxICAgICAgICAgIDsgeW1tNT0oMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzApCisKKyAgICB2cHVucGNraGJ3ICB5bW02LCB5bW0zLCB5bW0wICAgICAgICAgICAgICAgIDsgeW1tNj0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQpCisgICAgdnB1bnBja2xidyAgeW1tOCwgeW1tMywgeW1tMCAgICAgICAgICAgICAgICA7IHltbTg9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyKQorICAgIHZwZXJtMmkxMjggIHltbTMsIHltbTgsIHltbTYsIDB4MjAgICAgICAgICAgOyB5bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKyAgICB2cGVybTJpMTI4ICB5bW02LCB5bW04LCB5bW02LCAweDMxICAgICAgICAgIDsgeW1tNj0oMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgMzIpCisKKyAgICB2cG11bGx3ICAgICB5bW0xLCB5bW0xLCBbcmVsIFBXX1RIUkVFXQorICAgIHZwbXVsbHcgICAgIHltbTQsIHltbTQsIFtyZWwgUFdfVEhSRUVdCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgW3JlbCBQV19PTkVdCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgW3JlbCBQV19PTkVdCisgICAgdnBhZGR3ICAgICAgeW1tMywgeW1tMywgW3JlbCBQV19UV09dCisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNiwgW3JlbCBQV19UV09dCisKKyAgICB2cGFkZHcgICAgICB5bW0yLCB5bW0yLCB5bW0xCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgeW1tNAorICAgIHZwc3JsdyAgICAgIHltbTIsIHltbTIsIDIgICAgICAgICAgICAgICAgICAgOyB5bW0yPU91dExFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCAxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKyAgICB2cHNybHcgICAgICB5bW01LCB5bW01LCAyICAgICAgICAgICAgICAgICAgIDsgeW1tNT1PdXRIRT0oMzIgMzQgMzYgMzggNDAgNDIgNDQgNDYgNDggNTAgNTIgNTQgNTYgNTggNjAgNjIpCisgICAgdnBhZGR3ICAgICAgeW1tMywgeW1tMywgeW1tMQorICAgIHZwYWRkdyAgICAgIHltbTYsIHltbTYsIHltbTQKKyAgICB2cHNybHcgICAgICB5bW0zLCB5bW0zLCAyICAgICAgICAgICAgICAgICAgIDsgeW1tMz1PdXRMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUgMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisgICAgdnBzcmx3ICAgICAgeW1tNiwgeW1tNiwgMiAgICAgICAgICAgICAgICAgICA7IHltbTY9T3V0SE89KDMzIDM1IDM3IDM5IDQxIDQzIDQ1IDQ3IDQ5IDUxIDUzIDU1IDU3IDU5IDYxIDYzKQorCisgICAgdnBzbGx3ICAgICAgeW1tMywgeW1tMywgQllURV9CSVQKKyAgICB2cHNsbHcgICAgICB5bW02LCB5bW02LCBCWVRFX0JJVAorICAgIHZwb3IgICAgICAgIHltbTIsIHltbTIsIHltbTMgICAgICAgICAgICAgICAgOyB5bW0yPU91dEw9KCAwICAxICAyIC4uLiAyOSAzMCAzMSkKKyAgICB2cG9yICAgICAgICB5bW01LCB5bW01LCB5bW02ICAgICAgICAgICAgICAgIDsgeW1tNT1PdXRIPSgzMiAzMyAzNCAuLi4gNjEgNjIgNjMpCisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTIKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTUKKworICAgIHN1YiAgICAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyCisgICAgY21wICAgICAgICAgcmF4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamEgICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgIHRlc3QgICAgICAgIGVheCwgZWF4CisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcF9sYXN0CisKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKyAgICBwb3AgICAgICAgICByYXgKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2RhdGEKKyAgICBkZWMgICAgICAgICByY3ggICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICB2emVyb3VwcGVyCisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIHBvcF94bW0gICAgIDMKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfYXZ4MihpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworOyByMTAgPSBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKzsgcjExZCA9IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKKzsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCis7IHIxMyA9IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCislZGVmaW5lIHdrKGkpICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWU1NV09SRCAgOyB5bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICA0CisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgc3ViICAgICAgICAgcnNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWU1NV09SRCkgIDsgYWxpZ24gdG8gMjU2IGJpdHMKKyAgICBtb3YgICAgICAgICBbcnNwXSwgcmF4CisgICAgbW92ICAgICAgICAgcmJwLCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgbGVhICAgICAgICAgcnNwLCBbd2soMCldCisgICAgcHVzaF94bW0gICAgMworICAgIGNvbGxlY3RfYXJncyA0CisgICAgcHVzaCAgICAgICAgcmJ4CisKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMWQgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIHRlc3QgICAgICAgIHJheCwgcmF4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByY3gsIHIxMCAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMiAgICAgICAgICAgICAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICByZGksIHIxMworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBBUlJBWSBbcmRpXSAgIDsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIHJheCAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgcHVzaCAgICAgICAgcmN4CisgICAgcHVzaCAgICAgICAgcmRpCisgICAgcHVzaCAgICAgICAgcnNpCisKKyAgICBtb3YgICAgICAgICByY3gsIEpTQU1QUk9XIFtyc2ktMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMShhYm92ZSkKKyAgICBtb3YgICAgICAgICByYngsIEpTQU1QUk9XIFtyc2krMCpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMAorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgaW5wdHIxKGJlbG93KQorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMAorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMQorCisgICAgdnB4b3IgICAgICAgeW1tOCwgeW1tOCwgeW1tOCAgICAgICAgICAgICAgICAgOyB5bW04PShhbGwgMCdzKQorICAgIHZwY21wZXFiICAgIHhtbTksIHhtbTksIHhtbTkKKyAgICB2cHNybGRxICAgICB4bW0xMCwgeG1tOSwgKFNJWkVPRl9YTU1XT1JELTIpICA7IChmZmZmIC0tLS0gLS0tLSAuLi4gLS0tLSAtLS0tKSBMU0IgaXMgZmZmZgorICAgIHZwc2xsZHEgICAgIHhtbTksIHhtbTksIChTSVpFT0ZfWE1NV09SRC0yKQorICAgIHZwZXJtMmkxMjggIHltbTksIHltbTksIHltbTksIDEgICAgICAgICAgICAgIDsgKC0tLS0gLS0tLSAuLi4gLS0tLSAtLS0tIGZmZmYpIE1TQiBpcyBmZmZmCisKKyAgICB0ZXN0ICAgICAgICByYXgsIFNJWkVPRl9ZTU1XT1JELTEKKyAgICBqeiAgICAgICAgICBzaG9ydCAuc2tpcAorICAgIHB1c2ggICAgICAgIHJkeAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtyY3grKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtyY3grcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKyAgICBtb3YgICAgICAgICBkbCwgSlNBTVBMRSBbcmJ4KyhyYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgbW92ICAgICAgICAgSlNBTVBMRSBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgbW92ICAgICAgICAgZGwsIEpTQU1QTEUgW3JzaSsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgIG1vdiAgICAgICAgIEpTQU1QTEUgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQorICAgIHBvcCAgICAgICAgIHJkeAorLnNraXA6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKKworICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW3JieCswKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW0wPXJvd1sgMF1bMF0KKyAgICB2bW92ZHF1ICAgICB5bW0xLCBZTU1XT1JEIFtyY3grMCpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tMT1yb3dbLTFdWzBdCisgICAgdm1vdmRxdSAgICAgeW1tMiwgWU1NV09SRCBbcnNpKzAqU0laRU9GX1lNTVdPUkRdICA7IHltbTI9cm93WysxXVswXQorCisgICAgdnB1bnBja2hidyAgeW1tNCwgeW1tMCwgeW1tOCAgICAgICAgOyB5bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnB1bnBja2xidyAgeW1tNSwgeW1tMCwgeW1tOCAgICAgICAgOyB5bW01PXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMpCisgICAgdnBlcm0yaTEyOCAgeW1tMCwgeW1tNSwgeW1tNCwgMHgyMCAgOyB5bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdnBlcm0yaTEyOCAgeW1tNCwgeW1tNSwgeW1tNCwgMHgzMSAgOyB5bW00PXJvd1sgMF0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cHVucGNraGJ3ICB5bW01LCB5bW0xLCB5bW04ICAgICAgICA7IHltbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKyAgICB2cHVucGNrbGJ3ICB5bW02LCB5bW0xLCB5bW04ICAgICAgICA7IHltbTY9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMykKKyAgICB2cGVybTJpMTI4ICB5bW0xLCB5bW02LCB5bW01LCAweDIwICA7IHltbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGVybTJpMTI4ICB5bW01LCB5bW02LCB5bW01LCAweDMxICA7IHltbTU9cm93Wy0xXSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZwdW5wY2toYncgIHltbTYsIHltbTIsIHltbTggICAgICAgIDsgeW1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorICAgIHZwdW5wY2tsYncgIHltbTMsIHltbTIsIHltbTggICAgICAgIDsgeW1tMz1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzKQorICAgIHZwZXJtMmkxMjggIHltbTIsIHltbTMsIHltbTYsIDB4MjAgIDsgeW1tMj1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwZXJtMmkxMjggIHltbTYsIHltbTMsIHltbTYsIDB4MzEgIDsgeW1tNj1yb3dbKzFdKDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdnBtdWxsdyAgICAgeW1tMCwgeW1tMCwgW3JlbCBQV19USFJFRV0KKyAgICB2cG11bGx3ICAgICB5bW00LCB5bW00LCBbcmVsIFBXX1RIUkVFXQorCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgeW1tMCAgICAgICAgOyB5bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCB5bW00ICAgICAgICA7IHltbTU9SW50MEg9KDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTAgICAgICAgIDsgeW1tMj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdnBhZGR3ICAgICAgeW1tNiwgeW1tNiwgeW1tNCAgICAgICAgOyB5bW02PUludDFIPSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkeCswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMSAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmR4KzEqU0laRU9GX1lNTVdPUkRdLCB5bW01ICA7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tNgorCisgICAgdnBhbmQgICAgICAgeW1tMSwgeW1tMSwgeW1tMTAgICAgICAgOyB5bW0xPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICB2cGFuZCAgICAgICB5bW0yLCB5bW0yLCB5bW0xMCAgICAgICA7IHltbTI9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMCldLCB5bW0xCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMSldLCB5bW0yCisKKyAgICBhZGQgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQtMQorICAgIGFuZCAgICAgICAgIHJheCwgYnl0ZSAtU0laRU9GX1lNTVdPUkQKKyAgICBjbXAgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9sYXN0OgorICAgIDsgLS0gcHJvY2VzcyB0aGUgbGFzdCBjb2x1bW4gYmxvY2sKKworICAgIHZwYW5kICAgICAgIHltbTEsIHltbTksIFlNTVdPUkQgW3JkeCsxKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZwYW5kICAgICAgIHltbTIsIHltbTksIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXQorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMildLCB5bW0xICAgOyB5bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAzMSkKKyAgICB2bW92ZHFhICAgICBZTU1XT1JEIFt3aygzKV0sIHltbTIgICA7IHltbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDMxKQorCisgICAgam1wICAgICAgICAgbmVhciAudXBzYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworCisgICAgdm1vdmRxdSAgICAgeW1tMCwgWU1NV09SRCBbcmJ4KzEqU0laRU9GX1lNTVdPUkRdICA7IHltbTA9cm93WyAwXVsxXQorICAgIHZtb3ZkcXUgICAgIHltbTEsIFlNTVdPUkQgW3JjeCsxKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW0xPXJvd1stMV1bMV0KKyAgICB2bW92ZHF1ICAgICB5bW0yLCBZTU1XT1JEIFtyc2krMSpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tMj1yb3dbKzFdWzFdCisKKyAgICB2cHVucGNraGJ3ICB5bW00LCB5bW0wLCB5bW04ICAgICAgICA7IHltbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKyAgICB2cHVucGNrbGJ3ICB5bW01LCB5bW0wLCB5bW04ICAgICAgICA7IHltbTU9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMykKKyAgICB2cGVybTJpMTI4ICB5bW0wLCB5bW01LCB5bW00LCAweDIwICA7IHltbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW01LCB5bW00LCAweDMxICA7IHltbTQ9cm93WyAwXSgxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSkKKworICAgIHZwdW5wY2toYncgIHltbTUsIHltbTEsIHltbTggICAgICAgIDsgeW1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorICAgIHZwdW5wY2tsYncgIHltbTYsIHltbTEsIHltbTggICAgICAgIDsgeW1tNj1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzKQorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTYsIHltbTUsIDB4MjAgIDsgeW1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwZXJtMmkxMjggIHltbTUsIHltbTYsIHltbTUsIDB4MzEgIDsgeW1tNT1yb3dbLTFdKDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdnB1bnBja2hidyAgeW1tNiwgeW1tMiwgeW1tOCAgICAgICAgOyB5bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnB1bnBja2xidyAgeW1tNywgeW1tMiwgeW1tOCAgICAgICAgOyB5bW03PXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMpCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tNywgeW1tNiwgMHgyMCAgOyB5bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgdnBlcm0yaTEyOCAgeW1tNiwgeW1tNywgeW1tNiwgMHgzMSAgOyB5bW02PXJvd1srMV0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cG11bGx3ICAgICB5bW0wLCB5bW0wLCBbcmVsIFBXX1RIUkVFXQorICAgIHZwbXVsbHcgICAgIHltbTQsIHltbTQsIFtyZWwgUFdfVEhSRUVdCisKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW0wICAgICAgICA7IHltbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIHltbTQgICAgICAgIDsgeW1tNT1JbnQwSD0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tMCAgICAgICAgOyB5bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2cGFkZHcgICAgICB5bW02LCB5bW02LCB5bW00ICAgICAgICA7IHltbTY9SW50MUg9KDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxKQorCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmR4KzIqU0laRU9GX1lNTVdPUkRdLCB5bW0xICA7IHRlbXBvcmFyaWx5IHNhdmUKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyZHgrMypTSVpFT0ZfWU1NV09SRF0sIHltbTUgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzIqU0laRU9GX1lNTVdPUkRdLCB5bW0yCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzMqU0laRU9GX1lNTVdPUkRdLCB5bW02CisKKyAgICB2cGVybTJpMTI4ICB5bW0xLCB5bW04LCB5bW0xLCAweDIwCisgICAgdnBzbGxkcSAgICAgeW1tMSwgeW1tMSwgMTQgICAgICAgICAgOyB5bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKyAgICB2cGVybTJpMTI4ICB5bW0yLCB5bW04LCB5bW0yLCAweDIwCisgICAgdnBzbGxkcSAgICAgeW1tMiwgeW1tMiwgMTQgICAgICAgICAgOyB5bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKworICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDIpXSwgeW1tMQorICAgIHZtb3ZkcWEgICAgIFlNTVdPUkQgW3drKDMpXSwgeW1tMgorCisudXBzYW1wbGU6CisgICAgOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKworICAgIHZtb3ZkcXUgICAgIHltbTcsIFlNTVdPUkQgW3JkeCswKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW03PUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2bW92ZHF1ICAgICB5bW0zLCBZTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tMz1JbnQwSD0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cGVybTJpMTI4ICB5bW0wLCB5bW04LCB5bW03LCAweDAzCisgICAgdnBhbGlnbnIgICAgeW1tMCwgeW1tMCwgeW1tNywgMiAgICAgOyB5bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW04LCB5bW0zLCAweDIwCisgICAgdnBzbGxkcSAgICAgeW1tNCwgeW1tNCwgMTQgICAgICAgICAgOyB5bW00PSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNikKKworICAgIHZwZXJtMmkxMjggIHltbTUsIHltbTgsIHltbTcsIDB4MDMKKyAgICB2cHNybGRxICAgICB5bW01LCB5bW01LCAxNCAgICAgICAgICA7IHltbTU9KDE1IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHZwZXJtMmkxMjggIHltbTYsIHltbTgsIHltbTMsIDB4MjAKKyAgICB2cGFsaWduciAgICB5bW02LCB5bW0zLCB5bW02LCAxNCAgICA7IHltbTY9KC0tIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwKQorCisgICAgdnBvciAgICAgICAgeW1tMCwgeW1tMCwgeW1tNCAgICAgICAgOyB5bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKyAgICB2cG9yICAgICAgICB5bW01LCB5bW01LCB5bW02ICAgICAgICA7IHltbTU9KDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwKQorCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tOCwgeW1tMywgMHgwMworICAgIHZwYWxpZ25yICAgIHltbTIsIHltbTIsIHltbTMsIDIgICAgIDsgeW1tMj0oMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgLS0pCisgICAgdnBlcm0yaTEyOCAgeW1tNCwgeW1tOCwgeW1tMywgMHgwMworICAgIHZwc3JsZHEgICAgIHltbTQsIHltbTQsIDE0ICAgICAgICAgIDsgeW1tND0oMzEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tOCwgeW1tNywgMHgyMAorICAgIHZwYWxpZ25yICAgIHltbTEsIHltbTcsIHltbTEsIDE0ICAgIDsgeW1tMT0oLS0gIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKyAgICB2cG9yICAgICAgICB5bW0xLCB5bW0xLCBZTU1XT1JEIFt3aygwKV0gIDsgeW1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisgICAgdnBvciAgICAgICAgeW1tMiwgeW1tMiwgWU1NV09SRCBbd2soMildICA7IHltbTI9KDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyKQorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMCldLCB5bW00CisKKyAgICB2cG11bGx3ICAgICB5bW03LCB5bW03LCBbcmVsIFBXX1RIUkVFXQorICAgIHZwbXVsbHcgICAgIHltbTMsIHltbTMsIFtyZWwgUFdfVEhSRUVdCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgW3JlbCBQV19FSUdIVF0KKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCBbcmVsIFBXX0VJR0hUXQorICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIFtyZWwgUFdfU0VWRU5dCisgICAgdnBhZGR3ICAgICAgeW1tMiwgW3JlbCBQV19TRVZFTl0KKworICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTEsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW01LCB5bW01LCB5bW0zCisgICAgdnBzcmx3ICAgICAgeW1tMSwgeW1tMSwgNCAgICAgICAgICAgOyB5bW0xPU91dDBMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQgMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgdnBzcmx3ICAgICAgeW1tNSwgeW1tNSwgNCAgICAgICAgICAgOyB5bW01PU91dDBIRT0oMzIgMzQgMzYgMzggNDAgNDIgNDQgNDYgNDggNTAgNTIgNTQgNTYgNTggNjAgNjIpCisgICAgdnBhZGR3ICAgICAgeW1tMCwgeW1tMCwgeW1tNworICAgIHZwYWRkdyAgICAgIHltbTIsIHltbTIsIHltbTMKKyAgICB2cHNybHcgICAgICB5bW0wLCB5bW0wLCA0ICAgICAgICAgICA7IHltbTA9T3V0MExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSAxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKyAgICB2cHNybHcgICAgICB5bW0yLCB5bW0yLCA0ICAgICAgICAgICA7IHltbTI9T3V0MEhPPSgzMyAzNSAzNyAzOSA0MSA0MyA0NSA0NyA0OSA1MSA1MyA1NSA1NyA1OSA2MSA2MykKKworICAgIHZwc2xsdyAgICAgIHltbTAsIHltbTAsIEJZVEVfQklUCisgICAgdnBzbGx3ICAgICAgeW1tMiwgeW1tMiwgQllURV9CSVQKKyAgICB2cG9yICAgICAgICB5bW0xLCB5bW0xLCB5bW0wICAgICAgICA7IHltbTE9T3V0MEw9KCAwICAxICAyIC4uLiAyOSAzMCAzMSkKKyAgICB2cG9yICAgICAgICB5bW01LCB5bW01LCB5bW0yICAgICAgICA7IHltbTU9T3V0MEg9KDMyIDMzIDM0IC4uLiA2MSA2MiA2MykKKworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkeCswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkeCsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tNQorCisgICAgOyAtLSBwcm9jZXNzIHRoZSBsb3dlciByb3cKKworICAgIHZtb3ZkcXUgICAgIHltbTYsIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSAgOyB5bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICB2bW92ZHF1ICAgICB5bW00LCBZTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWU1NV09SRF0gIDsgeW1tND1JbnQxSD0oMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEpCisKKyAgICB2cGVybTJpMTI4ICB5bW03LCB5bW04LCB5bW02LCAweDAzCisgICAgdnBhbGlnbnIgICAgeW1tNywgeW1tNywgeW1tNiwgMiAgICAgOyB5bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKKyAgICB2cGVybTJpMTI4ICB5bW0zLCB5bW04LCB5bW00LCAweDIwCisgICAgdnBzbGxkcSAgICAgeW1tMywgeW1tMywgMTQgICAgICAgICAgOyB5bW0zPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNikKKworICAgIHZwZXJtMmkxMjggIHltbTAsIHltbTgsIHltbTYsIDB4MDMKKyAgICB2cHNybGRxICAgICB5bW0wLCB5bW0wLCAxNCAgICAgICAgICA7IHltbTA9KDE1IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHZwZXJtMmkxMjggIHltbTIsIHltbTgsIHltbTQsIDB4MjAKKyAgICB2cGFsaWduciAgICB5bW0yLCB5bW00LCB5bW0yLCAxNCAgICA7IHltbTI9KC0tIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwKQorCisgICAgdnBvciAgICAgICAgeW1tNywgeW1tNywgeW1tMyAgICAgICAgOyB5bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKyAgICB2cG9yICAgICAgICB5bW0wLCB5bW0wLCB5bW0yICAgICAgICA7IHltbTA9KDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwKQorCisgICAgdnBlcm0yaTEyOCAgeW1tNSwgeW1tOCwgeW1tNCwgMHgwMworICAgIHZwYWxpZ25yICAgIHltbTUsIHltbTUsIHltbTQsIDIgICAgIDsgeW1tNT0oMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgLS0pCisgICAgdnBlcm0yaTEyOCAgeW1tMywgeW1tOCwgeW1tNCwgMHgwMworICAgIHZwc3JsZHEgICAgIHltbTMsIHltbTMsIDE0ICAgICAgICAgIDsgeW1tMz0oMzEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tOCwgeW1tNiwgMHgyMAorICAgIHZwYWxpZ25yICAgIHltbTEsIHltbTYsIHltbTEsIDE0ICAgIDsgeW1tMT0oLS0gIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKyAgICB2cG9yICAgICAgICB5bW0xLCB5bW0xLCBZTU1XT1JEIFt3aygxKV0gIDsgeW1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisgICAgdnBvciAgICAgICAgeW1tNSwgeW1tNSwgWU1NV09SRCBbd2soMyldICA7IHltbTU9KDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyKQorCisgICAgdm1vdmRxYSAgICAgWU1NV09SRCBbd2soMSldLCB5bW0zCisKKyAgICB2cG11bGx3ICAgICB5bW02LCB5bW02LCBbcmVsIFBXX1RIUkVFXQorICAgIHZwbXVsbHcgICAgIHltbTQsIHltbTQsIFtyZWwgUFdfVEhSRUVdCisgICAgdnBhZGR3ICAgICAgeW1tMSwgeW1tMSwgW3JlbCBQV19FSUdIVF0KKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCBbcmVsIFBXX0VJR0hUXQorICAgIHZwYWRkdyAgICAgIHltbTcsIHltbTcsIFtyZWwgUFdfU0VWRU5dCisgICAgdnBhZGR3ICAgICAgeW1tNSwgeW1tNSwgW3JlbCBQV19TRVZFTl0KKworICAgIHZwYWRkdyAgICAgIHltbTEsIHltbTEsIHltbTYKKyAgICB2cGFkZHcgICAgICB5bW0wLCB5bW0wLCB5bW00CisgICAgdnBzcmx3ICAgICAgeW1tMSwgeW1tMSwgNCAgICAgICAgICAgOyB5bW0xPU91dDFMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQgMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgdnBzcmx3ICAgICAgeW1tMCwgeW1tMCwgNCAgICAgICAgICAgOyB5bW0wPU91dDFIRT0oMzIgMzQgMzYgMzggNDAgNDIgNDQgNDYgNDggNTAgNTIgNTQgNTYgNTggNjAgNjIpCisgICAgdnBhZGR3ICAgICAgeW1tNywgeW1tNywgeW1tNgorICAgIHZwYWRkdyAgICAgIHltbTUsIHltbTUsIHltbTQKKyAgICB2cHNybHcgICAgICB5bW03LCB5bW03LCA0ICAgICAgICAgICA7IHltbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSAxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKyAgICB2cHNybHcgICAgICB5bW01LCB5bW01LCA0ICAgICAgICAgICA7IHltbTU9T3V0MUhPPSgzMyAzNSAzNyAzOSA0MSA0MyA0NSA0NyA0OSA1MSA1MyA1NSA1NyA1OSA2MSA2MykKKworICAgIHZwc2xsdyAgICAgIHltbTcsIHltbTcsIEJZVEVfQklUCisgICAgdnBzbGx3ICAgICAgeW1tNSwgeW1tNSwgQllURV9CSVQKKyAgICB2cG9yICAgICAgICB5bW0xLCB5bW0xLCB5bW03ICAgICAgICA7IHltbTE9T3V0MUw9KCAwICAxICAyIC4uLiAyOSAzMCAzMSkKKyAgICB2cG9yICAgICAgICB5bW0wLCB5bW0wLCB5bW01ICAgICAgICA7IHltbTA9T3V0MUg9KDMyIDMzIDM0IC4uLiA2MSA2MiA2MykKKworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSswKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW3JkaSsxKlNJWkVPRl9ZTU1XT1JEXSwgeW1tMAorCisgICAgc3ViICAgICAgICAgcmF4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgYWRkICAgICAgICAgcmN4LCBieXRlIDEqU0laRU9GX1lNTVdPUkQgIDsgaW5wdHIxKGFib3ZlKQorICAgIGFkZCAgICAgICAgIHJieCwgYnl0ZSAxKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMAorICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9ZTU1XT1JEICA7IGlucHRyMShiZWxvdykKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRCAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX1lNTVdPUkQgIDsgb3V0cHRyMQorICAgIGNtcCAgICAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWU1NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmN4CisgICAgcG9wICAgICAgICAgcmF4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdnplcm91cHBlcgorICAgIHVuY29sbGVjdF9hcmdzIDQKKyAgICBwb3BfeG1tICAgICAzCisgICAgbW92ICAgICAgICAgcnNwLCByYnAgICAgICAgICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICBwb3AgICAgICAgICByc3AgICAgICAgICAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOyBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfdXBzYW1wbGVfYXZ4MihpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworOworCis7IHIxMCA9IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorOyByMTFkID0gSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKzsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCis7IHIxMyA9IEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaDJ2MV91cHNhbXBsZV9hdngyKQorCitFWFROKGpzaW1kX2gydjFfdXBzYW1wbGVfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyA0CisKKyAgICBtb3YgICAgICAgICBlZHgsIHIxMWQKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgKFNJWkVPRl9ZTU1XT1JELTEpCisgICAgYW5kICAgICAgICAgcmR4LCAtU0laRU9GX1lNTVdPUkQKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIHJjeCwgcjEwICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMiAgICAgICAgICAgICAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICByZGksIHIxMworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBBUlJBWSBbcmRpXSAgIDsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJzaQorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyCisgICAgbW92ICAgICAgICAgcmF4LCByZHggICAgICAgICAgICAgICAgOyBjb2xjdHIKKy5jb2x1bW5sb29wOgorCisgICAgY21wICAgICAgICAgcmF4LCBieXRlIFNJWkVPRl9ZTU1XT1JECisgICAgamEgICAgICAgICAgbmVhciAuYWJvdmVfMTYKKworICAgIHZtb3ZkcXUgICAgIHhtbTAsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorICAgIHZwdW5wY2toYncgIHhtbTEsIHhtbTAsIHhtbTAKKyAgICB2cHVucGNrbGJ3ICB4bW0wLCB4bW0wLCB4bW0wCisKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworICAgIGptcCAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKy5hYm92ZV8xNjoKKyAgICB2bW92ZHF1ICAgICB5bW0wLCBZTU1XT1JEIFtyc2krMCpTSVpFT0ZfWU1NV09SRF0KKworICAgIHZwZXJtcSAgICAgIHltbTAsIHltbTAsIDB4ZDgKKyAgICB2cHVucGNraGJ3ICB5bW0xLCB5bW0wLCB5bW0wCisgICAgdnB1bnBja2xidyAgeW1tMCwgeW1tMCwgeW1tMAorCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzAqU0laRU9GX1lNTVdPUkRdLCB5bW0wCisgICAgdm1vdmRxdSAgICAgWU1NV09SRCBbcmRpKzEqU0laRU9GX1lNTVdPUkRdLCB5bW0xCisKKyAgICBzdWIgICAgICAgICByYXgsIGJ5dGUgMipTSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIHNob3J0IC5uZXh0cm93CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX1lNTVdPUkQgICAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JEICA7IG91dHB0cgorICAgIGptcCAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisKKy5uZXh0cm93OgorICAgIHBvcCAgICAgICAgIHJzaQorICAgIHBvcCAgICAgICAgIHJkaQorCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIGRlYyAgICAgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgamcgICAgICAgICAgc2hvcnQgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICB2emVyb3VwcGVyCisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml91cHNhbXBsZV9hdngyKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKzsgcjEwID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMWQgPSBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorOyByMTIgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjEzID0gSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX3Vwc2FtcGxlX2F2eDIpCisKK0VYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9hdngyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgY29sbGVjdF9hcmdzIDQKKyAgICBwdXNoICAgICAgICByYngKKworICAgIG1vdiAgICAgICAgIGVkeCwgcjExZAorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSAoU0laRU9GX1lNTVdPUkQtMSkKKyAgICBhbmQgICAgICAgICByZHgsIC1TSVpFT0ZfWU1NV09SRAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgcmN4LCByMTAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICByY3gsIHJjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JkaV0gICA7IG91dHB1dF9kYXRhCisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICByZGkKKyAgICBwdXNoICAgICAgICByc2kKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgICAgICAgICAgICAgICAgIDsgaW5wdHIKKyAgICBtb3YgICAgICAgICByYngsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddICA7IG91dHB0cjEKKyAgICBtb3YgICAgICAgICByYXgsIHJkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorLmNvbHVtbmxvb3A6CisKKyAgICBjbXAgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1lNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuYWJvdmVfMTYKKworICAgIHZtb3ZkcXUgICAgIHhtbTAsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgIHZwdW5wY2toYncgIHhtbTEsIHhtbTAsIHhtbTAKKyAgICB2cHVucGNrbGJ3ICB4bW0wLCB4bW0wLCB4bW0wCisKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyYngrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyYngrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICB2bW92ZHF1ICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworICAgIGptcCAgICAgICAgIG5lYXIgLm5leHRyb3cKKworLmFib3ZlXzE2OgorICAgIHZtb3ZkcXUgICAgIHltbTAsIFlNTVdPUkQgW3JzaSswKlNJWkVPRl9ZTU1XT1JEXQorCisgICAgdnBlcm1xICAgICAgeW1tMCwgeW1tMCwgMHhkOAorICAgIHZwdW5wY2toYncgIHltbTEsIHltbTAsIHltbTAKKyAgICB2cHVucGNrbGJ3ICB5bW0wLCB5bW0wLCB5bW0wCisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyYngrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyYngrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWU1NV09SRF0sIHltbTAKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWU1NV09SRF0sIHltbTEKKworICAgIHN1YiAgICAgICAgIHJheCwgYnl0ZSAyKlNJWkVPRl9ZTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfWU1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIHJieCwgMipTSVpFT0ZfWU1NV09SRCAgICAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgcmRpLCAyKlNJWkVPRl9ZTU1XT1JEICAgICA7IG91dHB0cjEKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIDIgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICByYngKKyAgICB2emVyb3VwcGVyCisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZHNhbXBsZS1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pkc2FtcGxlLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2NkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZHNhbXBsZS1zc2UyLmFzbQpAQCAtMCwwICsxLDY2NiBAQAorOworOyBqZHNhbXBsZS5hc20gLSB1cHNhbXBsaW5nICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgorCitQV19PTkUgICB0aW1lcyA4IGR3IDEKK1BXX1RXTyAgIHRpbWVzIDggZHcgMgorUFdfVEhSRUUgdGltZXMgOCBkdyAzCitQV19TRVZFTiB0aW1lcyA4IGR3IDcKK1BXX0VJR0hUIHRpbWVzIDggZHcgOAorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgNjQKKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCis7IGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorOyBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKzsgb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKzsgcjEwID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMWQgPSBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCis7IHIxMiA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorOyByMTMgPSBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AKKyAgICBjb2xsZWN0X2FyZ3MgNAorCisgICAgbW92ICAgICAgICAgZWF4LCByMTFkICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgcmN4LCByMTAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICByY3gsIHJjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JkaV0gICA7IG91dHB1dF9kYXRhCisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICByYXggICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJzaQorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyCisKKyAgICB0ZXN0ICAgICAgICByYXgsIFNJWkVPRl9YTU1XT1JELTEKKyAgICBqeiAgICAgICAgICBzaG9ydCAuc2tpcAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtyc2krKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKy5za2lwOgorICAgIHB4b3IgICAgICAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0oYWxsIDAncykKKyAgICBwY21wZXFiICAgICB4bW03LCB4bW03CisgICAgcHNybGRxICAgICAgeG1tNywgKFNJWkVPRl9YTU1XT1JELTEpCisgICAgcGFuZCAgICAgICAgeG1tNywgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisKKyAgICBhZGQgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorICAgIGFuZCAgICAgICAgIHJheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKKyAgICBjbXAgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBqYSAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9sYXN0OgorICAgIHBjbXBlcWIgICAgIHhtbTYsIHhtbTYKKyAgICBwc2xsZHEgICAgICB4bW02LCAoU0laRU9GX1hNTVdPUkQtMSkKKyAgICBwYW5kICAgICAgICB4bW02LCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBqbXAgICAgICAgICBzaG9ydCAudXBzYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgcHNsbGRxICAgICAgeG1tNiwgKFNJWkVPRl9YTU1XT1JELTEpCisKKy51cHNhbXBsZToKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgICA7IHhtbTE9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICBwc2xsZHEgICAgICB4bW0yLCAxICAgICAgICAgICAgICAgICAgIDsgeG1tMj0oLS0gIDAgIDEgLi4uIDEyIDEzIDE0KQorICAgIHBzcmxkcSAgICAgIHhtbTMsIDEgICAgICAgICAgICAgICAgICAgOyB4bW0zPSggMSAgMiAgMyAuLi4gMTQgMTUgLS0pCisKKyAgICBwb3IgICAgICAgICB4bW0yLCB4bW03ICAgICAgICAgICAgICAgIDsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQorICAgIHBvciAgICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgICAgOyB4bW0zPSggMSAgMiAgMyAuLi4gMTQgMTUgMTYpCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0xCisgICAgcHNybGRxICAgICAgeG1tNywgKFNJWkVPRl9YTU1XT1JELTEpICA7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTEKKyAgICBwdW5wY2tsYncgICB4bW0xLCB4bW0wICAgICAgICAgICAgICAgIDsgeG1tMT0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcHVucGNraGJ3ICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgICA7IHhtbTQ9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTIKKyAgICBwdW5wY2tsYncgICB4bW0yLCB4bW0wICAgICAgICAgICAgICAgIDsgeG1tMj0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisgICAgcHVucGNraGJ3ICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgICA7IHhtbTU9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTMKKyAgICBwdW5wY2tsYncgICB4bW0zLCB4bW0wICAgICAgICAgICAgICAgIDsgeG1tMz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDgpCisgICAgcHVucGNraGJ3ICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgICA7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorCisgICAgcG11bGx3ICAgICAgeG1tMSwgW3JlbCBQV19USFJFRV0KKyAgICBwbXVsbHcgICAgICB4bW00LCBbcmVsIFBXX1RIUkVFXQorICAgIHBhZGR3ICAgICAgIHhtbTIsIFtyZWwgUFdfT05FXQorICAgIHBhZGR3ICAgICAgIHhtbTUsIFtyZWwgUFdfT05FXQorICAgIHBhZGR3ICAgICAgIHhtbTMsIFtyZWwgUFdfVFdPXQorICAgIHBhZGR3ICAgICAgIHhtbTYsIFtyZWwgUFdfVFdPXQorCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMQorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTQKKyAgICBwc3JsdyAgICAgICB4bW0yLCAyICAgICAgICAgICAgICAgICA7IHhtbTI9T3V0TEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgIHBzcmx3ICAgICAgIHhtbTUsIDIgICAgICAgICAgICAgICAgIDsgeG1tNT1PdXRIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tMQorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTQKKyAgICBwc3JsdyAgICAgICB4bW0zLCAyICAgICAgICAgICAgICAgICA7IHhtbTM9T3V0TE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorICAgIHBzcmx3ICAgICAgIHhtbTYsIDIgICAgICAgICAgICAgICAgIDsgeG1tNj1PdXRITz0oMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisKKyAgICBwc2xsdyAgICAgICB4bW0zLCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIHhtbTYsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPU91dEw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICBwb3IgICAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9T3V0SD0oMTYgMTcgMTggLi4uIDI5IDMwIDMxKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW01CisKKyAgICBzdWIgICAgICAgICByYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRCAgOyBpbnB0cgorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cgorICAgIGNtcCAgICAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICBlYXgsIGVheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmF4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IGlucHV0X2RhdGEKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgZGVjICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpOworOworCis7IHIxMCA9IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorOyByMTFkID0gSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aAorOyByMTIgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjEzID0gSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyVkZWZpbmUgd2soaSkgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JEICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gIDQKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3aygwKV0KKyAgICBjb2xsZWN0X2FyZ3MgNAorICAgIHB1c2ggICAgICAgIHJieAorCisgICAgbW92ICAgICAgICAgZWF4LCByMTFkICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgcmN4LCByMTAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICB0ZXN0ICAgICAgICByY3gsIHJjeAorICAgIGp6ICAgICAgICAgIG5lYXIgLnJldHVybgorCisgICAgbW92ICAgICAgICAgcnNpLCByMTIgICAgICAgICAgICAgICAgOyBpbnB1dF9kYXRhCisgICAgbW92ICAgICAgICAgcmRpLCByMTMKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QQVJSQVkgW3JkaV0gICA7IG91dHB1dF9kYXRhCisucm93bG9vcDoKKyAgICBwdXNoICAgICAgICByYXggICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgIHB1c2ggICAgICAgIHJjeAorICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJzaQorCisgICAgbW92ICAgICAgICAgcmN4LCBKU0FNUFJPVyBbcnNpLTEqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjEoYWJvdmUpCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyBpbnB0cjAKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IGlucHRyMShiZWxvdykKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddICA7IG91dHB0cjAKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddICA7IG91dHB0cjEKKworICAgIHRlc3QgICAgICAgIHJheCwgU0laRU9GX1hNTVdPUkQtMQorICAgIGp6ICAgICAgICAgIHNob3J0IC5za2lwCisgICAgcHVzaCAgICAgICAgcmR4CisgICAgbW92ICAgICAgICAgZGwsIEpTQU1QTEUgW3JjeCsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgIG1vdiAgICAgICAgIEpTQU1QTEUgW3JjeCtyYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorICAgIG1vdiAgICAgICAgIGRsLCBKU0FNUExFIFtyYngrKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICBtb3YgICAgICAgICBKU0FNUExFIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKyAgICBtb3YgICAgICAgICBkbCwgSlNBTVBMRSBbcnNpKyhyYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgbW92ICAgICAgICAgSlNBTVBMRSBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsICAgIDsgaW5zZXJ0IGEgZHVtbXkgc2FtcGxlCisgICAgcG9wICAgICAgICAgcmR4Cisuc2tpcDoKKyAgICA7IC0tIHByb2Nlc3MgdGhlIGZpcnN0IGNvbHVtbiBibG9jaworCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbcmJ4KzAqU0laRU9GX1hNTVdPUkRdICA7IHhtbTA9cm93WyAwXVswXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3JjeCswKlNJWkVPRl9YTU1XT1JEXSAgOyB4bW0xPXJvd1stMV1bMF0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0gIDsgeG1tMj1yb3dbKzFdWzBdCisKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW0zICAgICAgICAgICAgICA7IHhtbTM9KGFsbCAwJ3MpCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHB1bnBja2hidyAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgIDsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBwdW5wY2tsYncgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwdW5wY2toYncgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yCisgICAgcHVucGNrbGJ3ICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcHVucGNraGJ3ICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKyAgICBwbXVsbHcgICAgICB4bW0wLCBbcmVsIFBXX1RIUkVFXQorICAgIHBtdWxsdyAgICAgIHhtbTQsIFtyZWwgUFdfVEhSRUVdCisKKyAgICBwY21wZXFiICAgICB4bW03LCB4bW03CisgICAgcHNybGRxICAgICAgeG1tNywgKFNJWkVPRl9YTU1XT1JELTIpCisKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMCAgICAgICAgICAgICAgOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xICA7IHRlbXBvcmFyaWx5IHNhdmUKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW02CisKKyAgICBwYW5kICAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgIHBhbmQgICAgICAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj0oIDAgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTIKKworICAgIGFkZCAgICAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisgICAgYW5kICAgICAgICAgcmF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAorICAgIGNtcCAgICAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphICAgICAgICAgIHNob3J0IC5jb2x1bW5sb29wCisKKy5jb2x1bW5sb29wX2xhc3Q6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jaworCisgICAgcGNtcGVxYiAgICAgeG1tMSwgeG1tMQorICAgIHBzbGxkcSAgICAgIHhtbTEsIChTSVpFT0ZfWE1NV09SRC0yKQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEKKworICAgIHBhbmQgICAgICAgIHhtbTEsIFhNTVdPUkQgW3JkeCsxKlNJWkVPRl9YTU1XT1JEXQorICAgIHBhbmQgICAgICAgIHhtbTIsIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMildLCB4bW0xICAgOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSkKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTIgICA7IHhtbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1KQorCisgICAgam1wICAgICAgICAgbmVhciAudXBzYW1wbGUKKworLmNvbHVtbmxvb3A6CisgICAgOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbcmJ4KzEqU0laRU9GX1hNTVdPUkRdICA7IHhtbTA9cm93WyAwXVsxXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3JjeCsxKlNJWkVPRl9YTU1XT1JEXSAgOyB4bW0xPXJvd1stMV1bMV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0gIDsgeG1tMj1yb3dbKzFdWzFdCisKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW0zICAgICAgICAgICAgICA7IHhtbTM9KGFsbCAwJ3MpCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHB1bnBja2hidyAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgIDsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBwdW5wY2tsYncgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwdW5wY2toYncgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yCisgICAgcHVucGNrbGJ3ICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgcHVucGNraGJ3ICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKyAgICBwbXVsbHcgICAgICB4bW0wLCBbcmVsIFBXX1RIUkVFXQorICAgIHBtdWxsdyAgICAgIHhtbTQsIFtyZWwgUFdfVEhSRUVdCisKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMCAgICAgICAgICAgICAgOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmR4KzIqU0laRU9GX1hNTVdPUkRdLCB4bW0xICA7IHRlbXBvcmFyaWx5IHNhdmUKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZHgrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTUgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW02CisKKyAgICBwc2xsZHEgICAgICB4bW0xLCAoU0laRU9GX1hNTVdPUkQtMikgIDsgeG1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCisgICAgcHNsbGRxICAgICAgeG1tMiwgKFNJWkVPRl9YTU1XT1JELTIpICA7IHhtbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICAwKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMildLCB4bW0xCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMyldLCB4bW0yCisKKy51cHNhbXBsZToKKyAgICA7IC0tIHByb2Nlc3MgdGhlIHVwcGVyIHJvdworCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICAgIDsgeG1tNz1JbnQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMyAgICAgICAgICAgICAgICA7IHhtbTM9SW50MEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgIHBzcmxkcSAgICAgIHhtbTAsIDIgICAgICAgICAgICAgICAgICAgOyB4bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAtLSkKKyAgICBwc2xsZHEgICAgICB4bW00LCAoU0laRU9GX1hNTVdPUkQtMikgIDsgeG1tND0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDgpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTMKKyAgICBwc3JsZHEgICAgICB4bW01LCAoU0laRU9GX1hNTVdPUkQtMikgIDsgeG1tNT0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgcHNsbGRxICAgICAgeG1tNiwgMiAgICAgICAgICAgICAgICAgICA7IHhtbTY9KC0tICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgICA7IHhtbTA9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorICAgIHBvciAgICAgICAgIHhtbTUsIHhtbTYgICAgICAgICAgICAgICAgOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0zCisgICAgcHNsbGRxICAgICAgeG1tMSwgMiAgICAgICAgICAgICAgICAgICA7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQorICAgIHBzcmxkcSAgICAgIHhtbTIsIDIgICAgICAgICAgICAgICAgICAgOyB4bW0yPSggOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0zCisgICAgcHNybGRxICAgICAgeG1tNCwgKFNJWkVPRl9YTU1XT1JELTIpICA7IHhtbTQ9KDE1IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisgICAgcG9yICAgICAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgICA7IHhtbTE9KC0xICAwICAxICAyICAzICA0ICA1ICA2KQorICAgIHBvciAgICAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDIpXSAgICAgOyB4bW0yPSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNAorCisgICAgcG11bGx3ICAgICAgeG1tNywgW3JlbCBQV19USFJFRV0KKyAgICBwbXVsbHcgICAgICB4bW0zLCBbcmVsIFBXX1RIUkVFXQorICAgIHBhZGR3ICAgICAgIHhtbTEsIFtyZWwgUFdfRUlHSFRdCisgICAgcGFkZHcgICAgICAgeG1tNSwgW3JlbCBQV19FSUdIVF0KKyAgICBwYWRkdyAgICAgICB4bW0wLCBbcmVsIFBXX1NFVkVOXQorICAgIHBhZGR3ICAgICAgIHhtbTIsIFtyZWwgUFdfU0VWRU5dCisKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMworICAgIHBzcmx3ICAgICAgIHhtbTEsIDQgICAgICAgICAgICAgICAgIDsgeG1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgIHBzcmx3ICAgICAgIHhtbTUsIDQgICAgICAgICAgICAgICAgIDsgeG1tNT1PdXQwSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW0zCisgICAgcHNybHcgICAgICAgeG1tMCwgNCAgICAgICAgICAgICAgICAgOyB4bW0wPU91dDBMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUpCisgICAgcHNybHcgICAgICAgeG1tMiwgNCAgICAgICAgICAgICAgICAgOyB4bW0yPU91dDBITz0oMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisKKyAgICBwc2xsdyAgICAgICB4bW0wLCBCWVRFX0JJVAorICAgIHBzbGx3ICAgICAgIHhtbTIsIEJZVEVfQklUCisgICAgcG9yICAgICAgICAgeG1tMSwgeG1tMCAgICAgICAgICAgICAgOyB4bW0xPU91dDBMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisgICAgcG9yICAgICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB4bW01PU91dDBIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUKKworICAgIDsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0KKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0KKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgICAgOyB4bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW00ICAgICAgICAgICAgICAgIDsgeG1tND1JbnQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgcHNybGRxICAgICAgeG1tNywgMiAgICAgICAgICAgICAgICAgICA7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3IC0tKQorICAgIHBzbGxkcSAgICAgIHhtbTMsIChTSVpFT0ZfWE1NV09SRC0yKSAgOyB4bW0zPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgOCkKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNAorICAgIHBzcmxkcSAgICAgIHhtbTAsIChTSVpFT0ZfWE1NV09SRC0yKSAgOyB4bW0wPSggNyAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICBwc2xsZHEgICAgICB4bW0yLCAyICAgICAgICAgICAgICAgICAgIDsgeG1tMj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKyAgICBwb3IgICAgICAgICB4bW03LCB4bW0zICAgICAgICAgICAgICAgIDsgeG1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDgpCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgICA7IHhtbTA9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTQKKyAgICBwc2xsZHEgICAgICB4bW0xLCAyICAgICAgICAgICAgICAgICAgIDsgeG1tMT0oLS0gIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisgICAgcHNybGRxICAgICAgeG1tNSwgMiAgICAgICAgICAgICAgICAgICA7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTQKKyAgICBwc3JsZHEgICAgICB4bW0zLCAoU0laRU9GX1hNTVdPUkQtMikgIDsgeG1tMz0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKyAgICBwb3IgICAgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICAgIDsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisgICAgcG9yICAgICAgICAgeG1tNSwgWE1NV09SRCBbd2soMyldICAgICA7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0zCisKKyAgICBwbXVsbHcgICAgICB4bW02LCBbcmVsIFBXX1RIUkVFXQorICAgIHBtdWxsdyAgICAgIHhtbTQsIFtyZWwgUFdfVEhSRUVdCisgICAgcGFkZHcgICAgICAgeG1tMSwgW3JlbCBQV19FSUdIVF0KKyAgICBwYWRkdyAgICAgICB4bW0wLCBbcmVsIFBXX0VJR0hUXQorICAgIHBhZGR3ICAgICAgIHhtbTcsIFtyZWwgUFdfU0VWRU5dCisgICAgcGFkZHcgICAgICAgeG1tNSwgW3JlbCBQV19TRVZFTl0KKworICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTYKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW00CisgICAgcHNybHcgICAgICAgeG1tMSwgNCAgICAgICAgICAgICAgICAgOyB4bW0xPU91dDFMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQpCisgICAgcHNybHcgICAgICAgeG1tMCwgNCAgICAgICAgICAgICAgICAgOyB4bW0wPU91dDFIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tNgorICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTQKKyAgICBwc3JsdyAgICAgICB4bW03LCA0ICAgICAgICAgICAgICAgICA7IHhtbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKyAgICBwc3JsdyAgICAgICB4bW01LCA0ICAgICAgICAgICAgICAgICA7IHhtbTU9T3V0MUhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKworICAgIHBzbGx3ICAgICAgIHhtbTcsIEJZVEVfQklUCisgICAgcHNsbHcgICAgICAgeG1tNSwgQllURV9CSVQKKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9T3V0MUw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICBwb3IgICAgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9T3V0MUg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCisgICAgc3ViICAgICAgICAgcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgYWRkICAgICAgICAgcmN4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIxKGFib3ZlKQorICAgIGFkZCAgICAgICAgIHJieCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyMAorICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyMShiZWxvdykKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIwCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyMQorICAgIGNtcCAgICAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgIGphICAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICB0ZXN0ICAgICAgICByYXgsIHJheAorICAgIGpueiAgICAgICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisgICAgcG9wICAgICAgICAgcnNpCisgICAgcG9wICAgICAgICAgcmRpCisgICAgcG9wICAgICAgICAgcmN4CisgICAgcG9wICAgICAgICAgcmF4CisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgOyBvdXRwdXRfZGF0YQorICAgIHN1YiAgICAgICAgIHJjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICBqZyAgICAgICAgICBuZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKzsgSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworOyByMTAgPSBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKzsgcjExZCA9IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCis7IHIxMiA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorOyByMTMgPSBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AKKyAgICBjb2xsZWN0X2FyZ3MgNAorCisgICAgbW92ICAgICAgICAgZWR4LCByMTFkCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlICgyKlNJWkVPRl9YTU1XT1JEKS0xCisgICAgYW5kICAgICAgICAgcmR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKyAgICBqeiAgICAgICAgICBuZWFyIC5yZXR1cm4KKworICAgIG1vdiAgICAgICAgIHJjeCwgcjEwICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgdGVzdCAgICAgICAgcmN4LCByY3gKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMiAgICAgICAgICAgICAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICByZGksIHIxMworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBBUlJBWSBbcmRpXSAgIDsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJzaQorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpXSAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyCisgICAgbW92ICAgICAgICAgcmF4LCByZHggICAgICAgICAgICAgICAgOyBjb2xjdHIKKy5jb2x1bW5sb29wOgorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0wCisgICAgcHVucGNrbGJ3ICAgeG1tMCwgeG1tMAorICAgIHB1bnBja2hidyAgIHhtbTEsIHhtbTEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorCisgICAgc3ViICAgICAgICAgcmF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0yCisgICAgcHVucGNrbGJ3ICAgeG1tMiwgeG1tMgorICAgIHB1bnBja2hidyAgIHhtbTMsIHhtbTMKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMworCisgICAgc3ViICAgICAgICAgcmF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICBqeiAgICAgICAgICBzaG9ydCAubmV4dHJvdworCisgICAgYWRkICAgICAgICAgcnNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgIDsgaW5wdHIKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgaW5wdXRfZGF0YQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgIDsgb3V0cHV0X2RhdGEKKyAgICBkZWMgICAgICAgICByY3ggICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIHNob3J0IC5yb3dsb29wCisKKy5yZXR1cm46CisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cik7Cis7CisKKzsgcjEwID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMWQgPSBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorOyByMTIgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjEzID0gSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgY29sbGVjdF9hcmdzIDQKKyAgICBwdXNoICAgICAgICByYngKKworICAgIG1vdiAgICAgICAgIGVkeCwgcjExZAorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorICAgIGFuZCAgICAgICAgIHJkeCwgYnl0ZSAtKDIqU0laRU9GX1hNTVdPUkQpCisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByY3gsIHIxMCAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIHRlc3QgICAgICAgIHJjeCwgcmN4CisgICAganogICAgICAgICAgbmVhciAucmV0dXJuCisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMiAgICAgICAgICAgICAgICA7IGlucHV0X2RhdGEKKyAgICBtb3YgICAgICAgICByZGksIHIxMworICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBBUlJBWSBbcmRpXSAgIDsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorICAgIHB1c2ggICAgICAgIHJkaQorICAgIHB1c2ggICAgICAgIHJzaQorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcnNpXSAgICAgICAgICAgICAgICAgICAgOyBpbnB0cgorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMAorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgb3V0cHRyMQorICAgIG1vdiAgICAgICAgIHJheCwgcmR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisuY29sdW1ubG9vcDoKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tMAorICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTAKKyAgICBwdW5wY2toYncgICB4bW0xLCB4bW0xCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyYngrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyYngrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworICAgIHN1YiAgICAgICAgIHJheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMgorICAgIHB1bnBja2xidyAgIHhtbTIsIHhtbTIKKyAgICBwdW5wY2toYncgICB4bW0zLCB4bW0zCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyYngrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyYngrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKworICAgIHN1YiAgICAgICAgIHJheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAganogICAgICAgICAgc2hvcnQgLm5leHRyb3cKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyCisgICAgYWRkICAgICAgICAgcmJ4LCBieXRlIDQqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyMAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JEICA7IG91dHB0cjEKKyAgICBqbXAgICAgICAgICBzaG9ydCAuY29sdW1ubG9vcAorCisubmV4dHJvdzoKKyAgICBwb3AgICAgICAgICByc2kKKyAgICBwb3AgICAgICAgICByZGkKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgOyBpbnB1dF9kYXRhCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICA7IG91dHB1dF9kYXRhCisgICAgc3ViICAgICAgICAgcmN4LCBieXRlIDIgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgIGpnICAgICAgICAgIG5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKyAgICBwb3AgICAgICAgICByYngKKyAgICB1bmNvbGxlY3RfYXJncyA0CisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pmZGN0Zmx0LXNzZS5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZmRjdGZsdC1zc2UuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjlmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZmRjdGZsdC1zc2UuYXNtCkBAIC0wLDAgKzEsMzU3IEBACis7Cis7IGpmZGN0Zmx0LmFzbSAtIGZsb2F0aW5nLXBvaW50IEZEQ1QgKDY0LWJpdCBTU0UpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBmb3J3YXJkIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamZkY3RmbHQuYzsgc2VlIHRoZSBqZmRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVtYWNybyAgdW5wY2tscHMyIDIgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorICAgIHNodWZwcyAgICAgICUxLCAlMiwgMHg0NAorJWVuZG1hY3JvCisKKyVtYWNybyAgdW5wY2tocHMyIDIgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorICAgIHNodWZwcyAgICAgICUxLCAlMiwgMHhFRQorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfZmxvYXRfc3NlKQorCitFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSk6CisKK1BEXzBfMzgyIHRpbWVzIDQgZGQgMC4zODI2ODM0MzIzNjUwODk3NzE3Mjg0NjAKK1BEXzBfNzA3IHRpbWVzIDQgZGQgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxIHRpbWVzIDQgZGQgMC41NDExOTYxMDAxNDYxOTY5ODQzOTk3MjMKK1BEXzFfMzA2IHRpbWVzIDQgZGQgMS4zMDY1NjI5NjQ4NzYzNzY1Mjc4NTY2NDMKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9mbG9hdF9zc2UoRkFTVF9GTE9BVCAqZGF0YSkKKzsKKworOyByMTAgPSBGQVNUX0ZMT0FUICpkYXRhCisKKyVkZWZpbmUgd2soaSkgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JEICA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gIDIKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2ZkY3RfZmxvYXRfc3NlKQorCitFWFROKGpzaW1kX2ZkY3RfZmxvYXRfc3NlKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgc3ViICAgICAgICAgcnNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbcnNwXSwgcmF4CisgICAgbW92ICAgICAgICAgcmJwLCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgbGVhICAgICAgICAgcnNwLCBbd2soMCldCisgICAgY29sbGVjdF9hcmdzIDEKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKworICAgIG1vdiAgICAgICAgIHJkeCwgcjEwICAgICAgICAgICAgICAgIDsgKEZBU1RfRkxPQVQgKikKKyAgICBtb3YgICAgICAgICByY3gsIERDVFNJWkUvNAorLnJvd2xvb3A6CisKKyAgICBtb3ZhcHMgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIDsgeG1tMD0oMjAgMjEgMjIgMjMpLCB4bW0yPSgyNCAyNSAyNiAyNykKKyAgICA7IHhtbTE9KDMwIDMxIDMyIDMzKSwgeG1tMz0oMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDIwIDMwIDIxIDMxKQorICAgIHVucGNraHBzICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgyNCAzNCAyNSAzNSkKKyAgICB1bnBja2hwcyAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDI2IDM2IDI3IDM3KQorCisgICAgbW92YXBzICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICA7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCisgICAgOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0yICAgOyB3aygxKT0oMjQgMzQgMjUgMzUpCisKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDAxIDExKQorICAgIHVucGNraHBzICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND0oMDIgMTIgMDMgMTMpCisgICAgbW92YXBzICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSgwNCAxNCAwNSAxNSkKKyAgICB1bnBja2hwcyAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDA3IDE3KQorCisgICAgbW92YXBzICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCk9ZGF0YTAKKyAgICB1bnBja2hwczIgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2CisgICAgdW5wY2tocHMyICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKworICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTcKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW02CisgICAgc3VicHMgICAgICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKyAgICBzdWJwcyAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMj0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSgyNCAzNCAyNSAzNSkKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXRtcDYKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDcKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCisgICAgdW5wY2tocHMyICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSgwMyAxMyAyMyAzMyk9ZGF0YTMKKyAgICBtb3ZhcHMgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICB1bnBja2xwczIgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDA0IDE0IDI0IDM0KT1kYXRhNAorICAgIHVucGNraHBzMiAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CisKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW03CisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNAorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorICAgIHN1YnBzICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tNQorICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTAKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW03ICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW00ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTAKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKKworICAgIGFkZHBzICAgICAgIHhtbTAsIHhtbTUKKyAgICBtdWxwcyAgICAgICB4bW0wLCBbcmVsIFBEXzBfNzA3XSAgICA7IHhtbTA9ejEKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTEKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW01CisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0CisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGE2CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PWRhdGEyCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmFwcyAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNj10bXA2CisgICAgbW92YXBzICAgICAgeG1tMCwgWE1NV09SRCBbd2soMSldICAgOyB4bW0wPXRtcDcKKworICAgIGFkZHBzICAgICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz10bXAxMQorICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNj10bXAxMiwgeG1tMD10bXA3CisKKyAgICBtdWxwcyAgICAgICB4bW0zLCBbcmVsIFBEXzBfNzA3XSAgICA7IHhtbTM9ejMKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT10bXAxMAorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTYKKyAgICBtdWxwcyAgICAgICB4bW0yLCBbcmVsIFBEXzBfMzgyXSAgICA7IHhtbTI9ejUKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbcmVsIFBEXzBfNTQxXSAgICA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgIG11bHBzICAgICAgIHhtbTYsIFtyZWwgUERfMV8zMDZdICAgIDsgeG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgYWRkcHMgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPXoyCisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgOyB4bW02PXo0CisKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0wCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXoxMworICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT16MTEKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW00LCB4bW01CisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzCisgICAgc3VicHMgICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PWRhdGE3CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PWRhdGE1CisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGExCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworICAgIGFkZCAgICAgICAgIHJkeCwgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgZGVjICAgICAgICAgcmN4CisgICAgam56ICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisgICAgbW92ICAgICAgICAgcmR4LCByMTAgICAgICAgICAgICAgICAgOyAoRkFTVF9GTE9BVCAqKQorICAgIG1vdiAgICAgICAgIHJjeCwgRENUU0laRS80CisuY29sdW1ubG9vcDoKKworICAgIG1vdmFwcyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgOyB4bW0wPSgwMiAxMiAyMiAzMiksIHhtbTI9KDQyIDUyIDYyIDcyKQorICAgIDsgeG1tMT0oMDMgMTMgMjMgMzMpLCB4bW0zPSg0MyA1MyA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHVucGNrbHBzICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMDIgMDMgMTIgMTMpCisgICAgdW5wY2tocHMgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PSgyMiAyMyAzMiAzMykKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDQyIDQzIDUyIDUzKQorICAgIHVucGNraHBzICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oNjIgNjMgNzIgNzMpCisKKyAgICBtb3ZhcHMgICAgICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW03LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIDsgeG1tNj0oMDAgMTAgMjAgMzApLCB4bW0xPSg0MCA1MCA2MCA3MCkKKyAgICA7IHhtbTc9KDAxIDExIDIxIDMxKSwgeG1tMz0oNDEgNTEgNjEgNzEpCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPSgyMiAyMyAzMiAzMykKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPSg0MiA0MyA1MiA1MykKKworICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHVucGNrbHBzICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEpCisgICAgdW5wY2tocHMgICAgeG1tNCwgeG1tNyAgICAgICAgICAgICAgOyB4bW00PSgyMCAyMSAzMCAzMSkKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDUwIDUxKQorICAgIHVucGNraHBzICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj0oNjAgNjEgNzAgNzEpCisKKyAgICBtb3ZhcHMgICAgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICB1bnBja2xwczIgICB4bW02LCB4bW0wICAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzKT1kYXRhMAorICAgIHVucGNraHBzMiAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz0oMTAgMTEgMTIgMTMpPWRhdGExCisgICAgbW92YXBzICAgICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKKyAgICB1bnBja2hwczIgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9KDcwIDcxIDcyIDczKT1kYXRhNworCisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNworICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTYKKyAgICBzdWJwcyAgICAgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHN1YnBzICAgICAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisgICAgYWRkcHMgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWRhdGExK2RhdGE2PXRtcDEKKyAgICBhZGRwcyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbd2soMCldICAgOyB4bW0yPSgyMiAyMyAzMiAzMykKKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTM9KDQyIDQzIDUyIDUzKQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNyAgIDsgd2soMCk9dG1wNgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNiAgIDsgd2soMSk9dG1wNworCisgICAgbW92YXBzICAgICAgeG1tNywgeG1tNCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKyAgICB1bnBja2hwczIgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9KDMwIDMxIDMyIDMzKT1kYXRhMworICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTEsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNDIgNDMpPWRhdGE0CisgICAgdW5wY2tocHMyICAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKworICAgIG1vdmFwcyAgICAgIHhtbTIsIHhtbTcKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW00CisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PWRhdGEzK2RhdGE0PXRtcDMKKyAgICBhZGRwcyAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgc3VicHMgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZhcHMgICAgICB4bW0xLCB4bW01CisgICAgbW92YXBzICAgICAgeG1tNiwgeG1tMAorICAgIHN1YnBzICAgICAgIHhtbTUsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNT10bXAxMworICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD10bXAxMgorICAgIGFkZHBzICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT10bXAxMAorICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj10bXAxMQorCisgICAgYWRkcHMgICAgICAgeG1tMCwgeG1tNQorICAgIG11bHBzICAgICAgIHhtbTAsIFtyZWwgUERfMF83MDddICAgIDsgeG1tMD16MQorCisgICAgbW92YXBzICAgICAgeG1tNywgeG1tMQorICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTUKKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW02ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTQKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTYKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTAKKyAgICBhZGRwcyAgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTIKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92YXBzICAgICAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PXRtcDYKKyAgICBtb3ZhcHMgICAgICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9dG1wNworCisgICAgYWRkcHMgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwCisgICAgYWRkcHMgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPXRtcDExCisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PXRtcDEyLCB4bW0wPXRtcDcKKworICAgIG11bHBzICAgICAgIHhtbTMsIFtyZWwgUERfMF83MDddICAgIDsgeG1tMz16MworCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwCisgICAgc3VicHMgICAgICAgeG1tMiwgeG1tNgorICAgIG11bHBzICAgICAgIHhtbTIsIFtyZWwgUERfMF8zODJdICAgIDsgeG1tMj16NQorICAgIG11bHBzICAgICAgIHhtbTEsIFtyZWwgUERfMF81NDFdICAgIDsgeG1tMT1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCisgICAgbXVscHMgICAgICAgeG1tNiwgW3JlbCBQRF8xXzMwNl0gICAgOyB4bW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9ejIKKyAgICBhZGRwcyAgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9ejQKKworICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTAKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9ejEzCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXoxMQorCisgICAgbW92YXBzICAgICAgeG1tNywgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTUKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTMKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTcKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTUKKyAgICBhZGRwcyAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTEKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCisgICAgYWRkICAgICAgICAgcmR4LCBieXRlIDQqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICBkZWMgICAgICAgICByY3gKKyAgICBqbnogICAgICAgICBuZWFyIC5jb2x1bW5sb29wCisKKyAgICB1bmNvbGxlY3RfYXJncyAxCisgICAgbW92ICAgICAgICAgcnNwLCByYnAgICAgICAgICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICBwb3AgICAgICAgICByc3AgICAgICAgICAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamZkY3Rmc3Qtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qZmRjdGZzdC1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWY4YjllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamZkY3Rmc3Qtc3NlMi5hc20KQEAgLTAsMCArMSwzOTEgQEAKKzsKKzsgamZkY3Rmc3QuYXNtIC0gZmFzdCBpbnRlZ2VyIEZEQ1QgKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0ZnN0LmM7IHNlZSB0aGUgamZkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMgIDggIDsgMTQgaXMgYWxzbyBPSy4KKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8wXzM4MiBlcXUgIDk4ICA7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEgZXF1IDEzOSAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3IGVxdSAxODEgIDsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNiBlcXUgMzM0ICA7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMzgyIGVxdSBERVNDQUxFKCA0MTA5MDMyMDcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MSBlcXUgREVTQ0FMRSggNTgxMTA0ODg3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcgZXF1IERFU0NBTEUoIDc1OTI1MDEyNCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2IGVxdSBERVNDQUxFKDE0MDI5MTEzMDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMzA2NTYyOTY1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICAgICAgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKToKKworUFdfRjA3MDcgdGltZXMgOCBkdyBGXzBfNzA3IDw8IENPTlNUX1NISUZUCitQV19GMDM4MiB0aW1lcyA4IGR3IEZfMF8zODIgPDwgQ09OU1RfU0hJRlQKK1BXX0YwNTQxIHRpbWVzIDggZHcgRl8wXzU0MSA8PCBDT05TVF9TSElGVAorUFdfRjEzMDYgdGltZXMgOCBkdyBGXzFfMzA2IDw8IENPTlNUX1NISUZUCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMihEQ1RFTEVNICpkYXRhKQorOworCis7IHIxMCA9IERDVEVMRU0gKmRhdGEKKworJWRlZmluZSB3ayhpKSAgIHJicCAtIChXS19OVU0gLSAoaSkpICogU0laRU9GX1hNTVdPUkQgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfZmRjdF9pZmFzdF9zc2UyKQorCitFWFROKGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3drKDApXQorICAgIGNvbGxlY3RfYXJncyAxCisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKyAgICBtb3YgICAgICAgICByZHgsIHIxMCAgICAgICAgICAgICAgICA7IChEQ1RFTEVNICopCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICA7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBwdW5wY2tod2QgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRENURUxFTSldCisKKyAgICA7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisgICAgOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW01ICAgOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQorICAgIHB1bnBja2h3ZCAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBwdW5wY2tod2QgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKyAgICBwdW5wY2toZHEgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgcHVucGNraGRxICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgcHVucGNraGRxICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIHB1bnBja2hkcSAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKT1kYXRhMAorICAgIHB1bnBja2hxZHEgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3Nik9ZGF0YTYKKyAgICBwdW5wY2tocWRxICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMC1kYXRhNz10bXA3CisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tMiAgICAgICAgICAgICAgOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soMCldICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMSAgIDsgd2soMCk9dG1wNgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9dG1wNworCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3Mik9ZGF0YTIKKyAgICBwdW5wY2tocWRxICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKT1kYXRhMworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpPWRhdGE0CisgICAgcHVucGNraHFkcSAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSk9ZGF0YTUKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNgorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz10bXAxMworICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj10bXAxMgorICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tMworICAgIHBzbGx3ICAgICAgIHhtbTYsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgeG1tNiwgW3JlbCBQV19GMDcwN10gICAgOyB4bW02PXoxCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMworICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND1kYXRhNAorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhNgorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMAorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMgorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbd2soMCldICAgOyB4bW0wPXRtcDYKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTY9dG1wNworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9ZGF0YTQKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPWRhdGE2CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW01ICAgICAgICAgICAgICA7IHhtbTI9dG1wMTAKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9dG1wMTEKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIsIHhtbTY9dG1wNworCisgICAgcHNsbHcgICAgICAgeG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICB4bW0wLCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgcHNsbHcgICAgICAgeG1tNSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW01LCBbcmVsIFBXX0YwNzA3XSAgICA7IHhtbTU9ejMKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTAKKyAgICBwbXVsaHcgICAgICB4bW0yLCBbcmVsIFBXX0YwMzgyXSAgICA7IHhtbTI9ejUKKyAgICBwbXVsaHcgICAgICB4bW00LCBbcmVsIFBXX0YwNTQxXSAgICA7IHhtbTQ9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgIHBtdWxodyAgICAgIHhtbTAsIFtyZWwgUFdfRjEzMDZdICAgIDsgeG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXoyCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPXo0CisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW02CisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXoxMworICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz16MTEKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0zCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNCAgICAgICAgICAgICAgOyB4bW02PWRhdGEzCisgICAgcHN1YncgICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWRhdGE3CisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNCAgICAgICAgICAgICAgOyB4bW0yPWRhdGE1CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PWRhdGExCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKyAgICA7IHhtbTE9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKSwgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgOyB4bW01PSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTY9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tNSAgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNz0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgcHVucGNraHdkICAgeG1tMCwgeG1tNiAgICAgICAgICAgICAgOyB4bW0wPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT1jb2w0CisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soMSldICAgOyB4bW02PWNvbDYKKworICAgIDsgeG1tNT0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpLCB4bW02PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICA7IHhtbTI9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KSwgeG1tMz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTAgICA7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTUsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNT0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisgICAgcHVucGNraHdkICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSg0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW01ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorICAgIHB1bnBja2hkcSAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9KDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMiAgIDsgd2soMCk9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNyAgIDsgd2soMSk9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKyAgICBwdW5wY2toZHEgICB4bW0yLCB4bW02ICAgICAgICAgICAgICA7IHhtbTI9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMpCisgICAgcHVucGNraGRxICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PSg2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpPWRhdGEwCisgICAgcHVucGNraHFkcSAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyk9ZGF0YTEKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KT1kYXRhNgorICAgIHB1bnBja2hxZHEgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpPWRhdGE3CisKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMQorICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMS1kYXRhNj10bXA2CisgICAgcHN1YncgICAgICAgeG1tMSwgeG1tMCAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwLWRhdGE3PXRtcDcKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW03ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTErZGF0YTY9dG1wMQorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMD0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW02ICAgOyB3aygwKT10bXA2CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0xICAgOyB3aygxKT10bXA3CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0yLCB4bW03ICAgICAgICAgICAgICA7IHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KT1kYXRhMgorICAgIHB1bnBja2hxZHEgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpPWRhdGEzCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0Nyk9ZGF0YTQKKyAgICBwdW5wY2tocWRxICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KT1kYXRhNQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTIKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTMrZGF0YTQ9dG1wMworICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMitkYXRhNT10bXAyCisgICAgcHN1YncgICAgICAgeG1tNywgeG1tNCAgICAgICAgICAgICAgOyB4bW03PWRhdGEzLWRhdGE0PXRtcDQKKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTItZGF0YTU9dG1wNQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW01CisgICAgcHN1YncgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPXRtcDEzCisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB4bW01PXRtcDEyCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPXRtcDExCisKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0zCisgICAgcHNsbHcgICAgICAgeG1tNSwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW01LCBbcmVsIFBXX0YwNzA3XSAgICA7IHhtbTU9ejEKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0zCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PWRhdGE0CisgICAgcHN1YncgICAgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPWRhdGE2CisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PWRhdGEwCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPWRhdGEyCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMT10bXA2CisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDcKKworICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgIHBhZGR3ICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT10bXAxMiwgeG1tNT10bXA3CisKKyAgICBwc2xsdyAgICAgICB4bW03LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgIHBzbGx3ICAgICAgIHhtbTEsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKyAgICBwc2xsdyAgICAgICB4bW0wLCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgIHBtdWxodyAgICAgIHhtbTAsIFtyZWwgUFdfRjA3MDddICAgIDsgeG1tMD16MworCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNyAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgcHN1YncgICAgICAgeG1tNywgeG1tMQorICAgIHBtdWxodyAgICAgIHhtbTcsIFtyZWwgUFdfRjAzODJdICAgIDsgeG1tNz16NQorICAgIHBtdWxodyAgICAgIHhtbTQsIFtyZWwgUFdfRjA1NDFdICAgIDsgeG1tND1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCisgICAgcG11bGh3ICAgICAgeG1tMSwgW3JlbCBQV19GMTMwNl0gICAgOyB4bW0xPU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9ejIKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9ejQKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTUKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9ejEzCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPXoxMQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTMKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTMKKyAgICBwc3VidyAgICAgICB4bW0zLCB4bW0xICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTcKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTUKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCisgICAgdW5jb2xsZWN0X2FyZ3MgMQorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pmZGN0aW50LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamZkY3RpbnQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4ZjQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pmZGN0aW50LWF2eDIuYXNtCkBAIC0wLDAgKzEsMzIyIEBACis7Cis7IGpmZGN0aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAoNjQtYml0IEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4IGVxdSAgMjQ0NiAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgMzE5NiAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgNDQzMyAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgNjI3MCAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgNzM3MyAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgOTYzMyAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAxMjI5OSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAxNTEzNyAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAxNjA2OSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAxNjgxOSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAyMDk5NSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAyNTE3MiAgOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8wXzI5OCBlcXUgREVTQ0FMRSggMzIwNjUyOTU1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1IERFU0NBTEUoIDQxODk1MzI3NiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSBERVNDQUxFKCA1ODExMDQ4ODcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgREVTQ0FMRSggODIxODA2NDEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1IERFU0NBTEUoIDk2NjM0MjExMSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSBERVNDQUxFKDEyNjI1ODY4MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgREVTQ0FMRSgxNjEyMDMxMjY3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IERFU0NBTEUoMTk4NDAxNjE4OCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSBERVNDQUxFKDIxMDYyMjAzNTAsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgREVTQ0FMRSgyMjA0NTIwNjczLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IERFU0NBTEUoMjc1MTkwOTUwNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSBERVNDQUxFKDMyOTkyOTgzNDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgSW4tcGxhY2UgOHg4eDE2LWJpdCBtYXRyaXggdHJhbnNwb3NlIHVzaW5nIEFWWDIgaW5zdHJ1Y3Rpb25zCis7ICUxLSU0OiBJbnB1dC9vdXRwdXQgcmVnaXN0ZXJzCis7ICU1LSU4OiBUZW1wIHJlZ2lzdGVycworCislbWFjcm8gZG90cmFuc3Bvc2UgOAorICAgIDsgJTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3ICA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKyAgICA7ICUyPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgOyAlMz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgIDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorICAgIDsgJTQ9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3ICA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworICAgIHZwdW5wY2tsd2QgICU1LCAlMSwgJTIKKyAgICB2cHVucGNraHdkICAlNiwgJTEsICUyCisgICAgdnB1bnBja2x3ZCAgJTcsICUzLCAlNAorICAgIHZwdW5wY2tod2QgICU4LCAlMywgJTQKKyAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICA7ICU1PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMyAgNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgOyAlNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcgIDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorICAgIDsgJTc9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzICA2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICA7ICU4PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNyAgNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICB2cHVucGNrbGRxICAlMSwgJTUsICU3CisgICAgdnB1bnBja2hkcSAgJTIsICU1LCAlNworICAgIHZwdW5wY2tsZHEgICUzLCAlNiwgJTgKKyAgICB2cHVucGNraGRxICAlNCwgJTYsICU4CisgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgOyAlMT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgIDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorICAgIDsgJTI9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzICA0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICA7ICUzPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAgNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgOyAlND0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcgIDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisgICAgdnBlcm1xICAgICAgJTEsICUxLCAweDhECisgICAgdnBlcm1xICAgICAgJTIsICUyLCAweDhECisgICAgdnBlcm1xICAgICAgJTMsICUzLCAweEQ4CisgICAgdnBlcm1xICAgICAgJTQsICU0LCAweEQ4CisgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgOyAlMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgIDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorICAgIDsgJTI9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczICAwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICA7ICUzPSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCAgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgOyAlND0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYgIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgSW4tcGxhY2UgOHg4eDE2LWJpdCBzbG93IGludGVnZXIgZm9yd2FyZCBEQ1QgdXNpbmcgQVZYMiBpbnN0cnVjdGlvbnMKKzsgJTEtJTQ6IElucHV0L291dHB1dCByZWdpc3RlcnMKKzsgJTUtJTg6IFRlbXAgcmVnaXN0ZXJzCis7ICU5OiAgICBQYXNzICgxIG9yIDIpCisKKyVtYWNybyBkb2RjdCA5CisgICAgdnBzdWJ3ICAgICAgJTUsICUxLCAlNCAgICAgICAgICAgICAgOyAlNT1kYXRhMV8wLWRhdGE2Xzc9dG1wNl83CisgICAgdnBhZGR3ICAgICAgJTYsICUxLCAlNCAgICAgICAgICAgICAgOyAlNj1kYXRhMV8wK2RhdGE2Xzc9dG1wMV8wCisgICAgdnBhZGR3ICAgICAgJTcsICUyLCAlMyAgICAgICAgICAgICAgOyAlNz1kYXRhM18yK2RhdGE0XzU9dG1wM18yCisgICAgdnBzdWJ3ICAgICAgJTgsICUyLCAlMyAgICAgICAgICAgICAgOyAlOD1kYXRhM18yLWRhdGE0XzU9dG1wNF81CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgdnBlcm0yaTEyOCAgJTYsICU2LCAlNiwgMHgwMSAgICAgICAgOyAlNj10bXAwXzEKKyAgICB2cGFkZHcgICAgICAlMSwgJTYsICU3ICAgICAgICAgICAgICA7ICUxPXRtcDBfMSt0bXAzXzI9dG1wMTBfMTEKKyAgICB2cHN1YncgICAgICAlNiwgJTYsICU3ICAgICAgICAgICAgICA7ICU2PXRtcDBfMS10bXAzXzI9dG1wMTNfMTIKKworICAgIHZwZXJtMmkxMjggICU3LCAlMSwgJTEsIDB4MDEgICAgICAgIDsgJTc9dG1wMTFfMTAKKyAgICB2cHNpZ253ICAgICAlMSwgJTEsIFtyZWwgUFdfMV9ORUcxXSAgOyAlMT10bXAxMF9uZWcxMQorICAgIHZwYWRkdyAgICAgICU3LCAlNywgJTEgICAgICAgICAgICAgIDsgJTc9KHRtcDEwK3RtcDExKV8odG1wMTAtdG1wMTEpCislaWYgJTkgPT0gMQorICAgIHZwc2xsdyAgICAgICUxLCAlNywgUEFTUzFfQklUUyAgICAgIDsgJTE9ZGF0YTBfNAorJWVsc2UKKyAgICB2cGFkZHcgICAgICAlNywgJTcsIFtyZWwgUFdfREVTQ0FMRV9QMlhdCisgICAgdnBzcmF3ICAgICAgJTEsICU3LCBQQVNTMV9CSVRTICAgICAgOyAlMT1kYXRhMF80CislZW5kaWYKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKyAgICA7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworICAgIDsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisgICAgOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKworICAgIHZwZXJtMmkxMjggICU3LCAlNiwgJTYsIDB4MDEgICAgICAgIDsgJTc9dG1wMTJfMTMKKyAgICB2cHVucGNrbHdkICAlMiwgJTYsICU3CisgICAgdnB1bnBja2h3ZCAgJTYsICU2LCAlNworICAgIHZwbWFkZHdkICAgICUyLCAlMiwgW3JlbCBQV19GMTMwX0YwNTRfTUYxMzBfRjA1NF0gIDsgJTI9ZGF0YTJfNkwKKyAgICB2cG1hZGR3ZCAgICAlNiwgJTYsIFtyZWwgUFdfRjEzMF9GMDU0X01GMTMwX0YwNTRdICA7ICU2PWRhdGEyXzZICisKKyAgICB2cGFkZGQgICAgICAlMiwgJTIsIFtyZWwgUERfREVTQ0FMRV9QICUrICU5XQorICAgIHZwYWRkZCAgICAgICU2LCAlNiwgW3JlbCBQRF9ERVNDQUxFX1AgJSsgJTldCisgICAgdnBzcmFkICAgICAgJTIsICUyLCBERVNDQUxFX1AgJSsgJTkKKyAgICB2cHNyYWQgICAgICAlNiwgJTYsIERFU0NBTEVfUCAlKyAlOQorCisgICAgdnBhY2tzc2R3ICAgJTMsICUyLCAlNiAgICAgICAgICAgICAgOyAlNj1kYXRhMl82CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICB2cGFkZHcgICAgICAlNywgJTgsICU1ICAgICAgICAgICAgICA7ICU3PXRtcDRfNSt0bXA2Xzc9ejNfNAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworICAgIHZwZXJtMmkxMjggICUyLCAlNywgJTcsIDB4MDEgICAgICAgIDsgJTI9ejRfMworICAgIHZwdW5wY2tsd2QgICU2LCAlNywgJTIKKyAgICB2cHVucGNraHdkICAlNywgJTcsICUyCisgICAgdnBtYWRkd2QgICAgJTYsICU2LCBbcmVsIFBXX01GMDc4X0YxMTdfRjA3OF9GMTE3XSAgOyAlNj16M180TAorICAgIHZwbWFkZHdkICAgICU3LCAlNywgW3JlbCBQV19NRjA3OF9GMTE3X0YwNzhfRjExN10gIDsgJTc9ejNfNEgKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisgICAgOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKKyAgICA7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKKyAgICA7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworICAgIDsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworICAgIDsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworICAgIDsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgIDsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKyAgICA7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisKKyAgICB2cGVybTJpMTI4ICAlNCwgJTUsICU1LCAweDAxICAgICAgICA7ICU0PXRtcDdfNgorICAgIHZwdW5wY2tsd2QgICUyLCAlOCwgJTQKKyAgICB2cHVucGNraHdkICAlNCwgJTgsICU0CisgICAgdnBtYWRkd2QgICAgJTIsICUyLCBbcmVsIFBXX01GMDYwX01GMDg5X01GMDUwX01GMjU2XSAgOyAlMj10bXA0XzVMCisgICAgdnBtYWRkd2QgICAgJTQsICU0LCBbcmVsIFBXX01GMDYwX01GMDg5X01GMDUwX01GMjU2XSAgOyAlND10bXA0XzVICisKKyAgICB2cGFkZGQgICAgICAlMiwgJTIsICU2ICAgICAgICAgICAgICA7ICUyPWRhdGE3XzVMCisgICAgdnBhZGRkICAgICAgJTQsICU0LCAlNyAgICAgICAgICAgICAgOyAlND1kYXRhN181SAorCisgICAgdnBhZGRkICAgICAgJTIsICUyLCBbcmVsIFBEX0RFU0NBTEVfUCAlKyAlOV0KKyAgICB2cGFkZGQgICAgICAlNCwgJTQsIFtyZWwgUERfREVTQ0FMRV9QICUrICU5XQorICAgIHZwc3JhZCAgICAgICUyLCAlMiwgREVTQ0FMRV9QICUrICU5CisgICAgdnBzcmFkICAgICAgJTQsICU0LCBERVNDQUxFX1AgJSsgJTkKKworICAgIHZwYWNrc3NkdyAgICU0LCAlMiwgJTQgICAgICAgICAgICAgIDsgJTQ9ZGF0YTdfNQorCisgICAgdnBlcm0yaTEyOCAgJTIsICU4LCAlOCwgMHgwMSAgICAgICAgOyAlMj10bXA1XzQKKyAgICB2cHVucGNrbHdkICAlOCwgJTUsICUyCisgICAgdnB1bnBja2h3ZCAgJTUsICU1LCAlMgorICAgIHZwbWFkZHdkICAgICU4LCAlOCwgW3JlbCBQV19GMDUwX01GMjU2X0YwNjBfTUYwODldICA7ICU4PXRtcDZfN0wKKyAgICB2cG1hZGR3ZCAgICAlNSwgJTUsIFtyZWwgUFdfRjA1MF9NRjI1Nl9GMDYwX01GMDg5XSAgOyAlNT10bXA2XzdICisKKyAgICB2cGFkZGQgICAgICAlOCwgJTgsICU2ICAgICAgICAgICAgICA7ICU4PWRhdGEzXzFMCisgICAgdnBhZGRkICAgICAgJTUsICU1LCAlNyAgICAgICAgICAgICAgOyAlNT1kYXRhM18xSAorCisgICAgdnBhZGRkICAgICAgJTgsICU4LCBbcmVsIFBEX0RFU0NBTEVfUCAlKyAlOV0KKyAgICB2cGFkZGQgICAgICAlNSwgJTUsIFtyZWwgUERfREVTQ0FMRV9QICUrICU5XQorICAgIHZwc3JhZCAgICAgICU4LCAlOCwgREVTQ0FMRV9QICUrICU5CisgICAgdnBzcmFkICAgICAgJTUsICU1LCBERVNDQUxFX1AgJSsgJTkKKworICAgIHZwYWNrc3NkdyAgICUyLCAlOCwgJTUgICAgICAgICAgICAgIDsgJTI9ZGF0YTNfMQorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaXNsb3dfYXZ4MikKKworRVhUTihqY29uc3RfZmRjdF9pc2xvd19hdngyKToKKworUFdfRjEzMF9GMDU0X01GMTMwX0YwNTQgICAgdGltZXMgNCAgZHcgIChGXzBfNTQxICsgRl8wXzc2NSksICBGXzBfNTQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA0ICBkdyAgKEZfMF81NDEgLSBGXzFfODQ3KSwgIEZfMF81NDEKK1BXX01GMDc4X0YxMTdfRjA3OF9GMTE3ICAgIHRpbWVzIDQgIGR3ICAoRl8xXzE3NSAtIEZfMV85NjEpLCAgRl8xXzE3NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgNCAgZHcgIChGXzFfMTc1IC0gRl8wXzM5MCksICBGXzFfMTc1CitQV19NRjA2MF9NRjA4OV9NRjA1MF9NRjI1NiB0aW1lcyA0ICBkdyAgKEZfMF8yOTggLSBGXzBfODk5KSwgLUZfMF84OTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIDQgIGR3ICAoRl8yXzA1MyAtIEZfMl81NjIpLCAtRl8yXzU2MgorUFdfRjA1MF9NRjI1Nl9GMDYwX01GMDg5ICAgdGltZXMgNCAgZHcgIChGXzNfMDcyIC0gRl8yXzU2MiksIC1GXzJfNTYyCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA0ICBkdyAgKEZfMV81MDEgLSBGXzBfODk5KSwgLUZfMF84OTkKK1BEX0RFU0NBTEVfUDEgICAgICAgICAgICAgIHRpbWVzIDggIGRkICAxIDw8IChERVNDQUxFX1AxIC0gMSkKK1BEX0RFU0NBTEVfUDIgICAgICAgICAgICAgIHRpbWVzIDggIGRkICAxIDw8IChERVNDQUxFX1AyIC0gMSkKK1BXX0RFU0NBTEVfUDJYICAgICAgICAgICAgIHRpbWVzIDE2IGR3ICAxIDw8IChQQVNTMV9CSVRTIC0gMSkKK1BXXzFfTkVHMSAgICAgICAgICAgICAgICAgIHRpbWVzIDggIGR3ICAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA4ICBkdyAtMQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgNjQKKzsKKzsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9mZGN0X2lzbG93X2F2eDIoRENURUxFTSAqZGF0YSkKKzsKKworOyByMTAgPSBEQ1RFTEVNICpkYXRhCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2lzbG93X2F2eDIpCisKK0VYVE4oanNpbWRfZmRjdF9pc2xvd19hdngyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgY29sbGVjdF9hcmdzIDEKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKworICAgIHZtb3ZkcXUgICAgIHltbTQsIFlNTVdPUkQgW1lNTUJMT0NLKDAsMCxyMTAsU0laRU9GX0RDVEVMRU0pXQorICAgIHZtb3ZkcXUgICAgIHltbTUsIFlNTVdPUkQgW1lNTUJMT0NLKDIsMCxyMTAsU0laRU9GX0RDVEVMRU0pXQorICAgIHZtb3ZkcXUgICAgIHltbTYsIFlNTVdPUkQgW1lNTUJMT0NLKDQsMCxyMTAsU0laRU9GX0RDVEVMRU0pXQorICAgIHZtb3ZkcXUgICAgIHltbTcsIFlNTVdPUkQgW1lNTUJMT0NLKDYsMCxyMTAsU0laRU9GX0RDVEVMRU0pXQorICAgIDsgeW1tND0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgIDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIDsgeW1tNT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgIDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgIDsgeW1tNj0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgIDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorICAgIDsgeW1tNz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcgIDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgdnBlcm0yaTEyOCAgeW1tMCwgeW1tNCwgeW1tNiwgMHgyMAorICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTQsIHltbTYsIDB4MzEKKyAgICB2cGVybTJpMTI4ICB5bW0yLCB5bW01LCB5bW03LCAweDIwCisgICAgdnBlcm0yaTEyOCAgeW1tMywgeW1tNSwgeW1tNywgMHgzMQorICAgIDsgeW1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgIDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgIDsgeW1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgIDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorICAgIDsgeW1tMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgIDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorICAgIDsgeW1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgIDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgZG90cmFuc3Bvc2UgeW1tMCwgeW1tMSwgeW1tMiwgeW1tMywgeW1tNCwgeW1tNSwgeW1tNiwgeW1tNworCisgICAgZG9kY3QgICAgICAgeW1tMCwgeW1tMSwgeW1tMiwgeW1tMywgeW1tNCwgeW1tNSwgeW1tNiwgeW1tNywgMQorICAgIDsgeW1tMD1kYXRhMF80LCB5bW0xPWRhdGEzXzEsIHltbTI9ZGF0YTJfNiwgeW1tMz1kYXRhN181CisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW0xLCB5bW0zLCAweDIwICA7IHltbTQ9ZGF0YTNfNworICAgIHZwZXJtMmkxMjggIHltbTEsIHltbTEsIHltbTMsIDB4MzEgIDsgeW1tMT1kYXRhMV81CisKKyAgICBkb3RyYW5zcG9zZSB5bW0wLCB5bW0xLCB5bW0yLCB5bW00LCB5bW0zLCB5bW01LCB5bW02LCB5bW03CisKKyAgICBkb2RjdCAgICAgICB5bW0wLCB5bW0xLCB5bW0yLCB5bW00LCB5bW0zLCB5bW01LCB5bW02LCB5bW03LCAyCisgICAgOyB5bW0wPWRhdGEwXzQsIHltbTE9ZGF0YTNfMSwgeW1tMj1kYXRhMl82LCB5bW00PWRhdGE3XzUKKworICAgIHZwZXJtMmkxMjggeW1tMywgeW1tMCwgeW1tMSwgMHgzMCAgIDsgeW1tMz1kYXRhMF8xCisgICAgdnBlcm0yaTEyOCB5bW01LCB5bW0yLCB5bW0xLCAweDIwICAgOyB5bW01PWRhdGEyXzMKKyAgICB2cGVybTJpMTI4IHltbTYsIHltbTAsIHltbTQsIDB4MzEgICA7IHltbTY9ZGF0YTRfNQorICAgIHZwZXJtMmkxMjggeW1tNywgeW1tMiwgeW1tNCwgMHgyMSAgIDsgeW1tNz1kYXRhNl83CisKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtZTU1CTE9DSygwLDAscjEwLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTMKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtZTU1CTE9DSygyLDAscjEwLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTUKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtZTU1CTE9DSyg0LDAscjEwLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTYKKyAgICB2bW92ZHF1ICAgICBZTU1XT1JEIFtZTU1CTE9DSyg2LDAscjEwLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTcKKworICAgIHZ6ZXJvdXBwZXIKKyAgICB1bmNvbGxlY3RfYXJncyAxCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pmZGN0aW50LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamZkY3RpbnQtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxNmE1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pmZGN0aW50LXNzZTIuYXNtCkBAIC0wLDAgKzEsNjIxIEBACis7Cis7IGpmZGN0aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4IGVxdSAgMjQ0NiAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgMzE5NiAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgNDQzMyAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgNjI3MCAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgNzM3MyAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgOTYzMyAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAxMjI5OSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAxNTEzNyAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAxNjA2OSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAxNjgxOSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAyMDk5NSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAyNTE3MiAgOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCwgbikgICgoKHgpICsgKDEgPDwgKChuKSAtIDEpKSkgPj4gKG4pKQorRl8wXzI5OCBlcXUgREVTQ0FMRSggMzIwNjUyOTU1LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1IERFU0NBTEUoIDQxODk1MzI3NiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSBERVNDQUxFKCA1ODExMDQ4ODcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgREVTQ0FMRSggODIxODA2NDEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1IERFU0NBTEUoIDk2NjM0MjExMSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSBERVNDQUxFKDEyNjI1ODY4MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgREVTQ0FMRSgxNjEyMDMxMjY3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IERFU0NBTEUoMTk4NDAxNjE4OCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSBERVNDQUxFKDIxMDYyMjAzNTAsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgREVTQ0FMRSgyMjA0NTIwNjczLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IERFU0NBTEUoMjc1MTkwOTUwNiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSBERVNDQUxFKDMyOTkyOTgzNDEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikKKworRVhUTihqY29uc3RfZmRjdF9pc2xvd19zc2UyKToKKworUFdfRjEzMF9GMDU0ICAgdGltZXMgNCBkdyAgKEZfMF81NDEgKyBGXzBfNzY1KSwgIEZfMF81NDEKK1BXX0YwNTRfTUYxMzAgIHRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxIC0gRl8xXzg0NykKK1BXX01GMDc4X0YxMTcgIHRpbWVzIDQgZHcgIChGXzFfMTc1IC0gRl8xXzk2MSksICBGXzFfMTc1CitQV19GMTE3X0YwNzggICB0aW1lcyA0IGR3ICBGXzFfMTc1LCAoRl8xXzE3NSAtIEZfMF8zOTApCitQV19NRjA2MF9NRjA4OSB0aW1lcyA0IGR3ICAoRl8wXzI5OCAtIEZfMF84OTkpLCAtRl8wXzg5OQorUFdfTUYwODlfRjA2MCAgdGltZXMgNCBkdyAtRl8wXzg5OSwgKEZfMV81MDEgLSBGXzBfODk5KQorUFdfTUYwNTBfTUYyNTYgdGltZXMgNCBkdyAgKEZfMl8wNTMgLSBGXzJfNTYyKSwgLUZfMl81NjIKK1BXX01GMjU2X0YwNTAgIHRpbWVzIDQgZHcgLUZfMl81NjIsIChGXzNfMDcyIC0gRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEgIHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDEgLSAxKQorUERfREVTQ0FMRV9QMiAgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMiAtIDEpCitQV19ERVNDQUxFX1AyWCB0aW1lcyA4IGR3ICAxIDw8IChQQVNTMV9CSVRTIC0gMSkKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pc2xvd19zc2UyKERDVEVMRU0gKmRhdGEpCis7CisKKzsgcjEwID0gRENURUxFTSAqZGF0YQorCislZGVmaW5lIHdrKGkpICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRCAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICA2CisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9mZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oanNpbWRfZmRjdF9pc2xvd19zc2UyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgc3ViICAgICAgICAgcnNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbcnNwXSwgcmF4CisgICAgbW92ICAgICAgICAgcmJwLCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgbGVhICAgICAgICAgcnNwLCBbd2soMCldCisgICAgY29sbGVjdF9hcmdzIDEKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKworICAgIG1vdiAgICAgICAgIHJkeCwgcjEwICAgICAgICAgICAgICAgIDsgKERDVEVMRU0gKikKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCisgICAgOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIDsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKworICAgIDsgeG1tNj0oIDQgMTIgMjAgMjggMzYgNDQgNTIgNjApLCB4bW0xPSggNiAxNCAyMiAzMCAzOCA0NiA1NCA2MikKKyAgICA7IHhtbTc9KCA1IDEzIDIxIDI5IDM3IDQ1IDUzIDYxKSwgeG1tMz0oIDcgMTUgMjMgMzEgMzkgNDcgNTUgNjMpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTUgICA7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgcHVucGNraHdkICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorICAgIHB1bnBja2hkcSAgIHhtbTcsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW01ICAgICAgICAgICAgICA7IHhtbTM9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tNyAgIDsgd2soMik9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDMpXSwgeG1tMiAgIDsgd2soMyk9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICBwdW5wY2toZHEgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgcHVucGNraGRxICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisgICAgcHVucGNraHFkcSAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorICAgIHB1bnBja2hxZHEgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMAorICAgIHBzdWJ3ICAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tNT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0xICAgOyB3aygwKT10bXA2CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT10bXA3CisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgorICAgIHB1bnBja2hxZHEgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKKyAgICBwdW5wY2tocWRxICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW00ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTMrZGF0YTQ9dG1wMworICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNCAgICAgICAgICAgICAgOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTItZGF0YTU9dG1wNQorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW02CisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PXRtcDExCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PXRtcDEzCisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPXRtcDEwK3RtcDExCisgICAgcHN1YncgICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwLXRtcDExCisKKyAgICBwc2xsdyAgICAgICB4bW0zLCBQQVNTMV9CSVRTICAgICAgICA7IHhtbTM9ZGF0YTAKKyAgICBwc2xsdyAgICAgICB4bW0xLCBQQVNTMV9CSVRTICAgICAgICA7IHhtbTE9ZGF0YTQKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tMyAgIDsgd2soMik9ZGF0YTAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTEgICA7IHdrKDMpPWRhdGE0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7CisgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICA7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworICAgIDsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTMKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00CisgICAgcHVucGNrbHdkICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW02CisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19GMTMwX0YwNTRdICAgOyB4bW03PWRhdGEyTAorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtyZWwgUFdfRjEzMF9GMDU0XSAgIDsgeG1tNj1kYXRhMkgKKyAgICBwbWFkZHdkICAgICB4bW00LCBbcmVsIFBXX0YwNTRfTUYxMzBdICA7IHhtbTQ9ZGF0YTZMCisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW3JlbCBQV19GMDU0X01GMTMwXSAgOyB4bW0wPWRhdGE2SAorCisgICAgcGFkZGQgICAgICAgeG1tNywgW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgIHBhZGRkICAgICAgIHhtbTYsIFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIHhtbTQsIFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICBwYWRkZCAgICAgICB4bW0wLCBbcmVsIFBEX0RFU0NBTEVfUDFdCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIHhtbTAsIERFU0NBTEVfUDEKKworICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMgorICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND1kYXRhNgorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNCldLCB4bW03ICAgOyB3ayg0KT1kYXRhMgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDUpXSwgeG1tNCAgIDsgd2soNSk9ZGF0YTYKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMz10bXA2CisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMSldICAgOyB4bW0xPXRtcDcKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMj10bXA0CisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW01PXRtcDUKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9ejMKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9ejQKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNgorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTAKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQKKyAgICBwbWFkZHdkICAgICB4bW03LCBbcmVsIFBXX01GMDc4X0YxMTddICA7IHhtbTc9ejNMCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19NRjA3OF9GMTE3XSAgOyB4bW00PXozSAorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtyZWwgUFdfRjExN19GMDc4XSAgIDsgeG1tNj16NEwKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX0YxMTdfRjA3OF0gICA7IHhtbTA9ejRICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXozTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgd2soMSk9ejNICisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworICAgIDsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisgICAgOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKyAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgIDsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisgICAgOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisgICAgOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW03LCB4bW0xCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW00CisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19NRjA2MF9NRjA4OV0gIDsgeG1tNz10bXA0TAorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfTUYwNjBfTUYwODldICA7IHhtbTQ9dG1wNEgKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbcmVsIFBXX01GMDg5X0YwNjBdICAgOyB4bW0yPXRtcDdMCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19NRjA4OV9GMDYwXSAgIDsgeG1tMT10bXA3SAorCisgICAgcGFkZGQgICAgICAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PWRhdGE3TAorICAgIHBhZGRkICAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tND1kYXRhN0gKKyAgICBwYWRkZCAgICAgICB4bW0yLCB4bW02ICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTFMCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tMCAgICAgICAgICAgICAgOyB4bW0xPWRhdGExSAorCisgICAgcGFkZGQgICAgICAgeG1tNywgW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgIHBhZGRkICAgICAgIHhtbTQsIFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIHhtbTIsIFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICBwYWRkZCAgICAgICB4bW0xLCBbcmVsIFBEX0RFU0NBTEVfUDFdCisgICAgcHNyYWQgICAgICAgeG1tMiwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDEKKworICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNworICAgIHBhY2tzc2R3ICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTUKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW0zCisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0xCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19NRjA1MF9NRjI1Nl0gIDsgeG1tND10bXA1TAorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtyZWwgUFdfTUYwNTBfTUYyNTZdICA7IHhtbTE9dG1wNUgKKyAgICBwbWFkZHdkICAgICB4bW01LCBbcmVsIFBXX01GMjU2X0YwNTBdICAgOyB4bW01PXRtcDZMCisgICAgcG1hZGR3ZCAgICAgeG1tMywgW3JlbCBQV19NRjI1Nl9GMDUwXSAgIDsgeG1tMz10bXA2SAorCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGE1TAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNUgKKyAgICBwYWRkZCAgICAgICB4bW01LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTU9ZGF0YTNMCisgICAgcGFkZGQgICAgICAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPWRhdGEzSAorCisgICAgcGFkZGQgICAgICAgeG1tNCwgW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgIHBhZGRkICAgICAgIHhtbTEsIFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tMSwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIHhtbTUsIFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICBwYWRkZCAgICAgICB4bW0zLCBbcmVsIFBEX0RFU0NBTEVfUDFdCisgICAgcHNyYWQgICAgICAgeG1tNSwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDEKKworICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND1kYXRhNQorICAgIHBhY2tzc2R3ICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMworCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soMildICAgOyB4bW02PWNvbDAKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTA9Y29sMgorCisgICAgOyB4bW02PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCksIHhtbTA9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgIDsgeG1tMj0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpLCB4bW01PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPSg0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTI9Y29sNAorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tNT1jb2w2CisKKyAgICA7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgOyB4bW00PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0wICAgOyB3aygwKT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0zICAgOyB3aygxKT0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD0oNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKyAgICBwdW5wY2tod2QgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9KDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKyAgICBwdW5wY2toZHEgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgcHVucGNraGRxICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PSg2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTQgICA7IHdrKDIpPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTAgICA7IHdrKDMpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisgICAgcHVucGNraGRxICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0xLCB4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQorICAgIHB1bnBja2hkcSAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KT1kYXRhMAorICAgIHB1bnBja2hxZHEgIHhtbTUsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpPWRhdGExCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB4bW0wPSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2Nyk9ZGF0YTYKKyAgICBwdW5wY2tocWRxICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KT1kYXRhNworCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTYKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTEtZGF0YTY9dG1wNgorICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMCAgICAgICAgICAgICAgOyB4bW0yPWRhdGExK2RhdGE2PXRtcDEKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTArZGF0YTc9dG1wMAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbd2soMildICAgOyB4bW0wPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTM9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNSAgIDsgd2soMCk9dG1wNgorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNiAgIDsgd2soMSk9dG1wNworCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyk9ZGF0YTIKKyAgICBwdW5wY2tocWRxICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KT1kYXRhMworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTEsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpPWRhdGE0CisgICAgcHVucGNraHFkcSAgeG1tNiwgeG1tMyAgICAgICAgICAgICAgOyB4bW02PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1Nyk9ZGF0YTUKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW00CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB4bW01PWRhdGEzK2RhdGE0PXRtcDMKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMy1kYXRhND10bXA0CisgICAgcHN1YncgICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03CisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMgorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNz10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMj10bXAxMQorICAgIHBzdWJ3ICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT10bXAxMworICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj10bXAxMgorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNworICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz10bXAxMCt0bXAxMQorICAgIHBzdWJ3ICAgICAgIHhtbTUsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNT10bXAxMC10bXAxMQorCisgICAgcGFkZHcgICAgICAgeG1tNywgW3JlbCBQV19ERVNDQUxFX1AyWF0KKyAgICBwYWRkdyAgICAgICB4bW01LCBbcmVsIFBXX0RFU0NBTEVfUDJYXQorICAgIHBzcmF3ICAgICAgIHhtbTcsIFBBU1MxX0JJVFMgICAgICAgIDsgeG1tNz1kYXRhMAorICAgIHBzcmF3ICAgICAgIHhtbTUsIFBBU1MxX0JJVFMgICAgICAgIDsgeG1tNT1kYXRhNAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW03CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW01CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7CisgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICA7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworICAgIDsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9dG1wMTMKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0xCisgICAgcHVucGNrbHdkICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PXRtcDEyCisgICAgcHVucGNraHdkICAgeG1tMiwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19GMTMwX0YwNTRdICAgOyB4bW00PWRhdGEyTAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtyZWwgUFdfRjEzMF9GMDU0XSAgIDsgeG1tMj1kYXRhMkgKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbcmVsIFBXX0YwNTRfTUYxMzBdICA7IHhtbTE9ZGF0YTZMCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW3JlbCBQV19GMDU0X01GMTMwXSAgOyB4bW02PWRhdGE2SAorCisgICAgcGFkZGQgICAgICAgeG1tNCwgW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgIHBhZGRkICAgICAgIHhtbTIsIFtyZWwgUERfREVTQ0FMRV9QMl0KKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tMiwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIHhtbTEsIFtyZWwgUERfREVTQ0FMRV9QMl0KKyAgICBwYWRkZCAgICAgICB4bW02LCBbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgcHNyYWQgICAgICAgeG1tMSwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTYsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND1kYXRhMgorICAgIHBhY2tzc2R3ICAgIHhtbTEsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNgorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9dG1wNgorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT10bXA3CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTA9dG1wNAorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMz10bXA1CisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPXozCisgICAgcGFkZHcgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXo0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMgorICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW02CisgICAgcHVucGNraHdkICAgeG1tMSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19NRjA3OF9GMTE3XSAgOyB4bW00PXozTAorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtyZWwgUFdfTUYwNzhfRjExN10gIDsgeG1tMT16M0gKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbcmVsIFBXX0YxMTdfRjA3OF0gICA7IHhtbTI9ejRMCisgICAgcG1hZGR3ZCAgICAgeG1tNiwgW3JlbCBQV19GMTE3X0YwNzhdICAgOyB4bW02PXo0SAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT16M0wKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTEgICA7IHdrKDEpPXozSAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsKKyAgICA7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OworICAgIDsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7CisgICAgOyB0bXA1ID0gdG1wNSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDYgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgOyBkYXRhNyA9IHRtcDQgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHo0OworICAgIDsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0wCisgICAgcHVucGNrbHdkICAgeG1tNCwgeG1tNQorICAgIHB1bnBja2h3ZCAgIHhtbTEsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfTUYwNjBfTUYwODldICA7IHhtbTQ9dG1wNEwKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbcmVsIFBXX01GMDYwX01GMDg5XSAgOyB4bW0xPXRtcDRICisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW3JlbCBQV19NRjA4OV9GMDYwXSAgIDsgeG1tMD10bXA3TAorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfTUYwODlfRjA2MF0gICA7IHhtbTU9dG1wN0gKKworICAgIHBhZGRkICAgICAgIHhtbTQsICBYTU1XT1JEIFt3aygwKV0gIDsgeG1tND1kYXRhN0wKKyAgICBwYWRkZCAgICAgICB4bW0xLCAgWE1NV09SRCBbd2soMSldICA7IHhtbTE9ZGF0YTdICisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWRhdGExTAorICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMUgKKworICAgIHBhZGRkICAgICAgIHhtbTQsIFtyZWwgUERfREVTQ0FMRV9QMl0KKyAgICBwYWRkZCAgICAgICB4bW0xLCBbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDIKKyAgICBwYWRkZCAgICAgICB4bW0wLCBbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgcGFkZGQgICAgICAgeG1tNSwgW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgIHBzcmFkICAgICAgIHhtbTAsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AyCisKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTcKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTMKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW03CisgICAgcHVucGNraHdkICAgeG1tNSwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW01CisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19NRjA1MF9NRjI1Nl0gIDsgeG1tMT10bXA1TAorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfTUYwNTBfTUYyNTZdICA7IHhtbTU9dG1wNUgKKyAgICBwbWFkZHdkICAgICB4bW0zLCBbcmVsIFBXX01GMjU2X0YwNTBdICAgOyB4bW0zPXRtcDZMCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19NRjI1Nl9GMDUwXSAgIDsgeG1tNz10bXA2SAorCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tMiAgICAgICAgICAgICAgOyB4bW0xPWRhdGE1TAorICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNUgKKyAgICBwYWRkZCAgICAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9ZGF0YTNMCisgICAgcGFkZGQgICAgICAgeG1tNywgWE1NV09SRCBbd2soMSldICAgOyB4bW03PWRhdGEzSAorCisgICAgcGFkZGQgICAgICAgeG1tMSwgW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgIHBhZGRkICAgICAgIHhtbTUsIFtyZWwgUERfREVTQ0FMRV9QMl0KKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tNSwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIHhtbTMsIFtyZWwgUERfREVTQ0FMRV9QMl0KKyAgICBwYWRkZCAgICAgICB4bW03LCBbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgcHNyYWQgICAgICAgeG1tMywgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTcsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNQorICAgIHBhY2tzc2R3ICAgIHhtbTMsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMworCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisKKyAgICB1bmNvbGxlY3RfYXJncyAxCisgICAgbW92ICAgICAgICAgcnNwLCByYnAgICAgICAgICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICBwb3AgICAgICAgICByc3AgICAgICAgICAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamlkY3RmbHQtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qaWRjdGZsdC1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjc2ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamlkY3RmbHQtc3NlMi5hc20KQEAgLTAsMCArMSw0ODMgQEAKKzsKKzsgamlkY3RmbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgSURDVCAoNjQtYml0IFNTRSAmIFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RmbHQuYzsgc2VlIHRoZSBqaWRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVtYWNybyB1bnBja2xwczIgMiAgOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCisgICAgc2h1ZnBzICAgICAgJTEsICUyLCAweDQ0CislZW5kbWFjcm8KKworJW1hY3JvIHVucGNraHBzMiAyICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMiAzIDYgNykKKyAgICBzaHVmcHMgICAgICAlMSwgJTIsIDB4RUUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpCisKK0VYVE4oamNvbnN0X2lkY3RfZmxvYXRfc3NlMik6CisKK1BEXzFfNDE0ICAgICAgICB0aW1lcyA0ICBkZCAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKK1BEXzFfODQ3ICAgICAgICB0aW1lcyA0ICBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKK1BEXzFfMDgyICAgICAgICB0aW1lcyA0ICBkZCAgMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDYKK1BEX00yXzYxMyAgICAgICB0aW1lcyA0ICBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQyB0aW1lcyA0ICBkZCAgMTAwNjYzMjk2LjAgIDsgKGZsb2F0KSgweDAwQzAwMDAwIDw8IDMpCitQQl9DRU5URVJKU0FNUCAgdGltZXMgMTYgZGIgIENFTlRFUkpTQU1QTEUKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0X2Zsb2F0X3NzZTIodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKzsgcjEwID0gdm9pZCAqZGN0X3RhYmxlCis7IHIxMSA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCis7IHIxM2QgPSBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9yYnAgIHJicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAyCislZGVmaW5lIHdvcmtzcGFjZSAgICAgd2soMCkgLSBEQ1RTSVpFMiAqIFNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICBzdWIgICAgICAgICByc3AsIGJ5dGUgNAorICAgIGFuZCAgICAgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgOyBhbGlnbiB0byAxMjggYml0cworICAgIG1vdiAgICAgICAgIFtyc3BdLCByYXgKKyAgICBtb3YgICAgICAgICByYnAsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICBsZWEgICAgICAgICByc3AsIFt3b3Jrc3BhY2VdCisgICAgY29sbGVjdF9hcmdzIDQKKyAgICBwdXNoICAgICAgICByYngKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICByZHgsIHIxMCAgICAgICAgICAgICAgICA7IHF1YW50cHRyCisgICAgbW92ICAgICAgICAgcnNpLCByMTEgICAgICAgICAgICAgICAgOyBpbnB0cgorICAgIGxlYSAgICAgICAgIHJkaSwgW3dvcmtzcGFjZV0gICAgICAgIDsgRkFTVF9GTE9BVCAqd3NwdHIKKyAgICBtb3YgICAgICAgICByY3gsIERDVFNJWkUvNCAgICAgICAgICA7IGN0cgorLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfRkxPQVRfU1NFCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uRENUCisKKyAgICBtb3ZxICAgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW0zLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW00LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW02LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZxICAgICAgICB4bW03LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW0yCisgICAgcG9yICAgICAgICAgeG1tMywgeG1tNAorICAgIHBvciAgICAgICAgIHhtbTUsIHhtbTYKKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW0zCisgICAgcG9yICAgICAgICAgeG1tNSwgeG1tNworICAgIHBvciAgICAgICAgIHhtbTEsIHhtbTUKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0xCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0xCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZxICAgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KKworICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgIHBzcmFkICAgICAgIHhtbTAsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICBjdnRkcTJwcyAgICB4bW0wLCB4bW0wICAgICAgICAgICAgICAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisKKyAgICBtdWxwcyAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTIsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW0wCisKKyAgICBzaHVmcHMgICAgICB4bW0wLCB4bW0wLCAweDAwICAgICAgICA7IHhtbTA9KDAwIDAwIDAwIDAwKQorICAgIHNodWZwcyAgICAgIHhtbTEsIHhtbTEsIDB4NTUgICAgICAgIDsgeG1tMT0oMDEgMDEgMDEgMDEpCisgICAgc2h1ZnBzICAgICAgeG1tMiwgeG1tMiwgMHhBQSAgICAgICAgOyB4bW0yPSgwMiAwMiAwMiAwMikKKyAgICBzaHVmcHMgICAgICB4bW0zLCB4bW0zLCAweEZGICAgICAgICA7IHhtbTM9KDAzIDAzIDAzIDAzKQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgam1wICAgICAgICAgbmVhciAubmV4dGNvbHVtbgorJWVuZGlmCisuY29sdW1uRENUOgorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdnEgICAgICAgIHhtbTAsIFhNTV9NTVdPUkQgW01NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIHhtbTEsIFhNTV9NTVdPUkQgW01NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdnEgICAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgICAgIDsgeG1tMT0oMjAgMjAgMjEgMjEgMjIgMjIgMjMgMjMpCisgICAgcHNyYWQgICAgICAgeG1tMCwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorICAgIHBzcmFkICAgICAgIHhtbTEsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKKyAgICBjdnRkcTJwcyAgICB4bW0wLCB4bW0wICAgICAgICAgICAgICAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgY3Z0ZHEycHMgICAgeG1tMSwgeG1tMSAgICAgICAgICAgICAgICAgIDsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQorCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oNDAgNDAgNDEgNDEgNDIgNDIgNDMgNDMpCisgICAgcHVucGNrbHdkICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgICAgIDsgeG1tMz0oNjAgNjAgNjEgNjEgNjIgNjIgNjMgNjMpCisgICAgcHNyYWQgICAgICAgeG1tMiwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMj1pbjQ9KDQwIDQxIDQyIDQzKQorICAgIHBzcmFkICAgICAgIHhtbTMsIChEV09SRF9CSVQtV09SRF9CSVQpICA7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKKyAgICBjdnRkcTJwcyAgICB4bW0yLCB4bW0yICAgICAgICAgICAgICAgICAgOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCisgICAgY3Z0ZHEycHMgICAgeG1tMywgeG1tMyAgICAgICAgICAgICAgICAgIDsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorCisgICAgbXVscHMgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBtdWxwcyAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgIG11bHBzICAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgbXVscHMgICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTAKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW0xCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCisgICAgc3VicHMgICAgICAgeG1tMSwgeG1tMworICAgIGFkZHBzICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT10bXAxMworCisgICAgbXVscHMgICAgICAgeG1tMSwgW3JlbCBQRF8xXzQxNF0KKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIKKworICAgIG1vdmFwcyAgICAgIHhtbTYsIHhtbTQKKyAgICBtb3ZhcHMgICAgICB4bW03LCB4bW0wCisgICAgc3VicHMgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PXRtcDEKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgdG1wMworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgdG1wMgorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92cSAgICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgeG1tMywgWE1NX01NV09SRCBbTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgeG1tNSwgWE1NX01NV09SRCBbTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92cSAgICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0yICAgICAgICAgICAgICAgICAgOyB4bW0yPSgxMCAxMCAxMSAxMSAxMiAxMiAxMyAxMykKKyAgICBwdW5wY2tsd2QgICB4bW0zLCB4bW0zICAgICAgICAgICAgICAgICAgOyB4bW0zPSgzMCAzMCAzMSAzMSAzMiAzMiAzMyAzMykKKyAgICBwc3JhZCAgICAgICB4bW0yLCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCisgICAgcHNyYWQgICAgICAgeG1tMywgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQorICAgIGN2dGRxMnBzICAgIHhtbTIsIHhtbTIgICAgICAgICAgICAgICAgICA7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKKyAgICBjdnRkcTJwcyAgICB4bW0zLCB4bW0zICAgICAgICAgICAgICAgICAgOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW01ICAgICAgICAgICAgICAgICAgOyB4bW01PSg1MCA1MCA1MSA1MSA1MiA1MiA1MyA1MykKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW0xICAgICAgICAgICAgICAgICAgOyB4bW0xPSg3MCA3MCA3MSA3MSA3MiA3MiA3MyA3MykKKyAgICBwc3JhZCAgICAgICB4bW01LCAoRFdPUkRfQklULVdPUkRfQklUKSAgOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisgICAgcHNyYWQgICAgICAgeG1tMSwgKERXT1JEX0JJVC1XT1JEX0JJVCkgIDsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQorICAgIGN2dGRxMnBzICAgIHhtbTUsIHhtbTUgICAgICAgICAgICAgICAgICA7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKKyAgICBjdnRkcTJwcyAgICB4bW0xLCB4bW0xICAgICAgICAgICAgICAgICAgOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCisKKyAgICBtdWxwcyAgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgIG11bHBzICAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgbXVscHMgICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICBtdWxwcyAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tMgorICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTUKKyAgICBhZGRwcyAgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHhtbTI9ejExCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXoxMworICAgIHN1YnBzICAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND16MTIKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9ejEwCisKKyAgICBtb3ZhcHMgICAgICB4bW0xLCB4bW0yCisgICAgc3VicHMgICAgICAgeG1tMiwgeG1tNQorICAgIGFkZHBzICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT10bXA3CisKKyAgICBtdWxwcyAgICAgICB4bW0yLCBbcmVsIFBEXzFfNDE0XSAgICA7IHhtbTI9dG1wMTEKKworICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTAKKyAgICBhZGRwcyAgICAgICB4bW0wLCB4bW00CisgICAgbXVscHMgICAgICAgeG1tMCwgW3JlbCBQRF8xXzg0N10gICAgOyB4bW0wPXo1CisgICAgbXVscHMgICAgICAgeG1tMywgW3JlbCBQRF9NMl82MTNdICAgOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisgICAgbXVscHMgICAgICAgeG1tNCwgW3JlbCBQRF8xXzA4Ml0gICAgOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKyAgICBhZGRwcyAgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9dG1wMTIKKyAgICBzdWJwcyAgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBzdWJwcyAgICAgICB4bW0zLCB4bW0xICAgICAgICAgICAgICA7IHhtbTM9dG1wNgorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTYKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW03CisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTE9KDEwIDExIDEyIDEzKQorICAgIHN1YnBzICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNz0oNzAgNzEgNzIgNzMpCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPWRhdGE2PSg2MCA2MSA2MiA2MykKKyAgICBzdWJwcyAgICAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9dG1wNQorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAwMSAxMSkKKyAgICB1bnBja2hwcyAgICB4bW0xLCB4bW03ICAgICAgICAgICAgICA7IHhtbTE9KDAyIDEyIDAzIDEzKQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHVucGNrbHBzICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD0oNjAgNzAgNjEgNzEpCisgICAgdW5wY2tocHMgICAgeG1tMywgeG1tNSAgICAgICAgICAgICAgOyB4bW0zPSg2MiA3MiA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz10bXAyCisgICAgbW92YXBzICAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDMKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9KDYwIDcwIDYxIDcxKQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDYyIDcyIDYzIDczKQorCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDQKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW03CisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNQorICAgIGFkZHBzICAgICAgIHhtbTcsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMpCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQorICAgIHN1YnBzICAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMz0oMzAgMzEgMzIgMzMpCisKKyAgICBtb3ZhcHMgICAgICB4bW0yLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICB1bnBja2xwcyAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9KDIwIDMwIDIxIDMxKQorICAgIHVucGNraHBzICAgIHhtbTIsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMj0oMjIgMzIgMjMgMzMpCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgdW5wY2tscHMgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PSg0MCA1MCA0MSA1MSkKKyAgICB1bnBja2hwcyAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9KDQyIDUyIDQzIDUzKQorCisgICAgbW92YXBzICAgICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCkKKyAgICB1bnBja2hwczIgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9KDAxIDExIDIxIDMxKQorICAgIG1vdmFwcyAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT0oMDIgMTIgMjIgMzIpCisgICAgdW5wY2tocHMyICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPSgwMyAxMyAyMyAzMykKKworICAgIG1vdmFwcyAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz0oNjAgNzAgNjEgNzEpCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbd2soMSldICAgOyB4bW0yPSg2MiA3MiA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCisgICAgbW92YXBzICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgdW5wY2tscHMyICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PSg0MCA1MCA2MCA3MCkKKyAgICB1bnBja2hwczIgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDQxIDUxIDYxIDcxKQorICAgIG1vdmFwcyAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHVucGNrbHBzMiAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND0oNDIgNTIgNjIgNzIpCisgICAgdW5wY2tocHMyICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB4bW0zPSg0MyA1MyA2MyA3MykKKworICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorICAgIG1vdmFwcyAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworCisubmV4dGNvbHVtbjoKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYgICAgICAgICAgICAgICA7IGNvZWZfYmxvY2sKKyAgICBhZGQgICAgICAgICByZHgsIGJ5dGUgNCpTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFICAgICA7IHF1YW50cHRyCisgICAgYWRkICAgICAgICAgcmRpLCAgICAgIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVCAgOyB3c3B0cgorICAgIGRlYyAgICAgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1ubG9vcAorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICByYXgsIFtvcmlnaW5hbF9yYnBdCisgICAgbGVhICAgICAgICAgcnNpLCBbd29ya3NwYWNlXSAgICAgICAgOyBGQVNUX0ZMT0FUICp3c3B0cgorICAgIG1vdiAgICAgICAgIHJkaSwgcjEyICAgICAgICAgICAgICAgIDsgKEpTQU1QUk9XICopCisgICAgbW92ICAgICAgICAgZWF4LCByMTNkCisgICAgbW92ICAgICAgICAgcmN4LCBEQ1RTSVpFLzQgICAgICAgICAgOyBjdHIKKy5yb3dsb29wOgorCisgICAgOyAtLSBFdmVuIHBhcnQKKworICAgIG1vdmFwcyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgIG1vdmFwcyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisgICAgbW92YXBzICAgICAgeG1tNCwgeG1tMAorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTEKKyAgICBzdWJwcyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICBzdWJwcyAgICAgICB4bW0xLCB4bW0zCisgICAgYWRkcHMgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCisKKyAgICBtdWxwcyAgICAgICB4bW0xLCBbcmVsIFBEXzFfNDE0XQorICAgIHN1YnBzICAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT10bXAxMgorCisgICAgbW92YXBzICAgICAgeG1tNiwgeG1tNAorICAgIG1vdmFwcyAgICAgIHhtbTcsIHhtbTAKKyAgICBzdWJwcyAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMworICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD10bXAyCisgICAgYWRkcHMgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXRtcDAKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9dG1wMQorCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMSldLCB4bW00ICAgOyB0bXAzCisgICAgbW92YXBzICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0wICAgOyB0bXAyCisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZhcHMgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICBtb3ZhcHMgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworICAgIG1vdmFwcyAgICAgIHhtbTQsIHhtbTIKKyAgICBtb3ZhcHMgICAgICB4bW0wLCB4bW01CisgICAgYWRkcHMgICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT16MTMKKyAgICBzdWJwcyAgICAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9ejEyCisgICAgc3VicHMgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXoxMAorCisgICAgbW92YXBzICAgICAgeG1tMSwgeG1tMgorICAgIHN1YnBzICAgICAgIHhtbTIsIHhtbTUKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wNworCisgICAgbXVscHMgICAgICAgeG1tMiwgW3JlbCBQRF8xXzQxNF0gICAgOyB4bW0yPXRtcDExCisKKyAgICBtb3ZhcHMgICAgICB4bW0zLCB4bW0wCisgICAgYWRkcHMgICAgICAgeG1tMCwgeG1tNAorICAgIG11bHBzICAgICAgIHhtbTAsIFtyZWwgUERfMV84NDddICAgIDsgeG1tMD16NQorICAgIG11bHBzICAgICAgIHhtbTMsIFtyZWwgUERfTTJfNjEzXSAgIDsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQorICAgIG11bHBzICAgICAgIHhtbTQsIFtyZWwgUERfMV8wODJdICAgIDsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgYWRkcHMgICAgICAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPXRtcDEyCisgICAgc3VicHMgICAgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgc3VicHMgICAgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPXRtcDYKKyAgICBtb3ZhcHMgICAgICB4bW01LCB4bW02CisgICAgbW92YXBzICAgICAgeG1tMCwgeG1tNworICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDA3IDE3IDI3IDM3KQorICAgIHN1YnBzICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oMDYgMTYgMjYgMzYpCisgICAgc3VicHMgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKKworICAgIG1vdmFwcyAgICAgIHhtbTEsIFtyZWwgUERfUk5ESU5UX01BR0lDXSAgOyB4bW0xPVtyZWwgUERfUk5ESU5UX01BR0lDXQorICAgIHBjbXBlcWQgICAgIHhtbTMsIHhtbTMKKyAgICBwc3JsZCAgICAgICB4bW0zLCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTM9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KKworICAgIGFkZHBzICAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNj1yb3VuZGludChkYXRhMC84KT0oMDAgKiogMTAgKiogMjAgKiogMzAgKiopCisgICAgYWRkcHMgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PXJvdW5kaW50KGRhdGExLzgpPSgwMSAqKiAxMSAqKiAyMSAqKiAzMSAqKikKKyAgICBhZGRwcyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9cm91bmRpbnQoZGF0YTYvOCk9KDA2ICoqIDE2ICoqIDI2ICoqIDM2ICoqKQorICAgIGFkZHBzICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNT1yb3VuZGludChkYXRhNy84KT0oMDcgKiogMTcgKiogMjcgKiogMzcgKiopCisKKyAgICBwYW5kICAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9KDAwIC0tIDEwIC0tIDIwIC0tIDMwIC0tKQorICAgIHBzbGxkICAgICAgIHhtbTcsIFdPUkRfQklUICAgICAgICAgIDsgeG1tNz0oLS0gMDEgLS0gMTEgLS0gMjEgLS0gMzEpCisgICAgcGFuZCAgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPSgwNiAtLSAxNiAtLSAyNiAtLSAzNiAtLSkKKyAgICBwc2xsZCAgICAgICB4bW01LCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTU9KC0tIDA3IC0tIDE3IC0tIDI3IC0tIDM3KQorICAgIHBvciAgICAgICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKworICAgIG1vdmFwcyAgICAgIHhtbTEsICBYTU1XT1JEIFt3aygwKV0gIDsgeG1tMT10bXAyCisgICAgbW92YXBzICAgICAgeG1tMywgIFhNTVdPUkQgW3drKDEpXSAgOyB4bW0zPXRtcDMKKworICAgIGFkZHBzICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND10bXA0CisgICAgbW92YXBzICAgICAgeG1tNywgeG1tMQorICAgIG1vdmFwcyAgICAgIHhtbTUsIHhtbTMKKyAgICBhZGRwcyAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTI9KDAyIDEyIDIyIDMyKQorICAgIGFkZHBzICAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCisgICAgc3VicHMgICAgICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKKyAgICBzdWJwcyAgICAgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCisgICAgbW92YXBzICAgICAgeG1tMiwgW3JlbCBQRF9STkRJTlRfTUFHSUNdICA7IHhtbTI9W3JlbCBQRF9STkRJTlRfTUFHSUNdCisgICAgcGNtcGVxZCAgICAgeG1tNCwgeG1tNAorICAgIHBzcmxkICAgICAgIHhtbTQsIFdPUkRfQklUICAgICAgICAgIDsgeG1tND17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwIC4ufQorCisgICAgYWRkcHMgICAgICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB4bW0zPXJvdW5kaW50KGRhdGE0LzgpPSgwNCAqKiAxNCAqKiAyNCAqKiAzNCAqKikKKyAgICBhZGRwcyAgICAgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9cm91bmRpbnQoZGF0YTUvOCk9KDA1ICoqIDE1ICoqIDI1ICoqIDM1ICoqKQorICAgIGFkZHBzICAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1yb3VuZGludChkYXRhMi84KT0oMDIgKiogMTIgKiogMjIgKiogMzIgKiopCisgICAgYWRkcHMgICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB4bW01PXJvdW5kaW50KGRhdGEzLzgpPSgwMyAqKiAxMyAqKiAyMyAqKiAzMyAqKikKKworICAgIHBhbmQgICAgICAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz0oMDQgLS0gMTQgLS0gMjQgLS0gMzQgLS0pCisgICAgcHNsbGQgICAgICAgeG1tNywgV09SRF9CSVQgICAgICAgICAgOyB4bW03PSgtLSAwNSAtLSAxNSAtLSAyNSAtLSAzNSkKKyAgICBwYW5kICAgICAgICB4bW0xLCB4bW00ICAgICAgICAgICAgICA7IHhtbTE9KDAyIC0tIDEyIC0tIDIyIC0tIDMyIC0tKQorICAgIHBzbGxkICAgICAgIHhtbTUsIFdPUkRfQklUICAgICAgICAgIDsgeG1tNT0oLS0gMDMgLS0gMTMgLS0gMjMgLS0gMzMpCisgICAgcG9yICAgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyB4bW0zPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICBwb3IgICAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW3JlbCBQQl9DRU5URVJKU0FNUF0gIDsgeG1tMj1bcmVsIFBCX0NFTlRFUkpTQU1QXQorCisgICAgcGFja3Nzd2IgICAgeG1tNiwgeG1tMyAgICAgICAgOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSAwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0wICAgICAgICA7IHhtbTE9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgIHBhZGRiICAgICAgIHhtbTYsIHhtbTIKKyAgICBwYWRkYiAgICAgICB4bW0xLCB4bW0yCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW02ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW0xICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTEgICAgICAgIDsgeG1tND0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW00ICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIHB1bnBja2hkcSAgIHhtbTcsIHhtbTQgICAgICAgIDsgeG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKyAgICBwc2h1ZmQgICAgICB4bW01LCB4bW02LCAweDRFICA7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHBzaHVmZCAgICAgIHhtbTMsIHhtbTcsIDB4NEUgIDsgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcmRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcmRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUICA7IHdzcHRyCisgICAgYWRkICAgICAgICAgcmRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisgICAgZGVjICAgICAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgam56ICAgICAgICAgbmVhciAucm93bG9vcAorCisgICAgcG9wICAgICAgICAgcmJ4CisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2ppZGN0ZnN0LXNzZTIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamlkY3Rmc3Qtc3NlMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjNDJmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2ppZGN0ZnN0LXNzZTIuYXNtCkBAIC0wLDAgKzEsNDkyIEBACis7Cis7IGppZGN0ZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBJRENUICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YKKzsgdGhlIGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzCis7IGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZzdC5jOyBzZWUgdGhlIGppZGN0ZnN0LmMKKzsgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICA4ICA7IDE0IGlzIGFsc28gT0suCislZGVmaW5lIFBBU1MxX0JJVFMgIDIKKworJWlmIElGQVNUX1NDQUxFX0JJVFMgIT0gUEFTUzFfQklUUworJWVycm9yICInSUZBU1RfU0NBTEVfQklUUycgbXVzdCBiZSBlcXVhbCB0byAnUEFTUzFfQklUUycuIgorJWVuZGlmCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMV8wODIgZXF1IDI3NyAgICAgICAgICAgICAgOyBGSVgoMS4wODIzOTIyMDApCitGXzFfNDE0IGVxdSAzNjIgICAgICAgICAgICAgIDsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NyBlcXUgNDczICAgICAgICAgICAgICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMgZXF1IDY2OSAgICAgICAgICAgICAgOyBGSVgoMi42MTMxMjU5MzApCitGXzFfNjEzIGVxdSAoRl8yXzYxMyAtIDI1NikgIDsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsIG4pICAoKCh4KSArICgxIDw8ICgobikgLSAxKSkpID4+IChuKSkKK0ZfMV8wODIgZXF1IERFU0NBTEUoMTE2MjIwOTc3NSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS4wODIzOTIyMDApCitGXzFfNDE0IGVxdSBERVNDQUxFKDE1MTg1MDAyNDksIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NyBlcXUgREVTQ0FMRSgxOTg0MDE2MTg4LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMgZXF1IERFU0NBTEUoMjgwNTgyMjYwMiwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi42MTMxMjU5MzApCitGXzFfNjEzIGVxdSAoRl8yXzYxMyAtICgxIDw8IENPTlNUX0JJVFMpKSAgICAgICAgIDsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICAgICAgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworICAgIGFsaWdueiAgICAgIDMyCisgICAgR0xPQkFMX0RBVEEoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKToKKworUFdfRjE0MTQgICAgICAgdGltZXMgOCAgZHcgIEZfMV80MTQgPDwgQ09OU1RfU0hJRlQKK1BXX0YxODQ3ICAgICAgIHRpbWVzIDggIGR3ICBGXzFfODQ3IDw8IENPTlNUX1NISUZUCitQV19NRjE2MTMgICAgICB0aW1lcyA4ICBkdyAtRl8xXzYxMyA8PCBDT05TVF9TSElGVAorUFdfRjEwODIgICAgICAgdGltZXMgOCAgZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKK1BCX0NFTlRFUkpTQU1QIHRpbWVzIDE2IGRiICBDRU5URVJKU0FNUExFCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF9pZmFzdF9zc2UyKHZvaWQgKmRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKzsgcjEwID0ganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cgorOyByMTEgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMiA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorOyByMTNkID0gSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfcmJwICByYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaWRjdF9pZmFzdF9zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfaWZhc3Rfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3drKDApXQorICAgIGNvbGxlY3RfYXJncyA0CisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworICAgIG1vdiAgICAgICAgIHJkeCwgcjEwICAgICAgICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICBtb3YgICAgICAgICByc2ksIHIxMSAgICAgICAgICAgICAgICA7IGlucHRyCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JRkFTVF9TU0UyCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uRENUCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMSwgeG1tMAorICAgIHBhY2tzc3diICAgIHhtbTEsIHhtbTEKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0xCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0xCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgcHVucGNraHdkICAgeG1tNywgeG1tNyAgICAgICAgICAgICAgOyB4bW03PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKworICAgIHBzaHVmZCAgICAgIHhtbTYsIHhtbTAsIDB4MDAgICAgICAgIDsgeG1tNj1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKKyAgICBwc2h1ZmQgICAgICB4bW0yLCB4bW0wLCAweDU1ICAgICAgICA7IHhtbTI9Y29sMT0oMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEpCisgICAgcHNodWZkICAgICAgeG1tNSwgeG1tMCwgMHhBQSAgICAgICAgOyB4bW01PWNvbDI9KDAyIDAyIDAyIDAyIDAyIDAyIDAyIDAyKQorICAgIHBzaHVmZCAgICAgIHhtbTAsIHhtbTAsIDB4RkYgICAgICAgIDsgeG1tMD1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKKyAgICBwc2h1ZmQgICAgICB4bW0xLCB4bW03LCAweDAwICAgICAgICA7IHhtbTE9Y29sND0oMDQgMDQgMDQgMDQgMDQgMDQgMDQgMDQpCisgICAgcHNodWZkICAgICAgeG1tNCwgeG1tNywgMHg1NSAgICAgICAgOyB4bW00PWNvbDU9KDA1IDA1IDA1IDA1IDA1IDA1IDA1IDA1KQorICAgIHBzaHVmZCAgICAgIHhtbTMsIHhtbTcsIDB4QUEgICAgICAgIDsgeG1tMz1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKyAgICBwc2h1ZmQgICAgICB4bW03LCB4bW03LCAweEZGICAgICAgICA7IHhtbTc9Y29sNz0oMDcgMDcgMDcgMDcgMDcgMDcgMDcgMDcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPWNvbDEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTAgICA7IHdrKDEpPWNvbDMKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5fZW5kCislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgIHBzdWJ3ICAgICAgIHhtbTEsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKworICAgIHBzbGx3ICAgICAgIHhtbTEsIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgcG11bGh3ICAgICAgeG1tMSwgW3JlbCBQV19GMTQxNF0KKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0wCisgICAgcHN1YncgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICBwc3VidyAgICAgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PXRtcDEKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgd2soMSk9dG1wMworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9dG1wMgorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNQorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj16MTIKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9ejEwCisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PXoxMQorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD16MTMKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT16MTAodW5zY2FsZWQpCisgICAgcHNsbHcgICAgICAgeG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICB4bW01LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNAorICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTAKKyAgICBwYWRkdyAgICAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9dG1wNworCisgICAgcHNsbHcgICAgICAgeG1tNCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW00LCBbcmVsIFBXX0YxNDE0XSAgICA7IHhtbTQ9dG1wMTEKKworICAgIDsgVG8gYXZvaWQgb3ZlcmZsb3cuLi4KKyAgICA7CisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB0bXAxMiA9IC0yLjYxMzEyNTkzMCAqIHoxMCArIHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMTIgPSAoLTEuNjEzMTI1OTMwIC0gMSkgKiB6MTAgKyB6NTsKKyAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW01CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMgorICAgIHBtdWxodyAgICAgIHhtbTUsIFtyZWwgUFdfRjE4NDddICAgIDsgeG1tNT16NQorICAgIHBtdWxodyAgICAgIHhtbTAsIFtyZWwgUFdfTUYxNjEzXQorICAgIHBtdWxodyAgICAgIHhtbTIsIFtyZWwgUFdfRjEwODJdCisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tMQorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD10bXAxMgorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD10bXA2CisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHBhZGR3ICAgICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgcHN1YncgICAgICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTY9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND10bXA1CisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW02LCB4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgIHB1bnBja2h3ZCAgIHhtbTMsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMz0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB4bW01PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBwdW5wY2tod2QgICB4bW0wLCB4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PXRtcDIKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTE9dG1wMworCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW01ICAgOyB3aygwKT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9dG1wNAorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTcKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tNCAgICAgICAgICAgICAgOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgIHBzdWJ3ICAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQorICAgIHB1bnBja2h3ZCAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0zLCB4bW00ICAgICAgICAgICAgICA7IHhtbTM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIHB1bnBja2hkcSAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNiwgeG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICBwdW5wY2toZHEgICB4bW01LCB4bW03ICAgICAgICAgICAgICA7IHhtbTU9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbd2soMCldICAgOyB4bW00PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTc9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0zICAgOyB3aygwKT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0xLCB4bW00ICAgICAgICAgICAgICA7IHhtbTE9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorICAgIHB1bnBja2hkcSAgIHhtbTMsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICBwdW5wY2toZHEgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHhtbTA9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tNiwgeG1tMSAgICAgICAgICAgICAgOyB4bW02PWNvbDA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorICAgIHB1bnBja2hxZHEgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW01ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9Y29sMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgcHVucGNraHFkcSAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTM9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT1jb2wxCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMSldLCB4bW03ICAgOyB3aygxKT1jb2wzCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9Y29sND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgcHVucGNraHFkcSAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PWNvbDU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTMgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMz1jb2w2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICBwdW5wY2tocWRxICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9Y29sNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisuY29sdW1uX2VuZDoKKworICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICByYXgsIFtvcmlnaW5hbF9yYnBdCisgICAgbW92ICAgICAgICAgcmRpLCByMTIgICAgICAgICAgICAgICAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIHIxM2QKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICA7IHhtbTY9Y29sMCwgeG1tNT1jb2wyLCB4bW0xPWNvbDQsIHhtbTM9Y29sNgorCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUKKyAgICBwc3VidyAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKKyAgICBwc3VidyAgICAgICB4bW01LCB4bW0zCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tMSAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMyAgICAgICAgICAgICAgOyB4bW0wPXRtcDEzCisKKyAgICBwc2xsdyAgICAgICB4bW01LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgIHBtdWxodyAgICAgIHhtbTUsIFtyZWwgUFdfRjE0MTRdCisgICAgcHN1YncgICAgICAgeG1tNSwgeG1tMCAgICAgICAgICAgICAgOyB4bW01PXRtcDEyCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNgorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj10bXAzCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PXRtcDIKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW0wICAgICAgICAgICAgICA7IHhtbTE9dG1wMAorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz10bXAxCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTA9Y29sMQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT1jb2wzCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPXRtcDMKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDIKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIDsgeG1tMD1jb2wxLCB4bW01PWNvbDMsIHhtbTQ9Y29sNSwgeG1tNz1jb2w3CisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNAorICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD16MTIKKyAgICBwc3VidyAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9ejEwCisgICAgcGFkZHcgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj16MTMKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNz16MTAodW5zY2FsZWQpCisgICAgcHNsbHcgICAgICAgeG1tMCwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwc2xsdyAgICAgICB4bW00LCBQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMgorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTYKKyAgICBwYWRkdyAgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHhtbTU9dG1wNworCisgICAgcHNsbHcgICAgICAgeG1tMiwgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICBwbXVsaHcgICAgICB4bW0yLCBbcmVsIFBXX0YxNDE0XSAgICA7IHhtbTI9dG1wMTEKKworICAgIDsgVG8gYXZvaWQgb3ZlcmZsb3cuLi4KKyAgICA7CisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB0bXAxMiA9IC0yLjYxMzEyNTkzMCAqIHoxMCArIHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMTIgPSAoLTEuNjEzMTI1OTMwIC0gMSkgKiB6MTAgKyB6NTsKKyAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW00CisgICAgcGFkZHcgICAgICAgeG1tNCwgeG1tMAorICAgIHBtdWxodyAgICAgIHhtbTQsIFtyZWwgUFdfRjE4NDddICAgIDsgeG1tND16NQorICAgIHBtdWxodyAgICAgIHhtbTYsIFtyZWwgUFdfTUYxNjEzXQorICAgIHBtdWxodyAgICAgIHhtbTAsIFtyZWwgUFdfRjEwODJdCisgICAgcHN1YncgICAgICAgeG1tNiwgeG1tNworICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD10bXAxMAorICAgIHBhZGR3ICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj10bXAxMgorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIHBzdWJ3ICAgICAgIHhtbTYsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNj10bXA2CisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTMKKyAgICBwYWRkdyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorICAgIHBhZGR3ICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpCisgICAgcHNyYXcgICAgICAgeG1tMSwgKFBBU1MxX0JJVFMrMykgICAgOyBkZXNjYWxlCisgICAgcHNyYXcgICAgICAgeG1tMywgKFBBU1MxX0JJVFMrMykgICAgOyBkZXNjYWxlCisgICAgcHN1YncgICAgICAgeG1tNywgeG1tNSAgICAgICAgICAgICAgOyB4bW03PWRhdGE3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKyAgICBwc3VidyAgICAgICB4bW00LCB4bW02ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIHBzcmF3ICAgICAgIHhtbTcsIChQQVNTMV9CSVRTKzMpICAgIDsgZGVzY2FsZQorICAgIHBzcmF3ICAgICAgIHhtbTQsIChQQVNTMV9CSVRTKzMpICAgIDsgZGVzY2FsZQorICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj10bXA1CisKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW00ICAgICAgICA7IHhtbTE9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIHBhY2tzc3diICAgIHhtbTMsIHhtbTcgICAgICAgIDsgeG1tMz0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9dG1wMgorICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNj10bXAzCisKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW0yICAgICAgICAgICAgICA7IHhtbTA9dG1wNAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW02CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB4bW01PWRhdGEyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICBwYWRkdyAgICAgICB4bW02LCB4bW0wICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorICAgIHBzcmF3ICAgICAgIHhtbTUsIChQQVNTMV9CSVRTKzMpICAgIDsgZGVzY2FsZQorICAgIHBzcmF3ICAgICAgIHhtbTYsIChQQVNTMV9CSVRTKzMpICAgIDsgZGVzY2FsZQorICAgIHBzdWJ3ICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND1kYXRhNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgcHN1YncgICAgICAgeG1tNywgeG1tMCAgICAgICAgICAgICAgOyB4bW03PWRhdGEzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKyAgICBwc3JhdyAgICAgICB4bW00LCAoUEFTUzFfQklUUyszKSAgICA7IGRlc2NhbGUKKyAgICBwc3JhdyAgICAgICB4bW03LCAoUEFTUzFfQklUUyszKSAgICA7IGRlc2NhbGUKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIFtyZWwgUEJfQ0VOVEVSSlNBTVBdICA7IHhtbTI9W3JlbCBQQl9DRU5URVJKU0FNUF0KKworICAgIHBhY2tzc3diICAgIHhtbTUsIHhtbTYgICAgICAgIDsgeG1tNT0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgcGFja3Nzd2IgICAgeG1tNywgeG1tNCAgICAgICAgOyB4bW03PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworICAgIHBhZGRiICAgICAgIHhtbTEsIHhtbTIKKyAgICBwYWRkYiAgICAgICB4bW0zLCB4bW0yCisgICAgcGFkZGIgICAgICAgeG1tNSwgeG1tMgorICAgIHBhZGRiICAgICAgIHhtbTcsIHhtbTIKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTEgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2xidyAgIHhtbTEsIHhtbTMgICAgICAgIDsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgcHVucGNraGJ3ICAgeG1tMCwgeG1tMyAgICAgICAgOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW01ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsYncgICB4bW01LCB4bW03ICAgICAgICA7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgIHB1bnBja2hidyAgIHhtbTYsIHhtbTcgICAgICAgIDsgeG1tNj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0xICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICB4bW0xLCB4bW01ICAgICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTQsIHhtbTUgICAgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNiAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbHdkICAgeG1tNiwgeG1tMCAgICAgICAgOyB4bW02PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICBwdW5wY2tod2QgICB4bW0yLCB4bW0wICAgICAgICA7IHhtbTI9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3IDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tMSAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbGRxICAgeG1tMSwgeG1tNiAgICAgICAgOyB4bW0xPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW02ICAgICAgICA7IHhtbTM9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xkcSAgIHhtbTQsIHhtbTIgICAgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgcHVucGNraGRxICAgeG1tNywgeG1tMiAgICAgICAgOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworICAgIHBzaHVmZCAgICAgIHhtbTUsIHhtbTEsIDB4NEUgIDsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgcHNodWZkICAgICAgeG1tMCwgeG1tMywgMHg0RSAgOyB4bW0wPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICBwc2h1ZmQgICAgICB4bW02LCB4bW00LCAweDRFICA7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTcsIDB4NEUgIDsgeG1tMj0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcmRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyZGkrNCpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcmRpKzYqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKworICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSs1KlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyZGkrNypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorCisgICAgdW5jb2xsZWN0X2FyZ3MgNAorICAgIG1vdiAgICAgICAgIHJzcCwgcmJwICAgICAgICAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgcG9wICAgICAgICAgcnNwICAgICAgICAgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2ppZGN0aW50LWF2eDIuYXNtIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamlkY3RpbnQtYXZ4Mi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwYjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2ppZGN0aW50LWF2eDIuYXNtCkBAIC0wLDAgKzEsNDE5IEBACis7Cis7IGppZGN0aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgSURDVCAoNjQtYml0IEFWWDIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LCAyMDE4LCBELiBSLiBDb21tYW5kZXIuCis7Cis7IEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGludC5jOyBzZWUgdGhlIGppZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAyCisKKyVkZWZpbmUgREVTQ0FMRV9QMSAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OCBlcXUgIDI0NDYgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgIDMxOTYgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgIDQ0MzMgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgIDYyNzAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgIDczNzMgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgIDk2MzMgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgMTIyOTkgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgMTUxMzcgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgMTYwNjkgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgMTY4MTkgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgMjA5OTUgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgMjUxNzIgIDsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsIG4pICAoKCh4KSArICgxIDw8ICgobikgLSAxKSkpID4+IChuKSkKK0ZfMF8yOTggZXF1IERFU0NBTEUoIDMyMDY1Mjk1NSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSBERVNDQUxFKCA0MTg5NTMyNzYsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgREVTQ0FMRSggNTgxMTA0ODg3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1IERFU0NBTEUoIDgyMTgwNjQxMywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSBERVNDQUxFKCA5NjYzNDIxMTEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgREVTQ0FMRSgxMjYyNTg2ODEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1IERFU0NBTEUoMTYxMjAzMTI2NywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSBERVNDQUxFKDE5ODQwMTYxODgsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgREVTQ0FMRSgyMTA2MjIwMzUwLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1IERFU0NBTEUoMjIwNDUyMDY3MywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSBERVNDQUxFKDI3NTE5MDk1MDYsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgREVTQ0FMRSgzMjk5Mjk4MzQxLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IEluLXBsYWNlIDh4OHgxNi1iaXQgaW52ZXJzZSBtYXRyaXggdHJhbnNwb3NlIHVzaW5nIEFWWDIgaW5zdHJ1Y3Rpb25zCis7ICUxLSU0OiBJbnB1dC9vdXRwdXQgcmVnaXN0ZXJzCis7ICU1LSU4OiBUZW1wIHJlZ2lzdGVycworCislbWFjcm8gZG90cmFuc3Bvc2UgOAorICAgIDsgJTU9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwICAwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICA7ICU2PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAgMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgOyAlNz0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQgIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorICAgIDsgJTg9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3ICAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKworICAgIHZwZXJtcSAgICAgICU1LCAlMSwgMHhEOAorICAgIHZwZXJtcSAgICAgICU2LCAlMiwgMHg3MgorICAgIHZwZXJtcSAgICAgICU3LCAlMywgMHhEOAorICAgIHZwZXJtcSAgICAgICU4LCAlNCwgMHg3MgorICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIDsgJTU9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxICA0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKyAgICA7ICU2PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMyAgNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgOyAlNz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgIDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgIDsgJTg9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3ICA0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKKworICAgIHZwdW5wY2tsd2QgICUxLCAlNSwgJTYKKyAgICB2cHVucGNraHdkICAlMiwgJTUsICU2CisgICAgdnB1bnBja2x3ZCAgJTMsICU3LCAlOAorICAgIHZwdW5wY2tod2QgICU0LCAlNywgJTgKKyAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICA7ICUxPSgwMCAwMiAxMCAxMiAyMCAyMiAzMCAzMiAgNDAgNDIgNTAgNTIgNjAgNjIgNzAgNzIpCisgICAgOyAlMj0oMDEgMDMgMTEgMTMgMjEgMjMgMzEgMzMgIDQxIDQzIDUxIDUzIDYxIDYzIDcxIDczKQorICAgIDsgJTM9KDA0IDA2IDE0IDE2IDI0IDI2IDM0IDM2ICA0NCA0NiA1NCA1NiA2NCA2NiA3NCA3NikKKyAgICA7ICU0PSgwNSAwNyAxNSAxNyAyNSAyNyAzNSAzNyAgNDUgNDcgNTUgNTcgNjUgNjcgNzUgNzcpCisKKyAgICB2cHVucGNrbHdkICAlNSwgJTEsICUyCisgICAgdnB1bnBja2x3ZCAgJTYsICUzLCAlNAorICAgIHZwdW5wY2tod2QgICU3LCAlMSwgJTIKKyAgICB2cHVucGNraHdkICAlOCwgJTMsICU0CisgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgOyAlNT0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgIDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQorICAgIDsgJTY9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3ICA0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICA7ICU3PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMyAgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisgICAgOyAlOD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcgIDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisgICAgdnB1bnBja2xxZHEgJTEsICU1LCAlNgorICAgIHZwdW5wY2tocWRxICUyLCAlNSwgJTYKKyAgICB2cHVucGNrbHFkcSAlMywgJTcsICU4CisgICAgdnB1bnBja2hxZHEgJTQsICU3LCAlOAorICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSA0KQorICAgIDsgJTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3ICA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKyAgICA7ICUyPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgOyAlMz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgIDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorICAgIDsgJTQ9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3ICA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IEluLXBsYWNlIDh4OHgxNi1iaXQgc2xvdyBpbnRlZ2VyIGludmVyc2UgRENUIHVzaW5nIEFWWDIgaW5zdHJ1Y3Rpb25zCis7ICUxLSU0OiAgSW5wdXQvb3V0cHV0IHJlZ2lzdGVycworOyAlNS0lMTI6IFRlbXAgcmVnaXN0ZXJzCis7ICU5OiAgICAgUGFzcyAoMSBvciAyKQorCislbWFjcm8gZG9kY3QgMTMKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworICAgIDsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisgICAgOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKyAgICA7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisKKyAgICB2cGVybTJpMTI4ICAlNiwgJTMsICUzLCAweDAxICAgICAgICA7ICU2PWluNl8yCisgICAgdnB1bnBja2x3ZCAgJTUsICUzLCAlNiAgICAgICAgICAgICAgOyAlNT1pbjI2XzYyTAorICAgIHZwdW5wY2tod2QgICU2LCAlMywgJTYgICAgICAgICAgICAgIDsgJTY9aW4yNl82MkgKKyAgICB2cG1hZGR3ZCAgICAlNSwgJTUsIFtyZWwgUFdfRjEzMF9GMDU0X01GMTMwX0YwNTRdICA7ICU1PXRtcDNfMkwKKyAgICB2cG1hZGR3ZCAgICAlNiwgJTYsIFtyZWwgUFdfRjEzMF9GMDU0X01GMTMwX0YwNTRdICA7ICU2PXRtcDNfMkgKKworICAgIHZwZXJtMmkxMjggICU3LCAlMSwgJTEsIDB4MDEgICAgICAgIDsgJTc9aW40XzAKKyAgICB2cHNpZ253ICAgICAlMSwgJTEsIFtyZWwgUFdfMV9ORUcxXQorICAgIHZwYWRkdyAgICAgICU3LCAlNywgJTEgICAgICAgICAgICAgIDsgJTc9KGluMCtpbjQpXyhpbjAtaW40KQorCisgICAgdnB4b3IgICAgICAgJTEsICUxLCAlMQorICAgIHZwdW5wY2tsd2QgICU4LCAlMSwgJTcgICAgICAgICAgICAgIDsgJTg9dG1wMF8xTAorICAgIHZwdW5wY2tod2QgICUxLCAlMSwgJTcgICAgICAgICAgICAgIDsgJTE9dG1wMF8xSAorICAgIHZwc3JhZCAgICAgICU4LCAlOCwgKDE2LUNPTlNUX0JJVFMpICA7IHZwc3JhZCAlOCwxNiAmIHZwc2xsZCAlOCxDT05TVF9CSVRTCisgICAgdnBzcmFkICAgICAgJTEsICUxLCAoMTYtQ09OU1RfQklUUykgIDsgdnBzcmFkICUxLDE2ICYgdnBzbGxkICUxLENPTlNUX0JJVFMKKworICAgIHZwc3ViZCAgICAgICUxMSwgJTgsICU1ICAgICAgICAgICAgIDsgJTExPXRtcDBfMUwtdG1wM18yTD10bXAxM18xMkwKKyAgICB2cGFkZGQgICAgICAlOSwgJTgsICU1ICAgICAgICAgICAgICA7ICU5PXRtcDBfMUwrdG1wM18yTD10bXAxMF8xMUwKKyAgICB2cHN1YmQgICAgICAlMTIsICUxLCAlNiAgICAgICAgICAgICA7ICUxMj10bXAwXzFILXRtcDNfMkg9dG1wMTNfMTJICisgICAgdnBhZGRkICAgICAgJTEwLCAlMSwgJTYgICAgICAgICAgICAgOyAlMTA9dG1wMF8xSCt0bXAzXzJIPXRtcDEwXzExSAorCisgICAgOyAtLSBPZGQgcGFydAorCisgICAgdnBhZGR3ICAgICAgJTEsICU0LCAlMiAgICAgICAgICAgICAgOyAlMT1pbjdfNStpbjNfMT16M180CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgdnBlcm0yaTEyOCAgJTgsICUxLCAlMSwgMHgwMSAgICAgICAgOyAlOD16NF8zCisgICAgdnB1bnBja2x3ZCAgJTcsICUxLCAlOCAgICAgICAgICAgICAgOyAlNz16MzRfNDNMCisgICAgdnB1bnBja2h3ZCAgJTgsICUxLCAlOCAgICAgICAgICAgICAgOyAlOD16MzRfNDNICisgICAgdnBtYWRkd2QgICAgJTcsICU3LCBbcmVsIFBXX01GMDc4X0YxMTdfRjA3OF9GMTE3XSAgOyAlNz16M180TAorICAgIHZwbWFkZHdkICAgICU4LCAlOCwgW3JlbCBQV19NRjA3OF9GMTE3X0YwNzhfRjExN10gIDsgJTg9ejNfNEgKKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7CisgICAgOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKKyAgICA7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOworICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7CisgICAgOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7CisgICAgOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7CisgICAgOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKKyAgICA7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OworCisgICAgdnBlcm0yaTEyOCAgJTIsICUyLCAlMiwgMHgwMSAgICAgICAgOyAlMj1pbjFfMworICAgIHZwdW5wY2tsd2QgICUzLCAlNCwgJTIgICAgICAgICAgICAgIDsgJTM9aW43MV81M0wKKyAgICB2cHVucGNraHdkICAlNCwgJTQsICUyICAgICAgICAgICAgICA7ICU0PWluNzFfNTNICisKKyAgICB2cG1hZGR3ZCAgICAlNSwgJTMsIFtyZWwgUFdfTUYwNjBfTUYwODlfTUYwNTBfTUYyNTZdICA7ICU1PXRtcDBfMUwKKyAgICB2cG1hZGR3ZCAgICAlNiwgJTQsIFtyZWwgUFdfTUYwNjBfTUYwODlfTUYwNTBfTUYyNTZdICA7ICU2PXRtcDBfMUgKKyAgICB2cGFkZGQgICAgICAlNSwgJTUsICU3ICAgICAgICAgICAgICA7ICU1PXRtcDBfMUwrejNfNEw9dG1wMF8xTAorICAgIHZwYWRkZCAgICAgICU2LCAlNiwgJTggICAgICAgICAgICAgIDsgJTY9dG1wMF8xSCt6M180SD10bXAwXzFICisKKyAgICB2cG1hZGR3ZCAgICAlMywgJTMsIFtyZWwgUFdfTUYwODlfRjA2MF9NRjI1Nl9GMDUwXSAgOyAlMz10bXAzXzJMCisgICAgdnBtYWRkd2QgICAgJTQsICU0LCBbcmVsIFBXX01GMDg5X0YwNjBfTUYyNTZfRjA1MF0gIDsgJTQ9dG1wM18ySAorICAgIHZwZXJtMmkxMjggICU3LCAlNywgJTcsIDB4MDEgICAgICAgIDsgJTc9ejRfM0wKKyAgICB2cGVybTJpMTI4ICAlOCwgJTgsICU4LCAweDAxICAgICAgICA7ICU4PXo0XzNICisgICAgdnBhZGRkICAgICAgJTcsICUzLCAlNyAgICAgICAgICAgICAgOyAlNz10bXAzXzJMK3o0XzNMPXRtcDNfMkwKKyAgICB2cGFkZGQgICAgICAlOCwgJTQsICU4ICAgICAgICAgICAgICA7ICU4PXRtcDNfMkgrejRfM0g9dG1wM18ySAorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIHZwYWRkZCAgICAgICUxLCAlOSwgJTcgICAgICAgICAgICAgIDsgJTE9dG1wMTBfMTFMK3RtcDNfMkw9ZGF0YTBfMUwKKyAgICB2cGFkZGQgICAgICAlMiwgJTEwLCAlOCAgICAgICAgICAgICA7ICUyPXRtcDEwXzExSCt0bXAzXzJIPWRhdGEwXzFICisgICAgdnBhZGRkICAgICAgJTEsICUxLCBbcmVsIFBEX0RFU0NBTEVfUCAlKyAlMTNdCisgICAgdnBhZGRkICAgICAgJTIsICUyLCBbcmVsIFBEX0RFU0NBTEVfUCAlKyAlMTNdCisgICAgdnBzcmFkICAgICAgJTEsICUxLCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBzcmFkICAgICAgJTIsICUyLCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBhY2tzc2R3ICAgJTEsICUxLCAlMiAgICAgICAgICAgICAgOyAlMT1kYXRhMF8xCisKKyAgICB2cHN1YmQgICAgICAlMywgJTksICU3ICAgICAgICAgICAgICA7ICUzPXRtcDEwXzExTC10bXAzXzJMPWRhdGE3XzZMCisgICAgdnBzdWJkICAgICAgJTQsICUxMCwgJTggICAgICAgICAgICAgOyAlND10bXAxMF8xMUgtdG1wM18ySD1kYXRhN182SAorICAgIHZwYWRkZCAgICAgICUzLCAlMywgW3JlbCBQRF9ERVNDQUxFX1AgJSsgJTEzXQorICAgIHZwYWRkZCAgICAgICU0LCAlNCwgW3JlbCBQRF9ERVNDQUxFX1AgJSsgJTEzXQorICAgIHZwc3JhZCAgICAgICUzLCAlMywgREVTQ0FMRV9QICUrICUxMworICAgIHZwc3JhZCAgICAgICU0LCAlNCwgREVTQ0FMRV9QICUrICUxMworICAgIHZwYWNrc3NkdyAgICU0LCAlMywgJTQgICAgICAgICAgICAgIDsgJTQ9ZGF0YTdfNgorCisgICAgdnBhZGRkICAgICAgJTcsICUxMSwgJTUgICAgICAgICAgICAgOyAlNz10bXAxM18xMkwrdG1wMF8xTD1kYXRhM18yTAorICAgIHZwYWRkZCAgICAgICU4LCAlMTIsICU2ICAgICAgICAgICAgIDsgJTg9dG1wMTNfMTJIK3RtcDBfMUg9ZGF0YTNfMkgKKyAgICB2cGFkZGQgICAgICAlNywgJTcsIFtyZWwgUERfREVTQ0FMRV9QICUrICUxM10KKyAgICB2cGFkZGQgICAgICAlOCwgJTgsIFtyZWwgUERfREVTQ0FMRV9QICUrICUxM10KKyAgICB2cHNyYWQgICAgICAlNywgJTcsIERFU0NBTEVfUCAlKyAlMTMKKyAgICB2cHNyYWQgICAgICAlOCwgJTgsIERFU0NBTEVfUCAlKyAlMTMKKyAgICB2cGFja3NzZHcgICAlMiwgJTcsICU4ICAgICAgICAgICAgICA7ICUyPWRhdGEzXzIKKworICAgIHZwc3ViZCAgICAgICU3LCAlMTEsICU1ICAgICAgICAgICAgIDsgJTc9dG1wMTNfMTJMLXRtcDBfMUw9ZGF0YTRfNUwKKyAgICB2cHN1YmQgICAgICAlOCwgJTEyLCAlNiAgICAgICAgICAgICA7ICU4PXRtcDEzXzEySC10bXAwXzFIPWRhdGE0XzVICisgICAgdnBhZGRkICAgICAgJTcsICU3LCBbcmVsIFBEX0RFU0NBTEVfUCAlKyAlMTNdCisgICAgdnBhZGRkICAgICAgJTgsICU4LCBbcmVsIFBEX0RFU0NBTEVfUCAlKyAlMTNdCisgICAgdnBzcmFkICAgICAgJTcsICU3LCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBzcmFkICAgICAgJTgsICU4LCBERVNDQUxFX1AgJSsgJTEzCisgICAgdnBhY2tzc2R3ICAgJTMsICU3LCAlOCAgICAgICAgICAgICAgOyAlMz1kYXRhNF81CislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfaWRjdF9pc2xvd19hdngyKQorCitFWFROKGpjb25zdF9pZGN0X2lzbG93X2F2eDIpOgorCitQV19GMTMwX0YwNTRfTUYxMzBfRjA1NCAgICB0aW1lcyA0ICBkdyAgKEZfMF81NDEgKyBGXzBfNzY1KSwgIEZfMF81NDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIDQgIGR3ICAoRl8wXzU0MSAtIEZfMV84NDcpLCAgRl8wXzU0MQorUFdfTUYwNzhfRjExN19GMDc4X0YxMTcgICAgdGltZXMgNCAgZHcgIChGXzFfMTc1IC0gRl8xXzk2MSksICBGXzFfMTc1CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA0ICBkdyAgKEZfMV8xNzUgLSBGXzBfMzkwKSwgIEZfMV8xNzUKK1BXX01GMDYwX01GMDg5X01GMDUwX01GMjU2IHRpbWVzIDQgIGR3ICAoRl8wXzI5OCAtIEZfMF84OTkpLCAtRl8wXzg5OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgNCAgZHcgIChGXzJfMDUzIC0gRl8yXzU2MiksIC1GXzJfNTYyCitQV19NRjA4OV9GMDYwX01GMjU2X0YwNTAgICB0aW1lcyA0ICBkdyAtRl8wXzg5OSwgKEZfMV81MDEgLSBGXzBfODk5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgNCAgZHcgLUZfMl81NjIsIChGXzNfMDcyIC0gRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEgICAgICAgICAgICAgIHRpbWVzIDggIGRkICAxIDw8IChERVNDQUxFX1AxIC0gMSkKK1BEX0RFU0NBTEVfUDIgICAgICAgICAgICAgIHRpbWVzIDggIGRkICAxIDw8IChERVNDQUxFX1AyIC0gMSkKK1BCX0NFTlRFUkpTQU1QICAgICAgICAgICAgIHRpbWVzIDMyIGRiICBDRU5URVJKU0FNUExFCitQV18xX05FRzEgICAgICAgICAgICAgICAgICB0aW1lcyA4ICBkdyAgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgOCAgZHcgLTEKKworICAgIGFsaWdueiAgICAgIDMyCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0X2lzbG93X2F2eDIodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKzsgcjEwID0ganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cgorOyByMTEgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMiA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorOyByMTNkID0gSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9pZGN0X2lzbG93X2F2eDIpCisKK0VYVE4oanNpbWRfaWRjdF9pc2xvd19hdngyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgcHVzaF94bW0gICAgNAorICAgIGNvbGxlY3RfYXJncyA0CisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMuCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JU0xPV19BVlgyCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscjExLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscjExLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uRENUCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscjExLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHIxMSxTSVpFT0ZfSkNPRUYpXQorICAgIHZwb3IgICAgICAgIHhtbTAsIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyMTEsU0laRU9GX0pDT0VGKV0KKyAgICB2cG9yICAgICAgICB4bW0xLCB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscjExLFNJWkVPRl9KQ09FRildCisgICAgdnBvciAgICAgICAgeG1tMCwgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHIxMSxTSVpFT0ZfSkNPRUYpXQorICAgIHZwb3IgICAgICAgIHhtbTEsIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyMTEsU0laRU9GX0pDT0VGKV0KKyAgICB2cG9yICAgICAgICB4bW0wLCB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscjExLFNJWkVPRl9KQ09FRildCisgICAgdnBvciAgICAgICAgeG1tMSwgeG1tMSwgeG1tMAorICAgIHZwYWNrc3N3YiAgIHhtbTEsIHhtbTEsIHhtbTEKKyAgICB2cGFja3Nzd2IgICB4bW0xLCB4bW0xLCB4bW0xCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0xCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscjExLFNJWkVPRl9KQ09FRildCisgICAgdnBtdWxsdyAgICAgeG1tNSwgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHIxMCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHZwc2xsdyAgICAgIHhtbTUsIHhtbTUsIFBBU1MxX0JJVFMKKworICAgIHZwdW5wY2tsd2QgIHhtbTQsIHhtbTUsIHhtbTUgICAgICAgIDsgeG1tND0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgdnB1bnBja2h3ZCAgeG1tNSwgeG1tNSwgeG1tNSAgICAgICAgOyB4bW01PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKyAgICB2aW5zZXJ0aTEyOCB5bW00LCB5bW00LCB4bW01LCAxCisKKyAgICB2cHNodWZkICAgICB5bW0wLCB5bW00LCAweDAwICAgICAgICA7IHltbTA9Y29sMF80PSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDQgMDQgMDQgMDQgMDQgMDQgMDQgMDQpCisgICAgdnBzaHVmZCAgICAgeW1tMSwgeW1tNCwgMHg1NSAgICAgICAgOyB5bW0xPWNvbDFfNT0oMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgIDA1IDA1IDA1IDA1IDA1IDA1IDA1IDA1KQorICAgIHZwc2h1ZmQgICAgIHltbTIsIHltbTQsIDB4QUEgICAgICAgIDsgeW1tMj1jb2wyXzY9KDAyIDAyIDAyIDAyIDAyIDAyIDAyIDAyICAwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKyAgICB2cHNodWZkICAgICB5bW0zLCB5bW00LCAweEZGICAgICAgICA7IHltbTM9Y29sM183PSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMyAgMDcgMDcgMDcgMDcgMDcgMDcgMDcgMDcpCisKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5fZW5kCislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICB2bW92ZHF1ICAgICB5bW00LCBZTU1XT1JEIFtZTU1CTE9DSygwLDAscjExLFNJWkVPRl9KQ09FRildICA7IHltbTQ9aW4wXzEKKyAgICB2bW92ZHF1ICAgICB5bW01LCBZTU1XT1JEIFtZTU1CTE9DSygyLDAscjExLFNJWkVPRl9KQ09FRildICA7IHltbTU9aW4yXzMKKyAgICB2bW92ZHF1ICAgICB5bW02LCBZTU1XT1JEIFtZTU1CTE9DSyg0LDAscjExLFNJWkVPRl9KQ09FRildICA7IHltbTY9aW40XzUKKyAgICB2bW92ZHF1ICAgICB5bW03LCBZTU1XT1JEIFtZTU1CTE9DSyg2LDAscjExLFNJWkVPRl9KQ09FRildICA7IHltbTc9aW42XzcKKyAgICB2cG11bGx3ICAgICB5bW00LCB5bW00LCBZTU1XT1JEIFtZTU1CTE9DSygwLDAscjEwLFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHZwbXVsbHcgICAgIHltbTUsIHltbTUsIFlNTVdPUkQgW1lNTUJMT0NLKDIsMCxyMTAsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgdnBtdWxsdyAgICAgeW1tNiwgeW1tNiwgWU1NV09SRCBbWU1NQkxPQ0soNCwwLHIxMCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICB2cG11bGx3ICAgICB5bW03LCB5bW03LCBZTU1XT1JEIFtZTU1CTE9DSyg2LDAscjEwLFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgdnBlcm0yaTEyOCAgeW1tMCwgeW1tNCwgeW1tNiwgMHgyMCAgOyB5bW0wPWluMF80CisgICAgdnBlcm0yaTEyOCAgeW1tMSwgeW1tNSwgeW1tNCwgMHgzMSAgOyB5bW0xPWluM18xCisgICAgdnBlcm0yaTEyOCAgeW1tMiwgeW1tNSwgeW1tNywgMHgyMCAgOyB5bW0yPWluMl82CisgICAgdnBlcm0yaTEyOCAgeW1tMywgeW1tNywgeW1tNiwgMHgzMSAgOyB5bW0zPWluN181CisKKyAgICBkb2RjdCB5bW0wLCB5bW0xLCB5bW0yLCB5bW0zLCB5bW00LCB5bW01LCB5bW02LCB5bW03LCB5bW04LCB5bW05LCB5bW0xMCwgeW1tMTEsIDEKKyAgICA7IHltbTA9ZGF0YTBfMSwgeW1tMT1kYXRhM18yLCB5bW0yPWRhdGE0XzUsIHltbTM9ZGF0YTdfNgorCisgICAgZG90cmFuc3Bvc2UgeW1tMCwgeW1tMSwgeW1tMiwgeW1tMywgeW1tNCwgeW1tNSwgeW1tNiwgeW1tNworICAgIDsgeW1tMD1kYXRhMF80LCB5bW0xPWRhdGExXzUsIHltbTI9ZGF0YTJfNiwgeW1tMz1kYXRhM183CisKKy5jb2x1bW5fZW5kOgorCisgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisgICAgcHJlZmV0Y2hudGEgW3IxMSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgcHJlZmV0Y2hudGEgW3IxMSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgcHJlZmV0Y2hudGEgW3IxMSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisgICAgcHJlZmV0Y2hudGEgW3IxMSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKyAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MuCisKKyAgICB2cGVybTJpMTI4ICB5bW00LCB5bW0zLCB5bW0xLCAweDMxICA7IHltbTM9aW43XzUKKyAgICB2cGVybTJpMTI4ICB5bW0xLCB5bW0zLCB5bW0xLCAweDIwICA7IHltbTE9aW4zXzEKKworICAgIGRvZGN0IHltbTAsIHltbTEsIHltbTIsIHltbTQsIHltbTMsIHltbTUsIHltbTYsIHltbTcsIHltbTgsIHltbTksIHltbTEwLCB5bW0xMSwgMgorICAgIDsgeW1tMD1kYXRhMF8xLCB5bW0xPWRhdGEzXzIsIHltbTI9ZGF0YTRfNSwgeW1tND1kYXRhN182CisKKyAgICBkb3RyYW5zcG9zZSB5bW0wLCB5bW0xLCB5bW0yLCB5bW00LCB5bW0zLCB5bW01LCB5bW02LCB5bW03CisgICAgOyB5bW0wPWRhdGEwXzQsIHltbTE9ZGF0YTFfNSwgeW1tMj1kYXRhMl82LCB5bW00PWRhdGEzXzcKKworICAgIHZwYWNrc3N3YiAgIHltbTAsIHltbTAsIHltbTEgICAgICAgIDsgeW1tMD1kYXRhMDFfNDUKKyAgICB2cGFja3Nzd2IgICB5bW0xLCB5bW0yLCB5bW00ICAgICAgICA7IHltbTE9ZGF0YTIzXzY3CisgICAgdnBhZGRiICAgICAgeW1tMCwgeW1tMCwgW3JlbCBQQl9DRU5URVJKU0FNUF0KKyAgICB2cGFkZGIgICAgICB5bW0xLCB5bW0xLCBbcmVsIFBCX0NFTlRFUkpTQU1QXQorCisgICAgdmV4dHJhY3RpMTI4IHhtbTYsIHltbTEsIDEgICAgICAgICAgOyB4bW0zPWRhdGE2NworICAgIHZleHRyYWN0aTEyOCB4bW00LCB5bW0wLCAxICAgICAgICAgIDsgeG1tMj1kYXRhNDUKKyAgICB2ZXh0cmFjdGkxMjggeG1tMiwgeW1tMSwgMCAgICAgICAgICA7IHhtbTE9ZGF0YTIzCisgICAgdmV4dHJhY3RpMTI4IHhtbTAsIHltbTAsIDAgICAgICAgICAgOyB4bW0wPWRhdGEwMQorCisgICAgdnBzaHVmZCAgICAgeG1tMSwgeG1tMCwgMHg0RSAgOyB4bW0xPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICB2cHNodWZkICAgICB4bW0zLCB4bW0yLCAweDRFICA7IHhtbTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIHZwc2h1ZmQgICAgIHhtbTUsIHhtbTQsIDB4NEUgIDsgeG1tNT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisgICAgdnBzaHVmZCAgICAgeG1tNywgeG1tNiwgMHg0RSAgOyB4bW03PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKworICAgIHZ6ZXJvdXBwZXIKKworICAgIG1vdiAgICAgICAgIGVheCwgcjEzZAorCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUFJPVyBbcjEyKzAqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3IxMisxKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyMTIrMipTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcjEyKzMqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0yCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3IxMis0KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyMTIrNSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQorCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUFJPVyBbcjEyKzYqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3IxMis3KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03CisKKyAgICB1bmNvbGxlY3RfYXJncyA0CisgICAgcG9wX3htbSAgICAgNAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qaWRjdGludC1zc2UyLmFzbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2ppZGN0aW50LXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZmMzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qaWRjdGludC1zc2UyLmFzbQpAQCAtMCwwICsxLDg0OCBAQAorOworOyBqaWRjdGludC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIElEQ1QgKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorOyBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZAorOyBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RpbnQuYzsgc2VlIHRoZSBqaWRjdGludC5jIGZvcgorOyBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyVkZWZpbmUgUEFTUzFfQklUUyAgMgorCislZGVmaW5lIERFU0NBTEVfUDEgIChDT05TVF9CSVRTIC0gUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMiAgKENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMykKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yOTggZXF1ICAyNDQ2ICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAzMTk2ICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICA0NDMzICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1ICA2MjcwICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICA3MzczICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICA5NjMzICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1IDEyMjk5ICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1IDE1MTM3ICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1IDE2MDY5ICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1IDE2ODE5ICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1IDIwOTk1ICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1IDI1MTcyICA7IEZJWCgzLjA3MjcxMTAyNikKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMjk4IGVxdSBERVNDQUxFKCAzMjA2NTI5NTUsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgREVTQ0FMRSggNDE4OTUzMjc2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1IERFU0NBTEUoIDU4MTEwNDg4NywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSBERVNDQUxFKCA4MjE4MDY0MTMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgREVTQ0FMRSggOTY2MzQyMTExLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1IERFU0NBTEUoMTI2MjU4NjgxMywgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSBERVNDQUxFKDE2MTIwMzEyNjcsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgREVTQ0FMRSgxOTg0MDE2MTg4LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1IERFU0NBTEUoMjEwNjIyMDM1MCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSBERVNDQUxFKDIyMDQ1MjA2NzMsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgREVTQ0FMRSgyNzUxOTA5NTA2LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1IERFU0NBTEUoMzI5OTI5ODM0MSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMy4wNzI3MTEwMjYpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19DT05TVAorCisgICAgYWxpZ256ICAgICAgMzIKKyAgICBHTE9CQUxfREFUQShqY29uc3RfaWRjdF9pc2xvd19zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X2lzbG93X3NzZTIpOgorCitQV19GMTMwX0YwNTQgICB0aW1lcyA0ICBkdyAgKEZfMF81NDEgKyBGXzBfNzY1KSwgIEZfMF81NDEKK1BXX0YwNTRfTUYxMzAgIHRpbWVzIDQgIGR3ICBGXzBfNTQxLCAoRl8wXzU0MSAtIEZfMV84NDcpCitQV19NRjA3OF9GMTE3ICB0aW1lcyA0ICBkdyAgKEZfMV8xNzUgLSBGXzFfOTYxKSwgIEZfMV8xNzUKK1BXX0YxMTdfRjA3OCAgIHRpbWVzIDQgIGR3ICBGXzFfMTc1LCAoRl8xXzE3NSAtIEZfMF8zOTApCitQV19NRjA2MF9NRjA4OSB0aW1lcyA0ICBkdyAgKEZfMF8yOTggLSBGXzBfODk5KSwgLUZfMF84OTkKK1BXX01GMDg5X0YwNjAgIHRpbWVzIDQgIGR3IC1GXzBfODk5LCAoRl8xXzUwMSAtIEZfMF84OTkpCitQV19NRjA1MF9NRjI1NiB0aW1lcyA0ICBkdyAgKEZfMl8wNTMgLSBGXzJfNTYyKSwgLUZfMl81NjIKK1BXX01GMjU2X0YwNTAgIHRpbWVzIDQgIGR3IC1GXzJfNTYyLCAoRl8zXzA3MiAtIEZfMl81NjIpCitQRF9ERVNDQUxFX1AxICB0aW1lcyA0ICBkZCAgMSA8PCAoREVTQ0FMRV9QMSAtIDEpCitQRF9ERVNDQUxFX1AyICB0aW1lcyA0ICBkZCAgMSA8PCAoREVTQ0FMRV9QMiAtIDEpCitQQl9DRU5URVJKU0FNUCB0aW1lcyAxNiBkYiAgQ0VOVEVSSlNBTVBMRQorCisgICAgYWxpZ256ICAgICAgMzIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgNjQKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaXNsb3dfc3NlMih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworOyByMTAgPSBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyCis7IHIxMSA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCis7IHIxM2QgPSBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9yYnAgIHJicCArIDAKKyVkZWZpbmUgd2soaSkgICAgICAgICByYnAgLSAoV0tfTlVNIC0gKGkpKSAqIFNJWkVPRl9YTU1XT1JECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAxMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaWRjdF9pc2xvd19zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfaXNsb3dfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgIHN1YiAgICAgICAgIHJzcCwgYnl0ZSA0CisgICAgYW5kICAgICAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgbW92ICAgICAgICAgW3JzcF0sIHJheAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgIGxlYSAgICAgICAgIHJzcCwgW3drKDApXQorICAgIGNvbGxlY3RfYXJncyA0CisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworICAgIG1vdiAgICAgICAgIHJkeCwgcjEwICAgICAgICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICBtb3YgICAgICAgICByc2ksIHIxMSAgICAgICAgICAgICAgICA7IGlucHRyCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JU0xPV19TU0UyCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgbmVhciAuY29sdW1uRENUCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMSwgeG1tMAorICAgIHBhY2tzc3diICAgIHhtbTEsIHhtbTEKKyAgICBwYWNrc3N3YiAgICB4bW0xLCB4bW0xCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0xCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHBzbGx3ICAgICAgIHhtbTUsIFBBU1MxX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHB1bnBja2x3ZCAgIHhtbTUsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tNCAgICAgICAgICAgICAgOyB4bW00PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKworICAgIHBzaHVmZCAgICAgIHhtbTcsIHhtbTUsIDB4MDAgICAgICAgIDsgeG1tNz1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKKyAgICBwc2h1ZmQgICAgICB4bW02LCB4bW01LCAweDU1ICAgICAgICA7IHhtbTY9Y29sMT0oMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEpCisgICAgcHNodWZkICAgICAgeG1tMSwgeG1tNSwgMHhBQSAgICAgICAgOyB4bW0xPWNvbDI9KDAyIDAyIDAyIDAyIDAyIDAyIDAyIDAyKQorICAgIHBzaHVmZCAgICAgIHhtbTUsIHhtbTUsIDB4RkYgICAgICAgIDsgeG1tNT1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKKyAgICBwc2h1ZmQgICAgICB4bW0wLCB4bW00LCAweDAwICAgICAgICA7IHhtbTA9Y29sND0oMDQgMDQgMDQgMDQgMDQgMDQgMDQgMDQpCisgICAgcHNodWZkICAgICAgeG1tMywgeG1tNCwgMHg1NSAgICAgICAgOyB4bW0zPWNvbDU9KDA1IDA1IDA1IDA1IDA1IDA1IDA1IDA1KQorICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTQsIDB4QUEgICAgICAgIDsgeG1tMj1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKyAgICBwc2h1ZmQgICAgICB4bW00LCB4bW00LCAweEZGICAgICAgICA7IHhtbTQ9Y29sNz0oMDcgMDcgMDcgMDcgMDcgMDcgMDcgMDcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg4KV0sIHhtbTYgICA7IHdrKDgpPWNvbDEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg5KV0sIHhtbTUgICA7IHdrKDkpPWNvbDMKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxMCldLCB4bW0zICA7IHdrKDEwKT1jb2w1CisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMTEpXSwgeG1tNCAgOyB3aygxMSk9Y29sNworICAgIGptcCAgICAgICAgIG5lYXIgLmNvbHVtbl9lbmQKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIDsgKE9yaWdpbmFsKQorICAgIDsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKyAgICA7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworICAgIDsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisgICAgOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0xPWluMj16MgorICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTM9aW42PXozCisgICAgcHVucGNraHdkICAgeG1tNSwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW01CisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19GMTMwX0YwNTRdICAgOyB4bW00PXRtcDNMCisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW3JlbCBQV19GMTMwX0YwNTRdICAgOyB4bW01PXRtcDNICisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19GMDU0X01GMTMwXSAgOyB4bW0xPXRtcDJMCisgICAgcG1hZGR3ZCAgICAgeG1tMywgW3JlbCBQV19GMDU0X01GMTMwXSAgOyB4bW0zPXRtcDJICisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0wCisgICAgcGFkZHcgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWluMCtpbjQKKyAgICBwc3VidyAgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9aW4wLWluNAorCisgICAgcHhvciAgICAgICAgeG1tNywgeG1tNworICAgIHB4b3IgICAgICAgIHhtbTIsIHhtbTIKKyAgICBwdW5wY2tsd2QgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9dG1wMEwKKyAgICBwdW5wY2tod2QgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTI9dG1wMEgKKyAgICBwc3JhZCAgICAgICB4bW03LCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTcsMTYgJiBwc2xsZCB4bW03LENPTlNUX0JJVFMKKyAgICBwc3JhZCAgICAgICB4bW0yLCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTIsMTYgJiBwc2xsZCB4bW0yLENPTlNUX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTc9dG1wMTBMCisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyB4bW0wPXRtcDEzTAorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW0yLCB4bW01ICAgICAgICAgICAgICA7IHhtbTI9dG1wMTBICisgICAgcHN1YmQgICAgICAgeG1tNCwgeG1tNSAgICAgICAgICAgICAgOyB4bW00PXRtcDEzSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT10bXAxMEwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPXRtcDEwSAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tMCAgIDsgd2soMik9dG1wMTNMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMyldLCB4bW00ICAgOyB3aygzKT10bXAxM0gKKworICAgIHB4b3IgICAgICAgIHhtbTUsIHhtbTUKKyAgICBweG9yICAgICAgICB4bW03LCB4bW03CisgICAgcHVucGNrbHdkICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PXRtcDFMCisgICAgcHVucGNraHdkICAgeG1tNywgeG1tNiAgICAgICAgICAgICAgOyB4bW03PXRtcDFICisgICAgcHNyYWQgICAgICAgeG1tNSwgKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCisgICAgcHNyYWQgICAgICAgeG1tNywgKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCB4bW03LDE2ICYgcHNsbGQgeG1tNyxDT05TVF9CSVRTCisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW01CisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMSAgICAgICAgICAgICAgOyB4bW01PXRtcDExTAorICAgIHBzdWJkICAgICAgIHhtbTIsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMj10bXAxMkwKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW03CisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMyAgICAgICAgICAgICAgOyB4bW03PXRtcDExSAorICAgIHBzdWJkICAgICAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD10bXAxMkgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDQpXSwgeG1tNSAgIDsgd2soNCk9dG1wMTFMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNSldLCB4bW03ICAgOyB3ayg1KT10bXAxMUgKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTIgICA7IHdrKDYpPXRtcDEyTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDcpXSwgeG1tMCAgIDsgd2soNyk9dG1wMTJICisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW00CisgICAgcGFkZHcgICAgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PXozCisgICAgcGFkZHcgICAgICAgeG1tNywgeG1tMSAgICAgICAgICAgICAgOyB4bW03PXo0CisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgOworICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW03CisgICAgcHVucGNraHdkICAgeG1tMCwgeG1tNworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTIKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0wCisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW3JlbCBQV19NRjA3OF9GMTE3XSAgOyB4bW0yPXozTAorICAgIHBtYWRkd2QgICAgIHhtbTAsIFtyZWwgUFdfTUYwNzhfRjExN10gIDsgeG1tMD16M0gKKyAgICBwbWFkZHdkICAgICB4bW01LCBbcmVsIFBXX0YxMTdfRjA3OF0gICA7IHhtbTU9ejRMCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19GMTE3X0YwNzhdICAgOyB4bW03PXo0SAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMTApXSwgeG1tMiAgOyB3aygxMCk9ejNMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMTEpXSwgeG1tMCAgOyB3aygxMSk9ejNICisKKyAgICA7IChPcmlnaW5hbCkKKyAgICA7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworICAgIDsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisgICAgOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKyAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgIDsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworICAgIDsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworICAgIDsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworICAgIDsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworICAgIDsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgIDsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisgICAgOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTMKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0zCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tNAorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtyZWwgUFdfTUYwNjBfTUYwODldICA7IHhtbTI9dG1wMEwKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX01GMDYwX01GMDg5XSAgOyB4bW0wPXRtcDBICisgICAgcG1hZGR3ZCAgICAgeG1tMywgW3JlbCBQV19NRjA4OV9GMDYwXSAgIDsgeG1tMz10bXAzTAorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfTUYwODlfRjA2MF0gICA7IHhtbTQ9dG1wM0gKKworICAgIHBhZGRkICAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMj10bXAwTAorICAgIHBhZGRkICAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tMD10bXAwSAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMz10bXAzTAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND10bXAzSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soOCldLCB4bW0yICAgOyB3ayg4KT10bXAwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDkpXSwgeG1tMCAgIDsgd2soOSk9dG1wMEgKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xCisgICAgcHVucGNrbHdkICAgeG1tMiwgeG1tNgorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTYKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtyZWwgUFdfTUYwNTBfTUYyNTZdICA7IHhtbTI9dG1wMUwKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX01GMDUwX01GMjU2XSAgOyB4bW0wPXRtcDFICisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19NRjI1Nl9GMDUwXSAgIDsgeG1tMT10bXAyTAorICAgIHBtYWRkd2QgICAgIHhtbTYsIFtyZWwgUFdfTUYyNTZfRjA1MF0gICA7IHhtbTY9dG1wMkgKKworICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMj10bXAxTAorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD10bXAxSAorICAgIHBhZGRkICAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMT10bXAyTAorICAgIHBhZGRkICAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tNj10bXAySAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMTApXSwgeG1tMiAgOyB3aygxMCk9dG1wMUwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxMSldLCB4bW0wICA7IHdrKDExKT10bXAxSAorCisgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT10bXAxMEwKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTc9dG1wMTBICisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMEwKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTBICisgICAgcHN1YmQgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPWRhdGE3TAorICAgIHBzdWJkICAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgeG1tMD1kYXRhN0gKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFtyZWwgUERfREVTQ0FMRV9QMV0gIDsgeG1tMz1bcmVsIFBEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNywgeG1tMworICAgIHBzcmFkICAgICAgIHhtbTUsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW03LCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tMworICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTMKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tNyAgICAgICAgICAgICAgOyB4bW01PWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwYWNrc3NkdyAgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbd2soNCldICAgOyB4bW00PXRtcDExTAorICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tMz10bXAxMUgKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0zCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgOyB4bW00PWRhdGExTAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMUgKKyAgICBwc3ViZCAgICAgICB4bW03LCB4bW0xICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTZMCisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tNiAgICAgICAgICAgICAgOyB4bW0wPWRhdGE2SAorCisgICAgbW92ZHFhICAgICAgeG1tMSwgW3JlbCBQRF9ERVNDQUxFX1AxXSAgOyB4bW0xPVtyZWwgUERfREVTQ0FMRV9QMV0KKworICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTEKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW0xCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDEKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMQorICAgIHBzcmFkICAgICAgIHhtbTcsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AxCisKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW00ICAgICAgICAgICAgICA7IHhtbTU9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgIHB1bnBja2h3ZCAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICBwdW5wY2tod2QgICB4bW0xLCB4bW0yICAgICAgICAgICAgICA7IHhtbTE9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbd2soNildICAgOyB4bW0zPXRtcDEyTAorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMD10bXAxMkgKKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTQ9dG1wMUwKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTI9dG1wMUgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNSAgIDsgd2soMCk9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tNiAgIDsgd2soMSk9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDQpXSwgeG1tNyAgIDsgd2soNCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDUpXSwgeG1tMSAgIDsgd2soNSk9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW00ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTJMCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWRhdGEySAorICAgIHBzdWJkICAgICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNUwKKyAgICBwc3ViZCAgICAgICB4bW02LCB4bW0yICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTVICisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBbcmVsIFBEX0RFU0NBTEVfUDFdICA7IHhtbTc9W3JlbCBQRF9ERVNDQUxFX1AxXQorCisgICAgcGFkZGQgICAgICAgeG1tMywgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTcKKyAgICBwc3JhZCAgICAgICB4bW0zLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMQorICAgIHBhZGRkICAgICAgIHhtbTUsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW03CisgICAgcHNyYWQgICAgICAgeG1tNSwgREVTQ0FMRV9QMQorICAgIHBzcmFkICAgICAgIHhtbTYsIERFU0NBTEVfUDEKKworICAgIHBhY2tzc2R3ICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tNiAgICAgICAgICAgICAgOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMT10bXAxM0wKKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTQ9dG1wMTNICisgICAgbW92ZHFhICAgICAgeG1tMiwgWE1NV09SRCBbd2soOCldICAgOyB4bW0yPXRtcDBMCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbd2soOSldICAgOyB4bW03PXRtcDBICisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tNAorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1kYXRhM0wKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTNICisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tMiAgICAgICAgICAgICAgOyB4bW0wPWRhdGE0TAorICAgIHBzdWJkICAgICAgIHhtbTYsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNj1kYXRhNEgKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIFtyZWwgUERfREVTQ0FMRV9QMV0gIDsgeG1tMj1bcmVsIFBEX0RFU0NBTEVfUDFdCisKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMgorICAgIHBzcmFkICAgICAgIHhtbTEsIERFU0NBTEVfUDEKKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AxCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tMgorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTIKKyAgICBwc3JhZCAgICAgICB4bW0wLCBERVNDQUxFX1AxCisgICAgcHNyYWQgICAgICAgeG1tNiwgREVTQ0FMRV9QMQorCisgICAgcGFja3NzZHcgICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW02ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTI9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMyAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbHdkICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tNSAgICAgICAgICAgICAgOyB4bW02PSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKworICAgIG1vdmRxYSAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTcsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNz0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgcHVucGNraGRxICAgeG1tMSwgeG1tMyAgICAgICAgICAgICAgOyB4bW0xPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0yLCB4bW00ICAgICAgICAgICAgICA7IHhtbTI9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIHB1bnBja2hkcSAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tND0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTIgICA7IHdrKDYpPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg3KV0sIHhtbTUgICA7IHdrKDcpPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTAsIHhtbTMgICAgICAgICAgICAgIDsgeG1tMD0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgcHVucGNraGRxICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW00ICAgICAgICAgICAgICA7IHhtbTY9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgIHB1bnBja2hkcSAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tscWRxICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisgICAgcHVucGNraHFkcSAgeG1tMywgeG1tMCAgICAgICAgICAgICAgOyB4bW0zPWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICBwdW5wY2tocWRxICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFt3ayg2KV0gICA7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg4KV0sIHhtbTMgICA7IHdrKDgpPWNvbDEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg5KV0sIHhtbTQgICA7IHdrKDkpPWNvbDMKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgIHB1bnBja2xxZHEgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICBwdW5wY2tocWRxICB4bW0zLCB4bW02ICAgICAgICAgICAgICA7IHhtbTM9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbHFkcSAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIHB1bnBja2hxZHEgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTMgIDsgd2soMTApPWNvbDUKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygxMSldLCB4bW00ICA7IHdrKDExKT1jb2w3CisuY29sdW1uX2VuZDoKKworICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICByYXgsIFtvcmlnaW5hbF9yYnBdCisgICAgbW92ICAgICAgICAgcmRpLCByMTIgICAgICAgICAgICAgICAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIHIxM2QKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICA7IHhtbTc9Y29sMCwgeG1tMT1jb2wyLCB4bW0wPWNvbDQsIHhtbTI9Y29sNgorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworICAgIDsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisgICAgOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKyAgICA7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9aW4yPXoyCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMj1pbjY9ejMKKyAgICBwdW5wY2tod2QgICB4bW01LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTUKKyAgICBwbWFkZHdkICAgICB4bW02LCBbcmVsIFBXX0YxMzBfRjA1NF0gICA7IHhtbTY9dG1wM0wKKyAgICBwbWFkZHdkICAgICB4bW01LCBbcmVsIFBXX0YxMzBfRjA1NF0gICA7IHhtbTU9dG1wM0gKKyAgICBwbWFkZHdkICAgICB4bW0xLCBbcmVsIFBXX0YwNTRfTUYxMzBdICA7IHhtbTE9dG1wMkwKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbcmVsIFBXX0YwNTRfTUYxMzBdICA7IHhtbTI9dG1wMkgKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTcKKyAgICBwYWRkdyAgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9aW4wK2luNAorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMz1pbjAtaW40CisKKyAgICBweG9yICAgICAgICB4bW00LCB4bW00CisgICAgcHhvciAgICAgICAgeG1tMCwgeG1tMAorICAgIHB1bnBja2x3ZCAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND10bXAwTAorICAgIHB1bnBja2h3ZCAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD10bXAwSAorICAgIHBzcmFkICAgICAgIHhtbTQsICgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUworICAgIHBzcmFkICAgICAgIHhtbTAsICgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgeG1tMCwxNiAmIHBzbGxkIHhtbTAsQ09OU1RfQklUUworCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tNAorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgeG1tND10bXAxMEwKKyAgICBwc3ViZCAgICAgICB4bW03LCB4bW02ICAgICAgICAgICAgICA7IHhtbTc9dG1wMTNMCisgICAgbW92ZHFhICAgICAgeG1tNiwgeG1tMAorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD10bXAxMEgKKyAgICBwc3ViZCAgICAgICB4bW02LCB4bW01ICAgICAgICAgICAgICA7IHhtbTY9dG1wMTNICisKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPXRtcDEwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9dG1wMTBICisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMildLCB4bW03ICAgOyB3aygyKT10bXAxM0wKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTYgICA7IHdrKDMpPXRtcDEzSAorCisgICAgcHhvciAgICAgICAgeG1tNSwgeG1tNQorICAgIHB4b3IgICAgICAgIHhtbTQsIHhtbTQKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0zICAgICAgICAgICAgICA7IHhtbTU9dG1wMUwKKyAgICBwdW5wY2tod2QgICB4bW00LCB4bW0zICAgICAgICAgICAgICA7IHhtbTQ9dG1wMUgKKyAgICBwc3JhZCAgICAgICB4bW01LCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTUsMTYgJiBwc2xsZCB4bW01LENPTlNUX0JJVFMKKyAgICBwc3JhZCAgICAgICB4bW00LCAoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9dG1wMTFMCisgICAgcHN1YmQgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyTAorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0yICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTFICisgICAgcHN1YmQgICAgICAgeG1tNywgeG1tMiAgICAgICAgICAgICAgOyB4bW03PXRtcDEySAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNCldLCB4bW01ICAgOyB3ayg0KT10bXAxMUwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTQgICA7IHdrKDUpPXRtcDExSAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDYpXSwgeG1tMCAgIDsgd2soNik9dG1wMTJMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soNyldLCB4bW03ICAgOyB3ayg3KT10bXAxMkgKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDkpXSAgIDsgeG1tNj1jb2wzCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbd2soOCldICAgOyB4bW0zPWNvbDEKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTE9Y29sNworICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMj1jb2w1CisKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMworICAgIHBhZGR3ICAgICAgIHhtbTUsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNT16MworICAgIHBhZGR3ICAgICAgIHhtbTQsIHhtbTIgICAgICAgICAgICAgIDsgeG1tND16NAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgIDsKKyAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTUKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW01CisgICAgcHVucGNrbHdkICAgeG1tMCwgeG1tNAorICAgIHB1bnBja2h3ZCAgIHhtbTcsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0wCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNworICAgIHBtYWRkd2QgICAgIHhtbTAsIFtyZWwgUFdfTUYwNzhfRjExN10gIDsgeG1tMD16M0wKKyAgICBwbWFkZHdkICAgICB4bW03LCBbcmVsIFBXX01GMDc4X0YxMTddICA7IHhtbTc9ejNICisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW3JlbCBQV19GMTE3X0YwNzhdICAgOyB4bW01PXo0TAorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfRjExN19GMDc4XSAgIDsgeG1tND16NEgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTAgIDsgd2soMTApPXozTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDExKV0sIHhtbTcgIDsgd2soMTEpPXozSAorCisgICAgOyAoT3JpZ2luYWwpCisgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICA7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworICAgIDsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKyAgICA7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKyAgICA7CisgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICA7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKyAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICA7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICA7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgIDsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTMKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTcKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX01GMDYwX01GMDg5XSAgOyB4bW0wPXRtcDBMCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19NRjA2MF9NRjA4OV0gIDsgeG1tNz10bXAwSAorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtyZWwgUFdfTUYwODlfRjA2MF0gICA7IHhtbTE9dG1wM0wKKyAgICBwbWFkZHdkICAgICB4bW0zLCBbcmVsIFBXX01GMDg5X0YwNjBdICAgOyB4bW0zPXRtcDNICisKKyAgICBwYWRkZCAgICAgICB4bW0wLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTA9dG1wMEwKKyAgICBwYWRkZCAgICAgICB4bW03LCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTc9dG1wMEgKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wM0wKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW00ICAgICAgICAgICAgICA7IHhtbTM9dG1wM0gKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDgpXSwgeG1tMCAgIDsgd2soOCk9dG1wMEwKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFt3ayg5KV0sIHhtbTcgICA7IHdrKDkpPXRtcDBICisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMgorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTYKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tMAorICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTcKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX01GMDUwX01GMjU2XSAgOyB4bW0wPXRtcDFMCisgICAgcG1hZGR3ZCAgICAgeG1tNywgW3JlbCBQV19NRjA1MF9NRjI1Nl0gIDsgeG1tNz10bXAxSAorICAgIHBtYWRkd2QgICAgIHhtbTIsIFtyZWwgUFdfTUYyNTZfRjA1MF0gICA7IHhtbTI9dG1wMkwKKyAgICBwbWFkZHdkICAgICB4bW02LCBbcmVsIFBXX01GMjU2X0YwNTBdICAgOyB4bW02PXRtcDJICisKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW01ICAgICAgICAgICAgICA7IHhtbTA9dG1wMUwKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW00ICAgICAgICAgICAgICA7IHhtbTc9dG1wMUgKKyAgICBwYWRkZCAgICAgICB4bW0yLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTI9dG1wMkwKKyAgICBwYWRkZCAgICAgICB4bW02LCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTY9dG1wMkgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTAgIDsgd2soMTApPXRtcDFMCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMTEpXSwgeG1tNyAgOyB3aygxMSk9dG1wMUgKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTU9dG1wMTBMCisgICAgbW92ZHFhICAgICAgeG1tNCwgWE1NV09SRCBbd2soMSldICAgOyB4bW00PXRtcDEwSAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNQorICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW01LCB4bW0xICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTBMCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMyAgICAgICAgICAgICAgOyB4bW00PWRhdGEwSAorICAgIHBzdWJkICAgICAgIHhtbTAsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMD1kYXRhN0wKKyAgICBwc3ViZCAgICAgICB4bW03LCB4bW0zICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTdICisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBbcmVsIFBEX0RFU0NBTEVfUDJdICA7IHhtbTE9W3JlbCBQRF9ERVNDQUxFX1AyXQorCisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTEKKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTEKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTcsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIHhtbTUsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisgICAgcGFja3NzZHcgICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB4bW0wPWRhdGE3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDQpXSAgIDsgeG1tMz10bXAxMUwKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3ayg1KV0gICA7IHhtbTE9dG1wMTFICisKKyAgICBtb3ZkcWEgICAgICB4bW00LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMUwKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW02ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTFICisgICAgcHN1YmQgICAgICAgeG1tNCwgeG1tMiAgICAgICAgICAgICAgOyB4bW00PWRhdGE2TAorICAgIHBzdWJkICAgICAgIHhtbTcsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNkgKKworICAgIG1vdmRxYSAgICAgIHhtbTIsIFtyZWwgUERfREVTQ0FMRV9QMl0gIDsgeG1tMj1bcmVsIFBEX0RFU0NBTEVfUDJdCisKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW0yCisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tMgorICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tMgorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTIKKyAgICBwc3JhZCAgICAgICB4bW00LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tNywgREVTQ0FMRV9QMgorCisgICAgcGFja3NzZHcgICAgeG1tMywgeG1tMSAgICAgICAgICAgICAgOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICBwYWNrc3NkdyAgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCisgICAgcGFja3Nzd2IgICAgeG1tNSwgeG1tNCAgICAgICAgICAgICAgOyB4bW01PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICBwYWNrc3N3YiAgICB4bW0zLCB4bW0wICAgICAgICAgICAgICA7IHhtbTM9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbd2soNildICAgOyB4bW02PXRtcDEyTAorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMj10bXAxMkgKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTE9dG1wMUwKKyAgICBtb3ZkcWEgICAgICB4bW03LCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTc9dG1wMUgKKworICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDApXSwgeG1tNSAgIDsgd2soMCk9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW02LCB4bW0xICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTJMCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPWRhdGEySAorICAgIHBzdWJkICAgICAgIHhtbTQsIHhtbTEgICAgICAgICAgICAgIDsgeG1tND1kYXRhNUwKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW03ICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTVICisKKyAgICBtb3ZkcWEgICAgICB4bW01LCBbcmVsIFBEX0RFU0NBTEVfUDJdICA7IHhtbTU9W3JlbCBQRF9ERVNDQUxFX1AyXQorCisgICAgcGFkZGQgICAgICAgeG1tNiwgeG1tNQorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTUKKyAgICBwc3JhZCAgICAgICB4bW02LCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tMiwgREVTQ0FMRV9QMgorICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTUKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW01CisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMgorICAgIHBzcmFkICAgICAgIHhtbTAsIERFU0NBTEVfUDIKKworICAgIHBhY2tzc2R3ICAgIHhtbTYsIHhtbTIgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgcGFja3NzZHcgICAgeG1tNCwgeG1tMCAgICAgICAgICAgICAgOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMz10bXAxM0wKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTE9dG1wMTNICisgICAgbW92ZHFhICAgICAgeG1tNywgWE1NV09SRCBbd2soOCldICAgOyB4bW03PXRtcDBMCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbd2soOSldICAgOyB4bW01PXRtcDBICisKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMz1kYXRhM0wKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTNICisgICAgcHN1YmQgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPWRhdGE0TAorICAgIHBzdWJkICAgICAgIHhtbTAsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNEgKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFtyZWwgUERfREVTQ0FMRV9QMl0gIDsgeG1tNz1bcmVsIFBEX0RFU0NBTEVfUDJdCisKKyAgICBwYWRkZCAgICAgICB4bW0zLCB4bW03CisgICAgcGFkZGQgICAgICAgeG1tMSwgeG1tNworICAgIHBzcmFkICAgICAgIHhtbTMsIERFU0NBTEVfUDIKKyAgICBwc3JhZCAgICAgICB4bW0xLCBERVNDQUxFX1AyCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTcKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AyCisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMgorCisgICAgbW92ZHFhICAgICAgeG1tNSwgW3JlbCBQQl9DRU5URVJKU0FNUF0gIDsgeG1tNT1bcmVsIFBCX0NFTlRFUkpTQU1QXQorCisgICAgcGFja3NzZHcgICAgeG1tMywgeG1tMSAgICAgICAgICAgICA7IHhtbTM9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgIHBhY2tzc2R3ICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgOyB4bW0yPWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgOyB4bW03PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gIDsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKyAgICBwYWNrc3N3YiAgICB4bW02LCB4bW0yICAgICAgICAgICAgIDsgeG1tNj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgcGFja3Nzd2IgICAgeG1tMywgeG1tNCAgICAgICAgICAgICA7IHhtbTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCisgICAgcGFkZGIgICAgICAgeG1tNywgeG1tNQorICAgIHBhZGRiICAgICAgIHhtbTEsIHhtbTUKKyAgICBwYWRkYiAgICAgICB4bW02LCB4bW01CisgICAgcGFkZGIgICAgICAgeG1tMywgeG1tNQorCisgICAgbW92ZHFhICAgICAgeG1tMCwgeG1tNyAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgcHVucGNrbGJ3ICAgeG1tNywgeG1tMSAgICAgICAgOyB4bW03PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSA0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKyAgICBwdW5wY2toYncgICB4bW0wLCB4bW0xICAgICAgICA7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorICAgIG1vdmRxYSAgICAgIHhtbTIsIHhtbTYgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2xidyAgIHhtbTYsIHhtbTMgICAgICAgIDsgeG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgcHVucGNraGJ3ICAgeG1tMiwgeG1tMyAgICAgICAgOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTcgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2x3ZCAgIHhtbTcsIHhtbTYgICAgICAgIDsgeG1tNz0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgcHVucGNraHdkICAgeG1tNCwgeG1tNiAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0yICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0wICAgICAgICA7IHhtbTI9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTAgICAgICAgIDsgeG1tNT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW03ICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICBwdW5wY2tsZHEgICB4bW03LCB4bW0yICAgICAgICA7IHhtbTc9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgIHB1bnBja2hkcSAgIHhtbTEsIHhtbTIgICAgICAgIDsgeG1tMT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNCAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgcHVucGNrbGRxICAgeG1tNCwgeG1tNSAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW01ICAgICAgICA7IHhtbTM9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisgICAgcHNodWZkICAgICAgeG1tNiwgeG1tNywgMHg0RSAgOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICBwc2h1ZmQgICAgICB4bW0wLCB4bW0xLCAweDRFICA7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTQsIDB4NEUgIDsgeG1tMj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisgICAgcHNodWZkICAgICAgeG1tNSwgeG1tMywgMHg0RSAgOyB4bW01PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKworICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSs0KlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyZGkrNipTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92cSAgICAgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JkaSszKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0wCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzUqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JkaSs3KlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZxICAgICAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgIG1vdnEgICAgICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisKKyAgICB1bmNvbGxlY3RfYXJncyA0CisgICAgbW92ICAgICAgICAgcnNwLCByYnAgICAgICAgICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICBwb3AgICAgICAgICByc3AgICAgICAgICAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamlkY3RyZWQtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qaWRjdHJlZC1zc2UyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY0ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvamlkY3RyZWQtc3NlMi5hc20KQEAgLTAsMCArMSw1NzUgQEAKKzsKKzsgamlkY3RyZWQuYXNtIC0gcmVkdWNlZC1zaXplIElEQ1QgKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgaW52ZXJzZS1EQ1Qgcm91dGluZXMgdGhhdCBwcm9kdWNlIHJlZHVjZWQtc2l6ZQorOyBvdXRwdXQ6IGVpdGhlciA0eDQgb3IgMngyIHBpeGVscyBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suCis7IFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RyZWQuYzsKKzsgc2VlIHRoZSBqaWRjdHJlZC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUyAgICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAgIDIKKworJWRlZmluZSBERVNDQUxFX1AxXzQgIChDT05TVF9CSVRTIC0gUEFTUzFfQklUUyArIDEpCislZGVmaW5lIERFU0NBTEVfUDJfNCAgKENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTICsgMyArIDEpCislZGVmaW5lIERFU0NBTEVfUDFfMiAgKENPTlNUX0JJVFMgLSBQQVNTMV9CSVRTICsgMikKKyVkZWZpbmUgREVTQ0FMRV9QMl8yICAoQ09OU1RfQklUUyArIFBBU1MxX0JJVFMgKyAzICsgMikKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yMTEgZXF1ICAxNzMwICA7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkgZXF1ICA0MTc2ICA7IEZJWCgwLjUwOTc5NTU3OSkKK0ZfMF82MDEgZXF1ICA0OTI2ICA7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAgZXF1ICA1OTA2ICA7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUgZXF1ICA2MjcwICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84NTAgZXF1ICA2OTY3ICA7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkgZXF1ICA3MzczICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEgZXF1ICA4Njk3ICA7IEZJWCgxLjA2MTU5NDMzNykKK0ZfMV8yNzIgZXF1IDEwNDI2ICA7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEgZXF1IDExODkzICA7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcgZXF1IDE1MTM3ICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl8xNzIgZXF1IDE3Nzk5ICA7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIgZXF1IDIwOTk1ICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQgZXF1IDI5NjkyICA7IEZJWCgzLjYyNDUwOTc4NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LCBuKSAgKCgoeCkgKyAoMSA8PCAoKG4pIC0gMSkpKSA+PiAobikpCitGXzBfMjExIGVxdSBERVNDQUxFKCAyMjY3MzU4NzksIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuMjExMTY0MjQzKQorRl8wXzUwOSBlcXUgREVTQ0FMRSggNTQ3Mzg4ODM0LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjUwOTc5NTU3OSkKK0ZfMF82MDEgZXF1IERFU0NBTEUoIDY0NTY4OTE1NSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC42MDEzNDQ4ODcpCitGXzBfNzIwIGVxdSBERVNDQUxFKCA3NzQxMjQ3MTQsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuNzIwOTU5ODIyKQorRl8wXzc2NSBlcXUgREVTQ0FMRSggODIxODA2NDEzLCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84NTAgZXF1IERFU0NBTEUoIDkxMzE0MjM2MSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMC44NTA0MzAwOTUpCitGXzBfODk5IGVxdSBERVNDQUxFKCA5NjYzNDIxMTEsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzA2MSBlcXUgREVTQ0FMRSgxMTM5ODc4MjM5LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjA2MTU5NDMzNykKK0ZfMV8yNzIgZXF1IERFU0NBTEUoMTM2NjYxNDExOSwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMS4yNzI3NTg1ODApCitGXzFfNDUxIGVxdSBERVNDQUxFKDE1NTg4MzE1MTYsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDEuNDUxNzc0OTgxKQorRl8xXzg0NyBlcXUgREVTQ0FMRSgxOTg0MDE2MTg4LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl8xNzIgZXF1IERFU0NBTEUoMjMzMjk1NjIzMCwgMzAgLSBDT05TVF9CSVRTKSAgOyBGSVgoMi4xNzI3MzQ4MDMpCitGXzJfNTYyIGVxdSBERVNDQUxFKDI3NTE5MDk1MDYsIDMwIC0gQ09OU1RfQklUUykgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzYyNCBlcXUgREVTQ0FMRSgzODkxNzg3NzQ3LCAzMCAtIENPTlNUX0JJVFMpICA7IEZJWCgzLjYyNDUwOTc4NSkKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX0NPTlNUCisKKyAgICBhbGlnbnogICAgICAzMgorICAgIEdMT0JBTF9EQVRBKGpjb25zdF9pZGN0X3JlZF9zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X3JlZF9zc2UyKToKKworUFdfRjE4NF9NRjA3NiAgIHRpbWVzIDQgIGR3ICBGXzFfODQ3LCAtRl8wXzc2NQorUFdfRjI1Nl9GMDg5ICAgIHRpbWVzIDQgIGR3ICBGXzJfNTYyLCAgRl8wXzg5OQorUFdfRjEwNl9NRjIxNyAgIHRpbWVzIDQgIGR3ICBGXzFfMDYxLCAtRl8yXzE3MgorUFdfTUYwNjBfTUYwNTAgIHRpbWVzIDQgIGR3IC1GXzBfNjAxLCAtRl8wXzUwOQorUFdfRjE0NV9NRjAyMSAgIHRpbWVzIDQgIGR3ICBGXzFfNDUxLCAtRl8wXzIxMQorUFdfRjM2Ml9NRjEyNyAgIHRpbWVzIDQgIGR3ICBGXzNfNjI0LCAtRl8xXzI3MgorUFdfRjA4NV9NRjA3MiAgIHRpbWVzIDQgIGR3ICBGXzBfODUwLCAtRl8wXzcyMAorUERfREVTQ0FMRV9QMV80IHRpbWVzIDQgIGRkICAxIDw8IChERVNDQUxFX1AxXzQgLSAxKQorUERfREVTQ0FMRV9QMl80IHRpbWVzIDQgIGRkICAxIDw8IChERVNDQUxFX1AyXzQgLSAxKQorUERfREVTQ0FMRV9QMV8yIHRpbWVzIDQgIGRkICAxIDw8IChERVNDQUxFX1AxXzIgLSAxKQorUERfREVTQ0FMRV9QMl8yIHRpbWVzIDQgIGRkICAxIDw8IChERVNDQUxFX1AyXzIgLSAxKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDE2IGRiICBDRU5URVJKU0FNUExFCisKKyAgICBhbGlnbnogICAgICAzMgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorOyBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNHg0IG91dHB1dCBibG9jay4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfNHg0X3NzZTIodm9pZCAqZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCis7IHIxMCA9IHZvaWQgKmRjdF90YWJsZQorOyByMTEgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMiA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorOyByMTNkID0gSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfcmJwICByYnAgKyAwCislZGVmaW5lIHdrKGkpICAgICAgICAgcmJwIC0gKFdLX05VTSAtIChpKSkgKiBTSVpFT0ZfWE1NV09SRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgMgorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfaWRjdF80eDRfc3NlMikKKworRVhUTihqc2ltZF9pZGN0XzR4NF9zc2UyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgc3ViICAgICAgICAgcnNwLCBieXRlIDQKKyAgICBhbmQgICAgICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICBtb3YgICAgICAgICBbcnNwXSwgcmF4CisgICAgbW92ICAgICAgICAgcmJwLCByc3AgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgbGVhICAgICAgICAgcnNwLCBbd2soMCldCisgICAgY29sbGVjdF9hcmdzIDQKKworICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorCisgICAgbW92ICAgICAgICAgcmR4LCByMTAgICAgICAgICAgICAgICAgOyBxdWFudHB0cgorICAgIG1vdiAgICAgICAgIHJzaSwgcjExICAgICAgICAgICAgICAgIDsgaW5wdHIKKworJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUXzRYNF9TU0UyCisgICAgbW92ICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgb3IgICAgICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbHVtbkRDVAorCisgICAgbW92ZHFhICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBvciAgICAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwb3IgICAgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tMQorICAgIHBhY2tzc3diICAgIHhtbTAsIHhtbTAKKyAgICBwYWNrc3N3YiAgICB4bW0wLCB4bW0wCisgICAgbW92ZCAgICAgICAgZWF4LCB4bW0wCisgICAgdGVzdCAgICAgICAgcmF4LCByYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29sdW1uRENUCisKKyAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHBzbGx3ICAgICAgIHhtbTAsIFBBU1MxX0JJVFMKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgIHB1bnBja2x3ZCAgIHhtbTAsIHhtbTAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgcHVucGNraHdkICAgeG1tMywgeG1tMyAgICAgICAgOyB4bW0zPSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKworICAgIHBzaHVmZCAgICAgIHhtbTEsIHhtbTAsIDB4NTAgIDsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMDAgMDAgMDAgMDEgMDEgMDEgMDEpCisgICAgcHNodWZkICAgICAgeG1tMCwgeG1tMCwgMHhGQSAgOyB4bW0wPVtjb2wyIGNvbDNdPSgwMiAwMiAwMiAwMiAwMyAwMyAwMyAwMykKKyAgICBwc2h1ZmQgICAgICB4bW02LCB4bW0zLCAweDUwICA7IHhtbTY9W2NvbDQgY29sNV09KDA0IDA0IDA0IDA0IDA1IDA1IDA1IDA1KQorICAgIHBzaHVmZCAgICAgIHhtbTMsIHhtbTMsIDB4RkEgIDsgeG1tMz1bY29sNiBjb2w3XT0oMDYgMDYgMDYgMDYgMDcgMDcgMDcgMDcpCisKKyAgICBqbXAgICAgICAgICBuZWFyIC5jb2x1bW5fZW5kCislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBtb3ZkcWEgICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAKKyAgICBtb3ZkcWEgICAgICB4bW01LCB4bW0wCisgICAgcHVucGNrbHdkICAgeG1tNCwgeG1tMQorICAgIHB1bnBja2h3ZCAgIHhtbTUsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW00CisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNQorICAgIHBtYWRkd2QgICAgIHhtbTQsIFtyZWwgUFdfRjI1Nl9GMDg5XSAgIDsgeG1tND0odG1wMkwpCisgICAgcG1hZGR3ZCAgICAgeG1tNSwgW3JlbCBQV19GMjU2X0YwODldICAgOyB4bW01PSh0bXAySCkKKyAgICBwbWFkZHdkICAgICB4bW0wLCBbcmVsIFBXX0YxMDZfTUYyMTddICA7IHhtbTA9KHRtcDBMKQorICAgIHBtYWRkd2QgICAgIHhtbTEsIFtyZWwgUFdfRjEwNl9NRjIxN10gIDsgeG1tMT0odG1wMEgpCisKKyAgICBtb3ZkcWEgICAgICB4bW02LCB4bW0yCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMgorICAgIHB1bnBja2x3ZCAgIHhtbTYsIHhtbTMKKyAgICBwdW5wY2tod2QgICB4bW03LCB4bW0zCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTcKKyAgICBwbWFkZHdkICAgICB4bW02LCBbcmVsIFBXX01GMDYwX01GMDUwXSAgOyB4bW02PSh0bXAyTCkKKyAgICBwbWFkZHdkICAgICB4bW03LCBbcmVsIFBXX01GMDYwX01GMDUwXSAgOyB4bW03PSh0bXAySCkKKyAgICBwbWFkZHdkICAgICB4bW0yLCBbcmVsIFBXX0YxNDVfTUYwMjFdICAgOyB4bW0yPSh0bXAwTCkKKyAgICBwbWFkZHdkICAgICB4bW0zLCBbcmVsIFBXX0YxNDVfTUYwMjFdICAgOyB4bW0zPSh0bXAwSCkKKworICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgeG1tNj10bXAyTAorICAgIHBhZGRkICAgICAgIHhtbTcsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNz10bXAySAorICAgIHBhZGRkICAgICAgIHhtbTIsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMj10bXAwTAorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz10bXAwSAorCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT10bXAwTAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9dG1wMEgKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBtb3ZkcWEgICAgICB4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgbW92ZHFhICAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBwbXVsbHcgICAgICB4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIHBtdWxsdyAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTEKKyAgICBweG9yICAgICAgICB4bW0yLCB4bW0yCisgICAgcHVucGNrbHdkICAgeG1tMSwgeG1tNCAgICAgICAgICAgICAgIDsgeG1tMT10bXAwTAorICAgIHB1bnBja2h3ZCAgIHhtbTIsIHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9dG1wMEgKKyAgICBwc3JhZCAgICAgICB4bW0xLCAoMTYtQ09OU1RfQklUUy0xKSAgOyBwc3JhZCB4bW0xLDE2ICYgcHNsbGQgeG1tMSxDT05TVF9CSVRTKzEKKyAgICBwc3JhZCAgICAgICB4bW0yLCAoMTYtQ09OU1RfQklUUy0xKSAgOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTKzEKKworICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTUgICAgICAgICAgICAgIDsgeG1tNT1pbjI9ejIKKyAgICBwdW5wY2tsd2QgICB4bW01LCB4bW0wICAgICAgICAgICAgICA7IHhtbTA9aW42PXozCisgICAgcHVucGNraHdkICAgeG1tMywgeG1tMAorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfRjE4NF9NRjA3Nl0gIDsgeG1tNT10bXAyTAorICAgIHBtYWRkd2QgICAgIHhtbTMsIFtyZWwgUFdfRjE4NF9NRjA3Nl0gIDsgeG1tMz10bXAySAorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IHhtbTE9dG1wMTBMCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tMyAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwSAorICAgIHBzdWJkICAgICAgIHhtbTQsIHhtbTUgICAgICAgICAgICAgIDsgeG1tND10bXAxMkwKKyAgICBwc3ViZCAgICAgICB4bW0wLCB4bW0zICAgICAgICAgICAgICA7IHhtbTA9dG1wMTJICisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW0xLCB4bW02ICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTBMCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNyAgICAgICAgICAgICAgOyB4bW0yPWRhdGEwSAorICAgIHBzdWJkICAgICAgIHhtbTUsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNT1kYXRhM0wKKyAgICBwc3ViZCAgICAgICB4bW0zLCB4bW03ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTNICisKKyAgICBtb3ZkcWEgICAgICB4bW02LCBbcmVsIFBEX0RFU0NBTEVfUDFfNF0gIDsgeG1tNj1bcmVsIFBEX0RFU0NBTEVfUDFfNF0KKworICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTYKKyAgICBwYWRkZCAgICAgICB4bW0yLCB4bW02CisgICAgcHNyYWQgICAgICAgeG1tMSwgREVTQ0FMRV9QMV80CisgICAgcHNyYWQgICAgICAgeG1tMiwgREVTQ0FMRV9QMV80CisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tNgorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTYKKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AxXzQKKyAgICBwc3JhZCAgICAgICB4bW0zLCBERVNDQUxFX1AxXzQKKworICAgIHBhY2tzc2R3ICAgIHhtbTEsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgcGFja3NzZHcgICAgeG1tNSwgeG1tMyAgICAgICAgICAgICAgOyB4bW01PWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz10bXAwTAorICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNj10bXAwSAorCisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNAorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTAKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW03ICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTFMCisgICAgcGFkZGQgICAgICAgeG1tMCwgeG1tNiAgICAgICAgICAgICAgOyB4bW0wPWRhdGExSAorICAgIHBzdWJkICAgICAgIHhtbTIsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMkwKKyAgICBwc3ViZCAgICAgICB4bW0zLCB4bW02ICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTJICisKKyAgICBtb3ZkcWEgICAgICB4bW03LCBbcmVsIFBEX0RFU0NBTEVfUDFfNF0gIDsgeG1tNz1bcmVsIFBEX0RFU0NBTEVfUDFfNF0KKworICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTcKKyAgICBwYWRkZCAgICAgICB4bW0wLCB4bW03CisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMV80CisgICAgcHNyYWQgICAgICAgeG1tMCwgREVTQ0FMRV9QMV80CisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNworICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTcKKyAgICBwc3JhZCAgICAgICB4bW0yLCBERVNDQUxFX1AxXzQKKyAgICBwc3JhZCAgICAgICB4bW0zLCBERVNDQUxFX1AxXzQKKworICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTAgICAgICAgIDsgeG1tND1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgcGFja3NzZHcgICAgeG1tMiwgeG1tMyAgICAgICAgOyB4bW0yPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTEgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTEsIHhtbTQgICAgICAgIDsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tNCAgICAgICAgOyB4bW02PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICBtb3ZkcWEgICAgICB4bW03LCB4bW0yICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW01ICAgICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgIHB1bnBja2h3ZCAgIHhtbTcsIHhtbTUgICAgICAgIDsgeG1tNz0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKyAgICBtb3ZkcWEgICAgICB4bW0wLCB4bW0xICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICBwdW5wY2tsZHEgICB4bW0xLCB4bW0yICAgICAgICA7IHhtbTE9W2NvbDAgY29sMV09KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgIHB1bnBja2hkcSAgIHhtbTAsIHhtbTIgICAgICAgIDsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgbW92ZHFhICAgICAgeG1tMywgeG1tNiAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgcHVucGNrbGRxICAgeG1tNiwgeG1tNyAgICAgICAgOyB4bW02PVtjb2w0IGNvbDVdPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICBwdW5wY2toZHEgICB4bW0zLCB4bW03ICAgICAgICA7IHhtbTM9W2NvbDYgY29sN109KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorLmNvbHVtbl9lbmQ6CisKKyAgICA7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKworICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICByYXgsIFtvcmlnaW5hbF9yYnBdCisgICAgbW92ICAgICAgICAgcmRpLCByMTIgICAgICAgICAgICAgICAgOyAoSlNBTVBST1cgKikKKyAgICBtb3YgICAgICAgICBlYXgsIHIxM2QKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBweG9yICAgICAgICB4bW00LCB4bW00CisgICAgcHVucGNrbHdkICAgeG1tNCwgeG1tMSAgICAgICAgICAgICAgIDsgeG1tND10bXAwCisgICAgcHNyYWQgICAgICAgeG1tNCwgKDE2LUNPTlNUX0JJVFMtMSkgIDsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUysxCisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBwdW5wY2tod2QgICB4bW0xLCB4bW0wCisgICAgcHVucGNraHdkICAgeG1tNiwgeG1tMworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTEKKyAgICBtb3ZkcWEgICAgICB4bW0yLCB4bW02CisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19GMjU2X0YwODldICAgIDsgeG1tMT0odG1wMikKKyAgICBwbWFkZHdkICAgICB4bW02LCBbcmVsIFBXX01GMDYwX01GMDUwXSAgOyB4bW02PSh0bXAyKQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfRjEwNl9NRjIxN10gICA7IHhtbTU9KHRtcDApCisgICAgcG1hZGR3ZCAgICAgeG1tMiwgW3JlbCBQV19GMTQ1X01GMDIxXSAgIDsgeG1tMj0odG1wMCkKKworICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTEgICAgICAgICAgICAgIDsgeG1tNj10bXAyCisgICAgcGFkZGQgICAgICAgeG1tMiwgeG1tNSAgICAgICAgICAgICAgOyB4bW0yPXRtcDAKKworICAgIDsgLS0gRXZlbiBwYXJ0CisKKyAgICBwdW5wY2tsd2QgICB4bW0wLCB4bW0zCisgICAgcG1hZGR3ZCAgICAgeG1tMCwgW3JlbCBQV19GMTg0X01GMDc2XSAgOyB4bW0wPXRtcDIKKworICAgIG1vdmRxYSAgICAgIHhtbTcsIHhtbTQKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW0wICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICBwc3ViZCAgICAgICB4bW03LCB4bW0wICAgICAgICAgICAgICA7IHhtbTc9dG1wMTIKKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBtb3ZkcWEgICAgICB4bW0xLCBbcmVsIFBEX0RFU0NBTEVfUDJfNF0gIDsgeG1tMT1bcmVsIFBEX0RFU0NBTEVfUDJfNF0KKworICAgIG1vdmRxYSAgICAgIHhtbTUsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW03CisgICAgcGFkZGQgICAgICAgeG1tNCwgeG1tNiAgICAgICAgICAgICAgOyB4bW00PWRhdGEwPSgwMCAxMCAyMCAzMCkKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0yICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQorICAgIHBzdWJkICAgICAgIHhtbTUsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMz0oMDMgMTMgMjMgMzMpCisgICAgcHN1YmQgICAgICAgeG1tMywgeG1tMiAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyPSgwMiAxMiAyMiAzMikKKworICAgIHBhZGRkICAgICAgIHhtbTQsIHhtbTEKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0xCisgICAgcHNyYWQgICAgICAgeG1tNCwgREVTQ0FMRV9QMl80CisgICAgcHNyYWQgICAgICAgeG1tNywgREVTQ0FMRV9QMl80CisgICAgcGFkZGQgICAgICAgeG1tNSwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTMsIHhtbTEKKyAgICBwc3JhZCAgICAgICB4bW01LCBERVNDQUxFX1AyXzQKKyAgICBwc3JhZCAgICAgICB4bW0zLCBERVNDQUxFX1AyXzQKKworICAgIHBhY2tzc2R3ICAgIHhtbTQsIHhtbTMgICAgICAgICAgICAgIDsgeG1tND0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisgICAgcGFja3NzZHcgICAgeG1tNywgeG1tNSAgICAgICAgICAgICAgOyB4bW03PSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgIHB1bnBja2x3ZCAgIHhtbTQsIHhtbTcgICAgICAgICAgICAgIDsgeG1tND0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgcHVucGNraHdkICAgeG1tMCwgeG1tNyAgICAgICAgICAgICAgOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworICAgIG1vdmRxYSAgICAgIHhtbTYsIHhtbTQgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgIHB1bnBja2xkcSAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisgICAgcHVucGNraGRxICAgeG1tNiwgeG1tMCAgICAgICAgICAgICAgOyB4bW02PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKworICAgIHBhY2tzc3diICAgIHhtbTQsIHhtbTYgICAgICAgICAgICAgIDsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgLi4pCisgICAgcGFkZGIgICAgICAgeG1tNCwgW3JlbCBQQl9DRU5URVJKU0FNUF0KKworICAgIHBzaHVmZCAgICAgIHhtbTIsIHhtbTQsIDB4MzkgICAgICAgIDsgeG1tMj0oMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgLi4pCisgICAgcHNodWZkICAgICAgeG1tMSwgeG1tNCwgMHg0RSAgICAgICAgOyB4bW0xPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMyAwMCAuLikKKyAgICBwc2h1ZmQgICAgICB4bW0zLCB4bW00LCAweDkzICAgICAgICA7IHhtbTM9KDMwIDMxIDMyIDMzIDAwIDAxIDAyIDAzIDEwIC4uKQorCisgICAgbW92ICAgICAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3ZkICAgICAgICBYTU1fRFdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ZCAgICAgICAgWE1NX0RXT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgIG1vdmQgICAgICAgIFhNTV9EV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworICAgIHVuY29sbGVjdF9hcmdzIDQKKyAgICBtb3YgICAgICAgICByc3AsIHJicCAgICAgICAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgIHBvcCAgICAgICAgIHJzcCAgICAgICAgICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgIHBvcCAgICAgICAgIHJicAorICAgIHJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF8yeDJfc3NlMih2b2lkICpkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKzsgcjEwID0gdm9pZCAqZGN0X3RhYmxlCis7IHIxMSA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCis7IHIxM2QgPSBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2lkY3RfMngyX3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF8yeDJfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyA0CisgICAgcHVzaCAgICAgICAgcmJ4CisKKyAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworICAgIG1vdiAgICAgICAgIHJkeCwgcjEwICAgICAgICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICBtb3YgICAgICAgICByc2ksIHIxMSAgICAgICAgICAgICAgICA7IGlucHRyCisKKyAgICA7IHwgaW5wdXQ6ICAgICAgICAgICAgICAgICAgfCByZXN1bHQ6ICAgICAgICB8CisgICAgOyB8IDAwIDAxICoqIDAzICoqIDA1ICoqIDA3IHwgICAgICAgICAgICAgICAgfAorICAgIDsgfCAxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyB8ICAgICAgICAgICAgICAgIHwKKyAgICA7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisgICAgOyB8IDMwIDMxICoqIDMzICoqIDM1ICoqIDM3IHwgQTAgQTEgQTMgQTUgQTcgfAorICAgIDsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8IEIwIEIxIEIzIEI1IEI3IHwKKyAgICA7IHwgNTAgNTEgKiogNTMgKiogNTUgKiogNTcgfCAgICAgICAgICAgICAgICB8CisgICAgOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorICAgIDsgfCA3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NyB8ICAgICAgICAgICAgICAgIHwKKworICAgIDsgLS0gT2RkIHBhcnQKKworICAgIG1vdmRxYSAgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgIG1vdmRxYSAgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICBtb3ZkcWEgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgcG11bGx3ICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICBwbXVsbHcgICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisgICAgOyB4bW0wPSgxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyksIHhtbTE9KDMwIDMxICoqIDMzICoqIDM1ICoqIDM3KQorICAgIDsgeG1tMj0oNTAgNTEgKiogNTMgKiogNTUgKiogNTcpLCB4bW0zPSg3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NykKKworICAgIHBjbXBlcWQgICAgIHhtbTcsIHhtbTcKKyAgICBwc2xsZCAgICAgICB4bW03LCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTc9ezB4MDAwMCAweEZGRkYgMHgwMDAwIDB4RkZGRiAuLn0KKworICAgIG1vdmRxYSAgICAgIHhtbTQsIHhtbTAgICAgICAgICAgICAgIDsgeG1tND0oMTAgMTEgKiogMTMgKiogMTUgKiogMTcpCisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMiAgICAgICAgICAgICAgOyB4bW01PSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NykKKyAgICBwdW5wY2tsd2QgICB4bW00LCB4bW0xICAgICAgICAgICAgICA7IHhtbTQ9KDEwIDMwIDExIDMxICoqICoqIDEzIDMzKQorICAgIHB1bnBja2x3ZCAgIHhtbTUsIHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oNTAgNzAgNTEgNzEgKiogKiogNTMgNzMpCisgICAgcG1hZGR3ZCAgICAgeG1tNCwgW3JlbCBQV19GMzYyX01GMTI3XQorICAgIHBtYWRkd2QgICAgIHhtbTUsIFtyZWwgUFdfRjA4NV9NRjA3Ml0KKworICAgIHBzcmxkICAgICAgIHhtbTAsIFdPUkRfQklUICAgICAgICAgIDsgeG1tMD0oMTEgLS0gMTMgLS0gMTUgLS0gMTcgLS0pCisgICAgcGFuZCAgICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB4bW0xPSgtLSAzMSAtLSAzMyAtLSAzNSAtLSAzNykKKyAgICBwc3JsZCAgICAgICB4bW0yLCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTI9KDUxIC0tIDUzIC0tIDU1IC0tIDU3IC0tKQorICAgIHBhbmQgICAgICAgIHhtbTMsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMz0oLS0gNzEgLS0gNzMgLS0gNzUgLS0gNzcpCisgICAgcG9yICAgICAgICAgeG1tMCwgeG1tMSAgICAgICAgICAgICAgOyB4bW0wPSgxMSAzMSAxMyAzMyAxNSAzNSAxNyAzNykKKyAgICBwb3IgICAgICAgICB4bW0yLCB4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDUxIDcxIDUzIDczIDU1IDc1IDU3IDc3KQorICAgIHBtYWRkd2QgICAgIHhtbTAsIFtyZWwgUFdfRjM2Ml9NRjEyN10KKyAgICBwbWFkZHdkICAgICB4bW0yLCBbcmVsIFBXX0YwODVfTUYwNzJdCisKKyAgICBwYWRkZCAgICAgICB4bW00LCB4bW01ICAgICAgICAgICAgICA7IHhtbTQ9dG1wMFtjb2wwIGNvbDEgKioqKiBjb2wzXQorICAgIHBhZGRkICAgICAgIHhtbTAsIHhtbTIgICAgICAgICAgICAgIDsgeG1tMD10bXAwW2NvbDEgY29sMyBjb2w1IGNvbDddCisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgbW92ZHFhICAgICAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgIHBtdWxsdyAgICAgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKyAgICA7IHhtbTY9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQorCisgICAgbW92ZHFhICAgICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKyAgICBwc2xsZCAgICAgICB4bW02LCBXT1JEX0JJVCAgICAgICAgICA7IHhtbTY9KC0tIDAwIC0tICoqIC0tICoqIC0tICoqKQorICAgIHBhbmQgICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT0oLS0gMDEgLS0gMDMgLS0gMDUgLS0gMDcpCisgICAgcHNyYWQgICAgICAgeG1tNiwgKFdPUkRfQklULUNPTlNUX0JJVFMtMikgIDsgeG1tNj10bXAxMFtjb2wwICoqKiogKioqKiAqKioqXQorICAgIHBzcmFkICAgICAgIHhtbTEsIChXT1JEX0JJVC1DT05TVF9CSVRTLTIpICA7IHhtbTE9dG1wMTBbY29sMSBjb2wzIGNvbDUgY29sN10KKworICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKyAgICBtb3ZkcWEgICAgICB4bW0zLCB4bW02CisgICAgbW92ZHFhICAgICAgeG1tNSwgeG1tMQorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTQgICAgICA7IHhtbTY9ZGF0YTBbY29sMCAqKioqICoqKiogKioqKl09KEEwICoqICoqICoqKQorICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTAgICAgICA7IHhtbTE9ZGF0YTBbY29sMSBjb2wzIGNvbDUgY29sN109KEExIEEzIEE1IEE3KQorICAgIHBzdWJkICAgICAgIHhtbTMsIHhtbTQgICAgICA7IHhtbTM9ZGF0YTFbY29sMCAqKioqICoqKiogKioqKl09KEIwICoqICoqICoqKQorICAgIHBzdWJkICAgICAgIHhtbTUsIHhtbTAgICAgICA7IHhtbTU9ZGF0YTFbY29sMSBjb2wzIGNvbDUgY29sN109KEIxIEIzIEI1IEI3KQorCisgICAgbW92ZHFhICAgICAgeG1tMiwgW3JlbCBQRF9ERVNDQUxFX1AxXzJdICA7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AxXzJdCisKKyAgICBwdW5wY2tsZHEgICB4bW02LCB4bW0zICAgICAgICAgICAgICA7IHhtbTY9KEEwIEIwICoqICoqKQorCisgICAgbW92ZHFhICAgICAgeG1tNywgeG1tMQorICAgIHB1bnBja2xxZHEgIHhtbTEsIHhtbTUgICAgICAgICAgICAgIDsgeG1tMT0oQTEgQTMgQjEgQjMpCisgICAgcHVucGNraHFkcSAgeG1tNywgeG1tNSAgICAgICAgICAgICAgOyB4bW03PShBNSBBNyBCNSBCNykKKworICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTIKKyAgICBwc3JhZCAgICAgICB4bW02LCBERVNDQUxFX1AxXzIKKworICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTIKKyAgICBwYWRkZCAgICAgICB4bW03LCB4bW0yCisgICAgcHNyYWQgICAgICAgeG1tMSwgREVTQ0FMRV9QMV8yCisgICAgcHNyYWQgICAgICAgeG1tNywgREVTQ0FMRV9QMV8yCisKKyAgICA7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKworICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKyAgICBtb3YgICAgICAgICByZGksIHIxMiAgICAgICAgICAgICAgICA7IChKU0FNUFJPVyAqKQorICAgIG1vdiAgICAgICAgIGVheCwgcjEzZAorCisgICAgOyB8IGlucHV0OnwgcmVzdWx0OnwKKyAgICA7IHwgQTAgQjAgfCAgICAgICAgfAorICAgIDsgfCBBMSBCMSB8IEMwIEMxICB8CisgICAgOyB8IEEzIEIzIHwgRDAgRDEgIHwKKyAgICA7IHwgQTUgQjUgfCAgICAgICAgfAorICAgIDsgfCBBNyBCNyB8ICAgICAgICB8CisKKyAgICA7IC0tIE9kZCBwYXJ0CisKKyAgICBwYWNrc3NkdyAgICB4bW0xLCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9KEExIEEzIEIxIEIzIEExIEEzIEIxIEIzKQorICAgIHBhY2tzc2R3ICAgIHhtbTcsIHhtbTcgICAgICAgICAgICAgIDsgeG1tNz0oQTUgQTcgQjUgQjcgQTUgQTcgQjUgQjcpCisgICAgcG1hZGR3ZCAgICAgeG1tMSwgW3JlbCBQV19GMzYyX01GMTI3XQorICAgIHBtYWRkd2QgICAgIHhtbTcsIFtyZWwgUFdfRjA4NV9NRjA3Ml0KKworICAgIHBhZGRkICAgICAgIHhtbTEsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMT10bXAwW3JvdzAgcm93MSByb3cwIHJvdzFdCisKKyAgICA7IC0tIEV2ZW4gcGFydAorCisgICAgcHNsbGQgICAgICAgeG1tNiwgKENPTlNUX0JJVFMrMikgICAgOyB4bW02PXRtcDEwW3JvdzAgcm93MSAqKioqICoqKipdCisKKyAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisgICAgbW92ZHFhICAgICAgeG1tNCwgeG1tNgorICAgIHBhZGRkICAgICAgIHhtbTYsIHhtbTEgICAgIDsgeG1tNj1kYXRhMFtyb3cwIHJvdzEgKioqKiAqKioqXT0oQzAgQzEgKiogKiopCisgICAgcHN1YmQgICAgICAgeG1tNCwgeG1tMSAgICAgOyB4bW00PWRhdGExW3JvdzAgcm93MSAqKioqICoqKipdPShEMCBEMSAqKiAqKikKKworICAgIHB1bnBja2xkcSAgIHhtbTYsIHhtbTQgICAgIDsgeG1tNj0oQzAgRDAgQzEgRDEpCisKKyAgICBwYWRkZCAgICAgICB4bW02LCBbcmVsIFBEX0RFU0NBTEVfUDJfMl0KKyAgICBwc3JhZCAgICAgICB4bW02LCBERVNDQUxFX1AyXzIKKworICAgIHBhY2tzc2R3ICAgIHhtbTYsIHhtbTYgICAgICAgICAgICAgIDsgeG1tNj0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEpCisgICAgcGFja3Nzd2IgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSAuLikKKyAgICBwYWRkYiAgICAgICB4bW02LCBbcmVsIFBCX0NFTlRFUkpTQU1QXQorCisgICAgcGV4dHJ3ICAgICAgZWJ4LCB4bW02LCAweDAwICAgICAgICAgOyBlYng9KEMwIEQwIC0tIC0tKQorICAgIHBleHRydyAgICAgIGVjeCwgeG1tNiwgMHgwMSAgICAgICAgIDsgZWN4PShDMSBEMSAtLSAtLSkKKworICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgbW92ICAgICAgICAgV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIGJ4CisgICAgbW92ICAgICAgICAgV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIGN4CisKKyAgICBwb3AgICAgICAgICByYngKKyAgICB1bmNvbGxlY3RfYXJncyA0CisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pxdWFudGYtc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qcXVhbnRmLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MDBlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qcXVhbnRmLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTU2IEBACis7Cis7IGpxdWFudGYuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uICg2NC1iaXQgU1NFICYgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKndvcmtzcGFjZSk7Cis7CisKKzsgcjEwID0gSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorOyByMTFkID0gSkRJTUVOU0lPTiBzdGFydF9jb2wKKzsgcjEyID0gRkFTVF9GTE9BVCAqd29ya3NwYWNlCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKQorCitFWFROKGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AKKyAgICBjb2xsZWN0X2FyZ3MgMworICAgIHB1c2ggICAgICAgIHJieAorCisgICAgcGNtcGVxdyAgICAgeG1tNywgeG1tNworICAgIHBzbGx3ICAgICAgIHhtbTcsIDcKKyAgICBwYWNrc3N3YiAgICB4bW03LCB4bW03ICAgICAgICAgICAgICA7IHhtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorCisgICAgbW92ICAgICAgICAgcnNpLCByMTAKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMWQKKyAgICBtb3YgICAgICAgICByZGksIHIxMgorICAgIG1vdiAgICAgICAgIHJjeCwgRENUU0laRS8yCisuY29udmxvb3A6CisgICAgbW92ICAgICAgICAgcmJ4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIHJkeCwgSlNBTVBST1cgW3JzaSsxKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKworICAgIG1vdnEgICAgICAgIHhtbTAsIFhNTV9NTVdPUkQgW3JieCtyYXgqU0laRU9GX0pTQU1QTEVdCisgICAgbW92cSAgICAgICAgeG1tMSwgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0KKworICAgIHBzdWJiICAgICAgIHhtbTAsIHhtbTcgICAgICAgICAgICAgIDsgeG1tMD0oMDEyMzQ1NjcpCisgICAgcHN1YmIgICAgICAgeG1tMSwgeG1tNyAgICAgICAgICAgICAgOyB4bW0xPSg4OUFCQ0RFRikKKworICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTAgICAgICAgICAgICAgIDsgeG1tMD0oKjAqMSoyKjMqNCo1KjYqNykKKyAgICBwdW5wY2tsYncgICB4bW0xLCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9KCo4KjkqQSpCKkMqRCpFKkYpCisKKyAgICBwdW5wY2tsd2QgICB4bW0yLCB4bW0wICAgICAgICAgICAgICA7IHhtbTI9KCoqKjAqKioxKioqMioqKjMpCisgICAgcHVucGNraHdkICAgeG1tMCwgeG1tMCAgICAgICAgICAgICAgOyB4bW0wPSgqKio0KioqNSoqKjYqKio3KQorICAgIHB1bnBja2x3ZCAgIHhtbTMsIHhtbTEgICAgICAgICAgICAgIDsgeG1tMz0oKioqOCoqKjkqKipBKioqQikKKyAgICBwdW5wY2tod2QgICB4bW0xLCB4bW0xICAgICAgICAgICAgICA7IHhtbTE9KCoqKkMqKipEKioqRSoqKkYpCisKKyAgICBwc3JhZCAgICAgICB4bW0yLCAoRFdPUkRfQklULUJZVEVfQklUKSAgOyB4bW0yPSgwMTIzKQorICAgIHBzcmFkICAgICAgIHhtbTAsIChEV09SRF9CSVQtQllURV9CSVQpICA7IHhtbTA9KDQ1NjcpCisgICAgY3Z0ZHEycHMgICAgeG1tMiwgeG1tMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oMDEyMykKKyAgICBjdnRkcTJwcyAgICB4bW0wLCB4bW0wICAgICAgICAgICAgICAgICAgOyB4bW0wPSg0NTY3KQorICAgIHBzcmFkICAgICAgIHhtbTMsIChEV09SRF9CSVQtQllURV9CSVQpICA7IHhtbTM9KDg5QUIpCisgICAgcHNyYWQgICAgICAgeG1tMSwgKERXT1JEX0JJVC1CWVRFX0JJVCkgIDsgeG1tMT0oQ0RFRikKKyAgICBjdnRkcTJwcyAgICB4bW0zLCB4bW0zICAgICAgICAgICAgICAgICAgOyB4bW0zPSg4OUFCKQorICAgIGN2dGRxMnBzICAgIHhtbTEsIHhtbTEgICAgICAgICAgICAgICAgICA7IHhtbTE9KENERUYpCisKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICBtb3ZhcHMgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVworICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICBkZWMgICAgICAgICByY3gKKyAgICBqbnogICAgICAgICBzaG9ydCAuY29udmxvb3AKKworICAgIHBvcCAgICAgICAgIHJieAorICAgIHVuY29sbGVjdF9hcmdzIDMKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKTsKKzsKKworOyByMTAgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMSA9IEZBU1RfRkxPQVQgKmRpdmlzb3JzCis7IHIxMiA9IEZBU1RfRkxPQVQgKndvcmtzcGFjZQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgY29sbGVjdF9hcmdzIDMKKworICAgIG1vdiAgICAgICAgIHJzaSwgcjEyCisgICAgbW92ICAgICAgICAgcmR4LCByMTEKKyAgICBtb3YgICAgICAgICByZGksIHIxMAorICAgIG1vdiAgICAgICAgIHJheCwgRENUU0laRTIvMTYKKy5xdWFudGxvb3A6CisgICAgbW92YXBzICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbW92YXBzICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgbXVscHMgICAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKyAgICBjdnRwczJkcSAgICB4bW0wLCB4bW0wCisgICAgY3Z0cHMyZHEgICAgeG1tMSwgeG1tMQorICAgIGN2dHBzMmRxICAgIHhtbTIsIHhtbTIKKyAgICBjdnRwczJkcSAgICB4bW0zLCB4bW0zCisKKyAgICBwYWNrc3NkdyAgICB4bW0wLCB4bW0xCisgICAgcGFja3NzZHcgICAgeG1tMiwgeG1tMworCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAorICAgIG1vdmRxYSAgICAgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZGksU0laRU9GX0pDT0VGKV0sIHhtbTIKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKKyAgICBkZWMgICAgICAgICByYXgKKyAgICBqbnogICAgICAgICBzaG9ydCAucXVhbnRsb29wCisKKyAgICB1bmNvbGxlY3RfYXJncyAzCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pxdWFudGktYXZ4Mi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qcXVhbnRpLWF2eDIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qcXVhbnRpLWF2eDIuYXNtCkBAIC0wLDAgKzEsMTY0IEBACis7Cis7IGpxdWFudGkuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uICg2NC1iaXQgQVZYMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIDIwMTgsIEQuIFIuIENvbW1hbmRlci4KKzsgQ29weXJpZ2h0IChDKSAyMDE2LCBNYXR0aGlldSBEYXJib2lzLgorOworOyBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNFQ1RJT04gICAgIFNFR19URVhUCisgICAgQklUUyAgICAgICAgNjQKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX2F2eDIoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCis7ICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKTsKKzsKKworOyByMTAgPSBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCis7IHIxMWQgPSBKRElNRU5TSU9OIHN0YXJ0X2NvbAorOyByMTIgPSBEQ1RFTEVNICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX2NvbnZzYW1wX2F2eDIpCisKK0VYVE4oanNpbWRfY29udnNhbXBfYXZ4Mik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyAzCisKKyAgICBtb3YgICAgICAgICBlYXgsIHIxMWQKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3IxMCswKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyMTArMSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92cSAgICAgICAgeG1tMCwgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0KKyAgICBwaW5zcnEgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtyZGkrcmF4KlNJWkVPRl9KU0FNUExFXSwgMQorCisgICAgbW92ICAgICAgICAgcnNpLCBKU0FNUFJPVyBbcjEwKzIqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdiAgICAgICAgIHJkaSwgSlNBTVBST1cgW3IxMCszKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3ZxICAgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXQorICAgIHBpbnNycSAgICAgIHhtbTEsIFhNTV9NTVdPUkQgW3JkaStyYXgqU0laRU9GX0pTQU1QTEVdLCAxCisKKyAgICBtb3YgICAgICAgICByc2ksIEpTQU1QUk9XIFtyMTArNCpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92ICAgICAgICAgcmRpLCBKU0FNUFJPVyBbcjEwKzUqU0laRU9GX0pTQU1QUk9XXSAgOyAoSlNBTVBMRSAqKQorICAgIG1vdnEgICAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdCisgICAgcGluc3JxICAgICAgeG1tMiwgWE1NX01NV09SRCBbcmRpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIDEKKworICAgIG1vdiAgICAgICAgIHJzaSwgSlNBTVBST1cgW3IxMCs2KlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICByZGksIEpTQU1QUk9XIFtyMTArNypTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisgICAgbW92cSAgICAgICAgeG1tMywgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0KKyAgICBwaW5zcnEgICAgICB4bW0zLCBYTU1fTU1XT1JEIFtyZGkrcmF4KlNJWkVPRl9KU0FNUExFXSwgMQorCisgICAgdnBtb3Z6eGJ3ICAgeW1tMCwgeG1tMCAgICAgICAgICAgICAgOyB5bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICB2cG1vdnp4YncgICB5bW0xLCB4bW0xICAgICAgICAgICAgICA7IHltbTE9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgIHZwbW92enhidyAgIHltbTIsIHhtbTIgICAgICAgICAgICAgIDsgeW1tMj0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgdnBtb3Z6eGJ3ICAgeW1tMywgeG1tMyAgICAgICAgICAgICAgOyB5bW0zPSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworICAgIHZwY21wZXF3ICAgIHltbTcsIHltbTcsIHltbTcKKyAgICB2cHNsbHcgICAgICB5bW03LCB5bW03LCA3ICAgICAgICAgICA7IHltbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKworICAgIHZwYWRkdyAgICAgIHltbTAsIHltbTAsIHltbTcKKyAgICB2cGFkZHcgICAgICB5bW0xLCB5bW0xLCB5bW03CisgICAgdnBhZGR3ICAgICAgeW1tMiwgeW1tMiwgeW1tNworICAgIHZwYWRkdyAgICAgIHltbTMsIHltbTMsIHltbTcKKworICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW1lNTUJMT0NLKDAsMCxyMTIsU0laRU9GX0RDVEVMRU0pXSwgeW1tMAorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW1lNTUJMT0NLKDIsMCxyMTIsU0laRU9GX0RDVEVMRU0pXSwgeW1tMQorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW1lNTUJMT0NLKDQsMCxyMTIsU0laRU9GX0RDVEVMRU0pXSwgeW1tMgorICAgIHZtb3ZkcXUgICAgIFlNTVdPUkQgW1lNTUJMT0NLKDYsMCxyMTIsU0laRU9GX0RDVEVMRU0pXSwgeW1tMworCisgICAgdnplcm91cHBlcgorICAgIHVuY29sbGVjdF9hcmdzIDMKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCis7ICAgIkhvdyB0byBvcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gZmFtaWx5IG9mIG1pY3JvcHJvY2Vzc29ycyIKKzsgICAoaHR0cDovL3d3dy5hZ25lci5vcmcvYXNzZW0vKS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3F1YW50aXplX2F2eDIoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsCis7ICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBSRUNJUFJPQ0FMKG0sIG4sIGIpIFwKKyAgWU1NQkxPQ0soRENUU0laRSAqIDAgKyAobSksIChuKSwgKGIpLCBTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgQ09SUkVDVElPTihtLCBuLCBiKSBcCisgIFlNTUJMT0NLKERDVFNJWkUgKiAxICsgKG0pLCAobiksIChiKSwgU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIFNDQUxFKG0sIG4sIGIpIFwKKyAgWU1NQkxPQ0soRENUU0laRSAqIDIgKyAobSksIChuKSwgKGIpLCBTSVpFT0ZfRENURUxFTSkKKworOyByMTAgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMSA9IERDVEVMRU0gKmRpdmlzb3JzCis7IHIxMiA9IERDVEVMRU0gKndvcmtzcGFjZQorCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanNpbWRfcXVhbnRpemVfYXZ4MikKKworRVhUTihqc2ltZF9xdWFudGl6ZV9hdngyKToKKyAgICBwdXNoICAgICAgICByYnAKKyAgICBtb3YgICAgICAgICByYXgsIHJzcAorICAgIG1vdiAgICAgICAgIHJicCwgcnNwCisgICAgY29sbGVjdF9hcmdzIDMKKworICAgIHZtb3ZkcXUgICAgIHltbTQsIFtZTU1CTE9DSygwLDAscjEyLFNJWkVPRl9EQ1RFTEVNKV0KKyAgICB2bW92ZHF1ICAgICB5bW01LCBbWU1NQkxPQ0soMiwwLHIxMixTSVpFT0ZfRENURUxFTSldCisgICAgdm1vdmRxdSAgICAgeW1tNiwgW1lNTUJMT0NLKDQsMCxyMTIsU0laRU9GX0RDVEVMRU0pXQorICAgIHZtb3ZkcXUgICAgIHltbTcsIFtZTU1CTE9DSyg2LDAscjEyLFNJWkVPRl9EQ1RFTEVNKV0KKyAgICB2cGFic3cgICAgICB5bW0wLCB5bW00CisgICAgdnBhYnN3ICAgICAgeW1tMSwgeW1tNQorICAgIHZwYWJzdyAgICAgIHltbTIsIHltbTYKKyAgICB2cGFic3cgICAgICB5bW0zLCB5bW03CisKKyAgICB2cGFkZHcgICAgICB5bW0wLCBZTU1XT1JEIFtDT1JSRUNUSU9OKDAsMCxyMTEpXSAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKyAgICB2cGFkZHcgICAgICB5bW0xLCBZTU1XT1JEIFtDT1JSRUNUSU9OKDIsMCxyMTEpXQorICAgIHZwYWRkdyAgICAgIHltbTIsIFlNTVdPUkQgW0NPUlJFQ1RJT04oNCwwLHIxMSldCisgICAgdnBhZGR3ICAgICAgeW1tMywgWU1NV09SRCBbQ09SUkVDVElPTig2LDAscjExKV0KKyAgICB2cG11bGh1dyAgICB5bW0wLCBZTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMCxyMTEpXSAgOyByZWNpcHJvY2FsCisgICAgdnBtdWxodXcgICAgeW1tMSwgWU1NV09SRCBbUkVDSVBST0NBTCgyLDAscjExKV0KKyAgICB2cG11bGh1dyAgICB5bW0yLCBZTU1XT1JEIFtSRUNJUFJPQ0FMKDQsMCxyMTEpXQorICAgIHZwbXVsaHV3ICAgIHltbTMsIFlNTVdPUkQgW1JFQ0lQUk9DQUwoNiwwLHIxMSldCisgICAgdnBtdWxodXcgICAgeW1tMCwgWU1NV09SRCBbU0NBTEUoMCwwLHIxMSldICAgICAgIDsgc2NhbGUKKyAgICB2cG11bGh1dyAgICB5bW0xLCBZTU1XT1JEIFtTQ0FMRSgyLDAscjExKV0KKyAgICB2cG11bGh1dyAgICB5bW0yLCBZTU1XT1JEIFtTQ0FMRSg0LDAscjExKV0KKyAgICB2cG11bGh1dyAgICB5bW0zLCBZTU1XT1JEIFtTQ0FMRSg2LDAscjExKV0KKworICAgIHZwc2lnbncgICAgIHltbTAsIHltbTAsIHltbTQKKyAgICB2cHNpZ253ICAgICB5bW0xLCB5bW0xLCB5bW01CisgICAgdnBzaWdudyAgICAgeW1tMiwgeW1tMiwgeW1tNgorICAgIHZwc2lnbncgICAgIHltbTMsIHltbTMsIHltbTcKKworICAgIHZtb3ZkcXUgICAgIFtZTU1CTE9DSygwLDAscjEwLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTAKKyAgICB2bW92ZHF1ICAgICBbWU1NQkxPQ0soMiwwLHIxMCxTSVpFT0ZfRENURUxFTSldLCB5bW0xCisgICAgdm1vdmRxdSAgICAgW1lNTUJMT0NLKDQsMCxyMTAsU0laRU9GX0RDVEVMRU0pXSwgeW1tMgorICAgIHZtb3ZkcXUgICAgIFtZTU1CTE9DSyg2LDAscjEwLFNJWkVPRl9EQ1RFTEVNKV0sIHltbTMKKworICAgIHZ6ZXJvdXBwZXIKKyAgICB1bmNvbGxlY3RfYXJncyAzCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisgICAgYWxpZ24gICAgICAgMzIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pxdWFudGktc3NlMi5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qcXVhbnRpLXNzZTIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjcyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qcXVhbnRpLXNzZTIuYXNtCkBAIC0wLDAgKzEsMTg5IEBACis7Cis7IGpxdWFudGkuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYsIEQuIFIuIENvbW1hbmRlci4KKzsKKzsgQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTRUNUSU9OICAgICBTRUdfVEVYVAorICAgIEJJVFMgICAgICAgIDY0Cis7Cis7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9jb252c2FtcF9zc2UyKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSk7Cis7CisKKzsgcjEwID0gSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorOyByMTFkID0gSkRJTUVOU0lPTiBzdGFydF9jb2wKKzsgcjEyID0gRENURUxFTSAqd29ya3NwYWNlCisKKyAgICBhbGlnbiAgICAgICAzMgorICAgIEdMT0JBTF9GVU5DVElPTihqc2ltZF9jb252c2FtcF9zc2UyKQorCitFWFROKGpzaW1kX2NvbnZzYW1wX3NzZTIpOgorICAgIHB1c2ggICAgICAgIHJicAorICAgIG1vdiAgICAgICAgIHJheCwgcnNwCisgICAgbW92ICAgICAgICAgcmJwLCByc3AKKyAgICBjb2xsZWN0X2FyZ3MgMworICAgIHB1c2ggICAgICAgIHJieAorCisgICAgcHhvciAgICAgICAgeG1tNiwgeG1tNiAgICAgICAgICAgICAgOyB4bW02PShhbGwgMCdzKQorICAgIHBjbXBlcXcgICAgIHhtbTcsIHhtbTcKKyAgICBwc2xsdyAgICAgICB4bW03LCA3ICAgICAgICAgICAgICAgICA7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKworICAgIG1vdiAgICAgICAgIHJzaSwgcjEwCisgICAgbW92ICAgICAgICAgZWF4LCByMTFkCisgICAgbW92ICAgICAgICAgcmRpLCByMTIKKyAgICBtb3YgICAgICAgICByY3gsIERDVFNJWkUvNAorLmNvbnZsb29wOgorICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisKKyAgICBtb3ZxICAgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSAgOyB4bW0wPSgwMTIzNDU2NykKKyAgICBtb3ZxICAgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSAgOyB4bW0xPSg4OUFCQ0RFRikKKworICAgIG1vdiAgICAgICAgIHJieCwgSlNBTVBST1cgW3JzaSsyKlNJWkVPRl9KU0FNUFJPV10gIDsgKEpTQU1QTEUgKikKKyAgICBtb3YgICAgICAgICByZHgsIEpTQU1QUk9XIFtyc2krMypTSVpFT0ZfSlNBTVBST1ddICA7IChKU0FNUExFICopCisKKyAgICBtb3ZxICAgICAgICB4bW0yLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSAgOyB4bW0yPShHSElKS0xNTikKKyAgICBtb3ZxICAgICAgICB4bW0zLCBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSAgOyB4bW0zPShPUFFSU1RVVikKKworICAgIHB1bnBja2xidyAgIHhtbTAsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMD0oMDEyMzQ1NjcpCisgICAgcHVucGNrbGJ3ICAgeG1tMSwgeG1tNiAgICAgICAgICAgICAgOyB4bW0xPSg4OUFCQ0RFRikKKyAgICBwYWRkdyAgICAgICB4bW0wLCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMSwgeG1tNworICAgIHB1bnBja2xidyAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgeG1tMj0oR0hJSktMTU4pCisgICAgcHVucGNrbGJ3ICAgeG1tMywgeG1tNiAgICAgICAgICAgICAgOyB4bW0zPShPUFFSU1RVVikKKyAgICBwYWRkdyAgICAgICB4bW0yLCB4bW03CisgICAgcGFkZHcgICAgICAgeG1tMywgeG1tNworCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0wCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisgICAgbW92ZHFhICAgICAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisKKyAgICBhZGQgICAgICAgICByc2ksIGJ5dGUgNCpTSVpFT0ZfSlNBTVBST1cKKyAgICBhZGQgICAgICAgICByZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisgICAgZGVjICAgICAgICAgcmN4CisgICAgam56ICAgICAgICAgc2hvcnQgLmNvbnZsb29wCisKKyAgICBwb3AgICAgICAgICByYngKKyAgICB1bmNvbGxlY3RfYXJncyAzCisgICAgcG9wICAgICAgICAgcmJwCisgICAgcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gYW4gYWxnb3JpdGhtIGRlc2NyaWJlZCBpbgorOyAgICJIb3cgdG8gb3B0aW1pemUgZm9yIHRoZSBQZW50aXVtIGZhbWlseSBvZiBtaWNyb3Byb2Nlc3NvcnMiCis7ICAgKGh0dHA6Ly93d3cuYWduZXIub3JnL2Fzc2VtLykuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9xdWFudGl6ZV9zc2UyKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKmRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKndvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgUkVDSVBST0NBTChtLCBuLCBiKSBcCisgIFhNTUJMT0NLKERDVFNJWkUgKiAwICsgKG0pLCAobiksIChiKSwgU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIENPUlJFQ1RJT04obSwgbiwgYikgXAorICBYTU1CTE9DSyhEQ1RTSVpFICogMSArIChtKSwgKG4pLCAoYiksIFNJWkVPRl9EQ1RFTEVNKQorJWRlZmluZSBTQ0FMRShtLCBuLCBiKSBcCisgIFhNTUJMT0NLKERDVFNJWkUgKiAyICsgKG0pLCAobiksIChiKSwgU0laRU9GX0RDVEVMRU0pCisKKzsgcjEwID0gSkNPRUZQVFIgY29lZl9ibG9jaworOyByMTEgPSBEQ1RFTEVNICpkaXZpc29ycworOyByMTIgPSBEQ1RFTEVNICp3b3Jrc3BhY2UKKworICAgIGFsaWduICAgICAgIDMyCisgICAgR0xPQkFMX0ZVTkNUSU9OKGpzaW1kX3F1YW50aXplX3NzZTIpCisKK0VYVE4oanNpbWRfcXVhbnRpemVfc3NlMik6CisgICAgcHVzaCAgICAgICAgcmJwCisgICAgbW92ICAgICAgICAgcmF4LCByc3AKKyAgICBtb3YgICAgICAgICByYnAsIHJzcAorICAgIGNvbGxlY3RfYXJncyAzCisKKyAgICBtb3YgICAgICAgICByc2ksIHIxMgorICAgIG1vdiAgICAgICAgIHJkeCwgcjExCisgICAgbW92ICAgICAgICAgcmRpLCByMTAKKyAgICBtb3YgICAgICAgICByYXgsIERDVFNJWkUyLzMyCisucXVhbnRsb29wOgorICAgIG1vdmRxYSAgICAgIHhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgIG1vdmRxYSAgICAgIHhtbTAsIHhtbTQKKyAgICBtb3ZkcWEgICAgICB4bW0xLCB4bW01CisgICAgbW92ZHFhICAgICAgeG1tMiwgeG1tNgorICAgIG1vdmRxYSAgICAgIHhtbTMsIHhtbTcKKyAgICBwc3JhdyAgICAgICB4bW00LCAoV09SRF9CSVQtMSkKKyAgICBwc3JhdyAgICAgICB4bW01LCAoV09SRF9CSVQtMSkKKyAgICBwc3JhdyAgICAgICB4bW02LCAoV09SRF9CSVQtMSkKKyAgICBwc3JhdyAgICAgICB4bW03LCAoV09SRF9CSVQtMSkKKyAgICBweG9yICAgICAgICB4bW0wLCB4bW00CisgICAgcHhvciAgICAgICAgeG1tMSwgeG1tNQorICAgIHB4b3IgICAgICAgIHhtbTIsIHhtbTYKKyAgICBweG9yICAgICAgICB4bW0zLCB4bW03CisgICAgcHN1YncgICAgICAgeG1tMCwgeG1tNCAgICAgICAgICAgICAgOyBpZiAoeG1tMCA8IDApIHhtbTAgPSAteG1tMDsKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01ICAgICAgICAgICAgICA7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOworICAgIHBzdWJ3ICAgICAgIHhtbTIsIHhtbTYgICAgICAgICAgICAgIDsgaWYgKHhtbTIgPCAwKSB4bW0yID0gLXhtbTI7CisgICAgcHN1YncgICAgICAgeG1tMywgeG1tNyAgICAgICAgICAgICAgOyBpZiAoeG1tMyA8IDApIHhtbTMgPSAteG1tMzsKKworICAgIHBhZGR3ICAgICAgIHhtbTAsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLHJkeCldICA7IGNvcnJlY3Rpb24gKyByb3VuZGZhY3RvcgorICAgIHBhZGR3ICAgICAgIHhtbTEsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMSwwLHJkeCldCisgICAgcGFkZHcgICAgICAgeG1tMiwgWE1NV09SRCBbQ09SUkVDVElPTigyLDAscmR4KV0KKyAgICBwYWRkdyAgICAgICB4bW0zLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDMsMCxyZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTAsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLHJkeCldICA7IHJlY2lwcm9jYWwKKyAgICBwbXVsaHV3ICAgICB4bW0xLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDEsMCxyZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTIsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMiwwLHJkeCldCisgICAgcG11bGh1dyAgICAgeG1tMywgWE1NV09SRCBbUkVDSVBST0NBTCgzLDAscmR4KV0KKyAgICBwbXVsaHV3ICAgICB4bW0wLCBYTU1XT1JEIFtTQ0FMRSgwLDAscmR4KV0gICAgICAgOyBzY2FsZQorICAgIHBtdWxodXcgICAgIHhtbTEsIFhNTVdPUkQgW1NDQUxFKDEsMCxyZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTIsIFhNTVdPUkQgW1NDQUxFKDIsMCxyZHgpXQorICAgIHBtdWxodXcgICAgIHhtbTMsIFhNTVdPUkQgW1NDQUxFKDMsMCxyZHgpXQorCisgICAgcHhvciAgICAgICAgeG1tMCwgeG1tNAorICAgIHB4b3IgICAgICAgIHhtbTEsIHhtbTUKKyAgICBweG9yICAgICAgICB4bW0yLCB4bW02CisgICAgcHhvciAgICAgICAgeG1tMywgeG1tNworICAgIHBzdWJ3ICAgICAgIHhtbTAsIHhtbTQKKyAgICBwc3VidyAgICAgICB4bW0xLCB4bW01CisgICAgcHN1YncgICAgICAgeG1tMiwgeG1tNgorICAgIHBzdWJ3ICAgICAgIHhtbTMsIHhtbTcKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKyAgICBtb3ZkcWEgICAgICBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKworICAgIGFkZCAgICAgICAgIHJzaSwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQorICAgIGFkZCAgICAgICAgIHJkeCwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQorICAgIGFkZCAgICAgICAgIHJkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKKyAgICBkZWMgICAgICAgICByYXgKKyAgICBqbnogICAgICAgICBuZWFyIC5xdWFudGxvb3AKKworICAgIHVuY29sbGVjdF9hcmdzIDMKKyAgICBwb3AgICAgICAgICByYnAKKyAgICByZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKyAgICBhbGlnbiAgICAgICAzMgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc2ltZC94ODZfNjQvanNpbWQuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pzaW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwZDgwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pzaW1kLmMKQEAgLTAsMCArMSwxMDc4IEBACisvKgorICoganNpbWRfeDg2XzY0LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgMjAxNCwgMjAxNiwgMjAxOCwgRC4gUi4gQ29tbWFuZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYsIDIwMTgsIE1hdHRoaWV1IERhcmJvaXMuCisgKgorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgIm5vcm1hbCIgcG9ydGlvbnMKKyAqIG9mIHRoZSBsaWJyYXJ5IGFuZCB0aGUgU0lNRCBpbXBsZW1lbnRhdGlvbnMgd2hlbiBydW5uaW5nIG9uIGEKKyAqIDY0LWJpdCB4ODYgYXJjaGl0ZWN0dXJlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICIuLi8uLi9qaW5jbHVkZS5oIgorI2luY2x1ZGUgIi4uLy4uL2pwZWdsaWIuaCIKKyNpbmNsdWRlICIuLi8uLi9qc2ltZC5oIgorI2luY2x1ZGUgIi4uLy4uL2pkY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9qc2ltZGRjdC5oIgorI2luY2x1ZGUgIi4uL2pzaW1kLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBJbiB0aGUgUElDIGNhc2VzLCB3ZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IGNvbnN0YW50cyB3aWxsIGtlZXAKKyAqIHRoZWlyIGFsaWdubWVudC4gVGhpcyBtYWNybyBhbGxvd3MgdXMgdG8gdmVyaWZ5IGl0IGF0IHJ1bnRpbWUuCisgKi8KKyNkZWZpbmUgSVNfQUxJR05FRChwdHIsIG9yZGVyKSAgKCgoc2l6ZV90KXB0ciAmICgoMSA8PCBvcmRlcikgLSAxKSkgPT0gMCkKKworI2RlZmluZSBJU19BTElHTkVEX1NTRShwdHIpICAoSVNfQUxJR05FRChwdHIsIDQpKSAvKiAxNiBieXRlIGFsaWdubWVudCAqLworI2RlZmluZSBJU19BTElHTkVEX0FWWChwdHIpICAoSVNfQUxJR05FRChwdHIsIDUpKSAvKiAzMiBieXRlIGFsaWdubWVudCAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHNpbWRfc3VwcG9ydCA9ICh1bnNpZ25lZCBpbnQpKH4wKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2ltZF9odWZmbWFuID0gMTsKKworLyoKKyAqIENoZWNrIHdoYXQgU0lNRCBhY2NlbGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCisgKgorICogRklYTUU6IFRoaXMgY29kZSBpcyByYWN5IHVuZGVyIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuCisgKi8KK0xPQ0FMKHZvaWQpCitpbml0X3NpbWQodm9pZCkKK3sKKyNpZm5kZWYgTk9fR0VURU5WCisgIGNoYXIgKmVudiA9IE5VTEw7CisjZW5kaWYKKworICBpZiAoc2ltZF9zdXBwb3J0ICE9IH4wVSkKKyAgICByZXR1cm47CisKKyAgc2ltZF9zdXBwb3J0ID0ganBlZ19zaW1kX2NwdV9zdXBwb3J0KCk7CisKKyNpZm5kZWYgTk9fR0VURU5WCisgIC8qIEZvcmNlIGRpZmZlcmVudCBzZXR0aW5ncyB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworICBlbnYgPSBnZXRlbnYoIkpTSU1EX0ZPUkNFU1NFMiIpOworICBpZiAoKGVudiAhPSBOVUxMKSAmJiAoc3RyY21wKGVudiwgIjEiKSA9PSAwKSkKKyAgICBzaW1kX3N1cHBvcnQgJj0gSlNJTURfU1NFMjsKKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRUFWWDIiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ICY9IEpTSU1EX0FWWDI7CisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VOT05FIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCA9IDA7CisgIGVudiA9IGdldGVudigiSlNJTURfTk9IVUZGRU5DIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfaHVmZm1hbiA9IDA7CisjZW5kaWYKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfeWNjKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpICYmCisgICAgICBJU19BTElHTkVEX0FWWChqY29uc3RfcmdiX3ljY19jb252ZXJ0X2F2eDIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3JnYl9ncmF5KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpICYmCisgICAgICBJU19BTElHTkVEX0FWWChqY29uc3RfcmdiX2dyYXlfY29udmVydF9hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYih2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKSAmJgorICAgICAgSVNfQUxJR05FRF9BVlgoamNvbnN0X3ljY19yZ2JfY29udmVydF9hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl95Y2NfcmdiNTY1KHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl95Y2NfY29udmVydChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqYXZ4MmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgICBhdngyZmN0ID0ganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgIGNhc2UgSkNTX0VYVF9BUkdCOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBhdngyZmN0ID0ganNpbWRfcmdiX3ljY19jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyOworICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgYXZ4MmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOworICBlbHNlCisgICAgc3NlMmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl9ncmF5X2NvbnZlcnQoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqYXZ4MmZjdCkgKEpESU1FTlNJT04sIEpTQU1QQVJSQVksIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIGludCk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19FWFRfUkdCOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRyZ2JfZ3JheV9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRyZ2J4X2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRyZ2J4X2dyYXlfY29udmVydF9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRiZ3JfZ3JheV9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dGJncl9ncmF5X2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9CR1JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9leHRiZ3J4X2dyYXlfY29udmVydF9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2V4dHhiZ3JfZ3JheV9jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBhdngyZmN0ID0ganNpbWRfZXh0eHJnYl9ncmF5X2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfZXh0eHJnYl9ncmF5X2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBhdngyZmN0ID0ganNpbWRfcmdiX2dyYXlfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIH0KKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBhdngyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgIGVsc2UKKyAgICBzc2UyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYl9jb252ZXJ0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5wdXRfcm93LCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqYXZ4MmZjdCkgKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVksIGludCk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgaW50KTsKKworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICBhdngyZmN0ID0ganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX1JHQkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSOgorICAgIGF2eDJmY3QgPSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9CR1JYOgorICBjYXNlIEpDU19FWFRfQkdSQToKKyAgICBhdngyZmN0ID0ganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfQUJHUjoKKyAgICBhdngyZmN0ID0ganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgICBhdngyZmN0ID0ganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X3NzZTI7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYXZ4MmZjdCA9IGpzaW1kX3ljY19yZ2JfY29udmVydF9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMjsKKyAgICBicmVhazsKKyAgfQorCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGF2eDJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKKyAgZWxzZQorICAgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiNTY1X2NvbnZlcnQoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9yb3csIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfZG93bnNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2Rvd25zYW1wbGUoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfYXZ4MihjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YSk7CisgIGVsc2UKKyAgICBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMihjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9kb3duc2FtcGxlKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAganNpbWRfaDJ2MV9kb3duc2FtcGxlX2F2eDIoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGEpOworICBlbHNlCisgICAganNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGEpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9oMnYyX3Vwc2FtcGxlX2F2eDIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLCBjaW5mby0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICBlbHNlCisgICAganNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqb3V0cHV0X2RhdGFfcHRyKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9oMnYxX3Vwc2FtcGxlX2F2eDIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLCBjaW5mby0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICBlbHNlCisgICAganNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKSAmJgorICAgICAgSVNfQUxJR05FRF9BVlgoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX2F2eDIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikgJiYKKyAgICAgIElTX0FMSUdORURfQVZYKGpjb25zdF9mYW5jeV91cHNhbXBsZV9hdngyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICpvdXRwdXRfZGF0YV9wdHIpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BVlgyKQorICAgIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfYXZ4MihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YV9wdHIpOworICBlbHNlCisgICAganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKm91dHB1dF9kYXRhX3B0cikKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9hdngyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7CisgIGVsc2UKKyAgICBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX21lcmdlZF91cHNhbXBsZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikgJiYKKyAgICAgIElTX0FMSUdORURfQVZYKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfYXZ4MikpCisgICAgcmV0dXJuIDE7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9tZXJnZWRfdXBzYW1wbGUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpICYmCisgICAgICBJU19BTElHTkVEX0FWWChqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX2F2eDIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIHZvaWQgKCphdngyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisKKyAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjJfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgYXZ4MmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworICBlbHNlCisgICAgc3NlMmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIHZvaWQgKCphdngyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisgIHZvaWQgKCpzc2UyZmN0KSAoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisKKyAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgIGNhc2UgSkNTX0VYVF9SR0JBOgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICBhdngyZmN0ID0ganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX2F2eDI7CisgICAgc3NlMmZjdCA9IGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgY2FzZSBKQ1NfRVhUX0FCR1I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgY2FzZSBKQ1NfRVhUX0FSR0I6CisgICAgYXZ4MmZjdCA9IGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfYXZ4MjsKKyAgICBzc2UyZmN0ID0ganNpbWRfaDJ2MV9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGF2eDJmY3QgPSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9hdngyOworICAgIHNzZTJmY3QgPSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgIGJyZWFrOworICB9CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAgYXZ4MmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworICBlbHNlCisgICAgc3NlMmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fY29udnNhbXBfZmxvYXQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihGQVNUX0ZMT0FUKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2NvbnZzYW1wKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgRENURUxFTSAqd29ya3NwYWNlKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9jb252c2FtcF9hdngyKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7CisgIGVsc2UKKyAgICBqc2ltZF9jb252c2FtcF9zc2UyKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXBfZmxvYXQoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7CisgIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikgJiYgSVNfQUxJR05FRF9BVlgoamNvbnN0X2ZkY3RfaXNsb3dfYXZ4MikpCisgICAgcmV0dXJuIDE7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pZmFzdCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2lmYXN0X3NzZTIpKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfZmxvYXQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pc2xvdyhEQ1RFTEVNICpkYXRhKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9mZGN0X2lzbG93X2F2eDIoZGF0YSk7CisgIGVsc2UKKyAgICBqc2ltZF9mZGN0X2lzbG93X3NzZTIoZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pZmFzdChEQ1RFTEVNICpkYXRhKQoreworICBqc2ltZF9mZGN0X2lmYXN0X3NzZTIoZGF0YSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9mbG9hdChGQVNUX0ZMT0FUICpkYXRhKQoreworICBqc2ltZF9mZGN0X2Zsb2F0X3NzZShkYXRhKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZSh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRENURUxFTSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemUoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqZGl2aXNvcnMsIERDVEVMRU0gKndvcmtzcGFjZSkKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FWWDIpCisgICAganNpbWRfcXVhbnRpemVfYXZ4Mihjb2VmX2Jsb2NrLCBkaXZpc29ycywgd29ya3NwYWNlKTsKKyAgZWxzZQorICAgIGpzaW1kX3F1YW50aXplX3NzZTIoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemVfZmxvYXQoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICp3b3Jrc3BhY2UpCit7CisgIGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8yeDIodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9yZWRfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF80eDQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9yZWRfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF8yeDIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF8yeDJfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfNHg0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfNHg0X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lzbG93KHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikgJiYgSVNfQUxJR05FRF9BVlgoamNvbnN0X2lkY3RfaXNsb3dfYXZ4MikpCisgICAgcmV0dXJuIDE7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaXNsb3dfc3NlMikpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pZmFzdCh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElGQVNUX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKElGQVNUX1NDQUxFX0JJVFMgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X2lmYXN0X3NzZTIpKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfZmxvYXQodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRkFTVF9GTE9BVCkgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihGTE9BVF9NVUxUX1RZUEUpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9mbG9hdF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2lzbG93KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVZYMikKKyAgICBqc2ltZF9pZGN0X2lzbG93X2F2eDIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKKyAgZWxzZQorICAgIGpzaW1kX2lkY3RfaXNsb3dfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3Qoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGpzaW1kX2lkY3RfaWZhc3Rfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2Zsb2F0KGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBqc2ltZF9pZGN0X2Zsb2F0X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faHVmZl9lbmNvZGVfb25lX2Jsb2NrKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBzaW1kX2h1ZmZtYW4gJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9odWZmX2VuY29kZV9vbmVfYmxvY2spKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoSk9DVEVUICopCitqc2ltZF9odWZmX2VuY29kZV9vbmVfYmxvY2sodm9pZCAqc3RhdGUsIEpPQ1RFVCAqYnVmZmVyLCBKQ09FRlBUUiBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdF9kY192YWwsIGNfZGVyaXZlZF90YmwgKmRjdGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKmFjdGJsKQoreworICByZXR1cm4ganNpbWRfaHVmZl9lbmNvZGVfb25lX2Jsb2NrX3NzZTIoc3RhdGUsIGJ1ZmZlciwgYmxvY2ssIGxhc3RfZGNfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0YmwsIGFjdGJsKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX2ZpcnN0X3ByZXBhcmUodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKFNJWkVPRl9TSVpFX1QgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlKGNvbnN0IEpDT0VGICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwgaW50IFNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBBbCwgSkNPRUYgKnZhbHVlcywgc2l6ZV90ICp6ZXJvYml0cykKK3sKKyAganNpbWRfZW5jb2RlX21jdV9BQ19maXJzdF9wcmVwYXJlX3NzZTIoYmxvY2ssIGpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2wsIEFsLCB2YWx1ZXMsIHplcm9iaXRzKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9lbmNvZGVfbWN1X0FDX3JlZmluZV9wcmVwYXJlKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChTSVpFT0ZfU0laRV9UICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZShjb25zdCBKQ09FRiAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqanBlZ19uYXR1cmFsX29yZGVyX3N0YXJ0LCBpbnQgU2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBBbCwgSkNPRUYgKmFic3ZhbHVlcywgc2l6ZV90ICpiaXRzKQoreworICByZXR1cm4ganNpbWRfZW5jb2RlX21jdV9BQ19yZWZpbmVfcHJlcGFyZV9zc2UyKGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfbmF0dXJhbF9vcmRlcl9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbCwgQWwsIGFic3ZhbHVlcywgYml0cyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qc2ltZGNwdS5hc20gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zaW1kL3g4Nl82NC9qc2ltZGNwdS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NzliZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3NpbWQveDg2XzY0L2pzaW1kY3B1LmFzbQpAQCAtMCwwICsxLDc4IEBACis7Cis7IGpzaW1kY3B1LmFzbSAtIFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjaGVjaworOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAoQykgMjAxNiwgRC4gUi4gQ29tbWFuZGVyLgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU0VDVElPTiAgICAgU0VHX1RFWFQKKyAgICBCSVRTICAgICAgICA2NAorOworOyBDaGVjayBpZiB0aGUgQ1BVIHN1cHBvcnRzIFNJTUQgaW5zdHJ1Y3Rpb25zCis7Cis7IEdMT0JBTCh1bnNpZ25lZCBpbnQpCis7IGpwZWdfc2ltZF9jcHVfc3VwcG9ydCh2b2lkKQorOworCisgICAgYWxpZ24gICAgICAgMzIKKyAgICBHTE9CQUxfRlVOQ1RJT04oanBlZ19zaW1kX2NwdV9zdXBwb3J0KQorCitFWFROKGpwZWdfc2ltZF9jcHVfc3VwcG9ydCk6CisgICAgcHVzaCAgICAgICAgcmJ4CisgICAgcHVzaCAgICAgICAgcmRpCisKKyAgICB4b3IgICAgICAgICByZGksIHJkaSAgICAgICAgICAgICAgICA7IHNpbWQgc3VwcG9ydCBmbGFnCisKKyAgICA7IENoZWNrIGZvciBBVlgyIGluc3RydWN0aW9uIHN1cHBvcnQKKyAgICBtb3YgICAgICAgICByYXgsIDcKKyAgICB4b3IgICAgICAgICByY3gsIHJjeAorICAgIGNwdWlkCisgICAgbW92ICAgICAgICAgcmF4LCByYnggICAgICAgICAgICAgICAgOyByYXggPSBFeHRlbmRlZCBmZWF0dXJlIGZsYWdzCisKKyAgICBvciAgICAgICAgICByZGksIEpTSU1EX1NTRTIKKyAgICBvciAgICAgICAgICByZGksIEpTSU1EX1NTRQorICAgIHRlc3QgICAgICAgIHJheCwgMTw8NSAgICAgICAgICAgICAgIDsgYml0NTpBVlgyCisgICAganogICAgICAgICAgc2hvcnQgLnJldHVybgorCisgICAgOyBDaGVjayBmb3IgQVZYMiBPL1Mgc3VwcG9ydAorICAgIG1vdiAgICAgICAgIHJheCwgMQorICAgIHhvciAgICAgICAgIHJjeCwgcmN4CisgICAgY3B1aWQKKyAgICB0ZXN0ICAgICAgICByY3gsIDE8PDI3CisgICAganogICAgICAgICAgc2hvcnQgLnJldHVybiAgICAgICAgICAgOyBPL1MgZG9lcyBub3Qgc3VwcG9ydCBYU0FWRQorICAgIHRlc3QgICAgICAgIHJjeCwgMTw8MjgKKyAgICBqeiAgICAgICAgICBzaG9ydCAucmV0dXJuICAgICAgICAgICA7IENQVSBkb2VzIG5vdCBzdXBwb3J0IEFWWDIKKworICAgIHhvciAgICAgICAgIHJjeCwgcmN4CisgICAgeGdldGJ2CisgICAgdGVzdCAgICAgICAgcmF4LCA2ICAgICAgICAgICAgICAgICAgOyBPL1MgZG9lcyBub3QgbWFuYWdlIFhNTS9ZTU0gc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHVzaW5nIFhTQVZFCisgICAganogICAgICAgICAgc2hvcnQgLnJldHVybgorCisgICAgb3IgICAgICAgICAgcmRpLCBKU0lNRF9BVlgyCisKKy5yZXR1cm46CisgICAgbW92ICAgICAgICAgcmF4LCByZGkKKworICAgIHBvcCAgICAgICAgIHJkaQorICAgIHBvcCAgICAgICAgIHJieAorICAgIHJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorICAgIGFsaWduICAgICAgIDMyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9zdHJ1Y3R1cmUudHh0IGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc3RydWN0dXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjljOWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vc3RydWN0dXJlLnR4dApAQCAtMCwwICsxLDkwNCBAQAorSUpHIEpQRUcgTElCUkFSWTogIFNZU1RFTSBBUkNISVRFQ1RVUkUKKworVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CitDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMiwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCitJdCB3YXMgbW9kaWZpZWQgYnkgVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCB0byBpbmNsdWRlIG9ubHkgaW5mb3JtYXRpb24KK3JlbGV2YW50IHRvIGxpYmpwZWctdHVyYm8uCitGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZyBmaWxlLgorCisKK1RoaXMgZmlsZSBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBJSkcgSlBFRyBzb2Z0d2FyZTsKK3RoYXQgaXMsIHRoZSBmdW5jdGlvbnMgb2YgdGhlIHZhcmlvdXMgbW9kdWxlcyBpbiB0aGUgc3lzdGVtIGFuZCB0aGUgaW50ZXJmYWNlcworYmV0d2VlbiBtb2R1bGVzLiAgRm9yIG1vcmUgcHJlY2lzZSBkZXRhaWxzIGFib3V0IGFueSBkYXRhIHN0cnVjdHVyZSBvciBjYWxsaW5nCitjb252ZW50aW9uLCBzZWUgdGhlIGluY2x1ZGUgZmlsZXMgYW5kIGNvbW1lbnRzIGluIHRoZSBzb3VyY2UgY29kZS4KKworV2UgYXNzdW1lIHRoYXQgdGhlIHJlYWRlciBpcyBhbHJlYWR5IHNvbWV3aGF0IGZhbWlsaWFyIHdpdGggdGhlIEpQRUcgc3RhbmRhcmQuCitUaGUgUkVBRE1FLmlqZyBmaWxlIGluY2x1ZGVzIHJlZmVyZW5jZXMgZm9yIGxlYXJuaW5nIGFib3V0IEpQRUcuICBUaGUgZmlsZQorbGlianBlZy50eHQgZGVzY3JpYmVzIHRoZSBsaWJyYXJ5IGZyb20gdGhlIHZpZXdwb2ludCBvZiBhbiBhcHBsaWNhdGlvbgorcHJvZ3JhbW1lciB1c2luZyB0aGUgbGlicmFyeTsgaXQncyBiZXN0IHRvIHJlYWQgdGhhdCBmaWxlIGJlZm9yZSB0aGlzIG9uZS4KK0Fsc28sIHRoZSBmaWxlIGNvZGVydWxlcy50eHQgZGVzY3JpYmVzIHRoZSBjb2Rpbmcgc3R5bGUgY29udmVudGlvbnMgd2UgdXNlLgorCitJbiB0aGlzIGRvY3VtZW50LCBKUEVHLXNwZWNpZmljIHRlcm1pbm9sb2d5IGZvbGxvd3MgdGhlIEpQRUcgc3RhbmRhcmQ6CisgIEEgImNvbXBvbmVudCIgbWVhbnMgYSBjb2xvciBjaGFubmVsLCBlLmcuLCBSZWQgb3IgTHVtaW5hbmNlLgorICBBICJzYW1wbGUiIGlzIGEgc2luZ2xlIGNvbXBvbmVudCB2YWx1ZSAoaS5lLiwgb25lIG51bWJlciBpbiB0aGUgaW1hZ2UgZGF0YSkuCisgIEEgImNvZWZmaWNpZW50IiBpcyBhIGZyZXF1ZW5jeSBjb2VmZmljaWVudCAoYSBEQ1QgdHJhbnNmb3JtIG91dHB1dCBudW1iZXIpLgorICBBICJibG9jayIgaXMgYW4gOHg4IGdyb3VwIG9mIHNhbXBsZXMgb3IgY29lZmZpY2llbnRzLgorICBBbiAiTUNVIiAobWluaW11bSBjb2RlZCB1bml0KSBpcyBhbiBpbnRlcmxlYXZlZCBzZXQgb2YgYmxvY2tzIG9mIHNpemUKKyAgICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgc2FtcGxpbmcgZmFjdG9ycywgb3IgYSBzaW5nbGUgYmxvY2sgaW4gYQorICAgICAgICBub25pbnRlcmxlYXZlZCBzY2FuLgorV2UgZG8gbm90IHVzZSB0aGUgdGVybXMgInBpeGVsIiBhbmQgInNhbXBsZSIgaW50ZXJjaGFuZ2VhYmx5LiAgV2hlbiB3ZSBzYXkKK3BpeGVsLCB3ZSBtZWFuIGFuIGVsZW1lbnQgb2YgdGhlIGZ1bGwtc2l6ZSBpbWFnZSwgd2hpbGUgYSBzYW1wbGUgaXMgYW4gZWxlbWVudAorb2YgdGhlIGRvd25zYW1wbGVkIGltYWdlLiAgVGh1cyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgbWF5IHZhcnkgYWNyb3NzCitjb21wb25lbnRzIHdoaWxlIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGRvZXMgbm90LiAgKFRoaXMgdGVybWlub2xvZ3kgaXMgbm90IHVzZWQKK3JpZ29yb3VzbHkgdGhyb3VnaG91dCB0aGUgY29kZSwgYnV0IGl0IGlzIHVzZWQgaW4gcGxhY2VzIHdoZXJlIGNvbmZ1c2lvbiB3b3VsZAorb3RoZXJ3aXNlIHJlc3VsdC4pCisKKworKioqIFN5c3RlbSBmZWF0dXJlcyAqKioKKworVGhlIElKRyBkaXN0cmlidXRpb24gY29udGFpbnMgdHdvIHBhcnRzOgorICAqIEEgc3Vicm91dGluZSBsaWJyYXJ5IGZvciBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgorICAqIGNqcGVnL2RqcGVnLCB0d28gc2FtcGxlIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgbGlicmFyeSB0byB0cmFuc2Zvcm0KKyAgICBKRklGIEpQRUcgZmlsZXMgdG8gYW5kIGZyb20gc2V2ZXJhbCBvdGhlciBpbWFnZSBmb3JtYXRzLgorY2pwZWcvZGpwZWcgYXJlIG9mIG5vIGdyZWF0IGludGVsbGVjdHVhbCBjb21wbGV4aXR5OiB0aGV5IG1lcmVseSBhZGQgYSBzaW1wbGUKK2NvbW1hbmQtbGluZSB1c2VyIGludGVyZmFjZSBhbmQgSS9PIHJvdXRpbmVzIGZvciBzZXZlcmFsIHVuY29tcHJlc3NlZCBpbWFnZQorZm9ybWF0cy4gIFRoaXMgZG9jdW1lbnQgY29uY2VudHJhdGVzIG9uIHRoZSBsaWJyYXJ5IGl0c2VsZi4KKworV2UgZGVzaXJlIHRoZSBsaWJyYXJ5IHRvIGJlIGNhcGFibGUgb2Ygc3VwcG9ydGluZyBhbGwgSlBFRyBiYXNlbGluZSwgZXh0ZW5kZWQKK3NlcXVlbnRpYWwsIGFuZCBwcm9ncmVzc2l2ZSBEQ1QgcHJvY2Vzc2VzLiAgSGllcmFyY2hpY2FsIHByb2Nlc3NlcyBhcmUgbm90CitzdXBwb3J0ZWQuCisKK1RoZSBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgdGhlIGxvc3NsZXNzIChzcGF0aWFsKSBKUEVHIHByb2Nlc3MuICBMb3NzbGVzcworSlBFRyBzaGFyZXMgbGl0dGxlIG9yIG5vIGNvZGUgd2l0aCBsb3NzeSBKUEVHLCBhbmQgd291bGQgbm9ybWFsbHkgYmUgdXNlZAord2l0aG91dCB0aGUgZXh0ZW5zaXZlIHByZS0gYW5kIHBvc3QtcHJvY2Vzc2luZyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkuCitXZSBmZWVsIHRoYXQgbG9zc2xlc3MgSlBFRyBpcyBiZXR0ZXIgaGFuZGxlZCBieSBhIHNlcGFyYXRlIGxpYnJhcnkuCisKK1dpdGhpbiB0aGVzZSBsaW1pdHMsIGFueSBzZXQgb2YgY29tcHJlc3Npb24gcGFyYW1ldGVycyBhbGxvd2VkIGJ5IHRoZSBKUEVHCitzcGVjIHNob3VsZCBiZSByZWFkYWJsZSBmb3IgZGVjb21wcmVzc2lvbi4gIChXZSBjYW4gYmUgbW9yZSByZXN0cmljdGl2ZSBhYm91dAord2hhdCBmb3JtYXRzIHdlIGNhbiBnZW5lcmF0ZS4pICBBbHRob3VnaCB0aGUgc3lzdGVtIGRlc2lnbiBhbGxvd3MgZm9yIGFsbAorcGFyYW1ldGVyIHZhbHVlcywgc29tZSB1bmNvbW1vbiBzZXR0aW5ncyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCBhbmQgbWF5CituZXZlciBiZTsgbm9uaW50ZWdyYWwgc2FtcGxpbmcgcmF0aW9zIGFyZSB0aGUgcHJpbWUgZXhhbXBsZS4gIEZ1cnRoZXJtb3JlLAord2UgdHJlYXQgOC1iaXQgdnMuIDEyLWJpdCBkYXRhIHByZWNpc2lvbiBhcyBhIGNvbXBpbGUtdGltZSBzd2l0Y2gsIG5vdCBhCitydW4tdGltZSBvcHRpb24sIGJlY2F1c2UgbW9zdCBtYWNoaW5lcyBjYW4gc3RvcmUgOC1iaXQgcGl4ZWxzIG11Y2ggbW9yZQorY29tcGFjdGx5IHRoYW4gMTItYml0LgorCitCeSBpdHNlbGYsIHRoZSBsaWJyYXJ5IGhhbmRsZXMgb25seSBpbnRlcmNoYW5nZSBKUEVHIGRhdGFzdHJlYW1zIC0tLSBpbgorcGFydGljdWxhciB0aGUgd2lkZWx5IHVzZWQgSkZJRiBmaWxlIGZvcm1hdC4gIFRoZSBsaWJyYXJ5IGNhbiBiZSB1c2VkIGJ5CitzdXJyb3VuZGluZyBjb2RlIHRvIHByb2Nlc3MgaW50ZXJjaGFuZ2Ugb3IgYWJicmV2aWF0ZWQgSlBFRyBkYXRhc3RyZWFtcyB0aGF0CithcmUgZW1iZWRkZWQgaW4gbW9yZSBjb21wbGV4IGZpbGUgZm9ybWF0cy4gIChGb3IgZXhhbXBsZSwgbGlidGlmZiB1c2VzIHRoaXMKK2xpYnJhcnkgdG8gaW1wbGVtZW50IEpQRUcgY29tcHJlc3Npb24gd2l0aGluIHRoZSBUSUZGIGZpbGUgZm9ybWF0LikKKworVGhlIGxpYnJhcnkgaW5jbHVkZXMgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgY29kZSB0aGF0IGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZQorSlBFRyBzdGFuZGFyZCBidXQgaXMgbmVjZXNzYXJ5IGZvciB0eXBpY2FsIGFwcGxpY2F0aW9ucyBvZiBKUEVHLiAgVGhlc2UKK2Z1bmN0aW9ucyBwcmVwcm9jZXNzIHRoZSBpbWFnZSBiZWZvcmUgSlBFRyBjb21wcmVzc2lvbiBvciBwb3N0cHJvY2VzcyBpdCBhZnRlcgorZGVjb21wcmVzc2lvbi4gIFRoZXkgaW5jbHVkZSBjb2xvcnNwYWNlIGNvbnZlcnNpb24sIGRvd25zYW1wbGluZy91cHNhbXBsaW5nLAorYW5kIGNvbG9yIHF1YW50aXphdGlvbi4gIFRoaXMgY29kZSBjYW4gYmUgb21pdHRlZCBpZiBub3QgbmVlZGVkLgorCitBIHdpZGUgcmFuZ2Ugb2YgcXVhbGl0eSB2cy4gc3BlZWQgdHJhZGVvZmZzIGFyZSBwb3NzaWJsZSBpbiBKUEVHIHByb2Nlc3NpbmcsCithbmQgZXZlbiBtb3JlIHNvIGluIGRlY29tcHJlc3Npb24gcG9zdHByb2Nlc3NpbmcuICBUaGUgZGVjb21wcmVzc2lvbiBsaWJyYXJ5Citwcm92aWRlcyBtdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb3ZlciBtb3N0IG9mIHRoZSB1c2VmdWwgdHJhZGVvZmZzLAorcmFuZ2luZyBmcm9tIHZlcnktaGlnaC1xdWFsaXR5IGRvd24gdG8gZmFzdC1wcmV2aWV3IG9wZXJhdGlvbi4gIE9uIHRoZQorY29tcHJlc3Npb24gc2lkZSB3ZSBoYXZlIGdlbmVyYWxseSBub3QgcHJvdmlkZWQgbG93LXF1YWxpdHkgY2hvaWNlcywgc2luY2UKK2NvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGxlc3MgdGltZS1jcml0aWNhbC4gIEl0IHNob3VsZCBiZSB1bmRlcnN0b29kIHRoYXQgdGhlCitsb3ctcXVhbGl0eSBtb2RlcyBtYXkgbm90IG1lZXQgdGhlIEpQRUcgc3RhbmRhcmQncyBhY2N1cmFjeSByZXF1aXJlbWVudHM7Citub25ldGhlbGVzcywgdGhleSBhcmUgdXNlZnVsIGZvciB2aWV3ZXJzLgorCisKKyoqKiBTeXN0ZW0gb3ZlcnZpZXcgKioqCisKK1RoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgYXJlIGVhY2ggZGl2aWRlZCBpbnRvIHR3byBtYWluIHNlY3Rpb25zOgordGhlIEpQRUcgY29tcHJlc3NvciBvciBkZWNvbXByZXNzb3IgcHJvcGVyLCBhbmQgdGhlIHByZXByb2Nlc3Npbmcgb3IKK3Bvc3Rwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGVzZSB0d28gc2VjdGlvbnMgaXMgdGhlCitpbWFnZSBkYXRhIHRoYXQgdGhlIG9mZmljaWFsIEpQRUcgc3BlYyByZWdhcmRzIGFzIGl0cyBpbnB1dCBvciBvdXRwdXQ6IHRoaXMKK2RhdGEgaXMgaW4gdGhlIGNvbG9yc3BhY2UgdG8gYmUgdXNlZCBmb3IgY29tcHJlc3Npb24sIGFuZCBpdCBpcyBkb3duc2FtcGxlZAordG8gdGhlIHNhbXBsaW5nIGZhY3RvcnMgdG8gYmUgdXNlZC4gIFRoZSBwcmVwcm9jZXNzaW5nIGFuZCBwb3N0cHJvY2Vzc2luZworc3RlcHMgYXJlIHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIGEgbm9ybWFsIGltYWdlIHJlcHJlc2VudGF0aW9uIHRvIG9yIGZyb20KK3RoaXMgZm9ybS4gIChUaG9zZSBmZXcgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBkZWFsIHdpdGggWUNiQ3IgZG93bnNhbXBsZWQKK2RhdGEgY2FuIHNraXAgdGhlIHByZXByb2Nlc3Npbmcgb3IgcG9zdHByb2Nlc3Npbmcgc3RlcC4pCisKK0xvb2tpbmcgbW9yZSBjbG9zZWx5LCB0aGUgY29tcHJlc3NvciBsaWJyYXJ5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbWFpbgorZWxlbWVudHM6CisKKyAgUHJlcHJvY2Vzc2luZzoKKyAgICAqIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gKGUuZy4sIFJHQiB0byBZQ2JDcikuCisgICAgKiBFZGdlIGV4cGFuc2lvbiBhbmQgZG93bnNhbXBsaW5nLiAgT3B0aW9uYWxseSwgdGhpcyBzdGVwIGNhbiBkbyBzaW1wbGUKKyAgICAgIHNtb290aGluZyAtLS0gdGhpcyBpcyBvZnRlbiBoZWxwZnVsIGZvciBsb3ctcXVhbGl0eSBzb3VyY2UgZGF0YS4KKyAgSlBFRyBwcm9wZXI6CisgICAgKiBNQ1UgYXNzZW1ibHksIERDVCwgcXVhbnRpemF0aW9uLgorICAgICogRW50cm9weSBjb2RpbmcgKHNlcXVlbnRpYWwgb3IgcHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gb3IgYXJpdGhtZXRpYykuCisKK0luIGFkZGl0aW9uIHRvIHRoZXNlIG1vZHVsZXMgd2UgbmVlZCBvdmVyYWxsIGNvbnRyb2wsIG1hcmtlciBnZW5lcmF0aW9uLAorYW5kIHN1cHBvcnQgY29kZSAobWVtb3J5IG1hbmFnZW1lbnQgJiBlcnJvciBoYW5kbGluZykuICBUaGVyZSBpcyBhbHNvIGEKK21vZHVsZSByZXNwb25zaWJsZSBmb3IgcGh5c2ljYWxseSB3cml0aW5nIHRoZSBvdXRwdXQgZGF0YSAtLS0gdHlwaWNhbGx5Cit0aGlzIGlzIGp1c3QgYW4gaW50ZXJmYWNlIHRvIGZ3cml0ZSgpLCBidXQgc29tZSBhcHBsaWNhdGlvbnMgbWF5IG5lZWQgdG8KK2RvIHNvbWV0aGluZyBlbHNlIHdpdGggdGhlIGRhdGEuCisKK1RoZSBkZWNvbXByZXNzb3IgbGlicmFyeSBjb250YWlucyB0aGUgZm9sbG93aW5nIG1haW4gZWxlbWVudHM6CisKKyAgSlBFRyBwcm9wZXI6CisgICAgKiBFbnRyb3B5IGRlY29kaW5nIChzZXF1ZW50aWFsIG9yIHByb2dyZXNzaXZlLCBIdWZmbWFuIG9yIGFyaXRobWV0aWMpLgorICAgICogRGVxdWFudGl6YXRpb24sIGludmVyc2UgRENULCBNQ1UgZGlzYXNzZW1ibHkuCisgIFBvc3Rwcm9jZXNzaW5nOgorICAgICogVXBzYW1wbGluZy4gIE9wdGlvbmFsbHksIHRoaXMgc3RlcCBtYXkgYmUgYWJsZSB0byBkbyBtb3JlIGdlbmVyYWwKKyAgICAgIHJlc2NhbGluZyBvZiB0aGUgaW1hZ2UuCisgICAgKiBDb2xvciBzcGFjZSBjb252ZXJzaW9uIChlLmcuLCBZQ2JDciB0byBSR0IpLiAgVGhpcyBzdGVwIG1heSBhbHNvCisgICAgICBwcm92aWRlIGdhbW1hIGFkanVzdG1lbnQgWyBjdXJyZW50bHkgaXQgZG9lcyBub3QgXS4KKyAgICAqIE9wdGlvbmFsIGNvbG9yIHF1YW50aXphdGlvbiAoZS5nLiwgcmVkdWN0aW9uIHRvIDI1NiBjb2xvcnMpLgorICAgICogT3B0aW9uYWwgY29sb3IgcHJlY2lzaW9uIHJlZHVjdGlvbiAoZS5nLiwgMjQtYml0IHRvIDE1LWJpdCBjb2xvcikuCisgICAgICBbVGhpcyBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuXQorCitXZSBhbHNvIG5lZWQgb3ZlcmFsbCBjb250cm9sLCBtYXJrZXIgcGFyc2luZywgYW5kIGEgZGF0YSBzb3VyY2UgbW9kdWxlLgorVGhlIHN1cHBvcnQgY29kZSAobWVtb3J5IG1hbmFnZW1lbnQgJiBlcnJvciBoYW5kbGluZykgY2FuIGJlIHNoYXJlZCB3aXRoCit0aGUgY29tcHJlc3Npb24gaGFsZiBvZiB0aGUgbGlicmFyeS4KKworVGhlcmUgbWF5IGJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zIG9mIGVhY2ggb2YgdGhlc2UgZWxlbWVudHMsIHBhcnRpY3VsYXJseQoraW4gdGhlIGRlY29tcHJlc3Nvciwgd2hlcmUgYSB3aWRlIHJhbmdlIG9mIHNwZWVkL3F1YWxpdHkgdHJhZGVvZmZzIGlzIHZlcnkKK3VzZWZ1bC4gIEl0IG11c3QgYmUgdW5kZXJzdG9vZCB0aGF0IHNvbWUgb2YgdGhlIGJlc3Qgc3BlZWR1cHMgaW52b2x2ZQorbWVyZ2luZyBhZGphY2VudCBzdGVwcyBpbiB0aGUgcGlwZWxpbmUuICBGb3IgZXhhbXBsZSwgdXBzYW1wbGluZywgY29sb3Igc3BhY2UKK2NvbnZlcnNpb24sIGFuZCBjb2xvciBxdWFudGl6YXRpb24gbWlnaHQgYWxsIGJlIGRvbmUgYXQgb25jZSB3aGVuIHVzaW5nIGEKK2xvdy1xdWFsaXR5IG9yZGVyZWQtZGl0aGVyIHRlY2huaXF1ZS4gIFRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGlzIGRlc2lnbmVkIHRvCithbGxvdyBzdWNoIG1lcmdpbmcgd2hlcmUgYXBwcm9wcmlhdGUuCisKKworTm90ZTogaXQgaXMgY29udmVuaWVudCB0byByZWdhcmQgZWRnZSBleHBhbnNpb24gKHBhZGRpbmcgdG8gYmxvY2sgYm91bmRhcmllcykKK2FzIGEgcHJlcHJvY2Vzc2luZy9wb3N0cHJvY2Vzc2luZyBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggdGhlIEpQRUcgc3BlYyBpbmNsdWRlcworaXQgaW4gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbi4gIFdlIGRvIHRoaXMgYmVjYXVzZSBkb3duc2FtcGxpbmcvdXBzYW1wbGluZworY2FuIGJlIHNpbXBsaWZpZWQgYSBsaXR0bGUgaWYgdGhleSB3b3JrIG9uIHBhZGRlZCBkYXRhOiBpdCdzIG5vdCBuZWNlc3NhcnkgdG8KK2hhdmUgc3BlY2lhbCBjYXNlcyBhdCB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcy4gIFRoZXJlZm9yZSB0aGUgaW50ZXJmYWNlCitidWZmZXIgaXMgYWx3YXlzIGFuIGludGVncmFsIG51bWJlciBvZiBibG9ja3Mgd2lkZSBhbmQgaGlnaCwgYW5kIHdlIGV4cGVjdAorY29tcHJlc3Npb24gcHJlcHJvY2Vzc2luZyB0byBwYWQgdGhlIHNvdXJjZSBkYXRhIHByb3Blcmx5LiAgUGFkZGluZyB3aWxsIG9jY3VyCitvbmx5IHRvIHRoZSBuZXh0IGJsb2NrICg4LXNhbXBsZSkgYm91bmRhcnkuICBJbiBhbiBpbnRlcmxlYXZlZC1zY2FuIHNpdHVhdGlvbiwKK2FkZGl0aW9uYWwgZHVtbXkgYmxvY2tzIG1heSBiZSB1c2VkIHRvIGZpbGwgb3V0IE1DVXMsIGJ1dCB0aGUgTUNVIGFzc2VtYmx5IGFuZAorZGlzYXNzZW1ibHkgbG9naWMgd2lsbCBjcmVhdGUgb3IgZGlzY2FyZCB0aGVzZSBibG9ja3MgaW50ZXJuYWxseS4gIChUaGlzIGlzCithZHZhbnRhZ2VvdXMgZm9yIHNwZWVkIHJlYXNvbnMsIHNpbmNlIHdlIGF2b2lkIERDVGluZyB0aGUgZHVtbXkgYmxvY2tzLgorSXQgYWxzbyBwZXJtaXRzIGEgc21hbGwgcmVkdWN0aW9uIGluIGZpbGUgc2l6ZSwgYmVjYXVzZSB0aGUgY29tcHJlc3NvciBjYW4KK2Nob29zZSBkdW1teSBibG9jayBjb250ZW50cyBzbyBhcyB0byBtaW5pbWl6ZSB0aGVpciBzaXplIGluIGNvbXByZXNzZWQgZm9ybS4KK0ZpbmFsbHksIGl0IG1ha2VzIHRoZSBpbnRlcmZhY2UgYnVmZmVyIHNwZWNpZmljYXRpb24gaW5kZXBlbmRlbnQgb2Ygd2hldGhlcgordGhlIGZpbGUgaXMgYWN0dWFsbHkgaW50ZXJsZWF2ZWQgb3Igbm90LikgIEFwcGxpY2F0aW9ucyB0aGF0IHdpc2ggdG8gZGVhbAorZGlyZWN0bHkgd2l0aCB0aGUgZG93bnNhbXBsZWQgZGF0YSBtdXN0IHByb3ZpZGUgc2ltaWxhciBidWZmZXJpbmcgYW5kIHBhZGRpbmcKK2ZvciBvZGQtc2l6ZWQgaW1hZ2VzLgorCisKKyoqKiBQb29yIG1hbidzIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyAqKioKKworSXQgc2hvdWxkIGJlIGNsZWFyIGJ5IG5vdyB0aGF0IHdlIGhhdmUgYSBsb3Qgb2YgcXVhc2ktaW5kZXBlbmRlbnQgcHJvY2Vzc2luZworc3RlcHMsIG1hbnkgb2Ygd2hpY2ggaGF2ZSBzZXZlcmFsIHBvc3NpYmxlIGJlaGF2aW9ycy4gIFRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhlCitjb2RlIHdpdGggbG90cyBvZiBzd2l0Y2ggc3RhdGVtZW50cywgd2UgdXNlIGEgc2ltcGxlIGZvcm0gb2Ygb2JqZWN0LXN0eWxlCitwcm9ncmFtbWluZyB0byBzZXBhcmF0ZSBvdXQgdGhlIGRpZmZlcmVudCBwb3NzaWJpbGl0aWVzLgorCitGb3IgZXhhbXBsZSwgdHdvIGRpZmZlcmVudCBjb2xvciBxdWFudGl6YXRpb24gYWxnb3JpdGhtcyBjb3VsZCBiZSBpbXBsZW1lbnRlZAorYXMgdHdvIHNlcGFyYXRlIG1vZHVsZXMgdGhhdCBwcmVzZW50IHRoZSBzYW1lIGV4dGVybmFsIGludGVyZmFjZTsgYXQgcnVudGltZSwKK3RoZSBjYWxsaW5nIGNvZGUgd2lsbCBhY2Nlc3MgdGhlIHByb3BlciBtb2R1bGUgaW5kaXJlY3RseSB0aHJvdWdoIGFuICJvYmplY3QiLgorCitXZSBjYW4gZ2V0IHRoZSBsaW1pdGVkIGZlYXR1cmVzIHdlIG5lZWQgd2hpbGUgc3RheWluZyB3aXRoaW4gcG9ydGFibGUgQy4KK1RoZSBiYXNpYyB0b29sIGlzIGEgZnVuY3Rpb24gcG9pbnRlci4gIEFuICJvYmplY3QiIGlzIGp1c3QgYSBzdHJ1Y3QKK2NvbnRhaW5pbmcgb25lIG9yIG1vcmUgZnVuY3Rpb24gcG9pbnRlciBmaWVsZHMsIGVhY2ggb2Ygd2hpY2ggY29ycmVzcG9uZHMgdG8KK2EgbWV0aG9kIG5hbWUgaW4gcmVhbCBvYmplY3Qtb3JpZW50ZWQgbGFuZ3VhZ2VzLiAgRHVyaW5nIGluaXRpYWxpemF0aW9uIHdlCitmaWxsIGluIHRoZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoIHJlZmVyZW5jZXMgdG8gd2hpY2hldmVyIG1vZHVsZSB3ZSBoYXZlCitkZXRlcm1pbmVkIHdlIG5lZWQgdG8gdXNlIGluIHRoaXMgcnVuLiAgVGhlbiBpbnZvY2F0aW9uIG9mIHRoZSBtb2R1bGUgaXMgZG9uZQorYnkgaW5kaXJlY3RpbmcgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI7IG9uIG1vc3QgbWFjaGluZXMgdGhpcyBpcyBubyBtb3JlCitleHBlbnNpdmUgdGhhbiBhIHN3aXRjaCBzdGF0ZW1lbnQsIHdoaWNoIHdvdWxkIGJlIHRoZSBvbmx5IG90aGVyIHdheSBvZgorbWFraW5nIHRoZSByZXF1aXJlZCBydW4tdGltZSBjaG9pY2UuICBUaGUgcmVhbGx5IHNpZ25pZmljYW50IGJlbmVmaXQsIG9mCitjb3Vyc2UsIGlzIGtlZXBpbmcgdGhlIHNvdXJjZSBjb2RlIGNsZWFuIGFuZCB3ZWxsIHN0cnVjdHVyZWQuCisKK1dlIGNhbiBhbHNvIGFycmFuZ2UgdG8gaGF2ZSBwcml2YXRlIHN0b3JhZ2UgdGhhdCB2YXJpZXMgYmV0d2VlbiBkaWZmZXJlbnQKK2ltcGxlbWVudGF0aW9ucyBvZiB0aGUgc2FtZSBraW5kIG9mIG9iamVjdC4gIFdlIGRvIHRoaXMgYnkgbWFraW5nIGFsbCB0aGUKK21vZHVsZS1zcGVjaWZpYyBvYmplY3Qgc3RydWN0cyBiZSBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBlbnRpdGllcywgd2hpY2ggd2lsbAorYmUgYWNjZXNzZWQgdmlhIHBvaW50ZXJzIGluIHRoZSBtYXN0ZXIgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBzdHJ1Y3QuCitUaGUgInB1YmxpYyIgZmllbGRzIG9yIG1ldGhvZHMgZm9yIGEgZ2l2ZW4ga2luZCBvZiBvYmplY3QgYXJlIHNwZWNpZmllZCBieQorYSBjb21tb25seSBrbm93biBzdHJ1Y3QuICBCdXQgYSBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBjb2RlIGNhbiBhbGxvY2F0ZQorYSBsYXJnZXIgc3RydWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbW1vbiBzdHJ1Y3QgYXMgaXRzIGZpcnN0IG1lbWJlciwgcGx1cworYWRkaXRpb25hbCBwcml2YXRlIGZpZWxkcy4gIFdpdGggYXBwcm9wcmlhdGUgcG9pbnRlciBjYXN0aW5nLCB0aGUgbW9kdWxlJ3MKK2ludGVybmFsIGZ1bmN0aW9ucyBjYW4gYWNjZXNzIHRoZXNlIHByaXZhdGUgZmllbGRzLiAgKEZvciBhIHNpbXBsZSBleGFtcGxlLAorc2VlIGpkYXRhZHN0LmMsIHdoaWNoIGltcGxlbWVudHMgdGhlIGV4dGVybmFsIGludGVyZmFjZSBzcGVjaWZpZWQgYnkgc3RydWN0CitqcGVnX2Rlc3RpbmF0aW9uX21nciwgYnV0IGFkZHMgZXh0cmEgZmllbGRzLikKKworKE9mIGNvdXJzZSB0aGlzIHdvdWxkIGFsbCBiZSBhIGxvdCBlYXNpZXIgaWYgd2Ugd2VyZSB1c2luZyBDKyssIGJ1dCB3ZSBhcmUKK25vdCB5ZXQgcHJlcGFyZWQgdG8gYXNzdW1lIHRoYXQgZXZlcnlvbmUgaGFzIGEgQysrIGNvbXBpbGVyLikKKworQW4gaW1wb3J0YW50IGJlbmVmaXQgb2YgdGhpcyBzY2hlbWUgaXMgdGhhdCBpdCBpcyBlYXN5IHRvIHByb3ZpZGUgbXVsdGlwbGUKK3ZlcnNpb25zIG9mIGFueSBtZXRob2QsIGVhY2ggdHVuZWQgdG8gYSBwYXJ0aWN1bGFyIGNhc2UuICBXaGlsZSBhIGxvdCBvZgorcHJlY2FsY3VsYXRpb24gbWlnaHQgYmUgZG9uZSB0byBzZWxlY3QgYW4gb3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIG1ldGhvZCwKK3RoZSBjb3N0IHBlciBpbnZvY2F0aW9uIGlzIGNvbnN0YW50LiAgRm9yIGV4YW1wbGUsIHRoZSB1cHNhbXBsaW5nIHN0ZXAgbWlnaHQKK2hhdmUgYSAiZ2VuZXJpYyIgbWV0aG9kLCBwbHVzIG9uZSBvciBtb3JlICJoYXJkd2lyZWQiIG1ldGhvZHMgZm9yIHRoZSBtb3N0Citwb3B1bGFyIHNhbXBsaW5nIGZhY3RvcnM7IHRoZSBoYXJkd2lyZWQgbWV0aG9kcyB3b3VsZCBiZSBmYXN0ZXIgYmVjYXVzZSB0aGV5J2QKK3VzZSBzdHJhaWdodC1saW5lIGNvZGUgaW5zdGVhZCBvZiBmb3ItbG9vcHMuICBUaGUgY29zdCB0byBkZXRlcm1pbmUgd2hpY2gKK21ldGhvZCB0byB1c2UgaXMgcGFpZCBvbmx5IG9uY2UsIGF0IHN0YXJ0dXAsIGFuZCB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhIGFyZQoraGlkZGVuIGZyb20gdGhlIGNhbGxlcnMgb2YgdGhlIG1ldGhvZC4KKworVGhpcyBwbGFuIGRpZmZlcnMgYSBsaXR0bGUgYml0IGZyb20gdXN1YWwgb2JqZWN0LW9yaWVudGVkIHN0cnVjdHVyZXMsIGluIHRoYXQKK29ubHkgb25lIGluc3RhbmNlIG9mIGVhY2ggb2JqZWN0IGNsYXNzIHdpbGwgZXhpc3QgZHVyaW5nIGV4ZWN1dGlvbi4gIFRoZQorcmVhc29uIGZvciBoYXZpbmcgdGhlIGNsYXNzIHN0cnVjdHVyZSBpcyB0aGF0IG9uIGRpZmZlcmVudCBydW5zIHdlIG1heSBjcmVhdGUKK2RpZmZlcmVudCBpbnN0YW5jZXMgKGNob29zZSB0byBleGVjdXRlIGRpZmZlcmVudCBtb2R1bGVzKS4gIFlvdSBjYW4gdGhpbmsgb2YKK3RoZSB0ZXJtICJtZXRob2QiIGFzIGRlbm90aW5nIHRoZSBjb21tb24gaW50ZXJmYWNlIHByZXNlbnRlZCBieSBhIHBhcnRpY3VsYXIKK3NldCBvZiBpbnRlcmNoYW5nZWFibGUgZnVuY3Rpb25zLCBhbmQgIm9iamVjdCIgYXMgZGVub3RpbmcgYSBncm91cCBvZiByZWxhdGVkCittZXRob2RzLCBvciB0aGUgdG90YWwgc2hhcmVkIGludGVyZmFjZSBiZWhhdmlvciBvZiBhIGdyb3VwIG9mIG1vZHVsZXMuCisKKworKioqIE92ZXJhbGwgY29udHJvbCBzdHJ1Y3R1cmUgKioqCisKK1dlIHByZXZpb3VzbHkgbWVudGlvbmVkIHRoZSBuZWVkIGZvciBvdmVyYWxsIGNvbnRyb2wgbG9naWMgaW4gdGhlIGNvbXByZXNzaW9uCithbmQgZGVjb21wcmVzc2lvbiBsaWJyYXJpZXMuICBJbiBJSkcgaW1wbGVtZW50YXRpb25zIHByaW9yIHRvIHY1LCBvdmVyYWxsCitjb250cm9sIHdhcyBtb3N0bHkgcHJvdmlkZWQgYnkgInBpcGVsaW5lIGNvbnRyb2wiIG1vZHVsZXMsIHdoaWNoIHByb3ZlZCB0byBiZQorbGFyZ2UsIHVud2llbGR5LCBhbmQgaGFyZCB0byB1bmRlcnN0YW5kLiAgVG8gaW1wcm92ZSB0aGUgc2l0dWF0aW9uLCB0aGUKK2NvbnRyb2wgbG9naWMgaGFzIGJlZW4gc3ViZGl2aWRlZCBpbnRvIG11bHRpcGxlIG1vZHVsZXMuICBUaGUgY29udHJvbCBtb2R1bGVzCitjb25zaXN0IG9mOgorCisxLiBNYXN0ZXIgY29udHJvbCBmb3IgbW9kdWxlIHNlbGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uICBUaGlzIGhhcyB0d28KK3Jlc3BvbnNpYmlsaXRpZXM6CisKKyAgIDFBLiAgU3RhcnR1cCBpbml0aWFsaXphdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGltYWdlIHByb2Nlc3NpbmcuCisgICAgICAgIFRoZSBpbmRpdmlkdWFsIHByb2Nlc3NpbmcgbW9kdWxlcyB0byBiZSB1c2VkIGluIHRoaXMgcnVuIGFyZSBzZWxlY3RlZAorICAgICAgICBhbmQgZ2l2ZW4gaW5pdGlhbGl6YXRpb24gY2FsbHMuCisKKyAgIDFCLiAgUGVyLXBhc3MgY29udHJvbC4gIFRoaXMgZGV0ZXJtaW5lcyBob3cgbWFueSBwYXNzZXMgd2lsbCBiZSBwZXJmb3JtZWQKKyAgICAgICAgYW5kIGNhbGxzIGVhY2ggYWN0aXZlIHByb2Nlc3NpbmcgbW9kdWxlIHRvIGNvbmZpZ3VyZSBpdHNlbGYKKyAgICAgICAgYXBwcm9wcmlhdGVseSBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcGFzcy4gIEVuZC1vZi1wYXNzIHByb2Nlc3NpbmcsCisgICAgICAgIHdoZXJlIG5lY2Vzc2FyeSwgaXMgYWxzbyBpbnZva2VkIGZyb20gdGhlIG1hc3RlciBjb250cm9sIG1vZHVsZS4KKworICAgTWV0aG9kIHNlbGVjdGlvbiBpcyBwYXJ0aWFsbHkgZGlzdHJpYnV0ZWQsIGluIHRoYXQgYSBwYXJ0aWN1bGFyIHByb2Nlc3NpbmcKKyAgIG1vZHVsZSBtYXkgY29udGFpbiBzZXZlcmFsIHBvc3NpYmxlIGltcGxlbWVudGF0aW9ucyBvZiBhIHBhcnRpY3VsYXIgbWV0aG9kLAorICAgd2hpY2ggaXQgd2lsbCBzZWxlY3QgYW1vbmcgd2hlbiBnaXZlbiBpdHMgaW5pdGlhbGl6YXRpb24gY2FsbC4gIFRoZSBtYXN0ZXIKKyAgIGNvbnRyb2wgY29kZSBuZWVkIG9ubHkgYmUgY29uY2VybmVkIHdpdGggZGVjaXNpb25zIHRoYXQgYWZmZWN0IG1vcmUgdGhhbgorICAgb25lIG1vZHVsZS4KKworMi4gRGF0YSBidWZmZXJpbmcgY29udHJvbC4gIEEgc2VwYXJhdGUgY29udHJvbCBtb2R1bGUgZXhpc3RzIGZvciBlYWNoCisgICBpbnRlci1wcm9jZXNzaW5nLXN0ZXAgZGF0YSBidWZmZXIuICBUaGlzIG1vZHVsZSBpcyByZXNwb25zaWJsZSBmb3IKKyAgIGludm9raW5nIHRoZSBwcm9jZXNzaW5nIHN0ZXBzIHRoYXQgd3JpdGUgb3IgcmVhZCB0aGF0IGRhdGEgYnVmZmVyLgorCitFYWNoIGJ1ZmZlciBjb250cm9sbGVyIHNlZXMgdGhlIHdvcmxkIGFzIGZvbGxvd3M6CisKK2lucHV0IGRhdGEgPT4gcHJvY2Vzc2luZyBzdGVwIEEgPT4gYnVmZmVyID0+IHByb2Nlc3Npbmcgc3RlcCBCID0+IG91dHB1dCBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb250cm9sbGVyIGtub3dzIHRoZSBkYXRhZmxvdyByZXF1aXJlbWVudHMgb2Ygc3RlcHMgQSBhbmQgQjogaG93IG11Y2ggZGF0YQordGhleSB3YW50IHRvIGFjY2VwdCBpbiBvbmUgY2h1bmsgYW5kIGhvdyBtdWNoIHRoZXkgb3V0cHV0IGluIG9uZSBjaHVuay4gIEl0cworZnVuY3Rpb24gaXMgdG8gbWFuYWdlIGl0cyBidWZmZXIgYW5kIGNhbGwgQSBhbmQgQiBhdCB0aGUgcHJvcGVyIHRpbWVzLgorCitBIGRhdGEgYnVmZmVyIGNvbnRyb2wgbW9kdWxlIG1heSBpdHNlbGYgYmUgdmlld2VkIGFzIGEgcHJvY2Vzc2luZyBzdGVwIGJ5IGEKK2hpZ2hlci1sZXZlbCBjb250cm9sIG1vZHVsZTsgdGh1cyB0aGUgY29udHJvbCBtb2R1bGVzIGZvcm0gYSBiaW5hcnkgdHJlZSB3aXRoCitlbGVtZW50YXJ5IHByb2Nlc3Npbmcgc3RlcHMgYXQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZS4KKworVGhlIGNvbnRyb2wgbW9kdWxlcyBhcmUgb2JqZWN0cy4gIEEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiBmbGV4aWJpbGl0eSBjYW4KK2JlIGhhZCBieSByZXBsYWNpbmcgaW1wbGVtZW50YXRpb25zIG9mIGEgY29udHJvbCBtb2R1bGUuICBGb3IgZXhhbXBsZToKKyogTWVyZ2luZyBvZiBhZGphY2VudCBzdGVwcyBpbiB0aGUgcGlwZWxpbmUgaXMgZG9uZSBieSByZXBsYWNpbmcgYSBjb250cm9sCisgIG1vZHVsZSBhbmQgaXRzIHBhaXIgb2YgcHJvY2Vzc2luZy1zdGVwIG1vZHVsZXMgd2l0aCBhIHNpbmdsZSBwcm9jZXNzaW5nLQorICBzdGVwIG1vZHVsZS4gIChIZW5jZSB0aGUgcG9zc2libGUgbWVyZ2VzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSB0cmVlIG9mCisgIGNvbnRyb2wgbW9kdWxlcy4pCisqIEluIHNvbWUgcHJvY2Vzc2luZyBtb2RlcywgYSBnaXZlbiBpbnRlcnN0ZXAgYnVmZmVyIG5lZWQgb25seSBiZSBhICJzdHJpcCIKKyAgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBhY2NvbW1vZGF0ZSB0aGUgZGVzaXJlZCBkYXRhIGNodW5rIHNpemVzLiAgSW4gb3RoZXIKKyAgbW9kZXMsIGEgZnVsbC1pbWFnZSBidWZmZXIgaXMgbmVlZGVkIGFuZCBzZXZlcmFsIHBhc3NlcyBhcmUgcmVxdWlyZWQuCisgIFRoZSBjb250cm9sIG1vZHVsZSBkZXRlcm1pbmVzIHdoaWNoIGtpbmQgb2YgYnVmZmVyIGlzIHVzZWQgYW5kIG1hbmlwdWxhdGVzCisgIHZpcnR1YWwgYXJyYXkgYnVmZmVycyBhcyBuZWVkZWQuICBPbmUgb3IgYm90aCBwcm9jZXNzaW5nIHN0ZXBzIG1heSBiZQorICB1bmF3YXJlIG9mIHRoZSBtdWx0aS1wYXNzIGJlaGF2aW9yLgorCitJbiB0aGVvcnksIHdlIG1pZ2h0IGJlIGFibGUgdG8gbWFrZSBhbGwgb2YgdGhlIGRhdGEgYnVmZmVyIGNvbnRyb2xsZXJzCitpbnRlcmNoYW5nZWFibGUgYW5kIHByb3ZpZGUganVzdCBvbmUgc2V0IG9mIGltcGxlbWVudGF0aW9ucyBmb3IgYWxsLiAgSW4KK3ByYWN0aWNlLCBlYWNoIG9uZSBjb250YWlucyBjb25zaWRlcmFibGUgc3BlY2lhbC1jYXNlIHByb2Nlc3NpbmcgZm9yIGl0cworcGFydGljdWxhciBqb2IuICBUaGUgYnVmZmVyIGNvbnRyb2xsZXIgY29uY2VwdCBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYW4KK292ZXJhbGwgc3lzdGVtIHN0cnVjdHVyaW5nIHByaW5jaXBsZSwgbm90IGFzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlCit0YXNrIHBlcmZvcm1lZCBieSBhbnkgb25lIGNvbnRyb2xsZXIuCisKKworKioqIENvbXByZXNzaW9uIG9iamVjdCBzdHJ1Y3R1cmUgKioqCisKK0hlcmUgaXMgYSBza2V0Y2ggb2YgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSBKUEVHIGNvbXByZXNzaW9uIGxpYnJhcnk6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0gQ29sb3JzcGFjZSBjb252ZXJzaW9uCisgICAgICAgICAgICAgICAgICB8LS0gUHJlcHJvY2Vzc2luZyBjb250cm9sbGVyIC0tfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLSBEb3duc2FtcGxpbmcKK01haW4gY29udHJvbGxlciAtLXwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tIEZvcndhcmQgRENULCBxdWFudGl6ZQorICAgICAgICAgICAgICAgICAgfC0tIENvZWZmaWNpZW50IGNvbnRyb2xsZXIgLS18CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLSBFbnRyb3B5IGVuY29kaW5nCisKK1RoaXMgc2tldGNoIGFsc28gZGVzY3JpYmVzIHRoZSBmbG93IG9mIGNvbnRyb2wgKHN1YnJvdXRpbmUgY2FsbHMpIGR1cmluZwordHlwaWNhbCBpbWFnZSBkYXRhIHByb2Nlc3NpbmcuICBFYWNoIG9mIHRoZSBjb21wb25lbnRzIHNob3duIGluIHRoZSBkaWFncmFtIGlzCithbiAib2JqZWN0IiB3aGljaCBtYXkgaGF2ZSBzZXZlcmFsIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYXZhaWxhYmxlLiAgT25lCitvciBtb3JlIHNvdXJjZSBjb2RlIGZpbGVzIGNvbnRhaW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbihzKSBvZiBlYWNoIG9iamVjdC4KKworVGhlIG9iamVjdHMgc2hvd24gYWJvdmUgYXJlOgorCisqIE1haW4gY29udHJvbGxlcjogYnVmZmVyIGNvbnRyb2xsZXIgZm9yIHRoZSBzdWJzYW1wbGVkLWRhdGEgYnVmZmVyLCB3aGljaAorICBob2xkcyB0aGUgcHJlcHJvY2Vzc2VkIGlucHV0IGRhdGEuICBUaGlzIGNvbnRyb2xsZXIgaW52b2tlcyBwcmVwcm9jZXNzaW5nIHRvCisgIGZpbGwgdGhlIHN1YnNhbXBsZWQtZGF0YSBidWZmZXIsIGFuZCBKUEVHIGNvbXByZXNzaW9uIHRvIGVtcHR5IGl0LiAgVGhlcmUgaXMKKyAgdXN1YWxseSBubyBuZWVkIGZvciBhIGZ1bGwtaW1hZ2UgYnVmZmVyIGhlcmU7IGEgc3RyaXAgYnVmZmVyIGlzIGFkZXF1YXRlLgorCisqIFByZXByb2Nlc3NpbmcgY29udHJvbGxlcjogYnVmZmVyIGNvbnRyb2xsZXIgZm9yIHRoZSBkb3duc2FtcGxpbmcgaW5wdXQgZGF0YQorICBidWZmZXIsIHdoaWNoIGxpZXMgYmV0d2VlbiBjb2xvcnNwYWNlIGNvbnZlcnNpb24gYW5kIGRvd25zYW1wbGluZy4gIE5vdGUKKyAgdGhhdCBhIHVuaWZpZWQgY29udmVyc2lvbi9kb3duc2FtcGxpbmcgbW9kdWxlIHdvdWxkIHByb2JhYmx5IHJlcGxhY2UgdGhpcworICBjb250cm9sbGVyIGVudGlyZWx5LgorCisqIENvbG9yc3BhY2UgY29udmVyc2lvbjogY29udmVydHMgYXBwbGljYXRpb24gaW1hZ2UgZGF0YSBpbnRvIHRoZSBkZXNpcmVkCisgIEpQRUcgY29sb3Igc3BhY2U7IGFsc28gY2hhbmdlcyB0aGUgZGF0YSBmcm9tIHBpeGVsLWludGVybGVhdmVkIGxheW91dCB0bworICBzZXBhcmF0ZSBjb21wb25lbnQgcGxhbmVzLiAgUHJvY2Vzc2VzIG9uZSBwaXhlbCByb3cgYXQgYSB0aW1lLgorCisqIERvd25zYW1wbGluZzogcGVyZm9ybXMgcmVkdWN0aW9uIG9mIGNocm9tYSBjb21wb25lbnRzIGFzIHJlcXVpcmVkLgorICBPcHRpb25hbGx5IG1heSBwZXJmb3JtIHBpeGVsLWxldmVsIHNtb290aGluZyBhcyB3ZWxsLiAgUHJvY2Vzc2VzIGEgInJvdworICBncm91cCIgYXQgYSB0aW1lLCB3aGVyZSBhIHJvdyBncm91cCBpcyBkZWZpbmVkIGFzIFZtYXggcGl4ZWwgcm93cyBvZiBlYWNoCisgIGNvbXBvbmVudCBiZWZvcmUgZG93bnNhbXBsaW5nLCBhbmQgVmsgc2FtcGxlIHJvd3MgYWZ0ZXJ3YXJkcyAocmVtZW1iZXIgVmsKKyAgZGlmZmVycyBhY3Jvc3MgY29tcG9uZW50cykuICBTb21lIGRvd25zYW1wbGluZyBvciBzbW9vdGhpbmcgYWxnb3JpdGhtcyBtYXkKKyAgcmVxdWlyZSBjb250ZXh0IHJvd3MgYWJvdmUgYW5kIGJlbG93IHRoZSBjdXJyZW50IHJvdyBncm91cDsgdGhlCisgIHByZXByb2Nlc3NpbmcgY29udHJvbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3VwcGx5aW5nIHRoZXNlIHJvd3MgdmlhIHByb3BlcgorICBidWZmZXJpbmcuICBUaGUgZG93bnNhbXBsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVkZ2UgZXhwYW5zaW9uIGF0IHRoZSByaWdodAorICBlZGdlIChpLmUuLCBleHRlbmRpbmcgZWFjaCBzYW1wbGUgcm93IHRvIGEgbXVsdGlwbGUgb2YgOCBzYW1wbGVzKTsgYnV0IHRoZQorICBwcmVwcm9jZXNzaW5nIGNvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yIHZlcnRpY2FsIGVkZ2UgZXhwYW5zaW9uIChpLmUuLAorICBkdXBsaWNhdGluZyB0aGUgYm90dG9tIHNhbXBsZSByb3cgYXMgbmVlZGVkIHRvIG1ha2UgYSBtdWx0aXBsZSBvZiA4IHJvd3MpLgorCisqIENvZWZmaWNpZW50IGNvbnRyb2xsZXI6IGJ1ZmZlciBjb250cm9sbGVyIGZvciB0aGUgRENULWNvZWZmaWNpZW50IGRhdGEuCisgIFRoaXMgY29udHJvbGxlciBoYW5kbGVzIE1DVSBhc3NlbWJseSwgaW5jbHVkaW5nIGluc2VydGlvbiBvZiBkdW1teSBEQ1QKKyAgYmxvY2tzIHdoZW4gbmVlZGVkIGF0IHRoZSByaWdodCBvciBib3R0b20gZWRnZS4gIFdoZW4gcGVyZm9ybWluZworICBIdWZmbWFuLWNvZGUgb3B0aW1pemF0aW9uIG9yIGVtaXR0aW5nIGEgbXVsdGlzY2FuIEpQRUcgZmlsZSwgdGhpcworICBjb250cm9sbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBidWZmZXJpbmcgdGhlIGZ1bGwgaW1hZ2UuICBUaGUgZXF1aXZhbGVudCBvZgorICBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyBvZiBzdWJzYW1wbGVkIGRhdGEgaXMgcHJvY2Vzc2VkIHBlciBjYWxsLAorICBldmVuIHdoZW4gdGhlIEpQRUcgZmlsZSBpcyBub25pbnRlcmxlYXZlZC4KKworKiBGb3J3YXJkIERDVCBhbmQgcXVhbnRpemF0aW9uOiBQZXJmb3JtIERDVCwgcXVhbnRpemUsIGFuZCBlbWl0IGNvZWZmaWNpZW50cy4KKyAgV29ya3Mgb24gb25lIG9yIG1vcmUgRENUIGJsb2NrcyBhdCBhIHRpbWUuICAoTm90ZTogdGhlIGNvZWZmaWNpZW50cyBhcmUgbm93CisgIGVtaXR0ZWQgaW4gbm9ybWFsIGFycmF5IG9yZGVyLCB3aGljaCB0aGUgZW50cm9weSBlbmNvZGVyIGlzIGV4cGVjdGVkIHRvCisgIGNvbnZlcnQgdG8gemlnemFnIG9yZGVyIGFzIG5lY2Vzc2FyeS4gIFByaW9yIHZlcnNpb25zIG9mIHRoZSBJSkcgY29kZSBkaWQKKyAgdGhlIGNvbnZlcnNpb24gdG8gemlnemFnIG9yZGVyIHdpdGhpbiB0aGUgcXVhbnRpemF0aW9uIHN0ZXAuKQorCisqIEVudHJvcHkgZW5jb2Rpbmc6IFBlcmZvcm0gSHVmZm1hbiBvciBhcml0aG1ldGljIGVudHJvcHkgY29kaW5nIGFuZCBlbWl0IHRoZQorICBjb2RlZCBkYXRhIHRvIHRoZSBkYXRhIGRlc3RpbmF0aW9uIG1vZHVsZS4gIFdvcmtzIG9uIG9uZSBNQ1UgcGVyIGNhbGwuCisgIEZvciBwcm9ncmVzc2l2ZSBKUEVHLCB0aGUgc2FtZSBEQ1QgYmxvY2tzIGFyZSBmZWQgdG8gdGhlIGVudHJvcHkgY29kZXIKKyAgZHVyaW5nIGVhY2ggcGFzcywgYW5kIHRoZSBjb2RlciBtdXN0IGVtaXQgdGhlIGFwcHJvcHJpYXRlIHN1YnNldCBvZgorICBjb2VmZmljaWVudHMuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBvYmplY3RzLCB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBpbmNsdWRlcyB0aGVzZQorb2JqZWN0czoKKworKiBNYXN0ZXIgY29udHJvbDogZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBhc3NlcyByZXF1aXJlZCwgY29udHJvbHMgb3ZlcmFsbAorICBhbmQgcGVyLXBhc3MgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG90aGVyIG1vZHVsZXMuCisKKyogTWFya2VyIHdyaXRpbmc6IGdlbmVyYXRlcyBKUEVHIG1hcmtlcnMgKGV4Y2VwdCBmb3IgUlNUbiwgd2hpY2ggaXMgZW1pdHRlZAorICBieSB0aGUgZW50cm9weSBlbmNvZGVyIHdoZW4gbmVlZGVkKS4KKworKiBEYXRhIGRlc3RpbmF0aW9uIG1hbmFnZXI6IHdyaXRlcyB0aGUgb3V0cHV0IEpQRUcgZGF0YXN0cmVhbSB0byBpdHMgZmluYWwKKyAgZGVzdGluYXRpb24gKGUuZy4sIGEgZmlsZSkuICBUaGUgZGVzdGluYXRpb24gbWFuYWdlciBzdXBwbGllZCB3aXRoIHRoZQorICBsaWJyYXJ5IGtub3dzIGhvdyB0byB3cml0ZSB0byBhIHN0ZGlvIHN0cmVhbSBvciB0byBhIG1lbW9yeSBidWZmZXI7CisgIGZvciBvdGhlciBiZWhhdmlvcnMsIHRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBtYXkgcHJvdmlkZSBpdHMgb3duCisgIGRlc3RpbmF0aW9uIG1hbmFnZXIuCisKKyogTWVtb3J5IG1hbmFnZXI6IGFsbG9jYXRlcyBhbmQgcmVsZWFzZXMgbWVtb3J5LCBjb250cm9scyB2aXJ0dWFsIGFycmF5cworICAod2l0aCBiYWNraW5nIHN0b3JlIG1hbmFnZW1lbnQsIHdoZXJlIHJlcXVpcmVkKS4KKworKiBFcnJvciBoYW5kbGVyOiBwZXJmb3JtcyBmb3JtYXR0aW5nIGFuZCBvdXRwdXQgb2YgZXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2VzOworICBkZXRlcm1pbmVzIGhhbmRsaW5nIG9mIG5vbmZhdGFsIGVycm9ycy4gIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBtYXkKKyAgb3ZlcnJpZGUgc29tZSBvciBhbGwgb2YgdGhpcyBvYmplY3QncyBtZXRob2RzIHRvIGNoYW5nZSBlcnJvciBoYW5kbGluZy4KKworKiBQcm9ncmVzcyBtb25pdG9yOiBzdXBwb3J0cyBvdXRwdXQgb2YgInBlcmNlbnQtZG9uZSIgcHJvZ3Jlc3MgcmVwb3J0cy4KKyAgVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBjYWxsYmFjayB0byB0aGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb246CisgIGlmIHdhbnRlZCwgaXQgbXVzdCBiZSBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb24uCisKK1RoZSBlcnJvciBoYW5kbGVyLCBkZXN0aW5hdGlvbiBtYW5hZ2VyLCBhbmQgcHJvZ3Jlc3MgbW9uaXRvciBvYmplY3RzIGFyZQorZGVmaW5lZCBhcyBzZXBhcmF0ZSBvYmplY3RzIGluIG9yZGVyIHRvIHNpbXBsaWZ5IGFwcGxpY2F0aW9uLXNwZWNpZmljCitjdXN0b21pemF0aW9uIG9mIHRoZSBKUEVHIGxpYnJhcnkuICBBIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uIG1heSBvdmVycmlkZQoraW5kaXZpZHVhbCBtZXRob2RzIG9yIHN1cHBseSBpdHMgb3duIGFsbC1uZXcgaW1wbGVtZW50YXRpb24gb2Ygb25lIG9mIHRoZXNlCitvYmplY3RzLiAgVGhlIG9iamVjdCBpbnRlcmZhY2VzIGZvciB0aGVzZSBvYmplY3RzIGFyZSB0aGVyZWZvcmUgdHJlYXRlZCBhcworcGFydCBvZiB0aGUgYXBwbGljYXRpb24gaW50ZXJmYWNlIG9mIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBvdGhlciBvYmplY3RzCithcmUgaW50ZXJuYWwgdG8gdGhlIGxpYnJhcnkuCisKK1RoZSBlcnJvciBoYW5kbGVyIGFuZCBtZW1vcnkgbWFuYWdlciBhcmUgc2hhcmVkIGJ5IEpQRUcgY29tcHJlc3Npb24gYW5kCitkZWNvbXByZXNzaW9uOyB0aGUgcHJvZ3Jlc3MgbW9uaXRvciwgaWYgdXNlZCwgbWF5IGJlIHNoYXJlZCBhcyB3ZWxsLgorCisKKyoqKiBEZWNvbXByZXNzaW9uIG9iamVjdCBzdHJ1Y3R1cmUgKioqCisKK0hlcmUgaXMgYSBza2V0Y2ggb2YgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSBKUEVHIGRlY29tcHJlc3Npb24gbGlicmFyeToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0gRW50cm9weSBkZWNvZGluZworICAgICAgICAgICAgICAgICAgfC0tIENvZWZmaWNpZW50IGNvbnRyb2xsZXIgLS18CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLSBEZXF1YW50aXplLCBJbnZlcnNlIERDVAorTWFpbiBjb250cm9sbGVyIC0tfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0gVXBzYW1wbGluZworICAgICAgICAgICAgICAgICAgfC0tIFBvc3Rwcm9jZXNzaW5nIGNvbnRyb2xsZXIgLS18ICAgfC0tIENvbG9yc3BhY2UgY29udmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0gQ29sb3IgcXVhbnRpemF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLSBDb2xvciBwcmVjaXNpb24gcmVkdWN0aW9uCisKK0FzIGJlZm9yZSwgdGhpcyBkaWFncmFtIGFsc28gcmVwcmVzZW50cyB0eXBpY2FsIGNvbnRyb2wgZmxvdy4gIFRoZSBvYmplY3RzCitzaG93biBhcmU6CisKKyogTWFpbiBjb250cm9sbGVyOiBidWZmZXIgY29udHJvbGxlciBmb3IgdGhlIHN1YnNhbXBsZWQtZGF0YSBidWZmZXIsIHdoaWNoCisgIGhvbGRzIHRoZSBvdXRwdXQgb2YgSlBFRyBkZWNvbXByZXNzaW9uIHByb3Blci4gIFRoaXMgY29udHJvbGxlcidzIHByaW1hcnkKKyAgdGFzayBpcyB0byBmZWVkIHRoZSBwb3N0cHJvY2Vzc2luZyBwcm9jZWR1cmUuICBTb21lIHVwc2FtcGxpbmcgYWxnb3JpdGhtcworICBtYXkgcmVxdWlyZSBjb250ZXh0IHJvd3MgYWJvdmUgYW5kIGJlbG93IHRoZSBjdXJyZW50IHJvdyBncm91cDsgd2hlbiB0aGlzCisgIGlzIHRydWUsIHRoZSBtYWluIGNvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGl0cyBidWZmZXIgc28gYXMKKyAgdG8gbWFrZSBjb250ZXh0IHJvd3MgYXZhaWxhYmxlLiAgSW4gdGhlIGN1cnJlbnQgZGVzaWduLCB0aGUgbWFpbiBidWZmZXIgaXMKKyAgYWx3YXlzIGEgc3RyaXAgYnVmZmVyOyBhIGZ1bGwtaW1hZ2UgYnVmZmVyIGlzIG5ldmVyIHJlcXVpcmVkLgorCisqIENvZWZmaWNpZW50IGNvbnRyb2xsZXI6IGJ1ZmZlciBjb250cm9sbGVyIGZvciB0aGUgRENULWNvZWZmaWNpZW50IGRhdGEuCisgIFRoaXMgY29udHJvbGxlciBoYW5kbGVzIE1DVSBkaXNhc3NlbWJseSwgaW5jbHVkaW5nIGRlbGV0aW9uIG9mIGFueSBkdW1teQorICBEQ1QgYmxvY2tzIGF0IHRoZSByaWdodCBvciBib3R0b20gZWRnZS4gIFdoZW4gcmVhZGluZyBhIG11bHRpc2NhbiBKUEVHCisgIGZpbGUsIHRoaXMgY29udHJvbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYnVmZmVyaW5nIHRoZSBmdWxsIGltYWdlLgorICAoQnVmZmVyaW5nIERDVCBjb2VmZmljaWVudHMsIHJhdGhlciB0aGFuIHNhbXBsZXMsIGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0CisgIHByb2dyZXNzaXZlIEpQRUcuKSAgVGhlIGVxdWl2YWxlbnQgb2Ygb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgb2YKKyAgc3Vic2FtcGxlZCBkYXRhIGlzIHByb2Nlc3NlZCBwZXIgY2FsbCwgZXZlbiB3aGVuIHRoZSBzb3VyY2UgSlBFRyBmaWxlIGlzCisgIG5vbmludGVybGVhdmVkLgorCisqIEVudHJvcHkgZGVjb2Rpbmc6IFJlYWQgY29kZWQgZGF0YSBmcm9tIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUgYW5kIHBlcmZvcm0KKyAgSHVmZm1hbiBvciBhcml0aG1ldGljIGVudHJvcHkgZGVjb2RpbmcuICBXb3JrcyBvbiBvbmUgTUNVIHBlciBjYWxsLgorICBGb3IgcHJvZ3Jlc3NpdmUgSlBFRyBkZWNvZGluZywgdGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIgc3VwcGxpZXMgdGhlIHByaW9yCisgIGNvZWZmaWNpZW50cyBvZiBlYWNoIE1DVSAoaW5pdGlhbGx5IGFsbCB6ZXJvZXMpLCB3aGljaCB0aGUgZW50cm9weSBkZWNvZGVyCisgIG1vZGlmaWVzIGluIGVhY2ggc2Nhbi4KKworKiBEZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Q6IGxpa2UgaXQgc2F5cy4gIE5vdGUgdGhhdCB0aGUgY29lZmZpY2llbnRzCisgIGJ1ZmZlcmVkIGJ5IHRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyIGhhdmUgTk9UIGJlZW4gZGVxdWFudGl6ZWQ7IHdlCisgIG1lcmdlIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBpbnRvIGEgc2luZ2xlIHN0ZXAgZm9yIHNwZWVkIHJlYXNvbnMuCisgIFdoZW4gc2NhbGVkLWRvd24gb3V0cHV0IGlzIGFza2VkIGZvciwgc2ltcGxpZmllZCBEQ1QgYWxnb3JpdGhtcyBtYXkgYmUgdXNlZAorICB0aGF0IGVtaXQgZmV3ZXIgc2FtcGxlcyBwZXIgRENUIGJsb2NrLCBub3QgdGhlIGZ1bGwgOHg4LiAgV29ya3Mgb24gb25lIERDVAorICBibG9jayBhdCBhIHRpbWUuCisKKyogUG9zdHByb2Nlc3NpbmcgY29udHJvbGxlcjogYnVmZmVyIGNvbnRyb2xsZXIgZm9yIHRoZSBjb2xvciBxdWFudGl6YXRpb24KKyAgaW5wdXQgYnVmZmVyLCB3aGVuIHF1YW50aXphdGlvbiBpcyBpbiB1c2UuICAoV2l0aG91dCBxdWFudGl6YXRpb24sIHRoaXMKKyAgY29udHJvbGxlciBqdXN0IGNhbGxzIHRoZSB1cHNhbXBsZXIuKSAgRm9yIHR3by1wYXNzIHF1YW50aXphdGlvbiwgdGhpcworICBjb250cm9sbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBidWZmZXJpbmcgdGhlIGZ1bGwtaW1hZ2UgZGF0YS4KKworKiBVcHNhbXBsaW5nOiByZXN0b3JlcyBjaHJvbWEgY29tcG9uZW50cyB0byBmdWxsIHNpemUuICAoTWF5IHN1cHBvcnQgbW9yZQorICBnZW5lcmFsIG91dHB1dCByZXNjYWxpbmcsIHRvby4gIE5vdGUgdGhhdCBpZiB1bmRlcnNpemVkIERDVCBvdXRwdXRzIGhhdmUKKyAgYmVlbiBlbWl0dGVkIGJ5IHRoZSBEQ1QgbW9kdWxlLCB0aGlzIG1vZHVsZSBtdXN0IGFkanVzdCBzbyB0aGF0IHByb3Blcmx5CisgIHNpemVkIG91dHB1dHMgYXJlIGNyZWF0ZWQuKSAgV29ya3Mgb24gb25lIHJvdyBncm91cCBhdCBhIHRpbWUuICBUaGlzIG1vZHVsZQorICBhbHNvIGNhbGxzIHRoZSBjb2xvciBjb252ZXJzaW9uIG1vZHVsZSwgc28gaXRzIHRvcCBsZXZlbCBpcyBlZmZlY3RpdmVseSBhCisgIGJ1ZmZlciBjb250cm9sbGVyIGZvciB0aGUgdXBzYW1wbGluZy0+Y29sb3IgY29udmVyc2lvbiBidWZmZXIuICBIb3dldmVyLCBpbgorICBhbGwgYnV0IHRoZSBoaWdoZXN0LXF1YWxpdHkgb3BlcmF0aW5nIG1vZGVzLCB1cHNhbXBsaW5nIGFuZCBjb2xvcgorICBjb252ZXJzaW9uIGFyZSBsaWtlbHkgdG8gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgc3RlcC4KKworKiBDb2xvcnNwYWNlIGNvbnZlcnNpb246IGNvbnZlcnQgZnJvbSBKUEVHIGNvbG9yIHNwYWNlIHRvIG91dHB1dCBjb2xvciBzcGFjZSwKKyAgYW5kIGNoYW5nZSBkYXRhIGxheW91dCBmcm9tIHNlcGFyYXRlIGNvbXBvbmVudCBwbGFuZXMgdG8gcGl4ZWwtaW50ZXJsZWF2ZWQuCisgIFdvcmtzIG9uIG9uZSBwaXhlbCByb3cgYXQgYSB0aW1lLgorCisqIENvbG9yIHF1YW50aXphdGlvbjogcmVkdWNlIHRoZSBkYXRhIHRvIGNvbG9ybWFwcGVkIGZvcm0sIHVzaW5nIGVpdGhlciBhbgorICBleHRlcm5hbGx5IHNwZWNpZmllZCBjb2xvcm1hcCBvciBhbiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBvbmUuICBUaGlzIG1vZHVsZQorICBpcyBub3QgdXNlZCBmb3IgZnVsbC1jb2xvciBvdXRwdXQuICBXb3JrcyBvbiBvbmUgcGl4ZWwgcm93IGF0IGEgdGltZTsgbWF5CisgIHJlcXVpcmUgdHdvIHBhc3NlcyB0byBnZW5lcmF0ZSBhIGNvbG9yIG1hcC4gIE5vdGUgdGhhdCB0aGUgb3V0cHV0IHdpbGwKKyAgYWx3YXlzIGJlIGEgc2luZ2xlIGNvbXBvbmVudCByZXByZXNlbnRpbmcgY29sb3JtYXAgaW5kZXhlcy4gIEluIHRoZSBjdXJyZW50CisgIGRlc2lnbiwgdGhlIG91dHB1dCB2YWx1ZXMgYXJlIEpTQU1QTEVzLCBzbyBhbiA4LWJpdCBjb21waWxhdGlvbiBjYW5ub3QKKyAgcXVhbnRpemUgdG8gbW9yZSB0aGFuIDI1NiBjb2xvcnMuICBUaGlzIGlzIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbSBpbgorICBwcmFjdGljZS4KKworKiBDb2xvciByZWR1Y3Rpb246IHRoaXMgbW9kdWxlIGhhbmRsZXMgY29sb3IgcHJlY2lzaW9uIHJlZHVjdGlvbiwgZS5nLiwKKyAgZ2VuZXJhdGluZyAxNS1iaXQgY29sb3IgKDUgYml0cy9wcmltYXJ5KSBmcm9tIEpQRUcncyAyNC1iaXQgb3V0cHV0LgorICBOb3QgcXVpdGUgY2xlYXIgeWV0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLi4uIHNob3VsZCB3ZSBtZXJnZSBpdCB3aXRoCisgIGNvbG9yc3BhY2UgY29udmVyc2lvbj8/PworCitOb3RlIHRoYXQgc29tZSBoaWdoLXNwZWVkIG9wZXJhdGluZyBtb2RlcyBtaWdodCBjb25kZW5zZSB0aGUgZW50aXJlCitwb3N0cHJvY2Vzc2luZyBzZXF1ZW5jZSB0byBhIHNpbmdsZSBtb2R1bGUgKHVwc2FtcGxlLCBjb2xvciBjb252ZXJ0LCBhbmQKK3F1YW50aXplIGluIG9uZSBzdGVwKS4KKworSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIG9iamVjdHMsIHRoZSBkZWNvbXByZXNzaW9uIGxpYnJhcnkgaW5jbHVkZXMgdGhlc2UKK29iamVjdHM6CisKKyogTWFzdGVyIGNvbnRyb2w6IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwYXNzZXMgcmVxdWlyZWQsIGNvbnRyb2xzIG92ZXJhbGwKKyAgYW5kIHBlci1wYXNzIGluaXRpYWxpemF0aW9uIG9mIHRoZSBvdGhlciBtb2R1bGVzLiAgVGhpcyBpcyBzdWJkaXZpZGVkIGludG8KKyAgaW5wdXQgYW5kIG91dHB1dCBjb250cm9sOiBqZGlucHV0LmMgY29udHJvbHMgb25seSBpbnB1dC1zaWRlIHByb2Nlc3NpbmcsCisgIHdoaWxlIGpkbWFzdGVyLmMgaGFuZGxlcyBvdmVyYWxsIGluaXRpYWxpemF0aW9uIGFuZCBvdXRwdXQtc2lkZSBjb250cm9sLgorCisqIE1hcmtlciByZWFkaW5nOiBkZWNvZGVzIEpQRUcgbWFya2VycyAoZXhjZXB0IGZvciBSU1RuKS4KKworKiBEYXRhIHNvdXJjZSBtYW5hZ2VyOiBzdXBwbGllcyB0aGUgaW5wdXQgSlBFRyBkYXRhc3RyZWFtLiAgVGhlIHNvdXJjZQorICBtYW5hZ2VyIHN1cHBsaWVkIHdpdGggdGhlIGxpYnJhcnkga25vd3MgaG93IHRvIHJlYWQgZnJvbSBhIHN0ZGlvIHN0cmVhbQorICBvciBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjsgIGZvciBvdGhlciBiZWhhdmlvcnMsIHRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbgorICBtYXkgcHJvdmlkZSBpdHMgb3duIHNvdXJjZSBtYW5hZ2VyLgorCisqIE1lbW9yeSBtYW5hZ2VyOiBzYW1lIGFzIGZvciBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisqIEVycm9yIGhhbmRsZXI6IHNhbWUgYXMgZm9yIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyogUHJvZ3Jlc3MgbW9uaXRvcjogc2FtZSBhcyBmb3IgY29tcHJlc3Npb24gbGlicmFyeS4KKworQXMgd2l0aCBjb21wcmVzc2lvbiwgdGhlIGRhdGEgc291cmNlIG1hbmFnZXIsIGVycm9yIGhhbmRsZXIsIGFuZCBwcm9ncmVzcworbW9uaXRvciBhcmUgY2FuZGlkYXRlcyBmb3IgcmVwbGFjZW1lbnQgYnkgYSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbi4KKworCisqKiogRGVjb21wcmVzc2lvbiBpbnB1dCBhbmQgb3V0cHV0IHNlcGFyYXRpb24gKioqCisKK1RvIHN1cHBvcnQgZWZmaWNpZW50IGluY3JlbWVudGFsIGRpc3BsYXkgb2YgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlcywgdGhlCitkZWNvbXByZXNzb3IgaXMgZGl2aWRlZCBpbnRvIHR3byBzZWN0aW9ucyB0aGF0IGNhbiBydW4gaW5kZXBlbmRlbnRseToKKworMS4gRGF0YSBpbnB1dCBpbmNsdWRlcyBtYXJrZXIgcGFyc2luZywgZW50cm9weSBkZWNvZGluZywgYW5kIGlucHV0IGludG8gdGhlCisgICBjb2VmZmljaWVudCBjb250cm9sbGVyJ3MgRENUIGNvZWZmaWNpZW50IGJ1ZmZlci4gIE5vdGUgdGhhdCB0aGlzCisgICBwcm9jZXNzaW5nIGlzIHJlbGF0aXZlbHkgY2hlYXAgYW5kIGZhc3QuCisKKzIuIERhdGEgb3V0cHV0IHJlYWRzIGZyb20gdGhlIERDVCBjb2VmZmljaWVudCBidWZmZXIgYW5kIHBlcmZvcm1zIHRoZSBJRENUCisgICBhbmQgYWxsIHBvc3Rwcm9jZXNzaW5nIHN0ZXBzLgorCitGb3IgYSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGUsIHRoZSBkYXRhIGlucHV0IHByb2Nlc3NpbmcgaXMgYWxsb3dlZCB0byBnZXQKK2FyYml0cmFyaWx5IGZhciBhaGVhZCBvZiB0aGUgZGF0YSBvdXRwdXQgcHJvY2Vzc2luZy4gIChUaGlzIG9jY3VycyBvbmx5CitpZiB0aGUgYXBwbGljYXRpb24gY2FsbHMganBlZ19jb25zdW1lX2lucHV0KCk7IG90aGVyd2lzZSBpbnB1dCBhbmQgb3V0cHV0CitydW4gaW4gbG9ja3N0ZXAsIHNpbmNlIHRoZSBpbnB1dCBzZWN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIG91dHB1dAorc2VjdGlvbiBuZWVkcyBtb3JlIGRhdGEuKSAgSW4gdGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBhdm9pZCBtYWtpbmcKK2V4dHJhIGRpc3BsYXkgcGFzc2VzIHdoZW4gZGF0YSBpcyBhcnJpdmluZyBmYXN0ZXIgdGhhbiB0aGUgZGlzcGxheSBwYXNzCitjYW4gcnVuLiAgRnVydGhlcm1vcmUsIGl0IGlzIHBvc3NpYmxlIHRvIGFib3J0IGFuIG91dHB1dCBwYXNzIHdpdGhvdXQKK2xvc2luZyBhbnl0aGluZywgc2luY2UgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBpcyByZWFkLW9ubHkgYXMgZmFyIGFzIHRoZQorb3V0cHV0IHNlY3Rpb24gaXMgY29uY2VybmVkLiAgU2VlIGxpYmpwZWcudHh0IGZvciBtb3JlIGRldGFpbC4KKworQSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGFycmF5IGlzIG9ubHkgY3JlYXRlZCBpZiB0aGUgSlBFRyBmaWxlIGhhcyBtdWx0aXBsZQorc2NhbnMgKG9yIGlmIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZXMgYnVmZmVyZWQtaW1hZ2UgbW9kZSBhbnl3YXkpLiAgV2hlbgorcmVhZGluZyBhIHNpbmdsZS1zY2FuIGZpbGUsIHRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyIG5vcm1hbGx5IGNyZWF0ZXMgb25seQorYSBvbmUtTUNVIGJ1ZmZlciwgc28gaW5wdXQgYW5kIG91dHB1dCBwcm9jZXNzaW5nIG11c3QgcnVuIGluIGxvY2tzdGVwIGluIHRoaXMKK2Nhc2UuICBqcGVnX2NvbnN1bWVfaW5wdXQoKSBpcyBlZmZlY3RpdmVseSBhIG5vLW9wIGluIHRoaXMgc2l0dWF0aW9uLgorCitUaGUgbWFpbiBpbXBhY3Qgb2YgZGl2aWRpbmcgdGhlIGRlY29tcHJlc3NvciBpbiB0aGlzIGZhc2hpb24gaXMgdGhhdCB3ZSBtdXN0CitiZSB2ZXJ5IGNhcmVmdWwgd2l0aCBzaGFyZWQgdmFyaWFibGVzIGluIHRoZSBjaW5mbyBkYXRhIHN0cnVjdHVyZS4gIEVhY2gKK3ZhcmlhYmxlIHRoYXQgY2FuIGNoYW5nZSBkdXJpbmcgdGhlIGNvdXJzZSBvZiBkZWNvbXByZXNzaW9uIG11c3QgYmUKK2NsYXNzaWZpZWQgYXMgYmVsb25naW5nIHRvIGRhdGEgaW5wdXQgb3IgZGF0YSBvdXRwdXQsIGFuZCBlYWNoIHNlY3Rpb24gbXVzdAorbG9vayBvbmx5IGF0IGl0cyBvd24gdmFyaWFibGVzLiAgRm9yIGV4YW1wbGUsIHRoZSBkYXRhIG91dHB1dCBzZWN0aW9uIG1heSBub3QKK2RlcGVuZCBvbiBhbnkgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IGRlc2NyaWJlIHRoZSBjdXJyZW50IHNjYW4gaW4gdGhlIEpQRUcKK2ZpbGUsIGJlY2F1c2UgdGhlc2UgbWF5IGNoYW5nZSBhcyB0aGUgZGF0YSBpbnB1dCBzZWN0aW9uIGFkdmFuY2VzIGludG8gYSBuZXcKK3NjYW4uCisKK1RoZSBwcm9ncmVzcyBtb25pdG9yIGlzIChzb21ld2hhdCBhcmJpdHJhcmlseSkgZGVmaW5lZCB0byB0cmVhdCBpbnB1dCBvZiB0aGUKK2ZpbGUgYXMgb25lIHBhc3Mgd2hlbiBidWZmZXJlZC1pbWFnZSBtb2RlIGlzIG5vdCB1c2VkLCBhbmQgdG8gaWdub3JlIGRhdGEKK2lucHV0IHdvcmsgY29tcGxldGVseSB3aGVuIGJ1ZmZlcmVkLWltYWdlIG1vZGUgaXMgdXNlZC4gIE5vdGUgdGhhdCB0aGUKK2xpYnJhcnkgaGFzIG5vIHJlbGlhYmxlIHdheSB0byBwcmVkaWN0IHRoZSBudW1iZXIgb2YgcGFzc2VzIHdoZW4gZGVhbGluZword2l0aCBhIHByb2dyZXNzaXZlIEpQRUcgZmlsZSwgbm9yIGNhbiBpdCBwcmVkaWN0IHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBhc3NlcworaW4gYnVmZmVyZWQtaW1hZ2UgbW9kZS4gIFNvIHRoZSB3b3JrIGVzdGltYXRlIGlzIGluaGVyZW50bHkgYm9ndXMgYW55d2F5LgorCitObyBjb21wYXJhYmxlIGRpdmlzaW9uIGlzIGN1cnJlbnRseSBtYWRlIGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LCBiZWNhdXNlCit0aGVyZSBpc24ndCBhbnkgcmVhbCBuZWVkIGZvciBpdC4KKworCisqKiogRGF0YSBmb3JtYXRzICoqKgorCitBcnJheXMgb2YgcGl4ZWwgc2FtcGxlIHZhbHVlcyB1c2UgdGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZToKKworICAgIHR5cGVkZWYgc29tZXRoaW5nIEpTQU1QTEU7ICAgICAgICAgIGEgcGl4ZWwgY29tcG9uZW50IHZhbHVlLCAwLi5NQVhKU0FNUExFCisgICAgdHlwZWRlZiBKU0FNUExFICpKU0FNUFJPVzsgICAgICAgICAgcHRyIHRvIGEgcm93IG9mIHNhbXBsZXMKKyAgICB0eXBlZGVmIEpTQU1QUk9XICpKU0FNUEFSUkFZOyAgICAgICBwdHIgdG8gYSBsaXN0IG9mIHJvd3MKKyAgICB0eXBlZGVmIEpTQU1QQVJSQVkgKkpTQU1QSU1BR0U7ICAgICBwdHIgdG8gYSBsaXN0IG9mIGNvbG9yLWNvbXBvbmVudCBhcnJheXMKKworVGhlIGJhc2ljIGVsZW1lbnQgdHlwZSBKU0FNUExFIHdpbGwgdHlwaWNhbGx5IGJlIG9uZSBvZiB1bnNpZ25lZCBjaGFyLAorKHNpZ25lZCkgY2hhciwgb3Igc2hvcnQuICBTaG9ydCB3aWxsIGJlIHVzZWQgaWYgc2FtcGxlcyB3aWRlciB0aGFuIDggYml0cyBhcmUKK3RvIGJlIHN1cHBvcnRlZCAodGhpcyBpcyBhIGNvbXBpbGUtdGltZSBvcHRpb24pLiAgT3RoZXJ3aXNlLCB1bnNpZ25lZCBjaGFyIGlzCit1c2VkIGlmIHBvc3NpYmxlLiAgSWYgdGhlIGNvbXBpbGVyIG9ubHkgc3VwcG9ydHMgc2lnbmVkIGNoYXJzLCB0aGVuIGl0IGlzCituZWNlc3NhcnkgdG8gbWFzayBvZmYgdGhlIHZhbHVlIHdoZW4gcmVhZGluZy4gIFRodXMsIGFsbCByZWFkcyBvZiBKU0FNUExFCit2YWx1ZXMgbXVzdCBiZSBjb2RlZCBhcyAiR0VUSlNBTVBMRSh2YWx1ZSkiLCB3aGVyZSB0aGUgbWFjcm8gd2lsbCBiZSBkZWZpbmVkCithcyAiKCh2YWx1ZSkgJiAweEZGKSIgb24gc2lnbmVkLWNoYXIgbWFjaGluZXMgYW5kICIoKGludCkgKHZhbHVlKSkiIGVsc2V3aGVyZS4KKworV2l0aCB0aGVzZSBjb252ZW50aW9ucywgSlNBTVBMRSB2YWx1ZXMgY2FuIGJlIGFzc3VtZWQgdG8gYmUgPj0gMC4gIFRoaXMgaGVscHMKK3NpbXBsaWZ5IGNvcnJlY3Qgcm91bmRpbmcgZHVyaW5nIGRvd25zYW1wbGluZywgZXRjLiAgVGhlIEpQRUcgc3RhbmRhcmQncworc3BlY2lmaWNhdGlvbiB0aGF0IHNhbXBsZSB2YWx1ZXMgcnVuIGZyb20gLTEyOC4uMTI3IGlzIGFjY29tbW9kYXRlZCBieQorc3VidHJhY3RpbmcgMTI4IGZyb20gdGhlIHNhbXBsZSB2YWx1ZSBpbiB0aGUgRENUIHN0ZXAuICBTaW1pbGFybHksIGR1cmluZworZGVjb21wcmVzc2lvbiB0aGUgb3V0cHV0IG9mIHRoZSBJRENUIHN0ZXAgd2lsbCBiZSBpbW1lZGlhdGVseSBzaGlmdGVkIGJhY2sgdG8KKzAuLjI1NS4gIChOQjogZGlmZmVyZW50IHZhbHVlcyBhcmUgcmVxdWlyZWQgd2hlbiAxMi1iaXQgc2FtcGxlcyBhcmUgaW4gdXNlLgorVGhlIGNvZGUgaXMgd3JpdHRlbiBpbiB0ZXJtcyBvZiBNQVhKU0FNUExFIGFuZCBDRU5URVJKU0FNUExFLCB3aGljaCB3aWxsIGJlCitkZWZpbmVkIGFzIDI1NSBhbmQgMTI4IHJlc3BlY3RpdmVseSBpbiBhbiA4LWJpdCBpbXBsZW1lbnRhdGlvbiwgYW5kIGFzIDQwOTUKK2FuZCAyMDQ4IGluIGEgMTItYml0IGltcGxlbWVudGF0aW9uLikKKworV2UgdXNlIGEgcG9pbnRlciBwZXIgcm93LCByYXRoZXIgdGhhbiBhIHR3by1kaW1lbnNpb25hbCBKU0FNUExFIGFycmF5LiAgVGhpcworY2hvaWNlIGNvc3RzIG9ubHkgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGFuZCBoYXMgc2V2ZXJhbCBiZW5lZml0czoKKyogQ29kZSB1c2luZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgZG9lc24ndCBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRlZCB3aWR0aCBvZgorICB0aGUgcm93cy4gIFRoaXMgc2ltcGxpZmllcyBlZGdlIGV4cGFuc2lvbi9jb21wcmVzc2lvbiwgc2luY2Ugd2UgY2FuIHdvcmsKKyAgaW4gYW4gYXJyYXkgdGhhdCdzIHdpZGVyIHRoYW4gdGhlIGxvZ2ljYWwgcGljdHVyZSB3aWR0aC4KKyogSW5kZXhpbmcgZG9lc24ndCByZXF1aXJlIG11bHRpcGxpY2F0aW9uOyB0aGlzIGlzIGEgcGVyZm9ybWFuY2Ugd2luIG9uIG1hbnkKKyAgbWFjaGluZXMuCisqIEFycmF5cyB3aXRoIG1vcmUgdGhhbiA2NEsgdG90YWwgZWxlbWVudHMgY2FuIGJlIHN1cHBvcnRlZCBldmVuIG9uIG1hY2hpbmVzCisgIHdoZXJlIG1hbGxvYygpIGNhbm5vdCBhbGxvY2F0ZSBjaHVua3MgbGFyZ2VyIHRoYW4gNjRLLgorKiBUaGUgcm93cyBmb3JtaW5nIGEgY29tcG9uZW50IGFycmF5IG1heSBiZSBhbGxvY2F0ZWQgYXQgZGlmZmVyZW50IHRpbWVzCisgIHdpdGhvdXQgZXh0cmEgY29weWluZy4gIFRoaXMgdHJpY2sgYWxsb3dzIHNvbWUgc3BlZWR1cHMgaW4gc21vb3RoaW5nIHN0ZXBzCisgIHRoYXQgbmVlZCBhY2Nlc3MgdG8gdGhlIHByZXZpb3VzIGFuZCBuZXh0IHJvd3MuCisKK05vdGUgdGhhdCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBhcnJheTsgd2UgZG9uJ3QgdXNlIHRoZQordHJhZGl0aW9uYWwgbGF5b3V0IGluIHdoaWNoIHRoZSBjb21wb25lbnRzIG9mIGEgcGl4ZWwgYXJlIHN0b3JlZCB0b2dldGhlci4KK1RoaXMgc2ltcGxpZmllcyBjb2Rpbmcgb2YgbW9kdWxlcyB0aGF0IHdvcmsgb24gZWFjaCBjb21wb25lbnQgaW5kZXBlbmRlbnRseSwKK2JlY2F1c2UgdGhleSBkb24ndCBuZWVkIHRvIGtub3cgaG93IG1hbnkgY29tcG9uZW50cyB0aGVyZSBhcmUuICBGdXJ0aGVybW9yZSwKK3dlIGNhbiByZWFkIG9yIHdyaXRlIGVhY2ggY29tcG9uZW50IHRvIGEgdGVtcG9yYXJ5IGZpbGUgaW5kZXBlbmRlbnRseSwgd2hpY2gKK2lzIGhlbHBmdWwgd2hlbiBkZWFsaW5nIHdpdGggbm9uaW50ZXJsZWF2ZWQgSlBFRyBmaWxlcy4KKworSW4gZ2VuZXJhbCwgYSBzcGVjaWZpYyBzYW1wbGUgdmFsdWUgaXMgYWNjZXNzZWQgYnkgY29kZSBzdWNoIGFzCisgICAgICAgIEdFVEpTQU1QTEUoaW1hZ2VbY29sb3Jjb21wb25lbnRdW3Jvd11bY29sXSkKK3doZXJlIGNvbCBpcyBtZWFzdXJlZCBmcm9tIHRoZSBpbWFnZSBsZWZ0IGVkZ2UsIGJ1dCByb3cgaXMgbWVhc3VyZWQgZnJvbSB0aGUKK2ZpcnN0IHNhbXBsZSByb3cgY3VycmVudGx5IGluIG1lbW9yeS4gIEVpdGhlciBvZiB0aGUgZmlyc3QgdHdvIGluZGV4aW5ncyBjYW4KK2JlIHByZWNvbXB1dGVkIGJ5IGNvcHlpbmcgdGhlIHJlbGV2YW50IHBvaW50ZXIuCisKKworU2luY2UgbW9zdCBpbWFnZS1wcm9jZXNzaW5nIGFwcGxpY2F0aW9ucyBwcmVmZXIgdG8gd29yayBvbiBpbWFnZXMgaW4gd2hpY2gKK3RoZSBjb21wb25lbnRzIG9mIGEgcGl4ZWwgYXJlIHN0b3JlZCB0b2dldGhlciwgdGhlIGRhdGEgcGFzc2VkIHRvIG9yIGZyb20gdGhlCitzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiB1c2VzIHRoZSB0cmFkaXRpb25hbCBjb252ZW50aW9uOiBhIHNpbmdsZSBwaXhlbCBpcworcmVwcmVzZW50ZWQgYnkgTiBjb25zZWN1dGl2ZSBKU0FNUExFIHZhbHVlcywgYW5kIGFuIGltYWdlIHJvdyBpcyBhbiBhcnJheSBvZgorKCMgb2YgY29sb3IgY29tcG9uZW50cykqKGltYWdlIHdpZHRoKSBKU0FNUExFcy4gIE9uZSBvciBtb3JlIHJvd3Mgb2YgZGF0YSBjYW4KK2JlIHJlcHJlc2VudGVkIGJ5IGEgcG9pbnRlciBvZiB0eXBlIEpTQU1QQVJSQVkgaW4gdGhpcyBzY2hlbWUuICBUaGlzIHNjaGVtZSBpcworY29udmVydGVkIHRvIGNvbXBvbmVudC13aXNlIHN0b3JhZ2UgaW5zaWRlIHRoZSBKUEVHIGxpYnJhcnkuICAoQXBwbGljYXRpb25zCit0aGF0IHdhbnQgdG8gc2tpcCBKUEVHIHByZXByb2Nlc3Npbmcgb3IgcG9zdHByb2Nlc3Npbmcgd2lsbCBoYXZlIHRvIGNvbnRlbmQKK3dpdGggY29tcG9uZW50LXdpc2Ugc3RvcmFnZS4pCisKKworQXJyYXlzIG9mIERDVC1jb2VmZmljaWVudCB2YWx1ZXMgdXNlIHRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmU6CisKKyAgICB0eXBlZGVmIHNob3J0IEpDT0VGOyAgICAgICAgICAgICAgICBhIDE2LWJpdCBzaWduZWQgaW50ZWdlcgorICAgIHR5cGVkZWYgSkNPRUYgSkJMT0NLW0RDVFNJWkUyXTsgICAgIGFuIDh4OCBibG9jayBvZiBjb2VmZmljaWVudHMKKyAgICB0eXBlZGVmIEpCTE9DSyAqSkJMT0NLUk9XOyAgICAgICAgICBwdHIgdG8gb25lIGhvcml6b250YWwgcm93IG9mIDh4OCBibG9ja3MKKyAgICB0eXBlZGVmIEpCTE9DS1JPVyAqSkJMT0NLQVJSQVk7ICAgICBwdHIgdG8gYSBsaXN0IG9mIHN1Y2ggcm93cworICAgIHR5cGVkZWYgSkJMT0NLQVJSQVkgKkpCTE9DS0lNQUdFOyAgIHB0ciB0byBhIGxpc3Qgb2YgY29sb3IgY29tcG9uZW50IGFycmF5cworCitUaGUgdW5kZXJseWluZyB0eXBlIGlzIGF0IGxlYXN0IGEgMTYtYml0IHNpZ25lZCBpbnRlZ2VyOyB3aGlsZSAic2hvcnQiIGlzIGJpZworZW5vdWdoIG9uIGFsbCBtYWNoaW5lcyBvZiBpbnRlcmVzdCwgb24gc29tZSBtYWNoaW5lcyBpdCBpcyBwcmVmZXJhYmxlIHRvIHVzZQorImludCIgZm9yIHNwZWVkIHJlYXNvbnMsIGRlc3BpdGUgdGhlIHN0b3JhZ2UgY29zdC4gIENvZWZmaWNpZW50cyBhcmUgZ3JvdXBlZAoraW50byA4eDggYmxvY2tzIChidXQgd2UgYWx3YXlzIHVzZSAjZGVmaW5lcyBEQ1RTSVpFIGFuZCBEQ1RTSVpFMiByYXRoZXIgdGhhbgorIjgiIGFuZCAiNjQiKS4KKworVGhlIGNvbnRlbnRzIG9mIGEgY29lZmZpY2llbnQgYmxvY2sgbWF5IGJlIGluIGVpdGhlciAibmF0dXJhbCIgb3IgemlnemFnZ2VkCitvcmRlciwgYW5kIG1heSBiZSB0cnVlIHZhbHVlcyBvciBkaXZpZGVkIGJ5IHRoZSBxdWFudGl6YXRpb24gY29lZmZpY2llbnRzLAorZGVwZW5kaW5nIG9uIHdoZXJlIHRoZSBibG9jayBpcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZS4gIEluIHRoZSBjdXJyZW50CitsaWJyYXJ5LCBjb2VmZmljaWVudCBibG9ja3MgYXJlIGtlcHQgaW4gbmF0dXJhbCBvcmRlciBldmVyeXdoZXJlOyB0aGUgZW50cm9weQorY29kZWNzIHppZ3phZyBvciBkZXppZ3phZyB0aGUgZGF0YSBhcyBpdCBpcyB3cml0dGVuIG9yIHJlYWQuICBUaGUgYmxvY2tzCitjb250YWluIHF1YW50aXplZCBjb2VmZmljaWVudHMgZXZlcnl3aGVyZSBvdXRzaWRlIHRoZSBEQ1QvSURDVCBzdWJzeXN0ZW1zLgorKFRoaXMgbGF0dGVyIGRlY2lzaW9uIG1heSBuZWVkIHRvIGJlIHJldmlzaXRlZCB0byBzdXBwb3J0IHZhcmlhYmxlCitxdWFudGl6YXRpb24gYSBsYSBKUEVHIFBhcnQgMy4pCisKK05vdGljZSB0aGF0IHRoZSBhbGxvY2F0aW9uIHVuaXQgaXMgbm93IGEgcm93IG9mIDh4OCBibG9ja3MsIGNvcnJlc3BvbmRpbmcgdG8KK2VpZ2h0IHJvd3Mgb2Ygc2FtcGxlcy4gIE90aGVyd2lzZSB0aGUgc3RydWN0dXJlIGlzIG11Y2ggdGhlIHNhbWUgYXMgZm9yCitzYW1wbGVzLCBhbmQgZm9yIHRoZSBzYW1lIHJlYXNvbnMuCisKKworKioqIFN1c3BlbmRhYmxlIHByb2Nlc3NpbmcgKioqCisKK0luIHNvbWUgYXBwbGljYXRpb25zIGl0IGlzIGRlc2lyYWJsZSB0byB1c2UgdGhlIEpQRUcgbGlicmFyeSBhcyBhbgoraW5jcmVtZW50YWwsIG1lbW9yeS10by1tZW1vcnkgZmlsdGVyLiAgSW4gdGhpcyBzaXR1YXRpb24gdGhlIGRhdGEgc291cmNlIG9yCitkZXN0aW5hdGlvbiBtYXkgYmUgYSBsaW1pdGVkLXNpemUgYnVmZmVyLCBhbmQgd2UgY2FuJ3QgcmVseSBvbiBiZWluZyBhYmxlIHRvCitlbXB0eSBvciByZWZpbGwgdGhlIGJ1ZmZlciBhdCBhcmJpdHJhcnkgdGltZXMuICBJbnN0ZWFkIHRoZSBhcHBsaWNhdGlvbiB3b3VsZAorbGlrZSB0byBoYXZlIGNvbnRyb2wgcmV0dXJuIGZyb20gdGhlIGxpYnJhcnkgYXQgYnVmZmVyIG92ZXJmbG93L3VuZGVycnVuLCBhbmQKK3RoZW4gcmVzdW1lIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gYXQgYSBsYXRlciB0aW1lLgorCitUaGlzIHNjZW5hcmlvIGlzIHN1cHBvcnRlZCBmb3Igc2ltcGxlIGNhc2VzLiAgKEZvciBhbnl0aGluZyBtb3JlIGNvbXBsZXgsIHdlCityZWNvbW1lbmQgdGhhdCB0aGUgYXBwbGljYXRpb24gImJpdGUgdGhlIGJ1bGxldCIgYW5kIGRldmVsb3AgcmVhbCBtdWx0aXRhc2tpbmcKK2NhcGFiaWxpdHkuKSAgVGhlIGxpYmpwZWcudHh0IGZpbGUgZ29lcyBpbnRvIG1vcmUgZGV0YWlsIGFib3V0IHRoZSB1c2FnZSBhbmQKK2xpbWl0YXRpb25zIG9mIHRoaXMgY2FwYWJpbGl0eTsgaGVyZSB3ZSBhZGRyZXNzIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGxpYnJhcnkKK3N0cnVjdHVyZS4KKworVGhlIGVzc2VuY2Ugb2YgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZW50cm9weSBjb2RlYyAoY29kZXIgb3IgZGVjb2RlcikgbXVzdAorYmUgcHJlcGFyZWQgdG8gc3RvcCBhdCBhcmJpdHJhcnkgdGltZXMuICBJbiB0dXJuLCB0aGUgY29udHJvbGxlcnMgdGhhdCBjYWxsCit0aGUgZW50cm9weSBjb2RlYyBtdXN0IGJlIGFibGUgdG8gc3RvcCBiZWZvcmUgaGF2aW5nIHByb2R1Y2VkIG9yIGNvbnN1bWVkIGFsbAordGhlIGRhdGEgdGhhdCB0aGV5IG5vcm1hbGx5IHdvdWxkIGhhbmRsZSBpbiBvbmUgY2FsbC4gIFRoYXQgcGFydCBpcyByZWFzb25hYmx5CitzdHJhaWdodGZvcndhcmQ6IHdlIG1ha2UgdGhlIGNvbnRyb2xsZXIgY2FsbCBpbnRlcmZhY2VzIGluY2x1ZGUgInByb2dyZXNzCitjb3VudGVycyIgd2hpY2ggaW5kaWNhdGUgdGhlIG51bWJlciBvZiBkYXRhIGNodW5rcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLCBhbmQKK3dlIHJlcXVpcmUgY2FsbGVycyB0byB0ZXN0IHRoZSBjb3VudGVyIHJhdGhlciB0aGFuIGp1c3QgYXNzdW1lIGFsbCBvZiB0aGUgZGF0YQord2FzIHByb2Nlc3NlZC4KKworUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHJlc3RhcnQgYXQgYW4gYXJiaXRyYXJ5IHBvaW50LCB0aGUgY3VycmVudCBIdWZmbWFuCitjb2RlY3MgYXJlIGRlc2lnbmVkIHRvIHJlc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBNQ1UgYWZ0ZXIgYQorc3VzcGVuc2lvbiBkdWUgdG8gYnVmZmVyIG92ZXJmbG93L3VuZGVycnVuLiAgQXQgdGhlIHN0YXJ0IG9mIGVhY2ggY2FsbCwgdGhlCitjb2RlYydzIGludGVybmFsIHN0YXRlIGlzIGxvYWRlZCBmcm9tIHBlcm1hbmVudCBzdG9yYWdlIChpbiB0aGUgSlBFRyBvYmplY3QKK3N0cnVjdHVyZXMpIGludG8gbG9jYWwgdmFyaWFibGVzLiAgT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBNQ1UsIHRoZQorcGVybWFuZW50IHN0YXRlIGlzIHVwZGF0ZWQuICAoVGhpcyBjb3B5aW5nIGlzIG5vdCB2ZXJ5IGV4cGVuc2l2ZSwgYW5kIG1heSBldmVuCitsZWFkIHRvICppbXByb3ZlZCogcGVyZm9ybWFuY2UgaWYgdGhlIGxvY2FsIHZhcmlhYmxlcyBjYW4gYmUgcmVnaXN0ZXJpemVkLikKK0lmIGEgc3VzcGVuc2lvbiBvY2N1cnMsIHRoZSBjb2RlYyBzaW1wbHkgcmV0dXJucyB3aXRob3V0IHVwZGF0aW5nIHRoZSBzdGF0ZSwKK3RodXMgZWZmZWN0aXZlbHkgcmV2ZXJ0aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgTUNVLiAgTm90ZSB0aGF0IHRoaXMgaW1wbGllcworbGVhdmluZyBzb21lIGRhdGEgdW5wcm9jZXNzZWQgaW4gdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBidWZmZXIgKGllLCB0aGUKK2NvbXByZXNzZWQgcGFydGlhbCBNQ1UpLiAgVGhlIGRhdGEgc291cmNlL2Rlc3RpbmF0aW9uIG1vZHVsZSBpbnRlcmZhY2VzIGFyZQorc3BlY2lmaWVkIHNvIGFzIHRvIG1ha2UgdGhpcyBwb3NzaWJsZS4gIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIGRhdGEgYnVmZmVyCittdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgd29yc3QtY2FzZSBjb21wcmVzc2VkIE1DVTsgYSBjb3VwbGUgdGhvdXNhbmQKK2J5dGVzIHNob3VsZCBiZSBlbm91Z2guCisKK0luIGEgc3VjY2Vzc2l2ZS1hcHByb3hpbWF0aW9uIEFDIHJlZmluZW1lbnQgc2NhbiwgdGhlIHByb2dyZXNzaXZlIEh1ZmZtYW4KK2RlY29kZXIgaGFzIHRvIGJlIGFibGUgdG8gdW5kbyBhc3NpZ25tZW50cyBvZiBuZXdseSBub256ZXJvIGNvZWZmaWNpZW50cyBpZiBpdAorc3VzcGVuZHMgYmVmb3JlIHRoZSBNQ1UgaXMgY29tcGxldGUsIHNpbmNlIGRlY29kaW5nIHJlcXVpcmVzIGRpc3Rpbmd1aXNoaW5nCitwcmV2aW91c2x5LXplcm8gYW5kIHByZXZpb3VzbHktbm9uemVybyBjb2VmZmljaWVudHMuICBUaGlzIGlzIGEgYml0IHRlZGlvdXMKK2J1dCBwcm9iYWJseSB3b24ndCBoYXZlIG11Y2ggZWZmZWN0IG9uIHBlcmZvcm1hbmNlLiAgT3RoZXIgdmFyaWFudHMgb2YgSHVmZm1hbgorZGVjb2RpbmcgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhpcywgc2luY2UgdGhleSB3aWxsIGp1c3Qgc3RvcmUgdGhlIHNhbWUgdmFsdWVzCithZ2FpbiBpZiBmb3JjZWQgdG8gcmVwZWF0IHRoZSBNQ1UuCisKK1RoaXMgYXBwcm9hY2ggd291bGQgcHJvYmFibHkgbm90IHdvcmsgZm9yIGFuIGFyaXRobWV0aWMgY29kZWMsIHNpbmNlIGl0cworbW9kaWZpYWJsZSBzdGF0ZSBpcyBxdWl0ZSBsYXJnZSBhbmQgY291bGRuJ3QgYmUgY29waWVkIGNoZWFwbHkuICBJbnN0ZWFkIGl0Cit3b3VsZCBoYXZlIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBleGFjdGx5IGF0IHRoZSBwb2ludCBvZiB0aGUgYnVmZmVyIGVuZC4KKworVGhlIEpQRUcgbWFya2VyIHJlYWRlciBpcyBkZXNpZ25lZCB0byBjb3BlIHdpdGggc3VzcGVuc2lvbiBhdCBhbiBhcmJpdHJhcnkKK3BvaW50LiAgSXQgZG9lcyBzbyBieSBiYWNraW5nIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbWFya2VyIHBhcmFtZXRlciBzZWdtZW50LAorc28gdGhlIGRhdGEgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCB0byBob2xkIHRoZSBsYXJnZXN0IG1hcmtlciBvZiBpbnRlcmVzdC4KK0FnYWluLCBhIGNvdXBsZSBLQiBzaG91bGQgYmUgYWRlcXVhdGUuICAoQSBzcGVjaWFsICJza2lwIiBjb252ZW50aW9uIGlzIHVzZWQKK3RvIGJ5cGFzcyBDT00gYW5kIEFQUG4gbWFya2Vycywgc28gdGhlc2UgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBidWZmZXIgc2l6ZQord2l0aG91dCBjYXVzaW5nIHByb2JsZW1zOyBvdGhlcndpc2UgYSA2NEsgYnVmZmVyIHdvdWxkIGJlIG5lZWRlZCBpbiB0aGUgd29yc3QKK2Nhc2UuKQorCitUaGUgSlBFRyBtYXJrZXIgd3JpdGVyIGN1cnJlbnRseSBkb2VzICpub3QqIGNvcGUgd2l0aCBzdXNwZW5zaW9uLgorV2UgZmVlbCB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyeTsgaXQgaXMgbXVjaCBlYXNpZXIgc2ltcGx5IHRvIHJlcXVpcmUKK3RoZSBhcHBsaWNhdGlvbiB0byBlbnN1cmUgdGhlcmUgaXMgZW5vdWdoIGJ1ZmZlciBzcGFjZSBiZWZvcmUgc3RhcnRpbmcuICAoQW4KK2VtcHR5IDJLIGJ1ZmZlciBpcyBtb3JlIHRoYW4gc3VmZmljaWVudCBmb3IgdGhlIGhlYWRlciBtYXJrZXJzOyBhbmQgZW5zdXJpbmcKK3RoZXJlIGFyZSBhIGRvemVuIG9yIHR3byBieXRlcyBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcganBlZ19maW5pc2hfY29tcHJlc3MoKQord2lsbCBzdWZmaWNlIGZvciB0aGUgdHJhaWxlci4pICBUaGlzIHdvdWxkIG5vdCB3b3JrIGZvciB3cml0aW5nIG11bHRpLXNjYW4KK0pQRUcgZmlsZXMsIGJ1dCB3ZSBzaW1wbHkgZG8gbm90IGludGVuZCB0byBzdXBwb3J0IHRoYXQgY2FwYWJpbGl0eSB3aXRoCitzdXNwZW5zaW9uLgorCisKKyoqKiBNZW1vcnkgbWFuYWdlciBzZXJ2aWNlcyAqKioKKworVGhlIEpQRUcgbGlicmFyeSdzIG1lbW9yeSBtYW5hZ2VyIGNvbnRyb2xzIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZgorbWVtb3J5LCBhbmQgaXQgbWFuYWdlcyBsYXJnZSAidmlydHVhbCIgZGF0YSBhcnJheXMgb24gbWFjaGluZXMgd2hlcmUgdGhlCitvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgdmlydHVhbCBtZW1vcnkuICBOb3RlIHRoYXQgdGhlIHNhbWUKK21lbW9yeSBtYW5hZ2VyIHNlcnZlcyBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMuCisKK0luIGFsbCBjYXNlcywgYWxsb2NhdGVkIG9iamVjdHMgYXJlIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIGNvbXByZXNzaW9uIG9yCitkZWNvbXByZXNzaW9uIG1hc3RlciByZWNvcmQsIGFuZCB0aGV5IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGF0IG1hc3RlcgorcmVjb3JkIGlzIGRlc3Ryb3llZC4KKworVGhlIG1lbW9yeSBtYW5hZ2VyIGRvZXMgbm90IHByb3ZpZGUgZXhwbGljaXQgZGVhbGxvY2F0aW9uIG9mIG9iamVjdHMuCitJbnN0ZWFkLCBvYmplY3RzIGFyZSBjcmVhdGVkIGluICJwb29scyIgb2YgZnJlZSBzdG9yYWdlLCBhbmQgYSB3aG9sZSBwb29sCitjYW4gYmUgZnJlZWQgYXQgb25jZS4gIFRoaXMgYXBwcm9hY2ggaGVscHMgcHJldmVudCBzdG9yYWdlLWxlYWsgYnVncywgYW5kCitpdCBzcGVlZHMgdXAgb3BlcmF0aW9ucyB3aGVuZXZlciBtYWxsb2MvZnJlZSBhcmUgc2xvdyAoYXMgdGhleSBvZnRlbiBhcmUpLgorVGhlIHBvb2xzIGNhbiBiZSByZWdhcmRlZCBhcyBsaWZldGltZSBpZGVudGlmaWVycyBmb3Igb2JqZWN0cy4gIFR3bworcG9vbHMvbGlmZXRpbWVzIGFyZSBkZWZpbmVkOgorICAqIEpQT09MX1BFUk1BTkVOVCAgICAgbGFzdHMgdW50aWwgbWFzdGVyIHJlY29yZCBpcyBkZXN0cm95ZWQKKyAgKiBKUE9PTF9JTUFHRSAgICAgICAgIGxhc3RzIHVudGlsIGRvbmUgd2l0aCBpbWFnZSAoSlBFRyBkYXRhc3RyZWFtKQorUGVybWFuZW50IGxpZmV0aW1lIGlzIHVzZWQgZm9yIHBhcmFtZXRlcnMgYW5kIHRhYmxlcyB0aGF0IHNob3VsZCBiZSBjYXJyaWVkCithY3Jvc3MgZnJvbSBvbmUgZGF0YXN0cmVhbSB0byBhbm90aGVyOyB0aGlzIGluY2x1ZGVzIGFsbCBhcHBsaWNhdGlvbi12aXNpYmxlCitwYXJhbWV0ZXJzLiAgSW1hZ2UgbGlmZXRpbWUgaXMgdXNlZCBmb3IgZXZlcnl0aGluZyBlbHNlLiAgKEEgdGhpcmQgbGlmZXRpbWUsCitKUE9PTF9QQVNTID0gb25lIHByb2Nlc3NpbmcgcGFzcywgd2FzIG9yaWdpbmFsbHkgcGxhbm5lZC4gIEhvd2V2ZXIgaXQgd2FzCitkcm9wcGVkIGFzIG5vdCBiZWluZyB3b3J0aHdoaWxlLiAgVGhlIGFjdHVhbCB1c2FnZSBwYXR0ZXJucyBhcmUgc3VjaCB0aGF0IHRoZQorcGVhayBtZW1vcnkgdXNhZ2Ugd291bGQgYmUgYWJvdXQgdGhlIHNhbWUgYW55d2F5OyBhbmQgaGF2aW5nIHBlci1wYXNzIHN0b3JhZ2UKK3N1YnN0YW50aWFsbHkgY29tcGxpY2F0ZXMgdGhlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gcnVsZXMgLS0tIHNlZSBiZWxvdy4pCisKK1RoZSBtZW1vcnkgbWFuYWdlciBkZWFscyB3aXRoIHRocmVlIGtpbmRzIG9mIG9iamVjdDoKKzEuICJTbWFsbCIgb2JqZWN0cy4gIFR5cGljYWxseSB0aGVzZSByZXF1aXJlIG5vIG1vcmUgdGhhbiAxMEstMjBLIHRvdGFsLgorMi4gIkxhcmdlIiBvYmplY3RzLiAgVGhlc2UgbWF5IHJlcXVpcmUgdGVucyB0byBodW5kcmVkcyBvZiBLIGRlcGVuZGluZyBvbgorICAgaW1hZ2Ugc2l6ZS4gIFNlbWFudGljYWxseSB0aGV5IGJlaGF2ZSB0aGUgc2FtZSBhcyBzbWFsbCBvYmplY3RzLCBidXQgd2UKKyAgIGRpc3Rpbmd1aXNoIHRoZW0gYmVjYXVzZSBwb29sIGFsbG9jYXRpb24gaGV1cmlzdGljcyBtYXkgZGlmZmVyIGZvciBsYXJnZSBhbmQKKyAgIHNtYWxsIG9iamVjdHMgKGhpc3RvcmljYWxseSwgbGFyZ2Ugb2JqZWN0cyB3ZXJlIGFsc28gcmVmZXJlbmNlZCBieSBmYXIKKyAgIHBvaW50ZXJzIG9uIE1TLURPUyBtYWNoaW5lcy4pICBOb3RlIHRoYXQgaW5kaXZpZHVhbCAibGFyZ2UiIG9iamVjdHMgY2Fubm90CisgICBleGNlZWQgdGhlIHNpemUgYWxsb3dlZCBieSB0eXBlIHNpemVfdCwgd2hpY2ggbWF5IGJlIDY0SyBvciBsZXNzIG9uIHNvbWUKKyAgIG1hY2hpbmVzLgorMy4gIlZpcnR1YWwiIG9iamVjdHMuICBUaGVzZSBhcmUgbGFyZ2UgMi1EIGFycmF5cyBvZiBKU0FNUExFcyBvciBKQkxPQ0tzCisgICAodHlwaWNhbGx5IGxhcmdlIGVub3VnaCBmb3IgdGhlIGVudGlyZSBpbWFnZSBiZWluZyBwcm9jZXNzZWQpLiAgVGhlCisgICBtZW1vcnkgbWFuYWdlciBwcm92aWRlcyBzdHJpcHdpc2UgYWNjZXNzIHRvIHRoZXNlIGFycmF5cy4gIE9uIG1hY2hpbmVzCisgICB3aXRob3V0IHZpcnR1YWwgbWVtb3J5LCB0aGUgcmVzdCBvZiB0aGUgYXJyYXkgbWF5IGJlIHN3YXBwZWQgb3V0IHRvIGEKKyAgIHRlbXBvcmFyeSBmaWxlLgorCisoTm90ZTogSlNBTVBBUlJBWSBhbmQgSkJMT0NLQVJSQVkgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIGxhcmdlCitvYmplY3RzIGZvciB0aGUgZGF0YSBwcm9wZXIgYW5kIHNtYWxsIG9iamVjdHMgZm9yIHRoZSByb3cgcG9pbnRlcnMuICBGb3IKK2NvbnZlbmllbmNlIGFuZCBzcGVlZCwgdGhlIG1lbW9yeSBtYW5hZ2VyIHByb3ZpZGVzIHNpbmdsZSByb3V0aW5lcyB0byBjcmVhdGUKK3RoZXNlIHN0cnVjdHVyZXMuICBTaW1pbGFybHksIHZpcnR1YWwgYXJyYXlzIGluY2x1ZGUgYSBzbWFsbCBjb250cm9sIGJsb2NrCithbmQgYSBKU0FNUEFSUkFZIG9yIEpCTE9DS0FSUkFZIHdvcmtpbmcgYnVmZmVyLCBhbGwgY3JlYXRlZCB3aXRoIG9uZSBjYWxsLikKKworSW4gdGhlIHByZXNlbnQgaW1wbGVtZW50YXRpb24sIHZpcnR1YWwgYXJyYXlzIGFyZSBvbmx5IHBlcm1pdHRlZCB0byBoYXZlIGltYWdlCitsaWZlc3Bhbi4gIChQZXJtYW5lbnQgbGlmZXNwYW4gd291bGQgbm90IGJlIHJlYXNvbmFibGUsIGFuZCBwYXNzIGxpZmVzcGFuIGlzCitub3QgdmVyeSB1c2VmdWwgc2luY2UgYSB2aXJ0dWFsIGFycmF5J3MgcmFpc29uIGQnZXRyZSBpcyB0byBzdG9yZSBkYXRhIGZvcgorbXVsdGlwbGUgcGFzc2VzIHRocm91Z2ggdGhlIGltYWdlLikgIFdlIGFsc28gZXhwZWN0IHRoYXQgb25seSAic21hbGwiIG9iamVjdHMKK3dpbGwgYmUgZ2l2ZW4gcGVybWFuZW50IGxpZmVzcGFuLCB0aG91Z2ggdGhpcyByZXN0cmljdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkKK3RoZSBtZW1vcnkgbWFuYWdlci4KKworSW4gYSBub24tdmlydHVhbC1tZW1vcnkgbWFjaGluZSwgc29tZSBwZXJmb3JtYW5jZSBiZW5lZml0IGNhbiBiZSBnYWluZWQgYnkKK21ha2luZyB0aGUgaW4tbWVtb3J5IGJ1ZmZlcnMgZm9yIHZpcnR1YWwgYXJyYXlzIGJlIGFzIGxhcmdlIGFzIHBvc3NpYmxlLgorKEZvciBzbWFsbCBpbWFnZXMsIHRoZSBidWZmZXJzIG1pZ2h0IGZpdCBlbnRpcmVseSBpbiBtZW1vcnksIHNvIGJsaW5kCitzd2FwcGluZyB3b3VsZCBiZSB2ZXJ5IHdhc3RlZnVsLikgIFRoZSBtZW1vcnkgbWFuYWdlciB3aWxsIGFkanVzdCB0aGUgaGVpZ2h0CitvZiB0aGUgYnVmZmVycyB0byBmaXQgd2l0aGluIGEgcHJlc3BlY2lmaWVkIG1heGltdW0gbWVtb3J5IHVzYWdlLiAgSW4gb3JkZXIKK3RvIGRvIHRoaXMgaW4gYSByZWFzb25hYmx5IG9wdGltYWwgZmFzaGlvbiwgdGhlIG1hbmFnZXIgbmVlZHMgdG8gYWxsb2NhdGUgYWxsCitvZiB0aGUgdmlydHVhbCBhcnJheXMgYXQgb25jZS4gIFRoZXJlZm9yZSwgdGhlcmUgaXNuJ3QgYSBvbmUtc3RlcCBhbGxvY2F0aW9uCityb3V0aW5lIGZvciB2aXJ0dWFsIGFycmF5czsgaW5zdGVhZCwgdGhlcmUgaXMgYSAicmVxdWVzdCIgcm91dGluZSB0aGF0IHNpbXBseQorYWxsb2NhdGVzIHRoZSBjb250cm9sIGJsb2NrLCBhbmQgYSAicmVhbGl6ZSIgcm91dGluZSAoY2FsbGVkIGp1c3Qgb25jZSkgdGhhdAorZGV0ZXJtaW5lcyBzcGFjZSBhbGxvY2F0aW9uIGFuZCBjcmVhdGVzIGFsbCBvZiB0aGUgYWN0dWFsIGJ1ZmZlcnMuICBUaGUKK3JlYWxpemUgcm91dGluZSBtdXN0IGFsbG93IGZvciBzcGFjZSBvY2N1cGllZCBieSBub24tdmlydHVhbCBsYXJnZSBvYmplY3RzLgorKFdlIGRvbid0IGJvdGhlciB0byBmYWN0b3IgaW4gdGhlIHNwYWNlIG5lZWRlZCBmb3Igc21hbGwgb2JqZWN0cywgb24gdGhlCitncm91bmRzIHRoYXQgaXQgaXNuJ3Qgd29ydGggdGhlIHRyb3VibGUuKQorCitUbyBzdXBwb3J0IGFsbCB0aGlzLCB3ZSBlc3RhYmxpc2ggdGhlIGZvbGxvd2luZyBwcm90b2NvbCBmb3IgZG9pbmcgYnVzaW5lc3MKK3dpdGggdGhlIG1lbW9yeSBtYW5hZ2VyOgorICAxLiBNb2R1bGVzIG11c3QgcmVxdWVzdCB2aXJ0dWFsIGFycmF5cyAod2hpY2ggbWF5IGhhdmUgb25seSBpbWFnZSBsaWZlc3BhbikKKyAgICAgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLCBpLmUuLCBpbiB0aGVpciBqaW5pdF94eHggcm91dGluZXMuCisgIDIuIEFsbCAibGFyZ2UiIG9iamVjdHMgKGluY2x1ZGluZyBKU0FNUEFSUkFZcyBhbmQgSkJMT0NLQVJSQVlzKSBtdXN0IGFsc28gYmUKKyAgICAgYWxsb2NhdGVkIGR1cmluZyBpbml0aWFsIHNldHVwLgorICAzLiByZWFsaXplX3ZpcnRfYXJyYXlzIHdpbGwgYmUgY2FsbGVkIGF0IHRoZSBjb21wbGV0aW9uIG9mIGluaXRpYWwgc2V0dXAuCisgICAgIFRoZSBhYm92ZSBjb252ZW50aW9ucyBlbnN1cmUgdGhhdCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZQorICAgICBmb3IgaXQgdG8gY2hvb3NlIGEgZ29vZCBzaXplIGZvciB2aXJ0dWFsIGFycmF5IGJ1ZmZlcnMuCitTbWFsbCBvYmplY3RzIG9mIGFueSBsaWZlc3BhbiBtYXkgYmUgYWxsb2NhdGVkIGF0IGFueSB0aW1lLiAgV2UgZXhwZWN0IHRoYXQKK3RoZSB0b3RhbCBzcGFjZSB1c2VkIGZvciBzbWFsbCBvYmplY3RzIHdpbGwgYmUgc21hbGwgZW5vdWdoIHRvIGJlIG5lZ2xpZ2libGUKK2luIHRoZSByZWFsaXplX3ZpcnRfYXJyYXlzIGNvbXB1dGF0aW9uLgorCitJbiBhIHZpcnR1YWwtbWVtb3J5IG1hY2hpbmUsIHdlIHNpbXBseSBwcmV0ZW5kIHRoYXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcworaW5maW5pdGUsIHRodXMgY2F1c2luZyByZWFsaXplX3ZpcnRfYXJyYXlzIHRvIGRlY2lkZSB0aGF0IGl0IGNhbiBhbGxvY2F0ZSBhbGwKK3RoZSB2aXJ0dWFsIGFycmF5cyBhcyBmdWxsLXNpemUgaW4tbWVtb3J5IGJ1ZmZlcnMuICBUaGUgb3ZlcmhlYWQgb2YgdGhlCit2aXJ0dWFsLWFycmF5IGFjY2VzcyBwcm90b2NvbCBpcyB2ZXJ5IHNtYWxsIHdoZW4gbm8gc3dhcHBpbmcgb2NjdXJzLgorCitBIHZpcnR1YWwgYXJyYXkgY2FuIGJlIHNwZWNpZmllZCB0byBiZSAicHJlLXplcm9lZCI7IHdoZW4gdGhpcyBmbGFnIGlzIHNldCwKK25ldmVyLXlldC13cml0dGVuIHNlY3Rpb25zIG9mIHRoZSBhcnJheSBhcmUgc2V0IHRvIHplcm8gYmVmb3JlIGJlaW5nIG1hZGUKK2F2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiAgSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIG5ldmVyLXdyaXR0ZW4gc2VjdGlvbnMKK29mIHRoZSBhcnJheSBjb250YWluIGdhcmJhZ2UuICAoVGhpcyBmZWF0dXJlIGV4aXN0cyBwcmltYXJpbHkgYmVjYXVzZSB0aGUKK2VxdWl2YWxlbnQgbG9naWMgd291bGQgb3RoZXJ3aXNlIGJlIG5lZWRlZCBpbiBqZGNvZWZjdC5jIGZvciBwcm9ncmVzc2l2ZQorSlBFRyBtb2RlOyB3ZSBtYXkgYXMgd2VsbCBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgcG9zc2libGUgb3RoZXIgdXNlcy4pCisKK1RoZSBmaXJzdCB3cml0ZSBwYXNzIG9uIGEgdmlydHVhbCBhcnJheSBpcyByZXF1aXJlZCB0byBvY2N1ciBpbiB0b3AtdG8tYm90dG9tCitvcmRlcjsgcmVhZCBwYXNzZXMsIGFzIHdlbGwgYXMgYW55IHdyaXRlIHBhc3NlcyBhZnRlciB0aGUgZmlyc3Qgb25lLCBtYXkKK2FjY2VzcyB0aGUgYXJyYXkgaW4gYW55IG9yZGVyLiAgVGhpcyByZXN0cmljdGlvbiBleGlzdHMgcGFydGx5IHRvIHNpbXBsaWZ5Cit0aGUgdmlydHVhbCBhcnJheSBjb250cm9sIGxvZ2ljLCBhbmQgcGFydGx5IGJlY2F1c2Ugc29tZSBmaWxlIHN5c3RlbXMgbWF5IG5vdAorc3VwcG9ydCBzZWVraW5nIGJleW9uZCB0aGUgY3VycmVudCBlbmQtb2YtZmlsZSBpbiBhIHRlbXBvcmFyeSBmaWxlLiAgVGhlIG1haW4KK2ltcGxpY2F0aW9uIG9mIHRoaXMgcmVzdHJpY3Rpb24gaXMgdGhhdCByZWFycmFuZ2VtZW50IG9mIHJvd3MgKHN1Y2ggYXMKK2NvbnZlcnRpbmcgdG9wLXRvLWJvdHRvbSBkYXRhIG9yZGVyIHRvIGJvdHRvbS10by10b3ApIG11c3QgYmUgaGFuZGxlZCB3aGlsZQorcmVhZGluZyBkYXRhIG91dCBvZiB0aGUgdmlydHVhbCBhcnJheSwgbm90IHdoaWxlIHB1dHRpbmcgaXQgaW4uCisKKworKioqIE1lbW9yeSBtYW5hZ2VyIGludGVybmFsIHN0cnVjdHVyZSAqKioKKworVG8gaXNvbGF0ZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIGFzIG11Y2ggYXMgcG9zc2libGUsIHdlIGhhdmUgYnJva2VuIHRoZQorbWVtb3J5IG1hbmFnZXIgaW50byB0d28gcGFydHMuICBUaGVyZSBpcyBhIHJlYXNvbmFibHkgc3lzdGVtLWluZGVwZW5kZW50CisiZnJvbnQgZW5kIiAoam1lbW1nci5jKSBhbmQgYSAiYmFjayBlbmQiIHRoYXQgY29udGFpbnMgb25seSB0aGUgY29kZQorbGlrZWx5IHRvIGNoYW5nZSBhY3Jvc3Mgc3lzdGVtcy4gIEFsbCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbWV0aG9kcworb3V0bGluZWQgYWJvdmUgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBmcm9udCBlbmQuICBUaGUgYmFjayBlbmQgcHJvdmlkZXMKK3RoZSBmb2xsb3dpbmcgcm91dGluZXMgZm9yIHVzZSBieSB0aGUgZnJvbnQgZW5kIChub25lIG9mIHRoZXNlIHJvdXRpbmVzCithcmUga25vd24gdG8gdGhlIHJlc3Qgb2YgdGhlIEpQRUcgY29kZSk6CisKK2pwZWdfbWVtX2luaXQsIGpwZWdfbWVtX3Rlcm0gICAgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbi9zaHV0ZG93bgorCitqcGVnX2dldF9zbWFsbCwganBlZ19mcmVlX3NtYWxsIGludGVyZmFjZSB0byBtYWxsb2MgYW5kIGZyZWUgbGlicmFyeSByb3V0aW5lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlaXIgZXF1aXZhbGVudHMpCisKK2pwZWdfZ2V0X2xhcmdlLCBqcGVnX2ZyZWVfbGFyZ2UgaGlzdG9yaWNhbGx5IHdhcyB1c2VkIHRvIGludGVyZmFjZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBUiBtYWxsb2MvZnJlZSBvbiBNUy1ET1MgbWFjaGluZXM7ICBub3cgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgYXMganBlZ19nZXRfc21hbGwvanBlZ19mcmVlX3NtYWxsCisKK2pwZWdfbWVtX2F2YWlsYWJsZSAgICAgICAgICAgICAgZXN0aW1hdGUgYXZhaWxhYmxlIG1lbW9yeQorCitqcGVnX29wZW5fYmFja2luZ19zdG9yZSAgICAgICAgIGNyZWF0ZSBhIGJhY2tpbmctc3RvcmUgb2JqZWN0CisKK3JlYWRfYmFja2luZ19zdG9yZSwgICAgICAgICAgICAgbWFuaXB1bGF0ZSBhIGJhY2tpbmctc3RvcmUgb2JqZWN0Cit3cml0ZV9iYWNraW5nX3N0b3JlLAorY2xvc2VfYmFja2luZ19zdG9yZQorCitPbiBzb21lIHN5c3RlbXMgdGhlcmUgd2lsbCBiZSBtb3JlIHRoYW4gb25lIHR5cGUgb2YgYmFja2luZy1zdG9yZSBvYmplY3QuCitqcGVnX29wZW5fYmFja2luZ19zdG9yZSBpcyByZXNwb25zaWJsZSBmb3IgY2hvb3NpbmcgaG93IHRvIGltcGxlbWVudCBhIGdpdmVuCitvYmplY3QuICBUaGUgcmVhZC93cml0ZS9jbG9zZSByb3V0aW5lcyBhcmUgbWV0aG9kIHBvaW50ZXJzIGluIHRoZSBzdHJ1Y3R1cmUKK3RoYXQgZGVzY3JpYmVzIGEgZ2l2ZW4gb2JqZWN0OyB0aGlzIGxldHMgdGhlbSBiZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBvYmplY3QKK3R5cGVzLgorCitJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhY2tpbmcgc3RvcmUgb2JqZWN0cyBhcmUgZXhwbGljaXRseQorcmVsZWFzZWQgdXBvbiBhYm5vcm1hbCBwcm9ncmFtIHRlcm1pbmF0aW9uLiAgVG8gc3VwcG9ydCB0aGlzLCB3ZSB3aWxsIGV4cGVjdAordGhlIG1haW4gcHJvZ3JhbSBvciBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiB0byBhcnJhbmdlIHRvIGNhbGwgc2VsZl9kZXN0cnVjdAorKHR5cGljYWxseSB2aWEganBlZ19kZXN0cm95KSB1cG9uIGFibm9ybWFsIHRlcm1pbmF0aW9uLiAgVGhpcyBtYXkgcmVxdWlyZSBhCitTSUdJTlQgc2lnbmFsIGhhbmRsZXIgb3IgZXF1aXZhbGVudC4gIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0aGUgYmFjayBlbmQgbW9kdWxlCitpbnN0YWxsIGl0cyBvd24gc2lnbmFsIGhhbmRsZXIsIGJlY2F1c2UgdGhhdCB3b3VsZCBwcmUtZW1wdCB0aGUgc3Vycm91bmRpbmcKK2FwcGxpY2F0aW9uJ3MgYWJpbGl0eSB0byBjb250cm9sIHNpZ25hbCBoYW5kbGluZy4KKworVGhlIElKRyBkaXN0cmlidXRpb24gaW5jbHVkZXMgc2V2ZXJhbCBtZW1vcnkgbWFuYWdlciBiYWNrIGVuZCBpbXBsZW1lbnRhdGlvbnMuCitVc3VhbGx5IHRoZSBzYW1lIGJhY2sgZW5kIHNob3VsZCBiZSBzdWl0YWJsZSBmb3IgYWxsIGFwcGxpY2F0aW9ucyBvbiBhIGdpdmVuCitzeXN0ZW0sIGJ1dCBpdCBpcyBwb3NzaWJsZSBmb3IgYW4gYXBwbGljYXRpb24gdG8gc3VwcGx5IGl0cyBvd24gYmFjayBlbmQgYXQKK25lZWQuCisKKworKioqIEltcGxpY2F0aW9ucyBvZiBETkwgbWFya2VyICoqKgorCitTb21lIEpQRUcgZmlsZXMgbWF5IHVzZSBhIEROTCBtYXJrZXIgdG8gcG9zdHBvbmUgZGVmaW5pdGlvbiBvZiB0aGUgaW1hZ2UKK2hlaWdodCAodGhpcyB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgZmF4LWxpa2Ugc2Nhbm5lcidzIG91dHB1dCwgZm9yIGluc3RhbmNlKS4KK0luIHRoZXNlIGZpbGVzIHRoZSBTT0YgbWFya2VyIGNsYWltcyB0aGUgaW1hZ2UgaGVpZ2h0IGlzIDAsIGFuZCB5b3Ugb25seQorZmluZCBvdXQgdGhlIHRydWUgaW1hZ2UgaGVpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIGZpcnN0IHNjYW4uCisKK1dlIGNvdWxkIHJlYWQgdGhlc2UgZmlsZXMgYXMgZm9sbG93czoKKzEuIFVwb24gc2VlaW5nIHplcm8gaW1hZ2UgaGVpZ2h0LCByZXBsYWNlIGl0IGJ5IDY1NTM1ICh0aGUgbWF4aW11bSBhbGxvd2VkKS4KKzIuIFdoZW4gdGhlIEROTCBpcyBmb3VuZCwgdXBkYXRlIHRoZSBpbWFnZSBoZWlnaHQgaW4gdGhlIGdsb2JhbCBpbWFnZQorICAgZGVzY3JpcHRvci4KK1RoaXMgaW1wbGllcyB0aGF0IGNvbnRyb2wgbW9kdWxlcyBtdXN0IGF2b2lkIG1ha2luZyBjb3BpZXMgb2YgdGhlIGltYWdlCitoZWlnaHQsIGFuZCBtdXN0IHJlLXRlc3QgZm9yIHRlcm1pbmF0aW9uIGFmdGVyIGVhY2ggTUNVIHJvdy4gIFRoaXMgd291bGQKK2JlIGVhc3kgZW5vdWdoIHRvIGRvLgorCitJbiBjYXNlcyB3aGVyZSBpbWFnZS1zaXplIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCB0aGlzIGFwcHJvYWNoIHdpbGwKK3Jlc3VsdCBpbiB2ZXJ5IGluZWZmaWNpZW50IHVzZSBvZiB2aXJ0dWFsIG1lbW9yeSBvciBtdWNoLWxhcmdlci10aGFuLW5lY2Vzc2FyeQordGVtcG9yYXJ5IGZpbGVzLiAgVGhpcyBzZWVtcyBhY2NlcHRhYmxlIGZvciBzb21ldGhpbmcgdGhhdCBwcm9iYWJseSB3b24ndCBiZSBhCittYWluc3RyZWFtIHVzYWdlLiAgUGVvcGxlIG1pZ2h0IGhhdmUgdG8gZm9yZ28gdXNlIG9mIG1lbW9yeS1ob2dnaW5nIG9wdGlvbnMKKyhzdWNoIGFzIHR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiBvciBub25pbnRlcmxlYXZlZCBKUEVHIGZpbGVzKSBpZiB0aGV5Cit3YW50IGVmZmljaWVudCBjb252ZXJzaW9uIG9mIHN1Y2ggZmlsZXMuICAoT25lIGNvdWxkIGltcHJvdmUgZWZmaWNpZW5jeSBieQorZGVtYW5kaW5nIGEgdXNlci1zdXBwbGllZCB1cHBlciBib3VuZCBmb3IgdGhlIGhlaWdodCwgbGVzcyB0aGFuIDY1NTM2OyBpbiBtb3N0CitjYXNlcyBpdCBjb3VsZCBiZSBtdWNoIGxlc3MuKQorCitUaGUgc3RhbmRhcmQgYWxzbyBwZXJtaXRzIHRoZSBTT0YgbWFya2VyIHRvIG92ZXJlc3RpbWF0ZSB0aGUgaW1hZ2UgaGVpZ2h0LAord2l0aCBhIEROTCB0byBnaXZlIHRoZSB0cnVlLCBzbWFsbGVyIGhlaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdCBzY2FuLgorVGhpcyB3b3VsZCBzb2x2ZSB0aGUgc3BhY2UgcHJvYmxlbXMgaWYgdGhlIG92ZXJlc3RpbWF0ZSB3YXNuJ3QgdG9vIGdyZWF0LgorSG93ZXZlciwgaXQgaW1wbGllcyB0aGF0IHlvdSBkb24ndCBldmVuIGtub3cgd2hldGhlciBETkwgd2lsbCBiZSB1c2VkLgorCitUaGlzIGxlYWRzIHRvIGEgY291cGxlIG9mIHZlcnkgc2VyaW91cyBvYmplY3Rpb25zOgorMS4gVGVzdGluZyBmb3IgYSBETkwgbWFya2VyIG11c3Qgb2NjdXIgaW4gdGhlIGlubmVyIGxvb3Agb2YgdGhlIGRlY29tcHJlc3NvcidzCisgICBIdWZmbWFuIGRlY29kZXI7IHRoaXMgaW1wbGllcyBhIHNwZWVkIHBlbmFsdHkgd2hldGhlciB0aGUgZmVhdHVyZSBpcyB1c2VkCisgICBvciBub3QuCisyLiBUaGVyZSBpcyBubyB3YXkgdG8gaGlkZSB0aGUgbGFzdC1taW51dGUgY2hhbmdlIGluIGltYWdlIGhlaWdodCBmcm9tIGFuCisgICBhcHBsaWNhdGlvbiB1c2luZyB0aGUgZGVjb2Rlci4gIFRodXMgKmV2ZXJ5KiBhcHBsaWNhdGlvbiB1c2luZyB0aGUgSUpHCisgICBsaWJyYXJ5IHdvdWxkIHN1ZmZlciBhIGNvbXBsZXhpdHkgcGVuYWx0eSB3aGV0aGVyIGl0IGNhcmVkIGFib3V0IEROTCBvcgorICAgbm90LgorV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IEROTCBiZWNhdXNlIG9mIHRoZXNlIHByb2JsZW1zLgorCitBIGRpZmZlcmVudCBhcHByb2FjaCBpcyB0byBpbnNpc3QgdGhhdCBETkwtdXNpbmcgZmlsZXMgYmUgcHJlcHJvY2Vzc2VkIGJ5IGEKK3NlcGFyYXRlIHByb2dyYW0gdGhhdCByZWFkcyBhaGVhZCB0byB0aGUgRE5MLCB0aGVuIGdvZXMgYmFjayBhbmQgZml4ZXMgdGhlIFNPRgorbWFya2VyLiAgVGhpcyBpcyBhIG11Y2ggc2ltcGxlciBzb2x1dGlvbiBhbmQgaXMgcHJvYmFibHkgZmFyIG1vcmUgZWZmaWNpZW50LgorRXZlbiBpZiBvbmUgd2FudHMgcGlwZWQgaW5wdXQsIGJ1ZmZlcmluZyB0aGUgZmlyc3Qgc2NhbiBvZiB0aGUgSlBFRyBmaWxlIG5lZWRzCithIGxvdCBzbWFsbGVyIHRlbXAgZmlsZSB0aGFuIGlzIGltcGxpZWQgYnkgdGhlIG1heGltdW0taGVpZ2h0IG1ldGhvZC4gIEZvcgordGhpcyBhcHByb2FjaCB3ZSdkIHNpbXBseSB0cmVhdCBETkwgYXMgYSBuby1vcCBpbiB0aGUgZGVjb21wcmVzc29yIChhdCBtb3N0LAorY2hlY2sgdGhhdCBpdCBtYXRjaGVzIHRoZSBTT0YgaW1hZ2UgaGVpZ2h0KS4KKworV2Ugd2lsbCBub3Qgd29ycnkgYWJvdXQgbWFraW5nIHRoZSBjb21wcmVzc29yIGNhcGFibGUgb2Ygb3V0cHV0dGluZyBETkwuCitTb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZmlyc3Qgc2NoZW1lIGFib3ZlIGNvdWxkIGJlIGFwcGxpZWQgaWYgYW55b25lIGV2ZXIKK3dhbnRzIHRvIG1ha2UgdGhhdCB3b3JrLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy9uaWdodHNob3RfaXNvXzEwMC5ibXAgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL25pZ2h0c2hvdF9pc29fMTAwLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTI3MTUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy9uaWdodHNob3RfaXNvXzEwMC5ibXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy9uaWdodHNob3RfaXNvXzEwMC50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL25pZ2h0c2hvdF9pc29fMTAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzIwODg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy9uaWdodHNob3RfaXNvXzEwMC50eHQKQEAgLTAsMCArMSwyNSBAQAorbGlianBlZy10dXJibyBub3RlOiAgVGhpcyBpbWFnZSB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIDgtYml0IG5pZ2h0c2hvdF9pc29fMTAwCitpbWFnZS4gIFRoZSBvcmlnaW5hbCBjYW4gYmUgZG93bmxvYWRlZCBhdCB0aGUgbGluayBiZWxvdy4KKworVGhlIE5ldyBJbWFnZSBDb21wcmVzc2lvbiBUZXN0IFNldCAtIEphbiAyMDA4CitodHRwOi8vd3d3LmltYWdlY29tcHJlc3Npb24uaW5mby90ZXN0X2ltYWdlcworCitUaGUgaW1hZ2VzIGhpc3RvcmljYWxseSB1c2VkIGZvciBjb21wcmVzc2lvbiByZXNlYXJjaCAobGVuYSwgYmFyYnJhLCBwZXBwZXIgZXRjLi4uKSBoYXZlIG91dGxpdmVkIHRoZWlyIHVzZWZ1bCBsaWZlIGFuZCBpdHMgYWJvdXQgdGltZSB0aGV5IGJlY29tZSBhIHBhcnQgb2YgaGlzdG9yeSBvbmx5LiBUaGV5IGFyZSB0b28gc21hbGwsIGNvbWUgZnJvbSBkYXRhIHNvdXJjZXMgdG9vIG9sZCBhbmQgYXJlIGF2YWlsYWJsZSBpbiBvbmx5IDgtYml0IHByZWNpc2lvbi4KKworVGhlc2UgaW1hZ2VzIGhhdmUgYmVlbiBjYXJlZnVsbHkgc2VsZWN0ZWQgdG8gYWlkIGluIGltYWdlIGNvbXByZXNzaW9uIGFsZ29yaXRobSByZXNlYXJjaCBhbmQgZXZhbHVhdGlvbi4gVGhlc2UgYXJlIHBob3RvZ3JhcGhpYyBpbWFnZXMgY2hvc2VuIHRvIGNvbWUgZnJvbSBhIHdpZGUgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZCBlYWNoIG9uZSBwaWNrZWQgdG8gc3RyZXNzIGRpZmZlcmVudCBhc3BlY3RzIG9mIGFsZ29yaXRobXMuIEltYWdlcyBhcmUgYXZhaWxhYmxlIGluIDgtYml0LCAxNi1iaXQgYW5kIDE2LWJpdCBsaW5lYXIgdmFyaWF0aW9ucywgUkdCIGFuZCBncmF5LgorCitJbWFnZXMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IGFueSBwcm9oaWJpdGl2ZSBjb3B5cmlnaHQgcmVzdHJpY3Rpb25zLgorCitUaGVzZSBpbWFnZXMgYXJlIChjKSB0aGVyZSByZXNwZWN0aXZlIG93bmVycy4gWW91IGFyZSBncmFudGVkIGZ1bGwgcmVkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uIHJpZ2h0cyBvbiB0aGVzZSBpbWFnZXMgcHJvdmlkZWQ6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhlIHBpY3R1cmVzIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QgY2xhaW0gdGhhdCB5b3UgdG9vayB0aGUgb3JpZ2luYWwgcGljdHVyZXMuIElmIHlvdSB1c2UsIHB1Ymxpc2ggb3IgcmVkaXN0cmlidXRlIHRoZW0sIGFuIGFja25vd2xlZGdtZW50IHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc2ludGVycHJldGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbHMuCiszLiBObyBwYXltZW50IGlzIHJlcXVpcmVkIGZvciBkaXN0cmlidXRpb24gdGhpcyBtYXRlcmlhbCwgaXQgbXVzdCBiZSBhdmFpbGFibGUgZnJlZWx5IHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlLiBUaGF0IGlzLCBpdCBpcyBwcm9oaWJpdGVkIHRvIHNlbGwgdGhlIG1hdGVyaWFsLgorNC4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgZGlzdHJpYnV0aW9uLgorCitBY2tub3dsZWRnbWVudHM6IEEgbG90IG9mIHBlb3BsZSBjb250cmlidXRlZCBhIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgaW4gbWFraW5nIHRoaXMgdGVzdCBzZXQgcG9zc2libGUuIFRoYW5rcyB0byBldmVyeW9uZSB3aG8gdm9pY2VkIHRoZWlyIG9waW5pb24gaW4gYW55IG9mIHRoZSBkaXNjdXNzaW9ucyBvbmxpbmUuIFRoYW5rcyB0byBBeGVsIEJlY2tlciwgVGhvbWFzIFJpY2h0ZXIgYW5kIE5pZWxzIEZyw7ZobGluZyBmb3IgdGhlaXIgZXh0ZW5zaXZlIGhlbHAgaW4gcGlja2luZyBpbWFnZXMsIHJ1bm5pbmcgYWxsIHRoZSB2YXJpb3VzIHRlc3RzIGV0Yy4uLiBUaGFua3MgdG8gUGV0ZSBGcmFzZXIsIFRvbnkgU3RvcnksIFdheW5lIEouIENvc3NoYWxsLCBEYXZpZCBDb2ZmaW4sIEJydWNlIExpbmRibG9vbSBhbmQgcmF3LmZvdG9zaXRlLnBsIGZvciB0aGUgaW1hZ2VzIHdoaWNoIG1ha2UgdXAgdGhpcyBzZXQuCisKK1NhY2hpbiBHYXJnIFtJbmRpYV0KK3NhY2hpbmdhcmdAYzEwbi5pbmZvCisKK3d3dy5zYWNoaW5nYXJnLmNvbSB8IHd3dy5jMTBuLmluZm8gfCB3d3cuaW1hZ2Vjb21wcmVzc2lvbi5pbmZvCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QxLmljYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdDEuaWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjQ1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QxLmljYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QxLmljYy50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QxLmljYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmYzUyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdDEuaWNjLnR4dApAQCAtMCwwICsxLDIwIEBACitMaXR0bGUgQ01TCitDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSBNYXJ0aSBNYXJpYSBTYWd1ZXIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QyLmljYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdDIuaWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZjFiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QyLmljYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QyLmljYy50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3QyLmljYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmYzUyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdDIuaWNjLnR4dApAQCAtMCwwICsxLDIwIEBACitMaXR0bGUgQ01TCitDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSBNYXJ0aSBNYXJpYSBTYWd1ZXIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RpbWdhcmkuanBnIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy90ZXN0aW1nYXJpLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTY2NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy90ZXN0aW1nYXJpLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQuanBnIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTAxYzYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTZhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWQxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbQpAQCAtMCwwICsxLDQgQEAKK1A2CisyMjcgMTQ5CisyNTUKKzAvLTAvLTEwLjIxLzUxLjUxLjYyLzYyLzgzLzgzLzoyLzoyLzozLTozLTozLTozLToyLzoyLzkxLjgwLTgwLTkxLjoyLzoyLzgwLTgwLTgwLTgwLTgwLTgwLTgwLTgwLTYuKzYuKzYuKzUtKjUtKjUtKjQsKTQsKTQsKTQsKTQsKTQsKTQsKTQsKTQsKTItKS8qJC8sJTAtJjAtJjEuJzIvKDMwKTMwKTYzLDYzLDc0LTg1Ljk2Lzk2Lzo3MDo3LkE6MEI8MEQ+MkZANElBNEpCNUtDNktDNk5FNk1ENU9DM05CMk9DM09DM1BENFJFNVI/MVk/MmJANG5CNX1FNotIOJlHOaNGN7BIO7hGO79GO8VGPcdHPstIQMtIQNBFQudGTO1DTOxFTetFSe5DSe9CRPI/Q/Q9Qfg7Qfc6QPQ6P/A8P+k/QuI/QNc/PMtBN7s9L7VALrVALrQ/LbQ/LbNALbI/La9ALa0/LqpBLqZBLaJCLKBBLZtAK5lBK5ZBLJQ+LZI/L5I/L5E+LpE+LJE+LJI8K5I8K5Q+LZQ+LZQ9KpQ9KpU+K5U+K5Y/LJZAL5Y/NpU+NZc9NJ8/M6lCM7NEM7xENL9ENLk/MLZCM6xGOp5IO4dHO29BMlU5K0MzJj01Mjo2NTk1NDg0MzcxMTYwMDUvLzUvLzcyLzcyLzcyLzYxLjYxLTYxLTUwLDQxLC8vLS4wLS8vLS8vLTAvLTAvLTIuLTIuLTUsLTQrLDQqKzMpKjcoKz0uMUU2OVA6PGpBRXxISo5OT5VPUZ9XW6pkbqpvg590kJR7o4d/roCGun6IvXR6rmBhkVRLdlFFaVNKZ1BIX01IXlRRYmZkb3x9go2RkJmemKOpn6Komp6gk4+Rg3t8bGZnV1lYRlFORVVSW1VRYlVRYjAvLTAvLTEwLjEwLjQwLTUxLjYyLzYyLzgzLzgzLzoyLzoyLzozLTozLTozLTozLToyLzkxLjgwLTgwLTgwLTgwLTkxLjoyLzgwLTgwLTgwLTgwLTgwLTgwLTgwLTgwLTYuKzYuKzYuKzUtKjUtKjQsKTQsKTQsKTUtKjUtKjUtKjUtKjUtKjUtKjUtKjMuKjEsKDAtJjAtJjEuJzIvKDMwKTQxKjQxKjYzLDYzLDc0LTg1Ljg1Ljk2Lzo3MDo3LkA5L0I8MEM9MUU/M0hAM0lBNEpCNUpCNUxDNExDNE1BM01BMU1BMU5CMk9DM1FENFA+MFU/MV5BM2pDNHhENoVGNZJFNZxDM6dDNK9BNLVANrxCN8BEOsRFPMVGPc1DQOFFSedCSehDSepESO1ER/BDRfNAQ/Y/Q/g7Qfc6QPQ6P/A8P+k/QOBAQNVAPMpANrk+L7VALrQ/LbQ/LbQ/LbI/LLA/La9ALa0/LqpBLqZBLaJCLJ9ALJtAK5hAKpZBLJQ+LZI/L5I/L5E+LpE+LJA9K5I8K5I8K5Q+LZM9LJQ9KpQ9KpQ9KpU+K5Y/LJZAMZVBNpY/Npg+NaE/NKtBM7VENL1DNL9ENbtBMrdDNqxGOpxIPYVHOmxAM1M5KkI0KT42Mzo2NTo2NTg0MzgyMjcxMTYwMDYwMDcyLzcyLzcyLzYxLjYxLTYxLTUwLDQxLC8vLS4wLS8vLS8vLTAvLTAvLTIuLTIuLTQuLjUsLTUrLDMpKjUpKzwtMEM0N044OmQ9PnZEQ4ZKSY9NTppUVqRhaqVsfZ1yjpF7ooaArn+FuXuEu291qVtbjVJJdk9DaU9GZVBIYFBIX1JOX1tZZm5vdIWGiJSZlZmel5qglJmdj4+Rg35/cWprW11bTFZTSlhTWlZSYVhRYS8uLDAvLTAvLTEwLjQwLzQwLzUxLjUxLjcyLjcyLjcyLjcyLjkyLDkyLDkyLDkyLDkxLjgwLjgwLjcvLTcvLTgwLjgwLjkxLzgwLjgwLjgwLjgwLjgwLjgwLjgwLjgwLjYuLDYuLDUtKzUtKzUtKzQsKjQsKjQsKjYuLDYuLDYuLDYuLDYuLDYuLDYuLDQvKzItKTEuKTIvKjMwKzMwKzQxLDUyLTUyLTYzLjYzLjc0Lzc0Lzg1MDk2MTk2MTo3MD84LkA6LkI8MEQ+Mkc/NEhANUhAM0hAM0pANElAMUs/MUs/MUs/MUxAMk1BMU5CMk1BM1FBMllCNGRDNHFDNHxDModCMpJBMJg8LaE7LKc7Lq89MrVANrpEOr9GPcVEPtlDReFARuNCR+hDR+pERvBDRfRBRPg/RPo7QPk6P/U7QPA9QOhAQN1CPtFAO8ZANbc9LrNALbNALbNALbI/LbA/La8+LK1ALKo/LadALaVALqFALZ1BLJtAK5hAKpVAK5Q+LZI/L5E+LpE+LpE+LpA9LZA9K5A9K5E+LJE+LJI8K5I8K5M9LJQ+LZU/LpU/MJVBNpY/NZo+M6Q/M69BNLlDNb9ENcFDNcBEOLlHPK5JPZlKPYFHO2hANFE6LEI1LD83ND03Nzw2Njs1NTk0MTgzMDcyLzcyLzYyLzYyLzYyLzUxLjUyLTUyLTQxLDIxLC8xLi0yLi8xLi8xLjAwLjAwLjEwLjMvLjUvLzQuLjUsLTQqKzQqKzktLz4yNEk1Nls5N2w/On1GQYZJRJBPTZhbYJtmdpVuiYx3noN9rX2CuXV+t2dspFVViU1FdkxBa01BZU9GY1FIY05JX05LXFtbZXN0eYeJiIeMhoqPiI2QhYaKfHh6bGZoWlpbTVZTTFpVW1pUYFtTYC4tKy8uLC8uLDAvLTMvLjQwLzQwLTUxLjYxLTYxLTYxLTYxLTgxKzgxKzgxKzgwLTgwLjcvLTYuLDYuLDYuLDYuLDcvLTgwLjgwLjgwLjgwLjgwLjgwLjgwLjgwLjgwLjUtKzUtKzUtKzUtKzQsKjQsKjMrKTMrKTYuLDYuLDYuLDYuLDYuLDYuLDYuLDQvLDMwKzMwKzMwKzQxLDQxLDUyLTUyLTUyLTUyLTYzLjYzLjc0Lzg1MDk2MTk2MTk2Lz43LT85LUE7L0I8MEU9MkU9MkY+M0Y+MUc9MUc9MUg8Lkk9L0k9L0o+MExAMEpBMExFNU5FNFZFNV5EM2lEMnNCMX5BL4Y/LYw5KZQ5J505KqQ9LqxAM7NFOLhIPMFGPtJEQ9pBQ95CReJERehERexCQ/NAQ/c/Qfo7QPk6P/Y8Qe4+QOVBQNpCPc1AOcJAM7Y+LrBALLBALLBALK8+LK4/LK4/LKw/K6lALaY/LKNALaA/LJxAK5hAKpZAKZQ/KpE+LJE+LpE+LpE+LpA9LZA9LY88Ko88KpA9K5A9K5A9K5A9K5I8K5E+LJQ+LZI/L5VBNpdANpw+MqZANLJCNrxDOMFDN8JCN8JGPLpKP6xLQpdKQHxGOmJANEw6LkE3LUA4NT44OD03Nzw2Njo1Mjk0MTgzMDgzMDYyLzYyLzYyLzMyLjUyLTMyLTIxLDEyLS0yLi0yLi8xLi8xLjAwLjAwLjEwLjEwLjUxMDYwMDUvLzUsLTQrLDYsLTowMUQyMlQ3MWM7M3JCOHtFO4NJRYlSVY1fbItpgoNzmH15q3h9tW93tWFlolNSjE1EeUxAcExAaFBFZ1FGZkxDXkhDV05MWl5eZmpucXV5eHl+eHqAdnd6b2tvYWBiVVdZTFRUTF1XWV1WXV1WXi0tLS0tLS8uLC8uLDAvLTEwLjMvLDQwLTQwLTQwLTUwLDUwLDUwLDUwLDcvLDcvLDQvLDQvLDMuKzMuKzMuKzMuKzQvLDQvLDUwLTUwLTUwLTUwLTUwLTUwLTUwLTUwLTMuKzMuKzMuKzItKjItKjEsKTEsKTEsKTQvLDQvLDQvLDQvLDQvLDQvLDQvLDQvLDQxLDQxLDQxLDQxLDUyLTUyLTUyLTUyLTUyLTUyLTYzLjc0Lzc0Lzg1MDk2MTk2Lzw1LT02LD84LkA5L0I5MEM7MEM7MEM7MEU7L0Q6LkY6Lkc7L0g8Lkk9L0o+MElAMUpHNk1INVJHNVlGNWJFM2pEMXVCL3w/LII7KYs6KZM6Kpo9LKNCMqxGOLJKPbxKQMxHQtREQ9hERN1FRONDQ+lBQfA9QPQ8Pvk6P/k7PfQ8Pu0/PuFCPtNDOsVBNbk/MLI/La9ALa4/LK4/LK4/Lqw+Law+Lao/Lag+LqQ/LaA/LJ4/K5o/LJc/K5U+KpQ/K5E+LJA/LpA/Lo8+LY8+LY49LI49LI49LI49LI49LI49LI49LI88LI8+LZE+LpFAL5RCNJdBNJ5ANKhAM7ZBN79DOcVCOsRBOb5DO7dIP6ZMQ5FLQ3RFO1o+MkU5LT02LEE5NkA4Nj83NT42ND01Mzw0Mjk0MTgzMDYyLzQzLzQzLzIzLjMyLjIzLjEyLTAyLS0yLiwyLi0yLi0yLi8xLi8xLjAwLjEwLjMyMDUxMDUxMDQuLjIsLDUsLTcuLz4wL041Llk5LmU9MW9BNHRDPHlLS4BaZYRogX9wl3p4qnV7t2x0tV9kplRUlE9Hg0xCd05BbU5CaE1BZUpBYEdCWUhFWEtLV01QVV5iY2BmYmJpYWBmXFpgVldaT1VYTVhYUF5ZVmBXWGBXWiwsLCwsLC4tKy8uLC8uLDAvLTMvLjMvLDIuKzIuKzMuKjMuKjMuKjMuKjUtKjUtKjMuKzMuKzItKjItKjItKjItKjMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzItKjItKjItKjEsKTEsKTEsKTArKDQvLDQvLDQvLDQvLDQvLDQvLDQvLDQvLDQwLTQxLDQxLDQxLDQxLDQxLDQxLDQxLDQxLDUyLTUyLTYzLjc0Lzg1MDg1MDk2Lzs0LDw1Kz02LD84LkA3LkE4L0E4L0E5LkM5L0M5LUU5LUY6Lkc7L0k9L0o+MEhBMUpHNkpJN05HNVZGNlxFM2RDMmxBMHQ/LXw9LIM8Kow7KpQ9LJxAMaNGNapKOrRKPcRIQMxFQdFGQdZFQN5DQeVBP+w+P/I7Pfc7PPQ6O/A8PelAPdxDPc1DOL5AMrI/La4/LKtALKtALKo/K6o/Lak+LKk+LKg/LKU+LaNALaA/LJw/LZc/K5U+KpM+KZE/KpA/LI8+LY8+LY8+LY49LI49LI49LI08K449LIs8K408K4s8K4s8LYw9LI0+L44/MJRCNJhCM6FBM6xCNblDOcJDOsVCOsNCPLtCOrFIQqNOR41ORXBIPlRANUE7Lzk2LUA4NUE3NT83NT42Mz01Mzk0MTk0MTczMDQzLzQzLzM0LzIzLjIzLjEzLjAyLS4zLS0zLy0zLy4zLy4zLzAyLzAyLzExLzExLzIxLzMyMDMyMDQwLzIuLTEtLDQuLjguLEc0LU80KVg4K2A8MGU/Nm1HRnlZZIJrhYB1n3x8snd8vG51u2Ror1tboVNMj0xCfk9BckxAaEk9Y0g+YEhCXkVDWEBCTzxBR0NIS0RNSkpRSkpRSUlQSEtRR09VS1ZXT15ZU2BZU2BYVSsrKywsLCwsLC0tLS8tLjAvLTAvLTAvLTEtKjEtKjEtKjEtKjItKTItKTItKTItKTItKjIsLDErKzErKzErKzErKzIsLDIsLDErKzErKzErKzErKzErKzErKzErKzErKzIsLDIsLDIsLDErKzErKzErKzAqKjAqKjMtLTMtLTMtLTMtLTMtLTMtLTMtLTMuKzQwLTQwLTQwLTQwLTMvLDMvLDMvLDMvLDQwLTQwLTUxLjYyLzczMDczMDg0MTg1MDozLTs0LDw1LT02Lj82Lz82LT82LT82LUM5MEM5L0U4L0Y5MEc6MUk9MUo+MkhAM0hFNkdFNktFNVFENFlEM19CMmdAL249LHY9LHw6KoU5K4w6LJM9LptCMqJGN6xGOLxHPcJGPslGPtBFPtlEQOJDP+pAQPA+PvI6OvE7Ouw8PORBPNZDO8ZENrVAL6o9Kao/LalALalALalALag+Lqg+Lqc9LaU+LaM9LqA/Lp4/LZo/LZY/LJQ/K5E/Ko8+KY8+K40+LY0+LYw9LIw9Low9Los8LYs8LYs8LYo9LYo7LIk8LIo8L4s+Low+MYw/L5JDNJhCM6FBM65CNrxDOsNEPcRDPcBDPbpHQrJRS6ZZU49YUXNSSVdJPkNDNzw/Nj45M0A3Mj42Mz02MDo1MTk0MDgzLzYzLjQzLjQzLjM0LzIzLjEzLjEzLjAyLS4zLS0zLy0zLy4zLy4zLy4zLy4zLzAyLzAyLzAwLjExLzIyMDIxLzEwLi8uLDIuLTQvLD8wK0QwKUszKVQ4LVo8NGVHR3VdaoNzjYmAq4WEvn6Dx3R6xm1wvWVlr1ZTmkxDgks/cUo9aEc7Y0U+X0ZCXURCVz9BTjs/SDpCRT5IR0RNSEdRSUdRSEpSR05WS1VYTV5aT2FZTmFYTysrKysrKywsLC0tLS4sLS8tLjAvLTAvLTEtLDEtKjEtKjEtKjItKTItKTItKTItKjIsLDErKzErKzAqKjAqKjErKzErKzIsLDAqKjAqKjAqKjAqKjAqKjAqKjAqKjAqKjIsLDIsLDIsLDErKzErKzAqKjAqKjAqKjIsLDIsLDIsLDIsLDIsLDIsLDIsLDIsLDMvLDMvLDMvLDMvLDMvLDMvLDMvLDMvLDQwLTQwLTUxLjYyLzYyLzczMDg0MTg1MDkyLDozKzs0LDw1LT41Lj41Lj41Lj41LEI4L0I4L0U4MEY5MEc6MUk8M0o9NEk/NUZCNkZCNkpCNU9BNFVCM1xAMmM/MWo8LXE8Lnc5Kn04KYU3Kow6LJY+MJtCNKRCNbJGOrpFO8FGPspHP9RHQN5GQedDQe5CQO07O+s7O+c+O99CO9FEOr9ENLBBLqQ+KKZBLaZBLaZBLaVALqVALqQ/LaQ/LaQ+L6I+Lp9ALpw/Lpg/LZU+K5E/Ko8+KY8+K40+LY0+LY0+LYw9LIw9Los8LYs8LYo9LYo9LYk9L4g8Log8Log8L4c9MIg+MYs/MZFENJZDM6JCNK1DNrpDO8FEPsFEQLtFQblQTLJbVKZmXZFmXXVfVFtVSUhOQkNJPzw5Mj84Mj43MTs2MDk0Ljc0LTYzLjQzLjQzLjQzLjM0LzIzLjEzLjEzLi4zLS4zLS4zLy0zLy4zLy4zLy4zLy4zLzAyLzAyLy8vLTExLzIyMDIyMDEwLjAvLTAvLTMvLDgsLDwtKkMwKks3MFM8Nl5ISnRibod6lJCKtoyNxoSIz3qAzHR3xmpst1lXoElEhEU9bkc8ZEQ8YUM+XkNBWUBDVkBEUD5FS0dRUktXVVFeV1VgWFRgVlNdVFReU1lfU15bTGFaSmFaSiwtLywtLy0tLy0tLy0tLS0tLS4sLS4tKy8uLC8uLDEtKjAsKTAsKTAsKS8rKC8rKC8rKi8rKi8rKi8rKi8rKi8rKjAsKzAsKy8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKjAsKzAsKzEtLDEtLDIuLTIuLTIuLTEtLDEtLDEtLDEtLDEtLDEtLDAsKTEtKjIuKzMvLDMvLDMvLDMvLDMvLDMvLDMvLDMvLDMvLDQwLTUxLjYyLzczMDgwLTkyLDozLTs0Lj00Lz41Lj41Lj41LkA1L0A2LUI1LUM2LkQ3L0Y5MUg7M0c9NEc+NUhANUpANlA/NVQ+M1g8MV45MGM3LG05LnQ4LXw4LYM5Lo07L5M9MJg/MZ4+MKdBM61BNLVDOL5FOspHPdRHPt5FP+VDQOhAP+pCQeZEQdpFPshEOLdCMapBLqJCLKJBLqFALaI/LKI+LqE9LaE9LaI+LqA/L5w8LJo9LJg8LZU+LZM9LJA9K449Kow9LIs8K4s8K4o9LYk8LIk8LIk8LIg6LYc7LYk9L4c9MIc9MIc9MIg+M4hANIlBNYtBNJFFNZdENKNFObFJPrpHQLtEPrtFQbhNR7VbU69mX6NxZpFzaH5yZGpqXlZeU0pSR0xMQkpGPUI+NT05MDo2LTc0KzYzLDMzKzU0LzM0LjM0LzIzLjAyLS8xLC4wLSwxLS0yLi0yLi0yLi0yLi8xLi8xLi8xLi8xLjAyLzAyLzExLzExLzExLzExLzExLzQwLzQrMDsvM0EzMkM0MUo7OF1OUXlte4uFn5OQu5SWz5CV2YOJ03R6xmput2BjqFpblExJdEhCZEE+XT4+WD9CVUFJVkxVXFVgYmJxbm9+eXaGfHOAdmx5b2h0aF9rX1dfUF5dSWJcRmNdRywtLywtLy0tLy0tLy0tLS0tLS4sLS4sLS8uLC8uLDAsKzAsKTAsKS8rKC8rKC8rKC4qKS4qKS4qKS8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKjAsKzAsKzEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDAsKzEtKjIuKzIuKzMvLDMvLDMvLDIuKzIuKzIuKzIuKzIuKzMvLDQwLTYyLzYyLzgwLjkxLjoyLzs0Lj00Lz41MD41MD41Lj80Lj80LkI1L0I1LUQ3L0U4MEc6Mkg7M0g+NUg+NUw9Nk8+NlI+NVY7Mlo5MF83L2k4MXA3Lng4LoE4L4o6L5A8MZY8MZs9MaJAM6dBM61DNrREOL5FOslGPNRFPdtDPt9EQOBFQd9HQtRHPsRGOrNEM6VCL55CLZ9DLp5BL59ALp4/LZ4/LZ4/LZ4+Lp8/L5o9LJk+LJY9LZQ9LJA9K48+K4w9LIw9LIs8K4o9K4k8LIk8LIk8LIc7K4c7LYU8LYY8L4U9L4U9MYM9MYU/M4ZANohCOIhCNpNHOZhGOKNHPK9KQrhIRLhHQ7dLSLNUTrFkXKpxZp9+b5B/b398bW1zZVpmWk5YTUxOQ0tJPUVDN0E+NT06MTg4LjQ0LDExKTIzLTIzLTEyLTAxLC8xLC8xLC4wLS4wLS8xLi0yLi8xLi8xLi8xLi8xLi8xLi8xLjAyLzAyLzExLzExLzExLzExLzExLzIwMTUrNDktNzwxNT81NEk/PV5VVnlzfYqInpOTuZSXypCW1ISLz3mBwnF5uGt0rWhunl1ggVhacVNValJXalReaFpnbWZ2dnKCf3SIf36Sh4OViX6OgXeHenKAcWZ0Z1plVFtaRWBaQmJcRC0uMC0uMC0uMC0uMC0uMC0uMC4uLi4uLi4sLS4tKy4tKy0sKi8rKi4qKS4qJy4qJywrKSwqKywqKywqKywqKywqKyspKispKi0rLC0rLC0rLC0rLC0rLC0rLC0rLC0rLCwqKy0rLC0rLC0rLC0rLC4sLS4sLS4sLS4sLS8tLi8tLi8tLi8tLi8tLi8tLi8uLDAsKzAsKzEtLDIuLTIuLTIuLTIuLTEtLDEtLDEtLDEtLDEtLDIuLTMvLjQwLzUxLjgwLjkxLzoyMDw0MT0zMT40Mj0zMT00Lz80MD80LkE0LkE0LkM2MEQ3MUY5M0c6NEg7NUo7Nks8N049NlA7NlM6NVc4M1s2LmM2MGs2LnQ1LH03L4c5L407MJQ8Mpc9Mp5ANqBANKJAM6hAM7FDNrpEOMVFPM1EPNVGQNdIQtRJQsxJP75FOq5DM6FCMJxBLp1CL5xBL5w/Lps+LZs+LZs+LZs+L5s/MJg8LZY9LZQ8LpM9Lo8+LYw9LIw9Loo9LYk8LIk8LIk8LIg8LIc7LYU8LYQ6LYM7LYQ8MII8MII8MoI+M4M/NIVBOIdDOohEOZRKPZdIO6BIPqxLRLJLRrNMR7JTTa5gVq1zZ6aBcZ2MepGOe4KJd3OAb2NxYlhjVU5SRE1OQEhJO0REOEBANDo8LzQ2Ky8xJjEyKjAxKy8wKy8wKy4vKi8wKy8vLS8vLS8vLS4wLS8vLS8vLS8vLS8vLS8vLS8vLTAwLjAwLjAwLjAwLjAwLjAwLjAwLjEvMjYrOTgsOjgvNDs2M0hFQF9eWXp5fouNmpCUsZKXv4+Vx4SOw32Ju3uJtnyLsn2Mq32ImnmDj3F+h29+g25+fnCDf3mOhYOZjYuhlJGomJCllIidjIOVhXyNe2p7a1xoVFhYQF1ZPl9bQC0uMC0uMC0uMC0uMC0uMC0uMC4uLi4uLi4sLS4sLS0sKi0sKi8rKi4qKS4qJy4qKSwqKywqKyspKispKispKispKiooKSooKSwqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKy0rLC0rLC0rLC0rLC4sLS4sLS4sLS4sLS4sLS8tLi8tLi8tLi8rKjAsKzEtLDEtLDEtLDEtLDAsKzAsKzAsKzAsKzAsKzAsKzEtLDIuLTMvLjQwLzkxLzoyMDszMTw0Mj0zMT0zMT0zMT0zMT4zLz4zL0AyL0AzLUE0LkM2MEQ3MUU4MkY5M0g5NEk6NUo7Nkw6Nk45NFE4M1Q1MF43MmU2MG82L3g4L4I5MIs7MpA8MpQ9M5pAN5s/NJs/Mp8/MaVBMq5CNbhDOb9FOshIP8tIQMpKQcNIQLZGOqpCNZ5BMJlALppBL5lALpg/LZc+LJc+LJk+LJk9Lpg/L5Y9LZQ9LJM9LpA9LY49LIo9K4o9LYk8LIk8LIg7K4c7K4c7K4Q7LIQ7LIM7LYA7LIE7L4A8MYE9MoE+NYNAN4NDOodEPIhFPJRLQpZIPp5HQKdKRa5MSa5RTK1dVqpqXqeAb6GPeZqago+bg4aVgHqLeG17bGJtX1NaSlFVRktPQEVJOkBENjs9MDU3LDEzKDAxKS8wKC4vKi4tKS4tKS8uKjAvLTAvLTAvLTAvLTAvLTAvLTAvLS8vLTAvLS8vLTEwLjAwLjEwLjAwLjAwLjAwLjAwLjMuMjcsOjYqODMtMTk2MUhKP2JmWHuAeouQk42To4+WsIyVtoOQsoGQr4WZso2ktpKos5Snq5Gjo4ygnoeemIKZj32YiYGci4ijkJSwmpixm5Stl4ujjYWbhn6RfWt8aVhmT1NVPVpWO15aPysvMisvMi0uMi0uMi0uMC0uMC4uMC4uMC0tLS0tLS4tKy0sKi0sKi0sKiwrKSwrKSwqKywqKywqKyspKispKiooKSooKSooKSwqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKyspKispKi0rLC0rLC0rLC4sLS4sLS8tLi8tLi8tLi8rKjAsKzAsKzEtLDAsKzAsKy8rKi8rKjAsKy8rKi8rKjAsKzAsKzIuLTMvLjQwLzoxMjoxMjszMTw0Mj0zMj0zMjwyMDwyMD4zMT0yLj8xLj8xLkAyL0EzMEI0MUM1MkQ2M0M4NEQ5NUU6Nkc5Nkg5NEs4NE41MFg3Ml82MGk3MHM4MH06MYY8MYw+MpA+MpdANpc/NZc/NZc/M5xAM6NDNatDNrNFOLpFO71HPb5IPrlHPbBEOKZBNZxAMZdAL5dALZdALZY/LpU+LZQ9LJY9LZY9L5Y9L5U8LpM7LZI8L448Los8LYo9LYk7Log8Loc7K4c7K4Y6KoY6KoQ7LIM6K4I6LIA6LoA6MIA8MYA9NH8/NoJCOYNEPYdGQIhIP5FLQ5JIP5pHQaNLR6hQTKlZUqlmXaZ2aKKMd5uZgJWkh4yjh4adg36RfXSCcWp1ZVxlVFZfTE5VQ0VMOj9GNjxAMjc6LzU4LTEyKi8wKC4tKS8rKC8rKjAsKzEtLDIuLTEtLDEtLDEtLDEtLDEtLC8uLDEtLC8uLDIuLTAvLTIuLTAvLTAvLTAvLTAvLTItMTgsOjUpNTErKzY2LEdMOGFpUnqDcIiSh42Xlo+aoI2ZpYiWo4ebopCqqZu5saG/s5q2qJq2p5u3qJi3pZGxnImrkomrkJCxlJKzlpW0lZCtj4iihYSbgXuSeGd6ZFRiSVFUOVZVOVlYPCwwMywwMy4vMy4vMy4vMS4vMS8vMS8vMS4uLi4uLi8uLC4tKy4tKy4tKy0sKi0sKi4sLS0rLC0rLCwqKyspKispKiooKSooKSwqKywqKywqKywqKywqKywqKywqKywqKywqKywqKyspKispKispKiooKSooKSooKSwqKywqKywqKy0rLC4sLS8tLi8tLi8tLi8rKi8rKjAsKzAsKzAsKy8rKi4qKS0pKDAsKzAsKzAsKzAsKzEtLDIuLTMvLjQwLzoxMjsyMzszMTw0Mj0zMj0zMjwyMTwyMD0yMD0yMD4wLT4wLT8xLkAyL0EzMD80MEA1MUA3MkA5M0E6NEI5NEM4NEY3NEg1L1E1MVg1L2E2L2w4LXY6L4A8L4Y+MIs9MZM/NZU+NZM/NZM/NJVCNJpCNKBDNKVENKxCNbBEOLRFOrFFO6pCN6JANZo+MZY+MJU/LpVALJQ+LZM9LJM8K5M8K5Q8LpQ8LpM7LZI8LY88Lo07LYs8LYk8LIc7LYc7LYY6KoY6KoY6KoM6KYM6K4E5K385LX85LYA8MX88M38/NoBBOIJDPIVGP4hJQopJQ45JQpBHQJdIRKBPS6dWU6dgWqlwZaSDcpyUfZaghY+oioiniIOghH6WfnqHdXF8a2RwXF1pVVJeSkpTQEJLOj5FNTxAMjk8MTM0LDIyKjEtKi8rKC8pKTAqKjErKzIsLDErKzErKzErKzErKzErKzAsKzAsKzAsKzEtLDEtLDEtLDEtLC8uLC8uLC8uLDIsLjgqNzUoMTMrKDU2JkVLMVxnR3WCZIaTeY6bipGelJKemo2emI2ll5e0nqLFpanOraXJrafJsKfLsaTIrJe+n4uzkYiwjY2ykI6yjpCyj42sioShgoCZe3eOcmR4XVJgRk5SN1FRNVNSNiwwMywwMywwMywwMy4vMS4vMS4vMS4vMTAwMC8vLy8vLy8vLy8uLC8uLC8uLC4tKy8tLi8tLi4sLS0rLCwqKyspKispKiooKSspKispKispKispKispKispKispKispKiwqKyspKispKispKiooKSooKSknKCknKCspKispKiwqKy0rLC4sLS8tLi8tLjAuLy8rKi8rKi8rKi8rKi8rKi4qKS0pKCwoJzAsKzAsKzAsKzAsKzEtLDMvLjQwLzUxMDoxMjsyMzwzNDwzND0zNDwyMTwyMTsxMDwxLzwxLz4wLz0vLj4wLT8xLkAyLz4zLz01Mjs2Mjs4Mzw5ND06NT45M0A3MkM2MEc0Lk80LVk0LGQ1K244LHg6LX87LoU7Lo88NJE8NZA+M49AM5BBMpNCMZdBMppBMaA+MaZANKpCN6pCOaZBN58+NZg+M5U/MpI/LZI/LZE+LJA9K5E7LJI8LZI8LZI8LZE7LpE7Lo88Lo07LYo7Log6LYc7LYQ7LIU5KYU5KYM6KYM6KYI5KoE5K344LH44LIE9MoA9NIBAN4FCOYRFPoVIQ4hLRoxNRoxJQ45HQZhKSKFTT6hdWqloYql7bqSOeZmcgZKniImsi4KqiIChhICYgH6Ld3iBbmp3Y2RyW1pnU1FdSUtUQ0VMPEBENjw/NDY3LzQ0LDMvLDEsKTEoKTEoKTMqKzQrLDIpKjIpKjIpKjIpKjIpKjAqKjAqKjAqKjErKzErKzAsKzAsKzAsKzAsKzAsKzErLTYpMjUpLTQtJTQ2IUJJJ1djO3GAV4KSbY2cfZCghpKhjI2gio2oiZW4jqDIlKTQnanTq6jSrqfRraHLpZO9l4Wvh4KshIewhoiuhYyxiIurhoGfe3uUdHGIa19zV01dQklPM0pNMEtLLy4vMSwwMS4vMS4vMS4wLy4wLy4wLy8vLzAwLjAwLjAwLjEwLjAvLTAvKy8uLDEtLDIuLTEtLDEtLDAsKy8rLCwqKyspKispKispKispKispKispKispKispKispLCspKispLCspKi0oLCooKSwoKSknKCknKCknKCspKispKiwqKy0sKi4sLS4tKy8uLDAvLS0sKi0sKi8rKi8rKi8rKi4qKSwoJywoJzEtLDItKjItKjItKjMuKzQvLDUwLTYxLjszMTszMTw0Mjw0Mj0zMjwyMTsxMDsxLzwxLzwxLz0vLj0vLj0vLD4wLT8xLj0yLj00Lz02MDs4MTo6Mjk6NDk6NDs4MT82MUMyK0oxLFQxK14zLGc3LW85LXU9Lns9MIc9NIs9M4s/MoxAMo5AM49AMZI/MZU9L5g8L5w+MqJCNqFDN55CN5k/NJY+MpU/MpQ+L5M9LpA9LY88LI48Low9Low9Lo0+L448Lo48Los8L4o7Lok7Log6LYY6LIQ7LII6K4I6K4A7K347K347K3w6LH05LHw6LoA+MoE+NYBAN4JDOoNHP4ZLQ4hPSItPR4xIRY5IRpNPTJhbVp5nYJ11aZ6HdZ6YgJShhY+qi4msi4Ooh4ChhH6bf3yPeXSIb2p+Y2N6Xl1xWFdmT09cSElSQUFIOD5AMzk5Lzg1LjcvLDMrKTIoKTIoKTMpKjQqKzAqLC8rKjAqLDAqKjAqLDAqLDIpLDIpLDMqLTErLTErLTErLTAsLTAsLTAsLTErLzUqMDUrLDQtJTQ2IT9GJVRgOG59UoGQZ4mZdI2eeo2hfoiheoqne5G2gpvEiJ/LkJ/JmZ7HnZ3GmpjBlYy3ioKtgIWugoy1iYSrf4muhYmpgn6ceHaPb2yDZlpuU0paQEdNM0ZKMURGLi8wKy4wKy8wKzAxLDAxLDEyLTEyLTIxLTQzLzQzLzQzLzYyLzUxLjQxLDMvLDQvLDUwLTUwLTQvLDMuKzMtLTEtLDAsKzAsKy4sLS4sLS4uMC0tLywsLisrLSopLikpKy4pLy4pLS8oLy4pLS8pLS4pLS4qKy4qKy8rKi8rKi0sKi4tKS0tKy4vKi4vKi4vKi0tLS0tLS4sLS8tLi8uLDAvLTIuKzIuKzItKjQsKTUtKjYuKzkwKzoxLDsyKzsyKz00LT00LT41MD41MD41MD00LzwzLjwzLj0yLjwxLTwxLzswLj0vLj4wLz4wL0AxLkEwKUAxKjs0Kjc3LTM5LzM5LzU2MDozLT8tK0YqJ0wpJ1MqJlovKGA1LGQ8MGtAMHlBMoBBMIZBMotCM49AM5M9MJM7L5I4LZM7L5Q+L5RBMZVCMpRDMpJBMJE+LpE7Lpc6Mpc6MpI7MY0+MYg/MIQ/L4I/LoM+LohAMYg/MIo+MYo8MIk7L4g6LoY6LYM7LXs5K35AM3c8LnE3KXc9L3c9L3Y7LX0/Mns7L4JANIhFPIpKQYhMQoZNQoRQRYdORZFLSZdTUpRiW5FvY4x9aomJcYmWfIqego2kh42miY6nio2njIekiH6fgnWae2+XdWmNaWKEX1t6WFpzVVttU1dlTlBXRUpLPUM/NkA5MzswLjYqKjQoKjMnKzMnKzEmKiwqLSkrKioqLCooKSwnKy4oLDEoLTInLTMoLjMoLjMoMDIoMDApMDApMC8qMS8qMC8pLTErKzAtKC8vIzw/LFZcQnB6WH+LZ42cdYudc4yhdoymd4qodomqdY60e5m/hp/Bj52+j5a6io+zg4iufYWrfIOqe4WqfoOofYOmfoCefHmUdXKJbWh8Y1lrVU5bR0lQPkNIND9CLzAxKzAxKzAxKzAxKzEyLDEyLDIxLDMyLTQzLjQzLjc0Lzc0LzYzLjUyLTUwLDUwLDcvLDcvLDYuLDYuLDMuKzItKjEtLDAsKy8tLi8tLi8tMC4uMC0sMSsqLykqLikoLS4pLy8oLy8oLy8oLy8pLS8pLS4qKy4qKy8rKjAsKy4tKS4tKS4vKi4vKi4vKS8wKy4uLi4uMC4uLi4uLi8uLC8uLDIuKzMuKzUtKjUtKjcuKTgvKDovKTwxKzwyKT0zKj41LD41LD41Lj82Lz41Lj00LT00LzwzLj0yLjwxLTwxLzswLj0vLj4wLz4wMEAxLkMwKkMwKUEyKz4zLTo1Lzk0LjoyLzwxLz8tK0QqKUkqKE4rJ1QvKVo1LWA7MmU9MXBBMXhAL4BBMIhAMo8/NJI+NJQ7M5M7MY05Los8L4s9MIxAMI1BMY1BMY9CMpJAMpU7MpU7MpA8Mos9MIc/MYNAL4E/L4I/LoVAMYY+L4k9MIg8Loc7LoQ7LIM7LYA7LHg4LHg8MXQ6Lm45K3Q/L3M+LnI4KnU6LH09MYNBNYlFPItIP4pLQoZNQoRQQ4hPRpFKSJdTUpJmXY13aYSGcICTd4Gef4SlhoiniI2nipCnjZCnjYqkiYGfg3ecfW+YdmWSaWGMYVqDW1l7WFx3WFpuU1NhSk5VQ0ZIO0NANzw3MzcvLTMqKzIpKjEoKy4oKiwqLSoqLCspLCspLC0oLC8pLTIoMDIoMDQpMTMpMTMpMjEqMjArMi4rMi4rNC4rMjItMTMvLjAsKS0tJTg6LVNYRG94XYCLaYeWb4aZbIaeboijcIakcISlcIqtd5O2gJm5h5a2hJOzgY2vfIareIKod4KoeYOofIOmfISkf3+de3iSdXGIbmh7ZVlqV05bSUVMPEBENTs9LzEyLDEyLDEyLDIzLTIzLTIzLTQzLjQzLjU0LzY1MDg1MDg1MDg1MDc0LzcyLjcyLjgwLTgwLTcvLDcvLDQvLDMuKzEtLDEtLDEtLjAuLzAuMS8tMC4uMCwsLisqLyspLi8oLzEnLy8pLS8pLS8pLS8pLS4qKy4qKzAsKzAsKy8uKi8uKjAvKjAvKi8wKi8wKy8vLS8vLzAuLzAuLzAvLS8uLDEtKjItKjYuKzcvLDkwKzoxKjwxKz0zKj40Kz81LD82LUA3LkA3LkA3Lj82Lz41Lj00Lz00Lz0yLjwxLTwxLzswLjswLjwxLzwxLz8xLkMyK0UwK0gvK0stLUwsL0srLkkqL0UrLkEtLEAuKkEuKEYvKU4vKlgxKmIzLWc1Lmo6LG87LXg8MYE9NIc8Now8NY06NI06NIo7NIc9MoY+MoU/M4ZANIpCNoxCNY9DNo4/Mo89L4w+MYo+Loc+L4Y/LYY9Log8LIk7Lok8LIg6LYc7K4M7LH88KX49K3s8K309MXo8MXY6L3Y8MHhAMXhAMXY8LnY7LX8/NYNDOYlGPYtIP4lKQYhMQodORYpORpJLSZhUUZZmXJF3aIeFboKRdH+de4Gkg4Woh4iqiY2qjJCpjI6liYifg4GafXmYeGmWbWGSZVyLYVyGYF6DYVt8XVVyVlFnUEhZR0JQQTpEOTM6Mi4zLCswKiosKSoqKDEoKzEmKjEmKjEmKjAnKjEoKzIpLjErLy8qLi0rLiwrMCssMCktMCgtMCgtMSktMDEvMjMvLi8rKCoqIjU3KlFWQm11XXyKaYCQa36Tan+ZbIOfb4Cgb36gbYKkcYmreI2vfIuteoiqeISpdoKmdoCmdYCmd4CleYCjeYKifX2beXeRdHCHbWh7ZVlrVU5bSURIOT5AMzk5LTIzLTIzLTM0LjM0LjQ1LzQ1LzU0LzU0Lzc2MTc2MTo3Mjo3Mjo3Mjk2MTo1MTk0MDoyLzoyLzkxLjgwLTUwLTUwLTMvLjMvLjMvMDMvMDEvMDEvMjAuMS4uMC0tLy0rLjApMDIpLjAqLjAqLjAqLjAqLC8rLC8rKjEtLDIuLTAvKzAvKzEwKzEwKzAxKzEyLTExLzExMTEvMDEwLjEwLjIuKzMuKzMuKjkxLjkyLDsyKzwzLD81LEA2LUE3LkE3LkI4L0E4L0I5MEE4L0E4MUA3MD41MD41MD0yLj0yLjwxLzwxLzwxLzwxLz0yMD0yLkIzLkUyLk0vL1IrMFcoMFUmLlAnL0kpLkMvLjwxKzsyKz8yKUgxKVMwKl8uKmQvKWk5L2s7L3U8M308NoY8OYk7OYo7N4g6Nok+OYY/OYZCOYVCOYVCOYZCOYdBN4pCNohAMYhBL4hBL4dALoc+LYg8LIk8LIk6K4s5K4g5Koc6KoM6KX88KXs9KHg+KHg+KoI+M3s3Lno3Lno8MXY7LXc9L3xBM3tAMoBCN4NFOoZIPYhJQIdLQYdNQohPRopRSI5TS5BcUY5oW4t0YoV/Z4CLbX6Wdn+efIOng4Sph4iqiYuqioumh4eggoOafn2YeXGVb2qTaWaPZ2aMZWeLZ2SGZV9+X1x2W1BoUkteS0JQQThENjI6Ly40KiwvKCsqJTImKDUlKDQlKDImKDEmKi8pKy8rLC4sLSsrLSorLSorLSgsLSgsLycsLycsLyorLS8rLDErKzArKC8sJTk5LVBUQ2lxWXaDZXuMaHmPaHyVa3+cbn2eb3mea3ugbYClcoKndIClcX2jcH2jcH6kc36ldn6leH2keHyheH2fenqZd3WQcW6HamV8YlhsU05bR0RGOT89MTo4LDQ1LzQ1LzQ1LzU2MDU2MDY3MTc2MTc2MTg3Mjk4Mzs4Mzw5NDw5NDw5NDw3Mzw3Mzw0MTw0MTszMDszMDgzMDcyLzYxLjYxLjUxMDYyMTYyMTMxMjMxMjEvMDAuLzEtLjIsMDQrLjQrLjQrLjIsLjIsLDIsLDIsLDMvLjMvLDMvLDQwLTIxLDIxLDMyLTMyLjIyMDIyMDMyMDMyMDUxMDUxLjYxLjYxLTszMDw1Lz41Lj82LUE3LkI4L0U4L0M5L0U7MkU7MkU7MkQ6MUM5MEI4L0E2MEA1Lz4zLz4zLz0yLj0yLj0yMD0yMD4zMT4zMUA1MUY0Mk0wMlQsNFgpM1coMlIpMUssMUIzMDo2LTc3LTo2KkI0KU0yKVgvKV4vKWY6MWo7M3M8N3o9OoI8OoY8O4c7O4Y6OoI7N4E+OIFAOoJDPINDOoNDOoVAOYRAN4JDMoJDMYNCMIQ/L4c+L4g8Lok6LYs5LYo4LIc4K4U5K4I6K349K3g+KnY/Kng9K4E5LXwvJ4I4L4Q+NHc0K3Q2K31BNn1DN39FOoBHPIJJPoRLQoRLQoZNRIhSSIVXSn1gTntpUYBwWYF1XYJ8YoOGaYaTdYidfISifoKmgoKqhYKshoGphH+lgHuefXqZd3qScHuPbHmMbHeMa3WNbXOKbW2EZ2t/ZGByWltoVFJbSklNPkBANDs3LDcwJjUqJDYoJzUnJzMnJzEnJi4oKCwrKSsrKSstKigsKygsKyosKyosKysrLSwqLSwqLS4qKywjJDMrKDUwKjg1LEJDNVVaRmZwV259XnSIZXGKYnWQZXiYaXaaanOZaHSaaXefa3qibnigbHefbXigbnuic3uldXuld3yjd3medXqcd3eWdHOOb22GaGR7X1drUE5bR0NDNz46MTk1LDU2MDY3MTY3MTY3MTc4Mjc4Mjg3Mjk4Mzk4Mzo5ND06NT47Nj47Nj47Nj45NT45NT83ND83ND42Mz42Mzs2Mzo1Mjk0MTk0MTg0MTk1NDk1NDg0Mzg0MzQzMTUxMjQwLzYtMDYtLjYtMDYtLjQuLjQuLjQuLjQvLDQwLTQwLTQwLTUxLjMyLTMyLTQzLjQzLjQzLzQ0MjU0MjU0MDg0MTg1MDo1MTo1Lz43MT43L0A3LkE4L0M5MEQ6MEc6MUg7Mkc9NEc9NEY8M0Y8M0U7MkM5MEI3MUE2MEA1MUA1MT80MD80MD80Mj80MkA1Mz81M0A3MkQ2M0kzNVAxNlQvNlMuNVAwNUoyMkM1Mj05MDw6Lj05LUM3KUk2KFEzKVcyKV0yK2QzLGw1MHY2NH03N4I4N4M3N4M3N343NX06NH08Nn4/OIA/OYNAOIY/O4VBOIFDNIBDMYFCMYNAMIU9L4c7Log6Loc5LYU5LIM5LII6LH88LHw9LHk+LHg/LHw9LIc0LIsyLKFMRahYUYtBOHw5MIJGO4BLPXlIOnpKPHtNQHxOQX1PQoFRRYdVSoJfTHJrT3B0U3x1WId3XY95Yph/aZ+Lc6CUepeWepGcfIujf4iog4WngoCkfnufeX6ZdoORcIWOb4SNcIGOcH+PcnuOcHeMbXSIbGp+Y2Z2XF9oU1ZbR09NPkdBM0E3Kz0wJzssJzkrKDYrKTMrKC8sJywtJystKCkuKCkuKCstKC0sKi8rKjMpKjQoKjcnKjcnKDMoJDwzLEU+NElHOlFSQF5jTWdxVmp5Wm+DXmuEXGyJXXCRYnGVZW+VZG+XZXKaZnWfbXKcanGbaXSebniicnqkdnmidnmfdnaadHeZdnWUcm+Na2uEZmN8XlVsT05cRUNDN0A5MTs0LDc4Mjc4Mjc4Mjc4Mjg5Mzg5Mzo5NDo5NDo5NDs6NT47Nj88N0A9OEA9OEA7N0A7N0I6N0I6N0E5NkA4NT04ND04NDw3Mzw3Mzw3Mzw3NDw3NDw3NDs2Mzk1MjkzMzgzMDgvMDkvLjgvMDgwLjgwLjgwLjYxLjYxLTYxLTYxLTUyLTYzLjYzLjYzLjc0LzU0LzU0MDY1MTg0MTk1Mjs3NDw5ND04NEA5M0A3MEE4L0M5MEQ6MEc6MUg8MEk9MUo+Mko9NEo9NEo9NEk8M0Y8M0Q6MUM5MEI4L0E4MUE4MUA3Mj82MT82MUA3MkE4M0E4Mz83NEA4NUI4NkU6OEc5Nkk6N0g5Nkg5NEU4MEU4L0U5LUU5K0c5LEk5Kks5K1E3KlovJmQvJ24zLXo2M4M5OIk7OYs7Oos9O4tBPodAOoM+N388NH86M4I8NIg9OIlAOYNBNYFCM4JAMoM/MoM9MYQ8MIE7L4A8L389L30+L3w+L3w+L3w+L30+L389L4Y5L5AxK6M7OM5rZtt+ea1aVI1EPYhMQX9OQHRKPHJOPnBRP3FSQHRTQntXR4JbSn5lT21zT3B6VYR5W5h1X6lvY7ZtZr5xa713b7uCd7GMeqeXfp6egpahgY2hfoWdeYWZdoiRcouQcoiRcoWTcoGUdH2Vc3iTcHSScG2LaWmEZWR4XV1rUlZeR01QO0VEMEI7K0AzKz8yLDswLDcwKjMwKTAwKC4vKS4vKTAxKzMwKzctLDsrLD8pLEQnLEYlLEQnK0Y1LUxDNFZQQFtYRWBiTGdtU2p4V2p7V2yCW2eCV2eGWmyNXm+TY26UYW6WYnKaZnOda3Caam+ZaXKcbnafc3mieHied3aadnOXc3WXdnOScm6LbGuEZGJ7W1VtTU5cQ0dIOkU8NUA3MDc4Mjc4Mjg5Mzg5Mzg5Mzk6NDo5NDo5NDs6NTw7Nj88N0A9OEA9OEA9OEE8OEE8OEQ8OUM7OEM7OEI6Nz86Nj45NT45NT04ND45NT45NT45NT45NT04NTw3Mzo1Mjw0MTowLzowLjkxLzkxLjkxLzkxLjkxLjcyLjYxLTYxLTYzLjYzLjYzLjc0Lzc0Lzc0LzU0MDY1MTk1Mjs4Mzw5ND86NEI7NUM8NEE4L0I6L0Q6MEU7L0g8MEk9MUo+Mko+Mks+NUs+NUs+NUo9NEY8M0U7MkM5MEI4L0I5MkI5MkE4M0E4M0E4M0E4M0I5NEE6NEA4NUE5NkI7NUQ9N0Y9OEc8Nks8NU47NE02Lk83LVE2K1E2K1I4K1A5K1A5KVc3KGY2KnI2LH47M4lAOZVEQJtIRJ9KR59MRqBRSplMRI5EO4Y8MYQ3LYY4Low5MY09Nog+NYc+N4Y9NoU8NYU8NYE9NH09M3o+M3hAM3ZBM3hAM3o+M388M4M6M4k4NJI0MpgoJrM9O+17ev6VksVoY5ZHQIlLQHhIOm5NPGpRPWZUPmhWQGxXQnRbRX9gTIBoUHtyUYV2VZ50XLRsXslfX9NWXNlRW9dUXORvddl6eMyGfsCPgLWVgKuVfaOSeJ+PdpyKcpyKdJmNdZWPdZGRdYuRdYaRc4KRcnyLbnmGanV7YW5wWmdiTl9UQlVFNVI8L080LU4yLkkwLEQvKj4vKDkvJjcuJzYvJzkyKjswKj4vLEItLEcqLEkpLEwnLkkpKlRCNllRPGReSGdlTGlsT251Vm17WGx+WG6FW2iDVmeHWG2PXXCVYnGWYnKZZHacaXSbbHGYa2+WanKZbXeddnqeeHiaeXSWdXWUdXWUdXOQcm+Ka2qDZWJ7W1VtTU1dQk1OQEtCO0Y9Njk6NDk6NDk6NDk6NDo7NTs8Nj08Nz08Nz08Nz08N0A9OEA9OEE+OUI/OkQ/O0Q/O0VAPEVAPEVAPEQ/O0Q/OUM+OEU+OEU+OEI7NUI7NUI7NUI7NUI6N0I7NUI6N0E6NEE3NUE4M0E3NUA3MkA2ND43MT43MT43MTw3MTw3MTs2MDo1Lzk2MTg1MDc0Lzc0Lzk2MTk2MTk2MTo3Mjw3Mz45M0E6MkI7MUM6MUQ8MUY8Mko+MkxANExAMk5AM05ANU5AN05AN0w/Nks+NUo9NEg7MkY8M0U7MkI5MEI5MEA5MT84MD84Mj84MkA5M0A5Mzw1L01EP01AOks6M1Q/OlM3M08wK2E8NlwzLWA1LmA0K14vJ14vJWY2LG09MXE9MIpKPo9HO5dJP59LQZ9GPps+N5s+N55EO6ZORKVRRqlXS6tZS6VPQplBNZc7MJs+NpM5OJI6OYw2NYY1MoY4NIQ/OHxANnI+MXJCNG9BMnE9MHc7MYI3Mow0M5ItMZonLMhISehiYcVFRM1XVeF5dqtWT4ZGPIRWRm5TPmlbQWliRmplSGpgRW5eRHxkTI1qVJJiTLRsXdFuaNtYXeA7TOctRfIrSPUwTPZAWexJXORbZeVucuJ7fNuAfduDf9iJgsN+d72Bd7qEeLaGeLKIeK2JeaiLeaWMeJqAb5l+bZh4aZNvY41iWYRVTXtJQnhBPnU6PGkuMmQwNGIxNFAmJ0clI0wwLU01MUc0LkUyLEQxLUYxLkYuLEcrKkstL1E1MVlINmBWO2ZfQ2dkRWtvTnV8WnWEXW+BWWyDV2yHWnCNX3KSYXSUY3WXZHeZZniaaHGVaXOYb3SWcXKUb3WUdHmYeHuYfHmWeniVeXONcm2HbGuEZ2mCZGF6WlRtTU9fRE5PQVNKQVFIPzk6NDk6NDk6NDk6NDo7NTs8Nj49OD8+OT49OD49OEE+OUE+OUI/OkNAO0Q/O0Q/O0ZBPUZBPUVAPEVAPEQ/OUQ/OUU+OEU+OEU+OEU+OEU+OEQ9NUQ9N0M8NEQ7NEM6M0I5MkI5MkI5MkI5MkI5NEE4M0A5M0A5Mz43MTw3MTw3MTs2MDk2MTg1MDg1MDc0Lzk2MTk2MTk2MTo3MDw3MT46MUE6MEI8MEM7MEU7L0k9MUo+MExAMkxAMk5AM05AM05ANU5AN00/Nks+NUk8M0g7MkU7MkU7MkM6MUI5MEE6MkA5MUA5M0A5M0E6NEI5NEU6NEo3MUwuLFYuLmo2OHU5O3s7O4VFQ4RFQIVJQYVJQYdIP45JQplOSKFQTKJPR5NEN5RCNJpCNqBEOaA+M5w3LZw3LZ89MqNDNZxAMZlAMKBENaRHNqdGNq5IOrZORbRMTa9ITKVARJk5O5E5OI0+OoNAOHg+M28+MHpJO4VMQYQ/OIUtLJIpLrM5RNJMV9xLTt9NTco+PcBAP9BgXLNZUYRANYNVRXlhSWVbQF9eQGloSXNsT3ZnSn5kS5ZjTrxkWNZfW+ZVWutBTvIsRf8mRf8mSP8nSf8uTvkzTvI8UvBJW+tQXuVRXeNTXeBYYttia9VmbNRpb9Jtcc9xcs11dMl4d8d5d8p8fMl5esh2eMdxdMZrcsVmbsVha8Nfa8VgbrNTYaZMWJpHUY5FTIZFSW02OUgcG1QxLU0wKkkyLEo2L0w5Mks6Mk8+N1VFOFtPN2NaO2hiQmlmRW5yT3uDXnqJYnSGXnKJX3CJX3CLYHKNYHWSZHeUZHeUZHeUZnORa3iWdHyXeHuVeH+XfYSchIWdh4ObhYGZg3qSfHKIcW2EamiBZGB5W1RtTVBgRVJTQ1ZQRFVPQzg5Mzg5Mzg5Mzk6NDs8Nj0+OD8+OUA/OkA/OkA/OkNAO0NAO0NAO0NAO0VAPEVAPEZBO0ZBO0ZBO0ZBO0VAOkVAOkdAOEdAOEpBOklAOUlAOUg/NkY9NkU8M0Y8M0U7MkQ6MUQ6MUQ6MUQ6MUQ7NEQ7NEQ7NEM8ND84MD84MDw3MTs2MDs2MDo1Lzk0Ljk0Ljk2Lzk2Lzo1Lzs3Lj43L0A5L0M6MUM7MEU7MUY8MEk9MUs/MU0/Mk5BMVBAMVBAM1A/NU0/NEw+M0s9Mkk8M0g7MkU7MUU7MUQ7MkM6MUI7MUE6MD87MkA8M0E9NEQ7NFZFPlU0L2oyNY5BR61MV8NVYstdZsZfY5tCPpdJP5ZMQZxORKxRTL5VUsxPU8RMTaVANp1CMKBAMKU/MaU7LqM3K6Q4K6c9L6tFNqE9LZg3JJ06J6U+LaxBMbJDMrdFO6cwMq86QrlETL1MUrpNUq1LTJZBPoI3MXs4L3Y2LHgyKoQxLZwzN7k9R9VHV+hNW+JGSc81M9A6Ob0zMchOS8ZjXZVLQIxbSn1jTGtgRGdkRXRvT39wU4FnTI1oTrBoWeRiYvVRWvREUfY3Sf4yS/8yTv8vTf8rSf8yT/wwS/cxSvU1TvM1TvAyS/MzTPQ4UfJAWu9DW+5GX+1JYetOY+pRZuhUauhWa+VTauRSaeRQauROaedObOtQb/JTc/NWdf5nhvFgfeVbddVVbM5abclkcqhSXXItMl4mJ1kwLFc6NFE/NUM7Ljo4KT5CM0xOOVZPM2FWNmVfP2hlRHF1VH+GZYCLaXiIZHiMaXWLZXSKZHKLY3aMZXmPaHqQaXqQaoCVdoSbf4qehY2gipKjkJeolpipmZammZGikoeYhnqNeXCDbWh/Y192WVRtTVBjR1RXRFlWR1lWRzc4Mjc4Mjg5Mzk6NDs8Nj0+OEA/OkFAO0JBPEJBPERBPERBPERBPERBPEVAPEVAPEdCPEdCPEdCPEdCPEZBO0ZBO0hBOUhBOUxDPEtCOUpBOElAN0g+NUc9M0Y8MkU7MUQ6MEQ6MEU7MUU7MkQ7MkU8M0U8NUU8NUA5MT84MD04Mjw3MTs2MDs2MDo1Lzo1Lzo3MDo3MDs3Ljs3Lj84LkA5L0M7MEQ8L0Y8MEc+L0o+MEs/L01AME5BMVBAMU8/ME8/Mk8+NEw+M0s9Mko8M0g7MkU7MUQ6MEQ7MkQ7MkI7MUA8MUA8M0E9NEI+NUc9NFM4MVsqJoo7QL5UYNlUZeZUZ+NVY8tKT6A0MZc7MJI/MZlBM65GPcVJR9VCSM4/Q7FCN6dGNalCM6xAM68/M7A+M7NCNLVFN7JHN6lCMaM8KaQ7KKk7Kqs6Kq42Jq0zKLY5N7o5Pb03Prw3PL88QsZKTMRUU75YU5k/N4w0KoksJZ02McNIS9xPV+NCUtszQN46Oc0uKtM4NMg3NMZFQMhdValXS5FYR3dXQHZlSX5wU4BxUoRmTJBjTKlvW9V1ae5TV/xEUPc7Svk6Sv49Tv9AUf87T/k0SP8/U/85UPs0S/0zS/0xSv8vSf8wTv82U/8zVP00Vv02V/o3V/k6W/g9XPc+YPVAYfhDZvdBZ/U/ZfU/Z/g/aPxDbf9Fcv9Jc/9Pd/9Rdf5VdvJTcedUcOVheNZmdrdXYn4xN2owL1kyK1A4LEc+Lz5BLjtELz9HL1FML19UOGdgQ29rTnx8YIiOcoeRdn6LcXyMcXyOdHyPc3qNcXqKbX2Mb4OSdYiWfJWjjJyplaOunaaxoay0qbG4sLC3sKu1raGropWhlYORgnOEcWh8Y110WFNsTlFkSFJaQ1dZRFlaSDY3MTY3MTc4Mjg5Mzo7NTw9Nz8+OUA/OkJBPEJBPERBPERBPEVCPUVCPUZBPUZBPUZDPEdEPUhDPUhDPUhEO0hEO0pDO0pDO0xDOktCOUtBOEpANks+NUk9MUg8MEg8MEU7L0U7L0U7L0U7MUU7MUU7MUQ7MkQ7MkE6MkA5MUA5MT84MDw3MTs2MDs2MDo1Lzs3Ljs3Ljs3Ljw4Lz84LkE6MEM7MEQ8L0c9MUc+L0s/MU1AME5BMU5BMFBAME8/ME8/Mk8+NE49M0s9Mkk7MEc7L0Q6MEQ6MEQ8MUQ8MUI7MUA8MUE9MkE/M0I/Nks9NFw1MHczMq1MU9tdaeZNX+U/U9c2RbcmK6gxK503KJM7J5c8KaxAM8NEPdQ+P807PLE/NahCNKpAM60+M7JANbhDObxHPbtJPqw+L6o/L6g9K6Y7Kao5KbA6LLc7L7w8McpGQc9FQtA+P9A3OdY3PN5CReJMTt5TUMRDPsdMRM1UTNRTTdlLStxAQ+A1PuEyN9s0Lto3LtAxK886NL84NLNAObVbUJZURHtOOYJiSYZrUIVhR5JbRq5nVctyZOdtaOpFS/I6ROo5Q+c8ROdCSOdGS+hHTepGTfVLVPNBT/M4SfY1SPkyR/4wR/8zTf84Uv85Vv85WP86WP06Wv47Xf89X/8/ZP9BZf9Daf5Ea/5EbfxDbfxDb/xDb/1Dcv5DcP9HcP9AaP9Hbf9NcPJJaulPa+Vbctljc71ZZY4/RGAmJFErIlZAM1ZPPUlMN0BELVJKM2VZQ3ZrV4B7Z46NeZmci5WcjIiTg4KOgIqWiI+bjYyYioeSgoqTgpeejqSombK2qLi8rr/BtsDBucLDvsXFw8PDw76+vrC1saKpoo2XjHmHdml7ZVxzWVRtT1JmSlFbQlVaQ1dcRjU2MDY3MTY3MTc4Mjg5Mzo7NT08Nz49OEA/OkA/OkNAO0RBPEVCPUVCPUdCPkdCPkdEPUdEPUhDPUlEPklFPElFPExFPUxFO0xDOkxEOUxCOEtBNUxANEs/M0o+Mko+Mkc9MUc9MUY8MEY8MEU7MUU7MUQ7MkM6MUE6MkE6MkA5MUA5MT04Mjw3MTw3MTs2MDs3Ljs3Ljw4Lzw4LUA5L0E7L0Q8L0U9MEg/MEo+MEw/L01AME5BME5BME8/L08/L08/Mk49M008Mkw7MUk7MEc7L0Y5MEM5L0M7MEI8MEI7MUA8MUA+MkE/M0I/Nk47NG45NZdGRcRZX9tXYt9DUd44RtQzO70rK60xJ6E4JZg6IZc5IKQ7JrY+LsM6Mr43Mac3LKI6LaU5L6c3LK86MbhBObpFPLdFOq4+Mq0/MKc8LKQ2J6o2KbY+MMNEO8pHPb44Lc5ANuJFQOxCQvQ9QfM5PusyN94uMNs3NeJHQuhTTOVOR9w9OdkxMOMvMuo2N9kxKN48L80sItA3Mb4zLLA3L8lnXLhsXo5XQ4daQ4NWP4lSPalcTM5sYeFnYuVVVfBFS/E9RuQ7QNk9PtJBPtJHRN1PTetXV+1OU+9ETfI5R/Y1RvgxRvguRPsxR/43Tv44U/04VP45V/86WP87XP8+Yf9BZf9Da/88Zv08aP0+av0/bfo+bvg+b/Q9bfY6av9Icv87Yf8/ZP9KcP9LbvdObe9Vb+NZcOhygsRgaphJTnQ6OFw2LVA5K1BDMlVNOl5RQXJlVYh8bpWNgp+dkaann6Gmn5acmJWem56npKavrKasqqKno6aoo7W0sMLBvczJwtHOx9XQzNXQzdTO0NXP09HLz8vGyr+9wLCyr5ifmICMfm1+a2F1XFhvU1ZqTlNgRlZgRVhgSDU2MDU2MDU2MDY3MTc4Mjg5Mzo5NDs6NT49OD49OEE+OUNAO0RBPEZDPkhDP0hDP0hFPkhFPklEPkpFP0pGPUpGPU1GPE1GPE1EO01FOk1DOU1DN05CNk5CNE5AM01BM0pBMkpBMklAMUg/MEc9MUY8MEQ8MUQ8MUM6MUM6MUE6MkA5MT84Mj84Mjw3MTw3MTw4Lzw4LTw4LT05LkA5L0E7L0Q8L0U9MEg/MEs/MU1AME5BMVBAMFBAME9ALU8/L089MU89MU08Mkw7MUk7MEY6LkY5MEM5L0I6L0E7L0E6MD87MD89MUA+MkBANFE6MnIxL6lLTMFSWLs+RL0wNsIwM8EvL7oxKaoyIqM5I50+Ipk7H5s8IKE9I6U7JaQ2JZ42KaA4LaM2L6U0LK45MrdAOrhDPLJANrFCN61BNKg8L6Y4K686MLxDOMRFPsVAN8M+Lc8+Ldk1K+EqJu0iJfolK/8rMv8uNO0pKucuK+EzLN80LOAzLOQzLekwLecyK9oyJdY2JtAyJs83LMU2Lr0+N8hgVdJ/caZlU49WQopNOqNXSchmW99kX+dSVOhDSfVGTe5BRd8/P9RAPMlAOMY/OdFGQeNNTO9KUPRAS/k5SP03SPw1SPgzRfc2R/o7Tfs5Ufw3Uvs2Uv02Vf82WP85Xf87Yf88Z/8+a/8/bf9Acf9CdP9Cdf5CdfxCdPlCcP9GbfpBYf5FZf9KbP5La/9WdP9fevVddvJqfuZwftNteK9dYYNDQWc2L2hCN3NVSnllXIx9dqOWkK2jobKuq7a2trK2uaqvs7C3vba9xb7BysLCysTDy8nGzdXO1t3X2+La2Ofd2+nd3eba3OXY3+TX4ODU3tnP2MrFy7q6uqKno4iSh3SCcWV4YlxzWVtvU1tqTVxpS11nTDU2MTU2MTU2MTU2MDU2MTY3MTk4Mzk4Mzw7Nj08N0A9OEI/OkRBPEZDPEdEP0hFPkhFPkhFPkhFPEpGPUtHPEtHO0tHO05IOk1HO01HO05GO01EO01EO01EPU5DP05DPU1DN01ENUxDNEpBMkg+Mkc9MUU9MkQ7MkM6MUM6M0E6MkE6NEA5Mz83NDw3Mzw3MT43Lz43Lzw4Lz05MD46MUI7M0M8MkQ9M0hANUk/M0xAMk1BMU5BMVBAME9ALU9ALUw/L0w+MU08Mkw7MUo5MUk4MUU4MEM5MEA5Lz46Lzs7Lzw8MD0+MD4/MUE/MFM4LYc8N8RcW8paWa44NqsuKrIxK68vJq0yI6w5JqxCKqpGLKZEKaNBJqNBJqM9JJ85I6E6K6M7MKY6MKY3Lq08NLZDPLdFO7FBNqs9MKk9MKk7Lq09MbtFOcdNQsVFPLw4LL82JM47Kd07LuYzLPErKvkoK/0mK/slJ/gqKvUuK+8yLOs0LOgzKuUzKeQyKOAzJeA6KtEyH9w/MM83Ksg4LcI/NbNBNtFsYL9nWaVSQqhOQ8tjWudoYuZSUupBRvRDS+s+ROE7PdY8PM1AOcE+NLY4LLk2LsQ5NOJISOlARfA6Rvc7Sfo6Sfg4R/c7Sfs/Tv5BVf8/Vv48VP45VP84Vf85Wv86Xv87Y/8+af8/bf8+b/8+cP4/cvpAcvhAdPdBcfdDav9Nbf9Tc/dKaOxBYf1Uc/9nhf9lgvddd+9feOhne9xwf8ZxeKdnZ41eWHtaUZd+d6qZkr6wrcS8usbCw8jHzMfHz8PDz8vK2M3J2NHK2tfO39/U5Obb6erg6+3j6+/l5vLo5vTo6PDk5u7h6O3g6erd5+TY4tHK0cG/wqurqZGWj3qGeGx6aWJ1X2ByWmNxV2NwVGNtVDIxLzMyMDU0MjY1MTg3NTk4NDk4NDk4NDs6NTw7Nj09NT8/N0FBOUNDOUVFPUVFPUhIQEhIPkhIPEpIO0tKOExLN01MOE9MOU5LOkpGOkhFPEpGQ05JTU5JUElDT0U+RU5FPkxDNEpANEtBNU1DOUxCOEY9NEI5MEU8NUM6NUA5M0A4NUA4NUA4Njw3NDw0MkM5N0I5NEE5Nj45NT86Nz46Nz87OEA8OUI/OkRAN0dANkpANExAME9ALU9AK0w/LEdALkdAMEk7MEs4MU01M0w3Nko4OEY7OUNAOzY5MDQ8LzlENDpBLzY5JD89KGJDMbxqXrlKQaY3LKU1Kac3K6U1J6U3Jqg9K6M4JKU8JqpAKq1AK6w9Ka06J642Jas2JaQ2J6E3KaM5K6Y8LqpAMqxCNKxCMqxBMak+Lqs9Lq08LLM9L75EN8VHO8E/MroyJsc5K8w4KtA4K9Y4Ldw4LuI1LukzL+4xLfIvLfQuLfMwLPExLOo1LOQ4LN06Kds6KNw5JtQzH9AzIs84J8Y3J742KMJCNc9TSchNRdBUTOFbWO5cXPBQUu0+Q/I5P/c/R+pBRt9DRNZCQsg/Obs8M7E7L7A8L7I8MMpLQtRLQ9xGReE+P+s8Qfc/R/0/Sfk7R/5EUfxDUf5EUv9EVf1AVvw8Vf88Wv9CZP9Ga/9Bavo7Z/U6Z/c9bvlDdP1Ie/9Le/9Nef9NdPhQc/BPcOdNaepNavxZeP9niP9fg/VHbPdWeOhfe8Nebr16gYdhXo94cKeRhLunnNHEu93W0N3c2tzb4N7c5+Lb6+bX7OvY7vLY8fbd8/fi8/fn9PXr9PTu8vn08fn08Pnx7/bt7vPo7O7j6ene5Obd4tbQ1M3Jyru6uKOloIuQiXmDeHJ9b3B7a32Gc3iBbHZ9azAuLzEvMDMyMDU0MjY1Mzg3Mzg3Mzk4NDs6NTs6NT09NT8/N0FBN0NDOUREOkVFO0hIQEhIPkhIPEpIOUtKNkxLNk1MN05NOExLOUtJPUtKRVBQUldVYFlYalZUalNPYFFIS01EP0g/OkY9OEc+OUg/OkY9OEI7NUQ6OEE5Nj83ND83NEA4NUA4NT04NTw3Mz0zMT0zMT01Mj04NT05Nj46OT49Oz49OUI/OkQ/OUdANkpANE1AME9ALVA/K0xAKkI/LEI/LkY8MEg6MUo2NUk1NkYzNUA2NUE9Ojo9Njs+NUBANEU8LUo5KV5CNIBMPq5RQqs7LaAyI6E2JqM6J543JJ45JaM+KqE7Jac8KK4/LLNALrY9LLc5Krk3KbY4Kqo5KaU6KqU6KqY8LKk/L6tBMatCL6tALq4/Lqs6KrI9LMBGN8ZIOsE/Mrw4K8A2Kcs3K883LNA5LtE7LdQ8L9g6LuA4L+c0Le4xLfQuLfUvLPIxLOozK+E3Ktc6J9U6Jt47KNk2I9U4JdQ9LMw7KsE1JsQ6L89GPNFGP9pJRulPT/NQUfRHS/E8QfU6QfhDSOVCRdtFRNJCQcU+OLc7Ma46Lao8Las9LrZFNcZMP9RORdxHQ+RAQe8/QvtASf5ASvlETfdDTPpEUP9GVP5DVPo/VPw+WP9CYf9Haf9Dafw/aflAavlCcPxGdv5Kev9LfP9Kev9IdPVLcPFRc/Vcevlfe/pXdvxOcf1Fa/pEbO9FatpLachecrFudWtMSZB+dLCWicyypeTTyezj3Ovn5urp7urn8u3i8/bj+fvh+v/i/f/n///s///x/f/2/v/5+/769/369fz39Pr18vjv8vTr7vHo7e/m6+bd4NzW2MrGxbSzsZ6gm46TjImPhYePgo+Vh4mQgIaMfi8uLDAvLTEwLjIxLzQzLzY1MTc2Mjc2MTo5NDo5NDw8ND4+NkBANkJCOENDOUREOklGPUpIPEpIO0xJOk1KN05LOE9MOU9MOUtJOk5LQlRSU19eZmloeG1thWxrimtog2BZaVlRXE9HUkhAS0g+R0c9RUU8QUE7PUQ7PD86Nz04NTw3Mz04Mj45Mz46MT46MTk0Ljo1Lzs2MDw5Mj47ND88NT88NUA8M0U+NEc/NEk/M0xAMk8/MFA/L1A/LUw/LDw7Jjo9KD88K0E7LUI3MUE2Mj40MjszMD04NEI7NUg5NE4yLlksKWwvLog8PqJHRqM7MKIyJJ8xIqQ5KaU8KZ84JZ43JKI7KKQ7Jqs+KrFBLbZBL7k+Lrw9Lr46Lb48L7I8Lqw8Lqo6LKk5K6s8K60+La0+La08LLI/LbA4KLk+L8tLPstHOrw2KroyJsk5LtA2LNQ2K9Q4LNY6Ltg6L905L+M2L+k0LfAwLfQuK/QuK/AwK+cyJ902JtQ3JNI3I904Jdw1I9o5J9o+L9M9Lsg2KcU5LMtBN8k8Nc4/OdlFQeVLSepKSulDQ+1AQutDQ95DQdVEP81CPcI9NLY6Lq44Kqs6Kqw7K6w4KcBEONVOSN5KSOI/Quo9QfdCS/9IUvRASfRASflDT/1HVP5FVfpAVfs/WP5BX/9FZ/9Daf9Da/9GcP9Jd/9Le/9MfP9Kev9GeP9Id/9LdPtPdf9afP9hgP1VdvFDZPtJa/9Udtw/XM1JYNh7hrh8fGFDO497cK6OgdWzp/Pb0fvs5fry8Pn3+vf0/fTs+/rr///q///s///u///z///3///7///9/P/++//9+f/6+P/49v/0+P3y9vvw9Pnw8/Dn6uXf4dPPzr69u62uqaKlnp2jmZ2jl6Ornp6ml5ujli8uLC8uLDAvLTEwLDIxLTQzLzU0LzY1MDk4Mzk4Mzs7Mz09NT8/NUFBN0JCOENDOUlGPUpGO0xJOk1KOVBLOE9MOVFMOU9MPUxKPlFQTF5dYm1senp6koGCoYCCqICApnt1l3JrimVfe1lTbVRMZE1FWkdAUEI8SEQ/RkA7Pzw4Nzs2Mzw3MT05MD05MDs4Lzo3MDk5MTs7Mz47Mj89MUA8MT87L0E7LUY/L0g/MEs/MU1AME8/ME8/L1A+MEw/L0A9Kj8+LEA9Lj87Lz87Mj45Mz06NTo5NDw5NEU6Nk01MVYtK2opLYYxOJ44Q6w9Q6c4L6U3KKU6Kqo/L6g/LKA5JqE4JaQ7JqU6Jqs8KbQ/LblAL74/MME9MMU9McQ+Mr0/M7Y9MrI5Lq44Kq85K7A6LLI6LLM5KrY7LLo8LsRCNctFOcg+M78yKMAyKM05L9Y1K9k1K9o2Lds3Ld43LuI3Lec0LewxKvMwLPUvLPQuK+8wKOQyJts0JNI1ItA1IdcyH9owH9o0Jtw8LtY9L9E6L809MtJEOsQ1LcU2MMo7NdlFQeNOSuVLSd5DP9Y9ONNAOc5BOMg/Nb89MLU5LbE5K685K7E7Law0Jr0/M9FIQtlIRd9BQuZARPRHTf1OVfA/R/A/R/ZCTf5IVf5IV/xCV/pAWPxBXv9BY/9DZv9Gbf9Jcv9Nef9PfP9Me/9Jef9Edv9Ofv9Sff5LcvhNb/9Wdf9VdfdNavFHZPBMZ9I+VuFkdP6fp9OPjmQ5MmxKQKV5cNClnPXUy//p4//08v/9///8//nz//zv///v///w///y///0///3///7/f/8+//9+v/8+P/6+P/59//29//0+P/0+P7z9/br7+zj5NrU1MnFwrq5tLO0rLG0qbC2qra+s7C4ray0qTEwLDEwLDAvKzAvKzEwLDIxLDQzLjU0Lzc3Lzg4MDo6Mjs7Mz4+ND8/NUFBN0RBOElFOkxGOk5IOlBKOlJLOVJNOlNMPFJMQE9KRFZUVWZkcXd4jYeHqY2QuY+Tw4+Qxo6LwIeDtnt3qXBtmmlkjV9bflVQbk5KYUtHWEZDTj89Qjw4OTk1Mjk2Lzg1LDg1LjY3MTc4Mzg5MTs7MT48L0A9LEI9KkM8KUc/LEo/LUtALkxAME1AME0/MkxANEs+NU1AN0s+NUY8M0I5Mj04Mjo5NDY7NDc8NTk8NT46MUg0LVkyLXg4OZQ/RKY+Rak4PKo7MKs9LKtALqxBL6lALaU8KaY7J6s+Kqc4Ja47KLY9LLw9LsE8LcU7Lso8MMo9M8U/Nr4+M7o6L7c3LLg4Lbg4K7o4K7o4K7s3K8dBNc1DOMY5L8ExKMYzKcw4Ls81K9s0K98zKeE0LeI2LOQ2Lec0Le0yLfAvKvUvLPYvKvIvKe0xKOMzJtk0IdA1H880HtcyH9kvHtgyJNg2Kdc5LdU7MdY/NthFPdZGPs1AN8k8NctAOdZLRNlOR9JFPsU7McU9McM9McA8L7o7LLc5K7Q6K7Y8Lbk/MLU5Lb88MslAOtJDP9tCRONESO1KT/ZPVu1ARu0+RfJCTPtJVf9KWf1GWPpDWftDXftAX/tCZP9FbP9Kc/9Oev9PfP9Mef5Jdv9Kd/9Ugf9Uff1KcflJbf9TdP9WdPhOaetEXuRGXepYa/+Wov+1vPOdno5IRmsuKaZrZc2Wj/PIwf/j3v/x8P/8/f/9//z3/v72///2///4///4///6///8///9///9/P/8+f/7+P/5+P/49//2+P/19//0+P/0+P3x8/Pp6uTc2tbRzc3Kw8nJv8rKwMrNwsnQyL7Iv7jCuTY1MTU0LzMyLjIxLDEwKzIxLDMyLTQzLjY2Ljc3Lzg4MDo6Mjw8Mj4+NEBANkNBNUpEOE1FOE9IOFJLO1RLOlRNPVNLPlJLQVFMSVpXXmxpfH9+nY2PuJaZzJme2Jqe3pmY2pSR1IyKyYaFv4F+tXh2p25rlmZlh15beFdUaU1LWURBSj48Pzs6ODs3Njg3NTU1NzQ1NzY2NDg3Mjw6Lj88K0M+KkZAKkc/KkhAK0lBLklCMElBNEhCNkhBOUdAOks9PEk7O0M5Oj03Nzg3NTM4NC84My85MTc8NTc0K0MxJ104MH5DPZZHQ54+P541Mqg8MKo8K6o/Lao/Lao/Lak+Kqw/K7A/Las4JbI5KLk6K785LcM5LMg6Ls06MM88NMs+NcY7NMI5McE4LsE4LsI5L8I4LsM2LMY4LtFDOdFBOMMwJsMsI9A3L9Y8NNMyKuAzLOQxKucyK+gzLOozLe0yK/AvKvMtKvYvKvYvKvIvKewxKOE0JNo1ItE2INA1H9g3I9kzI9YzJNUzJtU1KdQ4LNQ8MdY/NuxZUeFSStRJQsxDO8tGPc1KQMhFO8A+Mbw6Kr07K7w6Krk6Kbc5Krk7LLw+ML9BM8FBNsI9NMY9N89BPddFRd1HSORJTexNUehCRupAQ/BCS/lLVP5OW/xKWvxGXPxGX/hBX/lCYf1Faf9KcP9Od/9Pev9OeP9Mdv9Re/9Se/5Pdv1PdP9Wef9de/9Tb+5EXvpUbO5RZPdkdP+Snv+LlfSDicdgZKdNTbVqZ86Piu+8uP/e2f/v7v/6+v/8/v37//36//77///7///7///8///7/f/7+//7+P/7+P/8+f/7+v/7+v/4+v/2+P/z9/3x8/nt7/Lm5ufd29/Y0tvXzt3bz+De0t/h1tzj28/Y08XOyT06NTs4MTg1MDYzLDQxKjQxKjUyKzYzLDc0LTg1Ljo3MDs4MT47Mj88M0E+NUM/NEtDOE1DN1BHOFNKO1dLO1VMPVVLP1NKQ1NKS11XY29tg4KCppKUxZug2p+m6qKp8aGl756g65mb5ZWY3ZSV1pCRyomJvYKDsXp5oXJxkWZjflpXbFBOXElHUkZDTkNBTD8/Sz09Rzs6QDs5Oj06NT87L0M9LUVALEZAKkZBK0VCL0VDNENDN0JDO0FDPkBBQ0I8RkQ+TERATkVFT0NITkFJTD9JSj9IRUNIQUE9Mkw6LmdGN4NPQY5KPY8/NJQ4K6U+L6k+LKs9LKw+La1ALK9ALbA/LbI9K7E4J7Y4Kb05KsM5LMg4Lcw4LtI5MdQ7Nc86NM06M8s4Mcs4Mcw5Ms06Msw3MMs2L9Q9NtU+NdI5McwyKM40Ktk8M9o8M9g0K+QxKukxKewxKu4xK/AwK/IvKfQtKPYsKPguKvYvKvEwKeoyKOI1J9k2JdM2I883ItQ5JdU4JdM2JdI1JtI0KNM3K9I4LtA3L+NOR+hYUOdaU9pRScxHPsREOb9AN7k+L7k8Krk8KLk8KLk6J7g5KLo7KsA+MMNBNMlEO8ZAN8lAOtFGQ9VJSNZIR9hHSt9JS+ZGSOhCRO1ES/VMU/xQXPtPXftMXftLYPZEXvdEYflGZv1JbP9Odf9PeP9PeP9QefdVevNVePRUdvxZeP9de/9ad/tRa/JJYP1Xa/ZVZ+pNXvZebeJLWuZUYeVUY9dYY8FlZsiDfuWrp//U0f/r6f/z9P/4+f/+//v8//v8//v8//z7//z6/f35+v339/z39P/69//7+P/8+//7+v/4+v/z9f3u8frr7vDh5Ond3eTZ1+LZ1Obf1evn2/Ht4fHx5e3y7Nzl4s/Y1UA9Nj47NDo3MDc0LTUyKzUyKzUyKzYzLDc0LTg1Ljk2Lzs4MT06MT88M0A9NEI+M0pCN01DN1NHOVZKPFdLO1hMPldLP1RJQ1NKTV5YZnBtiISDq5OWy5yk46Ss9aew/auw/6as+qGn86Ck7p+j6p2h4Zmb1pWWzJKSxImItHp4n2ppi2BdfFhVcFJQaE9NZU9LZEtHXkZCU0A9SD86Pj86NkA8MUE+L0NAL0NCMEJDM0JENz9EPT5EQDxFRDtCSj5DVkRIYU1SaFZbblxicmBkb2JiamVgZGZYV2FKRGxHPoRURpVYRpNKN5FALZk+K6hBMK5AL65AL69ALbBBLrRBL7I9K7E4J7U3KLw4K8I4K8g4Lc02LdE3L9U4Mdg7NNI3MtE4M9A3MtI5M9Q5NNQ5NNM4M9M2L95BOtU4L9EzKtY4L9w+Nd49Ndo5Md02LucyK+swKe8vKvEwK/QvKfctKfcsKPcsKPctKfQvKfAxKeo0KeE1J9o3JtQ3JNA4I843Is84Jc84J882JtA3KdI5K9E3K881K8w1LONOR/NkXOtgWdVPRsRBN7o7MrU5Lbg+Kbg+J7o9J7k7Jbo5Jr05KsA8L8Q+MspEO8pBOc5FP9VLSNRNSs5HRM1FRdZIR+NJSeZDROlGSfJNU/hTWvlSXPdPXvpPYfRIXvVHYPhHZPtJaf9Ocv9ReP9Sef9UevBVde9aePleff1efPlUcvVNZ/lPaf9Zbv9bbf9jdPBNXvhVZvRPYPxVZ/VMX+RSX8BeX7t2cdecmPrJxf/l4//t7f/09P///fz///v///v///v///39/f37/P74+P349f/49f/59v/6+f/6+f/2+Pzw8vjp7PTm5uvd3eja2eTZ1ejd1/Do3fnz5f/67P7+8vX69uPs69Td3EI+NUE9NEA8Mz46MTw4Lzo2LTg0Kzg0KzYyKTYyKTcyLDgzLTs2MD45M0E8NkU+NklAN01DN1JGOFVJO1dKOlhLO1pMQVtOSFRJTVhSYGdkgXx+p42Sypeg46Cp9qWw/6qz/6uy/6y0/6yy/Kqx+aqv86is7Kmr6J+h2pma0o2NwYF/sXVyoWhlkl1ah1hSflhRe1lReFZPcE5JYEM/TT86QD87OkI/OD4+NEFDNkJFOj9EPTxCPjpDQj5GSD9MVUVXb1NmhGJxjmlzjnR2jYF4jYRvgIFfbYpbY5NYWp5XVaZWTaZNP59ALp06JaA6JKg9Kaw9Kq4/LLFALrNALrQ/LbY9LLk7LLo2J783KcQ2Kss3LdE3LdY4L9o5Mdo4M9c4NNg5Ndk6Ntg5M9g2Mdg2Mdo4M947NOdEPeA9Nto3MONAN/5bUv9sY/9dVOc/NuUzKe0yKfEyKvQvKfQqJvUoJfgoKPgqKvctK/MwLO0yK+MxJ9owI9QxItQ0JNM6KMw7Jso8KM08Kc88KtI6LNI5K9I4LNE3LdpAOM84MdxHQfRjXuVYUctCPMZBPLc0Krc6JrY8JLk8Jro8Jr06KL86K8Q8MMY+Msc+NsxDO9lQSt9YVNROS8M/O8A/Os9IRN9JSOJHReZKS+9QVPFSV+9OVu5MWfFMXPlSZvhPZvdKZvdKaPxNbv9Rdf9Sdv1SdvRXdu5YdfVYd/tbd/9ceP9ac/9Xbv9Wa/9idf1WZ/9cbf9bbPFGWPREWP9RZe5WZcZmZ6ppZcqPi+e2svjSz//q6f3v7vz49/n9/Pn///n///r//vz+/f/9/v/6+v729P759f/79//59v/29P/29v/19fbo6ObY2OPV1N7QzeHW0PHn3vz05/746P/86f//8/r/+ejx8Njh4EM/NkI+M0E9ND87Mj05MDs3Ljo2LTk1LDczKjczKjcyLDgzLTo1Lz45M0E8NkQ9NUg/NkxCOE9FOVRIOFZJOFdKOllLQFpNR1VKTlhQX2Zhf3l7pIqPyZSd4pum9aOu/qu0/6y1/662/6+3/7C3/6+2/K+0+K+y9amq66Kj45iY2IyKyYB/u3VxrmpmoWRfmWBXjmBWil1Uf1ZQdE1JYkZDVEJBSUFBQzw8OkFCPUZFQUNEP0E/QERCRU9NUldWZGNohnF1mn99ooh9n5R8nKB8mKVwiqRgdaxZabZWYbpRVbhIRrBANKw7Kaw8Jq4+KKg4JKg3Jaw5J645KLE5KLI5KLU3KLg2KLszJcI0KMo3LdM6Mtk8M949Nd88Nd88NeE+Od88N988N+E+OeVCPehDPehDPeZBO+VAOuZCOeRAN9w4L9QxKNg1LOtIP/9aUfFANu42LOssJO4pI/gtKf8vL/4sLfYoKPowLvU0L+82Mec2Lt4zKdYyJtQyJc82Jss6J8g7J8o8KM06KM85KtA3KdE1KdE1KdQ6MM81LdQ9NuVQSuVUUdtMSM1CP7cxKLw7KLs9Jr08J747J745KME5K8I6LsQ6L8g+NMtCOtVOSN1YUdNSTMNEPb9DO8xIQ9tMSN9KRuVNTOtTUu1UV+tQVulOVuxPWvdWZvhVaPlTa/pSbP5Rb/9Sc/9TdP9SdfJNbfhVdP9cfP9fff9cdv9Vb/tSaftSZfxVZ/dSYv9aav9aavNOXvhTY/5Zad9TXrZgX5deV7aBfdmppe7Ixf3h3vnp6f349fr8+fn///j///f//fr+/f/////7+//29/349f759f759f728//39v/19fbq6urc2+TW093Qyt/VzO/l2/z15f/55//96f//7/r/+Ojx7tvh30ZCN0VBNUM/NEE9Mj87MD05Ljw4LTs3LDg0Kzg0KzgzLTgzLTo1Lz04Mj86NEE9NEY/NUpCN05EOFJGNlRHNldHN1dJPFhLQ1dLS1hQXWJeeXN1nIWKwpCZ3Jik8KCr+qqz/q21/q+3/7G5/7O6/7S7/7W5/7W5/6+y+ays9KOj65mX4I6N04OAx3h1vHNts2tgpGldm2NakV1XhVZSd05LaEVEVkBATDg1PEE8QEtBQkxAQlE+QltGS3BXXYJjdZdzl6R7p65/q7J7o7h2nMBwk8Jjg8BTcMJGXtBLXNFIUsQ8PLo1Lrg5KrU8J7A8JbA7KbA7KrI6KbQ7Krc8LLs8LcA8LcQ8LsQ2Kss4LtM8Mdk/Nd9BOOE+N+E9NN86NN04NNk0MNk0MN45M+dCPOxFP+lCPOQ9NeM8NNw1Ldg0K9s3LdQyJ8wsINY2KulHOvVLPvJANu80LfAtKfYsKvstL/wrLvgqLPAqKewvK+kzL+M1Ltw0K9kyKdUxJ9EzJ803KMs6Kc06KNA6KdI7KtM6KtQ4K9Q4LNE0K9Y8NNU6NdU8N+VPTu1ZV9lFRcIzL8E8Lb88KMA7KsA7KsE5K8E5K8A4LMA4LMY9M8dBNs9KQdhVS9NTSsZHPsBEOsdHPtZLRNlKRN1MSeRTUOVTVOJQU+JNU+VOV/JYZPZaaP1bcP5acv1Vb/tRbv1Qbv9Rcv1Hbf9Qdv9aff9be/9Wcv1Tbf5Wbf9cbftYafhaaPtgbvZgbO1dZ+9mbuxmbclcX6BdV3tPRphtZsGYlN26uPDU0/Tg3//19Pn59/n//fn///f///r+/f/////9///4+fz49fz59Pz59P349P/59v/49vnu7O/k4uXa1tvQytzSyO7k2P325P/76P/95///7fr99Orw7N7j30lFOUhEOEZCNkVBNUI+M0E9Mj87MD46Lzo2LTo2LTk0Ljk0Ljo1Lzw3MT86NEA7NUM/NkhBN0xEN09GNVNGNVVFNVVIOFZKPllOTFhOV15acXBwloCGuoyW1JWh6Z2p9aiw+amx+a2z/bC3/7G3/7K5/7S4/7S4/6+x/Kut+KWn8p+e6peW4oyL14OAzX15xXVttnBnqmZgnl9akFlYhFFRdUdHY0I/Uj01REg4QlQ9Q2BARW5DSoBPVZdeZ6pneL1rj8lumstvmMlpj8hgg8lXeMZJZ8Q7VcYySNlBUOBET9E7Pcc4MsQ/ML1ALLE6JK01JK01Ja82JbM1JrY3KL05LMM7Lcg8L9NANtdAN9pANt1AN949Nd45M902Lts0LNMuKNItJ9MuKNgzLeE6NOM8NOE4Mdw1Ldw1LdAsIs4qINk3LOJCNtw+MtE1JssuH+lGN/NJPP1IP/w8OfQsLPEjJfUnKfsvMvEtLuwwL+QyLt4zLNoxKtcwKtYvKdMwJ9M3K9I5K9Y6Ldg8Ldo+L9s/MNxAM9xAM9I2KuZMQuVKRc41MN9HRvNaXN9JS9VBP8g8L8Q7K8M6KsM6KsI6LMI6LME5Lb44LMI8McI+MshGOc9PQs5QRMZIPL9DN8FDN85IP9FGP9VKRdtQS91ST9lNTNpLTd1MUetYYPNbZ/xhcf9hdftXb/VOaPVNZ/9Nbf9Pdf9Sef9Vd/9UcfxUbf1bcP9jdf9pev9ndfpib/Vhbe1kbuNmbNloas5naLVmYY1eVGVHPH9eVamIgc2rqebIyO/a2f/z8/n49vn9/Pj///f///v////+///8///5/P769/v69fv69f779v/9+f/7+P708vjt6erf2d7Uy93Tye3m1v/45v/+6P//5v//6/j67+rv6OPm305IOk1HOUxGOEpENkhCNkZANEQ9M0Q9Mz84MD43Lz02MD02MD02MD84MkA4NT86NEM+OEVBOExEOU5FNlJFNFJFMlZGNlZIO1pNR1ZNUltXaGxri36CsYqTzpSe45ym7qet96mv+a2w/a+z/bCz/7C0/rCz/6+z/auu+6ir+KSn9KCi75qc6ZOV4oyL2YaF0YN/yXx2vG1rrGRlnl9hkllbhFJRc05IYldGWV9DUW1CTIJGUJhMVqxVXrxbZMpaaNlScOJSdd9UddlQbNJKYs1CV8c4SsUuP9Q4ReNDTeZHTNg+Ps0+OMxGOsNINrdALLc+Lbg9Lbo8Lb0+L8M/MMpCNNBEN9VFOtlFOdpCN9s+Ndk7Mtk2Ldk1LNozK9kyKtUwKtc0Lds2MN05MN84MN43L902Lt02LdYvJto2LNg4LM8yI84yI9I5KdU+LdQ7K9g8LehEOPhKQf1EQfk1NvUqLfYqLfcvMvc2N+01NeM0MdoxLNcwKtcvLNkwLdoxLuM4MeQ5MeM7MuI7MuE9Md89MNw/MNo+MdE3K+9XTPhhWtM7NtE7OuZQUdxGSOZQUc88NMo6L8Y4LMU5LMQ6LcQ8LsQ8MMA6Lr46Lb48LsNBM8dIOcdJO8JENr5AMrw+MMlGPMpFPM5JQtVQSddSTdVOS9RMTNdMT+laYPBeaPxldP9oevxdcfNPZ/NNZf1Oa/9Wev9UeP9ScvhUbfZdcftoePtqd/dlcvxldPNfbexga+prdN9ydcNqZqpkXJ5sYX1mVllJOmtYSpR7dL2gnN7Cwe7V2P7u7/v19fv7+/v///n///3+///+///7///6/f/++vv+9fv89v/++f//+v/++v/79f/38vHo4eTc0eHZzPDp1//55v/+6P/+5f//6vf56+3w5+jp4VFLPVBKPE9JO01HOUtFOUlDN0dANkdANkI7M0E6MkA5Mz84Mj84MkA5M0E5NkA7N0I/OEVCOUtFOU1GNlBFM1JFMlZHNFVIN1lMRFVLTFpTY2lphXyBq4mTyJOe3pqk66as+Kms+6yt/a2w/66x/66x/q2w/a2w/ams+aeq96So8qKm8J+j7Zuf6ZaY45KU3pKS2omJz3yAwHR5s291qW1wnWlnjmpffXlfeIJXao5QX6NPXLtTXs1UXdZQV9tIUuVAUeg/UuRDUtxEUNZDS89ARMo5PMk0NuRKTOdJSuFBQdY4N845Nc5BOMhEOL4+McNFNsNFNsVGN8lFOM5GONFHOtdHPNpHPdY+M9U7MdY4L9Y1LdYzKtg0K9s0LNs3Lts4Md47NOA9NOA8M905MNw1Ldw1LNs3LdIuJN07MNo9Ls0xIscuHs43JtI8K806KM44J9Q4KeI6MfM9Of9AQP88Pv4zN/MsL+osLuErKtgqKdQrKNcvLN40NOQ4OOk5O/A4OPA3Ne43M+g3MeM3Ldw2Ktc1KNE1Js01KOdQRf9tY9tIQcg0MtdDQ9Q/Q+pWVtlBPNI+NMs4MMc3LMY6LcY8L8M9McE9MLw6LLs8Lb4/MMBBMr9BMr1ALrw9Lrs8LcREN8REOchIP9BQR9NSTNFQStJOTNVPTudfY+5haftpdP9tfP9kd/VWavVRaf9Vb/9Xdv9WdPpYcPFecPRuefZ3gO1rc95YYfFgbfFgbexib+9zfeyIisyBfKp0aJl5anNrWE9OPF9WR4RyaK+WktzAv+/V2Pzp6/7z9/37/P3+//r+//79///9///7///5/v//+/n/9fr99v//+v//+v//+v/99//+9vnw5+3l2unh1PTv3P/75//+5f//4///6Pn66vL05+7w5VNNPVNNPVFLPU9JO01HO0tFOUpDOUlCOEU+NkQ9NUI7NUE6NEA5M0E6NEI6N0A7N0FAO0NDO0lFOk1HN09HNFJGMFZHMlVINVdKQVNJSFhSXmpngn2Bp4uTxJKe2pii56Sn9qan+qup/Kus/qyt/62u/qyu+6yu+6is9qaq9KSo8aOn8KOn7qCn7Z+k6J2i5pme4pSZ24uT0oaPyoONwoSIt4OBqIh5mo9tiJpjeqlYabtRX9BOWuBJUuhBSeo9Qek9O+Q/Od1DOdZIOs5JOMZHNMJDMMVAMeRUSeBHP9o7N9g2NNg4ONk7PNE5OMg3NMA6L748Lr87LsA6LsI4K8M3KsYzKcYyKM81K9AzKtEzKNQzKdYzKtk1LN02Ltw4L98+NN08Mtw7Mds4L9s3Lto2Ldg0KtczKdUzJtMzJdA0JdA3J9I9KdE+Kso5JMAyHsg6Jso0JdUxKOc1Mfo8PP89QP84PvczN+otMeEtLtktLdgwL9w0M+M5Ouk7PfA5PfYyNvgwM/QwMe0xL+UyK94yKNUxJc8zJMkxJNE9MfpqX+RUTMg5NdBAP8s6PeRSU+RKSNxDPdE5NMk2Lsc5L8U7MMI8ML89L7o7Krw/Lb5BL7w/Lbo7Kro7KL07K748LLw+MLw+MsBEOshMQsxQSMpORsxMSdBOTOdgZOxhaPhocv9ve/9oePdaa/dVav5acv9Zc/tddO5hcuZqdOt9gPGHieh3edpfZPFndP5tfPNldetsd/aRleyin8SUiqKNfGlrVkhRPFdVRnRnXqSMiNu+wPLV2fnj5v/z+P/6/P7+//z9//77///8///6///4/f//+/n/9ff89f3/+f//+v/9+P/99///9v/57/Xv4fLs3Pr14f/95//95P/+4v//5/3+7Pn67Pf361ZPP1ROPlNLPlBKPE9HPE1HO0xEOUpDOUg/NkY/NUU8NUI7M0I5MkE6MkM6NUE8NkNAOUREOkpGO01HN09HMlFGMFRIMlVINVVIP1FHRldRXWpogH6CqIyUxZOd2Jmi55+g8qOg96aj+qen/aiq/6mr/qms/aet+6Wr9aOq8qOn7qKn66Sp7aap7qWo7aOn7pig6Jag5ZSf35Sf15WbzZqVvqCMr6qDoKVlf7RdcMNSZNBJV9xCTuU+Rus8Qew8POtAOeNBNNxFNNRJNMpJM8JGLr9CLMI/LeJTRd5EPN05N+Y+PupERuVARNk4Pc42Nc1CO8lFOclDOMdBNcY+MsM5LsI1K8IyJ8YyKMszKM40KtM1LNg1Ltk0Lts0Lts0LORBON4+Mtk3LNo2LN84L+A6Lts1KdUxJdg4KM0yIMoxIc85KM85KMc0Iso3JdRDMMg3Js44Ktg3Ld41Luc0MO41M/Y6Ofs/Pv9MS/pIRvJCQuw+P+o8Peg4O+UyNuYrMvQrMfgpL/QsLu8vLugxK+A0Ktk1KdM3KMYwIcAuH/RkWetdU89AOtREQ8s7O99NTepSUeBIRdQ8Ock2L8Y4LsY5L8M7L746K748LMFALcBBLrw9Krc4Jbg5Jr08Kb4/LrU3KbQ4LLg+M8FHPMVLQMVJQcZKQstKReVhX+ZeYPFkav5ud/5rdfNdafBYZfhdbfpec/VidOhkceNscux+f/mNi/aGhelxc/hyef95hvVhceBYZvaIkf+0tNCuoqCbh11qUERSOVFUQWpiVZyJgtrAv/LY2/bg4//09//6/f/+//38//78///9///7//75/fv/+vT/9PL+8vn/9vz/9vv89P/99v//9v//8/v15/fx4f755f/95/784/794f//6v//8f398/z88lhOQldPQldNQVVNQFRKPlJKPVJIPFBIPU1DOUtDOEtBN0hANUg+NEc/NEg+NEY/NUdDOkdFOUpGOk5JNlJKNVVKNFZLNVZLOVhORVVMTVpUYmtog3t+p4mPw5GZ15if56Ok9qWi+aSh/KGi/KGl/6Ko/6Or/6St/KGq9aGp8aGo7KWo7aqp762p87Gp9qyp+KCp+Jen8pKh4paf1qajzraevrmFnLhner9MXdFFUt8+Tec7R+c8ROY9QuBAQOBAQOI+P988Pd1FQsk6NMpEO8pFPLoxKdxLRuhKSelDRes+Quk8QOY8P+E9Pto8PdQ8O89CO8g/N8pEO9FNQc1LPr89MLg2Kb05LL83K8M2LMg1LcsyKtEvKtUwLNsyL941MOdAN985LdoyJd0zJuU5K+c7Ld84KNUyH88yH8w0H8o1Icc0Isc0Iso0Jc01KM81KcowJs0zKdE1KdI2KtM1KdUzJtczJ9w0KeAyKeYzLus1MuszM+kvMuctMugtNO0uNfYtM/YrL+8rLO0wLuo1LuM5LNk3KNA0JcMtHMQzIudYSOlZTss7M99OScU0MdpISOFPUNxKStRCQs08N8g4MMY4Lsg6Lsg8LcY9K8I7KL45Jrw7KLs8Kbs+LLo9K7c8LLQ4LLU7MLk9Mbs/M7s/M75ANMBANcRBN+9qYfVwaepjX/RtavtxcexhZPRnbf9wef9sevtoePBkb+liaetkau5sbu5xb+5xb/t5e/99hflabPxjd99icPusr7aqmn2RdV1yUUpZOkxSOHNuWqWViMu3sO3V0//u8P/2+f/3+/34/Pz8/v/////+///+//v//vD/9OX+6+b76u//8Pj/9vz/9P7/8//+8f/98f/77v/66v/55v/54//54f/54fz65f//9f//+///+1lPQ1lPQ1hOQlZMQFVLP1RKPlNJPVJIPE5EOE5EOExCNktBNUpANEpANEpANElBNkdDOEhEOUxGOE9INlJKNVNLNFZLN1RLOlhORVVMTVlVY2tog3t9poaMwI2V05aa4Z+e7KCe8qCd9J6f+Z2i/Z+m/6Cq/6Gs+6Cs9KCr7Z+n6KKl6KWk6qmj7aug7qSf76Cn95qm8Jyh4aOc0LGYwL+NqsJxhMRUYtFDT+I8Ruw4Qe83P+o6PeU8P9xAQdtBQ+A8Q9s6QNpBRMw8PM1DQcpAPsEzMeVPUOdER+lAReo7Quc4P+I4O9w5OtU6OM87N9RFP8Y9NcY9NcxHPsxMQcJENrg6LLc5K7k3Kr83K8Y2Lcw1LtIzL9gzL+E1NeQ4NOU+NeE7Ld42Kd81JuI2KOE1J9s2I9M0H9E5JMs5Isc5Jcc6Jsk8K8s8LMw4Ls40LNM0LtY1LdM2Lc83Kcs1Jsg1I8s0Ic80ItgyJN4yKOMwK+YuLOYsLeYsL+YtMukvNOwrLu0sLewwL+gyLuE1K9s1J9U4J9I5J9U/LrsqGdZENdE/MtlGPutWUNpCP9hCQedVVuJSUtxKStRDQM4+Nso6L8g4Lcc4Ksk8K8Q7KL86J708Kb0+Lbo/LblAL7Y+LrI6LLQ7MLc9MLg+Mbo+Mr0/McFBNMVDNetpXPJtZOdiW/BrZvVvbOhiYfFrbPx0eP9xfv9vfPZodO1dZupZYPFiZvdxcP56ePt2d/94fvlSZP5bcORdbvamqammk2qMa1tzT09fO1NaO3VzXKmdjdbEuvbh3P/08//6+//6+//7/Pz8/Pz+/fv///r+//X/+u3/8+H/6eH95un/6/P/8fj/8v3/8v//8f/97//97f/66f/25fvz4Pry3fz03/z35P368/z8+v///VxQQltPQVtPQVpOQFhMPldLPVdLPVZKPFNHOVJGOFFFN1BENk9DNU9DNU9DNU1DN0tEOkpGO01HOVBJN1NLNlZLNVZLN1RLOldNQ1ZNTlpXYmtpgXp8ooWJuYuRy5GW1piY3pmZ45qZ6Zqd7pug9J2j95+n+KCp9KCq756n6Jyk45yi4J6f4J6d4Z+Z45yY4pab35qa2qSV0LGMwL+CrMdyk8lZcchDVNdBTN8+ROM9P+U9PeU8P+M9P+E+Q+E9ROA8Q9c4PdZAQs9BQMpDP8M8OMQ5NulXV+BCQ+Q+Qug7QeM4Ptw2ONY2NtE5Ns08N9VIQcQ7Mb41K8VBNc1LPsZIOrs9L7c4Kbo2Kb83Kcc3LM82Ltc1MN43MeY4N+k9OdczKtc1Kto2LNw2Kt01Kt03Kdo6Ktc+LMU0Ib80H7k0Ibo3I7w4Kb45Kr40KsAtJeM/PeU+ON8+NtU8Ls44Kcg3JMg3Is04JNI3JdUzJtcvJtkuJ9wvK90vLtsvL9wuL9ssKd8wK+A1Ltw1LNUzJtA0JdA5JtE+KtRBL8IxIOdTRdI7MNpBO95DP+lLSvBUVe1UVuhUVONPTd1JRdZDPM88Mso3LcU2KMU4J8A3Jbw3Jrk6J7o9K7c+LbU9LbI9LLA6LLE7L7U8MbU9L7c9MLk/ML5DNMNFN9xcUepnXeRhWfBsZ/Zwb+dhYuxmZ/NqceBSXu9ea/Vnc/JlbfFgZ/Vmavlxcf54d/p0df9udfNKXfhSaORbbfGcoaOcimJ/YFZvSFJkPldgQXh4Xq2lkuHRxP/u5v/48f/8+P/++v/++v3//Pv//fv///n//fP/9+j/7tz+49r43uH54en85u/86Pb96/3+7v366//66v/45/rx4PTo2PLn1fbr2fjx4f768f38+P/++1xQQlxQQltPQVtPQVpOQFlNP1hMPlhMPlVJO1RIOlNHOVJGOFJGOFJGOFJGOFFHO0xFO0tHPE9JO1JLOVRMN1dMNldMOFdLO1ZMQlVNS1xWYGpofnl5m4KFsoqNwo+UzpOV0pWU1pWV25aY45ib6Jie7Jqi7Zuj65yl6Jmh35af2pWb1ZSY1ZWW1pKT1pGQ0oWEvZGDtqV9sbdzoshmj9NXe9VHYdQ8S95BSuBCQ95DQeBCP+FBQeQ/Q+c9Ruc9RuM/RtY6PtE/QNFFRMZBPLo2McU+OupaWd1BQuNAQ+Y9QuM6P9s4OdM5N9A8OM5BOM9FO8I6LrsyKMA8L8dFOMRFNr0+L7g5KL04KcI5Kcw5L9I6L9o5MeA5Meg7N+s+ONkyLNkyKtwzLN01LOA1Ld83Ltw6L9Y9L8k3KMY6KcE8K748LL87L8E7MMU8Ns45NetDQu5BPeRAN9o8Mc85Ksk4Jcg6Jsk7JdA9KdA3J88xJdExJdQxKNYzLNQxLNEvKtMyKtM1LNM3K9A2Ks01J8o3Jcw7KMw+Ksw7KM88LPReUOBGPNIzL9MvLeZAQPtXWP90df9ycf9qZ/ZeWedQSdVBN8c1KL0uIMQ4J8A4KLs4Jrg7Kbc8LLU9LbI9LLA8La87Lq49L7A8L7A8L7E7LbY+MLxCM8BGOctNQd9gV+JhW/RwbPhzdOZfY+RdYeZdZNZIVOdZZfNncvRnb/ZlbPxrcP5zdv52dvtwc/tlbvFEWPRLYuVYa+uSlqCVg196WVJrQ1NoP1xnRXl8X7CqlOfcyv/16P/58P/78f/99P3/9/v/+vn/+vb/+PL89Or67dr43s7z0srrzM/sztfu1ODv2Ony3fL34/b14/v24/z14/Xs2+3h0endze3h0fHo2fz17fz38f7581xQQlxQQltPQVtPQVpOQFlNP1lNP1lNP1dLPVZKPFZKPFVJO1VJO1VJO1VJO1RKPk9HPE9JPVFJPFNMOlVNOlhNOVlMOVhMPFVLQVZMSlxVXWhleHV0k3x+pYWHt4yPwo6Qw4+QyJCSz5KT1JKV3JSW4JSY35Wa3pec3JSa1o6UzomQx4WLxYGHw32DwX5/uH10n45wlKhnj8FchNZOduJBY+g6Veo5S+ZBR+BFQ9xHQdtHQ99FReZBR+48Su09SuZCSdc+QdBAP9BJRcA/ObQzLchDPOBVUNxEQ+FBQ+RAQeE+P9o/PdRAPNFEO89GPMc9MsA4Kr01Kb05KsA+ML89Lb07K708KcI6Ksc7Ks87L9U7L9s4L+E5MOc4M+k6Nec6NuU2M+QyMOYyMeg0M+Y0MN0yK9QwJ8wyKMs3Lck7McU4L8EzL8M0MM07PN0/QOs4O+03NuQ3Mdg1LMw0JsY1IsQ3I8U6Jcs9Kcs4Jsw0Js41J9Q4LNU7MdM5L9A4LdA+Mco7LcU4J8U4J8c6KMc8Kcc8Kcg7Kc0+Lc06Ktg+MuFDOtQvLeQ6OuAyNOA2N9c1M9Y7N95DP+ZLRupRSetUSehUSORVR8s/MMQ/Lr48LLg9Lbc9LrQ+MLA/L64+MKw8Lqw8MK09L6w8Lq08LLE9LrdBM7pENsdNQt1iWuBjXe9vbPRycuVgY+VgZedgZ/drdvtvevdrdu1gaPBfZv1scf95fP95fPptc/heavNBV/VEXuhVaOaHjaSTg2iAXlt0Sl92Smh3UIKIZrOylujizP/66f/97f/+7/7/8vv/9Pj/9PT/8e376uXx49rt2cbox7vkvLreur/evMfgwM3iw9jmzOPr0+zu2PPw3ffy3/Pq2+zg0ujazercz+/h1vLo3/Ho4fLp4ltPQVtPQVtPQVpOQFpOQFlNP1lNP1lNP1hMPlhMPldLPVZKPFZKPFdLPVdLPVhMPlFJPlJKP1NLPlVMO1hNO1lOOlpNOllMO1hMQFVMR1lTV2Vebm5qg3V0ln59pYSFsYaJtIeJuYqLwYuNyI6Nz46O1I+P1Y+Q05CU04uQyoSJwXyBuHV8sm92rWlvq2xqnIBripRkeq5ZdstQb+NCZPA3VvY0TPg5Se9AReVGQt1KQ9tKReFHR+hDSvI9TvA+TuRDSddCRMxBPs5JRLs8NbA0LMpKQdVMRthCQdo+P9s7O9s9PNlBPtRFP81HPMtHOsA4KsE3KsA4Kr45KLw4Kbw5J706KMA7KMQ7Kco9LNI8Ltc7Ltw4LuE2LuQ2L+g1MOkzMuguL+otMe4wMvU0N/U3Oe40NeYyMdouLNc0L9U2M9EzMs8vMdIvNNw3Puo6RO0wNu4wMuYyMdwzLNE1Kco3J8g5KMk8KMY4JMk2JM83KdQ7Ldo+Mt1BNd1AN9lCN9NHOMlBMcM8KcE6J8M8KcY9KsU8KsU4Jsw6K844Ks0wJ+ZDPNsyL+8/QeMuM9oqLNUxL9M2L9U4M9Y5MtI4Lsw1KsYyJsAxI85FNcZBMrw9LrU6K7E5K685K6s6LKo6LKw8MKs9MKw+L6w8Lqs8K649LbM/MLVBNMlTSeBnX99kX+hrae5ub+ZjaPBqcfVvePpwffxzffZtd+5ia/Zkbv9yev94fv9xdfppcPhXZvlBWfRAW+pRZuJ9g62WhnqOa26HXW+JWnmKYI2Xcra3mN/ewvn03vz65f//7/v/7/X/7+//6+f65Nzv2dHjzcXewbHVr6jTpqrQp7DTq7bUrrzWscnautLfweDmzOjq1PLt2vPq2+7i1uzb0erZ0ezb0+na0+bZ0eTXz1tOPltOPltOPltOPlpNPVpNPVpNPVpNPVpNPVlMPFlMPFhLO1hLO1lMPFlMPFlNP1NJP1RKPlVMPVhMPFlOPFpNOlpNOlpNPFpOQFZLRVhPUl9XYmRfc2pmgXNvkHp6nnx+pH6AqYGCsoOEvIeFxoiHy4mIzImIyoiIyIODv3x9tXZ3rXFyqGtspGZnoGxgjoJfc5VWX7NOXtJKXuxAWPg3TP4zRv45Q/M/QulEQOFIQt5JQ+JGSelCSvI9Tu8+Tt1BRdRGRMhBPclIQrQ6L7E3LM9QR8pDPc8+OdA2NNAyMdA1M9M+ONJFPMlHOsNENcA4KsM6KsI6Kr86J704J745Jr86J8E6JsU6J8s6KdM6LNk5K903K+E1K+U0LOozLesqK/EqLfgtM/wvNP8xN/8zOf80Of01OPk4O/U4PPI5P/I5QfQ5RPg4R/s2SP41R/QrNfQtMu0xMuM0L9k2LdA4K846LM49LMs1JtE4Ktk7L+A+M+I+NOQ9NOU+Nt9BNtlKPNBIOMlBMcQ8LMM6KsI5J8Y4Ksg5KckyJ9M5L+FAOOtEPt4wL+AuLuw1Oeg1ONgzL9U3Ltc4Mtc6MdU7MdI7MM06MMk7L9ZMP8xGOr9AMbQ5KrA2Kaw2Kqs3Kqk4Kqw7La09L64+MK09L6w9LKs8K608LrE9MMFMQtpjW95jXuhrafBvc+ppbvVyevx2ge5mcvdveflxe/Zqc/5sdv93f/91fPlob/ljbvdSYv5CW/c8WepLYd10e7WaiY2een2Ya3uXZoKVaJGddayykMvMreDgxOns0e723uXz2dnt0c/mycXewLzVt7TLrqzHpJrBlJbCkZnDk6HImafLnazLobfNp8HSsM7Zu9ndxOXiz+zl1e/h1uva0ufSzePQyuDPyNrMw9XHvltOPltOPlpNPVpNPVpNPVpNPVlMPFlMPFpNPVlMPFlMPFhLO1hLO1lMPFpNPVpMP1ZKPlZKPlhMPllOPFpNPFtOO1pNOlpNPFtPQVdNRFdNTFxSWl5YZmJdcWpmf3NwjXd2lnh4nHx7p4F+tYR/v4eCxYiCyImEx4J9v395t3p1rXhxp3ZvpXRronBnoHphi4RQXJlIR7NFSNNIT+5CTvg6Rv42Qf86QfU9Pe5BPeZEQeNFQuRDSOhBS+49Tes/Tdg/QtFHRMVBPMRIQLI5LrM6L9FVS8M+N8k4M8cvLMUqKMgvKs47NM1DOcNDNrw+L8E8LcQ7K8M8KcE6J8I7KMM8KcI7J8M4JcQ1JMo3JdQ4Kdk3Kt42K+EzKuUzKeszK/UzM/81OP84PP80Ov8tMv8oLf8oL/4rMfwtM/YpMPImMfcpNv8sP/8qQf0hOvMaL/YiMfMnMO0sMeYwL9syLdQzK9E0K9A2KtQ2K905MOY9Nus+N+s6NOg3Meg1MeI5Mt9IPddLPNNFN8s9L8Q2KMIzJcg1K884Lc40LNQ2LeZDPOA5M+AyMdIgIOw4OeU1NdUwKtI0K9I0K881K842K8o2Ksg1K8U3K+NZTthSRspIO75ANLc7L7U7MLU8MbU8Ma85LbE7L7I+MbE9Lq87LK05Kq05LK46LbE8MtBZUdxiXexwcPR2ee5tcvVxfPZyff96hf9/if94gvRocfdlcP9xfP91f/9rdvheavZPYf9BXvc4V+lHXttudLqdi5mphYKebn2ZZoCWZ42ccaGphLS6mMjNrdXcvczZu8HUtLLMqafCn568mJq2kJayjJCwh4mzgYa1f425hJXAi5zCj6HDkajFmbLIob7OqsvRtdrZxObfzere0unWz+HMydvGw9TBu869tci3sFpNPVpNPVpNPVpNPVpNPVpNPVpNPVpNPVhLO1hLO1lMPFlMPFlMPFpNPVpNPVpMP1pMQVpMQVtNQFtOPV1NPV5PPFxPPFxPPllNPVlMQ1hNSVhOT1tRWV1VYmBZaWFccmpmgW9rjnNwm3Zxp3t1s4R9wYqDyYyCx4h/wIp+vIh5soNyqIdzqI10q4dso4ZchJBHTqRCObZAPM1DQN5AP+g6O/U9P/9ERfc+PPQ+Pe0/QOpAQ+tCSepDTetBTuNBTNE/P8VAOb4/Nrc+M7A8L7I8MMBEONJNRMg3MtQ6OM0yLswzLtZDPMk/NLU2J7s+LLs2JcE6J8M8KcI7KMA5JcI5JsY7KMc6KMs6J9A5KNY2KNgyJNouIuEwJuw3LvU9NfU4Mvc0MPcwLfgqKvsmKPslJ/slJ/skKfsmLPchKfgiLv8nN/8oPv8hO/8ZN/0XMf8nOO8jLuYjK+MrLd0tLdQrKNMuKtw0MeI2NOg2NO83N/I2NfMyM+8uL+4sLOUvLNw5MtE6MdI5MexTS7wjG8QrI99GQMguJs0uKt48N+hFQOI6N9gvKtouKuI1MeU8N98+NNU7L881KcszJsw1Ks07Lss7MMU4LuxiWOBaT8hDOrk2LLo6L7g4LbEzJ7Q2KrExJrAyJq4yJrA1JrA2J7I6KrQ8LrM9MbA6MLpDO9ZcV+xwcPFzdvZ4fPt5g/VxfP98hP13gPp0ffxze/9yfv9yfv9tef9ndPxgbvRJXP8+XP8+XeRAWNRlbLWUgZKgfIOdbX2ZZn6UY4eXapSfd56mgaCnhZynhZKjf4qjfICfdnqacXmab3ydcoGgdoOkdYKtd4OzeYu4f5G8hJW+hpe+h5y+jKK9kKe8k7G8mr7Cp8/Mud/Tx+PSytzHxNS/vMy6tsGyq7mqpVpNPVpNPVpNPVpNPVpNPVpNPVpNPVpNPVhLO1hLO1lMPFlMPFlMPFpNPVpNPVpNPVpMP1pMP11NPl1NPV1OO15PPFxPPFxPPl1QQFtPQ1tORllOSlpQUVxTWF9VXl9XZmRcdGlig25nkXFqnXhwrIB5vIl/xIuAxI+Bv5B+uo10q4xuopdxpKF1qJtrn5lXfZ08Q6o1K7I2LMI8M9NAON0+OOg/OvNBPfU9O/U7PPQ7QPE+RO5ASehBSeJAS9tCR8c8Ob09NLY8MbE7L6s6LK46Lb1BNdBKQdpGQtxBPdQ2M9A1MdZBOs1DOLw6LLI1I704J8I7KMQ9KsQ9KsQ7KMY7KMg7Kcs6Kc85KM82JtQyJdoyJeM1Kuo4LvA5MfA5MecxJugwJuouJe8sJvYrJ/srKf4sK/8tLvwpL/okLPokMP8nN/8kO/8dOP8UM/wTMPUeMPYuOfUzPOYrMtsoLNwuMN4wMtsrLvE6PvQ3Pfc0OvYyNvcwNfgwM/kyNfQ4N9syLdo7Ndc4MuRFP+RFQc4vK9EyLsEiHtQ1MeE/POhFQOA9ONgzLdkyLN02MN06MdQ6Ls85Ksk1J8c1KMg5K8o8MMo8MsY5L+1jWeFYTslAOLo0K8I5McM6ML82LMI5L781K781K700Krs1Kbg2KbU1KLI3KLA2KbQ7MLxDOtNZVOhsau9xdPZ4fP58hPh2gP58hPx5gfl2fv51f/9zf/9wff9rd/xkcf1fbvZJXf8+XP8+XOpEWtNkaq6OeYuXcXqUZHWSXHiOXX+QY4qVa42YcIuVcIWUbXKHYG2IXWmKXWeNXmyQYnGVZXmbaXqfa4GsdISxdoq3fI27fZC8f5O8gpe8hpu7iZu1iKKyja22l769qM/Gt9jHv9bBvM+8uMa3tLutqrKko1xMPFxMPFxMPFxMPFxMPFxMPFxMPFxMPFpKOlpKOltLO1tLO1tLO1xMPFxMPFxMPVxMPVxMPV5MPl1NPV1OO15PPF5PPFxPPF9SQV1RQVxQRFtORlpPS1tQTl1RU11SWl9TZ2NYdmhdhWtikXNrpH92tYd8vol9u5eFv5mAt5t2qZ5wnq51orp2pbVpmLBSdrg8RL41L7o0K8A8MMtDN9NFOdtDOOQ/OfE9PPc6Pvk6QfY9Re9AR+ZBSNlARc9AQsA7Nrg5MLE4La05LKo5Ka05Krs/M89GPtlEPtg6N9k3Ndo7N9xDPd5QRs5IPLUzI745KME6J8Q7KcY9K8k9LMg8K8k6Kcw5Kc83KdAzJNMvI+A1K+49NfVAOfI6Muk0K+A0Jt81JuIyJeUvJOwtJe4rJfErKPMsKfMrLfAoK/ImL/goNv4lOv0dN/wWM/gYM/QlN/IwO/M1QfI4Q/E8RfA8Reo2P+QsNvAyPPMvO/YuOfYtN/UuM/UuMfMvMe00MtwwLOI9Odo2NN87Of9ta+VDQdIwLs4vLNo7ON9APOBBO9s8NtU3LtY1LdY1K9I2Ksg2J8Q3JsI2J8Q4KcU7LsY8McY8McU7MetgWeFUTck8M78wKMs7M9E+Ns47M9I9Ntg9ONc8N9U+N9A9M8o8MsI6Lrs3KrY2Kbk7L7xANs9UTeNnZe1vcvh6fv+BiPt8g/t8g/t5gft4gP93gf9zgf9uff9ndvtgcPxbbfVHXv88Wv8+XOxGWs5gY55+Z3mFXWmEUWiFT22DUnSFWHyJXn2IYHiEXHGCWGF6UF9/UGGFVWaOWm6UYXWcZ32gan6jbYOscoSydIi2eIu5eYu5eY25epG6fpS6gZOxf5WsgJuphqmtlLq1ose5rsu4ssi2tLisrKqhoqCXmltLO1tLO1tLO1tLO1tLO1tLO1tLO1tLO1pKOlpKOltLO1tLO1tLO1xMPFxMPFxMPF1LPV1LPV5NPV5NPV5NO15PPF5PPF5PPF5RQF5RQF1PQltPQ1xORVxPR11QSl1PT15QX2JUbWRZe2leiXBnnH11roV7t4h7s5mFuKWFtK+Aqrh6ocZ4n9F1nMpkjMZNbNxGUt9BQNVBPc9FO8xIO81HO9NFOd5BOu5AQfU8Qfo9RPg/R/FCSeNCR9JAQcY/PL8/NrY8MbA6Lqw7Lao5Ka85K7w+Ms5EOtU8N9UzMeA7OeVBP+FEP+hTTN9VSr86K8I6Kr84JcA3JcQ7Kck9LMo9LMs5Ks44Kc41J9IyJtkyKeU5L/E+N/U+OPA1MOQvJuA1K942KeA0KuMxJ+cuKeotKe0rKe0rK+opLOgnLOsnMfIpOfcnPfgiPPwfPvslQfs2SOQoNucuPP9QXP9gbP9QXPI8SfM5R+gpOO0qOPIuOvQwOvEyN+owMeErKtgpJtgwLdo3MtQyL+VDQP9zcPVWU909PeVHRts9PNo8OdU6NdI4MNE3LdA2Ks00JsYzI741I7k2JLs4Jr87LMA8L785LsA6L8U8NOVYUdxNR8o3MMcwKdc8N95BOts8Nt88Nec+Oek9OeY/OeFAONk/Nc88Msg6LsE5Lbs5LLs8M8xPSeBjX+xub/p8f/+EiP1+hfh5gPh5gPx5gf94gv90gv9uff1ldPlebvdWaPNFXP04Vv88Wu5IXMdZWottU2NyR111Q1x5Q2R6SW1+UXSBVnaDWHOCWW+BV22HWmyOXG+VYnWdaHujboGocYSqcYWrcIWtcYWxdIi0dYm3dom3dom3dou3eI+4fJG0fo+re5Kkfpukh62rlr6ypMi3r8e4tbSrsKGepZeSmVtLO1tLO1tLO1tLO1tLO1tLO1tLO1tLO1pKOlpKOltLO1tLO1tLO1xMPFxMPFxMPF1LPV5LPV9MPV5NPV5NO19OPF5PPF5PPF5PPF5OPl5OPlxPP19PQl1PQl5QRV5PSmJOWWNSZWNUcWRafWxlkXhyon93qIN2pJR9p6yGq8KJqc6Cntp3lOFsidtYd9pEX/RDVftFUe9KUOFJSNFGP8tFPNBFPtpFQelDQ/BAQ/VAR/VCSO1ESd9DRM9BP8NAOL9AN7U9L646K6s6Kqo5Ka44Krs7Lsw/NuFGQuI9O+5CQutBQd47NuRLQ+ZYTNVLPslBM8A4KLwzI8E4KMg8Lck6Kss3KdA4K84wJdczKeA4L+k7NO06Ne02MusvLeUsKeMwLOMxLecxMOwzMfMyNfYzN/c0OPc2O+wtNeosNu0uPfEwQ/MtRvYpSP0rTv8zUvQ5TOUzP/BATf9fbP9ref9XZvVDU/U+UO4zRO0zQe0zQOo3PeM5Ods4M840KscvJMsyKscuKNA3MvJZVPZcWvJYVttBQeJIRtxCQNQ8N843MM02LdA5Ls85K8o3J8I1I7k4JbM4JrU6KLk+Lrk7LbY2K7w3Lsc+NttOR9lFQc41MNAxLeE+OedAOuM4Mec1MesyMO4yMes1Muc4M+E6Mtg6L9A5Lsg6Lr41K7o3LchJQtxfWetubPt9gP+Fif1/g/V2ffZ3fvx5gf94gv9zg/9rff1kdvlecPRSZ/RGX/04Vv49Wu9MXcBUUntgQ1doPFlxP1t2Q2Z5S25+UXSBVniFWnmIX3eMYXmVZXiaaHqgbXyncYGqcoSrcoWrcIapb4etcoiwdImzdIi1dIe1dIW3com3dou4d5C2e46seI6jeJmkgq2tlcC5p87AtdLEwby5wKiqtpycqFtLO1tLO1tLO1tLO1tLO1tLO1tLO1tLO1pKOlpKOltLO1tLO1tLO1xMPFxMPF1MPF5LPV5LPV9MPV9MPV5NO19OPF5PPF5PPF1OO11OO15PPF9PP2BQQGBQQGFRQWJQRmJOUGNOXV9QZWBVc2dhhXRvl3t0nX5ymI92lq6Dn8yLoduCluZyhetkdelQZOk7UvkzTP88UftFUulES9U/QM5APtFDQdZFQuNFRuhCRO5BRe1DRudER9pEQ8tCPMBANbs/M7E7Lak4KKk6Kao5KbA4Krw6Lco7M+hJRepAQOs9PuU3ONoyL99CO+5aUPRoW9tRRMlBM740J8I2J8g6LMg5K8s3K9I4LNEwJto2LeY7NOk7NOo0MOgvLOotK+stLfM0OfUzO/gzPfwzPf8xPv8xPv0xPfkxPvUwQfIxRPQ0S/U1TvUvUPYtUf8yWf8+X+YzSPlPXP9hbv9fbv9XZvtQYPREWOk4SvNBUeo6R90yO9IvMsoyLcI4Lb07K707K8Q6L8AyKNlKQvprY91MR+FQS887Oc87OeBMStRAPMs4Mco3Lc48L849LMs6KcQ7KLQ7Jq47Jq88KbM+LbE5K68zJ7o6McpDPdZHQdlEPtQ3MtcyLuc7N+w6NugyLu0yLfIsLfQsLPMvMO8zMeg3MeI6Mdo8MdI+MsM2LLo0KcVCOthZU+dqaPp8ff+Gif6AhPV2ffd4f/16gv94gv9xgf9pe/tidPhdb/JQZfdJYv86WP5AXPBPX7pRTnFYOlNmOF11RWF8SW6BU3aGWXuIXX6LYIGQZ4KXbICcbH2fbXykb32ocICpb4KqboOpbIWpbIircYiucYiwcoazcoSzb4O1cIW3com4dIu1domsdI6ld5qohLC0mcjDr9jMwNvRz8LCzKuxwZuhsVpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFtMOVtMOVtMOVxNOlxNOl1MOl5LPGBKPF9MPV9MPV5NPV9OPl5PPF5PPF5PPF9QPWFQPmFQPmFQPmFQPmFQPmJPQWVNTWRNV2BPX2FVbWdigHVxknx2mIBzkY91jq2AlM6GlN9+h+5xefljbPpQW/o7Tf8qRv8yUf88U/E8TeA8RddARdVDRNRCQ9xDReBCQ+RBRONDRd5EQtRDPslAOL4+M7g+Ma85K6g3J6k6Ka08KrQ8LME9Mc8/N+A+O+U5OeMwM+IvMuA0Mts5NOdORvxsYfJoXdlRQ8Y8L8Y6Lcg6Lsk3Ks02K9U4L9U0LN43L+Y5M+k3M+kxL+gvLe4xL/UxNf8yQ/8wRf8tRv8qQv8mQf8jPfwgOvYgOvcmQ/UqR/UuTfUvUPMrUvQpVP8yYP9BaPNDWP9gbf9odfhWZe1LWvFMXOtCVdoyQ+tAUt03Q8ksM7ooKLEuJKs4JqU/JqhAJ7g/Lrw6LN1ZTeFdUc1HPs1EPsE2M8k7N+RVUdVGQMk5Mcg4Lco7Lck6Kcg5KMQ9KbE+KaY8Jqg7J6w9Kqs3KKwzKLw9NNNMRtZHQd1FQNs5NtwzMOk3M+02MuswK/QxLf0sL/8rLfouL/QxL+00L+Y4Md87Mdg+Msk5Lr0zKMA7Ms9OSOFhXvd5ev+Iiv+Dh/l6gft8g/97hv94hP9ufv5ld/decPVabOtMYPVJYfw5V/s9We5NXbNLSGhRMVFkNlx0RGZ+TnaHW3+OY4SQaIaSaoiXbomec4ikdISmdH+ncn2ocH+oboGpbYOpbIWpbIWoboerboWtb4Wvb4GwbICya4K2boW3coezdIetdI2nd5yshbK5msjGr9fOv9nSzLu/yqSsv5KarVtKOFpLOFtKOFpLOFtKOFpLOFtKOFpLOFtKOFpLOFxLOVtMOVxLOVxNOl1MOl1MOl5LPF5LPF9MPV5NPV5NPV5OPl5OPlxPPGFSP2FSP2FSP2JRP2JRP2FQPmFOPWJMP2hPS2dOUmJQXGNXa2pmf3d2lX18nIF4l5F6lquBlcaEktp9hfB1ev1rbP9ZW/1ETP8wSv81VP88VfQ9Uek/TONDTd1CSNY9QNtBQ9xAQ95AQdtBP9hDP9BBOcc+NL09MLU/Maw7K6k4KK08LLQ/LrtAMcpBN9hDPdk3NOE4Nd8vL+IzMOc7N9MwJ9E1KetVR/92bOtbUNFDN8o8MMs7MMo4K802K9Q6MNo3MN84MuU2M+czMuowMe0xMvQzNv00PP8mN/8jOf8iOf8iOf8hOP8fOP4eNvgeNu8bNO4fOfAlQvApSO4mSvEnTf8zXv9FaP9idf9gbPdXY/FRXfJQXe9NWuJATdQyPdo9Rsw3O7svLq4vKKY1J6I7KJxAJ5w+Jao5J7I4K9JWSrs7MsQ/OL40Mb0yL85DQOVXU9VIQcg5McQ2LMY3KcQ1JcY1JMM6KLE8KKc6Jqg3Ja05Kqw0Jq8xJcI/NdtSStpJROFIQ947Nt4yLuo0Me0xL+8tK/wyMv4sL/0rLvkrLfMrK+0tKuYxKt80LNY4LNE9Mb8yKLw3LshJQtlcWPN3d/+Ji/+HivuAhf5/iP99iP92hP9qfP5fc/dYbPZUaetFXfVEXvU2VfE6VuBMWqVIQ15LLU1jNVdvP2J9SnWLXIKVZ4eYbIibboqgcouldoyseoard4Gqcn6nbXylaX2lZ4GlaIKmaYKla4KobYOrbYKsbH+uaH6waYGzaoS2b4m2c4mvco6seJmwhK27mL/FqcvKtcvNwra9xZ6quouXp11LN1xLN11LN1xLN11LN1xLN11LN1xLN15MOF1MOF5MOF1MOF5MOF1MOF5MOF1MOl1KPF1LPV5MPl1NPlxMPVtOPV1QP15TQWBTQl9SQWBQQGJRQWNSQmRRQmROQWRMQmpNSWhLTWRQWWZbbG5rhnh7noGErYmIso+DqaWHqb6IoNCCkuJ5fvBzcfpqYv9hXvlKV/E+Ues6TO4/UO9DUepATec9SOU+RuI9Q988Qdo8PdY8Os8+Oco9NME7MLk7Lag3J69BMK08LKw2KL9BNcxGPc0+NtA3Mto4Ndw3Md41Lt42Ld44Kt08Ktk6J9M2Jdk7MvBTTPJZUdlFOcc4Ks0+LtRCM9I6LdQzK/BHQuEvL+41OvM2Pe4sN/9CTfEnM/omMv8pMv8oMvkdJ/0hK/8nMP8oMPEeJ/AeKfkrN+ogLuwmN/EtQ+cjO/9Yc+guRf9dbP9faf5aY/lVXPVQV+tITd0/QM45Ncs+N8RBN7c/MaY3JpozIpk2I5o7J588Kac4La84MMJFP787N70zMcU3NcU1NNREQ9tMSNpLRdFEO8g6MMQ0Kcc1KMw1KsU1Krw8L7M5LK0vI6soHrMtJMM5L9JDO9hIP+RPSN9FPdo3MN0wKucvLfIyMfoyNP0xNPcvMvYvMvYwMfMwLvIwLu4zLuY1Ld05L9U9ML4yJcA+Mbk9M9ZfWelzcf+Pj/uEhvuGjP+Djv94iP9off9fd/9bdf9Vb/hMZvhFY/E6WfQ7W+Y/WdtdaYtAO1ZGLUxeNlp1QmiHTneWXX2cY3+dZ4ChaoOmcIKncYCnbn+mbX6lbH2laX2jaH+jZn+jZn+jZn6ka3+mbYGqbn+sa36tZ3+uZoGxZ4OzaYe1bYu0co2wdpCufJqziai8mbHBpLLBrqaysI2YnnqFi11LN11LN11LN11LN11LN11LN11LN11LN15MOF5MOF5MOF5MOF5MOF5MOF5MOF5LOl1LPV5MPmBOQF5OP1tOPltOPlxQQF5SQl9TQ11RQ11PQl9ORGFPRWJQRmNPSGVOSGlNSmdOUWVTX2hfdG9ukHl+qICHu4eKwZ6VyqOLu6t/o7l4kNN5g+p8e/R2avZpYPhdYfNPWuxGUvJIVflKWfZGU+8/Sus7ReQ5QeA6Pto6OtU9OM4/N8g/NcA8L7c8LKs8K6o/Lao5KbI6LMFBNsY9Ncg3MtQ8N9I1MNY1Ldc1Ktk1Kdo3Jts6Jts7Jdo5J902LuZBO+tNROJKPdE/MMc4KMs5KtQ8L947NPZKRuUxMvA2O/Y2QfEuPP9ATu8nNPMkLPclKPspLP0rLv0rLvgoKPYoKvcrLO8kJ+0lKOsmLf48RdkaKfA0Q/xBVNgmNv9qdf9iav5aYfxXXfRPU+VCQ9g9OdE+Nr44LL9ENblINqk+LJkvH5ApGo8oGZIoG54tJbE7N9FUUs5IR8M1NMc1NtE9PetXVdhHQtZHQdBBOcc5L8YzKco2LNA3L884Mcc9M8I5McI1LsQzLsk0LtE4M9g/Od9GQORKQt5BONo2Ld0wKucvLfIxMvswM/swM/QwNPMxMvQwMvMvMPMwLu8yLuc0Ld85Ldc9Mb8zJL48L7c9MtNeV+l2c/+QkPmFiPiFiv+BjP90hf9mfP9cdv9YdP9Rb/5JaP1BYvM6WvE/X+JKYcFTXHxAOFNHMU1fOVt2Q2eGS3OVWXicX3edYnuhZn2ka32mbHylaXylaXykaHujZ3uhZH2hZH6gY36iZXyjan2mbn2pbH2qaXyrZX2tY3+vY4KwZYWwaIeya4ivcIirc4urfJCshJCqh4yii3iHgGRwcFJeXl1MOl1MOl1MOl1MOl1MOl1MOl1MOl1MOl5NO15NO15NO15NO15NO15NO15NO15NO15LPF9OPmFQQGBQQF1QP1xPP1xQQFtSQ1xSRltRR1xPR1xPSV9QTWNRT2ZUVGdVVWhWVmhXXWhdbm1ohnN2o3yDuoKKy4qN1JiR16CKyqqCtLl9n8+Ak+SEhu5/dvNzavxmaPdTXO1HUfBGUfZHVPdFUfJATO49R+U4PuA3Otk5OdQ8N81AN8VBNL4/MLY+La0+Lao8K6s6LLhCNsdIP8A7MrwxKso6Ms02L9A2LtU3LNg4LNk3KNk4Jtw5JuA6Kt00Lds0LuJBOelPQ95IOsg1JckzJNlAMuI+NfVIROgxM/I1O/k3QPg0QP9FU/gyP/ApMOsjJuwkJ/kxM/UtL+8nJ+wmJ/UxMuspKvY4OugrMeIpMew0QP9SXu89Tf9caf5eZvFWXO5PVPFOU+pFSd06O9U3NNQ/OcA2LME/MrxCNbM9Maw3LaUzKaEsJZwnIJolHqowK8dFQ8I6Or0tLcgzNddBQvReXdFAO9JDPdBBOcs9M8w5L9Q9NNtBOdtAO9tAPNg9O909PeNAQeQ+PuA6OuM/PexKR+BBO908NNk1LN0yK+cxLfAzMfUxMvgwMvQwNPQwMvQwMvMvMPMwLu8yLuc0Ld85Ldg+MsA0Jbo4K7U7MNBbVO16d/+TkvuHivqDif1+if9ygv9kef9bdP9Ucf9Obf9GZ/s9YfQ8Xu9GY99UZ6JBSHA7M1NIMlFhPF55RmiHTnKTWnWYXnSaX3ieY3ujZ3ykaHmiZnmiZnmhY3igYnmfYnufYn2fYnygY3qhaHukanunaHuoZXupYXupYH2rYH+tYoeyaoq1bouyc4msdIamd4KedXmTbnCHbVRkWUNPTTRAPl5NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15MOGBOOmFQPGBRPl1QP1pOPllPQ1hQRVhPSFtRT19VVGJYWWVYX2lZY2xcZmteZ2xhaW1lcm9rgnR0mnl+tX+GyoaM2o2O4Y6H15+L062KxLOAqb15jsx7gd6BevKCd/9zcv9jZ/lVXPRNVPVHUfRDTfI+Se87ROU2O+A4ONs5N9Q8N81ANsZCNbxBMbc/Lqs6Kq0+LbE9MLxGOs1TSMdIP7o1LroxKcg5Mc04MdQ8Mdk9Mds7Ldk2J9w2JuA4K+A1LdsyK+E+NexOQuRMPtI6LNE4KuBCNt83LvA+OukvMPAxNvc0PPw4Qv9OWv9MVf0+RfIzOOIkJu0vMeosLPAyMugqKusvLvI6OtIbHeYzN90sMug4QvBFTv9YY/JOV9g9Q9tCReFCR+E+Q986Pt04PNg4ONM5N8k4M8I5Mb06MsBBOs1OSNZWU9BOTsNDQrI3MrY5Nc9LSdlNTORSU+9ZWutTUvFZVsk1Mc4+NtJCOdBAN9M/NdlCOeBDPONBPuk/QOc4Pew5P/I/Q/A7QOg1OOw+P/ZNSt45M9s2MNozK94zLOU0Lu00MfIyMfQwMfQwMvYvMvYvMvUvMPUvLvExLuk0LeA4Ldk/M8I2J7c1KLQ6L8tWT+98ef+TkvyIi/2Bif56h/1vf/xjd/9Ycf9PbP9GaP9AY/k5XvQ/YOlLZNhaaIUzNWc7MFdPOFhoRGF7S2qJUHOSWXSVXHWYXnedYnmhZXqiZnegZHagYXefYXaeYHieYXieYXufYXygY3qiZnqjZ3ymZnqnZHqoYHqoXXyrXX6tX4ayZ4u0boyzdIqtc4amdYCdcXSOaWmAZFJiVUZTTDpHQF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF5NO15NO15NO15NO15NO15NO15NO15NOV1LNV9NNWBQOV9QO1xPP1pOQlhPRlhRS1lQUWBXXGdgaG5mc3NoeXNne3NnfXJpfnBtfnBxhnN2l3h8q3yBwYCG0oWJ4IyM5pWN452M2qCEv551n6Bsgqxucbx2bNJ2afJzbf9sbP9naf5eYPtSWfVGTe87ROo3Pec2POI4Od05ONY9N85BN8ZCNb1CMLhAL603KbVBNLA7MbA7MchSSNVcU8lNRbs7Mr45MME3Lcw5L9c/NNs9Mdo2Ktw0J+I2KuAzLOI3MOQ9NeVFOeJGOd5CM95BMuI+MtswJuo3MuwwL+8uMfEuNPo3P/9QWP9dZP9aX/9PU+EuMeMwM+AsL/dER+g2NtwsLNstLus+QN0zNtkzN/9iaOA8Q8sqMsotNMEmKtU7PeFARds2OtkzN985Pdw3O80vMMw0M807O9VHRt5SU+xgY/VobvRla+pdY8RAPsZFQOVeW/hoZ/9vcP9qauVLS9c9O8k0MNE+N9hFPdZDO9U+NdU8NNg5M9w0M+82PPEtOfAsNvIuOPAsNussM/M5Pv5KS98zL9wzLtozK9wzLOM1Luo0MO80L/IyMfQwMvYvMvcvMvYuMPUvLvExLuozLeI3Ldk/M8Y4KrQyJbI4LcNOR+98ef+Skf+IjP9/if93hfpsfPhhdPtUbv1IZ/8+Yv86X/o2XPRCYuBOZcJXYXEwLF8/MFtXPl5sSWZ+TmuJU3SSXHWWX3aZX3ieY3mhZXigZHaeYHaeYHWdX3aeX3eeX3ifYHufYXygYnqiZHulZXymZHynYnmnXnmnXHuqXH2sXoCsYYWvZ4eubYeqcIWlc4OgcnuVbnKKamZ3ZVtrXlJiVV9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OOl5MNF9ONGBOOF5PPFtOPllPRVpTTVpUVF9aYWhicHJtgXp1jH10kXtxk3pwk3ZwknF0k3J4mnV8qHmAtnuDxH+Fz4aJ2o2L3paP3JmKzZuFtqKDo6qEkat+eZ9sW5tSP7xNQtRRSeJXUutXVfFTVPFLT+0+Q+Y1O+k5POY5O+A7Odk+OdNAOMpCNsFCMbo/L7Q6LbpBNqs1K6MuJL5JP9lnXNlkWstVS7k9M7g1K8AzKc46MNk7MNo2LN4zKeQ2Ld8xKuU4MuM7Mt05L94+MONGN+RCNd85Ld8xKOo1LvAzMfAuL+0qLvQxN/9FSv9WW/9dYv9cYeI5POM5PNUrLvRKTeI4OdgwMNs1N8woKcwnK/hXXN0+Q9Y6PtI3PbofI8UpLNw8PudCRt00OdksMt4xN9oxNs0oLtIzN+RLTvZhZftobvljbPdfa/pgbPhia9ZMTNVOSupcWupWVOdNTeNIRs80Ms4zL9lBPOBLRORPSN9KQ9lAONc6M9c1MNwuLfUxO/ssPPgqN/UnNPUpNPgwOv8+Q/9KTOAxLt4zLNwzLN01LOE0Lec0L+00L/E0MvQwMvcvMvkuMvgtMPYuLvIwLusyLeI3Ldk9Mck7LbQyJbE3LLtEPux5dv+Njf+Ijf98iP9xgfZoePZfcvlSbPlEY/85Xv82Xfo4XfFHZNFOYKJJTWU1K1ZEMFtZQF5sSWV8TmuIUnSRW3eVX3iZYHueZHqgZXaeYHObXXObXHObXHScXXadXneeX3ufYXqhYnqhYnukYnynYnumX3imW3inWXqpWXuqWn6qX4OtZYWsa4epbYmnc4mldYSddXyUcnaIcG5/bGZ3ZV9PP19PP19PP19PP19PP19PP19PP19PP15OPl5OPl5OPl5OPl5OPl5OPl5OPl9OOmFPN2FQNmFPOV5PPFtPQ1tSS1xWVl9aYWtndnNvhn16l4J+oYF8pX13o3t1pXh2p3N5qXN9sHqBuH2Dv4CGxIWJyY2OzpSTzZqTx6CVvaubtbymssmtqcWmlKqIbZxmSpxFMq9BNLdBNcNDOtdJRelPT+5KS+w/Q+s9P+k7PeQ8O989OtlAOtBAN8g+McE9ML06MrxAOK80LKcxJ7xKQNFiV9ZnXNVlWcNPQro+Mro0Kcc3LtY5MNk1LN8yK+c2MOMxLeQ1MOI3L984L+A+MeZEN+Q+MN40J+Y0KukwK/AzL/AuLu8tLvIxNPM3OPZCRfZNUvxZXulGS/ZRV9k0OOtGSt04POZBRdo3Os8vMdEwNeRIS9M4PNA3OrkjJdU6Pts4O+U7Pus8Qeg3PeItNt0pMuExO+c8RPBMU/1dZf9rc/9qc/pgbPZaaPlYaPdbaPRkZOhaVuhXVNhAPc8xMNQ0NNMzM+FDQONKRelSS+pTTOFKQdk/N9g5M9s4MeMzM/MuOP8wPv8wPvoqOPwuOv87Rf9DSPtBROMxL980Ld00Ld01LOI0LeYzLO00L/I1M/QwMvcvMvkuMvgtMPYuLvIwLusyLeM3Ldg6L80+MLUxJbE3LLI7Nelzcf+Kiv+Hjf92hv5pffNhdPNbcPdQavpDYv84YP84Yfk7YexMaL9PW344Nl09ME5GMVZYQFplRWN4TWqFUnKOW3aUXnmaYXueZHieYXSaXXCYWnCYWXGZWnGaWHSbXHWcXXmdX3ifYHmgX3miXnqlXnmkXHikWXikV3mlVnunWH+pX4KsZISraIaobIelb4aicYCZb3iRanKFaWx+ZGR2Xl9PP19PP19PP19PP19PP19PP19PP19PP15OPl5OPl5OPl5OPl5OPl5OPl5OPl9OPGNROWNROWFQPF1QQFpQR1xUUl9aYWFfbXRyinp5mYGAqIOBsH99r3t4r3p2sXd3tXd8vniAwX2FxIKIxIeKwY2Pv5eWvqCdvKynu7astb6zsci4q9C+ptbBotG7ltCsiK9vVK9dSKVINqg+MMJHP+BXUe9XVvFOT+lAQ+o9P+Y8PeM+PN89Otg9ONE6Mck5MME4MMA8N7k6M7c+NcJQRsdYTcddUNFlWNNjVcNNP7w5L8U4LtI5Mdc0Ld8yLOc2MOY0MOIzLuA1LuM8M+dDN+ZCNuI6Ld8zJ+o1LOYuJvAwLfAwLfAzMfE1NOctLuMzNedCRvdYXfZXXP9vdeVESutITeE9RP5bYP9vdd8+Q/99gv9tcepRVNQ+QMYwMtY6PfNJTO45QPE4QPg9RvI3QugtOPQ+Sv9daP9td/9qcv9jbvddZ/pea/9hcP9dbvlZZfJcXeNPS+JKR9U3NNMwMdk1NNIwLtg5Nd9EP+NKRONKQtlAONM2L9Y0L9w3Mek3N+onL/wwPP4yPvgsN/kwOv8+Rf0+Q+w0NOIzLuA1Lt42Ld80LOEzKugzLO80L/Q0M/YvMvcvMvkuMvgtMPguLvMwLusyLeM3Ldc5LtE/MrYwJbI2LLA2Medvbv+HiP+Gjv9wgvxjePFccPRYbvdPaftCYv85Yf88ZPZBZORSabBRV2QvJ1dEM0dHL1JUPFVeP2N1TWmBUXGLW3aSX3qYYnydZHicX3KZWm6WV26XVW6XVW+YVnKZWnSbXHebXXeeXXeeW3ihW3mjW3ejWHaiV3aiVXejVHmlWHqkWn6mX4GmY3+hZH6cZnuXZnKMX2uBWmB2UltuUFNmSFxMPF5OPmBQQGBQQF9PP19PP2BQQGFRQWJSQl9PP11NPV5OPmFRQWNTQ2JSQmBRPmRTP2FQPl1QQF5RSVtRUFpTWmVhcHNxiXl4mnp8pX6AsYCBuX5+unl5t3NytG5utnR3yHZ7zICDyouNxpaXw6SkvrKwu7y5tMvGs9PMsNnPrNvPp9zPo93Qo9nLnNnCmNGoiLiAZ6FfSct6Z9Z0Z71IP9dRTvdjY+lLTOU/QeI4OeQ6O+I6Odw3Ndk1M9Y7Nss3M8A1MMdCO7k9M79JP8ZYS7lPQc5kVtFjVMxYScVHO8Q6L802Ldg3L+E2L+M0L98wLd8yLOA3MOQ9NOE9Md03K981KOU3LOUwJ+ovKOwvK+4xLe4yMOs0MOg1MeM3Ndc3OeZKTvVZXe5PVNc4Pdc2PPlYYP9+hP9+hv9vdf9nb/9pcP9mbPVcYfFYW/taX/9VXP9ETPw4Qvs3Q/czQe8sOuwwPvE9Sf9TX/9gaf9ncv9lcP5ibf9icP9gb/1dZ+1TU99GQdY4NdY0MdcxMdcvLtgzMds5NOFEPdxCOtk/N9Y8NNc5MNs4MeA5M+Y2NvE3PPQ1PPY0PPY0PPc1PfI1OeszNeMxL94zLN41Lt83LuE2LuQzK+kyLO8yLPYzMfcwM/gwM/ovM/kuMfkvL/QxL+wzLuU3LuA/Ncw4LL82LK8vJrg7N9JYV/+Ymv57g/9tgP9lfPhcdPBQavVIZvxDZf87ZPk5YPVObNNSZIk9P1IsIUM7JkNHLktNNVpgRFpqRWN4TXGIWniSYniWYHSVXHKWWXGYWWyVU22WUm6XU2+YVHKZWHSbWnWcXXWcW3SbWHSdV3agWHehV3aiV3aiVXWhVHSgU3ulW3ujXXqeXnWXW22LVWJ+TVhyQ1NqPkFXMD9VLzxSLFxMPF5OPmBQQGFRQWBQQF9PP2BQQGFRQWNTQ2BQQF9PP2BQQGJSQmNTQ2JSQmBQQGZWR19RRl1QSF5UU2FaYWRgb21rg3Z3lnh6o3t9rn1/uHh8uXJ2tmxvtG1wt29xvnV20Hx+1YmJ05iYzqinx7m2wcnFutPOsdvXquLbpefepebdouTbpOLYo9vRoNTHm9O8nLucgKl8ZcWLd8p9bbRWStJhW/ZycOxaW+dLTOM/QOg+P+s+QOg8POI2Nts1NdY9OMk4M8o/OLk2Lrg+M75MQbZIO8hdTd1vYNRgUcZIOr01KcUxJ9Q2Ldw1LdswKeI1MeU5NeQ9N+A8M9w4Lts1Kd80KuM1Kuw3Lu01Le0yLeswK+cwLOMyLOE0Lt01MtY4N9g+QOVKTvNXW/pdZPxcZP5dZf9hafRTW+9OVvFRW/9fZ/9qcf9mbPVaYPNOVO00OvEsNfQqNvctOfEnNeUhL+YnNu03RP5PXP9aZP9ibP9kbf9lbv9jbf1baPVRWuVFRd48N9s2NN42M981NdwzMNoyL9s2MuA+Ods+N9k8Ndc6M9s4Md84MuU5Nec6Nus4O+s3Ou02Ou82O+83Oew1N+UzMd8yLN00Ld02Ld83LuI2LOUyK+oxLPIxLPUyMPcwM/cwM/ovM/kuMfcvL/QxL+wzLuU3Lt88M9Q9MsI4LrYxKrc3NNhaW/+Qk/tzff9mev9edvlWcfdOa/pHZ/xAY/w8Y/VBZOVPaLpMV3k8OUwyIzw6IzxCKEVHL1BUOVZkQWBySm6DWHWPX3aSX3STWnGTV3CUVGuST2uUUGyVUW2WUnCXVnKZWHOaW3OaWXWcWXWdV3WfV3WfV3SeVHKeUXGdUnGbUW+XUGyUTmmMTGKBRlh1P05pNkZdL0BXK0BXLUFYLkFYLllMPFtOPl5RQV5RQV5RQV5RQV9SQmBTQ2FURGBTQ19SQmBTQ2JVRWJVRWBTQ15QQ2JVTVxRTVtRUmNZYmtkdHFthHZ1lXp8pXl7rHl+tnh8u290tmVpsGJmr2puuHJ1xn1914eE3ZeU26mn2Lu5z83JyNzYv+XhtOnkqu3opvDppe3lpOfhp+Lbp9fPocvDnrivkqmbgZuCbKiDcKdvYJxSR7pdVd1tafd1de9fX+RKTOZBRetBROw+QOg4O+M2ON89O9Q7NtRBOsM4Mbc3LLc+M649L7dHOdtqXN9pW9pcTspCNsYzKdE0K9k2LdkyLN41MulBPuxHQ+A9NtUyKdUxJ9szKN4wJ+c0LegxK+cuKeYvKeMyLOM4MOE9NOBCOcYtKMo0M9xDRfBWWPpeYvdaYfNTW/FRW+lHUupIU+9PW/xcZv9tdv9udPRZX+M+ROkuNfQtNPsyPPwyPvUrOe0nNvY2Rf9LV/dJU/VQV/hXX/5eZv9ja/9gafdSWelCSd45N943MeM3Nek8OOw8POY5NeE1Md02MN06M9k7Mtc5MNc5MNw3MeI5NOg7N+k8OOM5OeM5OeY4N+g4OOg4OOY2NuE0MNsyK9o2Lds3Ld43LuI2LOcyK+swKfMwLPcxMPUxM/UxM/gwM/cvMfcvL/MxL+4zLuc2Lt46MdxEOcg5Mbs0LrUvLuRfYv+DiPhsd/5ieP5Xc/pQbf5MbP9CaPc6YPQ8YOxJZtRTZ51ESm08NU8+LD08Jzo/KEVEL0ZIMFFcPFlrRWd8UXKJW3SPXHGQV22PUmyQUGmQTWmRS2qTTWuUUG6VVG+WVXCXWHGYWXWcWXWdV3ScVnKcVHCaUm2XTWuVTWqUTGaOSGGIRVx+QVV0O0xpM0VgLUFYKj5VJ0RbL0VfMkljNldKOlpNPV1QQF5RQV5RQV5RQV9SQmFURGBTQ2BTQ2FURGFURGFURGFURF9SQl1RRVpPTVtSV2JYY2pjc3FthnZ1lXh6o3p8rXd8tHN5t21ytGRor11krGFnsWxyvnh7yomJ35WR5aSh5Le04cfE2dXRzuHdxOfkuevmr+7qre7orOniq+PbqtrTqcvCobu2maWljZuYhZOIdpiBcZlyY5tiV7NpYM9ybfuLifV1dOpbXeZMTulESO1AROw7Qek7Pd86ONs8ON9GQNNDO8M6MLo6L7A2KacxI79JO9thUupqXdtTR8o6L8w0KdQ2K9c0Ldk0MvFNS/5aWO1LRto5Mdc0K9s0K94yKN8uJuItJuEsJd4tJdwxKdo2LNk7MNc/NMIvJ8Q0LM46ONlDQt9GSOBFSeRHTupNVvFRXfZWYvhYZPlcZ/9ncv9tdfRZYd47QOsyOPEuNPMuN/IqNOslMu0pNfs8S/9TX+0/SehBSepHTPRRVv9ZYP9YXfRHTeU3OeE1M+U4NOs8OfJAPvRAP+89O+Y5NeA3Mt04Mto5Mdk4MNk4MNw3MeQ4NOg5Nuo7OOI6N+A7OeM6N+Y6OOc5OOU4NOA1LtozK9o2LNw4Lt44LOI2LOcyKeswKfIvK/YwL/QyM/QyM/cwM/YwMfYwL/MxL+4zLuc2Ltw4L+BGPMk5Mb80L7YsLO5mav95gPhndP9ief1Ucf5La/9Hav89ZfM2XOs9XuNRaMRYZYhCQmdDN1tOO0dGMUFDLUpIM0VFLUxVNlNjPmJ0TGyDVXCLWG+MVG2MUGmOS2mOSWiQSmiRS2qTTWyTUm6VVG+VWHCXWHSbWHObVXGZU2+XUWuUTmiRS2WOSGSNR2CHRF2BQVd5PVJxOE1pNkxmNk9lN09mOE5lN09pOVNtPlVIOFhLO1tOPlxPP11QQF1QQF9SQmFURF9SQmBTQ2FURGFURGBTQ2BTQ19SQl5RSVZNUl9YaG5me3Vxinh0l3h3oXh6q3l7tHR4t2xxs2JmrVxjq2BmsGtxu3Z8xoCEzpOV4J+e5K6t57285svJ39TT2N3bzuHfxuXhvubivOTfueDXttrQtc7Gsb61pq2nm5mZjYyOgYuFeYp8cZF2a5tzaahtZbpvaeaJhO6BfvNzcvFlZPFXWfBNTu5ER+w/QeM6N+A7N+RCPd5FP8w8M8Y9M8RCNbAyJK4wIshKPNxYS9ZOQMw9L843LNE3K9EzKtY0MvVVVf9raPpdWONEPtw7M987MuM4MOI0LeMyLOIxK90wKdQwJ80vJMYvJMIwI8U5LMA0J8EyKsw7NtdDQdtFR9tCR9pASOBET+xQW/JWY/JWYfpeaf9nb/NZYeFCR+o6PO01N+8yOO8yOPIyPfc5Q/9IVf9WYeU3QN00O982O+tBRPlKT/xJTfU8QukxM+k1NOs5NfA9OfM9OvM7OfA6N+k3M+M4Md87Mtw7Mds6Mtw5Mt84MuQ3M+g2NOk3NeY6OOQ7OOY6OOg6Oeg7N+Y5NeE2L9wzLNs3Ldw4Lt85LeE2LOUzKekxKfEwKfQxLfMyM/EzM/QyM/QwMfQxL/MxL+4zLuc2Lt43L+BDOso3MMAxLcAxM/hrcf9xevpmdPtddPpQbf9CaP8+Z/85Y/U4XuZFZNlabatWW3dFPmRKPWFZRlRPO0tJNFBJN0dFMEdQM01dOVpsRmZ7UG2FU22KUmyMTWiNSmmOSWePSGeQSmmSTGuUUmyVU26UV2+WV3SYWHOYVW6VUmuST2aPS2OMSGGKRl+IRluCQ1l9QFN0O1BuOE9rOlJsPVhuQFpxQ1dvP1ZxPldxQVJFNVVIOFhLO1pNPVtOPlxPP15RQWBTQ2BTQ2FURGFURGFURGBTQ2BTQ2JVRWJXUV5WY2tmfXl1kH56m3p5oXh5qXZ5sHR4tWxxs2NqsFxjq15krmlvuXd9x4GH0YiM05md3aOl4LCy47y+5cbH48/O3tTT2NfW0dnXy9nWx9jQxdLJwMzDvsW5ubSorKOanYqLhnl6dHl2cXVsZX9sZY5waI5hW51gW8Bzbdh5dfB+ffx8ef9ycf1jY/ZTVPBISPBEQuo+OuE8NuFCPNE6M9NDOt5VS8I+Mrg2Kb05LMI9Lsg/L9BCNNdDNdZAMdE3LdEzMOpMTfpfXfJXU99EP9k6NNs4MeE4MeY5M+c5Muc5MuI6Mds6MNE5LMo4K8U5KrEpGbgzIshAMtNJPtJEQMs7Osw3O886QNI4QuJIUu1VYfBYZPVeZ/dgaepVW9xBReVAPuw/O/NAQ/tHSv9MVP9RWf9UXf9WYOEzPNovNd0wNOg4O/U+Qvg7P/c0OPMwNO00Mu85NvE5N+41M+syMOoyMOc0MOE0LuM8NOA9NN88Nd47NOE4M+Q3M+g0M+g0M+k5Oec5OOg4OOs5Oes5N+k3NeI1L94zLNw4Lt05Ld05Ld83KuQzKegxKe8wKPIxLPEzM/A0M/MyM/MxMfMxL/IyL+wzLuc2LuA5Mdk8M8w3McEwLdFAQ/9udf1rdflicfBSafVIZv87Y/81Yf82Yvw/ZeROactdaotHRmpGOl5NPV5XRFlSP1JKN09GNUlEMERKLkdVMlNjPl5zSGd/TWqHT2qKS2eMR2eMRmaOR2aPSWiRS2mSTmuUUm2TVm2UVXGVVXCVUmuST2eOS2OMSGCJRV+IRl+GR16CRVt+RFl3QVZyP1VvQFlwQl1yR151R1tzQ1l0QVhzQE5CMlFFNVVJOVdLO1hMPFpOPlxQQF5SQmFVRWJWRmJWRmFVRWBURGFVRWZaSmleWm5nd3Vwjnx4mXt5oHd4pnZ3rXB1r2pvr2NorGBnr2BmsGVttnF4wH6FzYmQ2I+X2Jmg1qGo1qqx27S537q/38DB3cPD28fG2MbD1MXB0MK6ybyzxLuwwbWovKaYr5aLnIiFjHFxcXVxcHBmZXdoZYZuaoRfWZVkX5taVLlmYNlzb/B6dv97ef92df9oaPxaWP5STvVIQuY9OOhFPtk8NdtHPepcUsU7MMQ8ML03K783Kcc+LtFDNdRCM9RBMdhCNNI4Ntg+Pt1DQ9xCQNY9N9U4Mdg3L943L+U6M+Y5M+U6M+I7M9s+NdZCNtFFOMxHNq4tGLw7Jc1KONFMPcY9NbswK8AwMMo5PtdBSuJMV+tVYPBaZfBdZexZYd9MVNQ+QM80L9g3L+A7OepAQPJDSPVESvFCSe4/RuI1O98yNuMzNu84PPY4OvgxNPsvMvwxNO8yMPA5NfE4NewwLugsKucwLOYzL+E0LuQ9NeE+NeA9NOA8M+M6NeY5Neo2New2New1N+w1N+01N+42OO42Nus1NOQyLt4xK943Lt05Ld05Ld83KuEzKOYxJu0xKPExLPA0M+41M/EzM/IyMfMxL/IyL+wzLuc2LuI7M9I0K9I6NcYyMOhWWf9wePljbvJaaedJYPNFZv84Yv8wXv81Yv9CaNxMZbFQWWs2MF5HN1hLOlVOO1tPP1ZJOU1AMEpDMEBGLEFPLkxcN1hqQGJ4R2aBSmiISWaLRmWKRGOLQmSORmWOSGeQTGiRT2qQU2uSU26SUm2RUWiPTmWMS2KJSGGIR2CHSGCHSGGFSF+CSF99SV15SF13SGB3S2N4T2N6Tl11Q1t2QVt2QUpDM01GNlJJOlRLPFdLPVlNP1xPP15RQWRXRmVYR2RYSGJWRl9VSWJYTmdeVWxjZndyiXp2m3p1nnRzn3NzpXR1rWxwr2JnqVxgqWFlr2ZsuG50wHh7yIOG04+T3Zec3puh1aCn06mt2q6z3bG03bK027S02ra027Wx1rOt0a6nyauhxKqewqWZvZmLr4h+mXx4hmRiZ2llZmRaW2pbWHtjX3lWUJJjXYpORqJVTb1gWdZrZfF3cv9/e/96d/9uav5hXPdUT+lHRO5PS91CPd5HQOpXT7osIr4xJ740J8g/L9FFNss+LcEyIso3J9tFN95FP9M5N8wzLs42MdQ7Ndc9Nd08NOE9NOQ7NOQ5Mt41Ltc0K881Kco4K8U8LMI/LdVUP8hHMr08Kb87LsM9MsQ7NcI3NMIzNdxLUN5NUuFQVeVUWehZXeVWWNxNUdNDQsk1K9E3K9k4MN01MuIyNOUyNuYxOOcvOew0PuwzO/M1P/s5Qv00PvorNf8oM/8wOvgtM/k1Ofk1OfAuL+sqK+oxL+g0M+I1MeM8NuA9NOA9NOE9NOQ7Nuc6Nuw4N+83N+w0NuszNewyNe0zNO01Neo0MeMxLdswKN44LN06K906K944KOA0JuMzJOkzJuw0LO41Mu41M/A0MvAzL/IyL/AzLewzLuc2LuQ9NM0vJtc+OcwzNfliZ/9vefdbafBOY+pDXflFaP86Zf8wXf82YfZGaslKXZNCSFMtJFdKOVNMOk9INltPP1VJOUY/L0hGMT5CJ0BKKElVMVNkOl9yRWV9S2eESmWISGOIQ2GJQmOLRGONRWWOSmeOTWiPUGmQUWyQUGuQTWaNSmOKSWGIR2KGRmKGSGOHSl+AR15/SF99SWB8S2F7S2R7TWZ8TmZ+Tl14Q116QF57Q0RCNkZEOEtHPFBHPlJIPlhKP11NPmBQQGBRPmFSP2BTQl9WR2NaU2diX29qbnNvfndxk3p0oH54qHl3qXBwpmdno2BholxfpGBirWZotW9wwHl6zISC1o6K35aS55yZ5qCe3aGh16Oj2aSk2qaj2Kah16Wh1Kaf06We0aSczaKayaKZyJ+Ww5mNu46CsIN8nnJufWlnbGReYGdbW2tZVXJXUH1XToxXT5VSSalbUbVYUMFaU9hrZOx5cvmCfP+Lhvl1cf91c+1fXeBRTdlFQ+9aVMw3McUyKsU3K8M3KMA3J8M3JsY5KMo7K9E9L9U/MdI4LtY8MthANdQ8Mc01KM40KNg6L+NBNuA5MOE5MN43Ltc3K883Kck6KsY/LMRBL8I9LsZANMtFOs1HPMxDO8U8NLwzLbYrJsc8OdBFQtpQTeBWU+NZVuFYUthOS9BDOsw7KtM6KNw4LOI1LuguL+wqMvAoM/QnOPotPvssQPsqP/0pP/8oP/8mP/8lPf8lPf8jOv8nOv8rPP4sOfQsNu0uNeg0Nec7Od04NN06M947NOA7NeM6NeY5Nek3M+s1NOszNew0Nus1NOk1NOc1M+I1L901LNs1Kdw4LNs5Ktw5KN45Jt84JuI3JeM2JeY0Juw1L+00MfA1MPE0LvE0Lu01K+s2LeU3LOA5MNg3L9U6Nts/Qv9td/9ic/tTavVJY/9LavY2W/82X/88Z/g+Y+dOaq9JVl4kI0UtIT86J0hFNFBNPFBJOUVCMT5CMT9HL0JIJkVLJUtTLlNdOFtrRGF2S2R+TmSDSmOGRmCIQmGJQGOLQmWNRmqPSmyQUG6SUmyRTGqPSWeMR2aLSGaKSmaJSWOFSGGDR2WES2SBSWJ/SWR/Smd/S2eASWV+R2F9Q1x8PVx/PV+CQj0/NEBCN0ZDPEpFP1BFP1RHPltLPl5OPmFQPmBRPF5TQV5WSWNbWGhjaW5seXNvhnVvlXZwnnRwonBtomdmn2Fhn11eoV1dpWVksGtqunVzxn17z4aC2Y6I4JSO5piT5ZuW2ZyY1Z2Z1p6a156Y1p2X1Z6V1J2V0Z6W0ZyUzZyTypuSx5qQxJOJu4h/roJ4nXRrfG1kaWZdXmZbWWlaU29XTXtVSopWS5pWS7FdU7taU8FYUtNmYeBxauN2b+1+d/2Hhf+Hhfd1de5nZONVU+taVccyLMIvJcU3KcM3JsE4JsE4JsQ4J8g7Ks87LdM9L9U5LNU5LNM6LNI6LNE5K9E5K9Q4K9g4LN87MeA5MNw4LtY4LM85Ksg5KME6Jr45Jr42KsE4MMY9NclAOMpBOcg/N8U8NMM6Mr80Lcc+NtJJQdhPR9pRSddORsxDO8M3Kss4JtM4JN03KeU0LO0vL/QrM/kpN/4pO/8rQv8qQf8pQf8nQv8jQP8hPP8ePf8eO/8fOv8gO/8lO/8pO/ctOfAxOeo3OuU7O9w5NNw6Nd47NOA7NeM6NeY5Nek3M+s1NOw0Nuw0Nuw2Neg2NOQ3Md82L9w1LNk1Kds5Kts5Ktw5KNw5Jt45Jt84JeE4JeM2Juc1K+ozLes0LOs0LOs1Kuo1KuQ3KeI4K+A8MtUzLtM1NPNUWf9lc/9bcPZIY/9JaP9BZP87YP40XPo8YvJNbc1MYok4P1MqJkE1KTc6KTs8LEJAMUZAMEA/LT1CLj9ILT1DHUtQJ1xiPGZwS2h2UmZ7UmZ9UWWBTmGDRmGGQWGJQGOMQGeMRmqPSmuQTW2ST22STGqQR2iNSGeMR2eKSmeKSmaFSmWESWaDS2SBSWR/SGR/SGeAR2eAR2Z/RWJ+QV6BP1+EP2KHQjc6Lzs9MkBAOEVCO0tCPU9FPFZIPVlMPF5OPl1QP1xTRF5XTWNdXWlmbW9te3NxiXNvlHFrmWpmmGNglVxblFpamFxdoFxfpmhqtW5vv3d4yoF/0oeD2IuH3JCK4JKN3ZOQ05OR0JOR0JOR0JSP0ZOO0JOMz5KLzpWMzZOLx5SLxJSLwJOLvoyEs4N6pYBylXxld3VeZmlbW2VcV2RbUmdZTHJWSIRUSKNaUb1gWclcWdBaWNtjYuFrad9va+N2cfuKhv+Khv+Fg/99efduaO5hWMU1LMAyJsU5KsE6J8A5JsA5JcI5J8Y6Kcw6K9A6LNY6LdQ2Ks41J9A4KtQ+L9Q+L883KcsvIto6Lto4Ldk3LNY4LNA6K8k6KcI5Jr43JL42KsA2LMI4LsU7Mcc9M8pANstBN8xCOMc6MctBN89FO9BGPNJIPtFHPcpANsU3K8w2JdY2Jt83LOg1MPEwM/YtN/srOf8qPPwnPfwnPfslPfkjO/shOvoeN/wcN/4bNv8eOP8fNv8kOP0qO/cyPPE2Pes4O+Q6Otw5NNw6Nd47NuA7N+U5Nec4Nek3Nes1NO0zNu40N+01Neo2NeY3MuE2L9w1LNk1Kdo4Kdk5Kdo5J9s4Jd04Jd43JOA3JOE2JeE1KeI0KeM1KuM2KOQ3KeE3KN83Kts3K908MtAxK9g4OP9rcv9dbv5QafE8W/9IbP83Xf8+Zfk1W+4+YuZWcao/UWEjKEwvKzs3KzE4KDM3Jjo7KUI9KkE8KEA+KUJCJj9GHVhhNHN+VICMZHeHYGmAVGJ8TWF/SWCCRWCFQGGJQGSNQWiNR2qPSmuQTWyRTm6TTWuRSGmOSWeMR2iLS2iLS2iHTGeGS2aDS2WCSmOASGSBSWaCSGaCSGWBRmKAQmOGRGWKRWiNSDI1KjY5Ljs8NEE+N0dAOktCPVNGPlZKPlhMPllNP1lRRF5XT2NeYmlncm9ugHJvjHJtlWpnlGFfkFdXi1RVjldYmFxfomFjrWxuu3Jzw3t8zoKD1YiG2YuH24yI3I2K15CN0o+Nzo+Mz46Lzo+Jz46I0I6Gz42Fzo+Fyo6Fxo+FwZCHvI+HtomCrIB4nX9vjIBfcHxZYGxYWWRbVF5fUV9cSWpXRn1TRZ5VTL5cWdFaXNlYXORjZ+dra+FwbOV4c+x8eO16df6Dfv+Ggf+Be/VrYck8MsQ4KcI7KMA7KL87Jr46JcE6J8U5KMg5Kc44Ktk7L9Q2Ks41J885KtE+LtE+Lss4KMcvIdI2KdM1KdM1KdM3KtE5K808K8g9KsQ7KcQ6LcQ6L8Y5MMY5L8c6Mcg7Mck8M8s9M9RFPdNFO9BBOcs9M8w9Nc9BN89AOM47Mc82KNk1KeM2L+szMfIvNfcrNvoqOvwpPPkmOfcmO/gnPPgnPPsmPP0lOv8kOv8jOv8jOP4jN/smOPksO/c1PvI5P+g4OuA4N9w5NNw6Nd47NuA7N+U5Nec4Nek3Nes1NO40N+81OO42Nuo2NeY3MuE2L9w1LNc1Ktk5K9k5Kdk5Kdo5J9s4J904Jd43Jd43Jds1Jdw2KN03J9w5KNw5KNs6KNk5Kdc6K9c6MdE0L+xJTP9vef9WavlFYPg8X/9BZ/8zXP84Yvg+Y+hNbMVPZYAwPUodIEMxLTExJy83KDU8LD5BLkJAK0I8JEU+JElGJVVcMHB+TY+fcpeofIOYbWqEV197Sl1+RV+DQ2GGQWOLQmaPQ2uQSm2STW2ST22ST2+UTmyRS2mOSWiNSGmMTGmMTGqJTmmITWeETGWCSmSBSWWCSGeDSWiESWeDSGSCRGeKSGmOSWyRTC40KDM2Kzg5MTw7NkI9OUhAPU1EPVFHPVNJPVNLPlVORFpVUWFeZWlndW1rgWxrimtpkWJgj1hWiFBQhlFRjVhZmmBjqmZqtG9ywXV4yXx/0IOE1oaH2YmI2IqJ2YuK1oyLz4uKzIqJzYmH0ImF0YiE0YqD0YmC0IyEz4uEyI2FwY2Guo2GsIeBpX53ln9thYRZaoBTWm5WVGNcUlphT1pfSGVaRHhVQpNNRbhUUtBTV9tSWeVeZOhlauNrbOZ1ceR1buJvaPd+dv+Ce/+HfvRsYMk/MsE4KMA7KL88KL89J8A8J8I7J8U6J8g5Kc03Kdg6L9k4LtI4LM85K8w6K8k6Ksg5Kck3KM85K9E3K9I4LNE3K883Ksw4Kss8LMs+Lco8MMk9MMo8Msk7L8g6MMc5LcU3LcU1KtBAN9BANc09NMk5Lss4MM47Mc06Msw1LNAvJdkwKeQyMOwyNfQvOPktOfsrO/wrPvwtP/wvQPwvQPwvQP4vQf8vP/8uQP8uQP8pOfwpOPgsOPUwOvE2Pe04PeM3N9w0M9w4Ntw6N947NuI6N+U5N+c3N+o2New0NPE0OPE0OPA2N+03NuY3NOE2L9o2LNc1Ktg4KtY5KNY5KNg5Jtg5Jtk4Jto3Jtk4JtU4JdU6JtY7J9U9KNQ9KNQ9KtQ9LNQ8LtE3L9s8Of9eZf9hcf9Qafc8W/9Baf80X/81YfsxWfRLbNtZcZU+TlolLUMpLDoyMC4xKjA4LThBMD1CLDw8IkE8HlVIKGBbNXyGVJCibqq+jai+j46ld2+LW2F/S15/RmCERGOIQmeNRGySR2+UTnCVUG+TU2+TU2+UT2yRS2mOSWeMR2mMTGmMTGmLT2iKTmeGS2WESWSDSGWESWiGSmiGSGeFR2WFRmmOS2mRS2yUTisxJS40KjQ3MDg5ND46N0I9OkhBO0tEPE5HPU5HPVBLRVdTUl9eZmZldWdnf2dmhmJhiVtZilJShk5Ph1JTk1teo2Vps2xvvnV3ynp80X+B1oOF2IaH2YaH14iH1YmJ04eIy4aHyIaFy4WDzoWA0IWA0od/0oeA0I2F0oyFy42FwYyFuIuFq4R/nXt2jX1re4RWY4FQVm5VUWReUFtlTVljSmJeRXNYQ49PRbRXUtBVWttUW+dcY+hhZ+Vnauhwb+x5cuZxaPd8dPNzav54beZcUcQ7K741I8M8KcE9KME9KMM8KMQ7KMg7Kcs5Ks83Ktc2LNg3LdQ6Ls46LMc6KcQ4J8c7Kso9LM89LtZAMtlBNNY+Mc44Ksk1J8o4Kcs8LMk6LMg6LMk7L8o8Lso6L8g5K8g1K8c1KMo2LM87L9I+NNM/M9Y/NtU+M843LsksI9IrJdwtKucwMvAzOfYxO/owPv0wQf4xQvoxQfcxQPcxQPYwPfcvPPctOfosOfoqN/wwPPkvO/QwOvE0O+02O+Y2Od81Ndo1M9w4Nt05N986NuI6N+U5N+c3N+o2New0NPI1OfI1OfA2N+03NuY3NOA3Mto2LdY2KtU3K9Q4KdQ4KdQ5J9U4J9U4Jdc3J9Q5JdA5JM48Jc89Js8/J85AKM5AKtA/LtM8MdE2MetISf9mcv9PZP9IZvs3W/9Bbf0vXf83YfI0WORRa7xVZm0xOUUoLEU2OTczMjU0MjY5MjY9LTU6IzM4GENDH2phOoWBVJ+ud6nBh7XNma/HlZKufXaUYmWGUWCCRmCFQmOIQmmPRm+VSnKYT3KXUnGVVXCUVG+UT2yRS2iNSGaLRmiLS2mMTGqMT2mLT2eGS2aFSmWESWaFSWmHSWqISmmHSWeHRmqPSmuTTW6WUCgwIysxJzE0LTU2MTc2NDw4N0A8OUM+OElFPEhFPEtIQ1JQUVxaZWNidGJifGBggl9eiFpYilRUilRUkFxdoGdps3BzxHZ4zXt/2H6C24OE3oSG3YSF2IOE1oWE1IaF0YOGy4KFyIODy4KBzYOA0YWA1IiA1YiA042F0ouEyIuDvouDsomCpIF8k3dwgHdmcH5VW3xQUW5VTmZfT15mTlpkSWFhR3FdRYlURq1dVMhaW9RWWuJbYeZdZOlhZe5sbPV6c+1yavd4b95ZUOVbUNJEOMM1J8c6KcU5KMQ7KMU8Kcg9KMo7Ks47K9E5LNQ2K9MwJ9U0KtI4LM07LMc7KsI7KMA7KMM8Kcg7KtVDNOFLPd5IOtM9L8s1J8o2KM07LMg5Kcg5Kcg5K8g5Kco4K8s5Ksw4LMs3Kc02K9I8Ltc/NNhAM9tBN9tBNdc6MdIxKdwwLuUxNO81OvU2Pvk0PvoyP/owQPkwQPIuPO8vPO0vOe0wN+8tNe8sMvIrMvIrMvYzO/M0O/I1O+02OuU1N+E1Nd42Ndw3Ndw4Nt05N986OOM5OeY4N+k3N+o2N+w0NvQ1OvQ1OvE3Ou43Oec4NeA3Mto2LdQ2K9M3K9E4KtA4KtA5KNA5KNA5JtE4KNA5Jss5Isg6Isg9Jsc/J8hAKMhAKsw9Lc87Mdc5NvxVXP9ecf9HY/8/Yf87Yv83Z/4zYvs4YO1GZMVOYYlASVQxNUE1NUA6PDo0Nj81Nj42Mzg5KzY8IjlDHlNaLoKBUaKncbHFiq/LjrDLlKbDjZKufXuZZWiJUl+BRV6DQGOJQGmPRG+VSnOZUHOYU3GVVW+TU2+STmyQSmiLR2aJRWeKSmmMTGmLTmmLTmaIS2SGSWSGSWWHSmmJSmqKSWmJSGaJRWqSTGyWTm+ZUSYuISkvJS0yKzEzLjMzMzc2NDo5Nz08N0dEPUREPEhHQ1BQUlpaZF9hcGBgelxcfmBfiV1bjVlYkV1dm2dnrXJ0wXp80X+A3IGE4YKF5IWG44SF4YOD24GC1YOC0oOCzoSHzIOGyYSEzIOCzoWC04eC1oqC14yD1I2F0IyDxIuCt4qCq4aAnH94iHNudXFiZXdYVnRTTGpWS2dgTmJmT19lSWNhSHBeRntSQJ5cTrdaU8ZUU9dWWuJXXOpZYPJjZfdxbvBtZfdxaNFEO9RBN8UxJcg0JtRDMsc4J8c6KMk7J808KdE7LNM6LNg3Ldk2Lc8sI88xJs42Kcs8LMdALcI/K747J7w3JMA0I9FCMuNPQeVPQdhCNMs3Kcs3KdA+L8o7K8k6Ksc4KMY3J8g2J8o2KM44KtA4K9M7LtU7L9U5LdI2KtU3LNo8Md08Mtw3Meg4OPE4Pfg7Qvs5Qvo0QfYwPfIsO+8sOu0vO+oxOeoyOus0OO00OfE0OPQzNvM1N/AzN+82O+05POk2OeI0Nd40NN83NuA7Od04Nt45N+E5OOM5OeY4N+k3N+o2N+w0NvQ1OvQ1OvE3Ouw4OeY5Nd84Mtg3L9M3K9A4K805K805K8w7Ks06Ks06KM06Ksw7KMU5IsM7I8M9JMI+J8M/KMY/LMo8LtA5Mt88P/9cZv9RaP9JZv85Xf89aPkuXf08aOk7XOVccKZMVl4tMEc4NUJDPjw4OT80OEYzN0M0MT06KT5EKEdWLWJzP5CbYa29f7HLjKvJi6bDi526hI6senuZZWaHUFp8QF6BP2GHPmmPRG+VSnKYT3KXUnCUVG6SUm+STmyQSmeKRmWIRGaJSWiLS2mLTmmLTmaIS2WHSmSGSWWISGeKSGiLR2qKR2eLRWuTTG2XT3CaUikvIykvJSgtJistKC8vLzMzMTc3NTk6ND09NT9AOERFQEtLS1FRWVZYZVtbc15dfVlYgltZi15dlmVlo25utnd4yH+B2ISF4oyM7oyM8IqK7IaH5IKC3ICA1oKA04OCzoKCyIOEx4ODy4SEzoaD0IiD04uE0oyEz4qAxYqAvImAr4d9n4B4jXdvemtlZ2ZdWG1bUW1bTWlcTGZeS2RfSWVhSGhgSW9fRm9QO4VVQaZeUMBiWtFZWN1RVO5TW/hcYPlnZ+ZZUtREPM43MNE3L9c6MdY8MNQ7Lc85Ks06KNA6KdE6KdQ4K9g4LNw1LNw1LdAvJc0zKcw4LMo+L8VAL8JBLr49Kr06KMI5Kb4wIulXSuBMQMMvI9E9Mc48L8c4KMo7K8k6Kcg5KMc4J8g3Jsk2Jss1Jsw0JtA3Kdc7Ltw+Mtw8MNk3LNo4LeI+NOxDPPVCRfI5P/EzPfY0P/YyQPEtO+0tOu0yPew3QOY1O+Q1OuU3OOs4O/A5O/I4Oe83N/I7Pe48POo6OuY4N+E3N983Ntw3Ndw3Nd45N+E5OOM5OeY6Ouk5O+w5PO05PO84PPQ3O/M2OvA4Ou05Ouc7OeA7Ndc5MM83LMo4K8g5K8c5K8Y6Kcc6Kcg7Kcg7Ksc8KcE5I8Q9J746I7Y0Hrw5JclEM88/NsowLv9eZf9WZ/9JYv88XPgxWPcwWfs2Y/VCaedZb6xGUW8zM04zLEI/Nj5DPEE4OUAtMUwvM0syLkI5KERJKVptP36aX564d6jFgqvJi5++gpi2gJSyfoKgbmaEUll3Q1l7P16BP2OHQWmPRm6USW2VTGyUTmuSUWyQUGqNSWaKRGOGQmOGQmaJSWiLS2eJTGaIS2iMTmiMTmeLS2aLSGWKR2eMR2uPSW2STHGbU3KdVXSfVyowJCkvIykuJywuKS8vLTIyMDU2MTc4Mjs8ND4/N0NEPklJR09QVFNVYVhZa1tbdVxaf15diWRilGtqpHV0un9+zoeH34uM6Y2N74yM8ImJ64WE4oCA2IB+0oB/z4GBy4WGyYaHyIeIy4mIzouIz4yGzo2GzI6FyIqAvIl/sYZ8oYJ4kXtzgHRrbmxiYGVdUmVfT2VeTGZeS2ZeS2hdSWpeSGtfSW9fRndfR39bQ5JZRq1aTMdWUN5SU/VRWP9YX/BVU+NLRtk+OdU2MNk2L9w5MNs5LtY5KtM3KNE4KNI5KdQ4Kdc3K9w1LN80LN00Lc4wJ8k1Kcg5K8c+LsRBL8FALb88Kr45KMQ4Kcs8LuRSRdxIPMg0KMw6Lcg6LMI0Jso9LMs8K8o7Kso7Kss6Kcw5Kc44KdA3KdM3KtY4LNk3LNg0KtUxJ9gxKN43Luc8NfhER/E4Pu0vOe8vOvAwPe4uO+sxPOs2P+U2PdwzNtgyNN86OO5ERPlJSfhEQ/M/Puk6N+c5OOU5N+I5NuE3N+A4N+E5OOE5OOA4N+I4OOU5Oec5Ouk5O+w5PO05PO84PPM2OvI1Oe42OOo4OOQ7ONw6NdM5L8s3K8Y4KsM6KsI6KsA7KsE8K8E8KcE8K8E8Kb05JMJAKrs6JbM1H7o7KME7L8o5NNg8P/9daf9QZP9BW/k4V/Y2W/U7YPQ+ZONJZas/TIM/PmA7M0c7Lzo+MDg+MkY8OlI+PU4wLlM4L1ZLN2NpRXiPW42wcJ3CfaHGgZq5fZq5gJq2g42peHKOXll1RVRwPVx7Ql9/QGKGQGmNRW2TSGyUS2uTTWqRUGmQT2eMR2WJQ2OGQmSHRWeKSmmMTGmLTmiKTWmNT2mNTWmOS2iNSGeMR2iNR2ySSW2VTHCbU3GcVHSfVy0xIy0xIywvJiwuKS8vLTExLzM0LzU2Ljo8MTw+MUBCN0ZHQUtNTFFSV1ZWYlhXaVxZdF5df2ZkjHBuoHp4t4WDzo2L35CQ6pCO746M7YqJ54eE34F/0398y399yIB/xYaFx4iIxoqKyoyKyY6JyY2HxYyEv4uCt4mArYZ8oYB2j3twgHVqcG9lY2lfVmNdTV9hTF9hS2NeSmdcSmxbSW5cSG9dSXJeRndhSXhYP4dTPaNWRMdYT+NVU/hPVP5NU+I+Pd48N904NN43MeE2L+I3L903K9o3KNQ3JtM4JtQ5J9U4J9g2Kd01KuAzLN00LcszKMQ2KsI4K8E8LcI+L8I+L8E8LcA4KsM1KdxJP9pGPNVBN888MsQ2KsQ6Lb42JsY6Kcc6Kcg7Ksk6Kss5Kss3Kcw2KM40KNU5LdU3LNc0K9czKtozK982L+U6M+k8OPA8Pe00OeswN+0yOe4zPO00POs3QOo9Q903O+FBQexOTfhZVf1ZV/pRTu9CPuU4NOI2MuA3MuA3NOA3NOE4NeI5NuQ6OuQ6OuE3N+Q4OOY4Ouk5POs4POw5Pes4POw4O+81OO81OOw1N+c3N+I6N9k6NM84L8c3LMI4K786K707K7s8K7s8K7s8Kbs8K7s8Kbg5Jr1AKrM5JLE2JLY7K7UwJ8M0MOxQVP9baf9KYPU6VfA3VvFAXe9IZudIZM1OYYI4OWU/NlJAMkRBMDk9LDU3KT83LEw6MEYuJFI9LGddQoGIX5OqdJe7e5bBepa/e5Szepy4h5q0hYCabV12TEhiNU5oOFx3Ql99P2ODQGiMRGySR2uTSmmRSmeQTGeQTmSJRGSHQ2OGRGWIRmiLS2uOTmuPT2uPT2uPT2uPT2mQTWiQSmePSGmRSGyUS2+ZTXWhVnSiV3akWTI0JjA0JjEyKjAxKzEyLTIzLjM0LjQ2Kzk7LTs+LT9BM0RGOUpLRU5QT1JRV1RUXlhWZFxab2Rhfm5slHp3rISCw4yJ1pGP45SR6pOQ646L4omF2YJ/zH98w398v4B+v4SCwYaFwYmIwo2Kw4yHv4uEuId/roV9pIV7nYB2jnlufnJnbW1hYWteVmlbUGNcSl5hTF1hSmNeSmhbSm1aS3FaSnRaSXZbRnNXQXhSO4pRPataR81bUONUUPBGSfE+QdsyL9w1L+E1MeM2MOM1LuE1K+A2Kds4KdY2JtM4JtI5J9Q5J9g2Kdw2KuAzLNo2Lck3KsA4Krw3KL05Kr89LcI+L8M7LcQ4K8YzKelVS9Q9NMw4LtFBNr40J8A8LcA8LcA4KMQ4J8U5KMc6Kcg5Kcs3Kcw2KM0zJ9I2KtQzKdUyKdw1LeM6M+k+N+w/Oew9Oug0New1Oe82PO41O+oyOuYzOeQ3PeI8QPNVVvxiYv9tav9pZPNWUeRBPN82M941MN82Md43Md42M983NOE4NeI5NuU5OeY6OuU3OOY4Oeg4O+k5POs4POs4POs4POw3PO82O+42OOo2N+U5N988N9Y8NMw5L8U5LL45Kro7Krc8KrU8KbU8K7Q9KbQ8K7M8KLM6J7dALK04Jq04J7M7LasrIsM1NP1gaf9UZPpHXfA8Ves9WOhIYOFPZNJPX7RTWnZHQVhIOUtEMkZFMUJFMD0/Kjo4IzszHj8zHVBHKm5rSIqTZperdpOzdI63c5G6eJ66h6G4jJCmf2yCW0tfOkJXME1iN1lxP2B8QWSDQGmKQ2yQRmmRSGeRSWWQS2WOSmKHQmOGQmSHRWeKSGqNTWyPT22RUW6SUmyQUGqRTmqSTGmRSmmRSGmTR22XS3CcT3akWXelWnmnXDc4KDY4Kjc3LTU2MDU2MTY3MjY3LzY4Kzs+LT1ALUBDLkRHNElLPk1ORlFQTlJSUlZVU1lYXWFfbGtpgXVzm4B9soiGx4yK05WS4ZSR4pCN3IuH04SBxIF9un98tX98s4F+t4SBuoeEuYmFt4qEsoZ/qIF6m4B4kIB0iHpuenJmam1fXmpbVGlbUGpaS2ZaSmJfTGJfTGVeTGlcS25bTHJbS3dcS3xbSH9WQodTPptSQbZWRs9TSdpHQOI4OOUzM90xLd8zL+I1MeM0L+EzLN8zKd42Kdw5KNM4JNA5JNA7J9E6J9U4Kdk3Kt01LNg3LcY6K7s5KbU2Jbc4J707K8M+L8c7Lsc3LNA5MPVcVNY9Nck1K89BNbk0Jbc6KLw/LcA7KsM6KsY6K8g6LMo7Lcw6Lc84LdE3LdAzKtIxKdYxK943MeU8N+o+Ouk8OOY3NOk3N+87PPA8P+s2O+UyOOQ1OuhCRu1NT/94d/9xbvFgW91KQ9E4M9EyLtw3Nec/POA5M+A5M+A3MuA3MuI2NOM3NeU3NuU3Nuc3Oec3Oeo3O+s4POs4Pus4Pug3Peo3O+84PO43O+o3OuQ6Ot89OtY9N8s7MsM7L7o4KrU6KrM7Kq88Ka88Kqw8KKw7Kaw7Kas8Ka0+K6c5KKc5Kqo4LawvKctAQ/9ocvRNXvNIW+5FWuVIW9lPXslUXbdUV5xYVWRNP1BNOkxHNEtGMkZELUBDKD5FJD9JJEtWLlxnPHiBVIyYaJGkbY+obo+ycpe5fZ+2iJKngHWGZFJjQz9QMEJTMU9hOVdtPmJ7QmWCQmmKQ2uPRWmRSGaQSGKQSGOOR2KHQmaGQ2eKSGmMSmuOTm2QUG6SUm+TU2uST2uST2uTTWmTS2mTSWuVSW+ZTXKeUXakWXamWnenWz89Lj0+MD09Mz09NT08Nzw9Nzs9Mjs9Lz9CL0BELUNHLkZKM0tMOk5PQVFRSVJSSFlXSlpaTmBfXWdlcnFuiXt5oYOAt4eFxI+M0Y+M042Kz4qFx4N/un55r3p3pnl2pXt2rHx5roB8roN9qYN9o394l3x0i3pygXZrc3JmZm5gXWpcU2tbTmxaTGxbS2tbS2ldTWdeTWldTWpdTW9eTnNeTXpdTYJbSpNgT5tWR6dOQLhKPcVAN882MNgxK94xK+E1MeI3MOI1L+I0LeAyKd40J9w2Jto7KNE5JM07JM08J847J9E6KdY5Ktk3LNM5LcI9LLU6KLA1I7M2JLs5KcQ8Lsk7L8s3Ldk/N/hbVONJQc46MMxAM7g2JqwzILU8Kb06KL83J8A3J8M3KMU3Kck3Ks43LNE3Ldk8M9w7M986NOU8N+o+Ous+Ouc4NeM0Meg5Nus7O+w6Oug4Ouw+QPhPUv9iZf9wcPloZeNVUco9NsAxK8k0MNY7N989O+A7OeI7NeI7NeI5NOE4M+M3NeQ2NeU1NeY2Nuk2Oeo3Ouo3O+s4POs4Pus4Pug3Peo3Pe84Pew4O+g4OuM7Ot0+OtM+N8o9M8A8L7Y4KbI6Ka47Kas8Kak8KKg7J6Y7J6U6KKU8KaA5KKA7KaA5KqI2KrU+ONtUWPtlcO5LXO9JXelKXttNW8lRWrRWVqBaUopgUlBJN0lOOk5JNUhAKzs1Gzc4GD5PJUxmNmyKVHeUXISbZYmaZI2bZpGibJWsdJiwfIOVbW59XFFgQzxKMDlGLEFQMU9fO1dqPWR7RWaDQ2uKRGyQRmmRSGWRRmGPRmOOR2OIQ2mJRmqNS2yPTWyPT2yPT22RUW6SUm2UUW2VT22WUGyWTGyWTG6YTHKeT3OiUnusXXurX3qqXkVCMURCM0RCNkNDO0NDO0NDO0JCNkJDM0RGMEVILUdKLUpNMk9OOVJRP1RSRVVTRFxaQ1xcRFxdT2FhYWloeHJxkHt6poF+tYaCv4iDw4iEwYSBun97rnlzoXRvl3FslXFtn3JuoXZwnndymndyknRvhXNrenJpbm1iYGxfV2pcUWtbTG1cTG9cTXBdTHFbTXFbTm9bUG1dTmxfT21gT3NgT3tgT4ZaTZ9fU6VRR65BOro7NMY2Ls4xKtYyKd01LOI3MOE2L+E0LuE0LeA0Kt01KNk4JtQ5Jc86Iso9Iso+Jco+J808KdI7KtU5LM87Lb9ALbE8KKw1Ia4zIbo4KMQ8Lso6L841Ldg5M/BOSfFUTdlCOcxCNb4/LqYxHbQ9Kb89LcE5K8E3KsM3KsU3K8k5Ls87MdU8NOJFPuNBPOQ/O+c+O+k9O+k7Oug4OOc4Neg5NuY5NeY2Nuk7PPRKS/9cXf9kZfhiYcw9OcE4Mr00LsQ5MtVBPd5FQN89O9k0MuI7NeI7M+I5NOI5NOQ4NOU4NOc3N+o4OOo2Oes3Ouw3POs4POs4Pug3Peg3P+k2POs2O+o3OuY4OeA7Ods+OdE+NsY8Mr48L7M4Ka47Kao7KKY7J6Q7KKM6J6E6J586JqE+K5Y3JZw9K5o5KZoyJ8NQS+1rbe5cZuxQXulKXN9IWc5MVrlSU6RbUpJjUYBqVUpNOERMN0pCL0g5JEI3G0ZII1VwPWeTVn6ycIKzcYOlaH2SWYONWY6WY4qWZHyMX1hmQ0hVOTpGLjdDKzpELD1KMEpYN1doPmV8RmmDRGyLRW2RR2mTR2SSR2GRR2GPR2aLRmyMSW2QTm6RT2yPT2uOTmuPT22RUXCXVHGZU3CZU3CaUG+bUHGdUHaiU3emVnytXnqtXnmsXUlDM0pENklFOUpGO0lGPUlHO0hGOUhHNUlIM0pKMkxMMk5ONFJQO1RRPlhSRFlUQV1ZPltaPlxZSF9cVWRhaG5rfnhzk314oIF7p4N9q4V/rYN8pn13nXZvkG9phWxmgmlliGpmi21oiG1pgm1ofGxmcmtiZ2pgXmddVGhcTmhbS2tcSW9eTHFfS3FeTXFeTXBdT3BdT3BdT3NdT3ddTn5dTodcTJJYTKJWSaRGPKs5L7o3L8o3L9Q3Lto2Ld42Ld82L+A1Lt80LOA1Ld83LN44Ktg2J9E2JM86JMw8JMs9J8s9J847KdE7KtM6LM48Lb5BL688J6k0IqwzILY5J8E9Lsk7L8w4Ls0zK+BBO/hbVOBJQNBEN8pGN6syH7k+LMpGN8xCNcpANcs/Ms5ANNRBN9xFPONGP+JAO+I9OeM6N+M3NeM1NOQ2NeY6OOU8OeQ/OeA9ONw6Nd9APOpMSepRTNM/O7gpI7gtJr82Lsk+N9FAO9Y+Odo7OOM7O+c9PeI5NuI5NuI5NuQ4NuU5Nec6Nuk5Oeo6Ouo4OOo4OOs4O+s4O+k5POg4O+c2POc2POk2OuY2OOI4Od46ONY9OM0+NsI8Mbk7La44Kqo7KqY7KaI7KKA7J588KZ47KJo7J5g/LYw1Ipk9Lpg4KpcvJs1cWPd5fN9YX+ZYZNtRXspLVLlMT6lWUp5gVZFoVoBuVlBXOD9KKjw7HEM9G1VRK2x2RISiZpTBfoe8doa4c3yeYm6CTXZ/UoKHXnV9VltiQDtEKTQ8JTU9KD1EMjxFMjlDK0NQMlZmP2d7SGmDRm2MSG2RR2qTR2aSR2KQR2OOR2iNSmyPTW+SUG+SUGyPTWmOS2qPSmqSTHObVXOdVXOdU3KeUXKeUXOiUnmlVnuqWnamWnWlW3OjWVJLO1JLO1JKPVJKPVJKPVJKPVJKPVJLO1VOPFZPPVdQPlhRP1lSQFtURFxVRVxVRWNcSWJbSWFZTGJZUmVdW2thaXFmdHVqe3puhHxwiH9zi39ziXxwhHVqe21icmZea2Nga2BfZ19cY19aXl5aWV5ZVWFaUmJaT2VbT2dbS2lcS2tcSWxdSG1dRm1cSGpeSGliT3FmVHFaSnVPQotXSpxcUKRaTaxaTKVNP6ZFNac8LLE3KMI4LdE4MNw0Md0xLd82L943Lt43Lt43Lt43Lts3K9k3Ktc3KdU4KdQ4KdI5KdI5KdI5K9I5K9Q4K807LL07K7Y+La45KKkxIKsyIbg6K8A8L8M5Lsk2LM41LdQ6MttCOt1LPtRIOcI9LLcyI91QRtlLQdRFPdVFPNpHP95HQOBDPuE9O+A3NOY4N+07O+w6Ouc3N+M3NeA4Ndw9N9lGPs9COcQ6MLwzKbcxJro2Kr87L8RANMM6MMo9NNNAONtAO+I9O+c7O+w4O+05POc3OuU4OuU4OuU5OeU5N+U5N+U5NeU5NeE1MeE1MeQ2NeU3NuY4Oec5Ouc5O+c5O+s7PuY5O985O9w9OtZBPc1CO8FBNrc/Mak5K6M8K6A9Kps8KJk6JpY5J5U4JpA5JpBBMIs8LYcvI5IwJ7xMSuRtb+dsb81WWr1MTrVOT6pQT6JVT5tYUJddUpVhVIpqU1daLzpNFjdGD1RhKX6OUJuwb6G8eZ28eZK1c36dYWiATlxtQ1lkQlRdQkhQOT9EMDo9LEBDMj1BMjs/MTxDMzpDMEFOMlJkPl1zQmeDSHCPS2+TS2ySR2qSSWmTS2eQTGyQUG2RU2+TU26TUG2STWuTSm2WSm2YSXGcTXGdTnKfTnKhUHSjUnanVnqpWXupXnmmY22ZWmOPUFdOP1dOP1dOP1dOP1dOP1dOP1dOP1dOP1hPQFlQQVpRQltSQ1xTRF1URV5VRl9WR2RbSmRbTGNZTWNZT2ZbVWpfXW5iZHBkaHJlbHRncHZpcnZpcnNmbW1gZ2dbX2JYWV5bVlpaUlpXUFhVTFhUSVhUSFxWSF5XR2NaS2NaSWZbSWdcSGldR2peRmtfSWlhSmNiTW5nVHZcTYFTRptXTqtWT7BSSrhSRq9HOqxCMqw9LLE5Kb44LMs4MNU2Mtk0MN02Ltw4Ltw4Ltw4Ltw4Lto4Ldk3LNc3K9c3K9U3K9U3K9U3K9Q4K9Q4K9Q4K846LL48LrY+Lq45KKYxIKcyILI6Kbk+Lr48LsY6Lcg1K8s0K9I7MtxFOuFPQt9RQ91PQ9tGP9hAO9M7NtI6NdY9N9o9ONw4Nt40NOg4Ous3OO43Oes3OOc3N+U5N+I9OdtCPMpBN8BANbg6LLE2J681JrI4Kbg9Lb9AMcVBNM1ANtdAN989OOM6N+k3N+81OPE3POk2POc2POc3OuY4OeY4N+U5NeU5NeM6NeI5MuM6M+M6NeQ7NuQ7OOQ7OOY6OuU4OuQ6PeM6Pd88Pdk/PdBBO8VAN7c9Mq08LqU7K6A9Kpw9K5c8KZY7KJI6JpE4Jow5J4A5J4A4KYk1Kp08Nb9RUNdlZdFeYbhOTqxOTKRTT51YUZhcUpdeU5hfVJhfVoxmUWBfL1NnKl5yM3qQT5mvbqW+fJmycIigYmqCSGJ2Q1RlO0tZOEZQN0BJNjk/MTU4LTo8L0FCND0/NDo9Mj5CNDpDMEBNM1JkPl50RWiESXGQTXCUTG6SSG2TSmuTTGqRTm2RU26SVG+TU2+UUWyUTWuUSGyXSG2YSHCdSnCdSnCgTHOiUXWmVHipWHipWHioXm2XWGKLUVmCSF1URV1URV1URV1URV1URV1URV1URV1URVxTRFxTRF1URV5VRl9WR2BXSGFYSWFYR2VdSmVdSmRbSmVbT2VbUWZbVWhdWWleXGpeXmpeYGtfYWtfX2leXGZbWWJXVV9WUVpVT1dUS1VRSFJOQ1FNQlNPQ1dRQ1hSQl5XR19YRmFZRmNbRmdcSGleSGtgTGljTWJhTW5nVXlfUIhYTqJbVbFWUbJJRbhFQLlAOLg+M7c7L7g4K7w4K8M5Lsk7L9E6L9k4Lts3Ldw4Lts5Lto4Ldo4Ldk3LNc3K9c3K9U3K9U3K9Q4K9Q4K9Q4K9I5K807LMA+MLc/L606KKMyIKMyIKo5J7M+LLo/L8Q/MMQ4K8UyKMg0KtA8MNhGOd1OQOJORNk6Ntg0M9QyMNY0Mts5N+E9POY8Pek7PO05PO41OusyN+ozN+g1OOU5OeE8OtlAOr44LbU6K7E2J640Ja01JbA4KLU8K7s9LshEN9BDOdZCON0+OOI5Nug2Nu42Nu83Oes2O+o3O+o3Oug4OOg4OOc6NuY6NuY7NOM6M+Q7NOQ7NuM8NuM7OOI6OeE5Od44ON05Otw8PNpAPtNCPcg/Obo7Mq03K6U3KKE7LJ08K5k8K5Q7KZM6KJA5Jo84JYo5Jno2I3k2JYg5LKBGPblTT8BXVLhQT6tJRqJNSJxTTJpaUZdeU5dhV5dhV5hfVotlUHNyRnqNVpOmbqS5gKvAh56ze3yQW1tvPEBTJUFTK0JRMD9MMjpDMDY8LjY5MDU4Lzk7LkBBMz0/NDo9Mj1BMzpDMEBNM1FjPWB2R2mFSnOST3KWTnCUSm+VTG2VTmyTUHCUVHGVVW+WU26WUGyUTWyVSWyXSG6ZSXCdTHCdTHCfTnWkU3ipWHmqW3WmV3GgWF+JSlZ/R094QGFYSWFYSWFYSWFYSWFYSWFYSWFYSWFYSV9WR2BXSGBXSGFYSWJZSmNaS2RbTGRbSmVdSGZeSWZeS2deTWdeT2ZcUGZcUmZcU2hdV2hdV2hdV2hdV2ddVGZcUmRaUGNbUF1ZTlpWS1ZSRlJOQlBMQFBNPlROQFVPP1hSQllUQVtWQ11YRGFaR2RdSmZfTGZhTWRjUWxlVXZcT4pbUaliXLhaWLZGRLk8OsM8OcY7NsQ5MsI4Lb44LL07K74/Lsc/L9M5Ldk3LNo4Ldk5Ldo4Ldk5Ldg4LNU3K9U3K9Q4K9Q4K9Q4K9Q4K9Q4K9I5K807LME/Mbc/L606KKIzIJ4zH6I3I6w9KbVALrw/Lb86K8M3KsU1Kss3K846Ls48L9M6Mt42NuAyNNsxMt0zNOA4OOY8Peo9P+w8P+43POwzOOkwNuYyNeU1OOE3N9o2Nc42Mbc1KK83J642Jqw3Jqw3Jq45KLI6KbU6KsNBM8pCNtRBN9w/OOM7OOY4N+s3Nu43Oe02Ous3Ous3OOo4Nuo4Nug5NOc6NOY7NOI5MuE6Mt86NOA7N946ON07Odw6ONk5OdY8OtZBPdJDP8pBO7w8M682K6Q2J543KJw7Kpg7KZQ7KZI7KI86Jo45JYw3I4c5JYA9Knc2JIE1J5lFOqpQSKxNR6lMR6ZRTJ1QSphVTJRaT5ReUpVhVpZiV5dhV41nVImFX5mpeq29jqa4iJChdHOGWU5gOC9BGy0+HDRDJjpGLj1GMztBMzo9Mjo9NDw9NTo6Lj9AMjw+Mzk8MTxAMjlCLz9MMlFjPWF3SGqGS3STUHOXT3KWTHGXTm+XUG6WUHKXVHOYVXCYUm+XUG2VTG2WSm6ZSnCbS3GeTXKeT3SjU3moWHyrXXenW22dU2WSTVuESFN8RE53P2RbTGRbTGRbTGRbTGRbTGRbTGRbTGRbTGNaS2NaS2RbTGRbTGVcTWZdTmZdTmdeTWZeSWdfSGhgSWlhTGlhTmlgT2hfUGhfUGpgVGpgVGlgUWhfUGhfTmhfTmhgTWhhT2ReTmBaTFtVR1ZQQlBNPk5LOk5LOk5LOlFOPVJPPlRRQFZTQFhXQ1taRl1cSF5dS2JgUWZeUW1XSoZbUq1qZL5jYMFNTchCQ9A7PdQ4OdM4NMw3MME5Lbo9K7VCLbxCK847K9c3Kdg4Ktc6K9k5K9Y5KtY5KtQ4KdQ4KdQ4KdQ4KdI5KdI5KdI5KdI5Kc07LME/MbY+MKs6KKE2Ipo0Hps3IKM9Jq9CLbM7Kro7LMI6LMc5Lcs4Ls46MNE9M9o7Nek5POw0POYzOeMyOOIzOOI1OeIzOOIxN+k2POk0Oec0Ouc3OuM5PNs3NtAyMcAvKrQ2Kq05Kq06KKs6KKs6KKs6KKw5Jq83Jrg6K8E7L84+M9g/N+E+OeQ7OOg5Nuw4N+42OO42Nu42Nu03NOo4NOg6M+c6M+Q8M+E6Mt87Mt88Ndw9N9s9Otk+PNc9O9Q+Pc5APMpDPcVBPLo+Nq03LaM1KJ43KJo6KpY7KZM8KZE7Ko06KIo5Jok4JYg3JIM4JYNALXU0InszJZNHOqVSSqFORp5OR6FXTplWTZNZTZBaTo5dT49dUpRgVZdgWY9oV42IaJikfJ2pg4COal1rSERTNDJAJiQyGS06JjA7KjU9Ljk/Mzw/ND0+Njs8NDo6MDk5LT9AMjs9Mjg7MDs/MThBLj5LMVBiPGJ4SWuHTHWUUXSYUHOXTXOZUHGZUnCYUnKaU3KaU3KaU3CYT22XTW2XS3CbTHOeT3SgUXaiVXqmWXupXnqoX3GfVmSSSlqHRF2GSld+R1J5QmVcTWVcTWVcTWVcTWVcTWVcTWVcTWVcTWVcTWZdTmZdTmZdTmdeT2deT2hfUGhfTmhgS2hgSWlhTGpiTWpiT2piT2phUGphUGphUGlhTmhgTWhgS2hgS2hgSWlhSmpiS2ZfTWNeS15YSFhSQlNNPU1KOUtIN0lINkxLOUxLOUxNO05PPVBRP1FUQ1NWRVRVRVtZTF5WSWNRRXpYTqFoYbZlYcRWVddSU9lAQ986Ptw4N9U4M8c7Lrw/LbFDKrVBKMo7KtU4KdU4KdU5Ktc6K9U5KtU5KtU5KtQ4KdI5KdI5KdI5KdI5KdI5KdI5Kc07LME/MbY+MKs8KaM6JZk2H5U1HZs7I6dBKrJCLrlAL787LMM3KsUyKMs0K9I7Mt89Ouo1Ou4zPOs2Pek4Puc6PuQ7PuM6PeI5PN81OOE3OuI5PuE9Pts9PtE5NsMyL7YwJ685K6s9LKs9LKk+Kqo9Kak8KKk6J6s4Ja82Jbk3KcU7MNA9M9k8Nd88N+Q7OOk6N+44N+83Ne83Ne44Nes6NOk7NOc8NOQ9NOI+NeA/N95BOttCPNlBPtVBP9JBPs1CP8FAOrtAOLM9M6o4LaE1KJs1J5k5KZU8KpE7Ko08KYo8KIk7J4Y5J4Q3JYM2JIA3Jn06KXQzIX45KpdPQaNZTpxSR5VPRZlXS5VZTpBbTY5aTYxbTY5cUZNfVJlgWZFnWX53WnmDYHJ8WlZhQztFLC87JTA7KjA8LjM9MjU9Mjc9Mzw/NkBBOT9BNjw8Mjc3Kzg5Kz4/MTo8MTc6Lzs/MTdALT5LMU9hO2J4SWuHTHWUUXWZUXSYTnOZUHKaU3GZUnObUnOcUHKbT3CZTW6YTHCaTnOeT3agVHmlWHunXHyoXXqlXXGfV2eUT12KRViCQmGIT1mASVN6Q2deT2deT2deT2deT2deT2deT2deT2deT2deT2deT2deT2hfUGhfUGhfUGlgUWlgT2phUGpiT2piT2piT2lgT2lgT2lhTmlhTmlhTmhgS2hgS2hgSWhgSWhhR2hhR2hhR2dgTWVeS2JbSVxXRFdSP1BNOk1KOUlINklHOEdIOEdKOUdLOkhMO0lNPkpOP0tNP1BQRFhSRltPQ2lSRIRaTpZWTLBTTNRaWdtJSuI/QuE5Ods3Nc87McNALrRCKrM8JMk6KdM3KNQ4KdM6KtU5KtM6KtM6KtM6KtI5KdE6KdE6KdE6KdE6KdE6KdE6Kc07LME9MLU9L6w9LKM8KZg4IpA0G5U5IKFBKa1DLbZBL789L8A2K8IvJccwJ9A2Lt46OOg1Oe42Puw7Q+o/ReZBReBCQ9xAQdpAQM0xMtA2NtM6PNE9O8k7Ob84MrU0Lq00Kao8LaU+K6Y/LKVALKU+K6U/Kac8KKk6J6o3JbI3J7w4K8U4Lsw3MNQ5NN48OeY+O+s5N+w5New5Nes6NOk7NOg7NOU9NOI+NOBCN91DOdpDPNVCO89BPco/PMc9O78+ObE8M6k6L6I4K5w2KJg3J5Q4KZE6KY06KIs8K4k8Koc8KYM6J4I5KIA3Jn82JX02JHgzI3g1JYZDM5hVRZ1XS5RQQ5BQRJVaTJNZTZBaTpBcUZBcUZJbVJVcVZlcV45iVWtiRVdhPkpTND1HLDY/KjM+LTQ+MzU/NjY9NjlAOT1CO0NGPUVHPERFN0A+Lzs5Kjc4Kj0+MDo8MTc6Lzo+MDdALT1KME5gOmF3SGuHTHWUUXWZUXSYTnSaUXKaU3GZUnGbT3KdTnGcTXCbTG+aS3KdTnWhVHmlWH+rYH6pYXqlXnGcV2aRTF+JR12HRV6ISWKJUFmAS1N6RWhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGlgUWlgUWlgUW1kVWxjVGpgVGlgUWhfUGdeT2hfTmhgTWlhTmlhTGlhTGlhTGlhSmhgSWhhR2hgSWdhS2dgTWVeS2JbSFxXRFVSP1FOPU1MOkVGNkVIN0RIN0RIN0NKOkNKOkNJO0VJO0lLPlNRRFNQQVlNPWVLOnRENpZJP8JZU9lRUeBEReA6Ot04NtY8NMo+L7o9KbU4Isk6KdA5KNE6KdI7KtI7KtI7KtI7KtI7KtE6KdE6KdE6KdE6KdE6KdE6KdE6Kc07LME7MLY6Lq08LKc+K5k5I48zHJM3Hp8/J6I5JK88KcA+MMc9Msw4LtA3L9k8NeM/Pew9Qu4/ROpESOJERdhAP8o7N8A1MLsxLrkvLLw1Mb46Nrs8NrM6Mqo4LqQ4LKI7LKE9LZ8+K6A/LKFALaFALaFBK6Q/K6Y9Kqk7Kq06KLI3KLk1Kb81K8k5MNY+OeBDPuU8N+g7Neg7Nec8NOU8NeQ9NOE+Nd5ANdxEOdhEOtJDO8tCOsQ/Or08N7g4NbA5M6I3LZk4KJU1J5M2J5E6KY88LIs6KYU4Jog9KoU8K4M8KoA8KX45KX05Jns2Jns2JnoyJIA4KoxHOJZTQ5NRQ4tMPZBSRZlfU5FXTJJZTpRbUpZdVJdeV5dcVpdaVY1fUmFYO0VNKDZAHjhBJj5HMj1GNTM9Mi03LjE4MTc+NkNGP0dKP0hJO0JDMT8+Kjs6Jjc4KD0+MDk7MDY5Ljo+MDY/LD1KME5gOmF3SGqGS3WUUXSYUHSYTnSaUXKaU3GZUnGcTXGcTHGcTHCbS3CbTHOdUXejVnunXIKtZYCrZHijXmqVUF2HRVmDQV6ISGWPUGOKU1qBTFN6RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlfU2pgV2pgV2pfWWpgV2pgVmpgVmpgVGphUmphUmphUGphUGpiT2piT2piT2piTWpiTWdfSmdfSmZeSWVfSWJdSVpYQ1NQPU1MOkhJOUVIN0FFNkBENT9FNz9HOD9HOj9FOUdLPUlLPUJGNUtKNlxRO2FFMINKOcBqXdxnYONVU+RGReVBQOBBPdU+Nck9MMY9LcY0Jcs1Jsw2J803KM03KM85KtE7LNM9LtI8LdI8LdI8LdI8LdI8LdE7LNE7LM48LbsyKLY3LrE7L6g6K5o3IpQ1H5Y3IZw5IqxBLbI9LLo2KcE0Ks02L9c8N+JDP+pIRehERelGSd1DRck5OLs2MbQ4MK44Lqk0K6s5L6k5LqU5L6A4LZs5LJY6K5M8K5I8K5Y9K5g9Kpk+K5o/LJtALZ1ALqBBL6NALaI7KqU6KKs3KLA2Kbc3LL44LcQ7M8w8NNo9NuA9NuI/OOJBN+JBOd5CNtpANtdANdhIPdJFO8dBOLs7MrI1L6ozLaYwLJ8yK5k5LZI7KpE5K406Kos6KYg7K4c7K4U8K4E6KH45KXw5KHw5KHw5KXs4J3k2JngzJHctIItBNphQRJNNQY9NQZJSRpNVSo5SR5hcUphcUpFVTZBUTJdaVZVYU5RXVJNnWl1UNUlRKkJMKUJLLD5ILzdAKzI9LTQ/MTQ8MUhQQ1pdUlhcTU1POkRGLkFBJz09JTo7KT4/MTs9Mjo9MjxAMjQ9KjtILlBiPGN5SmyITXWUUXOXT3KWTHKYT3KaU3KaU3KdTnGeS3KfTnKfTnOfUHaiVXunXH+qYoKtZnijXmqTT2CJR16GR2GJSmaOUGmRVWSJU1uATFR5RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlfU2pfWWpfXWpfXWpfW2pfWWpgV2pgVmpgVGpgVGphUmphUmphUmphUmphUmphUGphUGhgTWhgS2dfSmdfSmRdSl5ZRVVSP09OPElKOkZJOEJENkBENT9FNz9HOD5GOT1FNkBGOD5FNT5GMUhMNU1JMFU/KH9QPLxzZMtjWOBfWutVVOdHR+JAPuBBPtg/Oc46MM05Lc48Lc89Ls89Ls87Lc46LM46LM46LM46LNA6LNA6LNA6LNA6LNA6LNA6LM07Lsk/NcVCOrxCN649L6A3JJcyHpYxHZsyH6Y1I7I3KMM6MNFBON9GQOZJROlKRupLSN5DQdtFRNBCQLw7Na85L6k9MKU/MZ89MJ8/MZw+Mpg/MZQ+L489L4o+LodALog/LI49KpE7KpI8K5M9LJQ+LZY/LJc+LJo/LZ9ALqE9LaQ6LKg4LKw4K7E4LbY6MLw5L8o7M9A7NNM/NdZCONdDOdZDOdREOdFFOMpCNsNBNLk9M7A6MKk2L6I1LqA1L5k3LpI8L449LIo7LIg7K4Y6KoQ7KoM7LIE8LH47Knw6Kns5KXk6KXg5KHc4J3Y3KHczJoAzKZBDOZhOQ5JMQI1LP49RRJJUSZBSR5NTSphYT5ZVT5hXUZxdWJRXUo5TT4pjVF1XNVhjOV9qQlpmQklUNjZDKTRAKjxINE9YR1liUV9mVFdcSEpON0JFKj8/Izw8Ijk6KD0+MDo8MTo9MjxAMjU+KztILlBiPGR6S2yITXWUUXSYUHKWTHOZUHKaU3GbUXOfUHKfTHCdTHGdTnSgU3ikWXynX3+qY3umYW+aVWOMSl2GRGGJSmWNTmWNTmOLT2SJU1uATFR5RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWphUmphUmphUmphUmphUmphUmphUmpgVmtgXGtfX2tfX2tgXmtgXGtgWmthWGthV2thV2thVWthVWthVWthVWthVWthV2thVWxhT2tgTGlhTmlhTmZfTWFcSVlWRVNSQE5MPUlKOkRGOEFFNkFFNj9GNj5ENjxENT1GNTdALUBIMUlLM0Y/JVc/J4daRbdyYrZWStliWvBlYuxUU+ZGSOtHSOZDRNg6N8s3Lck6LMk6LMk6LMs5LMo4K8k3Ksg2Kco4K8s3K8s3K8w4LMw4LMw4LMw4LMs4LsIzLb41L7Y2La0zKKEwIp4uIKEyIaczJLxANMdDN9ZHP+FMRuhNSelKR+VGQt9EQNdDQc9EQcFAOrE7MaQ8L6FBMZxFNJhFM5NEM5FENI9CMopBMIVAMIJBL35BLn9ALoY6Kos5K4s6KYo7Kos8K408K449LI88KpY/Lpc+Lps7K505KqA4K6U5Lak6L645L7g5ML45MME7MMQ+M8U/NMVBNcRCNMFBNLY6LrI5Lqo4LaM3K542K5o4LZk4L5M7MYs8L4k9LYc7LYQ7LII6K4A7K4A7LH88LH07K3s8LXo7LHc5KnY4KXU3KHQ2KXY0Jok8MpVHPZZNRI5KP4hIPI1PQpJUSZJSSZJPSZlUT5lTUZhXU5pdWpNZVY1bVI1sW4F9WH6JXoCLYWx4UkxYNDZEIz1KLkxaQGVxWWVvV11lTVBVPkVJMD9DKD1AIzo8JDg5Jzs8Ljk7MDk8MT1BMzY/LDxJL1BiPGR6S22JTnaVUnSYUHOXTXOZUHKaU3CaUHWhUnCgTG6dTHCfT3ejVnunXH2oYXynYnCZVWaPTVyERVyERWWMTWqRUmaNTmCGSWOIUlp/TFN4RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWphUmphUmphUmphUmphUmphUmphUmpgVmtgXGtfX2tgXmtgXGtgXGthWGthWGthV2thVWthVWthVWthVWthV2thV2thWGthV25iUm1iUGpiT2piT2liUGVeTF9ZSVlWRVJPQE5MPUdIOkRGOENFN0JENkBENTxDMzxINDpDLkZKM01HMVA7JnFMOZpiUapeUKFBNcZTTOdjX/BeXu1TVetKT+lESuFBQ8w5Msc5LcU3LcU3K8g4L8o6L8s7Ms06MNE+NtE+NNI9NtI+NNM+N9M/NdM+N9M+N9RAPNFCPstEPsZGPcJGPMNJPsdNQM9RRdlTSt5RSuJNR+RJReRGQ+JDQOBBPdtCPdVGQslEP7o/N6s9MKA/L5pDMpZINJRJNo5HNYxFM4hDM4VCMoBBMH5BL3pBMH1ALoI6LIY4LIU5K4Y6LIY6LIc7LYc7K4g7K4k6K4s5K485KpE5K5U5LJk7L509MaI8MKo6L645L7A6MLA6LrA6LrA6Lq85K644Kqg3KaU3Kp42KZs2KpU3K5I4LZA5L448MIg8LoU8LYQ7LII6K386K345Kn47K307K3w6LHo7LHk7LHc5LHM4KnE2KHI3KXU1KYxDOpNJPpFLQYpIPIdJPItPRJNUS5dUTJZRTJtUUJdRT5RTT5ZcWJBfWJBoXpd+apSUcIWSZnWCV1loP0NSKz9PKlBgPGNyUWV0VVxpS09ZPkNMMT9FKz9DKj1BKDs9Jzc4KDo7LTc5Ljk8MT1BMzdALTxJL09hO2J4SWyITXaVUnWZUXSYTnSaUXKaU3CaUnOfUG+eTW+eTXOiUnyoXX6pYXmkX3SfWmOMSl6HRVuDRF+HSGeOT2qRUGaNTGCHSGKHUVl+S1J3RGlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWphUmphUmphUmphUmphUmphUmphUmpgVGtgWmtgXGtgWmthWGthWGthVWthVWtiU2tiU2tiU2tiU2thVWthV2thV2thWGthV29jVW5iUmtiUWxjUmtiU2hhUWRdTWBaSlhSQlNQP05LPElHOEdFNkRFNUJDMz5CMT1JMT9HL0xHMVM+K2c9LZVaTK1fU5w+Np4zK7Y/OdhYVfNpZ/ZkZetSVeZKTulPUdpJRNNGPM1AN8s+NM4/N9JEOtVGPtdHPtpKQtpKQd1KQ91KQt5LRN5LQ+BLReBLRetTUuhUVONTUt1TUNhTTNhTTNtUTuBVUOBMSOFJRuNFQuJDQORCQOJDQORFQuFHRdlJSMpEQbo/OKw9MqE/MphCMZJFM5BHNoxFM4lENIdCM4RBMYE/MX4/MHo/MXw+L4A6LoM5LoM5LoQ6L4M7LYM7LYM7LYM7LYE5KoM6K4U5K4c5LIo7LI07LY88LpM7L5s6MZ45L585LaA6LqE5LKM5LKI4KqI4Kp84KZw4KZg4KJQ4KY85Kow6LIk6LYc7LYQ6LYI6LIE5K4A4Kn03K303K3w4K3s5K3s5LXk5LXg6LXY4LXE1Km81KXE3K3U6LIxIPY5KP4lJPYRJO4ZMQIxSRpNXTZhYT5hRTZxVUZdTUJNWUZJgWYhiV4NnW4d7ZW5yUVppQEpZMEJTKUlaMFdpQWR2Tmp8VlhpRUxbOj9MLjpEKTxELD5DLTxBLTo9LDg5Kzo7LTc5Ljk8MT5CNDdALTtILkxeOF91RmmFSnSTUHSYUHSYTnSaUXObVHGbU26dTW2eTHChUHeoWXyqYXqoYHKdWGqUUlqCQ1yERWGISWWMTWeOTWeOS2iNSmeLTWOGUFp8SlJ0QmlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWtiU2tiU2tiU2tiU2tiU2tiU2tiU2thVWxiWWxiWWxiWWxiVmxiVmxjUmxjUmxkUWxkUWxkUWxjUmxjVGxiVmxiWGxiWGxiWG9jVW5iUmtiUWxjUmxjVGtiU2dgUGRdTV5XR1lTQ1ROQE1KO0tIOUdFNkZDNEBDMDtILkBJLk9DLWE9LYRGO6xZU7ROSp4sK7I6Obk9O9NTUvJwbv52dvFlaOtYXvBeX+NVUdpQRtRHQNBDOtFEPdRHPtZHQdZHP9lIQ9pKQtxIRN1KQ95KRt5LROBLR+BLR+JISOFHSdxISNlHR9ZIRNdIRNhHRNtFROBCQeRBQuZCQehCQudDQuRCQN9BPttBP9tJScpDQLk8Nq4+M6JAM5hAMpFCM41EM4pBMohAMYc/MYU9MYI8MoA8MX89MX89MYE7MYE7MYM6M4E7MYE7MYA8L4A8MX89L4A8L4A9LYE7L4A7LII6LIE5KoI4K4M3Kow6L484LpE5LZQ6L5c7Lpo9Lp48L58+Lpk5K5c6K5M6KpA6K4o7LIc7K4Q7LII6K4I6LIE5K4A4Kn42KHw2Kns1KXs1KXs3Kng2Kng4LHg6L3M3LHA0KW81KXI6LXc9MYtNQIlLPoRKPIJNPYVRQ4tWSJJYTZdXTpNOSZlUT5dWUpZdVpBlXHxfUWdXR2FfSEVPLT5OKT9PKEpcNF9xR2t9U2V3TVhqQE5gOEBRLTZFJjdEKj1GMT1ENDo+MDc7LTg6LDo7LTY4LTk8MT9DNTdALTlGLElbNVtxQmWBRnKRTnOXT3SYTnSaUXObVHGbU22cTG+gT3OkVXioXHqoYHOgW2mTUWCKSFmBQl6GR2WMTWeOTWeOS2WNR2eMR2iMTGGETlh6SFFzQWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xiWGxiVmxiVmxjUmxjUmxkT2xkT2xkTWxkTWxkTWxkT2xkUWxjVGxiVmxiVmxiVm9jVW5iVGtiU2xjVG1kVWxjVGphUmZfT2JbS15XR1hRQVJMPE9JOUpHNklDM0FDLjpHK0FHK1VAK3hHOaNQTLVJSbY4PLozOchBRcQ/QMpKSd9iYPFxcPBucOdiZeJaXNtRTtVMRNBFQM1CO89EP9BFPtBCPs5BOtJDP9JDPdRDQNVEP9hEQthEQNlFQ9pEQ91BRN1BRN5ERt1HSN9JSOBKSeNJSeVHSOdBQ+pBROxCRexCRedBQeJAPts9OtU9OtpGRsk9PLk4M7E8M6ZANJg/MZA+MI5BMYs9MIo8MIk7MYg6MIc4MYY5M4U6NIQ7NIE7M4A8M4E6NIA8M388M309MX09M309MXw8MHw9Lnw8MHw9Ln07LXs5KXo4Kns3KoI6LoM5Loc5LYk5Lo05LpE7LpU8LpY9LZI5K5E5K447K4o7Koc7K4M8KoA7K388K4A4KoA4LH42Kn01KXwzKno0Kno0Knk1KnUyKXY2LHc5LnM3LHA0Km81KnM6L3hAM4tRQ4ZOP4FOPYJRQIVWRolYSY5VSpJTSpNQSpdTUJRUUpFcVoplXG5bTFBLN0VLMUFOMEtaOVdnQ2ByTGd5UWR5TldtP0dcMUFWLTdIJDFAITZCKj1GNTxEOTg9Njc6Mzo8Lzs8Ljc5Ljk8MT9DNTdALTdEKkZYMlZsPWJ+Q2+OS3GVTXOXTXSaUXScVXKcVG+eUHGiUXWmV3amWnOhWWqXUmKMSluFRV6GSGCISWSLTGaNTGiNSmiNSGaLRmWJSWGETlh6SFByQGlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xiVmxjVGxjVGxjUmxkUWxkT2xkT2xkTWxkTWxkT2xkT2xkUWxjUmxjVGxiVmxjVG5iVG1hU21hU21hU21kVWxjVGphUmdgUGRdTV9ZSVpTQ1ROPlBLOE1INUlEMURDLkBGKkREKFtCLIhUR69cWKs+QawvNc5IT8Y/RcA7Prs7PMRGR9haW+NlZttZW8xHSNFKR9BFQs1CP9BCPtRGQtRGQtBCPso/OM9EP89EP9JEQNRFQdZFQtlFQ9pERd1ERt9ARN9ARN5CRd9FR+FHR+BGRuBCQ+E+P+hCROlAQ+g+Qec9PuQ+PuNBP+FDQN9FQ9dDQ8U5OLY1MLA7NKY/Npo+M489L40/Mog8L4c6MIc6MIc4MYc4M4g5NIg5NIg7NYM6M4E7M4A6Mn87Mn48MH48MHw8MHw8MHg4LHk5LXo6Lno6Lns8LXs8LXs8LXo7LH07L385L4A3LoE3LIQ2KoU1KoY3Koc4KYo4LIg5Kog6LYU8LYQ8LYA9LH48LH48LH05LH03LXw2LHo2K3o0Kng0KXk1LHg1LHIyKHU1K3Y4LXI2K240KW41KnQ7MHhCNopVR4RQQoBPQIRTRIhXSYxWSoxSR41OR5VUTpRVUItSS4RYT39jVWZbR0dLMj1KLElYOVprSWh5VWN4UVpvRlNoP1BiOkxeNjtNJzA/Hiw5HTU+KT1DNTxCODo8Nzk8NTs9Mjs9MDc5Ljk8MT9DNTg/LThCKUVVMVVoO2F6Q26KTXKTTnKWUHSaUXScVXKcVHSgVXWjWHakW3SiWm+aVWaQTl6ISFuDRGSMTmGJS2CHSGOKSWiNSmmOS2WKRWGFRWCDTVd5R1ByQGlgUWlgUWphUmphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiUWtiUWtiUWtiUWxjUmxjUmxjUmxjUmxjVGxjVGxjVG5iVGtdUHFhUnRkV3JkV25iVmpgVGlhVGhiVGdhU2ViUWNdTVtWQ1ZRPVRPOU5IMkdBKUtHLEk/JGJJM5FnV7Z3brtsZ7hZV7pQUrZCRb1CRcJER8hGSM1IS9BKS9JMTdNLTc9FRdBERdNFRNZGRdVGQtJDP89EPc9GPMhDOslEO8pFPMxFP9JEQNdDQ9pBRNxAROFCRuJCROFDROBEReBEReFFRuNFROVFReNDQ+RCQORAP+RAP+M/PuJAPeNBPt5DP9NCP8Y/O7Y5M6o3MJ86MJc9Mo4+M4Y+MoM/NIE/M4E9MoI8NIQ5M4c4M4k5Mok5MoU7MIQ8LoQ8LoM7LYE7L4E7L4A6LoA6Ln46LX46LX46L346L307L307L307L307L305MH05MH44MH44LoA3LoA3LoE4L385LYA3Ln44LH05Lnw4LXs5LXo4LHg4LHg4LHg4Lng4Lnc3LXY4LXY2LHQ2K3M0K3E1K20xJ3I2LG40KW0zKG82K200KXE4LX9JPYVTSIVTSodSSohRSoxRSZBRSpRRS5VSTJNUTY1US4lbToJjUW9fSFlVOk1WN09fO2p+WWJ4UVpwSVVqQ1JnQFBhPUlZNURSMTdEJjQ+IzI6IzY7Jzw+MEBCNUBANjw+MzU4LTM5LTQ6Ljc6Lzk9Lzs/Lj1CLD1GKVNfO2FyRm+GUnSQVXSUU3SZU3OdU3OdVXWeWn6nZX6nZXCYWWKKS16GR16GSF6ER2CGSWKIS2SKTWaNTmWMTWOKS2CHSF6ER1+CTFR2REttO2lgUWlgUWphUmphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVG5iVHJiU3FhUnJiVXJkV3JmWm9nWm1lWGpkVmdjV2xpWm1qWWpnVGhjT2NeSFtVPVJMNFBKMEk/JlE/KWtQPX9YSYRORIhFPZRFQbFXVrhUVLtRUcBQT8BOTcFNTcNNS8NLStBUVMhIScI9PsQ9OtBCQNNFQc9CO8c+NMpEOcpGOstGPc5IP9RGQthERNxBRd1BReFCRuFDROFDROJEReJEReFFRuFGROFGROBFQd9EQOBCP99BPuBBPeBBPeBBPd5DP9RFP8hDPLo+Nq07MaA5MJQ6L4o8MIM9MYBANH5ANX4+NIA9NIM6M4Y5MYk5Mok5MIc7LoU8LYU8LYQ7LIM7LYI6LII6LII6LH85LX85LX85L385L346L346L346L346L305MH05MH05MH05MH05MH05MHw5MHw5MHw5MHo6MHo6MHo6MHk5L3k5L3g6L3c5Lnc4L3c4L3Q4LnM3LXI2LHI2LHA2K3A2K2wyJ3E3LG00KWwzKG82K2wzKHA3LH5IPoVTSoVTTIhRTIxRTZBRTJRQTZVRTpRTT4pPR4VTSIBbS3tlUHNpUGlsTWZxUWd4VF50TVhuR1BmQE1hPE1ePExbOkhVN0NQNDxGLThAKTY7Jzc6KTw9Lz9AMj4+Mjs9MDQ6MDQ8MTU7MTY8MDo8Lzw/Lj5BLD5EKlFbOV5tRG6BU3OMVXKSU3OYU3OdU3OeVnifXnyiZXieYWuRVGCGSV2DRl2DRlyCRWCGSWGHSmSKTWWLTmWLTmKIS2CGSV6ESV1/TFJ0QklrOWlgUWlgUWphUmphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVG5iVHFjVm9fUm1cUm1fVHFkW29nXGxkWWhiVmZiV3FtYXt4aX57aoB6ant2Y3FqV2VgSlRUPEZGLkM+KE1CLlNAL1U4Kl03Km0+NG43MHU5MX47NYdAOpJJQptQSqVYUK1aVLteWbpST7dHRbxCP8hEQtFFRNNEQM9AOtBBO9BDPNJFPtRHQNZHQ9pGRttFRt5ERt9DRN9DRN9DROBEReBERd9FRd9FQ+BGRN9FQ95EQtxEP9tDPtxDPtxDPtxDPdtDPtZFQM9GQMNCPLM+NaI6MZQ4LYk5LoM7L4JAMn8/M34+MoA+MoM6MYY5MYk5Mok5MIc7LoU8LYQ6LYQ6LYM7LYI6LII6LoI6Ln85LX85LX46L346L346L346L346L346L305MH05MH05MH05MHw5MHw5MHw5MHs4L3s7MXs7MXo6MHk7MHk7MHg6L3g6L3g6L3Q4LnQ4LnM3LXM3LXI2LHE1K3A2K281KmoxJnA3LG00KWsyJ2w2KmkzJ203K31HPYdQSYhRSoxRS45RTJFSTZNUT5RVUJFWUIxXT4dbUH5eT3RiTm9pUW9yVWx3WWZ3VVFlQktfOkVZNkRVM0VWNkdWOUdUOEVSOEBKMjxELzk+Kjc7Kjo8Ljw+MDs9Lzk7LjY8MjU9MjY8MjY8MDo8Lzw+MD1ALT1DKU1XNVppQGh7TW6HUHCQUXOYUnWfVXSfV3qhYHedYG6UV2OJTFyCRVyCRVyCRVuBRF+FSGGHSmOJTGSKTWOJTGGHSl+FSF2DSFt9SlByQEdoOWlgUWlgUWphUmphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVG5iVHJkV3BiVW1fVGxfVmthV2xjWmxlW2pmXWpmXXl1aoiEeJGNgZWPgZKMfomCcn16Z2BjTk9UPkRHMkdGMkhDMEY9LEw8LFZDNFA5K1I2KlY0Klk0K1w2K2E5L2U9M24+NIpLQp1STK5VUbdPTLxGRsZBQtJEQ9lHR9RAPtVBP9ZCPtZFQNlFQ9pGRNtFRN1FRN5ERN9DRN9DRN5ERN5ERN1FRN5GQ95GQ9tGQttGQtpFP9hFPtdEPddEPdlEPdhFPtREPNNGP8lGPrpBOKc7MZg4LIw4LYU7LoNAMH9AMX4/MIA+MIM6MYQ6L4g6MIg6LoQ6LYQ7LIQ6LYQ6LYI6LII6LIE5LX85LX85LX85LX46L346L346L346L346L346L305MHw5MH05MHs4L3s4L3s4L3s4L3k5L3s7MXo8MXk7MHk7MHg6L3g6L3g6L3Y6L3Q4LnM3LXM3LXI2LHE1K281Km81Km00KWoxJm82K2wzKGgyJms1KWgyJmw2KnxGPIpPR4xPSo1QS49STZFUT5FWUJBXUIxaUYldUoVhVXlfUGpbSGRfSWRoT1xmS05dQEVVOEFRND5NMD1MLz9NM0RRN0ZSOkdTO0JLNj5HMjpBLzk9LDk9Ljk9Ljg8LTc7LTc9MzY9NTY7NDc9Mzo8MTs9Lzw/LDxBKkpTNFZlPmR3SWyFTHCQUXWaVHehV3iiWnuiYXKYW2WLTlyCRVqAQ1yCRVyCRVqAQ1+FSGCGSWGHSmKIS2GHSmCGSV6ER12DSFp8SU5wPkVmN2hhUWhhUWliUmliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxjVHJmWnRoXHNmXW5kWmphWGxlXXNuaHt4cYF+d5CNhqCdlKilnKunnKikmaOdkZmWh3p7a2RnVE9SP0dKN0VINUJFMkJFMkVINUtMPEpIOUdENUQ+MEI6LUE3K0A2Kkc1KVM1KnFCOIxQSJ9QS69ISb9HScxFSdNCRdZAQtlAQtpCQdxEQ9pFQdtGQt1FQtxEQd5ERN5ERt5ERt5ERt5ERN1FRN1FRNtFRNpGQtdGQdZGPtRFPdRFPdNGPdRFPdVGPtRBOtNDO85FPcFCOa4+M586LpE7Los9MIQ/MIE/L4A+LoE+LoE7L4Q6LYc7Loc7LoQ6LYM7LYM7LYI6LII6LIE5K385LX85LX85L346L346L346L306MX06MX06MX06MXw5MXo6MXw5MXk5MHk5MHg4L3g4L3c4L3k6MXk6MXg5MHY6MHY6MHU5L3U5L3Q6L3I3L3E2LnE2LnA1LW80LG80LG4zK200K2oxKG03LWo0KmgyKGo0KmYyJ2o2K31EO41OR49OSJBRSpBUTJBVT45XUIpZUoRcUntZTXddUGtaSl1VQllYRFleSE9ZQT9LMzpILzdFLjVBKzVBKzhELj9IM0NMN0VOOUJLOEBJNjxFNDpBMTlAMDc+LjU8LDQ6LDU8NDU8NTY7NTY7NDk7MDo8Lzs+LTtAKUdQMVNiO2J1R2uES3GRUnecVnmjWXmjW3ifYG6RV2CDSVp9Q1x/RV6BR16BR12ARmCDSWGESmKFS2KFS2KFS2CDSV+CSF6BSVl7SU5vQEVmOWhhUWhhUWliUmliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxjVGthVW9lW3BmXGxjWmtkXHJtZ4SBfJGQjKejoLWxrsTBvMnGwcnEvsXAusC5sbmyqKScj4iCcmdkVVBRP0ZJOD5FMztEMTpGMjhFMzhFMzhDMzpCMzxCNkBDOENEPEhFPD40KlA6L2U/NoBFQaFQT79YW8tSV8pDSdVGStdFRtpGRtxGRd5GQ95EQt5FQN5DQd5ERN5ERt5ERt5ERtxEQ9xEQ9xEQ9pEQ9lFQddGQdVGQNNGPdNGPdFHPdFHPdRFPdQ/ONVAOdBDOsZDObZBN6U9MJY9L4w9LoY+L4I/L4E+LoE+LoE8LYM7LYU7LoU7LoM7LYI6LII6LII6LIE5K386K385LX44LH46L346L346L346L306MX06MX06MX06MXo6MXo6MXo6MXk5MHg4L3Y3LnY3LnQ4Lnc4L3U5L3U5L3Q6L3Q4LnM5LnM5LnI4LXE2LnE2LnA1LW80LG80LG00K2wzKmo0KmgyKG03LWkzKWYyJ2k1KmUxJmk1KntCOY5NR5JNSJFQSo9UTI1WT4dYToJaUHxcUXNcTmxcTWBXRlZTQlFSQkpRP0BJNjRALDM8KzI7KjA5KDA5KDI7KjU+LTlCMTxFND9INz9INz5HNjtGNTpDMjVALzM+LTE8LDM6MzM5NTQ5NTQ5Mjg5MTk7Ljs+LTtAKkNML09eN2BzRWuETXKSU3meWXmjWXehWXGYWWaJT1p9Q1h7QVx/RV6BR16BR16BR2CDSWCDSWCDSWCDSWCDSV+CSF6BR16BS1h6SExtQENkN2hhUWhhUWliUmliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxiVmpgVmphWGtkWmxoX3VwbIiEgZ+emrCwrsPCwNPS0OLh3+fm5Ofj4OLe29zX09jPyM68srill5eHenltXV9ZSUtMOkFGMjxFMD9LNz5JOD5GNztDNjs+NTo7Mzk4Mzg3Mj09M0M8Mk43MWE4NIhISK9dX8VgZMpXWs1RU9NOT9dNS9tLSt5IR+FGRONEQeJCQt9DRt5DR95ERt1DRd1DRd1DRdxCQttDQtpEQ9hEQNVEP9NGP9JFPtBFPtBHPdRFPdlAOtlAOtFCOslEO7xDOqxANJk7L4w5K4k9L4M+LoE+LYE+LYE8LIM7LIQ8LYQ8LYI6LII6LII6LoE5LX85LX85LX44Ln05Ln46L346L306MX06MX06MX06MX06Mn06Mns7Mnk6MXk6MXg5MHc4L3Q4LnM3LXI4LXQ4LnM5LnI4LXE4LXI4LXA3LHA3LHA3LG82LW82LW82LW41LG00K2wzKmwzKmkzKWgyKGs3LGg0KWYyJ2g0KWIwJWY0KXpBOJBNR5NOSZFQSo5VTIhYToFZT3haT3JcTmteTl9YSFJQQUtOPUVJOjlCMTM7LDA4KTE3KzE3LTA2LDA2LDA2KjE3KzI6KzQ8LTlENDtGNT1INzxJNztGNTZDMTNALDE+LS44MDA2MjE2MjI3MTc4Mjk7MDo8Ljo/KT9IK0xaNl1wQ2qDTHOSVnmeW3ehWXOcVmeNUF6BSVZ5QVh7Q1t+Rlt+Rlt+Rl2ASF+CSl+CSl+CSl+CSl+CSl6BSV2ASF2ASlV2SUprQEFiN2hhUWhhUWliUmliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxiVnFoX25nX21oYnRxaoeDgKGgnry8us3Pzs/Pz+Dg4PLy8vr4+fv3+Pfz8vHr6+7j3+jQxt3BtcGrnaKRgX11Yl5cR0tNN0NIMkFJMkFINkBHN0JEOUJCOkI9OUM5Nz86Njo9Nj4/N0M4MkouK2U3N49RUrRoasZubcBcXMdaV9BWU9dRTt1NTOJISOZDROVCReBER91ER91ERt1DRd1DRdxCRNxCQtxCQtxEQ9lDQtdDP9NEPtJFPtBFPtFHPdRFPdxDPdtBOdJCOspEO79FOrBBNpw6LYw2J4o8L4U9LoI9LYE+LYE8LIE8LIQ8LYQ8LYI6LII6LII6Ln85LX85LX44LH05Ln05Ln46L346L306MX06MX06MX06MX06Mns7Mno7Mnc7MXg5MHY6MHU5L3M5LnI4LXI4LXI4LXE4LXA3LG44LHA3LG03K282K282K282LW82LW41LG00K200K2o0KmkzKWg0KWYyJ2s3LGg0KWMxJmY0KWIwJWUzKHhCOI9OSJJPSY9STYtWToRYT3paT3FbTWpdTVpURElKOkBENT5ENjlBMjE5LC83KjY8MjQ3MDU4MTU3MjQ3MDI1LjA2LDA4LTI6LTZBMzpFNT1KOT5LOTxJNzdGMzNCLTE+LSw2Li40MDA1MTE2MDY3MTg6Lzo8Ljo/KzxFKklXNFtuQWmBTXKRVnicXHWeWHCZVWCGSVh7Q1N2Pld6Qlt+Rlp9RVl8RFx/R1+CSl+CSl+CSl6BSV6BSV2ASF2ASF1/TFN0SUhoQUBeOGljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2pjU2tiU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVWxkV2pjW2dkXXZzbpOSjq+vrcTGxdrc2+ru7/P09vb3+fz8/v/////+///7+vz29v3y7vfh1PLYx+DJt8a1oaqgh4iEaWJiRkVILUVJMENHMEZFM0dDN0Y8M0M2MEc1M0k7Oj49OT4/OkI6N0k3NWNHRpJqasWTkuitqdKLh8d0bsBdWMZTUNVPTuBLTedGS+lGS99ESN9JS9tFR9U8P9g+QOFHSeBER9Y6PdpAQNpAQNlBQNZCQNRDPtJDPdBBO9FBOd5DPttBOdNAOcpBOb5COLBANZ86LpA4Kow9MIc+L4M+LoE+LYA9LIA9LIE8LIE8LH86K385LX85LX44LH44Ln05Lnw4LXw4LXw5MHw5MHw5MHw5MHo6MXo6MXo6MXo6MXk9NXc8NHc7M3U6MnQ5MXE4L3A3LnA3Lm82LW03LW03LWw4LW03LWw4LW03LW03LWkyK202L3A5MnA5Mmw1LmcyKmcyKmgzK2UwKGk3LmQyKV4uJGAwJl8vJWIyKHM+NoxPSpBRTIhRTIFSSn1YT3hdUmhYSVROPkRFNUBENTpCMzc/MjQ8LzM7MDQ6MDQ5Mjc5NDc4MzY2NDU3MjQ2MTE2Ly82Li83LC45KzI9LTZDMjpHNjpJNjhHNDRDLjE/Lio0KywyLi0yLi80LjQ1Lzc5Ljo8Lzo/KzY+JkVTMllrQ2qCUnWTXXmdX3KbWWuUUlt+RFh5RFR1QFR1QFh5RFp7Rlt8R1p7Rl5/SmKDTmKDTl5/Slx9SF+AS2CBTF9/TlRzSkZkQDxXNmljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2tiU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVWxkWWdkXW9uaoaFg6SkosHDwtba2+ru7/f7/Pf7/vj8//z9//7+/v/+///+/P/8+//68//w4Pzq1O3ex9fNssC7nqSjhIKDY2dqS0xRM0dKL0VDLkdBMUg+NEk6M0w5NUs8OT86N0NCQE5JRl1SUHlqZ6OOi86yrujFv//X0euyqc2CfMBjXspWVthSU99ITdpBRNZERdVFRdhISNxKS9tFRtU8PtY8PttBQ9k/P9k/P9lBQNdBQNZCPtNCPdJBPNRBOtxBPNtAO9RBOstCOr9DO7FBNqA7MZI4LYw9MIc+L4M+LoE+LYA9LIA9LIE8LIE8LX85LX85LX85LX44LH05Ln05Lnw4LXw4LXw5MHw5MHw5MHw5MHs7Mns7Mns7Mno7Mnc8NHU8M3U6MnM6MXI5MG44LnA3Lm03LW03LWw4LWw4LWw4LWw4LWo4LWw4LWw4LWs2Lm43MHA5Mm45MWw3L2k0LGcyKmUzKmMxKGQ0Kl8vJV4uJGIyKF4uJGAwJnA+N4JLRodSTodYUn5YT3JWS2RSRlJJOkE/MDxAMThAMTVAMjM+MDQ8MTQ8MTU6Mzc6Mzc5Njc3NTc3NTU3MjQ2MTE2LzA3Ly83LC45KzE8LjVCMTlGNTlINThHNDRFMjRCMS44Ly82Ly4zLS0yKzIzKzQ2Kzg6LTk9LDc/KERRM1lrRWqBVXaUYHmcYnCYWmePUVl8RFd4Q1R0QlR1QFZ2RFl6RVl5R1l6RVt7SV+AS2CATlx9SFt7SV5/Sl5+TF57TVNuS0ZfQTlSNWljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2tiU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW1kVW5lVm5lVm5lVmxmWmVkX3l7eJeZmLK2t83R0uTp7PT5/Pr///v///z///3+//7+/v/+/P//+///+v//9P785/r53fDv0eHlxNLYtL3FoKCog4eRbGBnRVFYOUVILURDLkpENExEOUtBOEo/O0M7OVNKS2lhX4F3dpySkL6zr9nOyOrc0/7o3f/z6f/k2/Cpo8NlY7VCRcdESdpSVttVVNFNS8pEQc1DQdRGRddFRthERNlDRNY9P9c+QNhAP9ZAP9ZCQNNCP9NCP9VBPdlAO9lAOtNDO8tFPMBEPLJCN6E8MpM5Lo48MIk9MIM+L4E+Ln89LX89LYA9LYA9LX85LX85L346L305Ln05Ln05Lns4L3s4L306MX06MXs7Mns7Mns7Mns7Mno7NHg8NHQ7MnE7MXI5MG85L244Lmw4LWw2LGs3LGw4LWo4LWo4LWo4LWo4LWk5LWo4LWo4LW45MW04Mm04Mm04Mm04Mmk3MGY0LWMxKmUzLGEwKV0sJV8wKGM0LFwtJV8wKHNEPH1QS4FWUH5ZUXBTS15KP09DN0A9LjQ2KDM6KjE8LDE8LjI9LzU9MjY8Mjc6Mzc6Mzc5Njc5NjY4MzY4MzU3MjI3MDE4MDA4LS45KzA7LTI/LjZDMjdFNDhHNDlINTlGNTQ+MzM6MjA1LiwyKC8wKDEzKDU3Kjc7KjY+J0VSNltsSm2EWnmWZnmcZmyTWmCHTld3RVd1Q1VyQlVzQVd0RFh2RFl2Rll3RVp3R158Sl98TF17SV16Sl99S157S1p3S1BnSkFXQDNJMmljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2pjU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW5lVm5lVm5lVm9mV21nW2prZoOHiKOnqLm+wdDV2OXt7/P7/fX9//v///v///z///z++/3++f79+P/+9///8/n95vb93u732Ofxzt7ow87atLbAm6GrhoCHZWZtTE5SN0ZIMEpJN0tJPEhEOURAN09HRGpgX4uBgKSambevrMvGwt7b1Orm3frx6P/78f/37f/d1fu1s+WPjspjZrBAP8NQS8lUTclQSMRHQchHQtRNStZLSNBAP9I+PtM/P9U/PtVBP9VBP9RDQNNCP9NCPdY+OdVAOtJDPcxFP8BFPrJBOaI9NZU7Mo48MYk9MIM+L4E+Ln89L389LYA9LYA8L385L385L346L305Ln05Ln05Lns4L3s4L347Mn47Mnw8M3w8M3s7Mns7Mno7NHg8NHI5MG85L285L205Lmw4LWs3LGo2K2g2K2k3LGk3LGk3LGg4LGg4LGg4LGg4LGg4Lm07NGw3MWo1L2k3MGo4MWo4MWY0LWEwKWU0LWEyKl0uJmEyKmIzK1kqImEyKnlOR4FcVnZXUmpPSFhEO0k8M0A6Ljo7LTg8LjA4KS86KjM7LjQ8LzY8MjY8Mjc6MTY5Mjc5NDc5NDY4MzQ5MjM4MTM5LzE5LjE5Li45Ky86LDE8LDI/LjVCMTdFNDtINjxJODlDODc/NDI4Li0zJy4vJy8xJjI0JzQ4JzQ8J0VSOF9wUHSKZH2abnmbaWaNWFV8R1NzQlRxQVNwQFNwQFRxQVVyQlZzQ1ZzQ1h1RVt4SF16Sl16Sl57S198TFx5SVdySUtfRjxNOy4/LWdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW5lVm5lVm9mV29mV29mV25nXXFxb4eMj6SprLe/ws3V2OPt7/L8/vT+//j///v///v//P3/+vz99fr88fj47Pb46vf/6PP/5PL84e752er00t7oxcrRr7a9m52jgX2CYlldQklNNkdKOUZKO0NGO0FCOmNeWIV9equhn8G3tczCwdfPzebh3fHu6fr38Pz17f/x6P/y6f/z7f/l3+mopLhpZKdNQrVQRMFZTshcUsZRSL9EPcJBPMtEQcxBPs5APtBAP9FBQNJDP9FDP9FDP9JDP9M/O9JBPNBFQMlFQL1DPq9AOaA9N5U8NI48MYk8MoM9MYE9MH89MX89L389L389L346L346L346L305Lnw5MHw5MHs4L3s4L3w8M3w8M3w8M3s7Mno7NHk6M3k6M3c7M243MG04MG04MGw3L2s2Lmk3Lmg2LWg2LWk3Lmg4Lmg4Lmc4Lmc4Lmc4Lmc4Lmg4Lms5Mmg2L2Y0LWc1Lmk3MGg3MGU0LWIxKmMyK2M0LF8wKF0xKF0xKFcrImM3LntVTHRYVGFOSE4/OEE3Lj02LDs5LTk7Ljk8MTM5LTM7LjU7LzY8MDY8MDc6LzY4LTQ3LjY5MDQ5MjM4MTM5LzM5LzI6LzE5LjE5LDA4Ky45Ky86LDE8LjM+LjZDMjpFNTxHNz1FODpCNTU7LzA2KDAyJzAyJTEzJTI2JTI6JUdTO2R0V3mPa36acnOUZ12DUkpwP09vPlFuPlFuPlFuPlFuPlJvP1NwQFRxQVd0RFt4SF16Sl16Sl98TGB9TVp3R1NtRkNVPzZENyg2KWdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW5lVm5lVm9mV3BnWHBnWG9oXmxubXqChZOaoKu1t8TO0Nzm6O33+fT+//X+/fb//Pr/+vv/+fv+8/j67fX26PH04/X86vT96PT85fP53/L22+nsz9jXucXEprGwko+OcmdnT05QO0dLOkZMPkhQRUtRR3t7c5+alMW+uNjOzN/T0+fb2/Pr6fz39PDv6/z79v//9v/99P/48f/z6v/n3v/Xy9iTg7hlU6RLO7RURr1XSbVGO7dAOMhLRcdDPspDP81DQM5DQM5DPs5DPs1EPs1CPdFCPNJDP85EQcVEP7hBPao9OJ47NpU8No47M4k8NIM9M4E9Mn89MX89MX89MX89L346L346L346L305Lnw5MHw5MHs4L3s4L3w8M3w8M3s7Mno6MXk6M3g5Mnc4MXU5MW43MG04MGw3L2o4L2k3Lmk3Lmg2LWc3LWg4Lmg4Lmc4Lmc4Lmc4Lmc4Lmc4Lmc4Lmg3MGg2L2c1Lmc1Lmg3MGg3MGc2L2Y1LmEyKmU2Ll4yKVwwJ2A0K2E1LGk9NHVTSlhHQEU+Njw1Lzo2LTs4MTk5LzU3LDM2Kzc6LzU7Lzc6Lzc6LzY5LjU4LTU3LDM2KzI4LDE5LDI4LjE5LDE5LjE5LDE5LDE5LDA4KzA4Ky45Ky86LDA7KzM+LjZBMThDMzxENTpDMjg+MDU7LTU3KjM1KDEzJTA0JTE4JkhUPmd3XHeMbXaSbGiIX1J3S0JoOUtrPE5rO1BtPVBtPU9sPE5rO1BtPVFuPld0RFp3R116Sl57S2B9TV98TFZzQ05nQDxKOTA7MyUvJ2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2tiU2xjVGxjVGxjVG1kVW1kVW1kVW1kVW1kVW5lVm9mV29mV3BnWHFoWW9oXmhpa210eoWMlKOssb/IzdPe4uXw8vD8/PL8+/X++fj/9/r/9vz/8vr87vj55/b35/b26vn36/r36Pz25v314vfs2OfYw9XGr8Cxmp6TfXZuW1pXRlBRQ1NWS1xjW2ZtZZWYjbKyqNXOyOjd2/Pj5Prq6//x9P/3+f/9/f79+fn69Pj58fz88v//8///8f/76v/m0fGqlLxvW6lWRK5SQ7VQRLtMQb9KQcJHQMZFQMlFQMpFQMpFPslEPchDPMlCPNFDP9BFQMxFQcJDPbM9OaY7NZw7NZU8Now8NYc8NoU8NYE9NH88M389MX89MX89MX46L346L346L305Lnw5MHw5MHs4MHs4MHs7Mns7Mnk6M3g5Mnc4MXY3MHY3MHQ4MG43MGs5MGo4L2o4L2o4L2g4Lmg4Lmg4Lmc3LWY3LWY3LWY3LWQ4LWQ4LWQ4LWY3LWc2L2g3MGk4MWk4MWg3MGk4MWo7M2w9NWc4MGw9NWM3LmE1LG9DOnhMQ3RJQG5NREQ6MTY3LzQ1Lzg5MTo7NTU2LjE0KzI1LDU4LzU4LzU3LDQ2KzQ2KzQ2KzQ2KTQ4KjA4KS45KTA4KzA4KTA4KzA4KTA4KTA4KTE5LDA4KzA4KzA4KzA4KzI6LTM7LjQ8LTlCMTpDMDtCMjpBMTo8LjY4KjM1Jy8zJDI5J0lVP2V1W2+DZ2iDYll5VEluRT9kOEhnO0xpO09sPk5rPU1qPExpO01qPE9sPlVyRFl2SFt4Sl16TF57TVx5S1FuQEdfOzZCNCs0LyMpJWdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2pjU2tjVmxiVmxiVm1jV21kVW1kVW1kVWxlVW1mVm5nV29nWm9pXW9oXm1qZWtvcm10eoOKkKWus8PM0dXf4ebu8fT8/vT9+vf9+fn+9/r/9v3/8v3/8fz/7v3+8Pv47/768f/57//67f/56f/y3+/gy93Ot8Gym6KXgXx1YmJfTlhaTF5kWG13bnyGfaasor6/t9rVz+7k4vzu7v/09P/09/709f74+Pv6+Pv9+Pz/+vj/9fT88ff98f//8f/56P/04//Mu71/cJxSRalTRrZUSbJDOsBJQcRIQMdGQMlGPslGPshFPcZDO8ZDO81HPsxHPsdHPrxDO60+NaA7M5g7NJE+Noo9NYY9NoM9NYE9NIA8M4A8MYE7MYE7MX46L346L346MX05MHw5MHw5MHs4MHs4MHo6MXo6MXg5Mnc4MXY3MHY3MHU2L3E2Lm04MGs5MGs5MGo4L2k5L2k5L2k5L2k5L2c3LWY3LWc3LWY3LWY3LWY3LWY3LWY3LWY1Lmo4MW07NGs6M2o5Mmo6MG0+NG9DOG1BNm9EO2U9M2Q+M3pWSoZkWnlXTWJMQT46MTM4MTQ5Mjc8NTY5MjE0LTI1LDk8MzM2LTI1LDI0KTAzKDEzKDI1KjQ2KzQ3LC83Ki04Ki83Ki83Ki83Ki83Ki83Ki83KjE5LjA4LTA4LS83LC83LC83LDA4LTA4Kzc/MDlCMTxFND1ENDtBMzg8LjI2Jy00JDI7KkpWQmNyW2l7YV51WFJtTEdlQUFhOkhkO0toPE5rP05rP0toPEpnOUxpPU5rPVRxRVh1SVp3S1t4TF16Tlp2TU5qQUNbOzI+NCowMCEnJ2hlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpkVmpkVmtlWWxkWWxjWm1lWm1lWG1mVmdgTmtmU25rWG9sXWhlXGZlYXNxcoGChoqPk5aeoauztsPIy9jd4Oru7/b3+fn7+vz+/f7+/P//+v3+9vv89Pr88fv98vz+8/n68vr68vn57fz66/785/n34OnlytXUtrq5m5iYfHF0WV9kTWRrWXJ9bISQgpGbkLS5ssvMx+Pi3vLu6/fz8vv39v35+Pz49//+/P7+/P7+/P3/+v3/+v3/+v3/+v3/+vr89///+v/79v/q5dinoKNgWJxFPrVOR79NQ8JGPsREOctGPc5JQM5LQctIQMdHPMZHOMNIOL1KOLNIOKZFNZpCNJFCNYtDNYZCN4RCNoNBNYI+M4I8MoQ6MYY5MYY5MYA6Mn46MXw5MXw5MXs4MHo3L3c3Lnc3Lnc3Lnc3Lnc4L3c4L3Y3LnU2LXE1K280LGw3L2k4MWk4MWg3MGg3MGc2L2c2L2c2L2Y1Lmc2L2k3MGk4MWk4MWc2L2Y1LmUzLGgzLWo1L204MGs5MGo6MGk7Lmo+MWtBM2dCMmpJOmRIOnZfT35rXIp4aox/b1JKPTc5LjQ6MDQ6MDM5LzM5LzM5LzI4LjI4LjE3LTE3LTM2LTA2LDI1LDA2LDE0Ky81Ky80LS41LS80LS80LS80LS80LS80LS80LTA1LjA1Li80LS4zLC4zLC80LTA1Li82LjE7MjM9MjZANTlDODlENjdCNDVAMDM+LTQ/LkRRPVhmT1trUVJiSEVYPEJVOUJXNkpkP0tlPktlPktlPkplPEplOk1oP09qP1VwR1l0S1x2T113UF13UldxTkhhQTtOOCYxKyYrLiQpLGhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmtkWmtkWmxjXG1kW21lWm1mVmlkUWpoU21qV2prW2dnX2xsbH5/hJCTmqivtbjCxNHW2eLn6vLz9fv8/v/+///+//79+//++v//+v/++fv89Pn68vj78vn88/j58fj58fj67ff66fn75fL12t/ixczPsLS3mJGWdmtxVVpiSmJrVnWAb4yYip2nnL/BvNPT0efn5fPz8ff39fv7+fz8+vv7+f7+/P7+/P7+/P7+/P7+/P7+/P7+/Pv//vX///X///7////7+v/t6vC/usJ+dZ9LQa9NQrlKP8JMQMVLPsNFObw9NL4/NsNFOcRGN8NKN71MOrNJOaZGNplDNJFDNo1FN4VDN4JCOIFBN4E+NYI8NIM6M4Y5MYQ5M386M306Mns7Mno6MXk5MHg4L3Y3LnY3LnY3LnY3LnU5L3U5L3Q4LnI2LHA2K200K2w3L2k4MWo4MWg3MGk3MGg3MGc2L2c2L2UzLGY0LWc1Lmg2L2o4MWo4MWs5Mms5Mms2MGw3MWs5MGs7MWw8MGo+MWpAMGlEMmdINmxRPmdSQXZnVIF1ZYuGc4aDcktMPDY5LjM5LzM5LzM5LzI4LjI4LjI4LjI4LjE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky80Li80Li80Li80Li80Li80Li80Li80LjA1Ly80Li80Li4zLS4zLS80Li80Li82Ly44MC86MjI+NDRANjZCNjZCNjZCNDVCMTZDMUNQPlBdSVJgSUlXQEFPNkJQN0ZWO0piQEtlQExmQUtlQEljPEhjOklkO0plPFNuRVhyS1x2UV13VFx1VVRtT0NcPzZJNSYxLScsMCUqLmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmtkWmtkWmxjXG1kW21lWm1mVm1oVWxqVW1qV2prW2trY3d3d5GSl6essr/GzNLc3uzx9Pf8//7///7////+///+//79+//++v//+v79+Pr78/b37/P26/P26/X37Pb47fb46vX45fX34e7u1Nvbv8nKq7CxkpOWeXV5YGtwWnR7aYiQgZ+nnK61rc3Pyt7e3O/v7fj49vv7+f7+/P7+/P39+/7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//vv///v///7+/v/7+f/69P/37f3RxtiekJVNP6VSRKlMPadAMbdHO89ZTc9VSrxANMREN8ZIOsRLQLlJPatDOJ0/NZdAN5NEPYlAOYVCOoFAOn8+OH4+NX09NH88NH09NHo7NHg8NHg8NHc7M3U6MnQ5MXQ5MXQ5MXI5MHI5MHI5MHI5MG85L244Lmw2LGs1K204MGo4MWw3MWo4MWs2MGk3MGk3MGg2L2c1Lmc1LmY1Lmc2L2g3MGk4MWs6M2w7NGw7NGo7M2k6MGg8MWs/MmpDNGlEMmZFMmdKOGxWQWpZR3VqVoZ/bZGOe4B/bURHNjU4LTM5LzI4LjI4LjE3LTE3LTE3LTE3LTE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky80Li80Li80Li80Li80Li80Li80Li80Li80Li80Li4zLS0yLC0yLC4zLS80Li41Lis1LSs2Li05Ly87MTI+MjVBNTZCNDdEMzhFMz9MOkVSPkNROjtJMjhGLT5MM0RUOUpfQEpiQExkQktjP0lhPUdgOUZfOEdgOVJrRFhwTF11U152VlpxVFBnSz1UOC5BLiYxLScsMCUqLmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmtkWmtkWmxjXG1kW21lWm1mVm5pVmxqVWxrV2xtXXBxaYCCgZ6hprm+xMTL0dvl5/X6/fv///z9//z9//78/fz7+f/+/P//+//++fz89PX27u/x5uvu4+ns4e7w4/Hz5fH04/H03/Lx3Orq0NjYvMfHq7KxlaGhiZGTfZCTgJyekaqtora7tMDFv9zc2unp5/b29Pv7+f39+////f///f39+/7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/vv7/f/+///+//fy7/zz7P/88//67f/05OzCsrmBcJVQQKJPP7hYSrdNP7VFOcBHPMFBNshFO8VJQb1GPq9AOaE7Npo9OJdCP40/O4dAPIFAPH1AO3o/OXlAOXlAOXlAOXY9NHY9NHY9NHU8M3M9M3I8MnI8MnI8Mm87MG87MG87MG46L2s5Lms5Lmo4LWk3Lm04Mm43Mm43Mmw3MWw3MWs2MGk3MGk3MGw6M2o5Mmg3MGY3L2Y3L2c4MGg5MWc7Mmo/NmY+NGU9MWY+MmhDM2lFNWZHM2NHMmNKNmhWQGlcSXNrVoWCb42Pem9yXzk9LDI4LDI4LjI4LjE3LTE3LTA2LDA2LDA2LDE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS0yLC0yLC0yLC0yLC4zLS00LSo0LCk0LCo2LCs3LS46MDE9MTRANDZCNDZDMjpHNTxJNzhFMTI/KzJAKThGLz5ONERYPEVdPUtgQUpiQEtgP0dfO0heOkZeOlNoR1hwTmB1Vl51WFtvVExjSTlNNCk6KCUuKyUqLiQpLWhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmtkWmtkWmxjXG1kW21lWm1mVmxnVGxqVW5tWW9wYHR1bYWHhqSnrL/Eys7V2+bw8vv///v///v8/v3+///+//79+////f//+/79+Pj48O/w6Ojq3+Ll2uDk1ufr3Orv2+3w2+zw2e7u1ujo0NrYv8zKscK9p7e1oLGunba0p8G+tcnIw9LTztnZ1+jo5vLy8Pr6+Pz8+v39+////f///fz8+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P/+/P/8///8///7+vz79/3/+f7/+P//9P/+7f/+7Pjfy8Wcip1iUJZKOqVMPLVRQbxMPr9AN8ZDO8VGQL9EP7E+O6Y6OJ46Opk+PZE9O4o/PIRAPX1APXhBPHRCO3JDO3JDO3E/NnM+NnM+NnI9NXI9NXI9NXA+NXA+NW4+NG09M2w8Mms7MWo7MWk6MGk6MGo6MG43MnA2MnA2Mm43Mm02MWw3MWk3MGk3MGw7NGs6M2g5MWU5MGU5MGU5MGY7MmQ8MmZCNmRCNmNDNGRENWRHNWRJNmJJM19JMl5MNmVWP2piTXJtV4SDb4SHclxhTTM6KDI4LDI4LjI4LjE3LTE3LTA2LDA2LDA2LDE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS0yLCwxKywxKywxKywxKy0yLC00LSw2Lis1LSo0LCo0Kyw2LS44LTA6LzI9LzI9LTVALzdCMTVBLTI+KjE9KTVBLThGLz1PN0BUOUZYPkhcQEpdP0lePUtePktgP1RnSVtvU2N2WmF1WlpsVEpdRzZHNCc1JiQtKiQpLCInKmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmtkWmtkWmxjXG1kW21lWmxmVmpnVGtqVWxuWW9yYXN2bYGFhJ+kqLi/x9bf5O33+fv///v///v8//7////+//79+///+///+vz89PT06uvt4uTm2d/j1d7i0+Po1Ofs1unt1urs1Ovr0+jmz9/axNPOuNPOuszGtsvDuNDJwdfSzuDb2Orm5fDv7fPy8Pn59/39+/39+/39+////f7+/Pz8+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P/9/P/7/P/4+f/+/f7//fn//fT/+PD/9ff/9vD35///7f/u282nlKRrWKJbR6pXRa1MO7lEOsBEPMBFPrxFP7RBPqo9OqI6OZo6O5U9PI0/PYU/PX5BPHdCPHNEPG9EO29EO3A/OHE/NnE/OHE/NnE/OHE/NnA/OG8/NW9AOG4/NW0+Nms8Mmk9NGg8MWg8M2w7NG84M3I3M3A2MnA2Mm43Mmw3MWo4MWk4MWg3MGc4MGU5MGU6MWQ8MmU/NGZANWRCNl9DNWFHOGNMOmRNO2NNOGBLNl5MNF1NNF5SOmJYP21oUnNzW4CDbnZ7ZUZPOjQ9KjM5LTM5LzI4LjI4LjE3LTE3LTE3LTE3LTE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS0yLCwxKywxKyswKiswKiwxKywxKywzLC82Lyw2Lis1LSo0LCo0Kys1LC03LC44LS04KjA7KzQ/LzVALzQ/LjM/KzQ/LjNALDdGMTlLM0BPOENVO0dXPEhbP01dQk1gRFVlSlxuVGR0WmByWlhnUkdYRTRCMSQyJSQtKiQpLCInKmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpkVmpkVmtkWmtkWmxjXG1kW2xmWmxmVmxpVmxrVmttWGxvXmxyaHqAfpWdoK63vtLb4Orz+Pv///n+//n6/v7////+//r59///+/79+Pn58fLy6Onr3uTm2OHl1uLn0+Tp0uft0+js0+fp0ejo0OflzuDbx9fQvtrTw9nRxt7Uy+bd2O7k4/Pp6vrx9P/5+/r59/7+/P///f39+/39+////f///fz8+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P/9/P/5+P/6+f/+/fz//ff//u7/+fH///L//ff/+vX56//97f/66PTOu6t3Yo9ROqpcSLJOPrhKPblJPrhJQLRHQK9EPqU9Opw6N5Y9OY8+Oog/OYBBOnlCO3REOnBGOnBFPHA/OHE/OHE+OnE/OHE+OnE/OHA/OnA/OHFCPHBBOW4/OWw9NWo9N2o+NWo9N249Nm84M3I3M3E3M3A2Mm43Mmw3MWo4MWk4MWQ4L2Q5MGQ8MmQ+M2RANGNBNWNBNV9DNVpFNF9OPGdWQmhXQ2NTPF5POFtPNVxSN11WPF1ZPm5sVXR2XnyBa2NtVTI+KDZCLjM7LjM5LzM5LzM5LzI4LjI4LjI4LjI4LjE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLCwxKywxKyswKiswKiswKiswKiwxKysyKy00LSs1LSo0LCo0LCs1LCs1LCw2LS03LCw2Ky86LDI9LzZBMTdCMjdCMTVAMDQ/LjI/LTRDLjpHMz1MNUFPOERUOkpYP0xcQlRiSVxrVGNwXF5tWlViUURSQzI+MCMvJScwLSYsLCQqKmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpkVmpkVmtkWmtkWmxjXG1kW2xmWmxmVm9sWW1sV2psV2drWmdtY3J7eI6YmqixuMrT2OPs8fj9//f8//r7//7////+//r59f//+v399fj47vHx5enr3ebp2OXp2Ofs1ubs0unt0urt0ujozujmz+jjz+HayNjQw9jOxN3SzOne2vjt6//09v/1+f/1+//5/P/9/v///f///f7+/P7+/P///f///f39+/7+/P7+/P7+/P7+/P7+/P7+/P7+/P/++v/9+//9+/38+vn9/Pj///X///P//+39+vP/+/z/+v//9P/25v/z3//jzdetlalvWahXRK5RQKxPPq9PQbFPQq1LQKRDPJk8NZU+N48/NolAOYFBN3tCN3VENnFFOHFFOnA/OHE+OnM+OnE+OnE+OnE+OnI/O3FAO3NCPXFCPHA/Om0+OGw9N2s+OG0+OG8+OW84M3E3M284M204Mm04Mmo5Mmg5MWY6MWY7MmQ+M2RANGJCNWBDNV1BM1xAMldCMVRHNFxUP2ZeR2pfSWJYP1pTOVpTN1xXOltXPFhXO2ttVXN3XnV9ZlVhSSYyHDhEMDM7LjQ6MDQ6MDM5LzM5LzM5LzI4LjI4LjE3LTE3LTE3LTA2LDA2LDA2LC81Ky81Ky0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLCwxKyswKiswKiovKSovKSswKiswKiwxKysyKykzKyo0LCs1LSw2LSw2LS03Li03Li03Li85LjI8MTZBMzlENjlENDdCNDZBMTA7KzI/LTZDMTlGMjxJNUFPOEZUPUpYP1JgSVtoVGFuXF1qWVFdT0JOQDA8MCIsIysxLyguLiYsLGlmV2hlVmhlVmhlVmhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2xlW2xlW21kXW5lXG1nW21nV3FuW2ttV2tuWWtyYGtzaHB5doeRk5+qsLvEydDZ3urv8/b7/vz9//7////+//79+f//+v7+9vr68Pf36/T26PH04+zw3+nu2PH12u3y1Ovu0+zs1Ojm0eHcyd3VyN7Uy+HUzuja2fLk5Prr7v7y9P/3+//5///8///9/v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7/+v/++v/++v7+/P3//vv///r///r///v///7//////f/79f/78f/87P/75f/z2//q0bqCaaZiS5dPOZ9UP6haRqNSQZ5LO6BNP448MIs9MIY+Mn89L3g9L3Q/L3NCM3VFN3I9N3M+OnQ9OnQ/O3VAPHVAPHQ/O3E+OnNAPHJBPHI/O3FAO3A/Om9AOm8+OW8+OWs5Mm04Mmw6M2w7NGw7NGg8M2c8M2Q+M2M/M14+MWRHOWNHOVQ9LU45KE04J0AxHlhSPFBON0tJME9LMl1ZPmllSmVhRFZVN1hYPF5hRHB0W3qAZmRsVT5KMi05IzI+KjQ8LzU7MTU7MTQ6MDQ6MDM5LzM5LzM5LzM5LzM5LzM5LzI4LjI4LjE3LTE3LTA2LDE2MDE2MDA1LzA1LzA1Ly80Li80Li80LiwxKywxKywxKywxKywxKywxKywxKyswKi41Li41Li00LS00LS00LS00LS41Li82LisyKi00LDE4MDU9MjlBNj1FOEBIPT9KPDdCMjZBMDM+LTE9KTM/KzlFL0JOOElVP09bR1djT11oV1plVUxXSTxGOy85MCkzKykvKyguLCctK2hlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2xlW2xlW21kXW5lXG1nW2toV29uWmpsVmtuWWxzYWp0aXF8eImUlqOutL7HzNLb4Ovw9Pf8//3+//7////9/v79+f//+v7+9Pv77/j56/T35vH04ezx3ejt1urv0ebry+TnyubmzuPgzd/Zy97Uy9/UzufZ2O3f3/bn6vvv8//0+P/3+//6/v/8///+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3/+v3/+v3//P3+//79///8///8///7///8///8///7+f/89f/+8f//7f/75f/y2f/r0eCxl6d1XJJcRJZaQppZQ5pWQ5pTQY5HNYtGNohFNINEM3xDMndCMHNAL28+L3VAOHQ/OXU+O3VAOnQ/O3A+N3A9OXRCO3E+OnA/OHA/Om8+N28+OW0+Nm49OG0+Nms8NGw9NW0+Nms/Nmo/NmdBNmVBNWJCNWRHOVtBMl5HN19KOU8+LEY3JEc4JT83IkxMNEhMM0RHLENGK01NMVtbP2JhQ2BhQlpaPmRnSnN3XnN5X1hgSTpELC87JTdDLzY+MTc9MzY8MjY8MjY8MjU7MTU7MTU7MTU7MTU7MTU7MTQ6MDQ6MDQ6MDM5LzM5LzI3MTI3MTI3MTE2MDE2MDE2MDA1LzA1Ly4zLS4zLS0yLC0yLCwxKywxKyswKiswKioxKioxKikwKSkwKSoxKioxKisyKywzLC41Li41LS41LTA3LzQ7MzpCNz9GPkJKPztGODpFNTdCMTQ/LjM/KzZCLjxIMkBMNkxYRFNfS1lkVFdiUkxWSz1HPDE7Mis1LSsxLSowLCkvLWhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV21kW21kW21kXW5lXG1nW2toV25tWWltVmpvWWt0YWl1aXF9eYqYmaWyuL/K0NTd4u3y9vf8//z9//3//v/9/v79+f//9/398/r67vj56/T35PDz3unu2OXr0eLnyd7hwt3dwd7ext7byN3Xy+DVz+TZ1+7i5PPn6/ru8v/0+P/3+//5/P/6/f/9/f/+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//Pr//Pr//Pv//v7+/v/8///6///5///4///5///6///6+v/9+P//9v//8/3/7//65v/z3f/44P/s1eO/p6yCaodZQoZSPJJbRpddSY1TP39GMnU+KXI+KXRBLHREMHZFNnE/NG48M3E8NnRCOXRCO28/NXFAOXhIPm49Nm0+NG0+Nm0+NGw9NWo+M2w9NWo+NWc/NWdBNmhCN2dDN2VDN2NDNmFENl5ENWJLO1VCMVpJN2BTQFJHM0Q8J0U9KEZBK0JGLUJILkFFKjxAJT9CJUxPMl9gQWlqS2FhRW5xVHZ6YWdtU0pPOTU9JjU9KD1GMzk/Mzg+NDg+NDg+NDc9Mzc9Mzc9Mzc9Mzg+NDg+NDg+NDc9Mzc9Mzc9MzY8MjY8MjU6NDU6NDQ5MzQ5MzM4MjM4MjM4MjM4MjA1LzA1Ly80Li4zLS0yLCwxKyswKiswKikuKikuKikuKikuKikuKiovKyswLCwxLTE2Mi80LiwxKywxKzA1LzY7ND1CPEFIQEBLPT5LOjxJNzhFMzRBLTI/KzNBKjVDLERRPUtYRFFeTVFeTUhUSDxIPDI+NC44Ly00LS00LSwyLmdkVWdkVWhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV21kW21kW21kXW1mXG1nW2ppV2ttWGltVmpvWWpzYGh0aG59eIiYmKazub/K0NPc4+vw9vb7//z9//3//v///f/++v7+9v398fr77fj56fT35O/z3Ofs1ePnztzfwNfau9bWvNnXwt3Xx97XzeXb2ezg4Pjs8Pvw9v/1+//5/v/6/f/7+//7+//9/P/+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//Pr//vj//vv//v7+/v/8/v/6///5///4/v/6/f/5/P/5+f/9+v//+v//+Pv/9fz+8P//7//76//x3//w3f/v2vHSvbSQenlTPnRKNHVIM3ZJNHpNOH5PO3lMN25BLmU3J3tNQHRFO3FCOHNEOm9DOGc7MGQ4LWc9MWk/M2k/M2k/M2c/M2c/M2Y+MmY+MmU/MmNBNWJCNWBDNWBENl9DNVtENFpFNFdEM1hJNk9CL1xUP29pU2NeSE1LNElHMElLMz5EKj9ILUBGKjxCJjxBI0VKLFhZOmRlRm1tUXh4XHR2XltfRkFELzY7JTo/Kz5CMTk/Mzk/NTk/NTg+NDg+NDg+NDc9Mzc9Mzk/NTk/NTg+NDg+NDg+NDg+NDg+NDg+NDc8Njc8Njc8NjY7NTY7NTY7NTU6NDU6NDM4MjM4MjI3MTA1Ly80Li0yLCwxKywxKyswLCswLCswLCswLCswLCwxLS0yLi0yLjA1MS4zLyswLCswKi0yLjM4Mjg9OTtCOkFMPkBNO0BNOz1KNjhFMTRBLTE/KDE/KD1KNkJPO0lWREpXRkRQQjtHOzI+NC46MCw2Li41Li00LWdkVWdkVWdkVWhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2xkV21kW21kW21kXW1mXG1nW2ppV2xuWWluV2lxWmdzX2RyZWp5dIWVlaOyt73IztLb4urv9fT5/fv8//3//v///f//+v//+P//8/7/8fz96/f65fH13ujt1uPnzNncv9XVudLQudTRvtrUyODZ0erg3/Tp7f7z+f/3/P/7///9///+///+/P/++v/++v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//vr///r///v///7+/v/9/v/8/P/7/P/7+v/6+P/59//6+P/8+f//+///+/3/+v3++fn07v/+9v/99P/88//77v/35/vm1enSwM+0obaahZR1YXdWQ2xJNm1INnJNPXVQQG1GN2pDNGdCMmtGNm5JOW5KOm9LO3BMPGVBMWNCMWNCMWNCMWNCMWNCMWJDMWBDM11GNlxHNl1IN1pHNlpHNldINVRHNFJHM1BIM09JM2ZkTX5+ZnJyWlZYQEpMNEdNMzxFKjxGKz9IK0FHK0FGKENIKk1OL1RVNnh3W3t6Xm5uVlVVPUNCLj9BLD9ALjs+LTs+Mzk/NTk/NTg+NDg+NDc9Mzc9Mzc9Mzg+NDg+NDg+NDg+NDg+NDg+NDg+NDg+NDk+ODk+ODk+ODk+ODg9Nzg9Nzc8Njc8NjY7NTY7NTU6NDM4MjI3MTA1Ly80Li80Li0yLi0yLiwxLSwxLSwxLSwxLS0yLi0yLi0xMCwwLywwLy0yLi4yMTE2MjM3NjQ7NDtHOT1MOUBPPEBPOjxLNjdGLzRDLDJBKjZFLjpJNEBPPEJQPz9NPjhGNzE/Mi05LSw2LS00LCwzK2ZjVGdkVWdkVWhlVmhlVmlmV2pnWGpnWGlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2xkV2xkV21kW21kW21kXW1mXG1nW2ppV2ttWGluV2lxWmdzX2JwY2d4coKUlKOyt8DL0dTd5Ovw9vX6/vv8//3//v///f//+v//+P//9P//8///7/r96PP34Onv1ePnzNfavdHRtc3LtM7LutbPxd7X0ezi4/fu8//2/v/6///9///+/////f7/+v7/+f7/+v7/+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/v3+//3+//3+//3//v3//P7/+v7/+f//9/398/399f79+P79+f/+/P7+/v/9///+//75///8///7/Pv28//48v/99P/+8f/+7f/66f/z4Pfk0+fSv9S6qbqfjp+DdY9yZHxdS31eTHRVQ2JFM1g7KVk8Kls+LFg9KmBFMmBFMmBFMmBHM2BHM2BHM2BHM15JNFxLN1xNOlxNOlpNOlhNOVVNOFNNN1FMNk5MNVFROWpsVHyAZ21xWFNZP0ZMMj5HLDxGKzxGKz9IK0RKLkVKLERHKkhJKkxNLnl4XHRzV2ZkTVRSO0xJNktKNkZFMzw9LTw/NDpANjk/NTk/NTg+NDg+NDg+NDg+NDc9Mzc9Mzg+NDg+NDg+NDk/NTk/NTk/NTtAOjo/OTo/OTo/OTk+ODk+ODk+ODk+ODk+ODg9Nzc8NjY7NTU6NDQ5MzM4MjM4Mi80MC4zLy0yLiwxLSswLCswLCswLCswLCsvLiwwLy0xMC4yMS8zMi8zMi8zMi41LjRAMjdGMz1MN0BPOj9ONzxLNDlIMThHMDVELThHMDxLNj5NOjxKOTdFNjE/Mi05LSs1LC00LCwzK2ZjVGZjVGdkVWhlVmlmV2lmV2pnWGpnWGlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2xkV2xkV21kW21kW21kXW1mXG1nW2ppV2psV2htVmhyWmZzX2NxZGh5c4WXl6W3u8fS2Nrj6vD1+/j9//z9//3//v///f/++f//9///8///8P3+7Pj75vD03eTq0N7ix9XVuc7Ms8nEsMrEtNDJv9rSz+ng4/bt8v/3///6///9///+/////f3/+vz/+Pz/+P3/+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/v/8///8//79//3//vr/+vj/+fj/9fj/8/j/8/j/9fz/+P3/+v/9/v/8///8///7//33///6///8///9///+//79+/v78/r47P//8f//7///7//+7f/97f/25//u4v3q2/rj0f/m0OPKtKWPeHReR2VPOGNNNlxIMF5KMlxKMlxKMl1LM11LM15MNF5MNFxNNllOOFhQO1hQO1ZQOlVPOVNOOFBON05ONk1PN1BUO2BmTGZvVFVeQ0VPNEFLMDxGKz9JLj9JLkNML0hOMkhNL0dKLU9QMVlYOnFtUmtnTGFcRltWQFlUQVRRPk1KOUJDMz5BNjtBNztBNztBNzpANjpANjpANjk/NTg+NDg+NDg+NDk/NTk/NTpANjpANjpANjtAOjtAOjtAOjo/OTo/OTk+ODk+ODk+ODo/OTo/OTo/OTk+ODg9Nzg9Nzg9Nzc8NjQ5NTM4NDE2Mi80MC0yLiwxLSwwLysvLiwwLy0xMC0xMC4yMS4yMy4yMy0xMiwyLis5Ki9ALTZIMjxOOD1PNzxONjpMMjpMMjVHLzdJMTpMNjxNOjtMOjZHNzBAMy07Liw2LS00LCwzK2NkVGNkUmRlVWdmVGhmV2lnWGlnWGpoWWhmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2tlV21lWmxlW21kXW1mXGtnW2ppV2lrVmhtV2lzW2d0YGRxZ2t8dombnay7wM3Y3uDn7fT5//r///v///3//P7/+v7+9vr68Pr77fr76/j55/T24evt19/jytncwdPRuMzHscW+rMa+sczDvNbOy+bd4PTq8v73///6///+///+//7+/v3/+vz/+vz/+v3//P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P/+/P/+/P/+/P/9/v/8///8///9//3//vv//Pj/+ff/9/f/9fj/9vn/9vz/+P//+//+/f/8///7///6///6///7///8///9//79//v9/Pz++/7/+vn68vv78f368f767//57P/77P/97//97P/w2//74uzcw56OdWBQN1JCKVhIL1hILltNM1tNM1pONFpONFtPNVtPNVxQNltROFVPN1RPOVRPOVFPOFBON05ONktNNUlNNEpONUxSOFNcQVBZPkBJLDxFKEFMLj9KLERNMEVOMUpQNE1SNEtOMUxMMFlZPWtqTmhkSWJeRV5aQV9aRGBbR1pVQVFPOktKOEFCNEBCNUBCNT5BNj5BNj5BNj1ANz1ANzk/NTk/NTk/NTpANjpANjpCNzpCNztDODtAOTtAOTtAOjo/ODo/OTo/ODk+ODk+NztAOjtAOTtAOjtAOTo/OTo/ODo/OTo/OTg/ODc9OTQ7NDM4MjE2MC80Li4zLy4zLy4yMS4yMS0yLiwyLiwzLCwzKywzKyk2JSQ2Hio+IjJGKzhMMztPNjxONjtNNTtNNThKMjlLMztNNT1PNzxOODdINTFCMC48LS03Li41LS00LF1lUF5mT19nUmJnUWRpVWZpVmdqV2lqWGZnVWhnVWhlVmhlVmpkVmtlV2xmWmxmWGxmWGtoWW1nW2tnXG1mXmpmXWllWmdlVmdoVmZrVWVuWWJvXWRxaHSEgZaorLjHztLb4uTp7/L3+/f8//j8+/z++fz/+Pz+8/f36/n66vj35fLx3+7t2evq1uHfytfSvtfPvMvArr20pb2zqcK3sczCwdvS1+rg6Prz+/z2//77///9//79//z9//z+/fz+/f7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P/+/P/+/P79+f79+f/8+f/9+v/++//++//+///9/v/8/f/9/v////7//f3//Pv9+P//+/z99//9+P/++v/9+P/69v/39P/5+f/6///8///9///+//////7+/P3//vz+/f/////////+/P/++f/+9f/+8P/96v/95vr03P/64Ofgxo+IblVOMldNMlRLLlNKK1dOMVdOMVVOMVVOMVRPMlRPMlRONFNPNFFNNFJONVFPNlBQNk1PN0tPNkhNNkdMNUpQNkZPNEFKLT1GKUBHKERLKkZNK0VMKlBWNFBTNEtOL0lML1RUOGJiRmNjSVpaQFtZQFxaQV1bQl1bQltZQFhWPVVTOlNROEhGMUdEMUVCMUJAMUE/Mj4+Mj8/NT5ANTs+NTk/NTk/NTlBNjlBNDhDNThDNTlDODpCNzlBNjlAODhANTg/NzlBNjlAODpCNzpBOTpCNzpBOTpCNztCOjxEOT1EPD5FPThCOjhCOjhCOThANTY+MTQ8LzM5LzI3MS40MC81MTA3MC44LS47KTBAJjZGKTdNJztWKzpXKztVMDtUNDtSOD1QPD5PPD5PPDpMNkBSOEVXPUZZPURYPUBUOzVIMis8Kiw2Ky00LCsyKlpmTltnT15oUF9pUWJqU2NrVGdsWGhrWGhpV2doVmlmV2lmV2tlV2xmWG1lWm1nWW1nWWtoWWtnW2tnXGplX2pmXWhmWmZnV2hpV2dsVmZvXGVyYWp3bnqKiZyrsrrI0dDZ4OPo7PL3+/j+/vn++vr/+Pv+9fn97/j56/f46PX04u3s2unm0+Xiz9zXxNLLucq/rcG0pLmtobyvpsG2ssvBwNvQ1ubf5vvz/v33//77///9//79//38//z9//z9//7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P/+/P/+/P/9+v/8+f/8+f/9+v/9+f/++v/+/f/9/P/8/f/9/v/+///+///9/v37/P/+/f/++//8+v/48/jt5/Ll3fbo3/vw6v/6/f/8///9/////f///f7+/P3//vz9//79//79///9///+/P/99///8P/+6P//5Pr23f374uTgx4uHbFJNMFNOMVJLLlFLK1VPL1VPL1RPMVRPMVNPMlNPMlFQNFFPNlFNMlBPM1BONU5RNk1PN0pQNkhNNkVNNUhRNkZPNEJLLj9IKUNIKEdNK0pQLEtRLU9TMFBUMVZaOV5hQl9iQ1pdQFZWPFVVPVZWPldVPlhWPVlXPllXPlhXO1dWOlhUOVFLM1BKNExHNElEMURBMkJAM0E/Mz5ANTw9NTk/NTk/NTlBNjdCNDhDNTdDNTdDNTpCNzpCNzlBNjhANThANTlBNjpCNzpCNzpCNzpCNzpCNzpCNztDODxEOT1FOjxGOz1HPzxIPjxGOztGNjxENTpCMzk/Mzg9Njc+NzY9NjM9NTI+MDRDLDlMLEJZL0dhMVFvO01tO0xpPUZhPkJZPzxSPTxNPTpLOT1POURWPEteQk5hQ0xgREhcQTpRNzFEMCs1KisyKikwKFpmTltnT1xoUGBqUmJqU2RsVWdsWGlsWWlqWGlqWGtoWWtoWW1nWW1nWW9nXG5oWm1nWWtoWWtnW2pmW2plX2pmXWhmWmZnV2hpV2VqVGRtWmd0Y298c3+Pjp2ss7bEzc3W3d7m6fH2+vj+/vr+/fn++Pj78vT46vP05vDx4erp1+HgztzZxtfUwdDLuMfArr+zo72woLywpMO2rsvAvtXLzOPY3uvk6/z0//33//77///9//79//38//z9//3//v7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P/+/P/+/P/9+v/9+v/8+f/8+f/8+P/8+P/9/P/8+//7/P/8/f/+///+///9/v78/f/+/f/++//9+/zz7urf2eLVzevd1Pfs5v/6/f/8///9/////f///f7+/P3//vz9//79//79///+/////f/+9f/+7f/95//+4/v33v784+PfxomFalBLLlJNMFFKLVFKLVVPL1VPL1VQMlVQMlRQM1NPMlFQNFBPM1FNMk9OMlBONU1QNU1PN0pQNklON0dPN0hRNkZPNENML0NMLUdMLEtRL09VMVNZNVFZMlhgOWpwTHl/XXF2VlleQExPNE1QNVFROVFROVJQOVNROFRSOVZUO1lVPFpWPVhSPFZQOlJNOk5JNkhFNkRCNUNBNT9BNjw9NTk/NTpANjlBNjdCNDhDNTdDNTdDNTpCNzpCNzlBNjlBNjlBNjlBNjpCNzpCNzpCNzpCNzpCNzpCNztDODxEOT5GOzxGOz9JQT5KQD9JPj9KOkBIOT5GNz5EOD1COz5FPjxDPDdBOTVBMzlIMUJVNVBnPVhyQmB+Slx8Slh1SU5pRkRbQTlPOjZHNzRFMzxOOEVXPU5hRVNmSFNnS05iR0BXPTZJNS85Li82Li00LFpmTltnT1xoUF5qUmJsVGVtVmhtWWluWmtsWmtsWmxqW2xpWm5oWm5oWnBoXW9pW2xpWmtoWWtnW2pmW2lkXmllXGhmWmdoWGZnVWJnUWFqV2VyYW98c36OjZalrKu5wsfQ19rh5+7z9/b8/Pj8+/X69PP27e7y5Onq3OPk1NzbydPSwM7LuMnGs8O+q722pMO3p8e5rM3BtdbJwd/U0uje3/Po7vjx+P31//74///8///8//38//39//z+/f3//v7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P79+//+/P/9+v/9+v/9+v/8+f/79//79//9/P/8+/76+//7/P/9/v/+///9/v78/f/8+//++//9+/307+3i3ObZ0fDi2fzx6//6/f/8///9/v///f//+/7/+v3//vz9//79//79///+/////f/+9f/+7f/85v/84/754//+5+TfyYqGbVBKMFJNMFNML1NML1VPL1VPL1VQMlZRM1RQM1NPMlBPM09OMlBMMU9OMk9NNExPNE1PN0tRN0pPOEhQOEpTOEdQNUdQM0lSM05TM1BWNFddOVxkPWdySHSBVYeSapCadYeObG51VFphQlNXPE1PN05ONk1NNU5MNU9NNlJQOVdSPFlUPlpUPlhSPFRPPFFMOUtIOUdFOEVDN0FDOD0+NjpANjpANjlBNjdCNDdCNDZCNDZCNDtDODpCNzpCNzlBNjlBNjpCNzpCNztDODtDODpCNzpCNztDODxEOT1FOj5GOz1HPD1HPz1JPz5IPT5JOT9HOD5GNz5EOD1COz1EPTtCOzZAODVBMzpJMkRXN1JpP1t1RVx6Rlh4RlRxRUlkQT5VOzJIMy9AMC4/LTZIMkBSOExfQ1JlR1NnS09jSEBXPTZJNTE7MDA3Ly00LFlnTlpoT1xoUF5qUmJsVGVtVmluWmpvW21uXGxtW21rXG1qW29pW29pW29pXW9pW2xpWmtoWWpmWmllWmlkXmllXGlnW2doWGdoVmNoUmFqV2VyYW98c3uLipCfpqKwucHL1NTd5Onx9PL6/PT6+vH28u3w5+js3uLj1drby9LRv8zJuMnEscO+q7+4pryzosq+rtPFuNzQxObZ0e3i4Pbs7f/0+v/5///3///6///8///8//38//z8/vz+/f7///7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P79+/79+//9+v/9+v/9+v/8+f/69v759f/9/P/7+v35+v76+/78/f/9/v/+///9/v/8+//9+v/8+v/48/fs5vLl3fjq4f/07v/6/f/8///9/v///f//+/7/+v3//vz9//38//79///+/////f/+9f/97P/75f764f/85v//6efizIyIb1JMMlRPMlRNMFVOMVVPL1VPL1ZRM1ZRM1VRNFNPMk9OMk5NMVBMMU5NMU5MM0tOM0xONktRN0xROkpSOkxVOklSN0pTNk9YOVRZOVVbOV1jP2ZuR4KSY5Kmc5+wg5uqf5SgeoiUcHJ7XFxiRkxQN0xONkxLNkxKNUxKNVFMOFRNOlZQOldRO1ZQOlNOO1FMOU1KO0lHOkdFOUNFOj0+NjpANjpANjlBNjdCNDdCNDZCNDZCNDtDODtDODpCNzpCNzpCNzpCNztDODtDODtDODtDODtDODtDODxEOT1FOj5GOz1HPD1HPzxIPj1HPD1IOD9HOD1FNj1DNz1COzpBOjlAOTZAODVBMzlIMUJVNU5lO1ZwQFZ0QFNzQVBtQUVgPTlQNi1DLis8LCs8KjFDLTxONEhbP1BjRVJmSk5iR0BXPTVINCw2KysyKicuJgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdGVzdG9yaWcxMi5qcGcgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RvcmlnMTIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3Rlc3RvcmlnMTIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdmdsXzU2NzRfMDA5OC5ibXAgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3ZnbF81Njc0XzAwOTguYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGVhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90ZXN0aW1hZ2VzL3ZnbF81Njc0XzAwOTguYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdmdsXzY0MzRfMDAxOGEuYm1wIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy92Z2xfNjQzNF8wMDE4YS5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlNzdiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdmdsXzY0MzRfMDAxOGEuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdmdsXzY1NDhfMDAyNmEuYm1wIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGVzdGltYWdlcy92Z2xfNjU0OF8wMDI2YS5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMzViNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3Rlc3RpbWFnZXMvdmdsXzY1NDhfMDAyNmEuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqYmVuY2guYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWIwZWEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpiZW5jaC5jCkBAIC0wLDAgKzEsMTAxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDA5LTIwMTggRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y2RqcGVnLmg+CisjaW5jbHVkZSAiLi90anV0aWwuaCIKKyNpbmNsdWRlICIuL3R1cmJvanBlZy5oIgorCisKKyNkZWZpbmUgX3Rocm93KG9wLCBlcnIpIHsgXAorICBwcmludGYoIkVSUk9SIGluIGxpbmUgJWQgd2hpbGUgJXM6XG4lc1xuIiwgX19MSU5FX18sIG9wLCBlcnIpOyBcCisgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OyBcCit9CisjZGVmaW5lIF90aHJvd3VuaXgobSkgIF90aHJvdyhtLCBzdHJlcnJvcihlcnJubykpCisKK2NoYXIgdGpFcnJvclN0cltKTVNHX0xFTkdUSF9NQVhdID0gIlwwIiwgdGpFcnJvck1zZ1tKTVNHX0xFTkdUSF9NQVhdID0gIlwwIjsKK2ludCB0akVycm9yTGluZSA9IC0xLCB0akVycm9yQ29kZSA9IC0xOworCisjZGVmaW5lIF90aHJvd3RqZyhtKSB7IFwKKyAgcHJpbnRmKCJFUlJPUiBpbiBsaW5lICVkIHdoaWxlICVzOlxuJXNcbiIsIF9fTElORV9fLCBtLCBcCisgICAgICAgICB0akdldEVycm9yU3RyMihOVUxMKSk7IFwKKyAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7IFwKK30KKworI2RlZmluZSBfdGhyb3d0aihtKSB7IFwKKyAgaW50IF90akVycm9yQ29kZSA9IHRqR2V0RXJyb3JDb2RlKGhhbmRsZSk7IFwKKyAgY2hhciAqX3RqRXJyb3JTdHIgPSB0akdldEVycm9yU3RyMihoYW5kbGUpOyBcCisgIFwKKyAgaWYgKCEoZmxhZ3MgJiBUSkZMQUdfU1RPUE9OV0FSTklORykgJiYgX3RqRXJyb3JDb2RlID09IFRKRVJSX1dBUk5JTkcpIHsgXAorICAgIGlmIChzdHJuY21wKHRqRXJyb3JTdHIsIF90akVycm9yU3RyLCBKTVNHX0xFTkdUSF9NQVgpIHx8IFwKKyAgICAgICAgc3RybmNtcCh0akVycm9yTXNnLCBtLCBKTVNHX0xFTkdUSF9NQVgpIHx8IFwKKyAgICAgICAgdGpFcnJvckNvZGUgIT0gX3RqRXJyb3JDb2RlIHx8IHRqRXJyb3JMaW5lICE9IF9fTElORV9fKSB7IFwKKyAgICAgIHN0cm5jcHkodGpFcnJvclN0ciwgX3RqRXJyb3JTdHIsIEpNU0dfTEVOR1RIX01BWCk7IFwKKyAgICAgIHN0cm5jcHkodGpFcnJvck1zZywgbSwgSk1TR19MRU5HVEhfTUFYKTsgXAorICAgICAgdGpFcnJvckNvZGUgPSBfdGpFcnJvckNvZGU7IFwKKyAgICAgIHRqRXJyb3JMaW5lID0gX19MSU5FX187IFwKKyAgICAgIHByaW50ZigiV0FSTklORyBpbiBsaW5lICVkIHdoaWxlICVzOlxuJXNcbiIsIF9fTElORV9fLCBtLCBfdGpFcnJvclN0cik7IFwKKyAgICB9IFwKKyAgfSBlbHNlIHsgXAorICAgIHByaW50ZigiJXMgaW4gbGluZSAlZCB3aGlsZSAlczpcbiVzXG4iLCBcCisgICAgICAgICAgIF90akVycm9yQ29kZSA9PSBUSkVSUl9XQVJOSU5HID8gIldBUk5JTkciIDogIkVSUk9SIiwgX19MSU5FX18sIG0sIFwKKyAgICAgICAgICAgX3RqRXJyb3JTdHIpOyBcCisgICAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7IFwKKyAgfSBcCit9CisKK2ludCBmbGFncyA9IFRKRkxBR19OT1JFQUxMT0MsIGNvbXBPbmx5ID0gMCwgZGVjb21wT25seSA9IDAsIGRvWVVWID0gMCwKKyAgcXVpZXQgPSAwLCBkb1RpbGUgPSAwLCBwZiA9IFRKUEZfQkdSLCB5dXZQYWQgPSAxLCBkb1dyaXRlID0gMTsKK2NoYXIgKmV4dCA9ICJwcG0iOworY29uc3QgY2hhciAqcGl4Rm9ybWF0U3RyW1RKX05VTVBGXSA9IHsKKyAgIlJHQiIsICJCR1IiLCAiUkdCWCIsICJCR1JYIiwgIlhCR1IiLCAiWFJHQiIsICJHUkFZIiwgIiIsICIiLCAiIiwgIiIsICJDTVlLIgorfTsKK2NvbnN0IGNoYXIgKnN1Yk5hbWVMb25nW1RKX05VTVNBTVBdID0geworICAiNDo0OjQiLCAiNDoyOjIiLCAiNDoyOjAiLCAiR1JBWSIsICI0OjQ6MCIsICI0OjE6MSIKK307Citjb25zdCBjaGFyICpjc05hbWVbVEpfTlVNQ1NdID0geworICAiUkdCIiwgIllDYkNyIiwgIkdSQVkiLCAiQ01ZSyIsICJZQ0NLIgorfTsKK2NvbnN0IGNoYXIgKnN1Yk5hbWVbVEpfTlVNU0FNUF0gPSB7CisgICI0NDQiLCAiNDIyIiwgIjQyMCIsICJHUkFZIiwgIjQ0MCIsICI0MTEiCit9OwordGpzY2FsaW5nZmFjdG9yICpzY2FsaW5nRmFjdG9ycyA9IE5VTEwsIHNmID0geyAxLCAxIH07CitpbnQgbnNmID0gMCwgeGZvcm1PcCA9IFRKWE9QX05PTkUsIHhmb3JtT3B0ID0gMDsKK2ludCAoKmN1c3RvbUZpbHRlcikgKHNob3J0ICosIHRqcmVnaW9uLCB0anJlZ2lvbiwgaW50LCBpbnQsIHRqdHJhbnNmb3JtICopOworZG91YmxlIGJlbmNoVGltZSA9IDUuMCwgd2FybXVwID0gMS4wOworCisKK2NoYXIgKmZvcm1hdE5hbWUoaW50IHN1YnNhbXAsIGludCBjcywgY2hhciAqYnVmKQoreworICBpZiAoY3MgPT0gVEpDU19ZQ2JDcikKKyAgICByZXR1cm4gKGNoYXIgKilzdWJOYW1lTG9uZ1tzdWJzYW1wXTsKKyAgZWxzZSBpZiAoY3MgPT0gVEpDU19ZQ0NLIHx8IGNzID09IFRKQ1NfQ01ZSykgeworICAgIHNucHJpbnRmKGJ1ZiwgODAsICIlcyAlcyIsIGNzTmFtZVtjc10sIHN1Yk5hbWVMb25nW3N1YnNhbXBdKTsKKyAgICByZXR1cm4gYnVmOworICB9IGVsc2UKKyAgICByZXR1cm4gKGNoYXIgKiljc05hbWVbY3NdOworfQorCisKK2NoYXIgKnNpZ2ZpZyhkb3VibGUgdmFsLCBpbnQgZmlncywgY2hhciAqYnVmLCBpbnQgbGVuKQoreworICBjaGFyIGZvcm1hdFs4MF07CisgIGludCBkaWdpdHNBZnRlckRlY2ltYWwgPSBmaWdzIC0gKGludCljZWlsKGxvZzEwKGZhYnModmFsKSkpOworCisgIGlmIChkaWdpdHNBZnRlckRlY2ltYWwgPCAxKQorICAgIHNucHJpbnRmKGZvcm1hdCwgODAsICIlJS4wZiIpOworICBlbHNlCisgICAgc25wcmludGYoZm9ybWF0LCA4MCwgIiUlLiVkZiIsIGRpZ2l0c0FmdGVyRGVjaW1hbCk7CisgIHNucHJpbnRmKGJ1ZiwgbGVuLCBmb3JtYXQsIHZhbCk7CisgIHJldHVybiBidWY7Cit9CisKKworLyogQ3VzdG9tIERDVCBmaWx0ZXIgd2hpY2ggcHJvZHVjZXMgYSBuZWdhdGl2ZSBvZiB0aGUgaW1hZ2UgKi8KK2ludCBkdW1teURDVEZpbHRlcihzaG9ydCAqY29lZmZzLCB0anJlZ2lvbiBhcnJheVJlZ2lvbiwgdGpyZWdpb24gcGxhbmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgaW50IGNvbXBvbmVudEluZGV4LCBpbnQgdHJhbnNmb3JtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgdGp0cmFuc2Zvcm0gKnRyYW5zZm9ybSkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGFycmF5UmVnaW9uLncgKiBhcnJheVJlZ2lvbi5oOyBpKyspCisgICAgY29lZmZzW2ldID0gLWNvZWZmc1tpXTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogRGVjb21wcmVzc2lvbiB0ZXN0ICovCitpbnQgZGVjb21wKHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgdW5zaWduZWQgY2hhciAqKmpwZWdCdWYsCisgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmpwZWdTaXplLCB1bnNpZ25lZCBjaGFyICpkc3RCdWYsIGludCB3LCBpbnQgaCwKKyAgICAgICAgICAgaW50IHN1YnNhbXAsIGludCBqcGVnUXVhbCwgY2hhciAqZmlsZU5hbWUsIGludCB0aWxldywgaW50IHRpbGVoKQoreworICBjaGFyIHRlbXBTdHJbMTAyNF0sIHNpemVTdHJbMjBdID0gIlwwIiwgcXVhbFN0cls2XSA9ICJcMCIsICpwdHI7CisgIEZJTEUgKmZpbGUgPSBOVUxMOworICB0amhhbmRsZSBoYW5kbGUgPSBOVUxMOworICBpbnQgcm93LCBjb2wsIGl0ZXIgPSAwLCBkc3RCdWZBbGxvYyA9IDAsIHJldHZhbCA9IDA7CisgIGRvdWJsZSBlbGFwc2VkLCBlbGFwc2VkRGVjb2RlOworICBpbnQgcHMgPSB0alBpeGVsU2l6ZVtwZl07CisgIGludCBzY2FsZWR3ID0gVEpTQ0FMRUQodywgc2YpOworICBpbnQgc2NhbGVkaCA9IFRKU0NBTEVEKGgsIHNmKTsKKyAgaW50IHBpdGNoID0gc2NhbGVkdyAqIHBzOworICBpbnQgbnRpbGVzdyA9ICh3ICsgdGlsZXcgLSAxKSAvIHRpbGV3LCBudGlsZXNoID0gKGggKyB0aWxlaCAtIDEpIC8gdGlsZWg7CisgIHVuc2lnbmVkIGNoYXIgKmRzdFB0ciwgKmRzdFB0cjIsICp5dXZCdWYgPSBOVUxMOworCisgIGlmIChqcGVnUXVhbCA+IDApIHsKKyAgICBzbnByaW50ZihxdWFsU3RyLCA2LCAiX1ElZCIsIGpwZWdRdWFsKTsKKyAgICBxdWFsU3RyWzVdID0gMDsKKyAgfQorCisgIGlmICgoaGFuZGxlID0gdGpJbml0RGVjb21wcmVzcygpKSA9PSBOVUxMKQorICAgIF90aHJvd3RqKCJleGVjdXRpbmcgdGpJbml0RGVjb21wcmVzcygpIik7CisKKyAgaWYgKGRzdEJ1ZiA9PSBOVUxMKSB7CisgICAgaWYgKChkc3RCdWYgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhwaXRjaCAqIHNjYWxlZGgpKSA9PSBOVUxMKQorICAgICAgX3Rocm93dW5peCgiYWxsb2NhdGluZyBkZXN0aW5hdGlvbiBidWZmZXIiKTsKKyAgICBkc3RCdWZBbGxvYyA9IDE7CisgIH0KKyAgLyogU2V0IHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgdG8gZ3JheSBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlIGRlY29tcHJlc3NvcgorICAgICBhdHRlbXB0ZWQgdG8gd3JpdGUgdG8gaXQgKi8KKyAgbWVtc2V0KGRzdEJ1ZiwgMTI3LCBwaXRjaCAqIHNjYWxlZGgpOworCisgIGlmIChkb1lVVikgeworICAgIGludCB3aWR0aCA9IGRvVGlsZSA/IHRpbGV3IDogc2NhbGVkdzsKKyAgICBpbnQgaGVpZ2h0ID0gZG9UaWxlID8gdGlsZWggOiBzY2FsZWRoOworICAgIGludCB5dXZTaXplID0gdGpCdWZTaXplWVVWMih3aWR0aCwgeXV2UGFkLCBoZWlnaHQsIHN1YnNhbXApOworCisgICAgaWYgKCh5dXZCdWYgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyh5dXZTaXplKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgWVVWIGJ1ZmZlciIpOworICAgIG1lbXNldCh5dXZCdWYsIDEyNywgeXV2U2l6ZSk7CisgIH0KKworICAvKiBCZW5jaG1hcmsgKi8KKyAgaXRlciA9IC0xOworICBlbGFwc2VkID0gZWxhcHNlZERlY29kZSA9IDAuOworICB3aGlsZSAoMSkgeworICAgIGludCB0aWxlID0gMDsKKyAgICBkb3VibGUgc3RhcnQgPSBnZXRUaW1lKCk7CisKKyAgICBmb3IgKHJvdyA9IDAsIGRzdFB0ciA9IGRzdEJ1Zjsgcm93IDwgbnRpbGVzaDsKKyAgICAgICAgIHJvdysrLCBkc3RQdHIgKz0gcGl0Y2ggKiB0aWxlaCkgeworICAgICAgZm9yIChjb2wgPSAwLCBkc3RQdHIyID0gZHN0UHRyOyBjb2wgPCBudGlsZXN3OworICAgICAgICAgICBjb2wrKywgdGlsZSsrLCBkc3RQdHIyICs9IHBzICogdGlsZXcpIHsKKyAgICAgICAgaW50IHdpZHRoID0gZG9UaWxlID8gbWluKHRpbGV3LCB3IC0gY29sICogdGlsZXcpIDogc2NhbGVkdzsKKyAgICAgICAgaW50IGhlaWdodCA9IGRvVGlsZSA/IG1pbih0aWxlaCwgaCAtIHJvdyAqIHRpbGVoKSA6IHNjYWxlZGg7CisKKyAgICAgICAgaWYgKGRvWVVWKSB7CisgICAgICAgICAgZG91YmxlIHN0YXJ0RGVjb2RlOworCisgICAgICAgICAgaWYgKHRqRGVjb21wcmVzc1RvWVVWMihoYW5kbGUsIGpwZWdCdWZbdGlsZV0sIGpwZWdTaXplW3RpbGVdLCB5dXZCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgeXV2UGFkLCBoZWlnaHQsIGZsYWdzKSA9PSAtMSkKKyAgICAgICAgICAgIF90aHJvd3RqKCJleGVjdXRpbmcgdGpEZWNvbXByZXNzVG9ZVVYyKCkiKTsKKyAgICAgICAgICBzdGFydERlY29kZSA9IGdldFRpbWUoKTsKKyAgICAgICAgICBpZiAodGpEZWNvZGVZVVYoaGFuZGxlLCB5dXZCdWYsIHl1dlBhZCwgc3Vic2FtcCwgZHN0UHRyMiwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncykgPT0gLTEpCisgICAgICAgICAgICBfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVjb2RlWVVWKCkiKTsKKyAgICAgICAgICBpZiAoaXRlciA+PSAwKSBlbGFwc2VkRGVjb2RlICs9IGdldFRpbWUoKSAtIHN0YXJ0RGVjb2RlOworICAgICAgICB9IGVsc2UgaWYgKHRqRGVjb21wcmVzczIoaGFuZGxlLCBqcGVnQnVmW3RpbGVdLCBqcGVnU2l6ZVt0aWxlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFB0cjIsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSA9PSAtMSkKKyAgICAgICAgICBfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVjb21wcmVzczIoKSIpOworICAgICAgfQorICAgIH0KKyAgICBlbGFwc2VkICs9IGdldFRpbWUoKSAtIHN0YXJ0OworICAgIGlmIChpdGVyID49IDApIHsKKyAgICAgIGl0ZXIrKzsKKyAgICAgIGlmIChlbGFwc2VkID49IGJlbmNoVGltZSkgYnJlYWs7CisgICAgfSBlbHNlIGlmIChlbGFwc2VkID49IHdhcm11cCkgeworICAgICAgaXRlciA9IDA7CisgICAgICBlbGFwc2VkID0gZWxhcHNlZERlY29kZSA9IDAuOworICAgIH0KKyAgfQorICBpZiAoZG9ZVVYpIGVsYXBzZWQgLT0gZWxhcHNlZERlY29kZTsKKworICBpZiAodGpEZXN0cm95KGhhbmRsZSkgPT0gLTEpIF90aHJvd3RqKCJleGVjdXRpbmcgdGpEZXN0cm95KCkiKTsKKyAgaGFuZGxlID0gTlVMTDsKKworICBpZiAocXVpZXQpIHsKKyAgICBwcmludGYoIiUtNnMlcyIsCisgICAgICAgICAgIHNpZ2ZpZygoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqIChkb3VibGUpaXRlciAvIGVsYXBzZWQsIDQsCisgICAgICAgICAgICAgICAgICB0ZW1wU3RyLCAxMDI0KSwKKyAgICAgICAgICAgcXVpZXQgPT0gMiA/ICJcbiIgOiAiICAiKTsKKyAgICBpZiAoZG9ZVVYpCisgICAgICBwcmludGYoIiVzXG4iLAorICAgICAgICAgICAgIHNpZ2ZpZygoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqIChkb3VibGUpaXRlciAvIGVsYXBzZWREZWNvZGUsCisgICAgICAgICAgICAgICAgICAgIDQsIHRlbXBTdHIsIDEwMjQpKTsKKyAgICBlbHNlIGlmIChxdWlldCAhPSAyKSBwcmludGYoIlxuIik7CisgIH0gZWxzZSB7CisgICAgcHJpbnRmKCIlcyAtLT4gRnJhbWUgcmF0ZTogICAgICAgICAlZiBmcHNcbiIsCisgICAgICAgICAgIGRvWVVWID8gIkRlY29tcCB0byBZVVYiIDogIkRlY29tcHJlc3MgICAiLCAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkKTsKKyAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgIFRocm91Z2hwdXQ6ICAgICAgICAgJWYgTWVnYXBpeGVscy9zZWNcbiIsCisgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpdGVyIC8gZWxhcHNlZCk7CisgICAgaWYgKGRvWVVWKSB7CisgICAgICBwcmludGYoIllVViBEZWNvZGUgICAgLS0+IEZyYW1lIHJhdGU6ICAgICAgICAgJWYgZnBzXG4iLAorICAgICAgICAgICAgIChkb3VibGUpaXRlciAvIGVsYXBzZWREZWNvZGUpOworICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICBUaHJvdWdocHV0OiAgICAgICAgICVmIE1lZ2FwaXhlbHMvc2VjXG4iLAorICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpdGVyIC8gZWxhcHNlZERlY29kZSk7CisgICAgfQorICB9CisKKyAgaWYgKCFkb1dyaXRlKSBnb3RvIGJhaWxvdXQ7CisKKyAgaWYgKHNmLm51bSAhPSAxIHx8IHNmLmRlbm9tICE9IDEpCisgICAgc25wcmludGYoc2l6ZVN0ciwgMjAsICIlZF8lZCIsIHNmLm51bSwgc2YuZGVub20pOworICBlbHNlIGlmICh0aWxldyAhPSB3IHx8IHRpbGVoICE9IGgpCisgICAgc25wcmludGYoc2l6ZVN0ciwgMjAsICIlZHglZCIsIHRpbGV3LCB0aWxlaCk7CisgIGVsc2Ugc25wcmludGYoc2l6ZVN0ciwgMjAsICJmdWxsIik7CisgIGlmIChkZWNvbXBPbmx5KQorICAgIHNucHJpbnRmKHRlbXBTdHIsIDEwMjQsICIlc18lcy4lcyIsIGZpbGVOYW1lLCBzaXplU3RyLCBleHQpOworICBlbHNlCisgICAgc25wcmludGYodGVtcFN0ciwgMTAyNCwgIiVzXyVzJXNfJXMuJXMiLCBmaWxlTmFtZSwgc3ViTmFtZVtzdWJzYW1wXSwKKyAgICAgICAgICAgICBxdWFsU3RyLCBzaXplU3RyLCBleHQpOworCisgIGlmICh0alNhdmVJbWFnZSh0ZW1wU3RyLCBkc3RCdWYsIHNjYWxlZHcsIDAsIHNjYWxlZGgsIHBmLCBmbGFncykgPT0gLTEpCisgICAgX3Rocm93dGpnKCJzYXZpbmcgYml0bWFwIik7CisgIHB0ciA9IHN0cnJjaHIodGVtcFN0ciwgJy4nKTsKKyAgc25wcmludGYocHRyLCAxMDI0IC0gKHB0ciAtIHRlbXBTdHIpLCAiLWVyci4lcyIsIGV4dCk7CisgIGlmIChzcmNCdWYgJiYgc2YubnVtID09IDEgJiYgc2YuZGVub20gPT0gMSkgeworICAgIGlmICghcXVpZXQpIHByaW50ZigiQ29tcHJlc3Npb24gZXJyb3Igd3JpdHRlbiB0byAlcy5cbiIsIHRlbXBTdHIpOworICAgIGlmIChzdWJzYW1wID09IFRKX0dSQVlTQ0FMRSkgeworICAgICAgaW50IGluZGV4LCBpbmRleDI7CisKKyAgICAgIGZvciAocm93ID0gMCwgaW5kZXggPSAwOyByb3cgPCBoOyByb3crKywgaW5kZXggKz0gcGl0Y2gpIHsKKyAgICAgICAgZm9yIChjb2wgPSAwLCBpbmRleDIgPSBpbmRleDsgY29sIDwgdzsgY29sKyssIGluZGV4MiArPSBwcykgeworICAgICAgICAgIGludCByaW5kZXggPSBpbmRleDIgKyB0alJlZE9mZnNldFtwZl07CisgICAgICAgICAgaW50IGdpbmRleCA9IGluZGV4MiArIHRqR3JlZW5PZmZzZXRbcGZdOworICAgICAgICAgIGludCBiaW5kZXggPSBpbmRleDIgKyB0akJsdWVPZmZzZXRbcGZdOworICAgICAgICAgIGludCB5ID0gKGludCkoKGRvdWJsZSlzcmNCdWZbcmluZGV4XSAqIDAuMjk5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpc3JjQnVmW2dpbmRleF0gKiAwLjU4NyArCisgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXNyY0J1ZltiaW5kZXhdICogMC4xMTQgKyAwLjUpOworCisgICAgICAgICAgaWYgKHkgPiAyNTUpIHkgPSAyNTU7CisgICAgICAgICAgaWYgKHkgPCAwKSB5ID0gMDsKKyAgICAgICAgICBkc3RCdWZbcmluZGV4XSA9IGFicyhkc3RCdWZbcmluZGV4XSAtIHkpOworICAgICAgICAgIGRzdEJ1ZltnaW5kZXhdID0gYWJzKGRzdEJ1ZltnaW5kZXhdIC0geSk7CisgICAgICAgICAgZHN0QnVmW2JpbmRleF0gPSBhYnMoZHN0QnVmW2JpbmRleF0gLSB5KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKQorICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHcgKiBwczsgY29sKyspCisgICAgICAgICAgZHN0QnVmW3BpdGNoICogcm93ICsgY29sXSA9CisgICAgICAgICAgICBhYnMoZHN0QnVmW3BpdGNoICogcm93ICsgY29sXSAtIHNyY0J1ZltwaXRjaCAqIHJvdyArIGNvbF0pOworICAgIH0KKyAgICBpZiAodGpTYXZlSW1hZ2UodGVtcFN0ciwgZHN0QnVmLCB3LCAwLCBoLCBwZiwgZmxhZ3MpID09IC0xKQorICAgICAgX3Rocm93dGpnKCJzYXZpbmcgYml0bWFwIik7CisgIH0KKworYmFpbG91dDoKKyAgaWYgKGZpbGUpIGZjbG9zZShmaWxlKTsKKyAgaWYgKGhhbmRsZSkgdGpEZXN0cm95KGhhbmRsZSk7CisgIGlmIChkc3RCdWYgJiYgZHN0QnVmQWxsb2MpIGZyZWUoZHN0QnVmKTsKKyAgaWYgKHl1dkJ1ZikgZnJlZSh5dXZCdWYpOworICByZXR1cm4gcmV0dmFsOworfQorCisKK2ludCBmdWxsVGVzdCh1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3LCBpbnQgaCwgaW50IHN1YnNhbXAsIGludCBqcGVnUXVhbCwKKyAgICAgICAgICAgICBjaGFyICpmaWxlTmFtZSkKK3sKKyAgY2hhciB0ZW1wU3RyWzEwMjRdLCB0ZW1wU3RyMls4MF07CisgIEZJTEUgKmZpbGUgPSBOVUxMOworICB0amhhbmRsZSBoYW5kbGUgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICoqanBlZ0J1ZiA9IE5VTEwsICp5dXZCdWYgPSBOVUxMLCAqdG1wQnVmID0gTlVMTCwgKnNyY1B0ciwKKyAgICAqc3JjUHRyMjsKKyAgZG91YmxlIHN0YXJ0LCBlbGFwc2VkLCBlbGFwc2VkRW5jb2RlOworICBpbnQgdG90YWxKcGVnU2l6ZSA9IDAsIHJvdywgY29sLCBpLCB0aWxldyA9IHcsIHRpbGVoID0gaCwgcmV0dmFsID0gMDsKKyAgaW50IGl0ZXIsIHl1dlNpemUgPSAwOworICB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSA9IE5VTEw7CisgIGludCBwcyA9IHRqUGl4ZWxTaXplW3BmXTsKKyAgaW50IG50aWxlc3cgPSAxLCBudGlsZXNoID0gMSwgcGl0Y2ggPSB3ICogcHM7CisgIGNvbnN0IGNoYXIgKnBmU3RyID0gcGl4Rm9ybWF0U3RyW3BmXTsKKworICBpZiAoKHRtcEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHBpdGNoICogaCkpID09IE5VTEwpCisgICAgX3Rocm93dW5peCgiYWxsb2NhdGluZyB0ZW1wb3JhcnkgaW1hZ2UgYnVmZmVyIik7CisKKyAgaWYgKCFxdWlldCkKKyAgICBwcmludGYoIj4+Pj4+ICAlcyAoJXMpIDwtLT4gSlBFRyAlcyBRJWQgIDw8PDw8XG4iLCBwZlN0ciwKKyAgICAgICAgICAgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKSA/ICJCb3R0b20tdXAiIDogIlRvcC1kb3duIiwKKyAgICAgICAgICAgc3ViTmFtZUxvbmdbc3Vic2FtcF0sIGpwZWdRdWFsKTsKKworICBmb3IgKHRpbGV3ID0gZG9UaWxlID8gOCA6IHcsIHRpbGVoID0gZG9UaWxlID8gOCA6IGg7IDsKKyAgICAgICB0aWxldyAqPSAyLCB0aWxlaCAqPSAyKSB7CisgICAgaWYgKHRpbGV3ID4gdykgdGlsZXcgPSB3OworICAgIGlmICh0aWxlaCA+IGgpIHRpbGVoID0gaDsKKyAgICBudGlsZXN3ID0gKHcgKyB0aWxldyAtIDEpIC8gdGlsZXc7CisgICAgbnRpbGVzaCA9IChoICsgdGlsZWggLSAxKSAvIHRpbGVoOworCisgICAgaWYgKChqcGVnQnVmID0gKHVuc2lnbmVkIGNoYXIgKiopbWFsbG9jKHNpemVvZih1bnNpZ25lZCBjaGFyICopICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRpbGVzdyAqIG50aWxlc2gpKSA9PSBOVUxMKQorICAgICAgX3Rocm93dW5peCgiYWxsb2NhdGluZyBKUEVHIHRpbGUgYXJyYXkiKTsKKyAgICBtZW1zZXQoanBlZ0J1ZiwgMCwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikgKiBudGlsZXN3ICogbnRpbGVzaCk7CisgICAgaWYgKChqcGVnU2l6ZSA9ICh1bnNpZ25lZCBsb25nICopbWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50aWxlc3cgKiBudGlsZXNoKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgSlBFRyBzaXplIGFycmF5Iik7CisgICAgbWVtc2V0KGpwZWdTaXplLCAwLCBzaXplb2YodW5zaWduZWQgbG9uZykgKiBudGlsZXN3ICogbnRpbGVzaCk7CisKKyAgICBpZiAoKGZsYWdzICYgVEpGTEFHX05PUkVBTExPQykgIT0gMCkKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudGlsZXN3ICogbnRpbGVzaDsgaSsrKSB7CisgICAgICAgIGlmICgoanBlZ0J1ZltpXSA9ICh1bnNpZ25lZCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRqQWxsb2ModGpCdWZTaXplKHRpbGV3LCB0aWxlaCwgc3Vic2FtcCkpKSA9PSBOVUxMKQorICAgICAgICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgSlBFRyB0aWxlcyIpOworICAgICAgfQorCisgICAgLyogQ29tcHJlc3Npb24gdGVzdCAqLworICAgIGlmIChxdWlldCA9PSAxKQorICAgICAgcHJpbnRmKCIlLTRzICglcykgICUtNXMgICAgJS0zZCAgICIsIHBmU3RyLAorICAgICAgICAgICAgIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgPyAiQlUiIDogIlREIiwgc3ViTmFtZUxvbmdbc3Vic2FtcF0sCisgICAgICAgICAgICAganBlZ1F1YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCBoOyBpKyspCisgICAgICBtZW1jcHkoJnRtcEJ1ZltwaXRjaCAqIGldLCAmc3JjQnVmW3cgKiBwcyAqIGldLCB3ICogcHMpOworICAgIGlmICgoaGFuZGxlID0gdGpJbml0Q29tcHJlc3MoKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd3RqKCJleGVjdXRpbmcgdGpJbml0Q29tcHJlc3MoKSIpOworCisgICAgaWYgKGRvWVVWKSB7CisgICAgICB5dXZTaXplID0gdGpCdWZTaXplWVVWMih0aWxldywgeXV2UGFkLCB0aWxlaCwgc3Vic2FtcCk7CisgICAgICBpZiAoKHl1dkJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHl1dlNpemUpKSA9PSBOVUxMKQorICAgICAgICBfdGhyb3d1bml4KCJhbGxvY2F0aW5nIFlVViBidWZmZXIiKTsKKyAgICAgIG1lbXNldCh5dXZCdWYsIDEyNywgeXV2U2l6ZSk7CisgICAgfQorCisgICAgLyogQmVuY2htYXJrICovCisgICAgaXRlciA9IC0xOworICAgIGVsYXBzZWQgPSBlbGFwc2VkRW5jb2RlID0gMC47CisgICAgd2hpbGUgKDEpIHsKKyAgICAgIGludCB0aWxlID0gMDsKKworICAgICAgdG90YWxKcGVnU2l6ZSA9IDA7CisgICAgICBzdGFydCA9IGdldFRpbWUoKTsKKyAgICAgIGZvciAocm93ID0gMCwgc3JjUHRyID0gc3JjQnVmOyByb3cgPCBudGlsZXNoOworICAgICAgICAgICByb3crKywgc3JjUHRyICs9IHBpdGNoICogdGlsZWgpIHsKKyAgICAgICAgZm9yIChjb2wgPSAwLCBzcmNQdHIyID0gc3JjUHRyOyBjb2wgPCBudGlsZXN3OworICAgICAgICAgICAgIGNvbCsrLCB0aWxlKyssIHNyY1B0cjIgKz0gcHMgKiB0aWxldykgeworICAgICAgICAgIGludCB3aWR0aCA9IG1pbih0aWxldywgdyAtIGNvbCAqIHRpbGV3KTsKKyAgICAgICAgICBpbnQgaGVpZ2h0ID0gbWluKHRpbGVoLCBoIC0gcm93ICogdGlsZWgpOworCisgICAgICAgICAgaWYgKGRvWVVWKSB7CisgICAgICAgICAgICBkb3VibGUgc3RhcnRFbmNvZGUgPSBnZXRUaW1lKCk7CisKKyAgICAgICAgICAgIGlmICh0akVuY29kZVlVVjMoaGFuZGxlLCBzcmNQdHIyLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGYsIHl1dkJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2UGFkLCBzdWJzYW1wLCBmbGFncykgPT0gLTEpCisgICAgICAgICAgICAgIF90aHJvd3RqKCJleGVjdXRpbmcgdGpFbmNvZGVZVVYzKCkiKTsKKyAgICAgICAgICAgIGlmIChpdGVyID49IDApIGVsYXBzZWRFbmNvZGUgKz0gZ2V0VGltZSgpIC0gc3RhcnRFbmNvZGU7CisgICAgICAgICAgICBpZiAodGpDb21wcmVzc0Zyb21ZVVYoaGFuZGxlLCB5dXZCdWYsIHdpZHRoLCB5dXZQYWQsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wLCAmanBlZ0J1Zlt0aWxlXSwgJmpwZWdTaXplW3RpbGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdRdWFsLCBmbGFncykgPT0gLTEpCisgICAgICAgICAgICAgIF90aHJvd3RqKCJleGVjdXRpbmcgdGpDb21wcmVzc0Zyb21ZVVYoKSIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodGpDb21wcmVzczIoaGFuZGxlLCBzcmNQdHIyLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmpwZWdCdWZbdGlsZV0sICZqcGVnU2l6ZVt0aWxlXSwgc3Vic2FtcCwganBlZ1F1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpID09IC0xKQorICAgICAgICAgICAgICBfdGhyb3d0aigiZXhlY3V0aW5nIHRqQ29tcHJlc3MyKCkiKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdG90YWxKcGVnU2l6ZSArPSBqcGVnU2l6ZVt0aWxlXTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxhcHNlZCArPSBnZXRUaW1lKCkgLSBzdGFydDsKKyAgICAgIGlmIChpdGVyID49IDApIHsKKyAgICAgICAgaXRlcisrOworICAgICAgICBpZiAoZWxhcHNlZCA+PSBiZW5jaFRpbWUpIGJyZWFrOworICAgICAgfSBlbHNlIGlmIChlbGFwc2VkID49IHdhcm11cCkgeworICAgICAgICBpdGVyID0gMDsKKyAgICAgICAgZWxhcHNlZCA9IGVsYXBzZWRFbmNvZGUgPSAwLjsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGRvWVVWKSBlbGFwc2VkIC09IGVsYXBzZWRFbmNvZGU7CisKKyAgICBpZiAodGpEZXN0cm95KGhhbmRsZSkgPT0gLTEpIF90aHJvd3RqKCJleGVjdXRpbmcgdGpEZXN0cm95KCkiKTsKKyAgICBoYW5kbGUgPSBOVUxMOworCisgICAgaWYgKHF1aWV0ID09IDEpIHByaW50ZigiJS01ZCAgJS01ZCAgICIsIHRpbGV3LCB0aWxlaCk7CisgICAgaWYgKHF1aWV0KSB7CisgICAgICBpZiAoZG9ZVVYpCisgICAgICAgIHByaW50ZigiJS02cyVzIiwKKyAgICAgICAgICAgICAgIHNpZ2ZpZygoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqCisgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlpdGVyIC8gZWxhcHNlZEVuY29kZSwgNCwgdGVtcFN0ciwgMTAyNCksCisgICAgICAgICAgICAgICBxdWlldCA9PSAyID8gIlxuIiA6ICIgICIpOworICAgICAgcHJpbnRmKCIlLTZzJXMiLAorICAgICAgICAgICAgIHNpZ2ZpZygoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqIChkb3VibGUpaXRlciAvIGVsYXBzZWQsIDQsCisgICAgICAgICAgICAgICAgICAgIHRlbXBTdHIsIDEwMjQpLAorICAgICAgICAgICAgIHF1aWV0ID09IDIgPyAiXG4iIDogIiAgIik7CisgICAgICBwcmludGYoIiUtNnMlcyIsCisgICAgICAgICAgICAgc2lnZmlnKChkb3VibGUpKHcgKiBoICogcHMpIC8gKGRvdWJsZSl0b3RhbEpwZWdTaXplLCA0LCB0ZW1wU3RyMiwKKyAgICAgICAgICAgICAgICAgICAgODApLAorICAgICAgICAgICAgIHF1aWV0ID09IDIgPyAiXG4iIDogIiAgIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHByaW50ZigiXG4lcyBzaXplOiAlZCB4ICVkXG4iLCBkb1RpbGUgPyAiVGlsZSIgOiAiSW1hZ2UiLCB0aWxldywgdGlsZWgpOworICAgICAgaWYgKGRvWVVWKSB7CisgICAgICAgIHByaW50ZigiRW5jb2RlIFlVViAgICAtLT4gRnJhbWUgcmF0ZTogICAgICAgICAlZiBmcHNcbiIsCisgICAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkRW5jb2RlKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICBPdXRwdXQgaW1hZ2Ugc2l6ZTogICVkIGJ5dGVzXG4iLCB5dXZTaXplKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiByYXRpbzogICVmOjFcbiIsCisgICAgICAgICAgICAgICAoZG91YmxlKSh3ICogaCAqIHBzKSAvIChkb3VibGUpeXV2U2l6ZSk7CisgICAgICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgVGhyb3VnaHB1dDogICAgICAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKyAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpdGVyIC8gZWxhcHNlZEVuY29kZSk7CisgICAgICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgT3V0cHV0IGJpdCBzdHJlYW06ICAlZiBNZWdhYml0cy9zZWNcbiIsCisgICAgICAgICAgICAgICAoZG91YmxlKXl1dlNpemUgKiA4LiAvIDEwMDAwMDAuICogKGRvdWJsZSlpdGVyIC8gZWxhcHNlZEVuY29kZSk7CisgICAgICB9CisgICAgICBwcmludGYoIiVzIC0tPiBGcmFtZSByYXRlOiAgICAgICAgICVmIGZwc1xuIiwKKyAgICAgICAgICAgICBkb1lVViA/ICJDb21wIGZyb20gWVVWIiA6ICJDb21wcmVzcyAgICAgIiwKKyAgICAgICAgICAgICAoZG91YmxlKWl0ZXIgLyBlbGFwc2VkKTsKKyAgICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgT3V0cHV0IGltYWdlIHNpemU6ICAlZCBieXRlc1xuIiwKKyAgICAgICAgICAgICB0b3RhbEpwZWdTaXplKTsKKyAgICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gcmF0aW86ICAlZjoxXG4iLAorICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoICogcHMpIC8gKGRvdWJsZSl0b3RhbEpwZWdTaXplKTsKKyAgICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgVGhyb3VnaHB1dDogICAgICAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKyAgICAgICAgICAgICAoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqIChkb3VibGUpaXRlciAvIGVsYXBzZWQpOworICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICBPdXRwdXQgYml0IHN0cmVhbTogICVmIE1lZ2FiaXRzL3NlY1xuIiwKKyAgICAgICAgICAgICAoZG91YmxlKXRvdGFsSnBlZ1NpemUgKiA4LiAvIDEwMDAwMDAuICogKGRvdWJsZSlpdGVyIC8gZWxhcHNlZCk7CisgICAgfQorICAgIGlmICh0aWxldyA9PSB3ICYmIHRpbGVoID09IGggJiYgZG9Xcml0ZSkgeworICAgICAgc25wcmludGYodGVtcFN0ciwgMTAyNCwgIiVzXyVzX1ElZC5qcGciLCBmaWxlTmFtZSwgc3ViTmFtZVtzdWJzYW1wXSwKKyAgICAgICAgICAgICAgIGpwZWdRdWFsKTsKKyAgICAgIGlmICgoZmlsZSA9IGZvcGVuKHRlbXBTdHIsICJ3YiIpKSA9PSBOVUxMKQorICAgICAgICBfdGhyb3d1bml4KCJvcGVuaW5nIHJlZmVyZW5jZSBpbWFnZSIpOworICAgICAgaWYgKGZ3cml0ZShqcGVnQnVmWzBdLCBqcGVnU2l6ZVswXSwgMSwgZmlsZSkgIT0gMSkKKyAgICAgICAgX3Rocm93dW5peCgid3JpdGluZyByZWZlcmVuY2UgaW1hZ2UiKTsKKyAgICAgIGZjbG9zZShmaWxlKTsgIGZpbGUgPSBOVUxMOworICAgICAgaWYgKCFxdWlldCkgcHJpbnRmKCJSZWZlcmVuY2UgaW1hZ2Ugd3JpdHRlbiB0byAlc1xuIiwgdGVtcFN0cik7CisgICAgfQorCisgICAgLyogRGVjb21wcmVzc2lvbiB0ZXN0ICovCisgICAgaWYgKCFjb21wT25seSkgeworICAgICAgaWYgKGRlY29tcChzcmNCdWYsIGpwZWdCdWYsIGpwZWdTaXplLCB0bXBCdWYsIHcsIGgsIHN1YnNhbXAsIGpwZWdRdWFsLAorICAgICAgICAgICAgICAgICBmaWxlTmFtZSwgdGlsZXcsIHRpbGVoKSA9PSAtMSkKKyAgICAgICAgZ290byBiYWlsb3V0OworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudGlsZXN3ICogbnRpbGVzaDsgaSsrKSB7CisgICAgICBpZiAoanBlZ0J1ZltpXSkgdGpGcmVlKGpwZWdCdWZbaV0pOworICAgICAganBlZ0J1ZltpXSA9IE5VTEw7CisgICAgfQorICAgIGZyZWUoanBlZ0J1Zik7ICBqcGVnQnVmID0gTlVMTDsKKyAgICBmcmVlKGpwZWdTaXplKTsgIGpwZWdTaXplID0gTlVMTDsKKyAgICBpZiAoZG9ZVVYpIHsKKyAgICAgIGZyZWUoeXV2QnVmKTsgIHl1dkJ1ZiA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHRpbGV3ID09IHcgJiYgdGlsZWggPT0gaCkgYnJlYWs7CisgIH0KKworYmFpbG91dDoKKyAgaWYgKGZpbGUpIHsgZmNsb3NlKGZpbGUpOyAgZmlsZSA9IE5VTEw7IH0KKyAgaWYgKGpwZWdCdWYpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnRpbGVzdyAqIG50aWxlc2g7IGkrKykgeworICAgICAgaWYgKGpwZWdCdWZbaV0pIHRqRnJlZShqcGVnQnVmW2ldKTsKKyAgICAgIGpwZWdCdWZbaV0gPSBOVUxMOworICAgIH0KKyAgICBmcmVlKGpwZWdCdWYpOyAganBlZ0J1ZiA9IE5VTEw7CisgIH0KKyAgaWYgKHl1dkJ1ZikgeyBmcmVlKHl1dkJ1Zik7ICB5dXZCdWYgPSBOVUxMOyB9CisgIGlmIChqcGVnU2l6ZSkgeyBmcmVlKGpwZWdTaXplKTsgIGpwZWdTaXplID0gTlVMTDsgfQorICBpZiAodG1wQnVmKSB7IGZyZWUodG1wQnVmKTsgIHRtcEJ1ZiA9IE5VTEw7IH0KKyAgaWYgKGhhbmRsZSkgeyB0akRlc3Ryb3koaGFuZGxlKTsgIGhhbmRsZSA9IE5VTEw7IH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitpbnQgZGVjb21wVGVzdChjaGFyICpmaWxlTmFtZSkKK3sKKyAgRklMRSAqZmlsZSA9IE5VTEw7CisgIHRqaGFuZGxlIGhhbmRsZSA9IE5VTEw7CisgIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmID0gTlVMTCwgKnNyY0J1ZiA9IE5VTEw7CisgIHVuc2lnbmVkIGxvbmcgKmpwZWdTaXplID0gTlVMTCwgc3JjU2l6ZSwgdG90YWxKcGVnU2l6ZTsKKyAgdGp0cmFuc2Zvcm0gKnQgPSBOVUxMOworICBkb3VibGUgc3RhcnQsIGVsYXBzZWQ7CisgIGludCBwcyA9IHRqUGl4ZWxTaXplW3BmXSwgdGlsZSwgcm93LCBjb2wsIGksIGl0ZXIsIHJldHZhbCA9IDAsIGRlY29tcHNyYyA9IDA7CisgIGNoYXIgKnRlbXAgPSBOVUxMLCB0ZW1wU3RyWzgwXSwgdGVtcFN0cjJbODBdOworICAvKiBPcmlnaW5hbCBpbWFnZSAqLworICBpbnQgdyA9IDAsIGggPSAwLCB0aWxldywgdGlsZWgsIG50aWxlc3cgPSAxLCBudGlsZXNoID0gMSwgc3Vic2FtcCA9IC0xLAorICAgIGNzID0gLTE7CisgIC8qIFRyYW5zZm9ybWVkIGltYWdlICovCisgIGludCB0dywgdGgsIHR0aWxldywgdHRpbGVoLCB0bnRpbGVzdywgdG50aWxlc2gsIHRzdWJzYW1wOworCisgIGlmICgoZmlsZSA9IGZvcGVuKGZpbGVOYW1lLCAicmIiKSkgPT0gTlVMTCkKKyAgICBfdGhyb3d1bml4KCJvcGVuaW5nIGZpbGUiKTsKKyAgaWYgKGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKSA8IDAgfHwKKyAgICAgIChzcmNTaXplID0gZnRlbGwoZmlsZSkpID09ICh1bnNpZ25lZCBsb25nKS0xKQorICAgIF90aHJvd3VuaXgoImRldGVybWluaW5nIGZpbGUgc2l6ZSIpOworICBpZiAoKHNyY0J1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHNyY1NpemUpKSA9PSBOVUxMKQorICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgbWVtb3J5Iik7CisgIGlmIChmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCkgPCAwKQorICAgIF90aHJvd3VuaXgoInNldHRpbmcgZmlsZSBwb3NpdGlvbiIpOworICBpZiAoZnJlYWQoc3JjQnVmLCBzcmNTaXplLCAxLCBmaWxlKSA8IDEpCisgICAgX3Rocm93dW5peCgicmVhZGluZyBKUEVHIGRhdGEiKTsKKyAgZmNsb3NlKGZpbGUpOyAgZmlsZSA9IE5VTEw7CisKKyAgdGVtcCA9IHN0cnJjaHIoZmlsZU5hbWUsICcuJyk7CisgIGlmICh0ZW1wICE9IE5VTEwpICp0ZW1wID0gJ1wwJzsKKworICBpZiAoKGhhbmRsZSA9IHRqSW5pdFRyYW5zZm9ybSgpKSA9PSBOVUxMKQorICAgIF90aHJvd3RqKCJleGVjdXRpbmcgdGpJbml0VHJhbnNmb3JtKCkiKTsKKyAgaWYgKHRqRGVjb21wcmVzc0hlYWRlcjMoaGFuZGxlLCBzcmNCdWYsIHNyY1NpemUsICZ3LCAmaCwgJnN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjcykgPT0gLTEpCisgICAgX3Rocm93dGooImV4ZWN1dGluZyB0akRlY29tcHJlc3NIZWFkZXIzKCkiKTsKKyAgaWYgKGNzID09IFRKQ1NfWUNDSyB8fCBjcyA9PSBUSkNTX0NNWUspIHsKKyAgICBwZiA9IFRKUEZfQ01ZSzsgIHBzID0gdGpQaXhlbFNpemVbcGZdOworICB9CisKKyAgaWYgKHF1aWV0ID09IDEpIHsKKyAgICBwcmludGYoIkFsbCBwZXJmb3JtYW5jZSB2YWx1ZXMgaW4gTXBpeGVscy9zZWNcblxuIik7CisgICAgcHJpbnRmKCJCaXRtYXAgICAgIEpQRUcgICBKUEVHICAgICAlcyAgJXMgICBYZm9ybSAgIENvbXAgICAgRGVjb21wICAiLAorICAgICAgICAgICBkb1RpbGUgPyAiVGlsZSAiIDogIkltYWdlIiwgZG9UaWxlID8gIlRpbGUgIiA6ICJJbWFnZSIpOworICAgIGlmIChkb1lVVikgcHJpbnRmKCJEZWNvZGUiKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCJGb3JtYXQgICAgIENTICAgICBTdWJzYW1wICBXaWR0aCAgSGVpZ2h0ICBQZXJmICAgIFJhdGlvICAgUGVyZiAgICAiKTsKKyAgICBpZiAoZG9ZVVYpIHByaW50ZigiUGVyZiIpOworICAgIHByaW50ZigiXG5cbiIpOworICB9IGVsc2UgaWYgKCFxdWlldCkKKyAgICBwcmludGYoIj4+Pj4+ICBKUEVHICVzIC0tPiAlcyAoJXMpICA8PDw8PFxuIiwKKyAgICAgICAgICAgZm9ybWF0TmFtZShzdWJzYW1wLCBjcywgdGVtcFN0ciksIHBpeEZvcm1hdFN0cltwZl0sCisgICAgICAgICAgIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgPyAiQm90dG9tLXVwIiA6ICJUb3AtZG93biIpOworCisgIGZvciAodGlsZXcgPSBkb1RpbGUgPyAxNiA6IHcsIHRpbGVoID0gZG9UaWxlID8gMTYgOiBoOyA7CisgICAgICAgdGlsZXcgKj0gMiwgdGlsZWggKj0gMikgeworICAgIGlmICh0aWxldyA+IHcpIHRpbGV3ID0gdzsKKyAgICBpZiAodGlsZWggPiBoKSB0aWxlaCA9IGg7CisgICAgbnRpbGVzdyA9ICh3ICsgdGlsZXcgLSAxKSAvIHRpbGV3OworICAgIG50aWxlc2ggPSAoaCArIHRpbGVoIC0gMSkgLyB0aWxlaDsKKworICAgIGlmICgoanBlZ0J1ZiA9ICh1bnNpZ25lZCBjaGFyICoqKW1hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhciAqKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50aWxlc3cgKiBudGlsZXNoKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgSlBFRyB0aWxlIGFycmF5Iik7CisgICAgbWVtc2V0KGpwZWdCdWYsIDAsIHNpemVvZih1bnNpZ25lZCBjaGFyICopICogbnRpbGVzdyAqIG50aWxlc2gpOworICAgIGlmICgoanBlZ1NpemUgPSAodW5zaWduZWQgbG9uZyAqKW1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudGlsZXN3ICogbnRpbGVzaCkpID09IE5VTEwpCisgICAgICBfdGhyb3d1bml4KCJhbGxvY2F0aW5nIEpQRUcgc2l6ZSBhcnJheSIpOworICAgIG1lbXNldChqcGVnU2l6ZSwgMCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogbnRpbGVzdyAqIG50aWxlc2gpOworCisgICAgaWYgKChmbGFncyAmIFRKRkxBR19OT1JFQUxMT0MpICE9IDAgfHwgIWRvVGlsZSkKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudGlsZXN3ICogbnRpbGVzaDsgaSsrKSB7CisgICAgICAgIGlmICgoanBlZ0J1ZltpXSA9ICh1bnNpZ25lZCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRqQWxsb2ModGpCdWZTaXplKHRpbGV3LCB0aWxlaCwgc3Vic2FtcCkpKSA9PSBOVUxMKQorICAgICAgICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgSlBFRyB0aWxlcyIpOworICAgICAgfQorCisgICAgdHcgPSB3OyAgdGggPSBoOyAgdHRpbGV3ID0gdGlsZXc7ICB0dGlsZWggPSB0aWxlaDsKKyAgICBpZiAoIXF1aWV0KSB7CisgICAgICBwcmludGYoIlxuJXMgc2l6ZTogJWQgeCAlZCIsIGRvVGlsZSA/ICJUaWxlIiA6ICJJbWFnZSIsIHR0aWxldywgdHRpbGVoKTsKKyAgICAgIGlmIChzZi5udW0gIT0gMSB8fCBzZi5kZW5vbSAhPSAxKQorICAgICAgICBwcmludGYoIiAtLT4gJWQgeCAlZCIsIFRKU0NBTEVEKHR3LCBzZiksIFRKU0NBTEVEKHRoLCBzZikpOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0gZWxzZSBpZiAocXVpZXQgPT0gMSkgeworICAgICAgcHJpbnRmKCIlLTRzICglcykgICUtNXMgICUtNXMgICAgIiwgcGl4Rm9ybWF0U3RyW3BmXSwKKyAgICAgICAgICAgICAoZmxhZ3MgJiBUSkZMQUdfQk9UVE9NVVApID8gIkJVIiA6ICJURCIsIGNzTmFtZVtjc10sCisgICAgICAgICAgICAgc3ViTmFtZUxvbmdbc3Vic2FtcF0pOworICAgICAgcHJpbnRmKCIlLTVkICAlLTVkICAgIiwgdGlsZXcsIHRpbGVoKTsKKyAgICB9CisKKyAgICB0c3Vic2FtcCA9IHN1YnNhbXA7CisgICAgaWYgKGRvVGlsZSB8fCB4Zm9ybU9wICE9IFRKWE9QX05PTkUgfHwgeGZvcm1PcHQgIT0gMCB8fCBjdXN0b21GaWx0ZXIpIHsKKyAgICAgIGlmICgodCA9ICh0anRyYW5zZm9ybSAqKW1hbGxvYyhzaXplb2YodGp0cmFuc2Zvcm0pICogbnRpbGVzdyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRpbGVzaCkpID09IE5VTEwpCisgICAgICAgIF90aHJvd3VuaXgoImFsbG9jYXRpbmcgaW1hZ2UgdHJhbnNmb3JtIGFycmF5Iik7CisKKyAgICAgIGlmICh4Zm9ybU9wID09IFRKWE9QX1RSQU5TUE9TRSB8fCB4Zm9ybU9wID09IFRKWE9QX1RSQU5TVkVSU0UgfHwKKyAgICAgICAgICB4Zm9ybU9wID09IFRKWE9QX1JPVDkwIHx8IHhmb3JtT3AgPT0gVEpYT1BfUk9UMjcwKSB7CisgICAgICAgIHR3ID0gaDsgIHRoID0gdzsgIHR0aWxldyA9IHRpbGVoOyAgdHRpbGVoID0gdGlsZXc7CisgICAgICB9CisKKyAgICAgIGlmICh4Zm9ybU9wdCAmIFRKWE9QVF9HUkFZKSB0c3Vic2FtcCA9IFRKX0dSQVlTQ0FMRTsKKyAgICAgIGlmICh4Zm9ybU9wID09IFRKWE9QX0hGTElQIHx8IHhmb3JtT3AgPT0gVEpYT1BfUk9UMTgwKQorICAgICAgICB0dyA9IHR3IC0gKHR3ICUgdGpNQ1VXaWR0aFt0c3Vic2FtcF0pOworICAgICAgaWYgKHhmb3JtT3AgPT0gVEpYT1BfVkZMSVAgfHwgeGZvcm1PcCA9PSBUSlhPUF9ST1QxODApCisgICAgICAgIHRoID0gdGggLSAodGggJSB0ak1DVUhlaWdodFt0c3Vic2FtcF0pOworICAgICAgaWYgKHhmb3JtT3AgPT0gVEpYT1BfVFJBTlNWRVJTRSB8fCB4Zm9ybU9wID09IFRKWE9QX1JPVDkwKQorICAgICAgICB0dyA9IHR3IC0gKHR3ICUgdGpNQ1VIZWlnaHRbdHN1YnNhbXBdKTsKKyAgICAgIGlmICh4Zm9ybU9wID09IFRKWE9QX1RSQU5TVkVSU0UgfHwgeGZvcm1PcCA9PSBUSlhPUF9ST1QyNzApCisgICAgICAgIHRoID0gdGggLSAodGggJSB0ak1DVVdpZHRoW3RzdWJzYW1wXSk7CisgICAgICB0bnRpbGVzdyA9ICh0dyArIHR0aWxldyAtIDEpIC8gdHRpbGV3OworICAgICAgdG50aWxlc2ggPSAodGggKyB0dGlsZWggLSAxKSAvIHR0aWxlaDsKKworICAgICAgaWYgKHhmb3JtT3AgPT0gVEpYT1BfVFJBTlNQT1NFIHx8IHhmb3JtT3AgPT0gVEpYT1BfVFJBTlNWRVJTRSB8fAorICAgICAgICAgIHhmb3JtT3AgPT0gVEpYT1BfUk9UOTAgfHwgeGZvcm1PcCA9PSBUSlhPUF9ST1QyNzApIHsKKyAgICAgICAgaWYgKHRzdWJzYW1wID09IFRKU0FNUF80MjIpIHRzdWJzYW1wID0gVEpTQU1QXzQ0MDsKKyAgICAgICAgZWxzZSBpZiAodHN1YnNhbXAgPT0gVEpTQU1QXzQ0MCkgdHN1YnNhbXAgPSBUSlNBTVBfNDIyOworICAgICAgfQorCisgICAgICBmb3IgKHJvdyA9IDAsIHRpbGUgPSAwOyByb3cgPCB0bnRpbGVzaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB0bnRpbGVzdzsgY29sKyssIHRpbGUrKykgeworICAgICAgICAgIHRbdGlsZV0uci53ID0gbWluKHR0aWxldywgdHcgLSBjb2wgKiB0dGlsZXcpOworICAgICAgICAgIHRbdGlsZV0uci5oID0gbWluKHR0aWxlaCwgdGggLSByb3cgKiB0dGlsZWgpOworICAgICAgICAgIHRbdGlsZV0uci54ID0gY29sICogdHRpbGV3OworICAgICAgICAgIHRbdGlsZV0uci55ID0gcm93ICogdHRpbGVoOworICAgICAgICAgIHRbdGlsZV0ub3AgPSB4Zm9ybU9wOworICAgICAgICAgIHRbdGlsZV0ub3B0aW9ucyA9IHhmb3JtT3B0IHwgVEpYT1BUX1RSSU07CisgICAgICAgICAgdFt0aWxlXS5jdXN0b21GaWx0ZXIgPSBjdXN0b21GaWx0ZXI7CisgICAgICAgICAgaWYgKHRbdGlsZV0ub3B0aW9ucyAmIFRKWE9QVF9OT09VVFBVVCAmJiBqcGVnQnVmW3RpbGVdKSB7CisgICAgICAgICAgICB0akZyZWUoanBlZ0J1Zlt0aWxlXSk7ICBqcGVnQnVmW3RpbGVdID0gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaXRlciA9IC0xOworICAgICAgZWxhcHNlZCA9IDAuOworICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3RhcnQgPSBnZXRUaW1lKCk7CisgICAgICAgIGlmICh0alRyYW5zZm9ybShoYW5kbGUsIHNyY0J1Ziwgc3JjU2l6ZSwgdG50aWxlc3cgKiB0bnRpbGVzaCwganBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdTaXplLCB0LCBmbGFncykgPT0gLTEpCisgICAgICAgICAgX3Rocm93dGooImV4ZWN1dGluZyB0alRyYW5zZm9ybSgpIik7CisgICAgICAgIGVsYXBzZWQgKz0gZ2V0VGltZSgpIC0gc3RhcnQ7CisgICAgICAgIGlmIChpdGVyID49IDApIHsKKyAgICAgICAgICBpdGVyKys7CisgICAgICAgICAgaWYgKGVsYXBzZWQgPj0gYmVuY2hUaW1lKSBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChlbGFwc2VkID49IHdhcm11cCkgeworICAgICAgICAgIGl0ZXIgPSAwOworICAgICAgICAgIGVsYXBzZWQgPSAwLjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmcmVlKHQpOyAgdCA9IE5VTEw7CisKKyAgICAgIGZvciAodGlsZSA9IDAsIHRvdGFsSnBlZ1NpemUgPSAwOyB0aWxlIDwgdG50aWxlc3cgKiB0bnRpbGVzaDsgdGlsZSsrKQorICAgICAgICB0b3RhbEpwZWdTaXplICs9IGpwZWdTaXplW3RpbGVdOworCisgICAgICBpZiAocXVpZXQpIHsKKyAgICAgICAgcHJpbnRmKCIlLTZzJXMlLTZzJXMiLAorICAgICAgICAgICAgICAgc2lnZmlnKChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuIC8gZWxhcHNlZCwgNCwgdGVtcFN0ciwgODApLAorICAgICAgICAgICAgICAgcXVpZXQgPT0gMiA/ICJcbiIgOiAiICAiLAorICAgICAgICAgICAgICAgc2lnZmlnKChkb3VibGUpKHcgKiBoICogcHMpIC8gKGRvdWJsZSl0b3RhbEpwZWdTaXplLCA0LAorICAgICAgICAgICAgICAgICAgICAgIHRlbXBTdHIyLCA4MCksCisgICAgICAgICAgICAgICBxdWlldCA9PSAyID8gIlxuIiA6ICIgICIpOworICAgICAgfSBlbHNlIGlmICghcXVpZXQpIHsKKyAgICAgICAgcHJpbnRmKCJUcmFuc2Zvcm0gICAgIC0tPiBGcmFtZSByYXRlOiAgICAgICAgICVmIGZwc1xuIiwKKyAgICAgICAgICAgICAgIDEuMCAvIGVsYXBzZWQpOworICAgICAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgIE91dHB1dCBpbWFnZSBzaXplOiAgJWx1IGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgdG90YWxKcGVnU2l6ZSk7CisgICAgICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gcmF0aW86ICAlZjoxXG4iLAorICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXRvdGFsSnBlZ1NpemUpOworICAgICAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgIFRocm91Z2hwdXQ6ICAgICAgICAgJWYgTWVnYXBpeGVscy9zZWNcbiIsCisgICAgICAgICAgICAgICAoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAvIGVsYXBzZWQpOworICAgICAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgIE91dHB1dCBiaXQgc3RyZWFtOiAgJWYgTWVnYWJpdHMvc2VjXG4iLAorICAgICAgICAgICAgICAgKGRvdWJsZSl0b3RhbEpwZWdTaXplICogOC4gLyAxMDAwMDAwLiAvIGVsYXBzZWQpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAocXVpZXQgPT0gMSkgcHJpbnRmKCJOL0EgICAgIE4vQSAgICAgIik7CisgICAgICB0akZyZWUoanBlZ0J1ZlswXSk7CisgICAgICBqcGVnQnVmWzBdID0gTlVMTDsKKyAgICAgIGRlY29tcHNyYyA9IDE7CisgICAgfQorCisgICAgaWYgKHcgPT0gdGlsZXcpIHR0aWxldyA9IHR3OworICAgIGlmIChoID09IHRpbGVoKSB0dGlsZWggPSB0aDsKKyAgICBpZiAoISh4Zm9ybU9wdCAmIFRKWE9QVF9OT09VVFBVVCkpIHsKKyAgICAgIGlmIChkZWNvbXAoTlVMTCwgZGVjb21wc3JjID8gJnNyY0J1ZiA6IGpwZWdCdWYsCisgICAgICAgICAgICAgICAgIGRlY29tcHNyYyA/ICZzcmNTaXplIDoganBlZ1NpemUsIE5VTEwsIHR3LCB0aCwgdHN1YnNhbXAsIDAsCisgICAgICAgICAgICAgICAgIGZpbGVOYW1lLCB0dGlsZXcsIHR0aWxlaCkgPT0gLTEpCisgICAgICAgIGdvdG8gYmFpbG91dDsKKyAgICB9IGVsc2UgaWYgKHF1aWV0ID09IDEpIHByaW50ZigiTi9BXG4iKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudGlsZXN3ICogbnRpbGVzaDsgaSsrKSB7CisgICAgICB0akZyZWUoanBlZ0J1ZltpXSk7ICBqcGVnQnVmW2ldID0gTlVMTDsKKyAgICB9CisgICAgZnJlZShqcGVnQnVmKTsgIGpwZWdCdWYgPSBOVUxMOworICAgIGlmIChqcGVnU2l6ZSkgeyBmcmVlKGpwZWdTaXplKTsgIGpwZWdTaXplID0gTlVMTDsgfQorCisgICAgaWYgKHRpbGV3ID09IHcgJiYgdGlsZWggPT0gaCkgYnJlYWs7CisgIH0KKworYmFpbG91dDoKKyAgaWYgKGZpbGUpIHsgZmNsb3NlKGZpbGUpOyAgZmlsZSA9IE5VTEw7IH0KKyAgaWYgKGpwZWdCdWYpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnRpbGVzdyAqIG50aWxlc2g7IGkrKykgeworICAgICAgaWYgKGpwZWdCdWZbaV0pIHRqRnJlZShqcGVnQnVmW2ldKTsKKyAgICAgIGpwZWdCdWZbaV0gPSBOVUxMOworICAgIH0KKyAgICBmcmVlKGpwZWdCdWYpOyAganBlZ0J1ZiA9IE5VTEw7CisgIH0KKyAgaWYgKGpwZWdTaXplKSB7IGZyZWUoanBlZ1NpemUpOyAganBlZ1NpemUgPSBOVUxMOyB9CisgIGlmIChzcmNCdWYpIHsgZnJlZShzcmNCdWYpOyAgc3JjQnVmID0gTlVMTDsgfQorICBpZiAodCkgeyBmcmVlKHQpOyAgdCA9IE5VTEw7IH0KKyAgaWYgKGhhbmRsZSkgeyB0akRlc3Ryb3koaGFuZGxlKTsgIGhhbmRsZSA9IE5VTEw7IH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCit2b2lkIHVzYWdlKGNoYXIgKnByb2dOYW1lKQoreworICBpbnQgaTsKKworICBwcmludGYoIlVTQUdFOiAlc1xuIiwgcHJvZ05hbWUpOworICBwcmludGYoIiAgICAgICA8SW5wdXRmaWxlIChCTVB8UFBNKT4gPFF1YWxpdHk+IFtvcHRpb25zXVxuXG4iKTsKKyAgcHJpbnRmKCIgICAgICAgJXNcbiIsIHByb2dOYW1lKTsKKyAgcHJpbnRmKCIgICAgICAgPElucHV0ZmlsZSAoSlBHKT4gW29wdGlvbnNdXG5cbiIpOworICBwcmludGYoIk9wdGlvbnM6XG5cbiIpOworICBwcmludGYoIi1hbGxvYyA9IER5bmFtaWNhbGx5IGFsbG9jYXRlIEpQRUcgaW1hZ2UgYnVmZmVyc1xuIik7CisgIHByaW50ZigiLWJtcCA9IEdlbmVyYXRlIG91dHB1dCBpbWFnZXMgaW4gV2luZG93cyBCaXRtYXAgZm9ybWF0IChkZWZhdWx0ID0gUFBNKVxuIik7CisgIHByaW50ZigiLWJvdHRvbXVwID0gVGVzdCBib3R0b20tdXAgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvblxuIik7CisgIHByaW50ZigiLXRpbGUgPSBUZXN0IHBlcmZvcm1hbmNlIG9mIHRoZSBjb2RlYyB3aGVuIHRoZSBpbWFnZSBpcyBlbmNvZGVkIGFzIHNlcGFyYXRlXG4iKTsKKyAgcHJpbnRmKCIgICAgIHRpbGVzIG9mIHZhcnlpbmcgc2l6ZXMuXG4iKTsKKyAgcHJpbnRmKCItcmdiLCAtYmdyLCAtcmdieCwgLWJncngsIC14YmdyLCAteHJnYiA9XG4iKTsKKyAgcHJpbnRmKCIgICAgIFRlc3QgdGhlIHNwZWNpZmllZCBjb2xvciBjb252ZXJzaW9uIHBhdGggaW4gdGhlIGNvZGVjIChkZWZhdWx0ID0gQkdSKVxuIik7CisgIHByaW50ZigiLWNteWsgPSBJbmRpcmVjdGx5IHRlc3QgWUNDSyBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gKHRoZSBzb3VyY2VcbiIpOworICBwcmludGYoIiAgICAgYW5kIGRlc3RpbmF0aW9uIGJpdG1hcHMgYXJlIHN0aWxsIFJHQi4gIFRoZSBjb252ZXJzaW9uIGlzIGRvbmVcbiIpOworICBwcmludGYoIiAgICAgaW50ZXJuYWxseSBwcmlvciB0byBjb21wcmVzc2lvbiBvciBhZnRlciBkZWNvbXByZXNzaW9uLilcbiIpOworICBwcmludGYoIi1mYXN0dXBzYW1wbGUgPSBVc2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0gYXZhaWxhYmxlIGluXG4iKTsKKyAgcHJpbnRmKCIgICAgIHRoZSB1bmRlcmx5aW5nIGNvZGVjXG4iKTsKKyAgcHJpbnRmKCItZmFzdGRjdCA9IFVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG1zIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZ1xuIik7CisgIHByaW50ZigiICAgICBjb2RlY1xuIik7CisgIHByaW50ZigiLWFjY3VyYXRlZGN0ID0gVXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobXMgYXZhaWxhYmxlIGluIHRoZVxuIik7CisgIHByaW50ZigiICAgICB1bmRlcmx5aW5nIGNvZGVjXG4iKTsKKyAgcHJpbnRmKCItcHJvZ3Jlc3NpdmUgPSBVc2UgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmcgaW4gSlBFRyBpbWFnZXMgZ2VuZXJhdGVkIGJ5XG4iKTsKKyAgcHJpbnRmKCIgICAgIGNvbXByZXNzaW9uIGFuZCB0cmFuc2Zvcm0gb3BlcmF0aW9ucy5cbiIpOworICBwcmludGYoIi1zdWJzYW1wIDxzPiA9IFdoZW4gdGVzdGluZyBKUEVHIGNvbXByZXNzaW9uLCB0aGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGxldmVsXG4iKTsKKyAgcHJpbnRmKCIgICAgIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIHVzZSAoPHM+ID0gNDQ0LCA0MjIsIDQ0MCwgNDIwLCA0MTEsIG9yXG4iKTsKKyAgcHJpbnRmKCIgICAgIEdSQVkpLiAgVGhlIGRlZmF1bHQgaXMgdG8gdGVzdCBHcmF5c2NhbGUsIDQ6MjowLCA0OjI6MiwgYW5kIDQ6NDo0IGluXG4iKTsKKyAgcHJpbnRmKCIgICAgIHNlcXVlbmNlLlxuIik7CisgIHByaW50ZigiLXF1aWV0ID0gT3V0cHV0IHJlc3VsdHMgaW4gdGFidWxhciByYXRoZXIgdGhhbiB2ZXJib3NlIGZvcm1hdFxuIik7CisgIHByaW50ZigiLXl1diA9IFRlc3QgWVVWIGVuY29kaW5nL2RlY29kaW5nIGZ1bmN0aW9uc1xuIik7CisgIHByaW50ZigiLXl1dnBhZCA8cD4gPSBJZiB0ZXN0aW5nIFlVViBlbmNvZGluZy9kZWNvZGluZywgdGhpcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZlxuIik7CisgIHByaW50ZigiICAgICBieXRlcyB0byB3aGljaCBlYWNoIHJvdyBvZiBlYWNoIHBsYW5lIGluIHRoZSBpbnRlcm1lZGlhdGUgWVVWIGltYWdlIGlzXG4iKTsKKyAgcHJpbnRmKCIgICAgIHBhZGRlZCAoZGVmYXVsdCA9IDEpXG4iKTsKKyAgcHJpbnRmKCItc2NhbGUgTS9OID0gU2NhbGUgZG93biB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBkZWNvbXByZXNzZWQgSlBFRyBpbWFnZSBieSBhXG4iKTsKKyAgcHJpbnRmKCIgICAgIGZhY3RvciBvZiBNL04gKE0vTiA9ICIpOworICBmb3IgKGkgPSAwOyBpIDwgbnNmOyBpKyspIHsKKyAgICBwcmludGYoIiVkLyVkIiwgc2NhbGluZ0ZhY3RvcnNbaV0ubnVtLCBzY2FsaW5nRmFjdG9yc1tpXS5kZW5vbSk7CisgICAgaWYgKG5zZiA9PSAyICYmIGkgIT0gbnNmIC0gMSkgcHJpbnRmKCIgb3IgIik7CisgICAgZWxzZSBpZiAobnNmID4gMikgeworICAgICAgaWYgKGkgIT0gbnNmIC0gMSkgcHJpbnRmKCIsICIpOworICAgICAgaWYgKGkgPT0gbnNmIC0gMikgcHJpbnRmKCJvciAiKTsKKyAgICB9CisgICAgaWYgKGkgJSA4ID09IDAgJiYgaSAhPSAwKSBwcmludGYoIlxuICAgICAiKTsKKyAgfQorICBwcmludGYoIilcbiIpOworICBwcmludGYoIi1oZmxpcCwgLXZmbGlwLCAtdHJhbnNwb3NlLCAtdHJhbnN2ZXJzZSwgLXJvdDkwLCAtcm90MTgwLCAtcm90MjcwID1cbiIpOworICBwcmludGYoIiAgICAgUGVyZm9ybSB0aGUgY29ycmVzcG9uZGluZyBsb3NzbGVzcyB0cmFuc2Zvcm0gcHJpb3IgdG9cbiIpOworICBwcmludGYoIiAgICAgZGVjb21wcmVzc2lvbiAodGhlc2Ugb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlKVxuIik7CisgIHByaW50ZigiLWdyYXlzY2FsZSA9IFBlcmZvcm0gbG9zc2xlc3MgZ3JheXNjYWxlIGNvbnZlcnNpb24gcHJpb3IgdG8gZGVjb21wcmVzc2lvblxuIik7CisgIHByaW50ZigiICAgICB0ZXN0IChjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgb3RoZXIgdHJhbnNmb3JtcyBhYm92ZSlcbiIpOworICBwcmludGYoIi1jb3B5bm9uZSA9IERvIG5vdCBjb3B5IGFueSBleHRyYSBtYXJrZXJzIChpbmNsdWRpbmcgRVhJRiBhbmQgSUNDIHByb2ZpbGUgZGF0YSlcbiIpOworICBwcmludGYoIiAgICAgd2hlbiB0cmFuc2Zvcm1pbmcgdGhlIGltYWdlLlxuIik7CisgIHByaW50ZigiLWJlbmNodGltZSA8dD4gPSBSdW4gZWFjaCBiZW5jaG1hcmsgZm9yIGF0IGxlYXN0IDx0PiBzZWNvbmRzIChkZWZhdWx0ID0gNS4wKVxuIik7CisgIHByaW50ZigiLXdhcm11cCA8dD4gPSBSdW4gZWFjaCBiZW5jaG1hcmsgZm9yIDx0PiBzZWNvbmRzIChkZWZhdWx0ID0gMS4wKSBwcmlvciB0b1xuIik7CisgIHByaW50ZigiICAgICBzdGFydGluZyB0aGUgdGltZXIsIGluIG9yZGVyIHRvIHByaW1lIHRoZSBjYWNoZXMgYW5kIHRodXMgaW1wcm92ZSB0aGVcbiIpOworICBwcmludGYoIiAgICAgY29uc2lzdGVuY3kgb2YgdGhlIHJlc3VsdHMuXG4iKTsKKyAgcHJpbnRmKCItY29tcG9ubHkgPSBTdG9wIGFmdGVyIHJ1bm5pbmcgY29tcHJlc3Npb24gdGVzdHMuICBEbyBub3QgdGVzdCBkZWNvbXByZXNzaW9uLlxuIik7CisgIHByaW50ZigiLW5vd3JpdGUgPSBEbyBub3Qgd3JpdGUgcmVmZXJlbmNlIG9yIG91dHB1dCBpbWFnZXMgKGltcHJvdmVzIGNvbnNpc3RlbmN5IG9mXG4iKTsKKyAgcHJpbnRmKCIgICAgIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cy4pXG4iKTsKKyAgcHJpbnRmKCItc3RvcG9ud2FybmluZyA9IEltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIHRoZSBjdXJyZW50XG4iKTsKKyAgcHJpbnRmKCIgICAgIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24vdHJhbnNmb3JtIG9wZXJhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBjb2RlY1xuIik7CisgIHByaW50ZigiICAgICB0aHJvd3MgYSB3YXJuaW5nIChub24tZmF0YWwgZXJyb3IpXG5cbiIpOworICBwcmludGYoIk5PVEU6ICBJZiB0aGUgcXVhbGl0eSBpcyBzcGVjaWZpZWQgYXMgYSByYW5nZSAoZS5nLiA5MC0xMDApLCBhIHNlcGFyYXRlXG4iKTsKKyAgcHJpbnRmKCJ0ZXN0IHdpbGwgYmUgcGVyZm9ybWVkIGZvciBhbGwgcXVhbGl0eSB2YWx1ZXMgaW4gdGhlIHJhbmdlLlxuXG4iKTsKKyAgZXhpdCgxKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICB1bnNpZ25lZCBjaGFyICpzcmNCdWYgPSBOVUxMOworICBpbnQgdyA9IDAsIGggPSAwLCBpLCBqLCBtaW5RdWFsID0gLTEsIG1heFF1YWwgPSAtMTsKKyAgY2hhciAqdGVtcDsKKyAgaW50IG1pbkFyZyA9IDIsIHJldHZhbCA9IDAsIHN1YnNhbXAgPSAtMTsKKworICBpZiAoKHNjYWxpbmdGYWN0b3JzID0gdGpHZXRTY2FsaW5nRmFjdG9ycygmbnNmKSkgPT0gTlVMTCB8fCBuc2YgPT0gMCkKKyAgICBfdGhyb3coImV4ZWN1dGluZyB0akdldFNjYWxpbmdGYWN0b3JzKCkiLCB0akdldEVycm9yU3RyKCkpOworCisgIGlmIChhcmdjIDwgbWluQXJnKSB1c2FnZShhcmd2WzBdKTsKKworICB0ZW1wID0gc3RycmNocihhcmd2WzFdLCAnLicpOworICBpZiAodGVtcCAhPSBOVUxMKSB7CisgICAgaWYgKCFzdHJjYXNlY21wKHRlbXAsICIuYm1wIikpIGV4dCA9ICJibXAiOworICAgIGlmICghc3RyY2FzZWNtcCh0ZW1wLCAiLmpwZyIpIHx8ICFzdHJjYXNlY21wKHRlbXAsICIuanBlZyIpKQorICAgICAgZGVjb21wT25seSA9IDE7CisgIH0KKworICBwcmludGYoIlxuIik7CisKKyAgaWYgKCFkZWNvbXBPbmx5KSB7CisgICAgbWluQXJnID0gMzsKKyAgICBpZiAoYXJnYyA8IG1pbkFyZykgdXNhZ2UoYXJndlswXSk7CisgICAgaWYgKChtaW5RdWFsID0gYXRvaShhcmd2WzJdKSkgPCAxIHx8IG1pblF1YWwgPiAxMDApIHsKKyAgICAgIHB1dHMoIkVSUk9SOiBRdWFsaXR5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAuIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBpZiAoKHRlbXAgPSBzdHJjaHIoYXJndlsyXSwgJy0nKSkgIT0gTlVMTCAmJiBzdHJsZW4odGVtcCkgPiAxICYmCisgICAgICAgIHNzY2FuZigmdGVtcFsxXSwgIiVkIiwgJm1heFF1YWwpID09IDEgJiYgbWF4UXVhbCA+IG1pblF1YWwgJiYKKyAgICAgICAgbWF4UXVhbCA+PSAxICYmIG1heFF1YWwgPD0gMTAwKSB7fQorICAgIGVsc2UgbWF4UXVhbCA9IG1pblF1YWw7CisgIH0KKworICBpZiAoYXJnYyA+IG1pbkFyZykgeworICAgIGZvciAoaSA9IG1pbkFyZzsgaSA8IGFyZ2M7IGkrKykgeworICAgICAgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItdGlsZSIpKSB7CisgICAgICAgIGRvVGlsZSA9IDE7ICB4Zm9ybU9wdCB8PSBUSlhPUFRfQ1JPUDsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1mYXN0dXBzYW1wbGUiKSkgeworICAgICAgICBwcmludGYoIlVzaW5nIGZhc3QgdXBzYW1wbGluZyBjb2RlXG5cbiIpOworICAgICAgICBmbGFncyB8PSBUSkZMQUdfRkFTVFVQU0FNUExFOworICAgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWZhc3RkY3QiKSkgeworICAgICAgICBwcmludGYoIlVzaW5nIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtXG5cbiIpOworICAgICAgICBmbGFncyB8PSBUSkZMQUdfRkFTVERDVDsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1hY2N1cmF0ZWRjdCIpKSB7CisgICAgICAgIHByaW50ZigiVXNpbmcgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG1cblxuIik7CisgICAgICAgIGZsYWdzIHw9IFRKRkxBR19BQ0NVUkFURURDVDsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1wcm9ncmVzc2l2ZSIpKSB7CisgICAgICAgIHByaW50ZigiVXNpbmcgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmdcblxuIik7CisgICAgICAgIGZsYWdzIHw9IFRKRkxBR19QUk9HUkVTU0lWRTsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1yZ2IiKSkKKyAgICAgICAgcGYgPSBUSlBGX1JHQjsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItcmdieCIpKQorICAgICAgICBwZiA9IFRKUEZfUkdCWDsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItYmdyIikpCisgICAgICAgIHBmID0gVEpQRl9CR1I7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWJncngiKSkKKyAgICAgICAgcGYgPSBUSlBGX0JHUlg7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLXhiZ3IiKSkKKyAgICAgICAgcGYgPSBUSlBGX1hCR1I7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLXhyZ2IiKSkKKyAgICAgICAgcGYgPSBUSlBGX1hSR0I7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWNteWsiKSkKKyAgICAgICAgcGYgPSBUSlBGX0NNWUs7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWJvdHRvbXVwIikpCisgICAgICAgIGZsYWdzIHw9IFRKRkxBR19CT1RUT01VUDsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItcXVpZXQiKSkKKyAgICAgICAgcXVpZXQgPSAxOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1xcSIpKQorICAgICAgICBxdWlldCA9IDI7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLXNjYWxlIikgJiYgaSA8IGFyZ2MgLSAxKSB7CisgICAgICAgIGludCB0ZW1wMSA9IDAsIHRlbXAyID0gMCwgbWF0Y2ggPSAwOworCisgICAgICAgIGlmIChzc2NhbmYoYXJndlsrK2ldLCAiJWQvJWQiLCAmdGVtcDEsICZ0ZW1wMikgPT0gMikgeworICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuc2Y7IGorKykgeworICAgICAgICAgICAgaWYgKChkb3VibGUpdGVtcDEgLyAoZG91YmxlKXRlbXAyID09CisgICAgICAgICAgICAgICAgKGRvdWJsZSlzY2FsaW5nRmFjdG9yc1tqXS5udW0gLworICAgICAgICAgICAgICAgIChkb3VibGUpc2NhbGluZ0ZhY3RvcnNbal0uZGVub20pIHsKKyAgICAgICAgICAgICAgc2YgPSBzY2FsaW5nRmFjdG9yc1tqXTsKKyAgICAgICAgICAgICAgbWF0Y2ggPSAxOyAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghbWF0Y2gpIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICB9IGVsc2UgdXNhZ2UoYXJndlswXSk7CisgICAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItaGZsaXAiKSkKKyAgICAgICAgeGZvcm1PcCA9IFRKWE9QX0hGTElQOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi12ZmxpcCIpKQorICAgICAgICB4Zm9ybU9wID0gVEpYT1BfVkZMSVA7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLXRyYW5zcG9zZSIpKQorICAgICAgICB4Zm9ybU9wID0gVEpYT1BfVFJBTlNQT1NFOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi10cmFuc3ZlcnNlIikpCisgICAgICAgIHhmb3JtT3AgPSBUSlhPUF9UUkFOU1ZFUlNFOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1yb3Q5MCIpKQorICAgICAgICB4Zm9ybU9wID0gVEpYT1BfUk9UOTA7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLXJvdDE4MCIpKQorICAgICAgICB4Zm9ybU9wID0gVEpYT1BfUk9UMTgwOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1yb3QyNzAiKSkKKyAgICAgICAgeGZvcm1PcCA9IFRKWE9QX1JPVDI3MDsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItZ3JheXNjYWxlIikpCisgICAgICAgIHhmb3JtT3B0IHw9IFRKWE9QVF9HUkFZOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1jdXN0b20iKSkKKyAgICAgICAgY3VzdG9tRmlsdGVyID0gZHVtbXlEQ1RGaWx0ZXI7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLW5vb3V0cHV0IikpCisgICAgICAgIHhmb3JtT3B0IHw9IFRKWE9QVF9OT09VVFBVVDsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItY29weW5vbmUiKSkKKyAgICAgICAgeGZvcm1PcHQgfD0gVEpYT1BUX0NPUFlOT05FOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1iZW5jaHRpbWUiKSAmJiBpIDwgYXJnYyAtIDEpIHsKKyAgICAgICAgZG91YmxlIHRlbXAgPSBhdG9mKGFyZ3ZbKytpXSk7CisKKyAgICAgICAgaWYgKHRlbXAgPiAwLjApIGJlbmNoVGltZSA9IHRlbXA7CisgICAgICAgIGVsc2UgdXNhZ2UoYXJndlswXSk7CisgICAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItd2FybXVwIikgJiYgaSA8IGFyZ2MgLSAxKSB7CisgICAgICAgIGRvdWJsZSB0ZW1wID0gYXRvZihhcmd2WysraV0pOworCisgICAgICAgIGlmICh0ZW1wID49IDAuMCkgd2FybXVwID0gdGVtcDsKKyAgICAgICAgZWxzZSB1c2FnZShhcmd2WzBdKTsKKyAgICAgICAgcHJpbnRmKCJXYXJtdXAgdGltZSA9ICUuMWYgc2Vjb25kc1xuXG4iLCB3YXJtdXApOworICAgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWFsbG9jIikpCisgICAgICAgIGZsYWdzICY9ICh+VEpGTEFHX05PUkVBTExPQyk7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWJtcCIpKQorICAgICAgICBleHQgPSAiYm1wIjsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICIteXV2IikpIHsKKyAgICAgICAgcHJpbnRmKCJUZXN0aW5nIFlVViBwbGFuYXIgZW5jb2RpbmcvZGVjb2RpbmdcblxuIik7CisgICAgICAgIGRvWVVWID0gMTsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi15dXZwYWQiKSAmJiBpIDwgYXJnYyAtIDEpIHsKKyAgICAgICAgaW50IHRlbXAgPSBhdG9pKGFyZ3ZbKytpXSk7CisKKyAgICAgICAgaWYgKHRlbXAgPj0gMSkgeXV2UGFkID0gdGVtcDsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1zdWJzYW1wIikgJiYgaSA8IGFyZ2MgLSAxKSB7CisgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKHRvdXBwZXIoYXJndltpXVswXSkgPT0gJ0cnKSBzdWJzYW1wID0gVEpTQU1QX0dSQVk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGludCB0ZW1wID0gYXRvaShhcmd2W2ldKTsKKworICAgICAgICAgIHN3aXRjaCAodGVtcCkgeworICAgICAgICAgIGNhc2UgNDQ0OiAgc3Vic2FtcCA9IFRKU0FNUF80NDQ7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDQyMjogIHN1YnNhbXAgPSBUSlNBTVBfNDIyOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSA0NDA6ICBzdWJzYW1wID0gVEpTQU1QXzQ0MDsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDIwOiAgc3Vic2FtcCA9IFRKU0FNUF80MjA7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDQxMTogIHN1YnNhbXAgPSBUSlNBTVBfNDExOyAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItY29tcG9ubHkiKSkKKyAgICAgICAgY29tcE9ubHkgPSAxOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1ub3dyaXRlIikpCisgICAgICAgIGRvV3JpdGUgPSAwOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1zdG9wb253YXJuaW5nIikpCisgICAgICAgIGZsYWdzIHw9IFRKRkxBR19TVE9QT05XQVJOSU5HOworICAgICAgZWxzZSB1c2FnZShhcmd2WzBdKTsKKyAgICB9CisgIH0KKworICBpZiAoKHNmLm51bSAhPSAxIHx8IHNmLmRlbm9tICE9IDEpICYmIGRvVGlsZSkgeworICAgIHByaW50ZigiRGlzYWJsaW5nIHRpbGVkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVzdHMsIGJlY2F1c2UgdGhvc2UgdGVzdHMgZG8gbm90XG4iKTsKKyAgICBwcmludGYoIndvcmsgd2hlbiBzY2FsZWQgZGVjb21wcmVzc2lvbiBpcyBlbmFibGVkLlxuIik7CisgICAgZG9UaWxlID0gMDsKKyAgfQorCisgIGlmICgoZmxhZ3MgJiBUSkZMQUdfTk9SRUFMTE9DKSA9PSAwICYmIGRvVGlsZSkgeworICAgIHByaW50ZigiRGlzYWJsaW5nIHRpbGVkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVzdHMsIGJlY2F1c2UgdGhvc2UgdGVzdHMgZG8gbm90XG4iKTsKKyAgICBwcmludGYoIndvcmsgd2hlbiBkeW5hbWljIEpQRUcgYnVmZmVyIGFsbG9jYXRpb24gaXMgZW5hYmxlZC5cblxuIik7CisgICAgZG9UaWxlID0gMDsKKyAgfQorCisgIGlmICghZGVjb21wT25seSkgeworICAgIGlmICgoc3JjQnVmID0gdGpMb2FkSW1hZ2UoYXJndlsxXSwgJncsIDEsICZoLCAmcGYsIGZsYWdzKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd3RqZygibG9hZGluZyBiaXRtYXAiKTsKKyAgICB0ZW1wID0gc3RycmNocihhcmd2WzFdLCAnLicpOworICAgIGlmICh0ZW1wICE9IE5VTEwpICp0ZW1wID0gJ1wwJzsKKyAgfQorCisgIGlmIChxdWlldCA9PSAxICYmICFkZWNvbXBPbmx5KSB7CisgICAgcHJpbnRmKCJBbGwgcGVyZm9ybWFuY2UgdmFsdWVzIGluIE1waXhlbHMvc2VjXG5cbiIpOworICAgIHByaW50ZigiQml0bWFwICAgICBKUEVHICAgICBKUEVHICAlcyAgJXMgICAiLAorICAgICAgICAgICBkb1RpbGUgPyAiVGlsZSAiIDogIkltYWdlIiwgZG9UaWxlID8gIlRpbGUgIiA6ICJJbWFnZSIpOworICAgIGlmIChkb1lVVikgcHJpbnRmKCJFbmNvZGUgICIpOworICAgIHByaW50ZigiQ29tcCAgICBDb21wICAgIERlY29tcCAgIik7CisgICAgaWYgKGRvWVVWKSBwcmludGYoIkRlY29kZSIpOworICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYoIkZvcm1hdCAgICAgU3Vic2FtcCAgUXVhbCAgV2lkdGggIEhlaWdodCAgIik7CisgICAgaWYgKGRvWVVWKSBwcmludGYoIlBlcmYgICAgIik7CisgICAgcHJpbnRmKCJQZXJmICAgIFJhdGlvICAgUGVyZiAgICAiKTsKKyAgICBpZiAoZG9ZVVYpIHByaW50ZigiUGVyZiIpOworICAgIHByaW50ZigiXG5cbiIpOworICB9CisKKyAgaWYgKGRlY29tcE9ubHkpIHsKKyAgICBkZWNvbXBUZXN0KGFyZ3ZbMV0pOworICAgIHByaW50ZigiXG4iKTsKKyAgICBnb3RvIGJhaWxvdXQ7CisgIH0KKyAgaWYgKHN1YnNhbXAgPj0gMCAmJiBzdWJzYW1wIDwgVEpfTlVNU0FNUCkgeworICAgIGZvciAoaSA9IG1heFF1YWw7IGkgPj0gbWluUXVhbDsgaS0tKQorICAgICAgZnVsbFRlc3Qoc3JjQnVmLCB3LCBoLCBzdWJzYW1wLCBpLCBhcmd2WzFdKTsKKyAgICBwcmludGYoIlxuIik7CisgIH0gZWxzZSB7CisgICAgaWYgKHBmICE9IFRKUEZfQ01ZSykgeworICAgICAgZm9yIChpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICAgIGZ1bGxUZXN0KHNyY0J1ZiwgdywgaCwgVEpTQU1QX0dSQVksIGksIGFyZ3ZbMV0pOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyAgICBmb3IgKGkgPSBtYXhRdWFsOyBpID49IG1pblF1YWw7IGktLSkKKyAgICAgIGZ1bGxUZXN0KHNyY0J1ZiwgdywgaCwgVEpTQU1QXzQyMCwgaSwgYXJndlsxXSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIGZvciAoaSA9IG1heFF1YWw7IGkgPj0gbWluUXVhbDsgaS0tKQorICAgICAgZnVsbFRlc3Qoc3JjQnVmLCB3LCBoLCBUSlNBTVBfNDIyLCBpLCBhcmd2WzFdKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgZm9yIChpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICBmdWxsVGVzdChzcmNCdWYsIHcsIGgsIFRKU0FNUF80NDQsIGksIGFyZ3ZbMV0pOworICAgIHByaW50ZigiXG4iKTsKKyAgfQorCitiYWlsb3V0OgorICBpZiAoc3JjQnVmKSB0akZyZWUoc3JjQnVmKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqYmVuY2h0ZXN0LmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpiZW5jaHRlc3QuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWMwOGIzNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqYmVuY2h0ZXN0LmluCkBAIC0wLDAgKzEsMjU2IEBACisjIS9iaW4vYmFzaAorCitzZXQgLXUKK3NldCAtZQordHJhcCBvbmV4aXQgSU5UCit0cmFwIG9uZXhpdCBURVJNCit0cmFwIG9uZXhpdCBFWElUCisKK29uZXhpdCgpCit7CisJaWYgWyAtZCAkT1VURElSIF07IHRoZW4KKwkJcm0gLXJmICRPVVRESVIKKwlmaQorfQorCitydW5tZSgpCit7CisJZWNobyBcKlwqXCogJCoKKwkkKgorfQorCitFWFQ9Ym1wCitJTUFHRVM9InZnbF81Njc0XzAwOTguJHtFWFR9IHZnbF82NDM0XzAwMThhLiR7RVhUfSB2Z2xfNjU0OF8wMDI2YS4ke0VYVH0gbmlnaHRzaG90X2lzb18xMDAuJHtFWFR9IgorSU1HRElSPUBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAL3Rlc3RpbWFnZXMKK09VVERJUj1gbWt0ZW1wIC1kIC90bXAvX190amJlbmNodGVzdF9vdXRwdXQuWFhYWFhYYAorRVhFRElSPUBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJACitCTVBBUkc9CitOU0FSRz0KK1lVVkFSRz0KK0FMTE9DPTAKK0FMTE9DQVJHPQorUFJPR0FSRz0KK2lmIFsgIiRFWFQiID0gImJtcCIgXTsgdGhlbiBCTVBBUkc9LWJtcDsgZmkKKworaWYgWyAtZCAkT1VURElSIF07IHRoZW4KKwlybSAtcmYgJE9VVERJUgorZmkKK21rZGlyIC1wICRPVVRESVIKKword2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworCWNhc2UgIiQxIiBpbgorCS15dXYpCisJCU5TQVJHPS1ub3Ntb290aAorCQlZVVZBUkc9LXl1dgorCisjIE5PVEU6IFRoZSBjb21iaW5hdGlvbiBvZiB0akVuY29kZVlVViooKSBhbmQgdGpDb21wcmVzc0Zyb21ZVVYqKCkgZG9lcyBub3QKKyMgYWx3YXlzIHByb2R1Y2UgYml0d2lzZS1pZGVudGljYWwgcmVzdWx0cyB0byB0akNvbXByZXNzKigpIGlmIHN1YnNhbXBsaW5nIGlzCisjIGVuYWJsZWQuICBJbiBib3RoIGNhc2VzLCBpZiB0aGUgaW1hZ2Ugd2lkdGggb3IgaGVpZ2h0IGFyZSBub3QgZXZlbmx5CisjIGRpdmlzaWJsZSBieSB0aGUgTUNVIHdpZHRoL2hlaWdodCwgdGhlbiB0aGUgYm90dG9tIGFuZC9vciByaWdodCBlZGdlIGFyZQorIyBleHBhbmRlZC4gIEhvd2V2ZXIsIHRoZSBsaWJqcGVnIGNvZGUgcGVyZm9ybXMgdGhpcyBleHBhbnNpb24gcHJpb3IgdG8KKyMgZG93bnNhbXBsaW5nLCBhbmQgVHVyYm9KUEVHIHBlcmZvcm1zIGl0IGluIHRqQ29tcHJlc3NGcm9tWVVWKigpLCB3aGljaCBpcworIyBhZnRlciBkb3duc2FtcGxpbmcuICBUaHVzLCB0aGUgdHdvIHdpbGwgYWdyZWUgb25seSBpZiB0aGUgd2lkdGgvaGVpZ2h0IGFsb25nCisjIGVhY2ggZG93bnNhbXBsZWQgZGltZW5zaW9uIGlzIGFuIG9kZCBudW1iZXIgb3IgaXMgZXZlbmx5IGRpdmlzaWJsZSBieSB0aGUgTUNVCisjIHdpZHRoL2hlaWdodC4gIFRoaXMgZGlzYWdyZWVtZW50IGJhc2ljYWxseSBhbW91bnRzIHRvIGEgcm91bmQtb2ZmIGVycm9yLCBidXQKKyMgdGhlcmUgaXMgbm8gZWFzeSB3YXkgYXJvdW5kIGl0LCBzbyBmb3Igbm93LCB3ZSBqdXN0IHRlc3QgdGhlIG9ubHkgaW1hZ2UgdGhhdAorIyB3b3Jrcy4gIChOT1RFOiBuaWdodHNob3RfaXNvXzEwMCBkb2VzIG5vdCBzdWZmZXIgZnJvbSB0aGUgYWJvdmUgaXNzdWUsIGJ1dAorIyBpdCBzdWZmZXJzIGZyb20gYW4gdW5yZWxhdGVkIHByb2JsZW0gd2hlcmVieSB0aGUgY29tYmluYXRpb24gb2YKKyMgdGpEZWNvbXByZXNzVG9ZVVYqKCkgYW5kIHRqRGVjb2RlWVVWKigpIGRvIG5vdCBwcm9kdWNlIGJpdHdpc2UtaWRlbnRpY2FsCisjIHJlc3VsdHMgdG8gdGpEZWNvbXByZXNzKigpIGlmIGRlY29tcHJlc3Npb24gc2NhbGluZyBpcyBlbmFibGVkLiAgVGhpcyBsYXR0ZXIKKyMgcGhlbm9tZW5vbiBpcyBub3QgeWV0IGZ1bGx5IHVuZGVyc3Rvb2QgYnV0IGlzIGFsc28gYmVsaWV2ZWQgdG8gYmUgc29tZSBzb3J0CisjIG9mIHJvdW5kLW9mZiBlcnJvci4pCisJCUlNQUdFUz0idmdsXzY1NDhfMDAyNmEuJHtFWFR9IgorCQk7OworCS1hbGxvYykKKwkJQUxMT0NBUkc9LWFsbG9jCisJCUFMTE9DPTEKKwkJOzsKKwktcHJvZ3Jlc3NpdmUpCisJCVBST0dBUkc9LXByb2dyZXNzaXZlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2V4ZWMgPiRFWEVESVIvdGpiZW5jaHRlc3QkWVVWQVJHJEFMTE9DQVJHJFBST0dBUkcubG9nCisKKyMgU3RhbmRhcmQgdGVzdHMKK2ZvciBpbWFnZSBpbiAkSU1BR0VTOyBkbworCisJY3AgJElNR0RJUi8kaW1hZ2UgJE9VVERJUgorCWJhc2VuYW1lPWBiYXNlbmFtZSAkaW1hZ2UgLiR7RVhUfWAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAkUFJPR0FSRyAtZ3JheXNjYWxlIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fR1JBWV9mYXN0X2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LiR7RVhUfQorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBmYXN0ICRQUk9HQVJHIC1zYW1wbGUgMngyIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDIwX2Zhc3RfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uJHtFWFR9CisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGZhc3QgJFBST0dBUkcgLXNhbXBsZSAyeDEgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80MjJfZmFzdF9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS4ke0VYVH0KKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAkUFJPR0FSRyAtc2FtcGxlIDF4MSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQ0NF9mYXN0X2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LiR7RVhUfQorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBpbnQgJFBST0dBUkcgLWdyYXlzY2FsZSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfYWNjdXJhdGVfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uJHtFWFR9CisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGludCAkUFJPR0FSRyAtc2FtcGxlIDJ4MiAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQyMF9hY2N1cmF0ZV9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS4ke0VYVH0KKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50ICRQUk9HQVJHIC1zYW1wbGUgMngxIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDIyX2FjY3VyYXRlX2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LiR7RVhUfQorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBpbnQgJFBST0dBUkcgLXNhbXBsZSAxeDEgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80NDRfYWNjdXJhdGVfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uJHtFWFR9CisJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiICROU0FSRyAkQk1QQVJHIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9kZWZhdWx0X2RqcGVnLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJcnVubWUgJEVYRURJUi9kanBlZyAtZGN0IGZhc3QgLXJnYiAkTlNBUkcgJEJNUEFSRyAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9kanBlZy4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLWRjdCBpbnQgLXJnYiAkTlNBUkcgJEJNUEFSRyAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fYWNjdXJhdGVfZGpwZWcuJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9hY2N1cmF0ZV9janBlZy5qcGcKKwlkb25lCisJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJcnVubWUgJEVYRURJUi9kanBlZyAtbm9zbW9vdGggJEJNUEFSRyAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZGVmYXVsdF9ub3Ntb290aF9kanBlZy4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLWRjdCBmYXN0IC1ub3Ntb290aCAkQk1QQVJHIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X25vc21vb3RoX2RqcGVnLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJcnVubWUgJEVYRURJUi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggJEJNUEFSRyAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fYWNjdXJhdGVfbm9zbW9vdGhfZGpwZWcuJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9hY2N1cmF0ZV9janBlZy5qcGcKKwlkb25lCisKKwkjIENvbXByZXNzaW9uCisJZm9yIGRjdCBpbiBhY2N1cmF0ZSBmYXN0OyBkbworCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAtJHtkY3R9ZGN0ICRZVVZBUkcgJEFMTE9DQVJHICRQUk9HQVJHCisJCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9janBlZy5qcGcKKwkJZG9uZQorCWRvbmUKKworCWZvciBkY3QgaW4gZmFzdCBhY2N1cmF0ZSBkZWZhdWx0OyBkbworCQlkY3Rhcmc9LSR7ZGN0fWRjdAorCQlpZiBbICIke2RjdH0iID0gImRlZmF1bHQiIF07IHRoZW4KKwkJCWRjdGFyZz0KKwkJZmkKKworCQkjIFRpbGVkIGNvbXByZXNzaW9uICYgZGVjb21wcmVzc2lvbgorCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAke2RjdGFyZ30gJFlVVkFSRyAkQUxMT0NBUkcgJFBST0dBUkcKKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQ7IGRvCisJCQlpZiBbICRBTExPQyA9IDEgXTsgdGhlbgorCQkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fZGpwZWcuJHtFWFR9CisJCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfQorCQkJZWxzZQorCQkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uJHtFWFR9IFwKKwkJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfTsgZG8KKwkJCQkJcnVubWUgY21wICRpICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fZGpwZWcuJHtFWFR9CisJCQkJCXJtICRpCisJCQkJZG9uZQorCQkJZmkKKwkJZG9uZQorCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAtZmFzdHVwc2FtcGxlICR7ZGN0YXJnfSAkWVVWQVJHICRBTExPQ0FSRyAkUFJPR0FSRworCQlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbworCQkJaWYgWyAkQUxMT0MgPSAxIF07IHRoZW4KKwkJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoX2RqcGVnLiR7RVhUfQorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0KKwkJCWVsc2UKKwkJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCisJCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCisJCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoX2RqcGVnLiR7RVhUfQorCQkJCQlybSAkaQorCQkJCWRvbmUKKwkJCWZpCisJCWRvbmUKKworCQkjIFRpbGVkIGRlY29tcHJlc3Npb24KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQ7IGRvCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAke2RjdGFyZ30gJFlVVkFSRyAkQUxMT0NBUkcgJFBST0dBUkcKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9kanBlZy4ke0VYVH0KKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9CisJCQllbHNlCisJCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS4ke0VYVH0gXAorCQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbworCQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9kanBlZy4ke0VYVH0KKwkJCQkJcm0gJGkKKwkJCQlkb25lCisJCQlmaQorCQlkb25lCisJCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAtZmFzdHVwc2FtcGxlICR7ZGN0YXJnfSAkWVVWQVJHICRBTExPQ0FSRyAkUFJPR0FSRworCQkJaWYgWyAkQUxMT0MgPSAxIF07IHRoZW4KKwkJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoX2RqcGVnLiR7RVhUfQorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0KKwkJCWVsc2UKKwkJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCisJCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCisJCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoX2RqcGVnLiR7RVhUfQorCQkJCQlybSAkaQorCQkJCWRvbmUKKwkJCWZpCisJCWRvbmUKKwlkb25lCisKKwkjIFNjYWxlZCBkZWNvbXByZXNzaW9uCisJZm9yIHNjYWxlIGluIDJfMSAxNV84IDdfNCAxM184IDNfMiAxMV84IDVfNCA5XzggN184IDNfNCA1XzggMV8yIDNfOCAxXzQgMV84OyBkbworCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgJ3MvXF8vXC8vZydgCisJCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCQlydW5tZSAkRVhFRElSL2RqcGVnIC1yZ2IgLXNjYWxlICR7c2NhbGVhcmd9ICROU0FSRyAkQk1QQVJHIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfV9kanBlZy4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtc2NhbGUgJHtzY2FsZWFyZ30gLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgJFlVVkFSRyAkQUxMT0NBUkcgJFBST0dBUkcKKwkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzY2FsZX1fZGpwZWcuJHtFWFR9CisJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LiR7RVhUfQorCQlkb25lCisJZG9uZQorCisJIyBUcmFuc2Zvcm1zCisJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJcnVubWUgJEVYRURJUi9qcGVndHJhbiAtZmxpcCBob3Jpem9udGFsIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9oZmxpcF9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcKKwkJcnVubWUgJEVYRURJUi9qcGVndHJhbiAtZmxpcCB2ZXJ0aWNhbCAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdmZsaXBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLXRyYW5zcG9zZSAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnNwb3NlX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC10cmFuc3ZlcnNlIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV90cmFuc3ZlcnNlX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1yb3RhdGUgOTAgLXRyaW0gLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X3JvdDkwX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1yb3RhdGUgMTgwIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QxODBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLXJvdGF0ZSAyNzAgLXRyaW0gLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X3JvdDI3MF9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcKKwlkb25lCisJZm9yIHhmb3JtIGluIGhmbGlwIHZmbGlwIHRyYW5zcG9zZSB0cmFuc3ZlcnNlIHJvdDkwIHJvdDE4MCByb3QyNzA7IGRvCisJCWZvciBzYW1wIGluIEdSQVkgNDQ0OyBkbworCQkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiICRCTVBBUkcgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtJHhmb3JtIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLXdhcm11cCAwICRZVVZBUkcgJEFMTE9DQVJHICRQUk9HQVJHCisJCQlpZiBbICRBTExPQyA9IDEgXTsgdGhlbgorCQkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi4ke0VYVH0KKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9CisJCQllbHNlCisJCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS4ke0VYVH0gXAorCQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbworCQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLiR7RVhUfQorCQkJCQlybSAkaQorCQkJCWRvbmUKKwkJCWZpCisJCWRvbmUKKwkJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJCXJ1bm1lICRFWEVESVIvZGpwZWcgLW5vc21vb3RoIC1yZ2IgJEJNUEFSRyAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcKKwkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgLWZhc3R1cHNhbXBsZSAkWVVWQVJHICRBTExPQ0FSRyAkUFJPR0FSRworCQkJaWYgWyAkQUxMT0MgPSAxIF07IHRoZW4KKwkJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9CisJCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfQorCQkJZWxzZQorCQkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uJHtFWFR9IFwKKwkJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfTsgZG8KKwkJCQkJcnVubWUgY21wICRpICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi4ke0VYVH0KKwkJCQkJcm0gJGkKKwkJCQlkb25lCisJCQlmaQorCQlkb25lCisJZG9uZQorCisJIyBHcmF5c2NhbGUgdHJhbnNmb3JtCisJZm9yIHhmb3JtIGluIGhmbGlwIHZmbGlwIHRyYW5zcG9zZSB0cmFuc3ZlcnNlIHJvdDkwIHJvdDE4MCByb3QyNzA7IGRvCisJCWZvciBzYW1wIGluIEdSQVkgNDQ0IDQyMiA0MjA7IGRvCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtJHhmb3JtIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLXdhcm11cCAwIC1ncmF5c2NhbGUgJFlVVkFSRyAkQUxMT0NBUkcgJFBST0dBUkcKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV9HUkFZXyR7eGZvcm19X2pwZWd0cmFuLiR7RVhUfQorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0KKwkJCWVsc2UKKwkJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCisJCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCisJCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9CisJCQkJCXJtICRpCisJCQkJZG9uZQorCQkJZmkKKwkJZG9uZQorCWRvbmUKKworCSMgVHJhbnNmb3JtcyB3aXRoIHNjYWxpbmcKKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KKwkJCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgJ3MvXF8vXC8vZydgCisJCQkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiIC1zY2FsZSAke3NjYWxlYXJnfSAkTlNBUkcgJEJNUEFSRyAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX1fanBlZ3RyYW4uJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcKKwkJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtJHhmb3JtIC1zY2FsZSAke3NjYWxlYXJnfSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAkWVVWQVJHICRBTExPQ0FSRyAkUFJPR0FSRworCQkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX1fanBlZ3RyYW4uJHtFWFR9CisJCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV8ke3NjYWxlfS4ke0VYVH0KKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworZG9uZQorCitlY2hvIFNVQ0NFU1MhCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90amJlbmNodGVzdC5qYXZhLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpiZW5jaHRlc3QuamF2YS5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODk1NjFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpiZW5jaHRlc3QuamF2YS5pbgpAQCAtMCwwICsxLDIxNSBAQAorIyEvYmluL2Jhc2gKKworc2V0IC11CitzZXQgLWUKK3RyYXAgb25leGl0IElOVAordHJhcCBvbmV4aXQgVEVSTQordHJhcCBvbmV4aXQgRVhJVAorCitvbmV4aXQoKQoreworCWlmIFsgLWQgJE9VVERJUiBdOyB0aGVuCisJCXJtIC1yZiAkT1VURElSCisJZmkKK30KKworcnVubWUoKQoreworCWVjaG8gXCpcKlwqICQqCisJIiRAIgorfQorCitJTUFHRVM9InZnbF81Njc0XzAwOTguYm1wIHZnbF82NDM0XzAwMThhLmJtcCB2Z2xfNjU0OF8wMDI2YS5ibXAgbmlnaHRzaG90X2lzb18xMDAuYm1wIgorSU1HRElSPUBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAL3Rlc3RpbWFnZXMKK09VVERJUj1gbWt0ZW1wIC1kIC90bXAvX190amJlbmNodGVzdF9qYXZhX291dHB1dC5YWFhYWFhgCitFWEVESVI9QENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAKK0pBVkE9IkBKYXZhX0pBVkFfRVhFQ1VUQUJMRUAiCitKQVZBQVJHUz0iLWNwICRFWEVESVIvamF2YS90dXJib2pwZWcuamFyIC1EamF2YS5saWJyYXJ5LnBhdGg9JEVYRURJUiIKK0JNUEFSRz0KK05TQVJHPQorWVVWQVJHPQorUFJPR0FSRz0KKworaWYgWyAtZCAkT1VURElSIF07IHRoZW4KKwlybSAtcmYgJE9VVERJUgorZmkKK21rZGlyIC1wICRPVVRESVIKKword2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworCWNhc2UgIiQxIiBpbgorCS15dXYpCisJCU5TQVJHPS1ub3Ntb290aAorCQlZVVZBUkc9LXl1dgorCisjIE5PVEU6IFRoZSBjb21iaW5hdGlvbiBvZiB0akVuY29kZVlVViooKSBhbmQgdGpDb21wcmVzc0Zyb21ZVVYqKCkgZG9lcyBub3QKKyMgYWx3YXlzIHByb2R1Y2UgYml0d2lzZS1pZGVudGljYWwgcmVzdWx0cyB0byB0akNvbXByZXNzKigpIGlmIHN1YnNhbXBsaW5nIGlzCisjIGVuYWJsZWQuICBJbiBib3RoIGNhc2VzLCBpZiB0aGUgaW1hZ2Ugd2lkdGggb3IgaGVpZ2h0IGFyZSBub3QgZXZlbmx5CisjIGRpdmlzaWJsZSBieSB0aGUgTUNVIHdpZHRoL2hlaWdodCwgdGhlbiB0aGUgYm90dG9tIGFuZC9vciByaWdodCBlZGdlIGFyZQorIyBleHBhbmRlZC4gIEhvd2V2ZXIsIHRoZSBsaWJqcGVnIGNvZGUgcGVyZm9ybXMgdGhpcyBleHBhbnNpb24gcHJpb3IgdG8KKyMgZG93bnNhbXBsaW5nLCBhbmQgVHVyYm9KUEVHIHBlcmZvcm1zIGl0IGluIHRqQ29tcHJlc3NGcm9tWVVWKigpLCB3aGljaCBpcworIyBhZnRlciBkb3duc2FtcGxpbmcuICBUaHVzLCB0aGUgdHdvIHdpbGwgYWdyZWUgb25seSBpZiB0aGUgd2lkdGgvaGVpZ2h0IGFsb25nCisjIGVhY2ggZG93bnNhbXBsZWQgZGltZW5zaW9uIGlzIGFuIG9kZCBudW1iZXIgb3IgaXMgZXZlbmx5IGRpdmlzaWJsZSBieSB0aGUgTUNVCisjIHdpZHRoL2hlaWdodC4gIFRoaXMgZGlzYWdyZWVtZW50IGJhc2ljYWxseSBhbW91bnRzIHRvIGEgcm91bmQtb2ZmIGVycm9yLCBidXQKKyMgdGhlcmUgaXMgbm8gZWFzeSB3YXkgYXJvdW5kIGl0LCBzbyBmb3Igbm93LCB3ZSBqdXN0IHRlc3QgdGhlIG9ubHkgaW1hZ2UgdGhhdAorIyB3b3Jrcy4gIChOT1RFOiBuaWdodHNob3RfaXNvXzEwMCBkb2VzIG5vdCBzdWZmZXIgZnJvbSB0aGUgYWJvdmUgaXNzdWUsIGJ1dAorIyBpdCBzdWZmZXJzIGZyb20gYW4gdW5yZWxhdGVkIHByb2JsZW0gd2hlcmVieSB0aGUgY29tYmluYXRpb24gb2YKKyMgdGpEZWNvbXByZXNzVG9ZVVYqKCkgYW5kIHRqRGVjb2RlWVVWKigpIGRvIG5vdCBwcm9kdWNlIGJpdHdpc2UtaWRlbnRpY2FsCisjIHJlc3VsdHMgdG8gdGpEZWNvbXByZXNzKigpIGlmIGRlY29tcHJlc3Npb24gc2NhbGluZyBpcyBlbmFibGVkLiAgVGhpcyBsYXR0ZXIKKyMgcGhlbm9tZW5vbiBpcyBub3QgeWV0IGZ1bGx5IHVuZGVyc3Rvb2QgYnV0IGlzIGFsc28gYmVsaWV2ZWQgdG8gYmUgc29tZSBzb3J0CisjIG9mIHJvdW5kLW9mZiBlcnJvci4pCisJCUlNQUdFUz0idmdsXzY1NDhfMDAyNmEuYm1wIgorCQk7OworCS1wcm9ncmVzc2l2ZSkKKwkJUFJPR0FSRz0tcHJvZ3Jlc3NpdmUKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworZXhlYyA+JEVYRURJUi90amJlbmNodGVzdC1qYXZhJFlVVkFSRyRQUk9HQVJHLmxvZworCisjIFN0YW5kYXJkIHRlc3RzCitmb3IgaW1hZ2UgaW4gJElNQUdFUzsgZG8KKworCWNwICRJTUdESVIvJGltYWdlICRPVVRESVIKKwliYXNlbmFtZT1gYmFzZW5hbWUgJGltYWdlIC5ibXBgCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGZhc3QgJFBST0dBUkcgLWdyYXlzY2FsZSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfZmFzdF9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAkUFJPR0FSRyAtc2FtcGxlIDJ4MiAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQyMF9mYXN0X2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBmYXN0ICRQUk9HQVJHIC1zYW1wbGUgMngxIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDIyX2Zhc3RfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGZhc3QgJFBST0dBUkcgLXNhbXBsZSAxeDEgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80NDRfZmFzdF9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50ICRQUk9HQVJHIC1ncmF5c2NhbGUgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV9HUkFZX2FjY3VyYXRlX2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBpbnQgJFBST0dBUkcgLXNhbXBsZSAyeDIgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80MjBfYWNjdXJhdGVfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGludCAkUFJPR0FSRyAtc2FtcGxlIDJ4MSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQyMl9hY2N1cmF0ZV9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50ICRQUk9HQVJHIC1zYW1wbGUgMXgxIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDQ0X2FjY3VyYXRlX2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLXJnYiAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9kZWZhdWx0X2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJcnVubWUgJEVYRURJUi9kanBlZyAtZGN0IGZhc3QgLXJnYiAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJcnVubWUgJEVYRURJUi9kanBlZyAtZGN0IGludCAtcmdiIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fYWNjdXJhdGVfY2pwZWcuanBnCisJZG9uZQorCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLW5vc21vb3RoIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2RlZmF1bHRfbm9zbW9vdGhfZGpwZWcuYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZworCQlydW5tZSAkRVhFRElSL2RqcGVnIC1kY3QgZmFzdCAtbm9zbW9vdGggLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9ub3Ntb290aF9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX25vc21vb3RoX2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fYWNjdXJhdGVfY2pwZWcuanBnCisJZG9uZQorCisJIyBDb21wcmVzc2lvbgorCWZvciBkY3QgaW4gYWNjdXJhdGUgZmFzdDsgZG8KKwkJcnVubWUgIiRKQVZBIiAkSkFWQUFSR1MgVEpCZW5jaCAkT1VURElSLyRpbWFnZSA5NSAtcmdiIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLXdhcm11cCAwIC0ke2RjdH1kY3QgJFlVVkFSRyAkUFJPR0FSRworCQlmb3Igc2FtcCBpbiBHUkFZIDQyMCA0MjIgNDQ0OyBkbworCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fY2pwZWcuanBnCisJCWRvbmUKKwlkb25lCisKKwlmb3IgZGN0IGluIGZhc3QgYWNjdXJhdGUgZGVmYXVsdDsgZG8KKwkJZGN0YXJnPS0ke2RjdH1kY3QKKwkJaWYgWyAiJHtkY3R9IiA9ICJkZWZhdWx0IiBdOyB0aGVuCisJCQlkY3Rhcmc9CisJCWZpCisKKwkJIyBUaWxlZCBjb21wcmVzc2lvbiAmIGRlY29tcHJlc3Npb24KKwkJcnVubWUgIiRKQVZBIiAkSkFWQUFSR1MgVEpCZW5jaCAkT1VURElSLyRpbWFnZSA5NSAtcmdiIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLXdhcm11cCAwICR7ZGN0YXJnfSAkWVVWQVJHICRQUk9HQVJHCisJCWZvciBzYW1wIGluIEdSQVkgNDQ0OyBkbworCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS5ibXAgXAorCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC5ibXA7IGRvCisJCQkJcnVubWUgY21wIC1pIDU0OjU0ICRpICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fZGpwZWcuYm1wCisJCQkJcm0gJGkKKwkJCWRvbmUKKwkJZG9uZQorCQlydW5tZSAiJEpBVkEiICRKQVZBQVJHUyBUSkJlbmNoICRPVVRESVIvJGltYWdlIDk1IC1yZ2IgLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgLWZhc3R1cHNhbXBsZSAke2RjdGFyZ30gJFlVVkFSRyAkUFJPR0FSRworCQlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbworCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS5ibXAgXAorCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC5ibXA7IGRvCisJCQkJcnVubWUgY21wIC1pIDU0OjU0ICRpICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGhfZGpwZWcuYm1wCisJCQkJcm0gJGkKKwkJCWRvbmUKKwkJZG9uZQorCisJCSMgVGlsZWQgZGVjb21wcmVzc2lvbgorCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NDsgZG8KKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgJHtkY3Rhcmd9ICRZVVZBUkcgJFBST0dBUkcKKwkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uYm1wIFwKKwkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuYm1wOyBkbworCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2RqcGVnLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKwkJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgLWZhc3R1cHNhbXBsZSAke2RjdGFyZ30gJFlVVkFSRyAkUFJPR0FSRworCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS5ibXAgXAorCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC5ibXA7IGRvCisJCQkJcnVubWUgY21wICRpIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGhfZGpwZWcuYm1wCisJCQkJcm0gJGkKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworCSMgU2NhbGVkIGRlY29tcHJlc3Npb24KKwlmb3Igc2NhbGUgaW4gMl8xIDE1XzggN180IDEzXzggM18yIDExXzggNV80IDlfOCA3XzggM180IDVfOCAxXzIgM184IDFfNCAxXzg7IGRvCisJCXNjYWxlYXJnPWBlY2hvICRzY2FsZSB8IHNlZCAncy9cXy9cLy9nJ2AKKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCXJ1bm1lICRFWEVESVIvZGpwZWcgLXJnYiAtc2NhbGUgJHtzY2FsZWFyZ30gJE5TQVJHIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9X2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLXNjYWxlICR7c2NhbGVhcmd9IC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLXdhcm11cCAwICRZVVZBUkcgJFBST0dBUkcKKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzY2FsZX1fZGpwZWcuYm1wCisJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LmJtcAorCQlkb25lCisJZG9uZQorCisJIyBUcmFuc2Zvcm1zCisJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJcnVubWUgJEVYRURJUi9qcGVndHJhbiAtZmxpcCBob3Jpem9udGFsIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9oZmxpcF9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcKKwkJcnVubWUgJEVYRURJUi9qcGVndHJhbiAtZmxpcCB2ZXJ0aWNhbCAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdmZsaXBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLXRyYW5zcG9zZSAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnNwb3NlX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC10cmFuc3ZlcnNlIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV90cmFuc3ZlcnNlX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1yb3RhdGUgOTAgLXRyaW0gLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X3JvdDkwX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1yb3RhdGUgMTgwIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QxODBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLXJvdGF0ZSAyNzAgLXRyaW0gLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X3JvdDI3MF9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcKKwlkb25lCisJZm9yIHhmb3JtIGluIGhmbGlwIHZmbGlwIHRyYW5zcG9zZSB0cmFuc3ZlcnNlIHJvdDkwIHJvdDE4MCByb3QyNzA7IGRvCisJCWZvciBzYW1wIGluIEdSQVkgNDQ0OyBkbworCQkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQlydW5tZSAiJEpBVkEiICRKQVZBQVJHUyBUSkJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgJFlVVkFSRyAkUFJPR0FSRworCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS5ibXAgXAorCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC5ibXA7IGRvCisJCQkJcnVubWUgY21wIC1pIDU0OjU0ICRpICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5ibXAKKwkJCQlybSAkaQorCQkJZG9uZQorCQlkb25lCisJCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCisJCQlydW5tZSAkRVhFRElSL2RqcGVnIC1ub3Ntb290aCAtcmdiIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQlydW5tZSAiJEpBVkEiICRKQVZBQVJHUyBUSkJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtd2FybXVwIDAgLWZhc3R1cHNhbXBsZSAkWVVWQVJHICRQUk9HQVJHCisJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLmJtcCBcCisJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLmJtcDsgZG8KKwkJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKwlkb25lCisKKwkjIEdyYXlzY2FsZSB0cmFuc2Zvcm0KKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLSR4Zm9ybSAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC13YXJtdXAgMCAtZ3JheXNjYWxlICRZVVZBUkcgJFBST0dBUkcKKwkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uYm1wIFwKKwkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuYm1wOyBkbworCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkaSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfJHt4Zm9ybX1fanBlZ3RyYW4uYm1wCisJCQkJcm0gJGkKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworCSMgVHJhbnNmb3JtcyB3aXRoIHNjYWxpbmcKKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KKwkJCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgJ3MvXF8vXC8vZydgCisJCQkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiIC1zY2FsZSAke3NjYWxlYXJnfSAkTlNBUkcgLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX1fanBlZ3RyYW4uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcKKwkJCQlydW5tZSAiJEpBVkEiICRKQVZBQVJHUyBUSkJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnIC0keGZvcm0gLXNjYWxlICR7c2NhbGVhcmd9IC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLXdhcm11cCAwICRZVVZBUkcgJFBST0dBUkcKKwkJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV8ke3NjYWxlfS5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLmJtcAorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfJHtzY2FsZX0uYm1wCisJCQlkb25lCisJCWRvbmUKKwlkb25lCisKK2RvbmUKKworZWNobyBTVUNDRVNTIQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpleGFtcGxlLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90amV4YW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIwMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpleGFtcGxlLmMKQEAgLTAsMCArMSwzOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAxMS0yMDEyLCAyMDE0LTIwMTUsIDIwMTcgRC4gUi4gQ29tbWFuZGVyLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdG8gY29tcHJlc3MsIGRlY29tcHJlc3MsIGFuZCB0cmFuc2Zvcm0gSlBFRworICogaW1hZ2VzIHVzaW5nIHRoZSBUdXJib0pQRUcgQyBBUEkKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHR1cmJvanBlZy5oPgorCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgc3RyY2FzZWNtcCAgc3RyaWNtcAorI2RlZmluZSBzdHJuY2FzZWNtcCAgc3RybmljbXAKKyNlbmRpZgorCisjZGVmaW5lIF90aHJvdyhhY3Rpb24sIG1lc3NhZ2UpIHsgXAorICBwcmludGYoIkVSUk9SIGluIGxpbmUgJWQgd2hpbGUgJXM6XG4lc1xuIiwgX19MSU5FX18sIGFjdGlvbiwgbWVzc2FnZSk7IFwKKyAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7IFwKK30KKworI2RlZmluZSBfdGhyb3d0aihhY3Rpb24pICBfdGhyb3coYWN0aW9uLCB0akdldEVycm9yU3RyMih0akluc3RhbmNlKSkKKworI2RlZmluZSBfdGhyb3d1bml4KGFjdGlvbikgIF90aHJvdyhhY3Rpb24sIHN0cmVycm9yKGVycm5vKSkKKworI2RlZmluZSBERUZBVUxUX1NVQlNBTVAgIFRKU0FNUF80NDQKKyNkZWZpbmUgREVGQVVMVF9RVUFMSVRZICA5NQorCisKK2NvbnN0IGNoYXIgKnN1YnNhbXBOYW1lW1RKX05VTVNBTVBdID0geworICAiNDo0OjQiLCAiNDoyOjIiLCAiNDoyOjAiLCAiR3JheXNjYWxlIiwgIjQ6NDowIiwgIjQ6MToxIgorfTsKKworY29uc3QgY2hhciAqY29sb3JzcGFjZU5hbWVbVEpfTlVNQ1NdID0geworICAiUkdCIiwgIllDYkNyIiwgIkdSQVkiLCAiQ01ZSyIsICJZQ0NLIgorfTsKKwordGpzY2FsaW5nZmFjdG9yICpzY2FsaW5nRmFjdG9ycyA9IE5VTEw7CitpbnQgbnVtU2NhbGluZ0ZhY3RvcnMgPSAwOworCisKKy8qIERDVCBmaWx0ZXIgZXhhbXBsZS4gIFRoaXMgcHJvZHVjZXMgYSBuZWdhdGl2ZSBvZiB0aGUgaW1hZ2UuICovCisKK2ludCBjdXN0b21GaWx0ZXIoc2hvcnQgKmNvZWZmcywgdGpyZWdpb24gYXJyYXlSZWdpb24sIHRqcmVnaW9uIHBsYW5lUmVnaW9uLAorICAgICAgICAgICAgICAgICBpbnQgY29tcG9uZW50SW5kZXgsIGludCB0cmFuc2Zvcm1JbmRleCwKKyAgICAgICAgICAgICAgICAgdGp0cmFuc2Zvcm0gKnRyYW5zZm9ybSkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGFycmF5UmVnaW9uLncgKiBhcnJheVJlZ2lvbi5oOyBpKyspCisgICAgY29lZmZzW2ldID0gLWNvZWZmc1tpXTsKKworICByZXR1cm4gMDsKK30KKworCit2b2lkIHVzYWdlKGNoYXIgKnByb2dyYW1OYW1lKQoreworICBpbnQgaTsKKworICBwcmludGYoIlxuVVNBR0U6ICVzIDxJbnB1dCBpbWFnZT4gPE91dHB1dCBpbWFnZT4gW29wdGlvbnNdXG5cbiIsCisgICAgICAgICBwcm9ncmFtTmFtZSk7CisKKyAgcHJpbnRmKCJJbnB1dCBhbmQgb3V0cHV0IGltYWdlcyBjYW4gYmUgaW4gV2luZG93cyBCTVAgb3IgUEJNUExVUyAoUFBNL1BHTSkgZm9ybWF0LiAgSWZcbiIpOworICBwcmludGYoImVpdGhlciBmaWxlbmFtZSBlbmRzIGluIGEgLmpwZyBleHRlbnNpb24sIHRoZW4gdGhlIFR1cmJvSlBFRyBBUEkgd2lsbCBiZSB1c2VkXG4iKTsKKyAgcHJpbnRmKCJ0byBjb21wcmVzcyBvciBkZWNvbXByZXNzIHRoZSBpbWFnZS5cblxuIik7CisKKyAgcHJpbnRmKCJDb21wcmVzc2lvbiBPcHRpb25zICh1c2VkIGlmIHRoZSBvdXRwdXQgaW1hZ2UgaXMgYSBKUEVHIGltYWdlKVxuIik7CisgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7CisKKyAgcHJpbnRmKCItc3Vic2FtcCA8NDQ0fDQyMnw0MjB8Z3JheT4gPSBBcHBseSB0aGlzIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHdoZW5cbiIpOworICBwcmludGYoIiAgICAgY29tcHJlc3NpbmcgdGhlIG91dHB1dCBpbWFnZS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgc2FtZSBsZXZlbCBvZlxuIik7CisgIHByaW50ZigiICAgICBzdWJzYW1wbGluZyBhcyBpbiB0aGUgaW5wdXQgaW1hZ2UsIGlmIHRoZSBpbnB1dCBpbWFnZSBpcyBhbHNvIGEgSlBFR1xuIik7CisgIHByaW50ZigiICAgICBpbWFnZSwgb3IgdG8gdXNlIGdyYXlzY2FsZSBpZiB0aGUgaW5wdXQgaW1hZ2UgaXMgYSBncmF5c2NhbGUgbm9uLUpQRUdcbiIpOworICBwcmludGYoIiAgICAgaW1hZ2UsIG9yIHRvIHVzZSAlcyBzdWJzYW1wbGluZyBvdGhlcndpc2UuXG5cbiIsCisgICAgICAgICBzdWJzYW1wTmFtZVtERUZBVUxUX1NVQlNBTVBdKTsKKworICBwcmludGYoIi1xIDwxLTEwMD4gPSBDb21wcmVzcyB0aGUgb3V0cHV0IGltYWdlIHdpdGggdGhpcyBKUEVHIHF1YWxpdHkgbGV2ZWxcbiIpOworICBwcmludGYoIiAgICAgKGRlZmF1bHQgPSAlZCkuXG5cbiIsIERFRkFVTFRfUVVBTElUWSk7CisKKyAgcHJpbnRmKCJEZWNvbXByZXNzaW9uIE9wdGlvbnMgKHVzZWQgaWYgdGhlIGlucHV0IGltYWdlIGlzIGEgSlBFRyBpbWFnZSlcbiIpOworICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKworICBwcmludGYoIi1zY2FsZSBNL04gPSBTY2FsZSB0aGUgaW5wdXQgaW1hZ2UgYnkgYSBmYWN0b3Igb2YgTS9OIHdoZW4gZGVjb21wcmVzc2luZyBpdC5cbiIpOworICBwcmludGYoIihNL04gPSAiKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bVNjYWxpbmdGYWN0b3JzOyBpKyspIHsKKyAgICBwcmludGYoIiVkLyVkIiwgc2NhbGluZ0ZhY3RvcnNbaV0ubnVtLCBzY2FsaW5nRmFjdG9yc1tpXS5kZW5vbSk7CisgICAgaWYgKG51bVNjYWxpbmdGYWN0b3JzID09IDIgJiYgaSAhPSBudW1TY2FsaW5nRmFjdG9ycyAtIDEpCisgICAgICBwcmludGYoIiBvciAiKTsKKyAgICBlbHNlIGlmIChudW1TY2FsaW5nRmFjdG9ycyA+IDIpIHsKKyAgICAgIGlmIChpICE9IG51bVNjYWxpbmdGYWN0b3JzIC0gMSkKKyAgICAgICAgcHJpbnRmKCIsICIpOworICAgICAgaWYgKGkgPT0gbnVtU2NhbGluZ0ZhY3RvcnMgLSAyKQorICAgICAgICBwcmludGYoIm9yICIpOworICAgIH0KKyAgfQorICBwcmludGYoIilcblxuIik7CisKKyAgcHJpbnRmKCItaGZsaXAsIC12ZmxpcCwgLXRyYW5zcG9zZSwgLXRyYW5zdmVyc2UsIC1yb3Q5MCwgLXJvdDE4MCwgLXJvdDI3MCA9XG4iKTsKKyAgcHJpbnRmKCIgICAgIFBlcmZvcm0gb25lIG9mIHRoZXNlIGxvc3NsZXNzIHRyYW5zZm9ybSBvcGVyYXRpb25zIG9uIHRoZSBpbnB1dCBpbWFnZVxuIik7CisgIHByaW50ZigiICAgICBwcmlvciB0byBkZWNvbXByZXNzaW5nIGl0ICh0aGVzZSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuKVxuXG4iKTsKKworICBwcmludGYoIi1ncmF5c2NhbGUgPSBQZXJmb3JtIGxvc3NsZXNzIGdyYXlzY2FsZSBjb252ZXJzaW9uIG9uIHRoZSBpbnB1dCBpbWFnZSBwcmlvclxuIik7CisgIHByaW50ZigiICAgICB0byBkZWNvbXByZXNzaW5nIGl0IChjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgb3RoZXIgdHJhbnNmb3JtIG9wZXJhdGlvbnNcbiIpOworICBwcmludGYoIiAgICAgYWJvdmUuKVxuXG4iKTsKKworICBwcmludGYoIi1jcm9wIFd4SCtYK1kgPSBQZXJmb3JtIGxvc3NsZXNzIGNyb3BwaW5nIG9uIHRoZSBpbnB1dCBpbWFnZSBwcmlvciB0b1xuIik7CisgIHByaW50ZigiICAgICBkZWNvbXByZXNzaW5nIGl0LiAgWCBhbmQgWSBzcGVjaWZ5IHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgY3JvcHBpbmdcbiIpOworICBwcmludGYoIiAgICAgcmVnaW9uLCBhbmQgVyBhbmQgSCBzcGVjaWZ5IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBjcm9wcGluZyByZWdpb24uXG4iKTsKKyAgcHJpbnRmKCIgICAgIFggYW5kIFkgbXVzdCBiZSBldmVubHkgZGl2aWJsZSBieSB0aGUgTUNVIGJsb2NrIHNpemUgKDh4OCBpZiB0aGUgaW5wdXRcbiIpOworICBwcmludGYoIiAgICAgaW1hZ2Ugd2FzIGNvbXByZXNzZWQgdXNpbmcgbm8gc3Vic2FtcGxpbmcgb3IgZ3JheXNjYWxlLCAxNng4IGlmIGl0IHdhc1xuIik7CisgIHByaW50ZigiICAgICBjb21wcmVzc2VkIHVzaW5nIDQ6MjoyIHN1YnNhbXBsaW5nLCBvciAxNngxNiBpZiBpdCB3YXMgY29tcHJlc3NlZCB1c2luZ1xuIik7CisgIHByaW50ZigiICAgICA0OjI6MCBzdWJzYW1wbGluZy4pXG5cbiIpOworCisgIHByaW50ZigiR2VuZXJhbCBPcHRpb25zXG4iKTsKKyAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS1cblxuIik7CisKKyAgcHJpbnRmKCItZmFzdHVwc2FtcGxlID0gVXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpblxuIik7CisgIHByaW50ZigiICAgICB0aGUgdW5kZXJseWluZyBjb2RlYy5cblxuIik7CisKKyAgcHJpbnRmKCItZmFzdGRjdCA9IFVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG1zIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZ1xuIik7CisgIHByaW50ZigiICAgICBjb2RlYy5cblxuIik7CisKKyAgcHJpbnRmKCItYWNjdXJhdGVkY3QgPSBVc2UgdGhlIG1vc3QgYWNjdXJhdGUgRENUL0lEQ1QgYWxnb3JpdGhtcyBhdmFpbGFibGUgaW4gdGhlXG4iKTsKKyAgcHJpbnRmKCIgICAgIHVuZGVybHlpbmcgY29kZWMuXG5cbiIpOworCisgIGV4aXQoMSk7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICB0anNjYWxpbmdmYWN0b3Igc2NhbGluZ0ZhY3RvciA9IHsgMSwgMSB9OworICBpbnQgb3V0U3Vic2FtcCA9IC0xLCBvdXRRdWFsID0gLTE7CisgIHRqdHJhbnNmb3JtIHhmb3JtOworICBpbnQgZmxhZ3MgPSAwOworICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgY2hhciAqaW5Gb3JtYXQsICpvdXRGb3JtYXQ7CisgIEZJTEUgKmpwZWdGaWxlID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqaW1nQnVmID0gTlVMTCwgKmpwZWdCdWYgPSBOVUxMOworICBpbnQgcmV0dmFsID0gMCwgaSwgcGl4ZWxGb3JtYXQgPSBUSlBGX1VOS05PV047CisgIHRqaGFuZGxlIHRqSW5zdGFuY2UgPSBOVUxMOworCisgIGlmICgoc2NhbGluZ0ZhY3RvcnMgPSB0akdldFNjYWxpbmdGYWN0b3JzKCZudW1TY2FsaW5nRmFjdG9ycykpID09IE5VTEwpCisgICAgX3Rocm93dGooImdldHRpbmcgc2NhbGluZyBmYWN0b3JzIik7CisgIG1lbXNldCgmeGZvcm0sIDAsIHNpemVvZih0anRyYW5zZm9ybSkpOworCisgIGlmIChhcmdjIDwgMykKKyAgICB1c2FnZShhcmd2WzBdKTsKKworICAvKiBQYXJzZSBhcmd1bWVudHMuICovCisgIGZvciAoaSA9IDM7IGkgPCBhcmdjOyBpKyspIHsKKyAgICBpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbaV0sICItc2MiLCAzKSAmJiBpIDwgYXJnYyAtIDEpIHsKKyAgICAgIGludCBtYXRjaCA9IDAsIHRlbXAxID0gMCwgdGVtcDIgPSAwLCBqOworCisgICAgICBpZiAoc3NjYW5mKGFyZ3ZbKytpXSwgIiVkLyVkIiwgJnRlbXAxLCAmdGVtcDIpIDwgMikKKyAgICAgICAgdXNhZ2UoYXJndlswXSk7CisgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtU2NhbGluZ0ZhY3RvcnM7IGorKykgeworICAgICAgICBpZiAoKGRvdWJsZSl0ZW1wMSAvIChkb3VibGUpdGVtcDIgPT0gKGRvdWJsZSlzY2FsaW5nRmFjdG9yc1tqXS5udW0gLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlzY2FsaW5nRmFjdG9yc1tqXS5kZW5vbSkgeworICAgICAgICAgIHNjYWxpbmdGYWN0b3IgPSBzY2FsaW5nRmFjdG9yc1tqXTsKKyAgICAgICAgICBtYXRjaCA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChtYXRjaCAhPSAxKQorICAgICAgICB1c2FnZShhcmd2WzBdKTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChhcmd2W2ldLCAiLXN1IiwgMykgJiYgaSA8IGFyZ2MgLSAxKSB7CisgICAgICBpKys7CisgICAgICBpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbaV0sICJnIiwgMSkpCisgICAgICAgIG91dFN1YnNhbXAgPSBUSlNBTVBfR1JBWTsKKyAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICI0NDQiKSkKKyAgICAgICAgb3V0U3Vic2FtcCA9IFRKU0FNUF80NDQ7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiNDIyIikpCisgICAgICAgIG91dFN1YnNhbXAgPSBUSlNBTVBfNDIyOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIjQyMCIpKQorICAgICAgICBvdXRTdWJzYW1wID0gVEpTQU1QXzQyMDsKKyAgICAgIGVsc2UKKyAgICAgICAgdXNhZ2UoYXJndlswXSk7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYXJndltpXSwgIi1xIiwgMikgJiYgaSA8IGFyZ2MgLSAxKSB7CisgICAgICBvdXRRdWFsID0gYXRvaShhcmd2WysraV0pOworICAgICAgaWYgKG91dFF1YWwgPCAxIHx8IG91dFF1YWwgPiAxMDApCisgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbaV0sICItZyIsIDIpKQorICAgICAgeGZvcm0ub3B0aW9ucyB8PSBUSlhPUFRfR1JBWTsKKyAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWhmbGlwIikpCisgICAgICB4Zm9ybS5vcCA9IFRKWE9QX0hGTElQOworICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItdmZsaXAiKSkKKyAgICAgIHhmb3JtLm9wID0gVEpYT1BfVkZMSVA7CisgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi10cmFuc3Bvc2UiKSkKKyAgICAgIHhmb3JtLm9wID0gVEpYT1BfVFJBTlNQT1NFOworICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItdHJhbnN2ZXJzZSIpKQorICAgICAgeGZvcm0ub3AgPSBUSlhPUF9UUkFOU1ZFUlNFOworICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItcm90OTAiKSkKKyAgICAgIHhmb3JtLm9wID0gVEpYT1BfUk9UOTA7CisgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1yb3QxODAiKSkKKyAgICAgIHhmb3JtLm9wID0gVEpYT1BfUk9UMTgwOworICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItcm90MjcwIikpCisgICAgICB4Zm9ybS5vcCA9IFRKWE9QX1JPVDI3MDsKKyAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWN1c3RvbSIpKQorICAgICAgeGZvcm0uY3VzdG9tRmlsdGVyID0gY3VzdG9tRmlsdGVyOworICAgIGVsc2UgaWYgKCFzdHJuY2FzZWNtcChhcmd2W2ldLCAiLWMiLCAyKSAmJiBpIDwgYXJnYyAtIDEpIHsKKyAgICAgIGlmIChzc2NhbmYoYXJndlsrK2ldLCAiJWR4JWQrJWQrJWQiLCAmeGZvcm0uci53LCAmeGZvcm0uci5oLCAmeGZvcm0uci54LAorICAgICAgICAgICAgICAgICAmeGZvcm0uci55KSA8IDQgfHwKKyAgICAgICAgICB4Zm9ybS5yLnggPCAwIHx8IHhmb3JtLnIueSA8IDAgfHwgeGZvcm0uci53IDwgMSB8fCB4Zm9ybS5yLmggPCAxKQorICAgICAgICB1c2FnZShhcmd2WzBdKTsKKyAgICAgIHhmb3JtLm9wdGlvbnMgfD0gVEpYT1BUX0NST1A7CisgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWZhc3R1cHNhbXBsZSIpKSB7CisgICAgICBwcmludGYoIlVzaW5nIGZhc3QgdXBzYW1wbGluZyBjb2RlXG4iKTsKKyAgICAgIGZsYWdzIHw9IFRKRkxBR19GQVNUVVBTQU1QTEU7CisgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWZhc3RkY3QiKSkgeworICAgICAgcHJpbnRmKCJVc2luZyBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobVxuIik7CisgICAgICBmbGFncyB8PSBUSkZMQUdfRkFTVERDVDsKKyAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItYWNjdXJhdGVkY3QiKSkgeworICAgICAgcHJpbnRmKCJVc2luZyBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobVxuIik7CisgICAgICBmbGFncyB8PSBUSkZMQUdfQUNDVVJBVEVEQ1Q7CisgICAgfSBlbHNlIHVzYWdlKGFyZ3ZbMF0pOworICB9CisKKyAgLyogRGV0ZXJtaW5lIGlucHV0IGFuZCBvdXRwdXQgaW1hZ2UgZm9ybWF0cyBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvbnMuICovCisgIGluRm9ybWF0ID0gc3RycmNocihhcmd2WzFdLCAnLicpOworICBvdXRGb3JtYXQgPSBzdHJyY2hyKGFyZ3ZbMl0sICcuJyk7CisgIGlmIChpbkZvcm1hdCA9PSBOVUxMIHx8IG91dEZvcm1hdCA9PSBOVUxMIHx8IHN0cmxlbihpbkZvcm1hdCkgPCAyIHx8CisgICAgICBzdHJsZW4ob3V0Rm9ybWF0KSA8IDIpCisgICAgdXNhZ2UoYXJndlswXSk7CisgIGluRm9ybWF0ID0gJmluRm9ybWF0WzFdOworICBvdXRGb3JtYXQgPSAmb3V0Rm9ybWF0WzFdOworCisgIGlmICghc3RyY2FzZWNtcChpbkZvcm1hdCwgImpwZyIpKSB7CisgICAgLyogSW5wdXQgaW1hZ2UgaXMgYSBKUEVHIGltYWdlLiAgRGVjb21wcmVzcyBhbmQvb3IgdHJhbnNmb3JtIGl0LiAqLworICAgIGxvbmcgc2l6ZTsKKyAgICBpbnQgaW5TdWJzYW1wLCBpbkNvbG9yc3BhY2U7CisgICAgaW50IGRvVHJhbnNmb3JtID0gKHhmb3JtLm9wICE9IFRKWE9QX05PTkUgfHwgeGZvcm0ub3B0aW9ucyAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHhmb3JtLmN1c3RvbUZpbHRlciAhPSBOVUxMKTsKKyAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplOworCisgICAgLyogUmVhZCB0aGUgSlBFRyBmaWxlIGludG8gbWVtb3J5LiAqLworICAgIGlmICgoanBlZ0ZpbGUgPSBmb3Blbihhcmd2WzFdLCAicmIiKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd3VuaXgoIm9wZW5pbmcgaW5wdXQgZmlsZSIpOworICAgIGlmIChmc2VlayhqcGVnRmlsZSwgMCwgU0VFS19FTkQpIDwgMCB8fCAoKHNpemUgPSBmdGVsbChqcGVnRmlsZSkpIDwgMCkgfHwKKyAgICAgICAgZnNlZWsoanBlZ0ZpbGUsIDAsIFNFRUtfU0VUKSA8IDApCisgICAgICBfdGhyb3d1bml4KCJkZXRlcm1pbmluZyBpbnB1dCBmaWxlIHNpemUiKTsKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgX3Rocm93KCJkZXRlcm1pbmluZyBpbnB1dCBmaWxlIHNpemUiLCAiSW5wdXQgZmlsZSBjb250YWlucyBubyBkYXRhIik7CisgICAganBlZ1NpemUgPSAodW5zaWduZWQgbG9uZylzaXplOworICAgIGlmICgoanBlZ0J1ZiA9ICh1bnNpZ25lZCBjaGFyICopdGpBbGxvYyhqcGVnU2l6ZSkpID09IE5VTEwpCisgICAgICBfdGhyb3d1bml4KCJhbGxvY2F0aW5nIEpQRUcgYnVmZmVyIik7CisgICAgaWYgKGZyZWFkKGpwZWdCdWYsIGpwZWdTaXplLCAxLCBqcGVnRmlsZSkgPCAxKQorICAgICAgX3Rocm93dW5peCgicmVhZGluZyBpbnB1dCBmaWxlIik7CisgICAgZmNsb3NlKGpwZWdGaWxlKTsgIGpwZWdGaWxlID0gTlVMTDsKKworICAgIGlmIChkb1RyYW5zZm9ybSkgeworICAgICAgLyogVHJhbnNmb3JtIGl0LiAqLworICAgICAgdW5zaWduZWQgY2hhciAqZHN0QnVmID0gTlVMTDsgIC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciAqLworICAgICAgdW5zaWduZWQgbG9uZyBkc3RTaXplID0gMDsKKworICAgICAgaWYgKCh0akluc3RhbmNlID0gdGpJbml0VHJhbnNmb3JtKCkpID09IE5VTEwpCisgICAgICAgIF90aHJvd3RqKCJpbml0aWFsaXppbmcgdHJhbnNmb3JtZXIiKTsKKyAgICAgIHhmb3JtLm9wdGlvbnMgfD0gVEpYT1BUX1RSSU07CisgICAgICBpZiAodGpUcmFuc2Zvcm0odGpJbnN0YW5jZSwganBlZ0J1ZiwganBlZ1NpemUsIDEsICZkc3RCdWYsICZkc3RTaXplLAorICAgICAgICAgICAgICAgICAgICAgICZ4Zm9ybSwgZmxhZ3MpIDwgMCkKKyAgICAgICAgX3Rocm93dGooInRyYW5zZm9ybWluZyBpbnB1dCBpbWFnZSIpOworICAgICAgdGpGcmVlKGpwZWdCdWYpOworICAgICAganBlZ0J1ZiA9IGRzdEJ1ZjsKKyAgICAgIGpwZWdTaXplID0gZHN0U2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCh0akluc3RhbmNlID0gdGpJbml0RGVjb21wcmVzcygpKSA9PSBOVUxMKQorICAgICAgICBfdGhyb3d0aigiaW5pdGlhbGl6aW5nIGRlY29tcHJlc3NvciIpOworICAgIH0KKworICAgIGlmICh0akRlY29tcHJlc3NIZWFkZXIzKHRqSW5zdGFuY2UsIGpwZWdCdWYsIGpwZWdTaXplLCAmd2lkdGgsICZoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluU3Vic2FtcCwgJmluQ29sb3JzcGFjZSkgPCAwKQorICAgICAgX3Rocm93dGooInJlYWRpbmcgSlBFRyBoZWFkZXIiKTsKKworICAgIHByaW50ZigiJXMgSW1hZ2U6ICAlZCB4ICVkIHBpeGVscywgJXMgc3Vic2FtcGxpbmcsICVzIGNvbG9yc3BhY2VcbiIsCisgICAgICAgICAgIChkb1RyYW5zZm9ybSA/ICJUcmFuc2Zvcm1lZCIgOiAiSW5wdXQiKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgc3Vic2FtcE5hbWVbaW5TdWJzYW1wXSwgY29sb3JzcGFjZU5hbWVbaW5Db2xvcnNwYWNlXSk7CisKKyAgICBpZiAoIXN0cmNhc2VjbXAob3V0Rm9ybWF0LCAianBnIikgJiYgZG9UcmFuc2Zvcm0gJiYKKyAgICAgICAgc2NhbGluZ0ZhY3Rvci5udW0gPT0gMSAmJiBzY2FsaW5nRmFjdG9yLmRlbm9tID09IDEgJiYgb3V0U3Vic2FtcCA8IDAgJiYKKyAgICAgICAgb3V0UXVhbCA8IDApIHsKKyAgICAgIC8qIElucHV0IGltYWdlIGhhcyBiZWVuIHRyYW5zZm9ybWVkLCBhbmQgbm8gcmUtY29tcHJlc3Npb24gb3B0aW9ucworICAgICAgICAgaGF2ZSBiZWVuIHNlbGVjdGVkLiAgV3JpdGUgdGhlIHRyYW5zZm9ybWVkIGltYWdlIHRvIGRpc2sgYW5kIGV4aXQuICovCisgICAgICBpZiAoKGpwZWdGaWxlID0gZm9wZW4oYXJndlsyXSwgIndiIikpID09IE5VTEwpCisgICAgICAgIF90aHJvd3VuaXgoIm9wZW5pbmcgb3V0cHV0IGZpbGUiKTsKKyAgICAgIGlmIChmd3JpdGUoanBlZ0J1ZiwganBlZ1NpemUsIDEsIGpwZWdGaWxlKSA8IDEpCisgICAgICAgIF90aHJvd3VuaXgoIndyaXRpbmcgb3V0cHV0IGZpbGUiKTsKKyAgICAgIGZjbG9zZShqcGVnRmlsZSk7ICBqcGVnRmlsZSA9IE5VTEw7CisgICAgICBnb3RvIGJhaWxvdXQ7CisgICAgfQorCisgICAgLyogU2NhbGluZyBhbmQvb3IgYSBub24tSlBFRyBvdXRwdXQgaW1hZ2UgZm9ybWF0IGFuZC9vciBjb21wcmVzc2lvbiBvcHRpb25zCisgICAgICAgaGF2ZSBiZWVuIHNlbGVjdGVkLCBzbyB3ZSBuZWVkIHRvIGRlY29tcHJlc3MgdGhlIGlucHV0L3RyYW5zZm9ybWVkCisgICAgICAgaW1hZ2UuICovCisgICAgd2lkdGggPSBUSlNDQUxFRCh3aWR0aCwgc2NhbGluZ0ZhY3Rvcik7CisgICAgaGVpZ2h0ID0gVEpTQ0FMRUQoaGVpZ2h0LCBzY2FsaW5nRmFjdG9yKTsKKyAgICBpZiAob3V0U3Vic2FtcCA8IDApCisgICAgICBvdXRTdWJzYW1wID0gaW5TdWJzYW1wOworCisgICAgcGl4ZWxGb3JtYXQgPSBUSlBGX0JHUlg7CisgICAgaWYgKChpbWdCdWYgPSAodW5zaWduZWQgY2hhciAqKXRqQWxsb2Mod2lkdGggKiBoZWlnaHQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XSkpID09IE5VTEwpCisgICAgICBfdGhyb3d1bml4KCJhbGxvY2F0aW5nIHVuY29tcHJlc3NlZCBpbWFnZSBidWZmZXIiKTsKKworICAgIGlmICh0akRlY29tcHJlc3MyKHRqSW5zdGFuY2UsIGpwZWdCdWYsIGpwZWdTaXplLCBpbWdCdWYsIHdpZHRoLCAwLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxGb3JtYXQsIGZsYWdzKSA8IDApCisgICAgICBfdGhyb3d0aigiZGVjb21wcmVzc2luZyBKUEVHIGltYWdlIik7CisgICAgdGpGcmVlKGpwZWdCdWYpOyAganBlZ0J1ZiA9IE5VTEw7CisgICAgdGpEZXN0cm95KHRqSW5zdGFuY2UpOyAgdGpJbnN0YW5jZSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgLyogSW5wdXQgaW1hZ2UgaXMgbm90IGEgSlBFRyBpbWFnZS4gIExvYWQgaXQgaW50byBtZW1vcnkuICovCisgICAgaWYgKChpbWdCdWYgPSB0akxvYWRJbWFnZShhcmd2WzFdLCAmd2lkdGgsIDEsICZoZWlnaHQsICZwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSA9PSBOVUxMKQorICAgICAgX3Rocm93dGooImxvYWRpbmcgaW5wdXQgaW1hZ2UiKTsKKyAgICBpZiAob3V0U3Vic2FtcCA8IDApIHsKKyAgICAgIGlmIChwaXhlbEZvcm1hdCA9PSBUSlBGX0dSQVkpCisgICAgICAgIG91dFN1YnNhbXAgPSBUSlNBTVBfR1JBWTsKKyAgICAgIGVsc2UKKyAgICAgICAgb3V0U3Vic2FtcCA9IFRKU0FNUF80NDQ7CisgICAgfQorICAgIHByaW50ZigiSW5wdXQgSW1hZ2U6ICAlZCB4ICVkIHBpeGVsc1xuIiwgd2lkdGgsIGhlaWdodCk7CisgIH0KKworICBwcmludGYoIk91dHB1dCBJbWFnZSAoJXMpOiAgJWQgeCAlZCBwaXhlbHMiLCBvdXRGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgIGlmICghc3RyY2FzZWNtcChvdXRGb3JtYXQsICJqcGciKSkgeworICAgIC8qIE91dHB1dCBpbWFnZSBmb3JtYXQgaXMgSlBFRy4gIENvbXByZXNzIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UuICovCisgICAgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiA9IE5VTEw7ICAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgSlBFRyBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplID0gMDsKKworICAgIGlmIChvdXRRdWFsIDwgMCkKKyAgICAgIG91dFF1YWwgPSBERUZBVUxUX1FVQUxJVFk7CisgICAgcHJpbnRmKCIsICVzIHN1YnNhbXBsaW5nLCBxdWFsaXR5ID0gJWRcbiIsIHN1YnNhbXBOYW1lW291dFN1YnNhbXBdLAorICAgICAgICAgICBvdXRRdWFsKTsKKworICAgIGlmICgodGpJbnN0YW5jZSA9IHRqSW5pdENvbXByZXNzKCkpID09IE5VTEwpCisgICAgICBfdGhyb3d0aigiaW5pdGlhbGl6aW5nIGNvbXByZXNzb3IiKTsKKyAgICBpZiAodGpDb21wcmVzczIodGpJbnN0YW5jZSwgaW1nQnVmLCB3aWR0aCwgMCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgJmpwZWdCdWYsICZqcGVnU2l6ZSwgb3V0U3Vic2FtcCwgb3V0UXVhbCwgZmxhZ3MpIDwgMCkKKyAgICAgIF90aHJvd3RqKCJjb21wcmVzc2luZyBpbWFnZSIpOworICAgIHRqRGVzdHJveSh0akluc3RhbmNlKTsgIHRqSW5zdGFuY2UgPSBOVUxMOworCisgICAgLyogV3JpdGUgdGhlIEpQRUcgaW1hZ2UgdG8gZGlzay4gKi8KKyAgICBpZiAoKGpwZWdGaWxlID0gZm9wZW4oYXJndlsyXSwgIndiIikpID09IE5VTEwpCisgICAgICBfdGhyb3d1bml4KCJvcGVuaW5nIG91dHB1dCBmaWxlIik7CisgICAgaWYgKGZ3cml0ZShqcGVnQnVmLCBqcGVnU2l6ZSwgMSwganBlZ0ZpbGUpIDwgMSkKKyAgICAgIF90aHJvd3VuaXgoIndyaXRpbmcgb3V0cHV0IGZpbGUiKTsKKyAgICB0akRlc3Ryb3kodGpJbnN0YW5jZSk7ICB0akluc3RhbmNlID0gTlVMTDsKKyAgICBmY2xvc2UoanBlZ0ZpbGUpOyAganBlZ0ZpbGUgPSBOVUxMOworICAgIHRqRnJlZShqcGVnQnVmKTsgIGpwZWdCdWYgPSBOVUxMOworICB9IGVsc2UgeworICAgIC8qIE91dHB1dCBpbWFnZSBmb3JtYXQgaXMgbm90IEpQRUcuICBTYXZlIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UKKyAgICAgICBkaXJlY3RseSB0byBkaXNrLiAqLworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAodGpTYXZlSW1hZ2UoYXJndlsyXSwgaW1nQnVmLCB3aWR0aCwgMCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgMCkgPCAwKQorICAgICAgX3Rocm93dGooInNhdmluZyBvdXRwdXQgaW1hZ2UiKTsKKyAgfQorCitiYWlsb3V0OgorICBpZiAoaW1nQnVmKSB0akZyZWUoaW1nQnVmKTsKKyAgaWYgKHRqSW5zdGFuY2UpIHRqRGVzdHJveSh0akluc3RhbmNlKTsKKyAgaWYgKGpwZWdCdWYpIHRqRnJlZShqcGVnQnVmKTsKKyAgaWYgKGpwZWdGaWxlKSBmY2xvc2UoanBlZ0ZpbGUpOworICByZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGpleGFtcGxldGVzdC5pbiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqZXhhbXBsZXRlc3QuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQzMDQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqZXhhbXBsZXRlc3QuaW4KQEAgLTAsMCArMSwxNDkgQEAKKyMhL2Jpbi9iYXNoCisKK3NldCAtdQorc2V0IC1lCit0cmFwIG9uZXhpdCBJTlQKK3RyYXAgb25leGl0IFRFUk0KK3RyYXAgb25leGl0IEVYSVQKKworb25leGl0KCkKK3sKKwlpZiBbIC1kICRPVVRESVIgXTsgdGhlbgorCQlybSAtcmYgJE9VVERJUgorCWZpCit9CisKK3J1bm1lKCkKK3sKKwllY2hvIFwqXCpcKiAkKgorCSQqCit9CisKK0lNQUdFUz0idmdsXzU2NzRfMDA5OC5ibXAgdmdsXzY0MzRfMDAxOGEuYm1wIHZnbF82NTQ4XzAwMjZhLmJtcCBuaWdodHNob3RfaXNvXzEwMC5ibXAiCitJTUdESVI9QENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkAvdGVzdGltYWdlcworT1VURElSPWBta3RlbXAgLWQgL3RtcC9fX3RqZXhhbXBsZXRlc3Rfb3V0cHV0LlhYWFhYWGAKK0VYRURJUj1AQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQAorCitpZiBbIC1kICRPVVRESVIgXTsgdGhlbgorCXJtIC1yZiAkT1VURElSCitmaQorbWtkaXIgLXAgJE9VVERJUgorCitleGVjID4kRVhFRElSL3RqZXhhbXBsZXRlc3QubG9nCisKK2ZvciBpbWFnZSBpbiAkSU1BR0VTOyBkbworCisJY3AgJElNR0RJUi8kaW1hZ2UgJE9VVERJUgorCWJhc2VuYW1lPWBiYXNlbmFtZSAkaW1hZ2UgLmJtcGAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtZ3JheXNjYWxlIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fR1JBWV9mYXN0X2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBmYXN0IC1zYW1wbGUgMngyIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDIwX2Zhc3RfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGZhc3QgLXNhbXBsZSAyeDEgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80MjJfZmFzdF9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtc2FtcGxlIDF4MSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQ0NF9mYXN0X2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBpbnQgLWdyYXlzY2FsZSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfYWNjdXJhdGVfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGludCAtc2FtcGxlIDJ4MiAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQyMF9hY2N1cmF0ZV9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50IC1zYW1wbGUgMngxIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDIyX2FjY3VyYXRlX2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBpbnQgLXNhbXBsZSAxeDEgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80NDRfYWNjdXJhdGVfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2RlZmF1bHRfZGpwZWcuYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZworCQlydW5tZSAkRVhFRElSL2RqcGVnIC1kY3QgZmFzdCAtcmdiIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfZGpwZWcuYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZworCQlydW5tZSAkRVhFRElSL2RqcGVnIC1kY3QgaW50IC1yZ2IgLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fYWNjdXJhdGVfZGpwZWcuYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9hY2N1cmF0ZV9janBlZy5qcGcKKwlkb25lCisJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJcnVubWUgJEVYRURJUi9kanBlZyAtbm9zbW9vdGggLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZGVmYXVsdF9ub3Ntb290aF9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLWRjdCBmYXN0IC1ub3Ntb290aCAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X25vc21vb3RoX2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJcnVubWUgJEVYRURJUi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fYWNjdXJhdGVfbm9zbW9vdGhfZGpwZWcuYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9hY2N1cmF0ZV9janBlZy5qcGcKKwlkb25lCisKKwkjIENvbXByZXNzaW9uCisJZm9yIGRjdCBpbiBmYXN0IGFjY3VyYXRlOyBkbworCQlmb3Igc2FtcCBpbiBHUkFZIDQyMCA0MjIgNDQ0OyBkbworCQkJcnVubWUgJEVYRURJUi90amV4YW1wbGUgJE9VVERJUi8kaW1hZ2UgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fS5qcGcgLXEgOTUgLXN1YnNhbXAgJHtzYW1wfSAtJHtkY3R9ZGN0CisJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fS5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9janBlZy5qcGcKKwkJZG9uZQorCWRvbmUKKworCSMgRGVjb21wcmVzc2lvbgorCWZvciBkY3QgaW4gZmFzdCBhY2N1cmF0ZSBkZWZhdWx0OyBkbworCQlzcmNkY3Q9JHtkY3R9CisJCWRjdGFyZz0tJHtkY3R9ZGN0CisJCWlmIFsgIiR7ZGN0fSIgPSAiZGVmYXVsdCIgXTsgdGhlbgorCQkJc3JjZGN0PWZhc3QKKwkJCWRjdGFyZz0KKwkJZmkKKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCXJ1bm1lICRFWEVESVIvdGpleGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NyY2RjdH0uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH0uYm1wICR7ZGN0YXJnfQorCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fZGpwZWcuYm1wCisJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9LmJtcAorCQlkb25lCisJCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCisJCQlydW5tZSAkRVhFRElSL3RqZXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzcmNkY3R9LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoLmJtcCAtZmFzdHVwc2FtcGxlICR7ZGN0YXJnfQorCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGguYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGhfZGpwZWcuYm1wCisJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoLmJtcAorCQlkb25lCisJZG9uZQorCisJIyBTY2FsZWQgZGVjb21wcmVzc2lvbgorCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJc2NhbGVhcmc9YGVjaG8gJHNjYWxlIHwgc2VkICdzL1xfL1wvL2cnYAorCQlmb3Igc2FtcCBpbiBHUkFZIDQyMCA0MjIgNDQ0OyBkbworCQkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiIC1ibXAgLXNjYWxlICR7c2NhbGVhcmd9IC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfV9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCQlydW5tZSAkRVhFRElSL3RqZXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9LmJtcCAtc2NhbGUgJHtzY2FsZWFyZ30KKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzY2FsZX0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfV9kanBlZy5ibXAKKwkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfS5ibXAKKwkJZG9uZQorCWRvbmUKKworCSMgVHJhbnNmb3JtcworCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLWNyb3AgNzB4NjArMTYrMTYgLWZsaXAgaG9yaXpvbnRhbCAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1faGZsaXBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1jcm9wIDcweDYwKzE2KzE2IC1mbGlwIHZlcnRpY2FsIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV92ZmxpcF9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLWNyb3AgNzB4NjArMTYrMTYgLXRyYW5zcG9zZSAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnNwb3NlX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcKKwkJcnVubWUgJEVYRURJUi9qcGVndHJhbiAtY3JvcCA3MHg2MCsxNisxNiAtdHJhbnN2ZXJzZSAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnN2ZXJzZV9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLWNyb3AgNzB4NjArMTYrMTYgLXJvdGF0ZSA5MCAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fcm90OTBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1jcm9wIDcweDYwKzE2KzE2IC1yb3RhdGUgMTgwIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QxODBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1jcm9wIDcweDYwKzE2KzE2IC1yb3RhdGUgMjcwIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QyNzBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCWRvbmUKKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCXJ1bm1lICRFWEVESVIvdGpleGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uanBnIC0keGZvcm0gLWNyb3AgNzB4NjArMTYrMTYKKwkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcKKwkJCXJ1bm1lICRFWEVESVIvZGpwZWcgLXJnYiAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmpwZworCQkJcnVubWUgJEVYRURJUi90amV4YW1wbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5ibXAgLSR4Zm9ybSAtY3JvcCA3MHg2MCsxNisxNgorCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcAorCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcAorCQlkb25lCisJCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCisJCQlydW5tZSAkRVhFRElSL2RqcGVnIC1ub3Ntb290aCAtcmdiIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQlydW5tZSAkRVhFRElSL3RqZXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcCAtJHhmb3JtIC1jcm9wIDcweDYwKzE2KzE2IC1mYXN0dXBzYW1wbGUKKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5ibXAKKwkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5ibXAKKwkJZG9uZQorCWRvbmUKKworCSMgR3JheXNjYWxlIHRyYW5zZm9ybQorCWZvciB4Zm9ybSBpbiBoZmxpcCB2ZmxpcCB0cmFuc3Bvc2UgdHJhbnN2ZXJzZSByb3Q5MCByb3QxODAgcm90MjcwOyBkbworCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NCA0MjIgNDIwOyBkbworCQkJcnVubWUgJEVYRURJUi90amV4YW1wbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5qcGcgLSR4Zm9ybSAtZ3JheXNjYWxlIC1jcm9wIDcweDYwKzE2KzE2CisJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQlydW5tZSAkRVhFRElSL3RqZXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcCAtJHhmb3JtIC1ncmF5c2NhbGUgLWNyb3AgNzB4NjArMTYrMTYKKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fR1JBWV8ke3hmb3JtfV9qcGVndHJhbi5ibXAKKwkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5ibXAKKwkJZG9uZQorCWRvbmUKKworCSMgVHJhbnNmb3JtcyB3aXRoIHNjYWxpbmcKKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KKwkJCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgJ3MvXF8vXC8vZydgCisJCQkJcnVubWUgJEVYRURJUi9kanBlZyAtcmdiIC1ibXAgLXNjYWxlICR7c2NhbGVhcmd9IC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfV9qcGVndHJhbi5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmpwZworCQkJCXJ1bm1lICRFWEVESVIvdGpleGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX0uYm1wIC0keGZvcm0gLXNjYWxlICR7c2NhbGVhcmd9IC1jcm9wIDcweDYwKzE2KzE2CisJCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfS5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLmJtcAorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfS5ibXAKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworZG9uZQorCitlY2hvIFNVQ0NFU1MhCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90amV4YW1wbGV0ZXN0LmphdmEuaW4gYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90amV4YW1wbGV0ZXN0LmphdmEuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDRiNjNiYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqZXhhbXBsZXRlc3QuamF2YS5pbgpAQCAtMCwwICsxLDE1MSBAQAorIyEvYmluL2Jhc2gKKworc2V0IC11CitzZXQgLWUKK3RyYXAgb25leGl0IElOVAordHJhcCBvbmV4aXQgVEVSTQordHJhcCBvbmV4aXQgRVhJVAorCitvbmV4aXQoKQoreworCWlmIFsgLWQgJE9VVERJUiBdOyB0aGVuCisJCXJtIC1yZiAkT1VURElSCisJZmkKK30KKworcnVubWUoKQoreworCWVjaG8gXCpcKlwqICQqCisJIiRAIgorfQorCitJTUFHRVM9InZnbF81Njc0XzAwOTguYm1wIHZnbF82NDM0XzAwMThhLmJtcCB2Z2xfNjU0OF8wMDI2YS5ibXAgbmlnaHRzaG90X2lzb18xMDAuYm1wIgorSU1HRElSPUBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAL3Rlc3RpbWFnZXMKK09VVERJUj1gbWt0ZW1wIC1kIC90bXAvX190amV4YW1wbGV0ZXN0X2phdmFfb3V0cHV0LlhYWFhYWGAKK0VYRURJUj1AQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQAorSkFWQT0iQEphdmFfSkFWQV9FWEVDVVRBQkxFQCIKK0pBVkFBUkdTPSItY3AgJEVYRURJUi9qYXZhL3R1cmJvanBlZy5qYXIgLURqYXZhLmxpYnJhcnkucGF0aD0kRVhFRElSIgorCitpZiBbIC1kICRPVVRESVIgXTsgdGhlbgorCXJtIC1yZiAkT1VURElSCitmaQorbWtkaXIgLXAgJE9VVERJUgorCitleGVjID4kRVhFRElSL3RqZXhhbXBsZXRlc3QtamF2YS5sb2cKKworZm9yIGltYWdlIGluICRJTUFHRVM7IGRvCisKKwljcCAkSU1HRElSLyRpbWFnZSAkT1VURElSCisJYmFzZW5hbWU9YGJhc2VuYW1lICRpbWFnZSAuYm1wYAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBmYXN0IC1ncmF5c2NhbGUgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV9HUkFZX2Zhc3RfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGZhc3QgLXNhbXBsZSAyeDIgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80MjBfZmFzdF9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtc2FtcGxlIDJ4MSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQyMl9mYXN0X2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBmYXN0IC1zYW1wbGUgMXgxIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDQ0X2Zhc3RfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGludCAtZ3JheXNjYWxlIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fR1JBWV9hY2N1cmF0ZV9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlydW5tZSAkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50IC1zYW1wbGUgMngyIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fNDIwX2FjY3VyYXRlX2NqcGVnLmpwZyAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcAorCXJ1bm1lICRFWEVESVIvY2pwZWcgLXF1YWxpdHkgOTUgLWRjdCBpbnQgLXNhbXBsZSAyeDEgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV80MjJfYWNjdXJhdGVfY2pwZWcuanBnICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wCisJcnVubWUgJEVYRURJUi9janBlZyAtcXVhbGl0eSA5NSAtZGN0IGludCAtc2FtcGxlIDF4MSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XzQ0NF9hY2N1cmF0ZV9janBlZy5qcGcgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAKKwlmb3Igc2FtcCBpbiBHUkFZIDQyMCA0MjIgNDQ0OyBkbworCQlydW5tZSAkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZGVmYXVsdF9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLWRjdCBmYXN0IC1yZ2IgLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnCisJCXJ1bm1lICRFWEVESVIvZGpwZWcgLWRjdCBpbnQgLXJnYiAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9hY2N1cmF0ZV9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX2NqcGVnLmpwZworCWRvbmUKKwlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbworCQlydW5tZSAkRVhFRElSL2RqcGVnIC1ub3Ntb290aCAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9kZWZhdWx0X25vc21vb3RoX2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJcnVubWUgJEVYRURJUi9kanBlZyAtZGN0IGZhc3QgLW5vc21vb3RoIC1ibXAgLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3Rfbm9zbW9vdGhfZGpwZWcuYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZworCQlydW5tZSAkRVhFRElSL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtYm1wIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9hY2N1cmF0ZV9ub3Ntb290aF9kanBlZy5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX2NqcGVnLmpwZworCWRvbmUKKworCSMgQ29tcHJlc3Npb24KKwlmb3IgZGN0IGluIGZhc3QgYWNjdXJhdGU7IGRvCisJCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCQlydW5tZSAiJEpBVkEiICRKQVZBQVJHUyBUSkV4YW1wbGUgJE9VVERJUi8kaW1hZ2UgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fS5qcGcgLXEgOTUgLXN1YnNhbXAgJHtzYW1wfSAtJHtkY3R9ZGN0CisJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fS5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9janBlZy5qcGcKKwkJZG9uZQorCWRvbmUKKworCSMgRGVjb21wcmVzc2lvbgorCWZvciBkY3QgaW4gZmFzdCBhY2N1cmF0ZSBkZWZhdWx0OyBkbworCQlzcmNkY3Q9JHtkY3R9CisJCWRjdGFyZz0tJHtkY3R9ZGN0CisJCWlmIFsgIiR7ZGN0fSIgPSAiZGVmYXVsdCIgXTsgdGhlbgorCQkJc3JjZGN0PWZhc3QKKwkJCWRjdGFyZz0KKwkJZmkKKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKRXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzcmNkY3R9LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9LmJtcCAke2RjdGFyZ30KKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2RqcGVnLmJtcAorCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fS5ibXAKKwkJZG9uZQorCQlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbworCQkJcnVubWUgIiRKQVZBIiAkSkFWQUFSR1MgVEpFeGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NyY2RjdH0uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGguYm1wIC1mYXN0dXBzYW1wbGUgJHtkY3Rhcmd9CisJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aC5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aF9kanBlZy5ibXAKKwkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGguYm1wCisJCWRvbmUKKwlkb25lCisKKwkjIFNjYWxlZCBkZWNvbXByZXNzaW9uCisJZm9yIHNjYWxlIGluIDJfMSAxNV84IDdfNCAxM184IDNfMiAxMV84IDVfNCA5XzggN184IDNfNCA1XzggMV8yIDNfOCAxXzQgMV84OyBkbworCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgJ3MvXF8vXC8vZydgCisJCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCQlydW5tZSAkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAtc2NhbGUgJHtzY2FsZWFyZ30gLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9X2RqcGVnLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcKKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKRXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9LmJtcCAtc2NhbGUgJHtzY2FsZWFyZ30KKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzY2FsZX0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfV9kanBlZy5ibXAKKwkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfS5ibXAKKwkJZG9uZQorCWRvbmUKKworCSMgVHJhbnNmb3JtcworCWZvciBzYW1wIGluIEdSQVkgNDIwIDQyMiA0NDQ7IGRvCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLWNyb3AgNzB4NjArMTYrMTYgLWZsaXAgaG9yaXpvbnRhbCAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1faGZsaXBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1jcm9wIDcweDYwKzE2KzE2IC1mbGlwIHZlcnRpY2FsIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV92ZmxpcF9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLWNyb3AgNzB4NjArMTYrMTYgLXRyYW5zcG9zZSAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnNwb3NlX2pwZWd0cmFuLmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcKKwkJcnVubWUgJEVYRURJUi9qcGVndHJhbiAtY3JvcCA3MHg2MCsxNisxNiAtdHJhbnN2ZXJzZSAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnN2ZXJzZV9qcGVndHJhbi5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnCisJCXJ1bm1lICRFWEVESVIvanBlZ3RyYW4gLWNyb3AgNzB4NjArMTYrMTYgLXJvdGF0ZSA5MCAtdHJpbSAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fcm90OTBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1jcm9wIDcweDYwKzE2KzE2IC1yb3RhdGUgMTgwIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QxODBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCQlydW5tZSAkRVhFRElSL2pwZWd0cmFuIC1jcm9wIDcweDYwKzE2KzE2IC1yb3RhdGUgMjcwIC10cmltIC1vdXRmaWxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QyNzBfanBlZ3RyYW4uanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZworCWRvbmUKKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKRXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmpwZyAtJHhmb3JtIC1jcm9wIDcweDYwKzE2KzE2CisJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQlydW5tZSAkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcKKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKRXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcCAtJHhmb3JtIC1jcm9wIDcweDYwKzE2KzE2CisJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uYm1wCisJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uYm1wCisJCWRvbmUKKwkJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJCXJ1bm1lICRFWEVESVIvZGpwZWcgLW5vc21vb3RoIC1yZ2IgLWJtcCAtb3V0ZmlsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcKKwkJCXJ1bm1lICIkSkFWQSIgJEpBVkFBUkdTIFRKRXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcCAtJHhmb3JtIC1jcm9wIDcweDYwKzE2KzE2IC1mYXN0dXBzYW1wbGUKKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5ibXAKKwkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5ibXAKKwkJZG9uZQorCWRvbmUKKworCSMgR3JheXNjYWxlIHRyYW5zZm9ybQorCWZvciB4Zm9ybSBpbiBoZmxpcCB2ZmxpcCB0cmFuc3Bvc2UgdHJhbnN2ZXJzZSByb3Q5MCByb3QxODAgcm90MjcwOyBkbworCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NCA0MjIgNDIwOyBkbworCQkJcnVubWUgIiRKQVZBIiAkSkFWQUFSR1MgVEpFeGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uanBnIC0keGZvcm0gLWdyYXlzY2FsZSAtY3JvcCA3MHg2MCsxNisxNgorCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV9HUkFZXyR7eGZvcm19X2pwZWd0cmFuLmpwZworCQkJcnVubWUgIiRKQVZBIiAkSkFWQUFSR1MgVEpFeGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX0uYm1wIC0keGZvcm0gLWdyYXlzY2FsZSAtY3JvcCA3MHg2MCsxNisxNgorCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfS5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV9HUkFZXyR7eGZvcm19X2pwZWd0cmFuLmJtcAorCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19LmJtcAorCQlkb25lCisJZG9uZQorCisJIyBUcmFuc2Zvcm1zIHdpdGggc2NhbGluZworCWZvciB4Zm9ybSBpbiBoZmxpcCB2ZmxpcCB0cmFuc3Bvc2UgdHJhbnN2ZXJzZSByb3Q5MCByb3QxODAgcm90MjcwOyBkbworCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NCA0MjIgNDIwOyBkbworCQkJZm9yIHNjYWxlIGluIDJfMSAxNV84IDdfNCAxM184IDNfMiAxMV84IDVfNCA5XzggN184IDNfNCA1XzggMV8yIDNfOCAxXzQgMV84OyBkbworCQkJCXNjYWxlYXJnPWBlY2hvICRzY2FsZSB8IHNlZCAncy9cXy9cLy9nJ2AKKwkJCQlydW5tZSAkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAtc2NhbGUgJHtzY2FsZWFyZ30gLW91dGZpbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnCisJCQkJcnVubWUgIiRKQVZBIiAkSkFWQUFSR1MgVEpFeGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX0uYm1wIC0keGZvcm0gLXNjYWxlICR7c2NhbGVhcmd9IC1jcm9wIDcweDYwKzE2KzE2CisJCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfS5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLmJtcAorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfS5ibXAKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworZG9uZQorCitlY2hvIFNVQ0NFU1MhCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90anVuaXR0ZXN0LmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90anVuaXR0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3MmU4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqdW5pdHRlc3QuYwpAQCAtMCwwICsxLDg5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDA5LTIwMTQsIDIwMTctMjAxOCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSB0ZXN0cyB0aGUgdmFyaW91cyBjb2RlIHBhdGhzIGluIHRoZSBUdXJib0pQRUcgQyBXcmFwcGVyCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJ0anV0aWwuaCIKKyNpbmNsdWRlICJ0dXJib2pwZWcuaCIKKyNpbmNsdWRlICJtZDUvbWQ1LmgiCisjaW5jbHVkZSAiY215ay5oIgorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHRpbWUuaD4KKyNkZWZpbmUgcmFuZG9tKCkgIHJhbmQoKQorI2Vsc2UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisKK3ZvaWQgdXNhZ2UoY2hhciAqcHJvZ05hbWUpCit7CisgIHByaW50ZigiXG5VU0FHRTogJXMgW29wdGlvbnNdXG5cbiIsIHByb2dOYW1lKTsKKyAgcHJpbnRmKCJPcHRpb25zOlxuIik7CisgIHByaW50ZigiLXl1diA9IHRlc3QgWVVWIGVuY29kaW5nL2RlY29kaW5nIHN1cHBvcnRcbiIpOworICBwcmludGYoIi1ub3l1dnBhZCA9IGRvIG5vdCBwYWQgZWFjaCBsaW5lIG9mIGVhY2ggWSwgVSwgYW5kIFYgcGxhbmUgdG8gdGhlIG5lYXJlc3RcbiIpOworICBwcmludGYoIiAgICAgICAgICAgIDQtYnl0ZSBib3VuZGFyeVxuIik7CisgIHByaW50ZigiLWFsbG9jID0gdGVzdCBhdXRvbWF0aWMgYnVmZmVyIGFsbG9jYXRpb25cbiIpOworICBwcmludGYoIi1ibXAgPSB0akxvYWRJbWFnZSgpL3RqU2F2ZUltYWdlKCkgdW5pdCB0ZXN0XG5cbiIpOworICBleGl0KDEpOworfQorCisKKyNkZWZpbmUgX3Rocm93dGooKSB7IFwKKyAgcHJpbnRmKCJUdXJib0pQRUcgRVJST1I6XG4lc1xuIiwgdGpHZXRFcnJvclN0cigpKTsgXAorICBiYWlsb3V0KCkgXAorfQorI2RlZmluZSBfdGooZikgeyBpZiAoKGYpID09IC0xKSBfdGhyb3d0aigpOyB9CisjZGVmaW5lIF90aHJvdyhtKSB7IHByaW50ZigiRVJST1I6ICVzXG4iLCBtKTsgIGJhaWxvdXQoKSB9CisjZGVmaW5lIF90aHJvd21kNShmaWxlbmFtZSwgbWQ1c3VtLCByZWYpIHsgXAorICBwcmludGYoIlxuJXMgaGFzIGFuIE1ENSBzdW0gb2YgJXMuXG4gICBTaG91bGQgYmUgJXMuXG4iLCBmaWxlbmFtZSwgbWQ1c3VtLCBcCisgICAgICAgICByZWYpOyBcCisgIGJhaWxvdXQoKSBcCit9CisKK2NvbnN0IGNoYXIgKnN1Yk5hbWVMb25nW1RKX05VTVNBTVBdID0geworICAiNDo0OjQiLCAiNDoyOjIiLCAiNDoyOjAiLCAiR1JBWSIsICI0OjQ6MCIsICI0OjE6MSIKK307Citjb25zdCBjaGFyICpzdWJOYW1lW1RKX05VTVNBTVBdID0geworICAiNDQ0IiwgIjQyMiIsICI0MjAiLCAiR1JBWSIsICI0NDAiLCAiNDExIgorfTsKKworY29uc3QgY2hhciAqcGl4Rm9ybWF0U3RyW1RKX05VTVBGXSA9IHsKKyAgIlJHQiIsICJCR1IiLCAiUkdCWCIsICJCR1JYIiwgIlhCR1IiLCAiWFJHQiIsICJHcmF5c2NhbGUiLAorICAiUkdCQSIsICJCR1JBIiwgIkFCR1IiLCAiQVJHQiIsICJDTVlLIgorfTsKKworY29uc3QgaW50IF8zYnl0ZUZvcm1hdHNbXSA9IHsgVEpQRl9SR0IsIFRKUEZfQkdSIH07Citjb25zdCBpbnQgXzRieXRlRm9ybWF0c1tdID0geworICBUSlBGX1JHQlgsIFRKUEZfQkdSWCwgVEpQRl9YQkdSLCBUSlBGX1hSR0IsIFRKUEZfQ01ZSworfTsKK2NvbnN0IGludCBfb25seUdyYXlbXSA9IHsgVEpQRl9HUkFZIH07Citjb25zdCBpbnQgX29ubHlSR0JbXSA9IHsgVEpQRl9SR0IgfTsKKworaW50IGRvWVVWID0gMCwgYWxsb2MgPSAwLCBwYWQgPSA0OworCitpbnQgZXhpdFN0YXR1cyA9IDA7CisjZGVmaW5lIGJhaWxvdXQoKSB7IGV4aXRTdGF0dXMgPSAtMTsgIGdvdG8gYmFpbG91dDsgfQorCisKK3ZvaWQgaW5pdEJ1Zih1bnNpZ25lZCBjaGFyICpidWYsIGludCB3LCBpbnQgaCwgaW50IHBmLCBpbnQgZmxhZ3MpCit7CisgIGludCByb2Zmc2V0ID0gdGpSZWRPZmZzZXRbcGZdOworICBpbnQgZ29mZnNldCA9IHRqR3JlZW5PZmZzZXRbcGZdOworICBpbnQgYm9mZnNldCA9IHRqQmx1ZU9mZnNldFtwZl07CisgIGludCBwcyA9IHRqUGl4ZWxTaXplW3BmXTsKKyAgaW50IGluZGV4LCByb3csIGNvbCwgaGFsZndheSA9IDE2OworCisgIGlmIChwZiA9PSBUSlBGX0dSQVkpIHsKKyAgICBtZW1zZXQoYnVmLCAwLCB3ICogaCAqIHBzKTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgICAgIGlmIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgaW5kZXggPSAoaCAtIHJvdyAtIDEpICogdyArIGNvbDsKKyAgICAgICAgZWxzZSBpbmRleCA9IHJvdyAqIHcgKyBjb2w7CisgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkKKyAgICAgICAgICBidWZbaW5kZXhdID0gKHJvdyA8IGhhbGZ3YXkpID8gMjU1IDogMDsKKyAgICAgICAgZWxzZSBidWZbaW5kZXhdID0gKHJvdyA8IGhhbGZ3YXkpID8gNzYgOiAyMjY7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKHBmID09IFRKUEZfQ01ZSykgeworICAgIG1lbXNldChidWYsIDI1NSwgdyAqIGggKiBwcyk7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICBpZiAoZmxhZ3MgJiBUSkZMQUdfQk9UVE9NVVApIGluZGV4ID0gKGggLSByb3cgLSAxKSAqIHcgKyBjb2w7CisgICAgICAgIGVsc2UgaW5kZXggPSByb3cgKiB3ICsgY29sOworICAgICAgICBpZiAoKChyb3cgLyA4KSArIChjb2wgLyA4KSkgJSAyID09IDApIHsKKyAgICAgICAgICBpZiAocm93ID49IGhhbGZ3YXkpIGJ1ZltpbmRleCAqIHBzICsgM10gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJ1ZltpbmRleCAqIHBzICsgMl0gPSAwOworICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSBidWZbaW5kZXggKiBwcyArIDFdID0gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBtZW1zZXQoYnVmLCAwLCB3ICogaCAqIHBzKTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgICAgIGlmIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgaW5kZXggPSAoaCAtIHJvdyAtIDEpICogdyArIGNvbDsKKyAgICAgICAgZWxzZSBpbmRleCA9IHJvdyAqIHcgKyBjb2w7CisgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgICBidWZbaW5kZXggKiBwcyArIHJvZmZzZXRdID0gMjU1OworICAgICAgICAgICAgYnVmW2luZGV4ICogcHMgKyBnb2Zmc2V0XSA9IDI1NTsKKyAgICAgICAgICAgIGJ1ZltpbmRleCAqIHBzICsgYm9mZnNldF0gPSAyNTU7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJ1ZltpbmRleCAqIHBzICsgcm9mZnNldF0gPSAyNTU7CisgICAgICAgICAgaWYgKHJvdyA+PSBoYWxmd2F5KSBidWZbaW5kZXggKiBwcyArIGdvZmZzZXRdID0gMjU1OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworI2RlZmluZSBjaGVja3ZhbCh2LCBjdikgeyBcCisgIGlmICh2IDwgY3YgLSAxIHx8IHYgPiBjdiArIDEpIHsgXAorICAgIHByaW50ZigiXG5Db21wLiAlcyBhdCAlZCwlZCBzaG91bGQgYmUgJWQsIG5vdCAlZFxuIiwgI3YsIHJvdywgY29sLCBjdiwgXAorICAgICAgICAgICB2KTsgXAorICAgIHJldHZhbCA9IDA7ICBleGl0U3RhdHVzID0gLTE7ICBnb3RvIGJhaWxvdXQ7IFwKKyAgfSBcCit9CisKKyNkZWZpbmUgY2hlY2t2YWwwKHYpIHsgXAorICBpZiAodiA+IDEpIHsgXAorICAgIHByaW50ZigiXG5Db21wLiAlcyBhdCAlZCwlZCBzaG91bGQgYmUgMCwgbm90ICVkXG4iLCAjdiwgcm93LCBjb2wsIHYpOyBcCisgICAgcmV0dmFsID0gMDsgIGV4aXRTdGF0dXMgPSAtMTsgIGdvdG8gYmFpbG91dDsgXAorICB9IFwKK30KKworI2RlZmluZSBjaGVja3ZhbDI1NSh2KSB7IFwKKyAgaWYgKHYgPCAyNTQpIHsgXAorICAgIHByaW50ZigiXG5Db21wLiAlcyBhdCAlZCwlZCBzaG91bGQgYmUgMjU1LCBub3QgJWRcbiIsICN2LCByb3csIGNvbCwgdik7IFwKKyAgICByZXR2YWwgPSAwOyAgZXhpdFN0YXR1cyA9IC0xOyAgZ290byBiYWlsb3V0OyBcCisgIH0gXAorfQorCisKK2ludCBjaGVja0J1Zih1bnNpZ25lZCBjaGFyICpidWYsIGludCB3LCBpbnQgaCwgaW50IHBmLCBpbnQgc3Vic2FtcCwKKyAgICAgICAgICAgICB0anNjYWxpbmdmYWN0b3Igc2YsIGludCBmbGFncykKK3sKKyAgaW50IHJvZmZzZXQgPSB0alJlZE9mZnNldFtwZl07CisgIGludCBnb2Zmc2V0ID0gdGpHcmVlbk9mZnNldFtwZl07CisgIGludCBib2Zmc2V0ID0gdGpCbHVlT2Zmc2V0W3BmXTsKKyAgaW50IGFvZmZzZXQgPSB0akFscGhhT2Zmc2V0W3BmXTsKKyAgaW50IHBzID0gdGpQaXhlbFNpemVbcGZdOworICBpbnQgaW5kZXgsIHJvdywgY29sLCByZXR2YWwgPSAxOworICBpbnQgaGFsZndheSA9IDE2ICogc2YubnVtIC8gc2YuZGVub207CisgIGludCBibG9ja3NpemUgPSA4ICogc2YubnVtIC8gc2YuZGVub207CisKKyAgaWYgKHBmID09IFRKUEZfR1JBWSkgcm9mZnNldCA9IGdvZmZzZXQgPSBib2Zmc2V0ID0gMDsKKworICBpZiAocGYgPT0gVEpQRl9DTVlLKSB7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMsIG0sIHksIGs7CisKKyAgICAgICAgaWYgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKSBpbmRleCA9IChoIC0gcm93IC0gMSkgKiB3ICsgY29sOworICAgICAgICBlbHNlIGluZGV4ID0gcm93ICogdyArIGNvbDsKKyAgICAgICAgYyA9IGJ1ZltpbmRleCAqIHBzXTsKKyAgICAgICAgbSA9IGJ1ZltpbmRleCAqIHBzICsgMV07CisgICAgICAgIHkgPSBidWZbaW5kZXggKiBwcyArIDJdOworICAgICAgICBrID0gYnVmW2luZGV4ICogcHMgKyAzXTsKKyAgICAgICAgaWYgKCgocm93IC8gYmxvY2tzaXplKSArIChjb2wgLyBibG9ja3NpemUpKSAlIDIgPT0gMCkgeworICAgICAgICAgIGNoZWNrdmFsMjU1KGMpOyAgY2hlY2t2YWwyNTUobSk7ICBjaGVja3ZhbDI1NSh5KTsKKyAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgY2hlY2t2YWwyNTUoaykKKyAgICAgICAgICBlbHNlIGNoZWNrdmFsMChrKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNoZWNrdmFsMjU1KGMpOyAgY2hlY2t2YWwwKHkpOyAgY2hlY2t2YWwyNTUoayk7CisgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpIGNoZWNrdmFsMChtKQorICAgICAgICAgIGVsc2UgY2hlY2t2YWwyNTUobSkKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGZvciAocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHIsIGcsIGIsIGE7CisKKyAgICAgIGlmIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgaW5kZXggPSAoaCAtIHJvdyAtIDEpICogdyArIGNvbDsKKyAgICAgIGVsc2UgaW5kZXggPSByb3cgKiB3ICsgY29sOworICAgICAgciA9IGJ1ZltpbmRleCAqIHBzICsgcm9mZnNldF07CisgICAgICBnID0gYnVmW2luZGV4ICogcHMgKyBnb2Zmc2V0XTsKKyAgICAgIGIgPSBidWZbaW5kZXggKiBwcyArIGJvZmZzZXRdOworICAgICAgYSA9IGFvZmZzZXQgPj0gMCA/IGJ1ZltpbmRleCAqIHBzICsgYW9mZnNldF0gOiAweEZGOworICAgICAgaWYgKCgocm93IC8gYmxvY2tzaXplKSArIChjb2wgLyBibG9ja3NpemUpKSAlIDIgPT0gMCkgeworICAgICAgICBpZiAocm93IDwgaGFsZndheSkgeworICAgICAgICAgIGNoZWNrdmFsMjU1KHIpOyAgY2hlY2t2YWwyNTUoZyk7ICBjaGVja3ZhbDI1NShiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjaGVja3ZhbDAocik7ICBjaGVja3ZhbDAoZyk7ICBjaGVja3ZhbDAoYik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzdWJzYW1wID09IFRKU0FNUF9HUkFZKSB7CisgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpIHsKKyAgICAgICAgICAgIGNoZWNrdmFsKHIsIDc2KTsgIGNoZWNrdmFsKGcsIDc2KTsgIGNoZWNrdmFsKGIsIDc2KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hlY2t2YWwociwgMjI2KTsgIGNoZWNrdmFsKGcsIDIyNik7ICBjaGVja3ZhbChiLCAyMjYpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgeworICAgICAgICAgICAgY2hlY2t2YWwyNTUocik7ICBjaGVja3ZhbDAoZyk7ICBjaGVja3ZhbDAoYik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoZWNrdmFsMjU1KHIpOyAgY2hlY2t2YWwyNTUoZyk7ICBjaGVja3ZhbDAoYik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBjaGVja3ZhbDI1NShhKTsKKyAgICB9CisgIH0KKworYmFpbG91dDoKKyAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICBpZiAocGYgPT0gVEpQRl9DTVlLKQorICAgICAgICAgIHByaW50ZigiJS4zZC8lLjNkLyUuM2QvJS4zZCAiLCBidWZbKHJvdyAqIHcgKyBjb2wpICogcHNdLAorICAgICAgICAgICAgICAgICBidWZbKHJvdyAqIHcgKyBjb2wpICogcHMgKyAxXSwgYnVmWyhyb3cgKiB3ICsgY29sKSAqIHBzICsgMl0sCisgICAgICAgICAgICAgICAgIGJ1Zlsocm93ICogdyArIGNvbCkgKiBwcyArIDNdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiJS4zZC8lLjNkLyUuM2QgIiwgYnVmWyhyb3cgKiB3ICsgY29sKSAqIHBzICsgcm9mZnNldF0sCisgICAgICAgICAgICAgICAgIGJ1Zlsocm93ICogdyArIGNvbCkgKiBwcyArIGdvZmZzZXRdLAorICAgICAgICAgICAgICAgICBidWZbKHJvdyAqIHcgKyBjb2wpICogcHMgKyBib2Zmc2V0XSk7CisgICAgICB9CisgICAgICBwcmludGYoIlxuIik7CisgICAgfQorICB9CisgIHJldHVybiByZXR2YWw7Cit9CisKKworI2RlZmluZSBQQUQodiwgcCkgICgodiArIChwKSAtIDEpICYgKH4oKHApIC0gMSkpKQorCitpbnQgY2hlY2tCdWZZVVYodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdywgaW50IGgsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgIHRqc2NhbGluZ2ZhY3RvciBzZikKK3sKKyAgaW50IHJvdywgY29sOworICBpbnQgaHNmID0gdGpNQ1VXaWR0aFtzdWJzYW1wXSAvIDgsIHZzZiA9IHRqTUNVSGVpZ2h0W3N1YnNhbXBdIC8gODsKKyAgaW50IHB3ID0gUEFEKHcsIGhzZiksIHBoID0gUEFEKGgsIHZzZik7CisgIGludCBjdyA9IHB3IC8gaHNmLCBjaCA9IHBoIC8gdnNmOworICBpbnQgeXBpdGNoID0gUEFEKHB3LCBwYWQpLCB1dnBpdGNoID0gUEFEKGN3LCBwYWQpOworICBpbnQgcmV0dmFsID0gMTsKKyAgaW50IGhhbGZ3YXkgPSAxNiAqIHNmLm51bSAvIHNmLmRlbm9tOworICBpbnQgYmxvY2tzaXplID0gOCAqIHNmLm51bSAvIHNmLmRlbm9tOworCisgIGZvciAocm93ID0gMDsgcm93IDwgcGg7IHJvdysrKSB7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBwdzsgY29sKyspIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgeSA9IGJ1Zlt5cGl0Y2ggKiByb3cgKyBjb2xdOworCisgICAgICBpZiAoKChyb3cgLyBibG9ja3NpemUpICsgKGNvbCAvIGJsb2Nrc2l6ZSkpICUgMiA9PSAwKSB7CisgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSBjaGVja3ZhbDI1NSh5KQorICAgICAgICBlbHNlIGNoZWNrdmFsMCh5KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSBjaGVja3ZhbCh5LCA3NikKKyAgICAgICAgZWxzZSBjaGVja3ZhbCh5LCAyMjYpOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoc3Vic2FtcCAhPSBUSlNBTVBfR1JBWSkgeworICAgIGludCBoYWxmd2F5ID0gMTYgLyB2c2YgKiBzZi5udW0gLyBzZi5kZW5vbTsKKworICAgIGZvciAocm93ID0gMDsgcm93IDwgY2g7IHJvdysrKSB7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IGN3OyBjb2wrKykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHUgPSBidWZbeXBpdGNoICogcGggKyAodXZwaXRjaCAqIHJvdyArIGNvbCldLAorICAgICAgICAgIHYgPSBidWZbeXBpdGNoICogcGggKyB1dnBpdGNoICogY2ggKyAodXZwaXRjaCAqIHJvdyArIGNvbCldOworCisgICAgICAgIGlmICgoKHJvdyAqIHZzZiAvIGJsb2Nrc2l6ZSkgKyAoY29sICogaHNmIC8gYmxvY2tzaXplKSkgJSAyID09IDApIHsKKyAgICAgICAgICBjaGVja3ZhbCh1LCAxMjgpOyAgY2hlY2t2YWwodiwgMTI4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgeworICAgICAgICAgICAgY2hlY2t2YWwodSwgODUpOyAgY2hlY2t2YWwyNTUodik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoZWNrdmFsMCh1KTsgIGNoZWNrdmFsKHYsIDE0OSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKK2JhaWxvdXQ6CisgIGlmIChyZXR2YWwgPT0gMCkgeworICAgIGZvciAocm93ID0gMDsgcm93IDwgcGg7IHJvdysrKSB7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHB3OyBjb2wrKykKKyAgICAgICAgcHJpbnRmKCIlLjNkICIsIGJ1Zlt5cGl0Y2ggKiByb3cgKyBjb2xdKTsKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworICAgIGZvciAocm93ID0gMDsgcm93IDwgY2g7IHJvdysrKSB7CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IGN3OyBjb2wrKykKKyAgICAgICAgcHJpbnRmKCIlLjNkICIsIGJ1Zlt5cGl0Y2ggKiBwaCArICh1dnBpdGNoICogcm93ICsgY29sKV0pOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBjaDsgcm93KyspIHsKKyAgICAgIGZvciAoY29sID0gMDsgY29sIDwgY3c7IGNvbCsrKQorICAgICAgICBwcmludGYoIiUuM2QgIiwKKyAgICAgICAgICAgICAgIGJ1Zlt5cGl0Y2ggKiBwaCArIHV2cGl0Y2ggKiBjaCArICh1dnBpdGNoICogcm93ICsgY29sKV0pOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXR2YWw7Cit9CisKKwordm9pZCB3cml0ZUpQRUcodW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgY2hhciAqZmlsZW5hbWUpCit7CisgIEZJTEUgKmZpbGUgPSBmb3BlbihmaWxlbmFtZSwgIndiIik7CisKKyAgaWYgKCFmaWxlIHx8IGZ3cml0ZShqcGVnQnVmLCBqcGVnU2l6ZSwgMSwgZmlsZSkgIT0gMSkgeworICAgIHByaW50ZigiRVJST1I6IENvdWxkIG5vdCB3cml0ZSB0byAlcy5cbiVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBiYWlsb3V0KCkKKyAgfQorCitiYWlsb3V0OgorICBpZiAoZmlsZSkgZmNsb3NlKGZpbGUpOworfQorCisKK3ZvaWQgY29tcFRlc3QodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICoqZHN0QnVmLCB1bnNpZ25lZCBsb25nICpkc3RTaXplLAorICAgICAgICAgICAgICBpbnQgdywgaW50IGgsIGludCBwZiwgY2hhciAqYmFzZW5hbWUsIGludCBzdWJzYW1wLCBpbnQganBlZ1F1YWwsCisgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKyAgY2hhciB0ZW1wU3RyWzEwMjRdOworICB1bnNpZ25lZCBjaGFyICpzcmNCdWYgPSBOVUxMLCAqeXV2QnVmID0gTlVMTDsKKyAgY29uc3QgY2hhciAqcGZTdHIgPSBwaXhGb3JtYXRTdHJbcGZdOworICBjb25zdCBjaGFyICpidVN0ckxvbmcgPQorICAgIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgPyAiQm90dG9tLVVwIiA6ICJUb3AtRG93biAiOworICBjb25zdCBjaGFyICpidVN0ciA9IChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgPyAiQlUiIDogIlREIjsKKworICBpZiAoKHNyY0J1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHcgKiBoICogdGpQaXhlbFNpemVbcGZdKSkgPT0gTlVMTCkKKyAgICBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgaW5pdEJ1ZihzcmNCdWYsIHcsIGgsIHBmLCBmbGFncyk7CisKKyAgaWYgKCpkc3RCdWYgJiYgKmRzdFNpemUgPiAwKSBtZW1zZXQoKmRzdEJ1ZiwgMCwgKmRzdFNpemUpOworCisgIGlmICghYWxsb2MpIGZsYWdzIHw9IFRKRkxBR19OT1JFQUxMT0M7CisgIGlmIChkb1lVVikgeworICAgIHVuc2lnbmVkIGxvbmcgeXV2U2l6ZSA9IHRqQnVmU2l6ZVlVVjIodywgcGFkLCBoLCBzdWJzYW1wKTsKKyAgICB0anNjYWxpbmdmYWN0b3Igc2YgPSB7IDEsIDEgfTsKKyAgICB0amhhbmRsZSBoYW5kbGUyID0gdGpJbml0Q29tcHJlc3MoKTsKKworICAgIGlmICghaGFuZGxlMikgX3Rocm93dGooKTsKKworICAgIGlmICgoeXV2QnVmID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoeXV2U2l6ZSkpID09IE5VTEwpCisgICAgICBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICBtZW1zZXQoeXV2QnVmLCAwLCB5dXZTaXplKTsKKworICAgIHByaW50ZigiJXMgJXMgLT4gWVVWICVzIC4uLiAiLCBwZlN0ciwgYnVTdHJMb25nLCBzdWJOYW1lTG9uZ1tzdWJzYW1wXSk7CisgICAgX3RqKHRqRW5jb2RlWVVWMyhoYW5kbGUyLCBzcmNCdWYsIHcsIDAsIGgsIHBmLCB5dXZCdWYsIHBhZCwgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisgICAgdGpEZXN0cm95KGhhbmRsZTIpOworICAgIGlmIChjaGVja0J1ZllVVih5dXZCdWYsIHcsIGgsIHN1YnNhbXAsIHNmKSkgcHJpbnRmKCJQYXNzZWQuXG4iKTsKKyAgICBlbHNlIHByaW50ZigiRkFJTEVEIVxuIik7CisKKyAgICBwcmludGYoIllVViAlcyAlcyAtPiBKUEVHIFElZCAuLi4gIiwgc3ViTmFtZUxvbmdbc3Vic2FtcF0sIGJ1U3RyTG9uZywKKyAgICAgICAgICAganBlZ1F1YWwpOworICAgIF90aih0akNvbXByZXNzRnJvbVlVVihoYW5kbGUsIHl1dkJ1ZiwgdywgcGFkLCBoLCBzdWJzYW1wLCBkc3RCdWYsIGRzdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdRdWFsLCBmbGFncykpOworICB9IGVsc2UgeworICAgIHByaW50ZigiJXMgJXMgLT4gJXMgUSVkIC4uLiAiLCBwZlN0ciwgYnVTdHJMb25nLCBzdWJOYW1lTG9uZ1tzdWJzYW1wXSwKKyAgICAgICAgICAganBlZ1F1YWwpOworICAgIF90aih0akNvbXByZXNzMihoYW5kbGUsIHNyY0J1ZiwgdywgMCwgaCwgcGYsIGRzdEJ1ZiwgZHN0U2l6ZSwgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgICAganBlZ1F1YWwsIGZsYWdzKSk7CisgIH0KKworICBzbnByaW50Zih0ZW1wU3RyLCAxMDI0LCAiJXNfZW5jXyVzXyVzXyVzX1ElZC5qcGciLCBiYXNlbmFtZSwgcGZTdHIsIGJ1U3RyLAorICAgICAgICAgICBzdWJOYW1lW3N1YnNhbXBdLCBqcGVnUXVhbCk7CisgIHdyaXRlSlBFRygqZHN0QnVmLCAqZHN0U2l6ZSwgdGVtcFN0cik7CisgIHByaW50ZigiRG9uZS5cbiAgUmVzdWx0IGluICVzXG4iLCB0ZW1wU3RyKTsKKworYmFpbG91dDoKKyAgaWYgKHl1dkJ1ZikgZnJlZSh5dXZCdWYpOworICBpZiAoc3JjQnVmKSBmcmVlKHNyY0J1Zik7Cit9CisKKwordm9pZCBfZGVjb21wVGVzdCh0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCB3LCBpbnQgaCwgaW50IHBmLCBjaGFyICpiYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgaW50IHN1YnNhbXAsIGludCBmbGFncywgdGpzY2FsaW5nZmFjdG9yIHNmKQoreworICB1bnNpZ25lZCBjaGFyICpkc3RCdWYgPSBOVUxMLCAqeXV2QnVmID0gTlVMTDsKKyAgaW50IF9oZHJ3ID0gMCwgX2hkcmggPSAwLCBfaGRyc3Vic2FtcCA9IC0xOworICBpbnQgc2NhbGVkV2lkdGggPSBUSlNDQUxFRCh3LCBzZik7CisgIGludCBzY2FsZWRIZWlnaHQgPSBUSlNDQUxFRChoLCBzZik7CisgIHVuc2lnbmVkIGxvbmcgZHN0U2l6ZSA9IDA7CisKKyAgX3RqKHRqRGVjb21wcmVzc0hlYWRlcjIoaGFuZGxlLCBqcGVnQnVmLCBqcGVnU2l6ZSwgJl9oZHJ3LCAmX2hkcmgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZfaGRyc3Vic2FtcCkpOworICBpZiAoX2hkcncgIT0gdyB8fCBfaGRyaCAhPSBoIHx8IF9oZHJzdWJzYW1wICE9IHN1YnNhbXApCisgICAgX3Rocm93KCJJbmNvcnJlY3QgSlBFRyBoZWFkZXIiKTsKKworICBkc3RTaXplID0gc2NhbGVkV2lkdGggKiBzY2FsZWRIZWlnaHQgKiB0alBpeGVsU2l6ZVtwZl07CisgIGlmICgoZHN0QnVmID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoZHN0U2l6ZSkpID09IE5VTEwpCisgICAgX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisgIG1lbXNldChkc3RCdWYsIDAsIGRzdFNpemUpOworCisgIGlmIChkb1lVVikgeworICAgIHVuc2lnbmVkIGxvbmcgeXV2U2l6ZSA9IHRqQnVmU2l6ZVlVVjIoc2NhbGVkV2lkdGgsIHBhZCwgc2NhbGVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcCk7CisgICAgdGpoYW5kbGUgaGFuZGxlMiA9IHRqSW5pdERlY29tcHJlc3MoKTsKKworICAgIGlmICghaGFuZGxlMikgX3Rocm93dGooKTsKKworICAgIGlmICgoeXV2QnVmID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoeXV2U2l6ZSkpID09IE5VTEwpCisgICAgICBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICBtZW1zZXQoeXV2QnVmLCAwLCB5dXZTaXplKTsKKworICAgIHByaW50ZigiSlBFRyAtPiBZVVYgJXMgIiwgc3ViTmFtZUxvbmdbc3Vic2FtcF0pOworICAgIGlmIChzZi5udW0gIT0gMSB8fCBzZi5kZW5vbSAhPSAxKQorICAgICAgcHJpbnRmKCIlZC8lZCAuLi4gIiwgc2YubnVtLCBzZi5kZW5vbSk7CisgICAgZWxzZSBwcmludGYoIi4uLiAiKTsKKyAgICBfdGoodGpEZWNvbXByZXNzVG9ZVVYyKGhhbmRsZSwganBlZ0J1ZiwganBlZ1NpemUsIHl1dkJ1Ziwgc2NhbGVkV2lkdGgsIHBhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZEhlaWdodCwgZmxhZ3MpKTsKKyAgICBpZiAoY2hlY2tCdWZZVVYoeXV2QnVmLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0LCBzdWJzYW1wLCBzZikpCisgICAgICBwcmludGYoIlBhc3NlZC5cbiIpOworICAgIGVsc2UgcHJpbnRmKCJGQUlMRUQhXG4iKTsKKworICAgIHByaW50ZigiWVVWICVzIC0+ICVzICVzIC4uLiAiLCBzdWJOYW1lTG9uZ1tzdWJzYW1wXSwgcGl4Rm9ybWF0U3RyW3BmXSwKKyAgICAgICAgICAgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKSA/ICJCb3R0b20tVXAiIDogIlRvcC1Eb3duICIpOworICAgIF90aih0akRlY29kZVlVVihoYW5kbGUyLCB5dXZCdWYsIHBhZCwgc3Vic2FtcCwgZHN0QnVmLCBzY2FsZWRXaWR0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgc2NhbGVkSGVpZ2h0LCBwZiwgZmxhZ3MpKTsKKyAgICB0akRlc3Ryb3koaGFuZGxlMik7CisgIH0gZWxzZSB7CisgICAgcHJpbnRmKCJKUEVHIC0+ICVzICVzICIsIHBpeEZvcm1hdFN0cltwZl0sCisgICAgICAgICAgIChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgPyAiQm90dG9tLVVwIiA6ICJUb3AtRG93biAiKTsKKyAgICBpZiAoc2YubnVtICE9IDEgfHwgc2YuZGVub20gIT0gMSkKKyAgICAgIHByaW50ZigiJWQvJWQgLi4uICIsIHNmLm51bSwgc2YuZGVub20pOworICAgIGVsc2UgcHJpbnRmKCIuLi4gIik7CisgICAgX3RqKHRqRGVjb21wcmVzczIoaGFuZGxlLCBqcGVnQnVmLCBqcGVnU2l6ZSwgZHN0QnVmLCBzY2FsZWRXaWR0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRIZWlnaHQsIHBmLCBmbGFncykpOworICB9CisKKyAgaWYgKGNoZWNrQnVmKGRzdEJ1Ziwgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgcGYsIHN1YnNhbXAsIHNmLCBmbGFncykpCisgICAgcHJpbnRmKCJQYXNzZWQuIik7CisgIGVsc2UgcHJpbnRmKCJGQUlMRUQhIik7CisgIHByaW50ZigiXG4iKTsKKworYmFpbG91dDoKKyAgaWYgKHl1dkJ1ZikgZnJlZSh5dXZCdWYpOworICBpZiAoZHN0QnVmKSBmcmVlKGRzdEJ1Zik7Cit9CisKKwordm9pZCBkZWNvbXBUZXN0KHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgdywgaW50IGgsIGludCBwZiwgY2hhciAqYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgaW50IHN1YnNhbXAsIGludCBmbGFncykKK3sKKyAgaW50IGksIG4gPSAwOworICB0anNjYWxpbmdmYWN0b3IgKnNmID0gdGpHZXRTY2FsaW5nRmFjdG9ycygmbik7CisKKyAgaWYgKCFzZiB8fCAhbikgX3Rocm93dGooKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgaWYgKHN1YnNhbXAgPT0gVEpTQU1QXzQ0NCB8fCBzdWJzYW1wID09IFRKU0FNUF9HUkFZIHx8CisgICAgICAgIChzdWJzYW1wID09IFRKU0FNUF80MTEgJiYgc2ZbaV0ubnVtID09IDEgJiYKKyAgICAgICAgIChzZltpXS5kZW5vbSA9PSAyIHx8IHNmW2ldLmRlbm9tID09IDEpKSB8fAorICAgICAgICAoc3Vic2FtcCAhPSBUSlNBTVBfNDExICYmIHNmW2ldLm51bSA9PSAxICYmCisgICAgICAgICAoc2ZbaV0uZGVub20gPT0gNCB8fCBzZltpXS5kZW5vbSA9PSAyIHx8IHNmW2ldLmRlbm9tID09IDEpKSkKKyAgICAgIF9kZWNvbXBUZXN0KGhhbmRsZSwganBlZ0J1ZiwganBlZ1NpemUsIHcsIGgsIHBmLCBiYXNlbmFtZSwgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgIGZsYWdzLCBzZltpXSk7CisgIH0KKworYmFpbG91dDoKKyAgcmV0dXJuOworfQorCisKK3ZvaWQgZG9UZXN0KGludCB3LCBpbnQgaCwgY29uc3QgaW50ICpmb3JtYXRzLCBpbnQgbmZvcm1hdHMsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgY2hhciAqYmFzZW5hbWUpCit7CisgIHRqaGFuZGxlIGNoYW5kbGUgPSBOVUxMLCBkaGFuZGxlID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqZHN0QnVmID0gTlVMTDsKKyAgdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKyAgaW50IHBmaSwgcGYsIGk7CisKKyAgaWYgKCFhbGxvYykKKyAgICBzaXplID0gdGpCdWZTaXplKHcsIGgsIHN1YnNhbXApOworICBpZiAoc2l6ZSAhPSAwKQorICAgIGlmICgoZHN0QnVmID0gKHVuc2lnbmVkIGNoYXIgKil0akFsbG9jKHNpemUpKSA9PSBOVUxMKQorICAgICAgX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiIpOworCisgIGlmICgoY2hhbmRsZSA9IHRqSW5pdENvbXByZXNzKCkpID09IE5VTEwgfHwKKyAgICAgIChkaGFuZGxlID0gdGpJbml0RGVjb21wcmVzcygpKSA9PSBOVUxMKQorICAgIF90aHJvd3RqKCk7CisKKyAgZm9yIChwZmkgPSAwOyBwZmkgPCBuZm9ybWF0czsgcGZpKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgICBpZiAoc3Vic2FtcCA9PSBUSlNBTVBfNDIyIHx8IHN1YnNhbXAgPT0gVEpTQU1QXzQyMCB8fAorICAgICAgICAgIHN1YnNhbXAgPT0gVEpTQU1QXzQ0MCB8fCBzdWJzYW1wID09IFRKU0FNUF80MTEpCisgICAgICAgIGZsYWdzIHw9IFRKRkxBR19GQVNUVVBTQU1QTEU7CisgICAgICBpZiAoaSA9PSAxKSBmbGFncyB8PSBUSkZMQUdfQk9UVE9NVVA7CisgICAgICBwZiA9IGZvcm1hdHNbcGZpXTsKKyAgICAgIGNvbXBUZXN0KGNoYW5kbGUsICZkc3RCdWYsICZzaXplLCB3LCBoLCBwZiwgYmFzZW5hbWUsIHN1YnNhbXAsIDEwMCwKKyAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICAgIGRlY29tcFRlc3QoZGhhbmRsZSwgZHN0QnVmLCBzaXplLCB3LCBoLCBwZiwgYmFzZW5hbWUsIHN1YnNhbXAsIGZsYWdzKTsKKyAgICAgIGlmIChwZiA+PSBUSlBGX1JHQlggJiYgcGYgPD0gVEpQRl9YUkdCKSB7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgZGVjb21wVGVzdChkaGFuZGxlLCBkc3RCdWYsIHNpemUsIHcsIGgsIHBmICsgKFRKUEZfUkdCQSAtIFRKUEZfUkdCWCksCisgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUsIHN1YnNhbXAsIGZsYWdzKTsKKyAgICAgIH0KKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisgIH0KKyAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKworYmFpbG91dDoKKyAgaWYgKGNoYW5kbGUpIHRqRGVzdHJveShjaGFuZGxlKTsKKyAgaWYgKGRoYW5kbGUpIHRqRGVzdHJveShkaGFuZGxlKTsKKyAgaWYgKGRzdEJ1ZikgdGpGcmVlKGRzdEJ1Zik7Cit9CisKKwordm9pZCBidWZTaXplVGVzdCh2b2lkKQoreworICBpbnQgdywgaCwgaSwgc3Vic2FtcDsKKyAgdW5zaWduZWQgY2hhciAqc3JjQnVmID0gTlVMTCwgKmRzdEJ1ZiA9IE5VTEw7CisgIHRqaGFuZGxlIGhhbmRsZSA9IE5VTEw7CisgIHVuc2lnbmVkIGxvbmcgZHN0U2l6ZSA9IDA7CisKKyAgaWYgKChoYW5kbGUgPSB0akluaXRDb21wcmVzcygpKSA9PSBOVUxMKSBfdGhyb3d0aigpOworCisgIHByaW50ZigiQnVmZmVyIHNpemUgcmVncmVzc2lvbiB0ZXN0XG4iKTsKKyAgZm9yIChzdWJzYW1wID0gMDsgc3Vic2FtcCA8IFRKX05VTVNBTVA7IHN1YnNhbXArKykgeworICAgIGZvciAodyA9IDE7IHcgPCA0ODsgdysrKSB7CisgICAgICBpbnQgbWF4aCA9ICh3ID09IDEpID8gMjA0OCA6IDQ4OworCisgICAgICBmb3IgKGggPSAxOyBoIDwgbWF4aDsgaCsrKSB7CisgICAgICAgIGlmIChoICUgMTAwID09IDApIHByaW50ZigiJS40ZCB4ICUuNGRcYlxiXGJcYlxiXGJcYlxiXGJcYlxiIiwgdywgaCk7CisgICAgICAgIGlmICgoc3JjQnVmID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2ModyAqIGggKiA0KSkgPT0gTlVMTCkKKyAgICAgICAgICBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgaWYgKCFhbGxvYyB8fCBkb1lVVikgeworICAgICAgICAgIGlmIChkb1lVVikgZHN0U2l6ZSA9IHRqQnVmU2l6ZVlVVjIodywgcGFkLCBoLCBzdWJzYW1wKTsKKyAgICAgICAgICBlbHNlIGRzdFNpemUgPSB0akJ1ZlNpemUodywgaCwgc3Vic2FtcCk7CisgICAgICAgICAgaWYgKChkc3RCdWYgPSAodW5zaWduZWQgY2hhciAqKXRqQWxsb2MoZHN0U2l6ZSkpID09IE5VTEwpCisgICAgICAgICAgICBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ICogaCAqIDQ7IGkrKykgeworICAgICAgICAgIGlmIChyYW5kb20oKSA8IFJBTkRfTUFYIC8gMikgc3JjQnVmW2ldID0gMDsKKyAgICAgICAgICBlbHNlIHNyY0J1ZltpXSA9IDI1NTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb1lVVikgeworICAgICAgICAgIF90aih0akVuY29kZVlVVjMoaGFuZGxlLCBzcmNCdWYsIHcsIDAsIGgsIFRKUEZfQkdSWCwgZHN0QnVmLCBwYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wLCAwKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgX3RqKHRqQ29tcHJlc3MyKGhhbmRsZSwgc3JjQnVmLCB3LCAwLCBoLCBUSlBGX0JHUlgsICZkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkc3RTaXplLCBzdWJzYW1wLCAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jID8gMCA6IFRKRkxBR19OT1JFQUxMT0MpKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHNyY0J1Zik7ICBzcmNCdWYgPSBOVUxMOworICAgICAgICBpZiAoIWFsbG9jIHx8IGRvWVVWKSB7CisgICAgICAgICAgdGpGcmVlKGRzdEJ1Zik7ICBkc3RCdWYgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzcmNCdWYgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhoICogdyAqIDQpKSA9PSBOVUxMKQorICAgICAgICAgIF90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgICAgICBpZiAoIWFsbG9jIHx8IGRvWVVWKSB7CisgICAgICAgICAgaWYgKGRvWVVWKSBkc3RTaXplID0gdGpCdWZTaXplWVVWMihoLCBwYWQsIHcsIHN1YnNhbXApOworICAgICAgICAgIGVsc2UgZHN0U2l6ZSA9IHRqQnVmU2l6ZShoLCB3LCBzdWJzYW1wKTsKKyAgICAgICAgICBpZiAoKGRzdEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopdGpBbGxvYyhkc3RTaXplKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIF90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGggKiB3ICogNDsgaSsrKSB7CisgICAgICAgICAgaWYgKHJhbmRvbSgpIDwgUkFORF9NQVggLyAyKSBzcmNCdWZbaV0gPSAwOworICAgICAgICAgIGVsc2Ugc3JjQnVmW2ldID0gMjU1OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvWVVWKSB7CisgICAgICAgICAgX3RqKHRqRW5jb2RlWVVWMyhoYW5kbGUsIHNyY0J1ZiwgaCwgMCwgdywgVEpQRl9CR1JYLCBkc3RCdWYsIHBhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXAsIDApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBfdGoodGpDb21wcmVzczIoaGFuZGxlLCBzcmNCdWYsIGgsIDAsIHcsIFRKUEZfQkdSWCwgJmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRzdFNpemUsIHN1YnNhbXAsIDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2MgPyAwIDogVEpGTEFHX05PUkVBTExPQykpOworICAgICAgICB9CisgICAgICAgIGZyZWUoc3JjQnVmKTsgIHNyY0J1ZiA9IE5VTEw7CisgICAgICAgIGlmICghYWxsb2MgfHwgZG9ZVVYpIHsKKyAgICAgICAgICB0akZyZWUoZHN0QnVmKTsgIGRzdEJ1ZiA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcHJpbnRmKCJEb25lLiAgICAgIFxuIik7CisKK2JhaWxvdXQ6CisgIGlmIChzcmNCdWYpIGZyZWUoc3JjQnVmKTsKKyAgaWYgKGRzdEJ1ZikgdGpGcmVlKGRzdEJ1Zik7CisgIGlmIChoYW5kbGUpIHRqRGVzdHJveShoYW5kbGUpOworfQorCisKK3ZvaWQgaW5pdEJpdG1hcCh1bnNpZ25lZCBjaGFyICpidWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGYsCisgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICBpbnQgcm9mZnNldCA9IHRqUmVkT2Zmc2V0W3BmXTsKKyAgaW50IGdvZmZzZXQgPSB0akdyZWVuT2Zmc2V0W3BmXTsKKyAgaW50IGJvZmZzZXQgPSB0akJsdWVPZmZzZXRbcGZdOworICBpbnQgcHMgPSB0alBpeGVsU2l6ZVtwZl07CisgIGludCBpLCBqOworCisgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGorKykgeworICAgIGludCByb3cgPSAoZmxhZ3MgJiBUSkZMQUdfQk9UVE9NVVApID8gaGVpZ2h0IC0gaiAtIDEgOiBqOworCisgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgciA9IChpICogMjU2IC8gd2lkdGgpICUgMjU2OworICAgICAgdW5zaWduZWQgY2hhciBnID0gKGogKiAyNTYgLyBoZWlnaHQpICUgMjU2OworICAgICAgdW5zaWduZWQgY2hhciBiID0gKGogKiAyNTYgLyBoZWlnaHQgKyBpICogMjU2IC8gd2lkdGgpICUgMjU2OworCisgICAgICBtZW1zZXQoJmJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwc10sIDAsIHBzKTsKKyAgICAgIGlmIChwZiA9PSBUSlBGX0dSQVkpIGJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwc10gPSBiOworICAgICAgZWxzZSBpZiAocGYgPT0gVEpQRl9DTVlLKQorICAgICAgICByZ2JfdG9fY215ayhyLCBnLCBiLCAmYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgMF0sCisgICAgICAgICAgICAgICAgICAgICZidWZbcm93ICogcGl0Y2ggKyBpICogcHMgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgJmJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwcyArIDJdLAorICAgICAgICAgICAgICAgICAgICAmYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgM10pOworICAgICAgZWxzZSB7CisgICAgICAgIGJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwcyArIHJvZmZzZXRdID0gcjsKKyAgICAgICAgYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgZ29mZnNldF0gPSBnOworICAgICAgICBidWZbcm93ICogcGl0Y2ggKyBpICogcHMgKyBib2Zmc2V0XSA9IGI7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworaW50IGNtcEJpdG1hcCh1bnNpZ25lZCBjaGFyICpidWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGYsCisgICAgICAgICAgICAgIGludCBmbGFncywgaW50IGdyYXkycmdiKQoreworICBpbnQgcm9mZnNldCA9IHRqUmVkT2Zmc2V0W3BmXTsKKyAgaW50IGdvZmZzZXQgPSB0akdyZWVuT2Zmc2V0W3BmXTsKKyAgaW50IGJvZmZzZXQgPSB0akJsdWVPZmZzZXRbcGZdOworICBpbnQgYW9mZnNldCA9IHRqQWxwaGFPZmZzZXRbcGZdOworICBpbnQgcHMgPSB0alBpeGVsU2l6ZVtwZl07CisgIGludCBpLCBqOworCisgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7IGorKykgeworICAgIGludCByb3cgPSAoZmxhZ3MgJiBUSkZMQUdfQk9UVE9NVVApID8gaGVpZ2h0IC0gaiAtIDEgOiBqOworCisgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgciA9IChpICogMjU2IC8gd2lkdGgpICUgMjU2OworICAgICAgdW5zaWduZWQgY2hhciBnID0gKGogKiAyNTYgLyBoZWlnaHQpICUgMjU2OworICAgICAgdW5zaWduZWQgY2hhciBiID0gKGogKiAyNTYgLyBoZWlnaHQgKyBpICogMjU2IC8gd2lkdGgpICUgMjU2OworCisgICAgICBpZiAocGYgPT0gVEpQRl9HUkFZKSB7CisgICAgICAgIGlmIChidWZbcm93ICogcGl0Y2ggKyBpICogcHNdICE9IGIpCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9IGVsc2UgaWYgKHBmID09IFRKUEZfQ01ZSykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHJmLCBnZiwgYmY7CisKKyAgICAgICAgY215a190b19yZ2IoYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgMF0sCisgICAgICAgICAgICAgICAgICAgIGJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwcyArIDFdLAorICAgICAgICAgICAgICAgICAgICBidWZbcm93ICogcGl0Y2ggKyBpICogcHMgKyAyXSwKKyAgICAgICAgICAgICAgICAgICAgYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgM10sICZyZiwgJmdmLCAmYmYpOworICAgICAgICBpZiAoZ3JheTJyZ2IpIHsKKyAgICAgICAgICBpZiAocmYgIT0gYiB8fCBnZiAhPSBiIHx8IGJmICE9IGIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChyZiAhPSByIHx8IGdmICE9IGcgfHwgYmYgIT0gYikgcmV0dXJuIDA7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZ3JheTJyZ2IpIHsKKyAgICAgICAgICBpZiAoYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgcm9mZnNldF0gIT0gYiB8fAorICAgICAgICAgICAgICBidWZbcm93ICogcGl0Y2ggKyBpICogcHMgKyBnb2Zmc2V0XSAhPSBiIHx8CisgICAgICAgICAgICAgIGJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwcyArIGJvZmZzZXRdICE9IGIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChidWZbcm93ICogcGl0Y2ggKyBpICogcHMgKyByb2Zmc2V0XSAhPSByIHx8CisgICAgICAgICAgICAgICAgICAgYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgZ29mZnNldF0gIT0gZyB8fAorICAgICAgICAgICAgICAgICAgIGJ1Zltyb3cgKiBwaXRjaCArIGkgKiBwcyArIGJvZmZzZXRdICE9IGIpCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChhb2Zmc2V0ID49IDAgJiYgYnVmW3JvdyAqIHBpdGNoICsgaSAqIHBzICsgYW9mZnNldF0gIT0gMHhGRikKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKworaW50IGRvQm1wVGVzdChjb25zdCBjaGFyICpleHQsIGludCB3aWR0aCwgaW50IGFsaWduLCBpbnQgaGVpZ2h0LCBpbnQgcGYsCisgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKyAgY2hhciBmaWxlbmFtZVs4MF0sICptZDVzdW0sIG1kNWJ1Zls2NV07CisgIGludCBwcyA9IHRqUGl4ZWxTaXplW3BmXSwgcGl0Y2ggPSBQQUQod2lkdGggKiBwcywgYWxpZ24pLCBsb2FkV2lkdGggPSAwLAorICAgIGxvYWRIZWlnaHQgPSAwLCByZXR2YWwgPSAwLCBwaXhlbEZvcm1hdCA9IHBmOworICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworICBjaGFyICptZDVyZWY7CisKKyAgaWYgKHBmID09IFRKUEZfR1JBWSkgeworICAgIG1kNXJlZiA9ICFzdHJjYXNlY21wKGV4dCwgInBwbSIpID8gIjExMmM2ODJlODJjZTVkZTFjY2EwODllMjBkNjAwMDBiIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNTE5NzY1MzBhY2Y3NWYwMmJlZGRmNWQyMTE0OTEwMWQiOworICB9IGVsc2UgeworICAgIG1kNXJlZiA9ICFzdHJjYXNlY21wKGV4dCwgInBwbSIpID8gImMwYzlmNzcyYjQ2NGQxODk2MzI2ODgzYTVjNzljNTQ1IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNmQ2NTkwNzFiOWJmY2RlZTJkZWYyMmNiNThkZGFkY2EiOworICB9CisKKyAgaWYgKChidWYgPSAodW5zaWduZWQgY2hhciAqKXRqQWxsb2MocGl0Y2ggKiBoZWlnaHQpKSA9PSBOVUxMKQorICAgIF90aHJvdygiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSIpOworICBpbml0Qml0bWFwKGJ1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncyk7CisKKyAgc25wcmludGYoZmlsZW5hbWUsIDgwLCAidGVzdF9ibXBfJXNfJWRfJXMuJXMiLCBwaXhGb3JtYXRTdHJbcGZdLCBhbGlnbiwKKyAgICAgICAgICAgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKSA/ICJidSIgOiAidGQiLCBleHQpOworICBfdGoodGpTYXZlSW1hZ2UoZmlsZW5hbWUsIGJ1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncykpOworICBtZDVzdW0gPSBNRDVGaWxlKGZpbGVuYW1lLCBtZDVidWYpOworICBpZiAoc3RyY2FzZWNtcChtZDVzdW0sIG1kNXJlZikpCisgICAgX3Rocm93bWQ1KGZpbGVuYW1lLCBtZDVzdW0sIG1kNXJlZik7CisKKyAgdGpGcmVlKGJ1Zik7ICBidWYgPSBOVUxMOworICBpZiAoKGJ1ZiA9IHRqTG9hZEltYWdlKGZpbGVuYW1lLCAmbG9hZFdpZHRoLCBhbGlnbiwgJmxvYWRIZWlnaHQsICZwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykpID09IE5VTEwpCisgICAgX3Rocm93dGooKTsKKyAgaWYgKHdpZHRoICE9IGxvYWRXaWR0aCB8fCBoZWlnaHQgIT0gbG9hZEhlaWdodCkgeworICAgIHByaW50ZigiXG4gICBJbWFnZSBkaW1lbnNpb25zIG9mICVzIGFyZSBib2d1c1xuIiwgZmlsZW5hbWUpOworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisgIGlmICghY21wQml0bWFwKGJ1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncywgMCkpIHsKKyAgICBwcmludGYoIlxuICAgUGl4ZWwgZGF0YSBpbiAlcyBpcyBib2d1c1xuIiwgZmlsZW5hbWUpOworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisgIGlmIChwZiA9PSBUSlBGX0dSQVkpIHsKKyAgICB0akZyZWUoYnVmKTsgIGJ1ZiA9IE5VTEw7CisgICAgcGYgPSBUSlBGX1hCR1I7CisgICAgaWYgKChidWYgPSB0akxvYWRJbWFnZShmaWxlbmFtZSwgJmxvYWRXaWR0aCwgYWxpZ24sICZsb2FkSGVpZ2h0LCAmcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykpID09IE5VTEwpCisgICAgICBfdGhyb3d0aigpOworICAgIHBpdGNoID0gUEFEKHdpZHRoICogdGpQaXhlbFNpemVbcGZdLCBhbGlnbik7CisgICAgaWYgKCFjbXBCaXRtYXAoYnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGYsIGZsYWdzLCAxKSkgeworICAgICAgcHJpbnRmKCJcbiAgIENvbnZlcnRpbmcgJXMgdG8gUkdCIGZhaWxlZFxuIiwgZmlsZW5hbWUpOworICAgICAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7CisgICAgfQorCisgICAgdGpGcmVlKGJ1Zik7ICBidWYgPSBOVUxMOworICAgIHBmID0gVEpQRl9DTVlLOworICAgIGlmICgoYnVmID0gdGpMb2FkSW1hZ2UoZmlsZW5hbWUsICZsb2FkV2lkdGgsIGFsaWduLCAmbG9hZEhlaWdodCwgJnBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpKSA9PSBOVUxMKQorICAgICAgX3Rocm93dGooKTsKKyAgICBwaXRjaCA9IFBBRCh3aWR0aCAqIHRqUGl4ZWxTaXplW3BmXSwgYWxpZ24pOworICAgIGlmICghY21wQml0bWFwKGJ1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncywgMSkpIHsKKyAgICAgIHByaW50ZigiXG4gICBDb252ZXJ0aW5nICVzIHRvIENNWUsgZmFpbGVkXG4iLCBmaWxlbmFtZSk7CisgICAgICByZXR2YWwgPSAtMTsgIGdvdG8gYmFpbG91dDsKKyAgICB9CisgIH0KKyAgLyogVmVyaWZ5IHRoYXQgdGpMb2FkSW1hZ2UoKSByZXR1cm5zIHRoZSBwcm9wZXIgInByZWZlcnJlZCIgcGl4ZWwgZm9ybWF0IGZvcgorICAgICB0aGUgZmlsZSB0eXBlLiAqLworICB0akZyZWUoYnVmKTsgIGJ1ZiA9IE5VTEw7CisgIHBmID0gcGl4ZWxGb3JtYXQ7CisgIHBpeGVsRm9ybWF0ID0gVEpQRl9VTktOT1dOOworICBpZiAoKGJ1ZiA9IHRqTG9hZEltYWdlKGZpbGVuYW1lLCAmbG9hZFdpZHRoLCBhbGlnbiwgJmxvYWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnBpeGVsRm9ybWF0LCBmbGFncykpID09IE5VTEwpCisgICAgX3Rocm93dGooKTsKKyAgaWYgKChwZiA9PSBUSlBGX0dSQVkgJiYgcGl4ZWxGb3JtYXQgIT0gVEpQRl9HUkFZKSB8fAorICAgICAgKHBmICE9IFRKUEZfR1JBWSAmJiAhc3RyY2FzZWNtcChleHQsICJibXAiKSAmJgorICAgICAgIHBpeGVsRm9ybWF0ICE9IFRKUEZfQkdSKSB8fAorICAgICAgKHBmICE9IFRKUEZfR1JBWSAmJiAhc3RyY2FzZWNtcChleHQsICJwcG0iKSAmJgorICAgICAgIHBpeGVsRm9ybWF0ICE9IFRKUEZfUkdCKSkgeworICAgIHByaW50ZigiXG4gICB0akxvYWRJbWFnZSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwKKyAgICAgICAgICAgcGl4Rm9ybWF0U3RyW3BpeGVsRm9ybWF0XSk7CisgICAgcmV0dmFsID0gLTE7CisgIH0KKyAgdW5saW5rKGZpbGVuYW1lKTsKKworYmFpbG91dDoKKyAgaWYgKGJ1ZikgdGpGcmVlKGJ1Zik7CisgIGlmIChleGl0U3RhdHVzIDwgMCkgcmV0dXJuIGV4aXRTdGF0dXM7CisgIHJldHVybiByZXR2YWw7Cit9CisKKworaW50IGJtcFRlc3Qodm9pZCkKK3sKKyAgaW50IGFsaWduLCB3aWR0aCA9IDM1LCBoZWlnaHQgPSAzOSwgZm9ybWF0OworCisgIGZvciAoYWxpZ24gPSAxOyBhbGlnbiA8PSA4OyBhbGlnbiAqPSAyKSB7CisgICAgZm9yIChmb3JtYXQgPSAwOyBmb3JtYXQgPCBUSl9OVU1QRjsgZm9ybWF0KyspIHsKKyAgICAgIHByaW50ZigiJXMgVG9wLURvd24gQk1QIChyb3cgYWxpZ25tZW50ID0gJWQgYnl0ZXMpICAuLi4gICIsCisgICAgICAgICAgICAgcGl4Rm9ybWF0U3RyW2Zvcm1hdF0sIGFsaWduKTsKKyAgICAgIGlmIChkb0JtcFRlc3QoImJtcCIsIHdpZHRoLCBhbGlnbiwgaGVpZ2h0LCBmb3JtYXQsIDApID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBwcmludGYoIk9LLlxuIik7CisKKyAgICAgIHByaW50ZigiJXMgVG9wLURvd24gUFBNIChyb3cgYWxpZ25tZW50ID0gJWQgYnl0ZXMpICAuLi4gICIsCisgICAgICAgICAgICAgcGl4Rm9ybWF0U3RyW2Zvcm1hdF0sIGFsaWduKTsKKyAgICAgIGlmIChkb0JtcFRlc3QoInBwbSIsIHdpZHRoLCBhbGlnbiwgaGVpZ2h0LCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIFRKRkxBR19CT1RUT01VUCkgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHByaW50ZigiT0suXG4iKTsKKworICAgICAgcHJpbnRmKCIlcyBCb3R0b20tVXAgQk1QIChyb3cgYWxpZ25tZW50ID0gJWQgYnl0ZXMpICAuLi4gICIsCisgICAgICAgICAgICAgcGl4Rm9ybWF0U3RyW2Zvcm1hdF0sIGFsaWduKTsKKyAgICAgIGlmIChkb0JtcFRlc3QoImJtcCIsIHdpZHRoLCBhbGlnbiwgaGVpZ2h0LCBmb3JtYXQsIDApID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBwcmludGYoIk9LLlxuIik7CisKKyAgICAgIHByaW50ZigiJXMgQm90dG9tLVVwIFBQTSAocm93IGFsaWdubWVudCA9ICVkIGJ5dGVzKSAgLi4uICAiLAorICAgICAgICAgICAgIHBpeEZvcm1hdFN0cltmb3JtYXRdLCBhbGlnbik7CisgICAgICBpZiAoZG9CbXBUZXN0KCJwcG0iLCB3aWR0aCwgYWxpZ24sIGhlaWdodCwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBUSkZMQUdfQk9UVE9NVVApID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBwcmludGYoIk9LLlxuIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGksIG51bTRiZiA9IDU7CisKKyNpZmRlZiBfV0lOMzIKKyAgc3JhbmQoKHVuc2lnbmVkIGludCl0aW1lKE5VTEwpKTsKKyNlbmRpZgorICBpZiAoYXJnYyA+IDEpIHsKKyAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgICBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi15dXYiKSkgZG9ZVVYgPSAxOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1ub3l1dnBhZCIpKSBwYWQgPSAxOworICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIi1hbGxvYyIpKSBhbGxvYyA9IDE7CisgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiLWJtcCIpKSByZXR1cm4gYm1wVGVzdCgpOworICAgICAgZWxzZSB1c2FnZShhcmd2WzBdKTsKKyAgICB9CisgIH0KKyAgaWYgKGFsbG9jKSBwcmludGYoIlRlc3RpbmcgYXV0b21hdGljIGJ1ZmZlciBhbGxvY2F0aW9uXG4iKTsKKyAgaWYgKGRvWVVWKSBudW00YmYgPSA0OworICBkb1Rlc3QoMzUsIDM5LCBfM2J5dGVGb3JtYXRzLCAyLCBUSlNBTVBfNDQ0LCAidGVzdCIpOworICBkb1Rlc3QoMzksIDQxLCBfNGJ5dGVGb3JtYXRzLCBudW00YmYsIFRKU0FNUF80NDQsICJ0ZXN0Iik7CisgIGRvVGVzdCg0MSwgMzUsIF8zYnl0ZUZvcm1hdHMsIDIsIFRKU0FNUF80MjIsICJ0ZXN0Iik7CisgIGRvVGVzdCgzNSwgMzksIF80Ynl0ZUZvcm1hdHMsIG51bTRiZiwgVEpTQU1QXzQyMiwgInRlc3QiKTsKKyAgZG9UZXN0KDM5LCA0MSwgXzNieXRlRm9ybWF0cywgMiwgVEpTQU1QXzQyMCwgInRlc3QiKTsKKyAgZG9UZXN0KDQxLCAzNSwgXzRieXRlRm9ybWF0cywgbnVtNGJmLCBUSlNBTVBfNDIwLCAidGVzdCIpOworICBkb1Rlc3QoMzUsIDM5LCBfM2J5dGVGb3JtYXRzLCAyLCBUSlNBTVBfNDQwLCAidGVzdCIpOworICBkb1Rlc3QoMzksIDQxLCBfNGJ5dGVGb3JtYXRzLCBudW00YmYsIFRKU0FNUF80NDAsICJ0ZXN0Iik7CisgIGRvVGVzdCg0MSwgMzUsIF8zYnl0ZUZvcm1hdHMsIDIsIFRKU0FNUF80MTEsICJ0ZXN0Iik7CisgIGRvVGVzdCgzNSwgMzksIF80Ynl0ZUZvcm1hdHMsIG51bTRiZiwgVEpTQU1QXzQxMSwgInRlc3QiKTsKKyAgZG9UZXN0KDM5LCA0MSwgX29ubHlHcmF5LCAxLCBUSlNBTVBfR1JBWSwgInRlc3QiKTsKKyAgZG9UZXN0KDQxLCAzNSwgXzNieXRlRm9ybWF0cywgMiwgVEpTQU1QX0dSQVksICJ0ZXN0Iik7CisgIGRvVGVzdCgzNSwgMzksIF80Ynl0ZUZvcm1hdHMsIDQsIFRKU0FNUF9HUkFZLCAidGVzdCIpOworICBidWZTaXplVGVzdCgpOworICBpZiAoZG9ZVVYpIHsKKyAgICBwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7CisgICAgZG9UZXN0KDQ4LCA0OCwgX29ubHlSR0IsIDEsIFRKU0FNUF80NDQsICJ0ZXN0X3l1djAiKTsKKyAgICBkb1Rlc3QoNDgsIDQ4LCBfb25seVJHQiwgMSwgVEpTQU1QXzQyMiwgInRlc3RfeXV2MCIpOworICAgIGRvVGVzdCg0OCwgNDgsIF9vbmx5UkdCLCAxLCBUSlNBTVBfNDIwLCAidGVzdF95dXYwIik7CisgICAgZG9UZXN0KDQ4LCA0OCwgX29ubHlSR0IsIDEsIFRKU0FNUF80NDAsICJ0ZXN0X3l1djAiKTsKKyAgICBkb1Rlc3QoNDgsIDQ4LCBfb25seVJHQiwgMSwgVEpTQU1QXzQxMSwgInRlc3RfeXV2MCIpOworICAgIGRvVGVzdCg0OCwgNDgsIF9vbmx5UkdCLCAxLCBUSlNBTVBfR1JBWSwgInRlc3RfeXV2MCIpOworICAgIGRvVGVzdCg0OCwgNDgsIF9vbmx5R3JheSwgMSwgVEpTQU1QX0dSQVksICJ0ZXN0X3l1djAiKTsKKyAgfQorCisgIHJldHVybiBleGl0U3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGp1dGlsLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90anV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQwODZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGp1dGlsLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDExIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX1dJTjMyCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3N0YXRpYyBkb3VibGUgZ2V0RnJlcSh2b2lkKQoreworICBMQVJHRV9JTlRFR0VSIGZyZXE7CisKKyAgaWYgKCFRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZmcmVxKSkgcmV0dXJuIDAuMDsKKyAgcmV0dXJuIChkb3VibGUpZnJlcS5RdWFkUGFydDsKK30KKworc3RhdGljIGRvdWJsZSBmID0gLTEuMDsKKworZG91YmxlIGdldFRpbWUodm9pZCkKK3sKKyAgTEFSR0VfSU5URUdFUiB0OworCisgIGlmIChmIDwgMC4wKSBmID0gZ2V0RnJlcSgpOworICBpZiAoZiA9PSAwLjApIHJldHVybiAoZG91YmxlKUdldFRpY2tDb3VudCgpIC8gMTAwMC47CisgIGVsc2UgeworICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZ0KTsKKyAgICByZXR1cm4gKGRvdWJsZSl0LlF1YWRQYXJ0IC8gZjsKKyAgfQorfQorCisjZWxzZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworZG91YmxlIGdldFRpbWUodm9pZCkKK3sKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpIDwgMCkgcmV0dXJuIDAuMDsKKyAgZWxzZSByZXR1cm4gKGRvdWJsZSl0di50dl9zZWMgKyAoKGRvdWJsZSl0di50dl91c2VjIC8gMTAwMDAwMC4pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqdXRpbC5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdGp1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyODQwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RqdXRpbC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAxMSBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2lmbmRlZiBfX01JTkdXMzJfXworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIHNucHJpbnRmKHN0ciwgbiwgZm9ybWF0LCAuLi4pIFwKKyAgX3NucHJpbnRmX3Moc3RyLCBuLCBfVFJVTkNBVEUsIGZvcm1hdCwgX19WQV9BUkdTX18pCisjZW5kaWYKKyNkZWZpbmUgc3RyY2FzZWNtcCAgc3RyaWNtcAorI2RlZmluZSBzdHJuY2FzZWNtcCAgc3RybmljbXAKKyNlbmRpZgorCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oYSwgYikgICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmbmRlZiBtYXgKKyNkZWZpbmUgbWF4KGEsIGIpICAoKGEpID4gKGIpID8gKGEpIDogKGIpKQorI2VuZGlmCisKK2V4dGVybiBkb3VibGUgZ2V0VGltZSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RyYW5zdXBwLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90cmFuc3VwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzcwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90cmFuc3VwcC5jCkBAIC0wLDAgKzEsMTYyOCBAQAorLyoKKyAqIHRyYW5zdXBwLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDExLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGltYWdlIHRyYW5zZm9ybWF0aW9uIHJvdXRpbmVzIGFuZCBvdGhlciB1dGlsaXR5IGNvZGUKKyAqIHVzZWQgYnkgdGhlIGpwZWd0cmFuIHNhbXBsZSBhcHBsaWNhdGlvbi4gIFRoZXNlIGFyZSBOT1QgcGFydCBvZiB0aGUgY29yZQorICogSlBFRyBsaWJyYXJ5LiAgQnV0IHdlIGtlZXAgdGhlc2Ugcm91dGluZXMgc2VwYXJhdGUgZnJvbSBqcGVndHJhbi5jIHRvCisgKiBlYXNlIHRoZSB0YXNrIG9mIG1haW50YWluaW5nIGpwZWd0cmFuLWxpa2UgcHJvZ3JhbXMgdGhhdCBoYXZlIG90aGVyIHVzZXIKKyAqIGludGVyZmFjZXMuCisgKi8KKworLyogQWx0aG91Z2ggdGhpcyBmaWxlIHJlYWxseSBzaG91bGRuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGxpYnJhcnkgaW50ZXJuYWxzLAorICogaXQncyBoZWxwZnVsIHRvIGxldCBpdCBjYWxsIGpyb3VuZF91cCgpIGFuZCBqY29weV9ibG9ja19yb3coKS4KKyAqLworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAidHJhbnN1cHAuaCIgICAgICAgICAgIC8qIE15IG93biBleHRlcm5hbCBpbnRlcmZhY2UgKi8KKyNpbmNsdWRlICJqcGVnY29tcC5oIgorI2luY2x1ZGUgPGN0eXBlLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIGlzZGlnaXQoKSAqLworCisKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisjZGVmaW5lIGRzdGluZm9fbWluX0RDVF9oX3NjYWxlZF9zaXplICBkc3RpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUKKyNkZWZpbmUgZHN0aW5mb19taW5fRENUX3Zfc2NhbGVkX3NpemUgIGRzdGluZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZQorI2Vsc2UKKyNkZWZpbmUgZHN0aW5mb19taW5fRENUX2hfc2NhbGVkX3NpemUgIERDVFNJWkUKKyNkZWZpbmUgZHN0aW5mb19taW5fRENUX3Zfc2NhbGVkX3NpemUgIERDVFNJWkUKKyNlbmRpZgorCisKKyNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAorCisvKgorICogTG9zc2xlc3MgaW1hZ2UgdHJhbnNmb3JtYXRpb24gcm91dGluZXMuICBUaGVzZSByb3V0aW5lcyB3b3JrIG9uIERDVAorICogY29lZmZpY2llbnQgYXJyYXlzIGFuZCB0aHVzIGRvIG5vdCByZXF1aXJlIGFueSBsb3NzeSBkZWNvbXByZXNzaW9uCisgKiBvciByZWNvbXByZXNzaW9uIG9mIHRoZSBpbWFnZS4KKyAqIFRoYW5rcyB0byBHdWlkbyBWb2xsYmVkaW5nIGZvciB0aGUgaW5pdGlhbCBkZXNpZ24gYW5kIGNvZGUgb2YgdGhpcyBmZWF0dXJlLAorICogYW5kIHRvIEJlbiBKYWNrc29uIGZvciBpbnRyb2R1Y2luZyB0aGUgY3JvcHBpbmcgZmVhdHVyZS4KKyAqCisgKiBIb3Jpem9udGFsIGZsaXBwaW5nIGlzIGRvbmUgaW4tcGxhY2UsIHVzaW5nIGEgc2luZ2xlIHRvcC10by1ib3R0b20KKyAqIHBhc3MgdGhyb3VnaCB0aGUgdmlydHVhbCBzb3VyY2UgYXJyYXkuICBJdCB3aWxsIHRodXMgYmUgbXVjaCB0aGUKKyAqIGZhc3Rlc3Qgb3B0aW9uIGZvciBpbWFnZXMgbGFyZ2VyIHRoYW4gbWFpbiBtZW1vcnkuCisgKgorICogVGhlIG90aGVyIHJvdXRpbmVzIHJlcXVpcmUgYSBzZXQgb2YgZGVzdGluYXRpb24gdmlydHVhbCBhcnJheXMsIHNvIHRoZXkKKyAqIG5lZWQgdHdpY2UgYXMgbXVjaCBtZW1vcnkgYXMganBlZ3RyYW4gbm9ybWFsbHkgZG9lcy4gIFRoZSBkZXN0aW5hdGlvbgorICogYXJyYXlzIGFyZSBhbHdheXMgd3JpdHRlbiBpbiBub3JtYWwgc2NhbiBvcmRlciAodG9wIHRvIGJvdHRvbSkgYmVjYXVzZQorICogdGhlIHZpcnR1YWwgYXJyYXkgbWFuYWdlciBleHBlY3RzIHRoaXMuICBUaGUgc291cmNlIGFycmF5cyB3aWxsIGJlIHNjYW5uZWQKKyAqIGluIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyLCB3aGljaCBtZWFucyBtdWx0aXBsZSBwYXNzZXMgdGhyb3VnaCB0aGUgc291cmNlCisgKiBhcnJheXMgZm9yIG1vc3Qgb2YgdGhlIHRyYW5zZm9ybXMuICBUaGF0IGNvdWxkIHJlc3VsdCBpbiBtdWNoIHRocmFzaGluZworICogaWYgdGhlIGltYWdlIGlzIGxhcmdlciB0aGFuIG1haW4gbWVtb3J5LgorICoKKyAqIElmIGNyb3BwaW5nIG9yIHRyaW1taW5nIGlzIGludm9sdmVkLCB0aGUgZGVzdGluYXRpb24gYXJyYXlzIG1heSBiZSBzbWFsbGVyCisgKiB0aGFuIHRoZSBzb3VyY2UgYXJyYXlzLiAgTm90ZSBpdCBpcyBub3QgcG9zc2libGUgdG8gZG8gaG9yaXpvbnRhbCBmbGlwCisgKiBpbi1wbGFjZSB3aGVuIGEgbm9uemVybyBZIGNyb3Agb2Zmc2V0IGlzIHNwZWNpZmllZCwgc2luY2Ugd2UnZCBoYXZlIHRvIG1vdmUKKyAqIGRhdGEgZnJvbSBvbmUgYmxvY2sgcm93IHRvIGFub3RoZXIgYnV0IHRoZSB2aXJ0dWFsIGFycmF5IG1hbmFnZXIgZG9lc24ndAorICogZ3VhcmFudGVlIHdlIGNhbiB0b3VjaCBtb3JlIHRoYW4gb25lIHJvdyBhdCBhIHRpbWUuICBTbyBpbiB0aGF0IGNhc2UsCisgKiB3ZSBoYXZlIHRvIHVzZSBhIHNlcGFyYXRlIGRlc3RpbmF0aW9uIGFycmF5LgorICoKKyAqIFNvbWUgbm90ZXMgYWJvdXQgdGhlIG9wZXJhdGluZyBlbnZpcm9ubWVudCBvZiB0aGUgaW5kaXZpZHVhbCB0cmFuc2Zvcm0KKyAqIHJvdXRpbmVzOgorICogMS4gQm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB2aXJ0dWFsIGFycmF5cyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlCisgKiAgICBzb3VyY2UgSlBFRyBvYmplY3QsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIG1hbmlwdWxhdGVkIGJ5IGNhbGxpbmcgdGhlCisgKiAgICBzb3VyY2UncyBtZW1vcnkgbWFuYWdlci4KKyAqIDIuIFRoZSBkZXN0aW5hdGlvbidzIGNvbXBvbmVudCBjb3VudCBzaG91bGQgYmUgdXNlZC4gIEl0IG1heSBiZSBzbWFsbGVyCisgKiAgICB0aGFuIHRoZSBzb3VyY2UncyB3aGVuIGZvcmNpbmcgdG8gZ3JheXNjYWxlLgorICogMy4gTGlrZXdpc2UgdGhlIGRlc3RpbmF0aW9uJ3Mgc2FtcGxpbmcgZmFjdG9ycyBzaG91bGQgYmUgdXNlZC4gIFdoZW4KKyAqICAgIGZvcmNpbmcgdG8gZ3JheXNjYWxlIHRoZSBkZXN0aW5hdGlvbidzIHNhbXBsaW5nIGZhY3RvcnMgd2lsbCBiZSBhbGwgMSwKKyAqICAgIGFuZCB3ZSBtYXkgYXMgd2VsbCB0YWtlIHRoYXQgYXMgdGhlIGVmZmVjdGl2ZSBpTUNVIHNpemUuCisgKiA0LiBXaGVuICJ0cmltIiBpcyBpbiBlZmZlY3QsIHRoZSBkZXN0aW5hdGlvbidzIGRpbWVuc2lvbnMgd2lsbCBiZSB0aGUKKyAqICAgIHRyaW1tZWQgdmFsdWVzIGJ1dCB0aGUgc291cmNlJ3Mgd2lsbCBiZSB1bnRyaW1tZWQuCisgKiA1LiBXaGVuICJjcm9wIiBpcyBpbiBlZmZlY3QsIHRoZSBkZXN0aW5hdGlvbidzIGRpbWVuc2lvbnMgd2lsbCBiZSB0aGUKKyAqICAgIGNyb3BwZWQgdmFsdWVzIGJ1dCB0aGUgc291cmNlJ3Mgd2lsbCBiZSB1bmNyb3BwZWQuICBFYWNoIHRyYW5zZm9ybQorICogICAgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcGlja2luZyB1cCBzb3VyY2UgZGF0YSBzdGFydGluZyBhdCB0aGUKKyAqICAgIGNvcnJlY3QgWCBhbmQgWSBvZmZzZXQgZm9yIHRoZSBjcm9wIHJlZ2lvbi4gIChUaGUgWCBhbmQgWSBvZmZzZXRzCisgKiAgICBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSByb3V0aW5lcyBhcmUgbWVhc3VyZWQgaW4gaU1DVSBibG9ja3Mgb2YgdGhlCisgKiAgICBkZXN0aW5hdGlvbi4pCisgKiA2LiBBbGwgdGhlIHJvdXRpbmVzIGFzc3VtZSB0aGF0IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlCisgKiAgICBwYWRkZWQgb3V0IHRvIGEgZnVsbCBpTUNVIGJvdW5kYXJ5LiAgVGhpcyBpcyB0cnVlLCBhbHRob3VnaCBmb3IgdGhlCisgKiAgICBzb3VyY2UgYnVmZmVyIGl0IGlzIGFuIHVuZG9jdW1lbnRlZCBwcm9wZXJ0eSBvZiBqZGNvZWZjdC5jLgorICovCisKKworTE9DQUwodm9pZCkKK2RvX2Nyb3Aoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiBDcm9wLiAgVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBubyByb3RhdGUvZmxpcCBpcyByZXF1ZXN0ZWQgd2l0aCB0aGUgY3JvcC4gKi8KK3sKKyAgSkRJTUVOU0lPTiBkc3RfYmxrX3ksIHhfY3JvcF9ibG9ja3MsIHlfY3JvcF9ibG9ja3M7CisgIGludCBjaSwgb2Zmc2V0X3k7CisgIEpCTE9DS0FSUkFZIHNyY19idWZmZXIsIGRzdF9idWZmZXI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogV2Ugc2ltcGx5IGhhdmUgdG8gY29weSB0aGUgcmlnaHQgYW1vdW50IG9mIGRhdGEgKHRoZSBkZXN0aW5hdGlvbidzCisgICAqIGltYWdlIHNpemUpIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBYIGFuZCBZIG9mZnNldHMgaW4gdGhlIHNvdXJjZS4KKyAgICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGRzdGluZm8tPmNvbXBfaW5mbyArIGNpOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgZHN0X2Jsa195ICsgeV9jcm9wX2Jsb2NrcywKKyAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKKyAgICAgICAgamNvcHlfYmxvY2tfcm93KHNyY19idWZmZXJbb2Zmc2V0X3ldICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9idWZmZXJbb2Zmc2V0X3ldLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZG9fZmxpcF9oX25vX2Nyb3Aoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0LCBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMpCisvKiBIb3Jpem9udGFsIGZsaXA7IGRvbmUgaW4tcGxhY2UsIHNvIG5vIHNlcGFyYXRlIGRlc3QgYXJyYXkgaXMgcmVxdWlyZWQuCisgKiBOQjogdGhpcyBvbmx5IHdvcmtzIHdoZW4geV9jcm9wX29mZnNldCBpcyB6ZXJvLgorICovCit7CisgIEpESU1FTlNJT04gTUNVX2NvbHMsIGNvbXBfd2lkdGgsIGJsa194LCBibGtfeSwgeF9jcm9wX2Jsb2NrczsKKyAgaW50IGNpLCBrLCBvZmZzZXRfeTsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyOworICBKQ09FRlBUUiBwdHIxLCBwdHIyOworICBKQ09FRiB0ZW1wMSwgdGVtcDI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogSG9yaXpvbnRhbCBtaXJyb3Jpbmcgb2YgRENUIGJsb2NrcyBpcyBhY2NvbXBsaXNoZWQgYnkgc3dhcHBpbmcKKyAgICogcGFpcnMgb2YgYmxvY2tzIGluLXBsYWNlLiAgV2l0aGluIGEgRENUIGJsb2NrLCB3ZSBwZXJmb3JtIGhvcml6b250YWwKKyAgICogbWlycm9yaW5nIGJ5IGNoYW5naW5nIHRoZSBzaWducyBvZiBvZGQtbnVtYmVyZWQgY29sdW1ucy4KKyAgICogUGFydGlhbCBpTUNVcyBhdCB0aGUgcmlnaHQgZWRnZSBhcmUgbGVmdCB1bnRvdWNoZWQuCisgICAqLworICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCisgICAgICAgICAgICAgKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogZHN0aW5mb19taW5fRENUX2hfc2NhbGVkX3NpemUpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGRzdGluZm8tPmNvbXBfaW5mbyArIGNpOworICAgIGNvbXBfd2lkdGggPSBNQ1VfY29scyAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIGZvciAoYmxrX3kgPSAwOyBibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7CisgICAgICAgICBibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICBidWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLCBibGtfeSwKKyAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgICAgZm9yIChvZmZzZXRfeSA9IDA7IG9mZnNldF95IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3krKykgeworICAgICAgICAvKiBEbyB0aGUgbWlycm9yaW5nICovCisgICAgICAgIGZvciAoYmxrX3ggPSAwOyBibGtfeCAqIDIgPCBjb21wX3dpZHRoOyBibGtfeCsrKSB7CisgICAgICAgICAgcHRyMSA9IGJ1ZmZlcltvZmZzZXRfeV1bYmxrX3hdOworICAgICAgICAgIHB0cjIgPSBidWZmZXJbb2Zmc2V0X3ldW2NvbXBfd2lkdGggLSBibGtfeCAtIDFdOworICAgICAgICAgIC8qIHRoaXMgdW5yb2xsZWQgbG9vcCBkb2Vzbid0IG5lZWQgdG8ga25vdyB3aGljaCByb3cgaXQncyBvbi4uLiAqLworICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBEQ1RTSVpFMjsgayArPSAyKSB7CisgICAgICAgICAgICB0ZW1wMSA9ICpwdHIxOyAgICAgIC8qIHN3YXAgZXZlbiBjb2x1bW4gKi8KKyAgICAgICAgICAgIHRlbXAyID0gKnB0cjI7CisgICAgICAgICAgICAqcHRyMSsrID0gdGVtcDI7CisgICAgICAgICAgICAqcHRyMisrID0gdGVtcDE7CisgICAgICAgICAgICB0ZW1wMSA9ICpwdHIxOyAgICAgIC8qIHN3YXAgb2RkIGNvbHVtbiB3aXRoIHNpZ24gY2hhbmdlICovCisgICAgICAgICAgICB0ZW1wMiA9ICpwdHIyOworICAgICAgICAgICAgKnB0cjErKyA9IC10ZW1wMjsKKyAgICAgICAgICAgICpwdHIyKysgPSAtdGVtcDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzID4gMCkgeworICAgICAgICAgIC8qIE5vdyBsZWZ0LWp1c3RpZnkgdGhlIHBvcnRpb24gb2YgdGhlIGRhdGEgdG8gYmUga2VwdC4KKyAgICAgICAgICAgKiBXZSBjYW4ndCB1c2UgYSBzaW5nbGUgamNvcHlfYmxvY2tfcm93KCkgY2FsbCBiZWNhdXNlIHRoYXQgcm91dGluZQorICAgICAgICAgICAqIGRlcGVuZHMgb24gbWVtY3B5KCksIHdob3NlIGJlaGF2aW9yIGlzIHVuc3BlY2lmaWVkIGZvciBvdmVybGFwcGluZworICAgICAgICAgICAqIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlYXMuICBTaWdoLgorICAgICAgICAgICAqLworICAgICAgICAgIGZvciAoYmxrX3ggPSAwOyBibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgYmxrX3grKykgeworICAgICAgICAgICAgamNvcHlfYmxvY2tfcm93KGJ1ZmZlcltvZmZzZXRfeV0gKyBibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldF95XSArIGJsa194LCAoSkRJTUVOU0lPTikxKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZG9fZmxpcF9oKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKKyAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCisgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQorLyogSG9yaXpvbnRhbCBmbGlwIGluIGdlbmVyYWwgY3JvcHBpbmcgY2FzZSAqLworeworICBKRElNRU5TSU9OIE1DVV9jb2xzLCBjb21wX3dpZHRoLCBkc3RfYmxrX3gsIGRzdF9ibGtfeTsKKyAgSkRJTUVOU0lPTiB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOworICBpbnQgY2ksIGssIG9mZnNldF95OworICBKQkxPQ0tBUlJBWSBzcmNfYnVmZmVyLCBkc3RfYnVmZmVyOworICBKQkxPQ0tST1cgc3JjX3Jvd19wdHIsIGRzdF9yb3dfcHRyOworICBKQ09FRlBUUiBzcmNfcHRyLCBkc3RfcHRyOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIEhlcmUgd2UgbXVzdCBvdXRwdXQgaW50byBhIHNlcGFyYXRlIGFycmF5IGJlY2F1c2Ugd2UgY2FuJ3QgdG91Y2gKKyAgICogZGlmZmVyZW50IHJvd3Mgb2YgYSBzaW5nbGUgdmlydHVhbCBhcnJheSBzaW11bHRhbmVvdXNseS4gIE90aGVyd2lzZSwKKyAgICogdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgcm91dGluZSBhYm92ZS4KKyAgICovCisgIE1DVV9jb2xzID0gc3JjaW5mby0+b3V0cHV0X3dpZHRoIC8KKyAgICAgICAgICAgICAoZHN0aW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSk7CisKKyAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CisgICAgY29tcF93aWR0aCA9IE1DVV9jb2xzICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB4X2Nyb3BfYmxvY2tzID0geF9jcm9wX29mZnNldCAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgeV9jcm9wX2Jsb2NrcyA9IHlfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIGZvciAoZHN0X2Jsa195ID0gMDsgZHN0X2Jsa195IDwgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKKyAgICAgICAgIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAorICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgIGRzdF9ibGtfeSArIHlfY3JvcF9ibG9ja3MsCisgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7CisgICAgICAgIGRzdF9yb3dfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV07CisgICAgICAgIHNyY19yb3dfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeV07CisgICAgICAgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOworICAgICAgICAgICAgIGRzdF9ibGtfeCsrKSB7CisgICAgICAgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisgICAgICAgICAgICAvKiBEbyB0aGUgbWlycm9yYWJsZSBibG9ja3MgKi8KKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOworICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19yb3dfcHRyW2NvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa194IC0gMV07CisgICAgICAgICAgICAvKiB0aGlzIHVucm9sbGVkIGxvb3AgZG9lc24ndCBuZWVkIHRvIGtub3cgd2hpY2ggcm93IGl0J3Mgb24uLi4gKi8KKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBEQ1RTSVpFMjsgayArPSAyKSB7CisgICAgICAgICAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOyAgIC8qIGNvcHkgZXZlbiBjb2x1bW4gKi8KKyAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsgLyogY29weSBvZGQgY29sdW1uIHdpdGggc2lnbiBjaGFuZ2UgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogQ29weSBsYXN0IHBhcnRpYWwgYmxvY2socykgdmVyYmF0aW0gKi8KKyAgICAgICAgICAgIGpjb3B5X2Jsb2NrX3JvdyhzcmNfcm93X3B0ciArIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3Jvd19wdHIgKyBkc3RfYmxrX3gsIChKRElNRU5TSU9OKTEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitkb19mbGlwX3Yoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiBWZXJ0aWNhbCBmbGlwICovCit7CisgIEpESU1FTlNJT04gTUNVX3Jvd3MsIGNvbXBfaGVpZ2h0LCBkc3RfYmxrX3gsIGRzdF9ibGtfeTsKKyAgSkRJTUVOU0lPTiB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOworICBpbnQgY2ksIGksIGosIG9mZnNldF95OworICBKQkxPQ0tBUlJBWSBzcmNfYnVmZmVyLCBkc3RfYnVmZmVyOworICBKQkxPQ0tST1cgc3JjX3Jvd19wdHIsIGRzdF9yb3dfcHRyOworICBKQ09FRlBUUiBzcmNfcHRyLCBkc3RfcHRyOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIFdlIG91dHB1dCBpbnRvIGEgc2VwYXJhdGUgYXJyYXkgYmVjYXVzZSB3ZSBjYW4ndCB0b3VjaCBkaWZmZXJlbnQKKyAgICogcm93cyBvZiB0aGUgc291cmNlIHZpcnR1YWwgYXJyYXkgc2ltdWx0YW5lb3VzbHkuICBPdGhlcndpc2UsIHRoaXMKKyAgICogaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFuYWxvZyBvZiBob3Jpem9udGFsIGZsaXAuCisgICAqIFdpdGhpbiBhIERDVCBibG9jaywgdmVydGljYWwgbWlycm9yaW5nIGlzIGRvbmUgYnkgY2hhbmdpbmcgdGhlIHNpZ25zCisgICAqIG9mIG9kZC1udW1iZXJlZCByb3dzLgorICAgKiBQYXJ0aWFsIGlNQ1VzIGF0IHRoZSBib3R0b20gZWRnZSBhcmUgY29waWVkIHZlcmJhdGltLgorICAgKi8KKyAgTUNVX3Jvd3MgPSBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0IC8KKyAgICAgICAgICAgICAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSk7CisKKyAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CisgICAgY29tcF9oZWlnaHQgPSBNQ1Vfcm93cyAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRzdF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7CisgICAgICAgICBkc3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgeworICAgICAgZHN0X2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKKyAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgICAgaWYgKHlfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3kgPCBjb21wX2hlaWdodCkgeworICAgICAgICAvKiBSb3cgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgIGNvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtCisgICAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEJvdHRvbS1lZGdlIGJsb2NrcyB3aWxsIGJlIGNvcGllZCB2ZXJiYXRpbS4gKi8KKyAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgKChqX2NvbW1vbl9wdHIpc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgICAgZHN0X2Jsa195ICsgeV9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgfQorICAgICAgZm9yIChvZmZzZXRfeSA9IDA7IG9mZnNldF95IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3krKykgeworICAgICAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CisgICAgICAgICAgLyogUm93IGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgIGRzdF9yb3dfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV07CisgICAgICAgICAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPnZfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeSAtIDFdOworICAgICAgICAgIHNyY19yb3dfcHRyICs9IHhfY3JvcF9ibG9ja3M7CisgICAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgICAgICAgICAgICBkc3RfYmxrX3grKykgeworICAgICAgICAgICAgZHN0X3B0ciA9IGRzdF9yb3dfcHRyW2RzdF9ibGtfeF07CisgICAgICAgICAgICBzcmNfcHRyID0gc3JjX3Jvd19wdHJbZHN0X2Jsa194XTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgLyogY29weSBldmVuIHJvdyAqLworICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOworICAgICAgICAgICAgICAvKiBjb3B5IG9kZCByb3cgd2l0aCBzaWduIGNoYW5nZSAqLworICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICpkc3RfcHRyKysgPSAtICpzcmNfcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIEp1c3QgY29weSByb3cgdmVyYmF0aW0uICovCisgICAgICAgICAgamNvcHlfYmxvY2tfcm93KHNyY19idWZmZXJbb2Zmc2V0X3ldICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2J1ZmZlcltvZmZzZXRfeV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2Nrcyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZG9fdHJhbnNwb3NlKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKKyAgICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCisgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQorLyogVHJhbnNwb3NlIHNvdXJjZSBpbnRvIGRlc3RpbmF0aW9uICovCit7CisgIEpESU1FTlNJT04gZHN0X2Jsa194LCBkc3RfYmxrX3ksIHhfY3JvcF9ibG9ja3MsIHlfY3JvcF9ibG9ja3M7CisgIGludCBjaSwgaSwgaiwgb2Zmc2V0X3gsIG9mZnNldF95OworICBKQkxPQ0tBUlJBWSBzcmNfYnVmZmVyLCBkc3RfYnVmZmVyOworICBKQ09FRlBUUiBzcmNfcHRyLCBkc3RfcHRyOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIFRyYW5zcG9zaW5nIHBpeGVscyB3aXRoaW4gYSBibG9jayBqdXN0IHJlcXVpcmVzIHRyYW5zcG9zaW5nIHRoZQorICAgKiBEQ1QgY29lZmZpY2llbnRzLgorICAgKiBQYXJ0aWFsIGlNQ1VzIGF0IHRoZSBlZGdlcyByZXF1aXJlIG5vIHNwZWNpYWwgdHJlYXRtZW50OyB3ZSBzaW1wbHkKKyAgICogcHJvY2VzcyBhbGwgdGhlIGF2YWlsYWJsZSBEQ1QgYmxvY2tzIGZvciBldmVyeSBjb21wb25lbnQuCisgICAqLworICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKKyAgICB4X2Nyb3BfYmxvY2tzID0geF9jcm9wX29mZnNldCAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgeV9jcm9wX2Jsb2NrcyA9IHlfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIGZvciAoZHN0X2Jsa195ID0gMDsgZHN0X2Jsa195IDwgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKKyAgICAgICAgIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAorICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7CisgICAgICAgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOworICAgICAgICAgICAgIGRzdF9ibGtfeCArPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSB7CisgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICAgIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgICAgIGZvciAob2Zmc2V0X3ggPSAwOyBvZmZzZXRfeCA8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7IG9mZnNldF94KyspIHsKKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07CisgICAgICAgICAgICBzcmNfcHRyID0KKyAgICAgICAgICAgICAgc3JjX2J1ZmZlcltvZmZzZXRfeF1bZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3BfYmxvY2tzXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspCisgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgZHN0X3B0cltqICogRENUU0laRSArIGldID0gc3JjX3B0cltpICogRENUU0laRSArIGpdOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitkb19yb3RfOTAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiA5MCBkZWdyZWUgcm90YXRpb24gaXMgZXF1aXZhbGVudCB0bworICogICAxLiBUcmFuc3Bvc2luZyB0aGUgaW1hZ2U7CisgKiAgIDIuIEhvcml6b250YWwgbWlycm9yaW5nLgorICogVGhlc2UgdHdvIHN0ZXBzIGFyZSBtZXJnZWQgaW50byBhIHNpbmdsZSBwcm9jZXNzaW5nIHJvdXRpbmUuCisgKi8KK3sKKyAgSkRJTUVOU0lPTiBNQ1VfY29scywgY29tcF93aWR0aCwgZHN0X2Jsa194LCBkc3RfYmxrX3k7CisgIEpESU1FTlNJT04geF9jcm9wX2Jsb2NrcywgeV9jcm9wX2Jsb2NrczsKKyAgaW50IGNpLCBpLCBqLCBvZmZzZXRfeCwgb2Zmc2V0X3k7CisgIEpCTE9DS0FSUkFZIHNyY19idWZmZXIsIGRzdF9idWZmZXI7CisgIEpDT0VGUFRSIHNyY19wdHIsIGRzdF9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQmVjYXVzZSBvZiB0aGUgaG9yaXpvbnRhbCBtaXJyb3Igc3RlcCwgd2UgY2FuJ3QgcHJvY2VzcyBwYXJ0aWFsIGlNQ1VzCisgICAqIGF0IHRoZSAob3V0cHV0KSByaWdodCBlZGdlIHByb3Blcmx5LiAgVGhleSBqdXN0IGdldCB0cmFuc3Bvc2VkIGFuZAorICAgKiBub3QgbWlycm9yZWQuCisgICAqLworICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQgLworICAgICAgICAgICAgIChkc3RpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGRzdGluZm9fbWluX0RDVF9oX3NjYWxlZF9zaXplKTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKKyAgICBjb21wX3dpZHRoID0gTUNVX2NvbHMgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKKyAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgICAgICAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKyAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgICAgICBjb21wX3dpZHRoIC0geF9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeCAtCisgICAgICAgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT5oX3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBFZGdlIGJsb2NrcyBhcmUgdHJhbnNwb3NlZCBidXQgbm90IG1pcnJvcmVkLiAqLworICAgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgICAgICBkc3RfYmxrX3ggKyB4X2Nyb3BfYmxvY2tzLAorICAgICAgICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKG9mZnNldF94ID0gMDsgb2Zmc2V0X3ggPCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOyBvZmZzZXRfeCsrKSB7CisgICAgICAgICAgICBkc3RfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zmc2V0X3hdOworICAgICAgICAgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisgICAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC0gb2Zmc2V0X3ggLSAxXQorICAgICAgICAgICAgICAgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKKyAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IHNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKKyAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IC1zcmNfcHRyW2kgKiBEQ1RTSVpFICsgal07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8qIEVkZ2UgYmxvY2tzIGFyZSB0cmFuc3Bvc2VkIGJ1dCBub3QgbWlycm9yZWQuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XQorICAgICAgICAgICAgICAgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICBkc3RfcHRyW2ogKiBEQ1RTSVpFICsgaV0gPSBzcmNfcHRyW2kgKiBEQ1RTSVpFICsgal07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworTE9DQUwodm9pZCkKK2RvX3JvdF8yNzAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiAyNzAgZGVncmVlIHJvdGF0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAqICAgMS4gSG9yaXpvbnRhbCBtaXJyb3Jpbmc7CisgKiAgIDIuIFRyYW5zcG9zaW5nIHRoZSBpbWFnZS4KKyAqIFRoZXNlIHR3byBzdGVwcyBhcmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgcHJvY2Vzc2luZyByb3V0aW5lLgorICovCit7CisgIEpESU1FTlNJT04gTUNVX3Jvd3MsIGNvbXBfaGVpZ2h0LCBkc3RfYmxrX3gsIGRzdF9ibGtfeTsKKyAgSkRJTUVOU0lPTiB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOworICBpbnQgY2ksIGksIGosIG9mZnNldF94LCBvZmZzZXRfeTsKKyAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZlciwgZHN0X2J1ZmZlcjsKKyAgSkNPRUZQVFIgc3JjX3B0ciwgZHN0X3B0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICAvKiBCZWNhdXNlIG9mIHRoZSBob3Jpem9udGFsIG1pcnJvciBzdGVwLCB3ZSBjYW4ndCBwcm9jZXNzIHBhcnRpYWwgaU1DVXMKKyAgICogYXQgdGhlIChvdXRwdXQpIGJvdHRvbSBlZGdlIHByb3Blcmx5LiAgVGhleSBqdXN0IGdldCB0cmFuc3Bvc2VkIGFuZAorICAgKiBub3QgbWlycm9yZWQuCisgICAqLworICBNQ1Vfcm93cyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCisgICAgICAgICAgICAgKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogZHN0aW5mb19taW5fRENUX3Zfc2NhbGVkX3NpemUpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGRzdGluZm8tPmNvbXBfaW5mbyArIGNpOworICAgIGNvbXBfaGVpZ2h0ID0gTUNVX3Jvd3MgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKKyAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgICAgICAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgICAgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICAgICAgZm9yIChvZmZzZXRfeCA9IDA7IG9mZnNldF94IDwgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3grKykgeworICAgICAgICAgICAgZHN0X3B0ciA9IGRzdF9idWZmZXJbb2Zmc2V0X3ldW2RzdF9ibGtfeCArIG9mZnNldF94XTsKKyAgICAgICAgICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgLyogQmxvY2sgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XQorICAgICAgICAgICAgICAgIFtjb21wX2hlaWdodCAtIHlfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3kgLSBvZmZzZXRfeSAtIDFdOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgeworICAgICAgICAgICAgICAgICAgZHN0X3B0cltqICogRENUU0laRSArIGldID0gc3JjX3B0cltpICogRENUU0laRSArIGpdOworICAgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgICAgZHN0X3B0cltqICogRENUU0laRSArIGldID0gLXNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8qIEVkZ2UgYmxvY2tzIGFyZSB0cmFuc3Bvc2VkIGJ1dCBub3QgbWlycm9yZWQuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XQorICAgICAgICAgICAgICAgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICBkc3RfcHRyW2ogKiBEQ1RTSVpFICsgaV0gPSBzcmNfcHRyW2kgKiBEQ1RTSVpFICsgal07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworTE9DQUwodm9pZCkKK2RvX3JvdF8xODAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiAxODAgZGVncmVlIHJvdGF0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAqICAgMS4gVmVydGljYWwgbWlycm9yaW5nOworICogICAyLiBIb3Jpem9udGFsIG1pcnJvcmluZy4KKyAqIFRoZXNlIHR3byBzdGVwcyBhcmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgcHJvY2Vzc2luZyByb3V0aW5lLgorICovCit7CisgIEpESU1FTlNJT04gTUNVX2NvbHMsIE1DVV9yb3dzLCBjb21wX3dpZHRoLCBjb21wX2hlaWdodCwgZHN0X2Jsa194LCBkc3RfYmxrX3k7CisgIEpESU1FTlNJT04geF9jcm9wX2Jsb2NrcywgeV9jcm9wX2Jsb2NrczsKKyAgaW50IGNpLCBpLCBqLCBvZmZzZXRfeTsKKyAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZlciwgZHN0X2J1ZmZlcjsKKyAgSkJMT0NLUk9XIHNyY19yb3dfcHRyLCBkc3Rfcm93X3B0cjsKKyAgSkNPRUZQVFIgc3JjX3B0ciwgZHN0X3B0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCisgICAgICAgICAgICAgKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogZHN0aW5mb19taW5fRENUX2hfc2NhbGVkX3NpemUpOworICBNQ1Vfcm93cyA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQgLworICAgICAgICAgICAgIChkc3RpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIGRzdGluZm9fbWluX0RDVF92X3NjYWxlZF9zaXplKTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKKyAgICBjb21wX3dpZHRoID0gTUNVX2NvbHMgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIGNvbXBfaGVpZ2h0ID0gTUNVX3Jvd3MgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKKyAgICAgICAgLyogUm93IGlzIHdpdGhpbiB0aGUgdmVydGljYWxseSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgIGNvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtCisgICAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgIChKRElNRU5TSU9OKWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEJvdHRvbS1lZGdlIHJvd3MgYXJlIG9ubHkgbWlycm9yZWQgaG9yaXpvbnRhbGx5LiAqLworICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICBkc3RfYmxrX3kgKyB5X2Nyb3BfYmxvY2tzLAorICAgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICB9CisgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7CisgICAgICAgIGRzdF9yb3dfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV07CisgICAgICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKKyAgICAgICAgICAvKiBSb3cgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgICAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPnZfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeSAtIDFdOworICAgICAgICAgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOworICAgICAgICAgICAgICAgZHN0X2Jsa194KyspIHsKKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOworICAgICAgICAgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisgICAgICAgICAgICAgIC8qIFByb2Nlc3MgdGhlIGJsb2NrcyB0aGF0IGNhbiBiZSBtaXJyb3JlZCBib3RoIHdheXMuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPQorICAgICAgICAgICAgICAgIHNyY19yb3dfcHRyW2NvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa194IC0gMV07CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAvKiBGb3IgZXZlbiByb3csIG5lZ2F0ZSBldmVyeSBvZGQgY29sdW1uLiAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqICs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOworICAgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogRm9yIG9kZCByb3csIG5lZ2F0ZSBldmVyeSBldmVuIGNvbHVtbi4gKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaiArPSAyKSB7CisgICAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOworICAgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBBbnkgcmVtYWluaW5nIHJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBvbmx5IG1pcnJvcmVkIHZlcnRpY2FsbHkuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfcm93X3B0clt4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194XTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkgKz0gMikgeworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBSZW1haW5pbmcgcm93cyBhcmUganVzdCBtaXJyb3JlZCBob3Jpem9udGFsbHkuICovCisgICAgICAgICAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF95XTsKKyAgICAgICAgICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKKyAgICAgICAgICAgICAgIGRzdF9ibGtfeCsrKSB7CisgICAgICAgICAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKyAgICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgYmxvY2tzIHRoYXQgY2FuIGJlIG1pcnJvcmVkLiAqLworICAgICAgICAgICAgICBkc3RfcHRyID0gZHN0X3Jvd19wdHJbZHN0X2Jsa194XTsKKyAgICAgICAgICAgICAgc3JjX3B0ciA9CisgICAgICAgICAgICAgICAgc3JjX3Jvd19wdHJbY29tcF93aWR0aCAtIHhfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3ggLSAxXTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBBbnkgcmVtYWluaW5nIHJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBvbmx5IGNvcGllZC4gKi8KKyAgICAgICAgICAgICAgamNvcHlfYmxvY2tfcm93KHNyY19yb3dfcHRyICsgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9yb3dfcHRyICsgZHN0X2Jsa194LCAoSkRJTUVOU0lPTikxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZG9fdHJhbnN2ZXJzZShqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisgICAgICAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCisgICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKKy8qIFRyYW5zdmVyc2UgdHJhbnNwb3NlIGlzIGVxdWl2YWxlbnQgdG8KKyAqICAgMS4gMTgwIGRlZ3JlZSByb3RhdGlvbjsKKyAqICAgMi4gVHJhbnNwb3NpdGlvbjsKKyAqIG9yCisgKiAgIDEuIEhvcml6b250YWwgbWlycm9yaW5nOworICogICAyLiBUcmFuc3Bvc2l0aW9uOworICogICAzLiBIb3Jpem9udGFsIG1pcnJvcmluZy4KKyAqIFRoZXNlIHN0ZXBzIGFyZSBtZXJnZWQgaW50byBhIHNpbmdsZSBwcm9jZXNzaW5nIHJvdXRpbmUuCisgKi8KK3sKKyAgSkRJTUVOU0lPTiBNQ1VfY29scywgTUNVX3Jvd3MsIGNvbXBfd2lkdGgsIGNvbXBfaGVpZ2h0LCBkc3RfYmxrX3gsIGRzdF9ibGtfeTsKKyAgSkRJTUVOU0lPTiB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOworICBpbnQgY2ksIGksIGosIG9mZnNldF94LCBvZmZzZXRfeTsKKyAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZlciwgZHN0X2J1ZmZlcjsKKyAgSkNPRUZQVFIgc3JjX3B0ciwgZHN0X3B0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQgLworICAgICAgICAgICAgIChkc3RpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGRzdGluZm9fbWluX0RDVF9oX3NjYWxlZF9zaXplKTsKKyAgTUNVX3Jvd3MgPSBzcmNpbmZvLT5vdXRwdXRfd2lkdGggLworICAgICAgICAgICAgIChkc3RpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIGRzdGluZm9fbWluX0RDVF92X3NjYWxlZF9zaXplKTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKKyAgICBjb21wX3dpZHRoID0gTUNVX2NvbHMgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIGNvbXBfaGVpZ2h0ID0gTUNVX3Jvd3MgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0cilzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKKyAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgICAgICAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKyAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKXNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgICAgICBjb21wX3dpZHRoIC0geF9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeCAtCisgICAgICAgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT5oX3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgKEpESU1FTlNJT04pY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAgICAgKChqX2NvbW1vbl9wdHIpc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgICAgICAgIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgICAoSkRJTUVOU0lPTiljb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZvciAob2Zmc2V0X3ggPSAwOyBvZmZzZXRfeCA8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7IG9mZnNldF94KyspIHsKKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07CisgICAgICAgICAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CisgICAgICAgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworICAgICAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPmhfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeCAtIDFdCisgICAgICAgICAgICAgICAgICBbY29tcF9oZWlnaHQgLSB5X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa195IC0gb2Zmc2V0X3kgLSAxXTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IHNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgICAgICBkc3RfcHRyW2ogKiBEQ1RTSVpFICsgaV0gPSAtc3JjX3B0cltpICogRENUU0laRSArIGpdOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBkc3RfcHRyW2ogKiBEQ1RTSVpFICsgaV0gPSAtc3JjX3B0cltpICogRENUU0laRSArIGpdOworICAgICAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IHNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogUmlnaHQtZWRnZSBibG9ja3MgYXJlIG1pcnJvcmVkIGluIHkgb25seSAqLworICAgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XQorICAgICAgICAgICAgICAgICAgW2NvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtIG9mZnNldF95IC0gMV07CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykgeworICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBkc3RfcHRyW2ogKiBEQ1RTSVpFICsgaV0gPSBzcmNfcHRyW2kgKiBEQ1RTSVpFICsgal07CisgICAgICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgICAgICAgICAgZHN0X3B0cltqICogRENUU0laRSArIGldID0gLXNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworICAgICAgICAgICAgICAgIC8qIEJvdHRvbS1lZGdlIGJsb2NrcyBhcmUgbWlycm9yZWQgaW4geCBvbmx5ICovCisgICAgICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19idWZmZXJbY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAtIG9mZnNldF94IC0gMV0KKyAgICAgICAgICAgICAgICAgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IHNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IC1zcmNfcHRyW2kgKiBEQ1RTSVpFICsgal07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEF0IGxvd2VyIHJpZ2h0IGNvcm5lciwganVzdCB0cmFuc3Bvc2UsIG5vIG1pcnJvcmluZyAqLworICAgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XQorICAgICAgICAgICAgICAgICAgW2RzdF9ibGtfeSArIG9mZnNldF95ICsgeV9jcm9wX2Jsb2Nrc107CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykKKyAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaiAqIERDVFNJWkUgKyBpXSA9IHNyY19wdHJbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8qIFBhcnNlIGFuIHVuc2lnbmVkIGludGVnZXI6IHN1YnJvdXRpbmUgZm9yIGp0cmFuc2Zvcm1fcGFyc2VfY3JvcF9zcGVjLgorICogUmV0dXJucyBUUlVFIGlmIHZhbGlkIGludGVnZXIgZm91bmQsIEZBTFNFIGlmIG5vdC4KKyAqICpzdHJwdHIgaXMgYWR2YW5jZWQgb3ZlciB0aGUgZGlnaXQgc3RyaW5nLCBhbmQgKnJlc3VsdCBpcyBzZXQgdG8gaXRzIHZhbHVlLgorICovCisKK0xPQ0FMKGJvb2xlYW4pCitqdF9yZWFkX2ludGVnZXIoY29uc3QgY2hhciAqKnN0cnB0ciwgSkRJTUVOU0lPTiAqcmVzdWx0KQoreworICBjb25zdCBjaGFyICpwdHIgPSAqc3RycHRyOworICBKRElNRU5TSU9OIHZhbCA9IDA7CisKKyAgZm9yICg7IGlzZGlnaXQoKnB0cik7IHB0cisrKSB7CisgICAgdmFsID0gdmFsICogMTAgKyAoSkRJTUVOU0lPTikoKnB0ciAtICcwJyk7CisgIH0KKyAgKnJlc3VsdCA9IHZhbDsKKyAgaWYgKHB0ciA9PSAqc3RycHRyKQorICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAvKiBvb3BzLCBubyBkaWdpdHMgKi8KKyAgKnN0cnB0ciA9IHB0cjsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyogUGFyc2UgYSBjcm9wIHNwZWNpZmljYXRpb24gKHdyaXR0ZW4gaW4gWDExIGdlb21ldHJ5IHN0eWxlKS4KKyAqIFRoZSByb3V0aW5lIHJldHVybnMgVFJVRSBpZiB0aGUgc3BlYyBzdHJpbmcgaXMgdmFsaWQsIEZBTFNFIGlmIG5vdC4KKyAqCisgKiBUaGUgY3JvcCBzcGVjIHN0cmluZyBzaG91bGQgaGF2ZSB0aGUgZm9ybWF0CisgKiAgICAgIDx3aWR0aD5bZl14PGhlaWdodD5bZl17Ky19PHhvZmZzZXQ+eystfTx5b2Zmc2V0PgorICogd2hlcmUgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgYW5kIHlvZmZzZXQgYXJlIHVuc2lnbmVkIGludGVnZXJzLgorICogRWFjaCBvZiB0aGUgZWxlbWVudHMgY2FuIGJlIG9taXR0ZWQgdG8gaW5kaWNhdGUgYSBkZWZhdWx0IHZhbHVlLgorICogKEEgd2Vha25lc3Mgb2YgdGhpcyBzdHlsZSBpcyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvbWl0IHhvZmZzZXQKKyAqIHdoaWxlIHNwZWNpZnlpbmcgeW9mZnNldCwgc2luY2UgdGhleSBsb29rIGFsaWtlLikKKyAqCisgKiBUaGlzIGNvZGUgaXMgbG9vc2VseSBiYXNlZCBvbiBYUGFyc2VHZW9tZXRyeSBmcm9tIHRoZSBYMTEgZGlzdHJpYnV0aW9uLgorICovCisKK0dMT0JBTChib29sZWFuKQoranRyYW5zZm9ybV9wYXJzZV9jcm9wX3NwZWMoanBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbywgY29uc3QgY2hhciAqc3BlYykKK3sKKyAgaW5mby0+Y3JvcCA9IEZBTFNFOworICBpbmZvLT5jcm9wX3dpZHRoX3NldCA9IEpDUk9QX1VOU0VUOworICBpbmZvLT5jcm9wX2hlaWdodF9zZXQgPSBKQ1JPUF9VTlNFVDsKKyAgaW5mby0+Y3JvcF94b2Zmc2V0X3NldCA9IEpDUk9QX1VOU0VUOworICBpbmZvLT5jcm9wX3lvZmZzZXRfc2V0ID0gSkNST1BfVU5TRVQ7CisKKyAgaWYgKGlzZGlnaXQoKnNwZWMpKSB7CisgICAgLyogZmV0Y2ggd2lkdGggKi8KKyAgICBpZiAoIWp0X3JlYWRfaW50ZWdlcigmc3BlYywgJmluZm8tPmNyb3Bfd2lkdGgpKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmICgqc3BlYyA9PSAnZicgfHwgKnNwZWMgPT0gJ0YnKSB7CisgICAgICBzcGVjKys7CisgICAgICBpbmZvLT5jcm9wX3dpZHRoX3NldCA9IEpDUk9QX0ZPUkNFOworICAgIH0gZWxzZQorICAgICAgaW5mby0+Y3JvcF93aWR0aF9zZXQgPSBKQ1JPUF9QT1M7CisgIH0KKyAgaWYgKCpzcGVjID09ICd4JyB8fCAqc3BlYyA9PSAnWCcpIHsKKyAgICAvKiBmZXRjaCBoZWlnaHQgKi8KKyAgICBzcGVjKys7CisgICAgaWYgKCFqdF9yZWFkX2ludGVnZXIoJnNwZWMsICZpbmZvLT5jcm9wX2hlaWdodCkpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKCpzcGVjID09ICdmJyB8fCAqc3BlYyA9PSAnRicpIHsKKyAgICAgIHNwZWMrKzsKKyAgICAgIGluZm8tPmNyb3BfaGVpZ2h0X3NldCA9IEpDUk9QX0ZPUkNFOworICAgIH0gZWxzZQorICAgICAgaW5mby0+Y3JvcF9oZWlnaHRfc2V0ID0gSkNST1BfUE9TOworICB9CisgIGlmICgqc3BlYyA9PSAnKycgfHwgKnNwZWMgPT0gJy0nKSB7CisgICAgLyogZmV0Y2ggeG9mZnNldCAqLworICAgIGluZm8tPmNyb3BfeG9mZnNldF9zZXQgPSAoKnNwZWMgPT0gJy0nKSA/IEpDUk9QX05FRyA6IEpDUk9QX1BPUzsKKyAgICBzcGVjKys7CisgICAgaWYgKCFqdF9yZWFkX2ludGVnZXIoJnNwZWMsICZpbmZvLT5jcm9wX3hvZmZzZXQpKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGlmICgqc3BlYyA9PSAnKycgfHwgKnNwZWMgPT0gJy0nKSB7CisgICAgLyogZmV0Y2ggeW9mZnNldCAqLworICAgIGluZm8tPmNyb3BfeW9mZnNldF9zZXQgPSAoKnNwZWMgPT0gJy0nKSA/IEpDUk9QX05FRyA6IEpDUk9QX1BPUzsKKyAgICBzcGVjKys7CisgICAgaWYgKCFqdF9yZWFkX2ludGVnZXIoJnNwZWMsICZpbmZvLT5jcm9wX3lvZmZzZXQpKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisgIC8qIFdlIGhhZCBiZXR0ZXIgaGF2ZSBnb3R0ZW4gdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiAqLworICBpZiAoKnNwZWMgIT0gJ1wwJykKKyAgICByZXR1cm4gRkFMU0U7CisgIGluZm8tPmNyb3AgPSBUUlVFOworICByZXR1cm4gVFJVRTsKK30KKworCisvKiBUcmltIG9mZiBhbnkgcGFydGlhbCBpTUNVcyBvbiB0aGUgaW5kaWNhdGVkIGRlc3RpbmF0aW9uIGVkZ2UgKi8KKworTE9DQUwodm9pZCkKK3RyaW1fcmlnaHRfZWRnZShqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvLCBKRElNRU5TSU9OIGZ1bGxfd2lkdGgpCit7CisgIEpESU1FTlNJT04gTUNVX2NvbHM7CisKKyAgTUNVX2NvbHMgPSBpbmZvLT5vdXRwdXRfd2lkdGggLyBpbmZvLT5pTUNVX3NhbXBsZV93aWR0aDsKKyAgaWYgKE1DVV9jb2xzID4gMCAmJiBpbmZvLT54X2Nyb3Bfb2Zmc2V0ICsgTUNVX2NvbHMgPT0KKyAgICAgIGZ1bGxfd2lkdGggLyBpbmZvLT5pTUNVX3NhbXBsZV93aWR0aCkKKyAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBNQ1VfY29scyAqIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoOworfQorCitMT0NBTCh2b2lkKQordHJpbV9ib3R0b21fZWRnZShqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvLCBKRElNRU5TSU9OIGZ1bGxfaGVpZ2h0KQoreworICBKRElNRU5TSU9OIE1DVV9yb3dzOworCisgIE1DVV9yb3dzID0gaW5mby0+b3V0cHV0X2hlaWdodCAvIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodDsKKyAgaWYgKE1DVV9yb3dzID4gMCAmJiBpbmZvLT55X2Nyb3Bfb2Zmc2V0ICsgTUNVX3Jvd3MgPT0KKyAgICAgIGZ1bGxfaGVpZ2h0IC8gaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0KQorICAgIGluZm8tPm91dHB1dF9oZWlnaHQgPSBNQ1Vfcm93cyAqIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodDsKK30KKworCisvKiBSZXF1ZXN0IGFueSByZXF1aXJlZCB3b3Jrc3BhY2UuCisgKgorICogVGhpcyByb3V0aW5lIGZpZ3VyZXMgb3V0IHRoZSBzaXplIHRoYXQgdGhlIG91dHB1dCBpbWFnZSB3aWxsIGJlCisgKiAod2hpY2ggaW1wbGllcyB0aGF0IGFsbCB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQgYmVmb3JlCisgKiBpdCBpcyBjYWxsZWQpLgorICoKKyAqIFdlIGFsbG9jYXRlIHRoZSB3b3Jrc3BhY2UgdmlydHVhbCBhcnJheXMgZnJvbSB0aGUgc291cmNlIGRlY29tcHJlc3Npb24KKyAqIG9iamVjdCwgc28gdGhhdCBhbGwgdGhlIGFycmF5cyAoYm90aCB0aGUgb3JpZ2luYWwgZGF0YSBhbmQgdGhlIHdvcmtzcGFjZSkKKyAqIHdpbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoaWxlIG1ha2luZyBtZW1vcnkgbWFuYWdlbWVudCBkZWNpc2lvbnMuCisgKiBIZW5jZSwgdGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIGFmdGVyIGpwZWdfcmVhZF9oZWFkZXIgKHdoaWNoIHJlYWRzCisgKiB0aGUgaW1hZ2UgZGltZW5zaW9ucykgYW5kIGJlZm9yZSBqcGVnX3JlYWRfY29lZmZpY2llbnRzICh3aGljaCByZWFsaXplcworICogdGhlIHNvdXJjZSdzIHZpcnR1YWwgYXJyYXlzKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UgcmlnaHQgYXdheSBpZiAtcGVyZmVjdCBpcyBnaXZlbgorICogYW5kIHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBwZXJmZWN0LiAgT3RoZXJ3aXNlIHJldHVybnMgVFJVRS4KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2p0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2Uoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKQoreworICBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5czsKKyAgYm9vbGVhbiBuZWVkX3dvcmtzcGFjZSwgdHJhbnNwb3NlX2l0OworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKRElNRU5TSU9OIHhvZmZzZXQsIHlvZmZzZXQ7CisgIEpESU1FTlNJT04gd2lkdGhfaW5faU1DVXMsIGhlaWdodF9pbl9pTUNVczsKKyAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3MsIGhlaWdodF9pbl9ibG9ja3M7CisgIGludCBjaSwgaF9zYW1wX2ZhY3Rvciwgdl9zYW1wX2ZhY3RvcjsKKworICAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gb3V0cHV0IGltYWdlICovCisgIGlmIChpbmZvLT5mb3JjZV9ncmF5c2NhbGUgJiYKKyAgICAgIHNyY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyICYmCisgICAgICBzcmNpbmZvLT5udW1fY29tcG9uZW50cyA9PSAzKQorICAgIC8qIFdlJ2xsIG9ubHkgcHJvY2VzcyB0aGUgZmlyc3QgY29tcG9uZW50ICovCisgICAgaW5mby0+bnVtX2NvbXBvbmVudHMgPSAxOworICBlbHNlCisgICAgLyogUHJvY2VzcyBhbGwgdGhlIGNvbXBvbmVudHMgKi8KKyAgICBpbmZvLT5udW1fY29tcG9uZW50cyA9IHNyY2luZm8tPm51bV9jb21wb25lbnRzOworCisgIC8qIENvbXB1dGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIHJlbGF0ZWQgdmFsdWVzLiAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKKyAganBlZ19jb3JlX291dHB1dF9kaW1lbnNpb25zKHNyY2luZm8pOworI2Vsc2UKKyAgc3JjaW5mby0+b3V0cHV0X3dpZHRoID0gc3JjaW5mby0+aW1hZ2Vfd2lkdGg7CisgIHNyY2luZm8tPm91dHB1dF9oZWlnaHQgPSBzcmNpbmZvLT5pbWFnZV9oZWlnaHQ7CisjZW5kaWYKKworICAvKiBSZXR1cm4gcmlnaHQgYXdheSBpZiAtcGVyZmVjdCBpcyBnaXZlbiBhbmQgdHJhbnNmb3JtYXRpb24gaXMgbm90IHBlcmZlY3QuCisgICAqLworICBpZiAoaW5mby0+cGVyZmVjdCkgeworICAgIGlmIChpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSB7CisgICAgICBpZiAoIWp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0oc3JjaW5mby0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgIHNyY2luZm8tPm91dHB1dF9oZWlnaHQsCisgICAgICAgICAgc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSwKKyAgICAgICAgICBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplLAorICAgICAgICAgIGluZm8tPnRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCFqdHJhbnNmb3JtX3BlcmZlY3RfdHJhbnNmb3JtKHNyY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0LAorICAgICAgICAgIHNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSwKKyAgICAgICAgICBzcmNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIHNyY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUsCisgICAgICAgICAgaW5mby0+dHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgfQorCisgIC8qIElmIHRoZXJlIGlzIG9ubHkgb25lIG91dHB1dCBjb21wb25lbnQsIGZvcmNlIHRoZSBpTUNVIHNpemUgdG8gYmUgMTsKKyAgICogZWxzZSB1c2UgdGhlIHNvdXJjZSBpTUNVIHNpemUuICAoVGhpcyBhbGxvd3MgdXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nCisgICAqIHdoZW4gcmVkdWNpbmcgY29sb3IgdG8gZ3JheXNjYWxlLCBhbmQgYWxzbyBwcm92aWRlcyBhIGhhbmR5IHdheSBvZgorICAgKiBjbGVhbmluZyB1cCAiZnVubnkiIGdyYXlzY2FsZSBpbWFnZXMgd2hvc2Ugc2FtcGxpbmcgZmFjdG9ycyBhcmUgbm90IDF4MS4pCisgICAqLworICBzd2l0Y2ggKGluZm8tPnRyYW5zZm9ybSkgeworICBjYXNlIEpYRk9STV9UUkFOU1BPU0U6CisgIGNhc2UgSlhGT1JNX1RSQU5TVkVSU0U6CisgIGNhc2UgSlhGT1JNX1JPVF85MDoKKyAgY2FzZSBKWEZPUk1fUk9UXzI3MDoKKyAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgIGluZm8tPm91dHB1dF9oZWlnaHQgPSBzcmNpbmZvLT5vdXRwdXRfd2lkdGg7CisgICAgaWYgKGluZm8tPm51bV9jb21wb25lbnRzID09IDEpIHsKKyAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0gc3JjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKKyAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCA9IHNyY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemU7CisgICAgfSBlbHNlIHsKKyAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0KKyAgICAgICAgc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplOworICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0KKyAgICAgICAgc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBzcmNpbmZvLT5vdXRwdXRfd2lkdGg7CisgICAgaW5mby0+b3V0cHV0X2hlaWdodCA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQ7CisgICAgaWYgKGluZm8tPm51bV9jb21wb25lbnRzID09IDEpIHsKKyAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0gc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKKyAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCA9IHNyY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemU7CisgICAgfSBlbHNlIHsKKyAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0KKyAgICAgICAgc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplOworICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0KKyAgICAgICAgc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplOworICAgIH0KKyAgICBicmVhazsKKyAgfQorCisgIC8qIElmIGNyb3BwaW5nIGhhcyBiZWVuIHJlcXVlc3RlZCwgY29tcHV0ZSB0aGUgY3JvcCBhcmVhJ3MgcG9zaXRpb24gYW5kCisgICAqIGRpbWVuc2lvbnMsIGVuc3VyaW5nIHRoYXQgaXRzIHVwcGVyIGxlZnQgY29ybmVyIGZhbGxzIGF0IGFuIGlNQ1UgYm91bmRhcnkuCisgICAqLworICBpZiAoaW5mby0+Y3JvcCkgeworICAgIC8qIEluc2VydCBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zZXQgY3JvcCBwYXJhbWV0ZXJzICovCisgICAgaWYgKGluZm8tPmNyb3BfeG9mZnNldF9zZXQgPT0gSkNST1BfVU5TRVQpCisgICAgICBpbmZvLT5jcm9wX3hvZmZzZXQgPSAwOyAgIC8qIGRlZmF1bHQgdG8gKzAgKi8KKyAgICBpZiAoaW5mby0+Y3JvcF95b2Zmc2V0X3NldCA9PSBKQ1JPUF9VTlNFVCkKKyAgICAgIGluZm8tPmNyb3BfeW9mZnNldCA9IDA7ICAgLyogZGVmYXVsdCB0byArMCAqLworICAgIGlmIChpbmZvLT5jcm9wX3hvZmZzZXQgPj0gaW5mby0+b3V0cHV0X3dpZHRoIHx8CisgICAgICAgIGluZm8tPmNyb3BfeW9mZnNldCA+PSBpbmZvLT5vdXRwdXRfaGVpZ2h0KQorICAgICAgRVJSRVhJVChzcmNpbmZvLCBKRVJSX0JBRF9DUk9QX1NQRUMpOworICAgIGlmIChpbmZvLT5jcm9wX3dpZHRoX3NldCA9PSBKQ1JPUF9VTlNFVCkKKyAgICAgIGluZm8tPmNyb3Bfd2lkdGggPSBpbmZvLT5vdXRwdXRfd2lkdGggLSBpbmZvLT5jcm9wX3hvZmZzZXQ7CisgICAgaWYgKGluZm8tPmNyb3BfaGVpZ2h0X3NldCA9PSBKQ1JPUF9VTlNFVCkKKyAgICAgIGluZm8tPmNyb3BfaGVpZ2h0ID0gaW5mby0+b3V0cHV0X2hlaWdodCAtIGluZm8tPmNyb3BfeW9mZnNldDsKKyAgICAvKiBFbnN1cmUgcGFyYW1ldGVycyBhcmUgdmFsaWQgKi8KKyAgICBpZiAoaW5mby0+Y3JvcF93aWR0aCA8PSAwIHx8IGluZm8tPmNyb3Bfd2lkdGggPiBpbmZvLT5vdXRwdXRfd2lkdGggfHwKKyAgICAgICAgaW5mby0+Y3JvcF9oZWlnaHQgPD0gMCB8fCBpbmZvLT5jcm9wX2hlaWdodCA+IGluZm8tPm91dHB1dF9oZWlnaHQgfHwKKyAgICAgICAgaW5mby0+Y3JvcF94b2Zmc2V0ID4gaW5mby0+b3V0cHV0X3dpZHRoIC0gaW5mby0+Y3JvcF93aWR0aCB8fAorICAgICAgICBpbmZvLT5jcm9wX3lvZmZzZXQgPiBpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gaW5mby0+Y3JvcF9oZWlnaHQpCisgICAgICBFUlJFWElUKHNyY2luZm8sIEpFUlJfQkFEX0NST1BfU1BFQyk7CisgICAgLyogQ29udmVydCBuZWdhdGl2ZSBjcm9wIG9mZnNldHMgaW50byByZWd1bGFyIG9mZnNldHMgKi8KKyAgICBpZiAoaW5mby0+Y3JvcF94b2Zmc2V0X3NldCA9PSBKQ1JPUF9ORUcpCisgICAgICB4b2Zmc2V0ID0gaW5mby0+b3V0cHV0X3dpZHRoIC0gaW5mby0+Y3JvcF93aWR0aCAtIGluZm8tPmNyb3BfeG9mZnNldDsKKyAgICBlbHNlCisgICAgICB4b2Zmc2V0ID0gaW5mby0+Y3JvcF94b2Zmc2V0OworICAgIGlmIChpbmZvLT5jcm9wX3lvZmZzZXRfc2V0ID09IEpDUk9QX05FRykKKyAgICAgIHlvZmZzZXQgPSBpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gaW5mby0+Y3JvcF9oZWlnaHQgLSBpbmZvLT5jcm9wX3lvZmZzZXQ7CisgICAgZWxzZQorICAgICAgeW9mZnNldCA9IGluZm8tPmNyb3BfeW9mZnNldDsKKyAgICAvKiBOb3cgYWRqdXN0IHNvIHRoYXQgdXBwZXIgbGVmdCBjb3JuZXIgZmFsbHMgYXQgYW4gaU1DVSBib3VuZGFyeSAqLworICAgIGlmIChpbmZvLT5jcm9wX3dpZHRoX3NldCA9PSBKQ1JPUF9GT1JDRSkKKyAgICAgIGluZm8tPm91dHB1dF93aWR0aCA9IGluZm8tPmNyb3Bfd2lkdGg7CisgICAgZWxzZQorICAgICAgaW5mby0+b3V0cHV0X3dpZHRoID0KKyAgICAgICAgaW5mby0+Y3JvcF93aWR0aCArICh4b2Zmc2V0ICUgaW5mby0+aU1DVV9zYW1wbGVfd2lkdGgpOworICAgIGlmIChpbmZvLT5jcm9wX2hlaWdodF9zZXQgPT0gSkNST1BfRk9SQ0UpCisgICAgICBpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gaW5mby0+Y3JvcF9oZWlnaHQ7CisgICAgZWxzZQorICAgICAgaW5mby0+b3V0cHV0X2hlaWdodCA9CisgICAgICAgIGluZm8tPmNyb3BfaGVpZ2h0ICsgKHlvZmZzZXQgJSBpbmZvLT5pTUNVX3NhbXBsZV9oZWlnaHQpOworICAgIC8qIFNhdmUgeC95IG9mZnNldHMgbWVhc3VyZWQgaW4gaU1DVXMgKi8KKyAgICBpbmZvLT54X2Nyb3Bfb2Zmc2V0ID0geG9mZnNldCAvIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoOworICAgIGluZm8tPnlfY3JvcF9vZmZzZXQgPSB5b2Zmc2V0IC8gaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0OworICB9IGVsc2UgeworICAgIGluZm8tPnhfY3JvcF9vZmZzZXQgPSAwOworICAgIGluZm8tPnlfY3JvcF9vZmZzZXQgPSAwOworICB9CisKKyAgLyogRmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgd29ya3NwYWNlIGFycmF5cywKKyAgICogYW5kIGlmIHNvIHdoZXRoZXIgdGhleSBhcmUgdHJhbnNwb3NlZCByZWxhdGl2ZSB0byB0aGUgc291cmNlLgorICAgKi8KKyAgbmVlZF93b3Jrc3BhY2UgPSBGQUxTRTsKKyAgdHJhbnNwb3NlX2l0ID0gRkFMU0U7CisgIHN3aXRjaCAoaW5mby0+dHJhbnNmb3JtKSB7CisgIGNhc2UgSlhGT1JNX05PTkU6CisgICAgaWYgKGluZm8tPnhfY3JvcF9vZmZzZXQgIT0gMCB8fCBpbmZvLT55X2Nyb3Bfb2Zmc2V0ICE9IDApCisgICAgICBuZWVkX3dvcmtzcGFjZSA9IFRSVUU7CisgICAgLyogTm8gd29ya3NwYWNlIG5lZWRlZCBpZiBuZWl0aGVyIGNyb3BwaW5nIG5vciB0cmFuc2Zvcm1pbmcgKi8KKyAgICBicmVhazsKKyAgY2FzZSBKWEZPUk1fRkxJUF9IOgorICAgIGlmIChpbmZvLT50cmltKQorICAgICAgdHJpbV9yaWdodF9lZGdlKGluZm8sIHNyY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgaWYgKGluZm8tPnlfY3JvcF9vZmZzZXQgIT0gMCB8fCBpbmZvLT5zbG93X2hmbGlwKQorICAgICAgbmVlZF93b3Jrc3BhY2UgPSBUUlVFOworICAgIC8qIGRvX2ZsaXBfaF9ub19jcm9wIGRvZXNuJ3QgbmVlZCBhIHdvcmtzcGFjZSBhcnJheSAqLworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9GTElQX1Y6CisgICAgaWYgKGluZm8tPnRyaW0pCisgICAgICB0cmltX2JvdHRvbV9lZGdlKGluZm8sIHNyY2luZm8tPm91dHB1dF9oZWlnaHQpOworICAgIC8qIE5lZWQgd29ya3NwYWNlIGFycmF5cyBoYXZpbmcgc2FtZSBkaW1lbnNpb25zIGFzIHNvdXJjZSBpbWFnZS4gKi8KKyAgICBuZWVkX3dvcmtzcGFjZSA9IFRSVUU7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX1RSQU5TUE9TRToKKyAgICAvKiB0cmFuc3Bvc2UgZG9lcyBOT1QgaGF2ZSB0byB0cmltIGFueXRoaW5nICovCisgICAgLyogTmVlZCB3b3Jrc3BhY2UgYXJyYXlzIGhhdmluZyB0cmFuc3Bvc2VkIGRpbWVuc2lvbnMuICovCisgICAgbmVlZF93b3Jrc3BhY2UgPSBUUlVFOworICAgIHRyYW5zcG9zZV9pdCA9IFRSVUU7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX1RSQU5TVkVSU0U6CisgICAgaWYgKGluZm8tPnRyaW0pIHsKKyAgICAgIHRyaW1fcmlnaHRfZWRnZShpbmZvLCBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0KTsKKyAgICAgIHRyaW1fYm90dG9tX2VkZ2UoaW5mbywgc3JjaW5mby0+b3V0cHV0X3dpZHRoKTsKKyAgICB9CisgICAgLyogTmVlZCB3b3Jrc3BhY2UgYXJyYXlzIGhhdmluZyB0cmFuc3Bvc2VkIGRpbWVuc2lvbnMuICovCisgICAgbmVlZF93b3Jrc3BhY2UgPSBUUlVFOworICAgIHRyYW5zcG9zZV9pdCA9IFRSVUU7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX1JPVF85MDoKKyAgICBpZiAoaW5mby0+dHJpbSkKKyAgICAgIHRyaW1fcmlnaHRfZWRnZShpbmZvLCBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0KTsKKyAgICAvKiBOZWVkIHdvcmtzcGFjZSBhcnJheXMgaGF2aW5nIHRyYW5zcG9zZWQgZGltZW5zaW9ucy4gKi8KKyAgICBuZWVkX3dvcmtzcGFjZSA9IFRSVUU7CisgICAgdHJhbnNwb3NlX2l0ID0gVFJVRTsKKyAgICBicmVhazsKKyAgY2FzZSBKWEZPUk1fUk9UXzE4MDoKKyAgICBpZiAoaW5mby0+dHJpbSkgeworICAgICAgdHJpbV9yaWdodF9lZGdlKGluZm8sIHNyY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgICB0cmltX2JvdHRvbV9lZGdlKGluZm8sIHNyY2luZm8tPm91dHB1dF9oZWlnaHQpOworICAgIH0KKyAgICAvKiBOZWVkIHdvcmtzcGFjZSBhcnJheXMgaGF2aW5nIHNhbWUgZGltZW5zaW9ucyBhcyBzb3VyY2UgaW1hZ2UuICovCisgICAgbmVlZF93b3Jrc3BhY2UgPSBUUlVFOworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9ST1RfMjcwOgorICAgIGlmIChpbmZvLT50cmltKQorICAgICAgdHJpbV9ib3R0b21fZWRnZShpbmZvLCBzcmNpbmZvLT5vdXRwdXRfd2lkdGgpOworICAgIC8qIE5lZWQgd29ya3NwYWNlIGFycmF5cyBoYXZpbmcgdHJhbnNwb3NlZCBkaW1lbnNpb25zLiAqLworICAgIG5lZWRfd29ya3NwYWNlID0gVFJVRTsKKyAgICB0cmFuc3Bvc2VfaXQgPSBUUlVFOworICAgIGJyZWFrOworICB9CisKKyAgLyogQWxsb2NhdGUgd29ya3NwYWNlIGlmIG5lZWRlZC4KKyAgICogTm90ZSB0aGF0IHdlIGFsbG9jYXRlIGFycmF5cyBwYWRkZWQgb3V0IHRvIHRoZSBuZXh0IGlNQ1UgYm91bmRhcnksCisgICAqIHNvIHRoYXQgdHJhbnNmb3JtIHJvdXRpbmVzIG5lZWQgbm90IHdvcnJ5IGFib3V0IG1pc3NpbmcgZWRnZSBibG9ja3MuCisgICAqLworICBpZiAobmVlZF93b3Jrc3BhY2UpIHsKKyAgICBjb2VmX2FycmF5cyA9IChqdmlydF9iYXJyYXlfcHRyICopCisgICAgICAoKnNyY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKXNyY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgIHNpemVvZihqdmlydF9iYXJyYXlfcHRyKSAqIGluZm8tPm51bV9jb21wb25lbnRzKTsKKyAgICB3aWR0aF9pbl9pTUNVcyA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZylpbmZvLT5vdXRwdXRfd2lkdGgsIChsb25nKWluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoKTsKKyAgICBoZWlnaHRfaW5faU1DVXMgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpaW5mby0+b3V0cHV0X2hlaWdodCwgKGxvbmcpaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0KTsKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgICAgY29tcHB0ciA9IHNyY2luZm8tPmNvbXBfaW5mbyArIGNpOworICAgICAgaWYgKGluZm8tPm51bV9jb21wb25lbnRzID09IDEpIHsKKyAgICAgICAgLyogd2UncmUgZ29pbmcgdG8gZm9yY2Ugc2FtcCBmYWN0b3JzIHRvIDF4MSBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgaF9zYW1wX2ZhY3RvciA9IHZfc2FtcF9mYWN0b3IgPSAxOworICAgICAgfSBlbHNlIGlmICh0cmFuc3Bvc2VfaXQpIHsKKyAgICAgICAgaF9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgICAgIHZfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaF9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgICAgIHZfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgICAgfQorICAgICAgd2lkdGhfaW5fYmxvY2tzID0gd2lkdGhfaW5faU1DVXMgKiBoX3NhbXBfZmFjdG9yOworICAgICAgaGVpZ2h0X2luX2Jsb2NrcyA9IGhlaWdodF9pbl9pTUNVcyAqIHZfc2FtcF9mYWN0b3I7CisgICAgICBjb2VmX2FycmF5c1tjaV0gPSAoKnNyY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X2JhcnJheSkKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpc3JjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgd2lkdGhfaW5fYmxvY2tzLCBoZWlnaHRfaW5fYmxvY2tzLCAoSkRJTUVOU0lPTil2X3NhbXBfZmFjdG9yKTsKKyAgICB9CisgICAgaW5mby0+d29ya3NwYWNlX2NvZWZfYXJyYXlzID0gY29lZl9hcnJheXM7CisgIH0gZWxzZQorICAgIGluZm8tPndvcmtzcGFjZV9jb2VmX2FycmF5cyA9IE5VTEw7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyogVHJhbnNwb3NlIGRlc3RpbmF0aW9uIGltYWdlIHBhcmFtZXRlcnMgKi8KKworTE9DQUwodm9pZCkKK3RyYW5zcG9zZV9jcml0aWNhbF9wYXJhbWV0ZXJzKGpfY29tcHJlc3NfcHRyIGRzdGluZm8pCit7CisgIGludCB0YmxubywgaSwgaiwgY2ksIGl0ZW1wOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKUVVBTlRfVEJMICpxdGJscHRyOworICBKRElNRU5TSU9OIGp0ZW1wOworICBVSU5UMTYgcXRlbXA7CisKKyAgLyogVHJhbnNwb3NlIGltYWdlIGRpbWVuc2lvbnMgKi8KKyAganRlbXAgPSBkc3RpbmZvLT5pbWFnZV93aWR0aDsKKyAgZHN0aW5mby0+aW1hZ2Vfd2lkdGggPSBkc3RpbmZvLT5pbWFnZV9oZWlnaHQ7CisgIGRzdGluZm8tPmltYWdlX2hlaWdodCA9IGp0ZW1wOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgaXRlbXAgPSBkc3RpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemU7CisgIGRzdGluZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IGRzdGluZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKKyAgZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gaXRlbXA7CisjZW5kaWYKKworICAvKiBUcmFuc3Bvc2Ugc2FtcGxpbmcgZmFjdG9ycyAqLworICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKKyAgICBpdGVtcCA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9IGl0ZW1wOworICB9CisKKyAgLyogVHJhbnNwb3NlIHF1YW50aXphdGlvbiB0YWJsZXMgKi8KKyAgZm9yICh0YmxubyA9IDA7IHRibG5vIDwgTlVNX1FVQU5UX1RCTFM7IHRibG5vKyspIHsKKyAgICBxdGJscHRyID0gZHN0aW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOworICAgIGlmIChxdGJscHRyICE9IE5VTEwpIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgIHF0ZW1wID0gcXRibHB0ci0+cXVhbnR2YWxbaSAqIERDVFNJWkUgKyBqXTsKKyAgICAgICAgICBxdGJscHRyLT5xdWFudHZhbFtpICogRENUU0laRSArIGpdID0KKyAgICAgICAgICAgIHF0YmxwdHItPnF1YW50dmFsW2ogKiBEQ1RTSVpFICsgaV07CisgICAgICAgICAgcXRibHB0ci0+cXVhbnR2YWxbaiAqIERDVFNJWkUgKyBpXSA9IHF0ZW1wOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworLyogQWRqdXN0IEV4aWYgaW1hZ2UgcGFyYW1ldGVycy4KKyAqCisgKiBXZSB0cnkgdG8gYWRqdXN0IHRoZSBUYWdzIEV4aWZJbWFnZVdpZHRoIGFuZCBFeGlmSW1hZ2VIZWlnaHQgaWYgcG9zc2libGUuCisgKi8KKworTE9DQUwodm9pZCkKK2FkanVzdF9leGlmX3BhcmFtZXRlcnMoSk9DVEVUICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCBKRElNRU5TSU9OIG5ld193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBuZXdfaGVpZ2h0KQoreworICBib29sZWFuIGlzX21vdG9yb2xhOyAvKiBGbGFnIGZvciBieXRlIG9yZGVyICovCisgIHVuc2lnbmVkIGludCBudW1iZXJfb2ZfdGFncywgdGFnbnVtOworICB1bnNpZ25lZCBpbnQgZmlyc3RvZmZzZXQsIG9mZnNldDsKKyAgSkRJTUVOU0lPTiBuZXdfdmFsdWU7CisKKyAgaWYgKGxlbmd0aCA8IDEyKSByZXR1cm47IC8qIExlbmd0aCBvZiBhbiBJRkQgZW50cnkgKi8KKworICAvKiBEaXNjb3ZlciBieXRlIG9yZGVyICovCisgIGlmIChHRVRKT0NURVQoZGF0YVswXSkgPT0gMHg0OSAmJiBHRVRKT0NURVQoZGF0YVsxXSkgPT0gMHg0OSkKKyAgICBpc19tb3Rvcm9sYSA9IEZBTFNFOworICBlbHNlIGlmIChHRVRKT0NURVQoZGF0YVswXSkgPT0gMHg0RCAmJiBHRVRKT0NURVQoZGF0YVsxXSkgPT0gMHg0RCkKKyAgICBpc19tb3Rvcm9sYSA9IFRSVUU7CisgIGVsc2UKKyAgICByZXR1cm47CisKKyAgLyogQ2hlY2sgVGFnIE1hcmsgKi8KKyAgaWYgKGlzX21vdG9yb2xhKSB7CisgICAgaWYgKEdFVEpPQ1RFVChkYXRhWzJdKSAhPSAwKSByZXR1cm47CisgICAgaWYgKEdFVEpPQ1RFVChkYXRhWzNdKSAhPSAweDJBKSByZXR1cm47CisgIH0gZWxzZSB7CisgICAgaWYgKEdFVEpPQ1RFVChkYXRhWzNdKSAhPSAwKSByZXR1cm47CisgICAgaWYgKEdFVEpPQ1RFVChkYXRhWzJdKSAhPSAweDJBKSByZXR1cm47CisgIH0KKworICAvKiBHZXQgZmlyc3QgSUZEIG9mZnNldCAob2Zmc2V0IHRvIElGRDApICovCisgIGlmIChpc19tb3Rvcm9sYSkgeworICAgIGlmIChHRVRKT0NURVQoZGF0YVs0XSkgIT0gMCkgcmV0dXJuOworICAgIGlmIChHRVRKT0NURVQoZGF0YVs1XSkgIT0gMCkgcmV0dXJuOworICAgIGZpcnN0b2Zmc2V0ID0gR0VUSk9DVEVUKGRhdGFbNl0pOworICAgIGZpcnN0b2Zmc2V0IDw8PSA4OworICAgIGZpcnN0b2Zmc2V0ICs9IEdFVEpPQ1RFVChkYXRhWzddKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbN10pICE9IDApIHJldHVybjsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbNl0pICE9IDApIHJldHVybjsKKyAgICBmaXJzdG9mZnNldCA9IEdFVEpPQ1RFVChkYXRhWzVdKTsKKyAgICBmaXJzdG9mZnNldCA8PD0gODsKKyAgICBmaXJzdG9mZnNldCArPSBHRVRKT0NURVQoZGF0YVs0XSk7CisgIH0KKyAgaWYgKGZpcnN0b2Zmc2V0ID4gbGVuZ3RoIC0gMikgcmV0dXJuOyAvKiBjaGVjayBlbmQgb2YgZGF0YSBzZWdtZW50ICovCisKKyAgLyogR2V0IHRoZSBudW1iZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgY29udGFpbmVkIGluIHRoaXMgSUZEICovCisgIGlmIChpc19tb3Rvcm9sYSkgeworICAgIG51bWJlcl9vZl90YWdzID0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXRdKTsKKyAgICBudW1iZXJfb2ZfdGFncyA8PD0gODsKKyAgICBudW1iZXJfb2ZfdGFncyArPSBHRVRKT0NURVQoZGF0YVtmaXJzdG9mZnNldCArIDFdKTsKKyAgfSBlbHNlIHsKKyAgICBudW1iZXJfb2ZfdGFncyA9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0ICsgMV0pOworICAgIG51bWJlcl9vZl90YWdzIDw8PSA4OworICAgIG51bWJlcl9vZl90YWdzICs9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0XSk7CisgIH0KKyAgaWYgKG51bWJlcl9vZl90YWdzID09IDApIHJldHVybjsKKyAgZmlyc3RvZmZzZXQgKz0gMjsKKworICAvKiBTZWFyY2ggZm9yIEV4aWZTdWJJRkQgb2Zmc2V0IFRhZyBpbiBJRkQwICovCisgIGZvciAoOzspIHsKKyAgICBpZiAoZmlyc3RvZmZzZXQgPiBsZW5ndGggLSAxMikgcmV0dXJuOyAvKiBjaGVjayBlbmQgb2YgZGF0YSBzZWdtZW50ICovCisgICAgLyogR2V0IFRhZyBudW1iZXIgKi8KKyAgICBpZiAoaXNfbW90b3JvbGEpIHsKKyAgICAgIHRhZ251bSA9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0XSk7CisgICAgICB0YWdudW0gPDw9IDg7CisgICAgICB0YWdudW0gKz0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQgKyAxXSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhZ251bSA9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0ICsgMV0pOworICAgICAgdGFnbnVtIDw8PSA4OworICAgICAgdGFnbnVtICs9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0XSk7CisgICAgfQorICAgIGlmICh0YWdudW0gPT0gMHg4NzY5KSBicmVhazsgLyogZm91bmQgRXhpZlN1YklGRCBvZmZzZXQgVGFnICovCisgICAgaWYgKC0tbnVtYmVyX29mX3RhZ3MgPT0gMCkgcmV0dXJuOworICAgIGZpcnN0b2Zmc2V0ICs9IDEyOworICB9CisKKyAgLyogR2V0IHRoZSBFeGlmU3ViSUZEIG9mZnNldCAqLworICBpZiAoaXNfbW90b3JvbGEpIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQgKyA4XSkgIT0gMCkgcmV0dXJuOworICAgIGlmIChHRVRKT0NURVQoZGF0YVtmaXJzdG9mZnNldCArIDldKSAhPSAwKSByZXR1cm47CisgICAgb2Zmc2V0ID0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQgKyAxMF0pOworICAgIG9mZnNldCA8PD0gODsKKyAgICBvZmZzZXQgKz0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQgKyAxMV0pOworICB9IGVsc2UgeworICAgIGlmIChHRVRKT0NURVQoZGF0YVtmaXJzdG9mZnNldCArIDExXSkgIT0gMCkgcmV0dXJuOworICAgIGlmIChHRVRKT0NURVQoZGF0YVtmaXJzdG9mZnNldCArIDEwXSkgIT0gMCkgcmV0dXJuOworICAgIG9mZnNldCA9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0ICsgOV0pOworICAgIG9mZnNldCA8PD0gODsKKyAgICBvZmZzZXQgKz0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQgKyA4XSk7CisgIH0KKyAgaWYgKG9mZnNldCA+IGxlbmd0aCAtIDIpIHJldHVybjsgLyogY2hlY2sgZW5kIG9mIGRhdGEgc2VnbWVudCAqLworCisgIC8qIEdldCB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGNvbnRhaW5lZCBpbiB0aGlzIFN1YklGRCAqLworICBpZiAoaXNfbW90b3JvbGEpIHsKKyAgICBudW1iZXJfb2ZfdGFncyA9IEdFVEpPQ1RFVChkYXRhW29mZnNldF0pOworICAgIG51bWJlcl9vZl90YWdzIDw8PSA4OworICAgIG51bWJlcl9vZl90YWdzICs9IEdFVEpPQ1RFVChkYXRhW29mZnNldCArIDFdKTsKKyAgfSBlbHNlIHsKKyAgICBudW1iZXJfb2ZfdGFncyA9IEdFVEpPQ1RFVChkYXRhW29mZnNldCArIDFdKTsKKyAgICBudW1iZXJfb2ZfdGFncyA8PD0gODsKKyAgICBudW1iZXJfb2ZfdGFncyArPSBHRVRKT0NURVQoZGF0YVtvZmZzZXRdKTsKKyAgfQorICBpZiAobnVtYmVyX29mX3RhZ3MgPCAyKSByZXR1cm47CisgIG9mZnNldCArPSAyOworCisgIC8qIFNlYXJjaCBmb3IgRXhpZkltYWdlV2lkdGggYW5kIEV4aWZJbWFnZUhlaWdodCBUYWdzIGluIHRoaXMgU3ViSUZEICovCisgIGRvIHsKKyAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoIC0gMTIpIHJldHVybjsgLyogY2hlY2sgZW5kIG9mIGRhdGEgc2VnbWVudCAqLworICAgIC8qIEdldCBUYWcgbnVtYmVyICovCisgICAgaWYgKGlzX21vdG9yb2xhKSB7CisgICAgICB0YWdudW0gPSBHRVRKT0NURVQoZGF0YVtvZmZzZXRdKTsKKyAgICAgIHRhZ251bSA8PD0gODsKKyAgICAgIHRhZ251bSArPSBHRVRKT0NURVQoZGF0YVtvZmZzZXQgKyAxXSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhZ251bSA9IEdFVEpPQ1RFVChkYXRhW29mZnNldCArIDFdKTsKKyAgICAgIHRhZ251bSA8PD0gODsKKyAgICAgIHRhZ251bSArPSBHRVRKT0NURVQoZGF0YVtvZmZzZXRdKTsKKyAgICB9CisgICAgaWYgKHRhZ251bSA9PSAweEEwMDIgfHwgdGFnbnVtID09IDB4QTAwMykgeworICAgICAgaWYgKHRhZ251bSA9PSAweEEwMDIpCisgICAgICAgIG5ld192YWx1ZSA9IG5ld193aWR0aDsgLyogRXhpZkltYWdlV2lkdGggVGFnICovCisgICAgICBlbHNlCisgICAgICAgIG5ld192YWx1ZSA9IG5ld19oZWlnaHQ7IC8qIEV4aWZJbWFnZUhlaWdodCBUYWcgKi8KKyAgICAgIGlmIChpc19tb3Rvcm9sYSkgeworICAgICAgICBkYXRhW29mZnNldCArIDJdID0gMDsgLyogRm9ybWF0ID0gdW5zaWduZWQgbG9uZyAoNCBvY3RldHMpICovCisgICAgICAgIGRhdGFbb2Zmc2V0ICsgM10gPSA0OworICAgICAgICBkYXRhW29mZnNldCArIDRdID0gMDsgLyogTnVtYmVyIE9mIENvbXBvbmVudHMgPSAxICovCisgICAgICAgIGRhdGFbb2Zmc2V0ICsgNV0gPSAwOworICAgICAgICBkYXRhW29mZnNldCArIDZdID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyA3XSA9IDE7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgOF0gPSAwOworICAgICAgICBkYXRhW29mZnNldCArIDldID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAxMF0gPSAoSk9DVEVUKSgobmV3X3ZhbHVlID4+IDgpICYgMHhGRik7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgMTFdID0gKEpPQ1RFVCkobmV3X3ZhbHVlICYgMHhGRik7CisgICAgICB9IGVsc2UgeworICAgICAgICBkYXRhW29mZnNldCArIDJdID0gNDsgLyogRm9ybWF0ID0gdW5zaWduZWQgbG9uZyAoNCBvY3RldHMpICovCisgICAgICAgIGRhdGFbb2Zmc2V0ICsgM10gPSAwOworICAgICAgICBkYXRhW29mZnNldCArIDRdID0gMTsgLyogTnVtYmVyIE9mIENvbXBvbmVudHMgPSAxICovCisgICAgICAgIGRhdGFbb2Zmc2V0ICsgNV0gPSAwOworICAgICAgICBkYXRhW29mZnNldCArIDZdID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyA3XSA9IDA7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgOF0gPSAoSk9DVEVUKShuZXdfdmFsdWUgJiAweEZGKTsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyA5XSA9IChKT0NURVQpKChuZXdfdmFsdWUgPj4gOCkgJiAweEZGKTsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAxMF0gPSAwOworICAgICAgICBkYXRhW29mZnNldCArIDExXSA9IDA7CisgICAgICB9CisgICAgfQorICAgIG9mZnNldCArPSAxMjsKKyAgfSB3aGlsZSAoLS1udW1iZXJfb2ZfdGFncyk7Cit9CisKKworLyogQWRqdXN0IG91dHB1dCBpbWFnZSBwYXJhbWV0ZXJzIGFzIG5lZWRlZC4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzKCkKKyAqIGFuZCBiZWZvcmUganBlZ193cml0ZV9jb2VmZmljaWVudHMoKS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzZXQgb2YgdmlydHVhbCBjb2VmZmljaWVudCBhcnJheXMgdG8gYmUgd3JpdHRlbgorICogKGVpdGhlciB0aGUgb25lcyBhbGxvY2F0ZWQgYnkganRyYW5zZm9ybV9yZXF1ZXN0X3dvcmtzcGFjZSwgb3IgdGhlCisgKiBvcmlnaW5hbCBzb3VyY2UgZGF0YSBhcnJheXMpLiAgVGhlIGNhbGxlciB3aWxsIG5lZWQgdG8gcGFzcyB0aGlzIHZhbHVlCisgKiB0byBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpLgorICovCisKK0dMT0JBTChqdmlydF9iYXJyYXlfcHRyICopCitqdHJhbnNmb3JtX2FkanVzdF9wYXJhbWV0ZXJzKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKQoreworICAvKiBJZiBmb3JjZS10by1ncmF5c2NhbGUgaXMgcmVxdWVzdGVkLCBhZGp1c3QgZGVzdGluYXRpb24gcGFyYW1ldGVycyAqLworICBpZiAoaW5mby0+Zm9yY2VfZ3JheXNjYWxlKSB7CisgICAgLyogRmlyc3QsIGVuc3VyZSB3ZSBoYXZlIFlDYkNyIG9yIGdyYXlzY2FsZSBkYXRhLCBhbmQgdGhhdCB0aGUgc291cmNlJ3MKKyAgICAgKiBZIGNoYW5uZWwgaXMgZnVsbCByZXNvbHV0aW9uLiAgKE5vIHJlYXNvbmFibGUgcGVyc29uIHdvdWxkIG1ha2UgWQorICAgICAqIGJlIGxlc3MgdGhhbiBmdWxsIHJlc29sdXRpb24sIHNvIGFjdHVhbGx5IGNvcGluZyB3aXRoIHRoYXQgY2FzZQorICAgICAqIGlzbid0IHdvcnRoIGV4dHJhIGNvZGUgc3BhY2UuICBCdXQgd2UgY2hlY2sgaXQgdG8gYXZvaWQgY3Jhc2hpbmcuKQorICAgICAqLworICAgIGlmICgoKGRzdGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyICYmCisgICAgICAgICAgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMykgfHwKKyAgICAgICAgIChkc3RpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUgJiYKKyAgICAgICAgICBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSkgJiYKKyAgICAgICAgc3JjaW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3IgPT0gc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKyAgICAgICAgc3JjaW5mby0+Y29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgPT0gc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgICAgIC8qIFdlIHVzZSBqcGVnX3NldF9jb2xvcnNwYWNlIHRvIG1ha2Ugc3VyZSBzdWJzaWRpYXJ5IHNldHRpbmdzIGdldCBmaXhlZAorICAgICAgICogcHJvcGVybHkuICBBbW9uZyBvdGhlciB0aGluZ3MsIGl0IHNldHMgdGhlIHRhcmdldCBoX3NhbXBfZmFjdG9yICYKKyAgICAgICAqIHZfc2FtcF9mYWN0b3IgdG8gMSwgd2hpY2ggdHlwaWNhbGx5IHdvbid0IG1hdGNoIHRoZSBzb3VyY2UuCisgICAgICAgKiBXZSBoYXZlIHRvIHByZXNlcnZlIHRoZSBzb3VyY2UncyBxdWFudGl6YXRpb24gdGFibGUgbnVtYmVyLCBob3dldmVyLgorICAgICAgICovCisgICAgICBpbnQgc3ZfcXVhbnRfdGJsX25vID0gZHN0aW5mby0+Y29tcF9pbmZvWzBdLnF1YW50X3RibF9ubzsKKyAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoZHN0aW5mbywgSkNTX0dSQVlTQ0FMRSk7CisgICAgICBkc3RpbmZvLT5jb21wX2luZm9bMF0ucXVhbnRfdGJsX25vID0gc3ZfcXVhbnRfdGJsX25vOworICAgIH0gZWxzZSB7CisgICAgICAvKiBTb3JyeSwgY2FuJ3QgZG8gaXQgKi8KKyAgICAgIEVSUkVYSVQoZHN0aW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIH0KKyAgfSBlbHNlIGlmIChpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSB7CisgICAgLyogRm9yIGEgc2luZ2xlLWNvbXBvbmVudCBzb3VyY2UsIHdlIGZvcmNlIHRoZSBkZXN0aW5hdGlvbiBzYW1wbGluZyBmYWN0b3JzCisgICAgICogdG8gMXgxLCB3aXRoIG9yIHdpdGhvdXQgZm9yY2VfZ3JheXNjYWxlLiAgVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBzb21lCisgICAgICogZGVjb2RlcnMgY2hva2Ugb24gZ3JheXNjYWxlIGltYWdlcyB3aXRoIG90aGVyIHNhbXBsaW5nIGZhY3RvcnMuCisgICAgICovCisgICAgZHN0aW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3IgPSAxOworICAgIGRzdGluZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID0gMTsKKyAgfQorCisgIC8qIENvcnJlY3QgdGhlIGRlc3RpbmF0aW9uJ3MgaW1hZ2UgZGltZW5zaW9ucyBhcyBuZWNlc3NhcnkKKyAgICogZm9yIHJvdGF0ZS9mbGlwLCByZXNpemUsIGFuZCBjcm9wIG9wZXJhdGlvbnMuCisgICAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKKyAgZHN0aW5mby0+anBlZ193aWR0aCA9IGluZm8tPm91dHB1dF93aWR0aDsKKyAgZHN0aW5mby0+anBlZ19oZWlnaHQgPSBpbmZvLT5vdXRwdXRfaGVpZ2h0OworI2VuZGlmCisKKyAgLyogVHJhbnNwb3NlIGRlc3RpbmF0aW9uIGltYWdlIHBhcmFtZXRlcnMgKi8KKyAgc3dpdGNoIChpbmZvLT50cmFuc2Zvcm0pIHsKKyAgY2FzZSBKWEZPUk1fVFJBTlNQT1NFOgorICBjYXNlIEpYRk9STV9UUkFOU1ZFUlNFOgorICBjYXNlIEpYRk9STV9ST1RfOTA6CisgIGNhc2UgSlhGT1JNX1JPVF8yNzA6CisjaWYgSlBFR19MSUJfVkVSU0lPTiA8IDgwCisgICAgZHN0aW5mby0+aW1hZ2Vfd2lkdGggPSBpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgIGRzdGluZm8tPmltYWdlX2hlaWdodCA9IGluZm8tPm91dHB1dF93aWR0aDsKKyNlbmRpZgorICAgIHRyYW5zcG9zZV9jcml0aWNhbF9wYXJhbWV0ZXJzKGRzdGluZm8pOworICAgIGJyZWFrOworICBkZWZhdWx0OgorI2lmIEpQRUdfTElCX1ZFUlNJT04gPCA4MAorICAgIGRzdGluZm8tPmltYWdlX3dpZHRoID0gaW5mby0+b3V0cHV0X3dpZHRoOworICAgIGRzdGluZm8tPmltYWdlX2hlaWdodCA9IGluZm8tPm91dHB1dF9oZWlnaHQ7CisjZW5kaWYKKyAgICBicmVhazsKKyAgfQorCisgIC8qIEFkanVzdCBFeGlmIHByb3BlcnRpZXMgKi8KKyAgaWYgKHNyY2luZm8tPm1hcmtlcl9saXN0ICE9IE5VTEwgJiYKKyAgICAgIHNyY2luZm8tPm1hcmtlcl9saXN0LT5tYXJrZXIgPT0gSlBFR19BUFAwICsgMSAmJgorICAgICAgc3JjaW5mby0+bWFya2VyX2xpc3QtPmRhdGFfbGVuZ3RoID49IDYgJiYKKyAgICAgIEdFVEpPQ1RFVChzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YVswXSkgPT0gMHg0NSAmJgorICAgICAgR0VUSk9DVEVUKHNyY2luZm8tPm1hcmtlcl9saXN0LT5kYXRhWzFdKSA9PSAweDc4ICYmCisgICAgICBHRVRKT0NURVQoc3JjaW5mby0+bWFya2VyX2xpc3QtPmRhdGFbMl0pID09IDB4NjkgJiYKKyAgICAgIEdFVEpPQ1RFVChzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YVszXSkgPT0gMHg2NiAmJgorICAgICAgR0VUSk9DVEVUKHNyY2luZm8tPm1hcmtlcl9saXN0LT5kYXRhWzRdKSA9PSAwICYmCisgICAgICBHRVRKT0NURVQoc3JjaW5mby0+bWFya2VyX2xpc3QtPmRhdGFbNV0pID09IDApIHsKKyAgICAvKiBTdXBwcmVzcyBvdXRwdXQgb2YgSkZJRiBtYXJrZXIgKi8KKyAgICBkc3RpbmZvLT53cml0ZV9KRklGX2hlYWRlciA9IEZBTFNFOworICAgIC8qIEFkanVzdCBFeGlmIGltYWdlIHBhcmFtZXRlcnMgKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisgICAgaWYgKGRzdGluZm8tPmpwZWdfd2lkdGggIT0gc3JjaW5mby0+aW1hZ2Vfd2lkdGggfHwKKyAgICAgICAgZHN0aW5mby0+anBlZ19oZWlnaHQgIT0gc3JjaW5mby0+aW1hZ2VfaGVpZ2h0KQorICAgICAgLyogQWxpZ24gZGF0YSBzZWdtZW50IHRvIHN0YXJ0IG9mIFRJRkYgc3RydWN0dXJlIGZvciBwYXJzaW5nICovCisgICAgICBhZGp1c3RfZXhpZl9wYXJhbWV0ZXJzKHNyY2luZm8tPm1hcmtlcl9saXN0LT5kYXRhICsgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjaW5mby0+bWFya2VyX2xpc3QtPmRhdGFfbGVuZ3RoIC0gNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0aW5mby0+anBlZ193aWR0aCwgZHN0aW5mby0+anBlZ19oZWlnaHQpOworI2Vsc2UKKyAgICBpZiAoZHN0aW5mby0+aW1hZ2Vfd2lkdGggIT0gc3JjaW5mby0+aW1hZ2Vfd2lkdGggfHwKKyAgICAgICAgZHN0aW5mby0+aW1hZ2VfaGVpZ2h0ICE9IHNyY2luZm8tPmltYWdlX2hlaWdodCkKKyAgICAgIC8qIEFsaWduIGRhdGEgc2VnbWVudCB0byBzdGFydCBvZiBUSUZGIHN0cnVjdHVyZSBmb3IgcGFyc2luZyAqLworICAgICAgYWRqdXN0X2V4aWZfcGFyYW1ldGVycyhzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YSArIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2luZm8tPm1hcmtlcl9saXN0LT5kYXRhX2xlbmd0aCAtIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGluZm8tPmltYWdlX3dpZHRoLCBkc3RpbmZvLT5pbWFnZV9oZWlnaHQpOworI2VuZGlmCisgIH0KKworICAvKiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG91dHB1dCBkYXRhIHNldCAqLworICBpZiAoaW5mby0+d29ya3NwYWNlX2NvZWZfYXJyYXlzICE9IE5VTEwpCisgICAgcmV0dXJuIGluZm8tPndvcmtzcGFjZV9jb2VmX2FycmF5czsKKyAgcmV0dXJuIHNyY19jb2VmX2FycmF5czsKK30KKworCisvKiBFeGVjdXRlIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24sIGlmIGFueS4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkICphZnRlcioganBlZ193cml0ZV9jb2VmZmljaWVudHMsIGJlY2F1c2UgaXQgZGVwZW5kcworICogb24ganBlZ193cml0ZV9jb2VmZmljaWVudHMgdG8gaGF2ZSBjb21wdXRlZCBzdWJzaWRpYXJ5IHZhbHVlcyBzdWNoIGFzCisgKiB0aGUgcGVyLWNvbXBvbmVudCB3aWR0aCBhbmQgaGVpZ2h0IGZpZWxkcyBpbiB0aGUgZGVzdGluYXRpb24gb2JqZWN0LgorICoKKyAqIE5vdGUgdGhhdCBzb21lIHRyYW5zZm9ybWF0aW9ucyB3aWxsIG1vZGlmeSB0aGUgc291cmNlIGRhdGEgYXJyYXlzIQorICovCisKK0dMT0JBTCh2b2lkKQoranRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybShqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykKK3sKKyAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzID0gaW5mby0+d29ya3NwYWNlX2NvZWZfYXJyYXlzOworCisgIC8qIE5vdGU6IGNvbmRpdGlvbnMgdGVzdGVkIGhlcmUgc2hvdWxkIG1hdGNoIHRob3NlIGluIHN3aXRjaCBzdGF0ZW1lbnQKKyAgICogaW4ganRyYW5zZm9ybV9yZXF1ZXN0X3dvcmtzcGFjZSgpCisgICAqLworICBzd2l0Y2ggKGluZm8tPnRyYW5zZm9ybSkgeworICBjYXNlIEpYRk9STV9OT05FOgorICAgIGlmIChpbmZvLT54X2Nyb3Bfb2Zmc2V0ICE9IDAgfHwgaW5mby0+eV9jcm9wX29mZnNldCAhPSAwKQorICAgICAgZG9fY3JvcChzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX0ZMSVBfSDoKKyAgICBpZiAoaW5mby0+eV9jcm9wX29mZnNldCAhPSAwIHx8IGluZm8tPnNsb3dfaGZsaXApCisgICAgICBkb19mbGlwX2goc3JjaW5mbywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgZWxzZQorICAgICAgZG9fZmxpcF9oX25vX2Nyb3Aoc3JjaW5mbywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2VmX2FycmF5cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX0ZMSVBfVjoKKyAgICBkb19mbGlwX3Yoc3JjaW5mbywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9UUkFOU1BPU0U6CisgICAgZG9fdHJhbnNwb3NlKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCisgICAgICAgICAgICAgICAgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKWEZPUk1fVFJBTlNWRVJTRToKKyAgICBkb190cmFuc3ZlcnNlKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX1JPVF85MDoKKyAgICBkb19yb3RfOTAoc3JjaW5mbywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9ST1RfMTgwOgorICAgIGRvX3JvdF8xODAoc3JjaW5mbywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICAgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKKyAgICBicmVhazsKKyAgY2FzZSBKWEZPUk1fUk9UXzI3MDoKKyAgICBkb19yb3RfMjcwKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCisgICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgYnJlYWs7CisgIH0KK30KKworLyoganRyYW5zZm9ybV9wZXJmZWN0X3RyYW5zZm9ybQorICoKKyAqIERldGVybWluZSB3aGV0aGVyIGxvc3NsZXNzIHRyYW5zZm9ybWF0aW9uIGlzIHBlcmZlY3RseQorICogcG9zc2libGUgZm9yIGEgc3BlY2lmaWVkIGltYWdlIGFuZCB0cmFuc2Zvcm1hdGlvbi4KKyAqCisgKiBJbnB1dHM6CisgKiAgIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQ6IHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLgorICogICBNQ1Vfd2lkdGgsIE1DVV9oZWlnaHQ6IHBpeGVsIGRpbWVuc2lvbnMgb2YgTUNVLgorICogICB0cmFuc2Zvcm06IHRyYW5zZm9ybWF0aW9uIGlkZW50aWZpZXIuCisgKiBQYXJhbWV0ZXIgc291cmNlcyBmcm9tIGluaXRpYWxpemVkIGpwZWdfc3RydWN0CisgKiAoYWZ0ZXIgcmVhZGluZyBzb3VyY2UgaGVhZGVyKToKKyAqICAgaW1hZ2Vfd2lkdGggPSBjaW5mby5pbWFnZV93aWR0aAorICogICBpbWFnZV9oZWlnaHQgPSBjaW5mby5pbWFnZV9oZWlnaHQKKyAqICAgTUNVX3dpZHRoID0gY2luZm8ubWF4X2hfc2FtcF9mYWN0b3IgKiBjaW5mby5ibG9ja19zaXplCisgKiAgIE1DVV9oZWlnaHQgPSBjaW5mby5tYXhfdl9zYW1wX2ZhY3RvciAqIGNpbmZvLmJsb2NrX3NpemUKKyAqIFJlc3VsdDoKKyAqICAgVFJVRSA9IHBlcmZlY3QgdHJhbnNmb3JtYXRpb24gcG9zc2libGUKKyAqICAgRkFMU0UgPSBwZXJmZWN0IHRyYW5zZm9ybWF0aW9uIG5vdCBwb3NzaWJsZQorICogICAgICAgICAgIChtYXkgdXNlIGN1c3RvbSBhY3Rpb24gdGhlbikKKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2p0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0oSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgSkRJTUVOU0lPTiBpbWFnZV9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBNQ1Vfd2lkdGgsIGludCBNQ1VfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKWEZPUk1fQ09ERSB0cmFuc2Zvcm0pCit7CisgIGJvb2xlYW4gcmVzdWx0ID0gVFJVRTsgLyogaW5pdGlhbGl6ZSBUUlVFICovCisKKyAgc3dpdGNoICh0cmFuc2Zvcm0pIHsKKyAgY2FzZSBKWEZPUk1fRkxJUF9IOgorICBjYXNlIEpYRk9STV9ST1RfMjcwOgorICAgIGlmIChpbWFnZV93aWR0aCAlIChKRElNRU5TSU9OKU1DVV93aWR0aCkKKyAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9GTElQX1Y6CisgIGNhc2UgSlhGT1JNX1JPVF85MDoKKyAgICBpZiAoaW1hZ2VfaGVpZ2h0ICUgKEpESU1FTlNJT04pTUNVX2hlaWdodCkKKyAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9UUkFOU1ZFUlNFOgorICBjYXNlIEpYRk9STV9ST1RfMTgwOgorICAgIGlmIChpbWFnZV93aWR0aCAlIChKRElNRU5TSU9OKU1DVV93aWR0aCkKKyAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgIGlmIChpbWFnZV9oZWlnaHQgJSAoSkRJTUVOU0lPTilNQ1VfaGVpZ2h0KQorICAgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogVFJBTlNGT1JNU19TVVBQT1JURUQgKi8KKworCisvKiBTZXR1cCBkZWNvbXByZXNzaW9uIG9iamVjdCB0byBzYXZlIGRlc2lyZWQgbWFya2VycyBpbiBtZW1vcnkuCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBqcGVnX3JlYWRfaGVhZGVyKCkgdG8gaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuCisgKi8KKworR0xPQkFMKHZvaWQpCitqY29weV9tYXJrZXJzX3NldHVwKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgSkNPUFlfT1BUSU9OIG9wdGlvbikKK3sKKyNpZmRlZiBTQVZFX01BUktFUlNfU1VQUE9SVEVECisgIGludCBtOworCisgIC8qIFNhdmUgY29tbWVudHMgZXhjZXB0IHVuZGVyIE5PTkUgb3B0aW9uICovCisgIGlmIChvcHRpb24gIT0gSkNPUFlPUFRfTk9ORSkgeworICAgIGpwZWdfc2F2ZV9tYXJrZXJzKHNyY2luZm8sIEpQRUdfQ09NLCAweEZGRkYpOworICB9CisgIC8qIFNhdmUgYWxsIHR5cGVzIG9mIEFQUG4gbWFya2VycyBpZmYgQUxMIG9wdGlvbiAqLworICBpZiAob3B0aW9uID09IEpDT1BZT1BUX0FMTCB8fCBvcHRpb24gPT0gSkNPUFlPUFRfQUxMX0VYQ0VQVF9JQ0MpIHsKKyAgICBmb3IgKG0gPSAwOyBtIDwgMTY7IG0rKykgeworICAgICAgaWYgKG9wdGlvbiA9PSBKQ09QWU9QVF9BTExfRVhDRVBUX0lDQyAmJiBtID09IDIpCisgICAgICAgIGNvbnRpbnVlOworICAgICAganBlZ19zYXZlX21hcmtlcnMoc3JjaW5mbywgSlBFR19BUFAwICsgbSwgMHhGRkZGKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBTQVZFX01BUktFUlNfU1VQUE9SVEVEICovCit9CisKKy8qIENvcHkgbWFya2VycyBzYXZlZCBpbiB0aGUgZ2l2ZW4gc291cmNlIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGp1c3QgYWZ0ZXIganBlZ19zdGFydF9jb21wcmVzcygpIG9yCisgKiBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cygpLgorICogTm90ZSB0aGF0IHRob3NlIHJvdXRpbmVzIHdpbGwgaGF2ZSB3cml0dGVuIHRoZSBTT0ksIGFuZCBhbHNvIHRoZQorICogSkZJRiBBUFAwIG9yIEFkb2JlIEFQUDE0IG1hcmtlcnMgaWYgc2VsZWN0ZWQuCisgKi8KKworR0xPQkFMKHZvaWQpCitqY29weV9tYXJrZXJzX2V4ZWN1dGUoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICAgICAgICAgICAgIEpDT1BZX09QVElPTiBvcHRpb24pCit7CisgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBtYXJrZXI7CisKKyAgLyogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gZXhhbWluZSB0aGUKKyAgICogb3B0aW9uIGZsYWcgaGVyZTsgd2UganVzdCBjb3B5IGV2ZXJ5dGhpbmcgdGhhdCBnb3Qgc2F2ZWQuCisgICAqIEJ1dCB0byBhdm9pZCBjb25mdXNpb24sIHdlIGRvIG5vdCBvdXRwdXQgSkZJRiBhbmQgQWRvYmUgQVBQMTQgbWFya2VycworICAgKiBpZiB0aGUgZW5jb2RlciBsaWJyYXJ5IGFscmVhZHkgd3JvdGUgb25lLgorICAgKi8KKyAgZm9yIChtYXJrZXIgPSBzcmNpbmZvLT5tYXJrZXJfbGlzdDsgbWFya2VyICE9IE5VTEw7IG1hcmtlciA9IG1hcmtlci0+bmV4dCkgeworICAgIGlmIChkc3RpbmZvLT53cml0ZV9KRklGX2hlYWRlciAmJgorICAgICAgICBtYXJrZXItPm1hcmtlciA9PSBKUEVHX0FQUDAgJiYKKyAgICAgICAgbWFya2VyLT5kYXRhX2xlbmd0aCA+PSA1ICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMF0pID09IDB4NEEgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsxXSkgPT0gMHg0NiAmJgorICAgICAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzJdKSA9PSAweDQ5ICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbM10pID09IDB4NDYgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVs0XSkgPT0gMCkKKyAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyogcmVqZWN0IGR1cGxpY2F0ZSBKRklGICovCisgICAgaWYgKGRzdGluZm8tPndyaXRlX0Fkb2JlX21hcmtlciAmJgorICAgICAgICBtYXJrZXItPm1hcmtlciA9PSBKUEVHX0FQUDAgKyAxNCAmJgorICAgICAgICBtYXJrZXItPmRhdGFfbGVuZ3RoID49IDUgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVswXSkgPT0gMHg0MSAmJgorICAgICAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzFdKSA9PSAweDY0ICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMl0pID09IDB4NkYgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVszXSkgPT0gMHg2MiAmJgorICAgICAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzRdKSA9PSAweDY1KQorICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiByZWplY3QgZHVwbGljYXRlIEFkb2JlICovCisgICAganBlZ193cml0ZV9tYXJrZXIoZHN0aW5mbywgbWFya2VyLT5tYXJrZXIsCisgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLT5kYXRhLCBtYXJrZXItPmRhdGFfbGVuZ3RoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdHJhbnN1cHAuaCBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RyYW5zdXBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyNjRjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3RyYW5zdXBwLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiB0cmFuc3VwcC5oCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIGltYWdlIHRyYW5zZm9ybWF0aW9uIHJvdXRpbmVzIGFuZAorICogb3RoZXIgdXRpbGl0eSBjb2RlIHVzZWQgYnkgdGhlIGpwZWd0cmFuIHNhbXBsZSBhcHBsaWNhdGlvbi4gIFRoZXNlIGFyZQorICogTk9UIHBhcnQgb2YgdGhlIGNvcmUgSlBFRyBsaWJyYXJ5LiAgQnV0IHdlIGtlZXAgdGhlc2Ugcm91dGluZXMgc2VwYXJhdGUKKyAqIGZyb20ganBlZ3RyYW4uYyB0byBlYXNlIHRoZSB0YXNrIG9mIG1haW50YWluaW5nIGpwZWd0cmFuLWxpa2UgcHJvZ3JhbXMKKyAqIHRoYXQgaGF2ZSBvdGhlciB1c2VyIGludGVyZmFjZXMuCisgKgorICogTk9URTogYWxsIHRoZSByb3V0aW5lcyBkZWNsYXJlZCBoZXJlIGhhdmUgdmVyeSBzcGVjaWZpYyByZXF1aXJlbWVudHMKKyAqIGFib3V0IHdoZW4gdGhleSBhcmUgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIG9mIHRoZQorICogc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmaWxlcy4gIFNlZSB0aGUgY29tbWVudHMgaW4gdHJhbnN1cHAuYywgb3Igc2VlCisgKiBqcGVndHJhbi5jIGZvciBhbiBleGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2UuCisgKi8KKworLyogSWYgeW91IGhhcHBlbiBub3QgdG8gd2FudCB0aGUgaW1hZ2UgdHJhbnNmb3JtIHN1cHBvcnQsIGRpc2FibGUgaXQgaGVyZSAqLworI2lmbmRlZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAorI2RlZmluZSBUUkFOU0ZPUk1TX1NVUFBPUlRFRCAgMSAgICAgICAgIC8qIDAgZGlzYWJsZXMgdHJhbnNmb3JtIGNvZGUgKi8KKyNlbmRpZgorCisvKgorICogQWx0aG91Z2ggcm90YXRpbmcgYW5kIGZsaXBwaW5nIGRhdGEgZXhwcmVzc2VkIGFzIERDVCBjb2VmZmljaWVudHMgaXMgbm90CisgKiBoYXJkLCB0aGVyZSBpcyBhbiBhc3ltbWV0cnkgaW4gdGhlIEpQRUcgZm9ybWF0IHNwZWNpZmljYXRpb24gZm9yIGltYWdlcworICogd2hvc2UgZGltZW5zaW9ucyBhcmVuJ3QgbXVsdGlwbGVzIG9mIHRoZSBpTUNVIHNpemUuICBUaGUgcmlnaHQgYW5kIGJvdHRvbQorICogaW1hZ2UgZWRnZXMgYXJlIHBhZGRlZCBvdXQgdG8gdGhlIG5leHQgaU1DVSBib3VuZGFyeSB3aXRoIGp1bmsgZGF0YTsgYnV0CisgKiBubyBwYWRkaW5nIGlzIHBvc3NpYmxlIGF0IHRoZSB0b3AgYW5kIGxlZnQgZWRnZXMuICBJZiB3ZSB3ZXJlIHRvIGZsaXAKKyAqIHRoZSB3aG9sZSBpbWFnZSBpbmNsdWRpbmcgdGhlIHBhZCBkYXRhLCB0aGVuIHBhZCBnYXJiYWdlIHdvdWxkIGJlY29tZQorICogdmlzaWJsZSBhdCB0aGUgdG9wIGFuZC9vciBsZWZ0LCBhbmQgcmVhbCBwaXhlbHMgd291bGQgZGlzYXBwZWFyIGludG8gdGhlCisgKiBwYWQgbWFyZ2lucyAtLS0gcGVyaGFwcyBwZXJtYW5lbnRseSwgc2luY2UgZW5jb2RlcnMgJiBkZWNvZGVycyBtYXkgbm90CisgKiBib3RoZXIgdG8gcHJlc2VydmUgRENUIGJsb2NrcyB0aGF0IGFwcGVhciB0byBiZSBjb21wbGV0ZWx5IG91dHNpZGUgdGhlCisgKiBub21pbmFsIGltYWdlIGFyZWEuICBTbywgd2UgaGF2ZSB0byBleGNsdWRlIGFueSBwYXJ0aWFsIGlNQ1VzIGZyb20gdGhlCisgKiBiYXNpYyB0cmFuc2Zvcm1hdGlvbi4KKyAqCisgKiBUcmFuc3Bvc2UgaXMgdGhlIG9ubHkgdHJhbnNmb3JtYXRpb24gdGhhdCBjYW4gaGFuZGxlIHBhcnRpYWwgaU1DVXMgYXQgdGhlCisgKiByaWdodCBhbmQgYm90dG9tIGVkZ2VzIGNvbXBsZXRlbHkgY2xlYW5seS4gIGZsaXBfaCBjYW4gZmxpcCBwYXJ0aWFsIGlNQ1VzCisgKiBhdCB0aGUgYm90dG9tLCBidXQgbGVhdmVzIGFueSBwYXJ0aWFsIGlNQ1VzIGF0IHRoZSByaWdodCBlZGdlIHVudG91Y2hlZC4KKyAqIFNpbWlsYXJseSBmbGlwX3YgbGVhdmVzIGFueSBwYXJ0aWFsIGlNQ1VzIGF0IHRoZSBib3R0b20gZWRnZSB1bnRvdWNoZWQuCisgKiBUaGUgb3RoZXIgdHJhbnNmb3JtcyBhcmUgZGVmaW5lZCBhcyBjb21iaW5hdGlvbnMgb2YgdGhlc2UgYmFzaWMgdHJhbnNmb3JtcworICogYW5kIHByb2Nlc3MgZWRnZSBibG9ja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgdGhlIGVxdWl2YWxlbmNlLgorICoKKyAqIFRoZSAidHJpbSIgb3B0aW9uIGNhdXNlcyB1bnRyYW5zZm9ybWFibGUgcGFydGlhbCBpTUNVcyB0byBiZSBkcm9wcGVkOworICogdGhpcyBpcyBub3Qgc3RyaWN0bHkgbG9zc2xlc3MsIGJ1dCBpdCB1c3VhbGx5IGdpdmVzIHRoZSBiZXN0LWxvb2tpbmcKKyAqIHJlc3VsdCBmb3Igb2RkLXNpemUgaW1hZ2VzLiAgTm90ZSB0aGF0IHdoZW4gdGhpcyBvcHRpb24gaXMgYWN0aXZlLAorICogdGhlIGV4cGVjdGVkIG1hdGhlbWF0aWNhbCBlcXVpdmFsZW5jZXMgYmV0d2VlbiB0aGUgdHJhbnNmb3JtcyBtYXkgbm90IGhvbGQuCisgKiAoRm9yIGV4YW1wbGUsIC1yb3QgMjcwIC10cmltIHRyaW1zIG9ubHkgdGhlIGJvdHRvbSBlZGdlLCBidXQgLXJvdCA5MCAtdHJpbQorICogZm9sbG93ZWQgYnkgLXJvdCAxODAgLXRyaW0gdHJpbXMgYm90aCBlZGdlcy4pCisgKgorICogV2UgYWxzbyBvZmZlciBhIGxvc3NsZXNzLWNyb3Agb3B0aW9uLCB3aGljaCBkaXNjYXJkcyBkYXRhIG91dHNpZGUgYSBnaXZlbgorICogaW1hZ2UgcmVnaW9uIGJ1dCBsb3NzbGVzc2x5IHByZXNlcnZlcyB3aGF0IGlzIGluc2lkZS4gIExpa2UgdGhlIHJvdGF0ZSBhbmQKKyAqIGZsaXAgdHJhbnNmb3JtcywgbG9zc2xlc3MgY3JvcCBpcyByZXN0cmljdGVkIGJ5IHRoZSBKUEVHIGZvcm1hdDogdGhlIHVwcGVyCisgKiBsZWZ0IGNvcm5lciBvZiB0aGUgc2VsZWN0ZWQgcmVnaW9uIG11c3QgZmFsbCBvbiBhbiBpTUNVIGJvdW5kYXJ5LiAgSWYgdGhpcworICogZG9lcyBub3QgaG9sZCBmb3IgdGhlIGdpdmVuIGNyb3AgcGFyYW1ldGVycywgd2Ugc2lsZW50bHkgbW92ZSB0aGUgdXBwZXIgbGVmdAorICogY29ybmVyIHVwIGFuZC9vciBsZWZ0IHRvIG1ha2UgaXQgc28sIHNpbXVsdGFuZW91c2x5IGluY3JlYXNpbmcgdGhlIHJlZ2lvbgorICogZGltZW5zaW9ucyB0byBrZWVwIHRoZSBsb3dlciByaWdodCBjcm9wIGNvcm5lciB1bmNoYW5nZWQuICAoVGh1cywgdGhlCisgKiBvdXRwdXQgaW1hZ2UgY292ZXJzIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgcmVnaW9uLCBidXQgbWF5IGNvdmVyIG1vcmUuKQorICogVGhlIGFkanVzdG1lbnQgb2YgdGhlIHJlZ2lvbiBkaW1lbnNpb25zIG1heSBiZSBvcHRpb25hbGx5IGRpc2FibGVkLgorICoKKyAqIFdlIGFsc28gcHJvdmlkZSBhIGxvc3NsZXNzLXJlc2l6ZSBvcHRpb24sIHdoaWNoIGlzIGtpbmQgb2YgYSBsb3NzbGVzcy1jcm9wCisgKiBvcGVyYXRpb24gaW4gdGhlIERDVCBjb2VmZmljaWVudCBibG9jayBkb21haW4gLSBpdCBkaXNjYXJkcyBoaWdoZXItb3JkZXIKKyAqIGNvZWZmaWNpZW50cyBhbmQgbG9zc2xlc3NseSBwcmVzZXJ2ZXMgbG93ZXItb3JkZXIgY29lZmZpY2llbnRzIG9mIGEKKyAqIHN1Yi1ibG9jay4KKyAqCisgKiBSb3RhdGUvZmxpcCB0cmFuc2Zvcm0sIHJlc2l6ZSwgYW5kIGNyb3AgY2FuIGJlIHJlcXVlc3RlZCB0b2dldGhlciBpbiBhCisgKiBzaW5nbGUgaW52b2NhdGlvbi4gIFRoZSBjcm9wIGlzIGFwcGxpZWQgbGFzdCAtLS0gdGhhdCBpcywgdGhlIGNyb3AgcmVnaW9uCisgKiBpcyBzcGVjaWZpZWQgaW4gdGVybXMgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlIGFmdGVyIHRyYW5zZm9ybS9yZXNpemUuCisgKgorICogV2UgYWxzbyBvZmZlciBhICJmb3JjZSB0byBncmF5c2NhbGUiIG9wdGlvbiwgd2hpY2ggc2ltcGx5IGRpc2NhcmRzIHRoZQorICogY2hyb21pbmFuY2UgY2hhbm5lbHMgb2YgYSBZQ2JDciBpbWFnZS4gIFRoaXMgaXMgbG9zc2xlc3MgaW4gdGhlIHNlbnNlIHRoYXQKKyAqIHRoZSBsdW1pbmFuY2UgY2hhbm5lbCBpcyBwcmVzZXJ2ZWQgZXhhY3RseS4gIEl0J3Mgbm90IHRoZSBzYW1lIGtpbmQgb2YKKyAqIHRoaW5nIGFzIHRoZSByb3RhdGUvZmxpcCB0cmFuc2Zvcm1hdGlvbnMsIGJ1dCBpdCdzIGNvbnZlbmllbnQgdG8gaGFuZGxlIGl0CisgKiBhcyBwYXJ0IG9mIHRoaXMgcGFja2FnZSwgbWFpbmx5IGJlY2F1c2UgdGhlIHRyYW5zZm9ybWF0aW9uIHJvdXRpbmVzIGhhdmUgdG8KKyAqIGJlIGF3YXJlIG9mIHRoZSBvcHRpb24gdG8ga25vdyBob3cgbWFueSBjb21wb25lbnRzIHRvIHdvcmsgb24uCisgKi8KKworCisvKgorICogQ29kZXMgZm9yIHN1cHBvcnRlZCB0eXBlcyBvZiBpbWFnZSB0cmFuc2Zvcm1hdGlvbnMuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgSlhGT1JNX05PTkUsICAgICAgICAgICAgLyogbm8gdHJhbnNmb3JtYXRpb24gKi8KKyAgSlhGT1JNX0ZMSVBfSCwgICAgICAgICAgLyogaG9yaXpvbnRhbCBmbGlwICovCisgIEpYRk9STV9GTElQX1YsICAgICAgICAgIC8qIHZlcnRpY2FsIGZsaXAgKi8KKyAgSlhGT1JNX1RSQU5TUE9TRSwgICAgICAgLyogdHJhbnNwb3NlIGFjcm9zcyBVTC10by1MUiBheGlzICovCisgIEpYRk9STV9UUkFOU1ZFUlNFLCAgICAgIC8qIHRyYW5zcG9zZSBhY3Jvc3MgVVItdG8tTEwgYXhpcyAqLworICBKWEZPUk1fUk9UXzkwLCAgICAgICAgICAvKiA5MC1kZWdyZWUgY2xvY2t3aXNlIHJvdGF0aW9uICovCisgIEpYRk9STV9ST1RfMTgwLCAgICAgICAgIC8qIDE4MC1kZWdyZWUgcm90YXRpb24gKi8KKyAgSlhGT1JNX1JPVF8yNzAgICAgICAgICAgLyogMjcwLWRlZ3JlZSBjbG9ja3dpc2UgKG9yIDkwIGNjdykgKi8KK30gSlhGT1JNX0NPREU7CisKKy8qCisgKiBDb2RlcyBmb3IgY3JvcCBwYXJhbWV0ZXJzLCB3aGljaCBjYW4gaW5kaXZpZHVhbGx5IGJlIHVuc3BlY2lmaWVkLAorICogcG9zaXRpdmUgb3IgbmVnYXRpdmUgZm9yIHhvZmZzZXQgb3IgeW9mZnNldCwKKyAqIHBvc2l0aXZlIG9yIGZvcmNlZCBmb3Igd2lkdGggb3IgaGVpZ2h0LgorICovCisKK3R5cGVkZWYgZW51bSB7CisgIEpDUk9QX1VOU0VULAorICBKQ1JPUF9QT1MsCisgIEpDUk9QX05FRywKKyAgSkNST1BfRk9SQ0UKK30gSkNST1BfQ09ERTsKKworLyoKKyAqIFRyYW5zZm9ybSBwYXJhbWV0ZXJzIHN0cnVjdC4KKyAqIE5COiBhcHBsaWNhdGlvbiBtdXN0IG5vdCBjaGFuZ2UgYW55IGVsZW1lbnRzIG9mIHRoaXMgc3RydWN0IGFmdGVyCisgKiBjYWxsaW5nIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBPcHRpb25zOiBzZXQgYnkgY2FsbGVyICovCisgIEpYRk9STV9DT0RFIHRyYW5zZm9ybTsgICAgICAgIC8qIGltYWdlIHRyYW5zZm9ybSBvcGVyYXRvciAqLworICBib29sZWFuIHBlcmZlY3Q7ICAgICAgICAgICAgICAvKiBpZiBUUlVFLCBmYWlsIGlmIHBhcnRpYWwgTUNVcyBhcmUgcmVxdWVzdGVkICovCisgIGJvb2xlYW4gdHJpbTsgICAgICAgICAgICAgICAgIC8qIGlmIFRSVUUsIHRyaW0gcGFydGlhbCBNQ1VzIGFzIG5lZWRlZCAqLworICBib29sZWFuIGZvcmNlX2dyYXlzY2FsZTsgICAgICAvKiBpZiBUUlVFLCBjb252ZXJ0IGNvbG9yIGltYWdlIHRvIGdyYXlzY2FsZSAqLworICBib29sZWFuIGNyb3A7ICAgICAgICAgICAgICAgICAvKiBpZiBUUlVFLCBjcm9wIHNvdXJjZSBpbWFnZSAqLworICBib29sZWFuIHNsb3dfaGZsaXA7ICAvKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgdGhlIEpYRk9STV9GTElQX0ggdHJhbnNmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IG1vZGlmaWVzIHRoZSBzb3VyY2UgY29lZmZpY2llbnRzIGluIHBsYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdG8gVFJVRSB3aWxsIGluc3RlYWQgdXNlIGEgc2xvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUtYnVmZmVyZWQgYWxnb3JpdGhtLCB3aGljaCBsZWF2ZXMgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHMgaW4gdGFjdCAobmVjZXNzYXJ5IGlmIG90aGVyIHRyYW5zZm9ybWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyBtdXN0IGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzYW1lIHNldCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHMuICovCisKKyAgLyogQ3JvcCBwYXJhbWV0ZXJzOiBhcHBsaWNhdGlvbiBuZWVkIG5vdCBzZXQgdGhlc2UgdW5sZXNzIGNyb3AgaXMgVFJVRS4KKyAgICogVGhlc2UgY2FuIGJlIGZpbGxlZCBpbiBieSBqdHJhbnNmb3JtX3BhcnNlX2Nyb3Bfc3BlYygpLgorICAgKi8KKyAgSkRJTUVOU0lPTiBjcm9wX3dpZHRoOyAgICAgICAgLyogV2lkdGggb2Ygc2VsZWN0ZWQgcmVnaW9uICovCisgIEpDUk9QX0NPREUgY3JvcF93aWR0aF9zZXQ7ICAgIC8qIChmb3JjZWQgZGlzYWJsZXMgYWRqdXN0bWVudCkgKi8KKyAgSkRJTUVOU0lPTiBjcm9wX2hlaWdodDsgICAgICAgLyogSGVpZ2h0IG9mIHNlbGVjdGVkIHJlZ2lvbiAqLworICBKQ1JPUF9DT0RFIGNyb3BfaGVpZ2h0X3NldDsgICAvKiAoZm9yY2VkIGRpc2FibGVzIGFkanVzdG1lbnQpICovCisgIEpESU1FTlNJT04gY3JvcF94b2Zmc2V0OyAgICAgIC8qIFggb2Zmc2V0IG9mIHNlbGVjdGVkIHJlZ2lvbiAqLworICBKQ1JPUF9DT0RFIGNyb3BfeG9mZnNldF9zZXQ7ICAvKiAobmVnYXRpdmUgbWVhc3VyZXMgZnJvbSByaWdodCBlZGdlKSAqLworICBKRElNRU5TSU9OIGNyb3BfeW9mZnNldDsgICAgICAvKiBZIG9mZnNldCBvZiBzZWxlY3RlZCByZWdpb24gKi8KKyAgSkNST1BfQ09ERSBjcm9wX3lvZmZzZXRfc2V0OyAgLyogKG5lZ2F0aXZlIG1lYXN1cmVzIGZyb20gYm90dG9tIGVkZ2UpICovCisKKyAgLyogSW50ZXJuYWwgd29ya3NwYWNlOiBjYWxsZXIgc2hvdWxkIG5vdCB0b3VjaCB0aGVzZSAqLworICBpbnQgbnVtX2NvbXBvbmVudHM7ICAgICAgICAgICAvKiAjIG9mIGNvbXBvbmVudHMgaW4gd29ya3NwYWNlICovCisgIGp2aXJ0X2JhcnJheV9wdHIgKndvcmtzcGFjZV9jb2VmX2FycmF5czsgLyogd29ya3NwYWNlIGZvciB0cmFuc2Zvcm1hdGlvbnMgKi8KKyAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGg7ICAgICAgLyogY3JvcHBlZCBkZXN0aW5hdGlvbiBkaW1lbnNpb25zICovCisgIEpESU1FTlNJT04gb3V0cHV0X2hlaWdodDsKKyAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0OyAgICAgLyogZGVzdGluYXRpb24gY3JvcCBvZmZzZXRzIG1lYXN1cmVkIGluIGlNQ1VzICovCisgIEpESU1FTlNJT04geV9jcm9wX29mZnNldDsKKyAgaW50IGlNQ1Vfc2FtcGxlX3dpZHRoOyAgICAgICAgLyogZGVzdGluYXRpb24gaU1DVSBzaXplICovCisgIGludCBpTUNVX3NhbXBsZV9oZWlnaHQ7Cit9IGpwZWdfdHJhbnNmb3JtX2luZm87CisKKworI2lmIFRSQU5TRk9STVNfU1VQUE9SVEVECisKKy8qIFBhcnNlIGEgY3JvcCBzcGVjaWZpY2F0aW9uICh3cml0dGVuIGluIFgxMSBnZW9tZXRyeSBzdHlsZSkgKi8KK0VYVEVSTihib29sZWFuKSBqdHJhbnNmb3JtX3BhcnNlX2Nyb3Bfc3BlYyhqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNwZWMpOworLyogUmVxdWVzdCBhbnkgcmVxdWlyZWQgd29ya3NwYWNlICovCitFWFRFUk4oYm9vbGVhbikganRyYW5zZm9ybV9yZXF1ZXN0X3dvcmtzcGFjZShqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKTsKKy8qIEFkanVzdCBvdXRwdXQgaW1hZ2UgcGFyYW1ldGVycyAqLworRVhURVJOKGp2aXJ0X2JhcnJheV9wdHIgKikganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycworICAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLCBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKTsKKy8qIEV4ZWN1dGUgdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbiwgaWYgYW55ICovCitFWFRFUk4odm9pZCkganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybShqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbyk7CisvKiBEZXRlcm1pbmUgd2hldGhlciBsb3NzbGVzcyB0cmFuc2Zvcm1hdGlvbiBpcyBwZXJmZWN0bHkKKyAqIHBvc3NpYmxlIGZvciBhIHNwZWNpZmllZCBpbWFnZSBhbmQgdHJhbnNmb3JtYXRpb24uCisgKi8KK0VYVEVSTihib29sZWFuKSBqdHJhbnNmb3JtX3BlcmZlY3RfdHJhbnNmb3JtKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGltYWdlX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBNQ1Vfd2lkdGgsIGludCBNQ1VfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlhGT1JNX0NPREUgdHJhbnNmb3JtKTsKKworLyoganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybSB1c2VkIHRvIGJlIGNhbGxlZAorICoganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybWF0aW9uLCBidXQgc29tZSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQKKyAqIHJvdXRpbmUgbmFtZXMgdGhhdCBsb25nLiAgVGhpcyBtYWNybyBpcyBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIGFueQorICogb2xkIHNvdXJjZSBjb2RlIHRoYXQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZS4uLgorICovCisjZGVmaW5lIGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbiAgICAgICBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtCisKKyNlbmRpZiAvKiBUUkFOU0ZPUk1TX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBTdXBwb3J0IGZvciBjb3B5aW5nIG9wdGlvbmFsIG1hcmtlcnMgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gZmlsZS4KKyAqLworCit0eXBlZGVmIGVudW0geworICBKQ09QWU9QVF9OT05FLCAgICAgICAgICAvKiBjb3B5IG5vIG9wdGlvbmFsIG1hcmtlcnMgKi8KKyAgSkNPUFlPUFRfQ09NTUVOVFMsICAgICAgLyogY29weSBvbmx5IGNvbW1lbnQgKENPTSkgbWFya2VycyAqLworICBKQ09QWU9QVF9BTEwsICAgICAgICAgICAvKiBjb3B5IGFsbCBvcHRpb25hbCBtYXJrZXJzICovCisgIEpDT1BZT1BUX0FMTF9FWENFUFRfSUNDIC8qIGNvcHkgYWxsIG9wdGlvbmFsIG1hcmtlcnMgZXhjZXB0IEFQUDIgKi8KK30gSkNPUFlfT1BUSU9OOworCisjZGVmaW5lIEpDT1BZT1BUX0RFRkFVTFQgIEpDT1BZT1BUX0NPTU1FTlRTICAgICAvKiByZWNvbW1lbmRlZCBkZWZhdWx0ICovCisKKy8qIFNldHVwIGRlY29tcHJlc3Npb24gb2JqZWN0IHRvIHNhdmUgZGVzaXJlZCBtYXJrZXJzIGluIG1lbW9yeSAqLworRVhURVJOKHZvaWQpIGpjb3B5X21hcmtlcnNfc2V0dXAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPUFlfT1BUSU9OIG9wdGlvbik7CisvKiBDb3B5IG1hcmtlcnMgc2F2ZWQgaW4gdGhlIGdpdmVuIHNvdXJjZSBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCAqLworRVhURVJOKHZvaWQpIGpjb3B5X21hcmtlcnNfZXhlY3V0ZShqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDT1BZX09QVElPTiBvcHRpb24pOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdHVyYm9qcGVnLWpuaS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdHVyYm9qcGVnLWpuaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2EzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90dXJib2pwZWctam5pLmMKQEAgLTAsMCArMSwxMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxNyBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbGlianBlZy10dXJibyBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiLAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInR1cmJvanBlZy5oIgorI2lmZGVmIFdJTjMyCisjaW5jbHVkZSAidGp1dGlsLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxqbmkuaD4KKyNpbmNsdWRlICJqYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvci5oIgorI2luY2x1ZGUgImphdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IuaCIKKyNpbmNsdWRlICJqYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKLmgiCisKKyNkZWZpbmUgUEFEKHYsIHApICAoKHYgKyAocCkgLSAxKSAmICh+KChwKSAtIDEpKSkKKworI2RlZmluZSBiYWlsaWYwKGYpIHsgXAorICBpZiAoIShmKSB8fCAoKmVudiktPkV4Y2VwdGlvbkNoZWNrKGVudikpIHsgXAorICAgIGdvdG8gYmFpbG91dDsgXAorICB9IFwKK30KKworI2RlZmluZSBfdGhyb3cobXNnLCBleGNlcHRpb25DbGFzcykgeyBcCisgIGpjbGFzcyBfZXhjY2xzID0gKCplbnYpLT5GaW5kQ2xhc3MoZW52LCBleGNlcHRpb25DbGFzcyk7IFwKKyAgXAorICBiYWlsaWYwKF9leGNjbHMpOyBcCisgICgqZW52KS0+VGhyb3dOZXcoZW52LCBfZXhjY2xzLCBtc2cpOyBcCisgIGdvdG8gYmFpbG91dDsgXAorfQorCisjZGVmaW5lIF90aHJvd3RqKCkgeyBcCisgIGpjbGFzcyBfZXhjY2xzOyBcCisgIGptZXRob2RJRCBfZXhjaWQ7IFwKKyAgam9iamVjdCBfZXhjb2JqOyBcCisgIGpzdHJpbmcgX2VycnN0cjsgXAorICBcCisgIGJhaWxpZjAoX2VycnN0ciA9ICgqZW52KS0+TmV3U3RyaW5nVVRGKGVudiwgdGpHZXRFcnJvclN0cjIoaGFuZGxlKSkpOyBcCisgIGJhaWxpZjAoX2V4Y2NscyA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgXAorICAgICJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbiIpKTsgXAorICBiYWlsaWYwKF9leGNpZCA9ICgqZW52KS0+R2V0TWV0aG9kSUQoZW52LCBfZXhjY2xzLCAiPGluaXQ+IiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztJKVYiKSk7IFwKKyAgYmFpbGlmMChfZXhjb2JqID0gKCplbnYpLT5OZXdPYmplY3QoZW52LCBfZXhjY2xzLCBfZXhjaWQsIF9lcnJzdHIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGpHZXRFcnJvckNvZGUoaGFuZGxlKSkpOyBcCisgICgqZW52KS0+VGhyb3coZW52LCBfZXhjb2JqKTsgXAorICBnb3RvIGJhaWxvdXQ7IFwKK30KKworI2RlZmluZSBfdGhyb3dhcmcobXNnKSAgX3Rocm93KG1zZywgImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iKQorCisjZGVmaW5lIF90aHJvd21lbSgpIFwKKyAgX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIiwgImphdmEvbGFuZy9PdXRPZk1lbW9yeUVycm9yIik7CisKKyNkZWZpbmUgZ2V0aGFuZGxlKCkgXAorICBqY2xhc3MgX2NscyA9ICgqZW52KS0+R2V0T2JqZWN0Q2xhc3MoZW52LCBvYmopOyBcCisgIGpmaWVsZElEIF9maWQ7IFwKKyAgXAorICBiYWlsaWYwKF9jbHMpOyBcCisgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJoYW5kbGUiLCAiSiIpKTsgXAorICBoYW5kbGUgPSAodGpoYW5kbGUpKHNpemVfdCkoKmVudiktPkdldExvbmdGaWVsZChlbnYsIG9iaiwgX2ZpZCk7CisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgc2V0ZW52KGVudnZhciwgdmFsdWUsIGR1bW15KSAgX3B1dGVudl9zKGVudnZhciwgdmFsdWUpCisjZW5kaWYKKworI2RlZmluZSBwcm9wMmVudihwcm9wZXJ0eSwgZW52dmFyKSB7IFwKKyAgaWYgKChqTmFtZSA9ICgqZW52KS0+TmV3U3RyaW5nVVRGKGVudiwgcHJvcGVydHkpKSAhPSBOVUxMICYmIFwKKyAgICAgIChqVmFsdWUgPSAoKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCBjbHMsIG1pZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqTmFtZSkpICE9IE5VTEwpIHsgXAorICAgIGlmICgodmFsdWUgPSAoKmVudiktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgalZhbHVlLCAwKSkgIT0gTlVMTCkgeyBcCisgICAgICBzZXRlbnYoZW52dmFyLCB2YWx1ZSwgMSk7IFwKKyAgICAgICgqZW52KS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGVudiwgalZhbHVlLCB2YWx1ZSk7IFwKKyAgICB9IFwKKyAgfSBcCit9CisKK2ludCBQcm9jZXNzU3lzdGVtUHJvcGVydGllcyhKTklFbnYgKmVudikKK3sKKyAgamNsYXNzIGNsczsKKyAgam1ldGhvZElEIG1pZDsKKyAganN0cmluZyBqTmFtZSwgalZhbHVlOworICBjb25zdCBjaGFyICp2YWx1ZTsKKworICBiYWlsaWYwKGNscyA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgImphdmEvbGFuZy9TeXN0ZW0iKSk7CisgIGJhaWxpZjAobWlkID0gKCplbnYpLT5HZXRTdGF0aWNNZXRob2RJRChlbnYsIGNscywgImdldFByb3BlcnR5IiwKKyAgICAiKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiKSk7CisKKyAgcHJvcDJlbnYoInR1cmJvanBlZy5vcHRpbWl6ZSIsICJUSl9PUFRJTUlaRSIpOworICBwcm9wMmVudigidHVyYm9qcGVnLmFyaXRobWV0aWMiLCAiVEpfQVJJVEhNRVRJQyIpOworICBwcm9wMmVudigidHVyYm9qcGVnLnJlc3RhcnQiLCAiVEpfUkVTVEFSVCIpOworICBwcm9wMmVudigidHVyYm9qcGVnLnByb2dyZXNzaXZlIiwgIlRKX1BST0dSRVNTSVZFIik7CisgIHJldHVybiAwOworCitiYWlsb3V0OgorICByZXR1cm4gLTE7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEo6OmJ1ZlNpemUoKSAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX2J1ZlNpemUKKyAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xzLCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgamludCBqcGVnU3Vic2FtcCkKK3sKKyAgamludCByZXR2YWwgPSAoamludCl0akJ1ZlNpemUod2lkdGgsIGhlaWdodCwganBlZ1N1YnNhbXApOworCisgIGlmIChyZXR2YWwgPT0gLTEpIF90aHJvd2FyZyh0akdldEVycm9yU3RyKCkpOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCisvKiBUdXJib0pQRUcgMS40Lng6IFRKOjpidWZTaXplWVVWKCkgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9idWZTaXplWVVWX19JSUlJCisgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywgamludCB3aWR0aCwgamludCBwYWQsIGppbnQgaGVpZ2h0LCBqaW50IHN1YnNhbXApCit7CisgIGppbnQgcmV0dmFsID0gKGppbnQpdGpCdWZTaXplWVVWMih3aWR0aCwgcGFkLCBoZWlnaHQsIHN1YnNhbXApOworCisgIGlmIChyZXR2YWwgPT0gLTEpIF90aHJvd2FyZyh0akdldEVycm9yU3RyKCkpOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKOjpidWZTaXplWVVWKCkgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9idWZTaXplWVVWX19JSUkKKyAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xzLCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgamludCBzdWJzYW1wKQoreworICByZXR1cm4gSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9idWZTaXplWVVWX19JSUlJKGVudiwgY2xzLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcCk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjQueDogVEo6OnBsYW5lU2l6ZVlVVigpICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfcGxhbmVTaXplWVVWX19JSUlJSQorICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbHMsIGppbnQgY29tcG9uZW50SUQsIGppbnQgd2lkdGgsIGppbnQgc3RyaWRlLAorICAgamludCBoZWlnaHQsIGppbnQgc3Vic2FtcCkKK3sKKyAgamludCByZXR2YWwgPSAoamludCl0alBsYW5lU2l6ZVlVVihjb21wb25lbnRJRCwgd2lkdGgsIHN0cmlkZSwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXApOworCisgIGlmIChyZXR2YWwgPT0gLTEpIF90aHJvd2FyZyh0akdldEVycm9yU3RyKCkpOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCisvKiBUdXJib0pQRUcgMS40Lng6IFRKOjpwbGFuZVdpZHRoKCkgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9wbGFuZVdpZHRoX19JSUkKKyAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xzLCBqaW50IGNvbXBvbmVudElELCBqaW50IHdpZHRoLCBqaW50IHN1YnNhbXApCit7CisgIGppbnQgcmV0dmFsID0gKGppbnQpdGpQbGFuZVdpZHRoKGNvbXBvbmVudElELCB3aWR0aCwgc3Vic2FtcCk7CisKKyAgaWYgKHJldHZhbCA9PSAtMSkgX3Rocm93YXJnKHRqR2V0RXJyb3JTdHIoKSk7CisKK2JhaWxvdXQ6CisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjQueDogVEo6OnBsYW5lSGVpZ2h0KCkgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9wbGFuZUhlaWdodF9fSUlJCisgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywgamludCBjb21wb25lbnRJRCwgamludCBoZWlnaHQsIGppbnQgc3Vic2FtcCkKK3sKKyAgamludCByZXR2YWwgPSAoamludCl0alBsYW5lSGVpZ2h0KGNvbXBvbmVudElELCBoZWlnaHQsIHN1YnNhbXApOworCisgIGlmIChyZXR2YWwgPT0gLTEpIF90aHJvd2FyZyh0akdldEVycm9yU3RyKCkpOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6aW5pdCgpICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2luaXQKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaikKK3sKKyAgamNsYXNzIGNsczsKKyAgamZpZWxkSUQgZmlkOworICB0amhhbmRsZSBoYW5kbGU7CisKKyAgaWYgKChoYW5kbGUgPSB0akluaXRDb21wcmVzcygpKSA9PSBOVUxMKQorICAgIF90aHJvdyh0akdldEVycm9yU3RyKCksICJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkV4Y2VwdGlvbiIpOworCisgIGJhaWxpZjAoY2xzID0gKCplbnYpLT5HZXRPYmplY3RDbGFzcyhlbnYsIG9iaikpOworICBiYWlsaWYwKGZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNscywgImhhbmRsZSIsICJKIikpOworICAoKmVudiktPlNldExvbmdGaWVsZChlbnYsIG9iaiwgZmlkLCAoc2l6ZV90KWhhbmRsZSk7CisKK2JhaWxvdXQ6CisgIHJldHVybjsKK30KKworc3RhdGljIGppbnQgVEpDb21wcmVzc29yX2NvbXByZXNzCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGphcnJheSBzcmMsIGppbnQgc3JjRWxlbWVudFNpemUsIGppbnQgeCwgamludCB5LAorICAgamludCB3aWR0aCwgamludCBwaXRjaCwgamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LAorICAgamludCBqcGVnU3Vic2FtcCwgamludCBqcGVnUXVhbCwgamludCBmbGFncykKK3sKKyAgdGpoYW5kbGUgaGFuZGxlID0gMDsKKyAgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSA9IDA7CisgIGpzaXplIGFycmF5U2l6ZSA9IDAsIGFjdHVhbFBpdGNoOworICB1bnNpZ25lZCBjaGFyICpzcmNCdWYgPSBOVUxMLCAqanBlZ0J1ZiA9IE5VTEw7CisKKyAgZ2V0aGFuZGxlKCk7CisKKyAgaWYgKHBmIDwgMCB8fCBwZiA+PSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiB8fCB3aWR0aCA8IDEgfHwKKyAgICAgIGhlaWdodCA8IDEgfHwgcGl0Y2ggPCAwKQorICAgIF90aHJvd2FyZygiSW52YWxpZCBhcmd1bWVudCBpbiBjb21wcmVzcygpIik7CisgIGlmIChvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiAhPSBUSl9OVU1QRikKKyAgICBfdGhyb3dhcmcoIk1pc21hdGNoIGJldHdlZW4gSmF2YSBhbmQgQyBBUEkiKTsKKworICBhY3R1YWxQaXRjaCA9IChwaXRjaCA9PSAwKSA/IHdpZHRoICogdGpQaXhlbFNpemVbcGZdIDogcGl0Y2g7CisgIGFycmF5U2l6ZSA9ICh5ICsgaGVpZ2h0IC0gMSkgKiBhY3R1YWxQaXRjaCArICh4ICsgd2lkdGgpICogdGpQaXhlbFNpemVbcGZdOworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHNyYykgKiBzcmNFbGVtZW50U2l6ZSA8IGFycmF5U2l6ZSkKKyAgICBfdGhyb3dhcmcoIlNvdXJjZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOworICBqcGVnU2l6ZSA9IHRqQnVmU2l6ZSh3aWR0aCwgaGVpZ2h0LCBqcGVnU3Vic2FtcCk7CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgZHN0KSA8IChqc2l6ZSlqcGVnU2l6ZSkKKyAgICBfdGhyb3dhcmcoIkRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisKKyAgYmFpbGlmMChzcmNCdWYgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIDApKTsKKyAgYmFpbGlmMChqcGVnQnVmID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCAwKSk7CisKKyAgaWYgKFByb2Nlc3NTeXN0ZW1Qcm9wZXJ0aWVzKGVudikgPCAwKSBnb3RvIGJhaWxvdXQ7CisKKyAgaWYgKHRqQ29tcHJlc3MyKGhhbmRsZSwgJnNyY0J1Zlt5ICogYWN0dWFsUGl0Y2ggKyB4ICogdGpQaXhlbFNpemVbcGZdXSwKKyAgICAgICAgICAgICAgICAgIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwgJmpwZWdCdWYsICZqcGVnU2l6ZSwganBlZ1N1YnNhbXAsCisgICAgICAgICAgICAgICAgICBqcGVnUXVhbCwgZmxhZ3MgfCBUSkZMQUdfTk9SRUFMTE9DKSA9PSAtMSkKKyAgICBfdGhyb3d0aigpOworCitiYWlsb3V0OgorICBpZiAoanBlZ0J1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwganBlZ0J1ZiwgMCk7CisgIGlmIChzcmNCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIHNyY0J1ZiwgMCk7CisgIHJldHVybiAoamludClqcGVnU2l6ZTsKK30KKworLyogVHVyYm9KUEVHIDEuMy54OiBUSkNvbXByZXNzb3I6OmNvbXByZXNzKCkgYnl0ZSBzb3VyY2UgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NfX18zQklJSUlJSV8zQklJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsCisgICBqaW50IHBpdGNoLCBqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQganBlZ1N1YnNhbXAsCisgICBqaW50IGpwZWdRdWFsLCBqaW50IGZsYWdzKQoreworICByZXR1cm4gVEpDb21wcmVzc29yX2NvbXByZXNzKGVudiwgb2JqLCBzcmMsIDEsIHgsIHksIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmLCBkc3QsIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MpOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6Y29tcHJlc3MoKSBieXRlIHNvdXJjZSAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNCSUlJSV8zQklJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCB3aWR0aCwgamludCBwaXRjaCwKKyAgIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqYnl0ZUFycmF5IGRzdCwgamludCBqcGVnU3Vic2FtcCwgamludCBqcGVnUXVhbCwKKyAgIGppbnQgZmxhZ3MpCit7CisgIHJldHVybiBUSkNvbXByZXNzb3JfY29tcHJlc3MoZW52LCBvYmosIHNyYywgMSwgMCwgMCwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGYsIGRzdCwganBlZ1N1YnNhbXAsIGpwZWdRdWFsLCBmbGFncyk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjMueDogVEpDb21wcmVzc29yOjpjb21wcmVzcygpIGludCBzb3VyY2UgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NfX18zSUlJSUlJSV8zQklJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqaW50QXJyYXkgc3JjLCBqaW50IHgsIGppbnQgeSwgamludCB3aWR0aCwKKyAgIGppbnQgc3RyaWRlLCBqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQganBlZ1N1YnNhbXAsCisgICBqaW50IGpwZWdRdWFsLCBqaW50IGZsYWdzKQoreworICBpZiAocGYgPCAwIHx8IHBmID49IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGKQorICAgIF90aHJvd2FyZygiSW52YWxpZCBhcmd1bWVudCBpbiBjb21wcmVzcygpIik7CisgIGlmICh0alBpeGVsU2l6ZVtwZl0gIT0gc2l6ZW9mKGppbnQpKQorICAgIF90aHJvd2FyZygiUGl4ZWwgZm9ybWF0IG11c3QgYmUgMzItYml0IHdoZW4gY29tcHJlc3NpbmcgZnJvbSBhbiBpbnRlZ2VyIGJ1ZmZlci4iKTsKKworICByZXR1cm4gVEpDb21wcmVzc29yX2NvbXByZXNzKGVudiwgb2JqLCBzcmMsIHNpemVvZihqaW50KSwgeCwgeSwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlICogc2l6ZW9mKGppbnQpLCBoZWlnaHQsIHBmLCBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ1N1YnNhbXAsIGpwZWdRdWFsLCBmbGFncyk7CisKK2JhaWxvdXQ6CisgIHJldHVybiAwOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6Y29tcHJlc3MoKSBpbnQgc291cmNlICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0lJSUlJXzNCSUlJCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGppbnRBcnJheSBzcmMsIGppbnQgd2lkdGgsIGppbnQgc3RyaWRlLAorICAgamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IGpwZWdTdWJzYW1wLCBqaW50IGpwZWdRdWFsLAorICAgamludCBmbGFncykKK3sKKyAgaWYgKHBmIDwgMCB8fCBwZiA+PSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRikKKyAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gY29tcHJlc3MoKSIpOworICBpZiAodGpQaXhlbFNpemVbcGZdICE9IHNpemVvZihqaW50KSkKKyAgICBfdGhyb3dhcmcoIlBpeGVsIGZvcm1hdCBtdXN0IGJlIDMyLWJpdCB3aGVuIGNvbXByZXNzaW5nIGZyb20gYW4gaW50ZWdlciBidWZmZXIuIik7CisKKyAgcmV0dXJuIFRKQ29tcHJlc3Nvcl9jb21wcmVzcyhlbnYsIG9iaiwgc3JjLCBzaXplb2YoamludCksIDAsIDAsIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSAqIHNpemVvZihqaW50KSwgaGVpZ2h0LCBwZiwgZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm4gMDsKK30KKworLyogVHVyYm9KUEVHIDEuNC54OiBUSkNvbXByZXNzb3I6OmNvbXByZXNzRnJvbVlVVigpICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzRnJvbVlVVl9fXzNfM0JfM0lJXzNJSUlfM0JJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0QXJyYXkgc3Jjb2JqcywgamludEFycmF5IGpTcmNPZmZzZXRzLAorICAgamludCB3aWR0aCwgamludEFycmF5IGpTcmNTdHJpZGVzLCBqaW50IGhlaWdodCwgamludCBzdWJzYW1wLAorICAgamJ5dGVBcnJheSBkc3QsIGppbnQganBlZ1F1YWwsIGppbnQgZmxhZ3MpCit7CisgIHRqaGFuZGxlIGhhbmRsZSA9IDA7CisgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUgPSAwOworICBqYnl0ZUFycmF5IGpTcmNQbGFuZXNbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjUGxhbmVzWzNdOworICB1bnNpZ25lZCBjaGFyICpqcGVnQnVmID0gTlVMTDsKKyAgaW50ICpzcmNPZmZzZXRzID0gTlVMTCwgKnNyY1N0cmlkZXMgPSBOVUxMOworICBpbnQgbmMgPSAoc3Vic2FtcCA9PSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9TQU1QX0dSQVkgPyAxIDogMyksIGk7CisKKyAgZ2V0aGFuZGxlKCk7CisKKyAgaWYgKHN1YnNhbXAgPCAwIHx8IHN1YnNhbXAgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNU0FNUCkKKyAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gY29tcHJlc3NGcm9tWVVWKCkiKTsKKyAgaWYgKG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVNBTVAgIT0gVEpfTlVNU0FNUCkKKyAgICBfdGhyb3dhcmcoIk1pc21hdGNoIGJldHdlZW4gSmF2YSBhbmQgQyBBUEkiKTsKKworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHNyY29ianMpIDwgbmMpCisgICAgX3Rocm93YXJnKCJQbGFuZXMgYXJyYXkgaXMgdG9vIHNtYWxsIGZvciB0aGUgc3Vic2FtcGxpbmcgdHlwZSIpOworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGpTcmNPZmZzZXRzKSA8IG5jKQorICAgIF90aHJvd2FyZygiT2Zmc2V0cyBhcnJheSBpcyB0b28gc21hbGwgZm9yIHRoZSBzdWJzYW1wbGluZyB0eXBlIik7CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgalNyY1N0cmlkZXMpIDwgbmMpCisgICAgX3Rocm93YXJnKCJTdHJpZGVzIGFycmF5IGlzIHRvbyBzbWFsbCBmb3IgdGhlIHN1YnNhbXBsaW5nIHR5cGUiKTsKKworICBqcGVnU2l6ZSA9IHRqQnVmU2l6ZSh3aWR0aCwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBkc3QpIDwgKGpzaXplKWpwZWdTaXplKQorICAgIF90aHJvd2FyZygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICBiYWlsaWYwKHNyY09mZnNldHMgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjT2Zmc2V0cywgMCkpOworICBiYWlsaWYwKHNyY1N0cmlkZXMgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjU3RyaWRlcywgMCkpOworICBmb3IgKGkgPSAwOyBpIDwgbmM7IGkrKykgeworICAgIGludCBwbGFuZVNpemUgPSB0alBsYW5lU2l6ZVlVVihpLCB3aWR0aCwgc3JjU3RyaWRlc1tpXSwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgICBpbnQgcHcgPSB0alBsYW5lV2lkdGgoaSwgd2lkdGgsIHN1YnNhbXApOworCisgICAgaWYgKHBsYW5lU2l6ZSA8IDAgfHwgcHcgPCAwKQorICAgICAgX3Rocm93YXJnKHRqR2V0RXJyb3JTdHIoKSk7CisKKyAgICBpZiAoc3JjT2Zmc2V0c1tpXSA8IDApCisgICAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gY29tcHJlc3NGcm9tWVVWKCkiKTsKKyAgICBpZiAoc3JjU3RyaWRlc1tpXSA8IDAgJiYgc3JjT2Zmc2V0c1tpXSAtIHBsYW5lU2l6ZSArIHB3IDwgMCkKKyAgICAgIF90aHJvd2FyZygiTmVnYXRpdmUgcGxhbmUgc3RyaWRlIHdvdWxkIGNhdXNlIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBiZWxvdyBwbGFuZSBib3VuZGFyeSIpOworCisgICAgYmFpbGlmMChqU3JjUGxhbmVzW2ldID0gKCplbnYpLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoZW52LCBzcmNvYmpzLCBpKSk7CisgICAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqU3JjUGxhbmVzW2ldKSA8IHNyY09mZnNldHNbaV0gKyBwbGFuZVNpemUpCisgICAgICBfdGhyb3dhcmcoIlNvdXJjZSBwbGFuZSBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisKKyAgICBiYWlsaWYwKHNyY1BsYW5lc1tpXSA9CisgICAgICAgICAgICAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjUGxhbmVzW2ldLCAwKSk7CisgICAgc3JjUGxhbmVzW2ldID0gJnNyY1BsYW5lc1tpXVtzcmNPZmZzZXRzW2ldXTsKKyAgfQorICBiYWlsaWYwKGpwZWdCdWYgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIDApKTsKKworICBpZiAoUHJvY2Vzc1N5c3RlbVByb3BlcnRpZXMoZW52KSA8IDApIGdvdG8gYmFpbG91dDsKKworICBpZiAodGpDb21wcmVzc0Zyb21ZVVZQbGFuZXMoaGFuZGxlLCBzcmNQbGFuZXMsIHdpZHRoLCBzcmNTdHJpZGVzLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wLCAmanBlZ0J1ZiwgJmpwZWdTaXplLCBqcGVnUXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgVEpGTEFHX05PUkVBTExPQykgPT0gLTEpCisgICAgX3Rocm93dGooKTsKKworYmFpbG91dDoKKyAgaWYgKGpwZWdCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGpwZWdCdWYsIDApOworICBmb3IgKGkgPSAwOyBpIDwgbmM7IGkrKykgeworICAgIGlmIChzcmNQbGFuZXNbaV0gJiYgalNyY1BsYW5lc1tpXSkKKyAgICAgICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjUGxhbmVzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNyY1BsYW5lc1tpXSwgMCk7CisgIH0KKyAgaWYgKHNyY1N0cmlkZXMpCisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpTcmNTdHJpZGVzLCBzcmNTdHJpZGVzLCAwKTsKKyAgaWYgKHNyY09mZnNldHMpCisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpTcmNPZmZzZXRzLCBzcmNPZmZzZXRzLCAwKTsKKyAgcmV0dXJuIChqaW50KWpwZWdTaXplOworfQorCitzdGF0aWMgdm9pZCBUSkNvbXByZXNzb3JfZW5jb2RlWVVWCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGphcnJheSBzcmMsIGppbnQgc3JjRWxlbWVudFNpemUsIGppbnQgeCwgamludCB5LAorICAgamludCB3aWR0aCwgamludCBwaXRjaCwgamludCBoZWlnaHQsIGppbnQgcGYsIGpvYmplY3RBcnJheSBkc3RvYmpzLAorICAgamludEFycmF5IGpEc3RPZmZzZXRzLCBqaW50QXJyYXkgakRzdFN0cmlkZXMsIGppbnQgc3Vic2FtcCwgamludCBmbGFncykKK3sKKyAgdGpoYW5kbGUgaGFuZGxlID0gMDsKKyAganNpemUgYXJyYXlTaXplID0gMCwgYWN0dWFsUGl0Y2g7CisgIGpieXRlQXJyYXkgakRzdFBsYW5lc1szXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9OworICB1bnNpZ25lZCBjaGFyICpzcmNCdWYgPSBOVUxMLCAqZHN0UGxhbmVzWzNdOworICBpbnQgKmRzdE9mZnNldHMgPSBOVUxMLCAqZHN0U3RyaWRlcyA9IE5VTEw7CisgIGludCBuYyA9IChzdWJzYW1wID09IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfR1JBWSA/IDEgOiAzKSwgaTsKKworICBnZXRoYW5kbGUoKTsKKworICBpZiAocGYgPCAwIHx8IHBmID49IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIHx8IHdpZHRoIDwgMSB8fAorICAgICAgaGVpZ2h0IDwgMSB8fCBwaXRjaCA8IDAgfHwgc3Vic2FtcCA8IDAgfHwKKyAgICAgIHN1YnNhbXAgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNU0FNUCkKKyAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gZW5jb2RlWVVWKCkiKTsKKyAgaWYgKG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGICE9IFRKX05VTVBGIHx8CisgICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1TQU1QICE9IFRKX05VTVNBTVApCisgICAgX3Rocm93YXJnKCJNaXNtYXRjaCBiZXR3ZWVuIEphdmEgYW5kIEMgQVBJIik7CisKKyAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBkc3RvYmpzKSA8IG5jKQorICAgIF90aHJvd2FyZygiUGxhbmVzIGFycmF5IGlzIHRvbyBzbWFsbCBmb3IgdGhlIHN1YnNhbXBsaW5nIHR5cGUiKTsKKyAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqRHN0T2Zmc2V0cykgPCBuYykKKyAgICBfdGhyb3dhcmcoIk9mZnNldHMgYXJyYXkgaXMgdG9vIHNtYWxsIGZvciB0aGUgc3Vic2FtcGxpbmcgdHlwZSIpOworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGpEc3RTdHJpZGVzKSA8IG5jKQorICAgIF90aHJvd2FyZygiU3RyaWRlcyBhcnJheSBpcyB0b28gc21hbGwgZm9yIHRoZSBzdWJzYW1wbGluZyB0eXBlIik7CisKKyAgYWN0dWFsUGl0Y2ggPSAocGl0Y2ggPT0gMCkgPyB3aWR0aCAqIHRqUGl4ZWxTaXplW3BmXSA6IHBpdGNoOworICBhcnJheVNpemUgPSAoeSArIGhlaWdodCAtIDEpICogYWN0dWFsUGl0Y2ggKyAoeCArIHdpZHRoKSAqIHRqUGl4ZWxTaXplW3BmXTsKKyAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBzcmMpICogc3JjRWxlbWVudFNpemUgPCBhcnJheVNpemUpCisgICAgX3Rocm93YXJnKCJTb3VyY2UgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICBiYWlsaWYwKGRzdE9mZnNldHMgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqRHN0T2Zmc2V0cywgMCkpOworICBiYWlsaWYwKGRzdFN0cmlkZXMgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqRHN0U3RyaWRlcywgMCkpOworICBmb3IgKGkgPSAwOyBpIDwgbmM7IGkrKykgeworICAgIGludCBwbGFuZVNpemUgPSB0alBsYW5lU2l6ZVlVVihpLCB3aWR0aCwgZHN0U3RyaWRlc1tpXSwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgICBpbnQgcHcgPSB0alBsYW5lV2lkdGgoaSwgd2lkdGgsIHN1YnNhbXApOworCisgICAgaWYgKHBsYW5lU2l6ZSA8IDAgfHwgcHcgPCAwKQorICAgICAgX3Rocm93YXJnKHRqR2V0RXJyb3JTdHIoKSk7CisKKyAgICBpZiAoZHN0T2Zmc2V0c1tpXSA8IDApCisgICAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gZW5jb2RlWVVWKCkiKTsKKyAgICBpZiAoZHN0U3RyaWRlc1tpXSA8IDAgJiYgZHN0T2Zmc2V0c1tpXSAtIHBsYW5lU2l6ZSArIHB3IDwgMCkKKyAgICAgIF90aHJvd2FyZygiTmVnYXRpdmUgcGxhbmUgc3RyaWRlIHdvdWxkIGNhdXNlIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBiZWxvdyBwbGFuZSBib3VuZGFyeSIpOworCisgICAgYmFpbGlmMChqRHN0UGxhbmVzW2ldID0gKCplbnYpLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoZW52LCBkc3RvYmpzLCBpKSk7CisgICAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqRHN0UGxhbmVzW2ldKSA8IGRzdE9mZnNldHNbaV0gKyBwbGFuZVNpemUpCisgICAgICBfdGhyb3dhcmcoIkRlc3RpbmF0aW9uIHBsYW5lIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICAgIGJhaWxpZjAoZHN0UGxhbmVzW2ldID0KKyAgICAgICAgICAgICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpEc3RQbGFuZXNbaV0sIDApKTsKKyAgICBkc3RQbGFuZXNbaV0gPSAmZHN0UGxhbmVzW2ldW2RzdE9mZnNldHNbaV1dOworICB9CisgIGJhaWxpZjAoc3JjQnVmID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCAwKSk7CisKKyAgaWYgKHRqRW5jb2RlWVVWUGxhbmVzKGhhbmRsZSwgJnNyY0J1Zlt5ICogYWN0dWFsUGl0Y2ggKyB4ICogdGpQaXhlbFNpemVbcGZdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwgZHN0UGxhbmVzLCBkc3RTdHJpZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcCwgZmxhZ3MpID09IC0xKQorICAgIF90aHJvd3RqKCk7CisKK2JhaWxvdXQ6CisgIGlmIChzcmNCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIHNyY0J1ZiwgMCk7CisgIGZvciAoaSA9IDA7IGkgPCBuYzsgaSsrKSB7CisgICAgaWYgKGRzdFBsYW5lc1tpXSAmJiBqRHN0UGxhbmVzW2ldKQorICAgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpEc3RQbGFuZXNbaV0sIGRzdFBsYW5lc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgIH0KKyAgaWYgKGRzdFN0cmlkZXMpCisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpEc3RTdHJpZGVzLCBkc3RTdHJpZGVzLCAwKTsKKyAgaWYgKGRzdE9mZnNldHMpCisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpEc3RPZmZzZXRzLCBkc3RPZmZzZXRzLCAwKTsKK30KKworLyogVHVyYm9KUEVHIDEuNC54OiBUSkNvbXByZXNzb3I6OmVuY29kZVlVVigpIGJ5dGUgc291cmNlICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2VuY29kZVlVVl9fXzNCSUlJSUlJXzNfM0JfM0lfM0lJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsCisgICBqaW50IHBpdGNoLCBqaW50IGhlaWdodCwgamludCBwZiwgam9iamVjdEFycmF5IGRzdG9ianMsCisgICBqaW50QXJyYXkgakRzdE9mZnNldHMsIGppbnRBcnJheSBqRHN0U3RyaWRlcywgamludCBzdWJzYW1wLCBqaW50IGZsYWdzKQoreworICBUSkNvbXByZXNzb3JfZW5jb2RlWVVWKGVudiwgb2JqLCBzcmMsIDEsIHgsIHksIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkc3RvYmpzLCBqRHN0T2Zmc2V0cywgakRzdFN0cmlkZXMsIHN1YnNhbXAsIGZsYWdzKTsKK30KKworLyogVHVyYm9KUEVHIDEuNC54OiBUSkNvbXByZXNzb3I6OmVuY29kZVlVVigpIGludCBzb3VyY2UgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZW5jb2RlWVVWX19fM0lJSUlJSUlfM18zQl8zSV8zSUlJCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGppbnRBcnJheSBzcmMsIGppbnQgeCwgamludCB5LCBqaW50IHdpZHRoLAorICAgamludCBzdHJpZGUsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqb2JqZWN0QXJyYXkgZHN0b2JqcywKKyAgIGppbnRBcnJheSBqRHN0T2Zmc2V0cywgamludEFycmF5IGpEc3RTdHJpZGVzLCBqaW50IHN1YnNhbXAsIGppbnQgZmxhZ3MpCit7CisgIGlmIChwZiA8IDAgfHwgcGYgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCisgICAgX3Rocm93YXJnKCJJbnZhbGlkIGFyZ3VtZW50IGluIGVuY29kZVlVVigpIik7CisgIGlmICh0alBpeGVsU2l6ZVtwZl0gIT0gc2l6ZW9mKGppbnQpKQorICAgIF90aHJvd2FyZygiUGl4ZWwgZm9ybWF0IG11c3QgYmUgMzItYml0IHdoZW4gZW5jb2RpbmcgZnJvbSBhbiBpbnRlZ2VyIGJ1ZmZlci4iKTsKKworICBUSkNvbXByZXNzb3JfZW5jb2RlWVVWKGVudiwgb2JqLCBzcmMsIHNpemVvZihqaW50KSwgeCwgeSwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlICogc2l6ZW9mKGppbnQpLCBoZWlnaHQsIHBmLCBkc3RvYmpzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGpEc3RPZmZzZXRzLCBqRHN0U3RyaWRlcywgc3Vic2FtcCwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm47Cit9CisKK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgVEpDb21wcmVzc29yX2VuY29kZVlVVl8xMgorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYXJyYXkgc3JjLCBqaW50IHNyY0VsZW1lbnRTaXplLCBqaW50IHdpZHRoLAorICAgamludCBwaXRjaCwgamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IHN1YnNhbXAsIGppbnQgZmxhZ3MpCit7CisgIHRqaGFuZGxlIGhhbmRsZSA9IDA7CisgIGpzaXplIGFycmF5U2l6ZSA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiA9IE5VTEwsICpkc3RCdWYgPSBOVUxMOworCisgIGdldGhhbmRsZSgpOworCisgIGlmIChwZiA8IDAgfHwgcGYgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYgfHwgd2lkdGggPCAxIHx8CisgICAgICBoZWlnaHQgPCAxIHx8IHBpdGNoIDwgMCkKKyAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gZW5jb2RlWVVWKCkiKTsKKyAgaWYgKG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGICE9IFRKX05VTVBGKQorICAgIF90aHJvd2FyZygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOworCisgIGFycmF5U2l6ZSA9IChwaXRjaCA9PSAwKSA/IHdpZHRoICogdGpQaXhlbFNpemVbcGZdICogaGVpZ2h0IDogcGl0Y2ggKiBoZWlnaHQ7CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKSAqIHNyY0VsZW1lbnRTaXplIDwgYXJyYXlTaXplKQorICAgIF90aHJvd2FyZygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgZHN0KSA8CisgICAgICAoanNpemUpdGpCdWZTaXplWVVWKHdpZHRoLCBoZWlnaHQsIHN1YnNhbXApKQorICAgIF90aHJvd2FyZygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICBiYWlsaWYwKHNyY0J1ZiA9ICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOworICBiYWlsaWYwKGRzdEJ1ZiA9ICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgMCkpOworCisgIGlmICh0akVuY29kZVlVVjIoaGFuZGxlLCBzcmNCdWYsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwgZHN0QnVmLCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgIGZsYWdzKSA9PSAtMSkKKyAgICBfdGhyb3d0aigpOworCitiYWlsb3V0OgorICBpZiAoZHN0QnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOworICBpZiAoc3JjQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBzcmNCdWYsIDApOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6ZW5jb2RlWVVWKCkgYnl0ZSBzb3VyY2UgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZW5jb2RlWVVWX19fM0JJSUlJXzNCSUkKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsCisgICBqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQgc3Vic2FtcCwgamludCBmbGFncykKK3sKKyAgVEpDb21wcmVzc29yX2VuY29kZVlVVl8xMihlbnYsIG9iaiwgc3JjLCAxLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGYsIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wLCBmbGFncyk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpDb21wcmVzc29yOjplbmNvZGVZVVYoKSBpbnQgc291cmNlICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2VuY29kZVlVVl9fXzNJSUlJSV8zQklJCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGppbnRBcnJheSBzcmMsIGppbnQgd2lkdGgsIGppbnQgc3RyaWRlLAorICAgamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IHN1YnNhbXAsIGppbnQgZmxhZ3MpCit7CisgIGlmIChwZiA8IDAgfHwgcGYgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCisgICAgX3Rocm93YXJnKCJJbnZhbGlkIGFyZ3VtZW50IGluIGVuY29kZVlVVigpIik7CisgIGlmICh0alBpeGVsU2l6ZVtwZl0gIT0gc2l6ZW9mKGppbnQpKQorICAgIF90aHJvd2FyZygiUGl4ZWwgZm9ybWF0IG11c3QgYmUgMzItYml0IHdoZW4gZW5jb2RpbmcgZnJvbSBhbiBpbnRlZ2VyIGJ1ZmZlci4iKTsKKworICBUSkNvbXByZXNzb3JfZW5jb2RlWVVWXzEyKGVudiwgb2JqLCBzcmMsIHNpemVvZihqaW50KSwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlICogc2l6ZW9mKGppbnQpLCBoZWlnaHQsIHBmLCBkc3QsIHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm47Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpDb21wcmVzc29yOjpkZXN0cm95KCkgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZGVzdHJveQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqKQoreworICB0amhhbmRsZSBoYW5kbGUgPSAwOworCisgIGdldGhhbmRsZSgpOworCisgIGlmICh0akRlc3Ryb3koaGFuZGxlKSA9PSAtMSkgX3Rocm93dGooKTsKKyAgKCplbnYpLT5TZXRMb25nRmllbGQoZW52LCBvYmosIF9maWQsIDApOworCitiYWlsb3V0OgorICByZXR1cm47Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmluaXQoKSAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2luaXQKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaikKK3sKKyAgamNsYXNzIGNsczsKKyAgamZpZWxkSUQgZmlkOworICB0amhhbmRsZSBoYW5kbGU7CisKKyAgaWYgKChoYW5kbGUgPSB0akluaXREZWNvbXByZXNzKCkpID09IE5VTEwpCisgICAgX3Rocm93KHRqR2V0RXJyb3JTdHIoKSwgIm9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uIik7CisKKyAgYmFpbGlmMChjbHMgPSAoKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgb2JqKSk7CisgIGJhaWxpZjAoZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgY2xzLCAiaGFuZGxlIiwgIkoiKSk7CisgICgqZW52KS0+U2V0TG9uZ0ZpZWxkKGVudiwgb2JqLCBmaWQsIChzaXplX3QpaGFuZGxlKTsKKworYmFpbG91dDoKKyAgcmV0dXJuOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKRGVjb21wcmVzc29yOjpnZXRTY2FsaW5nRmFjdG9ycygpICovCitKTklFWFBPUlQgam9iamVjdEFycmF5IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9nZXRTY2FsaW5nRmFjdG9ycworICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbHMpCit7CisgIGpjbGFzcyBzZmNscyA9IE5VTEw7CisgIGpmaWVsZElEIGZpZCA9IDA7CisgIHRqc2NhbGluZ2ZhY3RvciAqc2YgPSBOVUxMOworICBpbnQgbiA9IDAsIGk7CisgIGpvYmplY3Qgc2ZvYmogPSBOVUxMOworICBqb2JqZWN0QXJyYXkgc2ZqYXZhID0gTlVMTDsKKworICBpZiAoKHNmID0gdGpHZXRTY2FsaW5nRmFjdG9ycygmbikpID09IE5VTEwgfHwgbiA9PSAwKQorICAgIF90aHJvd2FyZyh0akdldEVycm9yU3RyKCkpOworCisgIGJhaWxpZjAoc2ZjbHMgPSAoKmVudiktPkZpbmRDbGFzcyhlbnYsCisgICAgIm9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3RvciIpKTsKKyAgYmFpbGlmMChzZmphdmEgPSAoam9iamVjdEFycmF5KSgqZW52KS0+TmV3T2JqZWN0QXJyYXkoZW52LCBuLCBzZmNscywgMCkpOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBiYWlsaWYwKHNmb2JqID0gKCplbnYpLT5BbGxvY09iamVjdChlbnYsIHNmY2xzKSk7CisgICAgYmFpbGlmMChmaWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBzZmNscywgIm51bSIsICJJIikpOworICAgICgqZW52KS0+U2V0SW50RmllbGQoZW52LCBzZm9iaiwgZmlkLCBzZltpXS5udW0pOworICAgIGJhaWxpZjAoZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgc2ZjbHMsICJkZW5vbSIsICJJIikpOworICAgICgqZW52KS0+U2V0SW50RmllbGQoZW52LCBzZm9iaiwgZmlkLCBzZltpXS5kZW5vbSk7CisgICAgKCplbnYpLT5TZXRPYmplY3RBcnJheUVsZW1lbnQoZW52LCBzZmphdmEsIGksIHNmb2JqKTsKKyAgfQorCitiYWlsb3V0OgorICByZXR1cm4gc2ZqYXZhOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKRGVjb21wcmVzc29yOjpkZWNvbXByZXNzSGVhZGVyKCkgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzSGVhZGVyCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IGpwZWdTaXplKQoreworICB0amhhbmRsZSBoYW5kbGUgPSAwOworICB1bnNpZ25lZCBjaGFyICpqcGVnQnVmID0gTlVMTDsKKyAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwganBlZ1N1YnNhbXAgPSAtMSwganBlZ0NvbG9yc3BhY2UgPSAtMTsKKworICBnZXRoYW5kbGUoKTsKKworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHNyYykgPCBqcGVnU2l6ZSkKKyAgICBfdGhyb3dhcmcoIlNvdXJjZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOworCisgIGJhaWxpZjAoanBlZ0J1ZiA9ICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOworCisgIGlmICh0akRlY29tcHJlc3NIZWFkZXIzKGhhbmRsZSwganBlZ0J1ZiwgKHVuc2lnbmVkIGxvbmcpanBlZ1NpemUsICZ3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhlaWdodCwgJmpwZWdTdWJzYW1wLCAmanBlZ0NvbG9yc3BhY2UpID09IC0xKQorICAgIF90aHJvd3RqKCk7CisKKyAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywganBlZ0J1ZiwgMCk7CisgIGpwZWdCdWYgPSBOVUxMOworCisgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJqcGVnU3Vic2FtcCIsICJJIikpOworICAoKmVudiktPlNldEludEZpZWxkKGVudiwgb2JqLCBfZmlkLCBqcGVnU3Vic2FtcCk7CisgIGlmICgoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJqcGVnQ29sb3JzcGFjZSIsICJJIikpID09IDApCisgICAgKCplbnYpLT5FeGNlcHRpb25DbGVhcihlbnYpOworICBlbHNlCisgICAgKCplbnYpLT5TZXRJbnRGaWVsZChlbnYsIG9iaiwgX2ZpZCwganBlZ0NvbG9yc3BhY2UpOworICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAianBlZ1dpZHRoIiwgIkkiKSk7CisgICgqZW52KS0+U2V0SW50RmllbGQoZW52LCBvYmosIF9maWQsIHdpZHRoKTsKKyAgYmFpbGlmMChfZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgX2NscywgImpwZWdIZWlnaHQiLCAiSSIpKTsKKyAgKCplbnYpLT5TZXRJbnRGaWVsZChlbnYsIG9iaiwgX2ZpZCwgaGVpZ2h0KTsKKworYmFpbG91dDoKKyAgaWYgKGpwZWdCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIGpwZWdCdWYsIDApOworfQorCitzdGF0aWMgdm9pZCBUSkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IGpwZWdTaXplLCBqYXJyYXkgZHN0LAorICAgamludCBkc3RFbGVtZW50U2l6ZSwgamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LAorICAgamludCBwZiwgamludCBmbGFncykKK3sKKyAgdGpoYW5kbGUgaGFuZGxlID0gMDsKKyAganNpemUgYXJyYXlTaXplID0gMCwgYWN0dWFsUGl0Y2g7CisgIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYgPSBOVUxMLCAqZHN0QnVmID0gTlVMTDsKKworICBnZXRoYW5kbGUoKTsKKworICBpZiAocGYgPCAwIHx8IHBmID49IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGKQorICAgIF90aHJvd2FyZygiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzKCkiKTsKKyAgaWYgKG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGICE9IFRKX05VTVBGKQorICAgIF90aHJvd2FyZygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOworCisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKSA8IGpwZWdTaXplKQorICAgIF90aHJvd2FyZygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisgIGFjdHVhbFBpdGNoID0gKHBpdGNoID09IDApID8gd2lkdGggKiB0alBpeGVsU2l6ZVtwZl0gOiBwaXRjaDsKKyAgYXJyYXlTaXplID0gKHkgKyBoZWlnaHQgLSAxKSAqIGFjdHVhbFBpdGNoICsgKHggKyB3aWR0aCkgKiB0alBpeGVsU2l6ZVtwZl07CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgZHN0KSAqIGRzdEVsZW1lbnRTaXplIDwgYXJyYXlTaXplKQorICAgIF90aHJvd2FyZygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICBiYWlsaWYwKGpwZWdCdWYgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIDApKTsKKyAgYmFpbGlmMChkc3RCdWYgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIDApKTsKKworICBpZiAodGpEZWNvbXByZXNzMihoYW5kbGUsIGpwZWdCdWYsICh1bnNpZ25lZCBsb25nKWpwZWdTaXplLAorICAgICAgICAgICAgICAgICAgICAmZHN0QnVmW3kgKiBhY3R1YWxQaXRjaCArIHggKiB0alBpeGVsU2l6ZVtwZl1dLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgcGl0Y2gsIGhlaWdodCwgcGYsIGZsYWdzKSA9PSAtMSkKKyAgICBfdGhyb3d0aigpOworCitiYWlsb3V0OgorICBpZiAoZHN0QnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOworICBpZiAoanBlZ0J1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywganBlZ0J1ZiwgMCk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjMueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3MoKSBieXRlIGRlc3RpbmF0aW9uICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fXzNCSV8zQklJSUlJSUkKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsIGpieXRlQXJyYXkgZHN0LAorICAgamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqaW50IGZsYWdzKQoreworICBUSkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzKGVudiwgb2JqLCBzcmMsIGpwZWdTaXplLCBkc3QsIDEsIHgsIHksIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncyk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3MoKSBieXRlIGRlc3RpbmF0aW9uICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fXzNCSV8zQklJSUlJCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IGpwZWdTaXplLCBqYnl0ZUFycmF5IGRzdCwKKyAgIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqaW50IGZsYWdzKQoreworICBUSkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzKGVudiwgb2JqLCBzcmMsIGpwZWdTaXplLCBkc3QsIDEsIDAsIDAsIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncyk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjMueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3MoKSBpbnQgZGVzdGluYXRpb24gKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUlJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCBqcGVnU2l6ZSwgamludEFycmF5IGRzdCwKKyAgIGppbnQgeCwgamludCB5LCBqaW50IHdpZHRoLCBqaW50IHN0cmlkZSwgamludCBoZWlnaHQsIGppbnQgcGYsIGppbnQgZmxhZ3MpCit7CisgIGlmIChwZiA8IDAgfHwgcGYgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCisgICAgX3Rocm93YXJnKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworICBpZiAodGpQaXhlbFNpemVbcGZdICE9IHNpemVvZihqaW50KSkKKyAgICBfdGhyb3dhcmcoIlBpeGVsIGZvcm1hdCBtdXN0IGJlIDMyLWJpdCB3aGVuIGRlY29tcHJlc3NpbmcgdG8gYW4gaW50ZWdlciBidWZmZXIuIik7CisKKyAgVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhlbnYsIG9iaiwgc3JjLCBqcGVnU2l6ZSwgZHN0LCBzaXplb2YoamludCksIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHN0cmlkZSAqIHNpemVvZihqaW50KSwgaGVpZ2h0LCBwZiwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm47Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3MoKSBpbnQgZGVzdGluYXRpb24gKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUkKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsIGppbnRBcnJheSBkc3QsCisgICBqaW50IHdpZHRoLCBqaW50IHN0cmlkZSwgamludCBoZWlnaHQsIGppbnQgcGYsIGppbnQgZmxhZ3MpCit7CisgIGlmIChwZiA8IDAgfHwgcGYgPj0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCisgICAgX3Rocm93YXJnKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworICBpZiAodGpQaXhlbFNpemVbcGZdICE9IHNpemVvZihqaW50KSkKKyAgICBfdGhyb3dhcmcoIlBpeGVsIGZvcm1hdCBtdXN0IGJlIDMyLWJpdCB3aGVuIGRlY29tcHJlc3NpbmcgdG8gYW4gaW50ZWdlciBidWZmZXIuIik7CisKKyAgVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhlbnYsIG9iaiwgc3JjLCBqcGVnU2l6ZSwgZHN0LCBzaXplb2YoamludCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHN0cmlkZSAqIHNpemVvZihqaW50KSwgaGVpZ2h0LCBwZiwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm47Cit9CisKKy8qIFR1cmJvSlBFRyAxLjQueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3NUb1lVVigpICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc1RvWVVWX19fM0JJXzNfM0JfM0lJXzNJSUkKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsCisgICBqb2JqZWN0QXJyYXkgZHN0b2JqcywgamludEFycmF5IGpEc3RPZmZzZXRzLCBqaW50IGRlc2lyZWRXaWR0aCwKKyAgIGppbnRBcnJheSBqRHN0U3RyaWRlcywgamludCBkZXNpcmVkSGVpZ2h0LCBqaW50IGZsYWdzKQoreworICB0amhhbmRsZSBoYW5kbGUgPSAwOworICBqYnl0ZUFycmF5IGpEc3RQbGFuZXNbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiA9IE5VTEwsICpkc3RQbGFuZXNbM107CisgIGludCAqZHN0T2Zmc2V0cyA9IE5VTEwsICpkc3RTdHJpZGVzID0gTlVMTDsKKyAgaW50IGpwZWdTdWJzYW1wID0gLTEsIGpwZWdXaWR0aCA9IDAsIGpwZWdIZWlnaHQgPSAwOworICBpbnQgbmMgPSAwLCBpLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0LCBuc2YgPSAwOworICB0anNjYWxpbmdmYWN0b3IgKnNmOworCisgIGdldGhhbmRsZSgpOworCisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKSA8IGpwZWdTaXplKQorICAgIF90aHJvd2FyZygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJqcGVnU3Vic2FtcCIsICJJIikpOworICBqcGVnU3Vic2FtcCA9IChpbnQpKCplbnYpLT5HZXRJbnRGaWVsZChlbnYsIG9iaiwgX2ZpZCk7CisgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJqcGVnV2lkdGgiLCAiSSIpKTsKKyAganBlZ1dpZHRoID0gKGludCkoKmVudiktPkdldEludEZpZWxkKGVudiwgb2JqLCBfZmlkKTsKKyAgYmFpbGlmMChfZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgX2NscywgImpwZWdIZWlnaHQiLCAiSSIpKTsKKyAganBlZ0hlaWdodCA9IChpbnQpKCplbnYpLT5HZXRJbnRGaWVsZChlbnYsIG9iaiwgX2ZpZCk7CisKKyAgbmMgPSAoanBlZ1N1YnNhbXAgPT0gb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfU0FNUF9HUkFZID8gMSA6IDMpOworCisgIHdpZHRoID0gZGVzaXJlZFdpZHRoOworICBoZWlnaHQgPSBkZXNpcmVkSGVpZ2h0OworICBpZiAod2lkdGggPT0gMCkgd2lkdGggPSBqcGVnV2lkdGg7CisgIGlmIChoZWlnaHQgPT0gMCkgaGVpZ2h0ID0ganBlZ0hlaWdodDsKKyAgc2YgPSB0akdldFNjYWxpbmdGYWN0b3JzKCZuc2YpOworICBpZiAoIXNmIHx8IG5zZiA8IDEpCisgICAgX3Rocm93YXJnKHRqR2V0RXJyb3JTdHIoKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuc2Y7IGkrKykgeworICAgIHNjYWxlZFdpZHRoID0gVEpTQ0FMRUQoanBlZ1dpZHRoLCBzZltpXSk7CisgICAgc2NhbGVkSGVpZ2h0ID0gVEpTQ0FMRUQoanBlZ0hlaWdodCwgc2ZbaV0pOworICAgIGlmIChzY2FsZWRXaWR0aCA8PSB3aWR0aCAmJiBzY2FsZWRIZWlnaHQgPD0gaGVpZ2h0KQorICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKGkgPj0gbnNmKQorICAgIF90aHJvd2FyZygiQ291bGQgbm90IHNjYWxlIGRvd24gdG8gZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIik7CisKKyAgYmFpbGlmMChkc3RPZmZzZXRzID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgakRzdE9mZnNldHMsIDApKTsKKyAgYmFpbGlmMChkc3RTdHJpZGVzID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgakRzdFN0cmlkZXMsIDApKTsKKyAgZm9yIChpID0gMDsgaSA8IG5jOyBpKyspIHsKKyAgICBpbnQgcGxhbmVTaXplID0gdGpQbGFuZVNpemVZVVYoaSwgc2NhbGVkV2lkdGgsIGRzdFN0cmlkZXNbaV0sIHNjYWxlZEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ1N1YnNhbXApOworICAgIGludCBwdyA9IHRqUGxhbmVXaWR0aChpLCBzY2FsZWRXaWR0aCwganBlZ1N1YnNhbXApOworCisgICAgaWYgKHBsYW5lU2l6ZSA8IDAgfHwgcHcgPCAwKQorICAgICAgX3Rocm93YXJnKHRqR2V0RXJyb3JTdHIoKSk7CisKKyAgICBpZiAoZHN0T2Zmc2V0c1tpXSA8IDApCisgICAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gZGVjb21wcmVzc1RvWVVWKCkiKTsKKyAgICBpZiAoZHN0U3RyaWRlc1tpXSA8IDAgJiYgZHN0T2Zmc2V0c1tpXSAtIHBsYW5lU2l6ZSArIHB3IDwgMCkKKyAgICAgIF90aHJvd2FyZygiTmVnYXRpdmUgcGxhbmUgc3RyaWRlIHdvdWxkIGNhdXNlIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBiZWxvdyBwbGFuZSBib3VuZGFyeSIpOworCisgICAgYmFpbGlmMChqRHN0UGxhbmVzW2ldID0gKCplbnYpLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoZW52LCBkc3RvYmpzLCBpKSk7CisgICAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqRHN0UGxhbmVzW2ldKSA8IGRzdE9mZnNldHNbaV0gKyBwbGFuZVNpemUpCisgICAgICBfdGhyb3dhcmcoIkRlc3RpbmF0aW9uIHBsYW5lIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICAgIGJhaWxpZjAoZHN0UGxhbmVzW2ldID0KKyAgICAgICAgICAgICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpEc3RQbGFuZXNbaV0sIDApKTsKKyAgICBkc3RQbGFuZXNbaV0gPSAmZHN0UGxhbmVzW2ldW2RzdE9mZnNldHNbaV1dOworICB9CisgIGJhaWxpZjAoanBlZ0J1ZiA9ICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOworCisgIGlmICh0akRlY29tcHJlc3NUb1lVVlBsYW5lcyhoYW5kbGUsIGpwZWdCdWYsICh1bnNpZ25lZCBsb25nKWpwZWdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UGxhbmVzLCBkZXNpcmVkV2lkdGgsIGRzdFN0cmlkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkSGVpZ2h0LCBmbGFncykgPT0gLTEpCisgICAgX3Rocm93dGooKTsKKworYmFpbG91dDoKKyAgaWYgKGpwZWdCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIGpwZWdCdWYsIDApOworICBmb3IgKGkgPSAwOyBpIDwgbmM7IGkrKykgeworICAgIGlmIChkc3RQbGFuZXNbaV0gJiYgakRzdFBsYW5lc1tpXSkKKyAgICAgICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqRHN0UGxhbmVzW2ldLCBkc3RQbGFuZXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICB9CisgIGlmIChkc3RTdHJpZGVzKQorICAgICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqRHN0U3RyaWRlcywgZHN0U3RyaWRlcywgMCk7CisgIGlmIChkc3RPZmZzZXRzKQorICAgICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqRHN0T2Zmc2V0cywgZHN0T2Zmc2V0cywgMCk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3NUb1lVVigpICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc1RvWVVWX19fM0JJXzNCSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCBqcGVnU2l6ZSwgamJ5dGVBcnJheSBkc3QsCisgICBqaW50IGZsYWdzKQoreworICB0amhhbmRsZSBoYW5kbGUgPSAwOworICB1bnNpZ25lZCBjaGFyICpqcGVnQnVmID0gTlVMTCwgKmRzdEJ1ZiA9IE5VTEw7CisgIGludCBqcGVnU3Vic2FtcCA9IC0xLCBqcGVnV2lkdGggPSAwLCBqcGVnSGVpZ2h0ID0gMDsKKworICBnZXRoYW5kbGUoKTsKKworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHNyYykgPCBqcGVnU2l6ZSkKKyAgICBfdGhyb3dhcmcoIlNvdXJjZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOworICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAianBlZ1N1YnNhbXAiLCAiSSIpKTsKKyAganBlZ1N1YnNhbXAgPSAoaW50KSgqZW52KS0+R2V0SW50RmllbGQoZW52LCBvYmosIF9maWQpOworICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAianBlZ1dpZHRoIiwgIkkiKSk7CisgIGpwZWdXaWR0aCA9IChpbnQpKCplbnYpLT5HZXRJbnRGaWVsZChlbnYsIG9iaiwgX2ZpZCk7CisgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJqcGVnSGVpZ2h0IiwgIkkiKSk7CisgIGpwZWdIZWlnaHQgPSAoaW50KSgqZW52KS0+R2V0SW50RmllbGQoZW52LCBvYmosIF9maWQpOworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGRzdCkgPAorICAgICAgKGpzaXplKXRqQnVmU2l6ZVlVVihqcGVnV2lkdGgsIGpwZWdIZWlnaHQsIGpwZWdTdWJzYW1wKSkKKyAgICBfdGhyb3dhcmcoIkRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisKKyAgYmFpbGlmMChqcGVnQnVmID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCAwKSk7CisgIGJhaWxpZjAoZHN0QnVmID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCAwKSk7CisKKyAgaWYgKHRqRGVjb21wcmVzc1RvWVVWKGhhbmRsZSwganBlZ0J1ZiwgKHVuc2lnbmVkIGxvbmcpanBlZ1NpemUsIGRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSA9PSAtMSkKKyAgICBfdGhyb3d0aigpOworCitiYWlsb3V0OgorICBpZiAoZHN0QnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOworICBpZiAoanBlZ0J1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywganBlZ0J1ZiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIFRKRGVjb21wcmVzc29yX2RlY29kZVlVVgorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0QXJyYXkgc3Jjb2JqcywgamludEFycmF5IGpTcmNPZmZzZXRzLAorICAgamludEFycmF5IGpTcmNTdHJpZGVzLCBqaW50IHN1YnNhbXAsIGphcnJheSBkc3QsIGppbnQgZHN0RWxlbWVudFNpemUsCisgICBqaW50IHgsIGppbnQgeSwgamludCB3aWR0aCwgamludCBwaXRjaCwgamludCBoZWlnaHQsIGppbnQgcGYsIGppbnQgZmxhZ3MpCit7CisgIHRqaGFuZGxlIGhhbmRsZSA9IDA7CisgIGpzaXplIGFycmF5U2l6ZSA9IDAsIGFjdHVhbFBpdGNoOworICBqYnl0ZUFycmF5IGpTcmNQbGFuZXNbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjUGxhbmVzWzNdOworICB1bnNpZ25lZCBjaGFyICpkc3RCdWYgPSBOVUxMOworICBpbnQgKnNyY09mZnNldHMgPSBOVUxMLCAqc3JjU3RyaWRlcyA9IE5VTEw7CisgIGludCBuYyA9IChzdWJzYW1wID09IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX1NBTVBfR1JBWSA/IDEgOiAzKSwgaTsKKworICBnZXRoYW5kbGUoKTsKKworICBpZiAocGYgPCAwIHx8IHBmID49IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIHx8IHN1YnNhbXAgPCAwIHx8CisgICAgICBzdWJzYW1wID49IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVNBTVApCisgICAgX3Rocm93YXJnKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29kZVlVVigpIik7CisgIGlmIChvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiAhPSBUSl9OVU1QRiB8fAorICAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNU0FNUCAhPSBUSl9OVU1TQU1QKQorICAgIF90aHJvd2FyZygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOworCisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3Jjb2JqcykgPCBuYykKKyAgICBfdGhyb3dhcmcoIlBsYW5lcyBhcnJheSBpcyB0b28gc21hbGwgZm9yIHRoZSBzdWJzYW1wbGluZyB0eXBlIik7CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgalNyY09mZnNldHMpIDwgbmMpCisgICAgX3Rocm93YXJnKCJPZmZzZXRzIGFycmF5IGlzIHRvbyBzbWFsbCBmb3IgdGhlIHN1YnNhbXBsaW5nIHR5cGUiKTsKKyAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqU3JjU3RyaWRlcykgPCBuYykKKyAgICBfdGhyb3dhcmcoIlN0cmlkZXMgYXJyYXkgaXMgdG9vIHNtYWxsIGZvciB0aGUgc3Vic2FtcGxpbmcgdHlwZSIpOworCisgIGFjdHVhbFBpdGNoID0gKHBpdGNoID09IDApID8gd2lkdGggKiB0alBpeGVsU2l6ZVtwZl0gOiBwaXRjaDsKKyAgYXJyYXlTaXplID0gKHkgKyBoZWlnaHQgLSAxKSAqIGFjdHVhbFBpdGNoICsgKHggKyB3aWR0aCkgKiB0alBpeGVsU2l6ZVtwZl07CisgIGlmICgoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgZHN0KSAqIGRzdEVsZW1lbnRTaXplIDwgYXJyYXlTaXplKQorICAgIF90aHJvd2FyZygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworICBiYWlsaWYwKHNyY09mZnNldHMgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjT2Zmc2V0cywgMCkpOworICBiYWlsaWYwKHNyY1N0cmlkZXMgPSAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjU3RyaWRlcywgMCkpOworICBmb3IgKGkgPSAwOyBpIDwgbmM7IGkrKykgeworICAgIGludCBwbGFuZVNpemUgPSB0alBsYW5lU2l6ZVlVVihpLCB3aWR0aCwgc3JjU3RyaWRlc1tpXSwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgICBpbnQgcHcgPSB0alBsYW5lV2lkdGgoaSwgd2lkdGgsIHN1YnNhbXApOworCisgICAgaWYgKHBsYW5lU2l6ZSA8IDAgfHwgcHcgPCAwKQorICAgICAgX3Rocm93YXJnKHRqR2V0RXJyb3JTdHIoKSk7CisKKyAgICBpZiAoc3JjT2Zmc2V0c1tpXSA8IDApCisgICAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gZGVjb2RlWVVWKCkiKTsKKyAgICBpZiAoc3JjU3RyaWRlc1tpXSA8IDAgJiYgc3JjT2Zmc2V0c1tpXSAtIHBsYW5lU2l6ZSArIHB3IDwgMCkKKyAgICAgIF90aHJvd2FyZygiTmVnYXRpdmUgcGxhbmUgc3RyaWRlIHdvdWxkIGNhdXNlIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBiZWxvdyBwbGFuZSBib3VuZGFyeSIpOworCisgICAgYmFpbGlmMChqU3JjUGxhbmVzW2ldID0gKCplbnYpLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoZW52LCBzcmNvYmpzLCBpKSk7CisgICAgaWYgKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBqU3JjUGxhbmVzW2ldKSA8IHNyY09mZnNldHNbaV0gKyBwbGFuZVNpemUpCisgICAgICBfdGhyb3dhcmcoIlNvdXJjZSBwbGFuZSBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisKKyAgICBiYWlsaWYwKHNyY1BsYW5lc1tpXSA9CisgICAgICAgICAgICAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjUGxhbmVzW2ldLCAwKSk7CisgICAgc3JjUGxhbmVzW2ldID0gJnNyY1BsYW5lc1tpXVtzcmNPZmZzZXRzW2ldXTsKKyAgfQorICBiYWlsaWYwKGRzdEJ1ZiA9ICgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgMCkpOworCisgIGlmICh0akRlY29kZVlVVlBsYW5lcyhoYW5kbGUsIHNyY1BsYW5lcywgc3JjU3RyaWRlcywgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkc3RCdWZbeSAqIGFjdHVhbFBpdGNoICsgeCAqIHRqUGl4ZWxTaXplW3BmXV0sIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2gsIGhlaWdodCwgcGYsIGZsYWdzKSA9PSAtMSkKKyAgICBfdGhyb3d0aigpOworCitiYWlsb3V0OgorICBpZiAoZHN0QnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOworICBmb3IgKGkgPSAwOyBpIDwgbmM7IGkrKykgeworICAgIGlmIChzcmNQbGFuZXNbaV0gJiYgalNyY1BsYW5lc1tpXSkKKyAgICAgICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqU3JjUGxhbmVzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNyY1BsYW5lc1tpXSwgMCk7CisgIH0KKyAgaWYgKHNyY1N0cmlkZXMpCisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpTcmNTdHJpZGVzLCBzcmNTdHJpZGVzLCAwKTsKKyAgaWYgKHNyY09mZnNldHMpCisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpTcmNPZmZzZXRzLCBzcmNPZmZzZXRzLCAwKTsKK30KKworLyogVHVyYm9KUEVHIDEuNC54OiBUSkRlY29tcHJlc3Nvcjo6ZGVjb2RlWVVWKCkgYnl0ZSBkZXN0aW5hdGlvbiAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29kZVlVVl9fXzNfM0JfM0lfM0lJXzNCSUlJSUlJSQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0QXJyYXkgc3Jjb2JqcywgamludEFycmF5IGpTcmNPZmZzZXRzLAorICAgamludEFycmF5IGpTcmNTdHJpZGVzLCBqaW50IHN1YnNhbXAsIGpieXRlQXJyYXkgZHN0LCBqaW50IHgsIGppbnQgeSwKKyAgIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqaW50IGZsYWdzKQoreworICBUSkRlY29tcHJlc3Nvcl9kZWNvZGVZVVYoZW52LCBvYmosIHNyY29ianMsIGpTcmNPZmZzZXRzLCBqU3JjU3RyaWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXAsIGRzdCwgMSwgeCwgeSwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworfQorCisvKiBUdXJib0pQRUcgMS40Lng6IFRKRGVjb21wcmVzc29yOjpkZWNvZGVZVVYoKSBpbnQgZGVzdGluYXRpb24gKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvZGVZVVZfX18zXzNCXzNJXzNJSV8zSUlJSUlJSUkKKyAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam9iamVjdEFycmF5IHNyY29ianMsIGppbnRBcnJheSBqU3JjT2Zmc2V0cywKKyAgIGppbnRBcnJheSBqU3JjU3RyaWRlcywgamludCBzdWJzYW1wLCBqaW50QXJyYXkgZHN0LCBqaW50IHgsIGppbnQgeSwKKyAgIGppbnQgd2lkdGgsIGppbnQgc3RyaWRlLCBqaW50IGhlaWdodCwgamludCBwZiwgamludCBmbGFncykKK3sKKyAgaWYgKHBmIDwgMCB8fCBwZiA+PSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRikKKyAgICBfdGhyb3dhcmcoIkludmFsaWQgYXJndW1lbnQgaW4gZGVjb2RlWVVWKCkiKTsKKyAgaWYgKHRqUGl4ZWxTaXplW3BmXSAhPSBzaXplb2YoamludCkpCisgICAgX3Rocm93YXJnKCJQaXhlbCBmb3JtYXQgbXVzdCBiZSAzMi1iaXQgd2hlbiBkZWNvZGluZyB0byBhbiBpbnRlZ2VyIGJ1ZmZlci4iKTsKKworICBUSkRlY29tcHJlc3Nvcl9kZWNvZGVZVVYoZW52LCBvYmosIHNyY29ianMsIGpTcmNPZmZzZXRzLCBqU3JjU3RyaWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXAsIGRzdCwgc2l6ZW9mKGppbnQpLCB4LCB5LCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSAqIHNpemVvZihqaW50KSwgaGVpZ2h0LCBwZiwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm47Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpUcmFuc2Zvcm1lcjo6aW5pdCgpICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpUcmFuc2Zvcm1lcl9pbml0CisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmopCit7CisgIGpjbGFzcyBjbHM7CisgIGpmaWVsZElEIGZpZDsKKyAgdGpoYW5kbGUgaGFuZGxlOworCisgIGlmICgoaGFuZGxlID0gdGpJbml0VHJhbnNmb3JtKCkpID09IE5VTEwpCisgICAgX3Rocm93KHRqR2V0RXJyb3JTdHIoKSwgIm9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRXhjZXB0aW9uIik7CisKKyAgYmFpbGlmMChjbHMgPSAoKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgb2JqKSk7CisgIGJhaWxpZjAoZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgY2xzLCAiaGFuZGxlIiwgIkoiKSk7CisgICgqZW52KS0+U2V0TG9uZ0ZpZWxkKGVudiwgb2JqLCBmaWQsIChzaXplX3QpaGFuZGxlKTsKKworYmFpbG91dDoKKyAgcmV0dXJuOworfQorCit0eXBlZGVmIHN0cnVjdCBfSk5JQ3VzdG9tRmlsdGVyUGFyYW1zIHsKKyAgSk5JRW52ICplbnY7CisgIGpvYmplY3QgdG9iajsKKyAgam9iamVjdCBjZm9iajsKK30gSk5JQ3VzdG9tRmlsdGVyUGFyYW1zOworCitzdGF0aWMgaW50IEpOSUN1c3RvbUZpbHRlcihzaG9ydCAqY29lZmZzLCB0anJlZ2lvbiBhcnJheVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRqcmVnaW9uIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbnNmb3JtSW5kZXgsIHRqdHJhbnNmb3JtICp0cmFuc2Zvcm0pCit7CisgIEpOSUN1c3RvbUZpbHRlclBhcmFtcyAqcGFyYW1zID0gKEpOSUN1c3RvbUZpbHRlclBhcmFtcyAqKXRyYW5zZm9ybS0+ZGF0YTsKKyAgSk5JRW52ICplbnYgPSBwYXJhbXMtPmVudjsKKyAgam9iamVjdCB0b2JqID0gcGFyYW1zLT50b2JqLCBjZm9iaiA9IHBhcmFtcy0+Y2ZvYmo7CisgIGpvYmplY3QgYXJyYXlSZWdpb25PYmosIHBsYW5lUmVnaW9uT2JqLCBidWZvYmosIGJvcm9iajsKKyAgamNsYXNzIGNsczsKKyAgam1ldGhvZElEIG1pZDsKKyAgamZpZWxkSUQgZmlkOworCisgIGJhaWxpZjAoYnVmb2JqID0gKCplbnYpLT5OZXdEaXJlY3RCeXRlQnVmZmVyKGVudiwgY29lZmZzLAorICAgIHNpemVvZihzaG9ydCkgKiBhcnJheVJlZ2lvbi53ICogYXJyYXlSZWdpb24uaCkpOworICBiYWlsaWYwKGNscyA9ICgqZW52KS0+RmluZENsYXNzKGVudiwgImphdmEvbmlvL0J5dGVPcmRlciIpKTsKKyAgYmFpbGlmMChtaWQgPSAoKmVudiktPkdldFN0YXRpY01ldGhvZElEKGVudiwgY2xzLCAibmF0aXZlT3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigpTGphdmEvbmlvL0J5dGVPcmRlcjsiKSk7CisgIGJhaWxpZjAoYm9yb2JqID0gKCplbnYpLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9kKGVudiwgY2xzLCBtaWQpKTsKKyAgYmFpbGlmMChjbHMgPSAoKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgYnVmb2JqKSk7CisgIGJhaWxpZjAobWlkID0gKCplbnYpLT5HZXRNZXRob2RJRChlbnYsIGNscywgIm9yZGVyIiwKKyAgICAiKExqYXZhL25pby9CeXRlT3JkZXI7KUxqYXZhL25pby9CeXRlQnVmZmVyOyIpKTsKKyAgKCplbnYpLT5DYWxsT2JqZWN0TWV0aG9kKGVudiwgYnVmb2JqLCBtaWQsIGJvcm9iaik7CisgIGJhaWxpZjAobWlkID0gKCplbnYpLT5HZXRNZXRob2RJRChlbnYsIGNscywgImFzU2hvcnRCdWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigpTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIpKTsKKyAgYmFpbGlmMChidWZvYmogPSAoKmVudiktPkNhbGxPYmplY3RNZXRob2QoZW52LCBidWZvYmosIG1pZCkpOworCisgIGJhaWxpZjAoY2xzID0gKCplbnYpLT5GaW5kQ2xhc3MoZW52LCAiamF2YS9hd3QvUmVjdGFuZ2xlIikpOworICBiYWlsaWYwKGFycmF5UmVnaW9uT2JqID0gKCplbnYpLT5BbGxvY09iamVjdChlbnYsIGNscykpOworICBiYWlsaWYwKGZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNscywgIngiLCAiSSIpKTsKKyAgKCplbnYpLT5TZXRJbnRGaWVsZChlbnYsIGFycmF5UmVnaW9uT2JqLCBmaWQsIGFycmF5UmVnaW9uLngpOworICBiYWlsaWYwKGZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNscywgInkiLCAiSSIpKTsKKyAgKCplbnYpLT5TZXRJbnRGaWVsZChlbnYsIGFycmF5UmVnaW9uT2JqLCBmaWQsIGFycmF5UmVnaW9uLnkpOworICBiYWlsaWYwKGZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNscywgIndpZHRoIiwgIkkiKSk7CisgICgqZW52KS0+U2V0SW50RmllbGQoZW52LCBhcnJheVJlZ2lvbk9iaiwgZmlkLCBhcnJheVJlZ2lvbi53KTsKKyAgYmFpbGlmMChmaWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBjbHMsICJoZWlnaHQiLCAiSSIpKTsKKyAgKCplbnYpLT5TZXRJbnRGaWVsZChlbnYsIGFycmF5UmVnaW9uT2JqLCBmaWQsIGFycmF5UmVnaW9uLmgpOworCisgIGJhaWxpZjAocGxhbmVSZWdpb25PYmogPSAoKmVudiktPkFsbG9jT2JqZWN0KGVudiwgY2xzKSk7CisgIGJhaWxpZjAoZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgY2xzLCAieCIsICJJIikpOworICAoKmVudiktPlNldEludEZpZWxkKGVudiwgcGxhbmVSZWdpb25PYmosIGZpZCwgcGxhbmVSZWdpb24ueCk7CisgIGJhaWxpZjAoZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgY2xzLCAieSIsICJJIikpOworICAoKmVudiktPlNldEludEZpZWxkKGVudiwgcGxhbmVSZWdpb25PYmosIGZpZCwgcGxhbmVSZWdpb24ueSk7CisgIGJhaWxpZjAoZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgY2xzLCAid2lkdGgiLCAiSSIpKTsKKyAgKCplbnYpLT5TZXRJbnRGaWVsZChlbnYsIHBsYW5lUmVnaW9uT2JqLCBmaWQsIHBsYW5lUmVnaW9uLncpOworICBiYWlsaWYwKGZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNscywgImhlaWdodCIsICJJIikpOworICAoKmVudiktPlNldEludEZpZWxkKGVudiwgcGxhbmVSZWdpb25PYmosIGZpZCwgcGxhbmVSZWdpb24uaCk7CisKKyAgYmFpbGlmMChjbHMgPSAoKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgY2ZvYmopKTsKKyAgYmFpbGlmMChtaWQgPSAoKmVudiktPkdldE1ldGhvZElEKGVudiwgY2xzLCAiY3VzdG9tRmlsdGVyIiwKKyAgICAiKExqYXZhL25pby9TaG9ydEJ1ZmZlcjtMamF2YS9hd3QvUmVjdGFuZ2xlO0xqYXZhL2F3dC9SZWN0YW5nbGU7SUlMb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm07KVYiKSk7CisgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCBjZm9iaiwgbWlkLCBidWZvYmosIGFycmF5UmVnaW9uT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lUmVnaW9uT2JqLCBjb21wb25lbnRJbmRleCwgdHJhbnNmb3JtSW5kZXgsIHRvYmopOworCisgIHJldHVybiAwOworCitiYWlsb3V0OgorICByZXR1cm4gLTE7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpUcmFuc2Zvcm1lcjo6dHJhbnNmb3JtKCkgKi8KK0pOSUVYUE9SVCBqaW50QXJyYXkgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfdHJhbnNmb3JtCisgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkganNyY0J1ZiwgamludCBqcGVnU2l6ZSwKKyAgIGpvYmplY3RBcnJheSBkc3RvYmpzLCBqb2JqZWN0QXJyYXkgdG9ianMsIGppbnQgZmxhZ3MpCit7CisgIHRqaGFuZGxlIGhhbmRsZSA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYgPSBOVUxMLCAqKmRzdEJ1ZnMgPSBOVUxMOworICBqc2l6ZSBuID0gMDsKKyAgdW5zaWduZWQgbG9uZyAqZHN0U2l6ZXMgPSBOVUxMOworICB0anRyYW5zZm9ybSAqdCA9IE5VTEw7CisgIGpieXRlQXJyYXkgKmpkc3RCdWZzID0gTlVMTDsKKyAgaW50IGksIGpwZWdXaWR0aCA9IDAsIGpwZWdIZWlnaHQgPSAwLCBqcGVnU3Vic2FtcDsKKyAgamludEFycmF5IGpkc3RTaXplcyA9IDA7CisgIGppbnQgKmRzdFNpemVzaSA9IE5VTEw7CisgIEpOSUN1c3RvbUZpbHRlclBhcmFtcyAqcGFyYW1zID0gTlVMTDsKKworICBnZXRoYW5kbGUoKTsKKworICBpZiAoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGpzcmNCdWYpIDwganBlZ1NpemUpCisgICAgX3Rocm93YXJnKCJTb3VyY2UgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKyAgYmFpbGlmMChfZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgX2NscywgImpwZWdXaWR0aCIsICJJIikpOworICBqcGVnV2lkdGggPSAoaW50KSgqZW52KS0+R2V0SW50RmllbGQoZW52LCBvYmosIF9maWQpOworICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAianBlZ0hlaWdodCIsICJJIikpOworICBqcGVnSGVpZ2h0ID0gKGludCkoKmVudiktPkdldEludEZpZWxkKGVudiwgb2JqLCBfZmlkKTsKKyAgYmFpbGlmMChfZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgX2NscywgImpwZWdTdWJzYW1wIiwgIkkiKSk7CisgIGpwZWdTdWJzYW1wID0gKGludCkoKmVudiktPkdldEludEZpZWxkKGVudiwgb2JqLCBfZmlkKTsKKworICBuID0gKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGRzdG9ianMpOworICBpZiAobiAhPSAoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgdG9ianMpKQorICAgIF90aHJvd2FyZygiTWlzbWF0Y2ggYmV0d2VlbiBzaXplIG9mIHRyYW5zZm9ybXMgYXJyYXkgYW5kIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJyYXkiKTsKKworICBpZiAoKGRzdEJ1ZnMgPQorICAgICAgICh1bnNpZ25lZCBjaGFyICoqKW1hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhciAqKSAqIG4pKSA9PSBOVUxMKQorICAgIF90aHJvd21lbSgpOworICBpZiAoKGpkc3RCdWZzID0gKGpieXRlQXJyYXkgKiltYWxsb2Moc2l6ZW9mKGpieXRlQXJyYXkpICogbikpID09IE5VTEwpCisgICAgX3Rocm93bWVtKCk7CisgIGlmICgoZHN0U2l6ZXMgPSAodW5zaWduZWQgbG9uZyAqKW1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBuKSkgPT0gTlVMTCkKKyAgICBfdGhyb3dtZW0oKTsKKyAgaWYgKCh0ID0gKHRqdHJhbnNmb3JtICopbWFsbG9jKHNpemVvZih0anRyYW5zZm9ybSkgKiBuKSkgPT0gTlVMTCkKKyAgICBfdGhyb3dtZW0oKTsKKyAgaWYgKChwYXJhbXMgPSAoSk5JQ3VzdG9tRmlsdGVyUGFyYW1zICopbWFsbG9jKHNpemVvZihKTklDdXN0b21GaWx0ZXJQYXJhbXMpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4pKSA9PSBOVUxMKQorICAgIF90aHJvd21lbSgpOworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgZHN0QnVmc1tpXSA9IE5VTEw7ICBqZHN0QnVmc1tpXSA9IE5VTEw7ICBkc3RTaXplc1tpXSA9IDA7CisgICAgbWVtc2V0KCZ0W2ldLCAwLCBzaXplb2YodGp0cmFuc2Zvcm0pKTsKKyAgICBtZW1zZXQoJnBhcmFtc1tpXSwgMCwgc2l6ZW9mKEpOSUN1c3RvbUZpbHRlclBhcmFtcykpOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgIGpvYmplY3QgdG9iaiwgY2ZvYmo7CisKKyAgICBiYWlsaWYwKHRvYmogPSAoKmVudiktPkdldE9iamVjdEFycmF5RWxlbWVudChlbnYsIHRvYmpzLCBpKSk7CisgICAgYmFpbGlmMChfY2xzID0gKCplbnYpLT5HZXRPYmplY3RDbGFzcyhlbnYsIHRvYmopKTsKKyAgICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAib3AiLCAiSSIpKTsKKyAgICB0W2ldLm9wID0gKCplbnYpLT5HZXRJbnRGaWVsZChlbnYsIHRvYmosIF9maWQpOworICAgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJvcHRpb25zIiwgIkkiKSk7CisgICAgdFtpXS5vcHRpb25zID0gKCplbnYpLT5HZXRJbnRGaWVsZChlbnYsIHRvYmosIF9maWQpOworICAgIGJhaWxpZjAoX2ZpZCA9ICgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJ4IiwgIkkiKSk7CisgICAgdFtpXS5yLnggPSAoKmVudiktPkdldEludEZpZWxkKGVudiwgdG9iaiwgX2ZpZCk7CisgICAgYmFpbGlmMChfZmlkID0gKCplbnYpLT5HZXRGaWVsZElEKGVudiwgX2NscywgInkiLCAiSSIpKTsKKyAgICB0W2ldLnIueSA9ICgqZW52KS0+R2V0SW50RmllbGQoZW52LCB0b2JqLCBfZmlkKTsKKyAgICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAid2lkdGgiLCAiSSIpKTsKKyAgICB0W2ldLnIudyA9ICgqZW52KS0+R2V0SW50RmllbGQoZW52LCB0b2JqLCBfZmlkKTsKKyAgICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAiaGVpZ2h0IiwgIkkiKSk7CisgICAgdFtpXS5yLmggPSAoKmVudiktPkdldEludEZpZWxkKGVudiwgdG9iaiwgX2ZpZCk7CisKKyAgICBiYWlsaWYwKF9maWQgPSAoKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAiY2YiLAorICAgICAgIkxvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlcjsiKSk7CisgICAgY2ZvYmogPSAoKmVudiktPkdldE9iamVjdEZpZWxkKGVudiwgdG9iaiwgX2ZpZCk7CisgICAgaWYgKGNmb2JqKSB7CisgICAgICBwYXJhbXNbaV0uZW52ID0gZW52OworICAgICAgcGFyYW1zW2ldLnRvYmogPSB0b2JqOworICAgICAgcGFyYW1zW2ldLmNmb2JqID0gY2ZvYmo7CisgICAgICB0W2ldLmN1c3RvbUZpbHRlciA9IEpOSUN1c3RvbUZpbHRlcjsKKyAgICAgIHRbaV0uZGF0YSA9ICh2b2lkICopJnBhcmFtc1tpXTsKKyAgICB9CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgaW50IHcgPSBqcGVnV2lkdGgsIGggPSBqcGVnSGVpZ2h0OworCisgICAgaWYgKHRbaV0uci53ICE9IDApIHcgPSB0W2ldLnIudzsKKyAgICBpZiAodFtpXS5yLmggIT0gMCkgaCA9IHRbaV0uci5oOworICAgIGJhaWxpZjAoamRzdEJ1ZnNbaV0gPSAoKmVudiktPkdldE9iamVjdEFycmF5RWxlbWVudChlbnYsIGRzdG9ianMsIGkpKTsKKyAgICBpZiAoKHVuc2lnbmVkIGxvbmcpKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGpkc3RCdWZzW2ldKSA8CisgICAgICAgIHRqQnVmU2l6ZSh3LCBoLCBqcGVnU3Vic2FtcCkpCisgICAgICBfdGhyb3dhcmcoIkRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisgIH0KKyAgYmFpbGlmMChqcGVnQnVmID0gKCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwganNyY0J1ZiwgMCkpOworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgIGJhaWxpZjAoZHN0QnVmc1tpXSA9CisgICAgICAgICAgICAoKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqZHN0QnVmc1tpXSwgMCkpOworCisgIGlmICh0alRyYW5zZm9ybShoYW5kbGUsIGpwZWdCdWYsIGpwZWdTaXplLCBuLCBkc3RCdWZzLCBkc3RTaXplcywgdCwKKyAgICAgICAgICAgICAgICAgIGZsYWdzIHwgVEpGTEFHX05PUkVBTExPQykgPT0gLTEpCisgICAgX3Rocm93dGooKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpkc3RCdWZzW2ldLCBkc3RCdWZzW2ldLCAwKTsKKyAgICBkc3RCdWZzW2ldID0gTlVMTDsKKyAgfQorICAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwganNyY0J1ZiwganBlZ0J1ZiwgMCk7CisgIGpwZWdCdWYgPSBOVUxMOworCisgIGpkc3RTaXplcyA9ICgqZW52KS0+TmV3SW50QXJyYXkoZW52LCBuKTsKKyAgYmFpbGlmMChkc3RTaXplc2kgPSAoKmVudiktPkdldEludEFycmF5RWxlbWVudHMoZW52LCBqZHN0U2l6ZXMsIDApKTsKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZHN0U2l6ZXNpW2ldID0gKGludClkc3RTaXplc1tpXTsKKworYmFpbG91dDoKKyAgaWYgKGRzdFNpemVzaSkgKCplbnYpLT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhlbnYsIGpkc3RTaXplcywgZHN0U2l6ZXNpLCAwKTsKKyAgaWYgKGRzdEJ1ZnMpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBpZiAoZHN0QnVmc1tpXSAmJiBqZHN0QnVmcyAmJiBqZHN0QnVmc1tpXSkKKyAgICAgICAgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpkc3RCdWZzW2ldLCBkc3RCdWZzW2ldLCAwKTsKKyAgICB9CisgICAgZnJlZShkc3RCdWZzKTsKKyAgfQorICBpZiAoanBlZ0J1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpzcmNCdWYsIGpwZWdCdWYsIDApOworICBpZiAoamRzdEJ1ZnMpIGZyZWUoamRzdEJ1ZnMpOworICBpZiAoZHN0U2l6ZXMpIGZyZWUoZHN0U2l6ZXMpOworICBpZiAodCkgZnJlZSh0KTsKKyAgcmV0dXJuIGpkc3RTaXplczsKK30KKworLyogVHVyYm9KUEVHIDEuMi54OiBUSkRlY29tcHJlc3Nvcjo6ZGVzdHJveSgpICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVzdHJveQorICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqKQoreworICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9kZXN0cm95KGVudiwgb2JqKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy1tYXBmaWxlIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdHVyYm9qcGVnLW1hcGZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQ3N2ZlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy1tYXBmaWxlCkBAIC0wLDAgKzEsNjUgQEAKK1RVUkJPSlBFR18xLjAKK3sKKyAgZ2xvYmFsOgorICAgIHRqSW5pdENvbXByZXNzOworICAgIHRqQ29tcHJlc3M7CisgICAgVEpCVUZTSVpFOworICAgIHRqSW5pdERlY29tcHJlc3M7CisgICAgdGpEZWNvbXByZXNzSGVhZGVyOworICAgIHRqRGVjb21wcmVzczsKKyAgICB0akRlc3Ryb3k7CisgICAgdGpHZXRFcnJvclN0cjsKKyAgbG9jYWw6CisgICAgKjsKK307CisKK1RVUkJPSlBFR18xLjEKK3sKKyAgZ2xvYmFsOgorICAgIFRKQlVGU0laRVlVVjsKKyAgICB0akRlY29tcHJlc3NIZWFkZXIyOworICAgIHRqRGVjb21wcmVzc1RvWVVWOworICAgIHRqRW5jb2RlWVVWOworfSBUVVJCT0pQRUdfMS4wOworCitUVVJCT0pQRUdfMS4yCit7CisgIGdsb2JhbDoKKyAgICB0akFsbG9jOworICAgIHRqQnVmU2l6ZTsKKyAgICB0akJ1ZlNpemVZVVY7CisgICAgdGpDb21wcmVzczI7CisgICAgdGpEZWNvbXByZXNzMjsKKyAgICB0akVuY29kZVlVVjI7CisgICAgdGpGcmVlOworICAgIHRqR2V0U2NhbGluZ0ZhY3RvcnM7CisgICAgdGpJbml0VHJhbnNmb3JtOworICAgIHRqVHJhbnNmb3JtOworfSBUVVJCT0pQRUdfMS4xOworCitUVVJCT0pQRUdfMS40Cit7CisgIGdsb2JhbDoKKyAgICB0akJ1ZlNpemVZVVYyOworICAgIHRqQ29tcHJlc3NGcm9tWVVWOworICAgIHRqQ29tcHJlc3NGcm9tWVVWUGxhbmVzOworICAgIHRqRGVjb2RlWVVWOworICAgIHRqRGVjb2RlWVVWUGxhbmVzOworICAgIHRqRGVjb21wcmVzc0hlYWRlcjM7CisgICAgdGpEZWNvbXByZXNzVG9ZVVYyOworICAgIHRqRGVjb21wcmVzc1RvWVVWUGxhbmVzOworICAgIHRqRW5jb2RlWVVWMzsKKyAgICB0akVuY29kZVlVVlBsYW5lczsKKyAgICB0alBsYW5lSGVpZ2h0OworICAgIHRqUGxhbmVTaXplWVVWOworICAgIHRqUGxhbmVXaWR0aDsKK30gVFVSQk9KUEVHXzEuMjsKKworVFVSQk9KUEVHXzIuMAoreworICBnbG9iYWw6CisgICAgdGpHZXRFcnJvckNvZGU7CisgICAgdGpHZXRFcnJvclN0cjI7CisgICAgdGpMb2FkSW1hZ2U7CisgICAgdGpTYXZlSW1hZ2U7Cit9IFRVUkJPSlBFR18xLjQ7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90dXJib2pwZWctbWFwZmlsZS5qbmkgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby90dXJib2pwZWctbWFwZmlsZS5qbmkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDQzMjc5MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy1tYXBmaWxlLmpuaQpAQCAtMCwwICsxLDEwMSBAQAorVFVSQk9KUEVHXzEuMAoreworICBnbG9iYWw6CisgICAgdGpJbml0Q29tcHJlc3M7CisgICAgdGpDb21wcmVzczsKKyAgICBUSkJVRlNJWkU7CisgICAgdGpJbml0RGVjb21wcmVzczsKKyAgICB0akRlY29tcHJlc3NIZWFkZXI7CisgICAgdGpEZWNvbXByZXNzOworICAgIHRqRGVzdHJveTsKKyAgICB0akdldEVycm9yU3RyOworICBsb2NhbDoKKyAgICAqOworfTsKKworVFVSQk9KUEVHXzEuMQoreworICBnbG9iYWw6CisgICAgVEpCVUZTSVpFWVVWOworICAgIHRqRGVjb21wcmVzc0hlYWRlcjI7CisgICAgdGpEZWNvbXByZXNzVG9ZVVY7CisgICAgdGpFbmNvZGVZVVY7Cit9IFRVUkJPSlBFR18xLjA7CisKK1RVUkJPSlBFR18xLjIKK3sKKyAgZ2xvYmFsOgorICAgIHRqQWxsb2M7CisgICAgdGpCdWZTaXplOworICAgIHRqQnVmU2l6ZVlVVjsKKyAgICB0akNvbXByZXNzMjsKKyAgICB0akRlY29tcHJlc3MyOworICAgIHRqRW5jb2RlWVVWMjsKKyAgICB0akZyZWU7CisgICAgdGpHZXRTY2FsaW5nRmFjdG9yczsKKyAgICB0akluaXRUcmFuc2Zvcm07CisgICAgdGpUcmFuc2Zvcm07CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9idWZTaXplOworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfYnVmU2l6ZVlVVl9fSUlJOworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfZ2V0U2NhbGluZ0ZhY3RvcnM7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfaW5pdDsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNCSUlJSV8zQklJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNJSUlJSV8zQklJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9lbmNvZGVZVVZfX18zQklJSUlfM0JJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9lbmNvZGVZVVZfX18zSUlJSUlfM0JJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9kZXN0cm95OworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfaW5pdDsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NIZWFkZXI7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNCSUlJSUk7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUk7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzVG9ZVVZfX18zQklfM0JJOworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVzdHJveTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfaW5pdDsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfdHJhbnNmb3JtOworfSBUVVJCT0pQRUdfMS4xOworCitUVVJCT0pQRUdfMS4zCit7CisgIGdsb2JhbDoKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNCSUlJSUlJXzNCSUlJOworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0lJSUlJSUlfM0JJSUk7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNCSUlJSUlJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX18zQklfM0lJSUlJSUlJOworfSBUVVJCT0pQRUdfMS4yOworCitUVVJCT0pQRUdfMS40Cit7CisgIGdsb2JhbDoKKyAgICB0akJ1ZlNpemVZVVYyOworICAgIHRqQ29tcHJlc3NGcm9tWVVWOworICAgIHRqQ29tcHJlc3NGcm9tWVVWUGxhbmVzOworICAgIHRqRGVjb2RlWVVWOworICAgIHRqRGVjb2RlWVVWUGxhbmVzOworICAgIHRqRGVjb21wcmVzc0hlYWRlcjM7CisgICAgdGpEZWNvbXByZXNzVG9ZVVYyOworICAgIHRqRGVjb21wcmVzc1RvWVVWUGxhbmVzOworICAgIHRqRW5jb2RlWVVWMzsKKyAgICB0akVuY29kZVlVVlBsYW5lczsKKyAgICB0alBsYW5lSGVpZ2h0OworICAgIHRqUGxhbmVTaXplWVVWOworICAgIHRqUGxhbmVXaWR0aDsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX2J1ZlNpemVZVVZfX0lJSUk7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NGcm9tWVVWX19fM18zQl8zSUlfM0lJSV8zQklJOworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2VuY29kZVlVVl9fXzNCSUlJSUlJXzNfM0JfM0lfM0lJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9lbmNvZGVZVVZfX18zSUlJSUlJSV8zXzNCXzNJXzNJSUk7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzVG9ZVVZfX18zQklfM18zQl8zSUlfM0lJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29kZVlVVl9fXzNfM0JfM0lfM0lJXzNCSUlJSUlJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29kZVlVVl9fXzNfM0JfM0lfM0lJXzNJSUlJSUlJSTsKKyAgICBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX3BsYW5lSGVpZ2h0X19JSUk7CisgICAgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9wbGFuZVNpemVZVVZfX0lJSUlJOworICAgIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfcGxhbmVXaWR0aF9fSUlJOworfSBUVVJCT0pQRUdfMS4zOworCitUVVJCT0pQRUdfMi4wCit7CisgIGdsb2JhbDoKKyAgICB0akdldEVycm9yQ29kZTsKKyAgICB0akdldEVycm9yU3RyMjsKKyAgICB0akxvYWRJbWFnZTsKKyAgICB0alNhdmVJbWFnZTsKK30gVFVSQk9KUEVHXzEuNDsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdHVyYm9qcGVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxZThkZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy5jCkBAIC0wLDAgKzEsMjEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDA5LTIwMTggRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIFR1cmJvSlBFRy9MSlQ6ICB0aGlzIGltcGxlbWVudHMgdGhlIFR1cmJvSlBFRyBBUEkgdXNpbmcgbGlianBlZyBvcgorICAgbGlianBlZy10dXJibyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGppbmNsdWRlLmg+CisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSA8anBlZ2xpYi5oPgorI2luY2x1ZGUgPGplcnJvci5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAiLi90dXJib2pwZWcuaCIKKyNpbmNsdWRlICIuL3RqdXRpbC5oIgorI2luY2x1ZGUgInRyYW5zdXBwLmgiCisjaW5jbHVkZSAiLi9qcGVnY29tcC5oIgorI2luY2x1ZGUgIi4vY2RqcGVnLmgiCisKK2V4dGVybiB2b2lkIGpwZWdfbWVtX2Rlc3RfdGooal9jb21wcmVzc19wdHIsIHVuc2lnbmVkIGNoYXIgKiosIHVuc2lnbmVkIGxvbmcgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbik7CitleHRlcm4gdm9pZCBqcGVnX21lbV9zcmNfdGooal9kZWNvbXByZXNzX3B0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIFBBRCh2LCBwKSAgKCh2ICsgKHApIC0gMSkgJiAofigocCkgLSAxKSkpCisjZGVmaW5lIGlzUG93Mih4KSAgKCgoeCkgJiAoeCAtIDEpKSA9PSAwKQorCisKKy8qIEVycm9yIGhhbmRsaW5nIChiYXNlZCBvbiBleGFtcGxlIGluIGV4YW1wbGUudHh0KSAqLworCitzdGF0aWMgY2hhciBlcnJTdHJbSk1TR19MRU5HVEhfTUFYXSA9ICJObyBlcnJvciI7CisKK3N0cnVjdCBteV9lcnJvcl9tZ3IgeworICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgcHViOworICBqbXBfYnVmIHNldGptcF9idWZmZXI7CisgIHZvaWQgKCplbWl0X21lc3NhZ2UpIChqX2NvbW1vbl9wdHIsIGludCk7CisgIGJvb2xlYW4gd2FybmluZywgc3RvcE9uV2FybmluZzsKK307Cit0eXBlZGVmIHN0cnVjdCBteV9lcnJvcl9tZ3IgKm15X2Vycm9yX3B0cjsKKworc3RhdGljIHZvaWQgbXlfZXJyb3JfZXhpdChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIG15X2Vycm9yX3B0ciBteWVyciA9IChteV9lcnJvcl9wdHIpY2luZm8tPmVycjsKKworICAoKmNpbmZvLT5lcnItPm91dHB1dF9tZXNzYWdlKSAoY2luZm8pOworICBsb25nam1wKG15ZXJyLT5zZXRqbXBfYnVmZmVyLCAxKTsKK30KKworLyogQmFzZWQgb24gb3V0cHV0X21lc3NhZ2UoKSBpbiBqZXJyb3IuYyAqLworCitzdGF0aWMgdm9pZCBteV9vdXRwdXRfbWVzc2FnZShqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgICgqY2luZm8tPmVyci0+Zm9ybWF0X21lc3NhZ2UpIChjaW5mbywgZXJyU3RyKTsKK30KKworc3RhdGljIHZvaWQgbXlfZW1pdF9tZXNzYWdlKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IG1zZ19sZXZlbCkKK3sKKyAgbXlfZXJyb3JfcHRyIG15ZXJyID0gKG15X2Vycm9yX3B0ciljaW5mby0+ZXJyOworCisgIG15ZXJyLT5lbWl0X21lc3NhZ2UoY2luZm8sIG1zZ19sZXZlbCk7CisgIGlmIChtc2dfbGV2ZWwgPCAwKSB7CisgICAgbXllcnItPndhcm5pbmcgPSBUUlVFOworICAgIGlmIChteWVyci0+c3RvcE9uV2FybmluZykgbG9uZ2ptcChteWVyci0+c2V0am1wX2J1ZmZlciwgMSk7CisgIH0KK30KKworCisvKiBHbG9iYWwgc3RydWN0dXJlcywgbWFjcm9zLCBldGMuICovCisKK2VudW0geyBDT01QUkVTUyA9IDEsIERFQ09NUFJFU1MgPSAyIH07CisKK3R5cGVkZWYgc3RydWN0IF90amluc3RhbmNlIHsKKyAgc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IGNpbmZvOworICBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCBkaW5mbzsKKyAgc3RydWN0IG15X2Vycm9yX21nciBqZXJyOworICBpbnQgaW5pdCwgaGVhZGVyUmVhZDsKKyAgY2hhciBlcnJTdHJbSk1TR19MRU5HVEhfTUFYXTsKKyAgYm9vbGVhbiBpc0luc3RhbmNlRXJyb3I7Cit9IHRqaW5zdGFuY2U7CisKK3N0YXRpYyBjb25zdCBpbnQgcGl4ZWxzaXplW1RKX05VTVNBTVBdID0geyAzLCAzLCAzLCAxLCAzLCAzIH07CisKK3N0YXRpYyBjb25zdCBKWEZPUk1fQ09ERSB4Zm9ybXR5cGVzW1RKX05VTVhPUF0gPSB7CisgIEpYRk9STV9OT05FLCBKWEZPUk1fRkxJUF9ILCBKWEZPUk1fRkxJUF9WLCBKWEZPUk1fVFJBTlNQT1NFLAorICBKWEZPUk1fVFJBTlNWRVJTRSwgSlhGT1JNX1JPVF85MCwgSlhGT1JNX1JPVF8xODAsIEpYRk9STV9ST1RfMjcwCit9OworCisjZGVmaW5lIE5VTVNGICAxNgorc3RhdGljIGNvbnN0IHRqc2NhbGluZ2ZhY3RvciBzZltOVU1TRl0gPSB7CisgIHsgMiwgMSB9LAorICB7IDE1LCA4IH0sCisgIHsgNywgNCB9LAorICB7IDEzLCA4IH0sCisgIHsgMywgMiB9LAorICB7IDExLCA4IH0sCisgIHsgNSwgNCB9LAorICB7IDksIDggfSwKKyAgeyAxLCAxIH0sCisgIHsgNywgOCB9LAorICB7IDMsIDQgfSwKKyAgeyA1LCA4IH0sCisgIHsgMSwgMiB9LAorICB7IDMsIDggfSwKKyAgeyAxLCA0IH0sCisgIHsgMSwgOCB9Cit9OworCitzdGF0aWMgSl9DT0xPUl9TUEFDRSBwZjJjc1tUSl9OVU1QRl0gPSB7CisgIEpDU19FWFRfUkdCLCBKQ1NfRVhUX0JHUiwgSkNTX0VYVF9SR0JYLCBKQ1NfRVhUX0JHUlgsIEpDU19FWFRfWEJHUiwKKyAgSkNTX0VYVF9YUkdCLCBKQ1NfR1JBWVNDQUxFLCBKQ1NfRVhUX1JHQkEsIEpDU19FWFRfQkdSQSwgSkNTX0VYVF9BQkdSLAorICBKQ1NfRVhUX0FSR0IsIEpDU19DTVlLCit9OworCitzdGF0aWMgaW50IGNzMnBmW0pQRUdfTlVNQ1NdID0geworICBUSlBGX1VOS05PV04sIFRKUEZfR1JBWSwKKyNpZiBSR0JfUkVEID09IDAgJiYgUkdCX0dSRUVOID09IDEgJiYgUkdCX0JMVUUgPT0gMiAmJiBSR0JfUElYRUxTSVpFID09IDMKKyAgVEpQRl9SR0IsCisjZWxpZiBSR0JfUkVEID09IDIgJiYgUkdCX0dSRUVOID09IDEgJiYgUkdCX0JMVUUgPT0gMCAmJiBSR0JfUElYRUxTSVpFID09IDMKKyAgVEpQRl9CR1IsCisjZWxpZiBSR0JfUkVEID09IDAgJiYgUkdCX0dSRUVOID09IDEgJiYgUkdCX0JMVUUgPT0gMiAmJiBSR0JfUElYRUxTSVpFID09IDQKKyAgVEpQRl9SR0JYLAorI2VsaWYgUkdCX1JFRCA9PSAyICYmIFJHQl9HUkVFTiA9PSAxICYmIFJHQl9CTFVFID09IDAgJiYgUkdCX1BJWEVMU0laRSA9PSA0CisgIFRKUEZfQkdSWCwKKyNlbGlmIFJHQl9SRUQgPT0gMyAmJiBSR0JfR1JFRU4gPT0gMiAmJiBSR0JfQkxVRSA9PSAxICYmIFJHQl9QSVhFTFNJWkUgPT0gNAorICBUSlBGX1hCR1IsCisjZWxpZiBSR0JfUkVEID09IDEgJiYgUkdCX0dSRUVOID09IDIgJiYgUkdCX0JMVUUgPT0gMyAmJiBSR0JfUElYRUxTSVpFID09IDQKKyAgVEpQRl9YUkdCLAorI2VuZGlmCisgIFRKUEZfVU5LTk9XTiwgVEpQRl9DTVlLLCBUSlBGX1VOS05PV04sIFRKUEZfUkdCLCBUSlBGX1JHQlgsIFRKUEZfQkdSLAorICBUSlBGX0JHUlgsIFRKUEZfWEJHUiwgVEpQRl9YUkdCLCBUSlBGX1JHQkEsIFRKUEZfQkdSQSwgVEpQRl9BQkdSLCBUSlBGX0FSR0IsCisgIFRKUEZfVU5LTk9XTgorfTsKKworI2RlZmluZSBfdGhyb3dnKG0pIHsgXAorICBzbnByaW50ZihlcnJTdHIsIEpNU0dfTEVOR1RIX01BWCwgIiVzIiwgbSk7IFwKKyAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7IFwKK30KKyNkZWZpbmUgX3Rocm93dW5peChtKSB7IFwKKyAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICIlc1xuJXMiLCBtLCBzdHJlcnJvcihlcnJubykpOyBcCisgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OyBcCit9CisjZGVmaW5lIF90aHJvdyhtKSB7IFwKKyAgc25wcmludGYodGhpcy0+ZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICIlcyIsIG0pOyBcCisgIHRoaXMtPmlzSW5zdGFuY2VFcnJvciA9IFRSVUU7ICBfdGhyb3dnKG0pIFwKK30KKworI2RlZmluZSBnZXRpbnN0YW5jZShoYW5kbGUpIFwKKyAgdGppbnN0YW5jZSAqdGhpcyA9ICh0amluc3RhbmNlICopaGFuZGxlOyBcCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvID0gTlVMTDsgXAorICBqX2RlY29tcHJlc3NfcHRyIGRpbmZvID0gTlVMTDsgXAorICBcCisgIGlmICghdGhpcykgeyBcCisgICAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICJJbnZhbGlkIGhhbmRsZSIpOyBcCisgICAgcmV0dXJuIC0xOyBcCisgIH0gXAorICBjaW5mbyA9ICZ0aGlzLT5jaW5mbzsgIGRpbmZvID0gJnRoaXMtPmRpbmZvOyBcCisgIHRoaXMtPmplcnIud2FybmluZyA9IEZBTFNFOyBcCisgIHRoaXMtPmlzSW5zdGFuY2VFcnJvciA9IEZBTFNFOworCisjZGVmaW5lIGdldGNpbnN0YW5jZShoYW5kbGUpIFwKKyAgdGppbnN0YW5jZSAqdGhpcyA9ICh0amluc3RhbmNlICopaGFuZGxlOyBcCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvID0gTlVMTDsgXAorICBcCisgIGlmICghdGhpcykgeyBcCisgICAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICJJbnZhbGlkIGhhbmRsZSIpOyBcCisgICAgcmV0dXJuIC0xOyBcCisgIH0gXAorICBjaW5mbyA9ICZ0aGlzLT5jaW5mbzsgXAorICB0aGlzLT5qZXJyLndhcm5pbmcgPSBGQUxTRTsgXAorICB0aGlzLT5pc0luc3RhbmNlRXJyb3IgPSBGQUxTRTsKKworI2RlZmluZSBnZXRkaW5zdGFuY2UoaGFuZGxlKSBcCisgIHRqaW5zdGFuY2UgKnRoaXMgPSAodGppbnN0YW5jZSAqKWhhbmRsZTsgXAorICBqX2RlY29tcHJlc3NfcHRyIGRpbmZvID0gTlVMTDsgXAorICBcCisgIGlmICghdGhpcykgeyBcCisgICAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICJJbnZhbGlkIGhhbmRsZSIpOyBcCisgICAgcmV0dXJuIC0xOyBcCisgIH0gXAorICBkaW5mbyA9ICZ0aGlzLT5kaW5mbzsgXAorICB0aGlzLT5qZXJyLndhcm5pbmcgPSBGQUxTRTsgXAorICB0aGlzLT5pc0luc3RhbmNlRXJyb3IgPSBGQUxTRTsKKworc3RhdGljIGludCBnZXRQaXhlbEZvcm1hdChpbnQgcGl4ZWxTaXplLCBpbnQgZmxhZ3MpCit7CisgIGlmIChwaXhlbFNpemUgPT0gMSkgcmV0dXJuIFRKUEZfR1JBWTsKKyAgaWYgKHBpeGVsU2l6ZSA9PSAzKSB7CisgICAgaWYgKGZsYWdzICYgVEpfQkdSKSByZXR1cm4gVEpQRl9CR1I7CisgICAgZWxzZSByZXR1cm4gVEpQRl9SR0I7CisgIH0KKyAgaWYgKHBpeGVsU2l6ZSA9PSA0KSB7CisgICAgaWYgKGZsYWdzICYgVEpfQUxQSEFGSVJTVCkgeworICAgICAgaWYgKGZsYWdzICYgVEpfQkdSKSByZXR1cm4gVEpQRl9YQkdSOworICAgICAgZWxzZSByZXR1cm4gVEpQRl9YUkdCOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZmxhZ3MgJiBUSl9CR1IpIHJldHVybiBUSlBGX0JHUlg7CisgICAgICBlbHNlIHJldHVybiBUSlBGX1JHQlg7CisgICAgfQorICB9CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBzZXRDb21wRGVmYXVsdHMoc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0ICpjaW5mbywgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnNhbXAsIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKQoreworICBpbnQgcmV0dmFsID0gMDsKKyAgY2hhciAqZW52ID0gTlVMTDsKKworICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPSBwZjJjc1twaXhlbEZvcm1hdF07CisgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdOworICBqcGVnX3NldF9kZWZhdWx0cyhjaW5mbyk7CisKKyNpZm5kZWYgTk9fR0VURU5WCisgIGlmICgoZW52ID0gZ2V0ZW52KCJUSl9PUFRJTUlaRSIpKSAhPSBOVUxMICYmIHN0cmxlbihlbnYpID4gMCAmJgorICAgICAgIXN0cmNtcChlbnYsICIxIikpCisgICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisgIGlmICgoZW52ID0gZ2V0ZW52KCJUSl9BUklUSE1FVElDIikpICE9IE5VTEwgJiYgc3RybGVuKGVudikgPiAwICYmCisgICAgICAhc3RyY21wKGVudiwgIjEiKSkKKyAgICBjaW5mby0+YXJpdGhfY29kZSA9IFRSVUU7CisgIGlmICgoZW52ID0gZ2V0ZW52KCJUSl9SRVNUQVJUIikpICE9IE5VTEwgJiYgc3RybGVuKGVudikgPiAwKSB7CisgICAgaW50IHRlbXAgPSAtMTsKKyAgICBjaGFyIHRlbXBjID0gMDsKKworICAgIGlmIChzc2NhbmYoZW52LCAiJWQlYyIsICZ0ZW1wLCAmdGVtcGMpID49IDEgJiYgdGVtcCA+PSAwICYmCisgICAgICAgIHRlbXAgPD0gNjU1MzUpIHsKKyAgICAgIGlmICh0b3VwcGVyKHRlbXBjKSA9PSAnQicpIHsKKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSB0ZW1wOworICAgICAgICBjaW5mby0+cmVzdGFydF9pbl9yb3dzID0gMDsKKyAgICAgIH0gZWxzZQorICAgICAgICBjaW5mby0+cmVzdGFydF9pbl9yb3dzID0gdGVtcDsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIGlmIChqcGVnUXVhbCA+PSAwKSB7CisgICAganBlZ19zZXRfcXVhbGl0eShjaW5mbywganBlZ1F1YWwsIFRSVUUpOworICAgIGlmIChqcGVnUXVhbCA+PSA5NiB8fCBmbGFncyAmIFRKRkxBR19BQ0NVUkFURURDVCkKKyAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9JU0xPVzsKKyAgICBlbHNlCisgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkFTVEVTVDsKKyAgfQorICBpZiAoc3Vic2FtcCA9PSBUSlNBTVBfR1JBWSkKKyAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfR1JBWVNDQUxFKTsKKyAgZWxzZSBpZiAocGl4ZWxGb3JtYXQgPT0gVEpQRl9DTVlLKQorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ0NLKTsKKyAgZWxzZQorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7CisKKyAgaWYgKGZsYWdzICYgVEpGTEFHX1BST0dSRVNTSVZFKQorICAgIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uKGNpbmZvKTsKKyNpZm5kZWYgTk9fR0VURU5WCisgIGVsc2UgaWYgKChlbnYgPSBnZXRlbnYoIlRKX1BST0dSRVNTSVZFIikpICE9IE5VTEwgJiYgc3RybGVuKGVudikgPiAwICYmCisgICAgICAgICAgICFzdHJjbXAoZW52LCAiMSIpKQorICAgIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uKGNpbmZvKTsKKyNlbmRpZgorCisgIGNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IHRqTUNVV2lkdGhbc3Vic2FtcF0gLyA4OworICBjaW5mby0+Y29tcF9pbmZvWzFdLmhfc2FtcF9mYWN0b3IgPSAxOworICBjaW5mby0+Y29tcF9pbmZvWzJdLmhfc2FtcF9mYWN0b3IgPSAxOworICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzID4gMykKKyAgICBjaW5mby0+Y29tcF9pbmZvWzNdLmhfc2FtcF9mYWN0b3IgPSB0ak1DVVdpZHRoW3N1YnNhbXBdIC8gODsKKyAgY2luZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID0gdGpNQ1VIZWlnaHRbc3Vic2FtcF0gLyA4OworICBjaW5mby0+Y29tcF9pbmZvWzFdLnZfc2FtcF9mYWN0b3IgPSAxOworICBjaW5mby0+Y29tcF9pbmZvWzJdLnZfc2FtcF9mYWN0b3IgPSAxOworICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzID4gMykKKyAgICBjaW5mby0+Y29tcF9pbmZvWzNdLnZfc2FtcF9mYWN0b3IgPSB0ak1DVUhlaWdodFtzdWJzYW1wXSAvIDg7CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgaW50IGdldFN1YnNhbXAoal9kZWNvbXByZXNzX3B0ciBkaW5mbykKK3sKKyAgaW50IHJldHZhbCA9IC0xLCBpLCBrOworCisgIC8qIFRoZSBzYW1wbGluZyBmYWN0b3JzIGFjdHVhbGx5IGhhdmUgbm8gbWVhbmluZyB3aXRoIGdyYXlzY2FsZSBKUEVHIGZpbGVzLAorICAgICBhbmQgaW4gZmFjdCBpdCdzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIGdyYXlzY2FsZSBKUEVHcyB3aXRoIHNhbXBsaW5nCisgICAgIGZhY3RvcnMgPiAxIChldmVuIHRob3VnaCB0aG9zZSBzYW1wbGluZyBmYWN0b3JzIGFyZSBpZ25vcmVkIGJ5IHRoZQorICAgICBkZWNvbXByZXNzb3IuKSAgVGh1cywgd2UgbmVlZCB0byB0cmVhdCBncmF5c2NhbGUgYXMgYSBzcGVjaWFsIGNhc2UuICovCisgIGlmIChkaW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMSAmJiBkaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQorICAgIHJldHVybiBUSlNBTVBfR1JBWTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNU1VCT1BUOyBpKyspIHsKKyAgICBpZiAoZGluZm8tPm51bV9jb21wb25lbnRzID09IHBpeGVsc2l6ZVtpXSB8fAorICAgICAgICAoKGRpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ0NLIHx8CisgICAgICAgICAgZGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspICYmCisgICAgICAgICBwaXhlbHNpemVbaV0gPT0gMyAmJiBkaW5mby0+bnVtX2NvbXBvbmVudHMgPT0gNCkpIHsKKyAgICAgIGlmIChkaW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3IgPT0gdGpNQ1VXaWR0aFtpXSAvIDggJiYKKyAgICAgICAgICBkaW5mby0+Y29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgPT0gdGpNQ1VIZWlnaHRbaV0gLyA4KSB7CisgICAgICAgIGludCBtYXRjaCA9IDA7CisKKyAgICAgICAgZm9yIChrID0gMTsgayA8IGRpbmZvLT5udW1fY29tcG9uZW50czsgaysrKSB7CisgICAgICAgICAgaW50IGhyZWYgPSAxLCB2cmVmID0gMTsKKworICAgICAgICAgIGlmICgoZGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDQ0sgfHwKKyAgICAgICAgICAgICAgIGRpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSAmJiBrID09IDMpIHsKKyAgICAgICAgICAgIGhyZWYgPSB0ak1DVVdpZHRoW2ldIC8gODsgIHZyZWYgPSB0ak1DVUhlaWdodFtpXSAvIDg7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChkaW5mby0+Y29tcF9pbmZvW2tdLmhfc2FtcF9mYWN0b3IgPT0gaHJlZiAmJgorICAgICAgICAgICAgICBkaW5mby0+Y29tcF9pbmZvW2tdLnZfc2FtcF9mYWN0b3IgPT0gdnJlZikKKyAgICAgICAgICAgIG1hdGNoKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoID09IGRpbmZvLT5udW1fY29tcG9uZW50cyAtIDEpIHsKKyAgICAgICAgICByZXR2YWwgPSBpOyAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIEhhbmRsZSA0OjI6MiBhbmQgNDo0OjAgaW1hZ2VzIHdob3NlIHNhbXBsaW5nIGZhY3RvcnMgYXJlIHNwZWNpZmllZAorICAgICAgICAgaW4gbm9uLXN0YW5kYXJkIHdheXMuICovCisgICAgICBpZiAoZGluZm8tPmNvbXBfaW5mb1swXS5oX3NhbXBfZmFjdG9yID09IDIgJiYKKyAgICAgICAgICBkaW5mby0+Y29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgPT0gMiAmJgorICAgICAgICAgIChpID09IFRKU0FNUF80MjIgfHwgaSA9PSBUSlNBTVBfNDQwKSkgeworICAgICAgICBpbnQgbWF0Y2ggPSAwOworCisgICAgICAgIGZvciAoayA9IDE7IGsgPCBkaW5mby0+bnVtX2NvbXBvbmVudHM7IGsrKykgeworICAgICAgICAgIGludCBocmVmID0gdGpNQ1VIZWlnaHRbaV0gLyA4LCB2cmVmID0gdGpNQ1VXaWR0aFtpXSAvIDg7CisKKyAgICAgICAgICBpZiAoKGRpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ0NLIHx8CisgICAgICAgICAgICAgICBkaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgJiYgayA9PSAzKSB7CisgICAgICAgICAgICBocmVmID0gdnJlZiA9IDI7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChkaW5mby0+Y29tcF9pbmZvW2tdLmhfc2FtcF9mYWN0b3IgPT0gaHJlZiAmJgorICAgICAgICAgICAgICBkaW5mby0+Y29tcF9pbmZvW2tdLnZfc2FtcF9mYWN0b3IgPT0gdnJlZikKKyAgICAgICAgICAgIG1hdGNoKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoID09IGRpbmZvLT5udW1fY29tcG9uZW50cyAtIDEpIHsKKyAgICAgICAgICByZXR2YWwgPSBpOyAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBHZW5lcmFsIEFQSSBmdW5jdGlvbnMgKi8KKworRExMRVhQT1JUIGNoYXIgKnRqR2V0RXJyb3JTdHIyKHRqaGFuZGxlIGhhbmRsZSkKK3sKKyAgdGppbnN0YW5jZSAqdGhpcyA9ICh0amluc3RhbmNlICopaGFuZGxlOworCisgIGlmICh0aGlzICYmIHRoaXMtPmlzSW5zdGFuY2VFcnJvcikgeworICAgIHRoaXMtPmlzSW5zdGFuY2VFcnJvciA9IEZBTFNFOworICAgIHJldHVybiB0aGlzLT5lcnJTdHI7CisgIH0gZWxzZQorICAgIHJldHVybiBlcnJTdHI7Cit9CisKKworRExMRVhQT1JUIGNoYXIgKnRqR2V0RXJyb3JTdHIodm9pZCkKK3sKKyAgcmV0dXJuIGVyclN0cjsKK30KKworCitETExFWFBPUlQgaW50IHRqR2V0RXJyb3JDb2RlKHRqaGFuZGxlIGhhbmRsZSkKK3sKKyAgdGppbnN0YW5jZSAqdGhpcyA9ICh0amluc3RhbmNlICopaGFuZGxlOworCisgIGlmICh0aGlzICYmIHRoaXMtPmplcnIud2FybmluZykgcmV0dXJuIFRKRVJSX1dBUk5JTkc7CisgIGVsc2UgcmV0dXJuIFRKRVJSX0ZBVEFMOworfQorCisKK0RMTEVYUE9SVCBpbnQgdGpEZXN0cm95KHRqaGFuZGxlIGhhbmRsZSkKK3sKKyAgZ2V0aW5zdGFuY2UoaGFuZGxlKTsKKworICBpZiAoc2V0am1wKHRoaXMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHJldHVybiAtMTsKKyAgaWYgKHRoaXMtPmluaXQgJiBDT01QUkVTUykganBlZ19kZXN0cm95X2NvbXByZXNzKGNpbmZvKTsKKyAgaWYgKHRoaXMtPmluaXQgJiBERUNPTVBSRVNTKSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyhkaW5mbyk7CisgIGZyZWUodGhpcyk7CisgIHJldHVybiAwOworfQorCisKKy8qIFRoZXNlIGFyZSBleHBvc2VkIG1haW5seSBiZWNhdXNlIFdpbmRvd3MgY2FuJ3QgbWFsbG9jKCkgYW5kIGZyZWUoKSBhY3Jvc3MKKyAgIERMTCBib3VuZGFyaWVzIGV4Y2VwdCB3aGVuIHRoZSBDUlQgRExMIGlzIHVzZWQsIGFuZCB3ZSBkb24ndCB1c2UgdGhlIENSVCBETEwKKyAgIHdpdGggdHVyYm9qcGVnLmRsbCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiAgSG93ZXZlciwgdGhlc2UgZnVuY3Rpb25zCisgICBjYW4gcG90ZW50aWFsbHkgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgYnkgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4gKi8KKworRExMRVhQT1JUIHZvaWQgdGpGcmVlKHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgaWYgKGJ1ZikgZnJlZShidWYpOworfQorCisKK0RMTEVYUE9SVCB1bnNpZ25lZCBjaGFyICp0akFsbG9jKGludCBieXRlcykKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGJ5dGVzKTsKK30KKworCisvKiBDb21wcmVzc29yICAqLworCitzdGF0aWMgdGpoYW5kbGUgX3RqSW5pdENvbXByZXNzKHRqaW5zdGFuY2UgKnRoaXMpCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKKyAgdW5zaWduZWQgY2hhciAqYnVmID0gYnVmZmVyOworICB1bnNpZ25lZCBsb25nIHNpemUgPSAxOworCisgIC8qIFRoaXMgaXMgYWxzbyBzdHJhaWdodCBvdXQgb2YgZXhhbXBsZS50eHQgKi8KKyAgdGhpcy0+Y2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJnRoaXMtPmplcnIucHViKTsKKyAgdGhpcy0+amVyci5wdWIuZXJyb3JfZXhpdCA9IG15X2Vycm9yX2V4aXQ7CisgIHRoaXMtPmplcnIucHViLm91dHB1dF9tZXNzYWdlID0gbXlfb3V0cHV0X21lc3NhZ2U7CisgIHRoaXMtPmplcnIuZW1pdF9tZXNzYWdlID0gdGhpcy0+amVyci5wdWIuZW1pdF9tZXNzYWdlOworICB0aGlzLT5qZXJyLnB1Yi5lbWl0X21lc3NhZ2UgPSBteV9lbWl0X21lc3NhZ2U7CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIGlmICh0aGlzKSBmcmVlKHRoaXMpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAganBlZ19jcmVhdGVfY29tcHJlc3MoJnRoaXMtPmNpbmZvKTsKKyAgLyogTWFrZSBhbiBpbml0aWFsIGNhbGwgc28gaXQgd2lsbCBjcmVhdGUgdGhlIGRlc3RpbmF0aW9uIG1hbmFnZXIgKi8KKyAganBlZ19tZW1fZGVzdF90aigmdGhpcy0+Y2luZm8sICZidWYsICZzaXplLCAwKTsKKworICB0aGlzLT5pbml0IHw9IENPTVBSRVNTOworICByZXR1cm4gKHRqaGFuZGxlKXRoaXM7Cit9CisKK0RMTEVYUE9SVCB0amhhbmRsZSB0akluaXRDb21wcmVzcyh2b2lkKQoreworICB0amluc3RhbmNlICp0aGlzID0gTlVMTDsKKworICBpZiAoKHRoaXMgPSAodGppbnN0YW5jZSAqKW1hbGxvYyhzaXplb2YodGppbnN0YW5jZSkpKSA9PSBOVUxMKSB7CisgICAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsCisgICAgICAgICAgICAgInRqSW5pdENvbXByZXNzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBNRU1aRVJPKHRoaXMsIHNpemVvZih0amluc3RhbmNlKSk7CisgIHNucHJpbnRmKHRoaXMtPmVyclN0ciwgSk1TR19MRU5HVEhfTUFYLCAiTm8gZXJyb3IiKTsKKyAgcmV0dXJuIF90akluaXRDb21wcmVzcyh0aGlzKTsKK30KKworCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyB0akJ1ZlNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQganBlZ1N1YnNhbXApCit7CisgIHVuc2lnbmVkIGxvbmcgcmV0dmFsID0gMDsKKyAgaW50IG1jdXcsIG1jdWgsIGNocm9tYXNmOworCisgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSB8fCBqcGVnU3Vic2FtcCA8IDAgfHwganBlZ1N1YnNhbXAgPj0gTlVNU1VCT1BUKQorICAgIF90aHJvd2coInRqQnVmU2l6ZSgpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisKKyAgLyogVGhpcyBhbGxvd3MgZm9yIHJhcmUgY29ybmVyIGNhc2VzIGluIHdoaWNoIGEgSlBFRyBpbWFnZSBjYW4gYWN0dWFsbHkgYmUKKyAgICAgbGFyZ2VyIHRoYW4gdGhlIHVuY29tcHJlc3NlZCBpbnB1dCAod2Ugd291bGRuJ3QgbWVudGlvbiBpdCBpZiBpdCBoYWRuJ3QKKyAgICAgaGFwcGVuZWQgYmVmb3JlLikgKi8KKyAgbWN1dyA9IHRqTUNVV2lkdGhbanBlZ1N1YnNhbXBdOworICBtY3VoID0gdGpNQ1VIZWlnaHRbanBlZ1N1YnNhbXBdOworICBjaHJvbWFzZiA9IGpwZWdTdWJzYW1wID09IFRKU0FNUF9HUkFZID8gMCA6IDQgKiA2NCAvIChtY3V3ICogbWN1aCk7CisgIHJldHZhbCA9IFBBRCh3aWR0aCwgbWN1dykgKiBQQUQoaGVpZ2h0LCBtY3VoKSAqICgyICsgY2hyb21hc2YpICsgMjA0ODsKKworYmFpbG91dDoKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgVEpCVUZTSVpFKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgdW5zaWduZWQgbG9uZyByZXR2YWwgPSAwOworCisgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSkKKyAgICBfdGhyb3dnKCJUSkJVRlNJWkUoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIC8qIFRoaXMgYWxsb3dzIGZvciByYXJlIGNvcm5lciBjYXNlcyBpbiB3aGljaCBhIEpQRUcgaW1hZ2UgY2FuIGFjdHVhbGx5IGJlCisgICAgIGxhcmdlciB0aGFuIHRoZSB1bmNvbXByZXNzZWQgaW5wdXQgKHdlIHdvdWxkbid0IG1lbnRpb24gaXQgaWYgaXQgaGFkbid0CisgICAgIGhhcHBlbmVkIGJlZm9yZS4pICovCisgIHJldHZhbCA9IFBBRCh3aWR0aCwgMTYpICogUEFEKGhlaWdodCwgMTYpICogNiArIDIwNDg7CisKK2JhaWxvdXQ6CisgIHJldHVybiByZXR2YWw7Cit9CisKKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgdGpCdWZTaXplWVVWMihpbnQgd2lkdGgsIGludCBwYWQsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdWJzYW1wKQoreworICBpbnQgcmV0dmFsID0gMCwgbmMsIGk7CisKKyAgaWYgKHN1YnNhbXAgPCAwIHx8IHN1YnNhbXAgPj0gTlVNU1VCT1BUKQorICAgIF90aHJvd2coInRqQnVmU2l6ZVlVVjIoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIG5jID0gKHN1YnNhbXAgPT0gVEpTQU1QX0dSQVkgPyAxIDogMyk7CisgIGZvciAoaSA9IDA7IGkgPCBuYzsgaSsrKSB7CisgICAgaW50IHB3ID0gdGpQbGFuZVdpZHRoKGksIHdpZHRoLCBzdWJzYW1wKTsKKyAgICBpbnQgc3RyaWRlID0gUEFEKHB3LCBwYWQpOworICAgIGludCBwaCA9IHRqUGxhbmVIZWlnaHQoaSwgaGVpZ2h0LCBzdWJzYW1wKTsKKworICAgIGlmIChwdyA8IDAgfHwgcGggPCAwKSByZXR1cm4gLTE7CisgICAgZWxzZSByZXR2YWwgKz0gc3RyaWRlICogcGg7CisgIH0KKworYmFpbG91dDoKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgdGpCdWZTaXplWVVWKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXApCit7CisgIHJldHVybiB0akJ1ZlNpemVZVVYyKHdpZHRoLCA0LCBoZWlnaHQsIHN1YnNhbXApOworfQorCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyBUSkJVRlNJWkVZVVYoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCkKK3sKKyAgcmV0dXJuIHRqQnVmU2l6ZVlVVih3aWR0aCwgaGVpZ2h0LCBzdWJzYW1wKTsKK30KKworCitETExFWFBPUlQgaW50IHRqUGxhbmVXaWR0aChpbnQgY29tcG9uZW50SUQsIGludCB3aWR0aCwgaW50IHN1YnNhbXApCit7CisgIGludCBwdywgbmMsIHJldHZhbCA9IDA7CisKKyAgaWYgKHdpZHRoIDwgMSB8fCBzdWJzYW1wIDwgMCB8fCBzdWJzYW1wID49IFRKX05VTVNBTVApCisgICAgX3Rocm93ZygidGpQbGFuZVdpZHRoKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKyAgbmMgPSAoc3Vic2FtcCA9PSBUSlNBTVBfR1JBWSA/IDEgOiAzKTsKKyAgaWYgKGNvbXBvbmVudElEIDwgMCB8fCBjb21wb25lbnRJRCA+PSBuYykKKyAgICBfdGhyb3dnKCJ0alBsYW5lV2lkdGgoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIHB3ID0gUEFEKHdpZHRoLCB0ak1DVVdpZHRoW3N1YnNhbXBdIC8gOCk7CisgIGlmIChjb21wb25lbnRJRCA9PSAwKQorICAgIHJldHZhbCA9IHB3OworICBlbHNlCisgICAgcmV0dmFsID0gcHcgKiA4IC8gdGpNQ1VXaWR0aFtzdWJzYW1wXTsKKworYmFpbG91dDoKKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitETExFWFBPUlQgaW50IHRqUGxhbmVIZWlnaHQoaW50IGNvbXBvbmVudElELCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCkKK3sKKyAgaW50IHBoLCBuYywgcmV0dmFsID0gMDsKKworICBpZiAoaGVpZ2h0IDwgMSB8fCBzdWJzYW1wIDwgMCB8fCBzdWJzYW1wID49IFRKX05VTVNBTVApCisgICAgX3Rocm93ZygidGpQbGFuZUhlaWdodCgpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisgIG5jID0gKHN1YnNhbXAgPT0gVEpTQU1QX0dSQVkgPyAxIDogMyk7CisgIGlmIChjb21wb25lbnRJRCA8IDAgfHwgY29tcG9uZW50SUQgPj0gbmMpCisgICAgX3Rocm93ZygidGpQbGFuZUhlaWdodCgpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisKKyAgcGggPSBQQUQoaGVpZ2h0LCB0ak1DVUhlaWdodFtzdWJzYW1wXSAvIDgpOworICBpZiAoY29tcG9uZW50SUQgPT0gMCkKKyAgICByZXR2YWwgPSBwaDsKKyAgZWxzZQorICAgIHJldHZhbCA9IHBoICogOCAvIHRqTUNVSGVpZ2h0W3N1YnNhbXBdOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCisKK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIHRqUGxhbmVTaXplWVVWKGludCBjb21wb25lbnRJRCwgaW50IHdpZHRoLCBpbnQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHN1YnNhbXApCit7CisgIHVuc2lnbmVkIGxvbmcgcmV0dmFsID0gMDsKKyAgaW50IHB3LCBwaDsKKworICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgc3Vic2FtcCA8IDAgfHwgc3Vic2FtcCA+PSBOVU1TVUJPUFQpCisgICAgX3Rocm93ZygidGpQbGFuZVNpemVZVVYoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIHB3ID0gdGpQbGFuZVdpZHRoKGNvbXBvbmVudElELCB3aWR0aCwgc3Vic2FtcCk7CisgIHBoID0gdGpQbGFuZUhlaWdodChjb21wb25lbnRJRCwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgaWYgKHB3IDwgMCB8fCBwaCA8IDApIHJldHVybiAtMTsKKworICBpZiAoc3RyaWRlID09IDApIHN0cmlkZSA9IHB3OworICBlbHNlIHN0cmlkZSA9IGFicyhzdHJpZGUpOworCisgIHJldHZhbCA9IHN0cmlkZSAqIChwaCAtIDEpICsgcHc7CisKK2JhaWxvdXQ6CisgIHJldHVybiByZXR2YWw7Cit9CisKKworRExMRVhQT1JUIGludCB0akNvbXByZXNzMih0amhhbmRsZSBoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmpwZWdCdWYsIHVuc2lnbmVkIGxvbmcgKmpwZWdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQganBlZ1N1YnNhbXAsIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKQoreworICBpbnQgaSwgcmV0dmFsID0gMCwgYWxsb2MgPSAxOworICBKU0FNUFJPVyAqcm93X3BvaW50ZXIgPSBOVUxMOworCisgIGdldGNpbnN0YW5jZShoYW5kbGUpCisgIHRoaXMtPmplcnIuc3RvcE9uV2FybmluZyA9IChmbGFncyAmIFRKRkxBR19TVE9QT05XQVJOSU5HKSA/IFRSVUUgOiBGQUxTRTsKKyAgaWYgKCh0aGlzLT5pbml0ICYgQ09NUFJFU1MpID09IDApCisgICAgX3Rocm93KCJ0akNvbXByZXNzMigpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGNvbXByZXNzaW9uIik7CisKKyAgaWYgKHNyY0J1ZiA9PSBOVUxMIHx8IHdpZHRoIDw9IDAgfHwgcGl0Y2ggPCAwIHx8IGhlaWdodCA8PSAwIHx8CisgICAgICBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEpfTlVNUEYgfHwganBlZ0J1ZiA9PSBOVUxMIHx8CisgICAgICBqcGVnU2l6ZSA9PSBOVUxMIHx8IGpwZWdTdWJzYW1wIDwgMCB8fCBqcGVnU3Vic2FtcCA+PSBOVU1TVUJPUFQgfHwKKyAgICAgIGpwZWdRdWFsIDwgMCB8fCBqcGVnUXVhbCA+IDEwMCkKKyAgICBfdGhyb3coInRqQ29tcHJlc3MyKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworICBpZiAocGl0Y2ggPT0gMCkgcGl0Y2ggPSB3aWR0aCAqIHRqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XTsKKworICBpZiAoKHJvd19wb2ludGVyID0gKEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykgKiBoZWlnaHQpKSA9PSBOVUxMKQorICAgIF90aHJvdygidGpDb21wcmVzczIoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworCisgIGlmIChzZXRqbXAodGhpcy0+amVyci5zZXRqbXBfYnVmZmVyKSkgeworICAgIC8qIElmIHdlIGdldCBoZXJlLCB0aGUgSlBFRyBjb2RlIGhhcyBzaWduYWxlZCBhbiBlcnJvci4gKi8KKyAgICByZXR2YWwgPSAtMTsgIGdvdG8gYmFpbG91dDsKKyAgfQorCisgIGNpbmZvLT5pbWFnZV93aWR0aCA9IHdpZHRoOworICBjaW5mby0+aW1hZ2VfaGVpZ2h0ID0gaGVpZ2h0OworCisjaWZuZGVmIE5PX1BVVEVOVgorICBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VNTVgpIHB1dGVudigiSlNJTURfRk9SQ0VNTVg9MSIpOworICBlbHNlIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRVNTRSkgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRT0xIik7CisgIGVsc2UgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFU1NFMikgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRTI9MSIpOworI2VuZGlmCisKKyAgaWYgKGZsYWdzICYgVEpGTEFHX05PUkVBTExPQykgeworICAgIGFsbG9jID0gMDsgICpqcGVnU2l6ZSA9IHRqQnVmU2l6ZSh3aWR0aCwgaGVpZ2h0LCBqcGVnU3Vic2FtcCk7CisgIH0KKyAganBlZ19tZW1fZGVzdF90aihjaW5mbywganBlZ0J1ZiwganBlZ1NpemUsIGFsbG9jKTsKKyAgaWYgKHNldENvbXBEZWZhdWx0cyhjaW5mbywgcGl4ZWxGb3JtYXQsIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MpID09IC0xKQorICAgIHJldHVybiAtMTsKKworICBqcGVnX3N0YXJ0X2NvbXByZXNzKGNpbmZvLCBUUlVFKTsKKyAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgaWYgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKQorICAgICAgcm93X3BvaW50ZXJbaV0gPSAoSlNBTVBST1cpJnNyY0J1ZlsoaGVpZ2h0IC0gaSAtIDEpICogcGl0Y2hdOworICAgIGVsc2UKKyAgICAgIHJvd19wb2ludGVyW2ldID0gKEpTQU1QUk9XKSZzcmNCdWZbaSAqIHBpdGNoXTsKKyAgfQorICB3aGlsZSAoY2luZm8tPm5leHRfc2NhbmxpbmUgPCBjaW5mby0+aW1hZ2VfaGVpZ2h0KQorICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKGNpbmZvLCAmcm93X3BvaW50ZXJbY2luZm8tPm5leHRfc2NhbmxpbmVdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5pbWFnZV9oZWlnaHQgLSBjaW5mby0+bmV4dF9zY2FubGluZSk7CisgIGpwZWdfZmluaXNoX2NvbXByZXNzKGNpbmZvKTsKKworYmFpbG91dDoKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPiBDU1RBVEVfU1RBUlQpIGpwZWdfYWJvcnRfY29tcHJlc3MoY2luZm8pOworICBpZiAocm93X3BvaW50ZXIpIGZyZWUocm93X3BvaW50ZXIpOworICBpZiAodGhpcy0+amVyci53YXJuaW5nKSByZXR2YWwgPSAtMTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gRkFMU0U7CisgIHJldHVybiByZXR2YWw7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpDb21wcmVzcyh0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQganBlZ1N1YnNhbXAsIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKQoreworICBpbnQgcmV0dmFsID0gMDsKKyAgdW5zaWduZWQgbG9uZyBzaXplOworCisgIGlmIChmbGFncyAmIFRKX1lVVikgeworICAgIHNpemUgPSB0akJ1ZlNpemVZVVYod2lkdGgsIGhlaWdodCwganBlZ1N1YnNhbXApOworICAgIHJldHZhbCA9IHRqRW5jb2RlWVVWMihoYW5kbGUsIHNyY0J1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFBpeGVsRm9ybWF0KHBpeGVsU2l6ZSwgZmxhZ3MpLCBqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnU3Vic2FtcCwgZmxhZ3MpOworICB9IGVsc2UgeworICAgIHJldHZhbCA9IHRqQ29tcHJlc3MyKGhhbmRsZSwgc3JjQnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQaXhlbEZvcm1hdChwaXhlbFNpemUsIGZsYWdzKSwgJmpwZWdCdWYsICZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MgfCBUSkZMQUdfTk9SRUFMTE9DKTsKKyAgfQorICAqanBlZ1NpemUgPSBzaXplOworICByZXR1cm4gcmV0dmFsOworfQorCisKK0RMTEVYUE9SVCBpbnQgdGpFbmNvZGVZVVZQbGFuZXModGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGNoYXIgKipkc3RQbGFuZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3RyaWRlcywgaW50IHN1YnNhbXAsIGludCBmbGFncykKK3sKKyAgSlNBTVBST1cgKnJvd19wb2ludGVyID0gTlVMTDsKKyAgSlNBTVBMRSAqX3RtcGJ1ZltNQVhfQ09NUE9ORU5UU10sICpfdG1wYnVmMltNQVhfQ09NUE9ORU5UU107CisgIEpTQU1QUk9XICp0bXBidWZbTUFYX0NPTVBPTkVOVFNdLCAqdG1wYnVmMltNQVhfQ09NUE9ORU5UU107CisgIEpTQU1QUk9XICpvdXRidWZbTUFYX0NPTVBPTkVOVFNdOworICBpbnQgaSwgcmV0dmFsID0gMCwgcm93LCBwdzAsIHBoMCwgcHdbTUFYX0NPTVBPTkVOVFNdLCBwaFtNQVhfQ09NUE9ORU5UU107CisgIEpTQU1QTEUgKnB0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBnZXRjaW5zdGFuY2UoaGFuZGxlKTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gKGZsYWdzICYgVEpGTEFHX1NUT1BPTldBUk5JTkcpID8gVFJVRSA6IEZBTFNFOworCisgIGZvciAoaSA9IDA7IGkgPCBNQVhfQ09NUE9ORU5UUzsgaSsrKSB7CisgICAgdG1wYnVmW2ldID0gTlVMTDsgIF90bXBidWZbaV0gPSBOVUxMOworICAgIHRtcGJ1ZjJbaV0gPSBOVUxMOyAgX3RtcGJ1ZjJbaV0gPSBOVUxMOyAgb3V0YnVmW2ldID0gTlVMTDsKKyAgfQorCisgIGlmICgodGhpcy0+aW5pdCAmIENPTVBSRVNTKSA9PSAwKQorICAgIF90aHJvdygidGpFbmNvZGVZVVZQbGFuZXMoKTogSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBjb21wcmVzc2lvbiIpOworCisgIGlmIChzcmNCdWYgPT0gTlVMTCB8fCB3aWR0aCA8PSAwIHx8IHBpdGNoIDwgMCB8fCBoZWlnaHQgPD0gMCB8fAorICAgICAgcGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IFRKX05VTVBGIHx8ICFkc3RQbGFuZXMgfHwKKyAgICAgICFkc3RQbGFuZXNbMF0gfHwgc3Vic2FtcCA8IDAgfHwgc3Vic2FtcCA+PSBOVU1TVUJPUFQpCisgICAgX3Rocm93KCJ0akVuY29kZVlVVlBsYW5lcygpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisgIGlmIChzdWJzYW1wICE9IFRKU0FNUF9HUkFZICYmICghZHN0UGxhbmVzWzFdIHx8ICFkc3RQbGFuZXNbMl0pKQorICAgIF90aHJvdygidGpFbmNvZGVZVVZQbGFuZXMoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIGlmIChwaXhlbEZvcm1hdCA9PSBUSlBGX0NNWUspCisgICAgX3Rocm93KCJ0akVuY29kZVlVVlBsYW5lcygpOiBDYW5ub3QgZ2VuZXJhdGUgWVVWIGltYWdlcyBmcm9tIENNWUsgcGl4ZWxzIik7CisKKyAgaWYgKHBpdGNoID09IDApIHBpdGNoID0gd2lkdGggKiB0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgY2luZm8tPmltYWdlX3dpZHRoID0gd2lkdGg7CisgIGNpbmZvLT5pbWFnZV9oZWlnaHQgPSBoZWlnaHQ7CisKKyNpZm5kZWYgTk9fUFVURU5WCisgIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRU1NWCkgcHV0ZW52KCJKU0lNRF9GT1JDRU1NWD0xIik7CisgIGVsc2UgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFU1NFKSBwdXRlbnYoIkpTSU1EX0ZPUkNFU1NFPTEiKTsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VTU0UyKSBwdXRlbnYoIkpTSU1EX0ZPUkNFU1NFMj0xIik7CisjZW5kaWYKKworICBpZiAoc2V0Q29tcERlZmF1bHRzKGNpbmZvLCBwaXhlbEZvcm1hdCwgc3Vic2FtcCwgLTEsIGZsYWdzKSA9PSAtMSkgcmV0dXJuIC0xOworCisgIC8qIEV4ZWN1dGUgb25seSB0aGUgcGFydHMgb2YganBlZ19zdGFydF9jb21wcmVzcygpIHRoYXQgd2UgbmVlZC4gIElmIHdlCisgICAgIHdlcmUgdG8gY2FsbCB0aGUgd2hvbGUganBlZ19zdGFydF9jb21wcmVzcygpIGZ1bmN0aW9uLCB0aGVuIGl0IHdvdWxkIHRyeQorICAgICB0byB3cml0ZSB0aGUgZmlsZSBoZWFkZXJzLCB3aGljaCBjb3VsZCBvdmVyZmxvdyB0aGUgb3V0cHV0IGJ1ZmZlciBpZiB0aGUKKyAgICAgWVVWIGltYWdlIHdlcmUgdmVyeSBzbWFsbC4gKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIF90aHJvdygidGpFbmNvZGVZVVZQbGFuZXMoKTogbGlianBlZyBBUEkgaXMgaW4gdGhlIHdyb25nIHN0YXRlIik7CisgICgqY2luZm8tPmVyci0+cmVzZXRfZXJyb3JfbWdyKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIEZBTFNFKTsKKyAgamluaXRfY29sb3JfY29udmVydGVyKGNpbmZvKTsKKyAgamluaXRfZG93bnNhbXBsZXIoY2luZm8pOworICAoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKworICBwdzAgPSBQQUQod2lkdGgsIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3Rvcik7CisgIHBoMCA9IFBBRChoZWlnaHQsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisKKyAgaWYgKChyb3dfcG9pbnRlciA9IChKU0FNUFJPVyAqKW1hbGxvYyhzaXplb2YoSlNBTVBST1cpICogcGgwKSkgPT0gTlVMTCkKKyAgICBfdGhyb3coInRqRW5jb2RlWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgaWYgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKQorICAgICAgcm93X3BvaW50ZXJbaV0gPSAoSlNBTVBST1cpJnNyY0J1ZlsoaGVpZ2h0IC0gaSAtIDEpICogcGl0Y2hdOworICAgIGVsc2UKKyAgICAgIHJvd19wb2ludGVyW2ldID0gKEpTQU1QUk9XKSZzcmNCdWZbaSAqIHBpdGNoXTsKKyAgfQorICBpZiAoaGVpZ2h0IDwgcGgwKQorICAgIGZvciAoaSA9IGhlaWdodDsgaSA8IHBoMDsgaSsrKSByb3dfcG9pbnRlcltpXSA9IHJvd19wb2ludGVyW2hlaWdodCAtIDFdOworCisgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGkrKykgeworICAgIGNvbXBwdHIgPSAmY2luZm8tPmNvbXBfaW5mb1tpXTsKKyAgICBfdG1wYnVmW2ldID0gKEpTQU1QTEUgKiltYWxsb2MoCisgICAgICBQQUQoKGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpIC8KKyAgICAgICAgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCAzMikgKgorICAgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICsgMzIpOworICAgIGlmICghX3RtcGJ1ZltpXSkKKyAgICAgIF90aHJvdygidGpFbmNvZGVZVVZQbGFuZXMoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIHRtcGJ1ZltpXSA9CisgICAgICAoSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSAqIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgaWYgKCF0bXBidWZbaV0pCisgICAgICBfdGhyb3coInRqRW5jb2RlWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcjsgcm93KyspIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKl90bXBidWZfYWxpZ25lZCA9CisgICAgICAgICh1bnNpZ25lZCBjaGFyICopUEFEKChzaXplX3QpX3RtcGJ1ZltpXSwgMzIpOworCisgICAgICB0bXBidWZbaV1bcm93XSA9ICZfdG1wYnVmX2FsaWduZWRbCisgICAgICAgIFBBRCgoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkgLworICAgICAgICAgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgMzIpICogcm93XTsKKyAgICB9CisgICAgX3RtcGJ1ZjJbaV0gPQorICAgICAgKEpTQU1QTEUgKiltYWxsb2MoUEFEKGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsIDMyKSAqCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yICsgMzIpOworICAgIGlmICghX3RtcGJ1ZjJbaV0pCisgICAgICBfdGhyb3coInRqRW5jb2RlWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICB0bXBidWYyW2ldID0gKEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICBpZiAoIXRtcGJ1ZjJbaV0pCisgICAgICBfdGhyb3coInRqRW5jb2RlWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IHJvdysrKSB7CisgICAgICB1bnNpZ25lZCBjaGFyICpfdG1wYnVmMl9hbGlnbmVkID0KKyAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQQUQoKHNpemVfdClfdG1wYnVmMltpXSwgMzIpOworCisgICAgICB0bXBidWYyW2ldW3Jvd10gPQorICAgICAgICAmX3RtcGJ1ZjJfYWxpZ25lZFtQQUQoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwgMzIpICogcm93XTsKKyAgICB9CisgICAgcHdbaV0gPSBwdzAgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC8gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yOworICAgIHBoW2ldID0gcGgwICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAvIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgICBvdXRidWZbaV0gPSAoSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSAqIHBoW2ldKTsKKyAgICBpZiAoIW91dGJ1ZltpXSkKKyAgICAgIF90aHJvdygidGpFbmNvZGVZVVZQbGFuZXMoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIHB0ciA9IGRzdFBsYW5lc1tpXTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IHBoW2ldOyByb3crKykgeworICAgICAgb3V0YnVmW2ldW3Jvd10gPSBwdHI7CisgICAgICBwdHIgKz0gKHN0cmlkZXMgJiYgc3RyaWRlc1tpXSAhPSAwKSA/IHN0cmlkZXNbaV0gOiBwd1tpXTsKKyAgICB9CisgIH0KKworICBpZiAoc2V0am1wKHRoaXMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHsKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIEpQRUcgY29kZSBoYXMgc2lnbmFsZWQgYW4gZXJyb3IuICovCisgICAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7CisgIH0KKworICBmb3IgKHJvdyA9IDA7IHJvdyA8IHBoMDsgcm93ICs9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sICZyb3dfcG9pbnRlcltyb3ddLCB0bXBidWYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgIChjaW5mby0+ZG93bnNhbXBsZS0+ZG93bnNhbXBsZSkgKGNpbmZvLCB0bXBidWYsIDAsIHRtcGJ1ZjIsIDApOworICAgIGZvciAoaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgICAgaSsrLCBjb21wcHRyKyspCisgICAgICBqY29weV9zYW1wbGVfcm93cyh0bXBidWYyW2ldLCAwLCBvdXRidWZbaV0sCisgICAgICAgIHJvdyAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgLyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIHB3W2ldKTsKKyAgfQorICBjaW5mby0+bmV4dF9zY2FubGluZSArPSBoZWlnaHQ7CisgIGpwZWdfYWJvcnRfY29tcHJlc3MoY2luZm8pOworCitiYWlsb3V0OgorICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA+IENTVEFURV9TVEFSVCkganBlZ19hYm9ydF9jb21wcmVzcyhjaW5mbyk7CisgIGlmIChyb3dfcG9pbnRlcikgZnJlZShyb3dfcG9pbnRlcik7CisgIGZvciAoaSA9IDA7IGkgPCBNQVhfQ09NUE9ORU5UUzsgaSsrKSB7CisgICAgaWYgKHRtcGJ1ZltpXSAhPSBOVUxMKSBmcmVlKHRtcGJ1ZltpXSk7CisgICAgaWYgKF90bXBidWZbaV0gIT0gTlVMTCkgZnJlZShfdG1wYnVmW2ldKTsKKyAgICBpZiAodG1wYnVmMltpXSAhPSBOVUxMKSBmcmVlKHRtcGJ1ZjJbaV0pOworICAgIGlmIChfdG1wYnVmMltpXSAhPSBOVUxMKSBmcmVlKF90bXBidWYyW2ldKTsKKyAgICBpZiAob3V0YnVmW2ldICE9IE5VTEwpIGZyZWUob3V0YnVmW2ldKTsKKyAgfQorICBpZiAodGhpcy0+amVyci53YXJuaW5nKSByZXR2YWwgPSAtMTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gRkFMU0U7CisgIHJldHVybiByZXR2YWw7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpFbmNvZGVZVVYzKHRqaGFuZGxlIGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHBhZCwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCit7CisgIHVuc2lnbmVkIGNoYXIgKmRzdFBsYW5lc1szXTsKKyAgaW50IHB3MCwgcGgwLCBzdHJpZGVzWzNdLCByZXR2YWwgPSAtMTsKKyAgdGppbnN0YW5jZSAqdGhpcyA9ICh0amluc3RhbmNlICopaGFuZGxlOworCisgIGlmICghdGhpcykgX3Rocm93ZygidGpFbmNvZGVZVVYzKCk6IEludmFsaWQgaGFuZGxlIik7CisgIHRoaXMtPmlzSW5zdGFuY2VFcnJvciA9IEZBTFNFOworCisgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRzdEJ1ZiA9PSBOVUxMIHx8IHBhZCA8IDAgfHwgIWlzUG93MihwYWQpIHx8CisgICAgICBzdWJzYW1wIDwgMCB8fCBzdWJzYW1wID49IE5VTVNVQk9QVCkKKyAgICBfdGhyb3coInRqRW5jb2RlWVVWMygpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisKKyAgcHcwID0gdGpQbGFuZVdpZHRoKDAsIHdpZHRoLCBzdWJzYW1wKTsKKyAgcGgwID0gdGpQbGFuZUhlaWdodCgwLCBoZWlnaHQsIHN1YnNhbXApOworICBkc3RQbGFuZXNbMF0gPSBkc3RCdWY7CisgIHN0cmlkZXNbMF0gPSBQQUQocHcwLCBwYWQpOworICBpZiAoc3Vic2FtcCA9PSBUSlNBTVBfR1JBWSkgeworICAgIHN0cmlkZXNbMV0gPSBzdHJpZGVzWzJdID0gMDsKKyAgICBkc3RQbGFuZXNbMV0gPSBkc3RQbGFuZXNbMl0gPSBOVUxMOworICB9IGVsc2UgeworICAgIGludCBwdzEgPSB0alBsYW5lV2lkdGgoMSwgd2lkdGgsIHN1YnNhbXApOworICAgIGludCBwaDEgPSB0alBsYW5lSGVpZ2h0KDEsIGhlaWdodCwgc3Vic2FtcCk7CisKKyAgICBzdHJpZGVzWzFdID0gc3RyaWRlc1syXSA9IFBBRChwdzEsIHBhZCk7CisgICAgZHN0UGxhbmVzWzFdID0gZHN0UGxhbmVzWzBdICsgc3RyaWRlc1swXSAqIHBoMDsKKyAgICBkc3RQbGFuZXNbMl0gPSBkc3RQbGFuZXNbMV0gKyBzdHJpZGVzWzFdICogcGgxOworICB9CisKKyAgcmV0dXJuIHRqRW5jb2RlWVVWUGxhbmVzKGhhbmRsZSwgc3JjQnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RQbGFuZXMsIHN0cmlkZXMsIHN1YnNhbXAsIGZsYWdzKTsKKworYmFpbG91dDoKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMRVhQT1JUIGludCB0akVuY29kZVlVVjIodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKQoreworICByZXR1cm4gdGpFbmNvZGVZVVYzKGhhbmRsZSwgc3JjQnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgZHN0QnVmLCA0LCBzdWJzYW1wLCBmbGFncyk7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpFbmNvZGVZVVYodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3RCdWYsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpCit7CisgIHJldHVybiB0akVuY29kZVlVVjIoaGFuZGxlLCBzcmNCdWYsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIGdldFBpeGVsRm9ybWF0KHBpeGVsU2l6ZSwgZmxhZ3MpLCBkc3RCdWYsIHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworfQorCisKK0RMTEVYUE9SVCBpbnQgdGpDb21wcmVzc0Zyb21ZVVZQbGFuZXModGpoYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqc3JjUGxhbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGNvbnN0IGludCAqc3RyaWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwgaW50IGpwZWdRdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCit7CisgIGludCBpLCByb3csIHJldHZhbCA9IDAsIGFsbG9jID0gMTsKKyAgaW50IHB3W01BWF9DT01QT05FTlRTXSwgcGhbTUFYX0NPTVBPTkVOVFNdLCBpd1tNQVhfQ09NUE9ORU5UU10sCisgICAgdG1wYnVmc2l6ZSA9IDAsIHVzZXRtcGJ1ZiA9IDAsIHRoW01BWF9DT01QT05FTlRTXTsKKyAgSlNBTVBMRSAqX3RtcGJ1ZiA9IE5VTEwsICpwdHI7CisgIEpTQU1QUk9XICppbmJ1ZltNQVhfQ09NUE9ORU5UU10sICp0bXBidWZbTUFYX0NPTVBPTkVOVFNdOworCisgIGdldGNpbnN0YW5jZShoYW5kbGUpCisgIHRoaXMtPmplcnIuc3RvcE9uV2FybmluZyA9IChmbGFncyAmIFRKRkxBR19TVE9QT05XQVJOSU5HKSA/IFRSVUUgOiBGQUxTRTsKKworICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTVBPTkVOVFM7IGkrKykgeworICAgIHRtcGJ1ZltpXSA9IE5VTEw7ICBpbmJ1ZltpXSA9IE5VTEw7CisgIH0KKworICBpZiAoKHRoaXMtPmluaXQgJiBDT01QUkVTUykgPT0gMCkKKyAgICBfdGhyb3coInRqQ29tcHJlc3NGcm9tWVVWUGxhbmVzKCk6IEluc3RhbmNlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmb3IgY29tcHJlc3Npb24iKTsKKworICBpZiAoIXNyY1BsYW5lcyB8fCAhc3JjUGxhbmVzWzBdIHx8IHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwKKyAgICAgIHN1YnNhbXAgPCAwIHx8IHN1YnNhbXAgPj0gTlVNU1VCT1BUIHx8IGpwZWdCdWYgPT0gTlVMTCB8fAorICAgICAganBlZ1NpemUgPT0gTlVMTCB8fCBqcGVnUXVhbCA8IDAgfHwganBlZ1F1YWwgPiAxMDApCisgICAgX3Rocm93KCJ0akNvbXByZXNzRnJvbVlVVlBsYW5lcygpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisgIGlmIChzdWJzYW1wICE9IFRKU0FNUF9HUkFZICYmICghc3JjUGxhbmVzWzFdIHx8ICFzcmNQbGFuZXNbMl0pKQorICAgIF90aHJvdygidGpDb21wcmVzc0Zyb21ZVVZQbGFuZXMoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIGlmIChzZXRqbXAodGhpcy0+amVyci5zZXRqbXBfYnVmZmVyKSkgeworICAgIC8qIElmIHdlIGdldCBoZXJlLCB0aGUgSlBFRyBjb2RlIGhhcyBzaWduYWxlZCBhbiBlcnJvci4gKi8KKyAgICByZXR2YWwgPSAtMTsgIGdvdG8gYmFpbG91dDsKKyAgfQorCisgIGNpbmZvLT5pbWFnZV93aWR0aCA9IHdpZHRoOworICBjaW5mby0+aW1hZ2VfaGVpZ2h0ID0gaGVpZ2h0OworCisjaWZuZGVmIE5PX1BVVEVOVgorICBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VNTVgpIHB1dGVudigiSlNJTURfRk9SQ0VNTVg9MSIpOworICBlbHNlIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRVNTRSkgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRT0xIik7CisgIGVsc2UgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFU1NFMikgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRTI9MSIpOworI2VuZGlmCisKKyAgaWYgKGZsYWdzICYgVEpGTEFHX05PUkVBTExPQykgeworICAgIGFsbG9jID0gMDsgICpqcGVnU2l6ZSA9IHRqQnVmU2l6ZSh3aWR0aCwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgfQorICBqcGVnX21lbV9kZXN0X3RqKGNpbmZvLCBqcGVnQnVmLCBqcGVnU2l6ZSwgYWxsb2MpOworICBpZiAoc2V0Q29tcERlZmF1bHRzKGNpbmZvLCBUSlBGX1JHQiwgc3Vic2FtcCwganBlZ1F1YWwsIGZsYWdzKSA9PSAtMSkKKyAgICByZXR1cm4gLTE7CisgIGNpbmZvLT5yYXdfZGF0YV9pbiA9IFRSVUU7CisKKyAganBlZ19zdGFydF9jb21wcmVzcyhjaW5mbywgVFJVRSk7CisgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGkrKykgeworICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIgPSAmY2luZm8tPmNvbXBfaW5mb1tpXTsKKyAgICBpbnQgaWg7CisKKyAgICBpd1tpXSA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CisgICAgaWggPSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICogRENUU0laRTsKKyAgICBwd1tpXSA9IFBBRChjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcikgKgorICAgICAgICAgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAvIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcjsKKyAgICBwaFtpXSA9IFBBRChjaW5mby0+aW1hZ2VfaGVpZ2h0LCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpICoKKyAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgLyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgICAgaWYgKGl3W2ldICE9IHB3W2ldIHx8IGloICE9IHBoW2ldKSB1c2V0bXBidWYgPSAxOworICAgIHRoW2ldID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkU7CisgICAgdG1wYnVmc2l6ZSArPSBpd1tpXSAqIHRoW2ldOworICAgIGlmICgoaW5idWZbaV0gPSAoSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSAqIHBoW2ldKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvdygidGpDb21wcmVzc0Zyb21ZVVZQbGFuZXMoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIHB0ciA9IChKU0FNUExFICopc3JjUGxhbmVzW2ldOworICAgIGZvciAocm93ID0gMDsgcm93IDwgcGhbaV07IHJvdysrKSB7CisgICAgICBpbmJ1ZltpXVtyb3ddID0gcHRyOworICAgICAgcHRyICs9IChzdHJpZGVzICYmIHN0cmlkZXNbaV0gIT0gMCkgPyBzdHJpZGVzW2ldIDogcHdbaV07CisgICAgfQorICB9CisgIGlmICh1c2V0bXBidWYpIHsKKyAgICBpZiAoKF90bXBidWYgPSAoSlNBTVBMRSAqKW1hbGxvYyhzaXplb2YoSlNBTVBMRSkgKiB0bXBidWZzaXplKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvdygidGpDb21wcmVzc0Zyb21ZVVZQbGFuZXMoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIHB0ciA9IF90bXBidWY7CisgICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgaSsrKSB7CisgICAgICBpZiAoKHRtcGJ1ZltpXSA9IChKU0FNUFJPVyAqKW1hbGxvYyhzaXplb2YoSlNBTVBST1cpICogdGhbaV0pKSA9PSBOVUxMKQorICAgICAgICBfdGhyb3coInRqQ29tcHJlc3NGcm9tWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgdGhbaV07IHJvdysrKSB7CisgICAgICAgIHRtcGJ1ZltpXVtyb3ddID0gcHRyOworICAgICAgICBwdHIgKz0gaXdbaV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgZm9yIChyb3cgPSAwOyByb3cgPCAoaW50KWNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICAgICAgcm93ICs9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpIHsKKyAgICBKU0FNUEFSUkFZIHl1dnB0cltNQVhfQ09NUE9ORU5UU107CisgICAgaW50IGNyb3dbTUFYX0NPTVBPTkVOVFNdOworCisgICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgaSsrKSB7CisgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyID0gJmNpbmZvLT5jb21wX2luZm9baV07CisKKyAgICAgIGNyb3dbaV0gPSByb3cgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yIC8gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgICAgaWYgKHVzZXRtcGJ1ZikgeworICAgICAgICBpbnQgaiwgazsKKworICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUlOKHRoW2ldLCBwaFtpXSAtIGNyb3dbaV0pOyBqKyspIHsKKyAgICAgICAgICBtZW1jcHkodG1wYnVmW2ldW2pdLCBpbmJ1ZltpXVtjcm93W2ldICsgal0sIHB3W2ldKTsKKyAgICAgICAgICAvKiBEdXBsaWNhdGUgbGFzdCBzYW1wbGUgaW4gcm93IHRvIGZpbGwgb3V0IE1DVSAqLworICAgICAgICAgIGZvciAoayA9IHB3W2ldOyBrIDwgaXdbaV07IGsrKykKKyAgICAgICAgICAgIHRtcGJ1ZltpXVtqXVtrXSA9IHRtcGJ1ZltpXVtqXVtwd1tpXSAtIDFdOworICAgICAgICB9CisgICAgICAgIC8qIER1cGxpY2F0ZSBsYXN0IHJvdyB0byBmaWxsIG91dCBNQ1UgKi8KKyAgICAgICAgZm9yIChqID0gcGhbaV0gLSBjcm93W2ldOyBqIDwgdGhbaV07IGorKykKKyAgICAgICAgICBtZW1jcHkodG1wYnVmW2ldW2pdLCB0bXBidWZbaV1bcGhbaV0gLSBjcm93W2ldIC0gMV0sIGl3W2ldKTsKKyAgICAgICAgeXV2cHRyW2ldID0gdG1wYnVmW2ldOworICAgICAgfSBlbHNlCisgICAgICAgIHl1dnB0cltpXSA9ICZpbmJ1ZltpXVtjcm93W2ldXTsKKyAgICB9CisgICAganBlZ193cml0ZV9yYXdfZGF0YShjaW5mbywgeXV2cHRyLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKTsKKyAgfQorICBqcGVnX2ZpbmlzaF9jb21wcmVzcyhjaW5mbyk7CisKK2JhaWxvdXQ6CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID4gQ1NUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2NvbXByZXNzKGNpbmZvKTsKKyAgZm9yIChpID0gMDsgaSA8IE1BWF9DT01QT05FTlRTOyBpKyspIHsKKyAgICBpZiAodG1wYnVmW2ldKSBmcmVlKHRtcGJ1ZltpXSk7CisgICAgaWYgKGluYnVmW2ldKSBmcmVlKGluYnVmW2ldKTsKKyAgfQorICBpZiAoX3RtcGJ1ZikgZnJlZShfdG1wYnVmKTsKKyAgaWYgKHRoaXMtPmplcnIud2FybmluZykgcmV0dmFsID0gLTE7CisgIHRoaXMtPmplcnIuc3RvcE9uV2FybmluZyA9IEZBTFNFOworICByZXR1cm4gcmV0dmFsOworfQorCitETExFWFBPUlQgaW50IHRqQ29tcHJlc3NGcm9tWVVWKHRqaGFuZGxlIGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwYWQsIGludCBoZWlnaHQsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqanBlZ1NpemUsIGludCBqcGVnUXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNQbGFuZXNbM107CisgIGludCBwdzAsIHBoMCwgc3RyaWRlc1szXSwgcmV0dmFsID0gLTE7CisgIHRqaW5zdGFuY2UgKnRoaXMgPSAodGppbnN0YW5jZSAqKWhhbmRsZTsKKworICBpZiAoIXRoaXMpIF90aHJvd2coInRqQ29tcHJlc3NGcm9tWVVWKCk6IEludmFsaWQgaGFuZGxlIik7CisgIHRoaXMtPmlzSW5zdGFuY2VFcnJvciA9IEZBTFNFOworCisgIGlmIChzcmNCdWYgPT0gTlVMTCB8fCB3aWR0aCA8PSAwIHx8IHBhZCA8IDEgfHwgaGVpZ2h0IDw9IDAgfHwgc3Vic2FtcCA8IDAgfHwKKyAgICAgIHN1YnNhbXAgPj0gTlVNU1VCT1BUKQorICAgIF90aHJvdygidGpDb21wcmVzc0Zyb21ZVVYoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisgIHB3MCA9IHRqUGxhbmVXaWR0aCgwLCB3aWR0aCwgc3Vic2FtcCk7CisgIHBoMCA9IHRqUGxhbmVIZWlnaHQoMCwgaGVpZ2h0LCBzdWJzYW1wKTsKKyAgc3JjUGxhbmVzWzBdID0gc3JjQnVmOworICBzdHJpZGVzWzBdID0gUEFEKHB3MCwgcGFkKTsKKyAgaWYgKHN1YnNhbXAgPT0gVEpTQU1QX0dSQVkpIHsKKyAgICBzdHJpZGVzWzFdID0gc3RyaWRlc1syXSA9IDA7CisgICAgc3JjUGxhbmVzWzFdID0gc3JjUGxhbmVzWzJdID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICBpbnQgcHcxID0gdGpQbGFuZVdpZHRoKDEsIHdpZHRoLCBzdWJzYW1wKTsKKyAgICBpbnQgcGgxID0gdGpQbGFuZUhlaWdodCgxLCBoZWlnaHQsIHN1YnNhbXApOworCisgICAgc3RyaWRlc1sxXSA9IHN0cmlkZXNbMl0gPSBQQUQocHcxLCBwYWQpOworICAgIHNyY1BsYW5lc1sxXSA9IHNyY1BsYW5lc1swXSArIHN0cmlkZXNbMF0gKiBwaDA7CisgICAgc3JjUGxhbmVzWzJdID0gc3JjUGxhbmVzWzFdICsgc3RyaWRlc1sxXSAqIHBoMTsKKyAgfQorCisgIHJldHVybiB0akNvbXByZXNzRnJvbVlVVlBsYW5lcyhoYW5kbGUsIHNyY1BsYW5lcywgd2lkdGgsIHN0cmlkZXMsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXAsIGpwZWdCdWYsIGpwZWdTaXplLCBqcGVnUXVhbCwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCisKKy8qIERlY29tcHJlc3NvciAqLworCitzdGF0aWMgdGpoYW5kbGUgX3RqSW5pdERlY29tcHJlc3ModGppbnN0YW5jZSAqdGhpcykKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzFdOworCisgIC8qIFRoaXMgaXMgYWxzbyBzdHJhaWdodCBvdXQgb2YgZXhhbXBsZS50eHQgKi8KKyAgdGhpcy0+ZGluZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJnRoaXMtPmplcnIucHViKTsKKyAgdGhpcy0+amVyci5wdWIuZXJyb3JfZXhpdCA9IG15X2Vycm9yX2V4aXQ7CisgIHRoaXMtPmplcnIucHViLm91dHB1dF9tZXNzYWdlID0gbXlfb3V0cHV0X21lc3NhZ2U7CisgIHRoaXMtPmplcnIuZW1pdF9tZXNzYWdlID0gdGhpcy0+amVyci5wdWIuZW1pdF9tZXNzYWdlOworICB0aGlzLT5qZXJyLnB1Yi5lbWl0X21lc3NhZ2UgPSBteV9lbWl0X21lc3NhZ2U7CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIGlmICh0aGlzKSBmcmVlKHRoaXMpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAganBlZ19jcmVhdGVfZGVjb21wcmVzcygmdGhpcy0+ZGluZm8pOworICAvKiBNYWtlIGFuIGluaXRpYWwgY2FsbCBzbyBpdCB3aWxsIGNyZWF0ZSB0aGUgc291cmNlIG1hbmFnZXIgKi8KKyAganBlZ19tZW1fc3JjX3RqKCZ0aGlzLT5kaW5mbywgYnVmZmVyLCAxKTsKKworICB0aGlzLT5pbml0IHw9IERFQ09NUFJFU1M7CisgIHJldHVybiAodGpoYW5kbGUpdGhpczsKK30KKworRExMRVhQT1JUIHRqaGFuZGxlIHRqSW5pdERlY29tcHJlc3Modm9pZCkKK3sKKyAgdGppbnN0YW5jZSAqdGhpczsKKworICBpZiAoKHRoaXMgPSAodGppbnN0YW5jZSAqKW1hbGxvYyhzaXplb2YodGppbnN0YW5jZSkpKSA9PSBOVUxMKSB7CisgICAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsCisgICAgICAgICAgICAgInRqSW5pdERlY29tcHJlc3MoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIHJldHVybiBOVUxMOworICB9CisgIE1FTVpFUk8odGhpcywgc2l6ZW9mKHRqaW5zdGFuY2UpKTsKKyAgc25wcmludGYodGhpcy0+ZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICJObyBlcnJvciIpOworICByZXR1cm4gX3RqSW5pdERlY29tcHJlc3ModGhpcyk7Cit9CisKKworRExMRVhQT1JUIGludCB0akRlY29tcHJlc3NIZWFkZXIzKHRqaGFuZGxlIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCAqd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpoZWlnaHQsIGludCAqanBlZ1N1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpqcGVnQ29sb3JzcGFjZSkKK3sKKyAgaW50IHJldHZhbCA9IDA7CisKKyAgZ2V0ZGluc3RhbmNlKGhhbmRsZSk7CisgIGlmICgodGhpcy0+aW5pdCAmIERFQ09NUFJFU1MpID09IDApCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NIZWFkZXIzKCk6IEluc3RhbmNlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmb3IgZGVjb21wcmVzc2lvbiIpOworCisgIGlmIChqcGVnQnVmID09IE5VTEwgfHwganBlZ1NpemUgPD0gMCB8fCB3aWR0aCA9PSBOVUxMIHx8IGhlaWdodCA9PSBOVUxMIHx8CisgICAgICBqcGVnU3Vic2FtcCA9PSBOVUxMIHx8IGpwZWdDb2xvcnNwYWNlID09IE5VTEwpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NIZWFkZXIzKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworICBpZiAoc2V0am1wKHRoaXMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHsKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIEpQRUcgY29kZSBoYXMgc2lnbmFsZWQgYW4gZXJyb3IuICovCisgICAgcmV0dXJuIC0xOworICB9CisKKyAganBlZ19tZW1fc3JjX3RqKGRpbmZvLCBqcGVnQnVmLCBqcGVnU2l6ZSk7CisgIGpwZWdfcmVhZF9oZWFkZXIoZGluZm8sIFRSVUUpOworCisgICp3aWR0aCA9IGRpbmZvLT5pbWFnZV93aWR0aDsKKyAgKmhlaWdodCA9IGRpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICpqcGVnU3Vic2FtcCA9IGdldFN1YnNhbXAoZGluZm8pOworICBzd2l0Y2ggKGRpbmZvLT5qcGVnX2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0dSQVlTQ0FMRTogICpqcGVnQ29sb3JzcGFjZSA9IFRKQ1NfR1JBWTsgIGJyZWFrOworICBjYXNlIEpDU19SR0I6ICAgICAgICAqanBlZ0NvbG9yc3BhY2UgPSBUSkNTX1JHQjsgIGJyZWFrOworICBjYXNlIEpDU19ZQ2JDcjogICAgICAqanBlZ0NvbG9yc3BhY2UgPSBUSkNTX1lDYkNyOyAgYnJlYWs7CisgIGNhc2UgSkNTX0NNWUs6ICAgICAgICpqcGVnQ29sb3JzcGFjZSA9IFRKQ1NfQ01ZSzsgIGJyZWFrOworICBjYXNlIEpDU19ZQ0NLOiAgICAgICAqanBlZ0NvbG9yc3BhY2UgPSBUSkNTX1lDQ0s7ICBicmVhazsKKyAgZGVmYXVsdDogICAgICAgICAgICAgKmpwZWdDb2xvcnNwYWNlID0gLTE7ICBicmVhazsKKyAgfQorCisgIGpwZWdfYWJvcnRfZGVjb21wcmVzcyhkaW5mbyk7CisKKyAgaWYgKCpqcGVnU3Vic2FtcCA8IDApCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NIZWFkZXIzKCk6IENvdWxkIG5vdCBkZXRlcm1pbmUgc3Vic2FtcGxpbmcgdHlwZSBmb3IgSlBFRyBpbWFnZSIpOworICBpZiAoKmpwZWdDb2xvcnNwYWNlIDwgMCkKKyAgICBfdGhyb3coInRqRGVjb21wcmVzc0hlYWRlcjMoKTogQ291bGQgbm90IGRldGVybWluZSBjb2xvcnNwYWNlIG9mIEpQRUcgaW1hZ2UiKTsKKyAgaWYgKCp3aWR0aCA8IDEgfHwgKmhlaWdodCA8IDEpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NIZWFkZXIzKCk6IEludmFsaWQgZGF0YSByZXR1cm5lZCBpbiBoZWFkZXIiKTsKKworYmFpbG91dDoKKyAgaWYgKHRoaXMtPmplcnIud2FybmluZykgcmV0dmFsID0gLTE7CisgIHJldHVybiByZXR2YWw7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzSGVhZGVyMih0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgaW50ICp3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodCwgaW50ICpqcGVnU3Vic2FtcCkKK3sKKyAgaW50IGpwZWdDb2xvcnNwYWNlOworCisgIHJldHVybiB0akRlY29tcHJlc3NIZWFkZXIzKGhhbmRsZSwganBlZ0J1ZiwganBlZ1NpemUsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdTdWJzYW1wLCAmanBlZ0NvbG9yc3BhY2UpOworfQorCitETExFWFBPUlQgaW50IHRqRGVjb21wcmVzc0hlYWRlcih0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgKndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpoZWlnaHQpCit7CisgIGludCBqcGVnU3Vic2FtcDsKKworICByZXR1cm4gdGpEZWNvbXByZXNzSGVhZGVyMihoYW5kbGUsIGpwZWdCdWYsIGpwZWdTaXplLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmanBlZ1N1YnNhbXApOworfQorCisKK0RMTEVYUE9SVCB0anNjYWxpbmdmYWN0b3IgKnRqR2V0U2NhbGluZ0ZhY3RvcnMoaW50ICpudW1zY2FsaW5nZmFjdG9ycykKK3sKKyAgaWYgKG51bXNjYWxpbmdmYWN0b3JzID09IE5VTEwpIHsKKyAgICBzbnByaW50ZihlcnJTdHIsIEpNU0dfTEVOR1RIX01BWCwKKyAgICAgICAgICAgICAidGpHZXRTY2FsaW5nRmFjdG9ycygpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAqbnVtc2NhbGluZ2ZhY3RvcnMgPSBOVU1TRjsKKyAgcmV0dXJuICh0anNjYWxpbmdmYWN0b3IgKilzZjsKK30KKworCitETExFWFBPUlQgaW50IHRqRGVjb21wcmVzczIodGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKyAgSlNBTVBST1cgKnJvd19wb2ludGVyID0gTlVMTDsKKyAgaW50IGksIHJldHZhbCA9IDAsIGpwZWd3aWR0aCwganBlZ2hlaWdodCwgc2NhbGVkdywgc2NhbGVkaDsKKworICBnZXRkaW5zdGFuY2UoaGFuZGxlKTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gKGZsYWdzICYgVEpGTEFHX1NUT1BPTldBUk5JTkcpID8gVFJVRSA6IEZBTFNFOworICBpZiAoKHRoaXMtPmluaXQgJiBERUNPTVBSRVNTKSA9PSAwKQorICAgIF90aHJvdygidGpEZWNvbXByZXNzMigpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGRlY29tcHJlc3Npb24iKTsKKworICBpZiAoanBlZ0J1ZiA9PSBOVUxMIHx8IGpwZWdTaXplIDw9IDAgfHwgZHN0QnVmID09IE5VTEwgfHwgd2lkdGggPCAwIHx8CisgICAgICBwaXRjaCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEpfTlVNUEYpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3MyKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworI2lmbmRlZiBOT19QVVRFTlYKKyAgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFTU1YKSBwdXRlbnYoIkpTSU1EX0ZPUkNFTU1YPTEiKTsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VTU0UpIHB1dGVudigiSlNJTURfRk9SQ0VTU0U9MSIpOworICBlbHNlIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRVNTRTIpIHB1dGVudigiSlNJTURfRk9SQ0VTU0UyPTEiKTsKKyNlbmRpZgorCisgIGlmIChzZXRqbXAodGhpcy0+amVyci5zZXRqbXBfYnVmZmVyKSkgeworICAgIC8qIElmIHdlIGdldCBoZXJlLCB0aGUgSlBFRyBjb2RlIGhhcyBzaWduYWxlZCBhbiBlcnJvci4gKi8KKyAgICByZXR2YWwgPSAtMTsgIGdvdG8gYmFpbG91dDsKKyAgfQorCisgIGpwZWdfbWVtX3NyY190aihkaW5mbywganBlZ0J1ZiwganBlZ1NpemUpOworICBqcGVnX3JlYWRfaGVhZGVyKGRpbmZvLCBUUlVFKTsKKyAgdGhpcy0+ZGluZm8ub3V0X2NvbG9yX3NwYWNlID0gcGYyY3NbcGl4ZWxGb3JtYXRdOworICBpZiAoZmxhZ3MgJiBUSkZMQUdfRkFTVERDVCkgdGhpcy0+ZGluZm8uZGN0X21ldGhvZCA9IEpEQ1RfRkFTVEVTVDsKKyAgaWYgKGZsYWdzICYgVEpGTEFHX0ZBU1RVUFNBTVBMRSkgZGluZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPSBGQUxTRTsKKworICBqcGVnd2lkdGggPSBkaW5mby0+aW1hZ2Vfd2lkdGg7ICBqcGVnaGVpZ2h0ID0gZGluZm8tPmltYWdlX2hlaWdodDsKKyAgaWYgKHdpZHRoID09IDApIHdpZHRoID0ganBlZ3dpZHRoOworICBpZiAoaGVpZ2h0ID09IDApIGhlaWdodCA9IGpwZWdoZWlnaHQ7CisgIGZvciAoaSA9IDA7IGkgPCBOVU1TRjsgaSsrKSB7CisgICAgc2NhbGVkdyA9IFRKU0NBTEVEKGpwZWd3aWR0aCwgc2ZbaV0pOworICAgIHNjYWxlZGggPSBUSlNDQUxFRChqcGVnaGVpZ2h0LCBzZltpXSk7CisgICAgaWYgKHNjYWxlZHcgPD0gd2lkdGggJiYgc2NhbGVkaCA8PSBoZWlnaHQpCisgICAgICBicmVhazsKKyAgfQorICBpZiAoaSA+PSBOVU1TRikKKyAgICBfdGhyb3coInRqRGVjb21wcmVzczIoKTogQ291bGQgbm90IHNjYWxlIGRvd24gdG8gZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIik7CisgIHdpZHRoID0gc2NhbGVkdzsgIGhlaWdodCA9IHNjYWxlZGg7CisgIGRpbmZvLT5zY2FsZV9udW0gPSBzZltpXS5udW07CisgIGRpbmZvLT5zY2FsZV9kZW5vbSA9IHNmW2ldLmRlbm9tOworCisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcyhkaW5mbyk7CisgIGlmIChwaXRjaCA9PSAwKSBwaXRjaCA9IGRpbmZvLT5vdXRwdXRfd2lkdGggKiB0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CisKKyAgaWYgKChyb3dfcG9pbnRlciA9CisgICAgICAgKEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykgKiBkaW5mby0+b3V0cHV0X2hlaWdodCkpID09IE5VTEwpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3MyKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisgIGZvciAoaSA9IDA7IGkgPCAoaW50KWRpbmZvLT5vdXRwdXRfaGVpZ2h0OyBpKyspIHsKKyAgICBpZiAoZmxhZ3MgJiBUSkZMQUdfQk9UVE9NVVApCisgICAgICByb3dfcG9pbnRlcltpXSA9ICZkc3RCdWZbKGRpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gaSAtIDEpICogcGl0Y2hdOworICAgIGVsc2UKKyAgICAgIHJvd19wb2ludGVyW2ldID0gJmRzdEJ1ZltpICogcGl0Y2hdOworICB9CisgIHdoaWxlIChkaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgZGluZm8tPm91dHB1dF9oZWlnaHQpCisgICAganBlZ19yZWFkX3NjYW5saW5lcyhkaW5mbywgJnJvd19wb2ludGVyW2RpbmZvLT5vdXRwdXRfc2NhbmxpbmVdLAorICAgICAgICAgICAgICAgICAgICAgICAgZGluZm8tPm91dHB1dF9oZWlnaHQgLSBkaW5mby0+b3V0cHV0X3NjYW5saW5lKTsKKyAganBlZ19maW5pc2hfZGVjb21wcmVzcyhkaW5mbyk7CisKK2JhaWxvdXQ6CisgIGlmIChkaW5mby0+Z2xvYmFsX3N0YXRlID4gRFNUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2RlY29tcHJlc3MoZGluZm8pOworICBpZiAocm93X3BvaW50ZXIpIGZyZWUocm93X3BvaW50ZXIpOworICBpZiAodGhpcy0+amVyci53YXJuaW5nKSByZXR2YWwgPSAtMTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gRkFMU0U7CisgIHJldHVybiByZXR2YWw7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzKHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICBpZiAoZmxhZ3MgJiBUSl9ZVVYpCisgICAgcmV0dXJuIHRqRGVjb21wcmVzc1RvWVVWKGhhbmRsZSwganBlZ0J1ZiwganBlZ1NpemUsIGRzdEJ1ZiwgZmxhZ3MpOworICBlbHNlCisgICAgcmV0dXJuIHRqRGVjb21wcmVzczIoaGFuZGxlLCBqcGVnQnVmLCBqcGVnU2l6ZSwgZHN0QnVmLCB3aWR0aCwgcGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LCBnZXRQaXhlbEZvcm1hdChwaXhlbFNpemUsIGZsYWdzKSwgZmxhZ3MpOworfQorCisKK3N0YXRpYyBpbnQgc2V0RGVjb2RlRGVmYXVsdHMoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKmRpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxGb3JtYXQsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpCit7CisgIGludCBpOworCisgIGRpbmZvLT5zY2FsZV9udW0gPSBkaW5mby0+c2NhbGVfZGVub20gPSAxOworCisgIGlmIChzdWJzYW1wID09IFRKU0FNUF9HUkFZKSB7CisgICAgZGluZm8tPm51bV9jb21wb25lbnRzID0gZGluZm8tPmNvbXBzX2luX3NjYW4gPSAxOworICAgIGRpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKyAgfSBlbHNlIHsKKyAgICBkaW5mby0+bnVtX2NvbXBvbmVudHMgPSBkaW5mby0+Y29tcHNfaW5fc2NhbiA9IDM7CisgICAgZGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7CisgIH0KKworICBkaW5mby0+Y29tcF9pbmZvID0gKGpwZWdfY29tcG9uZW50X2luZm8gKikKKyAgICAoKmRpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cilkaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbmZvLT5udW1fY29tcG9uZW50cyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihqcGVnX2NvbXBvbmVudF9pbmZvKSk7CisKKyAgZm9yIChpID0gMDsgaSA8IGRpbmZvLT5udW1fY29tcG9uZW50czsgaSsrKSB7CisgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciA9ICZkaW5mby0+Y29tcF9pbmZvW2ldOworCisgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9IChpID09IDApID8gdGpNQ1VXaWR0aFtzdWJzYW1wXSAvIDggOiAxOworICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPSAoaSA9PSAwKSA/IHRqTUNVSGVpZ2h0W3N1YnNhbXBdIC8gOCA6IDE7CisgICAgY29tcHB0ci0+Y29tcG9uZW50X2luZGV4ID0gaTsKKyAgICBjb21wcHRyLT5jb21wb25lbnRfaWQgPSBpICsgMTsKKyAgICBjb21wcHRyLT5xdWFudF90Ymxfbm8gPSBjb21wcHRyLT5kY190Ymxfbm8gPQorICAgICAgY29tcHB0ci0+YWNfdGJsX25vID0gKGkgPT0gMCkgPyAwIDogMTsKKyAgICBkaW5mby0+Y3VyX2NvbXBfaW5mb1tpXSA9IGNvbXBwdHI7CisgIH0KKyAgZGluZm8tPmRhdGFfcHJlY2lzaW9uID0gODsKKyAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworICAgIGlmIChkaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gPT0gTlVMTCkKKyAgICAgIGRpbmZvLT5xdWFudF90YmxfcHRyc1tpXSA9IGpwZWdfYWxsb2NfcXVhbnRfdGFibGUoKGpfY29tbW9uX3B0cilkaW5mbyk7CisgIH0KKworICByZXR1cm4gMDsKK30KKworCitpbnQgbXlfcmVhZF9tYXJrZXJzKGpfZGVjb21wcmVzc19wdHIgZGluZm8pCit7CisgIHJldHVybiBKUEVHX1JFQUNIRURfU09TOworfQorCit2b2lkIG15X3Jlc2V0X21hcmtlcl9yZWFkZXIoal9kZWNvbXByZXNzX3B0ciBkaW5mbykKK3sKK30KKworRExMRVhQT1JUIGludCB0akRlY29kZVlVVlBsYW5lcyh0amhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipzcmNQbGFuZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqc3RyaWRlcywgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IGZsYWdzKQoreworICBKU0FNUFJPVyAqcm93X3BvaW50ZXIgPSBOVUxMOworICBKU0FNUExFICpfdG1wYnVmW01BWF9DT01QT05FTlRTXTsKKyAgSlNBTVBST1cgKnRtcGJ1ZltNQVhfQ09NUE9ORU5UU10sICppbmJ1ZltNQVhfQ09NUE9ORU5UU107CisgIGludCBpLCByZXR2YWwgPSAwLCByb3csIHB3MCwgcGgwLCBwd1tNQVhfQ09NUE9ORU5UU10sIHBoW01BWF9DT01QT05FTlRTXTsKKyAgSlNBTVBMRSAqcHRyOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBpbnQgKCpvbGRfcmVhZF9tYXJrZXJzKSAoal9kZWNvbXByZXNzX3B0cik7CisgIHZvaWQgKCpvbGRfcmVzZXRfbWFya2VyX3JlYWRlcikgKGpfZGVjb21wcmVzc19wdHIpOworCisgIGdldGRpbnN0YW5jZShoYW5kbGUpOworICB0aGlzLT5qZXJyLnN0b3BPbldhcm5pbmcgPSAoZmxhZ3MgJiBUSkZMQUdfU1RPUE9OV0FSTklORykgPyBUUlVFIDogRkFMU0U7CisKKyAgZm9yIChpID0gMDsgaSA8IE1BWF9DT01QT05FTlRTOyBpKyspIHsKKyAgICB0bXBidWZbaV0gPSBOVUxMOyAgX3RtcGJ1ZltpXSA9IE5VTEw7ICBpbmJ1ZltpXSA9IE5VTEw7CisgIH0KKworICBpZiAoKHRoaXMtPmluaXQgJiBERUNPTVBSRVNTKSA9PSAwKQorICAgIF90aHJvdygidGpEZWNvZGVZVVZQbGFuZXMoKTogSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBkZWNvbXByZXNzaW9uIik7CisKKyAgaWYgKCFzcmNQbGFuZXMgfHwgIXNyY1BsYW5lc1swXSB8fCBzdWJzYW1wIDwgMCB8fCBzdWJzYW1wID49IE5VTVNVQk9QVCB8fAorICAgICAgZHN0QnVmID09IE5VTEwgfHwgd2lkdGggPD0gMCB8fCBwaXRjaCA8IDAgfHwgaGVpZ2h0IDw9IDAgfHwKKyAgICAgIHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBUSl9OVU1QRikKKyAgICBfdGhyb3coInRqRGVjb2RlWVVWUGxhbmVzKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKyAgaWYgKHN1YnNhbXAgIT0gVEpTQU1QX0dSQVkgJiYgKCFzcmNQbGFuZXNbMV0gfHwgIXNyY1BsYW5lc1syXSkpCisgICAgX3Rocm93KCJ0akRlY29kZVlVVlBsYW5lcygpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgaWYgKHBpeGVsRm9ybWF0ID09IFRKUEZfQ01ZSykKKyAgICBfdGhyb3coInRqRGVjb2RlWVVWUGxhbmVzKCk6IENhbm5vdCBkZWNvZGUgWVVWIGltYWdlcyBpbnRvIENNWUsgcGl4ZWxzLiIpOworCisgIGlmIChwaXRjaCA9PSAwKSBwaXRjaCA9IHdpZHRoICogdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdOworICBkaW5mby0+aW1hZ2Vfd2lkdGggPSB3aWR0aDsKKyAgZGluZm8tPmltYWdlX2hlaWdodCA9IGhlaWdodDsKKworI2lmbmRlZiBOT19QVVRFTlYKKyAgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFTU1YKSBwdXRlbnYoIkpTSU1EX0ZPUkNFTU1YPTEiKTsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VTU0UpIHB1dGVudigiSlNJTURfRk9SQ0VTU0U9MSIpOworICBlbHNlIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRVNTRTIpIHB1dGVudigiSlNJTURfRk9SQ0VTU0UyPTEiKTsKKyNlbmRpZgorCisgIGlmIChzZXREZWNvZGVEZWZhdWx0cyhkaW5mbywgcGl4ZWxGb3JtYXQsIHN1YnNhbXAsIGZsYWdzKSA9PSAtMSkgeworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisgIG9sZF9yZWFkX21hcmtlcnMgPSBkaW5mby0+bWFya2VyLT5yZWFkX21hcmtlcnM7CisgIGRpbmZvLT5tYXJrZXItPnJlYWRfbWFya2VycyA9IG15X3JlYWRfbWFya2VyczsKKyAgb2xkX3Jlc2V0X21hcmtlcl9yZWFkZXIgPSBkaW5mby0+bWFya2VyLT5yZXNldF9tYXJrZXJfcmVhZGVyOworICBkaW5mby0+bWFya2VyLT5yZXNldF9tYXJrZXJfcmVhZGVyID0gbXlfcmVzZXRfbWFya2VyX3JlYWRlcjsKKyAganBlZ19yZWFkX2hlYWRlcihkaW5mbywgVFJVRSk7CisgIGRpbmZvLT5tYXJrZXItPnJlYWRfbWFya2VycyA9IG9sZF9yZWFkX21hcmtlcnM7CisgIGRpbmZvLT5tYXJrZXItPnJlc2V0X21hcmtlcl9yZWFkZXIgPSBvbGRfcmVzZXRfbWFya2VyX3JlYWRlcjsKKworICB0aGlzLT5kaW5mby5vdXRfY29sb3Jfc3BhY2UgPSBwZjJjc1twaXhlbEZvcm1hdF07CisgIGlmIChmbGFncyAmIFRKRkxBR19GQVNURENUKSB0aGlzLT5kaW5mby5kY3RfbWV0aG9kID0gSkRDVF9GQVNURVNUOworICBkaW5mby0+ZG9fZmFuY3lfdXBzYW1wbGluZyA9IEZBTFNFOworICBkaW5mby0+U2UgPSBEQ1RTSVpFMiAtIDE7CisgIGppbml0X21hc3Rlcl9kZWNvbXByZXNzKGRpbmZvKTsKKyAgKCpkaW5mby0+dXBzYW1wbGUtPnN0YXJ0X3Bhc3MpIChkaW5mbyk7CisKKyAgcHcwID0gUEFEKHdpZHRoLCBkaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpOworICBwaDAgPSBQQUQoaGVpZ2h0LCBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworCisgIGlmIChwaXRjaCA9PSAwKSBwaXRjaCA9IGRpbmZvLT5vdXRwdXRfd2lkdGggKiB0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CisKKyAgaWYgKChyb3dfcG9pbnRlciA9IChKU0FNUFJPVyAqKW1hbGxvYyhzaXplb2YoSlNBTVBST1cpICogcGgwKSkgPT0gTlVMTCkKKyAgICBfdGhyb3coInRqRGVjb2RlWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgaWYgKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKQorICAgICAgcm93X3BvaW50ZXJbaV0gPSAmZHN0QnVmWyhoZWlnaHQgLSBpIC0gMSkgKiBwaXRjaF07CisgICAgZWxzZQorICAgICAgcm93X3BvaW50ZXJbaV0gPSAmZHN0QnVmW2kgKiBwaXRjaF07CisgIH0KKyAgaWYgKGhlaWdodCA8IHBoMCkKKyAgICBmb3IgKGkgPSBoZWlnaHQ7IGkgPCBwaDA7IGkrKykgcm93X3BvaW50ZXJbaV0gPSByb3dfcG9pbnRlcltoZWlnaHQgLSAxXTsKKworICBmb3IgKGkgPSAwOyBpIDwgZGluZm8tPm51bV9jb21wb25lbnRzOyBpKyspIHsKKyAgICBjb21wcHRyID0gJmRpbmZvLT5jb21wX2luZm9baV07CisgICAgX3RtcGJ1ZltpXSA9CisgICAgICAoSlNBTVBMRSAqKW1hbGxvYyhQQUQoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwgMzIpICoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKyAzMik7CisgICAgaWYgKCFfdG1wYnVmW2ldKQorICAgICAgX3Rocm93KCJ0akRlY29kZVlVVlBsYW5lcygpOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisgICAgdG1wYnVmW2ldID0gKEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICBpZiAoIXRtcGJ1ZltpXSkKKyAgICAgIF90aHJvdygidGpEZWNvZGVZVVZQbGFuZXMoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIGZvciAocm93ID0gMDsgcm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgcm93KyspIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKl90bXBidWZfYWxpZ25lZCA9CisgICAgICAgICh1bnNpZ25lZCBjaGFyICopUEFEKChzaXplX3QpX3RtcGJ1ZltpXSwgMzIpOworCisgICAgICB0bXBidWZbaV1bcm93XSA9CisgICAgICAgICZfdG1wYnVmX2FsaWduZWRbUEFEKGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsIDMyKSAqIHJvd107CisgICAgfQorICAgIHB3W2ldID0gcHcwICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAvIGRpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcjsKKyAgICBwaFtpXSA9IHBoMCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgLyBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgICAgaW5idWZbaV0gPSAoSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSAqIHBoW2ldKTsKKyAgICBpZiAoIWluYnVmW2ldKQorICAgICAgX3Rocm93KCJ0akRlY29kZVlVVlBsYW5lcygpOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisgICAgcHRyID0gKEpTQU1QTEUgKilzcmNQbGFuZXNbaV07CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBwaFtpXTsgcm93KyspIHsKKyAgICAgIGluYnVmW2ldW3Jvd10gPSBwdHI7CisgICAgICBwdHIgKz0gKHN0cmlkZXMgJiYgc3RyaWRlc1tpXSAhPSAwKSA/IHN0cmlkZXNbaV0gOiBwd1tpXTsKKyAgICB9CisgIH0KKworICBpZiAoc2V0am1wKHRoaXMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHsKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIEpQRUcgY29kZSBoYXMgc2lnbmFsZWQgYW4gZXJyb3IuICovCisgICAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7CisgIH0KKworICBmb3IgKHJvdyA9IDA7IHJvdyA8IHBoMDsgcm93ICs9IGRpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgIEpESU1FTlNJT04gaW5yb3cgPSAwLCBvdXRyb3cgPSAwOworCisgICAgZm9yIChpID0gMCwgY29tcHB0ciA9IGRpbmZvLT5jb21wX2luZm87IGkgPCBkaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgICBpKyssIGNvbXBwdHIrKykKKyAgICAgIGpjb3B5X3NhbXBsZV9yb3dzKGluYnVmW2ldLAorICAgICAgICByb3cgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yIC8gZGluZm8tPm1heF92X3NhbXBfZmFjdG9yLCB0bXBidWZbaV0sIDAsCisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIHB3W2ldKTsKKyAgICAoZGluZm8tPnVwc2FtcGxlLT51cHNhbXBsZSkgKGRpbmZvLCB0bXBidWYsICZpbnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgJnJvd19wb2ludGVyW3Jvd10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cm93LCBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICB9CisgIGpwZWdfYWJvcnRfZGVjb21wcmVzcyhkaW5mbyk7CisKK2JhaWxvdXQ6CisgIGlmIChkaW5mby0+Z2xvYmFsX3N0YXRlID4gRFNUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2RlY29tcHJlc3MoZGluZm8pOworICBpZiAocm93X3BvaW50ZXIpIGZyZWUocm93X3BvaW50ZXIpOworICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTVBPTkVOVFM7IGkrKykgeworICAgIGlmICh0bXBidWZbaV0gIT0gTlVMTCkgZnJlZSh0bXBidWZbaV0pOworICAgIGlmIChfdG1wYnVmW2ldICE9IE5VTEwpIGZyZWUoX3RtcGJ1ZltpXSk7CisgICAgaWYgKGluYnVmW2ldICE9IE5VTEwpIGZyZWUoaW5idWZbaV0pOworICB9CisgIGlmICh0aGlzLT5qZXJyLndhcm5pbmcpIHJldHZhbCA9IC0xOworICB0aGlzLT5qZXJyLnN0b3BPbldhcm5pbmcgPSBGQUxTRTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMRVhQT1JUIGludCB0akRlY29kZVlVVih0amhhbmRsZSBoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhZCwgaW50IHN1YnNhbXAsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNQbGFuZXNbM107CisgIGludCBwdzAsIHBoMCwgc3RyaWRlc1szXSwgcmV0dmFsID0gLTE7CisgIHRqaW5zdGFuY2UgKnRoaXMgPSAodGppbnN0YW5jZSAqKWhhbmRsZTsKKworICBpZiAoIXRoaXMpIF90aHJvd2coInRqRGVjb2RlWVVWKCk6IEludmFsaWQgaGFuZGxlIik7CisgIHRoaXMtPmlzSW5zdGFuY2VFcnJvciA9IEZBTFNFOworCisgIGlmIChzcmNCdWYgPT0gTlVMTCB8fCBwYWQgPCAwIHx8ICFpc1BvdzIocGFkKSB8fCBzdWJzYW1wIDwgMCB8fAorICAgICAgc3Vic2FtcCA+PSBOVU1TVUJPUFQgfHwgd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKKyAgICBfdGhyb3coInRqRGVjb2RlWVVWKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworICBwdzAgPSB0alBsYW5lV2lkdGgoMCwgd2lkdGgsIHN1YnNhbXApOworICBwaDAgPSB0alBsYW5lSGVpZ2h0KDAsIGhlaWdodCwgc3Vic2FtcCk7CisgIHNyY1BsYW5lc1swXSA9IHNyY0J1ZjsKKyAgc3RyaWRlc1swXSA9IFBBRChwdzAsIHBhZCk7CisgIGlmIChzdWJzYW1wID09IFRKU0FNUF9HUkFZKSB7CisgICAgc3RyaWRlc1sxXSA9IHN0cmlkZXNbMl0gPSAwOworICAgIHNyY1BsYW5lc1sxXSA9IHNyY1BsYW5lc1syXSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgaW50IHB3MSA9IHRqUGxhbmVXaWR0aCgxLCB3aWR0aCwgc3Vic2FtcCk7CisgICAgaW50IHBoMSA9IHRqUGxhbmVIZWlnaHQoMSwgaGVpZ2h0LCBzdWJzYW1wKTsKKworICAgIHN0cmlkZXNbMV0gPSBzdHJpZGVzWzJdID0gUEFEKHB3MSwgcGFkKTsKKyAgICBzcmNQbGFuZXNbMV0gPSBzcmNQbGFuZXNbMF0gKyBzdHJpZGVzWzBdICogcGgwOworICAgIHNyY1BsYW5lc1syXSA9IHNyY1BsYW5lc1sxXSArIHN0cmlkZXNbMV0gKiBwaDE7CisgIH0KKworICByZXR1cm4gdGpEZWNvZGVZVVZQbGFuZXMoaGFuZGxlLCBzcmNQbGFuZXMsIHN0cmlkZXMsIHN1YnNhbXAsIGRzdEJ1Ziwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgZmxhZ3MpOworCitiYWlsb3V0OgorICByZXR1cm4gcmV0dmFsOworfQorCitETExFWFBPUlQgaW50IHRqRGVjb21wcmVzc1RvWVVWUGxhbmVzKHRqaGFuZGxlIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmRzdFBsYW5lcywgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN0cmlkZXMsIGludCBoZWlnaHQsIGludCBmbGFncykKK3sKKyAgaW50IGksIHNmaSwgcm93LCByZXR2YWwgPSAwOworICBpbnQganBlZ3dpZHRoLCBqcGVnaGVpZ2h0LCBqcGVnU3Vic2FtcCwgc2NhbGVkdywgc2NhbGVkaDsKKyAgaW50IHB3W01BWF9DT01QT05FTlRTXSwgcGhbTUFYX0NPTVBPTkVOVFNdLCBpd1tNQVhfQ09NUE9ORU5UU10sCisgICAgdG1wYnVmc2l6ZSA9IDAsIHVzZXRtcGJ1ZiA9IDAsIHRoW01BWF9DT01QT05FTlRTXTsKKyAgSlNBTVBMRSAqX3RtcGJ1ZiA9IE5VTEwsICpwdHI7CisgIEpTQU1QUk9XICpvdXRidWZbTUFYX0NPTVBPTkVOVFNdLCAqdG1wYnVmW01BWF9DT01QT05FTlRTXTsKKyAgaW50IGRjdHNpemU7CisKKyAgZ2V0ZGluc3RhbmNlKGhhbmRsZSk7CisgIHRoaXMtPmplcnIuc3RvcE9uV2FybmluZyA9IChmbGFncyAmIFRKRkxBR19TVE9QT05XQVJOSU5HKSA/IFRSVUUgOiBGQUxTRTsKKworICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTVBPTkVOVFM7IGkrKykgeworICAgIHRtcGJ1ZltpXSA9IE5VTEw7ICBvdXRidWZbaV0gPSBOVUxMOworICB9CisKKyAgaWYgKCh0aGlzLT5pbml0ICYgREVDT01QUkVTUykgPT0gMCkKKyAgICBfdGhyb3coInRqRGVjb21wcmVzc1RvWVVWUGxhbmVzKCk6IEluc3RhbmNlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmb3IgZGVjb21wcmVzc2lvbiIpOworCisgIGlmIChqcGVnQnVmID09IE5VTEwgfHwganBlZ1NpemUgPD0gMCB8fCAhZHN0UGxhbmVzIHx8ICFkc3RQbGFuZXNbMF0gfHwKKyAgICAgIHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgIF90aHJvdygidGpEZWNvbXByZXNzVG9ZVVZQbGFuZXMoKTogSW52YWxpZCBhcmd1bWVudCIpOworCisjaWZuZGVmIE5PX1BVVEVOVgorICBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VNTVgpIHB1dGVudigiSlNJTURfRk9SQ0VNTVg9MSIpOworICBlbHNlIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRVNTRSkgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRT0xIik7CisgIGVsc2UgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFU1NFMikgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRTI9MSIpOworI2VuZGlmCisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgaWYgKCF0aGlzLT5oZWFkZXJSZWFkKSB7CisgICAganBlZ19tZW1fc3JjX3RqKGRpbmZvLCBqcGVnQnVmLCBqcGVnU2l6ZSk7CisgICAganBlZ19yZWFkX2hlYWRlcihkaW5mbywgVFJVRSk7CisgIH0KKyAgdGhpcy0+aGVhZGVyUmVhZCA9IDA7CisgIGpwZWdTdWJzYW1wID0gZ2V0U3Vic2FtcChkaW5mbyk7CisgIGlmIChqcGVnU3Vic2FtcCA8IDApCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVlBsYW5lcygpOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHN1YnNhbXBsaW5nIHR5cGUgZm9yIEpQRUcgaW1hZ2UiKTsKKworICBpZiAoanBlZ1N1YnNhbXAgIT0gVEpTQU1QX0dSQVkgJiYgKCFkc3RQbGFuZXNbMV0gfHwgIWRzdFBsYW5lc1syXSkpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVlBsYW5lcygpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CisKKyAganBlZ3dpZHRoID0gZGluZm8tPmltYWdlX3dpZHRoOyAganBlZ2hlaWdodCA9IGRpbmZvLT5pbWFnZV9oZWlnaHQ7CisgIGlmICh3aWR0aCA9PSAwKSB3aWR0aCA9IGpwZWd3aWR0aDsKKyAgaWYgKGhlaWdodCA9PSAwKSBoZWlnaHQgPSBqcGVnaGVpZ2h0OworICBmb3IgKGkgPSAwOyBpIDwgTlVNU0Y7IGkrKykgeworICAgIHNjYWxlZHcgPSBUSlNDQUxFRChqcGVnd2lkdGgsIHNmW2ldKTsKKyAgICBzY2FsZWRoID0gVEpTQ0FMRUQoanBlZ2hlaWdodCwgc2ZbaV0pOworICAgIGlmIChzY2FsZWR3IDw9IHdpZHRoICYmIHNjYWxlZGggPD0gaGVpZ2h0KQorICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKGkgPj0gTlVNU0YpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVlBsYW5lcygpOiBDb3VsZCBub3Qgc2NhbGUgZG93biB0byBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMiKTsKKyAgaWYgKGRpbmZvLT5udW1fY29tcG9uZW50cyA+IDMpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVlBsYW5lcygpOiBKUEVHIGltYWdlIG11c3QgaGF2ZSAzIG9yIGZld2VyIGNvbXBvbmVudHMiKTsKKworICB3aWR0aCA9IHNjYWxlZHc7ICBoZWlnaHQgPSBzY2FsZWRoOworICBkaW5mby0+c2NhbGVfbnVtID0gc2ZbaV0ubnVtOworICBkaW5mby0+c2NhbGVfZGVub20gPSBzZltpXS5kZW5vbTsKKyAgc2ZpID0gaTsKKyAganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKGRpbmZvKTsKKworICBkY3RzaXplID0gRENUU0laRSAqIHNmW3NmaV0ubnVtIC8gc2Zbc2ZpXS5kZW5vbTsKKworICBmb3IgKGkgPSAwOyBpIDwgZGluZm8tPm51bV9jb21wb25lbnRzOyBpKyspIHsKKyAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyID0gJmRpbmZvLT5jb21wX2luZm9baV07CisgICAgaW50IGloOworCisgICAgaXdbaV0gPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBkY3RzaXplOworICAgIGloID0gY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAqIGRjdHNpemU7CisgICAgcHdbaV0gPSBQQUQoZGluZm8tPm91dHB1dF93aWR0aCwgZGluZm8tPm1heF9oX3NhbXBfZmFjdG9yKSAqCisgICAgICAgICAgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC8gZGluZm8tPm1heF9oX3NhbXBfZmFjdG9yOworICAgIHBoW2ldID0gUEFEKGRpbmZvLT5vdXRwdXRfaGVpZ2h0LCBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpICoKKyAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgLyBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgICAgaWYgKGl3W2ldICE9IHB3W2ldIHx8IGloICE9IHBoW2ldKSB1c2V0bXBidWYgPSAxOworICAgIHRoW2ldID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGRjdHNpemU7CisgICAgdG1wYnVmc2l6ZSArPSBpd1tpXSAqIHRoW2ldOworICAgIGlmICgob3V0YnVmW2ldID0gKEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykgKiBwaFtpXSkpID09IE5VTEwpCisgICAgICBfdGhyb3coInRqRGVjb21wcmVzc1RvWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICBwdHIgPSBkc3RQbGFuZXNbaV07CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBwaFtpXTsgcm93KyspIHsKKyAgICAgIG91dGJ1ZltpXVtyb3ddID0gcHRyOworICAgICAgcHRyICs9IChzdHJpZGVzICYmIHN0cmlkZXNbaV0gIT0gMCkgPyBzdHJpZGVzW2ldIDogcHdbaV07CisgICAgfQorICB9CisgIGlmICh1c2V0bXBidWYpIHsKKyAgICBpZiAoKF90bXBidWYgPSAoSlNBTVBMRSAqKW1hbGxvYyhzaXplb2YoSlNBTVBMRSkgKiB0bXBidWZzaXplKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvdygidGpEZWNvbXByZXNzVG9ZVVZQbGFuZXMoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgIHB0ciA9IF90bXBidWY7CisgICAgZm9yIChpID0gMDsgaSA8IGRpbmZvLT5udW1fY29tcG9uZW50czsgaSsrKSB7CisgICAgICBpZiAoKHRtcGJ1ZltpXSA9IChKU0FNUFJPVyAqKW1hbGxvYyhzaXplb2YoSlNBTVBST1cpICogdGhbaV0pKSA9PSBOVUxMKQorICAgICAgICBfdGhyb3coInRqRGVjb21wcmVzc1RvWVVWUGxhbmVzKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgdGhbaV07IHJvdysrKSB7CisgICAgICAgIHRtcGJ1ZltpXVtyb3ddID0gcHRyOworICAgICAgICBwdHIgKz0gaXdbaV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgaWYgKGZsYWdzICYgVEpGTEFHX0ZBU1RVUFNBTVBMRSkgZGluZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPSBGQUxTRTsKKyAgaWYgKGZsYWdzICYgVEpGTEFHX0ZBU1REQ1QpIGRpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9GQVNURVNUOworICBkaW5mby0+cmF3X2RhdGFfb3V0ID0gVFJVRTsKKworICBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoZGluZm8pOworICBmb3IgKHJvdyA9IDA7IHJvdyA8IChpbnQpZGluZm8tPm91dHB1dF9oZWlnaHQ7CisgICAgICAgcm93ICs9IGRpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIGRpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSkgeworICAgIEpTQU1QQVJSQVkgeXV2cHRyW01BWF9DT01QT05FTlRTXTsKKyAgICBpbnQgY3Jvd1tNQVhfQ09NUE9ORU5UU107CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGluZm8tPm51bV9jb21wb25lbnRzOyBpKyspIHsKKyAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIgPSAmZGluZm8tPmNvbXBfaW5mb1tpXTsKKworICAgICAgaWYgKGpwZWdTdWJzYW1wID09IFRKXzQyMCkgeworICAgICAgICAvKiBXaGVuIDQ6MjowIHN1YnNhbXBsaW5nIGlzIHVzZWQgd2l0aCBJRENUIHNjYWxpbmcsIGxpYmpwZWcgd2lsbCB0cnkKKyAgICAgICAgICAgdG8gYmUgY2xldmVyIGFuZCB1c2UgdGhlIElEQ1QgdG8gcGVyZm9ybSB1cHNhbXBsaW5nIG9uIHRoZSBVIGFuZCBWCisgICAgICAgICAgIHBsYW5lcy4gIEZvciBpbnN0YW5jZSwgaWYgdGhlIG91dHB1dCBpbWFnZSBpcyB0byBiZSBzY2FsZWQgYnkgMS8yCisgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBKUEVHIGltYWdlLCB0aGVuIHRoZSBzY2FsaW5nIGZhY3RvciBhbmQgdXBzYW1wbGluZworICAgICAgICAgICBlZmZlY3RpdmVseSBjYW5jZWwgZWFjaCBvdGhlciwgc28gYSBub3JtYWwgOHg4IElEQ1QgY2FuIGJlIHVzZWQuCisgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgaXMgbm90IGRlc2lyYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWNvbXByZXNzLXRvLVlVVgorICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluIFR1cmJvSlBFRywgc2luY2Ugd2Ugd2FudCB0byBvdXRwdXQgdGhlIFUgYW5kIFYKKyAgICAgICAgICAgcGxhbmVzIGluIHRoZWlyIHN1YnNhbXBsZWQgZm9ybS4gIFRodXMsIHdlIGhhdmUgdG8gb3ZlcnJpZGUgc29tZQorICAgICAgICAgICBpbnRlcm5hbCBsaWJqcGVnIHBhcmFtZXRlcnMgdG8gZm9yY2UgaXQgdG8gdXNlIHRoZSAic2NhbGVkIiBJRENUCisgICAgICAgICAgIGZ1bmN0aW9ucyBvbiB0aGUgVSBhbmQgViBwbGFuZXMuICovCisgICAgICAgIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUgPSBkY3RzaXplOworICAgICAgICBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoID0gdGpNQ1VXaWR0aFtqcGVnU3Vic2FtcF0gKgorICAgICAgICAgIHNmW3NmaV0ubnVtIC8gc2Zbc2ZpXS5kZW5vbSAqCisgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAvIGRpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgICAgICAgZGluZm8tPmlkY3QtPmludmVyc2VfRENUW2ldID0gZGluZm8tPmlkY3QtPmludmVyc2VfRENUWzBdOworICAgICAgfQorICAgICAgY3Jvd1tpXSA9IHJvdyAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgLyBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgICAgICBpZiAodXNldG1wYnVmKSB5dXZwdHJbaV0gPSB0bXBidWZbaV07CisgICAgICBlbHNlIHl1dnB0cltpXSA9ICZvdXRidWZbaV1bY3Jvd1tpXV07CisgICAgfQorICAgIGpwZWdfcmVhZF9yYXdfZGF0YShkaW5mbywgeXV2cHRyLAorICAgICAgICAgICAgICAgICAgICAgICBkaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBkaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUpOworICAgIGlmICh1c2V0bXBidWYpIHsKKyAgICAgIGludCBqOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgZGluZm8tPm51bV9jb21wb25lbnRzOyBpKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IE1JTih0aFtpXSwgcGhbaV0gLSBjcm93W2ldKTsgaisrKSB7CisgICAgICAgICAgbWVtY3B5KG91dGJ1ZltpXVtjcm93W2ldICsgal0sIHRtcGJ1ZltpXVtqXSwgcHdbaV0pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoZGluZm8pOworCitiYWlsb3V0OgorICBpZiAoZGluZm8tPmdsb2JhbF9zdGF0ZSA+IERTVEFURV9TVEFSVCkganBlZ19hYm9ydF9kZWNvbXByZXNzKGRpbmZvKTsKKyAgZm9yIChpID0gMDsgaSA8IE1BWF9DT01QT05FTlRTOyBpKyspIHsKKyAgICBpZiAodG1wYnVmW2ldKSBmcmVlKHRtcGJ1ZltpXSk7CisgICAgaWYgKG91dGJ1ZltpXSkgZnJlZShvdXRidWZbaV0pOworICB9CisgIGlmIChfdG1wYnVmKSBmcmVlKF90bXBidWYpOworICBpZiAodGhpcy0+amVyci53YXJuaW5nKSByZXR2YWwgPSAtMTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gRkFMU0U7CisgIHJldHVybiByZXR2YWw7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzVG9ZVVYyKHRqaGFuZGxlIGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBhZCwgaW50IGhlaWdodCwgaW50IGZsYWdzKQoreworICB1bnNpZ25lZCBjaGFyICpkc3RQbGFuZXNbM107CisgIGludCBwdzAsIHBoMCwgc3RyaWRlc1szXSwgcmV0dmFsID0gLTEsIGpwZWdTdWJzYW1wID0gLTE7CisgIGludCBpLCBqcGVnd2lkdGgsIGpwZWdoZWlnaHQsIHNjYWxlZHcsIHNjYWxlZGg7CisKKyAgZ2V0ZGluc3RhbmNlKGhhbmRsZSk7CisgIHRoaXMtPmplcnIuc3RvcE9uV2FybmluZyA9IChmbGFncyAmIFRKRkxBR19TVE9QT05XQVJOSU5HKSA/IFRSVUUgOiBGQUxTRTsKKworICBpZiAoanBlZ0J1ZiA9PSBOVUxMIHx8IGpwZWdTaXplIDw9IDAgfHwgZHN0QnVmID09IE5VTEwgfHwgd2lkdGggPCAwIHx8CisgICAgICBwYWQgPCAxIHx8ICFpc1BvdzIocGFkKSB8fCBoZWlnaHQgPCAwKQorICAgIF90aHJvdygidGpEZWNvbXByZXNzVG9ZVVYyKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworICBpZiAoc2V0am1wKHRoaXMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHsKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIEpQRUcgY29kZSBoYXMgc2lnbmFsZWQgYW4gZXJyb3IuICovCisgICAgcmV0dXJuIC0xOworICB9CisKKyAganBlZ19tZW1fc3JjX3RqKGRpbmZvLCBqcGVnQnVmLCBqcGVnU2l6ZSk7CisgIGpwZWdfcmVhZF9oZWFkZXIoZGluZm8sIFRSVUUpOworICBqcGVnU3Vic2FtcCA9IGdldFN1YnNhbXAoZGluZm8pOworICBpZiAoanBlZ1N1YnNhbXAgPCAwKQorICAgIF90aHJvdygidGpEZWNvbXByZXNzVG9ZVVYyKCk6IENvdWxkIG5vdCBkZXRlcm1pbmUgc3Vic2FtcGxpbmcgdHlwZSBmb3IgSlBFRyBpbWFnZSIpOworCisgIGpwZWd3aWR0aCA9IGRpbmZvLT5pbWFnZV93aWR0aDsgIGpwZWdoZWlnaHQgPSBkaW5mby0+aW1hZ2VfaGVpZ2h0OworICBpZiAod2lkdGggPT0gMCkgd2lkdGggPSBqcGVnd2lkdGg7CisgIGlmIChoZWlnaHQgPT0gMCkgaGVpZ2h0ID0ganBlZ2hlaWdodDsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNU0Y7IGkrKykgeworICAgIHNjYWxlZHcgPSBUSlNDQUxFRChqcGVnd2lkdGgsIHNmW2ldKTsKKyAgICBzY2FsZWRoID0gVEpTQ0FMRUQoanBlZ2hlaWdodCwgc2ZbaV0pOworICAgIGlmIChzY2FsZWR3IDw9IHdpZHRoICYmIHNjYWxlZGggPD0gaGVpZ2h0KQorICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKGkgPj0gTlVNU0YpCisgICAgX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVjIoKTogQ291bGQgbm90IHNjYWxlIGRvd24gdG8gZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIik7CisKKyAgcHcwID0gdGpQbGFuZVdpZHRoKDAsIHdpZHRoLCBqcGVnU3Vic2FtcCk7CisgIHBoMCA9IHRqUGxhbmVIZWlnaHQoMCwgaGVpZ2h0LCBqcGVnU3Vic2FtcCk7CisgIGRzdFBsYW5lc1swXSA9IGRzdEJ1ZjsKKyAgc3RyaWRlc1swXSA9IFBBRChwdzAsIHBhZCk7CisgIGlmIChqcGVnU3Vic2FtcCA9PSBUSlNBTVBfR1JBWSkgeworICAgIHN0cmlkZXNbMV0gPSBzdHJpZGVzWzJdID0gMDsKKyAgICBkc3RQbGFuZXNbMV0gPSBkc3RQbGFuZXNbMl0gPSBOVUxMOworICB9IGVsc2UgeworICAgIGludCBwdzEgPSB0alBsYW5lV2lkdGgoMSwgd2lkdGgsIGpwZWdTdWJzYW1wKTsKKyAgICBpbnQgcGgxID0gdGpQbGFuZUhlaWdodCgxLCBoZWlnaHQsIGpwZWdTdWJzYW1wKTsKKworICAgIHN0cmlkZXNbMV0gPSBzdHJpZGVzWzJdID0gUEFEKHB3MSwgcGFkKTsKKyAgICBkc3RQbGFuZXNbMV0gPSBkc3RQbGFuZXNbMF0gKyBzdHJpZGVzWzBdICogcGgwOworICAgIGRzdFBsYW5lc1syXSA9IGRzdFBsYW5lc1sxXSArIHN0cmlkZXNbMV0gKiBwaDE7CisgIH0KKworICB0aGlzLT5oZWFkZXJSZWFkID0gMTsKKyAgcmV0dXJuIHRqRGVjb21wcmVzc1RvWVVWUGxhbmVzKGhhbmRsZSwganBlZ0J1ZiwganBlZ1NpemUsIGRzdFBsYW5lcywgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGVzLCBoZWlnaHQsIGZsYWdzKTsKKworYmFpbG91dDoKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gRkFMU0U7CisgIHJldHVybiByZXR2YWw7Cit9CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzVG9ZVVYodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCB1bnNpZ25lZCBjaGFyICpkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKyAgcmV0dXJuIHRqRGVjb21wcmVzc1RvWVVWMihoYW5kbGUsIGpwZWdCdWYsIGpwZWdTaXplLCBkc3RCdWYsIDAsIDQsIDAsIGZsYWdzKTsKK30KKworCisvKiBUcmFuc2Zvcm1lciAqLworCitETExFWFBPUlQgdGpoYW5kbGUgdGpJbml0VHJhbnNmb3JtKHZvaWQpCit7CisgIHRqaW5zdGFuY2UgKnRoaXMgPSBOVUxMOworICB0amhhbmRsZSBoYW5kbGUgPSBOVUxMOworCisgIGlmICgodGhpcyA9ICh0amluc3RhbmNlICopbWFsbG9jKHNpemVvZih0amluc3RhbmNlKSkpID09IE5VTEwpIHsKKyAgICBzbnByaW50ZihlcnJTdHIsIEpNU0dfTEVOR1RIX01BWCwKKyAgICAgICAgICAgICAidGpJbml0VHJhbnNmb3JtKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBNRU1aRVJPKHRoaXMsIHNpemVvZih0amluc3RhbmNlKSk7CisgIHNucHJpbnRmKHRoaXMtPmVyclN0ciwgSk1TR19MRU5HVEhfTUFYLCAiTm8gZXJyb3IiKTsKKyAgaGFuZGxlID0gX3RqSW5pdENvbXByZXNzKHRoaXMpOworICBpZiAoIWhhbmRsZSkgcmV0dXJuIE5VTEw7CisgIGhhbmRsZSA9IF90akluaXREZWNvbXByZXNzKHRoaXMpOworICByZXR1cm4gaGFuZGxlOworfQorCisKK0RMTEVYUE9SVCBpbnQgdGpUcmFuc2Zvcm0odGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKmRzdEJ1ZnMsIHVuc2lnbmVkIGxvbmcgKmRzdFNpemVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0anRyYW5zZm9ybSAqdCwgaW50IGZsYWdzKQoreworICBqcGVnX3RyYW5zZm9ybV9pbmZvICp4aW5mbyA9IE5VTEw7CisgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY2NvZWZzLCAqZHN0Y29lZnM7CisgIGludCByZXR2YWwgPSAwLCBpLCBqcGVnU3Vic2FtcCwgc2F2ZU1hcmtlcnMgPSAwOworCisgIGdldGluc3RhbmNlKGhhbmRsZSk7CisgIHRoaXMtPmplcnIuc3RvcE9uV2FybmluZyA9IChmbGFncyAmIFRKRkxBR19TVE9QT05XQVJOSU5HKSA/IFRSVUUgOiBGQUxTRTsKKyAgaWYgKCh0aGlzLT5pbml0ICYgQ09NUFJFU1MpID09IDAgfHwgKHRoaXMtPmluaXQgJiBERUNPTVBSRVNTKSA9PSAwKQorICAgIF90aHJvdygidGpUcmFuc2Zvcm0oKTogSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciB0cmFuc2Zvcm1hdGlvbiIpOworCisgIGlmIChqcGVnQnVmID09IE5VTEwgfHwganBlZ1NpemUgPD0gMCB8fCBuIDwgMSB8fCBkc3RCdWZzID09IE5VTEwgfHwKKyAgICAgIGRzdFNpemVzID09IE5VTEwgfHwgdCA9PSBOVUxMIHx8IGZsYWdzIDwgMCkKKyAgICBfdGhyb3coInRqVHJhbnNmb3JtKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworI2lmbmRlZiBOT19QVVRFTlYKKyAgaWYgKGZsYWdzICYgVEpGTEFHX0ZPUkNFTU1YKSBwdXRlbnYoIkpTSU1EX0ZPUkNFTU1YPTEiKTsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBUSkZMQUdfRk9SQ0VTU0UpIHB1dGVudigiSlNJTURfRk9SQ0VTU0U9MSIpOworICBlbHNlIGlmIChmbGFncyAmIFRKRkxBR19GT1JDRVNTRTIpIHB1dGVudigiSlNJTURfRk9SQ0VTU0UyPTEiKTsKKyNlbmRpZgorCisgIGlmICgoeGluZm8gPQorICAgICAgIChqcGVnX3RyYW5zZm9ybV9pbmZvICopbWFsbG9jKHNpemVvZihqcGVnX3RyYW5zZm9ybV9pbmZvKSAqIG4pKSA9PSBOVUxMKQorICAgIF90aHJvdygidGpUcmFuc2Zvcm0oKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICBNRU1aRVJPKHhpbmZvLCBzaXplb2YoanBlZ190cmFuc2Zvcm1faW5mbykgKiBuKTsKKworICBpZiAoc2V0am1wKHRoaXMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHsKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIEpQRUcgY29kZSBoYXMgc2lnbmFsZWQgYW4gZXJyb3IuICovCisgICAgcmV0dmFsID0gLTE7ICBnb3RvIGJhaWxvdXQ7CisgIH0KKworICBqcGVnX21lbV9zcmNfdGooZGluZm8sIGpwZWdCdWYsIGpwZWdTaXplKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgeGluZm9baV0udHJhbnNmb3JtID0geGZvcm10eXBlc1t0W2ldLm9wXTsKKyAgICB4aW5mb1tpXS5wZXJmZWN0ID0gKHRbaV0ub3B0aW9ucyAmIFRKWE9QVF9QRVJGRUNUKSA/IDEgOiAwOworICAgIHhpbmZvW2ldLnRyaW0gPSAodFtpXS5vcHRpb25zICYgVEpYT1BUX1RSSU0pID8gMSA6IDA7CisgICAgeGluZm9baV0uZm9yY2VfZ3JheXNjYWxlID0gKHRbaV0ub3B0aW9ucyAmIFRKWE9QVF9HUkFZKSA/IDEgOiAwOworICAgIHhpbmZvW2ldLmNyb3AgPSAodFtpXS5vcHRpb25zICYgVEpYT1BUX0NST1ApID8gMSA6IDA7CisgICAgaWYgKG4gIT0gMSAmJiB0W2ldLm9wID09IFRKWE9QX0hGTElQKSB4aW5mb1tpXS5zbG93X2hmbGlwID0gMTsKKyAgICBlbHNlIHhpbmZvW2ldLnNsb3dfaGZsaXAgPSAwOworCisgICAgaWYgKHhpbmZvW2ldLmNyb3ApIHsKKyAgICAgIHhpbmZvW2ldLmNyb3BfeG9mZnNldCA9IHRbaV0uci54OyAgeGluZm9baV0uY3JvcF94b2Zmc2V0X3NldCA9IEpDUk9QX1BPUzsKKyAgICAgIHhpbmZvW2ldLmNyb3BfeW9mZnNldCA9IHRbaV0uci55OyAgeGluZm9baV0uY3JvcF95b2Zmc2V0X3NldCA9IEpDUk9QX1BPUzsKKyAgICAgIGlmICh0W2ldLnIudyAhPSAwKSB7CisgICAgICAgIHhpbmZvW2ldLmNyb3Bfd2lkdGggPSB0W2ldLnIudzsgIHhpbmZvW2ldLmNyb3Bfd2lkdGhfc2V0ID0gSkNST1BfUE9TOworICAgICAgfSBlbHNlCisgICAgICAgIHhpbmZvW2ldLmNyb3Bfd2lkdGggPSBKQ1JPUF9VTlNFVDsKKyAgICAgIGlmICh0W2ldLnIuaCAhPSAwKSB7CisgICAgICAgIHhpbmZvW2ldLmNyb3BfaGVpZ2h0ID0gdFtpXS5yLmg7ICB4aW5mb1tpXS5jcm9wX2hlaWdodF9zZXQgPSBKQ1JPUF9QT1M7CisgICAgICB9IGVsc2UKKyAgICAgICAgeGluZm9baV0uY3JvcF9oZWlnaHQgPSBKQ1JPUF9VTlNFVDsKKyAgICB9CisgICAgaWYgKCEodFtpXS5vcHRpb25zICYgVEpYT1BUX0NPUFlOT05FKSkgc2F2ZU1hcmtlcnMgPSAxOworICB9CisKKyAgamNvcHlfbWFya2Vyc19zZXR1cChkaW5mbywgc2F2ZU1hcmtlcnMgPyBKQ09QWU9QVF9BTEwgOiBKQ09QWU9QVF9OT05FKTsKKyAganBlZ19yZWFkX2hlYWRlcihkaW5mbywgVFJVRSk7CisgIGpwZWdTdWJzYW1wID0gZ2V0U3Vic2FtcChkaW5mbyk7CisgIGlmIChqcGVnU3Vic2FtcCA8IDApCisgICAgX3Rocm93KCJ0alRyYW5zZm9ybSgpOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHN1YnNhbXBsaW5nIHR5cGUgZm9yIEpQRUcgaW1hZ2UiKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgaWYgKCFqdHJhbnNmb3JtX3JlcXVlc3Rfd29ya3NwYWNlKGRpbmZvLCAmeGluZm9baV0pKQorICAgICAgX3Rocm93KCJ0alRyYW5zZm9ybSgpOiBUcmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QiKTsKKworICAgIGlmICh4aW5mb1tpXS5jcm9wKSB7CisgICAgICBpZiAoKHRbaV0uci54ICUgeGluZm9baV0uaU1DVV9zYW1wbGVfd2lkdGgpICE9IDAgfHwKKyAgICAgICAgICAodFtpXS5yLnkgJSB4aW5mb1tpXS5pTUNVX3NhbXBsZV9oZWlnaHQpICE9IDApIHsKKyAgICAgICAgc25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsCisgICAgICAgICAgICAgICAgICJUbyBjcm9wIHRoaXMgSlBFRyBpbWFnZSwgeCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWRcbiIKKyAgICAgICAgICAgICAgICAgImFuZCB5IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlZC5cbiIsCisgICAgICAgICAgICAgICAgIHhpbmZvW2ldLmlNQ1Vfc2FtcGxlX3dpZHRoLCB4aW5mb1tpXS5pTUNVX3NhbXBsZV9oZWlnaHQpOworICAgICAgICByZXR2YWwgPSAtMTsgIGdvdG8gYmFpbG91dDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBzcmNjb2VmcyA9IGpwZWdfcmVhZF9jb2VmZmljaWVudHMoZGluZm8pOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBpbnQgdywgaCwgYWxsb2MgPSAxOworCisgICAgaWYgKCF4aW5mb1tpXS5jcm9wKSB7CisgICAgICB3ID0gZGluZm8tPmltYWdlX3dpZHRoOyAgaCA9IGRpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHcgPSB4aW5mb1tpXS5jcm9wX3dpZHRoOyAgaCA9IHhpbmZvW2ldLmNyb3BfaGVpZ2h0OworICAgIH0KKyAgICBpZiAoZmxhZ3MgJiBUSkZMQUdfTk9SRUFMTE9DKSB7CisgICAgICBhbGxvYyA9IDA7ICBkc3RTaXplc1tpXSA9IHRqQnVmU2l6ZSh3LCBoLCBqcGVnU3Vic2FtcCk7CisgICAgfQorICAgIGlmICghKHRbaV0ub3B0aW9ucyAmIFRKWE9QVF9OT09VVFBVVCkpCisgICAgICBqcGVnX21lbV9kZXN0X3RqKGNpbmZvLCAmZHN0QnVmc1tpXSwgJmRzdFNpemVzW2ldLCBhbGxvYyk7CisgICAganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMoZGluZm8sIGNpbmZvKTsKKyAgICBkc3Rjb2VmcyA9IGp0cmFuc2Zvcm1fYWRqdXN0X3BhcmFtZXRlcnMoZGluZm8sIGNpbmZvLCBzcmNjb2VmcywgJnhpbmZvW2ldKTsKKyAgICBpZiAoZmxhZ3MgJiBUSkZMQUdfUFJPR1JFU1NJVkUgfHwgdFtpXS5vcHRpb25zICYgVEpYT1BUX1BST0dSRVNTSVZFKQorICAgICAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24oY2luZm8pOworICAgIGlmICghKHRbaV0ub3B0aW9ucyAmIFRKWE9QVF9OT09VVFBVVCkpIHsKKyAgICAgIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKGNpbmZvLCBkc3Rjb2Vmcyk7CisgICAgICBqY29weV9tYXJrZXJzX2V4ZWN1dGUoZGluZm8sIGNpbmZvLCB0W2ldLm9wdGlvbnMgJiBUSlhPUFRfQ09QWU5PTkUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPUFlPUFRfTk9ORSA6IEpDT1BZT1BUX0FMTCk7CisgICAgfSBlbHNlCisgICAgICBqaW5pdF9jX21hc3Rlcl9jb250cm9sKGNpbmZvLCBUUlVFKTsKKyAgICBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtYXRpb24oZGluZm8sIGNpbmZvLCBzcmNjb2VmcywgJnhpbmZvW2ldKTsKKyAgICBpZiAodFtpXS5jdXN0b21GaWx0ZXIpIHsKKyAgICAgIGludCBjaSwgeTsKKyAgICAgIEpESU1FTlNJT04gYnk7CisKKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyID0gJmNpbmZvLT5jb21wX2luZm9bY2ldOworICAgICAgICB0anJlZ2lvbiBhcnJheVJlZ2lvbiA9IHsKKyAgICAgICAgICAwLCAwLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFLCBEQ1RTSVpFCisgICAgICAgIH07CisgICAgICAgIHRqcmVnaW9uIHBsYW5lUmVnaW9uID0geworICAgICAgICAgIDAsIDAsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsCisgICAgICAgICAgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAqIERDVFNJWkUKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGJ5ID0gMDsgYnkgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgICAgICAgICAgIGJ5ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICBKQkxPQ0tBUlJBWSBiYXJyYXkgPSAoZGluZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAgICAgKChqX2NvbW1vbl9wdHIpZGluZm8sIGRzdGNvZWZzW2NpXSwgYnksIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgVFJVRSk7CisKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsgeSsrKSB7CisgICAgICAgICAgICBpZiAodFtpXS5jdXN0b21GaWx0ZXIoYmFycmF5W3ldWzBdLCBhcnJheVJlZ2lvbiwgcGxhbmVSZWdpb24sIGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksICZ0W2ldKSA9PSAtMSkKKyAgICAgICAgICAgICAgX3Rocm93KCJ0alRyYW5zZm9ybSgpOiBFcnJvciBpbiBjdXN0b20gZmlsdGVyIik7CisgICAgICAgICAgICBhcnJheVJlZ2lvbi55ICs9IERDVFNJWkU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmICghKHRbaV0ub3B0aW9ucyAmIFRKWE9QVF9OT09VVFBVVCkpIGpwZWdfZmluaXNoX2NvbXByZXNzKGNpbmZvKTsKKyAgfQorCisgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoZGluZm8pOworCitiYWlsb3V0OgorICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA+IENTVEFURV9TVEFSVCkganBlZ19hYm9ydF9jb21wcmVzcyhjaW5mbyk7CisgIGlmIChkaW5mby0+Z2xvYmFsX3N0YXRlID4gRFNUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2RlY29tcHJlc3MoZGluZm8pOworICBpZiAoeGluZm8pIGZyZWUoeGluZm8pOworICBpZiAodGhpcy0+amVyci53YXJuaW5nKSByZXR2YWwgPSAtMTsKKyAgdGhpcy0+amVyci5zdG9wT25XYXJuaW5nID0gRkFMU0U7CisgIHJldHVybiByZXR2YWw7Cit9CisKKworRExMRVhQT1JUIHVuc2lnbmVkIGNoYXIgKnRqTG9hZEltYWdlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgKndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGlnbiwgaW50ICpoZWlnaHQsIGludCAqcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICBpbnQgcmV0dmFsID0gMCwgdGVtcGMsIHBpdGNoOworICB0amhhbmRsZSBoYW5kbGUgPSBOVUxMOworICB0amluc3RhbmNlICp0aGlzOworICBqX2NvbXByZXNzX3B0ciBjaW5mbyA9IE5VTEw7CisgIGNqcGVnX3NvdXJjZV9wdHIgc3JjOworICB1bnNpZ25lZCBjaGFyICpkc3RCdWYgPSBOVUxMOworICBGSUxFICpmaWxlID0gTlVMTDsKKyAgYm9vbGVhbiBpbnZlcnQ7CisKKyAgaWYgKCFmaWxlbmFtZSB8fCAhd2lkdGggfHwgYWxpZ24gPCAxIHx8ICFoZWlnaHQgfHwgIXBpeGVsRm9ybWF0IHx8CisgICAgICAqcGl4ZWxGb3JtYXQgPCBUSlBGX1VOS05PV04gfHwgKnBpeGVsRm9ybWF0ID49IFRKX05VTVBGKQorICAgIF90aHJvd2coInRqTG9hZEltYWdlKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKyAgaWYgKChhbGlnbiAmIChhbGlnbiAtIDEpKSAhPSAwKQorICAgIF90aHJvd2coInRqTG9hZEltYWdlKCk6IEFsaWdubWVudCBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpOworCisgIGlmICgoaGFuZGxlID0gdGpJbml0Q29tcHJlc3MoKSkgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgIHRoaXMgPSAodGppbnN0YW5jZSAqKWhhbmRsZTsKKyAgY2luZm8gPSAmdGhpcy0+Y2luZm87CisKKyAgaWYgKChmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKQorICAgIF90aHJvd3VuaXgoInRqTG9hZEltYWdlKCk6IENhbm5vdCBvcGVuIGlucHV0IGZpbGUiKTsKKworICBpZiAoKHRlbXBjID0gZ2V0YyhmaWxlKSkgPCAwIHx8IHVuZ2V0Yyh0ZW1wYywgZmlsZSkgPT0gRU9GKQorICAgIF90aHJvd3VuaXgoInRqTG9hZEltYWdlKCk6IENvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUiKQorICBlbHNlIGlmICh0ZW1wYyA9PSBFT0YpCisgICAgX3Rocm93ZygidGpMb2FkSW1hZ2UoKTogSW5wdXQgZmlsZSBjb250YWlucyBubyBkYXRhIik7CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgaWYgKCpwaXhlbEZvcm1hdCA9PSBUSlBGX1VOS05PV04pIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IEpDU19VTktOT1dOOworICBlbHNlIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9IHBmMmNzWypwaXhlbEZvcm1hdF07CisgIGlmICh0ZW1wYyA9PSAnQicpIHsKKyAgICBpZiAoKHNyYyA9IGppbml0X3JlYWRfYm1wKGNpbmZvLCBGQUxTRSkpID09IE5VTEwpCisgICAgICBfdGhyb3dnKCJ0akxvYWRJbWFnZSgpOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBiaXRtYXAgbG9hZGVyIik7CisgICAgaW52ZXJ0ID0gKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKSA9PSAwOworICB9IGVsc2UgaWYgKHRlbXBjID09ICdQJykgeworICAgIGlmICgoc3JjID0gamluaXRfcmVhZF9wcG0oY2luZm8pKSA9PSBOVUxMKQorICAgICAgX3Rocm93ZygidGpMb2FkSW1hZ2UoKTogQ291bGQgbm90IGluaXRpYWxpemUgYml0bWFwIGxvYWRlciIpOworICAgIGludmVydCA9IChmbGFncyAmIFRKRkxBR19CT1RUT01VUCkgIT0gMDsKKyAgfSBlbHNlCisgICAgX3Rocm93ZygidGpMb2FkSW1hZ2UoKTogVW5zdXBwb3J0ZWQgZmlsZSB0eXBlIik7CisKKyAgc3JjLT5pbnB1dF9maWxlID0gZmlsZTsKKyAgKCpzcmMtPnN0YXJ0X2lucHV0KSAoY2luZm8sIHNyYyk7CisgICgqY2luZm8tPm1lbS0+cmVhbGl6ZV92aXJ0X2FycmF5cykgKChqX2NvbW1vbl9wdHIpY2luZm8pOworCisgICp3aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgICpoZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAqcGl4ZWxGb3JtYXQgPSBjczJwZltjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworCisgIHBpdGNoID0gUEFEKCgqd2lkdGgpICogdGpQaXhlbFNpemVbKnBpeGVsRm9ybWF0XSwgYWxpZ24pOworICBpZiAoKGRzdEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHBpdGNoICogKCpoZWlnaHQpKSkgPT0gTlVMTCkKKyAgICBfdGhyb3dnKCJ0akxvYWRJbWFnZSgpOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgd2hpbGUgKGNpbmZvLT5uZXh0X3NjYW5saW5lIDwgY2luZm8tPmltYWdlX2hlaWdodCkgeworICAgIGludCBpLCBubGluZXMgPSAoKnNyYy0+Z2V0X3BpeGVsX3Jvd3MpIChjaW5mbywgc3JjKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBubGluZXM7IGkrKykgeworICAgICAgdW5zaWduZWQgY2hhciAqZHN0cHRyOworICAgICAgaW50IHJvdzsKKworICAgICAgcm93ID0gY2luZm8tPm5leHRfc2NhbmxpbmUgKyBpOworICAgICAgaWYgKGludmVydCkgZHN0cHRyID0gJmRzdEJ1ZlsoKCpoZWlnaHQpIC0gcm93IC0gMSkgKiBwaXRjaF07CisgICAgICBlbHNlIGRzdHB0ciA9ICZkc3RCdWZbcm93ICogcGl0Y2hdOworICAgICAgbWVtY3B5KGRzdHB0ciwgc3JjLT5idWZmZXJbaV0sICgqd2lkdGgpICogdGpQaXhlbFNpemVbKnBpeGVsRm9ybWF0XSk7CisgICAgfQorICAgIGNpbmZvLT5uZXh0X3NjYW5saW5lICs9IG5saW5lczsKKyAgfQorCisgICgqc3JjLT5maW5pc2hfaW5wdXQpIChjaW5mbywgc3JjKTsKKworYmFpbG91dDoKKyAgaWYgKGhhbmRsZSkgdGpEZXN0cm95KGhhbmRsZSk7CisgIGlmIChmaWxlKSBmY2xvc2UoZmlsZSk7CisgIGlmIChyZXR2YWwgPCAwICYmIGRzdEJ1ZikgeyBmcmVlKGRzdEJ1Zik7ICBkc3RCdWYgPSBOVUxMOyB9CisgIHJldHVybiBkc3RCdWY7Cit9CisKKworRExMRVhQT1JUIGludCB0alNhdmVJbWFnZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCit7CisgIGludCByZXR2YWwgPSAwOworICB0amhhbmRsZSBoYW5kbGUgPSBOVUxMOworICB0amluc3RhbmNlICp0aGlzOworICBqX2RlY29tcHJlc3NfcHRyIGRpbmZvID0gTlVMTDsKKyAgZGpwZWdfZGVzdF9wdHIgZHN0OworICBGSUxFICpmaWxlID0gTlVMTDsKKyAgY2hhciAqcHRyID0gTlVMTDsKKyAgYm9vbGVhbiBpbnZlcnQ7CisKKyAgaWYgKCFmaWxlbmFtZSB8fCAhYnVmZmVyIHx8IHdpZHRoIDwgMSB8fCBwaXRjaCA8IDAgfHwgaGVpZ2h0IDwgMSB8fAorICAgICAgcGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IFRKX05VTVBGKQorICAgIF90aHJvd2coInRqU2F2ZUltYWdlKCk6IEludmFsaWQgYXJndW1lbnQiKTsKKworICBpZiAoKGhhbmRsZSA9IHRqSW5pdERlY29tcHJlc3MoKSkgPT0gTlVMTCkKKyAgICByZXR1cm4gLTE7CisgIHRoaXMgPSAodGppbnN0YW5jZSAqKWhhbmRsZTsKKyAgZGluZm8gPSAmdGhpcy0+ZGluZm87CisKKyAgaWYgKChmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3YiIpKSA9PSBOVUxMKQorICAgIF90aHJvd3VuaXgoInRqU2F2ZUltYWdlKCk6IENhbm5vdCBvcGVuIG91dHB1dCBmaWxlIik7CisKKyAgaWYgKHNldGptcCh0aGlzLT5qZXJyLnNldGptcF9idWZmZXIpKSB7CisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBKUEVHIGNvZGUgaGFzIHNpZ25hbGVkIGFuIGVycm9yLiAqLworICAgIHJldHZhbCA9IC0xOyAgZ290byBiYWlsb3V0OworICB9CisKKyAgdGhpcy0+ZGluZm8ub3V0X2NvbG9yX3NwYWNlID0gcGYyY3NbcGl4ZWxGb3JtYXRdOworICBkaW5mby0+aW1hZ2Vfd2lkdGggPSB3aWR0aDsgIGRpbmZvLT5pbWFnZV9oZWlnaHQgPSBoZWlnaHQ7CisgIGRpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfUkVBRFk7CisgIGRpbmZvLT5zY2FsZV9udW0gPSBkaW5mby0+c2NhbGVfZGVub20gPSAxOworCisgIHB0ciA9IHN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisgIGlmIChwdHIgJiYgIXN0cmNhc2VjbXAocHRyLCAiLmJtcCIpKSB7CisgICAgaWYgKChkc3QgPSBqaW5pdF93cml0ZV9ibXAoZGluZm8sIEZBTFNFLCBGQUxTRSkpID09IE5VTEwpCisgICAgICBfdGhyb3dnKCJ0alNhdmVJbWFnZSgpOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBiaXRtYXAgd3JpdGVyIik7CisgICAgaW52ZXJ0ID0gKGZsYWdzICYgVEpGTEFHX0JPVFRPTVVQKSA9PSAwOworICB9IGVsc2UgeworICAgIGlmICgoZHN0ID0gamluaXRfd3JpdGVfcHBtKGRpbmZvKSkgPT0gTlVMTCkKKyAgICAgIF90aHJvd2coInRqU2F2ZUltYWdlKCk6IENvdWxkIG5vdCBpbml0aWFsaXplIFBQTSB3cml0ZXIiKTsKKyAgICBpbnZlcnQgPSAoZmxhZ3MgJiBUSkZMQUdfQk9UVE9NVVApICE9IDA7CisgIH0KKworICBkc3QtPm91dHB1dF9maWxlID0gZmlsZTsKKyAgKCpkc3QtPnN0YXJ0X291dHB1dCkgKGRpbmZvLCBkc3QpOworICAoKmRpbmZvLT5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpICgoal9jb21tb25fcHRyKWRpbmZvKTsKKworICBpZiAocGl0Y2ggPT0gMCkgcGl0Y2ggPSB3aWR0aCAqIHRqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XTsKKworICB3aGlsZSAoZGluZm8tPm91dHB1dF9zY2FubGluZSA8IGRpbmZvLT5vdXRwdXRfaGVpZ2h0KSB7CisgICAgdW5zaWduZWQgY2hhciAqcm93cHRyOworCisgICAgaWYgKGludmVydCkKKyAgICAgIHJvd3B0ciA9ICZidWZmZXJbKGhlaWdodCAtIGRpbmZvLT5vdXRwdXRfc2NhbmxpbmUgLSAxKSAqIHBpdGNoXTsKKyAgICBlbHNlCisgICAgICByb3dwdHIgPSAmYnVmZmVyW2RpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKiBwaXRjaF07CisgICAgbWVtY3B5KGRzdC0+YnVmZmVyWzBdLCByb3dwdHIsIHdpZHRoICogdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdKTsKKyAgICAoKmRzdC0+cHV0X3BpeGVsX3Jvd3MpIChkaW5mbywgZHN0LCAxKTsKKyAgICBkaW5mby0+b3V0cHV0X3NjYW5saW5lKys7CisgIH0KKworICAoKmRzdC0+ZmluaXNoX291dHB1dCkgKGRpbmZvLCBkc3QpOworCitiYWlsb3V0OgorICBpZiAoaGFuZGxlKSB0akRlc3Ryb3koaGFuZGxlKTsKKyAgaWYgKGZpbGUpIGZjbG9zZShmaWxlKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy5oIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdHVyYm9qcGVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMwYTM3MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3R1cmJvanBlZy5oCkBAIC0wLDAgKzEsMTc0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykyMDA5LTIwMTUsIDIwMTcgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiwKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19UVVJCT0pQRUdfSF9fCisjZGVmaW5lIF9fVFVSQk9KUEVHX0hfXworCisjaWYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoRExMREVGSU5FKQorI2RlZmluZSBETExFWFBPUlQgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgRExMRVhQT1JUCisjZW5kaWYKKyNkZWZpbmUgRExMQ0FMTAorCisKKy8qKgorICogQGFkZHRvZ3JvdXAgVHVyYm9KUEVHCisgKiBUdXJib0pQRUcgQVBJLiAgVGhpcyBBUEkgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nLCBkZWNvZGluZywgYW5kCisgKiB0cmFuc2Zvcm1pbmcgcGxhbmFyIFlVViBhbmQgSlBFRyBpbWFnZXMgaW4gbWVtb3J5LgorICoKKyAqIEBhbmNob3IgWVVWbm90ZXMKKyAqIFlVViBJbWFnZSBGb3JtYXQgTm90ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRlY2huaWNhbGx5LCB0aGUgSlBFRyBmb3JtYXQgdXNlcyB0aGUgWUNiQ3IgY29sb3JzcGFjZSAod2hpY2ggaXMgdGVjaG5pY2FsbHkKKyAqIG5vdCBhIGNvbG9yc3BhY2UgYnV0IGEgY29sb3IgdHJhbnNmb3JtKSwgYnV0IHBlciB0aGUgY29udmVudGlvbiBvZiB0aGUKKyAqIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvIHJlZmVyIHRvIGFuIGltYWdlCisgKiBmb3JtYXQgY29uc2lzdGluZyBvZiBZLCBDYiwgYW5kIENyIGltYWdlIHBsYW5lcy4KKyAqCisgKiBFYWNoIHBsYW5lIGlzIHNpbXBseSBhIDJEIGFycmF5IG9mIGJ5dGVzLCBlYWNoIGJ5dGUgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZQorICogb2Ygb25lIG9mIHRoZSBjb21wb25lbnRzIChZLCBDYiwgb3IgQ3IpIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbiBpbiB0aGUKKyAqIGltYWdlLiAgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgZWFjaCBwbGFuZSBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgaW1hZ2UKKyAqIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gICBUaGUgbHVtaW5hbmNlIHBsYW5lCisgKiB3aWR0aCBpcyB0aGUgaW1hZ2Ugd2lkdGggcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoZSBob3Jpem9udGFsCisgKiBzdWJzYW1wbGluZyBmYWN0b3IgKDIgaW4gdGhlIGNhc2Ugb2YgNDoyOjAgYW5kIDQ6MjoyLCA0IGluIHRoZSBjYXNlIG9mCisgKiA0OjE6MSwgMSBpbiB0aGUgY2FzZSBvZiA0OjQ6NCBvciBncmF5c2NhbGUuKSAgU2ltaWxhcmx5LCB0aGUgbHVtaW5hbmNlIHBsYW5lCisgKiBoZWlnaHQgaXMgdGhlIGltYWdlIGhlaWdodCBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhlIHZlcnRpY2FsCisgKiBzdWJzYW1wbGluZyBmYWN0b3IgKDIgaW4gdGhlIGNhc2Ugb2YgNDoyOjAgb3IgNDo0OjAsIDEgaW4gdGhlIGNhc2Ugb2YgNDo0OjQKKyAqIG9yIGdyYXlzY2FsZS4pICBUaGlzIGlzIGlycmVzcGVjdGl2ZSBvZiBhbnkgYWRkaXRpb25hbCBwYWRkaW5nIHRoYXQgbWF5IGJlCisgKiBzcGVjaWZpZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHZhcmlvdXMgWVVWIGZ1bmN0aW9ucy4gIFRoZSBjaHJvbWluYW5jZQorICogcGxhbmUgd2lkdGggaXMgZXF1YWwgdG8gdGhlIGx1bWluYW5jZSBwbGFuZSB3aWR0aCBkaXZpZGVkIGJ5IHRoZSBob3Jpem9udGFsCisgKiBzdWJzYW1wbGluZyBmYWN0b3IsIGFuZCB0aGUgY2hyb21pbmFuY2UgcGxhbmUgaGVpZ2h0IGlzIGVxdWFsIHRvIHRoZQorICogbHVtaW5hbmNlIHBsYW5lIGhlaWdodCBkaXZpZGVkIGJ5IHRoZSB2ZXJ0aWNhbCBzdWJzYW1wbGluZyBmYWN0b3IuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgMzUgeCAzNSBwaXhlbHMgYW5kIDQ6MjoyIHN1YnNhbXBsaW5nIGlzCisgKiB1c2VkLCB0aGVuIHRoZSBsdW1pbmFuY2UgcGxhbmUgd291bGQgYmUgMzYgeCAzNSBieXRlcywgYW5kIGVhY2ggb2YgdGhlCisgKiBjaHJvbWluYW5jZSBwbGFuZXMgd291bGQgYmUgMTggeCAzNSBieXRlcy4gIElmIHlvdSBzcGVjaWZ5IGEgbGluZSBwYWRkaW5nIG9mCisgKiA0IGJ5dGVzIG9uIHRvcCBvZiB0aGlzLCB0aGVuIHRoZSBsdW1pbmFuY2UgcGxhbmUgd291bGQgYmUgMzYgeCAzNSBieXRlcywgYW5kCisgKiBlYWNoIG9mIHRoZSBjaHJvbWluYW5jZSBwbGFuZXMgd291bGQgYmUgMjAgeCAzNSBieXRlcy4KKyAqCisgKiBAeworICovCisKKworLyoqCisgKiBUaGUgbnVtYmVyIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMKKyAqLworI2RlZmluZSBUSl9OVU1TQU1QICA2CisKKy8qKgorICogQ2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucy4KKyAqIFdoZW4gcGl4ZWxzIGFyZSBjb252ZXJ0ZWQgZnJvbSBSR0IgdG8gWUNiQ3IgKHNlZSAjVEpDU19ZQ2JDcikgb3IgZnJvbSBDTVlLCisgKiB0byBZQ0NLIChzZWUgI1RKQ1NfWUNDSykgYXMgcGFydCBvZiB0aGUgSlBFRyBjb21wcmVzc2lvbiBwcm9jZXNzLCBzb21lIG9mCisgKiB0aGUgQ2IgYW5kIENyIChjaHJvbWluYW5jZSkgY29tcG9uZW50cyBjYW4gYmUgZGlzY2FyZGVkIG9yIGF2ZXJhZ2VkIHRvZ2V0aGVyCisgKiB0byBwcm9kdWNlIGEgc21hbGxlciBpbWFnZSB3aXRoIGxpdHRsZSBwZXJjZXB0aWJsZSBsb3NzIG9mIGltYWdlIGNsYXJpdHkKKyAqICh0aGUgaHVtYW4gZXllIGlzIG1vcmUgc2Vuc2l0aXZlIHRvIHNtYWxsIGNoYW5nZXMgaW4gYnJpZ2h0bmVzcyB0aGFuIHRvCisgKiBzbWFsbCBjaGFuZ2VzIGluIGNvbG9yLikgIFRoaXMgaXMgY2FsbGVkICJjaHJvbWluYW5jZSBzdWJzYW1wbGluZyIuCisgKi8KK2VudW0gVEpTQU1QIHsKKyAgLyoqCisgICAqIDQ6NDo0IGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChubyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZykuICBUaGUgSlBFRyBvcgorICAgKiBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZSBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IHBpeGVsIGluIHRoZQorICAgKiBzb3VyY2UgaW1hZ2UuCisgICAqLworICBUSlNBTVBfNDQ0ID0gMCwKKyAgLyoqCisgICAqIDQ6MjoyIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyAgICogY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSAyeDEgYmxvY2sgb2YgcGl4ZWxzIGluIHRoZSBzb3VyY2UgaW1hZ2UuCisgICAqLworICBUSlNBTVBfNDIyLAorICAvKioKKyAgICogNDoyOjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZQorICAgKiBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDJ4MiBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyAgICovCisgIFRKU0FNUF80MjAsCisgIC8qKgorICAgKiBHcmF5c2NhbGUuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG5vIGNocm9taW5hbmNlIGNvbXBvbmVudHMuCisgICAqLworICBUSlNBTVBfR1JBWSwKKyAgLyoqCisgICAqIDQ6NDowIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyAgICogY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSAxeDIgYmxvY2sgb2YgcGl4ZWxzIGluIHRoZSBzb3VyY2UgaW1hZ2UuCisgICAqCisgICAqIEBub3RlIDQ6NDowIHN1YnNhbXBsaW5nIGlzIG5vdCBmdWxseSBhY2NlbGVyYXRlZCBpbiBsaWJqcGVnLXR1cmJvLgorICAgKi8KKyAgVEpTQU1QXzQ0MCwKKyAgLyoqCisgICAqIDQ6MToxIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKKyAgICogY2hyb21pbmFuY2UgY29tcG9uZW50IGZvciBldmVyeSA0eDEgYmxvY2sgb2YgcGl4ZWxzIGluIHRoZSBzb3VyY2UgaW1hZ2UuCisgICAqIEpQRUcgaW1hZ2VzIGNvbXByZXNzZWQgd2l0aCA0OjE6MSBzdWJzYW1wbGluZyB3aWxsIGJlIGFsbW9zdCBleGFjdGx5IHRoZQorICAgKiBzYW1lIHNpemUgYXMgdGhvc2UgY29tcHJlc3NlZCB3aXRoIDQ6MjowIHN1YnNhbXBsaW5nLCBhbmQgaW4gdGhlCisgICAqIGFnZ3JlZ2F0ZSwgYm90aCBzdWJzYW1wbGluZyBtZXRob2RzIHByb2R1Y2UgYXBwcm94aW1hdGVseSB0aGUgc2FtZQorICAgKiBwZXJjZXB0dWFsIHF1YWxpdHkuICBIb3dldmVyLCA0OjE6MSBpcyBiZXR0ZXIgYWJsZSB0byByZXByb2R1Y2Ugc2hhcnAKKyAgICogaG9yaXpvbnRhbCBmZWF0dXJlcy4KKyAgICoKKyAgICogQG5vdGUgNDoxOjEgc3Vic2FtcGxpbmcgaXMgbm90IGZ1bGx5IGFjY2VsZXJhdGVkIGluIGxpYmpwZWctdHVyYm8uCisgICAqLworICBUSlNBTVBfNDExCit9OworCisvKioKKyAqIE1DVSBibG9jayB3aWR0aCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KKyAqIE1DVSBibG9jayBzaXplczoKKyAqIC0gOHg4IGZvciBubyBzdWJzYW1wbGluZyBvciBncmF5c2NhbGUKKyAqIC0gMTZ4OCBmb3IgNDoyOjIKKyAqIC0gOHgxNiBmb3IgNDo0OjAKKyAqIC0gMTZ4MTYgZm9yIDQ6MjowCisgKiAtIDMyeDggZm9yIDQ6MToxCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgdGpNQ1VXaWR0aFtUSl9OVU1TQU1QXSAgPSB7IDgsIDE2LCAxNiwgOCwgOCwgMzIgfTsKKworLyoqCisgKiBNQ1UgYmxvY2sgaGVpZ2h0IChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLgorICogTUNVIGJsb2NrIHNpemVzOgorICogLSA4eDggZm9yIG5vIHN1YnNhbXBsaW5nIG9yIGdyYXlzY2FsZQorICogLSAxNng4IGZvciA0OjI6MgorICogLSA4eDE2IGZvciA0OjQ6MAorICogLSAxNngxNiBmb3IgNDoyOjAKKyAqIC0gMzJ4OCBmb3IgNDoxOjEKKyAqLworc3RhdGljIGNvbnN0IGludCB0ak1DVUhlaWdodFtUSl9OVU1TQU1QXSA9IHsgOCwgOCwgMTYsIDgsIDE2LCA4IH07CisKKworLyoqCisgKiBUaGUgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHMKKyAqLworI2RlZmluZSBUSl9OVU1QRiAgMTIKKworLyoqCisgKiBQaXhlbCBmb3JtYXRzCisgKi8KK2VudW0gVEpQRiB7CisgIC8qKgorICAgKiBSR0IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gMy1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4KKyAgICovCisgIFRKUEZfUkdCID0gMCwKKyAgLyoqCisgICAqIEJHUiBwaXhlbCBmb3JtYXQuICBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlCisgICAqIHN0b3JlZCBpbiAzLWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBCLCBHLCBSIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZQorICAgKiBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLgorICAgKi8KKyAgVEpQRl9CR1IsCisgIC8qKgorICAgKiBSR0JYIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKKyAgICogc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIFIsIEcsIEIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlCisgICAqIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuICBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nCisgICAqIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLgorICAgKi8KKyAgVEpQRl9SR0JYLAorICAvKioKKyAgICogQkdSWCBwaXhlbCBmb3JtYXQuICBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlCisgICAqIHN0b3JlZCBpbiA0LWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBCLCBHLCBSIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZQorICAgKiBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiAgVGhlIFggY29tcG9uZW50IGlzIGlnbm9yZWQgd2hlbiBjb21wcmVzc2luZworICAgKiBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy4KKyAgICovCisgIFRKUEZfQkdSWCwKKyAgLyoqCisgICAqIFhCR1IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQorICAgKiBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IGJ5dGUKKyAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKKyAgICogYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuCisgICAqLworICBUSlBGX1hCR1IsCisgIC8qKgorICAgKiBYUkdCIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKKyAgICogc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBieXRlCisgICAqIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuICBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nCisgICAqIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLgorICAgKi8KKyAgVEpQRl9YUkdCLAorICAvKioKKyAgICogR3JheXNjYWxlIHBpeGVsIGZvcm1hdC4gIEVhY2ggMS1ieXRlIHBpeGVsIHJlcHJlc2VudHMgYSBsdW1pbmFuY2UKKyAgICogKGJyaWdodG5lc3MpIGxldmVsIGZyb20gMCB0byAyNTUuCisgICAqLworICBUSlBGX0dSQVksCisgIC8qKgorICAgKiBSR0JBIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgQHJlZiBUSlBGX1JHQlgsIGV4Y2VwdCB0aGF0IHdoZW4KKyAgICogZGVjb21wcmVzc2luZywgdGhlIFggY29tcG9uZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgorICAgKi8KKyAgVEpQRl9SR0JBLAorICAvKioKKyAgICogQkdSQSBwaXhlbCBmb3JtYXQuICBUaGlzIGlzIHRoZSBzYW1lIGFzIEByZWYgVEpQRl9CR1JYLCBleGNlcHQgdGhhdCB3aGVuCisgICAqIGRlY29tcHJlc3NpbmcsIHRoZSBYIGNvbXBvbmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZQorICAgKiBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4KKyAgICovCisgIFRKUEZfQkdSQSwKKyAgLyoqCisgICAqIEFCR1IgcGl4ZWwgZm9ybWF0LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBAcmVmIFRKUEZfWEJHUiwgZXhjZXB0IHRoYXQgd2hlbgorICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBjb21wb25lbnQgaXMgZ3VhcmFudGVlZCB0byBiZSAweEZGLCB3aGljaCBjYW4gYmUKKyAgICogaW50ZXJwcmV0ZWQgYXMgYW4gb3BhcXVlIGFscGhhIGNoYW5uZWwuCisgICAqLworICBUSlBGX0FCR1IsCisgIC8qKgorICAgKiBBUkdCIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgQHJlZiBUSlBGX1hSR0IsIGV4Y2VwdCB0aGF0IHdoZW4KKyAgICogZGVjb21wcmVzc2luZywgdGhlIFggY29tcG9uZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCisgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgorICAgKi8KKyAgVEpQRl9BUkdCLAorICAvKioKKyAgICogQ01ZSyBwaXhlbCBmb3JtYXQuICBVbmxpa2UgUkdCLCB3aGljaCBpcyBhbiBhZGRpdGl2ZSBjb2xvciBtb2RlbCB1c2VkCisgICAqIHByaW1hcmlseSBmb3IgZGlzcGxheSwgQ01ZSyAoQ3lhbi9NYWdlbnRhL1llbGxvdy9LZXkpIGlzIGEgc3VidHJhY3RpdmUKKyAgICogY29sb3IgbW9kZWwgdXNlZCBwcmltYXJpbHkgZm9yIHByaW50aW5nLiAgSW4gdGhlIENNWUsgY29sb3IgbW9kZWwsIHRoZQorICAgKiB2YWx1ZSBvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCB0eXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYW4gYW1vdW50IG9mIGN5YW4sCisgICAqIG1hZ2VudGEsIHllbGxvdywgb3IgYmxhY2sgaW5rIHRoYXQgaXMgYXBwbGllZCB0byBhIHdoaXRlIGJhY2tncm91bmQuICBJbgorICAgKiBvcmRlciB0byBjb252ZXJ0IGJldHdlZW4gQ01ZSyBhbmQgUkdCLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGEgY29sb3IKKyAgICogbWFuYWdlbWVudCBzeXN0ZW0gKENNUy4pICBBIENNUyB3aWxsIGF0dGVtcHQgdG8gbWFwIGNvbG9ycyB3aXRoaW4gdGhlCisgICAqIHByaW50ZXIncyBnYW11dCB0byBwZXJjZXB0dWFsbHkgc2ltaWxhciBjb2xvcnMgaW4gdGhlIGRpc3BsYXkncyBnYW11dCBhbmQKKyAgICogdmljZSB2ZXJzYSwgYnV0IHRoZSBtYXBwaW5nIGlzIHR5cGljYWxseSBub3QgMToxIG9yIHJldmVyc2libGUsIG5vciBjYW4gaXQKKyAgICogYmUgZGVmaW5lZCB3aXRoIGEgc2ltcGxlIGZvcm11bGEuICBUaHVzLCBzdWNoIGEgY29udmVyc2lvbiBpcyBvdXQgb2Ygc2NvcGUKKyAgICogZm9yIGEgY29kZWMgbGlicmFyeS4gIEhvd2V2ZXIsIHRoZSBUdXJib0pQRUcgQVBJIGFsbG93cyBmb3IgY29tcHJlc3NpbmcKKyAgICogQ01ZSyBwaXhlbHMgaW50byBhIFlDQ0sgSlBFRyBpbWFnZSAoc2VlICNUSkNTX1lDQ0spIGFuZCBkZWNvbXByZXNzaW5nIFlDQ0sKKyAgICogSlBFRyBpbWFnZXMgaW50byBDTVlLIHBpeGVscy4KKyAgICovCisgIFRKUEZfQ01ZSywKKyAgLyoqCisgICAqIFVua25vd24gcGl4ZWwgZm9ybWF0LiAgQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIGJ5ICN0akxvYWRJbWFnZSgpLgorICAgKi8KKyAgVEpQRl9VTktOT1dOID0gLTEKK307CisKKy8qKgorICogUmVkIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gIFRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIKKyAqIG9mIGJ5dGVzIHRoYXQgdGhlIHJlZCBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC4gIEZvcgorICogaW5zdGFuY2UsIGlmIGEgcGl4ZWwgb2YgZm9ybWF0IFRKX0JHUlggaXMgc3RvcmVkIGluIDx0dD5jaGFyIHBpeGVsW108L3R0PiwKKyAqIHRoZW4gdGhlIHJlZCBjb21wb25lbnQgd2lsbCBiZSA8dHQ+cGl4ZWxbdGpSZWRPZmZzZXRbVEpfQkdSWF1dPC90dD4uICBUaGlzCisgKiB3aWxsIGJlIC0xIGlmIHRoZSBwaXhlbCBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhIHJlZCBjb21wb25lbnQuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgdGpSZWRPZmZzZXRbVEpfTlVNUEZdID0geworICAwLCAyLCAwLCAyLCAzLCAxLCAtMSwgMCwgMiwgMywgMSwgLTEKK307CisvKioKKyAqIEdyZWVuIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gIFRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIKKyAqIG9mIGJ5dGVzIHRoYXQgdGhlIGdyZWVuIGNvbXBvbmVudCBpcyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBpeGVsLgorICogRm9yIGluc3RhbmNlLCBpZiBhIHBpeGVsIG9mIGZvcm1hdCBUSl9CR1JYIGlzIHN0b3JlZCBpbgorICogPHR0PmNoYXIgcGl4ZWxbXTwvdHQ+LCB0aGVuIHRoZSBncmVlbiBjb21wb25lbnQgd2lsbCBiZQorICogPHR0PnBpeGVsW3RqR3JlZW5PZmZzZXRbVEpfQkdSWF1dPC90dD4uICBUaGlzIHdpbGwgYmUgLTEgaWYgdGhlIHBpeGVsIGZvcm1hdAorICogZG9lcyBub3QgaGF2ZSBhIGdyZWVuIGNvbXBvbmVudC4KKyAqLworc3RhdGljIGNvbnN0IGludCB0akdyZWVuT2Zmc2V0W1RKX05VTVBGXSA9IHsKKyAgMSwgMSwgMSwgMSwgMiwgMiwgLTEsIDEsIDEsIDIsIDIsIC0xCit9OworLyoqCisgKiBCbHVlIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gIFRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIKKyAqIG9mIGJ5dGVzIHRoYXQgdGhlIEJsdWUgY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuICBGb3IKKyAqIGluc3RhbmNlLCBpZiBhIHBpeGVsIG9mIGZvcm1hdCBUSl9CR1JYIGlzIHN0b3JlZCBpbiA8dHQ+Y2hhciBwaXhlbFtdPC90dD4sCisgKiB0aGVuIHRoZSBibHVlIGNvbXBvbmVudCB3aWxsIGJlIDx0dD5waXhlbFt0akJsdWVPZmZzZXRbVEpfQkdSWF1dPC90dD4uICBUaGlzCisgKiB3aWxsIGJlIC0xIGlmIHRoZSBwaXhlbCBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhIGJsdWUgY29tcG9uZW50LgorICovCitzdGF0aWMgY29uc3QgaW50IHRqQmx1ZU9mZnNldFtUSl9OVU1QRl0gPSB7CisgIDIsIDAsIDIsIDAsIDEsIDMsIC0xLCAyLCAwLCAxLCAzLCAtMQorfTsKKy8qKgorICogQWxwaGEgb2Zmc2V0IChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiAgVGhpcyBzcGVjaWZpZXMgdGhlIG51bWJlcgorICogb2YgYnl0ZXMgdGhhdCB0aGUgQWxwaGEgY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuCisgKiBGb3IgaW5zdGFuY2UsIGlmIGEgcGl4ZWwgb2YgZm9ybWF0IFRKX0JHUkEgaXMgc3RvcmVkIGluCisgKiA8dHQ+Y2hhciBwaXhlbFtdPC90dD4sIHRoZW4gdGhlIGFscGhhIGNvbXBvbmVudCB3aWxsIGJlCisgKiA8dHQ+cGl4ZWxbdGpBbHBoYU9mZnNldFtUSl9CR1JBXV08L3R0Pi4gIFRoaXMgd2lsbCBiZSAtMSBpZiB0aGUgcGl4ZWwgZm9ybWF0CisgKiBkb2VzIG5vdCBoYXZlIGFuIGFscGhhIGNvbXBvbmVudC4KKyAqLworc3RhdGljIGNvbnN0IGludCB0akFscGhhT2Zmc2V0W1RKX05VTVBGXSA9IHsKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMsIDMsIDAsIDAsIC0xCit9OworLyoqCisgKiBQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0CisgKi8KK3N0YXRpYyBjb25zdCBpbnQgdGpQaXhlbFNpemVbVEpfTlVNUEZdID0geworICAzLCAzLCA0LCA0LCA0LCA0LCAxLCA0LCA0LCA0LCA0LCA0Cit9OworCisKKy8qKgorICogVGhlIG51bWJlciBvZiBKUEVHIGNvbG9yc3BhY2VzCisgKi8KKyNkZWZpbmUgVEpfTlVNQ1MgIDUKKworLyoqCisgKiBKUEVHIGNvbG9yc3BhY2VzCisgKi8KK2VudW0gVEpDUyB7CisgIC8qKgorICAgKiBSR0IgY29sb3JzcGFjZS4gIFdoZW4gY29tcHJlc3NpbmcgdGhlIEpQRUcgaW1hZ2UsIHRoZSBSLCBHLCBhbmQgQgorICAgKiBjb21wb25lbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UgYXJlIHJlb3JkZXJlZCBpbnRvIGltYWdlIHBsYW5lcywgYnV0IG5vCisgICAqIGNvbG9yc3BhY2UgY29udmVyc2lvbiBvciBzdWJzYW1wbGluZyBpcyBwZXJmb3JtZWQuICBSR0IgSlBFRyBpbWFnZXMgY2FuIGJlCisgICAqIGRlY29tcHJlc3NlZCB0byBhbnkgb2YgdGhlIGV4dGVuZGVkIFJHQiBwaXhlbCBmb3JtYXRzIG9yIGdyYXlzY2FsZSwgYnV0CisgICAqIHRoZXkgY2Fubm90IGJlIGRlY29tcHJlc3NlZCB0byBZVVYgaW1hZ2VzLgorICAgKi8KKyAgVEpDU19SR0IgPSAwLAorICAvKioKKyAgICogWUNiQ3IgY29sb3JzcGFjZS4gIFlDYkNyIGlzIG5vdCBhbiBhYnNvbHV0ZSBjb2xvcnNwYWNlIGJ1dCByYXRoZXIgYQorICAgKiBtYXRoZW1hdGljYWwgdHJhbnNmb3JtYXRpb24gb2YgUkdCIGRlc2lnbmVkIHNvbGVseSBmb3Igc3RvcmFnZSBhbmQKKyAgICogdHJhbnNtaXNzaW9uLiAgWUNiQ3IgaW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIFJHQiBiZWZvcmUgdGhleSBjYW4KKyAgICogYWN0dWFsbHkgYmUgZGlzcGxheWVkLiAgSW4gdGhlIFlDYkNyIGNvbG9yc3BhY2UsIHRoZSBZIChsdW1pbmFuY2UpCisgICAqIGNvbXBvbmVudCByZXByZXNlbnRzIHRoZSBibGFjayAmIHdoaXRlIHBvcnRpb24gb2YgdGhlIG9yaWdpbmFsIGltYWdlLCBhbmQKKyAgICogdGhlIENiIGFuZCBDciAoY2hyb21pbmFuY2UpIGNvbXBvbmVudHMgcmVwcmVzZW50IHRoZSBjb2xvciBwb3J0aW9uIG9mIHRoZQorICAgKiBvcmlnaW5hbCBpbWFnZS4gIE9yaWdpbmFsbHksIHRoZSBhbmFsb2cgZXF1aXZhbGVudCBvZiB0aGlzIHRyYW5zZm9ybWF0aW9uCisgICAqIGFsbG93ZWQgdGhlIHNhbWUgc2lnbmFsIHRvIGRyaXZlIGJvdGggYmxhY2sgJiB3aGl0ZSBhbmQgY29sb3IgdGVsZXZpc2lvbnMsCisgICAqIGJ1dCBKUEVHIGltYWdlcyB1c2UgWUNiQ3IgcHJpbWFyaWx5IGJlY2F1c2UgaXQgYWxsb3dzIHRoZSBjb2xvciBkYXRhIHRvIGJlCisgICAqIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlZHVjaW5nIGJhbmR3aWR0aCBvciBkaXNrCisgICAqIHNwYWNlLiAgWUNiQ3IgaXMgdGhlIG1vc3QgY29tbW9uIEpQRUcgY29sb3JzcGFjZSwgYW5kIFlDYkNyIEpQRUcgaW1hZ2VzCisgICAqIGNhbiBiZSBjb21wcmVzc2VkIGZyb20gYW5kIGRlY29tcHJlc3NlZCB0byBhbnkgb2YgdGhlIGV4dGVuZGVkIFJHQiBwaXhlbAorICAgKiBmb3JtYXRzIG9yIGdyYXlzY2FsZSwgb3IgdGhleSBjYW4gYmUgZGVjb21wcmVzc2VkIHRvIFlVViBwbGFuYXIgaW1hZ2VzLgorICAgKi8KKyAgVEpDU19ZQ2JDciwKKyAgLyoqCisgICAqIEdyYXlzY2FsZSBjb2xvcnNwYWNlLiAgVGhlIEpQRUcgaW1hZ2UgcmV0YWlucyBvbmx5IHRoZSBsdW1pbmFuY2UgZGF0YSAoWQorICAgKiBjb21wb25lbnQpLCBhbmQgYW55IGNvbG9yIGRhdGEgZnJvbSB0aGUgc291cmNlIGltYWdlIGlzIGRpc2NhcmRlZC4KKyAgICogR3JheXNjYWxlIEpQRUcgaW1hZ2VzIGNhbiBiZSBjb21wcmVzc2VkIGZyb20gYW5kIGRlY29tcHJlc3NlZCB0byBhbnkgb2YKKyAgICogdGhlIGV4dGVuZGVkIFJHQiBwaXhlbCBmb3JtYXRzIG9yIGdyYXlzY2FsZSwgb3IgdGhleSBjYW4gYmUgZGVjb21wcmVzc2VkCisgICAqIHRvIFlVViBwbGFuYXIgaW1hZ2VzLgorICAgKi8KKyAgVEpDU19HUkFZLAorICAvKioKKyAgICogQ01ZSyBjb2xvcnNwYWNlLiAgV2hlbiBjb21wcmVzc2luZyB0aGUgSlBFRyBpbWFnZSwgdGhlIEMsIE0sIFksIGFuZCBLCisgICAqIGNvbXBvbmVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSBhcmUgcmVvcmRlcmVkIGludG8gaW1hZ2UgcGxhbmVzLCBidXQgbm8KKyAgICogY29sb3JzcGFjZSBjb252ZXJzaW9uIG9yIHN1YnNhbXBsaW5nIGlzIHBlcmZvcm1lZC4gIENNWUsgSlBFRyBpbWFnZXMgY2FuCisgICAqIG9ubHkgYmUgZGVjb21wcmVzc2VkIHRvIENNWUsgcGl4ZWxzLgorICAgKi8KKyAgVEpDU19DTVlLLAorICAvKioKKyAgICogWUNDSyBjb2xvcnNwYWNlLiAgWUNDSyAoQUtBICJZQ2JDcksiKSBpcyBub3QgYW4gYWJzb2x1dGUgY29sb3JzcGFjZSBidXQKKyAgICogcmF0aGVyIGEgbWF0aGVtYXRpY2FsIHRyYW5zZm9ybWF0aW9uIG9mIENNWUsgZGVzaWduZWQgc29sZWx5IGZvciBzdG9yYWdlCisgICAqIGFuZCB0cmFuc21pc3Npb24uICBJdCBpcyB0byBDTVlLIGFzIFlDYkNyIGlzIHRvIFJHQi4gIENNWUsgcGl4ZWxzIGNhbiBiZQorICAgKiByZXZlcnNpYmx5IHRyYW5zZm9ybWVkIGludG8gWUNDSywgYW5kIGFzIHdpdGggWUNiQ3IsIHRoZSBjaHJvbWluYW5jZQorICAgKiBjb21wb25lbnRzIGluIHRoZSBZQ0NLIHBpeGVscyBjYW4gYmUgc3Vic2FtcGxlZCB3aXRob3V0IGluY3VycmluZyBtYWpvcgorICAgKiBwZXJjZXB0dWFsIGxvc3MuICBZQ0NLIEpQRUcgaW1hZ2VzIGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgZnJvbSBhbmQKKyAgICogZGVjb21wcmVzc2VkIHRvIENNWUsgcGl4ZWxzLgorICAgKi8KKyAgVEpDU19ZQ0NLCit9OworCisKKy8qKgorICogVGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywKKyAqIE9wZW5HTCkgb3JkZXIsIG5vdCB0b3AtZG93biAoWDExKSBvcmRlci4KKyAqLworI2RlZmluZSBUSkZMQUdfQk9UVE9NVVAgIDIKKy8qKgorICogV2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyAqIHN1YnNhbXBsaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0gYXZhaWxhYmxlIGluCisgKiB0aGUgdW5kZXJseWluZyBjb2RlYy4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBzbW9vdGggdXBzYW1wbGluZywgd2hpY2gKKyAqIGNyZWF0ZXMgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIG5laWdoYm9yaW5nIGNocm9taW5hbmNlIGNvbXBvbmVudHMgaW4KKyAqIG9yZGVyIHRvIHJlZHVjZSB1cHNhbXBsaW5nIGFydGlmYWN0cyBpbiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgorICovCisjZGVmaW5lIFRKRkxBR19GQVNUVVBTQU1QTEUgIDI1NgorLyoqCisgKiBEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4gIElmIHBhc3NlZCB0byBvbmUgb2YgdGhlIEpQRUcgY29tcHJlc3Npb24gb3IKKyAqIHRyYW5zZm9ybSBmdW5jdGlvbnMsIHRoaXMgZmxhZyB3aWxsIGNhdXNlIHRob3NlIGZ1bmN0aW9ucyB0byBnZW5lcmF0ZSBhbgorICogZXJyb3IgaWYgdGhlIEpQRUcgaW1hZ2UgYnVmZmVyIGlzIGludmFsaWQgb3IgdG9vIHNtYWxsIHJhdGhlciB0aGFuCisgKiBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIG9yIHJlYWxsb2NhdGUgdGhhdCBidWZmZXIuICBUaGlzIHJlcHJvZHVjZXMgdGhlCisgKiBiZWhhdmlvciBvZiBlYXJsaWVyIHZlcnNpb25zIG9mIFR1cmJvSlBFRy4KKyAqLworI2RlZmluZSBUSkZMQUdfTk9SRUFMTE9DICAxMDI0CisvKioKKyAqIFVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgVGhlCisgKiBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yCisgKiBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdAorICogYWxnb3JpdGhtIGJ5IGRlZmF1bHQgd2hlbiBjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUKKyAqIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0KKyAqIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgorICovCisjZGVmaW5lIFRKRkxBR19GQVNURENUICAyMDQ4CisvKioKKyAqIFVzZSB0aGUgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLgorICogVGhlIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBGb3IKKyAqIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgZm9yIGxpYmpwZWdbLXR1cmJvXSB1c2VzIHRoZSBmYXN0CisgKiBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZQorICogb25seSBhIHZlcnkgc2xpZ2h0IGVmZmVjdCBvbiBhY2N1cmFjeSwgYnV0IGl0IHVzZXMgdGhlIGFjY3VyYXRlIGFsZ29yaXRobQorICogd2hlbiBkZWNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBhIGxhcmdlciBlZmZlY3QuCisgKi8KKyNkZWZpbmUgVEpGTEFHX0FDQ1VSQVRFRENUICA0MDk2CisvKioKKyAqIEltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIHRoZSBjdXJyZW50IGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24vdHJhbnNmb3JtCisgKiBvcGVyYXRpb24gaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgdGhyb3dzIGEgd2FybmluZyAobm9uLWZhdGFsIGVycm9yKS4gIFRoZQorICogZGVmYXVsdCBiZWhhdmlvciBpcyB0byBhbGxvdyB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlIHVubGVzcyBhIGZhdGFsIGVycm9yCisgKiBpcyBlbmNvdW50ZXJlZC4KKyAqLworI2RlZmluZSBUSkZMQUdfU1RPUE9OV0FSTklORyAgODE5MgorLyoqCisgKiBVc2UgcHJvZ3Jlc3NpdmUgZW50cm9weSBjb2RpbmcgaW4gSlBFRyBpbWFnZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wcmVzc2lvbgorICogYW5kIHRyYW5zZm9ybSBmdW5jdGlvbnMuICBQcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyB3aWxsIGdlbmVyYWxseSBpbXByb3ZlCisgKiBjb21wcmVzc2lvbiByZWxhdGl2ZSB0byBiYXNlbGluZSBlbnRyb3B5IGNvZGluZyAodGhlIGRlZmF1bHQpLCBidXQgaXQgd2lsbAorICogcmVkdWNlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHBlcmZvcm1hbmNlIGNvbnNpZGVyYWJseS4KKyAqLworI2RlZmluZSBUSkZMQUdfUFJPR1JFU1NJVkUgIDE2Mzg0CisKKworLyoqCisgKiBUaGUgbnVtYmVyIG9mIGVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgVEpfTlVNRVJSICAyCisKKy8qKgorICogRXJyb3IgY29kZXMKKyAqLworZW51bSBUSkVSUiB7CisgIC8qKgorICAgKiBUaGUgZXJyb3Igd2FzIG5vbi1mYXRhbCBhbmQgcmVjb3ZlcmFibGUsIGJ1dCB0aGUgaW1hZ2UgbWF5IHN0aWxsIGJlCisgICAqIGNvcnJ1cHQuCisgICAqLworICBUSkVSUl9XQVJOSU5HID0gMCwKKyAgLyoqCisgICAqIFRoZSBlcnJvciB3YXMgZmF0YWwgYW5kIG5vbi1yZWNvdmVyYWJsZS4KKyAgICovCisgIFRKRVJSX0ZBVEFMCit9OworCisKKy8qKgorICogVGhlIG51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucworICovCisjZGVmaW5lIFRKX05VTVhPUCAgOAorCisvKioKKyAqIFRyYW5zZm9ybSBvcGVyYXRpb25zIGZvciAjdGpUcmFuc2Zvcm0oKQorICovCitlbnVtIFRKWE9QIHsKKyAgLyoqCisgICAqIERvIG5vdCB0cmFuc2Zvcm0gdGhlIHBvc2l0aW9uIG9mIHRoZSBpbWFnZSBwaXhlbHMKKyAgICovCisgIFRKWE9QX05PTkUgPSAwLAorICAvKioKKyAgICogRmxpcCAobWlycm9yKSBpbWFnZSBob3Jpem9udGFsbHkuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUKKyAgICogYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UgKHNlZSAjVEpYT1BUX1BFUkZFQ1QuKQorICAgKi8KKyAgVEpYT1BfSEZMSVAsCisgIC8qKgorICAgKiBGbGlwIChtaXJyb3IpIGltYWdlIHZlcnRpY2FsbHkuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlCisgICAqIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIGJvdHRvbSBlZGdlIChzZWUgI1RKWE9QVF9QRVJGRUNULikKKyAgICovCisgIFRKWE9QX1ZGTElQLAorICAvKioKKyAgICogVHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0IGF4aXMuKSAgVGhpcworICAgKiB0cmFuc2Zvcm0gaXMgYWx3YXlzIHBlcmZlY3QuCisgICAqLworICBUSlhPUF9UUkFOU1BPU0UsCisgIC8qKgorICAgKiBUcmFuc3ZlcnNlIHRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgcmlnaHQgdG8gbG93ZXIgbGVmdAorICAgKiBheGlzLikgIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBpbgorICAgKiB0aGUgaW1hZ2UgKHNlZSAjVEpYT1BUX1BFUkZFQ1QuKQorICAgKi8KKyAgVEpYT1BfVFJBTlNWRVJTRSwKKyAgLyoqCisgICAqIFJvdGF0ZSBpbWFnZSBjbG9ja3dpc2UgYnkgOTAgZGVncmVlcy4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZgorICAgKiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgYm90dG9tIGVkZ2UgKHNlZQorICAgKiAjVEpYT1BUX1BFUkZFQ1QuKQorICAgKi8KKyAgVEpYT1BfUk9UOTAsCisgIC8qKgorICAgKiBSb3RhdGUgaW1hZ2UgMTgwIGRlZ3JlZXMuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueQorICAgKiBwYXJ0aWFsIE1DVSBibG9ja3MgaW4gdGhlIGltYWdlIChzZWUgI1RKWE9QVF9QRVJGRUNULikKKyAgICovCisgIFRKWE9QX1JPVDE4MCwKKyAgLyoqCisgICAqIFJvdGF0ZSBpbWFnZSBjb3VudGVyLWNsb2Nrd2lzZSBieSA5MCBkZWdyZWVzLiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0CisgICAqIGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIG9uIHRoZSByaWdodCBlZGdlIChzZWUKKyAgICogI1RKWE9QVF9QRVJGRUNULikKKyAgICovCisgIFRKWE9QX1JPVDI3MAorfTsKKworCisvKioKKyAqIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgI3RqVHJhbnNmb3JtKCkgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMKKyAqIG5vdCBwZXJmZWN0LiAgTG9zc2xlc3MgdHJhbnNmb3JtcyBvcGVyYXRlIG9uIE1DVSBibG9ja3MsIHdob3NlIHNpemUgZGVwZW5kcworICogb24gdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgKHNlZSAjdGpNQ1VXaWR0aAorICogYW5kICN0ak1DVUhlaWdodC4pICBJZiB0aGUgaW1hZ2UncyB3aWR0aCBvciBoZWlnaHQgaXMgbm90IGV2ZW5seSBkaXZpc2libGUKKyAqIGJ5IHRoZSBNQ1UgYmxvY2sgc2l6ZSwgdGhlbiB0aGVyZSB3aWxsIGJlIHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgcmlnaHQKKyAqIGFuZC9vciBib3R0b20gZWRnZXMuICBJdCBpcyBub3QgcG9zc2libGUgdG8gbW92ZSB0aGVzZSBwYXJ0aWFsIE1DVSBibG9ja3MgdG8KKyAqIHRoZSB0b3Agb3IgbGVmdCBvZiB0aGUgaW1hZ2UsIHNvIGFueSB0cmFuc2Zvcm0gdGhhdCB3b3VsZCByZXF1aXJlIHRoYXQgaXMKKyAqICJpbXBlcmZlY3QuIiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlbiBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzCisgKiB0aGF0IGNhbm5vdCBiZSB0cmFuc2Zvcm1lZCB3aWxsIGJlIGxlZnQgaW4gcGxhY2UsIHdoaWNoIHdpbGwgY3JlYXRlCisgKiBvZGQtbG9va2luZyBzdHJpcHMgb24gdGhlIHJpZ2h0IG9yIGJvdHRvbSBlZGdlIG9mIHRoZSBpbWFnZS4KKyAqLworI2RlZmluZSBUSlhPUFRfUEVSRkVDVCAgMQorLyoqCisgKiBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlICN0alRyYW5zZm9ybSgpIHRvIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0CisgKiBjYW5ub3QgYmUgdHJhbnNmb3JtZWQuCisgKi8KKyNkZWZpbmUgVEpYT1BUX1RSSU0gIDIKKy8qKgorICogVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgbG9zc2xlc3MgY3JvcHBpbmcuICBTZWUgI3RqVHJhbnNmb3JtKCkgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lIFRKWE9QVF9DUk9QICA0CisvKioKKyAqIFRoaXMgb3B0aW9uIHdpbGwgZGlzY2FyZCB0aGUgY29sb3IgZGF0YSBpbiB0aGUgaW5wdXQgaW1hZ2UgYW5kIHByb2R1Y2UKKyAqIGEgZ3JheXNjYWxlIG91dHB1dCBpbWFnZS4KKyAqLworI2RlZmluZSBUSlhPUFRfR1JBWSAgOAorLyoqCisgKiBUaGlzIG9wdGlvbiB3aWxsIHByZXZlbnQgI3RqVHJhbnNmb3JtKCkgZnJvbSBvdXRwdXR0aW5nIGEgSlBFRyBpbWFnZSBmb3IKKyAqIHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0gKHRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGN1c3RvbQorICogZmlsdGVyIHRvIGNhcHR1cmUgdGhlIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMgd2l0aG91dCB0cmFuc2NvZGluZworICogdGhlbS4pCisgKi8KKyNkZWZpbmUgVEpYT1BUX05PT1VUUFVUICAxNgorLyoqCisgKiBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBwcm9ncmVzc2l2ZSBlbnRyb3B5IGNvZGluZyBpbiB0aGUgb3V0cHV0IGltYWdlCisgKiBnZW5lcmF0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIHRyYW5zZm9ybS4gIFByb2dyZXNzaXZlIGVudHJvcHkgY29kaW5nIHdpbGwKKyAqIGdlbmVyYWxseSBpbXByb3ZlIGNvbXByZXNzaW9uIHJlbGF0aXZlIHRvIGJhc2VsaW5lIGVudHJvcHkgY29kaW5nICh0aGUKKyAqIGRlZmF1bHQpLCBidXQgaXQgd2lsbCByZWR1Y2UgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcGVyZm9ybWFuY2UKKyAqIGNvbnNpZGVyYWJseS4KKyAqLworI2RlZmluZSBUSlhPUFRfUFJPR1JFU1NJVkUgIDMyCisvKioKKyAqIFRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCAjdGpUcmFuc2Zvcm0oKSBmcm9tIGNvcHlpbmcgYW55IGV4dHJhIG1hcmtlcnMKKyAqIChpbmNsdWRpbmcgRVhJRiBhbmQgSUNDIHByb2ZpbGUgZGF0YSkgZnJvbSB0aGUgc291cmNlIGltYWdlIHRvIHRoZSBvdXRwdXQKKyAqIGltYWdlLgorICovCisjZGVmaW5lIFRKWE9QVF9DT1BZTk9ORSAgNjQKKworCisvKioKKyAqIFNjYWxpbmcgZmFjdG9yCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIE51bWVyYXRvcgorICAgKi8KKyAgaW50IG51bTsKKyAgLyoqCisgICAqIERlbm9taW5hdG9yCisgICAqLworICBpbnQgZGVub207Cit9IHRqc2NhbGluZ2ZhY3RvcjsKKworLyoqCisgKiBDcm9wcGluZyByZWdpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFRoaXMgbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlCisgICAqIGJ5IHRoZSBNQ1UgYmxvY2sgd2lkdGggKHNlZSAjdGpNQ1VXaWR0aC4pCisgICAqLworICBpbnQgeDsKKyAgLyoqCisgICAqIFRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgVGhpcyBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUKKyAgICogYnkgdGhlIE1DVSBibG9jayBoZWlnaHQgKHNlZSAjdGpNQ1VIZWlnaHQuKQorICAgKi8KKyAgaW50IHk7CisgIC8qKgorICAgKiBUaGUgd2lkdGggb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2YKKyAgICogc2V0dGluZyBpdCB0byB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0geC4KKyAgICovCisgIGludCB3OworICAvKioKKyAgICogVGhlIGhlaWdodCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZgorICAgKiBzZXR0aW5nIGl0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0geS4KKyAgICovCisgIGludCBoOworfSB0anJlZ2lvbjsKKworLyoqCisgKiBMb3NzbGVzcyB0cmFuc2Zvcm0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgdGp0cmFuc2Zvcm0geworICAvKioKKyAgICogQ3JvcHBpbmcgcmVnaW9uCisgICAqLworICB0anJlZ2lvbiByOworICAvKioKKyAgICogT25lIG9mIHRoZSBAcmVmIFRKWE9QICJ0cmFuc2Zvcm0gb3BlcmF0aW9ucyIKKyAgICovCisgIGludCBvcDsKKyAgLyoqCisgICAqIFRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvZiBtb3JlIG9mIHRoZSBAcmVmIFRKWE9QVF9DUk9QICJ0cmFuc2Zvcm0gb3B0aW9ucyIKKyAgICovCisgIGludCBvcHRpb25zOworICAvKioKKyAgICogQXJiaXRyYXJ5IGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjYWxsYmFjaworICAgKiBmdW5jdGlvbgorICAgKi8KKyAgdm9pZCAqZGF0YTsKKyAgLyoqCisgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIERDVCBjb2VmZmljaWVudHMKKyAgICogYWZ0ZXIgdGhleSBhcmUgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCBidXQgYmVmb3JlIHRoZXkgYXJlIHRyYW5zY29kZWQgdG8gYQorICAgKiBuZXcgSlBFRyBpbWFnZS4gIFRoaXMgYWxsb3dzIGZvciBjdXN0b20gZmlsdGVycyBvciBvdGhlciB0cmFuc2Zvcm1hdGlvbnMKKyAgICogdG8gYmUgYXBwbGllZCBpbiB0aGUgZnJlcXVlbmN5IGRvbWFpbi4KKyAgICoKKyAgICogQHBhcmFtIGNvZWZmcyBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMuICAoTk9URToKKyAgICogdGhpcyBwb2ludGVyIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIG9uY2UgdGhlIGNhbGxiYWNrIHJldHVybnMsIHNvCisgICAqIGFwcGxpY2F0aW9ucyB3aXNoaW5nIHRvIGhhbmQgb2ZmIHRoZSBEQ1QgY29lZmZpY2llbnRzIHRvIGFub3RoZXIgZnVuY3Rpb24KKyAgICogb3IgbGlicmFyeSBzaG91bGQgbWFrZSBhIGNvcHkgb2YgdGhlbSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNhbGxiYWNrLikKKyAgICoKKyAgICogQHBhcmFtIGFycmF5UmVnaW9uICN0anJlZ2lvbiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZgorICAgKiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8dHQ+Y29lZmZzPC90dD4gYXMgd2VsbCBhcyBpdHMgb2Zmc2V0IHJlbGF0aXZlIHRvCisgICAqIHRoZSBjb21wb25lbnQgcGxhbmUuICBUdXJib0pQRUcgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2UgdG8gc3BsaXQgZWFjaAorICAgKiBjb21wb25lbnQgcGxhbmUgaW50byBtdWx0aXBsZSBEQ1QgY29lZmZpY2llbnQgYXJyYXlzIGFuZCBjYWxsIHRoZSBjYWxsYmFjaworICAgKiBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIGFycmF5LgorICAgKgorICAgKiBAcGFyYW0gcGxhbmVSZWdpb24gI3RqcmVnaW9uIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mCisgICAqIHRoZSBjb21wb25lbnQgcGxhbmUgdG8gd2hpY2ggPHR0PmNvZWZmczwvdHQ+IGJlbG9uZ3MKKyAgICoKKyAgICogQHBhcmFtIGNvbXBvbmVudElEIElEIG51bWJlciBvZiB0aGUgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoCisgICAqIDx0dD5jb2VmZnM8L3R0PiBiZWxvbmdzIChZLCBDYiwgYW5kIENyIGhhdmUsIHJlc3BlY3RpdmVseSwgSUQncyBvZiAwLCAxLAorICAgKiBhbmQgMiBpbiB0eXBpY2FsIEpQRUcgaW1hZ2VzLikKKyAgICoKKyAgICogQHBhcmFtIHRyYW5zZm9ybUlEIElEIG51bWJlciBvZiB0aGUgdHJhbnNmb3JtZWQgaW1hZ2UgdG8gd2hpY2gKKyAgICogPHR0PmNvZWZmczwvdHQ+IGJlbG9uZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBvZiB0aGUgdHJhbnNmb3JtCisgICAqIGluIHRoZSA8dHQ+dHJhbnNmb3JtczwvdHQ+IGFycmF5IHRoYXQgd2FzIHBhc3NlZCB0byAjdGpUcmFuc2Zvcm0oKS4KKyAgICoKKyAgICogQHBhcmFtIHRyYW5zZm9ybSBhIHBvaW50ZXIgdG8gYSAjdGp0cmFuc2Zvcm0gc3RydWN0dXJlIHRoYXQgc3BlY2lmaWVzIHRoZQorICAgKiBwYXJhbWV0ZXJzIGFuZC9vciBjcm9wcGluZyByZWdpb24gZm9yIHRoaXMgdHJhbnNmb3JtCisgICAqCisgICAqIEByZXR1cm4gMCBpZiB0aGUgY2FsbGJhY2sgd2FzIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICAgKi8KKyAgaW50ICgqY3VzdG9tRmlsdGVyKSAoc2hvcnQgKmNvZWZmcywgdGpyZWdpb24gYXJyYXlSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgIHRqcmVnaW9uIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFuc2Zvcm1JbmRleCwgc3RydWN0IHRqdHJhbnNmb3JtICp0cmFuc2Zvcm0pOworfSB0anRyYW5zZm9ybTsKKworLyoqCisgKiBUdXJib0pQRUcgaW5zdGFuY2UgaGFuZGxlCisgKi8KK3R5cGVkZWYgdm9pZCAqdGpoYW5kbGU7CisKKworLyoqCisgKiBQYWQgdGhlIGdpdmVuIHdpZHRoIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeQorICovCisjZGVmaW5lIFRKUEFEKHdpZHRoKSAgKCgod2lkdGgpICsgMykgJiAofjMpKQorCisvKioKKyAqIENvbXB1dGUgdGhlIHNjYWxlZCB2YWx1ZSBvZiA8dHQ+ZGltZW5zaW9uPC90dD4gdXNpbmcgdGhlIGdpdmVuIHNjYWxpbmcKKyAqIGZhY3Rvci4gIFRoaXMgbWFjcm8gcGVyZm9ybXMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiA8dHQ+Y2VpbChkaW1lbnNpb24gKgorICogc2NhbGluZ0ZhY3Rvcik8L3R0Pi4KKyAqLworI2RlZmluZSBUSlNDQUxFRChkaW1lbnNpb24sIHNjYWxpbmdGYWN0b3IpIFwKKyAgKChkaW1lbnNpb24gKiBzY2FsaW5nRmFjdG9yLm51bSArIHNjYWxpbmdGYWN0b3IuZGVub20gLSAxKSAvIFwKKyAgIHNjYWxpbmdGYWN0b3IuZGVub20pCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKgorICogQ3JlYXRlIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IgaW5zdGFuY2UuCisgKgorICogQHJldHVybiBhIGhhbmRsZSB0byB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSwgb3IgTlVMTCBpZiBhbiBlcnJvcgorICogb2NjdXJyZWQgKHNlZSAjdGpHZXRFcnJvclN0cjIoKS4pCisgKi8KK0RMTEVYUE9SVCB0amhhbmRsZSB0akluaXRDb21wcmVzcyh2b2lkKTsKKworCisvKioKKyAqIENvbXByZXNzIGFuIFJHQiwgZ3JheXNjYWxlLCBvciBDTVlLIGltYWdlIGludG8gYSBKUEVHIGltYWdlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEBwYXJhbSBzcmNCdWYgcG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0IsIGdyYXlzY2FsZSwgb3IKKyAqIENNWUsgcGl4ZWxzIHRvIGJlIGNvbXByZXNzZWQKKyAqCisgKiBAcGFyYW0gd2lkdGggd2lkdGggKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZQorICoKKyAqIEBwYXJhbSBwaXRjaCBieXRlcyBwZXIgbGluZSBpbiB0aGUgc291cmNlIGltYWdlLiAgTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlCisgKiA8dHQ+d2lkdGggKiAjdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdPC90dD4gaWYgdGhlIGltYWdlIGlzIHVucGFkZGVkLCBvcgorICogPHR0PiNUSlBBRCh3aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF0pPC90dD4gaWYgZWFjaCBsaW5lIG9mIHRoZSBpbWFnZQorICogaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgYXMgaXMgdGhlIGNhc2UgZm9yIFdpbmRvd3MKKyAqIGJpdG1hcHMuICBZb3UgY2FuIGFsc28gYmUgY2xldmVyIGFuZCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLgorICogU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8KKyAqIDx0dD53aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0Pi4KKyAqCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlCisgKgorICogQHBhcmFtIHBpeGVsRm9ybWF0IHBpeGVsIGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIChzZWUgQHJlZiBUSlBGCisgKiAiUGl4ZWwgZm9ybWF0cyIuKQorICoKKyAqIEBwYXJhbSBqcGVnQnVmIGFkZHJlc3Mgb2YgYSBwb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUKKyAqIEpQRUcgaW1hZ2UuICBUdXJib0pQRUcgaGFzIHRoZSBhYmlsaXR5IHRvIHJlYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyCisgKiB0byBhY2NvbW1vZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4gIFRodXMsIHlvdSBjYW4gY2hvb3NlIHRvOgorICogLSMgcHJlLWFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciB3aXRoIGFuIGFyYml0cmFyeSBzaXplIHVzaW5nICN0akFsbG9jKCkgYW5kCisgKiBsZXQgVHVyYm9KUEVHIGdyb3cgdGhlIGJ1ZmZlciBhcyBuZWVkZWQsCisgKiAtIyBzZXQgPHR0PipqcGVnQnVmPC90dD4gdG8gTlVMTCB0byB0ZWxsIFR1cmJvSlBFRyB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyCisgKiBmb3IgeW91LCBvcgorICogLSMgcHJlLWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gYSAid29yc3QgY2FzZSIgc2l6ZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcKKyAqICN0akJ1ZlNpemUoKS4gIFRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgbmV2ZXIgaGFzIHRvIGJlCisgKiByZS1hbGxvY2F0ZWQgKHNldHRpbmcgI1RKRkxBR19OT1JFQUxMT0MgZ3VhcmFudGVlcyB0aGF0IGl0IHdvbid0IGJlLikKKyAqIC4KKyAqIElmIHlvdSBjaG9vc2Ugb3B0aW9uIDEsIDx0dD4qanBlZ1NpemU8L3R0PiBzaG91bGQgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHlvdXIKKyAqIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiAgSW4gYW55IGNhc2UsIHVubGVzcyB5b3UgaGF2ZSBzZXQgI1RKRkxBR19OT1JFQUxMT0MsCisgKiB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayA8dHQ+KmpwZWdCdWY8L3R0PiB1cG9uIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIGFzCisgKiBpdCBtYXkgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIEBwYXJhbSBqcGVnU2l6ZSBwb2ludGVyIHRvIGFuIHVuc2lnbmVkIGxvbmcgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgc2l6ZSBvZgorICogdGhlIEpQRUcgaW1hZ2UgYnVmZmVyLiAgSWYgPHR0PipqcGVnQnVmPC90dD4gcG9pbnRzIHRvIGEgcHJlLWFsbG9jYXRlZAorICogYnVmZmVyLCB0aGVuIDx0dD4qanBlZ1NpemU8L3R0PiBzaG91bGQgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuCisgKiBVcG9uIHJldHVybiwgPHR0PipqcGVnU2l6ZTwvdHQ+IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4KKyAqIGJ5dGVzLikgIElmIDx0dD4qanBlZ0J1ZjwvdHQ+IHBvaW50cyB0byBhIEpQRUcgaW1hZ2UgYnVmZmVyIHRoYXQgaXMgYmVpbmcKKyAqIHJldXNlZCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byBvbmUgb2YgdGhlIEpQRUcgY29tcHJlc3Npb24gZnVuY3Rpb25zLCB0aGVuCisgKiA8dHQ+KmpwZWdTaXplPC90dD4gaXMgaWdub3JlZC4KKyAqCisgKiBAcGFyYW0ganBlZ1N1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIGJlIHVzZWQgd2hlbgorICogZ2VuZXJhdGluZyB0aGUgSlBFRyBpbWFnZSAoc2VlIEByZWYgVEpTQU1QCisgKiAiQ2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucyIuKQorICoKKyAqIEBwYXJhbSBqcGVnUXVhbCB0aGUgaW1hZ2UgcXVhbGl0eSBvZiB0aGUgZ2VuZXJhdGVkIEpQRUcgaW1hZ2UgKDEgPSB3b3JzdCwKKyAqIDEwMCA9IGJlc3QpCisgKgorICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19BQ0NVUkFURURDVAorICogImZsYWdzIgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorKi8KK0RMTEVYUE9SVCBpbnQgdGpDb21wcmVzczIodGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmLCB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGpwZWdTdWJzYW1wLCBpbnQganBlZ1F1YWwsIGludCBmbGFncyk7CisKKworLyoqCisgKiBDb21wcmVzcyBhIFlVViBwbGFuYXIgaW1hZ2UgaW50byBhIEpQRUcgaW1hZ2UuCisgKgorICogQHBhcmFtIGhhbmRsZSBhIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlCisgKgorICogQHBhcmFtIHNyY0J1ZiBwb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIGEgWVVWIHBsYW5hciBpbWFnZSB0byBiZQorICogY29tcHJlc3NlZC4gIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAqICN0akJ1ZlNpemVZVVYyKCkgZm9yIHRoZSBnaXZlbiBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCBhbmQgbGV2ZWwgb2YKKyAqIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgc2hvdWxkIGJlCisgKiBzdG9yZWQgc2VxdWVudGlhbGx5IGluIHRoZSBzb3VyY2UgYnVmZmVyIChyZWZlciB0byBAcmVmIFlVVm5vdGVzCisgKiAiWVVWIEltYWdlIEZvcm1hdCBOb3RlcyIuKQorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlLiAgSWYgdGhlIHdpZHRoIGlzIG5vdCBhbgorICogZXZlbiBtdWx0aXBsZSBvZiB0aGUgTUNVIGJsb2NrIHdpZHRoIChzZWUgI3RqTUNVV2lkdGgpLCB0aGVuIGFuIGludGVybWVkaWF0ZQorICogYnVmZmVyIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy4KKyAqCisgKiBAcGFyYW0gcGFkIHRoZSBsaW5lIHBhZGRpbmcgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlLiAgRm9yIGluc3RhbmNlLCBpZiBlYWNoCisgKiBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIFlVViBpbWFnZSBpcyBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgNAorICogYnl0ZXMsIHRoZW4gPHR0PnBhZDwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gNC4KKyAqCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlLiAgSWYgdGhlIGhlaWdodCBpcyBub3QKKyAqIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jayBoZWlnaHQgKHNlZSAjdGpNQ1VIZWlnaHQpLCB0aGVuIGFuCisgKiBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy4KKyAqCisgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlCisgKiBpbWFnZSAoc2VlIEByZWYgVEpTQU1QICJDaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zIi4pCisgKgorICogQHBhcmFtIGpwZWdCdWYgYWRkcmVzcyBvZiBhIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZQorICogSlBFRyBpbWFnZS4gIFR1cmJvSlBFRyBoYXMgdGhlIGFiaWxpdHkgdG8gcmVhbGxvY2F0ZSB0aGUgSlBFRyBidWZmZXIgdG8KKyAqIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiAgVGh1cywgeW91IGNhbiBjaG9vc2UgdG86CisgKiAtIyBwcmUtYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyIHdpdGggYW4gYXJiaXRyYXJ5IHNpemUgdXNpbmcgI3RqQWxsb2MoKSBhbmQKKyAqIGxldCBUdXJib0pQRUcgZ3JvdyB0aGUgYnVmZmVyIGFzIG5lZWRlZCwKKyAqIC0jIHNldCA8dHQ+KmpwZWdCdWY8L3R0PiB0byBOVUxMIHRvIHRlbGwgVHVyYm9KUEVHIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIKKyAqIGZvciB5b3UsIG9yCisgKiAtIyBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBhICJ3b3JzdCBjYXNlIiBzaXplIGRldGVybWluZWQgYnkgY2FsbGluZworICogI3RqQnVmU2l6ZSgpLiAgVGhpcyBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBuZXZlciBoYXMgdG8gYmUKKyAqIHJlLWFsbG9jYXRlZCAoc2V0dGluZyAjVEpGTEFHX05PUkVBTExPQyBndWFyYW50ZWVzIHRoYXQgaXQgd29uJ3QgYmUuKQorICogLgorICogSWYgeW91IGNob29zZSBvcHRpb24gMSwgPHR0PipqcGVnU2l6ZTwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgeW91cgorICogcHJlLWFsbG9jYXRlZCBidWZmZXIuICBJbiBhbnkgY2FzZSwgdW5sZXNzIHlvdSBoYXZlIHNldCAjVEpGTEFHX05PUkVBTExPQywKKyAqIHlvdSBzaG91bGQgYWx3YXlzIGNoZWNrIDx0dD4qanBlZ0J1ZjwvdHQ+IHVwb24gcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgYXMKKyAqIGl0IG1heSBoYXZlIGNoYW5nZWQuCisgKgorICogQHBhcmFtIGpwZWdTaXplIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBzaXplIG9mCisgKiB0aGUgSlBFRyBpbWFnZSBidWZmZXIuICBJZiA8dHQ+KmpwZWdCdWY8L3R0PiBwb2ludHMgdG8gYSBwcmUtYWxsb2NhdGVkCisgKiBidWZmZXIsIHRoZW4gPHR0PipqcGVnU2l6ZTwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAqIFVwb24gcmV0dXJuLCA8dHQ+KmpwZWdTaXplPC90dD4gd2lsbCBjb250YWluIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbgorICogYnl0ZXMuKSAgSWYgPHR0PipqcGVnQnVmPC90dD4gcG9pbnRzIHRvIGEgSlBFRyBpbWFnZSBidWZmZXIgdGhhdCBpcyBiZWluZworICogcmV1c2VkIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIG9uZSBvZiB0aGUgSlBFRyBjb21wcmVzc2lvbiBmdW5jdGlvbnMsIHRoZW4KKyAqIDx0dD4qanBlZ1NpemU8L3R0PiBpcyBpZ25vcmVkLgorICoKKyAqIEBwYXJhbSBqcGVnUXVhbCB0aGUgaW1hZ2UgcXVhbGl0eSBvZiB0aGUgZ2VuZXJhdGVkIEpQRUcgaW1hZ2UgKDEgPSB3b3JzdCwKKyAqIDEwMCA9IGJlc3QpCisgKgorICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19BQ0NVUkFURURDVAorICogImZsYWdzIgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorKi8KK0RMTEVYUE9SVCBpbnQgdGpDb21wcmVzc0Zyb21ZVVYodGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBhZCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwgaW50IGpwZWdRdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCisKKy8qKgorICogQ29tcHJlc3MgYSBzZXQgb2YgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyBpbnRvIGEgSlBFRyBpbWFnZS4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UKKyAqCisgKiBAcGFyYW0gc3JjUGxhbmVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMKKyAqIChvciBqdXN0IGEgWSBwbGFuZSwgaWYgY29tcHJlc3NpbmcgYSBncmF5c2NhbGUgaW1hZ2UpIHRoYXQgY29udGFpbiBhIFlVVgorICogaW1hZ2UgdG8gYmUgY29tcHJlc3NlZC4gIFRoZXNlIHBsYW5lcyBjYW4gYmUgY29udGlndW91cyBvciBub24tY29udGlndW91cyBpbgorICogbWVtb3J5LiAgVGhlIHNpemUgb2YgZWFjaCBwbGFuZSBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIHJldHVybmVkIGJ5CisgKiAjdGpQbGFuZVNpemVZVVYoKSBmb3IgdGhlIGdpdmVuIGltYWdlIHdpZHRoLCBoZWlnaHQsIHN0cmlkZXMsIGFuZCBsZXZlbCBvZgorICogY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBSZWZlciB0byBAcmVmIFlVVm5vdGVzICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIgorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gd2lkdGggd2lkdGggKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZS4gIElmIHRoZSB3aWR0aCBpcyBub3QgYW4KKyAqIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jayB3aWR0aCAoc2VlICN0ak1DVVdpZHRoKSwgdGhlbiBhbiBpbnRlcm1lZGlhdGUKKyAqIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuCisgKgorICogQHBhcmFtIHN0cmlkZXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGVhY2ggc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlcgorICogbGluZSBpbiB0aGUgY29ycmVzcG9uZGluZyBwbGFuZSBvZiB0aGUgWVVWIHNvdXJjZSBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZQorICogZm9yIGFueSBwbGFuZSB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHBsYW5lIHdpZHRoIChzZWUKKyAqIEByZWYgWVVWbm90ZXMgIllVViBJbWFnZSBGb3JtYXQgTm90ZXMiLikgIElmIDx0dD5zdHJpZGVzPC90dD4gaXMgTlVMTCwgdGhlbgorICogdGhlIHN0cmlkZXMgZm9yIGFsbCBwbGFuZXMgd2lsbCBiZSBzZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwbGFuZSB3aWR0aHMuCisgKiBZb3UgY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBzcGVjaWZ5IGFuIGFyYml0cmFyeSBhbW91bnQgb2YgbGluZQorICogcGFkZGluZyBpbiBlYWNoIHBsYW5lIG9yIHRvIGNyZWF0ZSBhIEpQRUcgaW1hZ2UgZnJvbSBhIHN1YnJlZ2lvbiBvZiBhIGxhcmdlcgorICogWVVWIHBsYW5hciBpbWFnZS4KKyAqCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlLiAgSWYgdGhlIGhlaWdodCBpcyBub3QKKyAqIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jayBoZWlnaHQgKHNlZSAjdGpNQ1VIZWlnaHQpLCB0aGVuIGFuCisgKiBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy4KKyAqCisgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlCisgKiBpbWFnZSAoc2VlIEByZWYgVEpTQU1QICJDaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zIi4pCisgKgorICogQHBhcmFtIGpwZWdCdWYgYWRkcmVzcyBvZiBhIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZQorICogSlBFRyBpbWFnZS4gIFR1cmJvSlBFRyBoYXMgdGhlIGFiaWxpdHkgdG8gcmVhbGxvY2F0ZSB0aGUgSlBFRyBidWZmZXIgdG8KKyAqIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiAgVGh1cywgeW91IGNhbiBjaG9vc2UgdG86CisgKiAtIyBwcmUtYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyIHdpdGggYW4gYXJiaXRyYXJ5IHNpemUgdXNpbmcgI3RqQWxsb2MoKSBhbmQKKyAqIGxldCBUdXJib0pQRUcgZ3JvdyB0aGUgYnVmZmVyIGFzIG5lZWRlZCwKKyAqIC0jIHNldCA8dHQ+KmpwZWdCdWY8L3R0PiB0byBOVUxMIHRvIHRlbGwgVHVyYm9KUEVHIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIKKyAqIGZvciB5b3UsIG9yCisgKiAtIyBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBhICJ3b3JzdCBjYXNlIiBzaXplIGRldGVybWluZWQgYnkgY2FsbGluZworICogI3RqQnVmU2l6ZSgpLiAgVGhpcyBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBuZXZlciBoYXMgdG8gYmUKKyAqIHJlLWFsbG9jYXRlZCAoc2V0dGluZyAjVEpGTEFHX05PUkVBTExPQyBndWFyYW50ZWVzIHRoYXQgaXQgd29uJ3QgYmUuKQorICogLgorICogSWYgeW91IGNob29zZSBvcHRpb24gMSwgPHR0PipqcGVnU2l6ZTwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgeW91cgorICogcHJlLWFsbG9jYXRlZCBidWZmZXIuICBJbiBhbnkgY2FzZSwgdW5sZXNzIHlvdSBoYXZlIHNldCAjVEpGTEFHX05PUkVBTExPQywKKyAqIHlvdSBzaG91bGQgYWx3YXlzIGNoZWNrIDx0dD4qanBlZ0J1ZjwvdHQ+IHVwb24gcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgYXMKKyAqIGl0IG1heSBoYXZlIGNoYW5nZWQuCisgKgorICogQHBhcmFtIGpwZWdTaXplIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBzaXplIG9mCisgKiB0aGUgSlBFRyBpbWFnZSBidWZmZXIuICBJZiA8dHQ+KmpwZWdCdWY8L3R0PiBwb2ludHMgdG8gYSBwcmUtYWxsb2NhdGVkCisgKiBidWZmZXIsIHRoZW4gPHR0PipqcGVnU2l6ZTwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAqIFVwb24gcmV0dXJuLCA8dHQ+KmpwZWdTaXplPC90dD4gd2lsbCBjb250YWluIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbgorICogYnl0ZXMuKSAgSWYgPHR0PipqcGVnQnVmPC90dD4gcG9pbnRzIHRvIGEgSlBFRyBpbWFnZSBidWZmZXIgdGhhdCBpcyBiZWluZworICogcmV1c2VkIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIG9uZSBvZiB0aGUgSlBFRyBjb21wcmVzc2lvbiBmdW5jdGlvbnMsIHRoZW4KKyAqIDx0dD4qanBlZ1NpemU8L3R0PiBpcyBpZ25vcmVkLgorICoKKyAqIEBwYXJhbSBqcGVnUXVhbCB0aGUgaW1hZ2UgcXVhbGl0eSBvZiB0aGUgZ2VuZXJhdGVkIEpQRUcgaW1hZ2UgKDEgPSB3b3JzdCwKKyAqIDEwMCA9IGJlc3QpCisgKgorICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19BQ0NVUkFURURDVAorICogImZsYWdzIgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorKi8KK0RMTEVYUE9SVCBpbnQgdGpDb21wcmVzc0Zyb21ZVVZQbGFuZXModGpoYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqc3JjUGxhbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGNvbnN0IGludCAqc3RyaWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwgaW50IGpwZWdRdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCisKKy8qKgorICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcgaW1hZ2Ugd2l0aAorICogdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMKKyAqIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlLiAgVGhlIHJlYXNvbiBmb3IgdGhpcworICogaXMgdGhhdCB0aGUgSlBFRyBmb3JtYXQgdXNlcyAxNi1iaXQgY29lZmZpY2llbnRzLCBhbmQgaXQgaXMgdGh1cyBwb3NzaWJsZQorICogZm9yIGEgdmVyeSBoaWdoLXF1YWxpdHkgSlBFRyBpbWFnZSB3aXRoIHZlcnkgaGlnaC1mcmVxdWVuY3kgY29udGVudCB0bworICogZXhwYW5kIHJhdGhlciB0aGFuIGNvbXByZXNzIHdoZW4gY29udmVydGVkIHRvIHRoZSBKUEVHIGZvcm1hdC4gIFN1Y2ggaW1hZ2VzCisgKiByZXByZXNlbnQgYSB2ZXJ5IHJhcmUgY29ybmVyIGNhc2UsIGJ1dCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcHJlZGljdCB0aGUKKyAqIHNpemUgb2YgYSBKUEVHIGltYWdlIHByaW9yIHRvIGNvbXByZXNzaW9uLCB0aGUgY29ybmVyIGNhc2UgaGFzIHRvIGJlCisgKiBoYW5kbGVkLgorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgaW1hZ2UKKyAqCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgaW1hZ2UKKyAqCisgKiBAcGFyYW0ganBlZ1N1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIGJlIHVzZWQgd2hlbgorICogZ2VuZXJhdGluZyB0aGUgSlBFRyBpbWFnZSAoc2VlIEByZWYgVEpTQU1QCisgKiAiQ2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucyIuKQorICoKKyAqIEByZXR1cm4gdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUKKyAqIGltYWdlLCBvciAtMSBpZiB0aGUgYXJndW1lbnRzIGFyZSBvdXQgb2YgYm91bmRzLgorICovCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyB0akJ1ZlNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQganBlZ1N1YnNhbXApOworCisKKy8qKgorICogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBZVVYgcGxhbmFyIGltYWdlIHdpdGgKKyAqIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgaW1hZ2UKKyAqCisgKiBAcGFyYW0gcGFkIHRoZSB3aWR0aCBvZiBlYWNoIGxpbmUgaW4gZWFjaCBwbGFuZSBvZiB0aGUgaW1hZ2UgaXMgcGFkZGVkIHRvCisgKiB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB0aGlzIG51bWJlciBvZiBieXRlcyAobXVzdCBiZSBhIHBvd2VyIG9mIDIuKQorICoKKyAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBpbWFnZQorICoKKyAqIEBwYXJhbSBzdWJzYW1wIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGluIHRoZSBpbWFnZSAoc2VlCisgKiBAcmVmIFRKU0FNUCAiQ2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucyIuKQorICoKKyAqIEByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgdGhlIGltYWdlLCBvcgorICogLTEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgb3V0IG9mIGJvdW5kcy4KKyAqLworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgdGpCdWZTaXplWVVWMihpbnQgd2lkdGgsIGludCBwYWQsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdWJzYW1wKTsKKworCisvKioKKyAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIGltYWdlIHBsYW5lIHdpdGgKKyAqIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorICoKKyAqIEBwYXJhbSBjb21wb25lbnRJRCBJRCBudW1iZXIgb2YgdGhlIGltYWdlIHBsYW5lICgwID0gWSwgMSA9IFUvQ2IsIDIgPSBWL0NyKQorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiAgTk9URTogdGhpcyBpcyB0aGUgd2lkdGggb2YKKyAqIHRoZSB3aG9sZSBpbWFnZSwgbm90IHRoZSBwbGFuZSB3aWR0aC4KKyAqCisgKiBAcGFyYW0gc3RyaWRlIGJ5dGVzIHBlciBsaW5lIGluIHRoZSBpbWFnZSBwbGFuZS4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorICogZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aC4KKyAqCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiAgTk9URTogdGhpcyBpcyB0aGUgaGVpZ2h0CisgKiBvZiB0aGUgd2hvbGUgaW1hZ2UsIG5vdCB0aGUgcGxhbmUgaGVpZ2h0LgorICoKKyAqIEBwYXJhbSBzdWJzYW1wIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGluIHRoZSBpbWFnZSAoc2VlCisgKiBAcmVmIFRKU0FNUCAiQ2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucyIuKQorICoKKyAqIEByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgdGhlIFlVViBpbWFnZQorICogcGxhbmUsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuCisgKi8KK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIHRqUGxhbmVTaXplWVVWKGludCBjb21wb25lbnRJRCwgaW50IHdpZHRoLCBpbnQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHN1YnNhbXApOworCisKKy8qKgorICogVGhlIHBsYW5lIHdpZHRoIG9mIGEgWVVWIGltYWdlIHBsYW5lIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBSZWZlciB0bworICogQHJlZiBZVVZub3RlcyAiWVVWIEltYWdlIEZvcm1hdCBOb3RlcyIgZm9yIGEgZGVzY3JpcHRpb24gb2YgcGxhbmUgd2lkdGguCisgKgorICogQHBhcmFtIGNvbXBvbmVudElEIElEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwgMiA9IFYvQ3IpCisgKgorICogQHBhcmFtIHdpZHRoIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UKKyAqCisgKiBAcGFyYW0gc3Vic2FtcCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyBpbiB0aGUgaW1hZ2UgKHNlZQorICogQHJlZiBUSlNBTVAgIkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMiLikKKyAqCisgKiBAcmV0dXJuIHRoZSBwbGFuZSB3aWR0aCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCBvcgorICogLTEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgb3V0IG9mIGJvdW5kcy4KKyAqLworRExMRVhQT1JUIGludCB0alBsYW5lV2lkdGgoaW50IGNvbXBvbmVudElELCBpbnQgd2lkdGgsIGludCBzdWJzYW1wKTsKKworCisvKioKKyAqIFRoZSBwbGFuZSBoZWlnaHQgb2YgYSBZVVYgaW1hZ2UgcGxhbmUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIFJlZmVyIHRvCisgKiBAcmVmIFlVVm5vdGVzICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIiBmb3IgYSBkZXNjcmlwdGlvbiBvZiBwbGFuZSBoZWlnaHQuCisgKgorICogQHBhcmFtIGNvbXBvbmVudElEIElEIG51bWJlciBvZiB0aGUgaW1hZ2UgcGxhbmUgKDAgPSBZLCAxID0gVS9DYiwgMiA9IFYvQ3IpCisgKgorICogQHBhcmFtIGhlaWdodCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZQorICoKKyAqIEBwYXJhbSBzdWJzYW1wIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGluIHRoZSBpbWFnZSAoc2VlCisgKiBAcmVmIFRKU0FNUCAiQ2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucyIuKQorICoKKyAqIEByZXR1cm4gdGhlIHBsYW5lIGhlaWdodCBvZiBhIFlVViBpbWFnZSBwbGFuZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCBvcgorICogLTEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgb3V0IG9mIGJvdW5kcy4KKyAqLworRExMRVhQT1JUIGludCB0alBsYW5lSGVpZ2h0KGludCBjb21wb25lbnRJRCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXApOworCisKKy8qKgorICogRW5jb2RlIGFuIFJHQiBvciBncmF5c2NhbGUgaW1hZ2UgaW50byBhIFlVViBwbGFuYXIgaW1hZ2UuICBUaGlzIGZ1bmN0aW9uCisgKiB1c2VzIHRoZSBhY2NlbGVyYXRlZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGluIHRoZSB1bmRlcmx5aW5nCisgKiBjb2RlYyBidXQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgb2YgdGhlIG90aGVyIHN0ZXBzIGluIHRoZSBKUEVHIGNvbXByZXNzaW9uCisgKiBwcm9jZXNzLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEBwYXJhbSBzcmNCdWYgcG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0Igb3IgZ3JheXNjYWxlIHBpeGVscworICogdG8gYmUgZW5jb2RlZAorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlCisgKgorICogQHBhcmFtIHBpdGNoIGJ5dGVzIHBlciBsaW5lIGluIHRoZSBzb3VyY2UgaW1hZ2UuICBOb3JtYWxseSwgdGhpcyBzaG91bGQgYmUKKyAqIDx0dD53aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0PiBpZiB0aGUgaW1hZ2UgaXMgdW5wYWRkZWQsIG9yCisgKiA8dHQ+I1RKUEFEKHdpZHRoICogI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XSk8L3R0PiBpZiBlYWNoIGxpbmUgb2YgdGhlIGltYWdlCisgKiBpcyBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LCBhcyBpcyB0aGUgY2FzZSBmb3IgV2luZG93cworICogYml0bWFwcy4gIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuCisgKiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0bworICogPHR0PndpZHRoICogI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XTwvdHQ+LgorICoKKyAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2UKKyAqCisgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKHNlZSBAcmVmIFRKUEYKKyAqICJQaXhlbCBmb3JtYXRzIi4pCisgKgorICogQHBhcmFtIGRzdEJ1ZiBwb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgWVVWIGltYWdlLgorICogVXNlICN0akJ1ZlNpemVZVVYyKCkgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciB0aGlzIGJ1ZmZlciBiYXNlZAorICogb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KKyAqIFRoZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIHdpbGwgYmUgc3RvcmVkIHNlcXVlbnRpYWxseSBpbiB0aGUKKyAqIGJ1ZmZlciAocmVmZXIgdG8gQHJlZiBZVVZub3RlcyAiWVVWIEltYWdlIEZvcm1hdCBOb3RlcyIuKQorICoKKyAqIEBwYXJhbSBwYWQgdGhlIHdpZHRoIG9mIGVhY2ggbGluZSBpbiBlYWNoIHBsYW5lIG9mIHRoZSBZVVYgaW1hZ2Ugd2lsbCBiZQorICogcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIChtdXN0IGJlIGEgcG93ZXIgb2YKKyAqIDIuKSAgVG8gZ2VuZXJhdGUgaW1hZ2VzIHN1aXRhYmxlIGZvciBYIFZpZGVvLCA8dHQ+cGFkPC90dD4gc2hvdWxkIGJlIHNldCB0bworICogNC4KKyAqCisgKiBAcGFyYW0gc3Vic2FtcCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdG8gYmUgdXNlZCB3aGVuCisgKiBnZW5lcmF0aW5nIHRoZSBZVVYgaW1hZ2UgKHNlZSBAcmVmIFRKU0FNUAorICogIkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMiLikgIFRvIGdlbmVyYXRlIGltYWdlcyBzdWl0YWJsZSBmb3IgWAorICogVmlkZW8sIDx0dD5zdWJzYW1wPC90dD4gc2hvdWxkIGJlIHNldCB0byBAcmVmIFRKU0FNUF80MjAuICBUaGlzIHByb2R1Y2VzIGFuCisgKiBpbWFnZSBjb21wYXRpYmxlIHdpdGggdGhlIEk0MjAgKEFLQSAiWVVWNDIwUCIpIGZvcm1hdC4KKyAqCisgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEByZWYgVEpGTEFHX0FDQ1VSQVRFRENUCisgKiAiZmxhZ3MiCisgKgorICogQHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgI3RqR2V0RXJyb3JTdHIyKCkKKyAqIGFuZCAjdGpHZXRFcnJvckNvZGUoKS4pCisqLworRExMRVhQT1JUIGludCB0akVuY29kZVlVVjModGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgcGFkLCBpbnQgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CisKKworLyoqCisgKiBFbmNvZGUgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIHNlcGFyYXRlIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZQorICogcGxhbmVzLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBhY2NlbGVyYXRlZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGluIHRoZQorICogdW5kZXJseWluZyBjb2RlYyBidXQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgb2YgdGhlIG90aGVyIHN0ZXBzIGluIHRoZSBKUEVHCisgKiBjb21wcmVzc2lvbiBwcm9jZXNzLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEBwYXJhbSBzcmNCdWYgcG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0Igb3IgZ3JheXNjYWxlIHBpeGVscworICogdG8gYmUgZW5jb2RlZAorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlCisgKgorICogQHBhcmFtIHBpdGNoIGJ5dGVzIHBlciBsaW5lIGluIHRoZSBzb3VyY2UgaW1hZ2UuICBOb3JtYWxseSwgdGhpcyBzaG91bGQgYmUKKyAqIDx0dD53aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0PiBpZiB0aGUgaW1hZ2UgaXMgdW5wYWRkZWQsIG9yCisgKiA8dHQ+I1RKUEFEKHdpZHRoICogI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XSk8L3R0PiBpZiBlYWNoIGxpbmUgb2YgdGhlIGltYWdlCisgKiBpcyBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LCBhcyBpcyB0aGUgY2FzZSBmb3IgV2luZG93cworICogYml0bWFwcy4gIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuCisgKiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0bworICogPHR0PndpZHRoICogI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XTwvdHQ+LgorICoKKyAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2UKKyAqCisgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKHNlZSBAcmVmIFRKUEYKKyAqICJQaXhlbCBmb3JtYXRzIi4pCisgKgorICogQHBhcmFtIGRzdFBsYW5lcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzCisgKiAob3IganVzdCBhIFkgcGxhbmUsIGlmIGdlbmVyYXRpbmcgYSBncmF5c2NhbGUgaW1hZ2UpIHRoYXQgd2lsbCByZWNlaXZlIHRoZQorICogZW5jb2RlZCBpbWFnZS4gIFRoZXNlIHBsYW5lcyBjYW4gYmUgY29udGlndW91cyBvciBub24tY29udGlndW91cyBpbiBtZW1vcnkuCisgKiBVc2UgI3RqUGxhbmVTaXplWVVWKCkgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciBlYWNoIHBsYW5lIGJhc2VkCisgKiBvbiB0aGUgaW1hZ2Ugd2lkdGgsIGhlaWdodCwgc3RyaWRlcywgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLgorICogUmVmZXIgdG8gQHJlZiBZVVZub3RlcyAiWVVWIEltYWdlIEZvcm1hdCBOb3RlcyIgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gc3RyaWRlcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgZWFjaCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyCisgKiBsaW5lIGluIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lIG9mIHRoZSBvdXRwdXQgaW1hZ2UuICBTZXR0aW5nIHRoZSBzdHJpZGUgZm9yCisgKiBhbnkgcGxhbmUgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBwbGFuZSB3aWR0aCAoc2VlCisgKiBAcmVmIFlVVm5vdGVzICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIi4pICBJZiA8dHQ+c3RyaWRlczwvdHQ+IGlzIE5VTEwsIHRoZW4KKyAqIHRoZSBzdHJpZGVzIGZvciBhbGwgcGxhbmVzIHdpbGwgYmUgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgcGxhbmUgd2lkdGhzLgorICogWW91IGNhbiBhZGp1c3QgdGhlIHN0cmlkZXMgaW4gb3JkZXIgdG8gYWRkIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgbGluZQorICogcGFkZGluZyB0byBlYWNoIHBsYW5lIG9yIHRvIGVuY29kZSBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlIGludG8gYQorICogc3VicmVnaW9uIG9mIGEgbGFyZ2VyIFlVViBwbGFuYXIgaW1hZ2UuCisgKgorICogQHBhcmFtIHN1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIGJlIHVzZWQgd2hlbgorICogZ2VuZXJhdGluZyB0aGUgWVVWIGltYWdlIChzZWUgQHJlZiBUSlNBTVAKKyAqICJDaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zIi4pICBUbyBnZW5lcmF0ZSBpbWFnZXMgc3VpdGFibGUgZm9yIFgKKyAqIFZpZGVvLCA8dHQ+c3Vic2FtcDwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gQHJlZiBUSlNBTVBfNDIwLiAgVGhpcyBwcm9kdWNlcyBhbgorICogaW1hZ2UgY29tcGF0aWJsZSB3aXRoIHRoZSBJNDIwIChBS0EgIllVVjQyMFAiKSBmb3JtYXQuCisgKgorICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19BQ0NVUkFURURDVAorICogImZsYWdzIgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorKi8KK0RMTEVYUE9SVCBpbnQgdGpFbmNvZGVZVVZQbGFuZXModGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGNoYXIgKipkc3RQbGFuZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3RyaWRlcywgaW50IHN1YnNhbXAsIGludCBmbGFncyk7CisKKworLyoqCisgKiBDcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UsIG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqIG9jY3VycmVkIChzZWUgI3RqR2V0RXJyb3JTdHIyKCkuKQorKi8KK0RMTEVYUE9SVCB0amhhbmRsZSB0akluaXREZWNvbXByZXNzKHZvaWQpOworCisKKy8qKgorICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYSBKUEVHIGltYWdlIHdpdGhvdXQgZGVjb21wcmVzc2luZyBpdC4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEBwYXJhbSBqcGVnQnVmIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyBhIEpQRUcgaW1hZ2UKKyAqCisgKiBAcGFyYW0ganBlZ1NpemUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpCisgKgorICogQHBhcmFtIHdpZHRoIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgd2lkdGggKGluCisgKiBwaXhlbHMpIG9mIHRoZSBKUEVHIGltYWdlCisgKgorICogQHBhcmFtIGhlaWdodCBwb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGhlaWdodAorICogKGluIHBpeGVscykgb2YgdGhlIEpQRUcgaW1hZ2UKKyAqCisgKiBAcGFyYW0ganBlZ1N1YnNhbXAgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZQorICogbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCB3aGVuIHRoZSBKUEVHIGltYWdlIHdhcyBjb21wcmVzc2VkCisgKiAoc2VlIEByZWYgVEpTQU1QICJDaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zIi4pCisgKgorICogQHBhcmFtIGpwZWdDb2xvcnNwYWNlIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSBvbmUKKyAqIG9mIHRoZSBKUEVHIGNvbG9yc3BhY2UgY29uc3RhbnRzLCBpbmRpY2F0aW5nIHRoZSBjb2xvcnNwYWNlIG9mIHRoZSBKUEVHCisgKiBpbWFnZSAoc2VlIEByZWYgVEpDUyAiSlBFRyBjb2xvcnNwYWNlcyIuKQorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorKi8KK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzSGVhZGVyMyh0amhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgKndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaGVpZ2h0LCBpbnQgKmpwZWdTdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqanBlZ0NvbG9yc3BhY2UpOworCisKKy8qKgorICogUmV0dXJucyBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMgdGhhdCB0aGUgSlBFRyBkZWNvbXByZXNzb3IgaW4KKyAqIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzLgorICoKKyAqIEBwYXJhbSBudW1zY2FsaW5nZmFjdG9ycyBwb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUKKyAqIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QKKyAqCisgKiBAcmV0dXJuIGEgcG9pbnRlciB0byBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMsIG9yIE5VTEwgaWYgYW4KKyAqIGVycm9yIGlzIGVuY291bnRlcmVkIChzZWUgI3RqR2V0RXJyb3JTdHIyKCkuKQorKi8KK0RMTEVYUE9SVCB0anNjYWxpbmdmYWN0b3IgKnRqR2V0U2NhbGluZ0ZhY3RvcnMoaW50ICpudW1zY2FsaW5nZmFjdG9ycyk7CisKKworLyoqCisgKiBEZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhbiBSR0IsIGdyYXlzY2FsZSwgb3IgQ01ZSyBpbWFnZS4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEBwYXJhbSBqcGVnQnVmIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgSlBFRyBpbWFnZSB0byBkZWNvbXByZXNzCisgKgorICogQHBhcmFtIGpwZWdTaXplIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKQorICoKKyAqIEBwYXJhbSBkc3RCdWYgcG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGRlY29tcHJlc3NlZAorICogaW1hZ2UuICBUaGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUgPHR0PnBpdGNoICogc2NhbGVkSGVpZ2h0PC90dD4gYnl0ZXMKKyAqIGluIHNpemUsIHdoZXJlIDx0dD5zY2FsZWRIZWlnaHQ8L3R0PiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nCisgKiAjVEpTQ0FMRUQoKSB3aXRoIHRoZSBKUEVHIGltYWdlIGhlaWdodCBhbmQgb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMKKyAqIHJldHVybmVkIGJ5ICN0akdldFNjYWxpbmdGYWN0b3JzKCkuICBUaGUgPHR0PmRzdEJ1ZjwvdHQ+IHBvaW50ZXIgbWF5IGFsc28gYmUKKyAqIHVzZWQgdG8gZGVjb21wcmVzcyBpbnRvIGEgc3BlY2lmaWMgcmVnaW9uIG9mIGEgbGFyZ2VyIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gd2lkdGggZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBJZiB0aGlzIGlzCisgKiBkaWZmZXJlbnQgdGhhbiB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuCisgKiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QKKyAqIHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIHdpZHRoLiAgSWYgPHR0PndpZHRoPC90dD4gaXMKKyAqIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIGhlaWdodCB3aWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUKKyAqIHNjYWxlZCBpbWFnZSBzaXplLgorICoKKyAqIEBwYXJhbSBwaXRjaCBieXRlcyBwZXIgbGluZSBpbiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBOb3JtYWxseSwgdGhpcyBpcworICogPHR0PnNjYWxlZFdpZHRoICogI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XTwvdHQ+IGlmIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAqIGlzIHVucGFkZGVkLCBlbHNlIDx0dD4jVEpQQUQoc2NhbGVkV2lkdGggKiAjdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdKTwvdHQ+CisgKiBpZiBlYWNoIGxpbmUgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSBpcyBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgMzItYml0CisgKiBib3VuZGFyeSwgYXMgaXMgdGhlIGNhc2UgZm9yIFdpbmRvd3MgYml0bWFwcy4gIChOT1RFOiA8dHQ+c2NhbGVkV2lkdGg8L3R0PgorICogY2FuIGJlIGRldGVybWluZWQgYnkgY2FsbGluZyAjVEpTQ0FMRUQoKSB3aXRoIHRoZSBKUEVHIGltYWdlIHdpZHRoIGFuZCBvbmUKKyAqIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgYnkgI3RqR2V0U2NhbGluZ0ZhY3RvcnMoKS4pICBZb3UgY2FuIGFsc28gYmUKKyAqIGNsZXZlciBhbmQgdXNlIHRoZSBwaXRjaCBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLiAgU2V0dGluZyB0aGlzCisgKiBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvCisgKiA8dHQ+c2NhbGVkV2lkdGggKiAjdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdPC90dD4uCisgKgorICogQHBhcmFtIGhlaWdodCBkZXNpcmVkIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBJZiB0aGlzCisgKiBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbgorICogVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0CisgKiBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCBoZWlnaHQuICBJZiA8dHQ+aGVpZ2h0PC90dD4KKyAqIGlzIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIHdpZHRoIHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZQorICogc2NhbGVkIGltYWdlIHNpemUuCisgKgorICogQHBhcmFtIHBpeGVsRm9ybWF0IHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgKHNlZSBAcmVmCisgKiBUSlBGICJQaXhlbCBmb3JtYXRzIi4pCisgKgorICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19BQ0NVUkFURURDVAorICogImZsYWdzIgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorICovCitETExFWFBPUlQgaW50IHRqRGVjb21wcmVzczIodGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CisKKworLyoqCisgKiBEZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhIFlVViBwbGFuYXIgaW1hZ2UuICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIEpQRUcKKyAqIGRlY29tcHJlc3Npb24gYnV0IGxlYXZlcyBvdXQgdGhlIGNvbG9yIGNvbnZlcnNpb24gc3RlcCwgc28gYSBwbGFuYXIgWVVWCisgKiBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0IgaW1hZ2UuCisgKgorICogQHBhcmFtIGhhbmRsZSBhIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UKKyAqCisgKiBAcGFyYW0ganBlZ0J1ZiBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIEpQRUcgaW1hZ2UgdG8gZGVjb21wcmVzcworICoKKyAqIEBwYXJhbSBqcGVnU2l6ZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykKKyAqCisgKiBAcGFyYW0gZHN0QnVmIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgaW1hZ2UuCisgKiBVc2UgI3RqQnVmU2l6ZVlVVjIoKSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyIGJhc2VkCisgKiBvbiB0aGUgaW1hZ2Ugd2lkdGgsIGhlaWdodCwgcGFkZGluZywgYW5kIGxldmVsIG9mIHN1YnNhbXBsaW5nLiAgVGhlIFksCisgKiBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzIHdpbGwgYmUgc3RvcmVkIHNlcXVlbnRpYWxseSBpbiB0aGUgYnVmZmVyCisgKiAocmVmZXIgdG8gQHJlZiBZVVZub3RlcyAiWVVWIEltYWdlIEZvcm1hdCBOb3RlcyIuKQorICoKKyAqIEBwYXJhbSB3aWR0aCBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBZVVYgaW1hZ2UuICBJZiB0aGlzIGlzCisgKiBkaWZmZXJlbnQgdGhhbiB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuCisgKiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QKKyAqIHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIHdpZHRoLiAgSWYgPHR0PndpZHRoPC90dD4gaXMKKyAqIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIGhlaWdodCB3aWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUKKyAqIHNjYWxlZCBpbWFnZSBzaXplLiAgSWYgdGhlIHNjYWxlZCB3aWR0aCBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgTUNVCisgKiBibG9jayB3aWR0aCAoc2VlICN0ak1DVVdpZHRoKSwgdGhlbiBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkgd2lsbCBiZQorICogcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuCisgKgorICogQHBhcmFtIHBhZCB0aGUgd2lkdGggb2YgZWFjaCBsaW5lIGluIGVhY2ggcGxhbmUgb2YgdGhlIFlVViBpbWFnZSB3aWxsIGJlCisgKiBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGhpcyBudW1iZXIgb2YgYnl0ZXMgKG11c3QgYmUgYSBwb3dlciBvZgorICogMi4pICBUbyBnZW5lcmF0ZSBpbWFnZXMgc3VpdGFibGUgZm9yIFggVmlkZW8sIDx0dD5wYWQ8L3R0PiBzaG91bGQgYmUgc2V0IHRvCisgKiA0LgorICoKKyAqIEBwYXJhbSBoZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIElmIHRoaXMgaXMKKyAqIGRpZmZlcmVudCB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuCisgKiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QKKyAqIHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIGhlaWdodC4gIElmIDx0dD5oZWlnaHQ8L3R0PgorICogaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgd2lkdGggd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlCisgKiBzY2FsZWQgaW1hZ2Ugc2l6ZS4gIElmIHRoZSBzY2FsZWQgaGVpZ2h0IGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UKKyAqIGJsb2NrIGhlaWdodCAoc2VlICN0ak1DVUhlaWdodCksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUKKyAqIHBlcmZvcm1lZCB3aXRoaW4gVHVyYm9KUEVHLgorICoKKyAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgQHJlZiBUSkZMQUdfQUNDVVJBVEVEQ1QKKyAqICJmbGFncyIKKyAqCisgKiBAcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSAjdGpHZXRFcnJvclN0cjIoKQorICogYW5kICN0akdldEVycm9yQ29kZSgpLikKKyAqLworRExMRVhQT1JUIGludCB0akRlY29tcHJlc3NUb1lVVjIodGpoYW5kbGUgaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgdW5zaWduZWQgY2hhciAqZHN0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgcGFkLCBpbnQgaGVpZ2h0LCBpbnQgZmxhZ3MpOworCisKKy8qKgorICogRGVjb21wcmVzcyBhIEpQRUcgaW1hZ2UgaW50byBzZXBhcmF0ZSBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UKKyAqIHBsYW5lcy4gIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvcgorICogY29udmVyc2lvbiBzdGVwLCBzbyBhIHBsYW5hciBZVVYgaW1hZ2UgaXMgZ2VuZXJhdGVkIGluc3RlYWQgb2YgYW4gUkdCIGltYWdlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlCisgKgorICogQHBhcmFtIGpwZWdCdWYgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlIHRvIGRlY29tcHJlc3MKKyAqCisgKiBAcGFyYW0ganBlZ1NpemUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpCisgKgorICogQHBhcmFtIGRzdFBsYW5lcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzCisgKiAob3IganVzdCBhIFkgcGxhbmUsIGlmIGRlY29tcHJlc3NpbmcgYSBncmF5c2NhbGUgaW1hZ2UpIHRoYXQgd2lsbCByZWNlaXZlCisgKiB0aGUgWVVWIGltYWdlLiAgVGhlc2UgcGxhbmVzIGNhbiBiZSBjb250aWd1b3VzIG9yIG5vbi1jb250aWd1b3VzIGluIG1lbW9yeS4KKyAqIFVzZSAjdGpQbGFuZVNpemVZVVYoKSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIGVhY2ggcGxhbmUgYmFzZWQKKyAqIG9uIHRoZSBzY2FsZWQgaW1hZ2Ugd2lkdGgsIHNjYWxlZCBpbWFnZSBoZWlnaHQsIHN0cmlkZXMsIGFuZCBsZXZlbCBvZgorICogY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBSZWZlciB0byBAcmVmIFlVVm5vdGVzICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIgorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gd2lkdGggZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgWVVWIGltYWdlLiAgSWYgdGhpcyBpcworICogZGlmZmVyZW50IHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbgorICogVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0CisgKiBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCB3aWR0aC4gIElmIDx0dD53aWR0aDwvdHQ+IGlzCisgKiBzZXQgdG8gMCwgdGhlbiBvbmx5IHRoZSBoZWlnaHQgd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlCisgKiBzY2FsZWQgaW1hZ2Ugc2l6ZS4gIElmIHRoZSBzY2FsZWQgd2lkdGggaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVQorICogYmxvY2sgd2lkdGggKHNlZSAjdGpNQ1VXaWR0aCksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUKKyAqIHBlcmZvcm1lZCB3aXRoaW4gVHVyYm9KUEVHLgorICoKKyAqIEBwYXJhbSBzdHJpZGVzIGFuIGFycmF5IG9mIGludGVnZXJzLCBlYWNoIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBieXRlcyBwZXIKKyAqIGxpbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGxhbmUgb2YgdGhlIG91dHB1dCBpbWFnZS4gIFNldHRpbmcgdGhlIHN0cmlkZSBmb3IKKyAqIGFueSBwbGFuZSB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIHNjYWxlZCBwbGFuZSB3aWR0aCAoc2VlCisgKiBAcmVmIFlVVm5vdGVzICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIi4pICBJZiA8dHQ+c3RyaWRlczwvdHQ+IGlzIE5VTEwsIHRoZW4KKyAqIHRoZSBzdHJpZGVzIGZvciBhbGwgcGxhbmVzIHdpbGwgYmUgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgc2NhbGVkIHBsYW5lCisgKiB3aWR0aHMuICBZb3UgY2FuIGFkanVzdCB0aGUgc3RyaWRlcyBpbiBvcmRlciB0byBhZGQgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZgorICogbGluZSBwYWRkaW5nIHRvIGVhY2ggcGxhbmUgb3IgdG8gZGVjb21wcmVzcyB0aGUgSlBFRyBpbWFnZSBpbnRvIGEgc3VicmVnaW9uCisgKiBvZiBhIGxhcmdlciBZVVYgcGxhbmFyIGltYWdlLgorICoKKyAqIEBwYXJhbSBoZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIFlVViBpbWFnZS4gIElmIHRoaXMgaXMKKyAqIGRpZmZlcmVudCB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuCisgKiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QKKyAqIHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIGhlaWdodC4gIElmIDx0dD5oZWlnaHQ8L3R0PgorICogaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgd2lkdGggd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlCisgKiBzY2FsZWQgaW1hZ2Ugc2l6ZS4gIElmIHRoZSBzY2FsZWQgaGVpZ2h0IGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UKKyAqIGJsb2NrIGhlaWdodCAoc2VlICN0ak1DVUhlaWdodCksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUKKyAqIHBlcmZvcm1lZCB3aXRoaW4gVHVyYm9KUEVHLgorICoKKyAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgQHJlZiBUSkZMQUdfQUNDVVJBVEVEQ1QKKyAqICJmbGFncyIKKyAqCisgKiBAcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSAjdGpHZXRFcnJvclN0cjIoKQorICogYW5kICN0akdldEVycm9yQ29kZSgpLikKKyAqLworRExMRVhQT1JUIGludCB0akRlY29tcHJlc3NUb1lVVlBsYW5lcyh0amhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipkc3RQbGFuZXMsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdHJpZGVzLCBpbnQgaGVpZ2h0LCBpbnQgZmxhZ3MpOworCisKKy8qKgorICogRGVjb2RlIGEgWVVWIHBsYW5hciBpbWFnZSBpbnRvIGFuIFJHQiBvciBncmF5c2NhbGUgaW1hZ2UuICBUaGlzIGZ1bmN0aW9uCisgKiB1c2VzIHRoZSBhY2NlbGVyYXRlZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGluIHRoZSB1bmRlcmx5aW5nCisgKiBjb2RlYyBidXQgZG9lcyBub3QgZXhlY3V0ZSBhbnkgb2YgdGhlIG90aGVyIHN0ZXBzIGluIHRoZSBKUEVHIGRlY29tcHJlc3Npb24KKyAqIHByb2Nlc3MuCisgKgorICogQHBhcmFtIGhhbmRsZSBhIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UKKyAqCisgKiBAcGFyYW0gc3JjQnVmIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlIHRvIGJlCisgKiBkZWNvZGVkLiAgVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICogI3RqQnVmU2l6ZVlVVjIoKSBmb3IgdGhlIGdpdmVuIGltYWdlIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGFuZCBsZXZlbCBvZgorICogY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgWSwgVSAoQ2IpLCBhbmQgViAoQ3IpIGltYWdlIHBsYW5lcyBzaG91bGQgYmUKKyAqIHN0b3JlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIHNvdXJjZSBidWZmZXIgKHJlZmVyIHRvIEByZWYgWVVWbm90ZXMKKyAqICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIi4pCisgKgorICogQHBhcmFtIHBhZCBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGF0IHRoZSB3aWR0aCBvZiBlYWNoIGxpbmUgaW4gZWFjaAorICogcGxhbmUgb2YgdGhlIFlVViBzb3VyY2UgaW1hZ2UgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRoaXMKKyAqIG51bWJlciBvZiBieXRlcyAobXVzdCBiZSBhIHBvd2VyIG9mIDIuKQorICoKKyAqIEBwYXJhbSBzdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBZVVYgc291cmNlCisgKiBpbWFnZSAoc2VlIEByZWYgVEpTQU1QICJDaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zIi4pCisgKgorICogQHBhcmFtIGRzdEJ1ZiBwb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgZGVjb2RlZAorICogaW1hZ2UuICBUaGlzIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUgPHR0PnBpdGNoICogaGVpZ2h0PC90dD4gYnl0ZXMgaW4KKyAqIHNpemUsIGJ1dCB0aGUgPHR0PmRzdEJ1ZjwvdHQ+IHBvaW50ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBkZWNvZGUgaW50byBhCisgKiBzcGVjaWZpYyByZWdpb24gb2YgYSBsYXJnZXIgYnVmZmVyLgorICoKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZXMKKyAqCisgKiBAcGFyYW0gcGl0Y2ggYnl0ZXMgcGVyIGxpbmUgaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlLiAgTm9ybWFsbHksIHRoaXMgc2hvdWxkCisgKiBiZSA8dHQ+d2lkdGggKiAjdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdPC90dD4gaWYgdGhlIGRlc3RpbmF0aW9uIGltYWdlIGlzCisgKiB1bnBhZGRlZCwgb3IgPHR0PiNUSlBBRCh3aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF0pPC90dD4gaWYgZWFjaCBsaW5lCisgKiBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2Ugc2hvdWxkIGJlIHBhZGRlZCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnksIGFzCisgKiBpcyB0aGUgY2FzZSBmb3IgV2luZG93cyBiaXRtYXBzLiAgWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoZSBwaXRjaAorICogcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsIGV0Yy4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudAorICogb2Ygc2V0dGluZyBpdCB0byA8dHQ+d2lkdGggKiAjdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdPC90dD4uCisgKgorICogQHBhcmFtIGhlaWdodCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW1hZ2VzCisgKgorICogQHBhcmFtIHBpeGVsRm9ybWF0IHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgKHNlZSBAcmVmIFRKUEYKKyAqICJQaXhlbCBmb3JtYXRzIi4pCisgKgorICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19BQ0NVUkFURURDVAorICogImZsYWdzIgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpCisgKiBhbmQgI3RqR2V0RXJyb3JDb2RlKCkuKQorICovCitETExFWFBPUlQgaW50IHRqRGVjb2RlWVVWKHRqaGFuZGxlIGhhbmRsZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFkLCBpbnQgc3Vic2FtcCwgdW5zaWduZWQgY2hhciAqZHN0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCisKKy8qKgorICogRGVjb2RlIGEgc2V0IG9mIFksIFUgKENiKSwgYW5kIFYgKENyKSBpbWFnZSBwbGFuZXMgaW50byBhbiBSR0Igb3IgZ3JheXNjYWxlCisgKiBpbWFnZS4gIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYWNjZWxlcmF0ZWQgY29sb3IgY29udmVyc2lvbiByb3V0aW5lcyBpbiB0aGUKKyAqIHVuZGVybHlpbmcgY29kZWMgYnV0IGRvZXMgbm90IGV4ZWN1dGUgYW55IG9mIHRoZSBvdGhlciBzdGVwcyBpbiB0aGUgSlBFRworICogZGVjb21wcmVzc2lvbiBwcm9jZXNzLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlCisgKgorICogQHBhcmFtIHNyY1BsYW5lcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBZLCBVIChDYiksIGFuZCBWIChDcikgaW1hZ2UgcGxhbmVzCisgKiAob3IganVzdCBhIFkgcGxhbmUsIGlmIGRlY29kaW5nIGEgZ3JheXNjYWxlIGltYWdlKSB0aGF0IGNvbnRhaW4gYSBZVVYgaW1hZ2UKKyAqIHRvIGJlIGRlY29kZWQuICBUaGVzZSBwbGFuZXMgY2FuIGJlIGNvbnRpZ3VvdXMgb3Igbm9uLWNvbnRpZ3VvdXMgaW4gbWVtb3J5LgorICogVGhlIHNpemUgb2YgZWFjaCBwbGFuZSBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIHJldHVybmVkIGJ5ICN0alBsYW5lU2l6ZVlVVigpCisgKiBmb3IgdGhlIGdpdmVuIGltYWdlIHdpZHRoLCBoZWlnaHQsIHN0cmlkZXMsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZQorICogc3Vic2FtcGxpbmcuICBSZWZlciB0byBAcmVmIFlVVm5vdGVzICJZVVYgSW1hZ2UgRm9ybWF0IE5vdGVzIiBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gc3RyaWRlcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgZWFjaCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyCisgKiBsaW5lIGluIHRoZSBjb3JyZXNwb25kaW5nIHBsYW5lIG9mIHRoZSBZVVYgc291cmNlIGltYWdlLiAgU2V0dGluZyB0aGUgc3RyaWRlCisgKiBmb3IgYW55IHBsYW5lIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgcGxhbmUgd2lkdGggKHNlZQorICogQHJlZiBZVVZub3RlcyAiWVVWIEltYWdlIEZvcm1hdCBOb3RlcyIuKSAgSWYgPHR0PnN0cmlkZXM8L3R0PiBpcyBOVUxMLCB0aGVuCisgKiB0aGUgc3RyaWRlcyBmb3IgYWxsIHBsYW5lcyB3aWxsIGJlIHNldCB0byB0aGVpciByZXNwZWN0aXZlIHBsYW5lIHdpZHRocy4KKyAqIFlvdSBjYW4gYWRqdXN0IHRoZSBzdHJpZGVzIGluIG9yZGVyIHRvIHNwZWNpZnkgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBsaW5lCisgKiBwYWRkaW5nIGluIGVhY2ggcGxhbmUgb3IgdG8gZGVjb2RlIGEgc3VicmVnaW9uIG9mIGEgbGFyZ2VyIFlVViBwbGFuYXIgaW1hZ2UuCisgKgorICogQHBhcmFtIHN1YnNhbXAgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIFlVViBzb3VyY2UKKyAqIGltYWdlIChzZWUgQHJlZiBUSlNBTVAgIkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMiLikKKyAqCisgKiBAcGFyYW0gZHN0QnVmIHBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvZGVkCisgKiBpbWFnZS4gIFRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZSA8dHQ+cGl0Y2ggKiBoZWlnaHQ8L3R0PiBieXRlcyBpbgorICogc2l6ZSwgYnV0IHRoZSA8dHQ+ZHN0QnVmPC90dD4gcG9pbnRlciBjYW4gYWxzbyBiZSB1c2VkIHRvIGRlY29kZSBpbnRvIGEKKyAqIHNwZWNpZmljIHJlZ2lvbiBvZiBhIGxhcmdlciBidWZmZXIuCisgKgorICogQHBhcmFtIHdpZHRoIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGltYWdlcworICoKKyAqIEBwYXJhbSBwaXRjaCBieXRlcyBwZXIgbGluZSBpbiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBOb3JtYWxseSwgdGhpcyBzaG91bGQKKyAqIGJlIDx0dD53aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0PiBpZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaXMKKyAqIHVucGFkZGVkLCBvciA8dHQ+I1RKUEFEKHdpZHRoICogI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XSk8L3R0PiBpZiBlYWNoIGxpbmUKKyAqIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSBzaG91bGQgYmUgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgYXMKKyAqIGlzIHRoZSBjYXNlIGZvciBXaW5kb3dzIGJpdG1hcHMuICBZb3UgY2FuIGFsc28gYmUgY2xldmVyIGFuZCB1c2UgdGhlIHBpdGNoCisgKiBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50CisgKiBvZiBzZXR0aW5nIGl0IHRvIDx0dD53aWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0Pi4KKyAqCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbWFnZXMKKyAqCisgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSAoc2VlIEByZWYgVEpQRgorICogIlBpeGVsIGZvcm1hdHMiLikKKyAqCisgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEByZWYgVEpGTEFHX0FDQ1VSQVRFRENUCisgKiAiZmxhZ3MiCisgKgorICogQHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgI3RqR2V0RXJyb3JTdHIyKCkKKyAqIGFuZCAjdGpHZXRFcnJvckNvZGUoKS4pCisgKi8KK0RMTEVYUE9SVCBpbnQgdGpEZWNvZGVZVVZQbGFuZXModGpoYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqc3JjUGxhbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKnN0cmlkZXMsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3RCdWYsIGludCB3aWR0aCwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGludCBmbGFncyk7CisKKworLyoqCisgKiBDcmVhdGUgYSBuZXcgVHVyYm9KUEVHIHRyYW5zZm9ybWVyIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UsIG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqIG9jY3VycmVkIChzZWUgI3RqR2V0RXJyb3JTdHIyKCkuKQorICovCitETExFWFBPUlQgdGpoYW5kbGUgdGpJbml0VHJhbnNmb3JtKHZvaWQpOworCisKKy8qKgorICogTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiAgTG9zc2xlc3MKKyAqIHRyYW5zZm9ybXMgd29yayBieSBtb3ZpbmcgdGhlIHJhdyBEQ1QgY29lZmZpY2llbnRzIGZyb20gb25lIEpQRUcgaW1hZ2UKKyAqIHN0cnVjdHVyZSB0byBhbm90aGVyIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHZhbHVlcyBvZiB0aGUgY29lZmZpY2llbnRzLiAgV2hpbGUKKyAqIHRoaXMgaXMgdHlwaWNhbGx5IGZhc3RlciB0aGFuIGRlY29tcHJlc3NpbmcgdGhlIGltYWdlLCB0cmFuc2Zvcm1pbmcgaXQsIGFuZAorICogcmUtY29tcHJlc3NpbmcgaXQsIGxvc3NsZXNzIHRyYW5zZm9ybXMgYXJlIG5vdCBmcmVlLiAgRWFjaCBsb3NzbGVzcworICogdHJhbnNmb3JtIHJlcXVpcmVzIHJlYWRpbmcgYW5kIHBlcmZvcm1pbmcgSHVmZm1hbiBkZWNvZGluZyBvbiBhbGwgb2YgdGhlCisgKiBjb2VmZmljaWVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSwgcmVnYXJkbGVzcyBvZiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24KKyAqIGltYWdlLiAgVGh1cywgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIG9mIGdlbmVyYXRpbmcgbXVsdGlwbGUKKyAqIHRyYW5zZm9ybWVkIGltYWdlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciAgYXBwbHlpbmcgbXVsdGlwbGUKKyAqIHRyYW5zZm9ybWF0aW9ucyBzaW11bHRhbmVvdXNseSwgaW4gb3JkZXIgdG8gZWxpbWluYXRlIHRoZSBuZWVkIHRvIHJlYWQgdGhlCisgKiBzb3VyY2UgY29lZmZpY2llbnRzIG11bHRpcGxlIHRpbWVzLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgdHJhbnNmb3JtZXIgaW5zdGFuY2UKKyAqCisgKiBAcGFyYW0ganBlZ0J1ZiBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIEpQRUcgc291cmNlIGltYWdlIHRvCisgKiB0cmFuc2Zvcm0KKyAqCisgKiBAcGFyYW0ganBlZ1NpemUgc2l6ZSBvZiB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgKGluIGJ5dGVzKQorICoKKyAqIEBwYXJhbSBuIHRoZSBudW1iZXIgb2YgdHJhbnNmb3JtZWQgSlBFRyBpbWFnZXMgdG8gZ2VuZXJhdGUKKyAqCisgKiBAcGFyYW0gZHN0QnVmcyBwb2ludGVyIHRvIGFuIGFycmF5IG9mIG4gaW1hZ2UgYnVmZmVycy4gIDx0dD5kc3RCdWZzW2ldPC90dD4KKyAqIHdpbGwgcmVjZWl2ZSBhIEpQRUcgaW1hZ2UgdGhhdCBoYXMgYmVlbiB0cmFuc2Zvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVycyBpbgorICogPHR0PnRyYW5zZm9ybXNbaV08L3R0Pi4gIFR1cmJvSlBFRyBoYXMgdGhlIGFiaWxpdHkgdG8gcmVhbGxvY2F0ZSB0aGUgSlBFRworICogYnVmZmVyIHRvIGFjY29tbW9kYXRlIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiAgVGh1cywgeW91IGNhbiBjaG9vc2UgdG86CisgKiAtIyBwcmUtYWxsb2NhdGUgdGhlIEpQRUcgYnVmZmVyIHdpdGggYW4gYXJiaXRyYXJ5IHNpemUgdXNpbmcgI3RqQWxsb2MoKSBhbmQKKyAqIGxldCBUdXJib0pQRUcgZ3JvdyB0aGUgYnVmZmVyIGFzIG5lZWRlZCwKKyAqIC0jIHNldCA8dHQ+ZHN0QnVmc1tpXTwvdHQ+IHRvIE5VTEwgdG8gdGVsbCBUdXJib0pQRUcgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlcgorICogZm9yIHlvdSwgb3IKKyAqIC0jIHByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGEgIndvcnN0IGNhc2UiIHNpemUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nCisgKiAjdGpCdWZTaXplKCkgd2l0aCB0aGUgdHJhbnNmb3JtZWQgb3IgY3JvcHBlZCB3aWR0aCBhbmQgaGVpZ2h0LiAgVW5kZXIgbm9ybWFsCisgKiBjaXJjdW1zdGFuY2VzLCB0aGlzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgYnVmZmVyIG5ldmVyIGhhcyB0byBiZQorICogcmUtYWxsb2NhdGVkIChzZXR0aW5nICNUSkZMQUdfTk9SRUFMTE9DIGd1YXJhbnRlZXMgdGhhdCBpdCB3b24ndCBiZS4pICBOb3RlLAorICogaG93ZXZlciwgdGhhdCB0aGVyZSBhcmUgc29tZSByYXJlIGNhc2VzIChzdWNoIGFzIHRyYW5zZm9ybWluZyBpbWFnZXMgd2l0aCBhCisgKiBsYXJnZSBhbW91bnQgb2YgZW1iZWRkZWQgRVhJRiBvciBJQ0MgcHJvZmlsZSBkYXRhKSBpbiB3aGljaCB0aGUgb3V0cHV0IGltYWdlCisgKiB3aWxsIGJlIGxhcmdlciB0aGFuIHRoZSB3b3JzdC1jYXNlIHNpemUsIGFuZCAjVEpGTEFHX05PUkVBTExPQyBjYW5ub3QgYmUKKyAqIHVzZWQgaW4gdGhvc2UgY2FzZXMuCisgKiAuCisgKiBJZiB5b3UgY2hvb3NlIG9wdGlvbiAxLCA8dHQ+ZHN0U2l6ZXNbaV08L3R0PiBzaG91bGQgYmUgc2V0IHRvIHRoZSBzaXplIG9mCisgKiB5b3VyIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiAgSW4gYW55IGNhc2UsIHVubGVzcyB5b3UgaGF2ZSBzZXQKKyAqICNUSkZMQUdfTk9SRUFMTE9DLCB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayA8dHQ+ZHN0QnVmc1tpXTwvdHQ+IHVwb24gcmV0dXJuCisgKiBmcm9tIHRoaXMgZnVuY3Rpb24sIGFzIGl0IG1heSBoYXZlIGNoYW5nZWQuCisgKgorICogQHBhcmFtIGRzdFNpemVzIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgbiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlcyB0aGF0IHdpbGwKKyAqIHJlY2VpdmUgdGhlIGFjdHVhbCBzaXplcyAoaW4gYnl0ZXMpIG9mIGVhY2ggdHJhbnNmb3JtZWQgSlBFRyBpbWFnZS4gIElmCisgKiA8dHQ+ZHN0QnVmc1tpXTwvdHQ+IHBvaW50cyB0byBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLCB0aGVuCisgKiA8dHQ+ZHN0U2l6ZXNbaV08L3R0PiBzaG91bGQgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBVcG9uIHJldHVybiwKKyAqIDx0dD5kc3RTaXplc1tpXTwvdHQ+IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMuKQorICoKKyAqIEBwYXJhbSB0cmFuc2Zvcm1zIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgbiAjdGp0cmFuc2Zvcm0gc3RydWN0dXJlcywgZWFjaCBvZgorICogd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdHJhbnNmb3JtZWQgb3V0cHV0IGltYWdlLgorICoKKyAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgQHJlZiBUSkZMQUdfQUNDVVJBVEVEQ1QKKyAqICJmbGFncyIKKyAqCisgKiBAcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSAjdGpHZXRFcnJvclN0cjIoKQorICogYW5kICN0akdldEVycm9yQ29kZSgpLikKKyAqLworRExMRVhQT1JUIGludCB0alRyYW5zZm9ybSh0amhhbmRsZSBoYW5kbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqZHN0QnVmcywgdW5zaWduZWQgbG9uZyAqZHN0U2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRqdHJhbnNmb3JtICp0cmFuc2Zvcm1zLCBpbnQgZmxhZ3MpOworCisKKy8qKgorICogRGVzdHJveSBhIFR1cmJvSlBFRyBjb21wcmVzc29yLCBkZWNvbXByZXNzb3IsIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciwgZGVjb21wcmVzc29yIG9yCisgKiB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpLikKKyAqLworRExMRVhQT1JUIGludCB0akRlc3Ryb3kodGpoYW5kbGUgaGFuZGxlKTsKKworCisvKioKKyAqIEFsbG9jYXRlIGFuIGltYWdlIGJ1ZmZlciBmb3IgdXNlIHdpdGggVHVyYm9KUEVHLiAgWW91IHNob3VsZCBhbHdheXMgdXNlCisgKiB0aGlzIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIHRoZSBKUEVHIGRlc3RpbmF0aW9uIGJ1ZmZlcihzKSBmb3IgdGhlIGNvbXByZXNzaW9uCisgKiBhbmQgdHJhbnNmb3JtIGZ1bmN0aW9ucyB1bmxlc3MgeW91IGFyZSBkaXNhYmxpbmcgYXV0b21hdGljIGJ1ZmZlcgorICogKHJlKWFsbG9jYXRpb24gKGJ5IHNldHRpbmcgI1RKRkxBR19OT1JFQUxMT0MuKQorICoKKyAqIEBwYXJhbSBieXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseS1hbGxvY2F0ZWQgYnVmZmVyIHdpdGggdGhlIHNwZWNpZmllZCBudW1iZXIgb2YKKyAqIGJ5dGVzLgorICoKKyAqIEBzYSB0akZyZWUoKQorICovCitETExFWFBPUlQgdW5zaWduZWQgY2hhciAqdGpBbGxvYyhpbnQgYnl0ZXMpOworCisKKy8qKgorICogTG9hZCBhbiB1bmNvbXByZXNzZWQgaW1hZ2UgZnJvbSBkaXNrIGludG8gbWVtb3J5LgorICoKKyAqIEBwYXJhbSBmaWxlbmFtZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGFuIHVuY29tcHJlc3NlZCBpbWFnZSBpbiBXaW5kb3dzCisgKiBCTVAgb3IgUEJNUExVUyAoUFBNL1BHTSkgZm9ybWF0CisgKgorICogQHBhcmFtIHdpZHRoIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgd2lkdGggKGluCisgKiBwaXhlbHMpIG9mIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UKKyAqCisgKiBAcGFyYW0gYWxpZ24gcm93IGFsaWdubWVudCBvZiB0aGUgaW1hZ2UgYnVmZmVyIHRvIGJlIHJldHVybmVkIChtdXN0IGJlIGEKKyAqIHBvd2VyIG9mIDIuKSAgRm9yIGluc3RhbmNlLCBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDQgd2lsbCBjYXVzZSBhbGwgcm93cworICogaW4gdGhlIGltYWdlIGJ1ZmZlciB0byBiZSBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LCBhbmQgc2V0dGluZworICogdGhpcyBwYXJhbWV0ZXIgdG8gMSB3aWxsIGNhdXNlIGFsbCByb3dzIGluIHRoZSBpbWFnZSBidWZmZXIgdG8gYmUgdW5wYWRkZWQuCisgKgorICogQHBhcmFtIGhlaWdodCBwb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGhlaWdodAorICogKGluIHBpeGVscykgb2YgdGhlIHVuY29tcHJlc3NlZCBpbWFnZQorICoKKyAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCBzcGVjaWZpZXMgb3Igd2lsbAorICogcmVjZWl2ZSB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2UgYnVmZmVyLiAgVGhlIGJlaGF2aW9yIG9mCisgKiAjdGpMb2FkSW1hZ2UoKSB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8dHQ+KnBpeGVsRm9ybWF0PC90dD4KKyAqIHBhc3NlZCB0byB0aGUgZnVuY3Rpb246CisgKiAtIEByZWYgVEpQRl9VTktOT1dOIDogVGhlIHVuY29tcHJlc3NlZCBpbWFnZSBidWZmZXIgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uCisgKiB3aWxsIHVzZSB0aGUgbW9zdCBvcHRpbWFsIHBpeGVsIGZvcm1hdCBmb3IgdGhlIGZpbGUgdHlwZSwgYW5kCisgKiA8dHQ+KnBpeGVsRm9ybWF0PC90dD4gd2lsbCBjb250YWluIHRoZSBJRCBvZiB0aGlzIHBpeGVsIGZvcm1hdCB1cG9uCisgKiBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KKyAqIC0gQHJlZiBUSlBGX0dSQVkgOiBPbmx5IFBHTSBmaWxlcyBhbmQgOC1iaXQgQk1QIGZpbGVzIHdpdGggYSBncmF5c2NhbGUKKyAqIGNvbG9ybWFwIGNhbiBiZSBsb2FkZWQuCisgKiAtIEByZWYgVEpQRl9DTVlLIDogVGhlIFJHQiBvciBncmF5c2NhbGUgcGl4ZWxzIHN0b3JlZCBpbiB0aGUgZmlsZSB3aWxsIGJlCisgKiBjb252ZXJ0ZWQgdXNpbmcgYSBxdWljayAmIGRpcnR5IGFsZ29yaXRobSB0aGF0IGlzIHN1aXRhYmxlIG9ubHkgZm9yIHRlc3RpbmcKKyAqIHB1cnBvc2VzIChwcm9wZXIgY29udmVyc2lvbiBiZXR3ZWVuIENNWUsgYW5kIG90aGVyIGZvcm1hdHMgcmVxdWlyZXMgYSBjb2xvcgorICogbWFuYWdlbWVudCBzeXN0ZW0uKQorICogLSBPdGhlciBAcmVmIFRKUEYgInBpeGVsIGZvcm1hdHMiIDogVGhlIHVuY29tcHJlc3NlZCBpbWFnZSBidWZmZXIgd2lsbCB1c2UKKyAqIHRoZSBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0LCBhbmQgcGl4ZWwgZm9ybWF0IGNvbnZlcnNpb24gd2lsbCBiZSBwZXJmb3JtZWQgaWYKKyAqIG5lY2Vzc2FyeS4KKyAqCisgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEByZWYgVEpGTEFHX0JPVFRPTVVQCisgKiAiZmxhZ3MiLgorICoKKyAqIEByZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHktYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSB1bmNvbXByZXNzZWQKKyAqIGltYWdlLCBjb252ZXJ0ZWQgdG8gdGhlIGNob3NlbiBwaXhlbCBmb3JtYXQgYW5kIHdpdGggdGhlIGNob3NlbiByb3cKKyAqIGFsaWdubWVudCwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpLikgIFRoaXMKKyAqIGJ1ZmZlciBzaG91bGQgYmUgZnJlZWQgdXNpbmcgI3RqRnJlZSgpLgorICovCitETExFWFBPUlQgdW5zaWduZWQgY2hhciAqdGpMb2FkSW1hZ2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCAqd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsaWduLCBpbnQgKmhlaWdodCwgaW50ICpwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCisKKy8qKgorICogU2F2ZSBhbiB1bmNvbXByZXNzZWQgaW1hZ2UgZnJvbSBtZW1vcnkgdG8gZGlzay4KKyAqCisgKiBAcGFyYW0gZmlsZW5hbWUgbmFtZSBvZiBhIGZpbGUgdG8gd2hpY2ggdG8gc2F2ZSB0aGUgdW5jb21wcmVzc2VkIGltYWdlLgorICogVGhlIGltYWdlIHdpbGwgYmUgc3RvcmVkIGluIFdpbmRvd3MgQk1QIG9yIFBCTVBMVVMgKFBQTS9QR00pIGZvcm1hdCwKKyAqIGRlcGVuZGluZyBvbiB0aGUgZmlsZSBleHRlbnNpb24uCisgKgorICogQHBhcmFtIGJ1ZmZlciBwb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIFJHQiwgZ3JheXNjYWxlLCBvcgorICogQ01ZSyBwaXhlbHMgdG8gYmUgc2F2ZWQKKyAqCisgKiBAcGFyYW0gd2lkdGggd2lkdGggKGluIHBpeGVscykgb2YgdGhlIHVuY29tcHJlc3NlZCBpbWFnZQorICoKKyAqIEBwYXJhbSBwaXRjaCBieXRlcyBwZXIgbGluZSBpbiB0aGUgaW1hZ2UgYnVmZmVyLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0bworICogMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvCisgKiA8dHQ+d2lkdGggKiAjdGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdPC90dD4uCisgKgorICogQHBhcmFtIGhlaWdodCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIHVuY29tcHJlc3NlZCBpbWFnZQorICoKKyAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwaXhlbCBmb3JtYXQgb2YgdGhlIGltYWdlIGJ1ZmZlciAoc2VlIEByZWYgVEpQRgorICogIlBpeGVsIGZvcm1hdHMiLikgIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byBAcmVmIFRKUEZfR1JBWSwgdGhlbiB0aGUKKyAqIGltYWdlIHdpbGwgYmUgc3RvcmVkIGluIFBHTSBvciA4LWJpdCAoaW5kZXhlZCBjb2xvcikgQk1QIGZvcm1hdC4gIE90aGVyd2lzZSwKKyAqIHRoZSBpbWFnZSB3aWxsIGJlIHN0b3JlZCBpbiBQUE0gb3IgMjQtYml0IEJNUCBmb3JtYXQuICBJZiB0aGlzIHBhcmFtZXRlcgorICogaXMgc2V0IHRvIEByZWYgVEpQRl9DTVlLLCB0aGVuIHRoZSBDTVlLIHBpeGVscyB3aWxsIGJlIGNvbnZlcnRlZCB0byBSR0IKKyAqIHVzaW5nIGEgcXVpY2sgJiBkaXJ0eSBhbGdvcml0aG0gdGhhdCBpcyBzdWl0YWJsZSBvbmx5IGZvciB0ZXN0aW5nIChwcm9wZXIKKyAqIGNvbnZlcnNpb24gYmV0d2VlbiBDTVlLIGFuZCBvdGhlciBmb3JtYXRzIHJlcXVpcmVzIGEgY29sb3IgbWFuYWdlbWVudAorICogc3lzdGVtLikKKyAqCisgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEByZWYgVEpGTEFHX0JPVFRPTVVQCisgKiAiZmxhZ3MiLgorICoKKyAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlICN0akdldEVycm9yU3RyMigpLikKKyAqLworRExMRVhQT1JUIGludCB0alNhdmVJbWFnZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCisKKy8qKgorICogRnJlZSBhbiBpbWFnZSBidWZmZXIgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgVHVyYm9KUEVHLiAgWW91IHNob3VsZCBhbHdheXMKKyAqIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgSlBFRyBkZXN0aW5hdGlvbiBidWZmZXIocykgdGhhdCB3ZXJlIGF1dG9tYXRpY2FsbHkKKyAqIChyZSlhbGxvY2F0ZWQgYnkgdGhlIGNvbXByZXNzaW9uIGFuZCB0cmFuc2Zvcm0gZnVuY3Rpb25zIG9yIHRoYXQgd2VyZQorICogbWFudWFsbHkgYWxsb2NhdGVkIHVzaW5nICN0akFsbG9jKCkuCisgKgorICogQHBhcmFtIGJ1ZmZlciBhZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gZnJlZQorICoKKyAqIEBzYSB0akFsbG9jKCkKKyAqLworRExMRVhQT1JUIHZvaWQgdGpGcmVlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik7CisKKworLyoqCisgKiBSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGNvbXByZXNzb3IsIGRlY29tcHJlc3Nvciwgb3IKKyAqIHRyYW5zZm9ybWVyIGluc3RhbmNlLCBvciBOVUxMIGlmIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkIGJ5IGEgZ2xvYmFsCisgKiBmdW5jdGlvbiAoYnV0IG5vdGUgdGhhdCByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZvciBhIGdsb2JhbCBmdW5jdGlvbgorICogaXMgbm90IHRocmVhZC1zYWZlLikKKyAqCisgKiBAcmV0dXJuIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4KKyAqLworRExMRVhQT1JUIGNoYXIgKnRqR2V0RXJyb3JTdHIyKHRqaGFuZGxlIGhhbmRsZSk7CisKKworLyoqCisgKiBSZXR1cm5zIGEgY29kZSBpbmRpY2F0aW5nIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBlcnJvci4gIFNlZQorICogQHJlZiBUSkVSUiAiRXJyb3IgY29kZXMiLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgYSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciwgZGVjb21wcmVzc29yIG9yCisgKiB0cmFuc2Zvcm1lciBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gYSBjb2RlIGluZGljYXRpbmcgdGhlIHNldmVyaXR5IG9mIHRoZSBsYXN0IGVycm9yLiAgU2VlCisgKiBAcmVmIFRKRVJSICJFcnJvciBjb2RlcyIuCisgKi8KK0RMTEVYUE9SVCBpbnQgdGpHZXRFcnJvckNvZGUodGpoYW5kbGUgaGFuZGxlKTsKKworCisvKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBhbmQgbWFjcm9zICovCisjZGVmaW5lIFRKRkxBR19GT1JDRU1NWCAgOAorI2RlZmluZSBUSkZMQUdfRk9SQ0VTU0UgIDE2CisjZGVmaW5lIFRKRkxBR19GT1JDRVNTRTIgIDMyCisjZGVmaW5lIFRKRkxBR19GT1JDRVNTRTMgIDEyOAorCisKKy8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIGFuZCBtYWNyb3MgKG5vdGhpbmcgdG8gc2VlIGhlcmUpICovCisjZGVmaW5lIE5VTVNVQk9QVCAgVEpfTlVNU0FNUAorI2RlZmluZSBUSl80NDQgIFRKU0FNUF80NDQKKyNkZWZpbmUgVEpfNDIyICBUSlNBTVBfNDIyCisjZGVmaW5lIFRKXzQyMCAgVEpTQU1QXzQyMAorI2RlZmluZSBUSl80MTEgIFRKU0FNUF80MjAKKyNkZWZpbmUgVEpfR1JBWVNDQUxFICBUSlNBTVBfR1JBWQorCisjZGVmaW5lIFRKX0JHUiAgMQorI2RlZmluZSBUSl9CT1RUT01VUCAgVEpGTEFHX0JPVFRPTVVQCisjZGVmaW5lIFRKX0ZPUkNFTU1YICBUSkZMQUdfRk9SQ0VNTVgKKyNkZWZpbmUgVEpfRk9SQ0VTU0UgIFRKRkxBR19GT1JDRVNTRQorI2RlZmluZSBUSl9GT1JDRVNTRTIgIFRKRkxBR19GT1JDRVNTRTIKKyNkZWZpbmUgVEpfQUxQSEFGSVJTVCAgNjQKKyNkZWZpbmUgVEpfRk9SQ0VTU0UzICBUSkZMQUdfRk9SQ0VTU0UzCisjZGVmaW5lIFRKX0ZBU1RVUFNBTVBMRSAgVEpGTEFHX0ZBU1RVUFNBTVBMRQorI2RlZmluZSBUSl9ZVVYgIDUxMgorCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyBUSkJVRlNJWkUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgVEpCVUZTSVpFWVVWKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGpwZWdTdWJzYW1wKTsKKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgdGpCdWZTaXplWVVWKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXApOworCitETExFWFBPUlQgaW50IHRqQ29tcHJlc3ModGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0QnVmLCB1bnNpZ25lZCBsb25nICpjb21wcmVzc2VkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQganBlZ1N1YnNhbXAsIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKTsKKworRExMRVhQT1JUIGludCB0akVuY29kZVlVVih0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHN1YnNhbXAsIGludCBmbGFncyk7CisKK0RMTEVYUE9SVCBpbnQgdGpFbmNvZGVZVVYyKHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqc3JjQnVmLCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHN1YnNhbXAsIGludCBmbGFncyk7CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzSGVhZGVyKHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCAqd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodCk7CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzSGVhZGVyMih0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgaW50ICp3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodCwgaW50ICpqcGVnU3Vic2FtcCk7CisKK0RMTEVYUE9SVCBpbnQgdGpEZWNvbXByZXNzKHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKworRExMRVhQT1JUIGludCB0akRlY29tcHJlc3NUb1lVVih0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKworRExMRVhQT1JUIGNoYXIgKnRqR2V0RXJyb3JTdHIodm9pZCk7CisKKworLyoqCisgKiBAfQorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdXNhZ2UudHh0IGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vdXNhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmRiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby91c2FnZS50eHQKQEAgLTAsMCArMSw2MzUgQEAKK05PVEU6ICBUaGlzIGZpbGUgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5CitpbmZvcm1hdGlvbiByZWxldmFudCB0byBsaWJqcGVnLXR1cmJvIGFuZCB0byB3b3Jkc21pdGggY2VydGFpbiBzZWN0aW9ucy4KKworVVNBR0UgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdXNhZ2Ugb2YgdGhlIEpQRUcgY29udmVyc2lvbiBwcm9ncmFtcyBjanBlZyBhbmQgZGpwZWcsCithcyB3ZWxsIGFzIHRoZSB1dGlsaXR5IHByb2dyYW1zIGpwZWd0cmFuLCByZGpwZ2NvbSBhbmQgd3JqcGdjb20uICAoU2VlCit0aGUgb3RoZXIgZG9jdW1lbnRhdGlvbiBmaWxlcyBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIEpQRUcgbGlicmFyeSB3aXRoaW4KK3lvdXIgb3duIHByb2dyYW1zLikKKworSWYgeW91IGFyZSBvbiBhIFVuaXggbWFjaGluZSB5b3UgbWF5IHByZWZlciB0byByZWFkIHRoZSBVbml4LXN0eWxlIG1hbnVhbAorcGFnZXMgaW4gZmlsZXMgY2pwZWcuMSwgZGpwZWcuMSwganBlZ3RyYW4uMSwgcmRqcGdjb20uMSwgd3JqcGdjb20uMS4KKworCitJTlRST0RVQ1RJT04KKworVGhlc2UgcHJvZ3JhbXMgaW1wbGVtZW50IEpQRUcgaW1hZ2UgZW5jb2RpbmcsIGRlY29kaW5nLCBhbmQgdHJhbnNjb2RpbmcuCitKUEVHIChwcm9ub3VuY2VkICJqYXktcGVnIikgaXMgYSBzdGFuZGFyZGl6ZWQgY29tcHJlc3Npb24gbWV0aG9kIGZvcgorZnVsbC1jb2xvciBhbmQgZ3JheXNjYWxlIGltYWdlcy4KKworCitHRU5FUkFMIFVTQUdFCisKK1dlIHByb3ZpZGUgdHdvIHByb2dyYW1zLCBjanBlZyB0byBjb21wcmVzcyBhbiBpbWFnZSBmaWxlIGludG8gSlBFRyBmb3JtYXQsCithbmQgZGpwZWcgdG8gZGVjb21wcmVzcyBhIEpQRUcgZmlsZSBiYWNrIGludG8gYSBjb252ZW50aW9uYWwgaW1hZ2UgZm9ybWF0LgorCitPbiBVbml4LWxpa2Ugc3lzdGVtcywgeW91IHNheToKKyAgICAgICAgY2pwZWcgW3N3aXRjaGVzXSBbaW1hZ2VmaWxlXSA+anBlZ2ZpbGUKK29yCisgICAgICAgIGRqcGVnIFtzd2l0Y2hlc10gW2pwZWdmaWxlXSAgPmltYWdlZmlsZQorVGhlIHByb2dyYW1zIHJlYWQgdGhlIHNwZWNpZmllZCBpbnB1dCBmaWxlLCBvciBzdGFuZGFyZCBpbnB1dCBpZiBub25lIGlzCituYW1lZC4gIFRoZXkgYWx3YXlzIHdyaXRlIHRvIHN0YW5kYXJkIG91dHB1dCAod2l0aCB0cmFjZS9lcnJvciBtZXNzYWdlcyB0bworc3RhbmRhcmQgZXJyb3IpLiAgVGhlc2UgY29udmVudGlvbnMgYXJlIGhhbmR5IGZvciBwaXBpbmcgaW1hZ2VzIGJldHdlZW4KK3Byb2dyYW1zLgorCitPbiBtb3N0IG5vbi1Vbml4IHN5c3RlbXMsIHlvdSBzYXk6CisgICAgICAgIGNqcGVnIFtzd2l0Y2hlc10gaW1hZ2VmaWxlIGpwZWdmaWxlCitvcgorICAgICAgICBkanBlZyBbc3dpdGNoZXNdIGpwZWdmaWxlICBpbWFnZWZpbGUKK2kuZS4sIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMgYXJlIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCitzdHlsZSBpcyBhIGxpdHRsZSBtb3JlIGZvb2xwcm9vZiwgYW5kIGl0IGxvc2VzIG5vIGZ1bmN0aW9uYWxpdHkgaWYgeW91IGRvbid0CitoYXZlIHBpcGVzLiAgKFlvdSBjYW4gZ2V0IHRoaXMgc3R5bGUgb24gVW5peCB0b28sIGlmIHlvdSBwcmVmZXIsIGJ5IGRlZmluaW5nCitUV09fRklMRV9DT01NQU5ETElORSB3aGVuIHlvdSBjb21waWxlIHRoZSBwcm9ncmFtczsgc2VlIGluc3RhbGwudHh0LikKKworWW91IGNhbiBhbHNvIHNheToKKyAgICAgICAgY2pwZWcgW3N3aXRjaGVzXSAtb3V0ZmlsZSBqcGVnZmlsZSAgaW1hZ2VmaWxlCitvcgorICAgICAgICBkanBlZyBbc3dpdGNoZXNdIC1vdXRmaWxlIGltYWdlZmlsZSAganBlZ2ZpbGUKK1RoaXMgc3ludGF4IHdvcmtzIG9uIGFsbCBzeXN0ZW1zLCBzbyBpdCBpcyB1c2VmdWwgZm9yIHNjcmlwdHMuCisKK1RoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGltYWdlIGZpbGUgZm9ybWF0cyBhcmU6IFBQTSAoUEJNUExVUyBjb2xvciBmb3JtYXQpLAorUEdNIChQQk1QTFVTIGdyYXlzY2FsZSBmb3JtYXQpLCBCTVAsIFRhcmdhLCBhbmQgUkxFIChVdGFoIFJhc3RlciBUb29sa2l0Citmb3JtYXQpLiAgKFJMRSBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUgVVJUIGxpYnJhcnkgaXMgYXZhaWxhYmxlLCB3aGljaCBpdAoraXNuJ3Qgb24gbW9zdCBub24tVW5peCBzeXN0ZW1zLikgIGNqcGVnIHJlY29nbml6ZXMgdGhlIGlucHV0IGltYWdlIGZvcm1hdAorYXV0b21hdGljYWxseSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNvbWUgVGFyZ2EgZmlsZXMuICBZb3UgaGF2ZSB0byB0ZWxsIGRqcGVnCit3aGljaCBmb3JtYXQgdG8gZ2VuZXJhdGUuCisKK0pQRUcgZmlsZXMgYXJlIGluIHRoZSBkZWZhY3RvIHN0YW5kYXJkIEpGSUYgZmlsZSBmb3JtYXQuICBUaGVyZSBhcmUgb3RoZXIsCitsZXNzIHdpZGVseSB1c2VkIEpQRUctYmFzZWQgZmlsZSBmb3JtYXRzLCBidXQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorCitBbGwgc3dpdGNoIG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZDsgZm9yIGV4YW1wbGUsIC1ncmF5c2NhbGUgbWF5IGJlIHdyaXR0ZW4KKy1ncmF5IG9yIC1nci4gIE1vc3Qgb2YgdGhlICJiYXNpYyIgc3dpdGNoZXMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIGFzIGxpdHRsZSBhcworb25lIGxldHRlci4gIFVwcGVyIGFuZCBsb3dlciBjYXNlIGFyZSBlcXVpdmFsZW50ICgtQk1QIGlzIHRoZSBzYW1lIGFzIC1ibXApLgorQnJpdGlzaCBzcGVsbGluZ3MgYXJlIGFsc28gYWNjZXB0ZWQgKGUuZy4sIC1ncmV5c2NhbGUpLCB0aG91Z2ggZm9yIGJyZXZpdHkKK3RoZXNlIGFyZSBub3QgbWVudGlvbmVkIGJlbG93LgorCisKK0NKUEVHIERFVEFJTFMKKworVGhlIGJhc2ljIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyBmb3IgY2pwZWcgYXJlOgorCisgICAgICAgIC1xdWFsaXR5IE5bLC4uLl0gIFNjYWxlIHF1YW50aXphdGlvbiB0YWJsZXMgdG8gYWRqdXN0IGltYWdlIHF1YWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgIFF1YWxpdHkgaXMgMCAod29yc3QpIHRvIDEwMCAoYmVzdCk7IGRlZmF1bHQgaXMgNzUuCisgICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgYmVsb3cgZm9yIG1vcmUgaW5mby4pCisKKyAgICAgICAgLWdyYXlzY2FsZSAgICAgIENyZWF0ZSBtb25vY2hyb21lIEpQRUcgZmlsZSBmcm9tIGNvbG9yIGlucHV0LgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgdGhpcyBzd2l0Y2ggd2hlbiBjb21wcmVzc2luZyBhIGdyYXlzY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgQk1QIGZpbGUsIGJlY2F1c2UgY2pwZWcgaXNuJ3QgYnJpZ2h0IGVub3VnaCB0byBub3RpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgYSBCTVAgZmlsZSB1c2VzIG9ubHkgc2hhZGVzIG9mIGdyYXkuICBCeQorICAgICAgICAgICAgICAgICAgICAgICAgc2F5aW5nIC1ncmF5c2NhbGUsIHlvdSdsbCBnZXQgYSBzbWFsbGVyIEpQRUcgZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICB0YWtlcyBsZXNzIHRpbWUgdG8gcHJvY2Vzcy4KKworICAgICAgICAtcmdiICAgICAgICAgICAgQ3JlYXRlIFJHQiBKUEVHIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIHN3aXRjaCBzdXBwcmVzc2VzIHRoZSBjb252ZXJzaW9uIGZyb20gUkdCCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNwYWNlIGlucHV0IHRvIHRoZSBkZWZhdWx0IFlDYkNyIEpQRUcgY29sb3JzcGFjZS4KKworICAgICAgICAtb3B0aW1pemUgICAgICAgUGVyZm9ybSBvcHRpbWl6YXRpb24gb2YgZW50cm9weSBlbmNvZGluZyBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgV2l0aG91dCB0aGlzLCBkZWZhdWx0IGVuY29kaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAtb3B0aW1pemUgdXN1YWxseSBtYWtlcyB0aGUgSlBFRyBmaWxlIGEgbGl0dGxlIHNtYWxsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBidXQgY2pwZWcgcnVucyBzb21ld2hhdCBzbG93ZXIgYW5kIG5lZWRzIG11Y2ggbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LiAgSW1hZ2UgcXVhbGl0eSBhbmQgc3BlZWQgb2YgZGVjb21wcmVzc2lvbiBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuYWZmZWN0ZWQgYnkgLW9wdGltaXplLgorCisgICAgICAgIC1wcm9ncmVzc2l2ZSAgICBDcmVhdGUgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlIChzZWUgYmVsb3cpLgorCisgICAgICAgIC10YXJnYSAgICAgICAgICBJbnB1dCBmaWxlIGlzIFRhcmdhIGZvcm1hdC4gIFRhcmdhIGZpbGVzIHRoYXQgY29udGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgYW4gImlkZW50aWZpY2F0aW9uIiBmaWVsZCB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVkIGJ5IGNqcGVnOyBmb3Igc3VjaCBmaWxlcyB5b3UgbXVzdCBzcGVjaWZ5CisgICAgICAgICAgICAgICAgICAgICAgICAtdGFyZ2EgdG8gbWFrZSBjanBlZyB0cmVhdCB0aGUgaW5wdXQgYXMgVGFyZ2EgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vc3QgVGFyZ2EgZmlsZXMsIHlvdSB3b24ndCBuZWVkIHRoaXMgc3dpdGNoLgorCitUaGUgLXF1YWxpdHkgc3dpdGNoIGxldHMgeW91IHRyYWRlIG9mZiBjb21wcmVzc2VkIGZpbGUgc2l6ZSBhZ2FpbnN0IHF1YWxpdHkgb2YKK3RoZSByZWNvbnN0cnVjdGVkIGltYWdlOiB0aGUgaGlnaGVyIHRoZSBxdWFsaXR5IHNldHRpbmcsIHRoZSBsYXJnZXIgdGhlIEpQRUcKK2ZpbGUsIGFuZCB0aGUgY2xvc2VyIHRoZSBvdXRwdXQgaW1hZ2Ugd2lsbCBiZSB0byB0aGUgb3JpZ2luYWwgaW5wdXQuICBOb3JtYWxseQoreW91IHdhbnQgdG8gdXNlIHRoZSBsb3dlc3QgcXVhbGl0eSBzZXR0aW5nIChzbWFsbGVzdCBmaWxlKSB0aGF0IGRlY29tcHJlc3NlcworaW50byBzb21ldGhpbmcgdmlzdWFsbHkgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgb3JpZ2luYWwgaW1hZ2UuICBGb3IgdGhpcworcHVycG9zZSB0aGUgcXVhbGl0eSBzZXR0aW5nIHNob3VsZCBnZW5lcmFsbHkgYmUgYmV0d2VlbiA1MCBhbmQgOTUgKHRoZSBkZWZhdWx0CitpcyA3NSkgZm9yIHBob3RvZ3JhcGhpYyBpbWFnZXMuICBJZiB5b3Ugc2VlIGRlZmVjdHMgYXQgLXF1YWxpdHkgNzUsIHRoZW4gZ28gdXAKKzUgb3IgMTAgY291bnRzIGF0IGEgdGltZSB1bnRpbCB5b3UgYXJlIGhhcHB5IHdpdGggdGhlIG91dHB1dCBpbWFnZS4gIChUaGUKK29wdGltYWwgc2V0dGluZyB3aWxsIHZhcnkgZnJvbSBvbmUgaW1hZ2UgdG8gYW5vdGhlci4pCisKKy1xdWFsaXR5IDEwMCB3aWxsIGdlbmVyYXRlIGEgcXVhbnRpemF0aW9uIHRhYmxlIG9mIGFsbCAxJ3MsIG1pbmltaXppbmcgbG9zcworaW4gdGhlIHF1YW50aXphdGlvbiBzdGVwIChidXQgdGhlcmUgaXMgc3RpbGwgaW5mb3JtYXRpb24gbG9zcyBpbiBzdWJzYW1wbGluZywKK2FzIHdlbGwgYXMgcm91bmRvZmYgZXJyb3IuKSAgRm9yIG1vc3QgaW1hZ2VzLCBzcGVjaWZ5aW5nIGEgcXVhbGl0eSB2YWx1ZSBhYm92ZQorYWJvdXQgOTUgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGRyYW1hdGljYWxseSwgYW5kIHdoaWxlCit0aGUgcXVhbGl0eSBnYWluIGZyb20gdGhlc2UgaGlnaGVyIHF1YWxpdHkgdmFsdWVzIGlzIG1lYXN1cmFibGUgKHVzaW5nIG1ldHJpY3MKK3N1Y2ggYXMgUFNOUiBvciBTU0lNKSwgaXQgaXMgcmFyZWx5IHBlcmNlaXZhYmxlIGJ5IGh1bWFuIHZpc2lvbi4KKworSW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgcXVhbGl0eSB2YWx1ZXMgYmVsb3cgNTAgd2lsbCBwcm9kdWNlIHZlcnkgc21hbGwgZmlsZXMKK29mIGxvdyBpbWFnZSBxdWFsaXR5LiAgU2V0dGluZ3MgYXJvdW5kIDUgdG8gMTAgbWlnaHQgYmUgdXNlZnVsIGluIHByZXBhcmluZyBhbgoraW5kZXggb2YgYSBsYXJnZSBpbWFnZSBsaWJyYXJ5LCBmb3IgZXhhbXBsZS4gIFRyeSAtcXVhbGl0eSAyIChvciBzbykgZm9yIHNvbWUKK2FtdXNpbmcgQ3ViaXN0IGVmZmVjdHMuICAoTm90ZTogcXVhbGl0eSB2YWx1ZXMgYmVsb3cgYWJvdXQgMjUgZ2VuZXJhdGUgMi1ieXRlCitxdWFudGl6YXRpb24gdGFibGVzLCB3aGljaCBhcmUgY29uc2lkZXJlZCBvcHRpb25hbCBpbiB0aGUgSlBFRyBzdGFuZGFyZC4KK2NqcGVnIGVtaXRzIGEgd2FybmluZyBtZXNzYWdlIHdoZW4geW91IGdpdmUgc3VjaCBhIHF1YWxpdHkgdmFsdWUsIGJlY2F1c2Ugc29tZQorb3RoZXIgSlBFRyBwcm9ncmFtcyBtYXkgYmUgdW5hYmxlIHRvIGRlY29kZSB0aGUgcmVzdWx0aW5nIGZpbGUuICBVc2UgLWJhc2VsaW5lCitpZiB5b3UgbmVlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhdCBsb3cgcXVhbGl0eSB2YWx1ZXMuKQorCitUaGUgLXF1YWxpdHkgb3B0aW9uIGhhcyBiZWVuIGV4dGVuZGVkIGluIHRoaXMgdmVyc2lvbiBvZiBjanBlZyB0byBzdXBwb3J0CitzZXBhcmF0ZSBxdWFsaXR5IHNldHRpbmdzIGZvciBsdW1pbmFuY2UgYW5kIGNocm9taW5hbmNlIChvciwgaW4gZ2VuZXJhbCwKK3NlcGFyYXRlIHNldHRpbmdzIGZvciBldmVyeSBxdWFudGl6YXRpb24gdGFibGUgc2xvdC4pICBUaGUgcHJpbmNpcGxlIGlzIHRoZQorc2FtZSBhcyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZzogIHNpbmNlIHRoZSBodW1hbiBleWUgaXMgbW9yZSBzZW5zaXRpdmUgdG8KK3NwYXRpYWwgY2hhbmdlcyBpbiBicmlnaHRuZXNzIHRoYW4gc3BhdGlhbCBjaGFuZ2VzIGluIGNvbG9yLCB0aGUgY2hyb21pbmFuY2UKK2NvbXBvbmVudHMgY2FuIGJlIHF1YW50aXplZCBtb3JlIHRoYW4gdGhlIGx1bWluYW5jZSBjb21wb25lbnRzIHdpdGhvdXQKK2luY3VycmluZyBhbnkgdmlzaWJsZSBpbWFnZSBxdWFsaXR5IGxvc3MuICBIb3dldmVyLCB1bmxpa2Ugc3Vic2FtcGxpbmcsIHRoaXMKK2ZlYXR1cmUgcmVkdWNlcyBkYXRhIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluIGluc3RlYWQgb2YgdGhlIHNwYXRpYWwgZG9tYWluLAord2hpY2ggYWxsb3dzIGZvciBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGluCitxdWFsaXR5LXNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMsIGZvciB3aGljaCB0aGUgYXJ0aWZhY3RzIGdlbmVyYXRlZCBieQorc3Vic2FtcGxpbmcgbWF5IGJlIHVuYWNjZXB0YWJsZS4KKworVGhlIC1xdWFsaXR5IG9wdGlvbiBhY2NlcHRzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycywgd2hpY2gKK3Jlc3BlY3RpdmVseSByZWZlciB0byB0aGUgcXVhbGl0eSBsZXZlbHMgdGhhdCBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlCitxdWFudGl6YXRpb24gdGFibGUgc2xvdHMuICBJZiB0aGVyZSBhcmUgbW9yZSBxLXRhYmxlIHNsb3RzIHRoYW4gcGFyYW1ldGVycywKK3RoZW4gdGhlIGxhc3QgcGFyYW1ldGVyIGlzIHJlcGxpY2F0ZWQuICBUaHVzLCBpZiBvbmx5IG9uZSBxdWFsaXR5IHBhcmFtZXRlciBpcworZ2l2ZW4sIHRoaXMgaXMgdXNlZCBmb3IgYm90aCBsdW1pbmFuY2UgYW5kIGNocm9taW5hbmNlIChzbG90cyAwIGFuZCAxLAorcmVzcGVjdGl2ZWx5KSwgcHJlc2VydmluZyB0aGUgbGVnYWN5IGJlaGF2aW9yIG9mIGNqcGVnIHY2YiBhbmQgcHJpb3IuICBNb3JlIChvcgorY3VzdG9taXplZCkgcXVhbnRpemF0aW9uIHRhYmxlcyBjYW4gYmUgc2V0IHdpdGggdGhlIC1xdGFibGVzIG9wdGlvbiBhbmQKK2Fzc2lnbmVkIHRvIGNvbXBvbmVudHMgd2l0aCB0aGUgLXFzbG90cyBvcHRpb24gKHNlZSB0aGUgIndpemFyZCIgc3dpdGNoZXMKK2JlbG93LikKKworSlBFRyAgZmlsZXMgIGdlbmVyYXRlZCAgd2l0aCBzZXBhcmF0ZSBsdW1pbmFuY2UgYW5kIGNocm9taW5hbmNlIHF1YWxpdHkgYXJlCitmdWxseSBjb21wbGlhbnQgd2l0aCBzdGFuZGFyZCBKUEVHIGRlY29kZXJzLgorCitDQVVUSU9OOiBGb3IgdGhpcyBzZXR0aW5nIHRvIGJlIHVzZWZ1bCwgYmUgc3VyZSB0byBwYXNzIGFuIGFyZ3VtZW50IG9mCistc2FtcGxlIDF4MSB0byBjanBlZyB0byBkaXNhYmxlIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgT3RoZXJ3aXNlLCB0aGUKK2RlZmF1bHQgc3Vic2FtcGxpbmcgbGV2ZWwgKDJ4MiwgQUtBICI0OjI6MCIpIHdpbGwgYmUgdXNlZC4KKworVGhlIC1wcm9ncmVzc2l2ZSBzd2l0Y2ggY3JlYXRlcyBhICJwcm9ncmVzc2l2ZSBKUEVHIiBmaWxlLiAgSW4gdGhpcyB0eXBlIG9mCitKUEVHIGZpbGUsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiBtdWx0aXBsZSBzY2FucyBvZiBpbmNyZWFzaW5nIHF1YWxpdHkuICBJZiB0aGUKK2ZpbGUgaXMgYmVpbmcgdHJhbnNtaXR0ZWQgb3ZlciBhIHNsb3cgY29tbXVuaWNhdGlvbnMgbGluaywgdGhlIGRlY29kZXIgY2FuIHVzZQordGhlIGZpcnN0IHNjYW4gdG8gZGlzcGxheSBhIGxvdy1xdWFsaXR5IGltYWdlIHZlcnkgcXVpY2tseSwgYW5kIGNhbiB0aGVuCitpbXByb3ZlIHRoZSBkaXNwbGF5IHdpdGggZWFjaCBzdWJzZXF1ZW50IHNjYW4uICBUaGUgZmluYWwgaW1hZ2UgaXMgZXhhY3RseQorZXF1aXZhbGVudCB0byBhIHN0YW5kYXJkIEpQRUcgZmlsZSBvZiB0aGUgc2FtZSBxdWFsaXR5IHNldHRpbmcsIGFuZCB0aGUgdG90YWwKK2ZpbGUgc2l6ZSBpcyBhYm91dCB0aGUgc2FtZSAtLS0gb2Z0ZW4gYSBsaXR0bGUgc21hbGxlci4KKworU3dpdGNoZXMgZm9yIGFkdmFuY2VkIHVzZXJzOgorCisgICAgICAgIC1hcml0aG1ldGljICAgICBVc2UgYXJpdGhtZXRpYyBjb2RpbmcuICBDQVVUSU9OOiBhcml0aG1ldGljIGNvZGVkIEpQRUcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCB5ZXQgd2lkZWx5IGltcGxlbWVudGVkLCBzbyBtYW55IGRlY29kZXJzIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHVuYWJsZSB0byB2aWV3IGFuIGFyaXRobWV0aWMgY29kZWQgSlBFRyBmaWxlIGF0CisgICAgICAgICAgICAgICAgICAgICAgICBhbGwuCisKKyAgICAgICAgLWRjdCBpbnQgICAgICAgIFVzZSBpbnRlZ2VyIERDVCBtZXRob2QgKGRlZmF1bHQpLgorICAgICAgICAtZGN0IGZhc3QgICAgICAgVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gbGlianBlZy10dXJibywgdGhlIGZhc3QgbWV0aG9kIGlzIGdlbmVyYWxseSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgNS0xNSUgZmFzdGVyIHRoYW4gdGhlIGludCBtZXRob2Qgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zIChyZXN1bHRzIG1heSB2YXJ5IHdpdGggb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNJTUQgaW1wbGVtZW50YXRpb25zLCBvciB3aGVuIHVzaW5nIGxpYmpwZWctdHVyYm8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgU0lNRCBleHRlbnNpb25zLikgIEZvciBxdWFsaXR5IGxldmVscyBvZiA5MCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlbG93LCB0aGVyZSBzaG91bGQgYmUgbGl0dGxlIG9yIG5vIHBlcmNlcHRpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhbGdvcml0aG1zLiAgRm9yIHF1YWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyBhYm92ZSA5MCwgaG93ZXZlciwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZhc3QgYW5kIHRoZSBpbnQgbWV0aG9kcyBiZWNvbWVzIG1vcmUgcHJvbm91bmNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggcXVhbGl0eT05NywgZm9yIGluc3RhbmNlLCB0aGUgZmFzdCBtZXRob2QgaW5jdXJzCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgYWJvdXQgYSAxLTMgZEIgbG9zcyAoaW4gUFNOUikgcmVsYXRpdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnQgbWV0aG9kLCBidXQgdGhpcyBjYW4gYmUgbGFyZ2VyIGZvciBzb21lIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgdGhlIGZhc3QgbWV0aG9kIHdpdGggcXVhbGl0eSBsZXZlbHMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDk3LiAgVGhlIGFsZ29yaXRobSBvZnRlbiBkZWdlbmVyYXRlcyBhdCBxdWFsaXR5PTk4IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmUgYW5kIGNhbiBhY3R1YWxseSBwcm9kdWNlIGEgbW9yZSBsb3NzeSBpbWFnZSB0aGFuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsb3dlciBxdWFsaXR5IGxldmVscyBoYWQgYmVlbiB1c2VkLiAgQWxzbywgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYmpwZWctdHVyYm8sIHRoZSBmYXN0IG1ldGhvZCBpcyBub3QgZnVsbHkgYWNjZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcXVhbGl0eSBsZXZlbHMgYWJvdmUgOTcsIHNvIGl0IHdpbGwgYmUgc2xvd2VyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnQgbWV0aG9kLgorICAgICAgICAtZGN0IGZsb2F0ICAgICAgVXNlIGZsb2F0aW5nLXBvaW50IERDVCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmxvYXQgbWV0aG9kIGlzIG1haW5seSBhIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcworICAgICAgICAgICAgICAgICAgICAgICAgbm90IHByb2R1Y2Ugc2lnbmlmaWNhbnRseSBtb3JlIGFjY3VyYXRlIHJlc3VsdHMgdGhhbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGludCBtZXRob2QsIGFuZCBpdCBpcyBtdWNoIHNsb3dlci4gIFRoZSBmbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG1heSBhbHNvIGdpdmUgZGlmZmVyZW50IHJlc3VsdHMgb24gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcyBkdWUgdG8gdmFyeWluZyByb3VuZG9mZiBiZWhhdmlvciwgd2hlcmVhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzIG9uIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMuCisKKyAgICAgICAgLXJlc3RhcnQgTiAgICAgIEVtaXQgYSBKUEVHIHJlc3RhcnQgbWFya2VyIGV2ZXJ5IE4gTUNVIHJvd3MsIG9yIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICBOIE1DVSBibG9ja3MgaWYgIkIiIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAtcmVzdGFydCAwICh0aGUgZGVmYXVsdCkgbWVhbnMgbm8gcmVzdGFydCBtYXJrZXJzLgorCisgICAgICAgIC1zbW9vdGggTiAgICAgICBTbW9vdGggdGhlIGlucHV0IGltYWdlIHRvIGVsaW1pbmF0ZSBkaXRoZXJpbmcgbm9pc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBOLCByYW5naW5nIGZyb20gMSB0byAxMDAsIGluZGljYXRlcyB0aGUgc3RyZW5ndGggb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aGluZy4gIDAgKHRoZSBkZWZhdWx0KSBtZWFucyBubyBzbW9vdGhpbmcuCisKKyAgICAgICAgLW1heG1lbW9yeSBOICAgIFNldCBsaW1pdCBmb3IgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gcHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgaW1hZ2VzLiAgVmFsdWUgaXMgaW4gdGhvdXNhbmRzIG9mIGJ5dGVzLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlvbnMgb2YgYnl0ZXMgaWYgIk0iIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgLW1heCA0bSBzZWxlY3RzIDQwMDAwMDAgYnl0ZXMuICBJZiBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSBpcyBuZWVkZWQsIGFuIGVycm9yIHdpbGwgb2NjdXIuCisKKyAgICAgICAgLXZlcmJvc2UgICAgICAgIEVuYWJsZSBkZWJ1ZyBwcmludG91dC4gIE1vcmUgLXYncyBnaXZlIG1vcmUgcHJpbnRvdXQuCisgICAgICAgIG9yICAtZGVidWcgICAgICBBbHNvLCB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgYXQgc3RhcnR1cC4KKworVGhlIC1yZXN0YXJ0IG9wdGlvbiBpbnNlcnRzIGV4dHJhIG1hcmtlcnMgdGhhdCBhbGxvdyBhIEpQRUcgZGVjb2RlciB0bworcmVzeW5jaHJvbml6ZSBhZnRlciBhIHRyYW5zbWlzc2lvbiBlcnJvci4gIFdpdGhvdXQgcmVzdGFydCBtYXJrZXJzLCBhbnkgZGFtYWdlCit0byBhIGNvbXByZXNzZWQgZmlsZSB3aWxsIHVzdWFsbHkgcnVpbiB0aGUgaW1hZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdGhlIGVycm9yCit0byB0aGUgZW5kIG9mIHRoZSBpbWFnZTsgd2l0aCByZXN0YXJ0IG1hcmtlcnMsIHRoZSBkYW1hZ2UgaXMgdXN1YWxseSBjb25maW5lZAordG8gdGhlIHBvcnRpb24gb2YgdGhlIGltYWdlIHVwIHRvIHRoZSBuZXh0IHJlc3RhcnQgbWFya2VyLiAgT2YgY291cnNlLCB0aGUKK3Jlc3RhcnQgbWFya2VycyBvY2N1cHkgZXh0cmEgc3BhY2UuICBXZSByZWNvbW1lbmQgLXJlc3RhcnQgMSBmb3IgaW1hZ2VzIHRoYXQKK3dpbGwgYmUgdHJhbnNtaXR0ZWQgYWNyb3NzIHVucmVsaWFibGUgbmV0d29ya3Mgc3VjaCBhcyBVc2VuZXQuCisKK1RoZSAtc21vb3RoIG9wdGlvbiBmaWx0ZXJzIHRoZSBpbnB1dCB0byBlbGltaW5hdGUgZmluZS1zY2FsZSBub2lzZS4gIFRoaXMgaXMKK29mdGVuIHVzZWZ1bCB3aGVuIGNvbnZlcnRpbmcgZGl0aGVyZWQgaW1hZ2VzIHRvIEpQRUc6IGEgbW9kZXJhdGUgc21vb3RoaW5nCitmYWN0b3Igb2YgMTAgdG8gNTAgZ2V0cyByaWQgb2YgZGl0aGVyaW5nIHBhdHRlcm5zIGluIHRoZSBpbnB1dCBmaWxlLCByZXN1bHRpbmcKK2luIGEgc21hbGxlciBKUEVHIGZpbGUgYW5kIGEgYmV0dGVyLWxvb2tpbmcgaW1hZ2UuICBUb28gbGFyZ2UgYSBzbW9vdGhpbmcKK2ZhY3RvciB3aWxsIHZpc2libHkgYmx1ciB0aGUgaW1hZ2UsIGhvd2V2ZXIuCisKK1N3aXRjaGVzIGZvciB3aXphcmRzOgorCisgICAgICAgIC1iYXNlbGluZSAgICAgICBGb3JjZSBiYXNlbGluZS1jb21wYXRpYmxlIHF1YW50aXphdGlvbiB0YWJsZXMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZC4gIFRoaXMgY2xhbXBzIHF1YW50aXphdGlvbiB2YWx1ZXMgdG8gOCBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGF0IGxvdyBxdWFsaXR5IHNldHRpbmdzLiAgKFRoaXMgc3dpdGNoIGlzIHBvb3JseQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQsIHNpbmNlIGl0IGRvZXMgbm90IGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbGx5IGJhc2VsaW5lIEpQRUcuICBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC1iYXNlbGluZSBhbmQgLXByb2dyZXNzaXZlIHRvZ2V0aGVyLikKKworICAgICAgICAtcXRhYmxlcyBmaWxlICAgVXNlIHRoZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgZmlsZS4KKworICAgICAgICAtcXNsb3RzIE5bLC4uLl0gU2VsZWN0IHdoaWNoIHF1YW50aXphdGlvbiB0YWJsZSB0byB1c2UgZm9yIGVhY2ggY29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4KKworICAgICAgICAtc2FtcGxlIEh4VlssLi4uXSAgU2V0IEpQRUcgc2FtcGxpbmcgZmFjdG9ycyBmb3IgZWFjaCBjb2xvciBjb21wb25lbnQuCisKKyAgICAgICAgLXNjYW5zIGZpbGUgICAgIFVzZSB0aGUgc2NhbiBzY3JpcHQgZ2l2ZW4gaW4gdGhlIHNwZWNpZmllZCB0ZXh0IGZpbGUuCisKK1RoZSAid2l6YXJkIiBzd2l0Y2hlcyBhcmUgaW50ZW5kZWQgZm9yIGV4cGVyaW1lbnRhdGlvbiB3aXRoIEpQRUcuICBJZiB5b3UKK2Rvbid0IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCBET04nVCBVU0UgVEhFTS4gIFRoZXNlIHN3aXRjaGVzIGFyZSBkb2N1bWVudGVkCitmdXJ0aGVyIGluIHRoZSBmaWxlIHdpemFyZC50eHQuCisKKworREpQRUcgREVUQUlMUworCitUaGUgYmFzaWMgY29tbWFuZCBsaW5lIHN3aXRjaGVzIGZvciBkanBlZyBhcmU6CisKKyAgICAgICAgLWNvbG9ycyBOICAgICAgIFJlZHVjZSBpbWFnZSB0byBhdCBtb3N0IE4gY29sb3JzLiAgVGhpcyByZWR1Y2VzIHRoZQorICAgICAgICBvciAtcXVhbnRpemUgTiAgbnVtYmVyIG9mIGNvbG9ycyB1c2VkIGluIHRoZSBvdXRwdXQgaW1hZ2UsIHNvIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBkaXNwbGF5ZWQgb24gYSBjb2xvcm1hcHBlZCBkaXNwbGF5IG9yIHN0b3JlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgYSBjb2xvcm1hcHBlZCBmaWxlIGZvcm1hdC4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgYW4gOC1iaXQgZGlzcGxheSwgeW91J2QgbmVlZCB0byByZWR1Y2UgdG8gMjU2IG9yIGZld2VyCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMuICAoLWNvbG9ycyBpcyB0aGUgcmVjb21tZW5kZWQgbmFtZSwgLXF1YW50aXplCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4pCisKKyAgICAgICAgLWZhc3QgICAgICAgICAgIFNlbGVjdCByZWNvbW1lbmRlZCBwcm9jZXNzaW5nIG9wdGlvbnMgZm9yIGZhc3QsIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGl0eSBvdXRwdXQuICAoVGhlIGRlZmF1bHQgb3B0aW9ucyBhcmUgY2hvc2VuIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdCBxdWFsaXR5IG91dHB1dC4pICBDdXJyZW50bHksIHRoaXMgaXMgZXF1aXZhbGVudAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gIi1kY3QgZmFzdCAtbm9zbW9vdGggLW9uZXBhc3MgLWRpdGhlciBvcmRlcmVkIi4KKworICAgICAgICAtZ3JheXNjYWxlICAgICAgRm9yY2UgZ3JheXNjYWxlIG91dHB1dCBldmVuIGlmIEpQRUcgZmlsZSBpcyBjb2xvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBmb3Igdmlld2luZyBvbiBtb25vY2hyb21lIGRpc3BsYXlzOyBhbHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgZGpwZWcgcnVucyBub3RpY2VhYmx5IGZhc3RlciBpbiB0aGlzIG1vZGUuCisKKyAgICAgICAgLXJnYiAgICAgICAgICAgIEZvcmNlIFJHQiBvdXRwdXQgZXZlbiBpZiBKUEVHIGZpbGUgaXMgZ3JheXNjYWxlLgorCisgICAgICAgIC1zY2FsZSBNL04gICAgICBTY2FsZSB0aGUgb3V0cHV0IGltYWdlIGJ5IGEgZmFjdG9yIE0vTi4gIEN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNjYWxlIGZhY3RvciBtdXN0IGJlIE0vOCwgd2hlcmUgTSBpcyBhbiBpbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIDEgYW5kIDE2IGluY2x1c2l2ZSwgb3IgYW55IHJlZHVjZWQgZnJhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlb2YgKHN1Y2ggYXMgMS8yLCAzLzQsIGV0Yy4gIFNjYWxpbmcgaXMgaGFuZHkgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBpcyBsYXJnZXIgdGhhbiB5b3VyIHNjcmVlbjsgYWxzbywgZGpwZWcgcnVucworICAgICAgICAgICAgICAgICAgICAgICAgbXVjaCBmYXN0ZXIgd2hlbiBzY2FsaW5nIGRvd24gdGhlIG91dHB1dC4KKworICAgICAgICAtYm1wICAgICAgICAgICAgU2VsZWN0IEJNUCBvdXRwdXQgZm9ybWF0IChXaW5kb3dzIGZsYXZvcikuICA4LWJpdAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JtYXBwZWQgZm9ybWF0IGlzIGVtaXR0ZWQgaWYgLWNvbG9ycyBvciAtZ3JheXNjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBzcGVjaWZpZWQsIG9yIGlmIHRoZSBKUEVHIGZpbGUgaXMgZ3JheXNjYWxlOworICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvciBmb3JtYXQgaXMgZW1pdHRlZC4KKworICAgICAgICAtZ2lmICAgICAgICAgICAgU2VsZWN0IEdJRiBvdXRwdXQgZm9ybWF0LiAgU2luY2UgR0lGIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgdGhhbiAyNTYgY29sb3JzLCAtY29sb3JzIDI1NiBpcyBhc3N1bWVkICh1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBzcGVjaWZ5IGEgc21hbGxlciBudW1iZXIgb2YgY29sb3JzKS4gIElmIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSAtZmFzdCwgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbG9ycyBpcyAyMTYuCisKKyAgICAgICAgLW9zMiAgICAgICAgICAgIFNlbGVjdCBCTVAgb3V0cHV0IGZvcm1hdCAoT1MvMiAxLnggZmxhdm9yKS4gIDgtYml0CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcm1hcHBlZCBmb3JtYXQgaXMgZW1pdHRlZCBpZiAtY29sb3JzIG9yIC1ncmF5c2NhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNwZWNpZmllZCwgb3IgaWYgdGhlIEpQRUcgZmlsZSBpcyBncmF5c2NhbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UsIDI0LWJpdCBmdWxsLWNvbG9yIGZvcm1hdCBpcyBlbWl0dGVkLgorCisgICAgICAgIC1wbm0gICAgICAgICAgICBTZWxlY3QgUEJNUExVUyAoUFBNL1BHTSkgb3V0cHV0IGZvcm1hdCAodGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZm9ybWF0KS4gIFBHTSBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYXlzY2FsZSBvciBpZiAtZ3JheXNjYWxlIGlzIHNwZWNpZmllZDsgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgICAgICAgICBQUE0gaXMgZW1pdHRlZC4KKworICAgICAgICAtcmxlICAgICAgICAgICAgU2VsZWN0IFJMRSBvdXRwdXQgZm9ybWF0LiAgKFJlcXVpcmVzIFVSVCBsaWJyYXJ5LikKKworICAgICAgICAtdGFyZ2EgICAgICAgICAgU2VsZWN0IFRhcmdhIG91dHB1dCBmb3JtYXQuICBHcmF5c2NhbGUgZm9ybWF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMgZ3JheXNjYWxlIG9yIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAtZ3JheXNjYWxlIGlzIHNwZWNpZmllZDsgb3RoZXJ3aXNlLCBjb2xvcm1hcHBlZCBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVtaXR0ZWQgaWYgLWNvbG9ycyBpcyBzcGVjaWZpZWQ7IG90aGVyd2lzZSwgMjQtYml0CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWNvbG9yIGZvcm1hdCBpcyBlbWl0dGVkLgorCitTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6CisKKyAgICAgICAgLWRjdCBpbnQgICAgICAgIFVzZSBpbnRlZ2VyIERDVCBtZXRob2QgKGRlZmF1bHQpLgorICAgICAgICAtZGN0IGZhc3QgICAgICAgVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gbGlianBlZy10dXJibywgdGhlIGZhc3QgbWV0aG9kIGlzIGdlbmVyYWxseSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgNS0xNSUgZmFzdGVyIHRoYW4gdGhlIGludCBtZXRob2Qgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zIChyZXN1bHRzIG1heSB2YXJ5IHdpdGggb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNJTUQgaW1wbGVtZW50YXRpb25zLCBvciB3aGVuIHVzaW5nIGxpYmpwZWctdHVyYm8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgU0lNRCBleHRlbnNpb25zLikgIElmIHRoZSBKUEVHIGltYWdlIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZCB1c2luZyBhIHF1YWxpdHkgbGV2ZWwgb2YgODUgb3IgYmVsb3csIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlIHNob3VsZCBiZSBsaXR0bGUgb3Igbm8gcGVyY2VwdGlibGUgZGlmZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMuICBXaGVuIGRlY29tcHJlc3NpbmcgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdlcmUgY29tcHJlc3NlZCB1c2luZyBxdWFsaXR5IGxldmVscyBhYm92ZSA4NSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZhc3QgYW5kIGludAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBiZWNvbWVzIG1vcmUgcHJvbm91bmNlZC4gIFdpdGggaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHk9OTcsIGZvciBpbnN0YW5jZSwgdGhlIGZhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBpbmN1cnMgZ2VuZXJhbGx5IGFib3V0IGEgNC02IGRCIGxvc3MgKGluIFBTTlIpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSB0byB0aGUgaW50IG1ldGhvZCwgYnV0IHRoaXMgY2FuIGJlIGxhcmdlciBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgaW1hZ2VzLiAgSWYgeW91IGNhbiBhdm9pZCBpdCwgZG8gbm90IHVzZSB0aGUgZmFzdAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIHdoZW4gZGVjb21wcmVzc2luZyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDk3LiAgVGhlIGFsZ29yaXRobSBvZnRlbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVnZW5lcmF0ZXMgZm9yIHN1Y2ggaW1hZ2VzIGFuZCBjYW4gYWN0dWFsbHkgcHJvZHVjZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBtb3JlIGxvc3N5IG91dHB1dCBpbWFnZSB0aGFuIGlmIHRoZSBKUEVHIGltYWdlIGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBjb21wcmVzc2VkIHVzaW5nIGxvd2VyIHF1YWxpdHkgbGV2ZWxzLgorICAgICAgICAtZGN0IGZsb2F0ICAgICAgVXNlIGZsb2F0aW5nLXBvaW50IERDVCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmxvYXQgbWV0aG9kIGlzIG1haW5seSBhIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcworICAgICAgICAgICAgICAgICAgICAgICAgbm90IHByb2R1Y2Ugc2lnbmlmaWNhbnRseSBtb3JlIGFjY3VyYXRlIHJlc3VsdHMgdGhhbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGludCBtZXRob2QsIGFuZCBpdCBpcyBtdWNoIHNsb3dlci4gIFRoZSBmbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG1heSBhbHNvIGdpdmUgZGlmZmVyZW50IHJlc3VsdHMgb24gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcyBkdWUgdG8gdmFyeWluZyByb3VuZG9mZiBiZWhhdmlvciwgd2hlcmVhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzIG9uIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMuCisKKyAgICAgICAgLWRpdGhlciBmcyAgICAgIFVzZSBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nIGluIGNvbG9yIHF1YW50aXphdGlvbi4KKyAgICAgICAgLWRpdGhlciBvcmRlcmVkIFVzZSBvcmRlcmVkIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCisgICAgICAgIC1kaXRoZXIgbm9uZSAgICBEbyBub3QgdXNlIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nIGlzIGFwcGxpZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemluZyBjb2xvcnM7IHRoaXMgaXMgc2xvdyBidXQgdXN1YWxseSBwcm9kdWNlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJlc3QgcmVzdWx0cy4gIE9yZGVyZWQgZGl0aGVyIGlzIGEgY29tcHJvbWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiBzcGVlZCBhbmQgcXVhbGl0eTsgbm8gZGl0aGVyaW5nIGlzIGZhc3QgYnV0CisgICAgICAgICAgICAgICAgICAgICAgICB1c3VhbGx5IGxvb2tzIGF3ZnVsLiAgTm90ZSB0aGF0IHRoZXNlIHN3aXRjaGVzIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vIGVmZmVjdCB1bmxlc3MgY29sb3IgcXVhbnRpemF0aW9uIGlzIGJlaW5nIGRvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBPcmRlcmVkIGRpdGhlciBpcyBvbmx5IGF2YWlsYWJsZSBpbiAtb25lcGFzcyBtb2RlLgorCisgICAgICAgIC1tYXAgRklMRSAgICAgICBRdWFudGl6ZSB0byB0aGUgY29sb3JzIHVzZWQgaW4gdGhlIHNwZWNpZmllZCBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4gIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9kdWNpbmcgbXVsdGlwbGUgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggaWRlbnRpY2FsIGNvbG9yIG1hcHMsIG9yIGZvciBmb3JjaW5nIGEgcHJlZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IG9mIGNvbG9ycyB0byBiZSB1c2VkLiAgVGhlIEZJTEUgbXVzdCBiZSBhIEdJRgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgUFBNIGZpbGUuICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgLWNvbG9ycyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC1vbmVwYXNzLgorCisgICAgICAgIC1ub3Ntb290aCAgICAgICBVc2UgYSBmYXN0ZXIsIGxvd2VyLXF1YWxpdHkgdXBzYW1wbGluZyByb3V0aW5lLgorCisgICAgICAgIC1vbmVwYXNzICAgICAgICBVc2Ugb25lLXBhc3MgaW5zdGVhZCBvZiB0d28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb25lLXBhc3MgbWV0aG9kIGlzIGZhc3RlciBhbmQgbmVlZHMgbGVzcyBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgcHJvZHVjZXMgYSBsb3dlci1xdWFsaXR5IGltYWdlLiAgLW9uZXBhc3MgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZWQgdW5sZXNzIHlvdSBhbHNvIHNheSAtY29sb3JzIE4uICBBbHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9uZS1wYXNzIG1ldGhvZCBpcyBhbHdheXMgdXNlZCBmb3IgZ3JheXNjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKHRoZSB0d28tcGFzcyBtZXRob2QgaXMgbm8gaW1wcm92ZW1lbnQgdGhlbikuCisKKyAgICAgICAgLW1heG1lbW9yeSBOICAgIFNldCBsaW1pdCBmb3IgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gcHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgaW1hZ2VzLiAgVmFsdWUgaXMgaW4gdGhvdXNhbmRzIG9mIGJ5dGVzLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlvbnMgb2YgYnl0ZXMgaWYgIk0iIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgLW1heCA0bSBzZWxlY3RzIDQwMDAwMDAgYnl0ZXMuICBJZiBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSBpcyBuZWVkZWQsIGFuIGVycm9yIHdpbGwgb2NjdXIuCisKKyAgICAgICAgLXZlcmJvc2UgICAgICAgIEVuYWJsZSBkZWJ1ZyBwcmludG91dC4gIE1vcmUgLXYncyBnaXZlIG1vcmUgcHJpbnRvdXQuCisgICAgICAgIG9yICAtZGVidWcgICAgICBBbHNvLCB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgYXQgc3RhcnR1cC4KKworCitISU5UUyBGT1IgQ0pQRUcKKworQ29sb3IgR0lGIGZpbGVzIGFyZSBub3QgdGhlIGlkZWFsIGlucHV0IGZvciBKUEVHOyBKUEVHIGlzIHJlYWxseSBpbnRlbmRlZCBmb3IKK2NvbXByZXNzaW5nIGZ1bGwtY29sb3IgKDI0LWJpdCkgaW1hZ2VzLiAgSW4gcGFydGljdWxhciwgZG9uJ3QgdHJ5IHRvIGNvbnZlcnQKK2NhcnRvb25zLCBsaW5lIGRyYXdpbmdzLCBhbmQgb3RoZXIgaW1hZ2VzIHRoYXQgaGF2ZSBvbmx5IGEgZmV3IGRpc3RpbmN0Citjb2xvcnMuICBHSUYgd29ya3MgZ3JlYXQgb24gdGhlc2UsIEpQRUcgZG9lcyBub3QuICBJZiB5b3Ugd2FudCB0byBjb252ZXJ0IGEKK0dJRiB0byBKUEVHLCB5b3Ugc2hvdWxkIGV4cGVyaW1lbnQgd2l0aCBjanBlZydzIC1xdWFsaXR5IGFuZCAtc21vb3RoIG9wdGlvbnMKK3RvIGdldCBhIHNhdGlzZmFjdG9yeSBjb252ZXJzaW9uLiAgLXNtb290aCAxMCBvciBzbyBpcyBvZnRlbiBoZWxwZnVsLgorCitBdm9pZCBydW5uaW5nIGFuIGltYWdlIHRocm91Z2ggYSBzZXJpZXMgb2YgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uCitjeWNsZXMuICBJbWFnZSBxdWFsaXR5IGxvc3Mgd2lsbCBhY2N1bXVsYXRlOyBhZnRlciB0ZW4gb3Igc28gY3ljbGVzIHRoZSBpbWFnZQorbWF5IGJlIG5vdGljZWFibHkgd29yc2UgdGhhbiBpdCB3YXMgYWZ0ZXIgb25lIGN5Y2xlLiAgSXQncyBiZXN0IHRvIHVzZSBhCitsb3NzbGVzcyBmb3JtYXQgd2hpbGUgbWFuaXB1bGF0aW5nIGFuIGltYWdlLCB0aGVuIGNvbnZlcnQgdG8gSlBFRyBmb3JtYXQgd2hlbgoreW91IGFyZSByZWFkeSB0byBmaWxlIHRoZSBpbWFnZSBhd2F5LgorCitUaGUgLW9wdGltaXplIG9wdGlvbiB0byBjanBlZyBpcyB3b3J0aCB1c2luZyB3aGVuIHlvdSBhcmUgbWFraW5nIGEgImZpbmFsIgordmVyc2lvbiBmb3IgcG9zdGluZyBvciBhcmNoaXZpbmcuICBJdCdzIGFsc28gYSB3aW4gd2hlbiB5b3UgYXJlIHVzaW5nIGxvdworcXVhbGl0eSBzZXR0aW5ncyB0byBtYWtlIHZlcnkgc21hbGwgSlBFRyBmaWxlczsgdGhlIHBlcmNlbnRhZ2UgaW1wcm92ZW1lbnQKK2lzIG9mdGVuIGEgbG90IG1vcmUgdGhhbiBpdCBpcyBvbiBsYXJnZXIgZmlsZXMuICAoQXQgcHJlc2VudCwgLW9wdGltaXplCittb2RlIGlzIGFsd2F5cyBzZWxlY3RlZCB3aGVuIGdlbmVyYXRpbmcgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlcy4pCisKK1N1cHBvcnQgZm9yIEdJRiBpbnB1dCBmaWxlcyB3YXMgcmVtb3ZlZCBpbiBjanBlZyB2NmIgZHVlIHRvIGNvbmNlcm5zIG92ZXIKK3RoZSBVbmlzeXMgTFpXIHBhdGVudC4gIEFsdGhvdWdoIHRoaXMgcGF0ZW50IGV4cGlyZWQgaW4gMjAwNiwgY2pwZWcgc3RpbGwKK2xhY2tzIEdJRiBzdXBwb3J0LCBmb3IgdGhlc2UgaGlzdG9yaWNhbCByZWFzb25zLiAgKENvbnZlcnNpb24gb2YgR0lGIGZpbGVzIHRvCitKUEVHIGlzIHVzdWFsbHkgYSBiYWQgaWRlYSBhbnl3YXkuKQorCisKK0hJTlRTIEZPUiBESlBFRworCitUbyBnZXQgYSBxdWljayBwcmV2aWV3IG9mIGFuIGltYWdlLCB1c2UgdGhlIC1ncmF5c2NhbGUgYW5kL29yIC1zY2FsZSBzd2l0Y2hlcy4KKyItZ3JheXNjYWxlIC1zY2FsZSAxLzgiIGlzIHRoZSBmYXN0ZXN0IGNhc2UuCisKK1NldmVyYWwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRoYXQgdHJhZGUgb2ZmIGltYWdlIHF1YWxpdHkgdG8gZ2FpbiBzcGVlZC4KKyItZmFzdCIgdHVybnMgb24gdGhlIHJlY29tbWVuZGVkIHNldHRpbmdzLgorCisiLWRjdCBmYXN0IiBhbmQvb3IgIi1ub3Ntb290aCIgZ2FpbiBzcGVlZCBhdCBhIHNtYWxsIHNhY3JpZmljZSBpbiBxdWFsaXR5LgorV2hlbiBwcm9kdWNpbmcgYSBjb2xvci1xdWFudGl6ZWQgaW1hZ2UsICItb25lcGFzcyAtZGl0aGVyIG9yZGVyZWQiIGlzIGZhc3QgYnV0CittdWNoIGxvd2VyIHF1YWxpdHkgdGhhbiB0aGUgZGVmYXVsdCBiZWhhdmlvci4gICItZGl0aGVyIG5vbmUiIG1heSBnaXZlCithY2NlcHRhYmxlIHJlc3VsdHMgaW4gdHdvLXBhc3MgbW9kZSwgYnV0IGlzIHNlbGRvbSB0b2xlcmFibGUgaW4gb25lLXBhc3MgbW9kZS4KKworVG8gYXZvaWQgdGhlIFVuaXN5cyBMWlcgcGF0ZW50IChub3cgZXhwaXJlZCksIGRqcGVnIHByb2R1Y2VzIHVuY29tcHJlc3NlZCBHSUYKK2ZpbGVzLiAgVGhlc2UgYXJlIGxhcmdlciB0aGFuIHRoZXkgc2hvdWxkIGJlLCBidXQgYXJlIHJlYWRhYmxlIGJ5IHN0YW5kYXJkIEdJRgorZGVjb2RlcnMuCisKKworSElOVFMgRk9SIEJPVEggUFJPR1JBTVMKKworSWYgdGhlIG1lbW9yeSBuZWVkZWQgYnkgY2pwZWcgb3IgZGpwZWcgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGJ5CistbWF4bWVtb3J5LCBhbiBlcnJvciB3aWxsIG9jY3VyLiAgWW91IGNhbiBsZWF2ZSBvdXQgLXByb2dyZXNzaXZlIGFuZCAtb3B0aW1pemUKKyhmb3IgY2pwZWcpIG9yIHNwZWNpZnkgLW9uZXBhc3MgKGZvciBkanBlZykgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZS4KKworT24gbWFjaGluZXMgdGhhdCBoYXZlICJlbnZpcm9ubWVudCIgdmFyaWFibGVzLCB5b3UgY2FuIGRlZmluZSB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIEpQRUdNRU0gdG8gc2V0IHRoZSBkZWZhdWx0IG1lbW9yeSBsaW1pdC4gIFRoZSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMKK2Rlc2NyaWJlZCBmb3IgdGhlIC1tYXhtZW1vcnkgc3dpdGNoLiAgSlBFR01FTSBvdmVycmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUKK3NwZWNpZmllZCB3aGVuIHRoZSBwcm9ncmFtIHdhcyBjb21waWxlZCwgYW5kIGl0c2VsZiBpcyBvdmVycmlkZGVuIGJ5IGFuCitleHBsaWNpdCAtbWF4bWVtb3J5IHN3aXRjaC4KKworCitKUEVHVFJBTgorCitqcGVndHJhbiBwZXJmb3JtcyB2YXJpb3VzIHVzZWZ1bCB0cmFuc2Zvcm1hdGlvbnMgb2YgSlBFRyBmaWxlcy4KK0l0IGNhbiB0cmFuc2xhdGUgdGhlIGNvZGVkIHJlcHJlc2VudGF0aW9uIGZyb20gb25lIHZhcmlhbnQgb2YgSlBFRyB0byBhbm90aGVyLAorZm9yIGV4YW1wbGUgZnJvbSBiYXNlbGluZSBKUEVHIHRvIHByb2dyZXNzaXZlIEpQRUcgb3IgdmljZSB2ZXJzYS4gIEl0IGNhbiBhbHNvCitwZXJmb3JtIHNvbWUgcmVhcnJhbmdlbWVudHMgb2YgdGhlIGltYWdlIGRhdGEsIGZvciBleGFtcGxlIHR1cm5pbmcgYW4gaW1hZ2UKK2Zyb20gbGFuZHNjYXBlIHRvIHBvcnRyYWl0IGZvcm1hdCBieSByb3RhdGlvbi4gIEZvciBFWElGIGZpbGVzIGFuZCBKUEVHIGZpbGVzCitjb250YWluaW5nIEV4aWYgZGF0YSwgeW91IG1heSBwcmVmZXIgdG8gdXNlIGV4aWZ0cmFuIGluc3RlYWQuCisKK2pwZWd0cmFuIHdvcmtzIGJ5IHJlYXJyYW5naW5nIHRoZSBjb21wcmVzc2VkIGRhdGEgKERDVCBjb2VmZmljaWVudHMpLCB3aXRob3V0CitldmVyIGZ1bGx5IGRlY29kaW5nIHRoZSBpbWFnZS4gIFRoZXJlZm9yZSwgaXRzIHRyYW5zZm9ybWF0aW9ucyBhcmUgbG9zc2xlc3M6Cit0aGVyZSBpcyBubyBpbWFnZSBkZWdyYWRhdGlvbiBhdCBhbGwsIHdoaWNoIHdvdWxkIG5vdCBiZSB0cnVlIGlmIHlvdSB1c2VkCitkanBlZyBmb2xsb3dlZCBieSBjanBlZyB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIGNvbnZlcnNpb24uICBCdXQgYnkgdGhlIHNhbWUKK3Rva2VuLCBqcGVndHJhbiBjYW5ub3QgcGVyZm9ybSBsb3NzeSBvcGVyYXRpb25zIHN1Y2ggYXMgY2hhbmdpbmcgdGhlIGltYWdlCitxdWFsaXR5LiAgSG93ZXZlciwgd2hpbGUgdGhlIGltYWdlIGRhdGEgaXMgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCwgbWV0YWRhdGEKK2NhbiBiZSByZW1vdmVkLiAgU2VlIHRoZSAtY29weSBvcHRpb24gZm9yIHNwZWNpZmljcy4KKworanBlZ3RyYW4gdXNlcyBhIGNvbW1hbmQgbGluZSBzeW50YXggc2ltaWxhciB0byBjanBlZyBvciBkanBlZy4KK09uIFVuaXgtbGlrZSBzeXN0ZW1zLCB5b3Ugc2F5OgorICAgICAgICBqcGVndHJhbiBbc3dpdGNoZXNdIFtpbnB1dGZpbGVdID5vdXRwdXRmaWxlCitPbiBtb3N0IG5vbi1Vbml4IHN5c3RlbXMsIHlvdSBzYXk6CisgICAgICAgIGpwZWd0cmFuIFtzd2l0Y2hlc10gaW5wdXRmaWxlIG91dHB1dGZpbGUKK3doZXJlIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMgYXJlIEpQRUcgZmlsZXMuCisKK1RvIHNwZWNpZnkgdGhlIGNvZGVkIEpQRUcgcmVwcmVzZW50YXRpb24gdXNlZCBpbiB0aGUgb3V0cHV0IGZpbGUsCitqcGVndHJhbiBhY2NlcHRzIGEgc3Vic2V0IG9mIHRoZSBzd2l0Y2hlcyByZWNvZ25pemVkIGJ5IGNqcGVnOgorICAgICAgICAtb3B0aW1pemUgICAgICAgUGVyZm9ybSBvcHRpbWl6YXRpb24gb2YgZW50cm9weSBlbmNvZGluZyBwYXJhbWV0ZXJzLgorICAgICAgICAtcHJvZ3Jlc3NpdmUgICAgQ3JlYXRlIHByb2dyZXNzaXZlIEpQRUcgZmlsZS4KKyAgICAgICAgLWFyaXRobWV0aWMgICAgIFVzZSBhcml0aG1ldGljIGNvZGluZy4KKyAgICAgICAgLXJlc3RhcnQgTiAgICAgIEVtaXQgYSBKUEVHIHJlc3RhcnQgbWFya2VyIGV2ZXJ5IE4gTUNVIHJvd3MsIG9yIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICBOIE1DVSBibG9ja3MgaWYgIkIiIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgIC1zY2FucyBmaWxlICAgICBVc2UgdGhlIHNjYW4gc2NyaXB0IGdpdmVuIGluIHRoZSBzcGVjaWZpZWQgdGV4dCBmaWxlLgorU2VlIHRoZSBwcmV2aW91cyBkaXNjdXNzaW9uIG9mIGNqcGVnIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlc2Ugc3dpdGNoZXMuCitJZiB5b3Ugc3BlY2lmeSBub25lIG9mIHRoZXNlIHN3aXRjaGVzLCB5b3UgZ2V0IGEgcGxhaW4gYmFzZWxpbmUtSlBFRyBvdXRwdXQKK2ZpbGUuICBUaGUgcXVhbGl0eSBzZXR0aW5nIGFuZCBzbyBmb3J0aCBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgaW5wdXQgZmlsZS4KKworVGhlIGltYWdlIGNhbiBiZSBsb3NzbGVzc2x5IHRyYW5zZm9ybWVkIGJ5IGdpdmluZyBvbmUgb2YgdGhlc2Ugc3dpdGNoZXM6CisgICAgICAgIC1mbGlwIGhvcml6b250YWwgICAgICAgIE1pcnJvciBpbWFnZSBob3Jpem9udGFsbHkgKGxlZnQtcmlnaHQpLgorICAgICAgICAtZmxpcCB2ZXJ0aWNhbCAgICAgICAgICBNaXJyb3IgaW1hZ2UgdmVydGljYWxseSAodG9wLWJvdHRvbSkuCisgICAgICAgIC1yb3RhdGUgOTAgICAgICAgICAgICAgIFJvdGF0ZSBpbWFnZSA5MCBkZWdyZWVzIGNsb2Nrd2lzZS4KKyAgICAgICAgLXJvdGF0ZSAxODAgICAgICAgICAgICAgUm90YXRlIGltYWdlIDE4MCBkZWdyZWVzLgorICAgICAgICAtcm90YXRlIDI3MCAgICAgICAgICAgICBSb3RhdGUgaW1hZ2UgMjcwIGRlZ3JlZXMgY2xvY2t3aXNlIChvciA5MCBjY3cpLgorICAgICAgICAtdHJhbnNwb3NlICAgICAgICAgICAgICBUcmFuc3Bvc2UgaW1hZ2UgKGFjcm9zcyBVTC10by1MUiBheGlzKS4KKyAgICAgICAgLXRyYW5zdmVyc2UgICAgICAgICAgICAgVHJhbnN2ZXJzZSB0cmFuc3Bvc2UgKGFjcm9zcyBVUi10by1MTCBheGlzKS4KKworVGhlIHRyYW5zcG9zZSB0cmFuc2Zvcm1hdGlvbiBoYXMgbm8gcmVzdHJpY3Rpb25zIHJlZ2FyZGluZyBpbWFnZSBkaW1lbnNpb25zLgorVGhlIG90aGVyIHRyYW5zZm9ybWF0aW9ucyBvcGVyYXRlIHJhdGhlciBvZGRseSBpZiB0aGUgaW1hZ2UgZGltZW5zaW9ucyBhcmUgbm90CithIG11bHRpcGxlIG9mIHRoZSBpTUNVIHNpemUgKHVzdWFsbHkgOCBvciAxNiBwaXhlbHMpLCBiZWNhdXNlIHRoZXkgY2FuIG9ubHkKK3RyYW5zZm9ybSBjb21wbGV0ZSBibG9ja3Mgb2YgRENUIGNvZWZmaWNpZW50IGRhdGEgaW4gdGhlIGRlc2lyZWQgd2F5LgorCitqcGVndHJhbidzIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiB0cmFuc2Zvcm1pbmcgYW4gb2RkLXNpemUgaW1hZ2UgaXMgZGVzaWduZWQKK3RvIHByZXNlcnZlIGV4YWN0IHJldmVyc2liaWxpdHkgYW5kIG1hdGhlbWF0aWNhbCBjb25zaXN0ZW5jeSBvZiB0aGUKK3RyYW5zZm9ybWF0aW9uIHNldC4gIEFzIHN0YXRlZCwgdHJhbnNwb3NlIGlzIGFibGUgdG8gZmxpcCB0aGUgZW50aXJlIGltYWdlCithcmVhLiAgSG9yaXpvbnRhbCBtaXJyb3JpbmcgbGVhdmVzIGFueSBwYXJ0aWFsIGlNQ1UgY29sdW1uIGF0IHRoZSByaWdodCBlZGdlCit1bnRvdWNoZWQsIGJ1dCBpcyBhYmxlIHRvIGZsaXAgYWxsIHJvd3Mgb2YgdGhlIGltYWdlLiAgU2ltaWxhcmx5LCB2ZXJ0aWNhbAorbWlycm9yaW5nIGxlYXZlcyBhbnkgcGFydGlhbCBpTUNVIHJvdyBhdCB0aGUgYm90dG9tIGVkZ2UgdW50b3VjaGVkLCBidXQgaXMKK2FibGUgdG8gZmxpcCBhbGwgY29sdW1ucy4gIFRoZSBvdGhlciB0cmFuc2Zvcm1zIGNhbiBiZSBidWlsdCB1cCBhcyBzZXF1ZW5jZXMKK29mIHRyYW5zcG9zZSBhbmQgZmxpcCBvcGVyYXRpb25zOyBmb3IgY29uc2lzdGVuY3ksIHRoZWlyIGFjdGlvbnMgb24gZWRnZQorcGl4ZWxzIGFyZSBkZWZpbmVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBlbmQgcmVzdWx0IG9mIHRoZSBjb3JyZXNwb25kaW5nCit0cmFuc3Bvc2UtYW5kLWZsaXAgc2VxdWVuY2UuCisKK0ZvciBwcmFjdGljYWwgdXNlLCB5b3UgbWF5IHByZWZlciB0byBkaXNjYXJkIGFueSB1bnRyYW5zZm9ybWFibGUgZWRnZSBwaXhlbHMKK3JhdGhlciB0aGFuIGhhdmluZyBhIHN0cmFuZ2UtbG9va2luZyBzdHJpcCBhbG9uZyB0aGUgcmlnaHQgYW5kL29yIGJvdHRvbSBlZGdlcworb2YgYSB0cmFuc2Zvcm1lZCBpbWFnZS4gIFRvIGRvIHRoaXMsIGFkZCB0aGUgLXRyaW0gc3dpdGNoOgorICAgICAgICAtdHJpbSAgICAgICAgICAgRHJvcCBub24tdHJhbnNmb3JtYWJsZSBlZGdlIGJsb2Nrcy4KK09idmlvdXNseSwgYSB0cmFuc2Zvcm1hdGlvbiB3aXRoIC10cmltIGlzIG5vdCByZXZlcnNpYmxlLCBzbyBzdHJpY3RseSBzcGVha2luZworanBlZ3RyYW4gd2l0aCB0aGlzIHN3aXRjaCBpcyBub3QgbG9zc2xlc3MuICBBbHNvLCB0aGUgZXhwZWN0ZWQgbWF0aGVtYXRpY2FsCitlcXVpdmFsZW5jZXMgYmV0d2VlbiB0aGUgdHJhbnNmb3JtYXRpb25zIG5vIGxvbmdlciBob2xkLiAgRm9yIGV4YW1wbGUsCisiLXJvdCAyNzAgLXRyaW0iIHRyaW1zIG9ubHkgdGhlIGJvdHRvbSBlZGdlLCBidXQgIi1yb3QgOTAgLXRyaW0iIGZvbGxvd2VkIGJ5CisiLXJvdCAxODAgLXRyaW0iIHRyaW1zIGJvdGggZWRnZXMuCisKK0lmIHlvdSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHBlcmZlY3QgdHJhbnNmb3JtYXRpb25zLCBhZGQgdGhlIC1wZXJmZWN0IHN3aXRjaDoKKyAgICAgICAgLXBlcmZlY3QgICAgICAgIEZhaWwgd2l0aCBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtYXRpb24gaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0LgorRm9yIGV4YW1wbGUsIHlvdSBtYXkgd2FudCB0byBkbworICBqcGVndHJhbiAtcm90IDkwIC1wZXJmZWN0IGZvby5qcGcgfHwgZGpwZWcgZm9vLmpwZyB8IHBubWZsaXAgLXI5MCB8IGNqcGVnCit0byBkbyBhIHBlcmZlY3Qgcm90YXRpb24sIGlmIGF2YWlsYWJsZSwgb3IgYW4gYXBwcm94aW1hdGVkIG9uZSBpZiBub3QuCisKK1RoaXMgdmVyc2lvbiBvZiBqcGVndHJhbiBhbHNvIG9mZmVycyBhIGxvc3NsZXNzIGNyb3Agb3B0aW9uLCB3aGljaCBkaXNjYXJkcworZGF0YSBvdXRzaWRlIG9mIGEgZ2l2ZW4gaW1hZ2UgcmVnaW9uIGJ1dCBsb3NzbGVzc2x5IHByZXNlcnZlcyB3aGF0IGlzIGluc2lkZS4KK0xpa2UgdGhlIHJvdGF0ZSBhbmQgZmxpcCB0cmFuc2Zvcm1zLCBsb3NzbGVzcyBjcm9wIGlzIHJlc3RyaWN0ZWQgYnkgdGhlIGN1cnJlbnQKK0pQRUcgZm9ybWF0OyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNlbGVjdGVkIHJlZ2lvbiBtdXN0IGZhbGwgb24gYW4gaU1DVQorYm91bmRhcnkuICBJZiBpdCBkb2Vzbid0LCB0aGVuIGl0IGlzIHNpbGVudGx5IG1vdmVkIHVwIGFuZC9vciBsZWZ0IHRvIHRoZQorbmVhcmVzdCBpTUNVIGJvdW5kYXJ5ICh0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGlzIHVuY2hhbmdlZC4pICBUaHVzLCB0aGUgb3V0cHV0CitpbWFnZSBjb3ZlcnMgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCByZWdpb24sIGJ1dCBpdCBtYXkgY292ZXIgbW9yZS4gIFRoZQorYWRqdXN0bWVudCBvZiB0aGUgcmVnaW9uIGRpbWVuc2lvbnMgbWF5IGJlIG9wdGlvbmFsbHkgZGlzYWJsZWQgYnkgYXR0YWNoaW5nIGFuCisnZicgY2hhcmFjdGVyICgiZm9yY2UiKSB0byB0aGUgd2lkdGggb3IgaGVpZ2h0IG51bWJlci4KKworVGhlIGltYWdlIGNhbiBiZSBsb3NzbGVzc2x5IGNyb3BwZWQgYnkgZ2l2aW5nIHRoZSBzd2l0Y2g6CisgICAgICAgIC1jcm9wIFd4SCtYK1kgICBDcm9wIHRvIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHdpZHRoIFcgYW5kIGhlaWdodCBILAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgcG9pbnQgWCxZLgorCitPdGhlciBub3Qtc3RyaWN0bHktbG9zc2xlc3MgdHJhbnNmb3JtYXRpb24gc3dpdGNoZXMgYXJlOgorCisgICAgICAgIC1ncmF5c2NhbGUgICAgICBGb3JjZSBncmF5c2NhbGUgb3V0cHV0LgorVGhpcyBvcHRpb24gZGlzY2FyZHMgdGhlIGNocm9taW5hbmNlIGNoYW5uZWxzIGlmIHRoZSBpbnB1dCBpbWFnZSBpcyBZQ2JDcgorKGllLCBhIHN0YW5kYXJkIGNvbG9yIEpQRUcpLCByZXN1bHRpbmcgaW4gYSBncmF5c2NhbGUgSlBFRyBmaWxlLiAgVGhlCitsdW1pbmFuY2UgY2hhbm5lbCBpcyBwcmVzZXJ2ZWQgZXhhY3RseSwgc28gdGhpcyBpcyBhIGJldHRlciBtZXRob2Qgb2YgcmVkdWNpbmcKK3RvIGdyYXlzY2FsZSB0aGFuIGRlY29tcHJlc3Npb24sIGNvbnZlcnNpb24sIGFuZCByZWNvbXByZXNzaW9uLiAgVGhpcyBzd2l0Y2gKK2lzIHBhcnRpY3VsYXJseSBoYW5keSBmb3IgZml4aW5nIGEgbW9ub2Nocm9tZSBwaWN0dXJlIHRoYXQgd2FzIG1pc3Rha2VubHkKK2VuY29kZWQgYXMgYSBjb2xvciBKUEVHLiAgKEluIHN1Y2ggYSBjYXNlLCB0aGUgc3BhY2Ugc2F2aW5ncyBmcm9tIGdldHRpbmcgcmlkCitvZiB0aGUgbmVhci1lbXB0eSBjaHJvbWEgY2hhbm5lbHMgd29uJ3QgYmUgbGFyZ2U7IGJ1dCB0aGUgZGVjb2RpbmcgdGltZSBmb3IKK2EgZ3JheXNjYWxlIEpQRUcgaXMgc3Vic3RhbnRpYWxseSBsZXNzIHRoYW4gdGhhdCBmb3IgYSBjb2xvciBKUEVHLikKKworanBlZ3RyYW4gYWxzbyByZWNvZ25pemVzIHRoZXNlIHN3aXRjaGVzIHRoYXQgY29udHJvbCB3aGF0IHRvIGRvIHdpdGggImV4dHJhIgorbWFya2Vycywgc3VjaCBhcyBjb21tZW50IGJsb2NrczoKKyAgICAgICAgLWNvcHkgbm9uZSAgICAgIENvcHkgbm8gZXh0cmEgbWFya2VycyBmcm9tIHNvdXJjZSBmaWxlLiAgVGhpcyBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc2VzIGFsbCBjb21tZW50cyBhbmQgb3RoZXIgbWV0YWRhdGEgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZS4KKyAgICAgICAgLWNvcHkgY29tbWVudHMgIENvcHkgb25seSBjb21tZW50IG1hcmtlcnMuICBUaGlzIHNldHRpbmcgY29waWVzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyBmcm9tIHRoZSBzb3VyY2UgZmlsZSBidXQgZGlzY2FyZHMgYW55IG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS4KKyAgICAgICAgLWNvcHkgYWxsICAgICAgIENvcHkgYWxsIGV4dHJhIG1hcmtlcnMuICBUaGlzIHNldHRpbmcgcHJlc2VydmVzCisgICAgICAgICAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzIG1hcmtlcnMgZm91bmQgaW4gdGhlIHNvdXJjZSBmaWxlLCBzdWNoCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBKRklGIHRodW1ibmFpbHMsIEV4aWYgZGF0YSwgYW5kIFBob3Rvc2hvcCBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHNvbWUgZmlsZXMsIHRoZXNlIGV4dHJhIG1hcmtlcnMgY2FuIGJlIHNpemFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gd2lsbCBjb3B5IHRodW1ibmFpbHMgYXMtaXM7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGV5IHdpbGwgbm90IGJlIHRyYW5zZm9ybWVkLgorVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgLWNvcHkgY29tbWVudHMuICAoTm90ZTogaW4gSUpHIHJlbGVhc2VzIHY2IGFuZCB2NmEsCitqcGVndHJhbiBhbHdheXMgZGlkIHRoZSBlcXVpdmFsZW50IG9mIC1jb3B5IG5vbmUuKQorCitBZGRpdGlvbmFsIHN3aXRjaGVzIHJlY29nbml6ZWQgYnkganBlZ3RyYW4gYXJlOgorICAgICAgICAtb3V0ZmlsZSBmaWxlbmFtZQorICAgICAgICAtbWF4bWVtb3J5IE4KKyAgICAgICAgLXZlcmJvc2UKKyAgICAgICAgLWRlYnVnCitUaGVzZSB3b3JrIHRoZSBzYW1lIGFzIGluIGNqcGVnIG9yIGRqcGVnLgorCisKK1RIRSBDT01NRU5UIFVUSUxJVElFUworCitUaGUgSlBFRyBzdGFuZGFyZCBhbGxvd3MgImNvbW1lbnQiIChDT00pIGJsb2NrcyB0byBvY2N1ciB3aXRoaW4gYSBKUEVHIGZpbGUuCitBbHRob3VnaCB0aGUgc3RhbmRhcmQgZG9lc24ndCBhY3R1YWxseSBkZWZpbmUgd2hhdCBDT00gYmxvY2tzIGFyZSBmb3IsIHRoZXkKK2FyZSB3aWRlbHkgdXNlZCB0byBob2xkIHVzZXItc3VwcGxpZWQgdGV4dCBzdHJpbmdzLiAgVGhpcyBsZXRzIHlvdSBhZGQKK2Fubm90YXRpb25zLCB0aXRsZXMsIGluZGV4IHRlcm1zLCBldGMgdG8geW91ciBKUEVHIGZpbGVzLCBhbmQgbGF0ZXIgcmV0cmlldmUKK3RoZW0gYXMgdGV4dC4gIENPTSBibG9ja3MgZG8gbm90IGludGVyZmVyZSB3aXRoIHRoZSBpbWFnZSBzdG9yZWQgaW4gdGhlIEpQRUcKK2ZpbGUuICBUaGUgbWF4aW11bSBzaXplIG9mIGEgQ09NIGJsb2NrIGlzIDY0SywgYnV0IHlvdSBjYW4gaGF2ZSBhcyBtYW55IG9mCit0aGVtIGFzIHlvdSBsaWtlIGluIG9uZSBKUEVHIGZpbGUuCisKK1dlIHByb3ZpZGUgdHdvIHV0aWxpdHkgcHJvZ3JhbXMgdG8gZGlzcGxheSBDT00gYmxvY2sgY29udGVudHMgYW5kIGFkZCBDT00KK2Jsb2NrcyB0byBhIEpQRUcgZmlsZS4KKworcmRqcGdjb20gc2VhcmNoZXMgYSBKUEVHIGZpbGUgYW5kIHByaW50cyB0aGUgY29udGVudHMgb2YgYW55IENPTSBibG9ja3Mgb24KK3N0YW5kYXJkIG91dHB1dC4gIFRoZSBjb21tYW5kIGxpbmUgc3ludGF4IGlzCisgICAgICAgIHJkanBnY29tIFstcmF3XSBbLXZlcmJvc2VdIFtpbnB1dGZpbGVuYW1lXQorVGhlIHN3aXRjaCAiLXJhdyIgKG9yIGp1c3QgIi1yIikgY2F1c2VzIHJkanBnY29tIHRvIG91dHB1dCBub24tcHJpbnRhYmxlCitjaGFyYWN0ZXJzIGluIEpQRUcgY29tbWVudHMuICBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBub3JtYWxseSBlc2NhcGVkIGZvcgorc2VjdXJpdHkgcmVhc29ucy4KK1RoZSBzd2l0Y2ggIi12ZXJib3NlIiAob3IganVzdCAiLXYiKSBjYXVzZXMgcmRqcGdjb20gdG8gYWxzbyBkaXNwbGF5IHRoZSBKUEVHCitpbWFnZSBkaW1lbnNpb25zLiAgSWYgeW91IG9taXQgdGhlIGlucHV0IGZpbGUgbmFtZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsCit0aGUgSlBFRyBmaWxlIGlzIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIChUaGlzIG1heSBub3Qgd29yayBvbiBzb21lCitvcGVyYXRpbmcgc3lzdGVtcywgaWYgYmluYXJ5IGRhdGEgY2FuJ3QgYmUgcmVhZCBmcm9tIHN0ZGluLikKKword3JqcGdjb20gYWRkcyBhIENPTSBibG9jaywgY29udGFpbmluZyB0ZXh0IHlvdSBwcm92aWRlLCB0byBhIEpQRUcgZmlsZS4KK09yZGluYXJpbHksIHRoZSBDT00gYmxvY2sgaXMgYWRkZWQgYWZ0ZXIgYW55IGV4aXN0aW5nIENPTSBibG9ja3MsIGJ1dCB5b3UKK2NhbiBkZWxldGUgdGhlIG9sZCBDT00gYmxvY2tzIGlmIHlvdSB3aXNoLiAgd3JqcGdjb20gcHJvZHVjZXMgYSBuZXcgSlBFRworZmlsZTsgaXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBpbnB1dCBmaWxlLiAgRE8gTk9UIHRyeSB0byBvdmVyd3JpdGUgdGhlIGlucHV0CitmaWxlIGJ5IGRpcmVjdGluZyB3cmpwZ2NvbSdzIG91dHB1dCBiYWNrIGludG8gaXQ7IG9uIG1vc3Qgc3lzdGVtcyB0aGlzIHdpbGwKK2p1c3QgZGVzdHJveSB5b3VyIGZpbGUuCisKK1RoZSBjb21tYW5kIGxpbmUgc3ludGF4IGZvciB3cmpwZ2NvbSBpcyBzaW1pbGFyIHRvIGNqcGVnJ3MuICBPbiBVbml4LWxpa2UKK3N5c3RlbXMsIGl0IGlzCisgICAgICAgIHdyanBnY29tIFtzd2l0Y2hlc10gW2lucHV0ZmlsZW5hbWVdCitUaGUgb3V0cHV0IGZpbGUgaXMgd3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQuICBUaGUgaW5wdXQgZmlsZSBjb21lcyBmcm9tCit0aGUgbmFtZWQgZmlsZSwgb3IgZnJvbSBzdGFuZGFyZCBpbnB1dCBpZiBubyBpbnB1dCBmaWxlIGlzIG5hbWVkLgorCitPbiBtb3N0IG5vbi1Vbml4IHN5c3RlbXMsIHRoZSBzeW50YXggaXMKKyAgICAgICAgd3JqcGdjb20gW3N3aXRjaGVzXSBpbnB1dGZpbGVuYW1lIG91dHB1dGZpbGVuYW1lCit3aGVyZSBib3RoIGlucHV0IGFuZCBvdXRwdXQgZmlsZSBuYW1lcyBtdXN0IGJlIGdpdmVuIGV4cGxpY2l0bHkuCisKK3dyanBnY29tIHVuZGVyc3RhbmRzIHRocmVlIHN3aXRjaGVzOgorICAgICAgICAtcmVwbGFjZSAgICAgICAgICAgICAgICAgRGVsZXRlIGFueSBleGlzdGluZyBDT00gYmxvY2tzIGZyb20gdGhlIGZpbGUuCisgICAgICAgIC1jb21tZW50ICJDb21tZW50IHRleHQiICBTdXBwbHkgbmV3IENPTSB0ZXh0IG9uIGNvbW1hbmQgbGluZS4KKyAgICAgICAgLWNmaWxlIG5hbWUgICAgICAgICAgICAgIFJlYWQgdGV4dCBmb3IgbmV3IENPTSBibG9jayBmcm9tIG5hbWVkIGZpbGUuCisoU3dpdGNoIG5hbWVzIGNhbiBiZSBhYmJyZXZpYXRlZC4pICBJZiB5b3UgaGF2ZSBvbmx5IG9uZSBsaW5lIG9mIGNvbW1lbnQgdGV4dAordG8gYWRkLCB5b3UgY2FuIHByb3ZpZGUgaXQgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIC1jb21tZW50LiAgVGhlIGNvbW1lbnQKK3RleHQgbXVzdCBiZSBzdXJyb3VuZGVkIHdpdGggcXVvdGVzIHNvIHRoYXQgaXQgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZQorYXJndW1lbnQuICBMb25nZXIgY29tbWVudHMgY2FuIGJlIHJlYWQgZnJvbSBhIHRleHQgZmlsZS4KKworSWYgeW91IGdpdmUgbmVpdGhlciAtY29tbWVudCBub3IgLWNmaWxlLCB0aGVuIHdyanBnY29tIHdpbGwgcmVhZCB0aGUgY29tbWVudAordGV4dCBmcm9tIHN0YW5kYXJkIGlucHV0LiAgKEluIHRoaXMgY2FzZSBhbiBpbnB1dCBpbWFnZSBmaWxlIG5hbWUgTVVTVCBiZQorc3VwcGxpZWQsIHNvIHRoYXQgdGhlIHNvdXJjZSBKUEVHIGZpbGUgY29tZXMgZnJvbSBzb21ld2hlcmUgZWxzZS4pICBZb3UgY2FuCitlbnRlciBtdWx0aXBsZSBsaW5lcywgdXAgdG8gNjRLQiB3b3J0aC4gIFR5cGUgYW4gZW5kLW9mLWZpbGUgaW5kaWNhdG9yCisodXN1YWxseSBjb250cm9sLUQgb3IgY29udHJvbC1aKSB0byB0ZXJtaW5hdGUgdGhlIGNvbW1lbnQgdGV4dCBlbnRyeS4KKword3JqcGdjb20gd2lsbCBub3QgYWRkIGEgQ09NIGJsb2NrIGlmIHRoZSBwcm92aWRlZCBjb21tZW50IHN0cmluZyBpcyBlbXB0eS4KK1RoZXJlZm9yZSAtcmVwbGFjZSAtY29tbWVudCAiIiBjYW4gYmUgdXNlZCB0byBkZWxldGUgYWxsIENPTSBibG9ja3MgZnJvbSBhCitmaWxlLgorCitUaGVzZSB1dGlsaXR5IHByb2dyYW1zIGRvIG5vdCBkZXBlbmQgb24gdGhlIElKRyBKUEVHIGxpYnJhcnkuICBJbgorcGFydGljdWxhciwgdGhlIHNvdXJjZSBjb2RlIGZvciByZGpwZ2NvbSBpcyBpbnRlbmRlZCBhcyBhbiBpbGx1c3RyYXRpb24gb2YKK3RoZSBtaW5pbXVtIGFtb3VudCBvZiBjb2RlIHJlcXVpcmVkIHRvIHBhcnNlIGEgSlBFRyBmaWxlIGhlYWRlciBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vamNvbmZpZy5oLmluIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pjb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGIwYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pjb25maWcuaC5pbgpAQCAtMCwwICsxLDM0IEBACisjZGVmaW5lIEpQRUdfTElCX1ZFUlNJT04gIEBKUEVHX0xJQl9WRVJTSU9OQAorI2RlZmluZSBMSUJKUEVHX1RVUkJPX1ZFUlNJT04gIEBWRVJTSU9OQAorI2RlZmluZSBMSUJKUEVHX1RVUkJPX1ZFUlNJT05fTlVNQkVSICBATElCSlBFR19UVVJCT19WRVJTSU9OX05VTUJFUkAKKworI2NtYWtlZGVmaW5lIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorI2NtYWtlZGVmaW5lIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorI2NtYWtlZGVmaW5lIE1FTV9TUkNEU1RfU1VQUE9SVEVECisjY21ha2VkZWZpbmUgV0lUSF9TSU1ECisKKyNkZWZpbmUgQklUU19JTl9KU0FNUExFICBAQklUU19JTl9KU0FNUExFQCAgICAgIC8qIHVzZSA4IG9yIDEyICovCisKKyNkZWZpbmUgSEFWRV9TVERERUZfSAorI2RlZmluZSBIQVZFX1NURExJQl9ICisjdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAorI3VuZGVmIE5FRURfQlNEX1NUUklOR1MKKworI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKKyNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVAorI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisjdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyN1bmRlZiBfX0NIQVJfVU5TSUdORURfXworCisvKiBEZWZpbmUgImJvb2xlYW4iIGFzIHVuc2lnbmVkIGNoYXIsIG5vdCBpbnQsIHBlciBXaW5kb3dzIGN1c3RvbSAqLworI2lmbmRlZiBfX1JQQ05EUl9IX18gICAgICAgICAgICAvKiBkb24ndCBjb25mbGljdCBpZiBycGNuZHIuaCBhbHJlYWR5IHJlYWQgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOworI2VuZGlmCisjZGVmaW5lIEhBVkVfQk9PTEVBTiAgICAgICAgICAgIC8qIHByZXZlbnQgam1vcmVjZmcuaCBmcm9tIHJlZGVmaW5pbmcgaXQgKi8KKworLyogRGVmaW5lICJJTlQzMiIgYXMgaW50LCBub3QgbG9uZywgcGVyIFdpbmRvd3MgY3VzdG9tICovCisjaWYgIShkZWZpbmVkKF9CQVNFVFNEX0hfKSB8fCBkZWZpbmVkKF9CQVNFVFNEX0gpKSAgIC8qIGRvbid0IGNvbmZsaWN0IGlmIGJhc2V0c2QuaCBhbHJlYWR5IHJlYWQgKi8KK3R5cGVkZWYgc2hvcnQgSU5UMTY7Cit0eXBlZGVmIHNpZ25lZCBpbnQgSU5UMzI7CisjZW5kaWYKKyNkZWZpbmUgWE1EX0ggICAgICAgICAgICAgICAgICAgLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pwZWc2Mi1tZW1zcmNkc3QuZGVmIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pwZWc2Mi1tZW1zcmNkc3QuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkMjRhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzYyLW1lbXNyY2RzdC5kZWYKQEAgLTAsMCArMSwxMDggQEAKK0VYUE9SVFMKKyAgamNvcHlfYmxvY2tfcm93IEAgMSA7CisgIGpjb3B5X3NhbXBsZV9yb3dzIEAgMiA7CisgIGpkaXZfcm91bmRfdXAgQCAzIDsKKyAgamluaXRfMXBhc3NfcXVhbnRpemVyIEAgNCA7CisgIGppbml0XzJwYXNzX3F1YW50aXplciBAIDUgOworICBqaW5pdF9jX2NvZWZfY29udHJvbGxlciBAIDYgOworICBqaW5pdF9jX21haW5fY29udHJvbGxlciBAIDcgOworICBqaW5pdF9jX21hc3Rlcl9jb250cm9sIEAgOCA7CisgIGppbml0X2NfcHJlcF9jb250cm9sbGVyIEAgOSA7CisgIGppbml0X2NvbG9yX2NvbnZlcnRlciBAIDEwIDsKKyAgamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgQCAxMSA7CisgIGppbml0X2NvbXByZXNzX21hc3RlciBAIDEyIDsKKyAgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgQCAxMyA7CisgIGppbml0X2RfbWFpbl9jb250cm9sbGVyIEAgMTQgOworICBqaW5pdF9kX3Bvc3RfY29udHJvbGxlciBAIDE1IDsKKyAgamluaXRfZG93bnNhbXBsZXIgQCAxNiA7CisgIGppbml0X2ZvcndhcmRfZGN0IEAgMTcgOworICBqaW5pdF9odWZmX2RlY29kZXIgQCAxOCA7CisgIGppbml0X2h1ZmZfZW5jb2RlciBAIDE5IDsKKyAgamluaXRfaW5wdXRfY29udHJvbGxlciBAIDIwIDsKKyAgamluaXRfaW52ZXJzZV9kY3QgQCAyMSA7CisgIGppbml0X21hcmtlcl9yZWFkZXIgQCAyMiA7CisgIGppbml0X21hcmtlcl93cml0ZXIgQCAyMyA7CisgIGppbml0X21hc3Rlcl9kZWNvbXByZXNzIEAgMjQgOworICBqaW5pdF9tZW1vcnlfbWdyIEAgMjUgOworICBqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIEAgMjYgOworICBqaW5pdF9waHVmZl9kZWNvZGVyIEAgMjcgOworICBqaW5pdF9waHVmZl9lbmNvZGVyIEAgMjggOworICBqaW5pdF91cHNhbXBsZXIgQCAyOSA7CisgIGpwZWdfQ3JlYXRlQ29tcHJlc3MgQCAzMCA7CisgIGpwZWdfQ3JlYXRlRGVjb21wcmVzcyBAIDMxIDsKKyAganBlZ19hYm9ydCBAIDMyIDsKKyAganBlZ19hYm9ydF9jb21wcmVzcyBAIDMzIDsKKyAganBlZ19hYm9ydF9kZWNvbXByZXNzIEAgMzQgOworICBqcGVnX2FkZF9xdWFudF90YWJsZSBAIDM1IDsKKyAganBlZ19hbGxvY19odWZmX3RhYmxlIEAgMzYgOworICBqcGVnX2FsbG9jX3F1YW50X3RhYmxlIEAgMzcgOworICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMgQCAzOCA7CisgIGpwZWdfY29uc3VtZV9pbnB1dCBAIDM5IDsKKyAganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMgQCA0MCA7CisgIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIEAgNDEgOworICBqcGVnX2Rlc3Ryb3kgQCA0MiA7CisgIGpwZWdfZGVzdHJveV9jb21wcmVzcyBAIDQzIDsKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MgQCA0NCA7CisgIGpwZWdfZmRjdF9mbG9hdCBAIDQ1IDsKKyAganBlZ19mZGN0X2lmYXN0IEAgNDYgOworICBqcGVnX2ZkY3RfaXNsb3cgQCA0NyA7CisgIGpwZWdfZmlsbF9iaXRfYnVmZmVyIEAgNDggOworICBqcGVnX2ZpbmlzaF9jb21wcmVzcyBAIDQ5IDsKKyAganBlZ19maW5pc2hfZGVjb21wcmVzcyBAIDUwIDsKKyAganBlZ19maW5pc2hfb3V0cHV0IEAgNTEgOworICBqcGVnX2ZyZWVfbGFyZ2UgQCA1MiA7CisgIGpwZWdfZnJlZV9zbWFsbCBAIDUzIDsKKyAganBlZ19nZW5fb3B0aW1hbF90YWJsZSBAIDU0IDsKKyAganBlZ19nZXRfbGFyZ2UgQCA1NSA7CisgIGpwZWdfZ2V0X3NtYWxsIEAgNTYgOworICBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBAIDU3IDsKKyAganBlZ19odWZmX2RlY29kZSBAIDU4IDsKKyAganBlZ19pZGN0XzF4MSBAIDU5IDsKKyAganBlZ19pZGN0XzJ4MiBAIDYwIDsKKyAganBlZ19pZGN0XzR4NCBAIDYxIDsKKyAganBlZ19pZGN0X2Zsb2F0IEAgNjIgOworICBqcGVnX2lkY3RfaWZhc3QgQCA2MyA7CisgIGpwZWdfaWRjdF9pc2xvdyBAIDY0IDsKKyAganBlZ19pbnB1dF9jb21wbGV0ZSBAIDY1IDsKKyAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwgQCA2NiA7CisgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEAgNjcgOworICBqcGVnX21lbV9hdmFpbGFibGUgQCA2OCA7CisgIGpwZWdfbWVtX2luaXQgQCA2OSA7CisgIGpwZWdfbWVtX3Rlcm0gQCA3MCA7CisgIGpwZWdfbmV3X2NvbG9ybWFwIEAgNzEgOworICBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBAIDcyIDsKKyAganBlZ19xdWFsaXR5X3NjYWxpbmcgQCA3MyA7CisgIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgQCA3NCA7CisgIGpwZWdfcmVhZF9oZWFkZXIgQCA3NSA7CisgIGpwZWdfcmVhZF9yYXdfZGF0YSBAIDc2IDsKKyAganBlZ19yZWFkX3NjYW5saW5lcyBAIDc3IDsKKyAganBlZ19yZXN5bmNfdG9fcmVzdGFydCBAIDc4IDsKKyAganBlZ19zYXZlX21hcmtlcnMgQCA3OSA7CisgIGpwZWdfc2V0X2NvbG9yc3BhY2UgQCA4MCA7CisgIGpwZWdfc2V0X2RlZmF1bHRzIEAgODEgOworICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBAIDgyIDsKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBAIDgzIDsKKyAganBlZ19zZXRfcXVhbGl0eSBAIDg0IDsKKyAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gQCA4NSA7CisgIGpwZWdfc3RhcnRfY29tcHJlc3MgQCA4NiA7CisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBAIDg3IDsKKyAganBlZ19zdGFydF9vdXRwdXQgQCA4OCA7CisgIGpwZWdfc3RkX2Vycm9yIEAgODkgOworICBqcGVnX3N0ZGlvX2Rlc3QgQCA5MCA7CisgIGpwZWdfc3RkaW9fc3JjIEAgOTEgOworICBqcGVnX3N1cHByZXNzX3RhYmxlcyBAIDkyIDsKKyAganBlZ193cml0ZV9jb2VmZmljaWVudHMgQCA5MyA7CisgIGpwZWdfd3JpdGVfbV9ieXRlIEAgOTQgOworICBqcGVnX3dyaXRlX21faGVhZGVyIEAgOTUgOworICBqcGVnX3dyaXRlX21hcmtlciBAIDk2IDsKKyAganBlZ193cml0ZV9yYXdfZGF0YSBAIDk3IDsKKyAganBlZ193cml0ZV9zY2FubGluZXMgQCA5OCA7CisgIGpwZWdfd3JpdGVfdGFibGVzIEAgOTkgOworICBqcm91bmRfdXAgQCAxMDAgOworICBqemVyb19mYXIgQCAxMDEgOworICBqcGVnX21lbV9kZXN0IEAgMTAyIDsKKyAganBlZ19tZW1fc3JjIEAgMTAzIDsKKyAganBlZ19za2lwX3NjYW5saW5lcyBAIDEwNCA7CisgIGpwZWdfY3JvcF9zY2FubGluZSBAIDEwNSA7CisgIGpwZWdfcmVhZF9pY2NfcHJvZmlsZSBAIDEwNiA7CisgIGpwZWdfd3JpdGVfaWNjX3Byb2ZpbGUgQCAxMDcgOwpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pwZWc2Mi5kZWYgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzYyLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mM2M2OWIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pwZWc2Mi5kZWYKQEAgLTAsMCArMSwxMDYgQEAKK0VYUE9SVFMKKyAgamNvcHlfYmxvY2tfcm93IEAgMSA7CisgIGpjb3B5X3NhbXBsZV9yb3dzIEAgMiA7CisgIGpkaXZfcm91bmRfdXAgQCAzIDsKKyAgamluaXRfMXBhc3NfcXVhbnRpemVyIEAgNCA7CisgIGppbml0XzJwYXNzX3F1YW50aXplciBAIDUgOworICBqaW5pdF9jX2NvZWZfY29udHJvbGxlciBAIDYgOworICBqaW5pdF9jX21haW5fY29udHJvbGxlciBAIDcgOworICBqaW5pdF9jX21hc3Rlcl9jb250cm9sIEAgOCA7CisgIGppbml0X2NfcHJlcF9jb250cm9sbGVyIEAgOSA7CisgIGppbml0X2NvbG9yX2NvbnZlcnRlciBAIDEwIDsKKyAgamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgQCAxMSA7CisgIGppbml0X2NvbXByZXNzX21hc3RlciBAIDEyIDsKKyAgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgQCAxMyA7CisgIGppbml0X2RfbWFpbl9jb250cm9sbGVyIEAgMTQgOworICBqaW5pdF9kX3Bvc3RfY29udHJvbGxlciBAIDE1IDsKKyAgamluaXRfZG93bnNhbXBsZXIgQCAxNiA7CisgIGppbml0X2ZvcndhcmRfZGN0IEAgMTcgOworICBqaW5pdF9odWZmX2RlY29kZXIgQCAxOCA7CisgIGppbml0X2h1ZmZfZW5jb2RlciBAIDE5IDsKKyAgamluaXRfaW5wdXRfY29udHJvbGxlciBAIDIwIDsKKyAgamluaXRfaW52ZXJzZV9kY3QgQCAyMSA7CisgIGppbml0X21hcmtlcl9yZWFkZXIgQCAyMiA7CisgIGppbml0X21hcmtlcl93cml0ZXIgQCAyMyA7CisgIGppbml0X21hc3Rlcl9kZWNvbXByZXNzIEAgMjQgOworICBqaW5pdF9tZW1vcnlfbWdyIEAgMjUgOworICBqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIEAgMjYgOworICBqaW5pdF9waHVmZl9kZWNvZGVyIEAgMjcgOworICBqaW5pdF9waHVmZl9lbmNvZGVyIEAgMjggOworICBqaW5pdF91cHNhbXBsZXIgQCAyOSA7CisgIGpwZWdfQ3JlYXRlQ29tcHJlc3MgQCAzMCA7CisgIGpwZWdfQ3JlYXRlRGVjb21wcmVzcyBAIDMxIDsKKyAganBlZ19hYm9ydCBAIDMyIDsKKyAganBlZ19hYm9ydF9jb21wcmVzcyBAIDMzIDsKKyAganBlZ19hYm9ydF9kZWNvbXByZXNzIEAgMzQgOworICBqcGVnX2FkZF9xdWFudF90YWJsZSBAIDM1IDsKKyAganBlZ19hbGxvY19odWZmX3RhYmxlIEAgMzYgOworICBqcGVnX2FsbG9jX3F1YW50X3RhYmxlIEAgMzcgOworICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMgQCAzOCA7CisgIGpwZWdfY29uc3VtZV9pbnB1dCBAIDM5IDsKKyAganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMgQCA0MCA7CisgIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIEAgNDEgOworICBqcGVnX2Rlc3Ryb3kgQCA0MiA7CisgIGpwZWdfZGVzdHJveV9jb21wcmVzcyBAIDQzIDsKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MgQCA0NCA7CisgIGpwZWdfZmRjdF9mbG9hdCBAIDQ1IDsKKyAganBlZ19mZGN0X2lmYXN0IEAgNDYgOworICBqcGVnX2ZkY3RfaXNsb3cgQCA0NyA7CisgIGpwZWdfZmlsbF9iaXRfYnVmZmVyIEAgNDggOworICBqcGVnX2ZpbmlzaF9jb21wcmVzcyBAIDQ5IDsKKyAganBlZ19maW5pc2hfZGVjb21wcmVzcyBAIDUwIDsKKyAganBlZ19maW5pc2hfb3V0cHV0IEAgNTEgOworICBqcGVnX2ZyZWVfbGFyZ2UgQCA1MiA7CisgIGpwZWdfZnJlZV9zbWFsbCBAIDUzIDsKKyAganBlZ19nZW5fb3B0aW1hbF90YWJsZSBAIDU0IDsKKyAganBlZ19nZXRfbGFyZ2UgQCA1NSA7CisgIGpwZWdfZ2V0X3NtYWxsIEAgNTYgOworICBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBAIDU3IDsKKyAganBlZ19odWZmX2RlY29kZSBAIDU4IDsKKyAganBlZ19pZGN0XzF4MSBAIDU5IDsKKyAganBlZ19pZGN0XzJ4MiBAIDYwIDsKKyAganBlZ19pZGN0XzR4NCBAIDYxIDsKKyAganBlZ19pZGN0X2Zsb2F0IEAgNjIgOworICBqcGVnX2lkY3RfaWZhc3QgQCA2MyA7CisgIGpwZWdfaWRjdF9pc2xvdyBAIDY0IDsKKyAganBlZ19pbnB1dF9jb21wbGV0ZSBAIDY1IDsKKyAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwgQCA2NiA7CisgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEAgNjcgOworICBqcGVnX21lbV9hdmFpbGFibGUgQCA2OCA7CisgIGpwZWdfbWVtX2luaXQgQCA2OSA7CisgIGpwZWdfbWVtX3Rlcm0gQCA3MCA7CisgIGpwZWdfbmV3X2NvbG9ybWFwIEAgNzEgOworICBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBAIDcyIDsKKyAganBlZ19xdWFsaXR5X3NjYWxpbmcgQCA3MyA7CisgIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgQCA3NCA7CisgIGpwZWdfcmVhZF9oZWFkZXIgQCA3NSA7CisgIGpwZWdfcmVhZF9yYXdfZGF0YSBAIDc2IDsKKyAganBlZ19yZWFkX3NjYW5saW5lcyBAIDc3IDsKKyAganBlZ19yZXN5bmNfdG9fcmVzdGFydCBAIDc4IDsKKyAganBlZ19zYXZlX21hcmtlcnMgQCA3OSA7CisgIGpwZWdfc2V0X2NvbG9yc3BhY2UgQCA4MCA7CisgIGpwZWdfc2V0X2RlZmF1bHRzIEAgODEgOworICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBAIDgyIDsKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBAIDgzIDsKKyAganBlZ19zZXRfcXVhbGl0eSBAIDg0IDsKKyAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gQCA4NSA7CisgIGpwZWdfc3RhcnRfY29tcHJlc3MgQCA4NiA7CisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBAIDg3IDsKKyAganBlZ19zdGFydF9vdXRwdXQgQCA4OCA7CisgIGpwZWdfc3RkX2Vycm9yIEAgODkgOworICBqcGVnX3N0ZGlvX2Rlc3QgQCA5MCA7CisgIGpwZWdfc3RkaW9fc3JjIEAgOTEgOworICBqcGVnX3N1cHByZXNzX3RhYmxlcyBAIDkyIDsKKyAganBlZ193cml0ZV9jb2VmZmljaWVudHMgQCA5MyA7CisgIGpwZWdfd3JpdGVfbV9ieXRlIEAgOTQgOworICBqcGVnX3dyaXRlX21faGVhZGVyIEAgOTUgOworICBqcGVnX3dyaXRlX21hcmtlciBAIDk2IDsKKyAganBlZ193cml0ZV9yYXdfZGF0YSBAIDk3IDsKKyAganBlZ193cml0ZV9zY2FubGluZXMgQCA5OCA7CisgIGpwZWdfd3JpdGVfdGFibGVzIEAgOTkgOworICBqcm91bmRfdXAgQCAxMDAgOworICBqemVyb19mYXIgQCAxMDEgOworICBqcGVnX3NraXBfc2NhbmxpbmVzIEAgMTAyIDsKKyAganBlZ19jcm9wX3NjYW5saW5lIEAgMTAzIDsKKyAganBlZ19yZWFkX2ljY19wcm9maWxlIEAgMTA0IDsKKyAganBlZ193cml0ZV9pY2NfcHJvZmlsZSBAIDEwNSA7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzctbWVtc3JjZHN0LmRlZiBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dpbi9qcGVnNy1tZW1zcmNkc3QuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDVhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzctbWVtc3JjZHN0LmRlZgpAQCAtMCwwICsxLDExMCBAQAorRVhQT1JUUworICBqY29weV9ibG9ja19yb3cgQCAxIDsKKyAgamNvcHlfc2FtcGxlX3Jvd3MgQCAyIDsKKyAgamRpdl9yb3VuZF91cCBAIDMgOworICBqaW5pdF8xcGFzc19xdWFudGl6ZXIgQCA0IDsKKyAgamluaXRfMnBhc3NfcXVhbnRpemVyIEAgNSA7CisgIGppbml0X2NfY29lZl9jb250cm9sbGVyIEAgNiA7CisgIGppbml0X2NfbWFpbl9jb250cm9sbGVyIEAgNyA7CisgIGppbml0X2NfbWFzdGVyX2NvbnRyb2wgQCA4IDsKKyAgamluaXRfY19wcmVwX2NvbnRyb2xsZXIgQCA5IDsKKyAgamluaXRfY29sb3JfY29udmVydGVyIEAgMTAgOworICBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBAIDExIDsKKyAgamluaXRfY29tcHJlc3NfbWFzdGVyIEAgMTIgOworICBqaW5pdF9kX2NvZWZfY29udHJvbGxlciBAIDEzIDsKKyAgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgQCAxNCA7CisgIGppbml0X2RfcG9zdF9jb250cm9sbGVyIEAgMTUgOworICBqaW5pdF9kb3duc2FtcGxlciBAIDE2IDsKKyAgamluaXRfZm9yd2FyZF9kY3QgQCAxNyA7CisgIGppbml0X2h1ZmZfZGVjb2RlciBAIDE4IDsKKyAgamluaXRfaHVmZl9lbmNvZGVyIEAgMTkgOworICBqaW5pdF9pbnB1dF9jb250cm9sbGVyIEAgMjAgOworICBqaW5pdF9pbnZlcnNlX2RjdCBAIDIxIDsKKyAgamluaXRfbWFya2VyX3JlYWRlciBAIDIyIDsKKyAgamluaXRfbWFya2VyX3dyaXRlciBAIDIzIDsKKyAgamluaXRfbWFzdGVyX2RlY29tcHJlc3MgQCAyNCA7CisgIGppbml0X21lbW9yeV9tZ3IgQCAyNSA7CisgIGppbml0X21lcmdlZF91cHNhbXBsZXIgQCAyNiA7CisgIGppbml0X3BodWZmX2RlY29kZXIgQCAyNyA7CisgIGppbml0X3BodWZmX2VuY29kZXIgQCAyOCA7CisgIGppbml0X3Vwc2FtcGxlciBAIDI5IDsKKyAganBlZ19DcmVhdGVDb21wcmVzcyBAIDMwIDsKKyAganBlZ19DcmVhdGVEZWNvbXByZXNzIEAgMzEgOworICBqcGVnX2Fib3J0IEAgMzIgOworICBqcGVnX2Fib3J0X2NvbXByZXNzIEAgMzMgOworICBqcGVnX2Fib3J0X2RlY29tcHJlc3MgQCAzNCA7CisgIGpwZWdfYWRkX3F1YW50X3RhYmxlIEAgMzUgOworICBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgQCAzNiA7CisgIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUgQCAzNyA7CisgIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMgQCAzOCA7CisgIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBAIDM5IDsKKyAganBlZ19jb25zdW1lX2lucHV0IEAgNDAgOworICBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyBAIDQxIDsKKyAganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgQCA0MiA7CisgIGpwZWdfZGVmYXVsdF9xdGFibGVzIEAgNDMgOworICBqcGVnX2Rlc3Ryb3kgQCA0NCA7CisgIGpwZWdfZGVzdHJveV9jb21wcmVzcyBAIDQ1IDsKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MgQCA0NiA7CisgIGpwZWdfZmRjdF9mbG9hdCBAIDQ3IDsKKyAganBlZ19mZGN0X2lmYXN0IEAgNDggOworICBqcGVnX2ZkY3RfaXNsb3cgQCA0OSA7CisgIGpwZWdfZmlsbF9iaXRfYnVmZmVyIEAgNTAgOworICBqcGVnX2ZpbmlzaF9jb21wcmVzcyBAIDUxIDsKKyAganBlZ19maW5pc2hfZGVjb21wcmVzcyBAIDUyIDsKKyAganBlZ19maW5pc2hfb3V0cHV0IEAgNTMgOworICBqcGVnX2ZyZWVfbGFyZ2UgQCA1NCA7CisgIGpwZWdfZnJlZV9zbWFsbCBAIDU1IDsKKyAganBlZ19nZW5fb3B0aW1hbF90YWJsZSBAIDU2IDsKKyAganBlZ19nZXRfbGFyZ2UgQCA1NyA7CisgIGpwZWdfZ2V0X3NtYWxsIEAgNTggOworICBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBAIDU5IDsKKyAganBlZ19odWZmX2RlY29kZSBAIDYwIDsKKyAganBlZ19pZGN0XzF4MSBAIDYxIDsKKyAganBlZ19pZGN0XzJ4MiBAIDYyIDsKKyAganBlZ19pZGN0XzR4NCBAIDYzIDsKKyAganBlZ19pZGN0X2Zsb2F0IEAgNjQgOworICBqcGVnX2lkY3RfaWZhc3QgQCA2NSA7CisgIGpwZWdfaWRjdF9pc2xvdyBAIDY2IDsKKyAganBlZ19pbnB1dF9jb21wbGV0ZSBAIDY3IDsKKyAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwgQCA2OCA7CisgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEAgNjkgOworICBqcGVnX21lbV9hdmFpbGFibGUgQCA3MCA7CisgIGpwZWdfbWVtX2luaXQgQCA3MSA7CisgIGpwZWdfbWVtX3Rlcm0gQCA3MiA7CisgIGpwZWdfbmV3X2NvbG9ybWFwIEAgNzMgOworICBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBAIDc0IDsKKyAganBlZ19xdWFsaXR5X3NjYWxpbmcgQCA3NSA7CisgIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgQCA3NiA7CisgIGpwZWdfcmVhZF9oZWFkZXIgQCA3NyA7CisgIGpwZWdfcmVhZF9yYXdfZGF0YSBAIDc4IDsKKyAganBlZ19yZWFkX3NjYW5saW5lcyBAIDc5IDsKKyAganBlZ19yZXN5bmNfdG9fcmVzdGFydCBAIDgwIDsKKyAganBlZ19zYXZlX21hcmtlcnMgQCA4MSA7CisgIGpwZWdfc2V0X2NvbG9yc3BhY2UgQCA4MiA7CisgIGpwZWdfc2V0X2RlZmF1bHRzIEAgODMgOworICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBAIDg0IDsKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBAIDg1IDsKKyAganBlZ19zZXRfcXVhbGl0eSBAIDg2IDsKKyAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gQCA4NyA7CisgIGpwZWdfc3RhcnRfY29tcHJlc3MgQCA4OCA7CisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBAIDg5IDsKKyAganBlZ19zdGFydF9vdXRwdXQgQCA5MCA7CisgIGpwZWdfc3RkX2Vycm9yIEAgOTEgOworICBqcGVnX3N0ZGlvX2Rlc3QgQCA5MiA7CisgIGpwZWdfc3RkaW9fc3JjIEAgOTMgOworICBqcGVnX3N1cHByZXNzX3RhYmxlcyBAIDk0IDsKKyAganBlZ193cml0ZV9jb2VmZmljaWVudHMgQCA5NSA7CisgIGpwZWdfd3JpdGVfbV9ieXRlIEAgOTYgOworICBqcGVnX3dyaXRlX21faGVhZGVyIEAgOTcgOworICBqcGVnX3dyaXRlX21hcmtlciBAIDk4IDsKKyAganBlZ193cml0ZV9yYXdfZGF0YSBAIDk5IDsKKyAganBlZ193cml0ZV9zY2FubGluZXMgQCAxMDAgOworICBqcGVnX3dyaXRlX3RhYmxlcyBAIDEwMSA7CisgIGpyb3VuZF91cCBAIDEwMiA7CisgIGp6ZXJvX2ZhciBAIDEwMyA7CisgIGpwZWdfbWVtX2Rlc3QgQCAxMDQgOworICBqcGVnX21lbV9zcmMgQCAxMDUgOworICBqcGVnX3NraXBfc2NhbmxpbmVzIEAgMTA2IDsKKyAganBlZ19jcm9wX3NjYW5saW5lIEAgMTA3IDsKKyAganBlZ19yZWFkX2ljY19wcm9maWxlIEAgMTA4IDsKKyAganBlZ193cml0ZV9pY2NfcHJvZmlsZSBAIDEwOSA7CmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzcuZGVmIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pwZWc3LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY0YzAyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd2luL2pwZWc3LmRlZgpAQCAtMCwwICsxLDEwOCBAQAorRVhQT1JUUworICBqY29weV9ibG9ja19yb3cgQCAxIDsKKyAgamNvcHlfc2FtcGxlX3Jvd3MgQCAyIDsKKyAgamRpdl9yb3VuZF91cCBAIDMgOworICBqaW5pdF8xcGFzc19xdWFudGl6ZXIgQCA0IDsKKyAgamluaXRfMnBhc3NfcXVhbnRpemVyIEAgNSA7CisgIGppbml0X2NfY29lZl9jb250cm9sbGVyIEAgNiA7CisgIGppbml0X2NfbWFpbl9jb250cm9sbGVyIEAgNyA7CisgIGppbml0X2NfbWFzdGVyX2NvbnRyb2wgQCA4IDsKKyAgamluaXRfY19wcmVwX2NvbnRyb2xsZXIgQCA5IDsKKyAgamluaXRfY29sb3JfY29udmVydGVyIEAgMTAgOworICBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBAIDExIDsKKyAgamluaXRfY29tcHJlc3NfbWFzdGVyIEAgMTIgOworICBqaW5pdF9kX2NvZWZfY29udHJvbGxlciBAIDEzIDsKKyAgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgQCAxNCA7CisgIGppbml0X2RfcG9zdF9jb250cm9sbGVyIEAgMTUgOworICBqaW5pdF9kb3duc2FtcGxlciBAIDE2IDsKKyAgamluaXRfZm9yd2FyZF9kY3QgQCAxNyA7CisgIGppbml0X2h1ZmZfZGVjb2RlciBAIDE4IDsKKyAgamluaXRfaHVmZl9lbmNvZGVyIEAgMTkgOworICBqaW5pdF9pbnB1dF9jb250cm9sbGVyIEAgMjAgOworICBqaW5pdF9pbnZlcnNlX2RjdCBAIDIxIDsKKyAgamluaXRfbWFya2VyX3JlYWRlciBAIDIyIDsKKyAgamluaXRfbWFya2VyX3dyaXRlciBAIDIzIDsKKyAgamluaXRfbWFzdGVyX2RlY29tcHJlc3MgQCAyNCA7CisgIGppbml0X21lbW9yeV9tZ3IgQCAyNSA7CisgIGppbml0X21lcmdlZF91cHNhbXBsZXIgQCAyNiA7CisgIGppbml0X3BodWZmX2RlY29kZXIgQCAyNyA7CisgIGppbml0X3BodWZmX2VuY29kZXIgQCAyOCA7CisgIGppbml0X3Vwc2FtcGxlciBAIDI5IDsKKyAganBlZ19DcmVhdGVDb21wcmVzcyBAIDMwIDsKKyAganBlZ19DcmVhdGVEZWNvbXByZXNzIEAgMzEgOworICBqcGVnX2Fib3J0IEAgMzIgOworICBqcGVnX2Fib3J0X2NvbXByZXNzIEAgMzMgOworICBqcGVnX2Fib3J0X2RlY29tcHJlc3MgQCAzNCA7CisgIGpwZWdfYWRkX3F1YW50X3RhYmxlIEAgMzUgOworICBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgQCAzNiA7CisgIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUgQCAzNyA7CisgIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMgQCAzOCA7CisgIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBAIDM5IDsKKyAganBlZ19jb25zdW1lX2lucHV0IEAgNDAgOworICBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyBAIDQxIDsKKyAganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgQCA0MiA7CisgIGpwZWdfZGVmYXVsdF9xdGFibGVzIEAgNDMgOworICBqcGVnX2Rlc3Ryb3kgQCA0NCA7CisgIGpwZWdfZGVzdHJveV9jb21wcmVzcyBAIDQ1IDsKKyAganBlZ19kZXN0cm95X2RlY29tcHJlc3MgQCA0NiA7CisgIGpwZWdfZmRjdF9mbG9hdCBAIDQ3IDsKKyAganBlZ19mZGN0X2lmYXN0IEAgNDggOworICBqcGVnX2ZkY3RfaXNsb3cgQCA0OSA7CisgIGpwZWdfZmlsbF9iaXRfYnVmZmVyIEAgNTAgOworICBqcGVnX2ZpbmlzaF9jb21wcmVzcyBAIDUxIDsKKyAganBlZ19maW5pc2hfZGVjb21wcmVzcyBAIDUyIDsKKyAganBlZ19maW5pc2hfb3V0cHV0IEAgNTMgOworICBqcGVnX2ZyZWVfbGFyZ2UgQCA1NCA7CisgIGpwZWdfZnJlZV9zbWFsbCBAIDU1IDsKKyAganBlZ19nZW5fb3B0aW1hbF90YWJsZSBAIDU2IDsKKyAganBlZ19nZXRfbGFyZ2UgQCA1NyA7CisgIGpwZWdfZ2V0X3NtYWxsIEAgNTggOworICBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBAIDU5IDsKKyAganBlZ19odWZmX2RlY29kZSBAIDYwIDsKKyAganBlZ19pZGN0XzF4MSBAIDYxIDsKKyAganBlZ19pZGN0XzJ4MiBAIDYyIDsKKyAganBlZ19pZGN0XzR4NCBAIDYzIDsKKyAganBlZ19pZGN0X2Zsb2F0IEAgNjQgOworICBqcGVnX2lkY3RfaWZhc3QgQCA2NSA7CisgIGpwZWdfaWRjdF9pc2xvdyBAIDY2IDsKKyAganBlZ19pbnB1dF9jb21wbGV0ZSBAIDY3IDsKKyAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwgQCA2OCA7CisgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEAgNjkgOworICBqcGVnX21lbV9hdmFpbGFibGUgQCA3MCA7CisgIGpwZWdfbWVtX2luaXQgQCA3MSA7CisgIGpwZWdfbWVtX3Rlcm0gQCA3MiA7CisgIGpwZWdfbmV3X2NvbG9ybWFwIEAgNzMgOworICBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBAIDc0IDsKKyAganBlZ19xdWFsaXR5X3NjYWxpbmcgQCA3NSA7CisgIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgQCA3NiA7CisgIGpwZWdfcmVhZF9oZWFkZXIgQCA3NyA7CisgIGpwZWdfcmVhZF9yYXdfZGF0YSBAIDc4IDsKKyAganBlZ19yZWFkX3NjYW5saW5lcyBAIDc5IDsKKyAganBlZ19yZXN5bmNfdG9fcmVzdGFydCBAIDgwIDsKKyAganBlZ19zYXZlX21hcmtlcnMgQCA4MSA7CisgIGpwZWdfc2V0X2NvbG9yc3BhY2UgQCA4MiA7CisgIGpwZWdfc2V0X2RlZmF1bHRzIEAgODMgOworICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBAIDg0IDsKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBAIDg1IDsKKyAganBlZ19zZXRfcXVhbGl0eSBAIDg2IDsKKyAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gQCA4NyA7CisgIGpwZWdfc3RhcnRfY29tcHJlc3MgQCA4OCA7CisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBAIDg5IDsKKyAganBlZ19zdGFydF9vdXRwdXQgQCA5MCA7CisgIGpwZWdfc3RkX2Vycm9yIEAgOTEgOworICBqcGVnX3N0ZGlvX2Rlc3QgQCA5MiA7CisgIGpwZWdfc3RkaW9fc3JjIEAgOTMgOworICBqcGVnX3N1cHByZXNzX3RhYmxlcyBAIDk0IDsKKyAganBlZ193cml0ZV9jb2VmZmljaWVudHMgQCA5NSA7CisgIGpwZWdfd3JpdGVfbV9ieXRlIEAgOTYgOworICBqcGVnX3dyaXRlX21faGVhZGVyIEAgOTcgOworICBqcGVnX3dyaXRlX21hcmtlciBAIDk4IDsKKyAganBlZ193cml0ZV9yYXdfZGF0YSBAIDk5IDsKKyAganBlZ193cml0ZV9zY2FubGluZXMgQCAxMDAgOworICBqcGVnX3dyaXRlX3RhYmxlcyBAIDEwMSA7CisgIGpyb3VuZF91cCBAIDEwMiA7CisgIGp6ZXJvX2ZhciBAIDEwMyA7CisgIGpwZWdfc2tpcF9zY2FubGluZXMgQCAxMDQgOworICBqcGVnX2Nyb3Bfc2NhbmxpbmUgQCAxMDUgOworICBqcGVnX3JlYWRfaWNjX3Byb2ZpbGUgQCAxMDYgOworICBqcGVnX3dyaXRlX2ljY19wcm9maWxlIEAgMTA3IDsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dpbi9qcGVnOC5kZWYgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzguZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTMxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aW4vanBlZzguZGVmCkBAIC0wLDAgKzEsMTExIEBACitFWFBPUlRTCisgIGpjb3B5X2Jsb2NrX3JvdyBAIDEgOworICBqY29weV9zYW1wbGVfcm93cyBAIDIgOworICBqZGl2X3JvdW5kX3VwIEAgMyA7CisgIGppbml0XzFwYXNzX3F1YW50aXplciBAIDQgOworICBqaW5pdF8ycGFzc19xdWFudGl6ZXIgQCA1IDsKKyAgamluaXRfY19jb2VmX2NvbnRyb2xsZXIgQCA2IDsKKyAgamluaXRfY19tYWluX2NvbnRyb2xsZXIgQCA3IDsKKyAgamluaXRfY19tYXN0ZXJfY29udHJvbCBAIDggOworICBqaW5pdF9jX3ByZXBfY29udHJvbGxlciBAIDkgOworICBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIgQCAxMCA7CisgIGppbml0X2NvbG9yX2RlY29udmVydGVyIEAgMTEgOworICBqaW5pdF9jb21wcmVzc19tYXN0ZXIgQCAxMiA7CisgIGppbml0X2RfY29lZl9jb250cm9sbGVyIEAgMTMgOworICBqaW5pdF9kX21haW5fY29udHJvbGxlciBAIDE0IDsKKyAgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgQCAxNSA7CisgIGppbml0X2Rvd25zYW1wbGVyIEAgMTYgOworICBqaW5pdF9mb3J3YXJkX2RjdCBAIDE3IDsKKyAgamluaXRfaHVmZl9kZWNvZGVyIEAgMTggOworICBqaW5pdF9odWZmX2VuY29kZXIgQCAxOSA7CisgIGppbml0X2lucHV0X2NvbnRyb2xsZXIgQCAyMCA7CisgIGppbml0X2ludmVyc2VfZGN0IEAgMjEgOworICBqaW5pdF9tYXJrZXJfcmVhZGVyIEAgMjIgOworICBqaW5pdF9tYXJrZXJfd3JpdGVyIEAgMjMgOworICBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyBAIDI0IDsKKyAgamluaXRfbWVtb3J5X21nciBAIDI1IDsKKyAgamluaXRfbWVyZ2VkX3Vwc2FtcGxlciBAIDI2IDsKKyAgamluaXRfcGh1ZmZfZGVjb2RlciBAIDI3IDsKKyAgamluaXRfcGh1ZmZfZW5jb2RlciBAIDI4IDsKKyAgamluaXRfdXBzYW1wbGVyIEAgMjkgOworICBqcGVnX0NyZWF0ZUNvbXByZXNzIEAgMzAgOworICBqcGVnX0NyZWF0ZURlY29tcHJlc3MgQCAzMSA7CisgIGpwZWdfYWJvcnQgQCAzMiA7CisgIGpwZWdfYWJvcnRfY29tcHJlc3MgQCAzMyA7CisgIGpwZWdfYWJvcnRfZGVjb21wcmVzcyBAIDM0IDsKKyAganBlZ19hZGRfcXVhbnRfdGFibGUgQCAzNSA7CisgIGpwZWdfYWxsb2NfaHVmZl90YWJsZSBAIDM2IDsKKyAganBlZ19hbGxvY19xdWFudF90YWJsZSBAIDM3IDsKKyAganBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucyBAIDM4IDsKKyAganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIEAgMzkgOworICBqcGVnX2NvbnN1bWVfaW5wdXQgQCA0MCA7CisgIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzIEAgNDEgOworICBqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMgQCA0MiA7CisgIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIEAgNDMgOworICBqcGVnX2RlZmF1bHRfcXRhYmxlcyBAIDQ0IDsKKyAganBlZ19kZXN0cm95IEAgNDUgOworICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MgQCA0NiA7CisgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEAgNDcgOworICBqcGVnX2ZkY3RfZmxvYXQgQCA0OCA7CisgIGpwZWdfZmRjdF9pZmFzdCBAIDQ5IDsKKyAganBlZ19mZGN0X2lzbG93IEAgNTAgOworICBqcGVnX2ZpbGxfYml0X2J1ZmZlciBAIDUxIDsKKyAganBlZ19maW5pc2hfY29tcHJlc3MgQCA1MiA7CisgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MgQCA1MyA7CisgIGpwZWdfZmluaXNoX291dHB1dCBAIDU0IDsKKyAganBlZ19mcmVlX2xhcmdlIEAgNTUgOworICBqcGVnX2ZyZWVfc21hbGwgQCA1NiA7CisgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUgQCA1NyA7CisgIGpwZWdfZ2V0X2xhcmdlIEAgNTggOworICBqcGVnX2dldF9zbWFsbCBAIDU5IDsKKyAganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMgQCA2MCA7CisgIGpwZWdfaHVmZl9kZWNvZGUgQCA2MSA7CisgIGpwZWdfaWRjdF8xeDEgQCA2MiA7CisgIGpwZWdfaWRjdF8yeDIgQCA2MyA7CisgIGpwZWdfaWRjdF80eDQgQCA2NCA7CisgIGpwZWdfaWRjdF9mbG9hdCBAIDY1IDsKKyAganBlZ19pZGN0X2lmYXN0IEAgNjYgOworICBqcGVnX2lkY3RfaXNsb3cgQCA2NyA7CisgIGpwZWdfaW5wdXRfY29tcGxldGUgQCA2OCA7CisgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsIEAgNjkgOworICBqcGVnX21ha2VfZF9kZXJpdmVkX3RibCBAIDcwIDsKKyAganBlZ19tZW1fYXZhaWxhYmxlIEAgNzEgOworICBqcGVnX21lbV9kZXN0IEAgNzIgOworICBqcGVnX21lbV9pbml0IEAgNzMgOworICBqcGVnX21lbV9zcmMgQCA3NCA7CisgIGpwZWdfbWVtX3Rlcm0gQCA3NSA7CisgIGpwZWdfbmV3X2NvbG9ybWFwIEAgNzYgOworICBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBAIDc3IDsKKyAganBlZ19xdWFsaXR5X3NjYWxpbmcgQCA3OCA7CisgIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgQCA3OSA7CisgIGpwZWdfcmVhZF9oZWFkZXIgQCA4MCA7CisgIGpwZWdfcmVhZF9yYXdfZGF0YSBAIDgxIDsKKyAganBlZ19yZWFkX3NjYW5saW5lcyBAIDgyIDsKKyAganBlZ19yZXN5bmNfdG9fcmVzdGFydCBAIDgzIDsKKyAganBlZ19zYXZlX21hcmtlcnMgQCA4NCA7CisgIGpwZWdfc2V0X2NvbG9yc3BhY2UgQCA4NSA7CisgIGpwZWdfc2V0X2RlZmF1bHRzIEAgODYgOworICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBAIDg3IDsKKyAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBAIDg4IDsKKyAganBlZ19zZXRfcXVhbGl0eSBAIDg5IDsKKyAganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gQCA5MCA7CisgIGpwZWdfc3RhcnRfY29tcHJlc3MgQCA5MSA7CisgIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBAIDkyIDsKKyAganBlZ19zdGFydF9vdXRwdXQgQCA5MyA7CisgIGpwZWdfc3RkX2Vycm9yIEAgOTQgOworICBqcGVnX3N0ZGlvX2Rlc3QgQCA5NSA7CisgIGpwZWdfc3RkaW9fc3JjIEAgOTYgOworICBqcGVnX3N1cHByZXNzX3RhYmxlcyBAIDk3IDsKKyAganBlZ193cml0ZV9jb2VmZmljaWVudHMgQCA5OCA7CisgIGpwZWdfd3JpdGVfbV9ieXRlIEAgOTkgOworICBqcGVnX3dyaXRlX21faGVhZGVyIEAgMTAwIDsKKyAganBlZ193cml0ZV9tYXJrZXIgQCAxMDEgOworICBqcGVnX3dyaXRlX3Jhd19kYXRhIEAgMTAyIDsKKyAganBlZ193cml0ZV9zY2FubGluZXMgQCAxMDMgOworICBqcGVnX3dyaXRlX3RhYmxlcyBAIDEwNCA7CisgIGpyb3VuZF91cCBAIDEwNSA7CisgIGp6ZXJvX2ZhciBAIDEwNiA7CisgIGpwZWdfc2tpcF9zY2FubGluZXMgQCAxMDcgOworICBqcGVnX2Nyb3Bfc2NhbmxpbmUgQCAxMDggOworICBqcGVnX3JlYWRfaWNjX3Byb2ZpbGUgQCAxMDkgOworICBqcGVnX3dyaXRlX2ljY19wcm9maWxlIEAgMTEwIDsKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dpemFyZC50eHQgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aXphcmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTcyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93aXphcmQudHh0CkBAIC0wLDAgKzEsMjExIEBACitBZHZhbmNlZCB1c2FnZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgSlBFRyBzb2Z0d2FyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyBjanBlZydzICJzd2l0Y2hlcyBmb3Igd2l6YXJkcyIuCisKK1RoZSAid2l6YXJkIiBzd2l0Y2hlcyBhcmUgaW50ZW5kZWQgZm9yIGV4cGVyaW1lbnRhdGlvbiB3aXRoIEpQRUcgYnkgcGVyc29ucword2hvIGFyZSByZWFzb25hYmx5IGtub3dsZWRnZWFibGUgYWJvdXQgdGhlIEpQRUcgc3RhbmRhcmQuICBJZiB5b3UgZG9uJ3Qga25vdword2hhdCB5b3UgYXJlIGRvaW5nLCBET04nVCBVU0UgVEhFU0UgU1dJVENIRVMuICBZb3UnbGwgbGlrZWx5IHByb2R1Y2UgZmlsZXMKK3dpdGggd29yc2UgaW1hZ2UgcXVhbGl0eSBhbmQvb3IgcG9vcmVyIGNvbXByZXNzaW9uIHRoYW4geW91J2QgZ2V0IGZyb20gdGhlCitkZWZhdWx0IHNldHRpbmdzLiAgRnVydGhlcm1vcmUsIHRoZXNlIHN3aXRjaGVzIG11c3QgYmUgdXNlZCB3aXRoIGNhdXRpb24KK3doZW4gbWFraW5nIGZpbGVzIGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSwgYmVjYXVzZSBub3QgYWxsIEpQRUcgZGVjb2RlcnMKK3dpbGwgc3VwcG9ydCB1bnVzdWFsIEpQRUcgcGFyYW1ldGVyIHNldHRpbmdzLgorCisKK1F1YW50aXphdGlvbiBUYWJsZSBBZGp1c3RtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPcmRpbmFyaWx5LCBjanBlZyBzdGFydHMgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHRhYmxlcyAodGhlIHNhbWUgb25lcyBnaXZlbgorYXMgZXhhbXBsZXMgaW4gdGhlIEpQRUcgc3RhbmRhcmQpIGFuZCBzY2FsZXMgdGhlbSB1cCBvciBkb3duIGFjY29yZGluZyB0bwordGhlIC1xdWFsaXR5IHNldHRpbmcuICBUaGUgZGV0YWlscyBvZiB0aGUgc2NhbGluZyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluCitqY3BhcmFtLmMuICBBdCB2ZXJ5IGxvdyBxdWFsaXR5IHNldHRpbmdzLCBzb21lIHF1YW50aXphdGlvbiB0YWJsZSBlbnRyaWVzCitjYW4gZ2V0IHNjYWxlZCB1cCB0byB2YWx1ZXMgZXhjZWVkaW5nIDI1NS4gIEFsdGhvdWdoIDItYnl0ZSBxdWFudGl6YXRpb24KK3ZhbHVlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBJSkcgc29mdHdhcmUsIHRoaXMgZmVhdHVyZSBpcyBub3QgaW4gYmFzZWxpbmUKK0pQRUcgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGltcGxlbWVudGF0aW9ucy4gIElmIHlvdSBuZWVkIHRvIGVuc3VyZQord2lkZSBjb21wYXRpYmlsaXR5IG9mIGxvdy1xdWFsaXR5IGZpbGVzLCB5b3UgY2FuIGNvbnN0cmFpbiB0aGUgc2NhbGVkCitxdWFudGl6YXRpb24gdmFsdWVzIHRvIG5vIG1vcmUgdGhhbiAyNTUgYnkgZ2l2aW5nIHRoZSAtYmFzZWxpbmUgc3dpdGNoLgorTm90ZSB0aGF0IHVzZSBvZiAtYmFzZWxpbmUgd2lsbCByZXN1bHQgaW4gcG9vcmVyIHF1YWxpdHkgZm9yIHRoZSBzYW1lIGZpbGUKK3NpemUsIHNpbmNlIG1vcmUgYml0cyB0aGFuIG5lY2Vzc2FyeSBhcmUgZXhwZW5kZWQgb24gaGlnaGVyIEFDIGNvZWZmaWNpZW50cy4KKworWW91IGNhbiBzdWJzdGl0dXRlIGEgZGlmZmVyZW50IHNldCBvZiBxdWFudGl6YXRpb24gdmFsdWVzIGJ5IHVzaW5nIHRoZQorLXF0YWJsZXMgc3dpdGNoOgorCisgICAgICAgIC1xdGFibGVzIGZpbGUgICBVc2UgdGhlIHF1YW50aXphdGlvbiB0YWJsZXMgZ2l2ZW4gaW4gdGhlIG5hbWVkIGZpbGUuCisKK1RoZSBzcGVjaWZpZWQgZmlsZSBzaG91bGQgYmUgYSB0ZXh0IGZpbGUgY29udGFpbmluZyBkZWNpbWFsIHF1YW50aXphdGlvbgordmFsdWVzLiAgVGhlIGZpbGUgc2hvdWxkIGNvbnRhaW4gb25lIHRvIGZvdXIgdGFibGVzLCBlYWNoIG9mIDY0IGVsZW1lbnRzLgorVGhlIHRhYmxlcyBhcmUgaW1wbGljaXRseSBudW1iZXJlZCAwLDEsZXRjLiBpbiBvcmRlciBvZiBhcHBlYXJhbmNlLiAgVGFibGUKK2VudHJpZXMgYXBwZWFyIGluIG5vcm1hbCBhcnJheSBvcmRlciAoTk9UIGluIHRoZSB6aWd6YWcgb3JkZXIgaW4gd2hpY2ggdGhleQord2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpQRUcgZmlsZSkuCisKK1F1YW50aXphdGlvbiB0YWJsZSBmaWxlcyBhcmUgZnJlZSBmb3JtYXQsIGluIHRoYXQgYXJiaXRyYXJ5IHdoaXRlc3BhY2UgY2FuCithcHBlYXIgYmV0d2VlbiBudW1iZXJzLiAgQWxzbywgY29tbWVudHMgY2FuIGJlIGluY2x1ZGVkOiBhIGNvbW1lbnQgc3RhcnRzCit3aXRoICcjJyBhbmQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgSGVyZSBpcyBhbiBleGFtcGxlIGZpbGUgdGhhdAorZHVwbGljYXRlcyB0aGUgZGVmYXVsdCBxdWFudGl6YXRpb24gdGFibGVzOgorCisgICAgICAgICMgUXVhbnRpemF0aW9uIHRhYmxlcyBnaXZlbiBpbiBKUEVHIHNwZWMsIHNlY3Rpb24gSy4xCisKKyAgICAgICAgIyBUaGlzIGlzIHRhYmxlIDAgKHRoZSBsdW1pbmFuY2UgdGFibGUpOgorICAgICAgICAgIDE2ICAxMSAgMTAgIDE2ICAyNCAgNDAgIDUxICA2MQorICAgICAgICAgIDEyICAxMiAgMTQgIDE5ICAyNiAgNTggIDYwICA1NQorICAgICAgICAgIDE0ICAxMyAgMTYgIDI0ICA0MCAgNTcgIDY5ICA1NgorICAgICAgICAgIDE0ICAxNyAgMjIgIDI5ICA1MSAgODcgIDgwICA2MgorICAgICAgICAgIDE4ICAyMiAgMzcgIDU2ICA2OCAxMDkgMTAzICA3NworICAgICAgICAgIDI0ICAzNSAgNTUgIDY0ICA4MSAxMDQgMTEzICA5MgorICAgICAgICAgIDQ5ICA2NCAgNzggIDg3IDEwMyAxMjEgMTIwIDEwMQorICAgICAgICAgIDcyICA5MiAgOTUgIDk4IDExMiAxMDAgMTAzICA5OQorCisgICAgICAgICMgVGhpcyBpcyB0YWJsZSAxICh0aGUgY2hyb21pbmFuY2UgdGFibGUpOgorICAgICAgICAgIDE3ICAxOCAgMjQgIDQ3ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDE4ICAyMSAgMjYgIDY2ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDI0ICAyNiAgNTYgIDk5ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDQ3ICA2NiAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQorCitJZiB0aGUgLXF0YWJsZXMgc3dpdGNoIGlzIHVzZWQgd2l0aG91dCAtcXVhbGl0eSwgdGhlbiB0aGUgc3BlY2lmaWVkIHRhYmxlcworYXJlIHVzZWQgZXhhY3RseSBhcy1pcy4gIElmIGJvdGggLXF0YWJsZXMgYW5kIC1xdWFsaXR5IGFyZSB1c2VkLCB0aGVuIHRoZQordGFibGVzIHRha2VuIGZyb20gdGhlIGZpbGUgYXJlIHNjYWxlZCBpbiB0aGUgc2FtZSBmYXNoaW9uIHRoYXQgdGhlIGRlZmF1bHQKK3RhYmxlcyB3b3VsZCBiZSBzY2FsZWQgZm9yIHRoYXQgcXVhbGl0eSBzZXR0aW5nLiAgSWYgLWJhc2VsaW5lIGFwcGVhcnMsIHRoZW4KK3RoZSBxdWFudGl6YXRpb24gdmFsdWVzIGFyZSBjb25zdHJhaW5lZCB0byB0aGUgcmFuZ2UgMS0yNTUuCisKK0J5IGRlZmF1bHQsIGNqcGVnIHdpbGwgdXNlIHF1YW50aXphdGlvbiB0YWJsZSAwIGZvciBsdW1pbmFuY2UgY29tcG9uZW50cyBhbmQKK3RhYmxlIDEgZm9yIGNocm9taW5hbmNlIGNvbXBvbmVudHMuICBUbyBvdmVycmlkZSB0aGlzIGNob2ljZSwgdXNlIHRoZSAtcXNsb3RzCitzd2l0Y2g6CisKKyAgICAgICAgLXFzbG90cyBOWywuLi5dICAgICAgICAgU2VsZWN0IHdoaWNoIHF1YW50aXphdGlvbiB0YWJsZSB0byB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggY29sb3IgY29tcG9uZW50LgorCitUaGUgLXFzbG90cyBzd2l0Y2ggc3BlY2lmaWVzIGEgcXVhbnRpemF0aW9uIHRhYmxlIG51bWJlciBmb3IgZWFjaCBjb2xvcgorY29tcG9uZW50LCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNvbXBvbmVudHMgYXBwZWFyIGluIHRoZSBKUEVHIFNPRiBtYXJrZXIuCitGb3IgZXhhbXBsZSwgdG8gY3JlYXRlIGEgc2VwYXJhdGUgdGFibGUgZm9yIGVhY2ggb2YgWSxDYixDciwgeW91IGNvdWxkCitwcm92aWRlIGEgLXF0YWJsZXMgZmlsZSB0aGF0IGRlZmluZXMgdGhyZWUgcXVhbnRpemF0aW9uIHRhYmxlcyBhbmQgc2F5CisiLXFzbG90cyAwLDEsMiIuICBJZiAtcXNsb3RzIGdpdmVzIGZld2VyIHRhYmxlIG51bWJlcnMgdGhhbiB0aGVyZSBhcmUgY29sb3IKK2NvbXBvbmVudHMsIHRoZW4gdGhlIGxhc3QgdGFibGUgbnVtYmVyIGlzIHJlcGVhdGVkIGFzIG5lY2Vzc2FyeS4KKworCitTYW1wbGluZyBGYWN0b3IgQWRqdXN0bWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgY2pwZWcgdXNlcyAyOjEgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZG93bnNhbXBsaW5nIHdoZW4KK2NvbXByZXNzaW5nIFlDYkNyIGRhdGEsIGFuZCBubyBkb3duc2FtcGxpbmcgZm9yIGFsbCBvdGhlciBjb2xvciBzcGFjZXMuCitZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCB3aXRoIHRoZSAtc2FtcGxlIHN3aXRjaDoKKworICAgICAgICAtc2FtcGxlIEh4VlssLi4uXSAgICAgICBTZXQgSlBFRyBzYW1wbGluZyBmYWN0b3JzIGZvciBlYWNoIGNvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4KKworVGhlIC1zYW1wbGUgc3dpdGNoIHNwZWNpZmllcyB0aGUgSlBFRyBzYW1wbGluZyBmYWN0b3JzIGZvciBlYWNoIGNvbG9yCitjb21wb25lbnQsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgSlBFRyBTT0YgbWFya2VyLgorSWYgeW91IHNwZWNpZnkgZmV3ZXIgSHhWIHBhaXJzIHRoYW4gdGhlcmUgYXJlIGNvbXBvbmVudHMsIHRoZSByZW1haW5pbmcKK2NvbXBvbmVudHMgYXJlIHNldCB0byAxeDEgc2FtcGxpbmcuICBGb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgWUNiQ3Igc2V0dGluZworaXMgZXF1aXZhbGVudCB0byAiLXNhbXBsZSAyeDIsMXgxLDF4MSIsIHdoaWNoIGNhbiBiZSBhYmJyZXZpYXRlZCB0bworIi1zYW1wbGUgMngyIi4KKworVGhlcmUgYXJlIHN0aWxsIHNvbWUgSlBFRyBkZWNvZGVycyBpbiBleGlzdGVuY2UgdGhhdCBzdXBwb3J0IG9ubHkgMngxCitzYW1wbGluZyAoYWxzbyBjYWxsZWQgNDoyOjIgc2FtcGxpbmcpLiAgQ29tcGF0aWJpbGl0eSB3aXRoIHN1Y2ggZGVjb2RlcnMgY2FuCitiZSBhY2hpZXZlZCBieSBzcGVjaWZ5aW5nICItc2FtcGxlIDJ4MSIuICBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MKK3JlYWxseSBuZWNlc3NhcnksIHNpbmNlIGl0IGluY3JlYXNlcyBmaWxlIHNpemUgYW5kIGVuY29kaW5nL2RlY29kaW5nIHRpbWUKK3dpdGggdmVyeSBsaXR0bGUgcXVhbGl0eSBnYWluLgorCisKK011bHRpcGxlIFNjYW4gLyBQcm9ncmVzc2lvbiBDb250cm9sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCBjanBlZyBlbWl0cyBhIHNpbmdsZS1zY2FuIHNlcXVlbnRpYWwgSlBFRyBmaWxlLiAgVGhlCistcHJvZ3Jlc3NpdmUgc3dpdGNoIGdlbmVyYXRlcyBhIHByb2dyZXNzaXZlIEpQRUcgZmlsZSB1c2luZyBhIGRlZmF1bHQgc2VyaWVzCitvZiBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzLiAgWW91IGNhbiBjcmVhdGUgbXVsdGlwbGUtc2NhbiBzZXF1ZW50aWFsIEpQRUcKK2ZpbGVzIG9yIHByb2dyZXNzaXZlIEpQRUcgZmlsZXMgd2l0aCBjdXN0b20gcHJvZ3Jlc3Npb24gcGFyYW1ldGVycyBieSB1c2luZwordGhlIC1zY2FucyBzd2l0Y2g6CisKKyAgICAgICAgLXNjYW5zIGZpbGUgICAgIFVzZSB0aGUgc2NhbiBzZXF1ZW5jZSBnaXZlbiBpbiB0aGUgbmFtZWQgZmlsZS4KKworVGhlIHNwZWNpZmllZCBmaWxlIHNob3VsZCBiZSBhIHRleHQgZmlsZSBjb250YWluaW5nIGEgInNjYW4gc2NyaXB0Ii4KK1RoZSBzY3JpcHQgc3BlY2lmaWVzIHRoZSBjb250ZW50cyBhbmQgb3JkZXJpbmcgb2YgdGhlIHNjYW5zIHRvIGJlIGVtaXR0ZWQuCitFYWNoIGVudHJ5IGluIHRoZSBzY3JpcHQgZGVmaW5lcyBvbmUgc2Nhbi4gIEEgc2NhbiBkZWZpbml0aW9uIHNwZWNpZmllcwordGhlIGNvbXBvbmVudHMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHNjYW4sIGFuZCBmb3IgcHJvZ3Jlc3NpdmUgSlBFRyBpdCBhbHNvCitzcGVjaWZpZXMgdGhlIHByb2dyZXNzaW9uIHBhcmFtZXRlcnMgU3MsU2UsQWgsQWwgZm9yIHRoZSBzY2FuLiAgU2NhbgorZGVmaW5pdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zICgnOycpLiAgQSBzZW1pY29sb24gYWZ0ZXIgdGhlIGxhc3QKK3NjYW4gZGVmaW5pdGlvbiBpcyBvcHRpb25hbC4KKworRWFjaCBzY2FuIGRlZmluaXRpb24gY29udGFpbnMgb25lIHRvIGZvdXIgY29tcG9uZW50IGluZGV4ZXMsIG9wdGlvbmFsbHkKK2ZvbGxvd2VkIGJ5IGEgY29sb24gKCc6JykgYW5kIHRoZSBmb3VyIHByb2dyZXNzaXZlLUpQRUcgcGFyYW1ldGVycy4gIFRoZQorY29tcG9uZW50IGluZGV4ZXMgZGVub3RlIHdoaWNoIGNvbG9yIGNvbXBvbmVudChzKSBhcmUgdG8gYmUgdHJhbnNtaXR0ZWQgaW4KK3RoZSBzY2FuLiAgQ29tcG9uZW50cyBhcmUgbnVtYmVyZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZQorSlBFRyBTT0YgbWFya2VyLCB3aXRoIHRoZSBmaXJzdCBjb21wb25lbnQgYmVpbmcgbnVtYmVyZWQgMC4gIChOb3RlIHRoYXQgdGhlc2UKK2luZGV4ZXMgYXJlIG5vdCB0aGUgImNvbXBvbmVudCBJRCIgY29kZXMgYXNzaWduZWQgdG8gdGhlIGNvbXBvbmVudHMsIGp1c3QKK3Bvc2l0aW9uYWwgaW5kZXhlcy4pCisKK1RoZSBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIHNjYW4gYXJlOgorICAgICAgICBTcyAgICAgIFppZ3phZyBpbmRleCBvZiBmaXJzdCBjb2VmZmljaWVudCBpbmNsdWRlZCBpbiBzY2FuCisgICAgICAgIFNlICAgICAgWmlnemFnIGluZGV4IG9mIGxhc3QgY29lZmZpY2llbnQgaW5jbHVkZWQgaW4gc2NhbgorICAgICAgICBBaCAgICAgIFplcm8gZm9yIGZpcnN0IHNjYW4gb2YgYSBjb2VmZmljaWVudCwgZWxzZSBBbCBvZiBwcmlvciBzY2FuCisgICAgICAgIEFsICAgICAgU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIGxvdyBiaXQgcG9zaXRpb24gZm9yIHNjYW4KK0lmIHRoZSBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzIGFyZSBvbWl0dGVkLCB0aGUgdmFsdWVzIDAsNjMsMCwwIGFyZSB1c2VkLAorcHJvZHVjaW5nIGEgc2VxdWVudGlhbCBKUEVHIGZpbGUuICBjanBlZyBhdXRvbWF0aWNhbGx5IGRldGVybWluZXMgd2hldGhlcgordGhlIHNjcmlwdCByZXByZXNlbnRzIGEgcHJvZ3Jlc3NpdmUgb3Igc2VxdWVudGlhbCBmaWxlLCBieSBvYnNlcnZpbmcgd2hldGhlcgorU3MgYW5kIFNlIHZhbHVlcyBvdGhlciB0aGFuIDAgYW5kIDYzIGFwcGVhci4gIChUaGUgLXByb2dyZXNzaXZlIHN3aXRjaCBpcworbm90IG5lZWRlZCB0byBzcGVjaWZ5IHRoaXM7IGluIGZhY3QsIGl0IGlzIGlnbm9yZWQgd2hlbiAtc2NhbnMgYXBwZWFycy4pCitUaGUgc2NhbiBzY3JpcHQgbXVzdCBtZWV0IHRoZSBKUEVHIHJlc3RyaWN0aW9ucyBvbiBwcm9ncmVzc2lvbiBzZXF1ZW5jZXMuCisoY2pwZWcgY2hlY2tzIHRoYXQgdGhlIHNwZWMncyByZXF1aXJlbWVudHMgYXJlIG9iZXllZC4pCisKK1NjYW4gc2NyaXB0IGZpbGVzIGFyZSBmcmVlIGZvcm1hdCwgaW4gdGhhdCBhcmJpdHJhcnkgd2hpdGVzcGFjZSBjYW4gYXBwZWFyCitiZXR3ZWVuIG51bWJlcnMgYW5kIGFyb3VuZCBwdW5jdHVhdGlvbi4gIEFsc28sIGNvbW1lbnRzIGNhbiBiZSBpbmNsdWRlZDogYQorY29tbWVudCBzdGFydHMgd2l0aCAnIycgYW5kIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gIEZvciBhZGRpdGlvbmFsCitsZWdpYmlsaXR5LCBjb21tYXMgb3IgZGFzaGVzIGNhbiBiZSBwbGFjZWQgYmV0d2VlbiB2YWx1ZXMuICAoQWN0dWFsbHksIGFueQorc2luZ2xlIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBvdGhlciB0aGFuICc6JyBvciAnOycgY2FuIGJlIGluc2VydGVkLikgIEZvcgorZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28gc2NhbiBkZWZpbml0aW9ucyBhcmUgZXF1aXZhbGVudDoKKyAgICAgICAgMCAxIDI6IDAgNjMgMCAwOworICAgICAgICAwLDEsMiA6IDAtNjMsIDAsMCA7CisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHNjYW4gc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGEgcGFydGlhbGx5IGludGVybGVhdmVkCitzZXF1ZW50aWFsIEpQRUcgZmlsZToKKworICAgICAgICAwOyAgICAgICAgICAgICAgICAgICAgICAjIFkgb25seSBpbiBmaXJzdCBzY2FuCisgICAgICAgIDEgMjsgICAgICAgICAgICAgICAgICAgICMgQ2IgYW5kIENyIGluIHNlY29uZCBzY2FuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHByb2dyZXNzaXZlIHNjYW4gc2NyaXB0IHVzaW5nIG9ubHkgc3BlY3RyYWwgc2VsZWN0aW9uCisobm8gc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKToKKworICAgICAgICAjIEludGVybGVhdmVkIERDIHNjYW4gZm9yIFksQ2IsQ3I6CisgICAgICAgIDAsMSwyOiAwLTAsICAgMCwgMCA7CisgICAgICAgICMgQUMgc2NhbnM6CisgICAgICAgIDA6ICAgICAxLTIsICAgMCwgMCA7ICAgICMgRmlyc3QgdHdvIFkgQUMgY29lZmZpY2llbnRzCisgICAgICAgIDA6ICAgICAzLTUsICAgMCwgMCA7ICAgICMgVGhyZWUgbW9yZQorICAgICAgICAxOiAgICAgMS02MywgIDAsIDAgOyAgICAjIEFsbCBBQyBjb2VmZmljaWVudHMgZm9yIENiCisgICAgICAgIDI6ICAgICAxLTYzLCAgMCwgMCA7ICAgICMgQWxsIEFDIGNvZWZmaWNpZW50cyBmb3IgQ3IKKyAgICAgICAgMDogICAgIDYtOSwgICAwLCAwIDsgICAgIyBNb3JlIFkgY29lZmZpY2llbnRzCisgICAgICAgIDA6ICAgICAxMC02MywgMCwgMCA7ICAgICMgUmVtYWluaW5nIFkgY29lZmZpY2llbnRzCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHN1Y2Nlc3NpdmUtYXBwcm94aW1hdGlvbiBzY3JpcHQuICBUaGlzIGlzIGVxdWl2YWxlbnQKK3RvIHRoZSBkZWZhdWx0IHNjcmlwdCB1c2VkIGJ5ICJjanBlZyAtcHJvZ3Jlc3NpdmUiIGZvciBZQ2JDciBpbWFnZXM6CisKKyAgICAgICAgIyBJbml0aWFsIERDIHNjYW4gZm9yIFksQ2IsQ3IgKGxvd2VzdCBiaXQgbm90IHNlbnQpCisgICAgICAgIDAsMSwyOiAwLTAsICAgMCwgMSA7CisgICAgICAgICMgRmlyc3QgQUMgc2Nhbjogc2VuZCBmaXJzdCA1IFkgQUMgY29lZmZpY2llbnRzLCBtaW51cyAyIGxvd2VzdCBiaXRzOgorICAgICAgICAwOiAgICAgMS01LCAgIDAsIDIgOworICAgICAgICAjIFNlbmQgYWxsIENyLENiIEFDIGNvZWZmaWNpZW50cywgbWludXMgbG93ZXN0IGJpdDoKKyAgICAgICAgIyAoY2hyb21hIGRhdGEgaXMgdXN1YWxseSB0b28gc21hbGwgdG8gYmUgd29ydGggc3ViZGl2aWRpbmcgZnVydGhlcjsKKyAgICAgICAgIyAgYnV0IG5vdGUgd2Ugc2VuZCBDciBmaXJzdCBzaW5jZSBleWUgaXMgbGVhc3Qgc2Vuc2l0aXZlIHRvIENiKQorICAgICAgICAyOiAgICAgMS02MywgIDAsIDEgOworICAgICAgICAxOiAgICAgMS02MywgIDAsIDEgOworICAgICAgICAjIFNlbmQgcmVtYWluaW5nIFkgQUMgY29lZmZpY2llbnRzLCBtaW51cyAyIGxvd2VzdCBiaXRzOgorICAgICAgICAwOiAgICAgNi02MywgIDAsIDIgOworICAgICAgICAjIFNlbmQgbmV4dC10by1sb3dlc3QgYml0IG9mIGFsbCBZIEFDIGNvZWZmaWNpZW50czoKKyAgICAgICAgMDogICAgIDEtNjMsICAyLCAxIDsKKyAgICAgICAgIyBBdCB0aGlzIHBvaW50IHdlJ3ZlIHNlbnQgYWxsIGJ1dCB0aGUgbG93ZXN0IGJpdCBvZiBhbGwgY29lZmZpY2llbnRzLgorICAgICAgICAjIFNlbmQgbG93ZXN0IGJpdCBvZiBEQyBjb2VmZmljaWVudHMKKyAgICAgICAgMCwxLDI6IDAtMCwgICAxLCAwIDsKKyAgICAgICAgIyBTZW5kIGxvd2VzdCBiaXQgb2YgQUMgY29lZmZpY2llbnRzCisgICAgICAgIDI6ICAgICAxLTYzLCAgMSwgMCA7CisgICAgICAgIDE6ICAgICAxLTYzLCAgMSwgMCA7CisgICAgICAgICMgWSBBQyBsb3dlc3QgYml0IHNjYW4gaXMgbGFzdDsgaXQncyB1c3VhbGx5IHRoZSBsYXJnZXN0IHNjYW4KKyAgICAgICAgMDogICAgIDEtNjMsICAxLCAwIDsKKworSXQgbWF5IGJlIHdvcnRoIHBvaW50aW5nIG91dCB0aGF0IHRoaXMgc2NyaXB0IGlzIHR1bmVkIGZvciBxdWFsaXR5IHNldHRpbmdzCitvZiBhcm91bmQgNTAgdG8gNzUuICBGb3IgbG93ZXIgcXVhbGl0eSBzZXR0aW5ncywgeW91J2QgcHJvYmFibHkgd2FudCB0byB1c2UKK2Egc2NyaXB0IHdpdGggZmV3ZXIgc3RhZ2VzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiAob3RoZXJ3aXNlIHRoZQoraW5pdGlhbCBzY2FucyB3aWxsIGJlIHJlYWxseSBiYWQpLiAgRm9yIGhpZ2hlciBxdWFsaXR5IHNldHRpbmdzLCB5b3UgbWlnaHQKK3dhbnQgdG8gdXNlIG1vcmUgc3RhZ2VzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiAoc28gdGhhdCB0aGUgaW5pdGlhbAorc2NhbnMgYXJlIG5vdCB0b28gbGFyZ2UpLgpkaWZmIC0tZ2l0IGEvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd3JibXAuYyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dyYm1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhNjRlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dyYm1wLmMKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiB3cmJtcC5jCisgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIExpbmFybyBMaW1pdGVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUsIDIwMTcsIEQuIFIuIENvbW1hbmRlci4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUuaWpnCisgKiBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byB3cml0ZSBvdXRwdXQgaW1hZ2VzIGluIE1pY3Jvc29mdCAiQk1QIgorICogZm9ybWF0IChNUyBXaW5kb3dzIDMueCBhbmQgT1MvMiAxLnggZmxhdm9ycykuCisgKiBFaXRoZXIgOC1iaXQgY29sb3JtYXBwZWQgb3IgMjQtYml0IGZ1bGwtY29sb3IgZm9ybWF0IGNhbiBiZSB3cml0dGVuLgorICogTm8gY29tcHJlc3Npb24gaXMgc3VwcG9ydGVkLgorICoKKyAqIFRoZXNlIHJvdXRpbmVzIG1heSBuZWVkIG1vZGlmaWNhdGlvbiBmb3Igbm9uLVVuaXggZW52aXJvbm1lbnRzIG9yCisgKiBzcGVjaWFsaXplZCBhcHBsaWNhdGlvbnMuICBBcyB0aGV5IHN0YW5kLCB0aGV5IGFzc3VtZSBvdXRwdXQgdG8KKyAqIGFuIG9yZGluYXJ5IHN0ZGlvIHN0cmVhbS4KKyAqCisgKiBUaGlzIGNvZGUgY29udHJpYnV0ZWQgYnkgSmFtZXMgQXJ0aHVyIEJvdWNoZXIuCisgKi8KKworI2luY2x1ZGUgImNteWsuaCIKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJqY29uZmlnaW50LmgiCisKKyNpZmRlZiBCTVBfU1VQUE9SVEVECisKKworLyoKKyAqIFRvIHN1cHBvcnQgMTItYml0IEpQRUcgZGF0YSwgd2UnZCBoYXZlIHRvIHNjYWxlIG91dHB1dCBkb3duIHRvIDggYml0cy4KKyAqIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFICE9IDgKKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOC1iaXQgSlNBTVBMRXMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworI2VuZGlmCisKKy8qCisgKiBTaW5jZSBCTVAgc3RvcmVzIHNjYW5saW5lcyBib3R0b20tdG8tdG9wLCB3ZSBoYXZlIHRvIGludmVydCB0aGUgaW1hZ2UKKyAqIGZyb20gSlBFRydzIHRvcC10by1ib3R0b20gb3JkZXIuICBUbyBkbyB0aGlzLCB3ZSBzYXZlIHRoZSBvdXRnb2luZyBkYXRhCisgKiBpbiBhIHZpcnR1YWwgYXJyYXkgZHVyaW5nIHB1dF9waXhlbF9yb3cgY2FsbHMsIHRoZW4gYWN0dWFsbHkgZW1pdCB0aGUKKyAqIEJNUCBmaWxlIGR1cmluZyBmaW5pc2hfb3V0cHV0LiAgVGhlIHZpcnR1YWwgYXJyYXkgY29udGFpbnMgb25lIEpTQU1QTEUgcGVyCisgKiBwaXhlbCBpZiB0aGUgb3V0cHV0IGlzIGdyYXlzY2FsZSBvciBjb2xvcm1hcHBlZCwgdGhyZWUgaWYgaXQgaXMgZnVsbCBjb2xvci4KKyAqLworCisvKiBQcml2YXRlIHZlcnNpb24gb2YgZGF0YSBkZXN0aW5hdGlvbiBvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgZGpwZWdfZGVzdF9zdHJ1Y3QgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgYm9vbGVhbiBpc19vczI7ICAgICAgICAgICAgICAgLyogc2F2ZXMgdGhlIE9TMiBmb3JtYXQgcmVxdWVzdCBmbGFnICovCisKKyAganZpcnRfc2FycmF5X3B0ciB3aG9sZV9pbWFnZTsgLyogbmVlZGVkIHRvIHJldmVyc2Ugcm93IG9yZGVyICovCisgIEpESU1FTlNJT04gZGF0YV93aWR0aDsgICAgICAgIC8qIEpTQU1QTEVzIHBlciByb3cgKi8KKyAgSkRJTUVOU0lPTiByb3dfd2lkdGg7ICAgICAgICAgLyogcGh5c2ljYWwgd2lkdGggb2Ygb25lIHJvdyBpbiB0aGUgQk1QIGZpbGUgKi8KKyAgaW50IHBhZF9ieXRlczsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgbmVlZGVkIHBlciByb3cgKi8KKyAgSkRJTUVOU0lPTiBjdXJfb3V0cHV0X3JvdzsgICAgLyogbmV4dCByb3cjIHRvIHdyaXRlIHRvIHZpcnR1YWwgYXJyYXkgKi8KKworICBib29sZWFuIHVzZV9pbnZlcnNpb25fYXJyYXk7ICAvKiBUUlVFID0gYnVmZmVyIHRoZSB3aG9sZSBpbWFnZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVkIHRvIGRpc2sgaW4gYm90dG9tLXVwIG9yZGVyLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSByb3dzIGZyb20gdGhlIGNhbGxpbmcgcHJvZ3JhbSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AtZG93biBvcmRlcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFID0gdGhlIGNhbGxpbmcgcHJvZ3JhbSB3aWxsIG1haW50YWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyBvd24gaW1hZ2UgYnVmZmVyIGFuZCB3cml0ZSB0aGUgcm93cyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20tdXAgb3JkZXIgKi8KKworICBKU0FNUExFICppb2J1ZmZlcjsgICAgICAgICAgICAvKiBJL08gYnVmZmVyICh1c2VkIHRvIGJ1ZmZlciBhIHNpbmdsZSByb3cgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzayBpZiB1c2VfaW52ZXJzaW9uX2FycmF5ID09IEZBTFNFKSAqLworfSBibXBfZGVzdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgYm1wX2Rlc3Rfc3RydWN0ICpibXBfZGVzdF9wdHI7CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK0xPQ0FMKHZvaWQpIHdyaXRlX2NvbG9ybWFwKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJtcF9kZXN0X3B0ciBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hcF9jb2xvcnMsIGludCBtYXBfZW50cnlfc2l6ZSk7CisKKworc3RhdGljIElOTElORSBib29sZWFuIGlzX2JpZ19lbmRpYW4odm9pZCkKK3sKKyAgaW50IHRlc3RfdmFsdWUgPSAxOworICBpZiAoKihjaGFyICopJnRlc3RfdmFsdWUgIT0gMSkKKyAgICByZXR1cm4gVFJVRTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisKKy8qCisgKiBXcml0ZSBzb21lIHBpeGVsIGRhdGEuCisgKiBJbiB0aGlzIG1vZHVsZSByb3dzX3N1cHBsaWVkIHdpbGwgYWx3YXlzIGJlIDEuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwdXRfcGl4ZWxfcm93cyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3Igd3JpdGluZyAyNC1iaXQgcGl4ZWxzICovCit7CisgIGJtcF9kZXN0X3B0ciBkZXN0ID0gKGJtcF9kZXN0X3B0cilkaW5mbzsKKyAgSlNBTVBBUlJBWSBpbWFnZV9wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBpbnQgcGFkOworCisgIGlmIChkZXN0LT51c2VfaW52ZXJzaW9uX2FycmF5KSB7CisgICAgLyogQWNjZXNzIG5leHQgcm93IGluIHZpcnR1YWwgYXJyYXkgKi8KKyAgICBpbWFnZV9wdHIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBkZXN0LT53aG9sZV9pbWFnZSwKKyAgICAgICBkZXN0LT5jdXJfb3V0cHV0X3JvdywgKEpESU1FTlNJT04pMSwgVFJVRSk7CisgICAgZGVzdC0+Y3VyX291dHB1dF9yb3crKzsKKyAgICBvdXRwdHIgPSBpbWFnZV9wdHJbMF07CisgIH0gZWxzZSB7CisgICAgb3V0cHRyID0gZGVzdC0+aW9idWZmZXI7CisgIH0KKworICAvKiBUcmFuc2ZlciBkYXRhLiAgTm90ZSBkZXN0aW5hdGlvbiB2YWx1ZXMgbXVzdCBiZSBpbiBCR1Igb3JkZXIKKyAgICogKGV2ZW4gdGhvdWdoIE1pY3Jvc29mdCdzIG93biBkb2N1bWVudHMgc2F5IHRoZSBvcHBvc2l0ZSkuCisgICAqLworICBpbnB0ciA9IGRlc3QtPnB1Yi5idWZmZXJbMF07CisKKyAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9CR1IpIHsKKyAgICBNRU1DT1BZKG91dHB0ciwgaW5wdHIsIGRlc3QtPnJvd193aWR0aCk7CisgICAgb3V0cHRyICs9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiAzOworICB9IGVsc2UgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQjU2NSkgeworICAgIGJvb2xlYW4gYmlnX2VuZGlhbiA9IGlzX2JpZ19lbmRpYW4oKTsKKyAgICB1bnNpZ25lZCBzaG9ydCAqaW5wdHIyID0gKHVuc2lnbmVkIHNob3J0ICopaW5wdHI7CisgICAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgaWYgKGJpZ19lbmRpYW4pIHsKKyAgICAgICAgb3V0cHRyWzBdID0gKCppbnB0cjIgPj4gNSkgJiAweEY4OworICAgICAgICBvdXRwdHJbMV0gPSAoKCppbnB0cjIgPDwgNSkgJiAweEUwKSB8ICgoKmlucHRyMiA+PiAxMSkgJiAweDFDKTsKKyAgICAgICAgb3V0cHRyWzJdID0gKmlucHRyMiAmIDB4Rjg7CisgICAgICB9IGVsc2UgeworICAgICAgICBvdXRwdHJbMF0gPSAoKmlucHRyMiA8PCAzKSAmIDB4Rjg7CisgICAgICAgIG91dHB0clsxXSA9ICgqaW5wdHIyID4+IDMpICYgMHhGQzsKKyAgICAgICAgb3V0cHRyWzJdID0gKCppbnB0cjIgPj4gOCkgJiAweEY4OworICAgICAgfQorICAgICAgb3V0cHRyICs9IDM7CisgICAgICBpbnB0cjIrKzsKKyAgICB9CisgIH0gZWxzZSBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICAgIC8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICAgIEpTQU1QTEUgYyA9ICppbnB0cisrLCBtID0gKmlucHRyKyssIHkgPSAqaW5wdHIrKywgayA9ICppbnB0cisrOworICAgICAgY215a190b19yZ2IoYywgbSwgeSwgaywgb3V0cHRyICsgMiwgb3V0cHRyICsgMSwgb3V0cHRyKTsKKyAgICAgIG91dHB0ciArPSAzOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZWdpc3RlciBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgZ2luZGV4ID0gcmdiX2dyZWVuW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICAgIHJlZ2lzdGVyIGludCBiaW5kZXggPSByZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKyAgICByZWdpc3RlciBpbnQgcHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworCisgICAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLworICAgICAgb3V0cHRyWzBdID0gaW5wdHJbYmluZGV4XTsKKyAgICAgIG91dHB0clsxXSA9IGlucHRyW2dpbmRleF07CisgICAgICBvdXRwdHJbMl0gPSBpbnB0cltyaW5kZXhdOworICAgICAgb3V0cHRyICs9IDM7ICBpbnB0ciArPSBwczsKKyAgICB9CisgIH0KKworICAvKiBaZXJvIG91dCB0aGUgcGFkIGJ5dGVzLiAqLworICBwYWQgPSBkZXN0LT5wYWRfYnl0ZXM7CisgIHdoaWxlICgtLXBhZCA+PSAwKQorICAgICpvdXRwdHIrKyA9IDA7CisKKyAgaWYgKCFkZXN0LT51c2VfaW52ZXJzaW9uX2FycmF5KQorICAgICh2b2lkKUpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBkZXN0LT5pb2J1ZmZlciwgZGVzdC0+cm93X3dpZHRoKTsKK30KKworTUVUSE9EREVGKHZvaWQpCitwdXRfZ3JheV9yb3dzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAorICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCisvKiBUaGlzIHZlcnNpb24gaXMgZm9yIGdyYXlzY2FsZSBPUiBxdWFudGl6ZWQgY29sb3Igb3V0cHV0ICovCit7CisgIGJtcF9kZXN0X3B0ciBkZXN0ID0gKGJtcF9kZXN0X3B0cilkaW5mbzsKKyAgSlNBTVBBUlJBWSBpbWFnZV9wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIGludCBwYWQ7CisKKyAgaWYgKGRlc3QtPnVzZV9pbnZlcnNpb25fYXJyYXkpIHsKKyAgICAvKiBBY2Nlc3MgbmV4dCByb3cgaW4gdmlydHVhbCBhcnJheSAqLworICAgIGltYWdlX3B0ciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIGRlc3QtPndob2xlX2ltYWdlLAorICAgICAgIGRlc3QtPmN1cl9vdXRwdXRfcm93LCAoSkRJTUVOU0lPTikxLCBUUlVFKTsKKyAgICBkZXN0LT5jdXJfb3V0cHV0X3JvdysrOworICAgIG91dHB0ciA9IGltYWdlX3B0clswXTsKKyAgfSBlbHNlIHsKKyAgICBvdXRwdHIgPSBkZXN0LT5pb2J1ZmZlcjsKKyAgfQorCisgIC8qIFRyYW5zZmVyIGRhdGEuICovCisgIGlucHRyID0gZGVzdC0+cHViLmJ1ZmZlclswXTsKKyAgTUVNQ09QWShvdXRwdHIsIGlucHRyLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsKKyAgb3V0cHRyICs9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisKKyAgLyogWmVybyBvdXQgdGhlIHBhZCBieXRlcy4gKi8KKyAgcGFkID0gZGVzdC0+cGFkX2J5dGVzOworICB3aGlsZSAoLS1wYWQgPj0gMCkKKyAgICAqb3V0cHRyKysgPSAwOworCisgIGlmICghZGVzdC0+dXNlX2ludmVyc2lvbl9hcnJheSkKKyAgICAodm9pZClKRldSSVRFKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSwgZGVzdC0+aW9idWZmZXIsIGRlc3QtPnJvd193aWR0aCk7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICoKKyAqIEhlcmUgaXMgd2hlcmUgd2UgcmVhbGx5IG91dHB1dCB0aGUgQk1QIGZpbGUuCisgKgorICogRmlyc3QsIHJvdXRpbmVzIHRvIHdyaXRlIHRoZSBXaW5kb3dzIGFuZCBPUy8yIHZhcmlhbnRzIG9mIHRoZSBmaWxlIGhlYWRlci4KKyAqLworCitMT0NBTCh2b2lkKQord3JpdGVfYm1wX2hlYWRlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBibXBfZGVzdF9wdHIgZGVzdCkKKy8qIFdyaXRlIGEgV2luZG93cy1zdHlsZSBCTVAgZmlsZSBoZWFkZXIsIGluY2x1ZGluZyBjb2xvcm1hcCBpZiBuZWVkZWQgKi8KK3sKKyAgY2hhciBibXBmaWxlaGVhZGVyWzE0XTsKKyAgY2hhciBibXBpbmZvaGVhZGVyWzQwXTsKKworI2RlZmluZSBQVVRfMkIoYXJyYXksIG9mZnNldCwgdmFsdWUpIFwKKyAgKGFycmF5W29mZnNldF0gPSAoY2hhcikoKHZhbHVlKSAmIDB4RkYpLCBcCisgICBhcnJheVtvZmZzZXQgKyAxXSA9IChjaGFyKSgoKHZhbHVlKSA+PiA4KSAmIDB4RkYpKQorI2RlZmluZSBQVVRfNEIoYXJyYXksIG9mZnNldCwgdmFsdWUpIFwKKyAgKGFycmF5W29mZnNldF0gPSAoY2hhcikoKHZhbHVlKSAmIDB4RkYpLCBcCisgICBhcnJheVtvZmZzZXQgKyAxXSA9IChjaGFyKSgoKHZhbHVlKSA+PiA4KSAmIDB4RkYpLCBcCisgICBhcnJheVtvZmZzZXQgKyAyXSA9IChjaGFyKSgoKHZhbHVlKSA+PiAxNikgJiAweEZGKSwgXAorICAgYXJyYXlbb2Zmc2V0ICsgM10gPSAoY2hhcikoKCh2YWx1ZSkgPj4gMjQpICYgMHhGRikpCisKKyAgbG9uZyBoZWFkZXJzaXplLCBiZlNpemU7CisgIGludCBiaXRzX3Blcl9waXhlbCwgY21hcF9lbnRyaWVzOworCisgIC8qIENvbXB1dGUgY29sb3JtYXAgc2l6ZSBhbmQgdG90YWwgZmlsZSBzaXplICovCisgIGlmIChJc0V4dFJHQihjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSkgeworICAgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKSB7CisgICAgICAvKiBDb2xvcm1hcHBlZCBSR0IgKi8KKyAgICAgIGJpdHNfcGVyX3BpeGVsID0gODsKKyAgICAgIGNtYXBfZW50cmllcyA9IDI1NjsKKyAgICB9IGVsc2UgeworICAgICAgLyogVW5xdWFudGl6ZWQsIGZ1bGwgY29sb3IgUkdCICovCisgICAgICBiaXRzX3Blcl9waXhlbCA9IDI0OworICAgICAgY21hcF9lbnRyaWVzID0gMDsKKyAgICB9CisgIH0gZWxzZSBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCNTY1IHx8CisgICAgICAgICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgIGJpdHNfcGVyX3BpeGVsID0gMjQ7CisgICAgY21hcF9lbnRyaWVzICAgPSAwOworICB9IGVsc2UgeworICAgIC8qIEdyYXlzY2FsZSBvdXRwdXQuICBXZSBuZWVkIHRvIGZha2UgYSAyNTYtZW50cnkgY29sb3JtYXAuICovCisgICAgYml0c19wZXJfcGl4ZWwgPSA4OworICAgIGNtYXBfZW50cmllcyA9IDI1NjsKKyAgfQorICAvKiBGaWxlIHNpemUgKi8KKyAgaGVhZGVyc2l6ZSA9IDE0ICsgNDAgKyBjbWFwX2VudHJpZXMgKiA0OyAvKiBIZWFkZXIgYW5kIGNvbG9ybWFwICovCisgIGJmU2l6ZSA9IGhlYWRlcnNpemUgKyAobG9uZylkZXN0LT5yb3dfd2lkdGggKiAobG9uZyljaW5mby0+b3V0cHV0X2hlaWdodDsKKworICAvKiBTZXQgdW51c2VkIGZpZWxkcyBvZiBoZWFkZXIgdG8gMCAqLworICBNRU1aRVJPKGJtcGZpbGVoZWFkZXIsIHNpemVvZihibXBmaWxlaGVhZGVyKSk7CisgIE1FTVpFUk8oYm1waW5mb2hlYWRlciwgc2l6ZW9mKGJtcGluZm9oZWFkZXIpKTsKKworICAvKiBGaWxsIHRoZSBmaWxlIGhlYWRlciAqLworICBibXBmaWxlaGVhZGVyWzBdID0gMHg0MjsgICAgICAvKiBmaXJzdCAyIGJ5dGVzIGFyZSBBU0NJSSAnQicsICdNJyAqLworICBibXBmaWxlaGVhZGVyWzFdID0gMHg0RDsKKyAgUFVUXzRCKGJtcGZpbGVoZWFkZXIsIDIsIGJmU2l6ZSk7IC8qIGJmU2l6ZSAqLworICAvKiB3ZSBsZWF2ZSBiZlJlc2VydmVkMSAmIGJmUmVzZXJ2ZWQyID0gMCAqLworICBQVVRfNEIoYm1wZmlsZWhlYWRlciwgMTAsIGhlYWRlcnNpemUpOyAvKiBiZk9mZkJpdHMgKi8KKworICAvKiBGaWxsIHRoZSBpbmZvIGhlYWRlciAoTWljcm9zb2Z0IGNhbGxzIHRoaXMgYSBCSVRNQVBJTkZPSEVBREVSKSAqLworICBQVVRfMkIoYm1waW5mb2hlYWRlciwgMCwgNDApOyAvKiBiaVNpemUgKi8KKyAgUFVUXzRCKGJtcGluZm9oZWFkZXIsIDQsIGNpbmZvLT5vdXRwdXRfd2lkdGgpOyAvKiBiaVdpZHRoICovCisgIFBVVF80QihibXBpbmZvaGVhZGVyLCA4LCBjaW5mby0+b3V0cHV0X2hlaWdodCk7IC8qIGJpSGVpZ2h0ICovCisgIFBVVF8yQihibXBpbmZvaGVhZGVyLCAxMiwgMSk7IC8qIGJpUGxhbmVzIC0gbXVzdCBiZSAxICovCisgIFBVVF8yQihibXBpbmZvaGVhZGVyLCAxNCwgYml0c19wZXJfcGl4ZWwpOyAvKiBiaUJpdENvdW50ICovCisgIC8qIHdlIGxlYXZlIGJpQ29tcHJlc3Npb24gPSAwLCBmb3Igbm9uZSAqLworICAvKiB3ZSBsZWF2ZSBiaVNpemVJbWFnZSA9IDA7IHRoaXMgaXMgY29ycmVjdCBmb3IgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgaWYgKGNpbmZvLT5kZW5zaXR5X3VuaXQgPT0gMikgeyAvKiBpZiBoYXZlIGRlbnNpdHkgaW4gZG90cy9jbSwgdGhlbiAqLworICAgIFBVVF80QihibXBpbmZvaGVhZGVyLCAyNCwgKGxvbmcpKGNpbmZvLT5YX2RlbnNpdHkgKiAxMDApKTsgLyogWFBlbHMvTSAqLworICAgIFBVVF80QihibXBpbmZvaGVhZGVyLCAyOCwgKGxvbmcpKGNpbmZvLT5ZX2RlbnNpdHkgKiAxMDApKTsgLyogWFBlbHMvTSAqLworICB9CisgIFBVVF8yQihibXBpbmZvaGVhZGVyLCAzMiwgY21hcF9lbnRyaWVzKTsgLyogYmlDbHJVc2VkICovCisgIC8qIHdlIGxlYXZlIGJpQ2xySW1wb3J0YW50ID0gMCAqLworCisgIGlmIChKRldSSVRFKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSwgYm1wZmlsZWhlYWRlciwgMTQpICE9IChzaXplX3QpMTQpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKKyAgaWYgKEpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBibXBpbmZvaGVhZGVyLCA0MCkgIT0gKHNpemVfdCk0MCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOworCisgIGlmIChjbWFwX2VudHJpZXMgPiAwKQorICAgIHdyaXRlX2NvbG9ybWFwKGNpbmZvLCBkZXN0LCBjbWFwX2VudHJpZXMsIDQpOworfQorCisKK0xPQ0FMKHZvaWQpCit3cml0ZV9vczJfaGVhZGVyKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJtcF9kZXN0X3B0ciBkZXN0KQorLyogV3JpdGUgYW4gT1MyLXN0eWxlIEJNUCBmaWxlIGhlYWRlciwgaW5jbHVkaW5nIGNvbG9ybWFwIGlmIG5lZWRlZCAqLworeworICBjaGFyIGJtcGZpbGVoZWFkZXJbMTRdOworICBjaGFyIGJtcGNvcmVoZWFkZXJbMTJdOworICBsb25nIGhlYWRlcnNpemUsIGJmU2l6ZTsKKyAgaW50IGJpdHNfcGVyX3BpeGVsLCBjbWFwX2VudHJpZXM7CisKKyAgLyogQ29tcHV0ZSBjb2xvcm1hcCBzaXplIGFuZCB0b3RhbCBmaWxlIHNpemUgKi8KKyAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQiB8fAorICAgICAgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPj0gSkNTX0VYVF9SR0IgJiYKKyAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlIDw9IEpDU19FWFRfQVJHQikpIHsKKyAgICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgeworICAgICAgLyogQ29sb3JtYXBwZWQgUkdCICovCisgICAgICBiaXRzX3Blcl9waXhlbCA9IDg7CisgICAgICBjbWFwX2VudHJpZXMgPSAyNTY7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIFVucXVhbnRpemVkLCBmdWxsIGNvbG9yIFJHQiAqLworICAgICAgYml0c19wZXJfcGl4ZWwgPSAyNDsKKyAgICAgIGNtYXBfZW50cmllcyA9IDA7CisgICAgfQorICB9IGVsc2UgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQjU2NSB8fAorICAgICAgICAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspIHsKKyAgICBiaXRzX3Blcl9waXhlbCA9IDI0OworICAgIGNtYXBfZW50cmllcyAgID0gMDsKKyAgfSBlbHNlIHsKKyAgICAvKiBHcmF5c2NhbGUgb3V0cHV0LiAgV2UgbmVlZCB0byBmYWtlIGEgMjU2LWVudHJ5IGNvbG9ybWFwLiAqLworICAgIGJpdHNfcGVyX3BpeGVsID0gODsKKyAgICBjbWFwX2VudHJpZXMgPSAyNTY7CisgIH0KKyAgLyogRmlsZSBzaXplICovCisgIGhlYWRlcnNpemUgPSAxNCArIDEyICsgY21hcF9lbnRyaWVzICogMzsgLyogSGVhZGVyIGFuZCBjb2xvcm1hcCAqLworICBiZlNpemUgPSBoZWFkZXJzaXplICsgKGxvbmcpZGVzdC0+cm93X3dpZHRoICogKGxvbmcpY2luZm8tPm91dHB1dF9oZWlnaHQ7CisKKyAgLyogU2V0IHVudXNlZCBmaWVsZHMgb2YgaGVhZGVyIHRvIDAgKi8KKyAgTUVNWkVSTyhibXBmaWxlaGVhZGVyLCBzaXplb2YoYm1wZmlsZWhlYWRlcikpOworICBNRU1aRVJPKGJtcGNvcmVoZWFkZXIsIHNpemVvZihibXBjb3JlaGVhZGVyKSk7CisKKyAgLyogRmlsbCB0aGUgZmlsZSBoZWFkZXIgKi8KKyAgYm1wZmlsZWhlYWRlclswXSA9IDB4NDI7ICAgICAgLyogZmlyc3QgMiBieXRlcyBhcmUgQVNDSUkgJ0InLCAnTScgKi8KKyAgYm1wZmlsZWhlYWRlclsxXSA9IDB4NEQ7CisgIFBVVF80QihibXBmaWxlaGVhZGVyLCAyLCBiZlNpemUpOyAvKiBiZlNpemUgKi8KKyAgLyogd2UgbGVhdmUgYmZSZXNlcnZlZDEgJiBiZlJlc2VydmVkMiA9IDAgKi8KKyAgUFVUXzRCKGJtcGZpbGVoZWFkZXIsIDEwLCBoZWFkZXJzaXplKTsgLyogYmZPZmZCaXRzICovCisKKyAgLyogRmlsbCB0aGUgaW5mbyBoZWFkZXIgKE1pY3Jvc29mdCBjYWxscyB0aGlzIGEgQklUTUFQQ09SRUhFQURFUikgKi8KKyAgUFVUXzJCKGJtcGNvcmVoZWFkZXIsIDAsIDEyKTsgLyogYmNTaXplICovCisgIFBVVF8yQihibXBjb3JlaGVhZGVyLCA0LCBjaW5mby0+b3V0cHV0X3dpZHRoKTsgLyogYmNXaWR0aCAqLworICBQVVRfMkIoYm1wY29yZWhlYWRlciwgNiwgY2luZm8tPm91dHB1dF9oZWlnaHQpOyAvKiBiY0hlaWdodCAqLworICBQVVRfMkIoYm1wY29yZWhlYWRlciwgOCwgMSk7ICAvKiBiY1BsYW5lcyAtIG11c3QgYmUgMSAqLworICBQVVRfMkIoYm1wY29yZWhlYWRlciwgMTAsIGJpdHNfcGVyX3BpeGVsKTsgLyogYmNCaXRDb3VudCAqLworCisgIGlmIChKRldSSVRFKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSwgYm1wZmlsZWhlYWRlciwgMTQpICE9IChzaXplX3QpMTQpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKKyAgaWYgKEpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBibXBjb3JlaGVhZGVyLCAxMikgIT0gKHNpemVfdCkxMikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOworCisgIGlmIChjbWFwX2VudHJpZXMgPiAwKQorICAgIHdyaXRlX2NvbG9ybWFwKGNpbmZvLCBkZXN0LCBjbWFwX2VudHJpZXMsIDMpOworfQorCisKKy8qCisgKiBXcml0ZSB0aGUgY29sb3JtYXAuCisgKiBXaW5kb3dzIHVzZXMgQkdSMCBtYXAgZW50cmllczsgT1MvMiB1c2VzIEJHUiBlbnRyaWVzLgorICovCisKK0xPQ0FMKHZvaWQpCit3cml0ZV9jb2xvcm1hcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBibXBfZGVzdF9wdHIgZGVzdCwgaW50IG1hcF9jb2xvcnMsCisgICAgICAgICAgICAgICBpbnQgbWFwX2VudHJ5X3NpemUpCit7CisgIEpTQU1QQVJSQVkgY29sb3JtYXAgPSBjaW5mby0+Y29sb3JtYXA7CisgIGludCBudW1fY29sb3JzID0gY2luZm8tPmFjdHVhbF9udW1iZXJfb2ZfY29sb3JzOworICBGSUxFICpvdXRmaWxlID0gZGVzdC0+cHViLm91dHB1dF9maWxlOworICBpbnQgaTsKKworICBpZiAoY29sb3JtYXAgIT0gTlVMTCkgeworICAgIGlmIChjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPT0gMykgeworICAgICAgLyogTm9ybWFsIGNhc2Ugd2l0aCBSR0IgY29sb3JtYXAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY29sb3JzOyBpKyspIHsKKyAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzJdW2ldKSwgb3V0ZmlsZSk7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsxXVtpXSksIG91dGZpbGUpOworICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY29sb3JtYXBbMF1baV0pLCBvdXRmaWxlKTsKKyAgICAgICAgaWYgKG1hcF9lbnRyeV9zaXplID09IDQpCisgICAgICAgICAgcHV0YygwLCBvdXRmaWxlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogR3JheXNjYWxlIGNvbG9ybWFwIChvbmx5IGhhcHBlbnMgd2l0aCBncmF5c2NhbGUgcXVhbnRpemF0aW9uKSAqLworICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jb2xvcnM7IGkrKykgeworICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY29sb3JtYXBbMF1baV0pLCBvdXRmaWxlKTsKKyAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzBdW2ldKSwgb3V0ZmlsZSk7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOworICAgICAgICBpZiAobWFwX2VudHJ5X3NpemUgPT0gNCkKKyAgICAgICAgICBwdXRjKDAsIG91dGZpbGUpOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBJZiBubyBjb2xvcm1hcCwgbXVzdCBiZSBncmF5c2NhbGUgZGF0YS4gIEdlbmVyYXRlIGEgbGluZWFyICJtYXAiLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgcHV0YyhpLCBvdXRmaWxlKTsKKyAgICAgIHB1dGMoaSwgb3V0ZmlsZSk7CisgICAgICBwdXRjKGksIG91dGZpbGUpOworICAgICAgaWYgKG1hcF9lbnRyeV9zaXplID09IDQpCisgICAgICAgIHB1dGMoMCwgb3V0ZmlsZSk7CisgICAgfQorICB9CisgIC8qIFBhZCBjb2xvcm1hcCB3aXRoIHplcm9zIHRvIGVuc3VyZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNvbG9ybWFwIGVudHJpZXMgKi8KKyAgaWYgKGkgPiBtYXBfY29sb3JzKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1RPT19NQU5ZX0NPTE9SUywgaSk7CisgIGZvciAoOyBpIDwgbWFwX2NvbG9yczsgaSsrKSB7CisgICAgcHV0YygwLCBvdXRmaWxlKTsKKyAgICBwdXRjKDAsIG91dGZpbGUpOworICAgIHB1dGMoMCwgb3V0ZmlsZSk7CisgICAgaWYgKG1hcF9lbnRyeV9zaXplID09IDQpCisgICAgICBwdXRjKDAsIG91dGZpbGUpOworICB9Cit9CisKKworLyoKKyAqIFN0YXJ0dXA6IHdyaXRlIHRoZSBmaWxlIGhlYWRlciB1bmxlc3MgdGhlIGludmVyc2lvbiBhcnJheSBpcyBiZWluZyB1c2VkLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfb3V0cHV0X2JtcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbykKK3sKKyAgYm1wX2Rlc3RfcHRyIGRlc3QgPSAoYm1wX2Rlc3RfcHRyKWRpbmZvOworCisgIGlmICghZGVzdC0+dXNlX2ludmVyc2lvbl9hcnJheSkgeworICAgIC8qIFdyaXRlIHRoZSBoZWFkZXIgYW5kIGNvbG9ybWFwICovCisgICAgaWYgKGRlc3QtPmlzX29zMikKKyAgICAgIHdyaXRlX29zMl9oZWFkZXIoY2luZm8sIGRlc3QpOworICAgIGVsc2UKKyAgICAgIHdyaXRlX2JtcF9oZWFkZXIoY2luZm8sIGRlc3QpOworICB9Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfb3V0cHV0X2JtcChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbykKK3sKKyAgYm1wX2Rlc3RfcHRyIGRlc3QgPSAoYm1wX2Rlc3RfcHRyKWRpbmZvOworICByZWdpc3RlciBGSUxFICpvdXRmaWxlID0gZGVzdC0+cHViLm91dHB1dF9maWxlOworICBKU0FNUEFSUkFZIGltYWdlX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgZGF0YV9wdHI7CisgIEpESU1FTlNJT04gcm93OworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzID0gKGNkX3Byb2dyZXNzX3B0ciljaW5mby0+cHJvZ3Jlc3M7CisKKyAgaWYgKGRlc3QtPnVzZV9pbnZlcnNpb25fYXJyYXkpIHsKKyAgICAvKiBXcml0ZSB0aGUgaGVhZGVyIGFuZCBjb2xvcm1hcCAqLworICAgIGlmIChkZXN0LT5pc19vczIpCisgICAgICB3cml0ZV9vczJfaGVhZGVyKGNpbmZvLCBkZXN0KTsKKyAgICBlbHNlCisgICAgICB3cml0ZV9ibXBfaGVhZGVyKGNpbmZvLCBkZXN0KTsKKworICAgIC8qIFdyaXRlIHRoZSBmaWxlIGJvZHkgZnJvbSBvdXIgdmlydHVhbCBhcnJheSAqLworICAgIGZvciAocm93ID0gY2luZm8tPm91dHB1dF9oZWlnaHQ7IHJvdyA+IDA7IHJvdy0tKSB7CisgICAgICBpZiAocHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgICAgICBwcm9ncmVzcy0+cHViLnBhc3NfY291bnRlciA9IChsb25nKShjaW5mby0+b3V0cHV0X2hlaWdodCAtIHJvdyk7CisgICAgICAgIHByb2dyZXNzLT5wdWIucGFzc19saW1pdCA9IChsb25nKWNpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgICAgICAoKnByb2dyZXNzLT5wdWIucHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpY2luZm8pOworICAgICAgfQorICAgICAgaW1hZ2VfcHRyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBkZXN0LT53aG9sZV9pbWFnZSwgcm93IC0gMSwgKEpESU1FTlNJT04pMSwKKyAgICAgICAgIEZBTFNFKTsKKyAgICAgIGRhdGFfcHRyID0gaW1hZ2VfcHRyWzBdOworICAgICAgZm9yIChjb2wgPSBkZXN0LT5yb3dfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRSgqZGF0YV9wdHIpLCBvdXRmaWxlKTsKKyAgICAgICAgZGF0YV9wdHIrKzsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHByb2dyZXNzICE9IE5VTEwpCisgICAgICBwcm9ncmVzcy0+Y29tcGxldGVkX2V4dHJhX3Bhc3NlcysrOworICB9CisKKyAgLyogTWFrZSBzdXJlIHdlIHdyb3RlIHRoZSBvdXRwdXQgZmlsZSBPSyAqLworICBmZmx1c2gob3V0ZmlsZSk7CisgIGlmIChmZXJyb3Iob3V0ZmlsZSkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKK30KKworCisvKgorICogVGhlIG1vZHVsZSBzZWxlY3Rpb24gcm91dGluZSBmb3IgQk1QIGZvcm1hdCBvdXRwdXQuCisgKi8KKworR0xPQkFMKGRqcGVnX2Rlc3RfcHRyKQoramluaXRfd3JpdGVfYm1wKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNfb3MyLAorICAgICAgICAgICAgICAgIGJvb2xlYW4gdXNlX2ludmVyc2lvbl9hcnJheSkKK3sKKyAgYm1wX2Rlc3RfcHRyIGRlc3Q7CisgIEpESU1FTlNJT04gcm93X3dpZHRoOworCisgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCwgZmlsbCBpbiBtZXRob2QgcG9pbnRlcnMgKi8KKyAgZGVzdCA9IChibXBfZGVzdF9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYm1wX2Rlc3Rfc3RydWN0KSk7CisgIGRlc3QtPnB1Yi5zdGFydF9vdXRwdXQgPSBzdGFydF9vdXRwdXRfYm1wOworICBkZXN0LT5wdWIuZmluaXNoX291dHB1dCA9IGZpbmlzaF9vdXRwdXRfYm1wOworICBkZXN0LT5wdWIuY2FsY19idWZmZXJfZGltZW5zaW9ucyA9IE5VTEw7CisgIGRlc3QtPmlzX29zMiA9IGlzX29zMjsKKworICBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKSB7CisgICAgZGVzdC0+cHViLnB1dF9waXhlbF9yb3dzID0gcHV0X2dyYXlfcm93czsKKyAgfSBlbHNlIGlmIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IgfHwKKyAgICAgICAgICAgICAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA+PSBKQ1NfRVhUX1JHQiAmJgorICAgICAgICAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlIDw9IEpDU19FWFRfQVJHQikpIHsKKyAgICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykKKyAgICAgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IHB1dF9ncmF5X3Jvd3M7CisgICAgZWxzZQorICAgICAgZGVzdC0+cHViLnB1dF9waXhlbF9yb3dzID0gcHV0X3BpeGVsX3Jvd3M7CisgIH0gZWxzZSBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCNTY1IHx8CisgICAgICAgICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykgeworICAgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IHB1dF9waXhlbF9yb3dzOworICB9IGVsc2UgeworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0NPTE9SU1BBQ0UpOworICB9CisKKyAgLyogQ2FsY3VsYXRlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIHNvIHdlIGNhbiBhbGxvY2F0ZSBzcGFjZSAqLworICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOworCisgIC8qIERldGVybWluZSB3aWR0aCBvZiByb3dzIGluIHRoZSBCTVAgZmlsZSAocGFkZGVkIHRvIDQtYnl0ZSBib3VuZGFyeSkuICovCisgIGlmIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0I1NjUpIHsKKyAgICByb3dfd2lkdGggPSBjaW5mby0+b3V0cHV0X3dpZHRoICogMjsKKyAgICBkZXN0LT5yb3dfd2lkdGggPSBkZXN0LT5kYXRhX3dpZHRoID0gY2luZm8tPm91dHB1dF93aWR0aCAqIDM7CisgICAgd2hpbGUgKChyb3dfd2lkdGggJiAzKSAhPSAwKSByb3dfd2lkdGgrKzsKKyAgfSBlbHNlIGlmICghY2luZm8tPnF1YW50aXplX2NvbG9ycyAmJgorICAgICAgICAgICAgIChJc0V4dFJHQihjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB8fAorICAgICAgICAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSkgeworICAgIHJvd193aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHM7CisgICAgZGVzdC0+cm93X3dpZHRoID0gZGVzdC0+ZGF0YV93aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiAzOworICB9IGVsc2UgeworICAgIHJvd193aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHM7CisgICAgZGVzdC0+cm93X3dpZHRoID0gZGVzdC0+ZGF0YV93aWR0aCA9IHJvd193aWR0aDsKKyAgfQorICB3aGlsZSAoKGRlc3QtPnJvd193aWR0aCAmIDMpICE9IDApIGRlc3QtPnJvd193aWR0aCsrOworICBkZXN0LT5wYWRfYnl0ZXMgPSAoaW50KShkZXN0LT5yb3dfd2lkdGggLSBkZXN0LT5kYXRhX3dpZHRoKTsKKworCisgIGlmICh1c2VfaW52ZXJzaW9uX2FycmF5KSB7CisgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGludmVyc2lvbiBhcnJheSwgcHJlcGFyZSBmb3Igd3JpdGUgcGFzcyAqLworICAgIGRlc3QtPndob2xlX2ltYWdlID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKKyAgICAgICBkZXN0LT5yb3dfd2lkdGgsIGNpbmZvLT5vdXRwdXRfaGVpZ2h0LCAoSkRJTUVOU0lPTikxKTsKKyAgICBkZXN0LT5jdXJfb3V0cHV0X3JvdyA9IDA7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MgPSAoY2RfcHJvZ3Jlc3NfcHRyKWNpbmZvLT5wcm9ncmVzczsKKyAgICAgIHByb2dyZXNzLT50b3RhbF9leHRyYV9wYXNzZXMrKzsgLyogY291bnQgZmlsZSBpbnB1dCBhcyBzZXBhcmF0ZSBwYXNzICovCisgICAgfQorICB9IGVsc2UgeworICAgIGRlc3QtPmlvYnVmZmVyID0gKEpTQU1QTEUgKikoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBkZXN0LT5yb3dfd2lkdGgpOworICB9CisgIGRlc3QtPnVzZV9pbnZlcnNpb25fYXJyYXkgPSB1c2VfaW52ZXJzaW9uX2FycmF5OworCisgIC8qIENyZWF0ZSBkZWNvbXByZXNzb3Igb3V0cHV0IGJ1ZmZlci4gKi8KKyAgZGVzdC0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwgcm93X3dpZHRoLCAoSkRJTUVOU0lPTikxKTsKKyAgZGVzdC0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOworCisgIHJldHVybiAoZGpwZWdfZGVzdF9wdHIpZGVzdDsKK30KKworI2VuZGlmIC8qIEJNUF9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dyZ2lmLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cmdpZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDRlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cmdpZi5jCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogd3JnaWYuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE3LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gd3JpdGUgb3V0cHV0IGltYWdlcyBpbiBHSUYgZm9ybWF0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9URTogdG8gYXZvaWQgZW50YW5nbGVtZW50cyB3aXRoIFVuaXN5cycgcGF0ZW50IG9uIExaVyBjb21wcmVzc2lvbiwgICAqCisgKiB0aGlzIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQgdG8gb3V0cHV0ICJ1bmNvbXByZXNzZWQgR0lGIiBmaWxlcy4gICAgICAgICoKKyAqIFRoZXJlIGlzIG5vIHRyYWNlIG9mIHRoZSBMWlcgYWxnb3JpdGhtIGluIHRoaXMgZmlsZS4gICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlc2Ugcm91dGluZXMgbWF5IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBub24tVW5peCBlbnZpcm9ubWVudHMgb3IKKyAqIHNwZWNpYWxpemVkIGFwcGxpY2F0aW9ucy4gIEFzIHRoZXkgc3RhbmQsIHRoZXkgYXNzdW1lIG91dHB1dCB0bworICogYW4gb3JkaW5hcnkgc3RkaW8gc3RyZWFtLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgaXMgbG9vc2VseSBiYXNlZCBvbiBwcG10b2dpZiBmcm9tIHRoZSBQQk1QTFVTIGRpc3RyaWJ1dGlvbgorICogb2YgRmViLiAxOTkxLiAgVGhhdCBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZToKKyAqICAgIEJhc2VkIG9uIEdJRkVOQ09ERSBieSBEYXZpZCBSb3dsZXkgPG1nYXJkaUB3YXRkc2N1LndhdGVybG9vLmVkdT4uCisgKiAgICBMZW1wZWwtWml2IGNvbXByZXNzaW9uIGJhc2VkIG9uICJjb21wcmVzcyIgYnkgU3BlbmNlciBXLiBUaG9tYXMgZXQgYWwuCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5ODkgYnkgSmVmIFBvc2thbnplci4KKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogICAgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICogICAgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqICAgIGRvY3VtZW50YXRpb24uICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yCisgKiAgICBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFdlIGFyZSBhbHNvIHJlcXVpcmVkIHRvIHN0YXRlIHRoYXQKKyAqICAgICJUaGUgR3JhcGhpY3MgSW50ZXJjaGFuZ2UgRm9ybWF0KGMpIGlzIHRoZSBDb3B5cmlnaHQgcHJvcGVydHkgb2YKKyAqICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiBHSUYoc20pIGlzIGEgU2VydmljZSBNYXJrIHByb3BlcnR5IG9mCisgKiAgICBDb21wdVNlcnZlIEluY29ycG9yYXRlZC4iCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworCisjaWZkZWYgR0lGX1NVUFBPUlRFRAorCisKKy8qIFByaXZhdGUgdmVyc2lvbiBvZiBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBqX2RlY29tcHJlc3NfcHRyIGNpbmZvOyAgICAgICAvKiBiYWNrIGxpbmsgc2F2ZXMgcGFzc2luZyBzZXBhcmF0ZSBwYXJtICovCisKKyAgLyogU3RhdGUgZm9yIHBhY2tpbmcgdmFyaWFibGUtd2lkdGggY29kZXMgaW50byBhIGJpdHN0cmVhbSAqLworICBpbnQgbl9iaXRzOyAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG51bWJlciBvZiBiaXRzL2NvZGUgKi8KKyAgaW50IG1heGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbWF4aW11bSBjb2RlLCBnaXZlbiBuX2JpdHMgKi8KKyAgbG9uZyBjdXJfYWNjdW07ICAgICAgICAgICAgICAgLyogaG9sZHMgYml0cyBub3QgeWV0IG91dHB1dCAqLworICBpbnQgY3VyX2JpdHM7ICAgICAgICAgICAgICAgICAvKiAjIG9mIGJpdHMgaW4gY3VyX2FjY3VtICovCisKKyAgLyogU3RhdGUgZm9yIEdJRiBjb2RlIGFzc2lnbm1lbnQgKi8KKyAgaW50IENsZWFyQ29kZTsgICAgICAgICAgICAgICAgLyogY2xlYXIgY29kZSAoZG9lc24ndCBjaGFuZ2UpICovCisgIGludCBFT0ZDb2RlOyAgICAgICAgICAgICAgICAgIC8qIEVPRiBjb2RlIChkaXR0bykgKi8KKyAgaW50IGNvZGVfY291bnRlcjsgICAgICAgICAgICAgLyogY291bnRzIG91dHB1dCBzeW1ib2xzICovCisKKyAgLyogR0lGIGRhdGEgcGFja2V0IGNvbnN0cnVjdGlvbiBidWZmZXIgKi8KKyAgaW50IGJ5dGVzaW5wa3Q7ICAgICAgICAgICAgICAgLyogIyBvZiBieXRlcyBpbiBjdXJyZW50IHBhY2tldCAqLworICBjaGFyIHBhY2tldGJ1ZlsyNTZdOyAgICAgICAgICAvKiB3b3Jrc3BhY2UgZm9yIGFjY3VtdWxhdGluZyBwYWNrZXQgKi8KKworfSBnaWZfZGVzdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZ2lmX2Rlc3Rfc3RydWN0ICpnaWZfZGVzdF9wdHI7CisKKy8qIExhcmdlc3QgdmFsdWUgdGhhdCB3aWxsIGZpdCBpbiBOIGJpdHMgKi8KKyNkZWZpbmUgTUFYQ09ERShuX2JpdHMpICAoKDEgPDwgKG5fYml0cykpIC0gMSkKKworCisvKgorICogUm91dGluZXMgdG8gcGFja2FnZSBmaW5pc2hlZCBkYXRhIGJ5dGVzIGludG8gR0lGIGRhdGEgYmxvY2tzLgorICogQSBkYXRhIGJsb2NrIGNvbnNpc3RzIG9mIGEgY291bnQgYnl0ZSAoMS4uMjU1KSBhbmQgdGhhdCBtYW55IGRhdGEgYnl0ZXMuCisgKi8KKworTE9DQUwodm9pZCkKK2ZsdXNoX3BhY2tldChnaWZfZGVzdF9wdHIgZGluZm8pCisvKiBmbHVzaCBhbnkgYWNjdW11bGF0ZWQgZGF0YSAqLworeworICBpZiAoZGluZm8tPmJ5dGVzaW5wa3QgPiAwKSB7ICAvKiBuZXZlciB3cml0ZSB6ZXJvLWxlbmd0aCBwYWNrZXQgKi8KKyAgICBkaW5mby0+cGFja2V0YnVmWzBdID0gKGNoYXIpZGluZm8tPmJ5dGVzaW5wa3QrKzsKKyAgICBpZiAoSkZXUklURShkaW5mby0+cHViLm91dHB1dF9maWxlLCBkaW5mby0+cGFja2V0YnVmLCBkaW5mby0+Ynl0ZXNpbnBrdCkgIT0KKyAgICAgICAgKHNpemVfdClkaW5mby0+Ynl0ZXNpbnBrdCkKKyAgICAgIEVSUkVYSVQoZGluZm8tPmNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOworICAgIGRpbmZvLT5ieXRlc2lucGt0ID0gMDsKKyAgfQorfQorCisKKy8qIEFkZCBhIGNoYXJhY3RlciB0byBjdXJyZW50IHBhY2tldDsgZmx1c2ggdG8gZGlzayBpZiBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgQ0hBUl9PVVQoZGluZm8sIGMpIHsgXAorICAoZGluZm8pLT5wYWNrZXRidWZbKysoZGluZm8pLT5ieXRlc2lucGt0XSA9IChjaGFyKShjKTsgXAorICBpZiAoKGRpbmZvKS0+Ynl0ZXNpbnBrdCA+PSAyNTUpIFwKKyAgICBmbHVzaF9wYWNrZXQoZGluZm8pOyBcCit9CisKKworLyogUm91dGluZSB0byBjb252ZXJ0IHZhcmlhYmxlLXdpZHRoIGNvZGVzIGludG8gYSBieXRlIHN0cmVhbSAqLworCitMT0NBTCh2b2lkKQorb3V0cHV0KGdpZl9kZXN0X3B0ciBkaW5mbywgaW50IGNvZGUpCisvKiBFbWl0IGEgY29kZSBvZiBuX2JpdHMgYml0cyAqLworLyogVXNlcyBjdXJfYWNjdW0gYW5kIGN1cl9iaXRzIHRvIHJlYmxvY2sgaW50byA4LWJpdCBieXRlcyAqLworeworICBkaW5mby0+Y3VyX2FjY3VtIHw9ICgobG9uZyljb2RlKSA8PCBkaW5mby0+Y3VyX2JpdHM7CisgIGRpbmZvLT5jdXJfYml0cyArPSBkaW5mby0+bl9iaXRzOworCisgIHdoaWxlIChkaW5mby0+Y3VyX2JpdHMgPj0gOCkgeworICAgIENIQVJfT1VUKGRpbmZvLCBkaW5mby0+Y3VyX2FjY3VtICYgMHhGRik7CisgICAgZGluZm8tPmN1cl9hY2N1bSA+Pj0gODsKKyAgICBkaW5mby0+Y3VyX2JpdHMgLT0gODsKKyAgfQorfQorCisKKy8qIFRoZSBwc2V1ZG8tY29tcHJlc3Npb24gYWxnb3JpdGhtLgorICoKKyAqIEluIHRoaXMgbW9kdWxlIHdlIHNpbXBseSBvdXRwdXQgZWFjaCBwaXhlbCB2YWx1ZSBhcyBhIHNlcGFyYXRlIHN5bWJvbDsKKyAqIHRodXMsIG5vIGNvbXByZXNzaW9uIG9jY3Vycy4gIEluIGZhY3QsIHRoZXJlIGlzIGV4cGFuc2lvbiBvZiBvbmUgYml0IHBlcgorICogcGl4ZWwsIGJlY2F1c2Ugd2UgdXNlIGEgc3ltYm9sIHdpZHRoIG9uZSBiaXQgd2lkZXIgdGhhbiB0aGUgcGl4ZWwgd2lkdGguCisgKgorICogR0lGIG9yZGluYXJpbHkgdXNlcyB2YXJpYWJsZS13aWR0aCBzeW1ib2xzLCBhbmQgdGhlIGRlY29kZXIgd2lsbCBleHBlY3QKKyAqIHRvIHJhdGNoZXQgdXAgdGhlIHN5bWJvbCB3aWR0aCBhZnRlciBhIGZpeGVkIG51bWJlciBvZiBzeW1ib2xzLgorICogVG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGFuZCBrZWVwIHRoZSBleHBhbnNpb24gcGVuYWx0eSBkb3duLCB3ZSBlbWl0IGEKKyAqIEdJRiBDbGVhciBjb2RlIHRvIHJlc2V0IHRoZSBkZWNvZGVyIGp1c3QgYmVmb3JlIHRoZSB3aWR0aCB3b3VsZCByYXRjaGV0IHVwLgorICogVGh1cywgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBvdXRwdXQgZmlsZSB3aWxsIGhhdmUgdGhlIHNhbWUgYml0IHdpZHRoLgorICogTm90ZSB0aGF0IGVtaXR0aW5nIHRoZSBDbGVhciBjb2RlcyBhdCB0aGUgcmlnaHQgdGltZXMgaXMgYSBtZXJlIG1hdHRlciBvZgorICogY291bnRpbmcgb3V0cHV0IHN5bWJvbHMgYW5kIGlzIGluIG5vIHdheSBkZXBlbmRlbnQgb24gdGhlIExaVyBwYXRlbnQuCisgKgorICogV2l0aCBhIHNtYWxsIGJhc2ljIHBpeGVsIHdpZHRoIChsb3cgY29sb3IgY291bnQpLCBDbGVhciBjb2RlcyB3aWxsIGJlCisgKiBuZWVkZWQgdmVyeSBmcmVxdWVudGx5LCBjYXVzaW5nIHRoZSBmaWxlIHRvIGV4cGFuZCBldmVuIG1vcmUuICBTbyB0aGlzCisgKiBzaW1wbGlzdGljIGFwcHJvYWNoIHdvdWxkbid0IHdvcmsgdG9vIHdlbGwgb24gYmlsZXZlbCBpbWFnZXMsIGZvciBleGFtcGxlLgorICogQnV0IGZvciBvdXRwdXQgb2YgSlBFRyBjb252ZXJzaW9ucyB0aGUgcGl4ZWwgd2lkdGggd2lsbCB1c3VhbGx5IGJlIDggYml0cworICogKDEyOSB0byAyNTYgY29sb3JzKSwgc28gdGhlIG92ZXJoZWFkIGFkZGVkIGJ5IENsZWFyIHN5bWJvbHMgaXMgb25seSBhYm91dAorICogb25lIHN5bWJvbCBpbiBldmVyeSAyNTYuCisgKi8KKworTE9DQUwodm9pZCkKK2NvbXByZXNzX2luaXQoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgaV9iaXRzKQorLyogSW5pdGlhbGl6ZSBwc2V1ZG8tY29tcHJlc3NvciAqLworeworICAvKiBpbml0IGFsbCB0aGUgc3RhdGUgdmFyaWFibGVzICovCisgIGRpbmZvLT5uX2JpdHMgPSBpX2JpdHM7CisgIGRpbmZvLT5tYXhjb2RlID0gTUFYQ09ERShkaW5mby0+bl9iaXRzKTsKKyAgZGluZm8tPkNsZWFyQ29kZSA9ICgxIDw8IChpX2JpdHMgLSAxKSk7CisgIGRpbmZvLT5FT0ZDb2RlID0gZGluZm8tPkNsZWFyQ29kZSArIDE7CisgIGRpbmZvLT5jb2RlX2NvdW50ZXIgPSBkaW5mby0+Q2xlYXJDb2RlICsgMjsKKyAgLyogaW5pdCBvdXRwdXQgYnVmZmVyaW5nIHZhcnMgKi8KKyAgZGluZm8tPmJ5dGVzaW5wa3QgPSAwOworICBkaW5mby0+Y3VyX2FjY3VtID0gMDsKKyAgZGluZm8tPmN1cl9iaXRzID0gMDsKKyAgLyogR0lGIHNwZWNpZmllcyBhbiBpbml0aWFsIENsZWFyIGNvZGUgKi8KKyAgb3V0cHV0KGRpbmZvLCBkaW5mby0+Q2xlYXJDb2RlKTsKK30KKworCitMT0NBTCh2b2lkKQorY29tcHJlc3NfcGl4ZWwoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgYykKKy8qIEFjY2VwdCBhbmQgImNvbXByZXNzIiBvbmUgcGl4ZWwgdmFsdWUuCisgKiBUaGUgZ2l2ZW4gdmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbl9iaXRzIHdpZGUuCisgKi8KK3sKKyAgLyogT3V0cHV0IHRoZSBnaXZlbiBwaXhlbCB2YWx1ZSBhcyBhIHN5bWJvbC4gKi8KKyAgb3V0cHV0KGRpbmZvLCBjKTsKKyAgLyogSXNzdWUgQ2xlYXIgY29kZXMgb2Z0ZW4gZW5vdWdoIHRvIGtlZXAgdGhlIHJlYWRlciBmcm9tIHJhdGNoZXRpbmcgdXAKKyAgICogaXRzIHN5bWJvbCBzaXplLgorICAgKi8KKyAgaWYgKGRpbmZvLT5jb2RlX2NvdW50ZXIgPCBkaW5mby0+bWF4Y29kZSkgeworICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIrKzsKKyAgfSBlbHNlIHsKKyAgICBvdXRwdXQoZGluZm8sIGRpbmZvLT5DbGVhckNvZGUpOworICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIgPSBkaW5mby0+Q2xlYXJDb2RlICsgMjsgLyogcmVzZXQgdGhlIGNvdW50ZXIgKi8KKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitjb21wcmVzc190ZXJtKGdpZl9kZXN0X3B0ciBkaW5mbykKKy8qIENsZWFuIHVwIGF0IGVuZCAqLworeworICAvKiBTZW5kIGFuIEVPRiBjb2RlICovCisgIG91dHB1dChkaW5mbywgZGluZm8tPkVPRkNvZGUpOworICAvKiBGbHVzaCB0aGUgYml0LXBhY2tpbmcgYnVmZmVyICovCisgIGlmIChkaW5mby0+Y3VyX2JpdHMgPiAwKSB7CisgICAgQ0hBUl9PVVQoZGluZm8sIGRpbmZvLT5jdXJfYWNjdW0gJiAweEZGKTsKKyAgfQorICAvKiBGbHVzaCB0aGUgcGFja2V0IGJ1ZmZlciAqLworICBmbHVzaF9wYWNrZXQoZGluZm8pOworfQorCisKKy8qIEdJRiBoZWFkZXIgY29uc3RydWN0aW9uICovCisKKworTE9DQUwodm9pZCkKK3B1dF93b3JkKGdpZl9kZXN0X3B0ciBkaW5mbywgdW5zaWduZWQgaW50IHcpCisvKiBFbWl0IGEgMTYtYml0IHdvcmQsIExTQiBmaXJzdCAqLworeworICBwdXRjKHcgJiAweEZGLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgcHV0YygodyA+PiA4KSAmIDB4RkYsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworfQorCisKK0xPQ0FMKHZvaWQpCitwdXRfM2J5dGVzKGdpZl9kZXN0X3B0ciBkaW5mbywgaW50IHZhbCkKKy8qIEVtaXQgMyBjb3BpZXMgb2Ygc2FtZSBieXRlIHZhbHVlIC0tLSBoYW5keSBzdWJyIGZvciBjb2xvcm1hcCBjb25zdHJ1Y3Rpb24gKi8KK3sKKyAgcHV0Yyh2YWwsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKHZhbCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIHB1dGModmFsLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9oZWFkZXIoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgbnVtX2NvbG9ycywgSlNBTVBBUlJBWSBjb2xvcm1hcCkKKy8qIE91dHB1dCB0aGUgR0lGIGZpbGUgaGVhZGVyLCBpbmNsdWRpbmcgY29sb3IgbWFwICovCisvKiBJZiBjb2xvcm1hcD09TlVMTCwgc3ludGhlc2l6ZSBhIGdyYXlzY2FsZSBjb2xvcm1hcCAqLworeworICBpbnQgQml0c1BlclBpeGVsLCBDb2xvck1hcFNpemUsIEluaXRDb2RlU2l6ZSwgRmxhZ0J5dGU7CisgIGludCBjc2hpZnQgPSBkaW5mby0+Y2luZm8tPmRhdGFfcHJlY2lzaW9uIC0gODsKKyAgaW50IGk7CisKKyAgaWYgKG51bV9jb2xvcnMgPiAyNTYpCisgICAgRVJSRVhJVDEoZGluZm8tPmNpbmZvLCBKRVJSX1RPT19NQU5ZX0NPTE9SUywgbnVtX2NvbG9ycyk7CisgIC8qIENvbXB1dGUgYml0cy9waXhlbCBhbmQgcmVsYXRlZCB2YWx1ZXMgKi8KKyAgQml0c1BlclBpeGVsID0gMTsKKyAgd2hpbGUgKG51bV9jb2xvcnMgPiAoMSA8PCBCaXRzUGVyUGl4ZWwpKQorICAgIEJpdHNQZXJQaXhlbCsrOworICBDb2xvck1hcFNpemUgPSAxIDw8IEJpdHNQZXJQaXhlbDsKKyAgaWYgKEJpdHNQZXJQaXhlbCA8PSAxKQorICAgIEluaXRDb2RlU2l6ZSA9IDI7CisgIGVsc2UKKyAgICBJbml0Q29kZVNpemUgPSBCaXRzUGVyUGl4ZWw7CisgIC8qCisgICAqIFdyaXRlIHRoZSBHSUYgaGVhZGVyLgorICAgKiBOb3RlIHRoYXQgd2UgZ2VuZXJhdGUgYSBwbGFpbiBHSUY4NyBoZWFkZXIgZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eS4KKyAgICovCisgIHB1dGMoJ0cnLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgcHV0YygnSScsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKCdGJywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIHB1dGMoJzgnLCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgcHV0YygnNycsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKCdhJywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIC8qIFdyaXRlIHRoZSBMb2dpY2FsIFNjcmVlbiBEZXNjcmlwdG9yICovCisgIHB1dF93b3JkKGRpbmZvLCAodW5zaWduZWQgaW50KWRpbmZvLT5jaW5mby0+b3V0cHV0X3dpZHRoKTsKKyAgcHV0X3dvcmQoZGluZm8sICh1bnNpZ25lZCBpbnQpZGluZm8tPmNpbmZvLT5vdXRwdXRfaGVpZ2h0KTsKKyAgRmxhZ0J5dGUgPSAweDgwOyAgICAgICAgICAgICAgLyogWWVzLCB0aGVyZSBpcyBhIGdsb2JhbCBjb2xvciB0YWJsZSAqLworICBGbGFnQnl0ZSB8PSAoQml0c1BlclBpeGVsIC0gMSkgPDwgNDsgLyogY29sb3IgcmVzb2x1dGlvbiAqLworICBGbGFnQnl0ZSB8PSAoQml0c1BlclBpeGVsIC0gMSk7IC8qIHNpemUgb2YgZ2xvYmFsIGNvbG9yIHRhYmxlICovCisgIHB1dGMoRmxhZ0J5dGUsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICBwdXRjKDAsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOyAvKiBCYWNrZ3JvdW5kIGNvbG9yIGluZGV4ICovCisgIHB1dGMoMCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7IC8qIFJlc2VydmVkIChhc3BlY3QgcmF0aW8gaW4gR0lGODkpICovCisgIC8qIFdyaXRlIHRoZSBHbG9iYWwgQ29sb3IgTWFwICovCisgIC8qIElmIHRoZSBjb2xvciBtYXAgaXMgbW9yZSB0aGFuIDggYml0cyBwcmVjaXNpb24sICovCisgIC8qIHdlIHJlZHVjZSBpdCB0byA4IGJpdHMgYnkgc2hpZnRpbmcgKi8KKyAgZm9yIChpID0gMDsgaSA8IENvbG9yTWFwU2l6ZTsgaSsrKSB7CisgICAgaWYgKGkgPCBudW1fY29sb3JzKSB7CisgICAgICBpZiAoY29sb3JtYXAgIT0gTlVMTCkgeworICAgICAgICBpZiAoZGluZm8tPmNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikgeworICAgICAgICAgIC8qIE5vcm1hbCBjYXNlOiBSR0IgY29sb3IgbWFwICovCisgICAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzBdW2ldKSA+PiBjc2hpZnQsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICAgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsxXVtpXSkgPj4gY3NoaWZ0LCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY29sb3JtYXBbMl1baV0pID4+IGNzaGlmdCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogR3JheXNjYWxlICJjb2xvciBtYXAiOiBwb3NzaWJsZSBpZiBxdWFudGl6aW5nIGdyYXlzY2FsZSBpbWFnZSAqLworICAgICAgICAgIHB1dF8zYnl0ZXMoZGluZm8sIEdFVEpTQU1QTEUoY29sb3JtYXBbMF1baV0pID4+IGNzaGlmdCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIENyZWF0ZSBhIGdyYXlzY2FsZSBtYXAgb2YgbnVtX2NvbG9ycyB2YWx1ZXMsIHJhbmdlIDAuLjI1NSAqLworICAgICAgICBwdXRfM2J5dGVzKGRpbmZvLCAoaSAqIDI1NSArIChudW1fY29sb3JzIC0gMSkgLyAyKSAvIChudW1fY29sb3JzIC0gMSkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvKiBmaWxsIG91dCB0aGUgbWFwIHRvIGEgcG93ZXIgb2YgMiAqLworICAgICAgcHV0XzNieXRlcyhkaW5mbywgMCk7CisgICAgfQorICB9CisgIC8qIFdyaXRlIGltYWdlIHNlcGFyYXRvciBhbmQgSW1hZ2UgRGVzY3JpcHRvciAqLworICBwdXRjKCcsJywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7IC8qIHNlcGFyYXRvciAqLworICBwdXRfd29yZChkaW5mbywgMCk7ICAgICAgICAgICAvKiBsZWZ0L3RvcCBvZmZzZXQgKi8KKyAgcHV0X3dvcmQoZGluZm8sIDApOworICBwdXRfd29yZChkaW5mbywgKHVuc2lnbmVkIGludClkaW5mby0+Y2luZm8tPm91dHB1dF93aWR0aCk7IC8qIGltYWdlIHNpemUgKi8KKyAgcHV0X3dvcmQoZGluZm8sICh1bnNpZ25lZCBpbnQpZGluZm8tPmNpbmZvLT5vdXRwdXRfaGVpZ2h0KTsKKyAgLyogZmxhZyBieXRlOiBub3QgaW50ZXJsYWNlZCwgbm8gbG9jYWwgY29sb3IgbWFwICovCisgIHB1dGMoMHgwMCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgIC8qIFdyaXRlIEluaXRpYWwgQ29kZSBTaXplIGJ5dGUgKi8KKyAgcHV0YyhJbml0Q29kZVNpemUsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworCisgIC8qIEluaXRpYWxpemUgZm9yICJjb21wcmVzc2lvbiIgb2YgaW1hZ2UgZGF0YSAqLworICBjb21wcmVzc19pbml0KGRpbmZvLCBJbml0Q29kZVNpemUgKyAxKTsKK30KKworCisvKgorICogU3RhcnR1cDogd3JpdGUgdGhlIGZpbGUgaGVhZGVyLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfb3V0cHV0X2dpZihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbykKK3sKKyAgZ2lmX2Rlc3RfcHRyIGRlc3QgPSAoZ2lmX2Rlc3RfcHRyKWRpbmZvOworCisgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKQorICAgIGVtaXRfaGVhZGVyKGRlc3QsIGNpbmZvLT5hY3R1YWxfbnVtYmVyX29mX2NvbG9ycywgY2luZm8tPmNvbG9ybWFwKTsKKyAgZWxzZQorICAgIGVtaXRfaGVhZGVyKGRlc3QsIDI1NiwgKEpTQU1QQVJSQVkpTlVMTCk7Cit9CisKKworLyoKKyAqIFdyaXRlIHNvbWUgcGl4ZWwgZGF0YS4KKyAqIEluIHRoaXMgbW9kdWxlIHJvd3Nfc3VwcGxpZWQgd2lsbCBhbHdheXMgYmUgMS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3B1dF9waXhlbF9yb3dzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAorICAgICAgICAgICAgICAgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQoreworICBnaWZfZGVzdF9wdHIgZGVzdCA9IChnaWZfZGVzdF9wdHIpZGluZm87CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisKKyAgcHRyID0gZGVzdC0+cHViLmJ1ZmZlclswXTsKKyAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIGNvbXByZXNzX3BpeGVsKGRlc3QsIEdFVEpTQU1QTEUoKnB0cisrKSk7CisgIH0KK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfb3V0cHV0X2dpZihqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbykKK3sKKyAgZ2lmX2Rlc3RfcHRyIGRlc3QgPSAoZ2lmX2Rlc3RfcHRyKWRpbmZvOworCisgIC8qIEZsdXNoICJjb21wcmVzc2lvbiIgbWVjaGFuaXNtICovCisgIGNvbXByZXNzX3Rlcm0oZGVzdCk7CisgIC8qIFdyaXRlIGEgemVyby1sZW5ndGggZGF0YSBibG9jayB0byBlbmQgdGhlIHNlcmllcyAqLworICBwdXRjKDAsIGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSk7CisgIC8qIFdyaXRlIHRoZSBHSUYgdGVybWluYXRvciBtYXJrICovCisgIHB1dGMoJzsnLCBkZXN0LT5wdWIub3V0cHV0X2ZpbGUpOworICAvKiBNYWtlIHN1cmUgd2Ugd3JvdGUgdGhlIG91dHB1dCBmaWxlIE9LICovCisgIGZmbHVzaChkZXN0LT5wdWIub3V0cHV0X2ZpbGUpOworICBpZiAoZmVycm9yKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKK30KKworCisvKgorICogUmUtY2FsY3VsYXRlIGJ1ZmZlciBkaW1lbnNpb25zIGJhc2VkIG9uIG91dHB1dCBkaW1lbnNpb25zLgorICovCisKK01FVEhPRERFRih2b2lkKQorY2FsY19idWZmZXJfZGltZW5zaW9uc19naWYoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8pCit7Cit9CisKKworLyoKKyAqIFRoZSBtb2R1bGUgc2VsZWN0aW9uIHJvdXRpbmUgZm9yIEdJRiBmb3JtYXQgb3V0cHV0LgorICovCisKK0dMT0JBTChkanBlZ19kZXN0X3B0cikKK2ppbml0X3dyaXRlX2dpZihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBnaWZfZGVzdF9wdHIgZGVzdDsKKworICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QsIGZpbGwgaW4gbWV0aG9kIHBvaW50ZXJzICovCisgIGRlc3QgPSAoZ2lmX2Rlc3RfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdpZl9kZXN0X3N0cnVjdCkpOworICBkZXN0LT5jaW5mbyA9IGNpbmZvOyAgICAgICAgICAvKiBtYWtlIGJhY2sgbGluayBmb3Igc3Vicm91dGluZXMgKi8KKyAgZGVzdC0+cHViLnN0YXJ0X291dHB1dCA9IHN0YXJ0X291dHB1dF9naWY7CisgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IHB1dF9waXhlbF9yb3dzOworICBkZXN0LT5wdWIuZmluaXNoX291dHB1dCA9IGZpbmlzaF9vdXRwdXRfZ2lmOworICBkZXN0LT5wdWIuY2FsY19idWZmZXJfZGltZW5zaW9ucyA9IGNhbGNfYnVmZmVyX2RpbWVuc2lvbnNfZ2lmOworCisgIGlmIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19HUkFZU0NBTEUgJiYKKyAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0dJRl9DT0xPUlNQQUNFKTsKKworICAvKiBGb3JjZSBxdWFudGl6YXRpb24gaWYgY29sb3Igb3IgaWYgPiA4IGJpdHMgaW5wdXQgKi8KKyAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0dSQVlTQ0FMRSB8fCBjaW5mby0+ZGF0YV9wcmVjaXNpb24gPiA4KSB7CisgICAgLyogRm9yY2UgcXVhbnRpemF0aW9uIHRvIGF0IG1vc3QgMjU2IGNvbG9ycyAqLworICAgIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPSBUUlVFOworICAgIGlmIChjaW5mby0+ZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzID4gMjU2KQorICAgICAgY2luZm8tPmRlc2lyZWRfbnVtYmVyX29mX2NvbG9ycyA9IDI1NjsKKyAgfQorCisgIC8qIENhbGN1bGF0ZSBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBzbyB3ZSBjYW4gYWxsb2NhdGUgc3BhY2UgKi8KKyAganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKGNpbmZvKTsKKworICBpZiAoY2luZm8tPm91dHB1dF9jb21wb25lbnRzICE9IDEpIC8qIHNhZmV0eSBjaGVjazoganVzdCBvbmUgY29tcG9uZW50PyAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfR0lGX0JVRyk7CisKKyAgLyogQ3JlYXRlIGRlY29tcHJlc3NvciBvdXRwdXQgYnVmZmVyLiAqLworICBkZXN0LT5wdWIuYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBjaW5mby0+b3V0cHV0X3dpZHRoLCAoSkRJTUVOU0lPTikxKTsKKyAgZGVzdC0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOworCisgIHJldHVybiAoZGpwZWdfZGVzdF9wdHIpZGVzdDsKK30KKworI2VuZGlmIC8qIEdJRl9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dyanBnY29tLjEgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cmpwZ2NvbS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTVjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cmpwZ2NvbS4xCkBAIC0wLDAgKzEsMTAzIEBACisuVEggV1JKUEdDT00gMSAiMTUgSnVuZSAxOTk1IgorLlNIIE5BTUUKK3dyanBnY29tIFwtIGluc2VydCB0ZXh0IGNvbW1lbnRzIGludG8gYSBKUEVHIGZpbGUKKy5TSCBTWU5PUFNJUworLkIgd3JqcGdjb20KK1sKKy5CIFwtcmVwbGFjZQorXQorWworLkJJIFwtY29tbWVudCAiIHRleHQiCitdCitbCisuQkkgXC1jZmlsZSAiIG5hbWUiCitdCitbCisuSSBmaWxlbmFtZQorXQorLkxQCisuU0ggREVTQ1JJUFRJT04KKy5MUAorLkIgd3JqcGdjb20KK3JlYWRzIHRoZSBuYW1lZCBKUEVHL0pGSUYgZmlsZSwgb3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIG5vIGZpbGUgaXMgbmFtZWQsCithbmQgZ2VuZXJhdGVzIGEgbmV3IEpQRUcvSkZJRiBmaWxlIG9uIHN0YW5kYXJkIG91dHB1dC4gIEEgY29tbWVudCBibG9jayBpcworYWRkZWQgdG8gdGhlIGZpbGUuCisuUFAKK1RoZSBKUEVHIHN0YW5kYXJkIGFsbG93cyAiY29tbWVudCIgKENPTSkgYmxvY2tzIHRvIG9jY3VyIHdpdGhpbiBhIEpQRUcgZmlsZS4KK0FsdGhvdWdoIHRoZSBzdGFuZGFyZCBkb2Vzbid0IGFjdHVhbGx5IGRlZmluZSB3aGF0IENPTSBibG9ja3MgYXJlIGZvciwgdGhleQorYXJlIHdpZGVseSB1c2VkIHRvIGhvbGQgdXNlci1zdXBwbGllZCB0ZXh0IHN0cmluZ3MuICBUaGlzIGxldHMgeW91IGFkZAorYW5ub3RhdGlvbnMsIHRpdGxlcywgaW5kZXggdGVybXMsIGV0YyB0byB5b3VyIEpQRUcgZmlsZXMsIGFuZCBsYXRlciByZXRyaWV2ZQordGhlbSBhcyB0ZXh0LiAgQ09NIGJsb2NrcyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIGltYWdlIHN0b3JlZCBpbiB0aGUgSlBFRworZmlsZS4gIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBDT00gYmxvY2sgaXMgNjRLLCBidXQgeW91IGNhbiBoYXZlIGFzIG1hbnkgb2YKK3RoZW0gYXMgeW91IGxpa2UgaW4gb25lIEpQRUcgZmlsZS4KKy5QUAorLkIgd3JqcGdjb20KK2FkZHMgYSBDT00gYmxvY2ssIGNvbnRhaW5pbmcgdGV4dCB5b3UgcHJvdmlkZSwgdG8gYSBKUEVHIGZpbGUuCitPcmRpbmFyaWx5LCB0aGUgQ09NIGJsb2NrIGlzIGFkZGVkIGFmdGVyIGFueSBleGlzdGluZyBDT00gYmxvY2tzOyBidXQgeW91CitjYW4gZGVsZXRlIHRoZSBvbGQgQ09NIGJsb2NrcyBpZiB5b3Ugd2lzaC4KKy5TSCBPUFRJT05TCitTd2l0Y2ggbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkLCBhbmQgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KKy5UUAorLkIgXC1yZXBsYWNlCitEZWxldGUgYW55IGV4aXN0aW5nIENPTSBibG9ja3MgZnJvbSB0aGUgZmlsZS4KKy5UUAorLkJJIFwtY29tbWVudCAiIHRleHQiCitTdXBwbHkgdGV4dCBmb3IgbmV3IENPTSBibG9jayBvbiBjb21tYW5kIGxpbmUuCisuVFAKKy5CSSBcLWNmaWxlICIgbmFtZSIKK1JlYWQgdGV4dCBmb3IgbmV3IENPTSBibG9jayBmcm9tIG5hbWVkIGZpbGUuCisuUFAKK0lmIHlvdSBoYXZlIG9ubHkgb25lIGxpbmUgb2YgY29tbWVudCB0ZXh0IHRvIGFkZCwgeW91IGNhbiBwcm92aWRlIGl0IG9uIHRoZQorY29tbWFuZCBsaW5lIHdpdGgKKy5CUiBcLWNvbW1lbnQgLgorVGhlIGNvbW1lbnQgdGV4dCBtdXN0IGJlIHN1cnJvdW5kZWQgd2l0aCBxdW90ZXMgc28gdGhhdCBpdCBpcyB0cmVhdGVkIGFzIGEKK3NpbmdsZSBhcmd1bWVudC4gIExvbmdlciBjb21tZW50cyBjYW4gYmUgcmVhZCBmcm9tIGEgdGV4dCBmaWxlLgorLlBQCitJZiB5b3UgZ2l2ZSBuZWl0aGVyCisuQiBcLWNvbW1lbnQKK25vcgorLkJSIFwtY2ZpbGUsCit0aGVuCisuQiB3cmpwZ2NvbQord2lsbCByZWFkIHRoZSBjb21tZW50IHRleHQgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIChJbiB0aGlzIGNhc2UgYW4gaW5wdXQgaW1hZ2UKK2ZpbGUgbmFtZSBNVVNUIGJlIHN1cHBsaWVkLCBzbyB0aGF0IHRoZSBzb3VyY2UgSlBFRyBmaWxlIGNvbWVzIGZyb20gc29tZXdoZXJlCitlbHNlLikgIFlvdSBjYW4gZW50ZXIgbXVsdGlwbGUgbGluZXMsIHVwIHRvIDY0S0Igd29ydGguICBUeXBlIGFuIGVuZC1vZi1maWxlCitpbmRpY2F0b3IgKHVzdWFsbHkgY29udHJvbC1EKSB0byB0ZXJtaW5hdGUgdGhlIGNvbW1lbnQgdGV4dCBlbnRyeS4KKy5QUAorLkIgd3JqcGdjb20KK3dpbGwgbm90IGFkZCBhIENPTSBibG9jayBpZiB0aGUgcHJvdmlkZWQgY29tbWVudCBzdHJpbmcgaXMgZW1wdHkuICBUaGVyZWZvcmUKK1xmQlwtcmVwbGFjZSBcLWNvbW1lbnQgIiJcZlIgY2FuIGJlIHVzZWQgdG8gZGVsZXRlIGFsbCBDT00gYmxvY2tzIGZyb20gYSBmaWxlLgorLlNIIEVYQU1QTEVTCisuTFAKK0FkZCBhIHNob3J0IGNvbW1lbnQgdG8gaW4uanBnLCBwcm9kdWNpbmcgb3V0LmpwZzoKKy5JUAorLkIgd3JqcGdjb20gXC1jCitcZkkiVmlldyBvZiBteSBiYWNrIHlhcmQiIGluLmpwZworLkIgPgorLkkgb3V0LmpwZworLlBQCitBdHRhY2ggYSBsb25nIGNvbW1lbnQgcHJldmlvdXNseSBzdG9yZWQgaW4gY29tbWVudC50eHQ6CisuSVAKKy5CIHdyanBnY29tCisuSSBpbi5qcGcKKy5CIDwKKy5JIGNvbW1lbnQudHh0CisuQiA+CisuSSBvdXQuanBnCisuUFAKK29yIGVxdWl2YWxlbnRseQorLklQCisuQiB3cmpwZ2NvbQorLkIgLWNmaWxlCisuSSBjb21tZW50LnR4dAorLkIgPAorLkkgaW4uanBnCisuQiA+CisuSSBvdXQuanBnCisuU0ggU0VFIEFMU08KKy5CUiBjanBlZyAoMSksCisuQlIgZGpwZWcgKDEpLAorLkJSIGpwZWd0cmFuICgxKSwKKy5CUiByZGpwZ2NvbSAoMSkKKy5TSCBBVVRIT1IKK0luZGVwZW5kZW50IEpQRUcgR3JvdXAKZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dyanBnY29tLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cmpwZ2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjc3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cmpwZ2NvbS5jCkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogd3JqcGdjb20uYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYSB2ZXJ5IHNpbXBsZSBzdGFuZC1hbG9uZSBhcHBsaWNhdGlvbiB0aGF0IGluc2VydHMKKyAqIHVzZXItc3VwcGxpZWQgdGV4dCBhcyBhIENPTSAoY29tbWVudCkgbWFya2VyIGluIGEgSkZJRiBmaWxlLgorICogVGhpcyBtYXkgYmUgdXNlZnVsIGFzIGFuIGV4YW1wbGUgb2YgdGhlIG1pbmltdW0gbG9naWMgbmVlZGVkIHRvIHBhcnNlCisgKiBKUEVHIG1hcmtlcnMuCisgKi8KKworI2RlZmluZSBKUEVHX0NKUEVHX0RKUEVHICAgICAgICAvKiB0byBnZXQgdGhlIGNvbW1hbmQtbGluZSBjb25maWcgc3ltYm9scyAqLworI2luY2x1ZGUgImppbmNsdWRlLmgiICAgICAgICAgICAvKiBnZXQgYXV0by1jb25maWcgc3ltYm9scywgPHN0ZGlvLmg+ICovCisKKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSAqLworZXh0ZXJuIHZvaWQgKm1hbGxvYygpOworI2VuZGlmCisjaW5jbHVkZSA8Y3R5cGUuaD4gICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgaXN1cHBlcigpLCB0b2xvd2VyKCkgKi8KKyNpZmRlZiBVU0VfU0VUTU9ERQorI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIHNldG1vZGUoKSdzIHBhcmFtZXRlciBtYWNyb3MgKi8KKy8qIElmIHlvdSBoYXZlIHNldG1vZGUoKSBidXQgbm90IDxpby5oPiwganVzdCBkZWxldGUgdGhpcyBsaW5lOiAqLworI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIHNldG1vZGUoKSAqLworI2VuZGlmCisKKyNpZmRlZiBVU0VfQ0NPTU1BTkQgICAgICAgICAgICAgLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCisjaWZkZWYgX19NV0VSS1NfXworI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogLi4uIGFuZCB0aGlzICovCisjZW5kaWYKKyNpZmRlZiBUSElOS19DCisjaW5jbHVkZSA8Y29uc29sZS5oPiAgICAgICAgICAgIC8qIFRoaW5rIGRlY2xhcmVzIGl0IGhlcmUgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBET05UX1VTRV9CX01PREUgICAgICAgICAgLyogZGVmaW5lIG1vZGUgcGFyYW1ldGVycyBmb3IgZm9wZW4oKSAqLworI2RlZmluZSBSRUFEX0JJTkFSWSAgICAgInIiCisjZGVmaW5lIFdSSVRFX0JJTkFSWSAgICAidyIKKyNlbHNlCisjZGVmaW5lIFJFQURfQklOQVJZICAgICAicmIiCisjZGVmaW5lIFdSSVRFX0JJTkFSWSAgICAid2IiCisjZW5kaWYKKworI2lmbmRlZiBFWElUX0ZBSUxVUkUgICAgICAgICAgICAvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLworI2RlZmluZSBFWElUX0ZBSUxVUkUgIDEKKyNlbmRpZgorI2lmbmRlZiBFWElUX1NVQ0NFU1MKKyNkZWZpbmUgRVhJVF9TVUNDRVNTICAwCisjZW5kaWYKKworLyogUmVkdWNlIHRoaXMgdmFsdWUgaWYgeW91ciBtYWxsb2MoKSBjYW4ndCBhbGxvY2F0ZSBibG9ja3MgdXAgdG8gNjRLLgorICogT24gRE9TLCBjb21waWxpbmcgaW4gbGFyZ2UgbW9kZWwgaXMgdXN1YWxseSBhIGJldHRlciBzb2x1dGlvbi4KKyAqLworCisjaWZuZGVmIE1BWF9DT01fTEVOR1RICisjZGVmaW5lIE1BWF9DT01fTEVOR1RIICA2NTAwMEwgIC8qIG11c3QgYmUgPD0gNjU1MzMgaW4gYW55IGNhc2UgKi8KKyNlbmRpZgorCisKKy8qCisgKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdG8gcmVhZCB0aGUgaW5wdXQgZmlsZSBhbmQgd3JpdGUgdGhlIG91dHB1dCBmaWxlLgorICogVG8gcmV1c2UgdGhpcyBjb2RlIGluIGFub3RoZXIgYXBwbGljYXRpb24sIHlvdSBtaWdodCBuZWVkIHRvIGNoYW5nZSB0aGVzZS4KKyAqLworCitzdGF0aWMgRklMRSAqaW5maWxlOyAgICAgICAgICAgIC8qIGlucHV0IEpQRUcgZmlsZSAqLworCisvKiBSZXR1cm4gbmV4dCBpbnB1dCBieXRlLCBvciBFT0YgaWYgbm8gbW9yZSAqLworI2RlZmluZSBORVhUQllURSgpICBnZXRjKGluZmlsZSkKKworc3RhdGljIEZJTEUgKm91dGZpbGU7ICAgICAgICAgICAvKiBvdXRwdXQgSlBFRyBmaWxlICovCisKKy8qIEVtaXQgYW4gb3V0cHV0IGJ5dGUgKi8KKyNkZWZpbmUgUFVUQllURSh4KSAgcHV0YygoeCksIG91dGZpbGUpCisKKworLyogRXJyb3IgZXhpdCBoYW5kbGVyICovCisjZGVmaW5lIEVSUkVYSVQobXNnKSAgKGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyksIGV4aXQoRVhJVF9GQUlMVVJFKSkKKworCisvKiBSZWFkIG9uZSBieXRlLCB0ZXN0aW5nIGZvciBFT0YgKi8KK3N0YXRpYyBpbnQKK3JlYWRfMV9ieXRlKHZvaWQpCit7CisgIGludCBjOworCisgIGMgPSBORVhUQllURSgpOworICBpZiAoYyA9PSBFT0YpCisgICAgRVJSRVhJVCgiUHJlbWF0dXJlIEVPRiBpbiBKUEVHIGZpbGUiKTsKKyAgcmV0dXJuIGM7Cit9CisKKy8qIFJlYWQgMiBieXRlcywgY29udmVydCB0byB1bnNpZ25lZCBpbnQgKi8KKy8qIEFsbCAyLWJ5dGUgcXVhbnRpdGllcyBpbiBKUEVHIG1hcmtlcnMgYXJlIE1TQiBmaXJzdCAqLworc3RhdGljIHVuc2lnbmVkIGludAorcmVhZF8yX2J5dGVzKHZvaWQpCit7CisgIGludCBjMSwgYzI7CisKKyAgYzEgPSBORVhUQllURSgpOworICBpZiAoYzEgPT0gRU9GKQorICAgIEVSUkVYSVQoIlByZW1hdHVyZSBFT0YgaW4gSlBFRyBmaWxlIik7CisgIGMyID0gTkVYVEJZVEUoKTsKKyAgaWYgKGMyID09IEVPRikKKyAgICBFUlJFWElUKCJQcmVtYXR1cmUgRU9GIGluIEpQRUcgZmlsZSIpOworICByZXR1cm4gKCgodW5zaWduZWQgaW50KWMxKSA8PCA4KSArICgodW5zaWduZWQgaW50KWMyKTsKK30KKworCisvKiBSb3V0aW5lcyB0byB3cml0ZSBkYXRhIHRvIG91dHB1dCBmaWxlICovCisKK3N0YXRpYyB2b2lkCit3cml0ZV8xX2J5dGUoaW50IGMpCit7CisgIFBVVEJZVEUoYyk7Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZV8yX2J5dGVzKHVuc2lnbmVkIGludCB2YWwpCit7CisgIFBVVEJZVEUoKHZhbCA+PiA4KSAmIDB4RkYpOworICBQVVRCWVRFKHZhbCAmIDB4RkYpOworfQorCitzdGF0aWMgdm9pZAord3JpdGVfbWFya2VyKGludCBtYXJrZXIpCit7CisgIFBVVEJZVEUoMHhGRik7CisgIFBVVEJZVEUobWFya2VyKTsKK30KKworc3RhdGljIHZvaWQKK2NvcHlfcmVzdF9vZl9maWxlKHZvaWQpCit7CisgIGludCBjOworCisgIHdoaWxlICgoYyA9IE5FWFRCWVRFKCkpICE9IEVPRikKKyAgICBQVVRCWVRFKGMpOworfQorCisKKy8qCisgKiBKUEVHIG1hcmtlcnMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSAweEZGIGJ5dGVzLCBmb2xsb3dlZCBieSBhIG1hcmtlcgorICogY29kZSBieXRlICh3aGljaCBpcyBub3QgYW4gRkYpLiAgSGVyZSBhcmUgdGhlIG1hcmtlciBjb2RlcyBvZiBpbnRlcmVzdAorICogaW4gdGhpcyBwcm9ncmFtLiAgKFNlZSBqZG1hcmtlci5jIGZvciBhIG1vcmUgY29tcGxldGUgbGlzdC4pCisgKi8KKworI2RlZmluZSBNX1NPRjAgICAweEMwICAgICAgICAgICAvKiBTdGFydCBPZiBGcmFtZSBOICovCisjZGVmaW5lIE1fU09GMSAgIDB4QzEgICAgICAgICAgIC8qIE4gaW5kaWNhdGVzIHdoaWNoIGNvbXByZXNzaW9uIHByb2Nlc3MgKi8KKyNkZWZpbmUgTV9TT0YyICAgMHhDMiAgICAgICAgICAgLyogT25seSBTT0YwLVNPRjIgYXJlIG5vdyBpbiBjb21tb24gdXNlICovCisjZGVmaW5lIE1fU09GMyAgIDB4QzMKKyNkZWZpbmUgTV9TT0Y1ICAgMHhDNSAgICAgICAgICAgLyogTkI6IGNvZGVzIEM0IGFuZCBDQyBhcmUgTk9UIFNPRiBtYXJrZXJzICovCisjZGVmaW5lIE1fU09GNiAgIDB4QzYKKyNkZWZpbmUgTV9TT0Y3ICAgMHhDNworI2RlZmluZSBNX1NPRjkgICAweEM5CisjZGVmaW5lIE1fU09GMTAgIDB4Q0EKKyNkZWZpbmUgTV9TT0YxMSAgMHhDQgorI2RlZmluZSBNX1NPRjEzICAweENECisjZGVmaW5lIE1fU09GMTQgIDB4Q0UKKyNkZWZpbmUgTV9TT0YxNSAgMHhDRgorI2RlZmluZSBNX1NPSSAgICAweEQ4ICAgICAgICAgICAvKiBTdGFydCBPZiBJbWFnZSAoYmVnaW5uaW5nIG9mIGRhdGFzdHJlYW0pICovCisjZGVmaW5lIE1fRU9JICAgIDB4RDkgICAgICAgICAgIC8qIEVuZCBPZiBJbWFnZSAoZW5kIG9mIGRhdGFzdHJlYW0pICovCisjZGVmaW5lIE1fU09TICAgIDB4REEgICAgICAgICAgIC8qIFN0YXJ0IE9mIFNjYW4gKGJlZ2lucyBjb21wcmVzc2VkIGRhdGEpICovCisjZGVmaW5lIE1fQ09NICAgIDB4RkUgICAgICAgICAgIC8qIENPTW1lbnQgKi8KKworCisvKgorICogRmluZCB0aGUgbmV4dCBKUEVHIG1hcmtlciBhbmQgcmV0dXJuIGl0cyBtYXJrZXIgY29kZS4KKyAqIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgRkYgYnl0ZSwgcG9zc2libHkgbW9yZSBpZiB0aGUgY29tcHJlc3NvciB1c2VkIEZGcworICogdG8gcGFkIHRoZSBmaWxlLiAgKFBhZGRpbmcgRkZzIHdpbGwgTk9UIGJlIHJlcGxpY2F0ZWQgaW4gdGhlIG91dHB1dCBmaWxlLikKKyAqIFRoZXJlIGNvdWxkIGFsc28gYmUgbm9uLUZGIGdhcmJhZ2UgYmV0d2VlbiBtYXJrZXJzLiAgVGhlIHRyZWF0bWVudCBvZiBzdWNoCisgKiBnYXJiYWdlIGlzIHVuc3BlY2lmaWVkOyB3ZSBjaG9vc2UgdG8gc2tpcCBvdmVyIGl0IGJ1dCBlbWl0IGEgd2FybmluZyBtc2cuCisgKiBOQjogdGhpcyByb3V0aW5lIG11c3Qgbm90IGJlIHVzZWQgYWZ0ZXIgc2VlaW5nIFNPUyBtYXJrZXIsIHNpbmNlIGl0IHdpbGwKKyAqIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIEZGLzAwIHNlcXVlbmNlcyBpbiB0aGUgY29tcHJlc3NlZCBpbWFnZSBkYXRhLi4uCisgKi8KKworc3RhdGljIGludAorbmV4dF9tYXJrZXIodm9pZCkKK3sKKyAgaW50IGM7CisgIGludCBkaXNjYXJkZWRfYnl0ZXMgPSAwOworCisgIC8qIEZpbmQgMHhGRiBieXRlOyBjb3VudCBhbmQgc2tpcCBhbnkgbm9uLUZGcy4gKi8KKyAgYyA9IHJlYWRfMV9ieXRlKCk7CisgIHdoaWxlIChjICE9IDB4RkYpIHsKKyAgICBkaXNjYXJkZWRfYnl0ZXMrKzsKKyAgICBjID0gcmVhZF8xX2J5dGUoKTsKKyAgfQorICAvKiBHZXQgbWFya2VyIGNvZGUgYnl0ZSwgc3dhbGxvd2luZyBhbnkgZHVwbGljYXRlIEZGIGJ5dGVzLiAgRXh0cmEgRkZzCisgICAqIGFyZSBsZWdhbCBhcyBwYWQgYnl0ZXMsIHNvIGRvbid0IGNvdW50IHRoZW0gaW4gZGlzY2FyZGVkX2J5dGVzLgorICAgKi8KKyAgZG8geworICAgIGMgPSByZWFkXzFfYnl0ZSgpOworICB9IHdoaWxlIChjID09IDB4RkYpOworCisgIGlmIChkaXNjYXJkZWRfYnl0ZXMgIT0gMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogZ2FyYmFnZSBkYXRhIGZvdW5kIGluIEpQRUcgZmlsZVxuIik7CisgIH0KKworICByZXR1cm4gYzsKK30KKworCisvKgorICogUmVhZCB0aGUgaW5pdGlhbCBtYXJrZXIsIHdoaWNoIHNob3VsZCBiZSBTT0kuCisgKiBGb3IgYSBKRklGIGZpbGUsIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgdGhlIGZpbGUgc2hvdWxkIGJlIGxpdGVyYWxseQorICogMHhGRiBNX1NPSS4gIFRvIGJlIG1vcmUgZ2VuZXJhbCwgd2UgY291bGQgdXNlIG5leHRfbWFya2VyLCBidXQgaWYgdGhlCisgKiBpbnB1dCBmaWxlIHdlcmVuJ3QgYWN0dWFsbHkgSlBFRyBhdCBhbGwsIG5leHRfbWFya2VyIG1pZ2h0IHJlYWQgdGhlIHdob2xlCisgKiBmaWxlIGFuZCB0aGVuIHJldHVybiBhIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZS4uLgorICovCisKK3N0YXRpYyBpbnQKK2ZpcnN0X21hcmtlcih2b2lkKQoreworICBpbnQgYzEsIGMyOworCisgIGMxID0gTkVYVEJZVEUoKTsKKyAgYzIgPSBORVhUQllURSgpOworICBpZiAoYzEgIT0gMHhGRiB8fCBjMiAhPSBNX1NPSSkKKyAgICBFUlJFWElUKCJOb3QgYSBKUEVHIGZpbGUiKTsKKyAgcmV0dXJuIGMyOworfQorCisKKy8qCisgKiBNb3N0IHR5cGVzIG9mIG1hcmtlciBhcmUgZm9sbG93ZWQgYnkgYSB2YXJpYWJsZS1sZW5ndGggcGFyYW1ldGVyIHNlZ21lbnQuCisgKiBUaGlzIHJvdXRpbmUgc2tpcHMgb3ZlciB0aGUgcGFyYW1ldGVycyBmb3IgYW55IG1hcmtlciB3ZSBkb24ndCBvdGhlcndpc2UKKyAqIHdhbnQgdG8gcHJvY2Vzcy4KKyAqIE5vdGUgdGhhdCB3ZSBNVVNUIHNraXAgdGhlIHBhcmFtZXRlciBzZWdtZW50IGV4cGxpY2l0bHkgaW4gb3JkZXIgbm90IHRvCisgKiBiZSBmb29sZWQgYnkgMHhGRiBieXRlcyB0aGF0IG1pZ2h0IGFwcGVhciB3aXRoaW4gdGhlIHBhcmFtZXRlciBzZWdtZW50OworICogc3VjaCBieXRlcyBkbyBOT1QgaW50cm9kdWNlIG5ldyBtYXJrZXJzLgorICovCisKK3N0YXRpYyB2b2lkCitjb3B5X3ZhcmlhYmxlKHZvaWQpCisvKiBDb3B5IGFuIHVua25vd24gb3IgdW5pbnRlcmVzdGluZyB2YXJpYWJsZS1sZW5ndGggbWFya2VyICovCit7CisgIHVuc2lnbmVkIGludCBsZW5ndGg7CisKKyAgLyogR2V0IHRoZSBtYXJrZXIgcGFyYW1ldGVyIGxlbmd0aCBjb3VudCAqLworICBsZW5ndGggPSByZWFkXzJfYnl0ZXMoKTsKKyAgd3JpdGVfMl9ieXRlcyhsZW5ndGgpOworICAvKiBMZW5ndGggaW5jbHVkZXMgaXRzZWxmLCBzbyBtdXN0IGJlIGF0IGxlYXN0IDIgKi8KKyAgaWYgKGxlbmd0aCA8IDIpCisgICAgRVJSRVhJVCgiRXJyb25lb3VzIEpQRUcgbWFya2VyIGxlbmd0aCIpOworICBsZW5ndGggLT0gMjsKKyAgLyogQ29weSB0aGUgcmVtYWluaW5nIGJ5dGVzICovCisgIHdoaWxlIChsZW5ndGggPiAwKSB7CisgICAgd3JpdGVfMV9ieXRlKHJlYWRfMV9ieXRlKCkpOworICAgIGxlbmd0aC0tOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitza2lwX3ZhcmlhYmxlKHZvaWQpCisvKiBTa2lwIG92ZXIgYW4gdW5rbm93biBvciB1bmludGVyZXN0aW5nIHZhcmlhYmxlLWxlbmd0aCBtYXJrZXIgKi8KK3sKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKworICAvKiBHZXQgdGhlIG1hcmtlciBwYXJhbWV0ZXIgbGVuZ3RoIGNvdW50ICovCisgIGxlbmd0aCA9IHJlYWRfMl9ieXRlcygpOworICAvKiBMZW5ndGggaW5jbHVkZXMgaXRzZWxmLCBzbyBtdXN0IGJlIGF0IGxlYXN0IDIgKi8KKyAgaWYgKGxlbmd0aCA8IDIpCisgICAgRVJSRVhJVCgiRXJyb25lb3VzIEpQRUcgbWFya2VyIGxlbmd0aCIpOworICBsZW5ndGggLT0gMjsKKyAgLyogU2tpcCBvdmVyIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KKyAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICAodm9pZClyZWFkXzFfYnl0ZSgpOworICAgIGxlbmd0aC0tOworICB9Cit9CisKKworLyoKKyAqIFBhcnNlIHRoZSBtYXJrZXIgc3RyZWFtIHVudGlsIFNPRm4gb3IgRU9JIGlzIHNlZW47CisgKiBjb3B5IGRhdGEgdG8gb3V0cHV0LCBidXQgZGlzY2FyZCBDT00gbWFya2VycyB1bmxlc3Mga2VlcF9DT00gaXMgdHJ1ZS4KKyAqLworCitzdGF0aWMgaW50CitzY2FuX0pQRUdfaGVhZGVyKGludCBrZWVwX0NPTSkKK3sKKyAgaW50IG1hcmtlcjsKKworICAvKiBFeHBlY3QgU09JIGF0IHN0YXJ0IG9mIGZpbGUgKi8KKyAgaWYgKGZpcnN0X21hcmtlcigpICE9IE1fU09JKQorICAgIEVSUkVYSVQoIkV4cGVjdGVkIFNPSSBtYXJrZXIgZmlyc3QiKTsKKyAgd3JpdGVfbWFya2VyKE1fU09JKTsKKworICAvKiBTY2FuIG1pc2NlbGxhbmVvdXMgbWFya2VycyB1bnRpbCB3ZSByZWFjaCBTT0ZuLiAqLworICBmb3IgKDs7KSB7CisgICAgbWFya2VyID0gbmV4dF9tYXJrZXIoKTsKKyAgICBzd2l0Y2ggKG1hcmtlcikgeworICAgICAgLyogTm90ZSB0aGF0IG1hcmtlciBjb2RlcyAweEM0LCAweEM4LCAweENDIGFyZSBub3QsIGFuZCBtdXN0IG5vdCBiZSwKKyAgICAgICAqIHRyZWF0ZWQgYXMgU09Gbi4gIEM0IGluIHBhcnRpY3VsYXIgaXMgYWN0dWFsbHkgREhULgorICAgICAgICovCisgICAgY2FzZSBNX1NPRjA6ICAgICAgICAgICAgICAgIC8qIEJhc2VsaW5lICovCisgICAgY2FzZSBNX1NPRjE6ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GMjogICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GMzogICAgICAgICAgICAgICAgLyogTG9zc2xlc3MsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNTogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNjogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjc6ICAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0Y5OiAgICAgICAgICAgICAgICAvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjEwOiAgICAgICAgICAgICAgIC8qIFByb2dyZXNzaXZlLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjExOiAgICAgICAgICAgICAgIC8qIExvc3NsZXNzLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjEzOiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjE0OiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBwcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxNTogICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICAgIHJldHVybiBtYXJrZXI7CisKKyAgICBjYXNlIE1fU09TOiAgICAgICAgICAgICAgICAgLyogc2hvdWxkIG5vdCBzZWUgY29tcHJlc3NlZCBkYXRhIGJlZm9yZSBTT0YgKi8KKyAgICAgIEVSUkVYSVQoIlNPUyB3aXRob3V0IHByaW9yIFNPRm4iKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNX0VPSTogICAgICAgICAgICAgICAgIC8qIGluIGNhc2UgaXQncyBhIHRhYmxlcy1vbmx5IEpQRUcgc3RyZWFtICovCisgICAgICByZXR1cm4gbWFya2VyOworCisgICAgY2FzZSBNX0NPTTogICAgICAgICAgICAgICAgIC8qIEV4aXN0aW5nIENPTTogY29uZGl0aW9uYWxseSBkaXNjYXJkICovCisgICAgICBpZiAoa2VlcF9DT00pIHsKKyAgICAgICAgd3JpdGVfbWFya2VyKG1hcmtlcik7CisgICAgICAgIGNvcHlfdmFyaWFibGUoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNraXBfdmFyaWFibGUoKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UganVzdCBnZXRzIGNvcGllZCAqLworICAgICAgd3JpdGVfbWFya2VyKG1hcmtlcik7CisgICAgICBjb3B5X3ZhcmlhYmxlKCk7ICAgICAgICAgIC8qIHdlIGFzc3VtZSBpdCBoYXMgYSBwYXJhbWV0ZXIgY291bnQuLi4gKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSAvKiBlbmQgbG9vcCAqLworfQorCisKKy8qIENvbW1hbmQgbGluZSBwYXJzaW5nIGNvZGUgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOyAgICAvKiBwcm9ncmFtIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCisKKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCisvKiBjb21wbGFpbiBhYm91dCBiYWQgY29tbWFuZCBsaW5lICovCit7CisgIGZwcmludGYoc3RkZXJyLCAid3JqcGdjb20gaW5zZXJ0cyBhIHRleHR1YWwgY29tbWVudCBpbiBhIEpQRUcgZmlsZS5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIllvdSBjYW4gYWRkIHRvIG9yIHJlcGxhY2UgYW55IGV4aXN0aW5nIGNvbW1lbnQocykuXG4iKTsKKworICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbc3dpdGNoZXNdICIsIHByb2duYW1lKTsKKyNpZmRlZiBUV09fRklMRV9DT01NQU5ETElORQorICBmcHJpbnRmKHN0ZGVyciwgImlucHV0ZmlsZSBvdXRwdXRmaWxlXG4iKTsKKyNlbHNlCisgIGZwcmludGYoc3RkZXJyLCAiW2lucHV0ZmlsZV1cbiIpOworI2VuZGlmCisKKyAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyAobmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkKTpcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLXJlcGxhY2UgICAgICAgICBEZWxldGUgYW55IGV4aXN0aW5nIGNvbW1lbnRzXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgIC1jb21tZW50IFwidGV4dFwiICBJbnNlcnQgY29tbWVudCB3aXRoIGdpdmVuIHRleHRcbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAgLWNmaWxlIG5hbWUgICAgICBSZWFkIGNvbW1lbnQgZnJvbSBuYW1lZCBmaWxlXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICJOb3RpY2UgdGhhdCB5b3UgbXVzdCBwdXQgcXVvdGVzIGFyb3VuZCB0aGUgY29tbWVudCB0ZXh0XG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICJ3aGVuIHlvdSB1c2UgLWNvbW1lbnQuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICJJZiB5b3UgZG8gbm90IGdpdmUgZWl0aGVyIC1jb21tZW50IG9yIC1jZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lLFxuIik7CisgIGZwcmludGYoc3RkZXJyLCAidGhlbiB0aGUgY29tbWVudCB0ZXh0IGlzIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dC5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIkl0IGNhbiBiZSBtdWx0aXBsZSBsaW5lcywgdXAgdG8gJXUgY2hhcmFjdGVycyB0b3RhbC5cbiIsCisgICAgICAgICAgKHVuc2lnbmVkIGludClNQVhfQ09NX0xFTkdUSCk7CisjaWZuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCisgIGZwcmludGYoc3RkZXJyLCAiWW91IG11c3Qgc3BlY2lmeSBhbiBpbnB1dCBKUEVHIGZpbGUgbmFtZSB3aGVuIHN1cHBseWluZ1xuIik7CisgIGZwcmludGYoc3RkZXJyLCAiY29tbWVudCB0ZXh0IGZyb20gc3RhbmRhcmQgaW5wdXQuXG4iKTsKKyNlbmRpZgorCisgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCitzdGF0aWMgaW50CitrZXltYXRjaChjaGFyICphcmcsIGNvbnN0IGNoYXIgKmtleXdvcmQsIGludCBtaW5jaGFycykKKy8qIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcgb2YgKHBvc3NpYmx5IGFiYnJldmlhdGVkKSBrZXl3b3JkIHN3aXRjaGVzLiAqLworLyoga2V5d29yZCBpcyB0aGUgY29uc3RhbnQga2V5d29yZCAobXVzdCBiZSBsb3dlciBjYXNlIGFscmVhZHkpLCAqLworLyogbWluY2hhcnMgaXMgbGVuZ3RoIG9mIG1pbmltdW0gbGVnYWwgYWJicmV2aWF0aW9uLiAqLworeworICByZWdpc3RlciBpbnQgY2EsIGNrOworICByZWdpc3RlciBpbnQgbm1hdGNoZWQgPSAwOworCisgIHdoaWxlICgoY2EgPSAqYXJnKyspICE9ICdcMCcpIHsKKyAgICBpZiAoKGNrID0gKmtleXdvcmQrKykgPT0gJ1wwJykKKyAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgLyogYXJnIGxvbmdlciB0aGFuIGtleXdvcmQsIG5vIGdvb2QgKi8KKyAgICBpZiAoaXN1cHBlcihjYSkpICAgICAgICAgICAgLyogZm9yY2UgYXJnIHRvIGxjYXNlIChhc3N1bWUgY2sgaXMgYWxyZWFkeSkgKi8KKyAgICAgIGNhID0gdG9sb3dlcihjYSk7CisgICAgaWYgKGNhICE9IGNrKQorICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAvKiBubyBnb29kICovCisgICAgbm1hdGNoZWQrKzsgICAgICAgICAgICAgICAgIC8qIGNvdW50IG1hdGNoZWQgY2hhcmFjdGVycyAqLworICB9CisgIC8qIHJlYWNoZWQgZW5kIG9mIGFyZ3VtZW50OyBmYWlsIGlmIGl0J3MgdG9vIHNob3J0IGZvciB1bmlxdWUgYWJicmV2ICovCisgIGlmIChubWF0Y2hlZCA8IG1pbmNoYXJzKQorICAgIHJldHVybiAwOworICByZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAvKiBBLU9LICovCit9CisKKworLyoKKyAqIFRoZSBtYWluIHByb2dyYW0uCisgKi8KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGFyZ247CisgIGNoYXIgKmFyZzsKKyAgaW50IGtlZXBfQ09NID0gMTsKKyAgY2hhciAqY29tbWVudF9hcmcgPSBOVUxMOworICBGSUxFICpjb21tZW50X2ZpbGUgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgY29tbWVudF9sZW5ndGggPSAwOworICBpbnQgbWFya2VyOworCisgIC8qIE9uIE1hYywgZmV0Y2ggYSBjb21tYW5kIGxpbmUuICovCisjaWZkZWYgVVNFX0NDT01NQU5ECisgIGFyZ2MgPSBjY29tbWFuZCgmYXJndik7CisjZW5kaWYKKworICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCisgICAgcHJvZ25hbWUgPSAid3JqcGdjb20iOyAgICAgIC8qIGluIGNhc2UgQyBsaWJyYXJ5IGRvZXNuJ3QgcHJvdmlkZSBpdCAqLworCisgIC8qIFBhcnNlIHN3aXRjaGVzLCBpZiBhbnkgKi8KKyAgZm9yIChhcmduID0gMTsgYXJnbiA8IGFyZ2M7IGFyZ24rKykgeworICAgIGFyZyA9IGFyZ3ZbYXJnbl07CisgICAgaWYgKGFyZ1swXSAhPSAnLScpCisgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBzd2l0Y2gsIG11c3QgYmUgZmlsZSBuYW1lICovCisgICAgYXJnKys7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2Ugb3ZlciAnLScgKi8KKyAgICBpZiAoa2V5bWF0Y2goYXJnLCAicmVwbGFjZSIsIDEpKSB7CisgICAgICBrZWVwX0NPTSA9IDA7CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjZmlsZSIsIDIpKSB7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpIHVzYWdlKCk7CisgICAgICBpZiAoKGNvbW1lbnRfZmlsZSA9IGZvcGVuKGFyZ3ZbYXJnbl0sICJyIikpID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjb21tZW50IiwgMSkpIHsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgdXNhZ2UoKTsKKyAgICAgIGNvbW1lbnRfYXJnID0gYXJndlthcmduXTsKKyAgICAgIC8qIElmIHRoZSBjb21tZW50IHRleHQgc3RhcnRzIHdpdGggJyInLCB0aGVuIHdlIGFyZSBwcm9iYWJseSBydW5uaW5nCisgICAgICAgKiB1bmRlciBNUy1ET0cgYW5kIG11c3QgcGFyc2Ugb3V0IHRoZSBxdW90ZWQgc3RyaW5nIG91cnNlbHZlcy4gIFNpZ2guCisgICAgICAgKi8KKyAgICAgIGlmIChjb21tZW50X2FyZ1swXSA9PSAnIicpIHsKKyAgICAgICAgY29tbWVudF9hcmcgPSAoY2hhciAqKW1hbGxvYygoc2l6ZV90KU1BWF9DT01fTEVOR1RIKTsKKyAgICAgICAgaWYgKGNvbW1lbnRfYXJnID09IE5VTEwpCisgICAgICAgICAgRVJSRVhJVCgiSW5zdWZmaWNpZW50IG1lbW9yeSIpOworICAgICAgICBpZiAoc3RybGVuKGFyZ3ZbYXJnbl0pICsgMiA+PSAoc2l6ZV90KU1BWF9DT01fTEVOR1RIKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb21tZW50IHRleHQgbWF5IG5vdCBleGNlZWQgJXUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KU1BWF9DT01fTEVOR1RIKTsKKyAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyY3B5KGNvbW1lbnRfYXJnLCBhcmd2W2FyZ25dICsgMSk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICBjb21tZW50X2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpc3RybGVuKGNvbW1lbnRfYXJnKTsKKyAgICAgICAgICBpZiAoY29tbWVudF9sZW5ndGggPiAwICYmIGNvbW1lbnRfYXJnW2NvbW1lbnRfbGVuZ3RoIC0gMV0gPT0gJyInKSB7CisgICAgICAgICAgICBjb21tZW50X2FyZ1tjb21tZW50X2xlbmd0aCAtIDFdID0gJ1wwJzsgLyogemFwIHRlcm1pbmF0aW5nIHF1b3RlICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQorICAgICAgICAgICAgRVJSRVhJVCgiTWlzc2luZyBlbmRpbmcgcXVvdGUgbWFyayIpOworICAgICAgICAgIGlmIChzdHJsZW4oY29tbWVudF9hcmcpICsgc3RybGVuKGFyZ3ZbYXJnbl0pICsgMiA+PQorICAgICAgICAgICAgICAoc2l6ZV90KU1BWF9DT01fTEVOR1RIKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbW1lbnQgdGV4dCBtYXkgbm90IGV4Y2VlZCAldSBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClNQVhfQ09NX0xFTkdUSCk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgfQorICAgICAgICAgIHN0cmNhdChjb21tZW50X2FyZywgIiAiKTsKKyAgICAgICAgICBzdHJjYXQoY29tbWVudF9hcmcsIGFyZ3ZbYXJnbl0pOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHN0cmxlbihhcmd2W2FyZ25dKSA+PSAoc2l6ZV90KU1BWF9DT01fTEVOR1RIKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29tbWVudCB0ZXh0IG1heSBub3QgZXhjZWVkICV1IGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpTUFYX0NPTV9MRU5HVEgpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICBjb21tZW50X2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpc3RybGVuKGNvbW1lbnRfYXJnKTsKKyAgICB9IGVsc2UKKyAgICAgIHVzYWdlKCk7CisgIH0KKworICAvKiBDYW5ub3QgdXNlIGJvdGggLWNvbW1lbnQgYW5kIC1jZmlsZS4gKi8KKyAgaWYgKGNvbW1lbnRfYXJnICE9IE5VTEwgJiYgY29tbWVudF9maWxlICE9IE5VTEwpCisgICAgdXNhZ2UoKTsKKyAgLyogSWYgdGhlcmUgaXMgbmVpdGhlciAtY29tbWVudCBub3IgLWNmaWxlLCB3ZSB3aWxsIHJlYWQgdGhlIGNvbW1lbnQgdGV4dAorICAgKiBmcm9tIHN0ZGluOyBpbiB0aGlzIGNhc2UgdGhlcmUgTVVTVCBiZSBhbiBpbnB1dCBKUEVHIGZpbGUgbmFtZS4KKyAgICovCisgIGlmIChjb21tZW50X2FyZyA9PSBOVUxMICYmIGNvbW1lbnRfZmlsZSA9PSBOVUxMICYmIGFyZ24gPj0gYXJnYykKKyAgICB1c2FnZSgpOworCisgIC8qIE9wZW4gdGhlIGlucHV0IGZpbGUuICovCisgIGlmIChhcmduIDwgYXJnYykgeworICAgIGlmICgoaW5maWxlID0gZm9wZW4oYXJndlthcmduXSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgYXJndlthcmduXSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGRlZmF1bHQgaW5wdXQgZmlsZSBpcyBzdGRpbiAqLworI2lmZGVmIFVTRV9TRVRNT0RFICAgICAgICAgICAgICAvKiBuZWVkIHRvIGhhY2sgZmlsZSBtb2RlPyAqLworICAgIHNldG1vZGUoZmlsZW5vKHN0ZGluKSwgT19CSU5BUlkpOworI2VuZGlmCisjaWZkZWYgVVNFX0ZET1BFTiAgICAgICAgICAgICAgIC8qIG5lZWQgdG8gcmUtb3BlbiBpbiBiaW5hcnkgbW9kZT8gKi8KKyAgICBpZiAoKGluZmlsZSA9IGZkb3BlbihmaWxlbm8oc3RkaW4pLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gc3RkaW5cbiIsIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisjZWxzZQorICAgIGluZmlsZSA9IHN0ZGluOworI2VuZGlmCisgIH0KKworICAvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZS4gKi8KKyNpZmRlZiBUV09fRklMRV9DT01NQU5ETElORQorICAvKiBNdXN0IGhhdmUgZXhwbGljaXQgb3V0cHV0IGZpbGUgbmFtZSAqLworICBpZiAoYXJnbiAhPSBhcmdjIC0gMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG11c3QgbmFtZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgZmlsZVxuIiwgcHJvZ25hbWUpOworICAgIHVzYWdlKCk7CisgIH0KKyAgaWYgKChvdXRmaWxlID0gZm9wZW4oYXJndlthcmduICsgMV0sIFdSSVRFX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBwcm9nbmFtZSwgYXJndlthcmduICsgMV0pOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgfQorI2Vsc2UKKyAgLyogVW5peCBzdHlsZTogZXhwZWN0IHplcm8gb3Igb25lIGZpbGUgbmFtZSAqLworICBpZiAoYXJnbiA8IGFyZ2MgLSAxKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogb25seSBvbmUgaW5wdXQgZmlsZVxuIiwgcHJvZ25hbWUpOworICAgIHVzYWdlKCk7CisgIH0KKyAgLyogZGVmYXVsdCBvdXRwdXQgZmlsZSBpcyBzdGRvdXQgKi8KKyNpZmRlZiBVU0VfU0VUTU9ERSAgICAgICAgICAgICAgLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KKyAgc2V0bW9kZShmaWxlbm8oc3Rkb3V0KSwgT19CSU5BUlkpOworI2VuZGlmCisjaWZkZWYgVVNFX0ZET1BFTiAgICAgICAgICAgICAgIC8qIG5lZWQgdG8gcmUtb3BlbiBpbiBiaW5hcnkgbW9kZT8gKi8KKyAgaWYgKChvdXRmaWxlID0gZmRvcGVuKGZpbGVubyhzdGRvdXQpLCBXUklURV9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiBzdGRvdXRcbiIsIHByb2duYW1lKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKyNlbHNlCisgIG91dGZpbGUgPSBzdGRvdXQ7CisjZW5kaWYKKyNlbmRpZiAvKiBUV09fRklMRV9DT01NQU5ETElORSAqLworCisgIC8qIENvbGxlY3QgY29tbWVudCB0ZXh0IGZyb20gY29tbWVudF9maWxlIG9yIHN0ZGluLCBpZiBuZWNlc3NhcnkgKi8KKyAgaWYgKGNvbW1lbnRfYXJnID09IE5VTEwpIHsKKyAgICBGSUxFICpzcmNfZmlsZTsKKyAgICBpbnQgYzsKKworICAgIGNvbW1lbnRfYXJnID0gKGNoYXIgKiltYWxsb2MoKHNpemVfdClNQVhfQ09NX0xFTkdUSCk7CisgICAgaWYgKGNvbW1lbnRfYXJnID09IE5VTEwpCisgICAgICBFUlJFWElUKCJJbnN1ZmZpY2llbnQgbWVtb3J5Iik7CisgICAgY29tbWVudF9sZW5ndGggPSAwOworICAgIHNyY19maWxlID0gKGNvbW1lbnRfZmlsZSAhPSBOVUxMID8gY29tbWVudF9maWxlIDogc3RkaW4pOworICAgIHdoaWxlICgoYyA9IGdldGMoc3JjX2ZpbGUpKSAhPSBFT0YpIHsKKyAgICAgIGlmIChjb21tZW50X2xlbmd0aCA+PSAodW5zaWduZWQgaW50KU1BWF9DT01fTEVOR1RIKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29tbWVudCB0ZXh0IG1heSBub3QgZXhjZWVkICV1IGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpTUFYX0NPTV9MRU5HVEgpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICBjb21tZW50X2FyZ1tjb21tZW50X2xlbmd0aCsrXSA9IChjaGFyKWM7CisgICAgfQorICAgIGlmIChjb21tZW50X2ZpbGUgIT0gTlVMTCkKKyAgICAgIGZjbG9zZShjb21tZW50X2ZpbGUpOworICB9CisKKyAgLyogQ29weSBKUEVHIGhlYWRlcnMgdW50aWwgU09GbiBtYXJrZXI7CisgICAqIHdlIHdpbGwgaW5zZXJ0IHRoZSBuZXcgY29tbWVudCBtYXJrZXIganVzdCBiZWZvcmUgU09Gbi4KKyAgICogVGhpcyAoYSkgY2F1c2VzIHRoZSBuZXcgY29tbWVudCB0byBhcHBlYXIgYWZ0ZXIsIHJhdGhlciB0aGFuIGJlZm9yZSwKKyAgICogZXhpc3RpbmcgY29tbWVudHM7IGFuZCAoYikgZW5zdXJlcyB0aGF0IGNvbW1lbnRzIGNvbWUgYWZ0ZXIgYW55IEpGSUYKKyAgICogb3IgSkZYWCBtYXJrZXJzLCBhcyByZXF1aXJlZCBieSB0aGUgSkZJRiBzcGVjaWZpY2F0aW9uLgorICAgKi8KKyAgbWFya2VyID0gc2Nhbl9KUEVHX2hlYWRlcihrZWVwX0NPTSk7CisgIC8qIEluc2VydCB0aGUgbmV3IENPTSBtYXJrZXIsIGJ1dCBvbmx5IGlmIG5vbmVtcHR5IHRleHQgaGFzIGJlZW4gc3VwcGxpZWQgKi8KKyAgaWYgKGNvbW1lbnRfbGVuZ3RoID4gMCkgeworICAgIHdyaXRlX21hcmtlcihNX0NPTSk7CisgICAgd3JpdGVfMl9ieXRlcyhjb21tZW50X2xlbmd0aCArIDIpOworICAgIHdoaWxlIChjb21tZW50X2xlbmd0aCA+IDApIHsKKyAgICAgIHdyaXRlXzFfYnl0ZSgqY29tbWVudF9hcmcrKyk7CisgICAgICBjb21tZW50X2xlbmd0aC0tOworICAgIH0KKyAgfQorICAvKiBEdXBsaWNhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgc291cmNlIGZpbGUuCisgICAqIE5vdGUgdGhhdCBhbnkgQ09NIG1hcmtlcnMgb2NjdXJpbmcgYWZ0ZXIgU09GIHdpbGwgbm90IGJlIHRvdWNoZWQuCisgICAqLworICB3cml0ZV9tYXJrZXIobWFya2VyKTsKKyAgY29weV9yZXN0X29mX2ZpbGUoKTsKKworICAvKiBBbGwgZG9uZS4gKi8KKyAgZXhpdChFWElUX1NVQ0NFU1MpOworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dycHBtLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cnBwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOWEwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cnBwbS5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogd3JwcG0uYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogTW9kaWZpZWQgMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gd3JpdGUgb3V0cHV0IGltYWdlcyBpbiBQUE0vUEdNIGZvcm1hdC4KKyAqIFRoZSBleHRlbmRlZCAyLWJ5dGUtcGVyLXNhbXBsZSByYXcgUFBNL1BHTSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCisgKiBUaGUgUEJNUExVUyBsaWJyYXJ5IGlzIE5PVCByZXF1aXJlZCB0byBjb21waWxlIHRoaXMgc29mdHdhcmUKKyAqIChidXQgaXQgaXMgaGlnaGx5IHVzZWZ1bCBhcyBhIHNldCBvZiBQUE0gaW1hZ2UgbWFuaXB1bGF0aW9uIHByb2dyYW1zKS4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBtYXkgbmVlZCBtb2RpZmljYXRpb24gZm9yIG5vbi1Vbml4IGVudmlyb25tZW50cyBvcgorICogc3BlY2lhbGl6ZWQgYXBwbGljYXRpb25zLiAgQXMgdGhleSBzdGFuZCwgdGhleSBhc3N1bWUgb3V0cHV0IHRvCisgKiBhbiBvcmRpbmFyeSBzdGRpbyBzdHJlYW0uCisgKi8KKworI2luY2x1ZGUgImNteWsuaCIKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKworI2lmZGVmIFBQTV9TVVBQT1JURUQKKworCisvKgorICogRm9yIDEyLWJpdCBKUEVHIGRhdGEsIHdlIGVpdGhlciBkb3duc2NhbGUgdGhlIHZhbHVlcyB0byA4IGJpdHMKKyAqICh0byB3cml0ZSBzdGFuZGFyZCBieXRlLXBlci1zYW1wbGUgUFBNL1BHTSBmaWxlcyksIG9yIG91dHB1dAorICogbm9uc3RhbmRhcmQgd29yZC1wZXItc2FtcGxlIFBQTS9QR00gZmlsZXMuICBEb3duc2NhbGluZyBpcyBkb25lCisgKiBpZiBQUE1fTk9SQVdXT1JEIGlzIGRlZmluZWQgKHRoaXMgY2FuIGJlIGRvbmUgaW4gdGhlIE1ha2VmaWxlCisgKiBvciBpbiBqY29uZmlnLmgpLgorICogKFdoZW4gdGhlIGNvcmUgbGlicmFyeSBzdXBwb3J0cyBkYXRhIHByZWNpc2lvbiByZWR1Y3Rpb24sIGEgY2xlYW5lcgorICogaW1wbGVtZW50YXRpb24gd2lsbCBiZSB0byBhc2sgZm9yIHRoYXQgaW5zdGVhZC4pCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIFBVVFBQTVNBTVBMRShwdHIsIHYpICAqcHRyKysgPSAoY2hhcikodikKKyNkZWZpbmUgQllURVNQRVJTQU1QTEUgIDEKKyNkZWZpbmUgUFBNX01BWFZBTCAgMjU1CisjZWxzZQorI2lmZGVmIFBQTV9OT1JBV1dPUkQKKyNkZWZpbmUgUFVUUFBNU0FNUExFKHB0ciwgdikgICpwdHIrKyA9IChjaGFyKSgodikgPj4gKEJJVFNfSU5fSlNBTVBMRSAtIDgpKQorI2RlZmluZSBCWVRFU1BFUlNBTVBMRSAgMQorI2RlZmluZSBQUE1fTUFYVkFMICAyNTUKKyNlbHNlCisvKiBUaGUgd29yZC1wZXItc2FtcGxlIGZvcm1hdCBhbHdheXMgcHV0cyB0aGUgTVNCIGZpcnN0LiAqLworI2RlZmluZSBQVVRQUE1TQU1QTEUocHRyLCB2KSB7IFwKKyAgcmVnaXN0ZXIgaW50IHZhbF8gPSB2OyBcCisgICpwdHIrKyA9IChjaGFyKSgodmFsXyA+PiA4KSAmIDB4RkYpOyBcCisgICpwdHIrKyA9IChjaGFyKSh2YWxfICYgMHhGRik7IFwKK30KKyNkZWZpbmUgQllURVNQRVJTQU1QTEUgIDIKKyNkZWZpbmUgUFBNX01BWFZBTCAgKCgxIDw8IEJJVFNfSU5fSlNBTVBMRSkgLSAxKQorI2VuZGlmCisjZW5kaWYKKworCisvKgorICogV2hlbiBKU0FNUExFIGlzIHRoZSBzYW1lIHNpemUgYXMgY2hhciwgd2UgY2FuIGp1c3QgZndyaXRlKCkgdGhlCisgKiBkZWNvbXByZXNzZWQgZGF0YSB0byB0aGUgUFBNIG9yIFBHTSBmaWxlLgorICovCisKKworLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgZGVzdGluYXRpb24gb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0IHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIFVzdWFsbHkgdGhlc2UgdHdvIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIHBsYWNlOiAqLworICBjaGFyICppb2J1ZmZlcjsgICAgICAgICAgICAgICAvKiBmd3JpdGUncyBJL08gYnVmZmVyICovCisgIEpTQU1QUk9XIHBpeHJvdzsgICAgICAgICAgICAgIC8qIGRlY29tcHJlc3NvciBvdXRwdXQgYnVmZmVyICovCisgIHNpemVfdCBidWZmZXJfd2lkdGg7ICAgICAgICAgIC8qIHdpZHRoIG9mIEkvTyBidWZmZXIgKi8KKyAgSkRJTUVOU0lPTiBzYW1wbGVzX3Blcl9yb3c7ICAgLyogSlNBTVBMRXMgcGVyIG91dHB1dCByb3cgKi8KK30gcHBtX2Rlc3Rfc3RydWN0OworCit0eXBlZGVmIHBwbV9kZXN0X3N0cnVjdCAqcHBtX2Rlc3RfcHRyOworCisKKy8qCisgKiBXcml0ZSBzb21lIHBpeGVsIGRhdGEuCisgKiBJbiB0aGlzIG1vZHVsZSByb3dzX3N1cHBsaWVkIHdpbGwgYWx3YXlzIGJlIDEuCisgKgorICogcHV0X3BpeGVsX3Jvd3MgaGFuZGxlcyB0aGUgIm5vcm1hbCIgOC1iaXQgY2FzZSB3aGVyZSB0aGUgZGVjb21wcmVzc29yCisgKiBvdXRwdXQgYnVmZmVyIGlzIHBoeXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIGZ3cml0ZSBidWZmZXIuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwdXRfcGl4ZWxfcm93cyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKK3sKKyAgcHBtX2Rlc3RfcHRyIGRlc3QgPSAocHBtX2Rlc3RfcHRyKWRpbmZvOworCisgICh2b2lkKUpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBkZXN0LT5pb2J1ZmZlciwgZGVzdC0+YnVmZmVyX3dpZHRoKTsKK30KKworCisvKgorICogVGhpcyBjb2RlIGlzIHVzZWQgd2hlbiB3ZSBoYXZlIHRvIGNvcHkgdGhlIGRhdGEgYW5kIGFwcGx5IGEgcGl4ZWwKKyAqIGZvcm1hdCB0cmFuc2xhdGlvbi4gIFR5cGljYWxseSB0aGlzIG9ubHkgaGFwcGVucyBpbiAxMi1iaXQgbW9kZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2NvcHlfcGl4ZWxfcm93cyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCit7CisgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cilkaW5mbzsKKyAgcmVnaXN0ZXIgY2hhciAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisjaWYgQklUU19JTl9KU0FNUExFICE9IDggfHwgKCFkZWZpbmVkKEhBVkVfVU5TSUdORURfQ0hBUikgJiYgIWRlZmluZWQoX19DSEFSX1VOU0lHTkVEX18pKQorICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyNlbmRpZgorCisgIHB0ciA9IGRlc3QtPnB1Yi5idWZmZXJbMF07CisgIGJ1ZmZlcnB0ciA9IGRlc3QtPmlvYnVmZmVyOworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4ICYmIChkZWZpbmVkKEhBVkVfVU5TSUdORURfQ0hBUikgfHwgZGVmaW5lZChfX0NIQVJfVU5TSUdORURfXykpCisgIE1FTUNPUFkoYnVmZmVycHRyLCBwdHIsIGRlc3QtPnNhbXBsZXNfcGVyX3Jvdyk7CisjZWxzZQorICBmb3IgKGNvbCA9IGRlc3QtPnNhbXBsZXNfcGVyX3JvdzsgY29sID4gMDsgY29sLS0pIHsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCBHRVRKU0FNUExFKCpwdHIrKykpOworICB9CisjZW5kaWYKKyAgKHZvaWQpSkZXUklURShkZXN0LT5wdWIub3V0cHV0X2ZpbGUsIGRlc3QtPmlvYnVmZmVyLCBkZXN0LT5idWZmZXJfd2lkdGgpOworfQorCisKKy8qCisgKiBDb252ZXJ0IGV4dGVuZGVkIFJHQiB0byBSR0IuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwdXRfcmdiKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLCBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCit7CisgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cilkaW5mbzsKKyAgcmVnaXN0ZXIgY2hhciAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICByZWdpc3RlciBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IGdpbmRleCA9IHJnYl9ncmVlbltjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKyAgcmVnaXN0ZXIgaW50IGJpbmRleCA9IHJnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICByZWdpc3RlciBpbnQgcHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworCisgIHB0ciA9IGRlc3QtPnB1Yi5idWZmZXJbMF07CisgIGJ1ZmZlcnB0ciA9IGRlc3QtPmlvYnVmZmVyOworICBmb3IgKGNvbCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgUFVUUFBNU0FNUExFKGJ1ZmZlcnB0ciwgcHRyW3JpbmRleF0pOworICAgIFBVVFBQTVNBTVBMRShidWZmZXJwdHIsIHB0cltnaW5kZXhdKTsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCBwdHJbYmluZGV4XSk7CisgICAgcHRyICs9IHBzOworICB9CisgICh2b2lkKUpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBkZXN0LT5pb2J1ZmZlciwgZGVzdC0+YnVmZmVyX3dpZHRoKTsKK30KKworCisvKgorICogQ29udmVydCBDTVlLIHRvIFJHQi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3B1dF9jbXlrKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAorICAgICAgICAgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQoreworICBwcG1fZGVzdF9wdHIgZGVzdCA9IChwcG1fZGVzdF9wdHIpZGluZm87CisgIHJlZ2lzdGVyIGNoYXIgKmJ1ZmZlcnB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKworICBwdHIgPSBkZXN0LT5wdWIuYnVmZmVyWzBdOworICBidWZmZXJwdHIgPSBkZXN0LT5pb2J1ZmZlcjsKKyAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIEpTQU1QTEUgciwgZywgYiwgYyA9ICpwdHIrKywgbSA9ICpwdHIrKywgeSA9ICpwdHIrKywgayA9ICpwdHIrKzsKKyAgICBjbXlrX3RvX3JnYihjLCBtLCB5LCBrLCAmciwgJmcsICZiKTsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCByKTsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCBnKTsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCBiKTsKKyAgfQorICAodm9pZClKRldSSVRFKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSwgZGVzdC0+aW9idWZmZXIsIGRlc3QtPmJ1ZmZlcl93aWR0aCk7Cit9CisKKworLyoKKyAqIFdyaXRlIHNvbWUgcGl4ZWwgZGF0YSB3aGVuIGNvbG9yIHF1YW50aXphdGlvbiBpcyBpbiBlZmZlY3QuCisgKiBXZSBoYXZlIHRvIGRlbWFwIHRoZSBjb2xvciBpbmRleCB2YWx1ZXMgdG8gc3RyYWlnaHQgZGF0YS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3B1dF9kZW1hcHBlZF9yZ2Ioal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKK3sKKyAgcHBtX2Rlc3RfcHRyIGRlc3QgPSAocHBtX2Rlc3RfcHRyKWRpbmZvOworICByZWdpc3RlciBjaGFyICpidWZmZXJwdHI7CisgIHJlZ2lzdGVyIGludCBwaXh2YWw7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgY29sb3JfbWFwMCA9IGNpbmZvLT5jb2xvcm1hcFswXTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgY29sb3JfbWFwMSA9IGNpbmZvLT5jb2xvcm1hcFsxXTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgY29sb3JfbWFwMiA9IGNpbmZvLT5jb2xvcm1hcFsyXTsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisKKyAgcHRyID0gZGVzdC0+cHViLmJ1ZmZlclswXTsKKyAgYnVmZmVycHRyID0gZGVzdC0+aW9idWZmZXI7CisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICBwaXh2YWwgPSBHRVRKU0FNUExFKCpwdHIrKyk7CisgICAgUFVUUFBNU0FNUExFKGJ1ZmZlcnB0ciwgR0VUSlNBTVBMRShjb2xvcl9tYXAwW3BpeHZhbF0pKTsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCBHRVRKU0FNUExFKGNvbG9yX21hcDFbcGl4dmFsXSkpOworICAgIFBVVFBQTVNBTVBMRShidWZmZXJwdHIsIEdFVEpTQU1QTEUoY29sb3JfbWFwMltwaXh2YWxdKSk7CisgIH0KKyAgKHZvaWQpSkZXUklURShkZXN0LT5wdWIub3V0cHV0X2ZpbGUsIGRlc3QtPmlvYnVmZmVyLCBkZXN0LT5idWZmZXJfd2lkdGgpOworfQorCisKK01FVEhPRERFRih2b2lkKQorcHV0X2RlbWFwcGVkX2dyYXkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCit7CisgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cilkaW5mbzsKKyAgcmVnaXN0ZXIgY2hhciAqYnVmZmVycHRyOworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGNvbG9yX21hcCA9IGNpbmZvLT5jb2xvcm1hcFswXTsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisKKyAgcHRyID0gZGVzdC0+cHViLmJ1ZmZlclswXTsKKyAgYnVmZmVycHRyID0gZGVzdC0+aW9idWZmZXI7CisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKKyAgICBQVVRQUE1TQU1QTEUoYnVmZmVycHRyLCBHRVRKU0FNUExFKGNvbG9yX21hcFtHRVRKU0FNUExFKCpwdHIrKyldKSk7CisgIH0KKyAgKHZvaWQpSkZXUklURShkZXN0LT5wdWIub3V0cHV0X2ZpbGUsIGRlc3QtPmlvYnVmZmVyLCBkZXN0LT5idWZmZXJfd2lkdGgpOworfQorCisKKy8qCisgKiBTdGFydHVwOiB3cml0ZSB0aGUgZmlsZSBoZWFkZXIuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9vdXRwdXRfcHBtKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQoreworICBwcG1fZGVzdF9wdHIgZGVzdCA9IChwcG1fZGVzdF9wdHIpZGluZm87CisKKyAgLyogRW1pdCBmaWxlIGhlYWRlciAqLworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfR1JBWVNDQUxFOgorICAgIC8qIGVtaXQgaGVhZGVyIGZvciByYXcgUEdNIGZvcm1hdCAqLworICAgIGZwcmludGYoZGVzdC0+cHViLm91dHB1dF9maWxlLCAiUDVcbiVsZCAlbGRcbiVkXG4iLAorICAgICAgICAgICAgKGxvbmcpY2luZm8tPm91dHB1dF93aWR0aCwgKGxvbmcpY2luZm8tPm91dHB1dF9oZWlnaHQsIFBQTV9NQVhWQUwpOworICAgIGJyZWFrOworICBjYXNlIEpDU19SR0I6CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfQkdSOgorICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9YUkdCOgorICBjYXNlIEpDU19FWFRfUkdCQToKKyAgY2FzZSBKQ1NfRVhUX0JHUkE6CisgIGNhc2UgSkNTX0VYVF9BQkdSOgorICBjYXNlIEpDU19FWFRfQVJHQjoKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgICAvKiBlbWl0IGhlYWRlciBmb3IgcmF3IFBQTSBmb3JtYXQgKi8KKyAgICBmcHJpbnRmKGRlc3QtPnB1Yi5vdXRwdXRfZmlsZSwgIlA2XG4lbGQgJWxkXG4lZFxuIiwKKyAgICAgICAgICAgIChsb25nKWNpbmZvLT5vdXRwdXRfd2lkdGgsIChsb25nKWNpbmZvLT5vdXRwdXRfaGVpZ2h0LCBQUE1fTUFYVkFMKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1BQTV9DT0xPUlNQQUNFKTsKKyAgfQorfQorCisKKy8qCisgKiBGaW5pc2ggdXAgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9vdXRwdXRfcHBtKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQoreworICAvKiBNYWtlIHN1cmUgd2Ugd3JvdGUgdGhlIG91dHB1dCBmaWxlIE9LICovCisgIGZmbHVzaChkaW5mby0+b3V0cHV0X2ZpbGUpOworICBpZiAoZmVycm9yKGRpbmZvLT5vdXRwdXRfZmlsZSkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKK30KKworCisvKgorICogUmUtY2FsY3VsYXRlIGJ1ZmZlciBkaW1lbnNpb25zIGJhc2VkIG9uIG91dHB1dCBkaW1lbnNpb25zLgorICovCisKK01FVEhPRERFRih2b2lkKQorY2FsY19idWZmZXJfZGltZW5zaW9uc19wcG0oal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8pCit7CisgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cilkaW5mbzsKKworICBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQorICAgIGRlc3QtPnNhbXBsZXNfcGVyX3JvdyA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7CisgIGVsc2UKKyAgICBkZXN0LT5zYW1wbGVzX3Blcl9yb3cgPSBjaW5mby0+b3V0cHV0X3dpZHRoICogMzsKKyAgZGVzdC0+YnVmZmVyX3dpZHRoID0gZGVzdC0+c2FtcGxlc19wZXJfcm93ICogKEJZVEVTUEVSU0FNUExFICogc2l6ZW9mKGNoYXIpKTsKK30KKworCisvKgorICogVGhlIG1vZHVsZSBzZWxlY3Rpb24gcm91dGluZSBmb3IgUFBNIGZvcm1hdCBvdXRwdXQuCisgKi8KKworR0xPQkFMKGRqcGVnX2Rlc3RfcHRyKQoramluaXRfd3JpdGVfcHBtKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIHBwbV9kZXN0X3B0ciBkZXN0OworCisgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCwgZmlsbCBpbiBtZXRob2QgcG9pbnRlcnMgKi8KKyAgZGVzdCA9IChwcG1fZGVzdF9wdHIpCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBwbV9kZXN0X3N0cnVjdCkpOworICBkZXN0LT5wdWIuc3RhcnRfb3V0cHV0ID0gc3RhcnRfb3V0cHV0X3BwbTsKKyAgZGVzdC0+cHViLmZpbmlzaF9vdXRwdXQgPSBmaW5pc2hfb3V0cHV0X3BwbTsKKyAgZGVzdC0+cHViLmNhbGNfYnVmZmVyX2RpbWVuc2lvbnMgPSBjYWxjX2J1ZmZlcl9kaW1lbnNpb25zX3BwbTsKKworICAvKiBDYWxjdWxhdGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgc28gd2UgY2FuIGFsbG9jYXRlIHNwYWNlICovCisgIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyhjaW5mbyk7CisKKyAgLyogQ3JlYXRlIHBoeXNpY2FsIEkvTyBidWZmZXIgKi8KKyAgZGVzdC0+cHViLmNhbGNfYnVmZmVyX2RpbWVuc2lvbnMoY2luZm8sIChkanBlZ19kZXN0X3B0cilkZXN0KTsKKyAgZGVzdC0+aW9idWZmZXIgPSAoY2hhciAqKSgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLCBkZXN0LT5idWZmZXJfd2lkdGgpOworCisgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzIHx8IEJJVFNfSU5fSlNBTVBMRSAhPSA4IHx8CisgICAgICBzaXplb2YoSlNBTVBMRSkgIT0gc2l6ZW9mKGNoYXIpIHx8CisgICAgICAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfRVhUX1JHQgorI2lmIFJHQl9SRUQgPT0gMCAmJiBSR0JfR1JFRU4gPT0gMSAmJiBSR0JfQkxVRSA9PSAyICYmIFJHQl9QSVhFTFNJWkUgPT0gMworICAgICAgICYmIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQgorI2VuZGlmCisgICAgICApKSB7CisgICAgLyogV2hlbiBxdWFudGl6aW5nLCB3ZSBuZWVkIGFuIG91dHB1dCBidWZmZXIgZm9yIGNvbG9ybWFwIGluZGV4ZXMKKyAgICAgKiB0aGF0J3Mgc2VwYXJhdGUgZnJvbSB0aGUgcGh5c2ljYWwgSS9PIGJ1ZmZlci4gIFdlIGFsc28gbmVlZCBhCisgICAgICogc2VwYXJhdGUgYnVmZmVyIGlmIHBpeGVsIGZvcm1hdCB0cmFuc2xhdGlvbiBtdXN0IHRha2UgcGxhY2UuCisgICAgICovCisgICAgZGVzdC0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICAgKChqX2NvbW1vbl9wdHIpY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMsIChKRElNRU5TSU9OKTEpOworICAgIGRlc3QtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKKyAgICBpZiAoSXNFeHRSR0IoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkpCisgICAgICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBwdXRfcmdiOworICAgIGVsc2UgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspCisgICAgICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBwdXRfY215azsKKyAgICBlbHNlIGlmICghY2luZm8tPnF1YW50aXplX2NvbG9ycykKKyAgICAgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IGNvcHlfcGl4ZWxfcm93czsKKyAgICBlbHNlIGlmIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpCisgICAgICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBwdXRfZGVtYXBwZWRfZ3JheTsKKyAgICBlbHNlCisgICAgICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBwdXRfZGVtYXBwZWRfcmdiOworICB9IGVsc2UgeworICAgIC8qIFdlIHdpbGwgZndyaXRlKCkgZGlyZWN0bHkgZnJvbSBkZWNvbXByZXNzb3Igb3V0cHV0IGJ1ZmZlci4gKi8KKyAgICAvKiBTeW50aGVzaXplIGEgSlNBTVBBUlJBWSBwb2ludGVyIHN0cnVjdHVyZSAqLworICAgIGRlc3QtPnBpeHJvdyA9IChKU0FNUFJPVylkZXN0LT5pb2J1ZmZlcjsKKyAgICBkZXN0LT5wdWIuYnVmZmVyID0gJmRlc3QtPnBpeHJvdzsKKyAgICBkZXN0LT5wdWIuYnVmZmVyX2hlaWdodCA9IDE7CisgICAgZGVzdC0+cHViLnB1dF9waXhlbF9yb3dzID0gcHV0X3BpeGVsX3Jvd3M7CisgIH0KKworICByZXR1cm4gKGRqcGVnX2Rlc3RfcHRyKWRlc3Q7Cit9CisKKyNlbmRpZiAvKiBQUE1fU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cnJsZS5jIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd3JybGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzk4ZWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vd3JybGUuYwpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIHdycmxlLmMKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMjAxNywgRC4gUi4gQ29tbWFuZGVyLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRS5pamcKKyAqIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRvIHdyaXRlIG91dHB1dCBpbWFnZXMgaW4gUkxFIGZvcm1hdC4KKyAqIFRoZSBVdGFoIFJhc3RlciBUb29sa2l0IGxpYnJhcnkgaXMgcmVxdWlyZWQgKHZlcnNpb24gMy4xIG9yIGxhdGVyKS4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBtYXkgbmVlZCBtb2RpZmljYXRpb24gZm9yIG5vbi1Vbml4IGVudmlyb25tZW50cyBvcgorICogc3BlY2lhbGl6ZWQgYXBwbGljYXRpb25zLiAgQXMgdGhleSBzdGFuZCwgdGhleSBhc3N1bWUgb3V0cHV0IHRvCisgKiBhbiBvcmRpbmFyeSBzdGRpbyBzdHJlYW0uCisgKgorICogQmFzZWQgb24gY29kZSBjb250cmlidXRlZCBieSBNaWtlIExpamV3c2tpLAorICogd2l0aCB1cGRhdGVzIGZyb20gUm9iZXJ0IEh1dGNoaW5zb24uCisgKi8KKworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworCisjaWZkZWYgUkxFX1NVUFBPUlRFRAorCisvKiBybGUuaCBpcyBwcm92aWRlZCBieSB0aGUgVXRhaCBSYXN0ZXIgVG9vbGtpdC4gKi8KKworI2luY2x1ZGUgPHJsZS5oPgorCisvKgorICogV2UgYXNzdW1lIHRoYXQgSlNBTVBMRSBoYXMgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gYXMgcmxlX3BpeGVsLAorICogdG8gd2l0LCAidW5zaWduZWQgY2hhciIuICBIZW5jZSB3ZSBjYW4ndCBjb3BlIHdpdGggMTItIG9yIDE2LWJpdCBzYW1wbGVzLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgIT0gOAorICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4LWJpdCBKU0FNUExFcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisjZW5kaWYKKworCisvKgorICogU2luY2UgUkxFIHN0b3JlcyBzY2FubGluZXMgYm90dG9tLXRvLXRvcCwgd2UgaGF2ZSB0byBpbnZlcnQgdGhlIGltYWdlCisgKiBmcm9tIEpQRUcncyB0b3AtdG8tYm90dG9tIG9yZGVyLiAgVG8gZG8gdGhpcywgd2Ugc2F2ZSB0aGUgb3V0Z29pbmcgZGF0YQorICogaW4gYSB2aXJ0dWFsIGFycmF5IGR1cmluZyBwdXRfcGl4ZWxfcm93IGNhbGxzLCB0aGVuIGFjdHVhbGx5IGVtaXQgdGhlCisgKiBSTEUgZmlsZSBkdXJpbmcgZmluaXNoX291dHB1dC4KKyAqLworCisKKy8qCisgKiBGb3Igbm93LCBpZiB3ZSBlbWl0IGFuIFJMRSBjb2xvciBtYXAgdGhlbiBpdCBpcyBhbHdheXMgMjU2IGVudHJpZXMgbG9uZywKKyAqIHRob3VnaCBub3QgYWxsIG9mIHRoZSBlbnRyaWVzIG5lZWQgYmUgdXNlZC4KKyAqLworCisjZGVmaW5lIENNQVBCSVRTICAgICAgICA4CisjZGVmaW5lIENNQVBMRU5HVEggICAgICAoMSA8PCAoQ01BUEJJVFMpKQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBqdmlydF9zYXJyYXlfcHRyIGltYWdlOyAgICAgICAvKiB2aXJ0dWFsIGFycmF5IHRvIHN0b3JlIHRoZSBvdXRwdXQgaW1hZ2UgKi8KKyAgcmxlX21hcCAqY29sb3JtYXA7ICAgICAgICAgICAgLyogUkxFLXN0eWxlIGNvbG9yIG1hcCwgb3IgTlVMTCBpZiBub25lICovCisgIHJsZV9waXhlbCAqKnJsZV9yb3c7ICAgICAgICAgIC8qIFRvIHBhc3Mgcm93cyB0byBybGVfcHV0cm93KCkgKi8KKworfSBybGVfZGVzdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgcmxlX2Rlc3Rfc3RydWN0ICpybGVfZGVzdF9wdHI7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYodm9pZCkgcmxlX3B1dF9waXhlbF9yb3dzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpOworCisKKy8qCisgKiBXcml0ZSB0aGUgZmlsZSBoZWFkZXIuCisgKgorICogSW4gdGhpcyBtb2R1bGUgaXQncyBlYXNpZXIgdG8gd2FpdCB0aWxsIGZpbmlzaF9vdXRwdXQgdG8gd3JpdGUgYW55dGhpbmcuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9vdXRwdXRfcmxlKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQoreworICBybGVfZGVzdF9wdHIgZGVzdCA9IChybGVfZGVzdF9wdHIpZGluZm87CisgIHNpemVfdCBjbWFwc2l6ZTsKKyAgaW50IGksIGNpOworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MgPSAoY2RfcHJvZ3Jlc3NfcHRyKWNpbmZvLT5wcm9ncmVzczsKKyNlbmRpZgorCisgIC8qCisgICAqIE1ha2Ugc3VyZSB0aGUgaW1hZ2UgY2FuIGJlIHN0b3JlZCBpbiBSTEUgZm9ybWF0LgorICAgKgorICAgKiAtIFJMRSBzdG9yZXMgaW1hZ2UgZGltZW5zaW9ucyBhcyAqc2lnbmVkKiAxNiBiaXQgaW50ZWdlcnMuICBKUEVHCisgICAqICAgdXNlcyB1bnNpZ25lZCwgc28gd2UgaGF2ZSB0byBjaGVjayB0aGUgd2lkdGguCisgICAqCisgICAqIC0gQ29sb3JzcGFjZSBpcyBleHBlY3RlZCB0byBiZSBncmF5c2NhbGUgb3IgUkdCLgorICAgKgorICAgKiAtIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgKGNvbXBvbmVudHMpIGlzIGV4cGVjdGVkIHRvIGJlIDEgKGdyYXlzY2FsZS8KKyAgICogICBwc2V1ZG9jb2xvcikgb3IgMyAodHJ1ZWNvbG9yL2RpcmVjdGNvbG9yKS4KKyAgICogICAoY291bGQgYmUgMiBvciA0IGlmIHVzaW5nIGFuIGFscGhhIGNoYW5uZWwsIGJ1dCB3ZSBhcmVuJ3QpCisgICAqLworCisgIGlmIChjaW5mby0+b3V0cHV0X3dpZHRoID4gMzI3NjcgfHwgY2luZm8tPm91dHB1dF9oZWlnaHQgPiAzMjc2NykKKyAgICBFUlJFWElUMihjaW5mbywgSkVSUl9STEVfRElNRU5TSU9OUywgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICBjaW5mby0+b3V0cHV0X2hlaWdodCk7CisKKyAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0dSQVlTQ0FMRSAmJgorICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfUkdCKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUkxFX0NPTE9SU1BBQ0UpOworCisgIGlmIChjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMgIT0gMSAmJiBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMgIT0gMykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9STEVfVE9PTUFOWUNIQU5ORUxTLCBjaW5mby0+bnVtX2NvbXBvbmVudHMpOworCisgIC8qIENvbnZlcnQgY29sb3JtYXAsIGlmIGFueSwgdG8gUkxFIGZvcm1hdC4gKi8KKworICBkZXN0LT5jb2xvcm1hcCA9IE5VTEw7CisKKyAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpIHsKKyAgICAvKiBBbGxvY2F0ZSBzdG9yYWdlIGZvciBSTEUtc3R5bGUgY21hcCwgemVybyBhbnkgZXh0cmEgZW50cmllcyAqLworICAgIGNtYXBzaXplID0gY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzICogQ01BUExFTkdUSCAqIHNpemVvZihybGVfbWFwKTsKKyAgICBkZXN0LT5jb2xvcm1hcCA9IChybGVfbWFwICopKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwgY21hcHNpemUpOworICAgIE1FTVpFUk8oZGVzdC0+Y29sb3JtYXAsIGNtYXBzaXplKTsKKworICAgIC8qIFNhdmUgYXdheSBkYXRhIGluIFJMRSBmb3JtYXQgLS0tIG5vdGUgOC1iaXQgbGVmdCBzaGlmdCEgKi8KKyAgICAvKiBTaGlmdGluZyB3b3VsZCBuZWVkIGFkanVzdG1lbnQgZm9yIEpTQU1QTEVzIHdpZGVyIHRoYW4gOCBiaXRzLiAqLworICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsgY2krKykgeworICAgICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5hY3R1YWxfbnVtYmVyX29mX2NvbG9yczsgaSsrKSB7CisgICAgICAgIGRlc3QtPmNvbG9ybWFwW2NpICogQ01BUExFTkdUSCArIGldID0KKyAgICAgICAgICBHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFtjaV1baV0pIDw8IDg7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogU2V0IHRoZSBvdXRwdXQgYnVmZmVyIHRvIHRoZSBmaXJzdCByb3cgKi8KKyAgZGVzdC0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBkZXN0LT5pbWFnZSwgKEpESU1FTlNJT04pMCwgKEpESU1FTlNJT04pMSwgVFJVRSk7CisgIGRlc3QtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKKworICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBybGVfcHV0X3BpeGVsX3Jvd3M7CisKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgaWYgKHByb2dyZXNzICE9IE5VTEwpIHsKKyAgICBwcm9ncmVzcy0+dG90YWxfZXh0cmFfcGFzc2VzKys7ICAvKiBjb3VudCBmaWxlIHdyaXRpbmcgYXMgc2VwYXJhdGUgcGFzcyAqLworICB9CisjZW5kaWYKK30KKworCisvKgorICogV3JpdGUgc29tZSBwaXhlbCBkYXRhLgorICoKKyAqIFRoaXMgcm91dGluZSBqdXN0IHNhdmVzIHRoZSBkYXRhIGF3YXkgaW4gYSB2aXJ0dWFsIGFycmF5LgorICovCisKK01FVEhPRERFRih2b2lkKQorcmxlX3B1dF9waXhlbF9yb3dzKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKK3sKKyAgcmxlX2Rlc3RfcHRyIGRlc3QgPSAocmxlX2Rlc3RfcHRyKWRpbmZvOworCisgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgY2luZm8tPm91dHB1dF9oZWlnaHQpIHsKKyAgICBkZXN0LT5wdWIuYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgZGVzdC0+aW1hZ2UsCisgICAgICAgY2luZm8tPm91dHB1dF9zY2FubGluZSwgKEpESU1FTlNJT04pMSwgVFJVRSk7CisgIH0KK30KKworLyoKKyAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICoKKyAqIEhlcmUgaXMgd2hlcmUgd2UgcmVhbGx5IG91dHB1dCB0aGUgUkxFIGZpbGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfb3V0cHV0X3JsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbykKK3sKKyAgcmxlX2Rlc3RfcHRyIGRlc3QgPSAocmxlX2Rlc3RfcHRyKWRpbmZvOworICBybGVfaGRyIGhlYWRlcjsgICAgICAgICAgICAgICAvKiBPdXRwdXQgZmlsZSBpbmZvcm1hdGlvbiAqLworICBybGVfcGl4ZWwgKipybGVfcm93LCAqcmVkLCAqZ3JlZW4sICpibHVlOworICBKU0FNUFJPVyBvdXRwdXRfcm93OworICBjaGFyIGNtYXBjb21tZW50WzgwXTsKKyAgaW50IHJvdywgY29sOworICBpbnQgY2k7CisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGNkX3Byb2dyZXNzX3B0ciBwcm9ncmVzcyA9IChjZF9wcm9ncmVzc19wdHIpY2luZm8tPnByb2dyZXNzOworI2VuZGlmCisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgaGVhZGVyIGluZm8gKi8KKyAgaGVhZGVyID0gKnJsZV9oZHJfaW5pdChOVUxMKTsKKyAgaGVhZGVyLnJsZV9maWxlID0gZGVzdC0+cHViLm91dHB1dF9maWxlOworICBoZWFkZXIueG1pbiAgICAgPSAwOworICBoZWFkZXIueG1heCAgICAgPSBjaW5mby0+b3V0cHV0X3dpZHRoICAtIDE7CisgIGhlYWRlci55bWluICAgICA9IDA7CisgIGhlYWRlci55bWF4ICAgICA9IGNpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gMTsKKyAgaGVhZGVyLmFscGhhICAgID0gMDsKKyAgaGVhZGVyLm5jb2xvcnMgID0gY2luZm8tPm91dHB1dF9jb21wb25lbnRzOworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICBSTEVfU0VUX0JJVChoZWFkZXIsIGNpKTsKKyAgfQorICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgeworICAgIGhlYWRlci5uY21hcCAgID0gY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOworICAgIGhlYWRlci5jbWFwbGVuID0gQ01BUEJJVFM7CisgICAgaGVhZGVyLmNtYXAgICAgPSBkZXN0LT5jb2xvcm1hcDsKKyAgICAvKiBBZGQgYSBjb21tZW50IHRvIHRoZSBvdXRwdXQgaW1hZ2Ugd2l0aCB0aGUgdHJ1ZSBjb2xvcm1hcCBsZW5ndGguICovCisgICAgc3ByaW50ZihjbWFwY29tbWVudCwgImNvbG9yX21hcF9sZW5ndGg9JWQiLAorICAgICAgICAgICAgY2luZm8tPmFjdHVhbF9udW1iZXJfb2ZfY29sb3JzKTsKKyAgICBybGVfcHV0Y29tKGNtYXBjb21tZW50LCAmaGVhZGVyKTsKKyAgfQorCisgIC8qIEVtaXQgdGhlIFJMRSBoZWFkZXIgYW5kIGNvbG9yIG1hcCAoaWYgYW55KSAqLworICBybGVfcHV0X3NldHVwKCZoZWFkZXIpOworCisgIC8qIE5vdyBvdXRwdXQgdGhlIFJMRSBkYXRhIGZyb20gb3VyIHZpcnR1YWwgYXJyYXkuCisgICAqIFdlIGFzc3VtZSBoZXJlIHRoYXQgcmxlX3BpeGVsIGlzIHJlcHJlc2VudGVkIHRoZSBzYW1lIGFzIEpTQU1QTEUuCisgICAqLworCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGlmIChwcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2xpbWl0ID0gY2luZm8tPm91dHB1dF9oZWlnaHQ7CisgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2NvdW50ZXIgPSAwOworICAgICgqcHJvZ3Jlc3MtPnB1Yi5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgIH0KKyNlbmRpZgorCisgIGlmIChjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMgPT0gMSkgeworICAgIGZvciAocm93ID0gY2luZm8tPm91dHB1dF9oZWlnaHQgLSAxOyByb3cgPj0gMDsgcm93LS0pIHsKKyAgICAgIHJsZV9yb3cgPSAocmxlX3BpeGVsICoqKSgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorICAgICAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgZGVzdC0+aW1hZ2UsCisgICAgICAgICAoSkRJTUVOU0lPTilyb3csIChKRElNRU5TSU9OKTEsIEZBTFNFKTsKKyAgICAgIHJsZV9wdXRyb3cocmxlX3JvdywgKGludCljaW5mby0+b3V0cHV0X3dpZHRoLCAmaGVhZGVyKTsKKyNpZmRlZiBQUk9HUkVTU19SRVBPUlQKKyAgICAgIGlmIChwcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgICAgIHByb2dyZXNzLT5wdWIucGFzc19jb3VudGVyKys7CisgICAgICAgICgqcHJvZ3Jlc3MtPnB1Yi5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgICAgICB9CisjZW5kaWYKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yIChyb3cgPSBjaW5mby0+b3V0cHV0X2hlaWdodCAtIDE7IHJvdyA+PSAwOyByb3ctLSkgeworICAgICAgcmxlX3JvdyA9IChybGVfcGl4ZWwgKiopZGVzdC0+cmxlX3JvdzsKKyAgICAgIG91dHB1dF9yb3cgPSAqKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBkZXN0LT5pbWFnZSwKKyAgICAgICAgIChKRElNRU5TSU9OKXJvdywgKEpESU1FTlNJT04pMSwgRkFMU0UpOworICAgICAgcmVkID0gcmxlX3Jvd1swXTsKKyAgICAgIGdyZWVuID0gcmxlX3Jvd1sxXTsKKyAgICAgIGJsdWUgPSBybGVfcm93WzJdOworICAgICAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICAgICAqcmVkKysgPSBHRVRKU0FNUExFKCpvdXRwdXRfcm93KyspOworICAgICAgICAqZ3JlZW4rKyA9IEdFVEpTQU1QTEUoKm91dHB1dF9yb3crKyk7CisgICAgICAgICpibHVlKysgPSBHRVRKU0FNUExFKCpvdXRwdXRfcm93KyspOworICAgICAgfQorICAgICAgcmxlX3B1dHJvdyhybGVfcm93LCAoaW50KWNpbmZvLT5vdXRwdXRfd2lkdGgsICZoZWFkZXIpOworI2lmZGVmIFBST0dSRVNTX1JFUE9SVAorICAgICAgaWYgKHByb2dyZXNzICE9IE5VTEwpIHsKKyAgICAgICAgcHJvZ3Jlc3MtPnB1Yi5wYXNzX2NvdW50ZXIrKzsKKyAgICAgICAgKCpwcm9ncmVzcy0+cHViLnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKWNpbmZvKTsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgfQorCisjaWZkZWYgUFJPR1JFU1NfUkVQT1JUCisgIGlmIChwcm9ncmVzcyAhPSBOVUxMKQorICAgIHByb2dyZXNzLT5jb21wbGV0ZWRfZXh0cmFfcGFzc2VzKys7CisjZW5kaWYKKworICAvKiBFbWl0IGZpbGUgdHJhaWxlciAqLworICBybGVfcHV0ZW9mKCZoZWFkZXIpOworICBmZmx1c2goZGVzdC0+cHViLm91dHB1dF9maWxlKTsKKyAgaWYgKGZlcnJvcihkZXN0LT5wdWIub3V0cHV0X2ZpbGUpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRklMRV9XUklURSk7Cit9CisKKworLyoKKyAqIFRoZSBtb2R1bGUgc2VsZWN0aW9uIHJvdXRpbmUgZm9yIFJMRSBmb3JtYXQgb3V0cHV0LgorICovCisKK0dMT0JBTChkanBlZ19kZXN0X3B0cikKK2ppbml0X3dyaXRlX3JsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBybGVfZGVzdF9wdHIgZGVzdDsKKworICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QsIGZpbGwgaW4gbWV0aG9kIHBvaW50ZXJzICovCisgIGRlc3QgPSAocmxlX2Rlc3RfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJsZV9kZXN0X3N0cnVjdCkpOworICBkZXN0LT5wdWIuc3RhcnRfb3V0cHV0ID0gc3RhcnRfb3V0cHV0X3JsZTsKKyAgZGVzdC0+cHViLmZpbmlzaF9vdXRwdXQgPSBmaW5pc2hfb3V0cHV0X3JsZTsKKyAgZGVzdC0+cHViLmNhbGNfYnVmZmVyX2RpbWVuc2lvbnMgPSBOVUxMOworCisgIC8qIENhbGN1bGF0ZSBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBzbyB3ZSBjYW4gYWxsb2NhdGUgc3BhY2UgKi8KKyAganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKGNpbmZvKTsKKworICAvKiBBbGxvY2F0ZSBhIHdvcmsgYXJyYXkgZm9yIG91dHB1dCB0byB0aGUgUkxFIGxpYnJhcnkuICovCisgIGRlc3QtPnJsZV9yb3cgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgIGNpbmZvLT5vdXRwdXRfd2lkdGgsIChKRElNRU5TSU9OKWNpbmZvLT5vdXRwdXRfY29tcG9uZW50cyk7CisKKyAgLyogQWxsb2NhdGUgYSB2aXJ0dWFsIGFycmF5IHRvIGhvbGQgdGhlIGltYWdlLiAqLworICBkZXN0LT5pbWFnZSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X3NhcnJheSkKKyAgICAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAoSkRJTUVOU0lPTikoY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50cyksCisgICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0LCAoSkRJTUVOU0lPTikxKTsKKworICByZXR1cm4gKGRqcGVnX2Rlc3RfcHRyKWRlc3Q7Cit9CisKKyNlbmRpZiAvKiBSTEVfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cnRhcmdhLmMgYi9zcmMvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby93cnRhcmdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmYTkyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL3dydGFyZ2EuYwpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIHdydGFyZ2EuYworICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBELiBSLiBDb21tYW5kZXIuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FLmlqZworICogZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gd3JpdGUgb3V0cHV0IGltYWdlcyBpbiBUYXJnYSBmb3JtYXQuCisgKgorICogVGhlc2Ugcm91dGluZXMgbWF5IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBub24tVW5peCBlbnZpcm9ubWVudHMgb3IKKyAqIHNwZWNpYWxpemVkIGFwcGxpY2F0aW9ucy4gIEFzIHRoZXkgc3RhbmQsIHRoZXkgYXNzdW1lIG91dHB1dCB0bworICogYW4gb3JkaW5hcnkgc3RkaW8gc3RyZWFtLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgY29udHJpYnV0ZWQgYnkgTGVlIERhbmllbCBDcm9ja2VyLgorICovCisKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKworI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAorCisKKy8qCisgKiBUbyBzdXBwb3J0IDEyLWJpdCBKUEVHIGRhdGEsIHdlJ2QgaGF2ZSB0byBzY2FsZSBvdXRwdXQgZG93biB0byA4IGJpdHMuCisgKiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSAhPSA4CisgIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDgtYml0IEpTQU1QTEVzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KKyNlbmRpZgorCisKKy8qIFByaXZhdGUgdmVyc2lvbiBvZiBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBjaGFyICppb2J1ZmZlcjsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBJL08gYnVmZmVyICovCisgIEpESU1FTlNJT04gYnVmZmVyX3dpZHRoOyAgICAgIC8qIHdpZHRoIG9mIG9uZSByb3cgKi8KK30gdGdhX2Rlc3Rfc3RydWN0OworCit0eXBlZGVmIHRnYV9kZXN0X3N0cnVjdCAqdGdhX2Rlc3RfcHRyOworCisKK0xPQ0FMKHZvaWQpCit3cml0ZV9oZWFkZXIoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sIGludCBudW1fY29sb3JzKQorLyogQ3JlYXRlIGFuZCB3cml0ZSBhIFRhcmdhIGhlYWRlciAqLworeworICBjaGFyIHRhcmdhaGVhZGVyWzE4XTsKKworICAvKiBTZXQgdW51c2VkIGZpZWxkcyBvZiBoZWFkZXIgdG8gMCAqLworICBNRU1aRVJPKHRhcmdhaGVhZGVyLCBzaXplb2YodGFyZ2FoZWFkZXIpKTsKKworICBpZiAobnVtX2NvbG9ycyA+IDApIHsKKyAgICB0YXJnYWhlYWRlclsxXSA9IDE7ICAgICAgICAgLyogY29sb3IgbWFwIHR5cGUgMSAqLworICAgIHRhcmdhaGVhZGVyWzVdID0gKGNoYXIpKG51bV9jb2xvcnMgJiAweEZGKTsKKyAgICB0YXJnYWhlYWRlcls2XSA9IChjaGFyKShudW1fY29sb3JzID4+IDgpOworICAgIHRhcmdhaGVhZGVyWzddID0gMjQ7ICAgICAgICAvKiAyNCBiaXRzIHBlciBjbWFwIGVudHJ5ICovCisgIH0KKworICB0YXJnYWhlYWRlclsxMl0gPSAoY2hhcikoY2luZm8tPm91dHB1dF93aWR0aCAmIDB4RkYpOworICB0YXJnYWhlYWRlclsxM10gPSAoY2hhcikoY2luZm8tPm91dHB1dF93aWR0aCA+PiA4KTsKKyAgdGFyZ2FoZWFkZXJbMTRdID0gKGNoYXIpKGNpbmZvLT5vdXRwdXRfaGVpZ2h0ICYgMHhGRik7CisgIHRhcmdhaGVhZGVyWzE1XSA9IChjaGFyKShjaW5mby0+b3V0cHV0X2hlaWdodCA+PiA4KTsKKyAgdGFyZ2FoZWFkZXJbMTddID0gMHgyMDsgICAgICAgLyogVG9wLWRvd24sIG5vbi1pbnRlcmxhY2VkICovCisKKyAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgeworICAgIHRhcmdhaGVhZGVyWzJdID0gMzsgICAgICAgICAvKiBpbWFnZSB0eXBlID0gdW5jb21wcmVzc2VkIGdyYXlzY2FsZSAqLworICAgIHRhcmdhaGVhZGVyWzE2XSA9IDg7ICAgICAgICAvKiBiaXRzIHBlciBwaXhlbCAqLworICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBtdXN0IGJlIFJHQiAqLworICAgIGlmIChudW1fY29sb3JzID4gMCkgeworICAgICAgdGFyZ2FoZWFkZXJbMl0gPSAxOyAgICAgICAvKiBpbWFnZSB0eXBlID0gY29sb3JtYXBwZWQgUkdCICovCisgICAgICB0YXJnYWhlYWRlclsxNl0gPSA4OworICAgIH0gZWxzZSB7CisgICAgICB0YXJnYWhlYWRlclsyXSA9IDI7ICAgICAgIC8qIGltYWdlIHR5cGUgPSB1bmNvbXByZXNzZWQgUkdCICovCisgICAgICB0YXJnYWhlYWRlclsxNl0gPSAyNDsKKyAgICB9CisgIH0KKworICBpZiAoSkZXUklURShkaW5mby0+b3V0cHV0X2ZpbGUsIHRhcmdhaGVhZGVyLCAxOCkgIT0gKHNpemVfdCkxOCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOworfQorCisKKy8qCisgKiBXcml0ZSBzb21lIHBpeGVsIGRhdGEuCisgKiBJbiB0aGlzIG1vZHVsZSByb3dzX3N1cHBsaWVkIHdpbGwgYWx3YXlzIGJlIDEuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwdXRfcGl4ZWxfcm93cyhqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKy8qIHVzZWQgZm9yIHVucXVhbnRpemVkIGZ1bGwtY29sb3Igb3V0cHV0ICovCit7CisgIHRnYV9kZXN0X3B0ciBkZXN0ID0gKHRnYV9kZXN0X3B0cilkaW5mbzsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIGNoYXIgKm91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisKKyAgaW5wdHIgPSBkZXN0LT5wdWIuYnVmZmVyWzBdOworICBvdXRwdHIgPSBkZXN0LT5pb2J1ZmZlcjsKKyAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIG91dHB0clswXSA9IChjaGFyKUdFVEpTQU1QTEUoaW5wdHJbMl0pOyAvKiBSR0IgdG8gQkdSIG9yZGVyICovCisgICAgb3V0cHRyWzFdID0gKGNoYXIpR0VUSlNBTVBMRShpbnB0clsxXSk7CisgICAgb3V0cHRyWzJdID0gKGNoYXIpR0VUSlNBTVBMRShpbnB0clswXSk7CisgICAgaW5wdHIgKz0gMywgb3V0cHRyICs9IDM7CisgIH0KKyAgKHZvaWQpSkZXUklURShkZXN0LT5wdWIub3V0cHV0X2ZpbGUsIGRlc3QtPmlvYnVmZmVyLCBkZXN0LT5idWZmZXJfd2lkdGgpOworfQorCitNRVRIT0RERUYodm9pZCkKK3B1dF9ncmF5X3Jvd3Moal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCisgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKy8qIHVzZWQgZm9yIGdyYXlzY2FsZSBPUiBxdWFudGl6ZWQgY29sb3Igb3V0cHV0ICovCit7CisgIHRnYV9kZXN0X3B0ciBkZXN0ID0gKHRnYV9kZXN0X3B0cilkaW5mbzsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIGNoYXIgKm91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisKKyAgaW5wdHIgPSBkZXN0LT5wdWIuYnVmZmVyWzBdOworICBvdXRwdHIgPSBkZXN0LT5pb2J1ZmZlcjsKKyAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgeworICAgICpvdXRwdHIrKyA9IChjaGFyKUdFVEpTQU1QTEUoKmlucHRyKyspOworICB9CisgICh2b2lkKUpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBkZXN0LT5pb2J1ZmZlciwgZGVzdC0+YnVmZmVyX3dpZHRoKTsKK30KKworCisvKgorICogV3JpdGUgc29tZSBkZW1hcHBlZCBwaXhlbCBkYXRhIHdoZW4gY29sb3IgcXVhbnRpemF0aW9uIGlzIGluIGVmZmVjdC4KKyAqIEZvciBUYXJnYSwgdGhpcyBpcyBvbmx5IGFwcGxpZWQgdG8gZ3JheXNjYWxlIGRhdGEuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwdXRfZGVtYXBwZWRfZ3JheShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKKyAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKK3sKKyAgdGdhX2Rlc3RfcHRyIGRlc3QgPSAodGdhX2Rlc3RfcHRyKWRpbmZvOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsKKyAgcmVnaXN0ZXIgY2hhciAqb3V0cHRyOworICByZWdpc3RlciBKU0FNUFJPVyBjb2xvcl9tYXAwID0gY2luZm8tPmNvbG9ybWFwWzBdOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKworICBpbnB0ciA9IGRlc3QtPnB1Yi5idWZmZXJbMF07CisgIG91dHB0ciA9IGRlc3QtPmlvYnVmZmVyOworICBmb3IgKGNvbCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CisgICAgKm91dHB0cisrID0gKGNoYXIpR0VUSlNBTVBMRShjb2xvcl9tYXAwW0dFVEpTQU1QTEUoKmlucHRyKyspXSk7CisgIH0KKyAgKHZvaWQpSkZXUklURShkZXN0LT5wdWIub3V0cHV0X2ZpbGUsIGRlc3QtPmlvYnVmZmVyLCBkZXN0LT5idWZmZXJfd2lkdGgpOworfQorCisKKy8qCisgKiBTdGFydHVwOiB3cml0ZSB0aGUgZmlsZSBoZWFkZXIuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9vdXRwdXRfdGdhKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQoreworICB0Z2FfZGVzdF9wdHIgZGVzdCA9ICh0Z2FfZGVzdF9wdHIpZGluZm87CisgIGludCBudW1fY29sb3JzLCBpOworICBGSUxFICpvdXRmaWxlOworCisgIGlmIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpIHsKKyAgICAvKiBUYXJnYSBkb2Vzbid0IGhhdmUgYSBtYXBwZWQgZ3JheXNjYWxlIGZvcm1hdCwgc28gd2Ugd2lsbCAqLworICAgIC8qIGRlbWFwIHF1YW50aXplZCBncmF5IG91dHB1dC4gIE5ldmVyIGVtaXQgYSBjb2xvcm1hcC4gKi8KKyAgICB3cml0ZV9oZWFkZXIoY2luZm8sIGRpbmZvLCAwKTsKKyAgICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykKKyAgICAgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IHB1dF9kZW1hcHBlZF9ncmF5OworICAgIGVsc2UKKyAgICAgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IHB1dF9ncmF5X3Jvd3M7CisgIH0gZWxzZSBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7CisgICAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpIHsKKyAgICAgIC8qIFdlIG9ubHkgc3VwcG9ydCA4LWJpdCBjb2xvcm1hcCBpbmRleGVzLCBzbyBvbmx5IDI1NiBjb2xvcnMgKi8KKyAgICAgIG51bV9jb2xvcnMgPSBjaW5mby0+YWN0dWFsX251bWJlcl9vZl9jb2xvcnM7CisgICAgICBpZiAobnVtX2NvbG9ycyA+IDI1NikKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfVE9PX01BTllfQ09MT1JTLCBudW1fY29sb3JzKTsKKyAgICAgIHdyaXRlX2hlYWRlcihjaW5mbywgZGluZm8sIG51bV9jb2xvcnMpOworICAgICAgLyogV3JpdGUgdGhlIGNvbG9ybWFwLiAgTm90ZSBUYXJnYSB1c2VzIEJHUiBieXRlIG9yZGVyICovCisgICAgICBvdXRmaWxlID0gZGVzdC0+cHViLm91dHB1dF9maWxlOworICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jb2xvcnM7IGkrKykgeworICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY2luZm8tPmNvbG9ybWFwWzJdW2ldKSwgb3V0ZmlsZSk7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjaW5mby0+Y29sb3JtYXBbMV1baV0pLCBvdXRmaWxlKTsKKyAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOworICAgICAgfQorICAgICAgZGVzdC0+cHViLnB1dF9waXhlbF9yb3dzID0gcHV0X2dyYXlfcm93czsKKyAgICB9IGVsc2UgeworICAgICAgd3JpdGVfaGVhZGVyKGNpbmZvLCBkaW5mbywgMCk7CisgICAgICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBwdXRfcGl4ZWxfcm93czsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9UR0FfQ09MT1JTUEFDRSk7CisgIH0KK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfb3V0cHV0X3RnYShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbykKK3sKKyAgLyogTWFrZSBzdXJlIHdlIHdyb3RlIHRoZSBvdXRwdXQgZmlsZSBPSyAqLworICBmZmx1c2goZGluZm8tPm91dHB1dF9maWxlKTsKKyAgaWYgKGZlcnJvcihkaW5mby0+b3V0cHV0X2ZpbGUpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRklMRV9XUklURSk7Cit9CisKKworLyoKKyAqIFJlLWNhbGN1bGF0ZSBidWZmZXIgZGltZW5zaW9ucyBiYXNlZCBvbiBvdXRwdXQgZGltZW5zaW9ucy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2NhbGNfYnVmZmVyX2RpbWVuc2lvbnNfdGdhKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQoreworICB0Z2FfZGVzdF9wdHIgZGVzdCA9ICh0Z2FfZGVzdF9wdHIpZGluZm87CisKKyAgZGVzdC0+YnVmZmVyX3dpZHRoID0gY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50czsKK30KKworCisvKgorICogVGhlIG1vZHVsZSBzZWxlY3Rpb24gcm91dGluZSBmb3IgVGFyZ2EgZm9ybWF0IG91dHB1dC4KKyAqLworCitHTE9CQUwoZGpwZWdfZGVzdF9wdHIpCitqaW5pdF93cml0ZV90YXJnYShqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICB0Z2FfZGVzdF9wdHIgZGVzdDsKKworICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QsIGZpbGwgaW4gbWV0aG9kIHBvaW50ZXJzICovCisgIGRlc3QgPSAodGdhX2Rlc3RfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRnYV9kZXN0X3N0cnVjdCkpOworICBkZXN0LT5wdWIuc3RhcnRfb3V0cHV0ID0gc3RhcnRfb3V0cHV0X3RnYTsKKyAgZGVzdC0+cHViLmZpbmlzaF9vdXRwdXQgPSBmaW5pc2hfb3V0cHV0X3RnYTsKKyAgZGVzdC0+cHViLmNhbGNfYnVmZmVyX2RpbWVuc2lvbnMgPSBjYWxjX2J1ZmZlcl9kaW1lbnNpb25zX3RnYTsKKworICAvKiBDYWxjdWxhdGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgc28gd2UgY2FuIGFsbG9jYXRlIHNwYWNlICovCisgIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyhjaW5mbyk7CisKKyAgLyogQ3JlYXRlIEkvTyBidWZmZXIuICovCisgIGRlc3QtPnB1Yi5jYWxjX2J1ZmZlcl9kaW1lbnNpb25zKGNpbmZvLCAoZGpwZWdfZGVzdF9wdHIpZGVzdCk7CisgIGRlc3QtPmlvYnVmZmVyID0gKGNoYXIgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0ciljaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKGRlc3QtPmJ1ZmZlcl93aWR0aCAqIHNpemVvZihjaGFyKSkpOworCisgIC8qIENyZWF0ZSBkZWNvbXByZXNzb3Igb3V0cHV0IGJ1ZmZlci4gKi8KKyAgZGVzdC0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorICAgICgoal9jb21tb25fcHRyKWNpbmZvLCBKUE9PTF9JTUFHRSwgZGVzdC0+YnVmZmVyX3dpZHRoLCAoSkRJTUVOU0lPTikxKTsKKyAgZGVzdC0+cHViLmJ1ZmZlcl9oZWlnaHQgPSAxOworCisgIHJldHVybiAoZGpwZWdfZGVzdF9wdHIpZGVzdDsKK30KKworI2VuZGlmIC8qIFRBUkdBX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL25pbmphLnB5IGIvc3JjL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL25pbmphLnB5CmluZGV4IDlkY2Y5OWEuLmM3YmRkOTYgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9uaW5qYS5weQorKysgYi9zcmMvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbmluamEucHkKQEAgLTc4LDcgKzc4LDggQEAKIGlzX3dpbmRvd3MgPSBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnV2luZG93cycKIAogbWljcm9zb2Z0X2ZsYXZvcnMgPSBbCi0gICAgJ3dpbicsICd3aW4td2luMzInLCAnd2luLXdpbjMyLWxpYicsICd4YjEnLCAneGIxLWZ1dHVyZScsICd4YjEteW91dHViZXR2JworICAgICd3aW4nLCAnd2luLXdpbjMyJywgJ3dpbi13aW4zMi1saWInLAorICAgICd4YjEnLCAneGIxLWZ1dHVyZScsICd4YjEteW91dHViZXR2JywgJ3hiMS1tYWluYXBwYmV0YScKIF0KIHNvbnlfZmxhdm9ycyA9IFsncHMzJywgJ3BzNCcsICdwczQtdnInXQogd2luZG93c19ob3N0X2ZsYXZvcnMgPSBtaWNyb3NvZnRfZmxhdm9ycyArIHNvbnlfZmxhdm9ycwpkaWZmIC0tZ2l0IGEvc3JjL3Y4L3NyYy9iYXNlL2F0b21pY29wcy5oIGIvc3JjL3Y4L3NyYy9iYXNlL2F0b21pY29wcy5oCmluZGV4IGMxNjBiMzMuLmM1ZWMxZWEgMTAwNjQ0Ci0tLSBhL3NyYy92OC9zcmMvYmFzZS9hdG9taWNvcHMuaAorKysgYi9zcmMvdjgvc3JjL2Jhc2UvYXRvbWljb3BzLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvYXRvbWljLmgiCiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfSU5UUk9EVUNFX0FUT01JQzhfVkVSU0lPTgorI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTAKICNlcnJvciBZb3VyIHZlcnNpb24gb2YgU3RhcmJvYXJkIG11c3Qgc3VwcG9ydCBTYkF0b21pYzggaW4gb3JkZXIgdG8gdXNlIFY4LgogI2VuZGlmCiAK